From 99aa8c60282c7b8072eb35eb9ac815702f5bf586 Mon Sep 17 00:00:00 2001 From: "William R. Otte" Date: Tue, 4 Mar 2008 14:51:23 +0000 Subject: undoing accidental deletion --- ACE/ACE-INSTALL.html | 3010 +++ ACE/ACE.mwc | 32 + ACE/ACEXML/ACEXML.mwc | 5 + ACE/ACEXML/ChangeLog | 1142 ++ ACE/ACEXML/Makefile.am | 17 + ACE/ACEXML/README | 17 + ACE/ACEXML/apps/Makefile.am | 13 + .../apps/svcconf/ACEXML_XML_Svc_Conf_Parser.pc.in | 11 + ACE/ACEXML/apps/svcconf/Makefile.am | 79 + ACE/ACEXML/apps/svcconf/README | 4 + ACE/ACEXML/apps/svcconf/Svcconf.cpp | 124 + ACE/ACEXML/apps/svcconf/Svcconf.h | 44 + ACE/ACEXML/apps/svcconf/Svcconf_Handler.cpp | 770 + ACE/ACEXML/apps/svcconf/Svcconf_Handler.h | 276 + ACE/ACEXML/apps/svcconf/Svcconf_Handler.inl | 133 + ACE/ACEXML/apps/svcconf/svcconf.dtd | 60 + ACE/ACEXML/apps/svcconf/svcconf.mpc | 6 + ACE/ACEXML/common/ACEXML.pc.in | 11 + ACE/ACEXML/common/ACEXML_Export.h | 49 + ACE/ACEXML/common/Attributes.cpp | 11 + ACE/ACEXML/common/Attributes.h | 130 + ACE/ACEXML/common/AttributesImpl.cpp | 293 + ACE/ACEXML/common/AttributesImpl.h | 309 + ACE/ACEXML/common/AttributesImpl.inl | 154 + ACE/ACEXML/common/Attributes_Def_Builder.cpp | 14 + ACE/ACEXML/common/Attributes_Def_Builder.h | 153 + ACE/ACEXML/common/CharStream.cpp | 7 + ACE/ACEXML/common/CharStream.h | 88 + ACE/ACEXML/common/ContentHandler.cpp | 11 + ACE/ACEXML/common/ContentHandler.h | 132 + ACE/ACEXML/common/DTDHandler.cpp | 11 + ACE/ACEXML/common/DTDHandler.h | 78 + ACE/ACEXML/common/DTD_Manager.cpp | 8 + ACE/ACEXML/common/DTD_Manager.h | 82 + ACE/ACEXML/common/DefaultHandler.cpp | 143 + ACE/ACEXML/common/DefaultHandler.h | 176 + ACE/ACEXML/common/Element_Def_Builder.cpp | 9 + ACE/ACEXML/common/Element_Def_Builder.h | 133 + ACE/ACEXML/common/Encoding.cpp | 59 + ACE/ACEXML/common/Encoding.h | 61 + ACE/ACEXML/common/EntityResolver.cpp | 11 + ACE/ACEXML/common/EntityResolver.h | 61 + ACE/ACEXML/common/Env.cpp | 34 + ACE/ACEXML/common/Env.h | 72 + ACE/ACEXML/common/Env.inl | 25 + ACE/ACEXML/common/ErrorHandler.cpp | 11 + ACE/ACEXML/common/ErrorHandler.h | 75 + ACE/ACEXML/common/Exception.cpp | 36 + ACE/ACEXML/common/Exception.h | 87 + ACE/ACEXML/common/Exception.inl | 13 + ACE/ACEXML/common/FileCharStream.cpp | 256 + ACE/ACEXML/common/FileCharStream.h | 130 + ACE/ACEXML/common/HttpCharStream.cpp | 476 + ACE/ACEXML/common/HttpCharStream.h | 140 + ACE/ACEXML/common/InputSource.cpp | 105 + ACE/ACEXML/common/InputSource.h | 131 + ACE/ACEXML/common/Locator.cpp | 11 + ACE/ACEXML/common/Locator.h | 74 + ACE/ACEXML/common/LocatorImpl.cpp | 49 + ACE/ACEXML/common/LocatorImpl.h | 159 + ACE/ACEXML/common/LocatorImpl.inl | 65 + ACE/ACEXML/common/Makefile.am | 159 + ACE/ACEXML/common/Mem_Map_Stream.cpp | 264 + ACE/ACEXML/common/Mem_Map_Stream.h | 191 + ACE/ACEXML/common/NamespaceSupport.cpp | 247 + ACE/ACEXML/common/NamespaceSupport.h | 235 + ACE/ACEXML/common/SAXExceptions.cpp | 250 + ACE/ACEXML/common/SAXExceptions.h | 208 + ACE/ACEXML/common/SAXExceptions.inl | 57 + ACE/ACEXML/common/StrCharStream.cpp | 132 + ACE/ACEXML/common/StrCharStream.h | 102 + ACE/ACEXML/common/StreamFactory.cpp | 56 + ACE/ACEXML/common/StreamFactory.h | 58 + ACE/ACEXML/common/Transcode.cpp | 311 + ACE/ACEXML/common/Transcode.h | 172 + ACE/ACEXML/common/URL_Addr.cpp | 178 + ACE/ACEXML/common/URL_Addr.h | 137 + ACE/ACEXML/common/URL_Addr.inl | 65 + ACE/ACEXML/common/Validator.cpp | 8 + ACE/ACEXML/common/Validator.h | 64 + ACE/ACEXML/common/XMLFilter.h | 56 + ACE/ACEXML/common/XMLFilterImpl.cpp | 314 + ACE/ACEXML/common/XMLFilterImpl.h | 270 + ACE/ACEXML/common/XMLFilterImpl.inl | 14 + ACE/ACEXML/common/XMLReader.cpp | 11 + ACE/ACEXML/common/XMLReader.h | 132 + ACE/ACEXML/common/XML_Codecs.cpp | 94 + ACE/ACEXML/common/XML_Codecs.h | 73 + ACE/ACEXML/common/XML_Macros.h | 456 + ACE/ACEXML/common/XML_Types.h | 83 + ACE/ACEXML/common/XML_Util.cpp | 46 + ACE/ACEXML/common/XML_Util.h | 33 + ACE/ACEXML/common/ZipCharStream.cpp | 255 + ACE/ACEXML/common/ZipCharStream.h | 144 + ACE/ACEXML/common/codecs.mpb | 8 + ACE/ACEXML/common/common.mpc | 33 + ACE/ACEXML/docs/TODO.txt | 17 + ACE/ACEXML/docs/bugs.txt | 17 + ACE/ACEXML/docs/guidelines.txt | 39 + ACE/ACEXML/docs/parser_features.txt | 25 + ACE/ACEXML/docs/readme.txt | 36 + ACE/ACEXML/examples/Makefile.am | 13 + ACE/ACEXML/examples/SAXPrint/Makefile.am | 75 + ACE/ACEXML/examples/SAXPrint/Print_Handler.cpp | 238 + ACE/ACEXML/examples/SAXPrint/Print_Handler.h | 171 + ACE/ACEXML/examples/SAXPrint/SAXPrint.mpc | 6 + ACE/ACEXML/examples/SAXPrint/SAXPrint_Handler.cpp | 226 + ACE/ACEXML/examples/SAXPrint/SAXPrint_Handler.h | 180 + ACE/ACEXML/examples/SAXPrint/SAXPrint_Handler.inl | 13 + ACE/ACEXML/examples/SAXPrint/broken.xml | 5 + ACE/ACEXML/examples/SAXPrint/main.cpp | 207 + ACE/ACEXML/examples/SAXPrint/namespaces.xml | 95 + ACE/ACEXML/examples/SAXPrint/ns.svc.conf.xml | 46 + ACE/ACEXML/examples/SAXPrint/simple.svcconf.xml | 38 + ACE/ACEXML/examples/SAXPrint/svc.conf.xml | 58 + ACE/ACEXML/parser/Makefile.am | 13 + .../debug_validator/Debug_Attributes_Builder.cpp | 211 + .../debug_validator/Debug_Attributes_Builder.h | 166 + .../parser/debug_validator/Debug_DTD_Manager.cpp | 71 + .../parser/debug_validator/Debug_DTD_Manager.h | 76 + .../debug_validator/Debug_DTD_Manager_Export.h | 38 + .../debug_validator/Debug_Element_Builder.cpp | 144 + .../parser/debug_validator/Debug_Element_Builder.h | 123 + ACE/ACEXML/parser/debug_validator/Element_Tree.cpp | 72 + ACE/ACEXML/parser/debug_validator/Element_Tree.h | 160 + ACE/ACEXML/parser/debug_validator/Element_Tree.inl | 92 + ACE/ACEXML/parser/parser/ACEXML_Parser.pc.in | 11 + ACE/ACEXML/parser/parser/Entity_Manager.cpp | 20 + ACE/ACEXML/parser/parser/Entity_Manager.h | 100 + ACE/ACEXML/parser/parser/Entity_Manager.inl | 66 + ACE/ACEXML/parser/parser/Makefile.am | 73 + ACE/ACEXML/parser/parser/Parser.cpp | 3352 ++++ ACE/ACEXML/parser/parser/Parser.h | 858 + ACE/ACEXML/parser/parser/Parser.inl | 257 + ACE/ACEXML/parser/parser/ParserContext.cpp | 16 + ACE/ACEXML/parser/parser/ParserContext.h | 84 + ACE/ACEXML/parser/parser/ParserContext.inl | 77 + ACE/ACEXML/parser/parser/ParserInternals.cpp | 394 + ACE/ACEXML/parser/parser/ParserInternals.h | 102 + ACE/ACEXML/parser/parser/Parser_export.h | 47 + ACE/ACEXML/parser/parser/parser.mpc | 14 + ACE/ACEXML/tests/ContentHandler_Test.cpp | 101 + ACE/ACEXML/tests/HttpCharStream_Test.cpp | 40 + ACE/ACEXML/tests/Makefile.am | 222 + ACE/ACEXML/tests/NamespaceSupport_Test.cpp | 150 + ACE/ACEXML/tests/Transcoder_Test.cpp | 71 + ACE/ACEXML/tests/tests.mpc | 30 + ACE/ACEXML/tests/util/Makefile.am | 70 + ACE/ACEXML/tests/util/test.cpp | 111 + ACE/ACEXML/tests/util/util.mpc | 4 + ACE/ASNMP/COPYRIGHT | 68 + ACE/ASNMP/ChangeLog | 538 + ACE/ASNMP/Makefile.am | 16 + ACE/ASNMP/README | 177 + ACE/ASNMP/TO-DO | 3 + ACE/ASNMP/agent/Makefile.am | 45 + ACE/ASNMP/agent/agent.mpc | 14 + ACE/ASNMP/agent/agent_impl.cpp | 158 + ACE/ASNMP/agent/agent_impl.h | 52 + ACE/ASNMP/agent/main.cpp | 28 + ACE/ASNMP/agent/snmp_agent.cpp | 102 + ACE/ASNMP/agent/snmp_agent.h | 48 + ACE/ASNMP/asnmp-overview.html | 134 + ACE/ASNMP/asnmp/ASNMP_Export.h | 58 + ACE/ASNMP/asnmp/ChangeLog | 227 + ACE/ASNMP/asnmp/Makefile.am | 66 + ACE/ASNMP/asnmp/TODO | 25 + ACE/ASNMP/asnmp/address.cpp | 2705 +++ ACE/ASNMP/asnmp/address.h | 845 + ACE/ASNMP/asnmp/asn1.cpp | 1734 ++ ACE/ASNMP/asnmp/asn1.h | 345 + ACE/ASNMP/asnmp/asnmp.mpc | 26 + ACE/ASNMP/asnmp/counter.cpp | 107 + ACE/ASNMP/asnmp/counter.h | 79 + ACE/ASNMP/asnmp/ctr64.cpp | 213 + ACE/ASNMP/asnmp/ctr64.h | 111 + ACE/ASNMP/asnmp/enttraps.h | 147 + ACE/ASNMP/asnmp/gauge.cpp | 114 + ACE/ASNMP/asnmp/gauge.h | 79 + ACE/ASNMP/asnmp/integer.cpp | 230 + ACE/ASNMP/asnmp/integer.h | 142 + ACE/ASNMP/asnmp/octet.cpp | 594 + ACE/ASNMP/asnmp/octet.h | 152 + ACE/ASNMP/asnmp/oid.cpp | 803 + ACE/ASNMP/asnmp/oid.h | 175 + ACE/ASNMP/asnmp/oid_def.h | 84 + ACE/ASNMP/asnmp/pdu.cpp | 502 + ACE/ASNMP/asnmp/pdu.h | 219 + ACE/ASNMP/asnmp/sagent.cpp | 97 + ACE/ASNMP/asnmp/sagent.h | 82 + ACE/ASNMP/asnmp/smi.h | 147 + ACE/ASNMP/asnmp/smival.h | 102 + ACE/ASNMP/asnmp/snmp.cpp | 286 + ACE/ASNMP/asnmp/snmp.h | 137 + ACE/ASNMP/asnmp/snmperrs.h | 210 + ACE/ASNMP/asnmp/target.cpp | 323 + ACE/ASNMP/asnmp/target.h | 260 + ACE/ASNMP/asnmp/timetick.cpp | 147 + ACE/ASNMP/asnmp/timetick.h | 85 + ACE/ASNMP/asnmp/transaction.cpp | 207 + ACE/ASNMP/asnmp/transaction.h | 83 + ACE/ASNMP/asnmp/transaction_result.h | 26 + ACE/ASNMP/asnmp/vb.cpp | 399 + ACE/ASNMP/asnmp/vb.h | 207 + ACE/ASNMP/asnmp/wpdu.cpp | 523 + ACE/ASNMP/asnmp/wpdu.h | 84 + ACE/ASNMP/examples/Makefile.am | 17 + ACE/ASNMP/examples/get/Makefile.am | 62 + ACE/ASNMP/examples/get/get.cpp | 206 + ACE/ASNMP/examples/get/get.mpc | 23 + ACE/ASNMP/examples/get/get_async.cpp | 215 + ACE/ASNMP/examples/next/Makefile.am | 41 + ACE/ASNMP/examples/next/next.cpp | 204 + ACE/ASNMP/examples/next/next.mpc | 13 + ACE/ASNMP/examples/set/Makefile.am | 41 + ACE/ASNMP/examples/set/set.cpp | 275 + ACE/ASNMP/examples/set/set.mpc | 13 + ACE/ASNMP/examples/trap/Makefile.am | 41 + ACE/ASNMP/examples/trap/trap.cpp | 192 + ACE/ASNMP/examples/trap/trap.mpc | 12 + ACE/ASNMP/examples/walk/Makefile.am | 41 + ACE/ASNMP/examples/walk/walk.cpp | 270 + ACE/ASNMP/examples/walk/walk.mpc | 12 + ACE/ASNMP/mibs/RFC1213-MIB.my | 2618 +++ ACE/ASNMP/tests/Address_Test.cpp | 550 + ACE/ASNMP/tests/Counter64_Test.cpp | 156 + ACE/ASNMP/tests/Counter_Test.cpp | 136 + ACE/ASNMP/tests/Gauge_Test.cpp | 133 + ACE/ASNMP/tests/Integer_Test.cpp | 200 + ACE/ASNMP/tests/Makefile.am | 173 + ACE/ASNMP/tests/Octet_Test.cpp | 156 + ACE/ASNMP/tests/Oid_Test.cpp | 181 + ACE/ASNMP/tests/Target_Test.cpp | 145 + ACE/ASNMP/tests/Varbind_Test.cpp | 197 + ACE/ASNMP/tests/run_tests.bat | 44 + ACE/ASNMP/tests/run_tests.sh | 61 + ACE/ASNMP/tests/test_config.h | 177 + ACE/ASNMP/tests/tests.mpc | 91 + ACE/AUTHORS | 13 + ACE/COPYING | 124 + ACE/ChangeLog | 269 + ACE/ChangeLogs/ChangeLog-00a | 12664 ++++++++++++ ACE/ChangeLogs/ChangeLog-00b | 3845 ++++ ACE/ChangeLogs/ChangeLog-01a | 8155 ++++++++ ACE/ChangeLogs/ChangeLog-01b | 8242 ++++++++ ACE/ChangeLogs/ChangeLog-02a | 9018 +++++++++ ACE/ChangeLogs/ChangeLog-02b | 7227 +++++++ ACE/ChangeLogs/ChangeLog-03a | 1339 ++ ACE/ChangeLogs/ChangeLog-03b | 6184 ++++++ ACE/ChangeLogs/ChangeLog-03c | 14852 ++++++++++++++ ACE/ChangeLogs/ChangeLog-04a | 10491 ++++++++++ ACE/ChangeLogs/ChangeLog-04b | 8063 ++++++++ ACE/ChangeLogs/ChangeLog-05a | 5879 ++++++ ACE/ChangeLogs/ChangeLog-05b | 2815 +++ ACE/ChangeLogs/ChangeLog-05c | 6715 +++++++ ACE/ChangeLogs/ChangeLog-06a | 4912 +++++ ACE/ChangeLogs/ChangeLog-06b | 8927 +++++++++ ACE/ChangeLogs/ChangeLog-07a | 3198 +++ ACE/ChangeLogs/ChangeLog-07b | 7459 +++++++ ACE/ChangeLogs/ChangeLog-08a | 5373 +++++ ACE/ChangeLogs/ChangeLog-93 | 52 + ACE/ChangeLogs/ChangeLog-94 | 1027 + ACE/ChangeLogs/ChangeLog-95 | 4179 ++++ ACE/ChangeLogs/ChangeLog-96a | 3889 ++++ ACE/ChangeLogs/ChangeLog-96b | 5878 ++++++ ACE/ChangeLogs/ChangeLog-97a | 9203 +++++++++ ACE/ChangeLogs/ChangeLog-97b | 9182 +++++++++ ACE/ChangeLogs/ChangeLog-98a | 6588 ++++++ ACE/ChangeLogs/ChangeLog-98b | 12943 ++++++++++++ ACE/ChangeLogs/ChangeLog-99a | 13411 +++++++++++++ ACE/ChangeLogs/ChangeLog-99b | 7290 +++++++ ACE/FAQ | 1847 ++ ACE/Kokyu/DSRT_CV_Dispatcher_Impl_T.cpp | 286 + ACE/Kokyu/DSRT_CV_Dispatcher_Impl_T.h | 86 + ACE/Kokyu/DSRT_Direct_Dispatcher_Impl_T.cpp | 380 + ACE/Kokyu/DSRT_Direct_Dispatcher_Impl_T.h | 92 + ACE/Kokyu/DSRT_Dispatch_Item_T.cpp | 35 + ACE/Kokyu/DSRT_Dispatch_Item_T.h | 103 + ACE/Kokyu/DSRT_Dispatch_Item_T.inl | 70 + ACE/Kokyu/DSRT_Dispatcher_Impl_T.cpp | 56 + ACE/Kokyu/DSRT_Dispatcher_Impl_T.h | 210 + ACE/Kokyu/DSRT_Dispatcher_Impl_T.inl | 57 + ACE/Kokyu/DSRT_Sched_Queue_T.cpp | 281 + ACE/Kokyu/DSRT_Sched_Queue_T.h | 230 + ACE/Kokyu/Default_Dispatcher_Impl.cpp | 170 + ACE/Kokyu/Default_Dispatcher_Impl.h | 77 + ACE/Kokyu/Default_Dispatcher_Impl.inl | 11 + ACE/Kokyu/Dispatch_Deferrer.cpp | 112 + ACE/Kokyu/Dispatch_Deferrer.h | 95 + ACE/Kokyu/Dispatch_Deferrer.inl | 29 + ACE/Kokyu/Dispatcher_Impl.cpp | 19 + ACE/Kokyu/Dispatcher_Impl.h | 74 + ACE/Kokyu/Dispatcher_Impl.inl | 31 + ACE/Kokyu/Dispatcher_Task.cpp | 188 + ACE/Kokyu/Dispatcher_Task.h | 106 + ACE/Kokyu/Dispatcher_Task.inl | 81 + ACE/Kokyu/Kokyu.cpp | 55 + ACE/Kokyu/Kokyu.dsui | 37 + ACE/Kokyu/Kokyu.h | 115 + ACE/Kokyu/Kokyu.inl | 10 + ACE/Kokyu/Kokyu.mpc | 27 + ACE/Kokyu/Kokyu.mwc | 5 + ACE/Kokyu/Kokyu.pc.in | 11 + ACE/Kokyu/Kokyu_defs.cpp | 66 + ACE/Kokyu/Kokyu_defs.h | 191 + ACE/Kokyu/Kokyu_defs.inl | 86 + ACE/Kokyu/Kokyu_dsrt.cpp | 179 + ACE/Kokyu/Kokyu_dsrt.h | 177 + ACE/Kokyu/Kokyu_dsrt.inl | 11 + ACE/Kokyu/Makefile.am | 87 + ACE/Kokyu/README | 22 + ACE/Kokyu/docs/Kokyu.html | 416 + ACE/Kokyu/docs/KokyuEC.jpg | Bin 0 -> 58534 bytes ACE/Kokyu/docs/kokyu1.jpg | Bin 0 -> 86414 bytes ACE/Kokyu/docs/kokyu2.jpg | Bin 0 -> 82664 bytes ACE/Kokyu/kokyu_config.h | 10 + ACE/Kokyu/kokyu_export.h | 55 + ACE/Kokyu/tests/DSRT_MIF/DSRT_MIF.mpc | 7 + ACE/Kokyu/tests/DSRT_MIF/MIF.cpp | 185 + ACE/Kokyu/tests/DSRT_MIF/Makefile.am | 41 + ACE/Kokyu/tests/DSRT_MIF/svc.conf | 4 + ACE/Kokyu/tests/DSRT_MIF/svc.conf.xml | 8 + ACE/Kokyu/tests/EDF/EDF.mpc | 6 + ACE/Kokyu/tests/EDF/Makefile.am | 36 + ACE/Kokyu/tests/EDF/README | 24 + ACE/Kokyu/tests/EDF/test.cpp | 162 + ACE/Kokyu/tests/FIFO/FIFO.mpc | 6 + ACE/Kokyu/tests/FIFO/Makefile.am | 36 + ACE/Kokyu/tests/FIFO/README | 24 + ACE/Kokyu/tests/FIFO/test.cpp | 166 + ACE/Kokyu/tests/Makefile.am | 15 + ACE/Makefile.am | 36 + ACE/NEWS | 1275 ++ ACE/PROBLEM-REPORT-FORM | 90 + ACE/README | 222 + ACE/Release | 212 + ACE/THANKS | 2265 +++ ACE/VERSION | 11 + ACE/ace/ACE.cpp | 3409 ++++ ACE/ace/ACE.h | 825 + ACE/ace/ACE.inl | 350 + ACE/ace/ACE.pc.in | 10 + ACE/ace/ACE_crc32.cpp | 161 + ACE/ace/ACE_crc_ccitt.cpp | 128 + ACE/ace/ACE_export.h | 76 + ACE/ace/ARGV.cpp | 359 + ACE/ace/ARGV.h | 306 + ACE/ace/ARGV.inl | 104 + ACE/ace/ATM_Acceptor.cpp | 309 + ACE/ace/ATM_Acceptor.h | 123 + ACE/ace/ATM_Acceptor.inl | 43 + ACE/ace/ATM_Addr.cpp | 522 + ACE/ace/ATM_Addr.h | 197 + ACE/ace/ATM_Addr.inl | 37 + ACE/ace/ATM_Connector.cpp | 138 + ACE/ace/ATM_Connector.h | 164 + ACE/ace/ATM_Connector.inl | 132 + ACE/ace/ATM_Params.cpp | 20 + ACE/ace/ATM_Params.h | 214 + ACE/ace/ATM_Params.inl | 235 + ACE/ace/ATM_QoS.cpp | 631 + ACE/ace/ATM_QoS.h | 115 + ACE/ace/ATM_QoS.inl | 29 + ACE/ace/ATM_Stream.cpp | 290 + ACE/ace/ATM_Stream.h | 107 + ACE/ace/ATM_Stream.inl | 133 + ACE/ace/Acceptor.cpp | 1226 ++ ACE/ace/Acceptor.h | 684 + ACE/ace/Activation_Queue.cpp | 138 + ACE/ace/Activation_Queue.h | 173 + ACE/ace/Activation_Queue.inl | 31 + ACE/ace/Active_Map_Manager.cpp | 9 + ACE/ace/Active_Map_Manager.h | 116 + ACE/ace/Active_Map_Manager.inl | 95 + ACE/ace/Active_Map_Manager_T.cpp | 22 + ACE/ace/Active_Map_Manager_T.h | 211 + ACE/ace/Active_Map_Manager_T.inl | 311 + ACE/ace/Addr.cpp | 73 + ACE/ace/Addr.h | 104 + ACE/ace/Addr.inl | 61 + ACE/ace/Arg_Shifter.cpp | 230 + ACE/ace/Arg_Shifter.h | 221 + ACE/ace/Argv_Type_Converter.cpp | 204 + ACE/ace/Argv_Type_Converter.h | 119 + ACE/ace/Argv_Type_Converter.inl | 44 + ACE/ace/Array.h | 29 + ACE/ace/Array_Base.cpp | 235 + ACE/ace/Array_Base.h | 256 + ACE/ace/Array_Base.inl | 146 + ACE/ace/Array_Map.cpp | 299 + ACE/ace/Array_Map.h | 300 + ACE/ace/Array_Map.inl | 133 + ACE/ace/Assert.cpp | 24 + ACE/ace/Assert.h | 38 + ACE/ace/Asynch_Acceptor.cpp | 516 + ACE/ace/Asynch_Acceptor.h | 281 + ACE/ace/Asynch_Connector.cpp | 296 + ACE/ace/Asynch_Connector.h | 171 + ACE/ace/Asynch_IO.cpp | 1411 ++ ACE/ace/Asynch_IO.h | 1690 ++ ACE/ace/Asynch_IO_Impl.cpp | 117 + ACE/ace/Asynch_IO_Impl.h | 816 + ACE/ace/Asynch_IO_Impl.inl | 106 + ACE/ace/Asynch_Pseudo_Task.cpp | 130 + ACE/ace/Asynch_Pseudo_Task.h | 73 + ACE/ace/Atomic_Op.cpp | 310 + ACE/ace/Atomic_Op.h | 260 + ACE/ace/Atomic_Op.inl | 335 + ACE/ace/Atomic_Op_Sparc.c | 187 + ACE/ace/Atomic_Op_Sparc.h | 14 + ACE/ace/Atomic_Op_T.cpp | 82 + ACE/ace/Atomic_Op_T.h | 369 + ACE/ace/Atomic_Op_T.inl | 340 + ACE/ace/Auto_Event.cpp | 49 + ACE/ace/Auto_Event.h | 73 + ACE/ace/Auto_Event.inl | 12 + ACE/ace/Auto_Functor.cpp | 39 + ACE/ace/Auto_Functor.h | 127 + ACE/ace/Auto_Functor.inl | 134 + ACE/ace/Auto_IncDec_T.cpp | 34 + ACE/ace/Auto_IncDec_T.h | 91 + ACE/ace/Auto_IncDec_T.inl | 25 + ACE/ace/Auto_Ptr.cpp | 21 + ACE/ace/Auto_Ptr.h | 242 + ACE/ace/Auto_Ptr.inl | 171 + ACE/ace/Barrier.cpp | 197 + ACE/ace/Barrier.h | 215 + ACE/ace/Barrier.inl | 22 + ACE/ace/Base_Thread_Adapter.cpp | 120 + ACE/ace/Base_Thread_Adapter.h | 186 + ACE/ace/Base_Thread_Adapter.inl | 48 + ACE/ace/Based_Pointer_Repository.cpp | 119 + ACE/ace/Based_Pointer_Repository.h | 91 + ACE/ace/Based_Pointer_T.cpp | 121 + ACE/ace/Based_Pointer_T.h | 205 + ACE/ace/Based_Pointer_T.inl | 139 + ACE/ace/Basic_Stats.cpp | 78 + ACE/ace/Basic_Stats.h | 87 + ACE/ace/Basic_Stats.inl | 53 + ACE/ace/Basic_Types.cpp | 139 + ACE/ace/Basic_Types.h | 890 + ACE/ace/Basic_Types.inl | 954 + ACE/ace/Bound_Ptr.h | 388 + ACE/ace/Bound_Ptr.inl | 494 + ACE/ace/CDR_Base.cpp | 799 + ACE/ace/CDR_Base.h | 353 + ACE/ace/CDR_Base.inl | 255 + ACE/ace/CDR_Size.cpp | 244 + ACE/ace/CDR_Size.h | 241 + ACE/ace/CDR_Size.inl | 424 + ACE/ace/CDR_Stream.cpp | 1892 ++ ACE/ace/CDR_Stream.h | 1364 ++ ACE/ace/CDR_Stream.inl | 1700 ++ ACE/ace/CE_Screen_Output.cpp | 158 + ACE/ace/CE_Screen_Output.h | 109 + ACE/ace/CORBA_macros.h | 575 + ACE/ace/Cache_Map_Manager_T.cpp | 420 + ACE/ace/Cache_Map_Manager_T.h | 405 + ACE/ace/Cache_Map_Manager_T.inl | 245 + ACE/ace/Cached_Connect_Strategy_T.cpp | 734 + ACE/ace/Cached_Connect_Strategy_T.h | 262 + ACE/ace/Caching_Strategies_T.cpp | 59 + ACE/ace/Caching_Strategies_T.h | 552 + ACE/ace/Caching_Strategies_T.inl | 456 + ACE/ace/Caching_Utility_T.cpp | 499 + ACE/ace/Caching_Utility_T.h | 347 + ACE/ace/Capabilities.cpp | 355 + ACE/ace/Capabilities.h | 221 + ACE/ace/Capabilities.inl | 52 + ACE/ace/Cleanup.cpp | 192 + ACE/ace/Cleanup.h | 137 + ACE/ace/Cleanup.inl | 12 + ACE/ace/Cleanup_Strategies_T.cpp | 95 + ACE/ace/Cleanup_Strategies_T.h | 155 + ACE/ace/Codecs.cpp | 234 + ACE/ace/Codecs.h | 121 + ACE/ace/Codeset_IBM1047.cpp | 312 + ACE/ace/Codeset_IBM1047.h | 128 + ACE/ace/Codeset_Registry.cpp | 111 + ACE/ace/Codeset_Registry.h | 104 + ACE/ace/Codeset_Registry.inl | 102 + ACE/ace/Codeset_Registry_db.cpp | 29 + ACE/ace/Codeset_Symbols.h | 220 + ACE/ace/Condition_Recursive_Thread_Mutex.cpp | 129 + ACE/ace/Condition_Recursive_Thread_Mutex.h | 118 + ACE/ace/Condition_T.cpp | 123 + ACE/ace/Condition_T.h | 167 + ACE/ace/Condition_T.inl | 51 + ACE/ace/Condition_Thread_Mutex.cpp | 126 + ACE/ace/Condition_Thread_Mutex.h | 190 + ACE/ace/Condition_Thread_Mutex.inl | 74 + ACE/ace/Configuration.cpp | 2148 ++ ACE/ace/Configuration.h | 896 + ACE/ace/Configuration.inl | 13 + ACE/ace/Configuration_Import_Export.cpp | 670 + ACE/ace/Configuration_Import_Export.h | 215 + ACE/ace/Connection_Recycling_Strategy.cpp | 13 + ACE/ace/Connection_Recycling_Strategy.h | 63 + ACE/ace/Connector.cpp | 964 + ACE/ace/Connector.h | 563 + ACE/ace/Containers.cpp | 12 + ACE/ace/Containers.h | 71 + ACE/ace/Containers.inl | 25 + ACE/ace/Containers_T.cpp | 1930 ++ ACE/ace/Containers_T.h | 2024 ++ ACE/ace/Containers_T.inl | 479 + ACE/ace/Copy_Disabled.cpp | 23 + ACE/ace/Copy_Disabled.h | 65 + ACE/ace/Countdown_Time.cpp | 66 + ACE/ace/Countdown_Time.h | 80 + ACE/ace/DEV.cpp | 43 + ACE/ace/DEV.h | 78 + ACE/ace/DEV.inl | 18 + ACE/ace/DEV_Addr.cpp | 108 + ACE/ace/DEV_Addr.h | 90 + ACE/ace/DEV_Addr.inl | 51 + ACE/ace/DEV_Connector.cpp | 53 + ACE/ace/DEV_Connector.h | 110 + ACE/ace/DEV_Connector.inl | 34 + ACE/ace/DEV_IO.cpp | 131 + ACE/ace/DEV_IO.h | 185 + ACE/ace/DEV_IO.inl | 126 + ACE/ace/DLL.cpp | 267 + ACE/ace/DLL.h | 196 + ACE/ace/DLL_Manager.cpp | 787 + ACE/ace/DLL_Manager.h | 269 + ACE/ace/Date_Time.cpp | 10 + ACE/ace/Date_Time.h | 125 + ACE/ace/Date_Time.inl | 219 + ACE/ace/Default_Constants.h | 573 + ACE/ace/Dev_Poll_Reactor.cpp | 2513 +++ ACE/ace/Dev_Poll_Reactor.h | 1252 ++ ACE/ace/Dev_Poll_Reactor.inl | 228 + ACE/ace/Dirent.cpp | 7 + ACE/ace/Dirent.h | 122 + ACE/ace/Dirent.inl | 99 + ACE/ace/Dirent_Selector.cpp | 59 + ACE/ace/Dirent_Selector.h | 75 + ACE/ace/Dirent_Selector.inl | 19 + ACE/ace/Dump.cpp | 141 + ACE/ace/Dump.h | 172 + ACE/ace/Dump_T.cpp | 48 + ACE/ace/Dump_T.h | 82 + ACE/ace/Dynamic.cpp | 34 + ACE/ace/Dynamic.h | 75 + ACE/ace/Dynamic.inl | 34 + ACE/ace/Dynamic_Message_Strategy.cpp | 205 + ACE/ace/Dynamic_Message_Strategy.h | 217 + ACE/ace/Dynamic_Message_Strategy.inl | 75 + ACE/ace/Dynamic_Service.cpp | 63 + ACE/ace/Dynamic_Service.h | 89 + ACE/ace/Dynamic_Service.inl | 40 + ACE/ace/Dynamic_Service_Base.cpp | 101 + ACE/ace/Dynamic_Service_Base.h | 74 + ACE/ace/Dynamic_Service_Dependency.cpp | 51 + ACE/ace/Dynamic_Service_Dependency.h | 70 + ACE/ace/Encoding_Converter.cpp | 12 + ACE/ace/Encoding_Converter.h | 70 + ACE/ace/Encoding_Converter_Factory.cpp | 74 + ACE/ace/Encoding_Converter_Factory.h | 54 + ACE/ace/Env_Value_T.cpp | 12 + ACE/ace/Env_Value_T.h | 166 + ACE/ace/Env_Value_T.inl | 60 + ACE/ace/Event.cpp | 93 + ACE/ace/Event.h | 143 + ACE/ace/Event.inl | 18 + ACE/ace/Event_Handler.cpp | 396 + ACE/ace/Event_Handler.h | 388 + ACE/ace/Event_Handler.inl | 12 + ACE/ace/Event_Handler_T.cpp | 125 + ACE/ace/Event_Handler_T.h | 191 + ACE/ace/Event_Handler_T.inl | 135 + ACE/ace/Exception_Macros.h | 55 + ACE/ace/FIFO.cpp | 78 + ACE/ace/FIFO.h | 85 + ACE/ace/FIFO.inl | 25 + ACE/ace/FIFO_Recv.cpp | 88 + ACE/ace/FIFO_Recv.h | 85 + ACE/ace/FIFO_Recv.inl | 24 + ACE/ace/FIFO_Recv_Msg.cpp | 67 + ACE/ace/FIFO_Recv_Msg.h | 138 + ACE/ace/FIFO_Recv_Msg.inl | 111 + ACE/ace/FIFO_Send.cpp | 58 + ACE/ace/FIFO_Send.h | 75 + ACE/ace/FIFO_Send.inl | 24 + ACE/ace/FIFO_Send_Msg.cpp | 80 + ACE/ace/FIFO_Send_Msg.h | 91 + ACE/ace/FIFO_Send_Msg.inl | 53 + ACE/ace/FILE.cpp | 147 + ACE/ace/FILE.h | 139 + ACE/ace/FILE.inl | 18 + ACE/ace/FILE_Addr.cpp | 124 + ACE/ace/FILE_Addr.h | 89 + ACE/ace/FILE_Addr.inl | 34 + ACE/ace/FILE_Connector.cpp | 84 + ACE/ace/FILE_Connector.h | 113 + ACE/ace/FILE_Connector.inl | 36 + ACE/ace/FILE_IO.cpp | 142 + ACE/ace/FILE_IO.h | 170 + ACE/ace/FILE_IO.inl | 152 + ACE/ace/File_Lock.cpp | 72 + ACE/ace/File_Lock.h | 170 + ACE/ace/File_Lock.inl | 96 + ACE/ace/Filecache.cpp | 754 + ACE/ace/Filecache.h | 353 + ACE/ace/FlReactor/ACE_FlReactor.pc.in | 11 + ACE/ace/FlReactor/ACE_FlReactor_export.h | 58 + ACE/ace/FlReactor/FlReactor.cpp | 330 + ACE/ace/FlReactor/FlReactor.h | 110 + ACE/ace/Flag_Manip.cpp | 95 + ACE/ace/Flag_Manip.h | 58 + ACE/ace/Flag_Manip.inl | 26 + ACE/ace/FoxReactor/ACE_FoxReactor.pc.in | 11 + ACE/ace/FoxReactor/ACE_FoxReactor_export.h | 58 + ACE/ace/FoxReactor/FoxReactor.cpp | 337 + ACE/ace/FoxReactor/FoxReactor.h | 115 + ACE/ace/Framework_Component.cpp | 280 + ACE/ace/Framework_Component.h | 210 + ACE/ace/Framework_Component.inl | 39 + ACE/ace/Framework_Component_T.cpp | 33 + ACE/ace/Framework_Component_T.h | 71 + ACE/ace/Free_List.cpp | 157 + ACE/ace/Free_List.h | 150 + ACE/ace/Functor.cpp | 43 + ACE/ace/Functor.h | 593 + ACE/ace/Functor.inl | 284 + ACE/ace/Functor_String.cpp | 7 + ACE/ace/Functor_String.h | 141 + ACE/ace/Functor_String.inl | 56 + ACE/ace/Functor_T.cpp | 49 + ACE/ace/Functor_T.h | 158 + ACE/ace/Functor_T.inl | 42 + ACE/ace/Future.cpp | 436 + ACE/ace/Future.h | 387 + ACE/ace/Future_Set.cpp | 136 + ACE/ace/Future_Set.h | 146 + ACE/ace/Get_Opt.cpp | 730 + ACE/ace/Get_Opt.h | 474 + ACE/ace/Get_Opt.inl | 43 + ACE/ace/Global_Macros.h | 1133 ++ ACE/ace/Guard_T.cpp | 61 + ACE/ace/Guard_T.h | 365 + ACE/ace/Guard_T.inl | 170 + ACE/ace/Handle_Gobbler.h | 68 + ACE/ace/Handle_Gobbler.inl | 78 + ACE/ace/Handle_Ops.cpp | 48 + ACE/ace/Handle_Ops.h | 50 + ACE/ace/Handle_Set.cpp | 570 + ACE/ace/Handle_Set.h | 240 + ACE/ace/Handle_Set.inl | 193 + ACE/ace/Hash_Cache_Map_Manager_T.cpp | 232 + ACE/ace/Hash_Cache_Map_Manager_T.h | 214 + ACE/ace/Hash_Cache_Map_Manager_T.inl | 73 + ACE/ace/Hash_Map_Manager.h | 31 + ACE/ace/Hash_Map_Manager_T.cpp | 530 + ACE/ace/Hash_Map_Manager_T.h | 1274 ++ ACE/ace/Hash_Map_Manager_T.inl | 1253 ++ ACE/ace/Hash_Map_With_Allocator_T.cpp | 35 + ACE/ace/Hash_Map_With_Allocator_T.h | 112 + ACE/ace/Hash_Map_With_Allocator_T.inl | 82 + ACE/ace/Hash_Multi_Map_Manager_T.cpp | 605 + ACE/ace/Hash_Multi_Map_Manager_T.h | 967 + ACE/ace/Hash_Multi_Map_Manager_T.inl | 994 + ACE/ace/Hashable.cpp | 36 + ACE/ace/Hashable.h | 65 + ACE/ace/Hashable.inl | 14 + ACE/ace/High_Res_Timer.cpp | 537 + ACE/ace/High_Res_Timer.h | 315 + ACE/ace/High_Res_Timer.inl | 154 + ACE/ace/ICMP_Socket.cpp | 186 + ACE/ace/ICMP_Socket.h | 110 + ACE/ace/INET_Addr.cpp | 1168 ++ ACE/ace/INET_Addr.h | 399 + ACE/ace/INET_Addr.inl | 257 + ACE/ace/IOStream.cpp | 665 + ACE/ace/IOStream.h | 512 + ACE/ace/IOStream_T.cpp | 247 + ACE/ace/IOStream_T.h | 297 + ACE/ace/IOStream_T.inl | 123 + ACE/ace/IO_Cntl_Msg.cpp | 51 + ACE/ace/IO_Cntl_Msg.h | 112 + ACE/ace/IO_Cntl_Msg.inl | 61 + ACE/ace/IO_SAP.cpp | 142 + ACE/ace/IO_SAP.h | 96 + ACE/ace/IO_SAP.inl | 42 + ACE/ace/IPC_SAP.cpp | 193 + ACE/ace/IPC_SAP.h | 96 + ACE/ace/IPC_SAP.inl | 40 + ACE/ace/If_Then_Else.h | 89 + ACE/ace/Init_ACE.cpp | 45 + ACE/ace/Init_ACE.h | 62 + ACE/ace/Intrusive_List.cpp | 153 + ACE/ace/Intrusive_List.h | 144 + ACE/ace/Intrusive_List.inl | 40 + ACE/ace/Intrusive_List_Node.cpp | 27 + ACE/ace/Intrusive_List_Node.h | 85 + ACE/ace/Intrusive_List_Node.inl | 31 + ACE/ace/LOCK_SOCK_Acceptor.cpp | 35 + ACE/ace/LOCK_SOCK_Acceptor.h | 67 + ACE/ace/LSOCK.cpp | 181 + ACE/ace/LSOCK.h | 84 + ACE/ace/LSOCK.inl | 43 + ACE/ace/LSOCK_Acceptor.cpp | 143 + ACE/ace/LSOCK_Acceptor.h | 95 + ACE/ace/LSOCK_CODgram.cpp | 62 + ACE/ace/LSOCK_CODgram.h | 78 + ACE/ace/LSOCK_CODgram.inl | 30 + ACE/ace/LSOCK_Connector.cpp | 59 + ACE/ace/LSOCK_Connector.h | 91 + ACE/ace/LSOCK_Connector.inl | 27 + ACE/ace/LSOCK_Dgram.cpp | 71 + ACE/ace/LSOCK_Dgram.h | 74 + ACE/ace/LSOCK_Dgram.inl | 22 + ACE/ace/LSOCK_Stream.cpp | 137 + ACE/ace/LSOCK_Stream.h | 82 + ACE/ace/LSOCK_Stream.inl | 25 + ACE/ace/Lib_Find.cpp | 769 + ACE/ace/Lib_Find.h | 131 + ACE/ace/Local_Memory_Pool.cpp | 144 + ACE/ace/Local_Memory_Pool.h | 133 + ACE/ace/Local_Name_Space.cpp | 169 + ACE/ace/Local_Name_Space.h | 132 + ACE/ace/Local_Name_Space_T.cpp | 966 + ACE/ace/Local_Name_Space_T.h | 280 + ACE/ace/Local_Tokens.cpp | 1623 ++ ACE/ace/Local_Tokens.h | 1121 ++ ACE/ace/Local_Tokens.inl | 289 + ACE/ace/Lock.cpp | 88 + ACE/ace/Lock.h | 161 + ACE/ace/Lock.inl | 12 + ACE/ace/Lock_Adapter_T.cpp | 117 + ACE/ace/Lock_Adapter_T.h | 123 + ACE/ace/Lock_Adapter_T.inl | 16 + ACE/ace/Log_Msg.cpp | 2510 +++ ACE/ace/Log_Msg.h | 746 + ACE/ace/Log_Msg.inl | 235 + ACE/ace/Log_Msg_Backend.cpp | 14 + ACE/ace/Log_Msg_Backend.h | 88 + ACE/ace/Log_Msg_Callback.cpp | 13 + ACE/ace/Log_Msg_Callback.h | 69 + ACE/ace/Log_Msg_IPC.cpp | 111 + ACE/ace/Log_Msg_IPC.h | 79 + ACE/ace/Log_Msg_NT_Event_Log.cpp | 162 + ACE/ace/Log_Msg_NT_Event_Log.h | 72 + ACE/ace/Log_Msg_UNIX_Syslog.cpp | 207 + ACE/ace/Log_Msg_UNIX_Syslog.h | 76 + ACE/ace/Log_Priority.h | 85 + ACE/ace/Log_Record.cpp | 412 + ACE/ace/Log_Record.h | 223 + ACE/ace/Log_Record.inl | 123 + ACE/ace/Logging_Strategy.cpp | 566 + ACE/ace/Logging_Strategy.h | 195 + ACE/ace/MEM_Acceptor.cpp | 265 + ACE/ace/MEM_Acceptor.h | 192 + ACE/ace/MEM_Acceptor.inl | 103 + ACE/ace/MEM_Addr.cpp | 170 + ACE/ace/MEM_Addr.h | 155 + ACE/ace/MEM_Addr.inl | 111 + ACE/ace/MEM_Connector.cpp | 149 + ACE/ace/MEM_Connector.h | 179 + ACE/ace/MEM_Connector.inl | 30 + ACE/ace/MEM_IO.cpp | 541 + ACE/ace/MEM_IO.h | 310 + ACE/ace/MEM_IO.inl | 233 + ACE/ace/MEM_SAP.cpp | 97 + ACE/ace/MEM_SAP.h | 169 + ACE/ace/MEM_SAP.inl | 64 + ACE/ace/MEM_Stream.cpp | 47 + ACE/ace/MEM_Stream.h | 158 + ACE/ace/MEM_Stream.inl | 180 + ACE/ace/MMAP_Memory_Pool.cpp | 578 + ACE/ace/MMAP_Memory_Pool.h | 327 + ACE/ace/MMAP_Memory_Pool.inl | 21 + ACE/ace/Makefile.am | 1419 ++ ACE/ace/Malloc.cpp | 187 + ACE/ace/Malloc.h | 396 + ACE/ace/Malloc.inl | 26 + ACE/ace/Malloc_Allocator.cpp | 361 + ACE/ace/Malloc_Allocator.h | 146 + ACE/ace/Malloc_Allocator.inl | 16 + ACE/ace/Malloc_Base.h | 168 + ACE/ace/Malloc_T.cpp | 1262 ++ ACE/ace/Malloc_T.h | 931 + ACE/ace/Malloc_T.inl | 184 + ACE/ace/Managed_Object.cpp | 25 + ACE/ace/Managed_Object.h | 168 + ACE/ace/Managed_Object.inl | 23 + ACE/ace/Manual_Event.cpp | 48 + ACE/ace/Manual_Event.h | 74 + ACE/ace/Manual_Event.inl | 12 + ACE/ace/Map.h | 32 + ACE/ace/Map_Manager.cpp | 701 + ACE/ace/Map_Manager.h | 719 + ACE/ace/Map_Manager.inl | 729 + ACE/ace/Map_T.cpp | 1343 ++ ACE/ace/Map_T.h | 1611 ++ ACE/ace/Map_T.inl | 415 + ACE/ace/Mem_Map.cpp | 310 + ACE/ace/Mem_Map.h | 235 + ACE/ace/Mem_Map.inl | 238 + ACE/ace/Memory_Pool.h | 31 + ACE/ace/Message_Block.cpp | 1273 ++ ACE/ace/Message_Block.h | 871 + ACE/ace/Message_Block.inl | 508 + ACE/ace/Message_Block_T.cpp | 54 + ACE/ace/Message_Block_T.h | 88 + ACE/ace/Message_Block_T.inl | 31 + ACE/ace/Message_Queue.cpp | 28 + ACE/ace/Message_Queue.h | 237 + ACE/ace/Message_Queue.inl | 12 + ACE/ace/Message_Queue_NT.cpp | 237 + ACE/ace/Message_Queue_NT.h | 231 + ACE/ace/Message_Queue_NT.inl | 131 + ACE/ace/Message_Queue_T.cpp | 2814 +++ ACE/ace/Message_Queue_T.h | 1476 ++ ACE/ace/Message_Queue_Vx.cpp | 368 + ACE/ace/Message_Queue_Vx.h | 227 + ACE/ace/Message_Queue_Vx.inl | 19 + ACE/ace/Method_Object.h | 38 + ACE/ace/Method_Request.cpp | 30 + ACE/ace/Method_Request.h | 100 + ACE/ace/Metrics_Cache.h | 140 + ACE/ace/Metrics_Cache_T.cpp | 237 + ACE/ace/Metrics_Cache_T.h | 243 + ACE/ace/Metrics_Cache_T.inl | 240 + ACE/ace/Min_Max.h | 70 + ACE/ace/Module.cpp | 273 + ACE/ace/Module.h | 215 + ACE/ace/Module.inl | 65 + ACE/ace/Msg_WFMO_Reactor.cpp | 85 + ACE/ace/Msg_WFMO_Reactor.h | 120 + ACE/ace/Msg_WFMO_Reactor.inl | 35 + ACE/ace/Multihomed_INET_Addr.cpp | 300 + ACE/ace/Multihomed_INET_Addr.h | 198 + ACE/ace/Multihomed_INET_Addr.inl | 15 + ACE/ace/Mutex.cpp | 125 + ACE/ace/Mutex.h | 192 + ACE/ace/Mutex.inl | 175 + ACE/ace/NT_Service.cpp | 618 + ACE/ace/NT_Service.h | 439 + ACE/ace/NT_Service.inl | 85 + ACE/ace/Name_Proxy.cpp | 209 + ACE/ace/Name_Proxy.h | 101 + ACE/ace/Name_Request_Reply.cpp | 577 + ACE/ace/Name_Request_Reply.h | 265 + ACE/ace/Name_Space.cpp | 73 + ACE/ace/Name_Space.h | 165 + ACE/ace/Naming_Context.cpp | 647 + ACE/ace/Naming_Context.h | 387 + ACE/ace/Naming_Context.inl | 44 + ACE/ace/Netlink_Addr.cpp | 68 + ACE/ace/Netlink_Addr.h | 120 + ACE/ace/Netlink_Addr.inl | 51 + ACE/ace/Node.cpp | 46 + ACE/ace/Node.h | 85 + ACE/ace/Notification_Queue.cpp | 222 + ACE/ace/Notification_Queue.h | 156 + ACE/ace/Notification_Queue.inl | 47 + ACE/ace/Notification_Strategy.cpp | 22 + ACE/ace/Notification_Strategy.h | 75 + ACE/ace/Notification_Strategy.inl | 31 + ACE/ace/Null_Barrier.h | 59 + ACE/ace/Null_Condition.h | 85 + ACE/ace/Null_Mutex.h | 232 + ACE/ace/Null_Semaphore.h | 105 + ACE/ace/Numeric_Limits.h | 270 + ACE/ace/OS.cpp | 53 + ACE/ace/OS.h | 329 + ACE/ace/OS.inl | 93 + ACE/ace/OS_Dirent.h | 32 + ACE/ace/OS_Errno.cpp | 47 + ACE/ace/OS_Errno.h | 101 + ACE/ace/OS_Errno.inl | 67 + ACE/ace/OS_Log_Msg_Attributes.cpp | 9 + ACE/ace/OS_Log_Msg_Attributes.h | 90 + ACE/ace/OS_Log_Msg_Attributes.inl | 12 + ACE/ace/OS_Memory.h | 338 + ACE/ace/OS_NS_Thread.cpp | 5328 +++++ ACE/ace/OS_NS_Thread.h | 2026 ++ ACE/ace/OS_NS_Thread.inl | 3636 ++++ ACE/ace/OS_NS_arpa_inet.cpp | 53 + ACE/ace/OS_NS_arpa_inet.h | 74 + ACE/ace/OS_NS_arpa_inet.inl | 98 + ACE/ace/OS_NS_ctype.cpp | 11 + ACE/ace/OS_NS_ctype.h | 130 + ACE/ace/OS_NS_ctype.inl | 163 + ACE/ace/OS_NS_dirent.cpp | 274 + ACE/ace/OS_NS_dirent.h | 153 + ACE/ace/OS_NS_dirent.inl | 184 + ACE/ace/OS_NS_dlfcn.cpp | 10 + ACE/ace/OS_NS_dlfcn.h | 69 + ACE/ace/OS_NS_dlfcn.inl | 286 + ACE/ace/OS_NS_errno.cpp | 11 + ACE/ace/OS_NS_errno.h | 100 + ACE/ace/OS_NS_errno.inl | 83 + ACE/ace/OS_NS_fcntl.cpp | 245 + ACE/ace/OS_NS_fcntl.h | 83 + ACE/ace/OS_NS_fcntl.inl | 23 + ACE/ace/OS_NS_macros.h | 114 + ACE/ace/OS_NS_math.cpp | 10 + ACE/ace/OS_NS_math.h | 115 + ACE/ace/OS_NS_math.inl | 41 + ACE/ace/OS_NS_netdb.cpp | 421 + ACE/ace/OS_NS_netdb.h | 146 + ACE/ace/OS_NS_netdb.inl | 750 + ACE/ace/OS_NS_poll.cpp | 10 + ACE/ace/OS_NS_poll.h | 66 + ACE/ace/OS_NS_poll.inl | 45 + ACE/ace/OS_NS_pwd.cpp | 10 + ACE/ace/OS_NS_pwd.h | 81 + ACE/ace/OS_NS_pwd.inl | 120 + ACE/ace/OS_NS_regex.cpp | 10 + ACE/ace/OS_NS_regex.h | 65 + ACE/ace/OS_NS_regex.inl | 39 + ACE/ace/OS_NS_signal.cpp | 26 + ACE/ace/OS_NS_signal.h | 153 + ACE/ace/OS_NS_signal.inl | 232 + ACE/ace/OS_NS_stdio.cpp | 456 + ACE/ace/OS_NS_stdio.h | 530 + ACE/ace/OS_NS_stdio.inl | 1224 ++ ACE/ace/OS_NS_stdlib.cpp | 801 + ACE/ace/OS_NS_stdlib.h | 313 + ACE/ace/OS_NS_stdlib.inl | 499 + ACE/ace/OS_NS_string.cpp | 377 + ACE/ace/OS_NS_string.h | 471 + ACE/ace/OS_NS_string.inl | 560 + ACE/ace/OS_NS_strings.cpp | 84 + ACE/ace/OS_NS_strings.h | 86 + ACE/ace/OS_NS_strings.inl | 59 + ACE/ace/OS_NS_stropts.cpp | 195 + ACE/ace/OS_NS_stropts.h | 172 + ACE/ace/OS_NS_stropts.inl | 201 + ACE/ace/OS_NS_sys_mman.cpp | 10 + ACE/ace/OS_NS_sys_mman.h | 97 + ACE/ace/OS_NS_sys_mman.inl | 302 + ACE/ace/OS_NS_sys_msg.cpp | 10 + ACE/ace/OS_NS_sys_msg.h | 77 + ACE/ace/OS_NS_sys_msg.inl | 78 + ACE/ace/OS_NS_sys_resource.cpp | 10 + ACE/ace/OS_NS_sys_resource.h | 67 + ACE/ace/OS_NS_sys_resource.inl | 98 + ACE/ace/OS_NS_sys_select.cpp | 10 + ACE/ace/OS_NS_sys_select.h | 77 + ACE/ace/OS_NS_sys_select.inl | 80 + ACE/ace/OS_NS_sys_sendfile.cpp | 53 + ACE/ace/OS_NS_sys_sendfile.h | 65 + ACE/ace/OS_NS_sys_sendfile.inl | 24 + ACE/ace/OS_NS_sys_shm.cpp | 10 + ACE/ace/OS_NS_sys_shm.h | 74 + ACE/ace/OS_NS_sys_shm.inl | 76 + ACE/ace/OS_NS_sys_socket.cpp | 161 + ACE/ace/OS_NS_sys_socket.h | 302 + ACE/ace/OS_NS_sys_socket.inl | 993 + ACE/ace/OS_NS_sys_stat.cpp | 10 + ACE/ace/OS_NS_sys_stat.h | 149 + ACE/ace/OS_NS_sys_stat.inl | 292 + ACE/ace/OS_NS_sys_time.cpp | 10 + ACE/ace/OS_NS_sys_time.h | 69 + ACE/ace/OS_NS_sys_time.inl | 96 + ACE/ace/OS_NS_sys_uio.cpp | 130 + ACE/ace/OS_NS_sys_uio.h | 80 + ACE/ace/OS_NS_sys_uio.inl | 55 + ACE/ace/OS_NS_sys_utsname.cpp | 237 + ACE/ace/OS_NS_sys_utsname.h | 71 + ACE/ace/OS_NS_sys_wait.cpp | 9 + ACE/ace/OS_NS_sys_wait.h | 87 + ACE/ace/OS_NS_sys_wait.inl | 105 + ACE/ace/OS_NS_time.cpp | 634 + ACE/ace/OS_NS_time.h | 288 + ACE/ace/OS_NS_time.inl | 505 + ACE/ace/OS_NS_unistd.cpp | 859 + ACE/ace/OS_NS_unistd.h | 375 + ACE/ace/OS_NS_unistd.inl | 1193 ++ ACE/ace/OS_NS_wchar.cpp | 377 + ACE/ace/OS_NS_wchar.h | 199 + ACE/ace/OS_NS_wchar.inl | 87 + ACE/ace/OS_QoS.cpp | 476 + ACE/ace/OS_QoS.h | 449 + ACE/ace/OS_String.h | 32 + ACE/ace/OS_TLI.cpp | 9 + ACE/ace/OS_TLI.h | 285 + ACE/ace/OS_TLI.inl | 390 + ACE/ace/OS_Thread_Adapter.cpp | 153 + ACE/ace/OS_Thread_Adapter.h | 72 + ACE/ace/OS_main.cpp | 127 + ACE/ace/OS_main.h | 303 + ACE/ace/Obchunk.cpp | 36 + ACE/ace/Obchunk.h | 77 + ACE/ace/Obchunk.inl | 12 + ACE/ace/Object_Manager.cpp | 888 + ACE/ace/Object_Manager.h | 466 + ACE/ace/Object_Manager.inl | 40 + ACE/ace/Object_Manager_Base.cpp | 506 + ACE/ace/Object_Manager_Base.h | 248 + ACE/ace/Obstack.h | 31 + ACE/ace/Obstack_T.cpp | 226 + ACE/ace/Obstack_T.h | 134 + ACE/ace/Obstack_T.inl | 19 + ACE/ace/PI_Malloc.cpp | 165 + ACE/ace/PI_Malloc.h | 213 + ACE/ace/PI_Malloc.inl | 33 + ACE/ace/POSIX_Asynch_IO.cpp | 2416 +++ ACE/ace/POSIX_Asynch_IO.h | 1302 ++ ACE/ace/POSIX_CB_Proactor.cpp | 185 + ACE/ace/POSIX_CB_Proactor.h | 97 + ACE/ace/POSIX_Proactor.cpp | 2064 ++ ACE/ace/POSIX_Proactor.h | 659 + ACE/ace/POSIX_Proactor.inl | 13 + ACE/ace/Pagefile_Memory_Pool.cpp | 384 + ACE/ace/Pagefile_Memory_Pool.h | 201 + ACE/ace/Pagefile_Memory_Pool.inl | 54 + ACE/ace/Pair.h | 32 + ACE/ace/Pair_T.cpp | 16 + ACE/ace/Pair_T.h | 129 + ACE/ace/Pair_T.inl | 90 + ACE/ace/Parse_Node.cpp | 838 + ACE/ace/Parse_Node.h | 522 + ACE/ace/Ping_Socket.cpp | 377 + ACE/ace/Ping_Socket.h | 119 + ACE/ace/Ping_Socket.inl | 13 + ACE/ace/Pipe.cpp | 360 + ACE/ace/Pipe.h | 165 + ACE/ace/Pipe.inl | 188 + ACE/ace/Priority_Reactor.cpp | 188 + ACE/ace/Priority_Reactor.h | 100 + ACE/ace/Proactor.cpp | 1177 ++ ACE/ace/Proactor.h | 691 + ACE/ace/Proactor.inl | 80 + ACE/ace/Proactor_Impl.cpp | 21 + ACE/ace/Proactor_Impl.h | 265 + ACE/ace/Process.cpp | 1275 ++ ACE/ace/Process.h | 617 + ACE/ace/Process.inl | 412 + ACE/ace/Process_Manager.cpp | 1015 + ACE/ace/Process_Manager.h | 478 + ACE/ace/Process_Manager.inl | 13 + ACE/ace/Process_Mutex.cpp | 90 + ACE/ace/Process_Mutex.h | 216 + ACE/ace/Process_Mutex.inl | 118 + ACE/ace/Process_Semaphore.cpp | 111 + ACE/ace/Process_Semaphore.h | 161 + ACE/ace/Process_Semaphore.inl | 66 + ACE/ace/Profile_Timer.cpp | 438 + ACE/ace/Profile_Timer.h | 139 + ACE/ace/Profile_Timer.inl | 129 + ACE/ace/QoS/ACE_QoS.pc.in | 11 + ACE/ace/QoS/ACE_QoS_Export.h | 46 + ACE/ace/QoS/Makefile.am | 74 + ACE/ace/QoS/QoS_Decorator.cpp | 165 + ACE/ace/QoS/QoS_Decorator.h | 179 + ACE/ace/QoS/QoS_Manager.cpp | 41 + ACE/ace/QoS/QoS_Manager.h | 74 + ACE/ace/QoS/QoS_Session.h | 183 + ACE/ace/QoS/QoS_Session_Factory.cpp | 105 + ACE/ace/QoS/QoS_Session_Factory.h | 96 + ACE/ace/QoS/QoS_Session_Impl.cpp | 718 + ACE/ace/QoS/QoS_Session_Impl.h | 265 + ACE/ace/QoS/QoS_Session_Impl.inl | 229 + ACE/ace/QoS/README | 55 + ACE/ace/QoS/SOCK_Dgram_Mcast_QoS.cpp | 258 + ACE/ace/QoS/SOCK_Dgram_Mcast_QoS.h | 142 + ACE/ace/QoS/SOCK_Dgram_Mcast_QoS.inl | 57 + ACE/ace/QoS/qos.mpc | 17 + ACE/ace/QtReactor/ACE_QtReactor.pc.in | 11 + ACE/ace/QtReactor/ACE_QtReactor_export.h | 58 + ACE/ace/QtReactor/QtReactor.cpp | 644 + ACE/ace/QtReactor/QtReactor.h | 231 + ACE/ace/RB_Tree.cpp | 1204 ++ ACE/ace/RB_Tree.h | 904 + ACE/ace/RB_Tree.inl | 1169 ++ ACE/ace/README | 1876 ++ ACE/ace/RW_Mutex.cpp | 55 + ACE/ace/RW_Mutex.h | 141 + ACE/ace/RW_Mutex.inl | 83 + ACE/ace/RW_Process_Mutex.cpp | 54 + ACE/ace/RW_Process_Mutex.h | 133 + ACE/ace/RW_Process_Mutex.inl | 77 + ACE/ace/RW_Thread_Mutex.cpp | 45 + ACE/ace/RW_Thread_Mutex.h | 74 + ACE/ace/RW_Thread_Mutex.inl | 19 + ACE/ace/Reactor.cpp | 512 + ACE/ace/Reactor.h | 875 + ACE/ace/Reactor.inl | 498 + ACE/ace/Reactor_Impl.cpp | 15 + ACE/ace/Reactor_Impl.h | 569 + ACE/ace/Reactor_Notification_Strategy.cpp | 38 + ACE/ace/Reactor_Notification_Strategy.h | 66 + ACE/ace/Reactor_Notification_Strategy.inl | 19 + ACE/ace/Reactor_Timer_Interface.cpp | 16 + ACE/ace/Reactor_Timer_Interface.h | 60 + ACE/ace/Reactor_Token_T.cpp | 70 + ACE/ace/Reactor_Token_T.h | 93 + ACE/ace/Read_Buffer.cpp | 176 + ACE/ace/Read_Buffer.h | 129 + ACE/ace/Read_Buffer.inl | 32 + ACE/ace/Recursive_Thread_Mutex.cpp | 125 + ACE/ace/Recursive_Thread_Mutex.h | 194 + ACE/ace/Recursive_Thread_Mutex.inl | 95 + ACE/ace/Recyclable.cpp | 22 + ACE/ace/Recyclable.h | 79 + ACE/ace/Recyclable.inl | 20 + ACE/ace/Refcountable.cpp | 20 + ACE/ace/Refcountable.h | 58 + ACE/ace/Refcountable.inl | 31 + ACE/ace/Refcounted_Auto_Ptr.cpp | 18 + ACE/ace/Refcounted_Auto_Ptr.h | 199 + ACE/ace/Refcounted_Auto_Ptr.inl | 190 + ACE/ace/Registry.cpp | 1127 ++ ACE/ace/Registry.h | 559 + ACE/ace/Registry_Name_Space.cpp | 293 + ACE/ace/Registry_Name_Space.h | 140 + ACE/ace/Remote_Name_Space.cpp | 380 + ACE/ace/Remote_Name_Space.h | 147 + ACE/ace/Remote_Tokens.cpp | 527 + ACE/ace/Remote_Tokens.h | 322 + ACE/ace/Remote_Tokens.inl | 48 + ACE/ace/Reverse_Lock_T.cpp | 93 + ACE/ace/Reverse_Lock_T.h | 139 + ACE/ace/Reverse_Lock_T.inl | 19 + ACE/ace/Rtems_init.c | 219 + ACE/ace/SOCK.cpp | 185 + ACE/ace/SOCK.h | 138 + ACE/ace/SOCK.inl | 39 + ACE/ace/SOCK_Acceptor.cpp | 406 + ACE/ace/SOCK_Acceptor.h | 178 + ACE/ace/SOCK_Acceptor.inl | 13 + ACE/ace/SOCK_CODgram.cpp | 112 + ACE/ace/SOCK_CODgram.h | 78 + ACE/ace/SOCK_CODgram.inl | 19 + ACE/ace/SOCK_Connector.cpp | 359 + ACE/ace/SOCK_Connector.h | 321 + ACE/ace/SOCK_Connector.inl | 38 + ACE/ace/SOCK_Dgram.cpp | 750 + ACE/ace/SOCK_Dgram.h | 239 + ACE/ace/SOCK_Dgram.inl | 167 + ACE/ace/SOCK_Dgram_Bcast.cpp | 380 + ACE/ace/SOCK_Dgram_Bcast.h | 140 + ACE/ace/SOCK_Dgram_Bcast.inl | 37 + ACE/ace/SOCK_Dgram_Mcast.cpp | 928 + ACE/ace/SOCK_Dgram_Mcast.h | 384 + ACE/ace/SOCK_Dgram_Mcast.inl | 52 + ACE/ace/SOCK_IO.cpp | 181 + ACE/ace/SOCK_IO.h | 136 + ACE/ace/SOCK_IO.inl | 123 + ACE/ace/SOCK_Netlink.cpp | 113 + ACE/ace/SOCK_Netlink.h | 106 + ACE/ace/SOCK_Netlink.inl | 37 + ACE/ace/SOCK_SEQPACK_Acceptor.cpp | 596 + ACE/ace/SOCK_SEQPACK_Acceptor.h | 190 + ACE/ace/SOCK_SEQPACK_Acceptor.inl | 13 + ACE/ace/SOCK_SEQPACK_Association.cpp | 339 + ACE/ace/SOCK_SEQPACK_Association.h | 202 + ACE/ace/SOCK_SEQPACK_Association.inl | 177 + ACE/ace/SOCK_SEQPACK_Connector.cpp | 443 + ACE/ace/SOCK_SEQPACK_Connector.h | 331 + ACE/ace/SOCK_SEQPACK_Connector.inl | 38 + ACE/ace/SOCK_Stream.cpp | 40 + ACE/ace/SOCK_Stream.h | 184 + ACE/ace/SOCK_Stream.inl | 177 + ACE/ace/SPIPE.cpp | 82 + ACE/ace/SPIPE.h | 116 + ACE/ace/SPIPE.inl | 18 + ACE/ace/SPIPE_Acceptor.cpp | 337 + ACE/ace/SPIPE_Acceptor.h | 168 + ACE/ace/SPIPE_Addr.cpp | 167 + ACE/ace/SPIPE_Addr.h | 122 + ACE/ace/SPIPE_Addr.inl | 59 + ACE/ace/SPIPE_Connector.cpp | 160 + ACE/ace/SPIPE_Connector.h | 118 + ACE/ace/SPIPE_Connector.inl | 15 + ACE/ace/SPIPE_Stream.cpp | 104 + ACE/ace/SPIPE_Stream.h | 171 + ACE/ace/SPIPE_Stream.inl | 275 + ACE/ace/SSL/ACE_SSL.pc.in | 11 + ACE/ace/SSL/Makefile.am | 85 + ACE/ace/SSL/SSL_Asynch_BIO.cpp | 252 + ACE/ace/SSL/SSL_Asynch_BIO.h | 42 + ACE/ace/SSL/SSL_Asynch_Stream.cpp | 1042 + ACE/ace/SSL/SSL_Asynch_Stream.h | 425 + ACE/ace/SSL/SSL_Context.cpp | 636 + ACE/ace/SSL/SSL_Context.h | 384 + ACE/ace/SSL/SSL_Context.inl | 113 + ACE/ace/SSL/SSL_Export.h | 44 + ACE/ace/SSL/SSL_SOCK.cpp | 72 + ACE/ace/SSL/SSL_SOCK.h | 103 + ACE/ace/SSL/SSL_SOCK.inl | 71 + ACE/ace/SSL/SSL_SOCK_Acceptor.cpp | 249 + ACE/ace/SSL/SSL_SOCK_Acceptor.h | 198 + ACE/ace/SSL/SSL_SOCK_Acceptor.inl | 85 + ACE/ace/SSL/SSL_SOCK_Connector.cpp | 411 + ACE/ace/SSL/SSL_SOCK_Connector.h | 318 + ACE/ace/SSL/SSL_SOCK_Connector.inl | 28 + ACE/ace/SSL/SSL_SOCK_Stream.cpp | 583 + ACE/ace/SSL/SSL_SOCK_Stream.h | 321 + ACE/ace/SSL/SSL_SOCK_Stream.inl | 323 + ACE/ace/SSL/ssl.mpc | 13 + ACE/ace/SSL/ssl_for_tao.mpc | 42 + ACE/ace/SSL/sslconf.h | 55 + ACE/ace/SString.cpp | 550 + ACE/ace/SString.h | 499 + ACE/ace/SString.inl | 299 + ACE/ace/SStringfwd.h | 55 + ACE/ace/SUN_Proactor.cpp | 324 + ACE/ace/SUN_Proactor.h | 126 + ACE/ace/SV_Message.cpp | 24 + ACE/ace/SV_Message.h | 67 + ACE/ace/SV_Message.inl | 37 + ACE/ace/SV_Message_Queue.cpp | 44 + ACE/ace/SV_Message_Queue.h | 105 + ACE/ace/SV_Message_Queue.inl | 81 + ACE/ace/SV_Semaphore_Complex.cpp | 259 + ACE/ace/SV_Semaphore_Complex.h | 159 + ACE/ace/SV_Semaphore_Complex.inl | 84 + ACE/ace/SV_Semaphore_Simple.cpp | 237 + ACE/ace/SV_Semaphore_Simple.h | 197 + ACE/ace/SV_Semaphore_Simple.inl | 128 + ACE/ace/SV_Shared_Memory.cpp | 88 + ACE/ace/SV_Shared_Memory.h | 121 + ACE/ace/SV_Shared_Memory.inl | 118 + ACE/ace/Sample_History.cpp | 73 + ACE/ace/Sample_History.h | 91 + ACE/ace/Sample_History.inl | 26 + ACE/ace/Sbrk_Memory_Pool.cpp | 124 + ACE/ace/Sbrk_Memory_Pool.h | 118 + ACE/ace/Sched_Params.cpp | 332 + ACE/ace/Sched_Params.h | 232 + ACE/ace/Sched_Params.inl | 134 + ACE/ace/Select_Reactor.h | 69 + ACE/ace/Select_Reactor_Base.cpp | 1104 + ACE/ace/Select_Reactor_Base.h | 611 + ACE/ace/Select_Reactor_Base.inl | 152 + ACE/ace/Select_Reactor_T.cpp | 1594 ++ ACE/ace/Select_Reactor_T.h | 718 + ACE/ace/Select_Reactor_T.inl | 236 + ACE/ace/Semaphore.cpp | 62 + ACE/ace/Semaphore.h | 183 + ACE/ace/Semaphore.inl | 119 + ACE/ace/Service_Config.cpp | 586 + ACE/ace/Service_Config.h | 610 + ACE/ace/Service_Config.inl | 190 + ACE/ace/Service_Gestalt.cpp | 1281 ++ ACE/ace/Service_Gestalt.h | 502 + ACE/ace/Service_Gestalt.inl | 74 + ACE/ace/Service_Manager.cpp | 387 + ACE/ace/Service_Manager.h | 120 + ACE/ace/Service_Object.cpp | 173 + ACE/ace/Service_Object.h | 207 + ACE/ace/Service_Object.inl | 79 + ACE/ace/Service_Repository.cpp | 577 + ACE/ace/Service_Repository.h | 281 + ACE/ace/Service_Repository.inl | 51 + ACE/ace/Service_Templates.h | 29 + ACE/ace/Service_Types.cpp | 458 + ACE/ace/Service_Types.h | 206 + ACE/ace/Service_Types.inl | 32 + ACE/ace/Shared_Memory.cpp | 13 + ACE/ace/Shared_Memory.h | 58 + ACE/ace/Shared_Memory_MM.cpp | 111 + ACE/ace/Shared_Memory_MM.h | 120 + ACE/ace/Shared_Memory_MM.inl | 42 + ACE/ace/Shared_Memory_Pool.cpp | 461 + ACE/ace/Shared_Memory_Pool.h | 210 + ACE/ace/Shared_Memory_SV.cpp | 88 + ACE/ace/Shared_Memory_SV.h | 101 + ACE/ace/Shared_Memory_SV.inl | 30 + ACE/ace/Shared_Object.cpp | 54 + ACE/ace/Shared_Object.h | 59 + ACE/ace/Shared_Object.inl | 12 + ACE/ace/Sig_Adapter.cpp | 80 + ACE/ace/Sig_Adapter.h | 81 + ACE/ace/Sig_Handler.cpp | 614 + ACE/ace/Sig_Handler.h | 236 + ACE/ace/Sig_Handler.inl | 15 + ACE/ace/Signal.cpp | 221 + ACE/ace/Signal.h | 267 + ACE/ace/Signal.inl | 265 + ACE/ace/Singleton.cpp | 534 + ACE/ace/Singleton.h | 327 + ACE/ace/Singleton.inl | 42 + ACE/ace/Sock_Connect.cpp | 1642 ++ ACE/ace/Sock_Connect.h | 107 + ACE/ace/Static_Object_Lock.h | 78 + ACE/ace/Stats.cpp | 426 + ACE/ace/Stats.h | 222 + ACE/ace/Stats.inl | 104 + ACE/ace/Strategies.h | 33 + ACE/ace/Strategies_T.cpp | 1498 ++ ACE/ace/Strategies_T.h | 1076 + ACE/ace/Strategies_T.inl | 230 + ACE/ace/Stream.cpp | 619 + ACE/ace/Stream.h | 241 + ACE/ace/Stream.inl | 51 + ACE/ace/Stream_Modules.cpp | 380 + ACE/ace/Stream_Modules.h | 166 + ACE/ace/String_Base.cpp | 563 + ACE/ace/String_Base.h | 612 + ACE/ace/String_Base.inl | 159 + ACE/ace/String_Base_Const.cpp | 20 + ACE/ace/String_Base_Const.h | 52 + ACE/ace/Svc_Conf.h | 100 + ACE/ace/Svc_Conf.y | 425 + ACE/ace/Svc_Conf_Lexer.cpp | 676 + ACE/ace/Svc_Conf_Lexer.h | 70 + ACE/ace/Svc_Conf_Param.h | 142 + ACE/ace/Svc_Conf_Tokens.h | 81 + ACE/ace/Svc_Conf_y.cpp | 1759 ++ ACE/ace/Svc_Handler.cpp | 525 + ACE/ace/Svc_Handler.h | 339 + ACE/ace/Synch.h | 65 + ACE/ace/Synch_Options.cpp | 110 + ACE/ace/Synch_Options.h | 163 + ACE/ace/Synch_T.cpp | 22 + ACE/ace/Synch_T.h | 42 + ACE/ace/Synch_Traits.h | 152 + ACE/ace/System_Time.cpp | 140 + ACE/ace/System_Time.h | 99 + ACE/ace/TLI.cpp | 273 + ACE/ace/TLI.h | 116 + ACE/ace/TLI.inl | 50 + ACE/ace/TLI_Acceptor.cpp | 553 + ACE/ace/TLI_Acceptor.h | 123 + ACE/ace/TLI_Connector.cpp | 256 + ACE/ace/TLI_Connector.h | 130 + ACE/ace/TLI_Connector.inl | 49 + ACE/ace/TLI_Stream.cpp | 229 + ACE/ace/TLI_Stream.h | 141 + ACE/ace/TLI_Stream.inl | 25 + ACE/ace/TP_Reactor.cpp | 686 + ACE/ace/TP_Reactor.h | 320 + ACE/ace/TP_Reactor.inl | 119 + ACE/ace/TSS_Adapter.cpp | 45 + ACE/ace/TSS_Adapter.h | 61 + ACE/ace/TSS_T.cpp | 725 + ACE/ace/TSS_T.h | 253 + ACE/ace/TSS_T.inl | 42 + ACE/ace/TTY_IO.cpp | 583 + ACE/ace/TTY_IO.h | 122 + ACE/ace/Task.cpp | 299 + ACE/ace/Task.h | 307 + ACE/ace/Task.inl | 77 + ACE/ace/Task_Ex_T.cpp | 114 + ACE/ace/Task_Ex_T.h | 205 + ACE/ace/Task_Ex_T.inl | 109 + ACE/ace/Task_T.cpp | 108 + ACE/ace/Task_T.h | 198 + ACE/ace/Task_T.inl | 105 + ACE/ace/Test_and_Set.cpp | 51 + ACE/ace/Test_and_Set.h | 75 + ACE/ace/Thread.cpp | 99 + ACE/ace/Thread.h | 282 + ACE/ace/Thread.inl | 286 + ACE/ace/Thread_Adapter.cpp | 225 + ACE/ace/Thread_Adapter.h | 100 + ACE/ace/Thread_Adapter.inl | 13 + ACE/ace/Thread_Control.cpp | 96 + ACE/ace/Thread_Control.h | 102 + ACE/ace/Thread_Control.inl | 46 + ACE/ace/Thread_Exit.cpp | 123 + ACE/ace/Thread_Exit.h | 111 + ACE/ace/Thread_Hook.cpp | 33 + ACE/ace/Thread_Hook.h | 65 + ACE/ace/Thread_Manager.cpp | 2163 ++ ACE/ace/Thread_Manager.h | 1136 ++ ACE/ace/Thread_Manager.inl | 308 + ACE/ace/Thread_Mutex.cpp | 62 + ACE/ace/Thread_Mutex.h | 175 + ACE/ace/Thread_Mutex.inl | 97 + ACE/ace/Thread_Semaphore.cpp | 62 + ACE/ace/Thread_Semaphore.h | 89 + ACE/ace/Thread_Semaphore.inl | 12 + ACE/ace/Throughput_Stats.cpp | 202 + ACE/ace/Throughput_Stats.h | 86 + ACE/ace/Time_Value.cpp | 264 + ACE/ace/Time_Value.h | 360 + ACE/ace/Time_Value.inl | 407 + ACE/ace/Timeprobe.cpp | 15 + ACE/ace/Timeprobe.h | 201 + ACE/ace/Timeprobe.inl | 14 + ACE/ace/Timeprobe_T.cpp | 427 + ACE/ace/Timeprobe_T.h | 220 + ACE/ace/Timer_Hash.h | 75 + ACE/ace/Timer_Hash_T.cpp | 873 + ACE/ace/Timer_Hash_T.h | 342 + ACE/ace/Timer_Heap.h | 41 + ACE/ace/Timer_Heap_T.cpp | 889 + ACE/ace/Timer_Heap_T.h | 338 + ACE/ace/Timer_List.h | 42 + ACE/ace/Timer_List_T.cpp | 418 + ACE/ace/Timer_List_T.h | 226 + ACE/ace/Timer_Queue.h | 52 + ACE/ace/Timer_Queue_Adapters.cpp | 361 + ACE/ace/Timer_Queue_Adapters.h | 261 + ACE/ace/Timer_Queue_Adapters.inl | 29 + ACE/ace/Timer_Queue_T.cpp | 481 + ACE/ace/Timer_Queue_T.h | 562 + ACE/ace/Timer_Queue_T.inl | 222 + ACE/ace/Timer_Queuefwd.h | 38 + ACE/ace/Timer_Wheel.h | 42 + ACE/ace/Timer_Wheel_T.cpp | 967 + ACE/ace/Timer_Wheel_T.h | 226 + ACE/ace/TkReactor/ACE_TkReactor.pc.in | 11 + ACE/ace/TkReactor/ACE_TkReactor_export.h | 58 + ACE/ace/TkReactor/TkReactor.cpp | 439 + ACE/ace/TkReactor/TkReactor.h | 136 + ACE/ace/Token.cpp | 545 + ACE/ace/Token.h | 376 + ACE/ace/Token.inl | 176 + ACE/ace/Token_Collection.cpp | 294 + ACE/ace/Token_Collection.h | 243 + ACE/ace/Token_Collection.inl | 17 + ACE/ace/Token_Invariants.cpp | 355 + ACE/ace/Token_Invariants.h | 245 + ACE/ace/Token_Manager.cpp | 273 + ACE/ace/Token_Manager.h | 150 + ACE/ace/Token_Manager.inl | 25 + ACE/ace/Token_Request_Reply.cpp | 186 + ACE/ace/Token_Request_Reply.h | 270 + ACE/ace/Token_Request_Reply.inl | 205 + ACE/ace/Trace.cpp | 137 + ACE/ace/Trace.h | 96 + ACE/ace/Truncate.h | 1016 + ACE/ace/Typed_SV_Message.cpp | 30 + ACE/ace/Typed_SV_Message.h | 107 + ACE/ace/Typed_SV_Message.inl | 96 + ACE/ace/Typed_SV_Message_Queue.cpp | 56 + ACE/ace/Typed_SV_Message_Queue.h | 92 + ACE/ace/Typed_SV_Message_Queue.inl | 80 + ACE/ace/UNIX_Addr.cpp | 151 + ACE/ace/UNIX_Addr.h | 117 + ACE/ace/UNIX_Addr.inl | 57 + ACE/ace/UPIPE_Acceptor.cpp | 129 + ACE/ace/UPIPE_Acceptor.h | 99 + ACE/ace/UPIPE_Acceptor.inl | 14 + ACE/ace/UPIPE_Addr.h | 33 + ACE/ace/UPIPE_Connector.cpp | 101 + ACE/ace/UPIPE_Connector.h | 115 + ACE/ace/UPIPE_Connector.inl | 34 + ACE/ace/UPIPE_Stream.cpp | 231 + ACE/ace/UPIPE_Stream.h | 140 + ACE/ace/UPIPE_Stream.inl | 14 + ACE/ace/UTF16_Encoding_Converter.cpp | 364 + ACE/ace/UTF16_Encoding_Converter.h | 86 + ACE/ace/UTF16_Encoding_Converter.inl | 76 + ACE/ace/UTF32_Encoding_Converter.cpp | 254 + ACE/ace/UTF32_Encoding_Converter.h | 67 + ACE/ace/UTF8_Encoding_Converter.cpp | 92 + ACE/ace/UTF8_Encoding_Converter.h | 72 + ACE/ace/UUID.cpp | 554 + ACE/ace/UUID.h | 239 + ACE/ace/UUID.inl | 200 + ACE/ace/Unbounded_Queue.cpp | 434 + ACE/ace/Unbounded_Queue.h | 297 + ACE/ace/Unbounded_Queue.inl | 27 + ACE/ace/Unbounded_Set.cpp | 478 + ACE/ace/Unbounded_Set.h | 322 + ACE/ace/Unbounded_Set.inl | 23 + ACE/ace/Value_Ptr.h | 167 + ACE/ace/Vector_T.cpp | 154 + ACE/ace/Vector_T.h | 316 + ACE/ace/Vector_T.inl | 107 + ACE/ace/Version.h | 9 + ACE/ace/Versioned_Namespace.h | 51 + ACE/ace/WFMO_Reactor.cpp | 2754 +++ ACE/ace/WFMO_Reactor.h | 1368 ++ ACE/ace/WFMO_Reactor.inl | 1173 ++ ACE/ace/WIN32_Asynch_IO.cpp | 3767 ++++ ACE/ace/WIN32_Asynch_IO.h | 1937 ++ ACE/ace/WIN32_Proactor.cpp | 804 + ACE/ace/WIN32_Proactor.h | 325 + ACE/ace/XML_Svc_Conf.cpp | 15 + ACE/ace/XML_Svc_Conf.h | 65 + ACE/ace/XTI_ATM_Mcast.cpp | 70 + ACE/ace/XTI_ATM_Mcast.h | 137 + ACE/ace/XTI_ATM_Mcast.inl | 65 + ACE/ace/XtReactor/ACE_XtReactor.pc.in | 11 + ACE/ace/XtReactor/ACE_XtReactor_export.h | 58 + ACE/ace/XtReactor/XtReactor.cpp | 450 + ACE/ace/XtReactor/XtReactor.h | 138 + ACE/ace/ace.mpc | 464 + ACE/ace/ace.mwc | 14 + ACE/ace/ace.rc | 38 + ACE/ace/ace_ce_dll.cfg | 1 + ACE/ace/ace_flreactor.mpc | 32 + ACE/ace/ace_for_tao.mpc | 377 + ACE/ace/ace_foxreactor.mpc | 32 + ACE/ace/ace_message_table.bin | Bin 0 -> 28 bytes ACE/ace/ace_qtreactor.mpc | 38 + ACE/ace/ace_tkreactor.mpc | 32 + ACE/ace/ace_wchar.cpp | 17 + ACE/ace/ace_wchar.h | 377 + ACE/ace/ace_wchar.inl | 183 + ACE/ace/ace_xtreactor.mpc | 32 + ACE/ace/checked_iterator.h | 58 + ACE/ace/codecs.mpb | 8 + ACE/ace/config-WinCE.h | 238 + ACE/ace/config-aix-5.x.h | 333 + ACE/ace/config-all.h | 81 + ACE/ace/config-borland-common.h | 75 + ACE/ace/config-cray.h | 215 + ACE/ace/config-cxx-common.h | 87 + ACE/ace/config-cygwin32.h | 204 + ACE/ace/config-doxygen.h | 120 + ACE/ace/config-freebsd.h | 284 + ACE/ace/config-g++-common.h | 137 + ACE/ace/config-ghs-common.h | 43 + ACE/ace/config-hpux-11.00.h | 446 + ACE/ace/config-icc-common.h | 114 + ACE/ace/config-integritySCA.h | 234 + ACE/ace/config-irix6.5.x-sgic++.h | 18 + ACE/ace/config-irix6.x-common.h | 256 + ACE/ace/config-irix6.x-g++.h | 23 + ACE/ace/config-irix6.x-sgic++.h | 38 + ACE/ace/config-linux-common.h | 442 + ACE/ace/config-linux.h | 75 + ACE/ace/config-lite.h | 164 + ACE/ace/config-lynxos.h | 159 + ACE/ace/config-macosx-leopard.h | 224 + ACE/ace/config-macosx-panther.h | 191 + ACE/ace/config-macosx-tiger.h | 219 + ACE/ace/config-macosx.h | 191 + ACE/ace/config-macros.h | 639 + ACE/ace/config-minimal.h | 39 + ACE/ace/config-mvs.h | 130 + ACE/ace/config-netbsd.h | 167 + ACE/ace/config-openbsd.h | 235 + ACE/ace/config-openvms.h | 198 + ACE/ace/config-pharlap.h | 86 + ACE/ace/config-posix-nonetworking.h | 86 + ACE/ace/config-posix.h | 72 + ACE/ace/config-qnx-neutrino.h | 137 + ACE/ace/config-qnx-rtp-62x.h | 129 + ACE/ace/config-qnx-rtp-common.h | 46 + ACE/ace/config-qnx-rtp-pre62x.h | 151 + ACE/ace/config-qnx-rtp.h | 25 + ACE/ace/config-rtems.h | 165 + ACE/ace/config-sco-5.0.0-nothread.h | 14 + ACE/ace/config-sco-5.0.0.h | 97 + ACE/ace/config-suncc-common.h | 68 + ACE/ace/config-sunos5.10.h | 46 + ACE/ace/config-sunos5.11.h | 15 + ACE/ace/config-sunos5.4-g++.h | 180 + ACE/ace/config-sunos5.4-sunc++-4.x.h | 191 + ACE/ace/config-sunos5.5.h | 414 + ACE/ace/config-sunos5.6.h | 129 + ACE/ace/config-sunos5.7.h | 78 + ACE/ace/config-sunos5.8.h | 39 + ACE/ace/config-sunos5.9.h | 18 + ACE/ace/config-tandem-nsk-mips-v2.h | 404 + ACE/ace/config-tandem-nsk-mips-v3.h | 474 + ACE/ace/config-tandem.h | 192 + ACE/ace/config-tru64.h | 155 + ACE/ace/config-unixware-7.1.0.h | 414 + ACE/ace/config-unixware-7.1.0.udk.h | 465 + ACE/ace/config-visualage.h | 20 + ACE/ace/config-vxworks.h | 33 + ACE/ace/config-vxworks5.x.h | 334 + ACE/ace/config-vxworks6.2.h | 332 + ACE/ace/config-vxworks6.3.h | 322 + ACE/ace/config-vxworks6.4.h | 345 + ACE/ace/config-vxworks6.5.h | 25 + ACE/ace/config-vxworks6.6.h | 29 + ACE/ace/config-win32-borland.h | 121 + ACE/ace/config-win32-common.h | 660 + ACE/ace/config-win32-dmc.h | 109 + ACE/ace/config-win32-ghs.h | 95 + ACE/ace/config-win32-interix.h | 100 + ACE/ace/config-win32-mingw.h | 98 + ACE/ace/config-win32-msvc-7.h | 126 + ACE/ace/config-win32-msvc-8.h | 149 + ACE/ace/config-win32-msvc-9.h | 141 + ACE/ace/config-win32-msvc.h | 164 + ACE/ace/config-win32.h | 53 + ACE/ace/filecache.mpb | 8 + ACE/ace/gethrtime.cpp | 60 + ACE/ace/iosfwd.h | 99 + ACE/ace/os_include/arpa/os_inet.h | 74 + ACE/ace/os_include/net/os_if.h | 119 + ACE/ace/os_include/netinet/os_in.h | 185 + ACE/ace/os_include/netinet/os_tcp.h | 46 + ACE/ace/os_include/os_aio.h | 47 + ACE/ace/os_include/os_assert.h | 46 + ACE/ace/os_include/os_byteswap.h | 41 + ACE/ace/os_include/os_complex.h | 42 + ACE/ace/os_include/os_cpio.h | 42 + ACE/ace/os_include/os_ctype.h | 45 + ACE/ace/os_include/os_dirent.h | 108 + ACE/ace/os_include/os_dlfcn.h | 107 + ACE/ace/os_include/os_errno.h | 153 + ACE/ace/os_include/os_fcntl.h | 106 + ACE/ace/os_include/os_fenv.h | 42 + ACE/ace/os_include/os_float.h | 42 + ACE/ace/os_include/os_fmtmsg.h | 42 + ACE/ace/os_include/os_fnmatch.h | 42 + ACE/ace/os_include/os_ftw.h | 44 + ACE/ace/os_include/os_glob.h | 44 + ACE/ace/os_include/os_grp.h | 44 + ACE/ace/os_include/os_iconv.h | 44 + ACE/ace/os_include/os_intrin.h | 57 + ACE/ace/os_include/os_inttypes.h | 46 + ACE/ace/os_include/os_iso646.h | 42 + ACE/ace/os_include/os_langinfo.h | 44 + ACE/ace/os_include/os_libgen.h | 42 + ACE/ace/os_include/os_limits.h | 143 + ACE/ace/os_include/os_local.h | 44 + ACE/ace/os_include/os_math.h | 44 + ACE/ace/os_include/os_monetary.h | 44 + ACE/ace/os_include/os_mqueue.h | 44 + ACE/ace/os_include/os_ndbm.h | 44 + ACE/ace/os_include/os_netdb.h | 108 + ACE/ace/os_include/os_nl_types.h | 42 + ACE/ace/os_include/os_poll.h | 42 + ACE/ace/os_include/os_pthread.h | 424 + ACE/ace/os_include/os_pwd.h | 58 + ACE/ace/os_include/os_regex.h | 48 + ACE/ace/os_include/os_sched.h | 52 + ACE/ace/os_include/os_search.h | 44 + ACE/ace/os_include/os_semaphore.h | 77 + ACE/ace/os_include/os_setjmp.h | 42 + ACE/ace/os_include/os_signal.h | 253 + ACE/ace/os_include/os_spawn.h | 46 + ACE/ace/os_include/os_stdarg.h | 50 + ACE/ace/os_include/os_stdbool.h | 42 + ACE/ace/os_include/os_stddef.h | 97 + ACE/ace/os_include/os_stdint.h | 141 + ACE/ace/os_include/os_stdio.h | 87 + ACE/ace/os_include/os_stdlib.h | 77 + ACE/ace/os_include/os_string.h | 76 + ACE/ace/os_include/os_strings.h | 52 + ACE/ace/os_include/os_stropts.h | 120 + ACE/ace/os_include/os_syslog.h | 42 + ACE/ace/os_include/os_tar.h | 42 + ACE/ace/os_include/os_termios.h | 46 + ACE/ace/os_include/os_tgmath.h | 45 + ACE/ace/os_include/os_time.h | 123 + ACE/ace/os_include/os_trace.h | 44 + ACE/ace/os_include/os_ucontext.h | 48 + ACE/ace/os_include/os_ulimit.h | 42 + ACE/ace/os_include/os_unistd.h | 203 + ACE/ace/os_include/os_utime.h | 44 + ACE/ace/os_include/os_utmpx.h | 44 + ACE/ace/os_include/os_wchar.h | 49 + ACE/ace/os_include/os_wctype.h | 45 + ACE/ace/os_include/os_wordexp.h | 44 + ACE/ace/os_include/sys/os_ipc.h | 74 + ACE/ace/os_include/sys/os_loadavg.h | 41 + ACE/ace/os_include/sys/os_mman.h | 122 + ACE/ace/os_include/sys/os_msg.h | 55 + ACE/ace/os_include/sys/os_pstat.h | 42 + ACE/ace/os_include/sys/os_resource.h | 104 + ACE/ace/os_include/sys/os_select.h | 59 + ACE/ace/os_include/sys/os_sem.h | 90 + ACE/ace/os_include/sys/os_shm.h | 48 + ACE/ace/os_include/sys/os_socket.h | 307 + ACE/ace/os_include/sys/os_stat.h | 127 + ACE/ace/os_include/sys/os_statvfs.h | 44 + ACE/ace/os_include/sys/os_sysctl.h | 41 + ACE/ace/os_include/sys/os_time.h | 60 + ACE/ace/os_include/sys/os_timeb.h | 49 + ACE/ace/os_include/sys/os_times.h | 44 + ACE/ace/os_include/sys/os_types.h | 158 + ACE/ace/os_include/sys/os_uio.h | 77 + ACE/ace/os_include/sys/os_un.h | 52 + ACE/ace/os_include/sys/os_utsname.h | 42 + ACE/ace/os_include/sys/os_wait.h | 97 + ACE/ace/other.mpb | 15 + ACE/ace/post.h | 22 + ACE/ace/pre.h | 24 + ACE/ace/streams.h | 141 + ACE/ace/svc_export.h | 44 + ACE/ace/svcconf.mpb | 64 + ACE/ace/token.mpb | 15 + ACE/ace/uuid.mpb | 8 + .../Gateway/Concrete_Connection_Handlers.cpp | 801 + .../Gateway/Gateway/Concrete_Connection_Handlers.h | 151 + ACE/apps/Gateway/Gateway/Config_Files.cpp | 219 + ACE/apps/Gateway/Gateway/Config_Files.h | 98 + ACE/apps/Gateway/Gateway/Connection_Handler.cpp | 272 + ACE/apps/Gateway/Gateway/Connection_Handler.h | 157 + .../Gateway/Connection_Handler_Acceptor.cpp | 56 + .../Gateway/Gateway/Connection_Handler_Acceptor.h | 65 + .../Gateway/Connection_Handler_Connector.cpp | 60 + .../Gateway/Gateway/Connection_Handler_Connector.h | 44 + ACE/apps/Gateway/Gateway/Consumer_Dispatch_Set.h | 32 + ACE/apps/Gateway/Gateway/Event.h | 225 + ACE/apps/Gateway/Gateway/Event_Channel.cpp | 595 + ACE/apps/Gateway/Gateway/Event_Channel.h | 135 + .../Gateway/Event_Forwarding_Discriminator.cpp | 64 + .../Gateway/Event_Forwarding_Discriminator.h | 65 + ACE/apps/Gateway/Gateway/File_Parser.cpp | 157 + ACE/apps/Gateway/Gateway/File_Parser.h | 97 + ACE/apps/Gateway/Gateway/Gateway.cpp | 340 + ACE/apps/Gateway/Gateway/Gateway.h | 33 + ACE/apps/Gateway/Gateway/Makefile.am | 79 + ACE/apps/Gateway/Gateway/Options.cpp | 288 + ACE/apps/Gateway/Gateway/Options.h | 196 + ACE/apps/Gateway/Gateway/connection_config | 55 + ACE/apps/Gateway/Gateway/consumer_config | 35 + ACE/apps/Gateway/Gateway/gateway.mpc | 29 + ACE/apps/Gateway/Gateway/gatewayd.cpp | 69 + ACE/apps/Gateway/Gateway/svc.conf | 3 + ACE/apps/Gateway/Makefile.am | 14 + ACE/apps/Gateway/Peer/Makefile.am | 53 + ACE/apps/Gateway/Peer/Options.cpp | 201 + ACE/apps/Gateway/Peer/Options.h | 135 + ACE/apps/Gateway/Peer/Peer.cpp | 889 + ACE/apps/Gateway/Peer/Peer.h | 257 + ACE/apps/Gateway/Peer/peer.mpc | 23 + ACE/apps/Gateway/Peer/peerd.cpp | 63 + ACE/apps/Gateway/Peer/svc.conf | 2 + ACE/apps/Gateway/README | 136 + ACE/apps/JAWS/ChangeLog | 1047 + ACE/apps/JAWS/Makefile.am | 14 + ACE/apps/JAWS/README | 15 + ACE/apps/JAWS/clients/Blobby/Blob.cpp | 77 + ACE/apps/JAWS/clients/Blobby/Blob.h | 87 + ACE/apps/JAWS/clients/Blobby/Blob_Handler.cpp | 347 + ACE/apps/JAWS/clients/Blobby/Blob_Handler.h | 118 + ACE/apps/JAWS/clients/Blobby/Makefile.am | 40 + ACE/apps/JAWS/clients/Blobby/Options.cpp | 81 + ACE/apps/JAWS/clients/Blobby/Options.h | 71 + ACE/apps/JAWS/clients/Blobby/README | 33 + ACE/apps/JAWS/clients/Blobby/blobby.cpp | 125 + ACE/apps/JAWS/clients/Blobby/blobby.mpc | 13 + ACE/apps/JAWS/clients/Caching/ID_Generator.cpp | 61 + ACE/apps/JAWS/clients/Caching/ID_Generator.h | 62 + ACE/apps/JAWS/clients/Caching/Local_Locator.cpp | 248 + ACE/apps/JAWS/clients/Caching/Local_Locator.h | 119 + ACE/apps/JAWS/clients/Caching/Local_Locator.inl | 43 + .../JAWS/clients/Caching/Locator_Request_Reply.cpp | 459 + .../JAWS/clients/Caching/Locator_Request_Reply.h | 220 + .../JAWS/clients/Caching/Locator_Request_Reply.inl | 138 + ACE/apps/JAWS/clients/Caching/Makefile.am | 46 + ACE/apps/JAWS/clients/Caching/README | 83 + ACE/apps/JAWS/clients/Caching/URL_Array_Helper.cpp | 43 + ACE/apps/JAWS/clients/Caching/URL_Array_Helper.h | 40 + ACE/apps/JAWS/clients/Caching/URL_Locator.cpp | 52 + ACE/apps/JAWS/clients/Caching/URL_Locator.h | 112 + ACE/apps/JAWS/clients/Caching/URL_Properties.cpp | 139 + ACE/apps/JAWS/clients/Caching/URL_Properties.h | 201 + ACE/apps/JAWS/clients/Caching/URL_Properties.inl | 203 + ACE/apps/JAWS/clients/Caching/caching.mpc | 13 + ACE/apps/JAWS/clients/Caching/http_client.cpp | 79 + ACE/apps/JAWS/clients/Caching/http_handler.cpp | 240 + ACE/apps/JAWS/clients/Caching/http_handler.h | 81 + ACE/apps/JAWS/clients/Caching/test_URL.cpp | 34 + ACE/apps/JAWS/clients/Makefile.am | 14 + ACE/apps/JAWS/clients/README | 13 + ACE/apps/JAWS/clients/WebSTONE/COPYING | 348 + ACE/apps/JAWS/clients/WebSTONE/README | 245 + .../JAWS/clients/WebSTONE/README.DynamicWorkload | 37 + ACE/apps/JAWS/clients/WebSTONE/README.FIRST | 21 + .../JAWS/clients/WebSTONE/WEBSTONE-VERSION-2.0 | 0 .../JAWS/clients/WebSTONE/bin/WebStone-common.pl | 63 + .../JAWS/clients/WebSTONE/bin/WebStone-manage.pl | 33 + ACE/apps/JAWS/clients/WebSTONE/bin/WebStone-run.pl | 39 + .../JAWS/clients/WebSTONE/bin/WebStone-setup.pl | 97 + ACE/apps/JAWS/clients/WebSTONE/bin/checkfilelist | 35 + ACE/apps/JAWS/clients/WebSTONE/bin/genfiles | 41 + .../clients/WebSTONE/bin/genfiles-from-filelist.sh | 41 + ACE/apps/JAWS/clients/WebSTONE/bin/gui-configure | 174 + ACE/apps/JAWS/clients/WebSTONE/bin/killbench | 13 + ACE/apps/JAWS/clients/WebSTONE/bin/killbench.pl | 17 + ACE/apps/JAWS/clients/WebSTONE/bin/mine-logs.pl | 90 + .../JAWS/clients/WebSTONE/bin/move-filelist.pl | 28 + ACE/apps/JAWS/clients/WebSTONE/bin/move-runs.pl | 26 + ACE/apps/JAWS/clients/WebSTONE/bin/rebootall | 9 + ACE/apps/JAWS/clients/WebSTONE/bin/runbench | 193 + ACE/apps/JAWS/clients/WebSTONE/bin/runbench.pl | 38 + ACE/apps/JAWS/clients/WebSTONE/bin/tabs2html | 13 + ACE/apps/JAWS/clients/WebSTONE/bin/view-results.pl | 55 + ACE/apps/JAWS/clients/WebSTONE/bin/webstone-gui.pl | 318 + .../JAWS/clients/WebSTONE/bin/write-testbed.pl | 49 + ACE/apps/JAWS/clients/WebSTONE/bin/wscollect.pl | 142 + ACE/apps/JAWS/clients/WebSTONE/conf/filelist | 6 + .../JAWS/clients/WebSTONE/conf/filelist.cgi-heavy | 6 + .../clients/WebSTONE/conf/filelist.dynamic-heavy | 6 + .../clients/WebSTONE/conf/filelist.dynamic-light | 6 + .../clients/WebSTONE/conf/filelist.dynamic-medium | 6 + .../JAWS/clients/WebSTONE/conf/filelist.homepage | 2 + .../JAWS/clients/WebSTONE/conf/filelist.sample | 6 + .../JAWS/clients/WebSTONE/conf/filelist.standard | 6 + ACE/apps/JAWS/clients/WebSTONE/conf/fileset | 32 + ACE/apps/JAWS/clients/WebSTONE/conf/paths.pl | 4 + ACE/apps/JAWS/clients/WebSTONE/conf/paths.sh | 0 ACE/apps/JAWS/clients/WebSTONE/conf/testbed | 33 + ACE/apps/JAWS/clients/WebSTONE/doc/COPYING | 348 + .../JAWS/clients/WebSTONE/doc/FAQ-webstone.html | 403 + ACE/apps/JAWS/clients/WebSTONE/doc/LICENSE.html | 17 + ACE/apps/JAWS/clients/WebSTONE/doc/WebStone.html | 25 + ACE/apps/JAWS/clients/WebSTONE/doc/testbed.help | 21 + .../clients/WebSTONE/doc/webstone-white-paper.ps | 8974 +++++++++ ACE/apps/JAWS/clients/WebSTONE/doc/webstone.gif | Bin 0 -> 14656 bytes ACE/apps/JAWS/clients/WebSTONE/doc/webstone2.html | 73 + ACE/apps/JAWS/clients/WebSTONE/src/README | 232 + ACE/apps/JAWS/clients/WebSTONE/src/acconfig.h | 15 + ACE/apps/JAWS/clients/WebSTONE/src/bench.c | 635 + ACE/apps/JAWS/clients/WebSTONE/src/bench.h | 274 + ACE/apps/JAWS/clients/WebSTONE/src/cgi-send.c | 48 + ACE/apps/JAWS/clients/WebSTONE/src/config.cache | 47 + ACE/apps/JAWS/clients/WebSTONE/src/config.guess | 565 + ACE/apps/JAWS/clients/WebSTONE/src/config.h | 91 + ACE/apps/JAWS/clients/WebSTONE/src/config.h.in | 89 + ACE/apps/JAWS/clients/WebSTONE/src/config.log | 4 + ACE/apps/JAWS/clients/WebSTONE/src/config.status | 288 + ACE/apps/JAWS/clients/WebSTONE/src/config.sub | 867 + ACE/apps/JAWS/clients/WebSTONE/src/configure | 2132 ++ ACE/apps/JAWS/clients/WebSTONE/src/configure.in | 99 + ACE/apps/JAWS/clients/WebSTONE/src/debug.h | 18 + ACE/apps/JAWS/clients/WebSTONE/src/errexit.c | 106 + ACE/apps/JAWS/clients/WebSTONE/src/genrand.c | 70 + ACE/apps/JAWS/clients/WebSTONE/src/get.c | 318 + ACE/apps/JAWS/clients/WebSTONE/src/get.h | 17 + ACE/apps/JAWS/clients/WebSTONE/src/getopt.c | 67 + ACE/apps/JAWS/clients/WebSTONE/src/gettimeofday.c | 58 + ACE/apps/JAWS/clients/WebSTONE/src/install-sh | 238 + ACE/apps/JAWS/clients/WebSTONE/src/logfile27859 | 9 + .../WebSTONE/src/nsapi-includes/base/buffer.h | 220 + .../WebSTONE/src/nsapi-includes/base/cinfo.h | 146 + .../WebSTONE/src/nsapi-includes/base/crit.h | 127 + .../WebSTONE/src/nsapi-includes/base/daemon.h | 120 + .../clients/WebSTONE/src/nsapi-includes/base/dll.h | 124 + .../WebSTONE/src/nsapi-includes/base/ereport.h | 121 + .../WebSTONE/src/nsapi-includes/base/eventlog.h | 61 + .../WebSTONE/src/nsapi-includes/base/file.h | 217 + .../WebSTONE/src/nsapi-includes/base/minissl.h | 27 + .../clients/WebSTONE/src/nsapi-includes/base/net.h | 180 + .../WebSTONE/src/nsapi-includes/base/nodelock.h | 47 + .../WebSTONE/src/nsapi-includes/base/nterrors.h | 738 + .../WebSTONE/src/nsapi-includes/base/objndx.h | 29 + .../WebSTONE/src/nsapi-includes/base/pblock.h | 193 + .../clients/WebSTONE/src/nsapi-includes/base/sem.h | 70 + .../WebSTONE/src/nsapi-includes/base/session.h | 85 + .../WebSTONE/src/nsapi-includes/base/shexp.h | 97 + .../WebSTONE/src/nsapi-includes/base/shmem.h | 84 + .../WebSTONE/src/nsapi-includes/base/systems.h | 222 + .../WebSTONE/src/nsapi-includes/base/systhr.h | 130 + .../WebSTONE/src/nsapi-includes/base/util.h | 205 + .../WebSTONE/src/nsapi-includes/frame/conf.h | 155 + .../WebSTONE/src/nsapi-includes/frame/dnfilter.h | 44 + .../WebSTONE/src/nsapi-includes/frame/func.h | 111 + .../WebSTONE/src/nsapi-includes/frame/http.h | 171 + .../WebSTONE/src/nsapi-includes/frame/httpact.h | 120 + .../WebSTONE/src/nsapi-includes/frame/ipfilter.h | 48 + .../WebSTONE/src/nsapi-includes/frame/log.h | 51 + .../WebSTONE/src/nsapi-includes/frame/object.h | 167 + .../WebSTONE/src/nsapi-includes/frame/objset.h | 158 + .../WebSTONE/src/nsapi-includes/frame/protocol.h | 27 + .../WebSTONE/src/nsapi-includes/frame/req.h | 216 + .../WebSTONE/src/nsapi-includes/frame/servact.h | 26 + .../clients/WebSTONE/src/nsapi-includes/netsite.h | 67 + ACE/apps/JAWS/clients/WebSTONE/src/nsapi-send.c | 88 + .../JAWS/clients/WebSTONE/src/parse_file_list.c | 290 + .../JAWS/clients/WebSTONE/src/parse_file_list.h | 20 + ACE/apps/JAWS/clients/WebSTONE/src/rexec.c | 373 + ACE/apps/JAWS/clients/WebSTONE/src/statistics.c | 49 + ACE/apps/JAWS/clients/WebSTONE/src/statistics.h | 9 + ACE/apps/JAWS/clients/WebSTONE/src/sysdep.c | 51 + ACE/apps/JAWS/clients/WebSTONE/src/sysdep.h | 133 + ACE/apps/JAWS/clients/WebSTONE/src/timefunc.c | 171 + ACE/apps/JAWS/clients/WebSTONE/src/timefunc.h | 30 + ACE/apps/JAWS/clients/WebSTONE/src/webclient.c | 1299 ++ ACE/apps/JAWS/clients/WebSTONE/src/webmaster.c | 1420 ++ ACE/apps/JAWS/clients/WebSTONE/webstone | 75 + ACE/apps/JAWS/server/HTTP_Config.cpp | 140 + ACE/apps/JAWS/server/HTTP_Config.h | 96 + ACE/apps/JAWS/server/HTTP_Handler.cpp | 314 + ACE/apps/JAWS/server/HTTP_Handler.h | 237 + ACE/apps/JAWS/server/HTTP_Helpers.cpp | 442 + ACE/apps/JAWS/server/HTTP_Helpers.h | 110 + ACE/apps/JAWS/server/HTTP_Request.cpp | 664 + ACE/apps/JAWS/server/HTTP_Request.h | 200 + ACE/apps/JAWS/server/HTTP_Response.cpp | 388 + ACE/apps/JAWS/server/HTTP_Response.h | 78 + ACE/apps/JAWS/server/HTTP_Server.cpp | 431 + ACE/apps/JAWS/server/HTTP_Server.h | 160 + ACE/apps/JAWS/server/IO.cpp | 563 + ACE/apps/JAWS/server/IO.h | 293 + ACE/apps/JAWS/server/JAWS_Concurrency.cpp | 82 + ACE/apps/JAWS/server/JAWS_Concurrency.h | 101 + ACE/apps/JAWS/server/JAWS_Pipeline.cpp | 29 + ACE/apps/JAWS/server/JAWS_Pipeline.h | 36 + ACE/apps/JAWS/server/JAWS_Pipeline_Handler.cpp | 25 + ACE/apps/JAWS/server/JAWS_Pipeline_Handler.h | 29 + ACE/apps/JAWS/server/Makefile.am | 96 + ACE/apps/JAWS/server/Parse_Headers.cpp | 362 + ACE/apps/JAWS/server/Parse_Headers.h | 124 + ACE/apps/JAWS/server/README | 228 + ACE/apps/JAWS/server/jaws.auth | 2 + ACE/apps/JAWS/server/main.cpp | 57 + ACE/apps/JAWS/server/server.mpc | 36 + ACE/apps/JAWS/server/svc.conf | 49 + ACE/apps/JAWS/server/test.cgi | 9 + ACE/apps/JAWS/stress_testing/README | 54 + ACE/apps/JAWS/stress_testing/benchd.cpp | 241 + ACE/apps/JAWS/stress_testing/client.h | 8 + ACE/apps/JAWS/stress_testing/config | 3 + ACE/apps/JAWS/stress_testing/connection.cpp | 100 + ACE/apps/JAWS/stress_testing/connection.h | 22 + ACE/apps/JAWS/stress_testing/cp.cpp | 11 + ACE/apps/JAWS/stress_testing/cp.h | 14 + ACE/apps/JAWS/stress_testing/global.h | 31 + ACE/apps/JAWS/stress_testing/http.h | 16 + ACE/apps/JAWS/stress_testing/http_tester.cpp | 172 + ACE/apps/JAWS/stress_testing/out | 2 + ACE/apps/JAWS/stress_testing/stats.cpp | 88 + ACE/apps/JAWS/stress_testing/stats.h | 31 + ACE/apps/JAWS/stress_testing/util.cpp | 60 + ACE/apps/JAWS/stress_testing/util.h | 34 + ACE/apps/JAWS2/1000K.html | 20001 +++++++++++++++++++ ACE/apps/JAWS2/100K.html | 2001 ++ ACE/apps/JAWS2/500K.html | 10001 ++++++++++ ACE/apps/JAWS2/50K.html | 1001 + ACE/apps/JAWS2/5K.html | 101 + ACE/apps/JAWS2/HTTPU/Makefile.am | 65 + ACE/apps/JAWS2/HTTPU/http_base.cpp | 323 + ACE/apps/JAWS2/HTTPU/http_base.h | 87 + ACE/apps/JAWS2/HTTPU/http_base.inl | 53 + ACE/apps/JAWS2/HTTPU/http_export.h | 38 + ACE/apps/JAWS2/HTTPU/http_headers.cpp | 154 + ACE/apps/JAWS2/HTTPU/http_headers.h | 171 + ACE/apps/JAWS2/HTTPU/http_headers.inl | 48 + ACE/apps/JAWS2/HTTPU/http_request.cpp | 86 + ACE/apps/JAWS2/HTTPU/http_request.h | 59 + ACE/apps/JAWS2/HTTPU/http_request.inl | 41 + ACE/apps/JAWS2/HTTPU/http_response.cpp | 49 + ACE/apps/JAWS2/HTTPU/http_response.h | 51 + ACE/apps/JAWS2/HTTPU/http_response.inl | 23 + ACE/apps/JAWS2/HTTPU/http_status.cpp | 87 + ACE/apps/JAWS2/HTTPU/http_status.h | 110 + ACE/apps/JAWS2/HTTPU/http_status.inl | 19 + ACE/apps/JAWS2/HTTPU/httpu.mpc | 30 + ACE/apps/JAWS2/HTTPU/parse_http_request.cpp | 116 + ACE/apps/JAWS2/HTTPU/parse_http_request.h | 59 + ACE/apps/JAWS2/HTTPU/parse_http_request.inl | 49 + ACE/apps/JAWS2/HTTPU/parse_http_response.cpp | 74 + ACE/apps/JAWS2/HTTPU/parse_http_response.h | 56 + ACE/apps/JAWS2/HTTPU/parse_http_response.inl | 43 + ACE/apps/JAWS2/HTTPU/parse_url.cpp | 322 + ACE/apps/JAWS2/HTTPU/parse_url.h | 63 + ACE/apps/JAWS2/HTTP_10.cpp | 32 + ACE/apps/JAWS2/HTTP_10.h | 68 + ACE/apps/JAWS2/HTTP_10_Parse.cpp | 80 + ACE/apps/JAWS2/HTTP_10_Read.cpp | 64 + ACE/apps/JAWS2/HTTP_10_Request.cpp | 120 + ACE/apps/JAWS2/HTTP_10_Request.h | 31 + ACE/apps/JAWS2/HTTP_10_Write.cpp | 157 + ACE/apps/JAWS2/HTTP_Policy.cpp | 17 + ACE/apps/JAWS2/HTTP_Policy.h | 22 + ACE/apps/JAWS2/JAWS/Assoc_Array.cpp | 269 + ACE/apps/JAWS2/JAWS/Assoc_Array.h | 102 + ACE/apps/JAWS2/JAWS/Cache_Hash_T.cpp | 237 + ACE/apps/JAWS2/JAWS/Cache_Hash_T.h | 60 + ACE/apps/JAWS2/JAWS/Cache_Heap_T.cpp | 290 + ACE/apps/JAWS2/JAWS/Cache_Heap_T.h | 103 + ACE/apps/JAWS2/JAWS/Cache_List_T.cpp | 217 + ACE/apps/JAWS2/JAWS/Cache_List_T.h | 111 + ACE/apps/JAWS2/JAWS/Cache_Manager.cpp | 99 + ACE/apps/JAWS2/JAWS/Cache_Manager.h | 64 + ACE/apps/JAWS2/JAWS/Cache_Manager_T.cpp | 579 + ACE/apps/JAWS2/JAWS/Cache_Manager_T.h | 179 + ACE/apps/JAWS2/JAWS/Cache_Object.cpp | 291 + ACE/apps/JAWS2/JAWS/Cache_Object.h | 158 + ACE/apps/JAWS2/JAWS/Concurrency.cpp | 337 + ACE/apps/JAWS2/JAWS/Concurrency.h | 132 + ACE/apps/JAWS2/JAWS/Data_Block.cpp | 76 + ACE/apps/JAWS2/JAWS/Data_Block.h | 50 + ACE/apps/JAWS2/JAWS/Export.h | 57 + ACE/apps/JAWS2/JAWS/FILE.cpp | 73 + ACE/apps/JAWS2/JAWS/FILE.h | 47 + ACE/apps/JAWS2/JAWS/Filecache.cpp | 94 + ACE/apps/JAWS2/JAWS/Filecache.h | 72 + ACE/apps/JAWS2/JAWS/Hash_Bucket_T.cpp | 462 + ACE/apps/JAWS2/JAWS/Hash_Bucket_T.h | 206 + ACE/apps/JAWS2/JAWS/Headers.cpp | 161 + ACE/apps/JAWS2/JAWS/Headers.h | 78 + ACE/apps/JAWS2/JAWS/IO.cpp | 595 + ACE/apps/JAWS2/JAWS/IO.h | 263 + ACE/apps/JAWS2/JAWS/IO_Acceptor.cpp | 196 + ACE/apps/JAWS2/JAWS/IO_Acceptor.h | 141 + ACE/apps/JAWS2/JAWS/IO_Handler.cpp | 502 + ACE/apps/JAWS2/JAWS/IO_Handler.h | 318 + ACE/apps/JAWS2/JAWS/Makefile.am | 90 + ACE/apps/JAWS2/JAWS/Parse_Headers.cpp | 438 + ACE/apps/JAWS2/JAWS/Parse_Headers.h | 123 + ACE/apps/JAWS2/JAWS/Pipeline.cpp | 27 + ACE/apps/JAWS2/JAWS/Pipeline.h | 39 + ACE/apps/JAWS2/JAWS/Pipeline_Handler_T.cpp | 31 + ACE/apps/JAWS2/JAWS/Pipeline_Handler_T.h | 32 + ACE/apps/JAWS2/JAWS/Pipeline_Tasks.cpp | 202 + ACE/apps/JAWS2/JAWS/Pipeline_Tasks.h | 56 + ACE/apps/JAWS2/JAWS/Policy.cpp | 89 + ACE/apps/JAWS2/JAWS/Policy.h | 65 + ACE/apps/JAWS2/JAWS/Reaper.cpp | 45 + ACE/apps/JAWS2/JAWS/Reaper.h | 48 + ACE/apps/JAWS2/JAWS/Server.cpp | 199 + ACE/apps/JAWS2/JAWS/Server.h | 39 + ACE/apps/JAWS2/JAWS/Waiter.cpp | 64 + ACE/apps/JAWS2/JAWS/Waiter.h | 49 + ACE/apps/JAWS2/JAWS/jaws2.mpc | 53 + ACE/apps/JAWS2/Makefile.am | 14 + ACE/apps/JAWS2/README | 32 + ACE/apps/JAWS2/main.cpp | 47 + ACE/apps/JAWS3/Makefile.am | 13 + ACE/apps/JAWS3/bench/average.cpp | 24 + ACE/apps/JAWS3/bench/mkfiles.cpp | 156 + ACE/apps/JAWS3/bench/rqfiles.cpp | 263 + .../JAWS3/contrib/jmills_at_tga_dot_com/README | 57 + .../contrib/jmills_at_tga_dot_com/jaws3-msvc.pat | 2827 +++ .../JAWS3/contrib/john_at_lyris_dot_com/README | 112 + .../contrib/john_at_lyris_dot_com/jaws3-cntlC.code | 92 + ACE/apps/JAWS3/docs/web/images/jaws3_banner.fig | 13 + ACE/apps/JAWS3/docs/web/images/jaws3_banner.gif | Bin 0 -> 4828 bytes ACE/apps/JAWS3/docs/web/images/jaws3_banner.png | Bin 0 -> 4403 bytes .../JAWS3/docs/web/images/jaws3_components.fig | 55 + .../JAWS3/docs/web/images/jaws3_components.gif | Bin 0 -> 12474 bytes ACE/apps/JAWS3/docs/web/index.html | 43 + ACE/apps/JAWS3/docs/web/overview.html | 120 + ACE/apps/JAWS3/http/HTTP_Data.h | 32 + ACE/apps/JAWS3/http/HTTP_Service_Handler.cpp | 67 + ACE/apps/JAWS3/http/HTTP_Service_Handler.h | 66 + ACE/apps/JAWS3/http/HTTP_States.h | 75 + ACE/apps/JAWS3/jaws3-todo/FILE_Cache.h | 52 + ACE/apps/JAWS3/jaws3-todo/Map_Manager.h | 148 + ACE/apps/JAWS3/jaws3-todo/Map_Manager_T.cpp | 398 + ACE/apps/JAWS3/jaws3-todo/Map_Manager_T.h | 392 + ACE/apps/JAWS3/jaws3-todo/Reactive_Socket.cpp | 83 + ACE/apps/JAWS3/jaws3-todo/Reactive_Socket.h | 89 + .../JAWS3/jaws3-todo/Reactive_Socket_Helpers.cpp | 82 + .../JAWS3/jaws3-todo/Reactive_Socket_Helpers.h | 87 + ACE/apps/JAWS3/jaws3-todo/Socket.cpp | 82 + ACE/apps/JAWS3/jaws3-todo/Socket.h | 144 + ACE/apps/JAWS3/jaws3/Asynch_IO.cpp | 308 + ACE/apps/JAWS3/jaws3/Asynch_IO.h | 72 + ACE/apps/JAWS3/jaws3/Asynch_IO_Helpers.h | 54 + ACE/apps/JAWS3/jaws3/Cached_Allocator_T.cpp | 140 + ACE/apps/JAWS3/jaws3/Cached_Allocator_T.h | 107 + ACE/apps/JAWS3/jaws3/Concurrency.cpp | 105 + ACE/apps/JAWS3/jaws3/Concurrency.h | 74 + ACE/apps/JAWS3/jaws3/Concurrency_T.cpp | 47 + ACE/apps/JAWS3/jaws3/Concurrency_T.h | 50 + ACE/apps/JAWS3/jaws3/Config_File.cpp | 304 + ACE/apps/JAWS3/jaws3/Config_File.h | 73 + ACE/apps/JAWS3/jaws3/Datagram.cpp | 86 + ACE/apps/JAWS3/jaws3/Datagram.h | 139 + ACE/apps/JAWS3/jaws3/Event_Completer.cpp | 55 + ACE/apps/JAWS3/jaws3/Event_Completer.h | 43 + ACE/apps/JAWS3/jaws3/Event_Dispatcher.cpp | 52 + ACE/apps/JAWS3/jaws3/Event_Dispatcher.h | 52 + ACE/apps/JAWS3/jaws3/Event_Result.h | 104 + ACE/apps/JAWS3/jaws3/Export.h | 48 + ACE/apps/JAWS3/jaws3/FILE.cpp | 93 + ACE/apps/JAWS3/jaws3/FILE.h | 50 + ACE/apps/JAWS3/jaws3/IO.cpp | 114 + ACE/apps/JAWS3/jaws3/IO.h | 140 + ACE/apps/JAWS3/jaws3/Makefile.am | 138 + ACE/apps/JAWS3/jaws3/Options.cpp | 25 + ACE/apps/JAWS3/jaws3/Options.h | 40 + ACE/apps/JAWS3/jaws3/Protocol_Handler.cpp | 65 + ACE/apps/JAWS3/jaws3/Protocol_Handler.h | 80 + ACE/apps/JAWS3/jaws3/Reactive_IO.cpp | 601 + ACE/apps/JAWS3/jaws3/Reactive_IO.h | 72 + ACE/apps/JAWS3/jaws3/Reactive_IO_Helpers.h | 308 + ACE/apps/JAWS3/jaws3/Signal_Task.cpp | 83 + ACE/apps/JAWS3/jaws3/Signal_Task.h | 32 + ACE/apps/JAWS3/jaws3/Symbol_Table.cpp | 12 + ACE/apps/JAWS3/jaws3/Symbol_Table.h | 53 + ACE/apps/JAWS3/jaws3/Synch_IO.cpp | 265 + ACE/apps/JAWS3/jaws3/Synch_IO.h | 65 + ACE/apps/JAWS3/jaws3/THYBRID_Concurrency.cpp | 130 + ACE/apps/JAWS3/jaws3/THYBRID_Concurrency.h | 37 + ACE/apps/JAWS3/jaws3/TPOOL_Concurrency.cpp | 80 + ACE/apps/JAWS3/jaws3/TPOOL_Concurrency.h | 32 + ACE/apps/JAWS3/jaws3/TPR_Concurrency.cpp | 89 + ACE/apps/JAWS3/jaws3/TPR_Concurrency.h | 35 + ACE/apps/JAWS3/jaws3/Task_Timer.cpp | 106 + ACE/apps/JAWS3/jaws3/Task_Timer.h | 56 + ACE/apps/JAWS3/jaws3/Templates.cpp | 72 + ACE/apps/JAWS3/jaws3/Timer.cpp | 53 + ACE/apps/JAWS3/jaws3/Timer.h | 94 + ACE/apps/JAWS3/jaws3/Timer_Helpers.cpp | 40 + ACE/apps/JAWS3/jaws3/Timer_Helpers.h | 44 + ACE/apps/JAWS3/jaws3/jaws.conf | 15 + ACE/apps/JAWS3/jaws3/jaws3.mpc | 94 + ACE/apps/JAWS3/jaws3/main.cpp | 33 + ACE/apps/JAWS3/small/SS_Data.cpp | 29 + ACE/apps/JAWS3/small/SS_Data.h | 32 + ACE/apps/JAWS3/small/SS_Service_Handler.cpp | 67 + ACE/apps/JAWS3/small/SS_Service_Handler.h | 65 + ACE/apps/JAWS3/small/SS_State_DONE.cpp | 25 + ACE/apps/JAWS3/small/SS_State_DONE.h | 31 + ACE/apps/JAWS3/small/SS_State_ERROR.cpp | 34 + ACE/apps/JAWS3/small/SS_State_ERROR.h | 30 + ACE/apps/JAWS3/small/SS_State_PARSE.cpp | 63 + ACE/apps/JAWS3/small/SS_State_PARSE.h | 30 + ACE/apps/JAWS3/small/SS_State_READ.cpp | 56 + ACE/apps/JAWS3/small/SS_State_READ.h | 30 + ACE/apps/JAWS3/small/SS_State_WRITE.cpp | 78 + ACE/apps/JAWS3/small/SS_State_WRITE.h | 30 + ACE/apps/JAWS3/small/SS_Templates.cpp | 13 + ACE/apps/JAWS3/small/jaws.conf | 5 + ACE/apps/JAWS3/small/svc.conf | 3 + ACE/apps/JAWS3/zBUILD | 17 + ACE/apps/JAWS3/zCHANGES | 73 + ACE/apps/JAWS3/zCONTRIB | 23 + ACE/apps/JAWS3/zCOPYING | 61 + ACE/apps/JAWS3/zFAQ | 36 + ACE/apps/JAWS3/zREADME | 99 + ACE/apps/JAWS3/zTHANKS | 117 + ACE/apps/JAWS3/zTODO | 6 + ACE/apps/Makefile.am | 25 + ACE/apps/README | 28 + ACE/apps/apps.mwc | 5 + ACE/apps/drwho/BS_Client.cpp | 91 + ACE/apps/drwho/BS_Client.h | 46 + ACE/apps/drwho/BS_Server.cpp | 120 + ACE/apps/drwho/BS_Server.h | 47 + ACE/apps/drwho/Binary_Search.cpp | 81 + ACE/apps/drwho/Binary_Search.h | 71 + ACE/apps/drwho/CM_Client.cpp | 143 + ACE/apps/drwho/CM_Client.h | 52 + ACE/apps/drwho/CM_Server.cpp | 109 + ACE/apps/drwho/CM_Server.h | 39 + ACE/apps/drwho/ChangeLog | 399 + ACE/apps/drwho/Comm_Manager.cpp | 11 + ACE/apps/drwho/Comm_Manager.h | 44 + ACE/apps/drwho/Drwho_Node.cpp | 101 + ACE/apps/drwho/Drwho_Node.h | 52 + ACE/apps/drwho/File_Manager.cpp | 171 + ACE/apps/drwho/File_Manager.h | 58 + ACE/apps/drwho/HT_Client.cpp | 36 + ACE/apps/drwho/HT_Client.h | 31 + ACE/apps/drwho/HT_Server.cpp | 39 + ACE/apps/drwho/HT_Server.h | 32 + ACE/apps/drwho/Hash_Table.cpp | 75 + ACE/apps/drwho/Hash_Table.h | 45 + ACE/apps/drwho/Makefile.am | 214 + ACE/apps/drwho/Multicast_Manager.cpp | 185 + ACE/apps/drwho/Multicast_Manager.h | 58 + ACE/apps/drwho/Options.cpp | 159 + ACE/apps/drwho/Options.h | 66 + ACE/apps/drwho/PMC_All.cpp | 101 + ACE/apps/drwho/PMC_All.h | 37 + ACE/apps/drwho/PMC_Flo.cpp | 126 + ACE/apps/drwho/PMC_Flo.h | 37 + ACE/apps/drwho/PMC_Ruser.cpp | 179 + ACE/apps/drwho/PMC_Ruser.h | 40 + ACE/apps/drwho/PMC_Usr.cpp | 117 + ACE/apps/drwho/PMC_Usr.h | 38 + ACE/apps/drwho/PMS_All.cpp | 102 + ACE/apps/drwho/PMS_All.h | 35 + ACE/apps/drwho/PMS_Flo.cpp | 77 + ACE/apps/drwho/PMS_Flo.h | 35 + ACE/apps/drwho/PMS_Ruser.cpp | 135 + ACE/apps/drwho/PMS_Ruser.h | 37 + ACE/apps/drwho/PMS_Usr.cpp | 83 + ACE/apps/drwho/PMS_Usr.h | 35 + ACE/apps/drwho/PM_Client.cpp | 140 + ACE/apps/drwho/PM_Client.h | 45 + ACE/apps/drwho/PM_Server.cpp | 84 + ACE/apps/drwho/PM_Server.h | 41 + ACE/apps/drwho/Protocol_Manager.cpp | 88 + ACE/apps/drwho/Protocol_Manager.h | 58 + ACE/apps/drwho/Protocol_Record.cpp | 97 + ACE/apps/drwho/Protocol_Record.h | 49 + ACE/apps/drwho/README | 308 + ACE/apps/drwho/Rwho_DB_Manager.cpp | 126 + ACE/apps/drwho/Rwho_DB_Manager.h | 53 + ACE/apps/drwho/SL_Client.cpp | 15 + ACE/apps/drwho/SL_Client.h | 33 + ACE/apps/drwho/SL_Server.cpp | 26 + ACE/apps/drwho/SL_Server.h | 34 + ACE/apps/drwho/SML_Client.cpp | 36 + ACE/apps/drwho/SML_Client.h | 36 + ACE/apps/drwho/SML_Server.cpp | 11 + ACE/apps/drwho/SML_Server.h | 29 + ACE/apps/drwho/SMR_Client.cpp | 22 + ACE/apps/drwho/SMR_Client.h | 29 + ACE/apps/drwho/SMR_Server.cpp | 18 + ACE/apps/drwho/SMR_Server.h | 29 + ACE/apps/drwho/SM_Client.cpp | 75 + ACE/apps/drwho/SM_Client.h | 38 + ACE/apps/drwho/SM_Server.cpp | 69 + ACE/apps/drwho/SM_Server.h | 36 + ACE/apps/drwho/Search_Struct.cpp | 23 + ACE/apps/drwho/Search_Struct.h | 41 + ACE/apps/drwho/Select_Manager.cpp | 8 + ACE/apps/drwho/Select_Manager.h | 32 + ACE/apps/drwho/Single_Lookup.cpp | 32 + ACE/apps/drwho/Single_Lookup.h | 39 + ACE/apps/drwho/client.cpp | 66 + ACE/apps/drwho/drwho.mpc | 96 + ACE/apps/drwho/global.h | 53 + ACE/apps/drwho/server.cpp | 117 + ACE/apps/gperf/COPYING | 340 + ACE/apps/gperf/ChangeLog | 2127 ++ ACE/apps/gperf/Makefile.am | 27 + ACE/apps/gperf/README | 29 + ACE/apps/gperf/gperf.1 | 23 + ACE/apps/gperf/gperf.info | 1129 ++ ACE/apps/gperf/gperf.mpc | 9 + ACE/apps/gperf/gperf.texi | 1187 ++ ACE/apps/gperf/src/Bool_Array.cpp | 108 + ACE/apps/gperf/src/Bool_Array.h | 75 + ACE/apps/gperf/src/Gen_Perf.cpp | 458 + ACE/apps/gperf/src/Gen_Perf.h | 81 + ACE/apps/gperf/src/Hash_Table.cpp | 116 + ACE/apps/gperf/src/Hash_Table.h | 66 + ACE/apps/gperf/src/Iterator.cpp | 99 + ACE/apps/gperf/src/Iterator.h | 80 + ACE/apps/gperf/src/Key_List.cpp | 1957 ++ ACE/apps/gperf/src/Key_List.h | 173 + ACE/apps/gperf/src/List_Node.cpp | 134 + ACE/apps/gperf/src/List_Node.h | 80 + ACE/apps/gperf/src/Makefile.am | 56 + ACE/apps/gperf/src/Options.cpp | 873 + ACE/apps/gperf/src/Options.h | 190 + ACE/apps/gperf/src/Vectors.cpp | 36 + ACE/apps/gperf/src/Vectors.h | 61 + ACE/apps/gperf/src/Version.cpp | 30 + ACE/apps/gperf/src/gperf.cpp | 88 + ACE/apps/gperf/src/gperf.mpc | 20 + ACE/apps/gperf/tests/Makefile.am | 305 + ACE/apps/gperf/tests/ada-pred.exp | 54 + ACE/apps/gperf/tests/ada-res.exp | 63 + ACE/apps/gperf/tests/ada.gperf | 63 + ACE/apps/gperf/tests/adadefs.gperf | 54 + ACE/apps/gperf/tests/c-parse.gperf | 56 + ACE/apps/gperf/tests/c.exp | 32 + ACE/apps/gperf/tests/c.gperf | 32 + ACE/apps/gperf/tests/corba.exp | 36 + ACE/apps/gperf/tests/corba.gperf | 36 + ACE/apps/gperf/tests/cpp-res.exp | 73 + ACE/apps/gperf/tests/cpp.gperf | 73 + ACE/apps/gperf/tests/gpc.gperf | 48 + ACE/apps/gperf/tests/gperf_test.mpb | 23 + ACE/apps/gperf/tests/gplus.gperf | 76 + ACE/apps/gperf/tests/idl.exp | 9 + ACE/apps/gperf/tests/idl.gperf | 9 + ACE/apps/gperf/tests/iout2_gen/.empty | 1 + ACE/apps/gperf/tests/irc.gperf | 63 + ACE/apps/gperf/tests/makeinfo.gperf | 116 + ACE/apps/gperf/tests/modula.exp | 106 + ACE/apps/gperf/tests/modula2.gperf | 40 + ACE/apps/gperf/tests/modula3.gperf | 106 + ACE/apps/gperf/tests/pascal.exp | 36 + ACE/apps/gperf/tests/pascal.gperf | 36 + ACE/apps/gperf/tests/tao.exp | 21 + ACE/apps/gperf/tests/tao.gperf | 21 + ACE/apps/gperf/tests/test-1.exp | 165 + ACE/apps/gperf/tests/test-2.exp | 214 + ACE/apps/gperf/tests/test-3.exp | 196 + ACE/apps/gperf/tests/test-4.exp | 170 + ACE/apps/gperf/tests/test-5.exp | 139 + ACE/apps/gperf/tests/test-6.exp | 90 + ACE/apps/gperf/tests/test-7.exp | 32 + ACE/apps/gperf/tests/test.cpp | 35 + ACE/apps/gperf/tests/tests.mpc | 244 + ACE/apps/gperf/version.texi | 4 + ACE/apps/mkcsregdb/Makefile.am | 39 + ACE/apps/mkcsregdb/code_set_registry1.2g.txt | 1528 ++ ACE/apps/mkcsregdb/cs_test.txt | 15 + ACE/apps/mkcsregdb/iso_only.txt | 7 + ACE/apps/mkcsregdb/mkcsregdb.cpp | 328 + ACE/apps/mkcsregdb/mkcsregdb.mpc | 7 + ACE/apps/soreduce/Library.cpp | 347 + ACE/apps/soreduce/Library.h | 128 + ACE/apps/soreduce/Makefile.am | 51 + ACE/apps/soreduce/Obj_Module.cpp | 200 + ACE/apps/soreduce/Obj_Module.h | 70 + ACE/apps/soreduce/README | 163 + ACE/apps/soreduce/SO_Group.cpp | 166 + ACE/apps/soreduce/SO_Group.h | 48 + ACE/apps/soreduce/Sig_List.cpp | 184 + ACE/apps/soreduce/Sig_List.h | 49 + ACE/apps/soreduce/Signature.cpp | 45 + ACE/apps/soreduce/Signature.h | 50 + ACE/apps/soreduce/soreduce.cpp | 51 + ACE/apps/soreduce/soreduce.mpc | 15 + ACE/bin/ACE-casts-convert | 50 + ACE/bin/ACETAOCIAO.style | 304 + ACE/bin/ACEutils.pm | 117 + ACE/bin/Array.pl | 31 + ACE/bin/Array_Helper | 16 + ACE/bin/ChangeLogEditor/CVSFileLocator.pm | 125 + ACE/bin/ChangeLogEditor/ChangeLogEdit.pm | 122 + ACE/bin/ChangeLogEditor/ChangeLogEntry.pm | 145 + ACE/bin/ChangeLogEditor/EmailTranslator.pm | 52 + ACE/bin/ChangeLogEditor/FileLocator.pm | 77 + ACE/bin/ChangeLogEditor/FileLocatorFactory.pm | 34 + ACE/bin/ChangeLogEditor/SVNFileLocator.pm | 75 + ACE/bin/DependencyGenerator/GNUDependencyWriter.pm | 33 + ACE/bin/DependencyGenerator/GNUObjectGenerator.pm | 34 + ACE/bin/FOCUS/ChangeLog | 290 + ACE/bin/FOCUS/FOCUS.pl | 186 + ACE/bin/FOCUS/NEWS | 35 + ACE/bin/FOCUS/PROBLEM-REPORT-FORM | 45 + ACE/bin/FOCUS/Parser/FOCUSParser.pm | 726 + ACE/bin/FOCUS/README | 76 + ACE/bin/FOCUS/VERSION | 1 + ACE/bin/FOCUS/docs/FOCUS.html | 165 + .../Dispatch-Resolution-Optimization.spl | 172 + .../Leader_Follower_Flushing_Strategy.spl | 211 + .../specializations/Protocol_Family/IIOP/iiop.spl | 995 + ACE/bin/FOCUS/specializations/README | 16 + .../Reactor_Family/Select_Reactor_MT.spl | 452 + .../Reactor_Family/Select_Reactor_ST.spl | 468 + .../specializations/Reactor_Family/TP_Reactor.spl | 449 + .../Wait_Strategy/Wait_On_Leader_Follower.spl | 141 + .../specializations/Wait_Strategy/Wait_On_Read.spl | 131 + ACE/bin/Hash_Map_Manager.pl | 146 + ACE/bin/Hash_Map_Manager_Helper | 76 + ACE/bin/LabVIEW_RT/PXI_Reset.exe | Bin 0 -> 890570 bytes ACE/bin/LabVIEW_RT/PXI_Reset.ini | 14 + ACE/bin/LabVIEW_RT/README | 57 + ACE/bin/LabVIEW_RT/Reboot_Target.exe | Bin 0 -> 147456 bytes ACE/bin/LabVIEW_RT/Reboot_Target.ini | 14 + .../LabVIEW_RT/labview_test_controller/ReadMe.txt | 77 + .../labview_test_controller.cpp | 599 + .../labview_test_controller.sln | 32 + .../labview_test_controller.vcproj | 158 + .../LabVIEW_RT/labview_test_controller/stdafx.cpp | 9 + .../LabVIEW_RT/labview_test_controller/stdafx.h | 14 + .../LabVIEW_RT/labview_test_controller/test.cpp | 17 + .../LabVIEW_RT/labview_test_controller/test.vcproj | 134 + ACE/bin/MakeProjectCreator/README | 37 + ACE/bin/MakeProjectCreator/config/MPC.cfg | 2 + ACE/bin/MakeProjectCreator/config/ace_athena.mpb | 7 + ACE/bin/MakeProjectCreator/config/ace_fl.mpb | 29 + .../MakeProjectCreator/config/ace_flreactor.mpb | 8 + ACE/bin/MakeProjectCreator/config/ace_for_tao.mpb | 11 + ACE/bin/MakeProjectCreator/config/ace_fox.mpb | 19 + .../MakeProjectCreator/config/ace_foxreactor.mpb | 8 + ACE/bin/MakeProjectCreator/config/ace_gl.mpb | 16 + ACE/bin/MakeProjectCreator/config/ace_gtk.mpb | 13 + ACE/bin/MakeProjectCreator/config/ace_mfc.mpb | 6 + ACE/bin/MakeProjectCreator/config/ace_motif.mpb | 7 + ACE/bin/MakeProjectCreator/config/ace_openssl.mpb | 30 + ACE/bin/MakeProjectCreator/config/ace_output.mpb | 12 + ACE/bin/MakeProjectCreator/config/ace_qt.mpb | 28 + .../MakeProjectCreator/config/ace_qtreactor.mpb | 8 + ACE/bin/MakeProjectCreator/config/ace_tk.mpb | 19 + .../MakeProjectCreator/config/ace_tkreactor.mpb | 8 + ACE/bin/MakeProjectCreator/config/ace_x11.mpb | 22 + ACE/bin/MakeProjectCreator/config/ace_xt.mpb | 20 + .../MakeProjectCreator/config/ace_xtreactor.mpb | 8 + ACE/bin/MakeProjectCreator/config/ace_zzip.mpb | 15 + ACE/bin/MakeProjectCreator/config/acedefaults.mpb | 21 + ACE/bin/MakeProjectCreator/config/aceexe.mpb | 6 + ACE/bin/MakeProjectCreator/config/acelib.mpb | 6 + ACE/bin/MakeProjectCreator/config/acenosubsets.mpb | 10 + ACE/bin/MakeProjectCreator/config/acexml.mpb | 10 + .../MakeProjectCreator/config/automake.features | 38 + .../config/avoids_ace_for_tao.mpb | 6 + ACE/bin/MakeProjectCreator/config/bmake.features | 7 + ACE/bin/MakeProjectCreator/config/borland.features | 7 + ACE/bin/MakeProjectCreator/config/conv_lib.mpb | 8 + ACE/bin/MakeProjectCreator/config/core.mpb | 5 + ACE/bin/MakeProjectCreator/config/crosscompile.mpb | 14 + ACE/bin/MakeProjectCreator/config/default.rel | 8 + ACE/bin/MakeProjectCreator/config/em3.features | 7 + ACE/bin/MakeProjectCreator/config/exceptions.mpb | 6 + ACE/bin/MakeProjectCreator/config/global.features | 121 + ACE/bin/MakeProjectCreator/config/gnuace.features | 10 + ACE/bin/MakeProjectCreator/config/htbp.mpb | 10 + ACE/bin/MakeProjectCreator/config/install.mpb | 5 + ACE/bin/MakeProjectCreator/config/install_bin.mpb | 8 + .../MakeProjectCreator/config/install_headers.mpb | 8 + ACE/bin/MakeProjectCreator/config/install_lib.mpb | 8 + ACE/bin/MakeProjectCreator/config/ipv6.mpb | 14 + ACE/bin/MakeProjectCreator/config/kokyu.mpb | 8 + .../MakeProjectCreator/config/labviewrt_dll.mpb | 17 + ACE/bin/MakeProjectCreator/config/man.mpb | 9 + ACE/bin/MakeProjectCreator/config/nmake.features | 7 + ACE/bin/MakeProjectCreator/config/pkgconfig.mpb | 9 + ACE/bin/MakeProjectCreator/config/qos.mpb | 8 + ACE/bin/MakeProjectCreator/config/rmcast.mpb | 9 + ACE/bin/MakeProjectCreator/config/script.mpb | 9 + ACE/bin/MakeProjectCreator/config/ssl.mpb | 12 + ACE/bin/MakeProjectCreator/config/ssl_for_tao.mpb | 12 + ACE/bin/MakeProjectCreator/config/ssl_full.mpb | 12 + ACE/bin/MakeProjectCreator/config/stl.mpb | 6 + .../MakeProjectCreator/config/support_ostream.mpb | 7 + ACE/bin/MakeProjectCreator/config/test_files.mpb | 10 + ACE/bin/MakeProjectCreator/config/threads.mpb | 6 + ACE/bin/MakeProjectCreator/config/tmcast.mpb | 9 + ACE/bin/MakeProjectCreator/config/vc71.features | 7 + ACE/bin/MakeProjectCreator/config/vc8.features | 7 + ACE/bin/MakeProjectCreator/config/vc8nmake.mpb | 6 + ACE/bin/MakeProjectCreator/config/vc9.features | 7 + ACE/bin/MakeProjectCreator/config/vc9nmake.mpb | 9 + ACE/bin/MakeProjectCreator/config/vc_warnings.mpb | 31 + ACE/bin/MakeProjectCreator/config/vcfullmacros.mpt | 14 + ACE/bin/MakeProjectCreator/config/vcl.mpb | 16 + .../MakeProjectCreator/config/vcpartialmacros.mpt | 12 + .../config/versioned_namespace.mpb | 13 + ACE/bin/MakeProjectCreator/config/wfmo.mpb | 6 + ACE/bin/MakeProjectCreator/config/winregistry.mpb | 7 + ACE/bin/MakeProjectCreator/config/wxwindows.mpb | 21 + ACE/bin/MakeProjectCreator/docs/templates/gnu.txt | 25 + .../modules/AutomakeWorkspaceHelper.pm | 209 + .../modules/BorlandProjectCreator.pm | 126 + .../modules/BorlandWorkspaceCreator.pm | 166 + .../modules/GNUACEProjectCreator.pm | 101 + .../modules/GNUACEWorkspaceCreator.pm | 223 + .../modules/GNUAutobuildProjectCreator.pm | 27 + .../modules/GNUAutobuildWorkspaceCreator.pm | 58 + ACE/bin/MakeProjectCreator/templates/bor.mpd | 219 + ACE/bin/MakeProjectCreator/templates/bordll.mpt | 8 + ACE/bin/MakeProjectCreator/templates/borexe.mpt | 7 + ACE/bin/MakeProjectCreator/templates/gnu.mpd | 669 + ACE/bin/MakeProjectCreator/templates/gnudll.mpt | 6 + ACE/bin/MakeProjectCreator/templates/gnuexe.mpt | 4 + ACE/bin/Makefile.am | 40 + ACE/bin/PerlACE/ConfigList.pm | 176 + ACE/bin/PerlACE/MSProject.pm | 393 + ACE/bin/PerlACE/MSProject/DSP.pm | 28 + ACE/bin/PerlACE/MSProject/VCP.pm | 30 + ACE/bin/PerlACE/Makefile.am | 23 + ACE/bin/PerlACE/Process.pm | 65 + ACE/bin/PerlACE/ProcessLVRT.pm | 375 + ACE/bin/PerlACE/ProcessVX.pm | 252 + ACE/bin/PerlACE/ProcessVX_Unix.pm | 486 + ACE/bin/PerlACE/ProcessVX_Win32.pm | 434 + ACE/bin/PerlACE/Process_Unix.pm | 526 + ACE/bin/PerlACE/Process_VMS.pm | 358 + ACE/bin/PerlACE/Process_Win32.pm | 405 + ACE/bin/PerlACE/Run_Test.pm | 246 + ACE/bin/PerlACE/TestTarget.pm | 87 + ACE/bin/PerlACE/TestTarget_LVRT.pm | 161 + ACE/bin/PerlACE/perlace.mpc | 13 + ACE/bin/PythonACE/__init__.py | 2 + ACE/bin/PythonACE/fuzz/__init__.py | 97 + ACE/bin/PythonACE/fuzz/_fuzz.py | 3 + ACE/bin/PythonACE/fuzz/_generic_handler.py | 44 + ACE/bin/PythonACE/fuzz/_mailer.py | 106 + ACE/bin/PythonACE/fuzz/_path.py | 0 ACE/bin/PythonACE/fuzz/_singleton.py | 60 + ACE/bin/PythonACE/fuzz/_types.py | 6 + ACE/bin/PythonACE/fuzz/_warning_handler.py | 53 + ACE/bin/PythonACE/fuzz/check_includes.py | 20 + ACE/bin/PythonACE/fuzz/cpp_inline.py | 23 + ACE/bin/PythonACE/fuzz/inline.py | 19 + ACE/bin/PythonACE/fuzz/math_include.py | 19 + ACE/bin/PythonACE/fuzz/max_filename.py | 16 + ACE/bin/PythonACE/fuzz/max_project_len.py | 27 + ACE/bin/PythonACE/fuzz/newline.py | 17 + ACE/bin/PythonACE/fuzz/no_conflict_markers.py | 20 + ACE/bin/PythonACE/fuzz/noncvs.py | 12 + ACE/bin/PythonACE/fuzz/ptr_arith_t.py | 17 + ACE/bin/PythonACE/fuzz/refcountservantbase.py | 17 + ACE/bin/PythonACE/fuzz/streams_include.py | 19 + ACE/bin/PythonACE/fuzz/verify_changelog.py | 13 + ACE/bin/Uniqueid.pm | 28 + ACE/bin/ace-install | 513 + ACE/bin/ace_components | 111 + ACE/bin/ace_ld | 237 + ACE/bin/ace_tests.lst | 18 + ACE/bin/add_rel_link.sh | 98 + ACE/bin/aix_shr | 32 + ACE/bin/auto_compile | 607 + ACE/bin/auto_compile_wrapper | 56 + ACE/bin/auto_ptr.perl | 16 + ACE/bin/auto_run_tests.pl | 208 + ACE/bin/autoconf_compile | 520 + ACE/bin/autoconf_compile_wrapper | 56 + ACE/bin/bin.mpc | 13 + ACE/bin/bootstrap | 123 + ACE/bin/ciao_tests.lst | 16 + ACE/bin/cle.pl | 289 + ACE/bin/clean_dsp.pl | 52 + ACE/bin/clean_sems.sh | 26 + ACE/bin/clone.csh | 26 + ACE/bin/cltime.pl | 13 + ACE/bin/copy-script.sh | 8 + ACE/bin/count_lines | 236 + ACE/bin/create_ace_build | 307 + ACE/bin/create_ace_build.pl | 463 + ACE/bin/cut_cidlc.sh | 55 + ACE/bin/depgen.pl | 56 + ACE/bin/diff-builds.pl | 299 + ACE/bin/doxygen-convert-h.pl | 562 + ACE/bin/envinfo.cpp | 40 + ACE/bin/footprint_stats.sh | 76 + ACE/bin/fuzz.pl | 1860 ++ ACE/bin/fuzz.py | 66 + ACE/bin/g++_metric.sh | 30 + ACE/bin/g++dep | 173 + ACE/bin/generate_compile_stats.sh | 1093 + ACE/bin/generate_doxygen.pl | 317 + ACE/bin/generate_export_file.pl | 165 + ACE/bin/generate_footprint_chart.sh | 16 + ACE/bin/generate_performance_chart.sh | 16 + ACE/bin/generate_rel_manpages | 121 + ACE/bin/generate_topinfo_charts.sh | 16 + ACE/bin/indent_macros.pl | 59 + ACE/bin/libsize.pl | 192 + ACE/bin/main2TMAIN.pl | 16 + ACE/bin/make-components | 17 + ACE/bin/make_release.py | 815 + ACE/bin/mpc.pl | 66 + ACE/bin/msvc_mpc_auto_compile.pl | 367 + ACE/bin/msvc_static_compile.pl | 416 + ACE/bin/msvc_static_order.lst | 400 + ACE/bin/mwc.pl | 66 + ACE/bin/package_copy_script.sh | 7 + ACE/bin/performance_stats.sh | 199 + ACE/bin/pippen.pl | 419 + ACE/bin/regenerate_exports.pl | 54 + ACE/bin/reverse_clean | 25 + ACE/bin/run_all.pl | 224 + ACE/bin/run_all_win32.pl | 180 + ACE/bin/sets-manager.py | 210 + ACE/bin/show_unused_macros.pl | 224 + ACE/bin/split-cpp | 422 + ACE/bin/svcconf-convert.pl | 300 + ACE/bin/svn_props.py | 48 + ACE/bin/tao_orb_tests.lst | 348 + ACE/bin/tao_other_tests.lst | 187 + ACE/bin/topinfo_iorsize_stats.sh | 78 + ACE/bin/topinfo_simple_stats.sh | 78 + ACE/bin/topinfo_stats.sh | 74 + ACE/bin/update-ace+tao.sh | 39 + ACE/bin/vx_repo_link.pl | 217 + ACE/bin/vxworks_modify.pl | 578 + ACE/configure.ac | 8237 ++++++++ ACE/contrib/FaCE/ACE.ico | Bin 0 -> 1078 bytes ACE/contrib/FaCE/ACE_Racer.bmp | Bin 0 -> 9918 bytes ACE/contrib/FaCE/CE_ARGV.CPP | 118 + ACE/contrib/FaCE/CE_ARGV.H | 90 + ACE/contrib/FaCE/CE_Screen_Output.cpp | 166 + ACE/contrib/FaCE/CE_Screen_Output.h | 97 + ACE/contrib/FaCE/FACE.ico | Bin 0 -> 1078 bytes ACE/contrib/FaCE/FaCE.cpp | 656 + ACE/contrib/FaCE/FaCE.h | 57 + ACE/contrib/FaCE/FaCE.mpc | 16 + ACE/contrib/FaCE/FaCE.rc | 268 + ACE/contrib/FaCE/FaCENOACE.mpc | 16 + ACE/contrib/FaCE/FaCE_OS.h | 38 + ACE/contrib/FaCE/License.txt | 27 + ACE/contrib/FaCE/Main.cpp | 49 + ACE/contrib/FaCE/README | 287 + ACE/contrib/FaCE/TAO.bmp | Bin 0 -> 21798 bytes ACE/contrib/FaCE/newres.h | 43 + ACE/contrib/FaCE/resource.h | 45 + ACE/contrib/minizip/ChangeLogUnzip | 67 + ACE/contrib/minizip/crypt.h | 136 + ACE/contrib/minizip/ioapi.c | 169 + ACE/contrib/minizip/ioapi.h | 78 + ACE/contrib/minizip/miniunz.c | 587 + ACE/contrib/minizip/minizip.c | 422 + ACE/contrib/minizip/minizip.mpc | 23 + ACE/contrib/minizip/minizip_export.h | 33 + ACE/contrib/minizip/mztools.c | 282 + ACE/contrib/minizip/mztools.h | 32 + ACE/contrib/minizip/unzip.c | 1536 ++ ACE/contrib/minizip/unzip.h | 368 + ACE/contrib/minizip/zip.c | 1164 ++ ACE/contrib/minizip/zip.h | 245 + .../utility/BuildRules/Archive.gcc.post.rules | 47 + .../utility/BuildRules/Archive.gcc.pre.rules | 28 + ACE/contrib/utility/BuildRules/Archive.post.rules | 7 + ACE/contrib/utility/BuildRules/Archive.pre.rules | 7 + ACE/contrib/utility/BuildRules/Bootstrap.rules | 95 + .../utility/BuildRules/Documentation.post.rules | 35 + .../utility/BuildRules/Documentation.pre.rules | 18 + .../utility/BuildRules/Executable.gcc.post.rules | 46 + .../utility/BuildRules/Executable.gcc.pre.rules | 26 + .../BuildRules/Executable.generic.post.rules | 55 + .../BuildRules/Executable.generic.pre.rules | 26 + .../utility/BuildRules/Executable.post.rules | 8 + .../utility/BuildRules/Executable.pre.rules | 8 + .../utility/BuildRules/Object.gcc.post.rules | 38 + .../utility/BuildRules/Object.gcc.pre.rules | 22 + ACE/contrib/utility/BuildRules/Object.post.rules | 7 + ACE/contrib/utility/BuildRules/Object.pre.rules | 7 + .../utility/BuildRules/Recursion.post.rules | 37 + ACE/contrib/utility/BuildRules/Recursion.pre.rules | 13 + .../utility/BuildRules/Shared.gcc.post.rules | 43 + .../utility/BuildRules/Shared.gcc.pre.rules | 26 + .../utility/BuildRules/Shared.generic.post.rules | 51 + .../utility/BuildRules/Shared.generic.pre.rules | 26 + ACE/contrib/utility/BuildRules/Shared.post.rules | 7 + ACE/contrib/utility/BuildRules/Shared.pre.rules | 7 + ACE/contrib/utility/BuildRules/Thoughts | 55 + ACE/contrib/utility/Documentation/Build.xhtml | 58 + .../utility/Documentation/CommandLine/News.xhtml | 31 + .../Documentation/CommandLine/Terminology.xhtml | 272 + .../utility/Documentation/CommandLine/Thoughts | 8 + .../utility/Documentation/CommandLine/index.xhtml | 39 + .../utility/Documentation/ExH/Compound.hpp.html | 50 + .../utility/Documentation/ExH/Example/Makefile | 26 + .../Documentation/ExH/Example/bad_cast.cpp.html | 63 + .../Documentation/ExH/Example/compound.cpp.html | 153 + .../Documentation/ExH/Example/hello_world.cpp.html | 152 + .../ExH/Example/logic_to_system.cpp.html | 69 + .../ExH/Logic/DescriptiveException.hpp.html | 61 + .../Documentation/ExH/Logic/Exception.hpp.html | 43 + .../utility/Documentation/ExH/Logic/Makefile | 20 + ACE/contrib/utility/Documentation/ExH/Makefile | 16 + .../Documentation/ExH/Makefile.documentation | 20 + ACE/contrib/utility/Documentation/ExH/News.xhtml | 47 + .../ExH/System/DescriptiveException.hpp.html | 64 + .../Documentation/ExH/System/Exception.hpp.html | 32 + .../utility/Documentation/ExH/System/Makefile | 20 + ACE/contrib/utility/Documentation/ExH/index.xhtml | 60 + .../utility/Documentation/Hetero/News.xhtml | 31 + .../utility/Documentation/Hetero/index.xhtml | 62 + .../utility/Documentation/Introspection/News.xhtml | 38 + .../Documentation/Introspection/index.xhtml | 42 + ACE/contrib/utility/Documentation/Makefile | 16 + ACE/contrib/utility/Documentation/News.xhtml | 72 + .../ReferenceCounting/DefaultImpl.hpp.html | 93 + .../ReferenceCounting/Interface.hpp.html | 82 + .../Documentation/ReferenceCounting/Makefile | 22 + .../Documentation/ReferenceCounting/News.xhtml | 90 + .../ReferenceCounting/SmartPtr.hpp.html | 103 + .../ReferenceCounting/StrictPtr.hpp.html | 107 + .../Documentation/ReferenceCounting/index.xhtml | 50 + ACE/contrib/utility/Documentation/ReleaseProcess | 13 + ACE/contrib/utility/Documentation/Style/CXX.css | 9 + .../utility/Documentation/Style/CXX_Blue.css | 25 + .../utility/Documentation/Style/Default.css | 45 + ACE/contrib/utility/Documentation/Synch/Makefile | 16 + ACE/contrib/utility/Documentation/Synch/News.xhtml | 36 + .../utility/Documentation/Synch/Policy/Makefile | 20 + .../Documentation/Synch/Policy/Null.hpp.html | 59 + .../utility/Documentation/Synch/index.xhtml | 48 + ACE/contrib/utility/Documentation/TODO | 53 + ACE/contrib/utility/Documentation/Template.xhtml | 33 + .../utility/Documentation/Thoughts/Enum/EnumCount | 95 + .../utility/Documentation/Thoughts/Enum/EnumCount2 | 17 + .../utility/Documentation/Thoughts/Enum/EnumInfo | 45 + ACE/contrib/utility/Documentation/index.xhtml | 81 + .../utility/Example/CommandLine/Foo/command.cpp | 88 + .../utility/Example/CommandLine/Foo/foo.cpp | 184 + ACE/contrib/utility/Example/ExH/BadCast/Makefile | 24 + .../utility/Example/ExH/BadCast/bad_cast.cpp | 54 + ACE/contrib/utility/Example/ExH/Compound/Makefile | 24 + .../utility/Example/ExH/Compound/compound.cpp | 144 + .../utility/Example/ExH/HelloWorld/Makefile | 24 + .../utility/Example/ExH/HelloWorld/hello_world.cpp | 142 + .../utility/Example/ExH/LogicToSystem/Makefile | 24 + .../Example/ExH/LogicToSystem/logic_to_system.cpp | 60 + ACE/contrib/utility/Example/ExH/Makefile | 16 + .../utility/Example/Hetero/Container/Makefile | 24 + .../utility/Example/Hetero/Container/container.cpp | 112 + ACE/contrib/utility/Example/Hetero/Makefile | 16 + .../Introspection/InheritanceTree/Hierarchy.cpp | 104 + .../Introspection/InheritanceTree/Hierarchy.hpp | 61 + .../Example/Introspection/InheritanceTree/Makefile | 22 + .../InheritanceTree/inheritance_tree.cpp | 65 + ACE/contrib/utility/Example/Introspection/Makefile | 16 + .../Example/Introspection/Traversal/Makefile | 22 + .../Example/Introspection/Traversal/SyntaxTree.cpp | 119 + .../Example/Introspection/Traversal/SyntaxTree.hpp | 95 + .../Example/Introspection/Traversal/Traversal.cpp | 105 + .../Example/Introspection/Traversal/Traversal.hpp | 157 + .../Example/Introspection/Traversal/driver.cpp | 93 + ACE/contrib/utility/Example/Makefile | 16 + ACE/contrib/utility/Makefile | 18 + ACE/contrib/utility/Test/ExH/Compound/Makefile | 24 + ACE/contrib/utility/Test/ExH/Compound/compound.cpp | 115 + ACE/contrib/utility/Test/ExH/Converter/Makefile | 24 + .../utility/Test/ExH/Converter/converter.cpp | 50 + ACE/contrib/utility/Test/ExH/Inline/Makefile | 24 + ACE/contrib/utility/Test/ExH/Inline/inline.cpp | 19 + ACE/contrib/utility/Test/ExH/Inline/unit.cpp | 8 + .../Test/ExH/Logic/DescriptiveException/Makefile | 24 + .../DescriptiveException/descriptive_exception.cpp | 110 + ACE/contrib/utility/Test/ExH/Logic/Makefile | 16 + ACE/contrib/utility/Test/ExH/Makefile | 16 + .../Test/ExH/System/DescriptiveException/Makefile | 24 + .../DescriptiveException/descriptive_exception.cpp | 109 + ACE/contrib/utility/Test/ExH/System/Makefile | 16 + .../utility/Test/Introspection/Inline/Makefile | 24 + .../utility/Test/Introspection/Inline/inline.cpp | 20 + .../utility/Test/Introspection/Inline/unit.cpp | 8 + ACE/contrib/utility/Test/Introspection/Makefile | 16 + ACE/contrib/utility/Test/Makefile | 18 + .../Test/ReferenceCounting/DefaultImpl/Makefile | 24 + .../ReferenceCounting/DefaultImpl/default_impl.cpp | 132 + .../utility/Test/ReferenceCounting/Inline/Makefile | 24 + .../Test/ReferenceCounting/Inline/inline.cpp | 16 + .../utility/Test/ReferenceCounting/Inline/unit.cpp | 8 + .../Test/ReferenceCounting/Interface/Makefile | 24 + .../Test/ReferenceCounting/Interface/interface.cpp | 104 + .../utility/Test/ReferenceCounting/Makefile | 16 + .../Test/ReferenceCounting/SmartPtr/Makefile | 24 + .../Test/ReferenceCounting/SmartPtr/smart_ptr.cpp | 220 + .../Test/ReferenceCounting/StrictPtr/Makefile | 24 + .../ReferenceCounting/StrictPtr/strict_ptr.cpp | 218 + ACE/contrib/utility/Test/Synch/Inline/Makefile | 24 + ACE/contrib/utility/Test/Synch/Inline/inline.cpp | 20 + ACE/contrib/utility/Test/Synch/Inline/unit.cpp | 8 + ACE/contrib/utility/Test/Synch/Makefile | 16 + ACE/contrib/utility/Utility/ExH/Compound.hpp | 49 + ACE/contrib/utility/Utility/ExH/Compound.tpp | 74 + ACE/contrib/utility/Utility/ExH/Converter.hpp | 24 + ACE/contrib/utility/Utility/ExH/Converter.tpp | 19 + ACE/contrib/utility/Utility/ExH/ExH.hpp | 22 + .../Utility/ExH/Logic/DescriptiveException.hpp | 65 + .../Utility/ExH/Logic/DescriptiveException.ipp | 106 + .../Utility/ExH/Logic/DescriptiveException.tpp | 23 + .../utility/Utility/ExH/Logic/Exception.hpp | 42 + .../utility/Utility/ExH/Logic/Exception.ipp | 20 + .../utility/Utility/ExH/StringStreamConverter.hpp | 26 + .../utility/Utility/ExH/StringStreamConverter.ipp | 18 + .../Utility/ExH/System/DescriptiveException.hpp | 65 + .../Utility/ExH/System/DescriptiveException.ipp | 91 + .../Utility/ExH/System/DescriptiveException.tpp | 23 + .../utility/Utility/ExH/System/Exception.hpp | 29 + ACE/contrib/utility/Utility/Hetero/Container.hpp | 182 + ACE/contrib/utility/Utility/Hetero/Shell.hpp | 86 + ACE/contrib/utility/Utility/Hetero/TypeList.hpp | 46 + .../utility/Utility/Hetero/TypedContainer.hpp | 57 + ACE/contrib/utility/Utility/Hetero/Vector.hpp | 47 + .../Utility/Introspection/Introspection.hpp | 14 + ACE/contrib/utility/Utility/Introspection/Makefile | 19 + .../utility/Utility/Introspection/Object.cpp | 24 + .../utility/Utility/Introspection/Object.hpp | 47 + .../utility/Utility/Introspection/Object.ipp | 48 + .../utility/Utility/Introspection/TypeId.cpp | 21 + .../utility/Utility/Introspection/TypeId.hpp | 47 + .../utility/Utility/Introspection/TypeId.ipp | 37 + .../utility/Utility/Introspection/TypeId.tpp | 18 + .../utility/Utility/Introspection/TypeInfo.hpp | 104 + .../utility/Utility/Introspection/TypeInfo.ipp | 77 + ACE/contrib/utility/Utility/Makefile | 16 + .../Utility/ReferenceCounting/DefaultImpl.hpp | 97 + .../Utility/ReferenceCounting/DefaultImpl.ipp | 105 + .../Utility/ReferenceCounting/ExternalLockImpl.hpp | 60 + .../Utility/ReferenceCounting/ExternalLockImpl.ipp | 122 + .../Utility/ReferenceCounting/Interface.hpp | 80 + .../Utility/ReferenceCounting/Interface.ipp | 22 + .../Utility/ReferenceCounting/Interface.tpp | 19 + .../ReferenceCounting/ReferenceCounting.hpp | 16 + .../utility/Utility/ReferenceCounting/SmartPtr.hpp | 97 + .../utility/Utility/ReferenceCounting/SmartPtr.tpp | 164 + .../Utility/ReferenceCounting/StrictPtr.hpp | 102 + .../Utility/ReferenceCounting/StrictPtr.tpp | 161 + ACE/contrib/utility/Utility/Synch/Policy/Null.hpp | 54 + ACE/contrib/utility/Utility/Synch/Policy/Null.ipp | 20 + ACE/contrib/utility/Vault/StringConverter.hpp | 27 + ACE/contrib/utility/Vault/StringConverter.ipp | 18 + ACE/contrib/utility/Vault/hetero/map | 13 + ACE/contrib/utility/Vault/hetero/map.hpp | 249 + ACE/contrib/utility/Vault/hetero/map.tpp | 12 + ACE/contrib/utility/Version | 3 + ACE/contrib/utility/license.html | 79 + ACE/docs/ACE-FMM.html | 332 + ACE/docs/ACE-SSL.html | 45 + ACE/docs/ACE-bug-process.html | 208 + ACE/docs/ACE-categories.html | 753 + ACE/docs/ACE-development-process.html | 207 + ACE/docs/ACE-guidelines.html | 1371 ++ ACE/docs/ACE-lessons.html | 270 + ACE/docs/ACE-porting.html | 198 + ACE/docs/ACE-subsets.html | 196 + ACE/docs/CE-status.txt | 51 + ACE/docs/Download.html | 453 + ACE/docs/README.tutorials | 7 + ACE/docs/Symbol_Versioning.html | 233 + ACE/docs/ace_guidelines.vsmacros | Bin 0 -> 67072 bytes ACE/docs/bczar/bczar.html | 372 + ACE/docs/bczar/privileges.html | 63 + ACE/docs/exceptions.html | 655 + ACE/docs/index.html | 99 + ACE/docs/msvc_notes.txt | 132 + ACE/docs/run_test.txt | 232 + ACE/docs/svn/config | 142 + ACE/docs/svn/svn-prefs.reg | 97 + ACE/docs/usage-bugzilla.html | 102 + ACE/docs/wchar.txt | 128 + ACE/etc/DOC-way.html | 63 + ACE/etc/README | 32 + ACE/etc/ace.doxygen | 171 + ACE/etc/ace_man.doxygen | 160 + ACE/etc/ace_qos.doxygen | 160 + ACE/etc/ace_rmcast.doxygen | 160 + ACE/etc/ace_ssl.doxygen | 160 + ACE/etc/acexml.doxygen | 160 + ACE/etc/ciao.doxygen | 169 + ACE/etc/ciao_DAnCE.doxygen | 167 + ACE/etc/ciao_config_handlers.doxygen | 168 + ACE/etc/doxygen.css | 4 + ACE/etc/enforce_ace_try.diff | 271 + ACE/etc/index.html | 70 + ACE/etc/purify.solaris2 | 161 + ACE/etc/tao.doxygen | 159 + ACE/etc/tao_anytypecode.doxygen | 160 + ACE/etc/tao_av.doxygen | 164 + ACE/etc/tao_compression.doxygen | 160 + ACE/etc/tao_cosevent.doxygen | 165 + ACE/etc/tao_cosnaming.doxygen | 161 + ACE/etc/tao_cosnotification.doxygen | 171 + ACE/etc/tao_costime.doxygen | 162 + ACE/etc/tao_costrader.doxygen | 165 + ACE/etc/tao_dynamicany.doxygen | 160 + ACE/etc/tao_dynamicinterface.doxygen | 159 + ACE/etc/tao_esf.doxygen | 161 + ACE/etc/tao_ifr.doxygen | 163 + ACE/etc/tao_implrepo.doxygen | 162 + ACE/etc/tao_iormanip.doxygen | 160 + ACE/etc/tao_iortable.doxygen | 160 + ACE/etc/tao_pi.doxygen | 160 + ACE/etc/tao_pi_server.doxygen | 160 + ACE/etc/tao_portablegroup.doxygen | 164 + ACE/etc/tao_portableserver.doxygen | 160 + ACE/etc/tao_pss.doxygen | 161 + ACE/etc/tao_rtcorba.doxygen | 160 + ACE/etc/tao_rtevent.doxygen | 171 + ACE/etc/tao_rtportableserver.doxygen | 160 + ACE/etc/tao_security.doxygen | 166 + ACE/etc/tao_smartproxies.doxygen | 159 + ACE/etc/tao_ssliop.doxygen | 167 + ACE/etc/tao_strategies.doxygen | 159 + ACE/etc/tao_transportcurrent.doxygen | 161 + ACE/etc/xlc_dummy.cpp | 8 + ACE/examples/APG/Active_Objects/AO.cpp | 188 + ACE/examples/APG/Active_Objects/AO2.cpp | 199 + ACE/examples/APG/Active_Objects/Makefile.am | 58 + ACE/examples/APG/Active_Objects/active_objects.mpc | 18 + ACE/examples/APG/Config/ARGV_Example.cpp | 62 + ACE/examples/APG/Config/Get_Opt.cpp | 59 + ACE/examples/APG/Config/Get_Opt_Long.cpp | 48 + ACE/examples/APG/Config/HASTATUS_export.h | 54 + ACE/examples/APG/Config/HA_Status.cpp | 98 + ACE/examples/APG/Config/Makefile.am | 85 + ACE/examples/APG/Config/config.mpc | 31 + ACE/examples/APG/Containers/Allocator.cpp | 93 + ACE/examples/APG/Containers/Array.cpp | 41 + ACE/examples/APG/Containers/DLList.cpp | 116 + ACE/examples/APG/Containers/DataElement.h | 52 + ACE/examples/APG/Containers/Hash_Map.cpp | 118 + ACE/examples/APG/Containers/Hash_Map_Hash.cpp | 111 + ACE/examples/APG/Containers/Hash_Map_Hash.h | 57 + ACE/examples/APG/Containers/KeyType.h | 28 + ACE/examples/APG/Containers/Makefile.am | 235 + ACE/examples/APG/Containers/Map_Manager.cpp | 117 + .../APG/Containers/Map_Manager_Specialization.cpp | 153 + ACE/examples/APG/Containers/Queues.cpp | 115 + ACE/examples/APG/Containers/RB_Tree.cpp | 135 + ACE/examples/APG/Containers/RB_Tree_Functors.cpp | 134 + ACE/examples/APG/Containers/RB_Tree_Functors.h | 37 + ACE/examples/APG/Containers/Sets.cpp | 123 + ACE/examples/APG/Containers/Stacks.cpp | 147 + ACE/examples/APG/Containers/containers.mpc | 87 + ACE/examples/APG/Logging/Callback-2.h | 44 + ACE/examples/APG/Logging/Callback-3.h | 69 + ACE/examples/APG/Logging/Callback.h | 25 + .../APG/Logging/Change_Instance_Default.cpp | 37 + ACE/examples/APG/Logging/Change_Mask.cpp | 29 + ACE/examples/APG/Logging/Howto_Syslog.cpp | 28 + ACE/examples/APG/Logging/LogManager.h | 102 + ACE/examples/APG/Logging/Log_Msg_Alt.h | 19 + ACE/examples/APG/Logging/Makefile.am | 380 + ACE/examples/APG/Logging/Simple1.cpp | 23 + ACE/examples/APG/Logging/Simple2.cpp | 25 + ACE/examples/APG/Logging/Trace.h | 157 + ACE/examples/APG/Logging/Trace_Return.cpp | 41 + ACE/examples/APG/Logging/Use_Callback.cpp | 20 + ACE/examples/APG/Logging/Use_Callback2.cpp | 20 + ACE/examples/APG/Logging/Use_LogManager.cpp | 33 + ACE/examples/APG/Logging/Use_Logger.cpp | 17 + ACE/examples/APG/Logging/Use_Logging_Server.cpp | 20 + ACE/examples/APG/Logging/Use_Logging_Strategy.cpp | 33 + ACE/examples/APG/Logging/Use_Multiple_Sinks.cpp | 34 + ACE/examples/APG/Logging/Use_Ostream.cpp | 36 + ACE/examples/APG/Logging/Use_Stderr.cpp | 38 + ACE/examples/APG/Logging/Use_Syslog.cpp | 32 + ACE/examples/APG/Logging/Wrap_Macros.cpp | 38 + ACE/examples/APG/Logging/Wrap_Macros_Alt.cpp | 18 + ACE/examples/APG/Logging/client.conf | 1 + ACE/examples/APG/Logging/logging.mpc | 128 + ACE/examples/APG/Logging/logging_strategy.conf | 1 + ACE/examples/APG/Logging/server.conf | 3 + ACE/examples/APG/Makefile.am | 31 + ACE/examples/APG/Misc_IPC/Makefile.am | 72 + ACE/examples/APG/Misc_IPC/UDP_Broadcast.cpp | 34 + ACE/examples/APG/Misc_IPC/UDP_Multicast.cpp | 37 + ACE/examples/APG/Misc_IPC/UDP_Unicast.cpp | 71 + ACE/examples/APG/Misc_IPC/misc_ipc.mpc | 25 + ACE/examples/APG/Naming/EMail.h | 28 + ACE/examples/APG/Naming/Graph.cpp | 47 + ACE/examples/APG/Naming/Graph.h | 18 + ACE/examples/APG/Naming/Graphable_Element.cpp | 4 + ACE/examples/APG/Naming/Graphable_Element.h | 53 + ACE/examples/APG/Naming/Makefile.am | 128 + ACE/examples/APG/Naming/Name_Binding.h | 61 + ACE/examples/APG/Naming/Naming_Context.h | 70 + ACE/examples/APG/Naming/Netlocal.cpp | 40 + ACE/examples/APG/Naming/Netlocal_reader.cpp | 23 + ACE/examples/APG/Naming/Nodelocal.cpp | 37 + ACE/examples/APG/Naming/Nodelocal_shared.cpp | 43 + .../APG/Naming/Nodelocal_shared_reader.cpp | 23 + ACE/examples/APG/Naming/Temperature_Grapher.cpp | 81 + ACE/examples/APG/Naming/Temperature_Grapher.h | 30 + .../APG/Naming/Temperature_Grapher_Options.h | 21 + ACE/examples/APG/Naming/Temperature_Monitor.cpp | 133 + ACE/examples/APG/Naming/Temperature_Monitor.h | 29 + ACE/examples/APG/Naming/Temperature_Monitor2.cpp | 145 + ACE/examples/APG/Naming/Temperature_Monitor2.h | 36 + .../APG/Naming/Temperature_Monitor_Options.h | 48 + ACE/examples/APG/Naming/Thermometer.h | 48 + ACE/examples/APG/Naming/naming.mpc | 55 + ACE/examples/APG/Naming/svc.conf | 1 + ACE/examples/APG/Proactor/HA_Proactive_Status.cpp | 163 + ACE/examples/APG/Proactor/HA_Proactive_Status.h | 87 + ACE/examples/APG/Proactor/Makefile.am | 40 + ACE/examples/APG/Proactor/proactor.mpc | 10 + ACE/examples/APG/Processes/Makefile.am | 94 + .../APG/Processes/Process_Manager_Death.cpp | 67 + .../APG/Processes/Process_Manager_Spawn.cpp | 59 + ACE/examples/APG/Processes/Process_Mutex.cpp | 79 + ACE/examples/APG/Processes/Spawn.cpp | 207 + ACE/examples/APG/Processes/processes.mpc | 34 + ACE/examples/APG/Reactor/Client.cpp | 118 + ACE/examples/APG/Reactor/Client.h | 52 + ACE/examples/APG/Reactor/ClientService.h | 40 + ACE/examples/APG/Reactor/HAStatus-AC.cpp | 141 + ACE/examples/APG/Reactor/HAStatus.cpp | 336 + ACE/examples/APG/Reactor/Makefile.am | 147 + ACE/examples/APG/Reactor/Reschedule.cpp | 83 + ACE/examples/APG/Reactor/Schedule_Timers.cpp | 65 + ACE/examples/APG/Reactor/Timer_Cancel.cpp | 106 + ACE/examples/APG/Reactor/Timer_State_Data.cpp | 153 + ACE/examples/APG/Reactor/Timers.cpp | 82 + ACE/examples/APG/Reactor/reactor.mpc | 58 + ACE/examples/APG/Shared_Memory/Hash_Map.cpp | 250 + ACE/examples/APG/Shared_Memory/Makefile.am | 117 + ACE/examples/APG/Shared_Memory/Malloc.cpp | 113 + ACE/examples/APG/Shared_Memory/Mem_Map.cpp | 35 + ACE/examples/APG/Shared_Memory/PI_Malloc.cpp | 140 + ACE/examples/APG/Shared_Memory/Pool_Growth.cpp | 261 + ACE/examples/APG/Shared_Memory/Record.h | 45 + ACE/examples/APG/Shared_Memory/shared_memory.mpc | 42 + ACE/examples/APG/Signals/Makefile.am | 90 + ACE/examples/APG/Signals/SigAction.cpp | 75 + ACE/examples/APG/Signals/SigGuard.cpp | 43 + ACE/examples/APG/Signals/SigHandler.cpp | 60 + ACE/examples/APG/Signals/SigHandlers.cpp | 54 + ACE/examples/APG/Signals/SigInfo.cpp | 169 + ACE/examples/APG/Signals/signals.mpc | 37 + ACE/examples/APG/Sockets/Basic.cpp | 36 + ACE/examples/APG/Sockets/Basic_Robust.cpp | 137 + ACE/examples/APG/Sockets/Iovec.cpp | 85 + ACE/examples/APG/Sockets/Makefile.am | 76 + ACE/examples/APG/Sockets/Server.cpp | 97 + ACE/examples/APG/Sockets/sockets.mpc | 30 + ACE/examples/APG/Streams/Answerer.cpp | 407 + ACE/examples/APG/Streams/BasicTask.h | 143 + ACE/examples/APG/Streams/Command.h | 40 + ACE/examples/APG/Streams/CommandModule.cpp | 20 + ACE/examples/APG/Streams/CommandModule.h | 27 + ACE/examples/APG/Streams/CommandStream.cpp | 97 + ACE/examples/APG/Streams/CommandStream.h | 44 + ACE/examples/APG/Streams/CommandTask.cpp | 153 + ACE/examples/APG/Streams/CommandTask.h | 39 + ACE/examples/APG/Streams/CommandTasks.cpp | 221 + ACE/examples/APG/Streams/CommandTasks.h | 108 + ACE/examples/APG/Streams/EndTask.h | 27 + ACE/examples/APG/Streams/Makefile.am | 53 + ACE/examples/APG/Streams/Message.h | 92 + ACE/examples/APG/Streams/MessageInfo.h | 100 + ACE/examples/APG/Streams/RecordingDevice.h | 119 + .../APG/Streams/RecordingDeviceFactory.cpp | 25 + ACE/examples/APG/Streams/RecordingDeviceFactory.h | 22 + ACE/examples/APG/Streams/RecordingDevice_QC.h | 5 + ACE/examples/APG/Streams/RecordingDevice_Text.cpp | 197 + ACE/examples/APG/Streams/RecordingDevice_Text.h | 84 + ACE/examples/APG/Streams/RecordingDevice_USRVM.h | 5 + ACE/examples/APG/Streams/Util.h | 92 + ACE/examples/APG/Streams/streams.mpc | 17 + ACE/examples/APG/Svc_Config/HASTATUS_export.h | 53 + .../Svc_Config/HA_Configurable_Server_Dynamic.cpp | 17 + .../Svc_Config/HA_Configurable_Server_Static.cpp | 18 + ACE/examples/APG/Svc_Config/HA_Status_Dynamic.cpp | 113 + ACE/examples/APG/Svc_Config/HA_Status_Dynamic.h | 43 + ACE/examples/APG/Svc_Config/HA_Status_Static.cpp | 121 + ACE/examples/APG/Svc_Config/HA_Status_Static.h | 40 + ACE/examples/APG/Svc_Config/Makefile.am | 82 + ACE/examples/APG/Svc_Config/status.ini | 2 + ACE/examples/APG/Svc_Config/svc.conf.dynamic | 2 + ACE/examples/APG/Svc_Config/svc.conf.static | 1 + ACE/examples/APG/Svc_Config/svc_config.mpc | 28 + ACE/examples/APG/ThreadManagement/Async_Cancel.cpp | 63 + ACE/examples/APG/ThreadManagement/Coop_Cancel.cpp | 68 + ACE/examples/APG/ThreadManagement/ExitHandler.cpp | 71 + ACE/examples/APG/ThreadManagement/Makefile.am | 155 + ACE/examples/APG/ThreadManagement/Pool.cpp | 46 + ACE/examples/APG/ThreadManagement/Priorities.cpp | 104 + .../APG/ThreadManagement/SecurityContext.h | 16 + ACE/examples/APG/ThreadManagement/Signals.cpp | 93 + ACE/examples/APG/ThreadManagement/Signals2.cpp | 97 + ACE/examples/APG/ThreadManagement/Start_Hook.cpp | 60 + ACE/examples/APG/ThreadManagement/State.cpp | 39 + ACE/examples/APG/ThreadManagement/threadmgmt.mpc | 65 + ACE/examples/APG/ThreadPools/Futures.cpp | 321 + ACE/examples/APG/ThreadPools/LF_ThreadPool.cpp | 254 + ACE/examples/APG/ThreadPools/Makefile.am | 101 + ACE/examples/APG/ThreadPools/Request_Handler.h | 34 + ACE/examples/APG/ThreadPools/TP_Reactor.cpp | 269 + ACE/examples/APG/ThreadPools/Task_ThreadPool.cpp | 149 + ACE/examples/APG/ThreadPools/ThreadPool.cpp | 271 + ACE/examples/APG/ThreadPools/threadpools.mpc | 38 + ACE/examples/APG/ThreadSafety/Atomic_Op.cpp | 127 + ACE/examples/APG/ThreadSafety/Barrier.cpp | 91 + ACE/examples/APG/ThreadSafety/ClientContext.h | 30 + ACE/examples/APG/ThreadSafety/Makefile.am | 149 + ACE/examples/APG/ThreadSafety/Mutex.cpp | 73 + ACE/examples/APG/ThreadSafety/RW_Lock.cpp | 139 + ACE/examples/APG/ThreadSafety/Semaphore.cpp | 149 + ACE/examples/APG/ThreadSafety/TSS.cpp | 75 + ACE/examples/APG/ThreadSafety/Tokens.cpp | 102 + ACE/examples/APG/ThreadSafety/Tokens_Deadlock.cpp | 69 + ACE/examples/APG/ThreadSafety/threadsafety.mpc | 60 + ACE/examples/APG/Threads/Activate.cpp | 33 + ACE/examples/APG/Threads/Condition_Variables.cpp | 121 + ACE/examples/APG/Threads/Guards.cpp | 95 + ACE/examples/APG/Threads/Makefile.am | 110 + ACE/examples/APG/Threads/Message_Blocks.cpp | 50 + ACE/examples/APG/Threads/Message_Queue.cpp | 179 + ACE/examples/APG/Threads/Message_Receiver.h | 90 + ACE/examples/APG/Threads/Mutexes.cpp | 75 + ACE/examples/APG/Threads/threads.mpc | 44 + ACE/examples/APG/Timers/Alarm.cpp | 57 + ACE/examples/APG/Timers/CB.cpp | 70 + ACE/examples/APG/Timers/CB.h | 36 + ACE/examples/APG/Timers/Makefile.am | 95 + ACE/examples/APG/Timers/PCB.cpp | 79 + ACE/examples/APG/Timers/PCB.h | 29 + ACE/examples/APG/Timers/PTimerDispatcher.cpp | 69 + ACE/examples/APG/Timers/PTimerDispatcher.h | 39 + ACE/examples/APG/Timers/Task.cpp | 73 + ACE/examples/APG/Timers/TimerDispatcher.cpp | 73 + ACE/examples/APG/Timers/TimerDispatcher.h | 40 + ACE/examples/APG/Timers/Timers.cpp | 58 + ACE/examples/APG/Timers/Upcall.cpp | 172 + ACE/examples/APG/Timers/Upcall.h | 87 + ACE/examples/APG/Timers/timers.mpc | 34 + ACE/examples/ASX/CCM_App/ASX_CCM_App.mpc | 26 + ACE/examples/ASX/CCM_App/CCM_App.cpp | 122 + ACE/examples/ASX/CCM_App/Makefile.am | 59 + ACE/examples/ASX/CCM_App/SC_Client.cpp | 13 + ACE/examples/ASX/CCM_App/SC_Server.cpp | 86 + ACE/examples/ASX/CCM_App/svc.conf | 21 + ACE/examples/ASX/CCM_App/svc.conf.xml | 33 + .../Event_Server/Event_Server/Consumer_Router.cpp | 159 + .../Event_Server/Event_Server/Consumer_Router.h | 71 + .../ASX/Event_Server/Event_Server/Event.mpc | 15 + .../Event_Server/Event_Server/Event_Analyzer.cpp | 80 + .../ASX/Event_Server/Event_Server/Event_Analyzer.h | 44 + .../ASX/Event_Server/Event_Server/Makefile.am | 50 + .../ASX/Event_Server/Event_Server/Options.cpp | 208 + .../ASX/Event_Server/Event_Server/Options.h | 122 + .../ASX/Event_Server/Event_Server/Options.inl | 141 + .../ASX/Event_Server/Event_Server/Peer_Router.cpp | 435 + .../ASX/Event_Server/Event_Server/Peer_Router.h | 158 + .../Event_Server/Event_Server/Supplier_Router.cpp | 165 + .../Event_Server/Event_Server/Supplier_Router.h | 72 + .../ASX/Event_Server/Event_Server/event_server.cpp | 258 + ACE/examples/ASX/Event_Server/Makefile.am | 14 + ACE/examples/ASX/Event_Server/README | 79 + .../ASX/Event_Server/Transceiver/Makefile.am | 35 + .../ASX/Event_Server/Transceiver/Transceiver.mpc | 9 + .../ASX/Event_Server/Transceiver/transceiver.cpp | 238 + .../ASX/Event_Server/Transceiver/transceiver.h | 60 + ACE/examples/ASX/Makefile.am | 16 + .../ASX/Message_Queue/ASX_Message_Queue.mpc | 25 + ACE/examples/ASX/Message_Queue/Makefile.am | 67 + ACE/examples/ASX/Message_Queue/bounded_buffer.cpp | 140 + ACE/examples/ASX/Message_Queue/buffer_stream.cpp | 314 + ACE/examples/ASX/Message_Queue/priority_buffer.cpp | 145 + .../ASX/UPIPE_Event_Server/Consumer_Router.cpp | 138 + .../ASX/UPIPE_Event_Server/Consumer_Router.h | 53 + .../ASX/UPIPE_Event_Server/Event_Analyzer.cpp | 73 + .../ASX/UPIPE_Event_Server/Event_Analyzer.h | 37 + ACE/examples/ASX/UPIPE_Event_Server/Makefile.am | 50 + ACE/examples/ASX/UPIPE_Event_Server/Options.cpp | 209 + ACE/examples/ASX/UPIPE_Event_Server/Options.h | 88 + ACE/examples/ASX/UPIPE_Event_Server/Options.inl | 166 + .../ASX/UPIPE_Event_Server/Peer_Router.cpp | 283 + ACE/examples/ASX/UPIPE_Event_Server/Peer_Router.h | 127 + .../ASX/UPIPE_Event_Server/Supplier_Router.cpp | 137 + .../ASX/UPIPE_Event_Server/Supplier_Router.h | 57 + .../ASX/UPIPE_Event_Server/UPIPE_Event.mpc | 15 + .../ASX/UPIPE_Event_Server/event_server.cpp | 271 + ACE/examples/Bounded_Packet_Relay/BPR_Drivers.cpp | 535 + ACE/examples/Bounded_Packet_Relay/BPR_Drivers.h | 290 + .../Bounded_Packet_Relay/BPR_Drivers_T.cpp | 322 + ACE/examples/Bounded_Packet_Relay/BPR_Drivers_T.h | 178 + .../Bounded_Packet_Relay/Bounded_Packet_Relay.mpc | 7 + ACE/examples/Bounded_Packet_Relay/Makefile.am | 40 + ACE/examples/Bounded_Packet_Relay/README | 194 + .../Thread_Bounded_Packet_Relay.cpp | 770 + .../Thread_Bounded_Packet_Relay.h | 400 + ACE/examples/Bounded_Packet_Relay/bpr_thread.cpp | 122 + ACE/examples/C++NPv1/C++NPv1.mpc | 70 + ACE/examples/C++NPv1/Iterative_Logging_Server.cpp | 17 + ACE/examples/C++NPv1/Iterative_Logging_Server.h | 64 + ACE/examples/C++NPv1/Logging_Client.cpp | 145 + ACE/examples/C++NPv1/Logging_Handler.cpp | 111 + ACE/examples/C++NPv1/Logging_Handler.h | 55 + ACE/examples/C++NPv1/Logging_Server.cpp | 75 + ACE/examples/C++NPv1/Logging_Server.h | 44 + ACE/examples/C++NPv1/Makefile.am | 198 + .../Process_Per_Connection_Logging_Server.cpp | 180 + .../Process_Per_Connection_Logging_Server.h | 53 + ACE/examples/C++NPv1/README | 73 + .../RT_Thread_Per_Connection_Logging_Server.cpp | 132 + .../RT_Thread_Per_Connection_Logging_Server.h | 22 + ACE/examples/C++NPv1/Reactive_Logging_Server.cpp | 17 + ACE/examples/C++NPv1/Reactive_Logging_Server.h | 80 + .../C++NPv1/Reactive_Logging_Server_Ex.cpp | 20 + ACE/examples/C++NPv1/Reactive_Logging_Server_Ex.h | 95 + .../Thread_Per_Connection_Logging_Server.cpp | 93 + .../C++NPv1/Thread_Per_Connection_Logging_Server.h | 49 + ACE/examples/C++NPv2/AC_CLD_export.h | 54 + ACE/examples/C++NPv2/AC_Client_Logging_Daemon.cpp | 429 + ACE/examples/C++NPv2/AC_Client_Logging_Daemon.h | 62 + ACE/examples/C++NPv2/AIO_CLD_export.h | 54 + ACE/examples/C++NPv2/AIO_Client_Logging_Daemon.cpp | 362 + ACE/examples/C++NPv2/AIO_Client_Logging_Daemon.h | 135 + ACE/examples/C++NPv2/C++NPv2.mpc | 184 + ACE/examples/C++NPv2/CLD_export.h | 38 + ACE/examples/C++NPv2/Client_Logging_Daemon.cpp | 389 + .../C++NPv2/Configurable_Logging_Server.cpp | 20 + ACE/examples/C++NPv2/Logging_Acceptor.cpp | 38 + ACE/examples/C++NPv2/Logging_Acceptor.h | 53 + ACE/examples/C++NPv2/Logging_Acceptor_Ex.h | 41 + ACE/examples/C++NPv2/Logging_Event_Handler.cpp | 45 + ACE/examples/C++NPv2/Logging_Event_Handler.h | 61 + ACE/examples/C++NPv2/Logging_Event_Handler_Ex.cpp | 41 + ACE/examples/C++NPv2/Logging_Event_Handler_Ex.h | 57 + ACE/examples/C++NPv2/Logging_Handler.cpp | 110 + ACE/examples/C++NPv2/Logging_Handler.h | 57 + ACE/examples/C++NPv2/Makefile.am | 427 + ACE/examples/C++NPv2/README | 99 + ACE/examples/C++NPv2/Reactor_Logging_Server.cpp | 29 + .../C++NPv2/Reactor_Logging_Server_Adapter.cpp | 69 + .../C++NPv2/Reactor_Logging_Server_Adapter.h | 35 + ACE/examples/C++NPv2/Reactor_Logging_Server_T.cpp | 26 + ACE/examples/C++NPv2/Reactor_Logging_Server_T.h | 29 + ACE/examples/C++NPv2/SLD.cpp | 17 + ACE/examples/C++NPv2/SLDEX_export.h | 38 + ACE/examples/C++NPv2/SLD_export.h | 38 + ACE/examples/C++NPv2/SLDex.cpp | 17 + .../C++NPv2/SR_Configurable_Logging_Server.cpp | 26 + .../C++NPv2/Select_Reactor_Logging_Server.cpp | 104 + ACE/examples/C++NPv2/Server_Shutdown.cpp | 97 + ACE/examples/C++NPv2/Service_Reporter.cpp | 125 + ACE/examples/C++NPv2/Service_Reporter.h | 38 + ACE/examples/C++NPv2/TPCLS_export.h | 54 + ACE/examples/C++NPv2/TPC_Logging_Server.cpp | 106 + ACE/examples/C++NPv2/TPC_Logging_Server.h | 87 + ACE/examples/C++NPv2/TPLS_export.h | 38 + ACE/examples/C++NPv2/TP_Logging_Server.cpp | 70 + ACE/examples/C++NPv2/TP_Logging_Server.h | 131 + ACE/examples/C++NPv2/TP_Reactor_Logging_Server.cpp | 116 + .../C++NPv2/WFMO_Reactor_Logging_Server.cpp | 145 + ACE/examples/C++NPv2/display_logfile.cpp | 366 + ACE/examples/C++NPv2/svc.conf | 8 + ACE/examples/ConfigViewer/ConfigTreeCtrl.cpp | 229 + ACE/examples/ConfigViewer/ConfigTreeCtrl.h | 52 + ACE/examples/ConfigViewer/ConfigViewer.mpc | 7 + ACE/examples/ConfigViewer/ConfigurationViewer.cpp | 45 + ACE/examples/ConfigViewer/ConfigurationViewer.rc | 9 + ACE/examples/ConfigViewer/MainFrame.cpp | 199 + ACE/examples/ConfigViewer/MainFrame.h | 72 + ACE/examples/ConfigViewer/Makefile.am | 54 + ACE/examples/ConfigViewer/README | 74 + ACE/examples/ConfigViewer/ValueDlg.cpp | 63 + ACE/examples/ConfigViewer/ValueDlg.h | 51 + ACE/examples/ConfigViewer/ValueListCtrl.cpp | 227 + ACE/examples/ConfigViewer/ValueListCtrl.h | 47 + ACE/examples/ConfigViewer/mondrian.ico | Bin 0 -> 766 bytes ACE/examples/ConfigViewer/mondrian.xpm | 44 + ACE/examples/ConfigViewer/stdafx.cpp | 3 + ACE/examples/ConfigViewer/stdafx.h | 16 + ACE/examples/Connection/Makefile.am | 15 + .../Connection/blocking/Connection_Blocking.mpc | 21 + ACE/examples/Connection/blocking/Makefile.am | 62 + ACE/examples/Connection/blocking/README | 36 + .../Connection/blocking/SPIPE-acceptor.cpp | 224 + ACE/examples/Connection/blocking/SPIPE-acceptor.h | 79 + .../Connection/blocking/SPIPE-connector.cpp | 218 + ACE/examples/Connection/blocking/SPIPE-connector.h | 82 + .../Connection/blocking/test_spipe_acceptor.cpp | 36 + .../Connection/blocking/test_spipe_connector.cpp | 21 + .../Connection/misc/Connection_Handler.cpp | 230 + ACE/examples/Connection/misc/Connection_Handler.h | 44 + ACE/examples/Connection/misc/Connection_Misc.mpc | 17 + ACE/examples/Connection/misc/Makefile.am | 55 + ACE/examples/Connection/misc/test_upipe.cpp | 122 + ACE/examples/Connection/misc/test_upipe.h | 76 + .../Connection/non_blocking/CPP-acceptor.cpp | 247 + .../Connection/non_blocking/CPP-acceptor.h | 96 + .../Connection/non_blocking/CPP-connector.cpp | 287 + .../Connection/non_blocking/CPP-connector.h | 98 + .../non_blocking/Connection_Non_Blocking.mpc | 68 + ACE/examples/Connection/non_blocking/Makefile.am | 158 + ACE/examples/Connection/non_blocking/README | 28 + .../non_blocking/test_lsock_acceptor.cpp | 49 + .../non_blocking/test_lsock_connector.cpp | 46 + .../Connection/non_blocking/test_sock_acceptor.cpp | 34 + .../non_blocking/test_sock_connector.cpp | 49 + .../non_blocking/test_spipe_acceptor.cpp | 45 + .../non_blocking/test_spipe_connector.cpp | 40 + .../Connection/non_blocking/test_tli_acceptor.cpp | 41 + .../Connection/non_blocking/test_tli_connector.cpp | 39 + ACE/examples/DLL/DLL.mpc | 22 + ACE/examples/DLL/Magazine.h | 42 + ACE/examples/DLL/Makefile.am | 65 + ACE/examples/DLL/Newsweek.cpp | 55 + ACE/examples/DLL/Newsweek.h | 59 + ACE/examples/DLL/README | 47 + ACE/examples/DLL/Today.cpp | 55 + ACE/examples/DLL/Today.h | 60 + ACE/examples/DLL/test_dll.cpp | 90 + ACE/examples/Export/Export.mpc | 19 + ACE/examples/Export/Makefile.am | 52 + ACE/examples/Export/README | 7 + ACE/examples/Export/dll.cpp | 27 + ACE/examples/Export/dll.h | 69 + ACE/examples/Export/run_test.pl | 17 + ACE/examples/Export/test.cpp | 64 + ACE/examples/Export/test_export.h | 44 + ACE/examples/IOStream/Makefile.am | 14 + ACE/examples/IOStream/README | 22 + ACE/examples/IOStream/client/IOStream_Client.mpc | 6 + ACE/examples/IOStream/client/Makefile.am | 34 + ACE/examples/IOStream/client/iostream_client.cpp | 71 + ACE/examples/IOStream/server/IOStream_Server.mpc | 6 + ACE/examples/IOStream/server/Makefile.am | 35 + ACE/examples/IOStream/server/iostream_server.cpp | 133 + ACE/examples/IOStream/server/iostream_server.h | 53 + ACE/examples/IPC_SAP/ATM_SAP/CPP-client.cpp | 202 + ACE/examples/IPC_SAP/ATM_SAP/CPP-server.cpp | 156 + ACE/examples/IPC_SAP/ATM_SAP/Makefile.am | 48 + ACE/examples/IPC_SAP/ATM_SAP/atm_sap.mpc | 16 + ACE/examples/IPC_SAP/DEV_SAP/Makefile.am | 14 + ACE/examples/IPC_SAP/DEV_SAP/README | 23 + ACE/examples/IPC_SAP/DEV_SAP/reader/Makefile.am | 39 + .../IPC_SAP/DEV_SAP/reader/dev_sap_reader.mpc | 11 + ACE/examples/IPC_SAP/DEV_SAP/reader/reader.cpp | 72 + ACE/examples/IPC_SAP/DEV_SAP/writer/Makefile.am | 39 + .../IPC_SAP/DEV_SAP/writer/dev_sap_writer.mpc | 11 + ACE/examples/IPC_SAP/DEV_SAP/writer/writer.cpp | 77 + ACE/examples/IPC_SAP/FIFO_SAP/FIFO-Msg-client.cpp | 43 + ACE/examples/IPC_SAP/FIFO_SAP/FIFO-Msg-server.cpp | 49 + ACE/examples/IPC_SAP/FIFO_SAP/FIFO-client.cpp | 29 + ACE/examples/IPC_SAP/FIFO_SAP/FIFO-server.cpp | 30 + ACE/examples/IPC_SAP/FIFO_SAP/FIFO-test.cpp | 122 + ACE/examples/IPC_SAP/FIFO_SAP/Makefile.am | 103 + ACE/examples/IPC_SAP/FIFO_SAP/fifo_sap.mpc | 42 + ACE/examples/IPC_SAP/FILE_SAP/Makefile.am | 39 + ACE/examples/IPC_SAP/FILE_SAP/client.cpp | 90 + ACE/examples/IPC_SAP/FILE_SAP/file_sap_client.mpc | 11 + ACE/examples/IPC_SAP/FILE_SAP/testfile | 1 + ACE/examples/IPC_SAP/Makefile.am | 21 + ACE/examples/IPC_SAP/SOCK_SAP/C-inclient.cpp | 84 + ACE/examples/IPC_SAP/SOCK_SAP/C-inserver.cpp | 116 + ACE/examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp | 427 + ACE/examples/IPC_SAP/SOCK_SAP/CPP-inclient.h | 108 + .../IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp | 586 + ACE/examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.h | 43 + .../IPC_SAP/SOCK_SAP/CPP-inserver-poll.cpp | 207 + ACE/examples/IPC_SAP/SOCK_SAP/CPP-inserver.cpp | 392 + ACE/examples/IPC_SAP/SOCK_SAP/CPP-memclient.cpp | 53 + ACE/examples/IPC_SAP/SOCK_SAP/CPP-memserver.cpp | 70 + ACE/examples/IPC_SAP/SOCK_SAP/CPP-unclient.cpp | 71 + ACE/examples/IPC_SAP/SOCK_SAP/CPP-unserver.cpp | 159 + ACE/examples/IPC_SAP/SOCK_SAP/FD-unclient.cpp | 62 + ACE/examples/IPC_SAP/SOCK_SAP/FD-unserver.cpp | 100 + ACE/examples/IPC_SAP/SOCK_SAP/Makefile.am | 188 + ACE/examples/IPC_SAP/SOCK_SAP/README | 46 + ACE/examples/IPC_SAP/SOCK_SAP/local_data | 1 + ACE/examples/IPC_SAP/SOCK_SAP/run_test | 36 + ACE/examples/IPC_SAP/SOCK_SAP/sock_sap.mpc | 73 + ACE/examples/IPC_SAP/SOCK_SAP/summarize | 45 + ACE/examples/IPC_SAP/SPIPE_SAP/Makefile.am | 140 + ACE/examples/IPC_SAP/SPIPE_SAP/NPClient.cpp | 62 + ACE/examples/IPC_SAP/SPIPE_SAP/NPServer.cpp | 67 + ACE/examples/IPC_SAP/SPIPE_SAP/SPIPE_SAP.mpc | 58 + ACE/examples/IPC_SAP/SPIPE_SAP/client.cpp | 48 + ACE/examples/IPC_SAP/SPIPE_SAP/consumer_msg.cpp | 59 + ACE/examples/IPC_SAP/SPIPE_SAP/consumer_read.cpp | 56 + ACE/examples/IPC_SAP/SPIPE_SAP/producer_msg.cpp | 66 + ACE/examples/IPC_SAP/SPIPE_SAP/producer_read.cpp | 54 + ACE/examples/IPC_SAP/SPIPE_SAP/server.cpp | 124 + ACE/examples/IPC_SAP/SPIPE_SAP/shared.h | 10 + ACE/examples/IPC_SAP/SSL_SAP/Makefile.am | 196 + ACE/examples/IPC_SAP/SSL_SAP/README | 17 + ACE/examples/IPC_SAP/SSL_SAP/SSL-client-simple.cpp | 379 + ACE/examples/IPC_SAP/SSL_SAP/SSL-client-simple.h | 98 + ACE/examples/IPC_SAP/SSL_SAP/SSL-client.cpp | 420 + ACE/examples/IPC_SAP/SSL_SAP/SSL-client.h | 111 + ACE/examples/IPC_SAP/SSL_SAP/SSL-server-fancy.cpp | 610 + ACE/examples/IPC_SAP/SSL_SAP/SSL-server-fancy.h | 44 + ACE/examples/IPC_SAP/SSL_SAP/SSL-server-poll.cpp | 212 + ACE/examples/IPC_SAP/SSL_SAP/SSL-server-simple.cpp | 366 + ACE/examples/IPC_SAP/SSL_SAP/SSL-server.cpp | 430 + ACE/examples/IPC_SAP/SSL_SAP/SSL_SAP.mpc | 50 + ACE/examples/IPC_SAP/SSL_SAP/dummy.pem | 15 + ACE/examples/IPC_SAP/SSL_SAP/key.pem | 15 + ACE/examples/IPC_SAP/SSL_SAP/local_data | 1 + ACE/examples/IPC_SAP/SSL_SAP/summarize | 45 + ACE/examples/IPC_SAP/TLI_SAP/CPP-ATM-client.cpp | 162 + ACE/examples/IPC_SAP/TLI_SAP/CPP-ATM-server.cpp | 114 + ACE/examples/IPC_SAP/TLI_SAP/CPP-client.cpp | 94 + ACE/examples/IPC_SAP/TLI_SAP/CPP-server.cpp | 89 + ACE/examples/IPC_SAP/TLI_SAP/Makefile.am | 132 + ACE/examples/IPC_SAP/TLI_SAP/TLI_SAP.mpc | 58 + ACE/examples/IPC_SAP/TLI_SAP/db-client.cpp | 60 + ACE/examples/IPC_SAP/TLI_SAP/db-server.cpp | 121 + ACE/examples/IPC_SAP/TLI_SAP/ftp-client.cpp | 54 + ACE/examples/IPC_SAP/TLI_SAP/ftp-server.cpp | 83 + ACE/examples/IPC_SAP/UPIPE_SAP/Makefile.am | 76 + ACE/examples/IPC_SAP/UPIPE_SAP/UPIPE_SAP.mpc | 26 + ACE/examples/IPC_SAP/UPIPE_SAP/ex1.cpp | 183 + ACE/examples/IPC_SAP/UPIPE_SAP/ex2.cpp | 179 + ACE/examples/IPC_SAP/UPIPE_SAP/ex3.cpp | 159 + ACE/examples/Log_Msg/Log_Msg.mpc | 23 + ACE/examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.cpp | 90 + ACE/examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.h | 62 + ACE/examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.mpc | 13 + ACE/examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.rc | 207 + .../Log_Msg/Log_Msg_MFC/Log_Msg_MFCDlg.cpp | 185 + ACE/examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFCDlg.h | 59 + ACE/examples/Log_Msg/Log_Msg_MFC/MFC_Log.cpp | 45 + ACE/examples/Log_Msg/Log_Msg_MFC/MFC_Log.h | 47 + ACE/examples/Log_Msg/Log_Msg_MFC/README | 40 + ACE/examples/Log_Msg/Log_Msg_MFC/Resource.h | 21 + ACE/examples/Log_Msg/Log_Msg_MFC/StdAfx.cpp | 9 + ACE/examples/Log_Msg/Log_Msg_MFC/StdAfx.h | 28 + .../Log_Msg/Log_Msg_MFC/res/Log_Msg_MFC.ico | Bin 0 -> 1078 bytes .../Log_Msg/Log_Msg_MFC/res/Log_Msg_MFC.rc2 | 13 + ACE/examples/Log_Msg/Makefile.am | 62 + ACE/examples/Log_Msg/README | 65 + ACE/examples/Log_Msg/test_callback.cpp | 166 + ACE/examples/Log_Msg/test_log_msg.cpp | 218 + ACE/examples/Log_Msg/test_ostream.cpp | 89 + .../Acceptor-server/Logger_Acceptor_Server.mpc | 6 + ACE/examples/Logger/Acceptor-server/Makefile.am | 35 + .../Logger/Acceptor-server/server_loggerd.cpp | 273 + .../Logger/Acceptor-server/server_loggerd.h | 54 + ACE/examples/Logger/Makefile.am | 15 + ACE/examples/Logger/README | 32 + ACE/examples/Logger/client/Logger_client.mpc | 6 + ACE/examples/Logger/client/Makefile.am | 34 + ACE/examples/Logger/client/logging_app.cpp | 83 + .../Logger/simple-server/Logger_Simple_Server.mpc | 6 + .../Logger/simple-server/Logging_Acceptor.cpp | 85 + .../Logger/simple-server/Logging_Acceptor.h | 59 + .../Logger/simple-server/Logging_Handler.cpp | 202 + .../Logger/simple-server/Logging_Handler.h | 71 + ACE/examples/Logger/simple-server/Makefile.am | 39 + .../Logger/simple-server/Reactor_Singleton.h | 33 + .../Logger/simple-server/server_loggerd.cpp | 85 + ACE/examples/Makefile.am | 42 + ACE/examples/Map_Manager/Makefile.am | 34 + ACE/examples/Map_Manager/Map_Manager.mpc | 6 + ACE/examples/Map_Manager/test_hash_map_manager.cpp | 80 + ACE/examples/Mem_Map/IO-tests/IO_Test.cpp | 240 + ACE/examples/Mem_Map/IO-tests/IO_Test.h | 100 + ACE/examples/Mem_Map/IO-tests/Makefile.am | 41 + ACE/examples/Mem_Map/IO-tests/Mem_Map_IO_Tests.mpc | 7 + ACE/examples/Mem_Map/IO-tests/test_io.cpp | 211 + ACE/examples/Mem_Map/Makefile.am | 14 + ACE/examples/Mem_Map/file-reverse/Makefile.am | 39 + .../Mem_Map/file-reverse/Mem_Map_File_Reverse.mpc | 7 + ACE/examples/Mem_Map/file-reverse/file-reverse.cpp | 59 + ACE/examples/Misc/Makefile.am | 213 + ACE/examples/Misc/Misc.mpc | 73 + ACE/examples/Misc/test_XtReactor1.cpp | 173 + ACE/examples/Misc/test_XtReactor2.cpp | 101 + ACE/examples/Misc/test_dump.cpp | 33 + ACE/examples/Misc/test_dump.h | 50 + ACE/examples/Misc/test_get_opt.cpp | 54 + ACE/examples/Misc/test_profile_timer.cpp | 38 + ACE/examples/Misc/test_read_buffer.cpp | 34 + ACE/examples/Misc/test_set.cpp | 57 + ACE/examples/Misc/test_sstring.cpp | 26 + ACE/examples/Misc/test_timestamp.cpp | 21 + ACE/examples/Misc/test_trace.cpp | 131 + ACE/examples/NT_Service/Makefile.am | 45 + ACE/examples/NT_Service/NT_Service.mpc | 7 + ACE/examples/NT_Service/README | 45 + ACE/examples/NT_Service/main.cpp | 270 + ACE/examples/NT_Service/ntsvc.cpp | 116 + ACE/examples/NT_Service/ntsvc.h | 71 + ACE/examples/Naming/Makefile.am | 94 + ACE/examples/Naming/Naming.mpc | 38 + ACE/examples/Naming/test_multiple_contexts.cpp | 86 + ACE/examples/Naming/test_non_existent.cpp | 54 + ACE/examples/Naming/test_open.cpp | 83 + ACE/examples/Naming/test_writers.cpp | 76 + ACE/examples/OS/Makefile.am | 13 + ACE/examples/OS/Process/Makefile.am | 54 + ACE/examples/OS/Process/OS_Process.mpc | 17 + ACE/examples/OS/Process/README | 54 + ACE/examples/OS/Process/imore.cpp | 266 + ACE/examples/OS/Process/process.cpp | 587 + .../QOS/Change_Receiver_FlowSpec/Fill_ACE_QoS.cpp | 99 + .../QOS/Change_Receiver_FlowSpec/Fill_ACE_QoS.h | 76 + .../QOS/Change_Receiver_FlowSpec/FlowSpec_Dbase.h | 52 + .../QOS/Change_Receiver_FlowSpec/Makefile.am | 78 + .../QOS_Change_Receiver_FlowSpec.mpc | 25 + .../QoS_Signal_Handler.cpp | 34 + .../Change_Receiver_FlowSpec/QoS_Signal_Handler.h | 45 + .../QOS/Change_Receiver_FlowSpec/QoS_Util.cpp | 122 + .../QOS/Change_Receiver_FlowSpec/QoS_Util.h | 75 + ACE/examples/QOS/Change_Receiver_FlowSpec/README | 127 + .../Receiver_QoS_Event_Handler.cpp | 216 + .../Receiver_QoS_Event_Handler.h | 61 + .../Sender_QoS_Event_Handler.cpp | 146 + .../Sender_QoS_Event_Handler.h | 59 + .../QOS/Change_Receiver_FlowSpec/receiver.cpp | 300 + .../QOS/Change_Receiver_FlowSpec/sender.cpp | 316 + .../QOS/Change_Sender_TSpec/Fill_ACE_QoS.cpp | 99 + .../QOS/Change_Sender_TSpec/Fill_ACE_QoS.h | 75 + .../QOS/Change_Sender_TSpec/FlowSpec_Dbase.h | 52 + ACE/examples/QOS/Change_Sender_TSpec/Makefile.am | 78 + .../QOS_Change_Sender_TSpec.mpc | 25 + .../QOS/Change_Sender_TSpec/QoS_Signal_Handler.cpp | 34 + .../QOS/Change_Sender_TSpec/QoS_Signal_Handler.h | 45 + ACE/examples/QOS/Change_Sender_TSpec/QoS_Util.cpp | 122 + ACE/examples/QOS/Change_Sender_TSpec/QoS_Util.h | 75 + ACE/examples/QOS/Change_Sender_TSpec/README | 126 + .../Receiver_QoS_Event_Handler.cpp | 145 + .../Receiver_QoS_Event_Handler.h | 61 + .../Sender_QoS_Event_Handler.cpp | 221 + .../Change_Sender_TSpec/Sender_QoS_Event_Handler.h | 59 + ACE/examples/QOS/Change_Sender_TSpec/receiver.cpp | 319 + ACE/examples/QOS/Change_Sender_TSpec/sender.cpp | 313 + ACE/examples/QOS/Diffserv/Makefile.am | 64 + ACE/examples/QOS/Diffserv/NOTES.txt | 58 + ACE/examples/QOS/Diffserv/QOS_Diffserv.mpc | 18 + ACE/examples/QOS/Diffserv/README | 107 + ACE/examples/QOS/Diffserv/diffserv_test.cpp | 137 + ACE/examples/QOS/Diffserv/run_test.pl | 40 + ACE/examples/QOS/Diffserv/server.cpp | 165 + ACE/examples/QOS/Makefile.am | 16 + ACE/examples/QOS/Simple/Fill_ACE_QoS.cpp | 99 + ACE/examples/QOS/Simple/Fill_ACE_QoS.h | 75 + ACE/examples/QOS/Simple/FlowSpec_Dbase.h | 52 + ACE/examples/QOS/Simple/Makefile.am | 78 + ACE/examples/QOS/Simple/QOS_Simple.mpc | 25 + ACE/examples/QOS/Simple/QoS_Signal_Handler.cpp | 40 + ACE/examples/QOS/Simple/QoS_Signal_Handler.h | 45 + ACE/examples/QOS/Simple/QoS_Util.cpp | 122 + ACE/examples/QOS/Simple/QoS_Util.h | 75 + ACE/examples/QOS/Simple/README | 142 + .../QOS/Simple/Receiver_QoS_Event_Handler.cpp | 137 + .../QOS/Simple/Receiver_QoS_Event_Handler.h | 61 + .../QOS/Simple/Sender_QoS_Event_Handler.cpp | 144 + ACE/examples/QOS/Simple/Sender_QoS_Event_Handler.h | 59 + ACE/examples/QOS/Simple/receiver.cpp | 301 + ACE/examples/QOS/Simple/sender.cpp | 315 + ACE/examples/README | 77 + ACE/examples/Reactor/Dgram/CODgram.cpp | 256 + ACE/examples/Reactor/Dgram/Dgram.cpp | 260 + ACE/examples/Reactor/Dgram/Makefile.am | 53 + ACE/examples/Reactor/Dgram/Reactor_Dgram.mpc | 18 + ACE/examples/Reactor/FIFO/Makefile.am | 58 + ACE/examples/Reactor/FIFO/Reactor_FIFO.mpc | 18 + ACE/examples/Reactor/FIFO/client.cpp | 23 + ACE/examples/Reactor/FIFO/server.cpp | 89 + ACE/examples/Reactor/Makefile.am | 20 + ACE/examples/Reactor/Misc/Makefile.am | 146 + ACE/examples/Reactor/Misc/Reactor_Misc.mpc | 57 + ACE/examples/Reactor/Misc/notification.cpp | 387 + ACE/examples/Reactor/Misc/pingpong.cpp | 304 + ACE/examples/Reactor/Misc/test_demuxing.cpp | 389 + ACE/examples/Reactor/Misc/test_early_timeouts.cpp | 116 + ACE/examples/Reactor/Misc/test_event_handler_t.cpp | 51 + ACE/examples/Reactor/Misc/test_reactors.cpp | 198 + ACE/examples/Reactor/Misc/test_signals_1.cpp | 114 + ACE/examples/Reactor/Misc/test_signals_2.cpp | 281 + ACE/examples/Reactor/Misc/test_time_value.cpp | 83 + ACE/examples/Reactor/Misc/test_timer_queue.cpp | 115 + ACE/examples/Reactor/Multicast/Log_Wrapper.cpp | 81 + ACE/examples/Reactor/Multicast/Log_Wrapper.h | 68 + ACE/examples/Reactor/Multicast/Makefile.am | 52 + ACE/examples/Reactor/Multicast/README | 15 + .../Reactor/Multicast/Reactor_Multicast.mpc | 17 + ACE/examples/Reactor/Multicast/client.cpp | 130 + ACE/examples/Reactor/Multicast/server.cpp | 247 + ACE/examples/Reactor/Ntalker/Makefile.am | 34 + ACE/examples/Reactor/Ntalker/README | 17 + ACE/examples/Reactor/Ntalker/Reactor_Ntalker.mpc | 6 + ACE/examples/Reactor/Ntalker/ntalker.cpp | 233 + .../Reactor/Proactor/Aio_Platform_Test_C.cpp | 137 + ACE/examples/Reactor/Proactor/Makefile.am | 160 + ACE/examples/Reactor/Proactor/Proactor.mpc | 75 + ACE/examples/Reactor/Proactor/README | 75 + ACE/examples/Reactor/Proactor/post_completions.cpp | 307 + .../Reactor/Proactor/simple_test_proactor.cpp | 270 + ACE/examples/Reactor/Proactor/test_aiocb.cpp | 242 + ACE/examples/Reactor/Proactor/test_aiocb_ace.cpp | 259 + ACE/examples/Reactor/Proactor/test_aiosig.cpp | 296 + ACE/examples/Reactor/Proactor/test_aiosig_ace.cpp | 360 + ACE/examples/Reactor/Proactor/test_cancel.cpp | 246 + ACE/examples/Reactor/Proactor/test_cancel.h | 47 + .../Reactor/Proactor/test_end_event_loop.cpp | 169 + .../Reactor/Proactor/test_multiple_loops.cpp | 140 + ACE/examples/Reactor/Proactor/test_proactor.cpp | 683 + ACE/examples/Reactor/Proactor/test_proactor.h | 56 + ACE/examples/Reactor/Proactor/test_proactor2.cpp | 824 + ACE/examples/Reactor/Proactor/test_proactor3.cpp | 889 + ACE/examples/Reactor/Proactor/test_timeout.cpp | 129 + ACE/examples/Reactor/Proactor/test_timeout_st.cpp | 99 + .../Reactor/Proactor/test_udp_proactor.cpp | 435 + ACE/examples/Reactor/README | 20 + ACE/examples/Reactor/TP_Reactor/AcceptHandler.cpp | 108 + ACE/examples/Reactor/TP_Reactor/AcceptHandler.h | 75 + ACE/examples/Reactor/TP_Reactor/Makefile.am | 55 + ACE/examples/Reactor/TP_Reactor/README | 86 + ACE/examples/Reactor/TP_Reactor/ReadHandler.cpp | 152 + ACE/examples/Reactor/TP_Reactor/ReadHandler.h | 92 + ACE/examples/Reactor/TP_Reactor/TP_Reactor.mpc | 18 + ACE/examples/Reactor/TP_Reactor/client.cpp | 141 + ACE/examples/Reactor/TP_Reactor/common.h | 29 + ACE/examples/Reactor/TP_Reactor/run_test.pl | 41 + ACE/examples/Reactor/TP_Reactor/server.cpp | 66 + ACE/examples/Reactor/WFMO_Reactor/APC.cpp | 125 + ACE/examples/Reactor/WFMO_Reactor/Abandoned.cpp | 141 + .../Reactor/WFMO_Reactor/Console_Input.cpp | 88 + .../Reactor/WFMO_Reactor/Directory_Changes.cpp | 129 + ACE/examples/Reactor/WFMO_Reactor/Exceptions.cpp | 109 + ACE/examples/Reactor/WFMO_Reactor/Handle_Close.cpp | 339 + ACE/examples/Reactor/WFMO_Reactor/Makefile.am | 324 + .../Reactor/WFMO_Reactor/Multithreading.cpp | 264 + .../Reactor/WFMO_Reactor/Network_Events.cpp | 211 + .../Reactor/WFMO_Reactor/Prerun_State_Changes.cpp | 68 + ACE/examples/Reactor/WFMO_Reactor/Registration.cpp | 170 + .../Reactor/WFMO_Reactor/Registry_Changes.cpp | 146 + ACE/examples/Reactor/WFMO_Reactor/Removals.cpp | 118 + .../Reactor/WFMO_Reactor/Suspended_Removals.cpp | 176 + ACE/examples/Reactor/WFMO_Reactor/Talker.cpp | 598 + ACE/examples/Reactor/WFMO_Reactor/Timeouts.cpp | 83 + ACE/examples/Reactor/WFMO_Reactor/WFMO_Reactor.mpc | 118 + .../Reactor/WFMO_Reactor/Window_Messages.cpp | 100 + ACE/examples/Reactor/WFMO_Reactor/run_test.pl | 68 + ACE/examples/Registry/Makefile.am | 62 + ACE/examples/Registry/Registry.mpc | 17 + ACE/examples/Registry/test_registry_iterator.cpp | 146 + ACE/examples/Registry/test_registry_update.cpp | 161 + ACE/examples/Semaphores/README | 17 + ACE/examples/Semaphores/Semaphores.mpc | 19 + ACE/examples/Semaphores/starter.cpp | 22 + ACE/examples/Semaphores/worker.cpp | 29 + .../Service_Configurator/IPC-tests/Makefile.am | 14 + ACE/examples/Service_Configurator/IPC-tests/README | 125 + .../IPC-tests/client/Makefile.am | 190 + .../IPC-tests/client/Svc_Cfg_IPC_Client.mpc | 70 + .../IPC-tests/client/broadcast_client_test.cpp | 62 + .../IPC-tests/client/local_data | 22 + .../IPC-tests/client/local_dgram_client_test.cpp | 117 + .../IPC-tests/client/local_fifo_client_test.cpp | 104 + .../IPC-tests/client/local_pipe_client_test.cpp | 150 + .../IPC-tests/client/local_spipe_client_test.cpp | 108 + .../IPC-tests/client/local_stream_client_test.cpp | 113 + .../IPC-tests/client/remote_data | 22 + .../IPC-tests/client/remote_data1 | 22 + .../IPC-tests/client/remote_data2 | 22 + .../IPC-tests/client/remote_data3 | 22 + .../IPC-tests/client/remote_data4 | 22 + .../IPC-tests/client/remote_dgram_client_test.cpp | 94 + .../client/remote_service_directory_test.cpp | 111 + .../IPC-tests/client/remote_stream_client_test.cpp | 136 + .../client/remote_thr_stream_client_test.cpp | 124 + .../IPC-tests/server/Handle_Broadcast.cpp | 38 + .../IPC-tests/server/Handle_Broadcast.h | 50 + .../IPC-tests/server/Handle_Broadcast.inl | 116 + .../IPC-tests/server/Handle_L_CODgram.cpp | 19 + .../IPC-tests/server/Handle_L_CODgram.h | 51 + .../IPC-tests/server/Handle_L_CODgram.inl | 123 + .../IPC-tests/server/Handle_L_Dgram.cpp | 18 + .../IPC-tests/server/Handle_L_Dgram.h | 51 + .../IPC-tests/server/Handle_L_Dgram.inl | 116 + .../IPC-tests/server/Handle_L_FIFO.cpp | 38 + .../IPC-tests/server/Handle_L_FIFO.h | 49 + .../IPC-tests/server/Handle_L_FIFO.inl | 101 + .../IPC-tests/server/Handle_L_Pipe.cpp | 66 + .../IPC-tests/server/Handle_L_Pipe.h | 55 + .../IPC-tests/server/Handle_L_Pipe.inl | 96 + .../IPC-tests/server/Handle_L_SPIPE.cpp | 18 + .../IPC-tests/server/Handle_L_SPIPE.h | 52 + .../IPC-tests/server/Handle_L_SPIPE.inl | 131 + .../IPC-tests/server/Handle_L_Stream.cpp | 22 + .../IPC-tests/server/Handle_L_Stream.h | 53 + .../IPC-tests/server/Handle_L_Stream.inl | 149 + .../IPC-tests/server/Handle_R_Dgram.cpp | 38 + .../IPC-tests/server/Handle_R_Dgram.h | 47 + .../IPC-tests/server/Handle_R_Dgram.inl | 111 + .../IPC-tests/server/Handle_R_Stream.cpp | 42 + .../IPC-tests/server/Handle_R_Stream.h | 53 + .../IPC-tests/server/Handle_R_Stream.inl | 153 + .../IPC-tests/server/Handle_Thr_Stream.cpp | 195 + .../IPC-tests/server/Handle_Thr_Stream.h | 73 + .../IPC-tests/server/Handle_Timeout.cpp | 36 + .../IPC-tests/server/Handle_Timeout.h | 45 + .../IPC-tests/server/Handle_Timeout.inl | 86 + .../IPC-tests/server/Makefile.am | 107 + .../IPC-tests/server/Svc_Cfg_IPC_Server.mpc | 30 + .../IPC-tests/server/server_test.cpp | 54 + .../Service_Configurator/IPC-tests/server/svc.conf | 19 + ACE/examples/Service_Configurator/Makefile.am | 14 + ACE/examples/Service_Configurator/Misc/Makefile.am | 51 + ACE/examples/Service_Configurator/Misc/README | 23 + .../Misc/Service_Configurator_Misc.mpc | 18 + .../Service_Configurator/Misc/Timer_Service.cpp | 135 + .../Service_Configurator/Misc/Timer_Service.h | 71 + ACE/examples/Service_Configurator/Misc/main.cpp | 80 + ACE/examples/Service_Configurator/Misc/svc.conf1 | 8 + ACE/examples/Service_Configurator/Misc/svc.conf2 | 8 + ACE/examples/Shared_Malloc/Makefile.am | 110 + ACE/examples/Shared_Malloc/Malloc.cpp | 69 + ACE/examples/Shared_Malloc/Malloc.h | 33 + ACE/examples/Shared_Malloc/Options.cpp | 204 + ACE/examples/Shared_Malloc/Options.h | 86 + ACE/examples/Shared_Malloc/Shared_Malloc.mpc | 37 + ACE/examples/Shared_Malloc/test_malloc.cpp | 228 + .../Shared_Malloc/test_multiple_mallocs.cpp | 125 + ACE/examples/Shared_Malloc/test_persistence.cpp | 350 + .../test_position_independent_malloc.cpp | 190 + .../test_position_independent_malloc.h | 28 + ACE/examples/Shared_Memory/Makefile.am | 58 + ACE/examples/Shared_Memory/Shared_Memory.mpc | 17 + ACE/examples/Shared_Memory/test_MM.cpp | 74 + ACE/examples/Shared_Memory/test_SV.cpp | 64 + ACE/examples/Smart_Pointers/Gadget.cpp | 16 + ACE/examples/Smart_Pointers/Gadget.h | 51 + ACE/examples/Smart_Pointers/Gadget_Factory.cpp | 18 + ACE/examples/Smart_Pointers/Gadget_Factory.h | 32 + ACE/examples/Smart_Pointers/Gadget_Impl.cpp | 47 + ACE/examples/Smart_Pointers/Gadget_Impl.h | 51 + ACE/examples/Smart_Pointers/Gadget_Part.cpp | 16 + ACE/examples/Smart_Pointers/Gadget_Part.h | 45 + .../Smart_Pointers/Gadget_Part_Factory.cpp | 20 + ACE/examples/Smart_Pointers/Gadget_Part_Factory.h | 35 + ACE/examples/Smart_Pointers/Gadget_Part_Impl.cpp | 68 + ACE/examples/Smart_Pointers/Gadget_Part_Impl.h | 64 + ACE/examples/Smart_Pointers/Makefile.am | 72 + ACE/examples/Smart_Pointers/README | 29 + ACE/examples/Smart_Pointers/Smart_Pointers.mpc | 28 + ACE/examples/Smart_Pointers/Widget.cpp | 16 + ACE/examples/Smart_Pointers/Widget.h | 40 + ACE/examples/Smart_Pointers/Widget_Factory.cpp | 18 + ACE/examples/Smart_Pointers/Widget_Factory.h | 30 + ACE/examples/Smart_Pointers/Widget_Impl.cpp | 52 + ACE/examples/Smart_Pointers/Widget_Impl.h | 68 + ACE/examples/Smart_Pointers/Widget_Part.cpp | 16 + ACE/examples/Smart_Pointers/Widget_Part.h | 33 + .../Smart_Pointers/Widget_Part_Factory.cpp | 20 + ACE/examples/Smart_Pointers/Widget_Part_Factory.h | 31 + ACE/examples/Smart_Pointers/Widget_Part_Impl.cpp | 74 + ACE/examples/Smart_Pointers/Widget_Part_Impl.h | 49 + ACE/examples/Smart_Pointers/gadget_test.cpp | 52 + ACE/examples/Smart_Pointers/widget_test.cpp | 51 + ACE/examples/Synch/Makefile.am | 39 + ACE/examples/Synch/README | 21 + ACE/examples/Synch/Synch.mpc | 7 + ACE/examples/Synch/proc_sema.cpp | 102 + ACE/examples/System_V_IPC/Makefile.am | 14 + ACE/examples/System_V_IPC/README | 13 + .../System_V_IPC/SV_Message_Queues/MQ_Client.cpp | 55 + .../System_V_IPC/SV_Message_Queues/MQ_Server.cpp | 81 + .../System_V_IPC/SV_Message_Queues/Makefile.am | 98 + .../SV_Message_Queues/SV_Message_Queues.mpc | 32 + .../System_V_IPC/SV_Message_Queues/TMQ_Client.cpp | 52 + .../System_V_IPC/SV_Message_Queues/TMQ_Server.cpp | 78 + ACE/examples/System_V_IPC/SV_Message_Queues/test.h | 58 + .../System_V_IPC/SV_Semaphores/Makefile.am | 58 + .../System_V_IPC/SV_Semaphores/SV_Semaphores.mpc | 17 + .../System_V_IPC/SV_Semaphores/Semaphores_1.cpp | 94 + .../System_V_IPC/SV_Semaphores/Semaphores_2.cpp | 110 + .../SV_Shared_Memory/SV_Shared_Memory_Test.cpp | 78 + .../SV_Shared_Memory/SV_Shared_Memory_Test.h | 12 + ACE/examples/Threads/Makefile.am | 430 + ACE/examples/Threads/TSS_Data.h | 40 + ACE/examples/Threads/TSS_Obj.h | 39 + ACE/examples/Threads/TSS_Task.h | 43 + ACE/examples/Threads/Threads.mpc | 139 + ACE/examples/Threads/auto_event.cpp | 120 + ACE/examples/Threads/barrier1.cpp | 83 + ACE/examples/Threads/barrier2.cpp | 319 + ACE/examples/Threads/cancel.cpp | 77 + ACE/examples/Threads/future1.cpp | 407 + ACE/examples/Threads/future2.cpp | 529 + ACE/examples/Threads/manual_event.cpp | 116 + ACE/examples/Threads/process_manager.cpp | 296 + ACE/examples/Threads/process_mutex.cpp | 75 + ACE/examples/Threads/process_semaphore.cpp | 63 + ACE/examples/Threads/reader_writer.cpp | 188 + ACE/examples/Threads/recursive_mutex.cpp | 113 + ACE/examples/Threads/task_five.cpp | 181 + ACE/examples/Threads/task_four.cpp | 313 + ACE/examples/Threads/task_one.cpp | 102 + ACE/examples/Threads/task_three.cpp | 271 + ACE/examples/Threads/task_two.cpp | 150 + ACE/examples/Threads/thread_manager.cpp | 109 + ACE/examples/Threads/thread_pool.cpp | 277 + ACE/examples/Threads/thread_specific.cpp | 238 + ACE/examples/Threads/thread_specific.h | 53 + ACE/examples/Threads/token.cpp | 78 + ACE/examples/Threads/tss1.cpp | 159 + ACE/examples/Threads/tss2.cpp | 190 + ACE/examples/Threads/wfmo.cpp | 135 + .../Timer_Queue/Async_Timer_Queue_Test.cpp | 282 + ACE/examples/Timer_Queue/Async_Timer_Queue_Test.h | 119 + ACE/examples/Timer_Queue/Driver.cpp | 164 + ACE/examples/Timer_Queue/Driver.h | 137 + ACE/examples/Timer_Queue/Makefile.am | 98 + ACE/examples/Timer_Queue/README | 26 + .../Timer_Queue/Reactor_Timer_Queue_Test.cpp | 223 + .../Timer_Queue/Reactor_Timer_Queue_Test.h | 153 + .../Timer_Queue/Thread_Timer_Queue_Test.cpp | 270 + ACE/examples/Timer_Queue/Thread_Timer_Queue_Test.h | 157 + ACE/examples/Timer_Queue/Timer_Queue.mpc | 40 + ACE/examples/Timer_Queue/main_async.cpp | 57 + ACE/examples/Timer_Queue/main_reactor.cpp | 57 + ACE/examples/Timer_Queue/main_thread.cpp | 58 + ACE/examples/Web_Crawler/Command_Processor.cpp | 127 + ACE/examples/Web_Crawler/Command_Processor.h | 96 + ACE/examples/Web_Crawler/HTTP_URL.cpp | 87 + ACE/examples/Web_Crawler/HTTP_URL.h | 64 + ACE/examples/Web_Crawler/Iterators.cpp | 163 + ACE/examples/Web_Crawler/Iterators.h | 117 + ACE/examples/Web_Crawler/Makefile.am | 61 + ACE/examples/Web_Crawler/Mem_Map_Stream.cpp | 239 + ACE/examples/Web_Crawler/Mem_Map_Stream.h | 190 + ACE/examples/Web_Crawler/Options.cpp | 181 + ACE/examples/Web_Crawler/Options.h | 124 + ACE/examples/Web_Crawler/README | 25 + ACE/examples/Web_Crawler/URL.cpp | 39 + ACE/examples/Web_Crawler/URL.h | 82 + ACE/examples/Web_Crawler/URL_Addr.cpp | 235 + ACE/examples/Web_Crawler/URL_Addr.h | 112 + ACE/examples/Web_Crawler/URL_Status.cpp | 40 + ACE/examples/Web_Crawler/URL_Status.h | 61 + ACE/examples/Web_Crawler/URL_Visitor.cpp | 543 + ACE/examples/Web_Crawler/URL_Visitor.h | 436 + ACE/examples/Web_Crawler/URL_Visitor_Factory.cpp | 53 + ACE/examples/Web_Crawler/URL_Visitor_Factory.h | 74 + ACE/examples/Web_Crawler/Web_Crawler.cpp | 95 + ACE/examples/Web_Crawler/Web_Crawler.h | 62 + ACE/examples/Web_Crawler/Web_Crawler.mpc | 10 + ACE/examples/Web_Crawler/main.cpp | 51 + ACE/examples/example_base.mpb | 8 + ACE/examples/examples.mwc | 14 + ACE/html/README | 11 + ACE/html/Stats/Stats.css | 4 + ACE/html/Stats/compilation.shtml | 11 + ACE/html/Stats/configuration.shtml | 84 + ACE/html/Stats/detailed_footprint.shtml | 11 + ACE/html/Stats/detailed_performance.shtml | 191 + ACE/html/Stats/footer.html | 12 + ACE/html/Stats/footprint.shtml | 44 + ACE/html/Stats/img.html | 18 + ACE/html/Stats/index.shtml | 64 + ACE/html/Stats/navigation.html | 32 + ACE/html/Stats/performance.shtml | 203 + ACE/html/Stats/simple_footprint.shtml | 302 + ACE/html/doxygen.css | 5 + ACE/html/index.html | 217 + ACE/include/makeinclude/all_in_one.GNU | 72 + ACE/include/makeinclude/build_dll.bor | 118 + ACE/include/makeinclude/build_exe.bor | 114 + ACE/include/makeinclude/build_lib.bor | 91 + ACE/include/makeinclude/build_library.bor | 12 + ACE/include/makeinclude/clean.bor | 72 + ACE/include/makeinclude/compiler.bor | 179 + ACE/include/makeinclude/component_check.GNU | 16 + ACE/include/makeinclude/decorator.bor | 50 + ACE/include/makeinclude/install.bor | 41 + ACE/include/makeinclude/macros.GNU | 28 + ACE/include/makeinclude/make_flags.bor | 32 + ACE/include/makeinclude/outputdir.bor | 117 + ACE/include/makeinclude/platform_aix.GNU | 110 + ACE/include/makeinclude/platform_aix_g++.GNU | 92 + ACE/include/makeinclude/platform_aix_ibm.GNU | 168 + ACE/include/makeinclude/platform_cray.GNU | 50 + ACE/include/makeinclude/platform_cygwin32.GNU | 30 + ACE/include/makeinclude/platform_freebsd.GNU | 72 + ACE/include/makeinclude/platform_g++_common.GNU | 124 + .../makeinclude/platform_gnuwin32_common.GNU | 119 + ACE/include/makeinclude/platform_hpux_aCC.GNU | 229 + ACE/include/makeinclude/platform_hpux_gcc.GNU | 106 + ACE/include/makeinclude/platform_integrity_ghs.GNU | 70 + .../makeinclude/platform_irix6.x_common.GNU | 16 + ACE/include/makeinclude/platform_irix6.x_g++.GNU | 30 + .../makeinclude/platform_irix6.x_sgic++.GNU | 101 + ACE/include/makeinclude/platform_linux.GNU | 125 + ACE/include/makeinclude/platform_linux_common.GNU | 116 + ACE/include/makeinclude/platform_linux_icc.GNU | 117 + ACE/include/makeinclude/platform_linux_pgi.GNU | 48 + ACE/include/makeinclude/platform_linux_suncc.GNU | 77 + ACE/include/makeinclude/platform_lynxos.GNU | 144 + ACE/include/makeinclude/platform_macosx.GNU | 46 + .../makeinclude/platform_macosx_leopard.GNU | 3 + .../makeinclude/platform_macosx_panther.GNU | 35 + ACE/include/makeinclude/platform_macosx_tiger.GNU | 56 + ACE/include/makeinclude/platform_mingw32.GNU | 61 + ACE/include/makeinclude/platform_mvs.GNU | 35 + ACE/include/makeinclude/platform_netbsd.GNU | 43 + ACE/include/makeinclude/platform_openbsd.GNU | 50 + ACE/include/makeinclude/platform_openvms.GNU | 114 + ACE/include/makeinclude/platform_qnx_neutrino.GNU | 35 + ACE/include/makeinclude/platform_qnx_rtp_gcc.GNU | 51 + ACE/include/makeinclude/platform_rtems.x_g++.GNU | 57 + ACE/include/makeinclude/platform_sunos5_common.GNU | 33 + ACE/include/makeinclude/platform_sunos5_g++.GNU | 67 + ACE/include/makeinclude/platform_sunos5_sunc++.GNU | 263 + ACE/include/makeinclude/platform_tandem.GNU | 92 + ACE/include/makeinclude/platform_tru64_cxx.GNU | 142 + ACE/include/makeinclude/platform_tru64_g++.GNU | 46 + ACE/include/makeinclude/platform_tru64_post.GNU | 32 + ACE/include/makeinclude/platform_tru64_pre.GNU | 11 + ACE/include/makeinclude/platform_unixware_g++.GNU | 44 + ACE/include/makeinclude/platform_vxworks.GNU | 25 + ACE/include/makeinclude/platform_vxworks5.5.x.GNU | 315 + ACE/include/makeinclude/platform_vxworks6.2.GNU | 363 + ACE/include/makeinclude/platform_vxworks6.3.GNU | 394 + ACE/include/makeinclude/platform_vxworks6.4.GNU | 16 + ACE/include/makeinclude/platform_vxworks6.5.GNU | 8 + ACE/include/makeinclude/platform_vxworks6.6.GNU | 19 + ACE/include/makeinclude/platform_win32_dmc.GNU | 43 + ACE/include/makeinclude/platform_win32_icc.GNU | 47 + ACE/include/makeinclude/platform_win32_interix.GNU | 37 + ACE/include/makeinclude/rules.bin.GNU | 52 + ACE/include/makeinclude/rules.common.GNU | 24 + ACE/include/makeinclude/rules.lib.GNU | 249 + ACE/include/makeinclude/rules.local.GNU | 530 + ACE/include/makeinclude/rules.nested.GNU | 43 + ACE/include/makeinclude/rules.nolocal.GNU | 8 + ACE/include/makeinclude/rules.nonested.GNU | 8 + ACE/include/makeinclude/wrapper_macros.GNU | 873 + ACE/lib/.empty | 1 + ACE/m4/ace.m4 | 1546 ++ ACE/m4/ace_defines.m4 | 48 + ACE/m4/ace_func.m4 | 148 + ACE/m4/ace_functions.m4 | 27 + ACE/m4/ace_headers.m4 | 35 + ACE/m4/acinclude.m4 | 602 + ACE/m4/aio.m4 | 633 + ACE/m4/compiler.m4 | 426 + ACE/m4/config_h.m4 | 1056 + ACE/m4/pkg.m4 | 156 + ACE/m4/platform.m4 | 473 + ACE/m4/subsets.m4 | 770 + ACE/m4/threads.m4 | 334 + ACE/m4/tls.m4 | 220 + ACE/netsvcs/ACE-netsvcs.html | 879 + ACE/netsvcs/Makefile.am | 15 + ACE/netsvcs/README | 20 + ACE/netsvcs/clients/Logger/Logger.mpc | 22 + ACE/netsvcs/clients/Logger/Makefile.am | 60 + ACE/netsvcs/clients/Logger/README | 18 + ACE/netsvcs/clients/Logger/direct_logging.cpp | 84 + ACE/netsvcs/clients/Logger/indirect_logging.cpp | 60 + ACE/netsvcs/clients/Makefile.am | 14 + ACE/netsvcs/clients/Naming/Client/Client.mpc | 11 + ACE/netsvcs/clients/Naming/Client/Client_Test.cpp | 546 + ACE/netsvcs/clients/Naming/Client/Client_Test.h | 79 + ACE/netsvcs/clients/Naming/Client/Makefile.am | 60 + ACE/netsvcs/clients/Naming/Client/README | 123 + ACE/netsvcs/clients/Naming/Client/main.cpp | 76 + ACE/netsvcs/clients/Naming/Client/svc.conf | 4 + ACE/netsvcs/clients/Naming/Client/svc2.conf | 6 + .../clients/Naming/Dump_Restore/Dump_Restore.cpp | 466 + .../clients/Naming/Dump_Restore/Dump_Restore.h | 85 + .../clients/Naming/Dump_Restore/Dump_Restore.mpc | 11 + .../clients/Naming/Dump_Restore/Makefile.am | 60 + ACE/netsvcs/clients/Naming/Dump_Restore/README | 66 + .../clients/Naming/Dump_Restore/createfile.cpp | 35 + ACE/netsvcs/clients/Naming/Dump_Restore/main.cpp | 26 + ACE/netsvcs/clients/Naming/Makefile.am | 14 + ACE/netsvcs/clients/README | 8 + ACE/netsvcs/clients/Tokens/Makefile.am | 17 + ACE/netsvcs/clients/Tokens/README | 34 + ACE/netsvcs/clients/Tokens/collection/Makefile.am | 18 + ACE/netsvcs/clients/Tokens/collection/README | 25 + .../clients/Tokens/collection/collection.cpp | 209 + ACE/netsvcs/clients/Tokens/collection/rw_locks.cpp | 173 + ACE/netsvcs/clients/Tokens/deadlock/Makefile.am | 19 + ACE/netsvcs/clients/Tokens/deadlock/README | 98 + .../Tokens/deadlock/deadlock_detection_test.cpp | 341 + ACE/netsvcs/clients/Tokens/invariant/Makefile.am | 20 + ACE/netsvcs/clients/Tokens/invariant/README | 27 + ACE/netsvcs/clients/Tokens/invariant/invariant.cpp | 196 + ACE/netsvcs/clients/Tokens/manual/Makefile.am | 24 + ACE/netsvcs/clients/Tokens/manual/README | 67 + ACE/netsvcs/clients/Tokens/manual/manual.cpp | 366 + ACE/netsvcs/clients/Tokens/mutex/Makefile.am | 21 + ACE/netsvcs/clients/Tokens/mutex/README | 23 + ACE/netsvcs/clients/Tokens/mutex/test_mutex.cpp | 142 + ACE/netsvcs/clients/Tokens/rw_lock/Makefile.am | 20 + ACE/netsvcs/clients/Tokens/rw_lock/README | 40 + ACE/netsvcs/clients/Tokens/rw_lock/rw_locks.cpp | 255 + ACE/netsvcs/lib/Base_Optimizer.cpp | 29 + ACE/netsvcs/lib/Base_Optimizer.h | 51 + ACE/netsvcs/lib/Client_Logging_Handler.cpp | 680 + ACE/netsvcs/lib/Client_Logging_Handler.h | 103 + ACE/netsvcs/lib/Log_Message_Receiver.cpp | 178 + ACE/netsvcs/lib/Log_Message_Receiver.h | 220 + ACE/netsvcs/lib/Makefile.am | 59 + ACE/netsvcs/lib/Name_Handler.cpp | 641 + ACE/netsvcs/lib/Name_Handler.h | 212 + ACE/netsvcs/lib/README | 267 + ACE/netsvcs/lib/Server_Logging_Handler.cpp | 30 + ACE/netsvcs/lib/Server_Logging_Handler.h | 93 + ACE/netsvcs/lib/Server_Logging_Handler_T.cpp | 456 + ACE/netsvcs/lib/Server_Logging_Handler_T.h | 216 + ACE/netsvcs/lib/TS_Clerk_Handler.cpp | 634 + ACE/netsvcs/lib/TS_Clerk_Handler.h | 259 + ACE/netsvcs/lib/TS_Server_Handler.cpp | 263 + ACE/netsvcs/lib/TS_Server_Handler.h | 117 + ACE/netsvcs/lib/Time_Request_Reply.cpp | 207 + ACE/netsvcs/lib/Time_Request_Reply.h | 136 + ACE/netsvcs/lib/Token_Handler.cpp | 668 + ACE/netsvcs/lib/Token_Handler.h | 284 + ACE/netsvcs/lib/lib.mpc | 20 + ACE/netsvcs/servers/Makefile.am | 41 + ACE/netsvcs/servers/README | 35 + ACE/netsvcs/servers/main.cpp | 177 + ACE/netsvcs/servers/servers.mpc | 16 + ACE/netsvcs/servers/svc.conf | 18 + ACE/netsvcs/servers/svc.conf.xml | 32 + ACE/performance-tests/Makefile.am | 18 + ACE/performance-tests/Misc/Makefile.am | 157 + ACE/performance-tests/Misc/Misc.mpc | 67 + ACE/performance-tests/Misc/basic_func.cpp | 49 + ACE/performance-tests/Misc/basic_func.h | 77 + ACE/performance-tests/Misc/basic_perf.cpp | 646 + ACE/performance-tests/Misc/childbirth_time.cpp | 403 + ACE/performance-tests/Misc/context_switch_time.cpp | 1318 ++ ACE/performance-tests/Misc/preempt.cpp | 467 + ACE/performance-tests/Misc/test_guard.cpp | 119 + ACE/performance-tests/Misc/test_mutex.cpp | 238 + ACE/performance-tests/Misc/test_naming.cpp | 199 + ACE/performance-tests/Misc/test_singleton.cpp | 179 + ACE/performance-tests/Misc/test_singleton.h | 24 + ACE/performance-tests/README | 16 + ACE/performance-tests/RPC/README | 6 + ACE/performance-tests/RPC/RPC.mpc | 17 + ACE/performance-tests/RPC/client.cpp | 74 + ACE/performance-tests/RPC/ping.x | 12 + ACE/performance-tests/RPC/run_test.pl | 34 + ACE/performance-tests/RPC/server.c | 15 + ACE/performance-tests/SCTP/Makefile.am | 122 + ACE/performance-tests/SCTP/Options_Manager.cpp | 542 + ACE/performance-tests/SCTP/Options_Manager.h | 67 + ACE/performance-tests/SCTP/README | 81 + ACE/performance-tests/SCTP/README.LKSCTP | 46 + ACE/performance-tests/SCTP/README.OpenSS7 | 271 + ACE/performance-tests/SCTP/README.SCIOP | 63 + ACE/performance-tests/SCTP/README.SCTP | 81 + ACE/performance-tests/SCTP/README.SCTP_PERF_TEST | 405 + ACE/performance-tests/SCTP/README.SCTP_in_ACE | 269 + ACE/performance-tests/SCTP/SCTP.mpc | 61 + .../SCTP/SOCK_SEQPACK_Association_Test.cpp | 152 + ACE/performance-tests/SCTP/SOCK_SEQPACK_clt.cpp | 309 + ACE/performance-tests/SCTP/SOCK_SEQPACK_srv.cpp | 365 + .../SCTP/SOCK_SEQPACK_wrapper_facade.jpg | Bin 0 -> 47984 bytes ACE/performance-tests/SCTP/SOCK_STREAM_clt.cpp | 318 + ACE/performance-tests/SCTP/SOCK_STREAM_srv.cpp | 358 + ACE/performance-tests/SCTP/THANKS | 30 + ACE/performance-tests/SCTP/hist.cpp | 312 + ACE/performance-tests/SCTP/hist.h | 71 + ACE/performance-tests/SCTP/run_spectrum.config | 12 + ACE/performance-tests/SCTP/run_spectrum.pl | 260 + ACE/performance-tests/SCTP/sample-spectrum.png | Bin 0 -> 5369 bytes .../Server_Concurrency/Latency_Stats.h | 219 + .../Server_Concurrency/Leader_Follower/Makefile.am | 60 + .../Leader_Follower/RT_CORBA_Leader_Follower.cpp | 401 + .../Leader_Follower/RT_CORBA_Leader_Follower.h | 109 + .../Leader_Follower/Svr_Conc_Leader_Follower.mpc | 18 + .../Leader_Follower/leader_follower.cpp | 333 + .../Server_Concurrency/Makefile.am | 14 + .../Queue_Based_Workers/Makefile.am | 60 + .../Queue_Based_Workers/RT_CORBA_Workers.cpp | 591 + .../Queue_Based_Workers/RT_CORBA_Workers.h | 166 + .../Svr_Conc_Queue_Based_Workers.mpc | 18 + .../Queue_Based_Workers/workers.cpp | 414 + .../Server_Concurrency/run_test.sh | 13 + .../Synch-Benchmarks/Base_Test/Baseline_Test.cpp | 237 + .../Synch-Benchmarks/Base_Test/Baseline_Test.h | 153 + .../Synch-Benchmarks/Base_Test/Baseline_Test.inl | 43 + .../Synch-Benchmarks/Base_Test/Makefile.am | 52 + .../Base_Test/Synch_Benchmarks_Base_Test.mpc | 16 + .../Synch-Benchmarks/Base_Test/base_test.cpp | 62 + .../Synch-Benchmarks/Base_Test/mutex_test.cpp | 205 + ACE/performance-tests/Synch-Benchmarks/Makefile.am | 44 + .../Adaptive_Lock_Performance_Test_Base.cpp | 48 + .../Adaptive_Lock_Performance_Test_Base.h | 24 + .../Perf_Test/Benchmark_Performance.cpp | 60 + .../Perf_Test/Benchmark_Performance.h | 48 + .../Synch-Benchmarks/Perf_Test/Makefile.am | 73 + .../Perf_Test/Performance_Test.cpp | 122 + .../Synch-Benchmarks/Perf_Test/Performance_Test.h | 32 + .../Perf_Test/Performance_Test_Options.cpp | 469 + .../Perf_Test/Performance_Test_Options.h | 133 + .../Perf_Test/Performance_Test_Options.inl | 269 + .../Synch-Benchmarks/Perf_Test/README | 76 + .../Perf_Test/Synch_Benchmarks_Perf_Test.mpc | 16 + .../Perf_Test/adaptive_mutex_test.cpp | 32 + .../Perf_Test/adaptive_recursive_lock_test.cpp | 33 + .../Perf_Test/adaptive_sema_test.cpp | 38 + .../Synch-Benchmarks/Perf_Test/condb_test.cpp | 69 + .../Synch-Benchmarks/Perf_Test/conds_test.cpp | 72 + .../Synch-Benchmarks/Perf_Test/context_test.cpp | 38 + .../Synch-Benchmarks/Perf_Test/guard_test.cpp | 126 + .../Synch-Benchmarks/Perf_Test/memory_test.cpp | 42 + .../Synch-Benchmarks/Perf_Test/mutex_test.cpp | 45 + .../Synch-Benchmarks/Perf_Test/pipe_proc_test.cpp | 86 + .../Synch-Benchmarks/Perf_Test/pipe_thr_test.cpp | 79 + .../Perf_Test/recursive_lock_test.cpp | 44 + .../Synch-Benchmarks/Perf_Test/rwrd_test.cpp | 45 + .../Synch-Benchmarks/Perf_Test/rwwr_test.cpp | 45 + .../Synch-Benchmarks/Perf_Test/sema_test.cpp | 45 + .../Synch-Benchmarks/Perf_Test/sysvsema_test.cpp | 67 + .../Synch-Benchmarks/Perf_Test/token_test.cpp | 46 + ACE/performance-tests/Synch-Benchmarks/README | 46 + .../Synch-Benchmarks/Synch_Benchmarks.mpc | 12 + .../Synch-Benchmarks/Synch_Lib/Benchmark_Base.cpp | 95 + .../Synch-Benchmarks/Synch_Lib/Benchmark_Base.h | 114 + .../Synch-Benchmarks/Synch_Lib/Makefile.am | 36 + .../Synch-Benchmarks/Synch_Lib/README | 4 + .../Synch_Lib/Synch_Benchmarks_Synch_Lib.mpc | 7 + .../Synch-Benchmarks/Synch_Lib/export_mac.h | 40 + ACE/performance-tests/Synch-Benchmarks/benchmarks | 19 + ACE/performance-tests/Synch-Benchmarks/context.c | 76 + ACE/performance-tests/Synch-Benchmarks/context.csh | 16 + .../Synch-Benchmarks/orig-results | 73 + .../Synch-Benchmarks/results/.no_prune | 1 + .../Synch-Benchmarks/run_tests.pl | 131 + .../Synch-Benchmarks/svcconf/base_acquire.conf | 20 + .../svcconf/base_acquire_read.conf | 20 + .../svcconf/base_acquire_write.conf | 20 + .../Synch-Benchmarks/svcconf/base_tryacquire.conf | 20 + .../svcconf/base_tryacquire_read.conf | 20 + .../svcconf/base_tryacquire_write.conf | 20 + .../Synch-Benchmarks/svcconf/perf_t1.conf | 32 + .../Synch-Benchmarks/svcconf/perf_t16.conf | 32 + .../Synch-Benchmarks/svcconf/perf_t2.conf | 32 + .../Synch-Benchmarks/svcconf/perf_t32.conf | 32 + .../Synch-Benchmarks/svcconf/perf_t4.conf | 32 + .../Synch-Benchmarks/svcconf/perf_t64.conf | 32 + .../Synch-Benchmarks/svcconf/perf_t8.conf | 32 + .../Synch-Benchmarks/svcconf/svc.conf | 29 + .../Synch-Benchmarks/synch_driver.cpp | 52 + ACE/performance-tests/TCP/Makefile.am | 39 + ACE/performance-tests/TCP/README | 17 + ACE/performance-tests/TCP/TCP.mpc | 7 + ACE/performance-tests/TCP/run_test.pl | 34 + ACE/performance-tests/TCP/tcp_test.cpp | 698 + .../TTCP/ACE-C++/How_to_run_tests | 29 + ACE/performance-tests/TTCP/ACE-C++/run_test | 35 + .../TTCP/ACE-C++/wrapper-new-ttcp.cpp | 967 + ACE/performance-tests/TTCP/C/How_to_run_tests | 30 + ACE/performance-tests/TTCP/C/README | 35 + ACE/performance-tests/TTCP/C/new-ttcp.cpp | 987 + ACE/performance-tests/TTCP/C/run_test | 35 + ACE/performance-tests/UDP/Makefile.am | 39 + ACE/performance-tests/UDP/README | 17 + ACE/performance-tests/UDP/UDP.mpc | 10 + ACE/performance-tests/UDP/run_test.pl | 34 + ACE/performance-tests/UDP/udp_test.cpp | 741 + ACE/performance-tests/perf.mwc | 5 + ACE/protocols/Makefile.am | 21 + ACE/protocols/ace/HTBP/ACE_HTBP.pc.in | 11 + ACE/protocols/ace/HTBP/HTBP.mpc | 12 + ACE/protocols/ace/HTBP/HTBP_Addr.cpp | 94 + ACE/protocols/ace/HTBP/HTBP_Addr.h | 92 + ACE/protocols/ace/HTBP/HTBP_Channel.cpp | 561 + ACE/protocols/ace/HTBP/HTBP_Channel.h | 280 + ACE/protocols/ace/HTBP/HTBP_Channel.inl | 124 + ACE/protocols/ace/HTBP/HTBP_Environment.cpp | 203 + ACE/protocols/ace/HTBP/HTBP_Environment.h | 110 + ACE/protocols/ace/HTBP/HTBP_Export.h | 53 + ACE/protocols/ace/HTBP/HTBP_Filter.cpp | 57 + ACE/protocols/ace/HTBP/HTBP_Filter.h | 104 + ACE/protocols/ace/HTBP/HTBP_Filter.inl | 63 + ACE/protocols/ace/HTBP/HTBP_Filter_Factory.cpp | 56 + ACE/protocols/ace/HTBP/HTBP_Filter_Factory.h | 70 + ACE/protocols/ace/HTBP/HTBP_ID_Requestor.cpp | 141 + ACE/protocols/ace/HTBP/HTBP_ID_Requestor.h | 63 + .../ace/HTBP/HTBP_Inside_Squid_Filter.cpp | 239 + ACE/protocols/ace/HTBP/HTBP_Inside_Squid_Filter.h | 91 + .../ace/HTBP/HTBP_Inside_Squid_Filter.inl | 12 + ACE/protocols/ace/HTBP/HTBP_Macros.h | 10 + ACE/protocols/ace/HTBP/HTBP_Notifier.cpp | 92 + ACE/protocols/ace/HTBP/HTBP_Notifier.h | 54 + .../ace/HTBP/HTBP_Outside_Squid_Filter.cpp | 200 + ACE/protocols/ace/HTBP/HTBP_Outside_Squid_Filter.h | 86 + .../ace/HTBP/HTBP_Outside_Squid_Filter.inl | 12 + ACE/protocols/ace/HTBP/HTBP_Session.cpp | 297 + ACE/protocols/ace/HTBP/HTBP_Session.h | 198 + ACE/protocols/ace/HTBP/HTBP_Session.inl | 114 + ACE/protocols/ace/HTBP/HTBP_Stream.cpp | 359 + ACE/protocols/ace/HTBP/HTBP_Stream.h | 291 + ACE/protocols/ace/HTBP/HTID_Generator.cgi | 78 + ACE/protocols/ace/HTBP/Makefile.am | 89 + ACE/protocols/ace/HTBP/README | 186 + ACE/protocols/ace/Makefile.am | 15 + ACE/protocols/ace/RMCast/ACE_RMCast.pc.in | 11 + ACE/protocols/ace/RMCast/Acknowledge.cpp | 393 + ACE/protocols/ace/RMCast/Acknowledge.h | 248 + ACE/protocols/ace/RMCast/Bits.h | 26 + ACE/protocols/ace/RMCast/Flow.cpp | 136 + ACE/protocols/ace/RMCast/Flow.h | 43 + ACE/protocols/ace/RMCast/Fragment.cpp | 77 + ACE/protocols/ace/RMCast/Fragment.h | 32 + ACE/protocols/ace/RMCast/Link.cpp | 337 + ACE/protocols/ace/RMCast/Link.h | 73 + ACE/protocols/ace/RMCast/Makefile.am | 85 + ACE/protocols/ace/RMCast/Parameters.h | 109 + ACE/protocols/ace/RMCast/Protocol.cpp | 17 + ACE/protocols/ace/RMCast/Protocol.h | 1285 ++ ACE/protocols/ace/RMCast/README | 197 + ACE/protocols/ace/RMCast/RMCast.mpc | 12 + ACE/protocols/ace/RMCast/RMCast_Export.h | 44 + ACE/protocols/ace/RMCast/Reassemble.cpp | 135 + ACE/protocols/ace/RMCast/Reassemble.h | 42 + ACE/protocols/ace/RMCast/Retransmit.cpp | 159 + ACE/protocols/ace/RMCast/Retransmit.h | 98 + ACE/protocols/ace/RMCast/Simulator.cpp | 39 + ACE/protocols/ace/RMCast/Simulator.h | 30 + ACE/protocols/ace/RMCast/Socket.cpp | 396 + ACE/protocols/ace/RMCast/Socket.h | 99 + ACE/protocols/ace/RMCast/Stack.cpp | 71 + ACE/protocols/ace/RMCast/Stack.h | 59 + ACE/protocols/ace/TMCast/ACE_TMCast.pc.in | 11 + ACE/protocols/ace/TMCast/Export.hpp | 58 + ACE/protocols/ace/TMCast/FaultDetector.hpp | 45 + ACE/protocols/ace/TMCast/Group.cpp | 506 + ACE/protocols/ace/TMCast/Group.hpp | 51 + ACE/protocols/ace/TMCast/GroupFwd.hpp | 15 + ACE/protocols/ace/TMCast/LinkListener.hpp | 171 + ACE/protocols/ace/TMCast/MTQueue.cpp | 7 + ACE/protocols/ace/TMCast/MTQueue.hpp | 176 + ACE/protocols/ace/TMCast/Makefile.am | 76 + ACE/protocols/ace/TMCast/Messaging.hpp | 54 + ACE/protocols/ace/TMCast/Protocol.cpp | 31 + ACE/protocols/ace/TMCast/Protocol.hpp | 107 + ACE/protocols/ace/TMCast/README | 240 + ACE/protocols/ace/TMCast/TMCast.mpc | 12 + ACE/protocols/ace/TMCast/TransactionController.hpp | 388 + ACE/protocols/examples/Makefile.am | 14 + ACE/protocols/examples/RMCast/Makefile.am | 13 + ACE/protocols/examples/RMCast/Send_Msg/Makefile.am | 72 + ACE/protocols/examples/RMCast/Send_Msg/Protocol.h | 18 + ACE/protocols/examples/RMCast/Send_Msg/README | 18 + .../examples/RMCast/Send_Msg/Receiver.cpp | 206 + .../examples/RMCast/Send_Msg/Send_Msg.mpc | 17 + ACE/protocols/examples/RMCast/Send_Msg/Sender.cpp | 53 + ACE/protocols/examples/TMCast/Makefile.am | 13 + ACE/protocols/examples/TMCast/Member/Makefile.am | 45 + ACE/protocols/examples/TMCast/Member/Member.mpc | 7 + ACE/protocols/examples/TMCast/Member/README | 36 + ACE/protocols/examples/TMCast/Member/member.cpp | 93 + ACE/protocols/examples/examples.mwc | 5 + ACE/protocols/protocols.mwc | 5 + ACE/protocols/tests/HTBP/HTBP_Config.conf | 4 + ACE/protocols/tests/HTBP/Makefile.am | 16 + ACE/protocols/tests/HTBP/README | 16 + ACE/protocols/tests/HTBP/Reactor_Tests/Makefile.am | 64 + .../tests/HTBP/Reactor_Tests/Reactor_Tests.mpc | 19 + ACE/protocols/tests/HTBP/Reactor_Tests/client.cpp | 201 + ACE/protocols/tests/HTBP/Reactor_Tests/inside.conf | 5 + ACE/protocols/tests/HTBP/Reactor_Tests/run_test.pl | 58 + ACE/protocols/tests/HTBP/Reactor_Tests/server.cpp | 251 + .../tests/HTBP/Reactor_Tests/test_config.h | 316 + .../tests/HTBP/Send_Large_Msg/Makefile.am | 64 + .../tests/HTBP/Send_Large_Msg/Send_Large_Msg.mpc | 19 + ACE/protocols/tests/HTBP/Send_Large_Msg/client.cpp | 143 + .../tests/HTBP/Send_Large_Msg/run_test.pl | 59 + ACE/protocols/tests/HTBP/Send_Large_Msg/server.cpp | 170 + .../tests/HTBP/Send_Recv_Tests/Makefile.am | 66 + .../tests/HTBP/Send_Recv_Tests/SendRecv_Test.mpc | 20 + .../tests/HTBP/Send_Recv_Tests/client.cpp | 232 + .../tests/HTBP/Send_Recv_Tests/run_test.pl | 56 + .../tests/HTBP/Send_Recv_Tests/server.cpp | 286 + ACE/protocols/tests/HTBP/ping/Makefile.am | 62 + ACE/protocols/tests/HTBP/ping/client.cpp | 203 + ACE/protocols/tests/HTBP/ping/ping.mpc | 19 + ACE/protocols/tests/HTBP/ping/run_test.pl | 59 + ACE/protocols/tests/HTBP/ping/server.cpp | 191 + ACE/protocols/tests/Makefile.am | 14 + ACE/protocols/tests/RMCast/Makefile.am | 72 + ACE/protocols/tests/RMCast/Protocol.h | 18 + ACE/protocols/tests/RMCast/RMCast.mpc | 15 + ACE/protocols/tests/RMCast/Receiver.cpp | 188 + ACE/protocols/tests/RMCast/Sender.cpp | 55 + ACE/protocols/tests/RMCast/run_test.pl | 34 + ACE/protocols/tests/tests.mwc | 5 + ACE/tests/ACE.bsp | 25 + ACE/tests/ACE_Init_Test.cpp | 129 + ACE/tests/ACE_Init_Test.h | 59 + ACE/tests/ACE_Init_Test.ico | Bin 0 -> 1078 bytes ACE/tests/ACE_Init_Test.rc | 169 + ACE/tests/ACE_Init_Test.rc2 | 13 + ACE/tests/ACE_Init_TestDlg.cpp | 117 + ACE/tests/ACE_Init_TestDlg.h | 47 + ACE/tests/ACE_Init_Test_Resource.h | 19 + ACE/tests/ACE_Init_Test_StdAfx.h | 44 + ACE/tests/ACE_Test.cpp | 104 + ACE/tests/ARGV_Test.cpp | 277 + ACE/tests/Aio_Platform_Test.cpp | 198 + ACE/tests/Arg_Shifter_Test.cpp | 43 + ACE/tests/Array_Map_Test.cpp | 485 + ACE/tests/Atomic_Op_Test.cpp | 385 + ACE/tests/Auto_Event_Test.cpp | 246 + ACE/tests/Auto_IncDec_Test.cpp | 141 + ACE/tests/Barrier_Test.cpp | 138 + ACE/tests/Based_Pointer_Test.cpp | 427 + ACE/tests/Based_Pointer_Test_Lib.cpp | 39 + ACE/tests/Basic_Types_Test.cpp | 319 + ACE/tests/Bound_Ptr_Test.cpp | 467 + ACE/tests/Bound_Ptr_Test.h | 87 + ACE/tests/Buffer_Stream_Test.cpp | 237 + ACE/tests/Bug_1576_Regression_Test.cpp | 66 + ACE/tests/Bug_1890_Regression_Test.cpp | 329 + ACE/tests/Bug_2368_Regression_Test.cpp | 125 + ACE/tests/Bug_2497_Regression_Test.cpp | 75 + ACE/tests/Bug_2540_Regression_Test.cpp | 321 + ACE/tests/Bug_2609_Regression_Test.cpp | 148 + ACE/tests/Bug_2610_Regression_Test.cpp | 199 + ACE/tests/Bug_2653_Regression_Test.cpp | 236 + ACE/tests/Bug_2659_Regression_Test.cpp | 190 + ACE/tests/Bug_2815_Regression_Test.cpp | 498 + ACE/tests/Bug_2820_Regression_Test.cpp | 141 + ACE/tests/Bug_2975_Regression_Test.cpp | 61 + ACE/tests/Bug_3102_Regression_Test.cpp | 59 + ACE/tests/CDR_Array_Test.cpp | 1010 + ACE/tests/CDR_File_Test.cpp | 486 + ACE/tests/CDR_Test.cpp | 703 + ACE/tests/CE_fostream.cpp | 163 + ACE/tests/CE_fostream.h | 105 + ACE/tests/Cache_Map_Manager_Test.cpp | 598 + ACE/tests/Cache_Map_Manager_Test.h | 38 + ACE/tests/Cached_Accept_Conn_Test.cpp | 525 + ACE/tests/Cached_Accept_Conn_Test.h | 137 + ACE/tests/Cached_Allocator_Test.cpp | 254 + ACE/tests/Cached_Conn_Test.cpp | 496 + ACE/tests/Cached_Conn_Test.h | 35 + ACE/tests/Capabilities_Test.cpp | 119 + ACE/tests/Codecs_Test.cpp | 119 + ACE/tests/Collection_Test.cpp | 184 + ACE/tests/Collection_Test.h | 36 + ACE/tests/Config_Test.cpp | 1526 ++ ACE/tests/Config_Test.h | 77 + ACE/tests/Config_Test.ini | 22 + ACE/tests/Config_Test_Import_1.ini | 5 + ACE/tests/Conn_Test.cpp | 784 + ACE/tests/Conn_Test.h | 62 + ACE/tests/DLL_Test.cpp | 173 + ACE/tests/DLL_Test.h | 74 + ACE/tests/DLL_Test_Impl.cpp | 145 + ACE/tests/DLL_Test_Impl.h | 68 + ACE/tests/DLL_Test_Parent.cpp | 19 + ACE/tests/DLL_Test_Parent.h | 34 + ACE/tests/DLL_Test_Parent_Export.h | 58 + ACE/tests/DLList_Test.cpp | 129 + ACE/tests/Date_Time_Test.cpp | 132 + ACE/tests/Dev_Poll_Reactor_Test.cpp | 598 + ACE/tests/Dirent_Test.cpp | 403 + ACE/tests/Dynamic_Priority_Test.cpp | 796 + ACE/tests/Dynamic_Test.cpp | 151 + ACE/tests/Enum_Interfaces_Test.cpp | 96 + ACE/tests/Env_Value_Test.cpp | 126 + ACE/tests/FIFO_Test.cpp | 311 + ACE/tests/FlReactor_Test.cpp | 278 + ACE/tests/Framework_Component_DLL.cpp | 82 + ACE/tests/Framework_Component_DLL.h | 58 + ACE/tests/Framework_Component_DLL_Export.h | 54 + ACE/tests/Framework_Component_Test.cpp | 121 + ACE/tests/Framework_Component_Test.h | 39 + ACE/tests/Future_Set_Test.cpp | 578 + ACE/tests/Future_Test.cpp | 609 + ACE/tests/Get_Opt_Test.cpp | 346 + ACE/tests/Handle_Set_Test.cpp | 228 + ACE/tests/Hash_Map_Bucket_Iterator_Test.cpp | 122 + ACE/tests/Hash_Map_Manager_Test.cpp | 343 + ACE/tests/Hash_Multi_Map_Manager_Test.cpp | 384 + ACE/tests/High_Res_Timer_Test.cpp | 187 + ACE/tests/INET_Addr_Test.cpp | 257 + ACE/tests/INET_Addr_Test_IPV6.cpp | 167 + ACE/tests/INTEGRITY.ld | 31 + ACE/tests/IOStream_Test.cpp | 494 + ACE/tests/Integer_Truncate_Test.cpp | 377 + ACE/tests/Lazy_Map_Manager_Test.cpp | 335 + ACE/tests/Log_Msg_Backend_Test.cpp | 160 + ACE/tests/Log_Msg_Test.cpp | 625 + ACE/tests/Logging_Strategy_Test.cpp | 517 + ACE/tests/MEM_Stream_Test.cpp | 527 + ACE/tests/MEM_Stream_Test.h | 57 + ACE/tests/MM_Shared_Memory_Test.cpp | 232 + ACE/tests/MT_Reactor_Timer_Test.cpp | 374 + ACE/tests/MT_Reactor_Timer_Test.h | 108 + ACE/tests/MT_Reactor_Upcall_Test.cpp | 384 + .../MT_Reference_Counted_Event_Handler_Test.cpp | 1477 ++ ACE/tests/MT_Reference_Counted_Notify_Test.cpp | 463 + ACE/tests/MT_SOCK_Test.cpp | 442 + ACE/tests/Main.cpp | 30 + ACE/tests/Makefile.am | 3330 +++ ACE/tests/Malloc_Test.cpp | 437 + ACE/tests/Malloc_Test.h | 44 + ACE/tests/Manual_Event_Test.cpp | 217 + ACE/tests/Map_Manager_Test.cpp | 956 + ACE/tests/Map_Test.cpp | 375 + ACE/tests/Map_Test.h | 151 + ACE/tests/Max_Default_Port_Test.cpp | 300 + ACE/tests/Max_Default_Port_Test.h | 53 + ACE/tests/Max_Default_Port_Test_IPV6.cpp | 255 + ACE/tests/Mem_Map_Test.cpp | 286 + ACE/tests/Memcpy_Test.cpp | 103 + ACE/tests/Message_Block_Test.cpp | 412 + ACE/tests/Message_Queue_Notifications_Test.cpp | 367 + ACE/tests/Message_Queue_Test.cpp | 690 + ACE/tests/Message_Queue_Test_Ex.cpp | 778 + ACE/tests/Message_Queue_Test_Ex.h | 89 + ACE/tests/Multicast_Test.cpp | 963 + ACE/tests/Multicast_Test_IPV6.cpp | 1039 + ACE/tests/Multihomed_INET_Addr_Test.cpp | 470 + ACE/tests/Multihomed_INET_Addr_Test_IPV6.cpp | 191 + ACE/tests/Naming_Test.cpp | 322 + ACE/tests/Network_Adapters_Test.cpp | 1176 ++ ACE/tests/Network_Adapters_Test.h | 272 + ACE/tests/New_Fail_Test.cpp | 223 + ACE/tests/NonBlocking_Conn_Test.cpp | 319 + ACE/tests/NonBlocking_Conn_Test.h | 54 + ACE/tests/Notification_Queue_Unit_Test.cpp | 329 + ACE/tests/Notify_Performance_Test.cpp | 259 + ACE/tests/OS_Test.cpp | 1027 + ACE/tests/Object_Manager_Flipping_Test.cpp | 128 + ACE/tests/Object_Manager_Test.cpp | 119 + ACE/tests/Obstack_Test.cpp | 116 + ACE/tests/OrdMultiSet_Test.cpp | 220 + ACE/tests/Pipe_Test.cpp | 177 + ACE/tests/Priority_Buffer_Test.cpp | 182 + ACE/tests/Priority_Reactor_Test.cpp | 399 + ACE/tests/Priority_Reactor_Test.h | 76 + ACE/tests/Priority_Task_Test.cpp | 253 + ACE/tests/Proactor_Scatter_Gather_Test.cpp | 1492 ++ ACE/tests/Proactor_Test.cpp | 1943 ++ ACE/tests/Proactor_Test.h | 142 + ACE/tests/Proactor_Test_IPV6.cpp | 1989 ++ ACE/tests/Proactor_Timer_Test.cpp | 343 + ACE/tests/Process_Manager_Test.cpp | 479 + ACE/tests/Process_Manual_Event_Test.cpp | 259 + ACE/tests/Process_Mutex_Test.cpp | 218 + ACE/tests/Process_Semaphore_Test.cpp | 230 + ACE/tests/Process_Strategy_Test.cpp | 708 + ACE/tests/Process_Strategy_Test.h | 141 + ACE/tests/QtReactor_Test.cpp | 934 + ACE/tests/QtReactor_Test.h | 23 + ACE/tests/RB_Tree_Test.cpp | 805 + ACE/tests/RB_Tree_Test.h | 112 + ACE/tests/README | 82 + ACE/tests/Reactor_Dispatch_Order_Test.cpp | 223 + ACE/tests/Reactor_Exceptions_Test.cpp | 198 + ACE/tests/Reactor_Notification_Queue_Test.cpp | 223 + ACE/tests/Reactor_Notify_Test.cpp | 581 + ACE/tests/Reactor_Performance_Test.cpp | 420 + ACE/tests/Reactor_Performance_Test.h | 62 + ACE/tests/Reactor_Registration_Test.cpp | 203 + ACE/tests/Reactor_Remove_Resume_Test.cpp | 486 + ACE/tests/Reactor_Timer_Test.cpp | 272 + ACE/tests/Reactors_Test.cpp | 263 + ACE/tests/Reader_Writer_Test.cpp | 293 + ACE/tests/Recursive_Condition_Bug_Test.cpp | 193 + ACE/tests/Recursive_Condition_Test.cpp | 308 + ACE/tests/Recursive_Mutex_Test.cpp | 389 + ACE/tests/Refcounted_Auto_Ptr_Test.cpp | 551 + ACE/tests/Refcounted_Auto_Ptr_Test.h | 39 + ACE/tests/Reference_Counted_Event_Handler_Test.cpp | 1016 + ACE/tests/Reverse_Lock_Test.cpp | 48 + ACE/tests/SOCK_Connector_Test.cpp | 320 + ACE/tests/SOCK_Dgram_Bcast_Test.cpp | 261 + ACE/tests/SOCK_Dgram_Test.cpp | 308 + ACE/tests/SOCK_Netlink_Test.cpp | 980 + ACE/tests/SOCK_SEQPACK_SCTP_Test.cpp | 398 + ACE/tests/SOCK_Send_Recv_Test.cpp | 455 + ACE/tests/SOCK_Send_Recv_Test_IPV6.cpp | 399 + ACE/tests/SOCK_Test.cpp | 286 + ACE/tests/SOCK_Test_IPv6.cpp | 290 + ACE/tests/SPIPE_Test.cpp | 220 + ACE/tests/SSL/Bug_2912_Regression_Test.cpp | 1279 ++ ACE/tests/SSL/Main.cpp | 30 + ACE/tests/SSL/Makefile.am | 79 + ACE/tests/SSL/SSL_Asynch_Stream_Test.cpp | 486 + ACE/tests/SSL/Thread_Pool_Reactor_SSL_Test.cpp | 354 + ACE/tests/SSL/Thread_Pool_Reactor_SSL_Test.h | 50 + ACE/tests/SSL/acetest.mpb | 21 + ACE/tests/SSL/dummy.pem | 15 + ACE/tests/SSL/key.pem | 15 + ACE/tests/SSL/tests.mpc | 26 + ACE/tests/SString_Test.cpp | 345 + ACE/tests/STL_algorithm_Test_T.cpp | 80 + ACE/tests/STL_algorithm_Test_T.h | 29 + ACE/tests/SV_Shared_Memory_Test.cpp | 201 + ACE/tests/Semaphore_Test.cpp | 252 + ACE/tests/Sendfile_Test.cpp | 337 + ACE/tests/Service_Config_DLL.cpp | 274 + ACE/tests/Service_Config_DLL.h | 91 + ACE/tests/Service_Config_DLL_Export.h | 38 + ACE/tests/Service_Config_Test.UTF-16.conf | Bin 0 -> 2008 bytes ACE/tests/Service_Config_Test.UTF-16.conf.xml | Bin 0 -> 2874 bytes ACE/tests/Service_Config_Test.WCHAR_T.conf | Bin 0 -> 4012 bytes ACE/tests/Service_Config_Test.WCHAR_T.conf.xml | Bin 0 -> 5744 bytes ACE/tests/Service_Config_Test.conf | 19 + ACE/tests/Service_Config_Test.conf.xml | 27 + ACE/tests/Service_Config_Test.cpp | 366 + ACE/tests/Signal_Test.cpp | 510 + ACE/tests/Sigset_Ops_Test.cpp | 148 + ACE/tests/Simple_Message_Block_Test.cpp | 215 + ACE/tests/Svc_Handler_Test.cpp | 151 + ACE/tests/TP_Reactor_Test.cpp | 1238 ++ ACE/tests/TP_Reactor_Test.h | 200 + ACE/tests/TSS_Static_Test.cpp | 113 + ACE/tests/TSS_Test.cpp | 293 + ACE/tests/TSS_Test_Errno.h | 102 + ACE/tests/Task_Ex_Test.cpp | 165 + ACE/tests/Task_Ex_Test.h | 34 + ACE/tests/Task_Test.cpp | 159 + ACE/tests/Test_Output.cpp | 224 + ACE/tests/Test_Output_Export.h | 54 + ACE/tests/Thread_Creation_Threshold_Test.cpp | 239 + ACE/tests/Thread_Manager_Test.cpp | 472 + ACE/tests/Thread_Mutex_Test.cpp | 276 + ACE/tests/Thread_Pool_Reactor_Resume_Test.cpp | 393 + ACE/tests/Thread_Pool_Reactor_Resume_Test.h | 56 + ACE/tests/Thread_Pool_Reactor_Test.cpp | 345 + ACE/tests/Thread_Pool_Reactor_Test.h | 49 + ACE/tests/Thread_Pool_Test.cpp | 461 + ACE/tests/Time_Service_Test.cpp | 121 + ACE/tests/Time_Value_Test.cpp | 124 + ACE/tests/Timeprobe_Test.cpp | 124 + ACE/tests/Timer_Cancellation_Test.cpp | 162 + ACE/tests/Timer_Queue_Reference_Counting_Test.cpp | 658 + ACE/tests/Timer_Queue_Test.cpp | 667 + ACE/tests/TkReactor_Test.cpp | 322 + ACE/tests/TkReactor_Test.tcl | 15 + ACE/tests/Token_Strategy_Test.cpp | 248 + ACE/tests/Tokens_Test.cpp | 330 + ACE/tests/UNIXclerk.conf | 3 + ACE/tests/UNIXserver.conf | 7 + ACE/tests/UNIXtokens.conf | 5 + ACE/tests/UPIPE_SAP_Test.cpp | 184 + ACE/tests/UUID_Test.cpp | 129 + ACE/tests/Unbounded_Set_Test.cpp | 135 + ACE/tests/Unload_libACE.cpp | 271 + ACE/tests/Upgradable_RW_Test.cpp | 491 + ACE/tests/Upgradable_RW_Test.h | 147 + ACE/tests/Vector_Test.cpp | 179 + ACE/tests/WFMO_Reactor_Test.cpp | 157 + ACE/tests/Win32clerk.conf | 3 + ACE/tests/Win32server.conf | 10 + ACE/tests/Win32tokens.conf | 4 + ACE/tests/XtAthenaReactor_Test.cpp | 322 + ACE/tests/XtMotifReactor_Test.cpp | 329 + ACE/tests/acetest.mpb | 22 + ACE/tests/dll_test_parent_lib.mpb | 10 + ACE/tests/pharlap/run_pharlap_tests.bat | 130 + ACE/tests/randomize.h | 126 + ACE/tests/run_test.lst | 194 + ACE/tests/run_test.pl | 569 + ACE/tests/run_tests.check | 41 + ACE/tests/run_tests_remote.sh | 246 + ACE/tests/test_config.h | 176 + ACE/tests/tests.mpc | 1481 ++ ACE/tests/tests.mwc | 9 + ACE/tests/tests_pharlap_msvc.lnk | 72 + ACE/tests/unload_libace.mpb | 14 + ACE/websvcs/Makefile.am | 14 + ACE/websvcs/README | 11 + ACE/websvcs/lib/Makefile.am | 36 + ACE/websvcs/lib/URL_Addr.cpp | 967 + ACE/websvcs/lib/URL_Addr.h | 404 + ACE/websvcs/lib/URL_Addr.inl | 155 + ACE/websvcs/lib/lib.mpc | 11 + ACE/websvcs/lib/websvcs_export.h | 44 + ACE/websvcs/tests/Makefile.am | 35 + ACE/websvcs/tests/Test_URL_Addr.cpp | 214 + ACE/websvcs/tests/tests.mpc | 13 + 4488 files changed, 1019549 insertions(+) create mode 100644 ACE/ACE-INSTALL.html create mode 100644 ACE/ACE.mwc create mode 100644 ACE/ACEXML/ACEXML.mwc create mode 100644 ACE/ACEXML/ChangeLog create mode 100644 ACE/ACEXML/Makefile.am create mode 100644 ACE/ACEXML/README create mode 100644 ACE/ACEXML/apps/Makefile.am create mode 100644 ACE/ACEXML/apps/svcconf/ACEXML_XML_Svc_Conf_Parser.pc.in create mode 100644 ACE/ACEXML/apps/svcconf/Makefile.am create mode 100644 ACE/ACEXML/apps/svcconf/README create mode 100644 ACE/ACEXML/apps/svcconf/Svcconf.cpp create mode 100644 ACE/ACEXML/apps/svcconf/Svcconf.h create mode 100644 ACE/ACEXML/apps/svcconf/Svcconf_Handler.cpp create mode 100644 ACE/ACEXML/apps/svcconf/Svcconf_Handler.h create mode 100644 ACE/ACEXML/apps/svcconf/Svcconf_Handler.inl create mode 100644 ACE/ACEXML/apps/svcconf/svcconf.dtd create mode 100644 ACE/ACEXML/apps/svcconf/svcconf.mpc create mode 100644 ACE/ACEXML/common/ACEXML.pc.in create mode 100644 ACE/ACEXML/common/ACEXML_Export.h create mode 100644 ACE/ACEXML/common/Attributes.cpp create mode 100644 ACE/ACEXML/common/Attributes.h create mode 100644 ACE/ACEXML/common/AttributesImpl.cpp create mode 100644 ACE/ACEXML/common/AttributesImpl.h create mode 100644 ACE/ACEXML/common/AttributesImpl.inl create mode 100644 ACE/ACEXML/common/Attributes_Def_Builder.cpp create mode 100644 ACE/ACEXML/common/Attributes_Def_Builder.h create mode 100644 ACE/ACEXML/common/CharStream.cpp create mode 100644 ACE/ACEXML/common/CharStream.h create mode 100644 ACE/ACEXML/common/ContentHandler.cpp create mode 100644 ACE/ACEXML/common/ContentHandler.h create mode 100644 ACE/ACEXML/common/DTDHandler.cpp create mode 100644 ACE/ACEXML/common/DTDHandler.h create mode 100644 ACE/ACEXML/common/DTD_Manager.cpp create mode 100644 ACE/ACEXML/common/DTD_Manager.h create mode 100644 ACE/ACEXML/common/DefaultHandler.cpp create mode 100644 ACE/ACEXML/common/DefaultHandler.h create mode 100644 ACE/ACEXML/common/Element_Def_Builder.cpp create mode 100644 ACE/ACEXML/common/Element_Def_Builder.h create mode 100644 ACE/ACEXML/common/Encoding.cpp create mode 100644 ACE/ACEXML/common/Encoding.h create mode 100644 ACE/ACEXML/common/EntityResolver.cpp create mode 100644 ACE/ACEXML/common/EntityResolver.h create mode 100644 ACE/ACEXML/common/Env.cpp create mode 100644 ACE/ACEXML/common/Env.h create mode 100644 ACE/ACEXML/common/Env.inl create mode 100644 ACE/ACEXML/common/ErrorHandler.cpp create mode 100644 ACE/ACEXML/common/ErrorHandler.h create mode 100644 ACE/ACEXML/common/Exception.cpp create mode 100644 ACE/ACEXML/common/Exception.h create mode 100644 ACE/ACEXML/common/Exception.inl create mode 100644 ACE/ACEXML/common/FileCharStream.cpp create mode 100644 ACE/ACEXML/common/FileCharStream.h create mode 100644 ACE/ACEXML/common/HttpCharStream.cpp create mode 100644 ACE/ACEXML/common/HttpCharStream.h create mode 100644 ACE/ACEXML/common/InputSource.cpp create mode 100644 ACE/ACEXML/common/InputSource.h create mode 100644 ACE/ACEXML/common/Locator.cpp create mode 100644 ACE/ACEXML/common/Locator.h create mode 100644 ACE/ACEXML/common/LocatorImpl.cpp create mode 100644 ACE/ACEXML/common/LocatorImpl.h create mode 100644 ACE/ACEXML/common/LocatorImpl.inl create mode 100644 ACE/ACEXML/common/Makefile.am create mode 100644 ACE/ACEXML/common/Mem_Map_Stream.cpp create mode 100644 ACE/ACEXML/common/Mem_Map_Stream.h create mode 100644 ACE/ACEXML/common/NamespaceSupport.cpp create mode 100644 ACE/ACEXML/common/NamespaceSupport.h create mode 100644 ACE/ACEXML/common/SAXExceptions.cpp create mode 100644 ACE/ACEXML/common/SAXExceptions.h create mode 100644 ACE/ACEXML/common/SAXExceptions.inl create mode 100644 ACE/ACEXML/common/StrCharStream.cpp create mode 100644 ACE/ACEXML/common/StrCharStream.h create mode 100644 ACE/ACEXML/common/StreamFactory.cpp create mode 100644 ACE/ACEXML/common/StreamFactory.h create mode 100644 ACE/ACEXML/common/Transcode.cpp create mode 100644 ACE/ACEXML/common/Transcode.h create mode 100644 ACE/ACEXML/common/URL_Addr.cpp create mode 100644 ACE/ACEXML/common/URL_Addr.h create mode 100644 ACE/ACEXML/common/URL_Addr.inl create mode 100644 ACE/ACEXML/common/Validator.cpp create mode 100644 ACE/ACEXML/common/Validator.h create mode 100644 ACE/ACEXML/common/XMLFilter.h create mode 100644 ACE/ACEXML/common/XMLFilterImpl.cpp create mode 100644 ACE/ACEXML/common/XMLFilterImpl.h create mode 100644 ACE/ACEXML/common/XMLFilterImpl.inl create mode 100644 ACE/ACEXML/common/XMLReader.cpp create mode 100644 ACE/ACEXML/common/XMLReader.h create mode 100644 ACE/ACEXML/common/XML_Codecs.cpp create mode 100644 ACE/ACEXML/common/XML_Codecs.h create mode 100644 ACE/ACEXML/common/XML_Macros.h create mode 100644 ACE/ACEXML/common/XML_Types.h create mode 100644 ACE/ACEXML/common/XML_Util.cpp create mode 100644 ACE/ACEXML/common/XML_Util.h create mode 100644 ACE/ACEXML/common/ZipCharStream.cpp create mode 100644 ACE/ACEXML/common/ZipCharStream.h create mode 100644 ACE/ACEXML/common/codecs.mpb create mode 100644 ACE/ACEXML/common/common.mpc create mode 100644 ACE/ACEXML/docs/TODO.txt create mode 100644 ACE/ACEXML/docs/bugs.txt create mode 100644 ACE/ACEXML/docs/guidelines.txt create mode 100644 ACE/ACEXML/docs/parser_features.txt create mode 100644 ACE/ACEXML/docs/readme.txt create mode 100644 ACE/ACEXML/examples/Makefile.am create mode 100644 ACE/ACEXML/examples/SAXPrint/Makefile.am create mode 100644 ACE/ACEXML/examples/SAXPrint/Print_Handler.cpp create mode 100644 ACE/ACEXML/examples/SAXPrint/Print_Handler.h create mode 100644 ACE/ACEXML/examples/SAXPrint/SAXPrint.mpc create mode 100644 ACE/ACEXML/examples/SAXPrint/SAXPrint_Handler.cpp create mode 100644 ACE/ACEXML/examples/SAXPrint/SAXPrint_Handler.h create mode 100644 ACE/ACEXML/examples/SAXPrint/SAXPrint_Handler.inl create mode 100644 ACE/ACEXML/examples/SAXPrint/broken.xml create mode 100644 ACE/ACEXML/examples/SAXPrint/main.cpp create mode 100644 ACE/ACEXML/examples/SAXPrint/namespaces.xml create mode 100644 ACE/ACEXML/examples/SAXPrint/ns.svc.conf.xml create mode 100644 ACE/ACEXML/examples/SAXPrint/simple.svcconf.xml create mode 100644 ACE/ACEXML/examples/SAXPrint/svc.conf.xml create mode 100644 ACE/ACEXML/parser/Makefile.am create mode 100644 ACE/ACEXML/parser/debug_validator/Debug_Attributes_Builder.cpp create mode 100644 ACE/ACEXML/parser/debug_validator/Debug_Attributes_Builder.h create mode 100644 ACE/ACEXML/parser/debug_validator/Debug_DTD_Manager.cpp create mode 100644 ACE/ACEXML/parser/debug_validator/Debug_DTD_Manager.h create mode 100644 ACE/ACEXML/parser/debug_validator/Debug_DTD_Manager_Export.h create mode 100644 ACE/ACEXML/parser/debug_validator/Debug_Element_Builder.cpp create mode 100644 ACE/ACEXML/parser/debug_validator/Debug_Element_Builder.h create mode 100644 ACE/ACEXML/parser/debug_validator/Element_Tree.cpp create mode 100644 ACE/ACEXML/parser/debug_validator/Element_Tree.h create mode 100644 ACE/ACEXML/parser/debug_validator/Element_Tree.inl create mode 100644 ACE/ACEXML/parser/parser/ACEXML_Parser.pc.in create mode 100644 ACE/ACEXML/parser/parser/Entity_Manager.cpp create mode 100644 ACE/ACEXML/parser/parser/Entity_Manager.h create mode 100644 ACE/ACEXML/parser/parser/Entity_Manager.inl create mode 100644 ACE/ACEXML/parser/parser/Makefile.am create mode 100644 ACE/ACEXML/parser/parser/Parser.cpp create mode 100644 ACE/ACEXML/parser/parser/Parser.h create mode 100644 ACE/ACEXML/parser/parser/Parser.inl create mode 100644 ACE/ACEXML/parser/parser/ParserContext.cpp create mode 100644 ACE/ACEXML/parser/parser/ParserContext.h create mode 100644 ACE/ACEXML/parser/parser/ParserContext.inl create mode 100644 ACE/ACEXML/parser/parser/ParserInternals.cpp create mode 100644 ACE/ACEXML/parser/parser/ParserInternals.h create mode 100644 ACE/ACEXML/parser/parser/Parser_export.h create mode 100644 ACE/ACEXML/parser/parser/parser.mpc create mode 100644 ACE/ACEXML/tests/ContentHandler_Test.cpp create mode 100644 ACE/ACEXML/tests/HttpCharStream_Test.cpp create mode 100644 ACE/ACEXML/tests/Makefile.am create mode 100644 ACE/ACEXML/tests/NamespaceSupport_Test.cpp create mode 100644 ACE/ACEXML/tests/Transcoder_Test.cpp create mode 100644 ACE/ACEXML/tests/tests.mpc create mode 100644 ACE/ACEXML/tests/util/Makefile.am create mode 100644 ACE/ACEXML/tests/util/test.cpp create mode 100644 ACE/ACEXML/tests/util/util.mpc create mode 100644 ACE/ASNMP/COPYRIGHT create mode 100644 ACE/ASNMP/ChangeLog create mode 100644 ACE/ASNMP/Makefile.am create mode 100644 ACE/ASNMP/README create mode 100644 ACE/ASNMP/TO-DO create mode 100644 ACE/ASNMP/agent/Makefile.am create mode 100644 ACE/ASNMP/agent/agent.mpc create mode 100644 ACE/ASNMP/agent/agent_impl.cpp create mode 100644 ACE/ASNMP/agent/agent_impl.h create mode 100644 ACE/ASNMP/agent/main.cpp create mode 100644 ACE/ASNMP/agent/snmp_agent.cpp create mode 100644 ACE/ASNMP/agent/snmp_agent.h create mode 100644 ACE/ASNMP/asnmp-overview.html create mode 100644 ACE/ASNMP/asnmp/ASNMP_Export.h create mode 100644 ACE/ASNMP/asnmp/ChangeLog create mode 100644 ACE/ASNMP/asnmp/Makefile.am create mode 100644 ACE/ASNMP/asnmp/TODO create mode 100644 ACE/ASNMP/asnmp/address.cpp create mode 100644 ACE/ASNMP/asnmp/address.h create mode 100644 ACE/ASNMP/asnmp/asn1.cpp create mode 100644 ACE/ASNMP/asnmp/asn1.h create mode 100644 ACE/ASNMP/asnmp/asnmp.mpc create mode 100644 ACE/ASNMP/asnmp/counter.cpp create mode 100644 ACE/ASNMP/asnmp/counter.h create mode 100644 ACE/ASNMP/asnmp/ctr64.cpp create mode 100644 ACE/ASNMP/asnmp/ctr64.h create mode 100644 ACE/ASNMP/asnmp/enttraps.h create mode 100644 ACE/ASNMP/asnmp/gauge.cpp create mode 100644 ACE/ASNMP/asnmp/gauge.h create mode 100644 ACE/ASNMP/asnmp/integer.cpp create mode 100644 ACE/ASNMP/asnmp/integer.h create mode 100644 ACE/ASNMP/asnmp/octet.cpp create mode 100644 ACE/ASNMP/asnmp/octet.h create mode 100644 ACE/ASNMP/asnmp/oid.cpp create mode 100644 ACE/ASNMP/asnmp/oid.h create mode 100644 ACE/ASNMP/asnmp/oid_def.h create mode 100644 ACE/ASNMP/asnmp/pdu.cpp create mode 100644 ACE/ASNMP/asnmp/pdu.h create mode 100644 ACE/ASNMP/asnmp/sagent.cpp create mode 100644 ACE/ASNMP/asnmp/sagent.h create mode 100644 ACE/ASNMP/asnmp/smi.h create mode 100644 ACE/ASNMP/asnmp/smival.h create mode 100644 ACE/ASNMP/asnmp/snmp.cpp create mode 100644 ACE/ASNMP/asnmp/snmp.h create mode 100644 ACE/ASNMP/asnmp/snmperrs.h create mode 100644 ACE/ASNMP/asnmp/target.cpp create mode 100644 ACE/ASNMP/asnmp/target.h create mode 100644 ACE/ASNMP/asnmp/timetick.cpp create mode 100644 ACE/ASNMP/asnmp/timetick.h create mode 100644 ACE/ASNMP/asnmp/transaction.cpp create mode 100644 ACE/ASNMP/asnmp/transaction.h create mode 100644 ACE/ASNMP/asnmp/transaction_result.h create mode 100644 ACE/ASNMP/asnmp/vb.cpp create mode 100644 ACE/ASNMP/asnmp/vb.h create mode 100644 ACE/ASNMP/asnmp/wpdu.cpp create mode 100644 ACE/ASNMP/asnmp/wpdu.h create mode 100644 ACE/ASNMP/examples/Makefile.am create mode 100644 ACE/ASNMP/examples/get/Makefile.am create mode 100644 ACE/ASNMP/examples/get/get.cpp create mode 100644 ACE/ASNMP/examples/get/get.mpc create mode 100644 ACE/ASNMP/examples/get/get_async.cpp create mode 100644 ACE/ASNMP/examples/next/Makefile.am create mode 100644 ACE/ASNMP/examples/next/next.cpp create mode 100644 ACE/ASNMP/examples/next/next.mpc create mode 100644 ACE/ASNMP/examples/set/Makefile.am create mode 100644 ACE/ASNMP/examples/set/set.cpp create mode 100644 ACE/ASNMP/examples/set/set.mpc create mode 100644 ACE/ASNMP/examples/trap/Makefile.am create mode 100644 ACE/ASNMP/examples/trap/trap.cpp create mode 100644 ACE/ASNMP/examples/trap/trap.mpc create mode 100644 ACE/ASNMP/examples/walk/Makefile.am create mode 100644 ACE/ASNMP/examples/walk/walk.cpp create mode 100644 ACE/ASNMP/examples/walk/walk.mpc create mode 100644 ACE/ASNMP/mibs/RFC1213-MIB.my create mode 100644 ACE/ASNMP/tests/Address_Test.cpp create mode 100644 ACE/ASNMP/tests/Counter64_Test.cpp create mode 100644 ACE/ASNMP/tests/Counter_Test.cpp create mode 100644 ACE/ASNMP/tests/Gauge_Test.cpp create mode 100644 ACE/ASNMP/tests/Integer_Test.cpp create mode 100644 ACE/ASNMP/tests/Makefile.am create mode 100644 ACE/ASNMP/tests/Octet_Test.cpp create mode 100644 ACE/ASNMP/tests/Oid_Test.cpp create mode 100644 ACE/ASNMP/tests/Target_Test.cpp create mode 100644 ACE/ASNMP/tests/Varbind_Test.cpp create mode 100644 ACE/ASNMP/tests/run_tests.bat create mode 100755 ACE/ASNMP/tests/run_tests.sh create mode 100644 ACE/ASNMP/tests/test_config.h create mode 100644 ACE/ASNMP/tests/tests.mpc create mode 100644 ACE/AUTHORS create mode 100644 ACE/COPYING create mode 100644 ACE/ChangeLog create mode 100644 ACE/ChangeLogs/ChangeLog-00a create mode 100644 ACE/ChangeLogs/ChangeLog-00b create mode 100644 ACE/ChangeLogs/ChangeLog-01a create mode 100644 ACE/ChangeLogs/ChangeLog-01b create mode 100644 ACE/ChangeLogs/ChangeLog-02a create mode 100644 ACE/ChangeLogs/ChangeLog-02b create mode 100644 ACE/ChangeLogs/ChangeLog-03a create mode 100644 ACE/ChangeLogs/ChangeLog-03b create mode 100644 ACE/ChangeLogs/ChangeLog-03c create mode 100644 ACE/ChangeLogs/ChangeLog-04a create mode 100644 ACE/ChangeLogs/ChangeLog-04b create mode 100644 ACE/ChangeLogs/ChangeLog-05a create mode 100644 ACE/ChangeLogs/ChangeLog-05b create mode 100644 ACE/ChangeLogs/ChangeLog-05c create mode 100644 ACE/ChangeLogs/ChangeLog-06a create mode 100644 ACE/ChangeLogs/ChangeLog-06b create mode 100644 ACE/ChangeLogs/ChangeLog-07a create mode 100644 ACE/ChangeLogs/ChangeLog-07b create mode 100644 ACE/ChangeLogs/ChangeLog-08a create mode 100644 ACE/ChangeLogs/ChangeLog-93 create mode 100644 ACE/ChangeLogs/ChangeLog-94 create mode 100644 ACE/ChangeLogs/ChangeLog-95 create mode 100644 ACE/ChangeLogs/ChangeLog-96a create mode 100644 ACE/ChangeLogs/ChangeLog-96b create mode 100644 ACE/ChangeLogs/ChangeLog-97a create mode 100644 ACE/ChangeLogs/ChangeLog-97b create mode 100644 ACE/ChangeLogs/ChangeLog-98a create mode 100644 ACE/ChangeLogs/ChangeLog-98b create mode 100644 ACE/ChangeLogs/ChangeLog-99a create mode 100644 ACE/ChangeLogs/ChangeLog-99b create mode 100644 ACE/FAQ create mode 100644 ACE/Kokyu/DSRT_CV_Dispatcher_Impl_T.cpp create mode 100644 ACE/Kokyu/DSRT_CV_Dispatcher_Impl_T.h create mode 100644 ACE/Kokyu/DSRT_Direct_Dispatcher_Impl_T.cpp create mode 100644 ACE/Kokyu/DSRT_Direct_Dispatcher_Impl_T.h create mode 100644 ACE/Kokyu/DSRT_Dispatch_Item_T.cpp create mode 100644 ACE/Kokyu/DSRT_Dispatch_Item_T.h create mode 100644 ACE/Kokyu/DSRT_Dispatch_Item_T.inl create mode 100644 ACE/Kokyu/DSRT_Dispatcher_Impl_T.cpp create mode 100644 ACE/Kokyu/DSRT_Dispatcher_Impl_T.h create mode 100644 ACE/Kokyu/DSRT_Dispatcher_Impl_T.inl create mode 100644 ACE/Kokyu/DSRT_Sched_Queue_T.cpp create mode 100644 ACE/Kokyu/DSRT_Sched_Queue_T.h create mode 100644 ACE/Kokyu/Default_Dispatcher_Impl.cpp create mode 100644 ACE/Kokyu/Default_Dispatcher_Impl.h create mode 100644 ACE/Kokyu/Default_Dispatcher_Impl.inl create mode 100644 ACE/Kokyu/Dispatch_Deferrer.cpp create mode 100644 ACE/Kokyu/Dispatch_Deferrer.h create mode 100644 ACE/Kokyu/Dispatch_Deferrer.inl create mode 100644 ACE/Kokyu/Dispatcher_Impl.cpp create mode 100644 ACE/Kokyu/Dispatcher_Impl.h create mode 100644 ACE/Kokyu/Dispatcher_Impl.inl create mode 100644 ACE/Kokyu/Dispatcher_Task.cpp create mode 100644 ACE/Kokyu/Dispatcher_Task.h create mode 100644 ACE/Kokyu/Dispatcher_Task.inl create mode 100644 ACE/Kokyu/Kokyu.cpp create mode 100644 ACE/Kokyu/Kokyu.dsui create mode 100644 ACE/Kokyu/Kokyu.h create mode 100644 ACE/Kokyu/Kokyu.inl create mode 100644 ACE/Kokyu/Kokyu.mpc create mode 100644 ACE/Kokyu/Kokyu.mwc create mode 100644 ACE/Kokyu/Kokyu.pc.in create mode 100644 ACE/Kokyu/Kokyu_defs.cpp create mode 100644 ACE/Kokyu/Kokyu_defs.h create mode 100644 ACE/Kokyu/Kokyu_defs.inl create mode 100644 ACE/Kokyu/Kokyu_dsrt.cpp create mode 100644 ACE/Kokyu/Kokyu_dsrt.h create mode 100644 ACE/Kokyu/Kokyu_dsrt.inl create mode 100644 ACE/Kokyu/Makefile.am create mode 100644 ACE/Kokyu/README create mode 100644 ACE/Kokyu/docs/Kokyu.html create mode 100644 ACE/Kokyu/docs/KokyuEC.jpg create mode 100644 ACE/Kokyu/docs/kokyu1.jpg create mode 100644 ACE/Kokyu/docs/kokyu2.jpg create mode 100644 ACE/Kokyu/kokyu_config.h create mode 100644 ACE/Kokyu/kokyu_export.h create mode 100644 ACE/Kokyu/tests/DSRT_MIF/DSRT_MIF.mpc create mode 100644 ACE/Kokyu/tests/DSRT_MIF/MIF.cpp create mode 100644 ACE/Kokyu/tests/DSRT_MIF/Makefile.am create mode 100644 ACE/Kokyu/tests/DSRT_MIF/svc.conf create mode 100644 ACE/Kokyu/tests/DSRT_MIF/svc.conf.xml create mode 100644 ACE/Kokyu/tests/EDF/EDF.mpc create mode 100644 ACE/Kokyu/tests/EDF/Makefile.am create mode 100644 ACE/Kokyu/tests/EDF/README create mode 100644 ACE/Kokyu/tests/EDF/test.cpp create mode 100644 ACE/Kokyu/tests/FIFO/FIFO.mpc create mode 100644 ACE/Kokyu/tests/FIFO/Makefile.am create mode 100644 ACE/Kokyu/tests/FIFO/README create mode 100644 ACE/Kokyu/tests/FIFO/test.cpp create mode 100644 ACE/Kokyu/tests/Makefile.am create mode 100644 ACE/Makefile.am create mode 100644 ACE/NEWS create mode 100644 ACE/PROBLEM-REPORT-FORM create mode 100644 ACE/README create mode 100644 ACE/Release create mode 100644 ACE/THANKS create mode 100644 ACE/VERSION create mode 100644 ACE/ace/ACE.cpp create mode 100644 ACE/ace/ACE.h create mode 100644 ACE/ace/ACE.inl create mode 100644 ACE/ace/ACE.pc.in create mode 100644 ACE/ace/ACE_crc32.cpp create mode 100644 ACE/ace/ACE_crc_ccitt.cpp create mode 100644 ACE/ace/ACE_export.h create mode 100644 ACE/ace/ARGV.cpp create mode 100644 ACE/ace/ARGV.h create mode 100644 ACE/ace/ARGV.inl create mode 100644 ACE/ace/ATM_Acceptor.cpp create mode 100644 ACE/ace/ATM_Acceptor.h create mode 100644 ACE/ace/ATM_Acceptor.inl create mode 100644 ACE/ace/ATM_Addr.cpp create mode 100644 ACE/ace/ATM_Addr.h create mode 100644 ACE/ace/ATM_Addr.inl create mode 100644 ACE/ace/ATM_Connector.cpp create mode 100644 ACE/ace/ATM_Connector.h create mode 100644 ACE/ace/ATM_Connector.inl create mode 100644 ACE/ace/ATM_Params.cpp create mode 100644 ACE/ace/ATM_Params.h create mode 100644 ACE/ace/ATM_Params.inl create mode 100644 ACE/ace/ATM_QoS.cpp create mode 100644 ACE/ace/ATM_QoS.h create mode 100644 ACE/ace/ATM_QoS.inl create mode 100644 ACE/ace/ATM_Stream.cpp create mode 100644 ACE/ace/ATM_Stream.h create mode 100644 ACE/ace/ATM_Stream.inl create mode 100644 ACE/ace/Acceptor.cpp create mode 100644 ACE/ace/Acceptor.h create mode 100644 ACE/ace/Activation_Queue.cpp create mode 100644 ACE/ace/Activation_Queue.h create mode 100644 ACE/ace/Activation_Queue.inl create mode 100644 ACE/ace/Active_Map_Manager.cpp create mode 100644 ACE/ace/Active_Map_Manager.h create mode 100644 ACE/ace/Active_Map_Manager.inl create mode 100644 ACE/ace/Active_Map_Manager_T.cpp create mode 100644 ACE/ace/Active_Map_Manager_T.h create mode 100644 ACE/ace/Active_Map_Manager_T.inl create mode 100644 ACE/ace/Addr.cpp create mode 100644 ACE/ace/Addr.h create mode 100644 ACE/ace/Addr.inl create mode 100644 ACE/ace/Arg_Shifter.cpp create mode 100644 ACE/ace/Arg_Shifter.h create mode 100644 ACE/ace/Argv_Type_Converter.cpp create mode 100644 ACE/ace/Argv_Type_Converter.h create mode 100644 ACE/ace/Argv_Type_Converter.inl create mode 100644 ACE/ace/Array.h create mode 100644 ACE/ace/Array_Base.cpp create mode 100644 ACE/ace/Array_Base.h create mode 100644 ACE/ace/Array_Base.inl create mode 100644 ACE/ace/Array_Map.cpp create mode 100644 ACE/ace/Array_Map.h create mode 100644 ACE/ace/Array_Map.inl create mode 100644 ACE/ace/Assert.cpp create mode 100644 ACE/ace/Assert.h create mode 100644 ACE/ace/Asynch_Acceptor.cpp create mode 100644 ACE/ace/Asynch_Acceptor.h create mode 100644 ACE/ace/Asynch_Connector.cpp create mode 100644 ACE/ace/Asynch_Connector.h create mode 100644 ACE/ace/Asynch_IO.cpp create mode 100644 ACE/ace/Asynch_IO.h create mode 100644 ACE/ace/Asynch_IO_Impl.cpp create mode 100644 ACE/ace/Asynch_IO_Impl.h create mode 100644 ACE/ace/Asynch_IO_Impl.inl create mode 100644 ACE/ace/Asynch_Pseudo_Task.cpp create mode 100644 ACE/ace/Asynch_Pseudo_Task.h create mode 100644 ACE/ace/Atomic_Op.cpp create mode 100644 ACE/ace/Atomic_Op.h create mode 100644 ACE/ace/Atomic_Op.inl create mode 100644 ACE/ace/Atomic_Op_Sparc.c create mode 100644 ACE/ace/Atomic_Op_Sparc.h create mode 100644 ACE/ace/Atomic_Op_T.cpp create mode 100644 ACE/ace/Atomic_Op_T.h create mode 100644 ACE/ace/Atomic_Op_T.inl create mode 100644 ACE/ace/Auto_Event.cpp create mode 100644 ACE/ace/Auto_Event.h create mode 100644 ACE/ace/Auto_Event.inl create mode 100644 ACE/ace/Auto_Functor.cpp create mode 100644 ACE/ace/Auto_Functor.h create mode 100644 ACE/ace/Auto_Functor.inl create mode 100644 ACE/ace/Auto_IncDec_T.cpp create mode 100644 ACE/ace/Auto_IncDec_T.h create mode 100644 ACE/ace/Auto_IncDec_T.inl create mode 100644 ACE/ace/Auto_Ptr.cpp create mode 100644 ACE/ace/Auto_Ptr.h create mode 100644 ACE/ace/Auto_Ptr.inl create mode 100644 ACE/ace/Barrier.cpp create mode 100644 ACE/ace/Barrier.h create mode 100644 ACE/ace/Barrier.inl create mode 100644 ACE/ace/Base_Thread_Adapter.cpp create mode 100644 ACE/ace/Base_Thread_Adapter.h create mode 100644 ACE/ace/Base_Thread_Adapter.inl create mode 100644 ACE/ace/Based_Pointer_Repository.cpp create mode 100644 ACE/ace/Based_Pointer_Repository.h create mode 100644 ACE/ace/Based_Pointer_T.cpp create mode 100644 ACE/ace/Based_Pointer_T.h create mode 100644 ACE/ace/Based_Pointer_T.inl create mode 100644 ACE/ace/Basic_Stats.cpp create mode 100644 ACE/ace/Basic_Stats.h create mode 100644 ACE/ace/Basic_Stats.inl create mode 100644 ACE/ace/Basic_Types.cpp create mode 100644 ACE/ace/Basic_Types.h create mode 100644 ACE/ace/Basic_Types.inl create mode 100644 ACE/ace/Bound_Ptr.h create mode 100644 ACE/ace/Bound_Ptr.inl create mode 100644 ACE/ace/CDR_Base.cpp create mode 100644 ACE/ace/CDR_Base.h create mode 100644 ACE/ace/CDR_Base.inl create mode 100644 ACE/ace/CDR_Size.cpp create mode 100644 ACE/ace/CDR_Size.h create mode 100644 ACE/ace/CDR_Size.inl create mode 100644 ACE/ace/CDR_Stream.cpp create mode 100644 ACE/ace/CDR_Stream.h create mode 100644 ACE/ace/CDR_Stream.inl create mode 100644 ACE/ace/CE_Screen_Output.cpp create mode 100644 ACE/ace/CE_Screen_Output.h create mode 100644 ACE/ace/CORBA_macros.h create mode 100644 ACE/ace/Cache_Map_Manager_T.cpp create mode 100644 ACE/ace/Cache_Map_Manager_T.h create mode 100644 ACE/ace/Cache_Map_Manager_T.inl create mode 100644 ACE/ace/Cached_Connect_Strategy_T.cpp create mode 100644 ACE/ace/Cached_Connect_Strategy_T.h create mode 100644 ACE/ace/Caching_Strategies_T.cpp create mode 100644 ACE/ace/Caching_Strategies_T.h create mode 100644 ACE/ace/Caching_Strategies_T.inl create mode 100644 ACE/ace/Caching_Utility_T.cpp create mode 100644 ACE/ace/Caching_Utility_T.h create mode 100644 ACE/ace/Capabilities.cpp create mode 100644 ACE/ace/Capabilities.h create mode 100644 ACE/ace/Capabilities.inl create mode 100644 ACE/ace/Cleanup.cpp create mode 100644 ACE/ace/Cleanup.h create mode 100644 ACE/ace/Cleanup.inl create mode 100644 ACE/ace/Cleanup_Strategies_T.cpp create mode 100644 ACE/ace/Cleanup_Strategies_T.h create mode 100644 ACE/ace/Codecs.cpp create mode 100644 ACE/ace/Codecs.h create mode 100644 ACE/ace/Codeset_IBM1047.cpp create mode 100644 ACE/ace/Codeset_IBM1047.h create mode 100644 ACE/ace/Codeset_Registry.cpp create mode 100644 ACE/ace/Codeset_Registry.h create mode 100644 ACE/ace/Codeset_Registry.inl create mode 100644 ACE/ace/Codeset_Registry_db.cpp create mode 100644 ACE/ace/Codeset_Symbols.h create mode 100644 ACE/ace/Condition_Recursive_Thread_Mutex.cpp create mode 100644 ACE/ace/Condition_Recursive_Thread_Mutex.h create mode 100644 ACE/ace/Condition_T.cpp create mode 100644 ACE/ace/Condition_T.h create mode 100644 ACE/ace/Condition_T.inl create mode 100644 ACE/ace/Condition_Thread_Mutex.cpp create mode 100644 ACE/ace/Condition_Thread_Mutex.h create mode 100644 ACE/ace/Condition_Thread_Mutex.inl create mode 100644 ACE/ace/Configuration.cpp create mode 100644 ACE/ace/Configuration.h create mode 100644 ACE/ace/Configuration.inl create mode 100644 ACE/ace/Configuration_Import_Export.cpp create mode 100644 ACE/ace/Configuration_Import_Export.h create mode 100644 ACE/ace/Connection_Recycling_Strategy.cpp create mode 100644 ACE/ace/Connection_Recycling_Strategy.h create mode 100644 ACE/ace/Connector.cpp create mode 100644 ACE/ace/Connector.h create mode 100644 ACE/ace/Containers.cpp create mode 100644 ACE/ace/Containers.h create mode 100644 ACE/ace/Containers.inl create mode 100644 ACE/ace/Containers_T.cpp create mode 100644 ACE/ace/Containers_T.h create mode 100644 ACE/ace/Containers_T.inl create mode 100644 ACE/ace/Copy_Disabled.cpp create mode 100644 ACE/ace/Copy_Disabled.h create mode 100644 ACE/ace/Countdown_Time.cpp create mode 100644 ACE/ace/Countdown_Time.h create mode 100644 ACE/ace/DEV.cpp create mode 100644 ACE/ace/DEV.h create mode 100644 ACE/ace/DEV.inl create mode 100644 ACE/ace/DEV_Addr.cpp create mode 100644 ACE/ace/DEV_Addr.h create mode 100644 ACE/ace/DEV_Addr.inl create mode 100644 ACE/ace/DEV_Connector.cpp create mode 100644 ACE/ace/DEV_Connector.h create mode 100644 ACE/ace/DEV_Connector.inl create mode 100644 ACE/ace/DEV_IO.cpp create mode 100644 ACE/ace/DEV_IO.h create mode 100644 ACE/ace/DEV_IO.inl create mode 100644 ACE/ace/DLL.cpp create mode 100644 ACE/ace/DLL.h create mode 100644 ACE/ace/DLL_Manager.cpp create mode 100644 ACE/ace/DLL_Manager.h create mode 100644 ACE/ace/Date_Time.cpp create mode 100644 ACE/ace/Date_Time.h create mode 100644 ACE/ace/Date_Time.inl create mode 100644 ACE/ace/Default_Constants.h create mode 100644 ACE/ace/Dev_Poll_Reactor.cpp create mode 100644 ACE/ace/Dev_Poll_Reactor.h create mode 100644 ACE/ace/Dev_Poll_Reactor.inl create mode 100644 ACE/ace/Dirent.cpp create mode 100644 ACE/ace/Dirent.h create mode 100644 ACE/ace/Dirent.inl create mode 100644 ACE/ace/Dirent_Selector.cpp create mode 100644 ACE/ace/Dirent_Selector.h create mode 100644 ACE/ace/Dirent_Selector.inl create mode 100644 ACE/ace/Dump.cpp create mode 100644 ACE/ace/Dump.h create mode 100644 ACE/ace/Dump_T.cpp create mode 100644 ACE/ace/Dump_T.h create mode 100644 ACE/ace/Dynamic.cpp create mode 100644 ACE/ace/Dynamic.h create mode 100644 ACE/ace/Dynamic.inl create mode 100644 ACE/ace/Dynamic_Message_Strategy.cpp create mode 100644 ACE/ace/Dynamic_Message_Strategy.h create mode 100644 ACE/ace/Dynamic_Message_Strategy.inl create mode 100644 ACE/ace/Dynamic_Service.cpp create mode 100644 ACE/ace/Dynamic_Service.h create mode 100644 ACE/ace/Dynamic_Service.inl create mode 100644 ACE/ace/Dynamic_Service_Base.cpp create mode 100644 ACE/ace/Dynamic_Service_Base.h create mode 100644 ACE/ace/Dynamic_Service_Dependency.cpp create mode 100644 ACE/ace/Dynamic_Service_Dependency.h create mode 100644 ACE/ace/Encoding_Converter.cpp create mode 100644 ACE/ace/Encoding_Converter.h create mode 100644 ACE/ace/Encoding_Converter_Factory.cpp create mode 100644 ACE/ace/Encoding_Converter_Factory.h create mode 100644 ACE/ace/Env_Value_T.cpp create mode 100644 ACE/ace/Env_Value_T.h create mode 100644 ACE/ace/Env_Value_T.inl create mode 100644 ACE/ace/Event.cpp create mode 100644 ACE/ace/Event.h create mode 100644 ACE/ace/Event.inl create mode 100644 ACE/ace/Event_Handler.cpp create mode 100644 ACE/ace/Event_Handler.h create mode 100644 ACE/ace/Event_Handler.inl create mode 100644 ACE/ace/Event_Handler_T.cpp create mode 100644 ACE/ace/Event_Handler_T.h create mode 100644 ACE/ace/Event_Handler_T.inl create mode 100644 ACE/ace/Exception_Macros.h create mode 100644 ACE/ace/FIFO.cpp create mode 100644 ACE/ace/FIFO.h create mode 100644 ACE/ace/FIFO.inl create mode 100644 ACE/ace/FIFO_Recv.cpp create mode 100644 ACE/ace/FIFO_Recv.h create mode 100644 ACE/ace/FIFO_Recv.inl create mode 100644 ACE/ace/FIFO_Recv_Msg.cpp create mode 100644 ACE/ace/FIFO_Recv_Msg.h create mode 100644 ACE/ace/FIFO_Recv_Msg.inl create mode 100644 ACE/ace/FIFO_Send.cpp create mode 100644 ACE/ace/FIFO_Send.h create mode 100644 ACE/ace/FIFO_Send.inl create mode 100644 ACE/ace/FIFO_Send_Msg.cpp create mode 100644 ACE/ace/FIFO_Send_Msg.h create mode 100644 ACE/ace/FIFO_Send_Msg.inl create mode 100644 ACE/ace/FILE.cpp create mode 100644 ACE/ace/FILE.h create mode 100644 ACE/ace/FILE.inl create mode 100644 ACE/ace/FILE_Addr.cpp create mode 100644 ACE/ace/FILE_Addr.h create mode 100644 ACE/ace/FILE_Addr.inl create mode 100644 ACE/ace/FILE_Connector.cpp create mode 100644 ACE/ace/FILE_Connector.h create mode 100644 ACE/ace/FILE_Connector.inl create mode 100644 ACE/ace/FILE_IO.cpp create mode 100644 ACE/ace/FILE_IO.h create mode 100644 ACE/ace/FILE_IO.inl create mode 100644 ACE/ace/File_Lock.cpp create mode 100644 ACE/ace/File_Lock.h create mode 100644 ACE/ace/File_Lock.inl create mode 100644 ACE/ace/Filecache.cpp create mode 100644 ACE/ace/Filecache.h create mode 100644 ACE/ace/FlReactor/ACE_FlReactor.pc.in create mode 100644 ACE/ace/FlReactor/ACE_FlReactor_export.h create mode 100644 ACE/ace/FlReactor/FlReactor.cpp create mode 100644 ACE/ace/FlReactor/FlReactor.h create mode 100644 ACE/ace/Flag_Manip.cpp create mode 100644 ACE/ace/Flag_Manip.h create mode 100644 ACE/ace/Flag_Manip.inl create mode 100644 ACE/ace/FoxReactor/ACE_FoxReactor.pc.in create mode 100644 ACE/ace/FoxReactor/ACE_FoxReactor_export.h create mode 100644 ACE/ace/FoxReactor/FoxReactor.cpp create mode 100644 ACE/ace/FoxReactor/FoxReactor.h create mode 100644 ACE/ace/Framework_Component.cpp create mode 100644 ACE/ace/Framework_Component.h create mode 100644 ACE/ace/Framework_Component.inl create mode 100644 ACE/ace/Framework_Component_T.cpp create mode 100644 ACE/ace/Framework_Component_T.h create mode 100644 ACE/ace/Free_List.cpp create mode 100644 ACE/ace/Free_List.h create mode 100644 ACE/ace/Functor.cpp create mode 100644 ACE/ace/Functor.h create mode 100644 ACE/ace/Functor.inl create mode 100644 ACE/ace/Functor_String.cpp create mode 100644 ACE/ace/Functor_String.h create mode 100644 ACE/ace/Functor_String.inl create mode 100644 ACE/ace/Functor_T.cpp create mode 100644 ACE/ace/Functor_T.h create mode 100644 ACE/ace/Functor_T.inl create mode 100644 ACE/ace/Future.cpp create mode 100644 ACE/ace/Future.h create mode 100644 ACE/ace/Future_Set.cpp create mode 100644 ACE/ace/Future_Set.h create mode 100644 ACE/ace/Get_Opt.cpp create mode 100644 ACE/ace/Get_Opt.h create mode 100644 ACE/ace/Get_Opt.inl create mode 100644 ACE/ace/Global_Macros.h create mode 100644 ACE/ace/Guard_T.cpp create mode 100644 ACE/ace/Guard_T.h create mode 100644 ACE/ace/Guard_T.inl create mode 100644 ACE/ace/Handle_Gobbler.h create mode 100644 ACE/ace/Handle_Gobbler.inl create mode 100644 ACE/ace/Handle_Ops.cpp create mode 100644 ACE/ace/Handle_Ops.h create mode 100644 ACE/ace/Handle_Set.cpp create mode 100644 ACE/ace/Handle_Set.h create mode 100644 ACE/ace/Handle_Set.inl create mode 100644 ACE/ace/Hash_Cache_Map_Manager_T.cpp create mode 100644 ACE/ace/Hash_Cache_Map_Manager_T.h create mode 100644 ACE/ace/Hash_Cache_Map_Manager_T.inl create mode 100644 ACE/ace/Hash_Map_Manager.h create mode 100644 ACE/ace/Hash_Map_Manager_T.cpp create mode 100644 ACE/ace/Hash_Map_Manager_T.h create mode 100644 ACE/ace/Hash_Map_Manager_T.inl create mode 100644 ACE/ace/Hash_Map_With_Allocator_T.cpp create mode 100644 ACE/ace/Hash_Map_With_Allocator_T.h create mode 100644 ACE/ace/Hash_Map_With_Allocator_T.inl create mode 100644 ACE/ace/Hash_Multi_Map_Manager_T.cpp create mode 100644 ACE/ace/Hash_Multi_Map_Manager_T.h create mode 100644 ACE/ace/Hash_Multi_Map_Manager_T.inl create mode 100644 ACE/ace/Hashable.cpp create mode 100644 ACE/ace/Hashable.h create mode 100644 ACE/ace/Hashable.inl create mode 100644 ACE/ace/High_Res_Timer.cpp create mode 100644 ACE/ace/High_Res_Timer.h create mode 100644 ACE/ace/High_Res_Timer.inl create mode 100644 ACE/ace/ICMP_Socket.cpp create mode 100644 ACE/ace/ICMP_Socket.h create mode 100644 ACE/ace/INET_Addr.cpp create mode 100644 ACE/ace/INET_Addr.h create mode 100644 ACE/ace/INET_Addr.inl create mode 100644 ACE/ace/IOStream.cpp create mode 100644 ACE/ace/IOStream.h create mode 100644 ACE/ace/IOStream_T.cpp create mode 100644 ACE/ace/IOStream_T.h create mode 100644 ACE/ace/IOStream_T.inl create mode 100644 ACE/ace/IO_Cntl_Msg.cpp create mode 100644 ACE/ace/IO_Cntl_Msg.h create mode 100644 ACE/ace/IO_Cntl_Msg.inl create mode 100644 ACE/ace/IO_SAP.cpp create mode 100644 ACE/ace/IO_SAP.h create mode 100644 ACE/ace/IO_SAP.inl create mode 100644 ACE/ace/IPC_SAP.cpp create mode 100644 ACE/ace/IPC_SAP.h create mode 100644 ACE/ace/IPC_SAP.inl create mode 100644 ACE/ace/If_Then_Else.h create mode 100644 ACE/ace/Init_ACE.cpp create mode 100644 ACE/ace/Init_ACE.h create mode 100644 ACE/ace/Intrusive_List.cpp create mode 100644 ACE/ace/Intrusive_List.h create mode 100644 ACE/ace/Intrusive_List.inl create mode 100644 ACE/ace/Intrusive_List_Node.cpp create mode 100644 ACE/ace/Intrusive_List_Node.h create mode 100644 ACE/ace/Intrusive_List_Node.inl create mode 100644 ACE/ace/LOCK_SOCK_Acceptor.cpp create mode 100644 ACE/ace/LOCK_SOCK_Acceptor.h create mode 100644 ACE/ace/LSOCK.cpp create mode 100644 ACE/ace/LSOCK.h create mode 100644 ACE/ace/LSOCK.inl create mode 100644 ACE/ace/LSOCK_Acceptor.cpp create mode 100644 ACE/ace/LSOCK_Acceptor.h create mode 100644 ACE/ace/LSOCK_CODgram.cpp create mode 100644 ACE/ace/LSOCK_CODgram.h create mode 100644 ACE/ace/LSOCK_CODgram.inl create mode 100644 ACE/ace/LSOCK_Connector.cpp create mode 100644 ACE/ace/LSOCK_Connector.h create mode 100644 ACE/ace/LSOCK_Connector.inl create mode 100644 ACE/ace/LSOCK_Dgram.cpp create mode 100644 ACE/ace/LSOCK_Dgram.h create mode 100644 ACE/ace/LSOCK_Dgram.inl create mode 100644 ACE/ace/LSOCK_Stream.cpp create mode 100644 ACE/ace/LSOCK_Stream.h create mode 100644 ACE/ace/LSOCK_Stream.inl create mode 100644 ACE/ace/Lib_Find.cpp create mode 100644 ACE/ace/Lib_Find.h create mode 100644 ACE/ace/Local_Memory_Pool.cpp create mode 100644 ACE/ace/Local_Memory_Pool.h create mode 100644 ACE/ace/Local_Name_Space.cpp create mode 100644 ACE/ace/Local_Name_Space.h create mode 100644 ACE/ace/Local_Name_Space_T.cpp create mode 100644 ACE/ace/Local_Name_Space_T.h create mode 100644 ACE/ace/Local_Tokens.cpp create mode 100644 ACE/ace/Local_Tokens.h create mode 100644 ACE/ace/Local_Tokens.inl create mode 100644 ACE/ace/Lock.cpp create mode 100644 ACE/ace/Lock.h create mode 100644 ACE/ace/Lock.inl create mode 100644 ACE/ace/Lock_Adapter_T.cpp create mode 100644 ACE/ace/Lock_Adapter_T.h create mode 100644 ACE/ace/Lock_Adapter_T.inl create mode 100644 ACE/ace/Log_Msg.cpp create mode 100644 ACE/ace/Log_Msg.h create mode 100644 ACE/ace/Log_Msg.inl create mode 100644 ACE/ace/Log_Msg_Backend.cpp create mode 100644 ACE/ace/Log_Msg_Backend.h create mode 100644 ACE/ace/Log_Msg_Callback.cpp create mode 100644 ACE/ace/Log_Msg_Callback.h create mode 100644 ACE/ace/Log_Msg_IPC.cpp create mode 100644 ACE/ace/Log_Msg_IPC.h create mode 100644 ACE/ace/Log_Msg_NT_Event_Log.cpp create mode 100644 ACE/ace/Log_Msg_NT_Event_Log.h create mode 100644 ACE/ace/Log_Msg_UNIX_Syslog.cpp create mode 100644 ACE/ace/Log_Msg_UNIX_Syslog.h create mode 100644 ACE/ace/Log_Priority.h create mode 100644 ACE/ace/Log_Record.cpp create mode 100644 ACE/ace/Log_Record.h create mode 100644 ACE/ace/Log_Record.inl create mode 100644 ACE/ace/Logging_Strategy.cpp create mode 100644 ACE/ace/Logging_Strategy.h create mode 100644 ACE/ace/MEM_Acceptor.cpp create mode 100644 ACE/ace/MEM_Acceptor.h create mode 100644 ACE/ace/MEM_Acceptor.inl create mode 100644 ACE/ace/MEM_Addr.cpp create mode 100644 ACE/ace/MEM_Addr.h create mode 100644 ACE/ace/MEM_Addr.inl create mode 100644 ACE/ace/MEM_Connector.cpp create mode 100644 ACE/ace/MEM_Connector.h create mode 100644 ACE/ace/MEM_Connector.inl create mode 100644 ACE/ace/MEM_IO.cpp create mode 100644 ACE/ace/MEM_IO.h create mode 100644 ACE/ace/MEM_IO.inl create mode 100644 ACE/ace/MEM_SAP.cpp create mode 100644 ACE/ace/MEM_SAP.h create mode 100644 ACE/ace/MEM_SAP.inl create mode 100644 ACE/ace/MEM_Stream.cpp create mode 100644 ACE/ace/MEM_Stream.h create mode 100644 ACE/ace/MEM_Stream.inl create mode 100644 ACE/ace/MMAP_Memory_Pool.cpp create mode 100644 ACE/ace/MMAP_Memory_Pool.h create mode 100644 ACE/ace/MMAP_Memory_Pool.inl create mode 100644 ACE/ace/Makefile.am create mode 100644 ACE/ace/Malloc.cpp create mode 100644 ACE/ace/Malloc.h create mode 100644 ACE/ace/Malloc.inl create mode 100644 ACE/ace/Malloc_Allocator.cpp create mode 100644 ACE/ace/Malloc_Allocator.h create mode 100644 ACE/ace/Malloc_Allocator.inl create mode 100644 ACE/ace/Malloc_Base.h create mode 100644 ACE/ace/Malloc_T.cpp create mode 100644 ACE/ace/Malloc_T.h create mode 100644 ACE/ace/Malloc_T.inl create mode 100644 ACE/ace/Managed_Object.cpp create mode 100644 ACE/ace/Managed_Object.h create mode 100644 ACE/ace/Managed_Object.inl create mode 100644 ACE/ace/Manual_Event.cpp create mode 100644 ACE/ace/Manual_Event.h create mode 100644 ACE/ace/Manual_Event.inl create mode 100644 ACE/ace/Map.h create mode 100644 ACE/ace/Map_Manager.cpp create mode 100644 ACE/ace/Map_Manager.h create mode 100644 ACE/ace/Map_Manager.inl create mode 100644 ACE/ace/Map_T.cpp create mode 100644 ACE/ace/Map_T.h create mode 100644 ACE/ace/Map_T.inl create mode 100644 ACE/ace/Mem_Map.cpp create mode 100644 ACE/ace/Mem_Map.h create mode 100644 ACE/ace/Mem_Map.inl create mode 100644 ACE/ace/Memory_Pool.h create mode 100644 ACE/ace/Message_Block.cpp create mode 100644 ACE/ace/Message_Block.h create mode 100644 ACE/ace/Message_Block.inl create mode 100644 ACE/ace/Message_Block_T.cpp create mode 100644 ACE/ace/Message_Block_T.h create mode 100644 ACE/ace/Message_Block_T.inl create mode 100644 ACE/ace/Message_Queue.cpp create mode 100644 ACE/ace/Message_Queue.h create mode 100644 ACE/ace/Message_Queue.inl create mode 100644 ACE/ace/Message_Queue_NT.cpp create mode 100644 ACE/ace/Message_Queue_NT.h create mode 100644 ACE/ace/Message_Queue_NT.inl create mode 100644 ACE/ace/Message_Queue_T.cpp create mode 100644 ACE/ace/Message_Queue_T.h create mode 100644 ACE/ace/Message_Queue_Vx.cpp create mode 100644 ACE/ace/Message_Queue_Vx.h create mode 100644 ACE/ace/Message_Queue_Vx.inl create mode 100644 ACE/ace/Method_Object.h create mode 100644 ACE/ace/Method_Request.cpp create mode 100644 ACE/ace/Method_Request.h create mode 100644 ACE/ace/Metrics_Cache.h create mode 100644 ACE/ace/Metrics_Cache_T.cpp create mode 100644 ACE/ace/Metrics_Cache_T.h create mode 100644 ACE/ace/Metrics_Cache_T.inl create mode 100644 ACE/ace/Min_Max.h create mode 100644 ACE/ace/Module.cpp create mode 100644 ACE/ace/Module.h create mode 100644 ACE/ace/Module.inl create mode 100644 ACE/ace/Msg_WFMO_Reactor.cpp create mode 100644 ACE/ace/Msg_WFMO_Reactor.h create mode 100644 ACE/ace/Msg_WFMO_Reactor.inl create mode 100644 ACE/ace/Multihomed_INET_Addr.cpp create mode 100644 ACE/ace/Multihomed_INET_Addr.h create mode 100644 ACE/ace/Multihomed_INET_Addr.inl create mode 100644 ACE/ace/Mutex.cpp create mode 100644 ACE/ace/Mutex.h create mode 100644 ACE/ace/Mutex.inl create mode 100644 ACE/ace/NT_Service.cpp create mode 100644 ACE/ace/NT_Service.h create mode 100644 ACE/ace/NT_Service.inl create mode 100644 ACE/ace/Name_Proxy.cpp create mode 100644 ACE/ace/Name_Proxy.h create mode 100644 ACE/ace/Name_Request_Reply.cpp create mode 100644 ACE/ace/Name_Request_Reply.h create mode 100644 ACE/ace/Name_Space.cpp create mode 100644 ACE/ace/Name_Space.h create mode 100644 ACE/ace/Naming_Context.cpp create mode 100644 ACE/ace/Naming_Context.h create mode 100644 ACE/ace/Naming_Context.inl create mode 100644 ACE/ace/Netlink_Addr.cpp create mode 100644 ACE/ace/Netlink_Addr.h create mode 100644 ACE/ace/Netlink_Addr.inl create mode 100644 ACE/ace/Node.cpp create mode 100644 ACE/ace/Node.h create mode 100644 ACE/ace/Notification_Queue.cpp create mode 100644 ACE/ace/Notification_Queue.h create mode 100644 ACE/ace/Notification_Queue.inl create mode 100644 ACE/ace/Notification_Strategy.cpp create mode 100644 ACE/ace/Notification_Strategy.h create mode 100644 ACE/ace/Notification_Strategy.inl create mode 100644 ACE/ace/Null_Barrier.h create mode 100644 ACE/ace/Null_Condition.h create mode 100644 ACE/ace/Null_Mutex.h create mode 100644 ACE/ace/Null_Semaphore.h create mode 100644 ACE/ace/Numeric_Limits.h create mode 100644 ACE/ace/OS.cpp create mode 100644 ACE/ace/OS.h create mode 100644 ACE/ace/OS.inl create mode 100644 ACE/ace/OS_Dirent.h create mode 100644 ACE/ace/OS_Errno.cpp create mode 100644 ACE/ace/OS_Errno.h create mode 100644 ACE/ace/OS_Errno.inl create mode 100644 ACE/ace/OS_Log_Msg_Attributes.cpp create mode 100644 ACE/ace/OS_Log_Msg_Attributes.h create mode 100644 ACE/ace/OS_Log_Msg_Attributes.inl create mode 100644 ACE/ace/OS_Memory.h create mode 100644 ACE/ace/OS_NS_Thread.cpp create mode 100644 ACE/ace/OS_NS_Thread.h create mode 100644 ACE/ace/OS_NS_Thread.inl create mode 100644 ACE/ace/OS_NS_arpa_inet.cpp create mode 100644 ACE/ace/OS_NS_arpa_inet.h create mode 100644 ACE/ace/OS_NS_arpa_inet.inl create mode 100644 ACE/ace/OS_NS_ctype.cpp create mode 100644 ACE/ace/OS_NS_ctype.h create mode 100644 ACE/ace/OS_NS_ctype.inl create mode 100644 ACE/ace/OS_NS_dirent.cpp create mode 100644 ACE/ace/OS_NS_dirent.h create mode 100644 ACE/ace/OS_NS_dirent.inl create mode 100644 ACE/ace/OS_NS_dlfcn.cpp create mode 100644 ACE/ace/OS_NS_dlfcn.h create mode 100644 ACE/ace/OS_NS_dlfcn.inl create mode 100644 ACE/ace/OS_NS_errno.cpp create mode 100644 ACE/ace/OS_NS_errno.h create mode 100644 ACE/ace/OS_NS_errno.inl create mode 100644 ACE/ace/OS_NS_fcntl.cpp create mode 100644 ACE/ace/OS_NS_fcntl.h create mode 100644 ACE/ace/OS_NS_fcntl.inl create mode 100644 ACE/ace/OS_NS_macros.h create mode 100644 ACE/ace/OS_NS_math.cpp create mode 100644 ACE/ace/OS_NS_math.h create mode 100644 ACE/ace/OS_NS_math.inl create mode 100644 ACE/ace/OS_NS_netdb.cpp create mode 100644 ACE/ace/OS_NS_netdb.h create mode 100644 ACE/ace/OS_NS_netdb.inl create mode 100644 ACE/ace/OS_NS_poll.cpp create mode 100644 ACE/ace/OS_NS_poll.h create mode 100644 ACE/ace/OS_NS_poll.inl create mode 100644 ACE/ace/OS_NS_pwd.cpp create mode 100644 ACE/ace/OS_NS_pwd.h create mode 100644 ACE/ace/OS_NS_pwd.inl create mode 100644 ACE/ace/OS_NS_regex.cpp create mode 100644 ACE/ace/OS_NS_regex.h create mode 100644 ACE/ace/OS_NS_regex.inl create mode 100644 ACE/ace/OS_NS_signal.cpp create mode 100644 ACE/ace/OS_NS_signal.h create mode 100644 ACE/ace/OS_NS_signal.inl create mode 100644 ACE/ace/OS_NS_stdio.cpp create mode 100644 ACE/ace/OS_NS_stdio.h create mode 100644 ACE/ace/OS_NS_stdio.inl create mode 100644 ACE/ace/OS_NS_stdlib.cpp create mode 100644 ACE/ace/OS_NS_stdlib.h create mode 100644 ACE/ace/OS_NS_stdlib.inl create mode 100644 ACE/ace/OS_NS_string.cpp create mode 100644 ACE/ace/OS_NS_string.h create mode 100644 ACE/ace/OS_NS_string.inl create mode 100644 ACE/ace/OS_NS_strings.cpp create mode 100644 ACE/ace/OS_NS_strings.h create mode 100644 ACE/ace/OS_NS_strings.inl create mode 100644 ACE/ace/OS_NS_stropts.cpp create mode 100644 ACE/ace/OS_NS_stropts.h create mode 100644 ACE/ace/OS_NS_stropts.inl create mode 100644 ACE/ace/OS_NS_sys_mman.cpp create mode 100644 ACE/ace/OS_NS_sys_mman.h create mode 100644 ACE/ace/OS_NS_sys_mman.inl create mode 100644 ACE/ace/OS_NS_sys_msg.cpp create mode 100644 ACE/ace/OS_NS_sys_msg.h create mode 100644 ACE/ace/OS_NS_sys_msg.inl create mode 100644 ACE/ace/OS_NS_sys_resource.cpp create mode 100644 ACE/ace/OS_NS_sys_resource.h create mode 100644 ACE/ace/OS_NS_sys_resource.inl create mode 100644 ACE/ace/OS_NS_sys_select.cpp create mode 100644 ACE/ace/OS_NS_sys_select.h create mode 100644 ACE/ace/OS_NS_sys_select.inl create mode 100644 ACE/ace/OS_NS_sys_sendfile.cpp create mode 100644 ACE/ace/OS_NS_sys_sendfile.h create mode 100644 ACE/ace/OS_NS_sys_sendfile.inl create mode 100644 ACE/ace/OS_NS_sys_shm.cpp create mode 100644 ACE/ace/OS_NS_sys_shm.h create mode 100644 ACE/ace/OS_NS_sys_shm.inl create mode 100644 ACE/ace/OS_NS_sys_socket.cpp create mode 100644 ACE/ace/OS_NS_sys_socket.h create mode 100644 ACE/ace/OS_NS_sys_socket.inl create mode 100644 ACE/ace/OS_NS_sys_stat.cpp create mode 100644 ACE/ace/OS_NS_sys_stat.h create mode 100644 ACE/ace/OS_NS_sys_stat.inl create mode 100644 ACE/ace/OS_NS_sys_time.cpp create mode 100644 ACE/ace/OS_NS_sys_time.h create mode 100644 ACE/ace/OS_NS_sys_time.inl create mode 100644 ACE/ace/OS_NS_sys_uio.cpp create mode 100644 ACE/ace/OS_NS_sys_uio.h create mode 100644 ACE/ace/OS_NS_sys_uio.inl create mode 100644 ACE/ace/OS_NS_sys_utsname.cpp create mode 100644 ACE/ace/OS_NS_sys_utsname.h create mode 100644 ACE/ace/OS_NS_sys_wait.cpp create mode 100644 ACE/ace/OS_NS_sys_wait.h create mode 100644 ACE/ace/OS_NS_sys_wait.inl create mode 100644 ACE/ace/OS_NS_time.cpp create mode 100644 ACE/ace/OS_NS_time.h create mode 100644 ACE/ace/OS_NS_time.inl create mode 100644 ACE/ace/OS_NS_unistd.cpp create mode 100644 ACE/ace/OS_NS_unistd.h create mode 100644 ACE/ace/OS_NS_unistd.inl create mode 100644 ACE/ace/OS_NS_wchar.cpp create mode 100644 ACE/ace/OS_NS_wchar.h create mode 100644 ACE/ace/OS_NS_wchar.inl create mode 100644 ACE/ace/OS_QoS.cpp create mode 100644 ACE/ace/OS_QoS.h create mode 100644 ACE/ace/OS_String.h create mode 100644 ACE/ace/OS_TLI.cpp create mode 100644 ACE/ace/OS_TLI.h create mode 100644 ACE/ace/OS_TLI.inl create mode 100644 ACE/ace/OS_Thread_Adapter.cpp create mode 100644 ACE/ace/OS_Thread_Adapter.h create mode 100644 ACE/ace/OS_main.cpp create mode 100644 ACE/ace/OS_main.h create mode 100644 ACE/ace/Obchunk.cpp create mode 100644 ACE/ace/Obchunk.h create mode 100644 ACE/ace/Obchunk.inl create mode 100644 ACE/ace/Object_Manager.cpp create mode 100644 ACE/ace/Object_Manager.h create mode 100644 ACE/ace/Object_Manager.inl create mode 100644 ACE/ace/Object_Manager_Base.cpp create mode 100644 ACE/ace/Object_Manager_Base.h create mode 100644 ACE/ace/Obstack.h create mode 100644 ACE/ace/Obstack_T.cpp create mode 100644 ACE/ace/Obstack_T.h create mode 100644 ACE/ace/Obstack_T.inl create mode 100644 ACE/ace/PI_Malloc.cpp create mode 100644 ACE/ace/PI_Malloc.h create mode 100644 ACE/ace/PI_Malloc.inl create mode 100644 ACE/ace/POSIX_Asynch_IO.cpp create mode 100644 ACE/ace/POSIX_Asynch_IO.h create mode 100644 ACE/ace/POSIX_CB_Proactor.cpp create mode 100644 ACE/ace/POSIX_CB_Proactor.h create mode 100644 ACE/ace/POSIX_Proactor.cpp create mode 100644 ACE/ace/POSIX_Proactor.h create mode 100644 ACE/ace/POSIX_Proactor.inl create mode 100644 ACE/ace/Pagefile_Memory_Pool.cpp create mode 100644 ACE/ace/Pagefile_Memory_Pool.h create mode 100644 ACE/ace/Pagefile_Memory_Pool.inl create mode 100644 ACE/ace/Pair.h create mode 100644 ACE/ace/Pair_T.cpp create mode 100644 ACE/ace/Pair_T.h create mode 100644 ACE/ace/Pair_T.inl create mode 100644 ACE/ace/Parse_Node.cpp create mode 100644 ACE/ace/Parse_Node.h create mode 100644 ACE/ace/Ping_Socket.cpp create mode 100644 ACE/ace/Ping_Socket.h create mode 100644 ACE/ace/Ping_Socket.inl create mode 100644 ACE/ace/Pipe.cpp create mode 100644 ACE/ace/Pipe.h create mode 100644 ACE/ace/Pipe.inl create mode 100644 ACE/ace/Priority_Reactor.cpp create mode 100644 ACE/ace/Priority_Reactor.h create mode 100644 ACE/ace/Proactor.cpp create mode 100644 ACE/ace/Proactor.h create mode 100644 ACE/ace/Proactor.inl create mode 100644 ACE/ace/Proactor_Impl.cpp create mode 100644 ACE/ace/Proactor_Impl.h create mode 100644 ACE/ace/Process.cpp create mode 100644 ACE/ace/Process.h create mode 100644 ACE/ace/Process.inl create mode 100644 ACE/ace/Process_Manager.cpp create mode 100644 ACE/ace/Process_Manager.h create mode 100644 ACE/ace/Process_Manager.inl create mode 100644 ACE/ace/Process_Mutex.cpp create mode 100644 ACE/ace/Process_Mutex.h create mode 100644 ACE/ace/Process_Mutex.inl create mode 100644 ACE/ace/Process_Semaphore.cpp create mode 100644 ACE/ace/Process_Semaphore.h create mode 100644 ACE/ace/Process_Semaphore.inl create mode 100644 ACE/ace/Profile_Timer.cpp create mode 100644 ACE/ace/Profile_Timer.h create mode 100644 ACE/ace/Profile_Timer.inl create mode 100644 ACE/ace/QoS/ACE_QoS.pc.in create mode 100644 ACE/ace/QoS/ACE_QoS_Export.h create mode 100644 ACE/ace/QoS/Makefile.am create mode 100644 ACE/ace/QoS/QoS_Decorator.cpp create mode 100644 ACE/ace/QoS/QoS_Decorator.h create mode 100644 ACE/ace/QoS/QoS_Manager.cpp create mode 100644 ACE/ace/QoS/QoS_Manager.h create mode 100644 ACE/ace/QoS/QoS_Session.h create mode 100644 ACE/ace/QoS/QoS_Session_Factory.cpp create mode 100644 ACE/ace/QoS/QoS_Session_Factory.h create mode 100644 ACE/ace/QoS/QoS_Session_Impl.cpp create mode 100644 ACE/ace/QoS/QoS_Session_Impl.h create mode 100644 ACE/ace/QoS/QoS_Session_Impl.inl create mode 100644 ACE/ace/QoS/README create mode 100644 ACE/ace/QoS/SOCK_Dgram_Mcast_QoS.cpp create mode 100644 ACE/ace/QoS/SOCK_Dgram_Mcast_QoS.h create mode 100644 ACE/ace/QoS/SOCK_Dgram_Mcast_QoS.inl create mode 100644 ACE/ace/QoS/qos.mpc create mode 100644 ACE/ace/QtReactor/ACE_QtReactor.pc.in create mode 100644 ACE/ace/QtReactor/ACE_QtReactor_export.h create mode 100644 ACE/ace/QtReactor/QtReactor.cpp create mode 100644 ACE/ace/QtReactor/QtReactor.h create mode 100644 ACE/ace/RB_Tree.cpp create mode 100644 ACE/ace/RB_Tree.h create mode 100644 ACE/ace/RB_Tree.inl create mode 100644 ACE/ace/README create mode 100644 ACE/ace/RW_Mutex.cpp create mode 100644 ACE/ace/RW_Mutex.h create mode 100644 ACE/ace/RW_Mutex.inl create mode 100644 ACE/ace/RW_Process_Mutex.cpp create mode 100644 ACE/ace/RW_Process_Mutex.h create mode 100644 ACE/ace/RW_Process_Mutex.inl create mode 100644 ACE/ace/RW_Thread_Mutex.cpp create mode 100644 ACE/ace/RW_Thread_Mutex.h create mode 100644 ACE/ace/RW_Thread_Mutex.inl create mode 100644 ACE/ace/Reactor.cpp create mode 100644 ACE/ace/Reactor.h create mode 100644 ACE/ace/Reactor.inl create mode 100644 ACE/ace/Reactor_Impl.cpp create mode 100644 ACE/ace/Reactor_Impl.h create mode 100644 ACE/ace/Reactor_Notification_Strategy.cpp create mode 100644 ACE/ace/Reactor_Notification_Strategy.h create mode 100644 ACE/ace/Reactor_Notification_Strategy.inl create mode 100644 ACE/ace/Reactor_Timer_Interface.cpp create mode 100644 ACE/ace/Reactor_Timer_Interface.h create mode 100644 ACE/ace/Reactor_Token_T.cpp create mode 100644 ACE/ace/Reactor_Token_T.h create mode 100644 ACE/ace/Read_Buffer.cpp create mode 100644 ACE/ace/Read_Buffer.h create mode 100644 ACE/ace/Read_Buffer.inl create mode 100644 ACE/ace/Recursive_Thread_Mutex.cpp create mode 100644 ACE/ace/Recursive_Thread_Mutex.h create mode 100644 ACE/ace/Recursive_Thread_Mutex.inl create mode 100644 ACE/ace/Recyclable.cpp create mode 100644 ACE/ace/Recyclable.h create mode 100644 ACE/ace/Recyclable.inl create mode 100644 ACE/ace/Refcountable.cpp create mode 100644 ACE/ace/Refcountable.h create mode 100644 ACE/ace/Refcountable.inl create mode 100644 ACE/ace/Refcounted_Auto_Ptr.cpp create mode 100644 ACE/ace/Refcounted_Auto_Ptr.h create mode 100644 ACE/ace/Refcounted_Auto_Ptr.inl create mode 100644 ACE/ace/Registry.cpp create mode 100644 ACE/ace/Registry.h create mode 100644 ACE/ace/Registry_Name_Space.cpp create mode 100644 ACE/ace/Registry_Name_Space.h create mode 100644 ACE/ace/Remote_Name_Space.cpp create mode 100644 ACE/ace/Remote_Name_Space.h create mode 100644 ACE/ace/Remote_Tokens.cpp create mode 100644 ACE/ace/Remote_Tokens.h create mode 100644 ACE/ace/Remote_Tokens.inl create mode 100644 ACE/ace/Reverse_Lock_T.cpp create mode 100644 ACE/ace/Reverse_Lock_T.h create mode 100644 ACE/ace/Reverse_Lock_T.inl create mode 100644 ACE/ace/Rtems_init.c create mode 100644 ACE/ace/SOCK.cpp create mode 100644 ACE/ace/SOCK.h create mode 100644 ACE/ace/SOCK.inl create mode 100644 ACE/ace/SOCK_Acceptor.cpp create mode 100644 ACE/ace/SOCK_Acceptor.h create mode 100644 ACE/ace/SOCK_Acceptor.inl create mode 100644 ACE/ace/SOCK_CODgram.cpp create mode 100644 ACE/ace/SOCK_CODgram.h create mode 100644 ACE/ace/SOCK_CODgram.inl create mode 100644 ACE/ace/SOCK_Connector.cpp create mode 100644 ACE/ace/SOCK_Connector.h create mode 100644 ACE/ace/SOCK_Connector.inl create mode 100644 ACE/ace/SOCK_Dgram.cpp create mode 100644 ACE/ace/SOCK_Dgram.h create mode 100644 ACE/ace/SOCK_Dgram.inl create mode 100644 ACE/ace/SOCK_Dgram_Bcast.cpp create mode 100644 ACE/ace/SOCK_Dgram_Bcast.h create mode 100644 ACE/ace/SOCK_Dgram_Bcast.inl create mode 100644 ACE/ace/SOCK_Dgram_Mcast.cpp create mode 100644 ACE/ace/SOCK_Dgram_Mcast.h create mode 100644 ACE/ace/SOCK_Dgram_Mcast.inl create mode 100644 ACE/ace/SOCK_IO.cpp create mode 100644 ACE/ace/SOCK_IO.h create mode 100644 ACE/ace/SOCK_IO.inl create mode 100644 ACE/ace/SOCK_Netlink.cpp create mode 100644 ACE/ace/SOCK_Netlink.h create mode 100644 ACE/ace/SOCK_Netlink.inl create mode 100644 ACE/ace/SOCK_SEQPACK_Acceptor.cpp create mode 100644 ACE/ace/SOCK_SEQPACK_Acceptor.h create mode 100644 ACE/ace/SOCK_SEQPACK_Acceptor.inl create mode 100644 ACE/ace/SOCK_SEQPACK_Association.cpp create mode 100644 ACE/ace/SOCK_SEQPACK_Association.h create mode 100644 ACE/ace/SOCK_SEQPACK_Association.inl create mode 100644 ACE/ace/SOCK_SEQPACK_Connector.cpp create mode 100644 ACE/ace/SOCK_SEQPACK_Connector.h create mode 100644 ACE/ace/SOCK_SEQPACK_Connector.inl create mode 100644 ACE/ace/SOCK_Stream.cpp create mode 100644 ACE/ace/SOCK_Stream.h create mode 100644 ACE/ace/SOCK_Stream.inl create mode 100644 ACE/ace/SPIPE.cpp create mode 100644 ACE/ace/SPIPE.h create mode 100644 ACE/ace/SPIPE.inl create mode 100644 ACE/ace/SPIPE_Acceptor.cpp create mode 100644 ACE/ace/SPIPE_Acceptor.h create mode 100644 ACE/ace/SPIPE_Addr.cpp create mode 100644 ACE/ace/SPIPE_Addr.h create mode 100644 ACE/ace/SPIPE_Addr.inl create mode 100644 ACE/ace/SPIPE_Connector.cpp create mode 100644 ACE/ace/SPIPE_Connector.h create mode 100644 ACE/ace/SPIPE_Connector.inl create mode 100644 ACE/ace/SPIPE_Stream.cpp create mode 100644 ACE/ace/SPIPE_Stream.h create mode 100644 ACE/ace/SPIPE_Stream.inl create mode 100644 ACE/ace/SSL/ACE_SSL.pc.in create mode 100644 ACE/ace/SSL/Makefile.am create mode 100644 ACE/ace/SSL/SSL_Asynch_BIO.cpp create mode 100644 ACE/ace/SSL/SSL_Asynch_BIO.h create mode 100644 ACE/ace/SSL/SSL_Asynch_Stream.cpp create mode 100644 ACE/ace/SSL/SSL_Asynch_Stream.h create mode 100644 ACE/ace/SSL/SSL_Context.cpp create mode 100644 ACE/ace/SSL/SSL_Context.h create mode 100644 ACE/ace/SSL/SSL_Context.inl create mode 100644 ACE/ace/SSL/SSL_Export.h create mode 100644 ACE/ace/SSL/SSL_SOCK.cpp create mode 100644 ACE/ace/SSL/SSL_SOCK.h create mode 100644 ACE/ace/SSL/SSL_SOCK.inl create mode 100644 ACE/ace/SSL/SSL_SOCK_Acceptor.cpp create mode 100644 ACE/ace/SSL/SSL_SOCK_Acceptor.h create mode 100644 ACE/ace/SSL/SSL_SOCK_Acceptor.inl create mode 100644 ACE/ace/SSL/SSL_SOCK_Connector.cpp create mode 100644 ACE/ace/SSL/SSL_SOCK_Connector.h create mode 100644 ACE/ace/SSL/SSL_SOCK_Connector.inl create mode 100644 ACE/ace/SSL/SSL_SOCK_Stream.cpp create mode 100644 ACE/ace/SSL/SSL_SOCK_Stream.h create mode 100644 ACE/ace/SSL/SSL_SOCK_Stream.inl create mode 100644 ACE/ace/SSL/ssl.mpc create mode 100644 ACE/ace/SSL/ssl_for_tao.mpc create mode 100644 ACE/ace/SSL/sslconf.h create mode 100644 ACE/ace/SString.cpp create mode 100644 ACE/ace/SString.h create mode 100644 ACE/ace/SString.inl create mode 100644 ACE/ace/SStringfwd.h create mode 100644 ACE/ace/SUN_Proactor.cpp create mode 100644 ACE/ace/SUN_Proactor.h create mode 100644 ACE/ace/SV_Message.cpp create mode 100644 ACE/ace/SV_Message.h create mode 100644 ACE/ace/SV_Message.inl create mode 100644 ACE/ace/SV_Message_Queue.cpp create mode 100644 ACE/ace/SV_Message_Queue.h create mode 100644 ACE/ace/SV_Message_Queue.inl create mode 100644 ACE/ace/SV_Semaphore_Complex.cpp create mode 100644 ACE/ace/SV_Semaphore_Complex.h create mode 100644 ACE/ace/SV_Semaphore_Complex.inl create mode 100644 ACE/ace/SV_Semaphore_Simple.cpp create mode 100644 ACE/ace/SV_Semaphore_Simple.h create mode 100644 ACE/ace/SV_Semaphore_Simple.inl create mode 100644 ACE/ace/SV_Shared_Memory.cpp create mode 100644 ACE/ace/SV_Shared_Memory.h create mode 100644 ACE/ace/SV_Shared_Memory.inl create mode 100644 ACE/ace/Sample_History.cpp create mode 100644 ACE/ace/Sample_History.h create mode 100644 ACE/ace/Sample_History.inl create mode 100644 ACE/ace/Sbrk_Memory_Pool.cpp create mode 100644 ACE/ace/Sbrk_Memory_Pool.h create mode 100644 ACE/ace/Sched_Params.cpp create mode 100644 ACE/ace/Sched_Params.h create mode 100644 ACE/ace/Sched_Params.inl create mode 100644 ACE/ace/Select_Reactor.h create mode 100644 ACE/ace/Select_Reactor_Base.cpp create mode 100644 ACE/ace/Select_Reactor_Base.h create mode 100644 ACE/ace/Select_Reactor_Base.inl create mode 100644 ACE/ace/Select_Reactor_T.cpp create mode 100644 ACE/ace/Select_Reactor_T.h create mode 100644 ACE/ace/Select_Reactor_T.inl create mode 100644 ACE/ace/Semaphore.cpp create mode 100644 ACE/ace/Semaphore.h create mode 100644 ACE/ace/Semaphore.inl create mode 100644 ACE/ace/Service_Config.cpp create mode 100644 ACE/ace/Service_Config.h create mode 100644 ACE/ace/Service_Config.inl create mode 100644 ACE/ace/Service_Gestalt.cpp create mode 100644 ACE/ace/Service_Gestalt.h create mode 100644 ACE/ace/Service_Gestalt.inl create mode 100644 ACE/ace/Service_Manager.cpp create mode 100644 ACE/ace/Service_Manager.h create mode 100644 ACE/ace/Service_Object.cpp create mode 100644 ACE/ace/Service_Object.h create mode 100644 ACE/ace/Service_Object.inl create mode 100644 ACE/ace/Service_Repository.cpp create mode 100644 ACE/ace/Service_Repository.h create mode 100644 ACE/ace/Service_Repository.inl create mode 100644 ACE/ace/Service_Templates.h create mode 100644 ACE/ace/Service_Types.cpp create mode 100644 ACE/ace/Service_Types.h create mode 100644 ACE/ace/Service_Types.inl create mode 100644 ACE/ace/Shared_Memory.cpp create mode 100644 ACE/ace/Shared_Memory.h create mode 100644 ACE/ace/Shared_Memory_MM.cpp create mode 100644 ACE/ace/Shared_Memory_MM.h create mode 100644 ACE/ace/Shared_Memory_MM.inl create mode 100644 ACE/ace/Shared_Memory_Pool.cpp create mode 100644 ACE/ace/Shared_Memory_Pool.h create mode 100644 ACE/ace/Shared_Memory_SV.cpp create mode 100644 ACE/ace/Shared_Memory_SV.h create mode 100644 ACE/ace/Shared_Memory_SV.inl create mode 100644 ACE/ace/Shared_Object.cpp create mode 100644 ACE/ace/Shared_Object.h create mode 100644 ACE/ace/Shared_Object.inl create mode 100644 ACE/ace/Sig_Adapter.cpp create mode 100644 ACE/ace/Sig_Adapter.h create mode 100644 ACE/ace/Sig_Handler.cpp create mode 100644 ACE/ace/Sig_Handler.h create mode 100644 ACE/ace/Sig_Handler.inl create mode 100644 ACE/ace/Signal.cpp create mode 100644 ACE/ace/Signal.h create mode 100644 ACE/ace/Signal.inl create mode 100644 ACE/ace/Singleton.cpp create mode 100644 ACE/ace/Singleton.h create mode 100644 ACE/ace/Singleton.inl create mode 100644 ACE/ace/Sock_Connect.cpp create mode 100644 ACE/ace/Sock_Connect.h create mode 100644 ACE/ace/Static_Object_Lock.h create mode 100644 ACE/ace/Stats.cpp create mode 100644 ACE/ace/Stats.h create mode 100644 ACE/ace/Stats.inl create mode 100644 ACE/ace/Strategies.h create mode 100644 ACE/ace/Strategies_T.cpp create mode 100644 ACE/ace/Strategies_T.h create mode 100644 ACE/ace/Strategies_T.inl create mode 100644 ACE/ace/Stream.cpp create mode 100644 ACE/ace/Stream.h create mode 100644 ACE/ace/Stream.inl create mode 100644 ACE/ace/Stream_Modules.cpp create mode 100644 ACE/ace/Stream_Modules.h create mode 100644 ACE/ace/String_Base.cpp create mode 100644 ACE/ace/String_Base.h create mode 100644 ACE/ace/String_Base.inl create mode 100644 ACE/ace/String_Base_Const.cpp create mode 100644 ACE/ace/String_Base_Const.h create mode 100644 ACE/ace/Svc_Conf.h create mode 100644 ACE/ace/Svc_Conf.y create mode 100644 ACE/ace/Svc_Conf_Lexer.cpp create mode 100644 ACE/ace/Svc_Conf_Lexer.h create mode 100644 ACE/ace/Svc_Conf_Param.h create mode 100644 ACE/ace/Svc_Conf_Tokens.h create mode 100644 ACE/ace/Svc_Conf_y.cpp create mode 100644 ACE/ace/Svc_Handler.cpp create mode 100644 ACE/ace/Svc_Handler.h create mode 100644 ACE/ace/Synch.h create mode 100644 ACE/ace/Synch_Options.cpp create mode 100644 ACE/ace/Synch_Options.h create mode 100644 ACE/ace/Synch_T.cpp create mode 100644 ACE/ace/Synch_T.h create mode 100644 ACE/ace/Synch_Traits.h create mode 100644 ACE/ace/System_Time.cpp create mode 100644 ACE/ace/System_Time.h create mode 100644 ACE/ace/TLI.cpp create mode 100644 ACE/ace/TLI.h create mode 100644 ACE/ace/TLI.inl create mode 100644 ACE/ace/TLI_Acceptor.cpp create mode 100644 ACE/ace/TLI_Acceptor.h create mode 100644 ACE/ace/TLI_Connector.cpp create mode 100644 ACE/ace/TLI_Connector.h create mode 100644 ACE/ace/TLI_Connector.inl create mode 100644 ACE/ace/TLI_Stream.cpp create mode 100644 ACE/ace/TLI_Stream.h create mode 100644 ACE/ace/TLI_Stream.inl create mode 100644 ACE/ace/TP_Reactor.cpp create mode 100644 ACE/ace/TP_Reactor.h create mode 100644 ACE/ace/TP_Reactor.inl create mode 100644 ACE/ace/TSS_Adapter.cpp create mode 100644 ACE/ace/TSS_Adapter.h create mode 100644 ACE/ace/TSS_T.cpp create mode 100644 ACE/ace/TSS_T.h create mode 100644 ACE/ace/TSS_T.inl create mode 100644 ACE/ace/TTY_IO.cpp create mode 100644 ACE/ace/TTY_IO.h create mode 100644 ACE/ace/Task.cpp create mode 100644 ACE/ace/Task.h create mode 100644 ACE/ace/Task.inl create mode 100644 ACE/ace/Task_Ex_T.cpp create mode 100644 ACE/ace/Task_Ex_T.h create mode 100644 ACE/ace/Task_Ex_T.inl create mode 100644 ACE/ace/Task_T.cpp create mode 100644 ACE/ace/Task_T.h create mode 100644 ACE/ace/Task_T.inl create mode 100644 ACE/ace/Test_and_Set.cpp create mode 100644 ACE/ace/Test_and_Set.h create mode 100644 ACE/ace/Thread.cpp create mode 100644 ACE/ace/Thread.h create mode 100644 ACE/ace/Thread.inl create mode 100644 ACE/ace/Thread_Adapter.cpp create mode 100644 ACE/ace/Thread_Adapter.h create mode 100644 ACE/ace/Thread_Adapter.inl create mode 100644 ACE/ace/Thread_Control.cpp create mode 100644 ACE/ace/Thread_Control.h create mode 100644 ACE/ace/Thread_Control.inl create mode 100644 ACE/ace/Thread_Exit.cpp create mode 100644 ACE/ace/Thread_Exit.h create mode 100644 ACE/ace/Thread_Hook.cpp create mode 100644 ACE/ace/Thread_Hook.h create mode 100644 ACE/ace/Thread_Manager.cpp create mode 100644 ACE/ace/Thread_Manager.h create mode 100644 ACE/ace/Thread_Manager.inl create mode 100644 ACE/ace/Thread_Mutex.cpp create mode 100644 ACE/ace/Thread_Mutex.h create mode 100644 ACE/ace/Thread_Mutex.inl create mode 100644 ACE/ace/Thread_Semaphore.cpp create mode 100644 ACE/ace/Thread_Semaphore.h create mode 100644 ACE/ace/Thread_Semaphore.inl create mode 100644 ACE/ace/Throughput_Stats.cpp create mode 100644 ACE/ace/Throughput_Stats.h create mode 100644 ACE/ace/Time_Value.cpp create mode 100644 ACE/ace/Time_Value.h create mode 100644 ACE/ace/Time_Value.inl create mode 100644 ACE/ace/Timeprobe.cpp create mode 100644 ACE/ace/Timeprobe.h create mode 100644 ACE/ace/Timeprobe.inl create mode 100644 ACE/ace/Timeprobe_T.cpp create mode 100644 ACE/ace/Timeprobe_T.h create mode 100644 ACE/ace/Timer_Hash.h create mode 100644 ACE/ace/Timer_Hash_T.cpp create mode 100644 ACE/ace/Timer_Hash_T.h create mode 100644 ACE/ace/Timer_Heap.h create mode 100644 ACE/ace/Timer_Heap_T.cpp create mode 100644 ACE/ace/Timer_Heap_T.h create mode 100644 ACE/ace/Timer_List.h create mode 100644 ACE/ace/Timer_List_T.cpp create mode 100644 ACE/ace/Timer_List_T.h create mode 100644 ACE/ace/Timer_Queue.h create mode 100644 ACE/ace/Timer_Queue_Adapters.cpp create mode 100644 ACE/ace/Timer_Queue_Adapters.h create mode 100644 ACE/ace/Timer_Queue_Adapters.inl create mode 100644 ACE/ace/Timer_Queue_T.cpp create mode 100644 ACE/ace/Timer_Queue_T.h create mode 100644 ACE/ace/Timer_Queue_T.inl create mode 100644 ACE/ace/Timer_Queuefwd.h create mode 100644 ACE/ace/Timer_Wheel.h create mode 100644 ACE/ace/Timer_Wheel_T.cpp create mode 100644 ACE/ace/Timer_Wheel_T.h create mode 100644 ACE/ace/TkReactor/ACE_TkReactor.pc.in create mode 100644 ACE/ace/TkReactor/ACE_TkReactor_export.h create mode 100644 ACE/ace/TkReactor/TkReactor.cpp create mode 100644 ACE/ace/TkReactor/TkReactor.h create mode 100644 ACE/ace/Token.cpp create mode 100644 ACE/ace/Token.h create mode 100644 ACE/ace/Token.inl create mode 100644 ACE/ace/Token_Collection.cpp create mode 100644 ACE/ace/Token_Collection.h create mode 100644 ACE/ace/Token_Collection.inl create mode 100644 ACE/ace/Token_Invariants.cpp create mode 100644 ACE/ace/Token_Invariants.h create mode 100644 ACE/ace/Token_Manager.cpp create mode 100644 ACE/ace/Token_Manager.h create mode 100644 ACE/ace/Token_Manager.inl create mode 100644 ACE/ace/Token_Request_Reply.cpp create mode 100644 ACE/ace/Token_Request_Reply.h create mode 100644 ACE/ace/Token_Request_Reply.inl create mode 100644 ACE/ace/Trace.cpp create mode 100644 ACE/ace/Trace.h create mode 100644 ACE/ace/Truncate.h create mode 100644 ACE/ace/Typed_SV_Message.cpp create mode 100644 ACE/ace/Typed_SV_Message.h create mode 100644 ACE/ace/Typed_SV_Message.inl create mode 100644 ACE/ace/Typed_SV_Message_Queue.cpp create mode 100644 ACE/ace/Typed_SV_Message_Queue.h create mode 100644 ACE/ace/Typed_SV_Message_Queue.inl create mode 100644 ACE/ace/UNIX_Addr.cpp create mode 100644 ACE/ace/UNIX_Addr.h create mode 100644 ACE/ace/UNIX_Addr.inl create mode 100644 ACE/ace/UPIPE_Acceptor.cpp create mode 100644 ACE/ace/UPIPE_Acceptor.h create mode 100644 ACE/ace/UPIPE_Acceptor.inl create mode 100644 ACE/ace/UPIPE_Addr.h create mode 100644 ACE/ace/UPIPE_Connector.cpp create mode 100644 ACE/ace/UPIPE_Connector.h create mode 100644 ACE/ace/UPIPE_Connector.inl create mode 100644 ACE/ace/UPIPE_Stream.cpp create mode 100644 ACE/ace/UPIPE_Stream.h create mode 100644 ACE/ace/UPIPE_Stream.inl create mode 100644 ACE/ace/UTF16_Encoding_Converter.cpp create mode 100644 ACE/ace/UTF16_Encoding_Converter.h create mode 100644 ACE/ace/UTF16_Encoding_Converter.inl create mode 100644 ACE/ace/UTF32_Encoding_Converter.cpp create mode 100644 ACE/ace/UTF32_Encoding_Converter.h create mode 100644 ACE/ace/UTF8_Encoding_Converter.cpp create mode 100644 ACE/ace/UTF8_Encoding_Converter.h create mode 100644 ACE/ace/UUID.cpp create mode 100644 ACE/ace/UUID.h create mode 100644 ACE/ace/UUID.inl create mode 100644 ACE/ace/Unbounded_Queue.cpp create mode 100644 ACE/ace/Unbounded_Queue.h create mode 100644 ACE/ace/Unbounded_Queue.inl create mode 100644 ACE/ace/Unbounded_Set.cpp create mode 100644 ACE/ace/Unbounded_Set.h create mode 100644 ACE/ace/Unbounded_Set.inl create mode 100644 ACE/ace/Value_Ptr.h create mode 100644 ACE/ace/Vector_T.cpp create mode 100644 ACE/ace/Vector_T.h create mode 100644 ACE/ace/Vector_T.inl create mode 100644 ACE/ace/Version.h create mode 100644 ACE/ace/Versioned_Namespace.h create mode 100644 ACE/ace/WFMO_Reactor.cpp create mode 100644 ACE/ace/WFMO_Reactor.h create mode 100644 ACE/ace/WFMO_Reactor.inl create mode 100644 ACE/ace/WIN32_Asynch_IO.cpp create mode 100644 ACE/ace/WIN32_Asynch_IO.h create mode 100644 ACE/ace/WIN32_Proactor.cpp create mode 100644 ACE/ace/WIN32_Proactor.h create mode 100644 ACE/ace/XML_Svc_Conf.cpp create mode 100644 ACE/ace/XML_Svc_Conf.h create mode 100644 ACE/ace/XTI_ATM_Mcast.cpp create mode 100644 ACE/ace/XTI_ATM_Mcast.h create mode 100644 ACE/ace/XTI_ATM_Mcast.inl create mode 100644 ACE/ace/XtReactor/ACE_XtReactor.pc.in create mode 100644 ACE/ace/XtReactor/ACE_XtReactor_export.h create mode 100644 ACE/ace/XtReactor/XtReactor.cpp create mode 100644 ACE/ace/XtReactor/XtReactor.h create mode 100644 ACE/ace/ace.mpc create mode 100644 ACE/ace/ace.mwc create mode 100644 ACE/ace/ace.rc create mode 100644 ACE/ace/ace_ce_dll.cfg create mode 100644 ACE/ace/ace_flreactor.mpc create mode 100644 ACE/ace/ace_for_tao.mpc create mode 100644 ACE/ace/ace_foxreactor.mpc create mode 100644 ACE/ace/ace_message_table.bin create mode 100644 ACE/ace/ace_qtreactor.mpc create mode 100644 ACE/ace/ace_tkreactor.mpc create mode 100644 ACE/ace/ace_wchar.cpp create mode 100644 ACE/ace/ace_wchar.h create mode 100644 ACE/ace/ace_wchar.inl create mode 100644 ACE/ace/ace_xtreactor.mpc create mode 100644 ACE/ace/checked_iterator.h create mode 100644 ACE/ace/codecs.mpb create mode 100644 ACE/ace/config-WinCE.h create mode 100644 ACE/ace/config-aix-5.x.h create mode 100644 ACE/ace/config-all.h create mode 100644 ACE/ace/config-borland-common.h create mode 100644 ACE/ace/config-cray.h create mode 100644 ACE/ace/config-cxx-common.h create mode 100644 ACE/ace/config-cygwin32.h create mode 100644 ACE/ace/config-doxygen.h create mode 100644 ACE/ace/config-freebsd.h create mode 100644 ACE/ace/config-g++-common.h create mode 100644 ACE/ace/config-ghs-common.h create mode 100644 ACE/ace/config-hpux-11.00.h create mode 100644 ACE/ace/config-icc-common.h create mode 100644 ACE/ace/config-integritySCA.h create mode 100644 ACE/ace/config-irix6.5.x-sgic++.h create mode 100644 ACE/ace/config-irix6.x-common.h create mode 100644 ACE/ace/config-irix6.x-g++.h create mode 100644 ACE/ace/config-irix6.x-sgic++.h create mode 100644 ACE/ace/config-linux-common.h create mode 100644 ACE/ace/config-linux.h create mode 100644 ACE/ace/config-lite.h create mode 100644 ACE/ace/config-lynxos.h create mode 100644 ACE/ace/config-macosx-leopard.h create mode 100644 ACE/ace/config-macosx-panther.h create mode 100644 ACE/ace/config-macosx-tiger.h create mode 100644 ACE/ace/config-macosx.h create mode 100644 ACE/ace/config-macros.h create mode 100644 ACE/ace/config-minimal.h create mode 100644 ACE/ace/config-mvs.h create mode 100644 ACE/ace/config-netbsd.h create mode 100644 ACE/ace/config-openbsd.h create mode 100644 ACE/ace/config-openvms.h create mode 100644 ACE/ace/config-pharlap.h create mode 100644 ACE/ace/config-posix-nonetworking.h create mode 100644 ACE/ace/config-posix.h create mode 100644 ACE/ace/config-qnx-neutrino.h create mode 100644 ACE/ace/config-qnx-rtp-62x.h create mode 100644 ACE/ace/config-qnx-rtp-common.h create mode 100644 ACE/ace/config-qnx-rtp-pre62x.h create mode 100644 ACE/ace/config-qnx-rtp.h create mode 100644 ACE/ace/config-rtems.h create mode 100644 ACE/ace/config-sco-5.0.0-nothread.h create mode 100644 ACE/ace/config-sco-5.0.0.h create mode 100644 ACE/ace/config-suncc-common.h create mode 100644 ACE/ace/config-sunos5.10.h create mode 100644 ACE/ace/config-sunos5.11.h create mode 100644 ACE/ace/config-sunos5.4-g++.h create mode 100644 ACE/ace/config-sunos5.4-sunc++-4.x.h create mode 100644 ACE/ace/config-sunos5.5.h create mode 100644 ACE/ace/config-sunos5.6.h create mode 100644 ACE/ace/config-sunos5.7.h create mode 100644 ACE/ace/config-sunos5.8.h create mode 100644 ACE/ace/config-sunos5.9.h create mode 100644 ACE/ace/config-tandem-nsk-mips-v2.h create mode 100644 ACE/ace/config-tandem-nsk-mips-v3.h create mode 100644 ACE/ace/config-tandem.h create mode 100644 ACE/ace/config-tru64.h create mode 100644 ACE/ace/config-unixware-7.1.0.h create mode 100644 ACE/ace/config-unixware-7.1.0.udk.h create mode 100644 ACE/ace/config-visualage.h create mode 100644 ACE/ace/config-vxworks.h create mode 100644 ACE/ace/config-vxworks5.x.h create mode 100644 ACE/ace/config-vxworks6.2.h create mode 100644 ACE/ace/config-vxworks6.3.h create mode 100644 ACE/ace/config-vxworks6.4.h create mode 100644 ACE/ace/config-vxworks6.5.h create mode 100644 ACE/ace/config-vxworks6.6.h create mode 100644 ACE/ace/config-win32-borland.h create mode 100644 ACE/ace/config-win32-common.h create mode 100644 ACE/ace/config-win32-dmc.h create mode 100644 ACE/ace/config-win32-ghs.h create mode 100644 ACE/ace/config-win32-interix.h create mode 100644 ACE/ace/config-win32-mingw.h create mode 100644 ACE/ace/config-win32-msvc-7.h create mode 100644 ACE/ace/config-win32-msvc-8.h create mode 100644 ACE/ace/config-win32-msvc-9.h create mode 100644 ACE/ace/config-win32-msvc.h create mode 100644 ACE/ace/config-win32.h create mode 100644 ACE/ace/filecache.mpb create mode 100644 ACE/ace/gethrtime.cpp create mode 100644 ACE/ace/iosfwd.h create mode 100644 ACE/ace/os_include/arpa/os_inet.h create mode 100644 ACE/ace/os_include/net/os_if.h create mode 100644 ACE/ace/os_include/netinet/os_in.h create mode 100644 ACE/ace/os_include/netinet/os_tcp.h create mode 100644 ACE/ace/os_include/os_aio.h create mode 100644 ACE/ace/os_include/os_assert.h create mode 100644 ACE/ace/os_include/os_byteswap.h create mode 100644 ACE/ace/os_include/os_complex.h create mode 100644 ACE/ace/os_include/os_cpio.h create mode 100644 ACE/ace/os_include/os_ctype.h create mode 100644 ACE/ace/os_include/os_dirent.h create mode 100644 ACE/ace/os_include/os_dlfcn.h create mode 100644 ACE/ace/os_include/os_errno.h create mode 100644 ACE/ace/os_include/os_fcntl.h create mode 100644 ACE/ace/os_include/os_fenv.h create mode 100644 ACE/ace/os_include/os_float.h create mode 100644 ACE/ace/os_include/os_fmtmsg.h create mode 100644 ACE/ace/os_include/os_fnmatch.h create mode 100644 ACE/ace/os_include/os_ftw.h create mode 100644 ACE/ace/os_include/os_glob.h create mode 100644 ACE/ace/os_include/os_grp.h create mode 100644 ACE/ace/os_include/os_iconv.h create mode 100644 ACE/ace/os_include/os_intrin.h create mode 100644 ACE/ace/os_include/os_inttypes.h create mode 100644 ACE/ace/os_include/os_iso646.h create mode 100644 ACE/ace/os_include/os_langinfo.h create mode 100644 ACE/ace/os_include/os_libgen.h create mode 100644 ACE/ace/os_include/os_limits.h create mode 100644 ACE/ace/os_include/os_local.h create mode 100644 ACE/ace/os_include/os_math.h create mode 100644 ACE/ace/os_include/os_monetary.h create mode 100644 ACE/ace/os_include/os_mqueue.h create mode 100644 ACE/ace/os_include/os_ndbm.h create mode 100644 ACE/ace/os_include/os_netdb.h create mode 100644 ACE/ace/os_include/os_nl_types.h create mode 100644 ACE/ace/os_include/os_poll.h create mode 100644 ACE/ace/os_include/os_pthread.h create mode 100644 ACE/ace/os_include/os_pwd.h create mode 100644 ACE/ace/os_include/os_regex.h create mode 100644 ACE/ace/os_include/os_sched.h create mode 100644 ACE/ace/os_include/os_search.h create mode 100644 ACE/ace/os_include/os_semaphore.h create mode 100644 ACE/ace/os_include/os_setjmp.h create mode 100644 ACE/ace/os_include/os_signal.h create mode 100644 ACE/ace/os_include/os_spawn.h create mode 100644 ACE/ace/os_include/os_stdarg.h create mode 100644 ACE/ace/os_include/os_stdbool.h create mode 100644 ACE/ace/os_include/os_stddef.h create mode 100644 ACE/ace/os_include/os_stdint.h create mode 100644 ACE/ace/os_include/os_stdio.h create mode 100644 ACE/ace/os_include/os_stdlib.h create mode 100644 ACE/ace/os_include/os_string.h create mode 100644 ACE/ace/os_include/os_strings.h create mode 100644 ACE/ace/os_include/os_stropts.h create mode 100644 ACE/ace/os_include/os_syslog.h create mode 100644 ACE/ace/os_include/os_tar.h create mode 100644 ACE/ace/os_include/os_termios.h create mode 100644 ACE/ace/os_include/os_tgmath.h create mode 100644 ACE/ace/os_include/os_time.h create mode 100644 ACE/ace/os_include/os_trace.h create mode 100644 ACE/ace/os_include/os_ucontext.h create mode 100644 ACE/ace/os_include/os_ulimit.h create mode 100644 ACE/ace/os_include/os_unistd.h create mode 100644 ACE/ace/os_include/os_utime.h create mode 100644 ACE/ace/os_include/os_utmpx.h create mode 100644 ACE/ace/os_include/os_wchar.h create mode 100644 ACE/ace/os_include/os_wctype.h create mode 100644 ACE/ace/os_include/os_wordexp.h create mode 100644 ACE/ace/os_include/sys/os_ipc.h create mode 100644 ACE/ace/os_include/sys/os_loadavg.h create mode 100644 ACE/ace/os_include/sys/os_mman.h create mode 100644 ACE/ace/os_include/sys/os_msg.h create mode 100644 ACE/ace/os_include/sys/os_pstat.h create mode 100644 ACE/ace/os_include/sys/os_resource.h create mode 100644 ACE/ace/os_include/sys/os_select.h create mode 100644 ACE/ace/os_include/sys/os_sem.h create mode 100644 ACE/ace/os_include/sys/os_shm.h create mode 100644 ACE/ace/os_include/sys/os_socket.h create mode 100644 ACE/ace/os_include/sys/os_stat.h create mode 100644 ACE/ace/os_include/sys/os_statvfs.h create mode 100644 ACE/ace/os_include/sys/os_sysctl.h create mode 100644 ACE/ace/os_include/sys/os_time.h create mode 100644 ACE/ace/os_include/sys/os_timeb.h create mode 100644 ACE/ace/os_include/sys/os_times.h create mode 100644 ACE/ace/os_include/sys/os_types.h create mode 100644 ACE/ace/os_include/sys/os_uio.h create mode 100644 ACE/ace/os_include/sys/os_un.h create mode 100644 ACE/ace/os_include/sys/os_utsname.h create mode 100644 ACE/ace/os_include/sys/os_wait.h create mode 100644 ACE/ace/other.mpb create mode 100644 ACE/ace/post.h create mode 100644 ACE/ace/pre.h create mode 100644 ACE/ace/streams.h create mode 100644 ACE/ace/svc_export.h create mode 100644 ACE/ace/svcconf.mpb create mode 100644 ACE/ace/token.mpb create mode 100644 ACE/ace/uuid.mpb create mode 100644 ACE/apps/Gateway/Gateway/Concrete_Connection_Handlers.cpp create mode 100644 ACE/apps/Gateway/Gateway/Concrete_Connection_Handlers.h create mode 100644 ACE/apps/Gateway/Gateway/Config_Files.cpp create mode 100644 ACE/apps/Gateway/Gateway/Config_Files.h create mode 100644 ACE/apps/Gateway/Gateway/Connection_Handler.cpp create mode 100644 ACE/apps/Gateway/Gateway/Connection_Handler.h create mode 100644 ACE/apps/Gateway/Gateway/Connection_Handler_Acceptor.cpp create mode 100644 ACE/apps/Gateway/Gateway/Connection_Handler_Acceptor.h create mode 100644 ACE/apps/Gateway/Gateway/Connection_Handler_Connector.cpp create mode 100644 ACE/apps/Gateway/Gateway/Connection_Handler_Connector.h create mode 100644 ACE/apps/Gateway/Gateway/Consumer_Dispatch_Set.h create mode 100644 ACE/apps/Gateway/Gateway/Event.h create mode 100644 ACE/apps/Gateway/Gateway/Event_Channel.cpp create mode 100644 ACE/apps/Gateway/Gateway/Event_Channel.h create mode 100644 ACE/apps/Gateway/Gateway/Event_Forwarding_Discriminator.cpp create mode 100644 ACE/apps/Gateway/Gateway/Event_Forwarding_Discriminator.h create mode 100644 ACE/apps/Gateway/Gateway/File_Parser.cpp create mode 100644 ACE/apps/Gateway/Gateway/File_Parser.h create mode 100644 ACE/apps/Gateway/Gateway/Gateway.cpp create mode 100644 ACE/apps/Gateway/Gateway/Gateway.h create mode 100644 ACE/apps/Gateway/Gateway/Makefile.am create mode 100644 ACE/apps/Gateway/Gateway/Options.cpp create mode 100644 ACE/apps/Gateway/Gateway/Options.h create mode 100644 ACE/apps/Gateway/Gateway/connection_config create mode 100644 ACE/apps/Gateway/Gateway/consumer_config create mode 100644 ACE/apps/Gateway/Gateway/gateway.mpc create mode 100644 ACE/apps/Gateway/Gateway/gatewayd.cpp create mode 100644 ACE/apps/Gateway/Gateway/svc.conf create mode 100644 ACE/apps/Gateway/Makefile.am create mode 100644 ACE/apps/Gateway/Peer/Makefile.am create mode 100644 ACE/apps/Gateway/Peer/Options.cpp create mode 100644 ACE/apps/Gateway/Peer/Options.h create mode 100644 ACE/apps/Gateway/Peer/Peer.cpp create mode 100644 ACE/apps/Gateway/Peer/Peer.h create mode 100644 ACE/apps/Gateway/Peer/peer.mpc create mode 100644 ACE/apps/Gateway/Peer/peerd.cpp create mode 100644 ACE/apps/Gateway/Peer/svc.conf create mode 100644 ACE/apps/Gateway/README create mode 100644 ACE/apps/JAWS/ChangeLog create mode 100644 ACE/apps/JAWS/Makefile.am create mode 100644 ACE/apps/JAWS/README create mode 100644 ACE/apps/JAWS/clients/Blobby/Blob.cpp create mode 100644 ACE/apps/JAWS/clients/Blobby/Blob.h create mode 100644 ACE/apps/JAWS/clients/Blobby/Blob_Handler.cpp create mode 100644 ACE/apps/JAWS/clients/Blobby/Blob_Handler.h create mode 100644 ACE/apps/JAWS/clients/Blobby/Makefile.am create mode 100644 ACE/apps/JAWS/clients/Blobby/Options.cpp create mode 100644 ACE/apps/JAWS/clients/Blobby/Options.h create mode 100644 ACE/apps/JAWS/clients/Blobby/README create mode 100644 ACE/apps/JAWS/clients/Blobby/blobby.cpp create mode 100644 ACE/apps/JAWS/clients/Blobby/blobby.mpc create mode 100644 ACE/apps/JAWS/clients/Caching/ID_Generator.cpp create mode 100644 ACE/apps/JAWS/clients/Caching/ID_Generator.h create mode 100644 ACE/apps/JAWS/clients/Caching/Local_Locator.cpp create mode 100644 ACE/apps/JAWS/clients/Caching/Local_Locator.h create mode 100644 ACE/apps/JAWS/clients/Caching/Local_Locator.inl create mode 100644 ACE/apps/JAWS/clients/Caching/Locator_Request_Reply.cpp create mode 100644 ACE/apps/JAWS/clients/Caching/Locator_Request_Reply.h create mode 100644 ACE/apps/JAWS/clients/Caching/Locator_Request_Reply.inl create mode 100644 ACE/apps/JAWS/clients/Caching/Makefile.am create mode 100644 ACE/apps/JAWS/clients/Caching/README create mode 100644 ACE/apps/JAWS/clients/Caching/URL_Array_Helper.cpp create mode 100644 ACE/apps/JAWS/clients/Caching/URL_Array_Helper.h create mode 100644 ACE/apps/JAWS/clients/Caching/URL_Locator.cpp create mode 100644 ACE/apps/JAWS/clients/Caching/URL_Locator.h create mode 100644 ACE/apps/JAWS/clients/Caching/URL_Properties.cpp create mode 100644 ACE/apps/JAWS/clients/Caching/URL_Properties.h create mode 100644 ACE/apps/JAWS/clients/Caching/URL_Properties.inl create mode 100644 ACE/apps/JAWS/clients/Caching/caching.mpc create mode 100644 ACE/apps/JAWS/clients/Caching/http_client.cpp create mode 100644 ACE/apps/JAWS/clients/Caching/http_handler.cpp create mode 100644 ACE/apps/JAWS/clients/Caching/http_handler.h create mode 100644 ACE/apps/JAWS/clients/Caching/test_URL.cpp create mode 100644 ACE/apps/JAWS/clients/Makefile.am create mode 100644 ACE/apps/JAWS/clients/README create mode 100644 ACE/apps/JAWS/clients/WebSTONE/COPYING create mode 100644 ACE/apps/JAWS/clients/WebSTONE/README create mode 100644 ACE/apps/JAWS/clients/WebSTONE/README.DynamicWorkload create mode 100644 ACE/apps/JAWS/clients/WebSTONE/README.FIRST create mode 100644 ACE/apps/JAWS/clients/WebSTONE/WEBSTONE-VERSION-2.0 create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/WebStone-common.pl create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/WebStone-manage.pl create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/WebStone-run.pl create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/WebStone-setup.pl create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/checkfilelist create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/genfiles create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/genfiles-from-filelist.sh create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/gui-configure create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/killbench create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/killbench.pl create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/mine-logs.pl create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/move-filelist.pl create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/move-runs.pl create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/rebootall create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/runbench create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/runbench.pl create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/tabs2html create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/view-results.pl create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/webstone-gui.pl create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/write-testbed.pl create mode 100755 ACE/apps/JAWS/clients/WebSTONE/bin/wscollect.pl create mode 100644 ACE/apps/JAWS/clients/WebSTONE/conf/filelist create mode 100644 ACE/apps/JAWS/clients/WebSTONE/conf/filelist.cgi-heavy create mode 100644 ACE/apps/JAWS/clients/WebSTONE/conf/filelist.dynamic-heavy create mode 100644 ACE/apps/JAWS/clients/WebSTONE/conf/filelist.dynamic-light create mode 100644 ACE/apps/JAWS/clients/WebSTONE/conf/filelist.dynamic-medium create mode 100644 ACE/apps/JAWS/clients/WebSTONE/conf/filelist.homepage create mode 100644 ACE/apps/JAWS/clients/WebSTONE/conf/filelist.sample create mode 100644 ACE/apps/JAWS/clients/WebSTONE/conf/filelist.standard create mode 100644 ACE/apps/JAWS/clients/WebSTONE/conf/fileset create mode 100755 ACE/apps/JAWS/clients/WebSTONE/conf/paths.pl create mode 100644 ACE/apps/JAWS/clients/WebSTONE/conf/paths.sh create mode 100644 ACE/apps/JAWS/clients/WebSTONE/conf/testbed create mode 100644 ACE/apps/JAWS/clients/WebSTONE/doc/COPYING create mode 100644 ACE/apps/JAWS/clients/WebSTONE/doc/FAQ-webstone.html create mode 100644 ACE/apps/JAWS/clients/WebSTONE/doc/LICENSE.html create mode 100644 ACE/apps/JAWS/clients/WebSTONE/doc/WebStone.html create mode 100755 ACE/apps/JAWS/clients/WebSTONE/doc/testbed.help create mode 100644 ACE/apps/JAWS/clients/WebSTONE/doc/webstone-white-paper.ps create mode 100644 ACE/apps/JAWS/clients/WebSTONE/doc/webstone.gif create mode 100644 ACE/apps/JAWS/clients/WebSTONE/doc/webstone2.html create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/README create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/acconfig.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/bench.c create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/bench.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/cgi-send.c create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/config.cache create mode 100755 ACE/apps/JAWS/clients/WebSTONE/src/config.guess create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/config.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/config.h.in create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/config.log create mode 100755 ACE/apps/JAWS/clients/WebSTONE/src/config.status create mode 100755 ACE/apps/JAWS/clients/WebSTONE/src/config.sub create mode 100755 ACE/apps/JAWS/clients/WebSTONE/src/configure create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/configure.in create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/debug.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/errexit.c create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/genrand.c create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/get.c create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/get.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/getopt.c create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/gettimeofday.c create mode 100755 ACE/apps/JAWS/clients/WebSTONE/src/install-sh create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/logfile27859 create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/buffer.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/cinfo.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/crit.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/daemon.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/dll.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/ereport.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/eventlog.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/file.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/minissl.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/net.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/nodelock.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/nterrors.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/objndx.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/pblock.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/sem.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/session.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/shexp.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/shmem.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/systems.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/systhr.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/util.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/conf.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/dnfilter.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/func.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/http.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/httpact.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/ipfilter.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/log.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/object.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/objset.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/protocol.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/req.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/servact.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/netsite.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/nsapi-send.c create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/parse_file_list.c create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/parse_file_list.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/rexec.c create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/statistics.c create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/statistics.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/sysdep.c create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/sysdep.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/timefunc.c create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/timefunc.h create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/webclient.c create mode 100644 ACE/apps/JAWS/clients/WebSTONE/src/webmaster.c create mode 100755 ACE/apps/JAWS/clients/WebSTONE/webstone create mode 100644 ACE/apps/JAWS/server/HTTP_Config.cpp create mode 100644 ACE/apps/JAWS/server/HTTP_Config.h create mode 100644 ACE/apps/JAWS/server/HTTP_Handler.cpp create mode 100644 ACE/apps/JAWS/server/HTTP_Handler.h create mode 100644 ACE/apps/JAWS/server/HTTP_Helpers.cpp create mode 100644 ACE/apps/JAWS/server/HTTP_Helpers.h create mode 100644 ACE/apps/JAWS/server/HTTP_Request.cpp create mode 100644 ACE/apps/JAWS/server/HTTP_Request.h create mode 100644 ACE/apps/JAWS/server/HTTP_Response.cpp create mode 100644 ACE/apps/JAWS/server/HTTP_Response.h create mode 100644 ACE/apps/JAWS/server/HTTP_Server.cpp create mode 100644 ACE/apps/JAWS/server/HTTP_Server.h create mode 100644 ACE/apps/JAWS/server/IO.cpp create mode 100644 ACE/apps/JAWS/server/IO.h create mode 100644 ACE/apps/JAWS/server/JAWS_Concurrency.cpp create mode 100644 ACE/apps/JAWS/server/JAWS_Concurrency.h create mode 100644 ACE/apps/JAWS/server/JAWS_Pipeline.cpp create mode 100644 ACE/apps/JAWS/server/JAWS_Pipeline.h create mode 100644 ACE/apps/JAWS/server/JAWS_Pipeline_Handler.cpp create mode 100644 ACE/apps/JAWS/server/JAWS_Pipeline_Handler.h create mode 100644 ACE/apps/JAWS/server/Makefile.am create mode 100644 ACE/apps/JAWS/server/Parse_Headers.cpp create mode 100644 ACE/apps/JAWS/server/Parse_Headers.h create mode 100644 ACE/apps/JAWS/server/README create mode 100644 ACE/apps/JAWS/server/jaws.auth create mode 100644 ACE/apps/JAWS/server/main.cpp create mode 100644 ACE/apps/JAWS/server/server.mpc create mode 100644 ACE/apps/JAWS/server/svc.conf create mode 100755 ACE/apps/JAWS/server/test.cgi create mode 100644 ACE/apps/JAWS/stress_testing/README create mode 100644 ACE/apps/JAWS/stress_testing/benchd.cpp create mode 100644 ACE/apps/JAWS/stress_testing/client.h create mode 100644 ACE/apps/JAWS/stress_testing/config create mode 100644 ACE/apps/JAWS/stress_testing/connection.cpp create mode 100644 ACE/apps/JAWS/stress_testing/connection.h create mode 100644 ACE/apps/JAWS/stress_testing/cp.cpp create mode 100644 ACE/apps/JAWS/stress_testing/cp.h create mode 100644 ACE/apps/JAWS/stress_testing/global.h create mode 100644 ACE/apps/JAWS/stress_testing/http.h create mode 100644 ACE/apps/JAWS/stress_testing/http_tester.cpp create mode 100644 ACE/apps/JAWS/stress_testing/out create mode 100644 ACE/apps/JAWS/stress_testing/stats.cpp create mode 100644 ACE/apps/JAWS/stress_testing/stats.h create mode 100644 ACE/apps/JAWS/stress_testing/util.cpp create mode 100644 ACE/apps/JAWS/stress_testing/util.h create mode 100644 ACE/apps/JAWS2/1000K.html create mode 100644 ACE/apps/JAWS2/100K.html create mode 100644 ACE/apps/JAWS2/500K.html create mode 100644 ACE/apps/JAWS2/50K.html create mode 100644 ACE/apps/JAWS2/5K.html create mode 100644 ACE/apps/JAWS2/HTTPU/Makefile.am create mode 100644 ACE/apps/JAWS2/HTTPU/http_base.cpp create mode 100644 ACE/apps/JAWS2/HTTPU/http_base.h create mode 100644 ACE/apps/JAWS2/HTTPU/http_base.inl create mode 100644 ACE/apps/JAWS2/HTTPU/http_export.h create mode 100644 ACE/apps/JAWS2/HTTPU/http_headers.cpp create mode 100644 ACE/apps/JAWS2/HTTPU/http_headers.h create mode 100644 ACE/apps/JAWS2/HTTPU/http_headers.inl create mode 100644 ACE/apps/JAWS2/HTTPU/http_request.cpp create mode 100644 ACE/apps/JAWS2/HTTPU/http_request.h create mode 100644 ACE/apps/JAWS2/HTTPU/http_request.inl create mode 100644 ACE/apps/JAWS2/HTTPU/http_response.cpp create mode 100644 ACE/apps/JAWS2/HTTPU/http_response.h create mode 100644 ACE/apps/JAWS2/HTTPU/http_response.inl create mode 100644 ACE/apps/JAWS2/HTTPU/http_status.cpp create mode 100644 ACE/apps/JAWS2/HTTPU/http_status.h create mode 100644 ACE/apps/JAWS2/HTTPU/http_status.inl create mode 100644 ACE/apps/JAWS2/HTTPU/httpu.mpc create mode 100644 ACE/apps/JAWS2/HTTPU/parse_http_request.cpp create mode 100644 ACE/apps/JAWS2/HTTPU/parse_http_request.h create mode 100644 ACE/apps/JAWS2/HTTPU/parse_http_request.inl create mode 100644 ACE/apps/JAWS2/HTTPU/parse_http_response.cpp create mode 100644 ACE/apps/JAWS2/HTTPU/parse_http_response.h create mode 100644 ACE/apps/JAWS2/HTTPU/parse_http_response.inl create mode 100644 ACE/apps/JAWS2/HTTPU/parse_url.cpp create mode 100644 ACE/apps/JAWS2/HTTPU/parse_url.h create mode 100644 ACE/apps/JAWS2/HTTP_10.cpp create mode 100644 ACE/apps/JAWS2/HTTP_10.h create mode 100644 ACE/apps/JAWS2/HTTP_10_Parse.cpp create mode 100644 ACE/apps/JAWS2/HTTP_10_Read.cpp create mode 100644 ACE/apps/JAWS2/HTTP_10_Request.cpp create mode 100644 ACE/apps/JAWS2/HTTP_10_Request.h create mode 100644 ACE/apps/JAWS2/HTTP_10_Write.cpp create mode 100644 ACE/apps/JAWS2/HTTP_Policy.cpp create mode 100644 ACE/apps/JAWS2/HTTP_Policy.h create mode 100644 ACE/apps/JAWS2/JAWS/Assoc_Array.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Assoc_Array.h create mode 100644 ACE/apps/JAWS2/JAWS/Cache_Hash_T.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Cache_Hash_T.h create mode 100644 ACE/apps/JAWS2/JAWS/Cache_Heap_T.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Cache_Heap_T.h create mode 100644 ACE/apps/JAWS2/JAWS/Cache_List_T.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Cache_List_T.h create mode 100644 ACE/apps/JAWS2/JAWS/Cache_Manager.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Cache_Manager.h create mode 100644 ACE/apps/JAWS2/JAWS/Cache_Manager_T.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Cache_Manager_T.h create mode 100644 ACE/apps/JAWS2/JAWS/Cache_Object.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Cache_Object.h create mode 100644 ACE/apps/JAWS2/JAWS/Concurrency.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Concurrency.h create mode 100644 ACE/apps/JAWS2/JAWS/Data_Block.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Data_Block.h create mode 100644 ACE/apps/JAWS2/JAWS/Export.h create mode 100644 ACE/apps/JAWS2/JAWS/FILE.cpp create mode 100644 ACE/apps/JAWS2/JAWS/FILE.h create mode 100644 ACE/apps/JAWS2/JAWS/Filecache.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Filecache.h create mode 100644 ACE/apps/JAWS2/JAWS/Hash_Bucket_T.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Hash_Bucket_T.h create mode 100644 ACE/apps/JAWS2/JAWS/Headers.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Headers.h create mode 100644 ACE/apps/JAWS2/JAWS/IO.cpp create mode 100644 ACE/apps/JAWS2/JAWS/IO.h create mode 100644 ACE/apps/JAWS2/JAWS/IO_Acceptor.cpp create mode 100644 ACE/apps/JAWS2/JAWS/IO_Acceptor.h create mode 100644 ACE/apps/JAWS2/JAWS/IO_Handler.cpp create mode 100644 ACE/apps/JAWS2/JAWS/IO_Handler.h create mode 100644 ACE/apps/JAWS2/JAWS/Makefile.am create mode 100644 ACE/apps/JAWS2/JAWS/Parse_Headers.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Parse_Headers.h create mode 100644 ACE/apps/JAWS2/JAWS/Pipeline.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Pipeline.h create mode 100644 ACE/apps/JAWS2/JAWS/Pipeline_Handler_T.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Pipeline_Handler_T.h create mode 100644 ACE/apps/JAWS2/JAWS/Pipeline_Tasks.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Pipeline_Tasks.h create mode 100644 ACE/apps/JAWS2/JAWS/Policy.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Policy.h create mode 100644 ACE/apps/JAWS2/JAWS/Reaper.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Reaper.h create mode 100644 ACE/apps/JAWS2/JAWS/Server.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Server.h create mode 100644 ACE/apps/JAWS2/JAWS/Waiter.cpp create mode 100644 ACE/apps/JAWS2/JAWS/Waiter.h create mode 100644 ACE/apps/JAWS2/JAWS/jaws2.mpc create mode 100644 ACE/apps/JAWS2/Makefile.am create mode 100644 ACE/apps/JAWS2/README create mode 100644 ACE/apps/JAWS2/main.cpp create mode 100644 ACE/apps/JAWS3/Makefile.am create mode 100644 ACE/apps/JAWS3/bench/average.cpp create mode 100644 ACE/apps/JAWS3/bench/mkfiles.cpp create mode 100644 ACE/apps/JAWS3/bench/rqfiles.cpp create mode 100644 ACE/apps/JAWS3/contrib/jmills_at_tga_dot_com/README create mode 100644 ACE/apps/JAWS3/contrib/jmills_at_tga_dot_com/jaws3-msvc.pat create mode 100644 ACE/apps/JAWS3/contrib/john_at_lyris_dot_com/README create mode 100644 ACE/apps/JAWS3/contrib/john_at_lyris_dot_com/jaws3-cntlC.code create mode 100644 ACE/apps/JAWS3/docs/web/images/jaws3_banner.fig create mode 100644 ACE/apps/JAWS3/docs/web/images/jaws3_banner.gif create mode 100644 ACE/apps/JAWS3/docs/web/images/jaws3_banner.png create mode 100644 ACE/apps/JAWS3/docs/web/images/jaws3_components.fig create mode 100644 ACE/apps/JAWS3/docs/web/images/jaws3_components.gif create mode 100644 ACE/apps/JAWS3/docs/web/index.html create mode 100644 ACE/apps/JAWS3/docs/web/overview.html create mode 100644 ACE/apps/JAWS3/http/HTTP_Data.h create mode 100644 ACE/apps/JAWS3/http/HTTP_Service_Handler.cpp create mode 100644 ACE/apps/JAWS3/http/HTTP_Service_Handler.h create mode 100644 ACE/apps/JAWS3/http/HTTP_States.h create mode 100644 ACE/apps/JAWS3/jaws3-todo/FILE_Cache.h create mode 100644 ACE/apps/JAWS3/jaws3-todo/Map_Manager.h create mode 100644 ACE/apps/JAWS3/jaws3-todo/Map_Manager_T.cpp create mode 100644 ACE/apps/JAWS3/jaws3-todo/Map_Manager_T.h create mode 100644 ACE/apps/JAWS3/jaws3-todo/Reactive_Socket.cpp create mode 100644 ACE/apps/JAWS3/jaws3-todo/Reactive_Socket.h create mode 100644 ACE/apps/JAWS3/jaws3-todo/Reactive_Socket_Helpers.cpp create mode 100644 ACE/apps/JAWS3/jaws3-todo/Reactive_Socket_Helpers.h create mode 100644 ACE/apps/JAWS3/jaws3-todo/Socket.cpp create mode 100644 ACE/apps/JAWS3/jaws3-todo/Socket.h create mode 100644 ACE/apps/JAWS3/jaws3/Asynch_IO.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Asynch_IO.h create mode 100644 ACE/apps/JAWS3/jaws3/Asynch_IO_Helpers.h create mode 100644 ACE/apps/JAWS3/jaws3/Cached_Allocator_T.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Cached_Allocator_T.h create mode 100644 ACE/apps/JAWS3/jaws3/Concurrency.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Concurrency.h create mode 100644 ACE/apps/JAWS3/jaws3/Concurrency_T.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Concurrency_T.h create mode 100644 ACE/apps/JAWS3/jaws3/Config_File.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Config_File.h create mode 100644 ACE/apps/JAWS3/jaws3/Datagram.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Datagram.h create mode 100644 ACE/apps/JAWS3/jaws3/Event_Completer.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Event_Completer.h create mode 100644 ACE/apps/JAWS3/jaws3/Event_Dispatcher.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Event_Dispatcher.h create mode 100644 ACE/apps/JAWS3/jaws3/Event_Result.h create mode 100644 ACE/apps/JAWS3/jaws3/Export.h create mode 100644 ACE/apps/JAWS3/jaws3/FILE.cpp create mode 100644 ACE/apps/JAWS3/jaws3/FILE.h create mode 100644 ACE/apps/JAWS3/jaws3/IO.cpp create mode 100644 ACE/apps/JAWS3/jaws3/IO.h create mode 100644 ACE/apps/JAWS3/jaws3/Makefile.am create mode 100644 ACE/apps/JAWS3/jaws3/Options.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Options.h create mode 100644 ACE/apps/JAWS3/jaws3/Protocol_Handler.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Protocol_Handler.h create mode 100644 ACE/apps/JAWS3/jaws3/Reactive_IO.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Reactive_IO.h create mode 100644 ACE/apps/JAWS3/jaws3/Reactive_IO_Helpers.h create mode 100644 ACE/apps/JAWS3/jaws3/Signal_Task.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Signal_Task.h create mode 100644 ACE/apps/JAWS3/jaws3/Symbol_Table.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Symbol_Table.h create mode 100644 ACE/apps/JAWS3/jaws3/Synch_IO.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Synch_IO.h create mode 100644 ACE/apps/JAWS3/jaws3/THYBRID_Concurrency.cpp create mode 100644 ACE/apps/JAWS3/jaws3/THYBRID_Concurrency.h create mode 100644 ACE/apps/JAWS3/jaws3/TPOOL_Concurrency.cpp create mode 100644 ACE/apps/JAWS3/jaws3/TPOOL_Concurrency.h create mode 100644 ACE/apps/JAWS3/jaws3/TPR_Concurrency.cpp create mode 100644 ACE/apps/JAWS3/jaws3/TPR_Concurrency.h create mode 100644 ACE/apps/JAWS3/jaws3/Task_Timer.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Task_Timer.h create mode 100644 ACE/apps/JAWS3/jaws3/Templates.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Timer.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Timer.h create mode 100644 ACE/apps/JAWS3/jaws3/Timer_Helpers.cpp create mode 100644 ACE/apps/JAWS3/jaws3/Timer_Helpers.h create mode 100644 ACE/apps/JAWS3/jaws3/jaws.conf create mode 100644 ACE/apps/JAWS3/jaws3/jaws3.mpc create mode 100644 ACE/apps/JAWS3/jaws3/main.cpp create mode 100644 ACE/apps/JAWS3/small/SS_Data.cpp create mode 100644 ACE/apps/JAWS3/small/SS_Data.h create mode 100644 ACE/apps/JAWS3/small/SS_Service_Handler.cpp create mode 100644 ACE/apps/JAWS3/small/SS_Service_Handler.h create mode 100644 ACE/apps/JAWS3/small/SS_State_DONE.cpp create mode 100644 ACE/apps/JAWS3/small/SS_State_DONE.h create mode 100644 ACE/apps/JAWS3/small/SS_State_ERROR.cpp create mode 100644 ACE/apps/JAWS3/small/SS_State_ERROR.h create mode 100644 ACE/apps/JAWS3/small/SS_State_PARSE.cpp create mode 100644 ACE/apps/JAWS3/small/SS_State_PARSE.h create mode 100644 ACE/apps/JAWS3/small/SS_State_READ.cpp create mode 100644 ACE/apps/JAWS3/small/SS_State_READ.h create mode 100644 ACE/apps/JAWS3/small/SS_State_WRITE.cpp create mode 100644 ACE/apps/JAWS3/small/SS_State_WRITE.h create mode 100644 ACE/apps/JAWS3/small/SS_Templates.cpp create mode 100644 ACE/apps/JAWS3/small/jaws.conf create mode 100644 ACE/apps/JAWS3/small/svc.conf create mode 100644 ACE/apps/JAWS3/zBUILD create mode 100644 ACE/apps/JAWS3/zCHANGES create mode 100644 ACE/apps/JAWS3/zCONTRIB create mode 100644 ACE/apps/JAWS3/zCOPYING create mode 100644 ACE/apps/JAWS3/zFAQ create mode 100644 ACE/apps/JAWS3/zREADME create mode 100644 ACE/apps/JAWS3/zTHANKS create mode 100644 ACE/apps/JAWS3/zTODO create mode 100644 ACE/apps/Makefile.am create mode 100644 ACE/apps/README create mode 100644 ACE/apps/apps.mwc create mode 100644 ACE/apps/drwho/BS_Client.cpp create mode 100644 ACE/apps/drwho/BS_Client.h create mode 100644 ACE/apps/drwho/BS_Server.cpp create mode 100644 ACE/apps/drwho/BS_Server.h create mode 100644 ACE/apps/drwho/Binary_Search.cpp create mode 100644 ACE/apps/drwho/Binary_Search.h create mode 100644 ACE/apps/drwho/CM_Client.cpp create mode 100644 ACE/apps/drwho/CM_Client.h create mode 100644 ACE/apps/drwho/CM_Server.cpp create mode 100644 ACE/apps/drwho/CM_Server.h create mode 100644 ACE/apps/drwho/ChangeLog create mode 100644 ACE/apps/drwho/Comm_Manager.cpp create mode 100644 ACE/apps/drwho/Comm_Manager.h create mode 100644 ACE/apps/drwho/Drwho_Node.cpp create mode 100644 ACE/apps/drwho/Drwho_Node.h create mode 100644 ACE/apps/drwho/File_Manager.cpp create mode 100644 ACE/apps/drwho/File_Manager.h create mode 100644 ACE/apps/drwho/HT_Client.cpp create mode 100644 ACE/apps/drwho/HT_Client.h create mode 100644 ACE/apps/drwho/HT_Server.cpp create mode 100644 ACE/apps/drwho/HT_Server.h create mode 100644 ACE/apps/drwho/Hash_Table.cpp create mode 100644 ACE/apps/drwho/Hash_Table.h create mode 100644 ACE/apps/drwho/Makefile.am create mode 100644 ACE/apps/drwho/Multicast_Manager.cpp create mode 100644 ACE/apps/drwho/Multicast_Manager.h create mode 100644 ACE/apps/drwho/Options.cpp create mode 100644 ACE/apps/drwho/Options.h create mode 100644 ACE/apps/drwho/PMC_All.cpp create mode 100644 ACE/apps/drwho/PMC_All.h create mode 100644 ACE/apps/drwho/PMC_Flo.cpp create mode 100644 ACE/apps/drwho/PMC_Flo.h create mode 100644 ACE/apps/drwho/PMC_Ruser.cpp create mode 100644 ACE/apps/drwho/PMC_Ruser.h create mode 100644 ACE/apps/drwho/PMC_Usr.cpp create mode 100644 ACE/apps/drwho/PMC_Usr.h create mode 100644 ACE/apps/drwho/PMS_All.cpp create mode 100644 ACE/apps/drwho/PMS_All.h create mode 100644 ACE/apps/drwho/PMS_Flo.cpp create mode 100644 ACE/apps/drwho/PMS_Flo.h create mode 100644 ACE/apps/drwho/PMS_Ruser.cpp create mode 100644 ACE/apps/drwho/PMS_Ruser.h create mode 100644 ACE/apps/drwho/PMS_Usr.cpp create mode 100644 ACE/apps/drwho/PMS_Usr.h create mode 100644 ACE/apps/drwho/PM_Client.cpp create mode 100644 ACE/apps/drwho/PM_Client.h create mode 100644 ACE/apps/drwho/PM_Server.cpp create mode 100644 ACE/apps/drwho/PM_Server.h create mode 100644 ACE/apps/drwho/Protocol_Manager.cpp create mode 100644 ACE/apps/drwho/Protocol_Manager.h create mode 100644 ACE/apps/drwho/Protocol_Record.cpp create mode 100644 ACE/apps/drwho/Protocol_Record.h create mode 100644 ACE/apps/drwho/README create mode 100644 ACE/apps/drwho/Rwho_DB_Manager.cpp create mode 100644 ACE/apps/drwho/Rwho_DB_Manager.h create mode 100644 ACE/apps/drwho/SL_Client.cpp create mode 100644 ACE/apps/drwho/SL_Client.h create mode 100644 ACE/apps/drwho/SL_Server.cpp create mode 100644 ACE/apps/drwho/SL_Server.h create mode 100644 ACE/apps/drwho/SML_Client.cpp create mode 100644 ACE/apps/drwho/SML_Client.h create mode 100644 ACE/apps/drwho/SML_Server.cpp create mode 100644 ACE/apps/drwho/SML_Server.h create mode 100644 ACE/apps/drwho/SMR_Client.cpp create mode 100644 ACE/apps/drwho/SMR_Client.h create mode 100644 ACE/apps/drwho/SMR_Server.cpp create mode 100644 ACE/apps/drwho/SMR_Server.h create mode 100644 ACE/apps/drwho/SM_Client.cpp create mode 100644 ACE/apps/drwho/SM_Client.h create mode 100644 ACE/apps/drwho/SM_Server.cpp create mode 100644 ACE/apps/drwho/SM_Server.h create mode 100644 ACE/apps/drwho/Search_Struct.cpp create mode 100644 ACE/apps/drwho/Search_Struct.h create mode 100644 ACE/apps/drwho/Select_Manager.cpp create mode 100644 ACE/apps/drwho/Select_Manager.h create mode 100644 ACE/apps/drwho/Single_Lookup.cpp create mode 100644 ACE/apps/drwho/Single_Lookup.h create mode 100644 ACE/apps/drwho/client.cpp create mode 100644 ACE/apps/drwho/drwho.mpc create mode 100644 ACE/apps/drwho/global.h create mode 100644 ACE/apps/drwho/server.cpp create mode 100644 ACE/apps/gperf/COPYING create mode 100644 ACE/apps/gperf/ChangeLog create mode 100644 ACE/apps/gperf/Makefile.am create mode 100644 ACE/apps/gperf/README create mode 100644 ACE/apps/gperf/gperf.1 create mode 100644 ACE/apps/gperf/gperf.info create mode 100644 ACE/apps/gperf/gperf.mpc create mode 100644 ACE/apps/gperf/gperf.texi create mode 100644 ACE/apps/gperf/src/Bool_Array.cpp create mode 100644 ACE/apps/gperf/src/Bool_Array.h create mode 100644 ACE/apps/gperf/src/Gen_Perf.cpp create mode 100644 ACE/apps/gperf/src/Gen_Perf.h create mode 100644 ACE/apps/gperf/src/Hash_Table.cpp create mode 100644 ACE/apps/gperf/src/Hash_Table.h create mode 100644 ACE/apps/gperf/src/Iterator.cpp create mode 100644 ACE/apps/gperf/src/Iterator.h create mode 100644 ACE/apps/gperf/src/Key_List.cpp create mode 100644 ACE/apps/gperf/src/Key_List.h create mode 100644 ACE/apps/gperf/src/List_Node.cpp create mode 100644 ACE/apps/gperf/src/List_Node.h create mode 100644 ACE/apps/gperf/src/Makefile.am create mode 100644 ACE/apps/gperf/src/Options.cpp create mode 100644 ACE/apps/gperf/src/Options.h create mode 100644 ACE/apps/gperf/src/Vectors.cpp create mode 100644 ACE/apps/gperf/src/Vectors.h create mode 100644 ACE/apps/gperf/src/Version.cpp create mode 100644 ACE/apps/gperf/src/gperf.cpp create mode 100644 ACE/apps/gperf/src/gperf.mpc create mode 100644 ACE/apps/gperf/tests/Makefile.am create mode 100644 ACE/apps/gperf/tests/ada-pred.exp create mode 100644 ACE/apps/gperf/tests/ada-res.exp create mode 100644 ACE/apps/gperf/tests/ada.gperf create mode 100644 ACE/apps/gperf/tests/adadefs.gperf create mode 100644 ACE/apps/gperf/tests/c-parse.gperf create mode 100644 ACE/apps/gperf/tests/c.exp create mode 100644 ACE/apps/gperf/tests/c.gperf create mode 100644 ACE/apps/gperf/tests/corba.exp create mode 100644 ACE/apps/gperf/tests/corba.gperf create mode 100644 ACE/apps/gperf/tests/cpp-res.exp create mode 100644 ACE/apps/gperf/tests/cpp.gperf create mode 100644 ACE/apps/gperf/tests/gpc.gperf create mode 100644 ACE/apps/gperf/tests/gperf_test.mpb create mode 100644 ACE/apps/gperf/tests/gplus.gperf create mode 100644 ACE/apps/gperf/tests/idl.exp create mode 100644 ACE/apps/gperf/tests/idl.gperf create mode 100644 ACE/apps/gperf/tests/iout2_gen/.empty create mode 100644 ACE/apps/gperf/tests/irc.gperf create mode 100644 ACE/apps/gperf/tests/makeinfo.gperf create mode 100644 ACE/apps/gperf/tests/modula.exp create mode 100644 ACE/apps/gperf/tests/modula2.gperf create mode 100644 ACE/apps/gperf/tests/modula3.gperf create mode 100644 ACE/apps/gperf/tests/pascal.exp create mode 100644 ACE/apps/gperf/tests/pascal.gperf create mode 100644 ACE/apps/gperf/tests/tao.exp create mode 100644 ACE/apps/gperf/tests/tao.gperf create mode 100644 ACE/apps/gperf/tests/test-1.exp create mode 100644 ACE/apps/gperf/tests/test-2.exp create mode 100644 ACE/apps/gperf/tests/test-3.exp create mode 100644 ACE/apps/gperf/tests/test-4.exp create mode 100644 ACE/apps/gperf/tests/test-5.exp create mode 100644 ACE/apps/gperf/tests/test-6.exp create mode 100644 ACE/apps/gperf/tests/test-7.exp create mode 100644 ACE/apps/gperf/tests/test.cpp create mode 100644 ACE/apps/gperf/tests/tests.mpc create mode 100644 ACE/apps/gperf/version.texi create mode 100644 ACE/apps/mkcsregdb/Makefile.am create mode 100644 ACE/apps/mkcsregdb/code_set_registry1.2g.txt create mode 100644 ACE/apps/mkcsregdb/cs_test.txt create mode 100644 ACE/apps/mkcsregdb/iso_only.txt create mode 100644 ACE/apps/mkcsregdb/mkcsregdb.cpp create mode 100644 ACE/apps/mkcsregdb/mkcsregdb.mpc create mode 100644 ACE/apps/soreduce/Library.cpp create mode 100644 ACE/apps/soreduce/Library.h create mode 100644 ACE/apps/soreduce/Makefile.am create mode 100644 ACE/apps/soreduce/Obj_Module.cpp create mode 100644 ACE/apps/soreduce/Obj_Module.h create mode 100644 ACE/apps/soreduce/README create mode 100644 ACE/apps/soreduce/SO_Group.cpp create mode 100644 ACE/apps/soreduce/SO_Group.h create mode 100644 ACE/apps/soreduce/Sig_List.cpp create mode 100644 ACE/apps/soreduce/Sig_List.h create mode 100644 ACE/apps/soreduce/Signature.cpp create mode 100644 ACE/apps/soreduce/Signature.h create mode 100644 ACE/apps/soreduce/soreduce.cpp create mode 100644 ACE/apps/soreduce/soreduce.mpc create mode 100755 ACE/bin/ACE-casts-convert create mode 100644 ACE/bin/ACETAOCIAO.style create mode 100644 ACE/bin/ACEutils.pm create mode 100755 ACE/bin/Array.pl create mode 100755 ACE/bin/Array_Helper create mode 100644 ACE/bin/ChangeLogEditor/CVSFileLocator.pm create mode 100644 ACE/bin/ChangeLogEditor/ChangeLogEdit.pm create mode 100644 ACE/bin/ChangeLogEditor/ChangeLogEntry.pm create mode 100644 ACE/bin/ChangeLogEditor/EmailTranslator.pm create mode 100644 ACE/bin/ChangeLogEditor/FileLocator.pm create mode 100644 ACE/bin/ChangeLogEditor/FileLocatorFactory.pm create mode 100644 ACE/bin/ChangeLogEditor/SVNFileLocator.pm create mode 100644 ACE/bin/DependencyGenerator/GNUDependencyWriter.pm create mode 100644 ACE/bin/DependencyGenerator/GNUObjectGenerator.pm create mode 100644 ACE/bin/FOCUS/ChangeLog create mode 100755 ACE/bin/FOCUS/FOCUS.pl create mode 100644 ACE/bin/FOCUS/NEWS create mode 100644 ACE/bin/FOCUS/PROBLEM-REPORT-FORM create mode 100644 ACE/bin/FOCUS/Parser/FOCUSParser.pm create mode 100644 ACE/bin/FOCUS/README create mode 100644 ACE/bin/FOCUS/VERSION create mode 100644 ACE/bin/FOCUS/docs/FOCUS.html create mode 100644 ACE/bin/FOCUS/specializations/Context-Specific-Optimizations/Dispatch-Resolution-Optimization.spl create mode 100644 ACE/bin/FOCUS/specializations/Flushing_Strategy/Leader_Follower_Flushing_Strategy.spl create mode 100644 ACE/bin/FOCUS/specializations/Protocol_Family/IIOP/iiop.spl create mode 100644 ACE/bin/FOCUS/specializations/README create mode 100644 ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_MT.spl create mode 100644 ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_ST.spl create mode 100644 ACE/bin/FOCUS/specializations/Reactor_Family/TP_Reactor.spl create mode 100644 ACE/bin/FOCUS/specializations/Wait_Strategy/Wait_On_Leader_Follower.spl create mode 100644 ACE/bin/FOCUS/specializations/Wait_Strategy/Wait_On_Read.spl create mode 100755 ACE/bin/Hash_Map_Manager.pl create mode 100755 ACE/bin/Hash_Map_Manager_Helper create mode 100644 ACE/bin/LabVIEW_RT/PXI_Reset.exe create mode 100755 ACE/bin/LabVIEW_RT/PXI_Reset.ini create mode 100644 ACE/bin/LabVIEW_RT/README create mode 100644 ACE/bin/LabVIEW_RT/Reboot_Target.exe create mode 100755 ACE/bin/LabVIEW_RT/Reboot_Target.ini create mode 100644 ACE/bin/LabVIEW_RT/labview_test_controller/ReadMe.txt create mode 100644 ACE/bin/LabVIEW_RT/labview_test_controller/labview_test_controller.cpp create mode 100644 ACE/bin/LabVIEW_RT/labview_test_controller/labview_test_controller.sln create mode 100644 ACE/bin/LabVIEW_RT/labview_test_controller/labview_test_controller.vcproj create mode 100644 ACE/bin/LabVIEW_RT/labview_test_controller/stdafx.cpp create mode 100644 ACE/bin/LabVIEW_RT/labview_test_controller/stdafx.h create mode 100644 ACE/bin/LabVIEW_RT/labview_test_controller/test.cpp create mode 100644 ACE/bin/LabVIEW_RT/labview_test_controller/test.vcproj create mode 100644 ACE/bin/MakeProjectCreator/README create mode 100644 ACE/bin/MakeProjectCreator/config/MPC.cfg create mode 100644 ACE/bin/MakeProjectCreator/config/ace_athena.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_fl.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_flreactor.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_for_tao.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_fox.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_foxreactor.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_gl.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_gtk.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_mfc.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_motif.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_openssl.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_output.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_qt.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_qtreactor.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_tk.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_tkreactor.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_x11.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_xt.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_xtreactor.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ace_zzip.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/acedefaults.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/aceexe.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/acelib.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/acenosubsets.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/acexml.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/automake.features create mode 100644 ACE/bin/MakeProjectCreator/config/avoids_ace_for_tao.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/bmake.features create mode 100644 ACE/bin/MakeProjectCreator/config/borland.features create mode 100644 ACE/bin/MakeProjectCreator/config/conv_lib.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/core.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/crosscompile.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/default.rel create mode 100644 ACE/bin/MakeProjectCreator/config/em3.features create mode 100644 ACE/bin/MakeProjectCreator/config/exceptions.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/global.features create mode 100644 ACE/bin/MakeProjectCreator/config/gnuace.features create mode 100644 ACE/bin/MakeProjectCreator/config/htbp.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/install.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/install_bin.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/install_headers.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/install_lib.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ipv6.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/kokyu.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/labviewrt_dll.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/man.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/nmake.features create mode 100644 ACE/bin/MakeProjectCreator/config/pkgconfig.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/qos.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/rmcast.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/script.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ssl.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ssl_for_tao.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/ssl_full.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/stl.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/support_ostream.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/test_files.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/threads.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/tmcast.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/vc71.features create mode 100644 ACE/bin/MakeProjectCreator/config/vc8.features create mode 100644 ACE/bin/MakeProjectCreator/config/vc8nmake.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/vc9.features create mode 100644 ACE/bin/MakeProjectCreator/config/vc9nmake.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/vc_warnings.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/vcfullmacros.mpt create mode 100644 ACE/bin/MakeProjectCreator/config/vcl.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/vcpartialmacros.mpt create mode 100644 ACE/bin/MakeProjectCreator/config/versioned_namespace.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/wfmo.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/winregistry.mpb create mode 100644 ACE/bin/MakeProjectCreator/config/wxwindows.mpb create mode 100644 ACE/bin/MakeProjectCreator/docs/templates/gnu.txt create mode 100644 ACE/bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm create mode 100644 ACE/bin/MakeProjectCreator/modules/BorlandProjectCreator.pm create mode 100644 ACE/bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm create mode 100644 ACE/bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm create mode 100644 ACE/bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm create mode 100644 ACE/bin/MakeProjectCreator/modules/GNUAutobuildProjectCreator.pm create mode 100644 ACE/bin/MakeProjectCreator/modules/GNUAutobuildWorkspaceCreator.pm create mode 100644 ACE/bin/MakeProjectCreator/templates/bor.mpd create mode 100644 ACE/bin/MakeProjectCreator/templates/bordll.mpt create mode 100644 ACE/bin/MakeProjectCreator/templates/borexe.mpt create mode 100644 ACE/bin/MakeProjectCreator/templates/gnu.mpd create mode 100644 ACE/bin/MakeProjectCreator/templates/gnudll.mpt create mode 100644 ACE/bin/MakeProjectCreator/templates/gnuexe.mpt create mode 100644 ACE/bin/Makefile.am create mode 100644 ACE/bin/PerlACE/ConfigList.pm create mode 100644 ACE/bin/PerlACE/MSProject.pm create mode 100644 ACE/bin/PerlACE/MSProject/DSP.pm create mode 100644 ACE/bin/PerlACE/MSProject/VCP.pm create mode 100644 ACE/bin/PerlACE/Makefile.am create mode 100644 ACE/bin/PerlACE/Process.pm create mode 100644 ACE/bin/PerlACE/ProcessLVRT.pm create mode 100644 ACE/bin/PerlACE/ProcessVX.pm create mode 100644 ACE/bin/PerlACE/ProcessVX_Unix.pm create mode 100644 ACE/bin/PerlACE/ProcessVX_Win32.pm create mode 100644 ACE/bin/PerlACE/Process_Unix.pm create mode 100644 ACE/bin/PerlACE/Process_VMS.pm create mode 100644 ACE/bin/PerlACE/Process_Win32.pm create mode 100644 ACE/bin/PerlACE/Run_Test.pm create mode 100644 ACE/bin/PerlACE/TestTarget.pm create mode 100644 ACE/bin/PerlACE/TestTarget_LVRT.pm create mode 100644 ACE/bin/PerlACE/perlace.mpc create mode 100644 ACE/bin/PythonACE/__init__.py create mode 100644 ACE/bin/PythonACE/fuzz/__init__.py create mode 100644 ACE/bin/PythonACE/fuzz/_fuzz.py create mode 100644 ACE/bin/PythonACE/fuzz/_generic_handler.py create mode 100644 ACE/bin/PythonACE/fuzz/_mailer.py create mode 100644 ACE/bin/PythonACE/fuzz/_path.py create mode 100644 ACE/bin/PythonACE/fuzz/_singleton.py create mode 100644 ACE/bin/PythonACE/fuzz/_types.py create mode 100644 ACE/bin/PythonACE/fuzz/_warning_handler.py create mode 100644 ACE/bin/PythonACE/fuzz/check_includes.py create mode 100644 ACE/bin/PythonACE/fuzz/cpp_inline.py create mode 100644 ACE/bin/PythonACE/fuzz/inline.py create mode 100644 ACE/bin/PythonACE/fuzz/math_include.py create mode 100644 ACE/bin/PythonACE/fuzz/max_filename.py create mode 100644 ACE/bin/PythonACE/fuzz/max_project_len.py create mode 100644 ACE/bin/PythonACE/fuzz/newline.py create mode 100644 ACE/bin/PythonACE/fuzz/no_conflict_markers.py create mode 100644 ACE/bin/PythonACE/fuzz/noncvs.py create mode 100644 ACE/bin/PythonACE/fuzz/ptr_arith_t.py create mode 100644 ACE/bin/PythonACE/fuzz/refcountservantbase.py create mode 100644 ACE/bin/PythonACE/fuzz/streams_include.py create mode 100644 ACE/bin/PythonACE/fuzz/verify_changelog.py create mode 100644 ACE/bin/Uniqueid.pm create mode 100755 ACE/bin/ace-install create mode 100755 ACE/bin/ace_components create mode 100755 ACE/bin/ace_ld create mode 100644 ACE/bin/ace_tests.lst create mode 100755 ACE/bin/add_rel_link.sh create mode 100755 ACE/bin/aix_shr create mode 100755 ACE/bin/auto_compile create mode 100755 ACE/bin/auto_compile_wrapper create mode 100755 ACE/bin/auto_ptr.perl create mode 100755 ACE/bin/auto_run_tests.pl create mode 100755 ACE/bin/autoconf_compile create mode 100755 ACE/bin/autoconf_compile_wrapper create mode 100644 ACE/bin/bin.mpc create mode 100755 ACE/bin/bootstrap create mode 100644 ACE/bin/ciao_tests.lst create mode 100755 ACE/bin/cle.pl create mode 100755 ACE/bin/clean_dsp.pl create mode 100755 ACE/bin/clean_sems.sh create mode 100644 ACE/bin/clone.csh create mode 100755 ACE/bin/cltime.pl create mode 100755 ACE/bin/copy-script.sh create mode 100755 ACE/bin/count_lines create mode 100755 ACE/bin/create_ace_build create mode 100755 ACE/bin/create_ace_build.pl create mode 100755 ACE/bin/cut_cidlc.sh create mode 100755 ACE/bin/depgen.pl create mode 100755 ACE/bin/diff-builds.pl create mode 100755 ACE/bin/doxygen-convert-h.pl create mode 100644 ACE/bin/envinfo.cpp create mode 100755 ACE/bin/footprint_stats.sh create mode 100755 ACE/bin/fuzz.pl create mode 100755 ACE/bin/fuzz.py create mode 100755 ACE/bin/g++_metric.sh create mode 100755 ACE/bin/g++dep create mode 100755 ACE/bin/generate_compile_stats.sh create mode 100755 ACE/bin/generate_doxygen.pl create mode 100755 ACE/bin/generate_export_file.pl create mode 100755 ACE/bin/generate_footprint_chart.sh create mode 100755 ACE/bin/generate_performance_chart.sh create mode 100755 ACE/bin/generate_rel_manpages create mode 100755 ACE/bin/generate_topinfo_charts.sh create mode 100755 ACE/bin/indent_macros.pl create mode 100755 ACE/bin/libsize.pl create mode 100755 ACE/bin/main2TMAIN.pl create mode 100755 ACE/bin/make-components create mode 100755 ACE/bin/make_release.py create mode 100755 ACE/bin/mpc.pl create mode 100755 ACE/bin/msvc_mpc_auto_compile.pl create mode 100755 ACE/bin/msvc_static_compile.pl create mode 100644 ACE/bin/msvc_static_order.lst create mode 100755 ACE/bin/mwc.pl create mode 100755 ACE/bin/package_copy_script.sh create mode 100755 ACE/bin/performance_stats.sh create mode 100755 ACE/bin/pippen.pl create mode 100755 ACE/bin/regenerate_exports.pl create mode 100755 ACE/bin/reverse_clean create mode 100755 ACE/bin/run_all.pl create mode 100755 ACE/bin/run_all_win32.pl create mode 100755 ACE/bin/sets-manager.py create mode 100755 ACE/bin/show_unused_macros.pl create mode 100755 ACE/bin/split-cpp create mode 100755 ACE/bin/svcconf-convert.pl create mode 100755 ACE/bin/svn_props.py create mode 100644 ACE/bin/tao_orb_tests.lst create mode 100644 ACE/bin/tao_other_tests.lst create mode 100755 ACE/bin/topinfo_iorsize_stats.sh create mode 100755 ACE/bin/topinfo_simple_stats.sh create mode 100755 ACE/bin/topinfo_stats.sh create mode 100755 ACE/bin/update-ace+tao.sh create mode 100755 ACE/bin/vx_repo_link.pl create mode 100755 ACE/bin/vxworks_modify.pl create mode 100644 ACE/configure.ac create mode 100644 ACE/contrib/FaCE/ACE.ico create mode 100644 ACE/contrib/FaCE/ACE_Racer.bmp create mode 100644 ACE/contrib/FaCE/CE_ARGV.CPP create mode 100644 ACE/contrib/FaCE/CE_ARGV.H create mode 100644 ACE/contrib/FaCE/CE_Screen_Output.cpp create mode 100644 ACE/contrib/FaCE/CE_Screen_Output.h create mode 100644 ACE/contrib/FaCE/FACE.ico create mode 100644 ACE/contrib/FaCE/FaCE.cpp create mode 100644 ACE/contrib/FaCE/FaCE.h create mode 100644 ACE/contrib/FaCE/FaCE.mpc create mode 100644 ACE/contrib/FaCE/FaCE.rc create mode 100644 ACE/contrib/FaCE/FaCENOACE.mpc create mode 100644 ACE/contrib/FaCE/FaCE_OS.h create mode 100644 ACE/contrib/FaCE/License.txt create mode 100644 ACE/contrib/FaCE/Main.cpp create mode 100644 ACE/contrib/FaCE/README create mode 100644 ACE/contrib/FaCE/TAO.bmp create mode 100644 ACE/contrib/FaCE/newres.h create mode 100644 ACE/contrib/FaCE/resource.h create mode 100644 ACE/contrib/minizip/ChangeLogUnzip create mode 100644 ACE/contrib/minizip/crypt.h create mode 100644 ACE/contrib/minizip/ioapi.c create mode 100644 ACE/contrib/minizip/ioapi.h create mode 100644 ACE/contrib/minizip/miniunz.c create mode 100644 ACE/contrib/minizip/minizip.c create mode 100644 ACE/contrib/minizip/minizip.mpc create mode 100644 ACE/contrib/minizip/minizip_export.h create mode 100644 ACE/contrib/minizip/mztools.c create mode 100644 ACE/contrib/minizip/mztools.h create mode 100644 ACE/contrib/minizip/unzip.c create mode 100644 ACE/contrib/minizip/unzip.h create mode 100644 ACE/contrib/minizip/zip.c create mode 100644 ACE/contrib/minizip/zip.h create mode 100644 ACE/contrib/utility/BuildRules/Archive.gcc.post.rules create mode 100644 ACE/contrib/utility/BuildRules/Archive.gcc.pre.rules create mode 100644 ACE/contrib/utility/BuildRules/Archive.post.rules create mode 100644 ACE/contrib/utility/BuildRules/Archive.pre.rules create mode 100644 ACE/contrib/utility/BuildRules/Bootstrap.rules create mode 100644 ACE/contrib/utility/BuildRules/Documentation.post.rules create mode 100644 ACE/contrib/utility/BuildRules/Documentation.pre.rules create mode 100644 ACE/contrib/utility/BuildRules/Executable.gcc.post.rules create mode 100644 ACE/contrib/utility/BuildRules/Executable.gcc.pre.rules create mode 100644 ACE/contrib/utility/BuildRules/Executable.generic.post.rules create mode 100644 ACE/contrib/utility/BuildRules/Executable.generic.pre.rules create mode 100644 ACE/contrib/utility/BuildRules/Executable.post.rules create mode 100644 ACE/contrib/utility/BuildRules/Executable.pre.rules create mode 100644 ACE/contrib/utility/BuildRules/Object.gcc.post.rules create mode 100644 ACE/contrib/utility/BuildRules/Object.gcc.pre.rules create mode 100644 ACE/contrib/utility/BuildRules/Object.post.rules create mode 100644 ACE/contrib/utility/BuildRules/Object.pre.rules create mode 100644 ACE/contrib/utility/BuildRules/Recursion.post.rules create mode 100644 ACE/contrib/utility/BuildRules/Recursion.pre.rules create mode 100644 ACE/contrib/utility/BuildRules/Shared.gcc.post.rules create mode 100644 ACE/contrib/utility/BuildRules/Shared.gcc.pre.rules create mode 100644 ACE/contrib/utility/BuildRules/Shared.generic.post.rules create mode 100644 ACE/contrib/utility/BuildRules/Shared.generic.pre.rules create mode 100644 ACE/contrib/utility/BuildRules/Shared.post.rules create mode 100644 ACE/contrib/utility/BuildRules/Shared.pre.rules create mode 100644 ACE/contrib/utility/BuildRules/Thoughts create mode 100644 ACE/contrib/utility/Documentation/Build.xhtml create mode 100644 ACE/contrib/utility/Documentation/CommandLine/News.xhtml create mode 100644 ACE/contrib/utility/Documentation/CommandLine/Terminology.xhtml create mode 100644 ACE/contrib/utility/Documentation/CommandLine/Thoughts create mode 100644 ACE/contrib/utility/Documentation/CommandLine/index.xhtml create mode 100644 ACE/contrib/utility/Documentation/ExH/Compound.hpp.html create mode 100644 ACE/contrib/utility/Documentation/ExH/Example/Makefile create mode 100644 ACE/contrib/utility/Documentation/ExH/Example/bad_cast.cpp.html create mode 100644 ACE/contrib/utility/Documentation/ExH/Example/compound.cpp.html create mode 100644 ACE/contrib/utility/Documentation/ExH/Example/hello_world.cpp.html create mode 100644 ACE/contrib/utility/Documentation/ExH/Example/logic_to_system.cpp.html create mode 100644 ACE/contrib/utility/Documentation/ExH/Logic/DescriptiveException.hpp.html create mode 100644 ACE/contrib/utility/Documentation/ExH/Logic/Exception.hpp.html create mode 100644 ACE/contrib/utility/Documentation/ExH/Logic/Makefile create mode 100644 ACE/contrib/utility/Documentation/ExH/Makefile create mode 100644 ACE/contrib/utility/Documentation/ExH/Makefile.documentation create mode 100644 ACE/contrib/utility/Documentation/ExH/News.xhtml create mode 100644 ACE/contrib/utility/Documentation/ExH/System/DescriptiveException.hpp.html create mode 100644 ACE/contrib/utility/Documentation/ExH/System/Exception.hpp.html create mode 100644 ACE/contrib/utility/Documentation/ExH/System/Makefile create mode 100644 ACE/contrib/utility/Documentation/ExH/index.xhtml create mode 100644 ACE/contrib/utility/Documentation/Hetero/News.xhtml create mode 100644 ACE/contrib/utility/Documentation/Hetero/index.xhtml create mode 100644 ACE/contrib/utility/Documentation/Introspection/News.xhtml create mode 100644 ACE/contrib/utility/Documentation/Introspection/index.xhtml create mode 100644 ACE/contrib/utility/Documentation/Makefile create mode 100644 ACE/contrib/utility/Documentation/News.xhtml create mode 100644 ACE/contrib/utility/Documentation/ReferenceCounting/DefaultImpl.hpp.html create mode 100644 ACE/contrib/utility/Documentation/ReferenceCounting/Interface.hpp.html create mode 100644 ACE/contrib/utility/Documentation/ReferenceCounting/Makefile create mode 100644 ACE/contrib/utility/Documentation/ReferenceCounting/News.xhtml create mode 100644 ACE/contrib/utility/Documentation/ReferenceCounting/SmartPtr.hpp.html create mode 100644 ACE/contrib/utility/Documentation/ReferenceCounting/StrictPtr.hpp.html create mode 100644 ACE/contrib/utility/Documentation/ReferenceCounting/index.xhtml create mode 100644 ACE/contrib/utility/Documentation/ReleaseProcess create mode 100644 ACE/contrib/utility/Documentation/Style/CXX.css create mode 100644 ACE/contrib/utility/Documentation/Style/CXX_Blue.css create mode 100644 ACE/contrib/utility/Documentation/Style/Default.css create mode 100644 ACE/contrib/utility/Documentation/Synch/Makefile create mode 100644 ACE/contrib/utility/Documentation/Synch/News.xhtml create mode 100644 ACE/contrib/utility/Documentation/Synch/Policy/Makefile create mode 100644 ACE/contrib/utility/Documentation/Synch/Policy/Null.hpp.html create mode 100644 ACE/contrib/utility/Documentation/Synch/index.xhtml create mode 100644 ACE/contrib/utility/Documentation/TODO create mode 100644 ACE/contrib/utility/Documentation/Template.xhtml create mode 100644 ACE/contrib/utility/Documentation/Thoughts/Enum/EnumCount create mode 100644 ACE/contrib/utility/Documentation/Thoughts/Enum/EnumCount2 create mode 100644 ACE/contrib/utility/Documentation/Thoughts/Enum/EnumInfo create mode 100644 ACE/contrib/utility/Documentation/index.xhtml create mode 100644 ACE/contrib/utility/Example/CommandLine/Foo/command.cpp create mode 100644 ACE/contrib/utility/Example/CommandLine/Foo/foo.cpp create mode 100644 ACE/contrib/utility/Example/ExH/BadCast/Makefile create mode 100644 ACE/contrib/utility/Example/ExH/BadCast/bad_cast.cpp create mode 100644 ACE/contrib/utility/Example/ExH/Compound/Makefile create mode 100644 ACE/contrib/utility/Example/ExH/Compound/compound.cpp create mode 100644 ACE/contrib/utility/Example/ExH/HelloWorld/Makefile create mode 100644 ACE/contrib/utility/Example/ExH/HelloWorld/hello_world.cpp create mode 100644 ACE/contrib/utility/Example/ExH/LogicToSystem/Makefile create mode 100644 ACE/contrib/utility/Example/ExH/LogicToSystem/logic_to_system.cpp create mode 100644 ACE/contrib/utility/Example/ExH/Makefile create mode 100644 ACE/contrib/utility/Example/Hetero/Container/Makefile create mode 100644 ACE/contrib/utility/Example/Hetero/Container/container.cpp create mode 100644 ACE/contrib/utility/Example/Hetero/Makefile create mode 100644 ACE/contrib/utility/Example/Introspection/InheritanceTree/Hierarchy.cpp create mode 100644 ACE/contrib/utility/Example/Introspection/InheritanceTree/Hierarchy.hpp create mode 100644 ACE/contrib/utility/Example/Introspection/InheritanceTree/Makefile create mode 100644 ACE/contrib/utility/Example/Introspection/InheritanceTree/inheritance_tree.cpp create mode 100644 ACE/contrib/utility/Example/Introspection/Makefile create mode 100644 ACE/contrib/utility/Example/Introspection/Traversal/Makefile create mode 100644 ACE/contrib/utility/Example/Introspection/Traversal/SyntaxTree.cpp create mode 100644 ACE/contrib/utility/Example/Introspection/Traversal/SyntaxTree.hpp create mode 100644 ACE/contrib/utility/Example/Introspection/Traversal/Traversal.cpp create mode 100644 ACE/contrib/utility/Example/Introspection/Traversal/Traversal.hpp create mode 100644 ACE/contrib/utility/Example/Introspection/Traversal/driver.cpp create mode 100644 ACE/contrib/utility/Example/Makefile create mode 100644 ACE/contrib/utility/Makefile create mode 100644 ACE/contrib/utility/Test/ExH/Compound/Makefile create mode 100644 ACE/contrib/utility/Test/ExH/Compound/compound.cpp create mode 100644 ACE/contrib/utility/Test/ExH/Converter/Makefile create mode 100644 ACE/contrib/utility/Test/ExH/Converter/converter.cpp create mode 100644 ACE/contrib/utility/Test/ExH/Inline/Makefile create mode 100644 ACE/contrib/utility/Test/ExH/Inline/inline.cpp create mode 100644 ACE/contrib/utility/Test/ExH/Inline/unit.cpp create mode 100644 ACE/contrib/utility/Test/ExH/Logic/DescriptiveException/Makefile create mode 100644 ACE/contrib/utility/Test/ExH/Logic/DescriptiveException/descriptive_exception.cpp create mode 100644 ACE/contrib/utility/Test/ExH/Logic/Makefile create mode 100644 ACE/contrib/utility/Test/ExH/Makefile create mode 100644 ACE/contrib/utility/Test/ExH/System/DescriptiveException/Makefile create mode 100644 ACE/contrib/utility/Test/ExH/System/DescriptiveException/descriptive_exception.cpp create mode 100644 ACE/contrib/utility/Test/ExH/System/Makefile create mode 100644 ACE/contrib/utility/Test/Introspection/Inline/Makefile create mode 100644 ACE/contrib/utility/Test/Introspection/Inline/inline.cpp create mode 100644 ACE/contrib/utility/Test/Introspection/Inline/unit.cpp create mode 100644 ACE/contrib/utility/Test/Introspection/Makefile create mode 100644 ACE/contrib/utility/Test/Makefile create mode 100644 ACE/contrib/utility/Test/ReferenceCounting/DefaultImpl/Makefile create mode 100644 ACE/contrib/utility/Test/ReferenceCounting/DefaultImpl/default_impl.cpp create mode 100644 ACE/contrib/utility/Test/ReferenceCounting/Inline/Makefile create mode 100644 ACE/contrib/utility/Test/ReferenceCounting/Inline/inline.cpp create mode 100644 ACE/contrib/utility/Test/ReferenceCounting/Inline/unit.cpp create mode 100644 ACE/contrib/utility/Test/ReferenceCounting/Interface/Makefile create mode 100644 ACE/contrib/utility/Test/ReferenceCounting/Interface/interface.cpp create mode 100644 ACE/contrib/utility/Test/ReferenceCounting/Makefile create mode 100644 ACE/contrib/utility/Test/ReferenceCounting/SmartPtr/Makefile create mode 100644 ACE/contrib/utility/Test/ReferenceCounting/SmartPtr/smart_ptr.cpp create mode 100644 ACE/contrib/utility/Test/ReferenceCounting/StrictPtr/Makefile create mode 100644 ACE/contrib/utility/Test/ReferenceCounting/StrictPtr/strict_ptr.cpp create mode 100644 ACE/contrib/utility/Test/Synch/Inline/Makefile create mode 100644 ACE/contrib/utility/Test/Synch/Inline/inline.cpp create mode 100644 ACE/contrib/utility/Test/Synch/Inline/unit.cpp create mode 100644 ACE/contrib/utility/Test/Synch/Makefile create mode 100644 ACE/contrib/utility/Utility/ExH/Compound.hpp create mode 100644 ACE/contrib/utility/Utility/ExH/Compound.tpp create mode 100644 ACE/contrib/utility/Utility/ExH/Converter.hpp create mode 100644 ACE/contrib/utility/Utility/ExH/Converter.tpp create mode 100644 ACE/contrib/utility/Utility/ExH/ExH.hpp create mode 100644 ACE/contrib/utility/Utility/ExH/Logic/DescriptiveException.hpp create mode 100644 ACE/contrib/utility/Utility/ExH/Logic/DescriptiveException.ipp create mode 100644 ACE/contrib/utility/Utility/ExH/Logic/DescriptiveException.tpp create mode 100644 ACE/contrib/utility/Utility/ExH/Logic/Exception.hpp create mode 100644 ACE/contrib/utility/Utility/ExH/Logic/Exception.ipp create mode 100644 ACE/contrib/utility/Utility/ExH/StringStreamConverter.hpp create mode 100644 ACE/contrib/utility/Utility/ExH/StringStreamConverter.ipp create mode 100644 ACE/contrib/utility/Utility/ExH/System/DescriptiveException.hpp create mode 100644 ACE/contrib/utility/Utility/ExH/System/DescriptiveException.ipp create mode 100644 ACE/contrib/utility/Utility/ExH/System/DescriptiveException.tpp create mode 100644 ACE/contrib/utility/Utility/ExH/System/Exception.hpp create mode 100644 ACE/contrib/utility/Utility/Hetero/Container.hpp create mode 100644 ACE/contrib/utility/Utility/Hetero/Shell.hpp create mode 100644 ACE/contrib/utility/Utility/Hetero/TypeList.hpp create mode 100644 ACE/contrib/utility/Utility/Hetero/TypedContainer.hpp create mode 100644 ACE/contrib/utility/Utility/Hetero/Vector.hpp create mode 100644 ACE/contrib/utility/Utility/Introspection/Introspection.hpp create mode 100644 ACE/contrib/utility/Utility/Introspection/Makefile create mode 100644 ACE/contrib/utility/Utility/Introspection/Object.cpp create mode 100644 ACE/contrib/utility/Utility/Introspection/Object.hpp create mode 100644 ACE/contrib/utility/Utility/Introspection/Object.ipp create mode 100644 ACE/contrib/utility/Utility/Introspection/TypeId.cpp create mode 100644 ACE/contrib/utility/Utility/Introspection/TypeId.hpp create mode 100644 ACE/contrib/utility/Utility/Introspection/TypeId.ipp create mode 100644 ACE/contrib/utility/Utility/Introspection/TypeId.tpp create mode 100644 ACE/contrib/utility/Utility/Introspection/TypeInfo.hpp create mode 100644 ACE/contrib/utility/Utility/Introspection/TypeInfo.ipp create mode 100644 ACE/contrib/utility/Utility/Makefile create mode 100644 ACE/contrib/utility/Utility/ReferenceCounting/DefaultImpl.hpp create mode 100644 ACE/contrib/utility/Utility/ReferenceCounting/DefaultImpl.ipp create mode 100644 ACE/contrib/utility/Utility/ReferenceCounting/ExternalLockImpl.hpp create mode 100644 ACE/contrib/utility/Utility/ReferenceCounting/ExternalLockImpl.ipp create mode 100644 ACE/contrib/utility/Utility/ReferenceCounting/Interface.hpp create mode 100644 ACE/contrib/utility/Utility/ReferenceCounting/Interface.ipp create mode 100644 ACE/contrib/utility/Utility/ReferenceCounting/Interface.tpp create mode 100644 ACE/contrib/utility/Utility/ReferenceCounting/ReferenceCounting.hpp create mode 100644 ACE/contrib/utility/Utility/ReferenceCounting/SmartPtr.hpp create mode 100644 ACE/contrib/utility/Utility/ReferenceCounting/SmartPtr.tpp create mode 100644 ACE/contrib/utility/Utility/ReferenceCounting/StrictPtr.hpp create mode 100644 ACE/contrib/utility/Utility/ReferenceCounting/StrictPtr.tpp create mode 100644 ACE/contrib/utility/Utility/Synch/Policy/Null.hpp create mode 100644 ACE/contrib/utility/Utility/Synch/Policy/Null.ipp create mode 100644 ACE/contrib/utility/Vault/StringConverter.hpp create mode 100644 ACE/contrib/utility/Vault/StringConverter.ipp create mode 100644 ACE/contrib/utility/Vault/hetero/map create mode 100644 ACE/contrib/utility/Vault/hetero/map.hpp create mode 100644 ACE/contrib/utility/Vault/hetero/map.tpp create mode 100644 ACE/contrib/utility/Version create mode 100644 ACE/contrib/utility/license.html create mode 100644 ACE/docs/ACE-FMM.html create mode 100644 ACE/docs/ACE-SSL.html create mode 100644 ACE/docs/ACE-bug-process.html create mode 100644 ACE/docs/ACE-categories.html create mode 100644 ACE/docs/ACE-development-process.html create mode 100644 ACE/docs/ACE-guidelines.html create mode 100644 ACE/docs/ACE-lessons.html create mode 100644 ACE/docs/ACE-porting.html create mode 100644 ACE/docs/ACE-subsets.html create mode 100644 ACE/docs/CE-status.txt create mode 100644 ACE/docs/Download.html create mode 100644 ACE/docs/README.tutorials create mode 100644 ACE/docs/Symbol_Versioning.html create mode 100644 ACE/docs/ace_guidelines.vsmacros create mode 100644 ACE/docs/bczar/bczar.html create mode 100644 ACE/docs/bczar/privileges.html create mode 100644 ACE/docs/exceptions.html create mode 100644 ACE/docs/index.html create mode 100644 ACE/docs/msvc_notes.txt create mode 100644 ACE/docs/run_test.txt create mode 100644 ACE/docs/svn/config create mode 100644 ACE/docs/svn/svn-prefs.reg create mode 100644 ACE/docs/usage-bugzilla.html create mode 100644 ACE/docs/wchar.txt create mode 100644 ACE/etc/DOC-way.html create mode 100644 ACE/etc/README create mode 100644 ACE/etc/ace.doxygen create mode 100644 ACE/etc/ace_man.doxygen create mode 100644 ACE/etc/ace_qos.doxygen create mode 100644 ACE/etc/ace_rmcast.doxygen create mode 100644 ACE/etc/ace_ssl.doxygen create mode 100644 ACE/etc/acexml.doxygen create mode 100644 ACE/etc/ciao.doxygen create mode 100644 ACE/etc/ciao_DAnCE.doxygen create mode 100644 ACE/etc/ciao_config_handlers.doxygen create mode 100644 ACE/etc/doxygen.css create mode 100644 ACE/etc/enforce_ace_try.diff create mode 100644 ACE/etc/index.html create mode 100644 ACE/etc/purify.solaris2 create mode 100644 ACE/etc/tao.doxygen create mode 100644 ACE/etc/tao_anytypecode.doxygen create mode 100644 ACE/etc/tao_av.doxygen create mode 100644 ACE/etc/tao_compression.doxygen create mode 100644 ACE/etc/tao_cosevent.doxygen create mode 100644 ACE/etc/tao_cosnaming.doxygen create mode 100644 ACE/etc/tao_cosnotification.doxygen create mode 100644 ACE/etc/tao_costime.doxygen create mode 100644 ACE/etc/tao_costrader.doxygen create mode 100644 ACE/etc/tao_dynamicany.doxygen create mode 100644 ACE/etc/tao_dynamicinterface.doxygen create mode 100644 ACE/etc/tao_esf.doxygen create mode 100644 ACE/etc/tao_ifr.doxygen create mode 100644 ACE/etc/tao_implrepo.doxygen create mode 100644 ACE/etc/tao_iormanip.doxygen create mode 100644 ACE/etc/tao_iortable.doxygen create mode 100644 ACE/etc/tao_pi.doxygen create mode 100644 ACE/etc/tao_pi_server.doxygen create mode 100644 ACE/etc/tao_portablegroup.doxygen create mode 100644 ACE/etc/tao_portableserver.doxygen create mode 100644 ACE/etc/tao_pss.doxygen create mode 100644 ACE/etc/tao_rtcorba.doxygen create mode 100644 ACE/etc/tao_rtevent.doxygen create mode 100644 ACE/etc/tao_rtportableserver.doxygen create mode 100644 ACE/etc/tao_security.doxygen create mode 100644 ACE/etc/tao_smartproxies.doxygen create mode 100644 ACE/etc/tao_ssliop.doxygen create mode 100644 ACE/etc/tao_strategies.doxygen create mode 100644 ACE/etc/tao_transportcurrent.doxygen create mode 100644 ACE/etc/xlc_dummy.cpp create mode 100644 ACE/examples/APG/Active_Objects/AO.cpp create mode 100644 ACE/examples/APG/Active_Objects/AO2.cpp create mode 100644 ACE/examples/APG/Active_Objects/Makefile.am create mode 100644 ACE/examples/APG/Active_Objects/active_objects.mpc create mode 100644 ACE/examples/APG/Config/ARGV_Example.cpp create mode 100644 ACE/examples/APG/Config/Get_Opt.cpp create mode 100644 ACE/examples/APG/Config/Get_Opt_Long.cpp create mode 100644 ACE/examples/APG/Config/HASTATUS_export.h create mode 100644 ACE/examples/APG/Config/HA_Status.cpp create mode 100644 ACE/examples/APG/Config/Makefile.am create mode 100644 ACE/examples/APG/Config/config.mpc create mode 100644 ACE/examples/APG/Containers/Allocator.cpp create mode 100644 ACE/examples/APG/Containers/Array.cpp create mode 100644 ACE/examples/APG/Containers/DLList.cpp create mode 100644 ACE/examples/APG/Containers/DataElement.h create mode 100644 ACE/examples/APG/Containers/Hash_Map.cpp create mode 100644 ACE/examples/APG/Containers/Hash_Map_Hash.cpp create mode 100644 ACE/examples/APG/Containers/Hash_Map_Hash.h create mode 100644 ACE/examples/APG/Containers/KeyType.h create mode 100644 ACE/examples/APG/Containers/Makefile.am create mode 100644 ACE/examples/APG/Containers/Map_Manager.cpp create mode 100644 ACE/examples/APG/Containers/Map_Manager_Specialization.cpp create mode 100644 ACE/examples/APG/Containers/Queues.cpp create mode 100644 ACE/examples/APG/Containers/RB_Tree.cpp create mode 100644 ACE/examples/APG/Containers/RB_Tree_Functors.cpp create mode 100644 ACE/examples/APG/Containers/RB_Tree_Functors.h create mode 100644 ACE/examples/APG/Containers/Sets.cpp create mode 100644 ACE/examples/APG/Containers/Stacks.cpp create mode 100644 ACE/examples/APG/Containers/containers.mpc create mode 100644 ACE/examples/APG/Logging/Callback-2.h create mode 100644 ACE/examples/APG/Logging/Callback-3.h create mode 100644 ACE/examples/APG/Logging/Callback.h create mode 100644 ACE/examples/APG/Logging/Change_Instance_Default.cpp create mode 100644 ACE/examples/APG/Logging/Change_Mask.cpp create mode 100644 ACE/examples/APG/Logging/Howto_Syslog.cpp create mode 100644 ACE/examples/APG/Logging/LogManager.h create mode 100644 ACE/examples/APG/Logging/Log_Msg_Alt.h create mode 100644 ACE/examples/APG/Logging/Makefile.am create mode 100644 ACE/examples/APG/Logging/Simple1.cpp create mode 100644 ACE/examples/APG/Logging/Simple2.cpp create mode 100644 ACE/examples/APG/Logging/Trace.h create mode 100644 ACE/examples/APG/Logging/Trace_Return.cpp create mode 100644 ACE/examples/APG/Logging/Use_Callback.cpp create mode 100644 ACE/examples/APG/Logging/Use_Callback2.cpp create mode 100644 ACE/examples/APG/Logging/Use_LogManager.cpp create mode 100644 ACE/examples/APG/Logging/Use_Logger.cpp create mode 100644 ACE/examples/APG/Logging/Use_Logging_Server.cpp create mode 100644 ACE/examples/APG/Logging/Use_Logging_Strategy.cpp create mode 100644 ACE/examples/APG/Logging/Use_Multiple_Sinks.cpp create mode 100644 ACE/examples/APG/Logging/Use_Ostream.cpp create mode 100644 ACE/examples/APG/Logging/Use_Stderr.cpp create mode 100644 ACE/examples/APG/Logging/Use_Syslog.cpp create mode 100644 ACE/examples/APG/Logging/Wrap_Macros.cpp create mode 100644 ACE/examples/APG/Logging/Wrap_Macros_Alt.cpp create mode 100644 ACE/examples/APG/Logging/client.conf create mode 100644 ACE/examples/APG/Logging/logging.mpc create mode 100644 ACE/examples/APG/Logging/logging_strategy.conf create mode 100644 ACE/examples/APG/Logging/server.conf create mode 100644 ACE/examples/APG/Makefile.am create mode 100644 ACE/examples/APG/Misc_IPC/Makefile.am create mode 100644 ACE/examples/APG/Misc_IPC/UDP_Broadcast.cpp create mode 100644 ACE/examples/APG/Misc_IPC/UDP_Multicast.cpp create mode 100644 ACE/examples/APG/Misc_IPC/UDP_Unicast.cpp create mode 100644 ACE/examples/APG/Misc_IPC/misc_ipc.mpc create mode 100644 ACE/examples/APG/Naming/EMail.h create mode 100644 ACE/examples/APG/Naming/Graph.cpp create mode 100644 ACE/examples/APG/Naming/Graph.h create mode 100644 ACE/examples/APG/Naming/Graphable_Element.cpp create mode 100644 ACE/examples/APG/Naming/Graphable_Element.h create mode 100644 ACE/examples/APG/Naming/Makefile.am create mode 100644 ACE/examples/APG/Naming/Name_Binding.h create mode 100644 ACE/examples/APG/Naming/Naming_Context.h create mode 100644 ACE/examples/APG/Naming/Netlocal.cpp create mode 100644 ACE/examples/APG/Naming/Netlocal_reader.cpp create mode 100644 ACE/examples/APG/Naming/Nodelocal.cpp create mode 100644 ACE/examples/APG/Naming/Nodelocal_shared.cpp create mode 100644 ACE/examples/APG/Naming/Nodelocal_shared_reader.cpp create mode 100644 ACE/examples/APG/Naming/Temperature_Grapher.cpp create mode 100644 ACE/examples/APG/Naming/Temperature_Grapher.h create mode 100644 ACE/examples/APG/Naming/Temperature_Grapher_Options.h create mode 100644 ACE/examples/APG/Naming/Temperature_Monitor.cpp create mode 100644 ACE/examples/APG/Naming/Temperature_Monitor.h create mode 100644 ACE/examples/APG/Naming/Temperature_Monitor2.cpp create mode 100644 ACE/examples/APG/Naming/Temperature_Monitor2.h create mode 100644 ACE/examples/APG/Naming/Temperature_Monitor_Options.h create mode 100644 ACE/examples/APG/Naming/Thermometer.h create mode 100644 ACE/examples/APG/Naming/naming.mpc create mode 100644 ACE/examples/APG/Naming/svc.conf create mode 100644 ACE/examples/APG/Proactor/HA_Proactive_Status.cpp create mode 100644 ACE/examples/APG/Proactor/HA_Proactive_Status.h create mode 100644 ACE/examples/APG/Proactor/Makefile.am create mode 100644 ACE/examples/APG/Proactor/proactor.mpc create mode 100644 ACE/examples/APG/Processes/Makefile.am create mode 100644 ACE/examples/APG/Processes/Process_Manager_Death.cpp create mode 100644 ACE/examples/APG/Processes/Process_Manager_Spawn.cpp create mode 100644 ACE/examples/APG/Processes/Process_Mutex.cpp create mode 100644 ACE/examples/APG/Processes/Spawn.cpp create mode 100644 ACE/examples/APG/Processes/processes.mpc create mode 100644 ACE/examples/APG/Reactor/Client.cpp create mode 100644 ACE/examples/APG/Reactor/Client.h create mode 100644 ACE/examples/APG/Reactor/ClientService.h create mode 100644 ACE/examples/APG/Reactor/HAStatus-AC.cpp create mode 100644 ACE/examples/APG/Reactor/HAStatus.cpp create mode 100644 ACE/examples/APG/Reactor/Makefile.am create mode 100644 ACE/examples/APG/Reactor/Reschedule.cpp create mode 100644 ACE/examples/APG/Reactor/Schedule_Timers.cpp create mode 100644 ACE/examples/APG/Reactor/Timer_Cancel.cpp create mode 100644 ACE/examples/APG/Reactor/Timer_State_Data.cpp create mode 100644 ACE/examples/APG/Reactor/Timers.cpp create mode 100644 ACE/examples/APG/Reactor/reactor.mpc create mode 100644 ACE/examples/APG/Shared_Memory/Hash_Map.cpp create mode 100644 ACE/examples/APG/Shared_Memory/Makefile.am create mode 100644 ACE/examples/APG/Shared_Memory/Malloc.cpp create mode 100644 ACE/examples/APG/Shared_Memory/Mem_Map.cpp create mode 100644 ACE/examples/APG/Shared_Memory/PI_Malloc.cpp create mode 100644 ACE/examples/APG/Shared_Memory/Pool_Growth.cpp create mode 100644 ACE/examples/APG/Shared_Memory/Record.h create mode 100644 ACE/examples/APG/Shared_Memory/shared_memory.mpc create mode 100644 ACE/examples/APG/Signals/Makefile.am create mode 100644 ACE/examples/APG/Signals/SigAction.cpp create mode 100644 ACE/examples/APG/Signals/SigGuard.cpp create mode 100644 ACE/examples/APG/Signals/SigHandler.cpp create mode 100644 ACE/examples/APG/Signals/SigHandlers.cpp create mode 100644 ACE/examples/APG/Signals/SigInfo.cpp create mode 100644 ACE/examples/APG/Signals/signals.mpc create mode 100644 ACE/examples/APG/Sockets/Basic.cpp create mode 100644 ACE/examples/APG/Sockets/Basic_Robust.cpp create mode 100644 ACE/examples/APG/Sockets/Iovec.cpp create mode 100644 ACE/examples/APG/Sockets/Makefile.am create mode 100644 ACE/examples/APG/Sockets/Server.cpp create mode 100644 ACE/examples/APG/Sockets/sockets.mpc create mode 100644 ACE/examples/APG/Streams/Answerer.cpp create mode 100644 ACE/examples/APG/Streams/BasicTask.h create mode 100644 ACE/examples/APG/Streams/Command.h create mode 100644 ACE/examples/APG/Streams/CommandModule.cpp create mode 100644 ACE/examples/APG/Streams/CommandModule.h create mode 100644 ACE/examples/APG/Streams/CommandStream.cpp create mode 100644 ACE/examples/APG/Streams/CommandStream.h create mode 100644 ACE/examples/APG/Streams/CommandTask.cpp create mode 100644 ACE/examples/APG/Streams/CommandTask.h create mode 100644 ACE/examples/APG/Streams/CommandTasks.cpp create mode 100644 ACE/examples/APG/Streams/CommandTasks.h create mode 100644 ACE/examples/APG/Streams/EndTask.h create mode 100644 ACE/examples/APG/Streams/Makefile.am create mode 100644 ACE/examples/APG/Streams/Message.h create mode 100644 ACE/examples/APG/Streams/MessageInfo.h create mode 100644 ACE/examples/APG/Streams/RecordingDevice.h create mode 100644 ACE/examples/APG/Streams/RecordingDeviceFactory.cpp create mode 100644 ACE/examples/APG/Streams/RecordingDeviceFactory.h create mode 100644 ACE/examples/APG/Streams/RecordingDevice_QC.h create mode 100644 ACE/examples/APG/Streams/RecordingDevice_Text.cpp create mode 100644 ACE/examples/APG/Streams/RecordingDevice_Text.h create mode 100644 ACE/examples/APG/Streams/RecordingDevice_USRVM.h create mode 100644 ACE/examples/APG/Streams/Util.h create mode 100644 ACE/examples/APG/Streams/streams.mpc create mode 100644 ACE/examples/APG/Svc_Config/HASTATUS_export.h create mode 100644 ACE/examples/APG/Svc_Config/HA_Configurable_Server_Dynamic.cpp create mode 100644 ACE/examples/APG/Svc_Config/HA_Configurable_Server_Static.cpp create mode 100644 ACE/examples/APG/Svc_Config/HA_Status_Dynamic.cpp create mode 100644 ACE/examples/APG/Svc_Config/HA_Status_Dynamic.h create mode 100644 ACE/examples/APG/Svc_Config/HA_Status_Static.cpp create mode 100644 ACE/examples/APG/Svc_Config/HA_Status_Static.h create mode 100644 ACE/examples/APG/Svc_Config/Makefile.am create mode 100644 ACE/examples/APG/Svc_Config/status.ini create mode 100644 ACE/examples/APG/Svc_Config/svc.conf.dynamic create mode 100644 ACE/examples/APG/Svc_Config/svc.conf.static create mode 100644 ACE/examples/APG/Svc_Config/svc_config.mpc create mode 100644 ACE/examples/APG/ThreadManagement/Async_Cancel.cpp create mode 100644 ACE/examples/APG/ThreadManagement/Coop_Cancel.cpp create mode 100644 ACE/examples/APG/ThreadManagement/ExitHandler.cpp create mode 100644 ACE/examples/APG/ThreadManagement/Makefile.am create mode 100644 ACE/examples/APG/ThreadManagement/Pool.cpp create mode 100644 ACE/examples/APG/ThreadManagement/Priorities.cpp create mode 100644 ACE/examples/APG/ThreadManagement/SecurityContext.h create mode 100644 ACE/examples/APG/ThreadManagement/Signals.cpp create mode 100644 ACE/examples/APG/ThreadManagement/Signals2.cpp create mode 100644 ACE/examples/APG/ThreadManagement/Start_Hook.cpp create mode 100644 ACE/examples/APG/ThreadManagement/State.cpp create mode 100644 ACE/examples/APG/ThreadManagement/threadmgmt.mpc create mode 100644 ACE/examples/APG/ThreadPools/Futures.cpp create mode 100644 ACE/examples/APG/ThreadPools/LF_ThreadPool.cpp create mode 100644 ACE/examples/APG/ThreadPools/Makefile.am create mode 100644 ACE/examples/APG/ThreadPools/Request_Handler.h create mode 100644 ACE/examples/APG/ThreadPools/TP_Reactor.cpp create mode 100644 ACE/examples/APG/ThreadPools/Task_ThreadPool.cpp create mode 100644 ACE/examples/APG/ThreadPools/ThreadPool.cpp create mode 100644 ACE/examples/APG/ThreadPools/threadpools.mpc create mode 100644 ACE/examples/APG/ThreadSafety/Atomic_Op.cpp create mode 100644 ACE/examples/APG/ThreadSafety/Barrier.cpp create mode 100644 ACE/examples/APG/ThreadSafety/ClientContext.h create mode 100644 ACE/examples/APG/ThreadSafety/Makefile.am create mode 100644 ACE/examples/APG/ThreadSafety/Mutex.cpp create mode 100644 ACE/examples/APG/ThreadSafety/RW_Lock.cpp create mode 100644 ACE/examples/APG/ThreadSafety/Semaphore.cpp create mode 100644 ACE/examples/APG/ThreadSafety/TSS.cpp create mode 100644 ACE/examples/APG/ThreadSafety/Tokens.cpp create mode 100644 ACE/examples/APG/ThreadSafety/Tokens_Deadlock.cpp create mode 100644 ACE/examples/APG/ThreadSafety/threadsafety.mpc create mode 100644 ACE/examples/APG/Threads/Activate.cpp create mode 100644 ACE/examples/APG/Threads/Condition_Variables.cpp create mode 100644 ACE/examples/APG/Threads/Guards.cpp create mode 100644 ACE/examples/APG/Threads/Makefile.am create mode 100644 ACE/examples/APG/Threads/Message_Blocks.cpp create mode 100644 ACE/examples/APG/Threads/Message_Queue.cpp create mode 100644 ACE/examples/APG/Threads/Message_Receiver.h create mode 100644 ACE/examples/APG/Threads/Mutexes.cpp create mode 100644 ACE/examples/APG/Threads/threads.mpc create mode 100644 ACE/examples/APG/Timers/Alarm.cpp create mode 100644 ACE/examples/APG/Timers/CB.cpp create mode 100644 ACE/examples/APG/Timers/CB.h create mode 100644 ACE/examples/APG/Timers/Makefile.am create mode 100644 ACE/examples/APG/Timers/PCB.cpp create mode 100644 ACE/examples/APG/Timers/PCB.h create mode 100644 ACE/examples/APG/Timers/PTimerDispatcher.cpp create mode 100644 ACE/examples/APG/Timers/PTimerDispatcher.h create mode 100644 ACE/examples/APG/Timers/Task.cpp create mode 100644 ACE/examples/APG/Timers/TimerDispatcher.cpp create mode 100644 ACE/examples/APG/Timers/TimerDispatcher.h create mode 100644 ACE/examples/APG/Timers/Timers.cpp create mode 100644 ACE/examples/APG/Timers/Upcall.cpp create mode 100644 ACE/examples/APG/Timers/Upcall.h create mode 100644 ACE/examples/APG/Timers/timers.mpc create mode 100644 ACE/examples/ASX/CCM_App/ASX_CCM_App.mpc create mode 100644 ACE/examples/ASX/CCM_App/CCM_App.cpp create mode 100644 ACE/examples/ASX/CCM_App/Makefile.am create mode 100644 ACE/examples/ASX/CCM_App/SC_Client.cpp create mode 100644 ACE/examples/ASX/CCM_App/SC_Server.cpp create mode 100644 ACE/examples/ASX/CCM_App/svc.conf create mode 100644 ACE/examples/ASX/CCM_App/svc.conf.xml create mode 100644 ACE/examples/ASX/Event_Server/Event_Server/Consumer_Router.cpp create mode 100644 ACE/examples/ASX/Event_Server/Event_Server/Consumer_Router.h create mode 100644 ACE/examples/ASX/Event_Server/Event_Server/Event.mpc create mode 100644 ACE/examples/ASX/Event_Server/Event_Server/Event_Analyzer.cpp create mode 100644 ACE/examples/ASX/Event_Server/Event_Server/Event_Analyzer.h create mode 100644 ACE/examples/ASX/Event_Server/Event_Server/Makefile.am create mode 100644 ACE/examples/ASX/Event_Server/Event_Server/Options.cpp create mode 100644 ACE/examples/ASX/Event_Server/Event_Server/Options.h create mode 100644 ACE/examples/ASX/Event_Server/Event_Server/Options.inl create mode 100644 ACE/examples/ASX/Event_Server/Event_Server/Peer_Router.cpp create mode 100644 ACE/examples/ASX/Event_Server/Event_Server/Peer_Router.h create mode 100644 ACE/examples/ASX/Event_Server/Event_Server/Supplier_Router.cpp create mode 100644 ACE/examples/ASX/Event_Server/Event_Server/Supplier_Router.h create mode 100644 ACE/examples/ASX/Event_Server/Event_Server/event_server.cpp create mode 100644 ACE/examples/ASX/Event_Server/Makefile.am create mode 100644 ACE/examples/ASX/Event_Server/README create mode 100644 ACE/examples/ASX/Event_Server/Transceiver/Makefile.am create mode 100644 ACE/examples/ASX/Event_Server/Transceiver/Transceiver.mpc create mode 100644 ACE/examples/ASX/Event_Server/Transceiver/transceiver.cpp create mode 100644 ACE/examples/ASX/Event_Server/Transceiver/transceiver.h create mode 100644 ACE/examples/ASX/Makefile.am create mode 100644 ACE/examples/ASX/Message_Queue/ASX_Message_Queue.mpc create mode 100644 ACE/examples/ASX/Message_Queue/Makefile.am create mode 100644 ACE/examples/ASX/Message_Queue/bounded_buffer.cpp create mode 100644 ACE/examples/ASX/Message_Queue/buffer_stream.cpp create mode 100644 ACE/examples/ASX/Message_Queue/priority_buffer.cpp create mode 100644 ACE/examples/ASX/UPIPE_Event_Server/Consumer_Router.cpp create mode 100644 ACE/examples/ASX/UPIPE_Event_Server/Consumer_Router.h create mode 100644 ACE/examples/ASX/UPIPE_Event_Server/Event_Analyzer.cpp create mode 100644 ACE/examples/ASX/UPIPE_Event_Server/Event_Analyzer.h create mode 100644 ACE/examples/ASX/UPIPE_Event_Server/Makefile.am create mode 100644 ACE/examples/ASX/UPIPE_Event_Server/Options.cpp create mode 100644 ACE/examples/ASX/UPIPE_Event_Server/Options.h create mode 100644 ACE/examples/ASX/UPIPE_Event_Server/Options.inl create mode 100644 ACE/examples/ASX/UPIPE_Event_Server/Peer_Router.cpp create mode 100644 ACE/examples/ASX/UPIPE_Event_Server/Peer_Router.h create mode 100644 ACE/examples/ASX/UPIPE_Event_Server/Supplier_Router.cpp create mode 100644 ACE/examples/ASX/UPIPE_Event_Server/Supplier_Router.h create mode 100644 ACE/examples/ASX/UPIPE_Event_Server/UPIPE_Event.mpc create mode 100644 ACE/examples/ASX/UPIPE_Event_Server/event_server.cpp create mode 100644 ACE/examples/Bounded_Packet_Relay/BPR_Drivers.cpp create mode 100644 ACE/examples/Bounded_Packet_Relay/BPR_Drivers.h create mode 100644 ACE/examples/Bounded_Packet_Relay/BPR_Drivers_T.cpp create mode 100644 ACE/examples/Bounded_Packet_Relay/BPR_Drivers_T.h create mode 100644 ACE/examples/Bounded_Packet_Relay/Bounded_Packet_Relay.mpc create mode 100644 ACE/examples/Bounded_Packet_Relay/Makefile.am create mode 100644 ACE/examples/Bounded_Packet_Relay/README create mode 100644 ACE/examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.cpp create mode 100644 ACE/examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.h create mode 100644 ACE/examples/Bounded_Packet_Relay/bpr_thread.cpp create mode 100644 ACE/examples/C++NPv1/C++NPv1.mpc create mode 100644 ACE/examples/C++NPv1/Iterative_Logging_Server.cpp create mode 100644 ACE/examples/C++NPv1/Iterative_Logging_Server.h create mode 100644 ACE/examples/C++NPv1/Logging_Client.cpp create mode 100644 ACE/examples/C++NPv1/Logging_Handler.cpp create mode 100644 ACE/examples/C++NPv1/Logging_Handler.h create mode 100644 ACE/examples/C++NPv1/Logging_Server.cpp create mode 100644 ACE/examples/C++NPv1/Logging_Server.h create mode 100644 ACE/examples/C++NPv1/Makefile.am create mode 100644 ACE/examples/C++NPv1/Process_Per_Connection_Logging_Server.cpp create mode 100644 ACE/examples/C++NPv1/Process_Per_Connection_Logging_Server.h create mode 100644 ACE/examples/C++NPv1/README create mode 100644 ACE/examples/C++NPv1/RT_Thread_Per_Connection_Logging_Server.cpp create mode 100644 ACE/examples/C++NPv1/RT_Thread_Per_Connection_Logging_Server.h create mode 100644 ACE/examples/C++NPv1/Reactive_Logging_Server.cpp create mode 100644 ACE/examples/C++NPv1/Reactive_Logging_Server.h create mode 100644 ACE/examples/C++NPv1/Reactive_Logging_Server_Ex.cpp create mode 100644 ACE/examples/C++NPv1/Reactive_Logging_Server_Ex.h create mode 100644 ACE/examples/C++NPv1/Thread_Per_Connection_Logging_Server.cpp create mode 100644 ACE/examples/C++NPv1/Thread_Per_Connection_Logging_Server.h create mode 100644 ACE/examples/C++NPv2/AC_CLD_export.h create mode 100644 ACE/examples/C++NPv2/AC_Client_Logging_Daemon.cpp create mode 100644 ACE/examples/C++NPv2/AC_Client_Logging_Daemon.h create mode 100644 ACE/examples/C++NPv2/AIO_CLD_export.h create mode 100644 ACE/examples/C++NPv2/AIO_Client_Logging_Daemon.cpp create mode 100644 ACE/examples/C++NPv2/AIO_Client_Logging_Daemon.h create mode 100644 ACE/examples/C++NPv2/C++NPv2.mpc create mode 100644 ACE/examples/C++NPv2/CLD_export.h create mode 100644 ACE/examples/C++NPv2/Client_Logging_Daemon.cpp create mode 100644 ACE/examples/C++NPv2/Configurable_Logging_Server.cpp create mode 100644 ACE/examples/C++NPv2/Logging_Acceptor.cpp create mode 100644 ACE/examples/C++NPv2/Logging_Acceptor.h create mode 100644 ACE/examples/C++NPv2/Logging_Acceptor_Ex.h create mode 100644 ACE/examples/C++NPv2/Logging_Event_Handler.cpp create mode 100644 ACE/examples/C++NPv2/Logging_Event_Handler.h create mode 100644 ACE/examples/C++NPv2/Logging_Event_Handler_Ex.cpp create mode 100644 ACE/examples/C++NPv2/Logging_Event_Handler_Ex.h create mode 100644 ACE/examples/C++NPv2/Logging_Handler.cpp create mode 100644 ACE/examples/C++NPv2/Logging_Handler.h create mode 100644 ACE/examples/C++NPv2/Makefile.am create mode 100644 ACE/examples/C++NPv2/README create mode 100644 ACE/examples/C++NPv2/Reactor_Logging_Server.cpp create mode 100644 ACE/examples/C++NPv2/Reactor_Logging_Server_Adapter.cpp create mode 100644 ACE/examples/C++NPv2/Reactor_Logging_Server_Adapter.h create mode 100644 ACE/examples/C++NPv2/Reactor_Logging_Server_T.cpp create mode 100644 ACE/examples/C++NPv2/Reactor_Logging_Server_T.h create mode 100644 ACE/examples/C++NPv2/SLD.cpp create mode 100644 ACE/examples/C++NPv2/SLDEX_export.h create mode 100644 ACE/examples/C++NPv2/SLD_export.h create mode 100644 ACE/examples/C++NPv2/SLDex.cpp create mode 100644 ACE/examples/C++NPv2/SR_Configurable_Logging_Server.cpp create mode 100644 ACE/examples/C++NPv2/Select_Reactor_Logging_Server.cpp create mode 100644 ACE/examples/C++NPv2/Server_Shutdown.cpp create mode 100644 ACE/examples/C++NPv2/Service_Reporter.cpp create mode 100644 ACE/examples/C++NPv2/Service_Reporter.h create mode 100644 ACE/examples/C++NPv2/TPCLS_export.h create mode 100644 ACE/examples/C++NPv2/TPC_Logging_Server.cpp create mode 100644 ACE/examples/C++NPv2/TPC_Logging_Server.h create mode 100644 ACE/examples/C++NPv2/TPLS_export.h create mode 100644 ACE/examples/C++NPv2/TP_Logging_Server.cpp create mode 100644 ACE/examples/C++NPv2/TP_Logging_Server.h create mode 100644 ACE/examples/C++NPv2/TP_Reactor_Logging_Server.cpp create mode 100644 ACE/examples/C++NPv2/WFMO_Reactor_Logging_Server.cpp create mode 100644 ACE/examples/C++NPv2/display_logfile.cpp create mode 100644 ACE/examples/C++NPv2/svc.conf create mode 100644 ACE/examples/ConfigViewer/ConfigTreeCtrl.cpp create mode 100644 ACE/examples/ConfigViewer/ConfigTreeCtrl.h create mode 100644 ACE/examples/ConfigViewer/ConfigViewer.mpc create mode 100644 ACE/examples/ConfigViewer/ConfigurationViewer.cpp create mode 100644 ACE/examples/ConfigViewer/ConfigurationViewer.rc create mode 100644 ACE/examples/ConfigViewer/MainFrame.cpp create mode 100644 ACE/examples/ConfigViewer/MainFrame.h create mode 100644 ACE/examples/ConfigViewer/Makefile.am create mode 100644 ACE/examples/ConfigViewer/README create mode 100644 ACE/examples/ConfigViewer/ValueDlg.cpp create mode 100644 ACE/examples/ConfigViewer/ValueDlg.h create mode 100644 ACE/examples/ConfigViewer/ValueListCtrl.cpp create mode 100644 ACE/examples/ConfigViewer/ValueListCtrl.h create mode 100644 ACE/examples/ConfigViewer/mondrian.ico create mode 100644 ACE/examples/ConfigViewer/mondrian.xpm create mode 100644 ACE/examples/ConfigViewer/stdafx.cpp create mode 100644 ACE/examples/ConfigViewer/stdafx.h create mode 100644 ACE/examples/Connection/Makefile.am create mode 100644 ACE/examples/Connection/blocking/Connection_Blocking.mpc create mode 100644 ACE/examples/Connection/blocking/Makefile.am create mode 100644 ACE/examples/Connection/blocking/README create mode 100644 ACE/examples/Connection/blocking/SPIPE-acceptor.cpp create mode 100644 ACE/examples/Connection/blocking/SPIPE-acceptor.h create mode 100644 ACE/examples/Connection/blocking/SPIPE-connector.cpp create mode 100644 ACE/examples/Connection/blocking/SPIPE-connector.h create mode 100644 ACE/examples/Connection/blocking/test_spipe_acceptor.cpp create mode 100644 ACE/examples/Connection/blocking/test_spipe_connector.cpp create mode 100644 ACE/examples/Connection/misc/Connection_Handler.cpp create mode 100644 ACE/examples/Connection/misc/Connection_Handler.h create mode 100644 ACE/examples/Connection/misc/Connection_Misc.mpc create mode 100644 ACE/examples/Connection/misc/Makefile.am create mode 100644 ACE/examples/Connection/misc/test_upipe.cpp create mode 100644 ACE/examples/Connection/misc/test_upipe.h create mode 100644 ACE/examples/Connection/non_blocking/CPP-acceptor.cpp create mode 100644 ACE/examples/Connection/non_blocking/CPP-acceptor.h create mode 100644 ACE/examples/Connection/non_blocking/CPP-connector.cpp create mode 100644 ACE/examples/Connection/non_blocking/CPP-connector.h create mode 100644 ACE/examples/Connection/non_blocking/Connection_Non_Blocking.mpc create mode 100644 ACE/examples/Connection/non_blocking/Makefile.am create mode 100644 ACE/examples/Connection/non_blocking/README create mode 100644 ACE/examples/Connection/non_blocking/test_lsock_acceptor.cpp create mode 100644 ACE/examples/Connection/non_blocking/test_lsock_connector.cpp create mode 100644 ACE/examples/Connection/non_blocking/test_sock_acceptor.cpp create mode 100644 ACE/examples/Connection/non_blocking/test_sock_connector.cpp create mode 100644 ACE/examples/Connection/non_blocking/test_spipe_acceptor.cpp create mode 100644 ACE/examples/Connection/non_blocking/test_spipe_connector.cpp create mode 100644 ACE/examples/Connection/non_blocking/test_tli_acceptor.cpp create mode 100644 ACE/examples/Connection/non_blocking/test_tli_connector.cpp create mode 100644 ACE/examples/DLL/DLL.mpc create mode 100644 ACE/examples/DLL/Magazine.h create mode 100644 ACE/examples/DLL/Makefile.am create mode 100644 ACE/examples/DLL/Newsweek.cpp create mode 100644 ACE/examples/DLL/Newsweek.h create mode 100644 ACE/examples/DLL/README create mode 100644 ACE/examples/DLL/Today.cpp create mode 100644 ACE/examples/DLL/Today.h create mode 100644 ACE/examples/DLL/test_dll.cpp create mode 100644 ACE/examples/Export/Export.mpc create mode 100644 ACE/examples/Export/Makefile.am create mode 100644 ACE/examples/Export/README create mode 100644 ACE/examples/Export/dll.cpp create mode 100644 ACE/examples/Export/dll.h create mode 100755 ACE/examples/Export/run_test.pl create mode 100644 ACE/examples/Export/test.cpp create mode 100644 ACE/examples/Export/test_export.h create mode 100644 ACE/examples/IOStream/Makefile.am create mode 100644 ACE/examples/IOStream/README create mode 100644 ACE/examples/IOStream/client/IOStream_Client.mpc create mode 100644 ACE/examples/IOStream/client/Makefile.am create mode 100644 ACE/examples/IOStream/client/iostream_client.cpp create mode 100644 ACE/examples/IOStream/server/IOStream_Server.mpc create mode 100644 ACE/examples/IOStream/server/Makefile.am create mode 100644 ACE/examples/IOStream/server/iostream_server.cpp create mode 100644 ACE/examples/IOStream/server/iostream_server.h create mode 100644 ACE/examples/IPC_SAP/ATM_SAP/CPP-client.cpp create mode 100644 ACE/examples/IPC_SAP/ATM_SAP/CPP-server.cpp create mode 100644 ACE/examples/IPC_SAP/ATM_SAP/Makefile.am create mode 100644 ACE/examples/IPC_SAP/ATM_SAP/atm_sap.mpc create mode 100644 ACE/examples/IPC_SAP/DEV_SAP/Makefile.am create mode 100644 ACE/examples/IPC_SAP/DEV_SAP/README create mode 100644 ACE/examples/IPC_SAP/DEV_SAP/reader/Makefile.am create mode 100644 ACE/examples/IPC_SAP/DEV_SAP/reader/dev_sap_reader.mpc create mode 100644 ACE/examples/IPC_SAP/DEV_SAP/reader/reader.cpp create mode 100644 ACE/examples/IPC_SAP/DEV_SAP/writer/Makefile.am create mode 100644 ACE/examples/IPC_SAP/DEV_SAP/writer/dev_sap_writer.mpc create mode 100644 ACE/examples/IPC_SAP/DEV_SAP/writer/writer.cpp create mode 100644 ACE/examples/IPC_SAP/FIFO_SAP/FIFO-Msg-client.cpp create mode 100644 ACE/examples/IPC_SAP/FIFO_SAP/FIFO-Msg-server.cpp create mode 100644 ACE/examples/IPC_SAP/FIFO_SAP/FIFO-client.cpp create mode 100644 ACE/examples/IPC_SAP/FIFO_SAP/FIFO-server.cpp create mode 100644 ACE/examples/IPC_SAP/FIFO_SAP/FIFO-test.cpp create mode 100644 ACE/examples/IPC_SAP/FIFO_SAP/Makefile.am create mode 100644 ACE/examples/IPC_SAP/FIFO_SAP/fifo_sap.mpc create mode 100644 ACE/examples/IPC_SAP/FILE_SAP/Makefile.am create mode 100644 ACE/examples/IPC_SAP/FILE_SAP/client.cpp create mode 100644 ACE/examples/IPC_SAP/FILE_SAP/file_sap_client.mpc create mode 100644 ACE/examples/IPC_SAP/FILE_SAP/testfile create mode 100644 ACE/examples/IPC_SAP/Makefile.am create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/C-inclient.cpp create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/C-inserver.cpp create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/CPP-inclient.h create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.h create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/CPP-inserver-poll.cpp create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/CPP-inserver.cpp create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/CPP-memclient.cpp create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/CPP-memserver.cpp create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/CPP-unclient.cpp create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/CPP-unserver.cpp create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/FD-unclient.cpp create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/FD-unserver.cpp create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/Makefile.am create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/README create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/local_data create mode 100755 ACE/examples/IPC_SAP/SOCK_SAP/run_test create mode 100644 ACE/examples/IPC_SAP/SOCK_SAP/sock_sap.mpc create mode 100755 ACE/examples/IPC_SAP/SOCK_SAP/summarize create mode 100644 ACE/examples/IPC_SAP/SPIPE_SAP/Makefile.am create mode 100644 ACE/examples/IPC_SAP/SPIPE_SAP/NPClient.cpp create mode 100644 ACE/examples/IPC_SAP/SPIPE_SAP/NPServer.cpp create mode 100644 ACE/examples/IPC_SAP/SPIPE_SAP/SPIPE_SAP.mpc create mode 100644 ACE/examples/IPC_SAP/SPIPE_SAP/client.cpp create mode 100644 ACE/examples/IPC_SAP/SPIPE_SAP/consumer_msg.cpp create mode 100644 ACE/examples/IPC_SAP/SPIPE_SAP/consumer_read.cpp create mode 100644 ACE/examples/IPC_SAP/SPIPE_SAP/producer_msg.cpp create mode 100644 ACE/examples/IPC_SAP/SPIPE_SAP/producer_read.cpp create mode 100644 ACE/examples/IPC_SAP/SPIPE_SAP/server.cpp create mode 100644 ACE/examples/IPC_SAP/SPIPE_SAP/shared.h create mode 100644 ACE/examples/IPC_SAP/SSL_SAP/Makefile.am create mode 100644 ACE/examples/IPC_SAP/SSL_SAP/README create mode 100644 ACE/examples/IPC_SAP/SSL_SAP/SSL-client-simple.cpp create mode 100644 ACE/examples/IPC_SAP/SSL_SAP/SSL-client-simple.h create mode 100644 ACE/examples/IPC_SAP/SSL_SAP/SSL-client.cpp create mode 100644 ACE/examples/IPC_SAP/SSL_SAP/SSL-client.h create mode 100644 ACE/examples/IPC_SAP/SSL_SAP/SSL-server-fancy.cpp create mode 100644 ACE/examples/IPC_SAP/SSL_SAP/SSL-server-fancy.h create mode 100644 ACE/examples/IPC_SAP/SSL_SAP/SSL-server-poll.cpp create mode 100644 ACE/examples/IPC_SAP/SSL_SAP/SSL-server-simple.cpp create mode 100644 ACE/examples/IPC_SAP/SSL_SAP/SSL-server.cpp create mode 100644 ACE/examples/IPC_SAP/SSL_SAP/SSL_SAP.mpc create mode 100644 ACE/examples/IPC_SAP/SSL_SAP/dummy.pem create mode 100644 ACE/examples/IPC_SAP/SSL_SAP/key.pem create mode 100644 ACE/examples/IPC_SAP/SSL_SAP/local_data create mode 100755 ACE/examples/IPC_SAP/SSL_SAP/summarize create mode 100644 ACE/examples/IPC_SAP/TLI_SAP/CPP-ATM-client.cpp create mode 100644 ACE/examples/IPC_SAP/TLI_SAP/CPP-ATM-server.cpp create mode 100644 ACE/examples/IPC_SAP/TLI_SAP/CPP-client.cpp create mode 100644 ACE/examples/IPC_SAP/TLI_SAP/CPP-server.cpp create mode 100644 ACE/examples/IPC_SAP/TLI_SAP/Makefile.am create mode 100644 ACE/examples/IPC_SAP/TLI_SAP/TLI_SAP.mpc create mode 100644 ACE/examples/IPC_SAP/TLI_SAP/db-client.cpp create mode 100644 ACE/examples/IPC_SAP/TLI_SAP/db-server.cpp create mode 100644 ACE/examples/IPC_SAP/TLI_SAP/ftp-client.cpp create mode 100644 ACE/examples/IPC_SAP/TLI_SAP/ftp-server.cpp create mode 100644 ACE/examples/IPC_SAP/UPIPE_SAP/Makefile.am create mode 100644 ACE/examples/IPC_SAP/UPIPE_SAP/UPIPE_SAP.mpc create mode 100644 ACE/examples/IPC_SAP/UPIPE_SAP/ex1.cpp create mode 100644 ACE/examples/IPC_SAP/UPIPE_SAP/ex2.cpp create mode 100644 ACE/examples/IPC_SAP/UPIPE_SAP/ex3.cpp create mode 100644 ACE/examples/Log_Msg/Log_Msg.mpc create mode 100644 ACE/examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.cpp create mode 100644 ACE/examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.h create mode 100644 ACE/examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.mpc create mode 100644 ACE/examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.rc create mode 100644 ACE/examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFCDlg.cpp create mode 100644 ACE/examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFCDlg.h create mode 100644 ACE/examples/Log_Msg/Log_Msg_MFC/MFC_Log.cpp create mode 100644 ACE/examples/Log_Msg/Log_Msg_MFC/MFC_Log.h create mode 100644 ACE/examples/Log_Msg/Log_Msg_MFC/README create mode 100644 ACE/examples/Log_Msg/Log_Msg_MFC/Resource.h create mode 100644 ACE/examples/Log_Msg/Log_Msg_MFC/StdAfx.cpp create mode 100644 ACE/examples/Log_Msg/Log_Msg_MFC/StdAfx.h create mode 100644 ACE/examples/Log_Msg/Log_Msg_MFC/res/Log_Msg_MFC.ico create mode 100644 ACE/examples/Log_Msg/Log_Msg_MFC/res/Log_Msg_MFC.rc2 create mode 100644 ACE/examples/Log_Msg/Makefile.am create mode 100644 ACE/examples/Log_Msg/README create mode 100644 ACE/examples/Log_Msg/test_callback.cpp create mode 100644 ACE/examples/Log_Msg/test_log_msg.cpp create mode 100644 ACE/examples/Log_Msg/test_ostream.cpp create mode 100644 ACE/examples/Logger/Acceptor-server/Logger_Acceptor_Server.mpc create mode 100644 ACE/examples/Logger/Acceptor-server/Makefile.am create mode 100644 ACE/examples/Logger/Acceptor-server/server_loggerd.cpp create mode 100644 ACE/examples/Logger/Acceptor-server/server_loggerd.h create mode 100644 ACE/examples/Logger/Makefile.am create mode 100644 ACE/examples/Logger/README create mode 100644 ACE/examples/Logger/client/Logger_client.mpc create mode 100644 ACE/examples/Logger/client/Makefile.am create mode 100644 ACE/examples/Logger/client/logging_app.cpp create mode 100644 ACE/examples/Logger/simple-server/Logger_Simple_Server.mpc create mode 100644 ACE/examples/Logger/simple-server/Logging_Acceptor.cpp create mode 100644 ACE/examples/Logger/simple-server/Logging_Acceptor.h create mode 100644 ACE/examples/Logger/simple-server/Logging_Handler.cpp create mode 100644 ACE/examples/Logger/simple-server/Logging_Handler.h create mode 100644 ACE/examples/Logger/simple-server/Makefile.am create mode 100644 ACE/examples/Logger/simple-server/Reactor_Singleton.h create mode 100644 ACE/examples/Logger/simple-server/server_loggerd.cpp create mode 100644 ACE/examples/Makefile.am create mode 100644 ACE/examples/Map_Manager/Makefile.am create mode 100644 ACE/examples/Map_Manager/Map_Manager.mpc create mode 100644 ACE/examples/Map_Manager/test_hash_map_manager.cpp create mode 100644 ACE/examples/Mem_Map/IO-tests/IO_Test.cpp create mode 100644 ACE/examples/Mem_Map/IO-tests/IO_Test.h create mode 100644 ACE/examples/Mem_Map/IO-tests/Makefile.am create mode 100644 ACE/examples/Mem_Map/IO-tests/Mem_Map_IO_Tests.mpc create mode 100644 ACE/examples/Mem_Map/IO-tests/test_io.cpp create mode 100644 ACE/examples/Mem_Map/Makefile.am create mode 100644 ACE/examples/Mem_Map/file-reverse/Makefile.am create mode 100644 ACE/examples/Mem_Map/file-reverse/Mem_Map_File_Reverse.mpc create mode 100644 ACE/examples/Mem_Map/file-reverse/file-reverse.cpp create mode 100644 ACE/examples/Misc/Makefile.am create mode 100644 ACE/examples/Misc/Misc.mpc create mode 100644 ACE/examples/Misc/test_XtReactor1.cpp create mode 100644 ACE/examples/Misc/test_XtReactor2.cpp create mode 100644 ACE/examples/Misc/test_dump.cpp create mode 100644 ACE/examples/Misc/test_dump.h create mode 100644 ACE/examples/Misc/test_get_opt.cpp create mode 100644 ACE/examples/Misc/test_profile_timer.cpp create mode 100644 ACE/examples/Misc/test_read_buffer.cpp create mode 100644 ACE/examples/Misc/test_set.cpp create mode 100644 ACE/examples/Misc/test_sstring.cpp create mode 100644 ACE/examples/Misc/test_timestamp.cpp create mode 100644 ACE/examples/Misc/test_trace.cpp create mode 100644 ACE/examples/NT_Service/Makefile.am create mode 100644 ACE/examples/NT_Service/NT_Service.mpc create mode 100644 ACE/examples/NT_Service/README create mode 100644 ACE/examples/NT_Service/main.cpp create mode 100644 ACE/examples/NT_Service/ntsvc.cpp create mode 100644 ACE/examples/NT_Service/ntsvc.h create mode 100644 ACE/examples/Naming/Makefile.am create mode 100644 ACE/examples/Naming/Naming.mpc create mode 100644 ACE/examples/Naming/test_multiple_contexts.cpp create mode 100644 ACE/examples/Naming/test_non_existent.cpp create mode 100644 ACE/examples/Naming/test_open.cpp create mode 100644 ACE/examples/Naming/test_writers.cpp create mode 100644 ACE/examples/OS/Makefile.am create mode 100644 ACE/examples/OS/Process/Makefile.am create mode 100644 ACE/examples/OS/Process/OS_Process.mpc create mode 100644 ACE/examples/OS/Process/README create mode 100644 ACE/examples/OS/Process/imore.cpp create mode 100644 ACE/examples/OS/Process/process.cpp create mode 100644 ACE/examples/QOS/Change_Receiver_FlowSpec/Fill_ACE_QoS.cpp create mode 100644 ACE/examples/QOS/Change_Receiver_FlowSpec/Fill_ACE_QoS.h create mode 100644 ACE/examples/QOS/Change_Receiver_FlowSpec/FlowSpec_Dbase.h create mode 100644 ACE/examples/QOS/Change_Receiver_FlowSpec/Makefile.am create mode 100644 ACE/examples/QOS/Change_Receiver_FlowSpec/QOS_Change_Receiver_FlowSpec.mpc create mode 100644 ACE/examples/QOS/Change_Receiver_FlowSpec/QoS_Signal_Handler.cpp create mode 100644 ACE/examples/QOS/Change_Receiver_FlowSpec/QoS_Signal_Handler.h create mode 100644 ACE/examples/QOS/Change_Receiver_FlowSpec/QoS_Util.cpp create mode 100644 ACE/examples/QOS/Change_Receiver_FlowSpec/QoS_Util.h create mode 100644 ACE/examples/QOS/Change_Receiver_FlowSpec/README create mode 100644 ACE/examples/QOS/Change_Receiver_FlowSpec/Receiver_QoS_Event_Handler.cpp create mode 100644 ACE/examples/QOS/Change_Receiver_FlowSpec/Receiver_QoS_Event_Handler.h create mode 100644 ACE/examples/QOS/Change_Receiver_FlowSpec/Sender_QoS_Event_Handler.cpp create mode 100644 ACE/examples/QOS/Change_Receiver_FlowSpec/Sender_QoS_Event_Handler.h create mode 100644 ACE/examples/QOS/Change_Receiver_FlowSpec/receiver.cpp create mode 100644 ACE/examples/QOS/Change_Receiver_FlowSpec/sender.cpp create mode 100644 ACE/examples/QOS/Change_Sender_TSpec/Fill_ACE_QoS.cpp create mode 100644 ACE/examples/QOS/Change_Sender_TSpec/Fill_ACE_QoS.h create mode 100644 ACE/examples/QOS/Change_Sender_TSpec/FlowSpec_Dbase.h create mode 100644 ACE/examples/QOS/Change_Sender_TSpec/Makefile.am create mode 100644 ACE/examples/QOS/Change_Sender_TSpec/QOS_Change_Sender_TSpec.mpc create mode 100644 ACE/examples/QOS/Change_Sender_TSpec/QoS_Signal_Handler.cpp create mode 100644 ACE/examples/QOS/Change_Sender_TSpec/QoS_Signal_Handler.h create mode 100644 ACE/examples/QOS/Change_Sender_TSpec/QoS_Util.cpp create mode 100644 ACE/examples/QOS/Change_Sender_TSpec/QoS_Util.h create mode 100644 ACE/examples/QOS/Change_Sender_TSpec/README create mode 100644 ACE/examples/QOS/Change_Sender_TSpec/Receiver_QoS_Event_Handler.cpp create mode 100644 ACE/examples/QOS/Change_Sender_TSpec/Receiver_QoS_Event_Handler.h create mode 100644 ACE/examples/QOS/Change_Sender_TSpec/Sender_QoS_Event_Handler.cpp create mode 100644 ACE/examples/QOS/Change_Sender_TSpec/Sender_QoS_Event_Handler.h create mode 100644 ACE/examples/QOS/Change_Sender_TSpec/receiver.cpp create mode 100644 ACE/examples/QOS/Change_Sender_TSpec/sender.cpp create mode 100644 ACE/examples/QOS/Diffserv/Makefile.am create mode 100644 ACE/examples/QOS/Diffserv/NOTES.txt create mode 100644 ACE/examples/QOS/Diffserv/QOS_Diffserv.mpc create mode 100644 ACE/examples/QOS/Diffserv/README create mode 100644 ACE/examples/QOS/Diffserv/diffserv_test.cpp create mode 100755 ACE/examples/QOS/Diffserv/run_test.pl create mode 100644 ACE/examples/QOS/Diffserv/server.cpp create mode 100644 ACE/examples/QOS/Makefile.am create mode 100644 ACE/examples/QOS/Simple/Fill_ACE_QoS.cpp create mode 100644 ACE/examples/QOS/Simple/Fill_ACE_QoS.h create mode 100644 ACE/examples/QOS/Simple/FlowSpec_Dbase.h create mode 100644 ACE/examples/QOS/Simple/Makefile.am create mode 100644 ACE/examples/QOS/Simple/QOS_Simple.mpc create mode 100644 ACE/examples/QOS/Simple/QoS_Signal_Handler.cpp create mode 100644 ACE/examples/QOS/Simple/QoS_Signal_Handler.h create mode 100644 ACE/examples/QOS/Simple/QoS_Util.cpp create mode 100644 ACE/examples/QOS/Simple/QoS_Util.h create mode 100644 ACE/examples/QOS/Simple/README create mode 100644 ACE/examples/QOS/Simple/Receiver_QoS_Event_Handler.cpp create mode 100644 ACE/examples/QOS/Simple/Receiver_QoS_Event_Handler.h create mode 100644 ACE/examples/QOS/Simple/Sender_QoS_Event_Handler.cpp create mode 100644 ACE/examples/QOS/Simple/Sender_QoS_Event_Handler.h create mode 100644 ACE/examples/QOS/Simple/receiver.cpp create mode 100644 ACE/examples/QOS/Simple/sender.cpp create mode 100644 ACE/examples/README create mode 100644 ACE/examples/Reactor/Dgram/CODgram.cpp create mode 100644 ACE/examples/Reactor/Dgram/Dgram.cpp create mode 100644 ACE/examples/Reactor/Dgram/Makefile.am create mode 100644 ACE/examples/Reactor/Dgram/Reactor_Dgram.mpc create mode 100644 ACE/examples/Reactor/FIFO/Makefile.am create mode 100644 ACE/examples/Reactor/FIFO/Reactor_FIFO.mpc create mode 100644 ACE/examples/Reactor/FIFO/client.cpp create mode 100644 ACE/examples/Reactor/FIFO/server.cpp create mode 100644 ACE/examples/Reactor/Makefile.am create mode 100644 ACE/examples/Reactor/Misc/Makefile.am create mode 100644 ACE/examples/Reactor/Misc/Reactor_Misc.mpc create mode 100644 ACE/examples/Reactor/Misc/notification.cpp create mode 100644 ACE/examples/Reactor/Misc/pingpong.cpp create mode 100644 ACE/examples/Reactor/Misc/test_demuxing.cpp create mode 100644 ACE/examples/Reactor/Misc/test_early_timeouts.cpp create mode 100644 ACE/examples/Reactor/Misc/test_event_handler_t.cpp create mode 100644 ACE/examples/Reactor/Misc/test_reactors.cpp create mode 100644 ACE/examples/Reactor/Misc/test_signals_1.cpp create mode 100644 ACE/examples/Reactor/Misc/test_signals_2.cpp create mode 100644 ACE/examples/Reactor/Misc/test_time_value.cpp create mode 100644 ACE/examples/Reactor/Misc/test_timer_queue.cpp create mode 100644 ACE/examples/Reactor/Multicast/Log_Wrapper.cpp create mode 100644 ACE/examples/Reactor/Multicast/Log_Wrapper.h create mode 100644 ACE/examples/Reactor/Multicast/Makefile.am create mode 100644 ACE/examples/Reactor/Multicast/README create mode 100644 ACE/examples/Reactor/Multicast/Reactor_Multicast.mpc create mode 100644 ACE/examples/Reactor/Multicast/client.cpp create mode 100644 ACE/examples/Reactor/Multicast/server.cpp create mode 100644 ACE/examples/Reactor/Ntalker/Makefile.am create mode 100644 ACE/examples/Reactor/Ntalker/README create mode 100644 ACE/examples/Reactor/Ntalker/Reactor_Ntalker.mpc create mode 100644 ACE/examples/Reactor/Ntalker/ntalker.cpp create mode 100644 ACE/examples/Reactor/Proactor/Aio_Platform_Test_C.cpp create mode 100644 ACE/examples/Reactor/Proactor/Makefile.am create mode 100644 ACE/examples/Reactor/Proactor/Proactor.mpc create mode 100644 ACE/examples/Reactor/Proactor/README create mode 100644 ACE/examples/Reactor/Proactor/post_completions.cpp create mode 100644 ACE/examples/Reactor/Proactor/simple_test_proactor.cpp create mode 100644 ACE/examples/Reactor/Proactor/test_aiocb.cpp create mode 100644 ACE/examples/Reactor/Proactor/test_aiocb_ace.cpp create mode 100644 ACE/examples/Reactor/Proactor/test_aiosig.cpp create mode 100644 ACE/examples/Reactor/Proactor/test_aiosig_ace.cpp create mode 100644 ACE/examples/Reactor/Proactor/test_cancel.cpp create mode 100644 ACE/examples/Reactor/Proactor/test_cancel.h create mode 100644 ACE/examples/Reactor/Proactor/test_end_event_loop.cpp create mode 100644 ACE/examples/Reactor/Proactor/test_multiple_loops.cpp create mode 100644 ACE/examples/Reactor/Proactor/test_proactor.cpp create mode 100644 ACE/examples/Reactor/Proactor/test_proactor.h create mode 100644 ACE/examples/Reactor/Proactor/test_proactor2.cpp create mode 100644 ACE/examples/Reactor/Proactor/test_proactor3.cpp create mode 100644 ACE/examples/Reactor/Proactor/test_timeout.cpp create mode 100644 ACE/examples/Reactor/Proactor/test_timeout_st.cpp create mode 100644 ACE/examples/Reactor/Proactor/test_udp_proactor.cpp create mode 100644 ACE/examples/Reactor/README create mode 100644 ACE/examples/Reactor/TP_Reactor/AcceptHandler.cpp create mode 100644 ACE/examples/Reactor/TP_Reactor/AcceptHandler.h create mode 100644 ACE/examples/Reactor/TP_Reactor/Makefile.am create mode 100644 ACE/examples/Reactor/TP_Reactor/README create mode 100644 ACE/examples/Reactor/TP_Reactor/ReadHandler.cpp create mode 100644 ACE/examples/Reactor/TP_Reactor/ReadHandler.h create mode 100644 ACE/examples/Reactor/TP_Reactor/TP_Reactor.mpc create mode 100644 ACE/examples/Reactor/TP_Reactor/client.cpp create mode 100644 ACE/examples/Reactor/TP_Reactor/common.h create mode 100644 ACE/examples/Reactor/TP_Reactor/run_test.pl create mode 100644 ACE/examples/Reactor/TP_Reactor/server.cpp create mode 100644 ACE/examples/Reactor/WFMO_Reactor/APC.cpp create mode 100644 ACE/examples/Reactor/WFMO_Reactor/Abandoned.cpp create mode 100644 ACE/examples/Reactor/WFMO_Reactor/Console_Input.cpp create mode 100644 ACE/examples/Reactor/WFMO_Reactor/Directory_Changes.cpp create mode 100644 ACE/examples/Reactor/WFMO_Reactor/Exceptions.cpp create mode 100644 ACE/examples/Reactor/WFMO_Reactor/Handle_Close.cpp create mode 100644 ACE/examples/Reactor/WFMO_Reactor/Makefile.am create mode 100644 ACE/examples/Reactor/WFMO_Reactor/Multithreading.cpp create mode 100644 ACE/examples/Reactor/WFMO_Reactor/Network_Events.cpp create mode 100644 ACE/examples/Reactor/WFMO_Reactor/Prerun_State_Changes.cpp create mode 100644 ACE/examples/Reactor/WFMO_Reactor/Registration.cpp create mode 100644 ACE/examples/Reactor/WFMO_Reactor/Registry_Changes.cpp create mode 100644 ACE/examples/Reactor/WFMO_Reactor/Removals.cpp create mode 100644 ACE/examples/Reactor/WFMO_Reactor/Suspended_Removals.cpp create mode 100644 ACE/examples/Reactor/WFMO_Reactor/Talker.cpp create mode 100644 ACE/examples/Reactor/WFMO_Reactor/Timeouts.cpp create mode 100644 ACE/examples/Reactor/WFMO_Reactor/WFMO_Reactor.mpc create mode 100644 ACE/examples/Reactor/WFMO_Reactor/Window_Messages.cpp create mode 100755 ACE/examples/Reactor/WFMO_Reactor/run_test.pl create mode 100644 ACE/examples/Registry/Makefile.am create mode 100644 ACE/examples/Registry/Registry.mpc create mode 100644 ACE/examples/Registry/test_registry_iterator.cpp create mode 100644 ACE/examples/Registry/test_registry_update.cpp create mode 100644 ACE/examples/Semaphores/README create mode 100644 ACE/examples/Semaphores/Semaphores.mpc create mode 100644 ACE/examples/Semaphores/starter.cpp create mode 100644 ACE/examples/Semaphores/worker.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/Makefile.am create mode 100644 ACE/examples/Service_Configurator/IPC-tests/README create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/Makefile.am create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/Svc_Cfg_IPC_Client.mpc create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/broadcast_client_test.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/local_data create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/local_dgram_client_test.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/local_fifo_client_test.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/local_pipe_client_test.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/local_spipe_client_test.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/local_stream_client_test.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/remote_data create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/remote_data1 create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/remote_data2 create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/remote_data3 create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/remote_data4 create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/remote_dgram_client_test.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/remote_service_directory_test.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/remote_stream_client_test.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/client/remote_thr_stream_client_test.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.h create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.inl create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.h create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.inl create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.h create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.inl create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.h create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.inl create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.h create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.inl create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_SPIPE.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_SPIPE.h create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_SPIPE.inl create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.h create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.inl create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_R_Dgram.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_R_Dgram.h create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_R_Dgram.inl create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.h create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.inl create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.h create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_Timeout.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_Timeout.h create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Handle_Timeout.inl create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Makefile.am create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/Svc_Cfg_IPC_Server.mpc create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/server_test.cpp create mode 100644 ACE/examples/Service_Configurator/IPC-tests/server/svc.conf create mode 100644 ACE/examples/Service_Configurator/Makefile.am create mode 100644 ACE/examples/Service_Configurator/Misc/Makefile.am create mode 100644 ACE/examples/Service_Configurator/Misc/README create mode 100644 ACE/examples/Service_Configurator/Misc/Service_Configurator_Misc.mpc create mode 100644 ACE/examples/Service_Configurator/Misc/Timer_Service.cpp create mode 100644 ACE/examples/Service_Configurator/Misc/Timer_Service.h create mode 100644 ACE/examples/Service_Configurator/Misc/main.cpp create mode 100644 ACE/examples/Service_Configurator/Misc/svc.conf1 create mode 100644 ACE/examples/Service_Configurator/Misc/svc.conf2 create mode 100644 ACE/examples/Shared_Malloc/Makefile.am create mode 100644 ACE/examples/Shared_Malloc/Malloc.cpp create mode 100644 ACE/examples/Shared_Malloc/Malloc.h create mode 100644 ACE/examples/Shared_Malloc/Options.cpp create mode 100644 ACE/examples/Shared_Malloc/Options.h create mode 100644 ACE/examples/Shared_Malloc/Shared_Malloc.mpc create mode 100644 ACE/examples/Shared_Malloc/test_malloc.cpp create mode 100644 ACE/examples/Shared_Malloc/test_multiple_mallocs.cpp create mode 100644 ACE/examples/Shared_Malloc/test_persistence.cpp create mode 100644 ACE/examples/Shared_Malloc/test_position_independent_malloc.cpp create mode 100644 ACE/examples/Shared_Malloc/test_position_independent_malloc.h create mode 100644 ACE/examples/Shared_Memory/Makefile.am create mode 100644 ACE/examples/Shared_Memory/Shared_Memory.mpc create mode 100644 ACE/examples/Shared_Memory/test_MM.cpp create mode 100644 ACE/examples/Shared_Memory/test_SV.cpp create mode 100644 ACE/examples/Smart_Pointers/Gadget.cpp create mode 100644 ACE/examples/Smart_Pointers/Gadget.h create mode 100644 ACE/examples/Smart_Pointers/Gadget_Factory.cpp create mode 100644 ACE/examples/Smart_Pointers/Gadget_Factory.h create mode 100644 ACE/examples/Smart_Pointers/Gadget_Impl.cpp create mode 100644 ACE/examples/Smart_Pointers/Gadget_Impl.h create mode 100644 ACE/examples/Smart_Pointers/Gadget_Part.cpp create mode 100644 ACE/examples/Smart_Pointers/Gadget_Part.h create mode 100644 ACE/examples/Smart_Pointers/Gadget_Part_Factory.cpp create mode 100644 ACE/examples/Smart_Pointers/Gadget_Part_Factory.h create mode 100644 ACE/examples/Smart_Pointers/Gadget_Part_Impl.cpp create mode 100644 ACE/examples/Smart_Pointers/Gadget_Part_Impl.h create mode 100644 ACE/examples/Smart_Pointers/Makefile.am create mode 100644 ACE/examples/Smart_Pointers/README create mode 100644 ACE/examples/Smart_Pointers/Smart_Pointers.mpc create mode 100644 ACE/examples/Smart_Pointers/Widget.cpp create mode 100644 ACE/examples/Smart_Pointers/Widget.h create mode 100644 ACE/examples/Smart_Pointers/Widget_Factory.cpp create mode 100644 ACE/examples/Smart_Pointers/Widget_Factory.h create mode 100644 ACE/examples/Smart_Pointers/Widget_Impl.cpp create mode 100644 ACE/examples/Smart_Pointers/Widget_Impl.h create mode 100644 ACE/examples/Smart_Pointers/Widget_Part.cpp create mode 100644 ACE/examples/Smart_Pointers/Widget_Part.h create mode 100644 ACE/examples/Smart_Pointers/Widget_Part_Factory.cpp create mode 100644 ACE/examples/Smart_Pointers/Widget_Part_Factory.h create mode 100644 ACE/examples/Smart_Pointers/Widget_Part_Impl.cpp create mode 100644 ACE/examples/Smart_Pointers/Widget_Part_Impl.h create mode 100644 ACE/examples/Smart_Pointers/gadget_test.cpp create mode 100644 ACE/examples/Smart_Pointers/widget_test.cpp create mode 100644 ACE/examples/Synch/Makefile.am create mode 100644 ACE/examples/Synch/README create mode 100644 ACE/examples/Synch/Synch.mpc create mode 100644 ACE/examples/Synch/proc_sema.cpp create mode 100644 ACE/examples/System_V_IPC/Makefile.am create mode 100644 ACE/examples/System_V_IPC/README create mode 100644 ACE/examples/System_V_IPC/SV_Message_Queues/MQ_Client.cpp create mode 100644 ACE/examples/System_V_IPC/SV_Message_Queues/MQ_Server.cpp create mode 100644 ACE/examples/System_V_IPC/SV_Message_Queues/Makefile.am create mode 100644 ACE/examples/System_V_IPC/SV_Message_Queues/SV_Message_Queues.mpc create mode 100644 ACE/examples/System_V_IPC/SV_Message_Queues/TMQ_Client.cpp create mode 100644 ACE/examples/System_V_IPC/SV_Message_Queues/TMQ_Server.cpp create mode 100644 ACE/examples/System_V_IPC/SV_Message_Queues/test.h create mode 100644 ACE/examples/System_V_IPC/SV_Semaphores/Makefile.am create mode 100644 ACE/examples/System_V_IPC/SV_Semaphores/SV_Semaphores.mpc create mode 100644 ACE/examples/System_V_IPC/SV_Semaphores/Semaphores_1.cpp create mode 100644 ACE/examples/System_V_IPC/SV_Semaphores/Semaphores_2.cpp create mode 100644 ACE/examples/System_V_IPC/SV_Shared_Memory/SV_Shared_Memory_Test.cpp create mode 100644 ACE/examples/System_V_IPC/SV_Shared_Memory/SV_Shared_Memory_Test.h create mode 100644 ACE/examples/Threads/Makefile.am create mode 100644 ACE/examples/Threads/TSS_Data.h create mode 100644 ACE/examples/Threads/TSS_Obj.h create mode 100644 ACE/examples/Threads/TSS_Task.h create mode 100644 ACE/examples/Threads/Threads.mpc create mode 100644 ACE/examples/Threads/auto_event.cpp create mode 100644 ACE/examples/Threads/barrier1.cpp create mode 100644 ACE/examples/Threads/barrier2.cpp create mode 100644 ACE/examples/Threads/cancel.cpp create mode 100644 ACE/examples/Threads/future1.cpp create mode 100644 ACE/examples/Threads/future2.cpp create mode 100644 ACE/examples/Threads/manual_event.cpp create mode 100644 ACE/examples/Threads/process_manager.cpp create mode 100644 ACE/examples/Threads/process_mutex.cpp create mode 100644 ACE/examples/Threads/process_semaphore.cpp create mode 100644 ACE/examples/Threads/reader_writer.cpp create mode 100644 ACE/examples/Threads/recursive_mutex.cpp create mode 100644 ACE/examples/Threads/task_five.cpp create mode 100644 ACE/examples/Threads/task_four.cpp create mode 100644 ACE/examples/Threads/task_one.cpp create mode 100644 ACE/examples/Threads/task_three.cpp create mode 100644 ACE/examples/Threads/task_two.cpp create mode 100644 ACE/examples/Threads/thread_manager.cpp create mode 100644 ACE/examples/Threads/thread_pool.cpp create mode 100644 ACE/examples/Threads/thread_specific.cpp create mode 100644 ACE/examples/Threads/thread_specific.h create mode 100644 ACE/examples/Threads/token.cpp create mode 100644 ACE/examples/Threads/tss1.cpp create mode 100644 ACE/examples/Threads/tss2.cpp create mode 100644 ACE/examples/Threads/wfmo.cpp create mode 100644 ACE/examples/Timer_Queue/Async_Timer_Queue_Test.cpp create mode 100644 ACE/examples/Timer_Queue/Async_Timer_Queue_Test.h create mode 100644 ACE/examples/Timer_Queue/Driver.cpp create mode 100644 ACE/examples/Timer_Queue/Driver.h create mode 100644 ACE/examples/Timer_Queue/Makefile.am create mode 100644 ACE/examples/Timer_Queue/README create mode 100644 ACE/examples/Timer_Queue/Reactor_Timer_Queue_Test.cpp create mode 100644 ACE/examples/Timer_Queue/Reactor_Timer_Queue_Test.h create mode 100644 ACE/examples/Timer_Queue/Thread_Timer_Queue_Test.cpp create mode 100644 ACE/examples/Timer_Queue/Thread_Timer_Queue_Test.h create mode 100644 ACE/examples/Timer_Queue/Timer_Queue.mpc create mode 100644 ACE/examples/Timer_Queue/main_async.cpp create mode 100644 ACE/examples/Timer_Queue/main_reactor.cpp create mode 100644 ACE/examples/Timer_Queue/main_thread.cpp create mode 100644 ACE/examples/Web_Crawler/Command_Processor.cpp create mode 100644 ACE/examples/Web_Crawler/Command_Processor.h create mode 100644 ACE/examples/Web_Crawler/HTTP_URL.cpp create mode 100644 ACE/examples/Web_Crawler/HTTP_URL.h create mode 100644 ACE/examples/Web_Crawler/Iterators.cpp create mode 100644 ACE/examples/Web_Crawler/Iterators.h create mode 100644 ACE/examples/Web_Crawler/Makefile.am create mode 100644 ACE/examples/Web_Crawler/Mem_Map_Stream.cpp create mode 100644 ACE/examples/Web_Crawler/Mem_Map_Stream.h create mode 100644 ACE/examples/Web_Crawler/Options.cpp create mode 100644 ACE/examples/Web_Crawler/Options.h create mode 100644 ACE/examples/Web_Crawler/README create mode 100644 ACE/examples/Web_Crawler/URL.cpp create mode 100644 ACE/examples/Web_Crawler/URL.h create mode 100644 ACE/examples/Web_Crawler/URL_Addr.cpp create mode 100644 ACE/examples/Web_Crawler/URL_Addr.h create mode 100644 ACE/examples/Web_Crawler/URL_Status.cpp create mode 100644 ACE/examples/Web_Crawler/URL_Status.h create mode 100644 ACE/examples/Web_Crawler/URL_Visitor.cpp create mode 100644 ACE/examples/Web_Crawler/URL_Visitor.h create mode 100644 ACE/examples/Web_Crawler/URL_Visitor_Factory.cpp create mode 100644 ACE/examples/Web_Crawler/URL_Visitor_Factory.h create mode 100644 ACE/examples/Web_Crawler/Web_Crawler.cpp create mode 100644 ACE/examples/Web_Crawler/Web_Crawler.h create mode 100644 ACE/examples/Web_Crawler/Web_Crawler.mpc create mode 100644 ACE/examples/Web_Crawler/main.cpp create mode 100644 ACE/examples/example_base.mpb create mode 100644 ACE/examples/examples.mwc create mode 100644 ACE/html/README create mode 100644 ACE/html/Stats/Stats.css create mode 100644 ACE/html/Stats/compilation.shtml create mode 100644 ACE/html/Stats/configuration.shtml create mode 100644 ACE/html/Stats/detailed_footprint.shtml create mode 100644 ACE/html/Stats/detailed_performance.shtml create mode 100644 ACE/html/Stats/footer.html create mode 100644 ACE/html/Stats/footprint.shtml create mode 100644 ACE/html/Stats/img.html create mode 100644 ACE/html/Stats/index.shtml create mode 100644 ACE/html/Stats/navigation.html create mode 100644 ACE/html/Stats/performance.shtml create mode 100644 ACE/html/Stats/simple_footprint.shtml create mode 100644 ACE/html/doxygen.css create mode 100644 ACE/html/index.html create mode 100644 ACE/include/makeinclude/all_in_one.GNU create mode 100644 ACE/include/makeinclude/build_dll.bor create mode 100644 ACE/include/makeinclude/build_exe.bor create mode 100644 ACE/include/makeinclude/build_lib.bor create mode 100644 ACE/include/makeinclude/build_library.bor create mode 100644 ACE/include/makeinclude/clean.bor create mode 100644 ACE/include/makeinclude/compiler.bor create mode 100644 ACE/include/makeinclude/component_check.GNU create mode 100644 ACE/include/makeinclude/decorator.bor create mode 100644 ACE/include/makeinclude/install.bor create mode 100644 ACE/include/makeinclude/macros.GNU create mode 100644 ACE/include/makeinclude/make_flags.bor create mode 100644 ACE/include/makeinclude/outputdir.bor create mode 100644 ACE/include/makeinclude/platform_aix.GNU create mode 100644 ACE/include/makeinclude/platform_aix_g++.GNU create mode 100644 ACE/include/makeinclude/platform_aix_ibm.GNU create mode 100644 ACE/include/makeinclude/platform_cray.GNU create mode 100644 ACE/include/makeinclude/platform_cygwin32.GNU create mode 100644 ACE/include/makeinclude/platform_freebsd.GNU create mode 100644 ACE/include/makeinclude/platform_g++_common.GNU create mode 100644 ACE/include/makeinclude/platform_gnuwin32_common.GNU create mode 100644 ACE/include/makeinclude/platform_hpux_aCC.GNU create mode 100644 ACE/include/makeinclude/platform_hpux_gcc.GNU create mode 100644 ACE/include/makeinclude/platform_integrity_ghs.GNU create mode 100644 ACE/include/makeinclude/platform_irix6.x_common.GNU create mode 100644 ACE/include/makeinclude/platform_irix6.x_g++.GNU create mode 100644 ACE/include/makeinclude/platform_irix6.x_sgic++.GNU create mode 100644 ACE/include/makeinclude/platform_linux.GNU create mode 100644 ACE/include/makeinclude/platform_linux_common.GNU create mode 100644 ACE/include/makeinclude/platform_linux_icc.GNU create mode 100644 ACE/include/makeinclude/platform_linux_pgi.GNU create mode 100644 ACE/include/makeinclude/platform_linux_suncc.GNU create mode 100644 ACE/include/makeinclude/platform_lynxos.GNU create mode 100644 ACE/include/makeinclude/platform_macosx.GNU create mode 100644 ACE/include/makeinclude/platform_macosx_leopard.GNU create mode 100644 ACE/include/makeinclude/platform_macosx_panther.GNU create mode 100644 ACE/include/makeinclude/platform_macosx_tiger.GNU create mode 100644 ACE/include/makeinclude/platform_mingw32.GNU create mode 100644 ACE/include/makeinclude/platform_mvs.GNU create mode 100644 ACE/include/makeinclude/platform_netbsd.GNU create mode 100644 ACE/include/makeinclude/platform_openbsd.GNU create mode 100644 ACE/include/makeinclude/platform_openvms.GNU create mode 100644 ACE/include/makeinclude/platform_qnx_neutrino.GNU create mode 100644 ACE/include/makeinclude/platform_qnx_rtp_gcc.GNU create mode 100644 ACE/include/makeinclude/platform_rtems.x_g++.GNU create mode 100644 ACE/include/makeinclude/platform_sunos5_common.GNU create mode 100644 ACE/include/makeinclude/platform_sunos5_g++.GNU create mode 100644 ACE/include/makeinclude/platform_sunos5_sunc++.GNU create mode 100644 ACE/include/makeinclude/platform_tandem.GNU create mode 100644 ACE/include/makeinclude/platform_tru64_cxx.GNU create mode 100644 ACE/include/makeinclude/platform_tru64_g++.GNU create mode 100644 ACE/include/makeinclude/platform_tru64_post.GNU create mode 100644 ACE/include/makeinclude/platform_tru64_pre.GNU create mode 100644 ACE/include/makeinclude/platform_unixware_g++.GNU create mode 100644 ACE/include/makeinclude/platform_vxworks.GNU create mode 100644 ACE/include/makeinclude/platform_vxworks5.5.x.GNU create mode 100644 ACE/include/makeinclude/platform_vxworks6.2.GNU create mode 100644 ACE/include/makeinclude/platform_vxworks6.3.GNU create mode 100644 ACE/include/makeinclude/platform_vxworks6.4.GNU create mode 100644 ACE/include/makeinclude/platform_vxworks6.5.GNU create mode 100644 ACE/include/makeinclude/platform_vxworks6.6.GNU create mode 100644 ACE/include/makeinclude/platform_win32_dmc.GNU create mode 100644 ACE/include/makeinclude/platform_win32_icc.GNU create mode 100644 ACE/include/makeinclude/platform_win32_interix.GNU create mode 100644 ACE/include/makeinclude/rules.bin.GNU create mode 100644 ACE/include/makeinclude/rules.common.GNU create mode 100644 ACE/include/makeinclude/rules.lib.GNU create mode 100644 ACE/include/makeinclude/rules.local.GNU create mode 100644 ACE/include/makeinclude/rules.nested.GNU create mode 100644 ACE/include/makeinclude/rules.nolocal.GNU create mode 100644 ACE/include/makeinclude/rules.nonested.GNU create mode 100644 ACE/include/makeinclude/wrapper_macros.GNU create mode 100644 ACE/lib/.empty create mode 100644 ACE/m4/ace.m4 create mode 100644 ACE/m4/ace_defines.m4 create mode 100644 ACE/m4/ace_func.m4 create mode 100644 ACE/m4/ace_functions.m4 create mode 100644 ACE/m4/ace_headers.m4 create mode 100644 ACE/m4/acinclude.m4 create mode 100644 ACE/m4/aio.m4 create mode 100644 ACE/m4/compiler.m4 create mode 100644 ACE/m4/config_h.m4 create mode 100644 ACE/m4/pkg.m4 create mode 100644 ACE/m4/platform.m4 create mode 100644 ACE/m4/subsets.m4 create mode 100644 ACE/m4/threads.m4 create mode 100644 ACE/m4/tls.m4 create mode 100644 ACE/netsvcs/ACE-netsvcs.html create mode 100644 ACE/netsvcs/Makefile.am create mode 100644 ACE/netsvcs/README create mode 100644 ACE/netsvcs/clients/Logger/Logger.mpc create mode 100644 ACE/netsvcs/clients/Logger/Makefile.am create mode 100644 ACE/netsvcs/clients/Logger/README create mode 100644 ACE/netsvcs/clients/Logger/direct_logging.cpp create mode 100644 ACE/netsvcs/clients/Logger/indirect_logging.cpp create mode 100644 ACE/netsvcs/clients/Makefile.am create mode 100644 ACE/netsvcs/clients/Naming/Client/Client.mpc create mode 100644 ACE/netsvcs/clients/Naming/Client/Client_Test.cpp create mode 100644 ACE/netsvcs/clients/Naming/Client/Client_Test.h create mode 100644 ACE/netsvcs/clients/Naming/Client/Makefile.am create mode 100644 ACE/netsvcs/clients/Naming/Client/README create mode 100644 ACE/netsvcs/clients/Naming/Client/main.cpp create mode 100644 ACE/netsvcs/clients/Naming/Client/svc.conf create mode 100644 ACE/netsvcs/clients/Naming/Client/svc2.conf create mode 100644 ACE/netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp create mode 100644 ACE/netsvcs/clients/Naming/Dump_Restore/Dump_Restore.h create mode 100644 ACE/netsvcs/clients/Naming/Dump_Restore/Dump_Restore.mpc create mode 100644 ACE/netsvcs/clients/Naming/Dump_Restore/Makefile.am create mode 100644 ACE/netsvcs/clients/Naming/Dump_Restore/README create mode 100644 ACE/netsvcs/clients/Naming/Dump_Restore/createfile.cpp create mode 100644 ACE/netsvcs/clients/Naming/Dump_Restore/main.cpp create mode 100644 ACE/netsvcs/clients/Naming/Makefile.am create mode 100644 ACE/netsvcs/clients/README create mode 100644 ACE/netsvcs/clients/Tokens/Makefile.am create mode 100644 ACE/netsvcs/clients/Tokens/README create mode 100644 ACE/netsvcs/clients/Tokens/collection/Makefile.am create mode 100644 ACE/netsvcs/clients/Tokens/collection/README create mode 100644 ACE/netsvcs/clients/Tokens/collection/collection.cpp create mode 100644 ACE/netsvcs/clients/Tokens/collection/rw_locks.cpp create mode 100644 ACE/netsvcs/clients/Tokens/deadlock/Makefile.am create mode 100644 ACE/netsvcs/clients/Tokens/deadlock/README create mode 100644 ACE/netsvcs/clients/Tokens/deadlock/deadlock_detection_test.cpp create mode 100644 ACE/netsvcs/clients/Tokens/invariant/Makefile.am create mode 100644 ACE/netsvcs/clients/Tokens/invariant/README create mode 100644 ACE/netsvcs/clients/Tokens/invariant/invariant.cpp create mode 100644 ACE/netsvcs/clients/Tokens/manual/Makefile.am create mode 100644 ACE/netsvcs/clients/Tokens/manual/README create mode 100644 ACE/netsvcs/clients/Tokens/manual/manual.cpp create mode 100644 ACE/netsvcs/clients/Tokens/mutex/Makefile.am create mode 100644 ACE/netsvcs/clients/Tokens/mutex/README create mode 100644 ACE/netsvcs/clients/Tokens/mutex/test_mutex.cpp create mode 100644 ACE/netsvcs/clients/Tokens/rw_lock/Makefile.am create mode 100644 ACE/netsvcs/clients/Tokens/rw_lock/README create mode 100644 ACE/netsvcs/clients/Tokens/rw_lock/rw_locks.cpp create mode 100644 ACE/netsvcs/lib/Base_Optimizer.cpp create mode 100644 ACE/netsvcs/lib/Base_Optimizer.h create mode 100644 ACE/netsvcs/lib/Client_Logging_Handler.cpp create mode 100644 ACE/netsvcs/lib/Client_Logging_Handler.h create mode 100644 ACE/netsvcs/lib/Log_Message_Receiver.cpp create mode 100644 ACE/netsvcs/lib/Log_Message_Receiver.h create mode 100644 ACE/netsvcs/lib/Makefile.am create mode 100644 ACE/netsvcs/lib/Name_Handler.cpp create mode 100644 ACE/netsvcs/lib/Name_Handler.h create mode 100644 ACE/netsvcs/lib/README create mode 100644 ACE/netsvcs/lib/Server_Logging_Handler.cpp create mode 100644 ACE/netsvcs/lib/Server_Logging_Handler.h create mode 100644 ACE/netsvcs/lib/Server_Logging_Handler_T.cpp create mode 100644 ACE/netsvcs/lib/Server_Logging_Handler_T.h create mode 100644 ACE/netsvcs/lib/TS_Clerk_Handler.cpp create mode 100644 ACE/netsvcs/lib/TS_Clerk_Handler.h create mode 100644 ACE/netsvcs/lib/TS_Server_Handler.cpp create mode 100644 ACE/netsvcs/lib/TS_Server_Handler.h create mode 100644 ACE/netsvcs/lib/Time_Request_Reply.cpp create mode 100644 ACE/netsvcs/lib/Time_Request_Reply.h create mode 100644 ACE/netsvcs/lib/Token_Handler.cpp create mode 100644 ACE/netsvcs/lib/Token_Handler.h create mode 100644 ACE/netsvcs/lib/lib.mpc create mode 100644 ACE/netsvcs/servers/Makefile.am create mode 100644 ACE/netsvcs/servers/README create mode 100644 ACE/netsvcs/servers/main.cpp create mode 100644 ACE/netsvcs/servers/servers.mpc create mode 100644 ACE/netsvcs/servers/svc.conf create mode 100644 ACE/netsvcs/servers/svc.conf.xml create mode 100644 ACE/performance-tests/Makefile.am create mode 100644 ACE/performance-tests/Misc/Makefile.am create mode 100644 ACE/performance-tests/Misc/Misc.mpc create mode 100644 ACE/performance-tests/Misc/basic_func.cpp create mode 100644 ACE/performance-tests/Misc/basic_func.h create mode 100644 ACE/performance-tests/Misc/basic_perf.cpp create mode 100644 ACE/performance-tests/Misc/childbirth_time.cpp create mode 100644 ACE/performance-tests/Misc/context_switch_time.cpp create mode 100644 ACE/performance-tests/Misc/preempt.cpp create mode 100644 ACE/performance-tests/Misc/test_guard.cpp create mode 100644 ACE/performance-tests/Misc/test_mutex.cpp create mode 100644 ACE/performance-tests/Misc/test_naming.cpp create mode 100644 ACE/performance-tests/Misc/test_singleton.cpp create mode 100644 ACE/performance-tests/Misc/test_singleton.h create mode 100644 ACE/performance-tests/README create mode 100644 ACE/performance-tests/RPC/README create mode 100644 ACE/performance-tests/RPC/RPC.mpc create mode 100644 ACE/performance-tests/RPC/client.cpp create mode 100644 ACE/performance-tests/RPC/ping.x create mode 100755 ACE/performance-tests/RPC/run_test.pl create mode 100644 ACE/performance-tests/RPC/server.c create mode 100644 ACE/performance-tests/SCTP/Makefile.am create mode 100644 ACE/performance-tests/SCTP/Options_Manager.cpp create mode 100644 ACE/performance-tests/SCTP/Options_Manager.h create mode 100644 ACE/performance-tests/SCTP/README create mode 100644 ACE/performance-tests/SCTP/README.LKSCTP create mode 100644 ACE/performance-tests/SCTP/README.OpenSS7 create mode 100644 ACE/performance-tests/SCTP/README.SCIOP create mode 100644 ACE/performance-tests/SCTP/README.SCTP create mode 100644 ACE/performance-tests/SCTP/README.SCTP_PERF_TEST create mode 100644 ACE/performance-tests/SCTP/README.SCTP_in_ACE create mode 100644 ACE/performance-tests/SCTP/SCTP.mpc create mode 100644 ACE/performance-tests/SCTP/SOCK_SEQPACK_Association_Test.cpp create mode 100644 ACE/performance-tests/SCTP/SOCK_SEQPACK_clt.cpp create mode 100644 ACE/performance-tests/SCTP/SOCK_SEQPACK_srv.cpp create mode 100755 ACE/performance-tests/SCTP/SOCK_SEQPACK_wrapper_facade.jpg create mode 100644 ACE/performance-tests/SCTP/SOCK_STREAM_clt.cpp create mode 100644 ACE/performance-tests/SCTP/SOCK_STREAM_srv.cpp create mode 100644 ACE/performance-tests/SCTP/THANKS create mode 100644 ACE/performance-tests/SCTP/hist.cpp create mode 100644 ACE/performance-tests/SCTP/hist.h create mode 100644 ACE/performance-tests/SCTP/run_spectrum.config create mode 100755 ACE/performance-tests/SCTP/run_spectrum.pl create mode 100644 ACE/performance-tests/SCTP/sample-spectrum.png create mode 100644 ACE/performance-tests/Server_Concurrency/Latency_Stats.h create mode 100644 ACE/performance-tests/Server_Concurrency/Leader_Follower/Makefile.am create mode 100644 ACE/performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.cpp create mode 100644 ACE/performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.h create mode 100644 ACE/performance-tests/Server_Concurrency/Leader_Follower/Svr_Conc_Leader_Follower.mpc create mode 100644 ACE/performance-tests/Server_Concurrency/Leader_Follower/leader_follower.cpp create mode 100644 ACE/performance-tests/Server_Concurrency/Makefile.am create mode 100644 ACE/performance-tests/Server_Concurrency/Queue_Based_Workers/Makefile.am create mode 100644 ACE/performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.cpp create mode 100644 ACE/performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.h create mode 100644 ACE/performance-tests/Server_Concurrency/Queue_Based_Workers/Svr_Conc_Queue_Based_Workers.mpc create mode 100644 ACE/performance-tests/Server_Concurrency/Queue_Based_Workers/workers.cpp create mode 100755 ACE/performance-tests/Server_Concurrency/run_test.sh create mode 100644 ACE/performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.h create mode 100644 ACE/performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.inl create mode 100644 ACE/performance-tests/Synch-Benchmarks/Base_Test/Makefile.am create mode 100644 ACE/performance-tests/Synch-Benchmarks/Base_Test/Synch_Benchmarks_Base_Test.mpc create mode 100644 ACE/performance-tests/Synch-Benchmarks/Base_Test/base_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Base_Test/mutex_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Makefile.am create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/Adaptive_Lock_Performance_Test_Base.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/Adaptive_Lock_Performance_Test_Base.h create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/Benchmark_Performance.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/Benchmark_Performance.h create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/Makefile.am create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test.h create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.h create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.inl create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/README create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/Synch_Benchmarks_Perf_Test.mpc create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/adaptive_mutex_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/adaptive_recursive_lock_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/adaptive_sema_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/condb_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/conds_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/context_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/guard_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/memory_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/mutex_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/pipe_proc_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/pipe_thr_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/recursive_lock_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/rwrd_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/rwwr_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/sema_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/sysvsema_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Perf_Test/token_test.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/README create mode 100644 ACE/performance-tests/Synch-Benchmarks/Synch_Benchmarks.mpc create mode 100644 ACE/performance-tests/Synch-Benchmarks/Synch_Lib/Benchmark_Base.cpp create mode 100644 ACE/performance-tests/Synch-Benchmarks/Synch_Lib/Benchmark_Base.h create mode 100644 ACE/performance-tests/Synch-Benchmarks/Synch_Lib/Makefile.am create mode 100644 ACE/performance-tests/Synch-Benchmarks/Synch_Lib/README create mode 100644 ACE/performance-tests/Synch-Benchmarks/Synch_Lib/Synch_Benchmarks_Synch_Lib.mpc create mode 100644 ACE/performance-tests/Synch-Benchmarks/Synch_Lib/export_mac.h create mode 100644 ACE/performance-tests/Synch-Benchmarks/benchmarks create mode 100644 ACE/performance-tests/Synch-Benchmarks/context.c create mode 100644 ACE/performance-tests/Synch-Benchmarks/context.csh create mode 100644 ACE/performance-tests/Synch-Benchmarks/orig-results create mode 100644 ACE/performance-tests/Synch-Benchmarks/results/.no_prune create mode 100755 ACE/performance-tests/Synch-Benchmarks/run_tests.pl create mode 100644 ACE/performance-tests/Synch-Benchmarks/svcconf/base_acquire.conf create mode 100644 ACE/performance-tests/Synch-Benchmarks/svcconf/base_acquire_read.conf create mode 100644 ACE/performance-tests/Synch-Benchmarks/svcconf/base_acquire_write.conf create mode 100644 ACE/performance-tests/Synch-Benchmarks/svcconf/base_tryacquire.conf create mode 100644 ACE/performance-tests/Synch-Benchmarks/svcconf/base_tryacquire_read.conf create mode 100644 ACE/performance-tests/Synch-Benchmarks/svcconf/base_tryacquire_write.conf create mode 100644 ACE/performance-tests/Synch-Benchmarks/svcconf/perf_t1.conf create mode 100644 ACE/performance-tests/Synch-Benchmarks/svcconf/perf_t16.conf create mode 100644 ACE/performance-tests/Synch-Benchmarks/svcconf/perf_t2.conf create mode 100644 ACE/performance-tests/Synch-Benchmarks/svcconf/perf_t32.conf create mode 100644 ACE/performance-tests/Synch-Benchmarks/svcconf/perf_t4.conf create mode 100644 ACE/performance-tests/Synch-Benchmarks/svcconf/perf_t64.conf create mode 100644 ACE/performance-tests/Synch-Benchmarks/svcconf/perf_t8.conf create mode 100644 ACE/performance-tests/Synch-Benchmarks/svcconf/svc.conf create mode 100644 ACE/performance-tests/Synch-Benchmarks/synch_driver.cpp create mode 100644 ACE/performance-tests/TCP/Makefile.am create mode 100644 ACE/performance-tests/TCP/README create mode 100644 ACE/performance-tests/TCP/TCP.mpc create mode 100755 ACE/performance-tests/TCP/run_test.pl create mode 100644 ACE/performance-tests/TCP/tcp_test.cpp create mode 100644 ACE/performance-tests/TTCP/ACE-C++/How_to_run_tests create mode 100644 ACE/performance-tests/TTCP/ACE-C++/run_test create mode 100644 ACE/performance-tests/TTCP/ACE-C++/wrapper-new-ttcp.cpp create mode 100644 ACE/performance-tests/TTCP/C/How_to_run_tests create mode 100644 ACE/performance-tests/TTCP/C/README create mode 100644 ACE/performance-tests/TTCP/C/new-ttcp.cpp create mode 100644 ACE/performance-tests/TTCP/C/run_test create mode 100644 ACE/performance-tests/UDP/Makefile.am create mode 100644 ACE/performance-tests/UDP/README create mode 100644 ACE/performance-tests/UDP/UDP.mpc create mode 100755 ACE/performance-tests/UDP/run_test.pl create mode 100644 ACE/performance-tests/UDP/udp_test.cpp create mode 100644 ACE/performance-tests/perf.mwc create mode 100644 ACE/protocols/Makefile.am create mode 100644 ACE/protocols/ace/HTBP/ACE_HTBP.pc.in create mode 100644 ACE/protocols/ace/HTBP/HTBP.mpc create mode 100644 ACE/protocols/ace/HTBP/HTBP_Addr.cpp create mode 100644 ACE/protocols/ace/HTBP/HTBP_Addr.h create mode 100644 ACE/protocols/ace/HTBP/HTBP_Channel.cpp create mode 100644 ACE/protocols/ace/HTBP/HTBP_Channel.h create mode 100644 ACE/protocols/ace/HTBP/HTBP_Channel.inl create mode 100644 ACE/protocols/ace/HTBP/HTBP_Environment.cpp create mode 100644 ACE/protocols/ace/HTBP/HTBP_Environment.h create mode 100644 ACE/protocols/ace/HTBP/HTBP_Export.h create mode 100644 ACE/protocols/ace/HTBP/HTBP_Filter.cpp create mode 100644 ACE/protocols/ace/HTBP/HTBP_Filter.h create mode 100644 ACE/protocols/ace/HTBP/HTBP_Filter.inl create mode 100644 ACE/protocols/ace/HTBP/HTBP_Filter_Factory.cpp create mode 100644 ACE/protocols/ace/HTBP/HTBP_Filter_Factory.h create mode 100644 ACE/protocols/ace/HTBP/HTBP_ID_Requestor.cpp create mode 100644 ACE/protocols/ace/HTBP/HTBP_ID_Requestor.h create mode 100644 ACE/protocols/ace/HTBP/HTBP_Inside_Squid_Filter.cpp create mode 100644 ACE/protocols/ace/HTBP/HTBP_Inside_Squid_Filter.h create mode 100644 ACE/protocols/ace/HTBP/HTBP_Inside_Squid_Filter.inl create mode 100644 ACE/protocols/ace/HTBP/HTBP_Macros.h create mode 100644 ACE/protocols/ace/HTBP/HTBP_Notifier.cpp create mode 100644 ACE/protocols/ace/HTBP/HTBP_Notifier.h create mode 100644 ACE/protocols/ace/HTBP/HTBP_Outside_Squid_Filter.cpp create mode 100644 ACE/protocols/ace/HTBP/HTBP_Outside_Squid_Filter.h create mode 100644 ACE/protocols/ace/HTBP/HTBP_Outside_Squid_Filter.inl create mode 100644 ACE/protocols/ace/HTBP/HTBP_Session.cpp create mode 100644 ACE/protocols/ace/HTBP/HTBP_Session.h create mode 100644 ACE/protocols/ace/HTBP/HTBP_Session.inl create mode 100644 ACE/protocols/ace/HTBP/HTBP_Stream.cpp create mode 100644 ACE/protocols/ace/HTBP/HTBP_Stream.h create mode 100644 ACE/protocols/ace/HTBP/HTID_Generator.cgi create mode 100644 ACE/protocols/ace/HTBP/Makefile.am create mode 100644 ACE/protocols/ace/HTBP/README create mode 100644 ACE/protocols/ace/Makefile.am create mode 100644 ACE/protocols/ace/RMCast/ACE_RMCast.pc.in create mode 100644 ACE/protocols/ace/RMCast/Acknowledge.cpp create mode 100644 ACE/protocols/ace/RMCast/Acknowledge.h create mode 100644 ACE/protocols/ace/RMCast/Bits.h create mode 100644 ACE/protocols/ace/RMCast/Flow.cpp create mode 100644 ACE/protocols/ace/RMCast/Flow.h create mode 100644 ACE/protocols/ace/RMCast/Fragment.cpp create mode 100644 ACE/protocols/ace/RMCast/Fragment.h create mode 100644 ACE/protocols/ace/RMCast/Link.cpp create mode 100644 ACE/protocols/ace/RMCast/Link.h create mode 100644 ACE/protocols/ace/RMCast/Makefile.am create mode 100644 ACE/protocols/ace/RMCast/Parameters.h create mode 100644 ACE/protocols/ace/RMCast/Protocol.cpp create mode 100644 ACE/protocols/ace/RMCast/Protocol.h create mode 100644 ACE/protocols/ace/RMCast/README create mode 100644 ACE/protocols/ace/RMCast/RMCast.mpc create mode 100644 ACE/protocols/ace/RMCast/RMCast_Export.h create mode 100644 ACE/protocols/ace/RMCast/Reassemble.cpp create mode 100644 ACE/protocols/ace/RMCast/Reassemble.h create mode 100644 ACE/protocols/ace/RMCast/Retransmit.cpp create mode 100644 ACE/protocols/ace/RMCast/Retransmit.h create mode 100644 ACE/protocols/ace/RMCast/Simulator.cpp create mode 100644 ACE/protocols/ace/RMCast/Simulator.h create mode 100644 ACE/protocols/ace/RMCast/Socket.cpp create mode 100644 ACE/protocols/ace/RMCast/Socket.h create mode 100644 ACE/protocols/ace/RMCast/Stack.cpp create mode 100644 ACE/protocols/ace/RMCast/Stack.h create mode 100644 ACE/protocols/ace/TMCast/ACE_TMCast.pc.in create mode 100644 ACE/protocols/ace/TMCast/Export.hpp create mode 100644 ACE/protocols/ace/TMCast/FaultDetector.hpp create mode 100644 ACE/protocols/ace/TMCast/Group.cpp create mode 100644 ACE/protocols/ace/TMCast/Group.hpp create mode 100644 ACE/protocols/ace/TMCast/GroupFwd.hpp create mode 100644 ACE/protocols/ace/TMCast/LinkListener.hpp create mode 100644 ACE/protocols/ace/TMCast/MTQueue.cpp create mode 100644 ACE/protocols/ace/TMCast/MTQueue.hpp create mode 100644 ACE/protocols/ace/TMCast/Makefile.am create mode 100644 ACE/protocols/ace/TMCast/Messaging.hpp create mode 100644 ACE/protocols/ace/TMCast/Protocol.cpp create mode 100644 ACE/protocols/ace/TMCast/Protocol.hpp create mode 100644 ACE/protocols/ace/TMCast/README create mode 100644 ACE/protocols/ace/TMCast/TMCast.mpc create mode 100644 ACE/protocols/ace/TMCast/TransactionController.hpp create mode 100644 ACE/protocols/examples/Makefile.am create mode 100644 ACE/protocols/examples/RMCast/Makefile.am create mode 100644 ACE/protocols/examples/RMCast/Send_Msg/Makefile.am create mode 100644 ACE/protocols/examples/RMCast/Send_Msg/Protocol.h create mode 100644 ACE/protocols/examples/RMCast/Send_Msg/README create mode 100644 ACE/protocols/examples/RMCast/Send_Msg/Receiver.cpp create mode 100644 ACE/protocols/examples/RMCast/Send_Msg/Send_Msg.mpc create mode 100644 ACE/protocols/examples/RMCast/Send_Msg/Sender.cpp create mode 100644 ACE/protocols/examples/TMCast/Makefile.am create mode 100644 ACE/protocols/examples/TMCast/Member/Makefile.am create mode 100644 ACE/protocols/examples/TMCast/Member/Member.mpc create mode 100644 ACE/protocols/examples/TMCast/Member/README create mode 100644 ACE/protocols/examples/TMCast/Member/member.cpp create mode 100644 ACE/protocols/examples/examples.mwc create mode 100644 ACE/protocols/protocols.mwc create mode 100644 ACE/protocols/tests/HTBP/HTBP_Config.conf create mode 100644 ACE/protocols/tests/HTBP/Makefile.am create mode 100644 ACE/protocols/tests/HTBP/README create mode 100644 ACE/protocols/tests/HTBP/Reactor_Tests/Makefile.am create mode 100755 ACE/protocols/tests/HTBP/Reactor_Tests/Reactor_Tests.mpc create mode 100644 ACE/protocols/tests/HTBP/Reactor_Tests/client.cpp create mode 100644 ACE/protocols/tests/HTBP/Reactor_Tests/inside.conf create mode 100755 ACE/protocols/tests/HTBP/Reactor_Tests/run_test.pl create mode 100644 ACE/protocols/tests/HTBP/Reactor_Tests/server.cpp create mode 100644 ACE/protocols/tests/HTBP/Reactor_Tests/test_config.h create mode 100644 ACE/protocols/tests/HTBP/Send_Large_Msg/Makefile.am create mode 100644 ACE/protocols/tests/HTBP/Send_Large_Msg/Send_Large_Msg.mpc create mode 100644 ACE/protocols/tests/HTBP/Send_Large_Msg/client.cpp create mode 100755 ACE/protocols/tests/HTBP/Send_Large_Msg/run_test.pl create mode 100644 ACE/protocols/tests/HTBP/Send_Large_Msg/server.cpp create mode 100644 ACE/protocols/tests/HTBP/Send_Recv_Tests/Makefile.am create mode 100644 ACE/protocols/tests/HTBP/Send_Recv_Tests/SendRecv_Test.mpc create mode 100644 ACE/protocols/tests/HTBP/Send_Recv_Tests/client.cpp create mode 100755 ACE/protocols/tests/HTBP/Send_Recv_Tests/run_test.pl create mode 100644 ACE/protocols/tests/HTBP/Send_Recv_Tests/server.cpp create mode 100644 ACE/protocols/tests/HTBP/ping/Makefile.am create mode 100644 ACE/protocols/tests/HTBP/ping/client.cpp create mode 100755 ACE/protocols/tests/HTBP/ping/ping.mpc create mode 100755 ACE/protocols/tests/HTBP/ping/run_test.pl create mode 100644 ACE/protocols/tests/HTBP/ping/server.cpp create mode 100644 ACE/protocols/tests/Makefile.am create mode 100644 ACE/protocols/tests/RMCast/Makefile.am create mode 100644 ACE/protocols/tests/RMCast/Protocol.h create mode 100644 ACE/protocols/tests/RMCast/RMCast.mpc create mode 100644 ACE/protocols/tests/RMCast/Receiver.cpp create mode 100644 ACE/protocols/tests/RMCast/Sender.cpp create mode 100755 ACE/protocols/tests/RMCast/run_test.pl create mode 100644 ACE/protocols/tests/tests.mwc create mode 100644 ACE/tests/ACE.bsp create mode 100644 ACE/tests/ACE_Init_Test.cpp create mode 100644 ACE/tests/ACE_Init_Test.h create mode 100644 ACE/tests/ACE_Init_Test.ico create mode 100644 ACE/tests/ACE_Init_Test.rc create mode 100644 ACE/tests/ACE_Init_Test.rc2 create mode 100644 ACE/tests/ACE_Init_TestDlg.cpp create mode 100644 ACE/tests/ACE_Init_TestDlg.h create mode 100644 ACE/tests/ACE_Init_Test_Resource.h create mode 100644 ACE/tests/ACE_Init_Test_StdAfx.h create mode 100644 ACE/tests/ACE_Test.cpp create mode 100644 ACE/tests/ARGV_Test.cpp create mode 100644 ACE/tests/Aio_Platform_Test.cpp create mode 100644 ACE/tests/Arg_Shifter_Test.cpp create mode 100644 ACE/tests/Array_Map_Test.cpp create mode 100644 ACE/tests/Atomic_Op_Test.cpp create mode 100644 ACE/tests/Auto_Event_Test.cpp create mode 100644 ACE/tests/Auto_IncDec_Test.cpp create mode 100644 ACE/tests/Barrier_Test.cpp create mode 100644 ACE/tests/Based_Pointer_Test.cpp create mode 100644 ACE/tests/Based_Pointer_Test_Lib.cpp create mode 100644 ACE/tests/Basic_Types_Test.cpp create mode 100644 ACE/tests/Bound_Ptr_Test.cpp create mode 100644 ACE/tests/Bound_Ptr_Test.h create mode 100644 ACE/tests/Buffer_Stream_Test.cpp create mode 100644 ACE/tests/Bug_1576_Regression_Test.cpp create mode 100644 ACE/tests/Bug_1890_Regression_Test.cpp create mode 100644 ACE/tests/Bug_2368_Regression_Test.cpp create mode 100644 ACE/tests/Bug_2497_Regression_Test.cpp create mode 100644 ACE/tests/Bug_2540_Regression_Test.cpp create mode 100644 ACE/tests/Bug_2609_Regression_Test.cpp create mode 100644 ACE/tests/Bug_2610_Regression_Test.cpp create mode 100644 ACE/tests/Bug_2653_Regression_Test.cpp create mode 100644 ACE/tests/Bug_2659_Regression_Test.cpp create mode 100644 ACE/tests/Bug_2815_Regression_Test.cpp create mode 100644 ACE/tests/Bug_2820_Regression_Test.cpp create mode 100644 ACE/tests/Bug_2975_Regression_Test.cpp create mode 100644 ACE/tests/Bug_3102_Regression_Test.cpp create mode 100644 ACE/tests/CDR_Array_Test.cpp create mode 100644 ACE/tests/CDR_File_Test.cpp create mode 100644 ACE/tests/CDR_Test.cpp create mode 100644 ACE/tests/CE_fostream.cpp create mode 100644 ACE/tests/CE_fostream.h create mode 100644 ACE/tests/Cache_Map_Manager_Test.cpp create mode 100644 ACE/tests/Cache_Map_Manager_Test.h create mode 100644 ACE/tests/Cached_Accept_Conn_Test.cpp create mode 100644 ACE/tests/Cached_Accept_Conn_Test.h create mode 100644 ACE/tests/Cached_Allocator_Test.cpp create mode 100644 ACE/tests/Cached_Conn_Test.cpp create mode 100644 ACE/tests/Cached_Conn_Test.h create mode 100644 ACE/tests/Capabilities_Test.cpp create mode 100644 ACE/tests/Codecs_Test.cpp create mode 100644 ACE/tests/Collection_Test.cpp create mode 100644 ACE/tests/Collection_Test.h create mode 100644 ACE/tests/Config_Test.cpp create mode 100644 ACE/tests/Config_Test.h create mode 100644 ACE/tests/Config_Test.ini create mode 100644 ACE/tests/Config_Test_Import_1.ini create mode 100644 ACE/tests/Conn_Test.cpp create mode 100644 ACE/tests/Conn_Test.h create mode 100644 ACE/tests/DLL_Test.cpp create mode 100644 ACE/tests/DLL_Test.h create mode 100644 ACE/tests/DLL_Test_Impl.cpp create mode 100644 ACE/tests/DLL_Test_Impl.h create mode 100644 ACE/tests/DLL_Test_Parent.cpp create mode 100644 ACE/tests/DLL_Test_Parent.h create mode 100644 ACE/tests/DLL_Test_Parent_Export.h create mode 100644 ACE/tests/DLList_Test.cpp create mode 100644 ACE/tests/Date_Time_Test.cpp create mode 100644 ACE/tests/Dev_Poll_Reactor_Test.cpp create mode 100644 ACE/tests/Dirent_Test.cpp create mode 100644 ACE/tests/Dynamic_Priority_Test.cpp create mode 100644 ACE/tests/Dynamic_Test.cpp create mode 100644 ACE/tests/Enum_Interfaces_Test.cpp create mode 100644 ACE/tests/Env_Value_Test.cpp create mode 100644 ACE/tests/FIFO_Test.cpp create mode 100644 ACE/tests/FlReactor_Test.cpp create mode 100644 ACE/tests/Framework_Component_DLL.cpp create mode 100644 ACE/tests/Framework_Component_DLL.h create mode 100644 ACE/tests/Framework_Component_DLL_Export.h create mode 100644 ACE/tests/Framework_Component_Test.cpp create mode 100644 ACE/tests/Framework_Component_Test.h create mode 100644 ACE/tests/Future_Set_Test.cpp create mode 100644 ACE/tests/Future_Test.cpp create mode 100644 ACE/tests/Get_Opt_Test.cpp create mode 100644 ACE/tests/Handle_Set_Test.cpp create mode 100644 ACE/tests/Hash_Map_Bucket_Iterator_Test.cpp create mode 100644 ACE/tests/Hash_Map_Manager_Test.cpp create mode 100644 ACE/tests/Hash_Multi_Map_Manager_Test.cpp create mode 100644 ACE/tests/High_Res_Timer_Test.cpp create mode 100644 ACE/tests/INET_Addr_Test.cpp create mode 100644 ACE/tests/INET_Addr_Test_IPV6.cpp create mode 100644 ACE/tests/INTEGRITY.ld create mode 100644 ACE/tests/IOStream_Test.cpp create mode 100644 ACE/tests/Integer_Truncate_Test.cpp create mode 100644 ACE/tests/Lazy_Map_Manager_Test.cpp create mode 100644 ACE/tests/Log_Msg_Backend_Test.cpp create mode 100644 ACE/tests/Log_Msg_Test.cpp create mode 100644 ACE/tests/Logging_Strategy_Test.cpp create mode 100644 ACE/tests/MEM_Stream_Test.cpp create mode 100644 ACE/tests/MEM_Stream_Test.h create mode 100644 ACE/tests/MM_Shared_Memory_Test.cpp create mode 100644 ACE/tests/MT_Reactor_Timer_Test.cpp create mode 100644 ACE/tests/MT_Reactor_Timer_Test.h create mode 100644 ACE/tests/MT_Reactor_Upcall_Test.cpp create mode 100644 ACE/tests/MT_Reference_Counted_Event_Handler_Test.cpp create mode 100644 ACE/tests/MT_Reference_Counted_Notify_Test.cpp create mode 100644 ACE/tests/MT_SOCK_Test.cpp create mode 100644 ACE/tests/Main.cpp create mode 100644 ACE/tests/Makefile.am create mode 100644 ACE/tests/Malloc_Test.cpp create mode 100644 ACE/tests/Malloc_Test.h create mode 100644 ACE/tests/Manual_Event_Test.cpp create mode 100644 ACE/tests/Map_Manager_Test.cpp create mode 100644 ACE/tests/Map_Test.cpp create mode 100644 ACE/tests/Map_Test.h create mode 100644 ACE/tests/Max_Default_Port_Test.cpp create mode 100644 ACE/tests/Max_Default_Port_Test.h create mode 100644 ACE/tests/Max_Default_Port_Test_IPV6.cpp create mode 100644 ACE/tests/Mem_Map_Test.cpp create mode 100644 ACE/tests/Memcpy_Test.cpp create mode 100644 ACE/tests/Message_Block_Test.cpp create mode 100644 ACE/tests/Message_Queue_Notifications_Test.cpp create mode 100644 ACE/tests/Message_Queue_Test.cpp create mode 100644 ACE/tests/Message_Queue_Test_Ex.cpp create mode 100644 ACE/tests/Message_Queue_Test_Ex.h create mode 100644 ACE/tests/Multicast_Test.cpp create mode 100644 ACE/tests/Multicast_Test_IPV6.cpp create mode 100644 ACE/tests/Multihomed_INET_Addr_Test.cpp create mode 100644 ACE/tests/Multihomed_INET_Addr_Test_IPV6.cpp create mode 100644 ACE/tests/Naming_Test.cpp create mode 100644 ACE/tests/Network_Adapters_Test.cpp create mode 100644 ACE/tests/Network_Adapters_Test.h create mode 100644 ACE/tests/New_Fail_Test.cpp create mode 100644 ACE/tests/NonBlocking_Conn_Test.cpp create mode 100644 ACE/tests/NonBlocking_Conn_Test.h create mode 100644 ACE/tests/Notification_Queue_Unit_Test.cpp create mode 100644 ACE/tests/Notify_Performance_Test.cpp create mode 100644 ACE/tests/OS_Test.cpp create mode 100644 ACE/tests/Object_Manager_Flipping_Test.cpp create mode 100644 ACE/tests/Object_Manager_Test.cpp create mode 100644 ACE/tests/Obstack_Test.cpp create mode 100644 ACE/tests/OrdMultiSet_Test.cpp create mode 100644 ACE/tests/Pipe_Test.cpp create mode 100644 ACE/tests/Priority_Buffer_Test.cpp create mode 100644 ACE/tests/Priority_Reactor_Test.cpp create mode 100644 ACE/tests/Priority_Reactor_Test.h create mode 100644 ACE/tests/Priority_Task_Test.cpp create mode 100644 ACE/tests/Proactor_Scatter_Gather_Test.cpp create mode 100644 ACE/tests/Proactor_Test.cpp create mode 100644 ACE/tests/Proactor_Test.h create mode 100644 ACE/tests/Proactor_Test_IPV6.cpp create mode 100644 ACE/tests/Proactor_Timer_Test.cpp create mode 100644 ACE/tests/Process_Manager_Test.cpp create mode 100644 ACE/tests/Process_Manual_Event_Test.cpp create mode 100644 ACE/tests/Process_Mutex_Test.cpp create mode 100644 ACE/tests/Process_Semaphore_Test.cpp create mode 100644 ACE/tests/Process_Strategy_Test.cpp create mode 100644 ACE/tests/Process_Strategy_Test.h create mode 100644 ACE/tests/QtReactor_Test.cpp create mode 100644 ACE/tests/QtReactor_Test.h create mode 100644 ACE/tests/RB_Tree_Test.cpp create mode 100644 ACE/tests/RB_Tree_Test.h create mode 100644 ACE/tests/README create mode 100644 ACE/tests/Reactor_Dispatch_Order_Test.cpp create mode 100644 ACE/tests/Reactor_Exceptions_Test.cpp create mode 100644 ACE/tests/Reactor_Notification_Queue_Test.cpp create mode 100644 ACE/tests/Reactor_Notify_Test.cpp create mode 100644 ACE/tests/Reactor_Performance_Test.cpp create mode 100644 ACE/tests/Reactor_Performance_Test.h create mode 100644 ACE/tests/Reactor_Registration_Test.cpp create mode 100644 ACE/tests/Reactor_Remove_Resume_Test.cpp create mode 100644 ACE/tests/Reactor_Timer_Test.cpp create mode 100644 ACE/tests/Reactors_Test.cpp create mode 100644 ACE/tests/Reader_Writer_Test.cpp create mode 100644 ACE/tests/Recursive_Condition_Bug_Test.cpp create mode 100644 ACE/tests/Recursive_Condition_Test.cpp create mode 100644 ACE/tests/Recursive_Mutex_Test.cpp create mode 100644 ACE/tests/Refcounted_Auto_Ptr_Test.cpp create mode 100644 ACE/tests/Refcounted_Auto_Ptr_Test.h create mode 100644 ACE/tests/Reference_Counted_Event_Handler_Test.cpp create mode 100644 ACE/tests/Reverse_Lock_Test.cpp create mode 100644 ACE/tests/SOCK_Connector_Test.cpp create mode 100644 ACE/tests/SOCK_Dgram_Bcast_Test.cpp create mode 100644 ACE/tests/SOCK_Dgram_Test.cpp create mode 100644 ACE/tests/SOCK_Netlink_Test.cpp create mode 100644 ACE/tests/SOCK_SEQPACK_SCTP_Test.cpp create mode 100644 ACE/tests/SOCK_Send_Recv_Test.cpp create mode 100644 ACE/tests/SOCK_Send_Recv_Test_IPV6.cpp create mode 100644 ACE/tests/SOCK_Test.cpp create mode 100644 ACE/tests/SOCK_Test_IPv6.cpp create mode 100644 ACE/tests/SPIPE_Test.cpp create mode 100644 ACE/tests/SSL/Bug_2912_Regression_Test.cpp create mode 100644 ACE/tests/SSL/Main.cpp create mode 100644 ACE/tests/SSL/Makefile.am create mode 100644 ACE/tests/SSL/SSL_Asynch_Stream_Test.cpp create mode 100644 ACE/tests/SSL/Thread_Pool_Reactor_SSL_Test.cpp create mode 100644 ACE/tests/SSL/Thread_Pool_Reactor_SSL_Test.h create mode 100644 ACE/tests/SSL/acetest.mpb create mode 100644 ACE/tests/SSL/dummy.pem create mode 100644 ACE/tests/SSL/key.pem create mode 100644 ACE/tests/SSL/tests.mpc create mode 100644 ACE/tests/SString_Test.cpp create mode 100644 ACE/tests/STL_algorithm_Test_T.cpp create mode 100644 ACE/tests/STL_algorithm_Test_T.h create mode 100644 ACE/tests/SV_Shared_Memory_Test.cpp create mode 100644 ACE/tests/Semaphore_Test.cpp create mode 100644 ACE/tests/Sendfile_Test.cpp create mode 100644 ACE/tests/Service_Config_DLL.cpp create mode 100644 ACE/tests/Service_Config_DLL.h create mode 100644 ACE/tests/Service_Config_DLL_Export.h create mode 100644 ACE/tests/Service_Config_Test.UTF-16.conf create mode 100644 ACE/tests/Service_Config_Test.UTF-16.conf.xml create mode 100644 ACE/tests/Service_Config_Test.WCHAR_T.conf create mode 100644 ACE/tests/Service_Config_Test.WCHAR_T.conf.xml create mode 100644 ACE/tests/Service_Config_Test.conf create mode 100644 ACE/tests/Service_Config_Test.conf.xml create mode 100644 ACE/tests/Service_Config_Test.cpp create mode 100644 ACE/tests/Signal_Test.cpp create mode 100644 ACE/tests/Sigset_Ops_Test.cpp create mode 100644 ACE/tests/Simple_Message_Block_Test.cpp create mode 100644 ACE/tests/Svc_Handler_Test.cpp create mode 100644 ACE/tests/TP_Reactor_Test.cpp create mode 100644 ACE/tests/TP_Reactor_Test.h create mode 100644 ACE/tests/TSS_Static_Test.cpp create mode 100644 ACE/tests/TSS_Test.cpp create mode 100644 ACE/tests/TSS_Test_Errno.h create mode 100644 ACE/tests/Task_Ex_Test.cpp create mode 100644 ACE/tests/Task_Ex_Test.h create mode 100644 ACE/tests/Task_Test.cpp create mode 100644 ACE/tests/Test_Output.cpp create mode 100644 ACE/tests/Test_Output_Export.h create mode 100644 ACE/tests/Thread_Creation_Threshold_Test.cpp create mode 100644 ACE/tests/Thread_Manager_Test.cpp create mode 100644 ACE/tests/Thread_Mutex_Test.cpp create mode 100644 ACE/tests/Thread_Pool_Reactor_Resume_Test.cpp create mode 100644 ACE/tests/Thread_Pool_Reactor_Resume_Test.h create mode 100644 ACE/tests/Thread_Pool_Reactor_Test.cpp create mode 100644 ACE/tests/Thread_Pool_Reactor_Test.h create mode 100644 ACE/tests/Thread_Pool_Test.cpp create mode 100644 ACE/tests/Time_Service_Test.cpp create mode 100644 ACE/tests/Time_Value_Test.cpp create mode 100644 ACE/tests/Timeprobe_Test.cpp create mode 100644 ACE/tests/Timer_Cancellation_Test.cpp create mode 100644 ACE/tests/Timer_Queue_Reference_Counting_Test.cpp create mode 100644 ACE/tests/Timer_Queue_Test.cpp create mode 100644 ACE/tests/TkReactor_Test.cpp create mode 100644 ACE/tests/TkReactor_Test.tcl create mode 100644 ACE/tests/Token_Strategy_Test.cpp create mode 100644 ACE/tests/Tokens_Test.cpp create mode 100644 ACE/tests/UNIXclerk.conf create mode 100644 ACE/tests/UNIXserver.conf create mode 100644 ACE/tests/UNIXtokens.conf create mode 100644 ACE/tests/UPIPE_SAP_Test.cpp create mode 100644 ACE/tests/UUID_Test.cpp create mode 100644 ACE/tests/Unbounded_Set_Test.cpp create mode 100644 ACE/tests/Unload_libACE.cpp create mode 100644 ACE/tests/Upgradable_RW_Test.cpp create mode 100644 ACE/tests/Upgradable_RW_Test.h create mode 100644 ACE/tests/Vector_Test.cpp create mode 100644 ACE/tests/WFMO_Reactor_Test.cpp create mode 100644 ACE/tests/Win32clerk.conf create mode 100644 ACE/tests/Win32server.conf create mode 100644 ACE/tests/Win32tokens.conf create mode 100644 ACE/tests/XtAthenaReactor_Test.cpp create mode 100644 ACE/tests/XtMotifReactor_Test.cpp create mode 100644 ACE/tests/acetest.mpb create mode 100644 ACE/tests/dll_test_parent_lib.mpb create mode 100755 ACE/tests/pharlap/run_pharlap_tests.bat create mode 100644 ACE/tests/randomize.h create mode 100644 ACE/tests/run_test.lst create mode 100755 ACE/tests/run_test.pl create mode 100755 ACE/tests/run_tests.check create mode 100755 ACE/tests/run_tests_remote.sh create mode 100644 ACE/tests/test_config.h create mode 100644 ACE/tests/tests.mpc create mode 100644 ACE/tests/tests.mwc create mode 100644 ACE/tests/tests_pharlap_msvc.lnk create mode 100644 ACE/tests/unload_libace.mpb create mode 100644 ACE/websvcs/Makefile.am create mode 100644 ACE/websvcs/README create mode 100644 ACE/websvcs/lib/Makefile.am create mode 100644 ACE/websvcs/lib/URL_Addr.cpp create mode 100644 ACE/websvcs/lib/URL_Addr.h create mode 100644 ACE/websvcs/lib/URL_Addr.inl create mode 100644 ACE/websvcs/lib/lib.mpc create mode 100644 ACE/websvcs/lib/websvcs_export.h create mode 100644 ACE/websvcs/tests/Makefile.am create mode 100644 ACE/websvcs/tests/Test_URL_Addr.cpp create mode 100644 ACE/websvcs/tests/tests.mpc diff --git a/ACE/ACE-INSTALL.html b/ACE/ACE-INSTALL.html new file mode 100644 index 00000000000..78f54f203b1 --- /dev/null +++ b/ACE/ACE-INSTALL.html @@ -0,0 +1,3010 @@ + + + Building and Installing ACE and Its Auxiliary Libraries and Services + + + + + +
+

Building and Installing ACE and Its Auxiliary Libraries and Services

+ +

Synopsis

+ +The file explains how to build and install ACE, its Network Services, +test suite and examples on the various OS platforms and compilers that +it has been ported to. Please consult the NEWS and +ChangeLog files to see whether any recent changes +to the release will affect your code. In addition, you should check +out our development +process. As you start working with ACE, we suggest you get copies +of the C++NPv1, C++NPv2, and +APG books to help +guide you after you've built and installed ACE. You should also +consult the ACE +Frequently Made Mistakes page. If you encounter any problems or +would like to request an enhancement, then use our bug +tracking system to submit a report in accordance with our bug +report process.

+ +

Document Index

+ + + + +


+

Platforms, C++ Compilers, and Support

+ +

ACE has been ported to a large number of platforms using many different +compilers over the years. +The DOC group, +Riverace, +OCI, +Remedy IT, and members of the ACE +user community have all contributed ports to make ACE the successful +and far-reaching toolkit it is today. Any UNIX/POSIX/Windows +variation is probably an easy target platform for ACE. If you have +porting questions or have a problem +compiling the ACE source distribution, please contact one of the +commercial support companies, or send a copy of the +PROBLEM-REPORT-FORM, located in the +ACE_wrappers directory, to either the ACE +Newsgroup or the ace-users +mailing list. +The DOC groups at Washington University, UC Irvine, and Vanderbilt +University provide only "best effort" support for non-sponsors for the +latest release, as described in +docs/ACE-bug-process.html. +Thus, if you need more "predictable" help, or help with earlier versions of +ACE, it's recommend that you check out the +list of +commercial support companies for additional assistance. +

+

The responsibility for maintaining ACE across the wide range of +supported platforms is divided among a few different groups: +

+The +build scoreboard +records the current status of build and regression testing during +development by all of the above groups. It is available to all users wishing +to provide build results. Members of the ACE community that maintain ACE on +platforms not maintained by the DOC group, Riverace, OCI, or Remedy IT are +encouraged to provide build and regression test results for the scoreboard +to ensure that all in-use platforms are represented. +See the autobuild README for more information about +how to set up a build; contact one of the above groups to inquire about how +to get your build results recorded on the scoreboard.

+

Because older +platforms that are not maintained tend to fall into a broken state and +clutter the ACE sources with code that is no longer used, the development +team reserves the right to remove ACE configuration files and source code +specific to inactive platform configurations that are not +listed on the scoreboard.

+

The table below summarizes each group's role and where you can get more +detailed information. For information on TAO's platform coverage and +support, please also see TAO's install +document.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Groups Involved in ACE Development and Support
GroupPlatformsFor more information
DOC GroupWindows 2000, XP (MSVC++ 7.1, and 8); + many versions of Linux/Intel (many compilers), Linux/IA64 (GCC). + DOC sites at ISIS, + UCI and + Washington University +
RiveraceOffers ACE + training, + support and + consulting services + for many platforms including AIX, HP-UX, Linux, Solaris, and Windows. + Riverace's ACE + Support page.
OCIMaintains ACE on certain platforms required for their TAO + software and service offerings. + OCI's web site and + the TAO install document
Remedy ITMaintains ACE on many platforms required for their ACE and + TAO service offerings. We support AIX, Borland C++ Builder 6/2006, + CodeGear C++ Builder 2007, CodeGear RAD Studio 2007, + CBuilderX 1.0, MinGW, Microsoft Visual C++ 7.1/8/9, GCC, + Cygwin, VxWorks 5.5.x & 6.x, OpenVMS 8.2-1 & 8.3 on Alpha and IA64, + BlueCAT Linux, RedHat Linux, Fedora, + Tru64, SuSE Linux on Alpha/IA32/EM64T/IA64, RTEMS, QNX, LynxOS 4.0/4.2, + HPUX 11i v1/v2 32/64 bit on PA-RISC, and + HPUX 11i v2/v3 on IA64. The Intel C++ compiler is supported on + Windows 32/64bit, Linux IA32/EM64T/IA64. + Remedy IT web site and + the TAO install document +
PrismTechMaintains ACE on certain platforms required for their TAO + software and service offerings, including LynxOS. + PrismTech's web site
ACE user communityResponsible for continued maintenance and testing of platforms + to which ACE has been ported, but aren't supported by the + above groups. These include + Digital UNIX (Compaq Tru64) 4.0 and 5.0; + IRIX 6.x; UnixWare 7.1.0; + Linux on PPC; OpenMVS; + Tandem; SCO; FreeBSD; NetBSD; OpenBSD; + Macintosh OS X; OS/9; PharLap ETS 13; + QNX RTP and Neutrino 2.0; Interix (Windows Services for Unix) +
Not maintainedThe following platforms have been ported to in the past but are + no longer maintained and may be removed from ACE at any time. + If you want to have support for these environments contact one + of the commercial support organisations. The platforms include: + Chorus; DG/UX; HP-UX 9, 10 and 11.00; pSOS; + SunOS 4.x and Solaris with SunC++ 4.x; VxWorks 5.4 and earlier; + Microsoft Visual C++ 5, 6, and 7.0; Borland C++ Builder 4 and 5. + For up-to-date listings on platform that are deprecated and pending + removal from ACE, please see the NEWS file. +

+ +

Although the DOC group has provided outstanding support for ACE +over the years, ACE's success has greatly increased the amount of +effort required to keep up with its maintenance, answer users' +questions, and give design guidance. Riverace offers world-class +commercial services to support ACE users. OCI, PrismTech, and Remedy +offer similar services for TAO, allowing the DOC group's primary focus +to shift back to their main goal: research. The DOC group is +fundamentally focused on (and funded +by) advanced R&D projects. The group continues to be +intimately involved in ACE+TAO development and maintenance, but with +revised priorities for maintenance. The bug +fixing policies followed by the DOC group are designed to strike a +balance between their many research +projects and their commitment to the ACE+TAO user +community. Naturally, we will be happy to accept well-tested +patches from the ACE+TAO user community for any platforms that aren't +supported by the DOC group, Riverace, OCI or Remedy IT.

+ +


+

Installation prerequisites

+

+ACE (as well as TAO and CIAO) use MPC (MakeProjectCreator) to generate +files used by all supported build tools (such as GNUmakefiles for UNIX based +platforms, sln and vcproj files for VC71/VC8 and Borland makefiles) on various +platforms. To help new users to bootstrap quickly the release bundles +of ACE (as well as TAO and CIAO) include all needed files to use the build +instructions in this document. +

+

+If it is necessary to generate +files for build tools for other compilers, one must +run MPC to generate the +appropriate files. Please see USAGE, README, and README for ACE files for +details. The options that have been used to generate the above build +files can be found in +global.features file. +

+ +
+

Building and Installing ACE

+ +The following sections explain how to build ACE on: + + +

General Rules

+ + +
+

Building and Installing ACE on UNIX

+ +As of ACE 5.4, you can choose between two methods of building ACE on +UNIX: +
    +
  1. GNU Autoconf
  2. +
  3. Traditional ACE/GNU Make Configuration
  4. +
+The build process for Windows is different from both of +the UNIX methods. + +

Building ACE with GNU Autoconf

+

+GNU Autoconf support is available in the ACE and ACE+TAO distributions +in the DOC group website. Support for Autoconf is not included in +distributions that contain CIAO. +

+

+GNU Autoconf support has been partially present in a number of ACE +versions. However, ACE 5.4 was the first version that supported it in +earnest. The range of platforms on which GNU autoconf support is regularly +tested is not as broad as for the traditional configuration method, so you +should be careful to test the resulting ACE library before using it in +your applications. You can review the + +build scoreboard to check the currently tested set of autoconfigured +platforms (look for autoconf in the platform name). +Any help you can lend to improve the ACE build process using GNU Autoconf +would be very much appreciated. Please send any fixes to the +ACE users mailing list +using the standard PROBLEM-REPORT-FORM. +

+

+The kit has been bootstrapped so you do not need to install the GNU +Autotools (autoconf, automake, libtool) unless you want to participate +in testing and developing this +process further or if you are working directly off of sources in the +ACE subversion repository. To simply configure and build ACE, do: +

    +
  1. cd to the top-level ACE_wrappers directory.
  2. +
  3. Create a subdirectory to hold your build's configuration and built + ACE version, and then change to the new directory: +
           mkdir build
    +       cd build
    + Note that you do not run the create_ace_build.pl utility + mentioned in the Cloning the Source Tree + section. The configure script takes care of creating all files + and links that are needed.
  4. +
  5. Configure ACE for your platform by issuing the following command: +
           ../configure [options]
    + options can be a variable setting (such as setting + CXX to your C++ compiler command) any standard GNU + configure options, or any of the following ACE configure options + (default values are in parentheses): +
      +
    • --enable-alloca (no): Enable alloca() + support.
    • +
    • --enable-debug (yes): Build ACE with debugging + support.
    • +
    • --enable-exceptions (yes): Build ACE with C++ + exception support compiled in.
    • +
    • --enable-fast (no): Use the Sun C++ -fast + option to build. Only used on Solaris.
    • +
    • --enable-ipv4-ipv6 (no): Enable IPv4/IPv6 migration support.
    • +
    • --enable-ipv6 (no): Enable IPv6 support.
    • +
    • --enable-inline (yes): Enable inline functions.
    • +
    • --enable-optimize (yes): Enable building optimized.
    • +
    • --enable-prof (no): Enable profiling support.
    • +
    • --enable-purify (no): Build with support for + IBM Rational Purify.
    • +
    • --enable-quantify (no): Build with support for + IBM Rational Quantify.
    • +
    • --enable-repo (no): Enable the GNU g++ + -frepo option. Only useful for pre-3.0 g++.
    • +
    • --enable-stdcpplib (yes): Build with support for the + standard C++ library, as opposed to the older iostreams library.
    • +
    • --enable-log-msg-prop (yes): Enable + ACE_Log_Msg property propagation to ACE-created + threads.
    • +
    • --enable-logging (yes): Enable the ACE logging + macros.
    • +
    • --enable-malloc-stats (no): Compile in additional code + for collecting memory allocation statistics.
    • +
    • --enable-pi-pointers (yes): Enable + position-independent pointers for shared memory classes.
    • +
    • --enable-probe (no): Enable the + ACE_Timeprobe class.
    • +
    • --enable-reentrant (yes): Enable use of platform's + reentrant functions.
    • +
    • --enable-static-obj-mgr (yes): Enable use of a + static ACE_Object_Manager.
    • +
    • --enable-threads (yes): Enable threading support.
    • +
    • --enable-verb-not-sup (no): Enable verbose ENOTSUP + reports at run time.
    • +
    • --enable-trace (no): Enable ACE execution tracing + support.
    • +
    • --enable-fl-reactor (no): Enable support for the + ACE_FlReactor class.
    • +
    • --enable-qt-reactor (no): Enable support for the + ACE_QtReactor class.
    • +
    • --enable-tk-reactor (no): Enable support for the + ACE_TkReactor class.
    • +
    • --enable-xt-reactor (no): Enable support for the + ACE_XtReactor class.
    • +
    • --enable-gperf (yes): Build the implementation of + gperf that comes with ACE.
    • +
    • --enable-qos (no): Include the ACE_QoS library when + building ACE.
    • +
    • --enable-ssl (yes): Include the ACE_SSL library when + building ACE. Requires the SSL components to be available using the + compiler's and linker's default search directories.
    • +
    • --with-openssl: Specifies the root directory of the + OpenSSL installation; expects the specified directory to have + include and lib subdirectories. To + specify other locations for the header and libraries, use one or + both of the following.
    • +
    • --with-openssl-include: Specify the directory + containing the OpenSSL header files.
    • +
    • --with-openssl-libdir: Specify the directory + containing the OpenSSL libraries.
    • +
    • --with-tli-device (/dev/tcp): Specifies the device + name for opening a TLI device at run time.
    • +
    +
  6. +
  7. Build ACE by typing make. +
  8. (Optional) Install ACE by typing make install. +
+ +

Testing and Developing GNU Autotool +Support in ACE

+

+In order to test and develop the GNU Autotool support in ACE or +bootstrap autotool support into ACE when working directly off of ACE +sources in the subversion repository, you must have recent versions of GNU +Autoconf, Automake and Libtool installed on your host. Once +installed, autotool support may be bootstrapped into your workspace by +doing the following: +

+ + cd ACE_wrappers
+ ./bin/bootstrap
+
+
+After doing so, you will be able to run the configure +script. + +

Using the Traditional ACE/GNU Configuration

+

+Here's what you need to do to build ACE using GNU Make and ACE's traditional +per-platform configuration method:

+ +
    +
  1. Install GNU make + 3.79.1 or greater on your system (available via http + anonymous ftp from ftp.gnu.org in the + pub/gnu/make/ directory). + You must use GNU make when using ACE's traditional + per-platform configuration method or ACE won't compile. +
  2. +
  3. Add an environment variable called ACE_ROOT that contains the + name of the root of the directory where you keep the ACE wrapper + source tree. The ACE recursive Makefile scheme needs this information. + There are several ways to set the ACE_ROOT variable. For example: +
    + TSCH/CSH: + setenv ACE_ROOT /home/cs/faculty/schmidt/ACE_wrappers +
    +
    + BASH or Bourne Shell: + ACE_ROOT=/home/cs/faculty/schmidt/ACE_wrappers; export ACE_ROOT + +
    +

    + If you're building a number of versions of ACE, however, (e.g., for + different OS platforms or for different releases of ACE) you might use + the following approach (assuming TCSH/CSH): +

    setenv ACE_ROOT $cwd +
    +
  4. +
  5. Create a configuration file, $ACE_ROOT/ace/config.h, + that includes the appropriate platform/compiler-specific + header configurations from the ACE source directory. For example: +
    +#include "ace/config-linux.h" +
    + The platform/compiler-specific configuration file + contains the #defines that are used throughout ACE to indicate + which features your system supports. See the + $ACE_ROOT/ace/README file for a description of these + macro settings. If you desire to add some site-specific or build-specific + changes, you can add them to your config.h file; place them + before the inclusion of the platform-specific + header file. +

    + There are config files for most versions of UNIX. If there + isn't a version of this file that matches your + platform/compiler, you'll need to make one. Please send email + to the ace-users list + if you get it working so it can be added to the master ACE + release.

    +
  6. + +
  7. Create a build configuration file, + $ACE_ROOT/include/makeinclude/platform_macros.GNU, + that contains the appropriate platform/compiler-specific + Makefile configurations, e.g., +
    +include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU +
    + This file contains the compiler and Makefile directives that are + platform/compiler-specific. If you'd like to add make options, you + can add them before including the platform-specific configuration.

    + NOTE! There really is not a # character before 'include' in the + platform_macros.GNU file. # is a comment character. +

  8. +
  9. Note that because ACE builds shared libraries, you'll need to set + LD_LIBRARY_PATH (or equivalent for your platform) to the directory + where binary version of the ACE library is built into. For example, + you probably want to do something like the following: +
    + % setenv LD_LIBRARY_PATH $ACE_ROOT/lib:$LD_LIBRARY_PATH
    +
  10. +
  11. When all this is done, hopefully all you'll need to do is type: +
    + % make
    + at the ACE_ROOT directory. This will build the ACE + library, tests, the examples, and the sample applications. + Building the entire ACE release can take a long time and consume + lots of disk space, however. Therefore, you might consider + cd'ing into the $ACE_ROOT/ace directory and + running make there to build just the ACE library. + As a sanity check, you might also want to build and run the + automated "one-button" tests in + $ACE_ROOT/tests. Finally, if you're also + planning on building TAO, you + should build the gperf + perfect hash function generator application in + $ACE_ROOT/apps/gperf. +
  12. +
  13. If you need to regenerate the ace/Svc_Conf_y.cpp file, + you'll need to + get GNU Bison. + However, you should rarely, if ever, need to do this. +
  14. +
+ +
+ +

Building and Installing ACE on Windows

+ +

This section contains instructions for building ACE on Microsoft +Windows with a variety of compilers and development environments.

+ +

First, if you are upgrading from an older release, the recommended practice +is to start with a clean directory. Unpacking the newer release over an older +one will not clean up any old files, and trying to use the environment's +"Clean" command will probably not account for all existing files.

+ + + +


+

Building and Installing ACE on Windows with +Microsoft Visual Studio

+ +

ACE contains project files for Microsoft Visual Studio .NET 2003 (VC7.1) +and Visual Studio 2005 (VC8). Visual Studio 2005 supports building for +desktop/server Windows as well as for Windows CE and Windows Mobile. Since +not all users will be interested in the CE/Mobile capability, these platforms +have separate solution and project files from the desktop/server Windows. +Furthermore, VC7.1 and VC8 use different file formats but the same file +suffixes (.sln and .vcproj). To support both +environments, ACE supplies files with different names for the different +development and target platforms. The platform/name mapping is shown below. +All solution files have a .sln suffix and all project files have +a .vcproj suffix.

+ +The free Visual C++ 2005 Express Edition will work in place of the traditional +Visual Studio 2005 editions. Please note that there are additional setup steps +needed to install the Windows Platform SDK and to make VC++ aware of it. All +of the steps documented +here +need to be done before ACE will build. All the other notes in this document +that are for VC8 also apply to the express edition. MFC, 64-bit, and +CE/mobile options are not available with the express edition. 64-bit binaries +can be built with the tools included in the Platform SDK, using nmake as the +build system.

+ + + + + + + + + + + + + + + + + + + + + +
Mapping of Platform to Solution/Project File Name
PlatformFile Name
VC7.1name_vc71 +
VC8 for desktop/servername_vc8 +
VC8 for Windows CE/Mobilename_WinCE +
+

If you happen to open a VC7.1 file from within VC8, it will offer to convert +the file to the newer format for you. With the stock VC8, do not do this; +Visual Studio will crash while attempting to convert the large +solution and project files to build ACE. Simply refuse the conversion and +open the file with the correct format. Note that Microsoft has fixed this +problem. See + +https://msdn.microsoft.com/visualc/downloads/default.aspx for information. +

+ +
    +
  1. Uncompress the ACE distribution into a directory, where it will + create a ACE_wrappers directory containing the distribution. The + ACE_wrappers directory will be referred to as ACE_ROOT in the + following steps -- so ACE_ROOT\ace would be C:\ACE_wrappers\ace if + you uncompressed into the root directory.
    +
    +
  2. Create a file called config.h in the ACE_ROOT\ace + directory that contains:
    +
    + #include "ace/config-win32.h"
    +
    + +
  3. The static, DLL and MFC library builds are kept in + different workspaces. Files with names *_Static contain project + files for static builds. Workspaces for static and DLL builds will be + available through the stock release at DOC group's website. The + workspaces for MFC are not available and have to be generated using + MPC. Please see MPC's README for + details.

    +
  4. Now load the solution file for ACE (ACE_ROOT/ACE.sln).
    +
    +
  5. Make sure you are building the configuration (i.e, Debug/Release) + the one you'll use (for example, the debug tests need the debug + version of ACE, and so on). All these different configurations are + provided for your convenience. You can either adopt the scheme to + build your applications with different configurations, or use + ace/config.h to tweak with the default settings on + NT.
    Note: If you use the dynamic libraries, + make sure you include ACE_ROOT\lib in your PATH whenever you run + programs that uses ACE. Otherwise you may experience problems + finding ace.dll or aced.dll.
    +
    +
  6. If you want to use the standard C++ headers (iostream, cstdio, ... + as defined by the C++ Standard Draft 2) that comes with MSVC, + then add the line:
    +
    + #define ACE_HAS_STANDARD_CPP_LIBRARY 1
    +
    + before the #include statement in ACE_ROOT\ace\config.h.
    +
    +
  7. To use ACE with MFC libraries, also add the following to + your config.h file. Notice that if you want to + spawn a new thread with CWinThread, make sure you spawn the + thread with THR_USE_AFX flag set.
    +
    + #define ACE_HAS_MFC 1
    +
    + By default, all of the ACE projects use the DLL versions of the + MSVC run-time libraries. You can still choose use the static (LIB) + versions of ACE libraries regardless of run-time libraries. The + reason we chose to link only the dynamic run-time library is that + almost every NT box has these library installed and to save disk + space. If you prefer to link MFC as a static library into ACE, you + can do this by defining ACE_USES_STATIC_MFC in your + config.h file. However, if you would like to link + everything (including the MSVC run-time libraries) statically, + you'll need to modify the project files in ACE yourself.

    +

  8. Static version of ACE libraries are built with + ACE_AS_STATIC_LIBS
    defined. This macro should + also be used in application projects that link to static ACE + libraries
    +
    + Optionally you can also add the line
    +
    + #define ACE_NO_INLINE
    +
    + before the #include statement in ACE_ROOT\ace\config.h to disable + inline function and reduce the size of static libraries (and your + executables.)
    +
    +
  9. ACE DLL and LIB naming scheme:
    +
    + We use the following rules to name the DLL and LIB files in ACE + when using MSVC.
    +
    + "Library/DLL name" + (Is static library ? "s" : + "") + (Is Debugging enable ? "d" : "") + + {".dll"|".lib"}
    +
    +
+ +

More information for ACE/TAO on MSVC can be found +here. The doxygen version of this +document is available under Related Topics in the ACE Library.

+ +ACE TESTS

+ +The tests are located in ACE_ROOT\tests. There is also a solution in +that directory to build all the tests (tests.sln)

+ +Once you build all the tests (Batch Build works well for this), you +can run perl script run_test.pl in the +tests directory to try all the tests.

+ + + BUILDING ACE ON A WIN32 MACHINE THAT LACKS A NETWORK CARD

+ +You may want to run ACE on a non-networked machine. To do so, you must +install TCP/IP and configure it to ignore the absence of a network +card. This is one method: + +

    +
  1. Run Control Panel +
  2. Choose Network from Control Panel +
  3. Add Adapter: MS Loopback Adapter +
  4. Configure MS Loopback Adapter with 802.3 (default) +
  5. Add Protocol: TCP/IP Protocol +
  6. Configure TCP/IP Protocol with a valid IP address and subnet mask. + Leave everything else at the default settings. +
  7. Add Service: Workstation +
  8. Exit and Restart System +
  9. Run Control Panel again +
  10. Choose Services from Control Panel +
  11. The following services are not necessary and may + be set to Disabled Startup:
    + Alerter
    + Computer Browser
    + Net logon
    + Messanger
    +
  12. Choose Network from Control Panel +
  13. Confirm the following setup. This is all you need to run ACE:
    + Installed Software:
    + Computer Browser
    + MS Loopback Adapter Driver
    + TCP/IP Protocol
    + Workstation
    + Installed Adapter Cards:
    + MS Loopback Adapter

    +

+ +WIN32 ALPHA CONFIGURATIONS + +

The project files for Visual C++ no longer contain any configurations +targetted to Windows NT on the DEC Alpha. Below are the steps needed to +recreate the Alpha configurations:

+ +
    +
  1. Load the project on the Alpha machine. +
  2. Go to the Build menu and then select Configurations. +
  3. Select the project that you want to convert. +
  4. Click on Add. +
  5. Select the x86 configuration to "Copy settings from" + (either Debug or Release versions). +
  6. Prepend "Alpha " to the beginning of the name under + "Configuration". +
  7. Click OK. +
  8. Close the "Configurations" window. +
  9. Now go to the Project settings. +
  10. For the General Settings, change the output directories to standard ACE + output directories. Intermediate Directories are "Debug" and + "Release" in most cases. The Output Directories are blank, + except for Release versions of executables, in which it is also + "Release". +
  11. For the C/C++ Settings, make sure that the Code Generation's runtime + library is set to "Multithreaded DLL" or "Debug Multithreaded + DLL". +
+ +

Note: MSVC 6 has a bug where if a .dsp is converted from version 5 to 6 on +x86, the Alpha configuration can get corrupted. This seems to happen when additional +include or library directories are specified using backslashes instead of forward +slashes. If this occurs, the easiest way to fix it is to recreate it.

+ +

 

+

Building and Installing ACE on Windows with Borland +C++

+ +If you are building for a machine without a network card, you may want +to check here first.

+ +

    +
  1. Uncompress the ACE distribution into a directory, where it will + create an + ACE_wrappers directory containing the source. The ACE_wrappers + directory will be referred to as ACE_ROOT in the following steps -- so + ACE_ROOT\ace would be C:\ACE_wrappers\ace if you uncompressed into the + root directory.
    +
    +
  2. Create a file called config.h in the ACE_ROOT\ace + directory that contains:
    +
    + #include "ace/config-win32.h"
    +
    +
  3. Open a Command Prompt (DOS Box).
    +
    +
  4. Set the ACE_ROOT environment variable to point to the ACE_wrappers + directory. For example:
    +
    + set ACE_ROOT=C:\ACE_wrappers
    +
    +
  5. Set the BCBVER environment vairable to the main version of your Borland C++ compiler. + 6 is the value for Borland C++ Builder 6, 8 the value for Borland C++ Builder 2006. + 4 and 5 are also possible options but not supported anymore.
    +
    + set BCBVER=6
    +
    +
  6. Change to the ACE_ROOT\ace directory.
    +
    +
  7. Build release DLLs for ACE by going:
    +
    + make -f Makefile.bor all
    +
    +
  8. You can build several different versions of ACE by setting environment + variables before you run make:
    +
    + Set the environment variable below to build a debug version of ACE
    + set DEBUG=1
    +
    + Set the environment variable below to build a static version of ACE
    + set STATIC=1
    +
    + Set the environment variable below to build a unicode version of ACE
    + set UNICODE=1
    +
    + Set the environment variable below to build a version of ACE with + Codeguard support. Should only be used when DEBUG is also set
    + set CODEGUARD=1
    +
    + Set the environment variable below to build a version of ACE optimized + for a certain CPU. For this there are special compiler flags + (-3/-4/-5/-6), see the Borland help for more info.
    + set CPU_FLAG=-6
    +
    + Set the environment variable below to build a version of ACE using the + C++BuilderX preview compiler. This compiler isn't supported at this moment + but by setting this environment variable the new compiler is used and + you can expirement with this compiler.
    + set CBX=1
    +
    + You can then start the build with the command +
    make -f Makefile.bor all
    +
    + You may also enable the options by passing them as command line options to make, for example:
    + make -f Makefile.bor -DDEBUG all
    +
    +
  9. Optionally install the ACE header files, libraries and executables +for use + in your applications. Here we are installing them into C:\ACETAO:
    +
    + make -f Makefile.bor -DINSTALL_DIR=C:\ACETAO install
    +
    +
+ +These instructions do not cover all possible build configurations. Please +see +http://www.tenermerx.com/programming/corba/tao_bcb/index.html +for more detailed information on building and using ACE+TAO with Borland C++ +Builder.

+ +Note that when you run make in a sub directory you give make -f Makefile.bor all. The all is needed to make sure the complete project is build.

+ +The Borland C++ Builder 4.0/5.0/6.0/2006 port has been done by Jody Hagins, Christopher Kohlhoff and Johnny Willemsen.

+ +ACE TESTS

+ +Before you can build the tests you need to build the protocols directory. +Change the directory to ACE_ROOT\protocols and start the build with:

+

+make -f Makefile.bor all +

+ +The tests are located in ACE_ROOT\tests, change to this directory. +You build then the tests with the following command:

+

+make -f Makefile.bor all +

+ +Once you build all the tests, you can run the automated test script using:

+

perl run_test.pl

in the +tests directory to try all the tests. You need to make +sure the ACE bin and lib directory (in this case +ACE_ROOT\bin and ACE_ROOT\lib) +are on the path before you try to run the tests.

+ +


+

Building and Installing ACE on Win32 with MinGW/ MSYS

+ +

+If you are building for a machine without a network card, you may want +to check here first. + +

+Building and installing ACE on MinGW +uses a mix of a UNIX building process and +Win32 configuration files. +Also, as MinGW uses GNU g++, you may want to take +a look at the Compiling ACE with GNU g++ section. + +

+You will need the MinGW build tools and libraries, downloable from +http://www.mingw.org. + +
+For our build we require the packages +MinGW and MSYS. + +

    + +
  1. Install the MinGW tools into a common directory, say c:/mingw. +

    + +
  2. Install the MSYS tools into a common directory, say c:/msys. +

    + +
  3. Open a MSYS shell. Set your PATH environment variable so + your MinGW's bin directory is first: + +
           % export PATH=/c/mingw/bin:$PATH
    +       
    + +
  4. Add an ACE_ROOT environment variable pointing to the + root of your ACE wrappers source tree: + +
           % export ACE_ROOT=/c/work/mingw/ACE_wrappers
    +       
    + + From now on, we will refer to the root directory of the ACE + source tree as $ACE_ROOT. +

    + +
  5. Create a file called config.h in the + $ACE_ROOT/ace directory that contains: + +
           #include "ace/config-win32.h"
    +       
    + +
  6. Create a file called platform_macros.GNU in the + $ACE_ROOT/include/makeinclude directory containing: + +
           include $(ACE_ROOT)/include/makeinclude/platform_mingw32.GNU
    +       
    + + In the above text, don't replace $(ACE_ROOT) with the + actual directory, GNU make will take the value from the + environment variable you defined previously. + +

    + If you lack Winsock 2, add the line + +

           winsock2 = 0
    +       
    + + before the previous one. +

    + +
  7. In the MSYS shell, change to the $ACE_ROOT/ace directory and + run make: + +
           % cd $ACE_ROOT/ace
    +       % make
    +       
    + +

    + This should create libACE.dll (the Win32 shared library) and + libACE.dll.a (the Win32 import library for the DLL). + Note that the name for the ACE DLL follows the MinGW convention, which itself + resembles UNIX. + +

    + If you want static libs also, you may run: + +

           % make static_libs=1
    +       
    + +
  8. + The same rules for Win32 search of DLLs apply for MinGW. If you + want to run some ACE programs from the MSYS shell, you may + need to add the directory for libACE.dll to your PATH: + +
           % export PATH=/c/work/mingw/ACE_wrappers/ace:$PATH
    +       
    + +
+ +ACE TESTS

+ +The tests are located in $ACE_ROOT/tests. +After building the library, you can change to that directory and run +make: + +

       % cd $ACE_ROOT/tests
+       % make
+       
+ +

+Once you build all the tests, you can run +run_tests.pl in the +tests directory to try all the tests: + +

       % perl run_test.pl
+       
+ +

+If you are using ACE as a DLL, you will need to modify your PATH +variable as explained above. + +

+You may want to check $ACE_ROOT/tests/README for the status +of the various tests on MinGW and the different Windows flavors. + +


+

Building and Installing ACE on Win32 with Cygwin

+ +

+If you are building for a machine without a network card, you may want +to check here first. + +

+Building and installing ACE on Cygwin +uses the UNIX building process. +Also, as Cygwin uses GNU g++, you may want to take +a look at the Compiling ACE with GNU g++ section. + +

+You will need the Cygwin build tools and libraries, downloable from +http://www.cygwin.com. +For our build we require the following packages besides the packages the +setup selects by default: + +

+gcc (version 3.3.3), cygserver, make, perl, binutils. +
+ +
    + +
  1. Install Cygwin (this can be easy downloading and running + setup.exe + from the Cygwin site). For working with ACE we recommend + to select DOS as default text file type. +

    + +
  2. Open a Cygwin shell. Set your PATH environment variable so + your Cygwin bin directory is first: + +
           % export PATH=//c/cygwin/bin:$PATH
    +       
    + +

    + Note Cygwin uses ``/'' as directory separator, + and ``//X'' as a notation for Win32 drive X. + Note also that you can't use ``c:/cygwin/bin'' + because, for Cygwin, + ``:'' is path separator character, as in UNIX. +

    + +

  3. Add an ACE_ROOT environment variable pointing to the + root of your ACE wrappers source tree: + +
           % export ACE_ROOT=c:/work/cygwin/ACE_wrappers
    +       
    + +

    + Note here you can't use the ``//X'' Cygwin + notation as this is seen by Cygwin's compiler and it doesn't + support that (it does support ``/'' as directory + separator however). + +

    + From now on, we will refer to the root directory of the ACE + source tree as $ACE_ROOT. +

    + +

  4. Create a file called config.h in the + $ACE_ROOT/ace directory that contains: + +
           #include "ace/config-cygwin32.h"
    +       
    + +
  5. Create a file called platform_macros.GNU in the + $ACE_ROOT/include/makeinclude directory containing: + +
           include $(ACE_ROOT)/include/makeinclude/platform_cygwin32.GNU
    +       
    + + In the above text, don't replace $(ACE_ROOT) with the + actual directory, GNU make will take the value from the + environment variable you defined previously. + +
  6. On the Cygwin shell, change to the $ACE_ROOT/ace directory and + run make: + +
           % cd $ACE_ROOT/ace
    +       % make
    +       
    + +

    + This should create libACE.dll (the Win32 shared library) and + libACE.dll.a (the Win32 import library for the DLL). + Note the name for the ACE DLL on Cygwin follows the UNIX convention. +

    + +

    + If you want static libs also, you may run: + +

           % make static_libs=1
    +       
    + +
  7. + The same rules for Win32 search of DLLs apply for Cygwin. If you + want to run some ACE programs from the Cygwin shell, you may + need to add the directory for libACE.dll to your PATH: + +
           # export PATH=//c/work/cygwin/ACE_wrappers/ace:$PATH
    +       
    + + If you are using MPC-generated Makefiles, then the DLLs have been + placed in the lib directory instead of ace and thus your PATH + addition would need to look like this: + +
           # export PATH=//c/work/mingw/ACE_wrappers/lib:$PATH
    +       
    + + +
+ +ACE TESTS

+ +The tests are located in $ACE_ROOT/tests. +After building the library, you can change to that directory and run +make: + +

       % cd $ACE_ROOT/tests
+       % make
+       
+ +

+Once you build all the tests, you can run +run_tests.pl in the +tests directory to try all the tests: + +

       % perl run_test.pl
+       
+ +

+If you are using ACE as a DLL, you will need to modify your PATH +variable as explained above. + +

+You may want to check $ACE_ROOT/tests/README for the status +of the various tests on Cygwin and the different Windows flavors. +

+ +

+
+ +

+

Building and Installing ACE on Win32 with Interix

+

Interix comes with a BSD style make; you need GNU make. +Make builds easily under Interix or there is a prebuilt +package at:

+

http://www.interopsystems.com/tools/warehouse.htm

+

If you are building for a machine without a network +card, you may want to check here first.

+

This port was built and tested under Interix 3.5. a.k.a. +Windows +Services for UNIX 3.5.

+

To build follow the Traditional ACE/GNU Make +Configuration instructions replacing the following include directives:

+

#include +"ace/config-win32-interix.h"

+

for the config.h header

+

and:

+

include +$(ACE_ROOT)/include/makeinclude/platform_win32_interix.GNU

+

for your platform_macros.GNU file.

+

ACE should build fine with just 'make', the only other option tried thus far is +'make static_libs_only=1' which also works. Any +other options may not work.

+

ACE TESTS

+

The tests are located in $ACE_ROOT/tests. After building the library, you can +change to that directory and run make:

+

% cd $ACE_ROOT/tests
% make +

Once you build all the tests, you can run run_test.pl in the tests directory to try all the tests:

+

% run_test.pl

+

If you are using ACE as a shared library, you will need +to modify your LD_LIBRARY_PATH as explained inTraditional ACE/GNU Make Configuration.

+

+ +


+

Building and Installing ACE on VxWorks

+For the most part, you should be able to follow the instructions above +to build ACE and applications that use it. Start with the +Unix instructions above to build ACE and the +applications that use it. Please see below for more information on +building ACE on NT hosts for VxWorks targets.

+ +A few notes on VxWorks builds (thanks to +Paul von Behren and +Remedy IT for these notes):

+

+

+ +You'll have to let ACE know the target type at compile time. There +are several ways to do this; please see the +$ACE_ROOT/include/makeinclude/platform_vxworks5.5.x.GNU +platform file for detailed information.

+ +The VxWorks platform_vxworks*.GNU files are set up so that shared +libraries are not built on VxWorks, by default. Only static +libraries, with .a extension, are built. Therefore, it's not +necessary to set the LD_LIBRARY_PATH environment variable on your host +system when building for VxWorks targets. Please note, however, if +you use TAO on VxWorks that you will need to set your LD_LIBRARY_PATH +to find the TAO IDL compiler libraries (installed in the ace +directory) on the host.

+ +These non-default VxWorks kernel configuration #defines +are required with ACE:

+ +

#define INCLUDE_CPLUS           /* include C++ support */
+#define INCLUDE_CPLUS_IOSTREAMS /* include iostreams classes */
+#define INCLUDE_POSIX_ALL       /* include all available POSIX functions */
+
+ +For completeness, here are the non-default #defines that +we used for VxWorks 5.3.1/g++ 2.7.2: + +
#define INCLUDE_CPLUS           /* include C++ support */
+#define INCLUDE_CPLUS_IOSTREAMS /* include iostreams classes */
+#define INCLUDE_CONFIGURATION_5_2 /* pre-tornado tools */
+#define INCLUDE_DEBUG           /* pre-tornado debugging */
+#define INCLUDE_LOADER          /* object module loading */
+#define INCLUDE_NET_SYM_TBL     /* load symbol table from network */
+#define INCLUDE_SYM_TBL_SYNC    /* synchronize host and target symbol tables */
+#define INCLUDE_NFS             /* nfs package */
+#define INCLUDE_PING            /* ping() utility */
+#define INCLUDE_POSIX_ALL       /* include all available POSIX functions */
+#define INCLUDE_RDB             /* remote debugging package */
+#define INCLUDE_RLOGIN          /* remote login */
+#define INCLUDE_RPC             /* rpc package */
+#define INCLUDE_SECURITY        /* shell security for network access */
+#define INCLUDE_SHELL           /* interactive c-expression interpreter */
+#define INCLUDE_SHOW_ROUTINES   /* show routines for system facilities*/
+#define INCLUDE_SPY             /* spyLib for task monitoring */
+#define INCLUDE_STARTUP_SCRIPT  /* execute start-up script */
+#define INCLUDE_STAT_SYM_TBL    /* create user-readable error status */
+#define INCLUDE_SYM_TBL         /* symbol table package */
+#define INCLUDE_UNLOADER        /* object module unloading */
+#define INCLUDE_WINDVIEW        /* WindView command server */
+
+ +Also, automatic construction/destruction of static objects +should be enabled.

+ +If you use TAO, it's also a good idea to increase the +NUM_FILES parameter from its default of 50 to, +say, 1000.

+ +Please note that those VxWorks kernel configuration parameters +are set in the VxWorks configAll.h file. You must rebuild your +VxWorks kernel after modifying that file.

+ +If you're first getting started with ACE and/or VxWorks, I recommend +just building the ACE library and tests first. (Some of the ACE +examples, in System_V_IPC, don't build on VxWorks yet.) Then try +running the tests. Please see $ACE_ROOT/tests/README for the latest +status of the ACE tests on VxWorks.

+ +Please note that the main entry point is renamed to +ace_main (configurable via ACE_MAIN) on VxWorks with g++, +to comply with its restriction against using main. +In addition, ACE_HAS_NONSTATIC_OBJECT_MANAGER is enabled by default +to cleanly support construction and destruction of static objects. +Please see the Non-static +ACE_Object_Manager discussion for the important implication +of this feature.

+ +ACE threads (VxWorks tasks) can be named, for example, by supplying a +non-null argument to the Thread_Manager spawn routines. However, +names beginning with "==ace_t==" are forbidden because +that prefix is used internally by ACE.

+ +You can spawn a new task to run ace_main, using either +VxWorks sp, or ACE'S spa. +spa can be used from the VxWorks shell to pass arguments +to ace_main. Its usage is: + +


+spa ace_main, "arg1" [, ...]
+
+ +All arguments must be quoted, even numbers. You can start also ace_main +without spawning another thread by using:

+ +


+spaef ace_main, "arg1" [, ...]
+
+ +ACE also provides the function vx_execae which is capable of running +ace_main in a separate thread, wait for the task to finish and return +the return code from ace_main: + +

+int vx_execae (FUNCPTR acemain,char* arguments, int prio = 0, int opt = 0, int stacksz = 0);
+
+

+You could call this from the VxWorks shell like: +

+

+my_rc = vx_execae ace_main, "-o server.ior -ORBDottedDecimalAddresses 1"
+

+ +When prio, opt or stacksz are omitted or specified +as 0 default values will be used. See the VxWorks shell documentation for the +defaults for prio and opt. For stacksz the default is +ACE_NEEDS_HUGE_THREAD_STACKSIZE. +The arguments string will be parsed and passed on to ace_main as +a regular argc and argv.

+ +Be aware of the fact that when you execute ace_main directly from the VxWorks +shell argc will be zero and argv* will also be zero. Using argv[0] will not return +the program name, but will result in a crash.
+The ACE helper functions spa, spaef and vx_execae prevent +this problem by building a regular argc and argv which also contain a +valid argv[0] element.

+ +

Building Shared Libraries for VxWorks.

+ +NOTE: Since VxWorks support is currently being reworked with +an initial focus on static builds the support for shared builds is momentarily +broken. This will be remedied(!) as soon as possible.

+ +ACE supports shared libraries for VxWorks, but only with the g++ +compiler. To build shared libraries instead of the default static +libraries, added shared_libs=1 (not +shared_libs_only=1) to either your +ACE_wrappers/include/makeinclude/platform_macros.GNU or +your make invocation. Then, be sure to load the ACE (and +any other) shared library before loading your executable(s).

+ +A shared library for VxWorks uses the same code as for a static +(non-shared) library. However, calls to static constructors/ +destructors are added. The code in the shared library must +be reentrant if you shared it between programs (tasks). The +ACE library meets this requirement.

+ +Shared libraries reduce build time, executable size, and load +time of the executable. But, you must manually load the shared +library before loading your executable(s) with a command such as: +


+-> ld < libACE.so
+
+Shared libraries can be unloaded the same way an executable +(module) is unloaded.

+ +NOTE: Shared libraries on VxWorks aren't the same as +shared libraries on other operating systems. In particular, there is +no support for creating copies of writeable global (static) data in +the shared library. This includes the singleton ACE_Object_Manager +instance pointer. If you share global data between separate programs, +they may not work properly. See the discussion of shared code and +reentrancy in the VxWorks' Programmers Guide.

+ +Instead of trying to run separate programs onto a VxWorks target, we +recommend creating just one program, and spawning a thread for each +task. The TAO IDL_Cubit test collocation +test is a good example.

+ +

Linking ACE and/or TAO Libraries into the VxWorks Kernel.

+ +It's easy to link your ACE and/or TAO libraries into the VxWorks kernel. +Just build shared versions, but +disable the munch step. The easiest way to do that is to set the +LD make variable to the name of your linker. For +example, to build a libACE.so for PowerPC that can be linked into +the kernel: +
% cd $ACE_ROOT/ace
+% make LD=ldppc shared_libs=1
+
+After building the shared lib, link it into the kernel by setting +the MACH_EXTRA make variable in the kernel configuration +Makefile. Then, build the kernel using make exe.

+ +

Using the one-button ACE tests with VxWorks.

+ +It is possible to generate a script to execute all ACE tests. You can do this by executing +

% perl run_test.pl -v -o > run_test.vxworks
+
+ +The ACE tests write their output files in a directory named +log/, below the current (tests) directory.
+

+

+To run the tests from the build directory on an NT host where you crossbuild your +VxWorks ACE/TAO you can set up the Target Server File System (TSFS) in your Target Server +configuration. If you f.i. set the root for the TSFS to the root directory of your builddisk +you can set the default directory for the target by issueing the following command +from a Host shell: '@cd "/tgtsvr/{path to ACE}/ACE_wrappers/tests"'. +The '@' addition makes sure this command is executed for the target environment and not the +local host shell environment. +If you also issue the command 'cd {path to ACE}/ACE_wrappers/tests' you can execute the +generated one button testscript like: '< run_test.vxworks'. +

+

+Running the ACE tests automatically from the ACE autobuild tool using Target Server and Host +shell options is also supported. +

+

+If you don't have NFS included in your VxWorks kernel, you can use these steps, provided by +Clarence M. Weaver, +to run the tests and capture their output:

+

    +
  1. What I did was create a log directory on the boot NT host of my VxWorks + target.

    +

  2. I copied all the test applications and the run_test.vxworks script to + the parent of the log directory.

    +

  3. Using the target shell not the host shell, I "cd" to the directory + containing the script and test programs.

    +

  4. Invoked the script using < run_test.vxworks from this target shell.

    +

+ +Kirk Davies provided this +approach for running the ACE tests on Tornado II: + + + +

Building ACE on Tornado/NT hosts for VxWorks targets.

+The following, very useful information was contributed by +Chris Ryan +and Paul von Behren. +Please submit corrections, additions, or clarifications to the +the ACE mailing list.

+ +NOTE:The make (version 3.74) that is provided with +Tornado 2.2 cannot be used to build ACE. A working version is available +from the WindRiver support site, download the + +make3_80.gvk_patches and the + +make3_80.tor2_2.new_dependency_rules package and install them.

+ +Using the Cygnus tools, this approach works: +

+ +A few additional Windows Notes, from Paul von Behren:

+

+ +And Chris Ryan's instructions for building for VxWorks targets +on Windows NT hosts: + +
    +
  1. Path setting that seems to be working is:

    +

          /tornado/host/x86-win32/bin:
    +      /tornado/host/x86-win32/lib/gcc-lib/i386-wrs-vxworks/cygnus-2.7.2-960126:
    +      /tornado/host/x86-win32/i386-wrs-vxworks/bin:
    +      /ace/ace_wrappers/bin:
    +      /gnuwin32/b18/H-i386-cygwin32/bin:
    +      /gnuwin32/b18/tcl/bin:
    +      /WINNT/system32:
    +      /WINNT:
    +      /WINNT/system32/nls/ENGLISH:
    +      /bin
    +      
    + + Other environment variables:

    +

          WIND_BASE=/tornado
    +      SHELL=/bin/sh.exe
    +      TERM=pcbios
    +      TAO_ROOT=/ace/ACE_wrappers.vxworks/TAO
    +      CPP_LOCATION=/Program Files/DevStudio/VC/bin/CL.EXE
    +      GCC_EXEC_PREFIX=/tornado/host/x86-win32/lib/gcc-lib/
    +      WIND_HOST_TYPE=x86-win32
    +      ACE_ROOT=/ace/ACE_wrappers.vxworks
    +      
    + +
  2. /tornado is the root of the Tornado install + ($WIND_BASE). + +
  3. /gnuwin32 is the root of a Cygnus GNU download and install. + +
  4. /bin content is:

    +

          aced.dll
    +      cygwin.dll
    +      perl.exe
    +      rm.exe
    +      sh.exe
    +      true
    +      
    + + aced.dll is produced in an ACE NT source tree according to + documented procedure for Windows VC++ ACE build. + + cygwin.dll is from the Cygnus GNU software download and install. + +
  5. Basically, follow documented procedure for ACE build/install on UNIX + platform. Create a $ACE_ROOT/ace/config.h that looks + like:

    +

          #include "config-vxworks5.x.h"
    +      
    + + And create a + $ACE_ROOT/include/makeinclude/platform_macros.GNU + that looks like:

    +

    +      WIND_BASE = /tornado
    +      WIND_HOST_TYPE = x86-win32
    +      CPU = I80486
    +      include $(ACE_ROOT)/include/makeinclude/platform_vxworks5.5.x.GNU
    +      
    + +
  6. When using cygnus windows GNUTools on WinNT you have to start + make with "--unix" option, otherwise WinNT shell cmd.exe is responded and + not sh.exe, i.e., +
     make --unix static_libs=1
    + 
    +
+ +

TAO on NT Tornado host, VxWorks target.

+ +
    +
  1. Build ACE and TAO_IDL in the NT tree as already documented. + Be sure to build ACE's gperf on NT, in + ACE_wrappers/apps/gperf/src.

    + +

  2. Build $TAO_ROOT/tao +
          CPP_LOCATION=/Program Files/DevStudio/VC/bin/CL.exe
    +      cd $TAO_ROOT/tao
    +      /gnuwin32/b18/H-i386-cygwin32/bin/make
    +      
    + +
  3. Build orbsvcs. +
          CPP_LOCATION=/Program Files/DevStudio/VC/bin/CL.exe
    +      cd $TAO_ROOT/orbsvcs/orbsvcs
    +      /gnuwin32/b18/H-i386-cygwin32/bin/make
    +      
    + +
  4. Build $TAO_ROOT/tests

    +

+ + +

Jaffar Shaikh's +Notes for Building ACE and TAO for VxWorks on NT host

+

Scenario: I was building the ACE and TAO for VxWorks +on NT. The target system was a PPC860 based chassis and another a NT +host based card.

+

Host System:

+

NT 4.0 workstation with 128 M RAM, 266MHz Pentium.

+ +

Software Needed For Building TAO

+

1) Active State's ActivePerl from +http://www.activestate.com/software/default.htm +

+ +

2) Tornado 2.2.1 from Windriver.

+ +

3) Cygwin GNU to build TAO. It is available for NT as a freeware +from the Cygwin site

+

The Cygwin Make (version 3.75) can only build the TAO not the +Tornado II make (version 3.74)

+ +

Environment Variables:

+

On NT the environment Variables are set as follows, (from +Control Panel-> System -> Environment)

+

I added following Environment variable entries to PATH

+ +

C:\Perl\bin\;

+

C:\tornado\host\x86-win32\bin;

+

C:\tornado\host\x86-win32\powerpc-wrs-vxworks\bin;

+

C:\tornado\host\x86-win32\lib\gcc-lib\powerpc-wrs-vxworks\cygnus-2.7.2-960126;

+

C:\Corba\Ace_wrappers\bin;

+

C:\Cygwin\bin;

+

C:\Cygwin\usr\bin;

+

C:\bin

+ +

Additional Environmental variables and the values,

+

CPU=PPC860

+

LD_LIBRARY_PATH=

+

SHELL=/bin/sh.exe

+ +

ACE_ROOT=/Corba/ACE_wrappers

+

WIND_BASE=/tornado

+

SHELL=/bin/sh.exe

+

TERM=pcbios

+

TAO_ROOT=/Corba/ACE_wrapper/Tao

+

CPP_LOCATION=/Program Files/Microsoft Visual Studio/VC98/Bin/CL.exe

+

GCC_EXEC_PREFIX=/tornado/host/x86-win32/lib/gcc-lib/

+

WIND_HOST_TYPE=x86-win32

+

PERL_PATH=/perl/bin/perl.exe

+ +

Directories of importance

+

C:\Corba <-- Ace_wrappers (uzipped)

+

C:\tornado <-- Tornado installed

+

C:\Perl <-- Perl installed

+

C:\Cygwin <-- Cygwin installed

+

C:\bin <-- Copy these files,

+

Ace.dll, <-- After you build Ace

+

gperf.exe <-- After you build gperf

+

Cygwin1.dll, <-- After you install Cygwin

+

perl.exe, <-- After you install Perl

+

rm.exe <-- After you install Cygwin

+

sh.exe <-- After you install Cygwin

+

true <-- After you install Cygwin

+

Create Files

+

1) C:\Corba\ACE_Wrappers\ace\config.h

+

with entry

+

#if defined (_MSC_VER) || (__BORLANDC__)

+

#include "ace/config-win32.h"

+

#else

+

#define ACE_HAS_IP_MULTICAST

+

#include "ace/config-vxworks5.x.h"

+

#endif

+ +

2) C:\Corba\ACE_wrappers\include\makeinclude\platform_macros.GNU

+

WIND_BASE = /tornado

+

WIND_HOST_TYPE = x86-win32

+

include +$(ACE_ROOT)/include/makeinclude/platform_vxworks5.5.x.GNU

+

ACE_COMPONENTS=FOR_TAO (you may choose this option to build ACE +library that supports TAO)

+ +

+

Steps to Build

+

1) Build Ace.dll under NT

+

In MS Visual C++ open C:\Corba\ACE_wrappers\ace.sln And build Ace +DLL

+

Copy Ace.dll in C:\bin

+ +

2) Build gperf utility under NT

+

In MS Visual C++ open +C:\Corba\ACE_wrappers\apps\gperf\src\gperf.sln. Build gperf.exe

+

Copy gperf.exe to C:\bin

+ +

3) Mount Directries in Cygwin

+

Click on Cygnus Solutions -> Cygwin Bash Shell

+

Mount following directories by using mount command.

+

create respective directories first then use mount command

+ +

e.g. Create /Corba directory then use $mount -s "C:\Corba" +/Corba

+ +

C:\Corba mount to /Corba

+

C:\tornado mount to /tornado

+

C:\Perl mount to /perl

+

C:\Cygwin mount to /cygwin

+

C:\bin mount to /bin

+

C:\Program Files mount to /Program Files

+ +

4) Build ACE in Cygwin

+

$cd /Corba/ACE_wrappers/ace

+

$make static_libs=1

+

This will build your ace library libACE.a for VxWorks. If you use +option shared_libs=1 then the build will be libACE.so. The other +options are same as follows.

+ +

5) Build TAO in Cygwin

+

$cd $TAO_ROOT/tao

+

$make debug=0 optimize=1 static_libs_only=1 minimum_orb=1 +

+

for shared libs use shared_libs=1

+ +

The minimum Tao does not have following components,

+

Dynamic Skeleton Interface

+

Dynamic Invocation Interface

+

Dynamic Any

+

Interceptors

+

Interface Repository

+

Advanced POA features

+

CORBA/COM interworking

+ +

You may play around with above options to find suitable build for +your needs. For example when you give option debug=1 all the debug +symbols will be created and the build will huge in size. The debug +symbols are necessary when you want to debug your code.

+ +


+
+

Building and Installing ACE Network Services

+ +The following explains how to build the ACE network services on UNIX and Win32. + +


+

Building and Installing ACE Network Services on UNIX

+ +Building and installing ACE Network Services on UNIX is relatively +simple (the process for Win32 is different). +Here's what you need to do:

+ +

    + +
  1. Build and install ACE on UNIX as described earlier. If ACE is built at the root of the ACE + source tree (and ACE has been ported to your platform, of course) the + netsvcs static and shared object libraries should be built + automatically. In addition, the server driver program + (main) contained in $ACE_ROOT/netsvcs/servers/main.cpp + should also be compiled and ready to run.

    + +

  2. Set your LD_LIBRARY_PATH environment variable to + where the binary version of the ACE netsvcs library. For + example, you probably want to do something like the following

    + +

    
    +      % setenv LD_LIBRARY_PATH $ACE_ROOT/ace:$ACE_ROOT/lib:$LD_LIBRARY_PATH
    +      

    + +

  3. By default, if the shared object library is built, the services + are linked into the main driver program dynamically. + To specify which services should be linked in and executed, edit the + $ACE_ROOT/netsvcs/servers/svc.conf + file. During your editing, you should update information (such as the + default service port numbers) that affects the initialization of + services in this file. Refer to the + Service Configurator + documentation to learn how the configuration file is parsed and + how the services are dynamically linked and executed. In + addition, refer to the Network + Services documentation to learn more about how to configure + each network service.

    + +

  4. If you only want to link the services statically, simply remove + or rename the svc.conf file.

    +

+ +


+

Building and Installing ACE Network Services on Win32

+ +Once again, there are supplied project for Visual C++ 7.1 or later for +the Network Services.

+ +


+

Building and Installing the ACE_SSL Library

+ +

The first step for all platforms is to build and install the +OpenSSL distribution. The +ACE_SSL library must then be built according to the instructions +below.

+

Unix

+
    +
  1. Make sure the OpenSSL header file directory is in your compiler's + include path, and that OpenSSL libraries are in your library link/load + path (e.g. LD_LIBRARY_PATH). If you + installed OpenSSL into a set of directories unknown by the compiler, + set the SSL_ROOT environment variable to point to the + top level directory of your OpenSSL distribution, i.e. the one + containing OpenSSL's include and lib + directories.
  2. +
  3. Build ACE as described above. When building ACE, add + ssl=1 + to your make + command line invocation, or add it to your + platform_macros.GNU file.
  4. +
  5. Build the ACE_SSL library in the $ACE_ROOT/ace/SSL + directory. The ACE_ROOT environment variable should be set + prior to this point.
  6. +
+

Microsoft Visual Studio

+
    +
  1. Set the SSL_ROOT environment variable to the location + of the directory containing the OpenSSL inc32 and + out32dll directories. +
  2. Add ssl=1 to your MPC + $ACE_ROOT/bin/MakeProjectCreator/config/default.features + or $ACE_ROOT/local.features file, and re-run MPC to add + support for building the ACE_SSL library to your MSVC++ + workspaces and projects. +
  3. Open the ACE.sln solution, and refer to the ACE build + and installation instructions above for details on creating a + config.h configuration header for this platform. Once + the config.h file has been created, build the + ACE_SSL project.
  4. +
+

Borland C++

+

Support for building ACE's ACE_SSL library and TAO's SSLIOP + pluggable protocol with Borland C++ does exist. +

    +
  1. Set the SSL_ROOT environment variable to the location + of the directory containing the OpenSSL inc32 and + out32 directories. +
  2. Add ssl=1 to your MPC + $ACE_ROOT/bin/MakeProjectCreator/config/default.features + or $ACE_ROOT/local.features file, and re-run MPC to add + support for building the ACE_SSL library to your Borland C++ makefiles. +
  3. Build ACE and TAO. +
+

+ +

+

Building and Using GUI Reactors Libraries

+There is a general method for building and using ACE_Reactors for various GUI +libraries. +

Building GUI Reactor Library

+
    +
  1. Try to generate build files using MPC. Inspect the output of MPC to find out which features are + necessary to build given reactor. Add these features to + ACE_wrappers/bin/MakeProjectCreator/*.features file, or pass them directly to MPC + using -features command line option. For example, for FlReactor the procedure + consists of five steps +
      +
    1. In the first pass one gets that x11 (X11 libraries) is missing.
      + $ mwc.pl -type gnuace + Skipping ACE_FlReactor (ace_flreactor.mpc), it requires x11. +
    2. + Ensure that X11 libraries are installed, then pass x11=1 feature to MPC. +
    3. In the second pass one gets that gl (OpenGL library) is missing.
      + $ mwc.pl -type gnuace -features x11=1 ace.mwc + Skipping ACE_FlReactor (ace_flreactor.mpc), it requires gl. +
    4. + Ensure that OpenGL libraries are installed, then pass gl=1 feature to MPC. +
    5. In the third pass one gets that fl (Fast Light Toolkit) is missing.
      + $ mwc.pl -type gnuace -features x11=1,gl=1 ace.mwc + Skipping ACE_FlReactor (ace_flreactor.mpc), it requires fl. +
    6. + Ensure that Fast Light Toolkit libraries are installed, then pass fl=1 + feature to MPC. +
    7. In the fourth pass one gets that ace_flreactor feature is missing
      + $ mwc.pl -type gnuace -features x11=1,gl=1,fl=1 ace.mwc + Skipping ACE_FlReactor (ace_flreactor.mpc), it requires ace_flreactor. +
    8. + Allow MPC to generate makefiles for FlReactor by setting ace_flreactor=1 feature. +
    9. In the last pass one obtains files for building FlReactor.
      + $ mwc.pl -type gnuace -features x11=1,gl=1,fl=1,ace_flreactor=1 ace.mwc +
    10. +
    + Currently to simplify MPC generation some of features are turned on by default in + ACE_wrappers/bin/MakeProjectCreator/global.features. For examples to generate + files related with Fl one has to provide only fl=1 feature. To obtain a more fine grained controll + over MPC generation process one may modify ACE_wrappers/bin/MakeProjectCreator/*.features + files. +
  2. +
  3. Required build files are generated now, it is enough then to invoke build tool. + For example for under MPC::gnuace one has to call + make fl=1. For MPC::vc7 target all features are + encoded in generated project files, thus it is enough to compile ACE using MSVC. +
  4. +
+ The build procedure leads to a specific GUI Reactor library. For example, for + Qt and Linux one gets libQtReactor.so, while for + Windows the results are shared QtReactor.dll and import + QtReactor.lib libraries or their variants depending on build options. + When compiling TAO also GUI related libraries are created like libTAO_QtResource.so. +

Using GUI Reactor Library

+ Here one has at least three use cases: +
    +
  1. Applications with their own build system. + To use ACE support for GUI one has to include specific GUI headers and + link with specific ACE_[GUI]Reactor library. When using TAO support for GUI one has + also to link with specific TAO_[GUI]Resource library.
  2. +
  3. Applications with build system using MPC. + In general, it is better to create specific base projects for using ACE GUI support in such application. + Base projects provided by ACE ACE_wrappers/bin/MakeProjectCreator/[ace,tao]_[gui][reactor,resource].mpb + may be an examples of how to do this.
  4. +
  5. Internal ACE applications like tests or examples. + MPC project for internal ACE application using GUI support should be derived from + ace_[gui]reactor.mpb base projects. To employ TAO support for GUI one should derive + the project from tao_[gui]resource.mpb These base projects ensure that all necessary libraries + are linked to the application, specifies features necessary to build a project and moreover impose a + build order consistant with ACE. For example, the application project using XtReactor should be + derived from ace_xtreactor.mpb.
  6. +
+

Notes on specific GUI Reactors

+ + +
+

Installation Notes

+ + + + +
+

Compiling ACE with GNU g++

+ +If you use the GNU GCC g++ compiler please note the following: + + + + +

+

What Do I Need to Build for TAO?

+Toshio Hori <toshi@etl.go.jp> provided these suggestions on building +just what's needed for (a subset of) TAO:

+ +I usually make: +

    $ACE_ROOT/ace,
+    $ACE_ROOT/apps/gperf,
+    $TAO_ROOT/tao,
+    $TAO_ROOT/TAO_IDL, and
+    $TAO_ROOT/orbsvcs/orbsvcs
+
+and the whole make takes less than an hour on my Solaris 7 for intel, +Pentium-III/550MHz, 256MB memory, 512MB swap machine. (Top secret: I +renice the 'make' process to the highest priority, -20... ;-) + +To save time and space, I set +
    TAO_ORBSVCS = Naming Time Trader ImplRepo
+
+in $ACE_ROOT/include/makeinclude/platform_macros.GNU also. See +TAO's orbsvcs +library customization instructions for more information.

+ + +


System Resource +Requirements

The amount of system resources required to build +ACE and TAO varies greatly. The required system resources are +influenced by OS and compiler platform, build options, and component +configurations. As a rough guide, the typical peak memory requirement +can be well over 512 MB (notably, for TAO's orbsvcs). Depending on +your OS and compiler configuration, an entire build +of ACE and TAO can use well over 4 GB of disk space. It's usually not +necessary to build all of ACE and TAO, though.

+ +Much less disk space is required for just the libraries. For example, +see the ACE +library subset sizes.

+ +If you run out of memory when building, you might consider trying +some or all of these suggestions:

+

+ +


+

General MPC information

+ +The Makefile Project Creator (MPC) is a tool that takes platform and +building tool generic files (mpc files) as input, which describe basic +information needed to generate a "project" file for various build +tools, including Make, NMake, Visual C++ 6, Visual C++ 7, etc. Please +see USAGE, README for +documentation on MPC.

+ +A common usage for creating a Windows workspace containing just the +core ACE and TAO libraries and executables is the following: + +


+C:> cd %TAO_ROOT%
+C:> %ACE_ROOT%\bin\mwc.pl -type vc71 TAO_ACE.mwc
+
+ +Replace vc71 with whatever project type you want to use. On Linux and +other UNIX platform use the gnuace type:

+ +


+% cd $TAO_ROOT
+% $ACE_ROOT/bin/mwc.pl -type gnuace TAO_ACE.mwc
+
+ +this creates the appropriate GNUmakefiles. Additional information on +how to obtain, configuration, and build ACE+TAO using MPC appear at +the OCI FAQ.

+ +If you are attempting to generate project files using MPC, and you get +the following error message:
+ +

ERROR: Unable to find the MPC modules in /builds/ACE_wrappers/MPC.
+You can set the MPC_ROOT environment variable to the location of MPC.
+
+ +You need to do one of the following: + +
    +
  1. If you have already obtained MPC, either move it underneath the +ACE_wrappers directory or set your MPC_ROOT environment variable to point +to the full path of MPC.
  2. +
  3. Check out MPC from the DOC Group subversion repository +and set your MPC_ROOT environment variable.
  4. +
+ +You can check +out MPC from the doc_group subversion server using the following command. + +
svn co svn://svn.dre.vanderbilt.edu/DOC/MPC/trunk MPC
+
+ +The README and USAGE files in the MPC/docs directory are an up-to-date +source of documentation, however it is not a complete set of +documentation. The TAO Developer's Guide from OCI starting with the +1.3a version contains more information about MPC.

+ +The MPC chapter from the TAO Developer's Guide is available at +http://downloads.ociweb.com/MPC/. Some of MPC has changed since +this version, but it is largely accurate. An updated version will be +available as newer versions of the TAO Developer's Guide are released. +In the meantime, please see the README and USAGE files in the MPC +directory. + +

+

+

Working with ACE in Eclipse

+ + +

+The Eclipse CDT C++ development environment can be used to develop ACE applications. You can configure a new CDT project to build ACE using either a local source distribution or checking out ACE from CVS in Eclipse. These are the steps to create the CDT project to build ACE. +

+ +

+

To create an Eclipse project for ACE starting from CVS:

+
    +
  1. In the "CVS Repository Exploring" perspective, navigate to the module containing ACE.
  2. +
  3. Checkout the module using "Check Out As" and select the "project configured using the New Project Wizard" option.
  4. +
  5. Select "Standard Make C++ Project" for the project type.
  6. +
  7. Follow the steps outlined above, up to the point of running make, for building ACE on your platform. Use "path_to_your_eclipse_workspace"/"project_name" as your $ACE_ROOT. +
  8. If you had to regenerate the makefiles using MPC, select the root folder for your poject and use the import wizard to add them to your project.
  9. +
  10. Select the root folder for the project and use the "Create Make Target" wizard to setup the appropriate make command and options.
  11. +
  12. Select the root folder and run "Build Make Target." This will build ACE.
  13. +
+

+ + + +

+

To create an Eclipse project for ACE from a local source distribution:

+
    +
  1. Launch the "New Project Wizard" in Eclipse.
  2. +
  3. Select "Standard Make C++ Project" for the project type.
  4. +
  5. On the project name page, uncheck the "use default" location option and replace the default path with the path to your source distribution.
  6. +
  7. Follow the steps, up to the point of running make, for building ACE on your platform. +
  8. If you had to regenerate the makefiles using MPC, select the root folder for your poject and use the import wizard to add them to your project.
  9. +
  10. Select the root folder for the project and use the "Create Make Target" wizard to setup the appropriate make command and options.
  11. +
  12. Select the root folder and run "Build Make Target." This will build ACE.
  13. + + +
+

+ +

+ +

+

Advanced Topics

+ + + +


+

Non-static +ACE_Object_Manager

The ACE_Object_Manager can be instantiated +as a static object, can be instantiated on the stack of the main +program thread, or can be explicitly instantiated and destroyed by the +application with ACE::init () and ACE::fini +(). The comments in the header file, +ace/Object_Manager.h, as well as Section 1.6.3 in +The ACE Programmer's Guide +provide more detail.

+ +NOTE: +Special requirements are imposed on applications if the +ACE_Object_Manager is instantiated, by ACE, on the stack of the main +thread. This behavior is selected by defining +ACE_HAS_NONSTATIC_OBJECT_MANAGER in +ace/config.h. Again, see the ACE Object_Manager header file, +ace/Object_Manager.h for more information. One of +these requirements is discussed here, because it is so important. +Please note that ACE_HAS_NONSTATIC_OBJECT_MANAGER is +defined in the distributed ACE config.h headers for +VxWorks and Win32.

+ +The important requirement is that the program must +declare its main function with two arguments, even if +they're not used, and with int return type: + +


+int
+main (int, char *[])
+
+ +If you don't declare main exactly that +way, then you'll see a link error about ace_main_i being +undefined.

+ +Alternatively, this feature can be disabled by commenting out the +#define ACE_HAS_NONSTATIC_OBJECT_MANAGER in the +ace/config.h. But, that will make repeated testing more +difficult on VxWorks. And, you'd either have to call static +constructors and destructors manually or unload/load the program +between runs. On Win32, disabling the feature can possibly lead to +shutdown difficulties.

+ +WARNING: +ACE_HAS_NONSTATIC_OBJECT_MANAGER assumes that your +main function is named main. Any violation +of this assumption is at your peril. If you really need to call your +entry point something other than main, you'll need to +construct and destroy the ACE_Object_Manager. The best way to do that +is to call ACE::init () and ACE::fini (). +Or, see the #define of main (int, char *[]) +in ace/OS_main.h to see how ACE does +that for entry points named main. + +


+

Cloning the Source Tree

+ +On UNIX platforms, we typically like to support multiple platform +builds using the same ACE source tree. This idiom is supported by ACE +using the $ACE_ROOT/bin/create_ace_build.pl script. + +To clone the source tree, create ./build and ./build/{your build name} +subdirectories under the ACE_wrappers directory. +Then invoke the create_ace_build.pl script to clone the source tree using +soft links from your build directory back to the actual sources. +Here is an example:

+ +

% cd ACE_wrappers
+% mkdir build build/build-SunOS5
+% perl bin/create_ace_build.pl -a -v build-SunOS5
+% cd build/build-SunOS5
+% setenv ACE_ROOT $cwd
+% make
+

+ +This will establish a complete tree of links. In addition, make sure +you set your LD_LIBRARY_PATH to +$ACE_ROOT/lib:$LD_LIBRARY_PATH on SVR4 UNIX +platforms.

+ +When you do a make in the $ACE_ROOT directory you will be producing +object code that is not stored in the same place as the original +source tree. This way, you can easily build another platform in a +parallel tree structure.

+ +See the comments at the top of the create_ace_build.pl script for +further usage information. + +


+

Additional Build Tips for MVS

+ +For all intents and purpose, MVS OpenEdition (OE) is another flavor of +UNIX, therefore, the instructions under Building +and Installing ACE on Unix can be used along with the following +additional tips:

+ +You can get a copy of GNU make that has been ported to MVS OpenEdition from +the IBM OpenEdition web site. +ACE's make scheme generates compile commands that have options and +operands interspersed. By default, the c89/cc/c++ compiler expects all options to +precede all operands. To get around this, you must set a special +compiler environment variable (_CXX_CCMODE) to 1 which tells the compiler +to allow options and operands to be interspersed.

+ +Note that the environment variable LD_LIBRARY_PATH is +called LIBPATH on MVS.

+ +Shared objects are built a little different on MVS than on +other UNIX implementations. This has been accounted for in the makefiles +that come with ACE When the linker (via the cxx command) builds the +libACE.so file it will also create a file called libACE.x. This is a +side-deck file and it must be included in subsequent link edits with +application code. For more information on this see the C/C++ MVS +Programming Guide. If you want to build your application statically, +i.e., using libACE.a instead of libACE.so, you can set ACELIB to +ACELIB_STATIC in platform_mvs.GNU.

+ +When the libACE.so file is built (via the MVS pre-linker and binder), you +will get a rc=4 from the pre-linker. This is ok. This is due to some +warnings about unresolved references which should get resolved during the +link step. Note, however, there shouldn't be any unresolved references +from the binder (linkage editor). You can get pre-link and link maps by +uncommenting the PMAP and LMAP lines in the platform_mvs.GNU file. + +


+

Makefile Flags

+ +GNU make provides many options to customize its operation. See its +documentation for more information. One example is that for multi-cpu +UNIX machines you will be able to build faster if you use:

+ +


+% make -j n
+

+ +which allows parallel compilation. The number n should +typically be the number of CPUs. It is likely that builds will be +faster even on single-CPU UNIX machines with make -j +2.

+ +ACE further supports the following flags. They can be enabled either +on the command line, e.g., "make purify=1", or added to your +platform_macros.GNU. To disable the option, +set the flag to null, +e.g., "make debug=". Some flags support setting to 0 disable, e.g., +"make debug=0". debug=1 is enabled in the platform files that are +released with ACE.

+ +Please note that the effects of a flag may be platform specific. +Also, combinations of certain flags may or may not be allowed on +specific platforms, e.g., debug=1 opt=1 is supported by g++ but +not all other C++ compilers.

+ +If you use Purify or Quantify: purify or quantify must +be on your PATH. By default, ACE puts the Purify/Quantify +caches below /tmp. To override that, set the +PURE_CACHE_BASE_DIR variable, either in your environment +or on the make make command line, to the destination +directory for your instrumented libraries.

+ +

Flag             Description
+----             -----------
+debug            Enable debugging; see DCFLAGS and DCCFLAGS.
+exceptions       Enable exception handling (not supported by all platforms).
+include_env      Support old-style ACE_TRY_ENV declarations in methods.
+                 This switch is necessary for compiling TAO applications
+                 in the native exception configuration that were written
+                 for TAO versions before 1.2.2.
+                 In TAO 1.2.2, new macros were introduced that supercede
+                 the direct ACE_TRY_ENV declarations. These are the
+                 ACE_ENV_ARG macros that are defined in ace/CORBA_macros.h
+                 and are documented in docs/exceptions.html.
+                 This switch only affects the exceptions=1 configuration.
+                 It is for backward compatibility only.
+                 There will be warnings about unused _ACE_environment_variable
+                 parameters when using include_env=1.
+                 If possible, do not use it, but instead change your TAO
+                 applications to use the ACE_ENV_ARG macros.
+fast             Enable -fast option, e.g., with Sun C++.
+inline           Enable ACE inlining.  Some platforms enable inlining by
+                   default, others do not.
+optimize         Enable optimization; see OCFLAGS and OCCFLAGS.
+pace             Enable PACE as the underpinnings of ACE_OS.
+probe            Enable ACE_Timeprobes.
+profile          Enable profiling; see PCFLAGS and PCCFLAGS.
+purify           Purify all executables.
+quantify         Quantify all executables.
+repo             Use GNU template repository (g++ with repo patches only).
+rtti             Enable run-time type identification.  On some platforms,
+                   it is enabled by default, so this is ignored.
+shared_libs      Build shared libraries. Ignored if static_libs_only is set.
+static_libs      Build shared libraries. Ignored if shared_libs_only is set.
+shared_libs_only Only build shared libraries.  Ignored if no SHLIBs are
+                   specified by the Makefile, as in performance-tests/Misc.
+static_libs_only Only build static libraries.
+threads          Build with thread support.
+xt               Build with Xt (X11 Toolkit) support.
+fl               Build with FlTk (Fast Light Toolkit) support.
+tk               Build with Tk (Tcl/Tk) support.
+qt               Build with Qt (Trolltech Qt) support.
+ssl              Build with OpenSSL support.
+rapi             Build with RAPI
+split            Build the library by first splitting up the ACE source
+                   to several files, with one object code entity for each
+                   source file. This allows an application that is linked
+                   with ACE to extract _exactly_ what it needs from the
+                   library, resulting in a smaller executable.  Setting this
+                   to 1 overrides debug to 0.
+
+Usually, users do not need to be concerned with make targets.
+Just enter "make" on the command line to build.  A few notable
+targets are listed below.
+
+Target             Description
+------             -----------
+show_statics       Lists all static objects in object files built for
+                     current directory.  Only supported for g++.
+show_uninit        Lists all uninitialized in object files built for
+                     current directory.  Only supported for g++.
+
+
+ +


+

Building from Subversion (anonymous access)

+If users are building from our Subversion repository the +GNUmakefiles, and project files for building on various platforms will +not be available. Subversion users are expected to generate them +using MPC before building ACE, TAO or +CIAO. We point out some suggestions below to get bootstrapped +quickly. + + + +

+ +Back to the ACE +home page. + + + + +

+ + + +Last modified: Wed Jul 5 17:26:22 EST 2006 + + + +

diff --git a/ACE/ACE.mwc b/ACE/ACE.mwc new file mode 100644 index 00000000000..82b50da4046 --- /dev/null +++ b/ACE/ACE.mwc @@ -0,0 +1,32 @@ +// $Id$ +workspace { + exclude(automake) { + build + } + exclude { + TAO + } + + // The associate scope does not add directories to the workspace; + // it only associates a name with one or more directories. + associate(examples) { + examples + } + associate(tests) { + performance-tests + tests + } + associate(gperf) { + gperf + } + + // The '--' is a special key that indicates that the associated + // projects should be of the form @NAME@ in the generate Makefile.am. + associate(--) { + ACEXML + ASNMP + protocols + KOKYU + TAO + } +} diff --git a/ACE/ACEXML/ACEXML.mwc b/ACE/ACEXML/ACEXML.mwc new file mode 100644 index 00000000000..dd297256b34 --- /dev/null +++ b/ACE/ACEXML/ACEXML.mwc @@ -0,0 +1,5 @@ +// -*- MPC -*- +// $Id$ + +workspace { +} diff --git a/ACE/ACEXML/ChangeLog b/ACE/ACEXML/ChangeLog new file mode 100644 index 00000000000..ecb027c6021 --- /dev/null +++ b/ACE/ACEXML/ChangeLog @@ -0,0 +1,1142 @@ +Mon Jul 30 08:38:12 UTC 2007 Johnny Willemsen + + * apps/svcconf/Svcconf_Handler.cpp: + Layout changes + +Mon Jul 16 10:19:51 UTC 2007 Abdullah Sowayan + + * apps/svcconf/Svcconf_Handler.h: + * apps/svcconf/Svcconf_Handler.cpp: + * common/Attributes_Def_Builder.h: + * common/ContentHandler.h: + * common/DTDHandler.h: + * common/DefaultHandler.h: + * common/DefaultHandler.cpp: + * common/Element_Def_Builder.h: + * common/EntityResolver.h: + * common/ErrorHandler.h: + * common/Validator.h: + * common/XMLFilterImpl.h: + * common/XMLFilterImpl.cpp: + * common/XMLReader.h: + * examples/SAXPrint/Print_Handler.h: + * examples/SAXPrint/Print_Handler.cpp: + * examples/SAXPrint/SAXPrint_Handler.h: + * examples/SAXPrint/SAXPrint_Handler.cpp: + * parser/debug_validator/Debug_Attributes_Builder.h: + * parser/debug_validator/Debug_Attributes_Builder.cpp: + * parser/debug_validator/Debug_Element_Builder.h: + * parser/debug_validator/Debug_Element_Builder.cpp: + * parser/parser/Parser.h: + * parser/parser/Parser.cpp: + * tests/ContentHandler_Test.cpp: + + Fixed Fuzz warnings. Zap the usage of exception specification. + +Sun Jun 3 20:02:32 UTC 2007 Olli Savia + + * common/FileCharStream.cpp: + Replaced ungetc with ACE_OS::ungetc. + +Fri May 18 02:50:42 UTC 2007 Abdullah Sowayan + + * common/Mem_Map_Stream.cpp: + + It makes no sense to have code after a return statement + (such as ACE_ERROR_RETURN). It causes some builds to have + "statement is unreachable" warning. + + * examples/SAXPrint/main.cpp: + + Enhanced the "#ifndef" macros used to avoid "statement is + unreachable" warning. + +Tue May 15 17:36:23 UTC 2007 Johnny Willemsen + + * parser/parser/ParserInternals.h: + Removed msg_ member, it is not used at all. Thanks to Rajiv K. Shukla + for reporting this + +Tue Feb 27 21:15:23 UTC 2007 Ossama Othman + + * common/FileCharStream.cpp (open): + + s/ACE_Utils::Truncate/ACE_Utils::truncate_cast/g. The former is + deprecated. + +Tue Feb 20 17:26:28 UTC 2007 Krishnakumar B + + * common/InputSource.cpp: + * parser/parser/ParserContext.h: + * parser/parser/ParserContext.inl: + Use std::swap instead of ACE_Swap + +Tue Feb 13 20:17:28 UTC 2007 Krishnakumar B + + * apps/svcconf/Svcconf_Handler.cpp: Fixed a problem with + ACE_Module getting unloaded prematurely due to + ACEXML_Svcconf_Handler failing to register it with the service + repository. Thanks to gzeleniy@gmail.com for providing the fix. + +Wed Jan 03 14:20:00 UTC 2007 Simon Massey + + * common/XML_Macros.h: + With MFC, must delete any caught and eaten "out of memory" exceptions. + +Fri Oct 28 02:29:57 UTC 2006 Ossama Othman + + From Russell Mora + * common/ContentHandler.h: + * common/DefaultHandler.h: + * common/DefaultHandler.cpp: + * common/FileCharStream.cpp: + * common/FileCharStream.h: + * common/HttpCharStream.cpp: + * common/HttpCharStream.h: + * common/Mem_Map_Stream.cpp: + * common/Mem_Map_Stream.h: + * common/XMLFilterImpl.cpp: + * common/XMLFilterImpl.h: + * common/ZipCharStream.cpp: + * common/ZipCharStream.h: + * common/StrCharStream.cpp: + * examples/SAXPrint/Print_Handler.cpp: + * examples/SAXPrint/Print_Handler.h: + * examples/SAXPrint/SAXPrint_Handler.cpp: + * examples/SAXPrint/SAXPrint_Handler.h: + * parser/parser/Parser.cpp: + * parser/parser/Parser.h: + * tests/ContentHandler_Test.cpp: + + Added support for 64-bit file offsets. + + Addressed 64-bit conversion warnings. + +Tue Oct 24 18:00:15 UTC 2006 Ossama Othman + + * common/common.mpc: + * parser/parser/parser.mpc: + + Re-disabled ACEXML when ace_for_tao is enabled. ACEXML needs + the ACE_Configuration and memory map classes that are not found + in the ace_for_tao subset. + +Mon Oct 24 02:26:32 UTC 2006 Ossama Othman + + * common/common.mpc: + * parser/parser/parser.mpc: + + No longer any need to explicitly disable ACEXML in the + ace_for_tao configuration. + + * common/HttpCharStream.cpp: + + Fixed Coverity OVERRUN_STATIC and FORWARD_NULL errors. + + Improved const-correctness. + + * common/codecs.mpb: + + Disable ACEXML codecs support if ace_for_tao is enabled. + + * common/Mem_Map_Stream.cpp: + + Fixed Coverity NEGATIVE_RETURNS error. + + * common/SAXExceptions.cpp (_downcast): + + Removed redundant type checking code. + + (~ACEXML_SAXNotSupportedException): + (~ACEXML_SAXNotRecognizedException): + + Addressed Coverity USE_AFTER_FREE errors. + + (exception_name_): + * common/SAXExceptions.h (exception_name_): + + Declare this static constant as an array rather than a pointer. + Allows the compiler to perform additional optimizations. + +Tue Jun 20 08:23:12 UTC 2006 Johnny Willemsen + + * parser/parser/Parser.cpp: + 64bit fix + +Thu Mar 30 13:14:12 UTC 2006 Johnny Willemsen + + * common/NamespaceSupport.cpp: + Fixed value might be unitialized warnings + +Tue Mar 14 20:58:12 UTC 2006 jiang,shanshan + + * common/FileCharStream.cpp + * common/HttpCharStream.cpp + * common/Transcode.cpp + * common/XML_Macros.h + * parser/parser/Parser.cpp + * parser/parser/Parser.i + + Updated these files to solve the warnings when setting up "VC + level 4 warnings" on Windows. These warnings include + "unreachable code", "assignment within conditional expression", + "conversion from some type to another type, possible loss of + data", "local variable may be used without having been + initialized" and so on. Thanks to Lukas Gruetzmacher + for motivating the fix to + these "VC level 4 warnings". + +Fri Feb 10 23:45:14 UTC 2006 Steve Huston + + * common/NamespaceSupport.cpp: Add missing template instantiations to + match change below. + +Fri Feb 10 12:22:12 UTC 2006 Johnny Willemsen + + * common/NamespaceSupport.cpp: + Fixed compile error in unicode build + +Thu Feb 9 22:49:18 UTC 2006 Krishnakumar B + + * common/NamespaceSupport.h: + * common/NamespaceSupport.cpp: Use a normal ACE_Unbounded_Stack + instead of yet another custom stack. + + * parser/parser/Parser.h: + * parser/parser/Parser.cpp: + + Fixed a mismatched push/pop of the namespace context due to + popping namespace contexts without matching the end of the + element that caused a push. This resulted in more pops that + push and corrupting the memory. Also fixed an indirection into + a pointer that might have been corrupt when calling + startNamespacePrefix(). + +Tue Jan 24 23:09:08 UTC 2006 Krishnakumar B + + * apps/svcconf/Svcconf.cpp: + * apps/svcconf/Svcconf.h: + + Removed the overridden operator new/delete. I don't think that + they serve any purpose, and end up hiding the default variations. + +Mon Jan 23 14:11:12 UTC 2006 Johnny Willemsen + + * common/ZipCharStream.h: + Updated include of zziplib.h to zzip/zzip.h to get rid of deprecated + warnings + +Wed Jan 4 22:44:38 UTC 2006 J.T. Conklin + + * ChangeLog: + + Untabify. + Delete-trailing-whitespace. + + Changed "add-log-time-format" to a really ugly lambda expression + that formats changelog timestamps in UTC and works with both GNU + Emacs and XEmacs. + +Thu May 26 07:35:12 UTC 2005 Johnny Willemsen + + * common/XML_Util.h: + Fixed pragma once warning + +Tue May 24 18:39:02 2005 J.T. Conklin + + * common/Makefile.am: + + Regenerate. + + * common/common.mpc: + + Added XML_Util.h to Header_Files section. + +Tue May 24 09:18:34 2005 Justin Michel + + * tests/util/test.cpp: + + Fixed for loop scoping problem for non-standard compilers. + +Mon May 23 14:52:19 2005 Justin Michel + + * tests/util/util.mpc: + + Add missing $ Id tag. + +Mon May 23 13:02:25 2005 Justin Michel + + * common/XML_Util.h: + * common/XML_Util.cpp: + + Added new ACEXML_escape_string() functions to allow replacement of + illegal characters, (', ", &, <, >, etc.) with the escaped versions. + (", <, etc.) + + * tests/util/test.cpp: + * tests/util/util.mpc: + + This is a performance test used while making the above functions, and + testing performance with ACE_String_Base. + +Fri Apr 22 21:34:19 2005 Ossama Othman + + * parser/parser/Parser.cpp (parse_entity_decl): + + Fixed "variable may be used uninitialized" warning. + +Fri Apr 22 11:09:59 2005 J.T. Conklin + + * parser/parser/Makefile.am: + * common/Makefile.am: + + Regenerated. + + * parser/parser/parser.mpc: + * common/common.mpc: + + Add Pkgconfig_Files section. + +Wed Apr 20 12:20:26 2005 Ossama Othman + + * common/Attributes.h: + * common/ContentHandler.h: + * common/DTDHandler.h: + * common/EntityResolver.h: + * common/ErrorHandler.h: + * common/Locator.h: + * common/XMLReader.h: + + Added virtual destructors to address g++ 4.0 warnings. + + * common/Attributes.cpp: + * common/ContentHandler.cpp: + * common/DTDHandler.cpp: + * common/EntityResolver.cpp: + * common/ErrorHandler.cpp: + * common/Locator.cpp: + * common/XMLReader.cpp: + + New files containing destructors. + + * common/NamespaceSupport.cpp (getURI): + + Fixed "variable may be used uninitialized" warning. + +Mon Apr 18 14:10:12 UTC 2005 Johnny Willemsen + + * parser/parser/Entity_Manager.cpp: + Removed not uses static const + + * parser/parser/Entity_Manager.i: + Initialise pointer with 0 + +Sun Feb 13 23:54:25 2005 Ossama Othman + + From Lothar Werzinger + * apps/svcconf/Svcconf_Handler.cpp: + + Enhanced error messages. + +Wed Jan 5 14:08:12 UTC 2004 Johnny Willemsen + + * common/DefaultHandler.{h,cpp,i}: + * common/NamespaceSupport.{h,cpp,i}: + * common/Transcode.{h,cpp,i}: + * examples/SAXPrint/Print_Handler.{cpp,i}: + Removed .i file and updated h/cpp file + + * common/Makefile.am: + Updated + +Tue Aug 17 19:07:11 2004 J.T. Conklin + + * common/NamespaceSupport.cpp: + + Changed ACE_NEW_RETURN to use "NS_Node_T" instead of "struct + NS_Node_T" --- the latter triggers a gcc 3.3 parser bug when + used with the "new (std::nothrow)" version of ACE_NEW_RETURN. + Fortunately, the "struct" is unnecessary. + +Sat Feb 21 23:51:25 2004 Krishnakumar B + + * common/Exception.h: + * common/Exception.cpp: + * common/SAXExceptions.h: + * common/SAXExceptions.cpp: + + Fixed a few bugs in the way the exceptions were set-up in the + case when exceptions=0. Provided implementations for operator + assignment and duplicate(). This should fix problems with + throwing and catching exceptions when exceptions=0. + +Sat Jan 31 20:06:57 2004 Krishnakumar B + + * parser/parser/Parser.cpp (parse_PE_reference): Added ACE_TEXT + to satisfy WCHAR windows builds. Thanks to Johnny for reporting + these errors. + +Fri Jan 30 16:04:43 2004 Krishnakumar B + + * parser/parser/Parser.cpp: Rewrote a simple string manipulation + involving ACE_String_Base::operator +() to use const char* + instead of char, so that we don't need an explicit template + instantiation for it. + + * examples/SAXPrint/main.cpp: Added missing explicit template + instantiations for ACE_Auto_Basic_Ptr. + + Thanks to Olli Savia for reporting problems with + explicit template instantiation on LynxOS. + +Thu Jan 8 18:40:34 2004 Krishnakumar B + + + * common/CharStream.h: Added a new rewind() method so that we can + reuse the same parser instance to parse the same file multiple + times. + + * common/FileCharStream.cpp: + * common/HttpCharStream.h: + * common/HttpCharStream.cpp: + * common/StrCharStream.cpp: + * common/ZipCharStream.cpp: + + Fixed implementation of rewind(). + + * common/Mem_Map_Stream.cpp: + + Fixed memory leak caused by the Svc_Handler not getting deleted. + + * apps/svcconf/Makefile.ACEXML_XML_Svc_Conf_Parser: + * parser/parser/Makefile.ACEXML_Parser: + * examples/SAXPrint/Makefile.SAXPrint: + * common/Makefile.ACEXML: + * tests/Makefile.ContentHandler_Test: + * tests/Makefile.HttpCharStream_Test: + * tests/Makefile.NamespaceSupport_Test: + * tests/Makefile.Transcoder_Test: + + Updated dependencies. + + * examples/SAXPrint/main.cpp: + + Added code to test the parser to parse the same file multiple + times. This still needs some cleaning. + + * parser/parser/Entity_Manager.h: + * parser/parser/Entity_Manager.i: + * parser/parser/Entity_Manager.cpp: + + Use a pointer to ACE_Hash_Map_Manager_Ex and delete it on every + reset() of the Entity_Manager. This should fix all the problems + with SIGFPE's when we try to recover from a parse error. + + * parser/parser/Parser.cpp: + * parser/parser/ParserContext.h: + * parser/parser/ParserContext.inl: + + Fixed memory leaks reported by Ken Sedgewick . + This should fix Bugzill bug 1694. While at it, fix bugs in + handling of entity references in INCLUDE/IGNORE sections, + ATTLIST sections. + + +Thu Dec 18 13:13:57 2003 Krishnakumar B + + * common/Transcode.h (ACEXML_Transcoder): + * common/Transcode.cpp (ACEXML_Transcoder): + + Renamed the ACEXML_Transcoder::STATUS enum to use ACEXML + prefixes. Thanks to Johnny Willemsen for + reporting the clash with native #defines on Tru64. + +Sat Jul 19 18:38:50 UTC 2003 Don Hinton + + * apps/svcconf/Svcconf.h: + * common/*.h: + * parser/*.h: + * parser/parser/*.h: + Added "/**/" between the #include and filename for pre.h and + post.h so Doxygen won't include them in the file reference tree + graphs. + +Fri Jul 18 10:29:55 2003 Krishnakumar B + + * tests/NamespaceSupport_Test.cpp (ACE_TMAIN): Added + initialization of ACEXML_NamespaceSupport so that we don't + crash. + + * tests/ContentHandler_Test.cpp: Removed "" at the end of + the ACEXML_StrCharStream. XML is not HTML. Added a print + statement to the catch clause so that we know what is happening + when exception occurs. + +Mon Jul 14 18:49:01 UTC 2003 Johnny Willemsen + + * apps/svcconf/Makefile: + * common/Makefile: + * examples/SAXPrint/Makefile: + * parser/parser/Makefile: + * tests/Makefile: + Removed windows specific rules. They are not needed and only + cause problems when using a different command shell then cmd + like msys. This solves errors in the MinGW build. +Sat Jul 5 13:33:36 UTC 2003 Johnny Willemsen + + * Makefile: + Removed windows specific rules. They are not needed and only + cause problems when using a different command shell then cmd + like msys. This solves errors in the MinGW build. + +Fri Jun 27 12:55:33 UTC 2003 Johnny Willemsen + + * parser/parser/Entity_Manager.h: + * parser/parser/Entity_Manager.i: + Removed not useful const return qualifier to resolve intel + compiler warnings. + +Thu Jun 26 01:47:03 UTC 2003 Don Hinton + + * parser/parser/Parser.i: + Added (int) cast to table index to get rid of a warning. + +Tue Jun 24 23:31:44 2003 Nanbor Wang + + * apps/svcconf/Svcconf.cpp: Turned off validation temporarily when + handling svc.conf files. All of the converted svc.conf.xml + files do not have associate doctype at the moment. + +Tue Jun 24 15:38:49 UTC 2003 Don Hinton + + * common/NamespaceSupport.i: + Added include of ACE.h. + +Sun Jun 1 09:09:22 2003 Balachandran Natarajan + + * parser/parser/Parser.cpp: + * parser/parser/Entity_Manager.cpp: Added explicit template + instantiations. + +Fri May 30 14:16:33 2003 Krishnakumar B + + * examples/svcconf/.depend.Makefile.Svcconf: + * examples/svcconf/Makefile: + * examples/svcconf/Makefile.Svcconf: + * examples/svcconf/Makefile.Svcconf.bor: + * examples/svcconf/Makefile.bor: + * examples/svcconf/README: + * examples/svcconf/Svcconf.dsp: + * examples/svcconf/Svcconf.dsw: + * examples/svcconf/Svcconf.mpc: + * examples/svcconf/Svcconf_Handler.cpp: + * examples/svcconf/Svcconf_Handler.h: + * examples/svcconf/Svcconf_Handler.i: + * examples/svcconf/main.cpp: + + Removed directories causing problems with Win XP release. + + * ACEXML.dsw: + * Makefile: + * Makefile.bor: + * apps/svcconf/Makefile: + * apps/svcconf/Makefile.ACEXML_XML_Svc_Conf_Parser.bor: + * apps/svcconf/Makefile.bor: + * common/Makefile: + * common/Makefile.ACEXML.bor: + * common/Makefile.bor: + * examples/SAXPrint/Makefile: + * examples/SAXPrint/Makefile.SAXPrint.bor: + * examples/SAXPrint/Makefile.bor: + * parser/parser/Makefile: + * parser/parser/Makefile.ACEXML_Parser.bor: + * parser/parser/Makefile.bor: + * tests/.depend.Makefile.ContentHandler_Test: + * tests/.depend.Makefile.HttpCharStream_Test: + * tests/.depend.Makefile.NamespaceSupport_Test: + * tests/.depend.Makefile.Transcoder_Test:: + * tests/Makefile: + * tests/Makefile.ContentHandler_Test: + * tests/Makefile.ContentHandler_Test.bor: + * tests/Makefile.HttpCharStream_Test.bor: + * tests/Makefile.NamespaceSupport_Test.bor: + * tests/Makefile.Transcoder_Test.bor: + * tests/Makefile.bor: + + More build related delicacies needed updating because of the + previous change. + +Fri May 30 13:56:40 2003 Krishnakumar B + + * common/XML_Common.dsp: Removed old dsp left over from previous + merge. + +Fri May 30 13:54:57 2003 Krishnakumar B + + * parser/parser/Parser.dsp: Removed this erroneous dsp file left + over from the merge. + +Fri May 30 13:50:11 2003 Krishnakumar B + + * common/ZipCharStream.h: Removed broken logic to undefine macro + version of read. We don't want read to be a macro in ACEXML. + Present because of brokenness in ZZIPLIB. + +Fri May 30 13:36:39 2003 Krishnakumar B + + * parser/parser/Parser.cpp (parse_ignoresect): Fixed a couple of + warnings. Break out of infinite loop. + + * apps/svcconf/.depend.Makefile.ACEXML_XML_Svc_Conf_Parser: + * common/.depend.Makefile.ACEXML: + * examples/SAXPrint/.depend.Makefile.SAXPrint: + * examples/svcconf/.depend.Makefile.Svcconf: + * parser/parser/.depend.Makefile.ACEXML_Parser: + + Added missing dependency files. This should clear out the red. + + * examples/svcconf/main.cpp: + * common/HttpCharStream.cpp: + * parser/parser/Parser.i: + + Fixed warnings with BCB. Thanks to Johnny for reporting these. + +Thu May 29 23:13:40 2003 Krishnakumar B + + * examples/SAXPrint/SAXPrint_Handler.cpp: Fixed some minor + warnings. + +Thu May 29 23:09:27 2003 Krishnakumar B + + * parser/parser/Makefile.Parser: + + Removed extra file left over by mistake. + +Thu May 29 23:00:24 2003 Krishnakumar B + + * tests/Makefile.ContentHandler_Test: + * tests/Makefile: + + This file got left out by mistake during the big merge. + +Thu May 29 22:03:40 2003 Krishnakumar B + + * ACEXML.mwc: + * ChangeLog: + * apps/svcconf/ACEXML_XML_Svc_Conf_Parser.dsp: + * apps/svcconf/Makefile.ACEXML_XML_Svc_Conf_Parser: + * apps/svcconf/Makefile.ACEXML_XML_Svc_Conf_Parser.bor: + * common/ACEXML.dsp: + * common/Makefile.ACEXML: + * common/Makefile.ACEXML.bor: + * examples/SAXPrint/Makefile.SAXPrint: + * examples/SAXPrint/Makefile.SAXPrint.bor: + * examples/svcconf/Makefile: + * examples/svcconf/Makefile.Svcconf: + * examples/svcconf/Makefile.Svcconf.bor: + * examples/svcconf/Svcconf.mpc: + * parser/parser/ACEXML_Parser.dsp: + * parser/parser/Makefile.ACEXML_Parser: + * parser/parser/Makefile.ACEXML_Parser.bor: + * parser/parser/Makefile.Parser: + * tests/Makefile.ContentHandler_Test.bor: + * tests/Makefile.HttpCharStream_Test: + * tests/Makefile.HttpCharStream_Test.bor: + * tests/Makefile.NamespaceSupport_Test: + * tests/Makefile.NamespaceSupport_Test.bor: + * tests/Makefile.Transcoder_Test: + * tests/Makefile.Transcoder_Test.bor: + + New files to build ACEXML generated using MPC. + + * apps/svcconf/svcconf.dtd: + + Moved the DTD from a hidden location to a prominent one. + + * examples/SAXPrint/namespaces.xml: + + New file to test namespace support. + + * common/ZipCharStream.cpp: + * common/ZipCharStream.h: + + New files to support reading files from within a ZIP archive as + a stream. + + * parser/parser/ParserContext.cpp: + * parser/parser/ParserContext.h: + * parser/parser/ParserContext.inl: + + New files to support a per stream context encountered when + parsing references. + + * parser/parser/ParserInternals.cpp: + * parser/parser/ParserInternals.h: + + Move some common functions from Parser.cpp to these files. + + * ACEXML.dsw: + * Makefile: + * Makefile.bor: + * apps/svcconf/Makefile: + * apps/svcconf/Makefile.bor: + * common/Makefile: + * common/Makefile.bor: + * examples/SAXPrint/Makefile: + * examples/SAXPrint/Makefile.bor: + * examples/SAXPrint/SAXPrint.dsp: + * examples/SAXPrint/SAXPrint.mpc: + * examples/svcconf/Makefile.bor: + * examples/svcconf/Svcconf.dsp: + * parser/parser/Makefile: + * parser/parser/Makefile.bor: + * tests/ContentHandler_Test.cpp: + * tests/ContentHandler_Test.dsp: + * tests/HttpCharStream_Test.cpp: + * tests/HttpCharStream_Test.dsp: + * tests/Makefile: + * tests/Makefile.bor: + * tests/NamespaceSupport_Test.dsp: + * tests/Transcoder_Test.dsp: + + Build related files changed with the introduction of MPC to + build ACEXML. + + * examples/SAXPrint/ns.svc.conf.xml: + * examples/SAXPrint/svc.conf.xml: + + New files to test specific features of the parser. + + * apps/svcconf/Svcconf.cpp: + * common/Attributes.h: + * common/Attributes_Def_Builder.h: + * common/CharStream.h: + * common/DefaultHandler.cpp: + * common/Encoding.cpp: + * common/Encoding.h: + * common/Exception.cpp: + * common/FileCharStream.cpp: + * common/FileCharStream.h: + * common/HttpCharStream.cpp: + * common/HttpCharStream.h: + * common/InputSource.cpp: + * common/InputSource.h: + * common/LocatorImpl.cpp: + * common/LocatorImpl.h: + * common/Mem_Map_Stream.cpp: + * common/NamespaceSupport.cpp: + * common/NamespaceSupport.h: + * common/SAXExceptions.cpp: + * common/StrCharStream.cpp: + * common/StrCharStream.h: + * common/StreamFactory.cpp: + * common/Transcode.cpp: + * common/Transcode.h: + * common/Transcode.i: + * examples/SAXPrint/Print_Handler.cpp: + * examples/SAXPrint/SAXPrint_Handler.cpp: + * examples/SAXPrint/main.cpp: + * examples/svcconf/main.cpp: + * parser/parser/Parser.cpp: + * parser/parser/Parser.h: + * parser/parser/Parser.i: + * parser/parser/Entity_Manager.cpp: + * parser/parser/Entity_Manager.h: + * parser/parser/Entity_Manager.i: + + Merge from the Validator branch. It is not close to conformance + related to Validation but is quite stable as a parser which + recognizes the complete XML grammar. + +Fri Jan 24 20:28:22 2003 Krishnakumar B + + * parser/parser/Parser.cpp (pop_context): Bail out if there is + only one element on the context stack. Bad things [TM] will happen + if we pop the only context available. + +Mon Nov 25 04:25:15 2002 Krishnakumar B + + * parser/parser/Parser.cpp (reset): + * parser/parser/Parser.h: + + Fixed a bunch of compilation errors. Removed unnecessary + creation and destroyal of ACEXML_Strings which seems to speed up + the parser quite a bit. + + * examples/SAXPrint/SAXPrint_Handler.cpp: + * examples/SAXPrint/main.cpp: + + Don't report startPrefixMapping() and endPrefixMapping() as they + obstruct the pretty-printing of SAXPrint. They are bogus anyway. + +Wed Nov 20 22:58:12 2002 Krishnakumar B + + * parser/parser/Parser.cpp (parse_char_reference): + + Fixed stupid thinko in conditional parsing of a hex character + reference. + + * common/Mem_Map_Stream.cpp: + + We can use the old way of fetching on-demand and don't need to + use a while loop. + + * common/NamespaceSupport.cpp: + + Fixed a long-standing bug with core dumping. With these changes, + we are able to parse the XML specification itself. Is this + called Meta or what ? + +Wed Nov 20 20:44:56 2002 Krishnakumar B + + * common/Mem_Map_Stream.cpp (grow_file_and_remap): + + Fixed bug where we were trying to remap two different files at + the same location without closing the first. + + * common/HttpCharStream.cpp (get_url): + + Don't try to parse an empty file. Removes a nasty SIGSEGV. + +Wed Nov 20 01:06:26 2002 Krishnakumar B + + * common/Mem_Map_Stream.cpp: + + Minor indenting changes. + + * tests/HttpCharStream_Test.cpp: + + Modified test to show bug in ACE_File_Addr. + +Tue Nov 19 20:46:35 2002 Krishnakumar B + + * examples/SAXPrint/Print_Handler.cpp (warning): + + Missed syncing the function prototypes last time. + +Tue Nov 19 20:18:09 2002 Krishnakumar B + + * parser/parser/Parser.h: + * parser/parser/Parser.cpp (normalize_systemid): + + Fix an off-by-one error in normalization. The document's base + URI is never empty. Now we parse relative document URI + correctly. + + Implement the previously unimplemented parsing from a systemId. + + * common/InputSource.cpp: + * common/InputSource.h: + + Implement creating an InputSource from a systemId. + + * common/CharStream.h: + + Added a new method getSystemId(). + + * common/FileCharStream.cpp: + * common/FileCharStream.h: + * common/HttpCharStream.cpp: + * common/HttpCharStream.h: + * common/ZipCharStream.cpp: + * common/ZipCharStream.h: + * common/StrCharStream.cpp: + * common/StrCharStream.h: + + Added implementation for getSystemId(). + + * examples/SAXPrint/Print_Handler.cpp: + * examples/SAXPrint/SAXPrint_Handler.cpp: + + Synched up the printing of exception messages. + + * examples/SAXPrint/main.cpp: + + Fixed broken internal string version of a sample XML file. + +Tue Nov 19 15:02:06 2002 Krishnakumar B + + * apps/svcconf/XML_Svc_Conf_Parser.dsp: + * common/XML_Common.dsp: + * examples/SAXPrint/SAXPrint.dsp: + * parser/debug_validator/Debug_Validator.dsp: + * parser/parser/Parser.dsp: + + Modified to accomodate zlib and zziplig. Will probably change + before the merge. + + * parser/parser/Parser.cpp: + + Try to parse external DTD only if validation is required. + +Mon Nov 18 22:29:39 2002 Krishnakumar B + + * Makefile: + + Deleted this file in the previous check-in. Re-add it. + +Mon Nov 18 22:19:47 2002 Krishnakumar B + + * common/common.mpc: + * parser/parser/parser.mpc: + * parser/debug_validator/validator.mpc: + * apps/svcconf/svcconf.mpc: + * examples/svcconf/Svcconf.mpc: + * examples/SAXPrint/saxprint.mpc: + * tests/tests.mpc: + * ACEXML.mwc: + + New MPC files and Workspace file. + + * common/Makefile.XML_Common: + * apps/svcconf/Makefile.XML_Svc_Conf_Parser: + * parser/parser/Makefile.Parser: + * parser/debug_validator/Makefile.Validator: + * examples/SAXPrint/Makefile.SAXPrint: + * examples/svcconf/Makefile.Svcconf: + * tests/Makefile.HttpCharStream_Test: + * tests/Makefile.NamespaceSupport_Test: + * tests/Makefile.Transcoder_Test: + + New Makefiles generated by MPC. + + * common/Makefile: + * parser/parser/Makefile: + * parser/Makefile: + * examples/Makefile: + * apps/Makefile: + * apps/svcconf/Makefile: + * examples/SAXPrint/Makefile: + * tests/Makefile: + + Removed old Makefiles. + + * parser/parser/Parser.cpp: + * common/StreamFactory.cpp: + * common/ZipCharStream.cpp: + * common/ZipCharStream.h: + + Fixed compilation errors. + +Mon Nov 18 20:30:30 2002 Krishnakumar B + + * common/CharStream.h: + * common/Encoding.cpp: + * common/FileCharStream.cpp: + * common/FileCharStream.h: + * common/StrCharStream.cpp: + * common/StrCharStream.h: + * common/HttpCharStream.cpp: + * common/HttpCharStream.h: + + Fixed a number of minor typos and debugging statements. + + * common/LocatorImpl.cpp: Check for a valid string before + assigning it to the new Locator. + + * common/NamespaceSupport.cpp: + + Make sure that we don't have a null prefix before trying to + dereference the prefix. + + * common/ZipCharStream.cpp: + * common/ZipCharStream.h: + + New stream which reads files from a ZIP archive. + + * common/StreamFactory.cpp: + + Modified to accomodate ZipCharStream. + + * examples/SAXPrint/Print_Handler.cpp: + * examples/SAXPrint/SAXPrint_Handler.cpp: + * examples/SAXPrint/main.cpp: + + Commented out a lot of unnecessary debug statements. + + * parser/parser/Parser.cpp: + * parser/parser/Parser.h: + + Lots of bugfixes. Finally we parse the XML version of XHTML + specification without dumping core. + +Sat Nov 16 21:18:55 2002 Krishnakumar B + + * parser/parser/Parser.cpp: + * parser/parser/Parser.h: + + More bugs fixed. Add support for parsing PE references within + attribute list declarations and clean up the same. Add support + for parsing PE references within element declarations. + +Tue Nov 12 19:48:34 2002 Krishnakumar B + + * parser/parser/ParserContext.cpp: + * parser/parser/ParserContext.h: + * parser/parser/ParserContext.inl: + + New files which hold the ParserContext needed to handle the + switching of input streams on the fly. + + * parser/parser/ParserInternals.cpp: + * parser/parser/ParserInternals.h: + + Moved some generic code from Parser.cpp to here. + + * apps/svcconf/Makefile: + * common/Makefile: + * parser/parser/Makefile: + + Updated dependencies. + + * common/Attributes_Def_Builder.h: + + No need to typedef in C++. + + * common/DefaultHandler.cpp: + + Minor typos. + + * common/Encoding.cpp: + + If auto-detection of encoding fails, assume that it is UTF-8. + + * common/Exception.cpp: + + Change the error message from ACE_DEBUG to ACE_ERROR. + + * common/FileCharStream.cpp: Handle BOM of UTF-8 in + addition to UTF-16. Cleanup unnecessary parens. + + * common/HttpCharStream.cpp: + * common/HttpCharStream.h: + + Add support for auto-detection of encoding. + + * common/InputSource.cpp: + * common/InputSource.h: + + Fixes for use with ACEXML_Parser_Context. + + * common/LocatorImpl.cpp: + * common/LocatorImpl.h: + + Fixed bug in copy constructor which resulted in locator + information not getting set properly. + + * common/NamespaceSupport.cpp: + * common/NamespaceSupport.h: + + Implement reset() method. + + * common/SAXExceptions.cpp: + + Change the error message from ACE_DEBUG to ACE_ERROR. + + * common/StrCharStream.cpp: + + Handle copying of bytes according to sizeof (ACE_WCHAR). + + * common/StreamFactory.cpp: Create the appropriate stream + given an URI. We don't try to normalize the URI here. It is done + in the Parser. + + * common/Transcode.cpp: + * common/Transcode.i: + + Moved some very big functions from .i to .cpp. + + * examples/SAXPrint/SAXPrint_Handler.cpp: + * examples/SAXPrint/main.cpp: + + Updates to reflect the new calling convention in the Parser. + + * parser/parser/Entity_Manager.cpp: + * parser/parser/Entity_Manager.h: + * parser/parser/Entity_Manager.i: + + Implemented support for resolving SYSTEM and PUBLIC ids from + the Entity_Manager. + + * parser/parser/Parser.cpp: + * parser/parser/Parser.h: + * parser/parser/Parser.i: + + Implemented support for external parameter and entity + references. Rewrote a lot of the basic parsing functionality to + adhere to the standard. Implment partial support for validation + of XML files. + + +Fri Oct 25 15:44:04 2002 Krishnakumar B + + * parser/parser/Parser.i: Handle end-of-line as required by + the spec. Specifically any sequence of 0x0D or 0x0D 0x0A should + be normalized to a 0x0A before passing to the XML processor. + + * parser/parser/Parser.cpp: Remove checks for 0x0D as it is + handled tranparently now. + +Thu Oct 24 21:06:44 2002 Krishnakumar B + + * common/NamespaceSupport.cpp: Define strings normally and + not as an array. + + * common/Attributes_Def_Builder.h: No need to typedef in C++. + +Thu Oct 24 01:52:46 2002 Krishnakumar B + + * ACEXML\parser\parser\Parser.cpp: Moved out the declaration of + variables outside case labels. MSVC doesn't like it. + +Wed Oct 23 22:24:59 2002 Krishnakumar B + + * parser/parser/Parser.cpp: Fixed a stupid thinko in array + initialization. + +Wed Oct 23 17:27:14 2002 Krishnakumar B + + * common/Encoding.cpp: + * common/Encoding.h: + + Use UTF-16 instead of UTF-16LE/UTF-16BE as the specification + doesn't require mentioning the endianness of the input. + + * common/Transcode.h: Fixed some minor typos. + + * examples/SAXPrint/namespaces.xml: New file which tests + out the namespaces feature much better. + + * apps/svcconf/Makefile: + * parser/parser/Makefile: + + Updated dependencies. + + * parser/parser/ParserErrors.h: New file which contains the + error codes of all the error spit out by the parser. + + * examples/SAXPrint/Print_Handler.cpp: + * examples/SAXPrint/SAXPrint_Handler.cpp: + + Make sure that the characters() function describes the arguments + as start and length instead of start and end. + + * parser/parser/Parser.dsp: Added ParserErrors.h to the + project file. + + * parser/parser/Parser.cpp: + * parser/parser/Parser.h: + + Use minor codes when reporting error in the parser. This cleans + up a lot of repeated error messages and indenting so that we + don't need to spill over 80 columns and have a standardized way + of reporting errors. Rewrote parse_cdata() so that is is much + simpler. Removed try_grow_cdata() as it is no longer needed. + Handle the case when the parser was accepting invalid character + references(). + +Local Variables: +mode: change-log +add-log-time-format: (lambda () (progn (setq tz (getenv "TZ")) (set-time-zone-rule "UTC") (setq time (format-time-string "%a %b %e %H:%M:%S %Z %Y" (current-time))) (set-time-zone-rule tz) time)) +indent-tabs-mode: nil +End: diff --git a/ACE/ACEXML/Makefile.am b/ACE/ACEXML/Makefile.am new file mode 100644 index 00000000000..5e025e19d26 --- /dev/null +++ b/ACE/ACEXML/Makefile.am @@ -0,0 +1,17 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +SUBDIRS = \ + common \ + parser \ + examples \ + apps \ + tests + diff --git a/ACE/ACEXML/README b/ACE/ACEXML/README new file mode 100644 index 00000000000..1e65588029e --- /dev/null +++ b/ACE/ACEXML/README @@ -0,0 +1,17 @@ +$Id$ + +ACE XML PARSER Framework README file + +* Character set + +ACE XML only deal with pure unicode encoding. I.e., ACE XML +does not care about language specific encoding information. + +* SAX - The Simple API for XML + +ACE XML Parser interfaces follows the the design of SAX 2.0, which is +a public domain specification for Java. The major difference between +ACE XML Parser interfaces and SAX is that we added an reference of +ACEXML_Env to every SAX method to accomodate platforms/compilers that +don't support C++ exceptions. SAX is defined by David Megginson + diff --git a/ACE/ACEXML/apps/Makefile.am b/ACE/ACEXML/apps/Makefile.am new file mode 100644 index 00000000000..7f7bf963687 --- /dev/null +++ b/ACE/ACEXML/apps/Makefile.am @@ -0,0 +1,13 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +SUBDIRS = \ + svcconf + diff --git a/ACE/ACEXML/apps/svcconf/ACEXML_XML_Svc_Conf_Parser.pc.in b/ACE/ACEXML/apps/svcconf/ACEXML_XML_Svc_Conf_Parser.pc.in new file mode 100644 index 00000000000..3cda818ca76 --- /dev/null +++ b/ACE/ACEXML/apps/svcconf/ACEXML_XML_Svc_Conf_Parser.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: ACEXML_XML_Svc_Conf_Parser +Description: ACE XML Service Configurator Parser +Requires: ACEXML_Parser +Version: @VERSION@ +Libs: -L${libdir} -lACEXML_XML_Svc_Conf_Parser +Cflags: -I${includedir} diff --git a/ACE/ACEXML/apps/svcconf/Makefile.am b/ACE/ACEXML/apps/svcconf/Makefile.am new file mode 100644 index 00000000000..2464ab3ad33 --- /dev/null +++ b/ACE/ACEXML/apps/svcconf/Makefile.am @@ -0,0 +1,79 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +includedir = @includedir@/ACEXML/apps/svcconf + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + + +## Makefile.ACEXML_XML_Svc_Conf_Parser.am + +if BUILD_ACEXML +if !BUILD_ACE_FOR_TAO + +lib_LTLIBRARIES = libACEXML_XML_Svc_Conf_Parser.la + +libACEXML_XML_Svc_Conf_Parser_la_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ACEXML/common + +if BUILD_ZLIB +if BUILD_ZZIP +libACEXML_XML_Svc_Conf_Parser_la_CPPFLAGS += \ + $(ACE_ZZIP_CPPFLAGS) \ + $(ACE_ZLIB_CPPFLAGS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +libACEXML_XML_Svc_Conf_Parser_la_SOURCES = \ + Svcconf.cpp \ + Svcconf_Handler.cpp + +libACEXML_XML_Svc_Conf_Parser_la_LDFLAGS = \ + -release @ACE_VERSION_NAME@ + +if BUILD_ZLIB +if BUILD_ZZIP +libACEXML_XML_Svc_Conf_Parser_la_LDFLAGS += \ + $(ACE_ZZIP_LDFLAGS) \ + $(ACE_ZLIB_LDFLAGS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +libACEXML_XML_Svc_Conf_Parser_la_LIBADD = \ + $(ACE_BUILDDIR)/ACEXML/parser/parser/libACEXML_Parser.la \ + $(ACE_BUILDDIR)/ACEXML/common/libACEXML.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +if BUILD_ZLIB +if BUILD_ZZIP +libACEXML_XML_Svc_Conf_Parser_la_LIBADD += \ + $(ACE_ZZIP_LIBS) \ + $(ACE_ZLIB_LIBS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +nobase_include_HEADERS = \ + Svcconf.h \ + Svcconf_Handler.h \ + Svcconf_Handler.inl + +endif !BUILD_ACE_FOR_TAO +endif BUILD_ACEXML + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/ACEXML/apps/svcconf/README b/ACE/ACEXML/apps/svcconf/README new file mode 100644 index 00000000000..8a39a40bfe3 --- /dev/null +++ b/ACE/ACEXML/apps/svcconf/README @@ -0,0 +1,4 @@ +$Id$ + +This directory implement a DLL that contains the parser for XML based +service configurator. diff --git a/ACE/ACEXML/apps/svcconf/Svcconf.cpp b/ACE/ACEXML/apps/svcconf/Svcconf.cpp new file mode 100644 index 00000000000..7fd69046ec3 --- /dev/null +++ b/ACE/ACEXML/apps/svcconf/Svcconf.cpp @@ -0,0 +1,124 @@ +// $Id$ + + +#include "Svcconf.h" +#include "ACEXML/common/FileCharStream.h" +#include "ACEXML/common/StrCharStream.h" +#include "ACEXML/parser/parser/Parser.h" + +#if (ACE_USES_CLASSIC_SVC_CONF == 0) + +extern "C" ACE_Proper_Export_Flag ACE_XML_Svc_Conf * +_ACEXML_create_XML_Svc_Conf_Object (void) +{ + ACE_XML_Svc_Conf *retp = 0; + + ACE_NEW_RETURN (retp, + ACEXML_Svcconf_Parser (), + 0); + + return retp; +} + +ACEXML_Svcconf_Parser::ACEXML_Svcconf_Parser () +{ + this->parser_.setContentHandler (&this->svcconf_handler_); + this->parser_.setDTDHandler (&this->svcconf_handler_); + this->parser_.setErrorHandler (&this->svcconf_handler_); + this->parser_.setEntityResolver (&this->svcconf_handler_); + ACEXML_TRY_NEW_ENV + { + this->parser_.setFeature (ACE_TEXT ("http://xml.org/sax/features/validation"), + 0 + ACEXML_ENV_ARG_PARAMETER); + ACEXML_TRY_CHECK; + } + ACEXML_CATCH (ACEXML_SAXException, ex) + { + ex.print (); // Can't do much except printing the error. + return; + } + ACEXML_ENDTRY; +} + +ACEXML_Svcconf_Parser::~ACEXML_Svcconf_Parser () +{ + +} + + +int +ACEXML_Svcconf_Parser::parse_file (const ACE_TCHAR file[]) +{ + if (file == 0) + ACE_ERROR_RETURN ((LM_ERROR, "ACEXML_Svcconf_Parser: No filename specified\n"), -1); + + ACEXML_FileCharStream *fstm = 0; + ACE_NEW_RETURN (fstm, + ACEXML_FileCharStream (), + 1); + + if (fstm->open (file) != 0) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("ACEXML_Svcconf_Parser: Fail to open XML file: %s\n"), + file), + -1); + + this->input_stream_.setCharStream (fstm); + + ACEXML_TRY_NEW_ENV + { + this->parser_.parse (&this->input_stream_ ACEXML_ENV_ARG_PARAMETER); + ACEXML_TRY_CHECK; + } + ACEXML_CATCH (ACEXML_SAXException, ex) + { + ex.print (); + return -1; + } + ACEXML_ENDTRY; + return 0; +} + + +int +ACEXML_Svcconf_Parser::parse_string (const ACE_TCHAR str[]) +{ + if (str == 0) + ACE_ERROR_RETURN ((LM_ERROR, "ACEXML_Svcconf_Parser: Can't parse a null string\n"), -1); + + ACEXML_StrCharStream *stm = 0; + ACE_NEW_RETURN (stm, ACEXML_StrCharStream, -1); + if (stm->open (str, ACE_TEXT ("Svcconf")) < 0) + ACE_ERROR_RETURN ((LM_ERROR, "ACEXML_Svcconf_Parser: Unable to create " + "input stream.\n"), -1); + + this->input_stream_.setCharStream (stm); + ACEXML_TRY_NEW_ENV + { + this->parser_.parse (&this->input_stream_ ACEXML_ENV_ARG_PARAMETER); + ACEXML_TRY_CHECK; + } + ACEXML_CATCH (ACEXML_SAXException, ex) + { + // If there was a problem parsing the stream, set the errno + // to EINVAL to indicate to upper levels that the stream was + // invalid. + ACE_OS::last_error (EINVAL); + ex.print (); + return -1; + } + ACEXML_ENDTRY; + return 0; +} + +#else + +# if defined (_AIX) && \ + (defined (__IBMCPP__) && (__IBMCPP__ >= 500) && (__IBMCPP__ < 600)) +// This simply shuts up the AIX linker that complains there are no +// csects or exported symbols when building with Visual Age C++ 5. +extern "C" void ace_shut_up_aix_ld (void) {}; +# endif /* AIX && __IBMCPP__ == 500 */ + +#endif /* ACE_USES_CLASSIC_SVC_CONF == 0 */ diff --git a/ACE/ACEXML/apps/svcconf/Svcconf.h b/ACE/ACEXML/apps/svcconf/Svcconf.h new file mode 100644 index 00000000000..9879776fce5 --- /dev/null +++ b/ACE/ACEXML/apps/svcconf/Svcconf.h @@ -0,0 +1,44 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Svcconf.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + + +#ifndef ACEXML_SVCCONF_H +#define ACEXML_SVCCONF_H + +#include /**/ "ace/pre.h" +#include "ace/XML_Svc_Conf.h" +#include "ACEXML/parser/parser/Parser.h" +#include "Svcconf_Handler.h" + +#if (ACE_USES_CLASSIC_SVC_CONF == 0) + +class ACEXML_Svcconf_Parser : public ACE_XML_Svc_Conf +{ +public: + ACEXML_Svcconf_Parser (); + + virtual ~ACEXML_Svcconf_Parser (); + + virtual int parse_file (const ACE_TCHAR file[]); + + virtual int parse_string (const ACE_TCHAR str[]); + +protected: + ACEXML_Parser parser_; + ACEXML_Svcconf_Handler svcconf_handler_; + ACEXML_InputSource input_stream_; +}; + +#endif /* ACE_USES_CLASSIC_SVC_CONF == 0 */ + +#include /**/ "ace/post.h" +#endif /* ACEXML_SVCCONF_H */ diff --git a/ACE/ACEXML/apps/svcconf/Svcconf_Handler.cpp b/ACE/ACEXML/apps/svcconf/Svcconf_Handler.cpp new file mode 100644 index 00000000000..7bfc3a421ed --- /dev/null +++ b/ACE/ACEXML/apps/svcconf/Svcconf_Handler.cpp @@ -0,0 +1,770 @@ +// $Id$ + +#include "Svcconf_Handler.h" +#include "ace/ACE.h" +#include "ace/Log_Msg.h" +#include "ace/Service_Config.h" +#include "ace/Service_Types.h" +#include "ace/Service_Repository.h" +#include "ace/Service_Gestalt.h" +#include "ace/DLL.h" +#include "ace/ARGV.h" +#include "ace/Module.h" +#include "ace/OS_NS_strings.h" +#include "ace/SString.h" + +#if (ACE_USES_CLASSIC_SVC_CONF == 0) + +#if !defined (__ACEXML_INLINE__) +# include "Svcconf_Handler.inl" +#endif /* __ACEXML_INLINE__ */ + +ACEXML_Svcconf_Handler::ACEXML_Svcconf_Handler (void) + : in_stream_def_ (0), + in_module_ (0), + stream_svc_type_ (0), + stream_ (0) +{ + // no-op +} + +ACEXML_Svcconf_Handler::~ACEXML_Svcconf_Handler (void) +{ + // no-op +} + +void +ACEXML_Svcconf_Handler::characters (const ACEXML_Char *, + int, + int ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // no-op +} + +void +ACEXML_Svcconf_Handler::endDocument ( ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED) +{ + // no-op +} + +void +ACEXML_Svcconf_Handler::endElement (const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) +{ + if (ACE_OS::strcmp (qName, ACE_TEXT ("dynamic")) == 0) + { + ACE_Parsed_Info *active_info = (this->in_stream_def_ == 0 ? + &this->parsed_info_ : + &this->stream_info_); + + // We must allocate a string here to ensure that the + // name is still available by the time the + // ACE_Service_Type_Dynamic_Guard is destructed. + ACE_TString name = active_info->name (); + ACE_Service_Type_Dynamic_Guard dummy ( + *ACE_Service_Config::current ()->current_service_repository (), + name.c_str ()); + ACE_DLL svc_dll; + + if (svc_dll.open (active_info->path ()) == -1) + { + // build the error message + ACE_CString msg (ACE_TEXT ("Cannot locate DLL: '")); + msg += ACE_CString (ACE_TEXT (active_info->path ())); + msg += ACE_CString (ACE_TEXT ("' for entity '")); + msg += ACE_CString (ACE_TEXT (active_info->name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW (ACEXML_SAXException (msg.c_str ())); + } + + void *(*func) (ACE_Service_Object_Exterminator *) = 0; + ACE_Service_Object_Exterminator gobbler = 0; + void *symbol = 0; + + long temp_ptr = + reinterpret_cast (svc_dll.symbol (active_info->init_func ())); + func = reinterpret_cast (temp_ptr); + + if (func == 0) + { + // build the error message + ACE_CString msg (ACE_TEXT ("Cannot locate init function: '")); + msg += ACE_CString (ACE_TEXT (active_info->init_func ())); + msg += ACE_CString (ACE_TEXT ("' for entity '")); + msg += ACE_CString (ACE_TEXT (active_info->name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW (ACEXML_SAXException (msg.c_str ())); + } + symbol = (*func)(&gobbler); // target object created in the loaded DLL. + + ACE_Service_Type_Impl *stp = ACE_Service_Config::create_service_type_impl + (active_info->name (), + active_info->service_type (), + symbol, + ACE_Service_Type::DELETE_THIS | + ACE_Service_Type::DELETE_OBJ, + gobbler); + + if (this->in_stream_def_) + { +// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Create dynamic %s for stream\n"), +// this->stream_info_.name ())); + if (active_info->service_type () == ACE_Service_Type::STREAM) + { + this->stream_ = (ACE_Stream_Type *) stp; + } + else + { + // We will not retain this stream + delete stp; + + // build the error message + ACE_CString msg (ACE_TEXT ("Expecting Stream type in stream header")); + msg += ACE_CString (ACE_TEXT (" for entity '")); + msg += ACE_CString (ACE_TEXT (active_info->name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW (ACEXML_SAXException (msg.c_str ())); + } + + this->stream_svc_type_ = + ACE_Service_Config::create_service_type (this->stream_info_.name (), + this->stream_, + svc_dll, + this->stream_info_.active ()); + + } + else + { + if (this->in_module_) + { + ACE_ARGV args (active_info->init_params ()); + + ACE_Module_Type *mt = (ACE_Module_Type *) stp; + + ACE_Module *mp = (ACE_Module *) mt->object (); + + if (ACE_OS::strcmp (mp->name (), active_info->name ()) != 0) + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("warning: assigning Module_Type name %s to Module %s since names differ\n"), + active_info->name (), + mp->name ())); + mp->name (active_info->name ()); + } + + if (mt->init (args.argc (), args.argv ()) == -1 + || this->stream_->push (mt) == -1) + { + // build the error message + ACE_CString msg (ACE_TEXT ("Error initializing module")); + msg += ACE_CString (ACE_TEXT (" for entity '")); + msg += ACE_CString (ACE_TEXT (active_info->name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW (ACEXML_SAXException (msg.c_str ())); + } + + +// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Push dynamic %s into stream %s\n"), +// this->parsed_info_.name (), +// this->stream_info_.name ())); + } + else + { + ACE_Service_Type *stype = + ACE_Service_Config::create_service_type (active_info->name (), + stp, + svc_dll, + active_info->active ()); + // @@ Check error here. + + // ACE_DEBUG ((LM_INFO, ACE_TEXT ("Apply dynamic %s\n"), +// this->parsed_info_.name ())); + if (ACE_Service_Config::initialize (stype, + active_info->init_params ()) == -1) + { + // If it did not initialize correctly, the + // ACE_Service_Config doesn't own this object + delete stype; + + // build the error message + ACE_CString msg (ACE_TEXT ("Failed to initialize dynamic service")); + msg += ACE_CString (ACE_TEXT (" for entity '")); + msg += ACE_CString (ACE_TEXT (active_info->name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW (ACEXML_SAXException (msg.c_str ())); + } + } + this->parsed_info_.reset (); + } + } + else if (ACE_OS::strcmp (qName, ACE_TEXT ("static")) == 0) + { + if (this->in_stream_def_) + { + // @@ Couldn't make sense out of the original Svc_Conf.y. + ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Create static %s for stream\n"), + this->stream_info_.name ())); + } + else + { + if (this->in_module_) + { + // @@ Couldn't make sense out of the original Svc_Conf.y. + ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Push static %s into stream %s\n"), + this->parsed_info_.name (), + this->stream_info_.name ())); + } + else + { +// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Apply static %s\n"), +// this->parsed_info_.name ())); + if (ACE_Service_Config::initialize (this->parsed_info_.name (), + this->parsed_info_.init_params ()) == -1) + { + // build the error message + ACE_CString msg (ACE_TEXT ("Failed to initialize static service")); + msg += ACE_CString (ACE_TEXT (" for entity '")); + msg += ACE_CString (ACE_TEXT (this->parsed_info_.name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW (ACEXML_SAXException (msg.c_str ())); + } + } + this->parsed_info_.reset (); + } + } + else if (ACE_OS::strcmp (qName, ACE_TEXT ("module")) == 0) + { + this->in_module_ = 0; + } + else if (ACE_OS::strcmp (qName, ACE_TEXT ("streamdef")) == 0) + { +// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Apply stream %s of type %s\n"), +// this->stream_info_.name (), +// this->stream_info_.name ())); + ACE_Service_Config::initialize (this->stream_svc_type_, + this->stream_info_.init_params ()); + + this->stream_info_.reset (); + this->stream_svc_type_ = 0; + this->stream_ = 0; + } + else if (ACE_OS::strcmp (qName, ACE_TEXT ("stream")) == 0) + { +// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Apply stream %s of type %s\n"), +// this->stream_info_.name (), +// this->stream_info_.name ())); + this->stream_info_.reset (); + } + else + { + } +} + +void +ACEXML_Svcconf_Handler::endPrefixMapping (const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // no-op +} + +void +ACEXML_Svcconf_Handler::ignorableWhitespace (const ACEXML_Char *, + int, + int ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // no-op +} + +void +ACEXML_Svcconf_Handler::processingInstruction (const ACEXML_Char *, + const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // no-op +} + +void +ACEXML_Svcconf_Handler::setDocumentLocator (ACEXML_Locator* locator) +{ + this->locator_ = locator; +} + +void +ACEXML_Svcconf_Handler::skippedEntity (const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // no-op +} + +void +ACEXML_Svcconf_Handler::startDocument ( ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED) +{ + // no-op +} + +void +ACEXML_Svcconf_Handler::startElement (const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char *qName, + ACEXML_Attributes *alist ACEXML_ENV_ARG_DECL) +{ + if (ACE_OS::strcmp (qName, ACE_TEXT ("dynamic")) == 0) + { + this->get_dynamic_attrs (alist ACEXML_ENV_ARG_PARAMETER); + } + else if (ACE_OS::strcmp (qName, ACE_TEXT ("initializer")) == 0) + { + this->get_initializer_attrs (alist ACEXML_ENV_ARG_PARAMETER); + + } + else if (ACE_OS::strcmp (qName, ACE_TEXT ("static")) == 0) + { + this->get_static_attrs (alist ACEXML_ENV_ARG_PARAMETER); + } + else if (ACE_OS::strcmp (qName, ACE_TEXT ("stream")) == 0) + { + this->get_stream_id (alist ACEXML_ENV_ARG_PARAMETER); + + if (ACE_Service_Repository::instance()->find + (this->stream_info_.name (), + (const ACE_Service_Type **) &this->stream_svc_type_) == -1) + { + // build the error message + ACE_CString msg (ACE_TEXT ("Cannot find stream '")); + msg += ACE_CString (ACE_TEXT (this->stream_info_.name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW (ACEXML_SAXException (msg.c_str ())); + } + this->stream_ = this->stream_svc_type_ == 0 + ? 0 + : dynamic_cast (const_cast (this->stream_svc_type_->type ())); + +// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Retrieve stream %s from repository\n"), +// this->stream_info_.name ())); + } + else if (ACE_OS::strcmp (qName, ACE_TEXT ("streamdef")) == 0) + { + this->in_stream_def_ = 1; + // @@ Set up stream service object + } + else if (ACE_OS::strcmp (qName, ACE_TEXT ("module")) == 0) + { + this->in_stream_def_ = 0; + this->in_module_ = 1; + } + else if (ACE_OS::strcmp (qName, ACE_TEXT ("resume")) == 0) + { + this->get_id (alist ACEXML_ENV_ARG_PARAMETER); + if (this->in_module_) + { +// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Resume %s in stream %s\n"), +// this->parsed_info_.name (), +// this->stream_info_.name ())); + ACE_Module_Type *mt = (this->stream_ == 0) + ? 0 + : this->stream_->find (this->parsed_info_.name ()); + + if (mt == 0) + { + // build the error message + ACE_CString msg (ACE_TEXT ("Can't locate module '")); + msg += ACE_CString (ACE_TEXT (this->parsed_info_.name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW (ACEXML_SAXException (msg.c_str ())); + } + + mt->resume (); + } + else + { +// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Resume %s\n"), +// this->parsed_info_.name ())); + if (ACE_Service_Config::resume (this->parsed_info_.name ()) == -1) + { + // build the error message + ACE_CString msg (ACE_TEXT ("Resume failed")); + msg += ACE_CString (ACE_TEXT (" for entity '")); + msg += ACE_CString (ACE_TEXT (this->parsed_info_.name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW (ACEXML_SAXException (msg.c_str ())); + } + } + this->parsed_info_.reset (); + } + else if (ACE_OS::strcmp (qName, ACE_TEXT ("suspend")) == 0) + { + this->get_id (alist ACEXML_ENV_ARG_PARAMETER); + if (this->in_module_) + { +// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Suspend %s in stream %s\n"), +// this->parsed_info_.name (), +// this->stream_info_.name ())); + ACE_Module_Type *mt = (this->stream_ == 0) + ? 0 + : this->stream_->find (this->parsed_info_.name ()); + + if (mt == 0) + { + // build the error message + ACE_CString msg (ACE_TEXT ("Can't locate module '")); + msg += ACE_CString (ACE_TEXT (this->parsed_info_.name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW (ACEXML_SAXException (msg.c_str ())); + } + + mt->suspend (); + } + else + { + // ACE_DEBUG ((LM_INFO, ACE_TEXT ("Suspend %s\n"), + // this->parsed_info_.name ())); + if (ACE_Service_Config::suspend (this->parsed_info_.name ()) == -1) + { + // build the error message + ACE_CString msg (ACE_TEXT ("Suspend failed")); + msg += ACE_CString (ACE_TEXT (" for entity '")); + msg += ACE_CString (ACE_TEXT (this->parsed_info_.name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW (ACEXML_SAXException (msg.c_str ())); + } + } + this->parsed_info_.reset (); + } + else if (ACE_OS::strcmp (qName, ACE_TEXT ("remove")) == 0) + { + this->get_id (alist ACEXML_ENV_ARG_PARAMETER); + if (this->in_module_) + { +// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Remove %s in stream %s\n"), +// this->parsed_info_.name (), +// this->stream_info_.name ())); + ACE_Module_Type *mt = (this->stream_ == 0) + ? 0 + : this->stream_->find (this->parsed_info_.name ()); + + if (mt == 0) + { + // build the error message + ACE_CString msg (ACE_TEXT ("Can't locate module '")); + msg += ACE_CString (ACE_TEXT (this->parsed_info_.name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW (ACEXML_SAXException (msg.c_str ())); + } + + this->stream_->remove (mt); + } + else + { +// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Remove %s\n"), +// this->parsed_info_.name ())); + if (ACE_Service_Config::remove (this->parsed_info_.name ()) == -1) + { + // build the error message + ACE_CString msg (ACE_TEXT ("Remove failed")); + msg += ACE_CString (ACE_TEXT (" for entity '")); + msg += ACE_CString (ACE_TEXT (this->parsed_info_.name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW (ACEXML_SAXException (msg.c_str ())); + } + } + this->parsed_info_.reset (); + } + else if (ACE_OS::strcmp (qName, ACE_TEXT ("ACE_Svc_Conf")) == 0) + { + // Main document tag. no-op. +// ACE_DEBUG ((LM_INFO, ACE_TEXT ("ACE_Svc_Conf tag\n"))); + } + else + { + // @@ Error. Perhaps we should relay to user event handler here, if available. + } + + return; +} + +void +ACEXML_Svcconf_Handler::startPrefixMapping (const ACEXML_Char *, + const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + +// *** Methods inherit from ACEXML_DTDHandler. + +void +ACEXML_Svcconf_Handler::notationDecl (const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + +void +ACEXML_Svcconf_Handler::unparsedEntityDecl (const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + +// Methods inherit from ACEXML_EnitityResolver. + +ACEXML_InputSource * +ACEXML_Svcconf_Handler::resolveEntity (const ACEXML_Char *, + const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. + return 0; +} + +// Methods inherit from ACEXML_ErrorHandler. + + /* + * Receive notification of a recoverable error. + */ +void +ACEXML_Svcconf_Handler::error (ACEXML_SAXParseException& ex ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACE_DEBUG ((LM_DEBUG, "%s: line :%d col: %d ", this->locator_->getSystemId(), + this->locator_->getLineNumber(), + this->locator_->getColumnNumber())); + ex.print(); +} + +void +ACEXML_Svcconf_Handler::fatalError (ACEXML_SAXParseException& ex ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACE_DEBUG ((LM_DEBUG, "%s: line :%d col: %d ", this->locator_->getSystemId(), + this->locator_->getLineNumber(), + this->locator_->getColumnNumber())); + ex.print(); +} + +void +ACEXML_Svcconf_Handler::warning (ACEXML_SAXParseException& ex ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACE_DEBUG ((LM_DEBUG, "%s: line :%d col: %d ", this->locator_->getSystemId(), + this->locator_->getLineNumber(), + this->locator_->getColumnNumber())); + ex.print(); +} + +int +ACEXML_Svcconf_Handler::get_stream_id (ACEXML_Attributes *alist ACEXML_ENV_ARG_DECL) +{ + if (alist != 0) + for (size_t i = 0; i < alist->getLength (); ++i) + { + if (ACE_OS::strcmp (alist->getQName (i), ACE_TEXT ("id")) == 0) + { + this->stream_info_.name (alist->getValue (i)); + } + else + { + // build the error message + ACE_CString msg (ACE_TEXT ("Invalid stream attribute '")); + msg += ACE_CString (ACE_TEXT (alist->getQName (i))); + msg += ACE_CString (ACE_TEXT ("' for entity '")); + msg += ACE_CString (ACE_TEXT (this->stream_info_.name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW_RETURN (ACEXML_SAXException (msg.c_str ()), + -1); + } + } + return 0; +} + +int +ACEXML_Svcconf_Handler::get_id (ACEXML_Attributes *alist ACEXML_ENV_ARG_DECL) +{ + if (alist != 0) + for (size_t i = 0; i < alist->getLength (); ++i) + { + if (ACE_OS::strcmp (alist->getQName (i), ACE_TEXT ("id")) == 0) + { + this->parsed_info_.name (alist->getValue (i)); + } + else + { + // build the error message + ACE_CString msg (ACE_TEXT ("Invalid attribute '")); + msg += ACE_CString (ACE_TEXT (alist->getQName (i))); + msg += ACE_CString (ACE_TEXT ("', expecting 'id'")); + msg += ACE_CString (ACE_TEXT (" for entity '")); + msg += ACE_CString (ACE_TEXT (this->parsed_info_.name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW_RETURN (ACEXML_SAXException (msg.c_str ()), + -1); + } + } + return 0; +} + +int +ACEXML_Svcconf_Handler::get_dynamic_attrs (ACEXML_Attributes *alist ACEXML_ENV_ARG_DECL) +{ + if (alist != 0) + { + ACE_Parsed_Info *info = (this->in_stream_def_ == 0 ? + &this->parsed_info_ : + &this->stream_info_); + for (size_t i = 0; i < alist->getLength (); ++i) + { + if (ACE_OS::strcmp (alist->getQName (i), ACE_TEXT ("id")) == 0) + { + info->name (alist->getValue (i)); + } + else if (ACE_OS::strcmp (alist->getQName (i), ACE_TEXT ("status")) == 0) + { + if (ACE_OS::strcmp (alist->getValue (i), ACE_TEXT ("inactive")) == 0) + { + info->active (0); + } + else if (ACE_OS::strcmp (alist->getValue (i), ACE_TEXT ("active")) == 0) + { + info->active (1); + } + else + { + // build the error message + ACE_CString msg (ACE_TEXT ("Invalid attribute value '")); + msg += ACE_CString (ACE_TEXT (alist->getQName (i))); + msg += ACE_CString (ACE_TEXT ("', expecting 'active' or 'inactive'")); + msg += ACE_CString (ACE_TEXT (" for entity '")); + msg += ACE_CString (ACE_TEXT (info->name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW_RETURN (ACEXML_SAXException (msg.c_str ()), + -1); + } + } + else if (ACE_OS::strcmp (alist->getQName (i), ACE_TEXT ("type")) == 0) + { + if (ACE_OS::strcasecmp (alist->getValue (i), ACE_TEXT ("service_object")) == 0) + { + info->service_type (ACE_Service_Type::SERVICE_OBJECT); + } + else if (ACE_OS::strcasecmp (alist->getValue (i), ACE_TEXT ("stream")) == 0) + { + info->service_type (ACE_Service_Type::STREAM); + } + else if (ACE_OS::strcasecmp (alist->getValue (i), ACE_TEXT ("module")) == 0) + { + info->service_type (ACE_Service_Type::MODULE); + } + else + { + // build the error message + ACE_CString msg (ACE_TEXT ("Invalid Service_Object attribute value'")); + msg += ACE_CString (ACE_TEXT (alist->getQName (i))); + msg += ACE_CString (ACE_TEXT ("' for entity '")); + msg += ACE_CString (ACE_TEXT (info->name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW_RETURN (ACEXML_SAXException (msg.c_str ()), + -1); + } + } + else + { + // build the error message + ACE_CString msg (ACE_TEXT ("Invalid attribute'")); + msg += ACE_CString (ACE_TEXT (alist->getQName (i))); + msg += ACE_CString (ACE_TEXT ("' for entity '")); + msg += ACE_CString (ACE_TEXT (info->name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW_RETURN (ACEXML_SAXException (msg.c_str ()), -1); + } + } + } + return 0; +} + +int +ACEXML_Svcconf_Handler::get_initializer_attrs (ACEXML_Attributes *alist ACEXML_ENV_ARG_DECL) +{ + if (alist != 0) + { + ACE_Parsed_Info *info = (this->in_stream_def_ == 0 ? + &this->parsed_info_ : + &this->stream_info_); + for (size_t i = 0; i < alist->getLength (); ++i) + { + if (ACE_OS::strcmp (alist->getQName (i), ACE_TEXT ("init")) == 0) + { + info->init_func (alist->getValue (i)); + } + else if (ACE_OS::strcmp (alist->getQName (i), ACE_TEXT ("path")) == 0) + { + info->path (alist->getValue (i)); + } + else if (ACE_OS::strcmp (alist->getQName (i), ACE_TEXT ("params")) == 0) + { + info->init_params (alist->getValue (i)); + } + else + { + // build the error message + ACE_CString msg (ACE_TEXT ("Invalid initializer attribute'")); + msg += ACE_CString (ACE_TEXT (alist->getQName (i))); + msg += ACE_CString (ACE_TEXT ("' for entity '")); + msg += ACE_CString (ACE_TEXT (info->name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW_RETURN (ACEXML_SAXException (msg.c_str ()), -1); + } + } + } + return 0; +} + +int +ACEXML_Svcconf_Handler::get_static_attrs (ACEXML_Attributes *alist ACEXML_ENV_ARG_DECL) +{ + if (alist != 0) + { + ACE_Parsed_Info *info = (this->in_stream_def_ == 0 ? + &this->parsed_info_ : + &this->stream_info_); + for (size_t i = 0; i < alist->getLength (); ++i) + { + if (ACE_OS::strcmp (alist->getQName (i), ACE_TEXT ("id")) == 0) + { + info->name (alist->getValue (i)); + } + else if (ACE_OS::strcmp (alist->getQName (i), ACE_TEXT ("params")) == 0) + { + info->init_params (alist->getValue (i)); + } + else + { + // build the error message + ACE_CString msg (ACE_TEXT ("Invalid static attribute '")); + msg += ACE_CString (ACE_TEXT (alist->getQName (i))); + msg += ACE_CString (ACE_TEXT ("' for entity '")); + msg += ACE_CString (ACE_TEXT (info->name ())); + msg += ACE_CString (ACE_TEXT ("'\n")); + + ACEXML_THROW_RETURN (ACEXML_SAXException (msg.c_str ()), -1); + } + } + } + return 0; +} + +#endif /* ACE_USES_CLASSIC_SVC_CONF == 0 */ diff --git a/ACE/ACEXML/apps/svcconf/Svcconf_Handler.h b/ACE/ACEXML/apps/svcconf/Svcconf_Handler.h new file mode 100644 index 00000000000..b15e20d7426 --- /dev/null +++ b/ACE/ACEXML/apps/svcconf/Svcconf_Handler.h @@ -0,0 +1,276 @@ +// $Id$ + +//============================================================================= +/** + * @file Svcconf_Handler.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +#ifndef ACEXML_SVCCONF_HANDLER_H +#define ACEXML_SVCCONF_HANDLER_H + +#include "ACEXML/common/DefaultHandler.h" +#include "ace/Service_Types.h" + +#if (ACE_USES_CLASSIC_SVC_CONF == 0) + +class ACE_Parsed_Info +{ +public: + ACE_Parsed_Info (); + ~ACE_Parsed_Info (); + + /** + * Set/get name of a parsed entity. + */ + int name (const ACEXML_Char *n); + const ACEXML_Char *name (void); + + /** + * Set/get type of a dynamic node. + */ + int service_type (int type); + int service_type (void); + + /** + * Set/Get active status. + */ + int active (int a); + int active (void); + + /** + * Set/get initializer path. + */ + int path (const ACEXML_Char *n); + const ACEXML_Char *path (void); + + /** + * Set/get initializer init function. + */ + int init_func (const ACEXML_Char *n); + const ACEXML_Char *init_func (void); + + /** + * Set/get initializer init parameter. + */ + int init_params (const ACEXML_Char *n); + const ACEXML_Char *init_params (void); + + /** + * Reset Parsed_Info. + */ + void reset (void); + +protected: + ACEXML_Char *name_; + int service_type_; + int active_; + ACEXML_Char *path_; + ACEXML_Char *init_func_; + ACEXML_Char *init_params_; +}; + +/** + * @class ACEXML_Svcconf_Handler + * + * @brief ACEXML_Svcconf_Handler is an example SAX event handler. + * + * This SAX event handler try to regenerate the XML document it + * reads with correct indentation. + */ +class ACEXML_Svcconf_Handler : public ACEXML_DefaultHandler +{ +public: + /* + * Default constructor. + */ + ACEXML_Svcconf_Handler (void); + + /* + * Default destructor. + */ + virtual ~ACEXML_Svcconf_Handler (void); + + // Methods inherit from ACEXML_ContentHandler. + + /* + * Receive notification of character data. + */ + virtual void characters (const ACEXML_Char *ch, + int start, + int length ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of the end of a document. + */ + virtual void endDocument (ACEXML_ENV_SINGLE_ARG_DECL) + ; + + /* + * Receive notification of the end of an element. + */ + virtual void endElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) + ; + + /* + * End the scope of a prefix-URI mapping. + */ + virtual void endPrefixMapping (const ACEXML_Char *prefix ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of ignorable whitespace in element content. + */ + virtual void ignorableWhitespace (const ACEXML_Char *ch, + int start, + int length ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of a processing instruction. + */ + virtual void processingInstruction (const ACEXML_Char *target, + const ACEXML_Char *data ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive an object for locating the origin of SAX document events. + */ + virtual void setDocumentLocator (ACEXML_Locator *locator) ; + + /* + * Receive notification of a skipped entity. + */ + virtual void skippedEntity (const ACEXML_Char *name ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of the beginning of a document. + */ + virtual void startDocument (ACEXML_ENV_SINGLE_ARG_DECL) + ; + + /* + * Receive notification of the beginning of an element. + */ + virtual void startElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName, + ACEXML_Attributes *atts ACEXML_ENV_ARG_DECL) + ; + + /* + * Begin the scope of a prefix-URI Namespace mapping. + */ + virtual void startPrefixMapping (const ACEXML_Char *prefix, + const ACEXML_Char *uri ACEXML_ENV_ARG_DECL) + ; + + // *** Methods inherit from ACEXML_DTDHandler. + + /* + * Receive notification of a notation declaration event. + */ + virtual void notationDecl (const ACEXML_Char *name, + const ACEXML_Char *publicId, + const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of an unparsed entity declaration event. + */ + virtual void unparsedEntityDecl (const ACEXML_Char *name, + const ACEXML_Char *publicId, + const ACEXML_Char *systemId, + const ACEXML_Char *notationName ACEXML_ENV_ARG_DECL) + ; + + // Methods inherit from ACEXML_EnitityResolver. + + /* + * Allow the application to resolve external entities. + */ + virtual ACEXML_InputSource *resolveEntity (const ACEXML_Char *publicId, + const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) + ; + + // Methods inherit from ACEXML_ErrorHandler. + + /* + * Receive notification of a recoverable error. + */ + virtual void error (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of a non-recoverable error. + */ + virtual void fatalError (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of a warning. + */ + virtual void warning (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL) + ; + +protected: + /** + * Get the only attribute in or . + */ + int get_stream_id (ACEXML_Attributes *alist ACEXML_ENV_ARG_DECL); + + /** + * Get the only attribute in , , + */ + int get_id (ACEXML_Attributes *alist ACEXML_ENV_ARG_DECL); + + /** + * Get the dynamic tag attributes. + */ + int get_dynamic_attrs (ACEXML_Attributes *alist ACEXML_ENV_ARG_DECL); + + /** + * Get the initializer tag attributes. + */ + int get_initializer_attrs (ACEXML_Attributes *alist ACEXML_ENV_ARG_DECL); + + /** + * Get the static tag attributes. + */ + int get_static_attrs (ACEXML_Attributes *alist ACEXML_ENV_ARG_DECL); + +private: + /// We are parsing a stream definition + int in_stream_def_; + + /// We are defining a steam module + int in_module_; + + /// @a stream_ holds the actually Stream_Type object managed by @a stream_svc_type_. + ACE_Service_Type *stream_svc_type_; + ACE_Stream_Type *stream_; + + //ACE_SHLIB_HANDLE dll_handle_; + + ACE_Parsed_Info parsed_info_; + + ACE_Parsed_Info stream_info_; + + ACEXML_Locator* locator_; +}; + +#if defined (__ACEXML_INLINE__) +# include "Svcconf_Handler.inl" +#endif /* __ACEXML_INLINE__ */ + +#endif /* ACE_USES_CLASSIC_SVC_CONF == 0 */ + +#endif /* ACEXML_SVCCONF_HANDLER_H */ diff --git a/ACE/ACEXML/apps/svcconf/Svcconf_Handler.inl b/ACE/ACEXML/apps/svcconf/Svcconf_Handler.inl new file mode 100644 index 00000000000..605dec5f2f7 --- /dev/null +++ b/ACE/ACEXML/apps/svcconf/Svcconf_Handler.inl @@ -0,0 +1,133 @@ +// -*- C++ -*- $Id$ + +ACE_INLINE +ACE_Parsed_Info::ACE_Parsed_Info () + : name_ (0), + service_type_ (ACE_Service_Type::INVALID_TYPE), + active_ (1), + path_ (0), + init_func_ (0), + init_params_ (0) +{ +} + +ACE_INLINE +ACE_Parsed_Info::~ACE_Parsed_Info () +{ + delete[] this->name_; + delete[] this->path_; + delete[] this->init_func_; + delete[] this->init_params_; +} + +ACE_INLINE int +ACE_Parsed_Info::name (const ACEXML_Char *n) +{ + if (this->name_ == 0) + { + this->name_ = ACE::strnew (n); + return 0; + } + return -1; +} + +ACE_INLINE const ACEXML_Char * +ACE_Parsed_Info::name (void) +{ + return this->name_; +} + +ACE_INLINE int +ACE_Parsed_Info::service_type (int type) +{ + if (this->service_type_ == -1) + { + this->service_type_ = type; + return 0; + } + return -1; +} + +ACE_INLINE int +ACE_Parsed_Info::service_type (void) +{ + return this->service_type_; +} + +ACE_INLINE int +ACE_Parsed_Info::active (int a) +{ + this->active_ = a; + return 0; +} + +ACE_INLINE int +ACE_Parsed_Info::active (void) +{ + return this->active_; +} + +ACE_INLINE int +ACE_Parsed_Info::path (const ACEXML_Char *p) +{ + if (this->path_ == 0) + { + this->path_ = ACE::strnew (p); + return 0; + } + return -1; +} + +ACE_INLINE const ACEXML_Char * +ACE_Parsed_Info::path (void) +{ + return this->path_; +} + +ACE_INLINE int +ACE_Parsed_Info::init_func (const ACEXML_Char *n) +{ + if (this->init_func_ == 0) + { + this->init_func_ = ACE::strnew (n); + return 0; + } + return -1; +} + +ACE_INLINE const ACEXML_Char * +ACE_Parsed_Info::init_func (void) +{ + return this->init_func_; +} + +ACE_INLINE int +ACE_Parsed_Info::init_params (const ACEXML_Char *n) +{ + if (this->init_params_ == 0) + { + this->init_params_ = ACE::strnew (n); + return 0; + } + return -1; +} + +ACE_INLINE const ACEXML_Char * +ACE_Parsed_Info::init_params (void) +{ + return this->init_params_; +} + +ACE_INLINE void +ACE_Parsed_Info::reset (void) +{ + delete[] this->name_; + this->name_ = 0; + this->service_type_ = -1; + delete[] this->path_; + this->path_ = 0; + delete[] this->init_func_; + this->init_func_ = 0; + delete[] this->init_params_; + this->init_params_ = 0; +} diff --git a/ACE/ACEXML/apps/svcconf/svcconf.dtd b/ACE/ACEXML/apps/svcconf/svcconf.dtd new file mode 100644 index 00000000000..b9e6cc41c8e --- /dev/null +++ b/ACE/ACEXML/apps/svcconf/svcconf.dtd @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ACE/ACEXML/apps/svcconf/svcconf.mpc b/ACE/ACEXML/apps/svcconf/svcconf.mpc new file mode 100644 index 00000000000..9f5ce8f091b --- /dev/null +++ b/ACE/ACEXML/apps/svcconf/svcconf.mpc @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project(ACEXML_XML_Svc_Conf_Parser): ace_output, acelib, acexml, install { + sharedname = ACEXML_XML_Svc_Conf_Parser +} diff --git a/ACE/ACEXML/common/ACEXML.pc.in b/ACE/ACEXML/common/ACEXML.pc.in new file mode 100644 index 00000000000..78a706c17c0 --- /dev/null +++ b/ACE/ACEXML/common/ACEXML.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: ACEXML +Description: ACE XML Library +Requires: ACE +Version: @VERSION@ +Libs: -L${libdir} -lACEXML +Cflags: -I${includedir} diff --git a/ACE/ACEXML/common/ACEXML_Export.h b/ACE/ACEXML/common/ACEXML_Export.h new file mode 100644 index 00000000000..39546eeafcc --- /dev/null +++ b/ACE/ACEXML/common/ACEXML_Export.h @@ -0,0 +1,49 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file ACEXML_Export.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +// Definition for Win32 Export directives. +// This file is generated automatically by generate_export_file.pl +// ------------------------------ +#ifndef ACEXML_EXPORT_H +#define ACEXML_EXPORT_H + +#include "ace/config-all.h" + +#if defined (ACE_AS_STATIC_LIBS) +# if !defined (ACEXML_HAS_DLL) +# define ACEXML_HAS_DLL 0 +# endif /* ! ACEXML_HAS_DLL */ +#else +# if !defined (ACEXML_HAS_DLL) +# define ACEXML_HAS_DLL 1 +# endif /* ! ACEXML_HAS_DLL */ +#endif /* ACE_AS_STATIC_LIB */ + +#if defined (ACEXML_HAS_DLL) && (ACEXML_HAS_DLL == 1) +# if defined (ACEXML_BUILD_DLL) +# define ACEXML_Export ACE_Proper_Export_Flag +# define ACEXML_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define ACEXML_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else /* ACEXML_BUILD_DLL */ +# define ACEXML_Export ACE_Proper_Import_Flag +# define ACEXML_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define ACEXML_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* ACEXML_BUILD_DLL */ +#else /* ACEXML_HAS_DLL == 1 */ +# define ACEXML_Export +# define ACEXML_SINGLETON_DECLARATION(T) +# define ACEXML_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* ACEXML_HAS_DLL == 1 */ + +#endif /* ACEXML_EXPORT_H */ + +// End of auto generated file. diff --git a/ACE/ACEXML/common/Attributes.cpp b/ACE/ACEXML/common/Attributes.cpp new file mode 100644 index 00000000000..3f7c758ce8f --- /dev/null +++ b/ACE/ACEXML/common/Attributes.cpp @@ -0,0 +1,11 @@ +#include "Attributes.h" + + +ACE_RCSID (common, + Attributes, + "$Id$") + + +ACEXML_Attributes::~ACEXML_Attributes (void) +{ +} diff --git a/ACE/ACEXML/common/Attributes.h b/ACE/ACEXML/common/Attributes.h new file mode 100644 index 00000000000..45982ed459e --- /dev/null +++ b/ACE/ACEXML/common/Attributes.h @@ -0,0 +1,130 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Attributes.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +#ifndef _ACEXML_ATTRIBUTES_H_ +#define _ACEXML_ATTRIBUTES_H_ +#include /**/ "ace/pre.h" + +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/XML_Types.h" + +/** + * @class ACEXML_Attributes Attributes.h "ACEXML/common/Attributes.h" + * + * @brief ACEXML_Attributes defines a collection of attributes of an XML element. + * + * This is an abstract class (interface in Java) that defines + * the API for accessing attributes of an XML entity. + * + * This interface allows access to a list of attributes in three different ways: + * + * - by attribute index; + * - by Namespace-qualified name; or + * - by qualified (prefixed) name. + * + * The list will not contain attributes that were declared #IMPLIED + * but not specified in the start tag. It will also not contain + * attributes used as Namespace declarations (xmlns*) unless the + * http://xml.org/sax/features/namespace-prefixes feature is set to + * true (it is false by default). + * + * If the namespace-prefixes feature (see above) is false, access by + * qualified name may not be available; if the + * http://xml.org/sax/features/namespaces feature is false, access by + * Namespace-qualified names may not be available. + * + * This interface replaces the now-deprecated SAX1 AttributeList + * interface, which does not contain Namespace support. In addition to + * Namespace support, it adds the getIndex methods (below). + * + * The order of attributes in the list is unspecified, and will vary + * from implementation to implementation. + */ +class ACEXML_Export ACEXML_Attributes +{ +public: + + /// Destructor. + virtual ~ACEXML_Attributes (void); + + /** + * Look up the index of an attribute by XML 1.0 qualified name. + */ + virtual int getIndex (const ACEXML_Char *qName) = 0; + + /** + * Look up the index of an attribute by Namespace name. + */ + virtual int getIndex (const ACEXML_Char *uri, + const ACEXML_Char *localPart) = 0; + + /** + * Return the number of attributes in the list. + */ + virtual size_t getLength (void) = 0; + + /** + * Look up an attribute's local name by index. + */ + virtual const ACEXML_Char *getLocalName (size_t index) = 0; + + /** + * Look up an attribute's XML 1.0 qualified name by index. + */ + virtual const ACEXML_Char *getQName (size_t index) = 0; + + /** + * Look up an attribute's type by index. + */ + virtual const ACEXML_Char *getType (size_t index) = 0; + + /** + * Look up an attribute's type by XML 1.0 qualified name. + */ + virtual const ACEXML_Char *getType (const ACEXML_Char *qName) = 0; + + /** + * Look up an attribute's type by Namespace name. + */ + virtual const ACEXML_Char *getType (const ACEXML_Char *uri, + const ACEXML_Char *localPart) = 0; + + /** + * Look up an attribute's Namespace URI by index. + */ + virtual const ACEXML_Char *getURI (size_t index) = 0; + + /** + * Look up an attribute's value by index. + */ + virtual const ACEXML_Char *getValue (size_t index) = 0; + + /** + * Look up an attribute's value by XML 1.0 qualified name. + */ + virtual const ACEXML_Char *getValue (const ACEXML_Char *qName) = 0; + + /** + * Look up an attribute's value by Namespace name. + */ + virtual const ACEXML_Char *getValue (const ACEXML_Char *uri, + const ACEXML_Char *localPart) = 0; +}; + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_ ATTRIBUTES_H_ */ diff --git a/ACE/ACEXML/common/AttributesImpl.cpp b/ACE/ACEXML/common/AttributesImpl.cpp new file mode 100644 index 00000000000..b436c4e5f79 --- /dev/null +++ b/ACE/ACEXML/common/AttributesImpl.cpp @@ -0,0 +1,293 @@ +// -*- C++ -*- $Id$ + +#include "ACEXML/common/AttributesImpl.h" + +#if !defined (__ACEXML_INLINE__) +# include "ACEXML/common/AttributesImpl.inl" +#endif /* __ACEXML_INLINE__ */ + +ACEXML_AttributesImpl::ACEXML_AttributesImpl (int size) + : attrs_ (size) +{ + this->attrs_.size (0); // attrs array contains nothing +} + +ACEXML_AttributesImpl::ACEXML_AttributesImpl (const + ACEXML_AttributesImpl &attrs) + : ACEXML_Attributes (attrs), + attrs_ (attrs.attrs_.size ()) +{ + for (size_t i = 0; i < attrs.attrs_.size (); i++) + this->attrs_[i] = attrs.attrs_[i]; +} + +ACEXML_AttributesImpl::~ACEXML_AttributesImpl (void) +{ +} + +int +ACEXML_AttributesImpl::addAttribute (const ACEXML_Char *uri, + const ACEXML_Char *localName, + const ACEXML_Char *qName, + const ACEXML_Char *type, + const ACEXML_Char *value) +{ + if (this->isDuplicate (uri, localName, qName)) + return -1; + size_t length = this->attrs_.size (); + this->attrs_.size (length+1); + this->setAttribute (length, + uri, + localName, + qName, + type, + value); + return static_cast (length); +} + +int +ACEXML_AttributesImpl::addAttribute (const ACEXML_Attribute &att) +{ + if (this->isDuplicate (att.uri(), att.localName(), att.qName())) + return -1; + size_t length = this->attrs_.size (); + this->attrs_.size (length+1); + this->attrs_[length] = att; + return static_cast (length); +} + +int +ACEXML_AttributesImpl::isDuplicate (const ACEXML_Char *uri, + const ACEXML_Char *localName, + const ACEXML_Char *qName) +{ + for (size_t i = 0; i < this->attrs_.size(); ++i) + { + if (ACE_OS::strcmp (this->attrs_[i].localName(), localName) == 0) + { + if (qName != 0 && this->attrs_[i].qName() != 0 + && ACE_OS::strcmp (this->attrs_[i].qName(), qName) == 0) + { + if (uri != 0 && this->attrs_[i].uri() != 0 + && ACE_OS::strcmp (this->attrs_[i].uri(), uri) == 0) + return 1; + } + } + } + return 0; +} + +int +ACEXML_AttributesImpl::removeAttribute (size_t index) +{ + size_t length = this->attrs_.size (); + + if (index >= length) + return -1; + + this->attrs_[index] = this->attrs_[length - 1]; + this->attrs_.size (length - 1); + + return 0; +} + + +int +ACEXML_AttributesImpl::getIndex (const ACEXML_Char *qName) +{ + for (size_t i = 0; i < this->attrs_.size (); i++) + if (ACE_OS::strcmp (qName, this->attrs_[i].qName ()) == 0) + return static_cast (i); + + return -1; +} + +int +ACEXML_AttributesImpl::getIndex (const ACEXML_Char *uri, + const ACEXML_Char *localPart) +{ + for (size_t i = 0; i < this->attrs_.size (); i++) + if (ACE_OS::strcmp (uri, this->attrs_[i].uri ()) == 0 && + ACE_OS::strcmp (localPart, this->attrs_[i].localName ()) == 0) + return static_cast (i); + + return -1; +} + +size_t +ACEXML_AttributesImpl::getLength (void) +{ + return this->attrs_.size (); +} + +const ACEXML_Char * +ACEXML_AttributesImpl::getLocalName (size_t index) +{ + if (index < this->attrs_.size ()) + return this->attrs_[index].localName (); + return 0; +} + + +const ACEXML_Char * +ACEXML_AttributesImpl::getQName (size_t index) +{ + if (index < this->attrs_.size ()) + return this->attrs_[index].qName (); + return 0; +} + +const ACEXML_Char * +ACEXML_AttributesImpl::getType (size_t index) +{ + if (index < this->attrs_.size ()) + return this->attrs_[index].type (); + return 0; +} + + +const ACEXML_Char * +ACEXML_AttributesImpl::getType (const ACEXML_Char *qName) +{ + for (size_t i = 0; i < this->attrs_.size (); i++) + if (ACE_OS::strcmp (qName, this->attrs_[i].qName ()) == 0) + return this->attrs_[i].type (); + + return 0; +} + +const ACEXML_Char * +ACEXML_AttributesImpl::getType (const ACEXML_Char *uri, + const ACEXML_Char *localPart) +{ + for (size_t i = 0; i < this->attrs_.size (); i++) + if (ACE_OS::strcmp (uri, this->attrs_[i].uri ()) == 0 && + ACE_OS::strcmp (localPart, this->attrs_[i].localName ()) == 0) + return this->attrs_[i].type (); + + return 0; +} + + +const ACEXML_Char * +ACEXML_AttributesImpl::getURI (size_t index) +{ + if (index < this->attrs_.size ()) + return this->attrs_[index].uri (); + return 0; +} + + +const ACEXML_Char * +ACEXML_AttributesImpl::getValue (size_t index) +{ + if (index < this->attrs_.size ()) + return this->attrs_[index].value (); + return 0; +} + +const ACEXML_Char * +ACEXML_AttributesImpl::getValue (const ACEXML_Char *qName) +{ + for (size_t i = 0; i < this->attrs_.size (); i++) + if (ACE_OS::strcmp (qName, this->attrs_[i].qName ()) == 0) + return this->attrs_[i].value (); + + return 0; +} + +const ACEXML_Char * +ACEXML_AttributesImpl::getValue (const ACEXML_Char *uri, + const ACEXML_Char *localPart) +{ + for (size_t i = 0; i < this->attrs_.size (); i++) + if (ACE_OS::strcmp (uri, this->attrs_[i].uri ()) == 0 && + ACE_OS::strcmp (localPart, this->attrs_[i].localName ()) == 0) + return this->attrs_[i].value (); + + return 0; +} + +int +ACEXML_AttributesImpl::setAttribute (size_t index, + const ACEXML_Char *uri, + const ACEXML_Char *localName, + const ACEXML_Char *qName, + const ACEXML_Char *type, + const ACEXML_Char *value) +{ + if (index < this->attrs_.size ()) + { + this->attrs_[index].setAttribute (uri, + localName, + qName, + type, + value); + return 0; + } + + return -1; +} + + +int +ACEXML_AttributesImpl::setLocalName (size_t index, + const ACEXML_Char *localName) +{ + if (index < this->attrs_.size ()) + { + this->attrs_[index].localName (localName); + return 0; + } + return -1; +} + +int +ACEXML_AttributesImpl::setQName (size_t index, + const ACEXML_Char *qName) +{ + if (index < this->attrs_.size ()) + { + this->attrs_[index].qName (qName); + return 0; + } + return -1; +} + + +int +ACEXML_AttributesImpl::setURI (size_t index, + const ACEXML_Char *uri) +{ + if (index < this->attrs_.size ()) + { + this->attrs_[index].uri (uri); + return 0; + } + return -1; +} + +int +ACEXML_AttributesImpl::setType (size_t index, + const ACEXML_Char *type) +{ + if (index < this->attrs_.size ()) + { + this->attrs_[index].type (type); + return 0; + } + return -1; +} + +int +ACEXML_AttributesImpl::setValue (size_t index, + const ACEXML_Char *value) +{ + if (index < this->attrs_.size ()) + { + this->attrs_[index].value (value); + return 0; + } + return -1; +} + diff --git a/ACE/ACEXML/common/AttributesImpl.h b/ACE/ACEXML/common/AttributesImpl.h new file mode 100644 index 00000000000..39b7f33099b --- /dev/null +++ b/ACE/ACEXML/common/AttributesImpl.h @@ -0,0 +1,309 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file AttributesImpl.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + + +#ifndef ACEXML_ATTRIBUTESIMPL_H +#define ACEXML_ATTRIBUTESIMPL_H + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/Attributes.h" +#include "ace/Containers_T.h" + +#if !defined ACEXML_AttributesImpl_Default_Size +#define ACEXML_AttributesImpl_Default_Size 20 +#endif /* ACEXML_AttributesImpl_Default_Size */ + +class ACEXML_AttributesImpl; + +/** + * @class ACEXML_Attribute AttributesImpl.h "ACEXML/common/AttributesImpl.h" + * + * @brief ACEXML_Attribute defines the data structure of an attribute + * + * @sa ACEXML_AttributesImpl + */ +class ACEXML_Export ACEXML_Attribute +{ +public: + friend class ACEXML_AttributesImpl; + + /// Default constructor. + ACEXML_Attribute (void); + + /// Copy constructor. + ACEXML_Attribute (const ACEXML_Attribute &attr); + + /// Initialize all constructor. + ACEXML_Attribute (const ACEXML_Char *uri, + const ACEXML_Char *localName, + const ACEXML_Char *qName, + const ACEXML_Char *type, + const ACEXML_Char *value); + + /// Destructor. + ~ACEXML_Attribute (void); + + /// Set all members. + void setAttribute (const ACEXML_Char *uri, + const ACEXML_Char *localName, + const ACEXML_Char *qName, + const ACEXML_Char *type, + const ACEXML_Char *value); + + /// Get \a uri_. + const ACEXML_Char *uri (void) const; + + /// Set \a uri_. + void uri (const ACEXML_Char *uri); + + /// Get \a localName_. + const ACEXML_Char *localName (void) const; + + /// Set \a localName_. + void localName (const ACEXML_Char *localName); + + /// Get \a qName_. + const ACEXML_Char *qName (void) const; + + /// Set \a qName_. + void qName (const ACEXML_Char *qName); + + /// Get \a type_. + const ACEXML_Char *type (void) const; + + /// Set \a type_. + void type (const ACEXML_Char *type); + + /// Get \a value_. + const ACEXML_Char *value (void) const; + + /// Set \a value_. + void value (const ACEXML_Char *value); + + /// Assignment operator. + ACEXML_Attribute &operator= (const ACEXML_Attribute &rhs); + + /// Comparison operator. + bool operator!= (const ACEXML_Attribute&rhs) const; + +private: + /// Namespace URI of an attribute + ACEXML_Char *uri_; + + ACEXML_Char *localName_; + ACEXML_Char *qName_; + ACEXML_Char *type_; + ACEXML_Char *value_; +}; + +/** + * @typedef ACE_Array ACEXML_Attribute_Array + */ +typedef ACE_Array ACEXML_Attribute_Array; + +/** + * @class ACEXML_AttributesImpl AttributesImpl.h "ACEXML/common/AttributesImpl.h" + * + * @brief ACEXML_AttributesImpl provides the default implementation + * of interface ACEXML_Attributes. + * + * This class provides a default implementation of the SAX2 Attributes + * interface, with the addition of manipulators so that the list can + * be modified or reused. + * + * There are two typical uses of this class: + * + * - to take a persistent snapshot of an Attributes object in a + * startElement event; or + * - to construct or modify an Attributes object in a SAX2 driver or filter. + * + * This class replaces the now-deprecated SAX1 AttributeListImpl + * class; in addition to supporting the updated Attributes interface + * rather than the deprecated AttributeList interface, it also + * includes a much more efficient implementation using a single array + * rather than a set of Vectors. + * + * @sa ACEXML_Attributes + */ +class ACEXML_Export ACEXML_AttributesImpl + : public ACEXML_Attributes +{ +public: + /** + * Initialize an AttributesImpl that holds @a size attributes. + */ + ACEXML_AttributesImpl (int size = ACEXML_AttributesImpl_Default_Size); + ACEXML_AttributesImpl (const ACEXML_AttributesImpl &attrs); + virtual ~ACEXML_AttributesImpl (void); + + /** + * Add a new attribute using the argument(s) supplied. + * Return -1 if an attribute with the same name already exists. + */ + virtual int addAttribute (const ACEXML_Char *uri, + const ACEXML_Char *localName, + const ACEXML_Char *qName, + const ACEXML_Char *type, + const ACEXML_Char *value); + virtual int addAttribute (const ACEXML_Attribute &att); + + /** + * Check for duplicate attributes. + */ + virtual int isDuplicate (const ACEXML_Char *uri, + const ACEXML_Char *localName, + const ACEXML_Char *qName); + /** + * Remove an attribute from the array. Notice that this + * operation can invalidate previously acquired @a index + * value. (It will repack the array.) + */ + virtual int removeAttribute (size_t index); + + + /** + * Look up the index of an attribute by XML 1.0 qualified name. + * Return -1 if we fail to find a match. + */ + virtual int getIndex (const ACEXML_Char *qName); + + /** + * Look up the index of an attribute by Namespace name. + * Return -1 if we fail to find a match. + */ + virtual int getIndex (const ACEXML_Char *uri, + const ACEXML_Char *localPart); + + /** + * Return the number of attributes in the list. + */ + virtual size_t getLength (void); + + /** + * Look up an attribute's local name by index. + * Return 0 if index is out of range. + */ + virtual const ACEXML_Char *getLocalName (size_t index); + + /** + * Look up an attribute's XML 1.0 qualified name by index. + * Return 0 if index is out of range. + */ + virtual const ACEXML_Char *getQName (size_t index); + + /** + * Look up an attribute's type by index. + * Return 0 if index is out of range. + */ + virtual const ACEXML_Char *getType (size_t index); + + /** + * Look up an attribute's type by XML 1.0 qualified name. + * Return 0 if we fail to find a match. + */ + virtual const ACEXML_Char *getType (const ACEXML_Char *qName); + + /** + * Look up an attribute's type by Namespace name. + * Return 0 if we fail to find a match. + */ + virtual const ACEXML_Char *getType (const ACEXML_Char *uri, + const ACEXML_Char *localPart); + + /** + * Look up an attribute's Namespace URI by index. + * Return 0 if index is out of range. + */ + virtual const ACEXML_Char *getURI (size_t index); + + /** + * Look up an attribute's value by index. + * Return 0 if index is out of range. + */ + virtual const ACEXML_Char *getValue (size_t index); + + /** + * Look up an attribute's value by XML 1.0 qualified name. + * Return 0 if we fail to find a match. + */ + virtual const ACEXML_Char *getValue (const ACEXML_Char *qName); + + /** + * Look up an attribute's value by Namespace name. + * Return 0 if we fail to find a match. + */ + virtual const ACEXML_Char *getValue (const ACEXML_Char *uri, + const ACEXML_Char *localPart); + + /** + * Set an attribute at index. Return -1 if index is out of + * range. + */ + virtual int setAttribute (size_t index, + const ACEXML_Char *uri, + const ACEXML_Char *localName, + const ACEXML_Char *qName, + const ACEXML_Char *type, + const ACEXML_Char *value); + + /** + * Set the localName of the attribute at @a index. + * return -1 if @a index is out of range. + */ + virtual int setLocalName (size_t index, + const ACEXML_Char *localName); + + /** + * Set the qName of the attribute at @a index. + * return -1 if @a index is out of range. + */ + virtual int setQName (size_t index, + const ACEXML_Char *qName); + + /** + * Set the URI of the attribute at @a index. + * return -1 if @a index is out of range. + */ + virtual int setURI (size_t index, + const ACEXML_Char *uri); + + /** + * Set the type of the attribute at @a index. + * return -1 if @a index is out of range. + */ + virtual int setType (size_t index, + const ACEXML_Char *type); + + /** + * Set the value of the attribute at @a index. + * return -1 if @a index is out of range. + */ + virtual int setValue (size_t index, + const ACEXML_Char *value); +private: + /// Container for all attributes. + ACEXML_Attribute_Array attrs_; +}; + +#if defined (__ACEXML_INLINE__) +# include "ACEXML/common/AttributesImpl.inl" +#endif /* __ACEXML_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* ACEXML_ATTRIBUTESIMPL_H */ diff --git a/ACE/ACEXML/common/AttributesImpl.inl b/ACE/ACEXML/common/AttributesImpl.inl new file mode 100644 index 00000000000..75fc288950d --- /dev/null +++ b/ACE/ACEXML/common/AttributesImpl.inl @@ -0,0 +1,154 @@ +// -*- C++ -*- +// +//$Id$ + +#include "ace/ACE.h" +#include "ace/OS_NS_string.h" + +ACEXML_INLINE +ACEXML_Attribute::ACEXML_Attribute (void) + : uri_ (0), + localName_ (0), + qName_ (0), + type_ (0), + value_ (0) +{ +} + +ACEXML_INLINE +ACEXML_Attribute::ACEXML_Attribute (const ACEXML_Attribute &attr) + : uri_ (ACE::strnew (attr.uri_)), + localName_ (ACE::strnew (attr.localName_)), + qName_ (ACE::strnew (attr.qName_)), + type_ (ACE::strnew (attr.type_)), + value_ (ACE::strnew (attr.value_)) +{ +} + +ACEXML_INLINE +ACEXML_Attribute::ACEXML_Attribute (const ACEXML_Char *uri, + const ACEXML_Char *localName, + const ACEXML_Char *qName, + const ACEXML_Char *type, + const ACEXML_Char *value) + : uri_ (ACE::strnew (uri)), + localName_ (ACE::strnew (localName)), + qName_ (ACE::strnew (qName)), + type_ (ACE::strnew (type)), + value_ (ACE::strnew (value)) +{ +} + +ACEXML_INLINE +ACEXML_Attribute::~ACEXML_Attribute (void) +{ + delete[] this->uri_; + delete[] this->localName_; + delete[] this->qName_; + delete[] this->type_; + delete[] this->value_; +} + +ACEXML_INLINE const ACEXML_Char * +ACEXML_Attribute::uri (void) const +{ + return this->uri_; +} + +ACEXML_INLINE void +ACEXML_Attribute::uri (const ACEXML_Char *uri) +{ + delete[] this->uri_; + this->uri_ = ACE::strnew (uri); +} + +ACEXML_INLINE const ACEXML_Char * +ACEXML_Attribute::localName (void) const +{ + return this->localName_; +} + +ACEXML_INLINE void +ACEXML_Attribute::localName (const ACEXML_Char *localName) +{ + delete[] this->localName_; + this->localName_ = ACE::strnew (localName); +} + +ACEXML_INLINE const ACEXML_Char * +ACEXML_Attribute::qName (void) const +{ + return this->qName_; +} + +ACEXML_INLINE void +ACEXML_Attribute::qName (const ACEXML_Char *qName) +{ + delete[] this->qName_; + this->qName_ = ACE::strnew (qName); +} + +ACEXML_INLINE const ACEXML_Char * +ACEXML_Attribute::type (void) const +{ + return this->type_; +} + +ACEXML_INLINE void +ACEXML_Attribute::type (const ACEXML_Char *type) +{ + delete[] this->type_; + this->type_ = ACE::strnew (type); +} + +ACEXML_INLINE const ACEXML_Char * +ACEXML_Attribute::value (void) const +{ + return this->value_; +} + +ACEXML_INLINE void +ACEXML_Attribute::value (const ACEXML_Char *value) +{ + delete[] this->value_; + this->value_ = ACE::strnew (value); +} + +ACEXML_INLINE void +ACEXML_Attribute::setAttribute (const ACEXML_Char *uri, + const ACEXML_Char *localName, + const ACEXML_Char *qName, + const ACEXML_Char *type, + const ACEXML_Char *value) +{ + this->uri (uri); + this->qName (qName); + this->localName (localName); + this->type (type); + this->value (value); +} + +ACEXML_INLINE ACEXML_Attribute & +ACEXML_Attribute::operator= (const ACEXML_Attribute &rhs) +{ + if (this != &rhs) // Check for self assignment + { + this->uri (rhs.uri ()); + this->qName (rhs.qName ()); + this->localName (rhs.localName ()); + this->type (rhs.type ()); + this->value (rhs.value ()); + } + return *this; +} + +ACEXML_INLINE bool +ACEXML_Attribute::operator!= (const ACEXML_Attribute &rhs) const +{ + return (ACE_OS::strcmp (this->uri_, rhs.uri ()) == 0 && + ACE_OS::strcmp (this->localName_, rhs.localName ()) == 0 && + ACE_OS::strcmp (this->qName_, rhs .qName ()) == 0 && + ACE_OS::strcmp (this->type_, rhs.type ()) == 0 && + ACE_OS::strcmp (this->value_, rhs.value ()) == 0 ? false : true); + +} diff --git a/ACE/ACEXML/common/Attributes_Def_Builder.cpp b/ACE/ACEXML/common/Attributes_Def_Builder.cpp new file mode 100644 index 00000000000..8b748dce3ce --- /dev/null +++ b/ACE/ACEXML/common/Attributes_Def_Builder.cpp @@ -0,0 +1,14 @@ +// $Id$ + +#include "ACEXML/common/Attributes_Def_Builder.h" + +ACEXML_Attribute_Def_Builder::~ACEXML_Attribute_Def_Builder () +{ + +} + +ACEXML_Attributes_Def_Builder::~ACEXML_Attributes_Def_Builder () +{ + +} + diff --git a/ACE/ACEXML/common/Attributes_Def_Builder.h b/ACE/ACEXML/common/Attributes_Def_Builder.h new file mode 100644 index 00000000000..c91025cd33d --- /dev/null +++ b/ACE/ACEXML/common/Attributes_Def_Builder.h @@ -0,0 +1,153 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Attributes_Def_Builder.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= +#ifndef _ACEXML_ATTRIBUTES_DEF_BUILDER_H_ +#define _ACEXML_ATTRIBUTES_DEF_BUILDER_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/XML_Types.h" +#include "ACEXML/common/Env.h" +#include "ACEXML/common/SAXExceptions.h" +#include "ace/Auto_Ptr.h" + +/** + * @class ACEXML_Attribute_Def_Builder Attributes_Def_Builder.h "common/Attributes_Def_Builder.h" + * + * @brief An abstract virtual class defining an interface for building an + * attribute definition from DTD. + * + * This class should be invisible to application programmers and is only + * used for validator implementors. + */ +class ACEXML_Export ACEXML_Attribute_Def_Builder +{ +public: + + typedef auto_ptr VAR; + + enum ATT_TYPE { + CDATA, + ID, + IDREF, + IDREFS, + ENTITY, + ENTITIES, + NMTOKEN, + NMTOKENS, + NOTATION, + ENUMERATION, + ERROR_TYPE + }; + + enum DEFAULT_DECL { + REQUIRED, + IMPLIED, + FIXED, + INVALID + }; + + virtual ~ACEXML_Attribute_Def_Builder () = 0; + + /** + * Specify the name of the attribute. + */ + virtual int setName (const ACEXML_Char *n) = 0; + + /** + * Get the name of the attribute. + */ + virtual const ACEXML_Char *getName (void) = 0; + + /** + * Set the attribute type. + */ + virtual int setAttType (const ATT_TYPE type ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Insert an element for NOTATION or ENUMERATION type attribute. + */ + virtual int insertList (const ACEXML_Char *Name ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Set default attribute declaration. + */ + virtual int setDefault (const DEFAULT_DECL def, + const ACEXML_Char *value ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Check validity of the current attribute definition being built. + * + * @retval 0 if the attribute is not a valid combo. + */ + virtual int validAttr (void) = 0; + + /** + * Dump the content of the attribute definition. + */ + virtual void dump (void) = 0; +}; + +/** + * @ class ACEXML_Attributes_Def_Builder Attributes_Def_Builder.h "common/Attributes_Def_Builder.h" + * + * @ brief An abstract virtual class defining an interface for building + * attribute definitions from DTD. + * + * This class should be invisible to application programmers and + * is only used for validator implementors. + */ +class ACEXML_Export ACEXML_Attributes_Def_Builder +{ +public: + + typedef auto_ptr VAR; + + virtual ~ACEXML_Attributes_Def_Builder () = 0; + + /** + * Set the element name that the attribute builder applies. + * + * @retval 0 if valid, -1 otherwise. + */ + virtual int setElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Acquire an Attribute_Builder. + */ + virtual ACEXML_Attribute_Def_Builder *getAttribute_Def_Builder () = 0; + + /** + * Add a definition for one attribute. + */ + virtual int insertAttribute (ACEXML_Attribute_Def_Builder *def ACEXML_ENV_ARG_DECL) = 0; + + + /** + * Dump the content of the attribute definition. + */ + virtual void dump (void) = 0; +}; + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_ATTRIBUTES_DEF_BUILDER_H_ */ diff --git a/ACE/ACEXML/common/CharStream.cpp b/ACE/ACEXML/common/CharStream.cpp new file mode 100644 index 00000000000..2c6ea29600f --- /dev/null +++ b/ACE/ACEXML/common/CharStream.cpp @@ -0,0 +1,7 @@ +// -*- C++ -*- $Id$ + +#include "ACEXML/common/CharStream.h" + +ACEXML_CharStream::~ACEXML_CharStream (void) +{ +} diff --git a/ACE/ACEXML/common/CharStream.h b/ACE/ACEXML/common/CharStream.h new file mode 100644 index 00000000000..e0355d4721a --- /dev/null +++ b/ACE/ACEXML/common/CharStream.h @@ -0,0 +1,88 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file CharStream.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +#ifndef _ACEXML_CHARSTREAM_H_ +#define _ACEXML_CHARSTREAM_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ +#include "ACEXML/common/XML_Types.h" + +/** + * @class ACEXML_CharStream CharStream.h "ACEXML/common/CharStream.h" + * + * ACEXML_CharStream is an abstract class (interface) which defines the + * basic opertions a parser could use to retrieve XML charater sequence. + * The sequence can be read from a file or a character buffer. + */ +class ACEXML_Export ACEXML_CharStream +{ +public: + + /** + * Virtual destructor, must have. + */ + virtual ~ACEXML_CharStream () = 0; + + /** + * Returns the available ACEXML_Char in the buffer. -1 + * if the object is not initialized properly. + */ + virtual int available (void) = 0; + + /** + * Close this stream and release all resources used by it. + */ + virtual int close (void) = 0; + + /** + * Read the next ACEXML_Char. Return -1 if we are not able to + * return an ACEXML_Char, 0 if EOS is reached, or 1 if succeed. + */ + virtual int get (ACEXML_Char& ch) = 0; + + /** + * Read the next batch of ACEXML_Char strings + */ + virtual int read (ACEXML_Char *str, size_t len) = 0; + + /** + * Peek the next ACEXML_Char in the CharStream. Return the + * character if succeess, -1 if EOS is reached. + */ + virtual int peek (void) = 0; + + /** + * Resets the pointer to the beginning of the stream. + */ + virtual void rewind (void) = 0; + + /* + * Get the character encoding for a byte stream or URI. + */ + virtual const ACEXML_Char *getEncoding (void) = 0; + + /* + * Get the systemId for the underlying CharStream + */ + virtual const ACEXML_Char* getSystemId (void) = 0; + +}; + +#include /**/ "ace/post.h" + + +#endif /* _ACEXML_CHARSTREAM_H_ */ diff --git a/ACE/ACEXML/common/ContentHandler.cpp b/ACE/ACEXML/common/ContentHandler.cpp new file mode 100644 index 00000000000..633342fd6b1 --- /dev/null +++ b/ACE/ACEXML/common/ContentHandler.cpp @@ -0,0 +1,11 @@ +#include "ContentHandler.h" + + +ACE_RCSID (common, + ContentHandler, + "$Id$") + + +ACEXML_ContentHandler::~ACEXML_ContentHandler (void) +{ +} diff --git a/ACE/ACEXML/common/ContentHandler.h b/ACE/ACEXML/common/ContentHandler.h new file mode 100644 index 00000000000..006eb4ded37 --- /dev/null +++ b/ACE/ACEXML/common/ContentHandler.h @@ -0,0 +1,132 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file ContentHandler.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= +#ifndef _ACEXML_CONTENTHANDLER_H_ +#define _ACEXML_CONTENTHANDLER_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/Env.h" +#include "ACEXML/common/SAXExceptions.h" +#include "ACEXML/common/Locator.h" +#include "ACEXML/common/Attributes.h" + +/** + * @class ACEXML_ContentHandler ContentHandler.h "ACEXML/common/ContentHandler.h" + * + * @brief ACEXML_ContentHandler + * + * This is the main interface that most SAX applications implement: if the + * application needs to be informed of basic parsing events, it implements + * this interface and registers an instance with the SAX parser using the + * setContentHandler method. The parser uses the instance to report basic + * document-related events like the start and end of elements and character + * data. + * + * The order of events in this interface is very important, and mirrors the + * order of information in the document itself. For example, all of an + * element's content (character data, processing instructions, and/or + * subelements) will appear, in order, between the startElement event and + * the corresponding endElement event. + */ +class ACEXML_Export ACEXML_ContentHandler +{ +public: + + virtual ~ACEXML_ContentHandler (void); + + /** + * Receive notification of character data. + */ + virtual void characters (const ACEXML_Char *ch, + size_t start, + size_t length + ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Receive notification of the end of a document. + */ + virtual void endDocument (ACEXML_ENV_SINGLE_ARG_DECL) + = 0; + + /** + * Receive notification of the end of an element. + */ + virtual void endElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) + = 0; + + /** + * End the scope of a prefix-URI mapping. + */ + virtual void endPrefixMapping (const ACEXML_Char *prefix ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Receive notification of ignorable whitespace in element content. + */ + virtual void ignorableWhitespace (const ACEXML_Char *ch, + int start, + int length ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Receive notification of a processing instruction. + */ + virtual void processingInstruction (const ACEXML_Char *target, + const ACEXML_Char *data ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Receive an object for locating the origin of SAX document events. + */ + virtual void setDocumentLocator (ACEXML_Locator *locator) = 0; + + /** + * Receive notification of a skipped entity. + */ + virtual void skippedEntity (const ACEXML_Char *name ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Receive notification of the beginning of a document. + */ + virtual void startDocument (ACEXML_ENV_SINGLE_ARG_DECL) + = 0; + + /** + * Receive notification of the beginning of an element. + */ + virtual void startElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName, + ACEXML_Attributes *atts ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Begin the scope of a prefix-URI Namespace mapping. + */ + virtual void startPrefixMapping (const ACEXML_Char *prefix, + const ACEXML_Char *uri ACEXML_ENV_ARG_DECL) + = 0; +}; + +#include /**/ "ace/post.h" + + +#endif /* _ACEXML_CONTENTHANDLER_H_ */ diff --git a/ACE/ACEXML/common/DTDHandler.cpp b/ACE/ACEXML/common/DTDHandler.cpp new file mode 100644 index 00000000000..199f469b578 --- /dev/null +++ b/ACE/ACEXML/common/DTDHandler.cpp @@ -0,0 +1,11 @@ +#include "DTDHandler.h" + + +ACE_RCSID (common, + DTDHandler, + "$Id$") + + +ACEXML_DTDHandler::~ACEXML_DTDHandler (void) +{ +} diff --git a/ACE/ACEXML/common/DTDHandler.h b/ACE/ACEXML/common/DTDHandler.h new file mode 100644 index 00000000000..18800a43a2e --- /dev/null +++ b/ACE/ACEXML/common/DTDHandler.h @@ -0,0 +1,78 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file DTDHandler.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= +#ifndef _ACEXML_DTDHANDLER_H_ +#define _ACEXML_DTDHANDLER_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/Env.h" +#include "ACEXML/common/SAXExceptions.h" + +/** + * @class ACEXML_DTDHandler DTDHandler.h "ACEXML/common/DTDHandler.h" + * + * @brief ACEXML_DTDHandler + * + * If a SAX application needs information about notations and unparsed + * entities, then the application implements this interface and registers + * an instance with the SAX parser using the parser's setDTDHandler method. + * The parser uses the instance to report notation and unparsed entity + * declarations to the application. + * + * Note that this interface includes only those DTD events that the XML + * recommendation requires processors to report: notation and unparsed + * entity declarations. + * + * The SAX parser may report these events in any order, regardless of the + * order in which the notations and unparsed entities were declared; + * however, all DTD events must be reported after the document handler's + * startDocument event, and before the first startElement event. + * + * It is up to the application to store the information for future use + * (perhaps in a hash table or object tree). If the application encounters + * attributes of type "NOTATION", "ENTITY", or "ENTITIES", it can use the + * information that it obtained through this interface to find the entity + * and/or notation corresponding with the attribute value. + */ +class ACEXML_Export ACEXML_DTDHandler +{ +public: + + virtual ~ACEXML_DTDHandler (void); + + /** + * Receive notification of a notation declaration event. + */ + virtual void notationDecl (const ACEXML_Char *name, + const ACEXML_Char *publicId, + const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Receive notification of an unparsed entity declaration event. + */ + virtual void unparsedEntityDecl (const ACEXML_Char *name, + const ACEXML_Char *publicId, + const ACEXML_Char *systemId, + const ACEXML_Char *notationName ACEXML_ENV_ARG_DECL) + = 0; +}; + + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_DTDHANDLER_H_ */ diff --git a/ACE/ACEXML/common/DTD_Manager.cpp b/ACE/ACEXML/common/DTD_Manager.cpp new file mode 100644 index 00000000000..39b3d2acef0 --- /dev/null +++ b/ACE/ACEXML/common/DTD_Manager.cpp @@ -0,0 +1,8 @@ +// $Id$ + +#include "ACEXML/common/DTD_Manager.h" + +ACEXML_DTD_Manager::~ACEXML_DTD_Manager () +{ + +} diff --git a/ACE/ACEXML/common/DTD_Manager.h b/ACE/ACEXML/common/DTD_Manager.h new file mode 100644 index 00000000000..51ab3791551 --- /dev/null +++ b/ACE/ACEXML/common/DTD_Manager.h @@ -0,0 +1,82 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file DTD_Manager.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= +#ifndef _ACEXML_DTD_Manager_H_ +#define _ACEXML_DTD_Manager_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/Attributes_Def_Builder.h" +#include "ACEXML/common/Element_Def_Builder.h" +#include "ACEXML/common/Validator.h" + +/** + * @class ACEXML_DTD_Manager DTD_Manager.h "common/DTD_Manager.h" + * + * @todo Fill in the blank. + */ +class ACEXML_Export ACEXML_DTD_Manager +{ +public: + virtual ~ACEXML_DTD_Manager () = 0; + + /** + * Acquire a pointer to an element definition builder. + * The XML parser use this interface to acquire the + * definition builder and use the builder to create + * the DTD element definition. The resulting builder + * is then registered with the DTD Manager or destroyed + * if error occured when the builder encountered errors. + * + * @retval 0 if error occurs creating the builder. + */ + virtual ACEXML_Element_Def_Builder *getElement_Def_Builder () = 0; + + /** + * Insert a new element definition into the DTD Manager. + * + * @retval 0 if success, -1 if error. + */ + virtual int insertElement_Definition (ACEXML_Element_Def_Builder *def ACEXML_ENV_ARG_DECL) = 0; + + /** + * Acquire a pointer to an attributes definition builder. + * + */ + virtual ACEXML_Attributes_Def_Builder *getAttribute_Def_Builder () = 0; + + /** + * Insert a new attributes definition into the DTD Manager. + * + * @retval 0 if success, -1 otherwise. + */ + virtual int insertAttributes_Definition (ACEXML_Attributes_Def_Builder *def ACEXML_ENV_ARG_DECL) = 0; + + /** + * Acquire an element validator to validate an XML element. + * + * @todo I haven't figured out what memory management scheme + * we should use for the acquired validator. + */ + virtual ACEXML_Validator *getValidator (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) = 0; +}; + + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_DTD_Manager_H_ */ diff --git a/ACE/ACEXML/common/DefaultHandler.cpp b/ACE/ACEXML/common/DefaultHandler.cpp new file mode 100644 index 00000000000..02e7fd86126 --- /dev/null +++ b/ACE/ACEXML/common/DefaultHandler.cpp @@ -0,0 +1,143 @@ +// -*- C++ -*- $Id$ + +#include "ACEXML/common/DefaultHandler.h" + +ACEXML_DefaultHandler::ACEXML_DefaultHandler (void) +{ + // no-op +} + +ACEXML_DefaultHandler::~ACEXML_DefaultHandler (void) +{ + // no-op +} + +void +ACEXML_DefaultHandler::characters (const ACEXML_Char *, + size_t, + size_t + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + +void +ACEXML_DefaultHandler::endDocument (ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED) +{ + // No-op. +} + +void +ACEXML_DefaultHandler::endElement (const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + +void +ACEXML_DefaultHandler::endPrefixMapping (const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + +void +ACEXML_DefaultHandler::ignorableWhitespace (const ACEXML_Char *, + int, + int ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + +void +ACEXML_DefaultHandler::processingInstruction (const ACEXML_Char *, + const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + +void +ACEXML_DefaultHandler::setDocumentLocator (ACEXML_Locator * ) +{ + // No-op. +} + +void +ACEXML_DefaultHandler::skippedEntity (const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + +void +ACEXML_DefaultHandler::startDocument (ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED) +{ + // No-op. +} + +void +ACEXML_DefaultHandler::startElement (const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char *, + ACEXML_Attributes * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + +void +ACEXML_DefaultHandler::startPrefixMapping (const ACEXML_Char *, + const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + + // *** Methods inherited from ACEXML_DTDHandler. + +void +ACEXML_DefaultHandler::notationDecl (const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + +void +ACEXML_DefaultHandler::unparsedEntityDecl (const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + + // Methods inherited from ACEXML_EntityResolver. + +ACEXML_InputSource * +ACEXML_DefaultHandler::resolveEntity (const ACEXML_Char *, + const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. + return 0; +} + + // Methods inherited from ACEXML_ErrorHandler. + + /* + * Receive notification of a recoverable error. + */ +void +ACEXML_DefaultHandler::error (ACEXML_SAXParseException & ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + +void +ACEXML_DefaultHandler::fatalError (ACEXML_SAXParseException & ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + +void +ACEXML_DefaultHandler::warning (ACEXML_SAXParseException & ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} diff --git a/ACE/ACEXML/common/DefaultHandler.h b/ACE/ACEXML/common/DefaultHandler.h new file mode 100644 index 00000000000..a729778201c --- /dev/null +++ b/ACE/ACEXML/common/DefaultHandler.h @@ -0,0 +1,176 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file DefaultHandler.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= +#ifndef ACEXML_DEFAULTHANDLER_H +#define ACEXML_DEFAULTHANDLER_H + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/ContentHandler.h" +#include "ACEXML/common/DTDHandler.h" +#include "ACEXML/common/EntityResolver.h" +#include "ACEXML/common/ErrorHandler.h" + +/** + * @class ACEXML_DefaultHandler DefaultHandler.h "ACEXML/common/DefaultHandler.h" + * + * @brief ACEXML_DefaultHandler + * + * This class is available as a convenience base class for SAX2 + * applications: it provides default implementations for all of the + * callbacks in the four core SAX2 handler classes: + * + * - EntityResolver + * - DTDHandler + * - ContentHandler + * - ErrorHandler + * + * Application writers can extend this class when they need to implement + * only part of an interface; parser writers can instantiate this class to + * provide default handlers when the application has not supplied its own. + */ +class ACEXML_Export ACEXML_DefaultHandler + : public ACEXML_ContentHandler, + public ACEXML_DTDHandler, + public ACEXML_EntityResolver, + public ACEXML_ErrorHandler +{ +public: + /** + * Default constructor. + */ + ACEXML_DefaultHandler (void); + + /** + * destructor. + */ + virtual ~ACEXML_DefaultHandler (void); + + // Methods inherit from ACEXML_ContentHandler. + + /* + * Receive notification of character data. + */ + virtual void characters (const ACEXML_Char *ch, + size_t start, + size_t length + ACEXML_ENV_ARG_DECL); + + /* + * Receive notification of the end of a document. + */ + virtual void endDocument (ACEXML_ENV_SINGLE_ARG_DECL); + + /* + * Receive notification of the end of an element. + */ + virtual void endElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL); + + /* + * End the scope of a prefix-URI mapping. + */ + virtual void endPrefixMapping (const ACEXML_Char *prefix ACEXML_ENV_ARG_DECL); + + /* + * Receive notification of ignorable whitespace in element content. + */ + virtual void ignorableWhitespace (const ACEXML_Char *ch, + int start, + int length ACEXML_ENV_ARG_DECL); + + /* + * Receive notification of a processing instruction. + */ + virtual void processingInstruction (const ACEXML_Char *target, + const ACEXML_Char *data ACEXML_ENV_ARG_DECL); + + /* + * Receive an object for locating the origin of SAX document events. + */ + virtual void setDocumentLocator (ACEXML_Locator *locator) ; + + /* + * Receive notification of a skipped entity. + */ + virtual void skippedEntity (const ACEXML_Char *name ACEXML_ENV_ARG_DECL); + + /* + * Receive notification of the beginning of a document. + */ + virtual void startDocument (ACEXML_ENV_SINGLE_ARG_DECL); + + /* + * Receive notification of the beginning of an element. + */ + virtual void startElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName, + ACEXML_Attributes *atts ACEXML_ENV_ARG_DECL); + + /* + * Begin the scope of a prefix-URI Namespace mapping. + */ + virtual void startPrefixMapping (const ACEXML_Char *prefix, + const ACEXML_Char *uri ACEXML_ENV_ARG_DECL); + + // *** Methods inherit from ACEXML_DTDHandler. + + /* + * Receive notification of a notation declaration event. + */ + virtual void notationDecl (const ACEXML_Char *name, + const ACEXML_Char *publicId, + const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL); + + /* + * Receive notification of an unparsed entity declaration event. + */ + virtual void unparsedEntityDecl (const ACEXML_Char *name, + const ACEXML_Char *publicId, + const ACEXML_Char *systemId, + const ACEXML_Char *notationName ACEXML_ENV_ARG_DECL); + + // Methods inherit from ACEXML_EnitityResolver. + + /* + * Allow the application to resolve external entities. + */ + virtual ACEXML_InputSource *resolveEntity (const ACEXML_Char *publicId, + const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL); + + // Methods inherit from ACEXML_ErrorHandler. + + /* + * Receive notification of a recoverable error. + */ + virtual void error (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL); + + /* + * Receive notification of a non-recoverable error. + */ + virtual void fatalError (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL); + + /* + * Receive notification of a warning. + */ + virtual void warning (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL); +}; + +#include /**/ "ace/post.h" + +#endif /* ACEXML_DEFAULTHANDLER_H */ diff --git a/ACE/ACEXML/common/Element_Def_Builder.cpp b/ACE/ACEXML/common/Element_Def_Builder.cpp new file mode 100644 index 00000000000..2bcef84f16d --- /dev/null +++ b/ACE/ACEXML/common/Element_Def_Builder.cpp @@ -0,0 +1,9 @@ +// $Id$ + +#include "ACEXML/common/Element_Def_Builder.h" + +ACEXML_Element_Def_Builder::~ACEXML_Element_Def_Builder () +{ + +} + diff --git a/ACE/ACEXML/common/Element_Def_Builder.h b/ACE/ACEXML/common/Element_Def_Builder.h new file mode 100644 index 00000000000..ace842fb17c --- /dev/null +++ b/ACE/ACEXML/common/Element_Def_Builder.h @@ -0,0 +1,133 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Element_Def_Builder.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= +#ifndef _ACEXML_ELEMENT_DEF_BUILDER_H_ +#define _ACEXML_ELEMENT_DEF_BUILDER_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ +#include "ace/Auto_Ptr.h" +#include "ACEXML/common/XML_Types.h" +#include "ACEXML/common/Env.h" +#include "ACEXML/common/SAXExceptions.h" + +/** + * @class ACEXML_Element_Def_Builder Element_Def_Builder.h "common/Element_Def_Builder.h" + * + * @brief An abstract virtual class that defines the interface to define an + * element definition. + * + * This class defines how to define an element definition after parsing a + * DTD. + */ +class ACEXML_Export ACEXML_Element_Def_Builder +{ +public: + + typedef auto_ptr VAR; + + typedef enum { + EMPTY, + ANY, + MIXED, + CHILDREN, + UNDEFINED + } CONTENT_TYPE; + + typedef enum { + ONE, + ZERO_OR_MORE, + ONE_OR_MORE, + ONE_OR_ZERO + } CARDINALITY; + + virtual ~ACEXML_Element_Def_Builder () = 0; + + /** + * Define the name of the element. + * + * @retval 0 if valid, -1 otherwise. + */ + virtual int setElementName (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Define the content type of the element. + * + * @retval 0 if valid, -1 otherwise. + */ + virtual int setContentType (CONTENT_TYPE type ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Insert one more element into Mixed definition. + */ + virtual int insertMixedElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Start a new group of children. + */ + virtual int startChildGroup () = 0; + + /** + * End a new group of children. + * + * @retval 0 on success. + */ + virtual int endChildGroup (CARDINALITY card ACEXML_ENV_ARG_DECL) = 0; + + /** + * Set the type of current child group to Choice. + * + * @retval 0 on success, -1 if the type of the child group has + * already been set and this action conflicts with the previous + * setting. + */ + virtual int setChoice () = 0; + + /** + * Set the type of current child group to Sequence. + * + * @retval 0 on success, -1 if the type of the child group has + * already been set and this action conflicts with the previous + * setting. + */ + virtual int setSequence () = 0; + + /** + * Insert an new element into the current child group. + * + * @retval 0 on success, -1 otherwise. + */ + virtual int insertElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Dump the content of the attribute definition. + */ + virtual void dump (void) = 0; +}; + + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_ELEMENT_DEF_BUILDER_H_ */ diff --git a/ACE/ACEXML/common/Encoding.cpp b/ACE/ACEXML/common/Encoding.cpp new file mode 100644 index 00000000000..4531fad20c3 --- /dev/null +++ b/ACE/ACEXML/common/Encoding.cpp @@ -0,0 +1,59 @@ +// -*- C++ -*- $Id$ + +#include "ACEXML/common/Encoding.h" +#include "ace/OS_NS_string.h" + +const ACEXML_Char* ACEXML_Encoding::encoding_names_[8] = { + ACE_TEXT ("UCS-4BE"), + ACE_TEXT ("UCS-4LE"), + ACE_TEXT ("UCS-4_2143"), + ACE_TEXT ("UCS-4_3412"), + ACE_TEXT ("UTF-16"), + ACE_TEXT ("UTF-16"), + ACE_TEXT ("UTF-8"), + ACE_TEXT ("Unsupported Encoding") +}; + +const ACEXML_UTF8 ACEXML_Encoding::byte_order_mark_[][4] = { + { '\x00', '\x00', '\xFE', '\xFF' }, // UCS-4, big-endian (1234 order) + { '\xFF', '\xFE', '\x00', '\x00' }, // UCS-4, little-endian (4321 order) + { '\x00', '\x00', '\xFF', '\xFE' }, // UCS-4, unusual octet order (2143) + { '\xFE', '\xFF', '\x00', '\x00' }, // UCS-4, unusual octet order (3412) + { '\xFE', '\xFF', '\xFF', '\xFF' }, // UTF-16, big-endian (3 & 4 != 0) + { '\xFF', '\xFE', '\xFF', '\xFF' }, // UTF-16, little-endian ( 3 & 4 != 0) + { '\xEF', '\xBB', '\xBF', '\xFF' } // UTF-8 +}; + +const ACEXML_UTF8 ACEXML_Encoding::magic_values_[][4] = { + { '\x00', '\x00', '\x00', '\x3c' }, // + { '\x3c', '\x00', '\x00', '\x00' }, // UCS-4 and variants + { '\x00', '\x00', '\x3c', '\x00' }, // + { '\x00', '\x3c', '\x00', '\x00' }, // + { '\x00', '\x3c', '\x00', '\x3f' }, // UTF-16BE + { '\x3c', '\x00', '\x3f', '\x00' }, // UTF-16LE + { '\x3c', '\x3f', '\x78', '\x6d' }, // UTF-8 +}; + +const ACEXML_Char* +ACEXML_Encoding::get_encoding (const char* input) +{ + if ((ACE_OS::memcmp (&ACEXML_Encoding::byte_order_mark_[ACEXML_Encoding::UTF16BE][0], input, 2) == 0) + && (input[2] != 0 || input[3] != 0)) // 3 & 4 should not be both zero + return ACEXML_Encoding::encoding_names_[ACEXML_Encoding::UTF16BE]; + else if ((ACE_OS::memcmp (&ACEXML_Encoding::byte_order_mark_[ACEXML_Encoding::UTF16LE][0], input, 2) == 0) + && (input[2] != 0 || input[3] != 0)) // 3 & 4 should not be both zero + return ACEXML_Encoding::encoding_names_[ACEXML_Encoding::UTF16LE]; + else if (ACE_OS::memcmp (&ACEXML_Encoding::byte_order_mark_[ACEXML_Encoding::UTF8][0], input, 3) == 0) + return ACEXML_Encoding::encoding_names_[ACEXML_Encoding::UTF8]; + else if (ACE_OS::memcmp (&ACEXML_Encoding::magic_values_[ACEXML_Encoding::UTF16BE][0], input, 4) == 0) + return ACEXML_Encoding::encoding_names_[ACEXML_Encoding::UTF16BE]; + else if (ACE_OS::memcmp (&ACEXML_Encoding::magic_values_[ACEXML_Encoding::UTF16LE][0], input, 4) == 0) + return ACEXML_Encoding::encoding_names_[ACEXML_Encoding::UTF16LE]; + else if (ACE_OS::memcmp (&ACEXML_Encoding::magic_values_[ACEXML_Encoding::UTF8][0], input, 4) == 0) + return ACEXML_Encoding::encoding_names_[ACEXML_Encoding::UTF8]; + else + { + // ACE_ERROR ((LM_ERROR, "Unknown encoding. Assuming UTF-8\n")); + return ACEXML_Encoding::encoding_names_[ACEXML_Encoding::UTF8]; + } +} diff --git a/ACE/ACEXML/common/Encoding.h b/ACE/ACEXML/common/Encoding.h new file mode 100644 index 00000000000..3e957fabbe1 --- /dev/null +++ b/ACE/ACEXML/common/Encoding.h @@ -0,0 +1,61 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Encoding.h + * + * This file provides utility functions to determine the encoding of a file + * or a byte stream automatically. + * + * $Id$ + * + * @author Krishnakumar B + */ +//============================================================================= + +#ifndef _ACEXML_ENCODING_H +#define _ACEXML_ENCODING_H + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/XML_Types.h" + +/** + * @class ACEXML_Encoding Encoding.h "ACEXML/common/Encoding.h" + * + * @brief ACEXML_Encoding + * + * Wrapper class for determining the encoding of a file or a byte stream. + */ +class ACEXML_Export ACEXML_Encoding +{ +public: + enum { + UCS4BE, + UCS4LE, + UCS4_2143, + UCS4_3412, + UTF16BE, + UTF16LE, + UTF8, + OTHER + } ENCODING; + + static const ACEXML_Char* encoding_names_[8]; + + static const ACEXML_UTF8 byte_order_mark_[][4]; + + static const ACEXML_UTF8 magic_values_[][4]; + + static const ACEXML_Char* get_encoding (const char* input); + +}; + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_ENCODING_H */ diff --git a/ACE/ACEXML/common/EntityResolver.cpp b/ACE/ACEXML/common/EntityResolver.cpp new file mode 100644 index 00000000000..bcd08c1af70 --- /dev/null +++ b/ACE/ACEXML/common/EntityResolver.cpp @@ -0,0 +1,11 @@ +#include "EntityResolver.h" + + +ACE_RCSID (common, + EntityResolver, + "$Id$") + + +ACEXML_EntityResolver::~ACEXML_EntityResolver (void) +{ +} diff --git a/ACE/ACEXML/common/EntityResolver.h b/ACE/ACEXML/common/EntityResolver.h new file mode 100644 index 00000000000..c1934724bad --- /dev/null +++ b/ACE/ACEXML/common/EntityResolver.h @@ -0,0 +1,61 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file EntityResolver.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= +#ifndef _ACEXML_ENTITYHANDLER_H_ +#define _ACEXML_ENTITYHANDLER_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/Env.h" +#include "ACEXML/common/InputSource.h" +#include "ACEXML/common/SAXExceptions.h" + +/** + * @class ACEXML_EntityResolver EntityResolver.h "ACEXML/common/EntityResolver.h" + * + * @brief ACEXML_EntityResolver + * + * If a SAX application needs to implement customized handling for + * external entities, it must implement this interface and register an + * instance with the SAX driver using the setEntityResolver method. + * + * The XML reader will then allow the application to intercept any + * external entities (including the external DTD subset and external + * parameter entities, if any) before including them. + * + * Many SAX applications will not need to implement this interface, + * but it will be especially useful for applications that build XML + * documents from databases or other specialised input sources, or for + * applications that use URI types other than URLs. + */ +class ACEXML_Export ACEXML_EntityResolver +{ +public: + + virtual ~ACEXML_EntityResolver (void); + + /** + * Allow the application to resolve external entities. + */ + virtual ACEXML_InputSource *resolveEntity (const ACEXML_Char *publicId, + const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) + = 0; +}; + + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_ENTITYHANDLER_H_ */ diff --git a/ACE/ACEXML/common/Env.cpp b/ACE/ACEXML/common/Env.cpp new file mode 100644 index 00000000000..e5014a06714 --- /dev/null +++ b/ACE/ACEXML/common/Env.cpp @@ -0,0 +1,34 @@ +// -*- C++ -*- $Id$ + +#include "ACEXML/common/Env.h" + +#if !defined (__ACEXML_INLINE__) +# include "ACEXML/common/Env.inl" +#endif /* __ACEXML_INLINE__ */ + +ACEXML_Env::ACEXML_Env (void) + : exception_ (0) +{ +} + +ACEXML_Env::ACEXML_Env (const ACEXML_Env &rhs) + : exception_ (0) +{ + if (rhs.exception()) + this->exception_ = rhs.exception_->duplicate(); +} + +ACEXML_Env& +ACEXML_Env::operator= (const ACEXML_Env& rhs) +{ + ACEXML_Env tmp (rhs); + ACEXML_Exception* tmp_ex = this->exception_; + this->exception_ = tmp.exception_; + tmp.exception_ = tmp_ex; + return *this; +} + +ACEXML_Env::~ACEXML_Env (void) +{ + this->clear(); +} diff --git a/ACE/ACEXML/common/Env.h b/ACE/ACEXML/common/Env.h new file mode 100644 index 00000000000..ee8aa59768d --- /dev/null +++ b/ACE/ACEXML/common/Env.h @@ -0,0 +1,72 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Env.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +#ifndef _ACEXML_ENV_H_ +#define _ACEXML_ENV_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/XML_Macros.h" +#include "ACEXML/common/Exception.h" + +/** + * @class ACEXML_Env Env.h "ACEXML/common/Env.h" + * + * @brief ACEXML_Env + * + * ACEXML_Env is modeled after CORBA_Environment class. It provides a place + * holder for callees to propagate exceptions back to callers. ACEXML does + * not support native exceptions at this moment. + * + * @sa ACEXML_Exception + */ +class ACEXML_Export ACEXML_Env +{ +public: + /// Default constructor. + ACEXML_Env (void); + + /// Copy constructor. + ACEXML_Env (const ACEXML_Env& ACEXML_TRY_ENV); + + /// Assignment + ACEXML_Env& operator= (const ACEXML_Env& ACEXML_TRY_ENV); + + /// Destructor. + ~ACEXML_Env (void); + + /// Return the contained exception. + ACEXML_Exception *exception (void) const; + + /// Set the contained exception to @arg ex + void exception (ACEXML_Exception* ex); + + /// Clear the exception and reset the evnrionment. + void clear (void); + +private: + /// Place holder for exception (if one occurs.) + ACEXML_Exception *exception_; +}; + +#if defined (__ACEXML_INLINE__) +# include "ACEXML/common/Env.inl" +#endif /* __ACEXML_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_ENV_H_ */ diff --git a/ACE/ACEXML/common/Env.inl b/ACE/ACEXML/common/Env.inl new file mode 100644 index 00000000000..95c3f41c8aa --- /dev/null +++ b/ACE/ACEXML/common/Env.inl @@ -0,0 +1,25 @@ +// -*- C++ -*- $Id$ + +#include "ace/Log_Msg.h" /* to get ACE_ASSERT */ +#include "ACEXML/common/Exception.h" + +ACEXML_INLINE ACEXML_Exception * +ACEXML_Env::exception (void) const +{ + return this->exception_; +} + +ACEXML_INLINE void +ACEXML_Env::exception (ACEXML_Exception *ex) +{ + ACE_ASSERT (ex != this->exception_); + this->clear(); + this->exception_ = ex; +} + +ACEXML_INLINE void +ACEXML_Env::clear (void) +{ + delete this->exception_; + this->exception_ = 0; +} diff --git a/ACE/ACEXML/common/ErrorHandler.cpp b/ACE/ACEXML/common/ErrorHandler.cpp new file mode 100644 index 00000000000..42d9552d859 --- /dev/null +++ b/ACE/ACEXML/common/ErrorHandler.cpp @@ -0,0 +1,11 @@ +#include "ErrorHandler.h" + + +ACE_RCSID (common, + ErrorHandler, + "$Id$") + + +ACEXML_ErrorHandler::~ACEXML_ErrorHandler (void) +{ +} diff --git a/ACE/ACEXML/common/ErrorHandler.h b/ACE/ACEXML/common/ErrorHandler.h new file mode 100644 index 00000000000..4d8da5cc4a4 --- /dev/null +++ b/ACE/ACEXML/common/ErrorHandler.h @@ -0,0 +1,75 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file ErrorHandler.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= +#ifndef _ACEXML_ERRORHANDLER_H_ +#define _ACEXML_ERRORHANDLER_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/Env.h" +#include "ACEXML/common/SAXExceptions.h" + +/** + * @class ACEXML_ErrorHandler ErrorHandler.h "ACEXML/common/ErrorHandler.h" + * + * @brief ACEXML_ErrorHandler + * + * If a SAX application needs to implement customized error handling, + * it must implement this interface and then register an instance with + * the XML reader using the setErrorHandler method. The parser will + * then report all errors and warnings through this interface. + * + * @b WARNING: If an application does not register an ErrorHandler, + * XML parsing errors will go unreported and bizarre behaviour may + * result. + * + * For XML processing errors, a SAX driver must use this interface + * instead of throwing an exception: it is up to the application to + * decide whether to throw an exception for different types of errors + * and warnings. Note, however, that there is no requirement that the + * parser continue to provide useful information after a call to + * fatalError (in other words, a SAX driver class could catch an + * exception and report a fatalError). + */ +class ACEXML_Export ACEXML_ErrorHandler +{ +public: + + virtual ~ACEXML_ErrorHandler (void); + + /** + * Receive notification of a recoverable error. + */ + virtual void error (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Receive notification of a non-recoverable error. + */ + virtual void fatalError (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Receive notification of a warning. + */ + virtual void warning (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL) + = 0; +}; + + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_ERRORHANDLER_H_ */ diff --git a/ACE/ACEXML/common/Exception.cpp b/ACE/ACEXML/common/Exception.cpp new file mode 100644 index 00000000000..5ad6b9b1b7e --- /dev/null +++ b/ACE/ACEXML/common/Exception.cpp @@ -0,0 +1,36 @@ +// -*- C++ -*- $Id$ + +#include "ACEXML/common/Exception.h" +#include "ace/Log_Msg.h" +#include "ace/ACE.h" +#include "ace/OS_NS_string.h" + +const ACEXML_Char *ACEXML_Exception::exception_name_ = ACE_TEXT ("ACEXML_Exception"); + +const ACEXML_Char *ACEXML_Exception::null_ = ACE_TEXT (""); + +#if !defined (__ACEXML_INLINE__) +# include "ACEXML/common/Exception.inl" +#endif /* __ACEXML_INLINE__ */ + +ACEXML_Exception::ACEXML_Exception() +{ +} + +ACEXML_Exception::~ACEXML_Exception() +{ +} + +int +ACEXML_Exception::is_a (const ACEXML_Char *name) +{ + return ACE_OS::strcmp (ACEXML_Exception::exception_name_, name) == 0; +} + +void +ACEXML_Exception::print (void) const +{ + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACEXML: (%P|%t) EXCEPTION : %s\n"), + this->exception_name_)); +} diff --git a/ACE/ACEXML/common/Exception.h b/ACE/ACEXML/common/Exception.h new file mode 100644 index 00000000000..48572e24c73 --- /dev/null +++ b/ACE/ACEXML/common/Exception.h @@ -0,0 +1,87 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Exception.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +#ifndef _ACEXML_EXCEPTION_H_ +#define _ACEXML_EXCEPTION_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/XML_Types.h" +#include "ACEXML/common/XML_Macros.h" + +#if defined (ACE_USES_NATIVE_EXCEPTIONS) +# define ACEXML_RAISE(EXCEPTION) throw EXCEPTION +#else +# define ACEXML_RAISE(EXCEPTION) +#endif + + +/** + * @class ACEXML_Exception Exception.h "ACEXML/common/Exception.h" + * + * @brief ACEXML_Exception + * + * ACEXML_Exception is the base class for all ACEXML related exceptions. + * Since ACEXML currently does not support native exceptions, all + * exceptions should be thrown thru ACEXML_Env. + * + * @sa ACEXML_Env + */ +class ACEXML_Export ACEXML_Exception +{ +public: + + /// Destructor. + virtual ~ACEXML_Exception (void); + + /// Throw the exception. + virtual void _raise (void) = 0; + + /// Static narrow operation. + static ACEXML_Exception* _downcast (ACEXML_Exception* ex); + + /// Return the exception type. (for safe downcast.) + virtual const ACEXML_Char *id (void) const ; + + /// Dynamically create a copy of this exception. + virtual ACEXML_Exception *duplicate (void) const = 0; + + /// Check whether this is an exception of type specified by . + virtual int is_a (const ACEXML_Char *name); + + /// Print out exception using ACE_DEBUG. + virtual void print (void) const = 0; + +protected: + /// Default contructor. + ACEXML_Exception (void); + + /// All exceptions have names. This name is used to identify the + /// type of an exception. + static const ACEXML_Char *exception_name_; + + /// A null string that we return when there is no exception. + static const ACEXML_Char *null_; +}; + +#if defined (__ACEXML_INLINE__) +# include "ACEXML/common/Exception.inl" +#endif /* __ACEXML_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_EXCEPTION_H_ */ diff --git a/ACE/ACEXML/common/Exception.inl b/ACE/ACEXML/common/Exception.inl new file mode 100644 index 00000000000..e2d97fa37ea --- /dev/null +++ b/ACE/ACEXML/common/Exception.inl @@ -0,0 +1,13 @@ +// -*- C++ -*- $Id$ + +ACEXML_INLINE const ACEXML_Char * +ACEXML_Exception::id (void) const +{ + return ACEXML_Exception::exception_name_; +} + +ACEXML_INLINE ACEXML_Exception* +ACEXML_Exception::_downcast (ACEXML_Exception* x) +{ + return x; +} diff --git a/ACE/ACEXML/common/FileCharStream.cpp b/ACE/ACEXML/common/FileCharStream.cpp new file mode 100644 index 00000000000..4420e00b99d --- /dev/null +++ b/ACE/ACEXML/common/FileCharStream.cpp @@ -0,0 +1,256 @@ +// $Id$ + +#include "ACEXML/common/FileCharStream.h" +#include "ace/ACE.h" +#include "ace/Log_Msg.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_sys_stat.h" +#include "ace/Truncate.h" + +#if defined (ACE_USES_WCHAR) +# include "ace/OS_NS_wchar.h" +#endif /* ACE_USES_WCHAR */ + +ACEXML_FileCharStream::ACEXML_FileCharStream (void) + : filename_ (0), encoding_ (0), size_ (0), infile_ (0), peek_ (0) +{ +} + +ACEXML_FileCharStream::~ACEXML_FileCharStream (void) +{ + this->close(); +} + +int +ACEXML_FileCharStream::open (const ACEXML_Char *name) +{ + delete[] this->filename_; + this->filename_ = 0; + + delete[] this->encoding_; + this->encoding_ = 0; + + this->infile_ = ACE_OS::fopen (name, ACE_TEXT ("r")); + if (this->infile_ == 0) + return -1; + + ACE_stat statbuf; + if (ACE_OS::stat (name, &statbuf) < 0) + return -1; + + this->size_ = ACE_Utils::truncate_cast (statbuf.st_size); + this->filename_ = ACE::strnew (name); + return this->determine_encoding(); +} + +int +ACEXML_FileCharStream::determine_encoding (void) +{ + if (this->infile_ == 0) + return -1; + + char input[4]; + int retval = 0; + int i = 0; + for (; i < 4 && retval != -1; ++i) + retval = this->getchar_i(input[i]); + if (i < 4) + return -1; + + // Rewind the stream + ACE_OS::rewind (this->infile_); + + const ACEXML_Char* temp = ACEXML_Encoding::get_encoding (input); + if (!temp) + return -1; + else + { + if (this->encoding_) + delete [] this->encoding_; + this->encoding_ = ACE::strnew (temp); +// ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("File's encoding is %s\n"), +// this->encoding_)); + } + // Move over the byte-order-mark if present. + char ch; + for (int j = 0; j < 3; ++j) + { + if (this->getchar_i (ch) < 0) + return -1; + if (ch == '\xFF' || ch == '\xFE' || ch == '\xEF' || ch == '\xBB' || + ch == '\xBF') + continue; + else + { + ACE_OS::ungetc (ch, this->infile_); + break; + } + } + return 0; +} + +void +ACEXML_FileCharStream::rewind() +{ + if (this->infile_ == 0) + return; + ACE_OS::rewind (this->infile_); + this->determine_encoding(); +} + +int +ACEXML_FileCharStream::available (void) +{ + if (this->infile_ == 0) + return -1; + + long curr; + if ((curr = ACE_OS::ftell (this->infile_)) < 0) + return -1; + return static_cast (this->size_ - curr); +} + +int +ACEXML_FileCharStream::close (void) +{ + if (this->infile_ != 0) + { + ACE_OS::fclose (this->infile_); + this->infile_ = 0; + } + delete[] this->filename_; + this->filename_ = 0; + delete[] this->encoding_; + this->encoding_ = 0; + this->size_ = 0; + this->peek_ = 0; + return 0; +} + + +int +ACEXML_FileCharStream::getchar_i (char& ch) +{ + ch = static_cast (ACE_OS::fgetc (this->infile_)); + return (feof(this->infile_) ? -1 : 0); +} + +int +ACEXML_FileCharStream::read (ACEXML_Char *str, + size_t len) +{ + if (this->infile_ == 0) + return -1; + + return static_cast (ACE_OS::fread (str, sizeof (ACEXML_Char), len, this->infile_)); +} + +int +ACEXML_FileCharStream::get (ACEXML_Char& ch) +{ + if (this->infile_ == 0) + return -1; +#if defined (ACE_USES_WCHAR) + return this->get_i (ch); +#else + ch = (ACEXML_Char) ACE_OS::fgetc (this->infile_); + return (feof(this->infile_) ? -1 : 0); +#endif /* ACE_USES_WCHAR */ +} + +int +ACEXML_FileCharStream::peek (void) +{ + if (this->infile_ == 0) + return -1; +#if defined (ACE_USES_WCHAR) + return this->peek_i(); +#else + + ACEXML_Char ch = static_cast (ACE_OS::fgetc (this->infile_)); + ACE_OS::ungetc (ch, this->infile_); + return ch; +#endif /* ACE_USES_WCHAR */ +} + +#if defined (ACE_USES_WCHAR) +int +ACEXML_FileCharStream::get_i (ACEXML_Char& ch) +{ + if (ACE_OS::strcmp (this->encoding_, ACE_TEXT ("UTF-8")) == 0) + { + ch = (ACEXML_Char) ACE_OS::fgetc (this->infile_); + return (feof(this->infile_) ? -1 : 0); + } + // If we have a value in peek_, return it. + if (this->peek_ != 0) + { + ch = this->peek_; + this->peek_ = 0; + return 0; + } + + int BE = (ACE_OS::strcmp (this->encoding_, + ACE_TEXT ("UTF-16BE")) == 0) ? 1 : 0; + ACEXML_Char input[2]; + int i = 0; + for (; i < 2 && !feof (this->infile_); ++i) + { + input[i] = ACE_OS::fgetwc (this->infile_); + } + if (i < 2) + { + ch = 0; + return -1; + } + ch = BE ? input[0] << 8 | input[1] : input[1] << 8 | input[0]; + return 0; +} + +int +ACEXML_FileCharStream::peek_i (void) +{ + // If we are reading a UTF-8 encoded file, just use the plain unget. + if (ACE_OS::strcmp (this->encoding_, ACE_TEXT ("UTF-8")) == 0) + { + ACEXML_Char ch = (ACEXML_Char) ACE_OS::fgetc (this->infile_); + ACE_OS::ungetc (ch, this->infile_); + return ch; + } + + // If somebody had already called peek() and not consumed it, return the + // value held in this->peek_. + if (this->peek_ != 0) + return this->peek_; + + // Peek into the stream. This reads two characters off the stream, keeps + // it in peek_. + int BE = (ACE_OS::strcmp (this->encoding_, + ACE_TEXT ("UTF-16BE")) == 0) ? 1 : 0; + ACEXML_Char input[2]; + int i = 0; + for (; i < 2 && !feof (this->infile_); ++i) + { + input[i] = ACE_OS::fgetwc (this->infile_); + } + if (i < 2) + { + this->peek_ = 0; + return -1; + } + this->peek_ = BE ? input[0] << 8 | input[1] : input[1] << 8 | input[0]; + return this->peek_; +} +#endif /* ACE_USES_WCHAR */ + +const ACEXML_Char* +ACEXML_FileCharStream::getEncoding (void) +{ + return this->encoding_; +} + +const ACEXML_Char* +ACEXML_FileCharStream::getSystemId (void) +{ + return this->filename_; +} diff --git a/ACE/ACEXML/common/FileCharStream.h b/ACE/ACEXML/common/FileCharStream.h new file mode 100644 index 00000000000..e4a3c06c6fb --- /dev/null +++ b/ACE/ACEXML/common/FileCharStream.h @@ -0,0 +1,130 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file FileCharStream.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +#ifndef _ACEXML_FILECHARSTREAM_H_ +#define _ACEXML_FILECHARSTREAM_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/CharStream.h" +#include "ACEXML/common/Encoding.h" + +/** + * @class ACEXML_FileCharStream FileCharStream.h "ACEXML/common/FileCharStream.h" + * + * An implementation of ACEXML_CharStream for reading input from a file. + */ +class ACEXML_Export ACEXML_FileCharStream : public ACEXML_CharStream +{ +public: + /// Default constructor. + ACEXML_FileCharStream (void); + + /// Destructor + virtual ~ACEXML_FileCharStream (void); + + /// Open a file. + int open (const ACEXML_Char *name); + + /** + * Returns the available ACEXML_Char in the buffer. -1 + * if the object is not initialized properly. + */ + virtual int available (void); + + /** + * Close this stream and release all resources used by it. + */ + virtual int close (void); + + /** + * Read the next ACEXML_Char. Return -1 if we are not able to + * return an ACEXML_Char, 0 if succees. + */ + virtual int get (ACEXML_Char& ch); + + /** + * Read the next batch of ACEXML_Char strings + */ + virtual int read (ACEXML_Char *str, + size_t len); + + /** + * Determine the encoding of the file. + */ + virtual int determine_encoding (void); + + + /** + * Peek the next ACEXML_Char in the CharStream. Return the + * character if success, -1 if EOF is reached. + */ + virtual int peek (void); + + /** + * Resets the file pointer to the beginning of the stream. + */ + virtual void rewind (void); + + /* + * Get the character encoding for the file. + */ + virtual const ACEXML_Char *getEncoding (void); + + /* + * Get the systemId for the underlying CharStream + */ + virtual const ACEXML_Char* getSystemId (void); + +private: + + /** Read the next character as a normal character. Return -1 if EOF is + * reached, else return 0. + */ + int getchar_i (char& ch); + +#if defined (ACE_USES_WCHAR) + /** + * Read the next character from the stream taking into account the + * encoding of the file. + */ + int get_i (ACEXML_Char& ch); + + /** + * Read the next character from the stream taking into account the + * encoding of the file. Subsequent call to get() returns this + * character. + */ + int peek_i (void); + +#endif /* ACE_USES_WCHAR */ + + ACEXML_Char* filename_; + ACEXML_Char* encoding_; + ACE_OFF_T size_; + FILE* infile_; + // This is needed to ensure that we can implement a peek operation on a + // UTF-16 encoded file. It is a bit hackish, but there is no other way of + // implementing a peek() as the standard I/O FILE* guarantees only one + // pushback. + ACEXML_Char peek_; +}; + + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_FILECHARSTREAM_H_ */ diff --git a/ACE/ACEXML/common/HttpCharStream.cpp b/ACE/ACEXML/common/HttpCharStream.cpp new file mode 100644 index 00000000000..3bdb4e87db6 --- /dev/null +++ b/ACE/ACEXML/common/HttpCharStream.cpp @@ -0,0 +1,476 @@ +// $Id$ + +#include "ace/ACE.h" +#include "ace/ace_wchar.h" +#include "ace/Auto_Ptr.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_string.h" +#include "ACEXML/common/HttpCharStream.h" +#include "ACEXML/common/Encoding.h" + +ACE_RCSID (common, HttpCharStream, "$Id$") + +/* Header FSM states. */ +static const int HDST_LINE1_PROTOCOL = 0; +static const int HDST_LINE1_WHITESPACE = 1; +static const int HDST_LINE1_STATUS = 2; +static const int HDST_BOL = 10; +static const int HDST_TEXT = 11; +static const int HDST_LF = 12; +static const int HDST_CR = 13; +static const int HDST_CRLF = 14; +static const int HDST_CRLFCR = 15; + +ACEXML_HttpCharStream::ACEXML_HttpCharStream (void) + : url_(0), + url_addr_(0), + stream_(0), + connector_(0), + size_(0), + data_offset_ (0), + encoding_ (0) +{ + +} + +ACEXML_HttpCharStream::~ACEXML_HttpCharStream (void) +{ + this->close (); +} + +int +ACEXML_HttpCharStream::open (const ACEXML_Char *url) +{ + this->url_ = ACE::strnew (url); + + ACE_NEW_RETURN (this->url_addr_, ACEXML_URL_Addr, -1); + ACE_NEW_RETURN (this->stream_, ACEXML_Mem_Map_Stream, -1); + + if (this->url_addr_->string_to_addr (this->url_) == -1) { + this->close(); + ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "cannot convert URL"), -1); + } + + ACE_NEW_RETURN (this->connector_, + Connector (0, ACE_NONBLOCK), + -1); + + if (this->stream_->open (this->connector_, *this->url_addr_) == -1) { + this->close(); + ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "cannot open backing store"), -1); + } + + int result = this->send_request(); + if (result == -1) { + this->close(); + ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "send_request"), -1); + } + + size_t len = 0; + result = this->get_url(len); + if (result == -1) { + this->close(); + ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "get_url"), -1); + } + if (result != 200) { + this->close(); + ACE_ERROR_RETURN ((LM_ERROR, "Server returned status %d : %s\n", + result, + "Refer HTTP/1.0 error code for details"), -1); + } + + this->size_ = static_cast (len); + return this->determine_encoding(); +} + +// The FSM was taken from the implementation of http_get and that falls +// under the following license: +// +// Copyrigh (c) 2000 by Jef Poskanzer . All rights reserved. + +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. + +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +// SUCH DAMAGE. + + +int +ACEXML_HttpCharStream::get_url (size_t& len) +{ + if (this->stream_ == 0) + return -1; + + int header_state = HDST_LINE1_PROTOCOL; + int status = 0; + size_t b = 0; + char const * buf = 0; + size_t buflen = BUFSIZ; + for (;;) + { + buf = this->stream_->recv (buflen); + + if (buf == 0) + if (buflen == 0) + break; + else + continue; + + for (b = 0; b < buflen; ++b) + { + switch ( header_state ) + { + case HDST_LINE1_PROTOCOL: + switch ( buf[b] ) + { + case ' ': case '\t': + header_state = HDST_LINE1_WHITESPACE; break; + case '\n': header_state = HDST_LF ; break; + case '\r': header_state = HDST_CR; break; + } + break; + case HDST_LINE1_WHITESPACE: + switch ( buf[b] ) + { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + status = buf[b] - '0'; + header_state = HDST_LINE1_STATUS; + break; + case '\n': header_state = HDST_LF ; break; + case '\r': header_state = HDST_CR; break; + default: header_state = HDST_TEXT; break; + } + break; + case HDST_LINE1_STATUS: + switch ( buf[b] ) + { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + status = status * 10 + buf[b] - '0'; + break; + case '\n': header_state = HDST_LF ; break; + case '\r': header_state = HDST_CR; break; + default: header_state = HDST_TEXT; break; + } + break; + case HDST_BOL: + switch ( buf[b] ) + { + case '\n': header_state = HDST_LF; break; + case '\r': header_state = HDST_CR; break; + default: header_state = HDST_TEXT; break; + } + break; + case HDST_TEXT: + switch ( buf[b] ) + { + case '\n': header_state = HDST_LF; break; + case '\r': header_state = HDST_CR; break; + } + break; + + case HDST_LF: + switch ( buf[b] ) + { + case '\n': goto end_of_headers; + case '\r': header_state = HDST_CR; break; + default: header_state = HDST_TEXT; break; + } + break; + + case HDST_CR: + switch ( buf[b] ) + { + case '\n': header_state = HDST_CRLF; break; + case '\r': goto end_of_headers; + default: header_state = HDST_TEXT; break; + } + break; + + case HDST_CRLF: + switch ( buf[b] ) + { + case '\n': goto end_of_headers; + case '\r': header_state = HDST_CRLFCR; break; + default: header_state = HDST_TEXT; break; + } + break; + + case HDST_CRLFCR: + switch ( buf[b] ) + { + case '\n': case '\r': goto end_of_headers; + default: header_state = HDST_TEXT; break; + } + break; + } + } + } + end_of_headers: + if (b == 0) + return -1; + ++b; + // Store the address of the beginning of data. We will use it to seek to + // beginning of the data in the URL. + char const * const data_beg = buf + b; + buflen = BUFSIZ; + + // Get all of the data. Since this is backed by file store, we won't lose + // any of the data. + while ((buf = this->stream_->recv (buflen)) != 0) + ; + + // Length of data in the URL. + len = this->stream_->recv() - data_beg; + + // Move the pointer to the beginning of the file store. + this->stream_->rewind(); + + this->data_offset_ = data_beg - this->stream_->recv(); + // Forward to the beginning of data. + if (this->stream_->seek (this->data_offset_, SEEK_SET) == -1) + ACE_ERROR_RETURN ((LM_ERROR, "%s: %m", + "Error in seeking to beginning of data"), -1); + + return status; +} + + +int +ACEXML_HttpCharStream::send_request (void) +{ + char* path = ACE::strnew (ACE_TEXT_ALWAYS_CHAR (this->url_addr_->get_path_name())); + ACE_Auto_Basic_Array_Ptr path_ptr (path); + size_t commandsize = ACE_OS::strlen (path) + + ACE_OS::strlen (this->url_addr_->get_host_name ()) + + 20 // Extra + + 1 // NUL byte + + 16 ; // Protocol filler... + + char* command; + ACE_NEW_RETURN (command, char[commandsize], -1); + + // Ensure that the memory is deallocated. + ACE_Auto_Basic_Array_Ptr cmd_ptr (command); + + int bytes = ACE_OS::sprintf (command, "GET %s HTTP/1.0\r\n", path); + bytes += ACE_OS::sprintf (&command[bytes], "Host: %s\r\n", + this->url_addr_->get_host_name ()); + bytes += ACE_OS::sprintf (&command[bytes], "\r\n"); + + ACE_Time_Value tv (ACE_DEFAULT_TIMEOUT); + + // Send the command to the connected server. + int retval = static_cast (this->stream_->send_n (command, bytes, &tv)); + if (retval <= 0) + return -1; + return retval; +} + + +int +ACEXML_HttpCharStream::available (void) +{ + if (this->stream_ == 0) + return -1; + return static_cast (this->stream_->available()); +} + +int +ACEXML_HttpCharStream::close (void) +{ + delete[] this->url_; + this->url_ = 0; + + delete this->url_addr_; + this->url_addr_ = 0; + + delete this->stream_; + this->stream_ = 0; + + delete this->connector_; + this->connector_ = 0; + + this->size_ = 0; + this->data_offset_ = 0; + + delete[] this->encoding_; + this->encoding_ = 0; + + return 0; +} + +int +ACEXML_HttpCharStream::determine_encoding (void) +{ + if (this->stream_ == 0) + return -1; + + char input[] = {0, 0, 0, 0}; + size_t const len = sizeof (input) / sizeof (input[0]); + + size_t i = 0; + for (; i < len && input[i] != static_cast (EOF); ++i) + input[i] = this->stream_->peek_char (i); + + if (i < len) + return -1; + + ACEXML_Char const * const temp = ACEXML_Encoding::get_encoding (input); + + if (!temp) + return -1; + else + { + if (this->encoding_) + delete [] this->encoding_; + + this->encoding_ = ACE::strnew (temp); + // ACE_DEBUG ((LM_DEBUG, "URI's encoding is %s\n", this->encoding_)); + } + + // Move over the byte-order-mark if present. + for (size_t j = 0; j < len; ++j) + { + if (input[j] == '\xFF' || input[j] == '\xFE' || input[j] == '\xEF' || + input[j] == '\xBB' || input[j] == '\xBF') + { + this->stream_->get_char(); + continue; + } + break; + } + + return 0; +} + +void +ACEXML_HttpCharStream::rewind (void) +{ + if (this->stream_ == 0) + return; + this->stream_->rewind(); + + // Forward to the beginning of data. + if (this->stream_->seek (this->data_offset_, SEEK_SET) == -1) + ACE_ERROR ((LM_ERROR, "%s: %m", "Error in seeking to beginning of data")); + this->determine_encoding(); +} + +const ACEXML_Char* +ACEXML_HttpCharStream::getEncoding (void) +{ + return this->encoding_; +} + +const ACEXML_Char* +ACEXML_HttpCharStream::getSystemId (void) +{ + return this->url_; +} + + +int +ACEXML_HttpCharStream::read (ACEXML_Char *str, + size_t len) +{ + if (this->stream_ == 0) + return -1; + len = len * sizeof (ACEXML_Char); + char* temp = const_cast (this->stream_->recv (len)); + str = ACE_TEXT_CHAR_TO_TCHAR (temp); + if (str == 0) + return -1; + return static_cast (len); +} + + +int +ACEXML_HttpCharStream::get (ACEXML_Char& ch) +{ + if (this->stream_ == 0) + return -1; +#if defined (ACE_USES_WCHAR) + return this->get_i (ch); +#else + ch = (ACEXML_Char) this->stream_->get_char(); + return (ch == (ACEXML_Char)EOF ? -1 :0); +#endif /* ACE_USES_WCHAR */ +} + +int +ACEXML_HttpCharStream::peek (void) +{ + if (this->stream_ == 0) + return -1; + +#if defined (ACE_USES_WCHAR) + return this->peek_i(); +#else + return this->stream_->peek_char (0); +#endif /* ACE_USES_WCHAR */ +} + + +#if defined (ACE_USES_WCHAR) +int +ACEXML_HttpCharStream::get_i (ACEXML_Char& ch) +{ + if (ACE_OS::strcmp (this->encoding_, ACE_TEXT ("UTF-8")) == 0) + { + ch = (ACEXML_Char) this->stream_->get_char(); + return (ch == (ACEXML_Char)EOF ? -1 : 0); + } + int BE = (ACE_OS::strcmp (this->encoding_, + ACE_TEXT ("UTF-16BE")) == 0) ? 1 : 0; + ACEXML_Char input[2] = {0}; + int i = 0; + for (; i < 2 && (input[i] = this->stream_->get_char()) > 0; ++i) + ; + if (i < 2) + { + ch = 0; + return input[i]; + } + ch = BE ? input[0] << 8 | input[1] : input[1] << 8 | input[0]; + return 0; +} + +int +ACEXML_HttpCharStream::peek_i (void) +{ + // If we are reading a UTF-8 encoded file, just use the plain unget. + if (ACE_OS::strcmp (this->encoding_, ACE_TEXT ("UTF-8")) == 0) + { + ACEXML_Char ch = (ACEXML_Char) this->stream_->peek_char (0); + return ch; + } + + int BE = (ACE_OS::strcmp (this->encoding_, + ACE_TEXT ("UTF-16BE")) == 0) ? 1 : 0; + // Peek into the stream. + ACEXML_Char input[2]; + int i = 0; + for (; i < 2 && (input[i] = this->stream_->peek_char (i)) > 0; ++i) + ; + if (i < 2) + return -1; + return (BE ? input[0] << 8 | input[1] : input[1] << 8 | input[0]); +} +#endif /* ACE_USES_WCHAR */ diff --git a/ACE/ACEXML/common/HttpCharStream.h b/ACE/ACEXML/common/HttpCharStream.h new file mode 100644 index 00000000000..593205bec7c --- /dev/null +++ b/ACE/ACEXML/common/HttpCharStream.h @@ -0,0 +1,140 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file HttpCharStream.h + * + * $Id$ + * + * @author Krishnakumar B + */ +//============================================================================= + +#ifndef _ACEXML_HTTPCHARSTREAM_H_ +#define _ACEXML_HTTPCHARSTREAM_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/CharStream.h" +#include "ACEXML/common/URL_Addr.h" +#include "ACEXML/common/Mem_Map_Stream.h" + +/** + * @class ACEXML_HttpCharStream HttpCharStream.h "ACEXML/common/HttpCharStream.h" + * + * An implementation of ACEXML_CharStream for reading input from a URL. + */ +class ACEXML_Export ACEXML_HttpCharStream : public ACEXML_CharStream +{ +public: + /// Default constructor. + ACEXML_HttpCharStream (void); + + /// Destructor + virtual ~ACEXML_HttpCharStream (void); + + /// Open an URL. + int open (const ACEXML_Char *url); + + /** + * Returns the available ACEXML_Char in the buffer. -1 + * if the object is not initialized properly. + */ + virtual int available (void); + + /** + * Close this stream and release all resources used by it. + */ + virtual int close (void); + + /** + * Read the next ACEXML_Char. Return -1 if we are not able to + * return an ACEXML_Char, 0 if EOS is reached, or 1 if succeed. + */ + virtual int get (ACEXML_Char& ch); + + /** + * Read the next batch of ACEXML_Char strings + */ + virtual int read (ACEXML_Char *str, size_t len); + + /** + * Peek the next ACEXML_Char in the CharStream. Return the + * character if succeess, -1 if EOS is reached. + */ + virtual int peek (void); + + /** + * Resets the file pointer to the beginning of the stream. + */ + virtual void rewind (void); + + /** + * Determine the encoding of the file. + */ + virtual int determine_encoding (void); + + /** + * Get the encoding of the file + */ + virtual const ACEXML_Char* getEncoding (void); + + /* + * Get the systemId for the underlying CharStream + */ + virtual const ACEXML_Char* getSystemId (void); + + +private: + +#if defined (ACE_USES_WCHAR) + /** + * Read the next character from the stream taking into account the + * encoding of the file. + */ + int get_i (ACEXML_Char& ch); + + /** + * Read the next character from the stream taking into account the + * encoding of the file. Subsequent call to get() returns this + * character. + */ + int peek_i (void); + +#endif /* ACE_USES_WCHAR */ + + /** + * Send a HTTP/1.1 request to fetch the contents of the URL. + */ + int send_request (void); + + /** + * Fetch the URL and save it in backing store. + */ + int get_url (size_t& len); + + ACEXML_Char *url_; + + ACEXML_URL_Addr* url_addr_; + + ACEXML_Mem_Map_Stream* stream_; + + Connector* connector_; + + ACE_OFF_T size_; + + ACE_OFF_T data_offset_; + + ACEXML_Char* encoding_; + +}; + + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_HTTPCHARSTREAM_H_ */ diff --git a/ACE/ACEXML/common/InputSource.cpp b/ACE/ACEXML/common/InputSource.cpp new file mode 100644 index 00000000000..a871c9296e4 --- /dev/null +++ b/ACE/ACEXML/common/InputSource.cpp @@ -0,0 +1,105 @@ +// -*- C++ -*- $Id$ + +#include "ACEXML/common/InputSource.h" +#include "ACEXML/common/StreamFactory.h" +#include "ace/ACE.h" + +ACEXML_InputSource::ACEXML_InputSource (void) + : charStream_ (0), + encoding_ (0), + publicId_ (0), + systemId_ (0) +{ +} + +ACEXML_InputSource::ACEXML_InputSource (ACEXML_CharStream *stm) + : charStream_ (stm), + encoding_ (ACE::strnew (stm->getEncoding())), + publicId_ (0), + systemId_ (stm->getSystemId() ? ACE::strnew (stm->getSystemId()): 0) +{ +} + + /* + * Create a new input source with a character stream. + * + */ + +ACEXML_InputSource::ACEXML_InputSource (const ACEXML_Char *systemId) + : charStream_ (0), + encoding_ (0), + publicId_ (0), + systemId_ (ACE::strnew (systemId)) +{ + ACEXML_StreamFactory factory; + ACEXML_CharStream* stm = factory.create_stream (this->systemId_); + if (stm) + { + this->setCharStream (stm); + this->setEncoding (this->charStream_->getEncoding()); + } +} + +ACEXML_InputSource::~ACEXML_InputSource (void) +{ + delete[] this->publicId_; + this->publicId_ = 0; + delete[] this->systemId_; + this->systemId_ = 0; + delete this->charStream_; + this->charStream_ = 0; + delete[] this->encoding_; + this->encoding_ = 0; +} + +ACEXML_CharStream * +ACEXML_InputSource::getCharStream (void) const +{ + return this->charStream_; +} + +const ACEXML_Char * +ACEXML_InputSource::getEncoding (void) const +{ + return this->encoding_; +} + +const ACEXML_Char * +ACEXML_InputSource::getPublicId (void) const +{ + return this->publicId_; +} + +const ACEXML_Char * +ACEXML_InputSource::getSystemId (void) const +{ + return this->systemId_; +} + +void +ACEXML_InputSource::setCharStream (ACEXML_CharStream *stm) +{ + delete this->charStream_; + this->charStream_ = stm; +} + +void +ACEXML_InputSource::setEncoding (const ACEXML_Char *encoding) +{ + delete[] this->encoding_; + this->encoding_ = ACE::strnew (encoding); +} + +void +ACEXML_InputSource::setPublicId (const ACEXML_Char *publicId) +{ + delete[] this->publicId_; + this->publicId_ = ACE::strnew (publicId); +} + +void +ACEXML_InputSource::setSystemId (const ACEXML_Char *systemId) +{ + delete[] this->systemId_; + this->systemId_ = ACE::strnew (systemId); +} diff --git a/ACE/ACEXML/common/InputSource.h b/ACE/ACEXML/common/InputSource.h new file mode 100644 index 00000000000..ae2b70b130e --- /dev/null +++ b/ACE/ACEXML/common/InputSource.h @@ -0,0 +1,131 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file InputSource.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +#ifndef _ACEXML_INPUTSOURCE_H_ +#define _ACEXML_INPUTSOURCE_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/CharStream.h" + +/** + * @class ACEXML_InputSource InputSource.h "ACEXML/common/InputSource.h" + * + * @brief ACEXML_InputSource encapsulates the actual input stream with some + * added information. + * + * This class allows a SAX application to encapsulate information + * about an input source in a single object, which may include a + * public identifier, a system identifier, a byte stream (possibly + * with a specified encoding), and/or a character stream. + * + * There are two places that the application will deliver this input + * source to the parser: as the argument to the Parser.parse method, + * or as the return value of the EntityResolver.resolveEntity method. + * + * The SAX parser will use the InputSource object to determine how to + * read XML input. If there is a character stream available, the + * parser will read that stream directly; if not, the parser will use + * a byte stream, if available; if neither a character stream nor a + * byte stream is available, the parser will attempt to open a URI + * connection to the resource identified by the system identifier. + * + * An InputSource object belongs to the application: the SAX parser + * shall never modify it in any way (it may modify a copy if + * necessary). + * + * @sa ACEXML_CharStream + */ +class ACEXML_Export ACEXML_InputSource +{ +public: + /** + * Default constructor. + */ + ACEXML_InputSource (void); + + + /** + * Create a new input source with a ACEXML_Char stream. + * Notice that ACEXML_InputSource assumes the ownership + * of + */ + explicit ACEXML_InputSource (ACEXML_CharStream *stream); + + /** + * Create a new input source with a system identifier. + */ + ACEXML_InputSource (const ACEXML_Char *systemId); + + /** + * Default destructor. + */ + virtual ~ACEXML_InputSource (void); + + /** + * Get the ACEXML_Char stream for this input source. + */ + virtual ACEXML_CharStream *getCharStream (void) const; + + /** + * Get the character encoding for a byte stream or URI. + */ + virtual const ACEXML_Char *getEncoding (void) const; + + /** + * Get the public identifier for this input source. + */ + virtual const ACEXML_Char *getPublicId (void) const; + + /** + * Get the system identifier for this input source. + */ + virtual const ACEXML_Char *getSystemId (void) const; + + /** + * Set the ACEXML_Char stream for this input source. + * Notice that ACEXML_InputSource assumes the ownership + * of + */ + virtual void setCharStream (ACEXML_CharStream *charStream); + + /** + * Set the character encoding, if known. + */ + virtual void setEncoding (const ACEXML_Char *encoding); + + /** + * Set the public identifier for this input source. + */ + virtual void setPublicId (const ACEXML_Char *publicId); + + /** + * Set the public identifier for this input source. + */ + virtual void setSystemId (const ACEXML_Char *systemId); + +private: + ACEXML_CharStream *charStream_; + ACEXML_Char *encoding_; + ACEXML_Char *publicId_; + ACEXML_Char *systemId_; +}; + + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_INPUTSOURCE_H_ */ diff --git a/ACE/ACEXML/common/Locator.cpp b/ACE/ACEXML/common/Locator.cpp new file mode 100644 index 00000000000..5de6d3a1516 --- /dev/null +++ b/ACE/ACEXML/common/Locator.cpp @@ -0,0 +1,11 @@ +#include "Locator.h" + + +ACE_RCSID (common, + Locator, + "$Id$") + + +ACEXML_Locator::~ACEXML_Locator (void) +{ +} diff --git a/ACE/ACEXML/common/Locator.h b/ACE/ACEXML/common/Locator.h new file mode 100644 index 00000000000..c6504b706a4 --- /dev/null +++ b/ACE/ACEXML/common/Locator.h @@ -0,0 +1,74 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Locator.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +#ifndef _ACEXML_LOCATOR_H_ +#define _ACEXML_LOCATOR_H_ +#include /**/ "ace/pre.h" + +#include "ACEXML/common/ACEXML_Export.h" +#include "ACEXML/common/XML_Types.h" + +/** + * @class ACEXML_Locator Locator.h "ACEXML/common/Locator.h" + * + * @brief ACEXML_Locator defines operations that an XML locator should support. + * + * If a SAX parser provides location information to the SAX + * application, it does so by implementing this interface and then + * passing an instance to the application using the content handler's + * setDocumentLocator method. The application can use the object to + * obtain the location of any other content handler event in the XML + * source document. + * + * Note that the results returned by the object will be valid only + * during the scope of each content handler method: the application + * will receive unpredictable results if it attempts to use the + * locator at any other time. + * + * SAX parsers are not required to supply a locator, but they are very + * strongly encouraged to do so. If the parser supplies a locator, it + * must do so before reporting any other document events. If no + * locator has been set by the time the application receives the + * startDocument event, the application should assume that a locator + * is not available. + */ +class ACEXML_Export ACEXML_Locator +{ +public: + + virtual ~ACEXML_Locator (void); + + /* + * Return the column number where the current document event ends. + */ + virtual int getColumnNumber (void) const = 0; + + /* + * Return the line number where the current document event ends. + */ + virtual int getLineNumber (void) const = 0; + + /* + * Return the public identifier for the current document event. + */ + virtual const ACEXML_Char *getPublicId (void) const = 0; + + /* + * Return the system identifier for the current document event. + */ + virtual const ACEXML_Char *getSystemId (void) const = 0; +}; + + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_LOCATOR_H_ */ diff --git a/ACE/ACEXML/common/LocatorImpl.cpp b/ACE/ACEXML/common/LocatorImpl.cpp new file mode 100644 index 00000000000..6139985b2fd --- /dev/null +++ b/ACE/ACEXML/common/LocatorImpl.cpp @@ -0,0 +1,49 @@ +// -*- C++ -*- $Id$ + +#include "ACEXML/common/LocatorImpl.h" + +#if !defined (__ACEXML_INLINE__) +# include "ACEXML/common/LocatorImpl.inl" +#endif /* __ACEXML_INLINE__ */ + +ACEXML_LocatorImpl::ACEXML_LocatorImpl (void) + : publicId_ (0), + systemId_ (0), + lineNumber_ (1), + columnNumber_ (0) +{ +} + +ACEXML_LocatorImpl::ACEXML_LocatorImpl (const ACEXML_Char* systemId, + const ACEXML_Char* publicId) + : publicId_ (publicId ? ACE::strnew (publicId) : 0), + systemId_ (systemId ? ACE::strnew (systemId) : 0), + lineNumber_ (1), + columnNumber_ (0) +{ +} + + +ACEXML_LocatorImpl::ACEXML_LocatorImpl (const ACEXML_Locator& locator) + : publicId_ (locator.getPublicId() ? ACE::strnew(locator.getPublicId ()): 0), + systemId_ (locator.getSystemId() ? ACE::strnew(locator.getSystemId ()): 0), + lineNumber_ (locator.getLineNumber ()), + columnNumber_ (locator.getColumnNumber ()) +{ +} + +ACEXML_LocatorImpl::~ACEXML_LocatorImpl (void) +{ + this->reset(); +} + +void +ACEXML_LocatorImpl::reset (void) +{ + delete[] this->publicId_; + this->publicId_ = 0; + delete[] this->systemId_; + this->systemId_ = 0; + this->columnNumber_ = 0; + this->lineNumber_ = 1; +} diff --git a/ACE/ACEXML/common/LocatorImpl.h b/ACE/ACEXML/common/LocatorImpl.h new file mode 100644 index 00000000000..46a7092c84f --- /dev/null +++ b/ACE/ACEXML/common/LocatorImpl.h @@ -0,0 +1,159 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file LocatorImpl.h + * + * $Id$ + * + * @author Nanbor Wang + * @author Krishnakumar Balasubramanian + */ +//============================================================================= + +#ifndef ACEXML_LOCALTORIMPL_H +#define ACEXML_LOCALTORIMPL_H + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/Locator.h" + +/** + * @class ACEXML_LocatorImpl LocatorImpl.h "ACEXML/common/LocatorImpl.h" + * + * @brief ACEXML_LocatorImpl is an implementation of ACEXML_Locator. + * + * This class is available mainly for application writers, who can + * use it to make a persistent snapshot of a locator at any point + * during a document parse: + * + * @code + * ACEXML_Locator locator; + * ACEXML_Locator startloc; + * + * public void setLocator (ACEXML_Locator locator) + * { + * // note the locator + * this.locator = locator; + * } + * + * public void startDocument () + * { + * // save the location of the start of the document + * // for future use. + * ACEXML_Locator startloc = new ACEXML_LocatorImpl(locator); + * } + * @endcode + * + * Normally, parser writers will not use this class, since it is more + * efficient to provide location information only when requested, + * rather than constantly updating a Locator object. + * + * @todo ACEXML parser doesn't support the use of Locator yet. + * + * @sa ACEXML_Locator + */ +class ACEXML_Export ACEXML_LocatorImpl : public ACEXML_Locator +{ +public: + /* + * Default constructor. + */ + ACEXML_LocatorImpl (void); + + /** + * Construct a locator with systemId and publicId + * + */ + ACEXML_LocatorImpl (const ACEXML_Char* systemId, + const ACEXML_Char* publicId); + /** + * Copy constructor. Create a persistent copy of the current state + * of a locator. When the original locator changes, this copy will + * still keep the original values (and it can be used outside the + * scope of DocumentHandler methods). + */ + ACEXML_LocatorImpl (const ACEXML_Locator& locator); + + /* + * Destructor. + */ + virtual ~ACEXML_LocatorImpl (void); + + /* + * Return the column number where the current document event ends. + */ + virtual int getColumnNumber (void) const; + + /* + * Return the line number where the current document event ends. + */ + virtual int getLineNumber (void) const; + + /* + * Return the public identifier for the current document event. + */ + virtual const ACEXML_Char *getPublicId (void) const; + + /* + * Return the system identifier for the current document event. + */ + virtual const ACEXML_Char *getSystemId (void) const; + + /* + * Set the column number of this locator. + */ + void setColumnNumber (int cn); + + /* + * Set the line number of this locator. + */ + void setLineNumber (int ln); + + /* + * Set the public identifier of this locator. + */ + void setPublicId (const ACEXML_Char *id); + + /* + * Set the system identifier of this locator. + */ + void setSystemId (const ACEXML_Char *id); + + /* + * Increment the line number. + */ + void incrLineNumber (); + + /* + * Increment the column number. + */ + void incrColumnNumber (); + + /* + * Reset the Locator information. This is necessary because one might + * want to use the same parser to parse multiple files. In that case, + * tying the life of the Locator with the parser is not appropriate. The + * parser calls this method as soon as issuing an endDocument() call. + */ + void reset (void); + +private: + ACEXML_Char *publicId_; + ACEXML_Char *systemId_; + int lineNumber_; + int columnNumber_; +}; + +#if defined (__ACEXML_INLINE__) +# include "ACEXML/common/LocatorImpl.inl" +#endif /* __ACEXML_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* ACEXML_LOCALTORIMPL_H */ diff --git a/ACE/ACEXML/common/LocatorImpl.inl b/ACE/ACEXML/common/LocatorImpl.inl new file mode 100644 index 00000000000..808a8bd4ac4 --- /dev/null +++ b/ACE/ACEXML/common/LocatorImpl.inl @@ -0,0 +1,65 @@ +// -*- C++ -*- $Id$ + +#include "ace/ACE.h" + +ACEXML_INLINE void +ACEXML_LocatorImpl::setColumnNumber (int cn) +{ + this->columnNumber_ = cn; +} + +ACEXML_INLINE void +ACEXML_LocatorImpl::setLineNumber (int ln) +{ + this->lineNumber_ = ln; +} + +ACEXML_INLINE int +ACEXML_LocatorImpl::getColumnNumber (void) const +{ + return this->columnNumber_; +} + +ACEXML_INLINE int +ACEXML_LocatorImpl::getLineNumber (void) const +{ + return this->lineNumber_; +} + +ACEXML_INLINE void +ACEXML_LocatorImpl::setPublicId (const ACEXML_Char *id) +{ + delete[] this->publicId_; + this->publicId_ = ACE::strnew (id); +} + +ACEXML_INLINE void +ACEXML_LocatorImpl::setSystemId (const ACEXML_Char *id) +{ + delete[] this->systemId_; + this->systemId_ = ACE::strnew (id); +} + +ACEXML_INLINE const ACEXML_Char * +ACEXML_LocatorImpl::getPublicId (void) const +{ + return this->publicId_; +} + +ACEXML_INLINE const ACEXML_Char * +ACEXML_LocatorImpl::getSystemId (void) const +{ + return this->systemId_; +} + +ACEXML_INLINE void +ACEXML_LocatorImpl::incrLineNumber () +{ + ++this->lineNumber_; +} + +ACEXML_INLINE void +ACEXML_LocatorImpl::incrColumnNumber () +{ + ++this->columnNumber_; +} diff --git a/ACE/ACEXML/common/Makefile.am b/ACE/ACEXML/common/Makefile.am new file mode 100644 index 00000000000..f08574ae905 --- /dev/null +++ b/ACE/ACEXML/common/Makefile.am @@ -0,0 +1,159 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +includedir = @includedir@/ACEXML/common +pkgconfigdir = @libdir@/pkgconfig + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + + +## Makefile.ACEXML.am + +if !BUILD_ACE_FOR_TAO + +lib_LTLIBRARIES = libACEXML.la + +libACEXML_la_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -DACEXML_BUILD_DLL + +if BUILD_ZLIB +if BUILD_ZZIP +libACEXML_la_CPPFLAGS += \ + $(ACE_ZZIP_CPPFLAGS) \ + $(ACE_ZLIB_CPPFLAGS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +libACEXML_la_SOURCES = \ + Attributes.cpp \ + AttributesImpl.cpp \ + Attributes_Def_Builder.cpp \ + CharStream.cpp \ + ContentHandler.cpp \ + DTDHandler.cpp \ + DTD_Manager.cpp \ + DefaultHandler.cpp \ + Element_Def_Builder.cpp \ + Encoding.cpp \ + EntityResolver.cpp \ + Env.cpp \ + ErrorHandler.cpp \ + Exception.cpp \ + FileCharStream.cpp \ + HttpCharStream.cpp \ + InputSource.cpp \ + Locator.cpp \ + LocatorImpl.cpp \ + Mem_Map_Stream.cpp \ + NamespaceSupport.cpp \ + SAXExceptions.cpp \ + StrCharStream.cpp \ + StreamFactory.cpp \ + Transcode.cpp \ + URL_Addr.cpp \ + Validator.cpp \ + XMLFilterImpl.cpp \ + XMLReader.cpp \ + XML_Codecs.cpp \ + XML_Util.cpp \ + ZipCharStream.cpp + +libACEXML_la_LDFLAGS = \ + -release @ACE_VERSION_NAME@ + +if BUILD_ZLIB +if BUILD_ZZIP +libACEXML_la_LDFLAGS += \ + $(ACE_ZZIP_LDFLAGS) \ + $(ACE_ZLIB_LDFLAGS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +libACEXML_la_LIBADD = \ + $(ACE_BUILDDIR)/ace/libACE.la + +if BUILD_ZLIB +if BUILD_ZZIP +libACEXML_la_LIBADD += \ + $(ACE_ZZIP_LIBS) \ + $(ACE_ZLIB_LIBS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +nobase_include_HEADERS = \ + ACEXML_Export.h \ + Attributes.h \ + AttributesImpl.h \ + AttributesImpl.inl \ + Attributes_Def_Builder.h \ + CharStream.h \ + ContentHandler.h \ + DTDHandler.h \ + DTD_Manager.h \ + DefaultHandler.h \ + Element_Def_Builder.h \ + Encoding.h \ + EntityResolver.h \ + Env.h \ + Env.inl \ + ErrorHandler.h \ + Exception.h \ + Exception.inl \ + FileCharStream.h \ + HttpCharStream.h \ + InputSource.h \ + Locator.h \ + LocatorImpl.h \ + LocatorImpl.inl \ + Mem_Map_Stream.h \ + NamespaceSupport.h \ + SAXExceptions.h \ + SAXExceptions.inl \ + StrCharStream.h \ + StreamFactory.h \ + Transcode.h \ + URL_Addr.h \ + URL_Addr.inl \ + Validator.h \ + XMLFilter.h \ + XMLFilterImpl.h \ + XMLFilterImpl.inl \ + XMLReader.h \ + XML_Codecs.h \ + XML_Macros.h \ + XML_Types.h \ + XML_Util.h \ + ZipCharStream.h + +pkgconfig_DATA = \ + ACEXML.pc + +CLEANFILES = \ + ACEXML.pc + +ACEXML.pc: ${top_builddir}/config.status ${srcdir}/ACEXML.pc.in + ${top_builddir}/config.status --file $@:${srcdir}/ACEXML.pc.in + +endif !BUILD_ACE_FOR_TAO + +EXTRA_DIST = \ + ACEXML.pc.in + + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/ACEXML/common/Mem_Map_Stream.cpp b/ACE/ACEXML/common/Mem_Map_Stream.cpp new file mode 100644 index 00000000000..67118c0d276 --- /dev/null +++ b/ACE/ACEXML/common/Mem_Map_Stream.cpp @@ -0,0 +1,264 @@ +// $Id$ + +#include "ace/FILE_Addr.h" +#include "ace/OS_NS_unistd.h" +#include "ACEXML/common/Mem_Map_Stream.h" + +ACE_RCSID(common, Mem_Map_Stream, "$Id$") + +ACEXML_Mem_Map_Stream::ACEXML_Mem_Map_Stream (void) + : svc_handler_ (0) +{ + +} + +ACE_SOCK_Stream & +ACEXML_Mem_Map_Stream::stream (void) +{ + return svc_handler_->peer (); +} + +ssize_t +ACEXML_Mem_Map_Stream::send_n (const void *buf, size_t size, + ACE_Time_Value *tv) +{ + return svc_handler_->peer ().send_n (buf, size, 0, tv); +} + +int +ACEXML_Mem_Map_Stream::eof (void) const +{ + return this->get_pos_ >= this->end_of_mapping_plus1_; +} + +int +ACEXML_Mem_Map_Stream::get_char (void) +{ + if (this->eof () && this->grow_file_and_remap () == -1) + return EOF; + return *this->get_pos_++; +} + +void +ACEXML_Mem_Map_Stream::rewind (void) +{ + this->recv_pos_ = reinterpret_cast (this->mem_map_.addr ()); + this->get_pos_ = this->recv_pos_; + this->end_of_mapping_plus1_ = this->recv_pos_ + this->mem_map_.size (); +} + +int +ACEXML_Mem_Map_Stream::peek_char (size_t offset) +{ + // We may need to iterate if the size of is large. + while (this->get_pos_ + offset >= this->end_of_mapping_plus1_) + if (this->grow_file_and_remap () == -1) + return EOF; + + return this->get_pos_[offset]; +} + +const char * +ACEXML_Mem_Map_Stream::recv (void) const +{ + return this->recv_pos_; +} + +const char * +ACEXML_Mem_Map_Stream::recv (size_t &len) +{ + if (this->eof () && this->grow_file_and_remap () == -1) + { + len = 0; + return 0; + } + const char *s = this->recv_pos_; + this->seek (static_cast (len), SEEK_CUR); + len = this->get_pos_ - s; + return s; +} + +size_t +ACEXML_Mem_Map_Stream::recv_len (void) const +{ + return this->get_pos_ - this->recv_pos_; +} + +const char * +ACEXML_Mem_Map_Stream::peek_str (size_t offset, + size_t size) +{ + // We will iterate if the size of is large. + while (this->get_pos_ + (offset + size) > this->end_of_mapping_plus1_) + if (this->grow_file_and_remap () == -1) + return 0; + + return &this->get_pos_[offset]; +} + +ACE_OFF_T +ACEXML_Mem_Map_Stream::seek (ACE_OFF_T offset, int whence) +{ + switch (whence) + { + case SEEK_SET: + this->get_pos_ = + reinterpret_cast (this->mem_map_.addr ()) + + offset; + break; + + case SEEK_CUR: + this->get_pos_ += offset; + break; + + case SEEK_END: + this->get_pos_ = + this->end_of_mapping_plus1_ + offset; + // @@ Not sure how to implement this (yet). + ACE_NOTSUP_RETURN (-1); + } + + // Make sure that the backing store will cover this. + while (this->get_pos_ > this->end_of_mapping_plus1_) + if (this->grow_file_and_remap () == -1) + this->get_pos_ = this->end_of_mapping_plus1_; + + this->recv_pos_ = this->get_pos_; + return this->recv_pos_ - reinterpret_cast (this->mem_map_.addr ()); +} + +Svc_Handler * +ACEXML_Mem_Map_Stream::svc_handler (void) +{ + return this->svc_handler_; +} + +size_t +ACEXML_Mem_Map_Stream::available (void) const +{ + return this->end_of_mapping_plus1_ - this->get_pos_; +} + +int +ACEXML_Mem_Map_Stream::open (Connector *connector, + const ACE_INET_Addr &addr) +{ + svc_handler_ = 0; + + // Connect to the server at . If the handler has to be + // connected to the server again, the Caching strategy takes care + // and uses the same connection. + if (connector->connect (svc_handler_, + addr) == -1) + { + + ACE_ERROR_RETURN ((LM_ERROR, + "%p %s %d\n", + "Connect failed", + addr.get_host_name (), + addr.get_port_number ()), + -1); + } + // Create a temporary filename. + ACE_FILE_Addr file (ACE_sap_any_cast (ACE_FILE_Addr &)); + + // Create the temporary file via the class API. + if (this->mem_map_.open (file.get_path_name (), + O_RDWR | O_CREAT | O_APPEND, + ACE_DEFAULT_FILE_PERMS) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + "%p\n", + "open"), + -1); + // Make sure to unlink this right away so that if this process + // crashes these files will be removed automatically. + else if (ACE_OS::unlink (file.get_path_name ()) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + "%p\n", + "unlink"), + -1); + else + // Initialize all the position pointers to 0. + this->rewind (); + + return 0; +} + +int +ACEXML_Mem_Map_Stream::grow_file_and_remap (void) +{ + char buf[8192]; + + // Copy the next chunk of bytes from the socket into the temporary + // file. + ACE_Time_Value tv (ACE_DEFAULT_TIMEOUT); + ssize_t bytes = 0; + ssize_t n = 0; + while (1) + { + n = this->svc_handler_->peer ().recv (buf, sizeof buf, 0, &tv); + if (n < 0) + { + if (errno != EWOULDBLOCK) + { + ACE_ERROR ((LM_ERROR, "%p\n", "recv")); + } + + return -1; + } + bytes += n; + if (n == 0 && !bytes) + return -1; + else if (n == 0) + break; + else if (ACE::write_n (this->mem_map_.handle (), buf, n) != n) + ACE_ERROR_RETURN ((LM_ERROR, + "%p\n", + "write_n"), + -1); + } + +// ssize_t n = this->svc_handler_->peer ().recv (buf, sizeof buf, 0, &tv); +// if (n == -1) +// { +// ACE_ERROR ((LM_ERROR, "%p\n", "recv")); +// return -1; +// } +// else if (n == 0) +// return -1; +// else if (ACE::write_n (this->mem_map_.handle (), buf, n) != n) +// ACE_ERROR_RETURN ((LM_ERROR, +// "%p\n", +// "write_n"), +// -1); + + // Grow the memory-mapping to encompass the entire temporary file. + if (this->mem_map_.map (static_cast (-1), + PROT_RDWR, + ACE_MAP_PRIVATE, + (void*)0) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + "%p\n", + "map"), + -1); + // MAP_FAILED is used as a "first time in" flag. + if (this->recv_pos_ == MAP_FAILED) + { + this->recv_pos_ = reinterpret_cast (this->mem_map_.addr ()); + this->get_pos_ = this->recv_pos_; + } + + this->end_of_mapping_plus1_ = + reinterpret_cast (this->mem_map_.addr ()) + + this->mem_map_.size (); + + return 0; +} + +ACEXML_Mem_Map_Stream::~ACEXML_Mem_Map_Stream (void) +{ + // Remove the mapping and the file. + this->mem_map_.remove (); + delete this->svc_handler_; +} + diff --git a/ACE/ACEXML/common/Mem_Map_Stream.h b/ACE/ACEXML/common/Mem_Map_Stream.h new file mode 100644 index 00000000000..3752c71d104 --- /dev/null +++ b/ACE/ACEXML/common/Mem_Map_Stream.h @@ -0,0 +1,191 @@ +/* -*- C++ -*- */ + +/** @file Mem_Map_Stream.h + * + * $Id$ + * + * @author Douglas C. Schmidt + * @author Krishnakumar B + * + */ + +#ifndef _ACEXML_MEM_MAP_STREAM_H +#define _ACEXML_MEM_MAP_STREAM_H + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/SOCK_Stream.h" +#include "ace/Mem_Map.h" +#include "ace/SOCK_Connector.h" +#include "ace/Connector.h" +#include "ace/Svc_Handler.h" +#include "ACEXML/common/XML_Types.h" + +typedef ACE_Svc_Handler Svc_Handler; +typedef ACE_Connector Connector; + +/** + * @class ACEXML_Mem_Map_Stream Mem_Map_Stream.h "ACEXML/common/Mem_Map_Stream.h" + * + * @brief Provides a memory-mapped stream abstraction to simplify parsing + * of tokens. + * + * This class makes it possible to treat an connection as a stream of + * bytes, similar to the C library stdio streams. The contents of the + * connection are buffered incrementally in a memory-mapped file. This + * class maintains pointers to two positions in the stream: + * + * 1. The position, which keeps track of the beginning of a + * token that is in the stream. + * + * 2. The position, which moves along character-by-character + * until the end of the token is reached. + * + * Once a token has been located, it can be extracted from the stream by + * calling the . The length of the token, i.e., the , is + * the length in bytes between the position and the position. + * Once the token has been extracted, the and positions can be + * updated by the method. + */ +class ACEXML_Export ACEXML_Mem_Map_Stream +{ +public: + /// Default constructor + ACEXML_Mem_Map_Stream (void); + + /// Initialize this object. + virtual int open (Connector *connector, + const ACE_INET_Addr &); + + /// Destructor. + virtual ~ACEXML_Mem_Map_Stream (void); + + /// Returns the underlying . + ACE_SOCK_Stream &stream (void); + + /** + * Send bytes in to the connected peer. This is a + * completely unbuffered call. + */ + virtual ssize_t send_n (const void *buf, + size_t size, + ACE_Time_Value *tv = 0); + + /** + * Return the next character in the stream and advance the + * position. Returns EOF when the position reaches the end of the + * HTTP stream. + */ + virtual int get_char (void); + + /** + * Returns a pointer to array of at most characters starting at + * the position. If the position + extends past the + * EOF then is set to the number of characters between the + * position and the EOF and both the and positions are + * advanced by . Returns 0 if the position is at the EOF. + */ + virtual const char *recv (size_t &len); + + /** + * Returns a pointer to array of characters starting at the + * position. + */ + virtual const char *recv (void) const; + + /** + * Returns the length in bytes between the position and the + * position. + */ + virtual size_t recv_len (void) const; + + /** + * Returns the no. of bytes available in the stream. + */ + virtual size_t available (void) const; + + /** + * Resets the and positions to the beginning of the stream. + * This works since all the data has been cached in the memory-mapped + * backing store. + */ + virtual void rewind (void); + + /** + * Returns the nth character from the position in the + * stream without advancing the position. Automatically extends + * the backing store if necessary. Returns EOF if is past the + * end of the stream. + */ + virtual int peek_char (size_t offset); + + /** + * Return a pointer to an array of characters starting at + * characters from the position in the stream without + * advancing the position. Automatically extends the backing store + * if necessary. Returns 0 if or is past the + * end of the stream. + */ + virtual const char *peek_str (size_t offset, size_t size); + + /** + * Sets the and positions as follows: + * o If is , the positions are set to + * bytes from the start of the stream. + * o If is , the positions are set to the + * current position plus . + * o If is , the positions are set to the size + * of the stream plus . + * + * If offset is greater than EOF, both and are set to EOF. + * Note special return value is returned to indicate this condition. + */ + virtual ACE_OFF_T seek (ACE_OFF_T offset, int whence = SEEK_CUR); + + /// Returns 1 if we're at the end of the HTTP stream, else 0. + virtual int eof (void) const; + + /// Returns the underlying service handler. + Svc_Handler *svc_handler (void); + +private: + /** + * Grow the file by reading another chunk from the HTTP socket and + * extend the mapping to cover this chunk. Returns -1 on failure or + * EOF, else 0. + */ + int grow_file_and_remap (void); + + /** + * Connection to peer. The granularity is at the Svc_Handler level. + * The Svc_Handler has an SOCK_Stream. + */ + Svc_Handler *svc_handler_; + + /// Memory-mapped file that we're iterating over. + ACE_Mem_Map mem_map_; + + /// Pointer to the address where the next method will start. + char *recv_pos_; + + /** + * Pointer to the address where the next method will + * start. + */ + char *get_pos_; + + /// Address at the end of the file mapping. + char *end_of_mapping_plus1_; + +}; + + +#include /**/ "ace/post.h" + + +#endif /* _ACEXML_MEM_MAP_STREAM_H */ diff --git a/ACE/ACEXML/common/NamespaceSupport.cpp b/ACE/ACEXML/common/NamespaceSupport.cpp new file mode 100644 index 00000000000..194b805c882 --- /dev/null +++ b/ACE/ACEXML/common/NamespaceSupport.cpp @@ -0,0 +1,247 @@ +// -*- C++ -*- $Id$ + +#include "ACEXML/common/NamespaceSupport.h" +#include "ace/OS_NS_string.h" + +static const ACEXML_Char ACEXML_XMLNS_PREFIX_name[] = ACE_TEXT ("xmlns"); + +const ACEXML_Char *ACEXML_NamespaceSupport::XMLNS_PREFIX = ACEXML_XMLNS_PREFIX_name; + +static const ACEXML_Char ACEXML_DEFAULT_NS_PREFIX[] = {0}; + +static const ACEXML_Char ACEXML_TABOO_NS_PREFIX[] = ACE_TEXT ("xml"); + +static const ACEXML_Char ACEXML_XMLNS_URI_name[] = ACE_TEXT ("http://www.w3.org/XML/1998/namespace"); +const ACEXML_Char *ACEXML_NamespaceSupport::XMLNS = ACEXML_XMLNS_URI_name; + +ACEXML_Namespace_Context_Stack::ACEXML_Namespace_Context_Stack (void) +{ +} + +ACEXML_Namespace_Context_Stack::~ACEXML_Namespace_Context_Stack (void) +{ + // Clean up stuff. +} + +int +ACEXML_Namespace_Context_Stack::push (ACEXML_NS_CONTEXT *nsc) +{ + return (this->stack_.push (nsc) < 0); +} + +ACEXML_NS_CONTEXT * +ACEXML_Namespace_Context_Stack::pop (void) +{ + if (this->stack_.size() <= 0) + return 0; + + ACEXML_NS_CONTEXT* temp = 0; + int retval = this->stack_.pop (temp); + if (retval != 0) + { + ACE_ERROR ((LM_ERROR, "Unable to pop Namespace context from stack\n")); + return 0; + } + return temp; +} + +int +ACEXML_NamespaceSupport::popContext (void) +{ + delete this->effective_context_; + + if ((this->effective_context_ = this->ns_stack_.pop ()) == 0) + return -1; + return 0; +} + +int +ACEXML_NamespaceSupport::pushContext (void) +{ + ACEXML_NS_CONTEXT *temp = this->effective_context_; + ACE_NEW_RETURN (this->effective_context_, + ACEXML_NS_CONTEXT (), + -1); + + // @@ Copy everything from the old context to the new one. + ACEXML_NS_CONTEXT_ENTRY *entry = 0; + + for (ACEXML_NS_CONTEXT_ITER iter (*temp); + iter.next (entry) != 0; + iter.advance ()) + this->effective_context_->bind (entry->ext_id_, + entry->int_id_); + this->ns_stack_.push (temp); + return 0; +} + +ACEXML_NamespaceSupport::ACEXML_NamespaceSupport (void) + : ns_stack_ (), + effective_context_ (0) +{} + +int +ACEXML_NamespaceSupport::init (void) +{ + // @@ No way to tell if the new fails. + ACE_NEW_RETURN (effective_context_, ACEXML_NS_CONTEXT(), -1); + + ACEXML_String prefix (ACEXML_TABOO_NS_PREFIX, 0, false); + ACEXML_String uri (ACEXML_XMLNS_URI_name, 0, false); + return this->effective_context_->bind (prefix, uri); +} + +ACEXML_NamespaceSupport::~ACEXML_NamespaceSupport (void) +{ + while (this->popContext () == 0) + ; +} + +int +ACEXML_NamespaceSupport::declarePrefix (const ACEXML_Char *prefix, + const ACEXML_Char *uri) +{ + if (!prefix || !uri) + return -1; + + // Unless predefined by w3.org(?) NS prefix can never start with + // "xml". + if (ACE_OS::strcmp (ACEXML_TABOO_NS_PREFIX, prefix) == 0) + return -1; + + ACEXML_String ns_prefix (prefix, 0, false); + ACEXML_String ns_uri (uri, 0, false); + + return this->effective_context_->rebind (ns_prefix, ns_uri); +} + +int +ACEXML_NamespaceSupport::getDeclaredPrefixes (ACEXML_STR_LIST &prefixes) const +{ + ACEXML_NS_CONTEXT_ENTRY *entry = 0; + + // The prefix for default namespace (empty string) is included in + // the return list. + for (ACEXML_NS_CONTEXT_ITER iter (*this->effective_context_); + iter.next (entry) != 0; + iter.advance ()) + prefixes.enqueue_tail (entry->ext_id_.c_str ()); + + return 0; +} + +const ACEXML_Char * +ACEXML_NamespaceSupport::getPrefix (const ACEXML_Char *uri) const +{ + if (!uri || *uri == 0) + return 0; + + ACEXML_NS_CONTEXT_ENTRY *entry = 0; + + for (ACEXML_NS_CONTEXT_ITER iter (*this->effective_context_); + iter.next (entry) != 0; + iter.advance ()) + if (entry->int_id_ == ACEXML_String (uri, 0, false)) + return entry->ext_id_.c_str (); + + return 0; // Nothing found. +} + +int +ACEXML_NamespaceSupport::getPrefixes (ACEXML_STR_LIST &prefixes) const +{ + ACEXML_NS_CONTEXT_ENTRY *entry = 0; + + // The prefix for default namespace (empty string) is not included + // in the return list. + for (ACEXML_NS_CONTEXT_ITER iter (*this->effective_context_); + iter.next (entry) != 0; + iter.advance ()) + prefixes.enqueue_tail (entry->ext_id_.c_str ()); + return 0; +} + +int +ACEXML_NamespaceSupport::getPrefixes (const ACEXML_Char *uri, + ACEXML_STR_LIST &prefixes) const +{ + if (!uri) + return -1; + + ACEXML_NS_CONTEXT_ENTRY *entry = 0; + + for (ACEXML_NS_CONTEXT_ITER iter (*this->effective_context_); + iter.next (entry) != 0; + iter.advance ()) + if (entry->int_id_ == ACEXML_String (uri, 0, false) && + entry->ext_id_ != ACEXML_String (ACEXML_DEFAULT_NS_PREFIX, 0, false)) + prefixes.enqueue_tail (entry->ext_id_.c_str ()); + else + continue; + + return 0; // Nothing found. +} + +const ACEXML_Char * +ACEXML_NamespaceSupport::getURI (const ACEXML_Char *prefix) const +{ + if (!prefix) + return 0; + + ACEXML_NS_CONTEXT_ENTRY *entry = 0; + + if (this->effective_context_->find (ACEXML_String (prefix, 0, false), + entry) == 0) + return entry->int_id_.c_str (); + return 0; +} + +int +ACEXML_NamespaceSupport::processName (const ACEXML_Char *qName, + const ACEXML_Char *&uri, + const ACEXML_Char *&name, + int is_attribute) const +{ + int qlen = static_cast (ACE_OS::strlen (qName)); + int len = -1; + for (int i = 0; i < qlen; ++i) + if (qName [i] == ':') + { + len = i; + break; + } + + ACEXML_String prefix (ACE_TEXT (""), 0, false); + if (len == -1) + name = qName; + else + { + prefix.set (qName, len, 1); + name = qName + len + 1; + } + + if (is_attribute && len == -1) { + uri = ACEXML_DEFAULT_NS_PREFIX; + return 0; + } + + ACEXML_NS_CONTEXT_ENTRY *entry; + + if (this->effective_context_->find (prefix, entry) == 0) + uri = entry->int_id_.c_str (); + else + { + uri = ACEXML_DEFAULT_NS_PREFIX; + return -1; + } + return 0; +} + +int +ACEXML_NamespaceSupport::reset (void) +{ + while (this->popContext() != -1) + ; + return 0; +} + diff --git a/ACE/ACEXML/common/NamespaceSupport.h b/ACE/ACEXML/common/NamespaceSupport.h new file mode 100644 index 00000000000..d81f9303d70 --- /dev/null +++ b/ACE/ACEXML/common/NamespaceSupport.h @@ -0,0 +1,235 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file NamespaceSupport.h + * + * $Id$ + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +#ifndef ACEXML_NAMESPACESUPPORT_H +#define ACEXML_NAMESPACESUPPORT_H + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/XML_Types.h" +#include "ace/Functor.h" +#include "ace/Hash_Map_Manager.h" +#include "ace/Containers_T.h" +#include "ace/Null_Mutex.h" + + +typedef ACE_Hash_Map_Entry ACEXML_NS_CONTEXT_ENTRY; + +typedef ACE_Hash_Map_Manager_Ex, + ACE_Equal_To, + ACE_Null_Mutex> ACEXML_NS_CONTEXT; + +typedef ACE_Hash_Map_Iterator_Ex, + ACE_Equal_To, + ACE_Null_Mutex> ACEXML_NS_CONTEXT_ITER; + +typedef ACE_Hash_Map_Reverse_Iterator_Ex, + ACE_Equal_To, + ACE_Null_Mutex> ACEXML_NS_CONTEXT_REVERSE_ITER; + +typedef ACE_Unbounded_Queue ACEXML_STR_LIST; + +/** + * @class ACEXML_Namespace_Context_Stack NamespaceSupport.h "ACEXML/common/NamespaceSupport.h" + * + * @brief ACEXML_Namespace_Context_Stack implements a simple stack + * that ACEXML_NamespaceSupport uses to keep track of namespace scopes. + * + * @sa ACEXML_NamespaceSupport + */ +class ACEXML_Export ACEXML_Namespace_Context_Stack +{ +public: + /// Default constructor. + ACEXML_Namespace_Context_Stack (void); + + /// Destructor. + ~ACEXML_Namespace_Context_Stack (void); + + /// Push the old namespace before entering into a new namespace scope. + int push (ACEXML_NS_CONTEXT * old); + + /// Pop the old namespace when exiting a namespace scope. + ACEXML_NS_CONTEXT *pop (void); + +private: + /// Internal stack structure to hold namespace context. + ACE_Unbounded_Stack stack_; +}; + +/** + * @class ACEXML_NamespaceSupport NamespaceSupport.h "ACEXML/common/NamespaceSupport.h" + * + * @brief ACEXML_NamespaceSupport provides namespace management + * operation for an XML parser. + * + * This class encapsulates the logic of Namespace processing: it + * tracks the declarations currently in force for each context and + * automatically processes qualified XML 1.0 names into their + * Namespace parts; it can also be used in reverse for generating XML + * 1.0 from Namespaces. + * + * Namespace support objects are reusable, but the reset method must + * be invoked between each session. + * + * Here is a simple session (in Java :-p): + * @code + * String parts[] = new String[3]; + * NamespaceSupport support = new NamespaceSupport(); + * + * support.pushContext(); + * support.declarePrefix("", "http://www.w3.org/1999/xhtml"); + * support.declarePrefix("dc", "http://www.purl.org/dc#"); + * + * String parts[] = support.processName("p", parts, false); + * System.out.println("Namespace URI: " + parts[0]); + * System.out.println("Local name: " + parts[1]); + * System.out.println("Raw name: " + parts[2]); + * + * String parts[] = support.processName("dc:title", parts, false); + * System.out.println("Namespace URI: " + parts[0]); + * System.out.println("Local name: " + parts[1]); + * System.out.println("Raw name: " + parts[2]); + * + * support.popContext(); + * @endcode + * + * Note that this class is optimized for the use case where most + * elements do not contain Namespace declarations: if the same + * prefix/URI mapping is repeated for each context (for example), this + * class will be somewhat less efficient. + * + * @sa ACEXML_Exception + */ +class ACEXML_Export ACEXML_NamespaceSupport +{ +public: + /** + * Default constructor. + */ + ACEXML_NamespaceSupport (void); + + /** + * Default destructor. + */ + ~ACEXML_NamespaceSupport (void); + + /** + * Initialize the namespace support object + */ + int init(void); + + /** + * XMLNS default prefix and URI strings. + */ + static const ACEXML_Char *XMLNS_PREFIX; + static const ACEXML_Char *XMLNS; + + /** + * Declare a Namespace prefix. Return -1 if the prefix was illegal + * or an internal error occured. Return 0 if the prefix gets declared + * successfully, 1 if the prefix replaces an existing prefix definition. + */ + int declarePrefix (const ACEXML_Char *prefix, + const ACEXML_Char *uri); + + /** + * Return all prefixes declared in current context in + * the user-supplied list @a prefixes. It is user's reponsibility + * to ensure the list was empty originally. + */ + int getDeclaredPrefixes (ACEXML_STR_LIST &prefixes) const; + + /** + * Return one of the prefixes mapped to a Namespace URI. + */ + const ACEXML_Char *getPrefix (const ACEXML_Char *uri) const; + + /** + * Return all prefixes currently declared in the user-supplied list. + * @@ Known bug: This function should only return user-defined prefixes. + */ + int getPrefixes (ACEXML_STR_LIST &prefixes) const; + + /** + * Return all prefixes currently declared for a URI in the + * user-supplied list. + */ + int getPrefixes (const ACEXML_Char *uri, + ACEXML_STR_LIST &prefixes) const; + + /** + * Look up a prefix and get the currently-mapped Namespace URI. + */ + const ACEXML_Char *getURI (const ACEXML_Char *prefix) const; + + /** + * Revert to the previous namespace context. + */ + int popContext (void); + + /** + * Process a raw XML 1.0 name. + * @a qName is the raw XML name we want to parse, + * @a uri contains the URI string of the raw name. It points to a null + * string if the namespace is not valid or there's no namespace defined. + * @a name contains the original name without the prefix. + * @a is_attribute specifies whether the name is an attribute or not. + * Attributes have different scoping rules from elements. + */ + int processName (const ACEXML_Char *qName, + const ACEXML_Char *&uri, + const ACEXML_Char *&name, + int is_attribute) const; + + /** + * Start a new Namespace context. Prefixes defined in previous + * context are copied over to the new context. + */ + int pushContext (void); + + /** + * Reset this Namespace support object for reuse. + * + */ + int reset (void); + +private: + /** + * Namespace Context stack. When we entering a new namespace + * context, the old context is duplicated and pushed into + * this stack. + */ + ACEXML_Namespace_Context_Stack ns_stack_; + + /** + * The effective namespace context. + */ + ACEXML_NS_CONTEXT *effective_context_; +}; + +#include /**/ "ace/post.h" + +#endif /* ACEXML_NAMESPACESUPPORT_H */ diff --git a/ACE/ACEXML/common/SAXExceptions.cpp b/ACE/ACEXML/common/SAXExceptions.cpp new file mode 100644 index 00000000000..de639f0de1b --- /dev/null +++ b/ACE/ACEXML/common/SAXExceptions.cpp @@ -0,0 +1,250 @@ +// -*- C++ -*- $Id$ + +#include "ACEXML/common/SAXExceptions.h" +#include "ace/Log_Msg.h" +#include "ace/ACE.h" +#include "ace/OS_Memory.h" +#include "ace/OS_NS_string.h" + +const ACEXML_Char * ACEXML_SAXException::exception_name_ = ACE_TEXT ("ACEXML_SAXException"); + +const ACEXML_Char ACEXML_SAXNotSupportedException::exception_name_[] = ACE_TEXT ("ACEXML_SAXNotSupportedException"); + +const ACEXML_Char ACEXML_SAXNotRecognizedException::exception_name_[] = ACE_TEXT ("ACEXML_SAXNotRecognizedException"); + +const ACEXML_Char ACEXML_SAXParseException::exception_name_[] = ACE_TEXT ("ACEXML_SAXParseException"); + +#if !defined (__ACEXML_INLINE__) +# include "ACEXML/common/SAXExceptions.inl" +#endif /* __ACEXML_INLINE__ */ + +ACEXML_SAXException::ACEXML_SAXException (void) + : message_ (0) +{ +} + +ACEXML_SAXException::ACEXML_SAXException (const ACEXML_Char *msg) + : message_ (ACE::strnew (msg)) +{ +} + +ACEXML_SAXException::ACEXML_SAXException (const ACEXML_SAXException &ex) + : ACEXML_Exception (ex), + message_ (ACE::strnew (ex.message_)) + +{ +} + +ACEXML_SAXException& +ACEXML_SAXException::operator= (const ACEXML_SAXException& src) +{ + if (this != &src) + { + ACE::strdelete (this->message_); + this->message_ = ACE::strnew (src.message_); + } + + return *this; +} + +ACEXML_SAXException* +ACEXML_SAXException::_downcast (ACEXML_Exception* ex) +{ + return dynamic_cast (ex); +} + +ACEXML_SAXException::~ACEXML_SAXException (void) +{ + ACE::strdelete (this->message_); +} + +ACEXML_Exception * +ACEXML_SAXException::duplicate (void) const +{ + ACEXML_Exception *tmp; + ACE_NEW_RETURN (tmp, ACEXML_SAXException (*this), 0); + return tmp; +} + +int +ACEXML_SAXException::is_a (const ACEXML_Char *name) +{ + return ACE_OS::strcmp (ACEXML_SAXException::exception_name_, name) == 0 + || this->ACEXML_Exception::is_a (name); +} + +void +ACEXML_SAXException::print (void) const +{ + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACEXML: (%P|%t) %s: %s\n"), + this->exception_name_, this->message())); +} + +ACEXML_SAXNotSupportedException::ACEXML_SAXNotSupportedException (void) +{ +} + +ACEXML_SAXNotSupportedException::ACEXML_SAXNotSupportedException (const ACEXML_SAXNotSupportedException &ex) + : ACEXML_SAXException (ex) +{ +} + +ACEXML_SAXNotSupportedException& +ACEXML_SAXNotSupportedException::operator= (const + ACEXML_SAXNotSupportedException &ex) +{ + this->ACEXML_SAXException::operator= (ex); + return *this; +} + +ACEXML_SAXNotSupportedException* +ACEXML_SAXNotSupportedException::_downcast (ACEXML_Exception* ex) +{ + return dynamic_cast (ex); +} + +ACEXML_SAXNotSupportedException::ACEXML_SAXNotSupportedException (const ACEXML_Char* msg) + : ACEXML_SAXException (msg) +{ +} + +ACEXML_SAXNotSupportedException::~ACEXML_SAXNotSupportedException (void) +{ + delete[] this->message_; +} + + +ACEXML_Exception * +ACEXML_SAXNotSupportedException::duplicate (void) const +{ + ACEXML_Exception *tmp; + ACE_NEW_RETURN (tmp, ACEXML_SAXNotSupportedException (*this), 0); + return tmp; +} + +int +ACEXML_SAXNotSupportedException::is_a (const ACEXML_Char *name) +{ + return ACE_OS::strcmp (ACEXML_SAXNotSupportedException::exception_name_, + name) == 0 + || this->ACEXML_SAXException::is_a (name); +} + +void +ACEXML_SAXNotSupportedException::print (void) const +{ + ACE_DEBUG ((LM_ERROR, + ACE_TEXT ("ACEXML: (%P|%t) %s: %s\n"), + this->exception_name_, this->message())); +} + +ACEXML_SAXNotRecognizedException::ACEXML_SAXNotRecognizedException (void) +{ +} + +ACEXML_SAXNotRecognizedException::ACEXML_SAXNotRecognizedException (const ACEXML_Char *msg) + : ACEXML_SAXException (msg) +{ +} + +ACEXML_SAXNotRecognizedException::ACEXML_SAXNotRecognizedException (const ACEXML_SAXNotRecognizedException &ex) + : ACEXML_SAXException (ex) +{ +} + +ACEXML_SAXNotRecognizedException& +ACEXML_SAXNotRecognizedException::operator= (const ACEXML_SAXNotRecognizedException &ex) +{ + this->ACEXML_SAXException::operator= (ex); + return *this; +} + +ACEXML_SAXNotRecognizedException* +ACEXML_SAXNotRecognizedException::_downcast (ACEXML_Exception* ex) +{ + return dynamic_cast (ex); +} + +ACEXML_SAXNotRecognizedException::~ACEXML_SAXNotRecognizedException (void) +{ +} + +ACEXML_Exception * +ACEXML_SAXNotRecognizedException::duplicate (void) const +{ + ACEXML_Exception *tmp; + ACE_NEW_RETURN (tmp, ACEXML_SAXNotRecognizedException (*this), 0); + return tmp; +} + +int +ACEXML_SAXNotRecognizedException::is_a (const ACEXML_Char *name) +{ + return ACE_OS::strcmp (ACEXML_SAXNotRecognizedException::exception_name_, + name) == 0 + || this->ACEXML_SAXException::is_a (name); +} + +void +ACEXML_SAXNotRecognizedException::print (void) const +{ + ACE_DEBUG ((LM_ERROR, + ACE_TEXT ("ACEXML: (%P|%t) %s: %s\n"), + this->exception_name_, this->message())); +} + +ACEXML_SAXParseException::ACEXML_SAXParseException (void) +{ +} + +ACEXML_SAXParseException::ACEXML_SAXParseException (const ACEXML_Char *msg) + : ACEXML_SAXException (msg) +{ +} + +ACEXML_SAXParseException::ACEXML_SAXParseException (const ACEXML_SAXParseException &ex) + : ACEXML_SAXException (ex) +{ +} + +ACEXML_SAXParseException& +ACEXML_SAXParseException::operator= (const ACEXML_SAXParseException &ex) +{ + this->ACEXML_SAXException::operator= (ex); + return *this; +} + +ACEXML_SAXParseException* +ACEXML_SAXParseException::_downcast (ACEXML_Exception* ex) +{ + return dynamic_cast (ex); +} + +ACEXML_SAXParseException::~ACEXML_SAXParseException (void) +{ +} + +ACEXML_Exception * +ACEXML_SAXParseException::duplicate (void) const +{ + ACEXML_Exception *tmp; + ACE_NEW_RETURN (tmp, ACEXML_SAXParseException (*this), 0); + return tmp; +} + +int +ACEXML_SAXParseException::is_a (const ACEXML_Char *name) +{ + return ACE_OS::strcmp (ACEXML_SAXParseException::exception_name_, + name) == 0 + || this->ACEXML_SAXException::is_a (name); +} + +void +ACEXML_SAXParseException::print (void) const +{ + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACEXML: (%P|%t) %s: %s\n"), + this->exception_name_, this->message())); +} diff --git a/ACE/ACEXML/common/SAXExceptions.h b/ACE/ACEXML/common/SAXExceptions.h new file mode 100644 index 00000000000..ae117ff7bc5 --- /dev/null +++ b/ACE/ACEXML/common/SAXExceptions.h @@ -0,0 +1,208 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file SAXExceptions.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +#ifndef _ACEXML_SAXEXCEPTIONS_H_ +#define _ACEXML_SAXEXCEPTIONS_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/Exception.h" + +/** + * @class ACEXML_SAXException SAXExceptions.h "ACEXML/common/SAXExceptions.h" + * + * @brief ACEXML_SAXException + * + * ACEXML_SAXException is the mother of all SAX related exceptions. + */ +class ACEXML_Export ACEXML_SAXException : public ACEXML_Exception +{ +public: + /// Default constructor. + ACEXML_SAXException (void); + + /// Constructor initializing the exception message. + ACEXML_SAXException (const ACEXML_Char *msg); + + /// Assignment operator + ACEXML_SAXException& operator= (const ACEXML_SAXException& src); + + /// Copy constructor. + ACEXML_SAXException (const ACEXML_SAXException &ex); + + /// Destructor. + virtual ~ACEXML_SAXException (void); + + /// Throw the exception. + virtual void _raise (void); + + /// Static narrow operation. + static ACEXML_SAXException* _downcast (ACEXML_Exception* ex); + + /// Return the name of the exception. + virtual const ACEXML_Char *id (void) const; + + /// Return the extra message accompanying the exception. + const ACEXML_Char *message (void) const; + + virtual ACEXML_Exception *duplicate (void) const; + + virtual int is_a (const ACEXML_Char *name); + + virtual void print (void) const; + +protected: + static const ACEXML_Char * exception_name_; + + /// A message providing more information about the exception being thrown. + ACEXML_Char *message_; +}; + +/** + * @class ACEXML_SAXNotSupportedException SAXExceptions.h "ACEXML/common/SAXExceptions.h" + * + * @brief ACEXML_SAXNotSupportedException + */ +class ACEXML_Export ACEXML_SAXNotSupportedException + : public ACEXML_SAXException +{ +public: + /// Default constructor. + ACEXML_SAXNotSupportedException (void); + + /// Copy constructor. + ACEXML_SAXNotSupportedException (const ACEXML_SAXNotSupportedException &ex); + + /// Assignment operator + ACEXML_SAXNotSupportedException& operator= (const ACEXML_SAXNotSupportedException &ex); + + /// Constructor which accepts an informational message + ACEXML_SAXNotSupportedException (const ACEXML_Char* msg); + + /// Destructor. + virtual ~ACEXML_SAXNotSupportedException (void); + + /// Throw the exception. + virtual void _raise (void); + + /// Static narrow operation. + static ACEXML_SAXNotSupportedException* _downcast (ACEXML_Exception* ex); + + virtual const ACEXML_Char *id (void) const; + + virtual ACEXML_Exception *duplicate (void) const; + + virtual int is_a (const ACEXML_Char *name); + + virtual void print (void) const; + +protected: + static const ACEXML_Char exception_name_[]; +}; + +/** + * @class ACEXML_SAXNotRecognizedException SAXExceptions.h "ACEXML/common/SAXExceptions.h" + * + * @brief ACEXML_SAXNotRecognizedException + */ +class ACEXML_Export ACEXML_SAXNotRecognizedException + : public ACEXML_SAXException +{ +public: + /// Default constructor. + ACEXML_SAXNotRecognizedException (void); + + /// Constructor with an initializing exception message. + ACEXML_SAXNotRecognizedException (const ACEXML_Char *msg); + + /// Copy constructor. + ACEXML_SAXNotRecognizedException (const ACEXML_SAXNotRecognizedException &ex); + + /// Assignment operator. + ACEXML_SAXNotRecognizedException& operator= (const ACEXML_SAXNotRecognizedException &ex); + + /// Destructor. + virtual ~ACEXML_SAXNotRecognizedException (void); + + /// Throw the exception. + virtual void _raise (void); + + /// Static narrow operation. + static ACEXML_SAXNotRecognizedException* _downcast (ACEXML_Exception* ex); + + virtual const ACEXML_Char *id (void) const; + + virtual ACEXML_Exception *duplicate (void) const; + + virtual int is_a (const ACEXML_Char *name); + + virtual void print (void) const; + +protected: + static const ACEXML_Char exception_name_[]; +}; + +/** + * @class ACEXML_SAXParseException SAXExceptions.h "ACEXML/common/SAXExceptions.h" + * + * @brief ACEXML_SAXParseException + * + */ +class ACEXML_Export ACEXML_SAXParseException + : public ACEXML_SAXException +{ +public: + /// Default constructor. + ACEXML_SAXParseException (void); + + /// Constructor with an initializing exception message. + ACEXML_SAXParseException (const ACEXML_Char *msg); + + /// Copy constructor. + ACEXML_SAXParseException (const ACEXML_SAXParseException &ex); + + /// Assignment operator. + ACEXML_SAXParseException& operator= (const ACEXML_SAXParseException &ex); + + /// Destructor. + virtual ~ACEXML_SAXParseException (void); + + /// Throw the exception. + virtual void _raise (void); + + /// Static narrow operation. + static ACEXML_SAXParseException* _downcast (ACEXML_Exception* ex); + + virtual const ACEXML_Char *id (void) const; + + virtual ACEXML_Exception *duplicate (void) const; + + virtual int is_a (const ACEXML_Char *name); + + virtual void print (void) const; + +protected: + static const ACEXML_Char exception_name_[]; +}; + +#if defined (__ACEXML_INLINE__) +# include "ACEXML/common/SAXExceptions.inl" +#endif /* __ACEXML_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_SAXEXCEPTIONS_H_ */ diff --git a/ACE/ACEXML/common/SAXExceptions.inl b/ACE/ACEXML/common/SAXExceptions.inl new file mode 100644 index 00000000000..f184fcf077c --- /dev/null +++ b/ACE/ACEXML/common/SAXExceptions.inl @@ -0,0 +1,57 @@ +// -*- C++ -*- $Id$ + +ACEXML_INLINE const ACEXML_Char * +ACEXML_SAXException::message (void) const +{ + return (this->message_ == 0 ? + ACEXML_Exception::null_ : + this->message_); +} + +ACEXML_INLINE void +ACEXML_SAXException::_raise (void) +{ + ACEXML_RAISE (*this); +} + +ACEXML_INLINE void +ACEXML_SAXNotSupportedException::_raise (void) +{ + ACEXML_RAISE (*this); +} + +ACEXML_INLINE void +ACEXML_SAXNotRecognizedException::_raise (void) +{ + ACEXML_RAISE (*this); +} + +ACEXML_INLINE void +ACEXML_SAXParseException::_raise (void) +{ + ACEXML_RAISE (*this); +} + +ACEXML_INLINE const ACEXML_Char * +ACEXML_SAXException::id (void) const +{ + return ACEXML_SAXException::exception_name_; +} + +ACEXML_INLINE const ACEXML_Char * +ACEXML_SAXNotSupportedException::id (void) const +{ + return ACEXML_SAXNotSupportedException::exception_name_; +} + +ACEXML_INLINE const ACEXML_Char * +ACEXML_SAXNotRecognizedException::id (void) const +{ + return ACEXML_SAXNotRecognizedException::exception_name_; +} + +ACEXML_INLINE const ACEXML_Char * +ACEXML_SAXParseException::id (void) const +{ + return ACEXML_SAXParseException::exception_name_; +} diff --git a/ACE/ACEXML/common/StrCharStream.cpp b/ACE/ACEXML/common/StrCharStream.cpp new file mode 100644 index 00000000000..4d0cc429e0e --- /dev/null +++ b/ACE/ACEXML/common/StrCharStream.cpp @@ -0,0 +1,132 @@ +// $Id$ + +#include "ACEXML/common/StrCharStream.h" +#include "ACEXML/common/Encoding.h" +#include "ace/ACE.h" +#include "ace/Log_Msg.h" +#include "ace/OS_NS_string.h" + +ACEXML_StrCharStream::ACEXML_StrCharStream (void) + : start_ (0), ptr_ (0), end_ (0), encoding_ (0), name_ (0) +{ +} + + +ACEXML_StrCharStream::~ACEXML_StrCharStream (void) +{ + this->close(); +} + +int +ACEXML_StrCharStream::open (const ACEXML_Char *str, const ACEXML_Char* name) +{ + + if (str != 0 && name != 0) + { + delete [] this->start_; + if ((this->start_ = ACE::strnew (str)) == 0) + return -1; + delete [] this->name_; + if ((this->name_ = ACE::strnew (name)) == 0) + return -1; + this->ptr_ = this->start_; + this->end_ = this->start_ + ACE_OS::strlen (this->start_); + return this->determine_encoding(); + } + return -1; // Invalid string passed. +} + +int +ACEXML_StrCharStream::available (void) +{ + if (this->start_ != 0) + return static_cast (this->end_ - this->start_); // @@ Will this work on all platforms? + return -1; +} + +int +ACEXML_StrCharStream::close (void) +{ + delete[] this->start_; + delete[] this->encoding_; + this->encoding_ = 0; + delete[] this->name_; + this->name_ = 0; + this->start_ = this->ptr_ = this->end_ = 0; + return 0; +} + +int +ACEXML_StrCharStream::determine_encoding (void) +{ + if (this->start_ == 0) + return -1; + char input[4] = {0,0,0,0}; + char* sptr = (char*)this->start_; + int i = 0; + for ( ; i < 4 && sptr != (char*)this->end_; ++sptr, ++i) + input[i] = *sptr; + const ACEXML_Char* temp = ACEXML_Encoding::get_encoding (input); + if (!temp) + return -1; + else + { + delete [] this->encoding_; + this->encoding_ = ACE::strnew (temp); + // ACE_DEBUG ((LM_DEBUG, "String's encoding is %s\n", this->encoding_)); + } + return 0; +} + +void +ACEXML_StrCharStream::rewind (void) +{ + this->ptr_ = this->start_; + this->determine_encoding(); +} + +int +ACEXML_StrCharStream::get (ACEXML_Char& ch) +{ + if (this->start_ != 0 && this->ptr_ != this->end_) + { + ch = *this->ptr_++; + return 0; + } + return -1; +} + +int +ACEXML_StrCharStream::read (ACEXML_Char *str, size_t len) +{ + if (this->start_ != 0 && + this->ptr_ != this->end_) + { + if (len * sizeof (ACEXML_Char) > (size_t) (this->end_ - this->ptr_)) + len = this->end_ - this->ptr_; + ACE_OS::strncpy (str, this->ptr_, len); + this->ptr_ += len; + return static_cast (len); + } + return 0; +} + +int +ACEXML_StrCharStream::peek (void) +{ + if (this->start_ != 0 && this->ptr_ != this->end_) + return *this->ptr_; + return -1; +} + +const ACEXML_Char* +ACEXML_StrCharStream::getEncoding (void) +{ + return this->encoding_; +} + +const ACEXML_Char* +ACEXML_StrCharStream::getSystemId(void) +{ + return this->name_; +} diff --git a/ACE/ACEXML/common/StrCharStream.h b/ACE/ACEXML/common/StrCharStream.h new file mode 100644 index 00000000000..21de6ecaea4 --- /dev/null +++ b/ACE/ACEXML/common/StrCharStream.h @@ -0,0 +1,102 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file StrCharStream.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +#ifndef _ACEXML_STRCHARSTREAM_H_ +#define _ACEXML_STRCHARSTREAM_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/CharStream.h" + +/** + * @class ACEXML_StrCharStream StrCharStream.h "common/StrCharStream.h" + * + * An implementation of ACEXML_CharStream for reading + * input from a null-terminated ACEXML_Char string. + */ +class ACEXML_Export ACEXML_StrCharStream : public ACEXML_CharStream +{ +public: + /// Default constructor. + ACEXML_StrCharStream (void); + + /// Destructor + virtual ~ACEXML_StrCharStream (void); + + /// Initializing StrCharStream with @a str and @a name + int open (const ACEXML_Char *str, const ACEXML_Char* name); + + /** + * Returns the available ACEXML_Char in the buffer. -1 + * if the object is not initialized properly. + */ + virtual int available (void); + + /** + * Close this stream and release all resources used by it. + */ + virtual int close (void); + + /** + * Determine the encoding of the file. + */ + virtual int determine_encoding (void); + + /** + * Read the next ACEXML_Char. Return -1 if we are not able to + * return an ACEXML_Char, 0 if EOS is reached, or 1 if succeed. + */ + virtual int get (ACEXML_Char& ch); + + /** + * Read the next batch of ACEXML_Char strings + */ + virtual int read (ACEXML_Char *str, size_t len); + + /** + * Peek the next ACEXML_Char in the CharStream. Return the + * character if succeess, -1 if EOS is reached. + */ + virtual int peek (void); + + /* + * Get the character encoding for a byte stream or URI. + */ + virtual const ACEXML_Char *getEncoding (void); + + /* + * Get the systemId for the underlying CharStream + */ + virtual const ACEXML_Char* getSystemId (void); + + /** + * Resets the pointer to the beginning of the stream. + */ + virtual void rewind (void); + +private: + ACEXML_Char *start_; + ACEXML_Char *ptr_; + ACEXML_Char *end_; + ACEXML_Char* encoding_; + ACEXML_Char* name_; + +}; + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_STRCHARSTREAM_H_ */ diff --git a/ACE/ACEXML/common/StreamFactory.cpp b/ACE/ACEXML/common/StreamFactory.cpp new file mode 100644 index 00000000000..7cee4c1a65f --- /dev/null +++ b/ACE/ACEXML/common/StreamFactory.cpp @@ -0,0 +1,56 @@ +// $Id$ + +#include "ace/OS_NS_string.h" + +#include "ACEXML/common/StreamFactory.h" +#include "ACEXML/common/FileCharStream.h" +#include "ACEXML/common/HttpCharStream.h" + +#ifdef USE_ZZIP +#include "ACEXML/common/ZipCharStream.h" +#endif /* USE_ZZIP */ + +ACE_RCSID (common, StreamFactory, "$Id$") + +ACEXML_CharStream* +ACEXML_StreamFactory::create_stream (const ACEXML_Char* uri) +{ + if (uri == 0) + return 0; + ACEXML_FileCharStream* fstream = 0; + ACEXML_HttpCharStream* hstream = 0; + + if (ACE_OS::strstr (uri, ACE_TEXT("ftp://")) != 0) + { + return 0; + } + else if (ACE_OS::strstr (uri, ACE_TEXT ("http://")) != 0) + { + ACE_NEW_RETURN (hstream, ACEXML_HttpCharStream, 0); + if (hstream->open (uri) != -1) + return hstream; + } + else + { + if (ACE_OS::strstr (uri, ACE_TEXT ("file://")) != 0) + uri += 7; // Skip over file:// + ACE_NEW_RETURN (fstream, ACEXML_FileCharStream, 0); + if (fstream->open (uri) != -1) + return fstream; +#ifdef USE_ZZIP + else + { + ACEXML_ZipCharStream* zstream = 0; + ACE_NEW_RETURN (zstream, ACEXML_ZipCharStream, 0); + if (zstream->open (uri) != -1) + return zstream; + } +#endif /* USE_ZZIP */ + } + return 0; +} + +ACEXML_StreamFactory::~ACEXML_StreamFactory () +{ + // No op +} diff --git a/ACE/ACEXML/common/StreamFactory.h b/ACE/ACEXML/common/StreamFactory.h new file mode 100644 index 00000000000..9391eb6a299 --- /dev/null +++ b/ACE/ACEXML/common/StreamFactory.h @@ -0,0 +1,58 @@ +/** + * @file StreamFactory.h + * + * $Id$ + * + * @author Krishnakumar B + */ + +#ifndef _ACEXML_STREAM_FACTORY_H +#define _ACEXML_STREAM_FACTORY_H + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/XML_Types.h" + +// Forward declarations + +class ACEXML_CharStream; + +/** + * @class ACEXML_StreamFactory StreamFactory.h "ACEXML/common/ACEXML_StreamFactory.h" + * + * @brief A generic factory used to create an appropriate @sa + * ACEXML_CharStream from a SYSTEM id. This class creates a @sa + * ACEXML_FileCharStream or a @sa ACEXML_HttpCharStream depending on the + * URI supplied. + * + * @todo Write a stream abstraction for handling ftp:// type URIs and add + * a function to create and return such streams. That is the only chunk + * missing in the armour. + */ + +class ACEXML_Export ACEXML_StreamFactory +{ +public: + + // Destructor + virtual ~ACEXML_StreamFactory (void); + + /** + * Create the appropriate stream from the @a uri passed and return the + * stream. The caller is responsible for deallocating the returned + * stream. + * + * @param uri SYSTEM id or a stream of characters (in the case of a + * StrCharStream). + */ + virtual ACEXML_CharStream* create_stream (const ACEXML_Char* uri); +}; + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_STREAM_FACTORY_H */ diff --git a/ACE/ACEXML/common/Transcode.cpp b/ACE/ACEXML/common/Transcode.cpp new file mode 100644 index 00000000000..f94d93bba32 --- /dev/null +++ b/ACE/ACEXML/common/Transcode.cpp @@ -0,0 +1,311 @@ +// -*- C++ -*- $Id$ + +#include "ACEXML/common/Transcode.h" +#include "ace/OS_NS_string.h" + +int +ACEXML_Transcoder::utf162utf8 (ACEXML_UTF16 src, + ACEXML_UTF8 *dst, + size_t len) +{ + // Check for valid argument first... + + if (dst == 0) + return ACEXML_INVALID_ARGS; + + if (src < 0x80) + { + if (len < 1) + return ACEXML_DESTINATION_TOO_SHORT; + + *dst = static_cast (src); + return 1; + } + else if (src < 0x800) + { + if (len < 2) + return ACEXML_DESTINATION_TOO_SHORT; + + *dst = 0xc0 | (static_cast (src) / 0x40); + *(dst+1) = 0x80 | (static_cast (src) % 0x40); + return 2; + } + else + { + if (len < 3) + return ACEXML_DESTINATION_TOO_SHORT; + + // Surrogates (0xD800 - 0xDFFF) are not valid unicode values + if (src >= 0xD800 && src < 0xE000) + return ACEXML_IS_SURROGATE; + + *dst = 0xe0 | (static_cast (src) / 0x1000); + *(dst+1) = 0x80 | ((static_cast (src) % 0x1000) / 0x40); + *(dst+2) = 0x80 | (static_cast (src) % 0x40); + return 3; + } +} + +int +ACEXML_Transcoder::ucs42utf8 (ACEXML_UCS4 src, + ACEXML_UTF8 *dst, + size_t len) +{ + if (src < 0x10000) + { + int retv = ACEXML_Transcoder::utf162utf8 + (static_cast (src), + dst, len); + return (retv == ACEXML_IS_SURROGATE ? ACEXML_NON_UNICODE : retv); + } + else if (src >= 0x100000 && src < 0x110000) + { + if (len < 4) + return ACEXML_DESTINATION_TOO_SHORT; + + if (dst == 0) + return ACEXML_INVALID_ARGS; + + *dst = 0xf0 | (static_cast (src / 0x40000)); + *(dst+1) = 0x80 | ((static_cast (src % 0x40000)) / 0x1000); + *(dst+2) = 0x80 | ((static_cast (src % 0x1000)) / 0x40); + *(dst+3) = 0x80 | (static_cast (src % 0x40)); + return 4; + } + return ACEXML_NON_UNICODE; +} + + +int +ACEXML_Transcoder::ucs42utf16 (ACEXML_UCS4 src, + ACEXML_UTF16 *dst, + size_t len) +{ + if (dst == 0) + return ACEXML_INVALID_ARGS; + + if (src < 0x10000) + { + if (len < 1) + return ACEXML_DESTINATION_TOO_SHORT; + + if (src >= 0xD800 && src < 0xE000) + return ACEXML_NON_UNICODE; // Surrogates are not valid unicode value + + *dst = static_cast (src); + return 1; + } + else if (src >= 0x100000 && src < 0x110000) + // Scalar values are encoded into surrogates + { + if (len < 2) + return ACEXML_DESTINATION_TOO_SHORT; + + *dst = 0xD800 | (static_cast (src) / 0x400); + *(dst+1) = 0xDC00 | (static_cast (src) % 0x400); + return 2; + } + + return ACEXML_NON_UNICODE; +} + +int +ACEXML_Transcoder::surrogate2utf8 (ACEXML_UTF16 high, + ACEXML_UTF16 low, + ACEXML_UTF8 *dst, + size_t len) +{ + if (len < 3) + return ACEXML_DESTINATION_TOO_SHORT; + + if (dst == 0 || + (high >= 0xD800 && high < 0xDC00) || + (low >= 0xDC00 && low < 0xE000)) + return ACEXML_INVALID_ARGS; + + ACEXML_UCS4 src = (high - 0xD800) * 0x400 + (low - 0xDC00) + 0x10000; + *dst = static_cast (0xD800 | (src / 0x400)); + *(dst+1) = static_cast (0xDC00 | (src % 0x400)); + return 2; +} + +int +ACEXML_Transcoder::surrogate2ucs4 (ACEXML_UTF16 high, + ACEXML_UTF16 low, + ACEXML_UCS4 &dst) +{ + if ((high >= 0xD800 && high < 0xDC00) || + (low >= 0xDC00 && low < 0xE000)) + return ACEXML_INVALID_ARGS; + + dst = (high - 0xD800) * 0x400 + (low - 0xDC00) + 0x10000; + return ACEXML_SUCCESS; +} + +int +ACEXML_Transcoder::utf82ucs4 (const ACEXML_UTF8 *the_src, + size_t len, + ACEXML_UCS4 &dst) +{ + if (the_src == 0) + return ACEXML_INVALID_ARGS; + + const unsigned char *src = reinterpret_cast (the_src); + + size_t forward = 1; + + if (forward > len) + return ACEXML_END_OF_SOURCE; + + if (static_cast (*src) < 0x80) + dst = *src; + else if ((*src & 0xE0) == 0xC0) + { + dst = (*(src++) & 0x1f) * 0x40; + if (++forward > len) + return ACEXML_END_OF_SOURCE; + if ((*src & 0xC0) != 0x80) + return ACEXML_NON_UNICODE; // Error transcoding unicode scalar + dst += *src & 0x3f; + } + else if ((*src & 0xF0) == 0xE0) + { + dst = (*src++ & 0x0f) * 0x40; + if (++forward > len) + return ACEXML_END_OF_SOURCE; + if ((*src & 0xC0) != 0x80) + return ACEXML_NON_UNICODE; + dst = (dst + (*src++ & 0x3f)) * 0x40; + if (++forward > len) + return ACEXML_END_OF_SOURCE; + if ((*src & 0xC0) != 0x80) + return ACEXML_NON_UNICODE; + dst += *src & 0x3f; + } + else if ((*src & 0xF8) == 0xF0) + { + dst = (*src++ & 0x0f) * 0x40; + if (++forward > len) + return ACEXML_END_OF_SOURCE; + if ((*src & 0xC0) != 0x80) + return ACEXML_NON_UNICODE; + dst = (dst + (*src++ & 0x3f)) * 0x40; + if (++forward > len) + return ACEXML_END_OF_SOURCE; + if ((*src & 0xC0) != 0x80) + return ACEXML_NON_UNICODE; + dst = (dst + (*src++ & 0x3f)) * 0x40; + if (++forward > len) + return ACEXML_END_OF_SOURCE; + if ((*src & 0xC0) != 0x80) + return ACEXML_NON_UNICODE; + dst += *src & 0x3f; + } + else + return ACEXML_NON_UNICODE; + + return forward; +} + +int +ACEXML_Transcoder::utf162ucs4 (const ACEXML_UTF16 *src, + size_t len, + ACEXML_UCS4 &dst) +{ + if (src == 0) + return ACEXML_INVALID_ARGS; + + size_t forward = 1; + if (*src >= 0xDC00 && *src < 0xE000) + { + if (len < 2) + return ACEXML_END_OF_SOURCE; + return ACEXML_Transcoder::surrogate2ucs4 (*src, + *(src+1), + dst); + } + else + { + if (len < 1) + return ACEXML_END_OF_SOURCE; + dst = *src; + } + + return forward; +} + +int +ACEXML_Transcoder::utf8s2utf16s (const ACEXML_UTF8 *src, + ACEXML_UTF16 *dst, + size_t len) +{ + if (src == 0 || dst == 0) + return ACEXML_INVALID_ARGS; + + size_t src_len = ACE_OS::strlen (src) + 1; + + size_t total_len = 0; + int forward; + ACEXML_UCS4 temp; + + while (src_len > 0) + { + if ((forward = ACEXML_Transcoder::utf82ucs4 (src, + src_len, + temp)) <= 0) + return forward; + + src += forward; + src_len -= forward; + + if ((forward = ACEXML_Transcoder::ucs42utf16 (temp, + dst, + len)) <= 0) + return forward; + + total_len += forward; + dst += forward; + len -= forward; + } + + return static_cast (total_len); +} + +int +ACEXML_Transcoder::utf16s2utf8s (const ACEXML_UTF16 *src, + ACEXML_UTF8 *dst, + size_t len) +{ + if (src == 0 || dst == 0) + return ACEXML_INVALID_ARGS; + + size_t src_len = 1; + for (const ACEXML_UTF16 *p = src; *p++ != 0; ++src_len) + ; + + size_t total_len = 0; + int forward; + ACEXML_UCS4 temp; + + while (src_len > 0) + { + if ((forward = ACEXML_Transcoder::utf162ucs4 (src, + src_len, + temp)) <= 0) + return forward; + + src += forward; + src_len -= forward; + + if ((forward = ACEXML_Transcoder::ucs42utf8 (temp, + dst, + len)) <= 0) + return forward; + + total_len += forward; + dst += forward; + len -= forward; + } + + return static_cast (total_len); +} diff --git a/ACE/ACEXML/common/Transcode.h b/ACE/ACEXML/common/Transcode.h new file mode 100644 index 00000000000..1acf294c7aa --- /dev/null +++ b/ACE/ACEXML/common/Transcode.h @@ -0,0 +1,172 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Transcode.h + * + * This file declares functions to convert char string among different + * unicode encoding (utf8, utf16, utf32) + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +#ifndef _ACEXML_TRANSCODE_H_ +#define _ACEXML_TRANSCODE_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/XML_Types.h" + +/** + * @class ACEXML_Transcoder Transcode.h "ACEXML/common/Transcode.h" + * + * @brief ACEXML_Transcoder + * + * Wrapper class for performing transcoding among different UNICODE + * encoding. + */ +class ACEXML_Export ACEXML_Transcoder +{ +public: + /* + * Status of the conversion function. + */ + enum + { + ACEXML_SUCCESS = 0, + ACEXML_DESTINATION_TOO_SHORT = -1, + ACEXML_END_OF_SOURCE = -2, + ACEXML_INVALID_ARGS = -3, + ACEXML_IS_SURROGATE = -4, + ACEXML_NON_UNICODE = -5 + } ACEXML_STATUS; + + + // The following functions translate a unicode characters + // into different encoding. Return number of characters put into + // destination or consumed from src if success without + // error, otherwise, return corresponding error code. + /* + * Convert a UTF-16 character into a string in UTF-8 encoding. + * + * @return number of characters the function uses to store the + * converted string if it succeeds or one of the error STATUS + * otherwise. + */ + static int utf162utf8 (ACEXML_UTF16 src, + ACEXML_UTF8 *dst, + size_t len); + + /* + * Convert a UCS-4 character into a string in UTF-8 encoding. + * + * @return number of characters the function uses to store the + * converted string if it succeeds or one of the error STATUS + * otherwise. + */ + static int ucs42utf8 (ACEXML_UCS4 src, + ACEXML_UTF8 *dst, + size_t len); + + /* + * Convert a UCS-4 character into a string in UTF-16 encoding. + * + * @return number of characters the function uses to store the + * converted string if it succeeds or one of the error STATUS + * otherwise. + */ + static int ucs42utf16 (ACEXML_UCS4 src, + ACEXML_UTF16 *dst, + size_t len); + + /* + * Convert a UTF-16 surrogate character pair into a string in UTF-8 encoding. + * + * @return number of characters the function uses to store the + * converted string if it succeeds or one of the error STATUS + * otherwise. + */ + static int surrogate2utf8 (ACEXML_UTF16 high, + ACEXML_UTF16 low, + ACEXML_UTF8 *dst, + size_t len); + + /* + * Convert a UTF-16 surrogate character pair into a UCS-4 character. + * + * @return SUCCESS if it succeeds or one of the error STATUS + * otherwise. + */ + static int surrogate2ucs4 (ACEXML_UTF16 high, + ACEXML_UTF16 low, + ACEXML_UCS4 &dst); + + /* + * Convert the first UNICODE character in a UTF-8 character string + * into a UCS-4 character. + * + * @return number of characters the function consumed from the + * UTF-8 string if it succeeds or one of the error STATUS + * otherwise. + */ + static int utf82ucs4 (const ACEXML_UTF8 *src, + size_t len, + ACEXML_UCS4 &dst); + + /* + * Convert the first UNICODE character in a UTF-16 character string + * into a UCS-4 character. + * + * @return number of characters the function consumed from the + * UTF-16 string if it succeeds or one of the error STATUS + * otherwise. + */ + static int utf162ucs4 (const ACEXML_UTF16 *src, + size_t len, + ACEXML_UCS4 &dst); + +// static int utf82utf16 (const ACEXML_UTF8 *src, +// size_t len, +// ACEXML_UTF16 &dst); + // This function does not handle surrogates. + + // = The following functions are non-inlined: + + /* + * Convert a UTF-8 string into a UTF-16 string. + * + * @param len The length of @a dst string. + * + * @return number of characters the function consumed from the + * UTF-8 string if it succeeds or one of the error STATUS + * otherwise. + */ + static int utf8s2utf16s (const ACEXML_UTF8 *src, + ACEXML_UTF16 *dst, + size_t len); + + /* + * Convert a UTF-16 string into a UTF-8 string. + * + * @param len The length of @a dst string. + * + * @return number of characters the function uses in + * UTF-8 string if it succeeds or one of the error STATUS + * otherwise. + */ + static int utf16s2utf8s (const ACEXML_UTF16 *src, + ACEXML_UTF8 *dst, + size_t len); +}; + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_TRANSCODE_H_ */ diff --git a/ACE/ACEXML/common/URL_Addr.cpp b/ACE/ACEXML/common/URL_Addr.cpp new file mode 100644 index 00000000000..1d77c6da762 --- /dev/null +++ b/ACE/ACEXML/common/URL_Addr.cpp @@ -0,0 +1,178 @@ +// $Id$ + +#include "ACEXML/common/URL_Addr.h" + +ACE_RCSID(common, ACEXML_URL_Addr, "$Id$") + +#if !defined (__ACEXML_INLINE__) +#include "ACEXML/common/URL_Addr.inl" +#endif /* __ACEXML_INLINE__ */ + +#include "ace/Log_Msg.h" +#include "ace/Auto_Ptr.h" +#include "ace/OS_Memory.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_stdlib.h" +#include "ace/OS_NS_string.h" + +ACEXML_URL_Addr::ACEXML_URL_Addr (void) + : path_name_ (0), + addr_string_ (0), + addr_string_len_ (0) +{ +} + +int +ACEXML_URL_Addr::addr_to_string (ACEXML_Char *s, + size_t size, + int ipaddr_format) const +{ + size_t total_len = this->calculate_length (ipaddr_format); + if (size < total_len) + return -1; + else + { + ACE_OS::sprintf (s, ACE_TEXT ("%s:%d/%s"), + ACE_TEXT_CHAR_TO_TCHAR (ipaddr_format == 0 + ? this->get_host_name () + : this->get_host_addr ()), + this->get_port_number (), + this->get_path_name ()); + return 0; + } +} + +const ACEXML_Char * +ACEXML_URL_Addr::addr_to_string (int ipaddr_format) +{ + size_t size = this->calculate_length (ipaddr_format); + if (size > this->addr_string_len_) + { + ACE_ALLOCATOR_RETURN (this->addr_string_, + (ACEXML_Char *) ACE_OS::realloc(this->addr_string_, + size), 0); + this->addr_string_len_ = size; + } + ACE_OS::sprintf (this->addr_string_, + ACE_TEXT ("%s:%d/%s"), + ACE_TEXT_CHAR_TO_TCHAR (ipaddr_format == 0 + ? this->get_host_name () + : this->get_host_addr ()), + this->get_port_number (), + this->get_path_name ()); + return this->addr_string_; +} + +#if defined (ACE_USES_WCHAR) +int +ACEXML_URL_Addr::string_to_addr (const char* s, + int address_family) +{ + return this->string_to_addr (ACE_TEXT_CHAR_TO_TCHAR (s), address_family); +} +#endif /* ACE_USES_WCHAR */ + +int +ACEXML_URL_Addr::string_to_addr (const ACEXML_Char* s, + int /*address_family */) +{ + if (s == 0) + return -1; + + const ACEXML_Char* http = ACE_TEXT ("http://"); + size_t http_len = ACE_OS::strlen (http); + + // Check validity of URL + if (ACE_OS::strncmp (http, s, http_len) != 0) + ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("Invalid URL %s\n"), s), -1); + + const ACEXML_Char* url = 0; + // Get the host name + for (url = s + http_len; *url != '\0' && *url != ':' && *url != '/'; ++url) + ; + + size_t host_len = url - s; + host_len -= http_len; + + ACEXML_Char* host_name = 0; + ACE_NEW_RETURN (host_name, ACEXML_Char[host_len + 1], -1); + ACE_OS::strncpy (host_name, s + http_len, host_len); + host_name[host_len] = '\0'; + ACE_Auto_Basic_Array_Ptr cleanup_host_name (host_name); + + // Get the port number (if any) + unsigned short port = ACE_DEFAULT_HTTP_PORT; + if (*url == ':') + { + port = (unsigned short) ACE_OS::strtol (++url, 0, 10); // Skip over ':' + while ( *url != '\0' && *url != '/' ) + ++url; + } + + // Set the addr + int result = this->ACE_INET_Addr::set (port, host_name); + + if (result == -1) + return -1; + + // Get the path name + const ACEXML_Char* path_name = 0; + if (*url == '\0') + path_name = ACE_TEXT ("/"); + else + path_name = url; + + ACE_ALLOCATOR_RETURN (this->path_name_, ACE_OS::strdup (path_name), -1); + return result; +} + +ACEXML_URL_Addr::ACEXML_URL_Addr (const ACEXML_URL_Addr &addr) + : ACE_INET_Addr (), + path_name_ (0), + addr_string_ (0), + addr_string_len_ (0) +{ + if (this->set (addr) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACEXML_URL_Addr::ACEXML_URL_Addr"))); +} + +int +ACEXML_URL_Addr::set (const ACEXML_URL_Addr &addr) +{ + ACE_OS::free (this->path_name_); + ACE_OS::free (this->addr_string_); + if (this->ACE_INET_Addr::set (addr) == -1) + return -1; + else + { + if (addr.path_name_) + ACE_ALLOCATOR_RETURN (this->path_name_, + ACE_OS::strdup (addr.path_name_), + -1); + if (addr.addr_string_) + ACE_ALLOCATOR_RETURN (this->addr_string_, + ACE_OS::strdup (addr.addr_string_), + -1); + this->addr_string_len_ = addr.addr_string_len_; + return 0; + } +} + +ACEXML_URL_Addr::ACEXML_URL_Addr (const ACEXML_Char *host_name, + const ACEXML_Char *path_name, + unsigned short port) + : ACE_INET_Addr (port, host_name), + path_name_ (ACE_OS::strdup (path_name)), + addr_string_ (0), + addr_string_len_ (0) +{ +} + +ACEXML_URL_Addr::~ACEXML_URL_Addr (void) +{ + ACE_OS::free (this->path_name_); + ACE_OS::free (this->addr_string_); + this->path_name_ = 0; +} diff --git a/ACE/ACEXML/common/URL_Addr.h b/ACE/ACEXML/common/URL_Addr.h new file mode 100644 index 00000000000..3c6145c2c0d --- /dev/null +++ b/ACE/ACEXML/common/URL_Addr.h @@ -0,0 +1,137 @@ +/* -*- C++ -*- */ + +/** @file URL_Addr.h + * + * $Id$ + * + * @author Douglas C. Schmidt + * @author Krishnakumar B + * + */ + +#ifndef _ACEXML_URL_ADDR_H +#define _ACEXML_URL_ADDR_H + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Default_Constants.h" +#include "ace/INET_Addr.h" +#include "ACEXML/common/XML_Types.h" +#include "ACEXML/common/ACEXML_Export.h" + +/** + * @class ACEXML_URL_Addr URL_Addr.h "ACEXML/common/URL_Addr.h" + * + * Defines a URL address family address format. + */ +class ACEXML_Export ACEXML_URL_Addr : public ACE_INET_Addr +{ +public: + /// Initialization and termination methods. + ACEXML_URL_Addr (void); + + /// Constructor. + ACEXML_URL_Addr (const ACEXML_Char *host_name, + const ACEXML_Char *path_name, + unsigned short port = ACE_DEFAULT_HTTP_PORT); + + /// Copy constructor. + ACEXML_URL_Addr (const ACEXML_URL_Addr &addr); + + /// Essentially the copy constructor. + int set (const ACEXML_URL_Addr &addr); + + /** + * Initializes an from the
, which can be + * "ip-number:port-number/path-name" (e.g., + * "www.cs.wustl.edu:1234/~schmidt/" "ip-number:port-number/path-name" + * (e.g., "128.252.166.57:1234/~schmidt"). If there is no ':' in the + *
it is assumed to be an ip-number or ip-address number, with + * the port number . + */ + virtual int string_to_addr (const ACEXML_Char* address, + int address_family = AF_UNSPEC); + + // Function to shut up Borland C++ +#if defined (ACE_USES_WCHAR) + virtual int string_to_addr (const char* addresss, + int address_family = AF_UNSPEC); +#endif + + /** + * Transform the current address into string format. If + * is non-0 this produces + * "ip-number:port-number/path-name" (e.g., + * "128.252.166.57:80/~schmidt/"), whereas if is 0 this + * produces "ip-name:port-number" (e.g., + * "www.cs.wustl.edu:80/~schmidt/"). Returns -1 if the of the + * is too small, else 0. + */ + virtual int addr_to_string (ACEXML_Char *s, + size_t size, + int ipaddr_format = 1) const; + + /** + * Transform the current address into string format. If + * is non-0 this produces + * "ip-number:port-number/path-name" (e.g., + * "128.252.166.57:80/~schmidt/"), whereas if is 0 this + * produces "ip-name:port-number" (e.g., + * "www.cs.wustl.edu:80/~schmidt/"). Uses dynamic memory, which is + * allocated on demand and deallocated when the object is destroyed. + * Returns -1 if dynamic memory fails, else 0. + */ + virtual const ACEXML_Char *addr_to_string (int ipaddr_format = 1); + + /// Assignment operator. + void operator= (const ACEXML_URL_Addr &addr); + + /// Destructor. + ~ACEXML_URL_Addr (void); + + /** + * Compare two addresses for equality. The addresses are considered + * equal if they contain the same IP address, port number, and path name. + */ + bool operator == (const ACEXML_URL_Addr &SAP) const; + + /// Compare two addresses for inequality. + bool operator != (const ACEXML_URL_Addr &SAP) const; + + /// Computes and returns hash value. + virtual u_long hash (void) const; + + /// Return the path name. + const ACEXML_Char *get_path_name (void) const; + + /// Commit suicide. + int destroy (void); + +private: + + /// Calculate the maximum length of the address string + size_t calculate_length (int ipaddr_format) const; + + /// Our path name. + ACEXML_Char *path_name_; + + /// The dynamically created address string that's used for the + /// method. + ACEXML_Char *addr_string_; + + /// Current length of the + size_t addr_string_len_; +}; + +#if defined (__ACEXML_INLINE__) +# include "ACEXML/common/URL_Addr.inl" +#endif /* __ACEXML_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_URL_ADDR_H */ diff --git a/ACE/ACEXML/common/URL_Addr.inl b/ACE/ACEXML/common/URL_Addr.inl new file mode 100644 index 00000000000..b1ac1db8322 --- /dev/null +++ b/ACE/ACEXML/common/URL_Addr.inl @@ -0,0 +1,65 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/ACE.h" +#include "ace/INET_Addr.h" +#include "ace/Log_Msg.h" +#include "ace/OS_NS_string.h" + +ACE_INLINE size_t +ACEXML_URL_Addr::calculate_length (int ipaddr_format) const +{ + return ACE_OS::strlen (ipaddr_format == 0 ? + this->get_host_name () : this->get_host_addr ()) + + ACE_OS::strlen ("65536") // Assume the max port number. + + ACE_OS::strlen (this->get_path_name ()) + + sizeof (':') + + sizeof ('/') + + sizeof ('\0'); // For trailing '\0'. +} + +ACE_INLINE void +ACEXML_URL_Addr::operator= (const ACEXML_URL_Addr &addr) +{ + if (this->set (addr) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACEXML_URL_Addr::ACEXML_URL_Addr"))); +} + +ACE_INLINE u_long +ACEXML_URL_Addr::hash (void) const +{ + u_long result = this->ACE_INET_Addr::hash () + + ACE::hash_pjw (this->get_path_name ()); + return result; +} + +ACE_INLINE bool +ACEXML_URL_Addr::operator== (const ACEXML_URL_Addr &addr) const +{ + return ACE_OS::strcmp (addr.get_path_name (), this->get_path_name ()) == 0 + && addr.get_port_number () == this->get_port_number () + && addr.get_ip_address () == this->get_ip_address (); +} + +ACE_INLINE bool +ACEXML_URL_Addr::operator!= (const ACEXML_URL_Addr &addr) const +{ + return !(*this == addr); +} + +ACE_INLINE const ACEXML_Char * +ACEXML_URL_Addr::get_path_name (void) const +{ + return this->path_name_; +} + +ACE_INLINE int +ACEXML_URL_Addr::destroy (void) +{ + // Commit suicide. + delete this; + return 0; +} diff --git a/ACE/ACEXML/common/Validator.cpp b/ACE/ACEXML/common/Validator.cpp new file mode 100644 index 00000000000..cf3ce502200 --- /dev/null +++ b/ACE/ACEXML/common/Validator.cpp @@ -0,0 +1,8 @@ +// $Id$ + +#include "ACEXML/common/Validator.h" + +ACEXML_Validator::~ACEXML_Validator () +{ + +} diff --git a/ACE/ACEXML/common/Validator.h b/ACE/ACEXML/common/Validator.h new file mode 100644 index 00000000000..fad96bf2f91 --- /dev/null +++ b/ACE/ACEXML/common/Validator.h @@ -0,0 +1,64 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Validator.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= +#ifndef _ACEXML_VALIDATOR_H_ +#define _ACEXML_VALIDATOR_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/Attributes.h" +#include "ACEXML/common/Env.h" +#include "ACEXML/common/SAXExceptions.h" + +/** + * @class ACEXML_Validator Validator.h "common/Validator.h" + * + * @brief An abstract virtual class defining validator interface. + * + * An validator provides validation service for one XML element. + * ACEXML_Validators are stateful object. Implementations should + * remember the current element encountered and determine if + * it's a valid sequence of child elements. A parser fishes + * out a validator of certain + */ +class ACEXML_Export ACEXML_Validator +{ +public: + virtual ~ACEXML_Validator () = 0; + + /** + * Validate attributes of an element. + * + * @retval 0 if valid, -1 otherwise. + */ + virtual int startElement (ACEXML_Attributes *atts ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Validate the next child element. + * + * @retval 0 if valid, -1 otherwise. + */ + virtual int nextElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) + = 0; +}; + + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_VALIDATOR_H_ */ diff --git a/ACE/ACEXML/common/XMLFilter.h b/ACE/ACEXML/common/XMLFilter.h new file mode 100644 index 00000000000..c012ee706e2 --- /dev/null +++ b/ACE/ACEXML/common/XMLFilter.h @@ -0,0 +1,56 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file XMLFilter.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= +#ifndef _ACEXML_XMLFILTER_H_ +#define _ACEXML_XMLFILTER_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/XMLReader.h" + +/** + * @class ACEXML_XMLFilter XMLFilter.h "ACEXML/common/XMLFilter.h" + * + * @brief ACEXML_XMLFilter + * + * An XML filter is like an XML reader, except that it obtains its events + * from another XML reader rather than a primary source like an XML + * document or database. Filters can modify a stream of events as they pass + * on to the final application. + * + * The XMLFilterImpl helper class provides a convenient base for creating + * SAX2 filters, by passing on all ACEXML_EntityResolver, + * ACEXML_DTDHandler, ACEXML_ContentHandler and ACEXML_ErrorHandler events + * automatically. + */ +class ACEXML_Export ACEXML_XMLFilter : public ACEXML_XMLReader +{ +public: + /** + * Get the parent reader. + */ + virtual ACEXML_XMLReader *getParent (void) const = 0; + + /** + * Set the parent reader. + */ + virtual void setParent (ACEXML_XMLReader *parent) = 0; +}; + + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_XMLFILTER_H_ */ diff --git a/ACE/ACEXML/common/XMLFilterImpl.cpp b/ACE/ACEXML/common/XMLFilterImpl.cpp new file mode 100644 index 00000000000..6e5be6b7efa --- /dev/null +++ b/ACE/ACEXML/common/XMLFilterImpl.cpp @@ -0,0 +1,314 @@ +// -*- C++ -*- $Id$ + +#include "ACEXML/common/XMLFilterImpl.h" + +#if !defined (__ACEXML_INLINE__) +# include "ACEXML/common/XMLFilterImpl.inl" +#endif /* __ACEXML_INLINE__ */ + +ACEXML_XMLFilterImpl::ACEXML_XMLFilterImpl (void) + : parent_ (0), + locator_ (0), + entityResolver_ (0), + dtdHandler_ (0), + contentHandler_ (0), + errorHandler_ (0) +{ +} + +ACEXML_XMLFilterImpl::ACEXML_XMLFilterImpl (ACEXML_XMLReader *parent) + : parent_ (parent), + locator_ (0), + entityResolver_ (0), + dtdHandler_ (0), + contentHandler_ (0), + errorHandler_ (0) +{ +} + +ACEXML_XMLFilterImpl::~ACEXML_XMLFilterImpl (void) +{ + // @@ How are all the object lifecycles managed? +} + +void +ACEXML_XMLFilterImpl::parse (ACEXML_InputSource *input ACEXML_ENV_ARG_DECL) +{ + if (this->setupParser () < 0) + { + ACEXML_THROW (ACEXML_SAXException (ACE_TEXT ("No Parent available"))); + } + this->parent_->parse (input ACEXML_ENV_ARG_PARAMETER); + return; +} + +void +ACEXML_XMLFilterImpl::parse (const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) +{ + if (this->setupParser () < 0) + { + ACEXML_THROW (ACEXML_SAXException (ACE_TEXT ("No Parent available"))); + } + + this->parent_->parse (new ACEXML_InputSource (systemId) ACEXML_ENV_ARG_PARAMETER); + return; +} + +int +ACEXML_XMLFilterImpl::getFeature (const ACEXML_Char *name ACEXML_ENV_ARG_DECL) +{ + if (this->parent_ != 0) + return this->parent_->getFeature (name ACEXML_ENV_ARG_PARAMETER); + + ACEXML_THROW_RETURN (ACEXML_SAXNotRecognizedException (name), 0); +} + +void * +ACEXML_XMLFilterImpl::getProperty (const ACEXML_Char *name ACEXML_ENV_ARG_DECL) +{ + if (this->parent_ != 0) + return this->parent_->getProperty (name ACEXML_ENV_ARG_PARAMETER); + + ACEXML_THROW_RETURN (ACEXML_SAXNotRecognizedException (name), 0); +} + +void +ACEXML_XMLFilterImpl::setFeature (const ACEXML_Char *name, + int boolean_value ACEXML_ENV_ARG_DECL) +{ + if (this->parent_ != 0) + { + this->parent_->setFeature (name, + boolean_value ACEXML_ENV_ARG_PARAMETER); + return; + } + + ACEXML_THROW (ACEXML_SAXNotRecognizedException (name)); +} + +void +ACEXML_XMLFilterImpl::setProperty (const ACEXML_Char *name, + void *value ACEXML_ENV_ARG_DECL) +{ + if (this->parent_ != 0) + { + this->parent_->setProperty (name, + value ACEXML_ENV_ARG_PARAMETER); + return; + } + + ACEXML_THROW (ACEXML_SAXNotRecognizedException (name)); +} + +ACEXML_XMLReader * +ACEXML_XMLFilterImpl::getParent (void) const +{ + return this->parent_; +} + +void +ACEXML_XMLFilterImpl::setParent (ACEXML_XMLReader *parent) +{ + this->parent_ = parent; +} + +void +ACEXML_XMLFilterImpl::characters (const ACEXML_Char *ch, + size_t start, + size_t length + ACEXML_ENV_ARG_DECL) +{ + if (this->contentHandler_ != 0) + this->contentHandler_->characters (ch, start, length ACEXML_ENV_ARG_PARAMETER); +} + +void +ACEXML_XMLFilterImpl::endDocument (ACEXML_ENV_SINGLE_ARG_DECL) +{ + if (this->contentHandler_ != 0) + this->contentHandler_->endDocument (ACEXML_ENV_SINGLE_ARG_PARAMETER); +} + +void +ACEXML_XMLFilterImpl::endElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) +{ + if (this->contentHandler_ != 0) + this->contentHandler_->endElement (namespaceURI, + localName, + qName ACEXML_ENV_ARG_PARAMETER); +} + +void +ACEXML_XMLFilterImpl::endPrefixMapping (const ACEXML_Char *prefix ACEXML_ENV_ARG_DECL) +{ + if (this->contentHandler_ != 0) + this->contentHandler_->endPrefixMapping (prefix ACEXML_ENV_ARG_PARAMETER); +} + +void +ACEXML_XMLFilterImpl::ignorableWhitespace (const ACEXML_Char *ch, + int start, + int length ACEXML_ENV_ARG_DECL) +{ + if (this->contentHandler_ != 0) + this->contentHandler_->ignorableWhitespace (ch, + start, + length ACEXML_ENV_ARG_PARAMETER); +} + +void +ACEXML_XMLFilterImpl::processingInstruction (const ACEXML_Char *target, + const ACEXML_Char *data ACEXML_ENV_ARG_DECL) +{ + if (this->contentHandler_ != 0) + this->contentHandler_->processingInstruction (target, + data ACEXML_ENV_ARG_PARAMETER); +} + +void +ACEXML_XMLFilterImpl::setDocumentLocator (ACEXML_Locator *locator) +{ + if (this->contentHandler_ != 0) + this->contentHandler_->setDocumentLocator (locator); +} + +void +ACEXML_XMLFilterImpl::skippedEntity (const ACEXML_Char *name ACEXML_ENV_ARG_DECL) +{ + if (this->contentHandler_ != 0) + this->contentHandler_->skippedEntity (name ACEXML_ENV_ARG_PARAMETER); +} + +void +ACEXML_XMLFilterImpl::startDocument (ACEXML_ENV_SINGLE_ARG_DECL) +{ + if (this->contentHandler_ != 0) + this->contentHandler_->startDocument (ACEXML_ENV_SINGLE_ARG_PARAMETER); +} + +void +ACEXML_XMLFilterImpl::startElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName, + ACEXML_Attributes *atts ACEXML_ENV_ARG_DECL) +{ + if (this->contentHandler_ != 0) + this->contentHandler_->startElement (namespaceURI, + localName, + qName, + atts ACEXML_ENV_ARG_PARAMETER); +} + +void +ACEXML_XMLFilterImpl::startPrefixMapping (const ACEXML_Char *prefix, + const ACEXML_Char *uri ACEXML_ENV_ARG_DECL) +{ + if (this->contentHandler_ != 0) + this->contentHandler_->startPrefixMapping (prefix, + uri ACEXML_ENV_ARG_PARAMETER); +} + +void +ACEXML_XMLFilterImpl::notationDecl (const ACEXML_Char *name, + const ACEXML_Char *publicId, + const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) +{ + if (this->dtdHandler_ != 0) + this->dtdHandler_->notationDecl (name, + publicId, + systemId ACEXML_ENV_ARG_PARAMETER); +} + +void +ACEXML_XMLFilterImpl::unparsedEntityDecl (const ACEXML_Char *name, + const ACEXML_Char *publicId, + const ACEXML_Char *systemId, + const ACEXML_Char *notationName ACEXML_ENV_ARG_DECL) +{ + if (this->dtdHandler_ != 0) + this->dtdHandler_->unparsedEntityDecl (name, + publicId, + systemId, + notationName ACEXML_ENV_ARG_PARAMETER); +} + +ACEXML_InputSource * +ACEXML_XMLFilterImpl::resolveEntity (const ACEXML_Char *publicId, + const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) +{ + if (this->entityResolver_ != 0) + return this->entityResolver_->resolveEntity (publicId, + systemId ACEXML_ENV_ARG_PARAMETER); + return 0; +} + +void +ACEXML_XMLFilterImpl::error (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL) +{ + if (this->errorHandler_ != 0) + this->errorHandler_->error (exception ACEXML_ENV_ARG_PARAMETER); +} + +void +ACEXML_XMLFilterImpl::fatalError (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL) +{ + if (this->errorHandler_ != 0) + this->errorHandler_->fatalError (exception ACEXML_ENV_ARG_PARAMETER); +} + +void +ACEXML_XMLFilterImpl::warning (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL) +{ + if (this->errorHandler_ != 0) + this->errorHandler_->warning (exception ACEXML_ENV_ARG_PARAMETER); +} + +ACEXML_DTDHandler * +ACEXML_XMLFilterImpl::getDTDHandler (void) const +{ + return this->dtdHandler_; +} + +ACEXML_ContentHandler * +ACEXML_XMLFilterImpl::getContentHandler (void) const +{ + return this->contentHandler_; +} + +ACEXML_EntityResolver * +ACEXML_XMLFilterImpl::getEntityResolver (void) const +{ + return this->entityResolver_; +} + +ACEXML_ErrorHandler * +ACEXML_XMLFilterImpl::getErrorHandler (void) const +{ + return this->errorHandler_; +} + +void +ACEXML_XMLFilterImpl::setDTDHandler (ACEXML_DTDHandler *handler) +{ + this->dtdHandler_ = handler; +} + +void +ACEXML_XMLFilterImpl::setContentHandler (ACEXML_ContentHandler *handler) +{ + this->contentHandler_ = handler; +} + +void +ACEXML_XMLFilterImpl::setEntityResolver (ACEXML_EntityResolver *handler) +{ + this->entityResolver_ = handler; +} + +void +ACEXML_XMLFilterImpl::setErrorHandler (ACEXML_ErrorHandler *handler) +{ + this->errorHandler_ = handler; +} diff --git a/ACE/ACEXML/common/XMLFilterImpl.h b/ACE/ACEXML/common/XMLFilterImpl.h new file mode 100644 index 00000000000..fa4913e0910 --- /dev/null +++ b/ACE/ACEXML/common/XMLFilterImpl.h @@ -0,0 +1,270 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file XMLFilterImpl.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= +#ifndef ACEXML_XMLFILTERIMPL_H +#define ACEXML_XMLFILTERIMPL_H +#include /**/ "ace/pre.h" + +#include "ACEXML/common/XMLFilter.h" +#include "ACEXML/common/XMLReader.h" +#include "ACEXML/common/Locator.h" +#include "ACEXML/common/ContentHandler.h" +#include "ACEXML/common/DTDHandler.h" +#include "ACEXML/common/EntityResolver.h" +#include "ACEXML/common/ErrorHandler.h" + +/** + * @class ACEXML_XMLFilterImpl XMLFilterImpl.h "ACEXML/common/XMLFilterImpl.h" + * + * @brief ACEXML_XMLFilterImpl + * + * This class is designed to sit between an XMLReader and the client + * application's event handlers. By default, it does nothing but pass + * requests up to the reader and events on to the handlers unmodified, but + * subclasses can override specific methods to modify the event stream or + * the configuration requests as they pass through. + */ +class ACEXML_Export ACEXML_XMLFilterImpl + : public ACEXML_XMLFilter, + public ACEXML_ContentHandler, + public ACEXML_DTDHandler, + public ACEXML_EntityResolver, + public ACEXML_ErrorHandler +{ +public: + /** + * Default constructor. Create with no parent. + */ + ACEXML_XMLFilterImpl (void); + + /** + * Construct an XML filter with the specified parent. + */ + ACEXML_XMLFilterImpl (ACEXML_XMLReader *parent); + + /** + * Destructor. + */ + virtual ~ACEXML_XMLFilterImpl (void); + + /* + * Look up the value of a feature. + */ + virtual int getFeature (const ACEXML_Char *name ACEXML_ENV_ARG_DECL); + + /* + * Look up the value of a property. + */ + virtual void * getProperty (const ACEXML_Char *name ACEXML_ENV_ARG_DECL); + + /* + * Parse an XML document. + */ + virtual void parse (ACEXML_InputSource *input ACEXML_ENV_ARG_DECL); + + /* + * Parse an XML document from a system identifier (URI). + */ + virtual void parse (const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) + // @@ throw IOException??? + ; + + /* + * Set the state of a feature. + */ + virtual void setFeature (const ACEXML_Char *name, + int boolean_value ACEXML_ENV_ARG_DECL); + + /* + * Set the value of a property. + */ + virtual void setProperty (const ACEXML_Char *name, + void *value ACEXML_ENV_ARG_DECL); + + /* + * Get the parent reader. + */ + virtual ACEXML_XMLReader *getParent (void) const; + + /* + * Set the parent reader. + */ + virtual void setParent (ACEXML_XMLReader *parent); + + /* + * Get the current DTD event handler. + */ + virtual ACEXML_DTDHandler *getDTDHandler (void) const; + + /* + * Get the current content event handler. + */ + virtual ACEXML_ContentHandler *getContentHandler (void) const; + + /* + * Get the current entity resolver. + */ + virtual ACEXML_EntityResolver *getEntityResolver (void) const; + + /* + * Get the current error event handler. + */ + virtual ACEXML_ErrorHandler *getErrorHandler (void) const; + + /* + * Set the DTD event handler. + */ + virtual void setDTDHandler (ACEXML_DTDHandler *handler); + + /* + * Set the content event handler. + */ + virtual void setContentHandler (ACEXML_ContentHandler *handler); + + /* + * Set the entity resolver. + */ + virtual void setEntityResolver (ACEXML_EntityResolver *handler); + + /* + * Set the error event handler. + */ + virtual void setErrorHandler (ACEXML_ErrorHandler *handler); + + /* + * Receive notification of character data. + */ + virtual void characters (const ACEXML_Char *ch, + size_t start, + size_t length + ACEXML_ENV_ARG_DECL); + + /* + * Receive notification of the end of a document. + */ + virtual void endDocument (ACEXML_ENV_SINGLE_ARG_DECL); + + /* + * Receive notification of the end of an element. + */ + virtual void endElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL); + + /* + * End the scope of a prefix-URI mapping. + */ + virtual void endPrefixMapping (const ACEXML_Char *prefix ACEXML_ENV_ARG_DECL); + + /* + * Receive notification of ignorable whitespace in element content. + */ + virtual void ignorableWhitespace (const ACEXML_Char *ch, + int start, + int length ACEXML_ENV_ARG_DECL); + + /* + * Receive notification of a processing instruction. + */ + virtual void processingInstruction (const ACEXML_Char *target, + const ACEXML_Char *data ACEXML_ENV_ARG_DECL); + + /* + * Receive an object for locating the origin of SAX document events. + */ + virtual void setDocumentLocator (ACEXML_Locator *locator) ; + + /* + * Receive notification of a skipped entity. + */ + virtual void skippedEntity (const ACEXML_Char *name ACEXML_ENV_ARG_DECL); + + /* + * Receive notification of the beginning of a document. + */ + virtual void startDocument (ACEXML_ENV_SINGLE_ARG_DECL); + + /* + * Receive notification of the beginning of an element. + */ + virtual void startElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName, + ACEXML_Attributes *atts ACEXML_ENV_ARG_DECL); + + /* + * Begin the scope of a prefix-URI Namespace mapping. + */ + virtual void startPrefixMapping (const ACEXML_Char *prefix, + const ACEXML_Char *uri ACEXML_ENV_ARG_DECL); + + // *** Methods inherit from ACEXML_DTDHandler. + + /* + * Receive notification of a notation declaration event. + */ + virtual void notationDecl (const ACEXML_Char *name, + const ACEXML_Char *publicId, + const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL); + + /* + * Receive notification of an unparsed entity declaration event. + */ + virtual void unparsedEntityDecl (const ACEXML_Char *name, + const ACEXML_Char *publicId, + const ACEXML_Char *systemId, + const ACEXML_Char *notationName ACEXML_ENV_ARG_DECL); + + // Methods inherit from ACEXML_EnitityResolver. + + /* + * Allow the application to resolve external entities. + */ + virtual ACEXML_InputSource *resolveEntity (const ACEXML_Char *publicId, + const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL); + + // Methods inherit from ACEXML_ErrorHandler. + + /* + * Receive notification of a recoverable error. + */ + virtual void error (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL); + + /* + * Receive notification of a non-recoverable error. + */ + virtual void fatalError (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL); + + /* + * Receive notification of a warning. + */ + virtual void warning (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL); +protected: + int setupParser (void); + // Set up the event handlers of parent parser to this. + // Returns -1 if no valid parent is set. + +private: + ACEXML_XMLReader *parent_; + ACEXML_Locator *locator_; + ACEXML_EntityResolver *entityResolver_; + ACEXML_DTDHandler *dtdHandler_; + ACEXML_ContentHandler *contentHandler_; + ACEXML_ErrorHandler *errorHandler_; +}; + +#if defined (__ACEXML_INLINE__) +# include "ACEXML/common/XMLFilterImpl.inl" +#endif /* __ACEXML_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* ACEXML_XMLFILTERIMPL_H */ diff --git a/ACE/ACEXML/common/XMLFilterImpl.inl b/ACE/ACEXML/common/XMLFilterImpl.inl new file mode 100644 index 00000000000..4be2ceeceea --- /dev/null +++ b/ACE/ACEXML/common/XMLFilterImpl.inl @@ -0,0 +1,14 @@ +// -*- C++ -*- $Id$ + +ACEXML_INLINE int +ACEXML_XMLFilterImpl::setupParser (void) +{ + if (this->parent_ == 0) + return -1; + + this->parent_->setEntityResolver (this); + this->parent_->setDTDHandler (this); + this->parent_->setContentHandler (this); + this->parent_->setErrorHandler (this); + return 0; +} diff --git a/ACE/ACEXML/common/XMLReader.cpp b/ACE/ACEXML/common/XMLReader.cpp new file mode 100644 index 00000000000..d762c79a3a2 --- /dev/null +++ b/ACE/ACEXML/common/XMLReader.cpp @@ -0,0 +1,11 @@ +#include "XMLReader.h" + + +ACE_RCSID (common, + XMLReader, + "$Id$") + + +ACEXML_XMLReader::~ACEXML_XMLReader (void) +{ +} diff --git a/ACE/ACEXML/common/XMLReader.h b/ACE/ACEXML/common/XMLReader.h new file mode 100644 index 00000000000..9cbc6bca7f2 --- /dev/null +++ b/ACE/ACEXML/common/XMLReader.h @@ -0,0 +1,132 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file XMLReader.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= +#ifndef _ACEXML_XMLREADER_H_ +#define _ACEXML_XMLREADER_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/ContentHandler.h" +#include "ACEXML/common/DTDHandler.h" +#include "ACEXML/common/EntityResolver.h" +#include "ACEXML/common/ErrorHandler.h" + +/** + * @class ACEXML_XMLReader XMLReader.h "ACEXML/common/XMLReader.h" + * + * @brief ACEXML_XMLReader + * + * XMLReader is the interface that an XML parser's SAX2 driver must + * implement. This interface allows an application to set and query + * features and properties in the parser, to register event handlers + * for document processing, and to initiate a document parse. + * + * All SAX interfaces are assumed to be synchronous: the parse methods + * must not return until parsing is complete, and readers must wait + * for an event-handler callback to return before reporting the next + * event. + */ +class ACEXML_Export ACEXML_XMLReader +{ +public: + + virtual ~ACEXML_XMLReader (void); + + /** + * Return the current content handler. + */ + virtual ACEXML_ContentHandler *getContentHandler (void) const = 0; + + /** + * Return the current DTD handler. + */ + virtual ACEXML_DTDHandler *getDTDHandler (void) const = 0; + + /** + * Return the current entity resolver. + */ + virtual ACEXML_EntityResolver *getEntityResolver (void) const = 0; + + /** + * Return the current error handler. + */ + virtual ACEXML_ErrorHandler *getErrorHandler (void) const = 0; + + /** + * Look up the value of a feature. This method allows + * programmers to check whether a specific feature has been + * activated in the parser. + */ + virtual int getFeature (const ACEXML_Char *name ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Look up the value of a property. + */ + virtual void * getProperty (const ACEXML_Char *name ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Parse an XML document. + */ + virtual void parse (ACEXML_InputSource *input ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Parse an XML document from a system identifier (URI). + */ + virtual void parse (const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Allow an application to register a content event handler. + */ + virtual void setContentHandler (ACEXML_ContentHandler *handler) = 0; + + /** + * Allow an application to register a DTD event handler. + */ + virtual void setDTDHandler (ACEXML_DTDHandler *handler) = 0; + + /** + * Allow an application to register an entity resolver. + */ + virtual void setEntityResolver (ACEXML_EntityResolver *resolver) = 0; + + /** + * Allow an application to register an error event handler. + */ + virtual void setErrorHandler (ACEXML_ErrorHandler *handler) = 0; + + /** + * Activating or deactivating a feature. + */ + virtual void setFeature (const ACEXML_Char *name, + int boolean_value ACEXML_ENV_ARG_DECL) + = 0; + + /** + * Set the value of a property. + */ + virtual void setProperty (const ACEXML_Char *name, + void *value ACEXML_ENV_ARG_DECL) + = 0; +}; + + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_XMLREADER_H_ */ diff --git a/ACE/ACEXML/common/XML_Codecs.cpp b/ACE/ACEXML/common/XML_Codecs.cpp new file mode 100644 index 00000000000..9566158ddfd --- /dev/null +++ b/ACE/ACEXML/common/XML_Codecs.cpp @@ -0,0 +1,94 @@ +// -*- C++ -*- $Id$ + +#include "ace/Auto_Ptr.h" +#include "ace/OS_Memory.h" +#include "ace/OS_NS_string.h" +#include "ACEXML/common/XML_Codecs.h" + +ACE_RCSID (common, XML_Codecs, "$Id$") + +ACEXML_Char* +ACEXML_Base64::encode (const ACEXML_Char* input, + size_t* output_len) +{ + if (!input) + return 0; + size_t len = ACE_OS::strlen (input); + + ACE_Byte* buf = 0; + ACE_NEW_RETURN (buf, + ACE_Byte[len], + 0); + ACE_Auto_Basic_Array_Ptr cleanup_buf (buf); + + for (size_t i = 0; i < len; ++i) + buf[i] = (ACE_Byte)input[i]; + buf[len] = 0; + + size_t encode_len = 0; + ACE_Byte* encodedBuf = ACE_Base64::encode (buf, len, &encode_len); + + if (!encodedBuf) + return 0; + + ACEXML_Char* result = 0; + ACE_NEW_RETURN (result, + ACEXML_Char[encode_len+1], + 0); + + for (size_t j = 0; j < encode_len; ++j) + result[j] = (ACEXML_Char)encodedBuf[j]; + result[encode_len] = 0; + + *output_len = encode_len; + delete[] encodedBuf; + return result; +} + + +ACEXML_Char* +ACEXML_Base64::decode (const ACEXML_Char* input, + size_t* output_len) +{ + if (!input) + return 0; + + size_t len = ACE_OS::strlen (input); + + ACE_Byte* buf = 0; + + ACE_NEW_RETURN (buf, + ACE_Byte[len], + 0); + + ACE_Auto_Basic_Array_Ptr cleanup (buf); + + for (size_t i = 0; i < len; ++i) + buf[i] = (ACE_Byte)input[i]; + + buf[len] = 0; + + size_t decode_len = 0; + + ACE_Byte* decodedBuf = ACE_Base64::decode (buf, &decode_len); + + if (!decodedBuf) + return 0; + + ACEXML_Char* result = 0; + + ACE_NEW_RETURN (result, + ACEXML_Char[decode_len+1], + 0); + + for (size_t j = 0; j < decode_len; ++j) + result[j] = (ACEXML_Char)decodedBuf[j]; + + result[decode_len] = 0; + + *output_len = decode_len; + delete[] decodedBuf; + + return result; +} + diff --git a/ACE/ACEXML/common/XML_Codecs.h b/ACE/ACEXML/common/XML_Codecs.h new file mode 100644 index 00000000000..10101d4e5b4 --- /dev/null +++ b/ACE/ACEXML/common/XML_Codecs.h @@ -0,0 +1,73 @@ +// -*- C++ -*- + +/** + * @file XML_Codecs.h + * + * $Id$ + * + * @author Krishnakumar B + * + * XML_Codecs is a generic wrapper for various encoding and decoding + * mechanisms used in ACEXML. Currently it includes support for handling + * Base64 content transfer-encoding of ACEXML_Chars. + * + */ + +#ifndef _ACEXML_XML_CODECS_H +#define _ACEXML_XML_CODECS_H + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/XML_Types.h" +#include "ace/Codecs.h" + +/** + * @class ACEXML_Base64 + * + * @brief Encode/Decode a stream of ACEXML_Chars according to Base64 encoding. + * + * This class provides methods to encode or decode a stream of ACEXML_Chars + * to/from Base64 encoding. It doesn't convert the input stream to a + * canonical form before encoding. + * + */ +class ACEXML_Export ACEXML_Base64 : public ACE_Base64 +{ +public: + + //@{ + + /** + * Encodes a stream of octets to Base64 data + * + * @param input Binary data in ACEXML_Char stream. + * @param output_len Length of the encoded Base64 ACEXML_Char stream. + * @return Encoded Base64 data in ACEXML_Char stream or NULL if input data + * cannot be encoded. + */ + + static ACEXML_Char* encode (const ACEXML_Char* input, + size_t* output_len); + /** + * Decodes a stream of Base64 to octets data + * + * @param input Encoded Base64 data in ACEXML_Char stream. + * @param output_len Length of the binary ACEXML_Char stream. + * @return Binary data in ACEXML_Char stream or NULL if input data cannot + * be encoded. + */ + static ACEXML_Char* decode (const ACEXML_Char* input, + size_t* output_len); + + //@} +}; + + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_XML_CODECS_H */ diff --git a/ACE/ACEXML/common/XML_Macros.h b/ACE/ACEXML/common/XML_Macros.h new file mode 100644 index 00000000000..9ee1e90c196 --- /dev/null +++ b/ACE/ACEXML/common/XML_Macros.h @@ -0,0 +1,456 @@ +// -*- C++ -*- + +// ============================================================================ +/** + * @file XML_Macros.h + * + * $Id$ + * + * Writing code that is portable between platforms with or without + * native C++ exceptions is hard. The following macros offer some + * help on this task. + * + * @author Nanbor Wang + * @author Aniruddha Gokhale + * @author Carlos O'Ryan + * @author Krishnakumar B , et al. + */ +// ============================================================================ + +// Macros for handling exceptions. + +#ifndef _ACEXML_MACROS_H +#define _ACEXML_MACROS_H + +#include /**/ "ace/pre.h" + +#include "ace/config-all.h" + +# if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +# endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Exception_Macros.h" + +// The Windows MFC exception mechanism requires that a caught CException +// (including the CMemoryException in use here) be freed using its Delete() +// method. Thus, when MFC is in use and we're catching exceptions as a result +// of new(), the exception's Delete() method has to be called. No other +// platform imposes this sort of restriction/requirement. The Windows +// config stuff (at least for MSVC/MFC) defines a ACE_del_bad_alloc macro +// that works with its ACE_bad_alloc macro to implement this cleanup +// requirement. Since no other platform requires this, define it as +// empty here. +#if !defined (ACE_del_bad_alloc) +# define ACE_del_bad_alloc +#endif + +// The following macros assume that an environment variable is passed +// in/out of each function that can throw an exception. The type of the +// environment variable is defined by ACEXML_ENV_TYPE. + +#if !defined (ACEXML_ENV_TYPE) +# define ACEXML_ENV_TYPE ACEXML_Env +#endif /* ACEXML_ENV_TYPE */ + +// The name of the variable defined by ACEXML_TRY_ENV. Below is the name +// that we use by default. If you wish to change it you can redefine +// ACEXML_TRY_ENV to change the default name. Also ACEXML_ADOPT_ENV allows the +// use of non-standard name within a scope. + +#if !defined (ACEXML_TRY_ENV) +# define ACEXML_TRY_ENV _ACEXML_Env_variable +#endif /* ACEXML_TRY_ENV */ + +// The base type of Exception from which all the other exception types are +// derived. By default, it is set to ACEXML_Exception. + +#if !defined (ACEXML_EXCEPTION_TYPE) +# define ACEXML_EXCEPTION_TYPE ACEXML_Exception +#endif /* ACEXML_EXCEPTION_TYPE */ + +// This is the exception caught by ACEXML_CATCHANY. +#if !defined (ACEXML_ANY_EXCEPTION) +# define ACEXML_ANY_EXCEPTION ex +#endif /* ACEXML_ANY_EXCEPTION */ + +// Declare a new environment variable on the stack. The type of the +// environment variable is determined by ACEXML_ENV_TYPE. +#define ACEXML_DECLARE_NEW_ENV \ + ACEXML_ENV_TYPE ACEXML_TRY_ENV + +#if defined (ACE_USES_NATIVE_EXCEPTIONS) +// ----------------------------------------------------------------- + +#define ACEXML_ADOPT_ENV (ENV) + +// No need to check. Native exceptions handle the control flow +// automatically when an exception occurs. +# define ACEXML_CHECK + +// Used when the function requires a return value. +# define ACEXML_CHECK_RETURN(RETV) + +// ACEXML_THROW_R_INT should not be used by the user. +# define ACEXML_THROW_R_INT(EXCEPTION) \ + throw EXCEPTION + +// Throwing an exception is easy. These two macros should _NOT_ be +// used within try blocks. +# define ACEXML_THROW(EXCEPTION) \ + throw EXCEPTION + +// Throwing an exception when the function reqires a return value. +# if defined (__HP_aCC) +# define ACEXML_THROW_RETURN(EXCEPTION, RETV) \ + do \ + { \ + throw EXCEPTION; \ + return RETV; \ + } while (0) +# else /* WIN32 */ +# define ACEXML_THROW_RETURN(EXCEPTION,RETV) \ + throw EXCEPTION +# endif /* WIN32 */ + +// For compilers with native exceptions, we can simply use try to try. ;-) +// do {} while (0) is required to avoid compilation warnings. +# define ACEXML_TRY \ + do \ + { \ + try \ + { +# define ACEXML_TRY_NEW_ENV \ + do \ + { \ + ACEXML_ENV_TYPE ACEXML_TRY_ENV; \ + try \ + { +# define ACEXML_TRY_EX(LABEL) \ + do \ + { \ + try \ + { + +// No need to check for exceptions within try block for compilers with +// native exceptions. +# define ACEXML_TRY_CHECK +# define ACEXML_TRY_CHECK_EX(LABEL) + +// Likewise, throwing exceptions within try blocks is easy. +# define ACEXML_TRY_THROW(EXCEPTION) throw EXCEPTION +# define ACEXML_TRY_THROW_EX(EXCEPTION,LABEL) throw EXCEPTION + +// Same thing for catch. +# define ACEXML_CATCH(EXCEPTION,VAR) \ + } \ + catch (EXCEPTION & VAR) \ + { \ + ACE_UNUSED_ARG (VAR); + +# define ACEXML_CATCHANY \ + ACEXML_CATCH(ACEXML_EXCEPTION_TYPE, ACEXML_ANY_EXCEPTION) + +# define ACEXML_CATCHALL \ + } \ + catch (...) \ + { + +// Rethrowing the exception from catch blocks. +# define ACEXML_RE_THROW throw +# define ACEXML_RE_THROW_EX(LABEL) throw + +// Close the catch block. +# define ACEXML_ENDTRY \ + } \ + } while (0) + +#else /* ! ACEXML_USES_NATIVE_EXCEPTIONS */ +// ----------------------------------------------------------------- + +// When handling compilers without native exceptions, things get a bit +// hairy. Exceptions are simulated using ACEXML_ENV_TYPE. The trick here is to +// make sure the flow-of-control can simulate the case when native +// exceptions occur... + +# define ACEXML_ADOPT_ENV(ENV) ACEXML_ENV_TYPE &ACEXML_TRY_ENV = ENV + +// Follow every statement that could throw exceptions with ACEXML_CHECK or +// ACEXML_CHECK_RETURN. These two macros should _NOT_ be used within try +// blocks. Use ACEXML_TRY_CHECK or ACEXML_TRY_CHECK_EX instead. +# define ACEXML_CHECK \ + if (ACEXML_TRY_ENV . exception () != 0) \ + return +// When function requires a return value +# define ACEXML_CHECK_RETURN(RETV) \ + if (ACEXML_TRY_ENV . exception () != 0) \ + return RETV + +// ACEXML_THROW_R_INT should not be used by the user. +# define ACEXML_THROW_R_INT(EXCEPTION) ACEXML_TRY_ENV.exception (new EXCEPTION) + +// Throwing exceptions will inevitably cause a return from the current +// function. These two macros should _NOT_ be used within try blocks. Use +// ACEXML_TRY_THROW or ACEXML_TRY_THROW_EX instead. +# define ACEXML_THROW(EXCEPTION) \ + do \ + { \ + ACEXML_TRY_ENV.exception (new EXCEPTION); \ + return; \ + } while (0) + +# define ACEXML_THROW_RETURN(EXCEPTION,RETV) \ + do \ + { \ + ACEXML_TRY_ENV.exception (new EXCEPTION); \ + return RETV; \ + } while (0) + +// ACEXML_TRY sets up flags to control program flow. ACEXML_TRY_FLAG acts +// like a one-shot flip-flop. When an exception occurs (detected using +// ACEXML_TRY_CHECK,) ACEXML_TRY_FLAG will be reset and the control goes +// back into ACEXML_TRY_LABEL. Since ACEXML_TRY_FLAG is reset, the try +// block won't get executed again and the control proceeds to the following +// catch blocks. ACEXML_EXCEPTION_NOT_CAUGHT flag is used to prevent +// catching an exception twice. This macro assumes there's already an +// ACEXML_ENV_TYPE variable ACEXML_TRY_ENV defined (which should be the +// case normally) +# define ACEXML_TRY \ + do { \ + int ACEXML_TRY_FLAG = 1; \ + int ACEXML_EXCEPTION_NOT_CAUGHT = 1; \ + ACEXML_TRY_LABEL: \ + if (ACEXML_TRY_FLAG) \ + do { + +// ACEXML_TRY_NEW_ENV functions like the macro ACEXML_TRY but defines a new +// ACEXML_ENV_TYPE variable ACEXML_TRY_ENV. It is most often used in the outer +// most function where no ACEXML_TRY_ENV is available. +# define ACEXML_TRY_NEW_ENV \ + do { \ + ACEXML_ENV_TYPE ACEXML_TRY_ENV;\ + int ACEXML_TRY_FLAG = 1; \ + int ACEXML_EXCEPTION_NOT_CAUGHT = 1; \ + ACEXML_TRY_LABEL: \ + if (ACEXML_TRY_FLAG) \ + do { + +// ACEXML_TRY_EX works exactly like ACEXML_TRY macro except the label used +// in the try block is customizable to avoid name clashing. It should be +// used when nested try blocks or multiple try blocks are required, in the +// same function. +# define ACEXML_TRY_EX(LABEL) \ + do { \ + int ACEXML_TRY_FLAG = 1; \ + int ACEXML_EXCEPTION_NOT_CAUGHT = 1; \ + ACEXML_TRY_LABEL ## LABEL: \ + if (ACEXML_TRY_FLAG) \ + do { + +// Check for exceptions within try blocks. +# define ACEXML_TRY_CHECK \ + { \ + if (ACEXML_TRY_ENV.exception () != 0) \ + { \ + ACEXML_TRY_FLAG = 0; \ + goto ACEXML_TRY_LABEL; \ + } \ + } + +// Checking exception within EX try blocks. +# define ACEXML_TRY_CHECK_EX(LABEL) \ + { \ + if (ACEXML_TRY_ENV.exception () != 0) \ + { \ + ACEXML_TRY_FLAG = 0; \ + goto ACEXML_TRY_LABEL ## LABEL; \ + } \ + } + +// Throwing exception within TRY blocks. +# define ACEXML_TRY_THROW(EXCEPTION) \ + { \ + ACEXML_TRY_ENV.exception (new EXCEPTION); \ + ACEXML_TRY_FLAG = 0; \ + goto ACEXML_TRY_LABEL; \ + } + +# define ACEXML_TRY_THROW_EX(EXCEPTION,LABEL) \ + { \ + ACEXML_TRY_ENV.exception (new EXCEPTION); \ + ACEXML_TRY_FLAG = 0; \ + goto ACEXML_TRY_LABEL ## LABEL; \ + } + +// When exceptions occur or try block finishes execution without exception, +// control will continue in the catch block. This macro first checks if +// there's any uncaught exception left. If all the conditions are met, we +// have caught an exception. It then resets ACEXML_EXCEPTION_NOT_CAUGHT to +// prevent subsequent catch blocks from catching the same exception again, +// and extracts out the underlying exception in ACEXML_TRY_ENV. We also make a +// copy of ACEXML_TRY_ENV in ACEXML_CAUGHT_ENV, in case we want to rethrow the +// exception. ACEXML_TRY_ENV is cleared out after the exception is caught so +// you should not use ACEXML_TRY_ENV within the catch block(You should use the +// exception directly). +# define ACEXML_CATCH(TYPE,VAR) \ + } while (0); \ + do \ + if (ACEXML_TRY_ENV.exception () != 0 && ACEXML_EXCEPTION_NOT_CAUGHT && \ + TYPE::_downcast(ACEXML_TRY_ENV.exception ()) != 0) \ + { \ + ACEXML_ENV_TYPE ACEXML_CAUGHT_ENV = ACEXML_TRY_ENV;\ + ACEXML_EXCEPTION_NOT_CAUGHT = 0; \ + TYPE &VAR = *TYPE::_downcast (ACEXML_CAUGHT_ENV.exception ()); \ + ACE_UNUSED_ARG (VAR); \ + ACEXML_TRY_ENV.clear (); + +// ACEXML_CATCHANY uses ACEXML_CATCH to catch all exceptions derived from +// ACEXML_EXCEPTION_TYPE +# define ACEXML_CATCHANY ACEXML_CATCH (ACEXML_EXCEPTION_TYPE, ACEXML_ANY_EXCEPTION) + +// Since there's no other exception for compilers without exception +// support, we simply catch all ACEXML_EXCEPTION_TYPE exceptions for +// ACEXML_CATCHALL. +# define ACEXML_CATCHALL ACEXML_CATCHANY + +// Rethrowing exception within catch blocks. Notice that we depend on the +// ACEXML_CHECK/ACEXML_CHECK_RETURN following the ACEXML_ENDTRY, or +// ACEXML_TRY_CHECK/ ACEXML_TRY_CHECK_EX following the ACEXML_ENDTRY when +// the catch block is within another try block, to do the "Right +// Thing[TM]." +# define ACEXML_RE_THROW \ + do {\ + ACEXML_TRY_ENV = ACEXML_CAUGHT_ENV; \ + goto ACEXML_TRY_LABEL; \ + } while (0) +# define ACEXML_RE_THROW_EX(LABEL) \ + do {\ + ACEXML_TRY_ENV = ACEXML_CAUGHT_ENV; \ + goto ACEXML_TRY_LABEL ## LABEL; \ + } while (0) + +// Close the try block. Since exceptions may not get caught, and exceptions +// can also be rethrown from the catch block, it's always a good idea to +// follow ACEXML_ENDTRY with ACEXML_CHECK or ACEXML_TRY_CHECK (depending on +// the context.) +# define ACEXML_ENDTRY \ + } while (0); \ + } while (0) + +#endif /* ! ACE_USES_NATIVE_EXCEPTIONS */ + +// ACE_HAS_EXCEPTIONS is not the same as ACE_NEW_THROWS_EXCEPTIONS. +#if defined(ACE_NEW_THROWS_EXCEPTIONS) + +# define ACEXML_NEW_THROW_EX(POINTER,CONSTRUCTOR,EXCEPTION) \ + do { try { POINTER = new CONSTRUCTOR; } \ + catch (ACE_bad_alloc) { ACE_del_bad_alloc errno = ENOMEM; ACEXML_THROW_R_INT (EXCEPTION); } \ + } while (0) + +#else /* ! ACE_NEW_THROWS_EXCEPTIONS */ + +# define ACEXML_NEW_THROW_EX(POINTER,CONSTRUCTOR,EXCEPTION) \ + do { POINTER = new CONSTRUCTOR; \ + if (POINTER == 0) { errno = ENOMEM; ACEXML_THROW_R_INT (EXCEPTION); } \ + } while (0) + +#endif /* ACE_NEW_THROWS_EXCEPTIONS */ + +# define ACEXML_GUARD_THROW_EX(MUTEX,OBJ,LOCK,EXCEPTION) \ + ACE_Guard< MUTEX > OBJ (LOCK); \ + if (OBJ.locked () == 0) ACEXML_THROW_R_INT (EXCEPTION); + +# define ACEXML_READ_GUARD_THROW_EX(MUTEX,OBJ,LOCK,EXCEPTION) \ + ACE_Read_Guard< MUTEX > OBJ (LOCK); \ + if (OBJ.locked () == 0) ACEXML_THROW_R_INT (EXCEPTION); + +# define ACEXML_WRITE_GUARD_THROW_EX(MUTEX,OBJ,LOCK,EXCEPTION) \ + ACE_Write_Guard< MUTEX > OBJ (LOCK); \ + if (OBJ.locked () == 0) ACEXML_THROW_R_INT (EXCEPTION); + +//@{ +/** + * @name Native C++ exceptions portability macros. + * + * The following macros are used to write code portable between platforms + * with and without native C++ exception support. Their main goal is to + * hide the presence of the ACEXML_ENV_TYPE argument, but they collaborate + * with the ACEXML_TRY_* macros to emulate the try/catch blocks. + */ + +/// Define a macro to emit code only when ACEXML_ENV_TYPE is used +#if !defined (ACE_USES_NATIVE_EXCEPTIONS) || defined (ACEXML_ENV_BKWD_COMPAT) +# define ACEXML_ENV_EMIT_CODE(X) X +#else +# define ACEXML_ENV_EMIT_CODE(X) +#endif /* ACE_USES_NATIVE_EXCEPTIONS && ! ACEXML_ENV_BKWD_COMPAT */ + +/// Another macro to emit code only when ACEXML_ENV_TYPE is used +#if !defined (ACE_USES_NATIVE_EXCEPTIONS) || defined (ACEXML_ENV_BKWD_COMPAT) +# define ACEXML_ENV_EMIT_CODE2(X,Y) X,Y +#else +# define ACEXML_ENV_EMIT_CODE2(X,Y) +#endif /* ACE_USES_NATIVE_EXCEPTIONS && ! ACEXML_ENV_BKWD_COMPAT */ + +/// Helper macro +#define ACEXML_ENV_EMIT_DUMMY + +/// Declare a ACEXML_ENV_TYPE argument as the last argument of a +/// function +/** + * Normally this macro is used as follows: + * + * void my_funct (int x, int y ACEXML_ENV_ARG_DECL); + * + * Its purpose is to provide developers (and users) with a mechanism to + * write code that is portable to platforms with and without native C++ + * exceptions. + */ +#define ACEXML_ENV_ARG_DECL \ + ACEXML_ENV_EMIT_CODE2(ACEXML_ENV_EMIT_DUMMY, \ + ACEXML_ENV_TYPE &ACEXML_TRY_ENV) + +/// Declare a ACEXML_ENV_TYPE argument that is not used by the +/// function definition. +/** + * Similar to ACEXML_ENV_ARG_DECL, but the formal parameter name is dropped to + * avoid warnings about unused parameters + */ +#define ACEXML_ENV_ARG_DECL_NOT_USED \ + ACEXML_ENV_EMIT_CODE2(ACEXML_ENV_EMIT_DUMMY, \ + ACEXML_ENV_TYPE &) + +/// Declare a ACEXML_ENV_TYPE argument for methods that do not take any other +/// parameters +#define ACEXML_ENV_SINGLE_ARG_DECL \ + ACEXML_ENV_EMIT_CODE(ACEXML_ENV_TYPE &ACEXML_TRY_ENV) + +/// Declare a ACEXML_ENV_TYPE argument for methods which don't use it. +#define ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED \ + ACEXML_ENV_EMIT_CODE(ACEXML_ENV_TYPE &) + +/// Use the ACEXML_ENV_TYPE argument in a nested call +#define ACEXML_ENV_ARG_PARAMETER \ + ACEXML_ENV_EMIT_CODE2(ACEXML_ENV_EMIT_DUMMY, \ + ACEXML_TRY_ENV) + +/// Use the ACEXML_ENV_TYPE argument in a nested call, assuming that the +/// called function takes only the ACEXML_TRY_ENV argument. +#define ACEXML_ENV_SINGLE_ARG_PARAMETER \ + ACEXML_ENV_EMIT_CODE(ACEXML_TRY_ENV) + +/// Eliminate unused argument warnings about ACEXML_TRY_ENV +#define ACEXML_ENV_ARG_NOT_USED \ + ACEXML_ENV_EMIT_CODE(ACE_UNUSED_ARG(ACEXML_TRY_ENV)) +//@} + +#if !defined (ACE_USES_NATIVE_EXCEPTIONS) +// This thing can be moved above when we drop ACEXML_ENV_BKWD_COMPAT. +# define ACEXML_ENV_RAISE(ex) ACEXML_TRY_ENV.exception (ex) +#else +# define ACEXML_ENV_RAISE(ex) (ex)->_raise () +#endif /* ACEXML_CORBA_HAS_EXCEPTIONS */ + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_MACROS_H */ diff --git a/ACE/ACEXML/common/XML_Types.h b/ACE/ACEXML/common/XML_Types.h new file mode 100644 index 00000000000..5a55d6b7754 --- /dev/null +++ b/ACE/ACEXML/common/XML_Types.h @@ -0,0 +1,83 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file XML_Types.h + * + * This file collects the type definitions for data types + * used in ACE XML parser. + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +#ifndef _ACEXML_XML_TYPES_H_ +#define _ACEXML_XML_TYPES_H_ + +#include /**/ "ace/pre.h" +#include "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Basic_Types.h" +#include "ace/SString.h" +#include "ace/Functor_String.h" + +# if defined (ACE_HAS_WCHAR) && (ACE_SIZEOF_WCHAR == 2) +typedef wchar_t ACEXML_UTF16; +# else +typedef ACE_USHORT16 ACEXML_UTF16; +# endif /* ACE_HAS_WCHAR && ACE_SIZEOF_WCHAR == 2 */ + +# if defined (ACE_HAS_WCHAR) && (ACE_SIZEOF_WCHAR == 4) +typedef wchar_t ACEXML_UCS4; +# else +typedef ACE_UINT32 ACEXML_UCS4; +# endif /* ACE_HAS_WCHAR && ACE_SIZEOF_WCHAR == 4 */ + +typedef char ACEXML_UTF8; + +/** + * @typedef ACEXML_Char + * ACEXML_Char only maps to ACEXML_UTF16 when ACE_USES_WCHAR is defined. + * Here we assume sizeof (wchar_t) is always 2 bytes. + * + * Default XML strings will use UTF-8 encoding. We would like to use + * the string classes in standard C++ Library here. But they are not + * very portable yet (as far as I know,) and I'll just use ACE_CString + * for now, unless UNICODE support is turned on. Notice that you + * should never convert strings between ACE_CString and ACE_WString + * using the built-in conversion functions as they only perform simple + * copy without any encoding conversion. + */ +typedef ACE_TCHAR ACEXML_Char; +# if defined (ACE_USES_WCHAR) +//typedef ACEXML_UTF16 ACEXML_Char; +typedef ACE_WString ACEXML_String; +# else +//typedef ACEXML_UTF8 ACEXML_Char; +typedef ACE_CString ACEXML_String; +# endif /* ACE_USES_WCHAR */ + +# if (!defined (ACEXML_HAS_INLINE) && defined (__ACE_INLINE__)) || (ACEXML_HAS_INLINE == 1) +# define __ACEXML_INLINE__ inline +# else +# if defined (__ACEXML_INLINE__) +# undef __ACEXML_INLINE__ +# endif /* __ACEXML_INLINE__ */ +# endif /* (!ACEXML_HAS_INLINE) && (__ACE_INLINE__) || (ACEXML_HAS_INLINE == 1) */ + +# if defined (__ACEXML_INLINE__) +# define ACEXML_INLINE inline +# else +# define ACEXML_INLINE +# endif /* __ACEXML_INLINE */ + + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_XML_TYPE_H_ */ diff --git a/ACE/ACEXML/common/XML_Util.cpp b/ACE/ACEXML/common/XML_Util.cpp new file mode 100644 index 00000000000..7b9b9fb00fe --- /dev/null +++ b/ACE/ACEXML/common/XML_Util.cpp @@ -0,0 +1,46 @@ +// $Id$ + +#include "ACEXML/common/XML_Util.h" + +static const ACEXML_Char ESCAPED_AMP[] = ACE_TEXT("&"); +static const ACEXML_Char ESCAPED_LESS[] = ACE_TEXT("<"); +static const ACEXML_Char ESCAPED_GREATER[] = ACE_TEXT(">"); +static const ACEXML_Char ESCAPED_APOS[] = ACE_TEXT("'"); +static const ACEXML_Char ESCAPED_QUOTE[] = ACE_TEXT("""); + +#define CSTRLEN(x) ((sizeof(x) / sizeof(ACEXML_Char)) - 1) + +ACEXML_String ACEXML_escape_string(const ACEXML_String& str) +{ + ACEXML_String ret(str.length ()); + ACEXML_escape_string(str, ret); + return ret; +} + +void ACEXML_escape_string(const ACEXML_String& in, ACEXML_String& out) +{ + size_t len = in.length (); + out.clear(); + for (size_t stridx = 0; stridx < len; ++stridx) + { + switch (in[stridx]) { + case '&': + out.append(ESCAPED_AMP, CSTRLEN(ESCAPED_AMP)); + break; + case '<': + out.append(ESCAPED_LESS, CSTRLEN(ESCAPED_LESS)); + break; + case '>': + out.append(ESCAPED_GREATER, CSTRLEN(ESCAPED_GREATER)); + break; + case '\'': + out.append(ESCAPED_APOS, CSTRLEN(ESCAPED_APOS)); + break; + case '\"': + out.append(ESCAPED_QUOTE, CSTRLEN(ESCAPED_QUOTE)); + break; + default: + out += in[stridx]; + } + } +} diff --git a/ACE/ACEXML/common/XML_Util.h b/ACE/ACEXML/common/XML_Util.h new file mode 100644 index 00000000000..2844c33f397 --- /dev/null +++ b/ACE/ACEXML/common/XML_Util.h @@ -0,0 +1,33 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file XML_Util.h + * + * Initially contains a function to escape strings for use in XML files. + * + * $Id$ + * + * @author Justin Michel + */ +//============================================================================= + +#ifndef _ACEXML_XML_UTIL_H_ +#define _ACEXML_XML_UTIL_H_ + +#include /**/ "ace/pre.h" + +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/XML_Types.h" + +ACEXML_Export ACEXML_String ACEXML_escape_string(const ACEXML_String& str); +ACEXML_Export void ACEXML_escape_string(const ACEXML_String& in, ACEXML_String& out); + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_XML_UTIL_H_ */ diff --git a/ACE/ACEXML/common/ZipCharStream.cpp b/ACE/ACEXML/common/ZipCharStream.cpp new file mode 100644 index 00000000000..4de9dc33abd --- /dev/null +++ b/ACE/ACEXML/common/ZipCharStream.cpp @@ -0,0 +1,255 @@ +// $Id$ + +#ifdef USE_ZZIP + +#include "ACEXML/common/ZipCharStream.h" +#include "ace/ACE.h" + + +ACEXML_ZipCharStream::ACEXML_ZipCharStream (void) + : filename_ (0), encoding_ (0), size_ (0), infile_ (0), pos_ (0), + limit_ (0) +{ +} + +ACEXML_ZipCharStream::~ACEXML_ZipCharStream (void) +{ + this->close(); +} + +int +ACEXML_ZipCharStream::open (const ACEXML_Char *name) +{ + delete[] this->filename_; + this->filename_ = 0; + + delete[] this->encoding_; + this->encoding_ = 0; + + this->infile_ = zzip_fopen (name, ACE_TEXT ("r")); + if (this->infile_ == 0) + return -1; + + this->filename_ = ACE::strnew (ACE::basename (name)); + return this->determine_encoding(); +} + +int +ACEXML_ZipCharStream::determine_encoding (void) +{ + if (this->infile_ == 0) + return -1; + char input[4]; + int i = 0; + for (; i < 4 && (input[i] = this->peekchar_i(i)) > 0; ++i) + ; + if (i < 4) + return -1; + const ACEXML_Char* temp = ACEXML_Encoding::get_encoding (input); + if (!temp) + return -1; + else + { + if (this->encoding_) + delete [] this->encoding_; + this->encoding_ = ACE::strnew (temp); + // ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("File's encoding is %s\n"), +// this->encoding_)); + } + // Move over the byte-order-mark if present. + char ch; + for (int j = 0; j < 3; ++j) + { + if ((ch = this->peekchar_i()) < 0) + return -1; + if (ch == '\xFF' || ch == '\xFE' || ch == '\xEF' || ch == '\xBB' || + ch == '\xBF') + this->get(ch); + else + break; + } + return 0; +} + +void +ACEXML_ZipCharStream::rewind() +{ + if (this->infile_ == 0) + return; + zzip_rewind (this->infile_); + this->determine_encoding(); +} + +int +ACEXML_ZipCharStream::available (void) +{ + if (this->infile_ == 0) + return -1; + long curr; + if ((curr = zzip_tell (this->infile_)) < 0) + return -1; + return (this->size_ - curr); +} + +int +ACEXML_ZipCharStream::close (void) +{ + if (this->infile_ != 0) + { + zzip_close (this->infile_); + this->infile_ = 0; + } + delete[] this->filename_; + this->filename_ = 0; + delete[] this->encoding_; + this->encoding_ = 0; + this->size_ = 0; + this->pos_ = 0; + this->limit_ = 0; + return 0; +} + + +int +ACEXML_ZipCharStream::getchar_i (char& ch) +{ + if (this->infile_ == 0) + return -1; + + if (this->pos_ < this->limit_) + { + ch = this->buf_[this->pos_++]; + return 0; + } + this->limit_ = zzip_read (this->infile_, this->buf_, sizeof (this->buf_)); + if (this->limit_ == 0) + return -1; + this->pos_ = 0; + ch = this->buf_[this->pos_++]; + return 0; +} + +int +ACEXML_ZipCharStream::peekchar_i (ACE_OFF_T offset) +{ + if (this->infile_ == 0) + return -1; + + if (offset > (ACE_OFF_T) sizeof (this->buf_)) + return -1; + if (this->pos_ + offset < this->limit_) + return this->buf_[this->pos_ + offset]; + int i = 0; + for (; this->pos_ < this->limit_; ++this->pos_, ++i) + this->buf_[i] = this->buf_[this->pos_]; + this->limit_ = zzip_read (this->infile_, this->buf_ + i, + sizeof (this->buf_) - i); + this->limit_ += i; + if (this->limit_ == 0) + return -1; + this->pos_ = 0; + return this->buf_[this->pos_ + offset]; +} + +int +ACEXML_ZipCharStream::read (ACEXML_Char *str, size_t len) +{ + if (this->infile_ == 0) + return -1; + + size_t i = 0; + for (; i < len && this->pos_ < this->limit_; ++i) + str[i] = this->buf_[this->pos_++]; + if (i == len) + return len; + len = len - i; + this->pos_ = 0; + this->limit_ = 0; + int bytes = zzip_fread (str + i, sizeof (ACEXML_Char), len, this->infile_); + return (bytes + i); +} + +int +ACEXML_ZipCharStream::get (ACEXML_Char& ch) +{ +#if defined (ACE_USES_WCHAR) + return this->get_i (ch); +#else + return this->getchar_i (ch); +#endif /* ACE_USES_WCHAR */ +} + + +int +ACEXML_ZipCharStream::peek (void) +{ +#if defined (ACE_USES_WCHAR) + return this->peek_i(); +#else + return this->peekchar_i(); +#endif /* ACE_USES_WCHAR */ +} + +const ACEXML_Char* +ACEXML_ZipCharStream::getEncoding (void) +{ + return this->encoding_; +} + +const ACEXML_Char* +ACEXML_ZipCharStream::getSystemId (void) +{ + return this->filename_; +} + +#if defined (ACE_USES_WCHAR) +int +ACEXML_ZipCharStream::get_i (ACEXML_Char& ch) +{ + if (ACE_OS::strcmp (this->encoding_, ACE_TEXT ("UTF-8")) == 0) + return this->getchar_i (ch); + + int BE = (ACE_OS::strcmp (this->encoding_, + ACE_TEXT ("UTF-16BE")) == 0) ? 1 : 0; + ACEXML_Char input[2]; + int i = 0; + for (; i < 2 && (this->getchar_i (input[i]) == 0); ++i) + ; + if (i < 2) + { + ch = 0; + return -1; + } + ch = BE ? input[0] << 8 | input[1] : input[1] << 8 | input[0]; + return 0; +} + +int +ACEXML_ZipCharStream::peek_i (void) +{ + + // If we are reading a UTF-8 encoded file, just use the plain unget. + if (ACE_OS::strcmp (this->encoding_, ACE_TEXT ("UTF-8")) == 0) + return this->peekchar_i(); + + // Peek into the stream. This reads two characters off the stream, keeps + // it in peek_. + int BE = (ACE_OS::strcmp (this->encoding_, + ACE_TEXT ("UTF-16BE")) == 0) ? 1 : 0; + + ACEXML_Char input[2]; + int i = 0; + for (; i < 2 && (input[i] = this->peekchar_i (i)) > 0; ++i) + ; + if (i < 2) + return -1; + return (BE ? input[0] << 8 | input[1] : input[1] << 8 | input[0]); +} +#endif /* ACE_USES_WCHAR */ + +#else +#if defined (__HP_aCC) +static int shut_up_aCC = 0; +#endif /* __HP_aCC */ + +#endif /* USE_ZZIP */ diff --git a/ACE/ACEXML/common/ZipCharStream.h b/ACE/ACEXML/common/ZipCharStream.h new file mode 100644 index 00000000000..1aa28f6f0b8 --- /dev/null +++ b/ACE/ACEXML/common/ZipCharStream.h @@ -0,0 +1,144 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file ZipCharStream.h + * + * $Id$ + * + * @author Krishnakumar B + */ +//============================================================================= + +#ifndef _ACEXML_ZIPCHARSTREAM_H_ +#define _ACEXML_ZIPCHARSTREAM_H_ + +#ifdef USE_ZZIP + +#include /**/ "ace/pre.h" +#include "ACEXML/common/ACEXML_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/CharStream.h" +#include "ACEXML/common/Encoding.h" +#include "zzip/zzip.h" + +// Ugly wart to get aroung a macro version of read defined in zzip.h. Evil... +#ifdef read +#undef read +#endif + +/** + * @class ACEXML_ZipCharStream + * + * An implementation of ACEXML_CharStream for reading input from a ZIP archive. + */ +class ACEXML_Export ACEXML_ZipCharStream : public ACEXML_CharStream +{ +public: + /// Default constructor. + ACEXML_ZipCharStream (void); + + /// Destructor + virtual ~ACEXML_ZipCharStream (void); + + /// Open a file. + int open (const ACEXML_Char *name); + + /** + * Returns the available ACEXML_Char in the buffer. -1 + * if the object is not initialized properly. + */ + virtual int available (void); + + /** + * Close this stream and release all resources used by it. + */ + virtual int close (void); + + /** + * Read the next ACEXML_Char. Return -1 if we are not able to + * return an ACEXML_Char, 0 if EOF is reached, or 1 if succeed. + */ + virtual int get (ACEXML_Char& ch); + + /** + * Read the next batch of ACEXML_Char strings + */ + virtual int read (ACEXML_Char *str, size_t len); + + /** + * Determine the encoding of the file. + */ + virtual int determine_encoding (void); + + + /** + * Peek the next ACEXML_Char in the CharStream. Return the + * character if success, -1 if EOF is reached. + */ + virtual int peek (void); + + /** + * Resets the file pointer to the beginning of the stream. + */ + virtual void rewind (void); + + /* + * Get the character encoding for a byte stream or URI. + */ + virtual const ACEXML_Char *getEncoding (void); + + /* + * Get the systemId for the underlying CharStream + */ + virtual const ACEXML_Char* getSystemId (void); + +protected: + + /** Read the next character as a normal character. Return -1 if EOF is + * reached, else return 0. + */ + virtual int getchar_i (char& ch); + + /** + * Peek @c offset bytes into the stream and return the character at @c + * offset. If EOF is reached, return -1. + */ + virtual int peekchar_i (ACE_OFF_T offset = 0); + +private: + +#if defined (ACE_USES_WCHAR) + /** + * Read the next character from the stream taking into account the + * encoding of the file. + */ + int get_i (ACEXML_Char& ch); + + /** + * Return the next character from the stream taking into account the + * encoding of the file. Subsequent call to get() returns this + * character. + */ + int peek_i (void); + +#endif /* ACE_USES_WCHAR */ + + ACEXML_Char* filename_; + ACEXML_Char* encoding_; + ACE_OFF_T size_; + ZZIP_FILE* infile_; + char buf_[80]; + int pos_; + int limit_; +}; + +#include /**/ "ace/post.h" + +#endif /* USE_ZZIP */ + +#endif /* _ACEXML_ZIPCHARSTREAM_H_ */ diff --git a/ACE/ACEXML/common/codecs.mpb b/ACE/ACEXML/common/codecs.mpb new file mode 100644 index 00000000000..aea3ee9b7e0 --- /dev/null +++ b/ACE/ACEXML/common/codecs.mpb @@ -0,0 +1,8 @@ +// -*- MPC -*- +// $Id$ + +feature(ace_codecs, !ace_for_tao) { + Source_Files { + XML_Codecs.cpp + } +} diff --git a/ACE/ACEXML/common/common.mpc b/ACE/ACEXML/common/common.mpc new file mode 100644 index 00000000000..3b469ffde37 --- /dev/null +++ b/ACE/ACEXML/common/common.mpc @@ -0,0 +1,33 @@ +// -*- MPC -*- +// $Id$ + +project(ACEXML): acelib, ace_output, codecs, install, zzip, zlib { + avoids += ace_for_tao + sharedname = ACEXML + dynamicflags += ACEXML_BUILD_DLL + + Source_Files { + // This file will only be added if the ace_codecs feature is enabled. + // See codecs.mpb for more information. + !XML_Codecs.cpp + } + + Header_Files { + ACEXML_Export.h + Attributes.h + ContentHandler.h + DTDHandler.h + EntityResolver.h + ErrorHandler.h + Locator.h + XMLFilter.h + XMLReader.h + XML_Macros.h + XML_Types.h + XML_Util.h + } + + Pkgconfig_Files { + ACEXML.pc.in + } +} diff --git a/ACE/ACEXML/docs/TODO.txt b/ACE/ACEXML/docs/TODO.txt new file mode 100644 index 00000000000..e7e48ca67c4 --- /dev/null +++ b/ACE/ACEXML/docs/TODO.txt @@ -0,0 +1,17 @@ +/** +@page acexml_todo ACEXML TO-DO List + +
    + +
  • Add Schema parsing ability. + +
  • Add support for resolving external entities, such as a + schema/namespace definition located on the web. + +
  • Add parameterized entity management class. See above. + +
  • Define validator building/calling interfaces. + +
+ +*/ diff --git a/ACE/ACEXML/docs/bugs.txt b/ACE/ACEXML/docs/bugs.txt new file mode 100644 index 00000000000..136e0cd7117 --- /dev/null +++ b/ACE/ACEXML/docs/bugs.txt @@ -0,0 +1,17 @@ +/** +@page acexml_bugs ACEXML Known Bugs + +
    +
  • ACEXML currently do not validate an XML files. The validator + hooks have not fully integrated into the parser yet. + +
  • Need to verify predefined entities are working correctly. Check + out the SAXPrint example. + +
  • Currently, replacement of parameterized reference (PEReference) is + not working. + +
+ + +*/ diff --git a/ACE/ACEXML/docs/guidelines.txt b/ACE/ACEXML/docs/guidelines.txt new file mode 100644 index 00000000000..9d084924c2c --- /dev/null +++ b/ACE/ACEXML/docs/guidelines.txt @@ -0,0 +1,39 @@ +// -*- HTML-Helper -*- $Id$ + +/** +@page acexml_guides ACEXML Programming Guidelines + +
    +
  • A lot of class names under @c $(ACE_ROOT)/ACEXML/common do not + follow the naming convention suggested in ACE-guidelines.html. + The reason for that is because those classes were derived from + the SAX2 API and we would like to keep them as similar as + possible. +
  • Character encoding: The default character encoding for ACEXML + can be set at compile time. ACEXML uses UTF-8 encoding in most + platforms where ACEXML_Char maps to + char in this case. When ACE is configured to use + wchar and UNICODE, ACEXML uses UTF-16 + encoding and ACEXML_Char maps to + wchar_t. Notice that ACEXML assume + sizeof (wchar_t) is of 2-byte long. For platforms + using 4-byte wchar_t, ACEXML will not work + correctly, but it should be trivial to fix.

    + +

  • Currently, there's only an example showing how to use the parser + under @c $(ACE_ROOT)/ACEXML/examples/SAXPrint/. + +
  • (Not supported yet) To develop a new validator, one must + create a DLL implementing + @c ACEXML_Attributes_Def_Builder, @c + ACEXML_Attribute_Def_Builder, @c ACEXML_Element_Def_Builder, + @c ACEXML_Validator, and @c ACEXML_DTD_Manager. The DLL should + also export a traditional C function called @c + create_dtd_manager. The XML parser itself should also be + modified to support and dynamically link with the new validator. + See @c $(ACE_ROOT)/ACEXML/parser/debug_validator/ for an example. + +
+ + +*/ diff --git a/ACE/ACEXML/docs/parser_features.txt b/ACE/ACEXML/docs/parser_features.txt new file mode 100644 index 00000000000..c65930e32a2 --- /dev/null +++ b/ACE/ACEXML/docs/parser_features.txt @@ -0,0 +1,25 @@ +/** -*- HTML-Helper -*- $Id$ +@defgroup acexml_parser_features Configurable Special Features of ACEXML Parser +@{ + +There are special features in ACEXML Parser that can be +activated/deactivated thru @c setFeature. Likewise, whether a feature +has been activated or not can be queried using @c getFeature. + +@sa ACEXML_XMLReader::setFeature +@sa ACEXML_XMLReader::getFeature + +Here is a list of supported features: + +
    +
  1. namespaces - When this feature is enabled, ACEXML parser allows + access by namespace qualified names. + +
  2. namespace_prefixes - Normally the list of attributes returned by the + parser will not contain attributes used as namespace declarations + (xmlns:foo="bar"). When this feature is enabled, the list of attributes + contains the namespace declarations also. +
+ +@} +*/ diff --git a/ACE/ACEXML/docs/readme.txt b/ACE/ACEXML/docs/readme.txt new file mode 100644 index 00000000000..f0de833b526 --- /dev/null +++ b/ACE/ACEXML/docs/readme.txt @@ -0,0 +1,36 @@ +/** -*- HTML-Helper -*- $Id$ +@mainpage ACEXML - A Small and Portable XML Parser + +@section acexml_synopsis Synopsis +ACEXML is a small footprint and portable framework for integrating XML +parsing ability into user applications. The framework is based on the + Simple API for XML +(SAX 2.0) by David Megginson. A simple non-conformant XML parser +is also included in the framework. Since our original motivation was +to use the parser for specifying software composition and +configuration descriptors, at the current stage, the parser does not +fully support all the features specified in the XML specification. + +We do, however, plan to add more features to the parser and will +either release a more versatile parser or allow the current parser to +dynamically load in the extra features in the future. + +@section acexml_features Features of ACEXML +
    +
  • ACEXML only recognize UNICODE documents, although they can be + in various different encoding, such as UTF-8, UTF-16, or UCS-4. + Therefore, it might be a problem to handle document containing + multi-byte charatersets. They can, however, be translated into + UNICODE before being parsed by ACEXML parser. +
+ + +@section acexml_others Other Topics +
    +
  1. @ref acexml_parser_features +
  2. @ref acexml_guides +
  3. @ref acexml_bugs +
  4. @ref acexml_todo +
+ +*/ diff --git a/ACE/ACEXML/examples/Makefile.am b/ACE/ACEXML/examples/Makefile.am new file mode 100644 index 00000000000..0ddb642570a --- /dev/null +++ b/ACE/ACEXML/examples/Makefile.am @@ -0,0 +1,13 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +SUBDIRS = \ + SAXPrint + diff --git a/ACE/ACEXML/examples/SAXPrint/Makefile.am b/ACE/ACEXML/examples/SAXPrint/Makefile.am new file mode 100644 index 00000000000..d196510359f --- /dev/null +++ b/ACE/ACEXML/examples/SAXPrint/Makefile.am @@ -0,0 +1,75 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + + +## Makefile.SAXPrint.am + +if BUILD_ACEXML +if !BUILD_ACE_FOR_TAO + +noinst_PROGRAMS = SAXPrint + +SAXPrint_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ACEXML/common + +if BUILD_ZLIB +if BUILD_ZZIP +SAXPrint_CPPFLAGS += \ + $(ACE_ZZIP_CPPFLAGS) \ + $(ACE_ZLIB_CPPFLAGS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +SAXPrint_SOURCES = \ + Print_Handler.cpp \ + SAXPrint_Handler.cpp \ + main.cpp \ + Print_Handler.h \ + SAXPrint_Handler.h \ + SAXPrint_Handler.inl + +SAXPrint_LDFLAGS = + +if BUILD_ZLIB +if BUILD_ZZIP +SAXPrint_LDFLAGS += \ + $(ACE_ZZIP_LDFLAGS) \ + $(ACE_ZLIB_LDFLAGS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +SAXPrint_LDADD = \ + $(ACE_BUILDDIR)/ACEXML/parser/parser/libACEXML_Parser.la \ + $(ACE_BUILDDIR)/ACEXML/common/libACEXML.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +if BUILD_ZLIB +if BUILD_ZZIP +SAXPrint_LDADD += \ + $(ACE_ZZIP_LIBS) \ + $(ACE_ZLIB_LIBS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +endif !BUILD_ACE_FOR_TAO +endif BUILD_ACEXML + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/ACEXML/examples/SAXPrint/Print_Handler.cpp b/ACE/ACEXML/examples/SAXPrint/Print_Handler.cpp new file mode 100644 index 00000000000..4bcf19e1b07 --- /dev/null +++ b/ACE/ACEXML/examples/SAXPrint/Print_Handler.cpp @@ -0,0 +1,238 @@ +// -*- C++ -*- $Id$ + +#include "Print_Handler.h" +#include "ace/ACE.h" +#include "ace/Log_Msg.h" + +ACEXML_Print_Handler::ACEXML_Print_Handler (ACEXML_Char* fileName) + : fileName_(ACE::strnew (fileName)) +{ + +} + +ACEXML_Print_Handler::~ACEXML_Print_Handler (void) +{ + delete[] this->fileName_; +} + +void +ACEXML_Print_Handler::characters (const ACEXML_Char *cdata, + size_t start, + size_t length ACEXML_ENV_ARG_DECL_NOT_USED) +{ + + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("* Event characters () ** start: %u end: %u ***************\n%s\n- End event characters () ---------------\n"), + start, length, cdata)); +} + +void +ACEXML_Print_Handler::endDocument (ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED) +{ + + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("* Event endDocument () ***************\n"))); +} + +void +ACEXML_Print_Handler::endElement (const ACEXML_Char *uri, + const ACEXML_Char *name, + const ACEXML_Char *qName + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("* Event endElement (%s, %s, %s) ***************\n"), + uri, name, qName)); +} + +void +ACEXML_Print_Handler::endPrefixMapping (const ACEXML_Char *prefix + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("* Event endPrefixMapping (%s) ***************\n"), + prefix)); +} + +void +ACEXML_Print_Handler::ignorableWhitespace (const ACEXML_Char *, + int, + int + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // ACE_DEBUG ((LM_DEBUG, + // ACE_TEXT ("* Event ignorableWhitespace () ***************\n"))); +} + +void +ACEXML_Print_Handler::processingInstruction (const ACEXML_Char *target, + const ACEXML_Char *data + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("* Event processingInstruction (%s, %s) ***************\n"), + target, data)); +} + +void +ACEXML_Print_Handler::setDocumentLocator (ACEXML_Locator * locator) +{ + + this->locator_ = locator; + // ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("* Event setDocumentLocator () ***************\n"))); +} + +void +ACEXML_Print_Handler::skippedEntity (const ACEXML_Char *name + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("* Event skippedEntity (%s) ***************\n"), + name)); +} + +void +ACEXML_Print_Handler::startDocument (ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED) +{ + + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("* Event startDocument () ***************\n"))); +} + +void +ACEXML_Print_Handler::startElement (const ACEXML_Char *uri, + const ACEXML_Char *name, + const ACEXML_Char *qName, + ACEXML_Attributes *alist + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("* Event startElement (%s, %s, %s) ***************\n"), + uri, name, qName)); + + if (alist != 0) + for (size_t i = 0; i < alist->getLength (); ++i) + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT (" %s = \"%s\"\n"), + alist->getQName (i), alist->getValue (i))); + } +} + +void +ACEXML_Print_Handler::startPrefixMapping (const ACEXML_Char * prefix, + const ACEXML_Char * uri ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("* Event startPrefixMapping () ***************\n"))); + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Prefix = %s, URI = %s\n"), prefix, uri)); +} + +// *** Methods inherit from ACEXML_DTDHandler. + +void +ACEXML_Print_Handler::notationDecl (const ACEXML_Char *name, + const ACEXML_Char *publicID, + const ACEXML_Char *systemID ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("* Event notationDecl: (%s) "), + name)); + + if (publicID == 0) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("SYSTEM %s\n"), + systemID)); + else if (systemID == 0) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("PUBLIC %s\n"), + publicID)); + else + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("PUBLIC %s %s\n"), + publicID, systemID)); +} + +void +ACEXML_Print_Handler::unparsedEntityDecl (const ACEXML_Char *name, + const ACEXML_Char *publicID, + const ACEXML_Char *systemID, + const ACEXML_Char *notationName ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("* Unparsed Entity: %s"), + name)); + + if (publicID == 0) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT (" SYSTEM %s"), + systemID)); + else + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT (" PUBLIC %s %s"), + publicID, systemID)); + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT (" NDATA %s\n"), + notationName)); +} + +// Methods inherit from ACEXML_EnitityResolver. + +ACEXML_InputSource * +ACEXML_Print_Handler::resolveEntity (const ACEXML_Char *, + const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. + return 0; +} + +// Methods inherit from ACEXML_ErrorHandler. + +/* + * Receive notification of a recoverable error. + */ +void +ACEXML_Print_Handler::error (ACEXML_SAXParseException & ex ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACE_DEBUG ((LM_DEBUG, "%s: line: %d col: %d ", + (this->locator_->getSystemId() == 0 ? this->fileName_ : this->locator_->getSystemId()), + this->locator_->getLineNumber(), + this->locator_->getColumnNumber())); + ex.print(); +} + +void +ACEXML_Print_Handler::fatalError (ACEXML_SAXParseException& ex ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACE_DEBUG ((LM_DEBUG, "%s: line: %d col: %d ", + (this->locator_->getSystemId() == 0 ? this->fileName_ : this->locator_->getSystemId()), + this->locator_->getLineNumber(), + this->locator_->getColumnNumber())); + ex.print(); + +} + +void +ACEXML_Print_Handler::warning (ACEXML_SAXParseException & ex ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACE_DEBUG ((LM_DEBUG, "%s: line: %d col: %d ", + (this->locator_->getSystemId() == 0 ? this->fileName_ : this->locator_->getSystemId()), + this->locator_->getLineNumber(), + this->locator_->getColumnNumber())); + ex.print(); +} diff --git a/ACE/ACEXML/examples/SAXPrint/Print_Handler.h b/ACE/ACEXML/examples/SAXPrint/Print_Handler.h new file mode 100644 index 00000000000..c7beebc02b7 --- /dev/null +++ b/ACE/ACEXML/examples/SAXPrint/Print_Handler.h @@ -0,0 +1,171 @@ +// $Id$ + +//============================================================================= +/** + * @file Print_Handler.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +#ifndef ACEXML_PRINT_HANDLER_H +#define ACEXML_PRINT_HANDLER_H + +#include "ACEXML/common/DefaultHandler.h" + +/** + * @class ACEXML_Print_Handler + * + * @brief ACEXML_Print_Handler is an example SAX event handler. + * + * This SAX event handler prints out a detailed event report + * on every event it receives. + */ +class ACEXML_Print_Handler : public ACEXML_DefaultHandler +{ +public: + /* + * Default constructor. + */ + ACEXML_Print_Handler (ACEXML_Char* fileName); + + /* + * Default destructor. + */ + virtual ~ACEXML_Print_Handler (void); + + // Methods inherited from ACEXML_ContentHandler. + + /* + * Receive notification of character data. + */ + virtual void characters (const ACEXML_Char *ch, + size_t start, + size_t length ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of the end of a document. + */ + virtual void endDocument (ACEXML_ENV_SINGLE_ARG_DECL) + ; + + /* + * Receive notification of the end of an element. + */ + virtual void endElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) + ; + + /* + * End the scope of a prefix-URI mapping. + */ + virtual void endPrefixMapping (const ACEXML_Char *prefix ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of ignorable whitespace in element content. + */ + virtual void ignorableWhitespace (const ACEXML_Char *ch, + int start, + int length ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of a processing instruction. + */ + virtual void processingInstruction (const ACEXML_Char *target, + const ACEXML_Char *data ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive an object for locating the origin of SAX document events. + */ + virtual void setDocumentLocator (ACEXML_Locator *locator) ; + + /* + * Receive notification of a skipped entity. + */ + virtual void skippedEntity (const ACEXML_Char *name ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of the beginning of a document. + */ + virtual void startDocument (ACEXML_ENV_SINGLE_ARG_DECL) + ; + + /* + * Receive notification of the beginning of an element. + */ + virtual void startElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName, + ACEXML_Attributes *atts ACEXML_ENV_ARG_DECL) + ; + + /* + * Begin the scope of a prefix-URI Namespace mapping. + */ + virtual void startPrefixMapping (const ACEXML_Char *prefix, + const ACEXML_Char *uri ACEXML_ENV_ARG_DECL) + ; + + // *** Methods inherit from ACEXML_DTDHandler. + + /* + * Receive notification of a notation declaration event. + */ + virtual void notationDecl (const ACEXML_Char *name, + const ACEXML_Char *publicId, + const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of an unparsed entity declaration event. + */ + virtual void unparsedEntityDecl (const ACEXML_Char *name, + const ACEXML_Char *publicId, + const ACEXML_Char *systemId, + const ACEXML_Char *notationName ACEXML_ENV_ARG_DECL) + ; + + // Methods inherit from ACEXML_EnitityResolver. + + /* + * Allow the application to resolve external entities. + */ + virtual ACEXML_InputSource *resolveEntity (const ACEXML_Char *publicId, + const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) + ; + + // Methods inherit from ACEXML_ErrorHandler. + + /* + * Receive notification of a recoverable error. + */ + virtual void error (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of a non-recoverable error. + */ + virtual void fatalError (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of a warning. + */ + virtual void warning (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL) + ; +private: + + ACEXML_Char* fileName_; + ACEXML_Locator* locator_; + +}; + +#endif /* ACEXML_PRINT_HANDLER_H */ diff --git a/ACE/ACEXML/examples/SAXPrint/SAXPrint.mpc b/ACE/ACEXML/examples/SAXPrint/SAXPrint.mpc new file mode 100644 index 00000000000..4fea0873337 --- /dev/null +++ b/ACE/ACEXML/examples/SAXPrint/SAXPrint.mpc @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project(SAXPrint): aceexe, acexml { + exename = SAXPrint +} diff --git a/ACE/ACEXML/examples/SAXPrint/SAXPrint_Handler.cpp b/ACE/ACEXML/examples/SAXPrint/SAXPrint_Handler.cpp new file mode 100644 index 00000000000..90182166b17 --- /dev/null +++ b/ACE/ACEXML/examples/SAXPrint/SAXPrint_Handler.cpp @@ -0,0 +1,226 @@ +// -*- C++ -*- $Id$ + +#include "SAXPrint_Handler.h" +#include "ace/ACE.h" +#include "ace/Log_Msg.h" + +#if !defined (__ACEXML_INLINE__) +# include "SAXPrint_Handler.inl" +#endif /* __ACEXML_INLINE__ */ + +ACEXML_SAXPrint_Handler::ACEXML_SAXPrint_Handler (const ACEXML_Char* filename) + : indent_ (0), fileName_(ACE::strnew (filename)), locator_ (0) +{ + // no-op +} + +ACEXML_SAXPrint_Handler::~ACEXML_SAXPrint_Handler (void) +{ + delete [] this->fileName_; +} + +void +ACEXML_SAXPrint_Handler::characters (const ACEXML_Char *cdata, + size_t, + size_t + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("%s"), + cdata)); +} + +void +ACEXML_SAXPrint_Handler::endDocument (ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED) +{ + + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); +} + +void +ACEXML_SAXPrint_Handler::endElement (const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char *qName + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + + + this->dec_indent (); + this->print_indent (); + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT (""), + qName)); +} + +void +ACEXML_SAXPrint_Handler::endPrefixMapping (const ACEXML_Char * + ACEXML_ENV_ARG_DECL_NOT_USED) +{ +// ACE_DEBUG ((LM_DEBUG, +// ACE_TEXT ("* Event endPrefixMapping (%s) ***************\n"), +// prefix)); +} + +void +ACEXML_SAXPrint_Handler::ignorableWhitespace (const ACEXML_Char * cdata, + int, + int ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("%s"), + cdata)); +// ACE_DEBUG ((LM_DEBUG, + // ACE_TEXT ("* Event ignorableWhitespace () ***************\n"))); +} + +void +ACEXML_SAXPrint_Handler::processingInstruction (const ACEXML_Char *target, + const ACEXML_Char *data + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + + + this->print_indent (); + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("\n"), + target, data)); +} + +void +ACEXML_SAXPrint_Handler::setDocumentLocator (ACEXML_Locator * locator) +{ + + this->locator_ = locator; + //ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("* Event setDocumentLocator () ***************\n"))); +} + +void +ACEXML_SAXPrint_Handler::skippedEntity (const ACEXML_Char *name + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("* Event skippedEntity (%s) ***************\n"), + name)); +} + +void +ACEXML_SAXPrint_Handler::startDocument (ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED) +{ + + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("* Event startDocument () ***************\n"))); +} + +void +ACEXML_SAXPrint_Handler::startElement (const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char *qName, + ACEXML_Attributes *alist + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + + + this->print_indent (); + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("<%s"), + qName)); + if (alist != 0) + for (size_t i = 0; i < alist->getLength (); ++i) + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT (" %s = \"%s\""), + alist->getQName (i), alist->getValue (i))); + } + ACE_DEBUG ((LM_DEBUG, ACE_TEXT (">"))); + this->inc_indent (); +} + +void +ACEXML_SAXPrint_Handler::startPrefixMapping (const ACEXML_Char * , + const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ +// ACE_DEBUG ((LM_DEBUG, +// ACE_TEXT ("* Event startPrefixMapping () ***************\n"))); +// ACE_DEBUG ((LM_DEBUG, +// ACE_TEXT ("Prefix = %s, URI = %s\n"), prefix, uri)); + +} + +// *** Methods inherited from ACEXML_DTDHandler. + +void +ACEXML_SAXPrint_Handler::notationDecl (const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + +void +ACEXML_SAXPrint_Handler::unparsedEntityDecl (const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. +} + +// Methods inherited from ACEXML_EnitityResolver. + +ACEXML_InputSource * +ACEXML_SAXPrint_Handler::resolveEntity (const ACEXML_Char *, + const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) +{ + // No-op. + return 0; +} + +// Methods inherited from ACEXML_ErrorHandler. + +/* + * Receive notification of a recoverable error. + */ +void +ACEXML_SAXPrint_Handler::error (ACEXML_SAXParseException & ex + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACE_DEBUG ((LM_DEBUG, "%s: line: %d col: %d ", + (this->locator_->getSystemId() == 0 ? this->fileName_ : this->locator_->getSystemId()), + this->locator_->getLineNumber(), + this->locator_->getColumnNumber())); + ex.print(); +} + +void +ACEXML_SAXPrint_Handler::fatalError (ACEXML_SAXParseException & ex + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACE_DEBUG ((LM_DEBUG, "%s: line: %d col: %d ", + (this->locator_->getSystemId() == 0 ? this->fileName_ : this->locator_->getSystemId()), + this->locator_->getLineNumber(), + this->locator_->getColumnNumber())); + ex.print(); +} + +void +ACEXML_SAXPrint_Handler::warning (ACEXML_SAXParseException & ex + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACE_DEBUG ((LM_DEBUG, "%s: line: %d col: %d ", + (this->locator_->getSystemId() == 0 ? this->fileName_ : this->locator_->getSystemId()), + this->locator_->getLineNumber(), + this->locator_->getColumnNumber())); + ex.print(); +} + +void +ACEXML_SAXPrint_Handler::print_indent (void) +{ + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); + for (size_t i = 0; i < this->indent_; ++i) + ACE_DEBUG ((LM_DEBUG, ACE_TEXT (" "))); +} diff --git a/ACE/ACEXML/examples/SAXPrint/SAXPrint_Handler.h b/ACE/ACEXML/examples/SAXPrint/SAXPrint_Handler.h new file mode 100644 index 00000000000..1f7ba8381b4 --- /dev/null +++ b/ACE/ACEXML/examples/SAXPrint/SAXPrint_Handler.h @@ -0,0 +1,180 @@ +// $Id$ + +//============================================================================= +/** + * @file SAXPrint_Handler.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +#ifndef ACEXML_SAXPRINT_HANDLER_H +#define ACEXML_SAXPRINT_HANDLER_H + +#include "ACEXML/common/DefaultHandler.h" + +/** + * @class ACEXML_SAXPrint_Handler + * + * @brief ACEXML_SAXPrint_Handler is an example SAX event handler. + * + * This SAX event handler try to regenerate the XML document it + * reads with correct indentation. + */ +class ACEXML_SAXPrint_Handler : public ACEXML_DefaultHandler +{ +public: + /* + * Default constructor. + */ + ACEXML_SAXPrint_Handler (const ACEXML_Char* name); + + /* + * Default destructor. + */ + virtual ~ACEXML_SAXPrint_Handler (void); + + // Methods inherit from ACEXML_ContentHandler. + + /* + * Receive notification of character data. + */ + virtual void characters (const ACEXML_Char *ch, + size_t start, + size_t length + ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of the end of a document. + */ + virtual void endDocument (ACEXML_ENV_SINGLE_ARG_DECL) + ; + + /* + * Receive notification of the end of an element. + */ + virtual void endElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) + ; + + /* + * End the scope of a prefix-URI mapping. + */ + virtual void endPrefixMapping (const ACEXML_Char *prefix ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of ignorable whitespace in element content. + */ + virtual void ignorableWhitespace (const ACEXML_Char *ch, + int start, + int length ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of a processing instruction. + */ + virtual void processingInstruction (const ACEXML_Char *target, + const ACEXML_Char *data ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive an object for locating the origin of SAX document events. + */ + virtual void setDocumentLocator (ACEXML_Locator *locator) ; + + /* + * Receive notification of a skipped entity. + */ + virtual void skippedEntity (const ACEXML_Char *name ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of the beginning of a document. + */ + virtual void startDocument (ACEXML_ENV_SINGLE_ARG_DECL) + ; + + /* + * Receive notification of the beginning of an element. + */ + virtual void startElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName, + ACEXML_Attributes *atts ACEXML_ENV_ARG_DECL) + ; + + /* + * Begin the scope of a prefix-URI Namespace mapping. + */ + virtual void startPrefixMapping (const ACEXML_Char *prefix, + const ACEXML_Char *uri ACEXML_ENV_ARG_DECL) + ; + + // *** Methods inherit from ACEXML_DTDHandler. + + /* + * Receive notification of a notation declaration event. + */ + virtual void notationDecl (const ACEXML_Char *name, + const ACEXML_Char *publicId, + const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of an unparsed entity declaration event. + */ + virtual void unparsedEntityDecl (const ACEXML_Char *name, + const ACEXML_Char *publicId, + const ACEXML_Char *systemId, + const ACEXML_Char *notationName ACEXML_ENV_ARG_DECL) + ; + + // Methods inherit from ACEXML_EnitityResolver. + + /* + * Allow the application to resolve external entities. + */ + virtual ACEXML_InputSource *resolveEntity (const ACEXML_Char *publicId, + const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) + ; + + // Methods inherit from ACEXML_ErrorHandler. + + /* + * Receive notification of a recoverable error. + */ + virtual void error (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of a non-recoverable error. + */ + virtual void fatalError (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL) + ; + + /* + * Receive notification of a warning. + */ + virtual void warning (ACEXML_SAXParseException &exception ACEXML_ENV_ARG_DECL) + ; + + void inc_indent (); + void dec_indent (); + void print_indent (); + +private: + + size_t indent_; + ACEXML_Char* fileName_; + ACEXML_Locator* locator_; +}; + +#if defined (__ACEXML_INLINE__) +# include "SAXPrint_Handler.inl" +#endif /* __ACEXML_INLINE__ */ +#endif /* ACEXML_SAXPRINT_HANDLER_H */ diff --git a/ACE/ACEXML/examples/SAXPrint/SAXPrint_Handler.inl b/ACE/ACEXML/examples/SAXPrint/SAXPrint_Handler.inl new file mode 100644 index 00000000000..2102291ea68 --- /dev/null +++ b/ACE/ACEXML/examples/SAXPrint/SAXPrint_Handler.inl @@ -0,0 +1,13 @@ +// -*- C++ -*- $Id$ + +ACEXML_INLINE void +ACEXML_SAXPrint_Handler::inc_indent (void) +{ + this->indent_ += 1; +} + +ACEXML_INLINE void +ACEXML_SAXPrint_Handler::dec_indent (void) +{ + this->indent_ -= 1; +} diff --git a/ACE/ACEXML/examples/SAXPrint/broken.xml b/ACE/ACEXML/examples/SAXPrint/broken.xml new file mode 100644 index 00000000000..8c350cc24fe --- /dev/null +++ b/ACE/ACEXML/examples/SAXPrint/broken.xml @@ -0,0 +1,5 @@ + + + + + kid diff --git a/ACE/ACEXML/examples/SAXPrint/main.cpp b/ACE/ACEXML/examples/SAXPrint/main.cpp new file mode 100644 index 00000000000..d875fff1964 --- /dev/null +++ b/ACE/ACEXML/examples/SAXPrint/main.cpp @@ -0,0 +1,207 @@ +// $Id$ + +#include "ACEXML/common/FileCharStream.h" +#include "ACEXML/common/HttpCharStream.h" +#include "ACEXML/common/StrCharStream.h" +#include "ACEXML/common/ZipCharStream.h" +#include "ACEXML/parser/parser/Parser.h" +#include "Print_Handler.h" +#include "SAXPrint_Handler.h" +#include "ace/Get_Opt.h" +#include "ace/Auto_Ptr.h" +#include "ace/Log_Msg.h" +#include "ace/OS_main.h" + +static const ACEXML_Char *test_string = +ACE_TEXT (" A " "); + +static void +usage (const ACE_TCHAR* program) +{ + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("Usage: %s [-sl] [-f | -u | -z ]\n") + ACE_TEXT (" -s: Use SAXPrint_Handler (Default is Print_Handler)\n") + ACE_TEXT (" -l: Parse the internal strings (test the StrCharStream class)\n") + ACE_TEXT (" -f: Specify the filename when -l is not specified\n") + ACE_TEXT (" -z: Specify that the file is inside a ZIP archive\n") + ACE_TEXT (" -u: URL specifying the path to the file\n"), + program)); +} + +int +ACE_TMAIN (int argc, ACE_TCHAR *argv[]) +{ + ACEXML_Char* filename = 0; + int sax = 0; // Use SAXPrint handler or not. + int str = 0; + int zip = 0; + ACEXML_Char* url = 0; + + ACE_Get_Opt get_opt (argc, argv, ACE_TEXT ("sf:lu:z")); + int c; + + while ((c = get_opt ()) != EOF) + { + switch (c) + { + case 's': + sax = 1; + break; + case 'l': + str = 1; + break; + case 'f': + filename = get_opt.opt_arg (); + break; + case 'u': + url = get_opt.opt_arg(); + break; + case 'z': + zip = 1; +#ifndef USE_ZZIP + ACE_ERROR ((LM_ERROR, ACE_TEXT ("ZZIPLIB support has not been") + ACE_TEXT (" compiled in. Refer to ") + ACE_TEXT ("$ACE_ROOT/ACEXML/README for more ") + ACE_TEXT ("information. \n"))); + return -1; +#else + break; +#endif /* USE_ZZIP */ + default: + usage(argv[0]); + return -1; + } + } + + if (str == 0 && filename == 0 && url == 0) { + usage(argv[0]); + return -1; + } + + ACEXML_DefaultHandler *handler = 0; + ACEXML_CharStream *stm = 0; + ACEXML_FileCharStream *fstm = 0; + ACEXML_HttpCharStream *ustm = 0; + ACEXML_StrCharStream* sstm = 0; +#ifdef USE_ZZIP + ACEXML_ZipCharStream* zstm = 0; +#endif /* USE_ZZIP */ + if (filename != 0) + { +#ifdef USE_ZZIP + if (zip) + { + ACE_NEW_RETURN (zstm, ACEXML_ZipCharStream(), -1); + if (zstm->open (filename) != 0) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("Failed to open XML file: %s\n"), + filename), + -1); + stm = zstm; + } + else + { +#endif /* USE_ZZIP */ + ACE_NEW_RETURN (fstm, ACEXML_FileCharStream (), -1); + if (fstm->open (filename) != 0) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("Failed to open XML file: %s\n"), + filename), + -1); + stm = fstm; +#ifdef USE_ZZIP + } +#endif /* USE_ZZIP */ + } + else if (url != 0) + { + + ACE_NEW_RETURN (ustm, ACEXML_HttpCharStream (), -1); + if (ustm->open (url) != 0) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("Failed to open URL : %s\n"), + url), + -1); + stm = ustm; + } + else + { + ACE_NEW_RETURN (sstm, ACEXML_StrCharStream, -1); + if (sstm->open (test_string, ACE_TEXT ("test_string")) < 0) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("Failed to open string : %s\n"), + test_string), + -1); + stm = sstm; + } + + ACEXML_Char* name = (filename == 0) ? url : filename; + if (sax == 0) + ACE_NEW_RETURN (handler, + ACEXML_Print_Handler (name), + -1); + else + ACE_NEW_RETURN (handler, + ACEXML_SAXPrint_Handler (name), + -1); + auto_ptr cleanup_handler (handler); + + ACEXML_Parser parser; + ACEXML_InputSource input (stm); + + parser.setContentHandler (handler); + parser.setDTDHandler (handler); + parser.setErrorHandler (handler); + parser.setEntityResolver (handler); + ACEXML_DECLARE_NEW_ENV; + + ACEXML_TRY_EX (FIRST) + { + parser.parse (&input ACEXML_ENV_ARG_PARAMETER); + ACEXML_TRY_CHECK_EX (FIRST); + } + ACEXML_CATCH (ACEXML_Exception, ex) + { + ex.print(); + ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Exception occurred. Exiting...\n"))); + } + ACEXML_ENDTRY; + ACEXML_TRY_EX (SECOND) + { + parser.parse (&input ACEXML_ENV_ARG_PARAMETER); + ACEXML_TRY_CHECK_EX (SECOND); + } + ACEXML_CATCH (ACEXML_SAXException, ex) + { + ex.print(); + ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Exception occurred. Exiting...\n"))); + return 1; + } + ACEXML_ENDTRY; +// ACEXML_TRY_EX (THIRD) +// { +// parser.parse (&input ACEXML_ENV_ARG_PARAMETER); +// ACEXML_TRY_CHECK_EX (THIRD); +// } +// ACEXML_CATCH (ACEXML_SAXException, ex) +// { +// ex.print(); +// ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Exception occurred. Exiting...\n"))); +// return 1; +// } +// ACEXML_ENDTRY; +// ACEXML_TRY_EX (FOURTH) +// { +// parser.parse (&input ACEXML_ENV_ARG_PARAMETER); +// ACEXML_TRY_CHECK_EX (FOURTH); +// } +// ACEXML_CATCH (ACEXML_SAXException, ex) +// { +// ex.print(); +// ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Exception occurred. Exiting...\n"))); +// return 1; +// } +// ACEXML_ENDTRY; + return 0; +} + diff --git a/ACE/ACEXML/examples/SAXPrint/namespaces.xml b/ACE/ACEXML/examples/SAXPrint/namespaces.xml new file mode 100644 index 00000000000..f2418848929 --- /dev/null +++ b/ACE/ACEXML/examples/SAXPrint/namespaces.xml @@ -0,0 +1,95 @@ + + + + + +Vignesh Blogs Here +http://primates.ximian.com/~ravi/BoozeLog/ + +en-us + +2002-10-11T00:50:42-06:00 +2002-10-12T20:19:57-06:00 + + + + + + + + + + + + + + + + + +Happy Birthday Vidya +Today is Vidya's birthday ! Happy Birthday Vidya! We had a midnight party,as usual, at Swapna's place, though I dont... +http://primates.ximian.com/~ravi/BoozeLog/archives/000025.html +Blog entry +Booze +2002-10-11T00:50:42-06:00 + + +Way to go, Shaastra! +On Flash Back mode now: Shaastra is the technical festival at my alma mater, IIT Madras, that replaced the old,... +http://primates.ximian.com/~ravi/BoozeLog/archives/000024.html +Blog entry +Booze +2002-10-10T11:52:02-06:00 + + +Back and Forth in Time +The blog is going to be a little skewed in time for the next coupla days.. Inspite of my laziness,... +http://primates.ximian.com/~ravi/BoozeLog/archives/000023.html +Blog entry +Booze +2002-10-09T23:47:19-06:00 + + +Frisco Rocks! +If there be any reason the blog hasnt been updated,it is simply because I am enjoying my trip to San... +http://primates.ximian.com/~ravi/BoozeLog/archives/000020.html +Blog entry +Booze +2002-10-03T23:53:16-06:00 + + +Think but not make thoughts your aim +A line from Rudyard Kipling's IF : would sum up my feelings for today, a lot of thinking from morning... +http://primates.ximian.com/~ravi/BoozeLog/archives/000013.html +Blog entry +Booze +2002-09-28T22:48:09-06:00 + + +New ARM but... +ARM stands for Advanced Recording Model, a simulation software that I use for my work, and I have been tinkering... +http://primates.ximian.com/~ravi/BoozeLog/archives/000012.html +Blog entry +Booze +2002-09-27T22:36:28-06:00 + + +A much needed break +Slowly got over the hangover of Sandhya's departure and moved to more mundane things in life : assignments, submissions and... +http://primates.ximian.com/~ravi/BoozeLog/archives/000011.html +Blog entry +Booze +2002-09-26T23:05:46-06:00 + + +Here we go ! +My first attempts at Blogging, the idea was introduced to me by Ravi Pratap. MoveableType really makes it easy and... +http://primates.ximian.com/~ravi/BoozeLog/archives/000008.html +Blog entry +Booze +2002-09-25T19:27:22-06:00 + + + + diff --git a/ACE/ACEXML/examples/SAXPrint/ns.svc.conf.xml b/ACE/ACEXML/examples/SAXPrint/ns.svc.conf.xml new file mode 100644 index 00000000000..980ef21de92 --- /dev/null +++ b/ACE/ACEXML/examples/SAXPrint/ns.svc.conf.xml @@ -0,0 +1,46 @@ + + + + -d + -p 4911 + + + A &lt; + + -p 3000 + + + + + + + + + + + + + + + + + -p + 3001 + + + + + + + + + + + + + + + + + diff --git a/ACE/ACEXML/examples/SAXPrint/simple.svcconf.xml b/ACE/ACEXML/examples/SAXPrint/simple.svcconf.xml new file mode 100644 index 00000000000..32afe359fdb --- /dev/null +++ b/ACE/ACEXML/examples/SAXPrint/simple.svcconf.xml @@ -0,0 +1,38 @@ + + + + A & + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ACE/ACEXML/examples/SAXPrint/svc.conf.xml b/ACE/ACEXML/examples/SAXPrint/svc.conf.xml new file mode 100644 index 00000000000..5296e5cac35 --- /dev/null +++ b/ACE/ACEXML/examples/SAXPrint/svc.conf.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + ]> + + + + + A & + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ACE/ACEXML/parser/Makefile.am b/ACE/ACEXML/parser/Makefile.am new file mode 100644 index 00000000000..35c60abcb8d --- /dev/null +++ b/ACE/ACEXML/parser/Makefile.am @@ -0,0 +1,13 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +SUBDIRS = \ + parser + diff --git a/ACE/ACEXML/parser/debug_validator/Debug_Attributes_Builder.cpp b/ACE/ACEXML/parser/debug_validator/Debug_Attributes_Builder.cpp new file mode 100644 index 00000000000..ccebd4b9098 --- /dev/null +++ b/ACE/ACEXML/parser/debug_validator/Debug_Attributes_Builder.cpp @@ -0,0 +1,211 @@ +// $Id$ + +#include "ACEXML/common/SAXExceptions.h" +#include "ACEXML/parser/debug_validator/Debug_Attributes_Builder.h" + +ACEXML_Debug_Attribute_Builder::ACEXML_Debug_Attribute_Builder () + : type_ (ERROR_TYPE), + default_decl_ (INVALID) +{ +} + +ACEXML_Debug_Attribute_Builder::ACEXML_Debug_Attribute_Builder (const ACEXML_Debug_Attribute_Builder &rhs) + : name_ (rhs.name_), + type_ (rhs.type_), + default_decl_ (rhs.default_decl_), + default_value_ (rhs.default_value_), + att_value_queue_ (rhs.att_value_queue_) +{ +} + +ACEXML_Debug_Attribute_Builder::~ACEXML_Debug_Attribute_Builder () +{ +} + +int +ACEXML_Debug_Attribute_Builder::setName (const ACEXML_Char *n) +{ + this->name_.set (n, 0); + return 0; +} + +const ACEXML_Char * +ACEXML_Debug_Attribute_Builder::getName (void) +{ + return this->name_.fast_rep (); +} + +int +ACEXML_Debug_Attribute_Builder::setAttType (const ATT_TYPE type + ACEXML_ENV_ARG_DECL) +{ + if (this->type_ == ERROR_TYPE) + { + this->type_ = type; + return 0; + } + ACEXML_THROW_RETURN (ACEXML_SAXParseException (ACE_TEXT("Attribute type redefinition in Debug Validator")), -1); + +} + +int +ACEXML_Debug_Attribute_Builder::insertList (const ACEXML_Char *n + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACEXML_String str (n, 0, 0); + + this->att_value_queue_.enqueue_tail (str); + return 0; +} + +int +ACEXML_Debug_Attribute_Builder::setDefault (const DEFAULT_DECL def, + const ACEXML_Char *value + ACEXML_ENV_ARG_DECL_NOT_USED) +{ + this->default_decl_ = def; + this->default_value_.set (value, 0); + return 0; +} + +int +ACEXML_Debug_Attribute_Builder::validAttr (void) +{ + // @@ Not implemented. Always return 1 (true) for now. + return 1; +} + +void +ACEXML_Debug_Attribute_Builder::dump (void) +{ + cout << this->name_ << " "; + + switch (this->type_) + { + case CDATA: + cout << "CDATA "; + break; + case ID: + cout << "ID "; + break; + case IDREF: + cout << "IDREF "; + break; + case IDREFS: + cout << "IDREFS "; + break; + case ENTITY: + cout << "ENTITY "; + break; + case ENTITIES: + cout << "ENTITIES "; + break; + case NMTOKEN: + cout << "NMTOKEN "; + break; + case NMTOKENS: + cout << "NMTOKENS "; + break; + case NOTATION: + cout << "NOTATION "; + // Fall thru + case ENUMERATION: + { + cout << "("; + ACEXML_STRING_QUEUE_ITERATOR iter (this->att_value_queue_); + ACEXML_String *n = 0; + + while (iter.advance () != 0) + { + if (n == 0) + cout << " | "; + iter.next (n); + cout << *n; + } + cout << ") "; + } + break; + default: + cout << "*** UNKNOWN TYPE ***"; + break; + } + + switch (this->default_decl_) + { + case REQUIRED: + cout << "#REQUIRED"; + break; + case IMPLIED: + cout << "#IMPLIED"; + break; + case FIXED: + cout << "#FIXED " << this->default_value_; + break; + default: + cout << "**** UNDEFINED DEFAULT DECL ****"; + break; + } +} +// ======================================== + +ACEXML_Debug_Attributes_Builder::ACEXML_Debug_Attributes_Builder () +{ +} + +ACEXML_Debug_Attributes_Builder::~ACEXML_Debug_Attributes_Builder () +{ +} + +int +ACEXML_Debug_Attributes_Builder::setElement (const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL_NOT_USED) +{ + this->element_name_.set (qName, 0); + return 0; +} + +ACEXML_Attribute_Def_Builder * +ACEXML_Debug_Attributes_Builder::getAttribute_Def_Builder () +{ + ACEXML_Attribute_Def_Builder *tmp; + + ACE_NEW_RETURN (tmp, + ACEXML_Debug_Attribute_Builder (), + 0); + return tmp; +} + +int +ACEXML_Debug_Attributes_Builder::insertAttribute (ACEXML_Attribute_Def_Builder *def ACEXML_ENV_ARG_DECL) +{ + ACEXML_Attribute_Def_Builder::VAR ptr (def); + + if (def != 0) + { + ACEXML_String attname (def->getName (), 0, 0); + ACEXML_Debug_Attribute_Builder *ptr = + dynamic_cast (def); + this->attributes_.bind (attname, *ptr); + return 0; + } + ACEXML_THROW_RETURN (ACEXML_SAXParseException (ACE_TEXT("ACEXML_Debug_Attributes_Builder internal error")), -1); +} + +void +ACEXML_Debug_Attributes_Builder::dump (void) +{ + // @@ Print print. + cout << "element_name_ << endl; + + ACEXML_ATT_MAP_ITER iter (this->attributes_); + ACEXML_ATT_MAP_ENTRY *item; + + while (iter.advance () != 0) + { + iter.next (item); + cout << "\n\t"; + item->int_id_.dump (); + } + cout << ">" << endl; +} diff --git a/ACE/ACEXML/parser/debug_validator/Debug_Attributes_Builder.h b/ACE/ACEXML/parser/debug_validator/Debug_Attributes_Builder.h new file mode 100644 index 00000000000..e22b6ef936a --- /dev/null +++ b/ACE/ACEXML/parser/debug_validator/Debug_Attributes_Builder.h @@ -0,0 +1,166 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Debug_Attributes_Builder.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= +#ifndef _ACEXML_DEBUG_ATTRIBUTES_BUILDER_H_ +#define _ACEXML_DEBUG_ATTRIBUTES_BUILDER_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/parser/debug_validator/Debug_DTD_Manager_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/Attributes_Def_Builder.h" +#include "ace/Hash_Map_Manager.h" +#include "ace/Unbounded_Queue.h" + +typedef ACE_Unbounded_Queue ACEXML_STRING_QUEUE; +typedef ACE_Unbounded_Queue_Iterator ACEXML_STRING_QUEUE_ITERATOR; + +/** + * @class ACEXML_Debug_Attribute_Builder Debug_Attributes_Builder.h "parser/debug_validator/Debug_Attributes_Builder.h" + * + * This class prints out the Attribute definition for debugging purpose. + */ +class ACEXML_DEBUG_DTD_MANAGER_Export ACEXML_Debug_Attribute_Builder + : public ACEXML_Attribute_Def_Builder +{ +public: + ACEXML_Debug_Attribute_Builder (); + + ACEXML_Debug_Attribute_Builder (const ACEXML_Debug_Attribute_Builder &rhs); + + virtual ~ACEXML_Debug_Attribute_Builder (); + + /** + * Specify the name of the attribute. + */ + virtual int setName (const ACEXML_Char *n); + virtual const ACEXML_Char *getName (void); + + /** + * Set the attribute type. + */ + virtual int setAttType (const ATT_TYPE type ACEXML_ENV_ARG_DECL); + + /** + * Insert an element for NOTATION or ENUMERATION type attribute. + */ + virtual int insertList (const ACEXML_Char *Name ACEXML_ENV_ARG_DECL); + + /** + * Set default attribute declaration. + */ + virtual int setDefault (const DEFAULT_DECL def, + const ACEXML_Char *value ACEXML_ENV_ARG_DECL) + ; + + /** + * Check validity of the current attribute definition being built. + * + * @retval 0 if the attribute is not a valid combo. + */ + virtual int validAttr (void); + + + /** + * Dump the content of the attribute definition. + */ + virtual void dump (void); +private: + /// Attribute name. + ACEXML_String name_; + + /// Type of attribute. + ATT_TYPE type_; + + /// Default value type. + DEFAULT_DECL default_decl_; + + /// Default attribute value. + ACEXML_String default_value_; + + /// Holds a queue of enumerated attribute values. + ACEXML_STRING_QUEUE att_value_queue_; +}; + +typedef ACE_Hash_Map_Entry ACEXML_ATT_MAP_ENTRY; + +typedef ACE_Hash_Map_Manager_Ex , + ACE_Equal_To, + ACE_Null_Mutex> ACEXML_ATT_MAP; + +typedef ACE_Hash_Map_Iterator_Ex, + ACE_Equal_To, + ACE_Null_Mutex> ACEXML_ATT_MAP_ITER; + +typedef ACE_Hash_Map_Reverse_Iterator_Ex, + ACE_Equal_To, + ACE_Null_Mutex> ACEXML_ATT_MAP_REVERSE_ITER; + +/** + * @class ACEXML_Debug_Attributes_Builder Debug_Attributes_Builder.h "parser/debug_validator/Debug_Attributes_Builder.h" + * + * This class prints out Attribute definitions for debugging purpose. + */ +class ACEXML_DEBUG_DTD_MANAGER_Export ACEXML_Debug_Attributes_Builder + : public ACEXML_Attributes_Def_Builder +{ +public: + ACEXML_Debug_Attributes_Builder (); + + virtual ~ACEXML_Debug_Attributes_Builder (); + + /** + * Set the element name that the attribute builder applies. + * + * @retval 0 if valid, -1 otherwise. + */ + virtual int setElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) + ; + + /** + * Acquire an Attribute_Builder. + */ + virtual ACEXML_Attribute_Def_Builder *getAttribute_Def_Builder (); + + /** + * Add a definition for one attribute. + */ + virtual int insertAttribute (ACEXML_Attribute_Def_Builder *def ACEXML_ENV_ARG_DECL); + + + /** + * Dump the content of the attribute definition. + */ + virtual void dump (void); +protected: + /// The name of the element type these attributes applied. + ACEXML_String element_name_; + + /// Collection of attributes. + ACEXML_ATT_MAP attributes_; +}; + + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_DEBUG_ATTRIBUTES_BUILDER_H_ */ diff --git a/ACE/ACEXML/parser/debug_validator/Debug_DTD_Manager.cpp b/ACE/ACEXML/parser/debug_validator/Debug_DTD_Manager.cpp new file mode 100644 index 00000000000..d0745d13bfc --- /dev/null +++ b/ACE/ACEXML/parser/debug_validator/Debug_DTD_Manager.cpp @@ -0,0 +1,71 @@ +// -*- C++ -*- $Id$ + +#include "ACEXML/common/SAXExceptions.h" +#include "ACEXML/parser/debug_validator/Debug_DTD_Manager.h" +#include "ACEXML/parser/debug_validator/Debug_Element_Builder.h" +#include "ACEXML/parser/debug_validator/Debug_Attributes_Builder.h" + +ACEXML_Debug_DTD_Manager::ACEXML_Debug_DTD_Manager () +{ + +} + +ACEXML_Debug_DTD_Manager::~ACEXML_Debug_DTD_Manager () +{ + +} + +ACEXML_Element_Def_Builder * +ACEXML_Debug_DTD_Manager::getElement_Def_Builder () +{ + return new ACEXML_Debug_Element_Builder (); +} + +int +ACEXML_Debug_DTD_Manager::insertElement_Definition (ACEXML_Element_Def_Builder *def ACEXML_ENV_ARG_DECL) +{ + ACEXML_Element_Def_Builder::VAR ptr (def); + + if (def != 0) + { + ptr->dump (); + return 0; + } + + ACEXML_THROW_RETURN (ACEXML_SAXParseException (ACE_TEXT("ACEXML_Debug_Attributes_Builder internal error")), -1); +} + +ACEXML_Attributes_Def_Builder * +ACEXML_Debug_DTD_Manager::getAttribute_Def_Builder () +{ + ACEXML_Attributes_Def_Builder *tmp; + ACE_NEW_RETURN (tmp, + ACEXML_Debug_Attributes_Builder (), + 0); + return tmp; +} + +int +ACEXML_Debug_DTD_Manager::insertAttributes_Definition (ACEXML_Attributes_Def_Builder *def ACEXML_ENV_ARG_DECL) +{ + ACEXML_Attributes_Def_Builder::VAR ptr (def); + if (def != 0) + { + ptr->dump (); + return 0; + } + + ACEXML_THROW_RETURN (ACEXML_SAXParseException (ACE_TEXT("ACEXML_Debug_Attributes_Builder internal error")), -1); +} + +ACEXML_Validator * +ACEXML_Debug_DTD_Manager::getValidator (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) +{ + ACE_UNUSED_ARG (namespaceURI); + ACE_UNUSED_ARG (localName); + ACE_UNUSED_ARG (qName); + + ACEXML_THROW_RETURN (ACEXML_SAXNotSupportedException (ACE_TEXT ("getValidator()")), 0); +} diff --git a/ACE/ACEXML/parser/debug_validator/Debug_DTD_Manager.h b/ACE/ACEXML/parser/debug_validator/Debug_DTD_Manager.h new file mode 100644 index 00000000000..0849d95ecb2 --- /dev/null +++ b/ACE/ACEXML/parser/debug_validator/Debug_DTD_Manager.h @@ -0,0 +1,76 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Debug_DTD_Manager.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= +#ifndef _ACEXML_DEBUG_DTD_Manager_H_ +#define _ACEXML_DEBUG_DTD_Manager_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/parser/debug_validator/Debug_DTD_Manager_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/DTD_Manager.h" + +class ACEXML_DEBUG_DTD_MANAGER_Export ACEXML_Debug_DTD_Manager : public ACEXML_DTD_Manager +{ +public: + ACEXML_Debug_DTD_Manager (); + + virtual ~ACEXML_Debug_DTD_Manager (); + + /** + * Acquire a pointer to an element definition builder. The XML parser use + * this interface to acquire the definition builder and use the builder + * to create the DTD element definition. The resulting builder is then + * registered with the DTD Manager or destroyed if error occured when the + * builder encountered errors. + * + * @retval 0 if error occurs creating the builder. + */ + virtual ACEXML_Element_Def_Builder *getElement_Def_Builder (); + + /** + * Insert a new element definition into the DTD Manager. + * + * @retval 0 if success, -1 if error. + */ + virtual int insertElement_Definition (ACEXML_Element_Def_Builder *def ACEXML_ENV_ARG_DECL); + + /** + * Acquire a pointer to an attributes definition builder. + * + */ + virtual ACEXML_Attributes_Def_Builder *getAttribute_Def_Builder (); + + /** + * Insert a new attributes definition into the DTD Manager. + * + * @retval 0 if success, -1 otherwise. + */ + virtual int insertAttributes_Definition (ACEXML_Attributes_Def_Builder *def ACEXML_ENV_ARG_DECL); + + /** + * Acquire an element validator to validate an XML element. + * + * @todo I haven't figured out what memory management scheme + * we should use for the acquired validator. + */ + virtual ACEXML_Validator *getValidator (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL); +}; + +#include /**/ "ace/post.h" + + +#endif /* _ACEXML_DTD_Manager_H_ */ diff --git a/ACE/ACEXML/parser/debug_validator/Debug_DTD_Manager_Export.h b/ACE/ACEXML/parser/debug_validator/Debug_DTD_Manager_Export.h new file mode 100644 index 00000000000..b4cf1c8a536 --- /dev/null +++ b/ACE/ACEXML/parser/debug_validator/Debug_DTD_Manager_Export.h @@ -0,0 +1,38 @@ + +// -*- C++ -*- +// $Id$ +// Definition for Win32 Export directives. +// This file is generated automatically by generate_export_file.pl -s ACEXML_DEBUG_DTD_MANAGER +// ------------------------------ +#ifndef ACEXML_DEBUG_DTD_MANAGER_EXPORT_H +#define ACEXML_DEBUG_DTD_MANAGER_EXPORT_H + +#include "ace/config-all.h" + +#if defined (ACE_AS_STATIC_LIBS) && !defined (ACEXML_DEBUG_DTD_MANAGER_HAS_DLL) +# define ACEXML_DEBUG_DTD_MANAGER_HAS_DLL 0 +#endif /* ACE_AS_STATIC_LIBS && ACEXML_DEBUG_DTD_MANAGER_HAS_DLL */ + +#if !defined (ACEXML_DEBUG_DTD_MANAGER_HAS_DLL) +# define ACEXML_DEBUG_DTD_MANAGER_HAS_DLL 1 +#endif /* ! ACEXML_DEBUG_DTD_MANAGER_HAS_DLL */ + +#if defined (ACEXML_DEBUG_DTD_MANAGER_HAS_DLL) && (ACEXML_DEBUG_DTD_MANAGER_HAS_DLL == 1) +# if defined (ACEXML_DEBUG_DTD_MANAGER_BUILD_DLL) +# define ACEXML_DEBUG_DTD_MANAGER_Export ACE_Proper_Export_Flag +# define ACEXML_DEBUG_DTD_MANAGER_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define ACEXML_DEBUG_DTD_MANAGER_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else /* ACEXML_DEBUG_DTD_MANAGER_BUILD_DLL */ +# define ACEXML_DEBUG_DTD_MANAGER_Export ACE_Proper_Import_Flag +# define ACEXML_DEBUG_DTD_MANAGER_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define ACEXML_DEBUG_DTD_MANAGER_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* ACEXML_DEBUG_DTD_MANAGER_BUILD_DLL */ +#else /* ACEXML_DEBUG_DTD_MANAGER_HAS_DLL == 1 */ +# define ACEXML_DEBUG_DTD_MANAGER_Export +# define ACEXML_DEBUG_DTD_MANAGER_SINGLETON_DECLARATION(T) +# define ACEXML_DEBUG_DTD_MANAGER_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* ACEXML_DEBUG_DTD_MANAGER_HAS_DLL == 1 */ + +#endif /* ACEXML_DEBUG_DTD_MANAGER_EXPORT_H */ + +// End of auto generated file. diff --git a/ACE/ACEXML/parser/debug_validator/Debug_Element_Builder.cpp b/ACE/ACEXML/parser/debug_validator/Debug_Element_Builder.cpp new file mode 100644 index 00000000000..da422a3429f --- /dev/null +++ b/ACE/ACEXML/parser/debug_validator/Debug_Element_Builder.cpp @@ -0,0 +1,144 @@ +// $Id$ + +#include "ACEXML/common/SAXExceptions.h" +#include "ACEXML/parser/debug_validator/Debug_Element_Builder.h" + +ACEXML_Debug_Element_Builder::ACEXML_Debug_Element_Builder () + : type_ (UNDEFINED), + root_ (0) +{ +} + +ACEXML_Debug_Element_Builder::~ACEXML_Debug_Element_Builder () +{ + delete this->root_; +} + +int +ACEXML_Debug_Element_Builder::setElementName (const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL_NOT_USED) +{ + this->element_.set (qName, 0); + return 0; +} + +int +ACEXML_Debug_Element_Builder::setContentType (CONTENT_TYPE type ACEXML_ENV_ARG_DECL) +{ + if (this->type_ == UNDEFINED) + { + this->type_ = type; + return 0; + } + + ACEXML_THROW_RETURN (ACEXML_SAXParseException (ACE_TEXT("Element type redefinition in Debug_Validator.")), -1); +} + +int +ACEXML_Debug_Element_Builder::insertMixedElement (const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACEXML_Element_Tree_Name_Node *node; + + // @@ We should "throw" an exception here instead of returning -1. + ACE_NEW_RETURN (node, + ACEXML_Element_Tree_Name_Node (qName), + -1); + + if (this->root_ == 0) + // @@ Memory leak if fail? + ACE_NEW_RETURN (this->root_, + ACEXML_Element_Tree_List_Node (), + -1); + + + return this->root_->insert (node); +} + +int +ACEXML_Debug_Element_Builder::startChildGroup () +{ + ACEXML_Element_Tree_List_Node *lnode; + + ACE_NEW_RETURN (lnode, + ACEXML_Element_Tree_List_Node (), + -1); + + if (this->root_ == 0) + { + this->root_ = lnode; + } + else + { + // @@ check error? + this->root_->insert (lnode); + } + + this->active_list_.push (lnode); + return 0; +} + +int +ACEXML_Debug_Element_Builder::endChildGroup (CARDINALITY ACEXML_ENV_ARG_DECL_NOT_USED) +{ + this->active_list_.pop (); + return 0; +} + +int +ACEXML_Debug_Element_Builder::setChoice () +{ + this->active_list_.top ()->set (ACEXML_Element_Tree_List_Node::CHOICE); + return 0; +} + +int +ACEXML_Debug_Element_Builder::setSequence () +{ + this->active_list_.top ()->set (ACEXML_Element_Tree_List_Node::SEQUENCE); + return 0; +} + +int +ACEXML_Debug_Element_Builder::insertElement (const ACEXML_Char *, + const ACEXML_Char *, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL_NOT_USED) +{ + ACEXML_Element_Tree_Name_Node *node; + + // @@ We should "throw" an exception here instead of returning -1. + ACE_NEW_RETURN (node, + ACEXML_Element_Tree_Name_Node (qName), + -1); + + return this->active_list_.top ()->insert (node); +} + +void +ACEXML_Debug_Element_Builder::dump () +{ + cout << "element_; + + // @@ Also dump element contentspec here. + switch (this->type_) + { + case EMPTY: + cout << "EMPTY"; + break; + case ANY: + cout << "ANY"; + break; + case MIXED: + case CHILDREN: + // @@ Dump the content of this->root_ + cout << "*** not implemented ***"; + break; + default: + cout << "*** Unidentified element type ***"; + break; + } + + cout << ">" << endl; +} diff --git a/ACE/ACEXML/parser/debug_validator/Debug_Element_Builder.h b/ACE/ACEXML/parser/debug_validator/Debug_Element_Builder.h new file mode 100644 index 00000000000..dc1f7765441 --- /dev/null +++ b/ACE/ACEXML/parser/debug_validator/Debug_Element_Builder.h @@ -0,0 +1,123 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Debug_Element_Builder.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= +#ifndef _ACEXML_DEBUG_ELEMENT_BUILDER_H_ +#define _ACEXML_DEBUG_ELEMENT_BUILDER_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/parser/debug_validator/Debug_DTD_Manager_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/Element_Def_Builder.h" +#include "ACEXML/parser/debug_validator/Element_Tree.h" + +/** + * @class ACEXML_Debug_Element_Builder Debug_Element_Builder.h "parser/debug_validator/Debug_Element_Builder.h" + * + * This class prints out the element definition for debugging purpose. + * + * @todo This class is not namespace-aware. + */ +class ACEXML_DEBUG_DTD_MANAGER_Export ACEXML_Debug_Element_Builder + : public ACEXML_Element_Def_Builder +{ +public: + ACEXML_Debug_Element_Builder (); + + virtual ~ACEXML_Debug_Element_Builder (); + + /** + * Define the name of the element. + * + * @retval 0 if valid, -1 otherwise. + */ + virtual int setElementName (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) + ; + + /** + * Define the content type of the element. + * + * @retval 0 if valid, -1 otherwise. + */ + virtual int setContentType (CONTENT_TYPE type ACEXML_ENV_ARG_DECL) + ; + + /** + * Insert one more element into Mixed definition. + */ + virtual int insertMixedElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) + ; + + /** + * Start a new group of children. + */ + virtual int startChildGroup (); + + /** + * End a new group of children. + * + * @retval 0 on success. + */ + virtual int endChildGroup (CARDINALITY card ACEXML_ENV_ARG_DECL); + + /** + * Set the type of current child group to Choice. + * + * @retval 0 on success, -1 if the type of the child group has + * already been set and this action conflicts with the previous + * setting. + */ + virtual int setChoice (); + + /** + * Set the type of current child group to Sequence. + * + * @retval 0 on success, -1 if the type of the child group has + * already been set and this action conflicts with the previous + * setting. + */ + virtual int setSequence (); + + /** + * Insert an new element into the current child group. + * + * @retval 0 on success, -1 otherwise. + */ + virtual int insertElement (const ACEXML_Char *namespaceURI, + const ACEXML_Char *localName, + const ACEXML_Char *qName ACEXML_ENV_ARG_DECL) + ; + + /** + * Dump the content of the attribute definition. + */ + virtual void dump (void); +private: + CONTENT_TYPE type_; + + ACEXML_String element_; + + ACEXML_Element_Tree_List_Node *root_; + + ACEXML_Element_Tree_List_Stack active_list_; +}; + + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_DEBUG_ELEMENT_BUILDER_H_ */ diff --git a/ACE/ACEXML/parser/debug_validator/Element_Tree.cpp b/ACE/ACEXML/parser/debug_validator/Element_Tree.cpp new file mode 100644 index 00000000000..e584e22dd62 --- /dev/null +++ b/ACE/ACEXML/parser/debug_validator/Element_Tree.cpp @@ -0,0 +1,72 @@ +// $Id$ + +#include "ACEXML/parser/debug_validator/Element_Tree.h" + +#if !defined (__ACEXML_INLINE__) +# include "ACEXML/parser/debug_validator/Element_Tree.inl" +#endif /* __ACEXML_INLINE__ */ + +ACEXML_Element_Tree_Node::~ACEXML_Element_Tree_Node () +{ + delete this->next_; +} + +ACE_ALLOC_HOOK_DEFINE (ACEXML_Element_Tree_Node) + +void +ACEXML_Element_Tree_Name_Node::dump () +{ + cout << this->name_; +} + +ACE_ALLOC_HOOK_DEFINE (ACEXML_Element_Tree_Name_Node) + +ACEXML_Element_Tree_List_Node::~ACEXML_Element_Tree_List_Node (void) +{ + delete this->head_; +} + +int +ACEXML_Element_Tree_List_Node::insert (ACEXML_Element_Tree_Node *node) +{ + if (this->head_ == 0) + { + this->tail_ = this->head_ = node; + } + else + { + this->tail_->next (node); + this->tail_ = node; + } + return 0; +} + +void +ACEXML_Element_Tree_List_Node::dump (void) +{ + ACEXML_Element_Tree_Node *ptr = this->head_; + const ACEXML_Char *separator = (this->type_ == SEQUENCE) ? ACE_TEXT(" , ") : ACE_TEXT(" | "); + + cout << "("; + + if (ptr != 0) + { + ptr->dump (); + ptr = ptr->next (); + + while (ptr != 0) + { + cout << separator; + ptr->dump (); + ptr->next (); + } + } + + cout << ")"; +} + +ACE_ALLOC_HOOK_DEFINE (ACEXML_Element_Tree_List_Node) + + + +ACE_ALLOC_HOOK_DEFINE (ACEXML_Element_Tree_List_Stack) diff --git a/ACE/ACEXML/parser/debug_validator/Element_Tree.h b/ACE/ACEXML/parser/debug_validator/Element_Tree.h new file mode 100644 index 00000000000..4738b5de2f4 --- /dev/null +++ b/ACE/ACEXML/parser/debug_validator/Element_Tree.h @@ -0,0 +1,160 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Element_Tree.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= +#ifndef _ACEXML_ELEMENT_TREE_H_ +#define _ACEXML_ELEMENT_TREE_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/parser/debug_validator/Debug_DTD_Manager_Export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/XML_Types.h" + +/** + * @class ACEXML_Element_Tree_Node Element_Tree.h "parser/debug_validator/Element_Tree.h" + * + * @brief An abstract base class for describing DTD child element definition. + * + * @sa ACEXML_Element_Tree_Name_Node, ACEXML_Element_Tree_List_Node + */ +class ACEXML_DEBUG_DTD_MANAGER_Export ACEXML_Element_Tree_Node +{ +public: + + /// Default constructor. + ACEXML_Element_Tree_Node (); + + /// Destructor + virtual ~ACEXML_Element_Tree_Node (); + + /// Accessor for next element in chain + ACEXML_Element_Tree_Node *next (); + void next (ACEXML_Element_Tree_Node *n); + + /// Displaying the content. + virtual void dump () = 0; + + ACE_ALLOC_HOOK_DECLARE; + +protected: + ACEXML_Element_Tree_Node *next_; +}; + +/** + * @class ACEXML_Element_Tree_Name_Node Element_Tree.h "parser/debug_validator/Element_Tree.h" + * + * @brief An abstract base class for describing a name node in a DTD child + * element definition. + * + * @sa ACEXML_Element_Tree_Node, ACEXML_Element_Tree_List_Node + */ +class ACEXML_DEBUG_DTD_MANAGER_Export ACEXML_Element_Tree_Name_Node + : public ACEXML_Element_Tree_Node +{ +public: + /// Constructor. + ACEXML_Element_Tree_Name_Node (const ACEXML_Char *name, + int release = 1); + + /// Change the name of this node. + void set (const ACEXML_Char *name, + int release = 1); + + virtual void dump (); + + ACE_ALLOC_HOOK_DECLARE; +protected: + ACEXML_String name_; +}; + +class ACEXML_Element_Tree_List_Stack; + +/** + * @class ACEXML_Element_Tree_List_Node Element_Tree.h "parser/debug_validator/Element_Tree.h" + * + * @brief An abstract base class for describing a node list in a DTD child + * element definition. + * + * @sa ACEXML_Element_Tree_Node, ACEXML_Element_Tree_Name_Node + */ +class ACEXML_DEBUG_DTD_MANAGER_Export ACEXML_Element_Tree_List_Node + : public ACEXML_Element_Tree_Node +{ +public: + friend class ACEXML_Element_Tree_List_Stack; + + typedef enum { + SEQUENCE, + CHOICE + } LIST_TYPE; + + /// Default constructor. + ACEXML_Element_Tree_List_Node (void); + + /// Destructor. + virtual ~ACEXML_Element_Tree_List_Node (void); + + /// Insert a new ACEXML_Element_Tree_Node into the list. + int insert (ACEXML_Element_Tree_Node *node); + + /// Get/set the type of list. + LIST_TYPE get (void); + int set (LIST_TYPE type); + + virtual void dump (); + + ACE_ALLOC_HOOK_DECLARE; +protected: + LIST_TYPE type_; + + ACEXML_Element_Tree_Node *head_; + + ACEXML_Element_Tree_Node *tail_; + + ACEXML_Element_Tree_List_Node *pop_next_; +}; + +/** + * @class ACEXML_Element_Tree_List_Stack Element_Tree.h "parser/debug_validator/Element_Tree.h" + * + * @brief A class for managing a stack of ACEXML_Element_Tree_List_Node's. + * + * @sa ACEXML_Element_Tree_List_Node + */ +class ACEXML_DEBUG_DTD_MANAGER_Export ACEXML_Element_Tree_List_Stack +{ +public: + ACEXML_Element_Tree_List_Stack (); + + void push (ACEXML_Element_Tree_List_Node *n); + + ACEXML_Element_Tree_List_Node *pop (void); + + ACEXML_Element_Tree_List_Node *top (void); + + int empty (void); + + ACE_ALLOC_HOOK_DECLARE; + +protected: + ACEXML_Element_Tree_List_Node *top_; +}; + +#if defined (__ACEXML_INLINE__) +# include "ACEXML/parser/debug_validator/Element_Tree.inl" +#endif /* __ACEXML_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_ELEMENT_TREE_H_ */ diff --git a/ACE/ACEXML/parser/debug_validator/Element_Tree.inl b/ACE/ACEXML/parser/debug_validator/Element_Tree.inl new file mode 100644 index 00000000000..4b408835403 --- /dev/null +++ b/ACE/ACEXML/parser/debug_validator/Element_Tree.inl @@ -0,0 +1,92 @@ +// $Id$ + +ACEXML_INLINE +ACEXML_Element_Tree_Node::ACEXML_Element_Tree_Node () + : next_ (0) +{ +} + +ACEXML_INLINE ACEXML_Element_Tree_Node * +ACEXML_Element_Tree_Node::next () +{ + return this->next_; +} + +ACEXML_INLINE void +ACEXML_Element_Tree_Node::next (ACEXML_Element_Tree_Node * n) +{ + this->next_ = n; +} + +ACEXML_INLINE +ACEXML_Element_Tree_Name_Node::ACEXML_Element_Tree_Name_Node (const ACEXML_Char *name, + int release) + : name_ (name, 0, release) +{ +} + +ACEXML_INLINE void +ACEXML_Element_Tree_Name_Node::set (const ACEXML_Char *name, + int release) +{ + this->name_.set (name, release); +} + +ACEXML_INLINE +ACEXML_Element_Tree_List_Node::ACEXML_Element_Tree_List_Node (void) + : type_ (SEQUENCE), + head_ (0), + tail_ (0), + pop_next_ (0) +{ +} + +ACEXML_INLINE ACEXML_Element_Tree_List_Node::LIST_TYPE +ACEXML_Element_Tree_List_Node::get (void) +{ + return this->type_; +} + +ACEXML_INLINE int +ACEXML_Element_Tree_List_Node::set (ACEXML_Element_Tree_List_Node::LIST_TYPE type) +{ + this->type_ = type; + return 0; +} + +ACEXML_INLINE +ACEXML_Element_Tree_List_Stack::ACEXML_Element_Tree_List_Stack (void) + : top_ (0) +{ +} + +ACEXML_INLINE ACEXML_Element_Tree_List_Node * +ACEXML_Element_Tree_List_Stack::top () +{ + return this->top_; +} + +ACEXML_INLINE void +ACEXML_Element_Tree_List_Stack::push (ACEXML_Element_Tree_List_Node *n) +{ + n->pop_next_ = this->top_; + this->top_ = n; +} + +ACEXML_INLINE ACEXML_Element_Tree_List_Node * +ACEXML_Element_Tree_List_Stack::pop () +{ + if (this->top_ != 0) + { + ACEXML_Element_Tree_List_Node *ptr = this->top_; + this->top_ = this->top_->pop_next_; + return ptr; + } + return 0; +} + +ACEXML_INLINE int +ACEXML_Element_Tree_List_Stack::empty () +{ + return this->top_ == 0; +} diff --git a/ACE/ACEXML/parser/parser/ACEXML_Parser.pc.in b/ACE/ACEXML/parser/parser/ACEXML_Parser.pc.in new file mode 100644 index 00000000000..61fb0d02374 --- /dev/null +++ b/ACE/ACEXML/parser/parser/ACEXML_Parser.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: ACEXML_Parser +Description: ACE XML Parser Library +Requires: ACEXML +Version: @VERSION@ +Libs: -L${libdir} -lACEXML_Parser +Cflags: -I${includedir} diff --git a/ACE/ACEXML/parser/parser/Entity_Manager.cpp b/ACE/ACEXML/parser/parser/Entity_Manager.cpp new file mode 100644 index 00000000000..0f27707ae72 --- /dev/null +++ b/ACE/ACEXML/parser/parser/Entity_Manager.cpp @@ -0,0 +1,20 @@ +// $Id$ + +#include "ACEXML/parser/parser/Entity_Manager.h" + +#if !defined (__ACEXML_INLINE__) +# include "ACEXML/parser/parser/Entity_Manager.inl" +#endif /* __ACEXML_INLINE__ */ + + +ACEXML_Entity_Manager::ACEXML_Entity_Manager (void) + : entities_ (0) +{ + +} + +ACEXML_Entity_Manager::~ACEXML_Entity_Manager (void) +{ + this->reset(); +} + diff --git a/ACE/ACEXML/parser/parser/Entity_Manager.h b/ACE/ACEXML/parser/parser/Entity_Manager.h new file mode 100644 index 00000000000..e97233a6146 --- /dev/null +++ b/ACE/ACEXML/parser/parser/Entity_Manager.h @@ -0,0 +1,100 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Entity_Manager.h + * + * $Id$ + * + * @author Nanbor Wang + * @author Krishnakumar B + */ +//============================================================================= + +#ifndef ACEXML_ENTITY_MANAGER_H +#define ACEXML_ENTITY_MANAGER_H + +#include /**/ "ace/pre.h" +#include "ACEXML/parser/parser/Parser_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/XML_Types.h" +#include "ace/Hash_Map_Manager.h" +#include "ace/Null_Mutex.h" + +typedef ACE_Hash_Map_Entry ACEXML_ENTITY_ENTRY; + +typedef ACE_Hash_Map_Manager_Ex, + ACE_Equal_To, + ACE_Null_Mutex> ACEXML_ENTITIES_MANAGER; + +typedef ACE_Hash_Map_Iterator_Ex, + ACE_Equal_To, + ACE_Null_Mutex> ACEXML_ENTITIES_MANAGER_ITER; + +typedef ACE_Hash_Map_Reverse_Iterator_Ex, + ACE_Equal_To, + ACE_Null_Mutex> ACEXML_ENTITIES_MANAGER_REVERSE_ITER; + +typedef ACE_Hash_Map_Bucket_Iterator, + ACE_Equal_To, + ACE_Null_Mutex> ACEXML_ENTITY_ENTRY_ITERATOR; + +/** + * @class ACEXML_Entity_Manager Entity_Manager.h "ACEXML/parser/parser/Entity_Manager.h" + * + * @brief Class to manage and resolve entity references. + * + * @todo Fill in details for this class. + */ +class ACEXML_PARSER_Export ACEXML_Entity_Manager +{ +public: + /// Default constructor. + ACEXML_Entity_Manager (void); + + /// Destructor. + ~ACEXML_Entity_Manager (void); + + /// Add a new entity declaration. + int add_entity (const ACEXML_Char *ref, const ACEXML_Char *value); + + /// Resolve an entity reference. + const ACEXML_Char* resolve_entity (const ACEXML_Char *ref); + + /// Resolve an entity reference and return the tuple of @c systemId and + /// @c publicId + int resolve_entity (const ACEXML_Char* ref, ACEXML_Char*& systemId, + ACEXML_Char*& publicId); + + /// Number of items in the Entity Manager + size_t size(void) const; + + /// Reset the state + int reset (void); + +private: + ACEXML_ENTITIES_MANAGER* entities_; + bool init_; + +}; + +#if defined (__ACEXML_INLINE__) +# include "ACEXML/parser/parser/Entity_Manager.inl" +#endif /* __ACEXML_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* ACEXML_ENTITY_MANAGER_H */ diff --git a/ACE/ACEXML/parser/parser/Entity_Manager.inl b/ACE/ACEXML/parser/parser/Entity_Manager.inl new file mode 100644 index 00000000000..ca859a0b0d5 --- /dev/null +++ b/ACE/ACEXML/parser/parser/Entity_Manager.inl @@ -0,0 +1,66 @@ +// $Id$ + +ACEXML_INLINE int +ACEXML_Entity_Manager::add_entity (const ACEXML_Char *ref, + const ACEXML_Char *v) +{ + if (!this->entities_ ) + ACE_NEW_RETURN (this->entities_, ACEXML_ENTITIES_MANAGER, -1); + ACEXML_String name (ref, 0, false); + ACEXML_String value (v, 0, false); + return this->entities_->bind (name, value); +} + +ACEXML_INLINE const ACEXML_Char* +ACEXML_Entity_Manager::resolve_entity (const ACEXML_Char *ref) +{ + if (!this->entities_) + return 0; + + ACEXML_ENTITY_ENTRY *entry = 0; + + if (this->entities_->find (ACEXML_String (ref, 0, false), + entry) == 0) + return entry->int_id_.c_str(); + return 0; +} + +ACEXML_INLINE int +ACEXML_Entity_Manager::resolve_entity (const ACEXML_Char* ref, + ACEXML_Char*& systemId, + ACEXML_Char*& publicId) +{ + if (!this->entities_) + return 0; + + publicId = systemId = 0; + ACEXML_ENTITY_ENTRY_ITERATOR iter (*this->entities_, ref); + ACEXML_ENTITY_ENTRY_ITERATOR end (*this->entities_, ref, 1); + + if (iter != end) + { + systemId = const_cast ((*iter).int_id_.c_str()); + ++iter; + if (iter != end) + publicId = const_cast ((*iter).int_id_.c_str()); + return 0; + } + return -1; +} + +ACEXML_INLINE int +ACEXML_Entity_Manager::reset (void) +{ + delete this->entities_; + this->entities_ = 0; + return 0; +} + + +ACEXML_INLINE size_t +ACEXML_Entity_Manager::size (void) const +{ + if (!this->entities_) + return 0; + return this->entities_->current_size(); +} diff --git a/ACE/ACEXML/parser/parser/Makefile.am b/ACE/ACEXML/parser/parser/Makefile.am new file mode 100644 index 00000000000..f4440e30faf --- /dev/null +++ b/ACE/ACEXML/parser/parser/Makefile.am @@ -0,0 +1,73 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +includedir = @includedir@/ACEXML/parser/parser +pkgconfigdir = @libdir@/pkgconfig + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + + +## Makefile.ACEXML_Parser.am + +if !BUILD_ACE_FOR_TAO + +lib_LTLIBRARIES = libACEXML_Parser.la + +libACEXML_Parser_la_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -DACEXML_PARSER_BUILD_DLL + +libACEXML_Parser_la_SOURCES = \ + Entity_Manager.cpp \ + Parser.cpp \ + ParserContext.cpp \ + ParserInternals.cpp + +libACEXML_Parser_la_LDFLAGS = \ + -release @ACE_VERSION_NAME@ + +libACEXML_Parser_la_LIBADD = \ + $(ACE_BUILDDIR)/ACEXML/common/libACEXML.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +nobase_include_HEADERS = \ + Entity_Manager.h \ + Entity_Manager.inl \ + Parser.h \ + Parser.inl \ + ParserContext.h \ + ParserContext.inl \ + ParserInternals.h \ + Parser_export.h + +pkgconfig_DATA = \ + ACEXML_Parser.pc + +CLEANFILES = \ + ACEXML_Parser.pc + +ACEXML_Parser.pc: ${top_builddir}/config.status ${srcdir}/ACEXML_Parser.pc.in + ${top_builddir}/config.status --file $@:${srcdir}/ACEXML_Parser.pc.in + +endif !BUILD_ACE_FOR_TAO + +EXTRA_DIST = \ + ACEXML_Parser.pc.in + + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/ACEXML/parser/parser/Parser.cpp b/ACE/ACEXML/parser/parser/Parser.cpp new file mode 100644 index 00000000000..a7d4b8aab42 --- /dev/null +++ b/ACE/ACEXML/parser/parser/Parser.cpp @@ -0,0 +1,3352 @@ +// $Id$ + +#include "ACEXML/parser/parser/Parser.h" + +#if !defined (__ACEXML_INLINE__) +# include "ACEXML/parser/parser/Parser.inl" +#endif /* __ACEXML_INLINE__ */ + +#include "ace/ACE.h" +#include "ACEXML/common/Transcode.h" +#include "ACEXML/common/AttributesImpl.h" +#include "ACEXML/common/StrCharStream.h" +#include "ACEXML/common/StreamFactory.h" +#include "ACEXML/parser/parser/ParserInternals.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_strings.h" + +static const ACEXML_Char default_attribute_type[] = ACE_TEXT ("CDATA"); +static const ACEXML_Char empty_string[] = { 0 }; + +const ACEXML_Char +ACEXML_Parser::simple_parsing_feature_[] = ACE_TEXT ("Simple"); + +const ACEXML_Char +ACEXML_Parser::namespaces_feature_[] = ACE_TEXT ("http://xml.org/sax/features/namespaces"); + +const ACEXML_Char +ACEXML_Parser::namespace_prefixes_feature_[] = ACE_TEXT ("http://xml.org/sax/features/namespace-prefixes"); + +const ACEXML_Char +ACEXML_Parser::validation_feature_[] = ACE_TEXT ("http://xml.org/sax/features/validation"); + +ACEXML_Parser::ACEXML_Parser (void) + : dtd_handler_ (0), + entity_resolver_ (0), + content_handler_ (0), + error_handler_ (0), + doctype_ (0), + current_ (0), + alt_stack_ (MAXPATHLEN), + nested_namespace_ (0), + ref_state_ (ACEXML_ParserInt::INVALID), + external_subset_ (0), + external_entity_ (0), + has_pe_refs_ (0), + standalone_ (0), + external_dtd_ (0), + internal_dtd_ (0), + simple_parsing_ (0), + validate_ (1), + namespaces_(1), + namespace_prefixes_ (0) +{ +} + +ACEXML_Parser::~ACEXML_Parser (void) +{ + +} + +int +ACEXML_Parser::initialize(ACEXML_InputSource* input) +{ + // Initialize namespace support + if (this->xml_namespace_.init() == -1) + { + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("Error initializing namespace support\n"))); + return -1; + } + for (int i = 0; i < 5; ++i) + { + if (this->predef_entities_.add_entity (ACEXML_ParserInt::predef_ent_[i], + ACEXML_ParserInt::predef_val_[i]) + != 0) + { + ACE_ERROR ((LM_DEBUG, + ACE_TEXT ("Error adding entity %s to Manager\n"), + ACEXML_ParserInt::predef_ent_[i])); + return -1; + } + } + return this->switch_input (input, input->getSystemId()); +} + +void +ACEXML_Parser::parse (const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) +{ + ACEXML_InputSource* input = 0; + ACE_NEW (input, ACEXML_InputSource (systemId)); + this->parse (input ACEXML_ENV_ARG_PARAMETER); +} + +void +ACEXML_Parser::parse (ACEXML_InputSource *input ACEXML_ENV_ARG_DECL) +{ + if (input == 0) + { + this->fatal_error(ACE_TEXT ("Invalid input source") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + } + if (this->content_handler_ == 0) + { + this->fatal_error (ACE_TEXT ("No content handlers defined. Exiting..") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + } + + if (this->validate_ && this->dtd_handler_ == 0) + { + this->fatal_error (ACE_TEXT ("No DTD handlers defined. Exiting..") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + } + + + if (this->initialize(input) == -1) + { + this->fatal_error (ACE_TEXT ("Failed to initialize parser state") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + } + // Set up Locator. + this->content_handler_->setDocumentLocator (this->current_->getLocator()); + + int xmldecl_defined = 0; + ACEXML_Char fwd = this->get(); // Consume '<' + if (fwd == '<' && this->peek() == '?') + { + this->get(); // Consume '?' + fwd = this->peek(); + if (fwd == 'x' && !xmldecl_defined) + { + this->parse_xml_decl (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK; + xmldecl_defined = 1; + } + } + // We need a XMLDecl in a Valid XML document + if (this->validate_ && !xmldecl_defined) + { + this->fatal_error (ACE_TEXT ("Expecting an XMLDecl at the beginning of") + ACE_TEXT (" a valid document") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + } + this->content_handler_->startDocument (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK; + + int doctype_defined = 0; + for (int prolog_done = 0; prolog_done == 0; ) + { + // Expect a '<' only if we have encountered a XMLDecl, or we are + // looping through Misc blocks. + if (xmldecl_defined) + { + if (this->skip_whitespace () != '<') + { + this->fatal_error (ACE_TEXT ("Expecting '<' at the beginning of ") + ACE_TEXT ("Misc section") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + } + fwd = this->peek(); + } + switch (fwd) + { + case '?': + this->get(); + this->parse_processing_instruction (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK; + xmldecl_defined = 1; + break; + case '!': + this->get(); + fwd = this->peek (); + if (fwd == 'D' && !doctype_defined) // DOCTYPE + { + // This will also take care of the trailing MISC block if any. + this->parse_doctypedecl (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK; + doctype_defined = 1; + // Now that we have a DOCTYPE Decl defined, we shouldn't + // accept XML Decl any longer + xmldecl_defined = 1; + } + else if (fwd == 'D') + { + this->fatal_error (ACE_TEXT ("Duplicate DOCTYPE declaration") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + } + else if (fwd == '-') // COMMENT + { + if (this->parse_comment () < 0) + { + this->fatal_error(ACE_TEXT ("Invalid comment in document") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + } + xmldecl_defined = 1; + } + break; + case 0: + this->fatal_error (ACE_TEXT ("Unexpected end-of-file") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + default: // Root element begins + prolog_done = 1; + break; + } + } + + if (this->validate_ && !doctype_defined) + { + this->warning (ACE_TEXT ("No doctypeDecl in valid document") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + } + + // Now parse root element. + this->parse_element (1 ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + + this->content_handler_->endDocument (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK; + + // Reset the parser state + this->reset(); + +} + +int +ACEXML_Parser::parse_doctypedecl (ACEXML_ENV_SINGLE_ARG_DECL) +{ + if (this->parse_token (ACE_TEXT ("DOCTYPE")) < 0) + { + this->fatal_error(ACE_TEXT ("Expecting keyword DOCTYPE in a doctypedecl") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + ACEXML_Char nextch = 0; + if (this->skip_whitespace_count (&nextch) == 0) + { + this->fatal_error(ACE_TEXT ("Expecting a space between DOCTYPE keyword ") + ACE_TEXT ("and name") ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + this->doctype_ = this->parse_name (); + if (this->doctype_ == 0) + { + this->fatal_error(ACE_TEXT ("Invalid DOCTYPE name") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + int count = this->skip_whitespace_count (&nextch); + + if (nextch == 'S' || nextch == 'P') // ExternalID defined + { + if (count == 0) + { + this->fatal_error(ACE_TEXT ("Expecting a space between DOCTYPE") + ACE_TEXT ("keyword and name") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + this->external_dtd_ = 1; + this->parse_external_dtd (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + nextch = this->skip_whitespace (); + switch (nextch) + { + case '[': + this->internal_dtd_ = 1; // Internal DTD definition + this->parse_internal_dtd (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + case '>': // End of DTD definition + // This is an XML document without a doctypedecl. + if (this->validate_ && !this->external_dtd_) + { + this->fatal_error (ACE_TEXT ("No DTD defined") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + return 0; + case '0': + this->fatal_error (ACE_TEXT ("Unexpected end-of-file") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + default: + break; + } + + if (this->skip_whitespace() != '>') + { + this->fatal_error(ACE_TEXT ("Expecting '>' at end of doctypedecl") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + return 0; +} + +int +ACEXML_Parser::parse_internal_dtd (ACEXML_ENV_SINGLE_ARG_DECL) +{ + this->ref_state_ = ACEXML_ParserInt::IN_INT_DTD; + ACEXML_Char nextch = this->skip_whitespace (); + do { + switch (nextch) + { + case '<': + nextch = this->get(); + switch (nextch) + { + case '!': + this->parse_markup_decl (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + case '?': + this->parse_processing_instruction (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + default: + this->fatal_error (ACE_TEXT ("Invalid internal subset") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + } + break; + case '%': + this->has_pe_refs_ = 1; + this->parse_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + case ']': // End of internal definitions. + return 0; + case '&': + this->fatal_error (ACE_TEXT ("Invalid Reference in internal DTD") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + case 0: + this->pop_context (0 ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + default: + this->fatal_error (ACE_TEXT ("Invalid content in internal subset") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + }; + nextch = this->skip_whitespace (); + } while (1); + + ACE_NOTREACHED (return -1); +} + +int +ACEXML_Parser::parse_external_dtd (ACEXML_ENV_SINGLE_ARG_DECL) +{ + this->ref_state_ = ACEXML_ParserInt::IN_EXT_DTD; + ACEXML_Char* publicId = 0; + ACEXML_Char* systemId = 0; + if (this->parse_external_id (publicId, systemId + ACEXML_ENV_ARG_PARAMETER) != 0) + { + this->fatal_error (ACE_TEXT ("Error in parsing ExternalID") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (this->validate_) + { + ACEXML_Char* uri = this->normalize_systemid (systemId); + ACE_Auto_Basic_Array_Ptr cleanup_uri (uri); + ACEXML_InputSource* ip = 0; + if (this->entity_resolver_) + { + ip = this->entity_resolver_->resolveEntity (publicId, + (uri ? uri : systemId) + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (ip) + { + if (this->switch_input (ip, (uri ? uri : systemId), publicId) != 0) + return -1; + } + else + { + ACEXML_StreamFactory factory; + ACEXML_CharStream* cstream = factory.create_stream (uri ? + uri: systemId); + if (!cstream) { + this->fatal_error (ACE_TEXT ("Invalid input source") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (this->switch_input (cstream, systemId, publicId) != 0) + return -1; + } + this->parse_external_subset (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + return 0; +} + + +int +ACEXML_Parser::parse_external_subset (ACEXML_ENV_SINGLE_ARG_DECL) +{ + this->ref_state_ = ACEXML_ParserInt::IN_EXT_DTD; + this->external_subset_ = 1; + size_t nrelems = 0; + ACEXML_Char nextch = this->skip_whitespace(); + do { + switch (nextch) + { + case '<': + nextch = this->get(); + switch (nextch) + { + case '!': + nextch = this->peek(); + if (nextch == '[') + this->parse_conditional_section (ACEXML_ENV_SINGLE_ARG_PARAMETER); + else + this->parse_markup_decl (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + case '?': + nextch = this->peek(); + if (nextch == 'x') + this->parse_text_decl (ACEXML_ENV_SINGLE_ARG_PARAMETER); + else + this->parse_processing_instruction (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + default: + this->fatal_error (ACE_TEXT ("Invalid content in external DTD") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + break; + case '%': + this->parse_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + case 0: + nrelems = this->pop_context (0 ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + if (nrelems == 1) + return 0; + break; + default: + this->fatal_error (ACE_TEXT ("Invalid content in external DTD") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + nextch = this->skip_whitespace(); + } while (1); +} + +int +ACEXML_Parser::parse_conditional_section (ACEXML_ENV_SINGLE_ARG_DECL) +{ + ACEXML_Char ch = this->get (); + int include = 0; + if (ch != '[') + { + this->fatal_error(ACE_TEXT ("Internal Parser Error") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + ch = this->skip_whitespace(); + if (ch == '%') + { + this->parse_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + ch = this->skip_whitespace(); + } + if (ch == 'I') + { + ch = this->get(); + switch (ch) + { + case 'N': + if (this->parse_token (ACE_TEXT ("CLUDE")) < 0) + { + this->fatal_error (ACE_TEXT ("Expecting keyword INCLUDE in ") + ACE_TEXT ("conditionalSect") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + include = 1; + break; + case 'G': + if (this->parse_token (ACE_TEXT ("GNORE")) < 0) + { + this->fatal_error (ACE_TEXT ("Expecting keyword IGNORE in ") + ACE_TEXT ("conditionalSect") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + include = 0; + break; + default: + this->fatal_error (ACE_TEXT ("Invalid conditionalSect") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + ACEXML_Char fwd = '\xFF'; + this->skip_whitespace_count (&fwd); + if (fwd == 0) + { + this->get(); // Consume the 0 + this->pop_context (0 ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + } + else + { + this->fatal_error (ACE_TEXT ("Invalid conditionalSect") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (this->skip_whitespace() != '[') + { + this->fatal_error (ACE_TEXT ("Expecting '[' in conditionalSect") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (include) + this->parse_includesect (ACEXML_ENV_SINGLE_ARG_PARAMETER); + else + this->parse_ignoresect (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + return 0; +} + +int +ACEXML_Parser::parse_ignoresect (ACEXML_ENV_SINGLE_ARG_DECL) +{ + ACEXML_Char nextch = this->skip_whitespace(); + int count = 0; + int done = 0; + do { + switch (nextch) + { + case '<': + if (this->peek() == '!') + { + this->get(); + if (this->peek() == '[') + { + this->get(); + count++; + } + } + break; + case ']': + if (this->peek() == ']') + { + this->get(); + if (this->peek() == '>') + { + this->get(); + if (count) + { + --count; + break; + } + done = 1; + } + } + break; + case 0: // [VC: Proper Conditional Section/PE Nesting] + if (count != 0) + { + this->fatal_error (ACE_TEXT ("Invalid Conditional Section/PE ") + ACE_TEXT ("Nesting ") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + default: + break; + } + if (done) + break; + nextch = this->get(); + } while (1); + + return 0; +} + +int +ACEXML_Parser::parse_includesect (ACEXML_ENV_SINGLE_ARG_DECL) +{ + ACEXML_Char nextch = this->skip_whitespace(); + do { + switch (nextch) + { + case '<': + nextch = this->get(); + switch (nextch) + { + case '!': + nextch = this->peek(); + if (nextch == '[') + this->parse_conditional_section (ACEXML_ENV_SINGLE_ARG_PARAMETER); + else + this->parse_markup_decl (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + case '?': + nextch = this->peek(); + this->parse_processing_instruction (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + default: + this->fatal_error (ACE_TEXT ("Invalid includeSect") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + break; + case '%': + this->parse_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + case 0: // [VC: Proper Conditional Section/PE Nesting] + this->fatal_error (ACE_TEXT ("Invalid Conditional Section/PE ") + ACE_TEXT ("Nesting ") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + case ']': + if (this->peek() == ']') + { + nextch = this->get(); + if (this->peek() == '>') + { + nextch = this->get(); + return 0; + } + } + default: + this->fatal_error (ACE_TEXT ("Invalid includeSect") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + nextch = this->skip_whitespace(); + } while (1); +} + +int +ACEXML_Parser::parse_markup_decl (ACEXML_ENV_SINGLE_ARG_DECL) +{ + ACEXML_Char nextch = this->peek (); + switch (nextch) + { + case 'E': // An ELEMENT or ENTITY decl + this->get (); + nextch = this->peek (); + switch (nextch) + { + case 'L': + this->parse_element_decl (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + case 'N': + this->parse_entity_decl (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + default: + this->fatal_error(ACE_TEXT ("Expecting keyword ELEMENT/ENTITY") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + break; + + case 'A': // An ATTLIST decl + this->parse_attlist_decl (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + + case 'N': // A NOTATION decl + this->parse_notation_decl (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + + case '-': // a comment. + if (this->parse_comment () < 0) + { + this->fatal_error(ACE_TEXT ("Invalid comment") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + break; + case 0: // [VC: Proper Declaration/PE Nesting] + this->fatal_error (ACE_TEXT ("Unexpected end-of-file") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + default: + this->fatal_error (ACE_TEXT ("Invalid markupDecl") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + return 0; +} + +int +ACEXML_Parser::parse_external_id (ACEXML_Char *&publicId, + ACEXML_Char *&systemId + ACEXML_ENV_ARG_DECL) +{ + publicId = systemId = 0; + ACEXML_Char nextch = this->get (); + ACEXML_Char fwd = 0; + switch (nextch) + { + case 'S': // External SYSTEM id. + if (this->parse_token (ACE_TEXT ("YSTEM")) < 0 || + this->skip_whitespace_count () < 1) + { + this->fatal_error(ACE_TEXT ("Expecting keyword SYSTEM") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (this->parse_system_literal (systemId) != 0) + { + this->fatal_error(ACE_TEXT ("Invalid systemLiteral") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + break; + case 'P': // External PUBLIC id or previously defined PUBLIC id. + if (this->parse_token (ACE_TEXT ("UBLIC")) < 0 || + this->skip_whitespace_count () < 1) + { + this->fatal_error(ACE_TEXT ("Expecing keyword PUBLIC") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (this->parse_pubid_literal (publicId) != 0) + { + this->fatal_error(ACE_TEXT ("Invalid PubidLiteral") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + this->skip_whitespace_count(&fwd); + if (fwd == '\'' || fwd == '"') + { + if (this->parse_system_literal (systemId) != 0) + { + this->fatal_error(ACE_TEXT ("Invalid systemLiteral") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + } + else if (this->ref_state_ != ACEXML_ParserInt::IN_NOTATION) + { + this->fatal_error(ACE_TEXT ("Expecting systemLiteral after a ") + ACE_TEXT ("PUBLIC keyword") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + break; + default: + this->fatal_error(ACE_TEXT ("Invalid system/public Literal") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + return 0; +} + +ACEXML_Char* +ACEXML_Parser::normalize_systemid (const ACEXML_Char* systemId) +{ + if (ACE_OS::strstr (systemId, ACE_TEXT("ftp://")) != 0 || + ACE_OS::strstr (systemId, ACE_TEXT ("http://")) != 0 || + ACE_OS::strstr (systemId, ACE_TEXT ("file://")) != 0) + return 0; + else + { + ACEXML_Char* normalized_uri = 0; + const ACEXML_Char* baseURI = this->current_->getLocator()->getSystemId(); + ACE_ASSERT (baseURI); + const ACEXML_Char* temp = 0; + if (ACE_OS::strstr (baseURI, ACE_TEXT ("http://")) != 0) + // baseURI is a HTTP URL and systemId is relative. Note that this + // is not compliant with RFC2396. Caveat Emptor ! + temp = ACE_OS::strrchr (baseURI, '/'); + else + // baseURI is a local file and systemId is relative + // Unlike the HTTP one, this will work always. + temp = ACE_OS::strrchr (baseURI,ACE_DIRECTORY_SEPARATOR_CHAR); + if (temp) + { + size_t pos = temp - baseURI + 1; + size_t len = pos + ACE_OS::strlen (systemId) + 1; + ACE_NEW_RETURN (normalized_uri, ACEXML_Char[len], 0); + ACE_OS::strncpy (normalized_uri, baseURI, pos); + ACE_OS::strcpy (normalized_uri + pos, systemId); + return normalized_uri; + } + return 0; + } +} + +void +ACEXML_Parser::parse_element (int is_root ACEXML_ENV_ARG_DECL) +{ + // Parse STag. + const ACEXML_Char *startname = this->parse_name (); + if (startname == 0) + { + this->fatal_error (ACE_TEXT ("Unexpected end-of-file") + ACEXML_ENV_ARG_PARAMETER); + return; + } + if (is_root && this->doctype_ != 0 + && ACE_OS::strcmp (startname, this->doctype_) != 0) + { + this->fatal_error (ACE_TEXT ("Root element different from DOCTYPE") + ACEXML_ENV_ARG_PARAMETER); + return ; + } + ACEXML_AttributesImpl attributes; + ACEXML_Char ch; + int ns_flag = 0; // Push only one namespace context onto the stack + // if there are multiple namespaces declared. + + const ACEXML_Char* ns_uri = 0; + const ACEXML_Char* ns_lname = 0; // namespace URI and localName + for (int start_element_done = 0; start_element_done == 0;) + { + ch = this->skip_whitespace (); + + switch (ch) + { + case 0: + this->fatal_error(ACE_TEXT ("Internal Parser error") + ACEXML_ENV_ARG_PARAMETER); + return; + case '/': + if (this->get () != '>') + { + this->fatal_error(ACE_TEXT ("Expecting '>' at end of element ") + ACE_TEXT ("definition") + ACEXML_ENV_ARG_PARAMETER); + return; + } + this->xml_namespace_.processName(startname, ns_uri, + ns_lname, 0); + this->prefix_mapping (this->xml_namespace_.getPrefix(ns_uri), + ns_uri, 1 + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + this->content_handler_->startElement(ns_uri, ns_lname, + startname, &attributes + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + this->content_handler_->endElement (ns_uri, ns_lname, startname + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + this->prefix_mapping (this->xml_namespace_.getPrefix(ns_uri), + ns_uri, 0 + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + if (ns_flag) + { + this->xml_namespace_.popContext (); + this->nested_namespace_--; + } + return; + case '>': + this->xml_namespace_.processName (startname, ns_uri, + ns_lname, 0); + this->prefix_mapping (this->xml_namespace_.getPrefix(ns_uri), + ns_uri, 1 + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + this->content_handler_->startElement(ns_uri, ns_lname, startname, + &attributes + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + start_element_done = 1; + break; + default: + ACEXML_Char *attvalue = 0; + ACEXML_Char *attname = this->parse_name (ch); + + if (attname == 0 || + this->skip_equal () != 0 || + this->parse_attvalue (attvalue ACEXML_ENV_ARG_PARAMETER) != 0) + { + this->fatal_error(ACE_TEXT ("Error reading attribute value") + ACEXML_ENV_ARG_PARAMETER); + return; + } + + // Handling new namespace if any. Notice that the order of + // namespace declaration does matter. + if (ACE_OS::strncmp (attname, ACE_TEXT("xmlns"), 5) == 0) + { + if (this->namespaces_) + { + if (!ns_flag) + { + this->xml_namespace_.pushContext (); + this->nested_namespace_++; + ns_flag = 1; + } + + ACEXML_Char* name = ACE_OS::strchr (attname, ':'); + const ACEXML_Char* ns_name = (name == 0)? + empty_string:name+1; + if (this->xml_namespace_.declarePrefix (ns_name, + attvalue) == -1) + { + this->fatal_error(ACE_TEXT ("Duplicate definition of ") + ACE_TEXT ("prefix") + ACEXML_ENV_ARG_PARAMETER); + return; + } + } + if (this->namespace_prefixes_) + { + // Namespace_prefixes_feature_ is required. So add the + // xmlns:foo to the list of attributes. + if (attributes.addAttribute (ACE_TEXT (""), ACE_TEXT (""), + attname, + default_attribute_type, + attvalue) == -1) + { + this->fatal_error(ACE_TEXT ("Duplicate attribute ") + ACE_TEXT ("definition. Hint: Try ") + ACE_TEXT ("setting namespace_prefix") + ACE_TEXT ("es feature to 0") + ACEXML_ENV_ARG_PARAMETER); + return; + } + } + if (!this->namespaces_ && !this->namespace_prefixes_) + { + this->fatal_error(ACE_TEXT ("One of namespaces or ") + ACE_TEXT ("namespace_prefixes should be") + ACE_TEXT (" declared") + ACEXML_ENV_ARG_PARAMETER); + return; + } + } + else + { + const ACEXML_Char *uri, *lName; + this->xml_namespace_.processName (attname, uri, lName, 1); + if (attributes.addAttribute (uri, lName, attname, + default_attribute_type, + attvalue) == -1) + { + this->fatal_error(ACE_TEXT ("Duplicate attribute ") + ACE_TEXT ("definition") + ACEXML_ENV_ARG_PARAMETER); + return; + } + } + break; + } + } + if (this->parse_content (startname, ns_uri, ns_lname, ns_flag + ACEXML_ENV_ARG_PARAMETER) != 0) + return; +} + +int +ACEXML_Parser::parse_content (const ACEXML_Char* startname, + const ACEXML_Char*& ns_uri, + const ACEXML_Char*& ns_lname, int ns_flag ACEXML_ENV_ARG_DECL) +{ + ACEXML_Char *cdata; + size_t cdata_length = 0; + + // Parse element contents. + while (1) + { + ACEXML_Char ch = this->get (); + switch (ch) + { + case 0: + this->pop_context (1 ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + case '<': + // Push out old 'characters' event. + if (cdata_length != 0) + { + cdata = this->obstack_.freeze (); + this->content_handler_->characters (cdata, 0, cdata_length + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + this->obstack_.unwind (cdata); + cdata_length = 0; + } + ch = this->peek(); + switch (ch) + { + case '!': // a comment or a CDATA section. + this->get (); // consume '!' + ch = this->peek (); + if (ch == '-') // a comment + { + if (this->parse_comment () < 0) + { + this->fatal_error(ACE_TEXT ("Invalid comment in ") + ACE_TEXT ("document") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + } + else if (ch == '[') // a CDATA section. + { + this->parse_cdata (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + else + { + this->fatal_error(ACE_TEXT ("Expecting a CDATA section ") + ACE_TEXT ("or a comment section") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + break; + case '?': // a PI. + this->get(); // consume the '?' + this->parse_processing_instruction + (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + case '/': // an ETag. + { + this->get (); // consume '/' + ACEXML_Char* endname = this->parse_name (); + if (endname == 0 || + ACE_OS::strcmp (startname, endname) != 0) + { + this->fatal_error(ACE_TEXT ("Name in ETag doesn't ") + ACE_TEXT ("match name in STag") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (this->skip_whitespace () != '>') + { + this->fatal_error(ACE_TEXT ("Expecting '>' at end ") + ACE_TEXT ("of element") + ACEXML_ENV_ARG_PARAMETER); + return -1; + } + this->content_handler_->endElement (ns_uri, ns_lname, + endname + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + this->prefix_mapping (this->xml_namespace_.getPrefix(ns_uri), + ns_uri, 0 + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + if (this->namespaces_ && ns_flag) + { + if (this->nested_namespace_ >= 1) + { + this->xml_namespace_.popContext (); + this->nested_namespace_--; + } + } + return 0; + } + default: // a new nested element? + this->parse_element (0 ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + } + break; + case '&': + if (this->peek () == '#') + { + ACEXML_Char buf[7]; + size_t len = 0; + do + { + len = sizeof (buf); + if (this->parse_char_reference (buf, len) != 0) + { + // [WFC: Legal Character] + this->fatal_error (ACE_TEXT ("Invalid CharRef") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + } while (buf[0] == '&' && this->peek() == '#'); + for (size_t j = 0; j < len; ++j) + this->obstack_.grow (buf[j]); + cdata_length += len; + } + else + { + this->ref_state_ = ACEXML_ParserInt::IN_CONTENT; + int length = this->parse_entity_reference(ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + if (length == 1) + cdata_length++; + } + break; + case '\x20': case '\x0D': case '\x0A': case '\x09': +// if (this->validate_) +// { +// // Flush out any non-whitespace characters +// if (cdata_length != 0) +// { +// cdata = this->obstack_.freeze (); +// this->content_handler_->characters(cdata, 0, cdata_length +// ACEXML_ENV_ARG_PARAMETER); +// ACEXML_CHECK_RETURN (-1); +// this->obstack_.unwind (cdata); +// cdata_length = 0; +// } +// ++cdata_length; +// this->obstack_.grow (ch); +// while (1) +// { +// ch = this->peek(); +// if (ch == '\x20' || ch == '\x0D' || ch == '\x0A' || +// ch == '\x09') +// { +// ch = this->get(); +// this->obstack_.grow (ch); +// continue; +// } +// break; +// } +// cdata = this->obstack_.freeze (); +// this->content_handler_->ignorableWhitespace (cdata, 0, +// cdata_length +// ACEXML_ENV_ARG_PARAMETER); +// ACEXML_CHECK_RETURN (-1); +// this->obstack_.unwind (cdata); +// cdata_length = 0; +// break; +// } + // Fall thru... + default: + ++cdata_length; + this->obstack_.grow (ch); + } + } + ACE_NOTREACHED (return 0;) +} + + +int +ACEXML_Parser::parse_cdata (ACEXML_ENV_SINGLE_ARG_DECL) +{ + if (this->parse_token (ACE_TEXT ("[CDATA[")) < 0) + { + this->fatal_error(ACE_TEXT ("Expecting '[CDATA[' at beginning of CDATA ") + ACE_TEXT ("section") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + ACEXML_Char ch; + int datalen = 0; + ACEXML_Char *cdata = 0; + while (1) + { + ch = this->get (); + // Anything goes except the sequence "]]>". + if (ch == ']' && this->peek() == ']') + { + ACEXML_Char temp = ch; + ch = this->get(); + if (ch == ']' && this->peek() == '>') + { + ch = this->get(); + cdata = this->obstack_.freeze (); + this->content_handler_->characters (cdata, 0, datalen + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + this->obstack_.unwind(cdata); + return 0; + } + this->obstack_.grow (temp); + ++datalen; + } + this->obstack_.grow (ch); + ++datalen; + }; + ACE_NOTREACHED (return -1); +} + + +int +ACEXML_Parser::parse_entity_decl (ACEXML_ENV_SINGLE_ARG_DECL) +{ + ACEXML_Char nextch = 0; + + if ((this->parse_token (ACE_TEXT ("NTITY")) < 0) || + this->skip_whitespace_count (&nextch) == 0) + { + this->fatal_error (ACE_TEXT ("Expecting keyword ENTITY followed by a ") + ACE_TEXT ("space") ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + int is_GEDecl = 1; + if (nextch == '%') // This is a PEDecl. + { + is_GEDecl = 0; + this->get (); // consume the '%' + if (this->skip_whitespace_count (&nextch) == 0) + { + this->fatal_error (ACE_TEXT ("Expecting space between % and ") + ACE_TEXT ("entity name") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + } + + ACEXML_Char *entity_name = this->parse_name (); + if (entity_name == 0) + { + this->fatal_error (ACE_TEXT ("Invalid entity name") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + if (this->skip_whitespace_count (&nextch) == 0) + { + this->fatal_error (ACE_TEXT ("Expecting space between entity name and ") + ACE_TEXT ("entityDef") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + int retval = 0; + if (nextch == '\'' || nextch == '"') + { + ACEXML_Char *entity_value = 0; + if (this->parse_entity_value (entity_value + ACEXML_ENV_ARG_PARAMETER) != 0) + { + this->fatal_error(ACE_TEXT ("Invalid EntityValue") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (is_GEDecl) + retval = this->internal_GE_.add_entity (entity_name, + entity_value); + else + retval = this->internal_PE_.add_entity (entity_name, + entity_value); + if (retval < 0) + { + this->fatal_error (ACE_TEXT ("Internal Parser Error in adding") + ACE_TEXT ("Entity to map") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + else if (retval == 1) + { + this->warning (ACE_TEXT ("Duplicate entity found") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + } + else + { + ACEXML_Char *systemid, *publicid; + + this->parse_external_id (publicid, systemid + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + if (systemid == 0) + { + this->fatal_error(ACE_TEXT ("Invalid SystemLiteral") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + this->skip_whitespace_count (&nextch); + if (nextch == 'N') // NDATA section followed + { + if (is_GEDecl == 0) + { + this->fatal_error(ACE_TEXT ("Invalid NDataDecl in PEDef") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + if ((this->parse_token (ACE_TEXT ("NDATA")) < 0) || + this->skip_whitespace_count (&nextch) == 0) + { + this->fatal_error(ACE_TEXT ("Expecting keyword NDATA followed ") + ACE_TEXT ("by a space") ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + ACEXML_Char *ndata = this->parse_name (); + if (this->validate_) // [VC: Notation Declared] + { + if (!this->notations_.resolve_entity (ndata)) + { + this->fatal_error (ACE_TEXT ("Undeclared Notation name") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + this->dtd_handler_->unparsedEntityDecl(entity_name, publicid, + systemid, ndata + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + } + else + { + if (is_GEDecl) + retval = this->external_GE_.add_entity (entity_name, + systemid); + else + retval = this->external_PE_.add_entity (entity_name, + systemid); + if (retval < 0) + { + this->fatal_error(ACE_TEXT ("Internal Parser Error") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + else if (retval == 1) + this->warning(ACE_TEXT ("Duplicate external entity") + ACEXML_ENV_ARG_PARAMETER); + if (is_GEDecl) + retval = this->external_GE_.add_entity (entity_name, + publicid); + else + retval = this->external_PE_.add_entity (entity_name, + publicid); + if (retval < 0) + { + this->fatal_error(ACE_TEXT ("Internal Parser Error") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + else if (retval == 1) + this->warning (ACE_TEXT ("Duplicate entity definition") + ACEXML_ENV_ARG_PARAMETER); + } + } + + // End of ENTITY definition + if (this->skip_whitespace() != '>') + { + this->fatal_error(ACE_TEXT ("Expecting '>' at end of entityDef") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + return 0; +} + +int +ACEXML_Parser::parse_attlist_decl (ACEXML_ENV_SINGLE_ARG_DECL) +{ + if (this->parse_token (ACE_TEXT ("ATTLIST")) < 0) + { + this->fatal_error(ACE_TEXT ("Expecting keyword 'ATTLIST'") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + int count = check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + if (!count) + { + this->fatal_error(ACE_TEXT ("Expecting space between ATTLIST and ") + ACE_TEXT ("element name") ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + ACEXML_Char *element_name = this->parse_name (); + if (element_name == 0) + { + this->fatal_error(ACE_TEXT ("Invalid element Name in attlistDecl") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + ACEXML_Char fwd = 0; + count = this->skip_whitespace_count (&fwd); + // Parse AttDef* + while (fwd != '>') + { + if (!this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER) + && !count) + this->fatal_error(ACE_TEXT ("Expecting space between element ") + ACE_TEXT ("name and AttDef") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + this->skip_whitespace_count (&fwd); + if (fwd == '>') + break; + + count = this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + + this->parse_attname (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + + count = this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + if (!count) + { + this->fatal_error(ACE_TEXT ("Expecting space between AttName and ") + ACE_TEXT ("AttType") ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + this->parse_atttype (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + + count = this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + if (!count) + { + this->fatal_error(ACE_TEXT ("Expecting space between AttType and") + ACE_TEXT (" DefaultDecl") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + this->parse_defaultdecl (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + + count = this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + this->skip_whitespace_count(&fwd); + } + this->get (); // consume closing '>' + return 0; +} + + +int +ACEXML_Parser::check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_DECL) +{ + ACEXML_Char fwd = '\xFF'; + // Skip any leading whitespaces and store the number of such chars skipped + int count = this->skip_whitespace_count (&fwd); + if (fwd == 0) + { + this->get(); // Consume the 0 + this->pop_context (0 ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + fwd = this->peek(); + } + if (fwd == '%') + { + this->get(); // Consume the % + if (this->external_subset_) + { + this->parse_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + else + { + this->fatal_error(ACE_TEXT ("Illegal PERef within markupDecl") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + } + if (count) + { + // We have atleast one whitespace. So just skip any more whitespaces + // and return the count + this->skip_whitespace_count(); + return count; + } + return this->skip_whitespace_count(); +} + +ACEXML_Char* +ACEXML_Parser::parse_attname (ACEXML_ENV_SINGLE_ARG_DECL) +{ + // Parse attribute name + ACEXML_Char *att_name = this->parse_name (); + if (att_name == 0) + { + this->fatal_error(ACE_TEXT ("Invalid AttName") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (0); + } + return att_name; +} + +int +ACEXML_Parser::parse_defaultdecl (ACEXML_ENV_SINGLE_ARG_DECL) +{ + // DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue) + ACEXML_Char nextch = this->peek (); + ACEXML_Char *fixed_attr = 0; + switch (nextch) + { + case '#': + this->get (); // consume the '#' + switch (this->get ()) + { + case 'R': + if (this->parse_token (ACE_TEXT ("EQUIRED")) < 0) + { + this->fatal_error(ACE_TEXT ("Expecting keyword REQUIRED") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + // We now know this attribute is required + // @@ Set up the validator as such. + break; + case 'I': + if (this->parse_token (ACE_TEXT ("MPLIED")) < 0) + { + this->fatal_error(ACE_TEXT ("Expecting keyword IMPLIED") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + // We now know this attribute is implied. + // @@ Set up the validator as such. + break; + case 'F': + if (this->parse_token (ACE_TEXT ("IXED")) < 0 || + this->skip_whitespace_count () == 0) + { + this->fatal_error(ACE_TEXT ("Expecting keyword FIXED") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + // We now know this attribute is fixed. + if (this->parse_attvalue (fixed_attr + ACEXML_ENV_ARG_PARAMETER) != 0) + { + this->fatal_error(ACE_TEXT ("Invalid Default AttValue") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + // @@ set up validator + break; + default: + this->fatal_error (ACE_TEXT ("Invalid DefaultDecl") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + break; + case '\'': + case '"': + if (this->parse_attvalue (fixed_attr ACEXML_ENV_ARG_PARAMETER) != 0) + { + this->fatal_error(ACE_TEXT ("Invalid AttValue") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + // @@ set up validator + break; + default: + this->fatal_error (ACE_TEXT ("Invalid DefaultDecl") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + } + return 0; +} + +int +ACEXML_Parser::parse_tokenized_type (ACEXML_ENV_SINGLE_ARG_DECL) +{ + ACEXML_Char ch = this->get(); + switch (ch) + { + case 'I': + if (this->get () == 'D') + { + if (this->peek() != 'R' && this->is_whitespace (this->peek())) + { + // We have successfully identified the type of the + // attribute as ID + // @@ Set up validator as such. + break; + } + if (this->parse_token (ACE_TEXT ("REF")) == 0) + { + if (this->peek() != 'S' && this->is_whitespace (this->peek())) + { + // We have successfully identified the type of + // the attribute as IDREF + // @@ Set up validator as such. + break; + } + else if (this->peek() == 'S' + && this->get() // consume the 'S' + && this->is_whitespace (this->peek())) + { + // We have successfully identified the type of + // the attribute as IDREFS + // @@ Set up validator as such. + break; + } + } + } + // Admittedly, this error message is not precise enough + this->fatal_error(ACE_TEXT ("Expecting keyword `ID', `IDREF', or") + ACE_TEXT ("`IDREFS'") ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + case 'E': // ENTITY or ENTITIES + if (this->parse_token (ACE_TEXT ("NTIT")) == 0) + { + ACEXML_Char nextch = this->get (); + if (nextch == 'Y') + { + // We have successfully identified the type of + // the attribute as ENTITY + // @@ Set up validator as such. + } + else if (this->parse_token (ACE_TEXT ("IES")) == 0) + { + // We have successfully identified the type of + // the attribute as ENTITIES + // @@ Set up validator as such. + } + if (this->is_whitespace (this->peek())) + { + // success + break; + } + } + // Admittedly, this error message is not precise enough + this->fatal_error(ACE_TEXT ("Expecting keyword `ENTITY', or") + ACE_TEXT ("`ENTITIES'") ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + case 'M': + if (this->parse_token (ACE_TEXT ("TOKEN")) == 0) + { + if (this->is_whitespace (this->peek())) + { + // We have successfully identified the type of + // the attribute as NMTOKEN + // @@ Set up validator as such. + break; + } + else if (this->peek() == 'S' + && this->get() + && this->is_whitespace (this->peek())) + { + // We have successfully identified the type of + // the attribute as NMTOKENS + // @@ Set up validator as such. + break; + } + } + this->fatal_error(ACE_TEXT ("Expecting keyword `NMTOKEN' or `NMTO") + ACE_TEXT ("KENS'") ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + default: + this->fatal_error (ACE_TEXT ("Internal Parser Error") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + } + return 0; +} + + +/** + * AttType ::= StringType | TokenizedType | EnumeratedType + * StringType ::= 'CDATA' + * TokenizedType ::= 'ID' [VC: ID] + * [VC: One ID per Element Type] + * [VC: ID Attribute Default] + * | 'IDREF' [VC: IDREF] + * | 'IDREFS' [VC: IDREF] + * | 'ENTITY' [VC: Entity Name] + * | 'ENTITIES' [VC: Entity Name] + * | 'NMTOKEN' [VC: Name Token] + * | 'NMTOKENS' + * + * EnumeratedType ::= NotationType | Enumeration + * NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')' + * [VC: Notation Attributes] + * [VC: One Notation Per Element Type] + * [VC: No Notation on Empty Element] + * Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')' + * [VC: Enumeration] + */ +int +ACEXML_Parser::parse_atttype (ACEXML_ENV_SINGLE_ARG_DECL) +{ + ACEXML_Char nextch = this->peek(); + switch (nextch) + { + case 'C': // CDATA + if (this->parse_token (ACE_TEXT ("CDATA")) < 0) + { + this->fatal_error(ACE_TEXT ("Expecting keyword 'CDATA'") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + // Else, we have successfully identified the type of the + // attribute as CDATA + // @@ Set up validator appropriately here. + break; + case 'I': case 'E': // ID, IDREF, IDREFS, ENTITY or ENTITIES + this->parse_tokenized_type (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + case 'N': // NMTOKEN, NMTOKENS, or NOTATION + this->get(); + nextch = this->peek(); + if (nextch != 'M' && nextch != 'O') + { + this->fatal_error (ACE_TEXT ("Expecting keyword 'NMTOKEN', ") + ACE_TEXT ("'NMTOKENS' or 'NOTATION'") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (nextch == 'M') + { + this->parse_tokenized_type (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + } + else // NOTATION + { + if (this->parse_token (ACE_TEXT ("OTATION")) < 0) + { + this->fatal_error(ACE_TEXT ("Expecting keyword `NOTATION'") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + int count = this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + if (!count) + { + this->fatal_error (ACE_TEXT ("Expecting space between keyword ") + ACE_TEXT ("NOTATION and '('") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (this->get () != '(') + { + this->fatal_error(ACE_TEXT ("Expecting '(' in NotationType") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + do { + this->skip_whitespace_count(); + ACEXML_Char *notation_name = this->parse_name (); + if (notation_name == 0) + { + this->fatal_error(ACE_TEXT ("Invalid notation name") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + // @@ get another notation name, set up validator as such + this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + nextch = this->get(); + } while (nextch == '|'); + if (nextch != ')') + { + this->fatal_error (ACE_TEXT ("Expecting a ')' after a ") + ACE_TEXT ("NotationType declaration") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + } + break; + case '(': // EnumeratedType - Enumeration + this->get(); + this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + do { + this->skip_whitespace_count(); + ACEXML_Char *token_name = this->parse_nmtoken (); + if (token_name == 0) + { + this->fatal_error(ACE_TEXT ("Invalid enumeration name") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + // @@ get another nmtoken, set up validator as such + this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + nextch = this->get(); + } while (nextch == '|'); + if (nextch != ')') + { + this->fatal_error (ACE_TEXT ("Expecting a ')' after a ") + ACE_TEXT ("Enumeration declaration") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + break; + default: + { + this->fatal_error(ACE_TEXT ("Invalid AttType") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + ACE_NOTREACHED (break); + } + return 0; +} + +int +ACEXML_Parser::parse_notation_decl (ACEXML_ENV_SINGLE_ARG_DECL) +{ + if (this->parse_token (ACE_TEXT ("NOTATION")) < 0) + { + this->fatal_error(ACE_TEXT ("Expecting Keyword 'NOTATION'") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + int count = this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + if (!count) + { + this->fatal_error (ACE_TEXT ("Expecting a space between keyword NOTATION") + ACE_TEXT (" and notation name") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + ACEXML_Char *notation = this->parse_name (); + if (notation == 0) + { + this->fatal_error(ACE_TEXT ("Invalid Notation name") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + count = this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + if (!count) + { + this->fatal_error (ACE_TEXT ("Expecting a space between notation name ") + ACE_TEXT ("and ExternalID/PublicID") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + ACEXML_Char *systemid, *publicid; + + // Gross hack but otherwise we need to go around a lot of loops to parse, + // When the ExternalID starts with 'PUBLIC' we cannot distinguish a + // PublicId from a ExternalID by looking using a one character read-ahead + ACEXML_ParserInt::ReferenceState temp = this->ref_state_; + this->ref_state_ = ACEXML_ParserInt::IN_NOTATION; + + this->parse_external_id (publicid, systemid + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + // Restore the original value. + this->ref_state_ = temp; + + // [VC: Unique Notation Name] + if (systemid && this->notations_.add_entity (notation, systemid) != 0 + && this->validate_) + { + this->fatal_error(ACE_TEXT ("Internal Parser Error") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (publicid) + { + int retval = this->notations_.add_entity (notation, publicid); + if (retval != 0 && !systemid && this->validate_) + { + this->fatal_error(ACE_TEXT ("Internal Parser Error") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + } + + if (this->skip_whitespace() != '>') + { + this->fatal_error(ACE_TEXT ("Expecting '>' at end of NotationDecl") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + if (this->validate_ && this->dtd_handler_) + { + this->dtd_handler_->notationDecl (notation, + publicid, + systemid ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + return 0; +} + +int +ACEXML_Parser::parse_element_decl (ACEXML_ENV_SINGLE_ARG_DECL) +{ + if (this->parse_token (ACE_TEXT ("LEMENT")) < 0) + { + this->fatal_error (ACE_TEXT ("Expecting keyword ELEMENT") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + int count = this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + if (!count) + { + this->fatal_error (ACE_TEXT ("Expecting a space between keyword ELEMENT") + ACE_TEXT (" and element name") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + ACEXML_Char *element_name = this->parse_name (); + if (element_name == 0) + { + this->fatal_error (ACE_TEXT ("Invalid element name") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + count = this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + if (!count) + { + this->fatal_error (ACE_TEXT ("Expecting a space between element name ") + ACE_TEXT ("and element definition") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + ACEXML_Char nextch = this->peek(); + switch (nextch) + { + case 'E': // EMPTY + if (this->parse_token (ACE_TEXT ("EMPTY")) < 0) + { + this->fatal_error (ACE_TEXT ("Expecting keyword EMPTY") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + break; + case 'A': // ANY + if (this->parse_token (ACE_TEXT ("ANY")) < 0) + { + this->fatal_error (ACE_TEXT ("Expecting keyword ANY") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + break; + case '(': // children + this->parse_children_definition (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + default: // error + this->fatal_error (ACE_TEXT ("Invalid element definition") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + count = this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + if (this->skip_whitespace () != '>') + { + this->fatal_error (ACE_TEXT ("Expecting '>' after element defintion") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + return 0; +} + + +int +ACEXML_Parser::parse_children_definition (ACEXML_ENV_SINGLE_ARG_DECL) +{ + this->get (); // consume the '(' + this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + int subelement_number = 0; + ACEXML_Char nextch = this->peek(); + switch (nextch) + { + case '#': // Mixed element, + if (this->parse_token (ACE_TEXT ("#PCDATA")) < 0) + { + this->fatal_error(ACE_TEXT ("Expecting keyword '#PCDATA'") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + nextch = this->get(); + while (nextch == '|') + { + this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + ACEXML_Char *name = this->parse_name (); + // @@ name will be used in the Validator later. + ACE_UNUSED_ARG (name); + ++subelement_number; + // @@ Install Mixed element name into the validator. + this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + nextch = this->skip_whitespace(); + } + if (nextch != ')' || + (subelement_number && this->get () != '*')) + { + this->fatal_error(ACE_TEXT ("Expecing ')' or ')*' at end of Mixed") + ACE_TEXT (" element") ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + // @@ close the element definition in the validator. + break; + default: + int status = this->parse_child (1 ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + if (status != 0) + return -1; + } + + // Check for trailing '?', '*', '+' + nextch = this->peek (); + switch (nextch) + { + case '?': + // @@ Consume the character and inform validator as such, + this->get (); + break; + case '*': + // @@ Consume the character and inform validator as such, + this->get (); + break; + case '+': + // @@ Consume the character and inform validator as such, + this->get (); + break; + default: + break; // not much to do. + } + + return 0; +} + +int +ACEXML_Parser::parse_child (int skip_open_paren ACEXML_ENV_ARG_DECL) +{ + // Conditionally consume the open paren. + if (skip_open_paren == 0 && this->get () != '(') + { + this->fatal_error(ACE_TEXT ("Expecting '(' at beginning of children") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + ACEXML_Char node_type = 0; + ACEXML_Char nextch; + + do { + this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + this->skip_whitespace_count (&nextch); + switch (nextch) + { + case '(': + this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + this->parse_child (0 ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + default: + this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + // must be an element name here. + ACEXML_Char *subelement = this->parse_name (); + if (subelement == 0) + { + this->fatal_error(ACE_TEXT ("Invalid subelement name") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + // Check for trailing '?', '*', '+' + nextch = this->peek (); + switch (nextch) + { + case '?': + // @@ Consume the character and inform validator as such, + this->get (); + break; + case '*': + // @@ Consume the character and inform validator as such, + this->get (); + break; + case '+': + // @@ Consume the character and inform validator as such, + this->get (); + break; + default: + break; // not much to do. + } + + // @@ Inform validator of the new element here. + break; + } + this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + this->skip_whitespace_count (&nextch); + switch (nextch) + { + case '|': + switch (node_type) + { + case 0: + node_type = '|'; + // @@ inform validator of this new type?? + break; + case '|': + break; + default: + this->fatal_error (ACE_TEXT ("Expecting `,', `|', or `)' ") + ACE_TEXT ("while defining an element") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + break; + case ',': + switch (node_type) + { + case 0: + node_type = ','; + // @@ inform validator of this new type?? + break; + case ',': + break; + default: + this->fatal_error (ACE_TEXT ("Expecting `,', `|', or `)' ") + ACE_TEXT ("while defining an element") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + break; + case ')': + break; + default: + this->fatal_error (ACE_TEXT ("Expecting `,', `|', or `)' ") + ACE_TEXT ("while defining an element") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + nextch = this->get(); // Consume the `,' or `|' or `)' + if (nextch == ')') + break; + this->check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + this->skip_whitespace_count (&nextch); + } while (nextch != ')'); + + // Check for trailing '?', '*', '+' + nextch = this->peek (); + switch (nextch) + { + case '?': + // @@ Consume the character and inform validator as such, + this->get (); + break; + case '*': + // @@ Consume the character and inform validator as such, + this->get (); + break; + case '+': + // @@ Consume the character and inform validator as such, + this->get (); + break; + default: + break; // not much to do. + } + + + return 0; +} + +int +ACEXML_Parser::parse_char_reference (ACEXML_Char *buf, size_t& len) +{ + if (len < 7) // Max size of a CharRef plus terminating '\0' + return -1; + ACEXML_Char ch = this->get(); + if (ch != '#') // Internal error. + return -1; + int hex = 0; + ch = this->peek(); + if (ch == 'x') + { + hex = 1; + this->get (); + } + size_t i = 0; + int more_digit = 0; + ch = this->get (); + for ( ; i < len && + (this->isNormalDigit (ch) || (hex ? this->isCharRef(ch): 0)); ++i) + { + buf[i] = ch; + ch = this->get(); + ++more_digit; + } + if (ch != ';' || !more_digit) + return -1; + buf[i] = 0; + ACEXML_UCS4 sum = (ACEXML_UCS4) ACE_OS::strtol (buf, 0, (hex ? 16 : 10)); + // [WFC: Legal Character] + if (!this->isChar (sum)) + return -1; + int clen; +#if defined (ACE_USES_WCHAR) +# if (ACE_SIZEOF_WCHAR == 2) // UTF-16 + if ((clen = ACEXML_Transcoder::ucs42utf16 (sum, buf, len)) < 0) + return -1; +# elif (ACE_SIZEOF_WCHAR == 4) // UCS 4 + buf [0] = sum; + buf [1] = 0; + clen = 2; +# endif /* ACE_SIZEOF_WCHAR */ + +#else // or UTF-8 + if ((clen = ACEXML_Transcoder::ucs42utf8 (sum, buf, len)) < 0) + return -1; +#endif + buf [clen] = 0; + len = clen; + return 0; +} + +ACEXML_Char* +ACEXML_Parser::parse_reference_name (void) +{ + ACEXML_Char ch = this->get (); + if (!this->isLetter (ch) && (ch != '_' || ch != ':')) + return 0; + while (ch) { + this->alt_stack_.grow (ch); + ch = this->peek (); + if (!this->isNameChar (ch)) + break; + ch = this->get (); + }; + if (ch != ';') + return 0; + ch = this->get(); + return this->alt_stack_.freeze (); +} + +int +ACEXML_Parser::parse_attvalue (ACEXML_Char *&str ACEXML_ENV_ARG_DECL) +{ + ACEXML_Char quote = this->get (); + if (quote != '\'' && quote != '"') // Not a quoted string. + return -1; + ACEXML_Char ch = this->get (); + while (1) + { + if (ch == quote) + { + ACEXML_Char* temp = this->obstack_.freeze (); + // If the attribute type is not CDATA, then the XML processor + // must further process the normalized attribute value by + // discarding any leading and trailing space (#x20) characters, + // and by replacing sequences of space (#x20) characters by a + // single space (#x20) character. + + // if (atttype != CDATA) { + // ACEXML_Char* start = temp; + // ACEXML_Char* end = temp + ACE_OS::strlen (temp); + // while (*start == '\x20') + // start++; + // if (start == end) // String which is all spaces + // str = start; + // while (*start != 0) + // { + // this->obstack_.grow (*start); + // start++; + // while (*start == '\x20') + // start++; + // } + // str = this->obstack_.freeze(); + // } + str = temp; + return 0; + } + switch (ch) + { + case '&': + if (this->peek () == '#') + { + ACEXML_Char buf[7]; + size_t len = sizeof (buf); + if (this->parse_char_reference (buf, len) != 0) + { + // [WFC: Legal Character] + this->fatal_error (ACE_TEXT ("Invalid CharacterRef") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + for (size_t j = 0; j < len; ++j) + this->obstack_.grow (buf[j]); + } + else + { + this->ref_state_ = ACEXML_ParserInt::IN_ATT_VALUE; + this->parse_entity_reference (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + break; + case '\x20': case '\x0D': case '\x0A': case '\x09': + this->obstack_.grow ('\x20'); + break; + case '<': // [WFC: No < in Attribute Values] + this->fatal_error (ACE_TEXT ("Illegal '<' in AttValue") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + case 0: + this->pop_context (1 ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + default: + this->obstack_.grow (ch); + break; + } + ch = this->get(); + } +} + + + +int +ACEXML_Parser::parse_entity_reference (ACEXML_ENV_SINGLE_ARG_DECL) +{ + ACEXML_Char* replace = this->parse_reference_name (); + if (replace == 0) + { + this->fatal_error (ACE_TEXT ("Invalid Reference name") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + // [WFC: Parsed Entity] + if (this->unparsed_entities_.resolve_entity (replace)) { + this->fatal_error (ACE_TEXT ("EntityRef refers to unparsed entity") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + // Look in the internal general entities set first. + const ACEXML_Char* entity = this->internal_GE_.resolve_entity(replace); + + // Look in the predefined entities. + if (!entity) + { + entity = this->predef_entities_.resolve_entity (replace); + if (entity) + { + // Special case to return the length in case of predefined entities + this->obstack_.grow (*entity); + return 1; + } + } + + if (!this->validate_) + { + if (this->standalone_) + { + // [WFC: Entity Declared] + this->fatal_error (ACE_TEXT ("Undeclared Entity reference") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + else + { + this->content_handler_->skippedEntity (replace + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + return 0; + } + } + + // No match in internal subset + if (!entity + // or No DTDs + && (!(this->internal_dtd_ || this->external_dtd_) + // or Only Internal DTD and no parameter entity references + || (this->internal_dtd_ && !this->external_dtd_ + && !this->has_pe_refs_) + // or Standalone = 'yes' + || this->standalone_)) + { + // [WFC: Entity Declared] + this->fatal_error (ACE_TEXT ("Undeclared Entity reference") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + ACEXML_Char* systemId = 0; + ACEXML_Char* publicId = 0; + if (!entity) + { + if (this->external_GE_.resolve_entity (replace, systemId, publicId) < 0) + { + this->fatal_error (ACE_TEXT ("Undeclared Entity reference") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (this->ref_state_ == ACEXML_ParserInt::IN_ATT_VALUE) + { + this->fatal_error (ACE_TEXT ("External EntityRef in Attribute Value") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + this->external_entity_++; + } + + + // [WFC: No Recursion] + ACEXML_Char* ref_name = replace; + int present = this->GE_reference_.insert (ref_name); + if (present == 1 || present == -1) + { + while (this->GE_reference_.pop(ref_name) != -1) + ; + this->fatal_error (ACE_TEXT ("Recursion in resolving entity") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + if (!this->external_entity_) + { + ACEXML_StrCharStream* str = 0; + ACE_NEW_RETURN (str, ACEXML_StrCharStream, -1); + if (str->open (entity, replace) < 0 + || this->switch_input (str, replace) != 0) + { + this->fatal_error (ACE_TEXT ("Unable to create internal input ") + ACE_TEXT ("stream") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + return 0; + } + else + { + ACEXML_Char* uri = this->normalize_systemid (systemId); + ACE_Auto_Basic_Array_Ptr cleanup_uri (uri); + ACEXML_InputSource* ip = 0; + if (this->entity_resolver_) + { + ip = this->entity_resolver_->resolveEntity (publicId, + (uri ? uri : systemId) + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + if (ip) + { + if (this->switch_input (ip, (uri ? uri : systemId), + publicId) != 0) + { + this->fatal_error (ACE_TEXT ("Internal Parser Error") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + return 0; + } + } + ACEXML_StreamFactory factory; + ACEXML_CharStream* cstream = factory.create_stream (uri ? uri: systemId); + if (!cstream) { + this->fatal_error (ACE_TEXT ("Invalid input source") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (this->switch_input (cstream, systemId, publicId) != 0) + { + this->fatal_error (ACE_TEXT ("Internal Parser Error") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + } + return 0; +} + +int +ACEXML_Parser::parse_PE_reference (ACEXML_ENV_SINGLE_ARG_DECL) +{ + ACEXML_Char* replace = this->parse_reference_name (); + if (replace == 0) + { + this->fatal_error (ACE_TEXT ("Invalid PEReference name") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + // Look in the internal general entities set first. + const ACEXML_Char* entity = this->internal_PE_.resolve_entity(replace); + + if (!entity && // No match in internal + (!this->external_dtd_ || // or No External DTDs + this->standalone_)) // or Standalone + { + // [VC: Entity Declared] + this->fatal_error (ACE_TEXT ("Undefined Internal PEReference") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + ACEXML_Char* systemId = 0; + ACEXML_Char* publicId = 0; + if (!entity && this->validate_) + { + if (this->external_PE_.resolve_entity (replace, systemId, publicId) < 0) + { + this->fatal_error (ACE_TEXT ("Undefined PEReference") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + this->external_entity_++; + } + + // [WFC: No Recursion] + ACEXML_Char* ref_name = replace; + int present = this->PE_reference_.insert (ref_name); + if (present == 1 || present == -1) + { + while (this->PE_reference_.pop(ref_name) != -1) + ; + this->fatal_error (ACE_TEXT ("Recursion in resolving entity") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + if (entity && !this->external_entity_) + { + ACEXML_StrCharStream* sstream = 0; + ACEXML_String str (entity); + if (this->ref_state_ != ACEXML_ParserInt::IN_ENTITY_VALUE) + { + const ACEXML_Char* ch = ACE_TEXT (" "); + str = ch + str + ch; + } + // ACE_DEBUG ((LM_DEBUG, + // ACE_TEXT ("Entity is %s\n Replacement Text is : %s\n"), + // replace, str.c_str())); + ACE_NEW_RETURN (sstream, ACEXML_StrCharStream, -1); + if (sstream->open (str.c_str(), replace) < 0 + || this->switch_input (sstream, replace) != 0) + { + this->fatal_error (ACE_TEXT ("Error in switching InputSource") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + return 0; + } + else if (this->external_entity_ && this->validate_) + { + ACEXML_Char* uri = this->normalize_systemid (systemId); + ACE_Auto_Basic_Array_Ptr cleanup_uri (uri); + ACEXML_InputSource* ip = 0; + if (this->entity_resolver_) + { + ip = this->entity_resolver_->resolveEntity (publicId, + (uri ? uri : systemId) + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (ip) + { + if (this->switch_input (ip, (uri ? uri : systemId), publicId) != 0) + { + this->fatal_error (ACE_TEXT ("Error in switching InputSource") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + return 0; + } + else + { + ACEXML_StreamFactory factory; + ACEXML_CharStream* cstream = factory.create_stream (uri ? uri: systemId); + if (!cstream) { + this->fatal_error (ACE_TEXT ("Invalid input source") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (this->switch_input (cstream, systemId, publicId) != 0) + { + this->fatal_error (ACE_TEXT ("Error in switching InputSource") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (this->ref_state_ == ACEXML_ParserInt::IN_ENTITY_VALUE) + { + ACEXML_Char less, mark; + if (this->peek() == '<') + { + less = this->get(); + if (this->peek() == '?') + { + mark = this->get(); + if (this->peek() == 'x') + { + this->parse_text_decl (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + else + { + this->obstack_.grow (less); + this->obstack_.grow (mark); + } + } + this->obstack_.grow (less); + } + } + return 0; + } + } + this->fatal_error (ACE_TEXT ("Undefined PEReference") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + return -1; +} + +int +ACEXML_Parser::parse_entity_value (ACEXML_Char *&str + ACEXML_ENV_ARG_DECL) +{ + ACEXML_ParserInt::ReferenceState temp = this->ref_state_; + ACEXML_Char quote = this->get (); + if (quote != '\'' && quote != '"') // Not a quoted string. + return -1; + ACEXML_Char ch = this->get (); + while (1) + { + if (ch == quote) + { + str = this->obstack_.freeze (); + this->ref_state_ = temp; + return 0; + } + switch (ch) + { + case '&': + if (this->peek () == '#') + { + if (!this->external_entity_) + { + ACEXML_Char buf[7]; + size_t len = sizeof (buf); + if (this->parse_char_reference (buf, len) != 0) + { + // [WFC: Legal Character] + this->fatal_error (ACE_TEXT ("Invalid character ") + ACE_TEXT ("reference") + ACEXML_ENV_ARG_PARAMETER); + return -1; + } + for (size_t j = 0; j < len; ++j) + this->obstack_.grow (buf[j]); + break; + } + } + this->obstack_.grow (ch); + break; + case '%': + if (!this->external_entity_) + { + this->ref_state_ = ACEXML_ParserInt::IN_ENTITY_VALUE; + this->parse_PE_reference(ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + } + this->obstack_.grow (ch); + break; + case 0: + this->pop_context (0 ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + break; + default: + this->obstack_.grow (ch); + break; + } + ch = this->get(); + } +} + +ACEXML_Char * +ACEXML_Parser::parse_name (ACEXML_Char ch) +{ + if (ch == 0) + ch = this->get (); + if (!this->isLetter (ch) && ch != '_' && ch != ':') + return 0; + while (ch) { + this->obstack_.grow (ch); + ch = this->peek (); + if (!this->isNameChar (ch)) + break; + ch = this->get (); + }; + return this->obstack_.freeze (); +} + +ACEXML_Char* +ACEXML_Parser::parse_nmtoken (ACEXML_Char ch) +{ + if (ch == 0) + ch = this->get (); + if (!this->isNameChar (ch)) + return 0; + while (ch) { + this->obstack_.grow (ch); + ch = this->peek (); + if (!this->isNameChar (ch)) + break; + ch = this->get (); + }; + return this->obstack_.freeze (); +} + +int +ACEXML_Parser::parse_version_num (ACEXML_Char*& str) +{ + ACEXML_Char quote = this->get (); + if (quote != '\'' && quote != '"') // Not a quoted string. + return -1; + int numchars = 0; + while (1) + { + ACEXML_Char ch = this->get (); + if (ch == quote && !numchars) + return -1; + else if (ch == quote) + { + str = this->obstack_.freeze (); + return 0; + } + // [26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+ + if (ch == '-' || ((ch >= 'a' && ch <= 'z') || + (ch >= 'A' && ch <= 'Z') || + (ch >= '0' && ch <= '9') || + (ch == '_' || ch == '.' || ch == ':'))) + { + this->obstack_.grow (ch); + numchars++; + } + else + return -1; + } +} + +int +ACEXML_Parser::parse_system_literal (ACEXML_Char*& str) +{ + const ACEXML_Char quote = this->get(); + if (quote != '\'' && quote != '"') // Not a quoted string. + return -1; + while (1) + { + ACEXML_Char ch = this->get (); + if (ch == quote) + { + str = this->obstack_.freeze (); + return 0; + } + switch (ch) + { + case '\x00': case '\x01': case '\x02': case '\x03': case '\x04': + case '\x05': case '\x06': case '\x07': case '\x08': case '\x09': + case '\x0A': case '\x0B': case '\x0C': case '\x0D': case '\x0E': + case '\x0F': case '\x10': case '\x11': case '\x12': case '\x13': + case '\x14': case '\x15': case '\x16': case '\x17': case '\x18': + case '\x19': case '\x1A': case '\x1B': case '\x1C': case '\x1D': + case '\x1E': case '\x1F': case '\x7F': case '\x20': case '<': + case '>': case '#': case '%': + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("Invalid char %c in SystemLiteral\n"), ch)); + return -1; + default: + this->obstack_.grow (ch); + } + } +} + +int +ACEXML_Parser::parse_pubid_literal (ACEXML_Char*& str) +{ + const ACEXML_Char quote = this->get(); + if (quote != '\'' && quote != '"') // Not a quoted string. + return -1; + while (1) + { + ACEXML_Char ch = this->get (); + if (ch == quote) + { + str = this->obstack_.freeze (); + return 0; + } + else if (this->isPubidChar (ch)) + this->obstack_.grow (ch); + else + return -1; + } +} + +int +ACEXML_Parser::parse_encname (ACEXML_Char*& str) +{ + const ACEXML_Char quote = this->get (); + if (quote != '\'' && quote != '"') // Not a quoted string. + return -1; + int numchars = 0; + while (1) + { + ACEXML_Char ch = this->get (); + if (ch == quote && !numchars) + return -1; + else if (ch == quote) + { + str = this->obstack_.freeze (); + return 0; + } + // [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')* + if (!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) + && !numchars) + return -1; + if (ch == '-' || ((ch >= 'a' && ch <= 'z') || + (ch >= 'A' && ch <= 'Z') || + (ch >= '0' && ch <= '9') || + (ch == '_' || ch == '.'))) + { + this->obstack_.grow (ch); + numchars++; + } + else + return -1; + } +} + +int +ACEXML_Parser::parse_sddecl (ACEXML_Char*& str) +{ + ACEXML_Char quote = this->get (); + if (quote != '\'' && quote != '"') // Not a quoted string. + return -1; + int numchars = 0; + while (1) + { + ACEXML_Char ch = this->get (); + if (ch == quote && numchars < 2) + return -1; + else if (ch == quote) + { + str = this->obstack_.freeze (); + return 0; + } + // [32] SDDecl ::= S 'standalone' Eq (("'" ('yes' | 'no') "'") + // | ('"' ('yes' | 'no') '"')) + switch (ch) + { + case 'y': case 'e': case 's': case 'n': case 'o': + this->obstack_.grow (ch); + numchars++; + break; + default: + return -1; + } + } +} + +void +ACEXML_Parser::prefix_mapping (const ACEXML_Char* prefix, + const ACEXML_Char* uri, + int start ACEXML_ENV_ARG_DECL) +{ + if (this->namespaces_) + { + const ACEXML_Char* temp = (prefix == 0) ? empty_string : prefix; + if (start) { + this->content_handler_->startPrefixMapping (temp, uri + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + } + else + { + this->content_handler_->endPrefixMapping(temp + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + } + } +} + +int +ACEXML_Parser::switch_input (ACEXML_CharStream* cstream, + const ACEXML_Char* systemId, + const ACEXML_Char* publicId) +{ + ACEXML_InputSource* input = 0; + ACE_NEW_RETURN (input, ACEXML_InputSource (cstream), -1); + return this->switch_input (input, systemId, publicId); +} + +int +ACEXML_Parser::switch_input (ACEXML_InputSource* input, + const ACEXML_Char* systemId, + const ACEXML_Char* publicId) +{ + ACEXML_LocatorImpl* locator = 0; + if (!systemId) + systemId = input->getSystemId(); + ACE_NEW_RETURN (locator, ACEXML_LocatorImpl (systemId, publicId), -1); + ACEXML_Parser_Context* new_context = 0; + ACE_NEW_RETURN (new_context, ACEXML_Parser_Context(input, locator), -1); + if (this->push_context (new_context) != 0) + { + ACE_ERROR ((LM_ERROR, "Unable to switch input streams")); + delete new_context; + return -1; + } + this->current_ = new_context; + this->content_handler_->setDocumentLocator (this->current_->getLocator()); + return 0; +} + +int +ACEXML_Parser::push_context (ACEXML_Parser_Context* context) +{ + if (this->ctx_stack_.push (context) < 0) + { + ACE_ERROR ((LM_ERROR, "Unable to push input source onto the stack")); + return -1; + } + return 0; +} + +size_t +ACEXML_Parser::pop_context (int GE_ref ACEXML_ENV_ARG_DECL) +{ + size_t nrelems = this->ctx_stack_.size(); + if (nrelems <= 1) + { + this->fatal_error(ACE_TEXT ("Unexpected end-of-file") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + ACEXML_Parser_Context* temp = 0; + int retval = this->ctx_stack_.pop (temp); + if (retval != 0) + { + this->fatal_error (ACE_TEXT ("Unable to pop element of the input stack") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + delete temp; + if (this->ctx_stack_.top (this->current_) != 0) + { + this->fatal_error (ACE_TEXT ("Unable to read top element of input stack") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + ACEXML_Char* reference = 0; + if (GE_ref == 1 && this->GE_reference_.size() > 0) + { + if (this->GE_reference_.pop (reference) < 0) + { + this->fatal_error (ACE_TEXT ("Internal Parser Error") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + } + else if (GE_ref == 0 && this->PE_reference_.size() > 0) + { + if (this->PE_reference_.pop (reference) < 0) + { + this->fatal_error (ACE_TEXT ("Internal Parser Error") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + } + nrelems = this->ctx_stack_.size(); + + if (this->external_entity_ && (GE_ref == 0 || GE_ref == 1)) + this->external_entity_--; + + this->content_handler_->setDocumentLocator (this->current_->getLocator()); + + return nrelems; +} + +int +ACEXML_Parser::getFeature (const ACEXML_Char *name ACEXML_ENV_ARG_DECL) +{ + if (ACE_OS::strcmp (name, ACEXML_Parser::simple_parsing_feature_) == 0) + { + return this->simple_parsing_; + } + else if (ACE_OS::strcmp (name, ACEXML_Parser::namespaces_feature_) == 0) + { + return this->namespaces_; + } + else if (ACE_OS::strcmp (name, + ACEXML_Parser::namespace_prefixes_feature_) == 0) + { + return this->namespace_prefixes_; + } + else if (ACE_OS::strcmp (name, ACEXML_Parser::validation_feature_) == 0) + { + return this->validate_; + } + ACEXML_THROW_RETURN (ACEXML_SAXNotRecognizedException (name), -1); +} + + + +void +ACEXML_Parser::setFeature (const ACEXML_Char *name, + int boolean_value ACEXML_ENV_ARG_DECL) +{ + if (ACE_OS::strcmp (name, ACEXML_Parser::simple_parsing_feature_) == 0) + { + this->simple_parsing_ = (boolean_value == 0 ? 0 : 1); + return; + } + else if (ACE_OS::strcmp (name, ACEXML_Parser::namespaces_feature_) == 0) + { + this->namespaces_ = (boolean_value == 0 ? 0 : 1); + return; + } + else if (ACE_OS::strcmp (name, + ACEXML_Parser::namespace_prefixes_feature_) == 0) + { + this->namespace_prefixes_ = (boolean_value == 0 ? 0 : 1); + return; + } + else if (ACE_OS::strcmp (name, ACEXML_Parser::validation_feature_) == 0) + { + this->validate_ = (boolean_value == 0 ? 0 : 1); + return; + } + + ACEXML_THROW (ACEXML_SAXNotRecognizedException (name)); +} + +void * +ACEXML_Parser::getProperty (const ACEXML_Char *name ACEXML_ENV_ARG_DECL) +{ + ACEXML_THROW_RETURN (ACEXML_SAXNotSupportedException (name), 0); +} + +void +ACEXML_Parser::setProperty (const ACEXML_Char *name, + void *value ACEXML_ENV_ARG_DECL) +{ + ACE_UNUSED_ARG (value); + + ACEXML_THROW (ACEXML_SAXNotSupportedException (name)); +} + +void +ACEXML_Parser::error (const ACEXML_Char* msg ACEXML_ENV_ARG_DECL) +{ + ACEXML_SAXParseException* exception = 0; + ACE_NEW_NORETURN (exception, ACEXML_SAXParseException (msg)); + if (this->error_handler_) + this->error_handler_->error (*exception ACEXML_ENV_ARG_PARAMETER); + else + ACEXML_ENV_RAISE (exception); + return; +} + +void +ACEXML_Parser::warning (const ACEXML_Char* msg ACEXML_ENV_ARG_DECL) +{ + ACEXML_SAXParseException* exception = 0; + ACE_NEW_NORETURN (exception, ACEXML_SAXParseException (msg)); + if (this->error_handler_) + this->error_handler_->warning (*exception ACEXML_ENV_ARG_PARAMETER); + delete exception; + return; +} + +void +ACEXML_Parser::fatal_error (const ACEXML_Char* msg ACEXML_ENV_ARG_DECL) +{ + ACEXML_SAXParseException* exception = 0; + ACE_NEW_NORETURN (exception, ACEXML_SAXParseException (msg)); + if (this->error_handler_) + this->error_handler_->fatalError (*exception ACEXML_ENV_ARG_PARAMETER); + this->reset(); + ACEXML_ENV_RAISE (exception); + return; +} + +void +ACEXML_Parser::parse_version_info (ACEXML_ENV_SINGLE_ARG_DECL) +{ + ACEXML_Char* astring; + if (this->parse_token (ACE_TEXT("ersion")) < 0 + || this->skip_equal () != 0 + || this->parse_version_num (astring) != 0) + { + this->fatal_error (ACE_TEXT ("Invalid VersionInfo specification") + ACEXML_ENV_ARG_PARAMETER); + return; + } + if (ACE_OS::strcmp (astring, ACE_TEXT ("1.0")) != 0) + { + this->fatal_error (ACE_TEXT ("ACEXML Parser supports XML version 1.0 ") + ACE_TEXT ("documents only") ACEXML_ENV_ARG_PARAMETER); + return; + } +} + +void +ACEXML_Parser::parse_encoding_decl (ACEXML_ENV_SINGLE_ARG_DECL) +{ + ACEXML_Char* astring = 0; + if ((this->parse_token (ACE_TEXT("ncoding")) < 0) + || this->skip_equal () != 0 + || this->parse_encname (astring) != 0) + { + this->fatal_error (ACE_TEXT ("Invalid EncodingDecl specification") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + } + const ACEXML_Char* encoding = this->current_->getInputSource()->getEncoding(); + if (encoding != 0 && ACE_OS::strcmp (astring, encoding) != 0) + { + ACE_ERROR ((LM_ERROR, ACE_TEXT ("Detected Encoding is %s ") + ACE_TEXT (": Declared Encoding is %s\n"), + encoding, astring)); + this->warning (ACE_TEXT ("Declared encoding differs from detected ") + ACE_TEXT ("encoding") ACEXML_ENV_ARG_PARAMETER); + } +} + +int +ACEXML_Parser::parse_text_decl (ACEXML_ENV_SINGLE_ARG_DECL) +{ + // Read xml + if (this->parse_token (ACE_TEXT("xml")) < 0) + { + this->fatal_error(ACE_TEXT ("Expecting keyword 'xml' in TextDecl") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + ACEXML_Char fwd = this->skip_whitespace(); + // Read version + if (fwd == 'v') + { + this->parse_version_info (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + fwd = this->skip_whitespace(); + } + + if (fwd == 'e') + { + this->parse_encoding_decl (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + fwd = this->skip_whitespace(); + } + else + { + this->fatal_error (ACE_TEXT ("Missing encodingDecl in TextDecl") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + if (fwd == '?' && this->get() == '>') + return 0; + // All the rules fail. So return an error. + this->fatal_error (ACE_TEXT ("Invalid TextDecl") ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + return -1; +} + +void +ACEXML_Parser::parse_xml_decl (ACEXML_ENV_SINGLE_ARG_DECL) +{ + // Read parse_token (ACE_TEXT("xml")) < 0) + { + this->fatal_error(ACE_TEXT ("Expecting keyword xml in XMLDecl") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + } + + ACEXML_Char fwd = this->skip_whitespace(); + + // Read version + if (fwd != 'v') + { + this->fatal_error (ACE_TEXT ("Expecting VersionInfo declaration") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; + } + + this->parse_version_info (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK; + + fwd = this->skip_whitespace(); + if (fwd != '?') + { + if (fwd == 'e') + { + this->parse_encoding_decl (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK; + fwd = this->skip_whitespace(); + } + if (fwd == 's') + { + ACEXML_Char* astring; + if ((this->parse_token (ACE_TEXT("tandalone")) == 0) && + this->skip_equal () == 0 && + this->parse_sddecl (astring) == 0) + { + if (ACE_OS::strcmp (astring, ACE_TEXT ("yes")) == 0) + this->standalone_ = 1; + fwd = this->skip_whitespace(); + } + } + } + if (fwd == '?' && this->get() == '>') + return; + // All the rules fail. So return an error. + this->fatal_error (ACE_TEXT ("Invalid XMLDecl declaration") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK; +} + +int +ACEXML_Parser::parse_comment (void) +{ + int state = 0; + + if (this->get () != '-' || // Skip the opening "'. Notice that + // according to the spec, '--->' is not a valid closing comment + // sequence. But we'll let it pass anyway. + { + ACEXML_Char fwd = this->get (); + if ((fwd == '-' && state < 2) || + (fwd == '>' && state == 2)) + state += 1; + else + state = 0; // Reset parse state. + } + return 0; +} + +int +ACEXML_Parser::parse_processing_instruction (ACEXML_ENV_SINGLE_ARG_DECL) +{ + const ACEXML_Char *pitarget = this->parse_name (); + ACEXML_Char *instruction = 0; + + if (!ACE_OS::strcasecmp (ACE_TEXT ("xml"), pitarget)) + { + // Invalid PITarget name. + this->fatal_error(ACE_TEXT ("PI can't have 'xml' in PITarget") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + + int state = 0; + + ACEXML_Char ch = this->skip_whitespace(); + while (state < 2) + { + switch (ch) + { + case '?': + if (state == 0) + state = 1; + break; + case '>': + if (state == 1) + { + instruction = this->obstack_.freeze (); + this->content_handler_->processingInstruction (pitarget, + instruction + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + this->obstack_.unwind (const_cast (pitarget)); + return 0; + } + break; + case 0x0A: + // Fall thru... + default: + if (state == 1) + this->obstack_.grow ('?'); + this->obstack_.grow (ch); + state = 0; + } + ch = this->get (); + } + return -1; +} + +void +ACEXML_Parser::reset (void) +{ + this->doctype_ = 0; + if (this->ctx_stack_.pop (this->current_) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("Mismatched push/pop of Context stack"))); + if (this->current_) + { + this->current_->getInputSource()->getCharStream()->rewind(); + + this->current_->setInputSource (0); + delete this->current_; + this->current_ = 0; + } + + ACEXML_Char* temp = 0; + while (this->GE_reference_.pop (temp) != -1) + ; + while (this->PE_reference_.pop (temp) != -1) + ; + this->obstack_.release(); + this->alt_stack_.release(); + this->xml_namespace_.reset(); + this->nested_namespace_ = 0; + this->internal_GE_.reset(); + this->external_GE_.reset(); + this->unparsed_entities_.reset(); + this->predef_entities_.reset(); + this->internal_PE_.reset(); + this->external_PE_.reset(); + this->notations_.reset(); + this->ref_state_ = ACEXML_ParserInt::INVALID; + this->external_subset_ = 0; + this->external_entity_ = 0; + this->has_pe_refs_ = 0; + this->standalone_ = 0; + this->external_dtd_ = 0; + this->internal_dtd_ = 0; +} + diff --git a/ACE/ACEXML/parser/parser/Parser.h b/ACE/ACEXML/parser/parser/Parser.h new file mode 100644 index 00000000000..3b0725ec214 --- /dev/null +++ b/ACE/ACEXML/parser/parser/Parser.h @@ -0,0 +1,858 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Parser.h + * + * $Id$ + * + * @author Nanbor Wang + * @author Krishnakumar B + */ +//============================================================================= + +#ifndef _ACEXML_BASIC_PARSER_H_ +#define _ACEXML_BASIC_PARSER_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/parser/parser/Parser_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/XMLReader.h" +#include "ACEXML/common/LocatorImpl.h" +#include "ACEXML/common/NamespaceSupport.h" +#include "ACEXML/common/CharStream.h" +#include "ace/Obstack.h" +#include "ace/Functor.h" +#include "ace/SString.h" +#include "ace/Hash_Map_Manager.h" +#include "ace/Unbounded_Set.h" +#include "ace/Containers_T.h" +#include "ace/Auto_Ptr.h" +#include "ACEXML/parser/parser/Entity_Manager.h" +#include "ACEXML/parser/parser/ParserInternals.h" +#include "ACEXML/parser/parser/ParserContext.h" + +/** + * @class ACEXML_Parser Parser.h "ACEXML/parser/parser/Parser.h" + * + * @brief A SAX based parser. + * + */ +class ACEXML_PARSER_Export ACEXML_Parser : public ACEXML_XMLReader +{ +public: + /// Default constructor. + ACEXML_Parser (void); + + /// Destructor. + virtual ~ACEXML_Parser (void); + + /** + * Initialize the parser state. + * + * @retval 0 if parser was initialized correctly else -1. + */ + int initialize (ACEXML_InputSource* input); + + /** + * Return the current content handler. + */ + virtual ACEXML_ContentHandler *getContentHandler (void) const; + + /* + * Return the current DTD handler. + */ + virtual ACEXML_DTDHandler *getDTDHandler (void) const; + + /* + * Return the current entity resolver. + */ + virtual ACEXML_EntityResolver *getEntityResolver (void) const; + + /* + * Return the current error handler. + */ + virtual ACEXML_ErrorHandler *getErrorHandler (void) const; + + /** + * Look up the value of a feature. This method allows + * programmers to check whether a specific feature has been + * activated in the parser. + */ + virtual int getFeature (const ACEXML_Char *name ACEXML_ENV_ARG_DECL); + + /** + * Activating or deactivating a feature. + */ + virtual void setFeature (const ACEXML_Char *name, + int boolean_value ACEXML_ENV_ARG_DECL); + + /* + * Look up the value of a property. + */ + virtual void * getProperty (const ACEXML_Char *name ACEXML_ENV_ARG_DECL); + + /* + * Set the value of a property. + */ + virtual void setProperty (const ACEXML_Char *name, + void *value ACEXML_ENV_ARG_DECL); + + /* + * Parse an XML document. + */ + virtual void parse (ACEXML_InputSource *input ACEXML_ENV_ARG_DECL); + + /* + * Parse an XML document from a system identifier (URI). + */ + virtual void parse (const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) + ; + + /* + * Allow an application to register a content event handler. + */ + virtual void setContentHandler (ACEXML_ContentHandler *handler); + + /* + * Allow an application to register a DTD event handler. + */ + virtual void setDTDHandler (ACEXML_DTDHandler *handler); + + /* + * Allow an application to register an entity resolver. + */ + virtual void setEntityResolver (ACEXML_EntityResolver *resolver); + + /* + * Allow an application to register an error event handler. + */ + virtual void setErrorHandler (ACEXML_ErrorHandler *handler); + + + +protected: + /** + * Parse XML Prolog. + */ + void parse_xml_prolog (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse VersionInfo declaration. + * + */ + void parse_version_info (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse a EncodingDecl declaration. + * + */ + void parse_encoding_decl (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse a XMLDecl declaration. + * + */ + void parse_xml_decl (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse a TextDecl declaration. + */ + int parse_text_decl (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse a PI statement. The first character encountered + * should always be '?' in the PI prefix "@doctype_. + * + * @todo Instead of simply checking for the root element based on the + * argument @a is_root, we should instead either pass in some sort + * of validator or allow the function to return the element name so it + * can be used in a validator. + */ + void parse_element (int is_root ACEXML_ENV_ARG_DECL); + + /** + * Parse a content declaration. + * + */ + int parse_content (const ACEXML_Char* startname, const ACEXML_Char*& ns_uri, + const ACEXML_Char*& ns_lname, int ns_flag + ACEXML_ENV_ARG_DECL); + + /** + * Parse a character reference, i.e., " " or "". The first + * character encountered should be the '#' char. + * + * @param buf points to a character buffer for the result. + * + * @param len In/out argument which initially specifies the size of the + * buffer and is later set to the no. of characters in the reference. + * + * @retval 0 on success and -1 otherwise. + */ + int parse_char_reference (ACEXML_Char *buf, size_t& len); + + /** + * Parse a reference name, i.e., foo in "&foo;" or "%foo;". The first + * character encountered should be the character following '&' or '%'. + * Effectively the same as @sa parse_name but we don't use the parser's + * obstack. Caller is responsible for deleting the memory. + * + * @retval A pointer to name of reference, 0 otherwise. + */ + ACEXML_Char* parse_reference_name (void); + + /** + * Parse a CDATA section. The first character should always be the first + * '[' in CDATA definition. + * + * @retval 0 on success. + * @retval -1 if fail. + */ + int parse_cdata (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse a "markupdecl" section, this includes both "markupdecl" and + * "DeclSep" sections in XML specification + */ + int parse_internal_dtd (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Skip over a comment. The first character encountered should always be + * the first '-' in the comment prefix "@<@!--". + */ + int parse_comment (void); + + /** + * Parse an "ELEMENT" decl. The first character this method + * expects is always the 'L' (the second char) in the word + * "ELEMENT". + * + * @retval 0 on success, -1 otherwise. + */ + int parse_element_decl (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse an "ENTITY" decl. The first character this method expects + * is always the 'N' (the second char) in the word "ENTITY". + * + * @retval 0 on success, -1 otherwise. + */ + int parse_entity_decl (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse an "ATTLIST" decl. Thse first character this method + * expects is always the 'A' (the first char) in the word + * "ATTLIST". + * + * @retval 0 on success, -1 otherwise. + */ + int parse_attlist_decl (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse a AttType declaration. + * + */ + int parse_atttype (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + *Parse a "NOTATION" decl. The first character this method + * expects is always the 'N' (the first char) in the word + * "NOTATION". + * + * @retval 0 on success, -1 otherwise. + */ + int parse_notation_decl (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse an ExternalID or a reference to PUBLIC ExternalID. + * Possible cases are in the forms of: + * + * SYSTEM 'quoted string representing system resource' + * PUBLIC 'quoted name of public ID' 'quoted resource' + * PUBLIC 'quoted name we are referring to' + * + * + * The first character this function sees must be either 'S' or 'P'. + * When the function finishes parsing, the input stream points + * at the first non-whitespace character. + * + * @param publicId returns the unquoted publicId read. If none + * is available, it will be reset to 0. + * @param systemId returns the unquoted systemId read. If none + * is available, it will be reset to 0. + * + * @retval 0 on success, -1 otherwise. + */ + int parse_external_id (ACEXML_Char *&publicId, ACEXML_Char *&systemId + ACEXML_ENV_ARG_DECL); + + /** + * Parse an external DTD. + * + */ + int parse_external_dtd (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse an external subset. This does the actual parsing of an external + * subset and is called by @sa parse_external_dtd. + * + */ + int parse_external_subset (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse a markupDecl section. + * + */ + int parse_markup_decl (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse a conditionalSect declaration. + * + */ + int parse_conditional_section (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse a includeSect declaration. + * + */ + int parse_includesect (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * + * Parse a ignoreSect declaration. + */ + int parse_ignoresect (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse a PEReference. + * + */ + int parse_PE_reference (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse a Reference. + * + */ + int parse_entity_reference (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse an entityValue. + * + */ + int parse_entity_value (ACEXML_Char *&str ACEXML_ENV_ARG_DECL); + + /** + * Parse a DefaultDecl specification. + * + */ + int parse_defaultdecl (ACEXML_ENV_SINGLE_ARG_DECL); + + + /** + * Parse the "children" and "Mixed" non-terminals in contentspec. + * + * The first character this function sees must be the first + * open paren '(' in children. + * + * @retval 0 on success, -1 otherwise. + */ + int parse_children_definition (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse a @c cp non-terminal. @c cp can either be a @c seq or a @c choice. + * This function calls itself recursively. + * + * @param skip_open_paren when non-zero, it indicates that the open paren of + * the @c seq or @c choice has already been removed from the input + * stream. + * + * @retval 0 on success, -1 otherwise. + */ + int parse_child (int skip_open_paren ACEXML_ENV_ARG_DECL); + + /** + * Parse a name from the input CharStream. If @a ch @!= 0, then we have + * already consumed the first name character from the input CharStream, + * otherwise, parse_name will use this->get() to acquire the initial + * character. + * + * @return A pointer to the string in the obstack, 0 if it's not a + * valid name. + */ + ACEXML_Char *parse_name (ACEXML_Char ch = 0); + + /** + * Parse a NMTOKEN from the input stream. + * + * @return A pointer to the string in the obstack, 0 if it's not a valid + * NMTOKEN. + */ + ACEXML_Char* parse_nmtoken (ACEXML_Char ch = 0); + + /** + * Parse the version string in an XML Prolog section. + * + * @param str String containing the version number if successful. + * @return 0 if the string was read successfully, 0 otherwise. + */ + int parse_version (ACEXML_Char*& str); + + /** + * Parse the version number in a VersionInfo declaration. + */ + int parse_version_num (ACEXML_Char*& str); + + /** + * Parse the encoding name in an XML Prolog section. + * + * @param str String containing the encoding name if successful. + * @return 0 if the string was read successfully, 0 otherwise. + */ + int parse_encname (ACEXML_Char*& str); + + /** + * Parse a SDDecl string. + * + * @param str String containing the encoding name if successful. + * @return 0 if the string was read successfully, -1 otherwise. + */ + int parse_sddecl (ACEXML_Char*& str); + + /** + * Parse an attribute name. + * + * @retval str String containing the value of the attribute name + * if successful. + * @retval 0 otherwise. + */ + ACEXML_Char* parse_attname (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse an attribute value. + * + * @param str String containing the value of the attribute if successful. + * @return 0 if attribute value was read successfully, -1 otherwise. + */ + int parse_attvalue (ACEXML_Char*& str ACEXML_ENV_ARG_DECL); + + /** + * Parse a tokenized type attribute. + * + * @return 0 if attribute type was read successfully, -1 otherwise. + */ + int parse_tokenized_type (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Parse a SystemLiteral. + * + * @param str String containing the SystemLiteral if successful. + * @return 0 if the string was read successfully, 0 otherwise. + */ + int parse_system_literal (ACEXML_Char*& str); + + /** + * Parse a PubidLiteral. + * + * @param str String containing the PubidLiteral if successful. + * @return 0 if the string was read successfully, 0 otherwise. + */ + int parse_pubid_literal (ACEXML_Char*& str); + + /** + * Check if a character @a c is a whitespace. + * + * @retval 1 if @a c is a valid white space character. 0 otherwise. + */ + int is_whitespace (const ACEXML_Char c) const; + + /** + * Check if a character @a c is a valid Char. + * + * @retval 1 if @a c is a valid character. 0 otherwise. + */ + int isChar (ACEXML_UCS4 c) const; + + /** + * Check if a character @a c is a valid CharRef character. + * + * @retval 1 if @a c is a valid character reference character, 0 otherwise. + */ + int isCharRef (const ACEXML_Char c) const; + + /** + * Check if a character @a c is a BaseChar. + * + * @retval 1 if @a c is a valid BaseChar character, 0 otherwise. + */ + int isBasechar (const ACEXML_Char c) const; + + /** + * Check if a character @a c is a Ideographic. + * + * @retval 1 if @a c is a valid Ideographic character, 0 otherwise. + */ + int isIdeographic (const ACEXML_Char c) const; + + /** + * Check if a character @a c is a CombiningChar. + * + * @retval 1 if @a c is a valid CombiningChar character, 0 otherwise. + */ + int isCombiningchar (const ACEXML_Char c) const; + + /** + * Check if a character @a c is a Digit. + * + * @retval 1 if @a c is a valid Digit character, 0 otherwise. + */ + int isDigit (const ACEXML_Char c) const; + + /** + * Check if a character @a c is an Extender. + * + * @retval 1 if @a c is a valid Extender character, 0 otherwise. + */ + int isExtender (const ACEXML_Char c) const; + + /** + * Check if a character @a c is a Letter. + * + * @retval 1 if @a c is a valid Letter character, 0 otherwise. + */ + int isLetter (const ACEXML_Char c) const; + + /** + * Check if a character is an acceptable NameChar. + * + * @retval 1 if @a c is a valid NameChar character, 0 otherwise. + */ + int isNameChar (const ACEXML_Char c) const; + + /** + * Check if a character is a PubidChar. + * + * @retval 1 if @a c is a valid PubidChar character, 0 otherwise. + */ + int isPubidChar (const ACEXML_Char c) const; + + /// Get a character. + virtual ACEXML_Char get (void); + + /// Peek a character. + virtual ACEXML_Char peek (void); + +private: + + // *** Helper functions for parsing XML + + /** + * Skip any whitespaces encountered until the first non-whitespace + * character is encountered. + * + * @return The next non-whitespace character from the CharStream. + * + * @sa skip_whitespace_count + */ + ACEXML_Char skip_whitespace (void); + + /** + * Skip any whitespaces encountered until the first non-whitespace + * character. The first non-whitespace character is not consumed. + * This method does peek into the input CharStream and therefore + * is more expensive than @ref skip_whitespace. + * + * @param peek If non-null, @a peek points to a ACEXML_Char where + * skip_whitespace_count stores the first non-whitespace + * character it sees (character is not removed from the stream.) + * + * @return The number of whitespace characters consumed. + * + * @sa skip_whitespace + */ + int skip_whitespace_count (ACEXML_Char *peek = 0); + + /** + * Skip an equal sign. + * + * @retval 0 when succeeds, -1 if no equal sign is found. + */ + int skip_equal (void); + + /** + * Get a quoted string. Quoted strings are used to specify + * attribute values and this routine will replace character and + * entity references on-the-fly. Parameter entities are not allowed + * (or replaced) in this function. (But regular entities are.) + * + * @param str returns the un-quoted string. + * + * @retval 0 on success, -1 otherwise. + */ + int get_quoted_string (ACEXML_Char *&str); + + /** + * Check if a character @a c is a Digit. + * + * @retval 1 if @a c is a valid Digit character, 0 otherwise. + */ + int isNormalDigit (const ACEXML_Char c) const; + + /** + * Dispatch errors to ErrorHandler. + * + */ + void error (const ACEXML_Char* msg ACEXML_ENV_ARG_DECL); + + /** + * Dispatch warnings to ErrorHandler. + * + */ + void warning (const ACEXML_Char* msg ACEXML_ENV_ARG_DECL); + + /** + * Dispatch fatal errors to ErrorHandler. + * + */ + void fatal_error (const ACEXML_Char* msg ACEXML_ENV_ARG_DECL); + + /** + * Dispatch prefix mapping calls to the ContentHandler. + * + * @param prefix Namespace prefix + * @param uri Namespace URI + * @param name Local name + * @param start 1 => startPrefixMapping 0 => endPrefixMapping + */ + void prefix_mapping (const ACEXML_Char* prefix, + const ACEXML_Char* uri, + int start ACEXML_ENV_ARG_DECL); + /** + * Parse a keyword. + */ + int parse_token (const ACEXML_Char* keyword); + + /** + * Push the current context on to the stack. + * + */ + int push_context (ACEXML_Parser_Context* context); + + /** + * Pop the top element in the stack and replace current context with that. + */ + size_t pop_context (int GE_ref ACEXML_ENV_ARG_DECL); + + /** + * Create a new ACEXML_CharStream from @a systemId and @a publicId and + * replace the current input stream with the newly created stream. + */ + virtual int switch_input (ACEXML_CharStream* cstream, + const ACEXML_Char* systemId, + const ACEXML_Char* publicId = 0); + /** + * Create a new ACEXML_InputSource from @a systemId and @a publicId and + * replace the current input source with the newly created InputSource. + */ + virtual int switch_input (ACEXML_InputSource* input, + const ACEXML_Char* systemId, + const ACEXML_Char* publicId = 0); + + /** + * Check for a parameter entity reference. This is used to check for the + * occurence of a PE Reference withing markupDecl. Additionally this + * function consumes any leading or trailing whitespace around the PE + * Reference. + * + * @retval Number of whitespace characters skipped. + */ + int check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_DECL); + + /** + * Reset the parser state. + * + */ + void reset (void); + + /** + * Very trivial, non-conformant normalization of a systemid. + * + */ + ACEXML_Char* normalize_systemid (const ACEXML_Char* systemId); + + // Feature names: + + /** + * \addtogroup acexml_parser_features + * @{ + */ + + /** + * @var simple_parsing_feature_ + * + * This constant string defines the name of "simple XML parsing" + * feature. When this feature is enabled, ACEXML parser is allowed + * to parse a simple XML stream without mandated XML prolog + * and no DTD defintion. + */ + static const ACEXML_Char simple_parsing_feature_[]; + + /** + * @var namespaces_feature_ + * + * This constant string defines the SAX XML Namespace feature. When this + * feature is enabled, ACEXML parser allows access by namespace qualified + * names. + */ + static const ACEXML_Char namespaces_feature_[]; + + /** + * @var namespace_prefixes_feature_ + * + * This constant string defines the SAX XML Namespace prefixes feature. + * Normally the list of attributes returned by the parser will not + * contain attributes used as namespace declarations (xmlns*). When this + * feature is enabled, the list of attributes contains the namespace + * declarations also. + */ + static const ACEXML_Char namespace_prefixes_feature_[]; + + /** + * @var validation_feature_ + * + * This constant string defines the SAX XML Validation feature. When + * this feature is enabled, the parser validates the document in + * addition to checking for well-formedness. + */ + static const ACEXML_Char validation_feature_[]; + + /* @} */ + + /// Keeping track of the handlers. We do not manage the memory for + /// handlers. + ACEXML_DTDHandler *dtd_handler_; + ACEXML_EntityResolver *entity_resolver_; + ACEXML_ContentHandler *content_handler_; + ACEXML_ErrorHandler *error_handler_; + + /// Document Type + ACEXML_Char *doctype_; + + /// Current parser context + ACEXML_Parser_Context* current_; + + /// Stack used to hold the Parser_Context + ACE_Unbounded_Stack ctx_stack_; + + /* + * The following two are essentially chains of references and is used by + * the parser to determine if there is any recursion. We keep two of + * these one for general entities and one for parameter entities, as they + * both fall under different namespaces. + * + */ + /// Set used to hold the general entity references that are active. + ACE_Unbounded_Stack GE_reference_; + + /// Set used to hold the parameter entity references that are active. + ACE_Unbounded_Stack PE_reference_; + + /// Obstack used by the parser to hold all the strings parsed + ACE_Obstack_T obstack_; + + /// Alternative obstack used to hold any strings when the original is in use + ACE_Obstack_T alt_stack_; + + /// Namespace stack used by the parser to implement support for Namespaces + ACEXML_NamespaceSupport xml_namespace_; + + /// T => We are processing a nested namespace + int nested_namespace_; + + /// Set of internal parsed general entities in the document + ACEXML_Entity_Manager internal_GE_; + + /// Set of external parsed general entities in the document + ACEXML_Entity_Manager external_GE_; + + /// Set of unparsed entities in the document + ACEXML_Entity_Manager unparsed_entities_; + + /// Set of predefined entities used by the parser + ACEXML_Entity_Manager predef_entities_; + + /// Set of internal parsed parameter entities in the document + ACEXML_Entity_Manager internal_PE_; + + /// Set of external parsed parameter entities in the document + ACEXML_Entity_Manager external_PE_; + + /// Set of notations declared in the document + ACEXML_Entity_Manager notations_; + + /// State of the parser when it encounters a reference. + ACEXML_ParserInt::ReferenceState ref_state_; + + /// T => We are parsing an external subset + int external_subset_; + + /// T => We are parsing an external entity value + int external_entity_; + + /// T => Internal DTD has parameter entity references + int has_pe_refs_; + + /// If set, the document is a standalone XML document + int standalone_; + + /// If set, the document has an external DTD subset + int external_dtd_; + + /// If set, the document has an internal DTD + int internal_dtd_; + + /// Feature flags + /// If set, the parser should parse a document without a prolog + int simple_parsing_; + + /// If set, the parser should also validate + int validate_; + + /// If set, the parser should allow access by namespace qualified names. + int namespaces_; + + /// If set, the parser should include namespace declarations in the list + /// of attributes of an element. + int namespace_prefixes_; + +}; + +#if defined (__ACEXML_INLINE__) +# include "ACEXML/parser/parser/Parser.inl" +#endif /* __ACEXML_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_BASIC_PARSER_H_ */ diff --git a/ACE/ACEXML/parser/parser/Parser.inl b/ACE/ACEXML/parser/parser/Parser.inl new file mode 100644 index 00000000000..1706d0a88e1 --- /dev/null +++ b/ACE/ACEXML/parser/parser/Parser.inl @@ -0,0 +1,257 @@ +//============================================================================= +/** + * @file Parser.inl + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +ACEXML_INLINE ACEXML_ContentHandler * +ACEXML_Parser::getContentHandler (void) const +{ + return this->content_handler_; +} + +ACEXML_INLINE ACEXML_DTDHandler * +ACEXML_Parser::getDTDHandler (void) const +{ + return this->dtd_handler_; +} + +ACEXML_INLINE ACEXML_EntityResolver * +ACEXML_Parser::getEntityResolver (void) const +{ + return this->entity_resolver_; +} + +ACEXML_INLINE ACEXML_ErrorHandler * +ACEXML_Parser::getErrorHandler (void) const +{ + return this->error_handler_; +} + +ACEXML_INLINE void +ACEXML_Parser::setContentHandler (ACEXML_ContentHandler *handler) +{ + this->content_handler_ = handler; +} + +ACEXML_INLINE void +ACEXML_Parser::setDTDHandler (ACEXML_DTDHandler *handler) +{ + this->dtd_handler_ = handler; +} + +ACEXML_INLINE void +ACEXML_Parser::setEntityResolver (ACEXML_EntityResolver *resolver) +{ + this->entity_resolver_ = resolver; +} + +ACEXML_INLINE void +ACEXML_Parser::setErrorHandler (ACEXML_ErrorHandler *handler) +{ + this->error_handler_ = handler; +} + +ACEXML_INLINE int +ACEXML_Parser::isChar (ACEXML_UCS4 c) const +{ + return (c == 0x9 || c == 0xA || c == 0xD || + c >= 0x20 && c <= 0xD7FF || + c >= 0xE000 && c <= 0xFFFD || + c >= 0x10000 && c <= 0x10FFFF); +} + +ACEXML_INLINE int +ACEXML_Parser::isCharRef (const ACEXML_Char c) const + { + return ((c >= 'a' && c <= 'f') || + (c >= 'A' && c <= 'F')); +} + +ACEXML_INLINE int +ACEXML_Parser::isNormalDigit (const ACEXML_Char c) const +{ + return (c >= '\x30' && c <= '\x39'); +} + +ACEXML_INLINE int +ACEXML_Parser::isBasechar (const ACEXML_Char c) const +{ +#if defined (ACE_USES_WCHAR) + return ACEXML_ParserInt::isBasechar_i (c); +#else + return ACEXML_ParserInt::base_char_table_[(int) c]; +#endif /* ACE_USES_WCHAR */ +} + +ACEXML_INLINE int +ACEXML_Parser::isIdeographic (const ACEXML_Char c) const +{ +#if defined (ACE_USES_WCHAR) + return ACEXML_ParserInt::isIdeographic_i (c); +#else + ACE_UNUSED_ARG (c); + return 0; +#endif /* ACE_USES_WCHAR */ +} + +ACEXML_INLINE int +ACEXML_Parser::isCombiningchar (const ACEXML_Char c) const +{ +#if defined (ACE_USES_WCHAR) + return ACEXML_ParserInt::isCombiningchar_i (c); +#else + ACE_UNUSED_ARG (c); + return 0; +#endif /* ACE_USES_WCHAR */ + } + +ACEXML_INLINE int +ACEXML_Parser::isDigit (const ACEXML_Char c) const +{ +#if defined (ACE_USES_WCHAR) + return ACEXML_ParserInt::isDigit_i (c); +#else + return (this->isNormalDigit (c)); +#endif /* ACE_USES_WCHAR */ +} + +ACEXML_INLINE int +ACEXML_Parser::isExtender (const ACEXML_Char c) const +{ +#if defined (ACE_USES_WCHAR) + return ACEXML_ParserInt::isExtender_i (c); +#else + return (c == '\xB7'); +#endif /* ACE_USES_WCHAR */ +} + +ACEXML_INLINE int +ACEXML_Parser::isLetter (const ACEXML_Char c) const +{ + return (this->isBasechar (c) || this->isIdeographic (c)); +} + +ACEXML_INLINE int +ACEXML_Parser::isNameChar (const ACEXML_Char c) const +{ + return (this->isLetter (c) || this->isDigit (c) || c == '.' || c == '-' || + c == '_' || c == ':' || this->isCombiningchar (c) || + this->isExtender (c)); +} + +ACEXML_INLINE int +ACEXML_Parser::isPubidChar (const ACEXML_Char c) const +{ + return (c == '\x20' || c == '\x0D' || c == '\x0A' || + (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || c == '-' || c == '\'' || c == '(' || + c == ')' || c == '+' || c == ',' || c == '.' || c == '/' || + c == ':' || c == '=' || c == '?' || c == ';' || c == '!' || + c == '*' || c == '#' || c == '@' || c == '$' || c == '_' || + c == '%'); +} + + +ACEXML_INLINE int +ACEXML_Parser::is_whitespace (const ACEXML_Char c) const +{ + switch (c) + { + case '\x0A': case '\x20': + case '\x09': case '\x0D': + return 1; + default: + return 0; + } +} + +ACEXML_INLINE ACEXML_Char +ACEXML_Parser::skip_whitespace (void) +{ + ACEXML_Char ch = this->get(); + while (this->is_whitespace (ch)) + ch = this->get (); + return ch; +} + + +ACEXML_INLINE int +ACEXML_Parser::skip_whitespace_count (ACEXML_Char *peeky) +{ + int wscount = 0; + ACEXML_Char dummy; + ACEXML_Char &forward = (peeky == 0 ? dummy : *peeky); + + for (;this->is_whitespace ((forward = this->peek ())); ++wscount) + this->get (); + return wscount; +} + +ACEXML_INLINE int +ACEXML_Parser::skip_equal (void) +{ + if (this->skip_whitespace() != '=') + return -1; + while (this->is_whitespace (this->peek())) + this->get(); + return 0; +} + +ACEXML_INLINE ACEXML_Char +ACEXML_Parser::get (void) +{ + ACEXML_Char ch = 0; + const ACEXML_InputSource* ip = this->current_->getInputSource(); + ACEXML_CharStream* instream = ip->getCharStream(); + + if (instream->get (ch) != -1) + { + this->current_->getLocator()->incrColumnNumber(); + // Normalize white-space + if (ch == '\x0D') + { + if (instream->peek() == 0x0A) + instream->get (ch); + ch = '\x0A'; + } + if (ch == '\x0A') + { + // Reset column number and increment Line Number. + this->current_->getLocator()->incrLineNumber(); + this->current_->getLocator()->setColumnNumber (0); + } + return ch; + } + return 0; +} + +ACEXML_INLINE ACEXML_Char +ACEXML_Parser::peek (void) +{ + // Using an extra level of indirection so we can + // manage document location in the future. + ACEXML_Char ch = 0; + const ACEXML_InputSource* ip = this->current_->getInputSource(); + ACEXML_CharStream* instream = ip->getCharStream(); + ch = static_cast (instream->peek ()); + return (ch > 0 ? ch : 0); +} + +ACEXML_INLINE int +ACEXML_Parser::parse_token (const ACEXML_Char* keyword) +{ + if (keyword == 0) + return -1; + const ACEXML_Char* ptr = keyword; + for (; *ptr != 0 && (this->get() == *ptr); ++ptr) + ; + if (*ptr == 0) + return 0; + else + return -1; +} diff --git a/ACE/ACEXML/parser/parser/ParserContext.cpp b/ACE/ACEXML/parser/parser/ParserContext.cpp new file mode 100644 index 00000000000..663ae1ef1ac --- /dev/null +++ b/ACE/ACEXML/parser/parser/ParserContext.cpp @@ -0,0 +1,16 @@ +// $Id$ + +#include "ACEXML/parser/parser/ParserContext.h" + +#if !defined (__ACEXML_INLINE__) +# include "ACEXML/parser/parser/ParserContext.inl" +#endif /* __ACEXML_INLINE__ */ + +ACEXML_Parser_Context::~ACEXML_Parser_Context() +{ + delete this->instream_; + this->instream_ = 0; + delete this->locator_; + this->locator_ = 0; +} + diff --git a/ACE/ACEXML/parser/parser/ParserContext.h b/ACE/ACEXML/parser/parser/ParserContext.h new file mode 100644 index 00000000000..34b1edbba78 --- /dev/null +++ b/ACE/ACEXML/parser/parser/ParserContext.h @@ -0,0 +1,84 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file ParserContext.h + * + * $Id$ + * + * @author Krishnakumar B + */ +//============================================================================= + +#ifndef ACEXML_PARSER_CONTEXT_H +#define ACEXML_PARSER_CONTEXT_H + +#include /**/ "ace/pre.h" +#include "ACEXML/parser/parser/Parser_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/XML_Types.h" +#include "ACEXML/common/InputSource.h" +#include "ACEXML/common/Locator.h" +#include "ACEXML/common/LocatorImpl.h" +#include "ace/Functor.h" +#include "ace/Containers_T.h" + +class ACEXML_PARSER_Export ACEXML_Parser_Context +{ +public: + /// Default constructor + ACEXML_Parser_Context(); + + /// Constructor which initializes the context + ACEXML_Parser_Context (ACEXML_InputSource* instream, + ACEXML_LocatorImpl* locator); + + /// Comparison operator + bool operator!= (const ACEXML_Parser_Context& src); + + /// Destructor + virtual ~ACEXML_Parser_Context(); + + /// Reset the parser context. This does not free up the memory. Only sets + /// it to zero. Meant to be called after a context is pushed on to a + /// stack. + void reset (void); + + /// Get the underlying input source. + virtual ACEXML_InputSource* getInputSource(void); + + /// Get the underlying locator. + virtual ACEXML_LocatorImpl* getLocator(void); + + /// Set the underlying input source. + virtual void setInputSource(ACEXML_InputSource* ip); + + /// Set the underlying locator. + virtual void setLocator(ACEXML_LocatorImpl* locator); + +private: + + /// Copy constructor + ACEXML_Parser_Context (const ACEXML_Parser_Context& src); + + /// Assignment operator + ACEXML_Parser_Context& operator= (const ACEXML_Parser_Context& src); + + /// Current input char stream. + ACEXML_InputSource *instream_; + + /// Current Locator which provides line no., column no. systemId and publicId + ACEXML_LocatorImpl* locator_; +}; + +#if defined (__ACEXML_INLINE__) +# include "ACEXML/parser/parser/ParserContext.inl" +#endif /* __ACEXML_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* ACEXML_PARSER_CONTEXT_H */ diff --git a/ACE/ACEXML/parser/parser/ParserContext.inl b/ACE/ACEXML/parser/parser/ParserContext.inl new file mode 100644 index 00000000000..b8f30ea248d --- /dev/null +++ b/ACE/ACEXML/parser/parser/ParserContext.inl @@ -0,0 +1,77 @@ +// -*- C++ -*- +// +// $Id$ + +#include + +ACEXML_INLINE +ACEXML_Parser_Context::ACEXML_Parser_Context() + : instream_ (0), + locator_ (0) +{ + +} + +ACEXML_INLINE +ACEXML_Parser_Context::ACEXML_Parser_Context (ACEXML_InputSource* instream, + ACEXML_LocatorImpl* locator) + : instream_ (instream), + locator_ (locator) +{ + +} + +ACEXML_INLINE +ACEXML_Parser_Context::ACEXML_Parser_Context (const ACEXML_Parser_Context& src) + : instream_ (src.instream_), + locator_ (src.locator_) +{ + +} + +ACEXML_INLINE bool +ACEXML_Parser_Context::operator!= (const ACEXML_Parser_Context& src) +{ + return (this->instream_ != src.instream_ && this->locator_ != src.locator_); +} + +ACEXML_INLINE ACEXML_Parser_Context& +ACEXML_Parser_Context::operator= (const ACEXML_Parser_Context& src) +{ + ACEXML_Parser_Context tmp (src); + std::swap (this->instream_, tmp.instream_); + std::swap (this->locator_, tmp.locator_); + return *this; +} + + +ACEXML_INLINE ACEXML_InputSource* +ACEXML_Parser_Context::getInputSource (void) +{ + return this->instream_; +} + +ACEXML_INLINE ACEXML_LocatorImpl* +ACEXML_Parser_Context::getLocator (void) +{ + return this->locator_; +} + +ACEXML_INLINE void +ACEXML_Parser_Context::setInputSource (ACEXML_InputSource* ip) +{ + this->instream_ = ip; +} + +ACEXML_INLINE void +ACEXML_Parser_Context::setLocator (ACEXML_LocatorImpl* locator) +{ + this->locator_ = locator; +} + +ACEXML_INLINE void +ACEXML_Parser_Context::reset (void) +{ + this->instream_ = 0; + this->locator_ = 0; +} diff --git a/ACE/ACEXML/parser/parser/ParserInternals.cpp b/ACE/ACEXML/parser/parser/ParserInternals.cpp new file mode 100644 index 00000000000..38db8291fa5 --- /dev/null +++ b/ACE/ACEXML/parser/parser/ParserInternals.cpp @@ -0,0 +1,394 @@ +// $Id$ + +#include "ACEXML/parser/parser/ParserInternals.h" + + +const ACEXML_Char* ACEXML_ParserInt::predef_ent_[] = { + ACE_TEXT ("amp"), + ACE_TEXT ("lt"), + ACE_TEXT ("gt"), + ACE_TEXT ("apos"), + ACE_TEXT ("quot") +}; + +const ACEXML_Char* ACEXML_ParserInt::predef_val_[] = { + ACE_TEXT ("&"), + ACE_TEXT ("<"), + ACE_TEXT (">"), + ACE_TEXT ("'"), + ACE_TEXT ("\"") +}; + +// Optimize away the most common cases. Any compiler worth it's salt should +// give generate a single memory access. + +const ACEXML_Char ACEXML_ParserInt::base_char_table_[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0000 - 0x000F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 - 0x001F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0020 - 0x002F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0030 - 0x003F */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x0040 - 0x004F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 0x0050 - 0x005F */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x0060 - 0x006F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 0x0070 - 0x007F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0080 - 0x008F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0090 - 0x009F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00A0 - 0x00AF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00B0 - 0x00BF */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x00C0 - 0x00CF */ + 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x00D0 - 0x00DF */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x00E0 - 0x00EF */ + 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x00F0 - 0x00FF */ +}; + +#if defined (ACE_USES_WCHAR) + +int +ACEXML_ParserInt::isBasechar_i (const ACEXML_Char c) +{ + if (c < 0x0100) + return ACEXML_ParserInt::base_char_table_[c]; + else if (c < 0x0905) + return ((c >= 0x0100 && c <= 0x0131) || + (c >= 0x0134 && c <= 0x013E) || + (c >= 0x0141 && c <= 0x0148) || + (c >= 0x014A && c <= 0x017E) || + (c >= 0x0180 && c <= 0x01C3) || + (c >= 0x01CD && c <= 0x01F0) || + (c >= 0x01F4 && c <= 0x01F5) || + (c >= 0x01FA && c <= 0x0217) || + (c >= 0x0250 && c <= 0x02A8) || + (c >= 0x02BB && c <= 0x02C1) || + (c == 0x0386) || + (c >= 0x0388 && c <= 0x038A) || + (c == 0x038C) || + (c >= 0x038E && c <= 0x03A1) || + (c >= 0x03A3 && c <= 0x03CE) || + (c >= 0x03D0 && c <= 0x03D6) || + (c == 0x03DA) || + (c == 0x03DC) || + (c == 0x03DE) || + (c == 0x03E0) || + (c >= 0x03E2 && c <= 0x03F3) || + (c >= 0x0401 && c <= 0x040C) || + (c >= 0x040E && c <= 0x044F) || + (c >= 0x0451 && c <= 0x045C) || + (c >= 0x045E && c <= 0x0481) || + (c >= 0x0490 && c <= 0x04C4) || + (c >= 0x04C7 && c <= 0x04C8) || + (c >= 0x04CB && c <= 0x04CC) || + (c >= 0x04D0 && c <= 0x04EB) || + (c >= 0x04EE && c <= 0x04F5) || + (c >= 0x04F8 && c <= 0x04F9) || + (c >= 0x0531 && c <= 0x0556) || + (c == 0x0559) || + (c >= 0x0561 && c <= 0x0586) || + (c >= 0x05D0 && c <= 0x05EA) || + (c >= 0x05F0 && c <= 0x05F2) || + (c >= 0x0621 && c <= 0x063A) || + (c >= 0x0641 && c <= 0x064A) || + (c >= 0x0671 && c <= 0x06B7) || + (c >= 0x06BA && c <= 0x06BE) || + (c >= 0x06C0 && c <= 0x06CE) || + (c >= 0x06D0 && c <= 0x06D3) || + (c == 0x06D5) || + (c >= 0x06E5 && c <= 0x06E6)); + else if (c < 0x10A0) + return ((c >= 0x0905 && c <= 0x0939) || + (c == 0x093D) || + (c >= 0x0958 && c <= 0x0961) || + (c >= 0x0985 && c <= 0x098C) || + (c >= 0x098F && c <= 0x0990) || + (c >= 0x0993 && c <= 0x09A8) || + (c >= 0x09AA && c <= 0x09B0) || + (c == 0x09B2) || + (c >= 0x09B6 && c <= 0x09B9) || + (c >= 0x09DC && c <= 0x09DD) || + (c >= 0x09DF && c <= 0x09E1) || + (c >= 0x09F0 && c <= 0x09F1) || + (c >= 0x0A05 && c <= 0x0A0A) || + (c >= 0x0A0F && c <= 0x0A10) || + (c >= 0x0A13 && c <= 0x0A28) || + (c >= 0x0A2A && c <= 0x0A30) || + (c >= 0x0A32 && c <= 0x0A33) || + (c >= 0x0A35 && c <= 0x0A36) || + (c >= 0x0A38 && c <= 0x0A39) || + (c >= 0x0A59 && c <= 0x0A5C) || + (c == 0x0A5E) || + (c >= 0x0A72 && c <= 0x0A74) || + (c >= 0x0A85 && c <= 0x0A8B) || + (c == 0x0A8D) || + (c >= 0x0A8F && c <= 0x0A91) || + (c >= 0x0A93 && c <= 0x0AA8) || + (c >= 0x0AAA && c <= 0x0AB0) || + (c >= 0x0AB2 && c <= 0x0AB3) || + (c >= 0x0AB5 && c <= 0x0AB9) || + (c == 0x0ABD || c == 0x0AE0) || + (c >= 0x0B05 && c <= 0x0B0C) || + (c >= 0x0B0F && c <= 0x0B10) || + (c >= 0x0B13 && c <= 0x0B28) || + (c >= 0x0B2A && c <= 0x0B30) || + (c >= 0x0B32 && c <= 0x0B33) || + (c >= 0x0B36 && c <= 0x0B39) || + (c == 0x0B3D) || + (c >= 0x0B5C && c <= 0x0B5D) || + (c >= 0x0B5F && c <= 0x0B61) || + (c >= 0x0B85 && c <= 0x0B8A) || + (c >= 0x0B8E && c <= 0x0B90) || + (c >= 0x0B92 && c <= 0x0B95) || + (c >= 0x0B99 && c <= 0x0B9A) || + (c == 0x0B9C) || + (c >= 0x0B9E && c <= 0x0B9F) || + (c >= 0x0BA3 && c <= 0x0BA4) || + (c >= 0x0BA8 && c <= 0x0BAA) || + (c >= 0x0BAE && c <= 0x0BB5) || + (c >= 0x0BB7 && c <= 0x0BB9) || + (c >= 0x0C05 && c <= 0x0C0C) || + (c >= 0x0C0E && c <= 0x0C10) || + (c >= 0x0C12 && c <= 0x0C28) || + (c >= 0x0C2A && c <= 0x0C33) || + (c >= 0x0C35 && c <= 0x0C39) || + (c >= 0x0C60 && c <= 0x0C61) || + (c >= 0x0C85 && c <= 0x0C8C) || + (c >= 0x0C8E && c <= 0x0C90) || + (c >= 0x0C92 && c <= 0x0CA8) || + (c >= 0x0CAA && c <= 0x0CB3) || + (c >= 0x0CB5 && c <= 0x0CB9) || + (c == 0x0CDE) || + (c >= 0x0CE0 && c <= 0x0CE1) || + (c >= 0x0D05 && c <= 0x0D0C) || + (c >= 0x0D0E && c <= 0x0D10) || + (c >= 0x0D12 && c <= 0x0D28) || + (c >= 0x0D2A && c <= 0x0D39) || + (c >= 0x0D60 && c <= 0x0D61) || + (c >= 0x0E01 && c <= 0x0E2E) || + (c == 0x0E30) || + (c >= 0x0E32 && c <= 0x0E33) || + (c >= 0x0E40 && c <= 0x0E45) || + (c >= 0x0E81 && c <= 0x0E82) || + (c == 0x0E84) || + (c >= 0x0E87 && c <= 0x0E88) || + (c == 0x0E8A || c == 0x0E8D) || + (c >= 0x0E94 && c <= 0x0E97) || + (c >= 0x0E99 && c <= 0x0E9F) || + (c >= 0x0EA1 && c <= 0x0EA3) || + (c == 0x0EA5 || c == 0x0EA7) || + (c >= 0x0EAA && c <= 0x0EAB) || + (c >= 0x0EAD && c <= 0x0EAE) || + (c == 0x0EB0) || + (c >= 0x0EB2 && c <= 0x0EB3) || + (c == 0x0EBD) || + (c >= 0x0EC0 && c <= 0x0EC4) || + (c >= 0x0F40 && c <= 0x0F47) || + (c >= 0x0F49 && c <= 0x0F69)); + else + return ((c >= 0x10A0 && c <= 0x10C5) || + (c >= 0x10D0 && c <= 0x10F6) || + (c == 0x1100) || + (c >= 0x1102 && c <= 0x1103) || + (c >= 0x1105 && c <= 0x1107) || + (c == 0x1109) || + (c >= 0x110B && c <= 0x110C) || + (c >= 0x110E && c <= 0x1112) || + (c == 0x113C || c == 0x113E || c == 0x1140) || + (c == 0x114C || c == 0x114E || c == 0x1150) || + (c >= 0x1154 && c <= 0x1155) || + (c == 0x1159) || + (c >= 0x115F && c <= 0x1161) || + (c == 0x1163) || + (c == 0x1165) || + (c == 0x1167) || + (c == 0x1169) || + (c >= 0x116D && c <= 0x116E) || + (c >= 0x1172 && c <= 0x1173) || + (c == 0x1175) || + (c == 0x119E) || + (c == 0x11A8) || + (c == 0x11AB) || + (c >= 0x11AE && c <= 0x11AF) || + (c >= 0x11B7 && c <= 0x11B8) || + (c == 0x11BA) || + (c >= 0x11BC && c <= 0x11C2) || + (c == 0x11EB) || + (c == 0x11F0) || + (c == 0x11F9) || + (c >= 0x1E00 && c <= 0x1E9B) || + (c >= 0x1EA0 && c <= 0x1EF9) || + (c >= 0x1F00 && c <= 0x1F15) || + (c >= 0x1F18 && c <= 0x1F1D) || + (c >= 0x1F20 && c <= 0x1F45) || + (c >= 0x1F48 && c <= 0x1F4D) || + (c >= 0x1F50 && c <= 0x1F57) || + (c == 0x1F59) || + (c == 0x1F5B) || + (c == 0x1F5D) || + (c >= 0x1F5F && c <= 0x1F7D) || + (c >= 0x1F80 && c <= 0x1FB4) || + (c >= 0x1FB6 && c <= 0x1FBC) || + (c == 0x1FBE) || + (c >= 0x1FC2 && c <= 0x1FC4) || + (c >= 0x1FC6 && c <= 0x1FCC) || + (c >= 0x1FD0 && c <= 0x1FD3) || + (c >= 0x1FD6 && c <= 0x1FDB) || + (c >= 0x1FE0 && c <= 0x1FEC) || + (c >= 0x1FF2 && c <= 0x1FF4) || + (c >= 0x1FF6 && c <= 0x1FFC) || + (c == 0x2126) || + (c >= 0x212A && c <= 0x212B) || + (c == 0x212E) || + (c >= 0x2180 && c <= 0x2182) || + (c >= 0x3041 && c <= 0x3094) || + (c >= 0x30A1 && c <= 0x30FA) || + (c >= 0x3105 && c <= 0x312C) || + (c >= 0xAC00 && c <= 0xD7A3)); +}; + +int +ACEXML_ParserInt::isIdeographic_i (const ACEXML_Char c) +{ + return ((c >= 0x4E00 && c <= 0x9FA5) || + (c == 3007) || + (c >= 0x3021 && c <= 0x3029)); +} + +int +ACEXML_ParserInt::isCombiningchar_i (const ACEXML_Char c) +{ + if (c < 0x0901) + return ((c >= 0x0300 && c <= 0x0345) || + (c >= 0x0360 && c <= 0x0361) || + (c >= 0x0483 && c <= 0x0486) || + (c >= 0x0591 && c <= 0x05A1) || + (c >= 0x05A3 && c <= 0x05B9) || + (c >= 0x05BB && c <= 0x05BD) || + (c == 0x05BF) || + (c >= 0x05C1 && c <= 0x05C2) || + (c == 0x05C4) || + (c >= 0x064B && c <= 0x0652) || + (c == 0x0670) || + (c >= 0x06D6 && c <= 0x06DC) || + (c >= 0x06DD && c <= 0x06DF) || + (c >= 0x06E0 && c <= 0x06E4) || + (c >= 0x06E7 && c <= 0x06E8) || + (c >= 0x06EA && c <= 0x06ED)); + else + return ((c >= 0x0901 && c <= 0x0903) || + (c == 0x093C) || + (c >= 0x093E && c <= 0x094C) || + (c == 0x094D) || + (c >= 0x0951 && c <= 0x0954) || + (c >= 0x0962 && c <= 0x0963) || + (c >= 0x0981 && c <= 0x0983) || + (c == 0x09BC) || + (c == 0x09BE) || + (c == 0x09BF) || + (c >= 0x09C0 && c <= 0x09C4) || + (c >= 0x09C7 && c <= 0x09C8) || + (c >= 0x09CB && c <= 0x09CD) || + (c == 0x09D7) || + (c >= 0x09E2 && c <= 0x09E3) || + (c == 0x0A02) || + (c == 0x0A3C) || + (c == 0x0A3E) || + (c == 0x0A3F) || + (c >= 0x0A40 && c <= 0x0A42) || + (c >= 0x0A47 && c <= 0x0A48) || + (c >= 0x0A4B && c <= 0x0A4D) || + (c >= 0x0A70 && c <= 0x0A71) || + (c >= 0x0A81 && c <= 0x0A83) || + (c == 0x0ABC) || + (c >= 0x0ABE && c <= 0x0AC5) || + (c >= 0x0AC7 && c <= 0x0AC9) || + (c >= 0x0ACB && c <= 0x0ACD) || + (c >= 0x0B01 && c <= 0x0B03) || + (c == 0x0B3C) || + (c >= 0x0B3E && c <= 0x0B43) || + (c >= 0x0B47 && c <= 0x0B48) || + (c >= 0x0B4B && c <= 0x0B4D) || + (c >= 0x0B56 && c <= 0x0B57) || + (c >= 0x0B82 && c <= 0x0B83) || + (c >= 0x0BBE && c <= 0x0BC2) || + (c >= 0x0BC6 && c <= 0x0BC8) || + (c >= 0x0BCA && c <= 0x0BCD) || + (c == 0x0BD7) || + (c >= 0x0C01 && c <= 0x0C03) || + (c >= 0x0C3E && c <= 0x0C44) || + (c >= 0x0C46 && c <= 0x0C48) || + (c >= 0x0C4A && c <= 0x0C4D) || + (c >= 0x0C55 && c <= 0x0C56) || + (c >= 0x0C82 && c <= 0x0C83) || + (c >= 0x0CBE && c <= 0x0CC4) || + (c >= 0x0CC6 && c <= 0x0CC8) || + (c >= 0x0CCA && c <= 0x0CCD) || + (c >= 0x0CD5 && c <= 0x0CD6) || + (c >= 0x0D02 && c <= 0x0D03) || + (c >= 0x0D3E && c <= 0x0D43) || + (c >= 0x0D46 && c <= 0x0D48) || + (c >= 0x0D4A && c <= 0x0D4D) || + (c == 0x0D57) || + (c == 0x0E31) || + (c >= 0x0E34 && c <= 0x0E3A) || + (c >= 0x0E47 && c <= 0x0E4E) || + (c == 0x0EB1) || + (c >= 0x0EB4 && c <= 0x0EB9) || + (c >= 0x0EBB && c <= 0x0EBC) || + (c >= 0x0EC8 && c <= 0x0ECD) || + (c >= 0x0F18 && c <= 0x0F19) || + (c == 0x0F35) || + (c == 0x0F37) || + (c == 0x0F39) || + (c == 0x0F3E) || + (c == 0x0F3F) || + (c >= 0x0F71 && c <= 0x0F84) || + (c >= 0x0F86 && c <= 0x0F8B) || + (c >= 0x0F90 && c <= 0x0F95) || + (c == 0x0F97) || + (c >= 0x0F99 && c <= 0x0FAD) || + (c >= 0x0FB1 && c <= 0x0FB7) || + (c == 0x0FB9) || + (c >= 0x20D0 && c <= 0x20DC) || + (c == 0x20E1) || + (c >= 0x302A && c <= 0x302F) || + (c == 0x3099) || + (c == 0x309A)); +} + +int +ACEXML_ParserInt::isDigit_i (const ACEXML_Char c) +{ + if (c < 0x0040) + return (c >= 0x0030 && c <= 0x0039); + else + return ((c >= 0x0660 && c <= 0x0669) || + (c >= 0x06F0 && c <= 0x06F9) || + (c >= 0x0966 && c <= 0x096F) || + (c >= 0x09E6 && c <= 0x09EF) || + (c >= 0x0A66 && c <= 0x0A6F) || + (c >= 0x0AE6 && c <= 0x0AEF) || + (c >= 0x0B66 && c <= 0x0B6F) || + (c >= 0x0BE7 && c <= 0x0BEF) || + (c >= 0x0C66 && c <= 0x0C6F) || + (c >= 0x0CE6 && c <= 0x0CEF) || + (c >= 0x0D66 && c <= 0x0D6F) || + (c >= 0x0E50 && c <= 0x0E59) || + (c >= 0x0ED0 && c <= 0x0ED9) || + (c >= 0x0F20 && c <= 0x0F29)); +} + +int +ACEXML_ParserInt::isExtender_i (const ACEXML_Char c) +{ + // The compiler should generate a jump table and index into it directly. + switch (c) + { + case 0x00B7: case 0x02D0: case 0x02D1: case 0x0387: case 0x0640: + case 0x0E46: case 0x0EC6: case 0x3005: case 0x3031: case 0x3032: + case 0x3033: case 0x3034: case 0x3035: case 0x309D: case 0x309E: + case 0x30FC: case 0x30FD: case 0x30FE: + return 1; + default: + return 0; + } +} + +#endif /* ACE_USES_WCHAR */ diff --git a/ACE/ACEXML/parser/parser/ParserInternals.h b/ACE/ACEXML/parser/parser/ParserInternals.h new file mode 100644 index 00000000000..f1c89d8d25e --- /dev/null +++ b/ACE/ACEXML/parser/parser/ParserInternals.h @@ -0,0 +1,102 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file ParserInternals.h + * + * $Id$ + * + * @author Krishnakumar B + */ +//============================================================================= + +#ifndef _ACEXML_PARSER_INTERNALS_H_ +#define _ACEXML_PARSER_INTERNALS_H_ + +#include /**/ "ace/pre.h" +#include "ACEXML/parser/parser/Parser_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ACEXML/common/XML_Types.h" + +/** + * @class ACEXML_ParserInt ParserInternals.h "ACEXML/parser/parser/ParserInternals.h" + * + * @brief A class to hide some of the internal implementation details of + * the parser. + * + */ +class ACEXML_PARSER_Export ACEXML_ParserInt +{ + +public: +#if defined (ACE_USES_WCHAR) + + /** + * Check if a character @a c is a BaseChar. This method checks for the + * complete set of characters allowed when WCHAR support is enabled. + * + * @retval 1 if @a c is a valid XML Character, 0 otherwise. + */ + static int isBasechar_i (const ACEXML_Char c); + + /** + * Check if a character @a c is a Ideographic. This method checks for the + * complete set of characters allowed when WCHAR support is enabled. + * + * @retval 1 if @a c is a valid XML Character, 0 otherwise. + */ + static int isIdeographic_i (const ACEXML_Char c); + + /** + * Check if a character @a c is a CombiningChar. This method checks for the + * complete set of characters allowed when WCHAR support is enabled. + * + * @retval 1 if @a c is a valid XML Character, 0 otherwise. + */ + static int isCombiningchar_i (const ACEXML_Char c); + + /** + * Check if a character @a c is a Digit. This method checks for the + * complete set of characters allowed when WCHAR support is enabled. + * + * @retval 1 if @a c is a valid XML Character, 0 otherwise. + */ + static int isDigit_i (const ACEXML_Char c); + + /** + * Check if a character @a c is an Extender. This method checks for the + * complete set of characters allowed when WCHAR support is enabled. + * + * @retval 1 if @a c is a valid XML Character, 0 otherwise. + */ + static int isExtender_i (const ACEXML_Char c); + +#endif /* ACE_USES_WCHAR */ + + static const ACEXML_Char base_char_table_[256]; + + static const ACEXML_Char* predef_ent_[]; + + static const ACEXML_Char* predef_val_[]; + + // Enum describing the position in a document when a reference occurs. + enum ReferenceState { + IN_CONTENT, + IN_ATT_VALUE, + AS_ATT_VALUE, + IN_ENTITY_VALUE, + IN_INT_DTD, + IN_EXT_DTD, + IN_NOTATION, + INVALID = -1 + }; + +}; + +#include /**/ "ace/post.h" + +#endif /* _ACEXML_PARSER_INTERNALS_H_ */ diff --git a/ACE/ACEXML/parser/parser/Parser_export.h b/ACE/ACEXML/parser/parser/Parser_export.h new file mode 100644 index 00000000000..71630ccd962 --- /dev/null +++ b/ACE/ACEXML/parser/parser/Parser_export.h @@ -0,0 +1,47 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Parser_export.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +// Definition for Win32 Export directives. +// This file is generated automatically by generate_export_file.pl +// ------------------------------ +#ifndef ACEXML_PARSER_EXPORT_H +#define ACEXML_PARSER_EXPORT_H + +#include "ace/config-all.h" + +#if defined (ACE_AS_STATIC_LIBS) && !defined (ACEXML_PARSER_HAS_DLL) +# define ACEXML_PARSER_HAS_DLL 0 +#endif /* ACE_AS_STATIC_LIBS && ACEXML_PARSER_HAS_DLL */ + +#if !defined (ACEXML_PARSER_HAS_DLL) +# define ACEXML_PARSER_HAS_DLL 1 +#endif /* ! ACEXML_PARSER_HAS_DLL */ + +#if defined (ACEXML_PARSER_HAS_DLL) && (ACEXML_PARSER_HAS_DLL == 1) +# if defined (ACEXML_PARSER_BUILD_DLL) +# define ACEXML_PARSER_Export ACE_Proper_Export_Flag +# define ACEXML_PARSER_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define ACEXML_PARSER_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else /* ACEXML_PARSER_BUILD_DLL */ +# define ACEXML_PARSER_Export ACE_Proper_Import_Flag +# define ACEXML_PARSER_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define ACEXML_PARSER_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* ACEXML_PARSER_BUILD_DLL */ +#else /* ACEXML_PARSER_HAS_DLL == 1 */ +# define ACEXML_PARSER_Export +# define ACEXML_PARSER_SINGLETON_DECLARATION(T) +# define ACEXML_PARSER_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* ACEXML_PARSER_HAS_DLL == 1 */ + +#endif /* ACEXML_PARSER_EXPORT_H */ + +// End of auto generated file. diff --git a/ACE/ACEXML/parser/parser/parser.mpc b/ACE/ACEXML/parser/parser/parser.mpc new file mode 100644 index 00000000000..580b85495a4 --- /dev/null +++ b/ACE/ACEXML/parser/parser/parser.mpc @@ -0,0 +1,14 @@ +// -*- MPC -*- +// $Id$ + +project(ACEXML_Parser): acelib, ace_output, install { + avoids += ace_for_tao + sharedname = ACEXML_Parser + after += ACEXML + libs += ACEXML + dynamicflags += ACEXML_PARSER_BUILD_DLL + + Pkgconfig_Files { + ACEXML_Parser.pc.in + } +} diff --git a/ACE/ACEXML/tests/ContentHandler_Test.cpp b/ACE/ACEXML/tests/ContentHandler_Test.cpp new file mode 100644 index 00000000000..7c7e2c5594b --- /dev/null +++ b/ACE/ACEXML/tests/ContentHandler_Test.cpp @@ -0,0 +1,101 @@ +//============================================================================= +/** + * @file ContentHandler_Test.cpp + * + * $Id$ + * + * @author Steve Huston + */ +//============================================================================= + +#include "ACEXML/common/DefaultHandler.h" +#include "ACEXML/common/InputSource.h" +#include "ACEXML/common/StrCharStream.h" +#include "ACEXML/parser/parser/Parser.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_main.h" + +class Basic_Content_Tester : public ACEXML_DefaultHandler +{ +public: + /** + * Receive notification of character data. + */ + virtual void characters (const ACEXML_Char *ch, + size_t start, + size_t length ACEXML_ENV_ARG_DECL); + + const ACEXML_Char *get_test_string (void) + { return Basic_Content_Tester::test_string_; } + +private: + static const ACEXML_Char *test_string_; +}; + +const ACEXML_Char * Basic_Content_Tester::test_string_ = + ACE_TEXT ("") + ACE_TEXT ("Example\n") + ACE_TEXT ("d'internationalisation"); + +void +Basic_Content_Tester::characters (const ACEXML_Char *ch, + size_t start, + size_t length ACEXML_ENV_ARG_DECL) +{ + static int already_called = 0; + static const ACEXML_Char *expect = + ACE_TEXT ("Example\nd'internationalisation"); + + if (already_called) + { + ACEXML_THROW (ACEXML_SAXException + (ACE_TEXT ("characters() called too much\n"))); + } + already_called = 1; + + size_t expected_len = ACE_OS::strlen (expect); + if (length != expected_len) + { + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("characters() expected len %u (%*s); ") + ACE_TEXT ("got %u (%*s)\n"), + expected_len, expected_len, ch + start, + length, length, ch + start)); + ACEXML_THROW (ACEXML_SAXException (ACE_TEXT ("Functionality failure"))); + } + return; +} + +int +ACE_TMAIN (int, ACE_TCHAR *[]) +{ + int status = 0; + Basic_Content_Tester tester; + ACEXML_StrCharStream *test_stream = 0; + ACE_NEW_RETURN (test_stream, ACEXML_StrCharStream, -1); + if (test_stream->open (tester.get_test_string (), + ACE_TEXT ("test_stream")) < 0) + { + ACE_ERROR ((LM_ERROR, ACE_TEXT ("Unable to create input stream\n"))); + return -1; + } + ACEXML_InputSource input (test_stream); + ACEXML_Parser parser; + parser.setContentHandler (&tester); + ACEXML_TRY_NEW_ENV + { + parser.setFeature (ACE_TEXT ("http://xml.org/sax/features/validation"), + 0 + ACEXML_ENV_ARG_PARAMETER); + ACEXML_TRY_CHECK; + parser.parse (&input ACEXML_ENV_ARG_PARAMETER); + ACEXML_TRY_CHECK; + } + ACEXML_CATCH (ACEXML_SAXException, ex) + { + ex.print(); + status = 1; + } + ACEXML_ENDTRY; + return status; +} diff --git a/ACE/ACEXML/tests/HttpCharStream_Test.cpp b/ACE/ACEXML/tests/HttpCharStream_Test.cpp new file mode 100644 index 00000000000..ba969753a3d --- /dev/null +++ b/ACE/ACEXML/tests/HttpCharStream_Test.cpp @@ -0,0 +1,40 @@ +// $Id$ + +#include "ACEXML/common/HttpCharStream.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_main.h" + +int ACE_TMAIN (int, ACE_TCHAR *[]) +{ + const ACEXML_Char* test = ACE_TEXT("http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"); + + const ACEXML_Char* simple = ACE_TEXT("http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"); + + ACEXML_HttpCharStream first; + ACEXML_HttpCharStream second; + ACEXML_Char ch; + + if (first.open (test) != -1) + { + while (first.get (ch) != -1) + ACE_OS::printf ("%c", ch); + } + else + { + first.close(); + ACE_ERROR ((LM_ERROR, "Error in opening stream : %m\n")); + } + if (second.open (simple) != -1) + { + while (second.get (ch) != -1) + ACE_OS::printf ("%c", ch); + } + else + { + second.close(); + ACE_ERROR ((LM_ERROR, "Error in opening stream : %m\n")); + } + first.close(); + second.close(); + return 0; +} diff --git a/ACE/ACEXML/tests/Makefile.am b/ACE/ACEXML/tests/Makefile.am new file mode 100644 index 00000000000..e8f43fdc317 --- /dev/null +++ b/ACE/ACEXML/tests/Makefile.am @@ -0,0 +1,222 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + +SUBDIRS = \ + . \ + util + +noinst_PROGRAMS = + +## Makefile.ContentHandler_Test.am + +if BUILD_ACEXML +if !BUILD_ACE_FOR_TAO + +noinst_PROGRAMS += ContentHandler_Test + +ContentHandler_Test_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ACEXML/common + +if BUILD_ZLIB +if BUILD_ZZIP +ContentHandler_Test_CPPFLAGS += \ + $(ACE_ZZIP_CPPFLAGS) \ + $(ACE_ZLIB_CPPFLAGS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +ContentHandler_Test_SOURCES = \ + ContentHandler_Test.cpp + +ContentHandler_Test_LDFLAGS = + +if BUILD_ZLIB +if BUILD_ZZIP +ContentHandler_Test_LDFLAGS += \ + $(ACE_ZZIP_LDFLAGS) \ + $(ACE_ZLIB_LDFLAGS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +ContentHandler_Test_LDADD = \ + $(ACE_BUILDDIR)/ACEXML/parser/parser/libACEXML_Parser.la \ + $(ACE_BUILDDIR)/ACEXML/common/libACEXML.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +if BUILD_ZLIB +if BUILD_ZZIP +ContentHandler_Test_LDADD += \ + $(ACE_ZZIP_LIBS) \ + $(ACE_ZLIB_LIBS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +endif !BUILD_ACE_FOR_TAO +endif BUILD_ACEXML + +## Makefile.HttpCharStream_Test.am + +if BUILD_ACEXML +if !BUILD_ACE_FOR_TAO + +noinst_PROGRAMS += HttpCharStream_Test + +HttpCharStream_Test_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ACEXML/common + +if BUILD_ZLIB +if BUILD_ZZIP +HttpCharStream_Test_CPPFLAGS += \ + $(ACE_ZZIP_CPPFLAGS) \ + $(ACE_ZLIB_CPPFLAGS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +HttpCharStream_Test_SOURCES = \ + HttpCharStream_Test.cpp + +HttpCharStream_Test_LDFLAGS = + +if BUILD_ZLIB +if BUILD_ZZIP +HttpCharStream_Test_LDFLAGS += \ + $(ACE_ZZIP_LDFLAGS) \ + $(ACE_ZLIB_LDFLAGS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +HttpCharStream_Test_LDADD = \ + $(ACE_BUILDDIR)/ACEXML/parser/parser/libACEXML_Parser.la \ + $(ACE_BUILDDIR)/ACEXML/common/libACEXML.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +if BUILD_ZLIB +if BUILD_ZZIP +HttpCharStream_Test_LDADD += \ + $(ACE_ZZIP_LIBS) \ + $(ACE_ZLIB_LIBS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +endif !BUILD_ACE_FOR_TAO +endif BUILD_ACEXML + +## Makefile.NamespaceSupport_Test.am + +if BUILD_ACEXML +if !BUILD_ACE_FOR_TAO + +noinst_PROGRAMS += NamespaceSupport_Test + +NamespaceSupport_Test_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ACEXML/common + +if BUILD_ZLIB +if BUILD_ZZIP +NamespaceSupport_Test_CPPFLAGS += \ + $(ACE_ZZIP_CPPFLAGS) \ + $(ACE_ZLIB_CPPFLAGS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +NamespaceSupport_Test_SOURCES = \ + NamespaceSupport_Test.cpp + +NamespaceSupport_Test_LDFLAGS = + +if BUILD_ZLIB +if BUILD_ZZIP +NamespaceSupport_Test_LDFLAGS += \ + $(ACE_ZZIP_LDFLAGS) \ + $(ACE_ZLIB_LDFLAGS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +NamespaceSupport_Test_LDADD = \ + $(ACE_BUILDDIR)/ACEXML/parser/parser/libACEXML_Parser.la \ + $(ACE_BUILDDIR)/ACEXML/common/libACEXML.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +if BUILD_ZLIB +if BUILD_ZZIP +NamespaceSupport_Test_LDADD += \ + $(ACE_ZZIP_LIBS) \ + $(ACE_ZLIB_LIBS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +endif !BUILD_ACE_FOR_TAO +endif BUILD_ACEXML + +## Makefile.Transcoder_Test.am + +if BUILD_ACEXML +if !BUILD_ACE_FOR_TAO + +noinst_PROGRAMS += Transcoder_Test + +Transcoder_Test_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ACEXML/common + +if BUILD_ZLIB +if BUILD_ZZIP +Transcoder_Test_CPPFLAGS += \ + $(ACE_ZZIP_CPPFLAGS) \ + $(ACE_ZLIB_CPPFLAGS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +Transcoder_Test_SOURCES = \ + Transcoder_Test.cpp + +Transcoder_Test_LDFLAGS = + +if BUILD_ZLIB +if BUILD_ZZIP +Transcoder_Test_LDFLAGS += \ + $(ACE_ZZIP_LDFLAGS) \ + $(ACE_ZLIB_LDFLAGS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +Transcoder_Test_LDADD = \ + $(ACE_BUILDDIR)/ACEXML/parser/parser/libACEXML_Parser.la \ + $(ACE_BUILDDIR)/ACEXML/common/libACEXML.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +if BUILD_ZLIB +if BUILD_ZZIP +Transcoder_Test_LDADD += \ + $(ACE_ZZIP_LIBS) \ + $(ACE_ZLIB_LIBS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +endif !BUILD_ACE_FOR_TAO +endif BUILD_ACEXML + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/ACEXML/tests/NamespaceSupport_Test.cpp b/ACE/ACEXML/tests/NamespaceSupport_Test.cpp new file mode 100644 index 00000000000..2632c6dc571 --- /dev/null +++ b/ACE/ACEXML/tests/NamespaceSupport_Test.cpp @@ -0,0 +1,150 @@ +// $Id$ + +#include "ACEXML/common/NamespaceSupport.h" +#include "ace/OS_main.h" + +int ACE_TMAIN (int, ACE_TCHAR *[]) +{ + ACEXML_NamespaceSupport xmlns; + if (xmlns.init() == -1) + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Error in initializing namespace support."))); + return 1; + } + xmlns.pushContext(); + xmlns.declarePrefix(ACE_TEXT (""), + ACE_TEXT ("http://www.w3.org/1999/xhtml")); + xmlns.declarePrefix(ACE_TEXT ("dc"), + ACE_TEXT ("http://www.purl.org/dc#")); + xmlns.declarePrefix(ACE_TEXT ("xc"), + ACE_TEXT ("http://www.purl.org/dc#")); + + const ACEXML_Char *lName, *uri; + const ACEXML_Char *n1 = ACE_TEXT ("p"); + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("*** Checking processName:\n"))); + if (xmlns.processName (n1, uri, lName, 0) != 0) + ACE_DEBUG ((LM_ERROR, + ACE_TEXT ("Fail to resolve namespace name %s\n"), + n1)); + else + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Namespace URI: %s\nLocal name: %s\nRaw name: %s\n"), + uri, lName, n1)); + + const ACEXML_Char *n2 = ACE_TEXT ("dc:title"); + if (xmlns.processName(n2, uri, lName, 0) != 0) + ACE_DEBUG ((LM_ERROR, + ACE_TEXT ("Fail to resolve namespace name %S\n"), + n2)); + else + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Namespace URI: %s\nLocal name: %s\nRaw name: %s\n"), + uri, lName, n2)); + + const ACEXML_Char *n3 = ACE_TEXT ("xml:title"); + if (xmlns.processName(n3, uri, lName, 0) != 0) + ACE_DEBUG ((LM_ERROR, + ACE_TEXT ("Fail to resolve namespace name %S\n"), + n3)); + else + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Namespace URI: %s\nLocal name: %s\nRaw name: %s\n"), + uri, lName, n3)); + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("\n*** Checking getDeclaredPrefixes\n"))); + + ACEXML_STR_LIST prefixes; + if (xmlns.getDeclaredPrefixes (prefixes) != 0) + ACE_DEBUG ((LM_ERROR, + ACE_TEXT ("Fail to get a list of declared prefixes\n"))); + else + { + ACEXML_STR_LIST::ITERATOR iter = prefixes.begin (); + const ACEXML_Char **prefix = 0; + + for (; iter.next (prefix);iter.advance ()) + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("prefix: \"%s\"\n"), *prefix)); + } + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n*** Checking getPrefix\n"))); + const ACEXML_Char *prefix = 0; + + if ((prefix = xmlns.getPrefix (ACE_TEXT ("http://www.purl.org/dc#"))) == 0) + ACE_DEBUG ((LM_ERROR, + ACE_TEXT ("Fail to get prefix of http://www.purl.org/dc#\n"))); + else + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Prefix of http://www.purl.org/dc# is %s\n"), + prefix)); + + if ((prefix = xmlns.getPrefix (ACE_TEXT ("http://www.w3.org/1999/xhtml"))) == 0) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Fail to get prefix of http://www.w3.org/1999/xhtml which is okay\n"))); + else + ACE_DEBUG ((LM_ERROR, + ACE_TEXT ("ERROR: Prefix of http://www.w3.org/1999/xhtml is %s\n"), + prefix)); + + if ((prefix = xmlns.getPrefix (ACE_TEXT ("http://www.w3.org/XML/1998/namespace"))) == 0) + ACE_DEBUG ((LM_ERROR, + ACE_TEXT ("Fail to get prefix of http://www.w3.org/XML/1998/namespace\n"))); + else + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Prefix of http://www.w3.org/XML/1998/namespace is %s\n"), + prefix)); + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n*** Checking getPrefixes with known URI\n"))); + prefixes.reset (); + + if (xmlns.getPrefixes (ACE_TEXT ("http://www.purl.org/dc#"), prefixes) != 0) + ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Fail to getPrefixes based on known URI\n"))); + else + { + ACEXML_STR_LIST::ITERATOR iter = prefixes.begin (); + const ACEXML_Char **prefix = 0; + + for (; iter.next (prefix);iter.advance ()) + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("prefix: \"%s\"\n"), *prefix)); + } + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n*** Checking getPrefixes\n"))); + prefixes.reset (); + + if (xmlns.getPrefixes (prefixes) != 0) + ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Fail to getPrefixes\n"))); + else + { + ACEXML_STR_LIST::ITERATOR iter = prefixes.begin (); + const ACEXML_Char **prefix = 0; + + for (; iter.next (prefix);iter.advance ()) + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("prefix: \"%s\"\n"), *prefix)); + } + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n*** Checking getURI\n"))); + const ACEXML_Char *URI = 0; + + if ((URI = xmlns.getURI (ACE_TEXT ("dc"))) == 0) + ACE_DEBUG((LM_ERROR, ACE_TEXT ("Fail to get URI for \"dc\"\n"))); + else + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("URI for \"dc\" is %s\n"), URI)); + if ((URI = xmlns.getURI (ACE_TEXT ("xc"))) == 0) + ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Fail to get URI for \"xc\"\n"))); + else + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("URI for \"xc\" is %s\n"), URI)); + if ((URI = xmlns.getURI (ACE_TEXT ("xml"))) == 0) + ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Fail to get URI for \"xml\"\n"))); + else + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("URI for \"xml\" is %s\n"), URI)); + if ((URI = xmlns.getURI (ACE_TEXT (""))) == 0) + ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Fail to get default namespace URI\n"))); + else + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("URI for default namespace is %s\n"), URI)); + + xmlns.popContext(); + + return 0; +} diff --git a/ACE/ACEXML/tests/Transcoder_Test.cpp b/ACE/ACEXML/tests/Transcoder_Test.cpp new file mode 100644 index 00000000000..f5dc289e5e0 --- /dev/null +++ b/ACE/ACEXML/tests/Transcoder_Test.cpp @@ -0,0 +1,71 @@ +// -*- C++ -*- $Id$ + +#include "ACEXML/common/Transcode.h" +#include "ace/Log_Msg.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_main.h" + +void dump_utf16 (const ACEXML_UTF16 *data, + size_t len) +{ + size_t ptr = 0; + + while (1) + { + ACE_DEBUG ((LM_DEBUG, "%04x", data[ptr])); + + if (++ptr >= len) + break; + + if (ptr % 4 == 0) + ACE_DEBUG ((LM_DEBUG, "\n")); + else + ACE_DEBUG ((LM_DEBUG, " ")); + } + ACE_DEBUG ((LM_DEBUG, "\n")); + return; +} + +int +ACE_TMAIN (int, ACE_TCHAR*[]) +{ + ACEXML_UTF16 org [18]; +// = { 1, 2, 4, 8, 0x10, 0x20, 0x40, +// 0x80, +// 0x100, 0x200, 0x400, +// 0x800, 0x801, 0x802, 0x804, 0x808, 0x810, 0x820, +// 0x840, 0x880, 0x900, 0xa00, 0xc00, +// 0x1000, 0x2000, 0x4000, 0x8000, 0 } + ACEXML_UCS4 temp = 1; + + ACE_OS::memset (org, 0, sizeof org); + size_t x; + + for (x = 0; temp < 0x10000; x++, temp <<= 1) + { + org[x] = static_cast (temp); + } + + ACE_DEBUG ((LM_DEBUG, "Original UTF16 string:\n")); + dump_utf16 (org, x); + ACE_DEBUG ((LM_DEBUG, "\n\n")); + + ACEXML_UTF8 decoded [MAXPATHLEN]; + ACE_OS::memset (decoded, 0, sizeof decoded); + + ACEXML_Transcoder::utf16s2utf8s (org, decoded, MAXPATHLEN); + + ACE_DEBUG ((LM_DEBUG, "Transcoded UTF8 string:\n")); + ACE_HEX_DUMP ((LM_DEBUG, decoded, ACE_OS::strlen (decoded) + 1)); + ACE_DEBUG ((LM_DEBUG, "\n\n")); + + ACEXML_UTF16 after [18]; + ACE_OS::memset (after, 0, sizeof after); + ACEXML_Transcoder::utf8s2utf16s (decoded, after, 18); + + ACE_DEBUG ((LM_DEBUG, "Restored UTF16 string:\n")); + dump_utf16 (after, x); + ACE_DEBUG ((LM_DEBUG, "\n\n")); + + return 0; +} diff --git a/ACE/ACEXML/tests/tests.mpc b/ACE/ACEXML/tests/tests.mpc new file mode 100644 index 00000000000..e0a2365e689 --- /dev/null +++ b/ACE/ACEXML/tests/tests.mpc @@ -0,0 +1,30 @@ +// -*- MPC -*- +// $Id$ + +project(Transcoder_Test): aceexe, acexml { + exename = Transcoder_Test + Source_Files { + Transcoder_Test.cpp + } +} + +project(NamespaceSupport_Test): aceexe, acexml { + exename = NamespaceSupport_Test + Source_Files { + NamespaceSupport_Test.cpp + } +} + +project(HttpCharStream_Test): aceexe, acexml { + exename = HttpCharStream_Test + Source_Files { + HttpCharStream_Test.cpp + } +} + +project(ContentHandler_Test): aceexe, acexml { + exename = ContentHandler_Test + Source_Files { + ContentHandler_Test.cpp + } +} diff --git a/ACE/ACEXML/tests/util/Makefile.am b/ACE/ACEXML/tests/util/Makefile.am new file mode 100644 index 00000000000..b2d79bef425 --- /dev/null +++ b/ACE/ACEXML/tests/util/Makefile.am @@ -0,0 +1,70 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + + +## Makefile.util.am + +if BUILD_ACEXML +if !BUILD_ACE_FOR_TAO + +noinst_PROGRAMS = test + +test_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ACEXML/common + +if BUILD_ZLIB +if BUILD_ZZIP +test_CPPFLAGS += \ + $(ACE_ZZIP_CPPFLAGS) \ + $(ACE_ZLIB_CPPFLAGS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +test_SOURCES = \ + test.cpp + +test_LDFLAGS = + +if BUILD_ZLIB +if BUILD_ZZIP +test_LDFLAGS += \ + $(ACE_ZZIP_LDFLAGS) \ + $(ACE_ZLIB_LDFLAGS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +test_LDADD = \ + $(ACE_BUILDDIR)/ACEXML/parser/parser/libACEXML_Parser.la \ + $(ACE_BUILDDIR)/ACEXML/common/libACEXML.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +if BUILD_ZLIB +if BUILD_ZZIP +test_LDADD += \ + $(ACE_ZZIP_LIBS) \ + $(ACE_ZLIB_LIBS) +endif BUILD_ZZIP +endif BUILD_ZLIB + +endif !BUILD_ACE_FOR_TAO +endif BUILD_ACEXML + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/ACEXML/tests/util/test.cpp b/ACE/ACEXML/tests/util/test.cpp new file mode 100644 index 00000000000..40f0eb41001 --- /dev/null +++ b/ACE/ACEXML/tests/util/test.cpp @@ -0,0 +1,111 @@ +// $Id$ +// A simple test for performance of the ACEXML_escape_string() function + +#include "ACEXML/common/XML_Util.h" + +#include "ace/OS_main.h" +#include "ace/Time_Value.h" +#include "ace/OS_NS_sys_time.h" +#include "ace/Log_Msg.h" + +const int MAX_ITERATIONS = 100 * 1000; +const int NUM_TEST_STRS = 6; + +static bool is_escaped(const ACEXML_String& s) +{ + if (s[0] != ACE_TEXT('&')) + return false; + if (s[s.length() - 1] != ACE_TEXT(';')) + return false; + return true; +} + +static int run_tests(ACEXML_String test_strings[NUM_TEST_STRS], int iterations) +{ + // Test 1 - Escape the strings using a new temporary string each iteration. + ACE_Time_Value start = ACE_OS::gettimeofday(); + int i = 0; + for (i = 0; i < iterations; ++i) + { + ACEXML_String tmp = ACEXML_escape_string(test_strings[i % NUM_TEST_STRS]); + if (! is_escaped(tmp)) + { + ACE_ERROR((LM_ERROR, "Error: Failed to escape string\n")); + return 1; + } + } + ACE_DEBUG((LM_DEBUG, "Test1 took %dms\n", (ACE_OS::gettimeofday() - start).msec())); + + // Test 2 - Escape the strings using a shared temporary string. This shouldn't + // be any faster than Test 1 as long as the compiler has return value optimization. + ACEXML_String tmp; + start = ACE_OS::gettimeofday(); + for (i = 0; i < iterations; ++i) + { + tmp = ACEXML_escape_string(test_strings[i % NUM_TEST_STRS]); + if (! is_escaped(tmp)) + { + ACE_ERROR((LM_ERROR, "Error: Failed to escape string\n")); + return 1; + } + } + ACE_DEBUG((LM_DEBUG, "Test2 took %dms\n", (ACE_OS::gettimeofday() - start).msec())); + + // Test 3 - Escape the strings using a shared temporary string. This time, we use + // the alternate form of ACEXML_escape_string() so that our temporary buffer is reused. + tmp.clear(1); + start = ACE_OS::gettimeofday(); + for (i = 0; i < iterations; ++i) + { + ACEXML_escape_string(test_strings[i % NUM_TEST_STRS], tmp); + if (! is_escaped(tmp)) + { + ACE_ERROR((LM_ERROR, "Error: Failed to escape string\n")); + return 1; + } + } + ACE_DEBUG((LM_DEBUG, "Test3 took %dms\n", (ACE_OS::gettimeofday() - start).msec())); + + // Test 4 - Same as Test 3, except that the tmp buffer shouldn't have to resize. + start = ACE_OS::gettimeofday(); + for (i = 0; i < iterations; ++i) + { + ACEXML_escape_string(test_strings[i % NUM_TEST_STRS], tmp); + if (! is_escaped(tmp)) + { + ACE_ERROR((LM_ERROR, "Error: Failed to escape string\n")); + return 1; + } + } + ACE_DEBUG((LM_DEBUG, "Test4 took %dms\n", (ACE_OS::gettimeofday() - start).msec())); + return 0; +} + +int ACE_TMAIN (int, ACE_TCHAR *[]) +{ + ACEXML_String test_strings[NUM_TEST_STRS] = { + ACE_TEXT("\"xxxxx\"xxxxxxxx xx\"xxxxxx xxxxxx\"xxxxxxxxxx xxxxxxxx\"xxxxxx\""), + ACE_TEXT("'xxxxx\'xxxxxxxx' xxxxxxxx xx'xxxxxxxx'xxxxxx xxxxxxx'xxxxxxx'"), + ACE_TEXT("&xxxx&xxxxxxxxx &xxxxxxxx xxxxx&xxxxxxxxxxx xxxx&xxxxxxxxxx&"), + ACE_TEXT(">xx>xxxxxxxxxxx >xxxxxxxx xxxxx>xxxxxxxxxxx xxxxx>xxxxxxxxx>"), + ACE_TEXT("xxxxxxx xx\"xxxxxxxxxxxx>"), + }; + + if (run_tests(test_strings, MAX_ITERATIONS) != 0) + return 1; + + ACE_DEBUG((LM_DEBUG, "Rerun tests with larger strings\n")); + for (int i = 0; i < NUM_TEST_STRS; ++i) + { + for (int j = 0; j < 5; ++j) + { + test_strings[i] += test_strings[i]; + } + } + + if (run_tests(test_strings, MAX_ITERATIONS / 10) != 0) + return 1; + + return 0; +} diff --git a/ACE/ACEXML/tests/util/util.mpc b/ACE/ACEXML/tests/util/util.mpc new file mode 100644 index 00000000000..4deaa3719c4 --- /dev/null +++ b/ACE/ACEXML/tests/util/util.mpc @@ -0,0 +1,4 @@ +// $Id$ +project: aceexe, acexml { + exename = test +} diff --git a/ACE/ASNMP/COPYRIGHT b/ACE/ASNMP/COPYRIGHT new file mode 100644 index 00000000000..ad880b9cf90 --- /dev/null +++ b/ACE/ASNMP/COPYRIGHT @@ -0,0 +1,68 @@ +Mon Jul 14 12:12:32 PDT 1997 + +These copyrights apply to the SNMP++ module shipped with the ACE library: + + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. + +=====================================================================*/ + +/********************************************************************** + Copyright 1988, 1989, 1991, 1992 by Carnegie Mellon University + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of CMU not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. +******************************************************************/ + +Certain portions of this version of HP's SNMP++ are: + +/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +Copyright 1997 Cisco Systems, Inc. + +Permission to use, copy, modify, and distribute this software for any +purpose and without fee is hereby granted, provided that this +copyright and permission notice appear on all copies of the software and +supporting documentation, the name of Cisco Systems, Inc. not be used +in advertising or publicity pertaining to distribution of the +program without specific prior permission, and notice be given +in supporting documentation that modification, copying and distribution is by +permission of Cisco Systems, Inc. + +Cisco Systems, Inc. makes no representations about the suitability of this +software for any purpose. THIS SOFTWARE IS PROVIDED ``AS IS'' +AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT +LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGMENT AND +FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL CISCO SYSTEMS, INC. BE +LIABLE FOR ANY DAMAGES ARISING OUT OF THIS LICENSE OR YOUR USE OF THE +SOFTWARE INCLUDING WITHOUT LIMITATION, DIRECT, INDIRECT OR CONSEQUENTIAL +DAMAGES. +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ + diff --git a/ACE/ASNMP/ChangeLog b/ACE/ASNMP/ChangeLog new file mode 100644 index 00000000000..a2fc9832377 --- /dev/null +++ b/ACE/ASNMP/ChangeLog @@ -0,0 +1,538 @@ +Wed Mar 8 10:46:12 UTC 2006 Johnny Willemsen + + * asnmp/*.h: + Converted to doxygen style of documentation + +Wed Jan 4 22:47:13 UTC 2006 J.T. Conklin + + * ChangeLog: + + Untabify. + Delete-trailing-whitespace. + + Added "Local Variables" section defining "add-log-time-format" + to a really ugly lambda expression that formats changelog + timestamps in UTC and works with both GNU Emacs and XEmacs. + +Fri Dec 30 11:11:12 UTC 2005 Johnny Willemsen + + * asnmp/transaction.cpp: + Updated because the ACE_Time_Value constructors are now explicit + +Fri Dec 23 09:56:12 UTC 2005 Johnny Willemsen + + * asnmp/address.{h,cpp}: + Added LEN as postfix for HASH0, HASH1 and HASH2. VxWorks 6.1 PPC + defines HASH1 and HASH2 + +Wed Oct 5 10:23:12 UTC 2005 Johnny Willemsen + + * asnmp/asn1.cpp: + * asnmp/pdu.cpp: + Fixed might be used uninitialized warnings in MinGW build + +Fri Jul 15 10:12:19 2005 Douglas C. Schmidt + + * Removed the asnmp.mwc file so that it can be regenerated by MPC + automatically. Thanks to Sam Mesh for + reporting this. This fixes bugid 2190. + +Sun Oct 3 20:12:43 2004 Balachandran Natarajan + + * asnmp/oid.cpp: + + Fixed a double deletion problem reported by Shlomi Yaakobovich. + +Thu Sep 30 10:54:39 2004 Steve Huston + + * examples/get/get.cpp: + * examples/get/get_async.cpp: + * examples/next/next.cpp: + * examples/set/set.cpp: + * examples/trap/trap.cpp: + * examples/walk/walk.cpp: Added #include "ace/Argv_Type_Converter.h". + +Wed Sep 29 15:33:29 2004 Steve Huston + + * asnmp/sagent.cpp: + * agent/snmp_agent.cpp: + * examples/get/get.cpp: + * examples/get/get_async.cpp: + * examples/next/next.cpp: + * examples/set/set.cpp: + * examples/trap/trap.cpp: + * examples/walk/walk.cpp: + * tests/test_config.h: + * tests/Address_Test.cpp: + * tests/Counter64_Test.cpp: + * tests/Counter_Test.cpp: + * tests/Gauge_Test.cpp: + * tests/Integer_Test.cpp: + * tests/Octet_Test.cpp: + * tests/Oid_Test.cpp: + * tests/Target_Test.cpp: + * tests/Varbind_Test.cpp: Adjustments to build with wide-char. + +Fri Aug 6 08:14:12 2004 Douglas C. Schmidt + + * asnmp/transaction.{h,cpp}: Added a get_handle() call to + session. Thanks to Geo Sebastian + for this fix. + +Fri May 7 14:42:22 2004 Ossama Othman + + * tests/Counter_Test.cpp (TestCounter): + * tests/Gauge_Test.cpp (TestGuage): + * tests/Integer_Test.cpp (TestUnsignedInteger32): + + More "comparison between signed and unsigned integer" + warning fixes. + +Thu May 6 11:03:26 2004 Ossama Othman + + * tests/Counter_Test.cpp (TestCounter): + * tests/Counter64_Test.cpp (TestCounter64): + * tests/Gauge_Test.cpp (TestGuage): + * tests/Integer_Test.cpp (TestUnsignedInteger32): + + Fixed "comparison between signed and unsigned integer" + warnings. + +Mon Apr 26 18:37:12 UTC 2004 Johnny Willemsen + + * examples/get/get.cpp: + * examples/get/get_async.cpp: + * examples/next/next.cpp: + * examples/set/set.cpp: + * examples/trap/trap.cpp: + * examples/walk/walk.cpp: + Don't use deprecated methods of ACE_Get_Opt and ACE_Reactor + +Mon Apr 26 15:14:12 UTC 2004 Johnny Willemsen + + * examples/trap/purify4.1.txt: + Removed this file, it contains purify results and shouldn't + belong in the repo. + +Thu Apr 22 20:45:27 2004 Ossama Othman + + * tests/Octet_Test.cpp: + * tests/Oid_Test.cpp: + + Changed all return types for equality, relational and logical + operators to "bool", as is the norm for modern C++. + +Fri Apr 16 16:53:20 2004 Ossama Othman + + * tests/Gauge_Test.cpp (TestGuage): + * tests/Integer_Test.cpp (TestInteger32, TestUnsignedInteger32): + + Fixed some "comparison between signed and unsigned integer" + warnings. + +Mon Mar 29 06:56:11 UTC 2004 Johnny Willemsen + + * tests/Integer_Test.cpp: + Fixed a warning in Win32 builds. + +Fri Mar 26 09:49:10 2004 Balachandran Natarajan + + * tests/Integer_Test.cpp: + + Fixed a warning in Win32 builds. + +Fri Aug 29 07:56:19 2003 Ossama Othman + + * tests/Octet_Test.cpp (TestOctet): + + Fixed "string literal converted to char *" warning. String + literals are now considered "const" by standard C++. + +Sun Nov 24 17:04:33 2002 Douglas C. Schmidt + + * agent/main.cpp (main): Added ACE::init() to the beginning of + main() to prevent crashes on Windows. Thanks to Huseyin Calgin + for reporting this. + +Fri Feb 8 04:42:21 2002 Douglas C. Schmidt + + * asnmp/transaction.cpp (run): Changed the code to use ACE_Reactor::instance () + rather than a local ACE_Reactor on the stack. Thanks to Paresh + Raote for reporting this. + +Thu Jan 25 12:48:33 2001 Craig Rodrigues + + * agent/Makefile.orig + asnmp/address.h.orig + examples/next/next.cpp + examples/trap/trap.cpp + examples/walk/walk.cpp + tests/test_config.h + tests/Varbind_Test.cpp + tests/Counter64_Test.cpp + tests/run_tests.sh + + New agent Makefile, and compilation fixes. + +Sun Jun 4 14:51:33 2000 Darrell Brunsch + + * asnmp-overview.html: + + Added missing CVS Id string. + +Tue Dec 21 16:22:21 1999 David L. Levine + + * tests/*.cpp: removed the unnecessary explicit template + instantiation. Other instantiations were necessary + with it, and it seemed to serve no useful purpose: + there was no use of an ACE_Unbounded_Set. + Thanks to Jose Rubio for + reporting link failures with Sun CC 5.0, with explicit + template instantiation enabled. + + * tests/test_config.h: added #include of "ace/ACE.h", + because the file uses it later. g++ 2.91.66 on Linux + needed it. + +Wed Jul 14 08:26:42 1999 Brian Raven + + * asnmp/snmp.{h,cpp},wpdu.cpp: + SYNOPSIS: + 1) The agent IP address in traps originating from logical + domains on an Enterprise 10000 is that of the physical domain. + + 2) The code that gets the IP address uses gethostbyname + which is unsafe in a MT environment (according to the man page). + + DESCRIPTION: + 1) The problem seems to be caused by hostname only returning + the physical domain name. + + SAMPLE FIX/WORKAROUND: + 1) To get around this problem I added the capability to + override the local host name. + + 2) I would suggest using the GenAddress class to obtain the + IP address. + +Tue Jun 22 13:34:54 1999 David L. Levine + + * agent/Makefile: replaced rm -f with $(RM). + +Thu Apr 29 06:46:46 1999 David L. Levine + + * tests/Makefile: changed SRC to PSRC (for make depend). + Thanks to Sandeep Goyal for reporting + that the Makefile was broken. + +Mon Dec 28 22:03:57 1998 David L. Levine + + * agent/main.cpp: added #include "ace/inc_user_config.h", for + ACE_RCSID definition. Thanks to wym for + reporting that it won't compile without it. + +Tue Oct 27 08:52:05 1998 David L. Levine + + * asnmp/Makefile,tests/Makefile: added SRC definition for make depend, and updated dependencies. + +Mon Aug 3 17:50:08 1998 Gonzalo Diethelm + + * examples/get/get_async.cpp: + * examples/get/get.cpp: + Added ACE_RCSID to these files. + +Fri Jul 31 19:26:07 1998 Gonzalo Diethelm + + * examples/Makefile: + It had a missing info subdirectory. + + * agent/agent_impl.cpp: + * agent/main.cpp: + * agent/snmp_agent.cpp: + * asnmp/address.cpp: + * asnmp/asn1.cpp: + * asnmp/counter.cpp: + * asnmp/ctr64.cpp: + * asnmp/gauge.cpp: + * asnmp/integer.cpp: + * asnmp/octet.cpp: + * asnmp/oid.cpp: + * asnmp/pdu.cpp: + * asnmp/sagent.cpp: + * asnmp/snmp.cpp: + * asnmp/target.cpp: + * asnmp/timetick.cpp: + * asnmp/transaction.cpp: + * asnmp/vb.cpp: + * asnmp/wpdu.cpp: + * examples/get/get.cpp: + * examples/next/next.cpp: + * examples/set/set.cpp: + * examples/trap/trap.cpp: + * examples/walk/walk.cpp: + * tests/Address_Test.cpp: + * tests/Counter64_Test.cpp: + * tests/Counter_Test.cpp: + * tests/Gauge_Test.cpp: + * tests/Integer_Test.cpp: + * tests/Octet_Test.cpp: + * tests/Oid_Test.cpp: + * tests/Target_Test.cpp: + * tests/Varbind_Test.cpp: + Added ACE_RCSID to these files. + +Wed Jul 15 20:34:55 CDT 1998 + * general fixes for SNMPv1 trap generation code reported by + Hien Nguyen and Jeff Hall + Added Hien's fixes, plus fixed -c option + in examples/trap to properly set community string. + * release 2.0 + +Fri Jan 30 15:29:42 CST 1998 + * fix vb.cpp to handle Gauge/uInt the same way. While retrieving + ifTable found the bug. + +Wed Dec 10 12:09:36 CST 1997 + * sagent.cpp, Eric Newton fix. result not checked. v1.8 + +Mon Dec 8 14:33:59 CST 1997 + * Thanks to Eric Newton's continued patches + Version 1.7 has fixes for: agent, base library + Fix to the response type fixes the interoperability with CMU snmp on + linux. (and SNMP Research as well) + + Initialize member of Pdu: output_ + Send responses as response messages + Deallocate and reset the io_vec + + The transaction object didn't initialize the io_vec used to receive + a packet when it was used for an agent transaction. + + Cleans up a warning about using a const object from a previous + patch. + + Removes the transaction object from the Reactor. + + +Sun Nov 30 17:49:12 CST 1997 Mike MacFaden + * Thanks to Eric Newton's apply patches: + Removed G++ warnings: + Removed unused variables + Cleaned up unused args to functions + Initialized variables + Inserted casts in *printf* functions + Added int return types to function definitions + Converted some variables from int to size_t to cut down on + sign comparison warnings + Reordered constructor initializer lists + Added return statements to functions returning int + + Modified for G++ language differences: + Modified for loops for ANSI scoping rules + + Fixed Bugs: + Deleted incorrect (cut-n-pasted) header to transaction.h + Removed "assignment in if condition" error + Added missing "break;" in switch statement in wpdu + + Features: + Added async interface. + + Noise: + Modified makefiles for g++ on Linux RedHat 4.1 + + * The new async interface has a test example in examples/get/get_async.cpp + that is useful if you are extending the get application. + + * Fixed makefile to include -lasnmp when building tests/examples + + * Compile and test with ACE 4.4 on Solaris 2.5.1 using Sun CC 4.2 + no warnings/errors. get_async will sigbus however in destructors. + +Thu Sep 4 18:56:12 1997 Mike MacFaden + + * commit agent/ mibs/ and update asnmp/ with sagent.h, cpp + to implement a trivial SNMPv1 agent that hard codes support + for mib II system group only. + +Fri Aug 22 23:43:20 1997 Mike MacFaden + + * clean up two memory leaks in octet class and one umr + +Thu Aug 21 20:59:23 1997 Mike MacFaden + + * Added Netbios address support to GenAddress + and added DecNetAddress, AppleTalkAddress classes per CISCO-TC.my + (ftp://ftp.cisco.com/pub/mibs) + +Tue Aug 19 20:19:32 1997 Michael R. MacFaden + * change IpAddress::is_arpa() to is_private() and update the comments + per RFC 1597. Add new test routine to verify this function in + tests/Address_Test.cpp + + * add IpAddress::to_octet(OctetStr& val) which is useful when having to + send a network address as an Octet String as in CISCO-PING-MIB.my + +Tue Aug 5 12:12:39 1997 Mike MacFaden (mrm@mrm-ss20) + * Thanks to Amos Shapira apply patches + to support IRIX 6.3. Stated request for: + I think it would make things "righter" to make the code use C++ + strings (and maybe vectors?). + + * Begin testing on HP-UX 10.01 (missing ucontext.h) + +Sat Aug 2 12:07:43 1997 Douglas C. Schmidt + + * Started to integrate the code into a more ACE-like style, e.g., + added a the "asnmp/" prefix to all the header files so that we + don't need to play games with the -I flags and so we can always + know where we're getting the headers from. + +Fri Aug 1 19:23:52 1997 Mike MacFaden (mrm@mrm-ss20) + + * NOTES: This first version only tested on Solaris 2.5 + + * review classes for thread safety. Current thread design only + allows for one thread to safely access any ASNMP object created. + + * run purify test of get routine no -memory leaks. + + * verify both shared archive/static archive types work with + example programs + + * << Globals Changes >> + + * tested only archiver library version + + * reformat code to use one brace style. + + * changed all manifest constants defined as _XX to XX_ to stay out + of compiler namespace + + * change all OS calls to use ACE_OS:: portability layer, #include + + + * reformat code to use one consistent brace layout and redo + header using ACE + + * remove semicolons on member functions foo{}; - not necessary + + * make get() methods const member functions + + * removed unnecessary casts that looked like this: and revamped + all memory allocations via ACE_NEW macro + + new_oid = (SmiLPUINT32) new unsigned long [ smival.value.oid.len + + To + + ACE_NEW(new_oid, SmiUINT32[ smival.value.oid.len]) + + * Collapsed default constructors with constructors to constructors + with default arguments. + + * removed unused #include + + * Added ACE_TRACE() to classes + + * change get_printable() to to_string() - there will be more java + programmers in the future so this should be the first step... + + * removed ASYNC interface till it can be rebuilt using ACE patterns + + * Attempt to make interface more type strict but leaving generic + interfaces as escape hatch. Example: CTarget becomes UdpTarget + for UDP/IP based agents. + + * << Class Specific Changes >> + + * Oid class: + - remove char * routines, simplify class + - added suboid method and removed get_printable() overloads + + * CTarget class: + - renamed to UdpTarget. Stay out of Microsoft Namespace per MSJ + Article by Allen Hollub. + + * Varbind class: + - remove generic set_value for char,int, etc. Too easy to get + this wrong. Allow just types defined. + - added overload for equality operator (==) + - added new constructor to allow setting full vb state oid,value, exception + - add to_string() + + * Address class: + - change manifest constants to enums for address lengths, add IP V6 lens + + - add a netbios name class, still pretty worthless since I don't have spec + in front of me yet... + + - rewrite resolver calls to be thread safe and cleaner by moving to two + class (static) member functions: + + // thread safe routine to lookup ip address given hostname + // return <> 0 on error + static int resolve_to_addr(const char *hostname, in_addr& quad_addr); + + // thread safe routine to lookup name given ip address + // return <> 0 on error + static int resolve_to_hostname(const in_addr& quad_addr, char *hostname) + + * added some interrogation routines to class IpAddress: + is_loopback() const; + + * Ctr64 class: + - added constructor using long long datatype (needs to be made + portable to NT + + * Pdu class: add to_string() + + * Classes added wpdu class: + - a new adpater class between CMU and HP pdu, varbind data structures + + * transaction class: + - implement get/getnext timeout and retry logic using ACE + Reactor class, ACE_Time_Value + +Sat Jul 5 19:13:30 1997 Mike MacFaden (mrm@mrm-ss20) + + * unpacked snmp++.tar.Z into ACE_wrappers, remove X11 support. If + you need GUI support in a communications package, something's + wrong, very wrong.... + + * Change HP-UX Makefiles to use ACE makefile system + + * Change includes to use ACE OS Adaption Layer + + * change all OS calls to use ACE_OS:: versions + + * Add ACE_TRACE macros to all functions. + + * clean up the global namespace by puting all global functions + into C++ classes as static member functions and make public only + those that are used (uxsnmp.cpp, eventlist.cpp) + + * create README from readme.txt, COPYRIGHT files. + + * create tests/ directory rename ConsoleExamples to examples + + * cull out dead code modules and dump them into misc dir: + oidname.cpp, ipresolv.cpp + + * ipresolv.cpp had broken hostname buffer size (200), when DNS has + aways defined a max FQDN as 256...go figure. + + * add General Error handler since existing ones are not very + useful in and of themselves. + + * change all _DEF to DEF_ since _ANYTHING is reserved for compiler + writer namespace, NOT app writer + + * convert cmu code to use C++ new/delete from malloc/free so + entire library uses C++ new constructor + +Local Variables: +mode: change-log +add-log-time-format: (lambda () (progn (setq tz (getenv "TZ")) (set-time-zone-rule "UTC") (setq time (format-time-string "%a %b %e %H:%M:%S %Z %Y" (current-time))) (set-time-zone-rule tz) time)) +indent-tabs-mode: nil +End: diff --git a/ACE/ASNMP/Makefile.am b/ACE/ASNMP/Makefile.am new file mode 100644 index 00000000000..7ff1160c8a3 --- /dev/null +++ b/ACE/ASNMP/Makefile.am @@ -0,0 +1,16 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +SUBDIRS = \ + asnmp \ + agent \ + examples \ + tests + diff --git a/ACE/ASNMP/README b/ACE/ASNMP/README new file mode 100644 index 00000000000..f07563c61a5 --- /dev/null +++ b/ACE/ASNMP/README @@ -0,0 +1,177 @@ +Fri Dec 18 09:43:35 CST 1998 +==================================================================== +ASNMP = ACE+SNMP++ Version 2.1 +By Michael R. MacFaden mrm@acm.org, mrm@yagosys.com +==================================================================== + +What is ASNMP ? ==> ACE+SNMP! aka Another SNMP API + HP's SNMP++ 2.5 freely available C++ SNMP class library + has been adapted to the ACE 4.2 Framework. + +What is Simple Network Management Protocol(SNMP)? + See the FAQ: + http://www.snmp.com/FAQs/snmp-faq-part1.txt + http://www.snmp.com/FAQs/snmp-faq-part2.txt + + +What was changed from HP version? + See src/ChangeLog file. + +Is HP SNMP++ compatible with ASNMP? + It is neither source nor binary compatible. About 10% of the API has changed. + There have been API changes to make the interface more orthogonal + and to reduce implementation complexity such as consolidating constructors + with default formal values, and to remove some inconsistencies + with the HP interface as well as locking down valid() semantics, etc. + +What platforms have the test programs been verified on? + Solaris 2.4, 2.5.1 using SUN C++ 4.1,4.2 compiler. Linux/GCC + fixes are now in as well. + +Why use this version? + The SNMP++ version ships only for HP-UX and for Windows. + It is not very portable nor does it do a good job at checking + for out of memory exhaustion conditions (asn1.cpp). There is some great + code here. ACE needs an SNMP library to build NM type + communications applications. Hence ASNMP was born in my spare time. + +How does ASNMP differ from SNMP? + Current version uses ACE OS Adaption layer. All memory + allocation is now consistent, uses ACE_NEW(). + Standard ACE Debugging (ACE_TRACE) has been inserted. + ASNMP has less global namespace pollution by moving all non-class + functions into interface classes or made into static locals. + + An agent inteface has been added (asnmp/sagent.h) so both agents + and managers can use this class library. A trivial agent + exists in ASNMP/agent/ + + X11 GUI support removed from this version since this is + not the place to include GUI support in the new world of + multi-threaded apps. + + The async interface does not match the HP implementation. + +How to build this library + Set ACE_ROOT and platform_macros.GNU per ../INSTALL file. + create libasnmp.a, libasnmp.so and then run the tests + +Any Support for ASNMP? + As time permits from the mailing list. + +Where to ask questions? + Please use ace-users@cs.wustl.edu mailing list or mrm@acm.org + +NOTE: Please do not bother Eric Mellquist unless you are using + the original HP version of this library. + +Where can I get the original HP SNMP++? + From ftp://rosegarden.external.hp.com:/pub/snmp++ + +What version of SNMP is fully supported? + SNMP Version 1 (RFC 1155,1157, 1215) + +What about SNMP Version 2c? + V2c is defined in RFC 1901 - 1908 + These bits are added to v1 code in this library: GetBulk PDU, Counter64 + These bits are missing Inform (RFC 1905) + RFC 1903 defined new datatypes using existing SMI via macros. + These should be coded as if they were SMI datatypes to encapsulate + their behavior. V2c hasn't been deployed + +What about SNMP Version 3? + It is looking good for V3, but so far, we're just watching. + http://www.ietf.org/html.charters/snmpv3-charter.html + A C implemenation is now available from UC Davis. + +What copyrights/legal requirements are required when using this code? + See ./COPYRIGHT + +Does this really work? + See tests/ directory for the current test reports (purify/purecov/...). + +How does one Extend an SNMP Agent? + Extending an agent typically means updating the agent source or + using a dynamic link style API. RFC 2257 (AgentX) is the current design + for doing this in a standard way. This hasn't been well formalized yet + so extending an existing agent is still a vendor API thing. + + The agent provided here is a template. A mib compiler and agent + library typically provide better agent support. See the UC-Davis + SNMP software for an example Agent that is portable and can report + on many flavors of UNIX and Windows. + +Any Future Plans? + The ASNMP library will be improved for performance and made to use + higher level design patterns. Hopefully it will be used as a + vehicle for grad students to learn something about network mgmt + code work a related cousin of general distributed programming. + + +Regards, +Michael R. MacFaden +Member of the Technical Staff +Cabletron Systems, Inc. +215 Moffet Park Drive +Sunnyvale, CA 94089 +mrm@yagosys.com +http://www.yagosys.com + +==================================================================== +SNMP++ For UNIX Source Code and Examples: +==================================================================== +Included within this package can be found the source code and +examples for SNMP++. The following represents the directories which +are included within the compressed tar file and their contents. + +For more details on the API , please refer to the API specification. + +This library is a complete implementation of SNMP++ and does not +require other SNMP libraries to be present. + +Required Tools: +--------------------------------------------------------------------- + + +readme.txt ( this file) +| +| +|------ src ( .cpp files and Makefile for building libraries ) +| +|------ examples ( a variety of apps, .cpp and Makefile included ) +| +|------ tests - unit test routines + + +src Directory Contents: +-------------------------------------------------------------------- +Makefile - make file for ACE/Solaris 2. build +target.cpp - Collection of attributes(address, timeout, etc) used + to define a command session +snmp.cpp - A logical session between NM app and agent +pdu.cpp - Pdu class source (vb list and API command) +wpdu.cpp - Adapter pattern based class between CMU and HP code +transaction.cpp - synchronous transaction clss +vb.cpp - Variable Binding class source (oid + value) + +<< SMI datatypes used to get/set values in SNMPv1 agents >> + +address.cpp - Address class source +gauge.cpp - Gauge32 class source +integer.cpp - Integer32 class source +counter.cpp - Counter32 class source +ctr64.cpp - Counter64 class source +timetick.cpp - TimeTicks class source +octet.cpp - Octet String class source +oid.cpp - Oid class source +asn1.cpp - ASN1 encoding and decoding code. CMU code. + +examples Directory Contents: +--------------------------------------------------------------------- +Makefile - make file for building console apps +get.cpp - source for SNMP get program +next.cpp - source for SNMP get Next program +set.cpp - source for SNMP set program +trap.cpp - source for SNMP trap send program +walk.cpp - source for SNMP walk program + diff --git a/ACE/ASNMP/TO-DO b/ACE/ASNMP/TO-DO new file mode 100644 index 00000000000..a05b7106f58 --- /dev/null +++ b/ACE/ASNMP/TO-DO @@ -0,0 +1,3 @@ +TODO: + - Attempt to make all subroutines thread safe + - work on test suite - validate basic stuff doesn't leak diff --git a/ACE/ASNMP/agent/Makefile.am b/ACE/ASNMP/agent/Makefile.am new file mode 100644 index 00000000000..afb76da40ed --- /dev/null +++ b/ACE/ASNMP/agent/Makefile.am @@ -0,0 +1,45 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + + +## Makefile.asnmp_agent.am + +if !BUILD_USES_WCHAR + +noinst_PROGRAMS = agent + +agent_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP + +agent_SOURCES = \ + agent_impl.cpp \ + main.cpp \ + snmp_agent.cpp \ + agent_impl.h \ + snmp_agent.h + +agent_LDADD = \ + $(top_builddir)/ASNMP/asnmp/libasnmp.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +endif !BUILD_USES_WCHAR + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/ASNMP/agent/agent.mpc b/ACE/ASNMP/agent/agent.mpc new file mode 100644 index 00000000000..4579c29d458 --- /dev/null +++ b/ACE/ASNMP/agent/agent.mpc @@ -0,0 +1,14 @@ +// $Id$ + +project (asnmp_agent) : aceexe { + exename = agent + after += asnmp_lib + libs += asnmp + avoids += uses_wchar + includes += $(ACE_ROOT)/ASNMP + source_files { + agent_impl.cpp + main.cpp + snmp_agent.cpp + } +} diff --git a/ACE/ASNMP/agent/agent_impl.cpp b/ACE/ASNMP/agent/agent_impl.cpp new file mode 100644 index 00000000000..e1949f54067 --- /dev/null +++ b/ACE/ASNMP/agent/agent_impl.cpp @@ -0,0 +1,158 @@ +// $Id$ + +// implement a prototype SNMP Agent using ASNMP and ACE + +#include +#include +#include +#include + +#include "agent_impl.h" + +ACE_RCSID(agent, agent_impl, "$Id$") + +agent_impl::agent_impl(unsigned short port, const char *rd, const char *wr) : +sagent(port) +{ + ACE_TRACE("agent_impl::agent_impl"); + tgt_.set_read_community(rd); + tgt_.set_write_community(wr); + agent_clock_.start(); +} + +agent_impl::~agent_impl() +{ + ACE_TRACE("agent_impl::~agent_impl"); +} + +// callback : have received a Pdu from the target host with given read comm str +// this is really simplistic, but gives the general idea +int agent_impl::handle_get( Pdu &pdu, UdpTarget &target) +{ + ACE_TRACE("agent_impl::handle_get"); + OctetStr mgr_rd_str, agent_rd_str; + target.get_read_community(mgr_rd_str); // requster's read community string + tgt_.get_read_community(agent_rd_str); // this agent's read community string + + // 1. verify we have a valid read string else drop pdu (no response to caller) + if (mgr_rd_str != agent_rd_str) { + ACE_DEBUG((LM_DEBUG, "agent_impl::handle_get: invalid read community recvd\n")); + return 0; + } + + // 2. iterate over each varbind in the pdu, filling providing responses + int fdone = 0; + for (int i = 0; (i < pdu.get_vb_count()) && !fdone; i++) { + Vb vb; + pdu.get_vb(vb, i); + if (get_response(vb)) { // set a value for the oid if we can else + set_error_status(&pdu, SNMP_ERROR_NO_SUCH_NAME); // these ought to be member + set_error_index(&pdu, i); // functions but are not yet... + fdone++; // trigger flag to exit loop early + } + else // failed, return noSuch error + pdu.set_vb(vb, i); + } + + // 3. lastly, return the pkt to the caller + return respond(pdu, target); +} + +// this routine makes up the brains of the agent +// it knows only the MIB II system group set of variables for a get operation +int agent_impl::get_response(Vb& vb) +{ + // these objects represent the MIB II system group per RFC 1213 + static Oid sysDescr("1.3.6.1.2.1.1.1.0"), + sysObjectID("1.3.6.1.2.1.1.2.0"), sysUpTime("1.3.6.1.2.1.1.3.0"), + sysContact("1.3.6.1.2.1.1.4.0"), sysName("1.3.6.1.2.1.1.5.0"), + sysLocation("1.3.6.1.2.1.1.6.0"), sysServices("1.3.6.1.2.1.1.7.0"); + + Oid oid; + vb.get_oid(oid); + if (oid == sysDescr) { + OctetStr desc("ASNMP Prototype Agent 1.0"); + vb.set_value(desc); + } + else if (oid == sysObjectID) { // the IANA gives assigns Enterprise Numbers + // see ftp://ftp.isi.edu/in-notes/iana/assignments/enterprise-numbers + // for the official list of enterprise numbers. Then under this tree + // assign a unique subtree to identify this agent + Oid id("1.3.6.1.4.1.2533.9.1"); + vb.set_value(id); + } + else if (oid == sysUpTime) { + ACE_Time_Value tv; + agent_clock_.elapsed_time (tv); + TimeTicks tt(tv.msec()); + vb.set_value(tt); + } + else if (oid == sysContact) { + OctetStr contact("mrm@acm.org"); + vb.set_value(contact); + } + else if (oid == sysName) { + OctetStr fqdn("foo.org"); // extract this from the gethostbyname() TODO + vb.set_value(fqdn); + } + else if (oid == sysLocation) { + OctetStr loc(""); + vb.set_value(loc); + } + else if (oid == sysServices) { + SnmpInt32 svcs(72); + vb.set_value(svcs); + } + else + return 1; // noSuchName + + return 0; +} + +int agent_impl::handle_get_next( Pdu &, UdpTarget &) +{ + ACE_TRACE("agent_impl::handle_get_next -NI"); + return 0; +} + +int agent_impl::handle_set( Pdu &, UdpTarget &) +{ + ACE_TRACE("agent_impl::handle_set -NI"); + return 0; +} + +// stuff used by process_requests + +// called when SIGINT +static sig_atomic_t finished = 0; + +extern "C" void +sig_handler (int) +{ + ACE_TRACE("::sig_handler"); + finished = 1; +} + +int agent_impl::process_requests() +{ + ACE_TRACE("agent_impl::process_requests"); + ACE_Reactor reactor; + + ACE_Sig_Action sa ((ACE_SignalHandler) sig_handler, SIGINT); + ACE_UNUSED_ARG (sa); + + // Read data from other side. + if (reactor.register_handler (this, ACE_Event_Handler::READ_MASK) == -1) + ACE_ERROR_RETURN ((LM_ERROR, "ACE_Reactor::register_handler"), -1); + + // TODO: register signal handler to shut down gracefully here + + while (!finished) + { + reactor.handle_events (); + ACE_DEBUG ((LM_DEBUG, "return from handle events\n")); + } + + ACE_DEBUG ((LM_DEBUG, "return from handle events - normal shut down\n")); + return 0; +} diff --git a/ACE/ASNMP/agent/agent_impl.h b/ACE/ASNMP/agent/agent_impl.h new file mode 100644 index 00000000000..60ee90034a2 --- /dev/null +++ b/ACE/ASNMP/agent/agent_impl.h @@ -0,0 +1,52 @@ +/* -*- C++ -*- */ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// ASNMP +// +// = FILENAME +// agent_impl.h +// +// = AUTHOR +// Michael R. MacFaden +// +// ============================================================================ + +#ifndef AGENT_IMPL_H +#define AGENT_IMPL_H + +#include +#include +#include +#include +#include +#include + +class agent_impl : public sagent +{ +public: + agent_impl(unsigned short port, const char *rd, const char *wr); + virtual ~agent_impl(); + + virtual int handle_get( Pdu &pdu, UdpTarget &target); + // retrieve data from a peer agent for a given list of oid values + + virtual int handle_get_next( Pdu &pdu, UdpTarget &target); + // retrieve data lexically adjacent to the oids specified in the pdu + // from the peer agent + + virtual int handle_set( Pdu &pdu, UdpTarget &target); + // set data in the agent from the list of oids in the pdu + + int process_requests(); + // main loop here using a reactor object + +private: + UdpTarget tgt_; // this agent's read, write community strings + int get_response(Vb& vb); // set values for a "get" cmd + ACE_High_Res_Timer agent_clock_; // agent "uptime" ticks reported in 1/100 second +}; + +#endif /* AGENT_IMPL_H */ diff --git a/ACE/ASNMP/agent/main.cpp b/ACE/ASNMP/agent/main.cpp new file mode 100644 index 00000000000..abc4b418eeb --- /dev/null +++ b/ACE/ASNMP/agent/main.cpp @@ -0,0 +1,28 @@ +// $Id$ + +// This server daemon processes SNMP Version 1 get, get-next, and set +// commands. over the MIB II "System" group only. + +#include "ace/config-all.h" +#include "snmp_agent.h" +#include "ace/ACE.h" + +ACE_RCSID(agent, main, "$Id$") + +int +ACE_TMAIN(int argc, ACE_TCHAR *argv[]) +{ + ACE::init (); + snmp_agent the_agent; + + if (the_agent.set_args(argc, argv)) + return 1; + + if (!the_agent.valid()) { + return 1; + } + + the_agent.run(); // main loop + + return 0; +} diff --git a/ACE/ASNMP/agent/snmp_agent.cpp b/ACE/ASNMP/agent/snmp_agent.cpp new file mode 100644 index 00000000000..04f916d3fc4 --- /dev/null +++ b/ACE/ASNMP/agent/snmp_agent.cpp @@ -0,0 +1,102 @@ +// $Id$ + +// This server daemon processes SNMPv1 requests over MIB II System group + +#include "snmp_agent.h" +#include "agent_impl.h" // actual implementation +#include "ace/Argv_Type_Converter.h" +#include "ace/Get_Opt.h" +#include "ace/Reactor.h" + +ACE_RCSID(agent, snmp_agent, "$Id$") + +// module globals +#define SNMP_AGENT_PORT (161) +#define WR_COM ACE_TEXT ("private") +#define RD_COM ACE_TEXT ("public") + +snmp_agent::snmp_agent() : agent_(0) +{ + ACE_TRACE("snmp_agent::snmp_agent"); +} + +snmp_agent::~snmp_agent() +{ + ACE_TRACE("snmp_agent::~snmp_agent"); + delete agent_; +} + + +int snmp_agent::valid() const +{ + ACE_TRACE("snmp_agent::valid"); + return (agent_ != 0); +} + +int snmp_agent::set_args(int argc, char *argv[]) +{ + ACE_TRACE("snmp_agent::set_args"); + unsigned short port = SNMP_AGENT_PORT; + const ACE_TCHAR *rd = RD_COM; + const ACE_TCHAR *wr = WR_COM; + ACE_Argv_Type_Converter to_tchar (argc, argv); + + ACE_Get_Opt get_opt + (argc, to_tchar.get_TCHAR_argv (), ACE_TEXT ("p:w:r:hv")); + + for (int c; (c = get_opt ()) != -1; ) + { + switch (c) + { + case 'p': + port = (ACE_OS::atoi (get_opt.optarg)); + break; + case 'w': // write community string + wr = get_opt.optarg; + break; + case 'r': // read community string + rd = get_opt.optarg; + break; + case 'h': // help & version info + case 'v': + ACE_DEBUG + ((LM_DEBUG, + ACE_TEXT ("(%P|%t) Example SNMP Version 1 Agent - ASNMP/ACE\n"))); + return -1; + default: + return -1; // invalid arg + } + } + + agent_ = new agent_impl(port, + ACE_TEXT_ALWAYS_CHAR (rd), + ACE_TEXT_ALWAYS_CHAR (wr)); // opens OS IO port + return 0; +} + +int snmp_agent::run() +{ + ACE_TRACE("snmp_agent::run"); + ACE_ASSERT(agent_); + + // open service port +#if 0 + if (agent_->open_port()) { + ACE_DEBUG((LM_DEBUG, "(%P|%t) open port %d failed\n", agent_->get_port())); + return -1; + } +#endif + + // Run forever, processing SNMP requests. + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("(%P|%t) starting up snmp agent (server) daemon\n"))); + + agent_->process_requests(); + + ACE_DEBUG + ((LM_DEBUG, + ACE_TEXT ("(%P|%t) shutting down snmp agent (server) daemon\n"))); + return 0; +} + diff --git a/ACE/ASNMP/agent/snmp_agent.h b/ACE/ASNMP/agent/snmp_agent.h new file mode 100644 index 00000000000..a7fc4c42de8 --- /dev/null +++ b/ACE/ASNMP/agent/snmp_agent.h @@ -0,0 +1,48 @@ +// $Id$ + +/* -*-C++-*- */ + +#ifndef SNMP_AGENT_ +#define SNMP_AGENT_ +// ============================================================================ +// +// = LIBRARY +// ASNMP +// +// = FILENAME +// snmp_agent.h +// +// = AUTHOR +// Michael R. MacFaden (mrm@cisco.com) +// +// ============================================================================ + +class agent_impl; + +class snmp_agent { + // = TITLE + // An SNMP v1 agent class + // + // = DESCRIPTION + // Contructs agents that are capable of processing SNMPv1 requests + // over the MIB II System group + + public: + snmp_agent(); // uses port 161, public, private + ~snmp_agent(); + + int valid() const; + // did object construct ok + + int set_args(int argc, char *argv[]); + // runtime arguments such as community strings, port to use + + int run(); + // begin processing requests + + private: + snmp_agent(const snmp_agent&); + agent_impl *agent_; +}; + +#endif // SNMP_AGENT_ diff --git a/ACE/ASNMP/asnmp-overview.html b/ACE/ASNMP/asnmp-overview.html new file mode 100644 index 00000000000..4e336178b0d --- /dev/null +++ b/ACE/ASNMP/asnmp-overview.html @@ -0,0 +1,134 @@ + + + +ASNMP Overview + +

ASNMP Overview

+ +

The Another SNMP class library is an Object Oriented programming +toolkit for using IETF standard network management protocols in the +Internet. The SNMP protocol is perhaps the most ubiquitous management +protocol running on most very device or application deployed in the +modern network today. + +

ASNMP is targeted to programmers that want to write command and +control (C&C) applications. C&C Applications communicate with +a variety of objects: + +

  • network devices such as ATM switches, Internet routers, +LAN bridges and LAN printers +
  • Routing protocols such as OSPF +
  • database servers such as ORACLE or Informix. + +

    ASNMP Version 1 implements a blocking SNMP Version 1 with some +Version 2c additions (Counter32, Counter64 SMI values). See +SNMP Version 1 as defined in the IETF Request for Comments (RFC) + +

  • 1155 +
  • 1157 +
  • 1213 +
  • 1215 + +

    Also see the RFC 1902 spec for new SMI datatypes such as Counter64. + +

    ASNMP is built using the CMU SNMP and HP SNMP++ as the base +classes then modified for use in the ACE framework. About 10% of the API +changed during code rework. See ASNMP/asnmp/ChangeLog for details. + +

    ASNMP can be used for either manager applications or agent applications. +The Snmp class contains the interface for manager applications. The +sagent class contains the interface for agent applications. A +trivial agent that implements the mib II system group per rfc1213 is +in the agents/ directory. + +

    Class Heirarchy

    + +
    +UdpTarget - Defines a collection of attributes needed to define a 
    +             communications session with an SNMP agent 
    +            This includes  network address, response timeout, etc.
    +  
    +Snmp - A logical session between NM app and agent. Provides the
    +       commands get, get_next, trap. Manages transactions between app and 
    +       server.
    +
    +Pdu  - A container object that represents an SNMP Protocol Data Unit.
    +       A Pdu contains a command (get,getnext,trap) Varbind List list, 
    +       a community string.
    +
    +Vb   - Aka Varbind or Variable Binding.  A pdu can have zero, 
    +       one or more of these. A Vb consists of an Oid to identify 
    +       the variable and a value corresponding to  one of the SMI values. 
    +       The oid/value binding is defined in a MIB file (RFC 1155)
    +       Agents hava a MIB file that defines what each variable means.
    +       Most agents implement MIB II as defined in RFC 1156.        
    +
    +

    The Structure of Managment Information (SMI) datatypes +and related types are: +

      +
    • Address->IpAddress->UdpAddress as well as MAC, IPX, IPXSOCK, Netbios +
    • Unsigned Integer +
    • Gauge32 +
    • Integer32 +
    • Counter32 +
    • Counter64 +
    • TimeTicks +
    • OctetStr +
    • Oid +
    + +
    + +

    Sample program

    +

    A sample Object to get obtain an Agent's Systems' Description +given an network address and a community string. + +class system_id { + public: + system_id(UdpAddress addr, OctetStr read_community_string) + { + UdpTarget tgt; + Snmp snmp; + Pdu pdu; + Oid oid("1.3.6.1.2.1.1.1.0"); + Vb vb(oid); + tgt.set_address(addr); + tgt.set_read_community(read_community_string); + pdu += vb; + + if (snmp.get(pdu, tgt) == 0) { + pdu.get_vb(vb, 0); + vb.get_value(desc_); + } + else + desc_ = "" + } + + int get_description(OctetStr& description) { + description = desc_; + return 0; + } + +private: + OctetStr desc_; +}; + +

    Future Directions

    +

    Here are some areas for further work + +

  • Add OO mib parser and mib code generator +
  • Collapse the CMU/HP code into one set of classes. +
  • Add full V2c support. +
  • Size/Speed improvements + + +

    References

    + + diff --git a/ACE/ASNMP/asnmp/ASNMP_Export.h b/ACE/ASNMP/asnmp/ASNMP_Export.h new file mode 100644 index 00000000000..e4c9898f3f5 --- /dev/null +++ b/ACE/ASNMP/asnmp/ASNMP_Export.h @@ -0,0 +1,58 @@ + +// -*- C++ -*- +// $Id$ +// Definition for Win32 Export directives. +// This file is generated automatically by generate_export_file.pl ASNMP +// ------------------------------ +#ifndef ASNMP_EXPORT_H +#define ASNMP_EXPORT_H + +#include "ace/config-all.h" + +#if defined (ACE_AS_STATIC_LIBS) && !defined (ASNMP_HAS_DLL) +# define ASNMP_HAS_DLL 0 +#endif /* ACE_AS_STATIC_LIBS && ! ASNMP_HAS_DLL */ + +#if !defined (ASNMP_HAS_DLL) +# define ASNMP_HAS_DLL 1 +#endif /* ! ASNMP_HAS_DLL */ + +#if defined (ASNMP_HAS_DLL) && (ASNMP_HAS_DLL == 1) +# if defined (ASNMP_BUILD_DLL) +# define ASNMP_Export ACE_Proper_Export_Flag +# define ASNMP_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define ASNMP_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else /* ASNMP_BUILD_DLL */ +# define ASNMP_Export ACE_Proper_Import_Flag +# define ASNMP_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define ASNMP_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* ASNMP_BUILD_DLL */ +#else /* ASNMP_HAS_DLL == 1 */ +# define ASNMP_Export +# define ASNMP_SINGLETON_DECLARATION(T) +# define ASNMP_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* ASNMP_HAS_DLL == 1 */ + +// Set ASNMP_NTRACE = 0 to turn on library specific tracing even if +// tracing is turned off for ACE. +#if !defined (ASNMP_NTRACE) +# if (ACE_NTRACE == 1) +# define ASNMP_NTRACE 1 +# else /* (ACE_NTRACE == 1) */ +# define ASNMP_NTRACE 0 +# endif /* (ACE_NTRACE == 1) */ +#endif /* !ASNMP_NTRACE */ + +#if (ASNMP_NTRACE == 1) +# define ASNMP_TRACE(X) +#else /* (ASNMP_NTRACE == 1) */ +# if !defined (ACE_HAS_TRACE) +# define ACE_HAS_TRACE +# endif /* ACE_HAS_TRACE */ +# define ASNMP_TRACE(X) ACE_TRACE_IMPL(X) +# include "ace/Trace.h" +#endif /* (ASNMP_NTRACE == 1) */ + +#endif /* ASNMP_EXPORT_H */ + +// End of auto generated file. diff --git a/ACE/ASNMP/asnmp/ChangeLog b/ACE/ASNMP/asnmp/ChangeLog new file mode 100644 index 00000000000..8d82c1aa36c --- /dev/null +++ b/ACE/ASNMP/asnmp/ChangeLog @@ -0,0 +1,227 @@ +Wed Jan 4 22:50:09 UTC 2006 J.T. Conklin + + * ChangeLog: + + Untabify. + Delete-trailing-whitespace. + + Added "Local Variables" section defining "add-log-time-format" + to a really ugly lambda expression that formats changelog + timestamps in UTC and works with both GNU Emacs and XEmacs. + +Fri May 7 11:40:25 2004 Ossama Othman + + * pdu.cpp (agent_error_reason): + + Really fixed mismatched sprintf() format specifiers this time + around. + +Thu May 6 11:13:25 2004 Ossama Othman + + * oid.cpp (operator+=, OidToStr): + * pdu.cpp (agent_error_reason): + + Fixed warnings regarding mismatch format specifiers and + arguments to sprintf(). + +Thu May 6 11:05:01 2004 Ossama Othman + + * gauge.h: + + Nuked trailing white space. + +Fri Apr 23 11:23:21 2004 Ossama Othman + + * oid.cpp: + + Missed some bool return types for equality operators. + +Thu Apr 22 23:03:48 2004 Ossama Othman + + * address.cpp: + * address.h: + * octet.cpp: + * octet.h: + * oid.cpp: + * oid.h: + * target.cpp: + * target.h: + * vb.cpp: + * vb.h: + + Changed all return types for equality, relational and logical + operators to "bool", as is the norm for modern C++. + +Fri Aug 29 07:57:05 2003 Ossama Othman + + * octet.cpp (to_string_hex): + + Fixed "string literal converted to char *" warning. String + literals are now considered "const" by standard C++. + +Tue Mar 16 16:28:14 1999 David L. Levine + + * address.cpp, address.h, asn1.cpp, asn1.h, counter.cpp, ctr64.cpp, + gauge.cpp, integer.cpp, octet.cpp, oid.cpp, pdu.cpp, sagent.cpp, + snmp.cpp, target.cpp, timetick.cpp, transaction.cpp, vb.cpp, + wpdu.cpp: + replaced TRUE with 1, and FALSE and NULL with 0. Thanks to + Achint Sandhu for reporting that + TRUE and FALSE weren't define on his Linux platform. + + * wpdu.cpp (set_trap_info): wrapped condition with () to + avoid g++ warning about using result of an assignment as + the condition. + + * ctr64.cpp: made MAX64 unsigned, to avoid warning about it + being to big to be signed. + +Wed Jul 15 20:27:23 1998 Mike MacFaden + * asn1.cpp - Hien Nguyen fixed these bugs: + + Problem: The V1 trap agent-addr field tag value is OCTET STRING + instead of IPADDRESS, and the time stamp field tag value is INTEGER + instead of TIME TICKS. + + Fix: Change cmu_snmp::build() to pass in the correct type for agent-addr + and time stamp. + + 2. Problem: The V1 trap enterprise OID is corrupted after is was set in + wpdu constructor. + + Fix: In wpdu::set_trap_info(), the raw_pdu enterprise OID pointer was + assigned to the raw data of an enterprise Oid object on the stack. + Changed to perform an ACE_NEW_RETURN on the raw_pdu->enterprise and + perform a memcpy to copy the OID. The allocated memory is freed in + cmu_snmp::free_pdu() as currently implemented. + + 3. The V1 trap agent-addr field is currently initialized to "0.0.0.0". + I changed wpdu::set_trap_info to initialize it to the local host IP + Address. + + 4. I noticed that the memory allocation for OID in asn1.cpp using + ACE_NEW consistently use (OID length * size(oid)) as the size. + Shouldn't it be simply OID length ? Since there are numerous instances + of this usage in asn1.cpp, I have not fixed those. If you can double + check and fix these, I appreciate it. + + +Wed Aug 20 15:11:23 1997 Mike MacFaden + + * rebuilt Makefile using g++dep + + * pdu.h pdu.cpp initialization errors fixed + + * address.h address.cpp IpAddress::to_octet() added + +Fri Aug 1 19:23:52 1997 Mike MacFaden (mrm@mrm-ss20) + + * NOTES: This first version only tested on Solaris 2.5 + + * review classes for thread safety. Current thread design only + allows for one thread to safely access any ASNMP object created. + + * run purify test of get routine no -memory leaks. + + * verify both shared archive/static archive types work with + example programs + + * << Globals Changes >> + + * tested only archiver library version + + * reformat code to use one brace style. + + * changed all manifest constants defined as _XX to XX_ to stay out + of compiler namespace + + * change all OS calls to use ACE_OS:: portability layer, #include + + + * reformat code to use one consistent brace layout and redo + header using ACE + + * remove semicolons on member functions foo{}; - not necessary + + * make get() methods const member functions + + * removed unnecessary casts that looked like this: and revamped + all memory allocations via ACE_NEW macro + + new_oid = (SmiLPUINT32) new unsigned long [ smival.value.oid.len + + To + + ACE_NEW(new_oid, SmiUINT32[ smival.value.oid.len]) + + * Collapsed default constructors with constructors to constructors + with default arguments. + + * removed unused #include + + * Added ACE_TRACE() to classes + + * change get_printable() to to_string() - there will be more java + programmers in the future so this should be the first step... + + * removed ASYNC interface till it can be rebuilt using ACE patterns + + * Attempt to make interface more type strict but leaving generic + interfaces as escape hatch. Example: CTarget becomes UdpTarget + for UDP/IP based agents. + + * << Class Specific Changes >> + + * Oid class: + - remove char * routines, simplify class + - added suboid method and removed get_printable() overloads + + * CTarget class: + - renamed to UdpTarget. Stay out of Microsoft Namespace per MSJ + Article by Allen Hollub. + + * Varbind class: + - remove generic set_value for char,int, etc. Too easy to get + this wrong. Allow just types defined. + - added overload for equality operator (==) + - added new constructor to allow setting full vb state oid,value, exception + - add to_string() + + * Address class: + - change manifest constants to enums for address lengths, add IP V6 lens + + - add a netbios name class, still pretty worthless since I don't have spec + in front of me yet... + + - rewrite resolver calls to be thread safe and cleaner by moving to two + class (static) member functions: + + // thread safe routine to lookup ip address given hostname + // return <> 0 on error + static int resolve_to_addr(const char *hostname, in_addr& quad_addr); + + // thread safe routine to lookup name given ip address + // return <> 0 on error + static int resolve_to_hostname(const in_addr& quad_addr, char *hostname) + + * added some interrogation routines to class IpAddress: + is_loopback() const; + + * Ctr64 class: + - added constructor using long long datatype (needs to be made + portable to NT + + * Pdu class: add to_string() + + * Classes added wpdu class: + - a new adpater class between CMU and HP pdu, varbind data structures + + * transaction class: + - implement get/getnext timeout and retry logic using ACE + Reactor class, ACE_Time_Value + +Local Variables: +mode: change-log +add-log-time-format: (lambda () (progn (setq tz (getenv "TZ")) (set-time-zone-rule "UTC") (setq time (format-time-string "%a %b %e %H:%M:%S %Z %Y" (current-time))) (set-time-zone-rule tz) time)) +indent-tabs-mode: nil +End: diff --git a/ACE/ASNMP/asnmp/Makefile.am b/ACE/ASNMP/asnmp/Makefile.am new file mode 100644 index 00000000000..7b117dab9f6 --- /dev/null +++ b/ACE/ASNMP/asnmp/Makefile.am @@ -0,0 +1,66 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + +## Makefile.asnmp_lib.am + +noinst_LTLIBRARIES = libasnmp.la + +libasnmp_la_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP \ + -DASNMP_BUILD_DLL + +libasnmp_la_SOURCES = \ + address.cpp \ + asn1.cpp \ + counter.cpp \ + ctr64.cpp \ + gauge.cpp \ + integer.cpp \ + octet.cpp \ + oid.cpp \ + pdu.cpp \ + sagent.cpp \ + snmp.cpp \ + target.cpp \ + timetick.cpp \ + transaction.cpp \ + vb.cpp \ + wpdu.cpp + +noinst_HEADERS = \ + address.h \ + asn1.h \ + counter.h \ + ctr64.h \ + gauge.h \ + integer.h \ + octet.h \ + oid.h \ + pdu.h \ + sagent.h \ + snmp.h \ + target.h \ + timetick.h \ + transaction.h \ + vb.h \ + wpdu.h + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/ASNMP/asnmp/TODO b/ACE/ASNMP/asnmp/TODO new file mode 100644 index 00000000000..12beb91406b --- /dev/null +++ b/ACE/ASNMP/asnmp/TODO @@ -0,0 +1,25 @@ +This is the todo list aka wish list: feel free to add/implmement +Fri Aug 1 19:40:55 PDT 1997 + +0) collapse CMU and HP code - make this thing faster since it is really + slow and bulky... + +1) implement response time statistics collection so that timeout can vary based + on empirical response times + +2) Implement pdu fragmentation based on tooBig errors or app directed + Snmp::set_pdu_max_size() command + +3) implement async interface + +4) make templatized version to implement sync/nonsync (thread safe version) + +5) add V2c when a real agent is in the field that supports it + +6) Add DISMAN support when IETF approves the Expression Mib + +7) way too many procedural case stmts in the code... + +8) add compare_right() method to be orthogonal to oid class. + + diff --git a/ACE/ASNMP/asnmp/address.cpp b/ACE/ASNMP/asnmp/address.cpp new file mode 100644 index 00000000000..32f43b4ad4e --- /dev/null +++ b/ACE/ASNMP/asnmp/address.cpp @@ -0,0 +1,2705 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// address.cpp +// +// = DESCRIPTION +// The Vb class is an encapsulation of the snmp variable binding. +// This module contains the class definition for the variable binding (VB) +// class. The VB class is an encapsulation of a SNMP VB. A VB object is +// composed of one SNMP++ Oid and one SMI value. The Vb class utilizes Oid +// objects and thus requires the Oid class. To use this class, +// set oid, value then call valid() to be sure object was constructed correctly. +// +// = AUTHOR +// Peter E Mellquist +// Michael R MacFaden mrm@cisco.com - rework & ACE port +// ============================================================================ +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. + =====================================================================*/ + +#include "asnmp/address.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_arpa_inet.h" +#include "ace/OS_NS_netdb.h" +#include "ace/OS_NS_stdlib.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_ctype.h" +#include "ace/OS_Memory.h" + +ACE_RCSID(asnmp, address, "$Id$") + +//================================================================= +//======== Abstract Address Class Implementation ================== +//================================================================= + +// allow destruction of derived classes +Address::~Address() +{ +} + + +//----------------------------------------------------------------- +// is the address object valid? +int Address::valid() const +{ + return valid_flag; +} + +//------------[ Address::trim_white_space( char * ptr) ]------------ +// destructive trim white space +void Address::trim_white_space( char * ptr) +{ + char *tmp; + + tmp = ptr; + // skip leading white space + while (*tmp==' ')tmp++; + ACE_OS::strcpy(ptr,tmp); + + // find end of string + while ((*tmp!=' ') && (*tmp !=0)) tmp++; + if (*tmp!=0) *tmp=0; +} + +//TM: this is not used nor needed, remove? +//-----[ element access ]---------------------------------------------- +unsigned char& Address::operator[]( const int position) +{ + if ( position < MAX_ADDR_SZ) + return address_buffer[ position]; + else + return address_buffer[0]; +} + + +//----------------------------------------------------------------------- +// overloaded equivlence operator, are two addresses equal? +bool operator==( const Address &lhs, const Address &rhs) +{ + if ( ACE_OS::strcmp( (const char*) lhs, (const char*)rhs)==0) + return true; + else + return false; +} + +//----------------------------------------------------------------------- +// overloaded equivlence operator, are two addresses equal? +bool operator!=( const Address &lhs, const Address &rhs) +{ + return (!( lhs == rhs)); +} + + +//------------------------------------------------------------------ +// overloaded > operator, is a1 > a2 +bool operator>( const Address &lhs, const Address &rhs) +{ + if (ACE_OS::strcmp( (const char*) lhs, (const char*)rhs)>0) + return true; + else + return false; +} + +// overloaded >= operator, is a1 > a2 +bool operator>=( const Address &lhs,const Address &rhs) +{ + if (( lhs > rhs) || ( lhs == rhs)) + return true; + else + return false; +} + +// overloaded < operator, is a1 <= a2 +bool operator<=( const Address &lhs,const Address &rhs) +{ + if (( lhs < rhs) || ( lhs == rhs)) + return true; + else + return false; + +} + + +//----------------------------------------------------------------- +// overloaded < operator, is a1 < a2 +bool operator<( const Address &lhs, const Address &rhs) +{ + if (ACE_OS::strcmp( (const char*) lhs, (const char*)rhs)<0) + return true; + else + return false; +} + +//------------------------------------------------------------------ +// equivlence operator overloaded, are an address and a string equal? +bool operator==( const Address &lhs,const char *rhs) +{ + if (!rhs && !lhs.valid()) + return true; + if (ACE_OS::strcmp( (const char *) lhs, rhs)== 0) + return true; + else + return false; +} + +//------------------------------------------------------------------ +// not equal operator overloaded, are an address and a string not equal? +bool operator!=( const Address &lhs,const char *rhs) +{ + return (!( lhs == rhs)); +} + +//------------------------------------------------------------------ +// overloaded > , is a > inaddr +bool operator>( const Address &lhs,const char *rhs) +{ + if (!rhs) + return lhs.valid(); // if lhs valid then > 0, else invalid !> 0 + if (ACE_OS::strcmp( (const char *) lhs, rhs)> 0) + return true; + else + return false; +} + +//------------------------------------------------------------------ +// overloaded >= , is a >= inaddr +bool operator>=( const Address &lhs,const char *rhs) +{ + if (!rhs) + return true; // always >= 0 + if (ACE_OS::strcmp( (const char *) lhs, rhs)>= 0) + return true; + else + return false; +} + +//----------------------------------------------------------------- +// overloaded < , are an address and a string equal? +bool operator<( const Address &lhs,const char *rhs) +{ + if (!rhs) + return false; // always >= 0 + if (ACE_OS::strcmp( (const char *) lhs, rhs)< 0) + return true; + else + return false; +} + +//----------------------------------------------------------------- +// overloaded <= , is a <= inaddr +bool operator<=( const Address &lhs,const char *rhs) +{ + if (!rhs) + return !lhs.valid(); // invalid == 0, else valid > 0 + if (ACE_OS::strcmp( (const char *) lhs, rhs) <= 0) + return true; + else + return false; +} + + +//===================================================================== +//============ IPAddress Implementation =============================== +//===================================================================== + +//-----------[ syntax type ]---------------------------------------------- +SmiUINT32 IpAddress::get_syntax() +{ + return sNMP_SYNTAX_IPADDR; +} + +//-----[ IP Address copy constructor ]--------------------------------- +IpAddress::IpAddress(const IpAddress &ipaddr) + : Address (ipaddr) +{ + // always initialize what type this object is + smival.syntax = sNMP_SYNTAX_IPADDR; + smival.value.string.len =IPV4LEN; + smival.value.string.ptr = address_buffer; + + iv_friendly_name_[0] = 0; + iv_friendly_name_status_ = 0; + valid_flag = ipaddr.valid_flag; + if (valid_flag) { + ACE_OS::memcpy(address_buffer, ipaddr.address_buffer,IPV4LEN); + ACE_OS::strcpy( iv_friendly_name_, ipaddr.iv_friendly_name_); + } + + IpAddress::format_output(); +} + + +//-------[ default construct, an IP address with a string ]--------------------- +IpAddress::IpAddress( const char *inaddr): Address() +{ + // always initialize what type this object is + smival.syntax = sNMP_SYNTAX_IPADDR; + smival.value.string.len = IPV4LEN; + smival.value.string.ptr = address_buffer; + + if (ACE_OS::strlen(inaddr) == 0) { + + valid_flag = 0; + iv_friendly_name_[0] = 0; + iv_friendly_name_status_ = 0; + IpAddress::format_output(); + return; + } + + // parse_address initializes valid, address_buffer & iv_friendly_name_ + valid_flag = parse_address(inaddr); + IpAddress::format_output(); +} + + +//-----[ construct an IP address with a GenAddress ]--------------------- +IpAddress::IpAddress( const GenAddress &genaddr) +{ + // always initialize what type this object is + smival.syntax = sNMP_SYNTAX_IPADDR; + smival.value.string.len = IPV4LEN; + smival.value.string.ptr = address_buffer; + + valid_flag = 0; + iv_friendly_name_[0] = 0; + iv_friendly_name_status_ = 0; + // allow use of an ip or udp genaddress + if (genaddr.get_type() == type_ip) { + valid_flag = genaddr.valid(); + if ( valid_flag) { + // copy in the IP address data + IpAddress temp_ip( (const char *) genaddr); + *this = temp_ip; + } + } + else + if (genaddr.get_type() == type_udp) { + valid_flag = genaddr.valid(); + if ( valid_flag) { + // copy in the IP address data + UdpAddress temp_udp( (const char *) genaddr); + *this = temp_udp; + } + } + IpAddress::format_output(); +} + +//-----[ destructor ]-------------------------------------------------- +IpAddress::~IpAddress() +{ +} + +// assumes member data is word aligned to avoid sigbus +int IpAddress::is_loopback() const +{ + if (valid()) { + return (*(u_long *)&address_buffer == INADDR_LOOPBACK); + } + return 0; +} + +int IpAddress::is_multicast() const +{ + if (valid()) { + return (IN_MULTICAST(*(u_long *)&address_buffer)); + } + return 0; +} + +// Private addressess not are not assignable in the Internet, they are +// defined in RFC 1597 as: 10, 172.16, and 192.168.0 +// Some companies use them internally and apply NAT to allow translation +// instead of paying for ip networks. +// Cisco IOS devices can provide NAT aka Network Address Translation +// but don't expect SNMP based networks to handle cross-NAT address spaces. +// assumes storage in network byte order mrm@cisco.com 7/28/97 + +int IpAddress::is_private() const +{ + if (valid()) { + if (address_buffer[0] == 10) + return 1; + if (address_buffer[0] == 172 && address_buffer[1] == 16) + return 1; + if (address_buffer[0] == 192 && address_buffer[1] == 168 && + address_buffer[2] == 0) + return 1; + } + return 0; +} + + +// convert address into octet string format in network byte order +void IpAddress::to_octet(OctetStr& octet) const +{ + octet.set_data( smival.value.string.ptr, smival.value.string.len); +} + + +int IpAddress::is_broadcast() const +{ + if (valid()) { + return ( (*(u_long *)&address_buffer) & INADDR_BROADCAST); + } + return 0; +} + +//-----[ IP Address general = operator ]------------------------------- +SnmpSyntax& IpAddress::operator=( SnmpSyntax &val) +{ + // protect against assignment from itself + if ( this == &val ) + return *this; + + valid_flag = 0; // will get set 1 if really valid + iv_friendly_name_[0]=0; + + if (val.valid()) { + switch (val.get_syntax()) { + case sNMP_SYNTAX_IPADDR: + case sNMP_SYNTAX_OCTETS: + if (((IpAddress &)val).smival.value.string.len ==IPV4LEN) { + ACE_OS::memcpy(address_buffer, + ((IpAddress &)val).smival.value.string.ptr,IPV4LEN); + valid_flag = 1; + } + break; + + // NOTE: as a value add, other types could have "logical" + // mappings, i.e. integer32 and unsigned32 + } + } + IpAddress::format_output(); + return *this; +} + +//------[ assignment to another ipaddress object overloaded ]----------------- +IpAddress& IpAddress::operator=( const IpAddress &ipaddress) +{ + // protect against assignment from itself + if ( this == &ipaddress ) + return *this; + + valid_flag = ipaddress.valid_flag; + iv_friendly_name_[0]=0; + + if (valid_flag) { + ACE_OS::memcpy(address_buffer, ipaddress.address_buffer, IPV4LEN); + ACE_OS::strcpy(iv_friendly_name_, ipaddress.iv_friendly_name_); + } + IpAddress::format_output(); + return *this; +} + + +//--------[ create a new instance of this Value ]----------------------- +SnmpSyntax *IpAddress::clone() const +{ + return (SnmpSyntax *) new IpAddress(*this); +} + +//-------[ return the Fully Qualified Domain Name ]---------------------- +const char *IpAddress::resolve_hostname(int &status) +{ + if ((iv_friendly_name_[0] == 0) && valid_flag) + addr_to_friendly(); + status = iv_friendly_name_status_; + return iv_friendly_name_; +} + +// parse a dotted string +int IpAddress::parse_dotted_ipstring( const char *inaddr) +{ + char *ip_token; + int token_count=0; + unsigned int value; + int error_status = 0; + char temp[MAXHOSTNAMELEN +1]; // temp buffer for destruction + int z,w; + + // check len, an ip can never be bigger than 15 + // 123456789012345 + // XXX.XXX.XXX.XXX + if ( !inaddr || (ACE_OS::strlen( inaddr) > 30)) + return 0; + ACE_OS::strcpy( temp, inaddr); + trim_white_space( temp); + if ( ACE_OS::strlen( temp) > 15) + return 0; + + // must only have three dots + // strtok will not catch this ! + char *ptr = temp; + int dot_count = 0; + while ( *ptr != 0) { + if ( *ptr == '.') dot_count++; + ptr++; + } + if ( dot_count != 3) + return 0; + + // look for dot token separator + ip_token = ACE_OS::strtok( (char *) temp,"."); + + // while more tokens.. + while ( ip_token != 0) { + // verify that the token is all numerics + w = ACE_OS::strlen( ip_token); + if (w>3) + return 0; + for (z=0;z '9')) + return 0; + + value = ( unsigned int) ACE_OS::strtod(ip_token,0); + if (( value > 0)&& ( value <=255)) + address_buffer[token_count] = (unsigned char) value; + else + if (ACE_OS::strcmp(ip_token,"0")==0) + address_buffer[token_count]= (unsigned char) 0; + else + error_status = 1; + token_count++; + ip_token = ACE_OS::strtok( 0, "."); + } + + // gota be four in len + if ( token_count != 4) + return 0; + + // any parsing errors? + if ( error_status) + return 0; + + return 1; +} + +//-----[ IP Address parse Address ]--------------------------------- +int IpAddress::parse_address( const char *inaddr) +{ + // parse the input char array + // fill up internal buffer with four ip bytes + // set and return validity flag + + in_addr ipAddr; + char ds[MAXHOSTNAMELEN +1]; + + // intialize the friendly_name member variable + iv_friendly_name_[0] = 0; + iv_friendly_name_status_ = 0; + + // is this a dotted IP notation string or + // a friendly name + if ( parse_dotted_ipstring( inaddr)) { + + // since this is a valid dotted string + // don't do any DNS (Performance!) + return 1; + } + else { + int rc; + if ((rc = resolve_to_address(inaddr, ipAddr)) == 0) { + + // now lets check out the dotted string + ACE_OS::strncpy( ds, ACE_OS::inet_ntoa(ipAddr), MAXHOSTNAMELEN); + + if ( !parse_dotted_ipstring( ds)) + return 0; + + // save the friendly name + ACE_OS::strcpy( iv_friendly_name_, inaddr); + + } // end if lookup result + else { + iv_friendly_name_status_ = rc; + return 0; + } + } // end else not a dotted string + return 1; +} + +// using the currently defined address, do a DNS +// and try to fill up the name +int IpAddress::addr_to_friendly() +{ + in_addr ipAddr; + long result = ACE_OS::inet_addr(to_string()); + if (result == -1) + return -1; // expected a dotted quad! + + ipAddr.s_addr = result; + + // set iv_friendly_name_ from ipAddr + if (resolve_to_hostname(ipAddr, iv_friendly_name_) == 0) { + return 0; + } + else { +#if defined (VXWORKS) + // VxWorks doesn't have h_errno + iv_friendly_name_status_ = errno; +#else + iv_friendly_name_status_ = h_errno; +#endif /* VXWORKS */ + return iv_friendly_name_status_; + } +} + +// static aka class member function (1.2.3.4 -> foo.com) +int IpAddress::resolve_to_hostname(const in_addr& quad_addr, char *hostname) +{ + struct hostent lookupResult; + int loc_errno = 0; + ACE_HOSTENT_DATA buffer; + ACE_OS::memset(&lookupResult, 0, sizeof(struct hostent)); + ACE_OS::memset(&buffer, 0, sizeof(ACE_HOSTENT_DATA)); + + // reverse lookup (requires in-addr.arpa to be setup in DNS + if (ACE_OS::gethostbyaddr_r((const char *)&quad_addr.s_addr, IPV4LEN, + AF_INET, &lookupResult, buffer, &loc_errno)) { + + // verify right type of record + if (lookupResult.h_addrtype == AF_INET && + lookupResult.h_length == IPV4LEN) { + ACE_OS::strcpy( hostname, lookupResult.h_name); + // setup multiple entries + return 0; + } + else { + ACE_ASSERT(0); // todo add trace and debug and dump + return -1; // wrong resource record type + } + } + + return loc_errno; +} + +// static aka class member function (foo.com -> 1.2.3.4) +int IpAddress::resolve_to_address(const char *hostname, in_addr& quad_addr) +{ + struct hostent lookupResult; + ACE_HOSTENT_DATA buffer; + ACE_OS::memset(&buffer, 0, sizeof(ACE_HOSTENT_DATA)); + ACE_OS::memset(&lookupResult, 0, sizeof(struct hostent)); + int loc_errno = 0; + if (ACE_OS::gethostbyname_r( hostname, &lookupResult, buffer, &loc_errno)) { + if (lookupResult.h_length == sizeof(in_addr) && + lookupResult.h_addrtype == AF_INET) { + ACE_OS::memcpy((void *) &quad_addr, + (void *) lookupResult.h_addr_list[0], sizeof(in_addr)); + return 0; + } + else + return -1; // wrong address size + } + return loc_errno; +} + +//----[ IP address char * cast ]-------------------------------------- +IpAddress::operator const char *() const +{ + return (char *)output_buffer; +} + +//----[ IP address get char representation ]-------------------------- +const char * IpAddress::to_string() +{ + return (char *)output_buffer; +} + +//----[ IP address format output ]------------------------------------ +void IpAddress::format_output() +{ + // if valid format else null it + if ( valid_flag) + ACE_OS::sprintf( (char *) output_buffer,"%d.%d.%d.%d",address_buffer[0], + address_buffer[1], address_buffer[2], address_buffer[3]); + else + output_buffer[0] = 0; +} + +//------[ return the type ]---------------------------------- +addr_type IpAddress::get_type() const +{ + return type_ip; +} + +//----------------------------------------------------------------- +// logically and two IPaddresses and +// return the new one +void IpAddress::mask( const IpAddress& ipaddr) +{ + if ( this->valid() && ipaddr.valid()) { + this->address_buffer[0] = this->address_buffer[0] & ipaddr.address_buffer[0]; + this->address_buffer[1] = this->address_buffer[1] & ipaddr.address_buffer[1]; + this->address_buffer[2] = this->address_buffer[2] & ipaddr.address_buffer[2]; + this->address_buffer[3] = this->address_buffer[3] & ipaddr.address_buffer[3]; + format_output(); + } + +} + +//======================================================================= +//========== DNS Iterator Implementation ================================ +//======================================================================= + + +Address_Iter::Address_Iter(const char *hostname): valid_(0), count_(0), + entry_(0) +{ + ACE_OS::memset(&buffer_, 0, sizeof(ACE_HOSTENT_DATA)); + ACE_OS::memset(&lookupResult_, 0, sizeof(struct hostent)); + if (ACE_OS::inet_addr(hostname) == (unsigned long) -1) + valid_ = query_dns(hostname); + else { + ACE_ASSERT(0); // don't support dot-quad lookup yet + } + + // count number of hostnames + int n; + char **pc; + for (n = 0, pc = lookupResult_.h_addr_list; *pc != 0; ++n, ++pc); + count_ = n; // plus first one + entry_ = lookupResult_.h_addr_list; +} + +int Address_Iter::valid() const +{ + return (valid_ == 1); +} + +int Address_Iter::how_many_addresses() +{ + return count_; +} + +// return next entry, rc = 0, if entry is null return 0 +int Address_Iter::next(IpAddress& addr) +{ + if (!entry_ || *entry_ == 0) + return 1; + + IpAddress tmp(*entry_++); // return data + addr = tmp; + if (*entry_ == 0) + return 1; + return 0; +} + +// query DNS here +int Address_Iter::query_dns(const char *hostname) +{ + int loc_errno = 0; + if (ACE_OS::gethostbyname_r( hostname, &lookupResult_, buffer_, + &loc_errno)) { + if (lookupResult_.h_length == sizeof(IPV4LEN) && + lookupResult_.h_addrtype == AF_INET) { + return 0; + } + else + return -1; // wrong address size + } + return loc_errno; +} + +//======================================================================= +//========== Udp Address Implementation ================================= +//======================================================================= + +//-----------[ syntax type ]---------------------------------------------- +SmiUINT32 UdpAddress::get_syntax() +{ + return sNMP_SYNTAX_OCTETS; +} + +//-----------------[ construct an Udp address with another Udp address ]--- +UdpAddress::UdpAddress( const UdpAddress &udpaddr):IpAddress(udpaddr) +{ + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = UDPIPV4LEN; + smival.value.string.ptr = address_buffer; + + // Copy the port value + set_port(udpaddr.get_port()); + format_output(); +} + +// default constructor with a dotted string +UdpAddress::UdpAddress( const char *inaddr):IpAddress() +{ + if (ACE_OS::strlen(inaddr) == 0) { + // Inherits IP Address attributes + // Always initialize (override) what type this object is + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = UDPIPV4LEN; + smival.value.string.ptr = address_buffer; + set_port(0); + format_output(); + return; + } + + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = UDPIPV4LEN; + smival.value.string.ptr = address_buffer; + + valid_flag = parse_address( (char *)inaddr); + format_output(); +} + +//-----------------[ construct a UdpAddress from a GenAddress ]-------------- +UdpAddress::UdpAddress( const GenAddress &genaddr):IpAddress() +{ + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = UDPIPV4LEN; + smival.value.string.ptr = address_buffer; + + unsigned int port = 0; + valid_flag = 0; + + // allow use of an ip or udp genaddress + if (genaddr.get_type() == type_udp) + { + valid_flag = genaddr.valid(); + if ( valid_flag) + { + // copy in the IP address data + UdpAddress temp_udp( (const char *) genaddr); + *this = temp_udp; + + // port info since are making an UpAddress + port = temp_udp.get_port(); + } + } + else + if (genaddr.get_type() == type_ip) + { + valid_flag = genaddr.valid(); + if ( valid_flag) + { + // copy in the IP address data + IpAddress temp_ip( (const char *) genaddr); + *this = temp_ip; + } + } + set_port(port); + format_output(); +} + + +//--------[ construct a udp from an IpAddress ]-------------------------- +UdpAddress::UdpAddress( const IpAddress &ipaddr):IpAddress(ipaddr) +{ + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = UDPIPV4LEN; + smival.value.string.ptr = address_buffer; + + set_port(0); + format_output(); +} + + +//-----[ destructor ]-------------------------------------------------- +UdpAddress::~UdpAddress() +{ +} + + + // copy an instance of this Value +SnmpSyntax& UdpAddress::operator=( SnmpSyntax &val) +{ + // protect against assignment from itself + if ( this == &val ) + return *this; + + valid_flag=0; // will get set 1 if really valid + if (val.valid()){ + switch (val.get_syntax()){ + case sNMP_SYNTAX_IPADDR: + { + UdpAddress temp_udp(val.to_string()); + *this = temp_udp; // valid_flag is set by the udp assignment + } + break; + + case sNMP_SYNTAX_OCTETS: + if (((UdpAddress &)val).smival.value.string.len == UDPIPV4LEN){ + ACE_OS::memcpy(address_buffer, + ((UdpAddress &)val).smival.value.string.ptr, UDPIPV4LEN); + iv_friendly_name_[0] = 0; + valid_flag = 1; + } + break; + + // NOTE: as a value add, other types could have "logical" + // mappings, i.e. integer32 and unsigned32 + } + } + format_output(); + return *this; +} + + // assignment to another UdpAddress object overloaded +UdpAddress& UdpAddress::operator=( const UdpAddress &udpaddr) +{ + // protect against assignment from itself + if ( this == &udpaddr ) + return *this; + + (IpAddress &)*this = udpaddr; // use ancestor assignment for ipaddr value + set_port(udpaddr.get_port()); // copy to port value + format_output(); + return *this; +} + + +//-----[ IP Address parse Address ]--------------------------------- +int UdpAddress::parse_address( const char *inaddr) +{ + char buffer[MAXHOSTNAMELEN +1]; + + unsigned short port = 0; + if (inaddr && (ACE_OS::strlen( inaddr)< MAXHOSTNAMELEN +1)) + ACE_OS::strcpy( buffer, inaddr); + else { + valid_flag = 0; + return 0; + } + // look for port info @ the end of the string + // port can be delineated by a ':' or a '/' + // if neither are present then just treat it + // like a normal IpAddress + char *tmp; + tmp = ACE_OS::strstr( buffer,":"); + if (tmp==0) + tmp = ACE_OS::strstr(buffer,"/"); + + if ( tmp != 0) { + *tmp=0; // null terminator + tmp++; + port = ACE_OS::atoi( tmp); + } + + set_port(port); + return IpAddress::parse_address( buffer); +} + + +//----------[ create a new instance of this Value ]------------------------ +SnmpSyntax *UdpAddress::clone() const +{ + return (SnmpSyntax *) new UdpAddress(*this); +} + +//--------[ set the port number ]--------------------------------------- +void UdpAddress::set_port( const unsigned short p) +{ + unsigned short port_nbo = htons(p); + ACE_OS::memcpy(&address_buffer[IPV4LEN], &port_nbo, 2); + format_output(); +} + +//---------[ get the port number ]-------------------------------------- +unsigned short UdpAddress::get_port() const +{ + if (valid_flag) { + unsigned short port_nbo; + ACE_OS::memcpy(&port_nbo, &address_buffer[IPV4LEN], 2); + return ntohs(port_nbo); + } + else + return 0; // don't use uninitialized memory +} + +//------[ return the type ]-------------------------------------------- +addr_type UdpAddress::get_type() const +{ + return type_udp; +} + +//----[ UDP address char * cast ]-------------------------------------- +UdpAddress::operator const char *() const +{ + return (char *)output_buffer; +} + +//----[ UDP address get char representation ]-------------------------- +const char * UdpAddress::to_string() +{ + return (char *)output_buffer; +} + +// make format same as ACE_INET_Addr class (addr:port) +void UdpAddress::format_output() +{ + IpAddress::format_output(); // allow ancestors to format their buffers + + // if valid format else null it + if ( valid_flag) + ACE_OS::sprintf( (char *) output_buffer,"%s:%d", + IpAddress::to_string(), + get_port() ); + else + output_buffer[0] = 0; +} + + +//======================================================================= +//=========== Netbios Address Implementation ============================ +//======================================================================= + +void NetbiosAddress::format_output() +{ + if ( valid_flag) + ACE_OS::memcpy(output_buffer, address_buffer, NETBIOSLEN); + else + output_buffer[0] = 0; +} + +void NetbiosAddress::InitNBAddr(const char *inaddr) +{ + if (ACE_OS::strlen(inaddr) == 0) { + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = NETBIOSLEN; + smival.value.string.ptr = address_buffer; + + valid_flag=0; + NetbiosAddress::format_output(); + return; + } + + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = IPXLEN; + smival.value.string.ptr = address_buffer; + + valid_flag = parse_address( (char *) inaddr); + NetbiosAddress::format_output(); +} + +// TODO: how to handle addresses < 15 chars (zero out or pad with ' ') +NetbiosAddress::NetbiosAddress( const char *inaddr) +{ + InitNBAddr(inaddr); + +} + +NetbiosAddress::NetbiosAddress( const char *inaddr, nb_service svc) +{ + InitNBAddr(inaddr); + address_buffer[15] = svc; +} + +// TODO: go back over ms/ibm specs and verify this +// 16 chars, 15 can be any character, 16th is service number between 0 and 20 +// names beginning with IBM are reserved, and hence invalid +// and doubt IBM would use this class anyway +int NetbiosAddress::parse_address(const char *address) +{ + if (ACE_OS::strlen(address) > NETBIOSLEN) + return 0; // invalid + + if (ACE_OS::strncmp(address, "IBM", 3) == 0) + return 0; // invalid + + // addresses are free form but this check may need to be expose to user + // + //if (address[15] < nb_workstation || address[15] > nb_server) + // return 0; //invalid service type + + ACE_OS::memset(address_buffer, 0, NETBIOSLEN); + ACE_OS::memcpy(address_buffer, address, NETBIOSLEN); + + return 1; // valid +} + +NetbiosAddress::NetbiosAddress( const NetbiosAddress& nbaddr) + : Address (nbaddr) +{ + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = NETBIOSLEN; + smival.value.string.ptr = address_buffer; + + valid_flag = nbaddr.valid_flag; + if (valid_flag) + ACE_OS::memcpy(address_buffer, nbaddr.address_buffer, NETBIOSLEN); + NetbiosAddress::format_output(); +} + +NetbiosAddress::NetbiosAddress( const GenAddress& genaddr) +{ + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = NETBIOSLEN; + smival.value.string.ptr = address_buffer; + + valid_flag = 0; + // allow use of an ipx or ipxsock address + if ( (genaddr.get_type() == type_nb) ) { + valid_flag = genaddr.valid(); + if ( valid_flag) { + // copy in the Ipx address data + NetbiosAddress temp_nb( (const char *) genaddr); + *this = temp_nb; + } + } + NetbiosAddress::format_output(); +} + +NetbiosAddress::~NetbiosAddress() +{ +} + +const char *NetbiosAddress::to_string() +{ + return (char *)output_buffer; +} + +void NetbiosAddress::to_octet(OctetStr& octet) const +{ + octet.set_data( smival.value.string.ptr, smival.value.string.len); +} + +NetbiosAddress& NetbiosAddress::operator=( const NetbiosAddress &val) +{ + // protect against assignment from itself + if ( this == &val ) + return *this; + + valid_flag = 0; // will set to 1 if really valid + if (val.valid()) { + switch (((NetbiosAddress *) &val)->get_syntax()) { + case sNMP_SYNTAX_OCTETS: + ACE_OS::memcpy(address_buffer, + ((NetbiosAddress &)val).smival.value.string.ptr, NETBIOSLEN); + valid_flag = 1; + break; + } + } + NetbiosAddress::format_output(); + return *this; +} + +nb_service NetbiosAddress::get_service_type() const +{ + return (nb_service) address_buffer[15]; +} + +void NetbiosAddress::set_service_type(nb_service nbservice) +{ + address_buffer[15] = nbservice; + NetbiosAddress::format_output(); +} + +NetbiosAddress::operator const char *() const +{ + return (char *)output_buffer; +} + +SnmpSyntax& NetbiosAddress::operator=( SnmpSyntax &val) +{ + // protect against assignment from itself + if ( this == &val ) + return *this; + + valid_flag = 0; // will set to 1 if really valid + if (val.valid()) { + switch (val.get_syntax()) { + case sNMP_SYNTAX_OCTETS: + if (((NetbiosAddress &)val).smival.value.string.len == NETBIOSLEN) { + ACE_OS::memcpy(address_buffer, + ((NetbiosAddress &)val).smival.value.string.ptr, NETBIOSLEN); + valid_flag=1; + } + break; + } + } + NetbiosAddress::format_output(); + return *this; +} + +SnmpSyntax *NetbiosAddress::clone() const +{ + return (SnmpSyntax *) new NetbiosAddress(*this); +} + +SmiUINT32 NetbiosAddress::get_syntax() +{ + return sNMP_SYNTAX_OCTETS; +} + +addr_type NetbiosAddress::get_type() const +{ + return type_nb; +} + +//======================================================================= +//=========== IPX Address Implementation ================================ +//======================================================================= + +//-----------[ syntax type ]---------------------------------------------- +SmiUINT32 IpxAddress::get_syntax() +{ + return sNMP_SYNTAX_OCTETS; +} + + +//----------[ default constructor with a string arg ]--------------------------- +IpxAddress::IpxAddress( const char *inaddr):Address( ) +{ + if (ACE_OS::strlen(inaddr) == 0) { + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = IPXLEN; + smival.value.string.ptr = address_buffer; + + separator = '\0'; + valid_flag=0; + IpxAddress::format_output(); + return; + } + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = IPXLEN; + smival.value.string.ptr = address_buffer; + + separator = '\0'; + valid_flag = parse_address( (char *) inaddr); + IpxAddress::format_output(); +} + + +//-----[ IPX Address copy constructor ]---------------------------------- +IpxAddress::IpxAddress(const IpxAddress &ipxaddr) + : Address (ipxaddr) +{ + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = IPXLEN; + smival.value.string.ptr = address_buffer; + + separator = '\0'; + valid_flag = ipxaddr.valid_flag; + if (valid_flag) + ACE_OS::memcpy(address_buffer, ipxaddr.address_buffer, IPXLEN); + IpxAddress::format_output(); +} + + +//----[ construct an IpxAddress from a GenAddress ]--------------------------- +IpxAddress::IpxAddress( const GenAddress &genaddr) +{ + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = IPXLEN; + smival.value.string.ptr = address_buffer; + + valid_flag = 0; + // allow use of an ipx or ipxsock address + if ( (genaddr.get_type() == type_ipx) ) { + valid_flag = genaddr.valid(); + if ( valid_flag) { + // copy in the Ipx address data + IpxAddress temp_ipx( (const char *) genaddr); + *this = temp_ipx; + } + } + else + if ( (genaddr.get_type() == type_ipxsock) ) { + valid_flag = genaddr.valid(); + if ( valid_flag) { + // copy in the Ipx address data + IpxSockAddress temp_ipxsock( (const char *) genaddr); + *this = temp_ipxsock; + } + } + IpxAddress::format_output(); +} + + +//-----[ destructor ]-------------------------------------------------- +IpxAddress::~IpxAddress() +{ +} + + +//-----[ IPX Address general = operator ]------------------------------- +SnmpSyntax& IpxAddress::operator=( SnmpSyntax &val) +{ + // protect against assignment from itself + if ( this == &val ) + return *this; + + valid_flag=0; // will set to 1 if really valid + if (val.valid()){ + switch (val.get_syntax()){ + case sNMP_SYNTAX_OCTETS: + if (((IpxAddress &)val).smival.value.string.len == IPXLEN){ + ACE_OS::memcpy(address_buffer, ((IpxAddress &)val).smival.value.string.ptr, IPXLEN); + valid_flag=1; + } + break; + } + } + IpxAddress::format_output(); + return *this; +} + +//--------[ assignment to another IpAddress object overloaded ]---------- +IpxAddress& IpxAddress::operator=( const IpxAddress &ipxaddress) +{ + // protect against assignment from itself + if ( this == &ipxaddress ) + return *this; + + valid_flag = ipxaddress.valid_flag; + if (valid_flag) + ACE_OS::memcpy(address_buffer, ipxaddress.address_buffer, IPXLEN); + IpxAddress::format_output(); + return *this; +} + + +// create a new instance of this Value +SnmpSyntax *IpxAddress::clone() const +{ + return (SnmpSyntax *) new IpxAddress(*this); +} + +//-----[ IPX Address parse Address ]----------------------------------- +// Convert a string to a ten byte ipx address +// On success sets validity 1 or 0 +// +// IPX address format +// +// NETWORK ID| MAC ADDRESS +// 01 02 03 04|05 06 07 08 09 10 +// XX XX XX XX|XX XX XX XX XX XX +// +// Valid input format +// +// XXXXXXXX.XXXXXXXXXXXX +// Total length must be 21 +// Must have a separator in it +// First string length must be 8 +// Second string length must be 12 +// Each char must take on value 0-F +// +// +// Input formats recognized +// +// XXXXXXXX.XXXXXXXXXXXX +// XXXXXXXX:XXXXXXXXXXXX +// XXXXXXXX-XXXXXXXXXXXX +// XXXXXXXX.XXXXXX-XXXXXX +// XXXXXXXX:XXXXXX-XXXXXX +// XXXXXXXX-XXXXXX-XXXXXX +int IpxAddress::parse_address( const char *inaddr) +{ + char unsigned *str1,*str2; + char temp[30]; // don't destroy original + char unsigned *tmp; + size_t z, tmplen; + + + // save the orginal source + if (!inaddr || (ACE_OS::strlen( inaddr) >(sizeof(temp)-1))) return 0; + ACE_OS::strcpy( temp, inaddr); + trim_white_space( temp); + tmplen = ACE_OS::strlen(temp); + + // bad total length check + // 123456789012345678901 + // XXXXXXXX-XXXXXXXXXXXX 21 len + // + // XXXXXXXX-XXXXXX-XXXXXX 22 len + // need at least 21 chars and no more than 22 + if ( (tmplen <21) || (tmplen >22)) + return 0; + + // convert the string to all lower case + // this allows hex values to be in upper or lower + for (z=0;z< tmplen;z++) + temp[z] = ACE_OS::ace_tolower(temp[z]); + + // check for separated nodeid + // if found remove it + if (temp[15] == '-') + { + for(z=16;z= '0') && (*tmp <= '9'))|| // good 0-9 + ((*tmp >= 'a') && (*tmp <= 'f'))) // or a-f + tmp++; + else + return 0; + + // check out the MAC address + tmp = str2; + while( *tmp != 0) + if (((*tmp >= '0') && (*tmp <= '9'))|| // good 0-9 + ((*tmp >= 'a') && (*tmp <= 'f'))) // or a-f + tmp++; + else + return 0; + + // convert to target string + tmp = str1; + while ( *tmp != 0) + { + if (( *tmp >= '0') && ( *tmp <= '9')) + *tmp = *tmp - (char unsigned )'0'; + else + *tmp = *tmp - (char unsigned) 'a' + (char unsigned) 10; + tmp++; + } + + // network id portion + address_buffer[0] = (str1[0]*16) + str1[1]; + address_buffer[1] = (str1[2]*16) + str1[3]; + address_buffer[2] = (str1[4]*16) + str1[5]; + address_buffer[3] = (str1[6]*16) + str1[7]; + + tmp = str2; + while ( *tmp != 0) + { + if (( *tmp >= '0') && ( *tmp <= '9')) + *tmp = *tmp - (char unsigned) '0'; + else + *tmp = *tmp - (char unsigned) 'a'+ (char unsigned) 10; + tmp++; + } + + address_buffer[4] = (str2[0]*16) + str2[1]; + address_buffer[5] = (str2[2]*16) + str2[3]; + address_buffer[6] = (str2[4]*16) + str2[5]; + address_buffer[7] = (str2[6]*16) + str2[7]; + address_buffer[8] = (str2[8]*16) + str2[9]; + address_buffer[9] = (str2[10]*16) + str2[11]; + + return 1; +} + +//----[ IPX address char * cast ]-------------------------------------- +IpxAddress::operator const char *() const +{ + return (char *)output_buffer; +} + +//----[ IPX address get char representation ]-------------------------- +const char * IpxAddress::to_string() +{ + return (char *)output_buffer; +} + + +//----[ IPX address format output ]------------------------------------- +void IpxAddress::format_output() +{ + if ( valid_flag) + ACE_OS::sprintf((char *) output_buffer, + "%02x%02x%02x%02x%c%02x%02x%02x%02x%02x%02x", + address_buffer[0],address_buffer[1], + address_buffer[2],address_buffer[3],'-', + address_buffer[4],address_buffer[5], + address_buffer[6],address_buffer[7], + address_buffer[8],address_buffer[9]); + else + output_buffer[0] = 0; +} + + +// get the host id portion of an ipx address +int IpxAddress::get_hostid( MacAddress& mac) +{ + if ( valid_flag) + { + char buffer[18]; + ACE_OS::sprintf( buffer,"%02x:%02x:%02x:%02x:%02x:%02x", + address_buffer[4], + address_buffer[5], address_buffer[6], address_buffer[7], + address_buffer[8], address_buffer[9]); + MacAddress temp( buffer); + // mac = (SnmpSyntax&) temp; + mac = temp; + if ( mac.valid()) + return 1; + else + return 0; + } + else + return 0; +} + + +//------[ return the type ]---------------------------------- +addr_type IpxAddress::get_type() const +{ + return type_ipx; +} + +void IpxAddress::to_octet(OctetStr& octet) const +{ + octet.set_data( smival.value.string.ptr, smival.value.string.len); +} + + +//======================================================================== +//======== IpxSockAddress Implementation ================================= +//======================================================================== + +//-----------[ syntax type ]---------------------------------------------- +SmiUINT32 IpxSockAddress::get_syntax() +{ + return sNMP_SYNTAX_OCTETS; +} + +//-----------[ construct an IpxSockAddress with another IpxSockAddress]---- +IpxSockAddress::IpxSockAddress( const IpxSockAddress &ipxaddr):IpxAddress(ipxaddr) +{ + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = IPXSOCKLEN; + smival.value.string.ptr = address_buffer; + + // copy the socket value + set_socket(ipxaddr.get_socket()); + format_output(); +} + + +//---------------[ default construct a IpxSockAddress ]-------------- +IpxSockAddress::IpxSockAddress( const char *inaddr):IpxAddress() +{ + if (ACE_OS::strlen(inaddr) == 0) { + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = IPXSOCKLEN; + smival.value.string.ptr = address_buffer; + + set_socket(0); + format_output(); + return; + } + + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = IPXSOCKLEN; + smival.value.string.ptr = address_buffer; + + valid_flag = parse_address( (char *) inaddr); + format_output(); +} + + +//---------------[ construct a IpxSockAddress from a GenAddress ]---------- +IpxSockAddress::IpxSockAddress( const GenAddress &genaddr):IpxAddress() +{ + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = IPXSOCKLEN; + smival.value.string.ptr = address_buffer; + + valid_flag = 0; + unsigned short socketid = 0; + // allow use of an ipx or ipxsock address + if ( (genaddr.get_type() == type_ipx) ) + { + valid_flag = genaddr.valid(); + if ( valid_flag) + { + // copy in the Ipx address data + IpxAddress temp_ipx( (const char *) genaddr); + *this = temp_ipx; + } + } + else + if ( (genaddr.get_type() == type_ipxsock) ) + { + valid_flag = genaddr.valid(); + if ( valid_flag) + { + // copy in the Ipx address data + IpxSockAddress temp_ipxsock( (const char *) genaddr); + *this = temp_ipxsock; + // socketid info since are making an IpxSockAddress + socketid = temp_ipxsock.get_socket(); + } + } + set_socket(socketid); + format_output(); +} + + +//------------[ construct an IpxSockAddress from a IpxAddress ]-------------- +IpxSockAddress::IpxSockAddress( const IpxAddress &ipxaddr):IpxAddress(ipxaddr) +{ + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = IPXSOCKLEN; + smival.value.string.ptr = address_buffer; + + set_socket(0); + format_output(); +} + +//-----[ destructor ]-------------------------------------------------- +IpxSockAddress::~IpxSockAddress() +{ +} + +// copy an instance of this Value +SnmpSyntax& IpxSockAddress::operator=( SnmpSyntax &val) +{ + // protect against assignment from itself + if ( this == &val ) + return *this; + + valid_flag=0; // will set to 1 if really valid + if (val.valid()){ + switch (val.get_syntax()){ + case sNMP_SYNTAX_OCTETS: + { + // See if it is of the Ipx address family + // This handles IpxSockAddress == IpxAddress + IpxSockAddress temp_ipx(val.to_string()); + if (temp_ipx.valid()){ + *this = temp_ipx; // ipxsock = ipxsock + } + // See if it is an OctetStr of appropriate length + else if (((IpxSockAddress &)val).smival.value.string.len == IPXSOCKLEN){ + ACE_OS::memcpy(address_buffer, + ((IpxSockAddress &)val).smival.value.string.ptr, + IPXSOCKLEN); + valid_flag=1; + } + } + break; + } + } + format_output(); + return *this; +} + +// assignment to another IpAddress object overloaded +IpxSockAddress& IpxSockAddress::operator=( const IpxSockAddress &ipxaddr) +{ + // protect against assignment from itself + if ( this == &ipxaddr ) + return *this; + + (IpxAddress&)*this = ipxaddr; // use ancestor assignment for ipx addr + set_socket(ipxaddr.get_socket()); // copy socket value + format_output(); + return *this; +} + + +//----------[ create a new instance of this Value ]------------------------ +SnmpSyntax *IpxSockAddress::clone() const +{ + return (SnmpSyntax *) new IpxSockAddress(*this); +} + +//----[ IPXSock address char * cast ]-------------------------------------- +IpxSockAddress::operator const char *() const +{ + return (char *)output_buffer; +} + +//----[ IPXSock address get char representation ]-------------------------- +const char * IpxSockAddress::to_string() +{ + return (char *)output_buffer; +} + +//----[ IPX address format output ]------------------------------------- +void IpxSockAddress::format_output() +{ + IpxAddress::format_output(); // allow ancestors to format their buffers + + if ( valid_flag) + ACE_OS::sprintf((char *) output_buffer,"%s/%d", + IpxAddress::to_string(), get_socket()); + else + output_buffer[0] = 0; +} + +//-----[ IP Address parse Address ]--------------------------------- +int IpxSockAddress::parse_address( const char *inaddr) +{ + char buffer[MAXHOSTNAMELEN +1]; + unsigned short socketid=0; + + if (inaddr && (ACE_OS::strlen( inaddr)< MAXHOSTNAMELEN)) + ACE_OS::strcpy( buffer, inaddr); + else + { + valid_flag = 0; + return 0; + } + // look for port info @ the end of the string + // port can be delineated by a ':' or a '/' + // if neither are present then just treat it + // like a normal IpAddress + char *tmp; + tmp = ACE_OS::strstr( buffer,"/"); + + if (tmp != 0) + { + *tmp=0; // null terminator + tmp++; + socketid = ACE_OS::atoi( tmp); + } + set_socket(socketid); + return IpxAddress::parse_address( buffer); +} + + + +//-------------[ set the socket number ]---------------------------------- +void IpxSockAddress::set_socket( const unsigned short s) +{ + unsigned short sock_nbo = htons(s); + ACE_OS::memcpy(&address_buffer[IPXLEN], &sock_nbo, 2); +} + +//--------------[ get the socket number ]--------------------------------- +unsigned short IpxSockAddress::get_socket() const +{ + if (valid_flag) + { + unsigned short sock_nbo; + ACE_OS::memcpy(&sock_nbo, &address_buffer[IPXLEN], 2); + return ntohs(sock_nbo); + } + else + return 0; // don't use uninitialized memory +} + +//------[ return the type ]---------------------------------------------- +addr_type IpxSockAddress::get_type() const +{ + return type_ipxsock; +} + + +//======================================================================== +//======== MACAddress Implementation ===================================== +//======================================================================== + +//-----------[ syntax type ]---------------------------------------------- +SmiUINT32 MacAddress::get_syntax() +{ + return sNMP_SYNTAX_OCTETS; +} + +//-----[ MAC Address copy constructor ]--------------------------------- +MacAddress::MacAddress(const MacAddress &macaddr) + : Address (macaddr) +{ + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = MACLEN; + smival.value.string.ptr = address_buffer; + + valid_flag = macaddr.valid_flag; + if (valid_flag) + ACE_OS::memcpy(address_buffer, macaddr.address_buffer, MACLEN); + format_output(); +} + +//---------[ constructor with a string argument ]------------------------- +MacAddress::MacAddress( const char *inaddr):Address( ) +{ + if (ACE_OS::strlen(inaddr) == 0) { + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = MACLEN; + smival.value.string.ptr = address_buffer; + + valid_flag=0; + format_output(); + return; + } + + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = MACLEN; + smival.value.string.ptr = address_buffer; + + valid_flag = parse_address( (char *) inaddr); + format_output(); +} + +//-----[ construct a MacAddress from a GenAddress ]------------------------ +MacAddress::MacAddress( const GenAddress &genaddr) +{ + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = MACLEN; + smival.value.string.ptr = address_buffer; + + valid_flag = 0; + // allow use of mac address + if (genaddr.get_type() == type_mac) + { + valid_flag = genaddr.valid(); + if ( valid_flag) + { + // copy in the Mac address data + MacAddress temp_mac( (const char *) genaddr); + *this = temp_mac; + } + } + format_output(); +} + +//-----[ destructor ]-------------------------------------------------- +MacAddress::~MacAddress() +{ +} + +//---------[ MacAddress clone ]------------------------------------------- +SnmpSyntax *MacAddress::clone() const +{ + return (SnmpSyntax *) new MacAddress(*this); +} + +//------[ assignment to another ipaddress object overloaded ]-------------- +MacAddress& MacAddress::operator=( const MacAddress &macaddress) +{ + // protect against assignment from itself + if ( this == &macaddress ) + return *this; + + valid_flag = macaddress.valid_flag; + if (valid_flag) + ACE_OS::memcpy(address_buffer, macaddress.address_buffer, MACLEN); + format_output(); + return *this; +} + + + +//-----[ MAC Address general = operator ]--------------------------------- +SnmpSyntax& MacAddress::operator=( SnmpSyntax &val) +{ + // protect against assignment from itself + if ( this == &val ) + return *this; + + valid_flag=0; // will set to 1 if really valid + if (val.valid()){ + switch (val.get_syntax()){ + case sNMP_SYNTAX_OCTETS: + if (((MacAddress &)val).smival.value.string.len == MACLEN){ + ACE_OS::memcpy(address_buffer, + ((MacAddress &)val).smival.value.string.ptr, MACLEN); + valid_flag=1; + } + break; + } + } + format_output(); + return *this; +} + +//-----[ MAC Address parse Address ]-------------------------------------- +// Convert a string to a six byte MAC address +// On success sets validity 1 or 0 +// +// MAC address format +// +// MAC ADDRESS +// 01 02 03 04 05 06 +// XX:XX:XX:XX:XX:XX +// Valid input format +// +// XXXXXXXXXXXX +// Total length must be 17 +// Each char must take on value 0-F +// +// +int MacAddress::parse_address( const char *inaddr) +{ + char temp[MAXHOSTNAMELEN +1]; // don't destroy original + char unsigned *tmp; + size_t z; + + + // save the orginal source + if ( !inaddr || (ACE_OS::strlen( inaddr) > 30)) return 0; + ACE_OS::strcpy( temp, inaddr); + trim_white_space( temp); + + // bad total length check + if ( ACE_OS::strlen(temp) != 17) + return 0; + + // check for colons + if ((temp[2] != ':')||(temp[5] != ':')||(temp[8]!=':')||(temp[11]!=':') + ||(temp[14] !=':')) + return 0; + + // strip off the colons + tmp = ( unsigned char *) temp; + int i = 0; + while ( *tmp != 0) + { + if (*tmp != ':') + { + temp[i] = *tmp; + i++; + } + tmp++; + } + temp[i] = 0; + + // convert to lower + for(z=0;z= '0') && (*tmp <= '9'))|| // good 0-9 + ((*tmp >= 'a') && (*tmp <= 'f'))) // or a-f + tmp++; + else + return 0; + + // convert to target string + tmp = (unsigned char *) temp; + while ( *tmp != 0) + { + if (( *tmp >= '0') && ( *tmp <= '9')) + *tmp = *tmp - (char unsigned )'0'; + else + *tmp = *tmp - (char unsigned) 'a' + (char unsigned) 10; + tmp++; + } + + address_buffer[0] = (temp[0]*16) + temp[1]; + address_buffer[1] = (temp[2]*16) + temp[3]; + address_buffer[2] = (temp[4]*16) + temp[5]; + address_buffer[3] = (temp[6]*16) + temp[7]; + address_buffer[4] = (temp[8]*16) + temp[9]; + address_buffer[5] = (temp[10]*16) + temp[11]; + + return 1; +} + +//----[ MAC address char * cast ]-------------------------------------- +MacAddress::operator const char *() const +{ + return (char *)output_buffer; +} +//----[ MAC address get char representation ]-------------------------- +const char * MacAddress::to_string() +{ + return (char *)output_buffer; +} + +//----[ MAC address format output ]--------------------------------- +void MacAddress::format_output() +{ + if ( valid_flag) + ACE_OS::sprintf(output_buffer,"%02x:%02x:%02x:%02x:%02x:%02x",address_buffer[0], + address_buffer[1],address_buffer[2],address_buffer[3], + address_buffer[4],address_buffer[5]); + else + output_buffer[0] = 0; +} + +//------[ return the type ]---------------------------------- +addr_type MacAddress::get_type() const +{ + return type_mac; +} + + +unsigned int MacAddress::hashFunction() const +{ + return ((((address_buffer[0] << 8) + address_buffer[1]) * HASH0LEN) + + (((address_buffer[2] << 8) + address_buffer[3]) * HASH1LEN) + + (((address_buffer[4] << 8) + address_buffer[5]) * HASH2LEN)); +} + +void MacAddress::to_octet(OctetStr& octet) const +{ + octet.set_data( smival.value.string.ptr, smival.value.string.len); +} + +//======================================================================== +//========== Generic Address Implementation ============================== +//======================================================================== + +//-----------[ get the syntax]---------------------------------------------- +SmiUINT32 GenAddress::get_syntax() +{ + if (address != 0) + return address->get_syntax(); + + return sNMP_SYNTAX_NULL; +} + +void GenAddress::init_smi() +{ + smival.syntax = sNMP_SYNTAX_NULL; // to be overridden + smival.value.string.len = 0; // to be overridden + smival.value.string.ptr = address_buffer; // constant +} + +//-----------[ constructor with a string argument ]---------------------- +GenAddress::GenAddress( const char *addr): address(0) +{ + valid_flag = 0; + // initialize SMI info + // BOK: smival is generally not used for GenAddress, but + // we need this to be a replica of the real address' + // smival info so that ::operator=SnmpSyntax + // will work. + init_smi(); + + if (addr && ACE_OS::strlen(addr) == 0) { + format_output(); + return; + } + + parse_address(addr); + + // Copy real address smival info into GenAddr smival + // BOK: smival is generally not used for GenAddress, but + // we need this to be a replica of the real address' + // smival info so that ::operator=SnmpSyntax + // will work. + if ( valid_flag ) { + smival.syntax = ((GenAddress *)address)->smival.syntax; + smival.value.string.len = + ((GenAddress *)address)->smival.value.string.len; + ACE_OS::memcpy(smival.value.string.ptr, + ((GenAddress *)address)->smival.value.string.ptr, + (size_t)smival.value.string.len); + } +} + +//-----------[ constructor with an Address argument ]-------------------- +GenAddress::GenAddress( const Address &addr): address(0) +{ + valid_flag = 0; + + // initialize SMI info + // BOK: this is generally not used for GenAddress, + // but we need this to be a replica of the real address' + // smival info so that operator=SnmpSyntax will work. + init_smi(); + // make sure that the object is valid + if (!addr.valid()) { + format_output(); + return; + } + + address = (Address*)addr.clone(); + if (address) + valid_flag = address->valid(); + + // Copy real address smival info into GenAddr smival + // BOK: smival is generally not used for GenAddress, but + // we need this to be a replica of the real address' + // smival info so that ::operator=SnmpSyntax + // will work. + if ( valid_flag ) { + smival.syntax = address->get_syntax(); + smival.value.string.len = + ((GenAddress *)address)->smival.value.string.len; + ACE_OS::memcpy(smival.value.string.ptr, + ((GenAddress *)address)->smival.value.string.ptr, + (size_t)smival.value.string.len); + } + + format_output(); +} + +//-----------------[ constructor with another GenAddress object ]------------- +GenAddress::GenAddress( const GenAddress &addr) + : Address (addr), + address(0) +{ + valid_flag = 0; + + // initialize SMI info + // BOK: this is generally not used for GenAddress, + // but we need this to be a replica of the real address' + // smival info so that operator=SnmpSyntax will work. + init_smi(); + + // make sure that the object is valid + if (!addr.valid_flag) { + format_output(); + return; + } + + address = (Address *)addr.address->clone(); + if (address) + valid_flag = address->valid(); + + // Copy real address smival info into GenAddr smival + // BOK: smival is generally not used for GenAddress, but + // we need this to be a replica of the real address' + // smival info so that ::operator=SnmpSyntax + // will work. + if ( valid_flag ) { + smival.syntax = ((GenAddress *)address)->smival.syntax; + smival.value.string.len = + ((GenAddress *)address)->smival.value.string.len; + ACE_OS::memcpy(smival.value.string.ptr, + ((GenAddress *)address)->smival.value.string.ptr, + (size_t)smival.value.string.len); + } + + format_output(); +} + +//----------[ destructor ] ------------------------------------------------ +GenAddress::~GenAddress() +{ + if ( address != 0) + delete address; +} + +//----------[ create a new instance of this Value ]------------------------ +SnmpSyntax *GenAddress::clone() const +{ + return (SnmpSyntax *) new GenAddress(*this); +} + +//------[ assignment GenAddress = GenAddress ]----------------------------- +GenAddress& GenAddress::operator=( const GenAddress &addr) +{ + // protect against assignment from itself + if ( this == &addr ) + return *this; + + valid_flag = 0; + if (address) { + delete address; + address = 0; + } + + if (addr.address) + address = (Address *)(addr.address)->clone(); + + if (address) + valid_flag = address->valid(); + + // Copy real address smival info into GenAddr smival + // BOK: smival is generally not used for GenAddress, but + // we need this to be a replica of the real address' + // smival info so that ::operator=SnmpSyntax + // will work. + if ( valid_flag ) { + smival.syntax = ((GenAddress *)address)->smival.syntax; + smival.value.string.len = + ((GenAddress *)address)->smival.value.string.len; + ACE_OS::memcpy(smival.value.string.ptr, + ((GenAddress *)address)->smival.value.string.ptr, + (size_t)smival.value.string.len); + } + + format_output(); + return *this; +} + + +//------[ assignment GenAddress = any SnmpSyntax ]----------------------- +SnmpSyntax& GenAddress::operator=( SnmpSyntax &val) +{ + // protect against assignment from itself + if ( this == &val ) + return *this; + + valid_flag = 0; // will get set to 1 if really valid + if ( address != 0) { + delete address; + address = 0; + } + + if (val.valid()) { + switch ( val.get_syntax() ) { + //-----[ ip address case ]------------- + // BOK: this case shouldn't be needed since there is an explicit + // GenAddr=Address assignment that will override this assignment. + // Left here for posterity. + case sNMP_SYNTAX_IPADDR: + { + address = (Address *)val.clone(); + if (address) + valid_flag = address->valid(); + } + break; + + //-----[ udp address case ]------------ + //-----[ ipx address case ]------------ + //-----[ mac address case ]------------ + // BOK: This is here only to support GenAddr = primitive OctetStr. + // The explicit GenAddr=Address assignment will handle the cases + // GenAddr = [UdpAdd|IpxAddr|IpxSock|MacAddr|DecNetAddr|NetbiosAddr|AppleTlk]. + // Note, using the heuristic of octet str len to determine type of + // address to create is not accurate when address lengths are equal + // (e.g., UDPIPV4LEN == MACLEN). It gets worse if we add AppleTalk or + // OSI which use variable length addresses! assume AppleTalk as used in IOS Mibs + // is defined in CISCO-TC.my as fixed length of 3 octets + + case sNMP_SYNTAX_OCTETS: + { + unsigned long val_len; + val_len = ((GenAddress &)val).smival.value.string.len; + + if (val_len == UDPIPV4LEN) { + ACE_NEW_RETURN(address, UdpAddress, *this); + } + else if (val_len ==IPV4LEN) { + ACE_NEW_RETURN(address, IpAddress, *this); + } + else if (val_len == IPXLEN) { + ACE_NEW_RETURN(address, IpxAddress, *this); + } + else if (val_len == IPXSOCKLEN) { + ACE_NEW_RETURN(address, IpxSockAddress, *this); + } + else if (val_len == MACLEN) { + ACE_NEW_RETURN(address, MacAddress, *this); + } + else if (val_len == APPLETKLEN) { + ACE_NEW_RETURN(address, AppleTalkAddress, *this); + } + else if (val_len == DECNETLEN) { + ACE_NEW_RETURN(address, DecNetAddress, *this); + } + else if (val_len == NETBIOSLEN) { + ACE_NEW_RETURN(address, DecNetAddress, *this); + } + + if (address) { + *address = val; + valid_flag = address->valid(); + } + } + break; + } // end switch + } + + // Copy real address smival info into GenAddr smival + // BOK: smival is generally not used for GenAddress, but + // we need this to be a replica of the real address' + // smival info so that ::operator=SnmpSyntax + // will work. + if ( valid_flag ) { + smival.syntax = ((GenAddress *)address)->smival.syntax; + smival.value.string.len = + ((GenAddress *)address)->smival.value.string.len; + ACE_OS::memcpy(smival.value.string.ptr, + ((GenAddress *)address)->smival.value.string.ptr, + (size_t)smival.value.string.len); + } + + format_output(); + return *this; +} + + +// redefined parse address for macs +// TODO: Add netbios, appletalk, and decnet addresses here +int GenAddress::parse_address( const char *addr) +{ + if ( address != 0) + delete address; + + // try to create each of the addresses until the correct one + // is found + +//BOK: Need to try IPX Sock and IPX before UDP since on Win32, +// gethostbyname() seems to think the ipx network number +// portion is a valid ipaddress string... stupid WinSOCK! + + // ipxsock address + ACE_NEW_RETURN(address, IpxSockAddress( addr), -1); + valid_flag = address->valid(); + if ( valid_flag && ((IpxSockAddress*)address)->get_socket()) { + format_output(); + return 1; // ok its an ipxsock address + } + // otherwise delete it and try another + delete address; + + // ipx address + ACE_NEW_RETURN(address, IpxAddress( addr), -1); + valid_flag = address->valid(); + if ( valid_flag) { + format_output(); + return 1; // ok its an ipx address + } + // otherwise delete it and try another + delete address; + +//TM: Must try the derived classes first...one pitfall of the +//following solution is if someone creates with a port/socket of 0 the +//class will get demoted to ip/ipx. The only proper way to do this is +//to parse the strings ourselves. + + // udp address + ACE_NEW_RETURN(address, UdpAddress( addr), -1); + valid_flag = address->valid(); + if ( valid_flag && ((UdpAddress*)address)->get_port()) { + format_output(); + return 1; // ok its a udp address + } + + // otherwise delete it and try another + delete address; + + // ip address + ACE_NEW_RETURN(address, IpAddress( addr), -1); + valid_flag = address->valid(); + if ( valid_flag) + { + format_output(); + return 1; // ok its an ip address + } + // otherwise delete it and try another + delete address; + + // mac address + ACE_NEW_RETURN(address, MacAddress( addr), -1); + valid_flag = address->valid(); + if ( valid_flag) { + format_output(); + return 1; // ok, its a mac + } + + // guess by length of argument the type of address + switch (ACE_OS::strlen(addr)) { + case NETBIOSLEN: + ACE_NEW_RETURN(address, NetbiosAddress( addr), -1); + valid_flag = address->valid(); + if ( valid_flag) { + format_output(); + return 1; // ok, its a mac + } + break; + + case APPLETKLEN: + ACE_NEW_RETURN(address, AppleTalkAddress( addr), -1); + valid_flag = address->valid(); + if ( valid_flag) { + format_output(); + return 1; // ok, its a mac + } + break; + + case DECNETLEN: + ACE_NEW_RETURN(address, DecNetAddress( addr), -1); + valid_flag = address->valid(); + if ( valid_flag) { + format_output(); + return 1; // ok, its a mac + } + break; + + } + // otherwise its invalid + delete address; + address = 0; + format_output(); + return 0; +} + +GenAddress::operator const char *() const +{ + if ( address != 0) + return (const char *)*address; // pass thru + else + return (char *)output_buffer; +} + +// to_string form of the contained address +const char * GenAddress::to_string() +{ + if ( address != 0) + return address->to_string(); // pass thru + else + return (char *)output_buffer; +} + +// format output +void GenAddress::format_output() +{ + output_buffer[0] = '\0'; +} + +//------[ return the type ]---------------------------------- +addr_type GenAddress::get_type() const +{ + if (!valid()) + return type_invalid; + else + return address->get_type(); +} + +// call the particular type class here +void GenAddress::to_octet(OctetStr& octet) const +{ + if (!valid()) + return; + + address->to_octet(octet); +} + +//------------------------------------------------------------------------ +//---------[ DecNet Address Class ]--------------------------------------- +//------------------------------------------------------------------------ + +DecNetAddress::DecNetAddress( const char *inaddr): Address() +{ + if (ACE_OS::strlen(inaddr) == 0) { + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = DECNETLEN; + smival.value.string.ptr = address_buffer; + + valid_flag=0; + DecNetAddress::format_output(); + return; + } + + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = DECNETLEN; + smival.value.string.ptr = address_buffer; + + valid_flag = parse_address( (char *) inaddr); + DecNetAddress::format_output(); +} + +DecNetAddress::DecNetAddress( const DecNetAddress& addr) + : Address (addr) +{ +} + +DecNetAddress::DecNetAddress( const GenAddress& genaddr) +{ + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = DECNETLEN; + smival.value.string.ptr = address_buffer; + + valid_flag = 0; + // allow use of an ipx or ipxsock address + if ( (genaddr.get_type() == type_decnet) ) { + valid_flag = genaddr.valid(); + if ( valid_flag) { + // copy in the Ipx address data + DecNetAddress temp_ipx( (const char *) genaddr); + *this = temp_ipx; + } + } + DecNetAddress::format_output(); +} + +DecNetAddress::~DecNetAddress() +{ +} + +const char *DecNetAddress::to_string() +{ + return (char *)output_buffer; +} + +DecNetAddress& DecNetAddress::operator=( const DecNetAddress &decaddr) +{ + // protect against assignment from itself + if ( this == &decaddr ) + return *this; + valid_flag = decaddr.valid_flag; + if (valid_flag) + ACE_OS::memcpy(address_buffer, decaddr.address_buffer, DECNETLEN); + format_output(); + return *this; +} + +void DecNetAddress::to_octet(OctetStr& octet) const +{ + octet.set_data( smival.value.string.ptr, smival.value.string.len); +} + +DecNetAddress::operator const char *() const +{ + return (char *)output_buffer; +} + +SmiUINT32 DecNetAddress::get_syntax() +{ + return sNMP_SYNTAX_OCTETS; +} + +SnmpSyntax& DecNetAddress::operator=( SnmpSyntax &val) +{ + // protect against assignment from itself + if ( this == &val ) + return *this; + + valid_flag = 0; // will get set 1 if really valid + + if (val.valid()) { + if (((DecNetAddress &)val).smival.value.string.len ==DECNETLEN) { + ACE_OS::memcpy(address_buffer, + ((DecNetAddress &)val).smival.value.string.ptr, DECNETLEN); + valid_flag = 1; + } + } + DecNetAddress::format_output(); + return *this; +} + +SnmpSyntax *DecNetAddress::clone() const +{ + return (SnmpSyntax *) new DecNetAddress(*this); +} + +addr_type DecNetAddress::get_type() const +{ + return type_decnet; +} + +void DecNetAddress::format_output() +{ + // if valid format else null it + if ( valid_flag) + ACE_OS::sprintf( (char *) output_buffer,"%d.%d",address_buffer[0], + address_buffer[1]); + else + output_buffer[0] = 0; +} + +int DecNetAddress::parse_address( const char *address) +{ + if (ACE_OS::strlen(address) > DECNETLEN) + return 0; // invalid + + ACE_OS::memset(address_buffer, 0, DECNETLEN); + ACE_OS::memcpy(address_buffer, address, DECNETLEN); + + return 1; // valid +} + + +//------------------------------------------------------------------------ +//---------[ AppleTalk Address Class ]------------------------------------ +//------------------------------------------------------------------------ + +AppleTalkAddress::AppleTalkAddress( const char *inaddr): Address() +{ + if (ACE_OS::strlen(inaddr) == 0) { + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = APPLETKLEN; + smival.value.string.ptr = address_buffer; + + valid_flag=0; + AppleTalkAddress::format_output(); + return; + } + + // always initialize SMI info + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = APPLETKLEN; + smival.value.string.ptr = address_buffer; + + valid_flag = parse_address( (char *) inaddr); + AppleTalkAddress::format_output(); +} +AppleTalkAddress::AppleTalkAddress( const AppleTalkAddress& addr) + : Address (addr) +{ +} + +AppleTalkAddress::AppleTalkAddress( const GenAddress& genaddr) +{ + smival.syntax = sNMP_SYNTAX_OCTETS; + smival.value.string.len = APPLETKLEN; + smival.value.string.ptr = address_buffer; + + valid_flag = 0; + // allow use of an ipx or ipxsock address + if ( (genaddr.get_type() == type_atk) ) { + valid_flag = genaddr.valid(); + if ( valid_flag) { + // copy in the Ipx address data + AppleTalkAddress temp_ipx( (const char *) genaddr); + *this = temp_ipx; + } + } + AppleTalkAddress::format_output(); +} + +AppleTalkAddress::~AppleTalkAddress() +{ +} + +const char *AppleTalkAddress::to_string() +{ + return (char *)output_buffer; +} + +AppleTalkAddress& AppleTalkAddress::operator=( const AppleTalkAddress &ataddr) +{ + // protect against assignment from itself + if ( this == &ataddr ) + return *this; + valid_flag = ataddr.valid_flag; + if (valid_flag) + ACE_OS::memcpy(address_buffer, ataddr.address_buffer, APPLETKLEN); + format_output(); + return *this; +} + +void AppleTalkAddress::to_octet(OctetStr& octet) const +{ + octet.set_data( smival.value.string.ptr, smival.value.string.len); +} + +AppleTalkAddress::operator const char *() const +{ + return (char *)output_buffer; +} + +SmiUINT32 AppleTalkAddress::get_syntax() +{ + return sNMP_SYNTAX_OCTETS; +} + +SnmpSyntax& AppleTalkAddress::operator=( SnmpSyntax &val) +{ + // protect against assignment from itself + if ( this == &val ) + return *this; + + valid_flag = 0; // will get set 1 if really valid + + if (val.valid()) { + if (((AppleTalkAddress &)val).smival.value.string.len ==APPLETKLEN) { + ACE_OS::memcpy(address_buffer, + ((AppleTalkAddress &)val).smival.value.string.ptr,APPLETKLEN); + valid_flag = 1; + } + } + AppleTalkAddress::format_output(); + return *this; +} + +SnmpSyntax *AppleTalkAddress::clone() const +{ + return (SnmpSyntax *) new AppleTalkAddress(*this); +} + +addr_type AppleTalkAddress::get_type() const +{ + return type_atk; +} + +void AppleTalkAddress::format_output() +{ + // if valid format else null it + if ( valid_flag) + ACE_OS::sprintf( (char *) output_buffer,"%d.%d.%d", address_buffer[0], + address_buffer[1], address_buffer[3]); + else + output_buffer[0] = 0; +} + +int AppleTalkAddress::parse_address( const char *address) +{ + if (ACE_OS::strlen(address) > APPLETKLEN) + return 0; // invalid + + ACE_OS::memset(address_buffer, 0, APPLETKLEN); + ACE_OS::memcpy(address_buffer, address, APPLETKLEN); + + return 1; // valid +} + +char AppleTalkAddress::get_host_address() const +{ + return address_buffer[2]; +} + +void AppleTalkAddress::set_host_address(const char host) +{ + address_buffer[2] = host; +} + +short AppleTalkAddress::get_net_address() const +{ + short net; + ACE_OS::memcpy(&net, address_buffer, APPLETKLEN - 1); + return net; +} + +void AppleTalkAddress::set_net_address(const short atknet) +{ + ACE_OS::memcpy(address_buffer, &atknet, APPLETKLEN -1); +} diff --git a/ACE/ASNMP/asnmp/address.h b/ACE/ASNMP/asnmp/address.h new file mode 100644 index 00000000000..f8131c19485 --- /dev/null +++ b/ACE/ASNMP/asnmp/address.h @@ -0,0 +1,845 @@ + + +#ifndef ADDRESS_ +#define ADDRESS_ +//============================================================================= +/** + * @file address.h + * + * $Id$ + * + * Address class definition. Encapsulates various network + * addresses into easy to use, safe and portable classes. + * + * + * @author Peter E Mellquist + */ +//============================================================================= + + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +//----[ includes ]----------------------------------------------------- +// ACE OS Adaption layer +#include "ace/os_include/netinet/os_in.h" +#include "ace/os_include/os_netdb.h" +#include "ace/Log_Msg.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "asnmp/smival.h" +#include "asnmp/octet.h" + +//----[ enumerated types ] -------------------------------- +enum address_lengths { + IPV4LEN=4, + UDPIPV4LEN=6, + IPV6LEN=16, + UDPIPV6LEN=18, + IPXLEN=10, + IPXSOCKLEN=12, + NETBIOSLEN=16, + APPLETKLEN=3, + DECNETLEN=2, + MACLEN=6, + HASH0LEN=19, + HASH1LEN=13, + HASH2LEN=7, + MAX_ADDR_SZ=20, + MAX_DISPLAY_SZ=MAXHOSTNAMELEN+1 +}; + +enum addr_type { + type_ip, + type_ipx, + type_udp, + type_ipxsock, + type_mac, + type_nb, + type_atk, + type_decnet, + type_e164, + type_sip, // IPv6 + type_invalid +}; + +// TODO: get rest of nb service types added here +enum nb_service { + nb_workstation = 0x0, nb_server = 0x20 +}; + +//---[ forward declarations ]----------------------------------------- +class GenAddress; +class UdpAddress; +class IpxSockAddress; +class NetbiosAddress; +class SIPAddress; // aka ipv6 + +// TODO: +// class AtmE164Address; + + +//-------------------------------------------------------------------- +//----[ Address class ]----------------------------------------------- +//-------------------------------------------------------------------- +/** + * @class + * + * @brief Defines the member functions for the abstract base class + * Address. An Address is a unique network endpoint. + */ +class ASNMP_Export Address: public SnmpSyntax +{ + +public: + /// allow destruction of derived classes + virtual ~Address(); + + /// overloaded equivlence operator, are two addresses equal? + friend ASNMP_Export bool operator==( const Address &lhs,const Address &rhs); + + /// overloaded not equivlence operator, are two addresses not equal? + friend ASNMP_Export bool operator!=( const Address &lhs,const Address &rhs); + + /// overloaded > operator, is a1 > a2 + friend ASNMP_Export bool operator>( const Address &lhs,const Address &rhs); + + /// overloaded >= operator, is a1 >= a2 + friend ASNMP_Export bool operator>=( const Address &lhs,const Address &rhs); + + /// overloaded < operator, is a1 < a2 + friend ASNMP_Export bool operator<( const Address &lhs,const Address &rhs); + + /// overloaded <= operator, is a1 <= a2 + friend ASNMP_Export bool operator<=( const Address &lhs,const Address &rhs); + + /// equivlence operator overloaded, are an address and a string equal? + friend ASNMP_Export bool operator==( const Address &lhs,const char *rhs); + + /// overloaded not equivlence operator, are an address and string not equal? + friend ASNMP_Export bool operator!=( const Address &lhs,const char *rhs); + + /// overloaded < , is an address greater than a string? + friend ASNMP_Export bool operator>( const Address &lhs,const char *rhs); + + /// overloaded >=, is an address greater than or equal to a string? + friend ASNMP_Export bool operator>=( const Address &lhs,const char *rhs); + + /// overloaded < , is an address less than a string? + friend ASNMP_Export bool operator<( const Address &lhs,const char *rhs); + + /// overloaded <=, is an address less than or equal to a string? + friend ASNMP_Export bool operator<=( const Address &lhs,const char *rhs); + + /// overloaded const char * cast + virtual operator const char *() const = 0; + + /// verify the is the address object constructed ok + virtual int valid() const; + + /// return a suitable buffer to contain the address + virtual void to_octet(OctetStr& octet) const = 0; + + /// (pure virtual) syntax type + virtual SmiUINT32 get_syntax() = 0; + + /// for non const [], allows reading and writing + unsigned char& operator[]( const int position); + + /// get a printable ASCII value + virtual const char *to_string() = 0; + + /// create a new instance of this Value + virtual SnmpSyntax *clone() const = 0; + + /// return the type of address + virtual addr_type get_type() const = 0; + + /// overloaded assignment operator + virtual SnmpSyntax& operator=( SnmpSyntax &val) = 0; + + /// return a hash key + virtual unsigned int hashFunction() const { return 0;}; + + +protected: + /// state of constructed object (1/0) + /// addr internal representation + int valid_flag; + unsigned char address_buffer[MAX_ADDR_SZ]; + + /// parse the address string + /// redefined for each specific address subclass + virtual int parse_address( const char * inaddr) =0; + + /// format the output + /// redefined for each specific address subclass + virtual void format_output() =0; + + /// a reused trimm white space method + void trim_white_space( char * ptr); +}; + + +//----------------------------------------------------------------------- +//---------[ IPv4 Address Class ]---------------------------------------- +//----------------------------------------------------------------------- +/** + * @class IpAddress + * + * @brief Defines the member functions for the concrete class IpAddress + * An IP Version 4 Address is 4 bytes long and consists of a + * Network, Sub Network, and host component. + */ +class ASNMP_Export IpAddress : public Address +{ +public: + /// default construct an IP address with a string + IpAddress( const char *inaddr = ""); + + /// construct an IP address with another IP address + IpAddress( const IpAddress &ipaddr); + + /// construct an IP address with a GenAddress + IpAddress( const GenAddress &genaddr); + + /// destructor (ensure that SnmpSyntax::~SnmpSyntax() is overridden) + ~IpAddress(); + + /// copy an instance of this Value + SnmpSyntax& operator=( SnmpSyntax &val); + + /// assignment to another IpAddress object overloaded + IpAddress& operator=( const IpAddress &ipaddress); + + // TODO: add ability to set addr given long + + /// create a new instance of this Value + SnmpSyntax *clone() const; + + /// return the DNS Fully Qualified Domain Name (host.domain) + /// on failure returns dotted_quad string + const char *resolve_hostname(int& was_found); + + /// return string representation of object (dotted quad returned) + virtual const char *to_string() ; + + /// const char * operator overloaded for streaming output + virtual operator const char *() const; + + /// logically AND two IPaddresses and + /// return the new one + void mask( const IpAddress& ipaddr); + + /// return the type + virtual addr_type get_type() const; + + /// syntax type + virtual SmiUINT32 get_syntax(); + + /// is this the loopback address? 127.0.0.1/loopback/1.0.0.127.in-addr.arpa + int is_loopback() const; + + /// determine if this is a multicast address + int is_multicast() const; + + /// determine if this a broadcast address + int is_broadcast() const; + + /// per RFC 1597, private addresses are:: 10, 172.16, and 192.168.0 + int is_private() const; + + /// convert address into octet string format in network byte order + virtual void to_octet(OctetStr& octet) const; + +protected: + char output_buffer[MAX_DISPLAY_SZ]; // output buffer + + /// friendly name storage + char iv_friendly_name_[MAX_DISPLAY_SZ]; + + /// did resolver call work? some addrs won't resolve + int iv_friendly_name_status_; + + /// redefined parse address + /// specific to IP addresses + virtual int parse_address( const char *inaddr); + + /// redefined format output + /// specific to IP addresses + virtual void format_output(); + + /// parse a dotted string + int parse_dotted_ipstring( const char *inaddr); + + /// using the currently defined address, do a gethostbyname() + /// and try to fill up the name + int addr_to_friendly(); + + /// thread safe routine to lookup ip address given hostname + /// return <> 0 on error + static int resolve_to_address(const char *hostname, in_addr& quad_addr); + + /// thread safe routine to lookup name given ip address + /// return <> 0 on error + static int resolve_to_hostname(const in_addr& quad_addr, char *hostname); + +}; + +//------------------------------------------------------------------------ +//--------------[ DNS Iterator Class ]------------------------------------ +//------------------------------------------------------------------------ + +/** + * @class Address_Iter + * + * @brief Defines routines to obtain information on a hostname/FQDN + * such as multiple addresses + */ +class ASNMP_Export Address_Iter +{ +public: + Address_Iter(const char *hostname); // fully qualified domain name, hostname + + /// did hostname resolve via DNS? + int valid() const; + + /// how many addresses associated with this hostname + int how_many_addresses(); + + /// return next address + int next(IpAddress& addr); + +private: + Address_Iter(const Address_Iter&); + int valid_; // ctor status + int count_; // number of addresses + char **entry_; // ptr to current address + struct hostent lookupResult_; + ACE_HOSTENT_DATA buffer_; + int query_dns(const char *hostname); +}; + +//------------------------------------------------------------------------ +//---------[ UDP/IPv4 Address Class ]------------------------------------- +//------------------------------------------------------------------------ +/** + * @class + * + * @brief Defines the member functions for the concrete class UdpAddress + * A Udp Address consists of an IP Version 4 Address (IpAddress) + * and a 2 byte unsigned port number. (see /etc/services file) + * User Datagram Protocol (UDP) is a best effort transport + */ +class ASNMP_Export UdpAddress : public IpAddress +{ +public: + /// default constructor with a dotted string in the form of addr:port + UdpAddress( const char *inaddr = ""); + + /// construct an Udp address with another Udp address + UdpAddress( const UdpAddress &udpaddr); + + /// construct a Udp address with a GenAddress + UdpAddress( const GenAddress &genaddr); + + /// construct a Udp address with an IpAddress + /// default port # to zero + UdpAddress( const IpAddress &ipaddr); + + /// destructor + ~UdpAddress(); + + /// syntax type + SmiUINT32 get_syntax(); + + /// copy an instance of this Value + SnmpSyntax& operator=( SnmpSyntax &val); + + /// assignment to another IpAddress object overloaded + UdpAddress& operator=( const UdpAddress &udpaddr); + + /// create a new instance of this Value + SnmpSyntax *clone() const; + + /// output in the form of address:port + virtual const char *to_string() ; + + /// const char * operator overloaded for streaming output + virtual operator const char *() const; + + /// set the port number + void set_port( const unsigned short p); + + /// get the port number + unsigned short get_port() const; + + /// return the type + virtual addr_type get_type() const; + +protected: + /// output buffer + char output_buffer[MAX_DISPLAY_SZ]; + + /// redefined parse address + /// specific to IP addresses + virtual int parse_address( const char *inaddr); + + /// redefined format output + /// specific to IP addresses + virtual void format_output(); +}; + + +//------------------------------------------------------------------------- +//---------[ 802.3 MAC Address Class ]------------------------------------- +//------------------------------------------------------------------------- +/** + * @class + * + * @brief Defines the member functions for the concrete class MacAddress. + * A Media Access Control Address consists of 48 bits as defined + * in IEEE 802.3 specifications. + */ +class ASNMP_Export MacAddress : public Address +{ +public: + /// constructor with a string argument + MacAddress( const char *inaddr = ""); + + /// constructor with another MAC object + MacAddress( const MacAddress &macaddr); + + /// construct a MacAddress with a GenAddress + MacAddress( const GenAddress &genaddr); + + /// destructor + ~MacAddress(); + + /// syntax type + SmiUINT32 get_syntax(); + + /// copy an instance of this Value + SnmpSyntax& operator=( SnmpSyntax &val); + + /// assignment to another IpAddress object overloaded + MacAddress& operator=( const MacAddress &macaddress); + + /// create a new instance of this Value + SnmpSyntax *clone() const; + + /// create a string to internal class storage representing object + virtual const char *to_string(); + + /// const char * operator overloaded for streaming output + virtual operator const char *() const; + + /// return the type + virtual addr_type get_type() const; + + /// return a hash key + unsigned int hashFunction() const; + + /// return byte array of the mac address + virtual void to_octet(OctetStr& octet) const; + +protected: + /// output buffer containing string representation of object + char output_buffer[MAX_DISPLAY_SZ]; + + /// redefined parse address for macs + virtual int parse_address( const char *inaddr); + + /// redefined format output for MACs + virtual void format_output(); +}; + +//------------------------------------------------------------------------ +//---------[ Netbios Address Class ]-------------------------------------- +//------------------------------------------------------------------------ +/** + * @class + * + * @brief Defines the member functions for the concrete class NetbiosAddress. + * The IBM/Microsoft address for NETBIOS, NETBEUI protocol transport. + */ +class ASNMP_Export NetbiosAddress : public Address +{ +public: + + /// default constructor with string arg + NetbiosAddress( const char *inaddr = ""); + + /// set name and service type + NetbiosAddress( const char *inaddr, nb_service svc); + + /// copy constructor + NetbiosAddress( const NetbiosAddress& nbaddr); + + /// construct with a GenAddress + NetbiosAddress( const GenAddress& genaddr); + + ~NetbiosAddress(); + + virtual const char *to_string(); + + NetbiosAddress& operator=( const NetbiosAddress &nbaddr); + + /// retrieve the network service type + nb_service get_service_type() const; + + /// set the service type (workstation, server, etc) + void set_service_type(nb_service nbservice); + + /// const char * operator overloaded for streaming output + virtual operator const char *() const; + + /// syntax type + virtual SmiUINT32 get_syntax(); + + /// copy an instance of this Value + SnmpSyntax& operator=( SnmpSyntax &val); + + /// create a new instance of this Value + SnmpSyntax *clone() const; + + /// output byte buffer containing netbios name + virtual void to_octet(OctetStr& octet) const; + +protected: + void InitNBAddr(const char *inaddr); + char output_buffer[MAX_DISPLAY_SZ]; + + /// output buffer to hold string representation + virtual void format_output(); + virtual int parse_address( const char *inaddr); + virtual addr_type get_type() const; +}; + +//------------------------------------------------------------------------ +//---------[ DecNet Address Class ]--------------------------------------- +//------------------------------------------------------------------------ +/** + * @class + * + * @brief Defines the member functions for the concrete class DecNetAddress. + * DecNet Phase ? address consists of two octets (CISCO-TC.my) + */ +class ASNMP_Export DecNetAddress : public Address +{ + public: + /// default constructor with string arg + DecNetAddress( const char *inaddr = ""); + + /// copy constructor + DecNetAddress( const DecNetAddress& decaddr); + + /// construct with a GenAddress + DecNetAddress( const GenAddress& genaddr); + + ~DecNetAddress(); + + virtual const char *to_string(); + + DecNetAddress& operator=( const DecNetAddress &decaddr); + + /// convert address into octet string format 2 bytes of decnet address + virtual void to_octet(OctetStr& octet) const; + + /// const char * operator overloaded for streaming output + virtual operator const char *() const; + + /// syntax type + virtual SmiUINT32 get_syntax(); + + /// copy an instance of this Value + SnmpSyntax& operator=( SnmpSyntax &val); + + /// create a new instance of this Value + SnmpSyntax *clone() const; + + protected: + virtual int parse_address( const char *inaddr); + virtual addr_type get_type() const; + virtual void format_output(); + char output_buffer[MAX_DISPLAY_SZ]; +}; + +//------------------------------------------------------------------------ +//---------[ AppleTalk Address Class ]------------------------------------ +//------------------------------------------------------------------------ +/** + * @class + * + * @brief Defines the member functions for the concrete class DecNetAddress. + * DecNet Phase ? address consists of two octets (CISCO-TC.my) + */ +class ASNMP_Export AppleTalkAddress : public Address +{ + public: + /// default constructor with string arg + AppleTalkAddress( const char *inaddr = ""); + + /// copy constructor + AppleTalkAddress( const AppleTalkAddress& atkaddr); + + /// construct with a GenAddress + AppleTalkAddress( const GenAddress& genaddr); + + ~AppleTalkAddress(); + + virtual const char *to_string(); + + AppleTalkAddress& operator=( const AppleTalkAddress &atkaddr); + + /// convert address into octet string format 3 bytes of atk address + virtual void to_octet(OctetStr& octet) const; + + /// get the host part of the address + char get_host_address() const; + + /// set the host part of the address + void set_host_address(const char); + + /// get the 2 byte atk network address + short get_net_address() const; + + /// set the host 2 byte atk network address + void set_net_address(const short atknet); + + /// const char * operator overloaded for streaming output + virtual operator const char *() const; + + /// syntax type + virtual SmiUINT32 get_syntax(); + + /// copy an instance of this Value + SnmpSyntax& operator=( SnmpSyntax &val); + + /// create a new instance of this Value + SnmpSyntax *clone() const; + + private: + virtual int parse_address( const char *inaddr); + virtual addr_type get_type() const; + virtual void format_output(); + char output_buffer[MAX_DISPLAY_SZ]; +}; + +//------------------------------------------------------------------------ +//---------[ IPX Address Class ]------------------------------------------ +//------------------------------------------------------------------------ +/** + * @class IpxAddress + * + * @brief Defines the member functions for the concrete class IpxAddress. + * Novell's IPX (version ?) network protocol endpoint + */ +class ASNMP_Export IpxAddress : public Address +{ +public: + /// default constructor with a string arg + IpxAddress( const char *inaddr = ""); + + /// constructor with another ipx object + IpxAddress( const IpxAddress &ipxaddr); + + /// construct with a GenAddress + IpxAddress( const GenAddress &genaddr); + + /// destructor + ~IpxAddress(); + + /// syntax type + virtual SmiUINT32 get_syntax(); + + /// copy an instance of this Value + SnmpSyntax& operator=( SnmpSyntax &val); + + /// assignment to another IpxAddress object overloaded + IpxAddress& operator=( const IpxAddress &ipxaddress); + + /// get the host id portion of an ipx address + int get_hostid( MacAddress& mac); + + /// create a new instance of this Value + SnmpSyntax *clone() const; + + /// create string represtation of object value + virtual const char *to_string(); + + /// const char * operator overloaded for streaming output + virtual operator const char *() const; + + /// return the type + virtual addr_type get_type() const; + + /// return byte sequence containing ipx address + virtual void to_octet(OctetStr& octet) const; + +protected: + /// ipx format separator {:,/} + char separator; + + /// output buffer to hold string representation + char output_buffer[MAX_DISPLAY_SZ]; + + /// redefined parse address for ipx strings + virtual int parse_address( const char *inaddr); + + /// redefined format output for ipx strings + /// uses same separator as when constructed + virtual void format_output(); +}; + + + +//------------------------------------------------------------------------ +//---------[ IpxSock Address Class ]-------------------------------------- +//------------------------------------------------------------------------ +/** + * @class IpxSockAddress + * + * @brief Defines the member functions for the concrete class IpxAddress. + * Novell's IPX (version ?) network protocol endpoint + */ +class ASNMP_Export IpxSockAddress : public IpxAddress +{ +public: + /// constructor with a dotted string + IpxSockAddress( const char *inaddr = ""); + + /// construct an Udp address with another Udp address + IpxSockAddress( const IpxSockAddress &ipxaddr); + + ///constructor with a GenAddress + IpxSockAddress( const GenAddress &genaddr); + + ///constructor with a IpxAddress + /// default socket # is 0 + IpxSockAddress( const IpxAddress &ipxaddr); + + /// destructor + ~IpxSockAddress(); + + /// syntax type + virtual SmiUINT32 get_syntax(); + + /// copy an instance of this Value + SnmpSyntax& operator=( SnmpSyntax &val); + + /// assignment to another IpxAddress object overloaded + IpxSockAddress& operator=( const IpxSockAddress &ipxaddr); + + /// create a new instance of this Value + SnmpSyntax *clone() const; + + /// set the socket number + void set_socket( const unsigned short s); + + /// get the socket number + unsigned short get_socket() const; + + /// create string representation of object value + virtual const char *to_string(); + + /// const char * operator overloaded for streaming output + virtual operator const char *() const; + + /// return the type + virtual addr_type get_type() const; + +protected: + /// output buffer to hold string representation of object + char output_buffer[MAX_DISPLAY_SZ]; + + /// redefined parse address for ipx strings + virtual int parse_address( const char *inaddr); + + /// redefined format output + /// specific to IP addresses + virtual void format_output(); +}; + +//------------------------------------------------------------------------- +//--------[ Generic Address ]---------------------------------------------- +//------------------------------------------------------------------------- +/** + * @class GenAddress + * + * @brief Defines the member functions for the concrete class GenAddress. + * This class attempts to determine an address type given a char string. + */ +class ASNMP_Export GenAddress : public Address +{ +public: + /// constructor with a string argument + GenAddress( const char *addr = ""); + + /// constructor with an Address + GenAddress( const Address &addr); + + /// constructor with another GenAddress + GenAddress( const GenAddress &addr); + + /// destructor + ~GenAddress(); + + /// get the snmp syntax of the contained address + SmiUINT32 get_syntax(); + + /// create a new instance of this Value + SnmpSyntax *clone() const; + + /// assignment of a GenAddress + GenAddress& operator=( const GenAddress &addr); + + /// copy an instance of this Value + SnmpSyntax& operator=( SnmpSyntax &val); + + /// string representation of object value + virtual const char *to_string(); + + /// const char * operator overloaded for streaming output + virtual operator const char *() const; + + /// return the type + virtual addr_type get_type() const; + + /// return the address as a octet sequence + virtual void to_octet(OctetStr& octet) const; + +protected: + /// pointer to a a concrete address + Address *address; + + /// output buffer of objects value + char output_buffer[MAX_DISPLAY_SZ]; + + /// redefined parse address for macs + virtual int parse_address( const char *addr); + + /// format output for a generic address + virtual void format_output(); + + /// initialize smi data structure + void init_smi(); +}; + +#endif //_ADDRESS diff --git a/ACE/ASNMP/asnmp/asn1.cpp b/ACE/ASNMP/asnmp/asn1.cpp new file mode 100644 index 00000000000..da973e52bc2 --- /dev/null +++ b/ACE/ASNMP/asnmp/asn1.cpp @@ -0,0 +1,1734 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// asn1.cpp +// +// = DESCRIPTION +// The Vb class is an encapsulation of the snmp variable binding. +// This module contains the class definition for the variable binding (VB) +// class. The VB class is an encapsulation of a SNMP VB. A VB object is +// composed of one SNMP++ Oid and one SMI value. The Vb class utilizes Oid +// objects and thus requires the Oid class. To use this class, +// set oid, value then call valid() to be sure object was constructed correctly. +// +// = AUTHOR +// S. Waldbusser (assumed) +// Michael R MacFaden mrm@cisco.com - rework & ACE port +// ============================================================================ +/********************************************************************** +// * + * Abstract Syntax Notation One, ASN.1 + * As defined in ISO/IS 8824 and ISO/IS 8825 + * This implements a subset of the above International Standards that + * is sufficient to implement SNMP. + * + * Encodes abstract data types into a machine independent stream of bytes. + * + Copyright 1988, 1989, 1991, 1992 by Carnegie Mellon University + + All Rights Reserved + + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, + provided that the above copyright notice appear in all copies and that + both that copyright notice and this permission notice appear in + supporting documentation, and that the name of CMU not be + used in advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL + CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR + ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + SOFTWARE. + ******************************************************************/ + +#include "asnmp/asn1.h" +#include "asnmp/snmp.h" +#include "ace/OS_NS_string.h" + +ACE_RCSID(asnmp, asn1, "$Id$") + +/* + * parse_int - pulls a long out of an ASN int type. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * following the end of this object. + * + * Returns a pointer to the first byte past the end + * of this object (i.e. the start of the next object). + * Returns 0 on any error. + */ +u_char * asn1::parse_int( u_char *data, + int *datalength, + u_char *type, + long int *intp, + int intsize) +{ + ACE_TRACE("asn1::parse_int"); + /* + * ASN.1 integer ::= 0x02 asnlength byte {byte}* + */ + u_char *bufp = data; + u_long asn_length; + long value = 0; + + if (intsize != sizeof (long)){ + ASNERROR("not long"); + return 0; + } + *type = *bufp++; + bufp =asn1::parse_length(bufp, &asn_length); + if (bufp == 0){ + ASNERROR("bad length"); + return 0; + } + if ((int)(asn_length + (bufp - data)) > *datalength){ + ASNERROR("overflow of message"); + return 0; + } + if ((int)asn_length > intsize){ + ASNERROR("I don't support such large integers"); + return 0; + } + *datalength -= (int)asn_length + (bufp - data); + if (*bufp & 0x80) + value = -1; /* integer is negative */ + while(asn_length--) + value = (value << 8) | *bufp++; + *intp = value; + return bufp; +} + + +/* + * parse_unsigned_int - pulls an u_long out of an ASN int type. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * following the end of this object. + * + * Returns a pointer to the first byte past the end + * of this object (i.e. the start of the next object). + * Returns 0 on any error. + */ +u_char * asn1::parse_unsigned_int( u_char *data, + int *datalength, + u_char *type, + u_long *intp, + int intsize) +{ + ACE_TRACE("asn1::parse_unsigned_int"); + /* + * ASN.1 integer ::= 0x02 asnlength byte {byte}* + */ + u_char *bufp = data; + u_long asn_length; + u_long value = 0; + + if (intsize != sizeof (long)){ + ASNERROR("not long"); + return 0; + } + *type = *bufp++; + bufp = asn1::parse_length(bufp, &asn_length); + if (bufp == 0){ + ASNERROR("bad length"); + return 0; + } + if ((int)(asn_length + (bufp - data)) > *datalength){ + ASNERROR("overflow of message"); + return 0; + } + if (((int)asn_length > (intsize + 1)) || + (((int)asn_length == intsize + 1) && *bufp != 0x00)){ + ASNERROR("I don't support such large integers"); + return 0; + } + *datalength -= (int)asn_length + (bufp - data); + if (*bufp & 0x80) + value = (u_long) -1; + while(asn_length--) + value = (value << 8) | *bufp++; + *intp = value; + return bufp; +} + + +/* + * build_int - builds an ASN object containing an integer. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * following the end of this object. + * + * Returns a pointer to the first byte past the end + * of this object (i.e. the start of the next object). + * Returns 0 on any error. + */ +u_char * asn1::build_int( u_char *data, + int *datalength, + u_char type, + long *intp, + int intsize) +{ + ACE_TRACE("asn1::build_int"); + /* + * ASN.1 integer ::= 0x02 asnlength byte {byte}* + */ + + long integer; + u_long mask; + + if (intsize != sizeof (long)) + return 0; + integer = *intp; + /* + * Truncate "unnecessary" bytes off of the most significant end of this + * 2's complement integer. There should be no sequence of 9 + * consecutive 1's or 0's at the most significant end of the + * integer. + */ + mask = u_long (0x1FF) << ((8 * (sizeof(u_long) - 1)) - 1); + /* mask is 0xFF800000 on a big-endian machine */ + while((((integer & mask) == 0) || ((integer & mask) == mask)) + && intsize > 1){ + intsize--; + integer <<= 8; + } + data = asn1::build_header(data, datalength, type, intsize); + if (data == 0) + return 0; + if (*datalength < intsize) + return 0; + *datalength -= intsize; + mask = u_long (0xFF) << (8 * (sizeof(u_long) - 1)); + /* mask is 0xFF000000 on a big-endian machine */ + while(intsize--){ + *data++ = (u_char)((integer & mask) >> (8 * (sizeof(long) - 1))); + integer <<= 8; + } + return data; +} + + +/* + * build_unsigned_int - builds an ASN object containing an integer. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * following the end of this object. + * + * Returns a pointer to the first byte past the end + * of this object (i.e. the start of the next object). + * Returns 0 on any error. + */ +u_char * asn1::build_unsigned_int( u_char *data, + int *datalength, + u_char type, + u_long *intp, + int intsize) +{ + ACE_TRACE("asn1::build_unsigned_int"); + /* + * ASN.1 integer ::= 0x02 asnlength byte {byte}* + */ + + u_long integer; + u_long mask; + int add_null_byte = 0; + + if (intsize != sizeof (long)) + return 0; + integer = *intp; + mask = u_long (0xFF) << (8 * (sizeof(u_long) - 1)); + /* mask is 0xFF000000 on a big-endian machine */ + if ((u_char)((integer & mask) >> (8 * (sizeof(long) - 1))) & 0x80){ + /* if MSB is set */ + add_null_byte = 1; + intsize++; + } + /* + * Truncate "unnecessary" bytes off of the most significant end of this 2's complement integer. + * There should be no sequence of 9 consecutive 1's or 0's at the most significant end of the + * integer. + */ + mask = u_long (0x1FF) << ((8 * (sizeof(u_long) - 1)) - 1); + /* mask is 0xFF800000 on a big-endian machine */ + while((((integer & mask) == 0) || ((integer & mask) == mask)) && intsize > 1){ + intsize--; + integer <<= 8; + } + data = asn1::build_header(data, datalength, type, intsize); + if (data == 0) + return 0; + if (*datalength < intsize) + return 0; + *datalength -= intsize; + if (add_null_byte == 1){ + *data++ = '\0'; + intsize--; + } + mask = u_long (0xFF) << (8 * (sizeof(u_long) - 1)); + /* mask is 0xFF000000 on a big-endian machine */ + while(intsize--){ + *data++ = (u_char)((integer & mask) >> (8 * (sizeof(long) - 1))); + integer <<= 8; + } + return data; +} + + +/* + * parse_string - pulls an octet string out of an ASN octet string type. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * following the beginning of the next object. + * + * "string" is filled with the octet string. + * + * Returns a pointer to the first byte past the end + * of this object (i.e. the start of the next object). + * Returns 0 on any error. + */ +u_char * asn1::parse_string( u_char *data, + int *datalength, + u_char *type, + u_char *string, + int *strlength) +{ + ACE_TRACE("asn1::parse_string"); + /* + * ASN.1 octet string ::= primstring | cmpdstring + * primstring ::= 0x04 asnlength byte {byte}* + * cmpdstring ::= 0x24 asnlength string {string}* + */ + u_char *bufp = data; + u_long asn_length; + + *type = *bufp++; + bufp = asn1::parse_length(bufp, &asn_length); + if (bufp == 0) + return 0; + if ((int)(asn_length + (bufp - data)) > *datalength){ + ASNERROR("overflow of message"); + return 0; + } + if ((int)asn_length > *strlength){ + ASNERROR("I don't support such long strings"); + return 0; + } + // fixed + ACE_OS::memcpy((char *)string, (char *)bufp, (int)asn_length); + *strlength = (int)asn_length; + *datalength -= (int)asn_length + (bufp - data); + return bufp + asn_length; +} + + +/* + * build_string - Builds an ASN octet string object containing the input string. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * following the beginning of the next object. + * + * Returns a pointer to the first byte past the end + * of this object (i.e. the start of the next object). + * Returns 0 on any error. + */ +u_char * asn1::build_string( u_char *data, + int *datalength, + u_char type, + u_char *string, + int strlength) +{ + ACE_TRACE("asn1::build_string"); + /* + * ASN.1 octet string ::= primstring | cmpdstring + * primstring ::= 0x04 asnlength byte {byte}* + * cmpdstring ::= 0x24 asnlength string {string}* + * This code will never send a compound string. + */ + data = asn1::build_header(data, datalength, type, strlength); + if (data == 0) + return 0; + if (*datalength < strlength) + return 0; + // fixed + ACE_OS::memcpy((u_char *)data,(u_char *)string, strlength); + *datalength -= strlength; + return data + strlength; +} + + +/* + * parse_header - interprets the ID and length of the current object. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * in this object following the id and length. + * + * Returns a pointer to the first byte of the contents of this object. + * Returns 0 on any error. + */ +u_char *asn1::parse_header( u_char *data, + int *datalength, + u_char *type) +{ + ACE_TRACE("asn1::parse_header"); + u_char *bufp = data; + register int header_len; + u_long asn_length; + + /* this only works on data types < 30, i.e. no extension octets */ + if (IS_EXTENSION_ID(*bufp)){ + ASNERROR("can't process ID >= 30"); + return 0; + } + *type = *bufp; + bufp = asn1::parse_length(bufp + 1, &asn_length); + if (bufp == 0) + return 0; + header_len = bufp - data; + if ((int)(header_len + asn_length) > *datalength){ + ASNERROR("asn length too long"); + return 0; + } + *datalength = (int)asn_length; + return bufp; +} + +/* + * asn1::build_header - builds an ASN header for an object with the ID and + * length specified. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * in this object following the id and length. + * + * This only works on data types < 30, i.e. no extension octets. + * The maximum length is 0xFFFF; + * + * Returns a pointer to the first byte of the contents of this object. + * Returns 0 on any error. + */ +u_char * asn1::build_header( u_char *data, + int *datalength, + u_char type, + int length) +{ + ACE_TRACE("asn1::build_header"); + if (*datalength < 1) + return 0; + *data++ = type; + (*datalength)--; + return asn1::build_length(data, datalength, length); + +} + +/* + * asn_build_sequence - builds an ASN header for a sequence with the ID and + * length specified. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * in this object following the id and length. + * + * This only works on data types < 30, i.e. no extension octets. + * The maximum length is 0xFFFF; + * + * Returns a pointer to the first byte of the contents of this object. + * Returns 0 on any error. + */ +u_char * asn1::build_sequence( u_char *data, + int *datalength, + u_char type, + int length) +{ + ACE_TRACE("asn1::build_sequence"); + *datalength -= 4; + if (*datalength < 0){ + *datalength += 4; /* fix up before punting */ + return 0; + } + *data++ = type; + *data++ = (u_char)(0x02 | ASN_LONG_LEN); + *data++ = (u_char)((length >> 8) & 0xFF); + *data++ = (u_char)(length & 0xFF); + return data; +} + +/* + * parse_length - interprets the length of the current object. + * On exit, length contains the value of this length field. + * + * Returns a pointer to the first byte after this length + * field (aka: the start of the data field). + * Returns 0 on any error. + */ +u_char * asn1::parse_length( u_char *data, + u_long *length) +{ + ACE_TRACE("asn1::parse_length"); + u_char lengthbyte = *data; + + if (lengthbyte & ASN_LONG_LEN){ + lengthbyte &= ~ASN_LONG_LEN; /* turn MSb off */ + if (lengthbyte == 0){ + ASNERROR("We don't support indefinite lengths"); + return 0; + } + if (lengthbyte > sizeof(long)){ + ASNERROR("we can't support data lengths that long"); + return 0; + } + // fixed + ACE_OS::memcpy((char *)length, (char *)data + 1, (int)lengthbyte); + *length = ACE_NTOHL(*length); + *length >>= (8 * ((sizeof *length) - lengthbyte)); + return data + lengthbyte + 1; + } else { /* short asnlength */ + *length = (long)lengthbyte; + return data + 1; + } +} + +u_char *asn1::build_length( u_char *data, + int *datalength, + int length) +{ + ACE_TRACE("asn1::build_length"); + u_char *start_data = data; + + /* no indefinite lengths sent */ + if (length < 0x80){ + if (*datalength < 1){ + ASNERROR("build_length"); + return 0; + } + *data++ = (u_char)length; + } else if (length <= 0xFF){ + if (*datalength < 2){ + ASNERROR("build_length"); + return 0; + } + *data++ = (u_char)(0x01 | ASN_LONG_LEN); + *data++ = (u_char)length; + } else { /* 0xFF < length <= 0xFFFF */ + if (*datalength < 3){ + ASNERROR("build_length"); + return 0; + } + *data++ = (u_char)(0x02 | ASN_LONG_LEN); + *data++ = (u_char)((length >> 8) & 0xFF); + *data++ = (u_char)(length & 0xFF); + } + *datalength -= (data - start_data); + return data; + +} + +/* + * parse_objid - pulls an object indentifier out of an ASN object identifier type. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * following the beginning of the next object. + * + * "objid" is filled with the object identifier. + * + * Returns a pointer to the first byte past the end + * of this object (i.e. the start of the next object). + * Returns 0 on any error. + */ +u_char *asn1::parse_objid( u_char *data, + int *datalength, + u_char *type, + oid *objid, + int *objidlength) +{ + ACE_TRACE("asn1::parse_objid"); + /* + * ASN.1 objid ::= 0x06 asnlength subidentifier {subidentifier}* + * subidentifier ::= {leadingbyte}* lastbyte + * leadingbyte ::= 1 7bitvalue + * lastbyte ::= 0 7bitvalue + */ + u_char *bufp = data; + oid *oidp = objid + 1; + u_long subidentifier; + long length; + u_long asn_length; + + *type = *bufp++; + bufp = asn1::parse_length(bufp, &asn_length); + if (bufp == 0) + return 0; + if ((int)asn_length + (bufp - data) > *datalength){ + ASNERROR("overflow of message"); + return 0; + } + *datalength -= (int)asn_length + (bufp - data); + + /* Handle invalid object identifier encodings of the form 06 00 robustly */ + if (asn_length == 0) + objid[0] = objid[1] = 0; + + length = asn_length; + (*objidlength)--; /* account for expansion of first byte */ + while (length > 0 && (*objidlength)-- > 0){ + subidentifier = 0; + do { /* shift and add in low order 7 bits */ + subidentifier = (subidentifier << 7) + (*(u_char *)bufp & ~ASN_BIT8); + length--; + } while (*(u_char *)bufp++ & ASN_BIT8); /* last byte has high bit clear */ + if (subidentifier > (u_long)MAX_SUBID){ + ASNERROR("subidentifier too long"); + return 0; + } + *oidp++ = (oid)subidentifier; + } + + /* + * The first two subidentifiers are encoded into the first component + * with the value (X * 40) + Y, where: + * X is the value of the first subidentifier. + * Y is the value of the second subidentifier. + */ + subidentifier = (u_long)objid[1]; + if (subidentifier == 0x2B){ + objid[0] = 1; + objid[1] = 3; + } else { + objid[1] = (u_char)(subidentifier % 40); + objid[0] = (u_char)((subidentifier - objid[1]) / 40); + } + + *objidlength = (int)(oidp - objid); + return bufp; +} + +/* + * build_objid - Builds an ASN object identifier object containing the + * input string. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * following the beginning of the next object. + * + * Returns a pointer to the first byte past the end + * of this object (i.e. the start of the next object). + * Returns 0 on any error. + */ +u_char *asn1::build_objid( u_char *data, + int *datalength, + u_char type, + oid *objid, + int objidlength) +{ + ACE_TRACE("asn1::build_objid"); + /* + * ASN.1 objid ::= 0x06 asnlength subidentifier {subidentifier}* + * subidentifier ::= {leadingbyte}* lastbyte + * leadingbyte ::= 1 7bitvalue + * lastbyte ::= 0 7bitvalue + */ + u_char buf[MAX_OID_LEN]; + u_char *bp = buf; + oid *op = objid; + int asnlength; + u_long subid, mask, testmask; + int bits, testbits; + + if (objidlength < 2){ + *bp++ = 0; + objidlength = 0; + } else { + *bp++ = (u_char) (op[1] + (op[0] * 40)); + objidlength -= 2; + op += 2; + } + + while(objidlength-- > 0){ + subid = *op++; + if (subid < 127){ /* off by one? */ + *bp++ = (u_char )subid; + } else { + mask = 0x7F; /* handle subid == 0 case */ + bits = 0; + /* testmask *MUST* !!!! be of an u_type */ + for(testmask = 0x7F, testbits = 0; testmask != 0; + testmask <<= 7, testbits += 7){ + if (subid & testmask){ /* if any bits set */ + mask = testmask; + bits = testbits; + } + } + /* mask can't be zero here */ + for(;mask != 0x7F; mask >>= 7, bits -= 7){ + /* fix a mask that got truncated above */ + if (mask == 0x1E00000) + mask = 0xFE00000; + *bp++ = (u_char)(((subid & mask) >> bits) | ASN_BIT8); + } + *bp++ = (u_char)(subid & mask); + } + } + asnlength = bp - buf; + data = asn1::build_header(data, datalength, type, asnlength); + if (data == 0) + return 0; + if (*datalength < asnlength) + return 0; + // fixed + ACE_OS::memcpy((char *)data, (char *)buf, asnlength); + *datalength -= asnlength; + return data + asnlength; +} + +/* + * parse_null - Interprets an ASN null type. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * following the beginning of the next object. + * + * Returns a pointer to the first byte past the end + * of this object (i.e. the start of the next object). + * Returns 0 on any error. + */ +u_char *asn1::parse_null(u_char *data, + int *datalength, + u_char *type) +{ + ACE_TRACE("asn1::parse_null"); + /* + * ASN.1 null ::= 0x05 0x00 + */ + u_char *bufp = data; + u_long asn_length; + + *type = *bufp++; + bufp = asn1::parse_length(bufp, &asn_length); + if (bufp == 0) + return 0; + if (asn_length != 0){ + ASNERROR("Malformed 0"); + return 0; + } + *datalength -= (bufp - data); + return bufp + asn_length; +} + + +/* + * build_null - Builds an ASN null object. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * following the beginning of the next object. + * + * Returns a pointer to the first byte past the end + * of this object (i.e. the start of the next object). + * Returns 0 on any error. + */ +u_char *asn1::build_null( u_char *data, + int *datalength, + u_char type) +{ + ACE_TRACE("asn1::build_null"); + /* + * ASN.1 null ::= 0x05 0x00 + */ + return asn1::build_header(data, datalength, type, 0); +} + +/* + * parse_bitstring - pulls a bitstring out of an ASN bitstring type. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * following the beginning of the next object. + * + * "string" is filled with the bit string. + * + * Returns a pointer to the first byte past the end + * of this object (i.e. the start of the next object). + * Returns 0 on any error. + */ +u_char *asn1::parse_bitstring( u_char *data, + int *datalength, + u_char *type, + u_char *string, + int *strlength) +{ + ACE_TRACE("asn1::parse_bitstring"); + /* + * bitstring ::= 0x03 asnlength unused {byte}* + */ + u_char *bufp = data; + u_long asn_length; + + *type = *bufp++; + bufp = asn1::parse_length(bufp, &asn_length); + if (bufp == 0) + return 0; + if ((int)(asn_length + (bufp - data)) > *datalength){ + ASNERROR("overflow of message"); + return 0; + } + if ((int) asn_length > *strlength){ + ASNERROR("I don't support such long bitstrings"); + return 0; + } + if (asn_length < 1){ + ASNERROR("Invalid bitstring"); + return 0; + } + if (*bufp > 7){ + ASNERROR("Invalid bitstring"); + return 0; + } + // fixed + ACE_OS::memcpy((char *)string,(char *)bufp, (int)asn_length); + *strlength = (int)asn_length; + *datalength -= (int)asn_length + (bufp - data); + return bufp + asn_length; +} + + +/* + * build_bitstring - Builds an ASN bit string object containing the + * input string. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * following the beginning of the next object. + * + * Returns a pointer to the first byte past the end + * of this object (i.e. the start of the next object). + * Returns 0 on any error. + */ +u_char *asn1::build_bitstring( u_char *data, + int *datalength, + u_char type, + u_char *string, + int strlength) +{ + ACE_TRACE("asn1::build_bitstring"); + /* + * ASN.1 bit string ::= 0x03 asnlength unused {byte}* + */ + if (strlength < 1 || *string || *string > 7){ + ASNERROR("Building invalid bitstring"); + return 0; + } + data = asn1::build_header(data, datalength, type, strlength); + if (data == 0) + return 0; + if (*datalength < strlength) + return 0; + // fixed + ACE_OS::memcpy((char *)data,(char *)string, strlength); + *datalength -= strlength; + return data + strlength; +} + + +/* + * parse_unsigned_int64 - pulls a 64 bit u_long out of an ASN int + * type. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * following the end of this object. + * + * Returns a pointer to the first byte past the end + * of this object (i.e. the start of the next object). + * Returns 0 on any error. + */ +u_char * asn1::parse_unsigned_int64(u_char *data, + int *datalength, + u_char *type, + struct counter64 *cp, + int countersize) +{ + ACE_TRACE("asn1::parse_unsigned_int64"); + /* + * ASN.1 integer ::= 0x02 asnlength byte {byte}* + */ + u_char *bufp = data; + u_long asn_length; + u_long low = 0, high = 0; + int intsize = 4; + + if (countersize != sizeof(struct counter64)){ + ASNERROR("not right size"); + return 0; + } + *type = *bufp++; + bufp = asn1::parse_length(bufp, &asn_length); + if (bufp == 0){ + ASNERROR("bad length"); + return 0; + } + if ((int)(asn_length + (bufp - data)) > *datalength){ + ASNERROR("overflow of message"); + return 0; + } + if (((int)asn_length > (intsize * 2 + 1)) || + (((int)asn_length == (intsize * 2) + 1) && *bufp != 0x00)){ + ASNERROR("I don't support such large integers"); + return 0; + } + *datalength -= (int)asn_length + (bufp - data); + if (*bufp & 0x80){ + low = (u_long) -1; // integer is negative + high = (u_long) -1; + } + while(asn_length--){ + high = (high << 8) | ((low & 0xFF000000) >> 24); + low = (low << 8) | *bufp++; + } + cp->low = low; + cp->high = high; + return bufp; +} + + +/* + * build_unsigned_int64 - builds an ASN object containing a 64 bit integer. + * On entry, datalength is input as the number of valid bytes following + * "data". On exit, it is returned as the number of valid bytes + * following the end of this object. + * + * Returns a pointer to the first byte past the end + * of this object (i.e. the start of the next object). + * Returns 0 on any error. + */ +u_char * asn1::build_unsigned_int64( u_char *data, + int *datalength, + u_char type, + struct counter64 *cp, + int countersize) +{ + ACE_TRACE("asn1::build_unsigned_int64"); + /* + * ASN.1 integer ::= 0x02 asnlength byte {byte}* + */ + + u_long low, high; + u_long mask, mask2; + int add_null_byte = 0; + int intsize; + + if (countersize != sizeof (struct counter64)) + return 0; + intsize = 8; + low = cp->low; + high = cp->high; + mask = u_long (0xFF) << (8 * (sizeof(u_long) - 1)); + /* mask is 0xFF000000 on a big-endian machine */ + if ((u_char)((high & mask) >> (8 * (sizeof(long) - 1))) & 0x80){ + /* if MSB is set */ + add_null_byte = 1; + intsize++; + } + /* + * Truncate "unnecessary" bytes off of the most significant end of this 2's + * complement integer. + * There should be no sequence of 9 consecutive 1's or 0's at the most + * significant end of the integer. + */ + mask2 = u_long (0x1FF) << ((8 * (sizeof(u_long) - 1)) - 1); + /* mask2 is 0xFF800000 on a big-endian machine */ + while((((high & mask2) == 0) || ((high & mask2) == mask2)) + && intsize > 1){ + intsize--; + high = (high << 8) + | ((low & mask) >> (8 * (sizeof(long) - 1))); + low <<= 8; + } + data = asn1::build_header(data, datalength, type, intsize); + if (data == 0) + return 0; + if (*datalength < intsize) + return 0; + *datalength -= intsize; + if (add_null_byte == 1){ + *data++ = '\0'; + intsize--; + } + while(intsize--){ + *data++ = (u_char)((high & mask) >> (8 * (sizeof(long) - 1))); + high = (high << 8) + | ((low & mask) >> (8 * (sizeof(long) - 1))); + low <<= 8; + + } + return data; +} + + +// create a pdu +struct snmp_pdu * cmu_snmp::pdu_create( int command) +{ + ACE_TRACE("cmu_snmp::snmp_pdu_create"); + struct snmp_pdu *pdu; + + ACE_NEW_RETURN(pdu, snmp_pdu, 0); + ACE_OS::memset((char *)pdu, 0,sizeof(struct snmp_pdu)); + pdu->command = command; + pdu->errstat = 0; + pdu->errindex = 0; + pdu->enterprise = 0; + pdu->enterprise_length = 0; + pdu->variables = 0; + return pdu; +} + +// release a pdu from memory +void cmu_snmp::free_pdu( struct snmp_pdu *pdu) +{ + ACE_TRACE("cmu_snmp::free_pdu"); + struct variable_list *vp, *ovp; + + vp = pdu->variables; + while(vp){ + // release the oid part + if (vp->name) + delete [] vp->name; + // if deep data, then release as well + if (vp->val.string) + delete [] vp->val.string; + ovp = vp; + // go to the next one + vp = vp->next_variable; + // release up vb itself + delete ovp; + } + // if enterprise release it up + if (pdu->enterprise) + delete [] pdu->enterprise; + // release up pdu itself + delete pdu; +} + + +// add a null var to a pdu +void cmu_snmp::add_var(struct snmp_pdu *pdu, + oid *name, + int name_length, + SmiVALUE *smival) +{ + ACE_TRACE("cmu_snmp::add_var"); + + struct variable_list *vars = 0; + + // if we don't have a vb list ,create one + if (pdu->variables == 0) { + ACE_NEW(pdu->variables, variable_list); + vars = pdu->variables; + } + else + { // we have one, find the end + for(vars = pdu->variables; vars->next_variable; vars = vars->next_variable); + // create one + ACE_NEW(vars->next_variable, variable_list); + // bump ptr + vars = vars->next_variable; + } + + // add the oid with no data + vars->next_variable = 0; + + // hook in the Oid portion + ACE_NEW(vars->name, oid[(name_length)]); + + // fixed + ACE_OS::memcpy((char *)vars->name,(char *)name, name_length * sizeof(oid)); + vars->name_length = name_length; + + // hook in the SMI value + switch( smival->syntax) + { + // null , do nothing + case sNMP_SYNTAX_NULL: + case sNMP_SYNTAX_NOSUCHOBJECT: + case sNMP_SYNTAX_NOSUCHINSTANCE: + case sNMP_SYNTAX_ENDOFMIBVIEW: + { + vars->type = (u_char) smival->syntax; + vars->val.string = 0; + vars->val_len = 0; + } + break; + + // octects + case sNMP_SYNTAX_OCTETS: + case sNMP_SYNTAX_OPAQUE: + case sNMP_SYNTAX_IPADDR: + { + vars->type = (u_char) smival->syntax; + ACE_NEW(vars->val.string, + u_char[(unsigned)smival->value.string.len]); + vars->val_len = (int) smival->value.string.len; + ACE_OS::memcpy( (u_char *) vars->val.string, + (u_char *) smival->value.string.ptr, + (unsigned) smival->value.string.len); + } + break; + + // oid + case sNMP_SYNTAX_OID: + { + vars->type = (u_char) smival->syntax; + vars->val_len = (int) smival->value.oid.len * sizeof(oid); + ACE_NEW(vars->val.objid, oid[(unsigned)vars->val_len]); + ACE_OS::memcpy((u_long *)vars->val.objid, + (u_long *)smival->value.oid.ptr, + (unsigned) vars->val_len); + } + break; + + + + case sNMP_SYNTAX_TIMETICKS: + case sNMP_SYNTAX_CNTR32: + case sNMP_SYNTAX_GAUGE32: + case sNMP_SYNTAX_UINT32: + { + long templong; + vars->type = (u_char) smival->syntax; + ACE_NEW(vars->val.integer, long); + vars->val_len = sizeof(long); + templong = (long) smival->value.uNumber; + ACE_OS::memcpy( (long*) vars->val.integer, + (long*) &templong, + sizeof(long)); + } + break; + + case sNMP_SYNTAX_INT32: + { + long templong; + vars->type = (u_char) smival->syntax; + ACE_NEW(vars->val.integer, long); + vars->val_len = sizeof(long); + templong = (long) smival->value.sNumber; + ACE_OS::memcpy( (long*) vars->val.integer, + (long*) &templong, + sizeof(long)); + } + break; + + // 64 bit counter + case sNMP_SYNTAX_CNTR64: + { + vars->type = ( u_char) smival->syntax; + ACE_NEW(vars->val.counter64, counter64); + vars->val_len = sizeof(struct counter64); + ACE_OS::memcpy( (struct counter64*) vars->val.counter64, + (SmiLPCNTR64) &(smival->value.hNumber), + sizeof( SmiCNTR64)); + } + break; + + } // end switch + +} + +// build the authentication +// works for v1 or v2c +u_char *cmu_snmp::auth_build( u_char *data, + int *length, + long int version, + u_char *community, + int community_len, + int messagelen) +{ + ACE_TRACE("cmu_snmp::auth_build"); + u_char *params; + int plen; + + params = community; + plen = community_len; + + data = asn1::build_sequence(data, + length, + (u_char)(ASN_SEQUENCE | ASN_CONSTRUCTOR), + messagelen + plen + 5); + if (data == 0){ + ASNERROR("buildheader"); + return 0; + } + data = asn1::build_int(data, + length, + (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER), + (long *)&version, + sizeof(version)); + if (data == 0){ + ASNERROR("buildint"); + return 0; + } + + data = asn1::build_string(data, + length, + (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OCTET_STR), + params, + plen ); + if (data == 0){ + ASNERROR("buildstring"); + return 0; + } + + return (u_char *)data; +} + + +// build a variable binding +u_char * cmu_snmp::build_var_op(u_char *data, oid * var_name, + int *var_name_len, + u_char var_val_type, + int var_val_len, u_char *var_val, + int *listlength) + +{ + ACE_TRACE("cmu_snmp::build_var_op"); + int dummyLen, headerLen; + u_char *dataPtr; + + dummyLen = *listlength; + dataPtr = data; + + data += 4; + dummyLen -=4; + if (dummyLen < 0) + return 0; + + headerLen = data - dataPtr; + *listlength -= headerLen; + data = asn1::build_objid( data, listlength, + (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OBJECT_ID), + var_name, *var_name_len); + if (data == 0) { + ASNERROR(""); + return 0; + } + + // based on the type... + switch(var_val_type) { + case ASN_INTEGER: + data = asn1::build_int( data, listlength, var_val_type, (long *)var_val, + var_val_len); + break; + + case SMI_GAUGE: + case SMI_COUNTER: + case SMI_TIMETICKS: + case SMI_UINTEGER: + data = asn1::build_unsigned_int( data, + listlength, + var_val_type, + (u_long *)var_val, + var_val_len); + break; + + case SMI_COUNTER64: + data = asn1::build_unsigned_int64(data, + listlength, + var_val_type, + (struct counter64 *)var_val, + var_val_len); + break; + + case ASN_OCTET_STR: + case SMI_IPADDRESS: + case SMI_OPAQUE: + case SMI_NSAP: + data = asn1::build_string(data, listlength, var_val_type, + var_val, var_val_len); + break; + + case ASN_OBJECT_ID: + data = asn1::build_objid(data, listlength, var_val_type, + (oid *)var_val, var_val_len / sizeof(oid)); + break; + + case ASN_NULL: + data = asn1::build_null(data, listlength, var_val_type); + break; + + case ASN_BIT_STR: + data = asn1::build_bitstring(data, listlength, var_val_type, + var_val, var_val_len); + break; + + case SNMP_NOSUCHOBJECT: + case SNMP_NOSUCHINSTANCE: + case SNMP_ENDOFMIBVIEW: + data = asn1::build_null(data, listlength, var_val_type); + break; + + default: + ASNERROR("wrong type"); + return 0; + } + if (data == 0) { + ASNERROR(""); + return 0; + } + dummyLen = (data - dataPtr) - headerLen; + + asn1::build_sequence(dataPtr, &dummyLen, + (u_char)(ASN_SEQUENCE | ASN_CONSTRUCTOR), + dummyLen); + return data; +} + + +// serialize the pdu +int cmu_snmp::build( struct snmp_pdu *pdu, u_char *packet, + int *out_length, long version, + u_char* community, int community_len) +{ + ACE_TRACE("cmu_snmp::build"); + u_char buf[SNMP_MSG_LENGTH]; + u_char *cp; + struct variable_list *vp; + int length; + int totallength; + + length = *out_length; + cp = packet; + for(vp = pdu->variables; vp; vp = vp->next_variable) { + cp = cmu_snmp::build_var_op( cp, vp->name, + &vp->name_length, vp->type, + vp->val_len, (u_char *)vp->val.string, + &length); + if (cp == 0) + return -1; + } + totallength = cp - packet; + + length = SNMP_MSG_LENGTH; + + // encode the total len + cp = asn1::build_header( buf, &length, + (u_char)(ASN_SEQUENCE | ASN_CONSTRUCTOR), + totallength); + if (cp == 0) + return -1; + ACE_OS::memcpy( (char *)cp, (char *)packet,totallength); + totallength += cp - buf; + + length = *out_length; + if (pdu->command != TRP_REQ_MSG) { + + // request id + cp = asn1::build_int( packet, + &length, + (u_char )(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER), + (long *)&pdu->reqid, + sizeof(pdu->reqid)); + if (cp == 0) + return -1; + + // error status + cp = asn1::build_int(cp, + &length, + (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER), + (long *)&pdu->errstat, sizeof(pdu->errstat)); + if (cp == 0) + return -1; + + // error index + cp = asn1::build_int(cp, + &length, + (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER), + (long *)&pdu->errindex, sizeof(pdu->errindex)); + if (cp == 0) + return -1; + } + else { // this is a trap message + + // enterprise + cp = asn1::build_objid( packet, + &length, + (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OBJECT_ID), + (oid *)pdu->enterprise, + pdu->enterprise_length); + if (cp == 0) + return -1; + + // agent-addr + cp = asn1::build_string(cp, + &length, + // HDN Fixed to use correct tag + (u_char)SMI_IPADDRESS, + //(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OCTET_STR), + (u_char *)&pdu->agent_addr.sin_addr.s_addr, + sizeof(pdu->agent_addr.sin_addr.s_addr)); + if (cp == 0) + return -1; + + long tmp (static_cast (pdu->trap_type)); + // generic trap + cp = asn1::build_int(cp, + &length, + (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER), + &tmp, + sizeof(pdu->trap_type)); + if (cp == 0) + return -1; + + tmp = static_cast (pdu->specific_type); + // specific trap + cp = asn1::build_int( cp, + &length, + (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER), + &tmp, + sizeof(pdu->specific_type)); + if (cp == 0) + return -1; + + // timestamp + cp = asn1::build_int(cp, + &length, + // HDN Fixed to use correct tag + (u_char)SMI_TIMETICKS, + //(u_char )(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER), + (long *)&pdu->time, + sizeof(pdu->time)); + if (cp == 0) + return -1; + } + + if (length < totallength) + return -1; + // fixed + ACE_OS::memcpy((char *)cp, (char *)buf, totallength); + totallength += cp - packet; + + length = SNMP_MSG_LENGTH; + cp = asn1::build_header(buf, + &length, + (u_char)pdu->command, + totallength); + if (cp == 0) + return -1; + if (length < totallength) + return -1; + // fixed + ACE_OS::memcpy((char *)cp, (char *)packet, totallength); + totallength += cp - buf; + + length = *out_length; + + cp = cmu_snmp::auth_build( packet, + &length, + version, + community, + community_len, + totallength ); + if (cp == 0) + return -1; + if ((*out_length - (cp - packet)) < totallength) + return -1; + // fixed + ACE_OS::memcpy((char *)cp, (char *)buf, totallength); + totallength += cp - packet; + *out_length = totallength; + + return 0; +} + +// parse the authentication header +u_char *cmu_snmp::auth_parse(u_char *data, + int *length, u_char *sid, + int *slen, long *version) +{ + ACE_TRACE("cmu_snmp::auth_parse"); + u_char type; + + // get the type + data = asn1::parse_header( data, length, &type); + if (data == 0){ + ASNERROR("bad header"); + return 0; + } + + if (type != (ASN_SEQUENCE | ASN_CONSTRUCTOR)) { + ASNERROR("wrong auth header type"); + return 0; + } + + // get the version + data = asn1::parse_int(data, length, &type, version, sizeof(*version)); + if (data == 0) { + ASNERROR("bad parse of version"); + return 0; + } + + // get the community name + data = asn1::parse_string(data, length, &type, sid, slen); + if (data == 0) { + ASNERROR("bad parse of community"); + return 0; + } + + return (u_char *)data; +} + +/* u_char *data, // IN - pointer to the start of object + oid *var_name, // OUT - object id of variable + int *var_name_len, // IN/OUT - length of variable name + u_char *var_val_type, // OUT - type of variable + (int or octet string) (one byte) + int *var_val_len, // OUT - length of variable + u_char **var_val, // OUT - pointer to ASN1 encoded value of variable +*/ + +u_char * +cmu_snmp::parse_var_op( u_char *data, oid *var_name, + int *var_name_len, u_char *var_val_type, + int *var_val_len, u_char **var_val, + int *listlength) +{ + ACE_TRACE("cmu_snmp::parse_var_op"); + u_char var_op_type; + int var_op_len = *listlength; + u_char *var_op_start = data; + + data = asn1::parse_header(data, &var_op_len, &var_op_type); + if (data == 0){ + ASNERROR(""); + return 0; + } + if (var_op_type != (u_char)(ASN_SEQUENCE | ASN_CONSTRUCTOR)) + return 0; + data = asn1::parse_objid(data, &var_op_len, &var_op_type, var_name, var_name_len); + if (data == 0) { + ASNERROR(""); + return 0; + } + if (var_op_type != (u_char) + (ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OBJECT_ID)) + return 0; + *var_val = data; /* save pointer to this object */ + /* find out what type of object this is */ + data = asn1::parse_header(data, &var_op_len, var_val_type); + if (data == 0) { + ASNERROR(""); + return 0; + } + *var_val_len = var_op_len; + data += var_op_len; + *listlength -= (int)(data - var_op_start); + return data; +} + + + +// build a pdu from a data and length +int cmu_snmp::parse( struct snmp_pdu *pdu, + u_char *data, + u_char *community_name, + u_long &community_len, + snmp_version &spp_version, + int length) +{ + ACE_TRACE("cmu_snmp::parse"); + u_char msg_type; + u_char type; + u_char *var_val; + long version; + int len, four; + u_char community[256]; + int community_length = 256; + struct variable_list *vp = 0; + oid objid[MAX_NAME_LEN], *op; + + // authenticates message and returns length if valid + data = cmu_snmp::auth_parse(data, + &length, + community, + &community_length, + &version); + if (data == 0) + return -1; + + // copy the returned community name + ACE_OS::memcpy( (u_char *) community_name, + (u_char *) community, + community_length); + community_len = (long) community_length; + + if( version != SNMP_VERSION_1 && version != SNMP_VERSION_2C ) { + ASNERROR("Wrong version"); + return -1; + } + + spp_version = (snmp_version) version; + + data = asn1::parse_header(data, + &length, + &msg_type); + if (data == 0) + return -1; + pdu->command = msg_type; + + if (pdu->command != TRP_REQ_MSG){ + // get the rid + data = asn1::parse_int(data, + &length, &type, + (long *)&pdu->reqid, + sizeof(pdu->reqid)); + if (data == 0) + return -1; + // get the error status + data = asn1::parse_int(data, + &length, + &type, + (long *)&pdu->errstat, + sizeof(pdu->errstat)); + if (data == 0) + return -1; + // get the error index + data = asn1::parse_int(data, + &length, + &type, + (long *)&pdu->errindex, + sizeof(pdu->errindex)); + if (data == 0) + return -1; + } + else { // is a trap + + // get the enterprise + pdu->enterprise_length = MAX_NAME_LEN; + data = asn1::parse_objid(data, + &length, + &type, + objid, + &pdu->enterprise_length); + if (data == 0) + return -1; + + ACE_NEW_RETURN(pdu->enterprise, + oid[pdu->enterprise_length*sizeof(oid)],-1); + + // fixed + ACE_OS::memcpy((char *)pdu->enterprise,(char *)objid, + pdu->enterprise_length * sizeof(oid)); + + // get source address + four = 4; + data = asn1::parse_string(data, &length, &type, + (u_char *)&pdu->agent_addr.sin_addr.s_addr, + &four); + if (data == 0) + return -1; + + long tmp (static_cast (pdu->trap_type)); + + // get trap type + data = asn1::parse_int(data, &length, &type, &tmp, + sizeof(pdu->trap_type)); + if (data == 0) + return -1; + + // trap type + tmp = static_cast (pdu->specific_type); + data = asn1::parse_int(data, &length, &type, &tmp, + sizeof(pdu->specific_type)); + if (data == 0) + return -1; + + // timestamp + data = asn1::parse_int(data, &length, &type, (long *)&pdu->time, + sizeof(pdu->time)); + if (data == 0) + return -1; + } + + // get the vb list + data = asn1::parse_header(data, &length, &type); + if (data == 0) + return -1; + + if (type != (u_char)(ASN_SEQUENCE | ASN_CONSTRUCTOR)) + return -1; + + while((int)length > 0) { + if (pdu->variables == 0) { + ACE_NEW_RETURN(pdu->variables, variable_list, -1); + vp = pdu->variables; + } else { + ACE_NEW_RETURN(vp->next_variable, variable_list, -1); + vp = vp->next_variable; + } + vp->next_variable = 0; + vp->val.string = 0; + vp->name = 0; + vp->name_length = MAX_NAME_LEN; + data = cmu_snmp::parse_var_op( data, objid, + &vp->name_length, &vp->type, + &vp->val_len, &var_val, + (int *)&length); + if (data == 0) + return -1; + + ACE_NEW_RETURN(op, oid[(unsigned)vp->name_length * sizeof(oid)], -1); + + // fixed + ACE_OS::memcpy((char *)op, (char *)objid, vp->name_length * sizeof(oid)); + vp->name = op; + + len = SNMP_MSG_LENGTH; + switch((short)vp->type) { + case ASN_INTEGER: + case SMI_COUNTER: + case SMI_GAUGE: + case SMI_TIMETICKS: + case SMI_UINTEGER: + ACE_NEW_RETURN(vp->val.integer,long, -1); + vp->val_len = sizeof(long); + asn1::parse_int(var_val, &len, &vp->type, (long *)vp->val.integer, sizeof(vp->val.integer)); + break; + case SMI_COUNTER64: + ACE_NEW_RETURN(vp->val.counter64, counter64, -1); + vp->val_len = sizeof(struct counter64); + asn1::parse_unsigned_int64(var_val, &len, &vp->type, + (struct counter64 *)vp->val.counter64, + sizeof(*vp->val.counter64)); + break; + + case ASN_OCTET_STR: + case SMI_IPADDRESS: + case SMI_OPAQUE: + case SMI_NSAP: + ACE_NEW_RETURN(vp->val.string, u_char[(unsigned)vp->val_len + 1], -1); + asn1::parse_string(var_val, &len, &vp->type, vp->val.string, + &vp->val_len); + break; + + case ASN_OBJECT_ID: + vp->val_len = MAX_NAME_LEN; + asn1::parse_objid(var_val, &len, &vp->type, objid, &vp->val_len); + //vp->val_len *= sizeof(oid); + + ACE_NEW_RETURN(vp->val.objid, oid[(unsigned)vp->val_len*sizeof(oid)], -1); + + // fixed + ACE_OS::memcpy((char *)vp->val.objid, + (char *)objid, + vp->val_len * sizeof(oid)); + break; + + case SNMP_NOSUCHOBJECT: + case SNMP_NOSUCHINSTANCE: + case SNMP_ENDOFMIBVIEW: + case ASN_NULL: + break; + default: + ASNERROR("bad type returned "); + break; + } + } + return 0; +} diff --git a/ACE/ASNMP/asnmp/asn1.h b/ACE/ASNMP/asnmp/asn1.h new file mode 100644 index 00000000000..3be7e3925ef --- /dev/null +++ b/ACE/ASNMP/asnmp/asn1.h @@ -0,0 +1,345 @@ +/* -*-C++-*- */ +#ifndef ASN1 +#define ASN1 +//============================================================================= +/** + * @file asn1.h + * + * $Id$ + * + * Abstract Syntax Notation One, ASN.1 + * As defined in ISO/IS 8824 and ISO/IS 8825 + * This implements a subset of the above International Standards that + * is sufficient to implement SNMP. + * + * + * @author Steve Waldbusser/CMU ? + */ +//============================================================================= + + +/********************************************************************** + Copyright 1988, 1989, 1991, 1992 by Carnegie Mellon University + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of CMU not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. +******************************************************************/ + +#include "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "asnmp/snmp.h" + +// CMU code to define "oid" typedef (old C style) +#ifndef EIGHTBIT_SUBIDS +typedef unsigned long oid; +#define MAX_SUBID 0xFFFFFFFF +#else +typedef unsigned char oid; +#define MAX_SUBID 0xFF +#endif + +#define MAX_OID_LEN 64 /* max subid's in an oid */ + + +// asn.1 values +#define ASN_BOOLEAN (0x01) +#define ASN_INTEGER (0x02) +#define ASN_BIT_STR (0x03) +#define ASN_OCTET_STR (0x04) +#define ASN_NULL (0x05) +#define ASN_OBJECT_ID (0x06) +#define ASN_SEQUENCE (0x10) +#define ASN_SET (0x11) +#define ASN_UNIVERSAL (0x00) +#define ASN_APPLICATION (0x40) +#define ASN_CONTEXT (0x80) +#define ASN_PRIVATE (0xC0) +#define ASN_PRIMITIVE (0x00) +#define ASN_CONSTRUCTOR (0x20) +#define ASN_LONG_LEN (0x80) +#define ASN_EXTENSION_ID (0x1F) +#define ASN_BIT8 (0x80) + +#define IS_CONSTRUCTOR(byte) ((byte) & ASN_CONSTRUCTOR) +#define IS_EXTENSION_ID(byte) (((byte) & ASN_EXTENSION_ID) == ASN_EXTENSION_ID) + +#define ASNERROR( string) +#define MAX_NAME_LEN 64 +#define SNMP_VERSION_1 0 +#define SNMP_VERSION_2C 1 + + +// defined types (from the SMI, RFC 1065) +#define SMI_IPADDRESS (ASN_APPLICATION | 0) +#define SMI_COUNTER (ASN_APPLICATION | 1) +#define SMI_GAUGE (ASN_APPLICATION | 2) +#define SMI_TIMETICKS (ASN_APPLICATION | 3) +#define SMI_OPAQUE (ASN_APPLICATION | 4) +#define SMI_NSAP (ASN_APPLICATION | 5) +#define SMI_COUNTER64 (ASN_APPLICATION | 6) +#define SMI_UINTEGER (ASN_APPLICATION | 7) + +#define GET_REQ_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x0) +#define GETNEXT_REQ_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x1) +#define GET_RSP_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x2) +#define SET_REQ_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x3) +#define TRP_REQ_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x4) + +#define GETBULK_REQ_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x5) +#define INFORM_REQ_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x6) +#define TRP2_REQ_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x7) +#define REPORT_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x8) + +#define SNMP_NOSUCHOBJECT (ASN_CONTEXT | ASN_PRIMITIVE | 0x0) +#define SNMP_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | 0x1) +#define SNMP_ENDOFMIBVIEW (ASN_CONTEXT | ASN_PRIMITIVE | 0x2) + +#define SNMP_MSG_LENGTH 1500 + +typedef struct sockaddr_in ipaddr; + +// pdu +struct snmp_pdu { + int command; // pdu type + unsigned long reqid; // Request id + unsigned long errstat; // Error status + unsigned long errindex; // Error index + + // Trap information + oid *enterprise; // System OID + int enterprise_length; + ipaddr agent_addr; // address of object generating trap + int trap_type; // trap type + int specific_type; // specific type + unsigned long time; // Uptime + + // vb list + struct variable_list *variables; +}; + +// vb list +struct variable_list { + struct variable_list *next_variable; // 0 for last variable + oid *name; // Object identifier of variable + int name_length; // number of subid's in name + unsigned char type; // ASN type of variable + union { // value of variable + long *integer; + unsigned char *string; + oid *objid; + unsigned char *bitstring; + struct counter64 *counter64; + } val; + int val_len; +}; + +struct counter64 { + unsigned long high; + unsigned long low; +}; + +// CMU Interface class for ASN.1 routines +/** + * @class asn1 + * + * @brief Defines the member functions for the asn1 concrete interface class + * CMU routines for performing ASN.1 data marshalling / representation + */ +class ASNMP_Export asn1 + +{ +public: +static unsigned char *parse_int( unsigned char *data, + int *datalength, + unsigned char *type, + long int *intp, + int intsize); +static unsigned char *parse_unsigned_int( unsigned char *data, + int *datalength, + unsigned char *type, + unsigned long *intp, + int intsize); +static unsigned char *build_int( unsigned char *data, + int *datalength, + unsigned char type, + long *intp, + int intsize); + +static unsigned char *build_unsigned_int( unsigned char *data, + int *datalength, + unsigned char type, + unsigned long *intp, + int intsize); + +static unsigned char *parse_string( unsigned char *data, + int *datalength, + unsigned char *type, + unsigned char *string, + int *strlength); + +static unsigned char *build_string( unsigned char *data, + int *datalength, + unsigned char type, + unsigned char *string, + int strlength); + +static unsigned char *parse_header( unsigned char *data, + int *datalength, + unsigned char *type); + +static unsigned char * build_header( unsigned char *data, + int *datalength, + unsigned char type, + int length); + +static unsigned char * build_sequence( unsigned char *data, + int *datalength, + unsigned char type, + int length); + +static unsigned char * parse_length( unsigned char *data, + unsigned long *length); + +static unsigned char *build_length( unsigned char *data, + int *datalength, + int length); + +static unsigned char *build_objid( unsigned char *data, + int *datalength, + unsigned char type, + oid *objid, + int objidlength); + +static unsigned char *parse_objid( unsigned char *data, + int *datalength, + unsigned char *type, + oid *objid, + int *objidlength); + +static unsigned char *parse_null(unsigned char *data, + int *datalength, unsigned + char *type); + +static unsigned char *build_null( unsigned char *data, + int *datalength, + unsigned char type); + +static unsigned char *parse_bitstring( unsigned char *data, + int *datalength, + unsigned char *type, + unsigned char *string, + int *strlength); + +static unsigned char *build_bitstring( unsigned char *data, + int *datalength, + unsigned char type, + unsigned char *string, + int strlength); + +static unsigned char * parse_unsigned_int64(unsigned char *data, + int *datalength, + unsigned char *type, + struct counter64 *cp, + int countersize); + +static unsigned char * build_unsigned_int64( unsigned char *data, + int *datalength, + unsigned char type, + struct counter64 *cp, + int countersize); + +}; + + +// CMU Interface class for SNMPv1, SNMPv2c routines +/** + * @class cmu_snmp + * + * @brief Defines the static functions for the cmu_snmp concrete class. + * These routine create cmu pdu's that can be sent/received on/from agents + */ +class ASNMP_Export cmu_snmp +{ + public: + static struct snmp_pdu *pdu_create( int command); + static void free_pdu( struct snmp_pdu *pdu); + static int build( struct snmp_pdu *pdu, + unsigned char *packet, + int *out_length, + long version, + unsigned char* community, + int community_len); + + static void add_var(struct snmp_pdu *pdu, + oid *name, + int name_length, + SmiVALUE *smival); + + static int parse( struct snmp_pdu *pdu, + unsigned char *data, + unsigned char *community_name, + unsigned long &community_len, + snmp_version &version, + int length); + static unsigned char *auth_build( unsigned char *data, + int *length, + long int version, + unsigned char *community, + int community_len, + int messagelen); + + static unsigned char *build_var_op(unsigned char *data, + oid * var_name, + int *var_name_len, + unsigned char var_val_type, + int var_val_len, + unsigned char *var_val, + int *listlength); + + +static unsigned char *auth_parse(unsigned char *data, + int *length, + unsigned char *sid, + int *slen, + long *version); + +/* + @params data, IN - pointer to the start of object + var_name OUT - object id of variable + var_name_len IN/OUT - length of variable name + var_val_type OUT - type of variable (int or octet string) (one byte) + var_val_len OUT - length of variable + var_val, OUT - pointer to ASN1 encoded value of variable + listlength IN/OUT - number of valid bytes left in var_op_list +*/ +static unsigned char *parse_var_op( unsigned char *data, + oid *var_name, + int *var_name_len, + unsigned char *var_val_type, + int *var_val_len, + unsigned char **var_val, + int *listlength); + +}; + +#endif // ASN1 + diff --git a/ACE/ASNMP/asnmp/asnmp.mpc b/ACE/ASNMP/asnmp/asnmp.mpc new file mode 100644 index 00000000000..fc128bee249 --- /dev/null +++ b/ACE/ASNMP/asnmp/asnmp.mpc @@ -0,0 +1,26 @@ +// $Id$ + +project (asnmp_lib) : ace_output, acelib { + sharedname = asnmp + dynamicflags = ASNMP_BUILD_DLL + includes += $(ACE_ROOT)/ASNMP + + source_files { + address.cpp + asn1.cpp + counter.cpp + ctr64.cpp + gauge.cpp + integer.cpp + octet.cpp + oid.cpp + pdu.cpp + snmp.cpp + target.cpp + timetick.cpp + transaction.cpp + vb.cpp + wpdu.cpp + sagent.cpp + } +} diff --git a/ACE/ASNMP/asnmp/counter.cpp b/ACE/ASNMP/asnmp/counter.cpp new file mode 100644 index 00000000000..c62b1d0a20a --- /dev/null +++ b/ACE/ASNMP/asnmp/counter.cpp @@ -0,0 +1,107 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// counter.cpp +// +// = DESCRIPTION +// Class implementation for SMI Counter32 class. +// +// = AUTHOR +// Peter E Mellquist +// Michael R MacFaden mrm@cisco.com - rework & ACE port +// ============================================================================ +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/counter.h" + +ACE_RCSID(asnmp, counter, "$Id$") + +// constructor with a value +Counter32::Counter32( const unsigned long i):SnmpUInt32(i) +{ + smival.syntax = sNMP_SYNTAX_CNTR32; +} + +// copy constructor +Counter32::Counter32( const Counter32 &c) + : SnmpUInt32 (c) +{ + this->smival.value.uNumber = c.smival.value.uNumber; + smival.syntax = sNMP_SYNTAX_CNTR32; + valid_flag = 1; +} + +// syntax type +SmiUINT32 Counter32::get_syntax() +{ + return sNMP_SYNTAX_CNTR32; +} + +// general assignment from any Value +SnmpSyntax& Counter32::operator=( SnmpSyntax &in_val){ + if ( this == &in_val ) // handle assignement from itself + return *this; + + valid_flag = 0; // will get set true if really valid + if (in_val.valid()) + { + switch (in_val.get_syntax()) + { + case sNMP_SYNTAX_UINT32: + // case sNMP_SYNTAX_GAUGE32: .. indistinquishable from UINT32 + case sNMP_SYNTAX_CNTR32: + case sNMP_SYNTAX_TIMETICKS: + case sNMP_SYNTAX_INT32: // implied cast int -> uint + this->smival.value.uNumber = + ((Counter32 &)in_val).smival.value.uNumber; + valid_flag = 1; + break; + } + } + return *this; +} + +// overloaded assignment +Counter32& Counter32::operator=( const unsigned long int i) +{ + this->smival.value.uNumber=i; + return *this; +} + +// overloaded assignment +Counter32& Counter32::operator=( const Counter32 &uli) +{ + this->smival.value.uNumber = uli.smival.value.uNumber; + return *this; +} + +// otherwise, behave like an unsigned long int +Counter32::operator unsigned long() +{ + return this->smival.value.uNumber; +} + +// clone +SnmpSyntax * Counter32::clone() const +{ + return ( SnmpSyntax *) new Counter32(*this); +} diff --git a/ACE/ASNMP/asnmp/counter.h b/ACE/ASNMP/asnmp/counter.h new file mode 100644 index 00000000000..36fda2f84ce --- /dev/null +++ b/ACE/ASNMP/asnmp/counter.h @@ -0,0 +1,79 @@ +/* -*-C++-*- */ +#ifndef COUNTER_ +#define COUNTER_ +//============================================================================= +/** + * @file counter.h + * + * $Id$ + * + * Class definition for SMI Counter32 class. + * + * + * @author Peter E Mellquist + */ +//============================================================================= + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/smival.h" +#include "asnmp/integer.h" + +//------------[ Counter32 Class ]------------------------------------------ +// The counter class allows all the functionality of unsigned +// 32 bit integers but is recognized as a distinct SMI type. Counter32 +// class objects may be set or get into Vb objects. +// +// This class does not behave as defined by the abstract model +// in RFC 1155 section 3.2.3.3 + +/** + * @class Counter32 + * + * @brief Defines the member functions for the Counter32 concrete class + * This class implements RFC 1155 Counter Object and is named + * Counter32 after the RFC1902 redefinition of V1 SMI datatypes + */ +class ASNMP_Export Counter32 : public SnmpUInt32 +{ + public: + /// constructor with a value + Counter32( const unsigned long i = 0); + + /// copy constructor + Counter32( const Counter32 &c); + + /// syntax type + SmiUINT32 get_syntax(); + + /// create a new instance of this Value + SnmpSyntax *clone() const; + + /// copy an instance of this Value + SnmpSyntax& operator=( SnmpSyntax &val); + + /// overloaded assignment + Counter32& operator=( const Counter32 &uli); + + /// overloaded assignment + Counter32& operator=( const unsigned long i); + + /// otherwise, behave like an unsigned long int + operator unsigned long(); +}; + +#endif // COUNTER_ diff --git a/ACE/ASNMP/asnmp/ctr64.cpp b/ACE/ASNMP/asnmp/ctr64.cpp new file mode 100644 index 00000000000..60cc9abfbbb --- /dev/null +++ b/ACE/ASNMP/asnmp/ctr64.cpp @@ -0,0 +1,213 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// ctr64.cpp +// +// = DESCRIPTION +// Implementation for Counter64 ( 64 bit counter class). +// +// = AUTHOR +// Peter E Mellquist +// Michael R MacFaden mrm@cisco.com - rework & ACE port +// ============================================================================ +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/ctr64.h" +#include "ace/OS_NS_stdio.h" + +ACE_RCSID(asnmp, ctr64, "$Id$") + +#define MAX32 4294967295u + +//-----------[ syntax type ]---------------------------------------------- +SmiUINT32 Counter64::get_syntax() +{ + return sNMP_SYNTAX_CNTR64; +} + +//------------------[ constructor with values ]-------------------------- +Counter64::Counter64( unsigned long hiparm, unsigned long loparm) +{ + smival.syntax = sNMP_SYNTAX_CNTR64; + smival.value.hNumber.hipart = hiparm; + smival.value.hNumber.lopart = loparm; +} + +//------------------[ constructor with low value only ]------------------ +Counter64::Counter64( ACE_UINT64 llw ) +{ + smival.syntax = sNMP_SYNTAX_CNTR64; + smival.value.hNumber.hipart = (unsigned long) (llw >> 32); + smival.value.hNumber.lopart = (unsigned long) llw & 0xffffffff; +} + +//------------------[ copy constructor ]--------------------------------- +Counter64::Counter64( const Counter64 &ctr64 ) + : SnmpSyntax (ctr64) +{ + smival.syntax = sNMP_SYNTAX_CNTR64; + smival.value.hNumber.hipart = ctr64.high(); + smival.value.hNumber.lopart = ctr64.low(); +} + +//------------------[ destructor ]--------------------------------- +Counter64::~Counter64() +{ +} + + +//------------------[ Counter64::high() ]------------------------------ +// return the high part +unsigned long Counter64::high() const +{ + return smival.value.hNumber.hipart; +} + + +//------------------[ Counter64::low() ]------------------------------- +// return the low part +unsigned long Counter64::low() const +{ + return smival.value.hNumber.lopart; +} + +//------------------[ set_high( const unsigned long h) ]----------- +// set the high part +void Counter64::set_high( const unsigned long h) +{ + smival.value.hNumber.hipart = h; +} + +//------------------[ set_low( const unsigned long l) ]------------ +// set the low part +void Counter64::set_low( const unsigned long l) +{ + smival.value.hNumber.lopart = l; +} + + +//-----------[ to_long_double( Counter64 c64) ]----------------------------- +// convert a Counter 64 to a long double +long double Counter64::to_long_double() const +{ + long double ld = this->high(); + ld *= MAX32; + ld += this->low(); + return ld; +} + + +//-----------[ ld_to_c64( long double ld) ]---------------------------- +// convert a long double to a Counter64 +// semantics changed from prior version +Counter64& Counter64::assign( long double ld) +{ + smival.syntax = sNMP_SYNTAX_CNTR64; + unsigned long h = smival.value.hNumber.hipart = (unsigned long)(ld / MAX32); + smival.value.hNumber.lopart = (unsigned long)(ld - h); + return *this; +} + +//----------------[ general Value = operator ]--------------------- +SnmpSyntax& Counter64::operator=( SnmpSyntax &val) +{ + // protect against assignment from itself + if ( this == &val ) + return *this; + + smival.value.hNumber.lopart = 0; // pessimsitic - assume no mapping + smival.value.hNumber.hipart = 0; + + // try to make assignment valid + if (val.valid()){ + switch (val.get_syntax()){ + case sNMP_SYNTAX_CNTR64: + smival.value.hNumber.hipart = + ((Counter64 &)val).smival.value.hNumber.hipart; + smival.value.hNumber.lopart = + ((Counter64 &)val).smival.value.hNumber.lopart; + break; + + case sNMP_SYNTAX_CNTR32: + case sNMP_SYNTAX_TIMETICKS: + case sNMP_SYNTAX_GAUGE32: + // case sNMP_SYNTAX_UINT32: .. indistinguishable from GAUGE32 + case sNMP_SYNTAX_INT32: + // take advantage of union... + smival.value.hNumber.lopart = ((Counter64 &)val).smival.value.uNumber; + smival.value.hNumber.hipart = 0; + break; + } + } + return *this; +} + +// overloaded assignment +Counter64& Counter64::operator=( const ACE_UINT64 rhs) +{ + smival.value.hNumber.hipart = (unsigned long) (rhs >> 32); + smival.value.hNumber.lopart = (unsigned long) rhs; + return *this; +} + +// overloaded assignment +Counter64& Counter64::operator=( const Counter64 &rhs) +{ + smival.value.hNumber.hipart = rhs.high(); + smival.value.hNumber.lopart = rhs.low(); + return *this; +} + +// otherwise, behave like an unsigned long int +Counter64::operator ACE_UINT64() +{ + ACE_UINT64 val = smival.value.hNumber.hipart; + val = val << 32; // shift right 4 bytes + val |= smival.value.hNumber.lopart; + return val; +} + +//----------------[ Counter64::clone() ]----------------------------------- +// create a new instance of this Value +SnmpSyntax* Counter64::clone() const +{ + return ( SnmpSyntax *) new Counter64(*this); +} + +//----------------[ Counter64::valid() ]------------------------------------- +int Counter64::valid() const +{ + return 1; +} + +//----------[ return ASCII format ]------------------------- +// TODO: Fix up to do real 64bit decimal value printing... +// For now, print > 32-bit values in hex +const char * Counter64::to_string() +{ + if ( high() != 0 ) + ACE_OS::sprintf(output_buffer, "0x%X%08X", + (unsigned int)high(), (unsigned int)low()); + else + ACE_OS::sprintf(output_buffer, "%d", (int) low()); + return output_buffer; +} diff --git a/ACE/ASNMP/asnmp/ctr64.h b/ACE/ASNMP/asnmp/ctr64.h new file mode 100644 index 00000000000..6b97b9966f2 --- /dev/null +++ b/ACE/ASNMP/asnmp/ctr64.h @@ -0,0 +1,111 @@ +/* -*-C++-*- */ +#ifndef CTR64_ +#define CTR64_ +//============================================================================= +/** + * @file ctr64.h + * + * $Id$ + * + * SNMP Counter64 class definition. + * + * + * @author Peter E Mellquist + */ +//============================================================================= + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/smival.h" +#include "ace/Basic_Types.h" + +#define CTR64OUTBUF 30 // maximum ascii string for a 64-bit ctr + + +//---------[ 64 bit Counter Class ]-------------------------------- +// Counter64 Class encapsulates two unsigned integers into a +// a single entity. This type has is available in SNMPv2 but +// may be used anywhere where needed. +// +/** + * @class Counter64 + * + * @brief Defines the member functions for the Counter64 concrete class + * This class implements RFC 1902 64 bit Counter Object. + */ +class ASNMP_Export Counter64 : public SnmpSyntax +{ +public: + /// default constructor + Counter64( ACE_UINT64 llw = 0); + + /// constructor with values + Counter64( unsigned long hiparm, unsigned long loparm); + + /// copy constructor + Counter64( const Counter64 &ctr64); + + /// destructor (ensure that SnmpSyntax::~SnmpSyntax() is overridden) + ~Counter64(); + + /// syntax type + SmiUINT32 get_syntax(); + + /// return a long double representation + long double to_long_double() const; + + /// assign a long double to a counter64 + Counter64& assign( long double ld); + + /// return the high part + unsigned long high() const; + + /// return the low part + unsigned long low() const; + + /// set the high part + void set_high( const unsigned long h); + + /// set the low part + void set_low( const unsigned long l); + + /// overloaded assignment + Counter64& operator=( const ACE_UINT64 rhs); + + /// overloaded assignment + Counter64& operator=( const Counter64 &rhs); + + /// get a printable ASCII representation + const char *to_string(); + + /// create a new instance of this Value + SnmpSyntax *clone() const; + + /// copy an instance of this Value + SnmpSyntax& operator=( SnmpSyntax &val); + + /// general validity test, always true + int valid() const; + + /// otherwise, behave like an ACE_UINT64 + operator ACE_UINT64(); + +protected: + char output_buffer[CTR64OUTBUF]; +}; + +#endif // CTR64_ diff --git a/ACE/ASNMP/asnmp/enttraps.h b/ACE/ASNMP/asnmp/enttraps.h new file mode 100644 index 00000000000..433538eb258 --- /dev/null +++ b/ACE/ASNMP/asnmp/enttraps.h @@ -0,0 +1,147 @@ +/* -*-C++-*- */ +#ifndef ENTTRAPS_ +#define ENTTRAPS_ +//============================================================================= +/** + * @file enttraps.h + * + * $Id$ + * + * constants for Enterprise Traps + * + * + * @author Peter E MellquistMichael R MacFaden mrm@cisco.com - rework & ACE port + */ +//============================================================================= + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/asn1.h" // ASN.1 header file + +//--------------[ well known trap ids ]----------------------------------- +/** + * @class snmpTrapsOid + * + * @brief Defines the member functions for the snmpTrapsOid base class + * to implement the traps defined in RFC 1215 + */ +class ASNMP_Export snmpTrapsOid : public Oid +{ + public: + snmpTrapsOid (void):Oid("1.3.6.1.6.3.1.1.5"){} + SnmpSyntax& operator=( SnmpSyntax &val){ return Oid::operator=(val); } +}; + +/** + * @class snmpTrapEnterpriseOid + * + * @brief Defines the default Enterprise Oid for this software package + */ +class ASNMP_Export snmpTrapEnterpriseOid : public Oid +{ + public: + snmpTrapEnterpriseOid(void): Oid("1.3.6.1.6.3.1.1.4.3.0") { } + SnmpSyntax& operator=( SnmpSyntax &val){ return Oid::operator=(val); } +}; + +/** + * @class coldStartOid + * + * @brief Defines the RFC 1215 agent cold start generic trap (system reboot) + */ +class ASNMP_Export coldStartOid : public snmpTrapsOid +{ + public: + coldStartOid( void){*this+=".1";} + SnmpSyntax& operator=( SnmpSyntax &val){ return snmpTrapsOid::operator=(val); } +}; + +/** + * @class warmStartOid + * + * @brief Defines the RFC 1215 agent warm start generic trap (agent reboot) + */ +class ASNMP_Export warmStartOid : public snmpTrapsOid +{ + public: + warmStartOid( void){*this+=".2";} + SnmpSyntax& operator=( SnmpSyntax &val){ return snmpTrapsOid::operator=(val); } +}; + +/** + * @class linkDownOid + * + * @brief Defines the RFC 1215 interface (link) down trap + */ +class ASNMP_Export linkDownOid : public snmpTrapsOid +{ + public: + linkDownOid( void){*this+=".3";} + SnmpSyntax& operator=( SnmpSyntax &val){ return snmpTrapsOid::operator=(val); } +}; + + +// SMI LinkUp Oid +/** + * @class linkUpOid + * + * @brief Defines the RFC 1215 interface (link) up trap + */ +class ASNMP_Export linkUpOid : public snmpTrapsOid +{ + public: + linkUpOid( void){*this+=".4";} + SnmpSyntax& operator=( SnmpSyntax &val){ return snmpTrapsOid::operator=(val); } +}; + +/** + * @class authenticationFailureOid + * + * @brief Defines the RFC 1215 device/agent invalid access trap + */ +class ASNMP_Export authenticationFailureOid : public snmpTrapsOid +{ + public: + authenticationFailureOid( void){*this+=".5";} + SnmpSyntax& operator=( SnmpSyntax &val){ return snmpTrapsOid::operator=(val); } +}; + +/** + * @class egpNeighborLossOid + * + * @brief Defines the RFC 1215 Exterior Gateway Protocol neighbor loss trap + */ +class ASNMP_Export egpNeighborLossOid : public snmpTrapsOid +{ + public: + egpNeighborLossOid( void){*this+=".6";} + SnmpSyntax& operator=( SnmpSyntax &val){ return snmpTrapsOid::operator=(val); } +}; + +#ifdef DEFINE_TRAP_CONSTANTS_ + +const coldStartOid coldStart; +const warmStartOid warmStart; +const linkDownOid linkDown; +const linkUpOid linkUp; +const authenticationFailureOid authenticationFailure; +const egpNeighborLossOid egpNeighborLoss; +const snmpTrapEnterpriseOid snmpTrapEnterprise; + +#endif + +#endif // ENTTRAPS_ diff --git a/ACE/ASNMP/asnmp/gauge.cpp b/ACE/ASNMP/asnmp/gauge.cpp new file mode 100644 index 00000000000..9051e2f83fb --- /dev/null +++ b/ACE/ASNMP/asnmp/gauge.cpp @@ -0,0 +1,114 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// gauge.cpp +// +// = DESCRIPTION +// Class implemtation for SMI Gauge32 class. +// NOTES: This does not behave exactly as a Gauge described in RFC 1155 +// +// = AUTHOR +// Peter E Mellquist +// Michael R MacFaden mrm@cisco.com - rework & ACE port +// ============================================================================ +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/gauge.h" // header file for gauge class + +ACE_RCSID(asnmp, gauge, "$Id$") + +// constructor with a value +Gauge32::Gauge32( const unsigned long i):SnmpUInt32(i) +{ + smival.syntax = sNMP_SYNTAX_GAUGE32; +} + +// copy constructor +Gauge32::Gauge32 ( const Gauge32 &g) + : SnmpUInt32 (g) +{ this->smival.value.uNumber = g.smival.value.uNumber; + smival.syntax = sNMP_SYNTAX_GAUGE32; + valid_flag = 1; +} + +// destructor +Gauge32::~Gauge32() +{ +} + +// syntax type +SmiUINT32 Gauge32::get_syntax() +{ + return sNMP_SYNTAX_GAUGE32; +} + +// overloaded assignment +Gauge32& Gauge32::operator=( const Gauge32 &uli) +{ + this->smival.value.uNumber = uli.smival.value.uNumber; + return *this; +} + +// overloaded assignment +Gauge32& Gauge32::operator=( const unsigned long int i) +{ + smival.value.uNumber=i; return *this; +} + +// general assignment from any Value +// TODO: this is broken if not inherited from UInt32 (see UInt32 code). +SnmpSyntax& Gauge32::operator=( SnmpSyntax &in_val) +{ + + if ( this == &in_val ) // handle assignement from itself + return *this; + + valid_flag = 0; // will get set true if really valid + if (in_val.valid()) + { + switch (in_val.get_syntax()) + { + case sNMP_SYNTAX_UINT32: + case sNMP_SYNTAX_GAUGE32: + case sNMP_SYNTAX_CNTR32: + case sNMP_SYNTAX_TIMETICKS: + case sNMP_SYNTAX_INT32: // implied cast int -> uint + this->smival.value.uNumber = + ((Gauge32 &)in_val).smival.value.uNumber; + valid_flag = 1; + break; + } + } + return *this; +} + +// otherwise, act as unsigned long +Gauge32::operator unsigned long() +{ + return smival.value.uNumber; +} + +// clone - create a new instance of this Value +SnmpSyntax* Gauge32::clone() const +{ + return ( SnmpSyntax *) new Gauge32(*this); +} diff --git a/ACE/ASNMP/asnmp/gauge.h b/ACE/ASNMP/asnmp/gauge.h new file mode 100644 index 00000000000..202edaf98bf --- /dev/null +++ b/ACE/ASNMP/asnmp/gauge.h @@ -0,0 +1,79 @@ +/* -*-C++-*- */ +#ifndef GAUGE_ +#define GAUGE_ +//============================================================================= +/** + * @file gauge.h + * + * $Id$ + * + * Class definition for SMI Gauge32 class. + * This class currently does not behave as defined by the abstract model + * in RFC 1155 section 3.2.3.4 (ie the value doesn't latch on the max value) + * + * + * @author Peter E Mellquist + */ +//============================================================================= + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/integer.h" + +//------------[ Gauge32 Class ]------------------------------------------ +// The gauge class allows all the functionality of unsigned +// integers but is recognized as a distinct SMI type. Gauge32 +// objects may be set or get into Vb objects. +// + +/** + * @class Gauge32: + * + * @brief Define RFC1902 Gauge datatype from RFC 1155 section 3.2.3.4 + * Note that this datatype does not behave exactly (acts like a long) + */ +class ASNMP_Export Gauge32: public SnmpUInt32 +{ + public: + /// constructor with a value + Gauge32( const unsigned long i = 0); + + /// copy constructor + Gauge32 ( const Gauge32 &g); + + /// destructor for a Gauge32 (ensure that Value::~Value() is overridden) + ~Gauge32(); + + /// syntax type + SmiUINT32 get_syntax(); + + /// create a new instance of this Value + SnmpSyntax *clone() const; + + /// overloaded assignment + Gauge32& operator=( const Gauge32 &uli); + + /// overloaded assignment + Gauge32& operator=( const unsigned long i); + + /// otherwise, behave like an unsigned int + operator unsigned long(); + + /// copy an instance of this Value + SnmpSyntax& operator=( SnmpSyntax &val); +}; +#endif //GAUGE_ diff --git a/ACE/ASNMP/asnmp/integer.cpp b/ACE/ASNMP/asnmp/integer.cpp new file mode 100644 index 00000000000..8b73ce33dc6 --- /dev/null +++ b/ACE/ASNMP/asnmp/integer.cpp @@ -0,0 +1,230 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// integer.cpp +// +// = DESCRIPTION +// Class implemtation for SMI Integer classes. +// +// = AUTHOR +// Jeff Meyer +// Michael R MacFaden mrm@cisco.com - rework & ACE port +// ============================================================================ +/*=================================================================== + + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/integer.h" // header file for gauge class +#include "ace/OS_NS_stdio.h" + +ACE_RCSID(asnmp, integer, "$Id$") + +// constructor with value +SnmpUInt32::SnmpUInt32 (const unsigned long i) +{ + smival.value.uNumber=i; + smival.syntax = sNMP_SYNTAX_UINT32; + valid_flag = 1; +} + +// copy constructor +SnmpUInt32::SnmpUInt32( const SnmpUInt32 &c) + : SnmpSyntax (c) +{ + smival.value.uNumber=c.smival.value.uNumber; + smival.syntax = sNMP_SYNTAX_UINT32; + valid_flag = 1; +} + +// destructor (ensure that SnmpSyntax::~SnmpSyntax() is overridden) +SnmpUInt32::~SnmpUInt32() +{ +} + +// syntax type +SmiUINT32 SnmpUInt32::get_syntax() +{ + return sNMP_SYNTAX_UINT32; +} + +// object validity +int SnmpUInt32::valid( void) const +{ + return valid_flag; +} + +// overloaded assignment +SnmpUInt32& SnmpUInt32::operator=( const unsigned long int i) +{ + smival.value.uNumber=i; + valid_flag = 1; + return *this; +} + +// general assignment from any Value +SnmpSyntax& SnmpUInt32::operator=( SnmpSyntax &in_val) +{ + if ( this == &in_val ) // handle assignement from itself + return *this; + + valid_flag = 0; // will get set true if really valid + if (in_val.valid()) + { + switch (in_val.get_syntax()) + { + case sNMP_SYNTAX_UINT32: + // case sNMP_SYNTAX_GAUGE32: .. indistinquishable from UINT32 + case sNMP_SYNTAX_CNTR32: + case sNMP_SYNTAX_TIMETICKS: + case sNMP_SYNTAX_INT32: // implied cast int -> uint + this->smival.value.uNumber = + ((SnmpUInt32 &)in_val).smival.value.uNumber; + valid_flag = 1; + break; + } + } + return *this; +} + +// overloaded assignment +SnmpUInt32& SnmpUInt32::operator=( const SnmpUInt32 &uli) +{ + this->smival.value.uNumber = uli.smival.value.uNumber; return *this; +} + +// otherwise, behave like an unsigned long int +SnmpUInt32::operator unsigned long() +{ + return smival.value.uNumber; +} + +// create a new instance of this Value +SnmpSyntax* SnmpUInt32::clone() const +{ + return (SnmpSyntax *) new SnmpUInt32(*this); +} + +// ASCII format return +const char * SnmpUInt32::to_string() +{ + ACE_OS::sprintf(output_buffer, "%d", (int) (this->smival.value.uNumber)); + return output_buffer; +} + + +//==================================================================== +// INT 32 Implementation +//==================================================================== + +// default constructor +SnmpInt32::SnmpInt32 (const long i) +{ + smival.value.sNumber=i; + smival.syntax = sNMP_SYNTAX_INT32; + valid_flag = 1; +} + +// constructor with value +SnmpInt32::SnmpInt32 (const SnmpInt32 &c) + : SnmpSyntax (c) +{ + smival.value.sNumber=c.smival.value.sNumber; + smival.syntax = sNMP_SYNTAX_INT32; + valid_flag = 1; +} + +// destructor +SnmpInt32::~SnmpInt32() +{ +} + +// syntax type +SmiUINT32 SnmpInt32::get_syntax() +{ + return sNMP_SYNTAX_INT32; +} + +// object validity +int SnmpInt32::valid( void) const +{ + return valid_flag; +} + +// overloaded assignment +SnmpInt32& SnmpInt32::operator=( const long i) +{ + this->smival.value.sNumber = (unsigned long) i; + valid_flag = 1; + return *this; +} + +// overloaded assignment +SnmpInt32& SnmpInt32::operator=( const SnmpInt32 &uli) +{ + this->smival.value.sNumber = uli.smival.value.sNumber; + valid_flag = 1; + return *this; +} + +// general assignment from any Value +SnmpSyntax& SnmpInt32::operator=( SnmpSyntax &in_val) +{ + if ( this == &in_val ) // handle assignement from itself + return *this; + + valid_flag = 0; // will get set true if really valid + if (in_val.valid()) + { + switch (in_val.get_syntax()) + { + case sNMP_SYNTAX_INT32: + case sNMP_SYNTAX_UINT32: // implied cast uint -> int + // case sNMP_SYNTAX_GAUGE32: .. indistinquishable from UINT32 + case sNMP_SYNTAX_CNTR32: // implied cast uint -> int + case sNMP_SYNTAX_TIMETICKS: // implied cast uint -> int + this->smival.value.sNumber = + ((SnmpInt32 &)in_val).smival.value.sNumber; + valid_flag = 1; + break; + } + } + return *this; +} + +// otherwise, behave like a long int +SnmpInt32::operator long() +{ + return (long) smival.value.sNumber; +} + +// clone - create a new instance of this Value +SnmpSyntax* SnmpInt32::clone() const +{ + return ( SnmpSyntax *) new SnmpInt32(*this); +} + +// ASCII format return + +const char *SnmpInt32::to_string() +{ + ACE_OS::sprintf(output_buffer, "%d", (int) (long) this->smival.value.sNumber); + return output_buffer; +} diff --git a/ACE/ASNMP/asnmp/integer.h b/ACE/ASNMP/asnmp/integer.h new file mode 100644 index 00000000000..d120684c095 --- /dev/null +++ b/ACE/ASNMP/asnmp/integer.h @@ -0,0 +1,142 @@ +/* -*-C++-*- */ +#ifndef SNMPINTEGER_ +#define SNMPINTEGER_ +//============================================================================= +/** + * @file integer.h + * + * $Id$ + * + * Class definition for Integer classes convertable to SMI. + * + * + */ +//============================================================================= + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/smival.h" + +// TODO get rid of this constant +#define INTOUTBUF 15 // largest ASCII formatted integer + +//------------[ Integer Classes ]------------------------------------------ +// The integer class allows all the functionality of the various +// integers but is contained in a Value object for consistency +// among the various types. +// class objects may be set or get into Vb objects. +// + +// 32 bit unsigned integer class +/** + * @class SnmpUInt32 + * + * @brief Implement RFC 1920 Unsigned Integer SMI datatype + */ +class ASNMP_Export SnmpUInt32 : public SnmpSyntax +{ + + public: + /// default constructor + SnmpUInt32 (const unsigned long i = 0); + + /// copy constructor + SnmpUInt32( const SnmpUInt32 &c); + + /// destructor (ensure that SnmpSyntax::~SnmpSyntax() is overridden) + virtual ~SnmpUInt32(); + + /// syntax type + virtual SmiUINT32 get_syntax(); + + /// overloaded assignment + SnmpUInt32& operator=( const unsigned long i); + + /// overloaded assignment + SnmpUInt32& operator=( const SnmpUInt32 &uli); + + /// otherwise, behave like an unsigned long int + operator unsigned long(); + + /// get a printable ASCII value + virtual const char *to_string(); + + /// create a new instance of this Value + virtual SnmpSyntax *clone() const; + + /// copy an instance of this Value + SnmpSyntax& operator=( SnmpSyntax &val); + + /// did object construct properly + int valid() const; + + protected: + /// contain string representation of object + int valid_flag; + char output_buffer[INTOUTBUF]; +}; + + +// 32 bit signed integer class + /** + * @class SnmpInt32 + * + * @brief Implement RFC 1902 32 bit Integer SMI data object + */ +class ASNMP_Export SnmpInt32 : public SnmpSyntax +{ + public: + /// constructor with value + SnmpInt32 (const long i = 0); + + /// constructor with value + SnmpInt32 (const SnmpInt32 &c); + + /// destructor (ensure that SnmpSyntax::~SnmpSyntax() is overridden) + virtual ~SnmpInt32(); + + /// syntax type + virtual SmiUINT32 get_syntax(); + + /// overloaded assignment + SnmpInt32& operator=( const long i); + + /// overloaded assignment + SnmpInt32& operator=( const SnmpInt32 &li); + + /// otherwise, behave like a long int + operator long(); + + /// create a new instance of this Value + SnmpSyntax *clone() const; + + /// copy an instance of this Value + SnmpSyntax& operator=( SnmpSyntax &val); + + /// get a printable ASCII value + const char *to_string(); + + /// logical state of object + int valid() const; + + protected: + /// contain string representation of object + int valid_flag; + char output_buffer[INTOUTBUF]; +}; + +#endif diff --git a/ACE/ASNMP/asnmp/octet.cpp b/ACE/ASNMP/asnmp/octet.cpp new file mode 100644 index 00000000000..315053cd590 --- /dev/null +++ b/ACE/ASNMP/asnmp/octet.cpp @@ -0,0 +1,594 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// octet.cpp +// +// = DESCRIPTION +// Implements the SMI Octet datatype (RFC 1155) +// This class is fully contained and does not rely on or any other +// SNMP libraries. Ported to ACE by Michael MacFaden mrm@cisco.com +// +// = AUTHOR +// Peter E Mellquist +// +// ============================================================================ +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/octet.h" // include definition for octet class +#include "ace/OS_Memory.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_ctype.h" +#include "ace/os_include/os_ctype.h" + +ACE_RCSID(asnmp, octet, "$Id$") + +//============[ syntax type ]========================================= +SmiUINT32 OctetStr::get_syntax() +{ + return sNMP_SYNTAX_OCTETS; +} + +inline +void init_octet_smi(SmiVALUE& smi) +{ + smi.syntax = sNMP_SYNTAX_OCTETS; + smi.value.string.ptr = 0; + smi.value.string.len = 0; +} + +inline +void reset_octet_smi(SmiVALUE& smi) +{ + delete [] smi.value.string.ptr; + smi.value.string.ptr = 0; + smi.value.string.len = 0; +} + +inline +int copy_octet_smi(SmiVALUE& smi, int size, const char *src, int& valid_flag) +{ + valid_flag = 0; + + if (smi.value.string.ptr) + delete [] smi.value.string.ptr; + + ACE_NEW_RETURN(smi.value.string.ptr, SmiBYTE[size], 1); + ACE_OS::memcpy( smi.value.string.ptr, src, size); + smi.value.string.len = size; + valid_flag = 1; + return 0; +} + +//============[ default constructor ]========================= +OctetStr::OctetStr( const char * string, long size): + output_buffer(0), validity(0) +{ + + init_octet_smi(smival); + + // check for null string + if ( !string) + return; + + if (size == -1) // calc if no length given - assume c style string + size = ACE_OS::strlen( string); + + copy_octet_smi(smival, size, string, validity); +} + + +//============[ set the data on an already constructed Octet ]============ +// TODO: should return status since it can fail in so many places +void OctetStr::set_data( const SmiBYTE* string, long size) +{ + // invalid args, set octetStr to not valid + if ( !string || !size) { + validity = 0; + return; + } + + // assume non-zero terminated string + if (size == -1) // calc if no length given - assume c style string + size = ACE_OS::strlen( (char *)string); + + // free up already used space + if ( smival.value.string.ptr ) { + reset_octet_smi(smival); + } + smival.value.string.len = 0; + + + copy_octet_smi(smival, size, (const char *)string, validity); +} + +//============[ constructor using another octet object ]============== +OctetStr::OctetStr ( const OctetStr &octet): + SnmpSyntax (octet), output_buffer(0), validity(1) +{ + init_octet_smi(smival); + // check for zero len case + if ( octet.smival.value.string.len == 0) { + return; + } + + // must be a valid object + if ( octet.validity == 0) { + validity = 0; + return; + } + + // get the mem needed + copy_octet_smi(smival, octet.smival.value.string.len, + (const char *)octet.smival.value.string.ptr, validity); +} + +//=============[ destructor ]========================================= +OctetStr::~OctetStr() +{ + reset_octet_smi(smival); + delete [] output_buffer; +} + + +//=============[ assignment to a string operator overloaded ]========= +OctetStr& OctetStr::operator=( const char *string) +{ + // get the string size + size_t nz; + + // free up previous memory if needed + if ( smival.value.string.ptr ) { + reset_octet_smi(smival); + } + + // if empty then we are done + if (!string || !(nz = ACE_OS::strlen( string))) { + validity = 1; + return *this; + } + + // get memory needed + copy_octet_smi(smival, nz, string, validity); + return *this; +} + +//=============[ assignment to another oid object overloaded ]======== +OctetStr& OctetStr::operator=( const OctetStr &octet) +{ + // protect against assignment from self + if ( this == &octet ) + return *this; + + // don't assign from invalid objs + if (!octet.validity) { + return *this; + } + + // free up previous memory if needed + if ( smival.value.string.len ) { + reset_octet_smi(smival); + } + + if (!octet.smival.value.string.len) { + validity = 1; + return *this; + } + + // get some memory + copy_octet_smi(smival, octet.smival.value.string.len, + (const char*) octet.smival.value.string.ptr, validity); + return *this; // return self reference +} + +//==============[ equivlence operator overloaded ]==================== +bool operator==( const OctetStr &lhs, const OctetStr &rhs) +{ + if( lhs.left_comparison( rhs.smival.value.string.len, rhs)==0) + return true; + else + return false; +} + +//==============[ not equivlence operator overloaded ]================ +bool operator!=( const OctetStr &lhs, const OctetStr &rhs) +{ + if( lhs.left_comparison( rhs.smival.value.string.len, rhs)!=0) + return true; + else + return false; +} + +//==============[ less than < overloaded ]============================ +bool operator<( const OctetStr &lhs, const OctetStr &rhs) +{ + if( lhs.left_comparison( rhs.smival.value.string.len, rhs)<0) + return true; + else + return false; +} + +//==============[ less than <= overloaded ]=========================== +bool operator<=( const OctetStr &lhs, const OctetStr &rhs) +{ + if(( lhs.left_comparison( rhs.smival.value.string.len, rhs)<0) || + ( lhs.left_comparison( rhs.smival.value.string.len, rhs)==0)) + return true; + else + return false; +} + +//===============[ greater than > overloaded ]======================== +bool operator>( const OctetStr &lhs, const OctetStr &rhs) +{ + if( lhs.left_comparison( rhs.smival.value.string.len, rhs)>0) + return true; + else + return false; +} + +//===============[ greater than >= overloaded ]======================= +bool operator>=( const OctetStr &lhs, const OctetStr &rhs) +{ + if(( lhs.left_comparison( rhs.smival.value.string.len, rhs)>0) || + ( lhs.left_comparison( rhs.smival.value.string.len, rhs)==0)) + return true; + else + return false; +} + +//===============[ equivlence operator overloaded ]=================== +bool operator==( const OctetStr &lhs,const char *rhs) +{ + OctetStr to( rhs); + if( lhs.left_comparison( to.smival.value.string.len,to)==0) + return true; + else + return false; +} + +//===============[ not equivlence operator overloaded ]=============== +bool operator!=( const OctetStr &lhs,const char *rhs) +{ + OctetStr to( rhs); + if ( lhs.left_comparison( to.smival.value.string.len,to)!=0) + return true; + else + return false; +} + +//===============[ less than < operator overloaded ]================== +bool operator<( const OctetStr &lhs,const char *rhs) +{ + OctetStr to( rhs); + if ( lhs.left_comparison( to.smival.value.string.len,to)<0) + return true; + else + return false; +} + +//===============[ less than <= operator overloaded ]================= +bool operator<=( const OctetStr &lhs,char *rhs) +{ + OctetStr to( rhs); + if (( lhs.left_comparison( to.smival.value.string.len,to)<0) || + ( lhs.left_comparison( to.smival.value.string.len,to)==0)) + return true; + else + return false; +} + +//===============[ greater than > operator overloaded ]=============== +bool operator>( const OctetStr &lhs,const char *rhs) +{ + OctetStr to( rhs); + if ( lhs.left_comparison( to.smival.value.string.len,to)>0) + return true; + else + return false; +} + +//===============[ greater than >= operator overloaded ]============== +bool operator>=( const OctetStr &lhs,const char *rhs) +{ + OctetStr to( rhs); + if (( lhs.left_comparison( to.smival.value.string.len,to)>0) || + ( lhs.left_comparison( to.smival.value.string.len,to)==0)) + return true; + else + return false; +} + +//===============[ append operator, appends a string ]================ +OctetStr& OctetStr::operator+=( const char *a) +{ + SmiBYTE *tmp; // temp pointer + size_t slen,nlen; + + // get len of string + if ( !a || ((slen = ACE_OS::strlen( a)) == 0)) + return *this; + + // total len of octet + nlen = slen + (size_t) smival.value.string.len; + ACE_NEW_RETURN(tmp, SmiBYTE [ nlen], *this); + ACE_OS::memcpy ( tmp, smival.value.string.ptr, + (size_t) smival.value.string.len); + ACE_OS::memcpy( tmp + smival.value.string.len, a, (size_t) slen); + // delete the original + if ( smival.value.string.ptr ) + reset_octet_smi(smival); + smival.value.string.ptr = tmp; + smival.value.string.len = nlen; + return *this; +} + +//================[ append one OctetStr to another ]================== +OctetStr& OctetStr::operator+=( const OctetStr& octetstr) +{ + SmiBYTE *tmp; // temp pointer + size_t slen,nlen; + + if (!octetstr.validity || + !(slen = (size_t)octetstr.length())) + return *this; + + // total len of octet + nlen = slen + (size_t) smival.value.string.len; + // get mem needed + ACE_NEW_RETURN(tmp, SmiBYTE[ nlen], *this); + ACE_OS::memcpy ( tmp, smival.value.string.ptr, + (size_t) smival.value.string.len); + ACE_OS::memcpy( tmp + smival.value.string.len, octetstr.data(), + (size_t) slen); + if ( smival.value.string.ptr ) + reset_octet_smi(smival); + smival.value.string.ptr = tmp; + smival.value.string.len = nlen; + return *this; +} + +//================[ appends an int ]================================== +OctetStr& OctetStr::operator+=( const char c) +{ + SmiBYTE *tmp; + // get the memory needed plus one extra byte + ACE_NEW_RETURN(tmp, SmiBYTE[ smival.value.string.len + 1], *this); + ACE_OS::memcpy ( tmp, smival.value.string.ptr, + (size_t) smival.value.string.len); // len of original + tmp[ smival.value.string.len ] = c; // assign in byte + if ( smival.value.string.ptr ) // delete the original + reset_octet_smi(smival); + + smival.value.string.ptr = tmp; // point to one + smival.value.string.len++; // up the len + return *this; +} + + +//================[ compare n elements of an Octet ]================== +int OctetStr::left_comparison( const long n, const OctetStr &o) const +{ + long z, w; + + // both are empty, they are equal + if (( smival.value.string.len == 0) && + ( o.smival.value.string.len == 0)) + return 0; // equal + + // self is empty and param has something + if (( smival.value.string.len == 0) && + ( o.smival.value.string.len >0) && + (n>0)) + return -1; + + // self has something and param has nothing + if (( smival.value.string.len > 0) && + ( o.smival.value.string.len ==0) && + (n>0)) + return 1; + + // special case + if (( smival.value.string.len == 0) && + ( o.smival.value.string.len > 0) && + ( n == 0)) + return 0; + + // pick the Min of n, this and the param len + // this is the maximum # to iterate a search + w = smival.value.string.len < o.smival.value.string.len + ? smival.value.string.len : o.smival.value.string.len; + if (n o.smival.value.string.ptr[z]) + return 1; // greater than + z++; + } + + if (( z == 0) && + ( smival.value.string.len == 0) && + ( o.smival.value.string.len > 0)) + return -1; + + if (( z == 0) && + ( o.smival.value.string.len == 0) && + ( smival.value.string.len > 0)) + return 1; + + return 0; +} + +//================[ return the length of the oid ]======================= +size_t OctetStr::length() const +{ + return (size_t) smival.value.string.len; +} + +//================[ operator[]: access as if array ]================== +SmiBYTE& OctetStr::operator[]( int position) +{ + return smival.value.string.ptr[position]; +} + +//===============[ reuturns pointer to internal data ]=============== +SmiBYTE * OctetStr::data() const +{ + return smival.value.string.ptr; +} + +//================[ returns validity ]================================ +int OctetStr::valid() const +{ + return validity; +} + +//================[ clone() ]========================================= +SnmpSyntax * OctetStr::clone() const +{ + OctetStr *tmp = new OctetStr(*this); + return ( SnmpSyntax *) tmp; +} + +//================[ ASCII format return ]============================= +const char * OctetStr::to_string() +{ + for ( unsigned long i=0; i < smival.value.string.len; i++) { + if (( smival.value.string.ptr[i] != '\r')&& + ( smival.value.string.ptr[i] != '\n')&& + (ACE_OS::ace_isprint((int) (smival.value.string.ptr[i]))==0)) + return(to_string_hex()); + } + + if ( output_buffer != 0) + delete [] output_buffer; + + ACE_NEW_RETURN(output_buffer, char[smival.value.string.len + 1], ""); + if (smival.value.string.len) + ACE_OS::memcpy(output_buffer, smival.value.string.ptr, + (int) smival.value.string.len); + output_buffer[smival.value.string.len] = '\0'; + return output_buffer; +} + + +//================[ general Value = operator ]======================== +SnmpSyntax& OctetStr::operator=( SnmpSyntax &val) +{ + // protect against assignment from self + if ( this == &val ) + return *this; + + // blow away the old value + validity=0; + if (smival.value.string.ptr) { + reset_octet_smi(smival); + } + smival.value.string.len = 0; + if (val.valid()){ + switch (val.get_syntax()) { + case sNMP_SYNTAX_OCTETS: + case sNMP_SYNTAX_IPADDR: + set_data( ((OctetStr &)val).smival.value.string.ptr, + ((OctetStr &)val).smival.value.string.len); + break; + } + } + return *this; +} + +//================[ format the output into hex ]======================== +const char *OctetStr::to_string_hex() +{ + int cnt; + char char_buf[80]; // holds ASCII representation of data + char *buf_ptr; // pointer into ASCII listing + char *line_ptr; // pointer into Hex listing + int storageNeeded; // how much space do we need ? + int local_len = (int) smival.value.string.len; + SmiBYTE *bytes = smival.value.string.ptr; + + + storageNeeded = (int) ((smival.value.string.len/16)+1) * 72 + 1; + + if ( output_buffer != 0) + delete [] output_buffer; + + ACE_NEW_RETURN(output_buffer, char[storageNeeded], ""); + + line_ptr = output_buffer; + + /*----------------------------------------*/ + /* processing loop for entire data buffer */ + /*----------------------------------------*/ + while (local_len > 0) { + cnt = 16; /* print 16 bytes per line */ + buf_ptr = char_buf; + ACE_OS::sprintf(line_ptr, " "); + line_ptr += 2; /* indent */ + + /*-----------------------*/ + /* process a single line */ + /*-----------------------*/ + while (cnt-- > 0 && local_len-- > 0) { + ACE_OS::sprintf(line_ptr, "%2.2X ", *bytes); + + line_ptr +=3; /* the display of a byte always 3 chars long */ + if (ACE_OS::ace_isprint(*bytes)) + ACE_OS::sprintf(buf_ptr, "%c", *bytes); + else + ACE_OS::sprintf(buf_ptr, "."); + bytes++; + buf_ptr++; + } + cnt++; + + /*----------------------------------------------------------*/ + /* this is to make sure that the ASCII displays line up for */ + /* incomplete lines of hex */ + /*----------------------------------------------------------*/ + while (cnt-- > 0) { + ACE_OS::sprintf(line_ptr," "); + line_ptr += 3; + } + + /*------------------------------------------*/ + /* append the ASCII display to the Hex line */ + /*------------------------------------------*/ + +// TODO: verify ACE_OS:: on NT works like this or not + +#if defined(_WIN32) + const char *fmt = " %s\r\n"; +#else + const char *fmt = " %s\n"; +#endif // _WIN32 + + ACE_OS::sprintf(line_ptr, fmt, char_buf); + line_ptr += 3 + ACE_OS::strlen(char_buf); + } + + return output_buffer; +} diff --git a/ACE/ASNMP/asnmp/octet.h b/ACE/ASNMP/asnmp/octet.h new file mode 100644 index 00000000000..5e8c8d63d98 --- /dev/null +++ b/ACE/ASNMP/asnmp/octet.h @@ -0,0 +1,152 @@ + + +#ifndef OCTET_CLS_ +#define OCTET_CLS_ +//============================================================================= +/** + * @file octet.h + * + * $Id$ + * + * This class is fully contained and does not rely on or any other + * SNMP libraries. This class is portable across any platform + * which supports C++. + * + * + * @author Peter E Mellquist / design/original code Michael R. MacFaden / modified for ACE + */ +//============================================================================= + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +//------------------------------------------------------------------------ +#include "asnmp/smival.h" + +/** + * @class OctetStr + * + * @brief Implement RFC1155 Octet SMI data object + */ +class ASNMP_Export OctetStr : public SnmpSyntax + +{ +public: + /// construct octet from byte buffer, assume c style string if size == -1 + OctetStr( const char *string = "", long size = -1); + + /// constructor using another octet object + OctetStr ( const OctetStr &octet); + + /// destructor + ~OctetStr(); + + /// syntax type + SmiUINT32 get_syntax(); + + /// set octet from byte buffer, assume c style string if size == -1 + void set_data( const SmiBYTE* string, long int size = -1); + + /// assignment to a string operator overloaded + OctetStr& operator=( const char *string); + + /// assignment to another oid object overloaded + OctetStr& operator=( const OctetStr &octet); + + /// equivlence operator overloaded + friend ASNMP_Export bool operator==( const OctetStr &lhs, const OctetStr &rhs); + + /// not equivlence operator overloaded + friend ASNMP_Export bool operator!=( const OctetStr &lhs, const OctetStr &rhs); + + /// less than < overloaded + friend ASNMP_Export bool operator<( const OctetStr &lhs, const OctetStr &rhs); + + /// less than <= overloaded + friend ASNMP_Export bool operator<=( const OctetStr &lhs,const OctetStr &rhs); + + /// greater than > overloaded + friend ASNMP_Export bool operator>( const OctetStr &lhs, const OctetStr &rhs); + + /// greater than >= overloaded + friend ASNMP_Export bool operator>=( const OctetStr &lhs, const OctetStr &rhs); + + /// equivlence operator overloaded + friend ASNMP_Export bool operator==( const OctetStr &lhs,const char *rhs); + + /// not equivlence operator overloaded + friend ASNMP_Export bool operator!=( const OctetStr &lhs,const char *rhs); + + /// less than < operator overloaded + friend ASNMP_Export bool operator<( const OctetStr &lhs,const char *rhs); + + /// less than <= operator overloaded + friend ASNMP_Export bool operator<=( const OctetStr &lhs,char *rhs); + + /// greater than > operator overloaded + friend ASNMP_Export bool operator>( const OctetStr &lhs,const char *rhs); + + /// greater than >= operator overloaded + friend ASNMP_Export bool operator>=( const OctetStr &lhs,const char *rhs); + + /// append operator, appends a string + OctetStr& operator+=( const char *a); + + /// appends an int + OctetStr& operator+=( const char c); + + /// append one octetStr to another + OctetStr& operator+=( const OctetStr& octetstr); + + /// for non const [], allows reading and writing + SmiBYTE& operator[]( int position); + + /** + * compare the n leftmost bytes (left-to-right) + * returns 0, equal + * returns -1, < + * returns 1 , > + */ + int left_comparison( const long n, const OctetStr &o) const; + + /// return the len of the oid + size_t length() const ; + + /// returns validity + int valid() const; + + /// returns pointer to internal data + SmiBYTE *data() const; + + /// get a printable ASCII value + const char *to_string(); + + /// get an ASCII formattted hex dump of the contents + const char *to_string_hex(); + + /// create a new instance of this Value + SnmpSyntax *clone() const; + + /// copy an instance of this Value + SnmpSyntax& operator=( SnmpSyntax &val); + +protected: + //----[ instance variables ] + char *output_buffer; // formatted Octet value + int validity; // validity boolean +}; + +#endif // OCTET_CLS_ diff --git a/ACE/ASNMP/asnmp/oid.cpp b/ACE/ASNMP/asnmp/oid.cpp new file mode 100644 index 00000000000..3e98c2fd44a --- /dev/null +++ b/ACE/ASNMP/asnmp/oid.cpp @@ -0,0 +1,803 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// oid.cpp +// +// = DESCRIPTION +// This module contains the implementation of the oid class. This +// includes all protected and public member functions. The oid class +// may be compiled stand alone without the use of any other library. +// +// = AUTHOR +// Peter E Mellquist +// Michael R MacFaden mrm@cisco.com - rework & ACE port +// ============================================================================ +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS" without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +//---------[ external C libaries used ]-------------------------------- + +#include "asnmp/oid.h" // include def for oid class +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_Memory.h" +#include "ace/OS_NS_ctype.h" + +ACE_RCSID(asnmp, oid, "$Id$") + +enum Defs {SNMPBUFFSIZE=300, + SNMPCHARSIZE=15}; // max oid value (4294967295UL) + +#define NO_MEM_STR "ERROR: Oid::to_string: memory allocation failure" + +//=============[Oid::get_syntax(void)]==================================== +SmiUINT32 Oid::get_syntax() +{ + return sNMP_SYNTAX_OID; +} + + +//=============[Oid::Oid( const char *dotted_string ]===================== +// constructor using a dotted string +// +// do a string to oid using the string passed in +Oid::Oid( const char * dotted_oid_string, size_t size) +{ + // can't init enum SmiValue so just memset it clean + set_null(); + + size_t z; + if ((z = ACE_OS::strlen(dotted_oid_string)) == 0) { + set_invalid(); + return; + } + + if (size == (unsigned int)-1) + size = z; + if (size > z) + size = z; + + char *ptr = (char *)dotted_oid_string;; + if (size < z) { + // create new buffer if needed + ACE_NEW(ptr, char [size]); + + // sz should be in StrToOid? + ACE_OS::memcpy( (void *)ptr, dotted_oid_string, size); + } + + size_t byte_counter; + if (StrToOid( (char *) ptr, &smival.value.oid, byte_counter) < 0) + set_invalid(); + if (ptr != dotted_oid_string) + delete [] ptr; +} + + +//=============[Oid::Oid( const Oid &oid) ]================================ +// constructor using another oid object +// +// do an oid copy using the oid object passed in +Oid::Oid ( const Oid &oid) + : SnmpSyntax (oid) +{ + set_null(); + + // allocate some memory for the oid + // in this case the size to allocate is the same + // size as the source oid + if (oid.smival.value.oid.len) { + ACE_NEW(smival.value.oid.ptr, SmiUINT32[ oid.smival.value.oid.len]); + size_t byte_counter; + OidCopy( (SmiLPOID) &(oid.smival.value.oid),(SmiLPOID) + &smival.value.oid, byte_counter); + } +} + + +//=============[Oid::Oid( const unsigned long *raw_oid, int oid_len) ]==== +// constructor using raw numeric form +// +// copy the integer values into the private member +Oid::Oid(const unsigned long *raw_oid, size_t oid_len) +{ + set_null(); + + smival.syntax = sNMP_SYNTAX_OID; + set_invalid(); + + if (raw_oid && oid_len > 0) { + ACE_NEW(smival.value.oid.ptr, SmiUINT32[ oid_len]); + smival.value.oid.len = oid_len; + for (size_t i=0; i < oid_len; i++) + smival.value.oid.ptr[i] = raw_oid[i]; + } +} + +//=============[Oid::~Oid]============================================== +// destructor +// +// free up the descriptor space +Oid::~Oid() +{ + // free up the octet deep memory + if ( smival.value.oid.ptr ) { + set_invalid(); + } + + // free up the output string + if ( iv_str != 0) + delete [] iv_str; +} + + +//=============[Oid::operator = const char * dotted_string ]============== +// assignment to a string operator overloaded +// +// free the existing oid +// create the new oid from the string +// return this object +void Oid::set_data( const char *dotted_oid_string) +{ + // delete the old value + if ( smival.value.oid.ptr ) { + set_invalid(); + } + + // assign the new value + size_t byte_counter; + if (StrToOid( (char *) dotted_oid_string, &smival.value.oid, byte_counter) <0) + set_invalid(); +} + + +//=============[Oid:: operator = const Oid &oid ]========================== +// assignment to another oid object overloaded +// +// free the existing oid +// create a new one from the object passed in +// TODO: measure perf vs memory of no realloc in case where len >= oid.len +Oid& Oid::operator=( const Oid &oid) +{ + // protect against assignment from self + if ( this == &oid) + return *this; + + set_invalid(); + + // check for zero len on source + if ( oid.smival.value.oid.len == 0) + return *this; + + const SmiLPOID srcOid = (SmiLPOID) &(oid.smival.value.oid); + init_value(srcOid, oid.smival.value.oid.len); + return *this; +} + +// assign this object the oid, set to invalid if copy fails +void Oid::init_value(const SmiLPOID srcOid, size_t len) +{ + // allocate some memory for the oid + ACE_NEW(smival.value.oid.ptr, SmiUINT32[ len]); + size_t byte_counter; + OidCopy( srcOid, (SmiLPOID) &smival.value.oid, byte_counter); +} + +void Oid::init_value(const unsigned long *raw_oid, size_t oid_len) +{ + if (smival.value.oid.ptr) + delete [] smival.value.oid.ptr; + + ACE_NEW(smival.value.oid.ptr, SmiUINT32[ oid_len]); + ACE_OS::memcpy((SmiLPBYTE) smival.value.oid.ptr, + (SmiLPBYTE) raw_oid, + (size_t) (oid_len * sizeof(SmiUINT32))); + smival.value.oid.len = oid_len; +} + +//==============[Oid:: operator += const char *a ]========================= +// append operator, appends a string +// +// allocate some space for a max oid string +// extract current string into space +// concat new string +// free up existing oid +// make a new oid from string +// delete allocated space +Oid& Oid::operator+=( const char *a) +{ + unsigned long n; + + if (!a) + return *this; + + if ( *a=='.') + a++; + size_t sz = ACE_OS::strlen(a); + + if (valid()) { + n = (smival.value.oid.len *SNMPCHARSIZE) + smival.value.oid.len + 1 + sz; + char *ptr; + ACE_NEW_RETURN(ptr, char[ n], *this); + size_t byte_counter; + if (OidToStr(&smival.value.oid, n,ptr, byte_counter) > 0) { + delete [] ptr; + set_invalid(); + return *this; + } + + if (ACE_OS::strlen(ptr)) + ACE_OS::strcat(ptr,"."); + ACE_OS::strcat(ptr,a); + if ( smival.value.oid.len !=0) { + set_invalid(); + } + + if (StrToOid( (char *) ptr, &smival.value.oid, byte_counter) < 0) { + set_invalid(); + } + delete [] ptr; + } + else { + size_t byte_counter; + if (StrToOid( (char *) a, &smival.value.oid, byte_counter) < 0) { + set_invalid(); + } + } + + return *this; +} + +//=============[ bool operator == oid,oid ]================================= +// equivlence operator overloaded +bool operator==( const Oid &lhs, const Oid &rhs) +{ + // ensure same len, then use left_comparison + if (rhs.length() != lhs.length()) + return false; + if( lhs.left_comparison( rhs.length(), rhs) == 0) + return true; + else + return false; +} + +//==============[ bool operator!=( Oid &x,Oid &y) ]======================= +//not equivlence operator overloaded +bool operator!=( const Oid &lhs,const Oid &rhs) +{ + return (!(lhs == rhs)); +} + +//==============[ bool operator<( Oid &x,Oid &y) ]======================== +// less than < overloaded +bool operator<( const Oid &lhs,const Oid &rhs) +{ + int result; + + // call left_comparison with the current + // Oidx, Oidy and len of Oidx + if ((result = lhs.left_comparison( rhs.length(), rhs)) < 0) + return true; + else if (result > 0) + return false; + + else{ + // if here, equivalent substrings, call the shorter one < + if (lhs.length() < rhs.length()) + return true; + else + return false; + } +} + +//==============[ bool operator<=( Oid &x,Oid &y) ]======================= +// less than <= overloaded +bool operator<=( const Oid &x,const Oid &y) +{ + if ( (x < y) || (x == y) ) + return true; + else + return false; +} + +//==============[ bool operator>( Oid &x,Oid &y) ]======================== +// greater than > overloaded +bool operator>( const Oid &x,const Oid &y) +{ + // just invert existing <= + if (!(x<=y)) + return true; + else + return false; +} + +//==============[ bool operator>=( Oid &x,Oid &y) ]======================= +// greater than >= overloaded +bool operator>=( const Oid &x,const Oid &y) +{ + // just invert existing < + if (!(x0)) { + smival.value.oid.len -= n; + + if (smival.value.oid.len == 0) { + set_invalid(); + } + } +} + +//===============[Oid::set_invalid() ]==================== +// make this object invalid by resetting all values +void Oid::set_invalid() { + delete [] smival.value.oid.ptr; + smival.value.oid.ptr = 0; + smival.value.oid.len = 0; + delete [] iv_str; + iv_str = 0; +} + +//===============[Oid::set_null() ]==================== +void Oid::set_null() { + smival.syntax = sNMP_SYNTAX_OID; + smival.value.oid.ptr = 0; + smival.value.oid.len = 0; + iv_str = 0; +} + +//===============[Oid::operator += const unsigned int) ]==================== +// append operator, appends an int +// +// allocate some space for a max oid string +// extract current string into space +// concat new string +// free up existing oid +// make a new oid from string +// delete allocated space +Oid& Oid::operator+=( const unsigned long i) +{ + unsigned long n = (smival.value.oid.len * SNMPCHARSIZE) + + ( smival.value.oid.len -1) + 1 + 4; + char buffer[SNMPBUFFSIZE]; + + // two cases: null oid, existing oid + if (valid()) { + // allocate some temporary space + char *ptr; + ACE_NEW_RETURN(ptr, char[ n], *this); + size_t byte_counter; + if (OidToStr(&smival.value.oid, n, ptr, byte_counter) < 0) { + set_invalid(); + delete [] ptr; + return *this; + } + + if (ACE_OS::strlen(ptr)) + ACE_OS::strcat(ptr,"."); + + if (ACE_OS::sprintf( buffer,"%lu",i) != -1) { + ACE_OS::strcat(ptr, buffer); + if ( smival.value.oid.ptr ) { + set_invalid(); + } + if (StrToOid( (char *) ptr, &smival.value.oid, byte_counter) < 0) { + set_invalid(); + } + delete [] ptr; + } + } + else { + init_value((const unsigned long *)&i, (size_t)1); + } + + return *this; +} + +//===============[Oid::operator += const Oid) ]======================== +// append operator, appends an Oid +// +// allocate some space for a max oid string +// extract current string into space +// concat new string +// free up existing oid +// make a new oid from string +// delete allocated space +Oid& Oid::operator+=( const Oid &o) +{ + SmiLPUINT32 new_oid; + + if (o.smival.value.oid.len == 0) + return *this; + + ACE_NEW_RETURN(new_oid, + SmiUINT32[ smival.value.oid.len + o.smival.value.oid.len], *this); + if (smival.value.oid.ptr) { + ACE_OS::memcpy((SmiLPBYTE) new_oid, + (SmiLPBYTE) smival.value.oid.ptr, + (size_t) (smival.value.oid.len*sizeof(SmiUINT32))); + + delete [] smival.value.oid.ptr; + } + + // out with the old, in with the new... + smival.value.oid.ptr = new_oid; + + ACE_OS::memcpy((SmiLPBYTE) &new_oid[smival.value.oid.len], + (SmiLPBYTE) o.smival.value.oid.ptr, + (size_t) (o.smival.value.oid.len*sizeof(SmiUINT32))); + + smival.value.oid.len += o.smival.value.oid.len; + return *this; +} + +// return string portion of the oid +// +const char * Oid::to_string() +{ + unsigned long n; + if (!valid()) + return ""; // be consistent with other classes + + // the worst case char len of an oid can be.. + // oid.len*3 + dots in between if each oid is XXXX + // so.. size = (len*4) + (len-1) + 1 , extra for a null + + n = (smival.value.oid.len *SNMPCHARSIZE) + ( smival.value.oid.len -1) + 1 ; + if (n == 0) + n = 1; // need at least 1 byte for a null string + + // adjust the len of output array in case size was adjusted + if ( iv_str != 0) + delete [] iv_str; + // allocate some space for the output string + ACE_NEW_RETURN(iv_str, char[ n], ""); + + // convert to an output string + size_t how_many; + if ( valid() && iv_str != 0) + if (OidToStr(&smival.value.oid,n,iv_str, how_many) < 0) + return "ERROR: Oid::OidToStr failed"; + return iv_str; +} + +//==============[Oid::suboid( unsigned int start, n) ]============= +int Oid::suboid(Oid& new_oid, size_t start, size_t how_many) +{ + if (how_many == 0) + return 0; + else + if (how_many == (size_t)-1) + how_many = length(); + else + if (how_many > length()) + how_many = length(); + + // reset new_oid + new_oid.set_invalid(); + + size_t new_size = how_many - start; + if (new_size == 0) + new_size++; + new_oid.smival.value.oid.len = new_size; + ACE_NEW_RETURN(new_oid.smival.value.oid.ptr, + SmiUINT32 [ new_oid.smival.value.oid.len], -1); + // copy source to destination + ACE_OS::memcpy( (SmiLPBYTE) new_oid.smival.value.oid.ptr, + (SmiLPBYTE) (smival.value.oid.ptr + start), + new_size * sizeof(SmiLPBYTE)); + return 0; +} + + +//=============[Oid::StrToOid( char *string, SmiLPOID dst) ]============== +// convert a string to an oid +int Oid::StrToOid( const char *string, SmiLPOID dstOid, size_t& how_many) +{ + size_t index = 0; + size_t number = 0; + + // make a temp buffer to copy the data into first + SmiLPUINT32 temp; + unsigned long nz; + + if (string && *string) { + nz = ACE_OS::strlen( string); + } + else { + dstOid->len = 0; + dstOid->ptr = 0; + return -1; + } + + ACE_NEW_RETURN(temp, SmiUINT32[ nz], -1); + while (*string!=0 && indexptr, SmiUINT32[ index], -1); + // TODO: make tmp autoptr type delete [] temp to prevent leak + + // copy in the temp data + ACE_OS::memcpy((SmiLPBYTE) dstOid->ptr, (SmiLPBYTE) temp, + (size_t) (index*sizeof(SmiUINT32))); + + // set the len of the oid + dstOid->len = index; + + // free up temp data + delete [] temp; + + how_many = index; + return 0; +} + + +//===============[Oid::OidCopy( source, destination) ]==================== +// Copy an oid, return bytes copied +int Oid::OidCopy( SmiLPOID srcOid, SmiLPOID dstOid, size_t& how_many_bytes) +{ + // check source len ! zero + if (srcOid->len == 0) + return -1; + + // copy source to destination + ACE_OS::memcpy((SmiLPBYTE) dstOid->ptr, + (SmiLPBYTE) srcOid->ptr, + (size_t) (srcOid->len * sizeof(SmiUINT32))); + + //set the new len + dstOid->len = srcOid->len; + how_many_bytes = srcOid->len; + + return 0; +} + + +//===============[Oid::left_comparison( n, Oid) ]================================= +// compare the n leftmost values of two oids ( left-to_right ) +// +// self == Oid then return 0, they are equal +// self < Oid then return -1, < +// self > Oid then return 1, > +int Oid::left_comparison( const unsigned long n, const Oid &o) const +{ + unsigned long z; + unsigned long len = n; + int reduced_len = 0; + + // 1st case they both are null + if (( len==0)&&( this->smival.value.oid.len==0)) + return 0; // equal + + // verify that n is valid, must be >= 0 + if ( len <=0) + return 1; // ! equal + + // only compare for the minimal length + if (len > this->smival.value.oid.len) { + len = this->smival.value.oid.len; + reduced_len = 1; + } + if (len > o.smival.value.oid.len) { + len = o.smival.value.oid.len; + reduced_len = 1; + } + + z = 0; + while(z < len) { + if ( this->smival.value.oid.ptr[z] < o.smival.value.oid.ptr[z]) + return -1; // less than + if ( this->smival.value.oid.ptr[z] > o.smival.value.oid.ptr[z]) + return 1; // greater than + z++; + } + + // if we truncated the len then these may not be equal + if (reduced_len) { + if (this->smival.value.oid.len < o.smival.value.oid.len) + return -1; + if (this->smival.value.oid.len > o.smival.value.oid.len) + return 1; + } + return 0; // equal + +} + + +//===============[Oid::left_comparison( n, Oid) ]================================= +// compare the n rightmost bytes (right-to-left) +// returns 0, equal +// returns -1, < +// returns 1 , > +int Oid::right_comparison( const unsigned long n, const Oid &o) const +{ + // oid to compare must have at least the same number + // of sub-ids to comparison else the argument Oid is + // less than THIS + if ( o.length() < n) + return -1; + + // also can't compare argument oid for sub-ids which + // THIS does not have + if ( this->length() < n) + return -1; + + int start = (int) this->length(); + int end = (int) start - (int) n; + for ( int z=start;z< end;z--) + { + if ( o.smival.value.oid.ptr[z] < this->smival.value.oid.ptr[z]) + return -1; + if ( o.smival.value.oid.ptr[z] > this->smival.value.oid.ptr[z]) + return 1; + } + + return 0; // they are equal + +} + + +//================[ Oid::valid() ]======================================== +// is the Oid object valid +// returns validity +int Oid::valid() const +{ + return ( smival.value.oid.ptr ? 1 : 0 ); +} + +//================[Oid::OidToStr ]========================================= +// convert an oid to a string +int Oid::OidToStr( SmiLPOID srcOid, unsigned long size, + char *string, size_t& how_many_bytes) +{ + unsigned long index = 0; + unsigned totLen = 0; + char szNumber[SNMPBUFFSIZE]; + + // init the string + string[totLen] = 0; + + // verify there is something to copy + if (srcOid->len == 0) + return -1; + + // loop through and build up a string + for (index=0; index < srcOid->len; index++) { + + // convert data element to a string + if (ACE_OS::sprintf( szNumber,"%lu", srcOid->ptr[index]) == -1) + return -1; + + // verify len is not over + if (totLen + ACE_OS::strlen(szNumber) + 1 >= size) + return -2; + + // if not at end, pad with a dot + if (totLen!=0) + string[totLen++] = '.'; + + // copy the string token into the main string + ACE_OS::strcpy(string + totLen, szNumber); + + // adjust the total len + totLen += ACE_OS::strlen(szNumber); + } + + how_many_bytes = totLen + 1; + return 0; +} + + +//================[ general Value = operator ]======================== +SnmpSyntax& Oid::operator=( SnmpSyntax &val) +{ + // protect against assignment from self + if ( this == &val ) + return *this; + + // blow away old value + smival.value.oid.len = 0; + if (smival.value.oid.ptr) { + set_invalid(); + } + + // assign new value + if (val.valid()) { + switch (val.get_syntax()) { + case sNMP_SYNTAX_OID: + set_data( ((Oid &)val).smival.value.oid.ptr, + (unsigned int)((Oid &)val).smival.value.oid.len); + break; + } + } + return *this; +} + +//================[ [] operator ]===================================== +unsigned long& Oid::operator[](size_t position) +{ + return smival.value.oid.ptr[position]; +} + +//================[ clone ]=========================================== +SnmpSyntax *Oid::clone() const +{ + return (SnmpSyntax *) new Oid(*this); +} diff --git a/ACE/ASNMP/asnmp/oid.h b/ACE/ASNMP/asnmp/oid.h new file mode 100644 index 00000000000..77118b518f0 --- /dev/null +++ b/ACE/ASNMP/asnmp/oid.h @@ -0,0 +1,175 @@ + + +#ifndef OID_CLS_ +#define OID_CLS_ +//============================================================================= +/** + * @file oid.h + * + * $Id$ + * + * This class is fully contained and does not rely on or any other + * SNMP libraries. This class is portable across any platform + * which supports C++. Ported to ACE by Mike MacFaden mrm@cisco.com + * and modified for MT. Some API cleanup: collapse constructors, + * add suboid() method remove unnecessary overload, and update a few + * names and types to improve clarity. + * + * + * @author Peter E Mellquist + */ +//============================================================================= + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +//----------[ extern C libraries Needed ]--------------------------------- +#include "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "asnmp/smival.h" // derived class for all values + +/** + * @class Oid + * + * @brief Implement RFC 1155 Object Identifier (OID) datatype + */ +class ASNMP_Export Oid : public SnmpSyntax +{ +public: + /// constructor using a dotted string + Oid( const char * dotted_oid_string = "", size_t size = unsigned(-1) ); + + /// constructor using another oid object + Oid ( const Oid &oid); + + /// constructor from raw form + Oid(const unsigned long *raw_oid, size_t oid_len); + + /// destructor + ~Oid(); + + /// syntax type + SmiUINT32 get_syntax(); + + /// assignment to another oid object overloaded + Oid& operator=( const Oid &oid); + + /// equal operator overloaded + friend ASNMP_Export bool operator==( const Oid &lhs,const Oid &rhs); + + /// not equal operator overloaded + friend ASNMP_Export bool operator!=( const Oid &lhs,const Oid &rhs); + + /// less than < overloaded + friend ASNMP_Export bool operator<( const Oid &lhs,const Oid &rhs); + + /// less than <= overloaded + friend ASNMP_Export bool operator<=( const Oid &lhs,const Oid &rhs); + + /// greater than > overloaded + friend ASNMP_Export bool operator>( const Oid &lhs,const Oid &rhs); + + /// greater than >= overloaded + friend ASNMP_Export bool operator>=( const Oid &lhs,const Oid &rhs); + + /// append operator, appends a string + Oid& operator+=( const char *a); + + /// appends an int + Oid& operator+=( const unsigned long i); + + /// appends an Oid + Oid& operator+=( const Oid &o); + + /// allows element access + unsigned long & operator[]( size_t position); + + /// return the WinSnmp oid part + SmiLPOID oidval(); + + /// reset the data from raw 1 byte format + void set_data( const char *dotted_oid_string); + + /// reset the data from raw 4byte integer format + void set_data( const unsigned long *raw_oid, const size_t oid_len); + + /// return the len of the oid + size_t length() const; + + /// trim off the n rightmost values of an oid + void trim( const size_t how_many = 1); + + /// the equivalent of a substr(new_str, 0, 1) + int suboid(Oid& oid, size_t start = 0, size_t how_many = size_t (-1)); + + /** + * compare the n leftmost bytes (left-to-right) + * returns 0, equal + * returns -1, < + * returns 1 , > + */ + int left_comparison( const unsigned long n, const Oid &o) const; + + + /** + * compare the n rightmost bytes (right-to-left) + * returns 0, equal + * returns -1, < + * returns 1 , > + */ + int right_comparison( const unsigned long n, const Oid &o) const; + + /// is the Oid object valid + int valid() const; + + /// return dotted string value from the right + /// where the user specifies how many positions to print + const char *to_string(); + + /// create a new instance of this Value + SnmpSyntax *clone() const; + + /// copy an instance of this Value + SnmpSyntax& operator=( SnmpSyntax &val); + +protected: + /// used for returning oid string + char *iv_str; + + /// convert a string to an smi oid + int StrToOid( const char *string, SmiLPOID dstOid, size_t& how_many_bytes); + + /// clone an smi oid + int OidCopy( SmiLPOID srcOid, SmiLPOID dstOid, size_t& how_many_bytes); + + /// convert an smi oid to its string representation + int OidToStr(SmiLPOID srcOid, SmiUINT32 size, char *string, size_t& how_many_bytes); + + private: + /// release memory, re-init data members + void set_invalid(); + + /// initialize object data members + void set_null(); + void init_value( const SmiLPOID srcOid, size_t len); + void init_value(const unsigned long *raw_oid, size_t oid_len); +}; + +#endif //OID_CLS_ diff --git a/ACE/ASNMP/asnmp/oid_def.h b/ACE/ASNMP/asnmp/oid_def.h new file mode 100644 index 00000000000..31ccbfa3e4a --- /dev/null +++ b/ACE/ASNMP/asnmp/oid_def.h @@ -0,0 +1,84 @@ +/* -*-C++-*- */ +#ifndef OID_DEF +#define OID_DEF +//============================================================================= +/** + * @file oid_def.h + * + * $Id$ + * + * Well known Oids defined in RFC 1215 + * + * + * @author Peter E Mellquist + */ +//============================================================================= + +/*=================================================================== + + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +// SMI trap oid def +class snmpTrapsOid: public Oid { + public: + snmpTrapsOid (void):Oid("1.3.6.1.6.3.1.1.5"){}; +}; + +// SMI Enterprose Oid +class snmpTrapEnterpriseOid: public Oid { + public: + snmpTrapEnterpriseOid(void):Oid("1.3.6.1.6.3.1.1.4.3.0"){}; +}; + +// SMI Cold Start Oid +class coldStartOid: public snmpTrapsOid { + public: + coldStartOid( void){*this+=".1";}; +}; + +// SMI WarmStart Oid +class warmStartOid: public snmpTrapsOid { + public: + warmStartOid( void){*this+=".2";}; +}; + +// SMI LinkDown Oid +class linkDownOid: public snmpTrapsOid { + public: + linkDownOid( void){*this+=".3";}; +}; + + +// SMI LinkUp Oid +class linkUpOid: public snmpTrapsOid { + public: + linkUpOid( void){*this+=".4";}; +}; + +// SMI Authentication Failure Oid +class authenticationFailureOid: public snmpTrapsOid { + public: + authenticationFailureOid( void){*this+=".5";}; +}; + +// SMI egpneighborloss Oid +class egpNeighborLossOid: public snmpTrapsOid { + public: + egpNeighborLossOid( void){*this+=".6";}; +}; + + +#endif // OID_DEF diff --git a/ACE/ASNMP/asnmp/pdu.cpp b/ACE/ASNMP/asnmp/pdu.cpp new file mode 100644 index 00000000000..1e86fe17d90 --- /dev/null +++ b/ACE/ASNMP/asnmp/pdu.cpp @@ -0,0 +1,502 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// pdu.cpp +// +// = DESCRIPTION +// Pdu class implementation. Encapsulation of an SMI Protocol +// Data Unit (PDU) in C++. +// +// = AUTHOR +// Peter E Mellquist +// Michael R MacFaden mrm@cisco.com - rework & ACE port +// ============================================================================ +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/snmp.h" +#include "asnmp/pdu.h" // include Pdu class definition +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_stdio.h" + +ACE_RCSID(asnmp, pdu, "$Id$") + +//=====================[ constructor no args ]========================= +Pdu::Pdu( void): vb_count_(0), error_status_(0), error_index_(0), +validity_(0), request_id_(0), pdu_type_(0), notify_timestamp_(0), +output_(0) +{ +} + +//=====================[ constructor with vbs_ and count ]============== +Pdu::Pdu( Vb* pvbs, const int pvb_count): vb_count_(0), error_index_(0), +validity_(0), request_id_(0), pdu_type_(0), notify_timestamp_(0), +output_(0) +{ + int z = 0; // looping variable + + // zero is ok + if ( pvb_count == 0) { + validity_ = 1; + return; + } + + // check for over then max + if ( pvb_count > MAX_VBS) { + validity_ = 0; + return; + } + + // loop through and assign internal vbs_ + for (z = 0;z < pvb_count; z++) { + validity_ = 0; + ACE_NEW(vbs_[z], Vb( pvbs[z])); + validity_ = 1; + } + + // assign the vb count + vb_count_ = pvb_count; + + validity_ = 1; +} + +//=====================[ constructor with another Pdu instance ]======== +Pdu::Pdu( const Pdu &pdu): vb_count_(0), +error_index_(0), validity_(0), request_id_(0), pdu_type_(0), +notify_timestamp_(0), output_(0) +{ + *this = pdu; + return; +} + +//=====================[ destructor ]==================================== +Pdu::~Pdu() +{ + delete_all_vbs(); + delete [] output_; +} + + +//=====================[ assignment to another Pdu object overloaded ]=== +Pdu& Pdu::operator=( const Pdu &pdu) +{ + if (this == &pdu) + return *this; + + int z; // looping variable + + // Initialize all mv's + error_status_ = pdu.error_status_; + error_index_ = pdu.error_index_; + request_id_ = pdu.request_id_; + pdu_type_ = pdu.pdu_type_; + notify_id_ = pdu.notify_id_; + notify_timestamp_ = pdu.notify_timestamp_; + notify_enterprise_ = pdu.notify_enterprise_; + validity_ = 1; + + // free up old vbs_ + for ( z = 0;z < vb_count_; z++) + delete vbs_[z]; + vb_count_ = 0; + + // check for zero case + if ( pdu.vb_count_ == 0) { + return *this; + } + + // loop through and fill em up + for (z = 0; z < pdu.vb_count_; z++) { + validity_ = 0; + ACE_NEW_RETURN(vbs_[z], Vb ( *(pdu.vbs_[z])), *this); + validity_ = 1; + } + + vb_count_ = pdu.vb_count_; + return *this; +} + +// append operator, appends a string +Pdu& Pdu::operator+=( Vb &vb) +{ + + // do we have room? + if ( vb_count_ + 1 > MAX_VBS) + return *this; + + // add the new one + validity_ = 0; + ACE_NEW_RETURN(vbs_[vb_count_], Vb (vb), *this); + // set up validity_ + validity_ = 1; + + // up the vb count + vb_count_++; + + // return self reference + return *this; + +} + +// return fomatted version of this object +const char * Pdu::to_string() +{ + // determine how big a buffer and allocate it + const int HEADER_STR = 100; + unsigned size = HEADER_STR; // header takes up this much room + int z; + + for ( z = 0; z < vb_count_; z++) + size += ACE_OS::strlen(vbs_[z]->to_string()); + + ACE_NEW_RETURN(output_, char[size], ""); + + // print pdu header info + ACE_OS::sprintf(output_, "pdu: valid: %d type:%d, req:%d, cnt: %d, err stat: %d \ + err idx: %d\n", validity_, pdu_type_, (int) request_id_, + vb_count_, error_status_, error_index_ ); + + // now append vb pairs in this object + for ( z = 0; z < vb_count_; z++) { + ACE_OS::strcat(output_, vbs_[z]->to_string()); + ACE_OS::strcat(output_, "\n\t"); + } + + return output_; +} + + +//=====================[ extract Vbs from Pdu ]========================== +// how do you know that the caler has enough memory??? +// should I self allocate this in here and require the +// caller then to free it up at soem later time +int Pdu::get_vblist( Vb* pvbs, const int pvb_count) +{ + if ((!pvbs) || ( pvb_count < 0) || ( pvb_count > vb_count_)) + return 0; + + // loop through all vbs_ and assign to params + int z; + for (z = 0; z < pvb_count; z++) + pvbs[z] = *vbs_[z]; + + return 1; + +} + +//=====================[ deposit Vbs ]=================================== +int Pdu::set_vblist( Vb* pvbs, const int pvb_count) +{ + + // if invalid then don't destroy + if ((!pvbs) || ( pvb_count < 0) || ( pvb_count > MAX_VBS)) + return 0; + + // free up current vbs_ + int z; + for ( z = 0; z < vb_count_; z++) + delete vbs_[z]; + vb_count_ = 0; + + // check for zero case + if ( pvb_count == 0) { + validity_ = 1; + error_status_ = 0; + error_index_ = 0; + request_id_ = 0; + return 0; + } + + + // loop through all vbs_ and reassign them + for ( z = 0; z < pvb_count; z++) { + validity_ = 0; + ACE_NEW_RETURN(vbs_[z], Vb (pvbs[z]), 0); + validity_ = 1; + } + + vb_count_ = pvb_count; + + // clear error status and index since no longer valid + // request id may still apply so don't reassign it + error_status_ = 0; + error_index_ = 0; + validity_ = 1; + + return 1; +} + +//===================[ get a particular vb ]============================= +// here the caller has already instantiated a vb object +// index is zero based +int Pdu::get_vb( Vb &vb, const int index) const +{ + // can't have an index less than 0 + if ( index < 0) + return 0; + + // can't ask for something not there + if ( index > (vb_count_ - 1)) + return 0; + + // asssign it + vb = *vbs_[index]; + + return 1; +} + +//===================[ set a particular vb ]============================= +int Pdu::set_vb( Vb &vb, const int index) +{ + // can't set a vb at index less than 0 + if ( index < 0) + return 0; + + // can't ask for something not there + if ( index > (vb_count_ - 1)) + return 0; + + // delete what is there + delete vbs_[index]; + + // assign it + validity_ = 0; + ACE_NEW_RETURN(vbs_[index], Vb (vb), 0); + validity_ = 1; + + return 1; + +} + +//=====================[ return number of vbs_ ]========================== +int Pdu::get_vb_count() const +{ + return vb_count_; +} + +//=====================[ return the error status ]======================= +int Pdu::get_error_status() const +{ + return error_status_; +} + +const char *Pdu::agent_error_reason() +{ + int pdu_err = get_error_status(); + if (pdu_err == 0) // any real error? + return "not in error state"; + + int n_vbs = get_vb_count(); + Vb bad; + get_vb(bad, get_error_index() -1); // not zero based?? + const char *pmsg = Snmp::error_string(get_error_status()); + const char *id = bad.to_string_oid(); + const char *val = bad.to_string_value(); + const int HDR_SZ = 100; + + if (!output_) { + int size = ACE_OS::strlen(pmsg) + ACE_OS::strlen(id) + + ACE_OS::strlen(val); + ACE_NEW_RETURN(output_, char[size + HDR_SZ], ""); + } + + ACE_OS::sprintf(output_, + "FAIL PDU REPORT: pdu id: %lu vb cnt: %d vb idx: %d\n" + " msg: %s vb oid: %s value: %s\n", + get_request_id(), n_vbs, get_error_index(), + pmsg, id, val); + + return output_; +} + +//=====================[ set the error status ]========================== +// friend +void set_error_status( Pdu *pdu, const int status) +{ + if (pdu) + pdu->error_status_ = status; +} + +//=====================[ return the error index ]======================== +int Pdu::get_error_index() const +{ + return error_index_; +} + +//=====================[ set the error index ]=========================== +// friend +void set_error_index( Pdu *pdu, const int index) +{ + if (pdu) + pdu->error_index_ = index; +} + +//=====================[ clear error status ]============================= +void clear_error_status( Pdu *pdu) +{ + if (pdu) + pdu->error_status_ = 0; +} + +//=====================[ clear error index ]============================== +void clear_error_index( Pdu *pdu) +{ + if (pdu) + pdu->error_index_ = 0; +} + +//=====================[ return the request id ]========================== +unsigned long Pdu::get_request_id() const +{ + return request_id_; +} + +//=====================[ set the request id ]============================= +// friend function +void set_request_id( Pdu *pdu, const unsigned long rid) +{ + if (pdu) + pdu->request_id_ = rid; +} + +//=====================[ returns validity_ of Pdu instance ]=============== +int Pdu::valid() const +{ + return validity_; +} + +//=====================[ get the pdu type ]=============================== +unsigned short Pdu::get_type()const +{ + return pdu_type_; +} + +// set the pdu type +void Pdu::set_type( unsigned short type) +{ + pdu_type_ = type; +} + + +// trim off the last vb +int Pdu::trim(const int p) +{ + int lp = p; + + // verify that lp is legal + if ( lp < 0 || lp > vb_count_) + return 0; + + while ( lp != 0) { + if ( vb_count_ > 0) { + delete vbs_[vb_count_ - 1]; + vb_count_--; + } + lp--; + } + return 1; +} + + + +// delete a Vb anywhere within the Pdu +int Pdu::delete_vb( const int p) +{ + // position has to be in range + if (( p < 0) || ( p > (vb_count_ - 1))) + return 0; + + // safe to remove it + delete vbs_[ p]; + + for ( int z=p;z < (vb_count_-1);z++) { + vbs_[z] = vbs_[z+1]; + } + vb_count_--; + + return 1; +} + +void Pdu::delete_all_vbs() +{ + for ( int z = 0; z < vb_count_; z++) + delete vbs_[z]; + vb_count_ = 0; +} + + +// set notify timestamp +void Pdu::set_notify_timestamp( const TimeTicks & timestamp) +{ + notify_timestamp_ = timestamp; +} + + +// get notify timestamp +void Pdu::get_notify_timestamp( TimeTicks & timestamp) const +{ + timestamp = notify_timestamp_; +} + +// set the notify id +void Pdu::set_notify_id( const Oid id) +{ + notify_id_ = id; +} + +// get the notify id +void Pdu::get_notify_id( Oid &id) const +{ + id = notify_id_; +} + +// set the notify enterprise +void Pdu::set_notify_enterprise( const Oid &enterprise) +{ + notify_enterprise_ = enterprise; +} + +// get the notify enterprise +void Pdu::get_notify_enterprise( Oid & enterprise) const +{ + enterprise = notify_enterprise_; +} + +// ------ class VbIter ------------------- +VbIter::VbIter(Pdu& pdu): idx_(-1), pdu_(&pdu) +{ +} + +// returns 1 if ok, else 0 if none left +int VbIter::next(Vb& vb) +{ + if (idx_ == -1) { + idx_ = 0; + pdu_->get_vb(vb, idx_++); + return 1; + } + else + if (idx_ < pdu_->get_vb_count()) { + pdu_->get_vb(vb, idx_++); + return 1; + } + return 0; // non left +} diff --git a/ACE/ASNMP/asnmp/pdu.h b/ACE/ASNMP/asnmp/pdu.h new file mode 100644 index 00000000000..a2d84388da0 --- /dev/null +++ b/ACE/ASNMP/asnmp/pdu.h @@ -0,0 +1,219 @@ +/* -*-C++-*- */ +#ifndef PDU_CLS_ +#define PDU_CLS_ +//============================================================================= +/** + * @file pdu.h + * + * $Id$ + * + * Pdu class definition. Encapsulation of an SMI Protocol + * Data Unit (PDU) aka Packet in C++. + * + * + * @author Peter E Mellquist original code Michael MacFaden mrm@cisco.com ACE port + * @author add iterator class for pdus + */ +//============================================================================= + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +// TODO: this needs to be moved into the CLASS and modifyable at runtime +// TODO: define an iterator object to traverse the vbs in a pdu + +#define MAX_VBS 25 +#include "asnmp/vb.h" // include Vb class definition + +/** + * @class Pdu + * + * @brief Protocol Data Unit (PDU) concrete class. An abstraction of the + * data packet used to by two SNMP sessions to communicate. + */ +class ASNMP_Export Pdu +{ +public: + /// constructor no args + Pdu( void); + + /// constructor with vbs and count + Pdu( Vb* pvbs, const int pvb_count); + + /// constructor with another Pdu instance + Pdu( const Pdu &pdu); + + /// destructor + ~Pdu(); + + /// assignment to another Pdu object overloaded + Pdu& operator=( const Pdu &pdu); + + /// append a vb to the pdu + Pdu& operator+=( Vb &vb); + + // TODO: add Pdu& operator-=(const Vb &vb); + + /// extract all Vbs from Pdu + int get_vblist( Vb* pvbs, const int pvb_count); + + /// deposit all Vbs to Pdu + int set_vblist( Vb* pvbs, const int pvb_count); + + /// get a particular vb + /// where 0 is the first vb + int get_vb( Vb &vb, const int index = 0) const; + + /// set a particular vb + /// where 0 is the first vb + int set_vb( Vb &vb, const int index); + + /// return number of vbs + int get_vb_count() const; + + /// return the error status + int get_error_status() const; + + /// return the complete error info from this pdu + const char *agent_error_reason(); + + /// set the error status + friend ASNMP_Export void set_error_status( Pdu *pdu, const int status); + + /// return the error index + int get_error_index() const; + + /// set the error index + friend ASNMP_Export void set_error_index( Pdu *pdu, const int index); + + /// clear error status + friend ASNMP_Export void clear_error_status( Pdu *pdu); + + /// clear error index + friend ASNMP_Export void clear_error_index( Pdu *pdu); + + /// return the request id + unsigned long get_request_id() const; + + /// set the request id + friend void set_request_id( Pdu *pdu, const unsigned long rid); + + /// get the pdu type + unsigned short get_type() const; + + /// set the pdu type + void set_type( unsigned short type); + + /// returns validity of Pdu instance + int valid() const; + + /// trim off count vbs from the end of the vb list + int trim(const int count=1); + + /// delete a Vb anywhere within the Pdu + int delete_vb( const int position); + + /// delete_all vbs in pdu + void delete_all_vbs(); + + /// set notify timestamp + void set_notify_timestamp( const TimeTicks & timestamp); + + /// get notify timestamp + void get_notify_timestamp( TimeTicks & timestamp) const; + + /// set the notify id + void set_notify_id( const Oid id); + + /// get the notify id + void get_notify_id( Oid &id) const; + + /// set the notify enterprise + void set_notify_enterprise( const Oid &enterprise); + + /// get the notify enterprise + void get_notify_enterprise( Oid & enterprise) const; + + /// return fomatted version of this object + const char *to_string(); + + + protected: + /// pointer to array of Vbs + Vb *vbs_[MAX_VBS]; + + /// count of Vbs + int vb_count_; + + /// SMI error status + int error_status_; + + /// SMI error index + int error_index_; + + /// valid boolean status of object construction + /// SMI request id + int validity_; + unsigned long request_id_; + + /// derived at run time based on request type + unsigned short pdu_type_; + + /** + * a timestamp associated with an infor + * for notify Pdu objects only + * traps & notifies + */ + TimeTicks notify_timestamp_; + + /// an id + Oid notify_id_; + + Oid notify_enterprise_; + + private: + /// buffer for to_string() + char *output_; +}; + + +/** + * @class VbIter + * + * @brief Utility class to iterate once through a PDU varbind list + */ +class ASNMP_Export VbIter +{ + public: + /// default constructor + VbIter(Pdu& pdu); + + /// returns 1 if ok, else 0 if none left + int next(Vb& vb); + + private: + /// disallow copy constructor use + VbIter(const VbIter&); + + /// current object in list + int idx_; + + /// ptr to pdu being interated over + Pdu *pdu_; +}; + +#endif //PDU_CLS_ + diff --git a/ACE/ASNMP/asnmp/sagent.cpp b/ACE/ASNMP/asnmp/sagent.cpp new file mode 100644 index 00000000000..8ee2fdb5b8d --- /dev/null +++ b/ACE/ASNMP/asnmp/sagent.cpp @@ -0,0 +1,97 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// sagent.cpp +// +// = DESCRIPTION +// SNMP agent class definition. The sagent class provides an object oriented +// approach for creating SNMP Agents. The sagent class is an encapsulation +// of SNMP sessions, gets, sets, etc. +// +// = AUTHOR +// Michael R. MacFaden +// +// ============================================================================ +#include "ace/Reactor.h" +#include "ace/SOCK_Dgram.h" + +#include "asnmp/oid.h" // snmp++ oid class +#include "asnmp/vb.h" // snbmp++ vb class +#include "asnmp/target.h" // snmp++ target class +#include "asnmp/pdu.h" // snmp++ pdu class +#include "asnmp/snmperrs.h" // error macros and strings +#include "asnmp/address.h" // snmp++ address class defs +#include "asnmp/snmp.h" // manager snmp interface +#include "asnmp/sagent.h" // agent interface +#include "asnmp/transaction.h" // convert from wire to API + +ACE_RCSID(asnmp, sagent, "$Id$") + +sagent::sagent(unsigned short port): Snmp(port) +{ + ACE_TRACE("sagent::sagent(short)"); +} + +sagent::~sagent() +{ + ACE_TRACE("sagent::~sagent"); +} + +int sagent::handle_input(ACE_HANDLE fd) +{ + ACE_TRACE("sagent::handle_input"); + + transaction tr(iv_snmp_session_); // this section needs a better design + tr.handle_input(fd); + char rcv_com_str[MAX_COMM_STR_LEN]; + if (tr.result(pdu_, rcv_com_str) < 0) + return 0; + OctetStr community(rcv_com_str); + const ACE_INET_Addr &ta = tr.get_from_addr(); + ACE_TCHAR buf_tmp[MAXHOSTNAMELEN + 1]; + ta.addr_to_string (buf_tmp, MAXHOSTNAMELEN); + UdpAddress ra (ACE_TEXT_ALWAYS_CHAR (buf_tmp)); + tgt_.set_address(ra); + + + // process msg here by calling subclass's implementation + switch (pdu_.get_type()){ + case sNMP_PDU_GET: + tgt_.set_read_community(community); + this->handle_get(pdu_, tgt_); + break; + + case sNMP_PDU_GETNEXT: + tgt_.set_read_community(community); + this->handle_get_next(pdu_, tgt_); + break; + + case sNMP_PDU_SET: + tgt_.set_write_community(community); + this->handle_set(pdu_, tgt_); + break; + + default: + ACE_ASSERT(0); + } + return 0; +} + +ACE_HANDLE sagent::get_handle() const +{ + ACE_TRACE("sagent::get_handle"); + return iv_snmp_session_.get_handle(); +} + +int sagent::respond(Pdu& pdu,UdpTarget& tgt) +{ + pdu.set_type(sNMP_PDU_RESPONSE); + transaction tr(pdu, tgt, iv_snmp_session_); + tr.send(); + return 0; +} diff --git a/ACE/ASNMP/asnmp/sagent.h b/ACE/ASNMP/asnmp/sagent.h new file mode 100644 index 00000000000..d220c3ed459 --- /dev/null +++ b/ACE/ASNMP/asnmp/sagent.h @@ -0,0 +1,82 @@ +/* -*-C++-*- */ +#ifndef SAGENT_CLS_ +#define SAGENT_CLS_ +//============================================================================= +/** + * @file sagent.h + * + * $Id$ + * + * SNMP agent class defintion. The sagent class provides an object oriented + * approach for creating SNMP Agents. The sagent class is an encapsulation of SNMP + * sessions, gets, sets, etc. + * + * @author Michael R. MacFaden + */ +//============================================================================= + +#include "ace/Reactor.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/SOCK_Dgram.h" + +#include "asnmp/oid.h" // snmp++ oid class +#include "asnmp/vb.h" // snbmp++ vb class +#include "asnmp/target.h" // snmp++ target class +#include "asnmp/pdu.h" // snmp++ pdu class +#include "asnmp/snmperrs.h" // error macros and strings +#include "asnmp/address.h" // snmp++ address class defs +#include "asnmp/snmp.h" // snmp interface + +// sagent - supports Version 1 operations in blocking mode + +#define DEF_AGENT_PORT (161) + +/** + * @class sagent + * + * @brief Concrete class sagent defines the session and interface to + * communicate with another SNMP Version 1 manager + */ +class ASNMP_Export sagent : public ACE_Event_Handler, private Snmp +{ + public: + + + // override the next three methods (callbacks) to implment your agent + // + + /// retrieve data from a peer agent for a given list of oid values + virtual int handle_get( Pdu &pdu, UdpTarget &target) = 0; + + /// retrieve data lexically adjacent to the oids specified in the pdu + /// from the peer agent + virtual int handle_get_next( Pdu &pdu, UdpTarget &target) = 0; + + /// set data in the agent from the list of oids in the pdu + virtual int handle_set( Pdu &pdu, UdpTarget &target) = 0; + + /// new pdu received from mgr (reactor calls this) + virtual int handle_input(ACE_HANDLE); + + /// retrieve io descriptor (reactor uses this) + virtual ACE_HANDLE get_handle() const; + + /// send a response pdu to the mgr + int respond(Pdu& pdu, UdpTarget& tgt); + + protected: + sagent(unsigned short port = DEF_AGENT_PORT); + virtual ~sagent(); + +private: + sagent(const sagent&); + Pdu pdu_; // current input pdu + UdpTarget tgt_; // addr & com strs +}; + +#endif //SAGENT_CLS_ + diff --git a/ACE/ASNMP/asnmp/smi.h b/ACE/ASNMP/asnmp/smi.h new file mode 100644 index 00000000000..3e505c64cb8 --- /dev/null +++ b/ACE/ASNMP/asnmp/smi.h @@ -0,0 +1,147 @@ +/* -*-C++-*- */ +#ifndef SMIDEF_ +#define SMIDEF_ +//============================================================================= +/** + * @file smi.h + * + * $Id$ + * + * Address class definition. Encapsulates various network + * addresses into easy to use, safe and portable classes. + */ +//============================================================================= + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. + +=====================================================================*/ + +#include "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +//----------[ ASN/BER Base Types ]----------------------------------------- +// Basic Encoding Rules (BER) +// (used in forming SYNTAXes and certain SNMP types/values) +#define aSN_UNIVERSAL (0x00) +#define aSN_APPLICATION (0x40) +#define aSN_CONTEXT (0x80) +#define aSN_PRIVATE (0xC0) +#define aSN_PRIMITIVE (0x00) +#define aSN_CONSTRUCTOR (0x20) + +//------[ SNMP ObjectSyntax Values ]--------------------------------------- +#define sNMP_SYNTAX_SEQUENCE (aSN_CONTEXT | aSN_CONSTRUCTOR | 0x10) + + +//------------------------------------------------------------------------- +// These values are used in the "syntax" member +// of the smiVALUE structure which follows. +// Note: UInt32 is indistinguishable from Gauge32 per SNMPv2 Draft Standard +// NsapAddr is obsoleted as unique SMI type per SNMPv2 Draft Standard +#define sNMP_SYNTAX_INT (aSN_UNIVERSAL | aSN_PRIMITIVE | 0x02) +#define sNMP_SYNTAX_BITS (aSN_UNIVERSAL | aSN_PRIMITIVE | 0x03) +#define sNMP_SYNTAX_OCTETS (aSN_UNIVERSAL | aSN_PRIMITIVE | 0x04) +#define sNMP_SYNTAX_NULL (aSN_UNIVERSAL | aSN_PRIMITIVE | 0x05) +#define sNMP_SYNTAX_OID (aSN_UNIVERSAL | aSN_PRIMITIVE | 0x06) +#define sNMP_SYNTAX_INT32 sNMP_SYNTAX_INT +#define sNMP_SYNTAX_IPADDR (aSN_APPLICATION | aSN_PRIMITIVE | 0x00) +#define sNMP_SYNTAX_CNTR32 (aSN_APPLICATION | aSN_PRIMITIVE | 0x01) +#define sNMP_SYNTAX_GAUGE32 (aSN_APPLICATION | aSN_PRIMITIVE | 0x02) +#define sNMP_SYNTAX_TIMETICKS (aSN_APPLICATION | aSN_PRIMITIVE | 0x03) +#define sNMP_SYNTAX_OPAQUE (aSN_APPLICATION | aSN_PRIMITIVE | 0x04) +#define sNMP_SYNTAX_CNTR64 (aSN_APPLICATION | aSN_PRIMITIVE | 0x06) +#define sNMP_SYNTAX_UINT32 (aSN_APPLICATION | aSN_PRIMITIVE | 0x07) + +//------------------------------------------------------------------------- + +//---------------[ Exception conditions for SNMPv2 ]----------------------- +// support SNMP v2 +#define sNMP_SYNTAX_NOSUCHOBJECT (aSN_CONTEXT | aSN_PRIMITIVE | 0x00) +#define sNMP_SYNTAX_NOSUCHINSTANCE (aSN_CONTEXT | aSN_PRIMITIVE | 0x01) +#define sNMP_SYNTAX_ENDOFMIBVIEW (aSN_CONTEXT | aSN_PRIMITIVE | 0x02) + + +//--------------[ different types of PDU's ]------------------------------- +#define sNMP_PDU_GET (aSN_CONTEXT | aSN_CONSTRUCTOR | 0x0) +#define sNMP_PDU_GETNEXT (aSN_CONTEXT | aSN_CONSTRUCTOR | 0x1) +#define sNMP_PDU_RESPONSE (aSN_CONTEXT | aSN_CONSTRUCTOR | 0x2) +#define sNMP_PDU_SET (aSN_CONTEXT | aSN_CONSTRUCTOR | 0x3) +#define sNMP_PDU_V1TRAP (aSN_CONTEXT | aSN_CONSTRUCTOR | 0x4) +#define sNMP_PDU_GETBULK (aSN_CONTEXT | aSN_CONSTRUCTOR | 0x5) +#define sNMP_PDU_INFORM (aSN_CONTEXT | aSN_CONSTRUCTOR | 0x6) +#define sNMP_PDU_TRAP (aSN_CONTEXT | aSN_CONSTRUCTOR | 0x7) + + +//------[ smi typedefs ]--------------------------------------------------- +// SNMP-related types from RFC1442 (SMI) + +typedef unsigned char SmiBYTE, *SmiLPBYTE; + +//------------------------------------------------------------------------- +// SNMP-related types from RFC1442 (SMI) + +// int +typedef long SmiINT, *SmiLPINT; + +// int 32 +typedef SmiINT SmiINT32, *SmiLPINT32; + +// unit32 +typedef unsigned long SmiUINT32, *SmiLPUINT32; + +// octet struct +typedef struct { + SmiUINT32 len; + SmiLPBYTE ptr;} SmiOCTETS, *SmiLPOCTETS; + +// bits +typedef SmiOCTETS SmiBITS, *SmiLPBITS; + +// SMI oid struct +typedef struct { + SmiUINT32 len; + SmiLPUINT32 ptr;} SmiOID, *SmiLPOID; + +// ipaddr +typedef SmiOCTETS SmiIPADDR, *SmiLPIPADDR; + +// 32bit counter +typedef SmiUINT32 SmiCNTR32, *SmiLPCNTR32; + +// gauge +typedef SmiUINT32 SmiGAUGE32, *SmiLPGAUGE32; + +// timeticks +typedef SmiUINT32 SmiTIMETICKS, *SmiLPTIMETICKS; + +// opaque +typedef SmiOCTETS SmiOPAQUE, *SmiLPOPAQUE; + +// nsapaddr +typedef SmiOCTETS SmiNSAPADDR, *SmiLPNSAPADDR; + +// 64 bit counter +typedef struct { + SmiUINT32 hipart; + SmiUINT32 lopart; +} SmiCNTR64, *SmiLPCNTR64; + +#endif // SMIDEF_ + + diff --git a/ACE/ASNMP/asnmp/smival.h b/ACE/ASNMP/asnmp/smival.h new file mode 100644 index 00000000000..e754206f506 --- /dev/null +++ b/ACE/ASNMP/asnmp/smival.h @@ -0,0 +1,102 @@ +/* -*-C++-*- */ +#ifndef SMIVALUE_ +#define SMIVALUE_ +//============================================================================= +/** + * @file smival.h + * + * $Id$ + * + * SMIValue class definition. Superclass for the various types + * of SNMP values (Address, Oid, Octet, etc.). Provides + * only a few functions, most info is in subclass. + * + * + */ +//============================================================================= + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +//----[ includes ]----------------------------------------------------- +#include "asnmp/smi.h" +#include "asnmp/ASNMP_Export.h" +#include "ace/os_include/os_stddef.h" + +//----[ macros ]------------------------------------------------------- + +//====================================================================== +// SMI value structure conforming with SMI RFC +// +typedef struct { /* smiVALUE portion of VarBind */ + SmiUINT32 syntax; /* Insert SNMP_SYNTAX_ */ + union { + SmiINT sNumber; /* SNMP_SYNTAX_INT + SNMP_SYNTAX_INT32 */ + SmiUINT32 uNumber; /* SNMP_SYNTAX_UINT32 + SNMP_SYNTAX_CNTR32 + SNMP_SYNTAX_GAUGE32 + SNMP_SYNTAX_TIMETICKS */ + SmiCNTR64 hNumber; /* SNMP_SYNTAX_CNTR64 */ + SmiOCTETS string; /* SNMP_SYNTAX_OCTETS + SNMP_SYNTAX_BITS + SNMP_SYNTAX_OPAQUE + SNMP_SYNTAX_IPADDR + SNMP_SYNTAX_NSAPADDR */ + SmiOID oid; /* SNMP_SYNTAX_OID */ + SmiBYTE empty; /* SNMP_SYNTAX_NULL + SNMP_SYNTAX_NOSUCHOBJECT + SNMP_SYNTAX_NOSUCHINSTANCE + SNMP_SYNTAX_ENDOFMIBVIEW */ + } value; +} SmiVALUE, *SmiLPVALUE; + +// An "abstract" (pure virtual) class that serves as the base class +// for all specific SNMP syntax types. +// +class ASNMP_Export SnmpSyntax { + +public: + virtual const char * to_string() = 0; + // virtual function for getting a printable ASCII value for any SNMP Value + + virtual SmiUINT32 get_syntax() = 0; + // return the current syntax + + virtual SnmpSyntax * clone() const = 0; + // virtual clone operation for creating a new Value from an existing + // value. The caller MUST use the delete operation on the return + // value when done. + + virtual ~SnmpSyntax() {}; + // virtual destructor to ensure deletion of derived classes... + + virtual SnmpSyntax& operator=(SnmpSyntax &/*val*/) + { + return *this; + } + // overloaded assignment operator + // This should be pure virtual, but WinNT compiler + // complains about unresolved reference at link time. + + virtual int valid() const = 0; + // return validity of value object. + +protected: + SmiVALUE smival; +}; + +#endif // SMIVALUE_ diff --git a/ACE/ASNMP/asnmp/snmp.cpp b/ACE/ASNMP/asnmp/snmp.cpp new file mode 100644 index 00000000000..cc2e1dd4179 --- /dev/null +++ b/ACE/ASNMP/asnmp/snmp.cpp @@ -0,0 +1,286 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// snmp.cpp +// +// = DESCRIPTION +// The basic SNMPv1 API - blocking version using UDP/IPv4 transport +// and addressing. +// +// = AUTHOR +// Peter E Mellquist class design/orig code +// Michael R MacFaden mrm@cisco.com / rework API, use ACE facilities +// ============================================================================ +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + + +#define INCLUDE_SNMP_ERR_STRINGS_ + +//----[ snmp++ includes ]---------------------------------------------- +#include "asnmp/snmp.h" // class def for this module +#include "asnmp/oid.h" // class def for oids +#include "asnmp/enttraps.h" // class def for well known trap oids +#include "asnmp/vb.h" // class def for vbs +#include "asnmp/address.h" // class def for addresses +#include "asnmp/wpdu.h" // adapter to cmu_library / wire protocol +#include "asnmp/transaction.h" // synchronous transaction processor +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_unistd.h" +#include "ace/OS_NS_time.h" + +ACE_RCSID(asnmp, snmp, "$Id$") + +const coldStartOid coldStart; +const warmStartOid warmStart; +const linkDownOid linkDown; +const linkUpOid linkUp; +const authenticationFailureOid authenticationFailure; +const egpNeighborLossOid egpNeighborLoss; +const snmpTrapEnterpriseOid snmpTrapEnterprise; + +char Snmp::host_name_[MAXHOSTNAMELEN] = ""; + +Snmp::Snmp(unsigned short port): result_(0), construct_status_(SNMP_CLASS_ERROR), last_transaction_status_(0) +{ + ACE_TRACE("Snmp::Snmp"); + + ACE_INET_Addr addr(port); // any port,address is ok + if (iv_snmp_session_.open(addr) < 0) { + last_transaction_status_ = errno; // open udp/ipv4 socket + ACE_DEBUG((LM_DEBUG, "Snmp::snmp::open port %d failed", port)); + return; + } + + // initial request id randomly generated then monotonically incremented + req_id_ = (unsigned) ACE_OS::time(0); + + construct_status_ = SNMP_CLASS_SUCCESS; + return; +} + +Snmp::~Snmp() +{ + ACE_TRACE("Snmp::~Snmp"); + iv_snmp_session_.close(); +} + +int Snmp::valid() const +{ + return construct_status_; +} + +// given error code, return string definition +// class version +// static +const char * Snmp::error_string(int last_transaction_status_) +{ + ACE_TRACE("Snmp::error_string"); + + return ((last_transaction_status_ < 0) ? + ((last_transaction_status_ < MAX_NEG_ERROR)? + nErrs[ abs(MAX_NEG_ERROR) + 1] : nErrs[abs(last_transaction_status_)]): + ((last_transaction_status_ > MAX_POS_ERROR)? + pErrs[MAX_POS_ERROR+1] : pErrs[last_transaction_status_])); +} + +// instance version +const char * Snmp::error_string() +{ + return Snmp::error_string(last_transaction_status_); +} + +void Snmp::check_default_port(UdpTarget& target, unsigned short port) +{ + UdpAddress tmp; + target.get_address(tmp); + if (tmp.get_port() == 0) { + tmp.set_port(port); + target.set_address(tmp); + } +} + +int Snmp::run_transaction(Pdu& pdu, UdpTarget& target) +{ + int rc, done = 0; + + // 1. set unique id to match this packet on return + size_t hold_req_id = req_id_++; + set_request_id(&pdu, hold_req_id); + + // 2. write request to agent + transaction trans(pdu, target, iv_snmp_session_); + + // this call blocks while it attempts to retrieve agent response + while (!done) { + if ((rc = trans.run()) < 0) { + last_transaction_status_ = rc; + return rc; + } + else { + trans.result(pdu); + // verify this is the pdu we are after + if (pdu.get_request_id() == hold_req_id) + done = 1 ; + } + } + return 0; +} + +int Snmp::run_transaction(Pdu& pdu, UdpTarget& target, Snmp_Result * cb) +{ + if (!cb) + return run_transaction(pdu, target); + + // 1. set unique id to match this packet on return + hold_req_id_ = req_id_++; + set_request_id(&pdu, hold_req_id_); + pdu_ = &pdu; + result_ = cb; + + // 2. write request to agent + transaction * trans = new transaction(pdu, target, iv_snmp_session_); + return trans->run(this); +} + +void Snmp::result(transaction *t, int rc) +{ + t->result(*pdu_); + // verify this is the pdu we are after + if (pdu_->get_request_id() == hold_req_id_) + { + last_transaction_status_ = rc; + delete t; + result_->result(this, rc); + } + else + { + rc = t->run(this); + if (rc < 0) + { + delete t; + result_->result(this, rc); + } + } +} + +int Snmp::validate_args(const Pdu& pdu, const UdpTarget& target) const +{ + // 0. check object status + if (construct_status_ != SNMP_CLASS_SUCCESS) + return construct_status_; + + // 1. check args passed + if ( !pdu.valid() || !target.valid() ) + return SNMP_INVALID_ARGS; + return 0; +} + +// SYNC API: write request to wire then wait for reply or timeout +int Snmp::get( Pdu &pdu, UdpTarget &target, Snmp_Result * cb) +{ + ACE_TRACE("Snmp::get"); + int rc; + if ((rc = validate_args(pdu, target)) != 0) + return rc; + + pdu.set_type( sNMP_PDU_GET); + check_default_port(target); + return run_transaction(pdu, target, cb); +} + +int Snmp::get_next( Pdu &pdu, UdpTarget &target, Snmp_Result * cb) +{ + ACE_TRACE("Snmp::get_next"); + int rc; + if ((rc = validate_args(pdu, target)) != 0) + return rc; + + pdu.set_type( sNMP_PDU_GETNEXT); + check_default_port(target); + return run_transaction(pdu, target, cb); +} + +int Snmp::set( Pdu &pdu, UdpTarget &target, Snmp_Result * cb) +{ + ACE_TRACE("Snmp::set"); + int rc; + if ((rc = validate_args(pdu, target)) != 0) + return rc; + + pdu.set_type( sNMP_PDU_SET); + check_default_port(target); + return run_transaction(pdu, target, cb); +} + +// one way, best of luck, non-confirmed alert +int Snmp::trap( Pdu &pdu, UdpTarget &target) +{ + ACE_TRACE("Snmp::trap"); + int rc; + if ((rc = validate_args(pdu, target)) != 0) + return rc; + + pdu.set_type( sNMP_PDU_V1TRAP); + check_default_port(target, DEF_TRAP_PORT); + + // 2. write request to agent + transaction trans(pdu, target, iv_snmp_session_); + if (trans.send() > 0) // expect number of bytes sent on + return 0; + + last_transaction_status_ = SNMP_CLASS_INTERNAL_ERROR; + return -1; +} + +// Allow host name to be overriden. Supplying a null pointer or zero +// length string removes the override. +void Snmp::override_host_name(const char* name) +{ + if (name) + { + ACE_OS::strncpy(host_name_, name, MAXHOSTNAMELEN); + host_name_[MAXHOSTNAMELEN-1] = 0; + } + else { + host_name_[0] = 0; + } +} + +// Returns the current host name in the supplied string. +void Snmp::get_host_name(char* name, int len) +{ + if (name) + { + if (ACE_OS::strlen(host_name_) > 0) + { + ACE_OS::strncpy(name, host_name_, len); + name[len-1] = 0; + } + else + { + if (ACE_OS::hostname(name, len-1) == -1) + name[0] = 0; + } + } +} + +Snmp_Result::~Snmp_Result() {} diff --git a/ACE/ASNMP/asnmp/snmp.h b/ACE/ASNMP/asnmp/snmp.h new file mode 100644 index 00000000000..5bae232baa0 --- /dev/null +++ b/ACE/ASNMP/asnmp/snmp.h @@ -0,0 +1,137 @@ +/* -*-C++-*- */ +#ifndef SNMP_CLS_ +#define SNMP_CLS_ +//============================================================================= +/** + * @file snmp.h + * + * $Id$ + * + * SNMP class defintion. The Snmp class provides an object oriented + * approach to SNMP. The SNMP class is an encapsulation of SNMP + * sessions, gets, sets, etc. The class manages all SNMP + * resources and provides complete retry and timeout capability. + * + * + * @author Peter E Mellquist design + * @author first implementation Michael R. MacFaden port to ACE / use Reactor pattern + */ +//============================================================================= + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "ace/Reactor.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/SOCK_Dgram.h" + +#include "asnmp/oid.h" // snmp++ oid class +#include "asnmp/vb.h" // snbmp++ vb class +#include "asnmp/target.h" // snmp++ target class +#include "asnmp/pdu.h" // snmp++ pdu class +#include "asnmp/snmperrs.h" // error macros and strings +#include "asnmp/address.h" // snmp++ address class defs +#include "asnmp/transaction_result.h" +#include "asnmp/ASNMP_Export.h" + +class Snmp; +class ASNMP_Export Snmp_Result +{ + public: + virtual ~Snmp_Result(); + virtual void result(Snmp *snmp, int result) = 0; +}; + +// Snmp session class - supports Version 1 operations in blocking mode +/** + * @class Snmp + * + * @brief Concrete class Snmp defined the session and interface to + * communicate with another SNMP Version 1 agent + */ +class ASNMP_Export Snmp : public transaction_result +{ + Snmp_Result * result_; + Pdu * pdu_; + unsigned hold_req_id_; +public: + Snmp(unsigned short port = INADDR_ANY); + virtual ~Snmp(); + + /// retrieve data from a peer agent for a given list of oid values + /// default port 161 + int get( Pdu &pdu, UdpTarget &target, Snmp_Result * cb = 0); + + /** + * retrieve data lexically adjacent to the oids specified in the pdu + * from the peer agent + * default port 161 + */ + int get_next( Pdu &pdu, UdpTarget &target, Snmp_Result * cb = 0); + + /// set data in the agent from the list of oids in the pdu + /// default port 161 + int set( Pdu &pdu, UdpTarget &target, Snmp_Result * cb = 0); + + /// send an SNMPv1 trap (unreliable) to a remote system (def port 162) + int trap( Pdu &pdu, UdpTarget &target); + + /// status of object after construction + int valid() const; + + /// given error code, return string reason + static const char * error_string(int code); + + /// retrieve a reason string if any of the above commands fail + const char * error_string(); + + /// for async transaction results + void result(transaction * t, int rc); + + /// allow the host name to be overriden + static void override_host_name(const char* name); + + /// returns the overriden host name + static void get_host_name(char* name, int len); + +protected: + void check_default_port(UdpTarget& target,unsigned short port=DEF_AGENT_PORT); + int run_transaction(Pdu& pdu, UdpTarget& target); + int run_transaction(Pdu& pdu, UdpTarget& target, Snmp_Result * cb); + int validate_args(const Pdu& pdu, const UdpTarget& target) const; + + Snmp(const Snmp&); + + /// io object + ACE_SOCK_Dgram iv_snmp_session_; + + /// status of construction + int construct_status_; + + /// result code from last transaction + int last_transaction_status_; + + /// transaction request id + unsigned req_id_; + + static char host_name_[MAXHOSTNAMELEN]; +}; + +#endif //SNMP_CLS_ diff --git a/ACE/ASNMP/asnmp/snmperrs.h b/ACE/ASNMP/asnmp/snmperrs.h new file mode 100644 index 00000000000..7aafdc0619a --- /dev/null +++ b/ACE/ASNMP/asnmp/snmperrs.h @@ -0,0 +1,210 @@ +/* -*-C++-*- */ +#ifndef SNMPERRS_H_ +#define SNMPERRS_H_ +//============================================================================= +/** + * @file snmperrs.h + * + * $Id$ + * + * Definition of error macros and error strings + * + * + */ +//============================================================================= + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +============================================================================*/ + + +//-------[ Positive ASNMP Error Return Codes ]------------------------------ +// These values are error status values from RFC 1905 +// +// The values can be returned via Pdu::get_error_status() +// +#define SNMP_ERROR_SUCCESS 0 // Success Status +#define SNMP_ERROR_TOO_BIG 1 // Pdu encoding too big +#define SNMP_ERROR_NO_SUCH_NAME 2 // No such VB name, see error index +#define SNMP_ERROR_BAD_VALUE 3 // Bad Vb +#define SNMP_ERROR_READ_ONLY 4 // VB is read only, see error index +#define SNMP_ERROR_GENERAL_VB_ERR 5 // General VB error, see error index +#define SNMP_ERROR_NO_ACCESS 6 // No access to MIBs data +#define SNMP_ERROR_WRONG_TYPE 7 // Requested type was incorrect +#define SNMP_ERROR_WRONG_LENGTH 8 // Request Pdu has inccorect length +#define SNMP_ERROR_WRONG_ENCODING 9 // Request Pdu has wrong encoding +#define SNMP_ERROR_WRONG_VALUE 10 // Request Pdu has wrong value +#define SNMP_ERROR_NO_CREATION 11 // Unable to create object specified +#define SNMP_ERROR_INCONSIST_VAL 12 // Inconsistent value in request +#define SNMP_ERROR_RESOURCE_UNAVAIL 13 // Resources unavailable +#define SNMP_ERROR_COMITFAIL 14 // Unable to comit +#define SNMP_ERROR_UNDO_FAIL 15 // Unable to undo +#define SNMP_ERROR_AUTH_ERR 16 // Authentication failure +#define SNMP_ERROR_NOT_WRITEABLE 17 // Mib Object not writeable +#define SNMP_ERROR_INCONSIS_NAME 18 // Inconsistent naming used + + +//-------[ Negative ASNMP Result/Error Return Codes ]------------------- + +// General +#define SNMP_CLASS_SUCCESS 0 // success +#define SNMP_CLASS_ERROR -1 // general error +#define SNMP_CLASS_RESOURCE_UNAVAIL -2 // e.g., malloc failed +#define SNMP_CLASS_INTERNAL_ERROR -3 // unexpected / internal error +#define SNMP_CLASS_UNSUPPORTED -4 // unsupported function + +// Callback reasons: +#define SNMP_CLASS_TIMEOUT -5 // outstanding request timed out +#define SNMP_CLASS_ASYNC_RESPONSE -6 // received response for outstd request +#define SNMP_CLASS_NOTIFICATION -7 // received notification (trap/inform) +#define SNMP_CLASS_SESSION_DESTROYED -8 // snmp::destroyed with oustanding reqs pending + +// Snmp Class: +#define SNMP_CLASS_INVALID -10 // snmp::mf called on invalid instance +#define SNMP_CLASS_INVALID_PDU -11 // invalid pdu passed to mf +#define SNMP_CLASS_INVALID_TARGET -12 // invalid target passed to mf +#define SNMP_CLASS_INVALID_CALLBACK -13 // invalid callback to mf +#define SNMP_CLASS_INVALID_REQID -14 // invalid request id to cancel +#define SNMP_CLASS_INVALID_NOTIFYID -15 // missing trap/inform oid +#define SNMP_CLASS_INVALID_OPERATION -16 // snmp operation not allowed for specified target +#define SNMP_CLASS_INVALID_OID -17 // invalid oid passed to mf +#define SNMP_CLASS_INVALID_ADDRESS -18 // invalid address passed to mf +#define SNMP_CLASS_ERR_STATUS_SET -19 // agent returned response pdu with error_status set + +// Transport Errors: +#define SNMP_CLASS_TL_UNSUPPORTED -20 // transport unsupported +#define SNMP_CLASS_TL_IN_USE -21 // transport in use +#define SNMP_CLASS_TL_FAILED -22 // transport operation failed + +// extras +#define SNMP_CLASS_SHUTDOWN -23 // used for back door shutdown +#define SNMP_INVALID_ARGS -24 // invalid args passed + +#ifdef INCLUDE_SNMP_ERR_STRINGS_ + +// ASCII strings returned through Snmp::error() function. NOTE: altering +// the strings in this header file will not affect the return values of +// Snmp::error(), unless you rebuild the ASNMP library from source. + +#define MAX_POS_ERROR SNMP_ERROR_INCONSIS_NAME +#define MAX_NEG_ERROR SNMP_CLASS_SHUTDOWN + +static const char * pErrs[] = { + "Success", // 0 + "SNMP: Response PDU Too Big", // 1 + "SNMP: Variable does not exist", // 2 + "SNMP: Cannot modify variable: Bad Value", // 3 + "SNMP: Cannot modify object, Read Only", // 4 + "SNMP: Cannot perform operation, General Error", // 5 + "SNMP: Cannot access variable, No Access", // 6 + "SNMP: Cannot create/modify variable, Wrong Type", // 7 + "SNMP: Cannot create/set variable, Wrong Length", // 8 + "SNMP: Cannot create/set variable, Wrong Encoding", // 9 + "SNMP: Cannot create/set variable, Wrong Value", // 10 + "SNMP: Cannot create variable, Creation Not Allowed", // 11 + "SNMP: Cannot create/set variable, Inconsistent Value", // 12 + "SNMP: Cannot create/set variable, Resource Unavailable", // 13 + "SNMP: Cannot create/set variable, Commit Failed", // 14 + "SNMP: Cannot create/set variable, Undo Failed", // 15 + "SNMP: Cannot perform operation, Authorization Error", // 16 + "SNMP: Cannot create/set variable, Not Writable", // 17 + "SNMP: Cannot create variable, Inconsistent Name", // 18 +}; + + +static const char * nErrs[] = { + // General: + // 0 SNMP_CLASS_SUCCESS + "ASNMP: Success", + + // 1 SNMP_CLASS_ERROR + "ASNMP: Operation failed", + + // 2 SNMP_CLASS_RESOURCE_UNAVAIL + "ASNMP: Resource unavailable", + + // 3 SNMP_CLASS_INTERNAL_ERROR + "ASNMP: Internal error", + + // 4 SNMP_CLASS_UNSUPPORTED + "ASNMP: Unsupported function", + + // Callback reasons: + // 5 SNMP_CLASS_TIMEOUT + "ASNMP: SNMP request timed out", + + // 6 SNMP_CLASS_ASYNC_RESPONSE + "ASNMP: Received SNMP Response", + + // 7 SNMP_CLASS_NOTIFICATION + "ASNMP: Received SNMP Notification (trap or inform)", + + // 8 SNMP_CLASS_SESSION_DESTROYED + "ASNMP: Closing session with outstanding requests", + + // 9 reserved for future + "Unknown error code", + + // Snmp Class errors: + // 10 SNMP_CLASS_INVALID + "ASNMP: Class not valid", + + // 11 SNMP_CLASS_INVALID_PDU + "ASNMP: Invalid Pdu", + + // 12 SNMP_CLASS_INVALID_TARGET + "ASNMP: Invalid Target", + + // 13 SNMP_CLASS_INVALID_CALLBACK + "ASNMP: Invalid (null) Callback Function", + + // 14 SNMP_CLASS_INVALID_REQID + "ASNMP: Invalid Request Id", + + // 15 SNMP_CLASS_INVALID_NOTIFYID + "ASNMP: Invalid Notification Id", + + // 16 SNMP_CLASS_INVALID_OPERATION + "ASNMP: SNMP Operation not supported on specified Target", + + // 17 SNMP_CLASS_INVALID_OID + "ASNMP: Invalid Object Identifier", + + // 18 SNMP_CLASS_INVALID_ADDRESS + "ASNMP: Invalid Address", + + // 19 SNMP_CLASS_ERR_STATUS_SET + "ASNMP: Agent indicates error in SNMP request", + + // Transport Errors: + // 20 SNMP_CLASS_TL_UNSUPPORTED + "ASNMP: Transport is not supported", + + // 21 SNMP_CLASS_TL_IN_USE + "ASNMP: Transport is in use", + + // 22 SNMP_CLASS_TL_FAILED + "ASNMP: Transport operation failed", + + // 23 SNMP_CLASS_SHUTDOWN + "ASNMP: Blocked Mode Shutdown", + + // unknown error code + "Unknown error code", +}; + +#endif //INCLUDE_SNMP_ERR_STRINGS_ + +#endif //SNMPERRS_H_ diff --git a/ACE/ASNMP/asnmp/target.cpp b/ACE/ASNMP/asnmp/target.cpp new file mode 100644 index 00000000000..dd99fa19560 --- /dev/null +++ b/ACE/ASNMP/asnmp/target.cpp @@ -0,0 +1,323 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// target.cpp +// +// = DESCRIPTION +// Target class defines target SNMP agents. +// +// = AUTHOR +// Peter E Mellquist +// Michael R MacFaden mrm@cisco.com - rework & ACE port +// ============================================================================ +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. + =====================================================================*/ + +#include "asnmp/target.h" +#include "ace/OS_NS_stdio.h" + +ACE_RCSID(asnmp, target, "$Id$") + +//---------------------------------------------------------------------- +//--------[ Class default values ]---------------------- +//---------------------------------------------------------------------- +u_long SnmpTarget::default_timeout_ = DEF_TIMEOUT; +int SnmpTarget::default_retries_ = DEF_RETRIES; +u_long SnmpTarget::default_max_pdu_size_ = DEF_MAX_SNMP_PACKET; +snmp_version SnmpTarget::default_version_ = version1; + +OctetStr UdpTarget::default_rd_community_(READ_COMM_STR); +OctetStr UdpTarget::default_wr_community_(WRITE_COMM_STR); + +//---------------------------------------------------------------------- +//--------[ Abstract SnmpTarget Member Functions ]---------------------- +//---------------------------------------------------------------------- +SnmpTarget::SnmpTarget(): + validity_(0), timeout_(default_timeout_), retries_(default_retries_), + max_pdu_size_(default_max_pdu_size_), version_(default_version_) +{ +} + +// return validity of target +int SnmpTarget::valid() const +{ + return validity_; +} + +// allow destruction of derived classes +SnmpTarget::~SnmpTarget() +{ +} + +// set the timeout +void SnmpTarget::set_timeout( const u_long t) +{ + timeout_ = t; +} + +// change the default timeout +void SnmpTarget::set_default_timeout( const u_long t) +{ + default_timeout_ = t; +} + +// set the retry value +void SnmpTarget::set_retry( const int r) +{ + retries_ = r; +} + +// change the default retries +void SnmpTarget::set_default_retry( const int r) +{ + default_retries_ = r; +} + +void SnmpTarget:: set_max_pdu_size(const u_long max_pdu_sz) +{ + max_pdu_size_ = max_pdu_sz; +} + + +void SnmpTarget::set_default_max_pdu_size(const u_long max_pdu_sz) +{ + default_max_pdu_size_ = max_pdu_sz; +} + +void SnmpTarget::set_version( const snmp_version v) +{ + version_ = v; +} + +void SnmpTarget::set_default_version( const snmp_version v) +{ + default_version_ = v; +} + +snmp_version SnmpTarget::get_version() const +{ + return version_; +} + +snmp_version SnmpTarget::get_default_version() const +{ + return default_version_; +} + +u_long SnmpTarget::get_max_pdu_size() const +{ + return max_pdu_size_; +} + +// get the retry value +int SnmpTarget::get_retry() const +{ + return retries_; +} + +// get the retry value +int SnmpTarget::get_default_retry() const +{ + return default_retries_; +} + +// get the timeout +u_long SnmpTarget::get_timeout() const +{ + return timeout_; +} + +SnmpTarget& SnmpTarget::operator=(const SnmpTarget& lhs) +{ + if (this == &lhs) + return *this; + + validity_ = lhs.validity_; + timeout_ = lhs.timeout_; + retries_ = lhs.retries_; + max_pdu_size_ =lhs.max_pdu_size_; + version_ = lhs.version_; + return *this; +} + +bool operator==(const SnmpTarget& lhs, const SnmpTarget& rhs) +{ + if (lhs.timeout_ != rhs.timeout_) + return false; + + if (lhs.retries_ != rhs.retries_) + return false; + + if (lhs.max_pdu_size_ != rhs.max_pdu_size_) + return false; + + if (lhs.version_ != rhs.version_) + return false; + + return true; +} + + +//---------------------------------------------------------------------- +//--------[ IpTarget Member Functions ]---------------------------------- +//---------------------------------------------------------------------- + + +//---------[ UdpTarget::UdpTarget( void) ]---------------------------------- + +UdpTarget::UdpTarget() +{ + validity_ = 0; + read_community_ = default_rd_community_; // assign by init fails + write_community_ = default_wr_community_; +} + +UdpTarget::UdpTarget(const UdpAddress& udp) : udp_address_(udp) +{ + if (udp_address_.valid()) + validity_ = 1; + read_community_ = default_rd_community_; + write_community_ = default_wr_community_; +} + +// - copy constructor can be synthesised by compiler + +//-----------[ UdpTarget::~UdpTarget() ]-------------------------------- +UdpTarget::~UdpTarget() +{ +} + +//-----------[ UdpTarget::clone() ]-------------------------------- +SnmpTarget * UdpTarget::clone() const +{ + return (SnmpTarget *) new UdpTarget(*this); +} + + +void UdpTarget::set_default_read_community(const OctetStr& rd_community) +{ + default_rd_community_ = rd_community; +} + +void UdpTarget::set_default_write_community(const OctetStr& wr_community) +{ + default_wr_community_ = wr_community; +} + + +// get the read community name as an u_char and len +void UdpTarget::get_read_community( OctetStr& read_community_oct) const +{ + read_community_oct = read_community_; +} + +//---------[ UdpTarget::set_getcommunity ]--------------------------------- +// set the read community name +void UdpTarget::set_read_community( const OctetStr& new_read_community) +{ + read_community_ = new_read_community; +} + +//---------[ UdpTarget::get_writecommunity ]---------------------------- +// get the write community +void UdpTarget::get_write_community( OctetStr &write_community_oct) const +{ + write_community_oct = write_community_; +} + +//-----------[ UdpTarget::set_writecommunity ]--------------------------- +// set the write community +void UdpTarget::set_write_community( const OctetStr& write_community_oct) +{ + write_community_ = write_community_oct; +} + +//------------[ Address& UdpTarget::get_address() ]--------------------- +// get the address +void UdpTarget::get_address( UdpAddress &address) const +{ + address = udp_address_; + return; +} + +//-------------[ UdpTarget::set_address ]-------------------------------- +// set the address +int UdpTarget::set_address( UdpAddress &udp_address) +{ + udp_address_ = udp_address; + if ( udp_address_.valid()) + validity_ = 1; + else + validity_ = 0; + + return validity_; +} + +// overloaded assignment +UdpTarget& UdpTarget::operator=( const UdpTarget& lhs) +{ + if (this == &lhs) + return *this; + + // assign base part + *((SnmpTarget *) this) = *((SnmpTarget *)&lhs); + + udp_address_ = lhs.udp_address_; + read_community_ = lhs.read_community_; + write_community_ = lhs.write_community_; + validity_ = lhs.validity_; + + return *this; +} + +const char *UdpTarget::to_string() +{ + ACE_OS::sprintf(output_buffer_,"UdpTarget: [ valid: %d addr: %s rd: %s wr: %s \ + ver: %d, timeout: %d, retries: %d max_pdu_size: %d]", + valid(), udp_address_.to_string(), read_community_.to_string(), + write_community_.to_string(), version_, (int) timeout_, + retries_, max_pdu_size_); + + return output_buffer_; +} + +//=============[ int operator == UdpTarget, UdpTarget ]=============== +// equivlence operator overloaded +bool operator==( const UdpTarget &lhs,const UdpTarget &rhs) +{ + // need to compare all the members of a UdpTarget + if ( lhs.read_community_ != rhs.read_community_) + return false; // != + + if ( lhs.write_community_ != rhs.write_community_) + return false; // != + + if ( lhs.udp_address_ != rhs.udp_address_) + return false; + + if ( lhs.timeout_ != rhs.timeout_) + return false; + + if ( lhs.retries_ != rhs.retries_) + return false; + + return true; // they are equal +} diff --git a/ACE/ASNMP/asnmp/target.h b/ACE/ASNMP/asnmp/target.h new file mode 100644 index 00000000000..084088e5f4f --- /dev/null +++ b/ACE/ASNMP/asnmp/target.h @@ -0,0 +1,260 @@ + + +#ifndef TARGET_ +#define TARGET_ +//============================================================================= +/** + * @file target.h + * + * $Id$ + * + * @brief + * + * @author Peter E Mellquist Michael R. MacFaden (ported to ACE) + */ +//============================================================================= + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS" without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +//----[ includes ]------------------------------------------------ +#include "ace/INET_Addr.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "asnmp/address.h" +#include "asnmp/oid.h" +#include "asnmp/octet.h" + +//----[ enumerated types for SNMP versions ]------------------------- +enum snmp_version { + version1, // 0 + version2c, // 1 (Cisco IOS does not have IOS v2c agent available yet) + version3 // 2 (IETF working on this version) +}; + +// targets contain the following default properties +enum ASNMP_Defs { + DEF_TIMEOUT = 1, // unit: seconds + DEF_RETRIES = 1, // no retry default + DEF_MAX_SNMP_PACKET = 1430, // maximum pdu len on the wire (eth mtu-ip hdr) + // split bigger pdus (not implemented yet) + DEF_AGENT_PORT = 161, // port # for SNMP agent + DEF_TRAP_PORT = 162, // port # for SNMP trap receiver + DEF_VERSION = version1, // default SNMP version + MAX_COMM_STR_LEN = 255, // max value this impl will accept from client + MAX_TARGET_STRING_REP = 2048 // max value this impl will accept from client +}; + +#define READ_COMM_STR "public" +#define WRITE_COMM_STR "private" + +// Abstract class used to provide a virtual interface into Targets +// +/** + * @class SnmpTarget + * + * @brief Abstract Base class SnmpTarget is used to Collect all transmission + * details to communicate with an SNMP + */ +class ASNMP_Export SnmpTarget +{ + public: + + /// allow destruction of derived classes + virtual ~SnmpTarget(); + + /// return validity of target + int valid() const; + + /// set the retry value + void set_retry( const int r); + + /// set the object's timeout (in seconds) + void set_timeout( const unsigned long t); + + /// set the instance version + void set_version( const snmp_version v); + + /// all classes constructed will have this write community string + void set_max_pdu_size(const unsigned long max_pdu_sz); + + /// change the "class" default default timeout (in seconds) + void set_default_timeout( const unsigned long t); + + /// change the default send retries + void set_default_retry( const int r); + + /// all classes constructed will have this write community string + void set_default_max_pdu_size(const unsigned long max_pdu_sz); + + /// change class default + void set_default_version( const snmp_version v); + + // *** get methods *** + + /// get the retry value + int get_default_retry() const; + + /// get the timeout (seconds) + unsigned long get_timeout() const; + + /// get instance max buffer size + unsigned long get_max_pdu_size() const; + + /// all classes constructed will have this write community string + void get_default_max_pdu_size(const unsigned long max_pdu_sz); + + /// get the version + snmp_version get_version() const; + + snmp_version get_default_version() const; + + /// return send retry number for this instancd + int get_retry() const; + + /** + * virtual clone operation for creating a new SnmpTarget from an existing + * SnmpTarget. The caller MUST use the delete operation on the return + * value when done. + */ + virtual SnmpTarget *clone() const = 0; + + /// manipulate the base part + friend bool operator==(const SnmpTarget& lhs, const SnmpTarget& rhs); + + SnmpTarget& operator=(const SnmpTarget& lhs); + + protected: + /// SnmpTarget(const SnmpTarget &); + SnmpTarget(); + + /// used by derived class instances + int validity_; + + /// instance value xmit timeout in milli secs + unsigned long timeout_; + + /// instance value number of retries + int retries_; + + /// size of pdu + unsigned max_pdu_size_; + + /// instance value the snmp version + snmp_version version_; + + // class wide default values + /// xmit timeout in secs + static unsigned long default_timeout_; + + /// number of retries + static int default_retries_; + + /// snmp protocol version + static unsigned long default_max_pdu_size_; + static snmp_version default_version_; +}; + +//----[ UdpTarget class ]---------------------------------------------- +// UDP/IP transport using "community string" based agents (targets) +// +/** + * @class UdpTarget + * + * @brief Concrete class UdpTarget contains all Details for communicating + * with a SNMPv1 agent over UDP/IPv4 transport + */ +class ASNMP_Export UdpTarget : public SnmpTarget +{ + public: + UdpTarget(); + + /** + * constructor with only address + * assumes default as public, public + * can be constructed with IP address object + */ + UdpTarget( const UdpAddress& udp); + + /// can be constructed with Udp address object TODO: merge addresses + UdpTarget( ACE_INET_Addr& ace_inet_addr); + + /// destructor + ~UdpTarget(); + + // ** set *** + + /// set the read community using an OctetStr + void set_read_community( const OctetStr& new_read_community); + + /// set the write community using an OctetStr + void set_write_community( const OctetStr& write_community); + + /// set the address + int set_address( UdpAddress &udp_address); + + // ** get *** + + /// get the read community as an Octet Str object + void get_read_community( OctetStr& read_community_oct) const; + + /// get the write community as an OctetStr + void get_write_community( OctetStr &write_community_oct) const; + + /// get the address + void get_address( UdpAddress& address) const; + + /// all classes constructed will have this read community string + void set_default_read_community(const OctetStr& rd_community); + + /// all classes constructed will have this write community string + void set_default_write_community(const OctetStr& wr_community); + + /// all classes constructed will have this read community string + void get_default_read_community(OctetStr& rd_community) const; + + /// all classes constructed will have this write community string + void get_default_write_community(OctetStr& wr_community) const; + + /// overloaded assignment + UdpTarget& operator=( const UdpTarget& target); + + /// compare two C targets + friend bool operator==( const UdpTarget &lhs, const UdpTarget &rhs); + + /// string representation of object + const char *to_string(); + + /// clone from existing UdpTarget + SnmpTarget *clone() const; + + protected: + static OctetStr default_rd_community_; + static OctetStr default_wr_community_; + OctetStr read_community_; + OctetStr write_community_; + UdpAddress udp_address_; + snmp_version version_; + + /// to_string() rep of data + char output_buffer_[MAX_TARGET_STRING_REP]; +}; + + +#endif //TARGET_ diff --git a/ACE/ASNMP/asnmp/timetick.cpp b/ACE/ASNMP/asnmp/timetick.cpp new file mode 100644 index 00000000000..f777b43ad64 --- /dev/null +++ b/ACE/ASNMP/asnmp/timetick.cpp @@ -0,0 +1,147 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// timetick.cpp +// +// = DESCRIPTION +// Class implentation for SMI Timeticks class. +// +// = AUTHOR +// Peter E Mellquist +// Michael R MacFaden mrm@cisco.com - rework & ACE port +// ============================================================================ +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/timetick.h" // include header file for timetick class +#include "ace/OS_NS_stdio.h" + +ACE_RCSID(asnmp, timetick, "$Id$") + +// constructor with a value +TimeTicks::TimeTicks( const unsigned long i):SnmpUInt32(i) +{ + smival.syntax = sNMP_SYNTAX_TIMETICKS; +} + +// copy constructor +TimeTicks::TimeTicks( const TimeTicks &t) + : SnmpUInt32 (t) +{ + smival.value.uNumber = t.smival.value.uNumber; + smival.syntax = sNMP_SYNTAX_TIMETICKS; +} + +// destructor +TimeTicks::~TimeTicks() +{ +} + +// syntax type +SmiUINT32 TimeTicks::get_syntax() +{ + return sNMP_SYNTAX_TIMETICKS; +} + +// create a new instance of this Value +SnmpSyntax *TimeTicks::clone() const +{ + return (SnmpSyntax *) new TimeTicks(*this); +} + +// overloaded assignement from ulong +TimeTicks& TimeTicks::operator=( const unsigned long int i) +{ + smival.value.uNumber =i; return *this; +} + +// overloaded assignment from TimeTicks +TimeTicks& TimeTicks::operator=( const TimeTicks &uli) +{ + this->smival.value.uNumber = uli.smival.value.uNumber; return *this; +} + +// general assignment from any Value +SnmpSyntax& TimeTicks::operator=( SnmpSyntax &in_val) +{ + if ( this == &in_val ) // handle assignement from itself + return *this; + + valid_flag = 0; // will get set true if really valid + if (in_val.valid()) { + switch (in_val.get_syntax()) { + case sNMP_SYNTAX_UINT32: + // case sNMP_SYNTAX_GAUGE32: .. indistinquishable from UINT32 + case sNMP_SYNTAX_CNTR32: + case sNMP_SYNTAX_TIMETICKS: + case sNMP_SYNTAX_INT32: // implied cast int -> uint + this->smival.value.uNumber = + ((TimeTicks &)in_val).smival.value.uNumber; + valid_flag = 1; + break; + } + } + return *this; +} + +// otherwise, behave like an unsigned long +TimeTicks::operator unsigned long() +{ + return smival.value.uNumber; +} + + +// ASCII format return +const char * TimeTicks::to_string() + /* Should do something nicer like days:hours:minutes... */ +{ + unsigned long tt, hseconds, seconds, minutes, hours, days; + tt = this->smival.value.uNumber; + + // days + days = tt / 8640000; + tt %= 8640000; + + // hours + hours = tt / 360000; + tt %= 360000; + + // minutes + minutes = tt / 6000; + tt %= 6000; + + seconds = tt / 100; + tt %= 100; + + hseconds = tt; + + if ( days ==0) + ACE_OS::sprintf( output_buffer,"%ld:%02ld:%02ld.%02ld", hours, + minutes,seconds,hseconds); + else if ( days==1) + ACE_OS::sprintf( output_buffer,"1 day %ld:%02ld:%02ld.%02ld", hours, + minutes,seconds,hseconds); + else + ACE_OS::sprintf( output_buffer,"%ld days, %ld:%02ld:%02ld.%02ld", + days,hours, minutes,seconds, hseconds); + + return output_buffer; +} diff --git a/ACE/ASNMP/asnmp/timetick.h b/ACE/ASNMP/asnmp/timetick.h new file mode 100644 index 00000000000..ca52a3e1d9d --- /dev/null +++ b/ACE/ASNMP/asnmp/timetick.h @@ -0,0 +1,85 @@ +/* -*-C++-*- */ +#ifndef TIMETICKS_ +#define TIMETICKS_ +//============================================================================= +/** + * @file timetick.h + * + * $Id$ + * + * Class definition for SMI Timeticks class. + * + * + * @author Michael R. MacFaden + */ +//============================================================================= + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/integer.h" + +#define TICKOUTBUF 30 // max formatted time string + +//------------[ TimeTicks Class ]----------------------------------- +// The timeticks class allows all the functionality of unsigned +// integers but is recognized as a distinct SMI type. TimeTicks +// objects may be get or set into Vb objects. +// +/** + * @class TimeTicks + * + * @brief Define RFC1155 TimeTicks Data object + */ +class ASNMP_Export TimeTicks : public SnmpUInt32 + +{ + + public: + TimeTicks( const unsigned long i = 0); + + /// copy constructor + TimeTicks( const TimeTicks &t); + + /// destructor + ~TimeTicks(); + + /// syntax type + SmiUINT32 get_syntax(); + + /// get a printable ASCII value + const char *to_string(); + + /// create a new instance of this Value + SnmpSyntax *clone() const; + + /// copy an instance of this Value + SnmpSyntax& operator=(SnmpSyntax &val); + + /// overloaded assignment + TimeTicks& operator=( const TimeTicks &uli); + + /// overloaded assignment + TimeTicks& operator=( const unsigned long int i); + + /// otherwise, behave like an unsigned long + operator unsigned long(); + + protected: + /// for storing printed form + char output_buffer[TICKOUTBUF]; +}; +#endif // TIMETICKS_ diff --git a/ACE/ASNMP/asnmp/transaction.cpp b/ACE/ASNMP/asnmp/transaction.cpp new file mode 100644 index 00000000000..de3afcf8a36 --- /dev/null +++ b/ACE/ASNMP/asnmp/transaction.cpp @@ -0,0 +1,207 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// transaction.cpp +// +// = DESCRIPTION +// implements blocking SNMPv1 API using a simple state machine +// transactions over UDP/IP networks +// +// = AUTHOR +// Michael R MacFaden mrm@cisco.com - remove v2c, async, rework for ACE +// ============================================================================ + +#include "ace/Reactor.h" +#include "asnmp/transaction.h" +#include "ace/OS_NS_string.h" + +ACE_RCSID(asnmp, transaction, "$Id$") + +// pre: pdu, target report valid() == 1 +// post: pdu sent out over the wire +inline void reset_receive_buffer(iovec& io) +{ + io.iov_base = 0; + io.iov_len = 0; +} + +transaction::transaction(const Pdu& pdu, const UdpTarget& target, + ACE_SOCK_Dgram& io): + result_(0), + wp_(pdu,target), params_(target), session_(io) +{ + // last step, convert address (get ride of this once we have merged address + UdpAddress udp; + target.get_address(udp); + // via string conversion "dotted-quad:port" + ACE_INET_Addr tmp(udp); + addr_ = tmp; + reset_receive_buffer(receive_iovec_); +} + +transaction::~transaction() +{ + ACE_Reactor::instance()->remove_handler(this, READ_MASK | DONT_CALL); + ACE_Reactor::instance()->cancel_timer(this); + + delete [] (char *) receive_iovec_.iov_base; +} + +// implement state machine, send, wait (timeout/results) return +int transaction::run() +{ + int rc, done = 0; + int retry_counter = 0; + ACE_Time_Value to(params_.get_timeout(), 0); // seconds + ACE_Reactor *reactor = ACE_Reactor::instance (); + + // 1. register io port for read access + if (reactor->register_handler(session_.get_handle(), this, + ACE_Event_Handler::READ_MASK) == -1) + return SNMP_CLASS_INTERNAL_ERROR; + + // register a time handler and a socket with this + + while (!done) { + + if ((rc = this->send()) < 0) // send pkt to agent + return rc; + else { + if (retry_counter++ > params_.get_retry()) + return SNMP_CLASS_TIMEOUT; + } + + // 2. wait for events (timeout, returned msg) + if (( rc = reactor->handle_events (to)) == 1) // one handler registered + return 0; + else { + if (rc == 0) { + to.set(params_.get_timeout(), 0); + } + else + return SNMP_CLASS_INTERNAL_ERROR; + } + } + return SNMP_CLASS_INTERNAL_ERROR; +} + +// implement state machine, send, wait (timeout/results) return +int transaction::run(transaction_result * r) +{ + result_ = r; + int rc; + + // 1. register io port for read access + ACE_Reactor * reactor = ACE_Reactor::instance(); + if (reactor->register_handler(session_.get_handle(), + this, + READ_MASK) == -1) + return SNMP_CLASS_INTERNAL_ERROR; + + retry_counter_ = 0; + + // register a time handler and a socket with this + ACE_Time_Value to (params_.get_timeout()); + if (reactor->schedule_timer(this, 0, to, to) < 0) + return SNMP_CLASS_INTERNAL_ERROR; + + if ((rc = this->send()) < 0) // send pkt to agent + return rc; + return 0; +} + +// got back response from SNMPv1 agent - process it +int transaction::handle_input (ACE_HANDLE) +{ + // OS allocates iovec_.iov_base ptr and len + delete [] (char*) receive_iovec_.iov_base; + reset_receive_buffer(receive_iovec_); + int rc = session_.recv(&receive_iovec_, receive_addr_, 0); + if (rc == -1) + { + delete [] (char*) receive_iovec_.iov_base; + reset_receive_buffer(receive_iovec_); + if (result_) + result_->result(this, SNMP_CLASS_RESOURCE_UNAVAIL); + return SNMP_CLASS_RESOURCE_UNAVAIL; + } + if (result_) + result_->result(this, rc); + + return 0; +} + +int transaction::handle_timeout(const ACE_Time_Value &, + const void *) +{ + if (this->send() < 0) // send pkt to agent + result_->result(this, 0); + else + if (retry_counter_++ > params_.get_retry()) + result_->result(this, SNMP_CLASS_TIMEOUT); + + return 0; +} + + +const ACE_INET_Addr& transaction::get_from_addr() const +{ + return receive_addr_; +} + + +// return pdu to caller +int transaction::result(Pdu& pdu, char *comm_str, ACE_INET_Addr *from) +{ + // TODO: check to see the sender matches the receiver address.. + + // remove any vbs existing in this pdu + pdu.delete_all_vbs(); + + // any data to return? + if (receive_iovec_.iov_len == 0) + return -1; + + wpdu tmp(receive_iovec_); + + snmp_version ver; + + // return comm str and from address of incomming pdu if requested + int rc = tmp.get_pdu(pdu, ver); + if (comm_str) + ACE_OS::strcpy(comm_str, (char *)tmp.get_community()); + if (from) + *from = receive_addr_; + return rc; +} + +transaction::transaction(ACE_SOCK_Dgram& io) +: result_(0), session_(io) +{ + reset_receive_buffer(receive_iovec_); +} + + +int transaction::send() +{ + iovec io = wp_.get_buffer(); + if (io.iov_len == 0) { + // NO DATA ? + return -1; + } + ssize_t rc = session_.send (io.iov_base, io.iov_len, addr_ , 0); + return rc; +} + +transaction_result::~transaction_result() {} + +ACE_HANDLE +transaction::get_handle () const +{ + return session_.get_handle (); +} diff --git a/ACE/ASNMP/asnmp/transaction.h b/ACE/ASNMP/asnmp/transaction.h new file mode 100644 index 00000000000..d114bd40d1f --- /dev/null +++ b/ACE/ASNMP/asnmp/transaction.h @@ -0,0 +1,83 @@ +/* -*-C++-*- */ +#ifndef TRANSACTION_ +#define TRANSACTION_ +//============================================================================= +/** + * @file transaction.h + * + * $Id$ + * + * @brief + * + * @author Michael R. MacFaden port to ACE / use Reactor pattern + */ +//============================================================================= + + +#include "ace/Event_Handler.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "asnmp/target.h" +#include "asnmp/pdu.h" +#include "asnmp/transaction_result.h" +#include "asnmp/wpdu.h" // cmu adapter class +#include "ace/SOCK_Dgram.h" + +/** + * @class transaction + * + * @brief Used to manage the details of a particular transaction betwen + * two SNMP agents. Uses SnmpTarget class to implement retry/timeout + */ +class ASNMP_Export transaction : public ACE_Event_Handler + +{ + int retry_counter_; + transaction_result * result_; + +public: + /// constructor + /// destructor + transaction(const Pdu& pdu, const UdpTarget& target, ACE_SOCK_Dgram& io); + transaction(ACE_SOCK_Dgram& io); + ~transaction(); + + /// begin polling for values + int run(); + int run(transaction_result *r); // Async interface, with callback object + + /// return pdu with result from agent after run() is completed rc = 0 + /// optionally get community str + int result(Pdu& pdu, char *comm_str = 0, ACE_INET_Addr *from_addr = 0); + + /// called by reactor when data is ready to be read in from OS memory + /// used for resend in asynchronous run() + virtual int handle_input (ACE_HANDLE fd); + virtual int handle_timeout (const ACE_Time_Value &, const void *); + + /// transmit buffer command to network... + int send(); + + /// pre: handle_input called + /// retrieve the sender's from address from the last pkt + const ACE_INET_Addr& get_from_addr() const; + + /// Return session_ handle. + ACE_HANDLE get_handle () const; + +private: + /// disallow copy construction + transaction(const transaction&); + + wpdu wp_; // wire pdu + UdpTarget params_; // params + ACE_INET_Addr addr_; // to address + ACE_SOCK_Dgram session_; // io object + iovec receive_iovec_; // receive buffer + ACE_INET_Addr receive_addr_; // from address +}; + +#endif // TRANSACTION_ diff --git a/ACE/ASNMP/asnmp/transaction_result.h b/ACE/ASNMP/asnmp/transaction_result.h new file mode 100644 index 00000000000..9ea94c60e8e --- /dev/null +++ b/ACE/ASNMP/asnmp/transaction_result.h @@ -0,0 +1,26 @@ +/* -*-C++-*- */ +#ifndef TRANSACTION_RESULT_H_ +#define TRANSACTION_RESULT_H_ +//============================================================================= +/** + * @file transaction_result.h + * + * $Id$ + * + * An object respresenting a request/reply operation between mgr/agent + * + * + * @author Michael R. MacFaden + */ +//============================================================================= + + +class transaction; +class ASNMP_Export transaction_result +{ + public: + virtual ~transaction_result(); + virtual void result(transaction * trans, int) = 0; +}; + +#endif diff --git a/ACE/ASNMP/asnmp/vb.cpp b/ACE/ASNMP/asnmp/vb.cpp new file mode 100644 index 00000000000..4e94b5e81b9 --- /dev/null +++ b/ACE/ASNMP/asnmp/vb.cpp @@ -0,0 +1,399 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// vb.h +// +// = DESCRIPTION +// The Vb class is an encapsulation of the snmp variable binding. +// This module contains the class definition for the variable binding (VB) +// class. The VB class is an encapsulation of a SNMP VB. A VB object is +// composed of one SNMP++ Oid and one SMI value. The Vb class utilizes Oid +// objects and thus requires the Oid class. To use this class, +// set oid, value then call valid() to be sure object was constructed correctly. +// +// = AUTHOR +// Peter E Mellquist +// Michael R MacFaden mrm@cisco.com - rework & ACE port +// ============================================================================ +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/oid.h" // include oid class defs +#include "asnmp/vb.h" // include vb class defs +#include "asnmp/snmperrs.h" // error codes +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_Memory.h" + +ACE_RCSID(asnmp, vb, "$Id$") + +//---------------[ Vb::Vb( void) ]-------------------------------------- +// constructor with no arguments +// makes an vb, unitialized +Vb::Vb( void): output_(0), iv_vb_value_(0), + exception_status_(SNMP_CLASS_SUCCESS) +{ +} + +//---------------[ Vb::Vb( const Oid &oid) ]----------------------------- +// constructor to initialize the oid +// makes a vb with oid portion initialized +Vb::Vb( const Oid &oid): output_(0), iv_vb_oid_(oid), iv_vb_value_(0), + exception_status_(SNMP_CLASS_SUCCESS) +{ +} + +//---------------[ Vb::Vb( const Oid &oid, const SmiSyntax &val) ]------- +Vb::Vb( const Oid &oid, const SnmpSyntax &val, const SmiUINT32 status): + output_(0), iv_vb_oid_(oid), iv_vb_value_(0), exception_status_(status) +{ + // iv_vb_value_ = recast_smi_object(val); // allocate and construct object + iv_vb_value_ = val.clone(); +} + +//---------------[ Vb::Vb( const Vb &vb) ]----------------------------- +// copy constructor +Vb::Vb( const Vb &vb): output_(0), iv_vb_value_(0) +{ + *this = vb; +} + +//---------------[ Vb::~Vb() ]------------------------------------------ +// destructor +// if the vb has a oid or an octect string then +// the associated memory needs to be freed +Vb::~Vb() +{ + free_vb(); + delete [] output_; // formatting buffer if it exists +} + + +//--------------[ Vb::valid() ]----------------------------------------- +// returns validity of a Vb object +// must have a valid oid and value +int Vb::valid() const +{ + if ( iv_vb_oid_.valid() && (iv_vb_value_ && iv_vb_value_->valid()) ) + return 1; + else + return 0; +} + + +//---------------[ Vb& Vb::operator=( const Vb &vb) ]-------------------- +// overloaded assignment allows assigning one Vb to another +// this involves deep memory thus target vb needs to be freed +// before assigning source +Vb& Vb::operator=( const Vb &vb) +{ + free_vb(); // free up target to begin with + + //-----[ reassign the Oid portion 1st ] + vb.get_oid( iv_vb_oid_); + + //-----[ next set the vb value portion ] + if (vb.iv_vb_value_ == 0) { + iv_vb_value_ = 0; + } + else { + iv_vb_value_ = vb.iv_vb_value_->clone(); + } + exception_status_ = vb.exception_status_; + + return *this; // return self reference +} + + // set a Vb null, if its not already +void Vb::set_null() +{ + free_vb(); +} + +//---------------[ Vb::set_oid( const Oid oid ) ]----------------------- +// set value oid only with another oid +void Vb::set_oid( const Oid& oid) +{ + iv_vb_oid_ = oid; +} + +//---------------[ Vb::get_oid( Oid &oid) ]----------------------------- +// get oid portion +void Vb::get_oid( Oid &oid) const +{ + oid = iv_vb_oid_; +} + +//----------------[ void Vb::free_vb() ]-------------------------------- +// protected method to free memory +// this methos is used to free memory when assigning new vbs +// or destructing +// in the case of oids and octets, we need to do a deep free +void Vb::free_vb() +{ + if (iv_vb_value_) + delete iv_vb_value_; + exception_status_ = SNMP_CLASS_SUCCESS; + iv_vb_value_ = 0; +} + +void Vb::set_value( const SnmpInt32& i) +{ + free_vb(); + iv_vb_value_ = (SnmpSyntax *)new SnmpInt32(i); +} + +void Vb::set_value( const SnmpUInt32& u) +{ + free_vb(); + iv_vb_value_ = (SnmpSyntax *)new SnmpUInt32(u); +} + +void Vb::set_value( const Gauge32& g) +{ + free_vb(); + iv_vb_value_ = (SnmpSyntax *)new Gauge32(g); +} + +void Vb::set_value( const Counter32& c) +{ + free_vb(); + iv_vb_value_ = (SnmpSyntax *)new Counter32(c); +} + +void Vb::set_value( const Counter64& c) +{ + free_vb(); + iv_vb_value_ = (SnmpSyntax *)new Counter64(c); +} + +void Vb::set_value( const TimeTicks& t) +{ + free_vb(); + iv_vb_value_ = (SnmpSyntax *)new TimeTicks(t); +} + +void Vb::set_value( const OctetStr& s) +{ + free_vb(); + iv_vb_value_ = (SnmpSyntax *)new OctetStr(s); +} + +void Vb::set_value( const Oid& o) +{ + free_vb(); + iv_vb_value_ = (SnmpSyntax *)new Oid(o); +} + +void Vb::set_value ( const SnmpSyntax &val) +{ + free_vb(); + iv_vb_value_ = val.clone(); +} + +int Vb::get_value( SnmpInt32 &i) +{ + if (iv_vb_value_ && + iv_vb_value_->valid() && + (iv_vb_value_->get_syntax() == sNMP_SYNTAX_INT32 )) { + i = *((SnmpInt32 *) iv_vb_value_); + return SNMP_CLASS_SUCCESS; + } + else + return SNMP_CLASS_INVALID; +} + +int Vb::get_value( SnmpUInt32 &u) +{ + if (iv_vb_value_ && iv_vb_value_->valid()) + { + SmiUINT32 syntax = iv_vb_value_->get_syntax(); + if (syntax == sNMP_SYNTAX_GAUGE32 || + syntax == sNMP_SYNTAX_CNTR32 || + syntax == sNMP_SYNTAX_TIMETICKS || + syntax == sNMP_SYNTAX_UINT32) + { + u = *((SnmpUInt32 *) iv_vb_value_); + return SNMP_CLASS_SUCCESS; + } + } + return SNMP_CLASS_INVALID; +} + +/* return a uint or a gauge. this is casting, but no semantic difference + * at this level + */ +int Vb::get_value( Gauge32 &g) +{ + if (iv_vb_value_ && + iv_vb_value_->valid() && + ((iv_vb_value_->get_syntax() == sNMP_SYNTAX_GAUGE32) || + iv_vb_value_->get_syntax() == sNMP_SYNTAX_UINT32) ) { + g = *((Gauge32 *) iv_vb_value_); + return SNMP_CLASS_SUCCESS; + } + else + return SNMP_CLASS_INVALID; +} + +int Vb::get_value( Counter32 &c) +{ + if (iv_vb_value_ && + iv_vb_value_->valid() && + (iv_vb_value_->get_syntax() == sNMP_SYNTAX_CNTR32 )) { + c = *((Counter32 *) iv_vb_value_); + return SNMP_CLASS_SUCCESS; + } + else + return SNMP_CLASS_INVALID; +} + +int Vb::get_value( Counter64 &c) +{ + if (iv_vb_value_ && + iv_vb_value_->valid() && + (iv_vb_value_->get_syntax() == sNMP_SYNTAX_CNTR64 )) { + c = *((Counter32 *) iv_vb_value_); + return SNMP_CLASS_SUCCESS; + } + else + return SNMP_CLASS_INVALID; +} + +int Vb::get_value( TimeTicks &t) +{ + if (iv_vb_value_ && + iv_vb_value_->valid() && + (iv_vb_value_->get_syntax() == sNMP_SYNTAX_TIMETICKS )) { + t = *((TimeTicks *) iv_vb_value_); + return SNMP_CLASS_SUCCESS; + } + else + return SNMP_CLASS_INVALID; +} + +int Vb::get_value( OctetStr &s) +{ + if (iv_vb_value_ && + iv_vb_value_->valid() && + (iv_vb_value_->get_syntax() == sNMP_SYNTAX_OCTETS )) { + s = *((OctetStr *) iv_vb_value_); + return SNMP_CLASS_SUCCESS; + } + else + return SNMP_CLASS_INVALID; +} + +int Vb::get_value( Oid &s) +{ + if (iv_vb_value_ && + iv_vb_value_->valid() && + (iv_vb_value_->get_syntax() == sNMP_SYNTAX_OID )) { + s = *((Oid *) iv_vb_value_); + return SNMP_CLASS_SUCCESS; + } + else + return SNMP_CLASS_INVALID; +} + + +//---------------[ Vb::get_value( Value &val) ]-------- +int Vb::get_value( SnmpSyntax &val) +{ + if (iv_vb_value_) { + val = *iv_vb_value_; + if (val.valid()) + return SNMP_CLASS_SUCCESS; + else + return SNMP_CLASS_INVALID; + } + else + { +//TM: should set val to be invalid + return SNMP_CLASS_INVALID; + } +} + + + +//-----[ misc]-------------------------------------------------------- + +// return the current syntax +// This method violates Object Orientation but may be useful if +// the caller has a vb object and does not know what it is. +// This would be useful in the implementation of a browser. +SmiUINT32 Vb::get_syntax() +{ + if ( exception_status_ != SNMP_CLASS_SUCCESS) + return exception_status_; + else + return ( iv_vb_value_ ? iv_vb_value_->get_syntax() : sNMP_SYNTAX_NULL); +} + +// return the printabel value +const char *Vb::to_string_value() +{ + if (iv_vb_value_) + return iv_vb_value_->to_string(); + else + return ""; +} + +// return the printable oid +const char *Vb::to_string_oid() +{ + return iv_vb_oid_.to_string(); +} + +// generate string with name/ value format +const char *Vb::to_string() +{ + int len = ACE_OS::strlen(iv_vb_oid_.to_string()); + const char *ptr = iv_vb_value_ ? iv_vb_value_->to_string() : ""; + len += ACE_OS::strlen(ptr) + 3 + 1; // " / " + null + ACE_NEW_RETURN(output_, char[len], ""); + ACE_OS::sprintf(output_, "%s / %s", iv_vb_oid_.to_string(), ptr); + return output_; +} + +// friend function to set exception status +void set_exception_status( Vb *vb, const SmiUINT32 status) +{ + vb->exception_status_ = status; +} + +// equivlence operator overloaded +// hack, by side effect, compare based on string formatting output_ +bool operator==( const Vb &lhs, const Vb &rhs) +{ + if ( lhs.iv_vb_oid_ != rhs.iv_vb_oid_) + return false; + + if (lhs.iv_vb_value_ != 0 && rhs.iv_vb_value_ != 0) + { + const int val = + ACE_OS::strcmp (lhs.iv_vb_value_->to_string(), + rhs.iv_vb_value_->to_string()); + return !val; + } + else + return false; +} diff --git a/ACE/ASNMP/asnmp/vb.h b/ACE/ASNMP/asnmp/vb.h new file mode 100644 index 00000000000..b82adb2bc0e --- /dev/null +++ b/ACE/ASNMP/asnmp/vb.h @@ -0,0 +1,207 @@ + + +#ifndef VB_CLS_ +#define VB_CLS_ +//============================================================================= +/** + * @file vb.h + * + * $Id$ + * + * This module contains the class definition for the variable binding (VB) + * class. The VB class is an encapsulation of a SNMP VB. A VB object is + * composed of one SNMP++ Oid and one SMI value. The Vb class utilizes Oid + * objects and thus requires the Oid class. To use this class, + * set oid, value then call valid() to be sure object was constructed correctly. + * + * + * @author Peter E Mellquist + */ +//============================================================================= + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +//----[ external calls ]---------------------------------------------- +#include "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "asnmp/smival.h" +#include "asnmp/snmperrs.h" // V2c error def +#include "asnmp/oid.h" // oid class def +#include "asnmp/timetick.h" // time ticks +#include "asnmp/counter.h" // counter +#include "asnmp/gauge.h" // gauge class +#include "asnmp/ctr64.h" // 64 bit counters +#include "asnmp/octet.h" // octet class +#include "asnmp/address.h" // address class def +#include "asnmp/integer.h" // integer class + + +//------------[ VB Class Def ]------------------------------------- +// The Vb class is the encapsulation of the SNMP variable binding. +// Variable binding lists in SNMP++ are represented as arrays of +// Vb objects. Vb objects are passed to and from SNMP objects to +// provide getting or setting MIB values. +// The vb class keeps its own memory for objects and does not +// utilize pointers to external data structures. +// +/** + * @class Vb + * + * @brief Implement the concrete Variable Bindings aka Varbind + * composite type. Varbinds hold 1 Oid and 1 Value (Any SMI value) + */ +class ASNMP_Export Vb +{ +public: + /// constructor with no arguments + /// makes an vb, unitialized (does not make object valid) + Vb( void); + + /// constructor to initialize the oid + /// makes a vb with oid portion initialized (does not make object valid) + Vb( const Oid &oid); + + /// constructor to initialize the oid + /// makes a vb with oid portion and value portion initialized, (valid) + Vb( const Oid& vb, const SnmpSyntax &val, const SmiUINT32=SNMP_CLASS_SUCCESS); + + /// copy constructor + Vb( const Vb &vb); + + /** + * destructor + * if the vb has a oid or an octect string then + * the associated memory needs to be freed + */ + ~Vb(); + + /// return validity of Vb object (both oid and value set return 1 else 0) + int valid() const; + + /// assignment to another Vb object overloaded + Vb& operator=( const Vb &vb); + + /// equivlence operator overloaded + friend ASNMP_Export bool operator==( const Vb &lhs, const Vb &rhs); + + //-----[ set oid / get oid part]------------------------------------------ + + /// set value oid only with another oid + void set_oid( const Oid& oid); + + /// get oid portion + void get_oid( Oid &oid) const; + + //-----[ set value part]-------------------------------------------------- + + /// set a Vb null, if its not already + void set_null(); + + /// returns 0 on success and a value + void set_value( const TimeTicks& ticks); + + /// returns 0 on success and a value + void set_value( const Oid& oid); + + /// returns 0 on success and a value + void set_value( const Counter32& ctr); + + /// returns 0 on success and a value + void set_value( const Counter64& ctr); + + /// returns 0 on success and a value + void set_value( const Gauge32& ctr); + + /// returns 0 on success and a value + void set_value( const SnmpUInt32& ctr); + + /// returns 0 on success and a value + void set_value( const SnmpInt32& ctr); + + /// get an octet string object + void set_value( const OctetStr& oct_str); + + //----[ get value ]------------------------------------------------ + + /// returns 0 on success and a value + int get_value( TimeTicks& ticks); + + /// returns 0 on success and a value + int get_value( Oid& oid); + + /// returns 0 on success and a value + int get_value( Counter32& ctr); + + /// returns 0 on success and a value + int get_value( Counter64& ctr); + + /// returns 0 on success and a value + int get_value( Gauge32& ctr); + + /// returns 0 on success and a value + int get_value( SnmpUInt32& ctr); + + /// returns 0 on success and a value + int get_value( SnmpInt32& ctr); + + /// get an octet string object + int get_value( OctetStr& oct_str); + + // escape hatch + /// for other derived types that can be casted + void set_value( const SnmpSyntax &val); + + /// gets a general value + int get_value( SnmpSyntax &val); + + /// return the current syntax + /// Or.. if a V2 VB exception is present then return the exception value + SmiUINT32 get_syntax(); + + /// set the exception status + friend ASNMP_Export void set_exception_status( Vb *vb, const SmiUINT32 status); + + /// return fomatted version of this object + const char *to_string(); + + /// returns a formatted version of the value + const char *to_string_value(); + + /// returns a formatted version of the value + const char *to_string_oid(); + +protected: + /// display vb as [ oid / value ] + char *output_; + + /// a vb is made up of a oid + Oid iv_vb_oid_; + + /// and a value... + SnmpSyntax *iv_vb_value_; + + /// are there any vb exceptions?? + SmiUINT32 exception_status_; + + void free_vb(); +}; + +#endif // VB_CLS_ diff --git a/ACE/ASNMP/asnmp/wpdu.cpp b/ACE/ASNMP/asnmp/wpdu.cpp new file mode 100644 index 00000000000..e99ab66821e --- /dev/null +++ b/ACE/ASNMP/asnmp/wpdu.cpp @@ -0,0 +1,523 @@ +// $Id$ + +// ============================================================================ +// = LIBRARY +// asnmp +// +// = FILENAME +// wpdu.cpp +// +// = DESCRIPTION +// Adapter class. Converts between raw wire format and Pdu objects +// that can be stuffed out a I/O port or reconstructed +// +// = AUTHOR +// Michael R. MacFaden rework the class api and impl using ACE +// Peter E Mellquist implementation/code from snmp++ snmpmsg class +// +// ============================================================================ + +#include "asnmp/wpdu.h" +#include "ace/Log_Msg.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_stdio.h" + +#define DEFINE_TRAP_CONSTANTS_ +#include "asnmp/enttraps.h" + +ACE_RCSID(asnmp, wpdu, "$Id$") + +#define MAX_COMM_STR_LEN 255 +#define V1_COLD_START 0 +#define V1_WARM_START 1 +#define V1_LINK_DOWN 2 +#define V1_LINK_UP 3 +#define V1_AUTH_FAILURE 4 +#define V1_EGP_NEIGHBOR_LOSS 5 +#define V1_ENT_SPECIFIC 6 + +inline +void reset_iov(iovec& iov) +{ + iov.iov_base = 0; + iov.iov_len = 0; +} + +wpdu::wpdu(const Pdu& pdu, const UdpTarget& target): + valid_flag_(SNMP_CLASS_INVALID ), comm_len(MAX_COMM_STR_LEN) +{ + reset_iov(iovec_); + version_ = target.get_version(); + int status; + OctetStr comm_str; + + community_name[0] = 0; + + snmp_pdu *raw_pdu; // create a raw pdu + raw_pdu = cmu_snmp::pdu_create( (int) pdu.get_type()); + if (!raw_pdu) { + valid_flag_ = SNMP_CLASS_RESOURCE_UNAVAIL; + return; + } + + raw_pdu->reqid = pdu.get_request_id(); + raw_pdu->errstat= (unsigned long) pdu.get_error_status(); + raw_pdu->errindex= (unsigned long) pdu.get_error_index(); + + switch (raw_pdu->command) { + case sNMP_PDU_GET: + case sNMP_PDU_GETNEXT: + target.get_read_community(comm_str); + break; + + case sNMP_PDU_SET: + target.get_write_community(comm_str); + break; + + case sNMP_PDU_V1TRAP: + target.get_read_community(comm_str); + if (set_trap_info(raw_pdu, pdu)) // will free raw_pdu + return; + break; + case sNMP_PDU_RESPONSE: + break; + + default: + ACE_ASSERT(0); + return; + } + + if (load_vbs(raw_pdu, pdu)) { + cmu_snmp::free_pdu( raw_pdu); + valid_flag_ = SNMP_CLASS_RESOURCE_UNAVAIL; + return; + } + + // TODO: determine how big raw_pdu serializes out to + iovec_.iov_len = target.get_max_pdu_size(); + ACE_NEW(iovec_.iov_base, char [iovec_.iov_len]); + + // create raw byte stream + status = cmu_snmp::build( raw_pdu, + (unsigned char *)iovec_.iov_base, + (int *) &iovec_.iov_len, + target.get_version(), + comm_str.data(), + comm_str.length()); + if ( status != 0) { + valid_flag_ = SNMP_ERROR_WRONG_ENCODING; + cmu_snmp::free_pdu( raw_pdu); + return; + } + + cmu_snmp::free_pdu( raw_pdu); + valid_flag_ = SNMP_CLASS_SUCCESS; +} + +int wpdu::set_trap_info(snmp_pdu *raw_pdu, const Pdu& pdu) const +{ + Oid enterprise; + Oid trapid; // validate caller has set this correctly + pdu.get_notify_id( trapid); + if ( !trapid.valid() || trapid.length() < 2 ) { + cmu_snmp::free_pdu( raw_pdu); + return SNMP_CLASS_INVALID_NOTIFYID; + } + + + raw_pdu->specific_type=0; + + // TODO: object should emit numeric instead of this kind of mess... + if ( trapid == coldStart) + raw_pdu->trap_type = V1_COLD_START; // cold start + else if ( trapid == warmStart) + raw_pdu->trap_type = V1_WARM_START; // warm start + else if( trapid == linkDown) + raw_pdu->trap_type = V1_LINK_DOWN; // link down + else if ( trapid == linkUp) + raw_pdu->trap_type = V1_LINK_UP; // link up + else if ( trapid == authenticationFailure ) + raw_pdu->trap_type = V1_AUTH_FAILURE; // authentication failure + else if ( trapid == egpNeighborLoss) + raw_pdu->trap_type = V1_EGP_NEIGHBOR_LOSS; // egp neighbor loss + else { + raw_pdu->trap_type = V1_ENT_SPECIFIC; // enterprise specific + // last oid subid is the specific value + // if 2nd to last subid is "0", remove it + // enterprise is always the notify oid prefix + raw_pdu->specific_type = (int) trapid[(int) (trapid.length() - 1)]; + trapid.trim(1); + if ( trapid[(int)(trapid.length() - 1)] == 0 ) + trapid.trim(1); + enterprise = trapid; + } + + if ( raw_pdu->trap_type != V1_ENT_SPECIFIC) + pdu.get_notify_enterprise( enterprise); + if ( enterprise.length() > 0) { + // note!! To the contrary, enterprise OID val is + // copied here and raw_pdu->enterprise is freed in free_pdu + // as it should be (HDN) + // these are hooks into an SNMP++ oid + // and therefor the raw_pdu enterprise + // should not free them. null them out!! + SmiLPOID rawOid; + rawOid = enterprise.oidval(); + // HDN - enterprise is a local object, cannot simply assign pointer + //raw_pdu->enterprise = rawOid->ptr; + raw_pdu->enterprise_length = (int) rawOid->len; + ACE_NEW_RETURN(raw_pdu->enterprise, + oid[raw_pdu->enterprise_length],-1); + ACE_OS::memcpy((char *)raw_pdu->enterprise,(char *)rawOid->ptr, + raw_pdu->enterprise_length * sizeof(oid)); + } + + TimeTicks timestamp; + pdu.get_notify_timestamp( timestamp); + raw_pdu->time = ( unsigned long) timestamp; + + // HDN - set agent addr using the local hostname if possible + char localHostName[MAXHOSTNAMELEN]; + Snmp::get_host_name(localHostName, MAXHOSTNAMELEN); + if (ACE_OS::strlen(localHostName) > 0) { + GenAddress addr(localHostName); + OctetStr octet; + addr.to_octet(octet); + ACE_OS::memcpy(&(raw_pdu->agent_addr.sin_addr), + octet.data(), + octet.length()); + } + + return 0; +} + +wpdu::wpdu(const iovec& iov): valid_flag_(0),comm_len(MAX_COMM_STR_LEN) +{ + community_name[0] = 0; + reset_iov(iovec_); + version_ = version1; // TODO: figure where this should come from + ACE_NEW(iovec_.iov_base, char[iov.iov_len]); + if (!iovec_.iov_base) { + valid_flag_ = SNMP_CLASS_RESOURCE_UNAVAIL; + return; + } + + copy_iovec(iovec_, iov); + valid_flag_ = SNMP_CLASS_SUCCESS; +} + +wpdu::wpdu(): valid_flag_(0), comm_len(MAX_COMM_STR_LEN) +{ + community_name[0] = 0; + reset_iov(iovec_); + version_ = version1; // TODO: figure where this should come from +} + +int wpdu::valid() const +{ + return (valid_flag_ == SNMP_CLASS_SUCCESS); +} + +int wpdu::load_vbs(snmp_pdu *raw_pdu, const Pdu& pdu) +{ + int status = 0; + + // load up the payload + // for all Vbs in list, add them to the pdu + int vb_count; + Vb tempvb; + Oid tempoid; + SmiLPOID smioid; + SmiVALUE smival; + + vb_count = pdu.get_vb_count(); + + for (int z = 0; z < vb_count; z++) { + pdu.get_vb( tempvb, z); + tempvb.get_oid( tempoid); + smioid = tempoid.oidval(); + // what are we trying to convert here (vb oid part or value part) + status = convert_vb_to_smival( tempvb, &smival ); + if ( status != SNMP_CLASS_SUCCESS) + return status; + + // add the var to the raw pdu + cmu_snmp::add_var(raw_pdu, smioid->ptr, (int) smioid->len, &smival); + free_smival_descriptor( &smival); + } + + return status; +} + +// supports overlapped copies +// static +void wpdu::copy_iovec(iovec& dest, const iovec& src) +{ + if (&dest == &src) + return; + + ACE_OS::memmove( dest.iov_base, src.iov_base, src.iov_len); + dest.iov_len = src.iov_len; +} + +int wpdu::convert_vb_to_smival( Vb &tempvb, SmiVALUE *smival ) +{ + smival->syntax = tempvb.get_syntax(); + + switch ( smival->syntax ) { + + case sNMP_SYNTAX_NULL: + break; + + // case sNMP_SYNTAX_INT32: + case sNMP_SYNTAX_INT: + { + SnmpInt32 tmp; + tempvb.get_value(tmp); + smival->value.sNumber = tmp; + } + break; + + // case sNMP_SYNTAX_UINT32: + case sNMP_SYNTAX_GAUGE32: + case sNMP_SYNTAX_CNTR32: + case sNMP_SYNTAX_TIMETICKS: + { + SnmpUInt32 tmp; + tempvb.get_value(tmp); + smival->value.uNumber = tmp; + } + break; + + // case Counter64 + case sNMP_SYNTAX_CNTR64: + { + Counter64 c64; + tempvb.get_value(c64); + smival->value.hNumber.hipart = c64.high(); + smival->value.hNumber.lopart = c64.low(); + } + break; + + // OID syntax + case sNMP_SYNTAX_OID: + { + Oid tmpoid; + tmpoid.oidval(); + tempvb.get_value(tmpoid); + SmiLPOID smi = tmpoid.oidval(); + smival->value.oid.len = tmpoid.length(); + ACE_NEW_RETURN(smival->value.oid.ptr, + SmiUINT32 [smival->value.oid.len], 1); + ACE_OS::memcpy(smival->value.oid.ptr, smi->ptr, + smival->value.oid.len *sizeof(SmiUINT32)); + } + break; + + case sNMP_SYNTAX_BITS: + case sNMP_SYNTAX_OCTETS: + case sNMP_SYNTAX_IPADDR: + { + OctetStr os; + tempvb.get_value(os); + smival->value.string.ptr = 0; + smival->value.string.len = os.length(); + if ( smival->value.string.len > 0 ) { + ACE_NEW_RETURN(smival->value.string.ptr, + SmiBYTE [smival->value.string.len], 1); + if ( smival->value.string.ptr ) { + for (int i=0; i<(int) smival->value.string.len ; i++) + smival->value.string.ptr[i] = os[i]; + } + else { + smival->syntax = sNMP_SYNTAX_NULL; // invalidate the smival + return SNMP_CLASS_RESOURCE_UNAVAIL; + } + } + } + break; + + default: + ACE_DEBUG((LM_DEBUG, "wpdu::convert_vb_to_smival did not convert vb\n")); + // ACE_ASSERT(0); + } // switch + + return 0; +} + +// free a SMI value +void wpdu::free_smival_descriptor( SmiVALUE *smival ) +{ + switch ( smival->syntax ) { + case sNMP_SYNTAX_OCTETS: + case sNMP_SYNTAX_OPAQUE: + case sNMP_SYNTAX_IPADDR: + case sNMP_SYNTAX_BITS: // obsoleted in SNMPv2 Draft Std + delete [] smival->value.string.ptr; + break; + + case sNMP_SYNTAX_OID: + delete [] smival->value.oid.ptr; + break; + } + smival->syntax = sNMP_SYNTAX_NULL; +} + + +wpdu::~wpdu() +{ + delete [] (char*) iovec_.iov_base; +} + +const iovec& wpdu::get_buffer() const +{ + return iovec_; +} + +// return a pdu from a buffer +int wpdu::get_pdu(Pdu& pdu, snmp_version& version) +{ + if (iovec_.iov_len == 0) + return -1; // NO DATA + + snmp_pdu *raw_pdu; + raw_pdu = cmu_snmp::pdu_create(0); + if (!raw_pdu) { + return SNMP_CLASS_RESOURCE_UNAVAIL; + } + + // max value a client can send us - TODO: replace this with an + // api to get actual string length + int status = cmu_snmp::parse( raw_pdu, (unsigned char *)iovec_.iov_base, + community_name, comm_len, + version, iovec_.iov_len); + if (status != 0) + return SNMP_CLASS_INTERNAL_ERROR; + + community_name[comm_len] = 0; // set null based on returned length + set_request_id( &pdu, raw_pdu->reqid); + set_error_status( &pdu, (int) raw_pdu->errstat); + set_error_index( &pdu, (int) raw_pdu->errindex); + pdu.set_type( raw_pdu->command); + + if (restore_vbs(pdu, raw_pdu)) { + cmu_snmp::free_pdu(raw_pdu); + return SNMP_CLASS_INTERNAL_ERROR; + } + + cmu_snmp::free_pdu(raw_pdu); + return 0; +} + +int wpdu::restore_vbs(Pdu& pdu, const snmp_pdu *raw_pdu) const +{ + Vb tempvb; + Oid tempoid; + struct variable_list *vp; + + for(vp = raw_pdu->variables; vp; vp = vp->next_variable) { + + // extract the oid portion + tempoid.set_data( (unsigned long *)vp->name, + ( unsigned int) vp->name_length); + tempvb.set_oid( tempoid); + + // extract the value portion + switch(vp->type) { + + // octet string + case sNMP_SYNTAX_OCTETS: + case sNMP_SYNTAX_OPAQUE: + { + OctetStr octets( (char *) vp->val.string, + (long) vp->val_len); + tempvb.set_value( octets); + } + break; + + // object id + case sNMP_SYNTAX_OID: + { + Oid oid( (unsigned long*) vp->val.objid, + (int) vp->val_len); + tempvb.set_value( oid); + } + break; + + // timeticks + case sNMP_SYNTAX_TIMETICKS: + { + TimeTicks timeticks( (unsigned long) *(vp->val.integer)); + tempvb.set_value( timeticks); + } + break; + + // 32 bit counter + case sNMP_SYNTAX_CNTR32: + { + Counter32 counter32( (unsigned long) *(vp->val.integer)); + tempvb.set_value( counter32); + } + break; + + // ip address + case sNMP_SYNTAX_IPADDR: + { + char buffer[20]; + ACE_OS::sprintf( buffer,"%d.%d.%d.%d", + vp->val.string[0], + vp->val.string[1], + vp->val.string[2], + vp->val.string[3]); + IpAddress ipaddress( buffer); + tempvb.set_value( ipaddress); + } + break; + + // 32 bit integer + case sNMP_SYNTAX_INT: + { + SnmpInt32 int32( (long) *(vp->val.integer)); + tempvb.set_value( int32); + } + break; + + // 32 bit unsigned integer + case sNMP_SYNTAX_UINT32: + { + SnmpUInt32 uint32( (unsigned long) *(vp->val.integer)); + tempvb.set_value( uint32); + } + break; + + // v2 counter 64's + case sNMP_SYNTAX_CNTR64: + break; + + case sNMP_SYNTAX_NULL: + tempvb.set_null(); + break; + + // v2 vb exceptions + case sNMP_SYNTAX_NOSUCHOBJECT: + case sNMP_SYNTAX_NOSUCHINSTANCE: + case sNMP_SYNTAX_ENDOFMIBVIEW: + set_exception_status( &tempvb, vp->type); + break; + + default: + tempvb.set_null(); + + } // end switch + + // append the vb to the pdu + pdu += tempvb; + } + + return 0; +} + +const unsigned char *wpdu::get_community() const +{ + return community_name; +} diff --git a/ACE/ASNMP/asnmp/wpdu.h b/ACE/ASNMP/asnmp/wpdu.h new file mode 100644 index 00000000000..7feec356bc8 --- /dev/null +++ b/ACE/ASNMP/asnmp/wpdu.h @@ -0,0 +1,84 @@ +/* -*-C++-*- */ +#ifndef WPDU_H_ +#define WPDU_H_ +//============================================================================= +/** + * @file wpdu.h + * + * $Id$ + * + * Adapter class. Converts a Pdu and GenTarget into a format + * that can be stuffed out a I/O port + * + * + * @author Michael R. MacFaden re-worked api + * @author use ACE APIPeter E Mellquist wrote original class snmpmsg + */ +//============================================================================= + + +#include "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "asnmp/asn1.h" +#include "asnmp/pdu.h" +#include "asnmp/target.h" + +// this is an adapter class, it peforms the following transformations +// PDU / Target -> iovec buffer +// iovec buffer -> PDU / Target +struct snmp_pdu; +/** + * @class wpdu + * + * @brief Implement an Adapter pattern between CMU SNMP and HP SNMP++ + */ +class ASNMP_Export wpdu +{ +public: + + /// construct CMU data from HP SNMP++ objects + /// construct HP SNMP++ objects from raw buffer via CMU SNMP datatypes + wpdu(const Pdu& pdu, const UdpTarget& target); + wpdu(const iovec& buffer); + wpdu(); // same as using iovec? + + ~wpdu(); + + /// constructor completed ok? rc = 1 else 0 + int valid() const; + + /// return raw data stream via CMU code + const iovec& get_buffer() const; + + /// return HP SNMP++ pdu + int get_pdu(Pdu& pdu, snmp_version& version); + + /// return community strptr + const unsigned char *get_community() const; + +private: + int convert_vb_to_smival( Vb &tempvb, SmiVALUE *smival ); + int load_vbs(snmp_pdu *raw_pdu, const Pdu& pdu); + int restore_vbs(Pdu& pdu, const snmp_pdu *raw_pdu) const; + void free_smival_descriptor( SmiVALUE *smival ); + static void copy_iovec(iovec& dest, const iovec& src); + int set_trap_info(snmp_pdu *raw_pdu, const Pdu& pdu) const; + + /// raw format + iovec iovec_; + + /// object construction state + int valid_flag_; + + /// snmp version + snmp_version version_; + + unsigned char community_name[MAX_COMM_STR_LEN]; + unsigned long comm_len; // = MAX_COMM_STR_LEN; +}; + +#endif // WPDU_H_ diff --git a/ACE/ASNMP/examples/Makefile.am b/ACE/ASNMP/examples/Makefile.am new file mode 100644 index 00000000000..ba48f01c667 --- /dev/null +++ b/ACE/ASNMP/examples/Makefile.am @@ -0,0 +1,17 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +SUBDIRS = \ + get \ + next \ + set \ + trap \ + walk + diff --git a/ACE/ASNMP/examples/get/Makefile.am b/ACE/ASNMP/examples/get/Makefile.am new file mode 100644 index 00000000000..0c3a6e4ea95 --- /dev/null +++ b/ACE/ASNMP/examples/get/Makefile.am @@ -0,0 +1,62 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + +noinst_PROGRAMS = + +## Makefile.asnmp_example_get.am + +if !BUILD_USES_WCHAR + +noinst_PROGRAMS += get + +get_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP + +get_SOURCES = \ + get.cpp + +get_LDADD = \ + $(top_builddir)/ASNMP/asnmp/libasnmp.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +endif !BUILD_USES_WCHAR + +## Makefile.asnmp_example_get_async.am + +if !BUILD_USES_WCHAR + +noinst_PROGRAMS += get_async + +get_async_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP + +get_async_SOURCES = \ + get_async.cpp + +get_async_LDADD = \ + $(top_builddir)/ASNMP/asnmp/libasnmp.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +endif !BUILD_USES_WCHAR + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/ASNMP/examples/get/get.cpp b/ACE/ASNMP/examples/get/get.cpp new file mode 100644 index 00000000000..1829c381442 --- /dev/null +++ b/ACE/ASNMP/examples/get/get.cpp @@ -0,0 +1,206 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// get.cpp +// +// = DESCRIPTION +// Sample application demonstrating synchronous Snmp::get API +// to access an SNMP Version 1 agent. +// +// = AUTHOR +// Peter E. Mellquist original code +// Michael R MacFaden mrm@cisco.com rework API/ACE integration +// +// ============================================================================ + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/snmp.h" +#include "ace/Argv_Type_Converter.h" +#include "ace/Get_Opt.h" + +// FUZZ: disable check_for_streams_include +#include "ace/streams.h" + +ACE_RCSID(get, get, "$Id$") + +// +// SNMPv1 Get Application +// +class getapp { + public: + getapp(int argc, char **argv); // process command line args + int valid() const; // verify transaction can proceed + int run(); // issue transaction + static void usage(); // operator help message + + private: + getapp(const getapp&); + + UdpAddress address_; + Pdu pdu_; // construct a request Pdu + Oid oid_; + OctetStr community_; + Snmp snmp_; + UdpTarget target_; + int valid_; +}; + + +// main entry point +int main( int argc, char *argv[]) +{ + getapp get(argc, argv); + if (get.valid()) + return get.run(); + else + getapp::usage(); + return 1; +} + +int getapp::valid() const +{ + return valid_; +} +getapp::getapp(int argc, char *argv[]): valid_(0) +{ + Oid req, def_oid("1.3.6.1.2.1.1.1.0"); // default is sysDescr + if ( argc < 2) + return; + + address_ = argv[argc - 1]; + if ( !address_.valid()) { + cout << "ERROR: Invalid IPv4 address or DNS hostname: " \ + << argv[argc] << "\n"; + return; + } + + ACE_Argv_Type_Converter to_tchar (argc, argv); + ACE_Get_Opt get_opt (argc, + to_tchar.get_TCHAR_argv (), + ACE_TEXT ("o:c:r:t:p:")); + for (int c; (c = get_opt ()) != -1; ) + switch (c) + { + case 'o': + req = ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()); + if (req.valid() == 0) + cout << "ERROR: oid value: " + << ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()) + << "is not valid. using default.\n"; + break; + + case 'c': + community_ = ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()); + target_.set_read_community(community_); + break; + + case 'r': + target_.set_retry(ACE_OS::atoi (get_opt.opt_arg())); + break; + + case 't': + target_.set_timeout(ACE_OS::atoi (get_opt.opt_arg())); + break; + + default: + break; + } + + Vb vb; // construct a Vb object + if (req.valid()) + vb.set_oid( req); // set the Oid portion of the Vb + else { + vb.set_oid( def_oid); // set the Oid portion of the Vb + } + pdu_ += vb; + vb.get_oid(oid_); // store for later use + valid_ = 1; +} + +void getapp::usage() +{ + cout << "Usage:\n"; + cout << "get [options] dotted-quad | DNSName[:port]\n"; + cout << " -o OID defaults to 1.3.6.1.2.1.1.1.0 (mibII sysDescr.0) \n"; + cout << " -c Community_name, default is 'public' \n"; + cout << " -r N retries default is N = 1 retry\n"; + cout << " -t N timeout in seconds default is 1 second" << endl; +} + + +int getapp::run() +{ + + //----------[ create a ASNMP session ]----------------------------------- + if ( snmp_.valid() != SNMP_CLASS_SUCCESS) { + cout << "\nASNMP:ERROR:Create session failed: "<< + snmp_.error_string()<< "\n"; + return 1; + } + + //--------[ build up ASNMP object needed ]------------------------------- + if (address_.get_port() == 0) + address_.set_port(DEF_AGENT_PORT); + target_.set_address( address_); // make a target using the address + + //-------[ issue the request, blocked mode ]----------------------------- + cout << "\nASNMP:INFO:SNMP Version " << (target_.get_version()+ 1) << \ + " GET SAMPLE PROGRAM \nOID: " << oid_.to_string() << "\n"; + target_.get_address(address_); // target updates port used + int rc; + const char *name = address_.resolve_hostname(rc); + + cout << "Device: " << address_ << " "; + + //FUZZ: disable check_for_lack_ACE_OS + cout << (rc ? "<< did not resolve via gethostbyname() >>" : name) << "\n"; + //FUZZ: enable check_for_lack_ACE_OS + + cout << "[ Retries=" << target_.get_retry() << " \ + Timeout=" << target_.get_timeout() <<" ms " << "Community=" << \ + community_.to_string() << " ]"<< endl; + + if (snmp_.get( pdu_, target_) == SNMP_CLASS_SUCCESS) { + Vb vb; + // check to see if there are any errors + if (pdu_.get_error_status()) { + cout << "ERROR: agent replied as follows\n"; + cout << pdu_.agent_error_reason() << endl; + } + else { + VbIter iter(pdu_); + while (iter.next(vb)) { + cout << "\tOid = " << vb.to_string_oid() << "\n"; + cout << "\tValue = " << vb.to_string_value() << "\n"; + } + } + } + else { + const char *ptr = snmp_.error_string(); + cout << "ASNMP:ERROR: get command failed reason: " << ptr << endl; + } + + cout << "\nASNMP:INFO: command completed normally.\n"<< endl; + return 0; +} + diff --git a/ACE/ASNMP/examples/get/get.mpc b/ACE/ASNMP/examples/get/get.mpc new file mode 100644 index 00000000000..ffa5a2a5f53 --- /dev/null +++ b/ACE/ASNMP/examples/get/get.mpc @@ -0,0 +1,23 @@ +// $Id$ + +project (asnmp_example_get) : aceexe { + exename = get + after += asnmp_lib + libs += asnmp + avoids += uses_wchar + includes += $(ACE_ROOT)/ASNMP + source_files { + get.cpp + } +} + +project (asnmp_example_get_async) : aceexe { + exename = get_async + after += asnmp_lib + libs += asnmp + avoids += uses_wchar + includes += $(ACE_ROOT)/ASNMP + source_files { + get_async.cpp + } +} diff --git a/ACE/ASNMP/examples/get/get_async.cpp b/ACE/ASNMP/examples/get/get_async.cpp new file mode 100644 index 00000000000..163d559f58e --- /dev/null +++ b/ACE/ASNMP/examples/get/get_async.cpp @@ -0,0 +1,215 @@ +// ============================================================================ +// $Id$ +// = LIBRARY +// asnmp +// +// = FILENAME +// get.cpp +// +// = DESCRIPTION +// Sample application demonstrating synchronous Snmp::get API +// to access an SNMP Version 1 agent. +// +// = AUTHOR +// Peter E. Mellquist original code +// Michael R MacFaden mrm@cisco.com rework API/ACE integration +// +// ============================================================================ + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/snmp.h" +#include "ace/Argv_Type_Converter.h" +#include "ace/Get_Opt.h" + +// FUZZ: disable check_for_streams_include +#include "ace/streams.h" + +ACE_RCSID(get, get_async, "$Id$") + +// +// SNMPv1 Get Application +// +class getapp : public Snmp_Result { + public: + getapp(int argc, char **argv); // process command line args + int valid() const; // verify transaction can proceed + int run(); // issue transaction + static void usage(); // operator help message + + virtual void result(Snmp * r, int rc); + + private: + getapp(const getapp&); + + UdpAddress address_; + Pdu pdu_; // construct a request Pdu + Oid oid_; + OctetStr community_; + Snmp snmp_; + UdpTarget target_; + int valid_; +}; + + +// main entry point +int main( int argc, char *argv[]) +{ + getapp get(argc, argv); + if (get.valid()) + return get.run(); + else + getapp::usage(); + return 1; +} + +int getapp::valid() const +{ + return valid_; +} +getapp::getapp(int argc, char *argv[]): valid_(0) +{ + Oid req, def_oid("1.3.6.1.2.1.1.1.0"); // default is sysDescr + if ( argc < 2) + return; + + address_ = argv[argc - 1]; + if ( !address_.valid()) { + cout << "ERROR: Invalid IPv4 address or DNS hostname: " \ + << argv[argc] << "\n"; + return; + } + + ACE_Argv_Type_Converter to_tchar (argc, argv); + ACE_Get_Opt get_opt (argc, + to_tchar.get_TCHAR_argv (), + ACE_TEXT ("o:c:r:t:p:")); + for (int c; (c = get_opt ()) != -1; ) + switch (c) + { + case 'o': + req = ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()); + if (req.valid() == 0) + cout << "ERROR: oid value: " + << ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()) + << "is not valid. using default.\n"; + break; + + case 'c': + community_ = ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()); + target_.set_read_community(community_); + break; + + case 'r': + target_.set_retry(ACE_OS::atoi (get_opt.opt_arg())); + break; + + case 't': + target_.set_timeout(ACE_OS::atoi (get_opt.opt_arg())); + break; + + default: + break; + } + + Vb vb; // construct a Vb object + if (req.valid()) + vb.set_oid( req); // set the Oid portion of the Vb + else { + vb.set_oid( def_oid); // set the Oid portion of the Vb + } + pdu_ += vb; + vb.get_oid(oid_); // store for later use + valid_ = 1; +} + +void getapp::usage() +{ + cout << "Usage:\n"; + cout << "get [options] dotted-quad | DNSName[:port]\n"; + cout << " -o OID defaults to 1.3.6.1.2.1.1.1.0 (mibII sysDescr.0) \n"; + cout << " -c Community_name, default is 'public' \n"; + cout << " -r N retries default is N = 1 retry\n"; + cout << " -t N timeout in seconds default is 1 second" << endl; +} + + +int getapp::run() +{ + + //----------[ create a ASNMP session ]----------------------------------- + if ( snmp_.valid() != SNMP_CLASS_SUCCESS) { + cout << "\nASNMP:ERROR:Create session failed: "<< + snmp_.error_string()<< "\n"; + return 1; + } + + //--------[ build up ASNMP object needed ]------------------------------- + if (address_.get_port() == 0) + address_.set_port(DEF_AGENT_PORT); + target_.set_address( address_); // make a target using the address + + //-------[ issue the request, blocked mode ]----------------------------- + cout << "\nASNMP:INFO:SNMP Version " << (target_.get_version()+ 1) << \ + " GET SAMPLE PROGRAM \nOID: " << oid_.to_string() << "\n"; + target_.get_address(address_); // target updates port used + int rc; + const char *name = address_.resolve_hostname(rc); + + cout << "Device: " << address_ << " "; + + //FUZZ: disable check_for_lack_ACE_OS + cout << (rc ? "<< did not resolve via gethostbyname() >>" : name) << "\n"; + //FUZZ: enable check_for_lack_ACE_OS + + cout << "[ Retries=" << target_.get_retry() << " \ + Timeout=" << target_.get_timeout() <<" ms " << "Community=" << \ + community_.to_string() << " ]"<< endl; + + if (snmp_.get( pdu_, target_, this) != SNMP_CLASS_SUCCESS) { + const char *ptr = snmp_.error_string(); + cout << "ASNMP:ERROR: get command failed reason: " << ptr << endl; + } else { + ACE_Reactor::instance()->run_reactor_event_loop(); + } + return 0; +} + +void getapp::result(Snmp *, int rc) +{ + Vb vb; + if (rc < 0) + { + const char *ptr = snmp_.error_string(); + cout << "ASNMP:ERROR: get command failed reason: " << ptr << endl; + } else { + // check to see if there are any errors + if (pdu_.get_error_status()) { + cout << "ERROR: agent replied as follows\n"; + cout << pdu_.agent_error_reason() << endl; + } + else { + VbIter iter(pdu_); + while (iter.next(vb)) { + cout << "\tOid = " << vb.to_string_oid() << "\n"; + cout << "\tValue = " << vb.to_string_value() << "\n"; + } + } + } + cout << "\nASNMP:INFO: command completed normally.\n"<< endl; + ACE_Reactor::instance()->end_reactor_event_loop(); +} diff --git a/ACE/ASNMP/examples/next/Makefile.am b/ACE/ASNMP/examples/next/Makefile.am new file mode 100644 index 00000000000..a7b4c2a1256 --- /dev/null +++ b/ACE/ASNMP/examples/next/Makefile.am @@ -0,0 +1,41 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + + +## Makefile.asnmp_example_next.am + +if !BUILD_USES_WCHAR + +noinst_PROGRAMS = next + +next_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP + +next_SOURCES = \ + next.cpp + +next_LDADD = \ + $(top_builddir)/ASNMP/asnmp/libasnmp.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +endif !BUILD_USES_WCHAR + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/ASNMP/examples/next/next.cpp b/ACE/ASNMP/examples/next/next.cpp new file mode 100644 index 00000000000..a246c1ce549 --- /dev/null +++ b/ACE/ASNMP/examples/next/next.cpp @@ -0,0 +1,204 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// next.cpp +// +// = DESCRIPTION +// Sample application demonstrating synchronous Snmp::get_next API +// to access an SNMP Version 1 agent. +// +// = AUTHOR +// Peter E. Mellquist original code +// Michael R MacFaden mrm@cisco.com rework API/ACE integration +// +// ============================================================================ +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/snmp.h" +#include "ace/Argv_Type_Converter.h" +#include "ace/Get_Opt.h" + +// FUZZ: disable check_for_streams_include +#include "ace/streams.h" + +ACE_RCSID(next, next, "$Id$") + +// +// SNMPv1 Get Next Application +// +class nextapp { + public: + nextapp(int argc, char **argv); // process command line args + int valid() const; // verify transaction can proceed + int run(); // issue transaction + static void usage(); // operator help message + + private: + nextapp(const nextapp&); + + UdpAddress address_; + Pdu pdu_; // construct a request Pdu + Oid oid_; + OctetStr community_; + Snmp snmp_; + UdpTarget target_; + int valid_; +}; + + +// main entry point +int main( int argc, char *argv[]) +{ + nextapp get(argc, argv); + if (get.valid()) + return get.run(); + else + nextapp::usage(); + return 1; +} + +int nextapp::valid() const +{ + return valid_; +} +nextapp::nextapp(int argc, char *argv[]): valid_(0) +{ + Oid req, def_oid("1.3.6.1.2.1.1.1.0"); // default is sysDescr + if ( argc < 2) + return; + + address_ = argv[argc - 1]; + if ( !address_.valid()) { + cout << "ERROR: Invalid IPv4 address or DNS hostname: " \ + << argv[argc] << "\n"; + return; + } + + ACE_Argv_Type_Converter to_tchar (argc, argv); + ACE_Get_Opt get_opt (argc, + to_tchar.get_TCHAR_argv (), + ACE_TEXT ("o:c:r:t:")); + for (int c; (c = get_opt ()) != -1; ) + switch (c) + { + case 'o': + req = ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()); + if (req.valid() == 0) + cout << "ERROR: oid value: " + << ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()) + << "is not valid. using default.\n"; + break; + + case 'c': + community_ = ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()); + target_.set_read_community(community_); + break; + + case 'r': + target_.set_retry(ACE_OS::atoi (get_opt.opt_arg())); + break; + + case 't': + target_.set_timeout(ACE_OS::atoi (get_opt.opt_arg())); + break; + + default: + break; + } + + Vb vb; // construct a Vb object + if (req.valid()) + vb.set_oid( req); // set the Oid portion of the Vb + else { + vb.set_oid( def_oid); // set the Oid portion of the Vb + } + pdu_ += vb; + vb.get_oid(oid_); // store for later use + valid_ = 1; +} + +void nextapp::usage() +{ + cout << "Usage:\n"; + cout << "next [options] dotted-quad | DNSName[:port]\n"; + cout << " -o OID starts with oid after 1.3.6.1.2.1.1.1.0 (mibII sysDescr.0) \n"; + cout << " -c Community_name, default is 'public' \n"; + cout << " -r N retries default is N = 1 retry\n"; + cout << " -t N timeout in seconds default is 1 second" << endl; +} + + +int nextapp::run() +{ + + //----------[ create a ASNMP session ]----------------------------------- + if ( snmp_.valid() != SNMP_CLASS_SUCCESS) { + cout << "\nASNMP:ERROR:Create session failed: "<< + snmp_.error_string()<< "\n"; + return 1; + } + + //--------[ build up ASNMP object needed ]------------------------------- + if (address_.get_port() == 0) + address_.set_port(DEF_AGENT_PORT); + target_.set_address( address_); // make a target using the address + + //-------[ issue the request, blocked mode ]----------------------------- + cout << "\nASNMP:INFO:SNMP Version " << (target_.get_version()+ 1) << \ + " GET_NEXT SAMPLE PROGRAM \nOID: " << oid_.to_string() << "\n"; + target_.get_address(address_); // target updates port used + int rc; + const char *name = address_.resolve_hostname(rc); + + cout << "Device: " << address_ << " "; + + //FUZZ: disable check_for_lack_ACE_OS + cout << (rc ? "<< did not resolve via gethostbyname() >>" : name) << "\n"; + //FUZZ: enable check_for_lack_ACE_OS + + cout << "[ Retries=" << target_.get_retry() << " \ + Timeout=" << target_.get_timeout() <<" ms " << "Community=" << \ + community_.to_string() << " ]"<< endl; + + if (snmp_.get_next( pdu_, target_) == SNMP_CLASS_SUCCESS) { + Vb vb; + // check to see if there are any errors + if (pdu_.get_error_status()) { + cout << "ERROR: agent replied as follows\n"; + cout << pdu_.agent_error_reason() << endl; + } + else { + VbIter iter(pdu_); + while (iter.next(vb)) { + cout << "\tOid = " << vb.to_string_oid() << "\n"; + cout << "\tValue = " << vb.to_string_value() << "\n"; + } + } + } + else { + const char *ptr = snmp_.error_string(); + cout << "ASNMP:ERROR: get_next command failed reason: " << ptr << endl; + } + cout << "ASNMP:INFO:command completed normally. ACE Rocks...\n"<< endl; + return 0; +} + diff --git a/ACE/ASNMP/examples/next/next.mpc b/ACE/ASNMP/examples/next/next.mpc new file mode 100644 index 00000000000..f0022cb46a2 --- /dev/null +++ b/ACE/ASNMP/examples/next/next.mpc @@ -0,0 +1,13 @@ +// $Id$ + +project (asnmp_example_next) : aceexe { + exename = next + after += asnmp_lib + libs += asnmp + avoids += uses_wchar + includes += $(ACE_ROOT)/ASNMP + source_files { + next.cpp + } +} + diff --git a/ACE/ASNMP/examples/set/Makefile.am b/ACE/ASNMP/examples/set/Makefile.am new file mode 100644 index 00000000000..94f708ec8e1 --- /dev/null +++ b/ACE/ASNMP/examples/set/Makefile.am @@ -0,0 +1,41 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + + +## Makefile.asnmp_example_set.am + +if !BUILD_USES_WCHAR + +noinst_PROGRAMS = set + +set_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP + +set_SOURCES = \ + set.cpp + +set_LDADD = \ + $(top_builddir)/ASNMP/asnmp/libasnmp.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +endif !BUILD_USES_WCHAR + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/ASNMP/examples/set/set.cpp b/ACE/ASNMP/examples/set/set.cpp new file mode 100644 index 00000000000..8cd8752f48a --- /dev/null +++ b/ACE/ASNMP/examples/set/set.cpp @@ -0,0 +1,275 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// set.cpp +// +// = DESCRIPTION +// Sample application demonstrating synchronous Snmp::set API +// to update an oid in an SNMP Version 1 agent. +// +// = AUTHOR +// Peter E. Mellquist original code +// Michael R MacFaden mrm@cisco.com rework API/ACE integration +// +// ============================================================================ +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/snmp.h" +#include "ace/Argv_Type_Converter.h" +#include "ace/Get_Opt.h" + +// FUZZ: disable check_for_streams_include +#include "ace/streams.h" + +ACE_RCSID(set, set, "$Id$") + +// +// SNMPv1 Set Application +// +class set { + public: + set(int argc, char **argv); // process command line args + int valid() const; // verify transaction can proceed + int run(); // issue transaction + static void usage(); // operator help message + + private: + set(const set&); + + UdpAddress address_; + Pdu pdu_; // construct a request Pdu + Oid oid_; + OctetStr community_; + Snmp snmp_; + UdpTarget target_; + int valid_; +}; + + +// main entry point +int main( int argc, char *argv[]) +{ + set get(argc, argv); + if (get.valid()) + return get.run(); + else + set::usage(); + return 1; +} + +int +set::valid() const +{ + return valid_; +} + +set::set(int argc, char *argv[]): valid_(0) +{ + Vb vb; // construct a Vb object + Oid req; + if ( argc < 2) + return; + target_.get_write_community(community_); + address_ = argv[argc - 1]; + if ( !address_.valid()) { + cout << "ERROR: Invalid IPv4 address or DNS hostname: " \ + << argv[argc] << "\n"; + return; + } + + ACE_Argv_Type_Converter to_tchar (argc, argv); + ACE_Get_Opt get_opt (argc, + to_tchar.get_TCHAR_argv (), + ACE_TEXT ("o:c:r:t:I:U:C:G:T:O:S:P:")); + for (int c; (c = get_opt ()) != -1; ) + switch (c) + { + case 'o': + req = ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()); + if (req.valid() == 0) + cout << "ERROR: oid value: " + << ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()) + << "is not valid. using default.\n"; + break; + + case 'c': + community_ = ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()); + target_.set_write_community(community_); + break; + + case 'r': + target_.set_retry(ACE_OS::atoi (get_opt.opt_arg())); + break; + + case 't': + target_.set_timeout(ACE_OS::atoi (get_opt.opt_arg())); + break; + + case 'I': // Integer32 + { + SnmpInt32 o(ACE_OS::atoi(get_opt.opt_arg())); + vb.set_value(o); + pdu_ += vb; + } + break; + + case 'U': // Unsigned32 + { + SnmpUInt32 o(ACE_OS::atoi(get_opt.opt_arg())); + vb.set_value(o); + pdu_ += vb; + } + break; + + case 'C': // Counter32 + { + Counter32 o(ACE_OS::atoi(get_opt.opt_arg())); + vb.set_value(o); + pdu_ += vb; + } + break; + + case 'G': // Gauge32 + { + Gauge32 o(ACE_OS::atoi(get_opt.opt_arg())); + vb.set_value(o); + pdu_ += vb; + } + break; + + case 'T': // TimeTicks + { + TimeTicks o(ACE_OS::atoi(get_opt.opt_arg())); + vb.set_value(o); + pdu_ += vb; + } + break; + + case 'O': // Oid as a variable identifier + { + oid_ = ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()); + vb.set_oid(oid_); // when value is set, pdu updated + } + break; + + case 'S': // Octet String + { + OctetStr o(ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg())); + vb.set_value(o); // set the Oid portion of the Vb + pdu_ += vb; + } + break; + + case 'P': // Oid String as a value + { + Oid o(ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg())); + vb.set_value(o); // set the Oid portion of the Vb + pdu_ += vb; + } + break; + + default: + break; + } + + // if user didn't set anything use defaults + if (pdu_.get_vb_count() == 0) { + Oid def_oid("1.3.6.1.2.1.1.4.0"); // defualt is sysName + OctetStr def_value("sysName.0 updated by ASNMP set command"); + vb.set_oid(def_oid); + vb.set_value(def_value); + pdu_ += vb; + cout << "INFO: using defaults, setting sysName to : " << \ + def_value.to_string() << endl; + } + + valid_ = 1; +} + +void set::usage() +{ + cout << "Usage:\n"; + cout << "next [options] dotted-quad | DNSName[:port]\n"; + cout << " -o OID starts with oid after 1.3.6.1.2.1.1.1.0 (mibII sysDescr.0) \n"; + cout << " -c Community_name, default is 'private' \n"; + cout << " -r N retries default is N = 1 retry\n"; + cout << " -t N timeout in seconds default is 1 second\n"; + cout << " -O oid_to_set -{I,U,G,S,P} value\n"; + cout << " where I=int32, U=uint32, G=gauge32, S=octet, P=oid" << endl; +} + + +int set::run() +{ + + //----------[ create a ASNMP session ]----------------------------------- + if ( snmp_.valid() != SNMP_CLASS_SUCCESS) { + cout << "\nASNMP:ERROR:Create session failed: "<< + snmp_.error_string()<< "\n"; + return 1; + } + + //--------[ build up ASNMP object needed ]------------------------------- + if (address_.get_port() == 0) + address_.set_port(DEF_AGENT_PORT); + target_.set_address( address_); // make a target using the address + + //-------[ issue the request, blocked mode ]----------------------------- + cout << "\nASNMP:INFO:SNMP Version " << (target_.get_version()+ 1) << \ + " SET SAMPLE PROGRAM \nOID: " << oid_.to_string() << "\n"; + target_.get_address(address_); // target updates port used + int rc; + const char *name = address_.resolve_hostname(rc); + + cout << "Device: " << address_ << " "; + + //FUZZ: disable check_for_lack_ACE_OS + cout << (rc ? "<< did not resolve via gethostbyname() >>" : name) << "\n"; + //FUZZ: enable check_for_lack_ACE_OS + + cout << "[ Retries=" << target_.get_retry() << " \ + Timeout=" << target_.get_timeout() <<" ms " << "Community=" << \ + community_.to_string() << " ]"<< endl; + + if (snmp_.set( pdu_, target_) == SNMP_CLASS_SUCCESS) { + Vb vb; + // check to see if there are any errors + if (pdu_.get_error_status()) { + cout << "ERROR: agent replied as follows\n"; + cout << pdu_.agent_error_reason() << endl; + } + else { + VbIter iter(pdu_); + while (iter.next(vb)) { + cout << "\tOid = " << vb.to_string_oid() << "\n"; + cout << "\tValue = " << vb.to_string_value() << "\n"; + } + } + } + else { + const char *ptr = snmp_.error_string(); + cout << "ASNMP:ERROR: set command failed reason: " << ptr << endl; + } + cout << "ASNMP:INFO:command completed normally.\n"<< endl; + return 0; +} + diff --git a/ACE/ASNMP/examples/set/set.mpc b/ACE/ASNMP/examples/set/set.mpc new file mode 100644 index 00000000000..bb40f93e6df --- /dev/null +++ b/ACE/ASNMP/examples/set/set.mpc @@ -0,0 +1,13 @@ +// $Id$ + +project (asnmp_example_set) : aceexe { + exename = set + after += asnmp_lib + libs += asnmp + avoids += uses_wchar + includes += $(ACE_ROOT)/ASNMP + source_files { + set.cpp + } +} + diff --git a/ACE/ASNMP/examples/trap/Makefile.am b/ACE/ASNMP/examples/trap/Makefile.am new file mode 100644 index 00000000000..a60adce7d30 --- /dev/null +++ b/ACE/ASNMP/examples/trap/Makefile.am @@ -0,0 +1,41 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + + +## Makefile.asnmp_example_trap.am + +if !BUILD_USES_WCHAR + +noinst_PROGRAMS = trap + +trap_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP + +trap_SOURCES = \ + trap.cpp + +trap_LDADD = \ + $(top_builddir)/ASNMP/asnmp/libasnmp.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +endif !BUILD_USES_WCHAR + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/ASNMP/examples/trap/trap.cpp b/ACE/ASNMP/examples/trap/trap.cpp new file mode 100644 index 00000000000..29ef6e4b7d8 --- /dev/null +++ b/ACE/ASNMP/examples/trap/trap.cpp @@ -0,0 +1,192 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// trap.cpp +// +// = DESCRIPTION +// Sample application demonstrating synchronous Snmp::trap API +// to send to an SNMP Version 1 trap listener app. +// +// = AUTHOR +// Peter E. Mellquist original code +// Michael R MacFaden mrm@cisco.com rework OO, API/ACE integration +// +// ============================================================================ +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/snmp.h" +#define DEFINE_TRAP_CONSTANTS_ +#include "asnmp/enttraps.h" // enterprise standard traps +#include "ace/Argv_Type_Converter.h" +#include "ace/Get_Opt.h" + +// FUZZ: disable check_for_streams_include +#include "ace/streams.h" + +ACE_RCSID(trap, trap, "$Id$") + +// +// SNMPv1 Trap Application +// +class trapapp { + public: + trapapp(int argc, char **argv); // process command line args + int valid() const; // verify transaction can proceed + int run(); // issue transaction + static void usage(); // operator help message + + private: + trapapp(const trapapp&); + + UdpAddress address_; + Pdu pdu_; // construct a request Pdu + Oid oid_; + OctetStr community_; + Snmp snmp_; + UdpTarget target_; + int valid_; +}; + + +// main entry point +int main( int argc, char *argv[]) +{ + trapapp get(argc, argv); + if (get.valid()) + return get.run(); + else + trapapp::usage(); + return 1; +} + +int trapapp::valid() const +{ + return valid_; +} +trapapp::trapapp(int argc, char *argv[]): valid_(0) +{ + Oid def_ent_oid("1.3.6.1.2.1.1.1.2.0.1"); // def enterprise oid + Oid ent, trap; // user specified values + + if ( argc < 2) // hostname mandatory + return; + + address_ = argv[argc - 1]; + if ( !address_.valid()) { + cout << "ERROR: Invalid IPv4 address or DNS hostname: " \ + << argv[argc] << "\n"; + return; + } + + ACE_Argv_Type_Converter to_tchar (argc, argv); + ACE_Get_Opt get_opt (argc, + to_tchar.get_TCHAR_argv (), + ACE_TEXT ("c:e:t:")); + for (int c; (c = get_opt ()) != -1; ) + switch (c) + { + case 'c': // community string + community_ = ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()); + target_.set_read_community(community_); + break; + + case 'e': // trap oid to send + ent = ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()); + break; + + case 't': // trap oid + trap = ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()); + break;; + + default: + break; + } + + if (ent.valid()) + pdu_.set_notify_enterprise( ent); // set up the enterprise of the trap + else + pdu_.set_notify_enterprise( def_ent_oid); + + if (trap.valid()) + pdu_.set_notify_id( trap); // set the id of the trap + else + pdu_.set_notify_id( coldStart); // set the id of the trap + + Oid detail_oid("1.3.6.1.4.1.11.2.16.2"); + OctetStr detail_value("SNMP++ Trap Send Test"); + Vb vb(detail_oid, detail_value); + pdu_ += vb; + + pdu_.get_notify_id(oid_); // store for later use + valid_ = 1; +} + +void trapapp::usage() +{ + cout << "Usage:\n"; + cout << "trap [options] dotted-quad | DNSName[:port]\n"; + cout << " -c Community_name, default is 'public' \n"; + cout << " -r N retries default is N = 1 retry\n"; + cout << " -t N timeout in seconds default is 1 second" << endl; + cout << " -e oid enterprise oid default is 1.3.6.1.2.1.1.1.2.0.1\n"; + cout << " -O oid trap id default is coldStart 1.3.6.1.6.3.1.1.5.1\n"; +} + +int trapapp::run() +{ + if ( snmp_.valid() != SNMP_CLASS_SUCCESS) { + cout << "\nASNMP:ERROR:Create session failed: "<< + snmp_.error_string()<< "\n"; + return 1; + } + + if (address_.get_port() == 0) + address_.set_port(DEF_TRAP_PORT); + target_.set_address( address_); // make a target using the address + + //-------[ issue the request, blocked mode ]----------------------------- + cout << "\nASNMP:INFO:SNMP Version " << (target_.get_version()+ 1) << \ + " TRAP GENERATOR SAMPLE PROGRAM \nOID: " << oid_.to_string() << "\n"; + target_.get_address(address_); // target updates port used + int rc; + const char *name = address_.resolve_hostname(rc); + + cout << "Device: " << address_ << " "; + + //FUZZ: disable check_for_lack_ACE_OS + cout << (rc ? "<< did not resolve via gethostbyname() >>" : name) << "\n"; + //FUZZ: enable check_for_lack_ACE_OS + + cout << "[ Community=" << community_.to_string() << " ]"<< endl; + + if (snmp_.trap( pdu_, target_) == SNMP_CLASS_SUCCESS) { + cout << "Trap was written to network...\n"; + } + else { + const char *ptr = snmp_.error_string(); + cout << "ASNMP:ERROR: trap command failed reason: " << ptr << endl; + } + + cout << "ASNMP:INFO:command completed normally.\n"<< endl; + return 0; +} + diff --git a/ACE/ASNMP/examples/trap/trap.mpc b/ACE/ASNMP/examples/trap/trap.mpc new file mode 100644 index 00000000000..d0d6dc8e897 --- /dev/null +++ b/ACE/ASNMP/examples/trap/trap.mpc @@ -0,0 +1,12 @@ +// $Id$ + +project (asnmp_example_trap) : aceexe { + exename = trap + after += asnmp_lib + libs += asnmp + avoids += uses_wchar + includes += $(ACE_ROOT)/ASNMP + source_files { + trap.cpp + } +} diff --git a/ACE/ASNMP/examples/walk/Makefile.am b/ACE/ASNMP/examples/walk/Makefile.am new file mode 100644 index 00000000000..9cff32a49de --- /dev/null +++ b/ACE/ASNMP/examples/walk/Makefile.am @@ -0,0 +1,41 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + + +## Makefile.asnmp_example_walk.am + +if !BUILD_USES_WCHAR + +noinst_PROGRAMS = walk + +walk_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP + +walk_SOURCES = \ + walk.cpp + +walk_LDADD = \ + $(top_builddir)/ASNMP/asnmp/libasnmp.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +endif !BUILD_USES_WCHAR + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/ASNMP/examples/walk/walk.cpp b/ACE/ASNMP/examples/walk/walk.cpp new file mode 100644 index 00000000000..2e67e2b4438 --- /dev/null +++ b/ACE/ASNMP/examples/walk/walk.cpp @@ -0,0 +1,270 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// walk.cpp +// +// = DESCRIPTION +// Sample application demonstrating synchronous Snmp::get, get_next API +// to access an SNMP Version 1 agent. +// +// = AUTHOR +// Peter E. Mellquist original code +// Michael R MacFaden mrm@cisco.com rework API/ACE integration +// +// ============================================================================ +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +#include "asnmp/snmp.h" +#include "ace/Argv_Type_Converter.h" +#include "ace/Get_Opt.h" +// FUZZ: disable check_for_streams_include +#include "ace/streams.h" + +ACE_RCSID(walk, walk, "$Id$") + +// +// SNMPv1 Walk Mib Application +// +class walkapp { + public: + walkapp(int argc, char **argv); // process command line args + int valid() const; // verify transaction can proceed + int run(); // issue transaction + static void usage(); // operator help message + + private: + walkapp(const walkapp&); + + UdpAddress address_; + Pdu pdu_; // construct a request Pdu + Oid oid_; + OctetStr community_; + Snmp snmp_; + UdpTarget target_; + int valid_; +}; + + +// main entry point +int main( int argc, char *argv[]) +{ + walkapp get(argc, argv); + if (get.valid()) + return get.run(); + else + walkapp::usage(); + return 1; +} + +int walkapp::valid() const +{ + return valid_; +} + +walkapp::walkapp(int argc, char *argv[]): valid_(0) +{ + Oid req, def_oid("1.3.6.1.2.1.1.1.0"); // default begin walk with MIBII + if ( argc < 2) + return; + + address_ = argv[argc - 1]; + if ( !address_.valid()) { + cout << "ERROR: Invalid IPv4 address or DNS hostname: " \ + << argv[argc] << "\n"; + return; + } + + ACE_Argv_Type_Converter to_tchar (argc, argv); + ACE_Get_Opt get_opt (argc, + to_tchar.get_TCHAR_argv (), + ACE_TEXT ("o:c:r:t:")); + for (int c; (c = get_opt ()) != -1; ) + switch (c) + { + case 'o': + req = ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()); + if (req.valid() == 0) + cout << "ERROR: oid value: " + << ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()) + << "is not valid. using default.\n"; + break; + + case 'c': + community_ = ACE_TEXT_ALWAYS_CHAR (get_opt.opt_arg()); + target_.set_read_community(community_); + break; + + case 'r': + target_.set_retry(ACE_OS::atoi (get_opt.opt_arg())); + break; + + case 't': + target_.set_timeout(ACE_OS::atoi (get_opt.opt_arg())); + break; + + default: + break; + } + + Vb vb; // construct a Vb object + if (req.valid()) + vb.set_oid( req); // set the Oid portion of the Vb + else { + vb.set_oid( def_oid); // set the Oid portion of the Vb + } + pdu_ += vb; + vb.get_oid(oid_); // store for later use + valid_ = 1; +} + +void walkapp::usage() +{ + cout << "Usage:\n"; + cout << "walk [options] dotted-quad | DNSName[:port]\n"; + cout << " -o OID starts with oid after 1.3.6.1.2.1.1.1.0 (mibII sysDescr.0) \n"; + cout << " -c Community_name, default is 'public' \n"; + cout << " -r N retries default is N = 1 retry\n"; + cout << " -t N timeout in seconds default is 1 second" << endl; +} + + +// +// simple mib iterator class +// +class MibIter { + public: + // Pdu must contain initial oid to begin with + MibIter(Snmp *snmp, Pdu& pdu, UdpTarget* target); + int next(Vb& vb, char *&err_reason); // return next oid in mib + + private: + Snmp *snmp_; + UdpTarget *target_; + Pdu pdu_; + Vb vb_; + int first_; // flag to obtain first entry + int valid_; // flag to obtain first entry +}; + +MibIter::MibIter(Snmp* snmp, Pdu& pdu, UdpTarget *target): + snmp_(snmp), target_(target), pdu_(pdu), first_(0), + valid_(0) +{ + // verify we have a valid oid to begin iterating with + Oid oid; + Vb vb; + pdu.get_vb(vb, 0); + vb.get_oid(oid); + if (oid.valid()) + valid_ = 1; +} + +// return vb of next oid in agent tree, return 1 else return 0, reason set +int MibIter::next(Vb& vb, char *& reason) +{ + int rc; + + if (valid_ == 0) // not valid object + return -1; + + // 1. poll for value + if (first_ == 0) { + rc = snmp_->get( pdu_, *target_); + first_++; + } + else { + rc = snmp_->get_next( pdu_, *target_); + } + + if (rc != SNMP_CLASS_SUCCESS) { + reason = const_cast (snmp_->error_string()); + return 0; + } + + // 2. check for problems + if (pdu_.get_error_status()) { + reason = const_cast (pdu_.agent_error_reason()); + return 0; + } + + // 3. return vb to caller + pdu_.get_vb(vb, 0); + Oid nextoid; + vb.get_oid(nextoid); // and setup next oid to get + Vb nextvb(nextoid); + pdu_.delete_all_vbs(); + pdu_ += nextvb; // can't do set_vb as there are no entries to replace + + return 1; // ok +} + +int walkapp::run() +{ + + //----------[ create a ASNMP session ]----------------------------------- + if ( snmp_.valid() != SNMP_CLASS_SUCCESS) { + cout << "\nASNMP:ERROR:Create session failed: "<< + snmp_.error_string()<< "\n"; + return 1; + } + + //--------[ build up ASNMP object needed ]------------------------------- + if (address_.get_port() == 0) + address_.set_port(DEF_AGENT_PORT); + target_.set_address( address_); // make a target using the address + + //-------[ issue the request, blocked mode ]----------------------------- + cout << "\nASNMP:INFO:SNMP Version " << (target_.get_version()+ 1) << \ + " WALK SAMPLE PROGRAM \nOID: " << oid_.to_string() << "\n"; + target_.get_address(address_); // target updates port used + int rc; + const char *name = address_.resolve_hostname(rc); + + cout << "Device: " << address_ << " "; + + //FUZZ: disable check_for_lack_ACE_OS + cout << (rc ? "<< did not resolve via gethostbyname() >>" : name) << "\n"; + //FUZZ: enable check_for_lack_ACE_OS + + cout << "[ Retries=" << target_.get_retry() << " \ + Timeout=" << target_.get_timeout() <<" ms " << "Community=" << \ + community_.to_string() << " ]"<< endl; + + MibIter iter(&snmp_, pdu_, &target_); + char *err_str = 0; + Vb vb; + unsigned ctr = 0; + while (iter.next(vb, err_str)) { + cout << "\tOid = " << vb.to_string_oid() << "\n"; + cout << "\tValue = " << vb.to_string_value() << "\n"; + ctr++; + } + + if (!err_str) { + cout << "ERROR: walk: " << err_str << endl; + return 0; + } + + cout << "ASNMP:INFO:command completed normally. ACE Rocks...\n"<< endl; + return 0; +} + diff --git a/ACE/ASNMP/examples/walk/walk.mpc b/ACE/ASNMP/examples/walk/walk.mpc new file mode 100644 index 00000000000..aff0fb98d35 --- /dev/null +++ b/ACE/ASNMP/examples/walk/walk.mpc @@ -0,0 +1,12 @@ +// $Id$ + +project (asnmp_example_walk) : aceexe { + exename = walk + after += asnmp_lib + libs += asnmp + avoids += uses_wchar + includes += $(ACE_ROOT)/ASNMP + source_files { + walk.cpp + } +} diff --git a/ACE/ASNMP/mibs/RFC1213-MIB.my b/ACE/ASNMP/mibs/RFC1213-MIB.my new file mode 100644 index 00000000000..f89f8bf125e --- /dev/null +++ b/ACE/ASNMP/mibs/RFC1213-MIB.my @@ -0,0 +1,2618 @@ +-- ***************************************************************** +-- RFC1213-MIB.my: MIB-II MIB file +-- +-- April 1994, Jeffrey T. Johnson +-- +-- Copyright (c) 1994-1996 by cisco Systems, Inc. +-- All rights reserved. +-- +-- ***************************************************************** +-- +-- This mib was extracted from RFC 1213 +-- The following changes have been applied: +-- The enumerations unknown(4) and dormant(5) have been added to +-- ifOperStatus to reflect a change to the ifTable introduced in +-- RFC 1573 +-- +-- The SYNTAX of ifType has been changed to IANAifType, to reflect the +-- change to the ifTable introduced in RFC1573. + + RFC1213-MIB DEFINITIONS ::= BEGIN + + IMPORTS + mgmt, NetworkAddress, IpAddress, Counter, Gauge, + TimeTicks + FROM RFC1155-SMI + OBJECT-TYPE + FROM RFC-1212 + TEXTUAL-CONVENTION + FROM SNMPv2-TC + IANAifType + FROM IANAifType-MIB; + + -- This MIB module uses the extended OBJECT-TYPE macro as + -- defined in [14]; + + + -- MIB-II (same prefix as MIB-I) + + mib-2 OBJECT IDENTIFIER ::= { mgmt 1 } + + -- textual conventions + + DisplayString ::= + OCTET STRING + -- This data type is used to model textual information taken + -- from the NVT ASCII character set. By convention, objects + -- with this syntax are declared as having + -- + -- SIZE (0..255) + + PhysAddress ::= + OCTET STRING + -- This data type is used to model media addresses. For many + -- types of media, this will be in a binary representation. + -- For example, an ethernet address would be represented as + -- a string of 6 octets. + + + -- groups in MIB-II + + system OBJECT IDENTIFIER ::= { mib-2 1 } + + interfaces OBJECT IDENTIFIER ::= { mib-2 2 } + + at OBJECT IDENTIFIER ::= { mib-2 3 } + + ip OBJECT IDENTIFIER ::= { mib-2 4 } + + icmp OBJECT IDENTIFIER ::= { mib-2 5 } + + tcp OBJECT IDENTIFIER ::= { mib-2 6 } + + udp OBJECT IDENTIFIER ::= { mib-2 7 } + + egp OBJECT IDENTIFIER ::= { mib-2 8 } + + -- historical (some say hysterical) + -- cmot OBJECT IDENTIFIER ::= { mib-2 9 } + + transmission OBJECT IDENTIFIER ::= { mib-2 10 } + + snmp OBJECT IDENTIFIER ::= { mib-2 11 } + + + -- the System group + + -- Implementation of the System group is mandatory for all + -- systems. If an agent is not configured to have a value + -- for any of these variables, a string of length 0 is + -- returned. + + sysDescr OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..255)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A textual description of the entity. This value + should include the full name and version + identification of the system's hardware type, + software operating-system, and networking + software. It is mandatory that this only contain + printable ASCII characters." + ::= { system 1 } + + sysObjectID OBJECT-TYPE + SYNTAX OBJECT IDENTIFIER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The vendor's authoritative identification of the + network management subsystem contained in the + entity. This value is allocated within the SMI + enterprises subtree (1.3.6.1.4.1) and provides an + easy and unambiguous means for determining `what + kind of box' is being managed. For example, if + vendor `Flintstones, Inc.' was assigned the + subtree 1.3.6.1.4.1.4242, it could assign the + identifier 1.3.6.1.4.1.4242.1.1 to its `Fred + Router'." + ::= { system 2 } + + sysUpTime OBJECT-TYPE + SYNTAX TimeTicks + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The time (in hundredths of a second) since the + network management portion of the system was last + re-initialized." + ::= { system 3 } + + sysContact OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..255)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The textual identification of the contact person + for this managed node, together with information + on how to contact this person." + ::= { system 4 } + + sysName OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..255)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "An administratively-assigned name for this + managed node. By convention, this is the node's + fully-qualified domain name." + ::= { system 5 } + + sysLocation OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..255)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The physical location of this node (e.g., + `telephone closet, 3rd floor')." + ::= { system 6 } + + sysServices OBJECT-TYPE + SYNTAX INTEGER (0..127) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A value which indicates the set of services that + this entity primarily offers. + + The value is a sum. This sum initially takes the + value zero, Then, for each layer, L, in the range + 1 through 7, that this node performs transactions + for, 2 raised to (L - 1) is added to the sum. For + example, a node which performs primarily routing + functions would have a value of 4 (2^(3-1)). In + contrast, a node which is a host offering + application services would have a value of 72 + (2^(4-1) + 2^(7-1)). Note that in the context of + the Internet suite of protocols, values should be + calculated accordingly: + + layer functionality + 1 physical (e.g., repeaters) + 2 datalink/subnetwork (e.g., bridges) + 3 internet (e.g., IP gateways) + 4 end-to-end (e.g., IP hosts) + 7 applications (e.g., mail relays) + + For systems including OSI protocols, layers 5 and + 6 may also be counted." + ::= { system 7 } + + -- the Interfaces group + + -- Implementation of the Interfaces group is mandatory for + -- all systems. + + ifNumber OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of network interfaces (regardless of + their current state) present on this system." + ::= { interfaces 1 } + + + -- the Interfaces table + + -- The Interfaces table contains information on the entity's + -- interfaces. Each interface is thought of as being + -- attached to a `subnetwork'. Note that this term should + -- not be confused with `subnet' which refers to an + -- addressing partitioning scheme used in the Internet suite + -- of protocols. + + ifTable OBJECT-TYPE + SYNTAX SEQUENCE OF IfEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A list of interface entries. The number of + entries is given by the value of ifNumber." + ::= { interfaces 2 } + + ifEntry OBJECT-TYPE + SYNTAX IfEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "An interface entry containing objects at the + subnetwork layer and below for a particular + interface." + INDEX { ifIndex } + ::= { ifTable 1 } + + IfEntry ::= + SEQUENCE { + ifIndex + INTEGER, + ifDescr + DisplayString, + ifType + IANAifType, + ifMtu + INTEGER, + ifSpeed + Gauge, + ifPhysAddress + PhysAddress, + ifAdminStatus + INTEGER, + ifOperStatus + INTEGER, + ifLastChange + TimeTicks, + ifInOctets + Counter, + ifInUcastPkts + Counter, + ifInNUcastPkts + Counter, + ifInDiscards + Counter, + ifInErrors + Counter, + ifInUnknownProtos + Counter, + ifOutOctets + Counter, + ifOutUcastPkts + Counter, + ifOutNUcastPkts + Counter, + ifOutDiscards + Counter, + ifOutErrors + Counter, + ifOutQLen + Gauge, + ifSpecific + OBJECT IDENTIFIER + } + + ifIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A unique value for each interface. Its value + ranges between 1 and the value of ifNumber. The + value for each interface must remain constant at + least from one re-initialization of the entity's + network management system to the next re- + initialization." + ::= { ifEntry 1 } + + ifDescr OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..255)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A textual string containing information about the + interface. This string should include the name of + the manufacturer, the product name and the version + of the hardware interface." + ::= { ifEntry 2 } + + ifType OBJECT-TYPE + SYNTAX IANAifType + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The type of interface. Additional values for ifType + are assigned by the Internet Assigned Numbers + Authority (IANA), through updating the syntax of the + IANAifType textual convention." + ::= { ifEntry 3 } + + + ifMtu OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The size of the largest datagram which can be + sent/received on the interface, specified in + octets. For interfaces that are used for + transmitting network datagrams, this is the size + of the largest network datagram that can be sent + on the interface." + ::= { ifEntry 4 } + + ifSpeed OBJECT-TYPE + SYNTAX Gauge + ACCESS read-only + STATUS mandatory + DESCRIPTION + "An estimate of the interface's current bandwidth + in bits per second. For interfaces which do not + vary in bandwidth or for those where no accurate + estimation can be made, this object should contain + the nominal bandwidth." + ::= { ifEntry 5 } + + ifPhysAddress OBJECT-TYPE + SYNTAX PhysAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The interface's address at the protocol layer + immediately `below' the network layer in the + protocol stack. For interfaces which do not have + such an address (e.g., a serial line), this object + should contain an octet string of zero length." + ::= { ifEntry 6 } + + ifAdminStatus OBJECT-TYPE + SYNTAX INTEGER { + up(1), -- ready to pass packets + down(2), + testing(3) -- in some test mode + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The desired state of the interface. The + testing(3) state indicates that no operational + packets can be passed." + ::= { ifEntry 7 } + + ifOperStatus OBJECT-TYPE + SYNTAX INTEGER { + up(1), -- ready to pass packets + down(2), + testing(3), -- in some test mode + unknown(4), + dormant(5) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The current operational state of the interface. + The testing(3) state indicates that no operational + packets can be passed." + ::= { ifEntry 8 } + + ifLastChange OBJECT-TYPE + SYNTAX TimeTicks + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The value of sysUpTime at the time the interface + entered its current operational state. If the + current state was entered prior to the last re- + initialization of the local network management + subsystem, then this object contains a zero + value." + ::= { ifEntry 9 } + + ifInOctets OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of octets received on the + interface, including framing characters." + ::= { ifEntry 10 } + + ifInUcastPkts OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of subnetwork-unicast packets + delivered to a higher-layer protocol." + ::= { ifEntry 11 } + + ifInNUcastPkts OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of non-unicast (i.e., subnetwork- + broadcast or subnetwork-multicast) packets + delivered to a higher-layer protocol." + ::= { ifEntry 12 } + + ifInDiscards OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of inbound packets which were chosen + to be discarded even though no errors had been + detected to prevent their being deliverable to a + higher-layer protocol. One possible reason for + discarding such a packet could be to free up + buffer space." + ::= { ifEntry 13 } + + ifInErrors OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of inbound packets that contained + errors preventing them from being deliverable to a + higher-layer protocol." + ::= { ifEntry 14 } + + ifInUnknownProtos OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of packets received via the interface + which were discarded because of an unknown or + unsupported protocol." + ::= { ifEntry 15 } + + ifOutOctets OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of octets transmitted out of the + interface, including framing characters." + ::= { ifEntry 16 } + + ifOutUcastPkts OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of packets that higher-level + protocols requested be transmitted to a + subnetwork-unicast address, including those that + were discarded or not sent." + ::= { ifEntry 17 } + + ifOutNUcastPkts OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of packets that higher-level + protocols requested be transmitted to a non- + unicast (i.e., a subnetwork-broadcast or + subnetwork-multicast) address, including those + that were discarded or not sent." + ::= { ifEntry 18 } + + ifOutDiscards OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of outbound packets which were chosen + to be discarded even though no errors had been + detected to prevent their being transmitted. One + possible reason for discarding such a packet could + be to free up buffer space." + ::= { ifEntry 19 } + + ifOutErrors OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of outbound packets that could not be + transmitted because of errors." + ::= { ifEntry 20 } + + ifOutQLen OBJECT-TYPE + SYNTAX Gauge + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The length of the output packet queue (in + packets)." + ::= { ifEntry 21 } + + ifSpecific OBJECT-TYPE + SYNTAX OBJECT IDENTIFIER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A reference to MIB definitions specific to the + particular media being used to realize the + interface. For example, if the interface is + realized by an ethernet, then the value of this + object refers to a document defining objects + specific to ethernet. If this information is not + present, its value should be set to the OBJECT + IDENTIFIER { 0 0 }, which is a syntactically valid + object identifier, and any conformant + implementation of ASN.1 and BER must be able to + generate and recognize this value." + ::= { ifEntry 22 } + + + -- the Address Translation group + + -- Implementation of the Address Translation group is + -- mandatory for all systems. Note however that this group + -- is deprecated by MIB-II. That is, it is being included + -- solely for compatibility with MIB-I nodes, and will most + -- likely be excluded from MIB-III nodes. From MIB-II and + -- onwards, each network protocol group contains its own + -- address translation tables. + + -- The Address Translation group contains one table which is + -- the union across all interfaces of the translation tables + -- for converting a NetworkAddress (e.g., an IP address) into + -- a subnetwork-specific address. For lack of a better term, + -- this document refers to such a subnetwork-specific address + -- as a `physical' address. + + -- Examples of such translation tables are: for broadcast + -- media where ARP is in use, the translation table is + -- equivalent to the ARP cache; or, on an X.25 network where + -- non-algorithmic translation to X.121 addresses is + -- required, the translation table contains the + -- NetworkAddress to X.121 address equivalences. + + atTable OBJECT-TYPE + SYNTAX SEQUENCE OF AtEntry + ACCESS not-accessible + STATUS deprecated + DESCRIPTION + "The Address Translation tables contain the + NetworkAddress to `physical' address equivalences. + Some interfaces do not use translation tables for + determining address equivalences (e.g., DDN-X.25 + has an algorithmic method); if all interfaces are + of this type, then the Address Translation table + is empty, i.e., has zero entries." + ::= { at 1 } + + atEntry OBJECT-TYPE + SYNTAX AtEntry + ACCESS not-accessible + STATUS deprecated + DESCRIPTION + "Each entry contains one NetworkAddress to + `physical' address equivalence." + INDEX { atIfIndex, + atNetAddress } + ::= { atTable 1 } + + AtEntry ::= + SEQUENCE { + atIfIndex + INTEGER, + atPhysAddress + PhysAddress, + atNetAddress + NetworkAddress + } + + atIfIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS deprecated + DESCRIPTION + "The interface on which this entry's equivalence + is effective. The interface identified by a + particular value of this index is the same + interface as identified by the same value of + ifIndex." + ::= { atEntry 1 } + + atPhysAddress OBJECT-TYPE + SYNTAX PhysAddress + ACCESS read-write + STATUS deprecated + DESCRIPTION + "The media-dependent `physical' address. + + Setting this object to a null string (one of zero + length) has the effect of invaliding the + corresponding entry in the atTable object. That + is, it effectively disassociates the interface + identified with said entry from the mapping + identified with said entry. It is an + implementation-specific matter as to whether the + agent removes an invalidated entry from the table. + Accordingly, management stations must be prepared + to receive tabular information from agents that + corresponds to entries not currently in use. + Proper interpretation of such entries requires + examination of the relevant atPhysAddress object." + ::= { atEntry 2 } + + atNetAddress OBJECT-TYPE + SYNTAX NetworkAddress + ACCESS read-write + STATUS deprecated + DESCRIPTION + "The NetworkAddress (e.g., the IP address) + corresponding to the media-dependent `physical' + address." + ::= { atEntry 3 } + + + -- the IP group + + -- Implementation of the IP group is mandatory for all + -- systems. + + ipForwarding OBJECT-TYPE + SYNTAX INTEGER { + forwarding(1), -- acting as a gateway + not-forwarding(2) -- NOT acting as a gateway + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The indication of whether this entity is acting + as an IP gateway in respect to the forwarding of + datagrams received by, but not addressed to, this + entity. IP gateways forward datagrams. IP hosts + do not (except those source-routed via the host). + + Note that for some managed nodes, this object may + take on only a subset of the values possible. + Accordingly, it is appropriate for an agent to + return a `badValue' response if a management + station attempts to change this object to an + inappropriate value." + ::= { ip 1 } + + ipDefaultTTL OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The default value inserted into the Time-To-Live + field of the IP header of datagrams originated at + this entity, whenever a TTL value is not supplied + by the transport layer protocol." + ::= { ip 2 } + + ipInReceives OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of input datagrams received from + interfaces, including those received in error." + ::= { ip 3 } + + ipInHdrErrors OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of input datagrams discarded due to + errors in their IP headers, including bad + checksums, version number mismatch, other format + errors, time-to-live exceeded, errors discovered + in processing their IP options, etc." + ::= { ip 4 } + + ipInAddrErrors OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of input datagrams discarded because + the IP address in their IP header's destination + field was not a valid address to be received at + this entity. This count includes invalid + addresses (e.g., 0.0.0.0) and addresses of + unsupported Classes (e.g., Class E). For entities + which are not IP Gateways and therefore do not + forward datagrams, this counter includes datagrams + discarded because the destination address was not + a local address." + ::= { ip 5 } + + ipForwDatagrams OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of input datagrams for which this + entity was not their final IP destination, as a + result of which an attempt was made to find a + route to forward them to that final destination. + In entities which do not act as IP Gateways, this + counter will include only those packets which were + Source-Routed via this entity, and the Source- + Route option processing was successful." + ::= { ip 6 } + + ipInUnknownProtos OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of locally-addressed datagrams + received successfully but discarded because of an + unknown or unsupported protocol." + ::= { ip 7 } + + ipInDiscards OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of input IP datagrams for which no + problems were encountered to prevent their + continued processing, but which were discarded + (e.g., for lack of buffer space). Note that this + counter does not include any datagrams discarded + while awaiting re-assembly." + ::= { ip 8 } + + ipInDelivers OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of input datagrams successfully + delivered to IP user-protocols (including ICMP)." + ::= { ip 9 } + + ipOutRequests OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of IP datagrams which local IP + user-protocols (including ICMP) supplied to IP in + requests for transmission. Note that this counter + does not include any datagrams counted in + ipForwDatagrams." + ::= { ip 10 } + + ipOutDiscards OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of output IP datagrams for which no + problem was encountered to prevent their + transmission to their destination, but which were + discarded (e.g., for lack of buffer space). Note + that this counter would include datagrams counted + in ipForwDatagrams if any such packets met this + (discretionary) discard criterion." + ::= { ip 11 } + + ipOutNoRoutes OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of IP datagrams discarded because no + route could be found to transmit them to their + destination. Note that this counter includes any + packets counted in ipForwDatagrams which meet this + `no-route' criterion. Note that this includes any + datagrams which a host cannot route because all of + its default gateways are down." + ::= { ip 12 } + + ipReasmTimeout OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The maximum number of seconds which received + fragments are held while they are awaiting + reassembly at this entity." + ::= { ip 13 } + + ipReasmReqds OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of IP fragments received which needed + to be reassembled at this entity." + ::= { ip 14 } + + ipReasmOKs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of IP datagrams successfully re- + assembled." + ::= { ip 15 } + + ipReasmFails OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of failures detected by the IP re- + assembly algorithm (for whatever reason: timed + out, errors, etc). Note that this is not + necessarily a count of discarded IP fragments + since some algorithms (notably the algorithm in + RFC 815) can lose track of the number of fragments + by combining them as they are received." + ::= { ip 16 } + + ipFragOKs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of IP datagrams that have been + successfully fragmented at this entity." + ::= { ip 17 } + + ipFragFails OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of IP datagrams that have been + discarded because they needed to be fragmented at + this entity but could not be, e.g., because their + Don't Fragment flag was set." + ::= { ip 18 } + + ipFragCreates OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of IP datagram fragments that have + been generated as a result of fragmentation at + this entity." + ::= { ip 19 } + + + + -- the IP address table + + -- The IP address table contains this entity's IP addressing + -- information. + + ipAddrTable OBJECT-TYPE + SYNTAX SEQUENCE OF IpAddrEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "The table of addressing information relevant to + this entity's IP addresses." + ::= { ip 20 } + + ipAddrEntry OBJECT-TYPE + SYNTAX IpAddrEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "The addressing information for one of this + entity's IP addresses." + INDEX { ipAdEntAddr } + ::= { ipAddrTable 1 } + + IpAddrEntry ::= + SEQUENCE { + ipAdEntAddr + IpAddress, + ipAdEntIfIndex + INTEGER, + ipAdEntNetMask + IpAddress, + ipAdEntBcastAddr + INTEGER, + ipAdEntReasmMaxSize + INTEGER (0..65535) + } + + ipAdEntAddr OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The IP address to which this entry's addressing + information pertains." + ::= { ipAddrEntry 1 } + + + ipAdEntIfIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The index value which uniquely identifies the + interface to which this entry is applicable. The + interface identified by a particular value of this + index is the same interface as identified by the + same value of ifIndex." + ::= { ipAddrEntry 2 } + + ipAdEntNetMask OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The subnet mask associated with the IP address of + this entry. The value of the mask is an IP + address with all the network bits set to 1 and all + the hosts bits set to 0." + ::= { ipAddrEntry 3 } + + ipAdEntBcastAddr OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The value of the least-significant bit in the IP + broadcast address used for sending datagrams on + the (logical) interface associated with the IP + address of this entry. For example, when the + Internet standard all-ones broadcast address is + used, the value will be 1. This value applies to + both the subnet and network broadcasts addresses + used by the entity on this (logical) interface." + ::= { ipAddrEntry 4 } + + ipAdEntReasmMaxSize OBJECT-TYPE + SYNTAX INTEGER (0..65535) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The size of the largest IP datagram which this + entity can re-assemble from incoming IP fragmented + datagrams received on this interface." + ::= { ipAddrEntry 5 } + + -- the IP routing table + + -- The IP routing table contains an entry for each route + -- presently known to this entity. + + ipRouteTable OBJECT-TYPE + SYNTAX SEQUENCE OF IpRouteEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "This entity's IP Routing table." + ::= { ip 21 } + + ipRouteEntry OBJECT-TYPE + SYNTAX IpRouteEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A route to a particular destination." + INDEX { ipRouteDest } + ::= { ipRouteTable 1 } + + IpRouteEntry ::= + SEQUENCE { + ipRouteDest + IpAddress, + ipRouteIfIndex + INTEGER, + ipRouteMetric1 + INTEGER, + ipRouteMetric2 + INTEGER, + ipRouteMetric3 + INTEGER, + ipRouteMetric4 + INTEGER, + ipRouteNextHop + IpAddress, + ipRouteType + INTEGER, + ipRouteProto + INTEGER, + ipRouteAge + INTEGER, + ipRouteMask + IpAddress, + ipRouteMetric5 + INTEGER, + ipRouteInfo + OBJECT IDENTIFIER + } + + ipRouteDest OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The destination IP address of this route. An + entry with a value of 0.0.0.0 is considered a + default route. Multiple routes to a single + destination can appear in the table, but access to + such multiple entries is dependent on the table- + access mechanisms defined by the network + management protocol in use." + ::= { ipRouteEntry 1 } + + ipRouteIfIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The index value which uniquely identifies the + local interface through which the next hop of this + route should be reached. The interface identified + by a particular value of this index is the same + interface as identified by the same value of + ifIndex." + ::= { ipRouteEntry 2 } + + ipRouteMetric1 OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The primary routing metric for this route. The + semantics of this metric are determined by the + routing-protocol specified in the route's + ipRouteProto value. If this metric is not used, + its value should be set to -1." + ::= { ipRouteEntry 3 } + + ipRouteMetric2 OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "An alternate routing metric for this route. The + semantics of this metric are determined by the + routing-protocol specified in the route's + ipRouteProto value. If this metric is not used, + its value should be set to -1." + ::= { ipRouteEntry 4 } + + ipRouteMetric3 OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "An alternate routing metric for this route. The + semantics of this metric are determined by the + routing-protocol specified in the route's + ipRouteProto value. If this metric is not used, + its value should be set to -1." + ::= { ipRouteEntry 5 } + + ipRouteMetric4 OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "An alternate routing metric for this route. The + semantics of this metric are determined by the + routing-protocol specified in the route's + ipRouteProto value. If this metric is not used, + its value should be set to -1." + ::= { ipRouteEntry 6 } + + ipRouteNextHop OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The IP address of the next hop of this route. + (In the case of a route bound to an interface + which is realized via a broadcast media, the value + of this field is the agent's IP address on that + interface.)" + ::= { ipRouteEntry 7 } + + ipRouteType OBJECT-TYPE + SYNTAX INTEGER { + other(1), -- none of the following + + invalid(2), -- an invalidated route + -- route to directly + direct(3), -- connected (sub-)network + + -- route to a non-local + indirect(4) -- host/network/sub-network + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The type of route. Note that the values + direct(3) and indirect(4) refer to the notion of + direct and indirect routing in the IP + architecture. + + Setting this object to the value invalid(2) has + the effect of invalidating the corresponding entry + in the ipRouteTable object. That is, it + effectively disassociates the destination + identified with said entry from the route + identified with said entry. It is an + implementation-specific matter as to whether the + agent removes an invalidated entry from the table. + Accordingly, management stations must be prepared + to receive tabular information from agents that + corresponds to entries not currently in use. + Proper interpretation of such entries requires + examination of the relevant ipRouteType object." + ::= { ipRouteEntry 8 } + + ipRouteProto OBJECT-TYPE + SYNTAX INTEGER { + other(1), -- none of the following + + -- non-protocol information, + -- e.g., manually configured + local(2), -- entries + + -- set via a network + netmgmt(3), -- management protocol + + -- obtained via ICMP, + icmp(4), -- e.g., Redirect + + -- the remaining values are + -- all gateway routing + -- protocols + egp(5), + ggp(6), + hello(7), + rip(8), + is-is(9), + es-is(10), + ciscoIgrp(11), + bbnSpfIgp(12), + ospf(13), + bgp(14) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The routing mechanism via which this route was + learned. Inclusion of values for gateway routing + protocols is not intended to imply that hosts + should support those protocols." + ::= { ipRouteEntry 9 } + + ipRouteAge OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The number of seconds since this route was last + updated or otherwise determined to be correct. + Note that no semantics of `too old' can be implied + except through knowledge of the routing protocol + by which the route was learned." + ::= { ipRouteEntry 10 } + + ipRouteMask OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Indicate the mask to be logical-ANDed with the + destination address before being compared to the + value in the ipRouteDest field. For those systems + that do not support arbitrary subnet masks, an + agent constructs the value of the ipRouteMask by + determining whether the value of the correspondent + ipRouteDest field belong to a class-A, B, or C + network, and then using one of: + + mask network + 255.0.0.0 class-A + 255.255.0.0 class-B + 255.255.255.0 class-C + + If the value of the ipRouteDest is 0.0.0.0 (a + default route), then the mask value is also + 0.0.0.0. It should be noted that all IP routing + subsystems implicitly use this mechanism." + ::= { ipRouteEntry 11 } + + ipRouteMetric5 OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "An alternate routing metric for this route. The + semantics of this metric are determined by the + routing-protocol specified in the route's + ipRouteProto value. If this metric is not used, + its value should be set to -1." + ::= { ipRouteEntry 12 } + + ipRouteInfo OBJECT-TYPE + SYNTAX OBJECT IDENTIFIER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A reference to MIB definitions specific to the + particular routing protocol which is responsible + for this route, as determined by the value + specified in the route's ipRouteProto value. If + this information is not present, its value should + be set to the OBJECT IDENTIFIER { 0 0 }, which is + a syntactically valid object identifier, and any + conformant implementation of ASN.1 and BER must be + able to generate and recognize this value." + ::= { ipRouteEntry 13 } + + + -- the IP Address Translation table + + -- The IP address translation table contain the IpAddress to + -- `physical' address equivalences. Some interfaces do not + -- use translation tables for determining address + -- equivalences (e.g., DDN-X.25 has an algorithmic method); + -- if all interfaces are of this type, then the Address + -- Translation table is empty, i.e., has zero entries. + + ipNetToMediaTable OBJECT-TYPE + SYNTAX SEQUENCE OF IpNetToMediaEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "The IP Address Translation table used for mapping + from IP addresses to physical addresses." + ::= { ip 22 } + + ipNetToMediaEntry OBJECT-TYPE + SYNTAX IpNetToMediaEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Each entry contains one IpAddress to `physical' + address equivalence." + INDEX { ipNetToMediaIfIndex, + ipNetToMediaNetAddress } + ::= { ipNetToMediaTable 1 } + + IpNetToMediaEntry ::= + SEQUENCE { + ipNetToMediaIfIndex + INTEGER, + ipNetToMediaPhysAddress + PhysAddress, + ipNetToMediaNetAddress + IpAddress, + ipNetToMediaType + INTEGER + } + + ipNetToMediaIfIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The interface on which this entry's equivalence + is effective. The interface identified by a + particular value of this index is the same + interface as identified by the same value of + ifIndex." + ::= { ipNetToMediaEntry 1 } + + ipNetToMediaPhysAddress OBJECT-TYPE + SYNTAX PhysAddress + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The media-dependent `physical' address." + ::= { ipNetToMediaEntry 2 } + + ipNetToMediaNetAddress OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The IpAddress corresponding to the media- + dependent `physical' address." + ::= { ipNetToMediaEntry 3 } + + ipNetToMediaType OBJECT-TYPE + SYNTAX INTEGER { + other(1), -- none of the following + invalid(2), -- an invalidated mapping + dynamic(3), + static(4) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The type of mapping. + + Setting this object to the value invalid(2) has + the effect of invalidating the corresponding entry + in the ipNetToMediaTable. That is, it effectively + disassociates the interface identified with said + entry from the mapping identified with said entry. + It is an implementation-specific matter as to + whether the agent removes an invalidated entry + from the table. Accordingly, management stations + must be prepared to receive tabular information + from agents that corresponds to entries not + currently in use. Proper interpretation of such + entries requires examination of the relevant + ipNetToMediaType object." + ::= { ipNetToMediaEntry 4 } + + + -- additional IP objects + + ipRoutingDiscards OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of routing entries which were chosen + to be discarded even though they are valid. One + possible reason for discarding such an entry could + be to free-up buffer space for other routing + entries." + ::= { ip 23 } + + + -- the ICMP group + + -- Implementation of the ICMP group is mandatory for all + -- systems. + + icmpInMsgs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of ICMP messages which the + entity received. Note that this counter includes + all those counted by icmpInErrors." + ::= { icmp 1 } + + icmpInErrors OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP messages which the entity + received but determined as having ICMP-specific + errors (bad ICMP checksums, bad length, etc.)." + ::= { icmp 2 } + + icmpInDestUnreachs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Destination Unreachable + messages received." + ::= { icmp 3 } + + icmpInTimeExcds OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Time Exceeded messages + received." + ::= { icmp 4 } + + + icmpInParmProbs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Parameter Problem messages + received." + ::= { icmp 5 } + + icmpInSrcQuenchs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Source Quench messages + received." + ::= { icmp 6 } + + icmpInRedirects OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Redirect messages received." + ::= { icmp 7 } + + icmpInEchos OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Echo (request) messages + received." + ::= { icmp 8 } + + icmpInEchoReps OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Echo Reply messages received." + ::= { icmp 9 } + + icmpInTimestamps OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Timestamp (request) messages + received." + ::= { icmp 10 } + + icmpInTimestampReps OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Timestamp Reply messages + received." + ::= { icmp 11 } + + icmpInAddrMasks OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Address Mask Request messages + received." + ::= { icmp 12 } + + icmpInAddrMaskReps OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Address Mask Reply messages + received." + ::= { icmp 13 } + + icmpOutMsgs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of ICMP messages which this + entity attempted to send. Note that this counter + includes all those counted by icmpOutErrors." + ::= { icmp 14 } + + icmpOutErrors OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP messages which this entity did + not send due to problems discovered within ICMP + such as a lack of buffers. This value should not + include errors discovered outside the ICMP layer + such as the inability of IP to route the resultant + datagram. In some implementations there may be no + types of error which contribute to this counter's + value." + ::= { icmp 15 } + + icmpOutDestUnreachs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Destination Unreachable + messages sent." + ::= { icmp 16 } + + icmpOutTimeExcds OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Time Exceeded messages sent." + ::= { icmp 17 } + + icmpOutParmProbs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Parameter Problem messages + sent." + ::= { icmp 18 } + + icmpOutSrcQuenchs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Source Quench messages sent." + ::= { icmp 19 } + + icmpOutRedirects OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Redirect messages sent. For a + host, this object will always be zero, since hosts + do not send redirects." + ::= { icmp 20 } + + icmpOutEchos OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Echo (request) messages sent." + ::= { icmp 21 } + + icmpOutEchoReps OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Echo Reply messages sent." + ::= { icmp 22 } + + icmpOutTimestamps OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Timestamp (request) messages + sent." + ::= { icmp 23 } + + icmpOutTimestampReps OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Timestamp Reply messages + sent." + ::= { icmp 24 } + + icmpOutAddrMasks OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Address Mask Request messages + sent." + ::= { icmp 25 } + + + icmpOutAddrMaskReps OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ICMP Address Mask Reply messages + sent." + ::= { icmp 26 } + + + -- the TCP group + + -- Implementation of the TCP group is mandatory for all + -- systems that implement the TCP. + + -- Note that instances of object types that represent + -- information about a particular TCP connection are + -- transient; they persist only as long as the connection + -- in question. + + tcpRtoAlgorithm OBJECT-TYPE + SYNTAX INTEGER { + other(1), -- none of the following + + constant(2), -- a constant rto + rsre(3), -- MIL-STD-1778, Appendix B + vanj(4) -- Van Jacobson's algorithm [10] + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The algorithm used to determine the timeout value + used for retransmitting unacknowledged octets." + ::= { tcp 1 } + + tcpRtoMin OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The minimum value permitted by a TCP + implementation for the retransmission timeout, + measured in milliseconds. More refined semantics + for objects of this type depend upon the algorithm + used to determine the retransmission timeout. In + particular, when the timeout algorithm is rsre(3), + an object of this type has the semantics of the + LBOUND quantity described in RFC 793." + ::= { tcp 2 } + + + tcpRtoMax OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The maximum value permitted by a TCP + implementation for the retransmission timeout, + measured in milliseconds. More refined semantics + for objects of this type depend upon the algorithm + used to determine the retransmission timeout. In + particular, when the timeout algorithm is rsre(3), + an object of this type has the semantics of the + UBOUND quantity described in RFC 793." + ::= { tcp 3 } + + tcpMaxConn OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The limit on the total number of TCP connections + the entity can support. In entities where the + maximum number of connections is dynamic, this + object should contain the value -1." + ::= { tcp 4 } + + tcpActiveOpens OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of times TCP connections have made a + direct transition to the SYN-SENT state from the + CLOSED state." + ::= { tcp 5 } + + tcpPassiveOpens OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of times TCP connections have made a + direct transition to the SYN-RCVD state from the + LISTEN state." + ::= { tcp 6 } + + tcpAttemptFails OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of times TCP connections have made a + direct transition to the CLOSED state from either + the SYN-SENT state or the SYN-RCVD state, plus the + number of times TCP connections have made a direct + transition to the LISTEN state from the SYN-RCVD + state." + ::= { tcp 7 } + + tcpEstabResets OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of times TCP connections have made a + direct transition to the CLOSED state from either + the ESTABLISHED state or the CLOSE-WAIT state." + ::= { tcp 8 } + + tcpCurrEstab OBJECT-TYPE + SYNTAX Gauge + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of TCP connections for which the + current state is either ESTABLISHED or CLOSE- + WAIT." + ::= { tcp 9 } + + tcpInSegs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of segments received, including + those received in error. This count includes + segments received on currently established + connections." + ::= { tcp 10 } + + tcpOutSegs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of segments sent, including + those on current connections but excluding those + containing only retransmitted octets." + ::= { tcp 11 } + + tcpRetransSegs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of segments retransmitted - that + is, the number of TCP segments transmitted + containing one or more previously transmitted + octets." + ::= { tcp 12 } + + + -- the TCP Connection table + + -- The TCP connection table contains information about this + -- entity's existing TCP connections. + + tcpConnTable OBJECT-TYPE + SYNTAX SEQUENCE OF TcpConnEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A table containing TCP connection-specific + information." + ::= { tcp 13 } + + tcpConnEntry OBJECT-TYPE + SYNTAX TcpConnEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Information about a particular current TCP + connection. An object of this type is transient, + in that it ceases to exist when (or soon after) + the connection makes the transition to the CLOSED + state." + INDEX { tcpConnLocalAddress, + tcpConnLocalPort, + tcpConnRemAddress, + tcpConnRemPort } + ::= { tcpConnTable 1 } + + TcpConnEntry ::= + SEQUENCE { + tcpConnState + INTEGER, + tcpConnLocalAddress + IpAddress, + tcpConnLocalPort + INTEGER (0..65535), + tcpConnRemAddress + IpAddress, + tcpConnRemPort + INTEGER (0..65535) + } + + tcpConnState OBJECT-TYPE + SYNTAX INTEGER { + closed(1), + listen(2), + synSent(3), + synReceived(4), + established(5), + finWait1(6), + finWait2(7), + closeWait(8), + lastAck(9), + closing(10), + timeWait(11), + deleteTCB(12) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The state of this TCP connection. + + The only value which may be set by a management + station is deleteTCB(12). Accordingly, it is + appropriate for an agent to return a `badValue' + response if a management station attempts to set + this object to any other value. + + If a management station sets this object to the + value deleteTCB(12), then this has the effect of + deleting the TCB (as defined in RFC 793) of the + corresponding connection on the managed node, + resulting in immediate termination of the + connection. + + As an implementation-specific option, a RST + segment may be sent from the managed node to the + other TCP endpoint (note however that RST segments + are not sent reliably)." + ::= { tcpConnEntry 1 } + + tcpConnLocalAddress OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The local IP address for this TCP connection. In + the case of a connection in the listen state which + is willing to accept connections for any IP + interface associated with the node, the value + 0.0.0.0 is used." + ::= { tcpConnEntry 2 } + + tcpConnLocalPort OBJECT-TYPE + SYNTAX INTEGER (0..65535) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The local port number for this TCP connection." + ::= { tcpConnEntry 3 } + + tcpConnRemAddress OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The remote IP address for this TCP connection." + ::= { tcpConnEntry 4 } + + tcpConnRemPort OBJECT-TYPE + SYNTAX INTEGER (0..65535) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The remote port number for this TCP connection." + ::= { tcpConnEntry 5 } + + + -- additional TCP objects + + tcpInErrs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of segments received in error + (e.g., bad TCP checksums)." + ::= { tcp 14 } + + tcpOutRsts OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of TCP segments sent containing the + RST flag." + ::= { tcp 15 } + + + -- the UDP group + + -- Implementation of the UDP group is mandatory for all + -- systems which implement the UDP. + + udpInDatagrams OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of UDP datagrams delivered to + UDP users." + ::= { udp 1 } + + udpNoPorts OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of received UDP datagrams for + which there was no application at the destination + port." + ::= { udp 2 } + + udpInErrors OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of received UDP datagrams that could + not be delivered for reasons other than the lack + of an application at the destination port." + ::= { udp 3 } + + udpOutDatagrams OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of UDP datagrams sent from this + entity." + ::= { udp 4 } + + + -- the UDP Listener table + + -- The UDP listener table contains information about this + -- entity's UDP end-points on which a local application is + -- currently accepting datagrams. + + udpTable OBJECT-TYPE + SYNTAX SEQUENCE OF UdpEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A table containing UDP listener information." + ::= { udp 5 } + + udpEntry OBJECT-TYPE + SYNTAX UdpEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Information about a particular current UDP + listener." + INDEX { udpLocalAddress, udpLocalPort } + ::= { udpTable 1 } + + UdpEntry ::= + SEQUENCE { + udpLocalAddress + IpAddress, + udpLocalPort + INTEGER (0..65535) + } + + udpLocalAddress OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The local IP address for this UDP listener. In + the case of a UDP listener which is willing to + accept datagrams for any IP interface associated + with the node, the value 0.0.0.0 is used." + ::= { udpEntry 1 } + + udpLocalPort OBJECT-TYPE + SYNTAX INTEGER (0..65535) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The local port number for this UDP listener." + ::= { udpEntry 2 } + + + -- the EGP group + + -- Implementation of the EGP group is mandatory for all + -- systems which implement the EGP. + + egpInMsgs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of EGP messages received without + error." + ::= { egp 1 } + + egpInErrors OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of EGP messages received that proved + to be in error." + ::= { egp 2 } + + egpOutMsgs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of locally generated EGP + messages." + ::= { egp 3 } + + egpOutErrors OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of locally generated EGP messages not + sent due to resource limitations within an EGP + entity." + ::= { egp 4 } + + + -- the EGP Neighbor table + + -- The EGP neighbor table contains information about this + -- entity's EGP neighbors. + + egpNeighTable OBJECT-TYPE + SYNTAX SEQUENCE OF EgpNeighEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "The EGP neighbor table." + ::= { egp 5 } + + egpNeighEntry OBJECT-TYPE + SYNTAX EgpNeighEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Information about this entity's relationship with + a particular EGP neighbor." + INDEX { egpNeighAddr } + ::= { egpNeighTable 1 } + + EgpNeighEntry ::= + SEQUENCE { + egpNeighState + INTEGER, + egpNeighAddr + IpAddress, + egpNeighAs + INTEGER, + egpNeighInMsgs + Counter, + egpNeighInErrs + Counter, + egpNeighOutMsgs + Counter, + egpNeighOutErrs + Counter, + egpNeighInErrMsgs + Counter, + egpNeighOutErrMsgs + Counter, + egpNeighStateUps + Counter, + egpNeighStateDowns + Counter, + egpNeighIntervalHello + INTEGER, + egpNeighIntervalPoll + INTEGER, + egpNeighMode + INTEGER, + egpNeighEventTrigger + INTEGER + } + + egpNeighState OBJECT-TYPE + SYNTAX INTEGER { + idle(1), + acquisition(2), + down(3), + up(4), + cease(5) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The EGP state of the local system with respect to + this entry's EGP neighbor. Each EGP state is + represented by a value that is one greater than + the numerical value associated with said state in + RFC 904." + ::= { egpNeighEntry 1 } + + egpNeighAddr OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The IP address of this entry's EGP neighbor." + ::= { egpNeighEntry 2 } + + egpNeighAs OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The autonomous system of this EGP peer. Zero + should be specified if the autonomous system + number of the neighbor is not yet known." + ::= { egpNeighEntry 3 } + + egpNeighInMsgs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of EGP messages received without error + from this EGP peer." + ::= { egpNeighEntry 4 } + + egpNeighInErrs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of EGP messages received from this EGP + peer that proved to be in error (e.g., bad EGP + checksum)." + ::= { egpNeighEntry 5 } + + egpNeighOutMsgs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of locally generated EGP messages to + this EGP peer." + ::= { egpNeighEntry 6 } + + egpNeighOutErrs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of locally generated EGP messages not + sent to this EGP peer due to resource limitations + within an EGP entity." + ::= { egpNeighEntry 7 } + + egpNeighInErrMsgs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of EGP-defined error messages received + from this EGP peer." + ::= { egpNeighEntry 8 } + + egpNeighOutErrMsgs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of EGP-defined error messages sent to + this EGP peer." + ::= { egpNeighEntry 9 } + + egpNeighStateUps OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of EGP state transitions to the UP + state with this EGP peer." + ::= { egpNeighEntry 10 } + + egpNeighStateDowns OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of EGP state transitions from the UP + state to any other state with this EGP peer." + ::= { egpNeighEntry 11 } + + egpNeighIntervalHello OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The interval between EGP Hello command + retransmissions (in hundredths of a second). This + represents the t1 timer as defined in RFC 904." + ::= { egpNeighEntry 12 } + + egpNeighIntervalPoll OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The interval between EGP poll command + retransmissions (in hundredths of a second). This + represents the t3 timer as defined in RFC 904." + ::= { egpNeighEntry 13 } + + egpNeighMode OBJECT-TYPE + SYNTAX INTEGER { active(1), passive(2) } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The polling mode of this EGP entity, either + passive or active." + ::= { egpNeighEntry 14 } + + egpNeighEventTrigger OBJECT-TYPE + SYNTAX INTEGER { start(1), stop(2) } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "A control variable used to trigger operator- + initiated Start and Stop events. When read, this + variable always returns the most recent value that + egpNeighEventTrigger was set to. If it has not + been set since the last initialization of the + network management subsystem on the node, it + returns a value of `stop'. + + When set, this variable causes a Start or Stop + event on the specified neighbor, as specified on + pages 8-10 of RFC 904. Briefly, a Start event + causes an Idle peer to begin neighbor acquisition + and a non-Idle peer to reinitiate neighbor + acquisition. A stop event causes a non-Idle peer + to return to the Idle state until a Start event + occurs, either via egpNeighEventTrigger or + otherwise." + ::= { egpNeighEntry 15 } + + + -- additional EGP objects + + egpAs OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The autonomous system number of this EGP entity." + ::= { egp 6 } + + -- the Transmission group + + -- Based on the transmission media underlying each interface + -- on a system, the corresponding portion of the Transmission + -- group is mandatory for that system. + + -- When Internet-standard definitions for managing + -- transmission media are defined, the transmission group is + -- used to provide a prefix for the names of those objects. + + -- Typically, such definitions reside in the experimental + -- portion of the MIB until they are "proven", then as a + -- part of the Internet standardization process, the + -- definitions are accordingly elevated and a new object + -- identifier, under the transmission group is defined. By + -- convention, the name assigned is: + -- + -- type OBJECT IDENTIFIER ::= { transmission number } + -- + -- where "type" is the symbolic value used for the media in + -- the ifType column of the ifTable object, and "number" is + -- the actual integer value corresponding to the symbol. + + + -- the SNMP group + + -- Implementation of the SNMP group is mandatory for all + -- systems which support an SNMP protocol entity. Some of + -- the objects defined below will be zero-valued in those + -- SNMP implementations that are optimized to support only + -- those functions specific to either a management agent or + -- a management station. In particular, it should be + -- observed that the objects below refer to an SNMP entity, + -- and there may be several SNMP entities residing on a + -- managed node (e.g., if the node is hosting acting as + -- a management station). + + snmpInPkts OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of Messages delivered to the + SNMP entity from the transport service." + ::= { snmp 1 } + + snmpOutPkts OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP Messages which were + passed from the SNMP protocol entity to the + transport service." + ::= { snmp 2 } + + snmpInBadVersions OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP Messages which were + delivered to the SNMP protocol entity and were for + an unsupported SNMP version." + ::= { snmp 3 } + + snmpInBadCommunityNames OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP Messages delivered to + the SNMP protocol entity which used a SNMP + community name not known to said entity." + ::= { snmp 4 } + + snmpInBadCommunityUses OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP Messages delivered to + the SNMP protocol entity which represented an SNMP + operation which was not allowed by the SNMP + community named in the Message." + ::= { snmp 5 } + + snmpInASNParseErrs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of ASN.1 or BER errors + encountered by the SNMP protocol entity when + decoding received SNMP Messages." + ::= { snmp 6 } + + -- { snmp 7 } is not used + + snmpInTooBigs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP PDUs which were + delivered to the SNMP protocol entity and for + which the value of the error-status field is + `tooBig'." + ::= { snmp 8 } + + snmpInNoSuchNames OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP PDUs which were + delivered to the SNMP protocol entity and for + which the value of the error-status field is + `noSuchName'." + ::= { snmp 9 } + + snmpInBadValues OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP PDUs which were + delivered to the SNMP protocol entity and for + which the value of the error-status field is + `badValue'." + ::= { snmp 10 } + + snmpInReadOnlys OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number valid SNMP PDUs which were + delivered to the SNMP protocol entity and for + which the value of the error-status field is + `readOnly'. It should be noted that it is a + protocol error to generate an SNMP PDU which + contains the value `readOnly' in the error-status + field, as such this object is provided as a means + of detecting incorrect implementations of the + SNMP." + ::= { snmp 11 } + + snmpInGenErrs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP PDUs which were + delivered to the SNMP protocol entity and for + which the value of the error-status field is + `genErr'." + ::= { snmp 12 } + + snmpInTotalReqVars OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of MIB objects which have been + retrieved successfully by the SNMP protocol entity + as the result of receiving valid SNMP Get-Request + and Get-Next PDUs." + ::= { snmp 13 } + + snmpInTotalSetVars OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of MIB objects which have been + altered successfully by the SNMP protocol entity + as the result of receiving valid SNMP Set-Request + PDUs." + ::= { snmp 14 } + + snmpInGetRequests OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP Get-Request PDUs which + have been accepted and processed by the SNMP + protocol entity." + ::= { snmp 15 } + + snmpInGetNexts OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP Get-Next PDUs which have + been accepted and processed by the SNMP protocol + entity." + ::= { snmp 16 } + + snmpInSetRequests OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP Set-Request PDUs which + have been accepted and processed by the SNMP + protocol entity." + ::= { snmp 17 } + + snmpInGetResponses OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP Get-Response PDUs which + have been accepted and processed by the SNMP + protocol entity." + ::= { snmp 18 } + + snmpInTraps OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP Trap PDUs which have + been accepted and processed by the SNMP protocol + entity." + ::= { snmp 19 } + + snmpOutTooBigs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP PDUs which were + generated by the SNMP protocol entity and for + which the value of the error-status field is + `tooBig.'" + ::= { snmp 20 } + + snmpOutNoSuchNames OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP PDUs which were + generated by the SNMP protocol entity and for + which the value of the error-status is + `noSuchName'." + ::= { snmp 21 } + + snmpOutBadValues OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP PDUs which were + generated by the SNMP protocol entity and for + which the value of the error-status field is + `badValue'." + ::= { snmp 22 } + + -- { snmp 23 } is not used + + snmpOutGenErrs OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP PDUs which were + generated by the SNMP protocol entity and for + which the value of the error-status field is + `genErr'." + ::= { snmp 24 } + + snmpOutGetRequests OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP Get-Request PDUs which + have been generated by the SNMP protocol entity." + ::= { snmp 25 } + + snmpOutGetNexts OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP Get-Next PDUs which have + been generated by the SNMP protocol entity." + ::= { snmp 26 } + + snmpOutSetRequests OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP Set-Request PDUs which + have been generated by the SNMP protocol entity." + ::= { snmp 27 } + + snmpOutGetResponses OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP Get-Response PDUs which + have been generated by the SNMP protocol entity." + ::= { snmp 28 } + + snmpOutTraps OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of SNMP Trap PDUs which have + been generated by the SNMP protocol entity." + ::= { snmp 29 } + + snmpEnableAuthenTraps OBJECT-TYPE + SYNTAX INTEGER { enabled(1), disabled(2) } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Indicates whether the SNMP agent process is + permitted to generate authentication-failure + traps. The value of this object overrides any + configuration information; as such, it provides a + means whereby all authentication-failure traps may + be disabled. + + Note that it is strongly recommended that this + object be stored in non-volatile memory so that it + remains constant between re-initializations of the + network management system." + ::= { snmp 30 } + +END diff --git a/ACE/ASNMP/tests/Address_Test.cpp b/ACE/ASNMP/tests/Address_Test.cpp new file mode 100644 index 00000000000..e0bb5598643 --- /dev/null +++ b/ACE/ASNMP/tests/Address_Test.cpp @@ -0,0 +1,550 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// tests +// +// = FILENAME +// Address_Test.cpp +// +// = DESCRIPTION +// Test all the member functions of the Address family: +// GenAddress, MacAddress, IpxAddress, IpAddress, UdpAddress +// all which derive from abstract base class Address. +// +// = AUTHOR +// Michael R. MacFaden +// +// ============================================================================ +/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +Copyright 1997 Cisco Systems, Inc. + +Permission to use, copy, modify, and distribute this software for any +purpose and without fee is hereby granted, provided that this +copyright and permission notice appear on all copies of the software and +supporting documentation, the name of Cisco Systems, Inc. not be used +in advertising or publicity pertaining to distribution of the +program without specific prior permission, and notice be given +in supporting documentation that modification, copying and distribution is by +permission of Cisco Systems, Inc. + +Cisco Systems, Inc. makes no representations about the suitability of this +software for any purpose. THIS SOFTWARE IS PROVIDED ``AS IS'' +AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT +LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGMENT AND +FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL CISCO SYSTEMS, INC. BE +LIABLE FOR ANY DAMAGES ARISING OUT OF THIS LICENSE OR YOUR USE OF THE +SOFTWARE INCLUDING WITHOUT LIMITATION, DIRECT, INDIRECT OR CONSEQUENTIAL +DAMAGES. +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ + +#include "ace/OS_main.h" +#include "ace/OS_NS_string.h" +#include "asnmp/address.h" +#include "test_config.h" + +ACE_RCSID(tests, Address_Test, "$Id$") + +// test the GenAddress interface +/* + */ +static void TestGenAddr() +{ + ACE_DEBUG ((LM_DEBUG, "(%P|%t) GenAddress: Tests: var(expected) [actual]\n")); + + // the constructors and destructors + GenAddress *ga1 = new GenAddress("1.2.3.4"); // use ipv4 address + ACE_ASSERT(ga1->valid() == 1); + GenAddress ga2(*ga1); // copy constructor; + ACE_ASSERT(ga2.valid() == 1); + GenAddress ga3("localhost"); + ACE_ASSERT(ga3.valid() == 1); + GenAddress ga4; // default constructor + ACE_ASSERT(ga4.valid() == 0); + GenAddress ga5; // default constructor + ACE_ASSERT(ga5.valid() == 0); + GenAddress ga6("127.0.0.1:7"); // udp address + ACE_ASSERT(ga6.valid() == 1); + GenAddress ga7("01234567.89ABcDeF0123"); // ipx address + ACE_ASSERT(ga7.valid() == 1); + IpAddress ip("1.2.3.4"); + ACE_ASSERT(ip.valid() == 1); + GenAddress ga8(ip); // Address conversion + ACE_ASSERT(ga8.valid() == 1); + + const char *ptr = (const char *)ga8; + + ACE_ASSERT(ga1 != 0); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) GenAddress:ga1(\"1.2.3.4\") [%s]\n", + ga1->to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) GenAddress:ga2(ga1) [%s]\n", + ga2.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) GenAddress:ga3(\"localhost\") [%s]\n", + ga3.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) GenAddress:ga4(\"\") [%s]\n", + ga4.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) GenAddress:ga6(\"127.0.0.1:7\") [%s]\n", + ga6.to_string())); + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) GenAddress:ga7(\"01234567.89ABcDeF0123\") [%s]\n", + ga7.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) GenAddress:ga8(\"1.2.3.4\") [%s]\n", + ga8.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) GenAddress:ga8(\"1.2.3.4\") [%s]\n", + ptr)); + + // Test Assignment x = y, y = x + ga5 = ga3; // regular assignment + ga3 = ga3; // self assignment + ACE_ASSERT(ga5 == ga3); + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) GenAddress:ga5=ga3(\"localhost\") [%s]\n", + ga5.to_string())); + + addr_type a = ga2.get_type(); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) GenAddress:ga2.get_type(\"0\") [%d]\n", + a)); + // udp address string + a = ga6.get_type(); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) GenAddress:ga2.get_type(\"2\") [%d]\n", + a)); + + // udp address string + a = ga7.get_type(); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) GenAddress:ga2.get_type(\"1\") [%d]\n", + a)); + + delete ga1, ga1 = 0; +} + +/* public methods + IpAddress( const char *inaddr = ""); + IpAddress( const IpAddress &ipaddr); + IpAddress( const GenAddress &genaddr); + ~IpAddress(); + SnmpSyntax& operator=( SnmpSyntax &val); + IpAddress& operator=( const IpAddress &ipaddress); + SnmpSyntax *clone() const; + char *resolve_hostname(int &status); + virtual char *to_string() ; + virtual operator const char *() const; + void mask( const IpAddress& ipaddr); + virtual addr_type get_type() const; + virtual SmiUINT32 get_syntax(); + int is_loopback() const; + int is_multicast() const; + int is_broadcast() const; + int is_arpanet() const; + */ +static void TestIpAddress() +{ + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpAddress: Tests\n")); + + // constructors + GenAddress ga("255.255.255.255"); + IpAddress ia1; + IpAddress ia2("224.2.3.4"); + ACE_ASSERT(ia2.is_multicast()); + ACE_ASSERT(!ia2.is_loopback()); + IpAddress ia3("localhost"); + ACE_ASSERT(ia3.is_loopback()); + ACE_ASSERT(!ia3.is_multicast()); + IpAddress ia4(ia3); + ACE_ASSERT(ia4.is_loopback()); + ACE_ASSERT(!ia4.is_multicast()); + IpAddress ia5(ga); + ACE_ASSERT(ia5.is_broadcast()); + IpAddress ia6 = IpAddress("10.0.0.2"); + ACE_ASSERT(ia6.is_private()); + ACE_ASSERT(!ia6.is_multicast()); + ACE_ASSERT(!ia6.is_loopback()); + + IpAddress ia7("172.16.0.1"); + ACE_ASSERT(ia7.is_private()); + + IpAddress ia8("192.168.0.1"); + ACE_ASSERT(ia8.is_private()); + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpAddress:ia1(\"\") [%s]\n", + ia1.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpAddress:ia2(\"1.2.3.4\") [%s]\n", + ia2.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpAddress:ia3(\"127.0.0.1\") [%s]\n", + ia3.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpAddress:ia4(\"ia3\") [%s]\n", + ia4.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpAddress:ia5(\"255.255.255.255\") [%s]\n", + ia5.to_string())); + + // other routines + int status = 1; + const char *ptr = ia5.resolve_hostname(status); + ACE_ASSERT(status == 0); + ACE_ASSERT(ptr != 0); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpAddress:ia5.resolve_hostname():(\"\") [%s]\n", + ptr)); + + // now lets try one we setup with a hostname + ptr = ia3.resolve_hostname(status); + ACE_ASSERT(status == 0); + ACE_ASSERT(ptr != 0); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpAddress:ia3.resolve_hostname()(\"localhost\") [%s]\n", + ptr)); + + ptr = (const char *)ia5; + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpAddress:(const char *)(\"255.255.255.255\") [%s]\n", + ptr)); + + ia2 = ia3; + ACE_ASSERT(ia2 == ia3); + + ia4.mask(ia3); // mask with equal value should return same + ACE_ASSERT(ia2 == ia3); + + ACE_ASSERT(ia1.get_type() == type_ip); + ACE_ASSERT(ia1.valid() == 0); + ACE_ASSERT(ia2.get_type() == type_ip); + ACE_ASSERT(ia2.valid() == 1); + ACE_ASSERT(ia3.get_type() == type_ip); + ACE_ASSERT(ia3.valid() == 1); + ACE_ASSERT(ia4.get_type() == type_ip); + ACE_ASSERT(ia4.valid() == 1); + ACE_ASSERT(ia5.get_type() == type_ip); + ACE_ASSERT(ia5.valid() == 1); +} + + +// --------------- Netbios --------------- +/* + NetbiosAddress( const char *inaddr = ""); + NetbiosAddress( const NetbiosAddress& nbaddr); + NetbiosAddress( const GenAddress& genaddr); + ~NetbiosAddress(); + virtual char *to_string(); + NetbiosAddress& operator=( const NetbiosAddress &nbaddr); + nb_service get_service_type() const; + void set_service_type(nb_service nbservice); + virtual operator const char *() const; + virtual SmiUINT32 get_syntax(); + SnmpSyntax& operator=( SnmpSyntax &val); + SnmpSyntax *clone() const; + */ +static void TestNetbiosAddress() +{ + NetbiosAddress n1; + ACE_ASSERT(n1.valid() == 0); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) NetbiosAddress:n1(\"\") [%s]\n", + n1.to_string())); + + NetbiosAddress n2(n1); + ACE_ASSERT(n2.valid() == 0); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) NetbiosAddress:n2(n1) [%s]\n", + n2.to_string())); + + NetbiosAddress n3("pcname"); + ACE_ASSERT(n3.valid() == 1); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) NetbiosAddress:n3(\"pcname\") [%s]\n", + n3.to_string())); + + NetbiosAddress n4("abcdefghigjklmn"); + n4.set_service_type(nb_workstation); + ACE_ASSERT(n4.valid() == 1); + ACE_ASSERT(n4.get_service_type() == nb_workstation); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) NetbiosAddress:n4(\"abcdefghigjklmn\") [%s]\n", + n4.to_string())); + + NetbiosAddress n5("abcdefghigjklmno0xx"); + ACE_ASSERT(n5.valid() == 0); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) NetbiosAddress:n4(\"abcdefghigjklmno0xx\") [%s]\n", + n5.to_string())); + + n1 = n4; + ACE_ASSERT(n1 == n4); + ACE_ASSERT(ACE_OS::strcmp((const char *)n1, (const char *)n4) == 0); + + n1.set_service_type(nb_server); + ACE_ASSERT(nb_server == n1.get_service_type()); +} + +// --------------- IPX --------------- +/* + IpxAddress( void); + IpxAddress( const char *inaddr); + IpxAddress( const IpxAddress &ipxaddr); + IpxAddress( const GenAddress &genaddr); + ~IpxAddress(); + virtual SmiUINT32 get_syntax(); + SnmpSyntax& operator=( SnmpSyntax &val); + IpxAddress& operator=( const IpxAddress &ipxaddress); + int get_hostid( MacAddress& mac); + SnmpSyntax *clone() const; + virtual operator const char *() const; + virtual addr_type get_type() const; + +Ipx Address semantics: Total length must be 21 +// Must have a separator in it +// First string length must be 8 +// Second string length must be 12 +// Each char must take on value 0-F +// +// +// Input formats recognized +// +// XXXXXXXX.XXXXXXXXXXXX +// XXXXXXXX:XXXXXXXXXXXX +// XXXXXXXX-XXXXXXXXXXXX +// XXXXXXXX.XXXXXX-XXXXXX +// XXXXXXXX:XXXXXX-XXXXXX +// XXXXXXXX-XXXXXX-XXXXXX + + */ + +static void TestIpxAddress() +{ + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpxAddress: Tests\n")); + IpxAddress xa1; + ACE_ASSERT(xa1.valid() == 0); + ACE_ASSERT(xa1.get_type() == type_ipx); + GenAddress gen("01234567.0123456789AB"); + ACE_ASSERT(gen.valid() == 1); + IpxAddress xa2("01234567.0123456789AB"); + ACE_ASSERT(xa2.get_type() == type_ipx); + ACE_ASSERT(xa2.valid() == 1); + IpxAddress xa3("01234567:0123456789AB"); + ACE_ASSERT(xa3.get_type() == type_ipx); + ACE_ASSERT(xa3.valid() == 1); + IpxAddress xa4("01234567-0123456789AB"); + ACE_ASSERT(xa4.get_type() == type_ipx); + ACE_ASSERT(xa4.valid() == 1); + IpxAddress xa5("01234567.012345-6789AB"); + ACE_ASSERT(xa5.get_type() == type_ipx); + ACE_ASSERT(xa5.valid() == 1); + IpxAddress xa6("01234567:012345-6789AB"); + ACE_ASSERT(xa6.get_type() == type_ipx); + ACE_ASSERT(xa6.valid() == 1); + IpxAddress xa7("01234567-012345-6789AB"); + ACE_ASSERT(xa7.get_type() == type_ipx); + ACE_ASSERT(xa7.valid() == 1); + IpxAddress xa8("01234567."); + ACE_ASSERT(xa8.get_type() == type_ipx); + ACE_ASSERT(xa8.valid() == 0); + IpxAddress xa9(gen); + ACE_ASSERT(xa9.valid() == 1); + IpxAddress *xa10 = new IpxAddress(xa9); + ACE_ASSERT(xa10->get_type() == type_ipx); + ACE_ASSERT(xa10->valid() == 1); + delete xa10; + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpxAddress:xa1(\"\") [%s]\n", + xa1.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpxAddress:xa2(\"01234567.0123456789AB\") [%s]\n", + xa2.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpxAddress:xa3(\"01234567:0123456789A\") [%s]\n", + xa3.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpxAddress:xa4(\"01234567-0123456789AB\") [%s]\n", + xa4.to_string())); + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpxAddress:xa5(\"01234567.012345-6789AB\") [%s]\n", + xa5.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpxAddress:xa6(\"01234567:012345-6789AB\") [%s]\n", + xa6.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpxAddress:xa7(\"01234567-012345-6789AB\") [%s]\n", + xa7.to_string())); + + // assignment + xa1 = xa3; + ACE_ASSERT(xa1 == xa3); + MacAddress mac; + ACE_ASSERT(xa4.get_hostid(mac) == 1); + ACE_ASSERT(mac.valid() == 1); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpxAddress:xa4:get_hostid(\"01:23:45:67:89:ab\") [%s]\n", mac.to_string())); + + const char *ptr = (const char *)xa7; + ACE_DEBUG ((LM_DEBUG, "(%P|%t) IpxAddress:xa7-ptr(\"01234567-012345-6789AB\") [%s]\n", ptr)); + +} + +/* + MacAddress( void); + + MacAddress( const char *inaddr); + MacAddress( const MacAddress &macaddr); + MacAddress( const GenAddress &genaddr); + ~MacAddress(); +* SmiUINT32 get_syntax(); +* SnmpSyntax& operator=( SnmpSyntax &val); + MacAddress& operator=( const MacAddress &macaddress); +* SnmpSyntax *clone() const; + virtual char *to_string(); + virtual operator const char *() const; + virtual addr_type get_type() const; + unsigned int hashFunction() const; + +// MAC address format +// +// MAC ADDRESS +// 01 02 03 04 05 06 +// XX:XX:XX:XX:XX:XX +// Valid input format +// +// XXXXXXXXXXXX +// Total length must be 17 +// Each char must take on value 0-F +// + +*/ + +static void TestMacAddress() +{ + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) MacAddress: Tests\n")); + + MacAddress ma1; + ACE_ASSERT(ma1.valid() == 0); + ACE_ASSERT(ma1.get_type() == type_mac); + MacAddress ma2("01:23:45:67:89:AB"); + ACE_ASSERT(ma2.valid() == 1); + ACE_ASSERT(ma2.get_type() == type_mac); + MacAddress ma3("0123456789ABCEFGHI"); // invalid string + ACE_ASSERT(ma3.valid() == 0); + ACE_ASSERT(ma3.get_type() == type_mac); + GenAddress ga("01:23:45:67:89:AB"); // mac address + MacAddress ma4(ma2); + ACE_ASSERT(ma4.valid() == 1); + ACE_ASSERT(ma4.get_type() == type_mac); + MacAddress ma5(ga); + ACE_ASSERT(ma5.valid() == 0); + ACE_ASSERT(ma5.get_type() == type_mac); + + ma1 = ma2; + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) MacAddress:ma1(\"01:23:45:67:89:AB\") [%s]\n", + ma1.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) MacAddress:ma2(\"01:23:45:67:89:AB\") [%s]\n", + ma2.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) MacAddress:ma3(\"\") [%s]\n", + ma3.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) MacAddress:ma4(\"01:23:45:67:89:AB\") [%s]\n", + ma4.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) MacAddress:ma5(\"\") [%s]\n", + ma5.to_string())); + const char * ptr = (const char *)ma5; + ACE_DEBUG ((LM_DEBUG, "(%P|%t) MacAddress:ma5(\"\") [%s]\n", + ptr)); + + // hashFunction crashes if not usedwith valid fn + int x = ma2.hashFunction(); + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) MacAddress:ma2.hashFunction(\"483201\") [%d]\n", + x)); +} + +/* + UdpAddress( void); + UdpAddress( const char *inaddr); + UdpAddress( const UdpAddress &udpaddr); + UdpAddress( const GenAddress &genaddr); + UdpAddress( const IpAddress &ipaddr); + ~UdpAddress(); + SmiUINT32 get_syntax(); + SnmpSyntax& operator=( SnmpSyntax &val); + UdpAddress& operator=( const UdpAddress &udpaddr); + SnmpSyntax *clone() const; + virtual char *to_string() ; + virtual operator const char *() const; + void set_port( const unsigned short p); + unsigned short get_port() const; + virtual addr_type get_type() const; + + // look for port info @ the end of the string + // port can be delineated by a ':' or a '/' + // if neither are present then just treat it + // like a normal IpAddress + + */ + +static void TestUdpAddress() +{ + ACE_DEBUG ((LM_DEBUG, "(%P|%t) UdpAddress: Tests\n")); + + UdpAddress ua1; + ACE_ASSERT(ua1.valid() == 0); + ACE_ASSERT(ua1.get_type() == type_udp); + + // semantics of not setting the port here are bizzare? + UdpAddress ua2("127.0.0.1:161"); + ACE_ASSERT(ua2.valid() == 1); + ACE_ASSERT(ua2.get_type() == type_udp); + + UdpAddress ua3(ua2); + ACE_ASSERT(ua3.valid() == 1); + ACE_ASSERT(ua3.get_type() == type_udp); + + GenAddress ga("localhost"); + UdpAddress ua4(ga); + ACE_ASSERT(ua4.valid() == 1); + ACE_ASSERT(ua4.get_type() == type_udp); + + IpAddress ia("localhost"); + UdpAddress ua5(ga); + ACE_ASSERT(ua5.valid() == 1); + ACE_ASSERT(ua5.get_type() == type_udp); + + UdpAddress *ua6 = new UdpAddress("localhost:161"); + ACE_ASSERT(ua6->valid() == 1); + ACE_ASSERT(ua6->get_type() == type_udp); + + UdpAddress ua7 = UdpAddress("localhost/162"); + ACE_ASSERT(ua7.valid() == 1); + ACE_ASSERT(ua7.get_type() == type_udp); + + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) UdpAddress:ua1(\"\") [%s]\n", + ua1.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) UdpAddress:ua2(\"127.0.0.1:161\") [%s]\n", + ua2.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) UdpAddress:ua3(ua2)(\"127.0.0.1:161\") [%s]\n", + ua3.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) UdpAddress:ua4(GenAddress)(\"127.0.0.1\") [%s]\n", + ua4.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) UdpAddress:ua5(IpAddress)(\"127.0.0.1\") [%s]\n", + ua5.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) UdpAddress:ua6()(\"localhost:161\") [%s]\n", + ua6->to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) UdpAddress:ua7()(\"localhost/162\") [%s]\n", + ua7.to_string())); + + delete ua6; // destructor + + // assignement tests. + ua1 = ua2; + ACE_ASSERT(ua1 == ua2); + ACE_ASSERT(ua1.valid() == 1); + ua1 = ua1; + ACE_ASSERT(ua1 == ua1); + ACE_ASSERT(ua1.valid() == 1); + + // set/get port + ua1.set_port(333); + ACE_ASSERT(ua1.get_port() == 333); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) UdpAddress:ua1.set_port()(\"333\") [%s]\n", + (const char *)ua1)); + +} + +int +ACE_TMAIN (int, ACE_TCHAR *[]) +{ + ACE_START_TEST (ACE_TEXT ("Address_Test")); + + TestGenAddr(); + TestIpAddress(); + TestUdpAddress(); + TestMacAddress(); + TestNetbiosAddress(); + TestIpxAddress(); + + ACE_END_TEST; + return 0; +} diff --git a/ACE/ASNMP/tests/Counter64_Test.cpp b/ACE/ASNMP/tests/Counter64_Test.cpp new file mode 100644 index 00000000000..f0b9ee8ad56 --- /dev/null +++ b/ACE/ASNMP/tests/Counter64_Test.cpp @@ -0,0 +1,156 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// tests +// +// = FILENAME +// Counter64_Test.cpp +// +// = DESCRIPTION +// Test all the member functions of the Counter64 class. An Object +// representing an ASN.1 Counter64 SMI 64 bit Integer SYNTAX. +// (SNMPv2c) +// = AUTHOR +// Michael R. MacFaden +// +// ============================================================================ +/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +Copyright 1997 Cisco Systems, Inc. + +Permission to use, copy, modify, and distribute this software for any +purpose and without fee is hereby granted, provided that this +copyright and permission notice appear on all copies of the software and +supporting documentation, the name of Cisco Systems, Inc. not be used +in advertising or publicity pertaining to distribution of the +program without specific prior permission, and notice be given +in supporting documentation that modification, copying and distribution is by +permission of Cisco Systems, Inc. + +Cisco Systems, Inc. makes no representations about the suitability of this +software for any purpose. THIS SOFTWARE IS PROVIDED ``AS IS'' +AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT +LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGMENT AND +FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL CISCO SYSTEMS, INC. BE +LIABLE FOR ANY DAMAGES ARISING OUT OF THIS LICENSE OR YOUR USE OF THE +SOFTWARE INCLUDING WITHOUT LIMITATION, DIRECT, INDIRECT OR CONSEQUENTIAL +DAMAGES. +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ + +#include "ace/OS_main.h" +#include "asnmp/ctr64.h" +#include "test_config.h" + +ACE_RCSID(tests, Counter64_Test, "$Id$") + +// TODO: verify this with ACE folks +#if defined(_WIN32) +#define LLONG __int64 +#define ULLONG unsigned __int64 +#else +#define LLONG long long +#define ULLONG unsigned long long +#endif + +/* + Counter64( unsigned long long llw = 0); + Counter64( unsigned long hiparm, unsigned long loparm); + Counter64( const Counter64 &ctr64); + ~Counter64(); + SmiUINT32 get_syntax(); + long double to_long_double() const; + Counter64& assign( long double ld); + unsigned long high() const; + unsigned long low() const; + void set_high( const unsigned long h); + void set_low( const unsigned long l); + Counter64& operator=( const unsigned long long rhs); + Counter64& operator=( const Counter64 &rhs); + char *to_string(); + SnmpSyntax *clone() const; + SnmpSyntax& operator=( SnmpSyntax &val); + int valid() const; + operator unsigned long long(); + */ + +static void TestCounter64() +{ +#if !defined (ACE_WIN32) + static unsigned long ul = ULONG_MAX; + LLONG ll = (LLONG) 0x7fffffffffffffffLL; + LLONG mll = (LLONG) ((-ll) - 1); + ULLONG ull = (ULLONG) 0xffffffffffffffffULL; + long double ld = (LLONG) ll; + + cerr << "max unsigned long long is " << ull << endl; + cerr << "max long long is " << ll << endl; + cerr << "min long long is " << mll << endl; + + Counter64 c1; + ACE_ASSERT(c1.valid() == 1); + Counter64 c2(ul, ul); + ACE_ASSERT(c2.valid() == 1); + ACE_ASSERT(c2.high() == ul); + ACE_ASSERT(c2.low() == ul); + + Counter64 c3(ul); + ACE_ASSERT(c3.valid() == 1); + ACE_ASSERT(c3.low() == ul); + + Counter64 c4(c2); + ACE_ASSERT(c4.valid() == 1); + ACE_ASSERT(c4.high() == ul); + ACE_ASSERT(c4.low() == ul); + + Counter64 c5(0); + ACE_ASSERT(c5.valid() == 1); + + Counter64 c6; + c6.assign(ld); + ACE_ASSERT(c6.to_long_double() == ld); + + Counter64 c7(ull); + ACE_ASSERT(c7 == ull); + + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) c1(\"\") [%s]\n", + c1.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) c2(LONG_MAX,LONG_MAX) [%s]\n", + c2.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) c3(LONG_MAX) [%s]\n", + c3.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) c4(c2) [%s]\n", + c4.to_string())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) c5(0) [%s]\n", + c5.to_string())); + + // misc routines + c1.set_low(1); + c1.set_high(2); + ACE_ASSERT(c1.low() == 1); + ACE_ASSERT(c1.high() == 2); + // assignment + c5 = c4; + ACE_ASSERT(c5 == c4); + c4 = c4; + ACE_ASSERT(c5 == c4); + c5 = ll; + ACE_ASSERT(c5 == static_cast (ll)); + // try simple arithmetic (needs more test cases) + c5 = mll; + c5 = c5 + (ULLONG) 10; + ACE_ASSERT(c5 == static_cast (mll + 10)); +#endif /*ACE_WIN32 */ +} + +int +ACE_TMAIN (int, ACE_TCHAR *[]) +{ + ACE_START_TEST (ACE_TEXT ("Counter64_Test")); + + TestCounter64(); + + ACE_END_TEST; + return 0; +} diff --git a/ACE/ASNMP/tests/Counter_Test.cpp b/ACE/ASNMP/tests/Counter_Test.cpp new file mode 100644 index 00000000000..c6b4b4c9b72 --- /dev/null +++ b/ACE/ASNMP/tests/Counter_Test.cpp @@ -0,0 +1,136 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// tests +// +// = FILENAME +// Counter_Test.cpp +// +// = DESCRIPTION +// Test all the member functions of the Counter class. An Object +// representing an ASN.1 Counter SMI COUNTER SYNTAX. +// = AUTHOR +// Michael R. MacFaden +// +// ============================================================================ +/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +Copyright 1997 Cisco Systems, Inc. + +Permission to use, copy, modify, and distribute this software for any +purpose and without fee is hereby granted, provided that this +copyright and permission notice appear on all copies of the software and +supporting documentation, the name of Cisco Systems, Inc. not be used +in advertising or publicity pertaining to distribution of the +program without specific prior permission, and notice be given +in supporting documentation that modification, copying and distribution is by +permission of Cisco Systems, Inc. + +Cisco Systems, Inc. makes no representations about the suitability of this +software for any purpose. THIS SOFTWARE IS PROVIDED ``AS IS'' +AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT +LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGMENT AND +FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL CISCO SYSTEMS, INC. BE +LIABLE FOR ANY DAMAGES ARISING OUT OF THIS LICENSE OR YOUR USE OF THE +SOFTWARE INCLUDING WITHOUT LIMITATION, DIRECT, INDIRECT OR CONSEQUENTIAL +DAMAGES. +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ + +#include "ace/OS_main.h" +#include "asnmp/counter.h" +#include "test_config.h" + +ACE_RCSID(tests, Counter_Test, "$Id$") + +/* + Counter32( void); + Counter32( const unsigned long i); + Counter32( const Counter32 &c); +* SmiUINT32 get_syntax(); +* SnmpSyntax *clone() const; +* SnmpSyntax& operator=( SnmpSyntax &val); + Counter32& operator=( const Counter32 &uli); + Counter32& operator=( const unsigned long i); + operator unsigned long(); + + -- comments tyis type appears to be a wrapper class and not + a true SNMP counter. Practical for nms side,yet may lead to + some confusion if implementing an agent with this class. + + Per RFC 1155 sec 3.2.3.3 + This application-wide type represents a non-negative integer which + monotonically increases until it reaches a maximum value, when it + wraps around and starts increasing again from zero. This memo + specifies a maximum value of 2^32-1 for counters +*/ + +static void TestCounter() +{ +#if !defined (ACE_WIN32) + long l = LONG_MAX, nl = LONG_MIN; // limits.h + unsigned long ul = ULONG_MAX, def = 0; + int i = INT_MAX, ni = INT_MIN; + unsigned int ui = UINT_MAX; + unsigned short us = 10; + short si = static_cast (65535); + + // constructors + Counter32 c1; + ACE_ASSERT(c1 == def); + Counter32 c2(l); + ACE_ASSERT(c2 == static_cast (l)); + Counter32 c3(nl); + ACE_ASSERT(c3 == static_cast (nl)); + Counter32 c4(ul); + ACE_ASSERT(c4 == ul); + Counter32 c5(i); + ACE_ASSERT(c5 == static_cast (i)); + Counter32 c6(ni); + ACE_ASSERT(c6 == static_cast (ni)); + Counter32 c7(ui); + ACE_ASSERT(c7 == ui); + Counter32 *c8 = new Counter32(c5); + ACE_ASSERT(c8 != 0); + delete c8; + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) c1(\"\") [%u]\n", + (unsigned long)c1)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) c2(\"%u\") [%u]\n", + l, (unsigned long)c2)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) c3(\"%u\") [%u]\n", + nl, (unsigned long)c3)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) c4(\"%u\") [%u]\n", + ul, (unsigned long)c4)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) c5(\"%u\") [%u]\n", + i, (unsigned long)c5)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) c6(\"%u\") [%u]\n", + ni, (unsigned long)c6)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) c7(\"%u\") [%u]\n", + ui, (unsigned long)c7)); + + // assignent + c1 = c2; // obj + ACE_ASSERT(c1 == c2); + c1 = c1; // self + ACE_ASSERT(c1 == c1); + c1 = def; // unsigned long + ACE_ASSERT(c1 == def); + c1 = us; // unsigned short + ACE_ASSERT(c1 == static_cast (us)); + c1 = si; // unsigned short + ACE_ASSERT(c1 == static_cast (si)); +#endif /*ACE_WIN32*/ +} + + +int +ACE_TMAIN (int, ACE_TCHAR *[]) +{ + ACE_START_TEST (ACE_TEXT ("Counter_Test")); + + TestCounter(); + + ACE_END_TEST; + return 0; +} diff --git a/ACE/ASNMP/tests/Gauge_Test.cpp b/ACE/ASNMP/tests/Gauge_Test.cpp new file mode 100644 index 00000000000..45a4ac279e7 --- /dev/null +++ b/ACE/ASNMP/tests/Gauge_Test.cpp @@ -0,0 +1,133 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// tests +// +// = FILENAME +// Guage_Test.cpp +// +// = DESCRIPTION +// Test all the member functions of the Guage class. An Object +// representing an ASN.1 Counter SMI GUAGE SYNTAX. +// = AUTHOR +// Michael R. MacFaden +// +// ============================================================================ +/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +Copyright 1997 Cisco Systems, Inc. + +Permission to use, copy, modify, and distribute this software for any +purpose and without fee is hereby granted, provided that this +copyright and permission notice appear on all copies of the software and +supporting documentation, the name of Cisco Systems, Inc. not be used +in advertising or publicity pertaining to distribution of the +program without specific prior permission, and notice be given +in supporting documentation that modification, copying and distribution is by +permission of Cisco Systems, Inc. + +Cisco Systems, Inc. makes no representations about the suitability of this +software for any purpose. THIS SOFTWARE IS PROVIDED ``AS IS'' +AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT +LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGMENT AND +FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL CISCO SYSTEMS, INC. BE +LIABLE FOR ANY DAMAGES ARISING OUT OF THIS LICENSE OR YOUR USE OF THE +SOFTWARE INCLUDING WITHOUT LIMITATION, DIRECT, INDIRECT OR CONSEQUENTIAL +DAMAGES. +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ + +#include "ace/OS_main.h" +#include "asnmp/gauge.h" +#include "test_config.h" + +ACE_RCSID (tests, + Gauge_Test, + "$Id$") + +/* + Gauge32( void); + Gauge32( const unsigned long i); + Gauge32 ( const Gauge32 &g); + ~Gauge32(); + SmiUINT32 get_syntax(); + SnmpSyntax *clone() const; + Gauge32& operator=( const Gauge32 &uli); + Gauge32& operator=( const unsigned long i); + operator unsigned long(); + SnmpSyntax& operator=( SnmpSyntax &val); + +-- What is a Gauge? According to RFC 1155 section: 3.2.3.4 + This application-wide type represents a non-negative integer + which may increase or decrease, but which latches at a maximum + value of 2^32-1 (4294967295 dec) for gauges. + */ +static void +TestGuage (void) +{ +#if !defined (ACE_WIN32) + long l = LONG_MAX, nl = LONG_MIN; // limits.h + unsigned long ul = ULONG_MAX, def = 0; + int i = INT_MAX, ni = INT_MIN; + unsigned int ui = UINT_MAX; + unsigned short us = 10; + short si = static_cast (65535); + + // constructors + Gauge32 g1; + ACE_ASSERT(g1 == def); + Gauge32 g2(l); + ACE_ASSERT(g2 == static_cast (l)); + Gauge32 g3(nl); + ACE_ASSERT(g3 == static_cast (nl)); + Gauge32 g4(ul); + ACE_ASSERT(g4 == ul); + Gauge32 g5(i); + ACE_ASSERT(g5 == static_cast (i)); + Gauge32 g6(ni); + ACE_ASSERT(g6 == static_cast (ni)); + Gauge32 g7(ui); + ACE_ASSERT(g7 == ui); + Gauge32 *g8 = new Gauge32(g5); + ACE_ASSERT(g8 != 0); + delete g8; + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) g1(\"\") [%u]\n", + (unsigned long)g1)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) g2(\"%u\") [%u]\n", + l, (unsigned long)g2)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) g3(\"%u\") [%u]\n", + nl, (unsigned long)g3)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) g4(\"%u\") [%u]\n", + ul, (unsigned long)g4)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) g5(\"%u\") [%u]\n", + i, (unsigned long)g5)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) g6(\"%u\") [%u]\n", + ni, (unsigned long)g6)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) g7(\"%u\") [%u]\n", + ui, (unsigned long)g7)); + + // assignent + g1 = g2; // obj + ACE_ASSERT(g1 == g2); + g1 = g1; // self + ACE_ASSERT(g1 == g1); + g1 = def; // unsigned long + ACE_ASSERT(g1 == def); + g1 = us; // unsigned short + ACE_ASSERT(g1 == static_cast (us)); + g1 = si; // unsigned short + ACE_ASSERT(g1 == static_cast (si)); +#endif /*ACE_WIN32*/ +} + +int +ACE_TMAIN (int, ACE_TCHAR *[]) +{ + ACE_START_TEST (ACE_TEXT ("Gauge_Test")); + + TestGuage(); + + ACE_END_TEST; + return 0; +} diff --git a/ACE/ASNMP/tests/Integer_Test.cpp b/ACE/ASNMP/tests/Integer_Test.cpp new file mode 100644 index 00000000000..8cea7e33f1b --- /dev/null +++ b/ACE/ASNMP/tests/Integer_Test.cpp @@ -0,0 +1,200 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// tests +// +// = FILENAME +// Integer_Test.cpp +// +// = DESCRIPTION +// Test all the member functions of the Integer class. An Object +// representing an ASN.1 Integer64 SMI 32 bit Integer SYNTAX. +// +// = AUTHOR +// Michael R. MacFaden +// +// ============================================================================ +/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +Copyright 1997 Cisco Systems, Inc. + +Permission to use, copy, modify, and distribute this software for any +purpose and without fee is hereby granted, provided that this +copyright and permission notice appear on all copies of the software and +supporting documentation, the name of Cisco Systems, Inc. not be used +in advertising or publicity pertaining to distribution of the +program without specific prior permission, and notice be given +in supporting documentation that modification, copying and distribution is by +permission of Cisco Systems, Inc. + +Cisco Systems, Inc. makes no representations about the suitability of this +software for any purpose. THIS SOFTWARE IS PROVIDED ``AS IS'' +AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT +LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGMENT AND +FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL CISCO SYSTEMS, INC. BE +LIABLE FOR ANY DAMAGES ARISING OUT OF THIS LICENSE OR YOUR USE OF THE +SOFTWARE INCLUDING WITHOUT LIMITATION, DIRECT, INDIRECT OR CONSEQUENTIAL +DAMAGES. +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ + +#include "ace/OS_main.h" +#include "asnmp/integer.h" +#include "test_config.h" + +ACE_RCSID (tests, + Integer_Test, + "$Id$") + +#if !defined (ACE_WIN32) +static long l = LONG_MAX, nl = LONG_MIN; // limits.h +static unsigned long ul = ULONG_MAX, def = 0; +static int i = INT_MAX, ni = INT_MIN; +static unsigned int ui = UINT_MAX; +static unsigned short us = 10; +static unsigned short si = 32768; + #endif /*ACE_WIN32*/ + +/* + SnmpInt32( void); + SnmpInt32 (const long i); + SnmpInt32 (const SnmpInt32 &c); + virtual ~SnmpInt32(); + virtual SmiUINT32 get_syntax(); + SnmpInt32& operator=( const long i); + SnmpInt32& operator=( const SnmpInt32 &li); + operator long(); + char *to_string(); + SnmpSyntax *clone() const; + SnmpSyntax& operator=( SnmpSyntax &val); + int valid() const; + */ + +static void TestInteger32() +{ +#if !defined (ACE_WIN32) + // constructors + SnmpInt32 i1; + ACE_ASSERT(i1 == static_cast (def)); + SnmpInt32 i2(l); + ACE_ASSERT(i2 == l); + SnmpInt32 i3(nl); + ACE_ASSERT(i3 == nl); + SnmpInt32 i4(ul); + ACE_ASSERT(i4 == static_cast (ul)); + SnmpInt32 i5(i); + ACE_ASSERT(i5 == i); + SnmpInt32 i6(ni); + ACE_ASSERT(i6 == ni); + SnmpInt32 i7(ui); + ACE_ASSERT(i7 == static_cast (ui)); + SnmpInt32 *i8 = new SnmpInt32(i5); + ACE_ASSERT(i8 != 0); + delete i8; + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) i1(\"\") [%u]\n", + (unsigned long)i1)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) i2(\"%u\") [%u]\n", + l, (unsigned long)i2)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) i3(\"%u\") [%u]\n", + nl, (unsigned long)i3)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) i4(\"%u\") [%u]\n", + ul, (unsigned long)i4)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) i5(\"%u\") [%u]\n", + i, (unsigned long)i5)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) i6(\"%u\") [%u]\n", + ni, (unsigned long)i6)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) i7(\"%u\") [%u]\n", + ui, (unsigned long)i7)); + + // assignent + i1 = i2; // obj + ACE_ASSERT(i1 == i2); + i1 = i1; // self + ACE_ASSERT(i1 == i1); + i1 = def; // unsigned long + ACE_ASSERT(i1 == static_cast (def)); + i1 = us; // unsigned short + ACE_ASSERT(i1 == static_cast (us)); + i1 = si; // unsigned short + ACE_ASSERT(i1 == static_cast (si)); + #endif /*ACE_WIN32*/ +} + +/* + SnmpUInt32( void); + SnmpUInt32 (const unsigned long i); + SnmpUInt32( const SnmpUInt32 &c); + virtual ~SnmpUInt32(); + virtual SmiUINT32 get_syntax(); + SnmpUInt32& operator=( const unsigned long i); + SnmpUInt32& operator=( const SnmpUInt32 &uli); + operator unsigned long(); + virtual char *to_string(); + virtual SnmpSyntax *clone() const; + SnmpSyntax& operator=( SnmpSyntax &val); + int valid() const; + */ +static void TestUnsignedInteger32() +{ +#if !defined (ACE_WIN32) + // constructors + SnmpUInt32 u1; + ACE_ASSERT(u1 == def); + SnmpUInt32 u2(l); + ACE_ASSERT(u2 == static_cast (l)); + SnmpUInt32 u3(nl); + ACE_ASSERT(u3 == static_cast (nl)); + SnmpUInt32 u4(ul); + ACE_ASSERT(u4 == ul); + SnmpUInt32 u5(i); + ACE_ASSERT(u5 == static_cast (i)); + SnmpUInt32 u6(ni); + ACE_ASSERT(u6 == static_cast (ni)); + SnmpUInt32 u7(ui); + ACE_ASSERT(u7 == ui); + SnmpUInt32 *u8 = new SnmpUInt32(u5); + ACE_ASSERT(u8 != 0); + delete u8; + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) u1(\"\") [%u]\n", + (unsigned long)u1)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) u2(\"%u\") [%u]\n", + l, (unsigned long)u2)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) u3(\"%u\") [%u]\n", + nl, (unsigned long)u3)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) u4(\"%u\") [%u]\n", + ul, (unsigned long)u4)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) u5(\"%u\") [%u]\n", + i, (unsigned long)u5)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) u6(\"%u\") [%u]\n", + ni, (unsigned long)u6)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) u7(\"%u\") [%u]\n", + ui, (unsigned long)u7)); + + // assignent + u1 = u2; // obj + ACE_ASSERT(u1 == u2); + u1 = u1; // self + ACE_ASSERT(u1 == u1); + u1 = def; // unsigned long + ACE_ASSERT(u1 == def); + u1 = us; // unsigned short + ACE_ASSERT(u1 == static_cast (us)); + u1 = si; // unsigned short + ACE_ASSERT(u1 == static_cast (si)); +#endif /*ACE_WIN32 */ +} + +int +ACE_TMAIN (int, ACE_TCHAR *[]) +{ + ACE_START_TEST (ACE_TEXT ("Integer_Test")); + + TestInteger32(); + + TestUnsignedInteger32(); + + ACE_END_TEST; + return 0; +} diff --git a/ACE/ASNMP/tests/Makefile.am b/ACE/ASNMP/tests/Makefile.am new file mode 100644 index 00000000000..b8ac30972bf --- /dev/null +++ b/ACE/ASNMP/tests/Makefile.am @@ -0,0 +1,173 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + +## Makefile.asnmp_tests_Address_Test.am + +noinst_PROGRAMS = Address_Test + +Address_Test_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP + +Address_Test_SOURCES = \ + Address_Test.cpp \ + test_config.h + +Address_Test_LDADD = \ + $(top_builddir)/ASNMP/asnmp/libasnmp.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +## Makefile.asnmp_tests_Counter64_Test.am + +noinst_PROGRAMS += Counter64_Test + +Counter64_Test_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP + +Counter64_Test_SOURCES = \ + Counter64_Test.cpp \ + test_config.h + +Counter64_Test_LDADD = \ + $(top_builddir)/ASNMP/asnmp/libasnmp.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +## Makefile.asnmp_tests_Counter_Test.am + +noinst_PROGRAMS += Counter_Test + +Counter_Test_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP + +Counter_Test_SOURCES = \ + Counter_Test.cpp \ + test_config.h + +Counter_Test_LDADD = \ + $(top_builddir)/ASNMP/asnmp/libasnmp.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +## Makefile.asnmp_tests_Gauge_Test.am + +noinst_PROGRAMS += Gauge_Test + +Gauge_Test_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP + +Gauge_Test_SOURCES = \ + Gauge_Test.cpp \ + test_config.h + +Gauge_Test_LDADD = \ + $(top_builddir)/ASNMP/asnmp/libasnmp.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +## Makefile.asnmp_tests_Integer_Test.am + +noinst_PROGRAMS += Integer_Test + +Integer_Test_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP + +Integer_Test_SOURCES = \ + Integer_Test.cpp \ + test_config.h + +Integer_Test_LDADD = \ + $(top_builddir)/ASNMP/asnmp/libasnmp.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +## Makefile.asnmp_tests_Octet_Test.am + +noinst_PROGRAMS += Octet_Test + +Octet_Test_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP + +Octet_Test_SOURCES = \ + Octet_Test.cpp \ + test_config.h + +Octet_Test_LDADD = \ + $(top_builddir)/ASNMP/asnmp/libasnmp.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +## Makefile.asnmp_tests_Oid_Test.am + +noinst_PROGRAMS += Oid_Test + +Oid_Test_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP + +Oid_Test_SOURCES = \ + Oid_Test.cpp \ + test_config.h + +Oid_Test_LDADD = \ + $(top_builddir)/ASNMP/asnmp/libasnmp.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +## Makefile.asnmp_tests_Target_Test.am + +noinst_PROGRAMS += Target_Test + +Target_Test_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP + +Target_Test_SOURCES = \ + Target_Test.cpp \ + test_config.h + +Target_Test_LDADD = \ + $(top_builddir)/ASNMP/asnmp/libasnmp.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +## Makefile.asnmp_tests_Varbind_Test.am + +noinst_PROGRAMS += Varbind_Test + +Varbind_Test_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/ASNMP + +Varbind_Test_SOURCES = \ + Varbind_Test.cpp \ + test_config.h + +Varbind_Test_LDADD = \ + $(top_builddir)/ASNMP/asnmp/libasnmp.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/ASNMP/tests/Octet_Test.cpp b/ACE/ASNMP/tests/Octet_Test.cpp new file mode 100644 index 00000000000..a32f1cd2f09 --- /dev/null +++ b/ACE/ASNMP/tests/Octet_Test.cpp @@ -0,0 +1,156 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// tests +// +// = FILENAME +// Octet_Test.cpp +// +// = DESCRIPTION +// Test all the member functions of the OCTET class. An Object +// representing an ASN.1 Integer64 SMI OCTET STRING SYNTAX. +// +// = AUTHOR +// Michael R. MacFaden +// +// ============================================================================ + +/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +Copyright 1997 Cisco Systems, Inc. + +Permission to use, copy, modify, and distribute this software for any +purpose and without fee is hereby granted, provided that this +copyright and permission notice appear on all copies of the software and +supporting documentation, the name of Cisco Systems, Inc. not be used +in advertising or publicity pertaining to distribution of the +program without specific prior permission, and notice be given +in supporting documentation that modification, copying and distribution is by +permission of Cisco Systems, Inc. + +Cisco Systems, Inc. makes no representations about the suitability of this +software for any purpose. THIS SOFTWARE IS PROVIDED ``AS IS'' +AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT +LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGMENT AND +FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL CISCO SYSTEMS, INC. BE +LIABLE FOR ANY DAMAGES ARISING OUT OF THIS LICENSE OR YOUR USE OF THE +SOFTWARE INCLUDING WITHOUT LIMITATION, DIRECT, INDIRECT OR CONSEQUENTIAL +DAMAGES. +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ + +#include "ace/OS_main.h" +#include "ace/OS_NS_string.h" +#include "asnmp/octet.h" +#include "test_config.h" + +ACE_RCSID(tests, Octet_Test, "$Id$") + +/* + OctetStr( const char *string, long size = -1); + OctetStr ( const OctetStr &octet); + ~OctetStr(); + + SmiUINT32 get_syntax(); + void set_data( const SmiBYTE* string, long int size = -1); + OctetStr& operator=( const char *string); + OctetStr& operator=( const OctetStr &octet); + + bool operator==( const OctetStr &lhs, const OctetStr &rhs); + bool operator!=( const OctetStr &lhs, const OctetStr &rhs); + bool operator<( const OctetStr &lhs, const OctetStr &rhs); + bool operator<=( const OctetStr &lhs,const OctetStr &rhs); + bool operator>( const OctetStr &lhs, const OctetStr &rhs); + bool operator>=( const OctetStr &lhs, const OctetStr &rhs); + bool operator==( const OctetStr &lhs,const char *rhs); + bool operator!=( const OctetStr &lhs,const char *rhs); + bool operator<( const OctetStr &lhs,const char *rhs); + bool operator<=( const OctetStr &lhs,char *rhs); + bool operator>( const OctetStr &lhs,const char *rhs); + bool operator>=( const OctetStr &lhs,const char *rhs); + OctetStr& operator+=( const SmiBYTE *a); + OctetStr& operator+=( const char c); + OctetStr& operator+=( const OctetStr& octetstr); + SmiBYTE& operator[]( int position); + int nCompare( const long n, const OctetStr &o) const; + size_t length() const ; + int valid() const; + SmiBYTE *data() const; + char *to_string(); + char *to_string_hex(); + SnmpSyntax *clone() const; + SnmpSyntax& operator=( SnmpSyntax &val); + */ + +static void TestOctet() +{ + const char *str = "A test of octet strings...!@@#$%^&*()_+|~{}:,./<>?"; + OctetStr o1; + ACE_ASSERT(o1.valid() == 1); + ACE_ASSERT(o1.length() == 0); + ACE_ASSERT(o1.data() != (unsigned char *)0); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Octet:o1(\"\") [%s]\n", + o1.to_string())); + o1.set_data((SmiBYTE *)str); + ACE_ASSERT(!ACE_OS::strcmp(str, (char *)o1.data())); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Octet:o1(\"str\") [%s]\n", + o1.to_string())); + + OctetStr o2(str); + ACE_ASSERT(o2.valid() == 1); + ACE_ASSERT(o2.data() != (unsigned char *)0); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Octet:o2(\"str\") [%s]\n", + o2.to_string())); + + OctetStr o3(str, 4); // test setting less than full string length + ACE_ASSERT(o3.valid() == 1); + ACE_ASSERT(o3.length() == 4); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Octet:o3(\"A te\") [%s]\n", + o3.to_string())); + + OctetStr o4(o3); // test setting less than full string length + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Octet:o4(\"A te\") [%s]\n", + o4.to_string())); + ACE_ASSERT(o4.valid() == 1); + ACE_ASSERT(o4.length() == 4); + + OctetStr o5; + o5 = str; + ACE_ASSERT(o5.valid() == 1); + ACE_ASSERT(o5.length() == ACE_OS::strlen(str)); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Octet:o5(\"str\") [%s]\n", + o5.to_string())); + + OctetStr o6; + o6 = o5; + ACE_ASSERT(o6.valid() == 1); + ACE_ASSERT(o5.length() == o6.length()); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Octet:o6(\"str\") [%s]\n", + o6.to_string())); + + o6 += o3; + o6 = ""; + o6 += str; + o6 += '#'; + ACE_ASSERT(o6[0] == (SmiBYTE) 'A'); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Octet:o6(\"str\") [%s]\n", + o6.to_string())); + + ACE_ASSERT(!(o3 < o3)); + ACE_ASSERT(!(o3 > o3)); + ACE_ASSERT(o3 >= o3); + ACE_ASSERT(o3 <= o3); + ACE_ASSERT(o3 == o3); + ACE_ASSERT(!(o3 != o3)); + +} + +int +ACE_TMAIN (int, ACE_TCHAR *[]) +{ + ACE_START_TEST (ACE_TEXT ("Octet_Test")); + + TestOctet(); + ACE_END_TEST; + return 0; +} diff --git a/ACE/ASNMP/tests/Oid_Test.cpp b/ACE/ASNMP/tests/Oid_Test.cpp new file mode 100644 index 00000000000..7add52bd790 --- /dev/null +++ b/ACE/ASNMP/tests/Oid_Test.cpp @@ -0,0 +1,181 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// Oid_Test.cpp +// +// = DESCRIPTION +// Test all the member functions of the Oid class. An Object +// representing an ASN.1 Integer64 SMI OID SYNTAX. +// +// = AUTHOR +// Michael R. MacFaden +// +// ============================================================================ +/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +Copyright 1997 Cisco Systems, Inc. + +Permission to use, copy, modify, and distribute this software for any +purpose and without fee is hereby granted, provided that this +copyright and permission notice appear on all copies of the software and +supporting documentation, the name of Cisco Systems, Inc. not be used +in advertising or publicity pertaining to distribution of the +program without specific prior permission, and notice be given +in supporting documentation that modification, copying and distribution is by +permission of Cisco Systems, Inc. + +Cisco Systems, Inc. makes no representations about the suitability of this +software for any purpose. THIS SOFTWARE IS PROVIDED ``AS IS'' +AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT +LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGMENT AND +FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL CISCO SYSTEMS, INC. BE +LIABLE FOR ANY DAMAGES ARISING OUT OF THIS LICENSE OR YOUR USE OF THE +SOFTWARE INCLUDING WITHOUT LIMITATION, DIRECT, INDIRECT OR CONSEQUENTIAL +DAMAGES. +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ + +#include "ace/OS_main.h" +#include "asnmp/oid.h" +#include "test_config.h" + +ACE_RCSID(tests, Oid_Test, "$Id$") + +/* + Oid( const char * dotted_oid_string = "", size_t size = -1); + Oid ( const Oid &oid); + Oid(const unsigned long *raw_oid, size_t oid_len); + ~Oid(); + + SmiUINT32 get_syntax(); + Oid& operator=( const Oid &oid); + bool operator==( const Oid &lhs,const Oid &rhs); + bool operator!=( const Oid &lhs,const Oid &rhs); + bool operator<( const Oid &lhs,const Oid &rhs); + bool operator<=( const Oid &lhs,const Oid &rhs); + bool operator>( const Oid &lhs,const Oid &rhs); + bool operator>=( const Oid &lhs,const Oid &rhs); + Oid& operator+=( const char *a); + Oid& operator+=( const unsigned long i); + Oid& operator+=( const Oid &o); + unsigned long & operator[]( size_t position); + SmiLPOID oidval(); + void set_data( const char *dotted_oid_string); + void set_data( const unsigned long *raw_oid, const size_t oid_len); + size_t length() const; + void trim( const size_t how_many = 1); + int suboid( const size_t start, const size_t end, Oid& new_oid); + int left_comparison( const unsigned long n, const Oid &o) const; + int right_comparison( const unsigned long n, const Oid &o) const; + int valid() const; + char *to_string(); + SnmpSyntax *clone() const; + SnmpSyntax& operator=( SnmpSyntax &val); + */ + +static void OidTest() +{ + Oid d1; + ACE_ASSERT(d1.valid() == 0); + ACE_ASSERT(d1.length() == 0); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Oid:d1(\"\") [%s]\n", + d1.to_string())); + + Oid d2("1.2.3"); + ACE_ASSERT(d2.valid() == 1); + ACE_ASSERT(d2.length() == 3); + ACE_ASSERT(d2[0] == (unsigned long) 1); + ACE_ASSERT(d2[1] == (unsigned long) 2); + ACE_ASSERT(d2[2] == (unsigned long) 3); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Oid:d2(\"1.2.3\") [%s]\n", + d2.to_string())); + + Oid d3(d2); + ACE_ASSERT(d3.valid() == 1); + ACE_ASSERT(d3.length() == 3); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Oid:d3(\"d2\") [%s]\n", + d3.to_string())); + + unsigned long t[3] = {2,3,4}; + Oid d4((unsigned long *)&t, sizeof(t)/sizeof(long)); + ACE_ASSERT(d4.valid() == 1); + ACE_ASSERT(d4.length() == 3); + ACE_ASSERT(d4[0] == (unsigned long) 2); + ACE_ASSERT(d4[1] == (unsigned long) 3); + ACE_ASSERT(d4[2] == (unsigned long) 4); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Oid:d4(\"long(2.3.4)\") [%s]\n", + d4.to_string())); + + // suboid + Oid d5; + ACE_ASSERT(d4.suboid(d5, 1,1) == 0); // 2,3,4, 1,1 == 3 + ACE_ASSERT(d5.length() == 1); + ACE_ASSERT(d5.valid() == 1); + ACE_ASSERT(d5[0] == 3); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Oid:d6::suboid(d5,1,1) [%s]\n", + d5.to_string())); + + // trim + Oid d7(d4); + ACE_ASSERT(d7.valid() == 1); + d7.trim(); + ACE_ASSERT(d7.length() == d4.length() -1); + + // compare methods + ACE_ASSERT(d7.left_comparison( d7.length(), d7) == 0); + ACE_ASSERT(d4.right_comparison( d4.length(), d4) == 0); + + // assignment + d1 = d4; + ACE_ASSERT(d1.valid() == 1); + ACE_ASSERT(d1 == d4); + d2 = "5.6.7"; + ACE_ASSERT(d2.valid() == 1); + ACE_ASSERT(d2[2] == (unsigned long) 7); + d1 = "8.9.10"; + ACE_ASSERT(d1.valid() == 1); + + // concat + unsigned long ll = ULONG_MAX; + d1 = ""; + d1 += (unsigned long)0; + d1 += ll; + d1 += ll; + d1 += "0"; + ACE_ASSERT(d1.valid() == 1); + ACE_ASSERT(d1.length() == 4); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Oid:d1(0,max,max,0) [%s]\n", + d1.to_string())); + ACE_ASSERT(d1[0] == (unsigned long)0); + ACE_ASSERT(d1[1] == ll); + ACE_ASSERT(d1[2] == ll); + ACE_ASSERT(d1[3] == (unsigned long)0); + + d2 += d1; + ACE_ASSERT(d2.valid() == 1); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Oid:(5.6.7.8.9.10) [%s]\n", + d2.to_string())); + + // test out max Oid string... + + // relational operators oid,oid + ACE_ASSERT(d2 == d2); + ACE_ASSERT(!(d2 != d2)); + ACE_ASSERT(!(d2 < d2)); + ACE_ASSERT(!(d2 > d2)); + ACE_ASSERT(d2 >= d2); + ACE_ASSERT(d2 <= d2); + +} + +int +ACE_TMAIN (int, ACE_TCHAR *[]) +{ + ACE_START_TEST (ACE_TEXT ("Oid_Test")); + OidTest(); + ACE_END_TEST; + return 0; +} diff --git a/ACE/ASNMP/tests/Target_Test.cpp b/ACE/ASNMP/tests/Target_Test.cpp new file mode 100644 index 00000000000..28302e11cfd --- /dev/null +++ b/ACE/ASNMP/tests/Target_Test.cpp @@ -0,0 +1,145 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// tests +// +// = FILENAME +// Target_Test.cpp +// +// = DESCRIPTION +// Test all the member functions of the Target class. +// Not sure if this object is really required or not in the new framework +// +// = AUTHOR +// Michael R. MacFaden +// +// ============================================================================ + +/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +Copyright 1997 Cisco Systems, Inc. + +Permission to use, copy, modify, and distribute this software for any +purpose and without fee is hereby granted, provided that this +copyright and permission notice appear on all copies of the software and +supporting documentation, the name of Cisco Systems, Inc. not be used +in advertising or publicity pertaining to distribution of the +program without specific prior permission, and notice be given +in supporting documentation that modification, copying and distribution is by +permission of Cisco Systems, Inc. + +Cisco Systems, Inc. makes no representations about the suitability of this +software for any purpose. THIS SOFTWARE IS PROVIDED ``AS IS'' +AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT +LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGMENT AND +FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL CISCO SYSTEMS, INC. BE +LIABLE FOR ANY DAMAGES ARISING OUT OF THIS LICENSE OR YOUR USE OF THE +SOFTWARE INCLUDING WITHOUT LIMITATION, DIRECT, INDIRECT OR CONSEQUENTIAL +DAMAGES. +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ + +#include "ace/OS_main.h" +#include "asnmp/octet.h" +#include "asnmp/target.h" +#include "test_config.h" + +ACE_RCSID(tests, Target_Test, "$Id$") + +/* + Percieved Problems with this CTarget aka UdpTarget Interface: + + 1) can't set snmp version during constructor (default value?) + 2) doesn't use ANSI C++ String class (still uses char *) + 3) Makes it easy to mix up read and write comm strs (could be diff types) + 3) so many get/set's, leads one to rethink the design/use of UdpTarget + 4) Use of resolve_to_C smells like a HACK... + 5) No valid() member function returns 1 even if no address given.. + 6) No to_string()?! (Fixed) + 7) can't access retry, timeout parameters... + 8) can't assign or equate two UdpTargets + + UdpTarget( void); + UdpTarget( const Address &address); + UdpTarget( const UdpTarget &target); + UdpTarget( const Address &address, // address + const char *read_community_name, // read community name + const char *write_community_name); // write community name + UdpTarget( const Address &address, // address + const OctetStr &read_community_name, // read community + const OctetStr &write_community_name); // write community + ~UdpTarget(); + + SnmpTarget *clone() const; + void get_readcommunity( OctetStr& read_community_oct); + void set_readcommunity( const OctetStr& read_community); + void get_writecommunity( OctetStr &write_community_oct); + void set_writecommunity( const OctetStr& write_community); + void get_address( UdpAddress & address); + int set_address( Address &address); + snmp_version get_version(); + void set_version( const snmp_version v); + + UdpTarget& operator=( const UdpTarget& target); + friend bool operator==( const UdpTarget &lhs, const UdpTarget &rhs); + + */ + +static void TestSnmpTarget() +{ + OctetStr rd("rd_comm"), wr("wr_comm"); + ACE_ASSERT(rd.valid() == 1); + ACE_ASSERT(wr.valid() == 1); + + // constructor and get tests + UdpAddress ga; + ACE_ASSERT(ga.valid() == 0); + + UdpTarget c1; + ACE_ASSERT(c1.valid() == 0); + OctetStr a, b("public"), c("private"); + c1.get_read_community(a); + ACE_ASSERT(a == b); + c1.get_write_community(a); + ACE_ASSERT(a == c); + c1.get_address (ga); + ACE_ASSERT(c1.get_version() == version1); + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) UdpTarget:c1(\"\") [%s]\n", + c1.to_string())); + + IpAddress ip("127.0.0.1"); + UdpTarget c2(ip); + ACE_ASSERT(c2.valid() == 1); + c2.get_address (ga); + ACE_ASSERT(ga.valid() == 1); + ACE_ASSERT(c2.get_version() == version1); + ACE_ASSERT(ga.valid() == 1); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) UdpTarget:c2(\"\") [%s]\n", + c2.to_string())); + + UdpTarget *c5 = new UdpTarget(c2); + ACE_ASSERT(c5 != 0); + ACE_ASSERT(c5->valid() == 1); + c5->get_address (ga); + ACE_ASSERT(ga.valid() == 1); + ACE_ASSERT(c5->get_version() == version1); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) UdpTarget:c5(\"\") [%s]\n", + c5->to_string())); + delete c5; + +// these are not supported yet +// ACE_ASSERT(c5 == c5); +// c5 = c2; +// ACE_ASSERT(c5 == c2); +} + +int +ACE_TMAIN (int, ACE_TCHAR *[]) +{ + ACE_START_TEST (ACE_TEXT ("Target_Test")); + TestSnmpTarget(); + + ACE_END_TEST; + return 0; +} diff --git a/ACE/ASNMP/tests/Varbind_Test.cpp b/ACE/ASNMP/tests/Varbind_Test.cpp new file mode 100644 index 00000000000..e9c9ecc923b --- /dev/null +++ b/ACE/ASNMP/tests/Varbind_Test.cpp @@ -0,0 +1,197 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// asnmp +// +// = FILENAME +// Varbind_Test.cpp +// +// = DESCRIPTION +// Test all the member functions of the Varbind class. +// A varbind is a list of { oids and associated values } +// +// = AUTHOR +// Michael R. MacFaden +// +// ============================================================================ + +/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +Copyright 1997 Cisco Systems, Inc. + +Permission to use, copy, modify, and distribute this software for any +purpose and without fee is hereby granted, provided that this +copyright and permission notice appear on all copies of the software and +supporting documentation, the name of Cisco Systems, Inc. not be used +in advertising or publicity pertaining to distribution of the +program without specific prior permission, and notice be given +in supporting documentation that modification, copying and distribution is by +permission of Cisco Systems, Inc. + +Cisco Systems, Inc. makes no representations about the suitability of this +software for any purpose. THIS SOFTWARE IS PROVIDED ``AS IS'' +AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT +LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGMENT AND +FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL CISCO SYSTEMS, INC. BE +LIABLE FOR ANY DAMAGES ARISING OUT OF THIS LICENSE OR YOUR USE OF THE +SOFTWARE INCLUDING WITHOUT LIMITATION, DIRECT, INDIRECT OR CONSEQUENTIAL +DAMAGES. +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ + +#include "ace/OS_main.h" +#include "asnmp/oid.h" +#include "asnmp/vb.h" +#include "test_config.h" + +ACE_RCSID(tests, Varbind_Test, "$Id$") +/* + Vb( void); + Vb( const Oid &oid); + Vb( const Vb &vb); + Vb( const Oid& vb, const SnmpSyntax &val, const SmiUINT32=SNMP_CLASS_SUCCESS); + ~Vb(); + int valid() const; + Vb& operator=( const Vb &vb); + void set_oid( const Oid& oid); + void get_oid( Oid &oid) const; + void set_null(); + void set_value( const TimeTicks& ticks); + void set_value( const Oid& oid); + void set_value( const Counter32& ctr); + void set_value( const Counter64& ctr); + void set_value( const Gauge32& ctr); + void set_value( const SnmpUInt32& ctr); + void set_value( const SnmpInt32& ctr); + void set_value( const OctetStr& oct_str); + int get_value( TimeTicks& ticks); + int get_value( Oid& oid); + int get_value( Counter32& ctr); + int get_value( Counter64& ctr); + int get_value( Gauge32& ctr); + int get_value( SnmpUInt32& ctr); + int get_value( SnmpInt32& ctr); + int get_value( OctetStr& oct_str); + int get_value( SnmpSyntax &val); + void set_value( const SnmpSyntax &val); + int get_value( const SnmpSyntax &val); + SmiUINT32 get_syntax(); + friend void set_exception_status( Vb *vb, const SmiUINT32 status); + char *to_string(); + char *to_string_value(); + char *to_string_oid(); + */ + +static void VbTest() +{ +#if !defined (ACE_WIN32) + + Vb v1; + ACE_ASSERT(v1.valid() == 0); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) VarBinad:v1(\"/\") [%s]\n", + v1.to_string())); + + // purpose of this routine?? + set_exception_status( &v1, 10); + + Vb v2(v1); + ACE_ASSERT(v2.valid() == 0); + Oid o1("1.2.3"), o2; + v2.set_oid(o1); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) VarBinad:v2(\"1.2.3/\") [%s]\n", + v2.to_string())); + + v2.get_oid(o2); + ACE_ASSERT(o2 == o1); + ACE_ASSERT(v2.valid() == 0); + v2.set_null(); + ACE_ASSERT(v2.valid() == 0); + v2.get_oid(o2); + + Vb v3; + TimeTicks t(0), t1; + v3.set_oid(o1); + v3.set_value(t); + ACE_ASSERT(v3.valid() == 1); + v3.get_value(t1); + ACE_ASSERT(t == t1); + + Vb v4; + v4.set_oid(o1); + v4.set_value(o1); + ACE_ASSERT(v4.valid() == 1); + v4.get_value(o2); + ACE_ASSERT(o1 == o2); + + Vb v5; + Counter32 c1(12), c2; + v5.set_oid(o1); + v5.set_value(c1); + ACE_ASSERT(v5.valid() == 1); + v5.get_value(c2); + ACE_ASSERT(c1 == c2); + + Vb v6; + Counter64 c3(12345678901234ULL), c4; + v6.set_oid(o1); + v6.set_value(c3); + ACE_ASSERT(v6.valid() == 1); + v6.get_value(c4); + ACE_ASSERT(c3 == c4); + + Vb v7; + Gauge32 g1(0123456), g2; + v7.set_oid(o1); + v7.set_value(g1); + ACE_ASSERT(v7.valid() == 1); + v7.get_value(g2); + ACE_ASSERT(g1 == g2); + + Vb v8; + SnmpInt32 i1(0123456), i2; + v8.set_oid(o1); + v8.set_value(i1); + ACE_ASSERT(v8.valid() == 1); + v8.get_value(i2); + ACE_ASSERT(i1 == i2); + + Vb v9; + SnmpUInt32 u1(0123456), u2; + v9.set_oid(o1); + v9.set_value(u1); + ACE_ASSERT(v9.valid() == 1); + v9.get_value(u2); + ACE_ASSERT(u1 == u2); + + Vb v10; + OctetStr s1(" abcdefghighlmnopqrstuvwxyz!@#$%^&*()"), s2; + v10.set_oid(o1); + v10.set_value(s1); + ACE_ASSERT(v10.valid() == 1); + v10.get_value(s2); + ACE_ASSERT(s1 == s2); + ACE_ASSERT(s1.length() == s2.length()); + + // test assignment over all datatypes + v10 = v5; + ACE_ASSERT(v10 == v5); + + + Vb v11(o1, s1, SNMP_CLASS_SUCCESS); + ACE_ASSERT(v11.valid() == 1); + v11.get_oid(o2); + ACE_ASSERT(o1 == o2); + v11.get_value(s2); + ACE_ASSERT(s1 == s2); +#endif /*if ACE_WIN32*/ +} + +int +ACE_TMAIN (int, ACE_TCHAR *[]) +{ + ACE_START_TEST (ACE_TEXT ("Varbind_Test")); + VbTest(); + ACE_END_TEST; + return 0; +} + diff --git a/ACE/ASNMP/tests/run_tests.bat b/ACE/ASNMP/tests/run_tests.bat new file mode 100644 index 00000000000..985f88b51db --- /dev/null +++ b/ACE/ASNMP/tests/run_tests.bat @@ -0,0 +1,44 @@ +@echo off +rem To use this either give it no arguments to run all the tests or +rem pass it the test name (without the extention) to run only one +rem test + +if not "%1" == "" goto runtest + +call run_tests + +call run_tests Address_Test +call run_tests Counter64_Test +call run_tests Counter_Test +call run_tests Gauge_Test +call run_tests Integer_Test +call run_tests Octet_Test +call run_tests Oid_Test +call run_tests Target_Test +call run_tests Varbind_Test + +goto done + +:runtest + +echo Running %1 +%1.exe +if errorlevel 0 goto fine +echo. +echo %1 has FAILED!!! +echo. +type %temp%\log\%1.log | find /I "assertion failed" +type %temp%\log\%1.log | find /I "not supported" +type %temp%\log\%1.log | find /I "no such file or directory" +type %temp%\log\%1.log | find /I "invalid argument" +type %temp%\log\%1.log | find /I "timeout" +type %temp%\log\%1.log | find /I "bad file number" +echo. + +goto done +:fine + +rem We should check the log files here to make sure the test ended correctly +rem type %temp%\log\%1.log | find "Ending" + +:done diff --git a/ACE/ASNMP/tests/run_tests.sh b/ACE/ASNMP/tests/run_tests.sh new file mode 100755 index 00000000000..c8d911c184c --- /dev/null +++ b/ACE/ASNMP/tests/run_tests.sh @@ -0,0 +1,61 @@ +#!/bin/sh +# This is the UNIX version of the one-button ACE tests. +# Contributed by Michael Rueger +# mrm@cisco.com - Change to for loop script could be more generic if we put +# this in the bin dir and fed it a file to read from + +IFS="|" +tmp=/tmp + +# these patterns should not be included in log file +ERROR_MSGS="assertion failed|not supported|No such file or directory|Invalid argument|timeout|Bad file number" + +# these patterns must be included in log file +SUCCESS_MSGS="starting|Ending" + +run() +{ + echo running $1 + /bin/rm -f core + + ./$1 + status=$? + + if [ $status -ne 0 ]; then + echo \"$1\" FAILED with exit status $status!!!! + fi + + if [ -f core ]; then + echo \"$1\" dumped core!!!! + fi + + for i in $SUCCESS_MSGS; do + grep $i log/$1.log >/dev/null + if [ $? -eq 1 ]; then + echo Error in log file no line with $i + fi + done + + for i in $ERROR_MSGS; do + grep $i log/$1.log + done +} + +echo "Starting tests..." +FILES=`ls *_Test 2>/dev/null` + +if [ -z $FILES ]; then + echo "ERROR: no test programs generated matching pattern *_Test." + echo "ERROR: Try compiling the test programs first." + exit 1 +fi + +for i in *_Test +do + run $i +done + +echo "Tests complete..." + + +# EOF diff --git a/ACE/ASNMP/tests/test_config.h b/ACE/ASNMP/tests/test_config.h new file mode 100644 index 00000000000..e1e3912c347 --- /dev/null +++ b/ACE/ASNMP/tests/test_config.h @@ -0,0 +1,177 @@ +/* -*- C++ -*- */ +// $Id$ + +// ============================================================================ +// = FILENAME +// test_config.h +// +// = AUTHOR +// Prashant Jain , Tim Harrison +// , and David Levine +// +// ============================================================================ + +#ifndef ACE_TEST_CONFIG_H +#define ACE_TEST_CONFIG_H + +#include "ace/ACE.h" +#include "ace/Log_Msg.h" +#include "ace/OS_main.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_time.h" +#include "ace/OS_NS_sys_stat.h" +#include "ace/OS_NS_stdlib.h" + +// FUZZ: disable check_for_streams_include +#include "ace/streams.h" + +#if defined (ACE_WIN32) + +#define ACE_DEFAULT_TEST_FILE ACE_TEXT ("C:\\temp\\ace_test_file") +#define ACE_TEMP_FILE_NAME ACE_TEXT ("C:\\temp\\ace_temp_file") +#define ACE_LOG_DIRECTORY ACE_TEXT ("C:\\temp\\log\\") +#define MAKE_PIPE_NAME(X) ACE_TEXT ("\\\\.\\pipe\\"#X) + +#else + +#define ACE_DEFAULT_TEST_FILE ACE_TEXT ("/tmp/ace_test_file") +#define ACE_TEMP_FILE_NAME ACE_TEXT ("/tmp/ace_temp_file") +#define ACE_LOG_DIRECTORY ACE_TEXT ("log/") +#define MAKE_PIPE_NAME(X) ACE_TEXT (X) + +#endif /* ACE_WIN32 */ + +#ifndef ACE_START_TEST +#define ACE_START_TEST(NAME) \ + const ACE_TCHAR *program = NAME; \ + ACE_LOG_MSG->open (program, ACE_Log_Msg::OSTREAM); \ + if (ace_file_stream.set_output (program) != 0) \ + ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("set_output failed")), -1); \ + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) starting %s test at %D\n"), program)); +#endif /* ACE_START_TEST */ + +#ifndef ACE_END_TEST +#define ACE_END_TEST \ + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) Ending %s test at %D\n"), program)); \ + ace_file_stream.close (); +#endif /* ACE_END_TEST */ + +#define ACE_NEW_THREAD \ +do {\ + ACE_LOG_MSG->msg_ostream (ace_file_stream.output_file ()); \ + ACE_LOG_MSG->clr_flags (ACE_Log_Msg::STDERR | ACE_Log_Msg::LOGGER ); \ + ACE_LOG_MSG->set_flags (ACE_Log_Msg::OSTREAM); \ +} while (0) + +#define ACE_APPEND_LOG(NAME) \ + const ACE_TCHAR *program = NAME; \ + ACE_LOG_MSG->open (program, ACE_Log_Msg::OSTREAM); \ + if (ace_file_stream.set_output (program, 1) != 0) \ + ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("set_output failed")), -1); \ + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) Starting %s test at %D\n"), program)); + +#define ACE_END_LOG \ + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) Ending %s test at %D\n\n"), program)); \ + ace_file_stream.close (); + +#define ACE_INIT_LOG(NAME) \ + char temp[BUFSIZ]; \ + ACE_OS::sprintf (temp, "%s%s%s", \ + ACE_TEXT_ALWAYS_CHAR (ACE_LOG_DIRECTORY), \ + ACE_TEXT_ALWAYS_CHAR (ACE::basename (NAME, ACE_DIRECTORY_SEPARATOR_CHAR)), \ + ".log"); \ + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Deleting old log file %C (if any)\n\n"), temp)); \ + ACE_OS::unlink (temp); + + +const int ACE_NS_MAX_ENTRIES = 1000; +const int ACE_MAX_TIMERS = 4; +const int ACE_MAX_THREADS = 4; +const int ACE_MAX_DELAY = 10; +const int ACE_MAX_INTERVAL = 0; +const int ACE_MAX_ITERATIONS = 10; +const int ACE_MAX_PROCESSES = 10; + +char ACE_ALPHABET[] = "abcdefghijklmnopqrstuvwxyz"; + +class ACE_Test_Output +{ +public: + ACE_Test_Output (void); + ~ACE_Test_Output (void); + int set_output (const ACE_TCHAR *filename, int append = 0); + ofstream *output_file (void); + void close (void); + +private: + ofstream output_file_; +}; + +static ACE_Test_Output ace_file_stream; + +ACE_Test_Output::ACE_Test_Output (void) +{ +} + +ACE_Test_Output::~ACE_Test_Output (void) +{ +} + +int +ACE_Test_Output::set_output (const ACE_TCHAR *filename, int append) +{ + char temp[BUFSIZ]; + // Ignore the error value since the directory may already exist. + ACE_OS::mkdir (ACE_LOG_DIRECTORY); + ACE_OS::sprintf (temp, "%s%s%s", + ACE_TEXT_ALWAYS_CHAR (ACE_LOG_DIRECTORY), + ACE_TEXT_ALWAYS_CHAR (ACE::basename (filename, ACE_DIRECTORY_SEPARATOR_CHAR)), + ".log"); + + this->output_file_.open (temp, ios::out | (append ? ios::app : ios::trunc)); + if (this->output_file_.bad ()) + return -1; + + ACE_LOG_MSG->msg_ostream (ace_file_stream.output_file ()); + ACE_LOG_MSG->clr_flags (ACE_Log_Msg::STDERR | ACE_Log_Msg::LOGGER ); + ACE_LOG_MSG->set_flags (ACE_Log_Msg::OSTREAM); + + return 0; +} + +ofstream * +ACE_Test_Output::output_file (void) +{ + return &this->output_file_; +} + +void +ACE_Test_Output::close (void) +{ + this->output_file_.flush (); + this->output_file_.close (); +} + +void +randomize (int array[], size_t size) +{ + size_t i; + + for (i = 0; i < size; i++) + array [i] = static_cast (i); + + ACE_OS::srand ((u_int) ACE_OS::time (0L)); + + // Generate an array of random numbers from 0 .. size - 1. + + for (i = 0; i < size; i++) + { + int index = ACE_OS::rand() % static_cast (size); + --size; + int temp = array [index]; + array [index] = array [size]; + array [size] = temp; + } +} + +#endif /* ACE_TEST_CONFIG_H */ diff --git a/ACE/ASNMP/tests/tests.mpc b/ACE/ASNMP/tests/tests.mpc new file mode 100644 index 00000000000..df62404642a --- /dev/null +++ b/ACE/ASNMP/tests/tests.mpc @@ -0,0 +1,91 @@ +// $Id$ + +project (asnmp_tests_Oid_Test) : aceexe { + exename = Oid_Test + after += asnmp_lib + libs += asnmp + includes += $(ACE_ROOT)/ASNMP + source_files { + Oid_Test.cpp + } +} + +project (asnmp_tests_Counter_Test) : aceexe { + exename = Counter_Test + after += asnmp_lib + libs += asnmp + includes += $(ACE_ROOT)/ASNMP + source_files { + Counter_Test.cpp + } +} + +project (asnmp_tests_Counter64_Test) : aceexe { + exename = Counter64_Test + after += asnmp_lib + libs += asnmp + includes += $(ACE_ROOT)/ASNMP + source_files { + Counter64_Test.cpp + } +} + +project (asnmp_tests_Integer_Test) : aceexe { + exename = Integer_Test + after += asnmp_lib + libs += asnmp + includes += $(ACE_ROOT)/ASNMP + source_files { + Integer_Test.cpp + } +} + +project (asnmp_tests_Octet_Test) : aceexe { + exename = Octet_Test + after += asnmp_lib + libs += asnmp + includes += $(ACE_ROOT)/ASNMP + source_files { + Octet_Test.cpp + } +} + +project (asnmp_tests_Gauge_Test) : aceexe { + exename = Gauge_Test + after += asnmp_lib + libs += asnmp + includes += $(ACE_ROOT)/ASNMP + source_files { + Gauge_Test.cpp + } +} + +project (asnmp_tests_Address_Test) : aceexe { + exename = Address_Test + after += asnmp_lib + libs += asnmp + includes += $(ACE_ROOT)/ASNMP + source_files { + Address_Test.cpp + } +} + +project (asnmp_tests_Target_Test) : aceexe { + exename = Target_Test + after += asnmp_lib + libs += asnmp + includes += $(ACE_ROOT)/ASNMP + source_files { + Target_Test.cpp + } +} + +project (asnmp_tests_Varbind_Test) : aceexe { + exename = Varbind_Test + after += asnmp_lib + libs += asnmp + includes += $(ACE_ROOT)/ASNMP + source_files { + Varbind_Test.cpp + } +} diff --git a/ACE/AUTHORS b/ACE/AUTHORS new file mode 100644 index 00000000000..3e474e06cc0 --- /dev/null +++ b/ACE/AUTHORS @@ -0,0 +1,13 @@ +Douglas C. Schmidt +d.schmidt@vanderbilt.edu + +Professor of Computer Science +Associate Chair of Computer Science and Engineering +Department of Electrical Engineering and Computer Science +Senior Researcher at the Institute for Software Integrated Systems (ISIS) +Vanderbilt University +Nashville, TN 37203 + +www.dre.vanderbilt.edu/~schmidt +TEL: (615) 343-8197 +FAX: (615) 343-7440 diff --git a/ACE/COPYING b/ACE/COPYING new file mode 100644 index 00000000000..a42692314f5 --- /dev/null +++ b/ACE/COPYING @@ -0,0 +1,124 @@ + + _________________________________________________________________ + + Copyright and Licensing Information for ACE(TM), TAO(TM), CIAO(TM), and + CoSMIC(TM) + + [1]ACE(TM), [2]TAO(TM), [3]CIAO(TM), and [4]CoSMIC(TM) (henceforth + referred to as "DOC software") are copyrighted by [5]Douglas C. + Schmidt and his [6]research group at [7]Washington University, + [8]University of California, Irvine, and [9]Vanderbilt University, + Copyright (c) 1993-2008, all rights reserved. Since DOC software is + open-source, freely available software, you are free to use, modify, + copy, and distribute--perpetually and irrevocably--the DOC software + source code and object code produced from the source, as well as copy + and distribute modified versions of this software. You must, however, + include this copyright statement along with any code built using DOC + software that you release. No copyright statement needs to be provided + if you just ship binary executables of your software products. + + You can use DOC software in commercial and/or binary software releases + and are under no obligation to redistribute any of your source code + that is built using DOC software. Note, however, that you may not do + anything to the DOC software code, such as copyrighting it yourself or + claiming authorship of the DOC software code, that will prevent DOC + software from being distributed freely using an open-source + development model. You needn't inform anyone that you're using DOC + software in your software, though we encourage you to let [10]us know + so we can promote your project in the [11]DOC software success + stories. + + The [12]ACE, [13]TAO, [14]CIAO, and [15]CoSMIC web sites are + maintained by the [16]DOC Group at the [17]Institute for Software + Integrated Systems (ISIS) and the [18]Center for Distributed Object + Computing of Washington University, St. Louis for the development of + open-source software as part of the open-source software community. By + submitting comments, suggestions, code, code snippets, techniques + (including that of usage) and algorithms (collectively + ``Submissions''), submitters acknowledge that they have the right to + do so, that any such Submissions are given freely and unreservedly, + and that they waive any claims to copyright or ownership. In addition, + submitters acknowledge that any such Submission might become part of + the copyright maintained on the overall body of code that comprises + the DOC software. By making a Submission, submitter agree to these + terms. Moreover, submitters acknowledge that the incorporation or + modification of such Submissions is entirely at the discretion of the + moderators of the open-source DOC software projects or their + designees. + + Submissions are provided by the submitter ``as is'' with no warranties + whatsoever, including any warranty of merchantability, noninfringement + of third party intellectual property, or fitness for any particular + purpose. In no event shall the submitter be liable for any direct, + indirect, special, exemplary, punitive, or consequential damages, + including without limitation, lost profits, even if advised of the + possibility of such damages. Likewise, DOC software is provided as is + with no warranties of any kind, including the warranties of design, + merchantability, and fitness for a particular purpose, + noninfringement, or arising from a course of dealing, usage or trade + practice. Washington University, UC Irvine, Vanderbilt University, + their employees, and students shall have no liability with respect to + the infringement of copyrights, trade secrets or any patents by DOC + software or any part thereof. Moreover, in no event will Washington + University, UC Irvine, or Vanderbilt University, their employees, or + students be liable for any lost revenue or profits or other special, + indirect and consequential damages. + + DOC software is provided with no support and without any obligation on + the part of Washington University, UC Irvine, Vanderbilt University, + their employees, or students to assist in its use, correction, + modification, or enhancement. A [19]number of companies around the + world provide commercial support for DOC software, however. + + DOC software is Y2K-compliant, as long as the underlying OS platform + is Y2K-compliant. Likewise, DOC software is compliant with the new US + daylight savings rule passed by Congress as "The Energy Policy Act of + 2005," which established new daylight savings times (DST) rules for + the United States that expand DST as of March 2007. Since DOC software + obtains time/date and calendaring information from operating systems + users will not be affected by the new DST rules as long as they + upgrade their operating systems accordingly. + + The names ACE(TM), TAO(TM), CIAO(TM), CoSMIC(TM), Washington + University, UC Irvine, and Vanderbilt University, may not be used to + endorse or promote products or services derived from this source + without express written permission from Washington University, UC + Irvine, or Vanderbilt University. Further, products or services + derived from this source may not be called ACE(TM), TAO(TM), CIAO(TM), + or CoSMIC(TM) nor may the name Washington University, UC Irvine, or + Vanderbilt University appear in their names, without express written + permission from Washington University, UC Irvine, and Vanderbilt + University. + + If you have any suggestions, additions, comments, or questions, please + let [20]me know. + + [21]Douglas C. Schmidt + _________________________________________________________________ + + Back to the [22]ACE home page. + +References + + 1. http://www.cs.wustl.edu/~schmidt/ACE.html + 2. http://www.cs.wustl.edu/~schmidt/TAO.html + 3. http://www.dre.vanderbilt.edu/CIAO/ + 4. http://www.dre.vanderbilt.edu/cosmic/ + 5. http://www.dre.vanderbilt.edu/~schmidt/ + 6. http://www.cs.wustl.edu/~schmidt/ACE-members.html + 7. http://www.wustl.edu/ + 8. http://www.uci.edu/ + 9. http://www.vanderbilt.edu/ + 10. mailto:doc_group@cs.wustl.edu + 11. http://www.cs.wustl.edu/~schmidt/ACE-users.html + 12. http://www.cs.wustl.edu/~schmidt/ACE.html + 13. http://www.cs.wustl.edu/~schmidt/TAO.html + 14. http://www.dre.vanderbilt.edu/CIAO/ + 15. http://www.dre.vanderbilt.edu/cosmic/ + 16. http://www.dre.vanderbilt.edu/ + 17. http://www.isis.vanderbilt.edu/ + 18. http://www.cs.wustl.edu/~schmidt/doc-center.html + 19. http://www.cs.wustl.edu/~schmidt/commercial-support.html + 20. mailto:d.schmidt@vanderbilt.edu + 21. http://www.dre.vanderbilt.edu/~schmidt/ + 22. http://www.cs.wustl.edu/ACE.html diff --git a/ACE/ChangeLog b/ACE/ChangeLog new file mode 100644 index 00000000000..637fa136597 --- /dev/null +++ b/ACE/ChangeLog @@ -0,0 +1,269 @@ +Tue Mar 4 09:27:18 UTC 2008 Johnny Willemsen + + * bin/ProcessVX.pm: + Added a retry to the iPass protocol code, in a full test run + we sometimes see that the reboot has failed. With this retry + we hopefully get rid of those false test failures + +Tue Mar 4 05:54:22 UTC 2008 William Otte + + * bin/svn_props.py: + Automatically set default properties when svn complains. + +Mon Mar 3 11:22:18 UTC 2008 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Just single line comments + + * bin/MakeProjectCreator/templates/gnu.mpd: + Check VXWORKSLINK for 1 + +Mon Mar 3 11:10:18 UTC 2008 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.5.x.GNU: + * include/makeinclude/platform_vxworks6.2.GNU: + * include/makeinclude/platform_vxworks6.3.GNU: + * include/makeinclude/rules.bin.GNU: + * include/makeinclude/rules.lib.GNU: + Use 1 for VXWORKSLINK instead of true. Added footprint=1 + as flag to specify that you are doing a footprint build + +Mon Mar 3 10:49:28 UTC 2008 Abdullah Sowayan + + * apps/JAWS/clients/WebSTONE/src/cgi-send.c: + * apps/JAWS/clients/WebSTONE/src/genrand.c: + * apps/JAWS/clients/WebSTONE/src/webmaster.c: + * contrib/utility/Example/CommandLine/Foo/command.cpp: + * contrib/utility/Example/ExH/BadCast/bad_cast.cpp: + * contrib/utility/Example/ExH/Compound/compound.cpp: + * contrib/utility/Example/ExH/HelloWorld/hello_world.cpp: + * contrib/utility/Example/ExH/LogicToSystem/logic_to_system.cpp: + * contrib/utility/Example/Hetero/Container/container.cpp: + * contrib/utility/Example/Introspection/InheritanceTree/inheritance_tree.cpp: + * contrib/utility/Example/Introspection/Traversal/driver.cpp: + * contrib/utility/Test/ExH/Converter/converter.cpp: + * contrib/utility/Test/ExH/Inline/inline.cpp: + * contrib/utility/Test/ExH/Logic/DescriptiveException/descriptive_exception.cpp: + * contrib/utility/Test/ExH/System/DescriptiveException/descriptive_exception.cpp: + * contrib/utility/Test/Introspection/Inline/inline.cpp: + * contrib/utility/Test/Synch/Inline/inline.cpp: + * etc/xlc_dummy.cpp: + * examples/Reactor/Proactor/test_aiocb.cpp: + * examples/Reactor/Proactor/test_aiosig.cpp: + + Disable fuzz's check_for_improper_main_declaration check on these files. + These files don't use ACE. + + * examples/Reactor/WFMO_Reactor/Multithreading.cpp: + * examples/Reactor/WFMO_Reactor/Registration.cpp: + * examples/Reactor/WFMO_Reactor/Registry_Changes.cpp: + * examples/Threads/task_three.cpp: + + Use the proper form of ACE_TMAIN. Namely, the argv parameter + should be "ACE_TCHAR *argv[]" instead of "ACE_TCHAR **argv" + or "ACE_TCHAR *[]" instead of "ACE_TCHAR **" + + * apps/JAWS3/bench/average.cpp: + * netsvcs/clients/Tokens/invariant/invariant.cpp: + + Use ACE_TMAIN instead of main as the program entry point to comply + with ACE/TAO/CIAO coding standards. + +Mon Mar 3 08:58:18 UTC 2008 Johnny Willemsen + + * include/makeinclude/platform_openvms.GNU: + Improved this file + +Mon Mar 3 07:30:18 UTC 2008 Johnny Willemsen + + * include/makeinclude/platform_openvms.GNU: + Don't set INSLIB + +Mon Mar 3 07:00:18 UTC 2008 Johnny Willemsen + + * include/makeinclude/rules.local.GNU: + Rearranged some rules so that C files are compiled with the + C compiler on OpenVMS + +Mon Mar 3 06:57:18 UTC 2008 Johnny Willemsen + + * bin/ProcessVX.pm: + Added support to specify a custom password for the iBoot + +Sun Mar 2 20:04:18 UTC 2008 Johnny Willemsen + + * bin/ProcessVX.pm: + Integrated some OCI changes for the iBoot + +Sun Mar 2 19:32:18 UTC 2008 Johnny Willemsen + + * bin/auto_run_tests.pl: + Use ACE_ROOT as defailt root test directory instead of the current + directory + +Sun Mar 2 18:53:12 UTC 2008 Abdullah Sowayan + + * ASNMP/agent/main.cpp: + * ace/Svc_Conf_y.cpp: + * apps/JAWS3/jaws3/main.cpp: + * examples/Mem_Map/IO-tests/test_io.cpp: + * examples/Reactor/Multicast/client.cpp: + * examples/Reactor/Multicast/server.cpp: + * examples/Reactor/Proactor/test_aiocb_ace.cpp: + * examples/System_V_IPC/SV_Shared_Memory/SV_Shared_Memory_Test.cpp: + * netsvcs/clients/Naming/Dump_Restore/createfile.cpp: + * netsvcs/clients/Tokens/collection/collection.cpp: + * netsvcs/clients/Tokens/collection/rw_locks.cpp: + * netsvcs/clients/Tokens/deadlock/deadlock_detection_test.cpp: + * netsvcs/clients/Tokens/invariant/invariant.cpp: + * netsvcs/clients/Tokens/manual/manual.cpp: + * netsvcs/clients/Tokens/mutex/test_mutex.cpp: + * netsvcs/clients/Tokens/rw_lock/rw_locks.cpp: + * performance-tests/Misc/context_switch_time.cpp: + * performance-tests/Misc/test_guard.cpp: + * performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.cpp: + * performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.cpp: + * performance-tests/TTCP/ACE-C++/wrapper-new-ttcp.cpp: + + Use ACE_TMAIN instead of main as the program entry point to comply + with ACE/TAO/CIAO coding standards. + + * examples/Mem_Map/IO-tests/Mem_Map_IO_Tests.mpc: + + MPC doesn't recognize ACE_TMAIN as an entry point, as such, we need + to explicitly set exename in the MPC file. + + * apps/JAWS/clients/WebSTONE/src/webclient.c: + * contrib/utility/Example/CommandLine/Foo/foo.cpp: + * performance-tests/Synch-Benchmarks/context.c: + * performance-tests/TTCP/C/new-ttcp.cpp: + * tests/Unload_libACE.cpp: + + Disable fuzz's check_for_improper_main_declaration check on these files. + These files don't use ACE. + +Sat Mar 1 19:09:18 UTC 2008 Johnny Willemsen + + * bin/auto_run_tests.pl: + Added -r as option to specify an alternate root test directory + instead of the current directory. Combined this with -l we can + then run perl scripts for testing project code. + +Thu Feb 28 16:08:18 UTC 2008 Johnny Willemsen + + * bin/generate_compile_stats.sh: + Added --compiler as option so that we can specify a different + compiler then gcc + +Thu Feb 28 08:32:18 UTC 2008 Johnny Willemsen + + * docs/ACE-bug-process.html: + Removed cvs + +Wed Feb 27 19:28:18 UTC 2008 William Otte + + * bin/MakeProjectCreator/config/global.features: + disable mcpp by default. + +Tue Feb 26 15:52:37 UTC 2008 Johnny Willemsen + + * include/makeinclude/platform_openvms.GNU: + Added support for buildbits=64 + +Tue Feb 26 09:18:37 UTC 2008 Johnny Willemsen + + * include/makeinclude/platform_openvms.GNU: + Added some compiler flags to reduce the number of warnings/errors + in the OpenVMS builds + +Mon Feb 25 19:44:37 UTC 2008 Johnny Willemsen + + * bin/PerlACE/Process_Unix.pm: + * bin/PerlACE/Process_Win32.pm: + Added IgnoreHostRoot which can be set from a test script. That way + when doing cross host testing we can make sure we don't get the + executable from the host root directory. This is for example usefull + when we want to spawn perl or another system utility + + * bin/PerlACE/Run_Test.pm: + Removed commented out line + +Mon Feb 25 14:30:37 UTC 2008 Johnny Willemsen + + * include/makeinclude/platform_vxwork6.2.GNU: + * include/makeinclude/platform_vxwork6.3.GNU: + Added LD_PARTIALFLAGS which can be set for footprint builds + +Mon Feb 25 08:13:37 UTC 2008 Johnny Willemsen + + * ace/config-macros.h: + Set ACE_HAS_INTEGRAL_TYPE_THR_FUNC_RETURN when + ACE_THR_FUNC_RETURN is an integral type + + * ace/Task.cpp: + Use ACE_HAS_INTEGRAL_TYPE_THR_FUNC_RETURN to determine whether + we can do a reinterpret_cast or static_cast. This is much easier + then checking all compilers + +Sun Feb 24 19:37:37 UTC 2008 Johnny Willemsen + + * ace/Configuration.cpp: + * ace/Configuration.h: + * ace/Configuration.inl: + Added new inline file + + * ace/Get_Opt.cpp: + Prefix increment + + * ace/Event_Handler.h: + Removed commented out code + +Sat Feb 23 06:56:37 UTC 2008 Johnny Willemsen + + * include/makeinclude/platform_openvms.GNU: + OpenVMS doesn't have rwho + +Fri Feb 22 18:55:37 UTC 2008 Johnny Willemsen + + * ace/Message_Queue_NT.h: + Fixed wrong include + +Fri Feb 22 14:20:37 UTC 2008 Johnny Willemsen + + * ace/Message_Queue.{h,cpp,inl}: + * ace/Message_Queue_NT.{h,cpp,inl}: + * tests/Message_Queue_Test.cpp: + * ace/ace.mpc: + * ace/Makefile.am: + Moved ACE_Message_Queue_NT to its own file + +Fri Feb 22 08:54:37 UTC 2008 Johnny Willemsen + + * bin/global.features: + Default optimize_collocated_invocations to 1 + +Fri Feb 22 00:34:17 UTC 2008 Steve Huston + + * bin/tao_orb_tests.lst: Added !LabVIEW_RT to all tests that haven't + been adapted to the non-local filesystem mechanism I invented to run + tests for LabVIEW RT targets (and can also be used for other target + types). Now I can enable TAO tests for the LabVIEW RT scoreboard + build. + +Thu Feb 21 15:25:37 UTC 2008 Johnny Willemsen + + * docs/Download.html: + Updated download links to point to x.6.3 + + * etc/index.html: + Updated for x.6.3 + +Thu Feb 21 02:34:37 CST 2008 Johnny Willemsen + + * ACE version 5.6.3 released. + +Local Variables: +mode: change-log +add-log-time-format: (lambda () (progn (setq tz (getenv "TZ")) (set-time-zone-rule "UTC") (setq time (format-time-string "%a %b %e %H:%M:%S %Z %Y" (current-time))) (set-time-zone-rule tz) time)) +indent-tabs-mode: nil +End: diff --git a/ACE/ChangeLogs/ChangeLog-00a b/ACE/ChangeLogs/ChangeLog-00a new file mode 100644 index 00000000000..29d983c12cd --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-00a @@ -0,0 +1,12664 @@ +Tue Oct 10 21:54:52 2000 Nanbor Wang + + * bin/msvc_auto_compile.pl (Build_Core): Updated LIB core build + dsp list. + +Tue Oct 10 18:51:16 2000 Carlos O'Ryan + + * ace/Makefile.bor: + * ace/RMCast/Makefile.bor: + * include/makeinclude/ace_flags.bor: + Add a Borland makefile for the RMCast library. Thanks to Johhny + Willemsen for providing this. + +Tue Oct 10 17:59:09 2000 Carlos O'Ryan + + * ace/RMCast/RMCast.dsp: + Update the project file + +Tue Oct 10 17:25:32 2000 Carlos O'Ryan + + * Finally the Send_File example works correctly. In my tests four + nodes received the same file successfully. + I also tried some features to cleanly terminate receivers and + senders. + However, I still need to work on flow control, and in strategies + to limit the maximum number of messages buffered by the sender + and/or receiver. + + * ace/RMCast/Makefile: + Add the new files to the Makefile + + * ace/RMCast/RMCast.h: + Move the state transition matrix to RMCast_Receiver_Module.h + + * ace/RMCast/RMCast_Ack_Worker.h: + * ace/RMCast/RMCast_Ack_Worker.i: + * ace/RMCast/RMCast_Ack_Worker.cpp: + Move the ACE_RMCast_Ack_Worker class to its own file. Only used + in the Retransmission module. + + * ace/RMCast/RMCast_Fork.h: + * ace/RMCast/RMCast_Fork.i: + * ace/RMCast/RMCast_Fork.cpp: + This class superseeds Control_Splitter. I realized that forking + the control messages to the user layer is a more general and + cleaner solution for this problem. + + * ace/RMCast/RMCast_Control_Splitter.h: + * ace/RMCast/RMCast_Control_Splitter.i: + * ace/RMCast/RMCast_Control_Splitter.cpp: + Removed. + + * ace/RMCast/RMCast_Fragment.cpp: + Fixed bug when computing the length of the message, it should be + total_length() but I was using total_size(). + + * ace/RMCast/RMCast_IO_UDP.cpp: + Destroy proxys that return -1 from receive_message(). + Add multiple debug messages, now commented out. + + * ace/RMCast/RMCast_Membership.h: + * ace/RMCast/RMCast_Membership.cpp: + When a new member joins or leaves the group we need to resend + the ack messages to the upper layer. + The code to compute the correct Ack message is factored out. + Many debug messages, but they are commented out. + New method so clients can know how many members the group has, + it can be used for safe termination of senders. + + * ace/RMCast/RMCast_Module.cpp: + The open() and close() methods propagate through the stack as + any other message. + + * ace/RMCast/RMCast_Reassembly.h: + * ace/RMCast/RMCast_Reassembly.cpp: + Cleanup is performed in the close() operation. + Old messages are dropped from the map immediately, the + Reordering layer is the right place to reject them (if any). + + * ace/RMCast/RMCast_Reliable_Factory.cpp: + Use ACE_RMCast_Receiver_Module to validate and process the + messages in the proxy, for example, Ack messages are a clear + error on the receiver side. + + * ace/RMCast/RMCast_Receiver_Module.h: + * ace/RMCast/RMCast_Receiver_Module.i: + * ace/RMCast/RMCast_Receiver_Module.cpp: + This module implements message validation and state transitions + for a receiver. + It also generates the correct responses for an Ack_Join or Poll + message. + + * ace/RMCast/RMCast_Reordering.h: + * ace/RMCast/RMCast_Reordering.cpp: + Cleanup resources in the close() method + + * ace/RMCast/RMCast_Resend_Worker.h: + * ace/RMCast/RMCast_Resend_Worker.i: + * ace/RMCast/RMCast_Resend_Worker.cpp: + Move the ACE_RMCast_Resend_Worker class to its own file. Only + used in the Retransmission module. + + * ace/RMCast/RMCast_Resend_Handler.cpp: + Resend all the messages after each timeout. + + * ace/RMCast/RMCast_Retransmission.h: + * ace/RMCast/RMCast_Retransmission.cpp: + Worker classes moved to their own files. + + * ace/RMCast/RMCast_Sequencer.h: + * ace/RMCast/RMCast_Sequencer.i: + * ace/RMCast/RMCast_Sequencer.cpp: + Assign unique sequence numbers to each message, used on the + sender side. + + * ace/RMCast/RMCast_UDP_Proxy.cpp: + Incoming message must pass through the proxy before going up the + stack. + The source field was not set in the messages. + + * ace/RMCast/RMCast_UDP_Reliable_Sender.h: + * ace/RMCast/RMCast_UDP_Reliable_Sender.i: + * ace/RMCast/RMCast_UDP_Reliable_Sender.cpp: + Use the new ACE_RMCast_Sequencer module to assign message + sequence numbers. + Use the new ACE_RMCast_Fork class to send incoming control + messages both to the user and the retransmission/membership + modules. + Add method to detect how many members are currently registered + with the membership layer. + + * tests/RMCast/RMCast_Retransmission_Test.cpp: + Assign the sequence numbers before going into the retransmission + layer, as would be done in a normal application. + + * examples/RMCast/Send_File/Makefile: + Update dependencies + + * examples/RMCast/Send_File/Sender.cpp: + Only shutdown once all the members have left the group. + Use long periods to make debugging easier. + + * examples/RMCast/Send_File/Receiver.cpp: + Only shutdown once the Ack_Leave message is received. + Return -1 from the data() method once the complete file is + received, that initiates the termination. + Use long periods to make debugging easier. + +Tue Oct 10 16:34:01 2000 Nanbor Wang + + * ace/config-win32-common.h: Changed ACE_HAS_SVC_DLL to + ACE_SVC_HAS_DLL and commented out its definition. The default + definition of ACE_SVC_HAS_DLL has been moved to + ace/Svc_export.h. The comment-out code here only serves as a + reminder to users. Thanks to Mike Curtis + for pointing this out. + + * netsvcs/lib/Base_Optimizer.cpp: Removed redundant definition of + ACE_BUILD_DLL. + + * ace/ACE_export.h: + * ace/OS_Export.h: + Added a new macro ACE_AS_STATIC_LIBS that controls the default + value of ACE_OS_HAS_DLL and ACE_HAS_DLL so we can build static + ACE library easily. + + * ace/ace_lib.dsp: + * apps/gperf/src/gperf.dsp: + * apps/gperf/src/gperf_lib.dsp: Changed to use ACE_AS_STATIC_LIBS + for static configurations. + +Mon Oct 09 16:45:00 2000 Carlos O'Ryan + + * ace/RMCast/Makefile: + * ace/RMCast/RMCast.dsp: + Add new files to the RMCast project and Makefile. + + * ace/RMCast/RMCast_Control_Splitter.h: + * ace/RMCast/RMCast_Control_Splitter.i: + * ace/RMCast/RMCast_Control_Splitter.cpp: + A module to separate control messages from regular data flow. + + * ace/RMCast/RMCast_Copy_On_Write.h: + * ace/RMCast/RMCast_Copy_On_Write.cpp: + Add accessor to check if the collection is empty. + + * ace/RMCast/RMCast_IO_UDP.h: + * ace/RMCast/RMCast_IO_UDP.i: + * ace/RMCast/RMCast_IO_UDP.cpp: + * ace/RMCast/RMCast_UDP_Event_Handler.cpp: + Decouple the event handler. + + * ace/RMCast/RMCast_Module.h: + * ace/RMCast/RMCast_Module.i: + * ace/RMCast/RMCast_Module.cpp: + * ace/RMCast/RMCast_UDP_Proxy.h: + Fixed comments. + + * ace/RMCast/RMCast_Module_Factory.h: + No need to pass the IO_UDP to the module factory. + + * ace/RMCast/RMCast_Reliable_Factory.h: + * ace/RMCast/RMCast_Reliable_Factory.i: + * ace/RMCast/RMCast_Reliable_Factory.cpp: + A factory to create the per-proxy stack on the receivers. + + * ace/RMCast/RMCast_Resend_Handler.h: + * ace/RMCast/RMCast_Resend_Handler.i: + * ace/RMCast/RMCast_Resend_Handler.cpp: + An adapter to resend messages on a Reactor scheduled timer. + + * ace/RMCast/RMCast_Retransmission.h: + * ace/RMCast/RMCast_Retransmission.cpp: + Add a method to resend all the messages. + + * ace/RMCast/RMCast_Singleton_Factory.h: + * ace/RMCast/RMCast_Singleton_Factory.i: + * ace/RMCast/RMCast_Singleton_Factory.cpp: + A module factory that "creates" the same object over and over. + + + * ace/RMCast/RMCast_UDP_Reliable_Receiver.h: + * ace/RMCast/RMCast_UDP_Reliable_Receiver.i: + * ace/RMCast/RMCast_UDP_Reliable_Receiver.cpp: + Helper class to simplify the creation and configuration of a UDP + receiver. + + * ace/RMCast/RMCast_UDP_Reliable_Sender.h: + * ace/RMCast/RMCast_UDP_Reliable_Sender.i: + * ace/RMCast/RMCast_UDP_Reliable_Sender.cpp: + Helper class to simplify the creation and configuration of a UDP + sender. + + * tests/RMCast/RMCast_UDP_Best_Effort_Test.cpp: + Had to change due to modifications in the I/O UDP layer + interface. + + * examples/RMCast/Makefile: + * examples/RMCast/Send_File/Makefile: + * examples/RMCast/Send_File/Receiver.cpp: + * examples/RMCast/Send_File/Receiver.dsp: + * examples/RMCast/Send_File/Send_File.dsw: + * examples/RMCast/Send_File/Sender.cpp: + * examples/RMCast/Send_File/Sender.dsp: + Add a simple example that sends a file over reliable UDP + multicast. + +Mon Oct 9 14:44:25 2000 Darrell Brunsch + + * bin/generate_export_file.pl: + + Made some minor changes to make a bit more robust. + + * bin/regenerate_exports.pl: (added) + + This script should be able to recurse from the current directory + reupdating the export files. Use at your own risk. + +Mon Oct 09 03:23:22 2000 Nanbor Wang + + * bin/generate_export_file.pl: Changed the script so we can define + a single macro to switch multiple *_HAS_DLL default definitions. + +Sat Oct 7 04:30:00 2000 Douglas C. Schmidt + + * Doug and Sonja got married in St. Louis, surrounded by + their family, friends, and many ACE+TAO developers! + +Sat Oct 7 000:50:02 2000 Darrell Brunsch + + * ace/ACE.cpp: + * ace/ACE.h: + * ace/ACE.i: + * ace/ARGV.cpp: + * ace/ATM_Acceptor.cpp: + * ace/ATM_Acceptor.i: + * ace/ATM_Addr.cpp: + * ace/ATM_Connector.cpp: + * ace/ATM_Connector.i: + * ace/ATM_QoS.cpp: + * ace/ATM_Stream.cpp: + * ace/Acceptor.cpp: + * ace/Activation_Queue.cpp: + * ace/Addr.cpp: + * ace/Arg_Shifter.cpp: + * ace/Asynch_Acceptor.cpp: + * ace/Asynch_IO.cpp: + * ace/Based_Pointer_T.cpp: + * ace/Basic_Types.h: + * ace/CORBA_Handler.cpp: + * ace/Cache_Map_Manager_T.cpp: + * ace/Cached_Connect_Strategy_T.cpp: + * ace/Caching_Strategies_T.i: + * ace/Capabilities.cpp: + * ace/Capabilities.h: + * ace/Configuration.cpp: + * ace/Connector.cpp: + * ace/Containers_T.cpp: + * ace/DEV_Addr.cpp: + * ace/DEV_Connector.i: + * ace/DLL.cpp: + * ace/Dirent.i: + * ace/Dynamic_Service.cpp: + * ace/FIFO.cpp: + * ace/FIFO_Recv.cpp: + * ace/FIFO_Recv_Msg.cpp: + * ace/FIFO_Send.cpp: + * ace/FIFO_Send_Msg.cpp: + * ace/FILE_Addr.cpp: + * ace/FILE_Connector.cpp: + * ace/FILE_Connector.i: + * ace/File_Lock.cpp: + * ace/Filecache.cpp: + * ace/Filecache.h: + * ace/Future.cpp: + * ace/Get_Opt.cpp: + * ace/Handle_Set.cpp: + * ace/Hash_Map_Manager_T.cpp: + * ace/Hash_Map_Manager_T.i: + * ace/High_Res_Timer.cpp: + * ace/High_Res_Timer.h: + * ace/INET_Addr.cpp: + * ace/INET_Addr.h: + * ace/IO_SAP.cpp: + * ace/IPC_SAP.cpp: + * ace/LSOCK.cpp: + * ace/LSOCK_CODgram.cpp: + * ace/LSOCK_Connector.cpp: + * ace/LSOCK_Dgram.cpp: + * ace/Local_Name_Space_T.cpp: + * ace/Local_Tokens.cpp: + * ace/Local_Tokens.i: + * ace/Log_Msg.cpp: + * ace/Log_Msg.h: + * ace/Log_Record.cpp: + * ace/Logging_Strategy.cpp: + * ace/MEM_Acceptor.cpp: + * ace/MEM_Addr.cpp: + * ace/MEM_Connector.cpp: + * ace/MEM_SAP.cpp: + * ace/Malloc.cpp: + * ace/Malloc_T.cpp: + * ace/Malloc_T.h: + * ace/Map_Manager.cpp: + * ace/Map_Manager.i: + * ace/Mem_Map.cpp: + * ace/Memory_Pool.cpp: + * ace/Message_Block.cpp: + * ace/Message_Queue.cpp: + * ace/Message_Queue_T.cpp: + * ace/Module.cpp: + * ace/Name_Proxy.cpp: + * ace/Name_Request_Reply.cpp: + * ace/Naming_Context.cpp: + * ace/OS.cpp: + * ace/OS.h: + * ace/OS.i: + * ace/Object_Manager.cpp: + * ace/Obstack.cpp: + * ace/POSIX_Asynch_IO.cpp: + * ace/Parse_Node.cpp: + * ace/Pipe.cpp: + * ace/Proactor.cpp: + * ace/Process.cpp: + * ace/Process_Manager.cpp: + * ace/QoS_Manager.cpp: + * ace/QoS_Session_Factory.cpp: + * ace/QoS_Session_Impl.cpp: + * ace/RB_Tree.cpp: + * ace/RB_Tree.i: + * ace/Read_Buffer.cpp: + * ace/Registry.cpp: + * ace/Registry_Name_Space.cpp: + * ace/Remote_Name_Space.cpp: + * ace/Remote_Tokens.cpp: + * ace/SOCK.cpp: + * ace/SOCK_Acceptor.cpp: + * ace/SOCK_CODgram.cpp: + * ace/SOCK_Connector.cpp: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_Dgram_Mcast.h: + * ace/SOCK_Dgram_Mcast_QoS.cpp: + * ace/SPIPE_Acceptor.cpp: + * ace/SPIPE_Addr.cpp: + * ace/SPIPE_Connector.cpp: + * ace/SV_Message_Queue.cpp: + * ace/SV_Semaphore_Complex.cpp: + * ace/SV_Semaphore_Simple.cpp: + * ace/SV_Shared_Memory.cpp: + * ace/Select_Reactor_Base.cpp: + * ace/Select_Reactor_T.cpp: + * ace/Service_Config.cpp: + * ace/Service_Manager.cpp: + * ace/Service_Repository.cpp: + * ace/Service_Types.cpp: + * ace/Singleton.cpp: + * ace/Stats.cpp: + * ace/Stats.i: + * ace/Strategies_T.cpp: + * ace/Strategies_T.i: + * ace/Stream.cpp: + * ace/Svc_Conf.h: + * ace/Svc_Conf.l: + * ace/Svc_Conf.y: + * ace/Svc_Conf_l.cpp: + * ace/Svc_Conf_y.cpp: + * ace/Svc_Handler.cpp: + * ace/Synch.cpp: + * ace/Synch.h: + * ace/Synch_T.cpp: + * ace/System_Time.cpp: + * ace/TLI.cpp: + * ace/TLI_Acceptor.cpp: + * ace/TLI_Connector.i: + * ace/TP_Reactor.i: + * ace/Task_T.cpp: + * ace/Thread_Manager.cpp: + * ace/Time_Request_Reply.cpp: + * ace/Timeprobe_T.cpp: + * ace/Timer_Hash_T.cpp: + * ace/Timer_Heap_T.cpp: + * ace/Timer_List_T.cpp: + * ace/Timer_Queue_Adapters.cpp: + * ace/Timer_Queue_T.cpp: + * ace/Timer_Wheel_T.cpp: + * ace/Token.cpp: + * ace/Token_Collection.cpp: + * ace/Token_Invariants.cpp: + * ace/Token_Manager.cpp: + * ace/Token_Request_Reply.cpp: + * ace/Token_Request_Reply.i: + * ace/Trace.cpp: + * ace/Trace.h: + * ace/UPIPE_Acceptor.cpp: + * ace/UPIPE_Connector.cpp: + * ace/UPIPE_Connector.i: + * ace/WFMO_Reactor.cpp: + * ace/WFMO_Reactor.i: + * ace/WIN32_Asynch_IO.cpp: + * ace/WIN32_Proactor.cpp: + * ace/XTI_ATM_Mcast.i: + * ace/ace_wchar.h: + * ace/config-WinCE.h: + * ace/config-all.h: + * ace/config-win32-borland.h: + * ace/config-win32-msvc.h: + * ace/config-win32-visualage.h: + + Split several methods into char/wchar_t versions: + - ACE_OS::getenv + - ACE_OS::cuserid + - ACE_Allocator_Adapter constructor + - ACE_Manual_Event constructor + + Split several string macros into char/wchar_t versions: + - ACE_DIRECTORY_SEPARATOR_STR + - ACE_DIRECTORY_SEPARATOR_CHAR + - ACE_PLATFORM + - ACE_PLATFORM_EXE_SUFFIX + - ACE_DEFAULT_LOCALNAME + - ACE_DEFAULT_GLOBALNAME + - ACE_DEFAULT_MUTEX + + Added ACE_DEFAULT_NAMESPACE_DIR back in for ACE_LEGACY_MODE. + +Fri Oct 06 11:34:26 2000 Steve Huston + + * ace/Based_Pointer_T.cpp: + * ace/Select_Reactor_T.cpp: Added #include "ace/Log_Msg.h" else IBM + C++ can't compile the template at instantiation time. + +Wed Oct 04 12:23:34 2000 Carlos O'Ryan + + * ace/RMCast/RMCast_Copy_On_Write.h: + * ace/RMCast/RMCast_Copy_On_Write.i: + * ace/RMCast/RMCast_Copy_On_Write.cpp: + More cleanup, this time for the Read_Guard class + + * ace/RMCast/RMCast_Proxy.h: + * ace/RMCast/RMCast_Proxy.cpp: + * ace/RMCast/RMCast_UDP_Proxy.cpp: + The ACE_RMCast_Proxy class now handles outgoing Ack_Join + messages to update the sequence numbers. + + * ace/RMCast/RMCast_Reordering.cpp: + * ace/RMCast/RMCast_Retransmission.cpp: + Fixed memory management problems. + + * tests/RMCast/RMCast_Retransmission_Test.cpp: + Add tests to verify that the right number of messages is + received by *all* proxies. Also check the Ack_Join messages. + +Wed Oct 4 12:03:07 2000 Ossama Othman + + * configure.in (ACE_HAS_STREAM_PIPES): + + Verify that we can actually set a STREAM option that ACE uses. + This is particularly necessary for platforms that have ioctl + conflicts. For example, the Linux kernel's CDROM ioctls have + the same values as glibc 2.1.94's STREAM ioctls. Attempting to + set a STREAM ioctl actually causes one of the CDROM ioctls to be + set (unsuccessfully)! + + * configure.in: + * m4/ace.m4: + * m4/compiler.m4: + + Changed all uses of "$target" to "$host." "$target" is only + used for compiler tool chains. "$host" is the correct variable + since it refers to the host the application will be run on (as + opposed to the host the application was built on $build). + +Wed Oct 4 09:15:42 2000 Darrell Brunsch + + * ace/RMCast/RMCast.dsp: + + Added new files. + +Tue Oct 3 17:07:37 2000 Carlos O'Ryan + + * ace/RMCast/Makefile: + * ace/RMCast/RMCast_Reordering.h: + * ace/RMCast/RMCast_Reordering.i: + * ace/RMCast/RMCast_Reordering.cpp: + Add re-ordering module, this is the receiver-side module that + acks messages and delivers them in order to the application. + + * ace/RMCast/RMCast.h: + Fixed data type in the Ack_Join message + + * ace/RMCast/RMCast_Copy_On_Write.h: + * ace/RMCast/RMCast_Copy_On_Write.i: + * ace/RMCast/RMCast_Copy_On_Write.cpp: + * ace/RMCast/RMCast_Retransmission.cpp: + Cleanup the Copy_On_Write implementation + + * tests/RMCast/Makefile: + * tests/RMCast/RMCast_Tests.dsw: + * tests/RMCast/RMCast_Reordering_Test.cpp: + * tests/RMCast/RMCast_Reordering_Test.dsp: + Add test for the reordering module. + + * tests/RMCast/RMCast_Retransmission_Test.cpp: + Remove debug messages for the retransmission stuff. + +Tue Oct 3 15:03:42 2000 Darrell Brunsch + + * ace/OS.i: + + In the non-Win32 section of hostname (wchar version) I + forgot to call wchar_rep on the ACE_Ascii_To_Wide temp + class I was using. + + * ace/OS.h: + + ACE_PLATFORM_EXE_SUFFIX was being defined incorrectly. + +Tue Oct 3 14:25:09 2000 Darrell Brunsch + + * ace/OS.cpp: + * ace/OS.h: + * ace/OS.i: + + Expanded TCHAR versions of some string macros to have + both _A and _W versions. Moved many of these + definitions around, since a lot of the same code was + being repeated. The macros changed are: + ACE_DIRECTORY_SEPARATOR_STR, ACE_DIRECTORY_SEPARATOR_CHAR, + ACE_PLATFORM, ACE_PLATFORM_EXE_SUFFIX, + ACE_DEFAULT_LOCALNAME, ACE_DEFAULT_GLOBALNAME and + ACE_DEFAULT_MUTEX. [Bug 674] + + Split TCHAR versions of atoi, hostname, access, + open, and chdir into char and wchar_t versions. + + * ace/Process_Mutex.cpp: + * ace/Process_Mutex.h: + + Changed the ACE_Process_Mutex constructor to take a + char as a argument instead of TCHAR. Also added a + version that takes in wchar_t. + + * ace/Synch.cpp: + * ace/Synch.h: + + Changed the ACE_Auto_Event constructor to take a + char as a argument instead of TCHAR. Just like above, + added a version that takes in wchar_t also. + + * ace/ace_wchar.h: + * ace/ace_wchar.inl: (added) + + Moved the method definitions from inlined in the + class definition to the .inl file. + + Added typedefs for ACE_OS_C/WString to the + ACE_Wide_To_Ascii/Asci_To_Wide classes for legacy + support. [Bug 675] + + Added ACE_TEXT_WCHAR_TO_TCHAR macro that acts similar + to ACE_TEXT_CHAR_TO_WCHAR (except converts wchar_t's) + + Added ACE_TEXT_WIDE macro, which is used to make literal + strings wide. (We were just directly using L"" in most + cases) + +Tue Oct 3 13:27:13 2000 Joe Hoffert + + * ace/OS.i: + * ace/OS.cpp: + Added !ACE_HAS_TSS_EMULATION to the ACE_HAS_PACE + checks when TSS emulation is being used. We want + to let ACE do the emulation instead of moving it + into PACE since this would involve keeping track + of the global TSS state. + +Tue Oct 3 12:25:46 2000 Darrell Brunsch + + * ace/Thread_Exit.cpp: + + Removed default argument in the function definition. + + * ace/Thread_Adapter.cpp: + * ace/Thread_Adapter.h: + + Separated ACE_Thread_Adapter::invoke into invoke and + invoke_i because it uses SEH and James added local vars + with destructors. They don't work together in the same + function. + +Tue Oct 03 12:53:28 2000 Angelo Corsaro + + * bin/run_all_list.pm: + + Disabled Connection Purging test, and enabled Exposed + Policies test. + +Tue Oct 3 10:52:24 2000 Darrell Brunsch + + * performance-tests/Synch-Benchmarks/Base_Test/mutex_test.cpp: + + Added explicit includes for Process_Mutex and RW_Process_Mutex. + +Tue Oct 3 10:40:04 PDT 2000 James Hu + + * ace/Thread_Adapter.cpp: + * ace/Thread_Exit.cpp: + * ace/Thread_Exit.h: + + Changed this check to creating an ACE_Thread_Exit off the + heap via a smart pointeresque way of the TSS instance + fails to create. + +Tue Oct 3 05:55:01 2000 Douglas C. Schmidt + + * ace/Hash_Map_Manager_T.cpp: Added && (__SUNPRO_CC == 0x420) + to the #elif defined (__SUNPRO_CC) to make things work properly + on the Sun FORTE compiler. Thanks to Russ Noseworthy for + reporting this. + +Mon Oct 2 18:49:06 PDT 2000 James Hu + + * ace/Thread_Adapter.cpp: + + If the TSS instance of the ACE_Thread_Exit class fails to + create, the application will crash. The new code will detect + the failure, wait half a second, and try again. This + solution, while cheesy, corrects a problem Entera + encountered, and avoids the problems my previous attempt + caused with ACE. + +Mon Oct 2 13:38:44 2000 Ossama Othman + + * examples/QOS/QoS_Signal_Handler.cpp: + * examples/QOS/QoS_Util.cpp: + + Include "ace/Log_Msg.h" to pull in definitions of the + ACE_{DEBUG,ERROR} macros. + +Mon Oct 2 11:29:47 2000 Carlos O'Ryan + + * ace/RMCast/RMCast_Retransmission.h: + * ace/RMCast/RMCast_Retransmission.cpp: + Fixed several minor problems in the Retransmission module. + Use Copy_On_Write dispatching for synchronization of the + internal message buffer. + + * ace/RMCast/RMCast_Copy_On_Write.h: + * ace/RMCast/RMCast_Copy_On_Write.i: + * ace/RMCast/RMCast_Copy_On_Write.cpp: + Implement Copy_On_Write semantics for a collection like the + retransmission buffer. This is based on the ESF_Copy_On_Write + strategy developed for the event channel. + We should try to refactor this one in a reusable strategy. + + * ace/RMCast/RMCast_Worker.h: + * ace/RMCast/RMCast_Worker.i: + * ace/RMCast/RMCast_Worker.cpp: + To implement copy-on-write we need the "alternative" form of + iterators. + + * ace/RMCast/RMCast.h: + * ace/RMCast/RMCast_Fragment.h: + * ace/RMCast/RMCast_IO_UDP.h: + * ace/RMCast/RMCast_IO_UDP.cpp: + * ace/RMCast/RMCast_Membership.h: + * ace/RMCast/RMCast_Membership.i: + * ace/RMCast/RMCast_Membership.cpp: + * ace/RMCast/RMCast_Module.h: + * ace/RMCast/RMCast_Module_Factory.h: + * ace/RMCast/RMCast_Partial_Message.h: + * ace/RMCast/RMCast_Proxy.h: + * ace/RMCast/RMCast_Proxy.i: + * ace/RMCast/RMCast_Proxy.cpp: + * ace/RMCast/RMCast_UDP_Event_Handler.h: + * ace/RMCast/RMCast_UDP_Proxy.cpp: + * tests/RMCast/RMCast_Membership_Test.cpp: + Made the comments more doxygen friendly. + Renamed the highest_in_sequence field to next_expected, the new + name really reflects its semantics, this is the next sequence + number that the peer is expecting. All the previous numbers + have been either received or are simply assumed lost. + + * tests/Makefile: + If the rmcast makefile flag is set to 1 we build the RMCast + subdirectory too. + + * tests/RMCast/Makefile: + * tests/RMCast/RMCast_Tests.dsw: + * tests/RMCast/RMCast_Retransmission_Test.dsp: + * tests/RMCast/RMCast_Retransmission_Test.cpp: + New test for the Retransmission module + +Sun Oct 01 15:50:42 2000 Darrell Brunsch + + * bin/auto_run_tests.pl: + + Added support for a sandbox program that can shutdown a test + if it hangs. + +Fri Sep 29 16:32:22 2000 Darrell Brunsch + + * bin/msvc_auto_compile.pl: + + Added the BE and FE projects for TAO_IDL so the static version + gets built correctly in auto_compiles. + +Fri Sep 29 16:17:34 2000 Steve Huston + + * ace/WFMO_Reactor.cpp (register_handle_i): If a event handle + is created for association with a socket handle, the + auto_ptr which caused the ACE_Auto_Event destruction at function + return usually smashed errno (since it was closing an invalid + handle - see comments in code). Added a ACE_Errno_Guard and + removed the ACE_Auto_Event's handle while in the guard to prevent + errno smashing upon function return. + +Thu Sep 28 22:06:44 2000 Ossama Othman + + * ace/SSL/SSL_SOCK_Connector.h: + * ace/SSL/SSL_SOCK_Connector.cpp (ACE_SSL_SOCK_Connector, + shared_connect_start, shared_connect_finish, connect, complete): + + Made ACE_Time_Value arguments const to match the changes + detailed in: + + Thu Sep 28 15:02:36 2000 Irfan Pyarali + +Fri Sep 29 00:23:59 2000 Irfan Pyarali + + * ace/Log_Msg.h (ACE_RETURN): Fixed minor error. + +Thu Sep 28 22:13:04 2000 Irfan Pyarali + + * ace/Log_Msg: Macros are evil! All the ACE debugging macros were + evaluating the user arguments twice, once in + log_priority_enabled() and the other in log(). The problem was + that set() was making a deep copy of the filename. Hence, this + change: + + Wed May 3 11:43:05 2000 Douglas C. Schmidt + + was made to prevent the deep copy which was unnecessary when the + message was not actually logged. However, this resulted in the + macro evaluating the user arguments twice. Previously, a + statement like this: + + ACE_DEBUG ((LM_DEBUG, + "timeout occured, iterations left %d\n", + --iterations)); + + got reduced by one - now it got reduced by two ;-) + + The solution was to make a shallow copy of the filename in + conditional_set(). Then in log(), if the log priority is + correct, make a deep copy and then continue will log(). The + macros were changed to call conditional_set() instead of set(). + + Also, changed ACE_RETURN to specify all the parameters, + including , , and . Otherwise, the + default parameters of set() will end up losing these parameters + set by the user. + +Thu Sep 28 15:49:00 2000 Douglas C. Schmidt + + * ace/Stream.h (class ACE_Stream): Updated the documentation to clarify + that the ACE_Time_Value's are *absolute* time. Thanks to Pedro + for reporting this. Thanks to Pedro Brandao + for reporting this. + +Thu Sep 28 15:02:36 2000 Irfan Pyarali + + * ace/SOCK_Connector.cpp: ACE_Time_Value args to + ACE_SOCK_Connector could be const. Had to patch functions in + the following files to make it happen: + + ACE.cpp + ACE.h + OS.h + OS.i + SOCK_Connector.cpp + SOCK_Connector.h + + Thanks to Steve Huston for reporting + this. This also fixes bug 673. + +Thu Sep 28 11:14:29 2000 Martin Stack + + * ace/config-freebsd.h: + * ace/config-freebsd-pthread.h: + * ace/config-linux-common.h: + * ace/config-irix6.x-common.h: Added/Renamed to + ACE_USES_NEW_TERMIOS_STRUCT. + + * ace/TTY_IO.h: + * ace/TTY_IO.cpp: The Win32 section was modified to implement a + non-blocking read when read-timeout=0 is set. Also, it was + modified to ensure proper operations when a read_timeout is + required. + + Code was added to enable the DTR line on both Win32 and unix + platforms when the port is opened. + + Several new flags where added to give proper access to the + serial device. + + Relabled macro "ACE_USES_OLD_TERMIOS_STRUCT" to + "ACE_USES_NEW_TERMIOS_STRUCT" to properly indicate its purpose. + +Thu Sep 28 09:01:19 2000 Ossama Othman + + * ace/config-g++-common.h: + + Reverted my g++ 2.95 updates. They work on all platforms but + the cross-compiler used for VxWorks. + +Wed Sep 27 16:17:36 2000 Ossama Othman + + * ace/IOStream.h: + * ace/IOStream_T.h: + + Moved inclusion of `ace/INET_Addr.h' and `ace/Handle_Set.h' to + `IOStream_T.h'. They weren't needed in `IOStream.h'. + + * ace/config-g++-common.h (ACE_LACKS_AUTO_PTR, + ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES, + ACE_HAS_GNUC_BROKEN_TEMPLATE_INLINE_FUNCTIONS): + + G++ 2.95.x properly support the auto_ptr class, templates with + static data members, and inlined template functions. + +Wed Sep 27 14:02:30 2000 Irfan Pyarali + + * examples/Reactor/WFMO_Reactor/test_abandoned.cpp + (handle_timeout): Moved <--this->iterations_> outside the DEBUG + statement. + +Wed Sep 27 08:46:12 2000 Carlos O'Ryan + + * ace/RMCast/RMCast.dsw: + Add new files to the project + + * tests/RMCast/RMCast_Tests.dsw: + * tests/RMCast/RMCast_Membership_Test.dsp: + Add project file for the new test + + * tests/RMCast/RMCast_Membership_Test.cpp: + Fixed warning under MSVC + +Wed Sep 27 08:23:58 2000 Carlos O'Ryan + + * ace/RMCast/Makefile: + Updated dependencies + + * ace/RMCast/RMCast.h: + * ace/RMCast/RMCast_Module.h: + * ace/RMCast/RMCast_Proxy.cpp: + * ace/RMCast/RMCast_Proxy.h: + * ace/RMCast/RMCast_Reassembly.h: + * ace/RMCast/RMCast_Reassembly.cpp: + * ace/RMCast/RMCast_Retransmission.cpp: + Update comments to be doxygen friendly + + * ace/RMCast/RMCast_Membership.cpp: + Fixed problems in Ack management, we were stopping the useful + Acks, not the ones that just represented repeated information. + + * tests/RMCast/Makefile: + * tests/RMCast/RMCast_Membership_Test.cpp: + Add test for the ACE_RMCast_Membership class. + +Tue Sep 26 22:39:42 2000 Darrell Brunsch + + * examples/Reactor/WFMO_Reactor/test_abandoned.cpp: + + Changed the include of Synch.h to Process_Mutex.h since + Process Mutex was moved there. + +Tue Sep 26 15:06:05 2000 Joe Hoffert + + * ace/config-all.h: + * ace/OS.h: + Removed defining ACE_HAS_POSIX_SEM for ACE using PACE + from OS.h and put it into the config-all.h file. + + * ace/OS.{i,cpp}: + Added appropriate calls to pace_* functions when ACE + is using PACE. + +Tue Sep 26 14:14:17 2000 Steve Huston + + * ace/Cache_Map_Manager_T.h: Added some comments to the find() + methods to say what they do and what they return. + +Tue Sep 26 10:09:32 2000 Carlos O'Ryan + + * bin/auto_compile: + Modified to use the auto_run_tests.lst file to select the list + of tests to run. + Add new -config option to disable one or more tests, this will + allow us select new configurations that disable one or more + tests without requiring changes to the auto_compile script. + + * bin/auto_run_tests.lst: + Disable some tests in STATIC builds and under linux. + + * bin/run_all_list.pm: + This file is no longer used by auto_compile, add comments to + that effect. + +Tue Sep 26 11:51:27 2000 Steve Huston + + * ace/Log_Msg.h: Add #include "ace/config-all.h" to be sure that + ACE_NDEBUG is defined (or not) properly before using it. Thanks + to Edan Ayal for this fix. + +Mon Sep 25 16:00:30 2000 Douglas C. Schmidt + + * ace/Synch.h: Clarify that the ACE_Auto_Event and ACE_Manual_Event + classes only support USYNC_PROCESS on Win32. Thanks to Andreas + Schuelke for motivating this + change. + +Mon Sep 25 23:03:11 2000 Marina Spivak + + * bin/run_all_list.pm: + + Added TAO/tests/RTCORBA/Client_Propagated and + TAO/tests/RTCORBA/Server_Protocol to the list of auto daily + tests. + +Mon Sep 25 16:58:22 2000 Ossama Othman + + * ltcf-c.sh: + * ltcf-cxx.sh: + * ltconfig: + * ltmain.sh: + + Updates from upstream libtool multi-language CVS branch. + +Mon Sep 25 14:24:49 2000 Jeff Parsons + + * Static_performance.dsw: + + Added the modular IDL compiler projects, and set + the dependencies. + +Mon Sep 25 11:45:53 2000 Steve Huston + + * ace/config-win32-common.h: If NDEBUG is set, then also set + ACE_NDEBUG. Thanks to Edan Ayal for noting + that ACE_NDEBUG didn't always get set for Release builds. + +Sat Sep 23 16:55:26 2000 Carlos O'Ryan + + * ace/RMCast/Makefile: + Add new components to the RMCast library. + + * ace/RMCast/RMCast_Proxy.h: + * ace/RMCast/RMCast_Proxy.i: + * ace/RMCast/RMCast_Proxy.cpp: + All proxies must derive from this class, it offers methods to + send back replies directly to the peer. + + * ace/RMCast/RMCast.h: + The Proxy source is propagate among layers. + + * ace/RMCast/RMCast_IO_UDP.cpp: + All proxies are modules. + + * ace/RMCast/RMCast_Membership.h: + * ace/RMCast/RMCast_Membership.i: + * ace/RMCast/RMCast_Membership.cpp: + New module to keep an explicit collection of all the peers, + detecting join and leave messages and computing the messages + successfully received by all the peers using the Ack + information. + + * ace/RMCast/RMCast_Retransmission.h: + * ace/RMCast/RMCast_Retransmission.i: + * ace/RMCast/RMCast_Retransmission.cpp: + Buffer messages to allow retransmission. + + * ace/RMCast/RMCast_UDP_Proxy.h: + * ace/RMCast/RMCast_UDP_Proxy.i: + * ace/RMCast/RMCast_UDP_Proxy.cpp: + Modified to inherit from the new RMCast_Proxy class. + +Fri Sep 22 15:13:46 2000 Darrell Brunsch + + * ace/Atomic_Op.i: + + I was mistaken, inline was being used correctly here, + since on NT this is only included from Atomic_Op.h. + So I reverted the previous change and added a disable + command for fuzz. + +Fri Sep 22 14:49:19 2000 Darrell Brunsch + + * ace/OS.h: + * ace/README: + * ace/Synch.h: + * ace/Thread_Control.cpp: + * ace/Thread_Control.h: + * ace/ace_wchar.h: + * ace/config-all.h: + + Replaced ACE_ONLY_LATEST_AND_GREATEST with ACE_LEGACY_MODE + since we wanted to change our usage of it (and this should + be a bit clearer). + + To enable some legacy code, just define ACE_LEGACY_MODE + in config.h. + +Fri Sep 22 14:24:14 2000 Darrell Brunsch + + * apps/JAWS/remora/app/Remora_Export.h: + * apps/JAWS/remora/app/Remora_Import.h + * apps/JAWS/remora/app/remora.idl: + * apps/JAWS/remora/app/test.cc: + * examples/Web_Crawler/Command_Processor.h: + * tests/Handle_Set_Test.cpp: + + The CVS Id strings were not correctly formatted, so CVS + never recognized them or updated them. Fixed. + +Fri Sep 22 12:27:42 2000 Darrell Brunsch + + * bin/fuzz.pl: + + The checks for TEXT and TCHAR gave too many false positives. + Fixed to be a bit smarter about having these inside other + macro names (such as DEFAULTCHARS). + + Also improved detection of CVS Id strings, since it ends + up that there are several places where the strings are close + (start with $ and Id) but then are missing a colon so they + don't get updated properly. + + * WindozeCE/ACEApp.cpp: + * WindozeCE/WindozeCE.cpp: + * WindozeCE/WindozeCE.h: + * WindozeCE/WindozeCEDlg.cpp: + + Disabled the fuzz tchar check, since these are WinCE only + files and shouldn't have any problems with using the Win32 + specific character macros. + + * WindozeCE/WindozeCE.plg: (removed) + + Shouldn't be in the repository + + * ace/ACE.cpp: + + There were some TEXT's (albeit in comments) that I changed + to ACE_TEXT to make fuzz happy. + + * ace/Atomic_Op.i: + + Changed the inline's to ACE_INLINE to be consistent with the + rest of the file. + + * ace/Handle_Gobbler.i: + * apps/JAWS/remora/app/Remora_Export.i: + * apps/JAWS/remora/app/Remora_Import.i: + * examples/ASX/Event_Server/Event_Server/Options.i: + * examples/ASX/UPIPE_Event_Server/Options.i: + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.i: + + Disabled the fuzz check for inline in these files, since + they are only included in .h files, so they should be + inline instead of ACE_INLINE. + + * apps/JAWS/clients/WebSTONE/src/bench.c: + * apps/JAWS/clients/WebSTONE/src/genrand.c: + * apps/JAWS/clients/WebSTONE/src/statistics.c: + * apps/JAWS/clients/WebSTONE/src/timefunc.c: + * apps/JAWS/clients/WebSTONE/src/webclient.c: + * apps/JAWS/clients/WebSTONE/src/webmaster.c: + * apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/eventlog.h: + * apps/JAWS/stress_testing/global.h: + + Disabled checks for inline and math.h, since there probably + isn't any problems with them here. + + * performance-tests/TCP/tcp_test.cpp: + * performance-tests/UDP/udp_test.cpp: + + Disabled fuzz math.h include checks. + + Fuzz reports should be pretty clean now, just some Id string + stuff to clean up. [Bug 630] + +Fri Sep 22 12:01:06 2000 Ossama Othman + + * ace/Basic_Types.h (ACE_ULongLong): + + This class does't use the ACE_ALLOC_HOOK_DEFINE macro so there + was no point in using the corresponding ACE_ALLOC_HOOK_DECLARE + macro. Removed ACE_ALLOC_HOOK_DECLARE from the ACE_ULongLong + class. + + * ace/OS.h: + * ace/config-all.h: + + Moved ACE_ALLOC_HOOK* macros to `ace/config-all.h' so that it + isn't necessary to include `ace/OS.h' just to pull in the + definition of those macros. + +Fri Sep 22 13:02:41 2000 Steve Huston + + * ace/config-all.h: Enable ACE_ONLY_LATEST_AND_GREATEST by default. + If config.h sets it to 0, then it gets disabled to allow deprecated + features to be used. Do not rely on them staying there through the + next ACE release however. + +Fri Sep 22 09:27:42 2000 Darrell Brunsch + + * ace/Logging_Strategy.cpp: + + Added ACE_TEXT to a couple of the literal strings. + + * ace/Registry.cpp: + + MSVC 5 has a different signature for RegConnectRegistry where + the first argument (machine name) is not constant. Added a cast + to fix this. [Bug 620] + +Fri Sep 22 08:30:26 2000 Carlos O'Ryan + + * ace/Proactor.cpp: + Fixed small typo for platforms that define ACE_HAS_SIG_C_FUNC + +Thu Sep 21 18:04:53 2000 Ossama Othman + + * examples/IPC_SAP/SSL_SAP/Makefile (LDLIBS): + + `-lssl -lcrypto' is needed for static builds. + +Thu Sep 21 16:54:19 2000 Nanbor Wang + + * ace/OS.cpp: Fixed a typo in . Thanks to Craig + Perras . + +Thu Sep 21 14:40:07 2000 Ossama Othman + + * ace/SSL/SSL_SOCK_Connector.h: + * ace/SSL/SSL_SOCK_Connector.i: + * ace/SSL/SSL_SOCK_Connector.cpp: + + Removed all uses "non_ssl_connect_done_" attribute. It made the + SSL_SOCK_Connector class non-reentrant, and prevented the + SSL_SOCK_Connector from being used to create additional + connections. [Bug 660] + + (connect, complete): + + Do not attempt to set the handle in SSL_SOCK_Stream if it is + already set. Doing so would cause OpenSSL to create another + socket in addition to other internal OpenSSL buffers, which + isn't necessary when reconnecting to the same endpoint. + + (ssl_connect): + + Do not set the SSL connect state if an SSL connection is already + pending. + + * ace/SSL/ACE_SSL.dsp: + + Changed output library location to be `../../bin' (equivalent to + $ACE_ROOT/bin). This change makes this project file consistent + with all other ACE/TAO projects. + + * examples/IPC_SAP/SSL_SAP/SSL-client.dsp: + * examples/IPC_SAP/SSL_SAP/SSL-server.dsp: + + Updated library path to correspond to the location of the + ACE_SSL library. It was still set to the old location. + +Thu Sep 21 11:54:58 2000 Priyanka Gontla + + * ace/Service_Config.h : + * ace/Service_Config.cpp : + + * ace/Proactor.cpp: + * ace/Proactor.h (ACE_Proactor): + + Removed dependency of Service_Config on Proactor by registering + the Proactor singleton with the Object_Manager when it is + instantiated. This way we need not call + ACE_Proactor::close_singleton () in Service_Config implementation. + +Wed Sep 20 17:25:37 2000 Steve Huston + + * performance-tests/UDP/udp_test.cpp: Use ACE_High_Res_Timer instead + of ACE_hrtime_t for calculating elapsed times. ACE_hrtime_t right + from ACE_OS::gethrtime is not always in nanoseconds, particularly on + Win32. + + * performance-tests/UDP/udp_test.{dsw dsp}: New MSVC workspace/project. + +Wed Sep 20 12:57:52 2000 Carlos O'Ryan + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Add new files to the MSVC projects + + * ace/Process_Mutex.h: + Under Win32 must include "ace/Synch.h" + + * ace/WFMO_Reactor.h: + Must include "ace/Process_Mutex.h" when + ACE_ONLY_LATEST_AND_GREATEST is defined. + +Wed Sep 20 12:10:41 2000 Ossama Othman + + * ace/Basic_Types.h: + + Made inclusion of conditional on definition of + ACE_LACKS_SYS_TYPES_H macro. + +Wed Sep 20 12:00:42 2000 Carlos O'Ryan + + * ace/Makefile: + * ace/Makefile.am: + * ace/Makefile.bor: + * ace/ace-dll.icc: + * ace/ace-lib.icc: + * ace/File_Lock.h: + * ace/File_Lock.inl: + * ace/File_Lock.cpp: + * ace/Process_Mutex.h: + * ace/Process_Mutex.inl: + * ace/Process_Mutex.cpp: + * ace/Process_Semaphore.h: + * ace/Process_Semaphore.inl: + * ace/Process_Semaphore.cpp: + * ace/RW_Process_Mutex.h: + * ace/RW_Process_Mutex.inl: + * ace/RW_Process_Mutex.cpp: + * ace/Dynamic.cpp: + * ace/Local_Name_Space.cpp: + * ace/Local_Name_Space_T.cpp: + * ace/MEM_SAP.h: + * ace/Naming_Context.cpp: + * ace/Synch.h: + * ace/Synch.i: + * ace/Synch.cpp: + * ace/Synch_T.h: + * ace/Thread_Exit.cpp: + * ace/Thread_Manager.cpp: + * examples/Shared_Malloc/Malloc.cpp: + * examples/Shared_Malloc/test_multiple_mallocs.cpp: + * examples/Shared_Malloc/test_position_independent_malloc.cpp: + * examples/Threads/process_mutex.cpp: + * examples/Threads/process_semaphore.cpp: + * tests/Conn_Test.cpp: + * tests/MM_Shared_Memory_Test.cpp: + * tests/Malloc_Test.cpp: + * tests/Process_Mutex_Test.cpp: + * tests/Process_Strategy_Test.cpp: + Moved the implementation of ACE_File_Lock, ACE_Process_Mutex, + ACE_Process_Semaphore and ACE_RW_Process_Mutex to their own + files. + This removes some unwanted dependencies in the Synch file. + The ACE_ONLY_GREATEST_AND_LATEST macro was used to preserve + backwards compatibility. + +Wed Sep 20 14:51:27 2000 Steve Huston + + * ace/Basic_Types.h: Added #include after the other + system-type includes to be sure u_long is defined. + doesn't pick it up, at least on Solaris 8. + +Wed Sep 20 11:44:46 2000 Carlos O'Ryan + + * tests/run_test.pl: + * tests/run_test.lst: + Disable the ACE_Init_Test under UNIX, the test only works on NT. + +Wed Sep 20 12:55:16 2000 Steve Huston + + * ace/High_Res_Timer.(h cpp i): Win32's scale factor (from + QueryPerformanceFrequency) is very often too small a number to + convert to ticks/usec - it ends up losing about 20% of the elapsed + time in elapsed calculations. So, on Win32 only, the + global_scale_factor is now in ticks/msec, not ticks/usec. Adjusted + all of the conversions to ACE_Time_Value, nanoseconds, etc. to + account for this. + +Wed Sep 20 08:24:34 2000 Ossama Othman + + * ace/Makefile.am (INLINE_FILES): + + Corrected `CDR_Base.i' to `CDR_Base.inl'. + +Wed Sep 20 08:12:20 2000 Ossama Othman + + * tests/CDR_Test.cpp: + + Included missing `ace/SString.h' header. + +Tue Sep 19 17:12:29 2000 Ossama Othman + + * ace/Basic_Types.h: + + Added missing include of `ace/config-all.h' and + `ace/ACE_export.h'. + + Explicitly include `limits.h', `float.h' and `stdlib.h' to pull + in basic type limits (e.g. UINT_MAX) and typedefs + (e.g. ptr_arith_t). This allows `ace/Basic_Types.h' to be + included as a stand-alone header. Previously, `ace/OS.h' + must have been included at least indirectly before + `ace/Basic_Types.h'. + + * ace/CDR_Base.h: + * ace/CDR_Base.i: + * ace/CDR_Base.cpp: + + Moved base ACE_CDR class to separate set of files. This reduces + inter-header dependencies for sources that only require the CDR + types. + + * ace/CDR_Stream.h: + + Forward declared ACE_CString, and moved inclusion of + `ace/SString.h' to the `.cpp' file to reduce inter-header + dependencies. + + * ace/CDR_Stream.i: + * ace/CDR_Stream.cpp: + + Moved ACE_CString related methods to the `.cpp' file since the + ACE_CString method is now forward declared in the + `ace/CDR_Stream.h' header. + +Tue Sep 19 17:40:04 2000 Douglas C. Schmidt + + * ace/config-win32-common.h, + ace/config-sunos5.4-centerline-2.x.h: Removed the nonsensical + ACE_HAS_SVR5_GETTIMEOFDAY macro. Thanks to Jeff Grief for + reporting this. + +Mon Sep 18 12:39:39 2000 Ossama Othman + + * ace/OS.i (cuserid): + + When using ACE's alternate cuserid() implementation: + - ensure that the maximum length argument is non-zero + since it doesn't make sense to have a zero length user ID. + - Return a static buffer if the buffer argument is zero. This + is not reentrant but nothing else can be done in such a case. + [Bug 619] + +Mon Sep 18 11:22:02 2000 Douglas C. Schmidt + + * ace/SUN_Proactor.cpp (handle_events): Fixed a problem arising + on 64 bit Solaris platforms. Thanks to Ganesh Pai + for reporting this. + +Sun Sep 17 19:17:53 2000 Carlos O'Ryan + + * include/makeinclude/build_example.bor: + Add the IORTable library to the Simple examples. + +Sun Sep 17 17:04:22 2000 Carlos O'Ryan + + * include/makeinclude/ace_flags.bor: + Add support for the IORTable library under Borland C++ + +Sat Sep 16 16:11:39 2000 Carlos O'Ryan + + * tests/CDR_Array_Test.cpp: + Under some circumstances the buffers allocated for marshaling + did not have room for the alignment bytes. The problem was + fixed by a small overallocation. + +Fri Sep 15 16:04:26 2000 Carlos O'Ryan + + * ace/Makefile.bor: + Update the Borland Makefile + +Thu Sep 14 11:59:48 2000 Ossama Othman + + * ace/Local_Name_Space_T.cpp (resolve_i, unbind_i): + * ace/Local_Tokens.cpp (acquire, tryacquire, renew): + * ace/Message_Queue_T.cpp (enqueue_prio, enqueue_head, + enqueue_tail, next): + * ace/Stream.cpp (open): + * ace/Task.cpp (suspend, resume, activate): + * ace/Token_Invariants.cpp (mutex_acquired, reader_acquired, + writer_acquired): + + Fixed g++ "control reaches end of non-void function" warnings. + + * bin/bootstrap (ACE_HTML_MAN_PAGES): + + Fixed sed expression so that all man pages ending with `.3' are + substituted with HTML man pages ending with `.html', not just + the last man page in the list. + +Wed Sep 13 15:21:34 2000 Ossama Othman + + * ace/Synch_T.cpp (ts_init, ts_object): + + Moved code in terminating else block outside of that block, and + removed unnecessary else clauses. This fixes "control reaches + end of non-void function" warnings from GNU C++. + + * bin/autoconf_compile: + + Changed mail subject prefix from "[AUTOCONF_COMPILE]" to + "[AUTO_COMPILE]" so that those monitoring the build logs won't + have to setup an additional mail filter. + +Wed Sep 13 15:05:08 2000 Chad Elliott + + * ace/ACE.cpp + ace/SOCK_Dgram_Bcast.cpp + ace/config-chorus.h + include/makeinclude/platform_chorus4.x_g++.GNU + + Applying changes made by Wei Chiang . + Corrects a problem with recognizing ip interfaces due to dynamic + size of struct ifreq. + + Modified config-chorus.h to correctly set the CHORUS macro to the + correct version and to undefine ACE_HAS_PTHREAD_PROCESS_ENUM if + using Chorus 4.0. + + Added CHORUS_4 to the CPPFLAGS which corrects a problem with make + depend. + + Thanks Wei for finding all of these problems. + +Wed Sep 13 15:05:42 2000 Luther J Baker + + * ace/OS.h: + + ACE_HAS_PACE type redefinitions. L:3180.., L:2250 + + * ace/OS.i: + + ACE over NT implements two different kinds of mutex's. + One is a lighter CRITICAL SECTION which has a distinct + set of associated functions. In ACE_HAS_PACE code, these + functions are calling each other (on POSIX compliant + platforms, these are defined to be the same types) but + NT needs to distinguish the two. This usually means + rearranging the preprocessor code. This is just the beginning. + +Wed Sep 13 14:33:25 2000 Douglas C. Schmidt + + * ace/Service_Config.h (ACE_Service_Config): Made parse_args() + a public method to work around subtle issues with linking + services dynamically using TAO. Thanks to Paul Caffrey + for motivating this and Carlos for suggesting + the fix. + +Wed Sep 13 14:01:57 2000 Luther J Baker + + * ace/OS.i (umask): + + Missing punctuation. + +Tue Sep 12 22:00:31 2000 Steve Huston + + * ace/config-win32-common.h: Added missing 'FD_SETSIZE' to #undef + directive. + +Tue Sep 12 15:15:54 2000 Irfan Pyarali + + * ace/ACE_export.h (ACE_SINGLETON_DECLARATION): Added the new + SINGLETON_DECLARE macros. + + * ace/Timeprobe.h: Used the new macro ACE_SINGLETON_DECLARE + instead of ACE_SINGLETON_DECLARATION. This helps by not + requiring the comma which makes the precompiler think that the + comma is for an extra argument to the macro. + + Thanks to Phil Mesnier for reporting this + problem. + +Tue Sep 12 11:34:03 2000 Steve Huston + + * ace/High_Res_Timer.{h i}: Added a new function, gettimeofday_hr() + which returns the current time in a ACE_Time_Value using the + high-resolution time source. This is intended to be used as the + time retrieval function for the ACE timer queues. Be sure you + call ACE_High_Res_Timer::global_scale_factor() (or instantiate + a ACE_High_Res_Timer object) before using it to correctly + convert the timer count to a ACE_Time_Value. + + * tests/Timer_Queue_Test.cpp: Added a test for using ACE_Timer_Heap + with high-resolution timer as the time source. + + * tests/Reactor_Timer_Test.cpp: Added an option to run the test + using ACE_High_Res_Timer::gettimeofday_hr instead of the + ACE_OS::gettimeofday time retrieval. If any option is given to + the program it uses high-res, otherwise it uses ACE_OS::gettimeofday. + +Mon Sep 11 12:57:31 2000 Steve Huston + + * ace/Synch.{h i cpp} (ACE_Lock, ACE_Adaptive_Lock, ACE_File_Lock, + ACE_Semaphore, ACE_Process_Semaphore, ACE_Null_Semaphore, + ACE_RW_Mutex, ACE_Mutex, ACE_Process_Mutex, ACE_RW_Process_Mutex, + ACE_Null_Mutex, ACE_Thread_Mutex, ACE_Recursive_Thread_Mutex): + Added tryacquire_write_upgrade method. + + * ace/Synch_T.{h i} (ACE_Lock_Adapter, ACE_Reverse_Lock): Added + tryacquire_write_upgrade method. + + * ace/Token.{h i} (ACE_Token): Added tryacquire_write_upgrade + method, which is a NOP. + + Thanks to Joseph Weihs for these suggestions. + +Mon Sep 11 10:08:38 2000 Balachandran Natarajan + + * ace/Service_Manager.cpp (handle_input): Missing semicolon in a + do-while loop. + +Mon Sep 11 08:10:21 2000 Douglas C. Schmidt + + * ace/Service_Manager.cpp: There was a problem with handle_input() + on Win32 due to the default non-blocking mode of sockets. In + particular, if the client was slow/overloaded, the server recv() + would return with -1 and errno == EWOULDBLOCK. Thanks to Sandro + Doro for this fix. + + * tests: Added a new Borland-specific makefile for the ACE tests. + Thanks to Johnny Willemsen for + contributing this. + +Sun Sep 10 14:58:36 2000 Carlos O'Ryan + + * netsvcs/clients/Logger/Makefile.bor: + I left out this file when applying Christopher's patch. + +Sun Sep 10 15:43:23 2000 Douglas C. Schmidt + + * ace/Acceptor.h: Made the suspend() and resume() methods + public. Thanks to Guy Rosen + for suggesting this. + +Fri Sep 8 16:50:52 2000 Carlos O'Ryan + + * ace/OS.h: + * ace/config-all.h: + Had to #include in config-all.h to get the + definition for FUNCPTR. With this change things are happy + (again) on VxWorks. + +Fri Sep 8 13:56:50 2000 Carlos O'Ryan + + * ace/Thread_Exit.cpp: + It was not compiling under Sun/CC 4.2 and 5.0. + The fix was to make the extern "C" cleanup handler simply call + the regular cleanup handler. That solves the access problem and + it is cleaner code anyways. + +Fri Sep 8 11:30:56 2000 Christopher Kohlhoff + + * ace/config-win32-borland.h: + Added ACE_LACKS_INLINE_ASSEMBLY since the inline CDR assembly + does not currently work under BCB. Thanks to + Johnny Willemsen for reporting this. + + * ace/Makefile.bor: + * include/makeinclude/build_dll.bor: + * include/makeinclude/build_exe.bor: + * include/makeinclude/build_lib.bor: + * netsvcs/clients/Logger/Makefile.bor: + Added support for both recursion and a build in the one makefile. + + * include/makeinclude/ace_flags.bor: + * include/makeinclude/build_example.bor: + Added new libraries for TAO. + +Thu Sep 07 18:10:00 2000 Darrell Brunsch + + * ace/config-win32-common.h: + + ACE_HAS_WINSOCK2 is turned on by default for all of Win32. + Windows 98 and Windows ME should have Winsock2, and NT/2000 + also does. For Windows 95, this requires that the Winsock 2 + library for Windows 95 is added or ACE_HAS_WINSOCK2 defined to + 0 in config.h before including config-win32.h (overriding it). + + Thanks to Giovanni Zito for inquiring + about this. + +Thu Sep 07 17:21:17 2000 Carlos O'Ryan + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Add the new files the ACE projects. + +Thu Sep 7 16:15:24 2000 Carlos O'Ryan + + * ace/OS.h: + * ace/OS.cpp: + Break out the dependency between the ACE_Thread_Manager and the + OS layer. The OS layer used ACE_Thread_Adapter to create + threads, this class depends on ACE_Thread_Manager, but on the + path used by the OS layer the class does not use Thread_Manager + at all. The solution was to create a base class + (ACE_Base_Thread_Adapter) and a specialized version used in the + OS layer (ACE_OS_Thread_Adapter). + + * ace/Makefile: + * ace/Makefile.am: + * ace/Makefile.bor: + Update the Makefile and the dependencies. + + * ace/Base_Thread_Adapter.h: + * ace/Base_Thread_Adapter.inl: + * ace/Base_Thread_Adapter.cpp: + Abstract base class for ACE_Thread_Adapter. Applications + continue to use ACE_Thread_Adapter, but the OS layer uses the + base class (or OS_Thread_Adapter). This way we decouple the OS + layer from the ACE_Thread_Manager class. + + * ace/config-all.h: + Move the definition of ACE_THR_FUNC and ACE_THR_C_FUNC out here. + + * ace/OS_Thread_Adapter.h: + * ace/OS_Thread_Adapter.inl: + * ace/OS_Thread_Adapter.cpp: + Implement a version of ACE_Base_Thread_Adapter that does not use + the Thread_Manager at all. + + * ace/Thread_Adapter.h: + * ace/Thread_Adapter.inl: + * ace/Thread_Adapter.cpp: + Removed the common code to Base_Thread_Adapter.* + + * ace/Thread.h: + Include "ace/Thread_Adapter.h" directly because the OS layer + does not include it anymore. + + * ace/Thread_Hook.h: + * ace/Thread_Hook.cpp: + This class does not need to #include Thread_Manager.h + + * ace/Log_Msg.h: + * ace/Log_Msg.cpp: + Add another hook to make the ACE_OS_Thread_Descriptor available + to the OS layer when running MFC builds. + + * ace/Thread_Exit.cpp: + The is_constructed_ flag is reset in the cleanup function + instead of letting the OS layer do it. + +Thu Sep 7 12:07:14 2000 Ossama Othman + + * bin/autoconf_compile (LOGBASE): + + Create log file with `.txt' extension instead of `.log' to + prevent web browsers from needlessly prompting users which + viewer should be used. + + * m4/acinclude.m4: + + Updated copyright information. + + * m4/platform.m4: + + When setting platform-specific flags, use the "$host" autoconf + variable instead of "$target." The latter is only supposed to + be used when building cross-platform tool chains. + + * m4/threads.m4 (CPPFLAGS): + + Place user provided preprocessor flags after the ones set by the + configure script to allow the user to override automatically + set flags. + +Thu Sep 07 14:30:49 2000 Nanbor Wang + + * bin/auto_compile_win32.pl: Added Portable Server to the project + lists in (DLL Debug/Release). Thanks to Bruce McIntosh + for reporting this + +Thu Sep 07 11:36:51 2000 Ossama Othman + + * ace/SSL/SSL_Context.cpp (set_mode): + * ace/SSL/SSL_SOCK_Acceptor.cpp (ssl_accept): + * ace/SSL/SSL_SOCK_Connector.cpp (ssl_connect): + * ace/SSL/SSL_SOCK_Stream.i (recv, send): + + Do not print OpenSSL error message if ACE_NDEBUG is defined. + +Thu Sep 7 10:52:47 2000 Jeff Parsons + + * tests/CDR_Array_Test.cpp: + + Code intended to allocate and zero and source buffer and + destination buffer was actually zeroing the source buffer + twice. Thanks to Johnny Willemsen + for reporting this bug. + +Thu Sep 07 11:16:36 2000 Steve Huston + + * examples/Reactor/WFMO_Reactor/test_network_events.cpp: Add a + destructor to Network_Listener which will unregister it from the + reactor, and prevent a doomed call to handle_close when the + reactor runs down. Thanks to John Buckman for + reporting this. + +Wed Sep 06 19:06:57 2000 Carlos O'Ryan + + * ACE version 5.1.9 released. + +Tue Sep 05 13:34:26 2000 Steve Huston + + * ace/TP_Reactor.cpp (dispatch_i): Try to correct mis-set size_ + in the any_ready_ handle sets by sync()ing them if the reactor + state has not been changed. This is an attempted workaround to + a symptom of having the handle set say size_ > 0 but there are + no bits set. The underlying cause is not known. + Also, reverse the eval order when checking !found_io && handle_iter + done to avoid doing another iter call when not needed. + +Mon Sep 04 10:25:27 2000 Steve Huston + + * ace/TP_Reactor.cpp (dispatch_i): If a handle's bit is set via + select in any of the masks (wr, ex, rd) and subsequently the + handle is selected for dispatching, clear it in all masks to + prevent possible spinning on a handle that can't be dispatched + because its handler is suspended. + +Sat Sep 2 15:13:59 2000 Carlos O'Ryan + + * ace/CDR_Stream.h: + Fixed typo in macro name. + +Sat Sep 2 12:22:59 2000 Carlos O'Ryan + + * ace/CDR_Stream.h: + Define macros to initialize a LongDouble, this is needed to + avoid warnings in some ORB code. + +Sat Sep 2 07:14:06 2000 Douglas C. Schmidt + + * ace/config-sunos5.5.h: Added ACE_LACKS_PLACEMENT_OPERATOR_DELETE + to fix a bug with SunC++ 4.1. Thanks to Sameer Schabungbam + for reporting this. + +Fri Sep 1 16:50:50 2000 Jeff Parsons + + * ace/Configuration.cpp: + + The method export_section contained a delete of a void*. + Many compilers warn about this. Cast the void* to char*. + +Fri Sep 1 13:25:24 2000 Jeff Parsons + + * ace/Configuration.cpp: + * ace/Configuration.h: + + Checked in some fixes to ACE_Configuration sent in by + Chris Hafey . Chris writes: + + Fixed a handle leak in export_config(). + Thanks to Matthew Adams for reporting the bug. + + Fixed a memory leak in export_section() for binary types. Fixed a + bug in get_binary_data() for the registry version where binary + values > ACE_DEFAULT_BUFSIZE wouldn't be retrieved correctly. For + win32 versions, we now export unrecognized types as BINARY values + rather than fail entirely. Fixed a bug where the size of a new + section name was calculated incorrectly for unicode builds. + Thanks to Vijay Aswadhati for reporting + this. [Bug 649] + +Fri Sep 01 03:08:59 2000 Nanbor Wang + + * ace/Task.h: + * ace/Thread_Manager.h: + * ace/Thread_Manager.cpp: For some reason, the method + that takes a thread_id array did not take the pointer. + If a user "activate"'ed a task and asking for the thread_id's, + these thread would not be marked as these task, which caused + they unaccounted for in subsequent wast_task. Fixed the problem + by adding the argument to and make sure the + task pointer is passed in method. Thanks to Mervyn + Quah for reporting the bug. + [Bug 616] + +Thu Aug 31 15:31:30 2000 Douglas C. Schmidt + + * include/makeinclude/outputdir.bor: Added a comment to explain + how the OBJDIR macro works when the -DPASCAL option is used. + Thanks to Marcel Van Der Weert and + Christopher Kohlhoff for reporting this. + +Thu Aug 31 08:32:11 2000 Albert Wijnja + + * tests/TSS_Test.cpp (ITERATIONS): replaced calculation of + ITERATIONS so that it is now dependent on ACE_MAX_THREADS. + [Bug 657] + +Wed Aug 30 10:20:04 2000 Carlos O'Ryan + + * bin/run_all_list.pm: + Enable the Trading Service tests under Minimum CORBA, since now + they are compiled in that configuration too. + +Tue Aug 29 14:27:37 2000 Chad Elliott + + * include/makeinclude/platform_chorus4.x_g++.GNU + Made an additional modification to use the $(MERGEDIR)/Paths + include file if MERGEDIR is defined. + +Tue Aug 29 12:23:41 2000 Steve Huston + + * ace/TP_Reactor.(h cpp): Added a new dispatch_i_protected method. + This just wraps the call to dispatch_i in ACE_SEH_TRY/EXCEPT. + If/when the reactor is rearranged to pluck one dispatchable event + to call at a time, this can be removed. + + This fixes the removal of SEH from this entry: + Fri Aug 25 16:29:51 2000 Steve Huston + +Tue Aug 29 01:32:28 2000 Carlos O'Ryan + + * ace/Logging_Strategy.h: + Add missing header file (Log_Msg.h) + +Mon Aug 28 20:37:21 2000 Luther J Baker + + * ace/OS.i (rename): + * ace/OS.i (pipe): + + Changed type #if (ACE_HAS_PACE) when all the rest of the + files use #if defined (ACE_HAS_PACE). Changed mainly for + consistency. + +Mon Aug 28 18:04:17 2000 Luther J Baker + + * ace/ace_lib.dsp: + * ace/ace_dll.dsp: + + Added additional #include ../PACE search directories + to project settings. + +Mon Aug 28 17:43:00 2000 Luther J Baker + + * ace/config-win32.h: + + Added support for PACE and win32. + + * ace/OS.h::2283 + + Altered code to support + #define ACE_HAS_PACE && #define WTHREADS. + +Mon Aug 28 15:05:27 2000 Michael Kircher + + * ace/OS_Dirent.cpp: Changed a condition in readdir_emulation () + to query properly for an invalid file handle. Thanks to + Nir Drang for reporting this. + +Mon Aug 28 12:16:27 2000 Ossama Othman + + * ace/Makefile.am (libACE_OS_la_SOURCES, HEADER_FILES, + INLINE_FILES): + + Added new Thread_{Adapter, Control, Exit, Hook} source files to + these make variables. + +Mon Aug 28 11:56:42 2000 Ossama Othman + + * configure.in (ACE_HAS_PENTIUM): + + Only define this macro if the hardware is x86 *and* GNU C++ is + being used since the code enabled by this macro contains + assembler code specific to that compiler. + Reported by Rich Seibel + +Mon Aug 28 11:18:27 2000 Ossama Othman + + * ace/config-irix6.5.x-sgic++.h: + + Configuration header for IRIX 6.5.x contributed by J. Russell + Noseworthy . [Bug 623] + +Mon Aug 28 10:27:45 2000 Chad Elliott + + * include/makeinclude/platform_chorus4.x_g++.GNU + Modified the platform macros file to use the new variable + definitions provide by the "Paths" make include file. Also, + removed the use of the old (3.x) chorus macros file. + +Sat Aug 26 17:39:53 2000 Douglas C. Schmidt + + * ace/config-all.h: Added new ACE_CONST_WHEN_MUTABLE macro. + Thanks to Edan Ayal for contributing this. + + * ace/Logging_Strategy: Added support for more fine-grained + control over logging strategies and priorities. Thanks to + Martin Krumpolec for reporting this. + + * ace: Improved the "const correctness" of many Reactor methods. + Thanks to Edan Ayal for contributing this. + +Sat Aug 26 15:23:54 2000 Carlos O'Ryan + + * ace/OS.cpp: + Commented out another ACE_DEBUG statement, there should be no + printing from the ACE_OS layer. + Fixed use of obsolete ACE_LOG_MSG accessors for the event + handling fields. + +Sat Aug 26 12:00:18 2000 Douglas C. Schmidt + + * ace/Service_Repository.cpp: Modify the remove() method so that + it is "re-entrant" i.e., one can call it from other svc's fini() + called from remove(). Thanks to Martin Krumpolec + for contributing this fix. + +Fri Aug 25 18:09:04 2000 Carlos O'Ryan + + * ace/config-win32.h: + * ace/OS.cpp: + * ace/Thread_Adapter.cpp: + Factor out the definition of ACE_ENDTHREADEX to the + config-win32.h file. + +Fri Aug 25 17:11:25 2000 Carlos O'Ryan + + * ace/Thread_Control.h: + * ace/Thread_Control.cpp: + Fixed problems with the backwards compatible configuration + (i.e. ACE_HAS_ONLY_LATEST_AND_GREATEST not defined). + +Fri Aug 25 16:15:50 2000 Carlos O'Ryan + + * ace/OS.h: + * ace/OS.i: + * ace/OS.cpp: + * ace/Thread_Adapter.h: + * ace/Thread_Adapter.inl: + * ace/Thread_Adapter.cpp: + * ace/Thread_Control.h: + * ace/Thread_Control.inl: + * ace/Thread_Control.cpp: + * ace/Thread_Exit.h: + * ace/Thread_Exit.cpp: + * ace/Thread_Hook.h: + * ace/Thread_Hook.cpp: + * ace/Thread_Manager.h: + * ace/Thread_Manager.i: + * ace/Thread_Manager.cpp: + Move ACE_Thread_Adapter and its friends to a new directory. + This was important to discover why OS.o depends on + Thread_Manager.o and how we can break that dependency. + I'm commiting the change because it will help the compiler when + linking static libraries and it is easier to maintain this way. + + * ace/OS_String.cpp: + Cosmetic changes. + + * ace/Makefile: + * ace/Makefile.am: + * ace/Makefile.bor: + * ace/ace.icc: + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Add all the new files to the system. + + * tests/Task_Test.cpp: + We must #include the Thread_Hook.h file directly + + * */Makefile: + Updated all the dependencies for ace. + +Fri Aug 25 15:15:27 2000 Ossama Othman + + * Makefile.am (EXTRA_DIST): + + Added libtool shell script fragments `ltcf-c.sh' and + `ltcf-cxx.sh' to the list of additional files to be packaged + with the distribution. + + * ace/Makefile (TEMPLATE_FILES): + + Added `Hash_Map_With_Allocator_T' to the list of template + source files. It was missing. + + * ace/Makefile.am: + + Updated to include all newly added source files. + +Fri Aug 25 16:29:51 2000 Steve Huston + + * ace/TP_Reactor.cpp: Temporarily remove the ACE_SEH directives + to get the build working on Win32. Will fix this correctly and put + in a new file soon. + +Fri Aug 25 15:43:28 2000 Steve Huston + + * docs/ACE-guidelines.html: Add the "use this->member" rule when + referring to member functions or variables. Thanks to Edan Ayal + for the reminder to add this rule. + +Fri Aug 25 12:12:40 2000 Carlos O'Ryan + + * ace/OS.h: + * ace/OS.i: + * ace/OS.cpp: + * ace/Log_Msg.h: + * ace/Log_Msg.cpp: + * ace/config-all.h: + I removed the direct cyclic dependency between the OS layer and + Log_Msg. The OS layer does not use Log_Msg anymore, but it does + use parts of ACE_Thread_Manager so there is some work left to + do. + There was a semantic change involved: the Win32 exception + handlers used to be TSS, now they are global. There was not a + real use case for that feature. Users that enable + ACE_HAS_ONLY_LATEST_AND_GREATEST will not get the TSS version of + the functions, I think it is better to make the change visible + than hide it behind a seemingly compatible interface that + actually breaks at run-time. + +Fri Aug 25 14:29:27 2000 Steve Huston + + * ace/Select_Reactor_T.h: Added new method, is_suspended_i (ACE_HANDLE) + to see if the handle is suspended or not. It's used in the TP_Reactor + to avoid dispatching suspended handlers. + + * ace/Select_Reactor_T.cpp: New method, is_suspended_i. + (any_ready_i): Do not clear this->ready_set_ if that's the + set that was scanned for ready bits. TP_Reactor + now uses that set directly, and clearing it + sort of defeats the purpose. + (suspend_i): Fixed function name in ACE_TRACE. + + * ace/TP_Reactor.h: Added dispatch_i function; Removed dispatch_io_set + function and the ACE_EH_Dispatch_Info dispatch_info_ member - + they're not used anymore. + + * ace/TP_Reactor.cpp (handle_events): Does not call handle_events_i + in Select_Reactor_T anymore. New function, dispatch_i, handles + the work that handle_events_i does for ACE_Select_Reactor - does + the wait_for_multiple_events, dispatches timers, signals, and + notifications; then, though, it records one dispatchable I/O + event for return to handle_events (similarly to what dispatch_io_set + used to do when it was called from handle_events_i). All of the + token acquiring and releasing now goes on in this function only. + Also, the return value (number of dispatched events) is now + correct. + + The effect of all this is that TP_Reactor now saves the + ready_set_ bits and the threads running the reactor will dispatch + the handlers one by one until they're gone or the reactor state + changes in a way that forces select to be re-done. + + This set of changes fixes Bugzilla # 567. + +Fri Aug 25 14:23:36 2000 Steve Huston + + * ace/Handle_Set.i (reset): Commented out the #if !defined for + ACE_HAS_BIG_FD_SET; use FD_ZERO to clear the fd bits. This was + previously not being done for Linux (which has ACE_HAS_BIG_FD_SET) + and it caused grief in the reactor when scanning for bits in + sync (). This caused the (new, see above) TP_Reactor to always + think there were many bits set in ready_set_ after each dispatched + I/O and needlessly scan through them all. + +Fri Aug 25 09:22:11 2000 Chad Elliott + + * include/makeinclude/platform_sunos5_sunc++.GNU + Modified check for SunCC 5 to work with 5.0 and 5.1 (Forte). + +Thu Aug 24 09:01:23 2000 JLopez + + * ace/config-tru64.h: #define ACE_LACKS_SYSTIME_H with + DIGITAL_UNIX >= 0x40E, not 0x40F, because that's needed + on Tru64 UNIX 4.0E. Thanks to jlopez@uida.es for + reporting this. + +Mon Aug 21 10:07:39 2000 Carlos O'Ryan + + * ace/RMCast/RMCast_IO_UDP.cpp: + Fixed warnings about unused variables. + + * tests/RMCast/RMCast_UDP_Best_Effort_Test.cpp: + Add newline to debug output, it was completely unreadable + otherwise. + + * ace/RMCast/Makefile: + * tests/RMCast/Makefile: + Updated file list and dependencies. + +Mon Aug 21 08:58:19 2000 Carlos O'Ryan + + * Another iteration on the design. This time we use a single + Module to process IO events, the same class can be used on the + receiver and sender sides. The type of proxies is fixed, all + the variation is moved into the Modules, controlled by a module + factory. + + * ace/RMCast/README: + Add a new README file. + + * ace/RMCast/RMCast_Module.h: + * ace/RMCast/RMCast_Module.cpp: + Modules can pass and process control messages as well as data + messages, add new methods for the control messages. + + * ace/RMCast/RMCast_IO_UDP.h: + * ace/RMCast/RMCast_IO_UDP.i: + * ace/RMCast/RMCast_IO_UDP.cpp: + New class to manage all the IO events. + + * ace/RMCast/RMCast_UDP_Event_Handler.h: + * ace/RMCast/RMCast_UDP_Event_Handler.i: + * ace/RMCast/RMCast_UDP_Event_Handler.cpp: + Modified to use the new RMCast_IO_UDP class. + + * ace/RMCast/RMCast_UDP_Proxy.h: + * ace/RMCast/RMCast_UDP_Proxy.i: + * ace/RMCast/RMCast_UDP_Proxy.cpp: + New module used for both the client and server sides. + + * ace/RMCast/RMCast_Module_Factory.h: + * ace/RMCast/RMCast_Module_Factory.i: + * ace/RMCast/RMCast_Module_Factory.cpp: + Create and destroy a module stack. Used by both the receiver + and sender sides to control the type of event processing they + can perform. + + * ace/RMCast/RMCast.h: + Minor changes in the field names and comments. + + * ace/RMCast/RMCast_Fragment.h: + * ace/RMCast/RMCast_Fragment.cpp: + * ace/RMCast/RMCast_Reassembly.h: + * ace/RMCast/RMCast_Reassembly.cpp: + Modified to use the new methods in the Module interface. + + * tests/RMCast/RMCast_Fragment_Test.cpp: + * tests/RMCast/RMCast_Reassembly_Test.cpp: + * tests/RMCast/RMCast_UDP_Best_Effort_Test.cpp: + Modified to use the new classes. + + * tests/RMCast/RMCast_Tests.dsw: + * tests/RMCast/RMCast_UDP_Best_Effort_Test.dsp: + Add new project file for the UDP best effort test. + + * ace/RMCast/RMCast.dsp: + Update the project file. + + * ace/RMCast/RMCast_Sender_Proxy.h: + * ace/RMCast/RMCast_Sender_Proxy.i: + * ace/RMCast/RMCast_Sender_Proxy.cpp: + * ace/RMCast/RMCast_Sender_Proxy_Best_Effort.h: + * ace/RMCast/RMCast_Sender_Proxy_Best_Effort.i: + * ace/RMCast/RMCast_Sender_Proxy_Best_Effort.cpp: + * ace/RMCast/RMCast_Sender_Proxy_Factory.h: + * ace/RMCast/RMCast_Sender_Proxy_Factory.i: + * ace/RMCast/RMCast_Sender_Proxy_Factory.cpp: + * ace/RMCast/RMCast_UDP_Receiver.h: + * ace/RMCast/RMCast_UDP_Receiver.i: + * ace/RMCast/RMCast_UDP_Receiver.cpp: + * ace/RMCast/RMCast_UDP_Sender.h: + * ace/RMCast/RMCast_UDP_Sender.i: + * ace/RMCast/RMCast_UDP_Sender.cpp: + Removed. + +Fri Aug 18 12:36:21 2000 Steve Huston + + * ace/SUN_Proactor.cpp (find_completed_aio): Wrapped ACE_GUARD_RETURN + with ACE_MT to build ok single-threaded. + +Thu Aug 17 05:48:51 2000 Douglas C. Schmidt + + * ace/config-win32-common.h: Wrapped the redefinition of FD_SETSIZE + to #undef if it's already set to avoid a compiler/pre-processor + warning. Thanks to Johnny Willemsen + for contributing these. + +Wed Aug 16 06:03:11 2000 Douglas C. Schmidt + + * ace/Select_Reactor_Base.h: Make the notify_queue_lock_ in + ACE_Select_Reactor_Notify an ACE_SYNCH_MUTEX rather than an + ACE_SYNCH_RW_MUTEX to be consistent. Thanks to Ivan Murphy for + reporting this. + +Tue Aug 15 20:54:14 2000 Darrell Brunsch + + * ace/Logging_Strategy.cpp: + * ace/Logging_Strategy.h: + * ace/OS.i: + * ace/SOCK_Dgram_Mcast_QoS.cpp: + * ace/ace_wchar.h: + + Fixed miscellaneous wide character support problems. + Also [Bug 600] + +Mon Aug 14 21:55:54 2000 Joe Hoffert + + * ace/OS.{h,i}: + Added function typedefs for pace_signal for compiling + ACE with PACE for LynxOS. + +Fri Aug 11 17:49:36 2000 Steve Huston + + * ace/TP_Reactor.cpp: Add #include "ace/Thread.h" to pick up the + definition of ACE_Thread::self (). + +Fri Aug 11 16:24:13 2000 Shawn Hannan + + * ace/OS.i: For VXWORKS, changed checks of errno against + S_objLib_OBJ_TIMEOUT to S_objLib_OBJ_UNAVAILABLE after calls + to semTake with timeout parameter set to NO_WAIT (i.e., 0). + semTake will set errno to _UNAVAILABLE, not _TIMEOUT, if + the semaphore is empty and the timeout parameter is 0. + Thanks to Peter Fischer for reporting + this. + +Fri Aug 11 13:20:40 2000 Nanbor Wang + + * apps/gperf/src/gperf_lib.dsp: Changed the format for generated + debug info from C7 to "Program Database" to conform to rest of + the ACE project files. Thanks to Espen Harlinn + for reporting this. + +Fri Aug 11 11:06:30 2000 David L. Levine + + * include/makeinclude/platform_osf1_4.0.GNU: moved + -hidden /usr/lib/cmplrs/cxx/libcxxstd.a -non_hidden to end + of link line by moving it from SOFLAGS to the end of LIBS. + This allows links to succeed with -D__USE_STD_IOSTREAM. Thanks + to Jorn Jensen for finding this solution to + the link problem, and to Michael Kramer + for verifying that it works. + +Fri Aug 11 07:40:10 2000 Douglas C. Schmidt + + * ace/WFMO_Reactor.cpp (open): Removed an unnecessary ACE_UNUSED_ARG(sh). + Thanks to Pedro Brandao for reporting this. + +Thu Aug 10 12:22:31 2000 Steve Huston + + * ace/Svc_Handler.h (close): Added some comments to help make this + function easier to understand. + +Thu Aug 10 12:15:16 2000 Steve Huston + + * ace/POSIX_Proactor.(h cpp) (ACE_POSIX_AIOCB_Proactor): Surround + definition of mutex_ member in ACE_MT_SAFE; use ACE_MT around + ACE_GUARD_RETURN macros to build clean without threads. + +Thu Aug 10 09:31:51 2000 David L. Levine + + * ace/config-cxx-common.h: with __USE_STD_IOSTREAM, added + #define ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB 1. Now, + the ACE library builds with __USE_STD_IOSTREAM, thanks + to Michael Kramer . + + Also, removed duplicate #define ACE_HAS_STANDARD_CPP_LIBRARY 1, + and move the remaining one to inside the if (__DECCXX_VER >= + 60090010) check. I don't know if it is supported on older + versions of cxx. + +Thu Aug 10 04:04:31 2000 John Heitmann + + * ace/OS.cpp: + Added pace version of thr_create and thr_exit. + + * ace/OS.h: + Added pace #define for pthread_cleanup_* + Deleted all ansi cast defines since they were + also redundantly defined in config-all.h + + * ace/OS.i: + Put all pace functions in the global scope. Minor + fixes. + + * examples/Shared_Malloc/Malloc.cpp + Removed template instantiations which are duplicated + in ACE.cpp. + +Wed Aug 9 18:16:26 2000 Carlos O'Ryan + + * ace/RMCast/RMCast.h: + * ace/RMCast/RMCast.i: + * ace/RMCast/RMCast.cpp: + Document the state transitions for the receivers, the message + formats, and the state transitions for the senders. + + * ace/RMCast/RMCast_Module.h: + * ace/RMCast/RMCast_Module.i: + * ace/RMCast/RMCast_Module.cpp: + Instead of using the ACE ASX framework we are using a lighter + weight class hierarchy. The Module interface will contain + explicit calls for all the relevant control messages, making it + easier to implement and debug. + In the future we may move back to the ASX framework, once all + the implementation problems have been nailed down. + + * ace/RMCast/RMCast_Fragment.h: + * ace/RMCast/RMCast_Fragment.i: + * ace/RMCast/RMCast_Fragment.cpp: + Use the RMCast_Module classes instead of ACE_Task. + The header information is propagated in the RMCast::Data + structure and put on a separate iovec entry by the bottom module + in the stack. + + * ace/RMCast/RMCast_Partial_Message.h: + * ace/RMCast/RMCast_Partial_Message.cpp: + Fixed missing #include and corrected a number of problems in the + implementation of the reassembly algorithm. The randomized test + passes cleanly now, even on machines with multiple CPUs. + + * ace/RMCast/RMCast_Reassembly.h: + * ace/RMCast/RMCast_Reassembly.i: + * ace/RMCast/RMCast_Reassembly.cpp: + Use the RMCast_Module classes instead of ACE_Task. + The header information is propagated in the RMCast::Data + structure and obtained from the first bytes in the message + decoded, but all that magic is performed by the Module at the + bottom of the stack. + + * ace/RMCast/RMCast_Sender_Proxy.h: + * ace/RMCast/RMCast_Sender_Proxy.i: + * ace/RMCast/RMCast_Sender_Proxy.cpp: + This class is used in the receiver side to maintain information + about one sender, and to provide an entry point to the + per-sender module stack. + + * ace/RMCast/RMCast_Sender_Proxy_Best_Effort.h: + * ace/RMCast/RMCast_Sender_Proxy_Best_Effort.i: + * ace/RMCast/RMCast_Sender_Proxy_Best_Effort.cpp: + An specialized Sender_Proxy that ignores all the control + messages, essentially working in best effort mode. + + * ace/RMCast/RMCast_Sender_Proxy_Factory.h: + * ace/RMCast/RMCast_Sender_Proxy_Factory.i: + * ace/RMCast/RMCast_Sender_Proxy_Factory.cpp: + Define the interface to create Sender_Proxy instances. The + application provides an instance of this class in the receiver + side to customize the protocol. + + * ace/RMCast/RMCast_UDP_Receiver.h: + * ace/RMCast/RMCast_UDP_Receiver.i: + * ace/RMCast/RMCast_UDP_Receiver.cpp: + Implement a UDP based receiver. + Applications create an instance of this class, customized + through the Sender_Proxy_Factory, to receive messages. + The class can be used in (timed) blocking mode or through the + reactor (using the UDP_Event_Handler helper class). + + * ace/RMCast/RMCast_UDP_Sender.h: + * ace/RMCast/RMCast_UDP_Sender.i: + * ace/RMCast/RMCast_UDP_Sender.cpp: + A Module that sends a single fragment using UDP multicast. + This version does not send or receive any control messages, so + it is best-effort. + + * ace/RMCast/RMCast_UDP_Event_Handler.h: + * ace/RMCast/RMCast_UDP_Event_Handler.i: + * ace/RMCast/RMCast_UDP_Event_Handler.cpp: + Adapter between the Reactor and the UDP_Sender class. + + * tests/RMCast/RMCast_Fragment_Test.cpp: + * tests/RMCast/RMCast_Reassembly_Test.cpp: + Fixed to match the new interfaces + + * tests/RMCast/RMCast_UDP_Best_Effort_Test.cpp: + New unit test for the best effort UDP based senders and + receivers. + It creates a sending thread that continuosly send messages to a + single multicast address, meanwhile the main thread receives all + the messages and verifies that they have the expected contents. + It should be expandded to randomize the contents and create + multiple sending threads. + + * tests/RMCast/Makefile: + * ace/RMCast/Makefile: + Add new files, updated dependencies + + * ace/RMCast/RMCast_Header_Size.h: + * ace/RMCast/RMCast_Header_Size.cpp: + Removed + +Wed Aug 9 13:28:20 2000 Douglas C. Schmidt + + * ace/Message_Queue_T.cpp (dequeue_head_i): Make sure to reset + head_ and tail_ to 0 when the cur_count_ drops to 0. Thanks to + Zoran Ivanovic for this fix. + +Wed Aug 09 18:06:40 2000 Pradeep + + * ACE version 5.1.8 released. + +Wed Aug 09 10:10:45 2000 David L. Levine + + * tests/CDR_Array_Test.cpp: disabled LongLong test if + the platform doesn't have native long long support. + ACE's long long emulation doesn't have sufficient + capability to support what the test needs. + Thanks to Peter Kroener + for reporting this. [Bug 632] + + +Tue Aug 08 10:35:04 2000 Rich Seibel + + * ace/config-sunos5.8.h: added. We have compiled successfully + with it on Solaris 8.0 using both gcc 2.95.2 and Sun 5.0 compilers. + It simply includes the 5.7 config.h file. I have noted that there + are some possible efficiencies which autoconfig finds, but this + works. + +Mon Aug 7 21:05:35 2000 Vishal Kachroo + + * examples/QOS/server.dsp: + * examples/QOS/client.dsp: Made changes to add the relative path + for aced.lib. + +Mon Aug 07 07:31:23 2000 Peter Fischer + + * ace/OS.cpp (cond_timedwait): on VxWorks, handle + S_objLib_OBJ_UNAVAILABLE by setting error to ETIME + if msec_timeout is 0. This allows Message_Queue_Test + to succeed. + + * tests/run_tests.vxworks: re-enabled Message_Queue_Test. + +Sun Aug 6 21:40:42 2000 Darrell Brunsch + + * ace/OS.i: + * ace/OS.cpp: + * ace/OS_String.cpp: + * ace/OS_String.h: + * ace/OS_String.inl: + * ace/ace_wchar.h: + * ace/config-all.h + * ace/config-linux-common.h: + * ace/config-win32-common.h: + + Fixed up miscellaneous problems with ACE_HAS_WCHAR on Linux. + Highlights are: + + - Added ACE_HAS_VFWPRINTF and ACE_HAS_VFWPRINTF to NOTSUP a + couple of methods, since they don't seem to be available yet. + - Added ACE_LACKS_WCSDUP_PROTOTYPE, and added the prototype. + - Removed an extra copy of itoa_emulation (..wchar_t..). + - Added some static_cast's to remove unsigned/signed comparison + warnings. + - Added ACE-HAS_SAFE_WCSTOK, since the version supplied with MSVC + is the multi-threaded unsafe version (just like strtok). Here + it is similar to strtok_r. + +Sun Aug 6 17:03:29 2000 Ossama Othman + + * include/makeinclude/wrapper_macros.GNU (CPPFLAGS): + + Define ACE_HAS_SSL=1 instead of just defining ACE_HAS_SSL + without an explicit value. + +Sat Aug 5 21:49:12 2000 Darrell Brunsch + + * ace/OS_String.cpp: + * ace/OS_String.h: + * ace/OS_String.inl: + * ace/config-win32-borland.h: + + Chris Kohlhoff pointed out to me that Borland does have itoa, + but the signature is slightly different (itoa, not _itoa). + Added it back in for Borland and added some preprocessor + commands that will keep the emulation code from being included + unless it is needed. + +Sat Aug 5 11:19:23 2000 Darrell Brunsch + + * ace/config-win32-common.h: + * ace/config-win32-msvc.h: + + Moved ACE_HAS_ITOA to msvc.h, since it is compiler dependent (and + Borland doesn't have it). + +Sat Aug 05 11:26:08 2000 Ossama Othman + + * bin/generate_export_file.pl: + + Changed "#if !defined (...)" include guard to "#ifndef ..." + since some preprocessors enable "process once" optimizations if + the latter form is used. + +Sat Aug 5 01:13:01 2000 Darrell Brunsch + + * ace/OS_String.cpp: + * ace/OS_String.h: + * ace/OS_String.inl: + + Added itoa, which takes in a value, string, and radix. It then + populates the string with the representation of the value in that + radix. + + * ace/config-win32-common.h: + + Turned on ACE_HAS_ITOA. + +Fri Aug 4 15:53:27 2000 Carlos O'Ryan + + * ace/TP_Reactor.h: + * ace/TP_Reactor.cpp: + The owner_ field has no effect in the TP reactor, but setting it + or checking its value wakes up the leader thread. This can + result in performance problems for applications that use both TP + and regular reactors, such as TAO. + Thanks to Brian Wright for detecting the + problem and putting us in the right track to solve it. + +Thu Aug 3 17:50:39 2000 Carlos O'Ryan + + * THANKS: + * ace/config-irix6.x-sgic++-nothreads.h: + * include/makeinclude/platform_irix6.x_sgic++.GNU: + Define ACE_HAS_EXCEPTION in the command line, so we can + configure exceptions in a single spot. + Enabled the -LANG:std option by default. + Detect if -LANG:std is used and enable the corresponding ACE + macros. + Thanks to John Hiltenbrand for detecting + this problem and suggesting the fixes. + +Thu Aug 03 17:40:01 2000 Eric Ding + + * include/makeinclude/platform_linux.GNU + Remove ifeq($(threads),1), xt_reactor=0, fl_reactor=0, + and add -I/usr/X11R6/include, -L/usr/X11R6/include to + platform_GL flags. + Patch supplied by Craig Rodrigues + http://www.gis.net/~craigr + rodrigc@mediaone.net + +Wed Aug 2 17:44:58 2000 Balachandran Natarajan + + * ace/config-win32-borland.h: Suppress all warnings from the + preprocessor so that the IDL compiler does not fail on + TAO/tao/Policy.pidl. + + * ace/SSL/Makefile.bor: + * include/makeinclude/ace_flags.bor: Add makefile support for the + SSL and security libraries in ACE and TAO. + + The above patches were taken from + http://www.tenermerx.com/programming/corba/tao_bcb/patch.html, + which is the site maintained by Chistopher Kohlhoff + . + +Tue Aug 01 11:40:46 2000 Bala + + * ACE version 5.1.7 released. + +Mon Jul 31 22:51:11 2000 Balachandran + + * ACE version 5.1.6 released. + +Sat Jul 29 08:41:48 2000 David L. Levine + + * tests/Makefile: don't build CDR_Array_Test with + ACE_HAS_GNUG_PRE_2_8. Build it on LynxOS >= 3.1.0. + +Fri Jul 28 15:58:37 2000 Joe Hoffert + + * bin/pace_components: + Deleting from CVS since it is being melded into + bin/ace_components. + + * bin/ace_components: + Adding commands for pace. + + * include/makeinclude/wrapper_macros.GNU: + For PACE, modified so that it doesn't include the PACE + library if we are inlining. + +Fri Jul 28 12:46:54 2000 David L. Levine + + * tests/run_tests.lst: disabled SOCK_Send_Recv_Test, + Thread_Pool_Test, Cached_Conn_Test, and Process_Strategy_Test + on LynxOS. The work on LynxOS 3.0.0 x86, but not + on our LynxOS 3.1.0 PPC (maybe because it runs out of + resources?). + +Fri Jul 28 11:12:39 2000 David L. Levine + + * tests/Thread_Mutex_Test.cpp (spawn): use 3 threads instead + of 4 (ACE_MAX_THREADS) on LynxOS, otherwise the test doesn't + seem to terminate. + +Fri Jul 28 10:47:27 2000 David L. Levine + + * bin/ace-install: added this handy build+install script. + Thanks to Eric Mitchell for + initially authoring the script, and to Chad Elliott + for converting it from tcsh to + Bourne sh. + +Fri Jul 28 10:39:17 2000 David L. Levine + + * tests/Reader_Writer_Test.cpp (n_iterations): use + default value of 25 instead of 50 on LynxOS as well + as on VxWorks, so the test runs in a reasonable period + of time (under 1.5 seconds on a 266 MHz PPC). + +Fri Jul 28 10:34:01 2000 David L. Levine + + * test/Semaphore_Test.cpp (ACE_ALLOWED_SLACK): set + to 1100 if ACE isn't using a high resolution timer, + such as on LynxOS/PPC. + +Fri Jul 28 10:23:03 2000 David L. Levine + + * Makefile (DIRS, CLONE, CONTROLLED_FILES, RELEASE_LIB_FILES): + added PACE, so that it will be in ACE 5.1.6. + +Fri Jul 28 07:42:50 2000 David L. Levine + + * tests/Makefile: build CDR_Array_Test, even on LynxOS. + It builds and runs successfully on LynxOS 3.1.0. + +Fri Jul 28 00:23:37 2000 John Heitmann + + * ace/OS.h + Slightly modified semaphore code for pace. + + * ace/OS.i + Updated cond_timedwait in ACE_HAS_PACE to + initialize name_ to null. + + Linux uses native gettimeofday. + + * docs/ACE-SSL.html + Updated with new information about obtaining ACE+SSL. + +Thu Jul 27 18:03:24 2000 Luther J Baker + + * include/makeinclude/platform_linux_lxpthread.GNU: + + Updated to include the current correct platform_linux.GNU. + +Thu Jul 27 18:17:36 2000 Steve Huston + + * ace/Future.h: Added some comments to ACE_Future_Rep<>::set and + ACE_Future<>::set to say they only have an effect on the first + call for that object. Thanks to Andres Kruse , + Douglas C. Schmidt , and + John Tucker for their insight on the + original intentions. + +Thu Jul 27 08:32:58 2000 John Heitmann + + * ace/OS.i + Qualified two pace functions with the correct + pace_ name. Added preliminary pace implementation + for ACE_OS::gettimeofday. See PACE/ChangeLog for + other changes relevant to ACE_OS compiled with pace. + +Wed Jul 26 18:08:11 2000 Andrew G. Gilpin + + * ace/Log_Record.cpp + * ace/ACE.cpp + * ace/Handle_Set.cpp + * ace/Capabilities.{cpp, h} + Cosmetic changes required for split-cpp. + +Wed Jul 26 13:20:00 2000 Kirthika Parameswaran + + * ace/Cached_Connect_Strategy_T.h + (ACE_Bounded_Cached_Connect_Strategy): Added a typedef member + which I assumed wrongly would be inherited from the superclass. + +Tue Jul 25 22:41:53 2000 Steve Huston + + * ace/Log_Msg.cpp (ACE_Log_Msg::log): Replace use of C++ 'true' + value with '1' so old compilers still work. + +Tue Jul 25 22:35:31 2000 Steve Huston + + * ace/Future.cpp (ACE_Future_Rep::set): If two threads compete + to set the value, make sure only one notifies waiters. Thanks to + Joseph Weihs for this fix. + +Tue Jul 25 20:27:26 2000 Andrew G. Gilpin + + * ace/Naming_Context.cpp: + Cosmetic change required for split-cpp. + +Tue Jul 25 18:20:37 2000 John Heitmann + + * include/makeinclude/wrapper_macros.GNU: + Changed pace=1 code to check for inline=1, and + include libPACE correctly. + +Tue Jul 25 16:42:02 2000 Andrew G. Gilpin + + * ace/Logging_Strategy.cpp: + Changed #include "Logging_Strategy.h" to + #include "ace/Logging_Strategy.h" + +Tue Jul 25 16:12:31 2000 Andrew G. Gilpin + + * ace/Log_Msg.h: + More cosmetic changes, similar to previous ChangeLog entry. + +Tue Jul 25 15:58:27 2000 Andrew G. Gilpin + + * ace/Capabilities.{h, cpp}: + * ace/Filecache.cpp: + More fixes to allow to be used by $ACE_ROOT/bin/split-cpp. + These changes are merely cosmetic. + +Tue Jul 25 13:30:00 2000 Kirthika Parameswaran + + * ace/Cached_Connect_Strategy_T.{h, cpp}: Added + ACE_Bounded_Cached_Connect_Strategy which provides a bound on the + cache which is checked before creating new handlers. Thanks to + Edan Ayal for contributing this class and + Susan Liebeskind for brainstorming + about it. + +Tue Jul 25 05:46:29 2000 Douglas C. Schmidt + + * ace/Log_Msg.cpp (log): Optimized the check to make sure that + ACE_Log_Msg isn't too long. Now we can keep it in "non-debug" code! + Thanks to Tomer for this suggestion. + +Mon Jul 24 22:49:09 2000 John Heitmann + + * ace/OS_String.inl + + The emulation functions still need system libraries, + which were not being included when ace was enabled. + +Mon Jul 24 21:22:03 2000 Andrew G. Gilpin + + * ace/Remote_Tokens.cpp: + * ace/Signal.{cpp,h}: + * ace/Priority_Reactor.cpp: + * ace/Object_Manager.{cpp,h}: + * ace/OS.cpp: + * ace/Parse_Node.{cpp,h}: + + The script $ACE_ROOT/bin/split-cpp makes some assumptions about the + source code that it is working with. These changes allow split-cpp + to be used with ACE. These fixes are all mostly code formatting changes. + The functionality should not be changed in any case. + +Mon Jul 24 20:21:47 2000 Andrew G. Gilpin + + * include/makeinclude/wrapper_macros.GNU + * include/makeinclude/rules.local.GNU + * include/makeinclude/rules.lib.GNU + Added support for make split=1 which will use the split-cpp script + when compiling. This should be considered an extremely beta, + use-at-your-own-risk feature for the time being. + +Mon Jul 24 20:13:59 2000 Andrew G. Gilpin + + * bin/split-cpp: + Initial check-in. This script is used to split up C++ source files + into smaller C++ source files, each containing one static data + declaration or one function definition. For more information, see + the comments at the top of the file. + +Mon Jul 24 20:02:03 2000 Douglas C. Schmidt + + * ace/Process_Manager: Replaced ACE_Thread_Mutex with + ACE_Recursive_Thread_Mutex to avoid nasty self-deadlocks! + Thanks to Tom Arbuckle's + for reporting this. + + * ace/Log_Msg.cpp (log): Added a sanity check to make sure that + long messages don't corrupt the memory. Thanks to Tomer + Amiaz for contributing this. + +Mon Jul 24 14:03:59 2000 Chad Elliott + + * include/makeinclude/platform_vxworks5.x_g++.GNU + + Added the PENTIUM and PENTIUMPRO CPU's for x86 VxWorks. + +Mon Jul 24 10:30:35 2000 Michael Kircher + + * OS_Dirent.inl: Added the deletion of the DIR.directory_name_ + and the DIR struct itself for the Win32 emulation. + +Sat Jul 22 22:10:35 2000 Marina Spivak + + * config-win32-common.h + * config-win32-visualage.h: + + By default WIN32 has FD_SETSIZE of 64, which places the limit + between 61 and 64 on the number of clients a server using the + Select Reactor can support at the same time (i.e., 64 - standard + in, out, error). Raised the limit to 1024. + +Fri Jul 21 21:24:09 2000 Douglas C. Schmidt + + * ace/Parse_Node.cpp: Updated the ACE_Object_Name and + ACE_Function_Node constructors to use the new ACE::ldname() + method rather than ACE::strnew(). Thanks to Chris Kohlhoff for + this fix. + + * ace/ACE.cpp: Added a new method called ACE::ldname() so that + dynamic loading performed by the service configurator work the + same with BCB as with other compilers. With BCB, exported + functions from a DLL all have a "_" prepended. Previously you + had to explicitly add the "_" into the svc.conf or when you + called ACE_Service_Config::process_directive. This change + removes that need and makes BCB stuff source/config compatible + with other compilers. This change was prompted by Lothar + Werzinger and was provided by + Christopher Kohlhoff . + +Fri Jul 21 19:22:20 2000 Carlos O'Ryan + + * bin/auto_compile: + Use a .txt extension instead of .log for the log files, that + makes it possible to view them in web browsers without + downloading. + +Fri Jul 21 14:46:37 2000 Vishal Kachroo + + * ace/QoS_Decorator.h: Added ACE_Export for decorator classes for + WinNT. + * ace/QoS_Decorator.cpp: Removed an extra semi-colon. + +Fri Jul 21 09:11:36 2000 Douglas C. Schmidt + + * ace/Process_Manager: Updated the documentation to reflect the recent + change in the notify() implementation. + +Thu Jul 20 23:21:11 2000 Darrell Brunsch + + * examples/IPC_SAP/SSL_SAP/SSL-client.dsp: + * examples/IPC_SAP/SSL_SAP/SSL-server.dsp: + + Fixed up the include paths in these projects. + +Fri Jul 21 00:29:38 2000 Vishal Kachroo + + * examples/QOS/Receiver_QoS_Event_Handler.h: + * examples/QOS/Receiver_QoS_Event_Handler.cpp: Added this event + handler to handle QoS and socket data for the receiver. + + * examples/QOS/Sender_QoS_Event_Handler.h: + * examples/QOS/Sender_QoS_Event_Handler.cpp: Added this event + handler to handle QoS and socket data for the Sender. + + * examples/QOS/QoS_Util.h: + * examples/QOS/QoS_Util.cpp: This class provides utility funtions + like parsing QoS parameters for the QoS enabled applications. + + * examples/QOS/QoS_Signal_Handler.h: + * examples/QOS/QoS_Signal_Handler.cpp: Used to gracefully close + QoS sessions and shutdown RSVP signalling. + + * examples/QOS/FlowSpec_Dbase.h: Provides a name-Flowspec mapping + for the standard QoS flowspecs like g711. Typical QoS flowspecs + required for different video encoding/decoding schemes can be + listed here. + + * examples/QOS/Fill_ACE_QoS.h: + * examples/QOS/Fill_ACE_QoS.cpp: This class helps users to add + new flow specs and provides utility functions for filling up the + flow specs for simplex/duplex sessions. + + * examples/QOS/server.cpp: QoS enabled receiver application. + * examples/QOS/client.cpp: QoS enabled sender application. + + * examples/QOS/Makefile: + * examples/QOS/README + * examples/QOS/QOS.dsw: + * examples/QOS/client.dsp: + * examples/QOS/server.dsp: Updated these files to reflect changes + to the test. The above test demonstrates the use of various + aspects of AQoSA (ACE QoS API). + +Thu Jul 20 23:04:30 2000 John Heitmann + + * ace/Thread_Manager.cpp + * ace/OS_String.inl + Added pace functionality. + +Thu Jul 20 18:28:43 2000 Douglas C. Schmidt + + * ace/SV_Message_Queue: Made the get_id() method const. Thanks + to Mike Winter for suggesting this. + + * ace/Typed_SV_Message_Queue: Added a get_id() accessor. Thanks + to Mike Winter for reporting this. + +Thu Jul 20 14:19:06 2000 Douglas C. Schmidt + + * ace/Thread_Manager.h: Updated the comments on the various *kill*() + methods to clarify what they do and where they are not portable. + Thanks to Steve Huston for motivating this. + +Thu Jul 20 11:00:00 2000 Kirthika Parameswaran + + * ace/Caching_Utility_T.cpp: To get rid of egcs warnings on Linux, + static casted both fields of ACE_MAX in method . + Thanks to David Levine for pointing this + out. Also changed ssize_t to size_t in the cast. + +Thu Jul 20 08:04:13 2000 Douglas C. Schmidt + + * ace/OS.i: Rearranged some code so that the operator *= + and the ACE_Time_Value copy constructor appear in the right + order... Thanks to David for reporting this. + +Wed Jul 19 22:51:42 2000 Steve Huston + + * ace/OS.i (ACE_OS::cond_timedwait): For pSOS, convert absolute + time value to relative, expressed in ticks. Account for pSOS + behavior on timeout - returns with mutex unlocked. Thanks to + Sarmeesha Reddy for this fix. + +Wed Jul 19 19:30:00 2000 Kirthika Parameswaran + + * ace/Caching_Utility_T.cpp: Rectified a typo made in method + . + +Wed Jul 19 17:12:50 2000 John Heitmann + + * ace/OS.h + * ace/OS.i + Wrapped most pace calls with ACE_OSCALL to handle EINTR + correctly, minor corrections and adjustments to pace + functions. + +Wed Jul 19 16:50:00 2000 Kirthika Parameswaran + + * ace/Caching_Utility_T.cpp: Changed the formula to calculate the + as per the contribution by Edan Ayal + . Thanks to Edan for discovering this bug and + contributing the solution for it. + +Wed Jul 19 08:40:10 2000 Douglas C. Schmidt + + * ace/OS.i: Moved the new operator *= so that it's *after* + the inlined sec() and usec() members. + +Tue Jul 18 23:30:59 2000 John Heitmann + + * ace/OS.h + + Modified earlier changes to improve support for LynxOS + signals using pace. + + * ace/ACE.cpp + * ace/OS_Memory.h + + Use pace system calls instead of regular calls + when pace is enabled. + +Tue Jul 18 12:55:55 2000 Joe Hoffert + + * include/makeinclude/platform_lynxos.GNU: + Added PACE_SYSVER assignment to distinguish different + versions of LynxOS in the future. + +Mon Jul 17 23:44:36 2000 Vishal Kachroo + + * ace/Makefile (OTHER_FILES): Moved SOCK_Dgram_Mcast_QoS to the + other files category. It really belongs to a separate category + that I'll create later. + +Mon Jul 17 12:41:25 2000 Andrew G. Gilpin + + * ace/Log_Msg.cpp (LOCAL_EXTERN_PREFIX): + + Changed #define LOCALEXTERN_PREFIX to #define LOCAL_EXTERN_PREFIX + +Mon Jul 17 05:38:15 2000 Douglas C. Schmidt + + * ace/Process_Manager.cpp (open): Zapped a stray register_handler() + call that was mistakenly left around during the recent merge. + Thanks to Darrell Brunsch for reporting this. + +Sun Jul 16 18:53:42 2000 Darrell Brunsch + + * ace/TTY_IO: Removed the #define for ACE_BUILD_DLL, since it + is already defined in the .dsp file. + +Sun Jul 16 19:36:17 2000 Vishal Kachroo + + * ace/QoS_Session.h: + * ace/QoS_Session_Impl.{cpp,h,i}: + * ace/SOCK_Dgram_Mcast_QoS.cpp: Changed these files to accomodate + the new QoS decorator classes. + + * ace/QoS_Decorator.{cpp,h}: Added the QoS decoration for the + ACE_Event_Handler that enables it to catch the RAPI events along + with the usual socket events. + +Sun Jul 16 08:49:44 2000 Douglas C. Schmidt + + * ace/OS: Added multiplication operators to ACE_Time_Value. Thanks + to Tomer Amiaz for contributing these. + + * ace/Process_Manager: To fix deadlocks with the Process_Manager + on UNIX applied the following fixes: + + Use the notify() capability of the reactor from the signal + handler. This allows the signal handler to notify the reactor + (over a pipe) that the signal should be processed. This is done + completely without MT locks. If + ACE_HAS_REACTOR_NOTIFICATION_QUEUE is defined, + ACE_Select_Reactor_Notify::notify_queue_lock_ is now made a + recursive mutex. + + Thanks to Roger Larsson for contribution + these fixes. + + * ace/TTY_IO: Added additional support for the ACE serial line I/O + wrapper facades. Thanks to Martin Stack + for contribution this. + + * ace/Service_Repository.h, + * ace/Service_Object.h, + * ace/Service_Config.h: Added the following aliases: + + #define ACE_Component ACE_Service_Object + #define ACE_Component_Config ACE_Service_Config + #define ACE_Component_Repository ACE_Service_Repository + + to be consistent with the terminology in the POSA2 book. + +Fri Jul 14 19:31:39 2000 Eric Ding + + * ace/config-linux.h + * ace/config-linux-lxpthreads.h + * include/makeinclude/platform_linux.GNU + * include/makeinclude/platform_linux_lxpthreads.GNU + + Changing the default config/platform setting to thread enable on Linux + +Fri Jul 14 19:03:49 2000 John Heitmann + + * include/makeinclude/wrapper_macros.GNU: + Added -DPACE_HAS_ALL_POSIX_FUNCS to the pace flag. + + * ace/OS.h: + Changed typedef of ACE_SignalHandler on LynxOS to + use pace_sig_pf when pace is enabled. Also changed + SIG_IGN accordingly. + +Fri Jul 14 17:25:29 2000 Steve Huston + + * tests/UNIXserver.conf: + * tests/UNIXclerk.conf: + * tests/UNIXtokens.conf: + * tests/Win32server.conf: + * tests/Win32clerk.conf: + * tests/Win32tokens.conf: Look for _make_ACE_Logging_Strategy in + ACE, not netsvcs. It was moved there recently. + +Fri Jul 14 12:00:26 2000 Steve Huston + + * ace/Log_Msg.h (ACE_Log_Msg): Replaced class comments with some new + text submitted by Jerry D. DeMaster + that explain the per-thread and per-process logging enablement + clearly. + +Fri Jul 14 00:28:07 2000 John Heitmann + + * ace/OS.i + + Updates to srand and qsort to eliminate return (for pace). + +Thu Jul 13 20:25:51 2000 Douglas C. Schmidt + + * ACE-INSTALL.html: Updated this file to reflect current reality + wrt Borland C++. Thanks to Christopher Kohlhoff + for reporting this. + +Thu Jul 13 16:34:36 2000 John Heitmann + + * include/makeinclude/wrapper_macros.GNU: + + Added 'pace' flag to use pace as the underpinnings + of ACE_OS. + +Thu Jul 13 14:50:39 2000 Balachandran Natarajan + + * ace/OS.h: Undid the change + Mon Jun 19 17:33:28 2000 Douglas C. Schmidt + + This was creating problems in the IRIX builds. Moreover this + also busted the 'thread-per-connection' strategy in TAO. The + change actually removed a conditional check. I have added that + back. Thanks to Nanbor Wang for guiding me through this. + +Thu Jul 13 14:41:58 2000 John Heitmann + + * ace/OS.i: + + Minor updates to PACE functions which used to use + double parenthesis. + +Thu Jul 13 12:58:26 2000 Ossama Othman + + * ace/SSL/ACE_SSL.dsp: + + Added `SSL_Export.h' to the list of headers. + + * ace/SSL/SSL_Context.cpp: + + Moved preprocessor conditional that checks if ACE_HAS_SSL is + defined after the inclusion of SSL_Context.h. This fixes a link + error that occurs when ACE_HAS_SSL is defined in the config + header instead of on the command line. + +Thu Jul 13 10:55:44 2000 David L. Levine + + * ace/Makefile: changed ssl check from ifneq null to + ifeq 1, to allow ssl = 0. + +Thu Jul 13 10:10:54 2000 David L. Levine + + * ace/Makefile: move ssl check to after include of wrapper_macros.GNU, + so that ssl=1 can be set in platform_macros.GNU. + +Thu Jul 13 09:33:45 2000 Ossama Othman + + * ace/SSL/SSL_SOCK_Stream.i (send, recv): + + Fixed typos where size of buffer being sent/received was passed + to the OpenSSL SSL_get_error() function, instead of the return + status of the SSL_write()/SSL_read() call. This will fix + some broken error handling. + Reported by Craig Perras + +Thu Jul 13 07:55:41 2000 David L. Levine + + * docs/ACE-guidelines.html: added general guideline to not + end text lines with spaces, and the .emacs incantation + that removes them. Thanks to Craig Rodrigues + for suggesting this addition, which we already check for + when committing to our CVS repository. + +Wed Jul 12 09:42:21 2000 Giga Giguashvili + + * ace/CDR_Stream.h: added forward declaration of + ACE_InputCDR before ACE_OutputCDR class definition. + +Wed Jul 12 07:26:25 2000 David L. Levine + + * tests/Service_Config_Test.cpp (instance): cast the u_short to + u_long before casting to void *, to avoid KCC warning about + casting to pointer from integer of different size. + +Tue Jul 11 17:20:48 2000 David L. Levine + + * ace/Local_Tokens.cpp (ACE_TPQ_Entry ctor): try a reinterpret cast + of ACE_Thread::self () to u_long. We need u_long on Linux. + +Tue Jul 11 16:09:14 2000 David L. Levine + + * bin/auto_run_tests.lst: don't run LongUpcalls test + with minimum CORBA. Thanks to Irfan for reporting + that the test needs AMI to run, and minimum CORBA + doesn't have AMI. + +Tue Jul 11 16:03:58 2000 David L. Levine + + * ace/Local_Tokens.cpp (ACE_TPQ_Entry ctor): don't cast result + of ACE_Thread::self (), because it might be a structure. + Thanks to Ossama for reminding me of that. + Changed format specifier to be %u instead of %lu, to avoid + mismatch, at least on some platforms. + +Tue Jul 11 14:47:48 2000 Chris Kohlhoff + + * ace/config-win32-common.h: + Use default value of 0 for ACE_USE_RCSID on Win32 since RCS IDs + should probably not be required on this platform. + + * include/makeinclude/build_core_exe.bor: + * include/makeinclude/build_core_library.bor: + * include/makeinclude/build_dll.bor: + * include/makeinclude/build_exe.bor: + * include/makeinclude/build_lib.bor: + * include/makeinclude/make_flags.bor: + * include/makeinclude/outputdir.bor: + * include/makeinclude/recurse.bor: + * include/makeinclude/install.bor: + * ace/Makefile.bor: + Added support for 'make install'. + + * include/makeinclude/build_dll.bor: + * include/makeinclude/build_exe.bor: + * include/makeinclude/build_lib.bor: + * include/makeinclude/clean.bor: + Changed clean target so that files generated by the IDL compiler + are removed. + + * ace/ace_wchar.h: + * ace/config-win32-borland.h: + * ace/OS.h: + * ace/OS_String.h: + * ace/OS.i: + Bring certain types and functions into the global namespace. This + is necessary so that the ACE headers will work the same regardless + of any standard C++ headers that may be included beforehand. + +Tue Jul 11 14:21:51 2000 Steve Huston + + * ace/Log_Msg.cpp (ACE_Log_Msg::log): Added an ACE_Errno_Guard to + prevent errors in this function from destroying errno. This function + should be benign, just reporting, and leaving errno alone for + further checks/logging by apps. + +Tue Jul 11 14:20:35 2000 Steve Huston + + * tests/SOCK_Send_Recv_Test.cpp: Added some additional output + to replace an assert - helps track problems quicker. Thanks to + David Levine for this suggestion. + +Tue Jul 11 11:06:45 2000 Craig Rodrigues + + * ace/config-linux-common.h: in glibc 2.2, the function + prototypes for msgsnd() and msgrcv() were changed to be POSIX + compliant. So, ACE_LACKS_SOME_POSIX_PROTOTYPES breaks + compilation. + +Tue Jul 11 11:03:50 2000 David L. Levine + + * bin/make_release: chmod of kits to 664, and chgrp to doc, + after creation. + +Tue Jul 11 10:45:46 2000 David L. Levine + + * bin/generate_man_pages: don't try generate man pages for + RMCast_Reassembly.h, either, because it trips up class2man. + [Bug 608] + +Tue Jul 11 10:40:48 2000 David L. Levine + + * bin/make_release: robustness improvements: + 1) set CVSROOT and ACE_ROOT environment variables, and $logname, + to reasonable default values if they were null. + 2) Always prepend /project/danzon/pkg/gnu/bin to PATH. Before, + -d was first used to check to see if it existed. But, it + might not have been mounted, and -d won't cause it to automount. + +Tue Jul 11 08:24:33 2000 Douglas C. Schmidt + + * ace/POSIX_Asynch_IO.h, + * ace/SUN_Proactor.h: Fixed these files so that class2man + now generates proper manual pages. [Bug 608] + +Tue Jul 11 08:07:23 2000 David L. Levine + + * bin/generate_man_pages: don't try generate man pages for + RMCast_Export.h, because it's a generated file and doesn't + have any man page formatting info. It trips up class2man. + [Bug 608] + +Tue Jul 11 07:42:57 2000 David L. Levine + + * ace/Local_Tokens.cpp (ACE_TPQ_Entry ctor): cast result + to ACE_Thread::self () to u_long, to avoid mismatch with + %lu sprintf parameter. + +Tue Jul 11 06:21:35 2000 Douglas C. Schmidt + + * apps/Gateway/Peer/Peer.cpp (transmit): The last two arguments to + Event_Header were reversed! Thanks to Kim Lester + for reporting this. + +Mon Jul 10 20:35:08 2000 Marina Spivak + + * ACE version 5.1.5 released. + +Mon Jul 10 13:15:10 2000 Ossama Othman + + * ace/SSL/Makefile (ACE_SHLIBS): + + Added "-lACE" to the list of libraries that should be linked in + to libACE_SSL, since the ACE SSL wrappers depend on ACE. + +Sun Jul 09 21:38:03 2000 Ossama Othman + + * ace/SSL/ACE_SSL.dsp: + + Fixed library path in "Release" configuration. + +Sun Jul 09 14:20:42 2000 Darrell Brunsch + + * ace/ace_wchar.h: + + Added support for wchar_t on VxWorks. It now compiles, but + unfortunately VxWorks doesn't come with any C library support + beyond conversion to/from multi-byte character strings. + + This will only take effect when ACE_HAS_WCHAR is defined (it + isn't by default). Emulation for the missing str* functions + will be added soon. + +Sun Jul 09 14:00:42 2000 Darrell Brunsch + + * ace/ace_wchar.h: + + Added two macros for straight out conversion of strings: + ACE_TEXT_CHAR_TO_WCHAR and ACE_TEXT_WCHAR_TO_CHAR. + + * ace/adapter/README: (Added) + * ace/adapter/ace/ACE.h: (Added) + * ace/adapter/ace/ARGV.h: (Added) + * ace/adapter/ace/Arg_Shifter.h: (Added) + * ace/adapter/ace/ATM_Addr.h: (Added) + * ace/adapter/ace/DEV_Addr.h: (Added) + * ace/adapter/ace/Dirent.h: (Added) + * ace/adapter/ace/DLL.h: (Added) + * ace/adapter/ace/Dynamic_Service.h: (Added) + * ace/adapter/ace/FIFO.h: (Added) + * ace/adapter/ace/FIFO_Recv.h: (Added) + * ace/adapter/ace/FIFO_Recv_Msg.h: (Added) + * ace/adapter/ace/FIFO_Send.h: (Added) + * ace/adapter/ace/FIFO_Send_Msg.h: (Added) + * ace/adapter/ace/FILE_Addr.h: (Added) + * ace/adapter/ace/Functor.h: (Added) + * ace/adapter/ace/High_Res_Timer.h: (Added) + * ace/adapter/ace/INET_Addr.h: (Added) + * ace/adapter/ace/Malloc_T.h: (Added) + * ace/adapter/ace/Memory_Pool.h: (Added) + * ace/adapter/ace/MEM_Addr.h: (Added) + * ace/adapter/ace/OS_Dirent.h: (Added) + * ace/adapter/ace/OS_String.h: (Added) + * ace/adapter/ace/Service_Config.h: (Added) + * ace/adapter/ace/Service_Object.h: (Added) + * ace/adapter/ace/SOCK_Dgram_Bcast.h: (Added) + * ace/adapter/ace/SOCK_Dgram_Mcast.h: (Added) + * ace/adapter/ace/SPIPE_Addr.h: (Added) + * ace/adapter/ace/System_Time.h: (Added) + * ace/adapter/ace/Task_T.h: (Added) + * ace/adapter/ace/Trace.h: (Added) + + This is a initial shot at the implementation of an adaptation + layer for ACE that provides a Wide character interface with + a character library and vice versa. + + Right now the above files contain classes ending with _W that + correspond to the actual classes (such as ACE_W). This class + will have methods that take in wchar_t instead of char, and + then convert the parameters and return value when calling + the actual char implementation. + + Note, this is an initial implementation that isn't complete + across all interfaces and there are memory management issues that + still must be dealt with. + +Sat Jul 08 14:50:34 2000 David L. Levine + + * all Makefiles: updated dependencies. + +Fri Jul 7 20:24:30 2000 Douglas C. Schmidt + + * examples/Reactor/Multicast/server.cpp: The last character 0x0D in the + message was messing up the display. Thanks to Zoran Ivanovic + for this fix. + +Fri Jul 07 17:17:21 2000 George Reid + + * ace/config-mvs.h: long long support was introduced in os/390 + version 2.6, so only #define ACE_LACKS_LONGLONG_T with + if __COMPILER_VER__ < 0x22060000. + + * ace/config-mvs.h: added #define ACE_LACKS_PLACEMENT_OPERATOR_DELETE, + even though it doesn't seem to have an effect on + ace/Svc_Handler.cpp. + +Fri Jul 7 09:47:36 2000 Douglas C. Schmidt + + * netsvcs/lib/Server_Logging_Handler_T.cpp (open_common): Don't + pass in the length to the ACE_CString constructor -- just let is + copy what's already there. Thanks to Valery Arkhangorodsky + for reporting this. + + * ace/ACE.cpp (timestamp): Make sure to insert a NUL byte at the + end of yeartmp and timetmp. Thanks to David Levine and Purify + for reporting this. + +Fri Jul 07 09:36:05 2000 David L. Levine + + * examples/IPC_SAP/SOCK_SAP/FD-unserver.cpp (handle_client): + cast result of ACE_OS::getpid () to int, and print as an int, to + avoid compiler warning about mismatched format specifier. + +Thu Jul 6 10:36:46 2000 Douglas C. Schmidt + + * ace/ACE.cpp: Fixed the timestamp() call so that it returns a string + with the date that also contains the year. Thanks to Nicoletta Viale + for reporting this. + +Thu Jul 06 10:59:41 2000 David L. Levine + + * performance-tests/Misc/test_naming (bind,rebind,unbind,find): + changed ACE_ASSERTs to statements that are always executed, + even with ACE_NDEBUG set. Added ACE_ERRORs to report errors. + +Thu Jul 06 10:51:19 2000 David L. Levine + + * examples/Reactor/Misc/test_time_value.cpp (main): added + some ACE_UNUSED_ARGS with ACE_NDEBUG to eliminate warnings + about unused variables with debug=0. + +Wed Jul 5 23:36:12 2000 John Heitmann + + * ace/OS.i: + Added PACE functionality to functions whose counterparts were + recent additions to PACE. + +Wed Jul 5 14:04:50 2000 Douglas C. Schmidt + + * ace/SUN_Proactor: Added yet another handle_events() method to keep + SunC++ from complaining! Thanks to David for reporting this. + +Wed Jul 05 13:19:52 2000 Steve Huston + + * ace/OS.h: Don't typedef pid_t for ACE_PSOS_DIAB_PPC - it's defined + in sys/types.h. + +Wed Jul 05 12:06:17 2000 Steve Huston + + * ace/OS.h: make the pSOS section adapt better to different pSOS + versions which seem to define different sets of errno values. + Also merge in some additions supplied by Matt Emerson + to define needed types based on the + ACE_PSOS_CANT_USE_SYS_TYPES config macro. (I think this macro + may have been added a while back by someone else working on the + pSOS port, but was not noted in this ChangeLog). + +Wed Jul 05 11:24:51 2000 Steve Huston + + * ace/config-psos-diab-ppc.h: Added ACE_HAS_EXCEPTIONS in the + non-g++ section. + +Tue Jul 4 10:12:12 2000 Douglas C. Schmidt + + * ace/SUN_Proactor: Added a new method with the name/signature + + virtual int handle_events (ACE_Time_Value &); + + so that we get the appropriate overloading/overriding behavior. + Thanks to Marina for reporting this. + + * ace/POSIX_Proactor.cpp: Removed unnecessary parens around + aiocb * and ACE_POSIX_Asynch_Result * to make certain compilers + happy. Thanks to Marina for reporting this. + + * ace/SUN_Proactor.cpp (handle_events): Fixed an ACE_ERROR that + should have been ACE_ERROR_RETURN. Thanks to Marina for + reporting this. + (start_aio): Fixed capitalization of "Op" to be "op". + + * ace/POSIX_Proactor.cpp, + * ace/SUN_Proactor.cpp: Fixed improper use of TCHAR to be ACE_TCHAR + and also fixed another stray use of "int result". Thanks to + David Levine for reporting this. + +Mon Jul 3 08:04:00 2000 Douglas C. Schmidt + + * ace/POSIX_Proactor.h (ACE_POSIX_AIOCB_Proactor): Fixed another + syntax error. Thanks to David Levine for reporting it. + +Mon Jul 3 00:22:57 2000 John Heitmann + + * ace/OS.{cpp,h}: + Made changes to support changes made to PACE. All + changes occured inside #ifdef ACE_HAS_PACE. + +Sun Jul 2 17:38:25 2000 Douglas C. Schmidt + + * ace/POSIX_Proactor.cpp, + * ace/POSIX_Asynch_IO.cpp: Fixed some bugs with the integrated code, + in particular, the use of the legacy ASYS_TEXT has been fixed. + +Sat Jul 1 11:33:45 2000 Alex Libman + + * ace/SUN_Proactor: Added new files that specialize the + POSIX_Proactor to use the Sun-specific versions of aioread() and + aiowrite(), which are much faster than the POSIX versions. + + * ace/POSIX_Proactor: Added public virtual method ProactorType get_impl_type () + where enum ProactorType { + PROACTOR_POSIX, // base class type + PROACTOR_AIOCB, + PROACTOR_SIG , + PROACTOR_SUN + }; + + This has been done with purpose not to develop additional + classes ACE_SUN_Asynch_Read/Write_Stream/File and to take into + account differencies in ACE_POSIX_Asynch_Operation::cancel () + method. + + * ace/POSIX_AIOCB_Proactor: The public constructor now defines max + number asynchronous operations which can be started at the same time: + + ACE_POSIX_AIOCB_Proactor ( size_t nMaxOp = 256 ); + + ACE_RTSIG_MAX ( usually 8 ) is too small for real job. + + Also added proctected constructor + + ACE_POSIX_AIOCB_Proactor ( size_t nMaxOp , int Flg); + + This constructor is used by ACE_SUN_Proactor. The difference + between constructors: public constructor calls + create_notify_manager (see 3.) and protected does not. The + reason: it is necessary to create ACE_AIOCB_Notify_Pipe_Manager + instance when the virtual table for derived class is biult. + + Added protected method: + + void create_notify_manager () ; + + The method is called from public ACE_POSIX_AIOCB_Proactor + constructor and ACE_SUN_Proactor constructor + ACE_AIOCB_Notify_Pipe_Manager should be created after + building the virtual table for the final subclass. + + Added protected method: + + void delete_notify_manager () ; + + The method is called from ACE_POSIX_AIOCB_Proactor and + ACE_SUN_Proactor destructors. It is possible to call it twice, + as it deletes ACE_AIOCB_Notify_Pipe_Manager and sets pointer to + zero. + + Replaced the protected method + + int register_aio_with_proactor (ACE_POSIX_Asynch_Result *result) + + with two protected following methods: + + virtual int register_and_start_aio( ACE_POSIX_Asynch_Result *result, + int Op ); + virtual int start_aio (ACE_POSIX_Asynch_Result *result, int Op ); + + where Op means : 0-read, 1- write + + These methods are made both as virtual to overwrite in + ACE_SUN_Proactor. register_and_start_aio shoud be called + instead of old register_aio_with_proactor and it locks access to + aiocb lists. start_aio is called only from register_and_start_aio. + + Added protected method to find and extract the results of the + completed aio operation: + + ACE_POSIX_Asynch_Result * find_completed_aio (int & error_status, + int & return_status ); + + This method is called from int handle_events (unsigned long milli_seconds) + and locks access to aiocb lists. + + Replace the following members : + + aiocb *aiocb_list_ [ACE_RTSIG_MAX]; + ACE_POSIX_Asynch_Result *result_list_ [ACE_RTSIG_MAX]; + + with + + aiocb ** m_pAIOCB_list_ ; + ACE_POSIX_Asynch_Result ** m_pResult_list_ ; + + The listsd are be allocated dynamically. + + Added thread mutex to protect the work with lists. + ACE_Thread_Mutex m_MtxAIOCB ; + + * ace/POSIX_AIOCB_Asynch_Operation: The method + + int register_aio_with_proactor (ACE_POSIX_Asynch_Result *result); + + is replaced by + + int register_and_start_aio (ACE_POSIX_Asynch_Result *result,int Op); + + where Op means operation : 0 - read , 1 - write + + The method + + int cancel (void); + + is modified according to the type of Proactor's implementation. + + The following methods are changed as shown below: + + int ACE_POSIX_AIOCB_Asynch_Read_Stream::shared_read + (ACE_POSIX_Asynch_Read_Stream_Result *result) + { + result->aio_sigevent.sigev_notify = SIGEV_NONE; + return register_and_start_aio ( result , 0 ) ; // read + } + + and + + int ACE_POSIX_AIOCB_Asynch_Read_Stream::shared_write + (ACE_POSIX_Asynch_Read_Stream_Result *result) + { + result->aio_sigevent.sigev_notify = SIGEV_NONE; + return register_and_start_aio ( result , 1 ) ; //write + } + +Sat Jul 01 11:46:23 2000 David L. Levine + + * ace/config-cxx-common.h: moved ACE_HAS_STANDARD_CPP_LIBRARY + and ACE_HAS_CPLUSPLUS_HEADERS defines out of Linux-only + section, to minimize the differences between Linux and Tru64. + Those defines don't hurt on Tru64. + +Fri Jun 30 16:51:48 2000 Steve Huston + + * tests/CDR_Array_Test.cpp: Add template type specifiers to copy + ctor and operator= to satisfy IBM C/C++. + +Fri Jun 30 10:59:23 2000 Joe Hoffert + + * include/makeinclude/platform_lynxos.GNU: + Added PACE_SYSNAME = LynxOS so that PACE can set the + appropriate platform subdirectory when building. + +Fri Jun 30 03:21:58 2000 John Heitmann + + * ace/OS.{h,i}: + * ace/OS_Dirent.{h,inl}: + Added more pace calls. OS.i is now mostly complete. + +Thu Jun 29 18:44:07 2000 John Heitmann + + * ace/OS.{i,cpp,inl}: + * ace/OS_Dirent.{inl,h}: + Began integration of pace with ACE_OS. #define + ACE_HAS_PACE to activate. About 25% is complete. + +Thu Jun 29 15:49:16 2000 Steve Huston + + * ace/INET_Addr.h (ACE_INET_Addr (const ACE_TCHAR [])): + * ace/DEV_Addr.h (ACE_DEV_Addr (const ACE_TCHAR *)): + * ace/Dirent.h (ACE_Dirent (const ACE_TCHAR *)): + * ace/FILE_Addr.h (ACE_FILE_Addr (const ACE_TCHAR *)): + * ace/Local_Tokens.h (ACE_Mutex_Token (const ACE_TCHAR *), + ACE_RW_Token (const ACE_THCAR *)): + * ace/MEM_Addr.h (ACE_MEM_Addr (const ACE_THCAR [])): + * ace/Parse_Node.h (ACE_Parse_Node (const ACE_TCHAR *), + ACE_Static_Function_Node (const ACE_TCHAR *)): Added ACE_EXPLICIT + to prevent unintended conversion of strings to these objects. + Thanks to Joseph Weihs for this correction. + + * ace/OS.h, config-all.h: Move setups for ACE_EXPLICIT and + ACE_MUTABLE macros from OS.h to config-all.h. ACE_EXPLICIT was + needed for the above (Dirent triggered the need to move it) and + ACE_MUTABLE seemed like the same sort of compiler setting thing to + be more properly in config-all.h. + +Wed Jun 28 19:35:23 2000 Jerry D. De Master + + * netsvcs/lib/Client_Logging_Handler.cpp: + Currently, the client logging daemon attempts to connect to a + server logging daemon to which all logging records are + forwarded. In the event that a connection cannot be established + at initialization, or if the connection is lost during daemon + execution, logging output "rolls-over" to STDERR. This seems + like reasonable behavior, however.... + + One interesting use case of the client logging daemon is to use + it to collect all logging output from all clients, on a single + node system. For this use case, there is no need for a server + logging daemon. One could run the client logging daemon without + a server logging daemon and redirect STDERR to a logfile, + however, this methodology does not allow the use of the + ACE_Logging_Strategy class to configure the client daemon's + logging behavior (especially the new -i and -m options). This + problem can be easily fixed by first testing if the client + daemon is already logging to a msg_ostream - if it is, do not + roll-over logging to STDERR upon connection failure. + +Wed Jun 28 11:20:08 2000 Joe Hoffert + + * bin/pace_components: + Modified to make PACE_ROOT $(ACE_ROOT)/PACE rather than the + previous value of $(ACE_ROOT)/pace. + +Wed Jun 28 11:42:53 2000 Steve Huston + + * ace/config-psos-diab-ppc.h: Added ACE_LACKS_PRAGMA_ONCE for the + non-g++ situation. The newer Diab compiler (at least) needs this. + Corrected a '#defined' directive to '#define'. + +Tue Jun 27 13:01:37 2000 Steve Huston + + * tests/CDR_Array_Test.cpp: Moved the 'digits' array inside the + function which used it. With the array at module scope, the template + instantiation didn't find it for debug=0 optimize=1 on Sun C++ 4.2. + +Tue Jun 27 11:11:41 2000 Steve Huston + + * tests/OS_Test.cpp: Remove more output which triggers false fails + in test scripts. Thanks to David Levine for his patience and help + with this. + +Tue Jun 27 09:23:01 2000 Joe Hoffert + + * include/makeinclude/platform_sunos5_g++.GNU: + Changed optimization flag from -O2 to -O3 to get rid of + function declared but not used warnings for PACE. + +Tue Jun 27 08:55:21 2000 Michael Kircher + + * ace/OS_Dirent.cpp: Fixed the algorithm of reading a directory + in the readdir_emulation () method. Thanks to Zoran Ivanovic + for pointing this out. + +Tue Jun 27 08:30:21 2000 Steve Huston + + * netsvcs/servers/main.cpp: Add "ace/" to #include Logging_Strategy.h + to find it in it's new home. + +Tue Jun 27 08:24:49 2000 Steve Huston + + * ace/Makefile: + * netsvcs/lib/Makefile: Updated dependencies. + +Mon Jun 26 18:26:47 2000 Ossama Othman + + * netsvcs/lib/Makefile.am (libnetsvcs_la_SOURCES, noinst_HEADERS): + * netsvcs/lib/Makefile.bor (OBJFILES): + + Removed Logging_Strategy.* from these make variables. The + Logging_Strategy files have been moved to ACE. + +Mon Jun 26 17:42:15 2000 Carlos O'Ryan + + * ace/SSL/ACE_SSL.dsw: + Add a new workspace for the SSL adaptation library. + + * ace/SSL/ACE_SSL.dsp: + Fixed include paths, removed ACE_HAS_SSL from the command line + (it should be in config.h), but still has problems with the link + phase when SSL is not around. + +Mon Jun 26 17:01:35 2000 David L. Levine + + * include/makeinclude/platform_sunos5_sunc++.GNU (CC_VERSION): + use $(CXX) instead of hardcoding CC, in case the user overrides + CXX. Thanks to Alexander Belopolsky + for reporting this. + +Mon Jun 26 13:31:39 2000 Steve Huston + + * tests/OS_Test.cpp: Don't use the word 'fail' when the test + succeeds... the test scripts look for that word to mean test fail. + +Mon Jun 26 12:09:33 2000 David L. Levine + + * ace/config-lynxos.h: use _POSIX_VERSION to detect the + LynxOS version, instead of trying to rely on the g++ + version. Thanks to Chad Elliott + for this suggestion. + +Mon Jun 26 12:01:17 2000 Chad Elliott + + * tests/run_tests.sh + Removed the -p option from the #!/bin/sh line. Tru64's Bourne + Shell doesn't seem to like that option. + +Sat Jun 24 19:58:22 2000 John Heitmann + + * ace/OS.h + * ace/OS.i + * ace/config-macosx.h + * include/makeinclude/platform-macosx.GNU + Added preliminary support for Mac OS X Developer Preview 4. Quite + a bit is still broken, but the core ACE library works great. Grep + for __MACOSX__ in OS* to see the changes. + +Thu Jun 22 17:27:35 2000 Steve Huston + + * ace/Log_Msg.cpp (ACE_Log_Msg_Attributes::inherit_hook): Use a + temporary void * to hold the reference - this keeps Sun C++ 4.2 + from complaining you can't static_cast a void *& to a + ACE_Log_Msg_Attributes*. + +Thu Jun 22 17:58:21 2000 Steve Huston + + * ace/Handle_Set.cpp: Added pSOS-specific changes to deal with pSOS's + ordering of fd_set bits reversed from all other platforms. Thanks + to Matt Emerson for figuring this out. + +Thu Jun 22 15:16:31 2000 Steve Huston + + * ace/OS.cpp: Added pSOS implementation for ACE_OS::uname. + Added pSOS implementation for ACE_OS::inet_ntoa - this one is not + inlined, whereas all other platforms' ACE_OS::inet_ntoa are in + OS.i, inlined (if enabled). Thanks to Matt Emerson + for these. + + * ace/OS.i (ACE_OS::inet_ntoa): Disabled this for pSOS - pSOS's version + is in OS.cpp now. + +Thu Jun 22 14:03:53 2000 Nanbor Wang + + * netsvcs/servers/svc.conf: Changed the library name where the + Logging_Strategy could be found. + + * netsvcs/lib/netsvcs.dsp: Removed Logging_Strategy.* from the + project file. + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Added Logging_Strategy.*. + + * ace/Logging_Strategy.h: Removed ACE_SVC_BUILD_DLL. It's now + under ACE. Changed ACE_SVC_FACTORY_DECLARE to + ACE_FACTORY_DECLARE. + + * ace/Logging_Strategy.cpp: Changed ACE_SVC_FACTORY_DEFINE to + ACE_FACTORY_DEFINE. + +Thu Jun 22 13:59:26 2000 Nanbor Wang + + * ace/OS.cpp: Removed an extra 'g' from the very beginning of the + file. + +Thu Jun 22 14:11:26 2000 Steve Huston + + * ace/OS.cpp (ACE_OS::thr_keycreate): Add some type cast to compile + clean on pSOS. Thanks to Matt Emerson . + +Thu Jun 22 12:46:43 2000 Douglas C. Schmidt + + * ace: Added Logging_Strategy.{h,cpp} to ACE and the Makefile. + + * netsvcs/lib: Zapped the Logging_Strategy.{h,cpp} + files from netsvcs and moved them into ACE, where they can be + reused more readily. Thanks to Martin Krumpolec + for this suggestion. + +Thu Jun 22 13:29:22 2000 Steve Huston + + * ace/OS.cpp (ACE_Thread_Adapter::invoke): Added cleanup code for + pSOS tasks at the end of the function. The code is from ISI's + documentation. Thanks to Matt Emerson for + pointing out this problem and supplying the fix. + +Thu Jun 22 09:47:56 2000 Chad Elliott + + * ace/OS_Dirent.h + Added include of unistd.h before dirent.h. The lack of the + STATUS typedef was causing a build failure on VxWorks with the + GNU compiler. + +Thu Jun 22 08:28:48 2000 Steve Huston + + * tests/OS_Test.cpp: Fixed unused argv warning for g++. + +Wed Jun 21 14:40:15 2000 Carlos O'Ryan + + * ace/OS.i: + Removed unused arg warnings in ACE_OS::rename() + +Wed Jun 21 13:41:27 2000 Steve Huston + + * tests/OS_Test.cpp: New test for OS things. All it tests now is + ACE_OS::rename. + * tests/OS_Test.dsp: MSVC project file for new test. + * tests/tests.dsw: Added OS_Test.dsp. + * tests/Makefile: Add new OS_Test. + * tests/run_tests.lst: Added OS_Test. + * trests/version_tests/OS_Test.dsp: MSVC project file for new test. + * tests/version_tests.dsp: Added new OS_Test.dsp. + +Wed Jun 21 13:25:41 2000 Steve Huston + + * ace/OS.i (rename): On ACE_HAS_WINNT4 systems (Win NT, 2000), the + rename is accomplished via MoveFileEx, which allows an existing + destination file to be replaced. This makes the behavior in this + case the same on NT/2000 as on *NIX systems (the file is replaced). + +Wed Jun 21 13:23:18 2000 Steve Huston + + * ace/OS.h (rename): Added a 3rd argument (int flags) which defaults + to -1 (meaning to use ACE-default flags inside the function). The + flags are only useful on NT/2000 for supplying values to the + MoveFileEx function's flags argument. + +Wed Jun 21 03:02:37 2000 Nanbor Wang + + * ace/OS.i (set_errno_to_last_error): + * ace/OS.i (set_errno_to_wsa_last_error): The RTL for IBM + VisualAge C++/NT has the same problem as Borland 4. Thanks to + Boris Kaminer for reporting this. + +Wed Jun 21 01:12:59 2000 Irfan Pyarali + + * ace/ACE.cpp: Changed all the timed versions of the "_n_i()" + methods so that they are more optimistic. Previously, these + methods would check with select() before issuing the data + transfer call. There was really no need to do this since the + socket is already in non-blocking mode and will therefore not + block in transferring the data. This change should make these + methods faster in the case when there is no blocking since + select() will not be called. + + As a side effect of this change, checking for EWOULDBLOCK now + happens after the call to send()/recv(). This automatically + fixed bug 594 though I am still not sure why send()/recv() would + EWOULDBLOCK right after select() indicated that the socket was + ready. Either way, thanks to Viatcheslav A. Batenine + for reporting the bug and providing an + example illustrating the bug. + +Tue Jun 20 19:37:53 2000 Carlos O'Ryan + + * ace/CORBA_macros.h: + Fixed the definition of ACE_RE_THROW_EX, there was a space + between the macro name and the ( that starts its arguments. + + * ace/RMCast/Makefile: + * ace/RMCast/RMCast_Header_Size.h: + * ace/RMCast/RMCast_Header_Size.i: + * ace/RMCast/RMCast_Header_Size.cpp: + A simple control message, still unused. + + * ace/RMCast/RMCast_Partial_Message.cpp: + Verify that all fragments report the same total size. + +Tue Jun 20 14:55:26 2000 Nanbor Wang + + * ace/OS.cpp: Applied patches for ACE_BEGINTHREADEX and + ACE_ENDTHREADEX for using IBM VisualAge C++ 4.0 on NT. Thanks + to Boris Kaminer for providing the + patches. + +Tue Jun 20 12:04:24 2000 Ossama Othman + + * ace/Makefile (ssl): + + Reverted change that causes the SSL wrappers to be built when + SSL support isn't explicitly disabled. It caused SSL support to + always be built, which was not the desired effect. + +Tue Jun 20 12:57:12 2000 Nanbor Wang + + * ace/config-freebsd-pthread.h: Undefined ACE_LACKS_SETSCHED if we + are compiling on R4.0 or above. Thanks to Sergey A. Osokin + for reporting this for Nick Logvinov + . + +Tue Jun 20 07:37:18 2000 Douglas C. Schmidt + + * ace/Select_Reactor_T.h, + * ace/Select_Reactor_T.cpp, + * ace/Reactor.h, + * ace/Reactor.i, + * ace/Reactor_Impl.h, + * ace/WFMO_Reactor.h, + * ace/WFMO_Reactor.cpp: + Added a new method to access the Reactor's timer queue. Also + renamed the accessors timer_queue(ACE_Timer_Queue *) and + ACE_Timer_Queue *timer_queue() to be more consistent with ACE + naming conventions. Thanks to Jody Hagins for reporting this. + +Tue Jun 20 02:06:15 2000 Craig Rodrigues + + * include/makeinclude/platform_sunos5_g++.GNU + * include/makeinclude/platform_sunos5_sunc++.GNU + + Updated PLATFORM_X11_CPPFLAGS to include the standard + include path for X11 and Motif headers under Solaris. + +Mon Jun 19 22:14:26 2000 Alex Arulanthu + + * ace/POSIX_Asynch_IO.h: + * ace/POSIX_Asynch_IO.cpp: + * ace/POSIX_Proactor.h: + * ace/POSIX_Proactor.cpp: + * examples/Reactor/Proactor/Makefile + * examples/Reactor/Proactor/test_proactor2.cpp: + + Thanks to Alex Libman , the following + changes have been integrated onto POSIX Proactor. + + - Enabling the completion call backs even if aio_return + fails. We will call the completion call back methods with 0 + transferred data parameter. + + - MT safe'ing AIOCB proactor. It would not improve the + efficiency. + +Mon Jun 19 19:44:05 2000 Ossama Othman + + * ace/Makefile (ssl): + + Fixed conditional so that the SSL wrappers are built when SSL is + not explicitly disabled, i.e. when the "ssl" make variable is + not equal to zero. Note that the default is not to build the + SSL wrappers. + + * ace/OS.i (thr_yield): + + Corrected typo in comment. + + * m4/platform.m4 (ACE_CPPFLAGS): + + Define necessary feature test macros on the command line, not in + the configuration header. This allows ACE applications to + utilize those macro definitions without having to worry about + header inclusion ordering. + + (ACE_DEFAULT_SELECT_REACTOR_SIZE): + + It is no longer necessary to hard-code the default reactor size + for older Linux kernels that had a file descriptor limit less + than FD_SETSIZE since the Select Reactor now falls back on the + run-time file descriptor limit for the given process. + + (ACE_HAS_IRIX62_THREADS): + + Removed redundant definition. Only define + ACE_HAS_IRIX62_THREADS for IRIX 6.2. + +Mon Jun 19 17:33:28 2000 Douglas C. Schmidt + + * ace/OS.h: Removed the special case check for + + # if defined (ACE_HAS_IRIX62_THREADS) + # define THR_SCOPE_SYSTEM 0x00100000 + # else + + and just used this: + + # define THR_SCOPE_SYSTEM THR_BOUND + + Thanks to John Foresteire + for this suggestion. + +Mon Jun 19 12:38:58 2000 Carlos O'Ryan + + * ace/config-all.h: + * ace/OS.h: + * ace/OS.cpp: + * ace/Log_Msg.h: + * ace/Log_Msg.cpp: + In Win32 we have to pass the structured exception handlers + around. + +Mon Jun 19 11:43:43 2000 Carlos O'Ryan + + * Decouple the Log_Msg inheritance from the ACE_OS layer: the + Log_Msg class registers hooks with the ACE_OS layer that are + invoked when a new thread is created. + The callback is used to first copy the state from the current + thread to a temporary object and then copy (in the created + thread) the temporary object state to the TSS Log_Msg object. + The temporary holder for the Log_Msg state is allocated in the + heap, and destroyed as soon as we don't need it anymore. + + * ace/Log_Msg.h: + * ace/Log_Msg.cpp: + New ACE_Log_Msg_Attributes class used as the temporary holder of + the Log_Msg state during thread creation. + + * ace/config-all.h: + * ace/OS.h: + * ace/OS.i: + * ace/OS.cpp: + Define the new hooks used to inherit the Log_Msg state. + +Mon Jun 19 12:45:45 2000 David L. Levine + + * ace/config-lynxos.h: removed the ACE_LACKS_PTHREAD_SIGMASK, + and added back the pthread_sigmask () declaration. With + extern "C", this time. + + * include/makeinclude/platform_lynxos.GNU: moved our LynxOS + cross development kit to where it belongs, so that + ENV_PREFIX is now the same as with 2.5.0 and 3.0.0. + +Mon Jun 19 11:49:43 2000 David L. Levine + + * include/makeinclude/platform_lynxos.GNU: export environment + variables that are set on the host (for cross-compilation). + The cross-compile g++ needs ENV_PREFIX in order to link + properly. + + * ace/config-lynxos.h: added ACE_LACKS_PTHREAD_SIGMASK with + LynxOS 3.1.0. In addition to not be declared in the system + headers, pthread_sigmask () isn't in the threads libs. + +Mon Jun 19 10:43:27 2000 David L. Levine + + * include/makeinclude/platform_lynxos.GNU: use -mthreads + with LynxOS 3.1.0, as well as with prior versions. + +Mon Jun 19 02:47:12 2000 Nanbor Wang + + * ace/CORBA_macros.h: Fixed misspellings of deprecated. Thanks to + Ossama for pointing this out. + +Sun Jun 18 11:39:48 2000 David L. Levine + + * include/makeinclude/platform_lynxos.GNU: rework environment + variables to better support LynxOS 3.1.0. + +Sun Jun 18 10:54:59 2000 Douglas C. Schmidt + + * ace/INET_Addr: Added operator < to ACE_INET_Addr so that it + can be used in an STL map. Thanks to Tomer Amiaz + for this suggestion. + +Sun Jun 18 03:18:21 2000 Nanbor Wang + + * ace/CORBA_macros.h: The definition of ACE_RETHORW is flawed + because it requires all ACE_RETHROW statements be the last + statement executed within the ACE_CATCH block as this example: + + ACE_CATCH ( /* whatever */ ) + { + // Do something else + ACE_RETHROW; + } + ACE_ENDTRY; + ACE_CHECK; + + However, if this is not the case, programs may exhibit different + behavior on platforms with/without native C++ exceptions, as + shown in the following example: + + ACE_CATCH ( /* whatever */ ) + { + if (foo == bar) + ACE_RETHROW; + foo = bar; + } + ACE_ENDTRY; + ACE_CHECK; + + Although the problem is easy to fix, unfortunately, I can't find + a way to fix it without changing the macro name because the + program flow may get completely messed up if ACE_TRY and + ACE_TRY_EX are used together. Therefore, I have added two new + macros ACE_RE_THROW and ACE_RE_THROW_EX. + + The old macro is now deprecated. If you are absolutely sure + that you are not using the old ACE_RETHROW macro as mentioned + above, you can define ACE_HAS_DEPRECATED_ACE_RETHROW in your + ace/config.h file and continue to use ACE_RETHROW. However, + you should move to the new macros as soon as possible. + +Sat Jun 17 18:15:00 2000 Kirthika Parameswaran + + * tests/Makefile.DLL: + * tests/Makefile.DLL_Test: + Renamed Makefile.DLL since on NT it appeared as if there was a + dll version of the Makefile. Also did a make depend. Thanks to + James Megquier for reporting this and to + Darrell brunsch for suggesting that the + name be changed. + * tests/Makefile: Updated the Makefile to now have + Makefile.DLL_Test. + +Sat Jun 17 08:03:53 2000 Douglas C. Schmidt + + * docs/tutorials/Chap_5/ex02.html: Fixed a typo where + peer() should have been peer_i(). Thanks to Keo Kelly + for reporting this. + +Sat Jun 17 07:46:44 2000 Chris Kohlhoff + + * include/makeinclude/ace_flags.bor: + + Added support for new LoadBalancing orbsvcs library. + +Fri Jun 16 17:30:18 2000 Carlos O'Ryan + + * ace/RMCast/Makefile: + * ace/RMCast/RMCast.dsp: + * ace/RMCast/RMCast.dsw: + * ace/RMCast/RMCast_Export.h: + In this library we will implement a simple, small scale reliable + multicast protocol for ACE. The library is based on the ASX + classes in ACE (Task, Module and friends). + + * tests/RMCast/Makefile: + * tests/RMCast/RMCast_Tests.dsw: + The unit test directory for the RMCast library components. + + * ace/RMCast/RMCast_Fragment.h: + * ace/RMCast/RMCast_Fragment.i: + * ace/RMCast/RMCast_Fragment.cpp: + The fragmentation task. It divides a message block chain in + small fragments. The fragments are limited by the number of + bytes and the number of entries in the chain (for platforms with + limited IO vectors). + + * tests/RMCast/RMCast_Fragment_Test.cpp: + * tests/RMCast/RMCast_Fragment_Test.dsp: + Unit test for the fragmentation layer. + + * ace/RMCast/RMCast_Partial_Message.h: + * ace/RMCast/RMCast_Partial_Message.i: + * ace/RMCast/RMCast_Partial_Message.cpp: + A simply class to maintain a partial received messages, keeps + track of the missing bytes and detects when the complete message + has been received. + + * ace/RMCast/RMCast_Reassembly.h: + * ace/RMCast/RMCast_Reassembly.i: + * ace/RMCast/RMCast_Reassembly.cpp: + The reassembly layer. Uses the Partial_Message class to do a + great deal of the work. + + * tests/RMCast/RMCast_Reassembly_Test.cpp: + * tests/RMCast/RMCast_Reassembly_Test.dsp: + Unit test for the reassembly layer. + +Fri Jun 16 17:00:03 2000 Carlos O'Ryan + + * include/makeinclude/rules.bin.GNU: + * include/makeinclude/wrapper_macros.GNU: + Joe's change does not work. A *LOT* of makefiles in TAO do not + include the rules.bin.GNU file. + +Fri Jun 16 16:18:21 2000 Ossama Othman + + * ace/Makefile (DIRS): + + Descend into and build the newly added SSL directory if "make + ssl=1" is issued. + + * ace/SSL/ACE_SSL.dsp: + * ace/SSL/Makefile: + * ace/SSL/SSL_Context.cpp: + * ace/SSL/SSL_Context.h: + * ace/SSL/SSL_Export.h: + * ace/SSL/SSL_SOCK.cpp: + * ace/SSL/SSL_SOCK.h: + * ace/SSL/SSL_SOCK_Acceptor.cpp: + * ace/SSL/SSL_SOCK_Acceptor.h: + * ace/SSL/SSL_SOCK_Connector.cpp: + * ace/SSL/SSL_SOCK_Connector.h: + * ace/SSL/SSL_SOCK_Stream.cpp: + * ace/SSL/SSL_SOCK_Stream.h: + + Integrated the ACE SSL wrappers into the ACE mainline + distribution. Enable using "make ssl=1." The library that is + generated is called "libACE_SSL.so" on UNIX, and ACE_SSL{d}.dll on + Win32. + + * examples/IPC_SAP/Makefile: + + Build SSL_SAP example if "make ssl=1" is issued. + + * examples/IPC_SAP/SSL_SAP/SSL_SOCK_SAP.dsw: + * examples/IPC_SAP/SSL_SAP/Makefile: + * examples/IPC_SAP/SSL_SAP/README: + * examples/IPC_SAP/SSL_SAP/SSL-client.dsp: + * examples/IPC_SAP/SSL_SAP/SSL-server.dsp: + * examples/IPC_SAP/SSL_SAP/SSL-client-simple.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-client-simple.h: + * examples/IPC_SAP/SSL_SAP/SSL-client.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-client.h: + * examples/IPC_SAP/SSL_SAP/SSL-server-fancy.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-server-poll.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-server-simple.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-server.cpp: + * examples/IPC_SAP/SSL_SAP/dummy.pem: + * examples/IPC_SAP/SSL_SAP/key.pem + * examples/IPC_SAP/SSL_SAP/local_data: + * examples/IPC_SAP/SSL_SAP/summarize: + + Integrated example that demonstratres use of the ACE SSL + wrappers. + + * include/makeinclude/wrapper_macros.GNU (ssl): + + Added make flag to enable compilation of OpenSSL support in + ACE. (e.g. make ssl=1) + +Fri Jun 16 14:40:34 2000 Carlos O'Ryan + + * bin/run_all_list.pm: + * bin/auto_run_tests.lst: + Add the LongUpcalls to the run_test lists. + +Fri Jun 16 16:00:45 2000 Joe Hoffert + + * include/makeinclude/{rules.bin.GNU,wrapper_macros.GNU}: + Moving VLDLIBS definition from wrapper_macros.GNU to rules.bin.GNU + to allow unsetting ACE_LIB. Needed for PACE builds that don't need + the ACE library. + +Fri Jun 16 14:24:36 2000 Steve Huston + + * ace/config-hpux-11.00.h: + * include/makeinclude/platform_hpux_aCC.GNU: Allow user to do make + exceptions=0 to disable exception handling. This is not a safe + thing to do since the C++ runtime throws exceptions, but if you + must, and you know what you're doing, here's the rope. + +Fri Jun 16 08:40:38 2000 Darrell Brunsch + + * bin/msvc_auto_compile.pl: + + Moved the print statement for a project file from Build_Config + to Build, so it will be executed for the -CORE target. + + This was causing incorrect headers in nightly build reports. + +Fri Jun 16 08:12:37 2000 David L. Levine + + * docs/ACE-guidelines.html: added a section for PACE. + +Thu Jun 15 21:30:37 2000 Ossama Othman + + * ace/Makefile.am (pkgincludedir): + + Corrected value for this variable. It should have been + "$(includedir)/ace" instead of "$(prefix)/include/ace." In any + case, this was more of a consistency change than anything else, + since this variable is actually commented out. + +Thu Jun 15 20:01:35 2000 Steve Huston + + * ace/OS.i (ACE_OS::tempnam): Made the (__IBMCPP__) a 'defined' check + and combined it with defined (ACE_WIN32) so it works right on AIX. + Moved the NOTSUP stuff for ACE_HAS_WINCE to the section with the + other platforms that don't support it. + +Thu Jun 15 16:10:51 2000 Steve Huston + + * include/makeinclude/platform_aix4_cset++.GNU: Force exceptions=1 + because IBM C/C++ doesn't have a way to disable exceptions. + + * ace/config-aix-4.x.h: Add #if !defined around ACE_HAS_EXCEPTIONS + to avoid compile errors if exceptions=1 explicitly stated. + +Thu Jun 15 16:03:11 2000 David L. Levine + + * include/makeinclude/platform_lynxos.GNU: removed + -mthreads from CFLAGS with LynxOS 3.1.0. + +Thu Jun 15 15:56:27 2000 Michael Ravits + + * ace/OS_String.inl (strtoul): removed cast to unsigned + long on Linux. It's no longer needed with current glibc. + +Thu Jun 15 15:18:31 2000 Steve Huston + + * include/makeinclude/platform_aix4_g++.GNU: Add default setting for + exceptions (off by default); added proper handling for turning off + threads. Thanks to Soren Schmidt for these. + +Thu Jun 15 12:49:50 2000 Ossama Othman + + * ace/OS.h: + + Do not define priority range related macros + (ACE_{PROC,THR}_PRI_{FIFO,RR,OTHER}_{MIN,MAX}) to use + sched_get_priority_{min,max}() unless _POSIX_PRIORITY_SCHEDULING + is defined. + + Include prior to using _POSIX_PRIORITY_SCHEDULING + since that macro is supposed to be defined there. + + * ace/Malloc_T.cpp (trybind, bind, find): + * ace/Process_Manager.cpp (register_handler, spawn, remove): + * ace/Service_Repository.cpp (insert, remove): + * ace/Thread_Manager.cpp (spawn, insert_thr, check_state): + + Fixed "control reaches end of non-void function" warnings issued + by g++ 2.95.2. + + * ace/config-linux-lxpthreads.h (PTHREAD_MIN_PRIORITY, + PTHREAD_MAX_PRIORITY): + + Removed definition of these macros. They aren't used, nor + should they be, since priority ranges for each scheduling policy + are determined at run-time when creating a thread by invoking + the sched_get_priority_{min,max}() OS functions. This is only + done when ACE is configured for platforms that support the + Pthreads final standard (ACE_HAS_PTHREADS_STD), which glibc >= + 2.0.x does. + +Thu Jun 15 13:15:06 2000 David L. Levine + + * ace/config-lynxos.h: fixed 3.1.0 support. Rely on the + GNU compiler version instead of __LYNXOS_SDK_VERSION, + because that's not defined with 3.1.0. And added a + declaration of pthread_sigmask (), because that's missing + from the system headers. + + * include/makeinclude/platform_lynxos.GNU: fixed 3.1.0 support. + Removed the extra $(LYNXTARGET) from the PATH, and + added a -I/usr/lynx/$(VERSION)/usr/include (which shouldn't + be necessary, but apparently is). + + * ace/OS.i (thr_sigsetmask): don't call ::pthread_sigmask () + if ACE_LACKS_PTHREAD_SIGMASK is defined. + +Thu Jun 15 10:28:05 2000 Martin Stack + + * ace/TTY_IO.cpp (control): Added + + dcb.fDtrControl = DTR_CONTROL_ENABLE; + + for Win32 so that it will have the same default semantics as + Linux. + +Thu Jun 15 07:35:57 2000 Roger Larsson + + * ace/Process_Manager.cpp: Make sure to grab the lock inside the + terminate() methods and also call remove_proc() rather than + remove(). + +Thu Jun 15 12:41:05 2000 Yamuna Krishnamurthy + + * ACE version 5.1.4 released. + +Wed Jun 14 18:15:43 2000 Ossama Othman + + * configure.in (ACE_HAS_UCONTEXT_T): + + Check if ucontext_t gets defined by including , if the + check in fails. Some platforms define ucontext_t + in , but ACE doesn't explicitly include that + header. However, it is very likely that does, either + directly or indirectly. This should fix a configuration problem + that was occuring on FreeBSD 4.0. + +Wed Jun 14 17:54:18 2000 Ossama Othman + + * Makefile.am: + + Moved generation of aceConf.sh and ace-config.1 to configure + script. There was no reason for them to be generated in the + Makefile. This also fixes a problem where the Solaris sed + command didn't understand a substitution. + + * acconfig.h (PTHREAD_MIN_PRIORITY, PTHREAD_MAX_PRIORITY): + + Removed macros related to these macros. The configure script + will automatically add them. + + * configure.in: + + Generate aceConf.sh and ace-config.1 at configure time, rather + than make time. See above entry for details. + + Fixed tests for PTHREAD_MAX_PRIORITY and PTHREAD_MIN_PRIORITY. + These macros should only be used if the sched_get_priority_max() + and sched_get_priority_min() functions are not available. If + PTHREAD_{MAX,MIN}_PRIORITY isn't available, then check if + PX_PRIO_{MAX,MIN} is available. If so, then define + PTHREAD_{MAX,MIN}_PRIORITY to be those values. These changes + fix some configuration problems experienced IRIX. + + Improved test for ACE_Addr::sap_any support. ACE_Addr:sap_any + is now passed as an argument to the ACE_FILE_Addr constructor. + + * ace/Cached_Connect_Strategy_T.cpp: + + This file was still including a file that was removed from the + distribution, i.e. `ace/Cached_Connect_Strategy_T.i', which + caused compile-time errors to occur when building with inlining + disabled. + +Wed Jun 14 11:55:56 2000 Ossama Othman + + * ace/Cleanup_Strategies_T.cpp: + + This file was still including a file that was removed from the + distribution, i.e. `ace/Cleanup_Strategies_T.i', which caused + compile-time errors to occur when building with inlining + disabled. + +Wed Jun 14 10:24:02 2000 Douglas C. Schmidt + + * netsvcs/lib/Logging_Strategy.cpp (handle_timeout): Removed a + couple of non-referenced parameters. Thanks to David and Yamuna + for reporting this. + +Wed Jun 14 07:43:27 2000 Douglas C. Schmidt + + * netsvcs/lib/Client_Logging_Handler.cpp: Added ACE_TEXT macros + to the appropriate places in this file. + + * netsvcs/lib/Logging_Strategy.cpp: Removed the legacy + ASYS_TEXT and replaced them with ACE_TEXT. + +Wed Jun 14 08:30:53 2000 Carlos O'Ryan + + * */Makefile: + Updated dependencies (again), the last time I had + static_libs_only enabled that broke a number of things. + +Tue Jun 13 17:46:42 2000 Irfan Pyarali + + * ace/Connector.cpp: + + - handle_close(): cleanup_AST() will unbind an entry from the + map. This change of state in the map invalidates any iterators + currently iterating over the map. Therefore, the code in + handle_close() was changed such that a new iterator is created + after every call to cleanup_AST(). + + - cancel(): Cannot use the after cleanup_AST() is called + as cleanup_AST() will unbind the from the map. + + Thanks to Roland Fischer for pointing out this + bug. + +Tue Jun 13 15:31:21 2000 Ossama Othman + + * ltcf-c.sh: + * ltcf-cxx.sh: + * ltconfig: + * ltmain.sh: + + Updated to latest upstream versions. + +Tue Jun 13 15:51:33 2000 Jerry D. De Master + + * netsvcs/lib/Logging_Strategy: Enhanced the Logging Strategy so + it can be used to limit log file size at any logging point + (i.e., application, client logging daemon, or server logging + daemon) by specifying the -i and -m + options for the Logging_Strategy class in a + svc.conf file. + +Tue Jun 13 12:56:36 2000 Carlos O'Ryan + + * */Makefile: + Updated dependencies. + +Tue Jun 13 09:47:25 2000 Darrell Brunsch + + * bin/msvc_auto_compile.pl: + + Fixed some typos related to the static build core. + +Mon Jun 12 20:45:18 2000 Darrell Brunsch + + * bin/Process_Win32.pm: + + Changed the $newwindow check to check to see if the variable + was defined before comparing it to "yes". This removes a + perl warning. + + * bin/msvc_auto_compile.pl: + + The TAOACE[_static].dsw files were changed, so I altered the + CORE option to use the TAOACE.dsw file with -DLL, and added + some missing dsp files for the -LIB build. + + * bin/create_vt_dsps.pl: + + Changed the runtime library type used in the static versions + and added ACE_OS_HAS_DLL=0. + + * ace/ace_lib.dsp: + * apps/gperf/src/gperf.dsp: + * apps/gperf/src/gperf_lib.dsp: + * examples/IPC_SAP/ATM_SAP/CPP_client.dsp: + * examples/IPC_SAP/ATM_SAP/CPP_server.dsp: + + Miscellaneous fixes to get the static versions working again. + Mainly just adding ACE_OS_HAS_DLL=0. + + * tests/version_tests/CDR_Array_Test.dsp: (added) + * tests/version_tests/Atomic_Op_Test.dsp: + * tests/version_tests/Auto_IncDec_Test.dsp: + * tests/version_tests/Barrier_Test.dsp: + * tests/version_tests/Basic_Types_Test.dsp: + * tests/version_tests/Buffer_Stream_Test.dsp: + * tests/version_tests/CDR_File_Test.dsp: + * tests/version_tests/CDR_Test.dsp: + * tests/version_tests/Cache_Map_Manager_Test.dsp: + * tests/version_tests/Cached_Accept_Conn_Test.dsp: + * tests/version_tests/Cached_Conn_Test.dsp: + * tests/version_tests/Capabilities_Test.dsp: + * tests/version_tests/Collection_Test.dsp: + * tests/version_tests/Conn_Test.dsp: + * tests/version_tests/DLL_Test.dsp: + * tests/version_tests/DLList_Test.dsp: + * tests/version_tests/Dynamic_Priority_Test.dsp: + * tests/version_tests/Enum_Interfaces_Test.dsp: + * tests/version_tests/Env_Value_Test.dsp: + * tests/version_tests/Future_Set_Test.dsp: + * tests/version_tests/Future_Test.dsp: + * tests/version_tests/Handle_Set_Test.dsp: + * tests/version_tests/Hash_Map_Bucket_Iterator_Test.dsp: + * tests/version_tests/Hash_Map_Manager_Test.dsp: + * tests/version_tests/High_Res_Timer_Test.dsp: + * tests/version_tests/IOStream_Test.dsp: + * tests/version_tests/Lazy_Map_Manager_Test.dsp: + * tests/version_tests/MM_Shared_Memory_Test.dsp: + * tests/version_tests/MT_Reactor_Timer_Test.dsp: + * tests/version_tests/MT_SOCK_Test.dsp: + * tests/version_tests/Malloc_Test.dsp: + * tests/version_tests/Map_Manager_Test.dsp: + * tests/version_tests/Map_Test.dsp: + * tests/version_tests/Mem_Map_Test.dsp: + * tests/version_tests/Message_Block_Test.dsp: + * tests/version_tests/Message_Queue_Notifications_Test.dsp: + * tests/version_tests/Message_Queue_Test.dsp: + * tests/version_tests/Naming_Test.dsp: + * tests/version_tests/New_Fail_Test.dsp: + * tests/version_tests/Notify_Performance_Test.dsp: + * tests/version_tests/Object_Manager_Test.dsp: + * tests/version_tests/OrdMultiSet_Test.dsp: + * tests/version_tests/Pipe_Test.dsp: + * tests/version_tests/Priority_Buffer_Test.dsp: + * tests/version_tests/Priority_Reactor_Test.dsp: + * tests/version_tests/Priority_Task_Test.dsp: + * tests/version_tests/Process_Manager_Test.dsp: + * tests/version_tests/Process_Mutex_Test.dsp: + * tests/version_tests/Process_Strategy_Test.dsp: + * tests/version_tests/RB_Tree_Test.dsp: + * tests/version_tests/Reactor_Exceptions_Test.dsp: + * tests/version_tests/Reactor_Notify_Test.dsp: + * tests/version_tests/Reactor_Performance_Test.dsp: + * tests/version_tests/Reactor_Timer_Test.dsp: + * tests/version_tests/Reactors_Test.dsp: + * tests/version_tests/Reader_Writer_Test.dsp: + * tests/version_tests/Recursive_Mutex_Test.dsp: + * tests/version_tests/Reverse_Lock_Test.dsp: + * tests/version_tests/SOCK_Connector_Test.dsp: + * tests/version_tests/SOCK_Send_Recv_Test.dsp: + * tests/version_tests/SOCK_Test.dsp: + * tests/version_tests/SPIPE_Test.dsp: + * tests/version_tests/SString_Test.dsp: + * tests/version_tests/SV_Shared_Memory_Test.dsp: + * tests/version_tests/Semaphore_Test.dsp: + * tests/version_tests/Service_Config_Test.dsp: + * tests/version_tests/Sigset_Ops_Test.dsp: + * tests/version_tests/Simple_Message_Block_Test.dsp: + * tests/version_tests/Svc_Handler_Test.dsp: + * tests/version_tests/TSS_Test.dsp: + * tests/version_tests/Task_Test.dsp: + * tests/version_tests/Thread_Manager_Test.dsp: + * tests/version_tests/Thread_Mutex_Test.dsp: + * tests/version_tests/Thread_Pool_Reactor_Test.dsp: + * tests/version_tests/Thread_Pool_Test.dsp: + * tests/version_tests/Time_Service_Test.dsp: + * tests/version_tests/Time_Value_Test.dsp: + * tests/version_tests/Timeprobe_Test.dsp: + * tests/version_tests/Timer_Queue_Test.dsp: + * tests/version_tests/Tokens_Test.dsp: + * tests/version_tests/UPIPE_SAP_Test.dsp: + * tests/version_tests/Upgradable_RW_Test.dsp: + * tests/version_tests/version_tests.dsw: + + Regenerated. + +Mon Jun 12 18:17:42 2000 Darrell Brunsch + + * bin/auto_run_tests.lst: (added) + * bin/auto_run_tests.pl: (added) + * tests/run_test.lst: (added) + * tests/run_test.pl: (added) + + New scripts to facilitate the auto_build testing on NT. + +Sun Jun 11 18:12:12 2000 Vishal Kachroo + + * examples/QOS/QoSEvent.h: Removed a warning on Win2K. + +Sat Jun 10 23:34:16 2000 Darrell Brunsch + + * docs/CE-status.txt: + + Updated to reflect my current plans for Windows CE. + Unfortunately, ACE on CE will not be working with the + next beta kit of ACE. :-( Need to get an autobuild + set up for CE sometime... + +Sat Jun 10 20:51:56 2000 Darrell Brunsch + + * ace/config-win32-common.h: + + Changed the "You must link with Multithreaded DLL" error + to make it sound less like it is a problem with the ACE + project file instead of the application project file. + + * docs/ACE-guidelines.html: + + Updated the section on wchar support in ACE. + +Sat Jun 10 17:33:55 2000 Carlos O'Ryan + + * ace/Configuration.cpp: + Fixed warnings under Linux/KCC + + * bin/auto_compile: + Add separators between the different sections of the log. + Darrell script would be able to generate nice color coded + summaries based on that. + + * include/makeinclude/platform_linux_kcc.GNU: + Add support for the math library. + +Fri Jun 09 11:31:24 2000 Nanbor Wang + + * ace/Service_Config.cpp (close_singletons): Applied Tom + Arbuckle's patch so the + Process_Manager singleton is closed before Reactor singleton. + +Fri Jun 9 09:28:18 2000 Carlos O'Ryan + + * include/makeinclude/platform_linux_kcc.GNU: + More fixes to make sure that shared and static libraries are + generated with the right configuration (threads, exceptions, + etc.). + +Fri Jun 9 07:19:10 2000 Toshio Hori + + * ace/Stream.h (class ACE_Stream): Added an updated version an + insert() and replace() that make it possible to replace the + stream head and tail. + +Fri Jun 09 02:34:07 2000 Irfan Pyarali + + * ace/OS.i (floor and ceil): Added new methods. + +Thu Jun 8 20:58:17 2000 Darrell Brunsch + + Patched for IBM VAC++ 4.02 for WinNT applied on behalf of + Boris Kaminer + + * config-win32-visualage.h: + + Remove dupplicate definition of ACE_HAS_TYPENAME_KEYWORD. + + * Auto_Ptr.h: + * Auto_Ptr.i: + + Copy constructors bodies into class declarations from Auto_Ptr.i + to Auto_ptr.h for constructors with ACE_EXPLICIT. (workaround + for explicit bug in VAC++ 4.02) + + * Malloc.cpp: + + Changed ACE_ASSERT (0 == "not implemented!"); to + ACE_ASSERT (!"not implemented!"); + (get over codestore fault) + + * OS.i: (chdir) + + Added !defined (ACE_WIN32) to the check for IBM CPP + + * ace-dll.icc: + + Changed the order of hpp files, and added a define for + _INTEGRAL_MAX_BITS = 64. + +Thu Jun 8 18:35:30 2000 Carlos O'Ryan + + * ace/Date_Time.h: + * ace/Date_Time.i: + Made a bunch of accessors const, thanks to Derek Dominish + for pointing this out. + +Thu Jun 08 14:17:20 2000 Nanbor Wang + + * ace/Process_Manager.{h,cpp} (close_singleton): + * ace/Service_Config.cpp (close_singletons): Applied Tom Arbuckle's + patch to clean up + Process_Manager singleton at program exit. + +Thu Jun 8 13:00:38 2000 Toshio Hori + + * ace/Stream.h (class ACE_Stream): Added support for an insert() + and replace() to make it easier to insert and update the + contents of an ACE_Stream. + +Thu Jun 8 09:52:36 2000 Joe Hoffert + + * bin/pace_components: + Adding this file to handle setup and cleanup of PACE components + just like the ace_components file does for ACE. + +Thu Jun 08 01:53:03 2000 Irfan Pyarali + + * ace/Message_Queue.i (peek_dequeue_head): Fixed typo. + +Wed Jun 7 20:41:33 2000 Douglas C. Schmidt + + * ace/Message_Queue: Added some "no-op" impls for the new + pure virtual methods added to ACE_Message_Queue recently. + Thanks to Darrell for pointing this out. + +Wed Jun 7 13:24:22 2000 Carlos O'Ryan + + * ace/OS.h: + For KCC under linux we have to define ACE_DEFAULT_SHLIB_MODE as + RLTD_LAZY (RTLD_GROUP and RTLD_NODELETE are not defined in that + configuration). + + * ace/OS_Dirent.inl: + Removed unreachable statement. + + * ace/config-linux-common.h: + KCC does not have LLSEEK or LLSEEK64 + + * include/makeinclude/platform_linux_kcc.GNU: + Fixed the configuration file so the default settings for + debugging, optimization and exceptions can be overriden by the + user. + +Wed Jun 7 12:05:23 2000 Darrell Brunsch + + * bin/fuzz.pl: + + Dropped the level for the TCHAR check to 4, so it runs + by default. + + Also added a new test to check for mismatch of ace/pre.h + and ace/post.h in header files (level 4). + + * ace/ace_wchar.h: + + Added a FUZZ: disable for the TCHAR check, since we need + to define the ASYS_TCHAR type macros for backwards + compatiblity here. + +Wed Jun 07 13:22:01 2000 David L. Levine + + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp (twoway_client_test): + replaced ASYS_TEXT with ACE_TEXT, see + Tue Jun 6 12:39:23 2000 Phil the Build Czar + :-) + +Wed Jun 7 12:09:50 2000 Joe Hoffert + + * include/makeinclude/platform_sunos5_sunc++.GNU: + Changed position-independent-code option from -PIC to -KPIC since + the C++ compiler recognizes either and the C compiler only + recognizes -KPIC. + * include/makeinclude/rules.local.GNU: + Added a compilation rule for C (i.e., .c) files. + +Tue Jun 6 22:32:16 2000 Carlos O'Ryan + + * ace/OS.i: + * ace/OS_TLI.h: + Moved the explicit declaration of t_getname() from OS.i to OS_TLI.h + +Tue Jun 6 20:02:18 2000 Carlos O'Ryan + + * ace/OS.h: + * ace/OS.i: + * ace/OS_TLI.cpp: + * ace/OS_TLI.h: + * ace/OS_TLI.inl: + * ace/config-all.h: + * ace/Makefile: + * ace/Makefile.am: + * ace/Makefile.bor: + * ace/ace-dll.icc: + * ace/ace-lib.icc: + * ace/ace.icc: + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Moved the TLI wrappers to ACE_OS_TLI. + +Tue Jun 6 17:57:14 2000 Vishal Kachroo + + * examples/QOS/server.cpp: + * examples/QOS/client.cpp: + Changed these to reflect changes to the ACE QoS API. + +Tue Jun 06 15:44:03 2000 David L. Levine + + * ace/config-lynxos.h: added support for LynxOS 3.1.0. + It uses ACE_HAS_PTHREADS_STD instead of ACE_HAS_PTHREADS_DRAFT4 + + ACE_HAS_STDARG_THR_DEST. Thanks to Dorr H. Clark + for reporting this. + +Tue Jun 6 12:39:23 2000 Phil Mesnier + + Ported ACE & TAO to Unixware 7.1, using GNU C++ compiler gcc 2.95.2. + See ACE-INSTALL for specific information on configuring the build + environment. + + * ACE-INSTALL.html + * ace/OS.h + * ace/config-unixware-7.1.0.h + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp + * examples/Threads/tss1.cpp + * include/makeinclude/platform_unixware_g++.GNU + * include/makeinclude/wrapper_macros.GNU + +Tue Jun 6 10:32:51 2000 Edan Ayal + + * ace/Message_Queue.h: Added the following two pure + virtual methods to class 'ACE_Message_Queue_Base': + + virtual ACE_Notification_Strategy *notification_strategy (void) = 0; + virtual void notification_strategy (ACE_Notification_Strategy *s) = 0; + virtual int peek_dequeue_head (ACE_Message_Block *&first_item, + ACE_Time_Value *timeout = 0); + + These methods allow the 'ACE_Message_Queue_Base' to be used as a + base class (without specifying the synch method or templatizing + on it) and access/alter the notification strategy. + +Tue Jun 6 09:42:39 2000 Chris Kohlhoff + + * include/makeinclude/ace_flags.bor: + Added support for new orbsvcs libraries. + +Mon Jun 05 20:59:42 2000 David L. Levine + + * include/makeinclude/wrapper_macros.GNU: protected definitions + of shared_libs and static_libs with ifeq null. Users can still + override the settings in their platform_macros.GNU, because + that's included after these definitions, or in their environment. + But this makes the code look more consistent. Thanks to Jody + Hagins for this suggestion. + +Mon Jun 5 14:54:46 2000 Ossama Othman + + * ace/Select_Reactor_T.cpp (ACE_Select_Reactor_T): + + There is no need to deallocate resources from the previous call + to open() since the open() method deallocates any resources + prior to exiting if an error was encountered. + +Mon Jun 5 14:18:18 2000 Ossama Othman + + * ace/Select_Reactor_T.cpp (ACE_Select_Reactor_T): + + If the Reactor fails to open with the hard-coded default size + then set the Reactor size to be the current run-time limit on + the number of file descriptors available to the process. This + size is not necessarily the maximum limit. On platforms that do + not support run-time evaluation of the current file descriptor + limit, a default value of FD_SETSIZE will be used. This + corrects a problem on Solaris in 32 bit mode, and on any other + platform where the per-process file descriptor limit is less + than FD_SETSIZE. + Reported by Marvin Allen Wolfthal . + + * ace/config-linux-common.h (ACE_DEFAULT_SELECT_REACTOR_SIZE): + + It is no longer necessary to hard-code the default reactor size + for older Linux kernels that had a file descriptor limit less + than FD_SETSIZE since the Select Reactor now falls back on the + run-time file descriptor limit for the given process. + +Mon Jun 5 10:22:22 2000 Darrell Brunsch + + * ace/OS_Memory.h: + + Just like in OS_String.h, added an include for stddef.h to + get the definition of size_t. + +Mon Jun 5 09:55:20 2000 Darrell Brunsch + + * ace/OS_String.h: + * ace/OS_String.inl: + * ace/OS_String.cpp: + + Removed some unnecessary *_emulation methods, and fixed some + other miscellaneous mistakes (like using ACE_OS instead of + ACE_OS_String). + + During my last checkin, it seems like the strncasecmp_emulation + versions were lost, so I resurrected them. + + Also changed the use of u_char in memchr_emulation to unsigned + char, since we shouldn't depend on definitions of u_char (since + on some platforms we don't have a definition of u_char at that + time). Thanks to David Levine for reporting this. + +Sun Jun 4 14:58:37 2000 Darrell Brunsch + + * apps/Orbix-Examples/Event_Comm/include/Event_Comm.hh: + * apps/Orbix-Examples/Event_Comm/libsrc/Event_Comm.hh: + * apps/Orbix-Examples/Logger/logger.hh: + * docs/ACE-categories.html: + * docs/tutorials/guide-tutorials.html: + * docs/tutorials/online-tutorials.html: + * docs/tutorials/templates.html: + * docs/tutorials/Chap_2/ex01.html: + * docs/tutorials/Chap_2/ex02.html: + * docs/tutorials/Chap_2/ex03.html: + * docs/tutorials/Chap_2/ex04.html: + * docs/tutorials/Chap_2/ex05.htm: + * docs/tutorials/Chap_2/ex05.html: + * docs/tutorials/Chap_2/ex06.html: + * docs/tutorials/Chap_3/ex01.html: + * docs/tutorials/Chap_3/ex02.html: + * docs/tutorials/Chap_4/ex01.html: + * docs/tutorials/Chap_4/ex02.html: + * docs/tutorials/Chap_4/ex03.html: + * docs/tutorials/Chap_4/ex04.html: + * docs/tutorials/Chap_4/ex05.html: + * docs/tutorials/Chap_4/ex06.html: + * docs/tutorials/Chap_4/ex07.html: + * docs/tutorials/Chap_4/ex08.html: + * docs/tutorials/Chap_5/ex01.html: + * docs/tutorials/Chap_5/ex02.html: + * docs/tutorials/Chap_5/ex03.html: + * docs/tutorials/Chap_5/ex04.html: + * docs/tutorials/Chap_5/ex05.html: + * docs/tutorials/Chap_6/ex01.html: + * docs/tutorials/Chap_6/ex02.html: + * docs/tutorials/Chap_6/ex03.html: + * docs/tutorials/Chap_6/ex04.html: + * docs/tutorials/Chap_6/ex05.html: + * docs/tutorials/Chap_6/ex06.html: + * docs/tutorials/Chap_6/ex07.html: + * docs/tutorials/Chap_6/ex08.html: + * docs/tutorials/Chap_6/ex09.html: + * docs/tutorials/Chap_6/ex10.html: + * docs/tutorials/Chap_7/ex01.html: + * docs/tutorials/Chap_7/ex02.html: + * docs/tutorials/Chap_7/ex03.html: + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.i: + * os-patches/lynxos-patches.html: + * performance-tests/Synch-Benchmarks/context.c: + * psosim/drv_conf.c: + * rpc++/callback.cc: + * rpc++/request.cc: + * rpc++/service.cc: + * rpc++/stub.cc: + * rpc++/version.h: + * rpc++/xdr++.cc: + * rpc++/StdHdrs/rpc/auth.h: + * rpc++/StdHdrs/rpc/c_types.h: + * rpc++/StdHdrs/rpc/clnt.h: + * rpc++/StdHdrs/rpc/pmap_clnt.h: + * rpc++/StdHdrs/rpc/svc.h: + * rpc++/StdHdrs/rpc/xdr.h: + * rpc++/example/calcsvc.cc: + * rpc++/example/calcsvc.h: + * rpc++/example/client.cc: + * rpc++/example/server.cc: + * rpc++/rpc++/callback.h: + * rpc++/rpc++/request.h: + * rpc++/rpc++/service.h: + * rpc++/rpc++/stub.h: + * rpc++/rpc++/xdr++.h: + + Added missing CVS Id strings. + +Sun Jun 4 14:55:46 2000 Darrell Brunsch + + * bin/fuzz.pl: + + Added html files to the list of files checked for + ending with a newline. + +Sun Jun 4 14:38:43 2000 Darrell Brunsch + + * ace/OS_String.inl: + + Some platforms (like QNX Neutrino) need strings.h to get + the declaration of strcasecmp. + + * ace/config-qnx-neutrino.h: + + Added a definition of ACE_HAS_STRINGS so strings.h will be + included in OS_String.inl. + +Sun Jun 04 09:40:43 2000 David L. Levine + + * ace/config-cxx-common.h: with __USE_STD_IOSTREAM, added + #define ACE_HAS_STANDARD_CPP_LIBRARY 1. Thanks to + Warren Miller for reporting this [Bug 582]. + +Sat Jun 3 21:18:43 2000 Darrell Brunsch + + * ace/OS.h: + * ace/OS.i: + * ace/OS_Memory.cpp: (added) + * ace/OS_Memory.h: (added) + * ace/OS_Memory.inl: (added) + + Another bit of OS split off. Memory contains all the + malloc, calloc, etc. stuff. + + * ace/Makefile: + * ace/Makefile.am: + * ace/Makefile.bor: + * ace/ace-dll.icc: + * ace/ace-lib.icc: + * ace/ace.icc: + * ace/ace_dll.dsp: + * ace/ace_dll_ce.dsp: + * ace/ace_lib.dsp: + + Needed to add OS_Memory to the makefiles/projects. + + * ace/OS_Dirent.cpp: + * ace/OS_Dirent.h: + * ace/OS_Dirent.inl: + * ace/OS_String.cpp: + * ace/OS_String.h: + * ace/OS_String.inl: + + Over the years, the functions in OS.i have gotten way too + large and complicated to make sense being inlined. But the + problem is too many were complicated only on some platforms, + while being really simple (and inline-able) on others. + + So the question is, how to separate two versions of a function + into the .cpp and .inl files. The latest solution is to do + this. For the simple stuff, keep it in the .inl file, but for + complicated versions, add another method to the class (like + foo_emulation for foo) and call that from the .inl file. + + This gives us the best of both worlds, and should be + the easiest to understand of the possible ways of doing + this. + +Sat Jun 3 18:51:46 2000 Darrell Brunsch + + * bin/msvc_auto_compile.pl: + + Changed the way libraries were detected to remove false + positives when the dsps are in a directory with DLL in + its name. Now it will search for " DLL " or " LIB " + instead of "DLL" or "LIB". + + * bin/fuzz.pl: + + Was giving false positives for TEXT, changed it to search + for "TEXT (" to remove it (so it will not detect "MUTEXTYPE" + like words. + + Also disabled the 80 character check for ACE_RCSID lines, + since they are difficult to reduce in size, since they contain + the CVS ID string. + +Sat Jun 3 17:00:11 2000 Darrell Brunsch + + * bin/fuzz.pl: + + Added two new tests: + - a check to see if a file ends with a newline + - a check to detect use of TCHAR, LPTSTR, LPCTSR, TEXT + ASYS_TEXT, and ASYS_TCHAR + + Changed to look at more files, including those ending with + .cc, .c, .pl, .htm, .html, .hxx, .cxx, .hpp, .idl and .pidl. + + Changed to keep track of the number of errors and warnings + and prints out the totals at the end of the run. Also will + exit with an exit code of 1 if there are any errors. + + Added a new flag, -c, which will tell fuzz.pl to get the list + of files from ARGV instead of from searching or cvs. + + Finally, also added support for the usage of + "FUZZ: disable check_for_xxxx" and + "FUZZ: enable check_for_xxxx" in files so the detection can + be turned off for files where the "offending" usage is needed. + This can be used with: + - check_for_inline + - check_for_math_include + - check_for_tchar + +Fri Jun 02 22:33:32 2000 Irfan Pyarali + + * ace/Priority_Reactor.cpp (init_bucket): Removed extra inline + directive. Thanks to Darrell for pointing this out. + +Fri Jun 2 11:06:33 2000 Darrell Brunsch + + * bin/fuzz.pl: + + Bumped up the levels for the 80 char lines and preprocessor + comment tests. The latter should now not run by default. + +Thu Jun 2 12:30:00 2000 Kirthika Parameswaran + + * ace/Caching_Utility.cpp: Changed the cache entries limit to 0 so + that when the Purge_Percent is 100, all the entries are purged + from the cache. Thanks to Edan Ayal for + reporting this bug and sending in the fix too! + +Thu Jun 1 15:16:26 2000 Ossama Othman + + * ace/config-linux-common.h: + + The change that allowed more than 256 file descriptors to be + opened for non-root processes on Linux only works for more + recent Linux kernels, such as the 2.2.x series. As such, the + default Select Reactor size is now set to 256 for Linux kernels + older than 2.2.0. Thanks to David for pointing out this + limitation. + + * m4/platform.m4 (ACE_DEFAULT_SELECT_REACTOR_SIZE): + + Added test that sets the default Select Reactor size to 256 if + the Linux kernel version is less than 2.2.0. This change is + related to the 256 file descriptor limit described above. + +Thu Jun 01 12:35:00 2000 Nanbor Wang + + * ace/ace_dll.dsp: Fixed typos in ACEMFC configuration. Thanks + to Steve for pointing this out. + +Thu Jun 1 10:08:31 2000 Darrell Brunsch + + * bin/fuzz.pl: + + Was printing out "line test" when doing the preprocessor + comment test. + +Thu Jun 1 08:43:14 2000 Darrell Brunsch + + Fuzz is a script whose purpose is to check through ACE/TAO + files for easy to spot (by a perl script, at least) problems. + + Usage is: + fuzz.pl [-dhm] [-l level] + + -d turn on debugging + -h display this help + -l level set detection level (default = 5) + -m only check locally modified files (uses cvs) + + It currently has checks for these: + + - ACE/ASYS_INLINE in .cpp files (level 2+) + - $ID string in .h/.i/.cpp files (level 2+) + - Bare inline in a .i file (level 2+) + - Inclusion of math.h in a .h/.i/.cpp file (level 3+) + - Check for lines of > 80 chars in .h/.i/.cpp (level 6+) + - Check for use of // in a preprocessor directive (level 3+) + +Wed May 31 16:30:44 2000 Ossama Othman + + * configure.in (AC_REVISION): + + The RCS ID had to be quoted, otherwise the generated configure + script would end up having a mangled version of the RCS ID. + +Wed May 31 16:18:35 2000 Ossama Othman + + * configure.in: + + Fixed the informational message that is displayed when the + configuration integrity check fails so that the shell will no + longer interpret the RCS ID as a variable. This was done by + removing the dollar '$' signs from the RCS ID by using the M4 + translit() built-in. + + (LIBS): + + Removed "-lrt" from the hardcoded list of libraries for OSF/1 + {3,4,5}. The ACE_CHECK_ASYNCH_IO test should be able to detect + this library. + + (AC_REVISION): + + Changed revision string to be the RCS ID. + + (AC_OUTPUT): + + Removed the commented out TAO output files from the list files + the configure script should create. The latest CVS Autoconf + flagged them as problems when generating the configure script. + +Wed May 31 18:08:12 2000 Vishal Kachroo + + * examples/QoS/QosEvent.h: + * examples/QoS/server.cpp: + * examples/QoS/client.cpp: + * examples/QoS/Receiver_QOS_Event_Handler.{cpp,h}: + * examples/QoS/Sender_QOS_Event_Handler.{cpp,h}: + + Fixed the calls to subsribe() and qos () methods that + broke because of changes to ACE QoS API. + +Wed May 31 12:29:12 2000 Darrell Brunsch + + * apps/JAWS2/JAWS/jaws.dsp: + + Added a couple of files that were in the Makefile but not + in this file. + +Wed May 31 14:49:36 2000 Steve Huston + + * ace/Log_Msg.cpp (log): Revert change from Thu May 25 17:39:22 2000. + Add #if !defined (ACE_LACKS_UNIX_SIGNALS) to ACE_Log_Msg_Sig_Guard + ctor which matches a similar check in the dtor. This makes it work + on pSOS same as on other platforms without UNIX-like signals. + + * ace/Signal.i (ACE_Sig_Guard::ACE_Sig_Guard): Added compile-time + check for !defined (ACE_LACKS_UNIX_SIGNALS) to not try to manipulate + the signal mask for platforms that don't do it. Matches an existing + check in the dtor. + +Wed May 31 11:51:46 2000 Darrell Brunsch + + * apps/gperf/src/gperf.dsp: + * apps/gperf/src/gperf_lib.dsp: + + Fixed the output directories to be relative to ".\". Thanks + to Francois Bernier for pointing + this out. + +Wed May 31 10:31:18 2000 Darrell Brunsch + + * examples/ConfigViewer/ConfigurationViewer.dsp: + + Changed the configuration type to "Win32 wxWindows Debug" + instead of "Win32 Debug" (and the same for Release). + This will prevent this project from being picked up by + the msvc_auto_compile.pl, since we do not have wxWindows + installed with the auto builds. + +Wed May 31 10:13:10 2000 Darrell Brunsch + + * examples/Export/export_dll.dsp: + * examples/Export/test.dsp: + + Fixed the relative paths for ace includes and libraries. + +Wed May 31 11:25:34 2000 Irfan Pyarali + + * examples/Reactor/WFMO_Reactor/test_handle_close.cpp: Fixed + signed/unsigned comparison warning. + +Tue May 30 14:23:22 2000 Ossama Othman + + * apps/Gateway/Gateway/gatewayd.cpp: + * examples/ASX/UPIPE_Event_Server/Options.cpp: + * examples/Naming/test_multiple_contexts.cpp: + + Added missing "ace/Log_Msg.h" include. + +Tue May 30 10:41:34 2000 Darrell Brunsch + + * ace/Makefile.bor: + * include/makeinclude/ace_flags.bor: + + ACE_OS_BUILD_DLL and ACE_OS_HAS_DLL were not being set correctly + in Borland. + +Mon May 29 16:49:25 2000 Douglas C. Schmidt + + * ace/OS.i: Changed all 'ACE_Errno_Guard (errno, 0)' to + 'ACE_Errno_Guard (errno)' in the following methods. + + ACE_OS::sema_wait (ACE_sema_t *s, ACE_Time_Value &tv), + ACE_OS::rw_unlock (ACE_rwlock_t *rw), + ACE_OS::rw_trywrlock (ACE_rwlock_t *rw), + ACE_OS::rw_unlock (ACE_rwlock_t *rw) + + Thus, if a critical section of code is guarded using an + ACE_Read_Guard, and errno is set inside, the value is not + overridden with 0 when the section is exited in + ACE_OS::rw_unlock. Thanks to Edan Ayal for + reporting this. + + * ace/Connector.h: Added a new typedef defined as follows: + + typedef ACE_TYPENAME _ACE_PEER_CONNECTOR::PEER_ADDR + ACE_TYPENAME_ACE_PEER_CONNECTOR_PEER_ADDR; + + This fixes some problems on some platforms due to problems with + the typename in a cast expression. Thanks to Ingo Dahm + for reporting this. + + * ace/IO_Cntl_Msg.h: Changed the ACE_IO_Cntl_Cmds enum to be + a typedef u_short so that users could create their own values. + Thanks to vsg@ivl.kiev.ua for this suggestion. + + * ace/ACE.h, + * ace/ACE.h: Make the documentation consistent for both + sockets and "normal" I/O methods! + +Mon May 29 11:36:28 2000 Michael Kircher + + * ace/OS_Dirent.cpp: Fixed the memory allocation in open_dir, + which allocated one char too little. + +Sun May 28 17:26:28 2000 Ossama Othman + + * ace/Timer_Heap_T.cpp: + * ace/Timer_Queue_T.cpp: + * apps/JAWS/server/HTTP_Helpers.cpp: + * apps/JAWS/server/HTTP_Response.cpp: + * apps/drwho/BS_Client.cpp: + * examples/ASX/Event_Server/Event_Server/Options.cpp: + * examples/Logger/simple-server/Logging_Handler.cpp: + * examples/Logger/simple-server/server_loggerd.cpp: + * examples/Mem_Map/IO-tests/test_io.cpp: + * examples/Naming/test_non_existent.cpp: + * examples/Naming/test_writers.cpp: + * examples/Reactor/Dgram/CODgram.cpp: + * examples/Reactor/Dgram/Dgram.cpp: + * examples/Reactor/FIFO/server.cpp: + * examples/Reactor/Misc/pingpong.cpp: + * examples/Reactor/Misc/test_signals_1.cpp: + * examples/Reactor/Misc/test_timer_queue.cpp: + * examples/Reactor/Multicast/server.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.h: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Dgram.h: + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.h: + * examples/Service_Configurator/IPC-tests/server/server_test.cpp: + * examples/Service_Configurator/Misc/Timer_Service.cpp: + * examples/Service_Configurator/Misc/main.cpp: + * examples/System_V_IPC/SV_Message_Queues/TMQ_Server.cpp: + * examples/Threads/process_mutex.cpp: + * examples/Threads/process_semaphore.cpp: + * examples/Threads/tss2.cpp: + * netsvcs/clients/Naming/Client/main.cpp: + * netsvcs/clients/Naming/Dump_Restore/main.cpp: + * performance-tests/Misc/test_naming.cpp: + * performance-tests/UDP/udp_test.cpp: + + Added missing "ace/Log_Msg.h" include. This fixes a series of + compile-time errors with Compaq C++. + +Sat May 27 20:55:24 2000 Ossama Othman : + + * tests/test_config.h: + + Added missing include for "ace/Log_Msg.h." This fixes a + compile-time error from Sun C++ 5.0. + +Sat May 27 20:41:14 2000 Ossama Othman + + * ace/Hash_Map_Manager_T.h: + + Added missing include for "ace/Log_Msg.h." This fixes a + compile-time error on Tru64. + +Sat May 27 17:09:03 2000 David L. Levine + + * docs/ACE-guidelines.html: added const to example + accessor declaration. + +Sat May 27 14:17:35 2000 Ossama Othman + + * apps/JAWS2/HTTPU/parse_url.cpp: + * examples/Web_Crawler/URL_Addr.cpp: + * examples/Reactor/Multicast/client.cpp: + * examples/OS/Process/process.cpp: + * examples/IPC_SAP/ATM_SAP/CPP-client.cpp: + * examples/IPC_SAP/ATM_SAP/CPP-server.cpp: + * examples/DLL/Newsweek.cpp: + * examples/DLL/Today.cpp: + * examples/DLL/test_dll.cpp: + * websvcs/tests/Test_URL_Addr.cpp: + + Added missing `ace/Log_Msg.h' include. + + * examples/Web_Crawler/URL_Addr.cpp (ACE_URL_Addr): + + Fixed warning about missing base class initialization in copy + constructor base member initializer list. + + (~ACE_URL_Addr, addr_to_string): + + Changed use of "LPTSTR" to "ACE_TCHAR *". This fixes an error + on UNIX builds. + +Sat May 27 14:59:08 2000 Douglas C. Schmidt + + * tests/Signal_Test.cpp (worker_parent): Yet another fix of this... + Now we add an ACE_static_cast to long, as well as doing the %ld! + Thanks to Yamuna for fixing this! + + * ace/SOCK_Stream.h: Improved the documentation of recv_n() et al. + Thanks to Sami Aario for this + suggestion. + +Sat May 27 01:07:01 2000 Darrell Brunsch + + * ace/config-win32-common.h: + + Added a semicolon to the definitions of + ACE_EXPORT_SINGLETON_DECLARE + ACE_IMPORT_SINGLETON_DECLARE + + Since the default definition for this is nothing, the semicolon is + better off in the definitions themselves. Otherwise, one needs to + add a semicolon after the use of these macros, which can cause + warnings when the macro expands to nothing. + +Fri May 26 20:00:22 2000 Darrell Brunsch + + * ace/OS_String.inl (strcasecmp, strncasecmp): + + I have no idea how this worked before, but in these two functions + we were using _stricmp/_strnicmp for Win32. Borland doesn't define + these by default, instead they use stricmp/strnicmp. So instead + of trying to figure out how this all worked before, I just added + an #elif for __BORLAND__ and called the stricmp/strnicmp. + +Fri May 26 19:26:34 2000 Ossama Othman + + * netsvcs/clients/Logger/direct_logging.cpp: + + Added missing include of `ace/Log_Msg.h'. + +Fri May 26 18:14:47 2000 Darrell Brunsch + + * ace/OS_String.inl: + + Moved the ACE_OS_String::to_lower () methods up in the file, since + they are used in other inlined functions. + +Fri May 26 16:13:08 2000 Darrell Brunsch + + * ace/OS.cpp: + * ace/OS.h: + * ace/OS_String.cpp: + * ace/OS_String.h: + + Moved the strptime back to OS.h, because it is more a time + thing than a string thing. + +Fri May 26 15:58:52 2000 Ossama Othman + + * ace/Select_Reactor_Base.cpp (open): + + Re-enabled the change that added ability to set the handle limit + to a value greater than FD_SETSIZE on platforms that support + this functionality. This was made possible by Steve Huston's + change to the ACE::max_handles() method described several + ChangeLog entries below. + +Fri May 26 14:27:02 2000 Darrell Brunsch + + * ace/OS_String.inl: + + Changed the strncasecmp methods to not use ssize_t inside of + them. This required a reworking of the loop, since it + depended on negative values. This was needed since ssize_t + is more difficult to get defined than size_t, so it seemed + less obtrusive to do it this way. + +Fri May 26 12:30:56 2000 Ossama Othman + + * ace/TLI_Connector.h: + * ace/TLI_Connector.cpp: + + Moved include of ace/Log_Msg.h to the header file. + TLI_Connector.i utilizes some of the ACE_Log_Msg macros. + +Fri May 26 14:25:31 2000 Jeff Parsons + + * ace/ace_dll.dsp: + Added OS_String.h to project for convenience. + +Fri May 26 12:23:55 2000 Ossama Othman + + * ace/TLI_Acceptor.cpp: + * ace/TLI_Connector.cpp: + + *sigh* These files also needed to include "ace/Log_Msg.h." + +Fri May 26 12:13:26 2000 Ossama Othman + + * ace/Singleton.cpp: + * ace/TLI.cpp: + + These files needed to explicitly include "ace/Log_Msg.h," too. + +Fri May 26 12:04:39 2000 Ossama Othman + + * ace/ARGV.cpp: + * ace/Capabilities.cpp: + * ace/Dump.cpp: + * ace/Filecache.cpp: + * ace/Local_Tokens.h: + * ace/Log_Msg.cpp: + * ace/Malloc.h: + * ace/Map_Manager.h: + * ace/Memory_Pool.cpp: + * ace/Name_Proxy.cpp: + * ace/Process.cpp: + * ace/Process_Manager.cpp: + * ace/QoS_Manager.cpp: + * ace/QoS_Session_Factory.cpp: + * ace/QoS_Session_Impl.cpp: + * ace/Remote_Name_Space.cpp: + * ace/SOCK_Acceptor.cpp: + * ace/SOCK_Dgram.cpp: + * ace/Select_Reactor_Base.cpp: + * ace/Service_Repository.cpp: + * ace/Signal.cpp: + * ace/Stats.h: + * ace/Synch.cpp: + * ace/TP_Reactor.h: + * ace/Thread_Manager.h: + * ace/Token.cpp: + + These files needed to explicitly include "ace/Log_Msg.h," too. + +Fri May 26 11:29:44 2000 Ossama Othman + + * ace/ACE.cpp: + * ace/Malloc.h: + + Include "ace/Log_Msg.h" to pull in the appropriate definition of + the ACE llessogging macros. This fixes a problem on Solaris. + +Thu May 25 19:39:59 2000 Ossama Othman + + * configure.in: + + Re-enabled test for ACE_HAS_SIGNAL_SAFE_OS_CALLS. The fixes to + the ACE_OSCALL* macros below make it possible to enable this + feature. + + * ace/config-all.h (ACE_OSCALL, ACE_OSCALL_RETURN): + + Removed call to "ACE_LOG_MSG->restart()" from these macros in + the "ACE_HAS_SIGNAL_SAFE_OS_CALLS" case. + + * ace/OS.h: + + Remove inclusion of "ace/Log_Msg.h" when the + ACE_ONLY_LATEST_AND_GREATEST preprocessor macro is defined. + This reduces the number of extraneous header interdependencies + in much of the ACE source files. + + Added a forward declaration for ACE_Log_Msg to compensate for + the declaration that was initially pulled in by "ace/Log_Msg.h" + It was only needed for "friend" declaration inside the + ACE_OS_Object_Manager class. + + * ace/Addr.cpp: + * ace/Addr.h: + * ace/Auto_Ptr.h: + * ace/DEV_Addr.cpp: + * ace/DEV_Connector.h: + * ace/DEV_Connector.i: + * ace/DEV_IO.cpp: + * ace/DLL.cpp: + * ace/FIFO.cpp: + * ace/FIFO_Recv.cpp: + * ace/FIFO_Recv_Msg.cpp: + * ace/FIFO_Send.cpp: + * ace/FIFO_Send_Msg.cpp: + * ace/FILE_Addr.cpp: + * ace/FILE_Connector.h: + * ace/FILE_IO.cpp: + * ace/Get_Opt.cpp: + * ace/Handle_Set.cpp: + * ace/INET_Addr.cpp: + * ace/IO_SAP.cpp: + * ace/IPC_SAP.cpp: + * ace/LSOCK.cpp: + * ace/LSOCK_Acceptor.cpp: + * ace/LSOCK_CODgram.cpp: + * ace/LSOCK_Connector.cpp: + * ace/LSOCK_Dgram.cpp: + * ace/LSOCK_Stream.cpp: + * ace/Log_Record.cpp: + * ace/MEM_Addr.cpp: + * ace/Makefile: + * ace/Mem_Map.cpp: + * ace/Name_Request_Reply.cpp: + * ace/OS.cpp: + * ace/Pipe.cpp: + * ace/SOCK.cpp: + * ace/SOCK_CODgram.cpp: + * ace/SOCK_Connector.cpp: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/SOCK_Dgram_Mcast_QoS.cpp: + * ace/SPIPE_Acceptor.cpp: + * ace/SPIPE_Connector.cpp: + * ace/SV_Message_Queue.cpp: + * ace/SV_Semaphore_Complex.cpp: + * ace/SV_Semaphore_Simple.cpp: + * ace/SV_Shared_Memory.cpp: + * ace/Time_Request_Reply.cpp: + * ace/Trace.cpp: + * ace/Typed_SV_Message_Queue.cpp: + * ace/UNIX_Addr.h: + * apps/Gateway/Peer/Options.cpp: + * apps/JAWS/server/Parse_Headers.cpp: + * apps/drwho/Binary_Search.cpp: + * apps/drwho/CM_Client.cpp: + * apps/drwho/CM_Server.cpp: + * apps/drwho/Hash_Table.cpp: + * apps/drwho/Multicast_Manager.cpp: + * apps/drwho/Options.cpp: + * apps/drwho/PMC_All.cpp: + * apps/drwho/PMC_Flo.cpp: + * apps/drwho/PMC_Ruser.cpp: + * apps/drwho/PMC_Usr.cpp: + * apps/drwho/PMS_All.cpp: + * apps/drwho/PMS_Flo.cpp: + * apps/drwho/PMS_Ruser.cpp: + * apps/drwho/PMS_Usr.cpp: + * apps/drwho/PM_Client.cpp: + * apps/drwho/Protocol_Manager.cpp: + * apps/drwho/Protocol_Record.cpp: + * apps/drwho/SMR_Client.cpp: + * apps/drwho/SMR_Server.cpp: + * apps/drwho/SM_Client.cpp: + * apps/drwho/SM_Server.cpp: + * apps/drwho/Search_Struct.cpp: + * apps/drwho/Single_Lookup.cpp: + * apps/drwho/client.cpp: + * apps/drwho/server.cpp: + * examples/IOStream/client/iostream_client.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-client.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-server.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-test.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-poll.cpp: + * examples/IPC_SAP/SPIPE_SAP/NPClient.cpp: + * examples/IPC_SAP/SPIPE_SAP/NPServer.cpp: + * examples/IPC_SAP/SPIPE_SAP/producer_read.cpp: + * examples/IPC_SAP/TLI_SAP/CPP-ATM-client.cpp: + * examples/IPC_SAP/TLI_SAP/CPP-ATM-server.cpp: + * examples/IPC_SAP/TLI_SAP/CPP-client.cpp: + * examples/IPC_SAP/TLI_SAP/CPP-server.cpp: + * examples/IPC_SAP/TLI_SAP/db-client.cpp: + * examples/IPC_SAP/TLI_SAP/ftp-client.cpp: + * examples/Log_Msg/test_callback.cpp: + * examples/Log_Msg/test_log_msg.cpp: + * examples/Log_Msg/test_ostream.cpp: + * examples/Logger/client/logging_app.cpp: + * examples/Mem_Map/IO-tests/IO_Test.cpp: + * examples/Mem_Map/file-reverse/file-reverse.cpp: + * examples/Misc/test_get_opt.cpp: + * examples/Misc/test_profile_timer.cpp: + * examples/Misc/test_sstring.cpp: + * examples/Reactor/FIFO/client.cpp: + * examples/Reactor/Misc/test_early_timeouts.cpp: + * examples/Reactor/Misc/test_time_value.cpp: + * examples/Service_Configurator/IPC-tests/client/broadcast_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_fifo_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_spipe_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_dgram_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_service_directory_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_stream_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_thr_stream_client_test.cpp: + * examples/Shared_Malloc/Options.cpp: + * examples/Shared_Memory/test_MM.cpp: + * examples/Shared_Memory/test_SV.cpp: + * examples/System_V_IPC/SV_Message_Queues/TMQ_Client.cpp: + * netsvcs/clients/Logger/indirect_logging.cpp: + * netsvcs/lib/Logging_Strategy.cpp: + * performance-tests/Misc/basic_perf.cpp: + + Include "ace/Log_Msg.h" to pull in the appropriate definition of + the ACE logging macros. + +Fri May 26 09:16:21 2000 Darrell Brunsch + + * ace/OS_Dirent.cpp: + + I shall not put ACE_INLINE's in a .cpp file. + I shall not put ACE_INLINE's in a .cpp file. + I shall not put ACE_INLINE's in a .cpp file. + I shall not put ACE_INLINE's in a .cpp file. + I shall not put ACE_INLINE's in a .cpp file. + I shall not put ACE_INLINE's in a .cpp file. + I shall not put ACE_INLINE's in a .cpp file. + I shall not put ACE_INLINE's in a .cpp file. + I shall not put ACE_INLINE's in a .cpp file. + I shall not put ACE_INLINE's in a .cpp file. + + :-) + +Thu May 25 20:23:45 2000 Darrell Brunsch + + * bin/Process_Win32.pm: + + The timed_wait wasn't returning the correct value if the + server actually timed out. + +Thu May 25 18:21:41 2000 Steve Huston + + * ace/ACE.cpp (max_handles): If an ACE_LACKS_RLIMIT platform, let + it try sysconf or FD_SETSIZE instead of always getting ENOTSUP. + +Thu May 25 17:39:22 2000 Steve Huston + + * ace/Event_Handler.cpp (register_stdin_handler): On pSOS, do + stdin using another thread (like Win32) because ACE_STDIN is not + a handle that select() can demux on. It only does sockets. + + * ace/Log_Msg.cpp (log): Don't do a ACE_Log_Msg_Sig_Guard on pSOS. + It doesn't have signals to block out anyway. + +Thu May 25 16:57:16 2000 Steve Huston + + * ace/Select_Reactor_T.cpp (handle_error, check_handles): For pSOS, + select() sets errno to EBADS for invalid socket handle. And, we + need to use select() (not fstat) to weed out the bad ones. + +Thu May 25 15:19:14 2000 Darrell Brunsch + + * ace/OS_String.cpp: + + Added an include for stddef.h, since we use size_t here. Also + moved the OS_Export.h include after the #pragma once stuff. + +Thu May 25 12:26:36 2000 Joe Hoffert + + * examples/IPC_SAP/ATM_SAP/Makefile: + Removed libraries that FORE used to need. + +Thu May 25 09:07:16 2000 Carlos O'Ryan + + * ace/OS_String.cpp: + Removed a few ACE_INLINEs. + +Wed May 24 20:27:26 2000 Ossama Othman + + * ace/OS_String.h: + + Changed "u_long" to "unsigned long." The u_long typedef wasn't + being pulled in, so just use the basic type. This avoids having + to pull in a header, and fixes a compile time problem. + +Wed May 24 20:18:59 2000 Ossama Othman + + * ace/Select_Reactor_Base.cpp (open): + + Temporarily backed out change that added ability to set handle + limit to value greater than FD_SETSIZE. It breaks platforms + that don't support getrlimit(). + +Wed May 24 18:56:16 2000 Darrell Brunsch : + + * ace/OS_Export.h: (added) + + In preparation for an eventual splitting up of the ACE DLLs, + I'm starting to split up the Export macros also. OS_Export will + be used for the lowest level OS library. + + * ace/Makefile: + * ace/Makefile.am: + * ace/Makefile.bor: + * ace/ace-dll.icc: + * ace/ace-lib.icc: + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + * ace/OS.cpp: + * ace/OS.h: + * ace/OS.i: + * ace/OS_String.cpp: (added) + * ace/OS_String.h: (added) + * ace/OS_String.inl: (added) + + Moved the string methods of ACE_OS to ACE_OS_String. + + * ace/OS_Dirent.cpp: + * ace/OS_Dirent.h: + * ace/OS_Dirent.inl: + + Separated the Win32 versions of some of the methods into the + cpp file. The Win32 versions were a bit too complicated to make + sense having inlined. + + Also changed to use ACE_OS_Export. + +Wed May 24 10:22:18 2000 Ossama Othman + + * THANKS: + + Added Håkon Innerdal to the list of + contributors. + + * ace/config-linux-common.h (ACE_DEFAULT_SELECT_REACTOR_SIZE): + + Commented out the definition of this macro. Its setting + unnecessarily limited the default size of the Select_Reactor to + 256 file descriptors. `ace/OS.h' correctly sets the default + size to FD_SETSIZE. Thanks to Håkon Innerdal + for pointing this out. + + * ace/Select_Reactor_Base.cpp (open): + + Do not check if the desired size of the repository, i.e. the + maximum number of file descriptors, is greater than FD_SETSIZE. + The same check is effectively done in the call to + ACE::set_handle_limits(). The redundant check also prevented + the Reactor from supporting file descriptors numbering more than + FD_SETSIZE on platforms that support them (e.g. via + setrlimit(RLIMIT_NOFILE, ...)). Thanks to Håkon Innerdal + for reporting the problem, and for providing + a fix. + + * m4/platform.m4 (ACE_DEFAULT_SELECT_REACTOR_SIZE): + + No longer set the default size to 256 file descriptors. + `ace/OS.h' correctly set it to FD_SETSIZE. + +Wed May 24 10:08:37 2000 Joe Hoffert + + * THANKS: + Added Pedro Brandao name for his additions + to support ATM for Linux. + +Wed May 24 10:01:26 2000 Joe Hoffert + + * ace/ATM_Acceptor.{h,i,cpp} + * ace/ATM_Addr.{h,i,cpp} + * ace/ATM_Connector.{h,i,cpp} + * ace/ATM_Params.h + * ace/ATM_QoS.{h,i,cpp} + * ace/ATM_Stream.cpp: + Added support for ATM on Linux. Thanks to Pedro Brandao + for providing this. + + * ace/TLI.{h,i,cpp} + * ace/TLI_Connector.{h,i,cpp} + * ace/TLI_Stream.{h,i,cpp}: + Changed hard-coded "inline" to "ACE_INLINE" + +Wed May 24 08:10:21 2000 Steve Huston + + * ace/WFMO_Reactor.h: Wrapped the !WinSock2 defs in defined(ACE_WIN32) + to prevent compile errors on non-win32 platforms. It may be better to + wrap the whole file in #if defined (ACE_WIN32), but this will solve + the immediate problem. + +Tue May 23 20:13:52 2000 Irfan Pyarali + + * ace/WFMO_Reactor.h: Moved the definition of WSANETWORKEVENTS to + before its use. Thanks to Craig Perras + for reporting this. + +Tue May 23 17:59:06 2000 Luther J Baker + + * ACE_wrappers/pace/pace: + Source files added. + Changes to pace subdirectory will be noted in + ACE_wrappers/pace/ChangeLog. + +Tue May 23 17:55:17 2000 Steve Huston + + * ace/Log_Msg.cpp (log): For %t on MVS, use the old ACE 5.0 cast. + The pthread_t is a struct on MVS. + +Tue May 23 17:21:37 2000 Steve Huston + + * include/makeinclude/platform_psos_diab_ppc.GNU: Add -ei1676 to + CCFLAGS to turn off the gazillion messages about not overriding + pure virtual functions in derived classes. Thanks to Matt Emerson + for this. + +Tue May 23 16:37:27 2000 Luther J Baker + + * ACE_wrappers/pace directories added to ACE_wrappers: + + ACE_wrappers/pace/docs + ACE_wrappers/pace/examples + ACE_wrappers/pace/pace + ACE_wrappers/pace/pace++ + ACE_wrappers/pace/tests + +Mon May 22 15:26:42 2000 Steve Huston + + * ace/Synch.(cpp h i): ACE_Process_Mutex, ACE_Process_Semaphore - + changed to using ACE_Mutex and ACE_Semaphore for the underlying + synch. mechanism (same as Win32 and POSIX semaphores). Process + and thread are the same thing (synch-wise) on pSOS, and the + underlying mechanisms Do The Right Thing. + +Wed May 10 16:47:31 2000 Steve Huston + (actually committed on Tue May 23) + * ace/OS.(h i): pSOS changes: + - Use ACE_OSCALL_RETURN (ACE_ADAPT_RETVAL ()) rather than using + return func() == 0 ? 0 : -1 to avoid losing errno values. + - ACE_OS::thr_getspecific, copy existing code from the TSS-emulated + section to the native TSD-using section. + - Use u_long as ACE_condattr_t and set its flags in + ACE_OS::condattr_init rather than in ACE_OS::cond_init to + avoid strange return errors in other parts of ACE that use + ACE_OS::condattr_init and expect it to work. + +Mon May 22 15:25:33 2000 Nanbor Wang + + * ace/OS.{h,cpp} (ACE_Thread_Exit): + * ace/Thread_Manager.cpp (~ACE_Thread_Exit): Moved the reset of + ACE_Thread_Exit::is_constructed_ from the Thread_Exit's + destructor to ACE_OS_Object_Manager::fini (). Otherwise, the + singleton ACE_Thread_Exit may get created multiple times. + Thanks to Eric Yee for reporting the + problem. + + Notice that ACE 5.1.1, 5.1.2 and 5.1.3 all have the same problem + of creating TSS keys unnecessarily without cleaning them up. + This will most likely cause a long running server process + creating a lot of threads to crash eventually (at least on NT.) + Therefore, you should not use these versions in a production + environment. + +Mon May 22 11:23:19 2000 Pradeep Gore + + * ACE version 5.1.3 released. + +Sun May 21 17:11:12 2000 Darrell Brunsch + + * ace/Configuration.cpp: + + Fixed some ACE_USES_WCHAR problems. + +Sun May 21 12:29:11 2000 Carlos O'Ryan + + * bin/run_all_list.pm: + Removed the Connection_Purging test from the single threaded + builds, the test cannot work in that configuration. + +Sun May 21 11:39:11 2000 Douglas C. Schmidt + + * tests/Signal_Test.cpp (worker_parent): My earlier fix on May 18th, 2000 + was incorrect. The right fix is to make the format specifier be + %ld, rather than cast the pid_t to (int). + +Sat May 20 18:34:05 2000 Ossama Othman + + * configure.in (ACE_HAS_BROKEN_T_ERROR): + + Fixed the test that checks if t_error() correctly accepts a + "const char *" parameter. This should fix a problem that was + occuring on Solaris. + +Sat May 20 19:47:52 2000 Nanbor Wang + + * ace/Memory_Pool.cpp: Added the seh_selector method for + ACE_Pagefile_Memory_Pool so it can be used with ACE_Malloc. + Thanks to Charlie Duke for pointing this + out. + +Fri May 19 16:19:11 2000 Carlos O'Ryan + + * bin/run_all_list.pm: + Removed the InterOp-Naming test from the Minimum CORBA builds. + +Thu May 18 20:40:37 2000 Carlos O'Ryan + + * tests/Makefile: + More tweaking to get CDR_Array_Test *not* to compile on LynxOS + but to compile in other platforms. + +Thu May 18 15:59:10 2000 Carlos O'Ryan + + * tests/CDR_File_Test.cpp: + Fixed so it works on platforms that lack native 64 bit types. + +Thu May 18 13:56:49 2000 Jeff Parsons + + * ace/Configuration.cpp: + Removed an unused variable from import_config(). + +Thu May 18 13:28:41 2000 Carlos O'Ryan + + * tests/Makefile: + More tweaking to disable the CDR_Array_Test on LynxOS, the 3.0 + version of Lynx has a newer g++ compiler, but it is still + broken. + +Thu May 18 12:48:54 2000 Douglas C. Schmidt + + * tests/Signal_Test.cpp (worker_parent): Added a cast of + pid_t to int to make G++ happy. Thanks to David Levine for + reporting this. + +Thu May 18 10:37:30 2000 Darrell Brunsch + + * ace/OS_Dirent.h: + + It looks like LynxOS needed sys/types.h to be included + before dirent.h. + +Thu May 18 10:29:49 2000 Carlos O'Ryan + + * tests/Makefile: + Disable the CDR_Array_Test with older versions of g++ because + the test breaks the templates there. + + * tests/CDR_File_Test.cpp: + Use ULongLong instead of LongLong because the former is better + supported. + +Thu May 18 10:11:20 2000 Darrell Brunsch + + * ace/streams.h: + + For !ACE_HAS_STANDARD_CPP_LIBRARY, iomanip wasn't being included + (except for MSVC). So I moved it outside of the _MSC_VER block + so platforms like IRIX will now include it. + +Thu May 18 09:49:12 2000 Jeff Parsons + + * ace/Configuration.h: + * ace/Configuration.cpp: + Chris Hafey's bug fixes and + enhancements to ACE_Configuration. Set_string_value + and set_integer_value now work when the value already + exists, memory leaks have been plugged, and a new + function added called find_value, which checks for the + existence in a section of a field by name, and returns + the data type stored there if it is found. + +Wed May 17 20:37:49 2000 Carlos O'Ryan + + * tests/Makefile.am: + Add missing CDR_File_Test_SOURCES and CDR_Array_Test_SOURCES + definitions. + +Wed May 17 20:25:21 2000 Darrell Brunsch + + * ace/OS.h: + * ace/config-all.h: + + Needed to move another define from OS.h to config-all + (the ENOSYS to EFAULT define) since Borland doesn't + have ENOSYS defined. + +Wed May 17 20:02:25 2000 Darrell Brunsch + + * ace/Dirent.h: + * ace/Dirent.i: + * ace/Makefile: + * ace/Makefile.am: + * ace/Makefile.bor: + * ace/OS.h: + * ace/OS.i: + * ace/OS_Dirent.cpp: (added) + * ace/OS_Dirent.h: (added) + * ace/OS_Dirent.inl: (added) + * ace/ace-dll.icc: + * ace/ace-lib.icc: + * ace/ace.icc: + * ace/ace_dll.dsp: + * ace/ace_dll_ce.dsp: + * ace/ace_lib.dsp: + * ace/config-all.h: + + Ladies and Gentlemen, you are witnessing the beginning of the + end of ACE_OS as we know it. That's right, I am taking on the + bazillion lines of stuff in OS.*, and separating it into bite + size pieces. + + So this is the first step, kind of a test of concept. I took + the dirent methods and separated them out into a separate class + (in its own files), ACE_OS_Dirent. So now if one only wishes + to use the dirent static methods, one only has to include + OS_Dirent.h. + + But what about all the code that thinks it is still in ACE_OS? + Glad you asked, since ACE_OS now inherits from ACE_OS_Dirent, + meaning using ACE_OS::opendir () and family still works. + + So eventually everything will be moved out, and ACE_OS will + just be a shell of a class that inherits from the ACE_OS_* + classes (with maybe an ACE_ONLY_LATEST_AND_GREATEST thrown + in here and there). + + Let's just hope that this works.... + +Wed May 17 19:01:52 2000 Carlos O'Ryan + + * bin/auto_compile: + Fixed minor typos in the -smart_proxies option. + + * bin/run_all_list.pm: + The path for one of the tests (InterOp-Naming) was broken, my + fault. + +Wed May 17 16:20:30 2000 Darrell Brunsch + + * ace/Future.cpp: + * ace/Future.h: + * ace/Future_Set.cpp: + * ace/Future_Set.h: + * ace/LOCK_SOCK_Acceptor.cpp: + * ace/config-pharlap.h: + + While searching for the cause of a warning being undisabled, + I noticed there were several places where we were using + #include /**/ "ace/some-header.h". The #include /**/ is only + for system headers, so it doesn't need to be used with ACE + headers. + + * ace/streams.h: + + If ACE_HAS_STANDARD_CPP_LIBRARY is defined, then we include + the .h-less versions of the header files. This is all fine + and good, except that these headers in MSVC will disable some + warnings with #pragma warning, but then set them back to + default at the end. So if we disabled a warning in the config + file, it would get reenabled because of these headers. + + So I added a #pragma warning(push/pop) pair around the includes + in this file to localize the warning settings. + +Wed May 17 14:32:50 2000 Carlos O'Ryan + + * tests/CDR_Array_Test.cpp: + Fixed warnings in KAI-3.4 (and other EDG based compilers), it + makes no sense to return 'const int' + +Wed May 17 12:03:41 2000 Darrell Brunsch + + * Msg_WFMO_Reactor.cpp: + * Msg_WFMO_Reactor.h: + * Msg_WFMO_Reactor.i: + * ace/README: + * ace/config-WinCE.h: + * ace/config-pharlap.h: + + Added an ACE_LACKS_MSG_WFMO macro that is used when ACE_WIN32 + is defined but MsgWaitForMultipleOjbects isn't. This replaces + the checking for Pharlap and Windows CE. Thanks to David Hauck + for this suggestion. + +Wed May 17 13:34:22 2000 Steve Huston + + * tests/Thread_Pool_Reactor_Test.cpp: Added a little more diagnostic + info that was useful in diagnosing a previous problem in the + ACE_TP_Reactor. + +Wed May 17 12:48:24 2000 Carlos O'Ryan + + * tests/CDR_File_Test.cpp: + More workarounds for compiler bugs, this time egcs-1.1.1 is at + fault. + +Wed May 17 10:58:23 2000 Steve Huston + + * ace/WFMO_Reactor.(cpp h): Changed complex_dispatch_handler() and + upcall() to redo upcall(s) when the handler returns 1. This adds + ACE_WFMO_Reactor functionality equivalent to the ACE_Select_Reactor + family. To do this, the upcall() function's signature was changed + to accept a WSANETWORKEVENTS structure by reference. upcall() + updates the lNetworkEvents flags to indicate which requested a + callback. If the handler is not marked for deletion, the upcall + is done again. To properly support this, the call to + WSAEnumNetworkEvents is done once in complex_dispatch_handler and + the events flags are updated on each call to upcall(). + Thanks to Irfan Pyarali for his guidance + in designing this change. + +Wed May 17 10:54:05 2000 Jeff Parsons + + * examples/ConfigViewer/ConfigTreeCtrl.cpp: + * examples/ConfigViewer/ConfigTreeCtrl.h: + * examples/ConfigViewer/ConfigurationViewer.cpp: + * examples/ConfigViewer/ConfigurationViewer.dsp: + * examples/ConfigViewer/ConfigurationViewer.dsw: + * examples/ConfigViewer/ConfigurationViewer.rc: + * examples/ConfigViewer/MainFrame.cpp: + * examples/ConfigViewer/MainFrame.h: + * examples/ConfigViewer/README: + * examples/ConfigViewer/ValueDlg.cpp: + * examples/ConfigViewer/ValueDlg.h: + * examples/ConfigViewer/ValueListCtrl.cpp: + * examples/ConfigViewer/ValueListCtrl.h: + * examples/ConfigViewer/mondrian.ico: + * examples/ConfigViewer/mondrian.xpm: + * examples/ConfigViewer/stdafx.cpp: + * examples/ConfigViewer/stdafx.h: + Chris Hafey's ACE_Configuration viewer/editor for vxWindows. + For details, see the README file or email Chris at + . + +Wed May 17 09:02:45 2000 Carlos O'Ryan + + * tests/CDR_Array_Test.cpp: + Workaround problems with old versions of g++, in some cases it + gets confused with sizeof(T) inside a template. + +Tue May 16 12:01:56 2000 Darrell Brunsch + + * ace/Msg_WFMO_Reactor.cpp: + * ace/Msg_WFMO_Reactor.h: + + Applied some patches that Bruce Trask + sent for building ACE on Pharlap. + + * ace/OS.cpp: + * ace/OS.h: + * ace/Process.cpp: + * ace/ace_wchar.h: + + GetEnvironmentStrings is the only Windows API function that I've + seen that doesn't follow the same FuncA/FuncW naming that the + rest do. So I added a wrapper in ACE_OS (getenvstrings) and it + does the appropriate magic in the .cpp file to get this to work. + + This only showed up when UNICODE was defined but ACE_USES_WCHAR + wasn't. + + * ace/Process.cpp: + + Removed a comment that stated that the WinCE version of + inherit_environment () was in Process.i. Actually, there isn't + a version for CE at all. + + * tests/CDR_Array_Test.cpp: + + Updated the test so it works with ACE_USES_WCHAR. + +Tue May 16 10:02:33 2000 Carlos O'Ryan + + * tests/CDR_File_Test.cpp: + The test was removing the file even when the user requested not + to do so. + +Tue May 16 09:53:19 2000 Carlos O'Ryan + + * ace/CDR_Stream.i: + Change swap_8 again, this time it compiles with -O2 and -O3, + using the assembly instructions for full performance. + + * tests/CDR_Array_Test.cpp: + Fixed several problems reported during the last night builds. + Mostly template quirks and the ever annoying problems of Sun/CC + 4.2 with static_casts + + * tests/CDR_File_Test.cpp: + Don't use ?: operators when the arguments are of different + types. + +Mon May 15 21:00:31 2000 Carlos O'Ryan + + * ace/CDR_Stream.i: + The swap_8 operator was not working when debugging was + disabled. + +Mon May 15 16:06:01 2000 Priyanka Gontla + + * ace/CORBA_macros.h: + + Added Support for Exception::_downcast () by modifying _narrow + to _downcast (). Thanks to William Horn . + + +Mon May 15 15:49:37 2000 Carlos O'Ryan + + * bin/run_all_list.pm: + Add Connection_Purging to the list. + +Mon May 15 15:23:27 2000 Ossama Othman + + The following are primarily consistency related updates. + + * ace/LSOCK.i (ACE_LSOCK): + + Initialize "aux_handle_" member to ACE_INVALID_HANDLE in the + base member initializer list. + + * ace/Thread_Manager.i (ACE_At_Thread_Exit): + + Initialize "next_" member to 0 in the base member initializer + list. + + (ACE_Thread_Descriptor_Base): + + Initialize "next_" and "prev_" members to 0 in the base member + initializer list. + +Mon May 15 15:14:41 2000 Carlos O'Ryan + + * ace/CDR_Stream.h: + * ace/CDR_Stream.i: + * ace/CDR_Stream.cpp: + Cristian Ferretti has contributed + a number of optimizations to the byte swapping code for CDR + streams. The optimizations include loop unrolling for 32-bit + and 64-bit architectures, use of especial assembly instructions + for x86-based platforms and use of bit operations (instead of + memory manipulation) for other processors. + + * tests/Makefile: + * tests/Makefile.am: + * tests/Makefile.bor: + * tests/run_tests.bat: + * tests/run_tests.lst: + * tests/run_tests.vxworks: + * tests/tests.dsw: + * tests/CDR_Array_Test.cpp: + * tests/CDR_Array_Test.dsp: + * tests/CDR_Array_Test.icc: + New test to verify that the array operations in the CDR classes + actually work, this is specially critical because the new + versions unroll loop, perform assembly instructions that work + best when the alignment is right, etc. + + * tests/CDR_File_Test.cpp: + The test was extended. Now we can save a file in one platform + and load it (manually) in another platform, to verify that byte + swapping actually works. + Both tests were contributed by Cristian Ferretti + , which is good because all this + voodoo programming needs testing. + The changes were tested using PA-RISC, Alphas, Sparcs and + finally Pentiums in various forms and using several compilers. + +Mon May 15 14:01:23 2000 Ossama Othman + + * ace/OS.h: + + QNX Neutrino has the header, so include it. + + * ace/config-qnx-neutrino.h: + + QNX supports the {get,set}rlimit() functions. ACE's autoconf + support detected this support. + +Mon May 15 12:32:05 2000 Ossama Othman + + * ace/Log_Record.cpp (print): + + Added a "%s" format specifier to the fprintf() call. This was + needed to allow strings containing percent signs '%' to be + printed. This problem was inadvertently introduced during some + UNICODE related updates. The "%s" format specifier can handle + UNICODE strings. Thanks to Edan Ayal for + reporting this problem and providing a fix. + +Mon May 15 10:25:38 2000 Darrell Brunsch + + * bin/create_vt_dsps.pl: + + I got tired of creating the version tests for the ACE tests, + so why not script it? + + * tests/version_tests/ACE_Init_Test.dsp: (removed) + + This test is tricky. It uses MFC, which gets complicated when + also using the static version of ACE. Since this is the only + test that does this, I just disabled it in the create_vt_dsps.pl. + + * tests/version_tests/Reactor_Exception_Test.dsp: (removed) + * tests/version_tests/Sigset_Op_Test.dsp: (removed) + + These two were named differently than their parents in + tests/, so they have been renamed. + + * tests/version_tests/Atomic_Op_Test.dsp: + * tests/version_tests/Auto_IncDec_Test.dsp: + * tests/version_tests/Barrier_Test.dsp: + * tests/version_tests/Basic_Types_Test.dsp: + * tests/version_tests/Buffer_Stream_Test.dsp: + * tests/version_tests/CDR_File_Test.dsp: + * tests/version_tests/CDR_Test.dsp: + * tests/version_tests/Cache_Map_Manager_Test.dsp: + * tests/version_tests/Cached_Accept_Conn_Test.dsp: + * tests/version_tests/Cached_Conn_Test.dsp: + * tests/version_tests/Capabilities_Test.dsp: + * tests/version_tests/Collection_Test.dsp: + * tests/version_tests/Conn_Test.dsp: + * tests/version_tests/DLL_Test.dsp: + * tests/version_tests/DLList_Test.dsp: + * tests/version_tests/Dynamic_Priority_Test.dsp: + * tests/version_tests/Enum_Interfaces_Test.dsp: + * tests/version_tests/Env_Value_Test.dsp: + * tests/version_tests/Future_Set_Test.dsp: + * tests/version_tests/Future_Test.dsp: + * tests/version_tests/Handle_Set_Test.dsp: + * tests/version_tests/Hash_Map_Bucket_Iterator_Test.dsp: + * tests/version_tests/Hash_Map_Manager_Test.dsp: + * tests/version_tests/High_Res_Timer_Test.dsp: + * tests/version_tests/IOStream_Test.dsp: + * tests/version_tests/Lazy_Map_Manager_Test.dsp: + * tests/version_tests/MM_Shared_Memory_Test.dsp: + * tests/version_tests/MT_Reactor_Timer_Test.dsp: + * tests/version_tests/MT_SOCK_Test.dsp: + * tests/version_tests/Malloc_Test.dsp: + * tests/version_tests/Map_Manager_Test.dsp: + * tests/version_tests/Map_Test.dsp: + * tests/version_tests/Mem_Map_Test.dsp: + * tests/version_tests/Message_Block_Test.dsp: + * tests/version_tests/Message_Queue_Notifications_Test.dsp: + * tests/version_tests/Message_Queue_Test.dsp: + * tests/version_tests/Naming_Test.dsp: + * tests/version_tests/New_Fail_Test.dsp: + * tests/version_tests/Notify_Performance_Test.dsp: + * tests/version_tests/Object_Manager_Test.dsp: + * tests/version_tests/OrdMultiSet_Test.dsp: + * tests/version_tests/Pipe_Test.dsp: + * tests/version_tests/Priority_Buffer_Test.dsp: + * tests/version_tests/Priority_Reactor_Test.dsp: + * tests/version_tests/Priority_Task_Test.dsp: + * tests/version_tests/Process_Manager_Test.dsp: + * tests/version_tests/Process_Mutex_Test.dsp: + * tests/version_tests/Process_Strategy_Test.dsp: + * tests/version_tests/RB_Tree_Test.dsp: + * tests/version_tests/Reactor_Notify_Test.dsp: + * tests/version_tests/Reactor_Performance_Test.dsp: + * tests/version_tests/Reactor_Timer_Test.dsp: + * tests/version_tests/Reactors_Test.dsp: + * tests/version_tests/Reader_Writer_Test.dsp: + * tests/version_tests/Recursive_Mutex_Test.dsp: + * tests/version_tests/Reverse_Lock_Test.dsp: + * tests/version_tests/SOCK_Connector_Test.dsp: + * tests/version_tests/SOCK_Send_Recv_Test.dsp: + * tests/version_tests/SOCK_Test.dsp: + * tests/version_tests/SPIPE_Test.dsp: + * tests/version_tests/SString_Test.dsp: + * tests/version_tests/SV_Shared_Memory_Test.dsp: + * tests/version_tests/Semaphore_Test.dsp: + * tests/version_tests/Service_Config_Test.dsp: + * tests/version_tests/Simple_Message_Block_Test.dsp: + * tests/version_tests/Svc_Handler_Test.dsp: + * tests/version_tests/TSS_Test.dsp: + * tests/version_tests/Task_Test.dsp: + * tests/version_tests/Thread_Manager_Test.dsp: + * tests/version_tests/Thread_Mutex_Test.dsp: + * tests/version_tests/Thread_Pool_Reactor_Test.dsp: + * tests/version_tests/Thread_Pool_Test.dsp: + * tests/version_tests/Time_Service_Test.dsp: + * tests/version_tests/Time_Value_Test.dsp: + * tests/version_tests/Timeprobe_Test.dsp: + * tests/version_tests/Timer_Queue_Test.dsp: + * tests/version_tests/Tokens_Test.dsp: + * tests/version_tests/UPIPE_SAP_Test.dsp: + * tests/version_tests/Upgradable_RW_Test.dsp: + * tests/version_tests/version_tests.dsw: + * tests/version_tests/Reactor_Exceptions_Test.dsp: (added) + * tests/version_tests/Sigset_Ops_Test.dsp: (added) + + These files were regenerated. + +Mon May 15 12:28:32 2000 Aviad Eden + + * ace/Object_Manager.h: In the paragraph that describes the + behavior of ::exit function (starting with the words "NOTE + on the use of ::exit --"). The first sentence states that + using ::exit "does not destroy static objects" while it + should be "does not destroy automatic objects". + +Mon May 15 12:25:59 2000 David L. Levine + + * ace/OS.i (thr_join): removed comments about possible + implementation using ::taskSafe ()/::taskUnsafe () on + VxWorks. Join functionality is better implemented + in the Thread_Manager. Thanks to Umar for asking about + this comment. + +Mon May 15 09:09:49 2000 Darrell Brunsch + + * ace/Local_Name_Space_T.cpp: + * ace/Remote_Name_Space.cpp: + * netsvcs/lib/Name_Handler.cpp: + + Changed my use of ACE_Auto_Array_Ptr for ACE_USHORT16 + to ACE_Auto_Basic_Array_Ptr. Thanks to Andy Gokhale for + reporting this. + +Mon May 15 08:31:13 2000 Darrell Brunsch + + * ace/streams.h: + + Undid the commenting out of #include for + ACE_USES_OLD_IOSTREAMS. It had previously been commented + out because of a problem with Qt. A better solution would + be to not include it only when ACE is used with Qt. + + This problem was showing up with Explicit_Event_Loop. + +Sun May 14 12:43:35 2000 Darrell Brunsch + + (On behalf of Christopher Kohlhoff ) + + * ace/Makefile.bor: + * include/makeinclude/ace_flags.bor: + + Added new file, moved ACE_BUILD_DLL macro into ACE library's + makefile. Thanks also to Mogens Hansen . + + * include/makeinclude/recurse.bor: + + Arguments like -i should now be propogated with makefile + recursion + +Sun May 14 12:19:41 2000 Darrell Brunsch + + * bin/msvc_auto_compile.pl: + + Added a -TAO option to specify that the TAO subdirectory + should be compiled. + +Sat May 13 19:05:23 2000 Darrell Brunsch + + * ace/SString.cpp: + + Forgot to add a base member initialization for the allocator + in the new ACE_USHORT16 constructor for ACE_WString. Thanks + to Chris Kohlhoff for noticing this. + +Sat May 13 19:07:32 2000 Nanbor Wang + + * ace/config-kcc-common.h: Added ACE_HAS_STRING_CLASS. This fixed + the IOStream_Test. + +Sat May 13 13:01:08 2000 Darrell Brunsch + + * tests/SString_Test.cpp: + + So yesterday I changed a type from ACE_USHORT16 to + wchar_t. Rather, it should have been ACE_WSTRING_TYPE. + +Sat May 13 01:06:22 2000 Darrell Brunsch + + * ace/Local_Name_Space_T.cpp: + * ace/Remote_Name_Space.cpp: + + SunCC 5 didn't like the template instantiations in the + Local_Name_Space_T file, so I moved them to + Remote_Name_Space.cpp. + +Fri May 12 17:48:17 2000 Darrell Brunsch + + * bin/generate_export_file.pl: + + Found a new way to write this script using map and a __DATA__ + block. + +Fri May 12 17:52:22 2000 Nanbor Wang + + * ace/OS.cpp (ACE_Thread_Adapter::invoke): Reverted James' + previous change for now. It's causing problem with MSVC. + +Fri May 12 15:04:58 2000 Carlos O'Ryan + + * bin/run_all_list.pm: + * bin/auto_compile_win32.pl: + Updated to include the new TAO test. + +Fri May 12 11:25:10 2000 Darrell Brunsch + + * ace/Basic_Types.h: + + Didn't understand at first why ACE_SIZEOF_WCHAR wasn't + defined to just "sizeof (wchar_t)". So I changed it, but + now I realize that this will not work if ACE_SIZEOF_WCHAR + is used in a #if. Bleh. Since wchar_t is always different, + I just defined it as 2 for WIN32 and 0 for others (so the + tests/Basic_Types_Test will catch it). [Bug 560] + + * ace/ACE.cpp: + + Chris Kohlhoff reported that Borland + didn't like "sizeof wchar_t", but adding parenthesis worked. + Applied this patch, and changed the cast to an ACE_static_cast. + [Bug 560] + + * ace/High_Res_Timer.cpp: + + Borland was giving some warnings here since a const method + was calling this->global_scale_factor (), which is a static + method. Changed it to ACE_High_Res_Timer::global_scale_factor () + and things compiled cleanly. + + * ace/config-win32-borland.h: + * ace/README: + * ace/SString.cpp: + * ace/SString.h: + * ace/Local_Name_Space_T.cpp: + * ace/Remote_Name_Space.cpp: + * netsvcs/lib/Name_Handler.cpp: + + On Borland BCB 5, wchar_t is (correctly) a separate type than + unsigned short, so all the implicit casting between the two in + the ACE Name Space. So added a new macro, + ACE_WSTRING_HAS_USHORT_SUPPORT, that enables another constructor + for ACE_WString. + + Chris Kohlhoff also reported this problem + and a solution, but unfortunately ACE_Name_Space requires that + this type is 2 bytes so we couldn't just use ACE_WSTRING_TYPE + here. Instead I added in both the new constructor and a + ushort_rep method on ACE_WString. I changed the Name Space stuff + to use this instead. BTW, old code shouldn't need to be changed + on MSVC, just if you use BCB. [Bug 561] + + * tests/SString_Test.cpp: + + We were using ACE_USHORT16 as the single character type for + ACE_WString. This has been changed to wchar_t. Thanks to Chris + for this one also. [Bug 561] + +Fri May 12 10:12:05 2000 James Hu + + * ace/OS.cpp (ACE_Thread_Adapter::invoke): + If the TSS instance of the ACE_Thread_Exit class fails to + create, the application will crash. The new code will + detect the failure, and use an instance created off the + stack if it happens. This mimics how ACE does it in + the case of platforms that do not support TSS. + +Thu May 11 18:07:53 2000 Chris Cleeland + + * ace/OS.i (malloc): Bug 566. + * ace/OS.i (realloc): + * ace/OS.i (calloc): + * ace/OS.i (free): Use the new macros (below) instead of directly + calling malloc-like functions, thereby allowing an installation to + substitute an alternate mallocator for the global (see comment for + OS.h below). + + * ace/OS.i (strdup): Changed the emulation of strdup() to use + ACE_OS::malloc() rather than ::malloc(). + + * ace/OS.h: Added the four macros ACE_MALLOC_FUNC, + ACE_CALLOC_FUNC, ACE_REALLOC_FUNC, and ACE_FREE_FUNC which default + to the names of the global ::malloc, ::calloc, ::realloc and + ::free. Using this, a site can define these in their config.h in + order to substitute an alternate malloc-like allocator. + +Thu May 11 17:23:14 2000 Jeff Parsons + + * ace/ace_dll.dsp: + Removed non-existent file Configuration.i from project. + +Thu May 11 15:21:34 2000 Darrell Brunsch + + * ace/OS.i (dlsym): + + I was checking for ACE_HAS_WIN32 instead of ACE_WIN32, + so this wasn't doing what it was supposed to with + ACE_USES_WCHAR turned on. + +Thu May 11 02:04:58 2000 Irfan Pyarali + + * ace/OS.h + * ace/OS.cpp + * ace/SOCK_Stream.h + * ace/SOCK_Stream.i + * ace/TLI_Stream.h + * ace/TLI_Stream.i + * ace/ACE.cpp + * ace/ACE.h + * ace/ACE.i + + In order to make the return values of recv_n() and send_n() + match the return values of recv() and send(), the following + changes were made to the interface: + + old interface: + + static ssize_t recv_n (ACE_HANDLE handle, + void *buf, + size_t len, + const ACE_Time_Value *timeout = 0, + int error_on_eof = 1); + + new interface: + + static ssize_t recv_n (ACE_HANDLE handle, + void *buf, + size_t len, + const ACE_Time_Value *timeout = 0, + size_t *bytes_transferred = 0); + + Return value are: + + - On complete transfer, is returned. + - On timeout, -1 is returned, errno == ETIME. + - On error, -1 is returned, errno is set to appropriate error. + - On EOF, 0 is returned, errno is irrelevant. + + On partial transfers, i.e., if any data is transferred before + timeout/error/EOF, will contain the number + of bytes transferred. These return values now closely match the + return values from the non "_n" methods. + + Thanks to Douglas Schmidt, Chris Cleeland, Steve Huston, James + Hu, and Rich Seibel for helping out! + +Thu May 11 01:59:10 2000 Irfan Pyarali + + * ace/Pipe.cpp: Reader and writer handles were being left open + when there was an error in ACE_Pipe::open(). This fixes bug + 549. Thanks to Rick Ohnemus for + reporting this bug and providing patches. + +Wed May 10 18:36:58 2000 Carlos O'Ryan + + * THANKS: + Add a new contributor + + * bin/msvc_auto_compile.pl: + * bin/auto_compile_win32.pl: + Upgraded to use the new libraries in orbsvcs. + +Tue May 9 20:02:41 2000 Darrell Brunsch + + * ace/Asynch_Acceptor.cpp: + + Was still including "Asynch_Acceptor.i" which has been removed. + + * apps/JAWS2/JAWS/Cache_Manager_T.cpp: + + Removed iostream.h include here. This is not good since ACE + already includes it, and ACE might already include , + which is incompatible with . + + * examples/Reactor/WFMO_Reactor/test_talker.cpp: + + Looks like the constructor to Proactor was changed, but this + test didn't get changed also. Removed one of the arguments + being passed to it. + + * websvcs/lib/websvcs_export.h: + + Regenerated it. It seems like I changed the websvcs library + based on what I thought was in this file. This didn't work, + since I was assuming that ACE_WEBSVCS_HAS_DLL was automatically + defined (and older versions of these export files did not do + that). + + * apps/JAWS/server/HTTP_Helpers.cpp: + * examples/Shared_Malloc/test_malloc.cpp: + + Changed empty ;'s in if statements to {} to remove warnings. + + + * bin/msvc_auto_compile.pl: + + Added a -u option that tells the script to pass the /USEENV + flag to msdev when it runs. + + Added a -ACE option that tells the script just to compile the + ACE directories. + + Changed -core to -CORE to be consistent with -ACE (and the + upcoming -TAO). + + * apps/Gateway/Gateway/Gateway.dsp: + * apps/Gateway/Gateway/gatewayd.dsp: + * apps/Gateway/Peer/Peer.dsp: + * apps/Gateway/Peer/peerd.dsp: + * apps/JAWS/clients/Caching/Caching.dsp: + * apps/JAWS/server/jaws.dsp: + * apps/JAWS2/server.dsp: + * apps/JAWS2/HTTPU/HTTPU.DSP: + * apps/JAWS2/HTTPU/HTTPU.DSW: + * apps/JAWS2/JAWS/jaws.dsp: + * examples/ASX/Event_Server/Event_Server/Event_Server.dsp: + * examples/ASX/Event_Server/Transceiver/transceiver.dsp: + * examples/ASX/Message_Queue/Bounded_Buffer.dsp: + * examples/ASX/Message_Queue/Buffer_Stream.dsp: + * examples/ASX/Message_Queue/Priority_Buffer.dsp: + * examples/ASX/UPIPE_Event_Server/UPIPE_Event_Server.dsp: + * examples/Bounded_Packet_Relay/Bounded_Packet_Relay.dsp: + * examples/Configuration/Test.dsp: + * examples/Connection/blocking/SPIPE.dsp: + * examples/Connection/blocking/acceptor.dsp: + * examples/Connection/non_blocking/non_blocking.dsp: + * examples/Connection/non_blocking/server.dsp: + * examples/IPC_SAP/ATM_SAP/CPP_client.dsp: + * examples/IPC_SAP/ATM_SAP/CPP_server.dsp: + * examples/IPC_SAP/SOCK_SAP/CPP_inclient.dsp: + * examples/IPC_SAP/SOCK_SAP/CPP_inserver.dsp: + * examples/IPC_SAP/SOCK_SAP/CPP_memclient.dsp: + * examples/IPC_SAP/SOCK_SAP/CPP_memserver.dsp: + * examples/IPC_SAP/SOCK_SAP/C_inserver.dsp: + * examples/IPC_SAP/SOCK_SAP/SOCK_SAP.dsp: + * examples/Log_Msg/Callback.dsp: + * examples/Log_Msg/Log_Msg.dsp: + * examples/Log_Msg/Ostream.dsp: + * examples/Logger/Acceptor-server/server_loggerd.dsp: + * examples/Mem_Map/file-reverse/file_reverse.dsp: + * examples/Naming/Naming.dsp: + * examples/Naming/multiple_contexts.dsp: + * examples/Naming/non_existent.dsp: + * examples/OS/Process/Process.dsp: + * examples/OS/Process/imore.dsp: + * examples/QOS/client.dsp: + * examples/QOS/server.dsp: + * examples/Reactor/Dgram/CODgram.dsp: + * examples/Reactor/Dgram/Dgram.dsp: + * examples/Reactor/Misc/Misc.dsp: + * examples/Reactor/Misc/demuxing.dsp: + * examples/Reactor/Misc/early_timeouts.dsp: + * examples/Reactor/Misc/notification.dsp: + * examples/Reactor/Misc/reactors.dsp: + * examples/Reactor/Misc/signals_1.dsp: + * examples/Reactor/Misc/signals_2.dsp: + * examples/Reactor/Ntalker/ntalker.dsp: + * examples/Reactor/Proactor/post_completions.dsp: + * examples/Reactor/Proactor/test_cancel.dsp: + * examples/Reactor/Proactor/test_end_event_loop.dsp: + * examples/Reactor/Proactor/test_multiple_loops.dsp: + * examples/Reactor/Proactor/test_proactor.dsp: + * examples/Reactor/Proactor/test_timeout.dsp: + * examples/Reactor/WFMO_Reactor/Handle_Close.dsp: + * examples/Registry/Registry.dsp: + * examples/Registry/update.dsp: + * examples/Service_Configurator/Misc/Timer.dsp: + * examples/Service_Configurator/Misc/main.dsp: + * examples/Shared_Malloc/malloc.dsp: + * examples/Shared_Malloc/multiple_mallocs.dsp: + * examples/Shared_Malloc/persistence.dsp: + * examples/Shared_Malloc/position_independent_malloc.dsp: + * examples/Web_Crawler/Web_Crawler.dsp: + * performance-tests/Misc/basic_perf.dsp: + * performance-tests/Misc/childbirth_time.dsp: + * performance-tests/Misc/context_switch_time.dsp: + * performance-tests/Misc/test_mutex.dsp: + * performance-tests/Misc/test_naming.dsp: + * performance-tests/Misc/test_singleton.dsp: + * performance-tests/Server_Concurrency/Leader_Follower/Leader_Follower.dsp: + * performance-tests/Server_Concurrency/Queue_Based_Workers/Queue_Based_Workers.dsp: + * performance-tests/TCP/TCP.dsp: + + While testing the -ACE flag in msvc_auto_compile, I found that + there were many dsps that were either creating precompiled + headers, didn't have the correct include paths, or even weren't + in the CRLF format. Fixed them up. + + * apps/JAWS/clients/Caching/testing.dsp: + * performance-tests/Synch-Benchmarks/Synch_Tests.dsp: + + These project files didn't look like they are used anymore, + so I removed them. + +Tue May 9 17:38:47 2000 Carlos O'Ryan + + * bin/auto_compile_win32.pl: + Include the new library used in the RT CORBA tests. + +Tue May 9 09:01:24 2000 Darrell Brunsch + + * examples/Export/README: (added) + * examples/Export/dll.cpp: (added) + * examples/Export/dll.h: (added) + * examples/Export/export_dll.dsp: (added) + * examples/Export/export_test.dsw: (added) + * examples/Export/run_test.pl: (added) + * examples/Export/test.cpp: (added) + * examples/Export/test.dsp: (added) + * examples/Export/test_export.h: (added) + + The export example is an example of how to use the ACE_Export + type macros for DLLs. + +Mon May 8 14:37:32 2000 Douglas C. Schmidt + + * ace/Task.h: Cleaned up the documentation so that it will + work correctly with class2man. Thanks to Charlie Duke + for reporting this. + +Mon May 08 22:56:28 2000 Carlos O'Ryan + + * ACE version 5.1.2 released. + +Mon May 8 11:02:49 2000 Darrell Brunsch + + * docs/CE-status.txt: + + I will not get a chance to update this before the beta, so + I just put in a note mentioning that it is out of date and + will be updated next time. + +Mon May 8 12:30:15 2000 Nanbor Wang + + * include/makeinclude/platform_sunos5_kcc.GNU: Added + "--once_instantiation_per_object" flag for both compiler and + linker to avoid some warnings about duplicate symbol + definitions. + +Sun May 7 19:50:21 2000 Darrell Brunsch + + * include/makeinclude/platform_sunos5_sunc++.GNU: + + Undid Doug's change on "Wed May 3 18:07:16 2000". + The fix wasn't working in our SUNCC 5 builds. + +Sat May 6 17:49:01 2000 Darrell Brunsch + + * ace/Log_Msg.h: + * ace/Log_Msg.cpp: + + Changed the signature of log_priority_enabled to have both the + char * and wchar_t * versions when using ACE_USES_WCHAR. The + reason why this has to be done is because of ACE_HEX_DUMP. + + ACE_HEX_DUMP calls both log_priority_enabled and log_hexdump, + and it doesn't make sense to change the signature of log_hexdump. + If it were to take in a wchar_t buffer, it should print the + entire wchar_t. But if we have a buffer that is a char *, then + it doesn't make sense to convert it to a wchar_t * buffer, since + it adds all those extra bytes that would show up with hexdump. + + And now that we have 3 versions of this method which do the same + things, I changed the ones that is used by the macros to call + the one that just takes in the priority. An extra function call, + but if that is a problem, then they can be inlined. + +Sat May 6 19:33:49 2000 Nanbor Wang + + * include/makeinclude/platform_freebsd.GNU: Removed definition + BIN_TRUE. It's no longer used. + +Thu May 4 14:53:45 2000 Darrell Brunsch + + * ace/config-all.h: + * ace/config-win32-common.h: + * bin/generate_export_file.pl: + + Changed the ACE_EXPORT_SINGLETON_DECLARE and + ACE_IMPORT_SINGLETON_DECLARE to take in arguments, but + this time it takes in 3, the singleton type, the class, + and then the lock. So we have: + + ACE_EXPORT_SINGLETON_DECLARE (ACE_Singleton, foo, ACE_Null_Mutex); + +Thu May 4 13:59:58 2000 Darrell Brunsch + + * ace/config-all.h: + * ace/config-win32-common.h: + + Added two new macros, ACE_EXPORT_SINGLETON_DECLARE and + ACE_IMPORT_SINGLETON_DECLARE. They do the same thing as the + *_DECLARATION macros except they do not take arguments. + + So instead of + ACE_EXPORT_SINGLETON_DECLARATION (foo); + you use + ACE_EXPORT_SINGLETON_DECLARE foo; + + This was needed since foo may be a template, and if so, the + comma that can be between multiple arguments causes problems. + + * bin/generate_export_file.pl: + + Now creates the above DECLARE macros in addition to the rest. + +Thu May 4 14:47:09 2000 Nanbor Wang + + * include/makeinclude/platform_freebsd.GNU: Defined BIN_TRUE as + /usr/bin/true. + +Wed May 3 19:35:48 2000 Carlos O'Ryan + + * ace/Log_Msg.cpp: + The implementation of the log_priority_enabled function did not + match its declaration. + +Wed May 3 17:21:50 2000 Darrell Brunsch + + * ace/config-win32-common.h: + + After many reports of not having _MT defined (and then not + quite knowing what to do about it), I felt we needed a bit + more descriptive error and comment. + + * docs/ACE-FMM.html: + * docs/ACE-bug-process.html: + * docs/ACE-development-process.html: + * docs/ACE-guidelines.html: + * docs/ACE-lessons.html: + * docs/ACE-porting.html: + * docs/ACE-subsets.html: + * docs/exceptions.html: + * docs/index.html: (added) + * docs/usage-bugzilla.html: + + Added an index for the files in this directory. Added + backlinks to the other files. + +Wed May 3 18:07:16 2000 Douglas C. Schmidt + + * ace/Malloc_T (memory_pool): Found another bug with SunC++ 5.0... + Moved the ACE_Allocator_Adapter::protect() into the Malloc_T.cpp + file. + +Wed May 3 17:16:12 2000 Ossama Othman + + * ace/Log_Msg.h (log_priority_enabled): + + Corrected use of "ASYS_TCHAR." "ACE_TCHAR" should be used + instead. + +Wed May 3 18:07:16 2000 Douglas C. Schmidt + + * ace/Log_Msg: Added the new log_priority_enabled() method. Thanks + to Ossama for reporting this ;-). + + * include/makeinclude/platform_sunos5_sunc++.GNU (CC_VERSION): + The keywords to check if the version if greater than 5 is "C++" + on Solaris, not "Compilers." Thanks to Rick Weisner + for reporting this. + +Wed May 3 15:08:03 2000 Nanbor Wang + + * include/makeinclude/platform_freebsd.GNU: Changed to set + versioned_so only when building on version 2 of FreeBSD. Thanks + to Henrik Kai for pointing this out. + +Wed May 3 12:31:32 2000 Ossama Othman + + * ace/Makefile.am (INLINE_FILES): + + Removed deprecated inline files from the list. + +Wed May 3 11:59:14 2000 Carlos O'Ryan + + * include/makeinclude/macros.GNU: + * include/makeinclude/rules.common.GNU: + * include/makeinclude/rules.local.GNU: + New target that recusively builds all the IDL + generated files. + +Wed May 3 11:43:05 2000 Douglas C. Schmidt + + * ace/Log_Msg.h: Only call set() in the ACE_{ERROR,DEBUG} macros if + the log_priority_enabled() is non-0, which avoids making + unecessary strcpy() calls. Thanks to Ganesh Pai + for reporting this. + + * ace/Timer_Queue_Adapters (schedule): Make sure to pass + the act to the schedule() method. Also, updated the header file + so that it explains that interval timers aren't implemented. + Thanks to Umar Syyid for reporting these. + +Wed May 3 09:49:57 2000 Jeff Parsons + + * ace/Caching_Utility_T.cpp: + * ace/Map.cpp: + * ace/Pair.cpp: + * ace/Svc_Handler.cpp: + * ace/Win32_Asynch_IO.cpp: + * ace/Win32_Proactor.cpp: + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Removed inclusion of non-existent .i files from corresponding + .cpp files and from the project files. + +Tue May 2 19:33:57 2000 Douglas C. Schmidt + + * Updated all the dependencies. + + * ace: Removed all the following files because they were empty and + yet were being #included into various other *.h files, which + slowed down compilation unnnecessarily! Thanks to Espen Harlinn + for reporting this. + * ace/Acceptor.i + * ace/WIN32_Proactor.i: + * ace/WIN32_Asynch_IO.i: + * ace/Token_Invariants.i: + * ace/TLI_Acceptor.i: + * ace/Svc_Handler.i: + * ace/Proactor.i: + * ace/Stream_Modules.i: + * ace/Select_Reactor.i: + * ace/Map.i: + * ace/Priority_Reactor.i: + * ace/Pair.i: + * ace/Hash_Map_Manager.i: + * ace/LSOCK_Acceptor.i + * ace/CORBA_Ref.i: + * ace/Configuration.i: + * ace/Connector.i: + * ace/Cleanup_Strategies_T.i; + * ace/SPIPE_Acceptor.i: + * ace/Trace.i: + * ace/Log_Msg.i: + * ace/IO_Cntl_Msg.i: + * ace/Dynamic_Service.i: + * ace/Caching_Utility_T.i: + * ace/Cached_Connect_Strategy_T.i: + * ace/Asynch_IO.i: + * ace/Asynch_Acceptor.i: + + * ace/OS.i (readdir_r): Apparently the GNU compiler on DEC UNIX + defines a macro for readdir_r() that was breaking things. + Therefore, we #ifdef for that! Thanks to Jean-Marc Strauss + for reporting this. + +Tue May 2 12:48:00 2000 Carlos O'Ryan + + * bin/g++dep: + Use `pwd` instead of $PWD to get the currenct directory because + some shell don't get that one right. + +Tue May 02 13:51:21 2000 David L. Levine + + * bin/create_ace_build: updated comments at top to reflect + the fact that dead symlinks are removed when run on an + existing build tree. + +Tue May 2 10:24:10 2000 Darrell Brunsch + + * bin/auto_compile_win32.pl: + + Fixed a couple of release configurations that were out of date. + +Tue May 2 10:05:21 2000 Darrell Brunsch + + * websvcs/lib/URL_Addr.cpp: + * websvcs/lib/URL_Addr.h: + * websvcs/lib/URL_Addr.i: + * websvcs/lib/websvcs.dsp: + + The changes to the new wchar style wasn't completely correct, + and I missed quite a few LPCTSTRs in the .i file. Also corrected + my earlier attempt at doing the export stuff the "right way". + + Also changed the use of the variable passwd to password. passwd + is also used as a structure so it confused MSVC when used in the + FTP class constructor + +Tue May 2 09:34:31 2000 Steve Huston + + * tests/SOCK_Send_Recv_Test.cpp: Fix signed/unsigned warnings. + +Mon May 1 16:51:07 2000 Darrell Brunsch + + * bin/msvc_auto_compile.pl: + + Now gets the current directory for the default of ACE_ROOT + instead of using ".". Also only tries compiling files ending + with dsp, not just ones with .dsp in their name (like *.dsp.bak). + Finally, added a print_status options (-s) that will output + status messages to STDERR, so you can see how much far it has + progressed when you are redirecting stdout to a file. + +Mon May 01 12:41:39 2000 Irfan Pyarali + + * ace/Hash_Map_Manager_T.cpp (close_i): Restored freeing of the + table memory which had been mistakenly removed. Thanks to David + for pointing this out. + +Mon May 1 10:27:48 2000 Darrell Brunsch + + * bin/auto_compile_win32.pl: + + Some minor changes that should make the Win32 builds clean + ( which I want to see once before bugging Nanbor to switch + to my script :-) ) + +Mon May 01 02:06:02 2000 Nanbor Wang + + * ace/Malloc_T.cpp (avail_chunks): Changed to use do-while loop to + go over all freelist when calculating the avail_chunks to make + sure all nodes in the freelist are accounted for. + doesn't always point to the anchoring Malloc_Header in the + control block. Thanks to Ivan Murphy + for reporting the problem. + + Also we must reduce the header size count by one when + calculating the avail_chunks because each returning allocated + memory chunk takes at least two Malloc_Header's. This change + made the result of more realistic. + + * ace/Malloc.h: Added more documentation explaining how Malloc_T + works. + +Sun Apr 30 23:20:00 2000 Darrell Brunsch + + * ace/SString.h: + + SunCC 5 had problems with ACE_TString when it was typdefed, + but not when it was #defined. + + * ace/ace_wchar.h: + + Noticed I was including tchar.h still, which is no longer + necessary since ACE's use of wchar_t is separate from + tchar.h's. + +Sat Apr 29 20:02:39 2000 Ossama Othman + + * bin/autoconf_compile (BUILD_LIST): + + Remove TAO from the build list. It's autoconf support hasn't + been fully integrated yet. + +Sat Apr 29 19:45:41 2000 Ossama Othman + + * netsvcs/lib/Log_Message_Receiver.cpp (attach, detach): + + Fixed warning that occured when + ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES was not defined. + + Use ACE_GUARD{_RETURN} macro instead of naked ACE_Guard. + +Sat Apr 29 19:17:25 2000 Ossama Othman + + * ace-dll.icc: + * ace_dll.dsp: + * ace_lib.dsp: + + These files still referred to the deprecated `inc_user_config.h' + header. The header is now called `config-all.h'. + +Sat Apr 29 19:09:00 2000 Ossama Othman + + * ace/QoS_Manager.h: + + Moved inclusion of one of the ACE headers prior to the check for + ACE_LACKS_PRAGMA_ONCE. The definition of ACE_LACKS_PRAGMA_ONCE + wasn't pulled before the check, so it ended up being defined + twice. + +Sat Apr 29 16:15:29 2000 Ossama Othman + + * bin/autoconf_compile: + * bin/autoconf_compile_wrapper: + + The ACE+autoconf counterparts to the auto_compile* scripts. + These scripts are used to run automatic builds of the ACE's + autoconf support. + +Sat Apr 29 15:59:53 2000 Ossama Othman + + * ace/Makefile.am (HEADER_FILES): + + Removed `inc_user_config.h' from the list of headers. It no + longer exists. + + Added `config-all.h', `ACE_export.h' and `svc_export.h' to the + list of headers. + +Sat Apr 29 17:13:55 2000 Vishal Kachroo + + * ace/Makefile.am: Added the SOCK_Dgram_Mcast_QoS.{cpp,h,i} + +Sat Apr 29 14:49:13 2000 Darrell Brunsch + + * examples/DLL/Newsweek.dsp: + * examples/Threads/barrier1.dsp: + * examples/Threads/barrier2.dsp: + * examples/Threads/cancel.dsp: + * examples/Threads/future1.dsp: + * examples/Threads/future2.dsp: + * examples/Threads/manual_event.dsp: + * examples/Threads/process_mutex.dsp: + * examples/Threads/process_semaphore.dsp: + * examples/Threads/reader_writer.dsp: + * examples/Threads/recursive_mutex.dsp: + * examples/Threads/task_five.dsp: + * examples/Threads/task_four.dsp: + * examples/Threads/task_one.dsp: + * examples/Threads/task_three.dsp: + * examples/Threads/task_two.dsp: + * examples/Threads/test.dsp: + * examples/Threads/thread_manager.dsp: + * examples/Threads/thread_pool.dsp: + * examples/Threads/thread_specific.dsp: + * examples/Threads/token.dsp: + * examples/Threads/tss1.dsp: + * examples/Threads/tss2.dsp: + * examples/Timer_Queue/Async_Timer_Queue_Test.dsp: + * examples/Timer_Queue/Reactor_Timer_Queue_Test.dsp: + * examples/Timer_Queue/Thread_Timer_Queue_Test.dsp: + * examples/Web_Crawler/Web_Crawler.dsp: + * performance-tests/Synch-Benchmarks/synch_driver.dsp: + * performance-tests/Synch-Benchmarks/Base_Test/Base_Test.dsp: + * performance-tests/Synch-Benchmarks/Perf_Test/Perf_Test.dsp: + * performance-tests/Synch-Benchmarks/Synch_Lib/Synch_Lib.dsp: + * websvcs/lib/websvcs.dsp: + * websvcs/tests/Test_URL_Addr.dsp: + + I started to test out my msvc_auto_compile.pl script and after + testing it for the whole thing, found out that I soon ran out + of disk space. By the time I ran out of space, the PCH files + made up 3 GB of disk. So I removed them from these projects. + +Sat Apr 29 14:15:12 2000 Darrell Brunsch + + * bin/clean_dsp.pl: + + Was still some bugs in this script. In general, beware + of using it. There is no guarantess that it does or ever + will work. + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + + Having said that, I went and used it on these project files + anyway. Reduced their size by a good 50%. + + * ace/ace_dll_ce.dsp: + + Made the x86 emulation release configuration build correctly + by ingoring default libraries. Also cleaned this dsp, which + had an improvement of 98%. + +Sat Apr 29 13:20:11 2000 Darrell Brunsch + + * apps/drwho/PMS_All.cpp: + * apps/drwho/PMS_Ruser.cpp: + + Was still using some ACE::strecpy, changed to ACE_OS::strecpy. + +Fri Apr 28 21:30:46 2000 Darrell Brunsch + + * bin/msvc_auto_compile.pl: + + Fixed the build core logic to work correctly when more than + one configuration is specified. + + * bin/vc_filter.pl: + + Now ignores the LINK4089 warnings. We haven't quite figured + out how to fix them yet. + +Fri Apr 28 21:11:32 2000 Darrell Brunsch + + * bin/clean_dsp.pl: (added) + + This script should clean out excess baggage from DSP files. + +Fri Apr 28 13:11:20 2000 Ossama Othman + + * include/makeinclude/platform_linux_lxpthread.GNU: + * include/makeinclude/platform_linux_lxpthreads.GNU: + + Renamed `platform_linux_lxpthread.GNU' to + platform_linux_lxpthreads.GNU to be consistent with the name of + its corresponding config header `config-linux-lxpthreads.h'. + Thanks to Ken Weinert for reporting this. + + `platform_linux_lxpthread.GNU' now includes the newly renamed + file for backward compatibility. + +Fri Apr 28 11:54:21 2000 Douglas C. Schmidt + + * ace/SString.cpp: Fixed the delimiter_replace() method so that + it actually does what it's comment implies... Thanks to Martin + Krumpolec for reporting this. + +Thu Apr 27 18:19:19 2000 James Hu + + * ace/Dirent.i: Added checks to see if dirp_ is initialized + before calling into ACE_OS. + +Thu Apr 27 16:53:49 2000 Irfan Pyarali + + * ace/Hash_Map_Manager_T.cpp (unbind_all_i): Added new method + unbind_all() for removing all the entries in one shot. Thanks + to Boris Sukholitko for providing this + enhancement. + + * tests/Hash_Map_Manager_Test.cpp: Added test for unbind_all(). + +Thu Apr 27 14:17:52 2000 Darrell Brunsch + + * ace/OS.i: + + isatty (): Messed up on my CE change, so the version that + takes an int was hidden by a ACE_WIN32 block. This has been + moved outside again. + + * ace/OS.cpp: + + Weird, somehow part of a section that should have been removed + with the CE changes was still present. Removed again. + +Thu Apr 27 13:08:00 2000 Darrell Brunsch + + * bin/msvc_auto_compile.pl: + + Changed the code style and made it consistent. + + Also changed the core build to build all of the orbsvcs and + do the static builds in the right order. + + * ace/OS.cpp: + * ace/OS.i: + + For some reason, I had trouble with the libraries when the + ACE_Cleanup destructor was in the .i file. So I moved it to + the .cpp file instead. + + * ace/ace_dll.dsp: + + Was defining ACE_ACE_HAS_DLL=1, which is #1, not needed and, + #2, the wrong macro name. + + * ace/ace_lib.dsp: + + Changed the static configs to be of type Win32 Static Release/ + Debug instead of Win32 Release/Debug. + + * apps/gperf/src/gperf.dsp: + * apps/gperf/src/gperf_lib.dsp: + + Added Win32 Static Release/Debug configs. + +Thu Apr 27 14:32:45 2000 Douglas C. Schmidt + + * ACE-INSTALL (make): Updated the documentation. Thanks to + Ken Weinert for reporting this. + +Thu Apr 27 12:41:42 2000 James C. Hu + + * ace/OS.i: + * ace/OS.cpp: + * ace/config-freebsd-pthread.h: + * ace/README: + + Removed ACE_HAS_TIME_R in favor of using existing + mechanism of ACE_HAS_REENTRANT_FUNCTIONS, and then + adding ACE_LACKS_NETDB_REENTRANT_FUNCTIONS and + also ACE_LACKS_PWD_REENTRANT_FUNCTIONS. Created a + new lacks called ACE_LACKS_RAND_REENTRANT_FUNCTIONS + to match the previous two. FreeBSD can now use its + native *time_r functions. + +Thu Apr 27 10:55:11 2000 Darrell Brunsch + + These changes bring the Windows CE port up to date. It currently + supports Windows CE 2.11 on the H/PC Pro. I am looking into the 2.11 + P/PC port, but there are other problems with it still. Hopefully + the WinCE 3.0 SDK will be more mature. + + * ace/ace_dll_ce.dsp: (added) + * ace/ace_ce_dll.dsp: (removed) + * ace/ace_ce.dsw: + + Created a new dsp file from scratch from CE to see how the + toolkit sets up the projects. Removed the old one. + + * ace/ACE.cpp: + + format_hexdump (): Changed usage of isprint to ACE_OS::ace_isprint. + + get_ip_interfaces (): Changed use of deprecated ACE_TEXT_STRING to + ACE_TString. Also added an ACE_TEXT_CHAR_TO_TCHAR to a use + of the ACE_INET_Addr constructor. + + * ace/ARGV.cpp: + + create_buf_from_queue (): We were not adjusting the size of a + ACE_TCHAR buffer by sizeof ACE_TCHAR when we did a memcopy. + Thanks to Valery Arkhangorodsky + for reporting this. + + * ace/Memory_Pool.cpp: + + seh_selector (): Changed use of LPEXCEPTION_POINTERS to + EXCEPTION_POINTERS * since it seems like that definition is + missing in some WinCE configs. + + * ace/ace_wchar.h: + + Added deprecated definition of ACE_TEXT_STRING. + + convert (): Changed the conversions from CharToOem to + MultiByteToWideChar, since it is more widely supported in Win32. + Also removed the loading of user32.lib since it was only needed + for CharToOem. + + * ace/config-win32-common.h: + + Changed the _MT check so it doesn't do anything on CE. Some + CE targets do not have the Multithreaded DLL generation option. + + * ace/config-WinCE.h: + + Changed ACE_DEFAULT_LD_SEARCH_PATH to use ACE_TEXT. + + Added a define for ACE_HAS_WCHAR and a check to always define + ACE_USES_WCHAR. + + Commented out the ACE_HAS_MFC check. + + Defined FILE, since it seems to be missing from CE 2.11 H/PC Pro. + + Added a definition for EXCEPTION_ACCESS_VIOLATION that was in + older SDK's. + + Removed some UNDER_CE < 2.11 defines. < 2.11 CE will not be + supported anymore. + + Removed definition of is_print, since it was moved into ACE_OS. + + Added a definition for the operator placement new, which is + missing when MFC isn't used. + + * ace/OS.h: + + Enabled is_atty for Windows CE. Added ace_isprint and made + ace_isspace an ACE_TCHAR method. + + * ace/OS.i: + + chdir (): NOTSUP on CE 2.11 + + tempnam (): Also NOTSUP on CE 2.11 + + abort (): changed ::exit to exit to get it to compile. + + ace_isspace (): Changed to use ACE_TCHAR, but also made it + NOTSUP on CE 2.11. + + ace_isprint (): Added, but NOTSUP on CE 2.11. + + sema_init (): Needed to cast an void *arg to ACE_mutexattr_t. + + dlsym (): Changed the way ACE declares symbolname so it uses the + right one on Win32 (WinNT always uses char *, CE always uses + wchar_t *). The function still takes in ACE_TCHAR * though. + Thanks to Jeff Greif for reporting this. + + Removed a few global function definitions that were just for + CE (like fwrite, fread, getc, etc.). These are either supported + in newer CE's or is disabled in the ACE_OS methods. + + is_atty (): Enabled on CE. + + * ace/OS.cpp: + + Enabled fopen on CE by using _wfopen (but not sure if this will + work correctly, since on other Win32 platforms we have a lot more + stuff. + + Enabled several printf methods on CE. + + open (): Removed the use of FILE_SHARE_DELETE on CE. + + * ace/Service_Config.i: + + initialize (): Added an ACE_TEXT_CHAR_TO_TCHAR and replaced + an ACE_WIDE_STRING with it also. + + * ace/Svc_Conf.h: + * ace/Svc_Conf.y: + * ace/Svc_Conf_y.cpp: + + ace_yyerror (): Takes an ACE_TCHAR * instead of char * now. + Thanks to Valery Arkhangorodsky + for also reporting this. + + * ace/Svc_Conf.l: + * ace/Svc_Conf_l.cpp: + + Changed to use ACE_OS::isatty () and ACE_OS::ace_isprint. + +Thu Apr 27 11:49:52 2000 Douglas C. Schmidt + + * ace/OS.i (memchr): Do not cast away constness when emulating + memchr(). Thanks to Rick Ohnemus + for reporting this. + + * ace/Select_Reactor_Base.cpp (open): The notification pipe handlers + created by the ACE_Select_Reactor_Notify::open were being left + open after fork() and exec(). Thanks to Rick Ohnemus + for reporting this. + +Wed Apr 26 23:47:31 2000 Douglas C. Schmidt + + * ace/Process_Manager.cpp (open): Make sure that the dummy I/O + handle is not inherited by child processes. Thanks to Rick + Ohnemus for reporting this. + +Wed Apr 26 20:32:59 2000 James C. Hu + + * ace/OS.cpp: + * ace/OS.i: + * ace/README: + * ace/config-freebsd-pthread.h: + Added a new define ACE_HAS_TIME_R. FreeBSD supports + *time_r() calls, but not gethostbyname_r, so a new feature + specification was needed to get these functions into + ACE_OS. + +Wed Apr 26 12:21:16 2000 Steve Huston + + * ace/ACE.cpp (send_n_i (ACE_HANDLE, const void *, size_t, int) and + send_n_i (ACE_HANDLE, const void *, size_t): If the send fails + with EWOULDBLOCK, wait for the handle to become writeable again + before retrying the send. Thanks to Edan Ayal + for reporting this. + + * tests/SOCK_Send_Recv_Test.cpp: Added test 3 for send_n to verify + fix for writing to nonblocking handle. + +Wed Apr 26 08:43:21 2000 Darrell Brunsch + + * apps/drwho/PMC_Flo.cpp: + * apps/drwho/PMC_Usr.cpp: + * apps/drwho/PMS_All.cpp: + * apps/drwho/PMS_Flo.cpp: + * apps/drwho/PMS_Ruser.cpp: + * apps/drwho/PMS_Usr.cpp: + + Was still using ACE::strecpy, changed to ACE_OS::strecpy. + +Tue Apr 25 15:11:41 2000 Carlos O'Ryan + + * THANKS: + Add new member to the list. + +Tue Apr 25 11:35:07 2000 Darrell Brunsch + + * ace/Local_Name_Space.cpp: + + The hash function was using the wrong length of the USHORT16 + string representation. The len_ actually is the length in bytes, + not characters. + +Tue Apr 25 08:57:59 2000 Darrell Brunsch + + * ASNMP/tests/test_config.h: + + Was using XXX_A and XXX_W macros which really do not make sense + anymore. Removed them and replaced with just the XXX macro which + uses ACE_TEXT. + + * examples/Naming/test_multiple_contexts.cpp: + * examples/Naming/test_non_existent.cpp: + * examples/Naming/test_writers.cpp: + * performance-tests/Misc/test_naming.cpp: + * tests/Naming_Test.cpp: + * tests/SString_Test.cpp: + + All of these were still being disabled when ACE_HAS_WCHAR wasn't + defined. Since the naming stuff was changed to work without + ACE_HAS_WCHAR, these were reenabled. + +Tue Apr 25 00:02:08 2000 Douglas C. Schmidt + + * ace/Log_Msg.h (ACE_Log_Msg): Split msg_ostream() into two functions, + one of which allows the delete_ostream_ flag to be reset and the + other that doesn't. Thanks to Boris Sukholitko + for reporting this. + + * ace/Message_Block.i (replace_data_block): If a data block is replaced + with a NULL pointer then don't bother doing certain operations! + Thanks to Boris Sukholitko for + reporting this. + + * ace/OS.i (dlerror): Changed sizeof buf to sizeof buf / sizeof buf[0] + to avoid over-allocating a buffer in the + ACE_TEXT_FormateMessage() function. Thanks to Valery + Arkhangorodsky for reporting this. + + * ace/Service_Repository.cpp: The fini() method was claiming + it was the close() method. Likewise, changed the close() method + so that it keeps decrementing the current_size each time through + the look to allow checking the respository size or doing other + work from inside the fini() call. Thanks to Valery + Arkhangorodsky for reporting this. + +Mon Apr 24 17:44:21 2000 Darrell Brunsch + + * ace/Object_Manager.cpp: + + Ai Carumba! I disabled some stuff here a while back when + I first disabled the Naming Service, but forgot to enable + it again once I fixed that. + +Mon Apr 24 16:44:22 2000 Darrell Brunsch + + * ace/SString.i: + + A couple of compilers were having problems with some + casting I was doing in a const hash method. Changed the + types of casts to hopefully make the compilers happy. + +Mon Apr 24 10:04:51 2000 Darrell Brunsch + + * ace/OS.cpp: + + Another problem with a missing parenthesis. + +Mon Apr 24 09:15:03 2000 Darrell Brunsch + + * ace/OS.i: + + Forgot a couple of ')'s that showed up on Lynx builds. + + Also, ACE_const_char doesn't exist, ACE_const_cast does. + +Sun Apr 23 19:51:41 2000 Darrell Brunsch + + * ace/ACE.cpp: + * ace/Naming_Context.cpp: + * ace/SOCK_Dgram_Mcast_QoS.cpp: + + Just tried the ACE_USES_WCHAR build and there were a couple + of things that needed updating. Mainly some missing ACE_TEXT's + or char's used instead of ACE_TCHAR's. + + * tests/Process_Mutex_Test.cpp: + + Was still using an old ACE_DEFAULT_MUTEX_A macro (updated to + ACE_DEFAULT_MUTEX). + + * ace/ace_lib.dsp: + + Added "static" to the config names (Win32 Debug => Win32 Static + Debug) so it is easier for the msvc_auto_compile.pl script to + figure out which is which. + +Sun Apr 23 18:14:33 2000 Darrell Brunsch + + * ace/ace_wchar.h: + + Added compatibility for all the old ASYS_* macros by default. + But no part of ACE/TAO should still use them anymore. This + compatibility can be turned off by defining + ACE_ONLY_LATEST_AND_GREATEST. + + * ace/SString.cpp: + * ace/SString.h: + * ace/SString.i: + * ace/Local_Name_Space.cpp: + * ace/Local_Name_Space.h: + * ace/Local_Name_Space_T.h: + * ace/Name_Space.cpp: + * ace/Name_Space.h: + * ace/Naming_Context.cpp: + * ace/Naming_Context.h: + * ace/Remote_Name_Space.cpp: + * ace/Remote_Name_Space.h: + + Found a better way of support for the ACE_Name_Space classes when + there isn't a wchar_t. We now define the ACE_WString to internally + use a type called ACE_WSTRING_TYPE, which is defined to wchar_t + unless ACE_USES_WCHAR is not defined (in which case it is defined + to ACE_USHORT16). + +Sun Apr 23 14:27:11 2000 Darrell Brunsch + + * ace/CLASSIX/CLASSIX_Port.cpp: + * tests/IOStream_Test.cpp: + * tests/SOCK_Connector_Test.cpp: + + Found some old ASYS macros still hanging around in code that wasn't + enabled on NT. + +Sat Apr 22 22:01:15 2000 Darrell Brunsch + + * ace/Local_Name_Space_T.cpp: + * ace/Naming_Context.cpp: + + Fixed some wchar related changes. + +Sat Apr 22 20:53:11 2000 Darrell Brunsch + + This is my first checkin of my Unicode changes. They should be + mostly harmless, since most platforms and build do not use Unicode + stuff, in which these changes *should* result in the exact same + behavior as before. + + But, if Unicode was being used, then chances are it is not going + to work without a few changes. A summary of the changes are: + + - Standardized wide char support to the following macros: + + ACE_HAS_WCHAR - if not defined, ACE will not use the type wchar_t + or provide any of the functions that use it. + ACE_USES_WCHAR - if defined, ACE will use wchar_t instead of char + for its strings (but not its buffers). + + This support has been mostly completed, but there are still some + loose ends that need to be cleaned up. + + Note also that even if ACE_USES_WCHAR is defined or not, both + wide and narrow versions of the string operations will be + available. + + - Removed all the ASYS_* macros (besides ASYS_INLINE). So all code + using ASYS_TEXT and ASYS_TCHAR should now use ACE_TEXT and + ACE_TCHAR. And unlike their predecessers, these *will* turn into + wide character versions when ACE_USES_WCHAR is defined. + + - Removed the macros ACE_HAS_WCHAR_TYPEDEFS_USHORT and + ACE_HAS_WCHAR_TYPEDEFS_CHAR since ACE will not depend on what + wchar_t defaults to. + + - Messed around with Windows CE support, most likely it broke it + even more. I've halted my work on Windows CE until after this + change, so I'll be fixing it up in upcoming checkins. + + - Since ACE_WString was changed, everything using it will now + not be available when ACE_HAS_WCHAR is not defined. + + The motivation for this change was that the Unicode support was + a mess and was very unintuitive. Since I was given the job of + maintaining it (since I'm doing Windows CE stuff now), I decided + to fix it instead of try to figure out what was currently + happening. A consistent design is much easier to explain and + maintain. + + * ace/ACE.h: + * ace/ACE.i: + * ace/ACE.cpp: + * ace/ARGV.cpp: + + Removed ACE's strecpy since all it did was call ACE_OS's strecpy. + + * ace/ace_wchar.h: (added) + + Moved all the unicode specific stuff here. + + * ace/SString.cpp: + * ace/SString.h: + * ace/SString.i: + + ACE_WString used to use ACE_USHORT16 instead of wchar_t. I + changed it so it does, since it will be more useful and intuitive + this way. + + * ace/Log_Record.cpp: + + We were using ACE_OS::fwrite to print the string. This didn't work + when the string was wchar_t, so this was changed to ACE_OS::fprintf + instead. + + * TODO: + * acconfig.h: + * configure.in: + * ace/ACE.cpp: + * ace/ACE.h: + * ace/ACE.i: + * ace/ARGV.cpp: + * ace/ARGV.h: + * ace/ARGV.i: + * ace/ATM_Addr.cpp: + * ace/ATM_Addr.h: + * ace/ATM_Connector.i: + * ace/ATM_QoS.cpp: + * ace/Acceptor.cpp: + * ace/Acceptor.h: + * ace/Activation_Queue.cpp: + * ace/Addr.cpp: + * ace/Arg_Shifter.cpp: + * ace/Arg_Shifter.h: + * ace/Asynch_Acceptor.cpp: + * ace/Asynch_IO.cpp: + * ace/Based_Pointer_T.cpp: + * ace/Basic_Types.h: + * ace/CORBA_Handler.cpp: + * ace/Cache_Map_Manager_T.cpp: + * ace/Cached_Connect_Strategy_T.cpp: + * ace/Caching_Strategies_T.i: + * ace/Capabilities.cpp: + * ace/Capabilities.h: + * ace/Capabilities.i: + * ace/Configuration.cpp: + * ace/Configuration.h: + * ace/Connector.cpp: + * ace/Connector.h: + * ace/Containers_T.cpp: + * ace/DEV_Addr.cpp: + * ace/DEV_Addr.h: + * ace/DEV_Addr.i: + * ace/DEV_Connector.i: + * ace/DLL.cpp: + * ace/DLL.h: + * ace/Dirent.h: + * ace/Dirent.i: + * ace/Dynamic_Service.cpp: + * ace/Dynamic_Service.h: + * ace/Env_Value_T.h: + * ace/Env_Value_T.i: + * ace/FIFO.cpp: + * ace/FIFO.h: + * ace/FIFO.i: + * ace/FIFO_Recv.cpp: + * ace/FIFO_Recv.h: + * ace/FIFO_Recv_Msg.cpp: + * ace/FIFO_Recv_Msg.h: + * ace/FIFO_Send.cpp: + * ace/FIFO_Send.h: + * ace/FIFO_Send_Msg.cpp: + * ace/FIFO_Send_Msg.h: + * ace/FILE_Addr.cpp: + * ace/FILE_Addr.h: + * ace/FILE_Addr.i: + * ace/FILE_Connector.cpp: + * ace/FILE_Connector.i: + * ace/Filecache.cpp: + * ace/Filecache.h: + * ace/Functor.h: + * ace/Functor.i: + * ace/Future.cpp: + * ace/Get_Opt.cpp: + * ace/Get_Opt.h: + * ace/Handle_Set.cpp: + * ace/Hash_Map_Manager_T.cpp: + * ace/Hash_Map_Manager_T.i: + * ace/High_Res_Timer.cpp: + * ace/High_Res_Timer.h: + * ace/INET_Addr.cpp: + * ace/INET_Addr.h: + * ace/INET_Addr.i: + * ace/IO_SAP.cpp: + * ace/IPC_SAP.cpp: + * ace/LSOCK.cpp: + * ace/LSOCK_CODgram.cpp: + * ace/LSOCK_Connector.cpp: + * ace/LSOCK_Dgram.cpp: + * ace/Local_Name_Space.cpp: + * ace/Local_Name_Space.h: + * ace/Local_Name_Space_T.cpp: + * ace/Local_Name_Space_T.h: + * ace/Local_Tokens.cpp: + * ace/Local_Tokens.h: + * ace/Local_Tokens.i: + * ace/Log_Msg.cpp: + * ace/Log_Msg.h: + * ace/Log_Record.cpp: + * ace/Log_Record.h: + * ace/Log_Record.i: + * ace/MEM_Acceptor.cpp: + * ace/MEM_Acceptor.h: + * ace/MEM_Acceptor.i: + * ace/MEM_Addr.cpp: + * ace/MEM_Addr.h: + * ace/MEM_Addr.i: + * ace/MEM_Connector.cpp: + * ace/MEM_SAP.cpp: + * ace/MEM_SAP.h: + * ace/Malloc.cpp: + * ace/Malloc_T.cpp: + * ace/Malloc_T.h: + * ace/Malloc_T.i: + * ace/Map_Manager.cpp: + * ace/Map_Manager.i: + * ace/Mem_Map.cpp: + * ace/Mem_Map.h: + * ace/Mem_Map.i: + * ace/Memory_Pool.cpp: + * ace/Memory_Pool.h: + * ace/Message_Block.cpp: + * ace/Message_Queue.cpp: + * ace/Message_Queue_T.cpp: + * ace/Module.cpp: + * ace/Module.h: + * ace/Module.i: + * ace/NT_Service.cpp: + * ace/NT_Service.h: + * ace/NT_Service.i: + * ace/Name_Proxy.cpp: + * ace/Name_Request_Reply.cpp: + * ace/Name_Space.cpp: + * ace/Name_Space.h: + * ace/Naming_Context.cpp: + * ace/Naming_Context.h: + * ace/OS.cpp: + * ace/OS.h: + * ace/OS.i: + * ace/Object_Manager.cpp: + * ace/Obstack.cpp: + * ace/Obstack.h: + * ace/POSIX_Asynch_IO.cpp: + * ace/Parse_Node.cpp: + * ace/Parse_Node.h: + * ace/Pipe.cpp: + * ace/Proactor.cpp: + * ace/Process.cpp: + * ace/Process.h: + * ace/Process.i: + * ace/Process_Manager.cpp: + * ace/QoS_Manager.cpp: + * ace/QoS_Session_Factory.cpp: + * ace/QoS_Session_Impl.cpp: + * ace/RB_Tree.cpp: + * ace/RB_Tree.i: + * ace/README: + * ace/Read_Buffer.cpp: + * ace/Registry.cpp: + * ace/Registry.h: + * ace/Registry_Name_Space.cpp: + * ace/Remote_Name_Space.cpp: + * ace/Remote_Name_Space.h: + * ace/Remote_Tokens.cpp: + * ace/Remote_Tokens.h: + * ace/Remote_Tokens.i: + * ace/SOCK.cpp: + * ace/SOCK_Acceptor.cpp: + * ace/SOCK_CODgram.cpp: + * ace/SOCK_Connector.cpp: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/SOCK_Dgram_Bcast.h: + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_Dgram_Mcast.h: + * ace/SOCK_Dgram_Mcast_QoS.cpp: + * ace/SOCK_Dgram_Mcast_QoS.h: + * ace/SPIPE_Acceptor.cpp: + * ace/SPIPE_Addr.cpp: + * ace/SPIPE_Addr.h: + * ace/SPIPE_Addr.i: + * ace/SPIPE_Connector.cpp: + * ace/SString.cpp: + * ace/SString.h: + * ace/SString.i: + * ace/SV_Message_Queue.cpp: + * ace/SV_Semaphore_Complex.cpp: + * ace/SV_Semaphore_Simple.cpp: + * ace/SV_Shared_Memory.cpp: + * ace/Select_Reactor_Base.cpp: + * ace/Select_Reactor_T.cpp: + * ace/Service_Config.cpp: + * ace/Service_Config.h: + * ace/Service_Config.i: + * ace/Service_Manager.cpp: + * ace/Service_Manager.h: + * ace/Service_Object.cpp: + * ace/Service_Object.h: + * ace/Service_Object.i: + * ace/Service_Repository.cpp: + * ace/Service_Repository.h: + * ace/Service_Types.cpp: + * ace/Service_Types.h: + * ace/Service_Types.i: + * ace/Shared_Memory_MM.cpp: + * ace/Shared_Memory_MM.h: + * ace/Shared_Memory_MM.i: + * ace/Shared_Object.cpp: + * ace/Shared_Object.h: + * ace/Singleton.cpp: + * ace/Stats.cpp: + * ace/Stats.h: + * ace/Stats.i: + * ace/Strategies_T.cpp: + * ace/Strategies_T.i: + * ace/Stream.cpp: + * ace/Stream.h: + * ace/Stream_Modules.cpp: + * ace/Stream_Modules.h: + * ace/Svc_Conf.h: + * ace/Svc_Conf.l: + * ace/Svc_Conf.y: + * ace/Svc_Conf_l.cpp: + * ace/Svc_Conf_y.cpp: + * ace/Svc_Handler.cpp: + * ace/Svc_Handler.h: + * ace/Synch.cpp: + * ace/Synch.h: + * ace/Synch.i: + * ace/Synch_T.cpp: + * ace/Synch_T.h: + * ace/Synch_T.i: + * ace/System_Time.cpp: + * ace/System_Time.h: + * ace/TLI.cpp: + * ace/TLI_Acceptor.cpp: + * ace/TLI_Connector.i: + * ace/TP_Reactor.cpp: + * ace/TP_Reactor.i: + * ace/Task_T.cpp: + * ace/Task_T.h: + * ace/Template_Instantiations.cpp: + * ace/Thread_Manager.cpp: + * ace/Time_Request_Reply.cpp: + * ace/Timeprobe_T.cpp: + * ace/Timer_Hash_T.cpp: + * ace/Timer_Heap_T.cpp: + * ace/Timer_List_T.cpp: + * ace/Timer_Queue_Adapters.cpp: + * ace/Timer_Queue_T.cpp: + * ace/Timer_Wheel_T.cpp: + * ace/Token.cpp: + * ace/Token.h: + * ace/Token_Collection.cpp: + * ace/Token_Collection.h: + * ace/Token_Collection.i: + * ace/Token_Invariants.cpp: + * ace/Token_Invariants.h: + * ace/Token_Manager.cpp: + * ace/Token_Manager.h: + * ace/Token_Request_Reply.cpp: + * ace/Token_Request_Reply.h: + * ace/Token_Request_Reply.i: + * ace/Trace.cpp: + * ace/Trace.h: + * ace/UPIPE_Acceptor.cpp: + * ace/UPIPE_Connector.cpp: + * ace/UPIPE_Connector.i: + * ace/WFMO_Reactor.cpp: + * ace/WFMO_Reactor.i: + * ace/WIN32_Asynch_IO.cpp: + * ace/WIN32_Proactor.cpp: + * ace/XTI_ATM_Mcast.i: + * ace/config-WinCE.h: + * ace/config-all.h: + * ace/config-ghs-common.h: + * ace/config-tandem.h: + * ace/config-win32-borland.h: + * ace/config-win32-common.h: + * ace/config-win32-msvc.h: + * ace/config-win32-visualage.h: + * ace/CLASSIX/CLASSIX_CLD_Connector.cpp: + * ace/CLASSIX/CLASSIX_CO_Acceptor.cpp: + * ace/CLASSIX/CLASSIX_Port.cpp: + * ace/CLASSIX/CLASSIX_Port.h: + * ace/CLASSIX/CLASSIX_Select_Reactor.cpp: + * apps/Gateway/Gateway/Options.cpp: + * apps/JAWS/PROTOTYPE/JAWS/JAWS.h: + * bin/envinfo.cpp: + * docs/ACE-guidelines.html: + * docs/tutorials/Chap_3/mm.cpp: + * examples/Connection/blocking/SPIPE-acceptor.cpp: + * examples/Connection/blocking/SPIPE-acceptor.h: + * examples/Connection/blocking/SPIPE-connector.cpp: + * examples/Connection/blocking/SPIPE-connector.h: + * examples/Connection/non_blocking/test_lsock_acceptor.cpp: + * examples/Connection/non_blocking/test_lsock_connector.cpp: + * examples/IPC_SAP/ATM_SAP/CPP-client.cpp: + * examples/IPC_SAP/ATM_SAP/CPP-server.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver.cpp: + * examples/IPC_SAP/UPIPE_SAP/ex3.cpp: + * examples/Naming/test_multiple_contexts.cpp: + * examples/Naming/test_non_existent.cpp: + * examples/Naming/test_writers.cpp: + * examples/Reactor/WFMO_Reactor/test_console_input.cpp: + * examples/Reactor/WFMO_Reactor/test_directory_changes.cpp: + * examples/Reactor/WFMO_Reactor/test_handle_close.cpp: + * examples/Reactor/WFMO_Reactor/test_registry_changes.cpp: + * examples/Registry/test_registry_iterator.cpp: + * examples/Service_Configurator/Misc/Timer_Service.cpp: + * examples/Service_Configurator/Misc/Timer_Service.h: + * examples/Service_Configurator/Misc/main.cpp: + * examples/Service_Configurator/Misc/main.dsp: + * examples/Web_Crawler/Options.cpp: + * examples/Web_Crawler/Options.h: + * examples/Web_Crawler/URL_Addr.cpp: + * examples/Web_Crawler/URL_Addr.h: + * netsvcs/clients/Logger/indirect_logging.cpp: + * netsvcs/clients/Naming/Client/main.cpp: + * netsvcs/lib/Logging_Strategy.cpp: + * netsvcs/lib/TS_Clerk_Handler.cpp: + * netsvcs/lib/TS_Clerk_Handler.h: + * performance-tests/Misc/test_naming.cpp: + * performance-tests/Server_Concurrency/Leader_Follower/leader_follower.cpp: + * performance-tests/Server_Concurrency/Queue_Based_Workers/workers.cpp: + * performance-tests/TCP/tcp_test.cpp: + * tests/ACE_Init_Test.dsp: + * tests/ARGV_Test.cpp: + * tests/Atomic_Op_Test.cpp: + * tests/Auto_IncDec_Test.cpp: + * tests/Barrier_Test.cpp: + * tests/Basic_Types_Test.cpp: + * tests/Buffer_Stream_Test.cpp: + * tests/CDR_File_Test.cpp: + * tests/CDR_Test.cpp: + * tests/Cache_Map_Manager_Test.cpp: + * tests/Cached_Accept_Conn_Test.cpp: + * tests/Cached_Conn_Test.cpp: + * tests/Capabilities_Test.cpp: + * tests/Collection_Test.cpp: + * tests/Conn_Test.cpp: + * tests/DLL_Test.cpp: + * tests/DLL_Test.h: + * tests/DLList_Test.cpp: + * tests/Dynamic_Priority_Test.cpp: + * tests/Enum_Interfaces_Test.cpp: + * tests/Env_Value_Test.cpp: + * tests/FlReactor_Test.cpp: + * tests/Future_Set_Test.cpp: + * tests/Future_Test.cpp: + * tests/Handle_Set_Test.cpp: + * tests/Hash_Map_Bucket_Iterator_Test.cpp: + * tests/Hash_Map_Manager_Test.cpp: + * tests/High_Res_Timer_Test.cpp: + * tests/IOStream_Test.cpp: + * tests/Lazy_Map_Manager_Test.cpp: + * tests/Log_Msg_Test.cpp: + * tests/MM_Shared_Memory_Test.cpp: + * tests/MT_Reactor_Timer_Test.cpp: + * tests/MT_SOCK_Test.cpp: + * tests/Malloc_Test.cpp: + * tests/Map_Manager_Test.cpp: + * tests/Map_Test.cpp: + * tests/Mem_Map_Test.cpp: + * tests/Message_Block_Test.cpp: + * tests/Message_Queue_Notifications_Test.cpp: + * tests/Message_Queue_Test.cpp: + * tests/Naming_Test.cpp: + * tests/New_Fail_Test.cpp: + * tests/Notify_Performance_Test.cpp: + * tests/Object_Manager_Test.cpp: + * tests/OrdMultiSet_Test.cpp: + * tests/Pipe_Test.cpp: + * tests/Priority_Buffer_Test.cpp: + * tests/Priority_Reactor_Test.cpp: + * tests/Priority_Task_Test.cpp: + * tests/Process_Manager_Test.cpp: + * tests/Process_Mutex_Test.cpp: + * tests/Process_Strategy_Test.cpp: + * tests/Process_Strategy_Test.h: + * tests/RB_Tree_Test.cpp: + * tests/Reactor_Exceptions_Test.cpp: + * tests/Reactor_Notify_Test.cpp: + * tests/Reactor_Performance_Test.cpp: + * tests/Reactor_Timer_Test.cpp: + * tests/Reactors_Test.cpp: + * tests/Reader_Writer_Test.cpp: + * tests/Recursive_Mutex_Test.cpp: + * tests/Reverse_Lock_Test.cpp: + * tests/SOCK_Connector_Test.cpp: + * tests/SOCK_Send_Recv_Test.cpp: + * tests/SOCK_Test.cpp: + * tests/SPIPE_Test.cpp: + * tests/SString_Test.cpp: + * tests/SV_Shared_Memory_Test.cpp: + * tests/Semaphore_Test.cpp: + * tests/Service_Config_Test.cpp: + * tests/Signal_Test.cpp: + * tests/Sigset_Ops_Test.cpp: + * tests/Simple_Message_Block_Test.cpp: + * tests/Svc_Handler_Test.cpp: + * tests/TSS_Test.cpp: + * tests/Task_Test.cpp: + * tests/Thread_Manager_Test.cpp: + * tests/Thread_Mutex_Test.cpp: + * tests/Thread_Pool_Reactor_Test.cpp: + * tests/Thread_Pool_Test.cpp: + * tests/Time_Service_Test.cpp: + * tests/Time_Value_Test.cpp: + * tests/Timeprobe_Test.cpp: + * tests/Timer_Queue_Test.cpp: + * tests/TkReactor_Test.cpp: + * tests/Tokens_Test.cpp: + * tests/UPIPE_SAP_Test.cpp: + * tests/Upgradable_RW_Test.cpp: + * tests/XtReactor_Test.cpp: + * tests/test_config.h: + * websvcs/lib/URL_Addr.cpp: + * websvcs/lib/URL_Addr.h: + * websvcs/lib/URL_Addr.i: + * websvcs/tests/Test_URL_Addr.cpp: + + Made all the appropriate changes to support the new wide char + policy. Most changes were macro changes, changing ASYS_* to + ACE_*, changing char's to ACE_TCHAR's, adding in ACE_TEXT ()'s + when necessary, etc. + +Sat Apr 22 18:41:06 2000 Vishal Kachroo + + * ace/SOCK_Dgram_Mcast.h: + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_Dgram_Mcast.i: Removed the QoS enabled overloaded + methods. + + * ace/SOCK_Dgram_Mcast_QoS.h: + * ace/SOCK_Dgram_Mcast_QoS.cpp: + * ace/SOCK_Dgram_Mcast_QoS.i: Added this new class that derives from + ACE_SOCK_Dgram_Mcast and handles all the QoS functionality that + was being done by the latter. + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Added the ace/SOCK_Dgram_Mcast_QoS.{cpp,i,h} + +Fri Apr 21 10:23:19 2000 Darrell Brunsch + + * bin/msvc_auto_compile.pl: + + Removed all chdir's and fixed a bug with specifying multiple -dir's. + +Fri Apr 21 09:13:20 2000 Carlos O'Ryan + + * websvcs/lib/URL_Addr.cpp: + The URL schemes are supposed to be case insensitive, thanks to + Paul Carreiro for pointing this out. + +Thu Apr 20 21:05:42 2000 Darrell Brunsch + + * bin/msvc_auto_compile.pl: + + Added a -core for only the core libraries. Also fixed a problem + with specifying incorrect directories and the -DLL/-Debug/etc. + macros. + +Thu Apr 20 18:11:48 2000 Darrell Brunsch + + * examples/DLL/Main.dsp: + * examples/DLL/Newsweek.dsp: + * examples/DLL/Today.dsp + * examples/Configuration/Configuration.dsw: + * examples/Bounded_Packet_Relay/Bounded_Packet_Relay.dsp: + * examples/Configuration/Test.dsp: + * examples/IPC_SAP/ATM_SAP/ATM_SAP.dsw: + * examples/IPC_SAP/ATM_SAP/CPP_client.dsp: + * examples/IPC_SAP/ATM_SAP/CPP_server.dsp: + * examples/IPC_SAP/SOCK_SAP/CPP_memclient.dsp: + * examples/Mem_Map/file-reverse/file_reverse.dsp: + * examples/NT_Service/NT_Service.dsp: + * examples/NT_Service/NT_Service.dsw: + * examples/OS/Process/Process.dsp: + * examples/OS/Process/imore.dsp: + * examples/QOS/client.dsp: + * examples/QOS/server.dsp: + * examples/Reactor/Misc/demuxing.dsp: + * examples/Reactor/Multicast/client.dsp: + * examples/Reactor/Multicast/server.dsp: + * examples/Service_Configurator/Misc/Timer.dsp: + * examples/Service_Configurator/Misc/main.dsp: + * examples/Timer_Queue/Async_Timer_Queue_Test.dsp: + * examples/Timer_Queue/Reactor_Timer_Queue_Test.dsp: + * examples/Timer_Queue/Thread_Timer_Queue_Test.dsp: + * examples/Timer_Queue/Timer_Queue.dsw: + * examples/Web_Crawler/Web_Crawler.dsp: + + Fixed miscellaneous problems with these projects and workspaces. + Some projects were missing from workspaces or listed incorrectly. + Many project didn't have the correct include paths or definitions. + + * examples/Reactor/Proactor/post_completion.dsp: (removed) + + There was already a post_completions.dsp that was being used. + + * examples/OS/Process/imore.cpp: + * examples/OS/Process/process.cpp: + + Changed the type of the variables used with Process::wait from + int to ACE_exitcode. + + * examples/Reactor/WFMO_Reactor/test_abandoned.cpp: + * examples/Reactor/WFMO_Reactor/test_apc.cpp: + + Missing parentheses. + + * Synch-Benchmarks/Synch_Lib/Synch_Lib.dsp: + + Changed the name of the project so win32_auto_compile.pl works + with it properly. + + * bin/msvc_auto_compile.pl: (added) + + This is a new script for autocompiling with MSVC 6. + Eventually this should replace auto_compile_win32.pl. It still + needs more directories added to it and tested before we put it + into production + + * bin/vc_filter.pl: + + Updated to properly color code output from msvc_auto_compile.pl + also. + +Thu Apr 20 09:50:49 2000 Carlos O'Ryan + + * ace/RB_Tree.h: + * ace/RB_Tree.i: + Fixed implementation of the end() method. It should return a + singular iterator that is different from all valid iterator, not + an iterator pointing to the last element in the collection. + +Thu Apr 20 08:53:31 2000 Carlos O'Ryan + + * ace/CDR_Stream.i: + Fixed problem in the align_write_ptr() method. It was optimized + for the case where there was enough room in the current buffer, + but the optimization broke with a previous fix from Feb 29. + +Thu Apr 20 08:40:00 2000 Chris Gill + + * examples/Bounded_Packet_Relay/BPR_Drivers_T.h, + examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.cpp: + Fixed warnings from g++ + +Wed Apr 19 21:53:52 2000 Douglas C. Schmidt + + * examples/Bounded_Packet_Relay: Added some missing template + instantiations and other assorted problems. Thanks to Aoxiang + Xu for reporting these. + +Wed Apr 19 07:04:13 2000 Douglas C. Schmidt + + * ace/Containers_T.cpp (copy_nodes): insert_head() should have + been insert_tail(). Thanks to Umar Syyid for clarifying this. + Also, added some comments to explain what's going on in + insert_tail() since the code was somewhat non-intuitive ;-). + +Wed Apr 19 15:00:44 2000 Carlos O'Ryan + + * apps/Makefile: + * apps/drwho/Makefile: + * performance-tests/Makefile: + * performance-tests/Server_Concurrency/Leader_Follower/Makefile: + * performance-tests/Server_Concurrency/Queue_Based_Workers/Makefile: + More Makefiles that were not in the default compilation path, + added them and update dependencies. + + * bin/Makefile: + * examples/Bounded_Packet_Relay/Makefile: + * examples/QOS/Makefile: + * performance-tests/RPC/Makefile: + * performance-tests/Synch-Benchmarks/Base_Test/Makefile: + * performance-tests/Synch-Benchmarks/Perf_Test/Makefile: + * performance-tests/Synch-Benchmarks/Synch_Lib/Makefile: + * ASNMP/asnmp/Makefile: + * ASNMP/examples/get/Makefile: + * ASNMP/examples/next/Makefile: + * ASNMP/examples/set/Makefile: + * ASNMP/examples/trap/Makefile: + * ASNMP/examples/walk/Makefile: + * ASNMP/tests/Makefile: + Just updated dependencies. More fixes are needed to put them in + the normal compilation path. + + * performance-tests/Server_Concurrency/Queue_Based_Workers/workers.cpp: + * performance-tests/Server_Concurrency/Leader_Follower/leader_follower.cpp: + They wouldn't compile on platforms that lack context switch + counters in rusage. Conditionally compile that code to avoid + the problem. + +Wed Apr 19 14:09:29 2000 Darrell Brunsch + + * etc/Svc_Conf_l.cpp.diff: Fixed the diff so it generates + the correct Svc_Conf_l.cpp. + +Wed Apr 19 12:48:21 2000 Balachandran Natarajan + + * ace/ACE.cpp: Added a missing pointer in the signature of + ACE::t_rcv_n_i (). + +Wed Apr 19 10:11:23 2000 Darrell Brunsch + + * tests/Atomic_Op_Test.dsp: + * tests/Auto_IncDec_Test.dsp: + * tests/Barrier_Test.dsp: + * tests/Basic_Types_Test.dsp: + * tests/Buffer_Stream_Test.dsp: + * tests/CDR_File_Test.dsp: + * tests/CDR_Test.dsp: + * tests/Cache_Map_Manager_Test.dsp: + * tests/Cached_Accept_Conn_Test.dsp: + * tests/Cached_Conn_Test.dsp: + * tests/Capabilities_Test.dsp: + * tests/Collection_Test.dsp: + * tests/Conn_Test.dsp: + * tests/DLList_Test.dsp: + * tests/Dynamic_Priority_Test.dsp: + * tests/Enum_Interfaces_Test.dsp: + * tests/Env_Value_Test.dsp: + * tests/Future_Set_Test.dsp: + * tests/Future_Test.dsp: + * tests/Handle_Set_Test.dsp: + * tests/Hash_Map_Bucket_Iterator_Test.dsp: + * tests/Hash_Map_Manager_Test.dsp: + * tests/High_Res_Timer_Test.dsp: + * tests/IOStream_Test.dsp: + * tests/Lazy_Map_Manager_Test.dsp: + * tests/MM_Shared_Memory_Test.dsp: + * tests/MT_Reactor_Timer_Test.dsp: + * tests/MT_SOCK_Test.dsp: + * tests/Malloc_Test.dsp: + * tests/Map_Manager_Test.dsp: + * tests/Map_Test.dsp: + * tests/Mem_Map_Test.dsp: + * tests/Message_Block_Test.dsp: + * tests/Message_Queue_Notifications_Test.dsp: + * tests/Message_Queue_Test.dsp: + * tests/Naming_Test.dsp: + * tests/New_Fail_Test.dsp: + * tests/Notify_Performance_Test.dsp: + * tests/Object_Manager_Test.dsp: + * tests/OrdMultiSet_Test.dsp: + * tests/Pipe_Test.dsp: + * tests/Priority_Buffer_Test.dsp: + * tests/Priority_Reactor_Test.dsp: + * tests/Priority_Task_Test.dsp: + * tests/Process_Manager_Test.dsp: + * tests/Process_Mutex_Test.dsp: + * tests/Process_Strategy_Test.dsp: + * tests/RB_Tree_Test.dsp: + * tests/Reactor_Exceptions_Test.dsp: + * tests/Reactor_Notify_Test.dsp: + * tests/Reactor_Performance_Test.dsp: + * tests/Reactor_Timer_Test.dsp: + * tests/Reactors_Test.dsp: + * tests/Reader_Writer_Test.dsp: + * tests/Recursive_Mutex_Test.dsp: + * tests/Reverse_Lock_Test.dsp: + * tests/SOCK_Connector_Test.dsp: + * tests/SOCK_Send_Recv_Test.dsp: + * tests/SOCK_Test.dsp: + * tests/SPIPE_Test.dsp: + * tests/SString_Test.dsp: + * tests/SV_Shared_Memory_Test.dsp: + * tests/Semaphore_Test.dsp: + * tests/Service_Config_Test.dsp: + * tests/Sigset_Ops_Test.dsp: + * tests/Simple_Message_Block_Test.dsp: + * tests/Svc_Handler_Test.dsp: + * tests/TSS_Test.dsp: + * tests/Task_Test.dsp: + * tests/Thread_Manager_Test.dsp: + * tests/Thread_Mutex_Test.dsp: + * tests/Thread_Pool_Reactor_Test.dsp: + * tests/Thread_Pool_Test.dsp: + * tests/Time_Service_Test.dsp: + * tests/Time_Value_Test.dsp: + * tests/Timeprobe_Test.dsp: + * tests/Timer_Queue_Test.dsp: + * tests/Tokens_Test.dsp: + * tests/UPIPE_SAP_Test.dsp: + * tests/Upgradable_RW_Test.dsp: + * tests/pharlap/Atomic_Op_Test.dsp: (added) + * tests/pharlap/Auto_IncDec_Test.dsp: (added) + * tests/pharlap/Barrier_Test.dsp: (added) + * tests/pharlap/Basic_Types_Test.dsp: (added) + * tests/pharlap/Buffer_Stream_Test.dsp: (added) + * tests/pharlap/CDR_File_Test.dsp: (added) + * tests/pharlap/CDR_Test.dsp: (added) + * tests/pharlap/Cache_Map_Manager_Test.dsp: (added) + * tests/pharlap/Cached_Accept_Conn_Test.dsp: (added) + * tests/pharlap/Cached_Conn_Test.dsp: (added) + * tests/pharlap/Capabilities_Test.dsp: (added) + * tests/pharlap/Collection_Test.dsp: (added) + * tests/pharlap/Conn_Test.dsp: (added) + * tests/pharlap/DLList_Test.dsp: (added) + * tests/pharlap/Dynamic_Priority_Test.dsp: (added) + * tests/pharlap/Enum_Interfaces_Test.dsp: (added) + * tests/pharlap/Env_Value_Test.dsp: (added) + * tests/pharlap/Future_Set_Test.dsp: (added) + * tests/pharlap/Future_Test.dsp: (added) + * tests/pharlap/Handle_Set_Test.dsp: (added) + * tests/pharlap/Hash_Map_Bucket_Iterator_Test.dsp: (added) + * tests/pharlap/Hash_Map_Manager_Test.dsp: (added) + * tests/pharlap/High_Res_Timer_Test.dsp: (added) + * tests/pharlap/IOStream_Test.dsp: (added) + * tests/pharlap/Lazy_Map_Manager_Test.dsp: (added) + * tests/pharlap/MM_Shared_Memory_Test.dsp: (added) + * tests/pharlap/MT_Reactor_Timer_Test.dsp: (added) + * tests/pharlap/MT_SOCK_Test.dsp: (added) + * tests/pharlap/Malloc_Test.dsp: (added) + * tests/pharlap/Map_Manager_Test.dsp: (added) + * tests/pharlap/Map_Test.dsp: (added) + * tests/pharlap/Mem_Map_Test.dsp: (added) + * tests/pharlap/Message_Block_Test.dsp: (added) + * tests/pharlap/Message_Queue_Notifications_Test.dsp: (added) + * tests/pharlap/Message_Queue_Test.dsp: (added) + * tests/pharlap/Naming_Test.dsp: (added) + * tests/pharlap/New_Fail_Test.dsp: (added) + * tests/pharlap/Notify_Performance_Test.dsp: (added) + * tests/pharlap/Object_Manager_Test.dsp: (added) + * tests/pharlap/OrdMultiSet_Test.dsp: (added) + * tests/pharlap/Pipe_Test.dsp: (added) + * tests/pharlap/Priority_Buffer_Test.dsp: (added) + * tests/pharlap/Priority_Reactor_Test.dsp: (added) + * tests/pharlap/Priority_Task_Test.dsp: (added) + * tests/pharlap/Process_Manager_Test.dsp: (added) + * tests/pharlap/Process_Mutex_Test.dsp: (added) + * tests/pharlap/Process_Strategy_Test.dsp: (added) + * tests/pharlap/RB_Tree_Test.dsp: (added) + * tests/pharlap/Reactor_Exceptions_Test.dsp: (added) + * tests/pharlap/Reactor_Notify_Test.dsp: (added) + * tests/pharlap/Reactor_Performance_Test.dsp: (added) + * tests/pharlap/Reactor_Timer_Test.dsp: (added) + * tests/pharlap/Reactors_Test.dsp: (added) + * tests/pharlap/Reader_Writer_Test.dsp: (added) + * tests/pharlap/Recursive_Mutex_Test.dsp: (added) + * tests/pharlap/Reverse_Lock_Test.dsp: (added) + * tests/pharlap/SOCK_Connector_Test.dsp: (added) + * tests/pharlap/SOCK_Send_Recv_Test.dsp: (added) + * tests/pharlap/SOCK_Test.dsp: (added) + * tests/pharlap/SPIPE_Test.dsp: (added) + * tests/pharlap/SString_Test.dsp: (added) + * tests/pharlap/SV_Shared_Memory_Test.dsp: (added) + * tests/pharlap/Semaphore_Test.dsp: (added) + * tests/pharlap/Service_Config_Test.dsp: (added) + * tests/pharlap/Sigset_Ops_Test.dsp: (added) + * tests/pharlap/Simple_Message_Block_Test.dsp: (added) + * tests/pharlap/Svc_Handler_Test.dsp: (added) + * tests/pharlap/TSS_Test.dsp: (added) + * tests/pharlap/Task_Test.dsp: (added) + * tests/pharlap/Thread_Manager_Test.dsp: (added) + * tests/pharlap/Thread_Mutex_Test.dsp: (added) + * tests/pharlap/Thread_Pool_Reactor_Test.dsp: (added) + * tests/pharlap/Thread_Pool_Test.dsp: (added) + * tests/pharlap/Time_Service_Test.dsp: (added) + * tests/pharlap/Time_Value_Test.dsp: (added) + * tests/pharlap/Timeprobe_Test.dsp: (added) + * tests/pharlap/Timer_Queue_Test.dsp: (added) + * tests/pharlap/Tokens_Test.dsp: (added) + * tests/pharlap/UPIPE_SAP_Test.dsp: (added) + * tests/pharlap/Upgradable_RW_Test.dsp: (added) + * tests/pharlap/pharlap_tests.dsw: (added) + + Moved all the pharlap configurations to their own dsp files in + their own subdirectory. This was done so those of us who don't + have pharlap can load tests.dsw and do a select all in the Build + All window and only get the relavant builds. + + * tests/run_pharlap_tests.bat: (removed) + * tests/pharlap/run_pharlap_tests.bat: (added) + + Moved this file to the pharlap directory also. + +Wed Apr 19 10:03:10 2000 Carlos O'Ryan + + * ace/SOCK_Stream.i: + The new flag was present but not used in several + methods, just forward them to the ACE::xxx() operation. + +Wed Apr 19 08:18:30 2000 Carlos O'Ryan + + * */Makefile: + Updated all the dependencies + +Wed Apr 19 09:44:14 2000 Jeff Parsons + + * ace/Log_Msg.cpp: + Changed the signature of a (WIN32-specific) call to + send_n, to resolve a function overload ambiguity on NT. + +Wed Apr 19 00:00:29 2000 Irfan Pyarali + + * ace: There are two general use cases of the _n() methods: + + (1) The method keeps looping, until all the data has been + transmitted, or until timeout occurs, or until the handle is + closed. This use case occurs when one does not know how much + data is coming across in the case of a recv(), or one wants to + know exactly how much data was sent in the case of a send(). + And one don't want to treat a premature eof as an error but + wants to know the exact number of bytes that have been + transferred so far. + + (2) In other cases when one knows exactly how much data is + coming across in the case of recv(), or how much data needs to + be transmitted in the case of a send(). Premature closing of the + handle is usually an error. + + By adding an additional parameter to all the _n() + methods, the above two use cases can be distinguished. The + following files were modified: + + - OS + - ACE + - SOCK_Stream + - TLI_Stream + + The other IO classes such as FIFO, MEM_IO, PIPE, etc., should + also include this change. However, they should first get fixed + with respect to timeouts. If comes before + timeouts, ordering of the parameters will get messed up. + + Thanks to Steffen Winther Sorensen for + reporting this second use of the _n() methods. + + * ace/OS.h: t_snd() interface was fixed. The buffer parameter + should be const. + + * ace/ACE: Added support for TLI I/O functions to the ACE class. + +Tue Apr 18 19:08:37 2000 Darrell Brunsch + + * ace/config-all.h: (added) + * ace/inc_user_config.h: (removed) + * ace/Codeset_IBM1047.h: + * ace/NT_Service.h: + * ace/config-win32-common.h: + * ace/OS.h: + + Started moving several of the macros from OS.h to config-all.h. + The plan is to eventually split up OS.h, and config-all is a + place where the macros (which are not specific to any part of + ACE_OS) can go. config-all.h also ate inc_user_config.h. + + * ASNMP/agent/main.cpp: + * ace/iosfwd.h: + * ace/streams.h: + * apps/JAWS/PROTOTYPE/JAWS/Assoc_Array.cpp: + * tests/OrdMultiSet_Test.cpp: + * tests/Time_Value_Test.cpp: + * tests/test_config.h: + + Since inc_user_config.h was eaten, needed to change includes of + it to config-all.h. + + * bin/generate_export_file.pl: (added) + * bin/GenExportH.BAT: (removed) + + Replaced the batch file with a perl file so + - people can generate on other platforms + - it can generate Word_export and WORD_BUILD_DLL + (the batch file couldn't change the case of the key) + + * ace/ACE_export.h: (added) + * ace/svc_export.h: (added) + + Took the existing ACE_Export and ACE_Svc_Export macro and + moved them to separate files. Also tested out the new + generate_export_file.pl. + + * ace/ACE.cpp: + * ace/ARGV.cpp: + * ace/ATM_Acceptor.cpp: + * ace/ATM_Addr.cpp: + * ace/ATM_Connector.cpp: + * ace/ATM_Params.cpp: + * ace/ATM_QoS.cpp: + * ace/ATM_Stream.cpp: + * ace/Acceptor.cpp: + * ace/Activation_Queue.cpp: + * ace/Active_Map_Manager.cpp: + * ace/Addr.cpp: + * ace/Arg_Shifter.cpp: + * ace/Asynch_Acceptor.cpp: + * ace/Asynch_IO.cpp: + * ace/Asynch_IO_Impl.cpp: + * ace/Auto_IncDec_T.cpp: + * ace/Auto_Ptr.cpp: + * ace/Based_Pointer_Repository.cpp: + * ace/Based_Pointer_T.cpp: + * ace/Basic_Types.cpp: + * ace/CDR_Stream.cpp: + * ace/CORBA_Handler.cpp: + * ace/CORBA_Ref.cpp: + * ace/Cache_Map_Manager_T.cpp: + * ace/Cached_Connect_Strategy_T.cpp: + * ace/Capabilities.cpp: + * ace/Cleanup_Strategies_T.cpp: + * ace/Configuration.cpp: + * ace/Connector.cpp: + * ace/Containers.cpp: + * ace/Containers_T.cpp: + * ace/DEV.cpp: + * ace/DEV_Addr.cpp: + * ace/DEV_Connector.cpp: + * ace/DEV_IO.cpp: + * ace/DLL.cpp: + * ace/Date_Time.cpp: + * ace/Dirent.cpp: + * ace/Dump.cpp: + * ace/Dynamic.cpp: + * ace/Dynamic_Service.cpp: + * ace/Event_Handler.cpp: + * ace/Event_Handler_T.cpp: + * ace/FIFO.cpp: + * ace/FIFO_Recv.cpp: + * ace/FIFO_Recv_Msg.cpp: + * ace/FIFO_Send.cpp: + * ace/FIFO_Send_Msg.cpp: + * ace/FILE.cpp: + * ace/FILE_Addr.cpp: + * ace/FILE_Connector.cpp: + * ace/FILE_IO.cpp: + * ace/Filecache.cpp: + * ace/FlReactor.cpp: + * ace/Functor.cpp: + * ace/Functor_T.cpp: + * ace/Future.cpp: + * ace/Future_Set.cpp: + * ace/Get_Opt.cpp: + * ace/Handle_Set.cpp: + * ace/Hash_Cache_Map_Manager_T.cpp: + * ace/Hash_Map_Manager.cpp: + * ace/High_Res_Timer.cpp: + * ace/INET_Addr.cpp: + * ace/IOStream.cpp: + * ace/IOStream_T.cpp: + * ace/IO_SAP.cpp: + * ace/IPC_SAP.cpp: + * ace/LSOCK.cpp: + * ace/LSOCK_Acceptor.cpp: + * ace/LSOCK_CODgram.cpp: + * ace/LSOCK_Connector.cpp: + * ace/LSOCK_Dgram.cpp: + * ace/LSOCK_Stream.cpp: + * ace/Local_Name_Space.cpp: + * ace/Local_Name_Space_T.cpp: + * ace/Local_Tokens.cpp: + * ace/Log_Msg.cpp: + * ace/Log_Record.cpp: + * ace/MEM_Acceptor.cpp: + * ace/MEM_Addr.cpp: + * ace/MEM_Connector.cpp: + * ace/MEM_IO.cpp: + * ace/MEM_SAP.cpp: + * ace/MEM_Stream.cpp: + * ace/Malloc.cpp: + * ace/Malloc_T.cpp: + * ace/Managed_Object.cpp: + * ace/Map.cpp: + * ace/Map_Manager.cpp: + * ace/Mem_Map.cpp: + * ace/Memory_Pool.cpp: + * ace/Message_Block.cpp: + * ace/Message_Block_T.cpp: + * ace/Message_Queue.cpp: + * ace/Message_Queue_T.cpp: + * ace/Method_Request.cpp: + * ace/Module.cpp: + * ace/Msg_WFMO_Reactor.cpp: + * ace/Multiplexor.cpp: + * ace/NT_Service.cpp: + * ace/Name_Proxy.cpp: + * ace/Name_Request_Reply.cpp: + * ace/Name_Space.cpp: + * ace/Naming_Context.cpp: + * ace/OS.cpp: + * ace/Object_Manager.cpp: + * ace/Obstack.cpp: + * ace/POSIX_Proactor.cpp: + * ace/Pair.cpp: + * ace/Parse_Node.cpp: + * ace/Pipe.cpp: + * ace/Priority_Reactor.cpp: + * ace/Proactor.cpp: + * ace/Process.cpp: + * ace/Process_Manager.cpp: + * ace/Profile_Timer.cpp: + * ace/QoS_Manager.cpp: + * ace/QoS_Session_Factory.cpp: + * ace/QoS_Session_Impl.cpp: + * ace/Reactor.cpp: + * ace/Read_Buffer.cpp: + * ace/Registry.cpp: + * ace/Registry_Name_Space.cpp: + * ace/Remote_Name_Space.cpp: + * ace/Remote_Tokens.cpp: + * ace/SOCK.cpp: + * ace/SOCK_Acceptor.cpp: + * ace/SOCK_CODgram.cpp: + * ace/SOCK_Connector.cpp: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_IO.cpp: + * ace/SOCK_Stream.cpp: + * ace/SPIPE.cpp: + * ace/SPIPE_Acceptor.cpp: + * ace/SPIPE_Addr.cpp: + * ace/SPIPE_Connector.cpp: + * ace/SPIPE_Stream.cpp: + * ace/SString.cpp: + * ace/SV_Message.cpp: + * ace/SV_Message_Queue.cpp: + * ace/SV_Semaphore_Complex.cpp: + * ace/SV_Semaphore_Simple.cpp: + * ace/SV_Shared_Memory.cpp: + * ace/Sched_Params.cpp: + * ace/Select_Reactor.cpp: + * ace/Select_Reactor_Base.cpp: + * ace/Select_Reactor_T.cpp: + * ace/Service_Config.cpp: + * ace/Service_Manager.cpp: + * ace/Service_Object.cpp: + * ace/Service_Repository.cpp: + * ace/Service_Types.cpp: + * ace/Shared_Memory.cpp: + * ace/Shared_Memory_MM.cpp: + * ace/Shared_Memory_SV.cpp: + * ace/Shared_Object.cpp: + * ace/Signal.cpp: + * ace/Singleton.cpp: + * ace/Stats.cpp: + * ace/Strategies.cpp: + * ace/Strategies_T.cpp: + * ace/Stream.cpp: + * ace/Stream_Modules.cpp: + * ace/Svc_Conf.y: + * ace/Svc_Conf_l.cpp: + * ace/Svc_Conf_y.cpp: + * ace/Svc_Handler.cpp: + * ace/Synch.cpp: + * ace/Synch_Options.cpp: + * ace/Synch_T.cpp: + * ace/System_Time.cpp: + * ace/TLI.cpp: + * ace/TLI_Acceptor.cpp: + * ace/TLI_Connector.cpp: + * ace/TLI_Stream.cpp: + * ace/TP_Reactor.cpp: + * ace/TTY_IO.cpp: + * ace/Task.cpp: + * ace/Task_T.cpp: + * ace/Thread.cpp: + * ace/Thread_Manager.cpp: + * ace/Time_Request_Reply.cpp: + * ace/Timeprobe.cpp: + * ace/Timer_Hash.cpp: + * ace/Timer_Hash_T.cpp: + * ace/Timer_Heap.cpp: + * ace/Timer_Heap_T.cpp: + * ace/Timer_List.cpp: + * ace/Timer_List_T.cpp: + * ace/Timer_Queue.cpp: + * ace/Timer_Queue_Adapters.cpp: + * ace/Timer_Queue_T.cpp: + * ace/Timer_Wheel.cpp: + * ace/Timer_Wheel_T.cpp: + * ace/TkReactor.cpp: + * ace/Token.cpp: + * ace/Token_Collection.cpp: + * ace/Token_Invariants.cpp: + * ace/Token_Manager.cpp: + * ace/Token_Request_Reply.cpp: + * ace/Trace.cpp: + * ace/Typed_SV_Message.cpp: + * ace/Typed_SV_Message_Queue.cpp: + * ace/UNIX_Addr.cpp: + * ace/UPIPE_Acceptor.cpp: + * ace/UPIPE_Connector.cpp: + * ace/UPIPE_Stream.cpp: + * ace/WFMO_Reactor.cpp: + * ace/WIN32_Asynch_IO.cpp: + * ace/WIN32_Proactor.cpp: + * ace/XTI_ATM_Mcast.cpp: + * ace/XtReactor.cpp: + * include/makeinclude/ace_flags.bor: + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + + The definition of ACE_BUILD_DLL was moved from the .cpp files + to the project files - so it is now handled like most of the + other libraries in ACE and TAO. + +Tue Apr 18 21:32:21 2000 Douglas C. Schmidt + + * ace/OS.i (sema_init): Fixed another problem that required + a cast to ACE_mutexattr_t *. Thanks to Priyanka for + reporting this. + +Tue Apr 18 19:39:41 2000 Douglas C. Schmidt + + * ace/Synch.cpp, + * ace/OS.cpp: Added a cast to ACE_mutexattr_t *. Thanks to + Darrell for pointing this out. + +Tue Apr 18 15:18:53 2000 Douglas C. Schmidt + + * ace/OS.h, + * ace/OS.i, + * ace/Synch.h, + * ace/Synch.cpp: Updated the ACE_OS::*mutex_init() methods (and the + corresponding ACE_Thread_Mutex, ACE_Mutex, and + ACE_Recursive_Thread_Mutex classes) so that they now take an + optional ACE_mutexattr_t * rather than just a void *. This is + nice because it makes it possible to pass in special attributes, + such as the mutex prioceiling attribute, to the underlying + pthreads mutex (assuming we're running on pthreads, of course). + Thanks to lafortg@res.raytheon.com for motivating this. + + * ace/Containers_T.cpp (copy_nodes): Added a call to the + allocator->malloc() rather than new. Thanks to Umar Syyid + for reporting this. + +Tue Apr 18 14:06:32 2000 Jeff Parsons + + * ace/CDR_Stream.cpp: + Patch to ACE_CDR::consolidate() sent in by Carlos, that + fixes a bug reported by Harald Finster , + and an added check for 0 value of the 'length' arg in + read_array() and write_array(), that fixes [Bug 540], + reported by Mathew Samuel . + +Tue Apr 18 11:47:57 2000 Ossama Othman + + * ace/SOCK_Connector.cpp: + + Removed inclusion of `ace/Handle_Set.h'. The ACE_SOCK_Connector + doesn't directly use an ACE_Handle_Set. + + * ace/Makefile: + + Updated dependencies. + +Tue Apr 18 08:54:04 2000 Darrell Brunsch + + * bin/vc_filter.pl: + + Brand spankin' new filter script for Win32 auto build results. + +Sun Apr 16 22:24:34 2000 Douglas C. Schmidt + + * ACE-INSTALL.html: Updated the link for GNU make to be more + specific. Thanks to Xiaojun Wu for + reporting this. BTW, Xiaojun was the 900th contributor to + ACE+TAO, so he gets a free copy of ACE+TAO! + +Mon Apr 17 20:10:18 2000 Vishal + + * ACE version 5.1.1 released. + +Mon Apr 17 16:33:17 2000 Ossama Othman + + * acconfig.h (ACE_LACKS_ACE_OTHER, ACE_LACKS_ACE_SVCCONF, + ACE_LACKS_ACE_TOKEN): + + Added support for these macros. They are used when enabling + subsetting. + + * configure.in: + + lseek64() and llseek() test has been moved to + `m4/acinclude.m4'. + + Include `sys/types.h' when running the TLI/XTI tests. Some + platforms use typedefs such as "ulong" but such typedefs may not + be defined in the TLI/XTI headers. + + (ACE_HAS_BROKEN_T_ERROR): + + Corrected test for broken t_error(). A variable, "errmsg" was + being passed to the t_error() call in the test, but the variable + was declared as "ace_errmsg." Thanks to Roland Gigler + for pointing this out. + + (ACE_MAJOR, ACE_MINOR, ACE_BETA): + + If any of these variables is evaluates to the empty string, then + set it to zero. This fixes a problem that was occuring when the + the ACE version contained no beta number (e.g. "5.1" instead + "5.1.0"). Libtool didn't like the fact that one of the numbers + was an empty string. + + * ace/Makefile.am (libACE_IPC_la_SOURCES, libACE_Other_la_SOURCES, + HEADER_FILES, INLINE_FILES): + + Synchronized the sources associated with these Makefile + variables with those in the classical ACE Makefile. + + * m4/acinclude.m4 (ACE_CHECK_LSEEK64): + + Moved checks for lseek64() and llseek() from configure.in to + this file. The beginnings of a test for a 64 bit offset type + have also been added, but that test is currently not in use. + + * m4/ace.m4 (ACE_COMPILATION_OPTIONS): + + Removed check for exception support in C compiler. It didn't + make too much sense to check for exception support in a C + compiler. + + Since exception support is disabled by default, make sure + "-fno-exceptions" is set when using g++ with the default ACE + exception configuration value. + + * m4/compiler.m4 (ACE_SET_COMPILER_FLAGS): + + Fixed typos where "$GXX" was used instead of "$CXX." "$GXX" is + set to yes when GNU C++ is being used, and "$CXX" is set to the + compiler being used (e.g. "c++"). Thanks to Rich Seibel + for pointing this out. + + This also fixes a problem where "-fcheck-new" wasn't being added + to the C++ flags ($CXXFLAGS). + + * m4/subsets.m4 (ACE_LACKS_ACE_OTHER, ACE_LACKS_ACE_SVCCONF, + ACE_LACKS_ACE_TOKEN): + + When disabling the "Other," "SvcConf" and/or the "Token" subset, + then define the corresponding preprocessor macro. + +Sat Apr 15 21:49:04 2000 Darrell Brunsch + + * ace/ACE.cpp: + * apps/Gateway/Gateway/Options.cpp: + + Nick Pratt reported two cases where + we were using sizeof some_string to figure out its length. This + of course doesn't work when the string is a wide string, so they + have been changed to account for the character size. + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + * apps/gperf/src/gperf.dsp: + * apps/gperf/src/gperf_lib.dsp: + + Changed around the order of the configurations so that in the + default case (such as out of the box) the regular Debug version + will be the current configuration. + +Sat Apr 15 19:35:57 2000 Darrell Brunsch + + (On behalf of Christopher Kohlhoff ) + + * ace/Makefile.bor: + + Added new file QoS_Manager.cpp. + + * ace/Basic_Types.h: + * ace/Timer_Queue_Adapters.h: + + Added missing pre/post includes. + + * include/makeinclude/ace_flags.bor: + * include/makeinclude/build_example.bor: + + Updated for new orbsvcs libraries. + +Sat Apr 15 18:17:02 2000 Douglas C. Schmidt + + * apps/Gateway/Gateway/Concrete_Connection_Handlers.cpp: + Fixed the handle_output() function so that it does the "Right + Thing"[TM] on Windows NT. Win32 Winsock doesn't trigger + multiple "You can write now" signals, so we have to assume that + we can continue to write until we get another EWOULDBLOCK. + Thanks to Nick Pratt + +Thu Apr 13 16:30:01 2000 David L. Levine + + * ace/config-sunos5.7.h: added #undef ACE_NEEDS_LWP_PRIO_SET. + SunOS 5.7 no longer needs it, as shown by + performance-tests/Misc/preempt (run as superuser). Thanks + to John Foresteire + for reporting this. + +Tue Apr 11 21:41:20 2000 Nanbor Wang + + * bin/auto_compile_win32.pl: Updated the lists of + workspaces/projects to build. + +Tue Apr 11 16:15:31 2000 David L. Levine + + * ace/OS.cpp: moved ACE_Thread_Exit::is_constructed_ + definition so that it's seen on all platforms, not just + those that are ACE_MT_SAFE. Fixes: + Mon Apr 10 07:30:22 2000 John Rodgers + Thanks to Vishal for reporting it. + +Tue Apr 11 13:57:11 2000 Douglas C. Schmidt + + * ace/Synch_T.cpp: Make sure to cast the "type" argument to + "short" to avoid overload confusions by certain compilers. + Thanks to Charles Taurines for reporting + this. + +Tue Apr 11 12:52:04 2000 Vishal Kachroo + + * ace/SOCK_Dgram_Mcast.cpp (subscribe): Removed the #ifdef + for template instantiation. + +Tue Apr 11 11:32:03 2000 Chad Elliott + * bin/ACEutils.pm + + Refactored duplicate test code into ACEutils.pm + +Mon Apr 10 19:45:32 2000 Vishal Kachroo + + * ace/SOCK_Dgram_Mcast.cpp (subscribe): Added a #ifdef to + get past a g++ error. I am looking into the right way to + do this. + +Mon Apr 10 17:37:53 2000 Nanbor Wang + + * ace/config-freebsd-pthread.h: Addplied John Aughey + 's patch for FreeBSD 4.0. + +Mon Apr 10 07:30:22 2000 John Rodgers + + * ace/OS.{h,cpp},Thread_Manager.cpp (instance,~ACE_Thread_Exit): + added a state variable, is_constructed_, to ACE_Thread_Exit. + instance () sets it, ~ACE_Thread_Exit () clears it. This + allows ACE::init () to be called after ACE::fini (), because + a new ACE_Thread_Exit instance will be created. [Bug 526] + +Sun Apr 9 14:16:23 2000 James CE Johnson + + * docs/tutorials/015/page01.html : Thanks to Conrad Hughes for + pointing out that a real implementation would compress before + encrypting since encrypted data shouldn't really be compressible + anyway. + + * docs/tutorials/015/Protocol_Stream.cpp (open): Reorder the + module pushing so that encryption happens before compression. + + * docs/tutorials/015/Crypt.cpp : + * docs/tutorials/015/Compressor.cpp : + Add a few extra bytes when creating the new message blocks. A + real implementation would probably need that. + +Sun Apr 09 00:04:25 2000 Nanbor Wang + + * ace/Malloc_T.cpp (remove): Removed invocation of destructor to + . It is a member of Control_Block and does not + require explicit initialization/destruction. This was causing + ACE not to compile when ACE_HAS_MALLOC_STATS was defined. + Thanks to John Smyder for reporting the + problem. + + * ace/Malloc_T.cpp (open): Removed invocation of contructor to + for the same reason. + +Fri Apr 07 23:32:16 2000 Nanbor Wang + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Added QoS_Manager.* into project files. + +Thu Apr 6 07:29:48 2000 Douglas C. Schmidt + + * ace/Token.h (ACE_Token): Clarified the recursive semantics of + ACE_Token. Thanks to Antti Valtokari + for reporting this. + +Wed Apr 5 22:59:58 2000 Douglas C. Schmidt + + * ace/config-sunos5.5.h: Moved the ACE_HAS_USING_KEYWORD into + the part of this header file that's enabled when + __SUNPRO_CC_COMPAT >= 5 is defined. Thanks to Susan Liebeskind + for reporting this. + +Tue Apr 4 23:50:02 2000 Douglas C. Schmidt + + * ace/ACE.cpp (sock_error): Changed "int error" to "ssize_t error" + to be consistent... + +Tue Apr 4 20:19:36 2000 + + * ace/Acceptor.cpp: Modified the implementation of + ACE_Acceptor::open() and ACE_Acceptor::accept_svc_handler() so + that the peer acceptor's handle is set into non-blocking mode. + This is a safe-guard against the race condition that can + otherwise occur between the time when indicates + that a passive-mode socket handle is "ready" and when we call + . During this interval, the client can shutdown the + connection, in which case, the call can hang! Thanks + to Irfan for pointing this out. + +Fri Jun 1 13:04:31 2001 Douglas C. Schmidt + + * ace/Makefile: + Removed the moc compiler path definition from ace/Makefile + since it is now in include/makeinclude/wrapper_macros.GNU + Thanks to Hans Utz for + reporting this. + + * include/makeinclude/wrapper_macros.GNU (YACC): Added the moc + compiler path definition to include/makeinclude/wrapper_macros.GNU + Thanks to Hans Utz for + reporting this. + + * ace/Timer_Wheel_T.cpp: Removed check to see if Timer_Wheel was + empty from earliest_time(). + + * ace/Timer_List_T.h, + * ace/Timer_Hash_T.h, + * ace/Timer_Heap_T.h, + * ace/Timer_Queue_T.h, + * ace/Timer_Wheel_T.h: + Added a comment to point out that earliest_time() can only be + called on a non-empty queue. Thanks to Gil Rapaport + for reporting this. + +Tue May 29 17:38:15 2001 Douglas C. Schmidt + + * ace/OS.h: Moved the VMIN and VMAX macros to the right place. + Thanks to Hans Utz for + reporting this. + +Fri Jun 1 16:11:42 2001 Balachandran Natarajan + + * ace/Acceptor.cpp (open): Enabled the socket to be non-blocking + mode in the ACE_Strategy_Acceptor::open () call. Thanks to Singh + Kirat , for reporting this through a problem + in TAO. + +Thu May 31 17:29:33 2001 Ossama Othman + + * tests/Refcounted_Auto_Ptr_Test.cpp: + + Removed duplicate template instantiation. Fixes a build error. + +Thu May 31 15:25:19 2001 Steve Huston + + * ace/Refcounted_Auto_Ptr.i (ACE_Refcounted_Auto_Ptr_Rep::detach): + If the object needs to be deleted, release the guard first to + avoid later unlocking a lock residing in memory that had been + freed and potentially reallocated. Thanks to Steve Witten + for noticing this bug, and Purify for making + it relatively easy to track down. + + * tests/Refcounted_Auto_Ptr_Test.cpp: Rearranged to verify things + which should happen, and improve the logging and thread rundown + sequence. + + * THANKS: Added Steve Witten to the Hall of Fame. + + * ACE-INSTALL.html: Fixed the section about how to build on AIX + to account for the new ace.icc file, and Visual Age C++ 5. + +Thu May 31 08:59:00 2001 Craig Rodrigues + + * ace/config-g++-common.h: + + Only define ACE_LACKS_AUTO_PTR for gcc versions <= 2.91 + +Wed May 30 23:54:27 2001 Yamuna Krishnamurthy + + * ace/QoS/SOCK_Dgram_Mcast_QoS.cpp: + + Fixed the subscribe method so things worked even when no qos + was specified. + +Wed May 30 11:13:16 2001 Ossama Othman + + * ace/Singleton.cpp (instance): + + Integrated David's suggested changes that deal with potential + problems related to registering Singletons in the presence of + multiple ACE_Object_Manager instances. + +Wed May 30 00:37:57 2001 Ossama Othman + + * ace/Singleton.cpp (instance): + + Fixed memory leak that occured due to the singleton instance not + being registered with the ACE_Object_Manager when built without + thread support. Thanks to Kitty and David for helping with + this problem. + +Tue May 29 15:06:48 2001 Ossama Othman + + * include/makeinclude/platform_linux.GNU (CFLAGS, CPPFLAGS): + + Do not set preprocessor flags in the "CFLAGS" variable. They + should instead be set in the CPPFLAGS variable. The + preprocessor need not be the same as the compiler! + +Mon May 28 18:11:20 2001 Douglas C. Schmidt + + * ace/OS.i (mutex_init): Using pthreads and passing attributes + into mutex_init(), the function will always fail because the + local variable result is initialized to -1 and then tested + against 0. Thanks to Brodie Thiesfield + for this fix. + +Tue May 29 13:08:33 2001 Phil Mesnier + + * ace/Process.i (handle_inheritence): + * ace/Process.h: + + Exposed the interface for handle_inheritence to non-win32 builds to + allow it to be used as part of the solution to bug 902. Since this is + a win32 only feature, the method will invoke the NOTSUP macro to + document its use, but failure is benign, returning 0. This is part 3 + of the 3 part solution to bug 902. + +Mon May 28 18:43:51 2001 Steve Huston + + * tests/Thread_Pool_Reactor_Resume_Test.icc: Visual Age C++ config + for this new test. + + * tests/tests.icp: Added Thread_Pool_Reactor_Resume_Test.icc. + + * include/makeinclude/platform_aix_ibm.GNU: Added $(ACELIB) to + LIBS to get netsvcs stuff to build clean. Thanks to Erik + Toubro Nielsen for this fix. + + * THANKS: Added Erik Nielsen. + +Mon May 28 14:44:29 2001 Steve Huston + + * ace/Timer_Heap_T.{h cpp}: Add new member, cur_limbo_ to keep track + of timer entries removed from the heap, but not reclaimed (caller + must call either reschedule() or free_node() to finish up the + work). + + * ace/Timer_Queue_T.cpp (expire): When expiring a ACE_Timer_Node, + either reschedule it or free it prior to doing the upcall. + This necessitates having a copy of the TYPE element, not a + reference. In the vast majority of cases, this is an + ACE_Event_Handler pointer, and should make no difference in + performance. + +Sat May 27 10:40:27 2001 Yamuna Krishnamurthy + + * ace/QoS/QoS_Session_Impl.cpp: + + Added an adhoc fix for propagating the right service type when + a PATH message is received. + +Sat May 26 16:36:27 2001 Krishnakumar B + + * bin/auto_run_tests.lst: + + Switched off TAO/examples/PluggableUDP/tests/Basic/run_test.pl + from the Single Threaded builds. Added + TAO/examples/PluggableUDP/tests/SimplePerformance/run_test.pl + instead to run on all the builds. + +Fri May 25 20:51:33 2001 Christopher Kohlhoff + + * netsvcs/build.bor: + Changed contents of file back to its original state. + +Fri May 25 13:38:21 2001 Douglas C. Schmidt + + * ace/Message_Block.h: Added a better explanation of what "crunch()" + does. Thanks to Masaoud T. Moonim for + motivating this. + +Fri May 25 19:06:51 2001 Irfan Pyarali + + * ace/Map_T.i (create_key): Added a new method to the maps. This + method allows the user to create a key without binding to the + map. For the linear and hash maps, this call simply forwards to + the key generators. This method is not supported by the active + map since the key encodes the slot position which cannot come + without occupying a slot in the map. + +Fri May 25 08:37:37 2001 Jeff Parsons + + * ace/Message_Block.cpp: + + Fixed an error in ACE_Data_Block::clone, where ACE_NEW_RETURN + is used without a constructor as one of the arguments. Besides, + it is a mistake to allocate, because the call to clone_nocopy + has already done an allocation. All we need to do is check for + a 0 return from clone_nocopy. + +Fri May 25 05:42:39 2001 Douglas C. Schmidt + + * ace/Message_Block.cpp (clone): Make sure to check for memory failure + and return 0 in this case. Thanks to Airat A. Sadreev + for reporting this. + +Thu May 24 22:06:45 2001 Sharath R. Cholleti + + * tests/CDR_Test.cpp: Changed the initialization of WChar variable, to + remove the warning "integer conversion resulted in a change of sign" + by some compilers. + +Thu May 24 20:26:39 2001 Steve Huston + + * ace/Timer_Heap_T.{h cpp}: Fixed some problems in managing the + free timer ID list. + + * ace/Timer_Hash_T.cpp (expire): Changed this to peek at the first + timer node from each table, do reschedule iterative timers, and + do the upcall, then _cancel_ the original, rather than try to + manage a remove_first()/reschedule-or-free sequence. The ID + assigned by the underlying table is not important, since its not + seen by the ACE_Timer_Hash_T caller anyway, and that's the main + impetus for using remove_first/reschedule (or free_node). + + * tests/Timer_Queue_Test.cpp (test_functionality): Added a test + to verify empty timer queue after adding/removing two timers + right at the start. + +Thu May 24 12:15:35 2001 Douglas C. Schmidt + + * ace/OS.h: Added #defines for RTLD_LAZY, RTLD_NOW, RTLD_GLOBAL. + Thanks to Kobi Cohen-Arazi for suggesting + this. + + * ace/OS.h: Updated the ACE_Time_Value class to point out that the + values are in secs and usecs. Thanks to Israel Illescas Gomez + for motivating this. + +Thu May 24 18:08:27 2001 Steve Huston + + * tests/run_test.lst: Re-enable MT_Reactor_Timer_Test. + +Thu May 24 15:34:48 2001 Nanbor Wang + + * examples/IPC_SAP/SOCK_SAP/CPP-memclient.cpp: Changed to + to avoid warnings on some platforms. is not safe + to use. + +Thu May 24 15:28:19 2001 Krishnakumar B + + * bin/auto_run_tests.lst: + + Removed this test from being run on single-threaded configurations + since this test uses the ACE_Thread_Manager. + +Thu May 24 15:12:16 2001 Krishnakumar B + + * ace/config-tru64.h: + + Added ACE_HAS_NONSTATIC_OBJECT_MANAGER to the default builds to + work around hangs in some of the tests which load a dynamic + library. This fixes some more of the problems reported in Bug Id + 912. + +Thu May 24 13:42:24 2001 Balachandran Natarajan + + * bin/nightlybuilds/builds.lst: We dont have Red Hat 7.0 + anymore. So changed it as Red Hat 7.1. + +Thu May 24 10:51:45 2001 Balachandran Natarajan + + * tests/Thread_Pool_Reactor_Resume_Test.dsp: + * tests/tests.dsw: Files for Win32. + +Thu May 24 10:35:45 2001 Balachandran Natarajan + + * tests/Thread_Pool_Reactor_Resume_Test.cpp + * tests/Thread_Pool_Reactor_Resume_Test.h: A new test that tests + the resumption of handler at the application level. This test is + an adaptation of the famous Thread_Pool_Reactor_Test. + + * tests/Makefile: Added the test for compilation. + * tests/run_test.lst: Added the above test for the nightly + builds. + +Thu May 24 10:26:35 2001 Balachandran Natarajan + + * tao/Event_Handler.cpp: + * tao/Event_Handler.h: A starter for bug #575. Please see the + documentation of bug 575 for details of this change. In short + the Event Handler class has an extra method called + resume_handler (). Applications that use the TP_Reactor and + would like to take control of resuming the handler can overload + this method in their implementation and return a value other + than zero. + + * tao/TP_Reactor.cpp: Added a check by calling the resume_handler + () on the event handler object before resuming the handler. + +Wed May 23 16:35:15 2001 Douglas C. Schmidt + + * ace/Sock_Connect.h, + * ace/Flag_Manip.h, + * ace/config-all.h: Make sure that all ACE include file have a + "ace/" prefix. Thanks to John Lindal for + reporting this. + + * ace/config-win32-common.h: Fixed a problem where FD_SETSIZE wasn't + getting reset properly. Thanks to Roger Tragin + for reporting this. + +Wed May 23 17:37:30 2001 Krishnakumar B + + * bin/auto_run_tests.lst: + * tests/run_test.lst: + + Removed some tests from being run on Single Threaded + Configuration as they were spawning threads. The tests removed + are: + + TAO/performance-tests/AMI_Latency/run_test.pl + TAO/tests/AMI_Timeouts/run_test.pl + and + tests/Logging_Strategy_Test + + This is related to Bug Id 912. + +Wed May 23 17:33:59 2001 Krishnakumar B + + * bin/make_pretty.pl: + + Seems to have missed my previous update. Add the code to remove + the bogus warning associated with SunCC5. Check the ChangeLog + tag Mon May 21 16:37:18 2001 Krishnakumar B + for more. + +Wed May 23 18:22:41 2001 Steve Huston + + * ace/Reactor.cpp (run_reactor_event_loop (ACE_Time_Value&, eh)): + It is possible for rounding/conversion fudges in calculating + the WFMO/select wait time to cause the wait to time out, but the + timer queue be not quite ready to expire the next timer. In this + case, the ACE_Time_Value won't have been reduced to 0, so the + handle_events call is repeated. Fixes Bugzilla # 153. + +Wed May 23 15:55:21 2001 Steve Huston + + * ace/Containers_T.h: Fixed comment directing reader to include + ace/Unbounded_Queue.h (rather than _Set.h) for ACE_Unbounded_Queue. + + * ace/Timer_Heap_T.{cpp h}: Changed the free IDs list from a stack + to a round-robin list. Newly-allocated IDs keep increasing til + there aren't any more, then wrap around to the lowest numbered + free ID and start again. This is a ease-of-use improvement to + help applications catch their timer-related errors easier, + which is apparantly important, especially in multi-threaded + applications. + Also, when remove_first() is called, remove the ACE_Timer_Node + from the heap, but do not release its ID back to the free list. + remove_first() must be followed by a call to reschedule() or + remove(). The latter just reinserts the timer node in the heap, + and the latter cleans up the timer ID. + +Wed May 23 14:41:00 2001 Balachandran Natarajan + + * netsvcs/ACE-netsvcs.html: + * netsvcs/Makefile: + * netsvcs/Makefile.am: + * netsvcs/Makefile.bor: + * netsvcs/README: + * netsvcs/build.bor: Resurrected the files from the repo. + +Wed May 23 11:13:00 2001 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Removed TAO/performance-tests/Latency from the nightly builds. + This test has been superseeded by Single_Threaded_Latency and + friends. In fact it is no longer used to generate performance + results. + This is part of the fixes for [BUGID:324] + +Tue May 23 11:53:24 2001 Paul Calabrese + + * docs/exceptions.html: Fix bad reference to OCI devguide: + the link was broken and the chapter # was incorrect. + +Wed May 23 8:23:20 2001 Yamuna Krishnamurthy + + * ace/QoS/QoS_Session.h: + * ace/QoS/QoS_Session_Impl.h: + * ace/QoS/QoS_Session_Impl.cpp: + + Added a method to propagate the rsvp event type to the application. + +Wed May 23 06:52:44 2001 Balachandran Natarajan + + * bin/nightlybuilds/builds.lst: Moved the FORTE builds to ace. + +Tue May 22 21:57:46 2001 Balachandran Natarajan + + * bin/nightlybuilds/builds.lst: Added NO_AMI_MESSAGING to the + builds. + +Mon May 21 18:34:52 2001 Douglas C. Schmidt + + * include/makeinclude/platform_linux.GNU: Added default macros for: + + PLATFORM_QT_LIBS + PLATFORM_QT_LDFLAGS + PLATFORM_QT_LDFLAGS + + Thanks to Hans Utz for + contributing this. + + * performance-tests/Misc/Makefile (LDLIBS): Added back + -lPerf. Thanks to Hans Utz for + reporting this. + +Mon May 21 16:37:18 2001 Krishnakumar B + + * ace/OS.h: + * ace/Timer_Queue_Adapters.cpp: + * bin/make_pretty.pl: + + Changed the make_pretty script to remove the false warning on + SunCC5. Added documentation in the affected files. This fixes + Bug Id 879. + +Sun May 20 08:48:59 2001 Balachandran Natarajan + + * bin/nightlybuilds/builds.lst: Added FORTE 6.1 to the list. + +Sun May 20 07:37:26 2001 Balachandran Natarajan + + * ace/POSIX_Proactor.cpp: Fixed a compile error with g++. + +Sun May 20 01:38:59 2001 Nanbor Wang + + * ace/config-freebsd-pthread.h: + * ace/POSIX_Proactor.cpp: Applied patches from Russell L. Carter + that introduce FreeBSD 4.3 to AIO + (compiling at least). [Bug 917] + +Sat May 19 10:28:56 2001 Balachandran Natarajan + + * bin/make_pretty.pl: Ignore the mktemp () messages on Linux. + +Fri May 18 20:58:59 2001 Ossama Othman + + * bin/auto_run_tests.lst: + + Added TAO's security tests to the list of tests to run in the + nightly builds. They will only be run on platforms that support + the "SSL" build configuration. + +Fri May 18 14:39:31 2001 Steve Huston + + * ace/config-aix-4.x.h: Removed ACE_LACKS_SETSCHED for AIX 4.3. + Fixes Bugzilla # 47. + + * ace/OS.h: AIX's ACE_THR_PRI_*_{MIN MAX} values are 1 and 127, + respectively. PRIORITY_{MIN MAX} are process priorities, + and the range is not legal for pthread_attr_setschedparam. + + * ace/Makefile.vac: + * tests/Makefile.vac: Use -sev=w instead of -severity=warning + to avoid tripping the scoreboard error detector unnecessarily. + +Fri May 18 10:50:55 2001 Jeff Parsons + + * Configuration.cpp: + + Reverted a change made to the validate_name() function that + added '/' as an illegal character. This breaks the Interface + Repository completely. + +Fri May 18 06:11:49 2001 Douglas C. Schmidt + + * ace/config-cxx-common.h: Changed + # if defined (DIGITAL_UNIX) && DIGITAL_UNIX >= 0x40F + to: + # if defined (DIGITAL_UNIX) && DIGITAL_UNIX >= 0x40D + This gets rid of a very annoying informational message. Thanks + to Steve Vranyes for reporting this + + * ace/config-tru64.h: Changed 0x40E to 0x40D in the check for + DIGITAL_UNIX to disable the use of systime.h. Thanks to + Steve Vranyes for reporting this + and for David Levine for suggesting the fix. + +Thu May 17 23:36:18 2001 Ossama Othman + + * bin/auto_run_tests.lst: + + Added TAO's Request_Interceptor_Flow test to the list of tests + to run in the nightly builds. + +Fri May 18 01:31:47 2001 Irfan Pyarali + + * ace/Timeprobe.h: Reordered the include files: Timeprobe_T.h + should come after Synch.h. Thanks to Bruce McIntosh + for reporting this + problem. + +Fri May 18 00:36:35 2001 Irfan Pyarali + + * ace/Map_Manager.cpp (unbind_all): Added a new method that + unbinds all entries in the map. Also, refactored out some code + into unbind_slot(). + + BTW, this functionality is somewhat redundant since one can also + do the following: + + // Unbind one at a time. + MAP_MANAGER::iterator end = map.end (); + while (1) + { + MAP_MANAGER::iterator iter = map.begin (); + if (iter == end) + break; + map.unbind ((*iter).ext_id_); + } + + However, the following should be much faster: + + // Unbind in one swoop. + map.unbind_all (); + + Another reason to add the unbind_all() is that the method is + available on the other map_managers and that it is now easier to + convert a hash map to a normal map and back without changing any + real code. + + * tests/Map_Manager_Test.cpp (test_map_manager): Added test for + unbind. + + Thanks to Johnny Willemsen for + suggesting this. + +Thu May 17 21:34:28 2001 Douglas C. Schmidt + + * ace/POSIX_Asynch_IO.cpp: Added an ACE_UNUSED_ARG to keep G++ + happy. + +Thu May 17 16:52:17 2001 Priyanka Gontla + + * tests/CDR_File_Test.cpp (run_test): + Modified ACE_OutputCDR instantiation to follow the new modified + constructor. + +Thu May 17 17:01:11 2001 Balachandran Natarajan + + * bin/nightlybuilds/builds.lst: Re-enabled Core and Full builds on + RedHat 7.1. + +Thu May 17 14:36:57 2001 Douglas C. Schmidt + + * ace/Asynch_IO.cpp + ace/Asynch_IO.h + ace/Asynch_IO_Impl.cpp + ace/Asynch_IO_Impl.h + ace/Asynch_IO_Impl.i + ace/POSIX_Asynch_IO.cpp + ace/POSIX_Asynch_IO.h + ace/POSIX_Asynch_IO.i + ace/POSIX_Proactor.cpp + ace/POSIX_Proactor.h + ace/POSIX_Proactor.i + ace/Proactor.cpp + ace/Proactor.h + ace/Proactor_Impl.h + ace/WIN32_Asynch_IO.cpp + ace/WIN32_Asynch_IO.h + ace/WIN32_Proactor.cpp + ace/WIN32_Proactor.h: Added more fixes and improved comments + from Roger Tragin . + + * ace/SString.cpp: Fixed a bug in the check_allocate() method. + Thanks to Wayne Erchak for reporting this. + +Thu May 17 12:16:57 2001 Priyanka Gontla + + * ace/CDR_Stream.h (ACE_InputCDR): + * ace/CDR_Stream.cpp: + Modified so that even the Message_Block_Allocators are also + allocated from TSS memory. The constructor of ACE_OutputCDR + changes. + +Thu May 17 11:51:03 2001 Carlos O'Ryan + + * include/makeinclude/rules.local.GNU: + Removed misuse of CC_OUTPUT_FLAG in the middle of an 'if' shell + statement. Chances are that this was the result of a global + search and replace. Thanks to Cristian Ferretti + for pointing this out. + +Thu May 17 12:43:26 2001 Balachandran Natarajan + + * bin/nightlybuilds/builds.lst: Removed the beguine builds for + some time till we get Redhat machine in place. + +Thu May 17 11:36:02 2001 Douglas C. Schmidt + + * ace/Configuration.cpp: Fixed an inconsistency in the + enumerate_sections() method so that + ACE_Configuration_Win32Registry and ACE_Configuration_Heap will + behave the same. ACE_Configuration_Win32Registry was returning + -2 upon no more sections to enumerate, rather than 1. This is + because it is not checking for a return of ERROR_NO_MORE_ITEMS + from ACE_TEXT_RegEnumKeyEx. Thanks to Kevin Burge + for reporting this. + +Thu May 17 10:46:31 2001 Chad Elliott + + * bin/nightlybuilds/builds.lst: + + Adding the HP-UX 11.00 build back to the list. + +Thu May 17 10:16:03 2001 Douglas C. Schmidt + + * ace/POSIX_Asynch_IO.{h,cpp}: There are some weird inconsistencies + between the declaration and definition of the recv() methods in + ACE_POSIX_SIG_Asynch_Read_Dgram and + ACE_POSIX_AIOCB_Asynch_Read_Dgram. I've made a fix that + compiles, but we need feedback from Roger Tragin to really fix + this... + +Thu May 17 10:00:59 2001 Frank Hunleth + + * ace/Proactor_Impl.h: + Added interfaces for create_asynch_read_dgram_result and + create_asynch_write_dgram_result. + +Thu May 17 06:23:59 2001 Douglas C. Schmidt + + * ace/Proactor_Impl.h: Added two missing factory methods to + ACE_Proactor_Impl. Thanks to Bala for reporting this. + + * ace/WIN32_Proactor.h (ACE_WIN32_Proactor): The signal_number + parameter was missing. Thanks to Andy Gokhale for reporting this. + +Thu May 17 06:23:59 2001 Douglas C. Schmidt + + * ace/Asynch_IO.cpp + ace/Asynch_IO.h + ace/Asynch_IO_Impl.cpp + ace/Asynch_IO_Impl.h + ace/Asynch_IO_Impl.i + ace/POSIX_Asynch_IO.cpp + ace/POSIX_Asynch_IO.h + ace/POSIX_Asynch_IO.i + ace/POSIX_Proactor.cpp + ace/POSIX_Proactor.h + ace/POSIX_Proactor.i + ace/Proactor.cpp + ace/Proactor.h + ace/WIN32_Asynch_IO.cpp + ace/WIN32_Asynch_IO.h + ace/WIN32_Proactor.cpp + ace/WIN32_Proactor.h: Added Async IO support for UDP dgrams + on NT so they can be used via the Proactor. Thanks to + Roger Tragin for contributing this. + +Wed May 16 22:43:19 2001 Steve Huston + + * ace/Synch.i (ACE_Mutex::remove): Properly clean up the shared + memory object and file backing for interprocess mutex. + + * tests/run_test.lst: Added Config_Test so run_test.pl runs it. + +Wed May 16 18:30:42 2001 Steve Huston + + * tests/Config_Test.cpp: Added a test to verify the ability to set + a new integer value. + +Wed May 16 17:05:29 2001 Sharath R. Cholleti + + * ace/CDR_Stream.cpp: + + In ACE_OutputCDR::write_wchar(), casting int to ACE_CDR::Octet and + passing the pointer to that to write_1() instead of casting the + pointers - to avoid little Endian and big Endian issues. Thanks to + Krishnakumar B in tracking this. + + * tests/CDR_Test.cpp: + + Added test for writing and reading ACE_CDR::WChar. + +Wed May 16 14:51:37 2001 Douglas C. Schmidt + + * tests/Config_Test.cpp: Updated this test to include Chris + Hafey's improvements. + + * ace/Configuration.{h,cpp}, + * ace/Configuration_Import_Export.cpp: Added a number of fixes from + Chris Hafey and Jonathan Reis that had been lost when Jerry + Odenwelder added his changes. + +Wed May 16 09:49:29 2001 Steve Huston + + * ace/ACE.cpp (handle_timed_complete): On Win32, interpret exception + handle bit set as failure, regardless of what getsockopt says about + an error. NT always reports 0 for error. + + * tests/SOCK_Connector_Test.cpp: Changed some LM_DEBUG to LM_ERROR and + LM_WARNING to more easily interpret the log file. + +Wed May 16 02:40:00 2001 Michael Kircher + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + + Added the PPC 403 CPU to the list of supported CPUs. + +Tue May 15 20:37:31 2001 Steve Huston + + * ace/Process_Mutex.{h cpp inl}: (Follow up to Thu May 10 change + later reverted on Mon May 14). Changed the preprocessor macros + that select use of ACE_SV_Semaphore_Complex over ACE_Mutex + as the underlying mechanism for ACE_Process_Mutex. If + ACE_HAS_SYSV_IPC is set in config.h, ACE_SV_Semaphore_Complex + is used, unless the new macro ACE_USES_MUTEX_FOR_PROCESS_MUTEX + is also set. If ACE_HAS_SYSV_IPC is not enabled, ACE_Mutex + is used, regardless of any other setting. + Also, doxygen-ized the member function comments. + + * ace/Malloc.h: If ACE_Process_Mutex is to be used with + ACE_HAS_MALLOC_STATS, include ace/Process_Mutex.h, not Synch_T.h. + + * tests/libDLL_Test.icc: Changed this to correctly generate shr.o, + not libDLL_Test.o, for insertion into libDLL_Test.a. This lets + it get picked up correctly from DLL_Test. + +Tue May 15 18:00:49 2001 Steve Huston + + * ace/config-win32-common.h: Added support for a new config macro, + ACE_NO_WIN32_LEAN_AND_MEAN. If this is set, WIN32_LEAN_AND_MEAN + will not be defined before including windows.h. This is needed + when code makes use of non-lean things like COM, which get + included only when WIN32_LEAN_AND_MEAN is not defined. + + * ace/README: Added description of ACE_NO_WIN32_LEAN_AND_MEAN. + + * bin/make_pretty.pl (is_error): Don't report AIX's ld message to + please check the -bloadmap as an error. It gets generated when + there are multiple defines, which we filter out, so we don't + want to see this follow-up message either. + +Tue May 15 10:14:56 2001 Balachandran Natarajan + + * ace/OS.i (mmap): Added an extra check for an empty + string. Thanks to Edan Ayal for reporting + this problem and suggesting an easy fix. + +Mon May 14 22:38:06 2001 Balachandran + + * ACE version 5.1.16 released. + +Mon May 14 14:45:57 2001 Balachandran Natarajan + + * ace/CDR_Stream.h (ACE_InputCDR): Somehow the removed + steal_data () got back into the header file. Removed the + method. + +Mon May 14 11:02:20 2001 Balachandran Natarajan + + * ace/Strategies_T.i: Removed the ACE_ERROR statement from the + destructor of ACE_Accept_Strategy. This created problems when + the destructor was called during shutdown if the object was + statically allocated. Thanks to Jonathan Reis + for reporting this problem. + +Mon May 14 07:48:16 2001 Balachandran Natarajan + + * ace/Process_Mutex.{h,cpp,inl}: Reverted the change "Thu May 10 + 18:37:41 2001 Steve Huston ". The change + was breaking SHMIOP in TAO. + +Fri May 11 10:25:00 2001 Douglas C. Schmidt + + * ace/OS_Dirent.h (ACE_OS_Dirent): Missed a conversion of "DIR" to + "ACE_DIR". + + * ace/Synch.cpp (get_nesting_level): Added better protection for the + case where ACE_HAS_RECURSIVE_MUTEXES -- only return + RecursionCount if ACE_WIN32 is defined. Thanks to Corey Trager + for reporting this. + + * ace/OS.cpp: Reformatted all the ACE_reinterpret_cast() macros so their + arguments are on the same line to avoid tickling a bug with + SunC++'s preprocessor. Thanks to Corey Trager + for reporting this. + +Fri May 11 07:14:50 2001 Balachandran Natarajan + + * tests/CDR_Test.cpp: Reverted this change "Wed May 9 23:19:30 + 2001 Sharath R. Cholleti " + +Fri May 11 06:47:33 2001 Balachandran Natarajan + + * tests/ARGV_Test.cpp: One of those extra ")". + +Fri May 11 06:14:58 2001 Douglas C. Schmidt + + * ace/Dirent.h (ACE_Dirent), + * ace/OS.cpp (uname), + * ace/OS.h (ACE_OS), + * ace/OS.i (hostname), + * ace/OS_Dirent.cpp (readdir_emulation), + * ace/OS_Dirent.h (ACE_OS_Dirent), + * ace/OS_Dirent.inl (ACE_OS_Dirent), + * ace/config-win32-common.h (ACE_LACKS_STRUCT_DIR), + * apps/Orbix-Examples/Event_Comm/Consumer/Notification_Receiver_Handler.cpp (Notification_Receiver_Handler), + * apps/Orbix-Examples/Logger/Logger.cpp (Logger), + * bin/envinfo.cpp (main), + * examples/Reactor/Multicast/Log_Wrapper.cpp (open), + * performance-tests/Misc/basic_perf.cpp (main), + * tests/Dirent_Test.cpp (main), + * tests/Enum_Interfaces_Test.cpp (main), + * tests/SOCK_Connector_Test.cpp (find_another_host): + Updated all of ACE and its tests to use ACE_DIR rather than DIR + to avoid conflicts with other programs (like Perl) that also + define an enumation with DIR. Thanks to Gonzo Diethelm + for contributing these fixes. + + The following fixes are all thanks to Ingo Dahm + + * ace/config-sunos5.6.h: Added support for SunC++ 5.2. + * ace/IOStream.h: Added support for SunC++ 5.2. + * ace/config-sunos5.8.h: Added Solaris 8 support for native + POSIX RW locks. + * include/makeinclude/platform_sunos5_sunc++.GNU: Added support + for Sun C++ 5.2. + +Thu May 10 19:33:03 2001 Carlos O'Ryan + + * tests/ARGV_Test.cpp: + Fixed argv, it should be an ACE_TCHAR, add missing ACE_TEXT() + and removed superfluous one. + +Thu May 10 18:19:09 2001 Carlos O'Ryan + + * ACE-INSTALL.html: + Add documentation for the mingw support, thanks Cristian Ferretti + for providing this info. + +Thu May 10 16:55:20 2001 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Add the new Latency and Throughput tests to the nightly + regression testsuite. + +Thu May 10 18:37:41 2001 Steve Huston + + * ace/POSIX_Asynch_IO.cpp (ACE_POSIX_Asynch_Result ctor): Added + initializers for bytes_transferred_ and error_. Thanks to + Itzhak Briskman for this fix. + + * THANKS: Added Itzhak Briskman to the Hall of Fame. + Updated David Brock's email address. + + * ace/SString.cpp (ACE_CString::substring): If requesting a substring + longer than the string is, return only what's left. Thanks to + David Brock for reporting this. + + * tests/SString_Test.cpp: Add a substring extraction test to catch + the above problem (returning a substring with more than is left + in the original string). + + * ace/Process_Mutex.{h cpp inl}: Changed the "uses mutex" vs + "uses SV_Semaphore_Complex" decision to make use of a private + macro defined in Process_Mutex.h. Further, the platforms that + use mutexes are now Win32, PSOS, Pthreads, Sthreads. + + * ace/config-sunos5.6.h: + * ace/config-hpux-11.00.h: Added ACE_HAS_SHM_OPEN since these + platforms support shm_open, and ACE_Mutex wants to use it for + cross-process mutexes. + + * ace/Proactor.h: Updated handle_events comments to note that the + ACE_Time_Value is relative and is updated before return. + + * ace/Synch.(h cpp) (ACE_Mutex): Added ACE_HAS_PTHREADS and + ACE_HAS_STHREADS to the platforms which handle inter-process mutex + by allocating it in shared memory. + + * tests/Process_Mutex_Test.cpp: Made the child process create an + exclusive access file after acquiring the mutex and delete it + before releasing. If the file can't be created, it means the + mutex is acquired twice, and that's a no-no. + When the parent is checking child process exit, also check the + status - if the child exited with something other than 0 status, + note that so the test procedure will see a LM_ERROR in the log + and flag it. + + * tests/MEM_Stream_Test.cpp: Changed some debug text to match the + function it is in. + + * ace/Parse_Node.{h cpp}: Handle dynamic libraries using ACE_DLL, + not ACE_OS::dlopen, etc. and handles. This is a proper refactoring + of the code (ACE_DLL didn't exist when this was first written) + and is needed to properly support dynamic services on AIX. + + * ace/DLL.cpp (open): (AIX only) If the dlopen fails and we're + trying to open an archive lib, tack on "(shr.o)" and retry + with the RTLD_MEMBER option set in the mode. This is to + properly support AIX shared libraries which get built as + .o files and loaded into an archive. + +Thu May 10 16:12:02 2001 Douglas C. Schmidt + + * ace/ACE.cpp (timestamp): The abbreviation of thursday should be + "Thu" not "Thr". Thanks to Munagala Ramanath + for pointing this out. + +Thu May 10 10:06:57 2001 Carlos O'Ryan + + * tests/tests.dsw: + * tests/ARGV_Test.dsp: + Add project file for ARGV_Test, thanks to Cristian Ferretti + for pointing this out. + +Thu May 10 06:36:08 2001 Balachandran Natarajan + + * tests/CDR_File_Test.cpp: Fixed a compile error with g++. + +Thu May 10 08:13:12 2001 Johnny Willemsen + + * tests/Makefile.bor + * tests/Misc/Makefile.bor + * tests/Naming/Makefile.bor + * tests/Reactor/Makefile.bor + * tests/Reactor/Dgram/Makefile.bor + * tests/Reactor/Ntalker/Makefile.bor + * tests/Registry/Makefile.bor + * tests/Synch/Makefile.bor + + Added or updated the above BCB makefiles so that the tests are + build with BCB + +Wed May 9 23:19:30 2001 Sharath R. Cholleti + + * ace/CDR_Streams.h: + * ace/CDR_Streams.cpp: + * ace/CDR_Streams.i: + * ace/CDR_Base.h: Changed the WChar implementation to suit GIOP + 1.2. + + * tests/CDR_Test.cpp:Added test for wchar. + + Thanks to Bala (bala@cs.wustl.edu) for helping me out. + +Wed May 9 16:06:34 2001 Balachandran Natarajan + + * ace/TTY_IO.cpp (control): + * ace/OS.h: Corrected this change "Wed May 9 14:03:01 2001 + Douglas C. Schmidt". The problem was with the definition of the + macro ACE_VTIME. Looks more like a cut and paste error. + +Wed May 9 16:00:22 2001 Balachandran Natarajan + + * ace/OS.h: + * ace/TTY_IO.cpp: Reverted this change "Wed May 9 14:03:01 2001 + Douglas C. Schmidt". + +Wed May 9 14:03:01 2001 Douglas C. Schmidt + + * ace/TTY_IO.cpp (control): Use the new ACE_VMIN and ACE_VTIME + macros. Thanks to Hans Utz for + suggesting this. + + * ace/OS.h: Added support for the new ACE_VMIN and ACE_VTIME + macros. Thanks to Hans Utz + for suggesting this. + +Wed May 9 14:25:35 2001 Balachandran Natarajan + + * THANKS: Added Darren Griffith + to the hall of fame. + +Wed May 9 11:40:06 2001 Carlos O'Ryan + + * ace/OS.i: + Don't use OpenFileMapping for WindowsCE. + + * ace/OS.i: + * ace/config-win32-mingw.h: + Use the /**/ trick for #includes with angle brackets, otherwise + the Embedded C++ compiler gets angry. + +Wed May 09 10:02:10 2001 Balachandran + + * ACE version 5.1.15 released. + +Mon May 7 07:14:08 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Commented out OctetSeq test from running + in static configurations. + +Mon May 7 06:40:44 2001 Douglas C. Schmidt + + * examples/Shared_Memory/test_SV.cpp: Cast SHM_KEY to (key_t) to + make BCB happy. Thanks to Johnny Willemsen for this. + +Sat May 5 15:30:40 2001 Douglas C. Schmidt + + * THANKS: Just added the 1,200th contributor to the ACE+TAO. + Thanks to Alexandre Cervieri + for helping us hit a new milestone! + +Sat May 5 08:51:23 2001 Balachandran Natarajan + + * bin/nightlybuilds/builds.lst: Just commented the HP_UX + builds. OCI seems to be having problems with their HP + machine. We will get it online once the builds start running. + +Sat May 5 08:01:30 2001 Douglas C. Schmidt + + * tests/Thread_Mutex_Test.cpp: Added a series of tests that exercise + the new functionality of the ACE_Guard. Thanks to Christopher + Kohlhoff for providing the enhancements. + +Fri May 4 15:42:20 2001 Craig Rodrigues + + * ace/OS.h + Changed ACE_SERVICETYPE_CONTROLLEDLOAD from 2 to 1 + This is necessary to work with RAPI. + +Fri May 4 06:28:19 2001 Douglas C. Schmidt + + * ace/OS.h: Changed the typedefs of uid_t, gid_t, and mode_t to + match those in standard POSIX. Thanks to Gonzalo Diethelm + for reporting this. + +Fri May 4 06:28:19 2001 Douglas C. Schmidt + + * ace/ace_wchar.h: Add a new macro (ACE_USES_L_PREFIX) that allows + users to control whether wide character strings use the "L" + prefix via their config.h files. Thanks to Albert Wijnja for + this fix. + + * examples/Misc/test_read_buffer.cpp (main): Changed to + so this will work properly on Win32 platforms. + Thanks to Johnny Willemsen for reporting the problem. + + * examples/Misc/test_XtReactor2.cpp (main): Fixed a stray ')'. + Thanks to Johnny Willemsen for reporting the problem. + +Thu May 3 17:33:45 2001 Douglas C. Schmidt + + * ace/OS.h: Fixed a mistake in the setsockopt() comment. Thanks + to Craig Rodrigues for reporting this. + +Thu May 3 17:43:33 2001 Balachandran Natarajan + + * ace/Acceptor.cpp (ACE_Acceptor): Fixed a warning in g++ builds. + +Thu May 3 16:00:15 2001 Nanbor Wang + + * ace/Malloc.h: + * ace/PI_Malloc.h: Fixed the [PI_]Control_Block size estimation + macros. I added a new member to control block. + +Thu May 3 14:52:33 2001 Balachandran Natarajan + + * ace/CDR_Stream.h (ACE_InputCDR): + * ace/CDR_Stream.cpp: Removed the method steal_data () as it did + not serve the purpose. Added a new method exchange_data_blocks + (). This method exchanges data_blocks between two CDR + streams. The write and read pointers are also exchanged. This + method performs no allocation and no releases and is lock free. + +Thu May 3 06:58:29 2001 Douglas C. Schmidt + + * ace/Acceptor.{h,cpp}, + * ace/SOCK_Acceptor.{h,cpp}: When the number of clients + connecting to a server exceeds the process handle limit the + server would busy loop. The Acceptor accept_svc_handler() + method is called which (1) constructs a handler and (2) attempts + to accept the connection, which fails (because there is no + available handle). The handler is destructed, but the connect + request is still queued and so the acceptor gets called back + again.... and so on until one of the client which is already + connected disconnects and frees up a descriptor. Changed the + Acceptor the close and reopen the connection when accept() + fails. A check is done to make sure address reuse is set. So + this fix will only work in case where it is set. Thanks to + Dominic Hughes for this fix. + + * ace/Unbounded_Queue.h: The comment was incorrect for + ~ACE_Unbounded_Queue. Thanks to Johnny Willemsen for + reporting this. + +Thu May 3 08:00:56 2001 Balachandran Natarajan + + * examples/ASX/Event_Server/Event_Server/Options.cpp: + * examples/ASX/UPIPE_Event_Server/Options.cpp: Warning fixes that + missed my earlier fix. This warning will appear only in the + evening SUNOS EGCS build result. Just a proactive fix. :) + +Thu May 3 07:42:01 2001 Balachandran Natarajan + + * examples/IPC_SAP/FILE_SAP/client.cpp: Fixed a warning with Linux + builds. + +Wed May 2 22:55:25 2001 Balachandran Natarajan + + * examples/ASX/Event_Server/Event_Server/Options.cpp: + * examples/ASX/UPIPE_Event_Server/Options.cpp: + * examples/IPC_SAP/FILE_SAP/client.cpp: + * examples/Naming/test_open.cpp: + * examples/Naming/test_writers.cpp: Fixed warnings in g++ builds. + +Wed May 2 18:36:29 2001 Douglas C. Schmidt + + * tests/README: Clarified that the shared memory tests now + work fine on Win9x! Thanks to Cristian Ferritti for reminding + me to do this. + +Wed May 2 15:10:28 2001 Balachandran Natarajan + + * ace/CDR_Stream.h (ACE_InputCDR): + * ace/CDR_Stream.cpp: Added a new constructor for ACE_inputCDR + class. This constructor would take the data block with a + pre-determined read and write pointer positions. This is helpful + when an application would like to create a CDR stream with a + smei-processed data block. + +Wed May 2 11:10:59 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added a colon to seperate the + run_test.pl specification from "!" that is used to indicate + where the scripts shouldn't be run. + +Wed May 02 05:40:47 2001 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Use Queued_Message_Test/run_test.pl + +Wed May 2 06:31:46 2001 Douglas C. Schmidt + + * ace/Makefile: Make it possible to set where the QTDIR is located. + Thanks to Thomas Groth for this + enhancement. + +Tue May 1 21:38:00 2001 Balachandran Natarajan + + * ace/Process.cpp (spawn): When an application running with user + ID=0 (i.e. root) spawns a new process using + ACE_Process_Manager::spawn(), which in turn calls + ACE_Process::spawn() and tries to set a user ID and a group ID + for the new process different from root/other, the call to + setreuid() succeedes but the call to setregid() made thereafter + fails, because the process has no longer UID=0 and thus it + cannot change to a different group. To fix this, it was + necessary to swap the order of the calls to setreuid() and + setregid(). Thanks to Ramiro Penataro for + reporting this. + +Tue May 1 11:05:48 2001 Ossama Othman + + * tests/MEM_Stream_Test.cpp (handle_input): + + Fixed syntax error. "ACE_TCHAR," not "ACE_CHAR." + +Tue May 1 09:57:30 2001 Douglas C. Schmidt + + * ace/Activation_Queue.cpp (enqueue): Clarified the behavior + of passing sizeof (*mr). Thanks to Guy Bolton King + + +Tue May 1 07:13:59 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst : Sun CC 5.1 cannot work with + Simple_Naming test. Made sure that this test does not run with + Sun CC 5.1. + +Tue May 1 06:15:26 2001 Douglas C. Schmidt + + * ace/Hash_Map_Manager_T.h (class ACE_Hash_Map_Manager_Ex): Fixed + an erroneous comment. Thanks to Mark Drijver + for finding this. + + * ace/Local_Name_Space_T.cpp (create_manager_i): It's now valid + to use fixed mmap addresses on Win9x. Thanks to Cristian Ferretti + for these fixes. + + * ace/Mem_Map.{h,i}, + * ace/ace_wchar.h, + * ace/OS.{h,i}: Added support to the ACE_OS::mmap() function and + ACE_Mem_Map class so they work properly on Win9x. Thanks to + Cristian Ferretti for these fixes. + + * tests/Malloc_Test.cpp (main): Updated this test so that it + doesn't try to do any remapping or alternative child address + ranges on Win9x. Thanks to Cristian Ferretti + for pointing this out. + + * tests/MEM_Stream_Test.cpp (handle_input): Make sure to multiple + MAXPATHLEN * sizeof (ACE_CHAR) to handle Unicode properly. + Thanks to Cristian Ferretti for + pointing this out. + +Mon Apr 30 12:56:03 2001 Balachandran Natarajan + + * bin/nightlybuilds/builds.lst : Removed RAPI of the scoreboard. + +Sun Apr 29 15:20:00 2001 Michael Kircher + + * bin/auto_run_tests.lst: + + Added a flag to the Pluggable UDP test, so that it does not + get run in environments using only statically linked libraries. + +Sun Apr 29 11:44:26 2001 Douglas C. Schmidt + + * ace/ace_wchar.h: Reverted the following change + + Tue Apr 24 06:28:00 2001 Douglas C. Schmidt + * ace/ace_wchar.h: Fixed some code for VxWorks. Thanks to + Albert Wijnja for reporting this. + + This change is confusing since it's inconsistent with other + platforms that enable ACE_TEXT_WIDE. + +Thu Apr 26 20:14:48 2001 Balachandran Natarajan + + * ace/CDR_Stream.h (ACE_InputCDR): + * ace/CDR_Stream.cpp: Added a new method steal_data () which + replaces data blocks from one InputCDR stream to another. This + is a slightly modified form of steal_from () which basically + creates a new data block for the source stream. Creating a new + data block incurs the unwanted malloc overhead. + +Thu Apr 26 12:37:45 2001 Nanbor Wang + + * tests/README: Updated the list of tests that do not work on + windows 9x/ME for their limited shared memory support. Thanks + to Cristian Ferretti for pointing + them out. + +Thu Apr 26 12:30:19 2001 Nanbor Wang + + * ace/Containers_T.h Updated documentation for + ACE_DLList_*Iterator's on the use of method + . Users are responsible for release + (free'ing) the returned element. Thanks to Rachel G. Smith + for motivating the change. + +Thu Apr 26 07:58:56 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Prevented the BiDirectional tests from + running in the Minimum nightly builds. + +Thu Apr 26 07:48:30 2001 Balachandran Natarajan + + * ace/MEM_IO.h (ACE_MEM_IO): Some cosmetic fixes. + +Thu Apr 26 07:38:01 2001 Balachandran Natarajan + + * examples/IPC_SAP/SOCK_SAP/CPP-memserver.cpp: Fixed a compile + error. The ACE_MEM_IO::fini () was taking an integer + value. There was no method with a signature fini (int). Removed + the integer argument. + +Wed Apr 25 23:24:25 2001 Nanbor Wang + + * tests/MEM_Stream_Test.cpp: Changed the error message on SysV + semaphores to LM_WARNING and moved it up before executing the MT + test. + + * ace/MEM_IO.cpp: + * ace/MEM_IO.h: + * ace/MEM_IO.i: Do not compile MT signaling code if only SysV + semaphores are available. + + * ace/MEM_Acceptor.cpp: + * ace/MEM_Connector.cpp: Force the other party to use Reactive + signaling if we don't support MT signaling. + +Wed Apr 25 19:48:48 2001 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Remove the tests/Oneway_Buffering/run_timeout.pl test from the + list. It is giving spurious errors, but fixing them would take + me too long. + +Wed Apr 25 20:23:44 2001 Nanbor Wang + + * ace/config-linux-common.h: Revert my previous change: + + Wed Apr 25 03:45:55 2001 Nanbor Wang + + Linux's POSIX semaphores is broken. Thanks to Ossama for + noticing this. + +Wed Apr 25 18:32:54 2001 Douglas C. Schmidt + + * ACE-INSTALL.html: Make sure to mention that ACE (and TAO) run + on Solaris 8. Thanks to Richard Hardgrave + for motivating this. + + * include/makeinclude: Zapped the platform_sunos5_egcs.GNU + file. Thanks to Craig Rodrigues for the suggestion. + +Wed Apr 25 15:30:18 2001 Nanbor Wang + + * tests/Malloc_Test.cpp: The reference counter needs to be release + if we want it to work. + +Wed Apr 25 03:45:55 2001 Nanbor Wang + + * tests/MEM_Stream_Test.cpp: Temporarily changed the informational + message about the use SYSV semaphores to LM_ERROR so we can find + those platforms out quicker. Many of them may actually support + POSIX semaphores. We need to enable them in that case. + + * ace/config-linux-common.h: Added ACE_HAS_POSIX_SEM and + ACE_LACKS_NAMED_POSIX_SEM. Linux actually support them. I'm + not sure if there are any version of linux that don't. + +Wed Apr 25 03:15:34 2001 Nanbor Wang + + * ace/Malloc.h: Added new variables to reference counting the + Malloc. + + * ace/PI_Malloc.h: Added new variables to reference counting the + Malloc and removed a ton of duplicated code that had already + been defined in Malloc.h. + + * ace/Malloc_T.cpp: + * ace/Malloc_T.h: + * ace/Malloc_T.i: Added 2 new methods to query the reference + counter and to release the reference counter. The reference + counter is created with 1 when the malloc first use a new + backing store. Later malloc that attaches to the same backing + store will increase the reference counter. It's the user's + responsibility to invoke release when the malloc is no longer + needed. The reference counter provides a way to indication it's + safe to clean up the backing store without upsetting other + malloc that might still need it. Note, however, the malloc will + not cleanup the backing store automatically when the reference + counter drops to 0 because we may want to attach another malloc + to it in some later point. + + * ace/MEM_IO.cpp: + * ace/MEM_IO.h: + * ace/MEM_SAP.cpp: + * ace/MEM_SAP.h: Use the aforementioned reference counter to + cleanup the backing store automagically. + + * ace/MEM_Stream.h: + * ace/MEM_Stream.i: Removed cleanup method as it is no longer + needed with the previous changes. Removed unnecesary + argument from fini () method. + + * ace/MEM_Stream.cpp: Simply calling fini () without worrying + about cleaning up the backing store. + + * tests/MEM_Stream_Test.cpp: No longer need to hint for cleanup. + + * tests/Malloc_Test.cpp: Added ACE_ASSERT to check for proper + operation of reference counter. + +Tue Apr 24 17:54:00 2001 Carlos O'Ryan + + * ace/Makefile: + Add 'Timer' to the default list of ACE components, without many + a test, application or example do not compile. + +Tue Apr 24 16:39:29 2001 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Add Reliable_Oneways, Blocking_Sync_None, Oneway_Buffering, + Big_Oneways, Big_Twoways, Big_Request_Muxing and + Queued_Message_Test to the nightly builds. Most of these tests + are part of the 132 regression test suite. + +Tue Apr 24 06:28:00 2001 Douglas C. Schmidt + + * ace/Makefile: Refactored some stuff to improve the + ACE subsetting as follows: + + . Moved Malloc_Instantiations.cpp from libACEUtils to the + component libACE_Memory. + + . Moved Handle_Set.* to libACE_Utils to satisfy ACE.* + + . Moved Dynamic_Service_Base to libACE_Svcconf + + . Build a new component libACE_Timer with : + Timer_Wheel.*,Timer_Queue.*,Timer_List.*,Timer_Heap.*,Timer_Hash.* + Timeprobe.* Time_Request_Reply.* System_Time.* Profile_Timer.* + High_Res_Timer.* + + Thanks to Thomas Groth for these + suggestions. + + * docs/ACE-guidelines.html: Updated the discussion of using + open() rather than constructors. Thanks to Stan Pinte + for motivating this. + +Sat Apr 14 10:51:39 2001 Carlos O'Ryan + + * ace/Log_Msg.h: + Document the lock related functions in a separate Doxygen + section. + +Mon Apr 23 17:18:35 2001 Steve Huston + + * ace/ACE.cpp (ACE::handle_timed_complete): Set need_to_check for + any non-success result, or on a system where you can't tell (AIX). + Also, to check, use getsockopt to retrieve the status/error if + SOL_SOCKET and SO_ERROR are defined; else use the old recv method. + This gets you a real error code on a failed connect, if the platform + supports it. + + * tests/SOCK_Connector_Test.cpp: For an expected success, allow test + to pass if socket gets a reset but not if it says ENOTCONN. If there + are platforms that can't do SOL_SOCKET/SO_ERROR (above) then this + other code may need to be re-enabled. + +Mon Apr 23 13:36:27 2001 Steve Huston + + * ace/ACE.cpp (ACE::handle_timed_complete): Winsock (ACE_WIN32) sets + the exception bit (not the read bit) for a failed async connect. + So on fail, don't bother to do the recv trick to see if the socket + really did fail. + + * ace/Connector.cpp (ACE_Connector::handle_output): + * ace/SOCK_Connector.cpp (complete): Apparantly, Win2000 has + fixed the problem where a connection succeeds but can't be used + for a time. So, the sleep workaround is restructured for ACE_WIN32 + to try the new socket first, and only do the sleep if it fails. + Don't try to do this check (e.g. building on Win2000) at compile + time, since we want to be able to build on NT and run on Win2000. + + * ace/README: + * ace/config-win32-common.h: Removed the macro, + ACE_HAS_BROKEN_NONBLOCKING_CONNECTS. It was only used in the two + cases above, and is not needed any longer. + +Mon Apr 23 07:08:09 2001 Douglas C. Schmidt + + * ace/Based_Pointer_T.h: Updated the documentation to + explain how ACE_Based_Pointer (NULL) behaves. Thanks to Tom + Moog for motivating this. + +Sun Apr 22 14:26:56 2001 Carlos O'Ryan + + * ace/OS.h: + Some warnings are automatically disabled, but the pragmas only + make sense for MSVC. + + * ace/streams.h: + Fixed problems for Sun/CC-4.2, the trick is to include + strstream.h on MINGW32 *and* unix-like platforms, while + strstrea.h is included for all other WinXX-based compilers. + +Sat Apr 21 19:02:27 2001 Nanbor Wang + + * netsvcs/clients/Naming/Dump_Restore/Makefile: + * netsvcs/clients/Naming/Client/Makefile: Removed duplicated ACE + library. I thought I removed them all. + +Sat Apr 21 15:31:27 2001 Carlos O'Ryan + + * ace/ACE.cpp: + * ace/Basic_Types.h: + * ace/Configuration.cpp: + * ace/Handle_Gobbler.i: + * ace/Lib_Find.cpp: + * ace/Local_Name_Space_T.cpp: + * ace/Log_Msg.cpp: + * ace/Makefile: + * ace/Mem_Map.cpp: + * ace/Memory_Pool.cpp: + * ace/Message_Queue.i: + * ace/NT_Service.cpp: + * ace/OS.cpp: + * ace/OS.h: + * ace/OS.i: + * ace/OS_String.cpp: + * ace/Process.cpp: + * ace/Process_Manager.cpp: + * ace/Registry.cpp: + * ace/SOCK_Connector.i: + * ace/Sock_Connect.cpp: + * ace/TTY_IO.cpp: + * ace/WFMO_Reactor.cpp: + * ace/WFMO_Reactor.i: + * ace/WIN32_Asynch_IO.cpp: + * ace/config-cygwin32-common.h: + * ace/config-g++-common.h: + * ace/config-win32-common.h: + * ace/config-win32-mingw.h: + * ace/config-win32.h: + * ace/streams.h: + * examples/NT_Service/Makefile: + * examples/NT_Service/main.cpp: + * examples/NT_Service/ntsvc.cpp: + * include/makeinclude/platform_cygwin32.GNU: + * include/makeinclude/platform_gnuwin32_common.GNU: + * include/makeinclude/platform_mingw32.GNU: + * include/makeinclude/rules.local.GNU: + * include/makeinclude/wrapper_macros.GNU: + * tests/CDR_File_Test.cpp: + * tests/Cached_Accept_Conn_Test.cpp: + * tests/Cached_Conn_Test.cpp: + * tests/Conn_Test.cpp: + * tests/Handle_Set_Test.cpp: + * tests/MEM_Stream_Test.cpp: + * tests/MEM_Stream_Test.h: + * tests/MM_Shared_Memory_Test.cpp: + * tests/MT_SOCK_Test.cpp: + * tests/Malloc_Test.cpp: + * tests/Mem_Map_Test.cpp: + * tests/OS_Test.cpp: + * tests/Priority_Reactor_Test.cpp: + * tests/Process_Strategy_Test.cpp: + * tests/Reactor_Exceptions_Test.cpp: + * tests/Reactor_Notify_Test.cpp: + * tests/SOCK_Send_Recv_Test.cpp: + * tests/SOCK_Test.cpp: + * tests/SPIPE_Test.cpp: + * tests/Svc_Handler_Test.cpp: + * tests/run_tests.bat: + * tests/run_tests.sh: + * tests/RMCast/RMCast_Fragment_Test.cpp: + Add support for mingw (www.mingw.org) and partial support for + cygwin (http://cygwin.com/). Many thanks to Cristian Ferretti + + +Fri Apr 20 18:21:41 2001 Carlos O'Ryan + + * ace/CDR_Stream.i (align_write_ptr): + Don't use grow_and_adjust() here because it forces an + allocation, using simply adjust() is better. + +Fri Apr 20 19:37:53 2001 Douglas C. Schmidt + + * ace/Get_Opt.h: Updated the documentation to match the constructor + arguments for ACE_Get_Opt. Thanks to Benot Desmeules + for reporting this. + + * ace/TP_Reactor.cpp: Added a workaround for compiling ACE on + Linux for the OS/390 OS. Thanks to James Dorsey + for reporting this. + +Fri Apr 20 00:57:24 2001 Douglas C. Schmidt + + * ace/Containers_T.cpp (operator=): Added a missing assignment to + this->size_ = s.size_. Thanks to Juan Jose Comellas + for reporting this. + + * ace/SOCK_Dgram: One of the send() methods was lacking a "const" + in front of the ACE_Addr &. This has been fixed. Thanks to + Victor Poznyak for reporting this. + +Thu Apr 19 16:18:33 2001 Steve Huston + + * ace/Log_Msg.h: Doxygen-ized some function arguments; other + minor doc cleanups. + +Thu Apr 19 11:08:15 2001 Douglas C. Schmidt + + * ACE-INSTALL.html: Point out that ACE supports Solaris 8. + Thanks to Logan Modahala for motivating + this. + +Wed Apr 18 13:57:40 2001 Chad Elliott + + * ace/ACE.cpp: + + Modification to check errno for ENOBUFS (in addition to + EWOULDBLOCK) after writing to a file descriptor. This will happen + on VxWorks when a client sends data faster than the server can + receive it. This modification causes this to be a retry situation + instead of an error. [Bug 866] + +Wed Apr 18 11:33:07 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added the BiDirectional tests to the + nightly builds. There is no reason why it did not go in so far. + +Wed Apr 18 10:25:03 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Changed the name of the -config option + for SUNCC5.1. Removed the dot and replaced it with a '_'. + +Wed Apr 18 05:23:53 2001 Douglas C. Schmidt + + * tests/Config_Test.cpp: Fixed several warnings related to + not using ACE_TEXT for wide-strings. Thanks to Bala for + reporting this. + +Wed Apr 18 02:08:16 2001 Nanbor Wang + + * examples/Synch/proc_sema.dsp: Fixed release build settings. + +Tue Apr 17 12:33:49 2001 Steve Huston + + * ace/Service_Config.cpp (open_i): If the caller supplies a + logger key, enable the ACE_Log_Msg::LOGGER bit when opening + the ACE_Log_Msg instance, else the logger key is ignored. + +Tue Apr 17 06:15:00 2001 Michael Kircher + + * bin/auto_run_tests.lst: + + Added the UDP Pluggable Protocol test to the list of executed tests. + +Mon Apr 16 20:42:46 2001 Carlos O'Ryan + + * include/makeinclude/platform_qnx_rtp_gcc.GNU: + Remove obsolete comments and raise the optimization level from + -O2 to -O3, the latter disables a huge number of warnings for + PACE. + +Mon Apr 16 22:15:28 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Commented out some tests that are + failing on SUNCC 5.1. The failure is because of a compiler + bug. The problem is that the compiler seems to have difficulty + in calling the virtual method in a class hierarchy which is + built with multiple inheritance. + +Mon Apr 16 20:24:11 2001 Douglas C. Schmidt + + * tests/Config_Test.cpp (main): Remoted the test_io() function. + Thanks to Jerry Odenwelder for + confirming this. + +Mon Apr 16 16:18:57 2001 Carlos O'Ryan + + * ace/config-qnx-rtp.h: + Add support for gperf under QNX + + * include/makeinclude/platform_qnx_rtp_gcc.GNU: + The -fexceptions flag has no place in the CPPFLAGS macros, it + should go in CCFLAGS (though I could be convinced to put it in + CFLAGS) + +Mon Apr 16 16:13:29 2001 Steve Huston + + * ace/Configuration.h (ACE_Configuration::root_section): Made this + method 'const'; makes today's changes easier to deal with. + + * ace/Configuration_Import_Export.cpp (string_has_white_space): + * ace/Configuration.cpp (operator==): Replaced 'true' with 1 and + 'false' with 0; replace const_cast<> with ACE_const_cast (), + per docs/ACE-guidelines.html, and IBM C++ :-) Also, use two + non-const local variables instead of const_casting 'this' and + 'rhs' on every use. + Made ACE_Configuration::root_section (void) const. + + * ace/ace.icc: This was an early hack attempt to use library or DLL + build for Visual Age C++ 4. It is now the Visual Age C++ 5 + configuration for building ACE on AIX. The ace-dll.icc and + ace-lib.icc are still around for Visual Age C++ 4 users, but may + not work and will be removed in a future ACE release. This + config is for Visual Age C++ 5 only and can/will be extended to + do subset builds as well as debug/optimize/etc variants. + + * bin/make_pretty.pl: Pick out AIX ld errors correctly. + + * include/makeinclude/platform_hpux_aCC.GNU: Note HP problem report + number and disposition for inability to use -AA and +noeh together. + +Mon Apr 16 12:32:48 2001 Nanbor Wang + + * tests/MEM_Stream_Test.cpp: Limited the concurrent connections + used in the multithreaded test on platforms without POSIX or + Win32 semaphores. In this case, SysV semaphores are used and + a user can only instantiate very limited number of them. The + test will also print out an INFO in this case as it implies + there can only be one "multithreaded" connection in one host at + any instance. This fixed the test on some obsolete UNIX + platforms. + +Mon Apr 16 09:58:23 2001 Balachandran Natarajan + + * tests/Config_Test.cpp: Fixed a warning with g++ builds. The + warning was because of an unused function. + +Sun Apr 15 21:27:19 2001 Nanbor Wang + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Added new Configuration_Import_Export.{h,cpp} + files. + +Sun Apr 15 19:33:19 2001 Douglas C. Schmidt + + * ace/Configuration.cpp, + * ace/Configuration_Import_Export.cpp: Fixed some warnings + that show up with G++. Thanks to Carlos for reporting this. + +Sun Apr 15 17:13:40 2001 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Disabled TAO/tests/Client_Leaks on all configurations, it is + failing systematically because it cannot create processes fast + enough. + +Sat Apr 14 18:08:16 2001 Carlos O'Ryan + + * ace/Configuration_Import_Export.h: + Fixed small typo in the @file comment for + Configuration_Import_Export.h + +Sat Apr 14 18:31:15 2001 Douglas C. Schmidt + + * ace/Makefile.bor: Added new Configuration_Import_Export.obj file. + + * tests/Config_Test.cpp: Added tests for the new ACE_Configuration* + stuff. Thanks to Jerry Odenwelder for + contributing these. + + * ace/Configuration_Import_Export.{h,cpp}: Added two new files that + do the following: + + 1. Remove the import and export functionality from the + ACE_Configuration object. + 2. Provide two new classes to import/export ACE_Configuration + objects: + + * ACE_Registry_ImpExp import and exports in the Win32 + Registry format - this was the old import/export routine on + ACE_Configuration. + * ACE_Ini_ImpExp imports and exports in an INI format. The + import part of this was called import_config_as_strings in + the old ACE_Configuration object. While this object will + export any ACE_Configuration object, it can only import data as + strings. This is due to the inability to distinguish type + in the INI format. + 3. Added operator== to ACE_Configuration. This is to compare + contents not type. + 4. Test programs were modified to exercise this new functionality. + + Thanks to Jerry Odenwelder for + contributing these. + +Sat Apr 14 12:44:17 2001 Carlos O'Ryan + + * ace/MEM_IO.i: + Reorder operations to eliminate warnings on Tru64/CXX + +Sat Apr 14 11:12:26 2001 Steve Huston + + * tests/CLASSIX_Addr_Test.icc: + * tests/CLASSIX_CLD_Connector_Test.icc: + * tests/CLASSIX_Con_Acc_Test.icc: + * tests/CLASSIX_Group_Test.icc: + * tests/CLASSIX_Notify_Test.icc: + * tests/CLASSIX_OS_Test.icc: + * tests/CLASSIX_Reactor_Test.icc: + * tests/CLASSIX_Select_Reactor_Test.icc: + * tests/CLASSIX_Stream_Test.icc: + Removed these files. They were moved/copied to tests/CLASSIX some + time back and don't belong here. + + * tests/t.icc: Removed. This is not used for anything. + + * tests/Makefile.vac: Corrected 'realclean' actions. + +Sat Apr 14 09:17:32 2001 Steve Huston + + * examples/QOS/Change_Sender_TSpec/sender.dsp: Added extra level of + directory for include and lib - missed this one in yesterday's + set of changes. + +Sat Apr 14 09:08:33 2001 Steve Huston + + * ace/Array_Base.h: Added forward declaration for ACE_Allocator. + * ace/Array_Base.cpp: Added #include "Malloc_Base.h" so IBM C++ + can find ACE_Allocator when instantiating templates. + + * ace/config-hpux-10.x-hpc++.h: When using standard C++ lib, + set the value of ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB to 1. + + * netsvcs/clients/Naming/Dump_Restore/Makefile: + * netsvcs/clients/Naming/Client/Makefile: Add ACELIB to LIBS. This + allows IBM C++ compilers to build the library clean. + + * tests/Makefile.vac: Don't try to use vacbld_r on the entire + project. It can take so long that make gives up and kills + off the build, making a real mess of the .ics files and leaving + random numbers of tests unbuilt. Instead, run vacbld_r on + each .icc file in the directory. Similarly for clean, don't + reply on vacbld_r on the project file - run through all the + ics files and executables based on existing .icc files. + +Fri Apr 13 12:44:21 2001 Steve Huston + + * netsvcs/lib/Server_Logging_Handler_T.cpp (handle_logging_record): + If logging to STDERR is not enabled, don't dump the log record + there either. + +Fri Apr 13 12:21:01 2001 Nanbor Wang + + * ace/Malloc_T.h: Added an explanation on the requirement about + sizeof (TYPE)link of ACE_Cached_Allocator and a link to + ACE_Cached_Mem_Pool_Node where this stuff was explained. Thanks + to Rachel G. Smith for motivating + the change. + +Fri Apr 13 12:05:38 2001 Nanbor Wang + + * tests/MEM_Stream_Test.h: + * tests/MEM_Stream_Test.cpp: Borland C++ has problem cleaning up + the static Atomic_Op object in Echo_Handler in the right order. + Made that an ACE_Singleton and re-organized the test a big. + Thanks to Chris Kohlhoff for reporting and + suggesting the fix. [Bug 862] + +Fri Apr 13 11:58:58 2001 Carlos O'Ryan + + * ace/OS.i (gethrtime): + Add support for the the clock tick register as a high resolution + timer under KCC/Linux. Thanks to David Levine for help on this. + +Fri Apr 13 05:30:04 2001 Douglas C. Schmidt + + * ace/OS.i: Make sure that the PTHREADS version of ACE_OS::thr_yield() + gets top priority over the STHREADS version. Thanks to Munagala + Ramanath for reporting this. + + * ace/Malloc_T.{h,i}: Added support for one of the calloc() methods + to ACE_Cached_Allocator. Thanks to Rachel G Smith + for motivating this change. + + * ace/Malloc_Allocator.h: Updated the comments for ACE_New_Allocator + to indicate that the calloc() methods are also supported. + Thanks to Rachel G Smith for + motivating this change. + + * docs/ACE-bug-process.html: Updated this document to explain how + bugs pertaining to OCI's TAO releases should be handled. Thanks + to Georg Lohrer for motivating this. + +Thu Apr 12 20:36:30 2001 Douglas C. Schmidt + + * ace/OS.i (thr_getspecific): Reorder the way in which we check + the flags so that ACE_HAS_PTHREADS takes precedence over + ACE_HAS_STHREADS. Thanks to Munagala Ramanath + for reporting this. + +Thu Apr 12 21:18:44 2001 Steve Huston + + * include/makeinclude/platform_hpux_aCC.GNU: Added + -D_RWSTD_MULTI_THREAD -D_REENTRANT to CCFLAGS for stdlibcpp build. + Makes execution clean, no core dump on program init. + +Thu Apr 12 17:31:36 2001 Steve Huston + + * examples/IOStream/server/iostream_server.h: Wrap the guts of this + in #if !defined (ACE_LACKS_ACE_IOSTREAM) to build clean on platforms + that can't handle ACE_IOStream. + +Thu Apr 12 17:02:41 2001 Steve Huston + + * examples/QOS/Change_Sender_TSpec/sender.dsp: + * examples/QOS/Change_Sender_TSpec/receiver.dsp: + * examples/QOS/Change_Receiver_FlowSpec/sender.dsp: + * examples/QOS/Change_Receiver_FlowSpec/receiver.dsp: + * examples/QOS/Simple/sender.dsp: + * examples/QOS/Simple/receiver.dsp: Changed project names from 002 + and 003 to sender and receiver. Corrected relative paths for include + and library lookup (add another ..). + + * examples/QOS/QOS.dsw: Change project names from 002/003 to sender + and receiver. + +Thu Apr 12 15:48:22 2001 Joe Hoffert + + * ace/CDR_Stream.i (length): + Moved definition of length method above any of the methods + that call into it. Was producing warnings on Tru64 platform. + +Thu Apr 12 13:06:27 2001 Joel Sherrill + + * include/makeinclude/Makefile.rtems: Replaced debug version + with real version that queries RTEMS application Makefile + infrastructure. + + * include/makeinclude/platform_rtems.x_g++.GNU: Added + --no-print-directory option to all invocations of recursive + make to determine information from Makefile.rtems. This + avoids getting the "entering/exiting directory" messages + included in the results. + + * ACE-RTEMS.README: Added requirement to configure C++ + support in RTEMS. Updated to reflect also compiling for mc68360 + target. + +Wed Apr 11 20:36:36 2001 Nanbor Wang + + * examples/Synch/proc_sema.cpp (main): Fixd an assigning string + literal to char* warning. + +Wed Apr 11 18:04:33 2001 Steve Huston + + * include/makeinclude/rules.bin.GNU: Change the Visual Age C++ + incremental build command to use vacbld_r, the thread-enabled + variant of vacbld. + +Wed Apr 11 11:00:50 2001 Douglas C. Schmidt + + * ACE-INSTALL.html: Added a section illustrating how to build + ACE+TAO for RTEMS. Thanks to Joel Sherrill + for this build procedure. + +Wed Apr 11 11:38:37 2001 Steve Huston + + * ace/IOStream.h: Reverted change from + Tue Apr 10 18:35:22 2001 Steve Huston + and replaced it with a section that sets ACE_LACKS_ACE_IOSTREAM + if ACE_HAS_STANDARD_CPP_LIBRARY is set and ACE_USES_OLD_IOSTREAMS + is not. This restriction is noted and tracked in Bugzilla # 857. + + * ace/IOStream.cpp: + * tests/IOStream_Test.cpp: Reverted change from + Tue Apr 10 18:35:22 2001 Steve Huston + +Wed Apr 11 09:44:32 2001 Chad Elliott + + * examples/Misc/test_trace.cpp: + + Fixed a strange compiler error with Tornado II. + My_Task::recursive was inline which caused an internal compiler + error. + +Wed Apr 11 08:04:21 2001 Douglas C. Schmidt + + * include/makeinclude/platform_linux.GNU: By default, we build + ACE+TAO with exceptions enabled on Linux. Thanks to Craig + Rodrigues for motivating this change. + + * ace/SString.i (operator+): Fixed an "inlined before use" warning. + Thanks to Bala for reporting this. + +Tue Apr 10 16:58:54 2001 Ossama Othman + + * ace/OS.h (ACE_DEFAULT_FILE_PERMS, ACE_DEFAULT_DIR_PERMS): + + Changed the default values on UNIX from 0666 and 0777 to 0644 + and 0755, i.e. removed global write permissions. This addresses + some security issues. Now, only the owner has write permissions + by default. + +Tue Apr 10 18:35:22 2001 Steve Huston + + * include/makeinclude/platform_sunos5_sunc++.GNU: Added a new + build option, stdcpplib, which defaults to 1. If set to 1, + Sun Workshop 5 and Forte 6 compilers will use the standard + C++ library, including standard iostreams. Set to 0 to + use the old, classic iostreams. + + * include/makeinclude/platform_hpux_aCC.GNU: Added support for + the stdcpplib build option. It defaults to 1 if using aC++ + x.27, or 0 if not. Thanks very much to Istvan Buki + for these changes. + + * ace/config-aix-4.x.h: For Visual Age C++ 5, turn on + ACE_HAS_STANDARD_CPP_LIBRARY and + ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB. + + * ace/config-sunos5.5.h: For Sun Workshop 5 and Forte 6 compilers, + take the ACE_USES_OLD_IOSTREAMS setting from the platform_macros.GNU + file; don't set it here. + + * ace/config-hpux-11.00.h: + * ace/config-hpux-10.x-hpc++.h: If the stdcpplib=1 option was used, + then turn on ACE_HAS_STANDARD_CPP_LIB and + ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB. Else turn on + ACE_USES_OLD_IOSTREAMS. + + * ace/IOStream.{h cpp}: Only try to build this stuff if + ACE_LACKS_ACE_IOSTREAM is not defined and ACE_USES_OLD_IOSTREAMS + _is_ defined. The check on ACE_USES_OLD_IOSTREAMS can be removed + when ACE_IOStream gets ported to standard iostreams. + + * tests/IOStream_Test.cpp: Only try this if ACE_USES_OLD_IOSTREAMS + is defined. Remove this if/when ACE_IOStream is ported to new + iostreams. + +Tue Apr 10 17:51:25 2001 Pradeep Gore + + * bin/auto_run_tests.lst: + Added TAO/tests/OctetSeq/run_test1{2}.pl to auto testing. + +Tue Apr 10 16:33:42 2001 Joe Hoffert + + * ace/CDR_Stream.i: + * ace/CDR_Stream.cpp: + Added sanity checks for sizes of strings and arrays. + +Tue Apr 10 15:14:52 2001 Chad Elliott + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + + Added missing else/endif from previous support addition. + +Tue Apr 10 11:48:51 2001 Douglas C. Schmidt + + * include/makeinclude/platform_vxworks5.x_g++.GNU: Added support + for the M68k line of CPUs. Thanks to Albert Pariante + for reporting this. + +Tue Apr 10 02:14:55 2001 Nanbor Wang + + * bin/PerlACE/Run_Test.pm (check_n_cleanup_files): Added a new + PerlACE function that checks for unwanted files and spits out a + warning before removing the file. It makes sure that we not + only clean up resource leaks but also notice their existence. + + * tests/run_test.pl (delete_temp_files): Used the new + to remove the temp files for + MEM_Stream_Test, if there are any. + +Tue Apr 10 1:44:02 2001 Yamuna Krishnamurthy + + * examples/QOS/Change_Sender_TSpec/receiver.cpp: + * examples/QOS/Change_Sender_TSpec/receiver.dsp: + * examples/QOS/Change_Sender_TSpec/sender.cpp: + * examples/QOS/Change_Sender_TSpec/sender.dsp: + * examples/QOS/Change_Sender_TSpec/Sender_QoS_Event_Handler.h: + * examples/QOS/Change_Sender_TSpec/Sender_QoS_Event_Handler.cpp: + * examples/QOS/Change_Sender_TSpec/Receiver_QoS_Event_Handler.h: + * examples/QOS/Change_Sender_TSpec/Receiver_QoS_Event_Handler.cpp: + * examples/QOS/Change_Sender_TSpec/QoS_Util.h: + * examples/QOS/Change_Sender_TSpec/QoS_Util.cpp: + * examples/QOS/Change_Sender_TSpec/QoS_Signal_Handler.h: + * examples/QOS/Change_Sender_TSpec/QoS_Signal_Handler.cpp: + * examples/QOS/Change_Sender_TSpec/FlowSpec_Dbase.h: + * examples/QOS/Change_Sender_TSpec/Fill_ACE_QoS.h: + * examples/QOS/Change_Sender_TSpec/Fill_ACE_QoS.cpp: + * examples/QOS/Change_Sender_TSpec/README: + * examples/QOS/Change_Sender_TSpec/Makefile: + + Added a test to dynamically change the Sender flow spec in + order to continuously change the PATH messages. + + * examples/QOS/Change_Receiver_FlowSpec/receiver.cpp: + * examples/QOS/Change_Receiver_FlowSpec/receiver.dsp: + * examples/QOS/Change_Receiver_FlowSpec/sender.cpp: + * examples/QOS/Change_Receiver_FlowSpec/sender.dsp: + * examples/QOS/Change_Receiver_FlowSpec/Sender_QoS_Event_Handler.h: + * examples/QOS/Change_Receiver_FlowSpec/Sender_QoS_Event_Handler.cpp: + * examples/QOS/Change_Receiver_FlowSpec/Receiver_QoS_Event_Handler.h: + * examples/QOS/Change_Receiver_FlowSpec/Receiver_QoS_Event_Handler.cpp: + * examples/QOS/Change_Receiver_FlowSpec/QoS_Util.h: + * examples/QOS/Change_Receiver_FlowSpec/QoS_Util.cpp: + * examples/QOS/Change_Receiver_FlowSpec/QoS_Signal_Handler.h: + * examples/QOS/Change_Receiver_FlowSpec/QoS_Signal_Handler.cpp: + * examples/QOS/Change_Receiver_FlowSpec/FlowSpec_Dbase.h: + * examples/QOS/Change_Receiver_FlowSpec/Fill_ACE_QoS.h: + * examples/QOS/Change_Receiver_FlowSpec/Fill_ACE_QoS.cpp: + * examples/QOS/Change_Receiver_FlowSpec/README: + * examples/QOS/Change_Receiver_FlowSpec/Makefile: + + Added a test to dynamically change the Receiver flow spec in + order to continuously change the RESV messages. + + * examples/QOS/Simple/receiver.cpp: + * examples/QOS/Simple/receiver.dsp: + * examples/QOS/Simple/sender.cpp: + * examples/QOS/Simple/sender.dsp: + * examples/QOS/Simple/Sender_QoS_Event_Handler.h: + * examples/QOS/Simple/Sender_QoS_Event_Handler.cpp: + * examples/QOS/Simple/Receiver_QoS_Event_Handler.h: + * examples/QOS/Simple/Receiver_QoS_Event_Handler.cpp: + * examples/QOS/Simple/QoS_Util.h: + * examples/QOS/Simple/QoS_Util.cpp: + * examples/QOS/Simple/QoS_Signal_Handler.h: + * examples/QOS/Simple/QoS_Signal_Handler.cpp: + * examples/QOS/Simple/FlowSpec_Dbase.h: + * examples/QOS/Simple/Fill_ACE_QoS.h: + * examples/QOS/Simple/Fill_ACE_QoS.cpp: + * examples/QOS/Simple/README: + * examples/QOS/Simple/Makefile: + + Moved the original QOS example to Simple. + + * examples/QOS/Makefile: + * examples/QOS/QOS.dsw: + + Updated the Makefile to compile the constituent tests. + +Mon Apr 9 18:48:02 2001 Douglas C. Schmidt + + * include/makeinclude/Makefile.rtems: Zapped + + export RTEMS_MAKEFILE_PATH=/opt/rtems/sparc-rtems/erc32/ + + so that the environment variable is obtained from the users + environment. Thanks to Joel Sherrill for + this fix. + + * ace/Log_Msg.h: Only define the ACE_ASSERT macro if it's not + already defined. This make it easy for developers to override + this macro in their config.h file. Thanks to Nathalie D'Amours + for motivating this change. + +Mon Apr 9 15:36:04 2001 Carlos O'Ryan + + * ace/High_Res_Timer.cpp: + Use the 'cpu MHz' line from /proc/cpuinfo in favor of the + 'bogomips' line, because the latter gives the wrong number on + multi-CPU boxes. + +Mon Apr 9 14:37:30 2001 Chad Elliott + + * examples/IPC_SAP/SOCK_SAP/CPP-memclient.cpp: + + Removed extraneous template instantiations. + +Mon Apr 09 09:19:37 2001 Carlos O'Ryan + + * ace/SString.cpp: + Fixed Fuzz error + +Mon Apr 9 08:28:47 2001 Douglas C. Schmidt + + * ace/SString.{h,i,cpp}: Added improved support for ACE_WString: + . The magic number 32 has been changed to ACE_DEFAULT_GROWSIZE. + . ACE_WString only allocates memory when it is needed. + . The grow strategy can be modified by setting the ACE_GROW_LINEAR define. + the string does not double the memory then, but increases the memory by + ACE_DEFAULT_GROWSIZE. + Thanks to Eric Zuur for contributing these + enhancements. + + * ace/High_Res_Timer.cpp (get_cpuinfo): Added support for the Pentium + III and IV. Thanks to Stephane Pion + for contributing this fix. + +Mon Apr 9 07:50:08 2001 Chad Elliott + + * examples/IPC_SAP/SOCK_SAP/CPP-memclient.cpp: + * examples/IPC_SAP/SOCK_SAP/Makefile: + Fixed a typo in the Makefile and added "CPP-inclient.h" include to + CPP-memclient.cpp. + +Mon Apr 9 07:42:29 2001 Chad Elliott + + * ace/Basic_Types.cpp: + Changed format flags from ios::fmtflags to unsigned long. + This typedef is not supported by all platforms. Thanks Carlos + for suggesting this change. + +Mon Apr 09 08:08:11 2001 Johnny Willemsen + + * ace/Timer_Queue_T.h + Declared private copy constructor and assignment operator + for class ACE_Event_Handler_Handle_Timeout_Upcall + +Sun Apr 08 18:55:58 2001 Carlos O'Ryan + + * tests/DLL_Test.cpp: + Use ACE::ldname() instead of keeping a local function to + decorate the name. + Use the "d" suffix only on MSVC debug builds. + + * tests/Makefile.bor: + * tests/DLL_Test.bor: + New Borland Makefile for the shared library in DLL_Test. Thanks + to Christopher Kohlhoff for providing the + patches. + + * tests/run_test.pl: + Add ExeSubDir to the path, required in Borland builds to find + the shared libraries created locally. + +Sun Apr 8 13:12:54 2001 Douglas C. Schmidt + + * ace/SString.cpp: Reordered various constructor initializers so + G++ doesn't complain. Thanks to Bala for reporting this. + + * ace/SString.{h,i,cpp}: Added various optimizations to ACE_WString + so it will perform certain operations as efficiently as + ACE_CString. Thanks to Eric Zuur for + contributing these enhancements. + +Sun Apr 08 12:10:30 2001 Nanbor Wang + + * examples/IPC_SAP/SOCK_SAP/CPP-memclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-memserver.cpp: + * examples/IPC_SAP/SOCK_SAP/Makefile: Updated obsolete + shared-memory transport functions. + +Sun Apr 8 09:49:26 2001 Douglas C. Schmidt + + * bin: Added a new shell script called "make-components" that enables + each ACE component to be built in a simple manner using the + following change from Arturo. + + * ace/Makefile: Generalized the libACE.a and libACE.$(SOEXT) targets + to simplify subsettings. Thanks to Arturo Montes + for reporting this. + +Sat Apr 7 16:00:48 2001 Douglas C. Schmidt + + * tests: Added a new rtems_init.c file. Thanks to Joel Sherrill + for contributing this port. + + * include/makeinclude: Added the new platform_rtems.x_g++.GNU file. + * ace: Added the new config-rtems.h file. + + * ace/OS.cpp: Added support for RTEMS, which is an open-source + real-time operating system that can be downloaded from + ftp://ftp.oarcorp.com/pub/rtems. Thanks to Joel Sherrill + for contributing this port. + + * ace/OS.cpp: The return type for ACE_OS::readv_emulation() + should have been ssize_t, not int, to be consistent with its + definition in the header file. Thanks to Joel Sherrill + for reporting this. + +Sat Apr 7 21:16:49 2001 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Add the new Crash_On_Write and MT_Timeout tests to the nightly + builds. + +Fri Apr 6 21:02:05 2001 Carlos O'Ryan + + * examples/Synch/proc_sema.cpp: + Add missing #include for "ace/Log_Msg.h", on platforms that + define ACE_TEMPLATES_REQUIRE_SOURCE this include is magically + obtained, but this is not the case for SunCC 4.2, and + True64/CXX. + +Fri Apr 06 16:22:24 2001 Nanbor Wang + + * ace/SString.h (ACE_Tokenizer): Updated documentation and added + some examples. Thanks to Jody Hagins for + providing the original example. + +Fri Apr 6 17:11:34 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added the Single_Read test to the + nightly build list. + +Fri Apr 6 14:45:52 2001 Chad Elliott + + * ace/Basic_Types.h: + * ace/Basic_Types.cpp: + Changed the as_string() method to avoid using floor() which + required math.h and ACE_CString which caused unnecessary coupling. + +Fri Apr 6 08:34:15 2001 Carlos O'Ryan + + * bin/make_pretty.pl: + Do no give out warnings for the 'nocompatwarnings' option in + HP-UX. + +Fri Apr 6 08:23:02 2001 Chad Elliott + + * ace/Basic_Types.cpp: + * ace/Basic_Types.h: + * tests/Process_Strategy_Test.cpp: + * examples/Connection/misc/Connection_Handler.cpp: + Remove build warnings for platforms that don't support unsigned + long long types and have unsigned char's. + +Fri Apr 6 02:02:01 2001 Nanbor Wang + + * ace/OS.h: + * ace/OS.i: The implementation for process semaphore on platforms + lacking named POSIX semaphores was broken. On these platforms, + semaphores are allocated in MMAP file so they should never be + deleted. Added a flag to remember if a semaphore + can be deleted (USYNC_THREAD) or not (USYNC_PROCESS). + + * ace/config-sunos5.6.h: According to the man pages, SunOS started + supporting POSIX semaphores from 5.6. Defined ACE_HAS_POSIX_SEM + and ACE_LACKS_NAMED_POSIX_SEM. + +Thu Apr 5 11:23:05 2001 Carlos O'Ryan + + * html/index.html: + Add link to the new QoS library documentation. + +Thu Apr 05 03:26:13 2001 Nanbor Wang + + * examples/Makefile: + * examples/Synch/Makefile: + * examples/Synch/README: + * examples/Synch/Synch.dsw: + * examples/Synch/proc_sema.cpp: + * examples/Synch/proc_sema.dsp: Added a new example to play with + process semaphores. + +Thu Apr 05 02:48:51 2001 Nanbor Wang + + * ace/MEM_IO.cpp (write): My earlier change was causing the test + to crash. + + * ace/MEM_Stream.h: + * ace/MEM_Stream.i: + * ace/MEM_Stream.cpp: Added a new method to inform the stream to + clean up its resources when closing down. + + * tests/MEM_Stream_Test.cpp (handle_close): Handle_close should + only inform it's peer to destroy the mmap file instead of + removing the file itself. + +Wed Apr 4 16:21:13 2001 Darrell Brunsch + + * bin/auto_run_tests.lst: + + Added the ImplRepo tests. + +Wed Apr 4 12:13:52 2001 Nanbor Wang + + * ace/MEM_IO.h: Declared ACE_INLINE_FOR_GNUC for + ACE_MT_MEM_IO::Simple_Queue's constructor to eliminate a bogus + warning reported by vxworks' gcc compiler. + +Wed Apr 04 07:47:48 2001 Craig Rodrigues + + * etc/ace_qos.doxygen: + * bin/generate_doxygen.pl: + Generate doxygen documentation for ACE QoS API + +Tue Apr 03 19:55:26 2001 Steve Huston + + * bin/auto_compile: Added a -make_type option - the argument to + the option is the suffix of Makefile to use. Example: + -make_type vac would use Makefile.vac instead of Makefile + when building. + + * bin/make_pretty.pl: Corrected tests for AIX errors/warnings. + + * ace/ace.icp: (new) Visual Age C++ 5 project file for libACE. + + * ace/ace.icc: (new) Visual Age C++ 5 configuration file for + libACE. Replaces ace-dll.icc. It will eventually have the + stuff added to make debug/optimize as well as subsets. + + * ace/ace_vacpp_options.icc: Visual Age C++ file for setting ACE + build options. + + * ace/Makefile.vac: Makefile to build libACE using the Visual + Age C++ 5 incremental compiler. It only has "all" and "realclean" + targets, and uses vacbld_r to do the build. + + * tests/tests.icp: Visual Age C++ 5 Project file for making all the + tests. + + * tests/Makefile.vac: Makefile to drive vacbld_r for Visual Age C++. + + * tests/Config_Test.icc: + * tests/Dirent_Test.icc: + * tests/Logging_Strategy_Test.icc: + * tests/MEM_Stream_Test.icc: + * tests/Message_Queue_Test_Ex.icc: + * tests/OS_Test.icc: + New files for building tests with Visual Age C++. + + * tests/libDLL_Test.icc: Changed to use up-to-date source file. + +Tue Apr 03 13:45:02 2001 Nanbor Wang + + * ace/MEM_IO.cpp: Fixed mismatched ACE_TRACE messages. Thanks to + the all mighty fuzzmasterd for reporting this. + +Tue Apr 3 11:40:42 2001 Priyanka Gontla + + * examples/IPC_SAP/SSL_SAP/dummy.pem: + * examples/IPC_SAP/SSL_SAP/key.pem: + The previous certificates expired. So, generated them + again. + +Tue Apr 03 09:30:10 2001 Nanbor Wang + + * ace/MEM_IO.cpp (write): Fixed a compilation error for Borland + compiler. Thanks to Johnny Willensen for reporting this. + +Mon Apr 02 23:41:34 2001 Nanbor Wang + + * ace/MEM_SAP.cpp: + * ace/MEM_SAP.h: + * ace/MEM_SAP.i: + Generalized the ACE_MEM_SAP class to allocate memory in the new + memory wrapper class ACE_MEM_SAP_Node. + + * ace/MEM_IO.cpp: + * ace/MEM_IO.h: + * ace/MEM_IO.i: + Separated the different signaling mechanisms into a different + class in ACE_MEM_IO so it can determine the "right" signaling + strategy allowed. Currently, we implement the Reactive strategy + (ACE_Reactive_MEM_IO) which uses sockets for signaling and + multithreaded strategy (ACE_MT_MEM_IO) which uses semaphores for + signaling. + + * ace/MEM_Stream.cpp: + Sending an empty buffer over to wake up the "other" end when we + are closing down. + + * ace/MEM_Acceptor.cpp: + * ace/MEM_Acceptor.h: + * ace/MEM_Acceptor.i: + * ace/MEM_Connector.cpp: + * ace/MEM_Connector.h: + * ace/MEM_Connector.i: Added facility to specify the "preferred" + signaling strategy so the acceptor and connector can negociate + and agree on the best signaling mechanism to use. + + * ace/MEM_Stream_Test.h: + * ace/MEM_Stream_Test.cpp: + Added the test for the new MT signaling MEM_Stream transfer. + This part of the test seems to be failing on system that depends + on SysV semaphores (because we need more semaphore than the + system can provide.) + +Mon Apr 2 15:17:13 2001 Chad Elliott + + * ace/config-chorus.h: + + Chorus 4.x supports unsigned long long's. + +Mon Apr 2 14:23:31 2001 Craig Rodrigues + + * ace/Makefile: + only build QoS directory under UNIX if rapi is installed + * ace/QoS/README: + add installation instructions and GQOS/RAPI information + +Mon Apr 2 09:57:31 2001 Darrell Brunsch + + * bin/PerlACE/MSProject.pm: + + Made a change to the tao_idl depencency checking. + It was only checking for tao_idl and $(InputName) where + some places we use $(InputPath) instead. + + * ace/config-win32-msvc-5.h: + * ace/config-win32-msvc-6.h: + + Disabled the Inheritance by Dominance informational + warning that MSVC gives. We have cases of this all over + the place, and normally we just disable the warning on + a file by file basis, but now we just do a blanket disable. + +Mon Apr 2 08:45:24 2001 Carlos O'Ryan + + * bin/nightlybuilds/builds.lst: + Renamed the Debian_Full_WU build, its most important feature is + not that it is at WashU nor that it enables most components. It + is the fact that interceptors are disabled on its configuration. + +Sun Apr 1 17:20:22 2001 Darrell Brunsch + + * ace/INET_Addr.h: + + Added /**/ around for the inclusion of inetLib.h, since some + MS compilers pick this up in dependency generation. + + * bin/PerlACE/MSProject.pm: + + Used \Q\E around the library names when matching, otherwise + the backslashes were interpreted as escaping, and weird + unicode errors popped up. + + * bin/pippen.pl: + + Pippen was being case sensitive, so tao.lib was different + than TAO.lib. Changes to store only lowercase. + +Sat Mar 31 10:16:01 2001 Carlos O'Ryan + + * ACE-INSTALL.html: + Removed broken link, the web page does not exist anymore. Thanks + to John R. Ashmun for pointing this out. + This fixes [BUGID:833] + +Fri Mar 30 14:08:18 2001 Douglas C. Schmidt + + * performance-tests/TTCP/C/new-ttcp.cpp: + * performance-tests/TTCP/ACE-C++/wrapper-new-ttcp.cpp: + Zapped the gettimeofday() method since it didn't seem to be + used. Also, #include "ace/Log_Msg.h". Thanks to Thomas Groth + for reporting this. + + * ace/OS.h: Changed all the ACE_DEFAULT_* default ports of the + various services to start with 200xx rather than 100xx to avoid + conflicts on AIX, which apparently hijacks port 10002 for + various things. Thanks to David Sperry + for reporting this. + +Sat Mar 31 02:06:09 2001 Christopher Kohlhoff + + * ace/config-win32-borland.h: + * include/makeinclude/ace_flags.bor: + Fixed up use of inline functions in DEBUG build. + + * include/makeinclude/ace_flags.bor: + Added macros for the TAO_BiDirGIOP and TAO_TypeCodeFactory + libraries. + +Fri Mar 30 11:17:39 2001 Carlos O'Ryan + + * bin/fuzz.pl: + Add a couple of TODO entries + + * html/index.html: + Add the Audio/Video Streaming service to the index file. + +Fri Mar 30 11:12:53 2001 Carlos O'Ryan + + * ace/*/Makefile: + * apps/*/Makefile: + * docs/*/Makefile: + * examples/*/Makefile: + * netsvcs/*/Makefile: + * performance-tests/*/Makefile: + * tests/*/Makefile: + * websvcs/*/Makefile: + * ASNMP/*/Makefile: + Regenerate dependencies. + +Fri Mar 30 08:15:26 2001 Carlos O'Ryan + + * ace/QoS/QoS_Session.h: + Add #include for ACE_QoS_Export + +Fri Mar 30 07:31:54 2001 Carlos O'Ryan + + * ace/QoS/QoS_Session.h: + Fixed export macro + +Thu Mar 29 20:14:00 2001 Craig Rodrigues + + * ace/SOCK.h: + Remove include of QoS_Session.h, since it is not used here. + +Thu Mar 29 19:48:00 2001 Craig Rodrigues + + * ace/QoS_Session.h: + * ace/QoS/QoS_Manager.h: + * ace/QoS/QoS_Session_Impl.h: + * ace/QoS/QoS_Session_Factory.h: + * examples/QOS/QoS_Signal_Handler.h: + * examples/QOS/Receiver_QoS_Event_Handler.h: + * examples/QOS/client.cpp: + * examples/QOS/QoS_Util.h: + * examples/QOS/Sender_QoS_Event_Handler.h: + * examples/QOS/server.cpp: + * examples/QOS/Makefile: + + Move QoS_Session.h to the ace/QoS directory. + +Thu Mar 29 19:12:38 2001 Steve Huston + + * include/makeinclude/rules.lib.GNU: AIX-specific changes to + build shared libraries by making a shared shr.o file and putting + that into an archive. Seems weird, but that's the way AIX does + things. This makes ACE consistent with other AIX software. + + * include/makeinclude/platform_aix4_cset++.GNU: Made some changes + to attempt to work with the new scheme for shared lib creation on + AIX. Did not test it, and don't plan to. The CSet++ compiler is not + supported by IBM any longer, and Riverace is not supporting ACE + with it. If someone out there sends patches for this, I'll put + them in, but this file is going away after ACE 5.2 is released. + All uses of IBM-supported compilers (IBM C/C++ and Visual Age C++ + in batch mode) should be with the platform_aix_ibm.GNU file. + +Thu Mar 29 16:16:07 2001 Douglas C. Schmidt + + * ace/Token.cpp (renew): A conditional expression used an && rather + and ||, which was causing problems with ACE_Token. Thanks to + Carsten Madsen for reporting this. + + * ace/Message_Queue_T.cpp: If any of the various ACE_Message_Queue_Ex + enqueue*() methods fail then make sure to release the message + blocks! Thanks to Boris Kolpackov for reporting + this. + +Wed Mar 28 21:39:26 2001 Darrell Brunsch + + * ace/NT_Service.h: + + Changed the ACE_NT_SERVICE macros to use ACE_TEXT_* API + calls for those that can take in unicode strings. + + * examples/NT_Service/main.cpp: + + Fixed use of ACE_NT_SERVICE to work with ACE_USES_WCHAR. + + * examples/OS/Process/process.cpp: + * examples/Reactor/WFMO_Reactor/test_directory_changes.cpp: + + Changed some Win32 API calls to use ACE_TEXT_* equivalents. + + * ace/ace_wchar.h: + + Added all the ACE_TEXT_* API macros needed above. + + Thanks to Nick Pratt for + reporting the first of these errors. + +Wed Mar 28 22:07:03 2001 Nanbor Wang + + * tests/tests.dsw: Fixed project dependencies between DLL_Test and + DLL_Test_Impl. Thanks to Alain Decamps + for reporting this. + +Wed Mar 28 20:33:28 2001 Douglas C. Schmidt + + * ace/ACE.cpp: Further improved the implementation of + handle_ready() by simply calling poll() with the timeout + pointer. Thanks to Przemyslaw Marciniak + for reporting this. + +Wed Mar 28 17:45:22 2001 Steve Huston + + * bin/make_pretty.pl: Adjust the error detector for IBM C/C++ 3.6.6. + + * ace/Containers_T.cpp: Add #include "ace/Log_Msg.h" so IBM C/C++ + can see ACE_DEBUG when compiling template instantiations. + +Wed Mar 28 16:40:24 2001 Luther Baker + + * ace/config-all.h + + Removed ACE_WIN32 support for ACE_HAS_POSIX_SEM just because + ACE_HAS_PACE. This can be defined for ACE_WIN32 after we + write more WIN32 emulation. + + * ace/OS.h + * ace/OS.i + * ace/OS.cpp + + PACE updates. + +Wed Mar 28 11:37:09 2001 Fuzz Master D + + * bin/fuzz.pl: + + There are several instances where fuzz gives false + positives, and the code is impossible to fix without + creating compiler warnings. Example: + + void function (CORBA::Environment &ACE_TRY_ENV) + { + #if FOO + some_other_function (ACE_TRY_ENV); + ACE_CHECK; + #else + ACE_UNUSED_ARG (ACE_TRY_ENV); + #endif + } + + So normally ACE_UNUSED_ARG errors can be fixed by keeping + the CORBA::ENvironment unnamed and removing the ACE_UNUSED_ARG, + but in this case it isn't possible. So fuzz now accepts + an ignore command for single line use. The above can be fixed + by changing to: + + void function (CORBA::Environment &ACE_TRY_ENV) + { + #if FOO + some_other_function (ACE_TRY_ENV); + ACE_CHECK; + #else + ACE_UNUSED_ARG (ACE_TRY_ENV); // FUZZ: ignore check_for_ace_check + #endif + } + +Tue Mar 28 13:03:07 2001 Chad Elliott + + * bin/make_pretty.pl: + Modification to recognize HP's future errors as warnings. + +Wed Mar 28 11:34:54 2001 Frank Hunleth + + * ace/CDR_Base.inl: + Removed memset in ACE_CDR::mb_align when ACE_HAS_PURIFY == + 1, since it was causing some TAO unit tests to break (in + particular, the Portable_Interceptors/Service_Context_Manipulation + test). After running Cubit and a few other tests, Purify didn't + notice any more uninitialized memory accesses. Fixes bug #828. + +Wed Mar 28 11:55:39 2001 Steve Huston + + * include/makeinclude/platform_aix_ibm.GNU: New file, replaces + platform_aix_vacpp.GNU for Visual Age C++ 5. Also replaces + use of platform_aix4_cset++.GNU for IBM C/C++ Compilers 3.6.6. + So, for the supported, IBM-supplied compilers (IBM C/C++ 3.6.6 + and Visual Age C++ 5) use this file. If you want to try to keep + using CSet++ 3.4 or earlier, you can keep using + platform_aix4_cset++.GNU, but it's not tested any longer and + will disappear at the next ACE version. If you want to use + Visual Age C++ 4, you should reconsider, and upgrade to version 5. + + * include/makeinclude/platform_aix_vacpp.GNU: Deleted. + + * netsvcs/lib/TS_Clerk_Handler.h: Moved #include "ace/Connector.h" + to be after #include "ace/SOCK_Connector.h" to fix compile error + on AIX, Visual Age C++ 5. + + * ace/config-aix-4.x.h: Clarified comments that this file is for + Visual Age C++ also. Added ACE_DLL_SUFFIX ".a" to match what + is now generated from platform_aix_ibm.GNU. + + * bin/auto_compile: + * bin/make_pretty.pl: Add detection of compile/link warnings and + errors for AIX using the IBM compilers' code. Ignores the multiply + defined symbol warnings from ld if it's an ACE symbol. + + * docs/ACE-development-process.html: Changed to link to Bugzilla so + it works from anywhere. + +Wed Mar 28 10:13:16 2001 Steve Huston + + * ace/Makefile.bor: Don't try to build the SSL directory if + SSL_ROOT is not set. + +Wed Mar 28 08:39:26 2001 Carlos O'Ryan + + * etc/tao_av.doxygen: + New configuration file for the AV streaming service. Many + thanks to Craig Rodrigues for converting that + directory. + + * bin/generate_doxygen.pl: + Add the new configuration file. + +Tue Mar 27 19:54:11 2001 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Disable POA/On_Demand_Loading and POA/Loader for Linux/KCC + builds, because that compiler has problems with destructors + after dynamic loading. + Also add the new Hello test to the nightly regression tests. + +Tue Mar 27 19:43:39 2001 Carlos O'Ryan + + * include/makeinclude/platform_linux.GNU: + Add support for Insure++ + + * include/makeinclude/rules.local.GNU: + Add new macro to let developers change the default destination + for the dependencies. + + * include/makeinclude/wrapper_macros.GNU: + Let the user override the default VDIR directory, and define the + default values for the IDL generated code extensions. + + Thanks to Jody Hagins for all these + improvements. + +Tue Mar 27 19:15:36 2001 Carlos O'Ryan + + * ace/Unbounded_Queue.h: + Add required #include for Chorus builds. + +Tue Mar 27 15:28:56 2001 Douglas C. Schmidt + + * ace/ACE.cpp (handle_ready): Don't try to dereference through + a NULL timeout pointer! Thanks to Przemyslaw Marciniak + for reporting this. + +Tue Mar 27 10:08:44 2001 Carlos O'Ryan + + * ace/Select_Reactor_Base.h: + Add missing #include for builds that define + ACE_HAS_REACTOR_NOTIFICATION_QUEUE. + +Tue Mar 27 05:35:38 2001 Christopher Kohlhoff + + * include/makeinclude/make_flags.bor: + Prevent PASCAL build by default with BCB5 since it is not + required. Since both VCL and non-VCL applications share a common + run-time library you can simply link your VCL code with a + non-PASCAL build of the ACE+TAO libraries. This behaviour can be + overridden by defining the FORCE_PASCAL flag. + + * include/makeinclude/build_core_exe.bor: + * include/makeinclude/build_core_library.bor: + * include/makeinclude/build_dll.bor: + * include/makeinclude/build_exe.bor: + * include/makeinclude/build_lib.bor: + * include/makeinclude/clean.bor: + Build all executables into a directory below the source directory. + Core executables are then copied to the common bin directory. This + is to allow the test scripts to assume all executables can be + found relative to the source directory. + + * include/makeinclude/recurse.bor: + Removed definition of OBJFILES since Borland make doesn't seem to + support recursive macro expansion. + + * ace/config-win32-borland.h: + * include/makeinclude/ace_flags.bor: + Always explicitly define __ACE_INLINE__, with it defaulting to 1. + This change will allow the same compiler flags to be used in user + applications regardless of whether a debug or non-debug build of + ACE is being used. + +Tue Mar 27 09:48:33 2001 Johnny Willemsen + + * include/makeinclude/ace_flags.bor + Corrected the smartproxies_cflags + + * examples/IPC_SAP + Added new BCB makefiles for these examples + + * ace/Timer_Hash_T.cpp + * ace/Timer_Hash_T.h + * ace/Timer_Heap_T.cpp + * ace/Timer_Heap_T.h + * ace/Timer_List_T.cpp + * ace/Timer_List_T.h + * ace/Timer_Wheel_T.cpp + * ace/Timer_Wheel_T.h + Made the isdone method on the iterator classes constant + + * ace/Timer_Queue_T.h + * ace/Timer_Queue_T.i + Several get methods are now const + Argument of set_timer_value and set_interval is now passed by const reference + + * ace/Unbounded_Set.h + * ace/Unbounded_Set.cpp + * tests/Collection_Test.cpp + Added the ACE_Unbounded_Set_Const_Iterator which can be used + to iterate over an const set + +Mon Mar 26 21:02:24 2001 Darrell Brunsch + + * ace/Log_Msg_NT_Event_Log.cpp: + + Fixed a compilation problem with RegSetValueEx when + ACE_USES_WCHAR and UNICODE were defined. Thanks to Nick + Pratt for reporting this. + + * ace/ace_dll.dsp: + + Unchecked the "separate types" option for debug linking. + Thanks to Nick Pratt for this suggestion also. + +Mon Mar 26 13:00:37 2001 Carlos O'Ryan + + * ace/Node.h: + * ace/Node.cpp: + * ace/Array_Base.h: + * ace/Array_Base.inl: + * ace/Array_Base.cpp: + * ace/Unbounded_Queue.h: + * ace/Unbounded_Queue.inl: + * ace/Unbounded_Queue.cpp: + * ace/Unbounded_Set.h: + * ace/Unbounded_Set.inl: + * ace/Unbounded_Set.cpp: + * ace/Containers_T.h: + * ace/Containers_T.i: + * ace/Containers_T.cpp: + Move several containers to their own file. This reduces the + amount of code that needs to be parsed, improving compilation + time (not to mention the fact that the code becomes more + readable.) + For backwards compatibility the Containers file still includes + the new smaller files. + + * ace/Makefile: + * ace/Makefile.am: + * ace/Makefile.bor: + Add new files to the install rules. + Since they are templates they do not need to be compiled on MSVC + so no changes to the project files are required. + + * ace/ARGV.h: + * ace/ARGV.cpp: + * ace/Future.h: + * ace/Handle_Gobbler.h: + * ace/Local_Name_Space.h: + * ace/Malloc_Base.h: + * ace/Memory_Pool.h: + * ace/Name_Space.h: + * ace/Priority_Reactor.h: + * ace/Remote_Name_Space.h: + * ace/Service_Config.h: + * ace/Signal.cpp: + * ace/Signal.h: + * ace/Stats.h: + * ace/Thread_Manager.h: + * ace/Timeprobe_T.h: + * ace/Timer_Heap_T.h: + * ace/Timer_Queue_Adapters.h: + * ace/TkReactor.cpp: + To reduce compilation and recompilation times we only include + the header file that includes the container used in each case, + instead of the full containers class. + +Fri Mar 23 12:40:34 2001 Douglas C. Schmidt + + * apps/Gateway/Gateway/Event_Forwarding_Discriminator.cpp: Make sure + to delete the Consumer_Dispatch_Set * that we get back from + unbind(). Thanks to the ever vigilant Mike Winter + for reporting this. + +Thu Mar 22 10:18:24 2001 Douglas C. Schmidt + + * ace/SString.h: Make the various data members protected + rather than private so subclasses can access them. Thanks to + Martin Krumpolec for this suggestion. + + * tests/README: Clarified some things about the tests. + Thanks to Eric Desamore for + motivating this. + +Mon Mar 26 11:03:22 2001 Balachandran + + * ACE version 5.1.14 released. + +Sat Mar 24 07:02:35 2001 Chris Cleeland + + * ace/INET_Addr.i (get_host_addr): Added a const_cast to the + VxWorks-only arm that casts away const on the this ptr so that + inet_ntoa_b can access and fill in the buffer data member that's + used to hold the result from inet_ntoa_b. Thanks to Erik Johannes + for point this out. + +Fri Mar 23 18:01:05 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Some of the tests cannot be run in + Single threaded configurations. Prevented such tests from + running in the nightly builds. + +Fri Mar 23 16:25:18 2001 Balachandran Natarajan + + * tests/New_Fail_Test.cpp: Reverted the change from "Fri Mar 23 + 06:34:33 2001 Balachandran Natarajan ". The + change fails to comipile when exceptions are on. + +Fri Mar 23 08:47:29 2001 Carlos O'Ryan + + * apps/Gateway/Gateway/Options.cpp: + Explicitly #include Log_Msg.h, on platforms that do not define + ACE_TEMPLATES_REQUIRE_SOURCE the header file is not implicitly + included. This should fix compilation problems on Tru64/CXX and + SunCC/4.2 + +Fri Mar 23 06:34:33 2001 Balachandran Natarajan + + * tests/New_Fail_Test.cpp: Fixed a stupid warning in g++, + No_AMI_Messaging builds. Surprising that it showed up only in + this build. + +Thu Mar 22 21:33:37 2001 Chris Cleeland + + * ace/INET_Addr.h: VxWorks' inet_ntoa doesn't behave like most + others, and our use was causing memory leaks. VxWorks prefers + that you use its own inet_ntoa_b, which takes the buffer to fill + as an argument. Thus, for VxWorks, added a data member char buf + of the appropriate length so that get_host_addr can use + inet_ntoa_b to fill that in. + + * ace/INET_Addr.i (get_host_addr): For VxWorks only, changed this + to use the preferred inet_ntoa_b. This eliminate memory leaks + under VxWorks. Thanks to Erik Johannes for + the suggested fix. + +Wed Mar 21 19:20:02 2001 Balachandran Natarajan + + * apps/Gateway/Peer/Peer.cpp (nonblk_put): Fixed a compile error + in g++. + +Wed Mar 21 17:28:26 2001 Steve Huston + + * ace/Message_Queue.h: + * ace/Message_Queue_T.h: Moved definition of typedef for + ACE_DEFAULT_MESSAGE_QUEUE_TYPE from Message_Queue.h to + Message_Queue_T.h, just after defining ACE_Message_Queue<>. + Fixes the case where Message_Queue_T.h is included first, + it includes Message_Queue.h before ACE_Message_Queue<> is + defined, and that breaks the compile. IBM C/C++ hit this. + +Wed Mar 21 16:42:19 2001 Steve Huston + + * bin/auto_compile: Added an option: -notao to ignore the TAO aspects + of the non-configurable things, like looking at the TAO/ChangeLog. + Also, now looks for auto_run_tests.lst in the $BUILD/bin directory, + not the $MODULE/bin directory - this allows some builds to specify + their own lists. + +Wed Mar 21 16:00:56 2001 Nanbor Wang + + The followings are contributions from Scott Snyder + to make ACE happy on Digital UNIX with KCC + 3.4d. + + * include/makeinclude/platform_tru64_kcc.GNU: + * include/makeinclude/platform_osf1_4.0_kcc.GNU: Added KCCOPTS and + support for tru64 unix. + + * ace/OS.h: On this platform, we ran into problems with sigwait + being a macro. The fix that had been added for this was keyed + on __DECCXX_VER, so it isn't picked up on this platform. + + * ace/Sock_Connect.cpp: Enum_Interface_Test failed on this + platform. The code in Socket_Connect.cpp that implements this + is conditional on `__unix' being defined. However, with this + compiler, we get `unix' and `__unix__' defined, but not + `__unix'. Fixed by testing for `__unix__' too. + + * ace/ACE.cpp: Cache_Conn_Test was failing. It looks like the + code in ACE::out_of_handles doesn't have a case to handle osf1. + +Wed Mar 21 12:08:35 2001 Nanbor Wang + + The followings are contributions from Scott Snyder + to make ACE happy on IRIX 6.x with KCC 3.4d. + + * include/makeinclude/platform_irix6.x_kcc.GNU: + Disable the following warings and separate common options into + $(KCCOPTS). + + 280: declaration of a member with the same name as its class Get + this from . + + 608: this pragma must immediately precede a declaration or + statement Get this from . + + * ace/OS.h: Changed to only request RTLD_GROUP and RTLD_NODELETE + if they are actually available. + + * ace/config-irix6.x-kcc.h: Undefined + ACE_LACKS_PLACEMENT_OPERATOR_DELETE since KCC actually supports it. + + Config_Test was failing because with the default setup, ace + tries to locate the shared memory pool at 0x04000000. But it + turns out that this is the same address at which irix likes to + load the KCC shared library, libKCC.so. So the memory pool ends + up blowing away all the library code. Fixed by shifting the + default base address to 0x05000000 for this configuration. + + OS_Test was failing because on irix, kcc 4.0d miscompiles + memchr_emulation if +K3 optimization is used. I worked around + this by just using the library version of memchr instead: + + * ace/ACE.cpp: Cached_Conn_Test was failing because the code in + ACE::out_of_handles doesn't have a case to handle irix. + + * tests/DLL_Test.cpp: It died trying to run object dtors. Fixed by + turning off the close-on-destruction flag for this test. + +Wed Mar 21 13:33:58 2001 Ossama Othman + + * examples/IPC_SAP/SSL_SAP/SSL-server-fancy.cpp: + + Patched this file so that the example actually works. It now + correctly interacts with the SSL client in this example. Thanks + to Defang Zhou for contributing the + patch/changes necessary to make it work. + +Wed Mar 21 07:23:15 2001 Douglas C. Schmidt + + * tests/SOCK_Connector_Test.cpp (find_another_host): Make the + test a bit more resilent against errors with gethostbyname(). + Thanks to Lu Yunhai for this fix. + +Tue Mar 20 17:31:21 2001 Carlos O'Ryan + + * tests/run_test.lst: + The Logging_Strategy_Test dynamically loads the Logger service + (from netsvcs), therefore it does not work on static builds. + +Tue Mar 20 18:17:24 2001 Douglas C. Schmidt + + * ace/OS.i: Fixed the USYNC_PROCESS arm of CreateMutex() in + ACE_OS::mutex_init() so that it calls + ACE_OS::set_errno_to_last_error(). Thanks to Ram Ben-Yakir + for reporting this. + +Tue Mar 20 01:33:24 2001 Ossama Othman + + * ace/SSL/SSL_SOCK_Acceptor.cpp (ssl_accept): + * ace/SSL/SSL_SOCK_Connector.cpp (ssl_connect): + * ace/SSL/SSL_SOCK_Stream.i (send, close): + + Wrap the underlying OpenSSL calls in a do-while(SSL_pending()) + loop. I decided to wrap the SSL_write() calls just in case. + This should fix the last of the non-blocking IO issues in ACE's + SSL wrappers. [Bug 393] + +Tue Mar 20 00:40:43 2001 Ossama Othman + + * ace/SSL/SSL_SOCK_Stream.i (recv): + + Fixed non-blocking IO support for this method. It was necessary + to ensure that a full SSL record was read before returning + control to the caller. Note that the send() method doesn't need + modification since OpenSSL always writes a full record before + returning. [Bug 393] + +Mon Mar 19 19:53:34 2001 Carlos O'Ryan + + * include/makeinclude/ace_flags.bor: + Define macros for the RT Event Service test library + +Mon Mar 19 16:57:43 2001 Irfan Pyarali + + * ace/TP_Reactor.cpp (handle_events): Return value from + handle_events() after the Reactor has been deactivated should be + -1. We just need to remember that as illustrated in + ACE_Reactor::run_reactor_event_loop(), this is not an error: + + if (result == -1 && this->implementation_->deactivated ()) + return 0; + + * tests/Thread_Pool_Reactor_Test.cpp (svr_worker): Changed this + function to call ACE_Reactor::run_reactor_event_loop() instead + of ACE_Reactor::handle_events(). In the previous revision, we + were not handling return values from + ACE_Reactor::handle_events() correctly when + ACE_Reactor::deactivated() had been called. + +Mon Mar 19 09:14:12 2001 Chad Elliott + + * include/makeinclude/platform_chorus4.x_g++.GNU: + + Added an output option to the link command. Linking would fail + in cases where the output was specified in another directory. + +Sun Mar 18 22:12:16 2001 Ossama Othman + + * ace/SSL/SSL_SOCK_Stream.i (close): + + Commented out debugging output that was inadvertently committed + to the repository. + + Don't bother invalidating the handle. Doing so can potentially + cause some side-effects in the underlying OpenSSL + implementation since setting the handle in the SSL_SOCK_Stream + also causes the OpenSSL SSL_set_fd() function to be called. + + Fixed a socket leak caused by the fact that the handle was + invalidated before the underlying ACE_SOCK_Stream was closed. + +Sun Mar 18 09:46:47 2001 Balachandran Natarajan + + * tests/New_Fail_Test.cpp: Fixed warnings in g++. + +Sun Mar 18 08:31:34 2001 Douglas C. Schmidt + + * apps/Gateway/Gateway, + * apps/Gateway/Peer: Added a number of fixes to the Gateway and Peer + applications. Thanks to Lu Yunhai for + contributing these. + +Sun Mar 18 08:31:34 2001 Douglas C. Schmidt + + * examples/IPC_SAP/FILE_SAP/client.cpp (main): Added a couple of + casts so that the arguments passed to printf() will match the + format specifier types. + +Sat Mar 17 18:02:28 2001 Steve Huston + + * ace/config-aix-4.x.h: Fixed settings for exceptions and + placement delete to be ok for Visual Age C++ 5. + + * include/makeinclude/platform_aix_vacpp.GNU: Basically new, + works with the Visual Age C++ 5 batch mode build on AIX. + + * include/makeinclude/rules.lib.GNU: Added aix_build piece to + the section for linking a shared library. It uses the linker + to generate a shr.o (shared) file, then inserts that into + the library that's being built. This new section is only + used with platform_aix_vacpp.GNU at this point. + +Fri Mar 16 15:07:23 2001 Ossama Othman + + * ace/SSL/SSL_Context.h (set_mode): + + Changed the default mode from SSLv3 to SSLv23, i.e. support + SSLv2 and SSLv3 by default. This fixes interoperability + with applications that use Sun's JSSE, which only supports + SSLv2. Thanks to Max Khon for providing the + patch. + +Thu Mar 15 17:47:28 2001 Balachandran Natarajan + + * tests/Log_Msg_Test.cpp: Changed a ERROR message as a DEBUG + message. If it is an error message the scripts that run the + build gets confused. + +Thu Mar 15 17:42:54 2001 Balachandran Natarajan + + * tests/Logging_Strategy_Test.cpp: Changed the "-s" option in the + test to write the output in to the output generated in the "log" + directory. This is just a hack to make the scoreboard clean. + +Thu Mar 15 15:55:37 2001 Steve Huston + + * ace/Message_Queue_T.h: Add #include "ace/Message_Queue.h" so + IBM Visual Age C++ sees ACE_Message_Queue_Base when instantiating + templates. + + * ace/ace-dll.icc: Fixed after being munged in a previous commit. + Also, corrected libACE.a generation and cleanup, and incorporated + fixes from Steve Ige and Jerry + Odenwelder . + + * THANKS: Added Steve Ige to the Hall of Fame. + +Thu Mar 15 11:26:35 2001 Ossama Othman + + * ace/SSL/SSL_SOCK_Acceptor.i (ACE_SSL_SOCK_Acceptor): + + Make sure the handle is set for the ACE_SSL_SOCK_Acceptor, after + initializing the underlying ACE_SOCK_Acceptor. This ensures + that OpenSSL has the proper handle. Thanks to Greg McCain + for suggesting this fix. + + * THANKS: + Added Greg to the hall of the fame. + +Thu Mar 15 05:46:59 2001 Douglas C. Schmidt + + * ace/FILE_Addr.cpp (ACE_FILE_Addr): Make sure to divide the size of + the filename_ by the sizeof (ACE_TCHAR) to handle unicode + correctly. Thanks to the ever vigilant Ivan Murphy for catching + this! + +Wed Mar 14 01:47:10 2001 Nanbor Wang + + * apps/Gateway/Gateway/Makefile: + * apps/Gateway/Peer/Makefile: + * apps/JAWS/server/Makefile: + * apps/gperf/tests/Makefile: + * examples/ASX/CCM_App/Makefile: + * examples/Service_Configurator/IPC-tests/server/Makefile: + * examples/Service_Configurator/Misc/Makefile: + * examples/Timer_Queue/Makefile: + * netsvcs/clients/Naming/Client/Makefile: + * netsvcs/clients/Naming/Dump_Restore/Makefile: Removed + unnecessary 'LIBS += $(ACELIB)'. They were causing link problem + for the latest KCC. compiner. + +Tue Mar 13 20:56:10 2001 Irfan Pyarali + + * ace/WFMO_Reactor.cpp (remove_to_be_added_handler_i): + * ace/WFMO_Reactor.cpp (remove_suspended_handler_i): + * ace/WFMO_Reactor.cpp (remove_handler_i): + + If a user tried to (a) remove a "to be suspended handle" from + either the current info set or the to be added set, the handle + was correctly removed but the "to be suspended handle" count was + not reduced; (b) remove a "to be resumed handle" from the + suspended set, the handle was correctly removed but the "to be + resumed handle" count was not reduced. Since the "to be resumed + handle" and the "to be suspended handle" were not adjusted + properly, the reactor kept waking up thinking that changes were + required. Thanks to Lu Yunhai for + reporting this problem. + + * examples/Reactor/WFMO_Reactor/test_suspended_removals.cpp: Added + an extensive example for regression testing the above use cases. + +Tue Mar 13 15:23:04 2001 Nanbor Wang + + * ace/Service_Manager.cpp (list_services): Fixed Unicode bugs. + +Tue Mar 13 15:13:48 2001 Nanbor Wang + + * tests/Logging_Strategy_Test.cpp: Fixed Unicode related bugs. + +Tue Mar 13 10:04:06 2001 Carlos O'Ryan + + * performance-tests/TCP/run_test.pl: + Fixed the path to the $ACE_ROOT/bin directory, now the script + runs again. + +Tue Mar 13 06:04:03 2001 Douglas C. Schmidt + + * ace/Service_Manager.cpp (list_services): Add an indication of whether + a service is active or paused. Thanks to Mike Curtis for this + improvement. + + * ace/Reactor.h: Clarified that the remove_handler (handle, mask) + method also removes the event handle. Thanks to Pierre Fayolle + for reporting this. + + * tests/Logging_Strategy_Test.cpp (get_statistic): Replace struct stat + with ACE_stat. Thanks to Johnny Willemsen for reporting this. + +Tue Mar 13 00:35:35 2001 Irfan Pyarali + + * ace/Select_Reactor_T.i (deactivated): Reverted this change + regarding Select_Reactor_T::deactivated(): + + Thu Feb 22 12:28:15 2001 Irfan Pyarali + + Though my change improved correctness of access and change to + the variable, it had a negative consequence: the + event loop calls Select_Reactor_T::deactivated() before calling + Select_Reactor_T::handle_events() to make sure that the reactor + is not closed yet. Unfortunately, if + Select_Reactor_T::deactivated() has a guard, it will send a null + event waking up the current leader and thus lead to unnecessary + thrashing. For now, I have removed the guard from the + Select_Reactor_T::deactivated() methods. We should revisit this + issue some time again. This fixes bug 816. + +Mon Mar 12 16:30:32 2001 Balachandran Natarajan + + * tests/Logging_Strategy_Test.cpp (main): Fixed the rest of the + warnings in VxWorks builds. + +Mon Mar 12 16:21:42 2001 Balachandran Natarajan + + * tests/Logging_Strategy_Test.cpp (main): Fixed a couple of + warnings in VxWorks build. Couple of more warnings are left. + +Mon Mar 12 14:16:03 2001 Balachandran Natarajan + + * ace/Local_Name_Space_T.cpp (create_manager_i): Fixed a compile + error on Win32 Unicode platforms. + +Mon Mar 12 12:12:36 2001 Nanbor Wang + + * ACE-INSTALL.html: Also mentioned Windows 2000 explicitly in the + document. Thanks to Rahul Shukla for + raising the question. + +Mon Mar 12 00:49:24 2001 Nanbor Wang + + * tests/tests.dsw: + * tests/Logging_Strategy_Test.dsp: Added a new dsp file. + +Sun Mar 11 21:00:16 2001 Carlos O'Ryan + + * bin/auto_compile: + Print out the config.h and platform_macros.GNU files, this is + useful when debugging builds. + +Sun Mar 11 18:41:08 2001 Douglas C. Schmidt + + * ace/CDR_Stream.h: Updated a comment to clarify that the buffer() + method just returns a pointer to the first block in the chain. + Thanks to Johnny Willemsen for pointing this out. + +Sun Mar 11 17:46:45 2001 Balachandran Natarajan + + * ace/Local_Name_Space_T.cpp: Fixed a compiler error on Win32 + Unicode platforms. + +Sun Mar 11 17:28:40 2001 Irfan Pyarali + + * ace/QoS/QoS_Session_Impl.cpp (rsvp_callback): was unused. + +Sun Mar 11 08:31:05 2001 Douglas C. Schmidt + + * tests/Makefile.bor (NAMES): Added Logging_Strategy_Test. + +Sun Mar 11 07:32:18 2001 Balachandran Natarajan + + * tests/Logging_Strategy_Test.cpp (order): Fixed a warning in g++ + builds. + +Sat Mar 10 23:15:10 2001 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Fixed name of Crashed_Callback test + +Sat Mar 10 19:28:30 PST 2001 Mayur Deshpande + + * include/makeinclude/platform_qnx_rtp_gcc.GNU: + Fixes to enable debugging on QNX without ACE crashing. + Thanks to Andy Olson for the suggestions. + +Sat Mar 10 19:05:38 2001 Darrell Brunsch + + * ace/config-win32.h: + + Include config-win32-common.h even on Windows CE. + + * ace/config-win32-msvc-6.h: + + If ACE_ENDTHREADEX is already defined, don't define it. + + * ace/OS_Dirent.h: + + Changed the use of ACE_WINCE to ACE_HAS_WINCE. + + * ace/Service_Manager.cpp: + + Fixed a couple of ACE_TCHAR/ACE_LIB_TEXT problems. + + * ace/ace_wchar.h: + + On Windows CE, #include wtypes.h. + + * ace/ace_dll.vcp: + * ace/ace_os_dll.vcp: + + Redid the output files and directories. Now intermediate + files go into Release/PLATFORM and Debug/PLATFORM (where + PLATFORM = MIPS/ARM/X86EM/SH3/SH4). The *.lib files go + into ../Lib/PLATFORM and the *.dll into ../bin/PLATFORM. + Also, the DLL's were renamed from ace_dll.dll and + ace_os_dll.dll to ace[d].dll and ace_os[d].dll. + + * bin/pippen.pl: + + Changed the environment variables from DEFAULT_COMPILER and + DEFAULT_CONFIGS to PIPPEN_COMPILER and PIPPEN_CONFIGS. Also + used \Q\E for the configs because some of the Windows CE + configs confused the script because they use parentheses. + +Sat Mar 10 16:59:51 2001 Carlos O'Ryan + + * ACE-INSTALL.html: + Remove references to the now obsolete config-linux-lxpthreads.h + and platform_linux_lxpthread.GNU + +Sat Mar 10 16:38:22 2001 Carlos O'Ryan + + * tests/run_test.lst: + Running the Recursive_Mutex_Test on single-threaded builds makes + very little sense. + +Sat Mar 10 16:35:19 2001 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Add new tests: Muxing, Crashed_Callback, Client_Leaks and + Server_Leaks to the nightly runs. + +Sat Mar 10 17:55:53 2001 Douglas C. Schmidt + + * include/makeinclude: Zapped the platform_linux_pthread.GNU, + platform_linux_lxpthread.GNU, and platform_linux_lxpthreads.GNU + files since they are confusing and shouldn't not be used in + favor of platform_linux.GNU. + + * ace: Zapped the config-linux.pthread.h and config-linux-lxpthreads.h + file since they are confusing and shouldn't not be used in favor + of config-linux.h. Thanks to Craig Rodrigues for this + suggestion. + +Sat Mar 10 12:39:16 2001 Craig Rodrigues + + * ace/Reactor.h: + * ace/WFMO_Reactor.h: + * ace/Select_Reactor_T.h: + * ace/Reactor_Impl.h: + Cleaned up comment for schedule_timer() + +Sat Mar 10 07:05:16 2001 Douglas C. Schmidt + + * tests: Added Logging_Strategy_Test.cpp. Thanks to Orlando + Ribeiro for contributing this. + + * tests/Makefile (BIN): Added Logging_Strategy_Test. + + * tests/run_test.lst: Added Log_Msg_Test and + the new Logging_Strategy_Test. + + * tests/Log_Msg_Test.cpp: Added ACE_TEXT macros to all the ACE_DEBUG and + ACE_ERROR calls. + + * ace/Service_Manager.{h,cpp}: Refactored the request processing + code so that it's in a single place. Also, added support to + enable remote reconfiguration. Thanks to Mike Curtis + for contributing this. + + * ace/Logging_Strategy.cpp (parse_args): Fixed a mistaken + re-initialization of the thread_priority_mask_ and the + process_priority_mask_. Thanks to Martin Krumpolec + for reporting this. + + * ace/Local_Name_Space_T.cpp (create_manager_i): Fixed this code so that + it doesn't fail if run on a directory that doesn't support locks + (like some NFS mounts). Thanks to scott snyder + for reporting this. + + * tests/SOCK_Connector_Test.cpp: Split up a loop so that the test + doesn't hang on RedHat Linux 7.0. Thanks to Michael Searles + for this fix. + +Fri Mar 9 22:39:28 2001 Carlos O'Ryan + + * ace/Svc_Conf.h: + * ace/Service_Config.h: + * ace/Service_Config.cpp: + Add new method to the Service Configurator to add static + services into the repository, this factors out common code used + in the ORB and ACE. In general it fixes the hacks done this + past Feb 20th + +Fri Mar 9 16:47:15 2001 Priyanka Gontla + + * bin/nightlybuilds/builds.lst (LIST): + Added HPUX to the scoreboard. + +Fri Mar 9 14:34:34 2001 Chad Elliott + + * PACE/Makefile: + * apps/drwho/Makefile: + * bin/PerlACE/Process_Unix.pm: + * include/makeinclude/platform_chorus4.x_g++.GNU: + + Modifications to make things build and run correctly with + Chorus 4.0.1. + +Thu Mar 8 08:38:01 2001 Carlos O'Ryan + + * bin/auto_run_tests.lst: + The Single_Threaded_POA test cannot run with minimum CORBA or + (isn't this ironic) on single threaded configurations. + +Wed Mar 07 20:25:51 2001 Carlos O'Ryan + + * bin/nightlybuilds/builds.lst: + Add QNX to the configurations in the scoreboard. + +Wed Mar 7 12:41:05 2001 Douglas C. Schmidt + + * ace/Select_Reactor_T.h, + * ace/Reactor_Impl.h, + * ace/WFMO_Reactor.h, + * ace/Reactor.h: Updated the comments to be more accurate. Thanks + to Craig Rodrigues for reporting this. + +Wed Mar 7 08:57:42 2001 Darrell Brunsch + + * ace/Asynch_IO.h: + Changed use of ACE_UNIMPLEMENTED_FUNC to just defining the + assignment operators outright. The point here is to just + provide any implementation, since the default one is flagged as + causing infinite recursion. + + Thanks to David Levine for pointing out this incorrect usage of + the macro. + + * ace/config-win32-msvc-5.h: + * ace/config-win32-msvc-6.h: + + @file comments were mismatched. + + * ace/config-win32.h: + + Changed config-win32-wince.h to config-WinCE.h. + + * ace/ace_wchar.h: + * ace/Log_Msg_NT_Event_Log.cpp: + + Changed several system calls to ACE_TEXT_* (and needed to + add some to ace_wchar.h) since they need the ACE_TEXT + treatment. + +Wed Mar 7 08:20:01 2001 Chad Elliott + + * ace/ARGV.cpp: + + Removed a warning about possible use of uninitialized variable. + + * bin/ace_ld: + + Added new functionality to filter out the harmless symbol size + change warnings for VxWorks 5.4. + + * examples/Shared_Malloc/test_multiple_mallocs.cpp: + * examples/Shared_Malloc/test_persistence.cpp: + * examples/Shared_Malloc/test_position_independent_malloc.cpp: + + Renamed the typedef MALLOC to TEST_MALLOC. A MALLOC macro is + defined by a VxWorks system header. + +Wed Mar 7 06:11:52 2001 Douglas C. Schmidt + + * ace/Asynch_IO.h: Removed the unnecessary/improper ';' at the + end of the line. Thanks to Johnny Willemsen and Chris Kohlhoff + for reporting/fixing this. + + * ace/*_Connector.h: Clarified in the comments that the + ACE_Time_Value *timeout represents the *maximum* amount of time + to wait. If the server is not running, however, connect() can + return much sooner. Thanks to Dipti Jain + for motivating this. + +Tue Mar 6 14:14:06 2001 Darrell Brunsch + + Here are some fixes for MSVC 7 beta. Note that no project files + are checked in. Right now they will have to be generated from + the MSVC 5/6 files (The devenv.exe will do this automatically). + When MSVC 7 becomes released, we'll probably have to deal with + including their files (even if only for nightly builds). + + * ace/OS.h: + * ace/config-win32-msvc.h: + + Moved the inclusion of the crtdbg.h file to where it is being + used. This is mainly to alleviate some excessive inclusions. + + * ace/config-WinCE.h: + * ace/config-win32.h: + * ace/config-win32-msvc-5.h: (added) + * ace/config-win32-msvc-6.h: (added) + * ace/config-win32-msvc-7.h: (added) + * ace/config-win32-borland.h: + * ace/config-win32-common.h: + * ace/config-win32-ghs.h: + * ace/config-win32-msvc.h: + * ace/config-win32-visualage.h: + + Added a new config-win32-msvc-7.h with some new settings. While + doing this I also rearranged the files a bit. Everything now + goes through config-win32.h (and an error will occur if you + include the others directly). + + * ace/config-hpux-10.x-hpc++.h: + * ace/config-hpux-11.00.h: + * ace/config-win32-msvc-5.h: + * ace/config-win32-msvc-6.h: + * ace/README: + + Removed ACE_HAS_ONE_DEFINITION_RULE. Could not find this + actually used anywhere so I'm assuming it can be safely + removed. + + * ace/Asynch_IO.h: + + Added some dummy assignment operators. It seems that the default + ones produce infinite recursion (at least with MSVC 6 SP5 and + MSVC 7 beta) + + * ace/Future.h: + + Future_Holder needs to be ACE_Export-ed. + +Tue Mar 6 16:58:17 2001 Balachandran Natarajan + + * ace/ACE.cpp (format_hexdump): The format_hexdump () was missing + a space if the remaining message that needs dumping was less + than 16 bytes. Thansk to Johnny Willemsen" + for giving this fix. + +Tue Mar 6 11:25:53 2001 Carlos O'Ryan + + * bin/PerlACE/Process_Unix.pm: + Ignore SIGABRT too, because it is used by abort() and we call + that function to test the ORB under fault conditions. + +Tue Mar 6 12:25:34 2001 Chad Elliott + + * configure.in: + + The configure script was broken on major releases (i.e. those with + no beta numbers). A test for an empty string should have double + quotes around the variable. + +Tue Mar 6 10:16:31 2001 Darrell Brunsch + + * ace/config-win32-common.h: + Removed old comment about ACE_HAS_WINSOCK2 being related to + ACE_HAS_WINNT4. Thanks to Johnny Willemsen + for pointing this out. + +Tue Mar 6 10:13:03 2001 Carlos O'Ryan + + * tests/RMCast/RMCast_Fragment_Test.cpp: + * tests/RMCast/RMCast_Membership_Test.cpp: + * tests/RMCast/RMCast_Reassembly_Test.cpp: + * tests/RMCast/RMCast_Reordering_Test.cpp: + * tests/RMCast/RMCast_Retransmission_Test.cpp: + Use ACE_OS::time(0) to initialize the pseudo-random numbers + seed. It is good enough for our purposes, and it works on + platforms without 64-bit integer support. + +Mon Mar 5 13:56:33 2001 Douglas C. Schmidt + + * ace/Synch_T.{h,i}: Further simplified the new ACE_Guard constructor. + Thanks to Chris Kohlhoff for contributing + this. + +Mon Mar 5 19:20:45 2001 Fuzz Master D + + * bin/fuzz.pl: + As Ossama pointed out, the ACE_CHECK test was seeing + problems in the tao_idl files since it has uses of ACE_TRY_ENV + inside quotes. Made sure not to detect problems in this case. + +Mon Mar 5 18:58:32 2001 Fuzz Master D + + * bin/fuzz.pl: + Fixed some false positives in the resolve_initial_reference + test and also added an ACE_CHECK test by Carlos's request. + +Mon Mar 5 18:54:42 2001 Darrell Brunsch + + * bin/PerlACE/Process_Unix.pm: + Updated the signal detection to not pay attention to TERM and + KILL. Will print out better output when signals cause a process + to exit during most calls like Kill () or TerminateWaitKill (). + +Mon Mar 5 13:56:33 2001 Douglas C. Schmidt + + * ace/Synch_T.{h,i}: Added a new ACE_Guard constructor that + allows the caller to select whether the guard owns/acquires the + lock or not. Thanks to Chris Kohlhoff for + contributing this. + + * ace/Synch_T.{h,i}: Added a disown() method that relinquishes + ownership of the lock so that it is not released implicitly in + the destructor. Thanks to Chris Kohlhoff + for contributing this. + + * ace/Event_Handler.h: Updated the comment on handle_close() so that + it more accurately reflects what is going on. Thanks to Defang + Zhou for suggesting this. + + * apps/Gateway/Gateway/Concrete_Connection_Handlers.{h,cpp}: Added + handle_close() operations to solve problems with certain + concurrency models. Thanks to Defang Zhou + for reporting this. + +Mon Mar 5 11:29:36 2001 Carlos O'Ryan + + * docs/ACE-categories.html: + Fixed links to the doxygen files. + + * ace/Pipe.cpp: + Fixed what looks like a typo, we want to *disable* the stream + pipes under QNX, not to enable them just on that platform. + +Mon Mar 5 08:20:21 2001 Carlos O'Ryan + + * tests/RMCast/RMCast_Fragment_Test.cpp: + * tests/RMCast/RMCast_Reassembly_Test.cpp: + Undo Doug's changes. They broke the test. + +Mon Mar 5 07:52:52 2001 Douglas C. Schmidt + + * ace/Log_Record.cpp (priority): Clarified the behavior of the + priority() set/get methods. Thanks to Christian Schuhegger + for reporting this. + + * tests/RMCast/RMCast_Fragment_Test.cpp, + * tests/RMCast/RMCast_Reassembly_Test.cpp, + * tests/Dynamic_Priority_Test.cpp, + * tests/Thread_Pool_Test.cpp: Make sure to write into the + wr_ptr() rather than the rd_ptr(). Thanks to Gonzalo Diethelm + for reporting this. + +Mon Mar 5 08:00:23 2001 Chad Elliott + + * bin/nightlybuilds/builds.lst: + + Added new VxWorks 5.4 and Chorus 4.0.1 nightly builds. + +Mon Mar 05 00:10:15 2001 Ossama Othman + + * bin/fuzz.pl: + + Updated to detect missing ACE_TRY_ENV parameters in + ORB::resolve_initial_references() calls when emulated exceptions + are used. Thanks to Darrell for providing this update. + +Mon Mar 5 07:57:07 2001 Johnny Willemsen + + * tests/Makefile.bor: + + Added missing Refcounted_Auto_Ptr_Test to the build + +Sun Mar 4 19:31:16 2001 Darrell Brunsch + + * bin/auto_run_tests.lst: + + Added the run_test_mt.pl for Leader_Follers. + + * bin/PerlACE/Process_Unix.pm: + * bin/PerlACE/Process_Win32.pm: + + Added a destructor to detect if a process wasn't explicitly + killed before the object went out of scope. Will print out + an error and kill it. + + * bin/PerlACE/Run_Test.pm: + + Turned on autoflush for all scripts. + + * docs/run_test.txt: + + Updated run_test.pl instructions to fit all the changes I + just made. + + * examples/Export/run_test.pl: + * performance-tests/RPC/run_test.pl: + * performance-tests/TCP/run_test.pl: + * performance-tests/UDP/run_test.pl: + + Updated to use PerlACE::Run_Test; + + * tests/Atomic_Op_Test.dsp: + * tests/Auto_IncDec_Test.dsp: + * tests/Barrier_Test.dsp: + * tests/Basic_Types_Test.dsp: + * tests/Buffer_Stream_Test.dsp: + * tests/CDR_Array_Test.dsp: + * tests/CDR_File_Test.dsp: + * tests/CDR_Test.dsp: + * tests/Cache_Map_Manager_Test.dsp: + * tests/Cached_Accept_Conn_Test.dsp: + * tests/Cached_Conn_Test.dsp: + * tests/Capabilities_Test.dsp: + * tests/Collection_Test.dsp: + * tests/Config_Test.dsp: + * tests/Conn_Test.dsp: + * tests/DLL_Test.dsp: + * tests/DLList_Test.dsp: + * tests/Dirent_Test.dsp: + * tests/Dynamic_Priority_Test.dsp: + * tests/Enum_Interfaces_Test.dsp: + * tests/Env_Value_Test.dsp: + * tests/Future_Set_Test.dsp: + * tests/Future_Test.dsp: + * tests/Handle_Set_Test.dsp: + * tests/Hash_Map_Bucket_Iterator_Test.dsp: + * tests/Hash_Map_Manager_Test.dsp: + * tests/High_Res_Timer_Test.dsp: + * tests/IOStream_Test.dsp: + * tests/Lazy_Map_Manager_Test.dsp: + * tests/Log_Msg_Test.dsp: + * tests/MEM_Stream_Test.dsp: + * tests/MM_Shared_Memory_Test.dsp: + * tests/MT_Reactor_Timer_Test.dsp: + * tests/MT_SOCK_Test.dsp: + * tests/Malloc_Test.dsp: + * tests/Map_Manager_Test.dsp: + * tests/Map_Test.dsp: + * tests/Mem_Map_Test.dsp: + * tests/Message_Block_Test.dsp: + * tests/Message_Queue_Notifications_Test.dsp: + * tests/Message_Queue_Test.dsp: + * tests/Message_Queue_Test_Ex.dsp: + * tests/Naming_Test.dsp: + * tests/New_Fail_Test.dsp: + * tests/Notify_Performance_Test.dsp: + * tests/OS_Test.dsp: + * tests/Object_Manager_Test.dsp: + * tests/OrdMultiSet_Test.dsp: + * tests/Pipe_Test.dsp: + * tests/Priority_Buffer_Test.dsp: + * tests/Priority_Reactor_Test.dsp: + * tests/Priority_Task_Test.dsp: + * tests/Process_Manager_Test.dsp: + * tests/Process_Mutex_Test.dsp: + * tests/Process_Strategy_Test.dsp: + * tests/RB_Tree_Test.dsp: + * tests/Reactor_Exceptions_Test.dsp: + * tests/Reactor_Notify_Test.dsp: + * tests/Reactor_Performance_Test.dsp: + * tests/Reactor_Timer_Test.dsp: + * tests/Reactors_Test.dsp: + * tests/Reader_Writer_Test.dsp: + * tests/Recursive_Mutex_Test.dsp: + * tests/Refcounted_Auto_Ptr_Test.dsp: + * tests/Reverse_Lock_Test.dsp: + * tests/SOCK_Connector_Test.dsp: + * tests/SOCK_Send_Recv_Test.dsp: + * tests/SOCK_Test.dsp: + * tests/SPIPE_Test.dsp: + * tests/SString_Test.dsp: + * tests/SV_Shared_Memory_Test.dsp: + * tests/Semaphore_Test.dsp: + * tests/Service_Config_Test.dsp: + * tests/Sigset_Ops_Test.dsp: + * tests/Simple_Message_Block_Test.dsp: + * tests/Svc_Handler_Test.dsp: + * tests/TSS_Test.dsp: + * tests/Task_Test.dsp: + * tests/Thread_Manager_Test.dsp: + * tests/Thread_Mutex_Test.dsp: + * tests/Thread_Pool_Reactor_Test.dsp: + * tests/Thread_Pool_Test.dsp: + * tests/Time_Service_Test.dsp: + * tests/Time_Value_Test.dsp: + * tests/Timeprobe_Test.dsp: + * tests/Timer_Queue_Test.dsp: + * tests/Tokens_Test.dsp: + * tests/UPIPE_SAP_Test.dsp: + * tests/Upgradable_RW_Test.dsp: + * tests/version_tests/Atomic_Op_Test.dsp: (removed) + * tests/version_tests/Auto_IncDec_Test.dsp: (removed) + * tests/version_tests/Barrier_Test.dsp: (removed) + * tests/version_tests/Basic_Types_Test.dsp: (removed) + * tests/version_tests/Buffer_Stream_Test.dsp: (removed) + * tests/version_tests/CDR_Array_Test.dsp: (removed) + * tests/version_tests/CDR_File_Test.dsp: (removed) + * tests/version_tests/CDR_Test.dsp: (removed) + * tests/version_tests/Cache_Map_Manager_Test.dsp: (removed) + * tests/version_tests/Cached_Accept_Conn_Test.dsp: (removed) + * tests/version_tests/Cached_Conn_Test.dsp: (removed) + * tests/version_tests/Capabilities_Test.dsp: (removed) + * tests/version_tests/Collection_Test.dsp: (removed) + * tests/version_tests/Config_Test.dsp: (removed) + * tests/version_tests/Conn_Test.dsp: (removed) + * tests/version_tests/DLL_Test.dsp: (removed) + * tests/version_tests/DLList_Test.dsp: (removed) + * tests/version_tests/Dirent_Test.dsp: (removed) + * tests/version_tests/Dynamic_Priority_Test.dsp: (removed) + * tests/version_tests/Enum_Interfaces_Test.dsp: (removed) + * tests/version_tests/Env_Value_Test.dsp: (removed) + * tests/version_tests/Future_Set_Test.dsp: (removed) + * tests/version_tests/Future_Test.dsp: (removed) + * tests/version_tests/Handle_Set_Test.dsp: (removed) + * tests/version_tests/Hash_Map_Bucket_Iterator_Test.dsp: (removed) + * tests/version_tests/Hash_Map_Manager_Test.dsp: (removed) + * tests/version_tests/High_Res_Timer_Test.dsp: (removed) + * tests/version_tests/IOStream_Test.dsp: (removed) + * tests/version_tests/Lazy_Map_Manager_Test.dsp: (removed) + * tests/version_tests/Log_Msg_Test.dsp: (removed) + * tests/version_tests/MEM_Stream_Test.dsp: (removed) + * tests/version_tests/MM_Shared_Memory_Test.dsp: (removed) + * tests/version_tests/MT_Reactor_Timer_Test.dsp: (removed) + * tests/version_tests/MT_SOCK_Test.dsp: (removed) + * tests/version_tests/Malloc_Test.dsp: (removed) + * tests/version_tests/Map_Manager_Test.dsp: (removed) + * tests/version_tests/Map_Test.dsp: (removed) + * tests/version_tests/Mem_Map_Test.dsp: (removed) + * tests/version_tests/Message_Block_Test.dsp: (removed) + * tests/version_tests/Message_Queue_Notifications_Test.dsp: (removed) + * tests/version_tests/Message_Queue_Test.dsp: (removed) + * tests/version_tests/Message_Queue_Test_Ex.dsp: (removed) + * tests/version_tests/Naming_Test.dsp: (removed) + * tests/version_tests/New_Fail_Test.dsp: (removed) + * tests/version_tests/Notify_Performance_Test.dsp: (removed) + * tests/version_tests/OS_Test.dsp: (removed) + * tests/version_tests/Object_Manager_Test.dsp: (removed) + * tests/version_tests/OrdMultiSet_Test.dsp: (removed) + * tests/version_tests/Pipe_Test.dsp: (removed) + * tests/version_tests/Priority_Buffer_Test.dsp: (removed) + * tests/version_tests/Priority_Reactor_Test.dsp: (removed) + * tests/version_tests/Priority_Task_Test.dsp: (removed) + * tests/version_tests/Process_Manager_Test.dsp: (removed) + * tests/version_tests/Process_Mutex_Test.dsp: (removed) + * tests/version_tests/Process_Strategy_Test.dsp: (removed) + * tests/version_tests/RB_Tree_Test.dsp: (removed) + * tests/version_tests/Reactor_Exceptions_Test.dsp: (removed) + * tests/version_tests/Reactor_Notify_Test.dsp: (removed) + * tests/version_tests/Reactor_Performance_Test.dsp: (removed) + * tests/version_tests/Reactor_Timer_Test.dsp: (removed) + * tests/version_tests/Reactors_Test.dsp: (removed) + * tests/version_tests/Reader_Writer_Test.dsp: (removed) + * tests/version_tests/Recursive_Mutex_Test.dsp: (removed) + * tests/version_tests/Refcounted_Auto_Ptr_Test.dsp: (removed) + * tests/version_tests/Reverse_Lock_Test.dsp: (removed) + * tests/version_tests/SOCK_Connector_Test.dsp: (removed) + * tests/version_tests/SOCK_Send_Recv_Test.dsp: (removed) + * tests/version_tests/SOCK_Test.dsp: (removed) + * tests/version_tests/SPIPE_Test.dsp: (removed) + * tests/version_tests/SString_Test.dsp: (removed) + * tests/version_tests/SV_Shared_Memory_Test.dsp: (removed) + * tests/version_tests/Semaphore_Test.dsp: (removed) + * tests/version_tests/Service_Config_Test.dsp: (removed) + * tests/version_tests/Sigset_Ops_Test.dsp: (removed) + * tests/version_tests/Simple_Message_Block_Test.dsp: (removed) + * tests/version_tests/Svc_Handler_Test.dsp: (removed) + * tests/version_tests/TSS_Test.dsp: (removed) + * tests/version_tests/Task_Test.dsp: (removed) + * tests/version_tests/Thread_Manager_Test.dsp: (removed) + * tests/version_tests/Thread_Mutex_Test.dsp: (removed) + * tests/version_tests/Thread_Pool_Reactor_Test.dsp: (removed) + * tests/version_tests/Thread_Pool_Test.dsp: (removed) + * tests/version_tests/Time_Service_Test.dsp: (removed) + * tests/version_tests/Time_Value_Test.dsp: (removed) + * tests/version_tests/Timeprobe_Test.dsp: (removed) + * tests/version_tests/Timer_Queue_Test.dsp: (removed) + * tests/version_tests/Tokens_Test.dsp: (removed) + * tests/version_tests/UPIPE_SAP_Test.dsp: (removed) + * tests/version_tests/Upgradable_RW_Test.dsp: (removed) + * tests/version_tests/run_all_tests.bat: (removed) + * tests/version_tests/version_tests.dsw: (removed) + + Moved the version_tests back into the tests/*.dsp files. The + reason they were originally moved is because it was easier to + select all the debug versions during a batch build. But now we + have pippen.pl and msvc_auto_compile.pl, so this is no longer an + issue, while this strange setup would compilicate the nightly + builds. Thus, it was standardized back. + + * bin/create_vt_dsps.pl: (removed) + + No need for this anymore. + +Sun Mar 4 19:27:42 2001 Darrell Brunsch + + * ace/Log_Msg.cpp: + * ace/Log_Msg_NT_Event_Log.h: + * ace/OS.cpp: + + Disabled Log_Msg_NT_Event_Log on Windows CE. + +Sun Mar 04 13:19:35 2001 Carlos O'Ryan + + * etc/tao.doxygen: + Add .txt files, so we can add web pages to the basic TAO + documentation. + +Sun Mar 04 10:58:08 2001 Nanbor Wang + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Added Log_Msg_NT_Event_Log.{h,cpp} to NT + project files. + +Sun Mar 4 10:41:57 2001 Douglas C. Schmidt + + * ace/Log_Msg.cpp, + ace/Log_Msg.h, + ace/Logging_Strategy.cpp, + ace/Makefile.bor, + ace/OS.cpp, + ace/OS.h, + ace/OS.i, + ace/ace.rc: Added support for the new NT event logging capability. + Thanks to Chris Kohlhoff for contributing this. + + * ace/Log_Msg_NT_Event_Log.cpp + ace/Log_Msg_NT_Event_Log.h + ace/ace_message_table.bin: Added these files to support the new + NT event logging capability. + Thanks to Chris Kohlhoff for contributing + this. + +Sun Mar 4 04:46:44 2001 Darrell Brunsch + + * bin/nightlybuilds/builds.lst: + + Added new Windows CE nightly build. + +Sun Mar 04 03:12:17 2001 Nanbor Wang + + * bin/generate_export_file.pl: ACE_AS_STATIC_LIBS was incorrectly + typed in as ACE_STATIC_LIBS. + + * ace/svc_export.h: + * ace/RMCast/RMCast_Export.h: + * ace/SSL/SSL_Export.h: + * websvcs/lib/websvcs_export.h: These files didn't check for + ACE_AS_STATIC_LIBS to determine if they should define their + export macros for static build. Thanks to Chris Kohlhoff + for reporting this. [Bug 813] + +Sat Mar 3 19:07:31 2001 Pradeep Gore + + * ace/QoS/QoS_Session_Impl.cpp: + * ace/QoS/QoS_Session_Impl.i: + * examples/QOS/Fill_ACE_QoS.cpp: + * examples/QOS/Fill_ACE_QoS.h: + * examples/QOS/Makefile: + * examples/QOS/QoS_Util.cpp: + * examples/QOS/Receiver_QoS_Event_Handler.cpp: + * examples/QOS/Sender_QoS_Event_Handler.cpp: + Fixed various compile warnings when compiling with rapi=1 on + Redhat Linux 6.2 + +Sat Mar 3 16:47:53 2001 Darrell Brunsch + + * bin/fuzz.pl: + + Changed the detection pattern a bit to pick up + stuff like: + + void + operator < (...) + + better. + + * ace/Auto_Ptr.i: + * ace/Base_Thread_Adapter.cpp: + * ace/Based_Pointer_T.i: + * ace/Connector.cpp: + * ace/Containers_T.cpp: + * ace/DEV_Addr.i: + * ace/Dynamic.i: + * ace/FILE.cpp: + * ace/Flag_Manip.i: + * ace/Handle_Set.i: + * ace/Hash_Map_Manager_T.cpp: + * ace/Lib_Find.cpp: + * ace/Local_Name_Space_T.cpp: + * ace/Local_Tokens.cpp: + * ace/MEM_Addr.i: + * ace/Malloc.cpp: + * ace/Malloc_Allocator.cpp: + * ace/Malloc_T.cpp: + * ace/Memory_Pool.cpp: + * ace/Message_Block.cpp: + * ace/Message_Block.i: + * ace/Message_Block_T.cpp: + * ace/Message_Queue.i: + * ace/Message_Queue_T.cpp: + * ace/Message_Queue_T.i: + * ace/Naming_Context.cpp: + * ace/OS.cpp: + * ace/OS.i: + * ace/PI_Malloc.cpp: + * ace/POSIX_Asynch_IO.cpp: + * ace/Process_Manager.cpp: + * ace/QtReactor.cpp: + * ace/RB_Tree.i: + * ace/RW_Process_Mutex.cpp: + * ace/Reactor.cpp: + * ace/Remote_Name_Space.cpp: + * ace/Remote_Tokens.cpp: + * ace/SOCK_Dgram.i: + * ace/SString.cpp: + * ace/SUN_Proactor.cpp: + * ace/Select_Reactor_Base.cpp: + * ace/Select_Reactor_T.cpp: + * ace/Service_Object.i: + * ace/Service_Repository.cpp: + * ace/Signal.cpp: + * ace/Signal.i: + * ace/Svc_Handler.cpp: + * ace/Synch.cpp: + * ace/Synch_T.cpp: + * ace/Thread_Adapter.cpp: + * ace/Thread_Manager.cpp: + * ace/Timer_Heap_T.cpp: + * ace/TkReactor.cpp: + * ace/Token.cpp: + * ace/Token_Manager.cpp: + * ace/CLASSIX/CLASSIX_CO_Acceptor.i: + * ace/CLASSIX/CLASSIX_Select_Reactor.cpp: + * ace/QoS/SOCK_Dgram_Mcast_QoS.cpp: + * netsvcs/ACE-netsvcs.html: + * netsvcs/lib/Server_Logging_Handler_T.cpp: + * netsvcs/lib/Token_Handler.cpp: + + Fixed bad ACE_TRACE and ACE_OS_TRACE's. (fuzz errors) + + * docs/ACE-categories.html: + * docs/ACE-porting.html: + * docs/ACE-subsets.html: + * docs/tutorials/new-tutorials.html: + + Changed references to + http://www.cs.wustl.edu/~schmidt/ACE_wrappers/* to + relative paths instead (Fixes the last of the fuzz errors). + +Fri Mar 2 20:08 Angelo Corsaro + + * include/makeinclude/platform_qnx_rtp_gcc.GNU: + Added macros tha expand to multiple libraries + on QNX RTP to fix most of the link problems. + +Fri Mar 2 16:35:58 2001 Darrell Brunsch + + * ace/config-win32-borland.h: + + Added /**/ to #include so it isn't picked up by + MSVC-based dependency generators. + +Fri Mar 02 19:36:22 2001 Steve Huston + + * ace/OS.i (ACE_OS::send): (only non-Win32), if call fails and + errno is EAGAIN, change it to EWOULDBLOCK. Improve portability + for platforms where EAGAIN and EWOULDBLOCK are different values + and both used, like HP-UX. Thanks to Michael Grove + for reporting this problem. + + * ace/ACE.i (send_i): Call ACE_OS::send, not ACE_OS::write, on HP-UX. + This makes it pick up the EAGAIN->EWOULDBLOCK change. + + * tests/TSS_Test.cpp: Avoid doing ACE_Thread::keyfree on where + ACE_HAS_PTHREADS_DRAFT4 or ACE_HAS_PTHREADS_DRAFT6 (unless + ACE_HAS_TSS_EMULATION is also defined) since ACE_Thread::keyfree + will get ENOTSUP anyway. + +Fri Mar 02 17:50:40 2001 Sharath R. Cholleti + + * ace/QtReactor.cpp: + Thanks to Stefan Scherer for reporting + and fixing the problem - crashing of TAO/tests/QtTests/ client + example after moving the slider. + +Fri Mar 02 15:35:40 2001 Nanbor Wang + + * ace/MEM_Acceptor.cpp: + * ace/MEM_Acceptor.h: + * ace/MEM_Addr.cpp: + * ace/MEM_Addr.h: + * ace/MEM_Connector.cpp: + * ace/MEM_Connector.h: + * ace/MEM_IO.cpp: + * ace/MEM_IO.h: + * ace/MEM_SAP.cpp: + * ace/MEM_SAP.h: + * ace/MEM_Stream.cpp: + * ace/MEM_Stream.h: Disabled MEM_Stream support if one chooses + not to support position independent pointers. + +Fri Mar 02 13:17:36 2001 Steve Huston + + * examples/IOStream/server/iostream_server.cpp (main): Removed the + call to register peer_acceptor with the reactor. The + acceptor::open call already registers for ACCEPT_MASK. Prevents + leaving a hanging READ_MASK registered after the acceptor is + destroyed when main() returns. This fixes Bugzilla # 801. Thanks + to Pim Philipse for reporting this. + + * THANKS: Added Pim Philipse to the Hall of Fame. + +Fri Mar 02 12:24:27 2001 Steve Huston + + * ace/config-hpux-10.x-hpc++.h: If compiling without exceptions + (+noeh) then don't set ACE_HAS_EXCEPTIONS (don't set + ACE_NEW_THROWS_EXCEPTIONS either). + + * ace/Thread_Manager.cpp (join_thr): Moved the code for + ACE_HAS_PTHREADS_DRAFT4 that does a pthread_detach from here to + ACE_OS::thr_join (which this function calls) so that + ACE_Thread::join also causes a pthread_detach. This is needed on + Pthreads Draft 4 (HP-UX 10.x) to properly clean up the thread + storage and avoid leaking memory. Thanks to Vladimir Kondratiev + for reporting this and providing + excellent test cases to help resolve it quickly. + + * ace/OS.i (ACE_OS::thr_join): Added the code that was removed from + ACE_Thread_Manager::join_thr, above. + + * ace/Event_Handler.cpp (~ACE_Event_Handler): Add an ACE_Errno_Guard + around purge_pending_notifications to prevent against an ENOTSUP + from purge_pending_notifications. + +Thu Mar 1 17:02:10 2001 Darrell Brunsch + + * bin/PerlACE/Process_Unix.pm: + * bin/PerlACE/Process_Win32.pm: + + Fixed up the Spawn code to use the Executable () instead of + {EXECUTABLE}, since that's how we get the adjusted name (with + .exe and stuff). And also skipped the file existance with + IgnoreExeSubDir, since IgnoreExeSubDir is often used when you + need to find the program in the path. + +Thu Mar 1 15:48:10 2001 Darrell Brunsch + + * bin/fuzz.pl: + + Fuzz was being a bit to eager with the class matching in the + TRACE test. It was having problems with something like: + + char *foo::bar () + + since it thought the class was "char *foo" instead of just + "foo". + + But it is feeling muuuuuuch better now. + +Thu Mar 1 13:18:07 2001 Darrell Brunsch + + * bin/fuzz.pl: + + Added two new tests: + + - absolute ACE_wrappers test: + + Check for ~schmidt/ACE_wrappers in html files. These should + be relative links since these html files already exist in + their own ACE_wrappers tree. + + - TRACE test: + + Does a check on whether the ACE_TRACE or ACE_OS_TRACE actually + refers to the function/method it is in. + + And expanded the checks in the bad run_test test (level 6) + + * bin/PerlACE/Process_Unix.pm: + * bin/PerlACE/Process_Win32.pm: + + - Added checks for file existence before running. + - Added IgnoreExeSubDir option. + - Added TerminateWaitKill method. + + * bin/pippen.pl: (added) + * bin/PerlACE/MSProject.pm: (added) + * bin/PerlACE/MSProject/DSP.pm: (added) + * bin/PerlACE/MSProject/VCP.pm: (added) + + There is nothing to see here...please be on your way. + + It isn't like this is a super top secret project to + replace msvc_auto_compile.pl with something that works + better and also has a cool code-name that is shorter + than "msvc_auto_compile.pl". + + But remember, you didn't hear that from me. + +Thu Mar 1 10:54:23 2001 Ossama Othman + + * bin/auto_run_tests.lst: + + Added the TAO Codec to the list of tests to run. + + * include/makeinclude/wrapper_macros.GNU: + + Fixed all incorrect uses of CFLAGS and CCFLAGS where + preprocessor macros were defined. Preprocessor macros should be + defined in the CPPFLAGS variable. + + Define ACE_USE_RCSID in non-debug builds (i.e. debug=0). + +Thu Mar 01 07:29:58 2001 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Fixed typos in the Service_Context_Manipulation test. It was + running in platforms where it shouldn't. + +Thu Mar 01 07:07:03 2001 Christopher Kohlhoff + + * include/makeinclude/recurse.bor: + Added support for makefiles which contain multiple targets. + + * examples/IPC_SAP/SOCK_SAP/Makefile.bor: + * examples/Log_Msg/Makefile.bor: + * examples/Map_Manager/Makefile.bor: + * examples/Mem_Map/file-reverse/Makefile.bor: + * examples/RMCast/Send_File/Makefile.bor: + * examples/Service_Configurator/IPC-tests/client/Makefile.bor: + * examples/Threads/Makefile.bor: + * netsvcs/clients/Logger/Makefile.bor: + * tests/Makefile.bor: + * tests/RMCast/Makefile.bor: + Updated to work with new multi-target makefile support. + +Wed Feb 28 22:58:50 2001 Carlos O'Ryan + + * html/index.html: + Reference */index.html directly, instead of assuming that the + web browser will use index.html as the default file, this also + works better when browsing locally. Thanks to Alain Decamps + for pointing this out. + +Wed Feb 28 16:41:42 2001 Darrell Brunsch + + * docs/bugzilla-build-setup.html: + + Updated the section about the scoreboard and added a + placeholder for Win32 nightly build information. + +Wed Feb 28 16:04:14 2001 Balachandran Natarajan + + * bin/nightlybuilds/builds.lst (TYPE): Added a build with AMI and + Messaging support disabled for the nightly builds. + +Wed Feb 28 15:35:59 2001 Joe Hoffert + + * docs/bugzilla-build-setup.html: + Added html file outlining steps for adding a bugzilla nightly + build. + +Wed Feb 28 00:25:42 2001 Darrell Brunsch + + * bin/auto_run_tests.lst: + + The examples/POA/Adapter_Activator/run_test.pl test was being + run twice. In fairness to all the other tests that only get to + run once, I removed the second instance. + +Tue Feb 27 17:31:48 2001 Steve Huston + + * include/makeinclude/platform_hpux_aCC.GNU: Turn on -D_REENTRANT for + the threads=0 build - this enables the reentrant functions which + are present, threads or not. It does not turn on threads, which + are instead enabled by -D_POSIX_C_SOURCE=199506L. + + * ace/config-hpux-11.00.h: Added ACE_HAS_2_PARAM_ASCTIME_R_AND_CTIME_R + + * ace/OS.i (rand_r): Added 'defined (HPUX_11)' to the ways to get to + the POSIX.1c-conformant version of rand_r. Allows clean compile + on HP-UX 11 without thread support. Also lined up some + misaligned #if/else/endif lines to make it easier to find one's + way through. + + * ace/OS_Dirent.inl (readdir_r): Added 'defined (HPUX_11)' to the + ways to get the POSIX.1c-conformant version of readdir_r. Allows + clean compile on HP-UX 11 without thread support. + +Tue Feb 27 11:38:38 2001 Douglas C. Schmidt + + * performance-tests/TCP/tcp_test.cpp (main): Zapped the + non-existent '-f' option. Thanks to Mike Curtis for reporting + this. + + * performance-tests/TCP/tcp_test.cpp (main): Check for improper + bufsz. Thanks to Mike Curtis for reporting this. + + * performance-tests/TCP/tcp_test.cpp (main): Documented the '-t' + option, which specifies the number of threads. + + * performance-tests/TCP/README: Fixed a typo. Thanks to + Mike Curtis for reporting this. + +Tue Feb 27 10:51:18 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added the AMI tests to the daily + builds. + +Tue Feb 27 10:23:20 2001 Balachandran Natarajan + + * Makefile: Changed the ChangeLog listing in the CONTROLLED_FILES + to ChangeLog*. This should help us to avoid missing ChangeLog + entries in the beta distribution, just about every time we split + and add a ChangeLog. + +Mon Feb 27 07:39:16 2001 Chad Elliott + + * include/makeinclude/platform_hpux_aCC.GNU: + + Removed suppression of Future Error 129. + Removed the use of CFLAGS. + + * ace/OS.h: + * ace/config-hpux-11.00.h: + Modification to remove system header macro definition conflicts. + This change does not suppress the conflicts, but does an undef + of the two conflicting macros before includeing tcp.h. Thanks + to Sam Chong for reporting this problem. + +Mon Feb 26 19:01:16 2001 Douglas C. Schmidt + + * ace/Logging_Strategy.{h,cpp}: Added a new -k option to + set the logging key via the ACE_Logging_Strategy. Thanks to + Chris Kohlhoff for contributing this. + +Mon Feb 26 18:18:38 2001 Steve Huston + + * ace/SString.i + (ACE_CString::find (const char *s, int pos) const): + (ACE_CString::find (char c, int pos) const): + (ACE_SString::find (const char *s, int pos) const): + (ACE_SString::find (char c, int pos) const): + (ACE_WString::find (const ACE_WSTRING_TYPE *s, int pos) const): + If match is found, return index from start of string, not from + 'pos'. Matches the C++ string standard, which was the model for + these classes. Thanks to Glen Osterhout + for this fix. + + * ace/SString.h: Clarified comments on return value for above + functions. + + * tests/SString_Test.cpp: Changed to look for the correct return + from the npos tests of the functions above. + + * THANKS: Added Glen Osterhout to the Hall of Fame. + +Mon Feb 26 15:01:55 2001 Darrell Brunsch + + * tests/DLL_Test_Impl.dsp: + * tests/version_tests/DLL_Test_Impl.dsp: (removed) + Me thinks that the Release and Static configurations should + also compile, and me thinks that it is now fixed. + +Mon Feb 26 12:29:45 2001 Douglas C. Schmidt + + * ace/ARGV.h: Clarify that the int add (const ACE_TCHAR *next_arg) + method assumes ownership of , rather than copying it. + Thanks to Steve Hespelt for reporting this. + Fixes [Bug 807]. + + The generated version_tests dsp didn't work (since DLL_Test_Impl + creates a library). Manually created the configurations in the + tests/DLL_Test_Impl.dsp version instead. + +Mon Feb 26 15:54:33 2001 Phil Mesnier + + Port to Unixware 7 (7.1.1) Using UDK CC (7.1.1.b) + + * docs/tutorials/013/message_queue.cpp: + * tests/Malloc_Test.cpp: + + Fixed errors in #pragma instiate lines including removal of ';', + mispellings + + * ace/config-all.h: + + Added definition of Unixware UDK for definition of ACE_NOTREACHED() + + * ace/config-unixware-7.1.0.udk.h: + * include/makeinclude/platform_unixware_udk.GNU: + + New configuration files for building on Unixware 7 with UDK CC. + +Mon Feb 26 12:29:45 2001 Douglas C. Schmidt + + * ace/ARGV.h: Clarify that the int add (const ACE_TCHAR *next_arg) + method assumes ownership of , rather than copying it. + Thanks to Steve Hespelt for reporting this. + Fixes [Bug 807]. + +Mon Feb 26 12:27:46 2001 Jeff Parsons + + * ace/CDR_Stream.h: + * ace/CDR_Stream.i: + Added method to reset the byte order in class OuputCDR. This + will be used by a gateway to set the byte order of a reply to a + reqest it has handled to one different than the gateway's own + byte order, if necessary. It should be called while the stream + is still empty, that is, before any part of the reply, including + the header, has been marshaled. + +Mon Feb 26 12:07:00 2001 Nanbor Wang + + * ace/Memory_Pool.cpp: Moved the copying of MMAP flags up before + setting the MAP_FIXED flag. Thanks to for + reporting this. [Bug 752] + +Mon Feb 26 09:29:36 2001 Carlos O'Ryan + + * ace/RB_Tree.h: + Fully qualified enum name. This fixes problems on gcc-272 builds. + +Mon Feb 26 00:19:28 2001 Darrell Brunsch + + Time to do some spring cleaning... + + * tests/version_tests/Config_Test.dsp: (added) + * tests/version_tests/DLL_Test_Impl.dsp: (added) + * tests/version_tests/Log_Msg_Test.dsp: (added) + * tests/version_tests/Message_Queue_Test_Ex.dsp: (added) + * tests/version_tests/version_tests.dsw: + + Updated the version_tests dir with create_vt_dsps.pl. + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + * netsvcs/lib/netsvcs.dsp: + * netsvcs/servers/servers.dsp: + * tests/ACE_Init_Test.dsp: + * tests/Atomic_Op_Test.dsp: + * tests/Auto_IncDec_Test.dsp: + * tests/Barrier_Test.dsp: + * tests/Basic_Types_Test.dsp: + * tests/Buffer_Stream_Test.dsp: + * tests/CDR_Array_Test.dsp: + * tests/CDR_File_Test.dsp: + * tests/CDR_Test.dsp: + * tests/Cache_Map_Manager_Test.dsp: + * tests/Cached_Accept_Conn_Test.dsp: + * tests/Cached_Conn_Test.dsp: + * tests/Capabilities_Test.dsp: + * tests/Collection_Test.dsp: + * tests/Config_Test.dsp: + * tests/Conn_Test.dsp: + * tests/DLL_Test.dsp: + * tests/DLList_Test.dsp: + * tests/Dirent_Test.dsp: + * tests/Dynamic_Priority_Test.dsp: + * tests/Enum_Interfaces_Test.dsp: + * tests/Env_Value_Test.dsp: + * tests/Future_Set_Test.dsp: + * tests/Future_Test.dsp: + * tests/Handle_Set_Test.dsp: + * tests/Hash_Map_Bucket_Iterator_Test.dsp: + * tests/Hash_Map_Manager_Test.dsp: + * tests/High_Res_Timer_Test.dsp: + * tests/IOStream_Test.dsp: + * tests/Lazy_Map_Manager_Test.dsp: + * tests/Log_Msg_Test.dsp: + * tests/MEM_Stream_Test.dsp: + * tests/MM_Shared_Memory_Test.dsp: + * tests/MT_Reactor_Timer_Test.dsp: + * tests/MT_SOCK_Test.dsp: + * tests/Malloc_Test.dsp: + * tests/Map_Manager_Test.dsp: + * tests/Map_Test.dsp: + * tests/Mem_Map_Test.dsp: + * tests/Message_Block_Test.dsp: + * tests/Message_Queue_Notifications_Test.dsp: + * tests/Message_Queue_Test.dsp: + * tests/Message_Queue_Test_Ex.dsp: + * tests/Naming_Test.dsp: + * tests/New_Fail_Test.dsp: + * tests/Notify_Performance_Test.dsp: + * tests/OS_Test.dsp: + * tests/Object_Manager_Test.dsp: + * tests/OrdMultiSet_Test.dsp: + * tests/Pipe_Test.dsp: + * tests/Priority_Buffer_Test.dsp: + * tests/Priority_Reactor_Test.dsp: + * tests/Priority_Task_Test.dsp: + * tests/Process_Manager_Test.dsp: + * tests/Process_Mutex_Test.dsp: + * tests/Process_Strategy_Test.dsp: + * tests/RB_Tree_Test.dsp: + * tests/Reactor_Exceptions_Test.dsp: + * tests/Reactor_Notify_Test.dsp: + * tests/Reactor_Performance_Test.dsp: + * tests/Reactor_Timer_Test.dsp: + * tests/Reactors_Test.dsp: + * tests/Reader_Writer_Test.dsp: + * tests/Recursive_Mutex_Test.dsp: + * tests/Refcounted_Auto_Ptr_Test.dsp: + * tests/Reverse_Lock_Test.dsp: + * tests/SOCK_Connector_Test.dsp: + * tests/SOCK_Send_Recv_Test.dsp: + * tests/SOCK_Test.dsp: + * tests/SPIPE_Test.dsp: + * tests/SString_Test.dsp: + * tests/SV_Shared_Memory_Test.dsp: + * tests/Semaphore_Test.dsp: + * tests/Service_Config_Test.dsp: + * tests/Sigset_Ops_Test.dsp: + * tests/Simple_Message_Block_Test.dsp: + * tests/Svc_Handler_Test.dsp: + * tests/TSS_Test.dsp: + * tests/Task_Test.dsp: + * tests/Thread_Manager_Test.dsp: + * tests/Thread_Mutex_Test.dsp: + * tests/Thread_Pool_Reactor_Test.dsp: + * tests/Thread_Pool_Test.dsp: + * tests/Time_Service_Test.dsp: + * tests/Time_Value_Test.dsp: + * tests/Timeprobe_Test.dsp: + * tests/Timer_Queue_Test.dsp: + * tests/Tokens_Test.dsp: + * tests/UPIPE_SAP_Test.dsp: + * tests/Upgradable_RW_Test.dsp: + + Removed the Alpha configurations. I don't think we've actually + looked at these for over a year, and they are missing from a lot + of projects. Thankfully, they are easy to recreate if they are + needed. + + * ACE-INSTALL.html: + + Changed the Windows NT Alpha section to mention that we no + longer have configurations out of the box for Win32/Alpha, they + must be recreated if needed. + + * WindozeCE/ACEApp.cpp: (removed) + * WindozeCE/ACEApp.h: (removed) + * WindozeCE/README: (removed) + * WindozeCE/StdAfx.cpp: (removed) + * WindozeCE/StdAfx.h: (removed) + * WindozeCE/WindozeCE.aps: (removed) + * WindozeCE/WindozeCE.clw: (removed) + * WindozeCE/WindozeCE.cpp: (removed) + * WindozeCE/WindozeCE.dsp: (removed) + * WindozeCE/WindozeCE.h: (removed) + * WindozeCE/WindozeCE.rc: (removed) + * WindozeCE/WindozeCEDlg.cpp: (removed) + * WindozeCE/WindozeCEDlg.h: (removed) + * WindozeCE/resource.h: (removed) + * WindozeCE/res/WindozeCE.ico: (removed) + * WindozeCE/res/WindozeCE.rc2: (removed) + + No longer used. + + * Makefile: + + Removed WindozeCE from CONTROLLED_FILES. + + * tests/WinCE/Atomic_Op_Test.dsp: (removed) + * tests/WinCE/Barrier_Test.dsp: (removed) + * tests/WinCE/Basic_Types_Test.dsp: (removed) + * tests/WinCE/Buffer_Stream_Test.dsp: (removed) + * tests/WinCE/Conn_Test.dsp: (removed) + * tests/WinCE/DLL_Test.dsp: (removed) + * tests/WinCE/Enum_Interfaces_Test.dsp: (removed) + * tests/WinCE/Future_Test.dsp: (removed) + * tests/WinCE/Handle_Set_Test.dsp: (removed) + * tests/WinCE/Hash_Map_Manager_Test.dsp: (removed) + * tests/WinCE/MT_Reactor_Timer_Test.dsp: (removed) + * tests/WinCE/MT_SOCK_Test.dsp: (removed) + * tests/WinCE/Map_Manager_Test.dsp: (removed) + * tests/WinCE/Mem_Map_Test.dsp: (removed) + * tests/WinCE/Message_Block_Test.dsp: (removed) + * tests/WinCE/Message_Queue_Notifications_Test.dsp: (removed) + * tests/WinCE/Message_Queue_Test.dsp: (removed) + * tests/WinCE/Notify_Performance_Test.dsp: (removed) + * tests/WinCE/OrdMultiSet_Test.dsp: (removed) + * tests/WinCE/Priority_Buffer_Test.dsp: (removed) + * tests/WinCE/Priority_Task_Test.dsp: (removed) + * tests/WinCE/Reactor_Exceptions_Test.dsp: (removed) + * tests/WinCE/Reactor_Notify_Test.dsp: (removed) + * tests/WinCE/Reactor_Performance_Test.dsp: (removed) + * tests/WinCE/Reactor_Timer_Test.dsp: (removed) + * tests/WinCE/Reactors_Test.dsp: (removed) + * tests/WinCE/Reader_Writer_Test.dsp: (removed) + * tests/WinCE/Recursive_Mutex_Test.dsp: (removed) + * tests/WinCE/SOCK_Connector_Test.dsp: (removed) + * tests/WinCE/SOCK_Test.dsp: (removed) + * tests/WinCE/SString_Test.dsp: (removed) + * tests/WinCE/Semaphore_Test.dsp: (removed) + * tests/WinCE/Sigset_Ops_Test.dsp: (removed) + * tests/WinCE/Simple_Message_Block_Test.dsp: (removed) + * tests/WinCE/TSS_Test.dsp: (removed) + * tests/WinCE/Task_Test.dsp: (removed) + * tests/WinCE/Thread_Manager_Test.dsp: (removed) + * tests/WinCE/Thread_Mutex_Test.dsp: (removed) + * tests/WinCE/Thread_Pool_Test.dsp: (removed) + * tests/WinCE/Time_Value_Test.dsp: (removed) + * tests/WinCE/Timer_Queue_Test.dsp: (removed) + * tests/WinCE/ce_tests.dsw: (removed) + + Removed these Windows CE Toolkit for Visual C++ files. + +Mon Feb 26 00:15:42 2001 Darrell Brunsch + + * tests/DLL_Test_Impl.dsp: + + Made sure the Code Generation settings were correct. + +Sun Feb 25 19:40:11 2001 Carlos O'Ryan + + * bin/ACEutils.pm (CheckForConfig): + This routine was not removing all the -Config options from the + command-line, causing problems in some of the tests. + +Sun Feb 25 16:33:26 2001 Darrell Brunsch + + * tests/DLL_Test.cpp: + + Left the DLL end with a d in debug mode, but changed + the test to add the d when _DEBUG and ACE_WIN32 is + defined. Test should now work again on Win2000_Debug. + +Sun Feb 25 11:28:06 2001 Darrell Brunsch + + * tests/run_test.pl: + + When there are errors in the log, print out the entire + log. This should make it much easier to understand + problems in the nightly build logs. + +Sun Feb 25 09:04:43 2001 Carlos O'Ryan + + * tests/DLL_Test.cpp: + Accidentally left the 'd' suffix in the name of the DLL. + +Sat Feb 24 22:58:42 2001 Darrell Brunsch + + * bin/msvc_auto_compile.pl: + * TAO/TAOACE.dsw: + * TAO/TAOACE_Static.dsw: + * Static_Performance.dsw: + + Removed references to gperf_lib.dsp + + * TAO/version_tests.dsw: (removed) + + This was still referring to orbsvcs.dsp, which shows that + it is way out of date (and not used). Zapped. + +Sat Feb 24 20:59:42 2001 Darrell Brunsch + + * apps/gperf/src/gperf.dsp: + * apps/gperf/src/gperf.dsw: + * apps/gperf/src/gperf_lib.dsp: (removed) + + Merged gperf into one project. This will bring the + structure in line with the Makefiles. + +Sat Feb 24 19:28:42 2001 Darrell Brunsch + + * ace/OS.i: + + Fixed my recent changes to ACE_OS::dlsym () to work on + Windows CE. + +Sat Feb 24 17:50:38 2001 Darrell Brunsch + + * tests/DLL_Test.cpp: + + OBJ_PREFIX was being created by attaching a char string to + a ACE_TCHAR string. Needed to add ACE_TEXT to the first + string for compilation on ACE_USES_WCHAR. + + * tests/DLL_Test_Impl.dsp: + + Changed the internal name to "DLL_Test DLL" to make sure + this gets compiled in the first pass by msvc_auto_compile.pl. + + * tests/run_test.pl: + + Added a check for LM_WARNINGs in log files. Let's see if + there have been any hidden (DLL_Test actually was producing + a warning on Windows, but Carlos's fix already got rid of it, + Yay!). + +Sat Feb 24 15:44:58 2001 Carlos O'Ryan + + * tests/tests.dsw: + * tests/DLL_Test_Impl.dsp: + Add new project file for the shared library used in the test. + + * tests/DLL_Test.cpp: + * tests/DLL_Test_Impl.cpp: + Change the Win32 version to load a shared library instead of the + exe. + +Sat Feb 24 14:07:11 2001 Darrell Brunsch + + * tests/Thread_Pool_Reactor_Test.cpp: + + Did a careful study of what this test was doing in regards to + sending wide-character strings, and made it consistent. The + most troublesome aspect was the fact that the length is encoded + in the shutdown string ("\011shutdown") which meant that I had + to send the length in characters, not in bytes. This should + really fix [Bug 537]. + +Sat Feb 24 14:37:00 2001 Craig Rodrigues + + * ace/config-g++-common.h + gcc 2.97 and higher require the use of the std namespace for + iostrams + +Sat Feb 24 10:27:04 2001 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Disable the interceptor tests when the ORB is compiled without + interceptor support. + + * tests/run_test.lst: + Disable the Reactor_Notify_Test on single threaded builds, it + uses threads. + + * bin/nightlybuilds/scoreboard_update.pl: + Fixed usage message. + +Sat Feb 24 09:45:18 2001 Carlos O'Ryan + + * tests/run_test.lst: + Disable the DLL_Test on KCC/Linux builds. The test runs + normally, but crashes on shutdown(), it appears as if the + run-time system is invoking the destructors after the library is + unloaded. + + * tests/Makefile: + * tests/Makefile.DLL_Test: + * tests/DLL_Test.h: + * tests/DLL_Test.cpp: + * tests/DLL_Test_Impl.h: + * tests/DLL_Test_Impl.cpp: + Cleanup code, and truly separate the shared library code to a + completely new separate file. + +Sat Feb 24 09:51:45 2001 Carlos O'Ryan + + * bin/auto_compile: + Pass the -Config options to each script, this helps the + $ACE_ROOT/bin/run_test.pl script that needs to disable some + tests in certain configurations. + +Sat Feb 24 08:21:48 2001 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + added -fno-implicit-templates on Tornado II for Intel 386 + family targets. Thanks to Albert Wijnja + for reporting that static template data members weren't really on + VxWorks/386, and to Greg Holtmeyer + for confirming that -fno-implicit-templates should work with + the Tornado II g++. [Bug 658] + +Thu Feb 22 15:59:04 2001 Douglas C. Schmidt + + * ace/OS.i: The ACE_TRACE call for ACE_OS::gmtime identified the + function as "localtime". This is now fixed. Thanks to Mason + Deaver for reporting this. + +Fri Feb 23 19:44:36 2001 Krishnakumar B + + * ACE version 5.1.13 released. + +Thu Feb 22 12:28:15 2001 Irfan Pyarali + + * ace/TP_Reactor.cpp (handle_events): Here is the description of + how things were working and where the problem was: In the + TP_Reactor there is one leader thread waiting in select() and + the others waiting on the token. During deactivation(), the + flag is set on the reactor, signal_all_threads() + is called on the token, and an empty notification is send to the + current leader thread. signal_all_threads() sets the + flag on the Token when there are waiters + on the Token (does nothing if there are no waiters). This + scheme worked fine when there were leader and follower threads + waiting. When a new leader is chosen, it returns the magic + number 2 from token.acquire_read() and hence exits gracefully + from the handle_events(). However, the problem was that when + some (or all) of the TP threads are busy running upcalls, + signal_all_threads() was a no-op and the magic number 2 was not + returned from token.acquire_read() and hence the exit from + handle_events() was flagged as an error. + + The fix is as described below: + + (1) ACE_Token::signal_all_threads() does not make sense. The + token is a mutex, not a condition variable. Therefore, it does + not make sense to have a signal_all_threads() methods. Plus I + believe that the method does not do as advertised. Therefore, I + removed this method from the token class. + + (2) There is no need to signal all the threads in the + TP_Reactor. Marking the Reactor as closed and signaling the + leader thread is enough. The leader thread will wake up to + handle the empty event, the next leader will see that the + Reactor is closed and exit gracefully. This will continue until + all the waiters are drained. + + (3) With the above change, there is no need to check for an + magic returns from token.acquire_read(). When a thread gets the + token, it checks the deactivation flag before proceeding. If + the Reactor is closed, it gracefully exits. Otherwise, it + continues as leader. + + (4) Since there is no need to call token.signal_all_threads(), + ACE_TP_Reactor::wakeup_all_threads() can be removed since it is + now the same as ACE_Select_Reactor_T::wakeup_all_threads(). + + Note that this change should help with making + Thread_Pool_Reactor_Test run without shutdown errors. + + * ace/Select_Reactor_T.i (deactivate): The setting of the + flag and waking up of all the threads should be + atomic. I am being picky about this one but I think am I right. + Also added the guard to the accessor. + +Thu Feb 22 08:51:42 2001 Darrell Brunsch + + * ace/OS.i: + + Bleh. Changed an && to || to make sure we get a symbolname + variable for non-Unicode Win32. + + "He who lives without committing any folly is not so + wise as he thinks" - La Rochefoucauld + +Thu Feb 22 08:43:30 2001 Carlos O'Ryan + + * include/makeinclude/rules.local.GNU: + Add SunWS_cache and ir.out to the list of files removed by + the realclean pseudo-target. This directory is used by Sun/CC + 5.0 (and Forte), if not removed the information there can become + stale, and break the builds. + This should fix the Sun/CC 5.0 nightly builds. + +Thu Feb 22 07:51:36 2001 Balachandran Natarajan + + * ace/OS.i: Reverted the change "Thu Feb 22 03:31:06 2001 + Krishnakumar B ". + +Thu Feb 22 03:31:06 2001 Krishnakumar B + + * ace/OS.i (dlsym): + Hopefully fixed the Win32 builds. Removed a extra ! in the + #ifdef. + +Thu Feb 22 02:58:36 2001 Krishnakumar B + + * VERSION: + * PROBLEM-REPORT-FORM: + * ace/Version.h: + Reverted the changes and restored the old versions of + these files as the beta build script was killed. Pain :-( + +Wed Feb 21 20:10:42 2001 Darrell Brunsch + + * ace/OS.i: + * tests/DLL_Test.cpp: + * tests/Thread_Pool_Reactor_Test.cpp: + + Fixed the remaining problems with the Win2000_Unicode tests. + [Bug 537] + +Tue Feb 20 21:19:39 2001 Carlos O'Ryan + + * ace/Svc_Conf.h: + Add ACE_Export macro for ace_create_service_type() it is used + outside the library now. + +Tue Feb 20 06:34:26 2001 Douglas C. Schmidt + + * include/makeinclude/platform_sunos5_g++.GNU: Make sure to explicitly + set ACE_HAS_GNUG_PRE_2_8. Thanks to Christian von Mueffling + for reporting this. + + * ace/Thread_Manager.cpp (cancel_grp): Fixed a typo in + the ACE_TRACE macro. Thanks to Mike Curtis for reporting this. + +Mon Feb 19 16:38:08 2001 Krishnakumar B + + * ace/Asynch_Acceptor.{h,cpp}: + Added method void handle (ACE_HANDLE) and made it call the base + class's handle(ACE_HANDLE) method to remove warning about + partial overloading. Fix suggested by Irfan. + +Sun Feb 18 21:55:16 2001 Krishnakumar B + + * ace/OS.h: + Added an extern "C" void ace_mutex_lock_cleanup_adapter before + the definition of ACE_PTHREAD_CLEANUP_PUSH to avoid warnings on + SunCC 5.x. + +Sun Feb 18 17:16:41 2001 Douglas C. Schmidt + + * netsvcs/clients/Tokens/manual/manual.cpp (main), + * tests/Tokens_Test.cpp (main): Reordered the #ifdefs for the + ACE_HAS_TOKENS_LIBRARY stuff. Thanks to Kitty for reporting + this. + +Sun Feb 18 16:28:45 2001 Chris Gill + + * ace/RB_Tree.h: Changed order of method declarations to (hopefully) + dodge an internal compiler error on VxWorks. + +Sun Feb 18 09:59:18 2001 Douglas C. Schmidt + + * netsvcs/clients/Tokens: + * netsvcs/servers/main.cpp (main): + * netsvcs/servers/svc.conf: + * netsvcs/lib/Token_Handler: Only compile this stuff if the + ACE_HAS_TOKENS_LIBRARY macro is enabled. Thanks to Carlos + for reporting this. + + * ace/Object_Manager.cpp: Added a check for ACE_HAS_TOKENS_LIBRARY + so we can skip initializing certain things if that macro is + undefined. + + * ace/Token_Collection.*: + * ace/Token_Invariants.*: + * ace/Token_Manager.*: + * ace/Local_Tokens.*: + * ace/Remote_Tokens.*: + * ace/Token_Request_Reply.*: + Only compile these files if ACE_HAS_TOKENS_LIBRARY is enabled + since this functionality does not appear to be widely used and + yet it takes up space. + + * tests/Tokens_Test.cpp (main): Only run this test if + ACE_HAS_TOKENS_LIBRARY is defined. + +Sat Feb 17 17:23:46 2001 Darrell Brunsch + + * ace/SOCK_Dgram_Mcast.cpp: + + Integrated a fix from Keith Nicewarner + In effect, this reverts the multicast code changed on + Fri Jan 26 11:18:15 2001 Douglas C. Schmidt ... + for all platforms except linux. + +Sat Feb 17 15:52:09 2001 Carlos O'Ryan + + * bin/run_all_list.pm: + * tests/run_tests.pl: + Remove obsolete scripts. + +Sat Feb 17 13:26:17 2001 Douglas C. Schmidt + + * ace/POSIX_Asynch_IO.cpp (thread_function): Make sure to cast + -1 to void * since that's the signature of the method. Thanks + to Bala for reporting this. + + * ace/POSIX_Asynch_IO.cpp (thread_function): Zapped the unused + result local variable and also changed the logic to bailout if + handle_events() returns -1. This fixes a warning reported by + KCC. + +Fri Feb 16 17:39:16 2001 Mayur Deshpande + + * ace/config-qnx-rtp.h: Commented out ACE_HAS_NONSTATIC_OBJECT_MANAGER. + Thanks to Andrew Olson for the suggestion. + + * include/makeinclude/platform_qnx_rtp_gcc.GNU: Added -fexceptions to + CCFLAGS and 'exceptions=1' at end of file. + Thanks to Andrew Olson for the suggestion. + +Fri Feb 16 05:37:47 2001 Douglas C. Schmidt + + * ace/Logging_Strategy.h: Updated the documentation to explain what + the various options mean. + + * tests/Log_Msg_Test.cpp (test_log_msg_features): Added + ACE_Log_Msg::PROCESS to a couple of priority_mask() calls to + make the test work correctly. Thanks to Kitty for reporting + this. + +Thu Feb 15 17:53:31 2001 Frank Hunleth + + * ace/Thread_Manager.i: Simplified casting in + ACE_Thread_Descriptor::get_next per suggestion from Carlos. + +Thu Feb 15 14:57:59 2001 Frank Hunleth + + * ace/Thread_Manager.i: Fixed typo in ACE_Thread_Descriptor::get_next. + +Thu Feb 15 11:33:55 2001 Douglas C. Schmidt + + * tests/Refcounted_Auto_Ptr_Test.cpp (main): Always call ACE_OS::exit(0) + to make sure that this test terminates... + + * ace/Thread_Manager.i (get_next): Added an ACE_const_cast() to + make certain compilers happy. + + * ace/Logging_Strategy.cpp: Fixed some Unicode problems on Win32. + +Thu Feb 15 08:49:44 2001 Carlos O'Ryan + + * bin/nightlybuilds/builds.lst: + Rename WashU builds so all the Debian builds appear together. + +Thu Feb 15 07:15:39 2001 Douglas C. Schmidt + + * ace/Logging_Strategy.{h,cpp}: Added support to generate multiple + log files, rather than just two. Thanks to Orlando Ribeiro + for this fix. + +Thu Feb 15 03:36:46 2001 Krishnakumar B + + * bin/nightlybuilds/builds.lst (WEB): + Added a new build with TAO_MINIMUM linked statically. + +Wed Feb 14 05:28:59 2001 Douglas C. Schmidt + + * ace/Thread_Manager.{h,i}: Added const to state(), grp_id(), + task(), get_next(), and self(). Thanks to Johnny Willemsen + for reporting this. + +Tue Feb 13 17:51:47 2001 Douglas C. Schmidt + + * tests/Makefile.bor (TESTS): Added Dirent_Test to list of TESTS. + Thanks to Mike Curtis for reporting this. + + * tests/run_tests.bat: Fixed a typo so that Dirent_Test will run. + Thanks to Mike Curtis for reporting this. + +Wed Feb 14 12:08:10 2001 Frank Hunleth + + * ace/Read_Buffer.cpp: Fixed boundary condition in rec_read. + If record was a multiple of BUFSIZ and the record was + terminated with an EOF instead of a "term" character, + rec_read would return 0 instead of the actual data read in. + The problem was that the partial buffer fill size was being + checked instead of the total number of bytes read in. This + issue was noticed when trying to read in an IOR file in TAO + that was exactly 512 bytes (BUFSIZ * 2 on Win2k) long. + +Tue Feb 13 14:44:28 2001 Nanbor Wang + + * ace/ace_wchar.inl: Changed several variable from type + to type as on 64-bit whistler, size_t and int are not the + same size which confuses 64-bit compiler. (Per Kitty's + request.) + +Tue Feb 13 10:23:31 2001 Steve Huston + + * apps/JAWS/server/IO.{h cpp}: (Side-affect necessitated by addition of + handle () method and handle_ member to ACE_Handler). Moved the + handle_ member to the JAWS_Synch_IO class - it needs it, and + JAWS_Asynch_IO class has it by inheritance from ACE_Handler. Left + the handle () methods in JAWS_IO, but made them pure virtual, + implemented in JAWS_Synch_IO (implementation moved from JAWS_IO) + and in JAWS_Asynch_IO, where they forward up to ACE_Handler's + handle () methods. + +Mon Feb 12 18:18:05 2001 Frank Hunleth + + * tests/Thread_Mutex_Test.cpp: + Modified test to use process mutexes for Win32 platforms + so that timed mutexes could be tested. + +Sun Feb 11 15:33:39 2001 Darrell Brunsch + + * ace/QoS/ACE_QoS_Export.h: + + Added ACE_AS_STATIC_LIBS support. + + * ace/QoS/ACE_QoS.dsp: + * ace/QoS/ACE_QoS_Lib.dsp: + + Fixed to comply with ACE standards. + +Sun Feb 11 10:50:10 2001 Douglas C. Schmidt + + * include/makeinclude/platform_sunos5_g++.GNU (exceptions): + Only set the -fno-exceptions option if we're *not* using GCC + 2.7.2! Thanks to Pradeep for explaining how to do this. + +Sun Feb 11 10:15:08 2001 Johnny Willemsen + + * ace/Makefile.bor: + * ace/QoS/Makefile.bor: + * include/makeinclude/ace_flags.bor: + Added build support for QoS library with Borland compiler. + +Sat Feb 10 15:29:08 2001 Carlos O'Ryan + + * ace/Message_Block.h: + Improved documentation for the lenth(), size() and space() + methods. + +Sat Feb 10 07:19:37 2001 Christopher Kohlhoff + + * include/makeinclude/outputdir.bor: + Removed the now out-of-date comment about pascal/non-pascal + build directories. + + * ace/config-win32-borland.h: + Added support for new ACE_HAS_VCL define to enable inclusion + of VCL header files. + +Fri Feb 9 16:47:44 2001 Pradeep Gore + + * ace/Makefile.am: + Removed references to the AQoSA files. + +Fri Feb 9 16:42:10 2001 Pradeep Gore + + * examples/QOS/client.dsp: + * examples/QOS/server.dsp: + Updated the corrected project files. + Thanks to Darrell for pointing this out. + +Thu Feb 8 19:25:03 2001 Carlos O'Ryan + + * performance-tests/RPC/run_test.pl: + * performance-tests/TCP/run_test.pl: + * performance-tests/UDP/run_test.pl: + Add driver strings + +Thu Feb 08 19:18:36 2001 Angelo Corsaro + + * bin/auto_run_tests.lst: + + Removed comment from Exposed Policies test. The test has been fixed. + +Thu Feb 8 14:11:36 2001 Darrell Brunsch + + * ace/ws2tcpip.h: [Removed] + + I don't see any reason to have this file in ace; it is a system + header file. And from [Bug 722], our version is out of date anyway. + + * ace/OS.h: + + Changed to include system version of ws2tcpip.h + + * ace/Makefile.am: + * ace/ace-dll.icc: + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + + Removed references to ws2tcpip.h. + + * ace/SOCK_Connect.cpp: + + Changed get_ip_interfaces to remove a memory error. Thanks to + Viatcheslav Batenine for helping out with + this. + + * ace/SOCK_Dgram_Mcast.cpp: + + It looks like the change made on: + + Fri Jan 26 11:18:15 2001 Douglas C. Schmidt ... + + doesn't work on Win32. Reverted back to the old scheme for Win32 + only. + +Thu Feb 8 00:34:57 2001 Douglas C. Schmidt + + * include/makeinclude/platform_sunos5_g++.GNU: Added support for + -fno-exception when exceptions=0 is given to the Makefile. + Thanks to Christian v. Mueffling for reporting + this. + +Wed Feb 7 23:02:46 2001 Douglas C. Schmidt + + * ace/SUN_Proactor.cpp: Fixed the cancel_aiocb() method and added a + new overridden cancel_aio() method. Thanks to Alexander Libman + for contributing this. + +Thu Feb 8 02:09:05 2001 Pradeep Gore + + * examples/QOS/Makefile: + * examples/QOS/client.dsp: + * examples/QOS/server.dsp: + Modified to use the ACE_QoS lib. + * Receiver_QoS_Event_Handler.cpp: + * Sender_QoS_Event_Handler.cpp: + Added missing Log_Msg.h for ACE_DEBUG. + Other files were modified to reflect changed directory location + of AQosA imclude files. + +Thu Feb 8 00:17:43 2001 Pradeep Gore + + * ace/QoS_Decorator.cpp: + * ace/QoS_Session_Factory.cpp: + * ace/SOCK_Dgram_Mcast_QoS.cpp: + * ace/QoS_Decorator.h: + * ace/QoS_Session_Factory.h: + * ace/SOCK_Dgram_Mcast_QoS.h: + * ace/QoS_Manager.cpp: + * ace/QoS_Session_Impl.cpp: + * ace/SOCK_Dgram_Mcast_QoS.i: + * ace/QoS_Manager.h: + * ace/QoS_Session_Impl.h: + * ace/QoS_Session_Impl.i: + Moved the AQoSA classes to ace/QoS directory. + + * ace/Makefile: + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Removed the QoS related files, added QoS directory to build. + + * ace/Qos/Makefile + * ace/QoS/ACE_QoS.dsw: + * ace/QoS/ACE_QoS.dsp: + * ace/QoS/ACE_QoS_Lib.dsp: + * ace/QoS/ACE_QoS_Export.h: + Added Makefile and MSVC project files. + Thanks to Craig Rodrigues for suggesting this + change and providing the patch. + +Wed Feb 7 11:34:56 2001 Carlos O'Ryan + + * tests/Message_Queue_Test_Ex.cpp: + Fix build problems for single threaded environments. + +Wed Feb 7 09:03:22 2001 Douglas C. Schmidt + + * apps/Gateway/Gateway/Event_Channel.cpp (initiate_acceptors): Fixed + incorrect if/else branching. Thanks to Lu Yunhai + for reporting this. + +Tue Feb 6 23:43:49 2001 Douglas C. Schmidt + + * apps/Gateway/Peer/Peer.cpp (await_events): Fixed the use of + %s to be %*s since the string may not be nul terminated! Thanks + to Lu Yunhai for reporting this. + +Tue Feb 6 20:11:28 2001 Krishnakumar B + + * include/makeinclude/platform_sunos5_sunc++.GNU: + + Remove double inclusion of $(CFLAGS) for Sun CC 5.0. + +Tue Feb 6 19:30:26 2001 Krishnakumar B + + * ace/Malloc_T.cpp (shared_malloc): + Added a #ifdef to remove the warnings from Digital Tru64 cxx. This + is a temporary workaround. TODO: Change ACE_SEH_* macros so that such + hacks are unnecessary. + +Tue Feb 6 19:23:16 2001 Krishnakumar B + + * include/makeinclude/platform_sunos5_sunc++.GNU: + Complete reverting the changes made by Irfan on Sat Jan 27 + 01:06:09 2001. This file was missed in the last revert done by me. + +Tue Feb 06 19:03:35 2001 Steve Huston + + * include/makeinclude/platform_sunos5_sunc++.GNU: For C++ 5, make sure + to add CFLAGS into CCFLAGS, even if no other options are added. Else + things get built without -mt. + +Tue Feb 06 18:37:41 2001 Steve Huston + + * tests/Thread_Mutex_Test.cpp: Changed wording of the message for + "timed acquire" not supported so as not to trip the error catcher + in run_tests.pl. + +Tue Feb 06 17:55:28 2001 Steve Huston + + * examples/Reactor/Proactor/post_completions.cpp: Allow this to + run with AIOCB_Proactor. + + * ace/Asynch_IO.{h cpp}: Added ACE_Handler::handle (ACE_HANDLE) + function to set the handle; changed ACE_HANDLE ACE_Handler::handle + to return the actual value. + + * ace/Asynch_Acceptor.cpp (handle_accept): Call ACE_Handler::handle + to set the handle value for the new handler before calling its + open() method. + +Tue Feb 06 17:16:43 2001 Steve Huston + + * tests/MEM_Stream_Test.cpp: + * tests/MEM_Stream_Test.h: New file; moved definition of Echo_Handler + from MEM_Stream_Test.cpp to this file to make it visible to AIX + C++ 3.6.6 at template instantiation time. + +Mon Feb 5 16:19:20 2001 Douglas C. Schmidt + + * ace/ACE.cpp: ACE_TRACE ("ACE::basename") should be ACE_TRACE ("ACE::diname"). + Thanks to Lu Yunhai for reporting this. + + * ace/Basic_Types.h: Changed the ACE_BIG_ENDIAN and ACE_LITTLE_ENDIAN + macros to use the form 0x0123 rather than 0123X. Thanks to + Craig Rodrigues for helping find this + problem. + +Mon Feb 5 18:20:11 2001 Krishnakumar B + + * ace/config-sunos5.5.h (ACE_USES_OLD_IOSTREAMS): + + Reverted the change to config-sunos5.5.h and turned on + ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION, + ACE_TEMPLLATES_REQUIRE_SOURCE and ACE_USES_OLD_IOSTREAMS for the + SunCC 5.0 compiler. + +Mon Feb 5 16:19:20 2001 Douglas C. Schmidt + + * examples/RMCast/Send_File/Receiver.cpp (init): Replaced + a hard-coded file permission of 0644 with + ACE_DEFAULT_FILE_PERMS. Thanks to Chris Kohlhoff + for reporting this. + +Mon Feb 5 13:00:17 2001 Krishnakumar B + + * tests/Thread_Mutex_Test.cpp: (reported_notsup) + Removed a warning about defined but not used. + +Sat Feb 3 14:41:17 2001 Darrell Brunsch + + * ace/OS.h: + * ace/config-win32-msvc.h: + + Fixed problems with LLSEEK and ACE_stat on Windows CE. + +Sat Feb 3 14:12:36 2001 Darrell Brunsch + + * tests/Config_Test.cpp: + * tests/Config_Test.h: + * tests/Log_Msg_Test.cpp: + + Fixed ACE_USES_WCHAR problems. + +Fri Feb 02 18:36:42 2001 Steve Huston + + * ace/config-linux-common.h: Added #define ACE_POSIX_AIOCB_PROACTOR + unless the user #defines ACE_POSIX_SIG_PROACTOR before including + config-linux.h. (At least prior to 2.4 kernels) queueing signals + across threads does not work - it fails silently, which breaks + basic functionality of the async model - like asynchronously + accepting TCP connections - and pretty much prevents multi-threaded + work with timers and probably other async operations. + + * examples/Reactor/Proactor/test_proactor.cpp: Disabled the ACE_DEBUG + calls that display message buffers - they're often too large and + overrun the ACE_Log_Msg buffers and crash the program. + +Fri Feb 2 08:38:37 2001 Douglas C. Schmidt + + * ace/WFMO_Reactor.cpp (handler): Set the existing_masks variable to 0 + to avoid warnings from static analysis tools. Thanks to Ivan + Murphy for reporting this. + +Thu Feb 01 22:00:17 2001 Sharath R. Cholleti + + * tests/Message_Queue_Test_Ex.cpp + + Fixed the bugs which were giving runtime error on + Win32 - removed "queue_type" from single_thread_performance_test + and performance_test functions. Now these funtions dont + have args. + + * tests/tests.dsw + + Just an update of the workspace. + +Thu Feb 1 21:00:57 2001 Frank Hunleth + + * bin/auto_compile_win32.pl: + * bin/run_all_list.pm: + + Added TAO RT Mutex unit tests to auto build and test + lists. + +Thu Feb 01 18:52:27 2001 Angelo Corsaro + + * RTJava: + Added Directory for RTJava related research. Check the + ChangeLog included in the newly directory for more info. + +Thu Feb 01 18:23:17 2001 Sharath R. Cholleti + + * tests/Log_Msg_Test.dsp: + * tests/Config_Test.dsp: + + Added these files. + * tests/tests.dsw: + + Added the above two projects to the workspace. + +Thu Feb 1 18:01:26 2001 Luther J Baker + + * ace/OS.i (mutex_init): + + Removed call into PACE. + +Thu Feb 01 18:21:15 2001 Steve Huston + + * tests/Thread_Mutex_Test.cpp: Only report "operation not supported" + once for a failed ACE_Thread_Mutex::acquire (ACE_Time_Value &). + Also, if it reports ENOTSUP while ACE_HAS_MUTEX_TIMEOUT is + defined, warns the user that it's probably the wrong setting. + +Thu Feb 01 17:36:28 2001 Steve Huston + + * examples/Reactor/Proactor/test_proactor3.cpp: Fixed a non-constant + array dimension and some output formatting. + +Thu Feb 01 17:07:35 2001 Steve Huston + + * examples/Reactor/Proactor/post_completions.cpp: Removed extraneous + 'd' from the 'count' display. + +Thu Feb 01 15:33:26 2001 Steve Huston + + * ace/Reactor.h (purge_pending_notifications): + * ace/WFMO_Reactor.h (purge_pending_notifications): + * ace/Select_Reactor_Base.h (purge_pending_notifications): + Removed the default argument value - callers must now explicitly + specify a 0 ACE_Event_Handler* to remove all handler notifications. + Thanks to Edan Ayal for arguing this point. + +Thu Feb 1 09:57:41 2001 Jeff Parsons + + * ace/SString.i: + + Changed behavior of ACE_WString::rep to be the same + as ACE_CString::rep, that is, to return an empty + (w)string rather than a null (w)string when the length + is 0. Thanks to Johnny Willemsen + for pointing out this discrepancy. + +Thu Feb 1 09:42:41 2001 Chad Elliott + + * include/makeinclude/platform_chorus4.x_g++.GNU: + + Modification to allow building for Chorus 4.x on x86. CPU will be + set to x86, but CLX_TYPE will be set to i486-elf-sysv4. + +Thu Feb 01 10:29:31 2001 Steve Huston + + * ace/Synch.i (ACE_Null_Mutex::acquire (ACE_Time_Value&)): Removed + the arg name to fix "unused argument" warning from g++. + +Wed Jan 31 22:01:00 2001 Rick Stille + * ace/OS.cpp(operator FILETIME): Corrected an error in the Jan 26 GHS + revision. The term "ACE_Time_Value::FILETIME_to_timval_skew" had been + omitted from the calculation. + +Wed Jan 31 18:43:26 2001 Krishnakumar B + + * tests/Message_Queue_Test_Ex.cpp (single_thread_performance_test): + Removed the warning about queue_type using ACE_UNUSED_ARG. + +Wed Jan 31 17:27:35 2001 Steve Huston + + * ace/Acceptor.cpp (ACE_Oneshot_Acceptor::handle_input): Unregister + the acceptor from the reactor before doing the shared_accept call + to guard against the use-case where the acceptor is destroyed during + the service handler activation sequence. + +Wed Jan 31 15:55:23 2001 Frank Hunleth + + * ace/Synch.i: + Added ACE_Null_Mutex::acquire (ACE_Time_Value &tv) + to fix link error. + +Wed Jan 31 15:12:00 2001 Jeff Parsons + + * ace/CDR_Stream.h: + + Made method do_byte_swap() public. If ACE_ENABLE_SWAP_ON_WRITE + is defined, TAO_GIOP_Message_Base::format_message() and + TAO_GIOP_Message_Lite::format_message() both call this method. + Thanks to Paul Rubel for reporting this bug. + +Wed Jan 31 12:19:51 2001 Steve Huston + + * docs/tutorials/Chap_2/ex03.html, ex04.html: Fixed these example + programs to 1) send the Nul terminators with the strings, + 2) allow enough space on the recv to get it all, 3) return a + value from main. + + * docs/tutorials/Chap_2/Chap_2.zip: Updated the above examples. + +Wed Jan 31 06:43:27 2001 Douglas C. Schmidt + + * ace/Message_Queue_T.cpp: Make sure that dequeue_head() returns + the number of items still on the queue. Thanks to Johnny + Willemsen for reporting this. + +Tue Jan 30 21:39:15 2001 Sharath R. Cholleti + + * tests/Log_Msg_Test.cpp: In funtion test_ostream(), removed the + if condition to check if ACE_OS::unlink() succeeds. Also set + the ostream to NULL before calling ACE_ERROR_RETURN(). Thanks + to Mike Curtis for pointing out problem + caused when ACE_OS::unlink() fails. Thanks to Doug in helping + fix the problem. + +Tue Jan 30 18:04:08 2001 Douglas C. Schmidt + + * tests/Message_Queue_Test_Ex.cpp (single_thread_performance_test): + Zap the Win32 and VxWorks-specific code from this function. + Thanks to Sharath for reporting this. + +Tue Jan 30 11:34:26 2001 Steve Huston + + * examples/Reactor/Proactor/test_aiosig_ace.cpp: Fixed a bunch + of mis-coded ACE_ERROR_RETURNs; added a explicit queued completion, + and disabled the display of buffers that may overrun ACE_Log_Msg's + internal buffers to prevent spurious crashes. + +Tue Jan 30 11:26:42 2001 Steve Huston + + * examples/Reactor/Proactor/post_completions.cpp: Added a count + to be sure that all expected completions are delivered, and + print error message if not. + +Tue Jan 30 10:47:52 2001 Steve Huston + + * ace/Select_Reactor_Base.cpp + (ACE_Select_Reactor_Notify::purge_pending_notifications): + * ace/WFMO_Reactor.cpp + (ACE_WFMO_Reactor_Notify::purge_pending_notifications): Changed + to not purge notifications destined for the reactor only + (notification buffer with 0 handler value). Thanks to Edan + Ayal for this fix. + +Tue Jan 30 01:05:51 2001 Douglas C. Schmidt + + * tests/Message_Queue_Test_Ex.cpp (single_thread_performance_test): + Add cases for VxWorks and NT. Thanks to Sharath for reporting + this. + + * ace/OS.h: #define _SC_AIO_MAX to 1 if it's not set by default. + Thanks to Jean-Francois Daune for reporting this + fix for VxWorks. + +Mon Jan 20 18:36:41 2001 Steve Huston + + * ace/Message_Queue_T.h (ACE_Message_Queue_Ex): Use _USE + rather than _DECL to define the ACE_Message_Queue - fixes + compile error. + +Mon Jan 29 17:29:31 2001 Steve Huston + + * ace/Message_Queue_T.{h i cpp}: Corrected a bunch of references + to Message_Queue_Ex's queue_ member to use . rather than -> + and removed the ACE_NEW to allocate it (follow-ups from Doug's + Sun Jan 28 08:32:07 2001 change). Fixed other compile + errors to allow tests/Message_Queue_Test_Ex.cpp to build. + FYI... whomever added this, it probably should have been named + Message_Queue_Ex_Test to conform. + +Mon Jan 29 15:30:27 2001 Steve Huston + + * ace/POSIX_Proactor.{h cpp} (ACE_POSIX_SIG_Proactor): Don't + mask/block all signals, just the one(s) being used for this + sig proactor instance. Blocking everything can break other + things, such as debuggers and the ability to kill a program. + Also, don't setup a handler for the signals being blocked/waited + as this is a combination whose behavior is undefined. + +Sun Jan 28 08:39:17 2001 Carlos O'Ryan + + * tests/Thread_Mutex_Test.cpp: + Fixed use of ACE_TEXT and string concatenation. + +Sun Jan 28 08:03:08 2001 Carlos O'Ryan + + * tests/tests.dsw: + * tests/Message_Queue_Test_Ex.dsp: + Add NT project files for the new test + +Sun Jan 28 08:32:07 2001 Douglas C. Schmidt + + * netsvcs/lib/Client_Logging_Handler.cpp: Fixed the order in which + the iostream messages are logged so that we don't bomb out when + the VERBOSE option is enabled. Thanks to Craig Rodrigues + for helping find this problem. + + * ace/Message_Queue_T.h: Make sure the lock() forwarding method + forwards to queue_.lock(). + + * ace/Message_Queue_T.{h,i,cpp}: There's no reason to dynamically + allocate the implementation of ACE_Message_Queue_Ex -- instead + it can be simply an instance of ACE_Message_Queue. + + * ace/Message_Queue_T.h: Make sure that the methods on + ACE_Message_Queue_Ex are properly virtual. Thanks to Kitty for + pointing this out. + +Sat Jan 27 19:40:36 2001 Ossama Othman + + * bin/auto_run_tests.lst: + + Added TAO's Portable Interceptor "Service_Context_Manipulation" + test to the list of tests to run. + +Sat Jan 27 19:34:20 2001 Douglas C. Schmidt + + * tests/Config_Test.{h,cpp}: Fixed the use of "bool," which is + not supported on older compilers. Thanks to Kitty for reporting + this. + +Sat Jan 27 15:22:03 2001 Ossama Othman + + * tests/Thread_Mutex_Test.cpp (test): + + Added code that tests mutex timeout functionality. + +Sat Jan 27 15:16:33 2001 Douglas C. Schmidt + + * ace/POSIX_Proactor.h: Replace ACE_Thread_Mutex with ACE_SYNCH_MUTEX + to avoid the need for conditional compilation. + + * ace/SUN_Proactor.h: Don't use ACE_Condition + but instead use the ACE_SYNCH_CONDITION, which also avoids the + need to conditionally compile for threaded platforms. + +Sat Jan 27 13:29:51 2001 Ossama Othman + + * ace/config-linux.h: + + Declare the pthread_mutex_timedlock() prototype as an + 'extern "C"' function. This fixes an "unresolved symbol" link + error. + +Sat Jan 27 10:39:28 2001 Carlos O'Ryan + + * bin/nightlybuilds/builds.lst: + Apparently the blank in 'RedHat 7.0' breaks the scoreboard. + +Sat Jan 27 01:06:09 2001 Irfan Pyarali + + * include/makeinclude/platform_sunos5_sunc++.GNU: SPRO 5.0 + compiler should be able to support automatic template + instantiation. Also, standard C++ library should be ok. -g was + added to DCCFLAGS. + + * ace/config-sunos5.5.h: Turned off + ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION, + ACE_TEMPLATES_REQUIRE_SOURCE and ACE_USES_OLD_IOSTREAMS for the + SPRO 5.0 compiler. + + Thanks to J. Russell Noseworthy + for contributing the above patches. + +Sat Jan 27 00:37:26 2001 Irfan Pyarali + + * ace/OS.i: + + - (mutex_lock): Windows code must use relative time since that + is what WaitForSingleObject() expects. Also, fixed extra + "return" before ACE_NOTSUP_RETURN. + + - (thread_mutex_lock): Made thread_mutex_lock() with timeout + close to the thread_mutex_lock() without timeouts. + +Fri Jan 26 21:53:45 2001 Ossama Othman + + * ace/OS.h: + * ace/OS.i (thread_mutex_lock): + + Added an overloaded version of this method that accepts a + timeout argument. It delegates to the standard + ACE_OS::mutex_lock() method on non-Windows platforms. + Otherwise, it returns with an ENOTSUP. + + The addition of this method was necessary to fix a compile + problem related to the ACE_Thread_Mutex class. + + * ace/Synch.i (acquire): + + In ACE_Thread_Mutex::acquire() that accepts a timeout argument, + call the corresponding ACE_OS::thread_mutex_lock() method. This + fixes compile-time error on MS Windows builds due to the fact + that ACE_mutex_t and ACE_thread_mutex_t are different types on + that platform. + +Fri Jan 26 17:31:26 2001 Ossama Othman + + * ace/OS.i (mutex_lock): + + Fixed unused argument warnings that occured when compiling for + the single threaded case. + +Fri Jan 26 16:58:03 2001 Ossama Othman + + * ace/config-linux.h: + + glibc 2.1.x doesn't have the (very useful) __GLIBC_PREREQ + macro. Use a preprocessor test that doesn't rely on it. + +Fri Jan 26 16:48:06 2001 Ossama Othman + + * ace/config-qnx-neutrino.h (ACE_HAS_MUTEX_TIMEOUTS): + * ace/config-qnx-rtp.h (ACE_HAS_MUTEX_TIMEOUTS): + + QNX supports pthread_mutex_timedlock(). Yes! + +Fri Jan 26 17:50:38 2001 Douglas C. Schmidt + + * ace/config-win32-common.h: + ace/config-vxworks-5.x.h: Added ACE_HAS_MUTEX_TIMEOUTS macro. + + * ace/OS.i: Added timed mutex operations for Win32, VxWorks, and + pSoS. + +Fri Jan 26 16:31:15 2001 Ossama Othman + + * ace/OS.h (mutex_lock): + + Updated documentation for the version of this method that + accepts a timeout value. + + * ace/OS.i (mutex_lock): + + If the platform does not support timed mutexes, then return with + an ENOTSUP. + + * ace/Process_Mutex.h: + * ace/Process_Mutex.inl (acquire): + + Added version of this method that accepts a timeout value. + +Fri Jan 26 17:50:38 2001 Douglas C. Schmidt + + * examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.cpp (report_stats): + Fixed some unintentional tabs. Thanks to Mike Curtis for + reporting this! + +Fri Jan 26 15:34:01 2001 Ossama Othman + + * ace/OS.h: + * ace/OS.i (mutex_timedlock, mutex_lock): + * ace/Synch.i (acquire): + + Renamed the ACE_OS::mutex_timedlock() to the overloaded + ACE_OS::mutex_lock(). + +Fri Jan 26 14:13:32 2001 Ossama Othman + + * ace/OS.h: + * ace/OS.i (mutex_timedlock): + + Wrapped the pthread_mutex_timedlock() function. It times out if + a lock hasn't been acquired by the given absolute time. + + * ace/Synch.h: + * ace/Synch.i (acquire): + + Added versions of this method that accept an ACE_Time_Value. + They are used to prevent blocking definitely while waiting for a + given mutex to become available. + + * ace/config-linux.h (ACE_HAS_MUTEX_TIMEOUTS): + + glibc 2.2.x supports the pthread_mutex_timedlock() function. + + * ace/config-linux-common.h: + + Undefine ACE_LACKS_{LLSEEK,LSEEK64}_PROTOTYPE prior to include + the KCC configuration file. Thanks to Jeff Greif + for reporting this. + + * ace/README: + + Added ACE_HAS_MUTEX_TIMEOUTS to the list of ACE macros. + +Fri Jan 26 11:18:15 2001 Douglas C. Schmidt + + * ace/Log_Msg.cpp (dump): Fixed some unintentional tabs. Thanks + to Mike Curtis for reporting this! + + * ace/SOCK_Dgram_Mcast.cpp (open): Modified the call to + ACE_SOCK_Dgram::shared_open() to just pass in this->mcast_ + rather than making a local copy that just contained the port + number. Thanks to Keith Nicewarner for + reporting this. + + * tests/Makefile.bor (TESTS): Added Message_Queue_Test_Ex.cpp. + +Fri Jan 26 13:37:30 2001 Luther J Baker + + * ace/OS.h: + + If using PACE, ACE_stat typedefs to pace_stat_s. + +Fri Jan 26 11:18:15 2001 Douglas C. Schmidt + + * tests/Message_Queue_Test_Ex.cpp: Fixed some ASYS_* macros with + ACE_* stuff. Thanks to Darrell for reporting this. + + * ace/Message_Queue_T.h, + * ace/Message_Queue_T.i, + * ace/Message_Queue_T.cpp: + Added the ACE_Message_Queue_Ex, which provides a message queue + abstraction whose type is templatized. Thanks to Michael Vitalo + for contributing this. + + * tests/run_tests.lst: + * tests/run_test.lst: + * tests: Added support for the new Message_Queue_Test_Ex.cpp file. + Thanks to Michael Vitalo for contributing + this. + +Fri Jan 26 09:33:20 2001 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Add TAO/tests/Object_Loader to the list + + * include/makeinclude/rules.lib.GNU: + Allow both .cpp and .c files in the LSRC macro. This should + let the PACE guys use the real name for their files, and + generate proper dependencies. + +Fri Jan 26 02:16:42 2001 Darrell Brunsch + + * tests/OS_Test.cpp: + + Changed a use of struct stat to ACE_stat. + +Thu Jan 25 19:16:48 2001 Ossama Othman + + * ace/config-linux.h: + + Only define ACE_LACKS_NETDB_REENTRANT_FUNCTIONS and + ACE_LACKS_THREAD_STACK_SIZE for glibc < 2.1. glibc 2.1+ has the + netdb reentrant functions (albeit with funky signatures), and it + has pthread_attr_setstacksize(). + + * ace/OS.h: + + Removed trailing whitespace. + + * ace/OS.i (getprotobyname_r, getprotobynumber_r, gethostbyaddr_r, + gethostbyname_r, getservbyname_r): + + Added glibc-specific calls to these functions. This allows us + to avoid grabbing a lock! Thanks to Ben Strong + for providing the patch. + + * THANKS: + + Added Ben Strong to list of contributors. + +Thu Jan 25 20:10:24 2001 Irfan Pyarali + + * include/makeinclude/platform_irix6.x_sgic++.GNU: + * include/makeinclude/platform_irix5.3_sgic++.GNU: + + Removed -rpath "$(ACE_ROOT)/ace" from LDFLAGS. + + * ace/Message_Queue_T.{h,i}: Moved code from .i to .h to work + around a compiler bug. The Sun Forte 6 (CC 5.1) compiler is + only happy if this is in the header file. + + * ace/Message_Block_T.cpp: Fixed template parameter name mismatch + between declaration and definition. + + Thanks to J. Russell Noseworthy + for contributing the above patches. + +Thu Jan 25 10:50:35 2001 Steve Huston + + * ace/Reactor.h: Add comments to schedule_wakeup/cancel_wakeup that + they don't cause an immediate re-examination of the masks like + register_handler does. Thanks to Oscar Rodriquez + for prompting this clarification. + + * ace/WFMO_Reactor.cpp (ACE_WFMO_Reactor_Notify::handle_signal): + The call to ACE_Message_Queue::dequeue_head may change the + ACE_Time_Value passed to it, so don't override ACE_Time_Value::zero's + const-ness, lest ACE_Time_Value::zero take on some strange new value. + Thanks to Edan Ayal for this fix. + +Thu Jan 25 05:34:58 2001 Douglas C. Schmidt + + * ace/Connector.cpp (connector): Added an ACE_const_cast() to + get rid of the const for the accessor method! + + * ace/Acceptor.cpp (acceptor): Added an ACE_const_cast() to + get rid of the const for the accessor method! + + * ace/Log_Msg.{h,cpp}, + * ace/Trace.{h,cpp}: The Log_Msg -I flag now uses the current + ACE_Trace nesting level rather than always using 1. Thanks to + Mike Curtis for providing this. + +Wed Jan 24 19:43:24 2001 Nanbor Wang + + * ace/OS.i (lstat,stat): Separated win32 cases out. + +Wed Jan 24 18:15:59 2001 Nanbor Wang + + * ace/OS.i (fstat): Oops, wrong version of this function was + modified. + +Wed Jan 24 14:44:12 2001 Nanbor Wang + + * ace/FILE.cpp: + * ace/Filecache.cpp: + * ace/Filecache.h: + * ace/OS.h: + * ace/OS.i: + * ace/OS.cpp: Changed the signature of , , and + to use ACE_stat instead of "struct stat". Also changed + to use _fstat and _stat on win32 instead of and + directly. Also replaced several use of "struct stat" to + ACE_stat. Thanks to Mike Anderson for + reporting this. [Bug 762] + +Wed Jan 24 16:13:10 2001 Douglas C. Schmidt + + * ace/OS_Dirent.cpp: Fixed a bug in the readdir_emulation() method. + Thanks to Yung Trinh for reporting this. + + * ace/Connector.{h,cpp}: Added a new connector() accessor to + return the underlying ACE_PEER_CONNECTOR. Thanks to Pedro + Brandao for suggesting this. + +Wed Jan 24 10:17:03 2001 Carlos O'Ryan + + * ace/Makefile: + Add dependencies (again). They were lost is a previous commit. + + * */Makefile: + Update dependencies (yet another time). + +Wed Jan 24 09:41:54 2001 Carlos O'Ryan + + * ace/Configuration.cpp: + Fixed warning under gcc. Also made the for() loop more + ACE-like, not better, but at least consistent. + +Wed Jan 24 08:56:16 2001 Carlos O'Ryan + + * ace/OS.h: + The changed to document the ACE_SVC_* macros were accidentally + lost, fixed. + + * ace/Service_Config.cpp: + New debug message when processing an explicit directive, useful + to find out when and why TAO invokes + ACE_Service_Config::process_directive() directly. + As with all other debug messages in this file it only shows up + if ACE::debug() returns non-zero. + +Wed Jan 24 01:44:47 2001 Douglas C. Schmidt + + * ace/Configuration.cpp (expand_path): Fixed a bug with assignment to + temp in the loop. Thanks to Jonathan Reis for reporting this! + +Tue Jan 23 17:02:42 2001 Darrell Brunsch + + * bin/msvc_auto_compile.pl: + + Removed PACE until we figure out how to handle it in the + DLL builds. + +Tue Jan 23 16:50:35 2001 Darrell Brunsch + + * tests/Dirent_Test.dsp: + + Updated to make consistent with the rest of the dsps in + this directory in regards to output directories and non-use + of ACE_ROOT. + + * tests/Dirent_Test.cpp: + + Updated wide character compatibility and removed the use + of ACE_ROOT (now looks at ../tests", which should give + the same results). + + * tests/run_test.lst: + + Added the Dirent_Test to the list + + * tests/version_tests/Dirent_Test.dsp: (added) + * tests/version_tests/Refcounted_Auto_Ptr_Test.dsp: (added) + * tests/version_tests/version_tests.dsw: + + Used the create_vt_dsps.pl script to update this directory. + +Tue Jan 23 18:03:26 2001 Jeff Parsons + + * ace/CDR_Stream.cpp: + + Added patches to read_8 and write_8 sent in by + Keith Nicewarner to deal + with the ARM byte format for doubles + +Tue Jan 23 15:06:18 2001 Darrell Brunsch + + * ace/Configuration.cpp: + * ace/OS_Dirent.cpp: + + Updated wide character compatibility. + + * ace/ace_dll.dsp: + + Removed unneeded verbose library option. + +Tue Jan 23 10:54:14 2001 Jeff Parsons + + * ace/config-doxygen.h: + * bin/autoconf_compile: + + Removed all occurrences of 'smart_proxies' and 'interface_repo'. + These are no longer necessary. + + * include/makeinclude/ace_flags.bor: + + Added necessary variables to go along with the Borland + makefiles for the new libraries tao/Domain and + tao/IFR_Client. + +Mon Jan 22 17:01:17 2001 Darrell Brunsch + + * ace/OS_String.cpp: + * ace/OS_String.inl: + * ace/ace_wchar.inl: + * ace/config-qnx-rtp.h: + + ACE_HAS_WCHAR fixes. Support is really bad on QNX RTP + so we just end up emulating most everything. As far as + I could tell, there isn't even a way to convert between + the two types of strings. + + * ace/OS_Dirent.cpp: + + Rewrote a paragraph to remove the use of "/*" in a larger + /*...*/ comment, since gcc complains about it. + + * tests/Message_Queue_Test.cpp: + + Backed out some changes to it on Jan 21, since it had + problems and I couldn't find any ChangeLog entry for the + changes (mistakenly checked in?). + +Mon Jan 22 13:51:11 2001 Phil Mesnier + + * ace/OS_Dirent.cpp (opendir_emulation): Added code to make the + emmulation work properly on Win32. Thanks to Edwin Wrench + for finding this. + + * tests/Dirent_Test.cpp: + tests/Makefile: + tests/run_tests.bat: + tests/run_tests.lst: Added test to verify correctness of above + fix. This test attempts to scan $ACE_ROOT/tests and will fail if + the number of entries is 0 or 1. + +Mon Jan 22 10:21:20 2001 Douglas C. Schmidt + + * ace/Map_Manager.h: Clarify that find() returns 0, rather than + saying "a non-negative number". Thanks to Albert Wijna + for clarifying this. + +Mon Jan 22 15:38:12 2001 Johnny Willemsen + + * ace/Containers_T.h: + ace/Containers_T.cpp: + Added operator* to the ACE_Ordered_Multiset_Iterator class + + * tests/Ordmultiset_test.cpp + Expanded test for the new operator* of the ACE_Ordered_Multiset_ + Iterator class + +Sat Jan 20 14:53:07 2001 Douglas C. Schmidt + + * ace/Configuration.{h,cpp}: Fixed some problems with const char * + that was busting the compilation. Thanks to Carlos for pointing + this out. + + * ace/Configuration.{h,cpp}: Added several fixes for + mistakes with memory management and other minor problems. + Thanks to Jonathan Reis for contributing + these fixes! + +Sat Jan 20 10:49:05 2001 Carlos O'Ryan + + * docs/ACE-guidelines.html: + Update the guidelines to point people to the Doxygen + documentation, instead of the now abandoned OSE tools. + +Sat Jan 20 10:21:08 2001 Carlos O'Ryan + + * ace/OS.cpp: + Another pass fixing problems with ACE_BEGINTHREADEX() under + Win32, this time Win32 is working fine. + +Sat Jan 20 10:20:50 2001 Douglas C. Schmidt + + * doc/tutorials: Integrated the new Service Configurator tutorial + into the main tutorials page. + +Fri Jan 19 16:57:43 2001 Douglas C. Schmidt + + * ace/Svc_Handler.h: Updated the comments to explain why + operator new is overloaded. Thanks to Kirill Kuolechov + for reporting this. + +Fri Jan 19 15:39:43 2001 Carlos O'Ryan + + * ace/OS.cpp: + QNX/RTP has the same problem that LynxOS has, after fork() is + invoked trying to destroy the preallocated objects in + ACE_OS_Object_Manager fails. + Factor out this variation in a new macro: + ACE_HAS_BROKEN_PREALLOCATED_OBJECTS_AFTER_FORK + + * ace/config-lynxos.h: + * ace/config-qnx-rtp.h: + Define the new macro for the two relevant platforms. + + * ace/README: + Document the macro. + +Fri Jan 19 15:08:37 2001 Carlos O'Ryan + + * ace/OS.cpp: + I disabled too much in the commit at 10:50am... Now it seems to + be OK. + + * ace/Makefile: + Remove extra -v + +Fri Jan 19 13:16:49 2001 Priyanka Gontla + + * include/makeinclude/platform_hpux_aCC.GNU: + Added new options to the CCFLAGS so that the known future errors + arising because of HPUX are suppressed. + +Fri Jan 19 13:01:13 2001 Priyanka Gontla + + * ace/SSL/Makefile: + Put a check for defining ACE_SHLIBS to get it compiled on HPUX. + + * ace/RMCast/Makefile: + * ace/Makefile : + Updated dependencies + + * ace/config-all.h + Fix a build problem on HP-UX 11.00 with aCC A.03.25. The macro + used to determine the use of the std namespace changed from + RWSTD_NO_NAMESPACE to _NAMESPACE_STD. NOTE: I did preserve the + check for RWSTD_NO_NAMESPACE with aCC versions less than A.03.25. + + Thanks to Chad Elliott for making this fix. + +Fri Jan 19 11:22:42 2001 Priyanka Gontla + + * docs/tutorials/022/client_handler.cpp : + * docs/tutorials/022/client_hander.h : + * docs/tutorials/022/Acceptor_Service.cpp : + * docs/tutorials/022/Acceptor_Service.h : + * docs/tutorials/022/server.cpp : + * docs/tutorials/022/Makefile : + + * docs/tutorials/022/client/Makefile: + * docs/tutorials/022/client/client.cpp: + + * docs/tutorials/022/page01.html: + * docs/tutorials/022/page02.html: + * docs/tutorials/022/page03.html: + * docs/tutorials/022/page04.html: + * docs/tutorials/022/page05.html: + + Developed a new tutorial for the ACE_Service_Configurator. + Based on the ACE tutorial 005. + +Fri Jan 19 10:50:11 2001 Carlos O'Ryan + + * ace/OS.cpp: + Use the Green Hills specific tricks *only* if we are compiling + under Green Hills, and only for the platform where they make + sense (in this case Win32). + +Thu Jan 18 23:21:53 2001 Carlos O'Ryan + + * ace/OS.h: + Document the infamous ACE_STATIC_SVC macros. + +Thu Jan 18 23:50:35 2001 Rick Stille + + The Green Hills(GHS) Native x86 compiler does not provide support + for 64-bit integers, structural exceptions, or DLL's. Thus the + keywords __int64, __try, __dllimport, etc., are not defined. In + addition, exceptions do not work in a multi-threaded environment. + The following changes were made to address these shortcomings. + + * ace/Basic_Types.h: Because the GHS compiler has both + ACE_LACKS_LONGLONG_T and ACE_WIN32 defined, the + ACE_LACKS_LONGLONG_T macro must appear first, so the order of + these two macros has been reversed in the defines of both + ACE_UINT64_LITERAL(n) and ACE_UINT64_DBLCAST_ADAPTER(n). + + * ace/config-win32-common.h: The typedef of ACE_UINT64 as an + unsigned __int64 and the define of ACE_HAS_LLSEEK are blocked + out for ghs. + + * ace/config-win32-ghs.h: This is the new configuration file for + Green Hills/Win32. + + * ace/Configuration.cpp(resolve_key): The "return 0" at the end of + this function has been blocked out for ghs to eliminate an + "unreachable code" warning. + + * ace/Event_Handler_T.h(handle_signal): The type of the "signum" + parameter has been changed to "int" so that it matches the type + in the Event_Handler class. + + * ace/Event_Handler_T.i(handle_signal): The type of the "signum" + parameter has been changed to "int" so that it matches the type + in the Event_Handler class. + + * ace/High_Res_Timer.cpp(global_scale_factor): The Native x86 + compiler defines "QuadPart" in the LARGE_INTEGER union as a + "double," so it cannot be used in the calculation of + "global_scale_factor." Instead, for GHS, the low and high parts + of the LARGE_INTEGER structure are copied into an ACE_UINT64 + structure (which is actually an ACE_U_LongLong) and the + ACE_U_LongLong operators are used. The code segment if + (ACE_High_Res_Timer::global_scale_factor_ == 1u) // Failed to + retrieve CPU speed from system, so calculate it. + ACE_High_Res_Timer::calibrate (); is unreachable hen ACE_WIN32 + is defined, so it has been blocked out for Win32 platforms to + silence the Green Hills "unreachable code" warning. + + * ace/High_Res_Timer.i(hrtime_to_tv): There is no assignment + operator that converts an ACE_U_LongLong to a "long," so an + intermediate ACE_U_LongLong variable "usec64" has been + introduced. The type of "msec" and "usec" have been changed from + "long" to ACE_UINT32, as have been the casts. The conversion is + then carried out by using the lower part of "usec64." + + * ace/Local_Name_Space_T.cpp(remap): The "DWORD" cast has been + removed from both EXCEPTION_CONTINUE_SEARCH and + EXCEPTION_CONTINUE_EXECUTION beause the function return value is + of type "int" and the cast was causing an "integer conversion + resulted in a change of sign" warning. + + * ace/Memory_Pool.cpp(map): Removed references to the "mem_offset" + variable because it was not being used and the compiler was + issuing a warning to this effect. + + * ace/NT_Service.cpp(startup): This function was returning "-1" + when svc_sc_handle() failed, and returning a "0" when + QueryServiceConfig() failed. Since the return type of this + function is "DWORD," the compiler was issuing an "integer + conversion resulted in a change of sign" warning for the "-1" + value. Upon investigation of this issue, it was discovered that + "0" is a valid service type value, and thus the use of "0" to + indicate failure is a bug. The return value for svc_sc_handle() + failure has been changed to "MAXDWORD - 1," which is the DWORD + equivalent of "-2," and the return value for failure of + QueryServiceConfig() has been changed to "MAXDWORD," which is + the DWORD equivalent of -1. + + * ace/OS.cpp: The compiler cannot handle a 64-bit literal, so the + literal passed to FILETIME_to_timval_skew has been created as + ACE_U_LongLong(0xd53e8000, 0x19db1de). + + * ace/OS.cpp(set): The Native x86 compiler defines "QuadPart" in + the LARGE_INTEGER union as a "double," so it cannot be used in + the calculations of tv_sec and tv_usec. Instead, the low and + high parts of the LARGE_INTEGER structure are copied into an + ACE_U_LongLong structure, and the ACE_U_LongLong operators are + used. + + * ace/OS.cpp(operator FILETIME): The Native x86 compiler defines + "QuadPart" in the LARGE_INTEGER union as a "double," so it + cannot be used in the calculation of file_time. Instead, tv_sec + and tv_usec are converted iinto ACE_U_LongLong structures and + the ACE_U_LongLong operators are used. + + * ace/OS.cpp(uname): The Native x86 compiler names both the union + and the structure within the SYSTEM_INFO structure, so the + "wProcessorArchitecture" member within the "s" structure, which + is itself within the "u" union, must be accessed by using + ".u.s." + + * ace/OS.cpp(ACE_BEGINTHREADEX): Green Hills compiler gets + confused when __stdcall is imbedded in parameter list, so the + type ACE_WIN32THRFUNC_T has been defined, then used within the + parameter list of ::_beginthreadex(). + + * ace/OS.h(ACE_Time_Value): The Native x86 compiler defines + "DWORDLONG" as type "double," so FILETIME_to_timval_skew is + instead defined as type ACE_U_LongLong. + + * ace/OS.h: The pragmas "#pragma warning( disable : ... " are + unknown to the Native x86 compiler, so it produces warnings to + this effect. These pragma have been blocked out for ghs. + + * ace/OS.h: Because the Native x86 compiler does not support the + __int64 keyword, the typedef of ACE_hrtime_t has been changed + from "unsigned __int64" to "ACE_UINT64" for ghs. Because no + usage of "ACE_QWORD" could be foound, its definition has been + blocked out for ghs. + + * ace/OS.i(gettimeofday):The code at the end of this function is + not reachable if either ACE_HAS_WINCE or ACE_WIN32 is + defined. In order to quiet the Green Hills compiler warnings + about unreachable code, this code has been blocked out for + ACE_HAS_WINCE and ACE_WIN32. With this code blocked out, + however, the variables "tv" and "result" are not used, and the + compiler warns about about variables defined, but never used. In + order to quiet these warnings, the definitions of these two + variables have been blocked out for ACE_HAS_WINCE and ACE_WIN32. + + * ace/OS.i(gethrtime): The ACE_gethrtime() function is not meant + to be used by a Win32 platform, but because both "ghs" and + "ACE_HAS_PENTIUM" are defined for the Native x86 platform, a + call to ACE_gethrtime() was included in the code. This problem + has been solved by adding "&& !defined(ACE_WIN32)" to the two + "... defined (ghs) && defined (ACE_HAS_PENTIUM)" statements + which block out references to ACE_gethrtime(). + + The Native x86 compiler defines "QuadPart" in the LARGE_INTEGER + union as a "double," so it cannot be used as the return + value. Instead, because the return type is "ACE_hrtime_t," which + is type "ACE_UINT64," the low and high parts of the + LARGE_INTEGER structure are copied into an ACE_UINT64, which is + then returned. + + * ace/Process_Manager.cpp(wait): The "result >= WAIT_OBJECT_0" + test within the ACE_ASSERT statement causes the Native x86 + compiler to produce a pointless comparison of unsigned + integer with zero warning because "result" is of type + "DWORD," which is defined by the Native x86 compiler as type + "unsigned int." This test has been blocked out for ghs. + + * ace/Profile_Timer.cpp(elapsed_time): Because the "__int64" + keyword is not defined by the Native x86 compiler, it cannot be + used to cast the value of "delta_t" in the calculation of + "real_time." But "delta_t" is of type "ACE_hrtime_t," and + ACE_hrtime_t is typedefed as ACE_U_LongLong, so the division + operator defined for in the ACE_U_LongLong class can be used + directly with a divisor of type "double." Thus the "__int64" + cast has been removed for ghs. + + * ace/Sock_Connect.cpp(get_reg_value): This function is used + within the function get_ip_interfaces() function only when + either ACE_HAS_WINSOCK2 is not defined or when ACE_HAS_WINSOCK2 + is defined as "0." Because ACE_HAS_WINSOCK2 is defined on the + Native x86 platform, the compiler was issuing a defined, but + never used warning. This warning has been eliminated by + blocking out the definition of get_reg_value() when + ACE_HAS_WINSOCK2 is defined as a value other than "0." + + * ace/Stats.cpp(accumulate): The comparison "rhs.samples_count () + == 0" was producing a warning because rhs.samples_count() + returns an ACE_UINT32, but is being compared to the signed + literal "0." The "0" has been changed to "0u." + + * ace/WFMO_Reactor.cpp(ok_to_wait): The comparison of the "switch" + statement parameter "result" to "DWORD" values in the case + statements elicited an "integer conversion resulted in a change + of sign" warning from the compiler, so the type of "result" has + been changed to "DWORD." + + * ace/WFMO_Reactor.cpp(dispatch): The comparison of the "switch" + statement parameter "wait_status" to "DWORD" values in the case + statements elicited an "integer conversion resulted in a change + of sign" warning from the compiler, so the type of "wait_status" + has been cast to "DWORD." + + * ace/WFMO_Reactor.cpp(dispatch_handles): The "wait_status >= + WAIT_OBJECT_0" comparison was producing a pointless + comparison of unsigned integer with zero warning because + "wait_status" is an unsigned integer. This was a known problem + with Borland, so the blocking out of this comparison has been + extende to ghs. + + * tests/Basic_Types_Test.cpp(main): Because both the + ACE_LACKS_LONGLONG_T and ACE_WIN32 macros are defined, the + ACE_LACKS_LONGLONG_T macro must appear first, so the order of + these two macros has been reversed. + + * tests/Cached_Accept_Conn_Test.cpp: The template class + ACE_Node must be explicitly instantiated for this + platform. + + * tests/Cached_Conn_Test.cpp: The template class + ACE_Node must be explicitly instantiated for this + platform. + + * tests/Handle_Set_Test.cpp: The template class + ACE_Node must be explicitly instantiated for this + platform. This was already being done for the _CRAYMPP, so it + has been extended to ghs. + + * tests/Malloc_Test.cpp: Because the Native x86 compiler does not + support structural exceptions, it cannot support the "remap" + function, so the blocking of the ACE_TEST_REMAP_ON_FAULT macro + definition, which was already in effect for linux, has been + extended to ghs. + +Thu Jan 18 12:49:53 2001 Douglas C. Schmidt + + * ace/SUN_Proactor.cpp: Added support for cancel_aiocb(). Thanks + to Alexander Libman for contributing + this. + + * tests/Makefile.bor (TESTS): Added Config_Test so that this test + runs on Borland. + + * tests: Moved the config_test stuff (which tests ACE_Configuration* + classes) from the examples/Configuration/ directory to the + tests/ directory and made it a one-button test. + + * ace/Future.h: Changed the order of the thread mutex and the condition + variable to avoid confusion in the future regarding "order of + initialization." Thanks to Edan Ayal for + reporting this. + + * examples/Configuration: Updated this example to include the new + test for the ACE_Configuration_Heap methods. Thanks to Michael + Searles for contributing this. + +Thu Jan 18 18:55:37 2001 Carlos O'Ryan + + * bin/nightlybuilds/builds.lst: + Add the RedHat_Implicit_Templates build. + +Thu Jan 18 18:48:33 2001 Carlos O'Ryan + + * ace/Log_Msg.cpp: + Declare sys_nerr as const int under QNX/RTP (and NTO). + + * ace/Pipe.cpp: + Use pipe() under QNX because it lacks both socketpair() and it + cannot open a socket to itself. + + * ace/config-qnx-rtp.h: + Remove ACE_NTRACE hacks. + + * include/makeinclude/platform_qnx_rtp_gcc.GNU: + Do not enable the repo by default it breaks QNX. + Instead of removing the definition of DCFLAGS by default we + set debug=0 all the time, that seems like a cleaner way to + disable debugging. + +Thu Jan 18 09:34:35 2001 Carlos O'Ryan + + * include/makeinclude/platform_linux.GNU: + The -fno-implicit-templates flag was hardcoded, but this gave + the users no recourse to remove should they want to use + -fimplicit-templates. + The macro IMPLICIT_TEMPLATES_FLAG is used to set the flag now, + unless the user provides a value for the macro the makefiles + continue to work as they did before this change, i.e., adding + -fno-implicit-templates to CCFLAGS. + Notice that this functionality was available in + platform_linux_lxpthreads.GNU, but dissapeared when everything + was rolled into platform_linux.GNU. + +Thu Jan 18 06:26:42 2001 Douglas C. Schmidt + + * ace/Configuration.{h,cpp}: Added functionality to read in all + values in a config file without requiring a type prefix on each + value, skips whitespace and allows comments on the end of lines. + Thanks to Michael Searles for contributing + this. + +Wed Jan 17 11:48:42 2001 Darrell Brunsch + + * bin/msvc_auto_compile.pl: + + Added PACE to the list of ACE directories so PACE is + compiled in full auto builds. + +Wed Jan 17 10:00:42 2001 Darrell Brunsch + + * ace/Handle_Ops.cpp: (handle_timed_open) + + Removed the use of ACE_NONBLOCK on Win32. This use + didn't function as expected, since ACE_NONBLOCK would + be interpreted as O_WRONLY. Also, the CreateFile API + call doesn't support any nonblocking option, so + redefining ACE_NONBLOCK would not seem to fix anything. + + Thanks to Matthias Wittig for reporting + a problem report form about this. + + * bin/PerlACE/Process_Unix.pm: + + Fixed up the use of the RUNNING state, so wait and kill + work properly. Also made Kill automatically use waitpid + (since I can't think of any time we'd kill without wanting to + clean up the resources). + +Wed Jan 17 07:44:29 2001 Douglas C. Schmidt + + * apps/Gateway/Gateway/Concrete_Connection_Handlers.cpp (send): Set errno to + EWOULDBLOCK if n < len so that the caller will initiate a + handle_output()-driven reply. Thanks to Klaus H. Wolf + for reporting this. + + * ace/Log_Msg.h (ACE_Log_Msg): Clarified that only the current message + is stored in TSS. Thanks to Pierre Oberson + for pointing out the need for this + clarification. + + * examples/Log_Msg/test_log_msg.cpp (main): Fixed the example by + adding ACE_Log_Msg::PROCESS so that the messages do not print + out (which is the correct behavior for this test). Thanks to + Mike Curtis for reporting this. + * apps/Gateway/Gateway/Concrete_Connection_Handlers.cpp (send): Set errno to + EWOULDBLOCK if n < len so that the caller will initiate a + handle_output()-driven reply. Thanks to Klaus H. Wolf + for reporting this. + + * ace/Log_Msg.h (ACE_Log_Msg): Clarified that only the current message + is stored in TSS. Thanks to Pierre Oberson + for pointing out the need for this + clarification. + + * examples/Log_Msg/test_log_msg.cpp (main): Fixed the example by + adding ACE_Log_Msg::PROCESS so that the messages do not print + out (which is the correct behavior for this test). Thanks to + Mike Curtis for reporting this. + +Tue Jan 16 15:28:22 2001 Carlos O'Ryan + + * netsvcs/lib/Server_Logging_Handler_T.cpp: + The formal parameter names must match in the .h and .cpp file + to make Sun/CC 6.0 happy. + +Tue Jan 16 11:25:32 2001 Douglas C. Schmidt + + * ace/Log_Msg.cpp (log): Convert strerror() text string to a + TCHAR so that this call will work correctly with Unicode. + Thanks to Matthias Wittig for reporting + this. + +Tue Jan 16 09:58:20 2001 Darrell Brunsch + + * ace/ace_wchar.inl: + + Updated ACE_Ascii_To_Wide and ACE_Wide_To_Ascii to + preserve null pointers. + + Thanks to Matthias Wittig for + reporting this and suggesting a fix. + +Tue Jan 16 10:47:33 2001 Frank Hunleth + + * ace/config-win32-common.h: + * ace/config-win32-msvc.h: + Moved #define ACE_HAS_LLSEEK from config-win32-common.h to + config-win32-msvc.h, since _lseeki64 isn't defined for + Borland. Also implicitly removed ACE_HAS_LLSEEK for the + VisualAge compiler - it might have worked (didn't know, + couldn't test) + +Mon Jan 15 15:22:42 2001 Douglas C. Schmidt + + * ace/Asynch_IO.h: Changed the ACE_Asynch_Read_Stream::read() + method's "bytes_to_read" parameter to "num_bytes_to_read" to + workaround a weird problem with some compilers. Thanks to Chris + Kohlhoff for this fix. + + * examples/Service_Configurator/IPC-tests/README: Updated this + file so that it's now up-to-date and also explains how to + reconfigure a server if SIGHUP isn't supported. Thanks to Mike + Curtis for reporting this. + +Mon Jan 15 12:13:48 2001 Darrell Brunsch + + * bin/nightlybuilds/builds.lst: [Added] + * bin/nightlybuilds/scoreboard_update.pl: [Added] + + Moved the scoreboard stuff from the internal cvs repos + to this one, so it is easier for people to edit the + list. + +Mon Jan 15 12:29:53 2001 Douglas C. Schmidt + + * ace/config-macosx.h: Fixed typo so that ACE_HAS_CLOCK_GETTIME + is spelled correctly. Thanks to Mike Curtis + for reporting this. + + * ace/Strategies_T.cpp (open): Replace the ACE_OS::strncpy() functions + with ACE_OS::strcpy() functions. Thanks to Ron Hashimshony + for reporting this. + +Mon Jan 15 09:44:16 2001 Carlos O'Ryan + + * ace/RMCast/Makefile: + Fixed Makefile to link the ACE library, otherwise we get + undefined symbols under certain platforms (AIX). Thanks to + Scott Bolin for pointing this out. + +Mon Jan 15 09:11:12 2001 Douglas C. Schmidt + + * ace/config-win32-common.h: Added support for ACE_HAS_LLSEEK, though + this should probably be changed to be compiled only on some + Win32 platforms. + + * ace/OS.{h,i}: Added support for ACE_OS::llseek() on Win32. Thanks + to Nick Lin for contributing this. + + * ace/Log_Priority.h: Clarified the fact that we only use 12 bits + for ACE_Log_Priority. Thus, the remaining bits are available + for application use. Thanks to David Singer + for motivating this comment. + +Sun Jan 14 16:53:11 2001 Douglas C. Schmidt + + * ace/Configuration.{h,cpp}: Fixed a memory leak that occurred + with transient heaps. Also added a list of current limitations + to import/export routine. Thanks to Chris Hafey + for contributing this stuff. + +Fri Jan 12 20:46:05 2001 Angelo Corsaro + + * include/makeinclude/platform_qnx_rtp_gcc.GNU: + Platform macros needed to run ACE on QNX RTP. + + * ace/config-qnx-rtp.h: + Configuration file needed to run ACE on QNX RTP. + + * ACE-INSTALL.html: + Added documentation on how to install ACE on QNX RTP, + and the issue with the current version of QNX RTP. + + +Fri Jan 12 14:59:15 2001 Carlos O'Ryan + + * tests/RMCast/RMCast_Fragment_Test.cpp: + Fixed conversion from 64-bit ulong to 32-bit ulong under some + VxWorks compilers where 64 bits are emulated. Thanks to Edwin + McKay for pointing this out. + +Fri Jan 12 07:18:16 2001 Douglas C. Schmidt + + * ace/OS.{h,i}: Moved some "using std::*" definitions from OS.i to + OS.h. Thanks to Mike Curtis for reporting + this and to Christopher Kohlhoff for + suggesting the fix. + +Fri Jan 12 15:34:28 2001 Steve Huston + + * ace/Managed_Object.h: Added to the unimplemented operator= + declaration. Fixes compile w/ IBM C/C++ 3.6 on AIX. + +Fri Jan 12 07:59:19 2001 Joe Hoffert + + * Makefile: + Add the PACE directory back into the build. PACE should + not generate any build failures for the platforms + currently supported. + +Wed Jan 10 23:30:21 2001 Douglas C. Schmidt + + * ace/FILE_Addr.cpp (set): Replace (sizeof this->filename_) + with (sizeof this->filename_ / sizeof (ACE_TCHAR)). Thanks to + Matthias Wittig for reporting this. + +Tue Jan 9 07:27:19 2001 Douglas C. Schmidt + + * ace/Containers_T.h: Clarified that the ACE_Ordered_Multiset class + allows duplicates. Thanks to Albert Wijna + for clarifying this. + +Sat Jan 6 10:20:55 2001 Douglas C. Schmidt + + * ace/File_Lock.{h,inl}: Made the get_handle() method const. + Thanks to Johnny Willemsen for + reporting this. + + * ace/TP_Reactor.h: + * ace/Get_Opt.h: + * ace/Caching_Utility_T.h: Added "ACE_UNIMPLEMENTED_FUNC" macros + for all copy constructors and assignment operators. Thanks to + Johnny Willemsen for reporting this. + +Fri Jan 5 01:09:28 2001 Douglas C. Schmidt + + * performance-tests/Misc/context_switch_time.cpp (get_options), + * performance-tests/Misc/preempt.cpp (open), + * examples/Reactor/Misc/pingpong.cpp (run_svc), + * examples/Reactor/Misc/notification.cpp (main), + * examples/IPC_SAP/FIFO_SAP/FIFO-test.cpp (main), + * examples/Shared_Malloc/Options.cpp (print_usage_and_die), + * examples/Service_Configurator/IPC-tests/client/: Updated all + these programs so that don't abort via %a, but instead call + ACE_OS::exit(). Thanks to Mike Curtis for + suggesting this. + + * apps/Gateway/Peer/Options.cpp (print_usage_and_die): Make sure to + actually *die* when we're done with this function! Thanks to + Mike Curtis for suggesting this. + +Thu Jan 4 00:10:26 2001 Douglas C. Schmidt + + * ace/Select_Reactor_T.i: The cancel_timer() method should return the + number of events canceled, rather than 0 or 1. Thanks to Joe + Guan for reporting this and providing + the fix. + + * ace/Synch.h: Added an acquire (ACE_Time_Value &) method to ACE_Null_Mutex + so that this will work properly when + ACE_HAS_OPTIMIZED_MESSAGE_QUEUE is enabled. Thanks to Yuriy + Zaporozhets for reporting this. + +Wed Jan 3 23:00:52 2001 Douglas C. Schmidt + + * ace/Lib_Find.cpp (ldfind), + * ace/Makefile.bor (CFLAGS), + * include/makeinclude/outputdir.bor (OBJDIR), + * ace/config-win32-msvc.h: Added support for the new ACE_LD_DECORATOR_STR + macro which is used to work around the fact that Borland + attaches a so-called "decorator suffix" to all library names. + Thanks to Chris Kohlhoff for reporting + this. + + * ace/Lib_Find.h: Fixed a typo where ACE_LIB_FIND_H was misspelled. + Thanks to Chris Kohlhoff for reporting + this. + + * ace/SOCK_Stream.i, + ace/MEM_Stream.i: Updated the calls to ACE_OS::shutdown() to use + the new macros described below! + + * ace/OS.h: Added better support for the ACE_OS::shutdown() second + parmeter in the form of new macros ACE_SHUTDOWN_READ, + ACE_SHUTDOWN_WRITE, and ACE_SHUTDOWN_BOTH. Thanks to Mike + Curtis for suggesting this. + + * ace/SOCK_Stream.h: Clarified the role of the timeout parameters in + the various methods. Thanks to Allen Broadman + for motivating this. + +Thu Jan 11 17:24:30 2001 Carlos O'Ryan + + * Makefile: + Add new target 'Core' to quickly compile the basic ACE+TAO + components. + +Thu Jan 11 09:56:43 2001 Frank + + * ACE version 5.1.12 released. + +Thu Jan 11 05:38:24 2001 Balachandran Natarajan + + * ace/TP_Reactor.cpp: Reverted the change that was made for SPRO + 5.1 compilers. The change that was reverted is this + + Thu Jan 4 17:14:33 2001 Balachandran Natarajan + + + * ace/Handle_Set.cpp: Changed the macro + + ACE_DIV_BY_WORDSIZE(x) ((x) >> (ACE_Handle_Set::WORDSIZE)) to + + ACE_DIV_BY_WORDSIZE(x) ((x) >> ((int) + ACE_Handle_Set::WORDSIZE)). This seems to be a better + fix. Thanks to David Allen for suggesting + this. + +Tue Jan 9 09:53:53 2001 Carlos O'Ryan + + * tests/MEM_Stream_Test.cpp: + Run the event loop for at most 1 minute. After that we know + that something is amiss with the client threads, and we should + exit. This fixes the deadlock problems we were seeing in the + nightly builds. + The real cause of the problem is something broken with the way + MEM_Addr objects compare local addresses, sometimes they fail to + compare equal. In the test this results in failed connections. + +Mon Jan 8 18:53:39 2001 Sharath R. Cholleti + + * examples/Map_Manager/test_hash_map_manager.cpp: + Removed template instantiations for + ACE_Guard, + ACE_Read_Guard, and + ACE_Write_Guard to fix linker + errors under Lynx_I386. + +Mon Jan 8 10:44:57 2001 Darrell Brunsch + + * ace/OS.h: + + Added some more protection (!VXWORKS) around the cuserid + inline statement since VXWORKS doesn't have cuserid. + +Mon Jan 08 10:04:55 2001 Nanbor Wang + + * ace/Thread_Manager.cpp (terminate): Reordered some statements so + we get the thread descriptor's log_msg pointer before we delete + the thread descriptor. Thanks to Tomer Amiaz + for reporting this. + +Sun Jan 7 16:51:42 2001 Darrell Brunsch + + * ace/ace_dll.dsp: + + Removed the PACE libraries from linking. We are going to come + up with a different solution for pace. + + * docs/run_test.txt: + + Changed the instructions a little to use PerlACE::LocalFile + for the server's IOR file. + +Sun Jan 7 08:59:09 2001 Balachandran Natarajan + + * tests/DLL_Test.cpp: Added a message in a ACE_ERROR statement. + * tests/run_test.lst: Disabled MEM_Stream_Test in Linux. + +Thu Jan 4 17:14:33 2001 Balachandran Natarajan + + * ace/TP_Reactor.cpp (dispatch_i): Eliminate a portion of the + code from SunCC5 builds. This piece of code was trying to set + things right when it sees all the masks clear and the + greater than zero. This seems to be creating problems with SunCC + 5 builds alone. Commenting out this piece for SunCC5 helps. This + should also be a work around for the bug #750 in bugzilla. + +Thu Jan 04 17:07:48 2001 Luther Baker + + * ace/ace_dll.dsp + + Consistent typography (win32 specific backslash). + +Thu Jan 4 15:34:14 2001 Luther J Baker + + * ace/ace_dll.dsp + + Added PACE library to the ACE DLL project file. + (also changed the library search path) + +Wed Jan 3 17:24:11 2001 Darrell Brunsch + + * ace/OS.h: + + Mistakenly changed the ace_timezone () method to use + timezone () instead of timezone. Changed back. + +Wed Jan 3 16:00:22 2001 Darrell Brunsch + + * ace/ACE.cpp + + Changed the types of day_of_week_name and month_name in + ACE::timestamp to ACE_TCHAR (since that was the data + being assigned to it and the type that is later expected). + This fixed errors in Win32's Unicode build. + +Wed Jan 3 15:44:31 2001 Darrell Brunsch + + * ace/OS.i: + + Removed ACE_TIMEZONE since we found another workaround for + platforms that define timezone () as a macro. + + * ace/OS.h: + * ace/OS.i: + + Moved much of the code from ACE_OS::timezone and + ACE_OS::difftime into ace_timezone and ace_difftime. Since + some platforms don't have timezone or difftime, we needed + to do something here so those methods aren't used. Instead + of figuring out what larger #if !... should be, it is easier + (and less error prone) to just move the code here. + +Wed Jan 3 13:10:39 2001 Darrell Brunsch + + * apps/JAWS/server/HTTP_Helpers.cpp: + + Added ACE_MT around an ACE_Guard to remove an unused var + warning in the single threaded builds. + +Wed Jan 3 12:56:13 2001 Darrell Brunsch + + * ace/Timer_Wheel_T.cpp: + * ace/Timer_Wheel_T.h: + + Doug noticed some redundant code in expire while making his + change on the 21st. I checked and he was right, it looks like + I was moving around the loop termination conditionals and left + some around. Removed them and also added some better comments + and made it more doxygen complient. + +Wed Jan 3 12:06:20 2001 Darrell Brunsch + + * tests/Refcounted_Auto_Ptr_Test.dsw: + + Projects are listed in tests.dsw, so this is unneeded. + + * tests/tests.dsw: + + Added Refcounted_Auto_Ptr_Test.dsp. + +Tue Jan 3 10:30:42 2001 Darrell Brunsch + + * docs/msvc_notes.txt: + + Added this file explaining some issues or explanations on how + ACE/TAO are set up for use with MSVC. Mainly I'm thinking of + this as a place to put random stuff about ACE and TAO on MSVC. + + Plus I think we need more nifty doxygen documents. ;-) A tip of + the hat goes to Letha Etzkorn and + Shivakumar Patil for bringing up + questions that led to the dump of info to this file. + + * ACE-INSTALL.html: + + Added a reference to msvc_notes.txt. + +Wed Jan 3 09:15:24 2001 Jeff Parsons + + * ace/ACE.cpp: + + Replaced these lines + + SYSTEMTIME local; + ::GetLocalTime (&local); + + in the timestamp() method. + They were removed the last time this file was + modified, breaking the Win32 builds. + +Wed Jan 03 05:49:11 2001 Carlos O'Ryan + + * ace/OS.h: + The ace_cuserid() helper cannot be defined in Win32 + +Wed Jan 03 05:42:20 2001 Carlos O'Ryan + + * ace/OS.h: + Remove broken #include of unistd.h, it was a debug statement + that sneaked through the commit. + +Tue Jan 2 18:33:03 2001 Carlos O'Ryan + + * ace/OS.h: + * ace/OS.i: + Workaround platforms that define timezone, difftime or cuserid + as macros. Instead of just dropping support for the ACE_OS::XXX + method we create an inline ace_XXX() function, that uses the + original macro expansion, then we #undef the offending macro, + and use the inline function in the code. + + * ace/config-tru64.h: + Enable cuserid() again, with the new workaround it should work + without problems. + This fix should remove some of the redness in the TRU64_CXX + builds. + +Tue Jan 2 14:22:21 2001 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Add the DII version of Param_Test to the nightly builds. + +Tue Jan 2 10:25:30 2001 Balachandran Natarajan + + * ace/Cached_Connect_Strategy_T.cpp: Added the patch provided by + Edan Ayal for + ACE_Bounded_Cached_Connect_Strategy::find_or_create_svc_handler_i (). + +Tue Jan 2 09:03:18 2001 Douglas C. Schmidt + + * ace/Asynch_Acceptor.{h,cpp}, + ace/POSIX_Async_IO.{h,cpp}, + ace/POSIX_Proactor.{h,cpp}, + ace/SUN_Proactor.{h,cpp}: Added enhanced versions of ACE_POSIX_Proactor + and ACE_SUN_Proactor to fix various problems uncovered and fixed by + Alexander Libman . + + * ace/ACE.{h,cpp}: Fixed the timestamp() method so that it works + identically on Win32 and on UNIX. Also provided a new option + that'll make it possible to return a pointer to the beginning of + the time portion of "date and time." Thanks to Michael Searles + for contributing these fixes. + +Mon Jan 01 16:35:00 2001 Michael Kircher + + * tests/Reader_Writer_Test.cpp: Added a #ifdef to check for native + RW lock support. If the platform supports native RW locks we should + not report a failure on upgrading, because native RW locks do not + support upgrading, only our RW lock emulation does this. + Thanks to Frank and Doug for pointing out this failure. diff --git a/ACE/ChangeLogs/ChangeLog-01b b/ACE/ChangeLogs/ChangeLog-01b new file mode 100644 index 00000000000..504c875d72b --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-01b @@ -0,0 +1,8242 @@ +Mon Dec 31 09:32:59 2001 Douglas C. Schmidt + + * ace/Hash_Map_Manager_T.h: Added ACE_UNIMPLEMENTED_FUNC() for the + assignment operator and copy constructor of class + ACE_Hash_Map_Manager_Ex. Thanks to Johnny Willemsen for + reporting this. + +Mon Dec 31 16:33:17 2001 Johnny Willemsen + + * ace/OS.{h,i}: + Added ACE_OS::freopen. This method reassigns an existing + stream with a new stream. This is not supported on WinCE + +Mon Dec 31 15:09:12 2001 Johnny Willemsen + + * apps/drwho/BM_Server.cpp: + * apps/drwho/Options.cpp: + * apps/drwho/PM_Client.cpp: + * apps/drwho/PMC_Ruser.cpp: + * apps/drwho/PMC_Ruser.cpp: + * apps/gperf/src/Options.cpp: + * docs/tutorials/010/message_queue.cpp: + * docs/tutorials/011/message_queue.cpp: + * docs/tutorials/012/message_queue.cpp: + * docs/tutorials/013/message_queue.cpp: + * examples/IOStream/server/iostream_server.cpp: + * examples/Reactor/WFMO_Reactor/test_multithreading.cpp: + * netsvcs/clients/Logger/direct_logging.cpp: + * tests/Pipe_Test.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.i: + Changed occurences of atoi with ACE_OS::atoi because the normal + atoi gives problems when compiling with ACE_USES_WCHAR defined + +Mon Dec 31 14:40:12 2001 Johnny Willemsen + + * ace/Get_Opt.cpp: + Replaced ACE_TEXT by ACE_LIB_TEXT because ACE_LIB_TEXT must be used + within the ACE library instead of ACE_TEXT + +Sun Dec 30 16:54:18 2001 Douglas C. Schmidt + + * ace/Parse_Node.cpp: Now that ACE::strnew() checks for a NULL + parameter, we can remove the checks in the ACE code. + + * ace/ACE.i (strnew): Check to see if the pointer passed to + ACE::strnew() is non-NULL. Thanks to Don Hinton for reporting + this. + +Sat Dec 29 18:36:13 2001 Douglas C. Schmidt + + * ace/OS.i (putenv): Fixed a typo. Thanks to Venkita for + reporting this. + + * ace/OS.i (getenv): Return ACE_NOTSUP_RETURN(0) if we're + compiling on a platform that lacks getenv(), e.g., WinCE. + Thanks to Venkita for reporting this. + +Sat Dec 29 16:14:41 2001 Balachandran Natarajan + + * ace/OS.h: + * ace/Default_Constants.h: Moved some constants from this file to + OS.h as it needed includes in OS.h. Need to take a better look + before any other dissection can be performed. + +Sat Dec 29 12:08:40 2001 Balachandran Natarajan + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Added new header files into the project. + +Sat Dec 29 11:57:40 2001 Balachandran Natarajan + + * ace/Default_Constants.h: A new header file that houses some of + the constants that are used widely by ACE and applications based + on ACE. The motivation for this one is the same as that of + creating Global_Macros.h. + + * ace/Global_Macros.h: Moved some constant definitions from this + file to Default_Constants.h. + + * ace/OS.h: Moved some constant definitions out of this + file. There are some more that needs moving and will be done + over a period of time hopefully. + +Sat Dec 29 06:31:50 2001 Douglas C. Schmidt + + * tests/MEM_Stream_Test.cpp (test_concurrent): Added an + ACE_UNUSED_ARG(connect_client) to silence complaints on certain + compilers about unused arguments. + +Sat Dec 29 12:54:45 2001 Johnny Willemsen + + * examples/IPC_SAP/SOCK_SAP/C-inclient.cpp: + * examples/IPC_SAP/SOCK_SAP/C-inserver.cpp: + * examples/Mem_Map/file-reverse/file-reverse.cpp: + * examples/Reactor/Multicast/Log_Wrapper.cpp: + * examples/Reactor/Multicast/server.cpp: + Made these files compiling when ACE_USES_WCHAR is set + + * examples/Map_Manager/test_hash_map_manager.cpp: + Made this file partly compiling when ACE_USES_WCHAR is set + +Sat Dec 29 10:42:12 2001 Johnny Willemsen + + * tests/SSL/Makefile.bor: + Added SSL_LIB to lib files + +Sat Dec 29 02:55:24 2001 Venkita Subramonian + + * ace/OS.i: + Fixed problem with idl compiler segmentation fault. + replaced + # if !defined ACE_LACKS_ENV + with + # if defined ACE_LACKS_ENV + in ACE_OS::strenvdup. + +Fri Dec 28 16:01:58 2001 Balachandran Natarajan + + * ace/Global_Macros.h: Fixed a fuzz error. + +Fri Dec 28 15:15:42 2002 Steve Huston + + * ace/Select_Reactor_T.h: Improved Doxygenization of some comments. + +Fri Dec 28 13:41:23 2001 Douglas C. Schmidt + + * ace/OS.{h,i,cpp} (putenv,getenv,strenvdup,getenvstrings): + * ace/Get_Opt.cpp (ACE_Get_Opt): Removed the #ifndef (ACE_LACKS_ENV) + from Get_Opt.cpp and move this into OS.i where it belongs! + Thanks to Venkita and Don Hinton for reporting this. + +Fri Dec 28 19:56:12 2001 Johnny Willemsen + + * performance-tests/Misc/test_naming.cpp: + * performance-tests/Server_Concurrency/Latency_Stats.h: + * performance-tests/Server_Concurrency/Leader_Follower/leader_follower.cpp: + * performance-tests/Server_Concurrency/Queue_Based_Workers/workers.cpp: + * performance-tests/TCP/tcp_test.cpp: + * performance-tests/UDP/udp_test.cpp: + Made these files compiling when ACE_USES_WCHAR is set + + * Makefile.bor: + Added the performance-tests directory to this BCB makefile. All files + in this directory now compile when ACE_USES_WCHAR is set + +Fri Dec 28 10:45:33 2001 Steve Huston + + * tests/SSL/Thread_Pool_Reactor_SSL_Test.cpp: Make the string + arguments to ACE_SSL_Context char * - don't use any ACE_* + macros. Fixes build problems on Borland Unicode builds. Thanks + to Johnny Willemsen for this fix. + +Fri Dec 28 06:31:46 2001 Venkita Subramonian + + * ace/Get_Opt.cpp: Changed #ifndef check to ACE_LACKS_ENV + instead of ACE_LACKS_GETENV. + +Fri Dec 28 05:20:29 2001 Douglas C. Schmidt + + * ace/Get_Opt.cpp (ACE_Get_Opt): Protect the call to ACE_OS::getenv() + with a #ifndef (ACE_LACKS_GETENV). Thanks to Bala and Venkita + for reporting this! + +Fri Dec 28 10:52:12 2001 Johnny Willemsen + + * tests/SSL/Makefile.bor: + Added ACE_SSL_LIB to fix linker errors in BCB build + +Thu Dec 27 22:14:30 2001 Balachandran Natarajan + + * ace/Global_Macros.h: A new file that will house the macros used + by ACE and applications. Have moved a very few macros from OS.h + to this file. The real need for this was the need to include + OS.h even if one wants to use a simple macro like + ACE_UNIMPLEMENTED_FUNC or something as simple as that. Over a + period of time we need to move more macros into this file so + that applications can use this instead of OS.h. It would be nice + to split this file into pieces having macros for every specific + functionality. That was getting too tedious and error + prone. Thought that this could be a first step to move further. + + * ace/OS.h: Moved a few macros into Global_Macros.h file. Also + included the file in OS.h The need for inclusion comes from the + fact that there are dependencies that exist between the macros + moved and the stuff that exist in OS.h. + +Thu Dec 27 20:43:43 2001 Nanbor Wang + + * ace/Configuration_Import_Export.cpp: The .ini reader didn't + handle equal signs in values even if they are quoted. Changed + the strrchr in import_config() to strchr. Thanks to Glen + Coakley for reporting and submitting + the patch. + +Thu Dec 27 15:47:22 2001 Steve Huston + + * examples/OS/Process/imore.cpp: Fixed typo in optind -> opt_ind() + conversion. + +Thu Dec 27 09:52:56 2001 Douglas C. Schmidt + + * tests/Get_Opt_Test.cpp: Added ACE_TEXT macros to the various + strings so they will compile on Unicode builds. Thanks to + Venkita for noticing this! + +Thu Dec 27 14:53:49 2001 Steve Huston + + * ace/SSL/SSL_SOCK_Acceptor.(h cpp): + * ace/SSL/SSL_SOCK_Connector.(h cpp): Removed #include "ace/Reactor.h" + from the .h files and added #include "ace/Handle_Set.h" to the + .cpp files. Reactor is no longer needed for the class, but + ACE_Handle_Set is used in the implementation. + + * ace/SSL/Makefile: Removed Reactor*.* from dependencies. + +Thu Dec 27 12:56:31 2001 Steve Huston + + * ace/SSL/SSL_SOCK_Stream.i (close): Reverted this change: + Fri Dec 7 10:22:25 2001 Ossama Othman + The reactor is not used, so no workaround for it is needed. + If the ACE_SSL_SOCK_Stream is closed, the handle is invalidated. + +Thu Dec 27 11:39:48 2001 Steve Huston + + * tests/SSL/Thread_Pool_Reactor_SSL_Test.cpp: Changed ACE_TEXT to + ACE_TEXT_ALWAYS_CHAR for the file names passed to ACE_SSL_Context. + The underlying SSL calls want a char *, so it appears pointless + to change ACE_SSL_Context to accept wide chars. + +Thu Dec 27 09:38:24 2001 Balachandran Natarajan + + * examples/Reactor/Proactor/test_timeout.cpp: + * examples/Reactor/Proactor/test_multiple_loops.cpp: + * examples/Reactor/Proactor/post_completions.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.h: + + Added #includes to prevent compilation errors on Win32. Thanks + to Venkita for pointing this out. + +Thu Dec 27 06:41:24 2001 Douglas C. Schmidt + + * tests/Proactor_Timer_Test.cpp: Added #ifndefs to guard against + trying to compile this test on platforms that don't support the + Proactor! Thanks to Venkita for noticing this. + +Wed Dec 26 15:51:28 2001 Venkita Subramonian + + * ace/Get_Opt.h: + ace/Get_Opt.cpp: + Fixed compiler warnings. Changed order of member variable + initialization. + +Wed Dec 26 11:18:31 2001 Douglas C. Schmidt + + * ace/Get_Opt.cpp (permute): Add ACE_TEXT() around the + "--" string to make things work properly on Unicode builds. + Thanks to Johnny Willemsen and Don Hinton for contributing this + fix! + +Wed Dec 26 09:07:45 2001 Douglas C. Schmidt + + * tests/*.cpp: Replaced all uses of getopt.optarg with + getopt.opt_arg() and all uses of getopt.optind with + getopt.opt_ind(). + + * ace/Logging_Strategy.cpp + ace/Naming_Context.cpp + ace/Service_Config.cpp + ace/Service_Manager.cpp + performance-tests/Misc/basic_perf.cpp + performance-tests/Misc/childbirth_time.cpp + performance-tests/Misc/context_switch_time.cpp + performance-tests/Misc/preempt.cpp + performance-tests/Misc/test_guard.cpp + performance-tests/RPC/client.cpp + performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.cpp + performance-tests/Server_Concurrency/Leader_Follower/leader_follower.cpp + performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.cpp + performance-tests/Server_Concurrency/Queue_Based_Workers/workers.cpp + performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.cpp + performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.cpp + performance-tests/TCP/tcp_test.cpp + performance-tests/UDP/udp_test.cpp + apps/Gateway/ + gperf/Options.cpp + drwho/Options.cpp + netsvcs/clients/Tokens/collection/collection.cpp + netsvcs/clients/Tokens/collection/rw_locks.cpp + netsvcs/clients/Tokens/deadlock/deadlock_detection_test.cpp + netsvcs/clients/Tokens/manual/manual.cpp + netsvcs/clients/Tokens/mutex/test_mutex.cpp + netsvcs/clients/Tokens/rw_lock/rw_locks.cpp + netsvcs/lib/Client_Logging_Handler.cpp + netsvcs/lib/Name_Handler.cpp + netsvcs/lib/TS_Server_Handler.cpp + netsvcs/lib/Server_Logging_Handler_T.cpp + netsvcs/lib/TS_Clerk_Handler.cpp + netsvcs/lib/Token_Handler.cpp + examples/ASX/Event_Server/Event_Server/Options.cpp + examples/ASX/Event_Server/Transceiver/transceiver.cpp + examples/ASX/UPIPE_Event_Server/Options.cpp + examples/ASX/UPIPE_Event_Server/Peer_Router.cpp + examples/Connection/blocking/SPIPE-connector.cpp + examples/Connection/blocking/SPIPE-acceptor.cpp + examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp + examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp + examples/IPC_SAP/SSL_SAP/SSL-client.cpp + examples/IPC_SAP/SSL_SAP/SSL-client-simple.cpp + examples/IPC_SAP/SSL_SAP/SSL-server-fancy.cpp + examples/Logger/Acceptor-server/server_loggerd.cpp + examples/Logger/simple-server/server_loggerd.cpp + examples/Mem_Map/IO-tests/test_io.cpp + examples/Misc/test_get_opt.cpp + examples/NT_Service/main.cpp + examples/OS/Process/process.cpp + examples/QOS/Change_Receiver_FlowSpec/QoS_Util.cpp + examples/QOS/Change_Sender_TSpec/QoS_Util.cpp + examples/QOS/Simple/QoS_Util.cpp + examples/Reactor/Multicast/client.cpp + examples/Reactor/Ntalker/ntalker.cpp + examples/Reactor/Proactor/simple_test_proactor.cpp + examples/Reactor/Proactor/test_cancel.cpp + examples/Reactor/Proactor/test_proactor.cpp + examples/Reactor/Proactor/test_proactor2.cpp + examples/Reactor/Proactor/test_proactor3.cpp + examples/Reactor/Proactor/test_udp_proactor.cpp + examples/Reactor/WFMO_Reactor/test_multithreading.cpp + examples/Reactor/WFMO_Reactor/test_talker.cpp + examples/Service_Configurator/IPC-tests/client/broadcast_client_test.cpp + examples/Service_Configurator/IPC-tests/client/remote_service_directory_test.cpp + examples/Service_Configurator/IPC-tests/client/local_dgram_client_test.cpp + examples/Service_Configurator/IPC-tests/client/local_fifo_client_test.cpp + examples/Service_Configurator/IPC-tests/client/local_pipe_client_test.cpp + examples/Service_Configurator/IPC-tests/client/local_spipe_client_test.cpp + examples/Service_Configurator/IPC-tests/client/local_stream_client_test.cpp + examples/Service_Configurator/IPC-tests/client/remote_dgram_client_test.cpp + examples/Service_Configurator/IPC-tests/client/remote_thr_stream_client_test.cpp + examples/Service_Configurator/IPC-tests/client/remote_stream_client_test.cpp + examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.i + examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.i + examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.i + examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.i + examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.i + examples/Service_Configurator/IPC-tests/server/Handle_L_SPIPE.i + examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.i + examples/Service_Configurator/IPC-tests/server/Handle_R_Dgram.i + examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.i + examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp + examples/Service_Configurator/IPC-tests/server/Handle_Timeout.i + examples/Shared_Malloc/Options.cpp + examples/Shared_Malloc/test_position_independent_malloc.cpp + examples/Synch/proc_sema.cpp + examples/Threads/process_manager.cpp + examples/Threads/reader_writer.cpp + examples/Threads/recursive_mutex.cpp + examples/Web_Crawler/Options.cpp: Replaced all uses of getopt.optarg + with getopt.opt_arg(). + + * examples/Misc/test_get_opt.cpp (main): + * examples/OS/Process/imore.cpp (parse_args): + * examples/NT_Service/main.cpp (parse_args): Replaced all uses + of getopt.optind with getopt.opt_ind (). + + * ace/Get_Opt.h: Made the optind, optarg, opterr, argv_, and argc_ + data members public rather than private to avoid breaking + existing code. Also removed the new optind and optarg macros to + avoid breaking existing code that used those names as + identifiers! + +Wed Dec 26 06:19:32 2001 Douglas C. Schmidt + + * ace/Proactor.cpp: + * ace/Proactor.h: The #include "ace/Proactor.i" must come inside + of the #ifdefs that determine if the Proactor will be available + on a particular platform. + + * examples/Reactor/Misc/test_reactors.cpp: Removed a duplicate + ACE_Atomic_Op_Ex instantiation. + +Tue Dec 25 19:43:34 2001 Balachandran Natarajan + + * Updated dependencies that were left behind from the last one. + +Tue Dec 25 09:30:14 2001 Douglas C. Schmidt + + * tests/Makefile: + * tests/Makefile.bor: Added the new Proactor_Timer_Test. + + * tests/run_test.lst: Added the new Proactor_Timer_Test. + + * tests: Added the new Proactor_Timer_Test.cpp and + Proactor_Timer_Test.dsp to exercise the new high-resolution + support in the ACE_Proactor. Thanks to Miljenko Norsic for + contributing this. + + * ace/Proactor.cpp: Added support for high-resolution timers to + the proactor. Thanks to Miljenko Norsic for contributing this. + + * ace/OS.{h,i}: Changed the ACE_OS::event_timedwait() method to + allow callers to specify either relative or absolute time. + Thanks to Miljenko Norsic for + contributing this. + + * ace/Synch.{h,cpp}: Changed the timed wait() method on ACE_Event so + allow callers to specify either relative or absolute time. + Thanks to Miljenko Norsic for + contributing this. + +Tue Dec 25 12:55:56 2001 Carlos O'Ryan + + * Updated all dependencies. + +Tue Dec 25 09:30:14 2001 Douglas C. Schmidt + + * tests/Get_Opt_Test.cpp: Make the "test_args" parameter to + parse_args() a *const* ACE_TCHAR rather than just an ACE_TCHAR. + + * tests/Get_Opt_Test.cpp (main): Added an ACE_UNUSED_ARG(argv) and + replaced the name of the test so the log file stuff will work + properly. + + * ace/Get_Opt.{h,i}: Changed the return type of opt_ind() from + int to int& so that optind++ will work correctly! Thanks + to Don Hinton for this fix. + +Tue Dec 25 09:07:07 2001 Balachandran Natarajan + + * examples/Threads/tss2.cpp: + * examples/Threads/TSS_Task.h: + * examples/Threads/task_two.cpp: + * examples/Threads/reader_writer.cpp: + * examples/Threads/manual_event.cpp: + * examples/Threads/future2.cpp: + * examples/Threads/future1.cpp: + * examples/Reactors/Misc/teste_reactors.cpp: + * netsvcs/lib/Server_Logging_T.cpp: + * netsvcs/lib/Server_Logging.cpp: Added #include of + Atomic_Op.h. Added template instantiations for ACE_Atomic_Op_Ex + in places that was required. + + * netsvcs/lib/Makefile: + * netsvcs/servers/makefile: Updated dependencies. + +Mon Dec 25 01:05:43 2001 Balachandran Natarajan + + * ace/Atomic_Op.h: Added a #include to get it compiling on win32 + platforms. + +Mon Dec 25 00:18:43 2001 Balachandran Natarajan + + * Merry Christmas to the members of the doc_group and to all the + users the world over. + + * ace/ace_lib.dsp: + * ace/ace_dll.dsp: Added Atomic_Op.{h,cpp} to the project files. + +Mon Dec 24 23:52:43 2001 Balachandran Natarajan + + * ace/Synch_T.cpp: + * ace/Synch_T.h: Removed ACE_Atomic_Op to a new file. + + * ace/Atomic_Op.h: + * ace/Atomic_Op.i: + * ace/Atomic_Op.cpp: The class ACE_Atomic_Op is in this file now. + + * ace/Functor.h: + * ace/Functor.i: Added template specializations for some base + types like ACE_UINT16. Thanks to Joe Hoffert for giving the + patches. + + * ace/RMCast/RMCast_Reassembly.cpp: Removed a template + instantation for ACE_Equal_To. + + * tests/Atomic_Op_Test.cpp: + * tests/Auto_IncDec_Test.cpp: + * tests/Cache_Map_Manager_Test.cpp: + * tests/Future_Set_Test.cpp: + * tests/Future_Test.cpp: + * tests/Hash_Map_Bucket_Iterator_Test.cpp: + * tests/MEM_Stream_Test.cpp: + * tests/Map_Manager_Test.cpp: + * tests/Message_Queue_Notifications_Test.cpp: + * tests/Notify_Performance_Test.cpp: + * tests/Reactors_Test.cpp: + * tests/Reader_Writer_Test.cpp: + * tests/Upgradable_RW_Test.cpp: Added #include of Atomic_Op.h in + all the above files. + +Mon Dec 24 20:12:05 2001 Balachandran Natarajan + + * ace/Synch_T.h: + * ace/Synch_T.cpp: Changed a copy constructor in ACE_Atomic_Op to + take ACE_Atomic_Op as an argument instead of + ACE_Atomic_Op_Ex. This should fix compile errors in g++. + + * ace/Atomic_Op.i: Made a cosmetic change. + + +Mon Dec 24 08:08:40 2001 Douglas C. Schmidt + + * ace/Atomic_Op.i: Make sure to initialize the mutex_ reference in the + ACE_Atomic_Op_Ex copy constructor. + + * ace/OS.cpp (pwrite): The lseek() call must use SEEK_CUR rather + than SEEK_SET. Thanks to Duane Binder + for reporting this. This fixes bugid + 1095. + + * ace/Proactor.i (run_event_loop): Refactored the code to + use the new ACE_Proactor::check_reconfiguration() static method, + just like the Reactor! + + * ace/Proactor.h: Added the check_reconfiguration() static method + to ACE_Proactor, a la the Reactor! + + * tests/Thread_Pool_Reactor_Resume_Test.cpp, + * tests/SSL/Thread_Pool_Reactor_SSL_Test.cpp, + * tests/Thread_Pool_Reactor_Test.cpp: Changed the signature of the + reactor_event_hook() method to conform to the minor + modifications outlined below. + + * ace/Reactor.h: Changed the signature of + ACE_Reactor::check_reconfiguration() to reflect the following + change. + + * ace/Reactor.h: Changed the REACTOR_EVENT_HOOK typedef to take a pointer + to the ACE_Reactor. Thanks to Alex Libman for suggesting this. + + * performance-tests/Synch-Benchmarks/Synch_Lib/Benchmark_Base.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.cpp: + * examples/Threads/tss2.cpp: + * examples/Reactor/Misc/test_reactors.cpp: + * examples/Reactor/Proactor/post_completions.cpp: + * examples/Reactor/Proactor/test_timeout.cpp: + * examples/Threads/manual_event.cpp: + * examples/Threads/future1.cpp: + * examples/Threads/future2.cpp: + * examples/Threads/reader_writer.cpp: + * examples/Threads/task_two.cpp: + * tests/Atomic_Op_Test.cpp: + * tests/Auto_IncDec_Test.cpp: + * tests/Future_Set_Test.cpp: + * tests/Future_Test.cpp: + * tests/MEM_Stream_Test.cpp: + * tests/Message_Queue_Notifications_Test.cpp: + * tests/Notify_Performance_Test.cpp: + * tests/Reactors_Test.cpp: + * tests/Upgradable_RW_Test.cpp: + * tests/Reader_Writer_Test.cpp: + Added explicit template instantiation for ACE_Atomic_Op_Ex<>. + + * ace/Malloc_Allocator.cpp: Added explicit template instantiation + for ACE_Atomic_Op_Ex. + + * ace/Atomic_Op.i, + * ace/Synch_T.{h,cpp}: Factored out some of the structure/logic + from ACE_Atomic_Op into a new base class called + ACE_Atomic_Op_Ex. ACE_Atomic_Op_Ex uses extra parameter - + reference to ACE_LOCK to allow several ACE_Atomic_Op_Ex share + the same lock. ACE_Atomic_Op is derived from ACE_Atomic_Op_Ex + and its interface is the same as it was. It has only + constructors implementation and operators =. All other methods + are inherited from ACE_Atomic_Op_Ex. Templates instantiation + for ACE_Atomic_Op_Ex should be added to all files that have + templates instantiation for ACE_Atomic_Op. Thanks to Alex + Libman for contributing this. + + * ace/Service_Config.cpp (close_singletons): Add support to close + the Proactor singleton, just like the Reactor singleton. Thanks + to Alex Libman for contributing this. + + * ace/WIN32_Proactor.cpp: Make sure to remove all the pending + results from the I/O completion port queue when we close down to + avoid memory leaks. Thanks to Alex Libman + for contribuging this. + + * ace/Proactor.{h,i,cpp}: Added Alex Libman's + enhancements that make the ACE_Proactor behave more like the + ACE_Reactor with respect to singletons etc. In particular: + + 1. For each static ACE_Proactor method XXX_event_loop there is + the non-static proactor_XXX_event_loop method. + 2. There is a new method proactor_post_wakeup_completions which + is called from static post_wakeup_completions. + 3. The end_event_loop_ and event_loop_thread_count_ are now + instance members, not globals! + 4. The proactor instance has its own mutex to protect work with + end_event_loop_ and event_loop_thread_count_. + 5. Method ACE_Proactor::instance() now has a second parameter + delete_proactor (default value 0 means don't delete). It + returns the pointer to the previous global instance of + Proactor. The caller now is responsible for deletion of this + previous instance. + 6. Method ACE_Proactor::cleanup() is removed since the behavior + of singleton is simular to Reactor singleton. + 7. Methods ACE_Proactor::proactor_run_event_loop (....) + have now an extra parameter: (PROACTOR_EVENT_HOOK = 0), + where the PROACTOR event hook is defined as + typedef int (*PROACTOR_EVENT_HOOK)(ACE_Proactor *); + + * ace/Logging_Strategy.cpp + * ace/Naming_Context.cpp + * ace/Service_Manager.cpp: Removed the explicit template instantiations + for ACE_Array_Base<> to avoid problems with multiply defined + symbols. + + * ace/Service_Config.cpp: Added explicit template instantiations + for template class ACE_Array. + + * docs/tutorials/014/page02.html, + * docs/tutorials/014/page03.html, + * docs/tutorials/014/page04.html, + * docs/tutorials/014/page05.html, + * docs/tutorials/014/stream.cpp, + * docs/tutorials/014/Task.{h,cpp}: Fixed the tutorial so that it + uses the correct synchronization mechanism for the message + blocks. Thanks to Ulrich Voigt for + reporting this. + + * ace/Log_Msg.cpp: Moved the call to ACE_Log_Msg_Manager::close() + to first in the ACE_Log_Msg::close() method to avoid memory + leaks. Fixes BugId 1103. Thanks to Ahmed Riza + for reporting this. + +Sun Dec 23 23:02:17 2001 Carlos O'Ryan + + * examples/QOS/Diffserv/Diffserv.dsw: + * examples/QOS/Diffserv/diffserv_test.dsp: + * examples/QOS/Diffserv/server.dsp: + * examples/Reactor/FIFO/FIFO.dsw: + * examples/Reactor/FIFO/client.dsp: + * examples/Reactor/FIFO/server.dsp: + * examples/Shared_Memory/Shared_Memory.dsw: + * examples/Shared_Memory/test_MM.dsp: + * examples/Shared_Memory/test_SV.dsp: + Add more missing project files and workspaces. + +Mon Dec 24 00:48:34 2001 Nanbor Wang + + * tests/tests.dsw: + * tests/Get_Opt_Test.dsp: Added this new project file. + +Sun Dec 23 12:25:55 2001 Don Hinton + + * ace/Logging_Strategy.cpp + * ace/Naming_Context.cpp + * ace/Service_Config.cpp + * ace/Service_Manager.cpp + * ace/Get_Opt{h,i,cpp}: + + Added long option support to ACE_Get_Opt that closely minimics + getopt_long(3c) functionality as follows: made all member + variables private; added accessor functions and macros wrappers to + transparently provide backward compatibility; added new function, + long_option(), that can be used to add long options with/without + corresponding short options. + + * tests/Makefile + * tests/Makefile.bor + * tests/run_test.lst + * tests/Get_Opt_Test.cpp: + + Added a new one-button test for ACE_Get_Opt that tests new long option + support and demonstrates its use. + +Sat Dec 22 23:12:33 2001 Carlos O'Ryan + + * examples/Misc/Misc.dsw: + * examples/Misc/test_XtReactor1.dsp: + * examples/Misc/test_XtReactor2.dsp: + * examples/Misc/test_dump.dsp: + * examples/Misc/test_get_opt.dsp: + * examples/Misc/test_profile_timer.dsp: + * examples/Misc/test_read_buffer.dsp: + * examples/Misc/test_set.dsp: + * examples/Misc/test_sstring.dsp: + * examples/Misc/test_trace.dsp: + * examples/IPC_SAP/DEV_SAP/reader/reader.dsp: + * examples/IPC_SAP/DEV_SAP/reader/reader.dsw: + * examples/IPC_SAP/DEV_SAP/writer/writer.dsp: + * examples/IPC_SAP/DEV_SAP/writer/writer.dsw: + * examples/IPC_SAP/FIFO_SAP/FIFO-Msg-client.dsp: + * examples/IPC_SAP/FIFO_SAP/FIFO-Msg-server.dsp: + * examples/IPC_SAP/FIFO_SAP/FIFO-client.dsp: + * examples/IPC_SAP/FIFO_SAP/FIFO-server.dsp: + * examples/IPC_SAP/FIFO_SAP/FIFO-test.dsp: + * examples/IPC_SAP/FIFO_SAP/FIFO_SAP.dsw: + * examples/IPC_SAP/SPIPE_SAP/NPClient.dsp: + * examples/IPC_SAP/SPIPE_SAP/NPServer.dsp: + * examples/IPC_SAP/SPIPE_SAP/SPIPE_SAP.dsw: + * examples/IPC_SAP/SPIPE_SAP/client.dsp: + * examples/IPC_SAP/SPIPE_SAP/consumer_msg.dsp: + * examples/IPC_SAP/SPIPE_SAP/consumer_read.dsp: + * examples/IPC_SAP/SPIPE_SAP/producer_msg.dsp: + * examples/IPC_SAP/SPIPE_SAP/producer_read.dsp: + * examples/IPC_SAP/SPIPE_SAP/server.dsp: + * examples/IPC_SAP/TLI_SAP/CPP-ATM-client.dsp: + * examples/IPC_SAP/TLI_SAP/CPP-ATM-server.dsp: + * examples/IPC_SAP/TLI_SAP/CPP-client.dsp: + * examples/IPC_SAP/TLI_SAP/CPP-server.dsp: + * examples/IPC_SAP/TLI_SAP/TLI_SAP.dsw: + * examples/IPC_SAP/TLI_SAP/db-client.dsp: + * examples/IPC_SAP/TLI_SAP/db-server.dsp: + * examples/IPC_SAP/TLI_SAP/ftp-client.dsp: + * examples/IPC_SAP/TLI_SAP/ftp-server.dsp: + * examples/IPC_SAP/UPIPE_SAP/UPIPE_SAP.dsw: + * examples/IPC_SAP/UPIPE_SAP/ex1.dsp: + * examples/IPC_SAP/UPIPE_SAP/ex2.dsp: + * examples/IPC_SAP/UPIPE_SAP/ex3.dsp: + Add yet more missing project files. + + * examples/IPC_SAP/SPIPE_SAP/NPClient.cpp: + * examples/IPC_SAP/SPIPE_SAP/NPServer.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-test.cpp: + Fixed minor syntax errors for Win32 builds. + +Sat Dec 22 11:27:11 2001 Carlos O'Ryan + + * bin/auto_compile: + Add missing -i flags for make_pretty.pl. + +Sat Dec 22 11:24:53 2001 Carlos O'Ryan + + * examples/Service_Configurator/IPC-tests/client/client.dsw: + * examples/Service_Configurator/IPC-tests/client/broadcast_client_test.dsp: + * examples/Service_Configurator/IPC-tests/client/local_dgram_client_test.dsp: + * examples/Service_Configurator/IPC-tests/client/local_fifo_client_test.dsp: + * examples/Service_Configurator/IPC-tests/client/local_pipe_client_test.dsp: + * examples/Service_Configurator/IPC-tests/client/local_spipe_client_test.dsp: + * examples/Service_Configurator/IPC-tests/client/local_stream_client_test.dsp: + * examples/Service_Configurator/IPC-tests/client/remote_dgram_client_test.dsp: + * examples/Service_Configurator/IPC-tests/client/remote_service_directory_test.dsp: + * examples/Service_Configurator/IPC-tests/client/remote_stream_client_test.dsp: + * examples/Service_Configurator/IPC-tests/client/remote_thr_stream_client_test.dsp: + * examples/Service_Configurator/IPC-tests/server/server.dsw: + * examples/Service_Configurator/IPC-tests/server/Server.dsp: + * examples/Service_Configurator/IPC-tests/server/Server_static.dsp: + * examples/Service_Configurator/IPC-tests/server/server_test.dsp: + Add missing project files and workspaces. + + * examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_SPIPE.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.h: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Dgram.h: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.h: + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.h: + Add export directives for Win32 builds. + +Fri Dec 21 14:39:57 2001 Carlos O'Ryan + + * examples/Map_Manager/Map_Manager.dsw: + * examples/Map_Manager/test_hash_map_manager.dsp: + * examples/ASX/CCM_App/CCM_App.dsp: + * examples/ASX/CCM_App/CCM_App.dsw: + * examples/ASX/CCM_App/CCM_App_static.dsp: + * examples/ASX/CCM_App/SC_Client.dsp: + * examples/ASX/CCM_App/SC_Server.dsp: + * examples/Connection/misc/Connection_Handler.dsp: + * examples/Connection/misc/misc.dsw: + * examples/Connection/misc/test_upipe.dsp: + * examples/IOStream/client/client.dsw: + * examples/IOStream/client/iostream_client.dsp: + * examples/IOStream/server/server.dsw: + * examples/IOStream/server/iostream_server.dsp: + * examples/Smart_Pointers/Smart_Pointers.dsw: + * examples/Smart_Pointers/gadget_test.dsp: + * examples/Smart_Pointers/widget_test.dsp: + Add missing project files and workspaces. + +Fri Dec 21 16:22:39 2001 Steve Huston + + * ace/ace.icc: Corrected entries for String_Base_Const.(h cpp). + +Fri Dec 21 16:00:00 2001 Steve Huston + + * tests/SSL/Makefile.bor: Add $(SSL_CFLAGS) $(ACE_SSL_CFLAGS) to + CFLAGS to pick up the SSL include dirs, etc. + +Fri Dec 21 11:30:01 2001 Carlos O'Ryan + + * examples/Shared_Malloc/multiple_mallocs.dsp: + Add Malloc.cpp and Options.cpp to this project. Though not + strictly required for Win32 the files are used in Unix builds. + Having the .dsp and Makefile consistent is helpful for samwise. + +Fri Dec 21 14:14:51 2001 Steve Huston + + * ace/SSL/Makefile: Removed SSL_Accept_Handler.* and + SSL_Connect_Handler.* from the dependencies. + + * tests/Makefile: Only build SSL tests if ssl eq 1. + +Fri Dec 21 16:13:54 2001 Balachandran Natarajan + + * Makefile: Added Makefile.bor to the list of controlled files for + the release. + +Thu Dec 20 18:20:51 2001 Douglas C. Schmidt + + * ace/RB_Tree.cpp: Added checks in the RB_tree_predecessor() and + RB_tree_successor() methods to guard against indirections via a + NULL pointer. Thanks to Craig Ching for + reporting this fix. + +Thu Dec 20 18:05:32 2001 Steve Huston + + * examples/Shared_Malloc/test_persistence.cpp: Added a nothrow + variant of operator new to work with ACE_HAS_NEW_NOTHROW platforms. + +Thu Dec 20 15:04:52 2001 Steve Huston + + * ace/SSL/SSL_SOCK_Acceptor.h: Improved documentation. Changed + "protocol_family" argument defaults from PF_INET to PF_UNSPEC + to work correctly with IPv6 support. + +Thu Dec 20 13:53:48 2001 Steve Huston + + * ace/SSL/SSL_SOCK_Acceptor.cpp: + * ace/SSL/SSL_SOCK_Connector.cpp: Fixed compile errors on Win32. + +Thu Dec 20 13:37:42 2001 Steve Huston + + * ace/config-all.h: Restructured the section for + ACE_NEW_THROWS_EXCEPTIONS so that if ACE_HAS_NEW_NOTHROW is defined, + the new(nothrow) version is used rather than setting up a try/catch. + (Previously, this was only done for HP aC++). Also, check for + __BORLANDC__ and set up the ACE_bad_alloc exception value properly. + Thanks to Johnny Willemsen for reporting + this problem. + +Thu Dec 20 11:43:29 2001 Steve Huston + + * tests/SSL: New directory for ACE_SSL tests. + + * tests/SSL/dummy.pem: + * tests/SSL/key.pem: + * tests/SSL/Makefile: + * tests/SSL/Makefile.bor: Structure support for new tests. + + * tests/Thread_Pool_Reactor_SSL_Test.(h cpp): Tests the ACE_TP_Reactor + with ACE_SSL wrappers. Thank you to Robert Handl + for contributing this test. + + * tests/Makefile: + * tests/Makefile.bor: Add SSL to build dirs if building with SSL. + + * THANKS: Added Robert Handl to the Hall of Fame. + +Thu Dec 20 11:34:51 2001 Steve Huston + + * ace/SSL/SSL_SOCK_Acceptor.(h cpp i): + * ace/SSL/SSL_SOCK_Connector.(h cpp i): Series of changes: + - Does not use an ACE_Reactor any longer. Waiting for socket + I/O possibility is done using ACE::select. It's simpler and + doesn't suffer on Win32. + - The basic socket acceptance is referred to ACE_SOCK_Acceptor, + so the shared_accept_start and shared_accept_finish methods + are gone (in SSL_SOCK_Acceptor.*; no affect on Connector). + - The timed and non-timed versions of ssl_accept/connect are + now combined into one function. The timeout value passed to + the ACE_SSL_SOCK_Acceptor::accept() method is used, and it + correctly drives ACE::accept. + + * ace/SSL/SSL_Connector_Handler.(cpp h): + * ace/SSL/SSL_Accept_Handler.(cpp h): These are no longer needed. + since all of the accept handshaking activity is paced by + ACE::accept, not a reactor. + + * ace/SSL/Makefile: + * ace/SSL/Makefile.bor: + * ace/SSL/ACE_SSL.dsp: + * ace/SSL/ACE_SSL_LIB.dsp: Removed SSL_Accept_Handler and + SSL_Connect_Handler. + +Thu Dec 20 09:03:12 2001 Johnny Willemsen + + * Makefile.bor: + Only build ace and its tests because the rest is not fully + unicode compliant + +Wed Dec 19 22:28:00 2001 Ossama Othman + + * ace/WFMO_Reactor.cpp (upcall): Corrected syntax error. + +Wed Dec 19 21:54:29 2001 Steve Huston + + * ace/config-hpux-10.x-hpc++.h: Added ACE_HAS_NEW_NOTHROW when + exceptions are enabled. + +Wed Dec 19 11:10:35 2001 Douglas C. Schmidt + + * ace/WFMO_Reactor.cpp: Use the ACE_BIT_ENABLED macro + rather than the '&' operator directly. + +2001-12-18 Douglas C. Schmidt + + * Both Irfan Pyarali and Chris Gill are now *Dr.* Pyarali and + *Dr.* Gill. Congrats to both on a job well done! + +Wed Dec 19 10:02:53 2001 Venkita Subramonian + + * Makefile.bor: + Made changes for Borland ace-only builds as per + Johnny Willemsen . + +Wed Dec 19 09:39:03 2001 Venkita Subramonian + + * tests/Message_Queue_Test_Ex.cpp: + + Fixed compiler warning. Deleted an unused variable declaration. + +Wed Dec 19 10:31:12 2001 Johnny Willemsen + + * tests/Makefile.bor: + Added INET_Addr_Test + + * tests/INET_Addr_Test.cpp: + Changed type of argv from char to ACE_TCHAR to solve link errors + in the Unicode builds + +Tue Dec 18 19:15:42 2001 Steve Huston + + * tests/INET_Addr_Test.dsp: New test project for INET_Addr_Test. + + * tests/tests.dsw: Added INET_Addr_Test project. + +Tue Dec 18 18:50:29 2001 Steve Huston + + * ace/README: Added entry for new macro, ACE_HAS_NEW_NOTHROW. + This setting should be enabled if the compiler offers + new (nothrow). It enables nothrow variants of operator new + where that operator is defined on ACE classes. + + * ace/config-hpux-11.00.h: Added ACE_HAS_NEW_NOTHROW for aCC. + + * ace/config-all.h: Changed ACE_NEW[_RETURN] for HP aC++ to use + new(nothrow) rather than trying to catch exceptions, which + works particularly poorly when exceptions are disabled. Even + if they're disabled at compiler time, the run-time will still + throw an exception if allocation fails. + Fix decision making for how to do this correctly for both + HP-UX 10.20 and 11.x. + Correct ACE_throw_bad_alloc to compile correctly. + + * ace/Configuration.cpp (create_index_helper, value_open_helper, + section_open_helper): + * ace/Local_Name_Space_T.cpp (create_manager_i): + * ace/Malloc_Allocator.cpp (ACE_Allocator::instance): + Use naked placement new rather than ACE_NEW_RETURN. Placement + new does not work with new(nothrow) and a placement new won't + throw an exception that the ACE_NEW_* macros would catch anyway. + + * ace/Svc_Handler.(h cpp): Added a nothrow version of operator + new if ACE_HAS_NEW_NOTHROW is defined. + + * ace/config-hpux-11.x-hpc++.h: As promised before ACE 5.1, this + file is removed. config-hpux-11.00.h is the HP-UX 11.x config. + + * ace/config-aix-3.2.5.h: + * ace/config-hpux-9.x.h: Removed. These are hopelessly out of date + and the compilers don't support them any longer. + +Tue Dec 18 17:47:44 2001 Steve Huston + + * ace/Caching_Utility_T.cpp: Added #include "ace/Recyclable.h" + to pick up def for ACE_RECYCLABLE_IDLE_AND_PURGABLE. + + * tests/INET_Addr_Test.cpp: ACEified. + + * tests/run_test.lst: Added INET_Addr_Test. + +Tue Dec 18 14:43:02 2001 Carlos O'Ryan + + * ace/Sock_Connect.cpp: + * ace/config-cygwin32-common.h: + Use the #include /**/ trick to shut up the WinCE warnings. + +Tue Dec 18 22:05:04 2001 Balachandran Natarajan + + * bin/make_release: Added comment to indicate the problem in + producing diffs when a beta after a major or minor release is + cut. This needs fixing. Will get to this when the other pending + changes go in. + +Tue Dec 18 16:01:59 2001 Douglas C. Schmidt + + * ace/OS_Dirent.cpp (readdir_emulation): Fixed an "off-by-one" + memory allocation error. Thanks to Kyle Brost + for reporting this. + +Mon Dec 17 09:04:28 2001 Douglas C. Schmidt + + * ace/OS.i (ctime_r): Replaced ACE_OS::strsncpy() with + ACE_OS::strncpy() to fix a bug on Linux. Thanks to Vlado + Chovanec for reporting this. + This fixes BugID 1101. + +Tue Dec 18 13:04:07 2001 Carlos O'Ryan + + * bin/make_pretty.pl: + Incorporate numerous pending changes and improvements. + +Tue Dec 18 12:45:45 2001 Carlos O'Ryan + + * bin/nightlybuilds/builds.lst: + Updated to use the new build standard. + + * bin/nightlybuilds/scoreboard_update.pl: + Incorporate changes to support multiple "groups" (for external + builds), to print out the last reported status of each build + (such as "COMPILING"), and to adjust the build timeouts on a + per-build basis. + +Tue Dec 18 11:11:29 2001 Steve Huston + + * ace/SPIPE.h: Improved comments for Doxygen processing. + +Mon Dec 17 18:30:41 2001 Steve Huston + + * ace/SPIPE_Acceptor.(h cpp): For Windows, use the event handle + instead of the pipe handle for the handle value stored in the + ACE_IPC_SAP class. The pipe handle is pretty useless for doing + anything like detecting when the pipe connect is done - the + event handle is what's really useful there, and it stays + consistent across accepts, while the pipe handle changes. This + change allows the get_handle() value to be registered with the + reactor, albeit for signal, not input. + +Mon Dec 17 00:13:47 2001 Nanbor Wang + + * ace/String_Base_Const.h: + * ace/String_Base_Const.cpp: Added a new base class for + ACE_String_Base extracting out the static member data to + circumvent a SunCC compilation problem which only happen when + debug=0 is defined. + + * ace/String_Base.h: + * ace/String_Base.cpp: Removed the offending static member sata. + + * ace/Makefile: + * ace/Makefile.bor: + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + * ace/ace.icc: + * ace/ace-lib.icc: + * ace/ace-dll.icc: Added String_Base_Const.* to various project files. + +Sun Dec 16 10:33:17 2001 Douglas C. Schmidt + + * ace/Select_Reactor_T.h: Improve the documentation of the + ACE_Select_Reactor_T() constructor to clarify the mask_signals + and disable_notify_pipe parameters. Thanks to Bob Jolliffe + for motivating this. + +Sun Dec 16 16:42:12 2001 Johnny Willemsen + + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.{h,cpp}: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-poll.{h,cpp}: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-unclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-unserver.cpp: + * examples/IPC_SAP/SOCK_SAP/FD-unclient.cpp: + * examples/IPC_SAP/SOCK_SAP/FD-unserver.cpp: + * examples/IPC_SAP/FILE_SAP/client.cpp: + * examples/IPC_SAP/UPIPE_SAP/ex1.cpp: + * examples/IPC_SAP/UPIPE_SAP/ex2.cpp: + * examples/IPC_SAP/UPIPE_SAP/ex3.cpp: + * examples/Log_Msg/test_callback.cpp: + * examples/Log_Msg/test_log_msg.cpp: + * examples/Log_Msg/test_ostream.cpp: + + Made these examples compile when ACE_USES_WCHAR is set + +Sun Dec 16 08:04:23 2001 Venkita Subramonian + + * tests/Message_Queue_Test_Ex.cpp : fixed a compiler error + +Sat Dec 15 09:30:31 2001 Douglas C. Schmidt + + * tests/Message_Queue_Test_Ex.cpp (main): Fixed a minor bug + by removing the size-hint from the call to User_Class. Thanks + to Venkita Subramonian for reporting + this. + + * ace/config-win32-mingw.h. Added #define ACE_HAS_BROKEN_SAP_ANY + so that it'll compile on MinGW32. Thanks to Ben Flight + for reporting this. + + * tests/Logging_Strategy_Test.cpp: include ace/Logging_Strategy.h + rather than ace/Logging_Strategy.cpp. Thanks to Mike Connors + for reporting this. + +Sat Dec 15 16:20:28 2001 Balachandran Natarajan + + * ace/ace_os_dll.vcp: Added the files OS_QoS.{h,cpp}. + +Sat Dec 15 09:52:14 2001 Carlos O'Ryan + + * examples/Misc/test_set.cpp: + Add missing #include for Tru64/DU/CXX, probably implicitly + included on other platforms due to the + ACE_TEMPLATES_REQUIRE_SOURCE. + +Sat Dec 15 09:30:31 2001 Douglas C. Schmidt + + * tests/Message_Queue_Test_Ex.cpp: Improved the example to use + a user-defined class parameter for ACE_Message_Queue_Ex rather + than ACE_Message_Block. Thanks to Bill Fulton + for reporting this. + + * ace/Configuration.cpp: Make the return code of enumerate_values() + consistent with enumerate_sections(). Thanks to Kevin Burge + for reporting this. + +Fri Dec 14 21:36:29 2001 Steve Huston + + * ace/ace.icc: Adjusted file list as a result of split-apart + Strategies.* files (Mon Dec 10 15:39:22 2001 Balachandran Natarajan) + + * ace/Connection_Recycling_Strategy.cpp: + * ace/Hashable.cpp: + * ace/Recyclable.cpp: + * ace/Refcountable.cpp: Changed the ACE_RCSID to reflect the correct + module name (they all still were named Strategies, from whence + they came. + +Fri Dec 14 14:05:09 2001 Carlos O'Ryan + + * ace/svc_export.h: + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.dsp: + Found a better way to deal with the inconsistencies in the + ACE_Svc_Export macro. + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore_static.dsp: + Fixed project file for static library. + +Fri Dec 14 11:35:01 2001 Craig Rodrigues + + * ace/SSL/SSL_SOCK_Acceptor.h: + * ace/SSL/SSL_SOCK_Connector.h: + * examples/QOS/Simple/Fill_ACE_QoS.h: + * examples/QOS/Change_Receiver_FlowSpec/Fill_ACE_QoS.h: + * examples/QOS/Change_Sender_TSpec/Fill_ACE_QoS.h: + Add #include "ace/OS_QoS.h". + +Thu Dec 13 22:16:02 2001 Carlos O'Ryan + + * ace/svc_export.h: + Support ACE_Svc_BUILD_DLL also, to be consistent with all the + other export macros. + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.h: + Add missing ACE_Svc_Export to the class. + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.dsw: + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.dsp: + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore_static.dsp: + * netsvcs/clients/Naming/Dump_Restore/main.dsp: + Add missing project files and a workspace. + +Fri Dec 14 00:08:57 2001 Craig Rodrigues + + * ace/OS.h: Move around definitions of ACE_SOCK_GROUP + and ACE_OVERLAPPED_COMPLETION_FUNCTION_FUNC to fix + Win32 builds. + + * ace/OS.cpp: Add #include "ace/OS_QoS.h" to fix Win32 + builds. + +Thu Dec 13 22:21:52 2001 Balachandran Natarajan + + * Updated dependencies of many Makefile's. + +Thu Dec 13 21:36:15 2001 Craig Rodrigues + + * ace/OS.cpp: Remove ACE_INLINE from join_leaf(). + * ace/OS_QoS.cpp: Remove ACE_INLINE. + * ace/OS_QoS.h: Add include for pre.h. + +Thu Dec 13 16:53:00 2001 Ossama Othman + + * bin/auto_run_tests.lst: + + Added TAO/orbsvcs/tests/Security/Callback test to the list of + tests to run in our automated regression test suite. + +Thu Dec 13 18:11:00 2001 Craig Rodrigues + + * ace/OS.h: Move QoS data structures to OS_QoS.h. Forward + declare QoS data structures now contained in OS_QoS.h and + OS_QoS.cpp. + + * ace/OS.i: + * ace/OS.cpp: Move QoS enabled socket API functions from OS.i to + OS.cpp. + + * ace/OS_QoS.h (added): + * ace/OS_QoS.cpp (added): OS specific QoS data structures go here. + + * ace/MEM_Acceptor.h: + * ace/SOCK_Acceptor.cpp: + * ace/SOCK_Connector.cpp: + * ace/QoS/QoS_Session.h: Add #include "ace/OS_QoS.h". + + * ace/QoS/QoS_Session_Impl.cpp: Add u_long casts to eliminate + compiler warnings. + + * ace/Makefile: Add rule for OS_QoS. + * ace/Makefile.bor: Same. + * ace/ace_dll.dsp: Same. + * ace/ace_lib.dsp: Same. + +Thu Dec 13 14:58:43 2001 Ossama Othman + + * THANKS: + + Added Greg Burley to our Hall of Fame. + +Thu Dec 13 14:11:26 2001 Carlos O'Ryan + + * ace/ace_dll.vcp: + Remove Strategies.* from the WinCE project + files, and add the new files that replace it. + +Thu Dec 13 16:41:39 2001 Steve Huston + + * examples/Reactor/WFMO_Reactor/test_multithreading.cpp: Changed + call to ACE_Service_Config::close_singletons () to call + ACE_Reactor::close_singleton() instead. Recent changes made + it necessary to include "ace/Service_Config.h" here to use + the former, and it seemed better to call the only needed singleton + destroyer necessary in this case. + + * examples/Reactor/WFMO_Reactor/test_suspended_removals.cpp: + * examples/Reactor/WFMO_Reactor/test_window_messages.cpp: + * examples/Bounded_Packet_Relay/BPR_Drivers.h: + Added #include "ace/Reactor.h" - recent changes necessitate this. + + * examples/Reactor/WFMO_Reactor/test_talker.cpp: Added + #include "ace/Reactor_Notification_Strategy.h" - recent changes + necessitate this. + +Wed Dec 12 16:29:17 2001 Greg Burley + + * ace/SSL/SSL_Context.h: + * ace/SSL/SSL_Context.inl: + * ace/SSL/SSL_Context.cpp: + + Made it possible to specify certificate authority locations + after the verification mode has been set. + +Wed Dec 12 12:38:16 2001 Ossama Othman + + * ace/SSL/SSL_Accept_Handler.cpp: + * ace/SSL/SSL_Connect_Handler.cpp: + + Added missing "ace/Reactor.h" include. ACE_Reactor is only + forward declared otherwise. + +Wed Dec 12 12:21:11 2001 Vladimir Chovanec + + * ace/SSL/SSL_Accept_Handler.cpp (handle_input, handle_output): + + On Win32 platforms, cancel any previously scheduled "wakeup" + before attempting to perform IO. If necessary, a "wakeup" will + be scheduled if the IO call would block. + + (ssl_accept): + + On Win32 platforms, it is necessary to schedule a "wakeup" in + the Reactor if an IO call would block. This is necessary since + Windows events are only notified once. Hence, event handlers + must be rescheduled. + + * ace/SSL/SSL_Connect_Handler.cpp (handle_input, handle_output, + ssl_connect): + + Likewise. + +Wed Dec 12 06:56:46 2001 Balachandran Natarajan + + * THANKS: Added Petr Tuma to the hall of fame. + +Wed Dec 12 07:29:12 2001 Johnny Willemsen + + * ace/Makefile.bor: + Added Recycable + +Tue Dec 11 12:17:45 2001 Ossama Othman + + * ace/SSL/SSL_Accept_Handler.h (ACE_SSL_Accept_Handler): + * ace/SSL/SSL_Connect_Handler.h (ACE_SSL_Connect_Handler): + + Accept a reference to the flag that causes the calling thread's + event loop to stop on error. See below for details. + + * ace/SSL/SSL_Accept_Handler.cpp (ssl_accept): + * ace/SSL/SSL_Connect_Handler.cpp (ssl_connect): + + Return 1 if errno == EWOULDBLOCK and SSL_pending() return a + value greater than zero. The event handler should be called + back before waiting for more in events in the reactor. This + change causes the behavior for this case to match that of the + SSL_ERROR_WANT_{READ,WRITE} cases. Thanks to Vladimir Chovanec + for providing this fix. + + (handle_close): + + Set the "handler_closed" flag to one. This will notify the + event loop in the SSL_SOCK_{Acceptor,Connector} that it should + stop handling events in the event of an error. + + * ace/SSL/SSL_SOCK_Acceptor.cpp (ssl_accept): + * ace/SSL/SSL_SOCK_Connector.cpp (ssl_connect): + + Pass a flag by reference to the event handler responsible for + completing the non-blocking SSL connection. The event handler + will set the flag to 1 in order to cause the event loop in this + method to stop if the event handler is closed on error. + + Stop the event loop if a timeout occurs, i.e. handle_events() + returns 0. In conjunction with the above change, this fixes an + infinite loop that would occur in such a timeout situation. + +Tue Dec 11 07:59:12 2001 Johnny Willemsen + + * ace/Makefile.bor: + Updated BCB makefile with the changes of the changelog entry + Mon Dec 10 15:39:22 2001 Balachandran Natarajan + + * tests/MEM_Stream_Test.cpp: + Removed wrong ; after an if statement in this test. This should fix + the warning in the MSVC builds + +Mon Dec 10 19:10:22 2001 Balachandran Natarajan + + * ace/Refcountable.h: + * ace/Recyclable.h: + * ace/Hashable.h: + * ace/Hashable.inl: + * ace/Notification_Strategy.inl: + * ace/Reactor_Notification_Strategy.inl: Fixed fuzz errors. + +Mon Dec 10 18:54:22 2001 Balachandran Natarajan + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Added the new files and removed old ones. + +Mon Dec 10 15:39:22 2001 Balachandran Natarajan + + Merged from my branch. This checkin actually splits classes in + Strategies.h to multiple files. We also remove Strategies.* files + from the repo. + + Tue Nov 27 12:29:09 2001 Balachandran Natarajan + + * ace/Refcountable.h: Added a #define for the inlined file. + + * examples/Reactor/Misc/test_demuxing.cpp: + * examples/Timer_Queue/Reactor_Timer_Queue_Test.h: + * examples/Timer_Queue/main_reactor.cpp: Added #includes + + * examples/*/Makefile: + * tests/Makefile: Updated dependencies + + Wed Nov 21 10:44:33 2001 Balachandran Natarajan + + * tests/Cached_Accept_Conn_Test.h: + * tests/Cached_Conn_Test.cpp: + * tests/Conn_Test.cpp: + * tests/Message_Queue_Notifications_Test.cpp: + * tests/Priority_Reactor_Test.cpp: + * tests/Reactors_Test.cpp: + * tests/Service_Config_DLL.cpp: + * tests/RMCast/Makefile: Fixed compilation errors. + + Wed Nov 21 10:42:13 2001 Balachandran Natarajan + + * ace/Svc_Handler.cpp: + * ace/Connector.h: + * ace/Strategies_T.h: + * ace/Acceptor.h: + * ace/Svc_Handler.h: Fixed compilation errors. + + Tue Nov 20 12:48:39 2001 Balachandran Natarajan + + * ace/Strategies.h: + * ace/Strategies.cpp: + * ace/Strategies.i: Removed from the repo as the files are being + replaced with multiple files, with one class per file. Please + see below for details. The conglomeration of all the classes in + the same file made very less sense. + + * ace/Connection_Recycling_Strategy.h: + * ace/Connection_Recycling_Strategy.cpp: Added a new file for the + class ACE_Connection_Recycling_Strategy + + * ace/Hashable.h: + * ace/Hashable.cpp: + * ace/Hashable.inl: New file for the class ACE_Hashable + + * ace/Notification_Strategy.h: + * ace/Notification_Strategy.cpp: + * ace/Notification_Strategy.inl: New file for the class + ACE_Notification_Strategy. + + * ace/Reactor_Notification_Strategy.h: + * ace/Reactor_Notification_Strategy.cpp: + * ace/Reactor_Notification_Strategy.inl: New file for the class + ACE_Reactor_Notification_Strategy + + * ace/Recyclable.h: + * ace/Recyclable.cpp: + * ace/Recyclable.inl: New file for the class ACE_Recyclable + + * ace/Refcountable.h: + * ace/Refcountable.cpp: + * ace/Refcountable.inl: New file for the class ACE_Refcountable. + + * ace/OS.h: Moved the enum ACE_Recyclable_State to Recyclable.h + + * ace/Acceptor.h: + * ace/Caching_Utility_T.cpp: + * ace/Message_Queue.h: + * ace/Message_Queue_T.cpp: + * ace/Strategies_T.h: + * ace/Svc_Handler.cpp: Removed inclusion of Strategies.h. + + * ace/Procator.cpp: #included Service_Config.h + + * ace/Makefile: Added new file and generated dependencies + + * ace/SSL/Makefile: + * ace/RMCast/Makefile: Generated dependencies. + +Mon Dec 10 14:10:00 2001 Nanbor Wang + + * Makefile.bor: Added an ace_only target for Borland_wchar nightly + build. + +Sun Dec 9 08:54:38 2001 Douglas C. Schmidt + + * ace/Activation_Queue.cpp (enqueue): Fixed a leak where the + dynamically allocated ACE_Message_Block wasn't being released if + enqueue_prio() failed. Thanks to Dan Gilboa + for reporting this. + + * tests/Logging_Strategy_Test.cpp (run_reactor): Fixed a warning. + + * tests/MEM_Stream_Test.cpp: Added a call to ACE_Thread_Manager::wait() + to ensure the test shuts down in the right order. Thanks to + Michael Searles for reporting this. + + * ace/Message_Queue_T.i (dequeue): Call dequeue_head() rather than + queue_.dequeue() to get the proper type enforcement. Thanks to + Bill Fulton for contributing this fix. + +Sat Dec 8 17:07:01 2001 Ossama Othman + + * bin/fuzz.pl (check_for_missing_rir_env): + + Check for TAO_ENV_ARG_PARAMETER instead of ACE_TRY_ENV. TAO now + uses the former instead of the latter. + +Sat Dec 8 09:39:48 2001 Douglas C. Schmidt + + * ace/OS.cpp (string_to_argv): Improved the support for quoted strings. + Thanks to Kevin Burge for reporting + this. + + * ace/Profile_Timer.cpp, + ace/OS.i, + ace/OS.h, + ace/OS.cpp, + ace/High_Res_Timer.i, + ace/High_Res_Timer.cpp, + ace/config-win32-ghs.h, + ace/config-win32-common.h: Added improved support for ACE_LACKS_LONGLONG_T. + Thanks to Alain Decamps for contributing this. + +Fri Dec 7 07:57:12 2001 Douglas C. Schmidt + + * ace/OS.cpp (cond_timedwait): Fixed a bug in the WinCE semaphore + simulation version of ACE_OS::cond_timedwait(). Thanks to + Michael Graf for helping to find this. + +Fri Dec 07 14:28:33 2001 Carlos O'Ryan + + * tests/ACE_Init_Test.cpp: + * tests/ACE_Init_TestDlg.cpp: + Fix order of #includes to work under unicode builds. + +Fri Dec 07 15:42:44 2001 Nanbor Wang + + * ace/Registry_Name_Space.cpp: Changed to conditionally use + char_rep for binding/unbinding/resolving name bindings. This is + because ACE_CString and ACE_WString no longer allow + initialization with different string type. + +Fri Dec 7 10:22:25 2001 Ossama Othman + + * ace/SSL/SSL_SOCK_Stream.i (close): + + Do not invalidate the handle when closing the + ACE_SSL_SOCK_Stream. Doing so causes subtle side-effects when a + reactor invokes an event handler that uses a shutdown + ACE_SSL_SOCK_Stream. For example, if an SSL handshake fails + then the stream andle will be invalidated. This prevents the + ACE_SSL_Accept_Handler from being removed from the reactor. + Later when handle_events() is called the reactor will attempt + to call the ACE_SSL_Accept_Handler with the shutdown + ACE_SSL_SOCK_Stream, which appears to cause an access violation + on Windows, and a "hang" on Unix platforms. Thanks to Vladimir + Chovanec for tracking down this + problem. + +Thu Dec 6 18:48:07 2001 Douglas C. Schmidt + + * ace/Lib_Find.cpp: Fixed the ldfind() method so that it + does a case-insensitive comparison on Windows platforms. Thanks + to Kevin Burge for reporting this. + +Thu Dec 6 09:02:06 2001 Douglas C. Schmidt + + * ace/Sock_Connect.cpp: Added MACOSX support. Thanks to + John Michael Zorko for contributing this. + + * tests/Logging_Strategy_Test.cpp: Add a "wait()" at the + end of the main function to avoid problems when the main thread + exits before the reactor thread. Thanks to Michael Searles + for reporting this. + +Thu Dec 06 20:28:02 2001 Nanbor Wang + + * ace/SString.cpp (ACE_NS_WString): Char string constructor only + initialized the buffer length but not the string length. This + was causing string comparisons to fail. + +Thu Dec 6 18:51:39 2001 Steve Huston + + * include/makeinclude/platform_sunos5_sunc++.GNU: Re this change: + Wed Dec 5 12:37:56 2001 Carlos O'Ryan + more than the Orbix stuff was removed... restored the setting + of required link libraries and handling for the distrib option. + +Thu Dec 06 14:06:22 2001 Nanbor Wang + + * tests/Config_Test.cpp: The string literals used to initialize + ACE_TString need to be enclosed in an ACE_TEXT macro. + + * ace/Registry_Name_Space.h: + * ace/Registry_Name_Space.cpp: Changed ACE_WString to + ACE_NS_WString. I missed these last time. + + * ace/SString.i: Added an ACE_NS_WString constructor that I + missed. + +Thu Dec 6 11:19:18 2001 Venkita Subramonian + + * performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.h: + * performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.h: + Fixed warnings in gcc 3.0.2 + +Thu Dec 6 11:15:28 2001 Balachandran Natarajan + + * performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.h: + * performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.h: + Fixed Fuzz errors in these files. + +Thu Dec 6 07:39:07 2001 Chad Elliott + + * Added two new static functions for VxWorks only. spae() and + spaef() which are similar to spa(), but allow more than 10 + arguments with the help of double quoted strings. spaef() is + similar to spae() except that a new task is not spawned to run + the main function of the program. Thanks to Albert Wijnja + for the idea and supplying the original + code. + +Thu Dec 06 00:06:52 2001 Nanbor Wang + + * performance-tests/Misc/test_naming.cpp: Replaced the use of + ACE_WString with ACE_NS_WString as ACE_WString no longer support + initization using char string. + +Wed Dec 05 17:13:15 2001 Nanbor Wang + + * ace/SString.h: The concatenation oeprator needed to be + exported. + +Wed Dec 5 19:58:42 2001 Steve Huston + + * ace/Logging_Strategy.cpp: Set the logger_key_ member to 0 (no key) + unless/until the LOGGER flag is specified (and then the default + key is set) or the -k option is given, which specifies a new key. + Always passing a logger_key, even when there's no logger to be + used, makes for some odd names in the syslog and NT Event Logs + after the change:Sat Dec 1 19:39:22 2001 Steve Huston + Thanks to Chris Kohlhoff for pointing this out. + +Wed Dec 5 15:35:20 2001 Carlos O'Ryan + + * apps/Makefile.am: + * docs/ACE-categories.html: + Removed left over references to Orbix handler. + + * apps/JAWS/remora/app/Makefile: + * apps/JAWS/remora/app/stdmk: + * apps/JAWS/remora/app/test.cc: + * apps/JAWS/remora/app/remora.idl: + * apps/JAWS/remora/app/Remora_Export.h: + * apps/JAWS/remora/app/Remora_Export.i: + * apps/JAWS/remora/app/Remora_Export.cc: + * apps/JAWS/remora/app/Remora_Import.h: + * apps/JAWS/remora/app/Remora_Import.i: + * apps/JAWS/remora/app/Remora_Import.cc: + Another directory that could only compile if ORBeline was still + available. + +Wed Dec 05 14:47:32 2001 Carlos O'Ryan + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Removed CORBA_Handler.* and CORBA_Ref.* classes from the project + files. + +Wed Dec 5 16:38:31 2001 Nanbor Wang + + * tests/SString_Test.cpp: + * examples/Misc/test_sstring.cpp (main): Changed from ACE_WString + to ACE_NS_WString so we can still initialize the test string + from char strings. We can no longer initialize ACE_WString's + with char strings. ACE_NS_WString maintains the old behavior, + however. + + * ace/SString.h: + * ace/SString.i: Added string contatenation operator + ACE_NS_WString::operator+. + +Wed Dec 5 12:37:56 2001 Carlos O'Ryan + + * Removed all code to support Orbix and any references to it in + the documentation (at least all references that I found). + We haven't tested this code in ages, so it was probably broken, + furthermore, IONA does not sell Orbix-2.X nor Orbix-3.X (the + versions our code was based on), and will probably stop + supporting old versions of Orbix before ACE-5.3 (or 6.0) come + out. + + * ace/Makefile: + * ace/Makefile.am: + * ace/Makefile.bor: + * ace/ace-dll.icc: + * ace/ace-lib.icc: + * ace/ace.icc: + * ace/CORBA_Handler.h: + * ace/CORBA_Handler.i: + * ace/CORBA_Handler.cpp: + * ace/CORBA_Ref.h: + * ace/CORBA_Ref.cpp: + * ace/config-hpux-9.x-orbix.h: + * ace/config-sunos4-sun4.x-orbix.h: + * ace/config-sunos5.4-sunc++-4.x-orbix.h: + * ace/config-sunos5.x-sunc++-4.x-orbix.h: + * apps/Makefile: + * apps/Makefile.am: + * apps/Orbix-Examples/Makefile: + * apps/Orbix-Examples/Event_Comm/Makefile: + * apps/Orbix-Examples/Event_Comm/README: + * apps/Orbix-Examples/Event_Comm/Consumer/Input_Handler.cpp: + * apps/Orbix-Examples/Event_Comm/Consumer/Input_Handler.h: + * apps/Orbix-Examples/Event_Comm/Consumer/Makefile: + * apps/Orbix-Examples/Event_Comm/Consumer/Notification_Receiver_Handler.cpp: + * apps/Orbix-Examples/Event_Comm/Consumer/Notification_Receiver_Handler.h: + * apps/Orbix-Examples/Event_Comm/Consumer/consumer.cpp: + * apps/Orbix-Examples/Event_Comm/Supplier/Input_Handler.cpp: + * apps/Orbix-Examples/Event_Comm/Supplier/Input_Handler.h: + * apps/Orbix-Examples/Event_Comm/Supplier/Makefile: + * apps/Orbix-Examples/Event_Comm/Supplier/Notifier_Handler.cpp: + * apps/Orbix-Examples/Event_Comm/Supplier/Notifier_Handler.h: + * apps/Orbix-Examples/Event_Comm/Supplier/supplier.cpp: + * apps/Orbix-Examples/Event_Comm/include/Event_Comm.hh: + * apps/Orbix-Examples/Event_Comm/include/Event_Comm_i.h: + * apps/Orbix-Examples/Event_Comm/include/Notification_Receiver_i.h: + * apps/Orbix-Examples/Event_Comm/include/Notifier_i.h: + * apps/Orbix-Examples/Event_Comm/libsrc/Event_Comm.hh: + * apps/Orbix-Examples/Event_Comm/libsrc/Event_Comm.idl: + * apps/Orbix-Examples/Event_Comm/libsrc/Event_CommC.cpp: + * apps/Orbix-Examples/Event_Comm/libsrc/Event_CommS.cpp: + * apps/Orbix-Examples/Event_Comm/libsrc/Event_Comm_i.h: + * apps/Orbix-Examples/Event_Comm/libsrc/Makefile: + * apps/Orbix-Examples/Event_Comm/libsrc/Notification.idl: + * apps/Orbix-Examples/Event_Comm/libsrc/Notification_Receiver.idl: + * apps/Orbix-Examples/Event_Comm/libsrc/Notification_Receiver_i.cpp: + * apps/Orbix-Examples/Event_Comm/libsrc/Notification_Receiver_i.h: + * apps/Orbix-Examples/Event_Comm/libsrc/Notifier.idl: + * apps/Orbix-Examples/Event_Comm/libsrc/Notifier_i.cpp: + * apps/Orbix-Examples/Event_Comm/libsrc/Notifier_i.h: + * apps/Orbix-Examples/Logger/Logger.cpp: + * apps/Orbix-Examples/Logger/Logger.h: + * apps/Orbix-Examples/Logger/Makefile: + * apps/Orbix-Examples/Logger/Orbix.hostgroups: + * apps/Orbix-Examples/Logger/Orbix.hosts: + * apps/Orbix-Examples/Logger/README: + * apps/Orbix-Examples/Logger/a1.tex: + * apps/Orbix-Examples/Logger/client.cpp: + * apps/Orbix-Examples/Logger/logger.hh: + * apps/Orbix-Examples/Logger/logger.idl: + * apps/Orbix-Examples/Logger/loggerS.cpp: + * apps/Orbix-Examples/Logger/logger_i.cpp: + * apps/Orbix-Examples/Logger/logger_i.h: + * apps/Orbix-Examples/Logger/server.cpp: + * examples/CORBA/Makefile: + * examples/CORBA/Test.idl: + * examples/CORBA/Test_i.cpp: + * examples/CORBA/Test_i.h: + * examples/CORBA/client.cpp: + * examples/CORBA/server.cpp: + * include/makeinclude/platform_hpux_orbix.GNU: + * include/makeinclude/platform_sunos4_sunc++4.x_orbix.GNU: + * include/makeinclude/platform_sunos5_centerline_orbix.GNU: + * include/makeinclude/platform_sunos5_sunc++_orbix.GNU: + Removed examples and classes to support orbix with ACE. + + * ACE-INSTALL.html: + * FAQ: + * README: + * TODO: + * acconfig.h: + * ace/README: + * ace/config-win32-common.h: + * apps/README: + * ace/config-tandem.h: + * docs/ACE-configuration.txt: + * include/makeinclude/platform_aix4_cset++.GNU: + * include/makeinclude/platform_dgux4_epc.GNU: + * include/makeinclude/platform_m88k.GNU: + * include/makeinclude/platform_sunos4_g++.GNU: + * include/makeinclude/platform_sunos5_g++.GNU: + * include/makeinclude/platform_sunos5_kcc.GNU: + * include/makeinclude/platform_sunos5_sunc++.GNU: + * include/makeinclude/platform_unixware_g++.GNU: + * include/makeinclude/platform_unixware_udk.GNU: + * include/makeinclude/rules.local.GNU: + * include/makeinclude/wrapper_macros.GNU: + * m4/ace.m4: + * performance-tests/README: + * performance-tests/TTCP/C/README: + Files that referenced Orbix support or documented how to use + it. + + * examples/Reactor/Multicast/Log_Wrapper.h: + * examples/Reactor/Multicast/Log_Wrapper.cpp: + Fixed documentation, it was referencing Orbix but actually it + uses UDP multicast, looks like a cut&paste error to me. + +Wed Dec 5 12:15:36 2001 Carlos O'Ryan + + * ace/SString.cpp: + Add missing template instantiations, only a problem when + inlining was disabled. + + * tests/Hash_Map_Manager_Test.cpp: + Rename global variable 'alloc' to 'ace_test_allocator', the + former conflicts with STL symbols under Linux. + + * tests/Map_Test.cpp: + Rename the value_type and expanded_value global typedefs to have + an ace_ prefix. Though only used in this test they conflict + with some STL symbols by the same name. + + * tests/DLList_Test.cpp: + Remove unused global variable 'alloc' looks like a cut&paste + carry-over. + +Wed Dec 05 10:08:56 2001 Carlos O'Ryan + + * rpc++/*: + Removed, this directory was not distributed with ACE and having + it around just made the administration harder. + +Wed Dec 5 12:10:42 2001 Chad Elliott + + * bin/nightlybuilds/builds.lst: + + Temporarily disable the OCI nightly builds. + +Wed Dec 5 09:55:28 2001 Steve Huston + + * tests/INET_Addr_Test.cpp: Made the ipv4_addresses array const char *. + +Wed Dec 5 15:41:08 2001 Johnny Willemsen + + * ace/OS.h: + Corrected doxygen docu of ACE_Countdown_Time::max_wait_time_ + +Wed Dec 5 14:14:32 2001 Johnny Willemsen + + * ace/String_Base.h: + Corrected the description of the rep() method + +Wed Dec 5 09:21:12 2001 Johnny Willemsen + + * ace/SString.cpp: + Fixed compile error and warning that appeared in BCB build + +Tue Dec 4 22:26:28 2001 Nanbor Wang + + * ace/OS_String.h: + * ace/OS_String.i: + * ace/OS_String.cpp (strncpy, wcsncat_emulation): One more + string function that needs to be available. (See next entry.) + +Tue Dec 04 22:12:04 2001 Nanbor Wang + + * ace/OS_String.h: + * ace/OS_String.cpp (strsncpy): Made the wchar_t version of this + function available on all platforms and changed it to use type + ACE_WCHAR_T. + +Tue Dec 04 20:08:49 2001 Nanbor Wang + + Merged in the new String_Base template class. + + * ace/Makefile: Added String_Base into the list of template + files. + + * ace/Basic_Types.h: Added definitions of ACE_WCHAR_T and + ACE_WINT_T which are defined to wchat_t and wint_t when + ACE_HAS_WCHAR are defined, and ACE_USHORT16 otherwise. They are + needed to support various "wide character" string operations + that we need to support the templatized ACE_WString, which uses + ACE_USHORT16 as the wide char type when wchar_t is not + supported. + + * ace/OS_String.h: + * ace/OS_String.inl: + * ace/OS_String.cpp: Made several wchar version string functions + available no matter ACE_HAS_WCHAR is defined or not. There are + more functions (the ones that have *_emulation helpers + available) that can be made availabe at all time, but I just + fixed the ones that ACE_WString needed for now. We can add more + later. + + * ace/SString.h: Changed the definition of ACE_WSTRING_TYPE to + ACE_WCHAR_T. ACE_WCHAR_T is defined in the same fashion as + ACE_WSTRING_TYPE was originally defined. + + * ace/Local_Name_Space.cpp: ACE_NS_WString::char_rep works just + fine. We don't need to use ACE_Wide_To_Ascii::convert + explicitly since it is not available when ACE_HAS_WCHAR isn't + defined. + + * ace/SString.cpp (operator<<): Avoided the problem of printing + wchar strings temporarily. Using ACE_Wide_To_Ascii didn't work + on platforms that don't support wchar. Thanks to Keith Hamburg + for pointing this out. + + * ace/String_Base.cpp: Fixed incorrect RCSID name. Thanks to + Keith Hamburg for reporting it. + + * ace/SString.cpp: + * ace/SString.h: + * ace/SString.i: Changed ACE_WString to be a typedef of + ACE_String_Base and added a subclass of it + called ACE_NS_WString to maintain backward compatibility. + + * tests/Naming_Test.cpp: + * ace/Local_Name_Space.cpp: + * ace/Local_Name_Space.h: + * ace/Local_Name_Space_T.cpp: + * ace/Local_Name_Space_T.h: + * ace/Name_Space.cpp: + * ace/Name_Space.h: + * ace/Naming_Context.cpp: + * ace/Naming_Context.h: + * ace/Remote_Name_Space.cpp: + * ace/Remote_Name_Space.h: + * netsvcs/clients/Naming/Client/Client_Test.cpp: + * netsvcs/lib/Name_Handler.cpp: + * netsvcs/lib/Name_Handler.h: Changed the use of ACE_WString to + ACE_NS_WString. + + * tests/SString_Test.cpp: Added ACE_TEXT_WIDE to convert char + strings to wchar strings for initializing ACE_WString as you can + no longer initialize a ACE_WString with a char string. + + * ace/String_Base.h: + * ace/String_Base.i: + * ace/String_Base.cpp: Abstracted out ACE_CString and ACE_WString + into a templatized String_Base. + + * ace/CDR_Stream.h: Removed forward declarating ACE_CString and + added inclusion of . + + * ace/SString.h: + * ace/SString.i: + * ace/SString.cpp: Changed ACE_CString to be a typedef of + ACE_String_Base. + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Added String_Base.* to appropriate folders. + +Tue Dec 4 20:57:09 2001 Balachandran Natarajan + + * performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.cpp: + * performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.h: + + Added a outgoing queue to the test. This should more or less + represent a simple CORBA invocation. Reduced a call to new to by + using a shared data block with a lock. + +Tue Dec 4 19:10:22 2001 Steve Huston + + * ace/config-sunos5.6.h: Removed the setting of _POSIX_C_SOURCE to + 199309L and __EXTENSIONS__. They aren't needed to pick up shm_open + as previously believed, and they interfere with availability of + some Solaris/C9x functions. + +Tue Dec 4 14:47:39 2001 Steve Huston + + * ace/OS.i (gethostbyaddr): Moved this up before getipnodebyaddr() + to avoid a call to gethostbyaddr() before it's been seen + inlined. Thanks to Bala for reporting this. + +Tue Dec 4 13:52:44 2001 Steve Huston + + * tests/Date_Time_Test.cpp: Add a test for the microseconds part. + +Tue Dec 4 09:27:21 2001 Ossama Othman + + * ace/OS.h: + + Reverted the change that added group write permissions to the + default file and directory permissions. Doug correctly points + out that this introduces a security hole. Users who need less + restrictive permissions can redefine these macros in their + config.h header. + +Tue Dec 4 10:07:31 2001 Steve Huston + + * bin/auto_compile: Add an optional 6th command line arg that is + the module to check out from CVS. Defaults to ACE_wrappers so + it works the same as it used to without the argument. + +Tue Dec 4 06:59:09 2001 Balachandran Natarajan + + * performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.cpp: + * performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.h: + * performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.h: + * performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.cpp: + + New tests for measuring the throughput of two different server + concurrency architectures. The idea is to make it simpler than + what is already there and hence the tests. The old tests were a + bit confusing and very complicated. The old tests have been + retained. The tests are for getting some ball-park figures for + RT_CORBA and for TAO in general. + +Tue Dec 4 10:00:04 2001 Johnny Willemsen + + * examples/Reactor/Multicast/client.cpp: + * examples/Naming/test_non_existent.cpp: + * examples/Naming/test_open.cpp: + * examples/Naming/test_writers.cpp: + Made these files compiling when ACE_USES_WCHAR is set + +Mon Dec 3 18:19:11 2001 Ossama Othman + + * bin/fuzz.pl (check_for_id_string): + + Corrected capitalization of "\$Id\$" in output message. + +Mon Dec 3 16:30:07 2001 Ossama Othman + + * ace/OS.h: + + Added group write permissions to the default file and directory + permission macros supplied by ACE. Allows the ACE_Process_Mutex + to be used with process from different user in the same group. + Thanks to Michael Brinkmann for + providing a fix. + +Mon Dec 3 16:22:56 2001 Ossama Othman + + * ace/Process_Mutex.h: + + Corrected Doxygen documentation. + +Mon Dec 03 14:22:57 2001 Carlos O'Ryan + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Add UNIX-only files. Though strictly not required to compile + ACE under NT, putting them in the project makes this directory + more amenable for samwise. + + * ace/POSIX_Proactor.cpp: + Remove duplicate ACE_BUILD_DLL macro, when needed this is + defined via options in the project file. + +Mon Dec 3 13:59:06 2001 Ossama Othman + + * ace/README: + + The ACE_HAS_IP6 macro has been superceded by the ACE_HAS_IPV6 + macro. Also added description of the + ACE_USES_IPV4_IPV6_MIGRATION macro based on Steve's description + below. + +Mon Dec 3 15:50:42 2001 Steve Huston + + * IPv6 changes done by John Aughey and myself. To enable IPv6 + support for a build, put this in your config.h file: + #define ACE_HAS_IPV6 + If your build with IPv6 enabled must also run on systems where + the IPv6 support in the kernel is not actually turned on (for + example, Redhat Linux 7 by default), also add this to your + config.h file: + #define ACE_USES_IPV4_IPV6_MIGRATION + + * ace/ACE.cpp (format_hexdump): Add \n to last part of a dump line. + + * ace/INET_Addr.(h i cpp): If IPv6 is enabled, the inet_addr_ + member is now a union of sockaddr_in and sockaddr_in6. Which + one is legit is noted in ACE_Addr::type as well as the family + member of either of the union members. The host name lookup + functions can look up ipv6 as well as ipv4 names, and the + caller can force one or the other by using the address_family + argument to set(). + + * ace/OS.(h i): Removed ACE_OS::gethostbyname2; replaced it with + the more correctly-named and more flexible ACE_OS::getipnodebyname. + Also added ACE_OS::getipnodebyaddr. These are the IPv6-capable + functions analogous to gethostbyname and gethostbyaddr. + + * ace/SOCK.cpp (get_remote_addr, get_local_addr): Set up the + ACE_Addr's type properly to account for ipv4/6 possibilities. + + * ace/SOCK_Acceptor.(h cpp): Allow accepting on ipv4 and ipv6 sockets. + + * ace/SOCK_CODgram.h: + * ace/SOCK_Connector.(cpp h ): + * ace/SOCK_Dgram.(cpp h ): Change default protocol family from + PF_INET to vary and take advantage of IPv6 if available. + + * ace/Sock_Connect.(cpp h): Added ACE_Sock_Connect::ipv6_enabled() + method - it checks to see if the running kernel can do IPv6 + sockets or not. + + * ace/Sock_Connect.cpp (get_ip_interfaces): Removed a #if 0'd + block that had possible specializations for MSVC 4.2. It's + been a number of years, and it's obviously not needed. + + * ace/MEM_Addr.cpp (same_host): Don't try to compare binary + addresses directly... get ACE_INET_Addr objects, clear the port + numbers, and compare them. + + * ace/MEM_Connector.cpp (connect): Print error text with message. + + * ace/Asynch_Acceptor.cpp (open): For the new socket, use the + protocol family from the listen address, not PF_INET. + + * tests/INET_Addr_Test.cpp: New test. + + * tests/Makefile: Added INET_Addr_Test. + +Mon Dec 3 10:54:34 2001 Carlos O'Ryan + + * ace/OS.h: + Document CDR default buffer sizes and control macros + using Doxygen. + Document memory alignment macros in Doxygen form. + + * ace/Sample_History.h: + * ace/Sample_History.inl: + Add accessor to get the samples saved on the history. + + * ace/RMCast/RMCast_Singleton_Factory.h: + Document constructor in more detail. + +Mon Dec 03 07:54:04 2001 Johnny Willemsen + + * ace/Unbounded_Queue.{h,cpp}: + Added const iterator for this container class + +Sun Dec 02 15:13:30 2001 Carlos O'Ryan + + * ace/OS.cpp: + Fixed Fuzz problems, the ACE_TRACE calls in operator++/-- + definitions had less whitespace than the actual operators. + +Sun Dec 02 15:17:47 2001 Nanbor Wang + + * ace/Thread_Manager.cpp (join): This method mistakenly used the + local copy of Thread_Descriptor to change the thread status when + it found a thread to join from the . This prevented + the status of the original Thread_Descriptor to be updated + correctly and the same descriptor got put into the + again, which caused the same thread to be + waiting on in some cases. Changed to manipulate the descriptor + directly to avoid the problem. Thanks to Eyal Lubetzky + for reporting the problem and providing a + nice example to showcase it. + +Sun Dec 2 12:44:58 2001 Carlos O'Ryan + + * tests/ACE_Init_Test.cpp: + * tests/ACE_Init_TestDlg.cpp: + Protect this test against compilation on non-Win32 platforms, + that makes it easier to compile using samwise. + + * tests/RMCast/RMCast_Fragment_Test.cpp: + * tests/RMCast/RMCast_Membership_Test.cpp: + * tests/RMCast/RMCast_Reassembly_Test.cpp: + * tests/RMCast/RMCast_Reordering_Test.cpp: + * tests/RMCast/RMCast_Retransmission_Test.cpp: + * tests/RMCast/RMCast_UDP_Best_Effort_Test.cpp: + Change #include "test_config.h" to #include "../test_config.h", + it is easier to generate makefiles and projects files with + samwise if we do that. + +Sun Dec 02 12:15:25 2001 Carlos O'Ryan + + * ace/OS.cpp: + Fixed typos in ACE_Time_Value::operator++ implementations. + Also moved the implementation outside the #ifdef ACE_WIN32 + section. + +Sun Dec 2 12:17:09 2001 Balachandran Natarajan + + * ace/Reactor.i: Fixed a warning in TRU 64. Thanks to + which reminded me of the fix in one of my + workspaces. This shows up only in V6.3-013 (cxx) of the + compiler. + +Sat Dec 1 19:39:22 2001 Steve Huston + + * ace/Date_Time.i (update): Use ACE_OS::gettimeofday for the time + source. This gets both the seconds-since-epoch value from which + the date and time are calculated and the microseconds value. + Thanks to Jim Connelly for reporting this. + + * THANKS: Added Jim Connelly to the Hall of Fame. + + * ace/Log_Msg_NT_Event_Log.{cpp h} (open): + * ace/Log_Msg_UNIX_Syslog.{cpp h} (open): + If the caller passes a prog_name (logger_key) argument, use it + for the Source field in the event log entries (or ident in the + syslog entries). If not, use the program name (previous behavior). + Added comments to define this behavior. + + * ace/Log_Msg.cpp (open): Don't refuse to open a backend if the + arg is 0 and the SYSLOG bit is enabled. The SYSLOG + backends, both UNIX and NT Event Log, work perfectly fine with + a 0 logger_key. Thanks to Steve Witten for + reporting this. + +Sat Dec 1 18:03:51 2001 Douglas C. Schmidt + + * ace/config-macosx.h: + * include/makeinclude/platform_macosx.GNU: + Added support so that ACE will build and run on Mac OS X 10.1. + Thanks to John Michael Zorko for contributing + this. + +Fri Nov 30 19:08:19 2001 Douglas C. Schmidt + + * ace/ARGV.cpp (dump): Fixed a bug with dump() so that it + works properly even if argv_ changes. Thanks to Kyle Brost + for this fix. + +Thu Nov 29 16:31:57 2001 Douglas C. Schmidt + + * ace/OS.{h,i,cpp}: Changed the return value of + ACE_Time_Value::operator+= and operator -= to be ACE_Time_Value + & rather than void. Also, added overloaded operator++ and + operator--. This is all to make this stuff work better with + ACE_Atomic_Op. Thanks to Kelly F. Hickel + for suggesting this. + + * ace/Asynch_Acceptor.cpp (parse_address): Changed + the "message_block.size () - 2 * this->address_size ()" argument + to "bytes_to_read_" to work properly on Win32. Thanks to Kelly + F. Hickel for reporting this. + +Wed Nov 28 17:44:26 2001 Douglas C. Schmidt + + * ace/OS_Dirent.cpp (readdir_emulation): Fixed a memory leak + in the dirent emulation. Thanks to Olivier Brunet + for reporting this. + + * ace/SPIPE_Acceptor.h (ACE_SPIPE_Acceptor): Clarified the + return value of open(). Thanks to Garth Watney + for motivating this. + + * ace/OS.h: Added a workaround to the Borland bug for + ACE_OS::stat(). Thanks to Christopher Kohlhoff + and Chris Able for + reporting/fixing this. + +Sat Dec 01 09:26:27 2001 Balachandran + + * ACE version 5.2.1 released. + +Wed Nov 28 09:28:09 2001 Johnny Willemsen + + * ace/examples/IPC_SAP/SOCK_SAP/* + * ace/examples/IPC_SAP/SPIPE_SAP/* + * ace/examples/Misc/* + * ace/examples/Naming/* + * ace/examples/RMCast/Send_File/* + * ace/examples/Reactor/DGram/* + * ace/examples/Reactor/Ntalker/* + * ace/examples/Registry/* + * ace/examples/Threads/* + * ace/examples/Service_Configurator/IPC_tests/client/* + Made these examples compiling when ACE_USES_WCHAR is set + +Mon Nov 26 16:07:57 2001 Balachandran Natarajan + + * bin/make_release: The distribution will be available in bzip2 + compressed format too. Made modifications to the release scripts + to put out the beta in bzip2 compressed format. + +Sat Nov 24 10:23:00 2001 Douglas C. Schmidt + + * ace/Unbounded_Set.h (class ACE_Unbounded_Set): Moved the + insert_tail() method from the private part of the class to the + public part since it's needed by the examples/Misc/test_set.cpp + file. + + * examples/Misc/test_set.cpp (main): Somehow the contents of this file + got lost. Thanks to Johnny Willemsen for reporting this! + +Fri Nov 23 08:40:33 2001 Douglas C. Schmidt + + * tests/Refcounted_Auto_Ptr_Test.cpp: Added some ACE_DEBUGs to + print out the reference count. + + * ace/Refcounted_Auto_Ptr.h: Added a count() accessor method to + return the reference count. Thanks to Andrea Bernicchia + for contributing this. + +Thu Nov 22 05:24:51 2001 Craig Rodrigues + + * examples/QOS/Diffserv: Added a simple example to illustrate + how to set Diffserv Codepoints on an ACE_SOCK_CODgram. + * examples/QOS/Makefile: Updated. + +Wed Nov 21 11:35:50 2001 Michael Kircher + + * ace/Bound_Ptr.h + * ace/Bound_Ptr.i + * ace/Future.cpp + * ace/Future.h + * ace/Refcounted_Auto_Ptr.h + * ace/Refcounted_Auto_Ptr.i + + Made the memory allocation failure behavior consistent + to the behavior prior to the change on Sun Oct 28 13:15:00 2001. + Thanks to Christopher Kohlhoff who prepared + this change. + The problem was that with the above mentioned change failed + allocations would return 0 in either case, if exceptions were + enabled by the platform or not. This was incosistent to the + behavior before, as new threw bad_alloc on allocation failure + when exceptions were supported by the platform. + + To fix this we faced the following forces: + - Not to introduce yet another macro + - Minimize impact of changes, localize the problem + - Keep the new calls wrapped by a ACE_NEW macro to allow + users to eventually redefine the macro (using e.g. new (nothrow) + + As the ACE_NEW macros are quite restrictive in their supported + semantics, e.g. you can only return on error, we decided to introduce + a new method (as inline) internal_create which does the allocation. + internal_create is called by create which does the differentiation + between the exception-supported and exception-not-supported case. + +Wed Nov 21 09:07:37 2001 Douglas C. Schmidt + + * ace/OS.h: Updated the ACE_GUARD_ACTION macro and added a new + ACE_GUARD_REACTION macro. Then, reimplemented the ACE_GUARD and + ACE_GUARD_RETURN macros in terms of these new macros. Thanks to + Don Hinton for contributing these. + + * ace/Log_Msg_Callback.h: Improved the comments to explain why + ACE_Log_Msg_Callback isn't inherited. Thanks to + Alexey Chalimov for motivating this. + +Tue Nov 20 15:36:52 2001 Douglas C. Schmidt + + * ACE-INSTALL.html: Pointed out that on Solaris with g++ you may + need to use GNU as instead of /usr/ccs/bin/as, if you want + -gstabs+ and -pipe support. Thanks to C Chan + for reporting this. + +Mon Nov 19 07:24:05 2001 Douglas C. Schmidt + + * examples/Synch/proc_sema.cpp: Added the ACE_TEXT macro so that + ACE_Get_Opt works correctly. Thanks to Johnny Willemsen for + contributing this. + + * tests/Aio_Platform_Test.cpp (main): Fixed the code so that it + compiles when ACE_USES_WCHAR. Thanks to Johnny Willemsen for + reporting this. + + * docs/ACE-categories.html: Updated the Doxygen URLs to use the + new format. Thanks to Peter J. Mason + for reporting the problem. + +Fri Nov 16 10:39:52 2001 Douglas C. Schmidt + + * docs: Moved minimumTAO.html from $TAO_ROOT/docs/ to + $ACE_ROOT/docs. + + * ace/OS.h: Added two new macros ACE_GUARD_ACTION and + ACE_GUARD_ACTION_RETURN. Thanks to Boris Kaminer + for suggesting these. + + * ace/NT_Service.cpp (state): Fixed a bug where calling + ACE_NT_Service::state(x,x) while the service is stopped was + causing the internal status variables of ACE_NT_Service to + become corrupt. If the control_mask is set to + SERVICE_ACCEPT_STOP in the constructor, the call to state will + cause this mask to be reset (if the service is not running). + This ultimately results in an NT Service that can be started but + not stopped. Thanks to Kyle Brost for + providing this fix. + +Wed Nov 21 10:00:20 2001 Chad Elliott + + * ace/config-irix6.x-common.h: + + Changed the size of a long double from 16 to 8 for the GNU + compiler. + + * include/makeinclude/platform_irix6.x_sgic++.GNU: + + Add buildbits macro to allow 32 and 64 bit builds on IRIX. + +Wed Nov 21 12:49:08 2001 Johnny Willemsen + + * performance-tests/Misc/basic_perf.cpp + * performance-tests/Misc/childbirth_time.cpp + * performance-tests/Misc/context_switch_time.cpp + * performance-tests/Misc/preempt.cpp + * performance-tests/Misc/test_mutex.cpp + * performance-tests/Misc/test_singleton.cpp + Made these tests compiling when ACE_USES_WCHAR is set + +Wed Nov 21 08:49:12 2001 Johnny Willemsen + + * ace/OS.h + Added ACE_LIB_TEXT around ACE_DEFAULT_RENDEZVOUS to make a unicode + constant when ACE_USES_WCHAR is defined + + * tests/FlReactor_Test.cpp + * tests/TkReactor_Test.cpp + * tests/XtReactor_Test.cpp + Changed type of argv argument of main from char to ACE_TCHAR so that + these tests compile without problems when ACE_USES_WCHAR is defined + + * examples/IPC_SAP/ATM_SAP/CPP-client.cpp + * examples/IPC_SAP/ATM_SAP/CPP-server.cpp + * examples/IPC_SAP/FIFO_SAP/FIFO-client.cpp + * examples/IPC_SAP/FIFO_SAP/FIFO-Msg-client.cpp + * examples/IPC_SAP/FIFO_SAP/FIFO-Msg-server.cpp + * examples/IPC_SAP/FIFO_SAP/FIFO-server.cpp + Made these example compiling when ACE_USES_WCHAR is set + +Tue Nov 20 12:02:16 2001 Ossama Othman + + * configure.in: + + Removed this file from the distribution. Some folks insist on + attempting to build ACE/TAO with the configure script and + reporting problems despite the fact we've explicitly disabled + it. + +Tue Nov 20 13:30:36 2001 Balachandran Natarajan + + * ace/Strategies.h: + * ace/Strategies.cpp: + * ace/Strategies.i: Re-added files back into the main trunk. Got + accidentally removed from the main when I was doing some work on + a branch. + +Mon Nov 19 20:35:44 2001 Jaiganesh Balasubramanian + + * ace/SOCK_Dgram_Mcast.cpp: + This class allow application to subscribe a single socket to + many multicast groups. However, the unsubscribe operation + failed to work with more than one group. For some strange + reason it was storing the first multicast group subscription in + a class member and using that member in all the paths for the + unsubscribe methods. + + We have changed the unsubscribe(const ACE_INET_Addr&,...) method + to work as adversited, i.e. unsubscribe the *given* multicast + address, not the stored one, as an added benefit the method is + now re-entrant. The unsubscribe(void) method works as before. + The code has been re-factored to minimize duplication. + +Mon Nov 19 11:03:07 2001 Ossama Othman + + * ACE-INSTALL.html: + + Added missing build instructions for the ACE_SSL library, and + updated the list of "make" flags recognized by ACE's Makefile + scheme. + +Mon Nov 19 00:53:54 2001 Krishnakumar B + + * ace/Svc_Conf_y.cpp: + * ace/Svc_Conf_l.cpp: + * ace/Svc_Conf_Tokens.h: + + Fixed some bugs introduced by my previous checkin because of + patch confusion. Replaced all the standard C system calls with + ACE_OS calls. Made it more wchar friendly. + + * ace/Makefile: + + Removed the dependency on /pkg/gnu/bin/flex. It was broken. We + now use $(LEX) and $(YACC) defined in + $ACE_ROOT/include/makeinclude/wrapper_macros.GNU. + + * include/makeinclude/wrapper_macros.GNU: + + Changed the definition of YACC to bison (by default). If people + want to change this, it can be overridden by a variable in the + Makefile. But things are most likely to break if you use yacc. + + * etc/Svc_Conf_l.cpp.diff: + * etc/Svc_Conf_y.cpp.diff: + + Regenerated the diffs. + + *Sigh* This patching business is ugly. + +Fri Nov 16 07:22:19 2001 Balachandran Natarajan + + * bin/make_release: Updated the script to copy the beta to a + different location. Have tested this by creating a dummy + repository and a dummy export directory. Things worked + fine. Hopefully the beta should go through without any hassle. + + The script is tied to its usage on ace.cs. Needs to be + changed. Will do that after this beta goes out. Having too many + changes at the same time may not be good. + +Thu Nov 15 20:44:40 2001 Craig Rodrigues + + * etc/Svc_Conf_l.cpp.diff: Updated. Thanks to Kitty for reporting it. + * etc/Svc_Conf_y.cpp.diff: Added. We need it for uses of ACE_LIB_TEXT. + * ace/Makefile: Added rule to apply patch to Svc_Conf_y.cpp. + +Thu Nov 15 08:26:57 2001 Douglas C. Schmidt + + * ace/*.cpp: Changed all remaining uses of ACE_TEXT to ACE_LIB_TEXT + to be consistent... Thanks to Johnny Willemsen for reporting + the inconsistencies and for Darrell Brunsch for clarifying what + the right behavior should be. + +Wed Nov 14 07:43:20 2001 Douglas C. Schmidt + + * docs/ACE-guidelines.html: Updated the guidelines to explain + the use of ACE_TCHAR for the argv parameter to main(). Thanks + to Johnny Willemsen for reporting this. + + * ace/OS_Dirent.inl (opendir): Replace char * const cast with + ACE_TCHAR * const cast. Thanks to Nick Pratt for reporting + this. + + * tests/Upgradable_RW_Test.cpp (main): Fixed the test to avoid + dividing by 0 and also initialized all pointers to NULL. Thanks + to Johnny Willemsen for reporting this. Thanks fixes BudID 650. + +Tue Nov 13 15:25:04 2001 Douglas C. Schmidt + + * ace/ACE.h (ACE): Clarified what the time_len parameter is used for. + Thanks to Tompa for reporting this. + +Sun Nov 11 09:50:52 2001 Douglas C. Schmidt + + * ace/Naming_Context.cpp (info): Added an ACE_UNUSED_ARG to + silence warning about "length" parameter and changed buf from + char to ACE_TCHAR. Thanks to Johnny Willemsen for reporting + this. + + * tests/Aio_Platform_Test.cpp: The argv parameter of main() should + be ACE_TCHAR rather than char. Thanks to Johnny Willemsen for + reporting this. + +Thu Nov 15 15:43:20 2001 Craig Rodrigues + + * ace/Naming_Context.cpp (info): Wrapped sprintf() arguments with + ACE_LIB_TEXT. Fix supplied by Johnny Willemsen. + +Thu Nov 15 12:43:31 2001 Nanbor Wang + + * docs/wchar.txt: Added a writeup for ACE_LIB_TEXT and ACE_TEXT + from "the authority." + +Wed Nov 14 21:36:42 2001 Ossama Othman + + * docs/usage-bugzilla.html: + + Corrected link to the DOC Center's bugzilla site. + +Wed Nov 14 23:11:59 2001 Craig Rodrigues + + * ace/Naming_Context.cpp (info): Fixed Unicode build problems + by consistently using ACE_TCHAR instead of char, and by + using Unicode aware string functions in ACE_OS_String + instead of ACE_OS. + + * ace/Svc_Conf_l.cpp: Default intialized ace_yy_c_buf_p to ACE_TCHAR + instead of char. Default initialized ace_yy_cp, ace_yy_bp to 0. + + * ace/Svc_Conf_y.cpp: Wrap string literals passed to ace_yyerror + with ACE_LIB_TEXT(). + +Wed Nov 14 06:38:41 2001 Balachandran Natarajan + + * docs/ACE-bug-process.html (HREF): Changed references from ace.cs + to deuce.doc. Thanks to Johnny Willemsen for reporting this. + +Tue Nov 13 15:04:15 2001 Carlos O'Ryan + + * html/Stats/index.shtml: + * html/Stats/detailed_performance.shtml: + Improved documentation about the test location, ORB, and network + configuration used. Thanks to David Yongqiang Wang + for pointing out the problems. + +Tue Nov 13 11:46:11 2001 Chris Cleeland + + * tests/Collection_Test.cpp (iterate_const): Fixed ACE_DEBUG print + statements that were accessing the element of the unbounded set + as an int rather than an UglyThing. Thanks to Ossama for + pointing this out. + +Mon Nov 12 11:41:35 2001 Ossama Othman + + * ace/SSL/SSL_SOCK_Stream.cpp (send, recv): + + In the va_arg versions of these methods, do not use + send/recv_n() to as the underlying send/recv() method. It + forces unnecessary blocking. + + Corrected return value semantics in versions of these methods + that use loop to send/receive multiple buffers. If data was + sent or received than do not return -1 on error. Instead return + the amount of bytes sent/received. This is necessary to allow + the caller to keep track of sent or received data. [Bug 882] + +Sun Nov 11 23:50:00 2001 Craig Rodrigues + + * tests/Date_Time_Test.cpp: Remove argv variable from + main() to eliminate unused variable compiler warning. + * tests/Arg_Shifter_Test.cpp: Same. + +Sun Nov 11 10:00:56 2001 Ossama Othman + + * ace/SSL/SSL_SOCK_Stream.h (ACE_SSL_SOCK_Stream): + + Removed unused class members. + + * ace/SSL/SSL_SOCK_Stream.cpp (sendv): + + If an error occurs but data was sent on a previous loop + iteration then return the amount of bytes sent, not the error. + This extends previous check for EWOULDBLOCK and ETIME. All + errors are now caught. The caller must always know if any data + was successfully sent. [Bug 882] + + Do not continue on to the next loop iteration if the amount of + data sent was less than the amount data given. This avoids a + subtle problem where "holes" in the data stream would occur if + partial sends of a given buffer in the iovec array occured. + [Bug 882] + +Sun Nov 11 07:58:07 2001 Ossama Othman + + * ace/SSL/SSL_SOCK_Stream.cpp (sendv): + + Fixed unused variable warnings. + +Sat Nov 10 23:25:50 2001 Ossama Othman + + * bin/auto_run_tests.lst: + + Added new SSLIOP "Big_Request" test to the list of regression + tests to automatically run during the nightly builds. + +Sat Nov 10 22:13:54 2001 Krishnakumar B + + * ace/Svc_Conf_l.cpp: + * ace/Svc_Conf_y.cpp: + * ace/Svc_Conf_Tokens.h: + + Regenerated the files after fixing the warnings that showed up + under Sun CC Forte Update. They were caused because Sun CC's + preprocessor doesn't like the #line statements generated by flex + and bison. Since these files are not modified on a daily basis, + people debugging the lexer can turn it on by removing the flags + '-l' and '-L' to bison and flex respectively in the Makefile. + For now, this removes a lot of noise. + + * ace/Makefile: + + Added flags '-l' to bison and '-L' to flex. + + * etc/Svc_Conf_l.cpp.diff: + + Regenerated the diff to match the current version. + + * etc/Svc_Conf_y.cpp.diff: + + This file held the stuff which have been obsoleted by the move + to use bison. So removed this file to avoid causing confusion in + the future. Thanks to Ossama for pointing this out. + + Let's see some green :-) + +Sat Nov 10 19:27:36 2001 Ossama Othman + + * ace/SSL/SSL_Accept_Handler.cpp (ssl_accept): + * ace/SSL/SSL_Connect_Handler.cpp (ssl_connect): + + If data is still buffered within OpenSSL's internal buffer, then + force the Reactor to invoke the event handler (with + the appropriate mask) before waiting for more events + (e.g. blocking on select()) by returning a value greater than + one. All pending data must be processed before waiting for more + events to come in on the SSL handle. + + * ace/SSL/SSL_SOCK_Stream.h (reactor, handler, notify): + + These methods are no longer needed. Removed them. + + (sendv): + + Added missing timeout parameter. + + * ace/SSL/SSL_SOCK_Acceptor.cpp (ssl_accept): + * ace/SSL/SSL_SOCK_Connector.cpp (ssl_connect): + * ace/SSL/SSL_SOCK_Stream.i (notify, recv_i, send_i, close): + + Reverted code that notify()ed the Reactor if data was still + pending in OpenSSL's internal buffers. The idea was to force + the reactor to call the appropriate event handler before polling + for events (e.g. blocking on select()). However, notifications + are not dispatched until after events are polled which meant + that there is no point in notify()ing the Reactor. + + * ace/SSL/SSL_SOCK_Stream.cpp (reactor, handler): + + These methods are no longer needed. Removed them. + + (sendv): + + Fixed/improved the writev() semantics and emulation in this + method. Previously, if an iov_base buffer was successfully + sent, that success was not reported to the caller if subsequent + sends in the emulation loop failed. The caller would end up + thinking that no part of the message was sent. The improved + semantics are now the following if the underlying send() call + returns with an EWOULDBLOCK or ETIME error condition: + + - If no data was sent, then return -1. + - If some data was sent on a previous loop iteration then + return the number of bytes successfully sent. + + In both cases, errno is unchanged. [Bug 882] + + Incidentally, this fixes a problem in TAO's SSLIOP pluggable + protocol when sending very large requests. Thanks to Andrew + Finnell for providing an + example that exhibited the problem. + + Lastly, the missing timeout support has been added. The timeout + is decremented on each loop iteration. + +Sat Nov 10 17:16:59 2001 Nanbor Wang + + * ace/OS.cpp (fopen): Removed redundant parentheses. + +Sat Nov 10 09:29:48 2001 Douglas C. Schmidt + + * ace/OS.i (pipe): Replaced the _pipe() call on Win32 with the + CreatePipe() call. Thanks to Bo Balders + for reporting this. + + * ace/Log_Msg.cpp (log): The "format" string was omitted. Thanks + to Martin Krumpolec for noticing this. + +Sat Nov 10 08:48:24 2001 Douglas C. Schmidt + + * ace/Arg_Shifter.{h,cpp}: Added a new constructor to ACE_Arg_Shifter + so that it can handle both const char ** and char ** arguments. + +Fri Nov 9 07:42:41 2001 Douglas C. Schmidt + + * ace/Arg_Shifter.cpp: Made the argv parameter to ACE_Arg_Shifter + a "const" ACE_CHAR **. + + * tests/Arg_Shifter_Test.cpp (main): Added "const" to the + args local variable to remove a warning from SunC++. + +Fri Nov 9 11:23:01 2001 Chris Cleeland + + * tests/Collection_Test.cpp: Fixed up things that caused problems + on several platforms. Added the ARRAY tests back in. + +Thu Nov 8 14:52:39 2001 Steve Huston + + * ace/Log_Msg.h: Added a new 'M' option to print out the name of + the log priority. Thanks to Vladimir Chovanec + for reporting this. + +Thu Nov 8 10:41:44 2001 Douglas C. Schmidt + + * ace/OS_String.h: Enhanced the documentation so that it explains + the differences between ACE_OS::strsncpy() and ACE_OS::strcpy() + more precisely. Thanks to Alain Decamps for contributing this. + + * ace/Naming_Context.{h,cpp}: The info() method should have + ACE_TCHAR ** rather than char **. Thanks to Johnny Willemsen + for reporting this. + + * ace/OS.cpp: Added support for Borland's idiosyncratic _wfdopen() + method. Thanks to Johnny Willemsen for reporting this. + +Wed Nov 7 05:17:03 2001 Douglas C. Schmidt + + * ace/Message_Queue_T.{h,cpp}: Changed the typo DEFUALT_PRIORITY + to DEFAULT_PRIORITY. + + * ace/OS.i: In BCB the _wtempnam() has the following signature: + wchar_t *_wtempnam(wchar_t *dir, wchar_t *prefix) + + This means that the arguments must be made non-const by a cast. The + fix is to add some defines so that with BCB and no wchar the + _tempnam is used (with the casts) and with BCB and wchar then + the _wtempnam is used with the casts. Thanks to Johnny + Willemsen for this fix. + +Thu Nov 8 14:52:39 2001 Steve Huston + + * ace/Arg_Shifter.h: Doxygen-ized some comments. + + * ace/Date_Time.i (update): Add 1900 to years value to convert from + localtime's years-since-1900 value to now. Add 1 to the month + to convert localtime's 0-11 range to 1-12. Thanks to Syed + Wasim Ali for reporting this. + + * tests/Date_Time_Test.(cpp dsp icc): New test for ACE_Date_Time. + + * tests/tests.dsw: + * tests/tests.icp: + * tests/Makefile[.bor]: Added Date_Time_Test. + + * tests/run_test.lst: Added Arg_Shifter_Test and Date_Time_Test. + +Thu Nov 8 11:53:00 2001 Steve Huston + + * tests/Arg_Shifter_Test.(cpp dsp icc): New test for ACE_Arg_Shifter. + + * tests/tests.dsw: + * tests/tests.icp: + * tests/Makefile[.bor]: Added Arg_Shifter_Test. + +Thu Nov 8 13:05:12 2001 Chad Elliott + + * include/makeinclude/platform_irix6.x_sgic++.GNU: + + Added an option to suppress warnings about #pragma pack. + +Thu Nov 8 10:43:22 2001 Chad Elliott + + * ace/OS.cpp: + + Correct a build problem for GHS on Win32. + +Wed Nov 07 13:50:39 2001 Nanbor Wang + + * ace/Task_T.h (ACE_Task): Decorated ACE_Task with ACE_Export to + avoid VC7's internal compiler error. Thanks to Darrell for + submitting the change. + +Wed Nov 7 10:59:00 2001 Craig Rodrigues + + * include/makeinclude/platform_sunos5_g++.GNU: Append -D_REENTRANT + to CPPFLAGS if threads=1 + +Wed Nov 7 08:09:20 2001 Balachandran Natarajan + + * bin/nightlybuilds/builds.lst: Changed the name CC5 build as + CC51. It uses version 5.1 of the compiler anyway. + +Tue Nov 6 14:39:28 2001 Douglas C. Schmidt + + * ace/SString.i (find), + * ace/Local_Name_Space_T.cpp (resolve_i): Fixed "off-by-one" + bugs with ACE_OS::strscpy(). Thanks to Alain Decamps + for contributing this. + +Tue Nov 6 13:25:40 2001 Chris Cleeland + + * tests/Collection_Test.cpp: Committed an old change that uses an + actual class as the element in the Unbounded_Set rather than an + int. I wrote this to get a better understanding of how the + iterator and accessors on the iterator worked. + + * tests/SString_Test.cpp (main): Added a test for the rep() method + that insures that the char array returned is equivalent to the + string in the ACE_CString from which it's obtained. + +Mon Nov 5 10:12:01 2001 Douglas C. Schmidt + + * ace/OS.cpp, + * ace/Local_Name_Space_T.cpp, + * ace/FILE_Addr.cpp, + * ace/Acceptor.cpp, + * ace/ACE.cpp: Changed uses of strncpy() to ACE_OS::strsncpy(). + Thanks to Alain Decamps for these fixes. + +Sun Nov 4 12:11:31 2001 Douglas C. Schmidt + + * ace/Reactor.cpp: Enhanced all the Reactor's event loop methods + to first check and see if the Reactor's been deactivated and to + bailout immediately in this case. Thanks to Don Hinton for + suggesting this. + + * ace/Reactor.i: Moved the reactor_event_loop_done() method from + the *.cpp file into the *.i file and made inlineable. + + * ace/Select_Reactor_T.cpp: Be more careful about error handling in the + dispatch_notification_handlers() method. If a failure occurs, + when dispatch_notifications() is called, return -1, rather than + erroneously "incrementing" the count of the number of handlers + dispatched. Thanks to Don Hinton for reporting this. + +Sat Nov 3 11:15:43 2001 Douglas C. Schmidt + + * The following fixes are from Joachim Achtzehnter : + + In ace/config-pharlap.h we had to explicitly #undef + ACE_HAS_WCHAR after the #include "ace/config-win32.h" + directive. Without this change the resulting DLL depended on + several wide character versions of Win32 system functions, such + as _CreateMutexW. At least some of these dependencies were + caused by ace/OS.i. + + In ace/Log_Msg.cpp we had to add !defined(ACE_HAS_PHARLAP) to a + few more places in addition to the ones Bruce Trask had posted + to avoid reference to the NT Eventlog functionality. + + At the top of ace/Log_Msg_NT_Event_Log.h and + ace/Log_Msg_NT_Event_Log.cpp we added !defined(ACE_HAS_PHARLAP) + to completely bypass the contents of these two files. + + * ace/DEV_Addr.i (addr_to_string): + * ace/Local_Tokens.i (name): + * ace/Module.i (name): + * ace/OS.i (asctime_r): + * ace/SPIPE_Addr.i (addr_to_string): + * ace/UNIX_Addr.i (addr_to_string): + * ace/SString.i (rep): Changed uses of strncpy() to ACE_OS::strsncpy(). + Thanks to Alain Decamps for these fixes. + +Fri Nov 2 14:38:49 2001 Douglas C. Schmidt + + * ace/Task.h (ACE_Task_Base): Clarify the meaning of the put() + hook method. Thanks to Tommy Svensson + for motivating this. + +Mon Nov 5 14:23:12 2001 Chad Elliott + + * ace/ACE.cpp: + + Remove a build warning for gcc 2.95.3 on SunOS 5.6. + +Mon Nov 5 14:21:30 2001 Chad Elliott + + * bin/nightlybuilds/builds.lst: + + Added the HP-UX nightly build back to the list. + +Mon Nov 5 13:31:15 2001 Chad Elliott + + * ace/ACE.cpp: + + Fix a build warning for 64-bit HP-UX. + + * ace/Active_Map_Manager_T.i: + + Cast the free list id to ACE_UINT32 to match up with the + slot_index () type. On 64-bit HP-UX, the free list id type + (size_t) is a 64 bit number and must be cast down to 32 bits. + Otherwise, the slot_index is cast up to 64 bits and does not give + the correct results. + + * include/makeinclude/platform_hpux_aCC.GNU: + + Add a -L./ to allow the 64-bit HP-UX builds to link properly. + +Mon Nov 5 11:17:20 2001 Carlos O'Ryan + + * bin/auto_compile: + Add support for the new status.txt file in the scoreboard. + +Mon Nov 5 13:02:50 2001 Chad Elliott + + * ace/config-hpux-11.00.h: + + Added #define of ACE_HAS_CHARPTR_DL. This corresponds with the + declaration of dlopen(char*,unsigned int). + + * ace/OS.cpp: + + Changed the default thread scope to system (similar to Linux). + Process thread scope is not supported in HP-UX. + +Sun Nov 04 11:18:31 2001 Nanbor Wang + + * ace/OS.cpp (fopen): Changed to forward call to fopen instead of + _fopen on non-borland compilers when not using UNICODE. This + change allows the code to compile on Win98. Thanks to Jstwo + for submitting the fix. + +Thu Nov 1 16:21:51 2001 Chris Cleeland + + * bin/auto_run_tests.pl: Added snippet of code that puts the + current directory ('.') in the PATH environment variable since + auto_run_tests.pl depends on the current directory being there. + +Thu Nov 1 15:49:04 Balachandran Natarajan + + * include/makeinclude/platform_osf1_4.x_cxx.GNU: Moved the + CXX_VERSION definition to the global scope. + + * include/makeinclude/platform_tru64_cxx.GNU: Added + -D_PTHREAD_ENV_DECCXX flag to the CPPFLAGS. This is done only + for v5.1, 1885. The pthreads.h in 1885 is messed up. The + conditional include of c_asm.h is busted for DECCXX and + v1885. Hence the change. We need to do this to protect ACE and + TAO applications on this platform and compiler + combinations. Thanks to Don Hinton for + reporting the problem. + +Thu Nov 1 14:25:52 2001 Jeff Parsons + + * ace/config-win32-borland.h: + + Added fix sent in by Chris Kohlhoff + to ACE_CC_PREPROCESSOR_ARGS to enable the recognition of a + filename to which the preprocessor output is to be directed. + There is also a corresponding fix in TAO_IDL/driver/drv_preproc.cpp + that carries out the redirection. + +Thu Nov 1 10:27:21 2001 Ossama Othman + + * ace/Select_Reactor_Base.h (open): + * ace/Select_Reactor_T.h (ACE_Select_Reactor_T, open): + + Added a note about the "size" of the Select_Reactor on Unix + platforms. On Unix platforms, the size parameter should be as + large as the maximum number of file descriptors allowed for a + given process. This is necessary since a file descriptor is + used to directly index the array of event handlers maintained by + the Reactor's handler repository. Direct indexing is used for + efficiency reasons. + +Thu Nov 1 06:38:30 2001 Douglas C. Schmidt + + * ace/ACE.cpp: Fixed some minor formatting problems so that + format_hexdump() works properly. Thanks to Kyle Brost + for reporting this. + + * ace/config-win32.h: Include the config-cygwin32.h file when + __CYGWIN32__ is enabled. Thanks to Johnny Willemsen for + reporting this. + + * ace/Synch.i (remove): Added some casts to make certain compilers + happy? Thanks to Guillaume Renaud + for reporting this. + + * ace/OS.i: Updated the Win32 version of ACE_OS::llseek(). Thanks to + Doron Rajwan for reporting this. + +Wed Oct 31 11:25:40 2001 Douglas C. Schmidt + + * ace/OS.h: The ACE_OS::llseek() method must be static! Thanks to + Doron Rajwan for reporting this. + +Tue Oct 30 08:30:16 2001 Douglas C. Schmidt + + * ace/RB_Tree.cpp (operator=): Make sure to check for self-assignment + in the operator=. Thanks to Johnny Willemsen for reporting + this. + +Mon Oct 29 05:23:56 2001 Douglas C. Schmidt + + * ace/Naming_Context.{h,cpp}: Moved ACE_STATIC_SVC_REQUIRE from the + .h file to the .cpp file to avoid multiple definitions. Thanks to + Boris Kaminer for reporting this. + +Sun Oct 28 10:05:32 2001 Douglas C. Schmidt + + * ace/config-macosx.h: + * include/makeincludes/platform_macosx.GNU + Added new fixes to get this to work on MacOS X. Thanks to John + Michael Zorko and Fikri Pribadi + for contributing this. + +Wed Oct 24 23:59:13 2001 Douglas C. Schmidt + + * ace/Configuration_Import_Export.cpp: Fixed a bug where a + check of a pointer was made rather than the character pointed to + by the pointer. Thanks to Juan Jose Comellas + for reporting this. + +Wed Oct 31 16:45:07 2001 Ossama Othman + + * ace/OS.h (llseek): + + Made ACE_OS::llseek() a static method, as it was originally + intended to be. Thanks to Doron Rajwan for + pointing out the problem. + +Tue Oct 30 22:53:57 2001 Ossama Othman + + * ace/Svc_Conf_l.cpp: + + Fixed incorrect #line preprocessor directives. + + * etc/Svc_Conf_l.cpp.diff: + + Regenerated this diff so that it includes recent updates. + +Mon Oct 29 20:12:40 2001 Ossama Othman + + * tests/run_test.lst: + + Added the Proactor test to the list of one-button tests to run. + +Mon Oct 29 20:04:40 2001 Ossama Othman + + * tests/Proactor_Test.cpp: + + More patches from Alexander Libman. The Proactor_Test appears + to finally work on Linux. + +Mon Oct 29 17:49:21 2001 Balachandran Natarajan + + * ace/TP_Reactor.cpp: Added some error checks at places where + token where acquired. + +Mon Oct 29 16:59:58 2001 Balachandran Natarajan + + * ace/TP_Reactor.cpp (acquire_token): The acquire_token () called + acquire with a sleep hook. It was wrong. It should just unblock + the thread by sending notify. A bad cut and paste error + :(. Thanks to Graeme Clark for reporting + this. This closes [BUGID 1077]. + +Sun Oct 28 20:36:56 2001 Ossama Othman + + * ace/Map_T.i (clone): + + Fixed syntax errors. + + * ace/Svc_Handler.cpp (new): + + Reverted Michael's change. It incorrectly altered the semantics + of the new operator, particularly when compiling with native + exception support enabled. Fixes a warning. + +Sun Oct 28 16:44:20 2001 Ossama Othman + + * ace/Timer_Hash_T.cpp (ACE_Timer_Hash_T): + + Corrected syntax error that was introduced in the changes + described below by removing extraneous trailing bracket. + +Sun Oct 28 13:15:00 2001 Michael Kircher + + * ace/ACE.i: + * ace/Activation_Queue.cpp: + * ace/Bound_Ptr.i: + * ace/Configuration.cpp: + * ace/Configuration_Import_Export.cpp: + * ace/Containers_T.cpp: + * ace/Future.cpp: + * ace/Handle_Gobbler.h: + * ace/Local_Tokens.i: + * ace/MEM_SAP.i: + * ace/Map_T.i: + * ace/Message_Block.cpp: + * ace/OS_Errno.cpp: + * ace/Object_Manager.cpp: + * ace/Obstack_T.cpp: + * ace/Refcounted_Auto_Ptr.i: + * ace/Remote_Tokens.i: + * ace/Strategies_T.cpp: + * ace/Stream.cpp: + * ace/Svc_Handler.cpp: + * ace/Synch_T.cpp: + * ace/TLI.cpp: + * ace/Timer_Hash_T.cpp: + * ace/Timer_Queue_T.cpp: + * ace/Unbounded_Queue.cpp: + * ace/Unbounded_Set.cpp: + + Changed almost all direct usages of operator new in ACE to use + ACE_NEW_RETURN (Exceptions is Dump_T.h). In one case in + Stream.cpp the semantics changed slightly if operator new would + have been overloaded, see the "@@ Michael" comment. + + When new got used with placement most of the usages got + replaced with ACE_NEW_MALLOC_RETURN. In some cases as in + Malloc_T.cpp, Map_Manager.cpp, PI_Malloc.i, Array_Base.cpp + special cases exist, where the macros would have incurred + different semantics and performance penalties. + +Fri Oct 26 07:37:43 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Quoter example will not run in + minimum_corba builds. + +Wed Oct 24 08:04:36 2001 Balachandran Natarajan + + * ace/Reactor.h: Improved the documentation of the + end_reactor_event_loop (). + +Tue Oct 23 10:04:25 2001 Ossama Othman + + * tests/Proactor_Test.cpp: + + Replaced uses of a static global lock with the + ACE_Static_Object_Lock singleton. + + Fixed incorrect uses of the "%l" format specifier. "%d" is the + expected format specifier. + + (Acceptor): + + Initialize the "sessions_" member in the base member initializer + list. Corrects a problem where the session number initially + contained a "garbage" value. + +Mon Oct 22 17:55:00 2001 Craig Rodrigues + + * ace/Svc_Conf_l.cpp: Remove include of stdlib.h, fix g++/Solaris + build. + +Mon Oct 22 15:54:29 2001 Steve Huston + + * ace/config-hpux-10.x-hpc++.h: Remove hard-coded setting of + ACE_HAS_EXCEPTIONS. It is controlled by platform_hpux_aCC.GNU. + +Mon Oct 22 15:50:35 2001 Balachandran Natarajan + + * THANKS: Added Chris Hughes name to the Hall of Fame + +Sun Oct 21 16:44:41 2001 Ossama Othman + + * tests/Proactor_Test.cpp (disable_signal): + + Fixed warnings regarding a method that "hid" virtual function + with the same name, in addition to unused argument warnings. + +Sun Oct 21 15:22:57 2001 Ossama Othman + + * tests/Proactor_Test.cpp: + + Fixed warning about deprecated conversion of "const char *" to + "char *" exhibited by GCC 3.0.x builds. + +Sun Oct 21 12:50:39 2001 Douglas C. Schmidt + + * ace/LSOCK.cpp: The ACE_LSOCK::recv_handle() was returning success + without setting the I/O handle. Thanks to Rick Ohnemus + for reporting this. + + * ace/config-freebsd-pthread.h: Changed + #if (__FreeBSD_version > 430000) to + #if (__FreeBSD_version > 440000) to get ACE to work with FreeBSD 4.4. + Thanks to Gu Song for reporting this. + +Fri Oct 19 06:44:17 2001 Douglas C. Schmidt + + * examples/Reactor/WFMO_Reactor/test_window_messages.cpp: + Don't use a global Event_Handler object since this violates the + design rules for the ACE_Reactor. + +Sun Oct 21 13:39:27 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added the Quoter example in + $TAO_ROOT/examples to the list of tests in the daily builds. + +Thu Oct 18 20:56:53 2001 Ossama Othman + + * tests/Proactor_Test.cpp: + + Added no-op main() function for platforms that do not support + asynchronous IO. + +Thu Oct 18 22:46:09 2001 Balachandran Natarajan + + * ace/TP_Reactor.h: + * ace/TP_Reactor.cpp: Fixed warnings in Sun CC and TRU 64 builds. + +Thu Oct 18 20:42:55 2001 Ossama Othman + + * tests/Proactor_Test.cpp: + + Fixed Unicode build errors. + +Thu Oct 18 19:52:44 2001 Craig Rodrigues + + * ace/SString.h: clarify example in comments to ACE_Tokenize + so that constant strings are not passed in its constructor. + + * examples/OS/Process/process.cpp: do not pass constant strings + to ACE_Tokenize constructor. Thanks to + Werner Buchert and + Don Hinton . + +Wed Oct 17 23:56:45 2001 Ossama Othman + + * tests/Proactor_Test.cpp: + * tests/Proactor_Test.dsp: + + Proactor test contributed by Alexander Libman + . + + * tests/tests.dsw: + + Added Proactor_Test project to the tests workspace. + +Wed Oct 17 18:59:53 2001 Christopher Kohlhoff + + * include/makeinclude/install.bor: + Borland makefile fix to ensure that, when doing the install + target, core executables are built correctly if they don't + already exist. + +Wed Oct 17 09:15:10 2001 Douglas C. Schmidt + + * ace/config-linux-common.h: Clarified that this file should + not be included directly! Thanks to Suresh N + for reporting this. + +Wed Oct 17 16:00:19 2001 Balachandran Natarajan + + * THANKS: Added Graeme Clark to the Hall of Fame. + +Wed Oct 17 15:49:20 2001 Balachandran Natarajan + + * ace/TP_Reactor.cpp: + * ace/TP_Reactor.h: Added remove_handler () calls to the + TP_Reactor. Before this, the call on the reactor used to be + handled by the Select_Reactor's implementation. The + implementation has a problem. It tries to call handle_close () + (an upcall) as one of the calls after holding the token. This + was asking for trouble. This could lead to deadlocks as + mentioned in [BUG ID 1055]. + + The method in the TP_Reactor now calls remove_handler () on the + Select_Reactor (its base class) with a DONT_CALL flag. Then it + calls handle_close () on the Event_Handler if the user did not + pass in the DONT_CALL mask. This two step process would get + around the problem that was mentioned before. Thanks to Graeme + Clark for reporting the problem and + testing this fix. + + This should close [BUG ID 1055]. + +Wed Oct 17 10:40:17 2001 Ossama Othman + + * ace/SSL/SSL_Accept_Handler.cpp (ssl_accept): + * ace/SSL/SSL_Connect_Handler.cpp (ssl_connect): + + If errno is set to EWOULDBLOCK for the SSL_ERROR_SYSCALL case, + then continue the connection establishment loop. Do not return + right away. Fixes non-blocking connection establishment on AIX. + Thanks to Vladimir Chovanec for + providing this fix. + + * ace/SSL/SSL_SOCK_Stream.h (notify): + + Made this method protected. It isn't intended to be used + internally by the ACE_SSL_SOCK_Stream class. + +Wed Oct 17 12:15:15 2001 Chris Cleeland + + * ace/Select_Reactor_T.cpp (handle_error, check_handles): Add + vxworks to the ever-growing list of OSs which return + unpredictable values in errno when there's a bad file descriptor + in a select mask. [Bug 1058]. + + Thanks to Dave Arndt , Tad Hetke + , and Erik Johannes + for tracking down and providing this fix. + +Tue Oct 16 23:08:27 2001 Ossama Othman + + * ace/Svc_Conf.h (ACE_Svc_Conf_Param): + + Added a new ACE_Obstack attribute that is passed down to the + parser and scanner. This obviates the need for the global + pointer to the ACE_Obstack that was formally used, which in turn + avoids a race condition. + + (ace_obstack): + + No longer a need to maintain a global pointer to the ACE_Obstack + instance used during parsing/scanning. + + * ace/Svc_Conf.y: + * ace/Svc_Conf.l: + + Retrieve the Obstack from the parameter passed down to yyparse() + and yylex() instead of using the (now non-existent) global + instance. This is part of a race condition fix. + + * ace/Svc_Conf_y.cpp: + * ace/Svc_Conf_l.cpp: + + Updated to pull in the changes made to the source files from + which these files were generated. + + * ace/Service_Config.cpp (process_directives_i): + + The global ACE_Obstack pointer used during each Service + Configurator parse has been removed. An ACE_Obstack instance is + now passed down to the parser and scanner in a + reentrant/thread-safe manner via the new ACE_Svc_Conf_Param + parameter. As such, there is no longer any need to maintain a + global pointer to the ACE_Obstack instance in use, nor is it + necessary to store/restore the previous value when performing + nested or parallel Service Configurator directive processing. + This fixes a race condition that was causing some memory + corruption when parsing Service Configurator directives in + parallel. + + Note that the ACE_Obstack is now instantiated on the stack + rather than the heap, thus improving Service Configurator + directive processing performance. + +Mon Oct 15 23:16:55 2001 Ossama Othman + + * ace/Service_Config.h (process_directives_i): + + Updated the signature of this method to accept a parameter that + will eventually passed to the parser and the scanner. + + * ace/Service_Config.cpp: + + No need to include "ace/Svc_Conf_Lexer_Guard.h" and + "ace/Object_Manager.h". + + (process_directives_i): + + Updated the signature of this method to accept a parameter that + will eventually passed to the parser and the scanner. + + Pass the "ACE_Svc_Conf_Param" parameter to the yyparse() call. + This is reentrant/thread-safe. + + Check the error count found in the "ACE_Svc_Conf_Param" object. + It's count is incremented in a thread-safe/reentrant manner. + + (process_directive, process_directives): + + The ACE_Svc_Conf_Lexer_Guard and its accompanying + synchronization has been moved to the generated scanner code. + This makes locking finer grained. Specifically, instead of + holding a lock for the duration of the scope within which + service configurator directive parsing and scanning is + performed (e.g. for the duration of the yyparse() call), the + lock is only held for the duration of the scope where service + configurator directive scanning occurs (i.e. the entire yylex() + call is synchronized). This is part of the core fix that + corrects a deadlock that occurred when activating an ACE_Task, + in conjunction with the singleton instance of the + ACE_Thread_Manager, during Service Object initialization. + [Bug 1036] + + * ace/Service_Config.i: + + Cosmetic update. + + * ace/Svc_Conf.h: + + Added declaration and method definitions for the + ACE_Svc_Conf_Param class. Instances of this class contain the + state used when parsing/scanning a given service configurator + file or service configurator directive. + + (ACE_SERVICE_DIRECTIVE_STACK_DEPTH): + + There is no longer any hard-coded limit on the maximum depth + nested service configurator directives may be processed. Only + process resource limits limit the maximum nesting depth. + + (ace_yyparse, ace_yylex): + + Updated the parser and lexer entry points to accept an + additional parameter, i.e. a pointer to an ACE_Svc_Conf_Param + object. + + (ace_yy_push_buffer, ace_yy_pop_buffer): + + Pass a pointer to the buffer that will be "switched" in our out + when processing nested service configurator directives those + that are processed in parallel. + + * ace/Svc_Conf.l: + + Removed array that implemented the service configurator + directive stack. The "stack" is now implemented using the + function call stack itself. Hence there is no hard-coded limit + to the stack size. + + Removed all references to ACE_{LPAREN, RPAREN, LBRACE, RBRACE, + COLON, STAR}. Just return their corresponding symbolic integer + constants (e.g. ACE_COLON --> ':'). + + Increment error and line count in the ACE_Svc_Conf_Param object + passed to the yylex() function from yyparse(). This improves + reentrance/thread-safety when tracking error counts. + + (yy_push_buffer, yy_pop_buffer): + + Pass a pointer to the buffer that will be "switched" in our out + when processing nested service configurator directives those + that are processed in parallel. + + * ace/Svc_Conf.y: + + Removed all references to ACE_{LPAREN, RPAREN, LBRACE, RBRACE, + COLON, STAR}. Just use their corresponding symbolic integer + constants (e.g. ACE_COLON --> ':'). + + Increment error and line count in the ACE_Svc_Conf_Param object + passed to the yylex() function from yyparse(). This improves + reentrance/thread-safety when tracking error counts. + + * ace/Svc_Conf_Lexer_Guard.h: + + Store a pointer the lexer buffer currently being scanned. + + * ace/Svc_Conf_Lexer_Guard.cpp: + + Updated constructor to accept a pointer to an ACE_Svc_Conf_Param + object. If the buffer in that object is zero, it will be + initialized. + + * ace/Svc_Conf_l.cpp: + * ace/Svc_Conf_y.cpp: + * ace/Svc_Conf_Tokens.h: + + Regenerated these files in order to pull in the updates made to + their corresponding source files (i.e. Svc_Conf.{l,y}). + +Mon Oct 15 11:26:39 2001 Steve Huston + + * examples/C++NPv2: New directory for examples in "C++ Network + Programming, Volume 2: Systematic Reuse with ACE and Frameworks" + Moved these changes to the new directory, and reverted the + C++NPv1 files to their ACE 5.2 state: + Sun Oct 14 17:05:14 2001 Douglas C. Schmidt + Tue Oct 9 07:46:20 2001 Douglas C. Schmidt + +Sun Oct 14 17:05:14 2001 Douglas C. Schmidt + + * examples/C++NPv1/Logging_Handler.{h,cpp}: Changed log_file_ from + a reference to a pointer so that it can be initialized + correctly. Thanks to Kitty for reporting this. + +Fri Oct 12 14:54:58 2001 Craig Rodrigues + + * ace/OS.i: + Remove extraneous check for macro ACE_HAS_WINSOCK2_GQOS, + which was breaking various builds under Windows. + Thanks to Jeff McNiel for pointing it out. + +Fri Oct 12 12:15:22 2001 Carlos O'Ryan + + * bin/nightlybuilds/builds.lst: + The QNX machine is no longer running that OS, plus attempts to + bring it back to life failed. The build is removed until + further notice. + +Thu Oct 11 17:52:32 2001 Priyanka Gontla + + * ace/SOCK_Dgram_Mcast.cpp: + Somehow the file didnt get committed yesterday. So, committing + the following change now. + + Wed Oct 10 16:56:18 2001 Priyanka Gontla + +Thu Oct 11 10:57:58 2001 Carlos O'Ryan + + * ace/RB_Tree.h: + * ace/RB_Tree.i: + * ace/RB_Tree.cpp: + Reverted to the 5.2 release state. The proposed changes were + breaking some builds, and they were not bug fixes in any case. + +Wed Oct 10 16:56:18 2001 Priyanka Gontla + + * ace/SOCK_Dgram_Mcast.cpp: + Reverted the following change as it ended up with some problems + for multicast services. + + Fri Oct 5 14:40:03 2001 Balachandran Natarajan + +Wed Oct 10 06:16:52 2001 Douglas C. Schmidt + + * ace/Activation_Queue.{h,cpp}: Added support for two ACE_Allocator that + will control how the message blocks and data blocks are + allocated. Thanks to Gil Rapaport + for contributing this. + + * examples/Reactor/WFMO_Reactor/test_apc.cpp (main): + * examples/Reactor/WFMO_Reactor/test_abandoned.cpp (main): Don't + use a global Event_Handler since this violates the design rules + for the ACE_Reactor. Thanks to Heping He + and Hartmut Quast + for reporting this and to Irfan for + suggesting where the problem arose. + +Tue Oct 9 07:46:20 2001 Douglas C. Schmidt + + * examples/C++NPv1/Logging_Handler.h: Added a new constructor to + class Logging_Handler that just takes an ACE_SOCK_Stream. We + need to use this in C++NPv2. + + * ace/Message_Queue_T.cpp (wait_not_full_cond): Thanks to Leo Kov + for reporting this. + + * ace/TTY_IO.cpp (control): Inserted some useful + ACE_OS::set_errno_to_last_error() calls. Also, for Win32 made + readtimeoutmsec == 0 cause no timeout, whereas readtimeoutmsec + == MAXDWORD causes infinite timeout. Thanks to Lars Steubesand + for reporting this. + +Mon Oct 8 20:19:44 2001 Nanbor Wang + + * examples/DLL/test_dll.cpp: There's no need to specify + ACE_DLL_SUFFIX as it prevent ACE_Lib_Find to figure out the + correct DLL name. + + The ACE_ERROR_RETURN macro store and reset the errno so there's + no need to use dll.error() with it. Changed to use "%p" to + display the error. + + Thanks to Heping He for reporting + the problem. + +Mon Oct 8 11:15:21 2001 Angelo Corsaro + + * ace/RB_Tree.h (class ACE_RB_Tree_Node): + * ace/RB_Tree.i: + + Changed access privilege on the operator new/delete to be + public, and added assertion in those method implementation to + make sure that wrong use of these method are promptly notified. + This changes should fix the problem that some compiling were + still having with RB_Trees. + +Sat Oct 06 23:06:41 2001 Ossama Othman + + * ace/SSL/SSL_Accept_Handler.cpp (ssl_accept): + * ace/SSL/SSL_Connect_Handler.cpp (ssl_connect): + * ace/SSL/SSL_SOCK_Stream.i (send_i, recv_i, close): + + Removed the do/while(SSL_pending()) loop. Its introduction into + the code was a bit misguided. There is no need to flush the SSL + buffer before returning to the Reactor's event loop since the + code now sends a notification to the Reactor to force the + Reactor to invoke the event handler before waiting in the event + loop. This fixes some SSL protocol errors that manifested + during multithreaded SSL communication. [Bug 943] + + * ace/SSL/SSL_SOCK_Acceptor.cpp (ssl_accept): + + It is no longer necessary to call SSL_accept()/connect() to + flush the SSL buffer before running the Reactor's event loop + since the Reactor is notified that it should call the + appropriate event handler before blocking on select() for + WaitForMultipleObjects(), for example. + + * ace/SSL/SSL_SOCK_Stream.cpp (reactor, handler): + + New methods to set the Reactor and event handler associated with + the ACE_SSL_SOCK_Stream. If each of these is set, then the + Reactor will be notified if data is still pending in the SSL + buffer. + + (~ACE_SSL_SOCK_Stream): + + Uninlined the destructor. There is no need for it to be + inlined, and doing so only caused unnecessary code bloat. + + * ace/SSL/SSL_SOCK_Stream.h (notify, reactor, handler): + + Added these new method declarations, in addition to the + corresponding attributes. + + Updated documentation. + + * ace/SSL/SSL_SOCK_Stream.i (notify): + + Method that pushes the event handler on to the Reactor's + notification pipe when necessary. Invoked by recv_i() and + send_i(). + + * ace/SSL/SSL_SOCK_Acceptor.h: + * ace/SSL/SSL_SOCK_Connector.h: + * ace/SSL/SSL_Accept_Handler.h: + * ace/SSL/SSL_Connect_Handler.h: + + Updated documentation. + +Sat Oct 6 16:04:29 2001 Angelo Corsaro + + * ace/RB_Tree.h: + * ace/RB_Tree.i: + + The operator new and delete were declared to be No-Op but were + not implemented as such. This was breaking some builds. Now the + operator are declared as private and they also have a no-op + implementation. This should solve some linking error that were + occurring. + +Sat Oct 6 11:17:22 2001 Balachandran Natarajan + + * THANKS: Added Adrian Mercieca to the hallf of fame. + +Fri Oct 05 18:30:59 2001 Irfan Pyarali + + * ace/RW_Process_Mutex.cpp: Added inclusion ACE.h and fixed member + initialization. + +Fri Oct 5 18:16:53 2001 Balachandran Natarajan + + * ace/SString.h: + * ace/SString.cpp: Changes the usage of ostream to + ACE_OSTREAM_TYPE. Thanks to Russ Noseworthy for letting us + know. + +Thu Oct 4 07:10:01 2001 Douglas C. Schmidt + + * ace/RB_Tree.*: Added support for using the "ACE_Allocator" parameters + to manage memory. Thanks to Airat A. Sadreev + for reporting contributing this. + +Wed Oct 3 07:20:06 2001 Douglas C. Schmidt + + * ace/RW_Process_Mutex.{h,cpp}: Added the ability to create a + unique name if the user doesn't supply one. Thanks to Tom + Wagner for suggesting this. + + * ace/Synch.h: Clarified that the timed wait capabilities of + ACE_Semaphore only work on Solaris if ACE_HAS_PTHREAD is enabled + *and* ACE_HAS_POSIX_SEM/ACE_HAS_STHREAD are disabled. Thanks to + Bonifides Bautista for reporting this. + +Fri Oct 5 12:48:48 2001 Ossama Othman + + * ace/SSL/SSL_SOCK_Stream.i (close): + + Reset the SSL object to allow another connection to be made + using the existing ACE_SSL_SOCK_Stream instance. This prevents + the previous SSL session state from being associated with the + new SSL session/connection. Thanks to Vladimir Chovanec + for pointing out this problem and + suggesting a course of action. + +Fri Oct 5 14:40:03 2001 Balachandran Natarajan + + * ace/SOCK_Dgram_Mcast.cpp (open): Removed the #if defined (linux) + from the code. Looks like this had to be removed to get it + working for RTI under Linux. The other ChangeLog entries that + this change is concerned with are "Sat Feb 17 17:23:46 2001 + Darrell Brunsch " and "Fri Jan 26 11:18:15 2001 + Douglas C. Schmidt". Looks like the patch provided by Keith + Nicewarner is being reverted. I remember + a communication from Keith which seemed to hint that this may + not be required. + + Thanks to Russ Noseworthy for suggesting this. + +Fri Oct 5 14:04:39 2001 Balachandran Natarajan + + * THANKS: Added Hagen Ulrich to the Hall of Fame. + +Fri Oct 5 13:55:02 2001 Balachandran Natarajan + + * ace/Makefile: Removed the SUPPRESS_DASH_G option. Not really + sure where it is used. Further, added a tab to the place where + rules for CHORUS are set. This should fix BUGID 1049. Thanks to + Hagen Ulrich and Dr.David Levine for + reporting and verifying the fix. + +Fri Oct 05 05:56:50 2001 Balachandran + + * ACE version 5.2 released. + +Thu Oct 4 17:38:21 2001 Steve Huston + + * ace/Synch.h: Added some comments to explain the rationale for + the different return values from the blocking and timed + versions of ACE_Null_Semaphore::acquire(). Thanks to Doug + Schmidt for explaining this. + +Thu Oct 4 17:27:39 2001 Steve Huston + + * examples/C++NPv1/Logging_Handler.cpp (recv_log_record): Insure that + the payload message block is properly aligned for any CDR + extraction. Many thanks to Bala for noticing this problem and + sending code for the fix. + +Thu Oct 4 17:08:39 2001 Steve Huston + + * examples/C++NPv1/Process_Per_Connection_Logging_Server.cpp: + In prepare(), call ACE_Process_Options::command_line() rather + than ACE_Process_Options::process_name() to set the program + path for the child process. + +Thu Oct 4 13:18:37 2001 Steve Huston + + * examples/C++NPv1/Logging_Handler.cpp: Use a ACE_Message_Block, + rather than hijacking a CDR block, to read the payload into. + +Thu Oct 4 10:14:34 2001 Balachandran Natarajan + + * THANKS: Added Donald Acton to the Hall of Fame. + +Thu Oct 4 06:39:20 2001 Balachandran Natarajan + + * ace/config-sunos5.5.h: Added ACE_LACKS_MKSTEMP as SunOS 5.5 does + not support mkstemp (). + + * ace/config-sunos5.6.h: Undefined ACE_LACKS_MKSTEMP as Sun 5.6 + and above support it. + + Thanks to Don Hinton for reporting this + problem and Chad Elliott for testing this out on a Sun OS 5.5 + box. + +Wed Oct 3 16:37:41 2001 Balachandran Natarajan + + * ace/CDR_Stream.cpp (read_1): Reverted this change "Wed Oct 3 + 15:05:43 2001 Jeff Parsons ". This + change is alone not enough to fix the problem that Brad + reported. The sample program for the text needs to be fixed to + get it working right. + +Wed Oct 3 15:05:43 2001 Jeff Parsons + + * ace/CDR_Stream.cpp (read_1); + + Reverted changed made in + + Fri Aug 17 16:56:16 2001 Jeff Parsons + + to read_1(). A similar change made in several other methods is + ok, but in this case bytes can be copied into the input CDR + stream without changing wr_ptr, so the check will fail + unnecessarily. Thanks to Brad Hoskins + for pointing this out. + +Wed Oct 2 12:18:37 2001 Steve Huston + + * examples/C++NPv1/Logging_Server.cpp: Fixed spelling error. + * examples/C++NPv1/Logging_Handler.cpp: Comment length adjustment. + +Tue Oct 2 21:52:31 2001 Steve Huston + + * examples/C++NPv1/Logging_Client.cpp: Reverted this: + Mon Oct 1 18:27:41 2001 Steve Huston + +Tue Oct 2 19:52:57 2001 Balachandran Natarajan + + * Makefile: Removed some of the files that no longer exist in the + repository. The inclusion of these files in the Makefile added + noise during the beta cutting process. + +Tue Oct 02 15:34:49 2001 Carlos O'Ryan + + * etc/tao_cosevent.doxygen: + * etc/tao_cosnotification.doxygen: + Fixed typos in the tag file names. + +Tue Oct 2 15:52:27 2001 Balachandran Natarajan + + * THANKS: Added Sunny Leung to the Hall of Fame. + +Tue Oct 2 15:33:36 2001 Balachandran Natarajan + + * THANKS: Removed one instance of Peter Phillips + from the Hall of Fame. + +Tue Oct 2 15:00:37 2001 Balachandran Natarajan + + * ace/CDR_Stream.cpp (clone_from): Copied the GIOP major and minor + versions from the incoming CDR stream. Thanks to Sunny Leung + for reporting this. This closes bugzilla + #1043. + +Tue Oct 2 09:45:39 2001 Steve Huston + + * tests/libDLL_Test.icc: + * tests/libService_Config_DLL.icc: Add link(exportAll) to the link + options to export the entrypoints needed for the tests. + +Mon Oct 1 20:04:14 2001 Priyanka Gontla + + * THANKS: + Added Tushar Nair to the THANKS file. + +Mon Oct 1 18:06:48 2001 Priyanka Gontla + + * ace/Object_Manager.cpp (ACE_UnhandledExceptionFilter): + Removed the un-needed #if 0's. Left them before as a safety + measure (in case something doesnt work) and forgot to remove + them later. + + * ace/Log_Msg.cpp (instance): + Fixed the seg faults that are raised when ace is compiled with + ACE_NTRACE=0 on SunOS. Added a check before locking and + releasing a lock. + + Thanks to Tushar Nair for reporting the + problem and for providing a fix. + +Mon Oct 1 18:27:41 2001 Steve Huston + + * examples/C++NPv1/Logging_Client.cpp: Remove the third (optional) + arg from getline(). Using a char literal without further + qualification causes confusion in Unicode builds. + +Mon Oct 1 14:44:13 2001 Ossama Othman + + * ace/SSL/SSL_Context.cpp (ssl_library_init): + + Initialize the locking callbacks in the crypto library before + initializing the OpenSSL library. OpenSSL may require the + locking callbacks to be initialized before its own + initialization. + + * ace/SSL/SSL_Context.cpp (ssl_library_fini): + + Perform crypto library resource cleanup before reclaiming the + locks used by the locking callbacks. Crypto library resource + cleanup makes use of the locking callbacks. + +Mon Oct 1 15:19:11 2001 Douglas C. Schmidt + + * examples/C++NPv1/README: Added a section that illustrates the + mapping of chapters onto files in the directory. + +Mon Oct 1 12:58:57 2001 Balachandran Natarajan + + * ace/TP_Reactor.cpp (handle_socket_events): A fix for the problem + that started showing up this time is like this. One of the + threads was dispatching an upcall. In the intermediate time the + Reactor woke up another thread to close the handler, remember + that this is possible with the TP_Reactor if the application + resumes the handles (the way TAO does that). Now when the thread + that that dispatched the upcall returned it tries to invoke a + method on the already closed handle. To prevent that from + happening we make an extra check to see whether the handle + associated with the handler is still available in the internal + map of the Reactor. As this check is done in the return path of + the thread this should have less performance impact. This is + another reason why we should have #1031 in place ASAP. + +Mon Oct 1 12:23:57 2001 Balachandran Natarajan + + * bin/nightlybuilds/builds.lst (WEB): Changed the name of the + Sun's EGCS build. We have not been using EGCS but 2.95.x for a + long time now. + +Mon Oct 1 10:46:15 2001 Balachandran Natarajan + + * bin/PerlACE/Run_Test.pm (check_n_cleanup_files): Removed the + word "ERROR" when files are left behind. This was creating noise + in the daily builds. We have captured the problem in the + bugzilla with id #1014. After 1.2 goes out, if someone is + looking at this problem again we need to add this back so that + our daily builds can pick them up. + +Sun Sep 30 17:25:33 2001 Ossama Othman + + * ace/SSL/SSL_SOCK_Stream.i (send_i, recv_i): + + Reset errno to prevent previous values (e.g. EWOULDBLOCK) from + being associated with a fatal SSL error (e.g. an alert). + +Sun Sep 30 16:52:22 2001 Ossama Othman + + * ace/SSL/SSL_Asynch_Stream.cpp (do_SSL_shutdown): + + Return the "retval" variable instead of always returning -1. + The actual return value may not always be -1. Thanks to Alain + Totouom for providing this fix. + + * THANKS: + + Added Alain to the list of contributors. + +Sun Sep 30 09:13:04 2001 Ossama Othman + + * ace/SSL/SSL_SOCK_Acceptor.cpp (ssl_accept): + * ace/SSL/SSL_SOCK_Connector.cpp (ssl_connect): + + Made reactor mask constant to emphasize the fact that it is + indeed a constant. + +Sat Sep 29 08:07:07 2001 Douglas C. Schmidt + + * ace/Configuration.{h,cpp}: Changed "allocator" to "alloc" to + avoid bugs with MSVC++ 5.0. Thanks to Munagala Ramanath + for reporting this. + + * ACE-INSTALL.html: Yet more improvements courtesy of Chris + Kohloff. + +Fri Sep 28 23:38:07 2001 Ossama Othman + + * ace/SSL/SSL_Accept_Handler.cpp (ssl_accept): + + Cleaned up the code. + + Do not attempt to verify the X.509 certificate. Only the + application knows how best to do that. + + * ace/SSL/SSL_Context.cpp (ssl_library_init): + + Fixed some Unicode problems. Wrap strings within an ACE_TEXT + macro. + + * ace/SSL/SSL_Connect_Handler.cpp (ssl_connect): + * ace/SSL/SSL_SOCK_Stream.i: + + Corrected some comments. + + * ace/SSL/SSL_SOCK_Stream.h (send_n, recv_n): + + Added a "bytes transferred" pointer parameter. This allows the + amount of bytes transferred to returned via this parameter, thus + matching the semantics of their ACE_SOCK_Stream counterparts. + + * ace/SSL/SSL_SOCK_Stream.cpp (send): + + Do not block attempt a timed send() if data is available in + OpenSSL's internal buffer. This prevents a condition where + needlessly blocking on select() would occur. A similar fix for + recv() was made earlier. See Fri Aug 24 16:54:02 2001 Ossama + Othman for details. + + (send_n, recv_n): + + If the "bytes transferred" pointer parameter is non-zero then + return the amounts of bytes transferred through it. This makes + these methods better match the semantics of their + ACE_SOCK_Stream counterparts. + +Fri Sep 28 19:24:51 2001 Steve Huston + + * ace/config-hpux-11.00.h: Moved the definitions for ACE_HAS_WCHAR + and ACE_HAS_XPG4_MULTIBYTE_CHAR from the compiler-independent + section to the aC++ section. (at least) gcc 3.0 distributed from + HP can't handle compiling wide char stuff... it refers to + wctype.h, only available in aC++. + +Fri Sep 28 12:46:25 2001 Ossama Othman + + * ace/SSL/SSL_Context.cpp (report_error): + + Don't bother displaying an error message if the error code is + zero (i.e. no error). + +Fri Sep 28 12:31:39 2001 Ossama Othman + + * ace/SSL/SSL_SOCK_Acceptor.cpp (ssl_accept): + + Transfer ownership of the Reactor to the previous owner for the + SSL_ERROR_ZERO_RETURN case. Thanks to Vladimir Chovanec + for pointing out this problem. + + Remove the SSL event handler from the reactor for the + SSL_ERROR_ZERO_RETURN case. Previously, this method returned + without removing it, resulting in a seg fault. + + * ace/SSL/SSL_SOCK_Connector.cpp (ssl_connect): + + Ported the updates made to the ssl_accept() counterpart to this + method. + + * ace/SSL/SSL_Accept_Handler.cpp (ssl_accept): + * ace/SSL/SSL_Connect_Handler.cpp (ssl_connect): + * ace/SSL/SSL_SOCK_Stream.i (send_i): + * ace/SSL/SSL_SOCK_Acceptor.cpp (ssl_accept): + * ace/SSL/SSL_SOCK_Connector.cpp (ssl_connect): + + In the event a SSL_ERROR_SYSCALL error condition occurs, call + ACE_OS::set_errno_to_last_error() to make sure errno is updated + appropriately since OpenSSL does not do that. Fixes some + "misbehaving" Reactor interactions. Thanks to Andrew Finnell + for tracking down the problem + and suggesting these fixes. + +Fri Sep 28 09:37:28 2001 Ossama Othman + + * ace/SSL/SSL_Context.h (report_error): + * ace/SSL/SSL_Context.cpp (report_error): + + New SSL error reporting functions that use the ACE_Log_Msg + facilities to dump error information. + + * ace/SSL/SSL_Context.cpp (set_mode): + * ace/SSL/SSL_SOCK_Acceptor.cpp (ssl_accept): + * ace/SSL/SSL_SOCK_Stream.i (send_i, recv_i): + * ace/SSL/SSL_Accept_Handler.cpp (ssl_accept): + * ace/SSL/SSL_Connect_Handler.cpp (ssl_connect): + + Use the new report_error() static method to display error + information instead of OpenSSL's ERR_print_error_fp(). + + * ace/SSL/SSL_SOCK_Connector.cpp: + + Include 'ace/Log_Msg.h' to pull ACE_ERROR macro definitions. + Fixes compile-time problems on Tru64. Thanks to Martin + Krumpolec for providing this fix. [Bug 1034] + + (ACE_SSL_SOCK_Connector): + + Wrap format specifier string in ACE_ERROR call with ACE_TEXT. + Fixes mismatched Unicode/non-unicode strings. + +Fri Sep 28 06:17:27 2001 Douglas C. Schmidt + + * ace/SPIPE_Acceptor.{h,cpp}: Fixed the use of "char" for + "already_connected_" to be "int". Thanks to Johnny Willemsen + for reporting this. + + * ACE-INSTALL.html: Improved the installation instructions for BCB 4/5. + Thanks to Chris Kohloff for contributing this and to + Jan Kalin for motivating this. + + * ace/TTY_IO.cpp: Fixed numerous bugs in the control() method. + Thanks to Airat A. Sadreev for reporting this. + + * ace/TTY_IO.h: Add a new field for Win32. Thanks to + Airat A. Sadreev for reporting this. + +Thu Sep 27 06:12:21 2001 Douglas C. Schmidt + + * ace/config-win32.h: Added a special-case for Borland C++ Builder, + which must include vcl.h before windows.h. Thanks to Chris + Kohloff for reporting this. This fixes Bug ID 899 for the time + being. + + * ace/Module.cpp (ACE_Module): The line + + this->name (""); + + was be replaced with + + this->name (ACE_TEXT("")); + + Thanks to Airat A. Sadreev for + reporting this. This fixes bug id 1041. + +Thu Sep 27 13:09:19 2001 Bala + + * ACE version 5.1.21 released. + +Tue Sep 25 16:12:14 2001 Ossama Othman + + * ace/SSL/SSL_SOCK_Stream.i (recv_i): + + Use ACE_OS::set_errno_to_last_error() set errno instead of doing + so manually to get around broken compilers that reset the last + error when assigning to errno. Thanks to Chris Kohloff for + pointing out the problem and suggesting this fix. + +Tue Sep 25 13:00:37 2001 Nanbor Wang + + * ace/Obstack.h: Fixed a typo when declaring ACE_Obstack + exportable. I mistakenly used the underlying + ACE_EXPORT_SINGLETON_DECLARATION macro directly. + ACE_SINGLETON_DECLARATION is the right macro to use here. + Thanks to Martin Krumpolec for reporting + the bug. + +Tue Sep 25 09:12:28 2001 Andrew Finnell + + * ace/SSL/SSL_SOCK_Stream.i (recv_i): + + On MS Windows, OpenSSL does not store the last error in errno so + explicitly do so. This corrects problems where a server is + unaware that a client has forcefully disconnected. + +Tue Sep 25 00:01:59 2001 Irfan Pyarali + + * ace/Service_Repository.cpp (instance): There are three stages of + the Object Manager: (a) starting up; (b) running; (c) shutdown. + ACE_Service_Repository::instance() was not creating a new + instance in (a) and (c). It was changed to allow creation (a). + +Mon Sep 24 01:55:29 2001 Ossama Othman + + * bin/auto_run_tests.lst: + + Added TAO's PICurrent test to the list of automated regression + tests. + +Sun Sep 23 19:28:06 2001 Nanbor Wang + + * ace/Reactor.h (ACE_Reactor): Fixed comments for + and . Both + methods work on an instance of reactor, not the global singleton + reactor. Thanks to Doug for noticing this. + +Sun Sep 23 10:02:59 2001 Balachandran Natarajan + + * ace/High_Res_Timer.h: Removed a question mark "?", in a line + which read "or sometimes 3.579 Mhz??". This seems to remove the + warning in VXWORKS builds. I have no clue about the problem that + VXWORKS compiler sees. It took only more than an hour to figure + this out. :(. + +Sat Sep 22 08:59:24 2001 Douglas C. Schmidt + + * ace/Service_Manager.cpp (handle_input): Added some logic to + strip off newlines and carriage returns for Windows platforms. + Thanks to Kyle Brost for contributing + this. + +Sat Sep 22 12:28:21 2001 Ossama Othman + + * ace/SSL/ACE_SSL_LIB.dsp: + + Corrected code generation settings to use the multi-threaded DLL + version of the run-time library. Corrects "legacy" build + problems. + +Sat Sep 22 08:59:24 2001 Douglas C. Schmidt + + * ace/High_Res_Timer.{h,i,cpp}: Added comments to explain how + to configure the timers properly on various platforms. Thanks + to Alain Decamps for reporting this. + + * ace/OS.i (ACE_Flow_Spec): Added a check for ACE_HAS_WINSOCK2_GQOS + so that things will compile properly on MinGW32. Thanks to Jeff + McNiel for reporting this. + +Fri Sep 21 15:54:55 2001 Douglas C. Schmidt + + * ace/OS_Dirent.cpp: Fixed all the allocations so they work properly + when used with ACE_TCHAR! Thanks to Olof Lindfors + . + +Tue Sep 18 06:25:22 2001 Douglas C. Schmidt + + * ace/*Reactor*: Changed all uses of "delta_time" to "delay_time". + Thanks to Johnny Willemsen for reporting this. + +Sun Sep 16 11:53:38 2001 Douglas C. Schmidt + + * ace/Connector.cpp (handle_output): Fixed the comment to be + ACE_WIN32. Thanks to Kobi Cohen-Arazi for + reporting this. + +Fri Sep 21 17:11:52 2001 Balachandran Natarajan + + * ace/Message_Block.h: Tried rewording some comments in the + ACE_Message_Block. Thanks to Tom Wagner for + suggesting this. + + * THANKS: Added Tom Wagner to the Hall of + Fame. + +Fri Sep 21 22:11:53 2001 Ossama Othman + + * ace/SSL/ACE_SSL_LIB.dsp: + + Removed hardcoded user-specific include paths, and user-specific + preprocessor macro definitions. + +Thu Sep 20 18:15:49 2001 Steve Huston + + * tests/Config_Test.cpp: Added some more tests to verify correct + string value reset and enumerate values/sections. + +Thu Sep 20 12:29:09 2001 Ossama Othman + + * ace/SSL/ACE_SSL_LIB.dsp: + * ace/SSL/ACE_SSL_LIB.dsw: + + New static build MSVC++ project and workspace files for the + ACE_SSL library contributed by Jonathan Reis . + [Bug 1032] + +Thu Sep 20 12:16:13 2001 Ossama Othman + + * ace/SSL/SSL_SOCK.cpp (enable, disable): + + Removed unreachable "return" statements. [Bug 1033] + + * ace/SSL/SSL_SOCK_Stream.i (ACE_SSL_SOCK_Stream): + * ace/SSL/SSL_SOCK_Stream.cpp: + + Moved constructor to the ".cpp" file since to prevent inclusion + of `ace/Log_Msg.h' in `SSL_SOCK_Stream.h'. This fixes problems + with some platforms needing the Log_Msg include to pull in the + ACE_ERROR macros without needlessly increasing inter-header + dependencies and inclusions. [Bug 1034] + +Thu Sep 20 14:44:29 2001 Steve Huston + + * ace/Process.cpp (ACE_Process_Options): Moved avoid_zombies_ + initialization outside the !Win32 section. Thanks to Johnny + Willemsen for this fix. + +Thu Sep 20 06:28:50 2001 Chad Elliott + + * ace/config-hpux-11.00.h: + + Reverting the change from "Wed Aug 29 15:32:10 2001 Douglas C. + Schmidt ". HP-UX 11.00 does + not actually support pread/pwrite. + +Wed Sep 19 16:56:02 2001 Irfan Pyarali + + * ace/OS.h (THR_SCOPE_PROCESS and THR_SCOPE_SYSTEM): Added + definitions for THR_SCOPE_PROCESS and THR_SCOPE_SYSTEM on + platforms that do not support threads. + +Wed Sep 19 16:54:04 2001 Jeff Parsons + + * ace/Containers_T.cpp: + + In copy constructor for ACE_Double_Linked_List, added line to + copy the size of the rhs to the lhs. The new list was ending + up with a garbage value for its size. + +Wed Sep 19 14:15:08 2001 Nanbor Wang + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Enabled generation of debug info even for + release configurations. Thanks to Jonathan Reis + for suggesting this. + +Wed Sep 19 10:23:06 2001 Carlos O'Ryan + + * html/index.html: + Add couple of missing links to the RT-CORBA components + +Wed Sep 19 12:00:04 2001 Johnny Willemsen + + * ACE-INSTALL.html: + Added BCB5 to some places as supported/used compiler + + * ace/Future.h: + * ace/Test_and_Set.h: + Removed the ACE_EXPORT from the templates ACE_Future_Holder and + ACE_Test_and_Set + + * ace/Service_Config.{h,cpp}: + Changed the type of the members be_a_daemon_ and no_static_svcs_ + from char to int + +Tue Sep 18 13:57:36 2001 Carlos O'Ryan + + * */Makefile: + * */Makefile.*: + Updated dependencies, some of the paths were absolute leading to + ambiguities in parallel builds. + +Tue Sep 18 12:18:26 2001 Carlos O'Ryan + + * bin/footprint_stats.sh: + Fixed bug in footprint charts generation. + +Tue Sep 18 10:50:15 2001 Carlos O'Ryan + + * html/index.html: + Add COS Event and COS Notification services to the index. + +Mon Sep 17 19:00:00 2001 Irfan Pyarali + + * ace/OS.h: + + - THR_SCOPE_PROCESS and THR_SCOPE_SYSTEM were not defined + for NT. Added them. + + - Moved the following definitions of VxWorks around such + that these defines are available even when PACE is not + used. + + THR_INHERIT_SCHED + THR_EXPLICIT_SCHED + THR_SCHED_IO + THR_SCOPE_SYSTEM + THR_SCOPE_PROCESS + + * ace/OS.cpp: LinuxThreads do not have support for + PTHREAD_SCOPE_PROCESS; only PTHREAD_SCOPE_SYSTEM is supported. + Therefore, PTHREAD_SCOPE_PROCESS is ignored when setting the + thread scheduling scope. + + * ace/Sample_History.cpp: Added accessors for and + . + + * bin/auto_run_tests.lst: Added new RTCORBA tests. Removed + Minimum CORBA dependency on these tests. + +Mon Sep 17 13:49:07 2001 Carlos O'Ryan + + * etc/tao_cosevent.doxygen: + * etc/tao_cosnotification.doxygen: + Add new Doxygen files for the Notification and COS Event + Services + + * bin/generate_doxygen.pl: + Add new doxygen files to the automatically generated + documentation. + +Mon Sep 17 11:36:54 2001 Balachandran Natarajan + + * tests/run_tests.lst: This is the script used by the shell + script in that directory. As the name is confusing this is being + moved as a new file. + + * tests/run_tests_remote.lst: Renamed the run_tests.lst as + run_tests_shell.lst. This is invoked by run_tests.sh + + * tests/run_tests.sh: Renamed as a new file. + + * tests/run_tests_remote.sh: Renamed the file run_tests.sh as this + one. This script can be used to run tests remotely on a + CHORUS/ClassiX/MVME targets. Further this can also be used to + run tests on platforms that dont support perl or do not have + perl. + +Sun Sep 16 11:19:01 2001 Balachandran + + * ACE version 5.1.20 released. + +Sat Sep 15 16:58:08 2001 Balachandran Natarajan + + * tests/High_Res_Timer_Test.cpp: Fixed compile problem with Sun CC + 4.2. + +Fri Sep 14 05:28:13 2001 Douglas C. Schmidt + + * THANKS: We now have over 1,300 contributors to ACE+TAO! + + * ace/Basic_Types.{h,i}: Added "const" to various operators and + methods. Thanks to Alain Decamps for reporting this. + +Thu Sep 13 11:02:41 2001 Douglas C. Schmidt + + * ace/Singleton.cpp: If we're not compiling with threading enabled, + don't call the get_singleton_lock() code. Thanks to Charles + Frasch for contributing this. + +Tue Sep 11 06:23:08 2001 Douglas C. Schmidt + + * ace/Array_Base.h: Changed current_ from u_int to size_t. Thanks + to Johnny Willemsen for reporting this. + +Fri Sep 14 17:18:37 2001 Steve Huston + + * tests/High_Res_Timer_Test.cpp (check_micro_nano): If the + nanointerval is 0, change it to 1 to prevent divide-by-zero. + +Fri Sep 14 17:02:39 2001 Steve Huston + + * tests/High_Res_Timer_Test.cpp: Replaced some (u_int) casts with + ACE_U64_TO_U32, which is correct. Thanks to Alain Decamps, yet + again!, for this fix. + +Fri Sep 14 11:39:03 2001 Balachandran Natarajan + + * THANKS: Added Mahesh Varadarajan and Kevin Clien to the Hall of + Fame. + +Thu Sep 13 22:43:34 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added the new Cache_Growth_Test to the + daily tests. + +Thu Sep 13 20:38:44 2001 Nanbor Wang + + * ace/Thread_Manager.h (ACE_Thread_Manager): Changed the default + argument for the constructor from 0 to + ACE_DEFAULT_THREAD_MANAGER_PREALLOC. Thanks to Doug for + pointing this out. + + Added better documentation to explain the purpose of each + argument in ACE_Thread_Manager's constructor. Thanks to Nick + Pratt for motivating the change. + +Thu Sep 13 13:38:41 2001 Steve Huston + + * ace/High_Res_Timer.cpp (elapsed_time (ACE_hrtime_t&nanoseconds), + elapsed_time_incr (ACE_hrtime_t&nanoseconds): Instead of using + "nanoseconds >>= 10", use "nanoseconds = nanoseconds >> 10" to + work around a Borland C++Builder bug. Thanks very much to + Johnny Willemsen, Christopher Kohlhoff, and Alain Decamps + for solving this problem. + +Thu Sep 13 13:33:29 2001 Steve Huston + + * tests/Service_Config_Test.cpp: Added #include "ace/Log_Msg.h". + This was probably to get AIX to build clean, but it's been a + while. + +Thu Sep 13 12:04:04 2001 Balachandran Natarajan + + * THANKS: Added Werner Buchert to the Hall of Fame. + +Wed Sep 12 15:10:41 2001 Steve Huston + + * ace/High_Res_Timer.cpp (elapsed_time (ACE_hrtime_t&nanoseconds), + elapsed_time_incr (ACE_hrtime_t&nanoseconds): Changes to account + for very fast clocks (> 1GHz). Thank you to Derek Dominish + and Alain Decamps + for identifying the problem and coming + up with a good solution. This fixes Bugzilla #1024 (how + appropriate! ;-) + + * ace/High_Res_Timer.i (elapsed_microseconds (ACE_hrtime_t &usecs): + More adjustment to the Win32 scale factor adjusting. Thanks (again!) + to Alain Decamps for identifying and + supplying a fix for this. This fixes Bugzilla #948 (again). + +Wed Sep 12 14:33:29 2001 Steve Huston + + * tests/High_Res_Timer_Test.cpp: Incorporated some additional tests + for usec/nsec sanity checks on the calculated ACE_High_Res_Timer + values. Thank you very much to Alain Decamps + for this test. + +Tue Sep 11 12:40:01 2001 Balachandran Natarajan + + * Terror unleashed. The World Trade Center and the Pentagon + attacked today. Looks like there could be lots of loss to + precious lives. This is too horrible. We convey our condolences + to the bereaved families. God save this world. + +Tue Sep 11 06:41:31 2001 Balachandran Natarajan + + * apps/Gateway/Gateway/Concrete_Connection_Handlers.cpp: Fixed a + typo. This should fix most of the errors in the scoreboard. + +Mon Sep 10 18:59:24 2001 Douglas C. Schmidt + + * apps/Gateway/Peer/Peer.cpp (nonblk_put): + * apps/Gateway/Gateway/Concrete_Connection_Handlers.cpp (nonblk_put): + Reverted Bala's changes below since the original code was + correct. Also, added comments to clarify things to prevent + confusion in the future. + +Mon Sep 10 17:31:11 2001 Balachandran Natarajan + + * ACE-INSTALL.html: Added a new platform to the list. + +Mon Sep 10 12:54:28 2001 Balachandran Natarajan + + * apps/Gateway/Gateway/Concrete_Connection_Handlers.cpp: + Changed the condition that checks for EWOULDBLOCK after a + send. It was erroneously written. Thanks to Nick Pratt + for pointing this out. + +Mon Sep 10 12:36:07 2001 Balachandran Natarajan + + * apps/Gateway/Peer/Peer.cpp (nonblk_put): Changed the condition + that checks for EWOULDBLOCK after a send. It was erroneously + written. Thanks to Nick Pratt for + pointing this out. + +Mon Sep 10 08:17:08 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Will not run the File_IO test in the + Minimum CORBA configuration. + +Mon Sep 10 08:05:39 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Prevented the DLL_ORB test from running + in static builds. + +Sun Sep 9 10:20:59 2001 Balachandran Natarajan + + * */Makefile: Updated dependencies. + +Sun Sep 9 08:43:02 2001 Balachandran Natarajan + + * ace/Handle_Set.i: Added a check in set_bit () and clr_bit () for + ACE_INVALID_HANDLE. If we pass a ACE_INVALID_HANDLE we were + crashing which is not good and hence the fix. + +Sun Sep 9 08:28:52 2001 Balachandran Natarajan + + * ace/Reactor_Impl.h: + * ace/Select_Reactor_Base.h: + * ace/Select_Reactor_Base.cpp (is_dispatchable): Added a new + method. This method, just figures out whether the buffer has any + dispatchable info or not. + + * ace/WFMO_Reactor.h: + * ace/WFMO_Reactor.cpp: Added the above method in the WFMO + Reactor. + + * ace/TP_Reactor.cpp: The handle_notify_events () method now + checks whether the buffer it has read is dispatchable or not. If + it is then it gives up the token to make an upcall. Else, it + just sits around to remove messages of the pipe, till it find + one with a dispatchable info. The fix was necessary so that + wake-up calls that are unanswered are removed of the + pipe. Unanswered wakeup calls were filling up the pipe and they + were blocking some application from writing further to the + pipe. This should be in all probability be the final fix to the + Reactor. + +Sat Sep 8 09:34:52 2001 Balachandran Natarajan + + * tests/Logging_Strategy_Test.cpp: Fixed a typo that was giving + compile errors in VXWORKS builds. + +Fri Sep 7 16:40:37 2001 Priyanka Gontla + + * ace/OS.h: + Added an if-def case for IP_MULTICAST_TTL too. + +Fri Sep 7 17:09:04 2001 Balachandran Natarajan + + * tests/Thread_Pool_Reactor_Resume_Test.cpp: Initialised the lock + to null in the constrcutor before allocating memory for + it. This was done to remove the ABW errors in + purify. This should remove the problem that we see with this + test in our daily builds with SunCC 4.2. + +Fri Sep 7 15:51:48 2001 Balachandran Natarajan + + * tests/Logging_Strategy_Test.cpp: Included Auto_Ptr.h. + +Fri Sep 07 15:29:37 2001 Yamuna Krishnamurthy + + * examples/QOS/Change_Receiver_FlowSpec/Receiver_QoS_Event_Handler.cpp: + * examples/QOS/Change_Receiver_FlowSpec/Sender_QoS_Event_Handler.cpp:: + * examples/QOS/Change_Receiver_FlowSpec/Fill_ACE_QoS.cpp: + + * examples/QOS/Change_Sender_TSpec/Receiver_QoS_Event_Handler.cpp: + * examples/QOS/Change_Sender_TSpec/Sender_QoS_Event_Handler.cpp:: + * examples/QOS/Change_Sender_TSpec/Fill_ACE_QoS.cpp: + + * examples/QOS/Simple/Receiver_QoS_Event_Handler.cpp: + * examples/QOS/Simple/Sender_QoS_Event_Handler.cpp: + * examples/QOS/Simple/Fill_ACE_QoS.cpp: + + Fixed compile errors. + +Fri Sep 7 14:17:41 2001 Balachandran Natarajan + + * ace/TP_Reactor.cpp: Do not clear the notify handle bit when + trying to dispatch notify calls. This shoudl fix the long + pending problems with TRU 64 builds. + +Fri Sep 07 12:12:39 2001 Steve Huston + + * examples/C++NPv1/Iterative_Logging_Server.dsp: + * examples/C++NPv1/Logging_Client.dsp: + * examples/C++NPv1/Process_Per_Connection_Logging_Server.dsp: + * examples/C++NPv1/RT_Thread_Per_Connection_Logging_Server.dsp: + * examples/C++NPv1/Reactive_Logging_Server.dsp: + * examples/C++NPv1/Reactive_Logging_Server_Ex.dsp: + * examples/C++NPv1/Thread_Per_Connection_Logging_Server.dsp: + Use relative paths to include and library files rather than + $(ACE_ROOT). Makes it easier to use in place regardless of + ACE version. + + * examples/C++NPv1/Logging_Client.cpp: Fixed scoping of the getline() + method call. + +Thu Sep 6 21:14:05 2001 Balachandran Natarajan + + * tests/Logging_Strategy_Test.cpp: Changed the usage of auto_ptr + <> to ACE_Auto_Basic_Ptr<>. Thanks to Carlos O'Ryan for this + suggestion. + +Thu Sep 06 18:42:39 2001 Steve Huston + + * examples/C++NPv1: New directory that contains all of the example + code for Doug/my book, C++ Network Programming, Vol 1. + +Thu Sep 6 12:01:15 2001 Priyanka Gontla + + * ace/OS.h: + Added a if-def case for IP_MULTICAST_IF. Seems like it is not + defined in some of the OS versions. + +Thu Sep 06 12:36:43 2001 Yamuna Krishnamurthy + + * ace/OS.h: + * ace/OS.i: + * ace/QoS/QoS_Session_Impl.cpp: + * ace/QoS/QoS_Session.h: + + Fixed compile errors. + +Thu Sep 6 10:24:15 2001 Ossama Othman + + * ace/Acceptor.cpp (accept_svc_handler): + * ace/Strategies_T.cpp (accept_svc_handler): + + Do not close and reopen the peer acceptor on failed attempts to + accept a connection. Several problems were fixed by removing + this code: + + - A race condition existed where another thread or process + could acquire the port that the peer acceptor was + listening on before it was closed. Note that it is not + enough to attempt to synchronize this code with a lock + since an external process could still acquire the port. + + - If the port in the peer acceptor (assuming it is an + ACE_INET_Addr based one) is the wildcard port (zero), then + there is no guarantee that the acceptor will be opened on + the same port upon which it is was previously listening. + In such a case, IORs generated by TAO (for example) can be + rendered invalid since the addressing information embedded + in those IORs will no longer contain the actual port to + connect to when making invocations. [Bug 962] + + - The above two problems actually introduced a + denial-of-service attack vulnerability (now closed by this + fix) since it was relatively easy to force a failed + connection attempt, which would then cause the peer + acceptor to be reopened on potentially a different port, + or to shutdown completely if reopening failed. + + * ace/SSL/SSL_SOCK_Acceptor.i (close): + + Invalidate the handle stored within the ACE_SSL_SOCK_Acceptor + instance. Corrects problems arising from attempts to use a + listening socket that has been shut down. + + * ace/SSL/SSL_SOCK_Acceptor.cpp (ssl_accept): + + Perform an OpenSSL SSL_accept() in case OpenSSL buffered data + that must be handled before entering the Reactor event loop used + to complete a non-blocking SSL passive connection. + + If the OpenSSL error status is SSL_ERROR_ZERO_RETURN shut down + the partially initialized SSL stream/session since the peer has + itself shut down. + +Thu Sep 6 11:00:46 2001 Balachandran Natarajan + + * ace/TP_Reactor.cpp: The timer events are not included as a part + of number of active handles from wait_for_multiple_events + (). The check for event_count > 0 before processing timer events + was wrong. Removed the check. Thanks to Chad Elliott for + pointing this out. + + Further did some cosmetic changes like adding comments, removing + comments that was not valid etc. + +Thu Sep 6 07:50:56 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: The AMI buffering test should not be run + Single threaded builds. + +Thu Sep 6 02:30:14 2001 Christopher Kohlhoff + + * examples/Export/Makefile.bor: + * examples/Export/export_dll.bor: + * examples/Export/test.bor: + * examples/Export/dll.h: + Added makefiles for this example and fixed a template problem with + Borland C++. Thanks to Charles Frasch for + contributing this. + +Wed Sep 5 19:48:34 2001 Priyanka Gontla + + * ace/SOCK_Dgram.cpp (set_nic): + Fixed the errors that raised in Win. + +Wed Sep 5 20:38:10 2001 Balachandran Natarajan + + * ace/OS.h: + * ace/OS.i: + * ace/QoS/QoS_Session_Impl.cpp: + * ace/QoS/QoS_Session.h: Reverted the change "Wed Sep 5 18:58:00 + 2001 Yamuna Krishnamurthy ". The change + broke builds. Further there was no reason why the QoS + information should come inside OS.* files. Talk about increasing + foot print. + +Wed Sep 5 18:58:00 2001 Yamuna Krishnamurthy + + * ace/QoS/QoS_Session.h: + * ace/QoS/QoS_Session_Impl.h: + * ace/QoS/QoS_Session_Impl.cpp: + + Added rapi_sender and rapi_reserve calls with null tspec and + flow spec respectively to facilitate the tearing down of PATH + and RESV messages. + + * ace/OS.h: + * ace/OS.i: + + Changed the sending_flowspec_ and receiving_flowspec_ members of + the ACE_QoS class to pointers so they can be initialized to null + flow specs. + +Wed Sep 5 16:50:03 2001 Balachandran Natarajan + + * THANKS: Added Peter Phillips to the Hall + of Fame. + + * ace/OS_String.cpp: Fixed a warning in TRU64 builds. + +Wed Sep 5 11:29:59 2001 Priyanka Gontla + + * ace/SOCK_Dgram.h: + * ace/SOCK_Dgram.cpp: + + Added a new method to set the NIC address in the socket. + +Wed Sep 05 12:00:42 2001 Steve Huston + + * include/makeinclude/platform_aix4_g++.GNU: Sets ACE_AIX_VERS rather + than separate major/minor; see entry below for further info. + +Wed Sep 05 11:52:39 2001 Steve Huston + + * ace/config-aix5.1.h: New config file for AIX 5L, version 5.1, + using Visual Age C++ 5. + + * ace/config-aix-4.1.x.h: + * ace/config-aix-4.2.x.h: + * ace/config-aix-4.3.x.h: + * ace/config-aix-4.x.h: Use ACE_AIX_VERS (which has both major and + minor version) rather than ACE_AIX_MAJOR_VERS and ACE_AIX_MINOR_VERS. + + * include/makeinclude/platform_aix_ibm.GNU: Rather than making + separate major/minor OS version variables, use one that incorporates + both to make it easier for config.h files to set upwardly-compatible + feature flags. + +Wed Sep 5 06:55:44 2001 Chad Elliott + + * tests/Log_Msg_Test.cpp: + + Add ACE_TEXT() around the default program name for the Windows + WChar Unicode build. + +Tue Sep 4 18:48:00 2001 Balachandran Natarajan + + * ace/Select_Reactor_Base.cpp: Changed the value returned from + ACE_Select_Reactor_Notify_Handler::handle_input (). This now + returns a 0 if we did not dispatch any handles or the number of + handles dispatched. We were returning a -1 if we did not + dispatch any handles, after reading the notification from the + pipe. This should fix the Reactor_Notify_Test in the Implicit + templates build. + +Tue Sep 4 12:46:50 2001 Balachandran Natarajan + + * ace/ACE.cpp: Reverted this change "Tue Sep 4 07:37:17 2001 + Balachandran Natarajan ". Thanks to Irfan + for pointing that this change, changes the semantics of the + methods. + +Tue Sep 4 09:14:36 2001 Chad Elliott + + * ace/CDR_Stream.i: + * ace/CDR_Stream.cpp: + + Work around a compiler bug in the latest Green Hills Multi200. + Casting a float to an ACE_CDR::ULong* caused internal compiler + errors if the code was inlined. + + * ace/config-vxworks5.x.h: + * include/makeinclude/platform_vxworks5.x_ghs.GNU: + + Updated support for Green Hills Multi2000. + +Tue Sep 4 07:41:42 2001 Balachandran Natarajan + + * THANKS: Added Eyal Neuman to the Hall of + Fame. + +Tue Sep 4 07:37:17 2001 Balachandran Natarajan + + * ace/ACE.cpp: Fixed a bug with recv_n_i (). The problem was form + returning the exact number of bytes from the for loop. If the + loop had executed once and if we get 0 in the next recv_i () + call, then we should be returning the number of bytes read in + the previous iteration and not 0. Thanks to Eyal Neuman + for this fix. This closes bug 1015. + +Tue Sep 4 07:08:30 2001 Balachandran Natarajan + + * ace/ACE.cpp: Fixed a unicode error in teh Win32 builds. Acted as + a dumbo when I made this change yesterday:( + +Mon Sep 3 20:08:25 2001 Balachandran Natarajan + + * ace/TP_Reactor.cpp: Fixed a warning in TRU 64 builds. + +Mon Sep 3 09:58:32 2001 Balachandran Natarajan + + * */Makefile: Updated dependencies + +Mon Sep 3 09:44:46 2001 Balachandran Natarajan + + * ace/Select_Reactor_Base.cpp: Fixed a warning in Implicit + template builds. + +Mon Sep 3 08:21:36 2001 Balachandran Natarajan + + * ace/ACE.cpp: Replaced L with ACE_TEXT_WIDE. + +Mon Sep 3 07:54:32 2001 Balachandran Natarajan + + * ace/OS_String.cpp: Fixed compile errors in win32 builds. Thanks + to Johnny Willemsen for sending in patches for replacing L with + ACE_TEXT_WIDE. + +Sun Sep 2 19:33:07 2001 Balachandran Natarajan + + * ace/Select_Reactor_Base.cpp: Fixed a small problem with the + select reactor's notify () handling mechanism. This was more of + a problem with me not checking the while () loop condition + properly. This should fix most of the reactor problems seen in + the daily builds. + +Sat Sep 1 14:10:08 2001 Douglas C. Schmidt + + * ace/System_Time.cpp, + * ace/Stream_Modules.cpp, + * ace/Service_Types.cpp, + * ace/Service_Manager.cpp, + * ace/SPIPE_Addr.cpp, + * ace/OS.cpp, + * ace/Memory_Pool.cpp, + * ace/Mem_Map.cpp, + * ace/Local_Name_Space_T.cpp, + * ace/FILE_Addr.cpp, + * ace/FIFO.cpp, + * ace/Connector.cpp, + * ace/Acceptor.cpp, + * ace/Token_Collection.cpp, + * ace/Name_Request_Reply.cpp, + * ace/Local_Tokens.cpp, + * ace/ACE.cpp, + * ace/Log_Record.cpp, + * ace/Log_Msg.cpp: Added the use of the new ACE_OS::strsncpy() + method. Thanks to Alain for reporting this. + + * ace/OS_String.{h,cpp}: Added a "safe" c string copy method: + strsncpy(dst,src,maxlen). Changing an occurence off strncpy() + to strsncpy() is less errorprone, but could break somebody's + code if he/she is using the fact that the strncpy's where + nul-padding the destination, but this is extremely + unlikely. Using strsncpy() is also almost always (a lot) faster + than strncpy(). Thanks to Alain Decamps + for this method. + +Sat Sep 1 09:54:55 2001 Balachandran Natarajan + + * tests/Bound_Ptr_Test.cpp: Added a patch from Chris Kohlhoff that + fixes the problem with VXWORKS builds. The old gcc compiler + seems to have problems with forward declared types as template + parameters. Chris solves the problem by defining a ABC properly + and making the offending class inherit from it. This should fix + our daily VXWORKS builds. + +Sat Sep 1 08:07:51 2001 Balachandran Natarajan + + * ace/Select_Reactor_Base.cpp: Fixed a compilation error in the + Notification queue portion of the code. Thanks to our daily + builds for helping me with this testing. + +Fri Aug 31 22:12:26 2001 Balachandran Natarajan + + * ace/TP_Reactor.cpp: + * ace/Select_Reactor_Base.cpp: Fixed fuzz errors. + +Fri Aug 31 22:07:57 2001 Balachandran Natarajan + + * ace/WFMO_Reactor.h: + * ace/WFMO_Reactor.cpp: Added the method read_notify_pipe () to + the WFMO_Notify_Handler. + +Fri Aug 31 19:14:52 2001 Balachandran Natarajan + + * ace/Reactor_Impl.h: Added a new method by name read_notify_pipe + (). Also changed the dispatch_notify () to take in a + Notification buffer instead of a ACE_HANDLE. + + * ace/Select_Reactor_Base.cpp: + * ace/Select_Reactor_Base.h: Made the following changes + + - Implemented read_notify_pipe (). Will read just one message from + the notify pipe or one message from the notification queue. + + - Reimplemented dispatch_notify (). This method would just + dispatch the upcall using the information in the notification + buffer. + + - The handle_input () now uses the read_notify_pipe () and + dispatch_notify () to achieve what it was doing before. + + - The notify () call now sends one notify message on the pipe + for every message in the notification queue. + + * ace/TP_Reactor.cpp (handle_socket_events): + * ace/TP_Reactor.h: + * ace/TP_Reactor.i: We had a race condition. The race condition + was because two threads were trying to read from the notify_pipe + at the same instance. This race condition was fixed by adding a + call to read_notify_pipe () with the lock held and then calling + dispatch_notify () with the buffer read after releasing the + lock. Did the following minor modifications + + - Changed dispatch_socket_events () as dispatch_socket_event () + as we were dispatching only one event. + + - We dont grab the token in the constructor of the token. We + have to make a call specfically to grab_token () to get the + token. + + The above checkins should fix the correctness of the reactor + problems that we have been seeing. + +Fri Aug 31 18:30:28 2001 Krishnakumar B + + * bin/auto_run_tests.lst: + + Added Blocking_Sync_None to the list of tests to be run on + Tru64. + + * ACE-INSTALL.html: + + Added Linux/IA64 to the list of platforms supported. + +Fri Aug 31 15:27:09 2001 Balachandran Natarajan + + * ace/Bound_Ptr.i: Fixed a problem with Sun CC42 builds. Used 1 + instead of true. + +Fri Aug 31 14:57:42 2001 Steve Huston + + * tests/MEM_Stream_Test.cpp: Fixed usage of ACE_SYNCH meta-class + to work correctly with templates. + +Fri Aug 31 11:53:05 2001 Krishnakumar B + + * ace/OS.h: + * ace/Timer_Queue_T.h: + * ace/Timer_Queue_T.h: + * ace/config-hpux-11.00.h: + * ace/config-hpux11.h: + * ace/config-irix6.x-common.h: + * ace/config-linux-common.h: + * ace/config-lynxos.h: + * ace/config-osf1-4.0.h: + * ace/config-pharlap.h: + * ace/config-sunos4-g++.h: + * ace/config-sunos4-lucid3.2.h: + * ace/config-sunos4-sun3.x.h: + * ace/config-sunos4-sun4.1.4.h: + * ace/config-sunos4-sun4.x-orbix.h: + * ace/config-sunos5.4-centerline-2.x.h: + * ace/config-sunos5.4-g++.h: + * ace/config-sunos5.4-sunc++-4.x-orbix.h: + * ace/config-sunos5.4-sunc++-4.x.h: + * ace/config-sunos5.5.h: + * ace/config-tandem.h: + + Fixed up documentation of ACE_TIMER_SKEW. Fixed bogus values in + all the above files. Should help in removing some of the errors + in TAO tests. Any test in ACE/TAO which breaks because of this + change is broken and should be fixed. + +Fri Aug 31 12:00:00 2001 Steve Huston + + * tests/Bound_Ptr_Test.icc: New Visual Age C++ config for this test. + * tests/tests.icp: Added Bound_Ptr_Test.icc, Service_Config_Test.icc, + and libService_Config_DLL.icc. + +Fri Aug 31 11:40:31 2001 Steve Huston + + * tests/MEM_Stream_Test.(cpp h): Fixed single-threaded builds. + +Fri Aug 31 08:13:26 2001 Chad Elliott + + * bin/perltest2cpp.pl: + + Added a -t option to set the timeout factor. + +Thu Aug 30 18:08:32 2001 Krishnakumar B + + * ace/config-linux-common.h: + + Added some more missing stuff which might break compilations. + The previous change also removed the existing definition for + ACE_TIMER_SKEW so add it back till the new version is checked in. + +Thu Aug 30 17:54:40 2001 Krishnakumar B + + * ace/config-linux-common.h: + + This file was checked in inadvertently when checking in fixes + for ACE_NEEDS_HUGE_THREAD_STACKSIZE. + +Thu Aug 30 13:04:38 2001 Steve Huston + + * tests/run_test.lst: Added Bound_Ptr_Test. + +Thu Aug 30 11:40:39 2001 Steve Huston + + * tests/run_test.pl (run_program): Fixed the 'unlink' to get + all of a test's log files; prevents seeing previous sub-logs + from a test such as MEM_Stream_Test and falsely reporting errors. + +Thu Aug 30 10:46:51 2001 Steve Huston + + * ace/High_Res_Timer.cpp (global_scale_factor ()): When checking for + a high-res timer mechanism, don't set the global_scale_factor_status_ + away from 0 until _after_ getting the scale factor, to avoid + a second parallel thread from using a bogus value. Thanks very much + to Alain Decamps for this fix. + +Thu Aug 30 09:30:19 2001 Chad Elliott + + * tests/Log_Msg_Test.cpp: + + Fix for VxWorks when ace_main() is called with argc == 0. + + * tests/run_test.lst: + + Update the list of tests that run on VxWorks. + + * tests/Makefile: + * tests/run_test.pl: + + Update the script to output VxWorks commands to a file. + +Thu Aug 30 09:58:38 2001 Steve Huston + + * ace/High_Res_Timer.i (elapsed_microseconds): For Win32, isolate the + msec modulus before converting it up to usecs. Thanks to Francois + Rioux for reporting this. + +Thu Aug 30 00:42:41 2001 Christopher Kohlhoff + + * ace/Service_Config.cpp: + Service_Object instances are now inserted into the Service_Repository + only after they have been successfully initialised, to provide better + support for recursive use of the service configurator. With this + change, a service loaded from 'inside' another services's init() will + be inserted into the repository first and unloaded last. This ensures + that any recursively loaded services on which the original service + depends still exist when the original service's fini() function is + called. + +Thu Aug 30 00:27:05 2001 Krishnakumar B + + * ChangeLog: + + Removed bogus files from the previous entry. I should not play + around with a lot of tasks at once. + +Wed Aug 29 19:57:29 2001 Krishnakumar B + + * ace/config-osf1-4.0.h: + + Remove definition of ACE_NEEDS_HUGE_THREAD_STACKSIZE. The + default value seems to be good enough. + + * ace/config-vxworks5.x.h: + * ace/config-lynxos.h: + * ace/config-qnx-neutrino.h: + * ace/config-rtems.h: + + Standardized the values to 64KB on these platforms. Don't know + if these platforms need it. But I don't have access to any of + these so playing it safe. + + +Wed Aug 29 18:52:12 2001 Christopher Kohlhoff + + * tests/Bound_Ptr_Test.cpp: + Removed a stray asterisk that was causing compilation failures. + +Wed Aug 29 17:54:52 2001 Steve Huston + + * tests/libDLL_Test.icc: + * tests/libService_Config_DLL.icc: Fixed the "run after" directives + to correctly build the lib*.a files. Also, fixed the cleanup + directives to properly clean up both .a and shr.o files. + +Wed Aug 29 15:32:10 2001 Douglas C. Schmidt + + * ace/config-aix-4.x.h: + * ace/config-hpux-11.00.h: + * ace/config-osf1-4.0.h: Added better support for pread()/pwrite(). + Thanks to Steve Vranyes for these fixes. + +Wed Aug 29 15:47:33 2001 Steve Huston + + * tests/run_test.lst: Re-enabled MEM_Stream_Test. + +Wed Aug 29 12:15:01 2001 Nanbor Wang + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Added Bound_Ptr.* to the projects. + + * tests/tests.dsw: + * tests/Bound_Ptr_Test.dsp: Added a new project for + Bound_Ptr_Test. + +Wed Aug 29 11:01:22 2001 Steve Huston + + * tests/MEM_Stream_Test.cpp: Fixed a cut/paste error and now runs the + proper number of threads/processes for the MT case, avoiding a + hang. + +Wed Aug 29 07:08:23 2001 Douglas C. Schmidt + + * tests/run_tests.lst: + * tests/Makefile + * tests/Makefile.bor + * ace/Makefile + * ace/Bound_Ptr.{h,i} + * tests/Bound_Ptr_Test.cpp + * examples/Smart_Pointer: Added a pair of new smart pointer classes, + ACE_Strong_Bound_Ptr and ACE_Weak_Bound_Ptr. Thanks to + Christopher Kohlhoff for contributing + these. + +Tue Aug 28 17:51:19 2001 Steve Huston + + * tests/run_test.pl: If a test has log files associated with the + main log of the form -.log, e.g. MEM_Stream_Test-331.log + the check_log function will scan those for errors/warnings too. + +Tue Aug 28 16:48:23 2001 Balachandran Natarajan + + * ace/TP_Reactor.i: We (the current thread) should not release the + token unless we own it. This simple mistake just took 3 days to + figure out. An 'if' condition was mixing and have added + it. Shows how a small problem at lower levels can take days to + fix. + +Tue Aug 28 17:45:22 2001 Steve Huston + + * tests/MEM_Stream_Test.cpp: Fixed compile warning on gcc. + +Tue Aug 28 13:16:31 2001 Chad Elliott + + * bin/vxworks_modify.pl: + * bin/perltest2cpp.pl: + + Generated c++ files now pass the fuzz check. + +Tue Aug 28 11:02:08 2001 Ossama Othman + + * bin/nightlybuilds/builds.lst: + + Renamed the GCC 3.0 build to "Debian_GCC_3.0.1." since we're + actually compiling with GCC 3.0.1, not GCC 3.0. The latter has + bugs that prevent it from compiling ACE/TAO at the "-O3" + optimization level. + +Tue Aug 28 10:19:18 2001 Ossama Othman + + * ace/SSL/SSL_SOCK_Stream.i (recv_i): + + Corrected Borland warning using a more efficient fix (i.e. less + function calls). + +Tue Aug 28 10:36:10 2001 Chad Elliott + + * bin/vxworks_modify.pl: + * bin/perltest2cpp.pl: + + Added these scripts for use with VxWorks and the newly added TAO + TestUtils. These scripts modify c++ and perl to generate + "one-button" modules for TAO testing on VxWorks. + +Tue Aug 28 11:07:26 2001 Steve Huston + + * tests/MEM_Stream_Test.cpp: Be sure to close the stream from the + client end. + +Mon Aug 27 20:16:38 2001 Balachandran Natarajan + + * tests/run_test.lst: Removed the MEM_Stream_Test from the daily + builds as they were hanging. This was causing the builds to + choke. I will keep Steve Huston informed on this so that he can + reenable them once he has fixed the test. + +Mon Aug 27 18:33:59 2001 Krishnakumar B + + * bin/nightlybuilds/builds.lst (WEB): + + Removed the stray yoda part of LIST which is causing the wrong + results to show up. + +Mon Aug 27 18:14:38 2001 Krishnakumar B + + * bin/nightlybuilds/builds.lst (WEB): + + Added the IA-64 builds back again. We now have a faster machine + running a better version of Linux. + +Mon Aug 27 09:39:33 2001 Balachandran Natarajan + + * ace/Timer_Queue_T.i (get_dispatch_info): + * ace/Timer_Queue_T.h: Fixed the compile problem in VXWORKS + builds. How could I forget that there are a few compilers which + cannot grok traits? + +Mon Aug 27 09:39:12 2001 Johnny Willemsen + + * examples/Makefile.bor: + * examples/NT_Service/Makefile.bor + Added BCB makefile for this example + +Sun Aug 26 22:08:32 2001 Balachandran Natarajan + + * ace/TP_Reactor.i: Reordered methods to fix warnings in TRU 64 + builds. + +Sun Aug 26 20:50:22 2001 Balachandran Natarajan + + * ace/SSL/SSL_SOCK_Stream.i: Fixed a warning (hopefully) in + Borland builds. The warning was because a temporary variable was + created. + +Sun Aug 26 20:45:24 2001 Balachandran Natarajan + + * tests/MEM_Stream_Test.cpp: Fixed a unused variable warning in + Borland. + +Sun Aug 26 08:13:12 2001 Douglas C. Schmidt + + * tests/test_config.h: Added a new ACE_CLOSE_TEST_LOG macro. Thanks to + Edan for this. + +Sun Aug 26 09:07:32 2001 Balachandran Natarajan + + * ace/TP_Reactor.cpp: Fixed a compile error with SunCC4.2 + +Sun Aug 26 08:28:09 2001 Balachandran Natarajan + + * ace/Timer_Queue_T.cpp: Fixed a warning from an unused variable + reported by KCC compilers. + +Sun Aug 26 08:13:12 2001 Douglas C. Schmidt + + * tests/Logging_Strategy_Test.cpp: Applied the following fixes from + Edan: + + - Included ace/Logging_Strategy.h + - Addition of -w switch to enable initial wipeout of logfile + - Removal of the redundant ACE_LOG_MSG->open() + - Explicitly close the previous log before applying the changes to the + ACE_LOG_MSG + - Moved remove_files() call higher, just before logfile close + + * ace/Logging_Strategy.{h,cpp}: Added the following fixes from + Edan Ayal: + + - Logging_Strategy now supports any ACE_Log_Msg, not just the + ACE_LOG_MSG singleton. + - Added a check for success (ios::goodbit) of new ofstream + creation. + - Changed default values for max_size and interval. Now the + default interval is 10 minutes (instead of 0) and the default + log file size is 0 (was 16K). The timer is now activated only + if both are non-zero. + - Added a mutator to set the ACE_Log_Msg to work with, and a + member variable + - Added definition for ACE_DEFAULT_LOGFILE_POLL_INTERVAL + - Removed definition of ACE_DEFAULT_MAX_LOGFILE_SIZE + + * ace/Log_Record.{h,cpp}: Enhanced this implementation to (1) + be consistent with recent changes to Log_Msg.h and (2) to + replace problematic use of strncpy(). Thanks to Alain + Decamps for these fixes. + +Sat Aug 25 20:58:22 2001 Nanbor Wang + + * ace/FILE_IO.i (send_n): Changed to use ACE::write_n to send the + chain of Message_Blocks. The originally used ACE::send_n was + causing problem on NT because send_n was restricted for sockets + I/O on NT. Thanks to Doug for pointing this out. + +Sat Aug 25 10:16:21 2001 Douglas C. Schmidt + + * tests/Svc_Handler_Test.cpp (main): The destructor of svc_handler + will close file_io, so we don't need to do it explicitly! + + * ace/Log_Msg.cpp (log): Changed range check from + + this->msg_ + ACE_Log_Record::MAXLOGMSGLEN + + to + + this->msg_ + sizeof this->msg_ + + to correspond to the change below. + + * ace/Log_Msg.h (ACE_Log_Msg): Increased the size of the buffer + used to store log records to account for the NUL-terminator. + + * tests/Svc_Handler_Test.cpp (main): Changed the buffer size + and NUL-terminated the buffer so that things print correctly. + Thanks to Nanbor for finding this. + +Sat Aug 25 09:00:28 2001 Balachandran Natarajan + + * ace/TP_Reactor.cpp: + * ace/TP_Reactor.h (ACE_TP_Reactor): Fixed a warning in KCC + builds. + +Sat Aug 25 08:42:57 2001 Balachandran Natarajan + + * ace/Configuration_Import_Export.cpp: Fixed warnings with g++. I + am not sure how this fix will be accepted on different + compilers. Things are always dicy when you want to delete a + void *. + +Fri Aug 24 23:29:09 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added File_IO test to our daily builds. + +Fri Aug 24 23:12:15 2001 Balachandran Natarajan + + * ace/WFMO_Reactor.h: + * ace/WFMO_Reactor.cpp (dispatch_notify): Fixed a compile error on + MSVC. + +Fri Aug 24 23:07:42 2001 Balachandran Natarajan + + * ace/Configuration_Import_Export.cpp: Fixed a compile error with + g++. + +Fri Aug 24 21:55:00 2001 Craig Rodrigues + + * ace/QoS/QoS_Session_Impl.cpp: + Check for null parameters in rsvp_callback(). + Thanks to Yamuna Krishnamurthy . + +Fri Aug 24 20:32:39 2001 Steve Huston + + * tests/MEM_Stream_Test.cpp: Changed this test to use multiple + processes on any platform without ACE_LACKS_FORK. It actually + could be broader than this if desired. This is motivated by the + fact that HP-UX can't mmap() (the call underlying ACE_MEM_IO) + the same file more than once in the same process. With this, + MEM_Stream_Test goes a lot better on HP-UX, though not perfectly + yet. + +Fri Aug 24 16:54:02 2001 Ossama Othman + + * ace/SSL/SSL_SOCK_Stream.h (recv_i): + + Added a timeout parameter. See below for details. + + * ace/SSL/SSL_SOCK_Stream.i (recv_i): + + Perform an SSL_read() before attempting to block on select() + with a timeout. OpenSSL may buffer more data than requested + since it is a record-oriented protocol. Fixes a problem where + subsequent calls to ACE_SSL_SOCK_Stream::recv() could timeout + when needlessly blocking on select() because the expected data + has already been buffered by OpenSSL. Thanks to Martin + Krumpolec for reporting and diagnosing the + problem. [Bug 1006] + + * ace/SSL/SSL_SOCK_Stream.cpp (recv): + + Moved the timed recv() code to the lower level recv_i() method + since timeout support must now be more tightly integrated with + do/while(SSL_pending()) SSL_read() loop. + +Fri Aug 24 18:33:09 2001 Douglas C. Schmidt + + * ace/Parse_Node.cpp (ACE_Function_Node): Make sure to dynamically + allocate the pathname_ so we can delete it! Thanks to + Don Hinton for reporting this. + + * ace/Configuration_Import_Export.cpp: Changed a couple of + delete (char *) buf to delete (char *) [] buf. Thanks to + Don Hinton for reporting this. + +Fri Aug 24 16:10:20 2001 Balachandran Natarajan + + Merged in changes from the reactor_deadlock branch. This set of + changes actually fixes a long standing problem with the + TP_Reactor. The TP_Reactor was holding the token too long and + this created all sorts of problems for TAO. The changes have been + merged from the branch and here are the relevant + ChangeLog entries. + + Fri Aug 24 14:59:52 2001 Balachandran Natarajan + + * ace/TP_Reactor.cpp (dispatch_socket_events): Cosmetic changes. + + Fri Aug 24 14:19:02 2001 Balachandran Natarajan + + * ace/Timer_Queue_T.i: + * ace/Timer_Queue_T.h:Removed the default constructor and + destructor for ACE_Timer_Node_Dispatch_Info_T allowing the + compiler to do the job. + + Fri Aug 24 12:05:25 2001 Balachandran Natarajan + + * ace/Timer_Queue_T.cpp: Removed some vague debug statements. + + Fri Aug 24 11:34:11 2001 Balachandran Natarajan + + * ace/Timer_Queue_T.h: + * ace/Timer_Queue_T.cpp: + * ace/Timer_Queue_T.i: Added a new class + ACE_Timer_Node_Dispatch_Info_T that has the dispatch information + needed to make the upcall. Added methods, dispatch_info () and + dispatch_info_i () in ACE_Timer_Queue_T. These methods return + the dispatch information if there is a node in the queue whose + timer value <= current time. Changed the expire () method to use + this method to get dispatch information. + + * ace/Timer_Queue.h: Added a template specialisation for + ACE_Timer_Node_Dispatch_Info_T. + + * ace/Timer_Queue.cpp: Added template instantiations for the + specialisation. + + * ace/TP_Reactor.h: + * ace/TP_Reactor.cpp: Added a new method handle_timer_events () + that would handles timer events. + + Thu Aug 23 11:50:18 2001 Balachandran Natarajan + + * ace/Reactor_Impl.h: Added two new methods notify_handle () and + dispatch_notify () to the ACE_Reactor_Impl class. + + * ace/Select_Reactor_Base.h: + * ace/Select_Reactor_Base.cpp: Implemented the above two + methods in the ACE_Select_Reactor_Notify class. The + notify_handle () method returns the handle of the pipe on which + it is listening. The dispatch_notify () call does a dispatch of + just one notify () call in the notify pipe. The handle_input () + call that used to process all the notify calls now calls the + dispatch_notify () in a loop. The change essentially allows + some extrenal client of this class to just process one notify at + a time if needed. + + * ace/TP_Reactor.h: + * ace/TP_Reactor.i: + * ace/TP_Reactor.cpp (handle_events): Fixed a bug with + handle_events (ACE_Time_Value &). This should be calling the + handle_events () of the TP_Reactor and not the select reactor. + + Added a whole slew of new methods that basically allows us to do + this + - handle one event at a time + + - once the thread knows the event that needs handling it should + release the token before dispatching the events + + The new methods that have been added are + + - handle_signals (), which handle signals that interrupted the + select (). The implementation of this method is busted. The + implementation has been copied from the existing setup + + - handle_notify_events (), which handles one notify on the + notify_pipe at a time + + - handle_socket_events (), which handles socket events. + + Quite a few helper methods have also been added. They are + get_notify_handle (), get_socket_event_info (), and + dispatch_socket_events (). Removed the methods dispatch_i (), + dispatch_i_protected () and notify_handle (). This checkin fixes + the problem in 1002. But we still have to add handling timeouts + into the TP_Reactor. + + + Tue Aug 21 17:21:07 2001 Balachandran Natarajan + + * ace/TP_Reactor.i: + * ace/TP_Reactor.h: + * ace/TP_Reactor.cpp: Made lots of changes which havent been + compiled yet. Added a new class ACE_TP_Token_Guard that helps + in obtaining and releasing tokens. Moved the grab_token () from + the ACE_TP_Reactor class to the TP_Token_Guard class. Added a + new method for handling signals. They havent been compiled yet + and this checkin is to put files from work to my home box. + + Tue Aug 21 07:58:42 2001 Balachandran Natarajan + + * ace/TP_Reactor.i: + * ace/TP_Reactor.h: + * ace/TP_Reactor.cpp (handle_events): Started refactoring some of + the code to help with this bug. This change has not been + compiled. This is just being done to transfer files from home + to work. + +Fri Aug 24 14:25:31 2001 Balachandran Natarajan + + * THANKS: Added Massimo Pichini to the + Hall of Fame. + +Fri Aug 24 13:40:01 2001 Balachandran Natarajan + + * bin/nightlybuilds/builds.lst: Removed HPUX and AIX_VAC for the + timebeing. Looks like OCI is running different versions of the + OS for their internal use. + +Fri Aug 24 10:17:00 2001 Balachandran Natarajan + + * ace/Log_Msg.cpp (log_hexdump): Added a patch provided by Massimo + Pichini . This prevents overflows with + long strings that are used in printing hexdumps. Previously we + had a buffer of 80 bytes on the stack. + +Fri Aug 24 10:03:29 2001 Steve Huston + + * ace/INET_Addr.(h cpp): Applied changes submitted by + Alain Decamps to insure that + get_host_name (char hostname[], size_t len) const always + nul-terminates the hostname string. If the host lookup is + successful, but the supplied buffer is too short, the function + returns -1, errno == ENOSPC. + +Thu Aug 23 22:01:11 2001 Balachandran Natarajan + + * tests/Logging_Strategy_Test.cpp: Reverted this change "Thu Aug + 23 05:24:57 2001 Douglas C. Schmidt" as this was giving + warnings with MSVC 6.0 + +Thu Aug 23 11:49:15 2001 Paul Calabrese + + * bin/msvc_auto_compile.pl: + + Revert changes from Mon Aug 20 15:48:30 2001. + Thanks to Darrell to showing me the error in my ways. + +Thu Aug 23 09:17:25 2001 Balachandran Natarajan + + * ace/Log_Msg.cpp (file): Reduced the number of bytes copied in + ACE_Log_Msg::file () and ACE_Log_Msg::msg () by one. Thanks to + Alain Decamps for pointing this out. + +Thu Aug 23 08:11:22 2001 Steve Huston + + * ace/Configuration_Import_Export.cpp (process_previous_line_format): + Prepend ACE_OS:: to atoi to work with both narrow and wide chars. + +Thu Aug 23 08:03:00 2001 Craig Rodrigues + + * ace/QoS/QoS_Session_Impl.cpp: + Improve debugging messages. Return -1 inside rsvp_callback() + if flowspec type is unknown. + +Thu Aug 23 05:24:57 2001 Douglas C. Schmidt + + * tests/Logging_Strategy_Test.cpp: Added new and improved test that + it better documented and fixes some minor bugs. Thanks to + Edan Ayal for this. + +Wed Aug 22 19:04:57 2001 Douglas C. Schmidt + + * tests/Logging_Strategy_Test.cpp: Enable this test to work + on platforms that don't support DLLs. Thanks to Edan Ayal + for suggestion this and providing the code. + + * tests/Logging_Strategy_Test.cpp (parse_args): Changed 'n' for 'N' + since that controls the max number of log files. Thanks to Edan + Ayal for reporting this. + +Thu Aug 23 07:30:12 2001 Johnny Willemsen + + * ace/SString.{h,i}: Added clear() method to the ACE_CString and + ACE_WString so that it is possible to clear a string in just one + call + * tests/SString_Test.cpp: Extended to test clear() method + +Wed Aug 22 15:30:05 2001 Carlos O'Ryan + + * bin/auto_compile: + Use the print_config.pl script to print out the configuration. + +Wed Aug 22 17:33:29 2001 Steve Huston + + Applied fixes submitted by Jerry D. Odenwelder, to fix + Bugzilla #953: + + * ace/Configuration.cpp (import_config, export_config): Changed + from using a ACE_Ini_ImpExp object to an ACE_Registry_ImpExp + to preserve type information in the import/export files, and + retain the ability to read an ACE 5.1-format file (with the + changes next...) + + * ace/Configuration_Import_Export.(h cpp): Added a new + ACE_Registry_ImpExp::process_previous_line_format() method that + knows how to read an ACE 5.1-format config line. If + ACE_Registry_ImpExp::import_config finds a line that does not + begin with one of <"[#;> it calls process_previous_line_format + to try to convert it using ACE 5.1-format rules. + Note that the auto conversion works on import. If the + object is subsequently exported, the new registry format + will be used to write the file, effectively updating it + from old to new format. + +Wed Aug 22 12:04:04 2001 Douglas C. Schmidt + + * ace/WFMO_Reactor.h (ACE_WFMO_Reactor): Clarified that the + work_pending() method isn't implemented and suggest what to do + for a workaround. Thanks to Michelangelo Riccobene + (michelangelo.riccobene@marconi.com) for reporting this. + +Wed Aug 22 10:38:08 2001 Carlos O'Ryan + + * bin/nightlybuilds/print_config.pl: + Add new perl script to print out the build configuration, the + script will be shared by the Unix and Win32 builds. + +Wed Aug 22 11:30:13 2001 Joe Hoffert + + * ace/OS_Memory.h: + Removed include of pace/stddef.h. PACE does not have this + file. There are no POSIX functions that typically reside + in this header. Maybe PACE will need this later but it + doesn't now. + + * ace/OS.h (ACE_cond_t): + Modified #if guard to include ACE_cond_t class if we're + on Win32. If we're using PACE then we don't want this method + (since PACE takes care of it) unless we're on Windows. Win32 + mutexes, semaphores, and condition variables are not yet + supported in PACE. + + * ace/OS.cpp (ACE_OS::cond_destroy): + Modified #if guard to include ACE_cond_t::cond_destroy + if we're on Win32. If we're using PACE then we don't want + this method (since PACE takes care of it) unless we're on + Windows. Win32 mutexes, semaphores, and condition variables + are not yet supported in PACE. + + * ace/OS.i (ACE_OS::waiters): + Modified #if guard to include ACE_cond_t::waiters if + we're not on Win32. If we're using PACE then we want + this method (since PACE defines cond_t) unless we're + on Windows. Win32 mutexes, semaphores, and condition + variables are not yet supported in PACE. + +Tue Aug 21 08:26:30 2001 David L. Levine + + * docs/ACE-guidelines.html: changed the example referenced + in: + Sun Aug 19 08:17:14 2001 David L. Levine + to be a bit more realistic. + +Tue Aug 21 06:58:49 2001 Balachandran Natarajan + + * ace/Log_Msg.cpp: Fixed problematic uses of strncpy. Thanks to + Alain Decamps for giving this patch. + +Tue Aug 21 10:40:12 2001 Johnny Willemsen + + * ace/Map.i: Made the return value of ACE_Incremental_Key_Generator + getCurrentValue() const + + * ace/Map_Manager.*: Added a const iterator for the + ACE_Map_Manager + +Mon Aug 20 18:20:51 2001 Steve Huston + + * ace/Process.cpp (pass_handle): Only try to compile the + DuplicateHandle stuff when !ACE_HAS_WINCE... I think it's + right this time... + +Mon Aug 20 15:54:46 2001 Douglas C. Schmidt + + * ace/SUN_Proactor.cpp: Removed the instantiation of + ACE_Condition. Thanks to David Trusty + for reporting this. + +Mon Aug 20 15:48:30 2001 Paul Calabrese + + * bin/msvc_auto_compile.pl: + + Modify script to print config.h contents. + +Mon Aug 20 13:14:00 2001 Carlos O'Ryan + + * bin/auto_compile: + Fixed chdir commands for the auto_compile scripts. + +Mon Aug 20 14:33:31 2001 Douglas C. Schmidt + + * ace/Message_Queue_T.cpp: If we timeout in the semaphore implementation + of the message queue in wait_not_full_cond() or + wait_not_empty_cond() make sure to decrement the "waiters" count + accordingly! Thanks to Patrick Rabau + for noticing this in the C++NPv1 book version! + +Mon Aug 20 07:01:31 2001 Douglas C. Schmidt + + * ace/Synch_T.i (release): If owner_ == -1 then return + -1. Thanks to Don Hinton for suggesting this. + +Mon Aug 20 13:18:51 2001 Steve Huston + + * ace/SOCK.h: Corrected comment on ACE_SOCK ctor being protected, + not private. Thanks to Don Hinton for + pointing this out. + + * THANKS: Added Don Hinton to the Hall of Fame. + +Mon Aug 20 11:00:50 2001 Chad Elliott + + * ace/OS.h: + + Set the ACE_DEFAULT_FILE_PERMS to the correct value for VxWorks. + + * tests/run_test.lst: + + Removed tests for VxWorks for which the platform has no support. + + * tests/CDR_File_Test.cpp: + * tests/Svc_Handler_Test.cpp: + + Add VxWorks to the list of platforms that can't unlink the file + in advance of the test completing. + +Mon Aug 20 01:49:12 2001 Christopher Kohlhoff + + * include/makeinclude/build_dll.bor: + Build non-core DLLs into the common bin directory. This is necessary + so that the tests can find all the DLLs they need on the path. + + * tests/run_test.pl: + Removed the append of the ExeSubDir to the path, since it is no + longer needed and never really worked properly anyway. + +Mon Aug 20 00:01:29 2001 Steve Huston + + * ace/SOCK_Connector.h: Clarify the conditions under which errno + will be ETIME (caller-specified timeout expires w/o connect) + vs. ETIMEDOUT (protocol layer timed out the connect). + + * ace/SOCK_Connector.cpp: Add "|| errno == ETIME" to a couple + places where an ACE_ERROR is _not_ done for certain conditions. + + * ace/ACE.cpp (handle_timed_complete): If the user-specified timeout + expires before the connect is resolved one way or the other, + set errno to ETIME, not ETIMEDOUT. This makes it match the + documented behavior in the ACE_SOCK_Connector man page. + +Sun Aug 19 20:33:39 2001 Carlos O'Ryan + + * bin/nightlybuilds/builds.lst: + Update build list + +Sun Aug 19 15:36:23 2001 Carlos O'Ryan + + * bin/auto_compile: + Add new 'Config' section at the end of the build, useful for the + next generation scoreboard. + +Sun Aug 19 13:25:51 2001 Carlos O'Ryan + + * bin/footprint_stats.sh: + * bin/performance_stats.sh: + * bin/generate_footprint_chart.sh: + * bin/generate_performance_chart.sh: + * html/Stats/Stats.css: + * html/Stats/configuration.shtml: + * html/Stats/detailed_footprint.shtml: + * html/Stats/detailed_performance.shtml: + * html/Stats/footer.html: + * html/Stats/index.shtml: + * html/Stats/navigation.html: + Put the scripts and HTML documents used to generate the Stats + pages under CVS control. Now it is easier for people to add + their own libraries and tests, as well as let our user community + examine the way the pages are generated. + + * bin/auto_run_tests.lst: + Remove TAO/tests/LongUpcalls/run_ami_test.pl, the tests have + been incorporated into the run_test.pl script. + + * bin/sandbox.cpp: + Minor changes to the sandbox script, actually not very useful, + the ACE classes to create processes start a new process group by + default, therefore there is no simple way to kill all the + subprocesses if a test fails. + +Sun Aug 19 08:17:14 2001 David L. Levine + + * docs/ACE-guidelines.html: replaced function call in + ASSERT with simple comparison of a variable value. Thanks + to Tino Schwarze + for suggesting this. + +Sat Aug 18 18:26:24 2001 Balachandran Natarajan + + * ace/ACE.cpp: Removed the ASYS_INLINE macro from the definition + of write_n (). + +Sat Aug 18 13:18:10 2001 Douglas C. Schmidt + + * ace/ACE.{h,cpp}: Added a new write_n(...ACE_Message_Block *...) + for file transfers that's the dual of + send_n(...ACE_Message_Block *...). This helps out the C++NPv1 + book symmetry. Thanks to Alain Decamps + for motivating this. + +Fri Aug 17 18:17:38 2001 Douglas C. Schmidt + + * bin/clone.cpp: Only use extern char *sys_errlist[] if we're not + compiling on Linux. Thanks to Thomas Groth + for reporting this. + +Fri Aug 17 19:04:31 2001 Steve Huston + + * ace/Process.cpp (ACE_Process_Options::pass_handle): For WinCE, + just do ACE_NOTSUP_RETURN (-1). It can't dup a handle. + +Fri Aug 17 16:56:16 2001 Jeff Parsons + + * ace/CDR_Stream.h: + * ace/CDR_Stream.i: + * ace/CDR_Stream.cpp: + + Added wr_ptr() accessor method to ACE_InputCDR, and added its + use to adjust(), align_read_ptr(), read_1(), skip_string() and + skip_bytes() instead of end(). Also added reset of good_bit_ + to 0 upon failure in read_string() and read_wstring(). Thanks to + Peter Phillips for reporting this bug, + which was causing excessive memory allocation is some cases. + [Bug 591, 944, 983] + +Fri Aug 17 13:31:45 2001 Chad Elliott + + * tests/run_test.pl: + + Added the ability to generate windsh commands to load and run + the ace tests. + + * tests/Makefile: + + Added a rule to generate run_test.vxworks, using run_test.pl, + which can be used to run the tests selected for the VxWorks OS. + + * tests/run_test.lst: + + Update this list to take into account the limitations of VxWorks. + + * tests/test_config.h: + + Change the permissions of the log file open (for VxWorks only) to + use the symbolic permission names instead of 0x644. The + permissions differ from the standard UNIX modes. + + * tests/run_tests.vxworks: + + This file was out of date and no longer needs to be maintained. + So, it has been removed. + +Fri Aug 17 09:44:49 2001 Balachandran Natarajan + + * ace/Map_T.{h,i}: Reverted this change "Fri Aug 17 08:07:12 2001 + Johnny Willemsen " as this was giving too + much of warnings in the builds. + +Fri Aug 17 09:30:34 2001 Balachandran Natarajan + + * gperf/apps/tests/Makefile: Fixed the problem that was causing + the builds to fail. + +Fri Aug 17 08:07:12 2001 Johnny Willemsen + + * ace/Map_T.(h i): made the return value of + ACE_Incremental_Key_Generator::current_value const T& instead + of T&. Added uppercase traits to the ACE_Map class. + +Thu Aug 16 19:27:29 2001 Steve Huston + + * ace/Process.cpp (ACE_Process_Options::pass_handle): Add + "::" to front of "DuplicateHandle" so the WinCE compiler + sees the right function. + Also added ctor/dtor for ACE_Managed_Process to try and fix the + can't find vtable error on Linux. + + * ace/Process.h: Added a constructor for ACE_Managed_Process + to fix "can't find vtable" error on Linux. + + * ace/Process.i: Moved ACE_Managed_Process dtor to .cpp file. + +Thu Aug 16 15:10:42 2001 Steve Huston + + * ace/Process.h (pass_handle): Clarify comments for this method. + + * ace/Process_Manager.cpp: + * ace/Process.(h i): Moved the ACE_Managed_Process class out + of Process_Manager.cpp, exposing it for general use. + +Thu Aug 16 10:34:20 2001 Douglas C. Schmidt + + * ace/POSIX_Proactor.cpp (allocate_aio_slot): Added a fix so that + the POSIX Proactor compiles with FreeBSD 4.4. Thanks to Yev + Omenzel for reporting this and to Craig + Rodrigues for fixing it and to + John E Hein for fixing the fix ;-) + +Thu Aug 16 08:09:53 2001 Chad Elliott + + * tests/run_test.lst: + + Added the OTHER requirement to the Thread_Pool_Reactor_Test and + the Thread_Pool_Reactor_Resume_Test. These are only built if + OTHER is part of the ACE components list. + + +Wed Aug 15 15:50:38 2001 Douglas C. Schmidt + + * ace/WFMO_Reactor.cpp: Don't try to purge the notifications if + notify_handler_ is 0. Thanks to Edan Ayal + for reporting this. + +Wed Aug 15 11:33:26 2001 Carlos O'Ryan + + * bin/nightlybuilds/builds.lst: + Remove one build from the list, the machine is being retargeted + for performance testing. + +Wed Aug 15 11:10:22 2001 Balachandran Natarajan + + * include/makeinclude/wrapper_macros.GNU: Added $(VDIR) for + OBJDIRS. This prevents hardcoding the value of OBJDIRS. This has + been tested for a dynamic and a static library on Linux. If + there are other platforms that gives problems, please feel free + to revert the changes to the version 4.114 of the file. + +Wed Aug 15 09:35:19 2001 Chad Elliott + + * ace/Dirent_Test.cpp: + + Added #define's for VXWORKS that allow this test to function + properly. Avoid hard-coded relative paths that may not exist on + VxWorks. + +Wed Aug 15 09:08:40 2001 Chad Elliott + + * ace/Sock_Connect.cpp: + + Added an implementation to ACE_Sock_Connect::get_ip_interfaces(). + With this, the Enum_Interfaces_Test works correctly. + +Wed Aug 15 07:54:49 2001 Balachandran Natarajan + + * include/makeinclude/wrapper_macros.GNU: Unravelled the mystery a + bit. The patch that was applied to remove the hard coding of + OBJDIRS seems to be the problem. The OBJDIRS has been hardcoded + again. This should fix the problems that we have been seeing in + the builds. If at all we need to remove hardcoding the OBJDIRS, + we either need to put the value of VDIR or VSHDIR. If we put + both we are going to end up with duplicate targets. Now the + killer, what do we add to the OBJDIRS? Me thinks it is VDIR. I + have test that out else I would be breaking builds again. + +Wed Aug 15 07:30:00 2001 Balachandran Natarajan + + * include/makeinclude/wrapper_macros.GNU: Reverted the change "Tue + Aug 14 21:42:24 2001 Balachandran Natarajan". Thought that was a + typo. But looks like it is not. + +Wed Aug 15 06:39:50 2001 Balachandran Natarajan + + * ace/Process.cpp: Fixed a warning with g++. + +Tue Aug 14 23:57:42 2001 Steve Huston + + * A set of changes to encapsulate passing handles to spawned + processes. Thanks very much to Eamonn Saunders + for suggesting that this could work + and pointing out the Win32 details! + + * THANKS: Added Eamonn Saunders to the Hall of Fame + + * ace/Handle_Set.h: Replace include ace/ACE.h with ace/OS.h. This + class is part of the OS subset. + + * ace/Process.h: Added the following methods: + - ACE_Process_Options::pass_handle (ACE_HANDLE). Cause the specified + handle to be passed to a child process when it's spawned. Has + meaning mainly for Win32. The handle value will be included + in the spawned process's command line as +H . The passed + handle value will be duplicated if on Win32 less than NT4. + + - ACE_Process_Options::dup_handles (ACE_Handle_Set set) const + Get a copy of the handles the ACE_Process_Options duplicated + for the spawned process. + + - ACE_Process_Options::passed_handles (ACE_Handle_Set set) const + Get a copy of the handles passed to the spawned process. This + will be the set of handles previously passed to pass_handle(). + + - ACE_Process::close_dup_handles (). Close all the handles in + the set obtained from ACE_Process_Options::dup_handles. + + - ACE_Process::close_passed_handles (). Close all the handles in + the set obtained from ACE_Process_Options::passed_handles. + + Also moved the avoid_zombies() functions and flag out of the + non-Win32 section - it can safely be ignored, maintain the + intended semantics, and help apps stay portable. + + * Process.cpp: Implement the above new methods. Also, after spawning + a process, the parent will call the above dup_handles/passed_handles + methods to get any passed handles. The close_*_handles() methods + can then close them. Also, the destructor will call close_dup_handles + to be sure that no handles leak on Win32 less than NT4. + + * Process.i (command_line_buf ()): Added a new arg to receive the + maximum length of the buffer pointed to on return. To maintain + backward compatibility, the arg defaults to 0 (don't return + the max length). + + * ace/Makefile: Moved Handle_Set from the UTILS group to the OS group. + + * ace/ace.icc: Moved Handle_Set from DEMUX to OS. + + * docs/ACE-subsets.html: Move Handle_Set from DEMUX to OS. + +Tue Aug 14 21:42:24 2001 Balachandran Natarajan + + * include/makeinclude/wrapper_macros.GNU: Fixed a typo. + +Tue Aug 14 21:30:04 2001 Balachandran Natarajan + + * apps/Makefile: Removed JAWS2 and JAWS from the Makefile. There + are several reasons for reverting. This breaks the builds. The + Makefiles in the recursed directories are all messed up. The + library dependencies doesnt seem trivial. Nobody may have time + to fix this. Further, our daily builds return too quickly and we + just needed more files to compile :-). + +Tue Aug 14 14:19:49 2001 Steve Huston + + * ace/Memory_Pool.i (ACE_Local_Memory_Pool dtor): Call release() + here to free up the blocks allocated by the pool, else they're + stranded and can't be freed. + + * ace/Memory_Pool.cpp (ACE_Local_Memory_Pool::release): After + freeing up the blocks, reset the allocated_chunks_ set to be + sure they are also freed, and the chunks can't be freed again. + +Tue Aug 14 14:19:37 2001 Balachandran Natarajan + + * ace/Log_Msg.cpp: Applied the patches sent by Tibor Kiss + for ACE_Log_Msg::close () + +Tue Aug 14 13:55:42 2001 Balachandran Natarajan + + * include/makeinclude/platform_macosx.GNU: Added a patch from John + Michael Zorko . + +Tue Aug 14 10:21:39 2001 Steve Huston + + * ace/Log_Msg.h: Clarified the defaults for the per-process and + per-instance default priority masks. + +Mon Aug 13 14:01:35 2001 Douglas C. Schmidt + + * include/makeinclude/wrapper_macros.GNU: Fixed some hard-coded + uses of .shobj and .obj. Thanks to Shashi Bhushan + for contributing these. + + * ace/CDR_Stream.h: Added comments warning about the deletarious + effects of not aligning buffers to ACE_InputCDR and + ACE_OutputCDR properly. Thanks to Alain Decamps + for reporting this. + +Sun Aug 12 14:46:07 2001 Douglas C. Schmidt + + * ace/OS.cpp (sched_params): Make sure to set errno for Win32 so + that callers can figure out what's going wrong in a consistent + way. + + * ace/Select_Reactor_Base.i (purge_pending_notifications): Don't + try to purge the notifications if notify_handler_ is 0. thanks + to Steve Rahn for reporting this. + +Mon Aug 13 20:09:04 2001 Balachandran + + * ACE version 5.1.19 released. + +Sun Aug 12 02:17:01 2001 Nanbor Wang + + * ace/MEM_Acceptor.cpp: + * ace/MEM_Connector.cpp: On non-Win32 platforms, disable + multithreaded MEM_IO if _ACE_USE_SV_SEM is defined. + +Sun Aug 12 01:27:51 2001 Steve Huston + + * tests/Log_Msg_Test.cpp: Correct const-ness of a pointer + retrieved from ACE_Log_Record::msg_data(). + +Sun Aug 12 00:34:42 2001 Steve Huston + + * ace/Log_Record.h: + * ace/Log_Record.i (msg_data()): Changed ACE_TCHAR *msg_data() + to: const ACE_TCHAR *msg_data (void) const. Makes it safer, + and conforms to all current usage inside ACE. Also makes + C++ Network Programming examples simpler :-) + +Sat Aug 11 09:01:11 2001 Douglas C. Schmidt + + * ace/Thread.h: + * ace/Task.h: Added a list of other flags that can be passed to + activate(). + +Fri Aug 10 19:39:48 2001 Krishnakumar B + + * bin/auto_run_tests.lst: + + Disabled the Blocking_Sync_None test from running under Tru64. + Also changed the config parameter passed to the auto_compile + script from TRU_64 to Tru64 in + ~bugzilla/bin/auto_compile_tru64_cxx. + + This is so that the test is disabled only for the WashU builds. + The reason being that Bala was not too happy with changing the + default values for all the platforms and we also wanted to avoid + more #ifdefs in the code. Other builds might have better values + and the test might succeed. Have to confirm this though. + +Fri Aug 10 17:59:47 2001 Nanbor Wang + + * ace/Svc_Conf_y.cpp: + * ace/OS.h: Added /**/ between #include and and + to avoid warning from CE compiler. + + * ace/ace_dll.vcp: Added Svc_Conf_Lexer_Guard.* to the project. + +Fri Aug 10 13:40:46 2001 Chad Elliott + + * bin/nightlybuilds/builds.lst: + + I didn't realize the LIST definition was needed. I have + added it for the Tru64 4.0f Compaq C++ 6.3-10 build. + +Fri Aug 10 11:45:03 2001 Chad Elliott + + * bin/nightlybuilds/builds.lst: + + Added the Tru64 4.0f Compaq C++ 6.3-10 build. + +Fri Aug 10 11:06:23 2001 Chad Elliott + + * apps/drwho/CM_Client.cpp: + * apps/drwho/CM_Server.cpp: + * apps/drwho/server.cpp: + + Changes to avoid warnings on HP-UX with aCC. + +Thu Aug 9 16:56:05 2001 Balachandran Natarajan + + * ace/Hash_Map_Manager_T.i: + * ace/Hash_Map_Manager_T.cpp: We seem to be re-inventing wheels + again and again. A few months back we had a show stopper in a + beta which was caused by usage of static cast. The cast was not + to the liking of SunCC 4.2. Looks like we had to change a bunch + of static cast sprayed in these two files to a C style cast as + 4.2 doesnt like them. Compilers like Borland handle these + better, but not 4.2. + +Thu Aug 9 11:51:10 2001 Balachandran Natarajan + + * include/makeinclude/platform_hpux_aCC.GNU: On popular mandate we + have the -w flag removed from CCFLAGS in the above file. Looks + like the -w disables lots of warnings that may be useful. + +Thu Aug 9 11:41:01 2001 Balachandran Natarajan + + * ace/CDR_Stream.h (ACE_OutputCDR): Fixed the ambigous constructor + problem. The InputCDR class had two constructors which were + similar if the default values for the arguments were + exercised. Thanks to Torbjorn Backstrom + for reporting this. + +Thu Aug 9 12:31:21 2001 Douglas C. Schmidt + + * ace/OS_String.cpp (strtok_r_emulation): Make sure to check + for a NULL return from strtok() before calling strlen()! Thanks + to Boris Sukholitko for reporting this. + +Wed Aug 08 21:27:50 2001 Ossama Othman + + * bin/nightlybuilds/builds.lst (Debian_Wchar, Debian_GCC_3.0): + + The host these nightly builds were built on is now called + "rumba" (previously "valinor"). Updated the build list + accordingly. + +Wed Aug 08 21:19:09 2001 Ossama Othman + + * tests/Service_Config_Test.UTF-16.conf: + + Removed extraneous characters from this file that were causing + the Service Configurator's underlying lexer to "choke." + +Wed Aug 8 16:23:31 2001 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Add the AMI_Buffering tests to the nightly regression testsuite. + +Wed Aug 8 16:07:26 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: The GIOP lite tests will not work in the + static builds. It was adding more complications to the test + than what is already there to get it working for the static + builds. + +Wed Aug 8 14:06:36 2001 Krishnakumar B + + * ace/config-tru64.h: + + Define ACE_HAS_NONSTATIC_OBJECT_MANAGER for all DEC Unix 4.x + versions. + + * ace/config-cxx-common.h: + + Define ACE_AUTO_PTR_LACKS_RESET if __DECCXX_VER == 60190027. + Thanks to Robert Burke for reporting + this. + + * include/makeinclude/platform_osf1_3.2.GNU: + * include/makeinclude/platform_osf1_4.0.GNU: + * include/makeinclude/platform_osf1_4.0_g++.GNU: + * include/makeinclude/platform_osf1_4.0_kcc.GNU: + * include/makeinclude/platform_osf1_4.0_rcc.GNU: + + Removed the following files. + + * include/makeinclude/platform_osf1_3.2_cxx.GNU: + * include/makeinclude/platform_osf1_4.x_cxx.GNU: + * include/makeinclude/platform_osf1_4.x_g++.GNU: + * include/makeinclude/platform_osf1_4.x_kcc.GNU: + * include/makeinclude/platform_osf1_4.x_rcc.GNU: + + Added new versions of the removed files. + + * include/makeinclude/platform_tru64_pre.GNU: + * include/makeinclude/platform_tru64_post.GNU: + + Moved a lot of duplicated code into these new files. + + * include/makeinclude/platform_tru64_cxx.GNU: + * include/makeinclude/platform_tru64_g++.GNU: + * include/makeinclude/platform_tru64_kcc.GNU: + + Removed a lot of old *cruft* like setting up compilation with + cxx when gcc was asked for etc. etc. Somebody went overboard + with cut'n paste and copied David's changes blindly. Still not + completely satisfied. But it works and is better than before. + This also fixes Bug Id 989. + +Wed Aug 08 11:30:26 2001 Ossama Othman + + * tests/Service_Config_Test.cpp (run_test): + + Don't check if "ACE_USES_WCHAR == 1" since some configurations + neglect to set it an integer value. Instead, just check if it + is defined. + +Wed Aug 8 12:31:51 2001 Balachandran Natarajan + + * tests/MEM_Stream_Test.cpp: Changed a ACE_DEBUG statment with an + LM_WARNING to an LM_DEBUG. + +Wed Aug 08 11:59:45 2001 Nanbor Wang + + * ace/OS.h: Do not redefine ACE_IOV_MAX if it has already been + defined. + +Wed Aug 8 06:21:24 2001 Douglas C. Schmidt + + * ace/Makefile: Moved Message_Block from STREAMS_FILES to + UTILS_FILES. + + * ace/OS_Dirent.inl (closedir): Changed delete d->directory_name_ to + delete [] d->directory_name_. Thanks to Olivier Brunet + for reporting this. + +Tue Aug 7 21:59:42 2001 Douglas C. Schmidt + + * tests/Svc_Handler_Test.cpp: Modified the test to dump the contents + of the temporary file to the log file. + +Tue Aug 7 19:14:24 2001 Douglas C. Schmidt + + * ace/CDR_Stream.i: + * ace/SOCK_Stream.h: Fixed incorrect comments. + Thanks to Alain Decamps for reporting + these. + +Tue Aug 7 15:19:38 2001 Douglas C. Schmidt + + * ace: Changed all uses of IOV_MAX to use the new ACE_IOV_MAX. + * ace/OS.h: Added a new ACE_IOV_MAX that makes it clear this is + an ACE-level #define. We use this in C++NP v1. + +Tue Aug 7 14:16:57 2001 Douglas C. Schmidt + + * ace/Svc_Handler.cpp: Reimplemented the flush() method to use + the new send_n() method on the various ACE I/O classes. + + * ace/SOCK_Stream.{h,i}: + * ace/FILE_IO.{h,i}: Added a new send_n() method that sends all + the s chained through their and + pointers using the underlying OS gather-write operation to + reduce the domain-crossing penalty. + +Tue Aug 7 17:27:16 2001 Balachandran Natarajan + + * tests/Collection_test.cpp: Fixed a compile error with g++. This + is a patch that Johnny Willemsen sent as a part of his last + checkin. + +Tue Aug 07 11:25:36 2001 Nanbor Wang + + * ace/config-freebsd-pthread.h: Made the following definition + valid only for pre-4.2-RELEASE. + + #define ACE_LACKS_GETPGID + #define ACE_LACKS_SETPGID + #define ACE_LACKS_SETREGID + #define ACE_LACKS_SETREUID + + Thanks to Robert Burke for reporting + this. + +Tue Aug 07 16:40:12 2001 Johnny Willemsen + + * ace/Hash_Map_Manager_T.*: + Added const_iterator to the Hash_Map_Manager so that it is + possible to iterate over a hash map in a const method + + The operator= of the iterator now check the value of this to + check that the iterator instance is assigned to itself + + * tests/Hash_Map_Manager_Test.cpp + Extended this test to test the new const_iterator capabilities + of the hash map + + * ace/Unbounded_Set.cpp: + Implemented missing operator* for the const iterator + + * tests/Collection_test.cpp: + Extended test to test the operator* of the + Unbounded_Set_Const_Iterator + +Mon Aug 6 19:58:48 2001 Douglas C. Schmidt + + * ace/config-hpux-11.00.h: Added #define for ACE_HAS_TERM_IOCTLS. + Thanks to Torbjorn Backstrom + for reporting this. + + * ace/OS.h: Added a #include for for HP/UX. Thanks + to Torbjorn Backstrom for + reporting this. + +Mon Aug 6 12:51:35 2001 Douglas C. Schmidt + + * ace/Synch.h (ACE_Null_Mutex>): Fixed a cut&paste error + where acquire_write() should be acquire_read(). Thanks to + Russell Mora for fixing this. + +Mon Aug 06 17:17:33 2001 Ossama Othman + + * ace/Service_Config.cpp: + + Fixed some debugging messages that were not wrapped within an + ACE_LIB_TEXT macro. + + * tests/Service_Config_Test.UTF-16.conf: + + Interim UTF-16 encoded version of the UTF-8 encoded + Service_Config_Test.conf. It was generated on a little-endian + host. Its current purpose is simply to keep our Unicode + regression testing happy until the on-the-fly generation is + implemented. Once we start generating this file on-the-fly + this file should disappear. + + * tests/Service_Config_Test.cpp (run_test): + + When using full Unicode support, use the version of the Service + Configurator file that is UTF-16 encoded (as described above). + +Mon Aug 06 11:10:24 2001 Ossama Othman + + * ace/Svc_Conf_l.cpp: + + More Unicode fixes. Flex's allocation function uses malloc() as + its underlying allocator. Since it only accepts the size in + bytes, allocate "size * sizeof (ACE_TCHAR)" when allocating + string buffers. This should clear up some strange looking text + "unknown character" messages emanating from the Service + Configurator's underlying text scanner. + + Note that these changes do not fix the cause of the "unknown + character." Those fixes should soon follow. + +Mon Aug 06 09:04:04 2001 Ossama Othman + + * ace/Svc_Conf.l: + + Unicode updates. Wrap debugging text within an ACE_LIB_TEXT + macro. + +Sun Aug 5 14:31:10 2001 Balachandran Natarajan + + * tests/run_tests.lst: Ossama suggested that we dont run the + Service_Config_Test in static builds. + +Fri Aug 04 3:33:31 2001 Yamuna Krishnamurthy + + * ace/QoS/SOCK_Dgram_Mcast_QoS.h: + * ace/QoS/SOCK_Dgram_Mcast_QoS.cpp: + + Made the open method public so we can open UDP sockets for + non-multicast addresses. + +Fri Aug 03 22:19:31 2001 Steve Huston + + * ace/config-hpux-11.00.h: Added ACE_HAS_WCHAR to build in the + wide char handling since Darrell so nicely straightened all + the muck out throughout ACE. Thanks Darrell! + +Fri Aug 03 22:15:51 2001 Steve Huston + + * ace/Log_Msg.cpp (log): For 'W' and 'w' on HP-UX, the 'ls' and + 'lc' forms are not allowed; HP-UX requires 'S' and 'C'. + +Fri Aug 3 13:10:59 2001 Ossama Othman + + * ace/config-linux-common.h (ACE_UINT64_FORMAT_SPECIFIER, + ACE_SSIZE_T_FORMAT_SPECIFIER, ACE_SIZE_T_FORMAT_SPECIFIER): + + Removed unnecessary and some incorrect format specifiers for the + 32-bit platform case. In particular, the format specifier for + an unsigned 64-bit integer was incorrectly set to "%Lu." "%L" + is the format specifier for a "long double," not a "long long" + integer on 32-bit platforms. "%llu" is the correct format + specifier which `ace/Basic_Types.h' already defines. + +Fri Aug 3 09:55:38 2001 Ossama Othman + + * bin/auto_run_tests.lst: + + Added the new TAO "DLL_ORB" test to the list of tests to run. + +Fri Aug 3 08:26:45 2001 Balachandran Natarajan + + * ace/RW_Process_Mutex.cpp: Added a missing comma in the + constructor. This should fix Win32 compile errors. + +Fri Aug 3 08:07:45 2001 Balachandran Natarajan + + * ace/CDR_Base.cpp: Added a check for a memory allocation failure + in grow (). Thanks to Francis Paul for + pointing this out. + +Thu Aug 2 18:37:23 2001 Douglas C. Schmidt + + * ace/RW_Process_Mutex.cpp: Added ACE_DEFAULT_OPEN_PERMS + to the constructor call to ACE_RW_Process_Mutex so that it does + the right thing on Win32. Thanks to Wayne Erchak + for reporting this. This fixes + bugid 996. + +Thu Aug 02 13:04:19 2001 Steve Huston + + * ace/ace.icc: Added Intrusive_List.cpp to the TEMPLATE_FILES + section. + +Thu Aug 02 06:59:39 2001 Steve Huston + + * ace/Basic_Types.h (ACE_SIZEOF_WCHAR): If ACE_HAS_XPG4_MULTIBYTE_CHAR + is defined, use sizeof(wchar_t) to set ACE_SIZEOF_WCHAR. + +Wed Aug 1 16:05:49 2001 Carlos O'Ryan + + * Merged changes from the fix_886 branch + + Tue Jul 31 09:17:49 2001 Carlos O'Ryan + + * ace/Intrusive_List.h: + * ace/Intrusive_List.inl: + Add new methods to access the head and tail of the list. + + * ace/Intrusive_List.cpp: + Fixed the implementation of remove(), if the element to be + removed was the last on the list it wasn't removed at all. + Left some code to check invariants, have to find a way to keep + that code around with some optional compilation flags. + + Thu Jul 26 16:50:54 2001 Carlos O'Ryan + + * ace/Makefile: + * ace/Makefile.am: + * ace/Makefile.bor: + * ace/Intrusive_List.h: + * ace/Intrusive_List.inl: + * ace/Intrusive_List.cpp: + Add new template to implement intrusive lists, i.e. lists that + assume their elements implement the next() and prev() methods. + + * ace/Intrusive_List_Node.h: + * ace/Intrusive_List_Node.inl: + * ace/Intrusive_List_Node.cpp: + Helper class to add the requirements of ACE_Intrusive_List to + any other class, simply do: + class Foo : public ACE_Intrusive_List_Node + +Wed Aug 1 15:57:35 2001 Ossama Othman + + * ace/Message_Block.cpp (release, release_i): + + Obtain the pointer to the allocator from the object that will be + destroyed before calling ACE_DES_FREE on the object. Previously + we were obtaining the allocator after the object was destroyed, + due to the way the ACE_DES_FREE macro works. Thanks to Hyman + Rosen for reporting the problem, and to + Carlos for suggesting a fix. [Bug 992] + +Wed Aug 1 15:00:21 2001 Douglas C. Schmidt + + * ace/Log_Record.{h,i}: Changed msg_data_len() from a "setter" + to a "getter" method, which makes more sense. Thanks to Patrick + Rabau for reporting this. + +Wed Aug 1 12:43:57 2001 Ossama Othman + + * ace/Svc_Conf_l.cpp: + + Reintegreated Nanbor's change (Wed Jun 13 10:22:10 2001 Nanbor + Wang ) that enables proper handling of + UNICODE Service Configurator directives. + +Wed Aug 1 07:14:42 2001 Douglas C. Schmidt + + * include/makeinclude/platform_vxworks5.x_g++.GNU: Checked in a new + version of this file, which includes support for the Hitachi + chip. Thanks to Frank Wolf for this. + + * ace/Log_Record.cpp (format_msg): Added a cast to fix a warning. + Thanks to Bala for reporting this. + +Tue Jul 31 22:53:26 2001 Ossama Othman + + * tests/libService_Config_DLL.icc: + + New Visual Age project file for the libService_Config_DLL + library. + + * tests/Makefile.am: + + Added build targets/dependencies for the libService_Config_DLL + library. + +Tue Jul 31 22:46:33 2001 Ossama Othman + + * tests/Service_Config_DLL.dsp: + * tests/Service_Config_Test.dsp: + + Removed the static library configurations. The + Service_Config_Test currently requires dynamically loadable + objects. Fixes Win32 "LIB" build failures. + +Tue Jul 31 22:10:48 2001 Ossama Othman + + * tests/Service_Config_Test.cpp (run_test): + + Wrap strings passed to ACE_ARGV::add() within an ACE_TEXT + macro. Fixes Unicode conversion problems. + +Tue Jul 31 16:53:57 2001 Ossama Othman + + * ace/Svc_Conf.h (ace_yyrestart, ace_yy_delete_parse_buffer, + ace_yydirective): + + Remove these global function and variable declarations. They + are no longer used. + +Tue Jul 31 16:43:33 2001 Ossama Othman + + * ace/Basic_Types.h: + + If "__LITTLE_ENDIAN__" is defined then assume that the + architecture is little endian. Some compilers/platforms define + that macro. Suggested by Frank Wolf" . + + * ace/Svc_Conf.h (yy_push_buffer): + * ace/Svc_Conf.l (yy_push_buffer): + * ace/Svc_Conf_l.cpp (ace_yy_push_buffer): + * ace/Svc_Conf_Lexer_Guard.cpp (ACE_Svc_Conf_Lexer_Guard): + * ace/Svc_Conf_Lexer_Guard.h (ACE_Svc_Conf_Lexer_Guard): + + The Service Configurator directive is an "ACE_TCHAR *" not a + "char *". Updated these method/function parameters to accept + the former. Fixes a compile-time problem on "wchar/Unicode" + builds. + +Tue Jul 31 05:34:48 2001 Douglas C. Schmidt + + * ace/OS.h: Removed a spurious WNOHANG definition. Thanks to + Christina Junru for reporting this. + +Mon Jul 30 15:31:42 2001 Douglas C. Schmidt + + * ace/Log_Msg.{h,i,cpp}: Fixed this class so that all of its fields + are ACE_UINT32 or ACE_INT32 internally so that it'll always be + the same on all platforms. Thanks to Fabris + for reporting this. + +Tue Jul 31 10:22:38 2001 Ossama Othman + + * tests/Makefile: + + Only build the Service_Config_Test if shared libraries are + enabled, since it attempts to dynamically load a shared + library. + +Tue Jul 31 10:16:31 2001 Steve Huston + + * ace/Dump.h: Clarified the use of ACE_NDEBUG for turning this + feature off, not on. Thanks to Don Hinton + for noticing this. + +Mon Jul 30 13:41:00 2001 Nanbor Wang + + * ace/OS.cpp (ACE_Time_Value::FILETIME_to_timval_skew): Updated + docuementation to better explain the meaning of this constant. + Thanks to Mike Vitalo for motivating the + change. + +Mon Jul 30 09:43:06 2001 Douglas C. Schmidt + + * ace/OS.i (mutex_lock): Missing an argument to the ACE_OSCALL macro. + Thanks to Bala for reporting this. + +Mon Jul 30 05:43:23 2001 Douglas C. Schmidt + + * ace/Synch.h (ACE_Semaphore): Corrected the comment on + how to get POSIX Pthreads "implementation" of semaphores (which + supports the timed acquire() option). Thanks to Grzegorz + Sikora for reporting this. + +Sun Jul 29 19:03:56 2001 Douglas C. Schmidt + + * tests/Thread_Mutex_Test.cpp (test): Fixed this test to be + consistent wrt the errno for the timed acquire(), which should + now always be set to ETIME rather than ETIMEDOUT and EBUSY. + + * ace/Message_Queue_T.cpp (wait_not_full_cond, + wait_not_empty_cond): Fixed a nasty bug with the semaphore + version of ACE_Message_Queue that would have reared it's ugly + head if ACE_NULL_SYNCH were used when + ACE_HAS_OPTIMIZED_MESSAGE_QUEUE was enabled. Fixing this bug + also triggered the following changes. + + * ace/OS.{h,i}: Added support for ACE_OS::sema_wait(), + ACE_OS::mutex_lock(), ACE_OS::thread_mutex_lock() that take + ACE_Time_Value *. + + * ace/OS.i: For some odd reason the timeouts for the timed version + of mutex_lock() were returning a random smattering of errnos. + I've changed them to all be consistent with the + ACE_Condition_Thread_Mutex::wait() errno, which is ETIME. + + * ace/Synch.h: Updated the documentation of all the timed + acquire() methods to explain what the various return values + mean. + +Sun Jul 29 22:10:40 2001 Ossama Othman + + * tests/Service_Config_DLL.cpp: + * tests/Service_Config_DLL.h: + * tests/Service_Config_DLL.dsp: + * tests/Service_Config_DLL_Export.h: + * tests/Service_Config_Test.conf: + + New files associated with the existing Service_Config_Test. + They are used when testing the reentrance/thread-safety of the + Service Configurator, in addition to testing the Service + Configurator's ability to handle nested processing of Service + Configurator directives. + + * tests/Service_Config_Test.cpp (run_test): + + Add arguments to the Service Configurator argument vector to + make it process the newly added `Service_Config_Test.conf' + file. + + (main): + + Make the ACE_Thread_Manager wait for all running threads before + exiting the test. Processing the `Service_Config_Test.conf' + file causes some threads to be spawned. + +Sun Jul 29 19:19:20 2001 Ossama Othman + + * ace/Service_Config.cpp (process_directive, process_directives): + + Wrap the ACE_GUARD_RETURN macro within an ACE_MT block. The + ACE_Static_Object_Lock declaration is only visible if + ACE_HAS_THREADS is defined. This truly fixes the + single-threaded build problems. + +Sun Jul 29 19:06:11 2001 Ossama Othman + + * ace/Svc_Conf.y (ace_obstack): + * ace/Svc_Conf_y.cpp: + * ace/Svc_Conf_l.cpp: + + UNICODE updates and fixes. + +Sun Jul 29 10:50:45 2001 Ossama Othman + + * ace/Svc_Conf_Lexer_Guard.cpp: + + There is no longer any need to include "ace/Object_Manager.h" + + * ace/Service_Config.cpp: + + Include "ace/Object_Manager.h" to pull in the definition of + ACE_Static_Object_Lock. Fixes a problem found in Sun builds and + single-threaded builds. + +Sat Jul 28 23:03:24 2001 Ossama Othman + + The following are changes that make the Service Configurator + reentrant and thread-safe. + + * ace/Svc_Conf.y: + + Generate a pure (reentrant) parser using Bison. BYACC doesn't + support generation of reentrant parsers. + + * ace/Svc_Conf.l: + + Implemented "buffer stack" support. This feature makes it + possible to process Service Configurator directives within a + Service Object's init() method, i.e. support nested directive + processing. + + (ace_yyerrno): + + Moved declaration of ace_yyerrno from this file to + `Svc_Conf.y'. ace_yyerrno was not used in the generated + scanner. It was only used in the generated parser. + + (yy_delete_parse_buffer): + + There is no longer any need for this function. The lexer buffer + stack implementation handles memory management of lexer buffers. + + (yywrap): + + Do not call yy_delete_parse_buffer(). It is no longer necessary + to do so, in addition to the fact that that function was + removed (as described above). + + (<>): + + Do not call ACE_YY_NEW_FILE in this rule. The new buffer stack + implementation handles the buffer switching that ACE_YY_NEW_FILE + did, and more. + + * ace/Svc_Conf_Tokens.h: + * ace/Svc_Conf_l.cpp: + * ace/Svc_Conf_y.cpp: + + Regenerated these files using updated Bison/YACC and FLEX input + files to pull in support for reentrant parsing and nested + processing of Service Configurator directives. + + * ace/Svc_Conf.h (ace_yy_push_buffer, ace_yy_pop_buffer): + + Added function prototypes for the newly implemented lexer buffer + stack manipulation functions. + + (ace_yylex): + + Added ACE_YYSTYPE parameter to this functions signature, as + required by the new reentrant parser support. + + (ACE_SERVICE_DIRECTIVE_STACK_DEPTH): + + New symbolic constant that defines the maximum supported depth + for nested Service Configurator processing. The current default + is 8. + + (ACE_YY_INPUT): + + No longer any need to redefine this macro to support scanning of + Service Configurator directive strings. The new lexer buffer + stack implementation provides support for lexer buffer scanning + from a string instead of a pointer to "FILE." + + (ace_yydirective): + + This global variable is no longer needed due to the fact that + the new buffer stack implementation handles directives read from + both a string and a file. + + * ace/Service_Config.cpp: + + (process_directive, process_directives): + + Obtain a recursive lock before manipulating the lexer buffer + stack, and invoking the parser and scanner. This makes + invocation of the scanner thread-safe. + + The new lexer buffer stack implemenation obviates the need to + call yyrestart() since buffer switching is handled by the stack + implementation. + + (open_i, close): + + No need to deallocate the lexer buffer since the buffer stack + implementation handles that. + + * ace/Svc_Conf_Lexer_Guard.h: + * ace/Svc_Conf_Lexer_Guard.cpp: + + New "guard" class that makes lexer buffer stack pushing and + popping exception-safe. + + * ace/Makefile: + * ace/Makefile.am: + * ace/Makefile.bor: + * ace/ace.icc: + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + + Added Svc_Conf_Lexer_Guard.* sources to these Makefiles and + project files. + +Sat Jul 28 14:58:30 2001 Douglas C. Schmidt + + * ace/Svc_Conf_l.cpp: + * ace/Svc_Conf_y.cpp: Reran BYACC and FLEX on the Svc_Conf.l and + Svc_Conf.y files to regenerate them. Thanks to Bala for + motivating this. + + * netsvcs/clients/Tokens/collection/Makefile, + netsvcs/clients/Tokens/deadlock/Makefile, + netsvcs/clients/Tokens/invariant/Makefile, + netsvcs/clients/Tokens/mutex/Makefile, + netsvcs/clients/Tokens/rw_lock/Makefile, + examples/ASX/CCM_App/Makefile, + examples/Logger/Acceptor-server/Makefile, + examples/Reactor/Multicast/Makefile, + examples/Reactor/Ntalker/Makefile, + examples/Shared_Malloc/Makefile, + performance-tests/TCP/Makefile, + performance-tests/UDP/Makefile: Removed the line + include $(ACE_ROOT)/include/makeinclude/rules.LIB.GNU + so that these projects will build correctly on VxWorks with + Make 3.79.1. Thanks to Frank Wolf for reporting this. + +Fri Jul 27 11:24:50 2001 Douglas C. Schmidt + + * ace/Svc_Conf.y: Allow quoted strings as the pathname. Thanks + to Kevin Burge for suggesting this + and providing the fix. + + * ace/Svc_Conf.l: Added support for "~" in pathnames to support + Win32isms. Thanks to Kevin Burge + for suggesting this and providing the fix. + + * ace/Refcounted_Auto_Ptr.i (assign): Fixed the code to avoid a + race condition. Thanks to Charlie Duke for this fix. + +Thu Jul 26 08:15:36 2001 Douglas C. Schmidt + + * include/makeinclude/platform_vxworks5.x_g++.GNU: Changed + $PATH to $(PATH). Thanks to Frank Wolf for reporting this. + +Wed Jul 25 17:46:58 2001 Douglas C. Schmidt + + * ace/Asynch_Acceptor.{h,cpp}: Added an asynch_accept() accessor + method. Thanks to Craig L. Ching for + reporting this. + +Wed Jul 25 17:36:09 2001 Douglas C. Schmidt + + * ace/Refcounted_Auto_Ptr.i: Added a lock for the reference count + to the assign() method. Thanks to Charlie Duke + for reporting this. + +Fri Jul 27 23:17:31 2001 Steve Huston + + * ace/ace_wchar.h: If ACE_HAS_XPG4_MULTIBYTE_CHAR is set, then + also set up definitions for functions that are not present + (ACE_LACKS_ITOW, ACE_LACKS_WCSICMP, ACE_LACKS_WCSNICMP, + ACE_LACKS_WCSDUP). + + * ace/ace_wchar.inl: If not ACE_WIN32, include to see + strlen(). + + * ace/OS_String.inl (strstr): The XPG4 multibyte version of + strstr() is wcswcs(), whereas the ANSI C / UNIX98 version is + wcsstr(). So if ACE_HAS_XPG4_MULTIBYTE_CHAR is defined, use + wcswcs. + +Fri Jul 27 21:52:48 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added the IDL_Cubut test with GIOP Lite + script, to our daily builds. + +Fri Jul 27 16:50:49 2001 Steve Huston + + * tests/Log_Msg_Test.cpp: Silence a compile warning in g++. + +Fri Jul 27 12:18:49 2001 Steve Huston + + * ace/Log_Msg.cpp (log): Fixed compile error - missing "" around + 's' for the %S case. + +Fri Jul 27 11:07:26 2001 Chad Elliott + + * ace/OS.h: + + After conversation with Steve Huston, I am reverting his change + pertaining to HPUX from "Tue Jul 10 18:15:39 2001 Steve Huston + ". + +Fri Jul 27 10:57:24 2001 Chad Elliott + + * ace/SOCK_Dgram_Bcast.cpp: + + Fix the ACE_SOCK_Dgram_Bcast::mk_broadcast() which was completely + broken on AIX. The broadcast_client in docs/tutorials/008 now + works with the help of this change. + +Thu Jul 26 22:09:19 2001 Steve Huston + + * ace/Log_Msg.cpp (log): Extend behavior so that all printf + formatting conversion specifiers can be used with all legal + ACE_Log_Msg format characters. This allows the caller to line + up columns on any field, like line number or program name, or + thread ID. Thanks to Paul Caffrey for + motivating this extension. + + * tests/Log_Msg_Test.cpp: Added a new function, test_format_specs, + that verifies the formatting. Right now it does not detect the + correctness of the strings produced - they have to be examined + in the log file to check. This needs to be fixed still. + +Thu Jul 26 11:48:16 2001 Carlos O'Ryan + + * bin/count_lines: + Add a few new file types. + +Wed Jul 25 23:49:43 2001 Krishnakumar B + + * include/makeinclude/platform_tru64_g++.GNU: + + Fixed some missing defines in the Makefile for DEC Unix versions + 4.0D, 4.0E. We don't support or suggest this combination. Hence + the oversight in missing the needed defines. + + Thanks to Martin Krumpolec for reporting this. + +Wed Jul 25 23:49:00 2001 Craig Rodrigues + + * include/makeinclude/wrapper_macros.GNU: + + Remove extraneous rapi = 0. + +Wed Jul 25 18:53:18 2001 Ossama Othman + + * html/index.html: + + Added CORBA Security Service main page link to the list of + documentation. + +Wed Jul 25 17:41:43 2001 Ossama Othman + + * ltcf-c.sh: + * ltcf-cxx.sh: + * ltconfig: + + Removed these libtool related files. New versions of libtool + (GNU libtool >= 1.4b) no longer use them. + + * config.guess: + * config.sub: + * ltmain.sh: + + Removed these files. We no longer need to keep custom copies + lieing around since libtool 1.4b includes all of our local + changes (i.e. our changes have been folded into the upstream + libtool sources). + + * install-sh: + * missing: + * mkinstalldirs: + + Removed these files. Automake will automatically add these when + necessary. + +Wed Jul 25 16:29:48 2001 Steve Huston + + * tests/Max_Default_Port_Test.cpp: ACE-ified the code and fixed + a number of ACE_DEBUG %p directives without a corresponding + string. Also, closed a 2 handle-per-try handle leak, which + may have affected test results on some platforms. + * tests/Max_Default_Port_Test.h: Added a destructor to the + test class - it's used to close the acceptor handle down. + +Wed Jul 25 15:21:22 2001 Krishnakumar B + + * ace/OS.h: + + Fixed the _XOPEN_SOURCE checking to _XOPEN_SOURCE < 500 to fix + incorrect declaration of prototype. This fixes the warnings when + compiling with gcc-3.0. Thanks to Ossama for suggesting the fix. + +Wed Jul 25 08:05:45 2001 Balachandran Natarajan + + * tests/Thread_Pool_Reactor_Resume_Test.h: + * tests/Thread_Pool_Reactor_Resume_Test.cpp: Fixed a subtle race + condition. This hardly showed up in many of our daily + builds. The race condition had to be fixed to show the users of + the cautious approach that one needs to take if they are + resuming the handle in the application itself. + +Tue Jul 24 16:41:57 2001 Joe Hoffert + + * ace/Thread_Manager.cpp : + Added "&& ! defined (ACE_HAS_PACE)" ifdefs to already existing + #if defined (VXWORKS) sections of code to get ACE_HAS_PACE to + compile on VxWorks. + + * ace/OS.i : + * ace/OS.cpp: + Fixed formatting of some comments and added needed PACE + calls for ACE_HAS_PACE on VxWorks. + + * ace/OS.h : + Put #if !defined guards around the ACE_THR_PRI* macros + so that we can define them in the config*.h files if + they need to be corrected. For instance, ACE_THR_PRI_OTHER_MIN + has a different value on SunOS 5.8 than it does on SunOS 5.7, + i.e., -20 vs. 0 respectively. + + Also, added some needed typedefs and #define for ACE_HAS_PACE + on VxWorks and updated some comments concerning ACE_OS::thr_create + flags. + + * ace/Sched_Params.cpp (priority_min, priority_max): + Changed to return correct thread priority min/max for + Solaris threads. We now use the ACE_PRI_THR* macros + for these values while still calling ACE_OS::priority_control + for process and LWP priorities. + + * ace/config-sunos5.8.h: + Added setting of ACE_THR_PRI_OTHER_MIN to be correct + for SunOS 5.8. + +Tue Jul 24 13:47:32 2001 Balachandran Natarajan + + * ace/SSL/SSL_Asynch_Stream.h (ACE_SSL_Asynch_Stream): + * ace/SSL/SSL_Asynch_Stream.cpp: Added a open () method that + matches the signature of ACE_Service_Handler. This should fix + the warnings in Borland builds that complain about hiding + the virtual functions. + +Tue Jul 24 10:56:04 2001 Ossama Othman + + * bin/generate_doxygen.pl (TAO_DOCS): + + Added "tao_security" and "tao_ssliop" Doxygen configurations to + the list of documentation to generate. + +Tue Jul 24 07:45:03 2001 Douglas C. Schmidt + + * ace/Containers_T: Fixed some problems with the lack of + const for the ACE_DLList and ACE_Double_Linked_List classes. + Thanks to Michael Kircher for reporting this. + + * ace/config-cygwin32-common.h: Removed the ACE_LACKS_FORK + macro since this is apparently working on Cygwin. Thanks tj + Stefan Kluehspies for reporting + this. + + * ace/config-cygwin32.h: Removed the #define _CLOCKID_T + macro, which should now be handled by the following change. + + * ace/OS.h: Added a #defined for _CLOCKID_T_. Thanks to + Stefan Kluehspies for + reporting this. + +Tue Jul 24 11:10:59 2001 Krishnakumar B + + * ace/OS.h: + + Fix the compile errors seen on gcc-3.0 with -pedantic and + -Wno-long-long. This should fix all the errors. + +Tue Jul 24 10:07:31 2001 Chad Elliott + + * include/makeinclude/platform_sunos5_g++.GNU: + + Add an optimize override to 0 for g++ 3.0. The compiler breaks on + a tremendous amount of files, even with -O. + +Tue Jul 24 10:04:52 2001 Chad Elliott + + * ace/INET_Addr.cpp: + + Corrected a run-time error on Tru64 with gcc. Any executable + that called ACE_INET_Addr::get_host_name() would core dump. + This was caused by the call to ACE_OS::gethostbyaddr_r(). + +Tue Jul 24 08:20:02 2001 Chad Elliott + + * include/makeinclude/platform_aix_ibm.GNU: + + Change -O2 to -O. The optimizer seems to be a tiny + bit broken, which is demonstrated by a few TAO and orbsvcs + tests. + +Mon Jul 23 17:38:46 2001 Ossama Othman + + * etc/tao_security.doxygen: + * etc/tao_ssliop.doxygen: + + New Doxygen files for TAO's CORBA security libraries. + +Mon Jul 23 13:48:26 2001 Ossama Othman + + * ace/MEM_Connector.cpp (connect): + + Disable non-blocking on the stream after its handle has been + set. Previously, non-blocking was disabled on an uninitialized + MEM_Stream, after which the handle was set (i.e. initializing + the stream). In order to properly disable non-blocking on a + stream, its handle must be set first since ioctl() operations + are typically performed on the underlying stream handle. + +Mon Jul 23 13:06:39 2001 Steve Huston + + * ace/WFMO_Reactor.cpp (event_handling): Corrected the loop check + to account for a zero ACE_Time_Value *, avoiding a crash in + tests/Reactor_Timer_Test, as well as any other program that + called ACE_Reactor::handle_events with a zero timer pointer. + +Mon Jul 23 10:39:55 2001 Nanbor Wang + + * ace/OS.h: Added /**/ between #include and to + avoid warning from CE compiler. + + * ace/ace_dll.vcp: Added Obchunk.cpp to the project. + +Sun Jul 22 08:19:43 2001 Douglas C. Schmidt + + * ace/config-cygwin32.h: ADded a #define for_CLOCKID_T. Thanks to + Christophe Galerne for + reporting this. + + * ace/Log_Record.cpp (priority_names_): Added commas after the + 'ACE_LIB_TEXT ("LM_UNK(04000)")' lines. Thanks to Steve Harris + for reporting this. + +Sat Jul 21 19:56:08 2001 Douglas C. Schmidt + + * ace/Map_T.{h,i}: Made current_value() a const member function. + Thanks to Johnny Willemsen for reporting this. + +Fri Jul 20 10:16:46 2001 Douglas C. Schmidt + + * ace/Connector.cpp (create_AST): Replaced some calls to + sh->get_handle () with a cached value of handle. This fixes a + bug with gcc 2.96 on Tornado 2.1/VxWorks for SuperH. Thanks to + Frank Wolf for reporting this. + + * examples/Connection/non_blocking/CPP-acceptor.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp: + * examples/Connection/non_blocking/CPP-connector.cpp: Changed the + SH macro to SVH to avoid clashes with a macro in VxWorks. + Thanks to Frank Wolf for reporting this. + +Thu Jul 19 06:55:07 2001 Douglas C. Schmidt + + * ace/config-g++-common.h: Version 2.96 of g++ on VxWorks + is missing auto_ptr, so let's add the ACE_LACK_AUTO_PTR flag + there. Thanks to Frank Wolf for suggesting this. + +Fri Jul 20 09:47:38 2001 Nanbor Wang + + * ace/Log_Msg.cpp: Fixed WinCE errors. CE does not support + UNIX_Syslog. + +Thu Jul 19 22:39:32 2001 Nanbor Wang + + * tests/MEM_Stream_Test.cpp: + * ace/MEM_IO.h: + * ace/MEM_IO.i: + * ace/MEM_IO.cpp: On non-Win32 platforms, disable multithreaded + MEM_IO if _ACE_USE_SV_SEM is defined. + +Thu Jul 19 15:25:11 2001 Paul Calabrese + + * ace/MEM_Acceptor.i (mmap_prefix): + + Fix case where a null pointer is passed in. + +Thu Jul 19 06:55:07 2001 Douglas C. Schmidt + + * ace/Connector.cpp (connect_svc_handler): Missed one change... + Thanks to Bala for reporting this! + + * include/makeinclude/platform_vxworks5.x_g++.GNU (HOST_DIR): Added + support for the SH7700 and SH7700LE. Thanks to Frank Wolf + for reporting this. + + * ace/OS.i (truncate): Make sure to close the handle that we + opens. Thanks to Lothar for reporting this. + + * ace/Connector.cpp: Changed the SH macro to SVH to avoid clashes + with a macro in VxWorks. Thanks to Frank Wolf + for reporting this. + +Wed Jul 18 13:15:06 2001 Douglas C. Schmidt + + * ace/OS_Dirent.cpp (scandir_emulation): Removed the calls to the + ACE_ERROR_RETURN macros to avoid dependencies on ACE_Log_Msg + from within the ACE_OS layer. Thanks to Bala for pointing this + out! + + * ace/ACE.{h,cpp}: Added a new wrapper method for ACE_OS::select() + that uses ACE_Handle_Set *'s rather than fd_set *'s. This is + motivated by work Steve Huston and I are doing on our new book + "C++ Network Programming: Resolving Complexity with ACE and + Patterns." + + * ace/Malloc_T.i (release): Removed an unnecessary "else" to + make gcc 2.96 happy. Thanks to Frank Wolf for + reporting this. + + * Happy birthday to me and Angelo Corsaro! + +Tue Jul 17 00:34:40 2001 Douglas C. Schmidt + + * ace/SString.h (ACE_Tokenizer): Make sure that the data members + are protected, not private... Thanks to Martin Krumpolec for + reporting this (again)! + +Wed Jul 18 16:40:56 2001 Irfan Pyarali + + * ace/Log_Msg.cpp (program_name): Undid the following changes: + + ChangeLogTag:Tue Jul 10 11:32:26 2001 Tibor Kiss + + Tibor will be looking into this further since this change + currently causes shutdown problems on Win2000. + +Wed Jul 18 15:59:03 2001 Krishnakumar B + + * ace/config-tru64.h: + + Removed _LIBC_POLLUTION_H. It seems that this macro is causing + problems for some users. Thanks to Pierre Oberson + for prompting this fix. + +Tue Jul 17 13:00:11 2001 Balachandran Natarajan + + * tests/run_test.lst: Enabled the MEM_Stream test on Linux. + +Mon Jul 16 14:59:32 2001 Douglas C. Schmidt + + * ace/Memory_Pool.h (ACE_Shared_Memory_Pool): Added a comment + that discourages developer from using the ACE_Shared_Memory_Pool + and points them to the ACE_MMAP_Memory_Pool instead. Thanks to + Johnny Chen for motivating this. + + * ace/OS_Dirent.cpp (readdir_emulation): Fixed a handle leak + in the event that errors occur. Thanks to Kevin Burge + for reporting this. + + * ace/Log_Msg_UNIX_Syslog.cpp (open): Add an ACE_const_cast() + to the program name for platforms like LynxOS whose openlog() + method is char * rather than const char *. Thanks to Bala for + reporting this. + +Sun Jul 15 11:06:33 2001 Douglas C. Schmidt + + * ace/Log_Msg_NT_Event_Log.cpp: Fixed the implementation so that + it's consistent with the new program_name() features. Thanks to + Chris Kohloff for this fix. + +Sun Jul 15 11:04:26 2001 Carlos O'Ryan + + * ace/SSL/ACE_SSL.dsp: + Removed references to $OPENSSL_ROOT, the user should configure + those in the Tools -> Option -> Directories tab. + +Fri Jul 13 23:02:46 2001 Ossama Othman + + * ace/SSL/SSL_Asynch_Stream.h: + * ace/SSL/SSL_Asynch_Stream.cpp: + * ace/SSL/SSL_Asynch_BIO.h: + * ace/SSL/SSL_Asynch_BIO.cpp: + + Only support asynchronous SSL streams when using OpenSSL > + 0.9.5a. The BIO method signatures changed in OpenSSL 0.9.6. + +Fri Jul 13 22:48:56 2001 Ossama Othman + + * ace/SSL/SSL_Asynch_BIO.cpp (methods_ACE): + + Removed excess element in aggregate initializer. + +Fri Jul 13 22:29:01 2001 Ossama Othman + + * ace/SSL/SSL_Asynch_Stream.cpp (print_error): + + The OpenSSL ERR_error_string_n() function is only supported in + OpenSSL 0.9.6 or better. + +Fri Jul 13 14:59:18 2001 Alexander Libman + + * ace/WIN32_Asynch_IO.h (ACE_WIN32_Asynch_Result): + * ace/WIN32_Asynch_IO.cpp (set_error, set_bytes_transferred): + + Added new methods set_error() and set_bytes_transferred(). + Needed for below changes and new asynchronous SSL stream + implementation. + + * ace/WIN32_Proactor.cpp (handle_events): + + Fixed error handling semantics so that it is consistent with the + POSIX Proactor error handling semantics. + + (post_completion): + + Pass the amount of bytes transferred and the completion key to + the Win32 PostQueuedCompletionStatus() function. The error, if + any, will later be extracted in the handle_events() method. + +Fri Jul 13 15:59:45 2001 Douglas C. Schmidt + + * netsvcs/servers/main.cpp (main): The server was always outputing + LM_DEBUG information, even when the program was not run with the + -d command line argument. Therefore, changed the following + lines from: + + if (ACE::debug () == 0) + ACE_Log_Msg::disable_debug_messages (); + + to: + + if (ACE::debug () == 0) + ACE_LOG_MSG->priority_mask (~LM_DEBUG, ACE_Log_Msg::PROCESS); + + Thanks to Jerry D. De Master for + reporting this fix. + +Fri Jul 13 12:16:03 2001 Ossama Othman + + * ace/SSL/SSL_Asynch_BIO.h: + * ace/SSL/SSL_Asynch_BIO.cpp: + * ace/SSL/SSL_Asynch_Stream.h: + * ace/SSL/SSL_Asynch_Stream.cpp: + + New asynchrounous SSL stream implementation contributed by + Alexander Libman . + + * ace/SSL/ACE_SSL.dsp: + * ace/SSL/Makefile: + * ace/SSL/Makefile.bor: + + Added new asynchronous SSL stream source files to these + Makefiles and project files. + +Fri Jul 13 09:40:08 2001 Jerry D. De Master + + * ace/Log_Msg.*, + ace/Logging_Strategy.*, + ace/Log_Msg_UNIX_Syslog.*: + Applied patches to ACE_Log_Msg, ACE_Logging_Strategy, and + ACE_Log_Msg_UNIX_Syslog that are required to add the program + name logging strategy option ('n') and to initialize the UNIX + syslog facility with the program name. Also included are Boris + Kolpackov patches for ACE_LACKS_IOSTREAM_TOTALLY + to ACE_Logging_Strategy. + +Thu Jul 12 19:54:27 2001 Ossama Othman + + * examples/Registry/test_registry_update.cpp (main): + + Fixed unused argument warning. + +Thu Jul 12 19:57:12 2001 Frank Hunleth + + * bin/auto_run_tests.lst: + + Added TAO/tests/RTCORBA/ORB_init to the auto run list. + +Thu Jul 12 17:11:35 2001 Krishnakumar B + + * bin/nightlybuilds/builds.lst (WEB): + + Temporarily removed the IA-64 build till some issues get sorted + out. + +Thu Jul 12 06:01:03 2001 John Michael Zorko + + * netsvcs/lib/Server_Logging_Handler.cpp: + Added an an additional #define in config-macosx.h called + ACE_HAS_MACOSX_DYLIB, and checked to see if this was _not_ + defined before instantiating the offending template in + Server_Logging_Handler.cpp. OS X has this thing about .dylibs + (OS X version of .so) where they can't have any duplicate + symbols, which is why libnetsvcs wasn't building on OS X + earlier. This fixes that. + + * include/makeincludes/platform-macosx.GNU: Added -lACE to the + LIBS line, which fixed the majority of the build problems. + + * ace/config-macosx.h: Added the ACE_HAS_MACOSX_DYLIB #define + mentioned above. + +Thu Jul 12 06:01:03 2001 Douglas C. Schmidt + + * ace/TLI_Connector.cpp (complete): Changed ACE_OS::t_rcvconnect() + to simply t_rcvconnect(). Thansk to Andreas Geisler for + reporting this. + +Thu Jul 12 09:43:36 2001 Ossama Othman + + * ace/FILE_Connector.h (ACE_FILE_Connector, connect): + + Removed the default O_EXCL flag I added a few days ago. It is + mostly useful for preventing symbolic link attacks in a + directory with global write permissions. Pass the + responsibility of using the O_EXCL flag when necessary on to the + application developer. + +Wed Jul 11 22:31:50 2001 Krishnakumar B + + * include/makeinclude/rules.local.GNU (clean.local): + + Added ti_files to remove the template cache generated by KCC. + + * ace/TLI_Acceptor.cpp(open_new_endpoint): + + Fixed a small typo causing compilation errors under Tru64. + +Wed Jul 11 13:06:33 2001 Steve Huston + + * tests/Log_Msg_Test.cpp: Changed the ostream test to close the + under-test ostream file before trying to open it and read the + contents. Avoids the "already open" error now that + ACE_FILE_Connector includes O_EXCL by default, and avoids any + potential file buffering issues reading an already-open file. + +Wed Jul 11 08:31:02 2001 Jeff Parsons + + * tests/Dirent_Test.cpp: + + Wrapped a string literal with ACE_TEXT, to get rid of a Win2000 + WChar build error. + +Wed Jul 11 06:41:43 2001 Douglas C. Schmidt + + * ace/TLI_Stream.cpp, + * ace/TLI_Connector.cpp, + * ace/TLI_Acceptor.cpp: Added enhancements so that the code would + work on Win32. Thanks to Andreas Geisler + for reporting this. + +Tue Jul 10 19:26:15 2001 Ossama Othman + + * ace/ace_dll.dsp: + + Disabled generation of source browse information. It was + causing problems on some existing builds that didn't use it. + + * ace/SSL/SSL_SOCK_Acceptor.cpp (ssl_accept): + + Removed certificate verification code. It is up to the + application, not the ACE_SSL library, to perform proper + certificate verification. + +Tue Jul 10 23:02:00 2001 Craig Rodrigues + + * tests/Log_Msg_Test.cpp: + Fix test so it doesn't open output file to write to twice. + Thanks to Ossama for finding it. + +Tue Jul 10 19:10:19 2001 Steve Huston + + * ace/ace.icc: Corrected the mis-applied patch for ace.icc in + Mon Jul 09 19:12:42 2001 Steve Huston + +Tue Jul 10 16:01:52 2001 Ossama Othman + + * THANKS: + + Added Sangeetha Ramadurai to + the hall of fame. + +Tue Jul 10 18:15:39 2001 Steve Huston + + * ace/WFMO_Reactor.cpp (event_handling): Move the logic for + noticing that the wait timed out, but did not expire any + timers, into this function. Will remove it from Reactor.cpp, + to properly move the fix into handle_events() rather than + needing to call run_reactor_event_loop to get it right. + * ace/Select_Reactor_T.cpp - still need to add similar logic here. + + * ace/config-sunos5.6.h: Re the following: + Mon Jul 2 15:26:32 2001 Nanbor Wang + Replaced ACE_HAS_POSIX_SEM, and left ACE_LACKS_NAMED_POSIX_SEM out. + Solaris does indeed have POSIX semaphores in 2.6 and later, but + requires the changes to OS.i below to work right. + + * ace/OS.h: For ACE_PROC_PRI_OTHER_MIN (and MAX), on HP-UX, + convert the HP-UX priority value to the POSIX range. + + * ace/OS.i (ACE_OS::sema_init, named POSIX semaphore): On Solaris + and HP-UX, the name of a POSIX semaphore needs to start with + a slash (further restricted on Solaris). Enforce that here by + prepending a slash, or by chopping off parts of the name. + +Tue Jul 10 16:08:04 2001 Krishnakumar B + + * include/makeinclude/platform_osf1_4.0.GNU: + + Fixed the default flags so that it enables the user to override + settings. Now that the long pending fix to wrapper_macros.GNU is + through, this should work fine now. + +Tue Jul 10 13:37:31 2001 Jeff Parsons + + * ace/OS_Dirent.cpp (readdir_emulation): + + Removed the hard cast to char* of one of the two arguments in + a call to strcpy. In the WChar win32 build, this cast was + causing the source and target strings to be of different widths. + +Tue Jul 10 11:32:26 2001 Tibor Kiss + + * ace/Log_Msg.cpp: + Completed the ACE_Log_Msg::close method with the + ACE_Thread::keyfree (log_msg_tss_key_) and key_created_ = 0; to + ensure restartability by multiple successive ACE::init and + ACE::fini calls. This fix prevent leaks from occurring when + ACE::init() and ACE::fini() are called multiple times. + +Tue Jul 10 11:12:00 2001 Chris Gill + + * ace/OS_Dirent.{h, inl}: refactored XDIR, dirent usage for pSOS - + user is no longer responsible for buffer deallocation after each + readdir call, only for passing the pointer returned from opendir + into closedir when all done. ACE_DIR structure is now used + consistently for all pSOS dirent calls. + +Tue Jul 10 06:06:07 2001 Douglas C. Schmidt + + * ace/Service_Repository.h: Updated the insert() comment to + clarify the return values. Thanks to Johnny Willemsen for + suggesting this. + + * ace/Service_Repository.{h,i}: Made the current_size() and + total_size() methods const. Thanks to Johnny Willemsen for + suggesting this. + + * ace/Service_Repository.h: Fixed a typo in the comments. Thanks + to Johnny Willemsen for reporting this. + +Tue Jul 10 08:39:04 2001 Chad Elliott + + * ace/config-vxworks5.x.h: + + Added the macro ACE_LACKS_UNIX_SYSLOG. + +Tue Jul 10 08:26:57 2001 Chad Elliott + + * ace/Log_Msg_UNIX_Syslog.cpp: + + Added a macro, ACE_LACKS_SETLOGMASK, for platforms that have + syslog, but don't have setlogmask(). + + * ace/config-chorus.h: + + ChorusOS 4.0.1 happens to be one of them. + +Tue Jul 10 09:00:12 2001 Johnny Willemsen + + * ace/OS_Dirent.h + Made the member 'd_name' of the 'dirent' struct non-const, because + BCB had problems with it + +Mon Jul 09 22:41:43 2001 Ossama Othman + + * include/makeinclude/wrapper_macros.GNU (exceptions): + + Include platform_macros.GNU before the default for "exceptions" + is set. This fixes a problem where the default native + exceptions setting in platform_linux.GNU was not set due to the + fact that it was previously set in wrapper_macros.GNU. Thanks + to Hans Utz for tracking down + the problem. + +Mon Jul 9 16:40:02 2001 Ossama Othman + + * ace/Dirent_Selector.cpp (ACE_Dirent_Selector): + + Correct order of initialization of members to match order of + declaration. Fixes a warning issued from GCC. + + * ace/Dirent_Selector.inl: + + Added missing RCS ID keyword. Fuzz was whining about the lack + of it. + + * ace/Dirent_Selector.h: + + Corrected some Doxygen comments. + +Mon Jul 09 19:12:42 2001 Steve Huston + + * ace/ace.icc: Added Log_Msg_UNIX_Syslog and Log_Msg_NT_Event_Log + modules to the LOGGING component. Added Dirent_Selector to the + UTILS component. + +Mon Jul 9 15:59:56 2001 Joe Hoffert + + * ace/config-lynxos.h: + Added ACE_LACKS_MKSTEMP since LynxOS doesn't seem to have + this. + +Mon Jul 9 15:28:29 2001 Jeff Parsons + + * ace/Dirent_Selector.cpp: + * ace/Dirent_Selector.h: + + Added ACE_INLINE guards around inclusion of Dirent_Selector.inl. + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + + Added Dirent_Selector.{h,i,cpp} to these projects. + +Mon Jul 9 06:52:09 2001 Douglas C. Schmidt + + * ace/Makefile.bor (OBJFILES): Added the Dirent_Selector.obj file. + + * tests/Dirent_Test.cpp: Integrated a new test for the + ACE_Dirent_Selector class. + + * ace/Makefile (UTILS_FILES), + * ace/Dirent_Selector.h, + * ace/Dirent_Selector.inl, + * ace/Dirent_Selector.cpp: Added support for a C++ wrapper facade that + encapsulates ACE_OS_Dirent::scandir(). Thanks to Rich Newman for + contributing this, as well. + + * ace/OS_Dirent.h, + * ace/OS_Dirent.inl, + * ace/OS_Dirent.cpp: Added support for the scandir() feature, which + makes it possible to selectively pick which files in a directory + to iterate over. Also fixed a bug in the emulation of dirent. + Thanks to Rich Newman for contributing + these fixes. + +Mon Jul 09 14:39:50 2001 Irfan Pyarali + + * ace/OS.i (thr_getprio and thr_setprio): Changed these two + function such that if we are on Solaris and we have pthreads + enabled, we should use the pthread calls rather than the native + Solaris calls. The reasons for choosing the pthread calls is + due to following problems with the native calls: + + - thr_getprio() is evil because on Solaris 5.8, a thread with + priority -20 (SCHED_OTHER) is reported to have priority 80. + + - thr_setprio() is evil because it cannot set the negative + priorities on Solaris 5.8. + + - Also, thr_setprio() cannot change the priority of a thread + with negative priority to a positive priority on Solaris 5.8 + (even though there is no error reported and thr_getprio() shows + that the change happened but pthread_getschedparam() shows that + no change happened). + + - In addition, suppose a thread of policy SCHED_RR or SCHED_FIFO + uses thr_setprio() to reset its priority, the priority will be + reset but the scheduling policy will be dropped to SCHED_OTHER. + This happens with both Solaris 5.7 and Solaris 5.8. + +Mon Jul 9 13:33:43 2001 Joe Hoffert + + * include/makeinclude/wrapper_macros.GNU: + Change PACE path to start at $PACE_ROOT rather than $ACE_ROOT/PACE + since the latter is not as flexible. Defined PACE_ROOT if not + already defined. Also, added inclusion of PACE library for VxWorks + even when inlining since not all the PACE functions should be + inlined. + +Mon Jul 09 10:59:22 2001 Ossama Othman + + * THANKS: + + Added Mouna Seri to the hall of fame. + +Mon Jul 9 11:10:44 2001 Jeff Parsons + + * ace/config-win32-msvc-5.h: + * ace/config-win32-msvc-6.h: + + Added conditional definitions for ACE_LD_DECORATOR_STR + "mfc" and "mfcd" so that the MFC release and debug versions + of libraries can be dynamically loaded in the same way that + the non-MFC release and debug versions are. Thanks to + Francois Bernier for suggesting + this enhancement. + +Mon Jul 09 11:31:12 2001 Johnny Willemsen + + * ace/pre.h + * include/makeinclude/compiler.bor + + Removed the disabling of the compiler warning 'parameter never + used'. Unused parameters are handled by ACE_UNUSED_ARG macro. + A missing ACE_UNUSED_ARG is now shown as warning in the BCB build + log. + +Sun Jul 08 11:26:23 2001 Ossama Othman + + * ace/OS.h (mkstemp): + * ace/OS.i (mkstemp): + + New mkstemp() wrapper. It is assumed to be available on the + given platform, unless ACE_LACKS_MKSTEMP is defined. + + * ace/FILE_Connector.h: + + Added O_EXCL to the default flags. This is a security hole + fix. + + * ace/FILE_Connector.cpp (connect): + + If mkstemp() is available, then use it to create a temporary + file rather than mktemp() (via ACE_FILE_Addr) since mktemp() is + susceptible to a denial-of-service attack. + + * ace/config-win32-common.h: + * ace/config-vxworks5.x.h: + + mkstemp() is not supported on MS Windows and VxWorks. Define + ACE_LACKS_MKSTEMP in these headers. + +Sun Jul 8 08:13:12 2001 Douglas C. Schmidt + + * ace/Select_Reactor_Base.h: Added a comment explaining what + the ACE_HAS_REACTOR_NOTIFICATION_QUEUE macro means. Thanks to + Kobi Cohen-Arazi for motivating this. + +Sat Jul 7 18:53:49 2001 Krishnakumar B + + * include/makeinclude/platform_osf1_4.0.GNU: + + Revert the changes made to this file. Please see the file for a + lengthy description. + +Fri Jul 06 21:53:26 2001 Christopher Kohlhoff + + * ace/config-win32-borland.h: + Reverted addition of ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION. + +Fri Jul 6 19:55:23 2001 Douglas C. Schmidt + + * examples/Reactor/Multicast: Adding the support for UNIX Syslog + broke this example because LOG_DEBUG was suddenly defined as a + macro (it's in syslog.h). I've fixed this by renaming the LOG_ + enums to LM_ instead. Thanks to Bala for reporting this. + +Fri Jul 06 20:23:41 2001 Steve Huston + + * ace/Refcoutned_Auto_Ptr.i (null): Change const_cast<> to + ACE_const_cast() to build on older compilers, like IBM C/C++ 3.6.6. + +Fri Jul 06 20:13:29 2001 Steve Huston + + * netsvcs/lib/Name_Handler.cpp: + * netsvcs/lib/Server_Logging_Handler_T.cpp: + * netsvcs/lib/Token_Handler.cpp: + + More ACE_DEBUG disables. + +Fri Jul 6 15:55:54 2001 Ossama Othman + + * ace/OS.h (ACE_FD_SETSIZE): + + Integrated patch from Jody Hagins . Set the + default reactor file descriptor set size to be an integer + constant rather than a preprocessor constant. Some third party + software #undef FD_SETSIZE in their header files, causing build + problems in ACE. + +Fri Jul 06 18:20:39 2001 Steve Huston + + * netsvcs/lib/Client_Logging_Handler.cpp: #if 0'd out a bunch of + ACE_DEBUG statements that aren't appropriate for use in commercial + logging. These can be #if 1'd if there's some doubt while debugging + this stuff, but they aren't useful once debugged, and are + distracting since they're interespersed with application records. + +Fri Jul 6 13:40:20 2001 Balachandran Natarajan + + * ace/Log_Msg_UNIX_Syslog.cpp: Fixed a warning in g++. + +Fri Jul 06 11:39:41 2001 Steve Huston + + * ace/INET_Addr.h: Clarified (and improved doxygenation) of + constructor and set() methods regarding byte orders. + + * tests/Max_Default_Port_Test.icc: New file for this test. + * tests/tests.icp: Added Max_Default_Port_Test + +Fri Jul 6 08:36:20 2001 Chad Elliott + + * netsvcs/Makefile: Don't build this if ACE_COMPONENTS does not + contain Other. The netsvcs library requires Naming_Context. + +Fri Jul 6 05:44:13 2001 Douglas C. Schmidt + + * ace/Makefile (LOGGING_FILES): Added support for + Log_Msg_UNIX_Syslog. + + * ace/Log_Msg_UNIX_Syslog.{h,cpp}: + * ace/Log_Msg.cpp, + * ace/OS.h: Added support for a new UNIX syslog backend for the + ACE_Log_Msg class. Thanks to Jerry D. De Master + and Robert Davidson + . + + * ace/SOCK_Dgram.h: Fixed a typo in one of the send() method + comments. Thanks to Alain Decamps for + reporting this. + + * ace/config-macosx.h: Added a new file courtesy of John + Zorko so that things will work on MacOSX. + +Thu Jul 5 23:22:21 2001 Balachandran Natarajan + + Fixes that were required for fixing bug 575. Merged in from + branch bug_575_stage_2. + +Thu Jul 5 23:09:29 2001 Balachandran Natarajan + + * ace/CDR_Stream.cpp (ACE_InputCDR): Fixed a long standing bug in + the branch. This caused the DSI_Gateway test to fail. The + problem was from setting the write pointer to a wrong position + during the construction. + +Thu Jul 5 14:39:45 2001 Balachandran Natarajan + + * Merged with the main trunk and moved it to a new branch by name + bug_575_stage_2. + +Thu Jun 28 15:25:07 2001 Balachandran Natarajan + + * ace/Reactor.h (ACE_Reactor): + * ace/Reactor.cpp: Added a new method resumable_handler () to the + reactor interface. This would indicate whether the application + can take advantage by resuming the handlers themselves or + not. Not all reactors can allow this feature. + + * ace/Reactor_Impl.h: + * ace/Reactor_Impl.cpp: Added a pure virtual function so that all + the implementations can decide whether the handlers are + resumable or not. + + * ace/Select_Reactor_Base.h: + * ace/Select_Reactor_Base.cpp: + * ace/TP_Reactor.h: + * ace/TP_Reactor.cpp: + * ace/WFMO_Reactor.h: + * ace/WFMO_Reactor.cpp:Implemented resumable_handlers (). + +Sun Jun 24 11:25:07 2001 Balachandran Natarajan + + * Created this file. Got the whole stuff in ace to a new branch by + name bug_575_stage_1. This ChangeLog file will be in branch + bug_575. + +Fri Jun 22 16:52:13 2001 Balachandran Natarajan + + * ace/CDR_Stream.cpp: Changed the copy constructor for the + ACE_InputCDR's. Instead of duplicating the ACE_Data_Block we + now use the new copy constructor in the ACE_Message_Block. + + * ace/Message_Block.h: + * ace/Message_Block.cpp: Added a new copy constructor to the + ACE_Message_Block. This copy constructor does a deep copy from + the data block if the data block of the incoming message block + is on the stack or does a shallow copy of the data block (by + incrementing the ref count) if it is on the heap. + + END of entries from bug_575_stage_2. + +Thu Jul 5 22:07:33 2001 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added the new perl script in LongUpcalls + in the daily builds. + +Thu Jul 5 20:36:00 2001 Craig Rodrigues + + * ace/config-win32-borland.h + define ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION + * tests/Token_Test.cpp + Fix template instantiation problem. + +Wed Jul 4 15:35:47 2001 Joe Hoffert + + * tests/run_tests.vxworks: + Removed invocation of CDR_Array_Test. According to the ace + config files the compiler we are using is pre 2.8 (i.e., + ACE_HAS_GNUG_PRE_2_8 is defined). Therefore don't run + CDR_Array_Test since the Makefile doesn't build it (due to + the ACE_HAS_GNUG_PRE_2_8 macro). + +Wed Jul 04 14:26:10 2001 Irfan Pyarali + + * ace/Synch_T.h (class ACE_Acquire_Method): Moved the enums from + the Reverse Lock class into ACE_Acquire_Method, a non-template + class. These enums should have been inside the reverse lock + class, but some lame compilers cannot handle enums inside + template classes. + +Wed Jul 04 12:43:22 2001 Irfan Pyarali + + * ace/Synch_T.i (ACE_Reverse_Lock): Fully specified the + ACE_ACQUIRE_METHOD type. + +Tue Jul 3 15:43:25 2001 Balachandran Natarajan + + * ace/Select_Reactor_Base.cpp: Fixed a warning in g++. + +Tue Jul 3 14:44:00 2001 Craig Rodrigues + + * ace/config-win32-common.h: Borland C++ apparently + does not support the "extern template class" Microsoft VC++ + proprietary extension. Thanks to Chris Kohloff + for the fix. + +Tue Jul 03 12:26:33 2001 Irfan Pyarali + + * ace/Synch_T.h (class ACE_Reverse_Lock): Added a parameter to the + constructor of the reverse lock. The ACE_ACQUIRE_METHOD + parameter is used to indicate which acquire() method will be + called on the real lock when the release() method is called on + the reverse lock. REGULAR indicated the acquire() method, READ + indicates the acquire_read() method, and WRITE indicates the + acquire_write() method. Note that the try_*() methods are not + represented here because we have to make sure that the release() + method on the reverse lock acquires a lock on the real lock. + + Thanks to Edan Ayal for suggesting this. + +Tue Jul 3 06:20:13 2001 Douglas C. Schmidt + + * ace/Reactor.h, + * ace/Reactor_Impl.h, + * ace/Select_Reactor_Base.cpp, + * ace/Select_Reactor_Base.i, + * ace/Select_Reactor_Base.h, + * ace/WFMO_Reactor.cpp, + * ace/WFMO_Reactor.h: Added an enhancement that allows the + Reactor to selectively purge event handlers from its + notification queue according to their Reactor_Mask type. Thanks + to Edan Ayal for contributing this. + + * tests/Reactor_Notify_Test.cpp (run_notify_purge_test): + Added a new set of tests for the new selective notification + purging features of the Reactor. Thanks to Edan Ayal + for contributing this. + + * ace/WIN32_Asynch_IO.cpp: Removed the + ACE_WIN32_Asynch_Result (handler, act, event, 0, 0, priority, + signal_number), initializer since we no longer use virtual + inheritance. Thanks to Alexander Libman + for reporting this. + + * ace/WIN32_Asynch_IO.h: Removed the virtual inheritance from + ACE_WIN32_Asynch_Result for the ACE_Asynch_Read_Stream_Result + and ACE_Asynch_Read_Dgram_Result classes. Thanks to Alexander + Libman for reporting this. + + * ace/Refcounted_Auto_Ptr.h: Made the destructor of + ACE_Refcounted_Auto_Ptr virtual so that users can override it + locally. Thanks to Jenny Kowald for + reporting this. + +Tue Jul 3 09:40:59 2001 Chad Elliott + + * include/makeinclude/platform_osf1_4.0.GNU: + * include/makeinclude/platform_osf1_4.0_g++.GNU: + + Allow users to set options like debug, exceptions, ... without + using override. + +Tue Jul 3 08:38:47 2001 Jeff Parsons + + * examples/Reactor/Proactor/test_dup_proactor.dsp: + + Fixed a mistake in the link to the ACE library. + +Mon Jul 2 16:23:04 2001 Jeff Parsons + + * examples/Reactor/Proactor/test_multiple_loops.dsp: + * examples/Reactor/Proactor/test_proactor.dsp: + * examples/Reactor/Proactor/test_proactor.dsw: + * examples/Reactor/Proactor/test_timeout.dsp: + * examples/Reactor/Proactor/test_udp_proactor.dsp: + + Fixed settings on release version of test_udp_proactor.dsp, + added it to the workspace, and removed unused file folders + from the FileViews of the other projects. + +Mon Jul 2 15:26:32 2001 Nanbor Wang + + * ace/config-sunos5.6.h: Removed ACE_HAS_POSIX_SEM and + ACE_LACKS_NAMED_POSIX_SEM. Thanks to Glenn Popelka + for helping track this down. + +Mon Jul 02 11:45:57 2001 Ossama Othman + + * bin/make_release: + + Disabled bootstrapping of ACE's autoconf support. It isn't + ready for general use. Doing so reduces the amount of + confusion. Thanks to Holger P. Krekel for + motivating this change. + +Mon Jul 2 13:18:14 2001 Douglas C. Schmidt + + * Moved ACE-configurations.txt into the docs directory. Also + removed the hopelessly out of date BIBLIOGRAPHY file. + + * Moved all the ChangeLog-* files into the new ChangeLogs + directory. Thanks to Holger P. Krekel for + this suggestion. + +Mon Jul 02 11:20:52 2001 Ossama Othman + + * config.guess: + * config.sub: + + Updated to the latest versions from the GNU FTP site. + +Mon Jul 02 11:30:20 2001 Irfan Pyarali + + * ace/Synch_T.i: Since the release() method on the reverse lock + calls the simple acquire() method on the real lock, it is + assumed that it is a simple acquire/release protocol with the + real lock. Therefore, I think all the other methods on the + reverse lock tryacquire(), acquire_read(), acquire_write(), + tryacquire_read(), tryacquire_write(), and + tryacquire_write_upgrade() should not be allowed. This falls in + line with the original concept of using reverse locks with + regular guards. + + Thanks to Edan Ayal for pointing this out. + +Mon Jul 2 11:17:37 2001 Chad Elliott + + * ace/Profile_Timer.cpp: + + Cleaned up the conditional macros. Added method bodies for + ACE_Profile_Timer::get_rusage() and + ACE_Profile_Timer::elapsed_rusage() when neither ACE_HAS_PRUSAGE_T + nor ACE_HAS_GETRUSAGE is defined. + + * Reverted the reverted changes in this entry. + "Fri Jun 29 22:31:56 2001 Balachandran Natarajan + ". These changes are ok, I just + needed to fix the bug in Profile_Timer.cpp. + +Mon Jul 2 09:40:45 2001 Chad Elliott + + * include/makeinclude/platform_aix_ibm.GNU: + + Add the output filter to the linker to avoid the duplicate symbol + warnings on AIX. + +Mon Jul 2 05:40:54 2001 Douglas C. Schmidt + + * ace/Logging_Strategy.cpp: Enhanced the code so that it works with + ACE_LACKS_IOSTREAM_TOTALLY. Thanks to Nir Drang + and Edan Ayal for reporting this. + + * ace/SPIPE_Addr.cpp (set): Added a "+ 1" to the computation of + the size of the SPIPE_Addr to account for the trailing NUL. + Thanks to Oren Zeev-Ben-Mordehai for + reporting this. + + * ace/Refcounted_Auto_Ptr.{h,i}: Added support for a "null()" + method to check if a refcounted auto ptr is NULL. Thanks to + Jenny Kowald for reporting this. + + * ace/config-macosx.h, + * ace/platform_macosx.GNU: Enhanced these files to support MacOSX. + Thanks to John Zorko for contributing this. + + * ace/Synch.h: Fixed the Doxygen documentation for all the + removed_ fields, which where somehow messed up. Thanks to + Johnny Willemsen for reporting this. + +Sun Jul 1 11:49:13 2001 Alexander Libman + + * ace: Enhanced the POSIX and Sun Proactor implementations as + follows: + + . POSIX_SIG_Proactor is now based on POSIX_AIOCB_Proactor + + . All classes ACE_POSIX_SIG_Asynch_XXXX are removed. + POSIX_SIG_Proactor uses the ACE_POSIX_AIOCB_Asynch_XXXX + classes now. + + . ACE_POSIX_AIOCB_Proactor::register_and_start_aio (...) + now calls a new virtual method: int + ACE_POSIX_AIOCB_Proactor::allocate_aio_slot + (ACE_POSIX_Asynch_Result *result). + + . The strategy of free slot allocation in SIG_Proactor is + a bit different from AIOCB and SUN Proactors. The + allocate_aio_slot() method is responsible for setting + notification information for aio request + (SIGEV_NONE/SIGEV_SIGNAL). For SIG_Proactor, the field + aio_sigevent.sigev_value.sival_int now contains index of aiocb + in the aiocb_list_, not a pointer. + + . The ACE_POSIX_AIOCB_Proactor::find_completed_aio (int &error_status, + int &return_status, size_t + &index, size_t &count) + parameter index defines initial slot to scan and the new + parameter count tells us maximum number slots to scan. On + return: index contains value to start scan next time, count + contains remained number of slots. Scanning is performed in + "wheel" style to allow all requests be handled with equal + priorities. + + . ACE_POSIX_AIOCB_Proactor::check_max_aio_num () checks for + max_number_files to open and tries to setup max_number_files + equal to aiocb_max_size_. if we failed than cut off + aiocb_max_size_ value to existing max_number_files. + + . POSIX_Proactor added member int os_id_ and constructor sets up + os_id_ (compilation time + run_time function) to know + OS(Sun/HP/Linux/...) and version. We need such info for + POSIX_SIG_Proactors to take into account the behavior of + different OS. + + . Delivery of simulated/"post_completed" Asynch_Results + (Timers, AsynchAccept,Wakeup ...). As both Proactors have no + reliable mechanizm for delivery "post_completed" results, so + the reliable queue of "post_completed" results was + implemented. The new member of AIOCB Proactor + ACE_Unbounded_Queue result_queue_ + has been added. Also added protected methods to the + ACE_POSIX_AIOCB_Proactor. + + . We had an error in all previous versions (from major ACE 5.1): + post_completion (int how_many) does not guarantee that all + completions will be delivered to the different threads running + event_loop (sometimes several completions could be delivered + to the one thread, in another thread performs during long time + application_spesific_code ()). Moreover, you can run now + Proactor event_loop in any number of threads (more than + SIGQUEMAX). + +Sun Jul 1 11:49:13 2001 Douglas C. Schmidt + + * examples/Reactor/Proactor: Integrated a test that exercises the + support for asynchronous UDP operations. Thanks to Roger Tragin + for contributing this. + + * ace/Synch_T.i: Changed the implementations of all the + acquire*() method to call release(). Thanks to Edan Ayal + for reporting this. + +Sat Jun 30 12:44:11 2001 Douglas C. Schmidt + + * examples/Connection/blocking/SPIPE-acceptor.cpp: Added better + support for shutting down the server when a signal occurs. + Thanks to Rich Newman for this + enhancement. diff --git a/ACE/ChangeLogs/ChangeLog-02a b/ACE/ChangeLogs/ChangeLog-02a new file mode 100644 index 00000000000..870ec350d6e --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-02a @@ -0,0 +1,9018 @@ +Fri Jul 5 10:30:44 2002 Douglas C. Schmidt + + * ace/Array_Base.cpp: Swapped the order of includes so that + Array_Base.h comes after Malloc_Base.h. Thanks to Al Pariante + for reporting this. + +Thu Jul 4 11:27:05 2002 Douglas C. Schmidt + + * Happy 226th Birthday USA! + +Sat Jul 06 19:32:40 2002 Balachandran Natarajan + + * ace/Time_Value.h (ACE_Time_Value): Fix for [BUGID 1240]. Some of + the operators were missing explicit declarations in the header + file (they were anyway defined in the inlined files) which + created problems in builds where inlining was diabled. Please + see + + http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1240 for + more details. Thanks to Marina Spivak for + reporting this. + +Fri Jul 5 18:44:39 2002 Steve Huston + + * ace/ACE.cpp: Corrected undeclared 'select_width' errors and + signed/unsigned mismatch warnings. + +Fri Jul 5 16:14:51 2002 Steve Huston + + * ace/OS.{h i} (send, sendto, recv, recvfrom): Change 'len' argument + from int to size_t. + Removed conditional typedef of ssize_t; it's done in Basic_Types.h. + + * ace/ACE.h (recv): Filled in documentation for varargs variant. + * ace/ACE.cpp (send, recv): Properly convert size_t 'count' arg to int + iovec count for call to ACE_OS::sendv/recvv(). + (handle_timed_accept, handle_timed_complete, handle_ready): Use + an int select_width for ACE_OS::select() calls to get the types + correct. This arg is ignored on Windows anyway. + + * ace/Basic_Types.h: If ACE_HAS_SSIZE_T not defined, and Win64, + typedef SSIZE_T ssize_t; else use the existing int typedef. + + * tests/SSL/Thread_Pool_Reactor_SSL_Test.cpp: + Change thread function to return ACE_THR_FUNC_RETURN, not void *. + +Tue Jul 02 21:43:53 2002 Nanbor Wang + + * ACEXML/common/XMLFilterImpl.h: One more pre/post mismatch. + +Tue Jul 2 16:58:55 2002 Krishnakumar B + + * ACEXML/common/XML_Types.h: + + Removed unnecessary includes and fixed a typo. + +Tue Jul 02 16:35:19 2002 Nanbor Wang + + * ACEXML/common/Attributes.h: + * ACEXML/common/Locator.h: Fixed mismatched pre/post inclusions. + + * ACEXML/parser/parser/Parser.cpp: Fixed compilation errors. + +Tue Jul 2 11:53:29 2002 Steve Huston + + * ace/config-all.h: Changed definition of ACE_THR_FUNC to incorporate + the platform's thread function return type (DWORD on Windows, + void * on most others). Uses a new typedef ACE_THR_FUNC_RETURN + to specify the platform's thread function return type. + + * ace/OS.{h i cpp} (thr_exit, thr_join): The status arg is now + a ACE_THR_FUNC_RETURN *. + Also moved remaining thread function definition type things to + config-all.h with the rest of them. + + * ace/Base_Thread_Adapter.{h cpp} (invoke(), ace_thread_adapter()): + * ace/OS_Thread_Adapter.{h cpp} + * ace/Thread_Adapter.{h cpp} (invoke(), invoke_i()): + Return type changed from void * to ACE_THR_FUNC_RETURN. + + * ace/Event_Handler.{cpp h} (read_adapter): Change return value from + void* to ACE_THR_FUNC_RETURN. + + * ace/Thread_Hook.{h cpp}: ACE_Thread_Hook::start () returns + ACE_THR_FUNC_RETURN, not void *. + + * ace/Thread.{h i} (exit, join): 'status' arg is now + ACE_THR_FUNC_RETURN *, not void *. + + * ace/Thread_Control.{h inl cpp} (status, exit): + * ace/Thread_Manager.{h cpp} (exit, join): Thread exit status + type changed from void * to ACE_THR_FUNC_RETURN. + + * ace/Task.{h cpp} (ACE_Task_Base): Return type from svc_run now + ACE_THR_FUNC_RETURN. + + * examples/C++NPv1/RT_Thread_Per_Connection_Logging_Server.cpp: + * examples/C++NPv1/Thread_Per_Connection_Logging_Server.{cpp, h}: + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: + * examples/C++NPv2/Server_Shutdown.cpp: + * examples/C++NPv2/TP_Reactor_Logging_Server.cpp: + * examples/C++NPv2/WFMO_Reactor_Logging_Server.cpp: + * examples/C++NPv2/Client_Logging_Daemon.cpp: + * examples/Connection/blocking/SPIPE-acceptor.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-server.cpp: + * examples/Reactor/WFMO_Reactor/Abandoned.cpp: + * performance-tests/TCP/tcp_test.cpp: + * tests/ACE_Init_Test.cpp: + * tests/MEM_Stream_Test.cpp: + * tests/Service_Config_DLL.cpp: + * tests/Task_Test.cpp: + * tests/Thread_Pool_Reactor_Resume_Test.cpp: + * tests/Thread_Pool_Reactor_Test.cpp: + Change thread function to return ACE_THR_FUNC_RETURN, not void *. + + * examples/C++NPv2/TP_Logging_Server.cpp (handle_input, svc): + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp (open): + * examples/C++NPv2/display_logfile.cpp (svc): Change + ACE_reinterpret_cast to ACE_static_cast. Thanks to Doug Schmidt + for finding this. + + * examples/C++NPv2/TP_Logging_Server.h: + * examples/C++NPv2/Reactor_Logging_Server_Adapter.cpp: Corrected use + of ACE_NEW_RETURN. + +Mon Jul 1 23:16:47 2002 Jeff Parsons + + * */Makefile: + + Updated dependencies. + +Mon Jul 1 21:59:44 2002 Krishnakumar B + + * ACEXML/common/Attributes.h: + * ACEXML/common/AttributesImpl.h: + * ACEXML/common/Attributes_Def_Builder.h: + * ACEXML/common/CharStream.h: + * ACEXML/common/ContentHandler.h: + * ACEXML/common/DTDHandler.h: + * ACEXML/common/DTD_Manager.h: + * ACEXML/common/DefaultHandler.h: + * ACEXML/common/Element_Def_Builder.h: + * ACEXML/common/EntityResolver.h: + * ACEXML/common/Env.h: + * ACEXML/common/ErrorHandler.h: + * ACEXML/common/Exception.h: + * ACEXML/common/FileCharStream.h: + * ACEXML/common/HttpCharStream.h: + * ACEXML/common/InputSource.h: + * ACEXML/common/Locator.h: + * ACEXML/common/LocatorImpl.h: + * ACEXML/common/Mem_Map_Stream.h: + * ACEXML/common/NamespaceSupport.h: + * ACEXML/common/SAXExceptions.h: + * ACEXML/common/StrCharStream.h: + * ACEXML/common/Transcode.h: + * ACEXML/common/URL_Addr.h: + * ACEXML/common/Validator.h: + * ACEXML/common/XMLFilter.h: + * ACEXML/common/XMLFilterImpl.h: + * ACEXML/common/XMLReader.h: + * ACEXML/common/XML_Codecs.h: + * ACEXML/common/XML_Types.h: + * ACEXML/parser/debug_validator/Debug_Attributes_Builder.cpp: + * ACEXML/parser/debug_validator/Debug_Attributes_Builder.h: + * ACEXML/parser/debug_validator/Debug_DTD_Manager.h: + * ACEXML/parser/debug_validator/Debug_Element_Builder.h: + * ACEXML/parser/debug_validator/Element_Tree.h: + * ACEXML/parser/parser/Entity_Manager.h: + * ACEXML/parser/parser/Parser.cpp: + * ACEXML/parser/parser/Parser.h: + + ACE_LACKS_PRAGMA_ONCE fixes. + +Mon Jul 1 06:21:00 2002 Douglas C. Schmidt + + * ace/Sock_Connect.cpp (count_interfaces): Added a MacOSX-specific + value for OSIOCGIFCONF. Thanks to John Zorko + for this fix. + +Sun Jun 30 22:22:05 2002 Irfan Pyarali + + * ace/MEM_Addr.cpp (same_host): This method was unnecessarily + creating and copying both the local and remote addresses. I + changed it so that we only compare the IP addresses. + + * ace/MEM_Connector.cpp (connect): Changed debugging statement to + provide additional information. + +Sun Jun 30 15:32:47 2002 Douglas C. Schmidt + + * ace/Based_Pointer_Repository.h: + * ace/Array_Base.h: Added #include "ace/OS.h" to get the + definition of size_t on MacOS. Thanks to John Zorko + for this fix. + + * ace/Synch.cpp: Fixed the ACE_recursive_mutex_state::reset() method + so that it sets m.LockCount to 0. Thanks to Davide Pasetto + for reporting this. + + * ace/Synch.cpp: Fixed the implementation of + ACE_Condition so that it works + properly on Windows, where the recursive mutex count is + incremented by the OS. Thanks to Davide Pasetto + for reporting this. + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: + * examples/C++NPv2/Client_Logging_Daemon.cpp: Changed "blocks" + parameter to "chunk" to be consistent with the terminology in + the book. + + * examples/C++NPv2/TP_Logging_Server.h: + * examples/C++NPv2/Reactor_Logging_Server_Adapter.cpp: Added some + new code to safely allocate an array. + +Sun Jun 30 08:55:18 2002 Douglas C. Schmidt + + * tests/Enum_Interfaces_Test.cpp (ACE_TMAIN): Fixed this to use + ACE_Sock_Connect::get_ip_interfaces() rather than ACE::get_ip_interfaces(). + Thanks to for reporting this. + +Sun Jun 30 12:22:12 2002 Johnny Willemsen + + * etc/tao_portablegroup.doxygen: + Added this file that configures the doxygen configuration of the TAO + PortableGroup library. + + * html/index.html: + * bin/generate_doxygen.pl: + Updated these files so that the new PortableGroup doxygen + documentation is generated and listed in the index page. + +Fri Jun 28 08:07:12 2002 Douglas C. Schmidt + + * ace/Logging_Strategy.cpp: Added the ability to toggle + the LM_STARTUP and LM_SHUTDOWN messages. Thanks to + Adee Ran for the patch. + +Fri Jun 28 07:37:12 2002 Johnny Willemsen + + * ACEXML/common/URL_Addr.cpp: + Fixed BCB Unicode build error. + +Thu Jun 27 16:50:19 2002 Balachandran Natarajan + + * ace/TP_Reactor.cpp: + * ace/TP_Reactor.h: + * ace/TP_Reactor.i: Moved common code in get_socket_event_info () + to a new method clear_handle_read_set () and simplified the code + in get_notify_handle () so that it improves readability. + +Thu Jun 27 20:26:33 UTC 2002 Craig Rodrigues + + * tests/DLL_Test.cpp: Define retval before preprocessor checks to + fix Lynx build problem. + +Thu Jun 27 14:32:50 2002 Nanbor Wang + + * bin/nightlybuilds/builds.lst: Moved Fuzz, DLL_Core, DLL_Debug + builds to the new scoreboard also. + +Thu Jun 27 07:47:12 2002 Johnny Willemsen + + * ACEXML/tests/HttpCharStream_Test.cpp: + Fixed BCB Unicode build errors. + + * ACEXML/common/URL_Addr.h: + Documentation update. + +Wed Jun 26 09:56:38 2002 Nanbor Wang + + * bin/msvc_auto_compile.pl: Changed the list of XML related + directory name from XML to ACEXML. + +Wed Jun 26 13:55:01 UTC 2002 Craig Rodrigues + + * examples/Reactor/Multicast/Log_Wrappers.cpp: + * examples/Reactor/Ntalker/Log_Wrappers.cpp: + Remove references to SOCK_Dgram_Mcast_T. + +Tue Jun 25 15:13:49 2002 Steve Huston + + * ace/Basic_Types.h: Added ACE_WIN64 versions of + ACE_SSIZE_T_FORMAT_SPECIFIER and ACE_SIZE_T_FORMAT_SPECIFIER. + +Tue Jun 25 23:22:09 UTC 2002 Craig Rodrigues + + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_Dgram_Mcast.h: + * ace/SOCK_Dgram_Mcast.i: + * ace/SOCK_Dgram_Mcast_T.cpp: Removed. + * ace/SOCK_Dgram_Mcast_T.h: Removed. + * ace/SOCK_Dgram_Mcast_T.i: Removed. + * ace/QoS/SOCK_Dgram_Mcast_QoS.cpp: + * ace/QoS/SOCK_Dgram_Mcast_QoS.h: + Reverted these files to before June 9. Existing code in QoS and + AVStreams were broken do to the changes. + +Tue Jun 25 14:45:31 2002 Steve Huston + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: Comment out + declarations for info(), suspend(), and resume() - they're left + as exercises for the reader. + + * examples/C++NPv2/AC_CLD.dsp: Added SSL link libraries. + +Tue Jun 25 12:13:39 2002 Steve Huston + + * examples/C++NPv2/AC_CLD.dsp: + * examples/C++NPv2/examples.dsw: Added project for the + Acceptor-Connector Client Logging Daemon in chapter 7. + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: Use the ACE + traits macros instead of relying on traits class support to + help the aged MSVC 6 compiler along. + +Mon Jun 24 20:55:45 2002 Irfan Pyarali + + * ace/ACE.cpp (select): Fixed typo. + +Mon Jun 24 17:39:31 2002 Steve Huston + + * ace/ace_dll64.mak: + * ace/ace_lib64.mak: NMAKE files for building ACE on 64-bit Windows + XP with the Platform SDK compiler. At some point, hopefully, + MSVC will allow 64-bit builds via the regular project files, + but for now, must use NMAKE. + + * ace/config-win32-common.h: #define ACE_WIN64 if doing a 64-bit build. + + * ace/ACE.cpp (select): Don't sync() the handles after select() on + Win64. The cast is illegitmate, and the call is a no-op on Windows. + +Mon Jun 24 17:55:58 2002 Krishnakumar B + + * include/makeinclude/wrapper_macros.GNU (ACE_BETA_VERSION): + + Grab the version information from Version.h rather than VERSION + as VERSION is not likely to installed when doing a make install. + Thanks to Bala for the suggestion. + + * ACEXML/parser/parser/Parser.cpp: + * ACEXML/parser/parser/Parser.h: + + Get the prefix right in case of a default namespace being + present. Previously we were using a URI a get to the prefix, + which doesn't work when the URI is the same as URI for another + namespace prefix. + +Mon Jun 24 19:54:34 UTC 2002 Craig Rodrigues + + * ace/config-g++-common.h: Define + ACE_HAS_STD_TEMPLATE_METHOD_SPECIALIZATION for gcc 2.95 and higher. + +Mon Jun 24 07:26:41 2002 Douglas C. Schmidt + + * ace/Timer_Queue_Adapters.cpp: + * ace/Timer_Queue_Adapters.h: Changed uses of ACE_Recursive_Thread_Mutex + to ACE_RECURSIVE_SYNCH_MUTEX so things will work properly on + single-threaded configurations. Thanks to Craig Rodrigues for + reporting this. + +Mon Jun 24 12:07:00 UTC 2002 Craig Rodrigues + + * ace/RMCast/RMCast_IO_UDP.cpp: Remove ACE_SOCK_Dgram_Ex template instantiation. + +Mon Jun 24 03:26:10 2002 Krishnakumar B + + * ACEXML/common/AttributesImpl.cpp(isDuplicate): + + New function isDuplicate() to check duplicate attributes. Merged + support for duplicate attribute checking in setAttribute(). + + * ACEXML/common/AttributesImpl.h: + + Fixed documentation for a bunch of functions which had set/get + roles reversed. + + * ACEXML/common/AttributesImpl.i: + + Fixed more memory leaks. + + * ACEXML/common/NamespaceSupport.cpp(processName): + + Added support for processing attributes. + + * ACEXML/parser/parser/Parser.cpp: + * ACEXML/parser/parser/Parser.h: + + Implement XML Namespace (http://www.w3.org/TR/REC-xml-names) + support. ACEXML parser supports the SAX 2.0 XML API. Parser has + two user tunable features available: namespaces (defaults to + true) and namespace_prefixes (defaults to false). + + * ACEXML/examples/SAXPrint/Print_Handler.cpp: + * ACEXML/examples/SAXPrint/SAXPrint_Handler.cpp: + + Changed to reflect more event callbacks available now due to + above added support. + + * ACEXML/examples/SAXPrint/ns.svc.conf.xml: + + Changed to include a default namespace to test more code paths. + Found a bug in the process :-) Will fix tomorrow. + + The only remaining feature in ACEXML parser needed for CCM is + validator. Next target.... + + * ace/Message_Block.h: + + Fixed typo in documentation (ceases to exist and not seizes to + exist). + +Sun Jun 23 21:06:28 UTC 2002 Craig Rodrigues + Bill Fulton + + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_Dgram_Mcast.h: + * ace/SOCK_Dgram_Mcast_T.cpp: + * ace/SOCK_Dgram_Mcast_T.h: + * ace/SOCK_Dgram_Mcast_T.i: + More SOCK_Dgram fixes supplied by Bill Fulton with modifications + by Craig Rodrigues. + - Remove proprietary typedefs for ACE mutex classes + - Make default mutex strategy for SOCK_Dgram_Mcast ACE_SYNCH_MUTEX + - (subscribe_ifs) fix check when determining if subscribed address + is the same as the bound address + +Sun Jun 23 14:51:48 2002 Douglas C. Schmidt + + * ace/Synch.h: Put the class ACE_recursive_mutex_state inside + the section ACE_HAS_THREADS. Thanks to Craig Rodrigues + for noticing the need for this. + +Sun Jun 23 14:05:12 2002 Johnny Willemsen + + * ACEXML/common/HttpCharStream.cpp: + Fixed BCB Unicode compile errors. + +Fri Jun 21 19:18:05 UTC 2002 Craig Rodrigues + + * bin/nightlybuilds/builds.lst: Move to IA64_Linux_GCC_3.1 and + Tru64_CXX builds to new scoreboard. + +Fri Jun 21 14:34:51 2002 Steve Huston + + * ace/config-sunos5.5.h: Enable + ACE_HAS_STD_TEMPLATE_METHOD_SPECIALIZATION for Forte 6 Update 1. + +Fri Jun 21 14:06:33 2002 Steve Huston + + * ace/Timer_Queue_Adapters.cpp (ACE_Thread_Timer_Queue_Adapter): + Changed ACE_GUARD_RETURN uses of command_mutex_ from + ACE_Recursive_Condition_Mutex to ACE_SYNCH_MUTEX to match + its definition. + +Fri Jun 21 06:21:33 2002 Christopher Kohlhoff + + * ace/config-win32-borland.h: + Re-enable ACE_HAS_STD_TEMPLATE_METHOD_SPECIALIZATION for all + versions of Borland C++. + +Thu Jun 20 20:50:51 2002 Steve Huston + + * ace/config-sunos5.5.h: Re-enable + ACE_HAS_STD_TEMPLATE_METHOD_SPECIALIZATION for Forte 6 Update 2. + + * ace/Functor.i: + * ace/Synch.cpp: Commented out all the uses of + ACE_TEMPLATE_METHOD_SPECIALIZATION. The class specialization was + already declared such, and doing it on the methods is not right. + But they're only commented out for now, just in case... + +Thu Jun 20 20:29:31 2002 Steve Huston + + * ace/Codecs.h (ACE_Base64): Added "friend class ace_dewarn_gplusplus" + to silence g++ warnings about private ctors and no friends. + +Thu Jun 20 20:21:39 2002 Steve Huston + + * tests/Recursive_Condition_Test.icc: Visual Age C++ configuration + for this new test. + * tests/tests.icp: Added Recusrive_Condition_Test.icc. + +Fri Jun 21 00:21:48 UTC 2002 Craig Rodrigues + + * examples/Timer_Queue/Thread_Timer_Queue_Test.cpp (dump): + Switch from ACE_SYNCH_MUTEX to ACE_SYNCH_RECURSIVE_MUTEX. + +Thu Jun 20 14:32:03 2002 Douglas C. Schmidt + + * ace/Synch.cpp (ACE_recursive_mutex_state): Replaced the + ACE_OS::mutex_lock/unlock calls with + ACE_OS::thread_mutex_lock/unlock so things will work on NT. + Thanks to Jeff Parsons for reporting this. + + * ace/Synch.{h,cpp}: Only compile the new + ACE_Condition template + specialization if ACE_HAS_THREADS. Thanks to Craig Rodrigues + for motivating this. + + * include/makeinclude/platform_sunos5_sunc++.GNU (CC_VERSION): Added + additional cases for SunC++ 5.2 and 5.3. Thanks to Carsten + Tonsberg Nielsen for reporting this. + + * ace/ATM_Stream.cpp (get_peer_name): + * ace/Log_Msg_UNIX_Syslog.cpp (log): + * ace/Logging_Strategy.cpp: Replaced the use of ACE_OS::strtok() with + ACE_OS::strtok_r(). Thanks to Eugene Alterman + for motivating this. + +Thu Jun 20 16:02:22 2002 Steve Huston + + * ace/config-sunos5.5.h: Commented out the below addition for now. + +Thu Jun 20 15:49:39 2002 Steve Huston + + * ace/config-sunos5.5.h: For Forte 6, Update 2 and up, add + #define ACE_HAS_STD_TEMPLATE_METHOD_SPECIALIZATION. + Earlier Forte 6 versions may also support this, but I don't have + one to test on. + Fixes compile warning on Filecache.cpp. + +Thu Jun 20 13:37:55 2002 Douglas C. Schmidt + + * examples/C++NPv2/README: Updated the README file to map the + filenames to the chapters in C++NPv2. + +Wed Jun 19 21:30:05 UTC 2002 Craig Rodrigues + Bill Fulton + + * ace/SOCK_Dgram_Mcast_T.cpp: Fix Win32 wchar build problems. + Thanks to Bill Fulton for supplying these fixes. + +Wed Jun 19 16:16:32 2002 Nanbor Wang + + * tests/tests.dsw: + * tests/Recursive_Condition_Test.dsp: Added a new project file. + +Wed Jun 19 06:50:54 2002 Douglas C. Schmidt + + * tests/run_test.lst: + * tests/Makefile.bor: + * tests/Makefile: Added the new Recursive_Condition_Test. + + * ACE/Timer_Queue_Adapters.{h,cpp}: Enhanced + ACE_Thread_Timer_Queue_Adapter so it uses the new + ACE_Condition. Thanks to + Stephen Howard for + suggesting this. + + * ace/Synch_T.h: Added a new RECURSIVE_CONDITION trait in + ACE_NULL_SYNCH and ACE_MT_SYNCH. + + * ace/Synch_T.h: Added a #define for ACE_SYNCH_RECURSIVE_CONDITION + so that we can parameterize it based on threads vs. non-threads. + + * docs/exceptions.html: Updated document to use ACE_RE_THROW + instead of the deprecated ACE_RETHROW macro. Thanks to + Andy Ling for reporting this. + + * ace/Timer_Queue_Adapters.h: Changed the order in which + the condition variable and mutex are defined to ensure the + mutex is initialized before we pass it to condition_'s + constructor. + + * ace/Filecache.cpp: + * ace/Synch.cpp: + * ace/Atomic_Op.i: Replaced ACE_TEMPLATE_SPECIALIZATION with + ACE_TEMPLATE_METHOD_SPECIALIZATION so this will compile correctly + on certain (broken) compilers, such as SunC++ 6.1. + +Wed Jun 19 14:25:52 2002 Balachandran Natarajan + + * ace/TP_Reactor.cpp (handle_socket_events): Couple of small + fixes. The fixes are for + + 1. Bug http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1231 + and it is self-explanatory + + 2. The find () operation after dispatch was not holding the lock + and chances of race are high. This is documented as #2 in + bug http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1233 + + Added some comments in the code explaining what is going + on. Thanks to Carlos for identifying the problem. + + * ace/Event_Handler.h: Added a enum to indicate the two states + returnable by the call resume_handler (). + + * ace/Event_Handler.cpp (resume_handler): Instead of returning 0, + we return ACE_Event_Handler::ACE_REACTOR_RESUMES_HANDLER. + +Wed Jun 19 13:42:16 2002 Balachandran Natarajan + + * tests/tests.dsw (Project): Added TP_Reactor_Test.dsp to the + workspace. + +Wed Jun 19 11:57:02 2002 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Disable TAO/tests/Nested_Upcall_Crash on minimum_corba builds. + +Tue Jun 18 14:29:26 2002 Douglas C. Schmidt + + * ace/Synch.{h,i}: Added a new template specialization of ACE_Condition<> + that supports recursive mutexes used in conjunction with ACE + condition variables. Thanks to Michael Lindner + and Mike Vitalo for + contributing this. + + * ace/SOCK_Dgram_Mcast.cpp: Reverted the file to the previous version + since somehow things got messed up... + +Tue Jun 18 12:44:54 2002 Douglas C. Schmidt + + * ace/OS.{h,i}: Added a new method called stopped() that + returns 1 if the timer has already been stopped. Thanks to + Giovanni Zito for this suggestion. + +Tue Jun 18 12:17:58 2002 Jaiganesh Balasubramanian + + * ace/QoS/SOCK_Dgram_Mcast_QoS.cpp: + Added the RCS ID symbol. + +Tue Jun 18 12:41:15 2002 Balachandran Natarajan + + * ace/CDR_Stream.i (adjust): Added a check for pointer overflow + befor setting the write pointer. thanks to Rich Siebel and Byron + Harris for pointing this out. + +Tue Jun 18 07:50:14 2002 Ossama Othman + + * ace/Env_Value_T.h: + + Include "ace/OS.h". It is required for some types and function + calls made in this header. Thanks to Michael Kircher for + pointing this out. + +Mon Jun 17 17:36:52 2002 Steve Huston + + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: Changed call + to ACE_Asynch_Connector::open() to take advantage of new + defaults, made on: + Sat Jun 15 20:30:41 2002 Steve Huston + +Mon Jun 17 17:21:38 2002 Steve Huston + + * ace/SUN_Proactor.cpp (handle_events): Remove the now-deleted + success argument from call to application_specific_code(). + +Mon Jun 17 13:40:24 2002 Balachandran Natarajan + + * include/makeinclude/platform_osf1_4.x_cxx.GNU: Removed the hard + override of LDFLAGS. Thanks to Martin Krumpolec + . + +Mon Jun 17 06:20:55 2002 Christopher Kohlhoff + + * ace/Object_Manager.cpp: + * ace/Service_Config.h: + * ace/Service_Config.cpp: + + Some components registered with the framework repository have + dependencies on the ACE_Log_Msg or ACE_Thread_Manager singletons. + Reorganised the ACE_Object_Manager::fini function so that the + framework repository is cleaned up before these objects. Thanks to + Don Hinton for assistance in tracking this down. + + * ace/Reactor.cpp: + + Prevent the reactor from being erroneously registered with the + framework repository a second time, as happened when the reactor + instance pointer was explicitly set. + +Sun Jun 16 20:38:27 2002 Krishnakumar B + + * ace/DLL_Manager.cpp (ACE_DLL_Handle): + * ace/DLL.cpp: + + More mismatched delete/delete[] errors. I am fixing the easier + ones. There may be more. + +Sun Jun 16 20:22:28 2002 Krishnakumar B + + * ACEXML/common/AttributesImpl.i (qName): + + Fixed memory leaks caused by mismatched delete/delete[]. Caught + by Valgrind. + + * ACEXML/examples/SAXPrint/main.cpp: + + Give useful usage messages. + + +Sat Jun 15 20:56:29 2002 Steve Huston + + * tests/tests.dsw: Added Proactor_Timer_Test.dsp. + +Sat Jun 15 20:30:41 2002 Steve Huston + + * ace/Asynch_Acceptor.{h cpp}: Added a new template method, + virtual int validate_connection + (const ACE_Asynch_Connect::Result& result, + const ACE_INET_Addr &remote, + const ACE_INET_Addr& local) + It replaces the old validate_new_connection() method, which is + now marked deprecated. Semantics are the same (return -1 to + ask framework to abort the connection before activating a + service). However, more information is available, including + the socket handle. + + * ace/Asynch_Connector.{h cpp}: Replaced validate_new_connection() + method with: + virtual int validate_connection + (const ACE_Asynch_Connect::Result& result, + const ACE_INET_Addr &remote, + const ACE_INET_Addr& local) + Examining the result argument is the only way to find out if + the asynchronous connect attempt succeeded or not. + The connect completion calls validate_connection() on either + success or failure as long as the validate_new_connection + flag is set on open(). The default value was changed from + 0 (don't call) to 1 (call) since this is the only way to learn + about connection success/failure. + + * ace/POSIX_Proactor.{h cpp} (application_specific_code): + * ace/WIN32_Proactor.{h cpp} (application_specific_code): Removed the + 'int success' argument. Success/fail is determined by the error + value now (0 == success). Simplifies the code, and makes the + result.success() call return 1 iff the operation succeeded. + + Thanks very much to Alex Libman for these ideas and for working + to improve these classes for ACE and C++NPv2! + +Sat Jun 15 12:01:38 2002 Steve Huston + + * ace/Obstack_T.cpp (request): Don't lose an initial set of characters + if the requested length won't fit. Thanks to Christopher W. Midgley + for this report and fix. + + * tests/Obstack_Test.{cpp dsp icc}: New test for the above, and + its MSVC and Visual Age C++ files. + + * tests/Makefile: + * tests/Makefile.bor: + * tests/run_test.lst: + * tests/tests.dsw: + * tests/tests.icp: Added new Obstack_Test. + + * THANKS: Added Christopher W. Midgley. + +Sat Jun 15 12:41:07 Frank Hunleth + + * THANKS: Added Nick Cross to the hall of fame. + +Fri Jun 14 14:39:33 2002 Nanbor Wang + + * ace/Filecache.cpp: Removed excessive ACE_DEBUG statements. + Thanks to Charles F. Frasch for + reporting them. + +Fri Jun 14 12:04:17 2002 Jaiganesh Balasubramanian + + * ace/QoS/SOCK_Dgram_Mcast_QoS.cpp: + * ace/QoS/SOCK_Dgram_Mcast_QoS.h: + Removed build errors for QoS library, due to dependencies to the + old SOCK_Dgram_Mcast class. Thanks to Bill Fulton for this fix. + +Fri Jun 14 14:17:49 2002 Carlos O'Ryan + + * bin/auto_run_tests.pl: + Fixed wrong application name in Usage message. + + * bin/auto_run_tests.lst: + Add the Nested_Upcall_Crash test. + +Fri Jun 14 09:34:41 2002 Ossama Othman + + * ace/OS.i (ctime): + + For the ACE_HAS_WINCE, pass a statically allocated buffer to + ctime_r() since ctime_r() will return that same buffer as the + return value of ctime(). Fixes memory access violations. + Thanks to Michael Searles for pointing out + the problem. + +Thu Jun 13 21:26:49 2002 Steve Huston + + * ace/Configuration_Import_Export.cpp (squish): Replaced use + of naked isspace() with ACE_OS_String::ace_isspace() to work + with wide chars also. + +Thu Jun 13 21:09:33 2002 Steve Huston + + * tests/Config_Test.cpp (run_tests): Added a test for importing + a previously-existing ini file and verifying its contents. + + * tests/Config_Test_Import_1.ini: File for the above test. + +Thu Jun 13 19:05:57 2002 Krishnakumar B + + * include/makeinclude/rules.local.GNU: + + Added a rule to install a symlink to libfoo.so.3 under + $(ACE_ROOT)/ace. This should fix all the build errors. ld.so + needs libfoo.so.3 to be in LD_LIBRARY_PATH. libfoo.so doesn't + do. Thanks to Marvin Wolfthal for reporting the + problem. + + * bin/make_release: + + Changes to ensure that all major releases are named + ACE-[0-9]+.0.0 and all minor releases are named + ACE-[0-9]+.[0-9]+.0. PLEASE TAG THE REPOSITORY AS ACE_5_3_0 and + TAO_1_3_0 or ACE_6_0_0 and TAO_2_0_0 WHEN MAKING A MINOR OR A + MAJOR RELEASE. Pointers to add this to somewhere more prominent + are welcome. + +Thu Jun 13 14:45:13 2002 Douglas C. Schmidt + + * ace/SOCK_Dgram_Mcast_T.cpp: Added wchar support - remove + warnings in MSVC when #define ACE_USES_WCHAR used in config.h. + Thanks to Bill Fulton for this fix. + +Wed Jun 12 21:28:29 2002 Steve Huston + + * tests/Framework_Component_DLL.cpp (Server_T): Add template + parameter name to class template arg to get aC++ to eat it. + +Wed Jun 12 18:29:11 2002 Krishnakumar B + + * include/makeinclude/rules.lib.GNU: + * include/makeinclude/rules.local.GNU: + * include/makeinclude/wrapper_macros.GNU: + * TAO/rules.tao.GNU: + * include/makeinclude/platform_g++_common.GNU: + + Added support for shared library versioning. Libraries built + with GNU ld will be versioned by default. + + * include/makeinclude/platform_aix4_cset++.GNU: + * include/makeinclude/platform_aix4_g++.GNU: + * include/makeinclude/platform_aix_g++.GNU: + * include/makeinclude/platform_aix_ibm.GNU: + * include/makeinclude/platform_hpux.GNU: + * include/makeinclude/platform_hpux_aCC.GNU: + * include/makeinclude/platform_hpux_gcc.GNU: + * include/makeinclude/platform_hpux_kcc.GNU: + + Added null SONAME and SOVERSION for disabling shared library + versioning. + + * include/makeinclude/platform_dgux4_epc.GNU: + * include/makeinclude/platform_freebsd.GNU: + * include/makeinclude/platform_gnuwin32_common.GNU: + * include/makeinclude/platform_irix5.3_g++.GNU: + * include/makeinclude/platform_irix5.3_sgic++.GNU: + * include/makeinclude/platform_irix6.x_g++.GNU: + * include/makeinclude/platform_irix6.x_kcc.GNU: + * include/makeinclude/platform_irix6.x_sgic++.GNU: + * include/makeinclude/platform_linux.GNU: + * include/makeinclude/platform_linux_cxx.GNU: + * include/makeinclude/platform_linux_icc.GNU: + * include/makeinclude/platform_linux_kcc.GNU: + * include/makeinclude/platform_m88k.GNU: + * include/makeinclude/platform_macosx.GNU: + * include/makeinclude/platform_mvs.GNU: + * include/makeinclude/platform_netbsd.GNU: + * include/makeinclude/platform_osf1_3.2_cxx.GNU: + * include/makeinclude/platform_osf1_4.x_cxx.GNU: + * include/makeinclude/platform_osf1_4.x_g++.GNU: + * include/makeinclude/platform_osf1_4.x_kcc.GNU: + * include/makeinclude/platform_osf1_4.x_rcc.GNU: + * include/makeinclude/platform_psosim_g++.GNU: + * include/makeinclude/platform_qnx_neutrino.GNU: + * include/makeinclude/platform_qnx_rtp_gcc.GNU: + * include/makeinclude/platform_sco-nothread.GNU: + * include/makeinclude/platform_sco5.0.0-CC-fsu-pthread.GNU: + * include/makeinclude/platform_sco5.0.0-mit-pthread.GNU: + * include/makeinclude/platform_sco5.0.0-nothread.GNU: + * include/makeinclude/platform_sunos4_g++.GNU: + * include/makeinclude/platform_sunos4_lucid.GNU: + * include/makeinclude/platform_sunos4_sunc++3.x.GNU: + * include/makeinclude/platform_sunos4_sunc++4.x.GNU: + * include/makeinclude/platform_sunos5_centerline.GNU: + * include/makeinclude/platform_sunos5_g++.GNU: + * include/makeinclude/platform_sunos5_ghs.GNU: + * include/makeinclude/platform_sunos5_kcc.GNU: + * include/makeinclude/platform_sunos5_sunc++.GNU: + * include/makeinclude/platform_tandem.GNU: + * include/makeinclude/platform_unixware_g++.GNU: + * include/makeinclude/platform_unixware_udk.GNU: + + Changed SOFLAGS = to SOFLAGS += to avoid dealing with order of + includes of various Makefile rules. + +Wed Jun 12 11:25:22 2002 Douglas C. Schmidt + + * tests/Config_Test.cpp (test): Removed what appeared to be + an unnecessary and unused called to + const ACE_Configuration_Section_Key &root = config->root_section (); + + * ace/Configuration.cpp (open_section): Fixed a warning in the + loop expression. + +Wed Jun 12 11:49:33 2002 Steve Huston + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: Changed to + match book. + + * examples/C++NPv2/Reactor_Logging_Server_Adapter.cpp (init): + Use ACE_Auto_Array_Ptr to be cleaner about allocated char ptr + array. Coincides with book change. + +Tue Jun 11 10:23:03 2002 Stephen Torri + + * ace/String_Base.h: Updated comments/documentation on the String_Base + class. + + * ace/String_Base.{i,cpp}: Added brackets to if/else statements for + better structure/readability. Changed "(cond) ? true : false" to + better "if/else" structure. + +Tue Jun 11 19:05:39 2002 Douglas C. Schmidt + + * ace/SOCK_Dgram_Mcast.h: Added a default constructor for + ACE_SOCK_Dgram_Mcast. + + * tests/Config_Test.cpp (test): Added tests for the following capability. + Thanks to Eugene Alterman for + contributing these tests. + + * ace/Configuration.{h,cpp}: + ACE_Configuration_Heap::open_section() now accepts path + separators in section name, so that it is consistent with the + updated version of + ACE_Configuration_Win32Registry::open_section(). Thanks to + Eugene Alterman for contributing this + patch. + +Tue Jun 11 20:02:39 2002 Steve Huston + + * ace/DLL_Manager.cpp (ACE_DLL_Handle::error()): Change to a + different form of auto_ptr initialization that Visual Age C++ + likes better. + +Tue Jun 11 13:17:29 2002 Douglas C. Schmidt + + * ace/Cache_Map_Manager_T.h: + * ace/Caching_Utility_T.h: + * ace/Env_Value_T.h: Added #include "ace/Global_Macros.h". + Thanks to Ty Tenait for reporting this. + + * ace/Dirent_Selector.h: Added #include "ace/ACE_export.h". + Thanks to Ty Tenait for reporting this. + +Tue Jun 11 09:42:06 2002 Ossama Othman + + * ace/SOCK_Dgram_Mcast_T.cpp (make_multicast_ifaddr): + + Use ACE_HTONL instead of htonl(). The latter causes the + assembler to choke on some Linux installations. + +Mon Jun 10 14:50:46 2002 Nanbor Wang + + * examples/DLL/Dll.dsw: + * examples/ASX/CCM_App/CCM_App.dsw: Updated project dependencies. + +Mon Jun 10 14:23:28 2002 Douglas C. Schmidt + + * ace/Reactor.h (ACE_Reactor): Added a comment explaining that + the mask passed to notify() can only be READ_MASK, WRITE_MASK, + or EXCEPT_MASK. Thanks to Cary Steinmetz + for motivating this comment. + + * ace/OS_String.cpp: Make sure to check whether src == dst and + avoid doing any copies in this case. Thanks to Michael Searles + for reporting this. + +Sun Jun 9 20:01:00 2002 Douglas C. Schmidt + + * ace/Makefile: Something is wrong with my ACE_ROOT environment + variable, which caused problems with the dependency generation. + This is now fixed. + +Sun Jun 9 19:31:04 2002 Douglas C. Schmidt + + * ace/SOCK_Dgram_Mcast.h: Added ACE_Export to ACE_SOCK_Dgram_Mcast. + +Sun Jun 9 18:57:07 2002 Douglas C. Schmidt + + * examples/Reactor/Ntalker/ntalker.cpp: + * examples/Reactor/Multicast/Log_Wrapper.cpp: Added template + instantiations for the new ACE_SOCK_Dgram_Mcast_Ex<> template. + +Sun Jun 9 18:47:22 2002 Douglas C. Schmidt + + * tests/Config_Test.cpp (run_tests): Added code to exercise the + new subkey path feature contributed by Eugene Alterman. + + * ace/Configuration.{h,cpp}: Added support for the path separator + ('\\') in key names. Thanks to Eugene Alterman + for contributing this patch. + + * ace/Date_Time.{h,i}: Added support for weekday. Thanks to + Eyal Lubetzky for reporting this. + +Sun Jun 9 18:11:02 2002 Douglas C. Schmidt + + * ace/SOCK_Dgram_Mcast.cpp: Removed the explicit inclusion of + "ace/SOCK_Dgram_Mcast_T.cpp" since this is #included appropriately + by SOCK_Dgram_Mcast.h. + + * ace/SOCK_Dgram_Mcast.cpp: Removed the ';' from the end of the + #pragma instantiates. + + * ace/Makefile: Added SOCK_Dgram_Mcast_T. + + * ace/SOCK_Dgram_Mcast_T.cpp + ace/SOCK_Dgram_Mcast_T.i + ace/SOCK_Dgram_Mcast_T.h: + Minor changes to conform to ACE coding conventions. + +Sun Jun 9 17:50:37 2002 Bill Fulton + + * ace/SOCK_Dgram_Mcast.cpp + ace/SOCK_Dgram_Mcast.h + ace/SOCK_Dgram_Mcast_T.cpp + ace/SOCK_Dgram_Mcast_T.i + ace/SOCK_Dgram_Mcast_T.h + + Somewhat massive changes to the (already very useful) + ACE_SOCK_Dgram_Mcast class; some fixes to existing functionality, + some new functionality, and a different way of controlling optional + (per-instance) functionality. The intent was to preserve existing + interface and functionality (when correct), including environment- + specific functionality. + + Fixes to Existing Functionality: + + - For ::unsubscribe(void); unsubscribes from all active subscriptions. + Previous version unsubscribed only from the most recently + subscribed group/net_if. + * This could change execution behavior of existing code. + + - Enhanced support for a passed port# of '0'. + The ephemeral port# assigned by the system when the socket is + bound is used for all local ::send methods. + + - Validation of non-zero port# and, optionally, the address passed + to the ::subscribe method, if the socket has been bound. + On second and subsequent ::subscribe invocations, the previous + version allowed passed parameters that were inconsistent with the + bound socket parameters. This could result in a confusing + condition; you would not receive messages sent to the port and/or + address passed to ::subscribe. + * This could change execution behavior of existing code. + + Added Functionality: + + - Support specification of the (multicast) address and interface to + be used by all local ::send methods, independent of the receive + address and interface. The same port# is used for all base class + ::recv methods and all local class ::send methods. The send + interface applies to all local and all base class ::send methods. + + - Enhanced ::dump method, to show the dynamic list of subscriptions, + the bound address/port#, the send address/interface, and the state + of optional functionality. Also did some output reformatting. + + Optional Functionality via Template Parameters and Ctor Args: + + In the previous implementation, some aspects of class functionality + were transparently configured based on the OS it was compiled + under. This has been changed so that all optional functionality is + explicitly specified, using (a baroque set of) optional + constructor arguments. In addition, new optional functionality + was added and is specified with template parameters and optional + constructor arguments. For backward compatibility, there is an + explicit specialization called ACE_SOCK_Dgram_Mcast - this should + have the same functionality, including OS-specific functionality, + as the previous class implementation, and can still be used for + most normal (if there is such a thing with multicast) apps. + Overview of new template parameter: + ACE_SDM_LOCK_* + - Strategized locking (very limited MT-safety - see below). + Overview of new, optional ctor arguments (enumerations): + opt_bindaddr_* + - Whether to bind the address as well as the port#. + opt_nulliface_* + - Defines semantics of passing net_if parameter of NULL; + i.e. use all or only one iface. + opt_dtorunsub_* + - Whether destructor explicitly unsubscribes from all + groups. + See SOCK_Dgram_Mcast_T.h for a full description. Environment- + specific default values are explicitly declared, for use by app + code. + + Changes to Previous Class (public) Interface & Functionality: + + - Added a public (overloaded) ::open method. + This allows explicit specification of the port# and the multicast + address (if opt_bindaddr_yes is used) that is bound to this + socket. This also allows specification of the address and the + network interface to be used by local ::send methods (and the + network interface used by super-class and sub-class ::send + methods). There is only one address parameter; the same parameter + is used for both the send address/port# and the bound + address/port#. The port# in the address may be 0 (to use a + system-assigned ephemeral port# for sending and receiving). + + NOTE: Use of this method is optional and, if used, must be + invoked _before_ any ::subscribe method is invoked - otherwise it + is _ignored_, and the (first) ::subscribe parameters will be used + to bind the socket and set the send parameters (as in the previous + code). Note that ::subscribe need not be invoked at all, now; if + only ::open is used, you can send but not receive multicast + messages, and you can specify the interface used for sending. + + - Validation of ::subscribe parameters is now strict. + Once the port# is bound (by ::open or the first ::subscribe), the + port# passed to every ::subscribe call must either be '0' or match + the bound port#. Additionally; if opt_bindaddr_yes is used, the + address passed must match the bound address. If these conditions + are not met, an error is returned (with errno=ENXIO). Note that + such subscriptions would have no (useful) effect, since messages + could never be received for the given port#/address, due to IP + stack filtering. This condition was ignored in the previous + version; it is now an error condition. This may break some + existing code - but note that it flushes out a (silent) logical + error condition. + The port# in ::unsubscribe(addr,...) is _not_ checked, though; + this is not logically consistent, but ... a mistaken port# here + seems less potentially dangerous and/or confusing. + + - The previous ::subscribe and ::unsubscribe methods had a special + return code (1) to indicate that (previously Win32-specific) + multiple-interface subscription/unsubscription had been done. This + seemed to be useful only internally, but was visible to the + caller. The new methods will always return '0' for success (even + if opt_nulliface_all is used). + + - The dynamic subscription list housekeeping adds slight processing + overhead, and even more overhead is added if locking is enabled. + This should not be noticeable, except in MT thrashing conditions + and/or if doing very frequent subscribes/unsubscribes. + + Known Restrictions: + + - Interaction/Integration with other ACE multicast-oriented classes + and library code is _undefined_, i.e.: + + ACE_SOCK_Dgram_Mcast_QoS: Presumably works ok, but inherits + legacy class; can't specify optional functionality. + + ACE_RMCast: Presumably works ok, but uses legacy class; + can't specify optional functionality. + + ACE_XTI_ATM_Mcast: I presume there's no integration desirable. + I've re-built vers. 5.2 ACE under Solaris and Windows with the + modified files, and it builds ok. Since the original functionality + is (basically) unchanged, it is _assumed_ that any other ACE lib + code that references the ACE_SOCK_Dgram_Mcast class signature + still functions ok. But ... things like adding templated code + could introduce problems! Also note that these classes use (now) + deprecated interface methods; e.g. RMCast passes protocol options + to ::subscribe that are now ignored. + + - Environment-specific notes/restrictions on use of options: + + The opt_nulliface_all option should be used only in environments + for which the ACE_Sock_Connect::get_ip_interfaces call is + correctly implemented (currently only Windows). In other + environments, using this option will _always_ return an error + from ::subscribe/::unsubscribe. + + The opt_dtorunsub_yes option allows finer control of multicast + group "leave" effects for environments that do not automatically + unsubscribe when the socket is closed, or in situations where + the underlying handle has been duplicated (e.g. via fork()), + but will not be used. All in all, this option is useful only + under special, controlled circumstances. + + The effect of using opt_bindaddr_yes is very environment- + specific; it may not do what you expect (or may do what you + don't expect :-) + The default option values are defined with these notes in mind. + + - Options enumeration weaknesses. + + The options enumeration list was put in the global namespace. + It seems like a pain for user code to have to prefix the option + values with the templated class name. + + All option values use the same enumeration; this could allow + option values to be used for the "wrong" option in the ctor + options list. This was a trade-off; I didn't want to add too + many things to the global namespace. (Note that more options + might be added to the list, in the future.) All new code + compares against explicit enum values (instead of 0), for safety. + + - The ::open parameter list may be too "dense" - it tries to do too + many different things with the passed parameters. This is an + artifact of its heritage. (Note that ::subscribe can also invoke + ::open behavior). In particular, it would be nice to separate + bound addr/iface from send addr/iface. + + - Does not explicitly check for duplicate active subscriptions (i.e. + subscription to the same address and interface while a previous + subscription is still active). (Subscription to the same address + but different interface is not a duplicate and is fully + supported.) Note that, for most IP stacks, a subscription attempt + for a duplicate addr/iface will fail (and a duplicate entry will + not be created). If it is allowed by the IP stack and you create + duplicate internal subscription list entries, you must call + ::unsubscribe(addr) for _each_ duplicate subscription (or + ::unsubscribe(void)) - until this is done, you will continue to + recv messages for this subscription. + + - This implementation carries forward (for backward compatibility) + certain environment-specific hacks, i.e.: + + A Win32 hack such that the default opt_nulliface_defopt value + for Win32 is different from all other environments. + + A Linux hack such that the full address is unconditionally bound. + These would seem likely to lead to unexpected behavior for the + "casual user", but changing the default would break existing code. + + - The SDM_OPT_LOCK parameter only controls locking of the dynamic + subscription list; and the need/use for this is debatable. It was + added as a fail-safe, in case one class instance is shared by + multiple threads. Note that a given instance can _not_ (reliably) + be shared by multiple threads; there are logical race conditions + (e.g. calling ::open) - but the logical race conditions should + cause only unpredictable operation, not corruption. However; the + subscription list could be corrupted if one instance is shared by + multiple threads, which could lead to undefined behavior/crashes. + + - The class interface is probably too "busy"; there are a _lot_ of + side-effects that may not be evident. + + - Currently only built and tested under Solaris w/ Forte-C++ and + Windows NT and 2000 w/ MSVC 6. + + Implementation Changes: + + - Now implemented as a templated class (ACE_SOCK_Dgram_Ex), via the + new SOCK_Dgram_Mcast_Ex.* files. The (remaining) SOCK_Dgram_Mcast.* + files are vestigial; they remain due to the build rules and + documentation conventions, and because existing user code + references the ace/SOCK_Dgram_Mcast.h file. Note that this + differs from most other *_Ex.* template source files in ACE, where + there is still at least some function implemented in the + non-templated source files; here there is none. + An explicit specialization is declared that matches the old class + signature. + + - The constructor now has optional arguments (to specify per-instance + optional functionality. A default ctor can still be used; the + legacy default environment-specific functionality will be declared. + + - I've tried to generalize code that was previously overly + environment-dependent and/or macro-driven. The intent was to make + future enhancements easier (there's still much desirable work to + be done ... speaking of which ...) + + Suggested Future Work: + + - Expose the SOCK_Dgram::send methods; i.e. allow specification of an + arbitrary dest address/port# with the ::send call. (Must check for + port# of '0' in the send address and set port# to the bound port#). + This would allow the specification of the network interface for + arbitrary multicast transmissions from one instance, and should + work as expected if the address specified is unicast. This seems + useful; currently, if you want to send multicast messages with + interface control, you would either have to create one instance of + this class for each send address, or force access to the inherited + ACE_SOCK_Dgram instance (which works ... "but it would be wrong"). + I'm not sure why access to these was disabled in the original + design. (Is there a good reason not to do this?) + + - Mark the current ::subscribe and ::unsubscribe interfaces as + deprecated and add new interfaces that remove all unnecessary + parameters. + + Remove the (optional) protocol* parameters from the ::subscribe + and ::unsubscribe methods - they don't do anything. I (really) + wanted to do this now, but it could break existing app code (but + you can't really specify anything other than the default values, + anyway!) + + Remove the (optional) reuse_addr parameter from the ::subscribe + method - it is only useful if ::open has not been previously + invoked. Problem: This will require that the ::open method be + explicitly invoked before invoking ::subscribe, which makes the + interface more clumsy. + Problem: Hard to get a unique signature for the new methods, + especially for ::unsubscribe. + + - It seems that an ACE_SOCK_Dgram_Mcast_Manager class could be a + useful "layered" addition, e.g.: + - Trap ::subscribe invocations using different port numbers, and + create separate instances/sockets for each unique port#. + - Implement software loopback filtering for environments that do + not implement loopback disabling in the IP stack (e.g. older + Windows). Also implement per-interface filters for environments + (like Win/NT) that don't do this right. + - Implement multicast group "sets" to support easy and atomic + joins/leaves of a user-defined list of group/interface + combinations. Include enhanced failure condition handling, such + as subscription "roll-back"; all-or-none of the set's members + are joined. + Actually; all of these could be done in the current class - but + there are too many options in this class already, and the function + seems (to me) more appropriate to a higher-level "manager". + + - Allow the send interface (and default send addr) to be changed, + after initial setting. (OS-specific support needed - most stacks + allow the interface to be changed once set, but I presume that not + all do.) + In general; might be worth splitting out the send from the + ::open/::subscribe methods - e.g. ::send_parameters. Might add + optional TTL and loopback parameters to this, too. + + - Add explicit methods to set common multicast socket options, e.g. + TTL, loopback. (So you don't have to remember the macro names and + to make these macros/actions more portable!). + + - Tighten up the parameter semantics and/or validation, e.g.: + + Verify that all addresses passed are multicast addresses. + For example, ::open does not check the send address. (It should + still work as expected - sending unicast on the route-derived + interface - but that's not the intended use.) + + The reuse_addr parameter in ::open is used for both REUSEADDR + and REUSEPORT (if implemented) option setting; should these be + distinct parameters? (They do different things!) + + - Enhanced integration with other ACE multicast classes, as needed + or desirable (see Restrictions section). + + - (?) For ::subscribe and ::unsubscribe - if successful, return the + (positive) number of subscribes/unsubscribes done (instead of '0'). + Possibly useful, as a way for the app to sense multi-interface + subs/unsubs (e.g. code that is passed an instance and does not + know what options were used when the instance was created). + + - (?) Add method ::unsubscribe(int n) to unsubscribe from most + recent n subscription(s) (including opt_nulliface_all option + support.) The implementation of group sets might obviate the + usefulness of this. + + - (?) Enhanced MT-safety and exception handling. + Don't know if any particular problems; but haven't tested + extensively. Also; might be able to make it more efficient. + In particular; if one instance is intended to be shared by multiple + threads, there is _much_ work to be done. + + - (??) Track subscription list state; i.e. recognize the state when + any ::unsubscribe emptys the subscription list. This state might + be used to re-define some parameters (especially the network + interface for sends) set with ::open and for other changes ... but + utility vs. added complexity ratio seems low. (Note that closing + the socket and reopening another can cause nasty side-effects, so + probably can't change the bound parameters, anyway.) + +Sun Jun 9 16:26:00 2002 Douglas C. Schmidt + + * ace/ATM_Acceptor.cpp: + * ace/ATM_Addr.cpp: + * ace/ATM_Connector.i: + * ace/ATM_QoS.cpp: + * ace/ATM_Stream.cpp: + * ace/CE_Screen_Output.cpp: + * ace/Configuration.cpp: + * ace/Handle_Set.i: + * ace/IOStream.cpp: + * ace/Lib_Find.cpp: + * ace/Log_Msg.cpp: + * ace/Log_Record.cpp: + * ace/MEM_Addr.cpp: + * ace/Malloc_T.i: + * ace/Memory_Pool.cpp: + * ace/Message_Queue.cpp: + * ace/Msg_WFMO_Reactor.cpp: + * ace/OS.cpp: + * ace/OS.i: + * ace/OS_String.cpp: + * ace/Process.cpp: + * ace/SOCK_Connector.i: + * ace/SPIPE_Connector.cpp: + * ace/Sock_Connect.cpp: + * ace/Synch_T.cpp: + * ace/ace_wchar.inl: Changed improper use of NULL to + 0. + +Sun Jun 9 15:33:05 2002 Jeff Parsons + + * ace/Date_Time.i: + + Fixed some typos that caused build errors. + +Sat Jun 8 14:46:19 2002 Douglas C. Schmidt + + * ace/Array_Base.h: Replaced + + #include "Global_Macros.h" + + with + + #include "ace/Global_Macros.h" + + Thanks to Bill Fulton for reporting + this. + +Fri Jun 7 19:00:31 2002 Steve Huston + + * ace/OS_String.inl (strstr): Also see: + Thu May 30 16:45:10 UTC 2002 Craig Rodrigues + + HP-UX 11.00 doesn't supply wcsstr(), only wcswcs (), so + special-case that one with #if defined (HPUX). + +Fri Jun 7 16:42:29 2002 Steve Huston + + * ace/Date_Time.i (update): Use ACE_OS::localtime_r rather than + ACE_OS::localtime to avoid MT time confusion. Thanks to Kelly + Hickel for reporting this. + +Fri Jun 7 16:29:21 2002 Steve Huston + + * ace/Acceptor.{h cpp}: + (ACE_Strategy_Acceptor) Added an open () method with signature + that matches ACE_Acceptor::open to avoid hiding the one in + ACE_Acceptor, according to Forte 6. In the new open(), however, + the ACE_Reactor* arg is required, to make it distinguishable from + the existing open(). The new open forwards everything + to the previously-existing, more full-featured open(). + + Constructors and full-featured open(), added optional reuse_addr + arg - it's passed down to the ACE_Accept_Strategy::open method. + + Removed the service_port_ member - it's not used. + + (ACE_Acceptor::open): If the reactor registration fails, close + the peer_acceptor_ object. + + * netsvcs/TS_Server_Handler.cpp (ACE_TS_Server_Acceptor::parse_args): + * netsvcs/Name_Handler.cpp (ACE_Name_Acceptor::parse_args): + * netsvcs/Server_Logging_Handler_T.cpp (ACE_Server_Logging_Acceptor_T): + Use a local variable for the -p port option; server_port_ is gone. + +Fri Jun 7 14:30:22 2002 Steve Huston + + * ace/Message_Queue.{h cpp} (ACE_Message_Queue_NT): Change + deactivate (int pulse) to deactive() and pulse() - forgot this + one in "Thu Jun 6 18:10:45 2002 Steve Huston" set of changes. + Also, corrected the way the completion routine checks state + of the queue. enqueue() will always pass ACTIVATED as the + queue state to be sure that blocks are seen when dequeued. + +Thu Jun 6 17:41:24 2002 Krishnakumar B + + * ACEXML/common/Mem_Map_Stream.h: + * ACEXML/common/Mem_Map_Stream.cpp: + * ACEXML/common/HttpCharStream.h: + * ACEXML/common/HttpCharStream.cpp: + * ACEXML/common/URL_Addr.cpp: + + Fixed the explicit template instantiation problems on Solaris. + +Thu Jun 6 18:35:49 2002 Steve Huston + + * ace/Acceptor.h (ACE_Strategy_Acceptor): Made open() virtual + since its parent class (ACE_Acceptor) ope() is also virtual. + Resolves warning from Forte 6 that open() hides its parent + class's open(). + +Thu Jun 6 18:10:45 2002 Steve Huston + + * ace/README: Removed ACE_HAS_OPTIMIZED_MESSAGE_QUEUE. No configs + use it, and it's functionality doesn't really support the + message queue deactivation/pulse semantics. + + * ace/Message_Queue.h: + * ace/Message_Queue_T.{h cpp i}: Removed the "int pulse" argument + from deactivate() and add a pulse() method. States stay the + same. + Took out all the ACE_HAS_OPTIMIZED_MESSAGE_QUEUE stuff. It's + not used any longer. + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: Use the pulse() + method instead of deactivate (1). + + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: Removed answered + questions. Removed reimplemented handle_connect() method + because the needed things are now available via the framework. + + * ace/Asynch_Acceptor.{h cpp}: + * ace/Asynch_Connector.{h cpp}: Added new hook method, + int validate_connection (const ACE_Asynch_Accept::Result&result, + const ACE_INET_Addr& remote_addr, const ACE_INET_Addr& local_addr) + that allows access to success/fail, handle, and addresses. The + validate_new_connection (const ACE_INET_Addr&) method is now + deprecated. + + * ace/WFMO_Reactor.{h cpp} (ACE_WFMO_Reactor_Notify): Add an + optional argument to ACE_WFMO_Reactor_Notify constructor. + size_t max_notifies is used to specify a limit for how many + notifications can be queued. The value is used to calculate + new high and low watermarks to the message_queue_. Default 1024. + + * ace/Activation_Queue.cpp: + * ace/Message_Block.cpp: + * ace/Message_Queue_T.cpp: Added #include "ace/Log_Msg.h" to get + the ACE_DEBUG, etc. definitions. + + * ace/Read_Buffer.cpp: Added #include for ace/Log_Msg.h and + ace/Malloc_Base.h (for ACE_Allocator). + + * ace/Log_Msg.cpp (log (ACE_Log_Record&)): If there's a + ACE_Log_Msg_Callback, do it before sending the log record + to any other logging sinks. Allows the callback to munge + the data. + +Thu Jun 06 10:50:37 2002 Ossama Othman + + * ace/Dev_Poll_Reactor.cpp (cancel_timer): + + Fixed race condition by adding an ACE_GUARD. Basically the same + fix that Doug made to the Select_Reactor below. + +Thu Jun 6 12:28:20 2002 Douglas C. Schmidt + + * ace/Select_Reactor_T.cpp: Moved the cancel_timer() methods + from the Select_Reactor_T.i file and added ACE_GUARD's around + them to ensure we're serialized correctly. Thanks to Johnny + Chen for motivating this. + +Thu Jun 6 08:24:43 2002 Jeff Parsons + + * ace/Malloc_T.h: + + Removed extra comment closer */. + +Thu Jun 6 07:11:15 2002 Douglas C. Schmidt + + * THANKS: Just added our 1,500th ACE+TAO contributor!!!!! + + * ace/Malloc_T.cpp: Clarify that the memory backing store must + reside in a directory with the appropriate visibility and + permissions. Thanks to Frank O. Flemisch + for reporting this. + +Wed Jun 5 23:06:11 UTC 2002 Don Hinton + + * ace/DLL_Manager.h: Fixed compile error. Thanks to Jai + Balasubramanian for pointing this out. + +Wed Jun 5 16:58:41 2002 Krishnakumar B + + * ACEXML/common/Mem_Map_Stream.cpp: + + Instantiate the templates needed when explicit templates are + defined. Thanks to Carlos for pointing this out. + + * ACEXML/common/HttpCharStream.cpp: + + Peek means "get the next character", not "get the character + after next". The previous change to the test caught this bug. + +Wed Jun 5 16:42:43 2002 Krishnakumar B + + * ACEXML/examples/SAXPrint/main.cpp (ACE_TMAIN): + + Modified the example to test fetching and parsing an XML URL. + This actually tests most of the functions of the new stream + class and is better than the lame test that I wrote the other + day. + +Wed Jun 5 13:54:03 UTC 2002 Don Hinton + + * ace/DLL_Manager.{h,cpp}: + * ace/Framework_Component.cpp: + + Made ACE_DLL_Manager a true singleton instead of using the + ACE_*Singleton templates, thus avoiding a problem with multiple + instantiations by broken compilers. Thanks to Chris Kohlhoff + for this suggestion. + +Wed Jun 5 08:33:25 2002 Douglas C. Schmidt + + * ace/Timer_Queue_T.h (class ACE_Timer_Queue_T): Clarify that the + second calculate_timeout() method doesn't use a lock. Thanks to + Johnny Chen for motivating this. + + * ace/Process_Manager.cpp (handle_signal): Added a check for + i == -1. Thanks to Dimitrije Jankovic + for reporting this and providing a fix! + +Tue Jun 04 16:47:27 2002 Ossama Othman + + * ace/Service_Config.h: + + No need to include "ace/DLL.h". Forward declaring ACE_DLL is + enough. + + * ace/Service_Config.cpp: + + Include "ace/DLL.h" to pull in ACE_DLL class declaration. + +Tue Jun 04 16:34:18 2002 Ossama Othman + + * ace/Service_Config.cpp: + + Removed duplicate "ace/Auto_Ptr.h" include. + + * ace/Svc_Conf_Lexer_Guard.cpp: + + Moved Svc_Conf.h include within the ACE_USES_CLASSIC_SVC_CONF + preprocessor block. It isn't needed for the XML-based Service + Configurator. + +Tue Jun 04 16:02:11 2002 Krishnakumar B + + * ACEXML/common/HttpCharStream.h: + * ACEXML/common/HttpCharStream.cpp: + * ACEXML/common/Filecharstream.h: + * ACEXML/common/Filecharstream.cpp: + + Removed the constructor which accepted a string containing + either a filename or a URL from these files. Problem was it was + relying on calling open to do the work, but if open fails there + was no way to report the error without throwing exceptions. So + don't allow people to use this constructor and always insist on + using open. + + * ACEXML/common/Mem_Map_Stream.cpp: + * ACEXML/common/URL_Addr.h: + * ACEXML/common/URL_Addr.cpp: + * ACEXML/common/XML_Codecs.cpp: + * tests/Codecs_Test.cpp: + + Other miscellaneous fixes including using + ACE_Auto_Basic_Array_Ptr instead of ACE_Auto_Array_Ptr. + + * ACEXML/common/Makefile.bor: + * ACEXML/tests/Makefile.bor: + + Added new files. + + * ACEXML/tests/HttpCharStream_Test.cpp: + + Cosmetic fixes. + +Tue Jun 04 14:18:56 2002 Nanbor Wang + + * ACEXML/tests/HttpCharStream_Test.dsp: + * ACEXML/tests/Tests.dsw: Added a new test project. + +Tue Jun 04 13:45:39 2002 Nanbor Wang + + * ACEXML/common/Mem_Map_Stream.h: Fixed typedefs of template + classes. + + * ACEXML/common/XML_Common.dsp: Added new files to project files. + +Tue Jun 4 12:35:12 2002 Jeff Parsons + + * ace/Message_Queue*: Moved the state_ member and the accessor method + to the non-template base class to get rid of the Win32 build + bustage, since ACE_Message_Queue_NT is not a template class, and does + not inherit from ACE_Message_Queue<>. + +Tue Jun 4 10:03:19 2002 Douglas C. Schmidt + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: Reverted the thr_count() + stuff since we need to reactivate the queue now. + + * ace/Message_Queue*: Changed all the message queue implementations to + use the new ACTIVATED/DEACTIVATED/PULSED implementation of + deactivate()/activate(). + +Tue Jun 4 09:48:34 2002 Jeff Parsons + + * ace/Message_Queue.h: + * ace/Message_Queue_T.h: + + Fixed the signatures of deactivate and deactivate_i to make the + appearance of the default parameter 'int pulse' consistent. + +Tue Jun 4 06:46:27 2002 Douglas C. Schmidt + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: Added the + "1" parameter to the call to deactivate() method to simply + "pulse" the queue. Also, changed the AC_Output_Handler::open() + method to check if thr_count() == 0 when determining if to + activate the service handler. + + * ace/Message_Queue_T.h: Added new pulse parameter to + ACE_Message_Queue::deactivate() so that callers can decide + whether to change the state of the queue to be "deactivated" or + just to pulse waiting threads to wake up and continue their + processing. This simplies one of the examples in C++NPv2. + +Mon Jun 3 16:11:12 2002 Krishnakumar B + + * ACEXML/common/FileCharStream.cpp: + + Fixed a memory leak. + + * ACEXML/common/HttpCharStream.cpp: + * ACEXML/common/HttpCharStream.cpp: + * ACEXML/common/HttpCharStream.h: + * ACEXML/common/Makefile: + * ACEXML/common/Mem_Map_Stream.cpp: + * ACEXML/common/Mem_Map_Stream.h: + * ACEXML/common/URL_Addr.cpp: + * ACEXML/common/URL_Addr.h: + + Functionality needed by the parser to fetch URI's (DTDs etc) + from the web. This is a simple http_get implementation and + doesn't work for https URLs (which can be fixed easily provided + there is interest). + + * ACEXML/common/Parser.cpp: + + Fixed a typo. + + * ACEXML/tests/HttpCharStream_Test.cpp: + * ACEXML/tests/Makefile: + + New regression test to test fetching of URI's from the web by + the parser. + + +Mon Jun 3 06:21:57 2002 Douglas C. Schmidt + + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: Removed + unnecessary 'return;' calls. + +Mon Jun 3 07:23:56 UTC 2002 Don Hinton + + * Framework_Component_DLL.bor: Fixed typo. + +Sun Jun 2 22:52:23 UTC 2002 Craig Rodrigues + + [Bug 1208] + * ace/README: Document new ACE_HAS_3_PARAM_WCSTOK macro. + * ace/OS_String.inl (strtok_r): Check ACE_HAS_3_PARAM_WCSTOK macro. + + * ace/config-aix-4.x.h: + * ace/config-linux-common.h: + * ace/config-sunos5.7.h: + Define ACE_HAS_3_PARAM_WCSTOK on these platforms after doing + the appropriate checks. + +Sun Jun 2 15:34:41 UTC 2002 Don Hinton + + * ace/DLL.cpp: + + Test for null dll_name_ before calling open() in the copy ctor, since + open would flag it as an error. Improved error messages. + + * ace/DLL_Manager.{h,cpp}: + * ace/Framework_Component.cpp: + + Changed ACE_DLL_Manager to use ACE_Unmanaged_Singleton so that it can be + explicitely closed by ACE_Framework_Repository after ACE_Service_Config + is closed. Improved error messages. Thanks to Steve Huston for finding + this. + +Sun Jun 2 09:03:06 2002 Douglas C. Schmidt + + * ace/Select_Reactor_Base.cpp: Delete temp buffers + if enqueue_head() fails in the ACE_Select_Reactor_Notify open() + and notify() methods. Thanks to Chris Uzdavinis + for reporting this. + +Sat Jun 1 22:42:17 2002 Steve Huston + + * examples/C++NPv2/AC_CLD.mak: + * examples/C++NPv2/TPCLS.mak: Added "ssl=1" to properly include + the SSL stuff in the build; these examples use SSL. + + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: + * examples/C++NPv2/AIO_CLD_export.h: + * examples/C++NPv2/AIO_CLD.mak: Asynch I/O example from Chapter 8. + +Sat Jun 1 15:38:40 2002 Steve Huston + + * ace/Asynch_Acceptor.cpp (open): bind_port is in ACE_Sock_Connect, + not ACE. + Added #include "ace/SOCK_Stream.h" that class is also used, and + #include "ace/Log_Msg.h" to get the ACE_ERROR macros. + + * ace/Asynch_Connector.cpp (handle_connect): clr_flags() is in + ACE_Flag_Manip, not ACE. + Added #include "ace/Log_Msg.h" to get ACE_ERROR macros. + +Fri May 31 13:35:41 2002 Steve Huston + + * examples/C++NPv2/TPC_Logging_Server.{h cpp}: + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: + Primarily formatting changes to match the book. + + * examples/C++NPv2/SLDex.mak: Removed Logging_Acceptor_Ex from + files list; it's only a header file. + +Fri May 31 11:07:25 2002 Douglas C. Schmidt + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: Modified this + so use pointers rather than references to simplify things in + the book. + +Thu May 30 23:03:38 2002 Steve Huston + + * examples/C++NPv2/SR_Configurable_Logging_Server.{cpp mak}: + * examples/C++NPv2/Makefile: Added new ACE_Select_Reactor-based + configurable logging server. + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: Code changes + to match book and fix reconnect problems. + +Thu May 30 18:02:35 2002 Douglas C. Schmidt + + * ace/OS.h: Changed EACESS to EACCES to be POSIX compliant. Thanks + to Eric Eide for (re)reporting this! + +Thu May 30 10:01:12 2002 Ossama Othman + + * ace/UPIPE_Stream.h (ACE_UPIPE_Stream): + + Added missing PEER_ADDR trait. + +Thu May 30 16:45:10 UTC 2002 Craig Rodrigues + + [Bug 1208] + * ace/OS_String.inl (strstr): Remove wcswcs(), use wcsstr() + instead. + +Thu May 30 9:15:19 2002 Douglas C. Schmidt + + Thanks to Edan Ayal and Alex Libman + for the following fixes. + + * ACE_WIN32_Asynch_Read_Stream_Result::complete () + ACE_WIN32_Asynch_Write_Stream_Result::complete () + ACE_WIN32_Asynch_Write_Dgram_Result::complete + ACE_WIN32_Asynch_Read_Dgram_Result::complete improved + readability and logic + + * ACE_WIN32_Asynch_Read_File_Result::complete () + ACE_WIN32_Asynch_Write_File_Result::complete () fixed + errors,improved readability and logic + + * ACE_WIN32_Asynch_Read_Stream::read () + ACE_WIN32_Asynch_Read_File::read () + ACE_POSIX_Asynch_Read_Stream::read () + ACE_POSIX_Asynch_Read_File::read () + Added check for enough space in message block + bytes_to_read <= mb->space() + + * ACE_WIN32_Asynch_Write_Stream::write () + ACE_WIN32_Asynch_Write_File::write () + ACE_POSIX_Asynch_Write_Stream::write () + ACE_POSIX_Asynch_Write_File::write () + Added check for correct length of message block + bytes_to_write <= mb->length() + + * ACE_WIN32_Asynch_Read_Stream::readv () + ACE_WIN32_Asynch_Read_File::readv () + ACE_WIN32_Asynch_Read_Dgram::recv Added checks for: never read + more bytes_to_read bytes; correct using of buffers - message + blocks + + * ACE_POSIX_Asynch_Write_Stream::writev () + ACE_POSIX_Asynch_Write_File::writev () + ACE_WIN32_Asynch_Write_Dgram::send Added checks for: never write + more bytes_to_write bytes; correct using of buffers - message + blocks improved readability and logic + +Thu May 30 08:48:19 2002 Douglas C. Schmidt + + * ace/Configuration_Import_Export.cpp (squish): + Replaced (*cp == ' ') || (*cp == '\t') || (*cp == '\n') || (*cp + == '\r')) with isspace (*cp). Thanks to Gonzalo A. Diethelm + and Dave Steele + for this suggestion. + +Thu May 30 11:53:05 UTC 2002 Don Hinton + + * ace/DLL_Manager.cpp: Fixed Fuzz errors. Thanks to Johnny + Willemsen for pointing this out. + +Thu May 30 11:40:45 UTC 2002 Don Hinton + + * tests/Framework_Component_DLL.bor: + + Fixed cut-n-paste error that caused the symbols not to be + exported. Should fix the Borland builds. + +Thu May 30 10:18:27 UTC 2002 Don Hinton + + * tests/Framework_Component_Test.cpp: + + Modified test to use the new macro definitions and method names. + + * tests/Framework_Component_DLL.cpp: + + Added ACE_DLL_UNLOAD_POLICY declaration specifying LAZY unloading. + Changed an errant ACE_LIB_TEXT macro to ACE_TEXT. + + * ace/config-all.h: + + Added the dll unloading policies mentioned below as well as an + ACE_DLL_UNLOAD_POLICY macro dlls can use to set/export their own + policy. If no policy is exported, the current per-process policy + is used. + + * ace/DLL_Manager.{h,cpp}: + + Renamed unload_strategy to unload_policy and moved the policy + definitions to config-all.h so that they can be used without + including DLL_Manager.h (which includes OS.h, etc...). + + Refactored the unloading policies and implemented the per-dll + case by probing the dll for a "_get_dll_unload_policy" function + that returns the dll specific policy--if the dll chose to + implement it. + + Added missing template instantiations. + + * ace/DLL.{h,cpp} (symbol): + * ace/DLL_Manager.{h,cpp} (symbol): + + Added additional default parameter, ignore_errors, so the dll + can be probed for symbols without sending error messages to + the log. + +Thu May 30 08:53:12 2002 Johnny Willemsen + + * tests/Codecs_Test.cpp: + Removed not needed ; after the ACE_RCSID. This will fix a warning in + the Tru64 build + + * tests/Framework_Component_DLL.cpp: + Corrected playing of ;. This will fix a warning in the Tru64 build. + +Thu May 30 02:27:29 2002 Steve Huston + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: + * examples/C++NPv2/AC_CLD_export.h: + * examples/C++NPv2/AC_CLD.mak: + * examples/C++NPv2/Makefile: Added remaining Chapter 7 example. + +Thu May 30 08:04:12 2002 Johnny Willemsen in comment to \ because the

    is a commend + that is recognized by doxygen. + +Thu May 30 07:46:12 2002 Johnny Willemsen + + * ace/Acceptor.h (ACE_Acceptor, ACE_Oneshot_Acceptor): + * ace/Connector.h (ACE_Connector): + + Use ACE_TYPENAME where appropriate in newly added traits to + correct build problems in g++ 2.95.x or better builds. + +Wed May 29 22:13:19 2002 Ossama Othman + + * ace/Acceptor.h (ACE_Acceptor, ACE_Oneshot_Acceptor): + * ace/Connector.h (ACE_Connector): + * ace/Svc_Handler.h (ACE_Svc_Handler): + + Added STL-style traits that may be useful when subclassing these + classes. + +Wed May 29 21:55:49 2002 Steve Huston + + * examples/C++NPv2/TPC_Logging_Server.{h cpp}: + * examples/C++NPv2/TPCLS_export.h: + * examples/C++NPv2/TPCLS.mak: + * examples/C++NPv2/Makefile: Added Chapter 7 examples. + + * ace/Acceptor.h (ACE_Acceptor::open): Made open() virtual. + +Thu May 30 01:38:51 UTC 2002 Craig Rodrigues + + * ace/OS_String.inl: Revert: + Wed May 29 09:38:53 2002 Ossama Othman + The intended fix is satisfactorily addressed by: + Tue May 28 18:35:46 UTC 2002 Craig Rodrigues + +Wed May 29 16:36:42 2002 Ossama Othman + + * ace/CDR_Stream.cpp (write_wchar, read_wchar, skip_wchar): + * ace/CDR_Stream.i (write_wchar_array, read_wchar_array): + + Take into account the actual size of the ACE_CDR::WChar type + instead of assuming that it is always 16 bits long. + +Wed May 29 20:16:48 UTC 2002 Don Hinton + + * tests/Framework_Component_Test.cpp: + + Changed ACE_Service_Config::open() to call the + ignore_default_svc_conf_file flag since all the directives + are passed directly without using a config file anyway. + + * ACEXML/apps/svcconf/Svcconf_Handler.{h,cpp}: + + Removed handle_ member variable and pass the local svc_dll + object instead of handle_ to ACE_Service_Config::create_service_type() + in accordance with changes below to ACE_DLL. + +Wed May 29 12:35:21 2002 Ossama Othman + + * ace/OS.h: + + If ACE_HAS_WCHAR is defined define the ACE_OS::WChar type to be + of type wchar_t. Otherwise, define it to be ACE_UINT16 (the + previous default). Addresses some wide character CDR and CORBA + C++ mapping issues. Thanks to David Smith + for reporting this. + +Wed May 29 09:46:56 2002 Ossama Othman + + * ace/Message_Queue.h: + + Include "ace/Synch.h" to pull in ACE_Thread_Mutex class + declaration. Thanks to Marek Maleta + for reporting the problem. + + * THANKS: + + Added Marek to the Hall of Fame. + +Wed May 29 09:38:53 2002 Ossama Othman + + * ace/OS_String.inl (strstr): + + Only use wcswcs() if _XOPEN_SOURCE is defined. In any case, the + Single UNIX Specification version 2 strongly encourages use of + wcsstr(). Fixes a compile-time error on glibc 2.x platforms. + + (strtok_r): + + Glibc has the 3 argument version of wcstok(). Use it instead. + Fixes a compile-time error on glibc 2.x platforms. + +Wed May 29 15:52:52 UTC 2002 Don Hinton + + * ace/DLL_Manager.{h,cpp}: + + Cleaned some problems with auto_ptr usage and added symbol + name to the debug message if the symbol isn't found--not + all systems seem to give you the name of the unfound symbol. + +Wed May 29 15:06:32 UTC 2002 Craig Rodrigues + + * bin/nightlybuilds/builds.lst: Move Debian_NoInterceptors to new + scoreboard. + +Wed May 29 10:29:10 2002 Steve Huston + + * examples/C++NPv2/Client_Logging_Daemon.cpp: Use a safer scheme + to clean up sent blocks; compile the INET_Addr stuff clean. + +Wed May 29 12:54:23 2002 Johnny Willemsen + + * ace/DLL_Manager.cpp: + * ace/Framework_Component.cpp: + Fixed msvc wchar compile errors + +Wed May 29 08:41:12 2002 Johnny Willemsen + + * ace/Codecs.h: + Removed the ; after the ACE_UNIMPLEMENTED_FUNC, the BCB compiler has + problems with it. + + * tests/Makefile.bor: + Added the new Codecs_Test. + +Tue May 28 19:40:44 2002 Steve Huston + + * examples/C++NPv2/Client_Logging_Daemon.cpp: + * examples/C++NPv2/CLD_export.h: + * examples/C++NPv2/CLD.mak: + * examples/C++NPv2/TP_Logging_Server.{h cpp}: + * examples/C++NPv2/TPLS_export.h: + * examples/C++NPv2/TPLS.mak: + * examples/C++NPv2/Makefile: Added new client logging daemon + and thread pool logging server examples from chapter 6. + +Wed May 29 02:09:32 UTC 2002 Craig Rodrigues + + * bin/nightlybuilds/builds.lst: Move RedHat_7.1_Full and + RedHat_7.1_NO_AMI_Messaging builds to new scoreboard. + +Tue May 28 19:20:58 2002 Krishnakumar B + + * ace/Read_Buffer.cpp (rec_read): + + It seems that my changes trash the files written by test + programs. I need to write a test to check out what's happening + before changing the CVS head. Reverting my change of Tue May 28 + 17:00:21 2002 Krishnakumar B . + +Tue May 28 23:13:45 UTC 2002 Don Hinton + + * tests/Framework_Component_DLL.cpp: + + Added missing ";" to end of template instantiation statements. + +Tue May 28 22:34:03 UTC 2002 Don Hinton + + * ace/DLL.cpp: Added missing ACE_const_cast(). + +Tue May 28 17:00:21 2002 Krishnakumar B + + * ace/Read_Buffer.cpp (rec_read): + + Fixed stupid thinko when decrementing slot. Tell myself to think + twice to about using ?:. My previous change also ate the + character when only one character is in a file. ACE_Read_Buffer + is crying for a test under $ACE_ROOT/tests which tests variable + sized buffers with sizes of 1, < BUFSIZ, BUFSIZ, > BUFSIZ + instead of under examples/misc/test_tead_buffer.cpp. Will try to + get in one. + + * docs/ACE-guidelines.html: + + Update guidelines to be careful about using ?: in some + situations. Thanks to Doug for suggesting this. + +Tue May 28 21:54:44 UTC 2002 Craig Rodrigues + + * bin/nightlybuilds/builds.lst: Move Debian_NoInline and + Debian_GCC_3.0.4 builds to new scoreboard. + +Tue May 28 21:32:42 UTC 2002 Don Hinton + + * ace/DLL.cpp: + * ace/DLL_Manager.cpp: + * ace/Framework_Component.cpp: + * ace/Framework_Component_T.cpp: + + Fixed Fuzz errors. + +Tue May 28 18:35:46 UTC 2002 Craig Rodrigues + + [Bug 1208] + * ace/OS_String.cpp (strok_r_emulation): Call ACE_OS_String::strtok + instead of ::wcstok. + * ace/OS_String.inl (strtok): If ACE_HAS_XPG4_MULTIBYTE_CHAR is defined, + call 3 parameter version of wcstok, else call 2 parameter version. + * ace/config-linux-common.h: Only define ACE_LACKS_WCSTOK and + ACE_LACKS_WCSDUP_PROTOTYPE for glibc versions less than 2. Define + ACE_HAS_XPG4_MULTIBYTE_CHAR for glibc 2 and higher. + * tests/OS_Test.cpp: Add test for wchar_t version of strtok. + +Tue May 28 15:02:01 UTC 2002 Don Hinton + + * tests/tests.dsw: + * tests/Framework_Component_DLL.dsp: Added new dsp. + +Tue May 28 09:35:17 2002 Jeff Parsons + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + + Added DLL_Manager.* to these projects. + +Tue May 28 10:47:50 UTC 2002 Don Hinton + + * tests/Logging_Strategy_Test.cpp: + + Fixed typo, ACE_AS_* > ACE_HAS_*. + + * tests/Makefile.Framework_Component_DLL: + * tests/Makefile: + * tests/Makefile.bor: + + Added/modified Makefiles to add new test file, and updated + dependancies. + + * tests/Framework_Component_Test.{h,cpp}: + * tests/Framework_Component_DLL.{h,cpp}: Added. + * tests/Framework_Component_DLL_export.h: Added. + + Modified to test to exercise the new ACE_DLL_Singleton and + ACE_DLL* classed in concert with the Service Config framework + and new Framework Component mechanisms. + + * tests/DLL_Test.{h,cpp}: + + Modified test to fully test all the features of the new + ACE_DLL, ACE_DLL_Handle, and ACE_DLL_Manager classes. + + * ace/Makefile: + * ace/Makefile.bor: + + Added DLL_Manager and updated dependancies. + + * bin/generate_export_file.pl: + + Added generation of library specific TRACE macros in + terms of the new ACE_TRACE_IMPL macro below. + + * ace/Global_Macros.h: + + Added new macro, ACE_TRACE_IMPL and implemented ACE_TRACE + in terms of it if tracing is enabled. This allows you + to turn tracing on for a particular cpp by just undef'ing + ACE_TRACE and redefining it as ACE_TRACE_IMPL. + + * ace/Parse_Node.{h,cpp}: + + Removed handle() method and added a dll() method. Also, + since ACE_DLL_Handle::symbol() calls ACE::ldname() internally, + changed the ACE::ldname() calls in the ctors for + ACE_Object_node and ACE_Function_Node to ACE::strnew(). + + * ace/Svc_Conf_y.cpp: + + Changed call to ACE_Location_Node::handle() to ACE_Location_Node::dll() + in ACE_Service_Type::ctor. + + * ace/Service_Object.{h,cpp,i}: + + Modified ACE_Service_Type to maintain an ACE_DLL member variable + instead of an ACE_SHLIB_HANDLE, and changed ctor accordingly. + Removed call to ACE_OS::dlclose() from dtor. Removed handle() + methods. + + * ace/Object_Manager.cpp: + * ace/Service_Config.cpp: + + The Object Manager is now always responsible for cleaning up + the ACE_Framework_Repository, but only after the Service + Config framework has been cleanup. ACE_Service_Config no longer + knows anything about ACE_Framework_Repository. + + * ace/Service_Config.cpp: + + Changed create_service_type() to take an ACE_DLL& instead of + an ACE_SHLIB_HANDLE. Removed unneeded call to ACE::ldname(). + + * ace/DLL_Manager.{h,cpp}: Added. + * ace/DLL.{h,cpp}: + + Added new classes, ACE_DLL_Manager_Ex and ACE_DLL_Handle, and + and moved all functionalility from ACE_DLL to the new classes. + ACE_DLL maintains the same interface and semantics but defers + all calls to the new classes. ACE_DLL_Manager is a singleton + that manages the lifetimes of instances of refcounted + ACE_DLL_Handle objects that represent the actual dlls. The + following unloading strategies are available: per-process/dll, + eager/lazy. + + Added copy ctor to ACE_DLL so that the get/set_handle() methods + aren't needed--there use in the Service Config framework can + complicate orderly destruction of singletons based on + ACE_DLL_Singleton. + + Added call to ACE::ldname() to the symbol() method so that + the caller no longer needs to do it themselves. + + * ace/Singleton.{h,cpp,i}: + + Added new singleton template, ACE_DLL_Singleton, that registers + itself with the ACE_Framework_Repository so that it can be + destroyed when the dll with which it is associated is unloaded. + + + * ace/Proactor.{h,cpp}: + * ace/Reactor.{h,cpp}: + + Added name() method as needed by changes below, and implemented + dll_name() method to return "ACE". + + * ace/Framework_Component.{h,cpp,inl}: + * ace/Framework_Component_T.{h,cpp}: + + Enhanced the Framework Component "framework" ;-) to allow the + removal of registered components, either individually by name or + as a group, based on the dll that registered them. + +Mon May 27 15:59:17 2002 Nanbor Wang + + * ACEXML/common/XML_Codecs.h: + * ACEXML/common/XML_Codecs.cpp: Fixed VC warnings. + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Added Codecs.*. + + * tests/tests.dsw: + * tests/Codecs_Test.dsp: Added a new test. + + * ACEXML/common/XML_Common.dsp: Added XML_Codecs.*. + +Mon May 27 15:47:44 2002 Steve Huston + + * ace/OS.h: Add new service-related macro, ACE_Local_Service_Export. + This is intended for use in the ACE_FACTORY_DEFINE macro, for + static services whose factory functions need not be exported. + To use this when defining a factory function, do + ACE_FACTORY_DEFINE(ACE_Local_Service, StaticSvcClass) + + * examples/C++NPv2/Service_Reporter.cpp: Use ACE_Local_Service + in the ACE_FACTORY_DEFINE for the Service_Reporter service. + +Mon May 27 15:21:57 2002 Krishnakumar B + + * ace/Codecs.h: + * ace/Codecs.cpp: + + New files meant to hold all encoding/decoding classes/functions. + Currently implements Base 64 encoding. + + * ACEXML/common/XML_Codecs.h: + * ACEXML/common/XML_Codecs.cpp: + * ACEXML/common/Makeile: + + Same guy under a different hood. + + * ace/Basic_Types.h: + + Added definition of ACE_Byte. + + * tests/Codecs_Test.cpp: + * tests/run_test.lst: + + Regression test which tests the encoding/decoding functionality + added above. + + * tests/Makefile: + * tests/RMCast/Makefile: + * ace/Makefile: + * ace/RMCast/Makefile: + + Updated dependencies. + + * ace/Read_Buffer.cpp: + + Decrement the extra increment of slot. This is not completely + correct, as we should abstract the handling of end-of-line across + Unix and Windows and then use it here and all the places which + read stuff from files. See Fri May 24 10:42:25 2002 Douglas C. + Schmidt for another manifestation + of the same bug. + + * include/makeinclude/rules.local.GNU: + + Remove files named core.[0-9]+. Newer kernels dump a core file + associated with each process separately. + +Mon May 27 15:04:31 2002 Steve Huston + + * ace/OS.h (ACE_FACTORY_DEFINE): Add the export declaration to + the generated factory, removing the need to also use the + ACE_FACTORY_DECLARE in simple (most common) situations. + + * examples/C++NPv2/SLD.cpp: + * examples/C++NPv2/SLDex.cpp: + * examples/C++NPv2/Server_Shutdown.cpp: Remove ACE_FACTORY_DECLARE. + It's not needed in these situations. + +Mon May 27 07:39:41 2002 Douglas C. Schmidt + + * ace/Configuration_Import_Export.cpp (squish): Added a + check for '\r' to ensure that empty lines are handled properly. + Thanks to Vladimir Chovanec for + reporting this. + +Mon May 27 09:20:12 2002 Johnny Willemsen + + * bin/generate_doxygen.pl: + Added tao_costime to the list of doxygen files that must be run + + * etc/tao_costime.doxygen: + Created doxygen config file for this TAO service + + * html/index.html: + Added link for the TAO CosTime service doxygen documentation + +Mon May 27 08:18:12 2002 Johnny Willemsen + + * ACEXML/common/Attributes_Def_Builder.h: + * ACEXML/common/DTD_Manager.h: + * ACEXML/common/Element_Def_Builder.h: + * ACEXML/common/Validator.h: + * ACEXML/parser/debug_validator/Debug_Attributes_Builder.h: + * ACEXML/parser/debug_validator/Debug_Element_Builder.h: + * ACEXML/parser/debug_validator/Element_Tree.h: + Corrected doxygen commands, no space between @ and the command is + allowed. + + * ace/Active_Map_Manager.h: + * ace/Arg_Shifter.h: + * ace/Based_Pointer_Repository.cpp: + * ace/CDR_Stream.h: + * ace/Caching_Utility_T.h: + * ace/Configuration.h: + * ace/DEV_IO.h: + * ace/Dev_Poll_Reactor.h: + * ace/Dirent_Selector.h: + * ace/Env_Value_T.h: + * ace/FILE.h: + * ace/Get_Opt.h: + * ace/Hashable.h: + * ace/IO_Cntl_Msg.cpp: + * ace/Init_ACE.h: + * ace/Local_Tokens.h: + * ace/Log_Msg.cpp: + * ace/Log_Msg.h: + * ace/Memory_Pool.h: + * ace/Message_Block.h: + * ace/OS.cpp: + * ace/OS.h: + * ace/Object_Manager.cpp: + * ace/POSIX_Asynch_IO.cpp: + * ace/POSIX_Asynch_IO.h: + * ace/POSIX_Proactor.cpp: + * ace/POSIX_Proactor.h: + * ace/Pair_T.h: + * ace/Proactor.cpp: + * ace/Process.h: + * ace/Reactor_Impl.h: + * ace/Remote_Tokens.h: + * ace/SV_Message.h: + * ace/Select_Reactor_T.h: + * ace/Svc_Conf.h: + * ace/System_Time.h: + * ace/TLI_Stream.h: + * ace/TP_Reactor.cpp: + * ace/TP_Reactor.h: + * ace/Task.h: + * ace/Task_T.h: + * ace/Thread.h: + * ace/Timer_Wheel_T.cpp: + * ace/Token.h: + * ace/Token_Manager.h: + * ace/WIN32_Proactor.cpp: + Improved the doxygen documenation by converting old style documentation + to doxygen style. Also corrected small typing errors, start sentences with + capital letters and corrected incorrected doxygen commands. + + * ace/POSIX_Proactor.cpp: + Corrected the signature of handle_events from unsigned long to u_long to + match the declaration of this method. This was found using the warning file + of the doxygen generation. + + * ace/Future.h: + Corrected brief documentation. Brief documentation ends when a dot is found + followed by a space of a newline. We had "i.e. " in the brief documenation + and now this documentation ended after the second dot, changed it to + "i.e.,". This fixed [Bug 892]. + + * ace/config-doxygen.h: + Added ACE_HAS_TOKENS_LIBRARY to generate ACE token library documentation + + * bin/generate_doxygen.pl: + Added tao_cosnaming to the list of doxygen files that must be run + + * etc/tao_cosnaming.doxygen: + Created doxygen config file for this TAO service + + * etc/tao_cosnotification.doxygen: + Corrected tagfile name and directory that is generated + + * html/index.html: + Added link for the TAO Naming service doxygen documentation + +Sun May 26 21:48:49 2002 Steve Huston + + * examples/C++NPv2/Reactor_Logging_Server_Adapter.cpp: Added + include guard. + + * examples/C++NPv2/SLD.dsp: Define SLD_BUILD_DLL, not ACE_BUILD_DLL, + to set up the export stuff correctly. + + * examples/C++NPv2/SLDex.dsp: + * examples/C++NPV2/examples.dsw: Add new project for second part + of chap 5 example. + + * examples/C++NPv2/SLD.cpp: + * examples/C++NPv2/SLDex.cpp: + * examples/C++NPv2/Server_Shutdown.cpp: Add ACE_FACTORY_DECLARE to + get correct export declaration for factory. + +Sun May 26 13:20:15 2002 Douglas C. Schmidt + + * ace/config-macosx.h: Added #define ACE_LACKS_SYSTIME_H. + Thanks to Dennis C. De Mars for + recommending this. + +Sat May 25 17:45:21 2002 Nanbor Wang + + * tests/Proactor_Scatter_Gather_Test.dsp: + * tests/tests.dsw: Added Proactor_Scatter_Gather_Test. + +Sat May 25 16:42:46 2002 Douglas C. Schmidt + + * tests/run_test.lst, + * tests/Makefile.bor, + * tests/Makefile: Added Proactor_Scatter_Gather_Test. + +Sat May 25 16:30:00 2002 Edan Ayal + + * tests/Proactor_Scatter_Gather_Test.cpp: + Added a new test for the asynch scatter/gather I/O + functionality. It is currently supported (as the feature itself) + only under Win32 - actually NT4 SP2 and above. The test runs in + a single thread, and involves a single Sender, two Receivers and + a single Writer. The Sender async-reads (scattered) from a file + into chunks of . It async-sends (gathered) the odd + chunks to the first receiver over a stream, and the even chunks + to the second receiver over a different stream. The receivers + async-read (scattered) from the socket streams into chunks in + size of , and convey the data to the Writer. The + Writer reconstructs the file using async-write + (gathered). Finally, the reconstructed file is compared to the + original file to determine test success. The test therefore + covers both async scatter/gather stream I/O and async + scatter/gather file I/O. + +Sat May 25 14:52:06 2002 Douglas C. Schmidt + + * ace/Strategies_T.cpp (make_svc_handler): Fixed a typo where + dll_name_ was misspelled as shared_library_. Thanks to Nathan + Krasney for reporting this. + +Fri May 24 10:42:25 2002 Douglas C. Schmidt + + * ace/Configuration_Import_Export.cpp (squish): Added a + check for '\n' to ensure that empty lines are handled properly. + Thanks to Vladimir Chovanec for + reporting this. + +Sat May 25 15:09:42 2002 Steve Huston + + * examples/C++NPv2/SLDex.{cpp mak}: + * examples/C++NPv2/Server_Shutdown.cpp: + * examples/C++NPv2/SLDEX_export.h: + * examples/C++NPv2/Makefile: Add new dll for second part of + Chapter 5 dynamic (re)config example. + +Sat May 25 11:47:33 2002 Steve Huston + + * examples/C++NPv2/Reactor_Logging_Server_Adapter.cpp (init): + Add wide->narrow char conversion to get ACE_TCHAR into + a char-based method. + +Sat May 25 01:15:02 UTC 2002 Craig Rodrigues + + * bin/nightlybuilds/builds.lst: Move Debian_Minimum bulid to + new scoreboard. + +Fri May 24 23:52:39 2002 Steve Huston + + * examples/C++NPv2/Configurable_Logging_Server.dsp: + * examples/C++NPv2/SLD.dsp: + * examples/C++NPv2/examples.dsw: Added new projects for chapter + 5's configurable logging server. + +Fri May 24 20:51:25 2002 Christopher Kohlhoff + + * ace/Log_Msg_NT_Event_Log.cpp (open): + Need to use logger_key, when it is supplied, to register the + event source with the system. + + * ace/Log_Msg_NT_Event_Log.cpp (log): + Replace all newlines in the message with the CR-LF character + sequence so that line breaks are correctly displayed in the + event viewer. + +Fri May 24 20:18:41 2002 Steve Huston + + * examples/C++NPv2/Reactor_Logging_Server.cpp: + * examples/C++NPv2/Reactor_Logging_Server_T.cpp: Move all the + method implementations for Reactor_Logging_Server<> into + Reactor_Logging_Server_T.cpp so they're reuseable in a + shared library. + + * examples/C++NPv2/Reactor_Logging_Server.h: Add template + implementation reference plumbing for compilers. + + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: + * examples/C++NPv2/TP_Reactor_Logging_Server.cpp: + * examples/C++NPv2/WFMO_Reactor_Logging_Server.cpp: Remove the + (duplicate) definitions of Reactor_Logging_Server<>; the + compiler now generates this using the code in + Reactor_Logging_Server_T.cpp. + + * examples/C++NPv2/svc.conf: + * examples/C++NPv2/SLD.cpp: + * examples/C++NPv2/SLD_export.h: + * examples/C++NPv2/SLD.mak: Code and Makefile for the dynamic + logging service in chapter 5. + + * examples/C++NPv2/Makefile: Added SLD.mak. + + * examples/C++NPv2/Logging_Acceptor.h: Added a PEER_ADDR trait. + The Reactor_Logging_Server_Adapter's use of Logging_Acceptor + needs the trait. + + * examples/C++NPv2/Service_Reporter.h: Make ctor public so + the service factory can instantiate this class. + +Sat May 25 00:20:50 UTC 2002 Craig Rodrigues + + * bin/nightlybuilds/builds.lst: Move Debian_WChar to new scoreboard. + +Fri May 24 10:18:39 2002 Steve Huston + + * bin/auto_compile: Don't bail out if the only CVS conflict is + in ChangeLog or THANKS. + + * ace/CDR_Stream.h (ACE_InputCDR): Added comments clarifying + the behavior of the ctor that takes a const ACE_Message_Block *. + Thanks to Alexander Maack for motivating this. + + * examples/C++NPv2/display_logfile.cpp (svc): Fix memory leak + (thanks to Alexander Maack for reporting this) and don't lose + the host name in the data if demarshaling has to be aborted to + go read more data from the file. + + * examples/C++NPv2/Logging_Acceptor_Ex.h: + * examples/C++NPv2/Logging_Event_Handler_Ex.h: Remove trailing ';' + on inlined methods; Changed to match book. + + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: Changed to + match book. + + * examples/C++NPv2/Reactor_Logging_Server_Adapter.{h cpp}: + * examples/C++NPv2/Service_Reporter.{h cpp}: + * examples/C++NPv2/Configurable_Logging_Server.{cpp mak}: + Example code from Chapter 5 of C++NPv2 (Service Configurator). + + * examples/C++NPv2/Makefile: Added new examples. + + * THANKS: Added Alexander Maack to the Hall of Fame. + + * ace/Reactor.h: Mark run[_alertable]_event_loop, end_event_loop, + event_loop_done, and reset_event_loop static methods deprecated + in favor of calling the non-static methods on + ACE_Reactor::instance(). Thanks to Don Hinton for motivating this. + + * ace/String_Base.h (rep): Added note that directs the caller to free + the returned memory. + +Mon May 13 19:15:49 2002 Steve Huston + + * ace/Service_Config.h: Doxygen-ized comments for open(), and + added a note on -b that files are evaluated relative to "/". + + * netsvcs/servers/main.cpp: Move the reactor/signal initialization + to be after the service loading. If the user specifies -b (be a + daemon) it closes all handles, including the reactor + notification pipe. Also added ACE_TEXT decorator to the string + literals. + +Fri May 24 13:29:05 UTC 2002 Craig Rodrigues + + * bin/nightlybuilds/builds.lst: Move Debian_Full and + Debian_Minimum_Static builds to new scoreboard. + +Thu May 23 20:35:22 2002 Steve Huston + + * ace/RB_Tree.h: Clarified that iterator is valid after changes to + container only if the iterated-over element is not removed. Thanks + to Craig Ching for noticing this. + + * ace/Module.cpp (close): Fixed to only use the passed-in flags if + the task delete policy was not set explicitly. Thanks to Doug + Schmidt for this fix! + + * examples/C++NPv2/WFMO_Reactor_Logging_Server.cpp: Use new technique + for detecting "quit" command. Unified with book content. + +Thu May 23 20:36:46 UTC 2002 Craig Rodrigues + + * bin/nightlybuilds/builds.lst: Move Lynx_PPC build to new scoreboard. + +Thu May 23 14:04:52 2002 Krishnakumar B + + * ACEXML/common/LocatorImpl.cpp: + * ACEXML/common/LocatorImpl.h: + * ACEXML/common/LocatorImpl.i: + * ACEXML/parser/parser/Parser.cpp: + * ACEXML/parser/parser/Parser.h: + * ACEXML/parser/parser/Parser.i: + + Implemented the Locator for the XML parser. + + * ACEXML/common/CharStream.h: + * ACEXML/common/DTDHandler.h: + * ACEXML/common/Env.h: + * ACEXML/common/Exception.h: + * ACEXML/common/FileCharStream.h: + * ACEXML/common/InputSource.cpp: + * ACEXML/common/SAXExceptions.cpp: + * ACEXML/common/SAXExceptions.h: + * ACEXML/examples/SAXPrint/SAXPrint_Handler.cpp: + * ACEXML/examples/SAXPrint/SAXPrint_Handler.h: + + Cosmetic fixes including some fixing some memory leaks. + + * ACEXML/examples/SAXPrint/Print_Handler.cpp: + * ACEXML/examples/SAXPrint/Print_Handler.h: + * ACEXML/examples/SAXPrint/main.cpp: + + Add support for printing out errors which uses the Locator. This + will print out errors only if there is an error in the XML file. + + +Thu May 23 07:53:37 2002 Douglas C. Schmidt + + * examples/Misc/test_read_buffer.cpp (ACE_TMAIN): Use ACE_STDIN + rather than 0. Thanks to Soeren Gerlach + for motivating this. + +Tue May 21 06:13:50 2002 Douglas C. Schmidt + + * ace/Hash_Map_Manager_T.h (class ACE_Hash_Map_Manager_Ex): Made + shared_find() protected rather than private. Thanks to + Ganesh Pai for reporting this. + +Wed May 22 23:18:26 2002 Priyanka + + * ACE version 5.2.3 released. + +Sat May 18 09:32:58 2002 Ossama Othman + + * ace/SSL/SSL_SOCK_Stream.cpp (get_remote_addr): + + Set errno to ENOTCONN if the SSL connection hasn't been + completed yet, and errno to EBADF if the file descriptor hasn't + been set yet. This emulates the getpeername() errno semantics. + +Sat May 18 08:19:48 2002 Ossama Othman + + * ace/SSL/SSL_Connector.h: + * ace/SSL/SSL_Connector.cpp: + + Temporarily removed these files since there are still some + thread-safefy issues to be addressed in the implementation. + Better to wait until after the forthcoming beta to ship them. + +Fri May 17 07:32:49 2002 Douglas C. Schmidt + + * ace/Log_Msg.cpp: Replaced ACE_NEW_RETURN_I with ACE_NEW_RETURN. + Thanks to Johnny Willemsen for reporting this. + +Thu May 16 20:15:36 2002 Douglas C. Schmidt + + * ace/OS.i: Added ACE_HAS_ISASTREAM_PROTO guard around the + extern "C" int isastream() method. Thanks to Oleg Terletsky + for reporting this. + + * ace/ARGV.h: Added a comment that points out the "add()" method + doesn't handle memory management. Thanks to Kyle Brost + and Don Hinton for clarifying this. + +Thu May 16 17:05:19 2002 Ossama Othman + + * ace/SSL/SSL_Connector.cpp (handle_input, handle_output): + + Qualify the AST type with its appropriate scope. g++ requires + it. + +Thu May 16 15:28:24 2002 Ossama Othman + + * ace/SSL/SSL_Connector.h: + * ace/SSL/SSL_Connector.cpp: + + New ACE_SSL-specific subclasses of the standard + ACE_{Strategy_}Connector classes. The standard ACE_Connector + class assumes that a connection is established once the stream + handle becomes writable. However, that only holds for protocols + with a single handshake, such as TCP. Protocols with multiple + handshakes, such as SSL, require special handling to prevent the + connection from being considered completed once the stream + handle becomes writable. The subclasses simply override the + handle_input() and handle_output() methods for each of base + classes that were subclassed. If possible, these changes will + be generalized and merged into ACE proper. When that occurs, + these classes will be deprecated. As such, these classes are + only intended to be an interim solution. + + * ace/SSL/SSL_SOCK_Connector.cpp (connect): + + Fixed bug where the handle in the SSL_SOCK_Stream was not set if + a connection is in progress. In that case, the handle must also + be set in the SSL_SOCK_Stream so that the correct handle is + returned from SSL_SOCK_Stream::get_handle() when performing + non-blocking connect()s via the SSL_SOCK_Connector. + + (complete): + + No need to set the handle in SSL_SOCK_Stream since it is + already set in the connect() method. + + Only attempt to complete the TCP connection if that hasn't + already been done. + + * ace/SSL/SSL_SOCK_Stream.h (peer): + + Made this method public so that it can be called by the new + SSL_{Strategy_}Connector classes. + + * ace/SSL/SSL_SOCK_Stream.cpp (get_remote_addr): + + Overrode the base class implementations of this method. Some + applications use get_remote_addr() as a way of determining + whether or not a connection has been established. In SSL's + case, the remote addr will be available once the TCP handshake + has been complete. Despite that fact, the SSL connection may + not have been completed. In such a case, a successful return + from get_remote_addr() would be misleading. + +Thu May 16 13:34:19 2002 Nanbor Wang + + * ACEXML/examples/SAXPrint/main.cpp: Added constness to + . This fixed a GCC 3.0 warning. + +Wed May 15 17:47:24 UTC 2002 Don Hinton + + * ace/DLL.cpp: Fixed compile error in an AIX ifdef'd + section of code I missed before. + +Wed May 15 17:18:58 UTC 2002 Don Hinton + + * ace/DLL.cpp (open): + + Removed unreferenced return value. Thanks to Nanbor + for noticing this. + +Wed May 15 16:44:27 UTC 2002 Don Hinton + + * ace/DLL.cpp (save_last_error): + + Use ACE::strnew to make a copy of the saved string. + +Wed May 15 15:58:07 UTC 2002 Don Hinton + + * tests/DLL_Test.cpp: + + Modified test to make calles to ACE_DLL::error () in order to test + changes below. + + * ace/DLL.{h,cpp}: + + Removed the return in open() after an ACE_Lib_Find error, so that + dlopen() will be called and the appropriate error stored. + + Added new static flag, open_called_, to keep track of whether or not + a library function (specifically dlopen) has been called. This is + used internally to make sure that dlerror() isn't called unless the + library has been initialized with a call to dlopen first. Otherwise + it seg-faults on Linux (and perhaps others). + + Also added a last_error_ variable and save_last_error() method and + placed a call to save_last_error() after each library call. Then + changed error() so it just returns last_erro_. This solves a few + problems, since open() made calls to error() which returned the + appropriate error but cleared the value for the next call. So for + instance, when the ctor failed and tried to call error() to report + the error, it didn't return anything since open() had already called + it. Also, if open() failed, and the called tried to call error() to + find out why, they got a blank error message since error() had + already been called by open(). + +Tue May 14 19:40:11 2002 Priyanka Gontla + + * tests/Proactor_Test.cpp (initiate_write_stream): + Applied the Patch Johnny Willemsen sent to fix the test for the + unicode builds. + +Tue May 14 19:14:11 2002 Priyanka Gontla + + * tests/TP_Reactor_Test.cpp (Connector): + Fixed the warnings by removing the check condition + 'size_t index_ >= 0' which is always going to be true. + + * tests/Proactor_Test.cpp: + Integrated the changes sent by Alex Libman + to fix the test on + linux and other platforms that has a weak AIO implementation. + +Mon May 13 16:43:34 2002 Krishnakumar B + + * ACEXML/parser/parser/Parser.cpp (parse_xml_prolog): + + I meant to change "standalong" to "standalone" not "encoding" to + "encodine". Brain damage... + +Mon May 13 16:31:33 2002 Krishnakumar B + + * ACEXML/parser/parser/Parser.cpp (parse_xml_prolog): + + Fixed a small typo. We should parse "standalone" not + "standalong". + +Mon May 13 10:19:48 2002 Nanbor Wang + + * ace/Message_Block.cpp: Fixed a fuzz warning. + +Mon May 13 08:36:38 2002 Alex Libman + + * tests/Proactor_Test.cpp: + + Improved flow-control in full-duplex mode by increasing the + window size, total_send - total_recv to achieve max performance + from TCP/IP + + Improved static info which includes the number of bytes + sent/recv and the number of read/write operations. This allows + to see distribution of I/O operations between handlers. Would be + useful for Proactor's future improvements. + + Impoved scatter/gather branch under Win32. Instead of splitting + one message into 3 small blocks we now send them as a + chain. This helps to improve performance. + +Mon May 13 07:33:43 2002 Chad Elliott + + * ACEXML/examples/SAXPrint/main.cpp: + + Fix the Debian build by using ACEXML_Char instead of ACE_TCHAR. + +Sun May 12 23:20:06 2002 Alex Libman + + * tests/TP_Reactor_Test.{h,cpp}: + Improved flow-control in full-duplex mode by increasing the + window size, total_send - total_recv to achieve max performance + from TCP/IP + + Improved static info which includes the number of bytes + sent/recv and the number of read/write operations. This allows + to see distribution of I/O operations between handlers. Would be + useful for TP_Reactor's future improvements. + +Sun May 12 10:11:07 2002 Douglas C. Schmidt + + * ace/Message_Queue_T.cpp: Updated all the enqueue*() and + dequeue*() methods so that they use the new + total_size_and_length() method, which is more efficient. + + * ace/Message_Block.h (ACE_Message_Block): Added new + total_size_and_length() method to speed up calculation of these + values by putting them into one loop. + +Sun May 12 11:12:00 2002 Nanbor Wang + + * Makefile: Moved ACEXML directory up so it would be compile right + after ACE. We will need them when XML-based Service + Configurator becomes the default. Thank to Kitty for pointing + this out. + +Sat May 11 13:04:49 2002 Douglas C. Schmidt + + * ace/Synch.h: Updated the documentation explaining + what an ACE_Barrier does. Thanks to Timothy Culp + for motivating this. + +Sun May 12 09:45:37 2002 Edan Ayal + + * ace/WIN32_Asynch_IO.cpp: Fixed check for ACE_IOV_MAX + limitation in the following methods: + - ACE_WIN32_Asynch_Read_Dgram::recv + - ACE_WIN32_Asynch_Write_Dgram::send + - ACE_WIN32_Asynch_Read_Stream::readv + - ACE_WIN32_Asynch_Write_Stream::writev + - ACE_WIN32_Asynch_Read_File::readv + - ACE_WIN32_Asynch_Write_File::writev. + +Fri May 10 18:29:48 2002 Krishnakumar B + + * ace/config-icc-common.h (ACE_HAS_ANSI_CASTS): + * include/makeinclude/platform_linux_icc.GNU: + + Fixed the config file to ensure compilation with Intel C++ + Compiler version 6.0. + +Fri May 10 18:16:50 2002 Irfan Pyarali + + * ace/Connector.cpp (handle_output): Removed unnecessary debug + statement. + +Thu May 9 20:02:10 2002 Douglas C. Schmidt + + * docs/ACE-bug-process.html: Fixed a typo in the hostname of + the TAO FAQ. Thanks to Jeff Adams + for reporting this. + +Thu May 9 16:26:48 2002 Nanbor Wang + + * ACEXML/examples/SAXPrint/main.cpp: Added missing include file. + + * ace/Service_Config.cpp: + * ace/Service_Config.h: + * ace/Svc_Conf.y: + * ace/Svc_Conf_y.cpp: Consolidated ace_create_service_type into + ACE_Service_Config::create_service_type_impl. + + +Thu May 9 14:35:24 2002 Nanbor Wang + + * ace/XML_Svc_Conf.h: Changed to include ACE_export.h instead of + config-all.h and added #pragma once macros. + +Thu May 09 12:12:59 2002 Nanbor Wang + + * ACEXML/apps/svcconf/Svcconf.h: + * ACEXML/apps/svcconf/Svcconf.cpp: + * ACEXML/apps/svcconf/Svcconf_Handler.h: + * ACEXML/apps/svcconf/Svcconf_Handler.cpp: Commented out the code + if XML-based Service Configurator is not used. + + * ACEXML/apps/svcconf/Makefile: + * ACEXML/apps/svcconf/XML_Svc_Conf_Parser.dsp: Removed ACEXML from + the list of include path to be consistent with other projects. + +Thu May 09 10:53:51 2002 Nanbor Wang + + * ACEXML/common/XML_Common.dsp: One more mis-merged project file. + +Thu May 09 10:39:17 2002 Nanbor Wang + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Fixed link error on win32. I forgot to merge + these project files differently (they can not be merged.) + +Thu May 9 01:07:56 2002 Nanbor Wang + + * ACEXML/common/StrCharStream.h: + * ACEXML/common/StrCharStream.cpp: Fixed Linux compilation + errors. + +Thu May 09 00:38:22 2002 Irfan Pyarali + + * ace/WFMO_Reactor.cpp (event_handling): Added a fix for bug + 1161. The problem was described aptly and the fix was applied + exactly as suggested by Lyn Headley : + + Problem: "The do-while loop in this function is problematic, + because active threads is incremented once prior to executing + the loop, and then decremented on every iteration of the loop + inside safe dispatch(). Thus on the second iteration of the + loop active threads is decremented to 2^32, which causes the + thread to block on waiting to change state inside update + state(), which is never signaled (because there are no other + active threads)." + + Solution: "Moving the do clause of the loop up a few statements + to include the increment of active threads (and the acquisition + of the lock) would probably fix the larger bug." + + Also, thanks to Lyn Headley and Paxton Mason + at Wolverine, and Kobi Cohen Arazi + , Mike Winter (mwinter@sonic.net), + who have all suggested fimilar problems + and fixes. + +Thu May 09 00:06:47 2002 Irfan Pyarali + + * examples/Reactor/WFMO_Reactor: Added the "Static Debug", "Static + Release", and "Release" build configurations to the "Debug" + configuration for all the 16 dsp files in this directory. + +Wed May 8 23:57:32 UTC 2002 Craig Rodrigues + + * bin/nightlybuilds/builds.lst: Move Redhat 7.1 Core build to new scoreboard. + +Wed May 8 15:15:41 2002 Nanbor Wang + + Merged in the XML-based Service Configurator framework. The + XML-based Service Configruator is *not* enabled by default and + the merge should not affect existing applications. We will make + the XML-based Service Configurator the defualt one at some point + in the future. So you might want to try it out before that + time. :) To switch current ACE to use XML Service Configurtor, + Add + + #define ACE_HAS_XML_SVC_CONF + + in your . You can use the + $(ACE_ROOT)/bin/svcconf_convert.pl to convert your existing + svc.conf files to svc.conf.xml. + + * ace/OS.h: + * ace/Parse_Node.cpp: + * ace/Parse_Node.h: + * ace/Service_Config.cpp: + * ace/Service_Config.h: + * ace/Svc_Conf.h: + * ace/Svc_Conf_Lexer_Guard.cpp: + * ace/Svc_Conf_l.cpp: + * ace/Svc_Conf_y.cpp: + * tests/Service_Config_DLL.cpp: Simplified the macro check. + + + * ace/Service_Config.h: + * ACEXML/apps/svcconf/Svcconf.cpp: Fixed Linux compilation warnings. + + * ACEXML/apps/svcconf/Svcconf_Handler.cpp: + * ace/Service_Config.cpp: Added more comprehensive error messages. + + * ACEXML/Makefile: + * ACEXML/Makefile.bor: + * ACEXML/apps/Makefile: + * ACEXML/apps/Makefile.bor: + * ACEXML/apps/svcconf/Makefile: + * ACEXML/apps/svcconf/Makefile.bor: + * ACEXML/parser/parser/Makefile: + * ace/Makefile: + * ace/Makefile.am: + * ace/Makefile.bor: + * ace/ace.icc: + * examples/ASX/CCM_App/Makefile: + * examples/ASX/CCM_App/Makefile.CCM_App: Added or Updated Makefiles. + + + * bin/svcconf-convert.pl: Added more debugging info printout. + Fixed incorrect mapping on initializer path/path and + state/params. + + * ace/Service_Object.h: Added enum definition to differentiate + ACE_Service_Type_Impl. The enum values are taken from + "ace/Svc_Conf_Toekns.h" so that the same service can work with + both classic and XML service configurator frameworks. + + + * ace/Service_Config.h: + * ace/Service_Config.cpp: Added and + methods to ensure objects are + allocated in consistent DLL. + + * ACEXML/parser/parser/Parser.cpp: Made the exception messages + more comprehensive so it's easier to determine the origins of + parse errors. + + * ACEXML/apps/svcconf/Svcconf_Handler.h: + * ACEXML/apps/svcconf/Svcconf_Handler.i: + * ACEXML/apps/svcconf/Svcconf_Handler.cpp: Added more implementation. + + * examples/ASX/CCM_App/svc.conf.xml: + * netsvcs/servers/svc.conf.xml: + * tests/Service_Config_Test.conf.xml: Added new XML-based svc.conf files. + + * tests/Service_Config_DLL.cpp: Added xml-based inline svc.conf directives. + + + * ACEXML/apps/XML_Apps.dsw: Added new workspace for XML + applications. This should contains all projects under this + subdirectory. + + * ACEXML/apps/svcconf/README: + * ACEXML/apps/svcconf/Svcconf.cpp: + * ACEXML/apps/svcconf/Svcconf.h: + * ACEXML/apps/svcconf/Svcconf_Handler.cpp: + * ACEXML/apps/svcconf/Svcconf_Handler.h: + * ACEXML/apps/svcconf/Svcconf_Handler.i: + * ACEXML/apps/svcconf/XML_Svc_Conf_Parser.dsp: Added new files + that implement the parser for XML-based Service Configurator. + + * bin/svcconf-convert.pl: Updated the help message. + + * ace/config-all.h: Added ACE_DEFAULT_SVC_CONF_EXT to define the + default file extention name for svc.conf files. It is ".conf" + when using classic Service Configurator and ".conf.xml" when + using XML Service Configurator. + + * tests/Service_Config_Test.cpp: Changed to use different file + extension with different Service Configurator. + + * tests/Service_Config_Test.conf.xml: Added the converted XML + based svc.conf file. + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + * ace/XML_Svc_Conf.h: + * ace/XML_Svc_Conf.cpp: Added abstract interface definition for + DLL based XML parser. + + * ace/OS.h: Defined ACE_DEFAULT_SVC_CONF_FILE to "svc.conf.xml" if + ACE_USES_CLASSIC_SVC_CONF is not defined. + + * ace/Service_Config.cpp: Adapt Service_Config to use XML parser + to process an svc.conf.xml file. + + + * bin/generate_export_file.pl: Added code to record the flags used + to generate an export file. + + + * XML/examples/svcconf/Svcconf_Handler.h: + * XML/examples/svcconf/Svcconf_Handler.i: + * XML/examples/svcconf/Svcconf_Handler.cpp: Added Svcconf handling + simulation. + + * XML/examples/test_docs/svcconf.dtd: Revised Svcconf DTD. + + + * XML/examples/test_docs/svcconf.dtd: Updated the DTD again. + The tag also needed an "id" attribute. + + * XML/examples/SAXPrint/main.cpp: + * XML/examples/SAXPrint/svc.conf.xml: Modified the sample XML to + conform to the updated svcconf.dtd. + + * XML/examples/svcconf/README: + * XML/examples/svcconf/Svcconf.dsp: + * XML/examples/svcconf/Svcconf.dsw: + * XML/examples/svcconf/Svcconf_Handler.cpp: + * XML/examples/svcconf/Svcconf_Handler.h: + * XML/examples/svcconf/Svcconf_Handler.i: + * XML/examples/svcconf/main.cpp: New example to test out + svc.conf.xml parsing. Not finished. + + + * XML/examples/test_docs/svcconf.dtd: Simplied the svc.conf.dtd by + removing the tags and making it an attribute for + and tags. + + + * ace/Parse_Node.cpp: + * ace/Parse_Node.h: + * ace/Service_Config.cpp: + * ace/Service_Config.h: + * ace/Svc_Conf.h: + * ace/Svc_Conf.y: + * ace/Svc_Conf_Lexer_Guard.cpp: + * ace/Svc_Conf_l.cpp: + * ace/Svc_Conf_y.cpp: Decoupled old Service_Config parser from ACE. + + + * XML/examples/SAXPrint/main.cpp: Added a new test to try the new + StrCharStream and switch to use ACE_Get_Opt to support more + robust command line arguments. + + * XML/common/StrCharStream.h: + * XML/common/StrCharStream.cpp: Added new CharStream class that + take a null-terminated ACEXML_Char string as an input source. + + * XML/common/FileCharStream.h: Removed unnecessary inclusion of + "ace/streams.h". + + * XML/common/Makefile: + * XML/common/Makefile.bor: + * XML/common/XML_Common.dsp: Added StrCharStream.*. + +Wed May 8 16:29:05 2002 Krishnakumar B + + * bin/nightlybuilds/builds.lst (STATUS): + + Added more information about the build on toutatis. + +Wed May 8 13:57:58 2002 Chad Elliott + + * ace/OS_Dirent.h: + * ace/OS_Dirent.cpp: + + Fixed the Dirent_Test under wide character builds with Visual C++ + 6.0. The d_name member of the dirent struct is normally a one + element ACE_TCHAR array that is used as an ACE_TCHAR pointer. + This doesn't work properly under wide character builds with VC6. + Note: because of this change, memcpy on a 'struct dirent' no + longer works on Windows as it would on UNIX. + +Wed May 8 11:02:44 2002 Balachandran Natarajan + + * tests/TP_Reactor_Test.cpp: Turned off full traces, only the + error messages will goto the log. + +Wed May 8 10:58:15 2002 Alex Libman + + * tests/Proactor_Test.cpp: Fixed the test to work right on + Linux. Turned off full traces, only the error messages and + statistics will go to the log. + +Wed May 8 06:14:08 2002 Douglas C. Schmidt + + * ace/Proactor.h (ACE_Proactor): Fixed a comment that said + "ACE_Reactor" rather than "ACE_Proactor" (cut+paste error ;-)). + Thanks to Don Hinton for reporting this. + + * ace/Filecache.cpp (R_MASK): Allow file sharing by default. + Thanks to Peter Kullmann" for reporting + this. + +Tue May 07 21:03:01 2002 Ossama Othman + + * ace/Dev_Poll_Reactor.cpp: + + Removed vestigial debugging code. + +Tue May 07 17:42:16 2002 Irfan Pyarali + + * ace/OS.i: Added missing "\". + +Tue May 7 16:45:13 2002 Krishnakumar B + + * ace/ACE.cpp (handle_timed_complete): + + Check for the return value from ACE_OS::getsockopt(). Return + ACE_INVALID_HANDLE if return value is -1. Thanks to Jonathan + Wackley for reporting this. + + * ace/OS.i (ACE_LACKS_SETREUID_PROTOTYPE): + + Check if we are compiling with gcc in addition to checking for + _XOPEN_SOURCE. GCC unconditionally turns on _XOPEN_SOURCE, but + it is not defined in Solaris 2.5.1. So this hack to expose the + missing prototypes of setreuid() and setregid(). Thanks to + Jonathan Wackley for reporting this. + + * include/makeinclude/platform_sunos5_sunc++.GNU: + + Cosmetic fixes. + +Tue May 07 15:44:41 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Reverted the change "Tue May 07 15:15:30 + 2002 Balachandran Natarajan ". Got an idea + waht was going wrong with the test and fixed that. + +Tue May 07 15:15:30 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Removed No_Server_MT_Connect_Test from + the daily builds. The testing methodology needs to be + rethought. Thanks to Ru for ppointing out that the test is + failing on a few paltforms. + +Tue May 7 12:59:24 2002 Balachandran Natarajan + + * tests/Proactor_Test.cpp (handle_write_stream): Tried to fix + warnings and errors in Borland builds. Thanks to Ru for pointing + it out. + +Tue May 7 10:31:24 2002 Alex Libman + + * tests/TP_Reactor_Test.cpp: + * tests/TP_Reactor_Test.h: Fixed the tests to work fine on all + platforms. + + * tests/run_test.lst (TP_Reactor_Test): Enabled the test for the + daily runs. + +Mon May 06 16:31:14 2002 Irfan Pyarali + + * examples/Reactor/WFMO_Reactor/Abandoned.cpp (handle_timeout): + * examples/Reactor/WFMO_Reactor/APC.cpp (handle_signal): + + Make sure to remove handlers from the reactor if they are not + going to be around when the reactor closes down. + + * examples/Reactor/WFMO_Reactor/Handle_Close.cpp: Reactor creation + was buggy and the wrong reactor's event loop was being run. + + * examples/Reactor/WFMO_Reactor/Talker.cpp: STDIN handler was not + getting cleaned up properly. Also, Proactor was not getting + removed properly from the Reactor. + + * examples/Reactor/WFMO_Reactor/Network_Events.cpp: Network + listener was not getting cleaned up properly. + + * examples/Reactor/WFMO_Reactor/Multithreading.cpp (Task_Handler): + Fixed an "out of bounds" error where a "for" loop that was going + from 1 to n rather than from 0 to n-1. Also, added a debug + statement. + + * examples/Reactor/WFMO_Reactor/run_test.pl: Redirected some of + the output from STDERR to STDOUT. + +Mon May 06 15:45:35 2002 Nanbor Wang + + * ACEXML/parser/debug_validator/Debug_Validator.dsp: Fixed + rum-time library options to avoid compilation errors when MFC is + enabled. + +Mon May 6 14:26:52 2002 Balachandran Natarajan + + * tests/Proactor_Test.cpp: Fixed unused variable warnings in + non-win32 builds. + +Mon May 6 13:37:45 2002 Balachandran Natarajan + + * bin/generate_performance_chart.sh: Changed the range of the y + range for the plots. + +Mon May 6 07:39:22 2002 Douglas C. Schmidt + + * ace/Message_Queue_T.cpp (notify): Moved int queue_count definition + to outside the scope. Thanks to Chad Elliot for reporting this. + +Sun May 5 19:14:34 2002 Douglas C. Schmidt + + * ace/Message_Queue_T.cpp: Modified all the enqueue*() methods so that + their calls to notify() occur *outside* of the monitor lock. + This change prevents deadlock from occurring when a reactor's + notification pipe is full. Thanks to Sasha Agranov + for reporting this. + +Mon May 6 10:24:12 2002 Johnny Willemsen + + * apps/gperf/src/Makefile: + Removed INSBIN because this didn't work before my change of + Fri May 03 2002, but now it works and it causes error in all + builds. + +Sun May 5 22:23:00 2002 Edan Ayal + + * tests/Proactor_Test.cpp (Sender): + - Totally removed the message content mem-copies by having the + message blocks assume ownership without copying, by + pre-allocating space for the ending '\0' (needed for the + printouts), and by using an additional complete message content + string for the non-scatter/gather case. + + - Added missing message blocks releases when the write + operations fail. + + - Added a missing message block rd_ptr adjustment at the message + content printout in the non-scatter/gather case. + +Fri May 03 20:29:12 UTC 2002 Johnny Willemsen + + * include/makeinclude/wrapper_macros.GNU: + Only set INSBIN, INSLIB, INSMAN and INSINC when they are not set + yet. This way these can be overruled in a makefile. + +Fri May 03 08:38:27 2002 Ossama Othman + + * ace/SSL/SSL_Context.cpp (ssl_library_init): + + Removed extraneous "SSL_library_init()" call. + SSLeay_add_ssl_algorithms(), which is an alias for + SSL_library_init(), is already called. + +Thu May 02 16:33:05 2002 Nanbor Wang + + * ace/OS.i (mmap): On Win32, check for both ERROR_INVALID_NAME and + ERROR_FILE_NOT_FOUND to account for difference when running it + on WINNT but with ACE_HAS_WINNT4 = 0. Thanks to Ram Ben-Yakir + for figuring this out. + +Fri May 3 07:21:20 2002 Ossama Othman + + * tests/Dev_Poll_Reactor_Test.cpp: + + Uncommented ACE_START/END_TEST macros and removed extraneous + debugging statements. + +Fri May 3 08:00:55 2002 Chad Elliott + + * docs/tutorials/012/work.h: + + Include ace/Log_Msg.h to get the definition of ACE_DEBUG and + related macros. + +Fri May 3 07:07:31 2002 Chad Elliott + + * tests/Proactor_Test.cpp: + + Put ACE_TEXT around bare char strings. + +Fri May 3 06:57:13 2002 Chad Elliott + + * tests/Proactor_Test.cpp: + + Add a conditional to avoid building this test if threads are not + enabled. + +Fri May 3 06:47:23 2002 Chad Elliott + + * tests/Dev_Poll_Reactor_Test.cpp: + + Add a conditional main for when ACE_HAS_DEV_POLL and + ACE_HAS_EVENT_POLL are not defined. + +Fri May 3 06:41:10 2002 Chad Elliott + + * ace/Token.h: + + Remove parameter name to avoid a warning from g++. + +Thu May 02 15:54:48 2002 Ossama Othman + + * ace/Select_Reactor_T.cpp (work_pending): + + Check if any timers are pending. If so, override any timeout + from the select() call. Corrects a problem where the decision + that no work was pending despite the fact that timers were + pending. + +Thu May 02 15:53:39 2002 Ossama Othman + + * tests/Dev_Poll_Reactor_Test.cpp: + + Added some comments that briefly describe the test. + +Thu May 2 15:45:34 2002 Ossama Othman + + * tests/Dev_Poll_Reactor_Test.cpp: + + New one-button test for the Dev_Poll_Reactor. Currently it is + fairly simple. Improvements to be added soon. + +Thu May 2 15:22:36 2002 Ossama Othman + + * ace/Dev_Poll_Reactor.h (work_pending_i): + * ace/Dev_Poll_Reactor.cpp (work_pending_i): + + Accept a pointer to ACE_Time_Value instead of a reference. + + Corrected the logic for the test for pending timers. + +Thu May 02 14:38:53 2002 Ossama Othman + + * examples/Reactor/Misc/pingpong.cpp: + + Include "ACE.h" to pull in methods in the ACE class/namespace. + +Thu May 2 14:02:20 2002 Ossama Othman + + * ace/Dev_Poll_Reactor.cpp (work_pending_i): + + Take into account pending timers when deciding if there is work + to be done. + +Thu May 02 13:34:08 2002 Ossama Othman + + * ace/Dev_Poll_Reactor.cpp: + + Include "ACE.h" to pull in methods in the ACE class/namespace. + +Thu May 2 13:28:01 2002 Ossama Othman + + * ace/Dev_Poll_Reactor.h: + + Updated some documentation. + + * ace/Dev_Poll_Reactor.inl (upcall): + + New method containing common upcall operations for all types of + IO events. + + * ace/Dev_Poll_Reactor.cpp: + + Commented out "ready set" code since the upcall will simply loop + until the event handler no longer desires callbacks. This is + okay since multiple threads may dispatch event handlers (similar + to what the TP_Reactor does). + + (close): + + Cleaned up memory and resource leaks. + + (handle_events_i, work_pending_i): + + Moved "event polling" code to the new work_pending_i() method. + handle_events_i() now calls that method to determine if any + events must be dispatched. + + If the underlying ioctl() call was interrupted (e.g. via the + INTR signal), i.e. returns -1 with errno set to EINTR, then + automatically restart the event loop if so desired by the user. + + (work_pending): + + Implemented this method. It simply grabs the reactor lock and + calls the new work_pending_i() method. + + (dispatch_io_events): + + Call the remove_handler() method that acquires the lock instead + of the one doesn't. The lock must be reacquired since reactor + state will potentially change during an upcall and since the + lock was released prior to dispatching the upcall. Fixes a race + condition. + + Directly use pollfd pointers as the loop variables instead of an + integer. No need for the additional indirection. + + Since the underlying event demultiplexing mechansim (`/dev/poll' + or '/dev/epoll') is stateful, and since only one result buffer + is used, all pending events (i.e. those retrieved from a + previous poll) must be dispatched before any additional event + can be polled. As such, the Dev_Poll_Reactor keeps track of the + progress of events that have been dispatched. + + The semantics of the event loop in the presence of multiple + threads is non-trivial. The "start point" of the loop will be + incremented each time an event handler is dispatched, which may + be done across multiple threads. Multiple threads may change + the loop variables. Care must be taken to only change those + variables with the reactor lock held. + + (dispatch_timer_handlers): + + Release the reactor lock during the upcall. Fixes a potential + deadlock. + +Thu May 2 10:35:25 2002 Phil Mesnier + + * ace/Log_Msg.cpp: ACE_Log_Msg::open() did not properly initialize a + custom backend due to improper evaluation of result code. + +Thu May 02 07:15:31 2002 Ossama Othman + + * ace/IO_Cntl_Msg.h: + + Include OS.h to pull in size_t typedef. + +Thu May 2 07:50:29 2002 Chad Elliott + + * examples/Web_Crawler/URL_Addr.h: + + Include ace/ACE.h to avoid compilation error due to missing + method (ACE::hash_pjw) in inline method ACE_URL_Addr::hash(). + +Thu May 2 07:46:59 2002 Chad Elliott + + * websvcs/lib/URL_Addr.h: + + Include ace/ACE.h to avoid compilation error due to missing + method (ACE::hash_pjw) in inline method ACE_URL_Addr::hash(). + +Thu May 2 07:34:59 2002 Chad Elliott + + * ace/QoS/SOCK_Dgram_Mcast_QoS.cpp: + + Switch ACE::get_ip_interfaces() to + ACE_Sock_Connect::get_ip_interfaces() and include + ace/Sock_Connect.h. This only applies to Win32. + +Thu May 2 00:39:32 2002 Irfan Pyarali + + * ace/Dynamic.i: Uncommented ACE_TRACE calls. + +Thu May 2 00:29:34 2002 Irfan Pyarali + + * ace/TLI_Stream: Uninlined a methods that needed access to the + ACE class. + + * ace/Service_Object: Uninlined ACE_Service_Type::name(). + + * ace/Malloc_T.cpp: + * ace/Process_Mutex.cpp: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/TLI_Acceptor.cpp: + * ace/TLI_Connector.cpp: + * ace/TLI_Stream.cpp: + + Added #include "ace/ACE.h". + +Wed May 1 21:07:23 2002 Ossama Othman + + * ace/config-win32-msvc-6.h: + + Moved library "decorator" related macros to + config-win32-msvc.h. + + * ace/config-win32-msvc.h: + + Support "decorated" library names for MSVC 6 or better. Fixes + run-time library search problems in MS Visual Studio .NET + builds. + + * ace/ATM_Addr.h: + * ace/ATM_Params.h: + * ace/MEM_Addr.h: + * ace/Module.h: + * ace/Name_Space.h: + * ace/Naming_Context.h: + * ace/Remote_Name_Space.h: + + Include "ACE_export.h" instead of "ACE.h." The latter is + overkill. + + * ace/PI_Malloc.h: + + Include "ACE_export.h" instead of "ACE.h." The latter is + overkill. + + No need to include "ace/Malloc_T.h" and "ace/Memory_Pool.h" + + * ace/Date_Time.h: + * ace/Event_Handler.h: + * ace/High_Res_Timer.h: + * ace/Malloc.h: + * ace/Malloc_Allocator.h: + * ace/Malloc_T.h: + * ace/Mem_Map.h: + * ace/Pipe.h: + * ace/Profile_Timer.h: + * ace/Read_Buffer.h: + * ace/Shared_Memory.h: + * ace/Shared_Object.h: + * ace/SOCK.h: + * ace/SPIPE_Addr.h: + * ace/Stats.h: + * ace/SV_Message.h: + * ace/SV_Semaphore_Simple.h: + * ace/SV_Shared_Memory.h: + * ace/Synch.h: + * ace/Synch_Options.h: + * ace/Thread.h: + * ace/Typed_SV_Message.h: + + Include "OS.h" and "ACE_export.h" instead of "ACE.h." The + latter is overkill. + + * ace/Configuration.h: + * ace/DEV_Addr.h: + * ace/FIFO.h: + * ace/Get_Opt.h: + * ace/Vector_T.h: + + No need to include "ACE.h." + + * ace/Dynamic.h: + + No need to include "ACE.h", "Synch_T.h" and "Singleton.h." + "ACE_export.h" is enough. + + * ace/INET_Addr.h: + + Include "Sock_Connect.h" instead of "ACE.h". The latter is + overkill. + + * ace/Message_Block.h: + + Include "ace/OS.h" and "ace/ACE_export.h" instead "ace/ACE.h". + The latter is overkill. + + No need to include "Malloc.h" + + * ace/IO_Cntl_Msg.h: + * ace/Sock_Connect.h: + + Include "ACE_export.h" to pull in ACE_Export macro definition. + + * ace/Activation_Queue.cpp: + * ace/Message_Block.cpp: + + Include "ace/Malloc_Base.h" to pull in ACE_Allocator class + declaration. + + * ace/DEV_IO.h: + * ace/FIFO_Recv.h: + * ace/FIFO_Send.h: + * ace/NT_Service.h: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_IO.h: + * ace/SPIPE_Stream.h: + * ace/SV_Semaphore_Simple.cpp: + * ace/Service_Types.h: + * tests/test_config.h: + + Include "ace/ACE.h" pull in methods in the "ACE" + class/namespace. + + * ace/Stream.h: + * ace/SV_Message_Queue.h: + + Include "config-all.h" instead of "ACE.h." The latter is + overkill. + + * ace/OS_Memory.h: + * ace/config-all.h: + + Moved default definition of the + ACE_HAS_POSITION_INDEPENDENT_POINTERS macro to + "ace/config-all.h". Allows for additional reductions in + inter-header dependencies. + + * ace/PI_Malloc.cpp: + + Moved non-essential includes within the + "ACE_HAS_POSITION_INDEPENDENT_POINTERS == 1" block. No need to + include them if the implementation won't be compiled. + + * ace/Select_Reactor_T.cpp: + + Include "ace/ACE.h" pull in methods in the "ACE" + class/namespace. + + (handle_events): + + Moved ACE_Countdown_Time declaration within the ACE_MT_SAFE + block. It is only used for the multi-threaded case. + + (work_pending): + + As part of the timeout take into account the time taken to + acquire the lock. + + Copy the timeout value. Do not ignore the interface by casting + away the const-ness. + + Do not bother continuing if the reactor has been deactivated. + +Wed May 1 15:49:33 2002 Steve Huston + + * tests/DLL_Test_Impl.{h cpp}: Add a nothrow variant of operator new + for platforms with ACE_HAS_NEW_NOTHROW (like HP-UX, aC++). + +Tue Apr 30 14:54:02 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added $TAO_ROOT/tests/Connection_Timeout + to the daily build list. + +Tue Apr 30 14:42:06 2002 Chad Elliott + + * ace/Synch.h: + * ace/Synch.i: + + Change the Null wait condition wait() method to take a const + ACE_Time_Value* like the Mutex wait condtion. + +Mon Apr 29 20:28:49 UTC 2002 Craig Rodrigues + + * bin/nightlybuild/builds.lst: Move SunOS_SunCC51, SunOS_GCC_2_95, + Solaris8_FORTE_UP_1 to new scoreboard. + +Sun Apr 28 18:03:50 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added the new tests to our daily list of + tests that needs to be run. + +Sun Apr 28 11:50:17 2002 Edan Ayal + + * ace/WIN32_Asynch_IO.cpp: + ACE_WIN32_Asynch_Read/Write_Stream/File_Result::complete - + corrected the updates to the chained message blocks (rd_ptr and + wr_ptr) in case of scatter-gather IO. This was apparently a + cut-n-paste bug. + +Sun Apr 28 08:19:37 2002 Balachandran Natarajan + + * tests/Proactor_Test.cpp: Added code to test async scatter-gather + IO on Win32. Thanks Edan Ayal for donating + this. + +Sun Apr 28 12:27:12 2002 Johnny Willemsen + + * include/makeinclude/ace_flags.bor: + Added cflags and lib for new TAO IFRService library + +Sat Apr 27 20:00:27 2002 Nanbor Wang + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Exclude template files Atomic_Op.cpp and + Framework_Component_T.cpp from compilation. + +Sat Apr 27 18:10:37 2002 Balachandran Natarajan + + * ace/Message_Queue_T.cpp (flush): Fixed fuzz error. + +Sat Apr 27 17:13:16 2002 Balachandran Natarajan + + * ace/Svc_Handler.cpp: Added a closing '}' for the method + ACE_Buffered_Svc_Handler::dump () const. This should fix the + compile errors with g++ that will start showing up shortly in + the Scoreboard. + + * ace/*makefile: Updated dependencies. + +Sat Apr 27 11:16:03 2002 Douglas C. Schmidt + + Thanks to Boris Temkin for motivating the + following fixes: + + * ace/Svc_Handler.cpp: Updated the flush_i() method to call the + message queue's flush_i() method to avoid deadlocks on platforms + that lack recursive mutexes. + + * ace/Message_Queue_T.{h,cpp}: Added the flush() and flush_i() + methods to the ACE_Message_Queue in order to remove messages + without deactivating the queue. Also refactored the close() + method to use flush_i(). + +Sat Apr 27 09:26:43 2002 Edan Ayal + + Added support (currently under win32 only) for asynchronous + scattered read and asynchronous gathered write with socket streams + and with files. + + * ace/Asynch_IO.{h cpp}: Added methods 'readv' to + ACE_Asynch_Read_Stream/File, and 'writev' to + ACE_Asynch_Write_Stream/File, for win32 only. The methods just + delegate to the implementation. + + * ace/Asynch_IO_Impl.h: Added pure virtual methods + 'readv' to ACE_Asynch_Read_Stream/File_Impl, and 'writev' to + ACE_Asynch_Write_Stream/File_Impl, for win32 only. + + * ace/WIN32_Asynch_IO.{h cpp}: Implemented the 'readv' + for ACE_WIN32_Asynch_Read_Stream/File and 'writev' for + ACE_WIN32_Asynch_Write_Stream/File. Modified the 'complete' + method and the ctor of ACE_WIN32_Asynch_Read_Stream/File_Result + and ACE_WIN32_Asynch_Write_Stream/File_Result. + +Sat Apr 27 16:07:12 UTC 2002 Johnny Willemsen + + * examples/Reactor/Proactor/test_udp_proactor.cpp: + Fixed BCB warning about hides virtual function by renaming open + to open_addr + + * ace/Asynch_IO.h: + Minor comment update + +Sat Apr 27 08:59:56 2002 Douglas C. Schmidt + + * ace/Process.i: If getpid() is ACE_INVALID_HANDLE, don't call + ACE::terminate_process() or ACE_OS::kill() since + ACE_INVALID_HANDLE is -1 on UNIX, which causes all sorts of + problems due to the fact that -1 terminates the whole session + group! Thanks to Olivier Brunet for + reporting this. + +Sat Apr 27 15:28:12 UTC 2002 Johnny Willemsen + + * examples/Reactor/Proactor/test_proactor.cpp: + * examples/Reactor/WFMO_Reactor/Talker.cpp: + Fixed MSVC6 compile errors + +Fri Apr 26 17:00:23 2002 Dante J. Cannarozzi + + * ace/Containers_T.h + * ace/Unbounded_Set.h + * ace/Hash_Map_Manager.h + * ace/RB_Tree.h + * ace/Vector_T.h + * ace/Unbounded_Queue.h + : with the help of Matt Hampton updated + doxygen to contain a consistent html list that summarizes the + each container (like internal structure, duplicates allowed, etc.) + at the request of Steve Huston. + +Fri Apr 26 16:36:52 2002 Steve Huston + + * netsvcs/lib/Server_Logging_Handler_T.cpp: Added #include + "ace/Log_Record.h" to pick up ACE_Log_Record declaration. + Fixes compile error on HP-UX. + +Fri Apr 26 15:10:21 2002 Steve Huston + + * ace/ACE.cpp: + * ace/Sock_Connect.cpp: Moved ACE_Auto_Array_Ptr<> and + ACE_Auto_Basic_Array_Ptr<> instantiations from ACE.cpp to + Sock_Connect where they are now used. Also added MACOSX to the + platforms that get them instantiated. + Added include of OS.h in Sock_Connect.cpp to pick up the ifreq + stuff portably. + + * ace.icc: Added Time_Value, Copy_Disabled, Argv_Type_Converter, + Dev_Poll_Reactor, POSIX_CB_Proactor, WIN32_Proactor, + WIN32_Asynch_IO, Obstack, Vector_T. + Added the new group TIMER_FILES (and TIMER_INCLUDES) to parallel + the TIMER_FILES in ace/Makefile. + +Fri Apr 26 14:05:49 2002 Chad Elliott + + * ace/OS.i: + + Modify the ACE_OS::fflush() method to not call the system + implementation on VxWorks if the FILE* is 0. This causes + problems for the OS. Thanks to Michael Kirher + for reporting and providing + a fix for this. + + * ace/Svc_Conf.l: + * ace/Svc_Conf_l.cpp: + + Use ACE_OS::fflush() instead of fflush(). + +Fri Apr 26 13:22:18 2002 Douglas C. Schmidt + + * ace/Svc_Handler.{h,cpp}: Applied the Thread-safe Interface pattern + by factoring out the flush logic into a flush_i() method (that + doesn't hold a lock) and call this method from the put() and + flush() methods (that do hold locks). Thanks to Boris Temkin + for reporting this problem. + +Fri Apr 26 14:45:28 2002 Steve Huston + + * tests/Proactor_Test.cpp: Replace CALLBACK with CB. Apparantly, + CALLBACK is a macro with MSVC. + +Fri Apr 26 14:39:37 2002 Steve Huston + + * tests/Proactor_Test.cpp: Use default proactor type for platform + if no specific proactor type for platform is chosen. + +Fri Apr 26 11:39:22 2002 Steve Huston + + * examples/C++NPv2/examples.dsw: + * examples/C++NPv2/display_logfile.dsp: + * examples/C++NPv2/Reactor_Logging_Server.dsp: + * examples/C++NPv2/Select_Reactor_Logging_Server.dsp: + * examples/C++NPv2/TP_Reactor_Logging_Server.dsp: + * examples/C++NPv2/WFMO_Reactor_Logging_Server.dsp: + New project/workspace for the examples here so far. + + * examples/C++NPv2/WFMO_Reactor_Logging_Server.cpp: Make dtor + public - this object is created on the stack. + Added constructor that accepts a ACE_Reactor * and passes it up + the inheritance chain. + + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: + * examples/C++NPv2/TP_Reactor_Logging_Server.cpp: Add preprocessor + check to be sure that the correct C++ library is enabled on Windows. + Qualify "getline" call with "std::". + +Fri Apr 26 07:42:12 2002 Johnny Willemsen + + * tests/IOStream_Test.cpp: + Corrected the debug output string of server received so that + the formatting is the same as client received. Thanks to + Soeren Gerlach for reporting this. + + * examples/Reactor/WFMO_Reactor/Talker.cpp: + * examples/Reactor/Proactor/test_proactor.cpp: + * examples/Reactor/Proactor/test_proactor2.cpp: + Fixed BCB compile warnings + +Thu Apr 25 17:34:31 2002 Steve Huston + + * bin/auto_compile: When doing 'realclean', do them in reverse + order of the builds, else ace/ACE_COMPONENTS.list gets wiped + out first, preventing things that examine the components list + (like netsvcs) from getting cleaned. + +Thu Apr 25 16:20:33 2002 Steve Huston + + * examples/C++NPv2/TP_Reactor_Logging_Server.{cpp mak}: + * examples/C++NPv2/WFMO_Reactor_Logging_Server.cpp: + New source and makefiles for C++NPv2 chapter 4 examples. + + * examples/C++NPv2/Makefile: Added TP_Reactor_Logging_Server. + +Thu Apr 25 15:46:39 2002 Steve Huston + + POSIX asynch I/O improvements/corrections submitted by Alex + Libman : + + * ace/POSIX_CB_Proactor.{h i cpp}: New POSIX Proactor implementation + that makes use of the AIO facility's callback feature. This has + only been tested on SGI Irix. + + * ace/Makefile: Added POSIX_CB_Proactor. + + * ace/POSIX_Proactor.{h cpp}: Refactored some code and added better + cancellation/cleanup handling. Added hooks for the new + ACE_POSIX_CB_Proactor class and refactored methods + close(), get_result_status(), create_result_aiocb_list(), and + delete_result_aiocb_list(). + + * ace/SUN_Proactor.{h cpp}: Add the new get_result_status() method + and refactored the old results code into the new method. Also, + make good use of the new aiocb create/delete methods. Improvements + to operation status detection based on input from Sun. + + * tests/Proactor_Test.cpp: Add support for new ACE_POSIX_CB_Proactor. + Added a log lock to be sure all messages from one transaction are + logged together. Also, sets up full duplex I/O for Windows and + Solaris; half duplex for all others due to general weakness in + AIO subsystems. If further testing reveals that more can be set + to full duplex, this can be expanded. + +Thu Apr 25 14:02:38 2002 Steve Huston + + * tests/MT_Reactor_Upcall_Test.cpp: Fixed compile errors by using + sizeof (type) instead of sizeof type. + +Thu Apr 25 06:51:58 2002 Douglas C. Schmidt + + * ace/OS.h (ACE_FACTORY_DEFINE): Replaced an ACE_reinterpret_cast() + with an ACE_static_cast() since the latter works correctly with + multiple inheritance. Thanks to Chris Uzdavinis + for reporting this. + + * ace/CDR_Base.h (ACE_CDR): Improved the documentation of the + consolidate() method. Thanks to Alain Decamps for helping with this. + +Thu Apr 25 03:34:43 2002 Irfan Pyarali + + * tests/MT_Reactor_Upcall_Test.cpp: Changed the test such that the + end of the test is indicated by a shutdown message rather than + an explicit message count. + +Wed Apr 24 23:39:00 2002 Irfan Pyarali + + * examples/Reactor/WFMO_Reactor: Updated file names to match + executable names. + +Thu Apr 25 07:34:12 UTC 2002 Johnny Willemsen + + * ace/Log_Msg.h: + Doxygen-ized some of the comments + +Wed Apr 24 18:53:56 2002 Balachandran Natarajan + + * include/makeinclude/rules.local.GNU (clean.local): Reverted the + change "Wed Apr 24 16:08:30 2002 Balachandran Natarajan + " since it is bogus. + +Wed Apr 24 16:08:30 2002 Balachandran Natarajan + + * include/makeinclude/rules.local.GNU: Added a rule to clean up + Sunws_cache properly. Should help SunCC5_1 builds. + +Wed Apr 24 11:07:15 2002 Douglas C. Schmidt + + * ace/RMCast/Makefile (FILES): Removed a stray "\". Thanks to + Amir Kunst for reporting this. Also reordered + the files so they would be in alphabetical order. + +Wed Apr 24 11:17:31 2002 Steve Huston + + * PROBLEM-REPORT-FORM: Always ask for config.h and + platform_macros.GNU; not just on compilation issues. + +Wed Apr 24 07:56:12 UTC 2002 Johnny Willemsen + + * ace/Future_Set.h: + Converted a comment to javadoc style because it is very long for + the brief documentation. + + * ace/DEV_IO.h: + * ace/TTY_IO.h: + Removed not needed includes + +Wed Apr 24 03:14:11 UTC 2002 Craig Rodrigues + + * tests/MT_Reactor_Upcall_Test.cpp: Fix warnings on threads=0 + build. + +Tue Apr 23 18:45:31 2002 Steve Huston + + * examples/C++NPv2/Logging_Event_Handler.h (get_handle): Cast + away const-ness of logging_handler_ member to call it's + peer() method, but use that in a const method call. Keeps + the interface contract intact. This example now works. + + * examples/C++NPv2/display_logfile.mak: Makefile for the + display_logfile example (chapter 9). + + * examples/C++NPv2/Select_Reactor_Logging_Server.{cpp mak}: New + example for the ACE_Select_Reactor section in chapter 4. + + * examples/C++NPv2/Makefile: Added Select_Reactor_Logging_Server. + +Tue Apr 23 16:01:47 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Prevented the Miop/McastHello test from + running in SUNCC51 builds. SUNCC51 is too broken. Time to remove + the build of the scoreboard. + +Tue Apr 23 11:31:43 2002 Ossama Othman + + * ace/Dev_Poll_Reactor.inl (ACE_Dev_Poll_Handler_Guard): + (~ACE_Dev_Poll_Handler_Guard): + + Added "todo" comments about suspending and resuming the event + handler before and after the upcall, respectively. + +Tue Apr 23 11:38:40 2002 Steve Huston + + * examples/C++NPv2/Makefile: Rearranged to build all the examples. + +Tue Apr 23 13:32:12 UTC 2002 Johnny Willemsen + + * examples/Reactor/Makefile.bor: + Added Proactor directory + + * examples/Reactor/Proactor/Makefile.bor: + Added this BCB makefile + + * examples/Reactor/Proactor/*.cpp + Made all files compiling when doing a wchar build. + +Tue Apr 23 10:03:12 UTC 2002 Johnny Willemsen + + * examples/Reactor/Makefile.bor: + Added WFMO_Reactor directory + + * examples/Reactor/WFMO_Reactor/Makefile.bor: + Added this BCB makefile + + * examples/Reactor/WFMO_Reactor/*.cpp + Fixed several unused argument warnings that appeared with bcb. + Made all files compiling when doing a wchar build. + +Tue Apr 23 07:35:12 UTC 2002 Johnny Willemsen + + * ace/Base_Thread_Adapter.h: + * ace/Future.h: + * ace/Naming_Context.h: + * ace/Malloc.h: + * ace/Malloc_Base.h: + * ace/Malloc_T.h: + * ace/NT_Service.h: + * ace/Notification_Strategy.h: + * ace/Object_Manager.h: + * ace/OS_Thread_Adapter.h: + * ace/WIN32_Asynch_IO.h: + Doxygen-ized some of the comments + + * ace/OS.h: + Added ACE_ALLOCATOR_NORETURN and ACE_NEW_MALLOC_NORETURN, these + macro's set errno to ENOMEM incase of an memory error but don't + call return but guarantee that the pointer is 0. + + * ace/QoS/QoS_Manager.h: + * ace/QoS/QoS_Session_Impl.h: + Doxygen-ized some of the comments + + * ace/config-doxygen.h: + Added define ACE_YY_USES_PROTOS to parse ace/Svc_Conf_l.cpp correctly + + * tests/MT_Reactor_Upcall_Test.cpp: + Fixed unicode and single threaded build errors/warnings + +Mon Apr 22 20:40:41 2002 Steve Huston + + * examples/C++NPv2/Logging_Event_Handler.{cpp h}: + Moved LOGFILE_SUFFIX to open() method. Changed get_handle() to be + const to match the signature inherited from ACE_Event_Handler. + + * examples/C++NPv2/Logging_Event_Handler_Ex.h: Moved MAX_CLIENT_TIMEOUT + into class declaration as an enum. + + * examples/Logging_Handler.h: Added terminating ';' to inlined + methods. + +Mon Apr 22 18:33:20 2002 Irfan Pyarali + + * examples/Reactor/WFMO_Reactor/run_test.pl: This file will allow + us to run these tests nightly. Note that Console_Input, + Network_Events, and Talker are not included since they are + interactive tests. + + * bin/auto_run_tests.lst: Added new test script. + + * examples/Reactor/WFMO_Reactor/test_handle_close.cpp: + * examples/Reactor/WFMO_Reactor/test_multithreading.cpp: + * examples/Reactor/WFMO_Reactor/test_network_events.cpp: + Fixed several memory management and shutdown issues. + + * examples/Reactor/WFMO_Reactor/WFMO_Reactor.dsw: + Changed "Abondoned" to "Abandoned" + + * examples/Reactor/WFMO_Reactor/test_window_messages.cpp: + Fixed debug message formatting. + + * examples/Reactor/WFMO_Reactor/test_network_events.cpp: + Fixed documentation to says that ACE_DEFAULT_SERVER_PORT + defaults to 10002; correct value is 20002. + +Mon Apr 22 17:24:39 2002 Steve Huston + + * examples/C++NPv2/Reactor_Logging_Server.mak: + * examples/C++NPv2/Logging_Acceptor.{cpp h}: + * examples/C++NPv2/Logging_Acceptor_Ex.h: + * examples/C++NPv2/Logging_Event_Handler.{cpp h}: + * examples/C++NPv2/Logging_Event_Handler_Ex.{cpp h}: + * examples/C++NPv2/Reactor_Logging_Server.{cpp h}: + New files for examples in C++NPv2, chapter 3. + +Mon Apr 22 15:43:15 2002 Nanbor Wang + + * examples/DLL/Today.h: + * examples/DLL/Today.cpp: + * examples/DLL/Newsweek.h: + * examples/DLL/Newsweek.cpp: Added overloaded new/delete opertors + and updated magazine messages. + +Mon Apr 22 15:20:02 2002 Nanbor Wang + + * tests/DLL_Test.h: + * tests/DLL_Test.cpp: Removed the destroy method as it didn't help + ensuring allocating/deallocating the DLL object with consistent + heap. Instead, we reverted back to use auto_ptr and relied on + the overloaded new/delete operators. + + * tests/DLL_Test_Impl.h: + * tests/DLL_Test_Impl.cpp: Added the aforementioned overloaded + new/delete operator implementations. + +Mon Apr 22 12:33:30 2002 Irfan Pyarali + + * tests/MT_Reactor_Upcall_Test: This is a test that shows how to + handle upcalls from the TP_Reactor and the WFMO_Reactor when the + event loop is being run by multiple threads. + + The following files were updated to include the new test: + + - tests/Makefile + - tests/Makefile.am + - tests/Makefile.bor + - tests/Reactor_Dispatch_Order_Test.dsp + - tests/Reactor_Dispatch_Order_Test.icc + - tests/icc.bat + - tests/run_test.lst + - tests/run_tests.bat + - tests/run_tests.psosim + - tests/run_tests_remote.lst + - tests/tests.dsw + - tests/tests.icp + - tests/MT_Reactor_Upcall_Test_WinCE.vcp + - tests/tests_WinCE.vcw + +Mon Apr 22 15:27:12 UTC 2002 Johnny Willemsen + + * docs/tutorials/021/page01.html + Corrected incorrect link + +Mon Apr 22 11:20:12 UTC 2002 Johnny Willemsen + + * ace/Svc_Conf_y.cpp: + Removed some strange characters from this file + + * ace/config-doxygen.h: + Added define of __cplusplus so that the file Svc_Conf_y.cpp and + Svc_Conf_l.cpp are correctly parsed. We parsed the c-code and + we got the following defines which we don't want: + #define const + Also there was a global variable 'int size' which cluttered other + documentation. + +Mon Apr 22 08:55:12 UTC 2002 Johnny Willemsen + + * ace/Timer_Queue_T.h: + Doxygen-ized some of the comments + + * etc/*.doxygen: + Added the following to all doxygen config files + DISTRIBUTE_GROUP_DOC = YES + When a doxygen group is used (starts with //@{ and ends with + //@}) and if there is only one description for all group members than + this description is used for all the members separately. If a member + has its own description than that description is used. + +Mon Apr 22 01:34:32 2002 Nanbor Wang + + * ace/Task.h: Enhanced the comment for method to make it + clear that it will not wait for detached thread. Thanks to + Alain Decamps for suggesting this. + +Sun Apr 21 21:23:59 2002 Krishnakumar B + + * include/makeinclude/platform_osf1_4.x_cxx.GNU (SOFLAGS): + + Re-enable -use_ld_input in SOFLAGS. Seems that this flag is used + to identify Digital Unix in some Makefiles which resort to all + kinds of hackery to get some files to link. + +Sun Apr 21 20:59:26 2002 Krishnakumar B + + * include/makeinclude/platform_osf1_4.x_cxx.GNU (OCFLAGS): + * include/makeinclude/platform_osf1_4.x_g++.GNU (OCFLAGS): + + Set the optimization to level -O3. That way we will might just + get two builds in a day. This is also the recommended level in + the manual. + +Sun Apr 21 15:02:52 UTC 2002 Craig Rodrigues + + * ace/TP_Reactor_Test.cpp: Add checks for ACE_AS_THREADS. + +Sun Apr 21 09:42:05 2002 Douglas C. Schmidt + + * ace/config-win32-common.h: Changed the value of ACE_IOV_MAX to + be 64 rather than 1024. Thanks to Alain Decamps for motivating + this. + +Sat Apr 20 19:57:55 2002 Craig Rodrigues + + * ace/Asynch_Pseudo_Task.cpp (stop): Wrap ace_mon in ACE_MT() to eliminate + errors on builds which are configured single-threaded. + +Fri Apr 19 12:05:42 2002 Ossama Othman + + * examples/Bounded_Packet_Relay/bpr_thread.cpp: + * examples/Timer_Queue/main_async.cpp: + * examples/Timer_Queue/main_reactor.cpp: + * examples/Timer_Queue/main_thread.cpp: + + The recent "ace/OS.h" inclusion reductions prevented a pragma + that disables a MSVC 6 warning about an overly long debugging + symbol from occurring. Explicitly disable that warning in this + file to silence the warning. + +Fri Apr 19 11:41:12 UTC 2002 Johnny Willemsen + + * ace/Typed_SV_Message_Queue.h: + * ace/Strategies_T.h: + * ace/OS.h: + * ace/MEM_SAP.h: + * ace/Asynch_IO.h: + Doxygen-ized some of the comments + +Thu Apr 18 15:58:49 2002 Steve Huston + + * ace/Asynch_Connector.{h cpp}: Removed static member inet_addr_any_. + It doesn't work for all compilers (static in a template). Replaced + default arg for ACE_Asynch_Connector::connect with + ACE_INET_Addr ((u_short)0) to get the equivalent effect, i.e., let + the OS pick an unused port. + + * ace/Asynch_Acceptor.cpp (parse_address): Use the ACE_SOCK support + for dealing with addresses, else the ability to deal with both + IPv4 and IPv6 is lost. + Also get rid of a lot of debugging output; use ACE_TRACE instead. + + * tests/Proactor_Test.cpp: Fixed log file name. Corrected formatting + per ACE guidelines. + + * tests/run_test.lst: Enabled Proactor_Test and Proactor_Timer_Test + everywhere except Chorus, VxWorks, LynxOS. + +Thu Apr 18 11:34:12 UTC 2002 Johnny Willemsen + + * ace/Asynch_IO.h: + * ace/ATM_Params.h: + * ace/ATM_Stream.h: + * ace/Caching_Strategies_T.h: + * ace/Event_Handler.h: + * ace/MEM_Acceptor.h: + * ace/MEM_Connector.h: + * ace/MEM_SAP.h: + * ace/Memory_Pool.h: + * ace/Message_Block.h: + * ace/Message_Queue_T.h: + * ace/Pair_T.h: + * ace/Parse_Node.h: + * ace/Select_Reactor_Base.h: + * ace/Thread_Adapter.h: + * ace/Thread_Adapter.h: + * ace/Thread_Manager.h: + * ace/WIN32_Asynch_IO.h: + * ace/WIN32_Proactor.h: + Doxygen-ized some of the comments + +Tue Apr 18 07:39:12 UTC 2002 Johnny Willemsen + + * performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.h: + * performance-tests/Synch-Benchmarks/Perf_Test/Benchmark_Performance.h: + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.h: + Added include of svc_export.h. + +Wed Apr 17 18:41:30 2002 Steve Huston + + * ace/Activation_Queue.h: + * ace/Method_Request.h: Doxygen-ize and improve some documentation. + +Wed Apr 17 15:24:36 2002 Ossama Othman + + * bin/auto_run_tests.lst: + + Added ORT test to the list of tests to run. + +Wed Apr 17 14:30:29 2002 Steve Huston + + * examples/C++NPv2/display_logfile.cpp (Logrec_Module ctor): Change + name from ACE_TCHAR * to const ACE_TCHAR *. + +Wed Apr 17 10:39:24 2002 Ossama Othman + + * ace/Dev_Poll_Reactor.cpp (open): + + Corrected a potential resource (file descriptor) leak for the + "ACE_HAS_DEV_POLL" case. + + Fixed a warning. Use "ACE_NEW_RETURN" instead of "ACE_NEW." + +Wed Apr 17 10:29:14 2002 Ossama Othman + + * ace/Dev_Poll_Reactor.cpp (ACE_HAS_DEV_POLL): + + Added missing "#endif" for this configuration. + +Wed Apr 17 12:47:41 2002 Steve Huston + + * ace/WIN32_Asynch_IO.cpp (set_handle, handle_close): Fixed + "unused argument" warnings from C++Builder. + +Wed Apr 17 14:30:12 UTC 2002 Johnny Willemsen + + * ace/config-doxygen.h: + Added define UNICODE to generate ACE_Registry_Name_Space + + * ace/Proactor.h: + * ace/Proactor_Impl.h: + * ace/RB_Tree.h: + * ace/Reactor_Notification_Strategy.h: + * ace/Recyclable.h: + * ace/Registry.h: + * ace/Service_Types.h: + * ace/Signal.h: + * ace/Token_Request_Reply.h: + * ace/Typed_SV_Message.h: + Doxygen-ized some of the comments + +Wed Apr 17 12:27:23 UTC 2002 Johnny Willemsen + + * etc/ace.doxygen: + * etc/ace_man.doxygen: + Removed ACE_COMPILE_TIMEPROBES as PREDEFINED because it should be + defined in Config-doxygen.h + + * ace/Config-doxygen.h + Added ACE_COMPILE_TIMEPROBES as define to generate timeprobe + documentation. This config file is automatically included when doing + a doxygen generation. + + * ace/Intrusive_List.h: + * ace/Synch.h: + Doxygen-ized some of the comments + + * ace/Message_Queue.h: + Fixed typo + +Wed Apr 17 07:28:12 UTC 2002 Johnny Willemsen + + * examples/DLL/Newsweek.cpp: + * examples/DLL/Today.cpp: + Added include of svc_export.h. + + * tests/Proactor_Test.cpp: + Fixed fuzz and unicode error + + * ace/Asynch_Acceptor.h: + * ace/Functor.h: + * ace/Message_Queue.h: + * ace/Module.h: + * ace/Thread_Manager.h: + Doxygen-ized some of the comments + +Tue Apr 16 23:32:49 2002 Steve Huston + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Added Asynch_Connector.{h cpp} and + Asynch_Pseudo_Task.{h cpp}. + +Tue Apr 16 16:39:07 2002 Ossama Othman + + * ace/POSIX_Asynch_IO.cpp (set_handle, handle_close): + + Fixed unused argument warnings. + +Tue Apr 16 19:25:47 2002 Steve Huston + + * ace/Makefile.bor: + * ace/ace.icc: Added new Asynch_Connector and Asynch_Pseudo_Task files. + +Tue Apr 16 19:07:22 2002 Steve Huston + + * tests/Proactor_Test.cpp: Basically replaced; new version also + tests new ACE_Asynch_Connector facility. + +Tue Apr 16 18:42:39 2002 Steve Huston + + New feature, ACE_Asynch_Connect, contributed by Alex Libman + . Allows asynchronous connect using the + ACE Proactor framework. The new classes follow the same arrangement + as the existing ACE_Asynch_Accept framework. + + * ace/Asynch_Connector.{h cpp}: New files + + * ace/Asynch_IO.{h cpp}: Added new ACE_Asynch_Connect class and + its result. Added new method, ACE_Handler::handle_connect(), to + handle completion of asynch connect operations. + + * ace/Asynch_IO_Impl.{h i cpp}: Added new classes + ACE_Asynch_Connect_Impl and ACE_Asynch_Connect_Result_Impl. + + * ace/Asynch_Pseudo_Task.{h cpp}: Generalized task that handles + asynch emulation where needed, for example, asynch accept/connect. + Replaces the ACE_Asynch_Accept_Task and used for both accept/connect. + + * ace/POSIX_Asynch_IO.{h cpp}: Removed ACE_POSIX_Asynch_Accept_Task + (subsumed by ACE_Asynch_Pseudo_Task, above) and add the + ACE_POSIX_Asynch_Connect and its Result class. + + * ace/POSIX_Proactor.{h cpp}: Added asynch connect plumbing. + + * ace/Proactor.{h cpp}: Added asynch connect support methods. + + * ace/Proactor_Impl.h: Added create_asynch_connect[_result] methods. + + * ace/SUN_Proactor.cpp: Change from asynch_accept_task to + asynch_pseudo_task. + + * ace/WIN32_Asynch_IO.{h cpp}: Add new ACE_WIN32_Asynch_Connect and + _Result. + + * ace/WIN32_Proactor.{h cpp}: Added new create_asynch_connect() and + create_asynch_connect_result() methods. + + * ace/Makefile: Added Asynch_Connector, Asynch_Pseudo_Task + +Tue Apr 16 11:49:00 2002 Ossama Othman + + * ace/Service_Templates.cpp: + * ace/Thread_Manager.cpp: + + Only instantiate ACE_Auto_Basic_Ptr templates if + ACE_LACKS_AUTO_PTR is defined or if ACE_HAS_STANDARD_CPP_LIBRARY + is not defined. In the above cases, they are only used as + base classes for ACE's implementation of the standard auto_ptr + template. When using the auto_ptr implementation provided by + the standard C++ library in use, the ACE_Auto_Basic_Ptr template + instances aren't needed. Reduces footprint in cases where the + standard C++ library implementation is used, and explicit + template instantation is required. + +Tue Apr 16 14:38:12 UTC 2002 Johnny Willemsen + + * etc/ace.doxygen: + * etc/ace_man.doxygen: + Set ACE_COMPILE_TIMEPROBES as PREDEFINED so that timeprobe doxygen + documentation is generated + + * ace/Dump.h: + * ace/Message_Block.h: + * ace/Task.h: + * ace/Task_T.h: + * ace/Thread_Manager.h: + * ace/TLI_Stream.h: + Doxygen-ized some of the comments + +Tue Apr 16 11:04:12 UTC 2002 Johnny Willemsen + + * ace/Event_Handler.h: + * ace/Log_Msg.h: + * ace/Message_Block.h: + * ace/Timer_Hash_T.h: + Doxygen-ized some of the comments + +Mon Apr 15 22:25:28 2002 Balachandran Natarajan + + * THANKS: Added Andrew Guy to the hallf of fame. + +Mon Apr 15 21:43:44 2002 Krishnakumar B + + * ace/Log_Msg.cpp (log): + * ace/Log_Msg.h: + + Added new option '@' to ACE_Log_Msg to print out pointers in + hexadecimal format. This is equivalent to the "%p" option of the + standard C library printf. + +Mon Apr 15 14:04:28 2002 Ossama Othman + + * ace/Dev_Poll_Reactor.h: + * ace/Dev_Poll_Reactor.inl: + * ace/Dev_Poll_Reactor.cpp: + + Experimental implementation of a /dev/poll (or Linux /dev/epoll) + based Reactor. Refinements will be committed to the + implementation very soon. + +Mon Apr 15 11:29:49 2002 Ossama Othman + + * ace/config-win32-msvc-7.h (ACE_NEEDS_FUNC_DEFINITIONS): + + MSVC 7 requires "hidden" functions/methods to be defined. A + declaration is not enough. Fixes link-time "unresolved symbol" + errors when using the ACE_UNIMPLEMENTED_FUNC macro in exported + templates. + +Mon Apr 15 16:20:12 UTC 2002 Johnny Willemsen + + * ace/Timer_Queue_Adapters.{h,i,cpp}: + Made several additions to the ACE_Thread_Timer_Queue_Adapter + - Make it possible to pass a timer queue instance to the + ACE_Thread_Timer_Queue_Adapter instance using the constructor + - Make it possible to get/set the timer queue based on pointers, the + get method with a & is still available, but is marked as deprecated + - Make the thr_id method const + - When the timer queue is created by the + ACE_Thread_Timer_Queue_Adapter then it is also deleted, if it is + passed or set afterwards it isn't deleted by + ACE_Thread_Timer_Queue_Adapter (just like in the ACE_Reactor). + +Mon Apr 15 10:22:12 UTC 2002 Johnny Willemsen + + * ace/Containers_T.h: + Doxygen-ized some of the comments + +Mon Apr 15 08:49:23 UTC 2002 Johnny Willemsen + + * examples/Makefile.bor: + * examples/Timer_Queue/Makefile.bor: + * exmaples/Timer_Queue/Async_Timer_Queue_Test.bor: + * examples/Timer_Queue/Reactor_Timer_Queue_Test.bor: + * examples/Timer_Queue/Thread_Timer_Queue_Test.bor: + Added BCB makefiles + + * examples/Timer_Queue/main_async.cpp: + * examples/Timer_Queue/main_reactor.cpp: + * examples/Timer_Queue/main_thread.cpp: + Made the example compiling in an unicode build + +Mon Apr 15 07:39:12 UTC 2002 Johnny Willemsen + + * examples/IPC_SAP/SOCK_SAP/CPP-unclient.cpp: + * examples/IPC_SAP/SOCK_SAP/FD-unclient.cpp: + * examples/IPC_SAP/SOCK_SAP/FD-unserver.cpp: + Added include of OS.h to get ACE_TMAIN macro + + * apps/JAWS/server/HTTP_Server.h: + Added include of svc_export.h. + +Sun Apr 14 20:33:12 UTC 2002 Johnny Willemsen + + * ace/Connector.h: + * ace/Process.h: + Doxygen-ized some of the comments + +Sun Apr 14 19:25:12 UTC 2002 Johnny Willemsen + + * ace/Future.h: + Fixed small typing errors in comments + +Sun Apr 14 17:56:33 UTC 2002 Johnny Willemsen + + * ace/SOCK_Dgram_Bcast.h: + * ace/SV_Message.h: + * ace/SV_Message_Queue.h: + Doxygen-ized some of the comments + +Sun Apr 14 11:59:12 UTC 2002 Johnny Willemsen + + * ace/SPIPE_Addr.h: + * ace/Filecache.h: + * ace/Time_Request_Reply.h: + * ace/TLI.h: + Doxygen-ized some of the comments + +Sat Apr 13 19:28:40 UTC 2002 Don Hinton + + * ace/Basic_Types.h: Added include of pthread.h to pick + up typedef of pthread_key_t. + +Sat Apr 13 17:16:10 UTC 2002 Don Hinton + + * examples/Service_Configurator/IPC-tests/server/Handle_L_SPIPE.h: + * examples/ASX/CCM_App/CCM_App.cpp: + + Added include of svc_export.h. + +Sat Apr 13 15:42:03 UTC 2002 Don Hinton + + * tests/DLL_Test.{h,cpp}: + * tests/DLL_Test_Impl.{h,cpp}: Added methods to test the + the malloc/free and strnew/strdelete methods below. Also + removed use auto_ptr and added a destroy method to delete + the object within the dll/heap it was allocated. + + * ace/OS_Memory.{inl,cpp}: Changed malloc(), calloc() + realloc(), and free() to be non-inlined to avoid the heap + problem on Windows. + + * ace/ACE.{h,i,cpp}: Changed strnew() to be non-inlined and + added strdelete() for the same reason. + +Sat Apr 13 14:33:12 2002 Johnny Willemsen + + * ace/Configuration.h: + * ace/Containers_T.h: + * ace/High_Res_Timer.h: + * ace/Object_Manager.h: + * ace/Reactor.h: + * ace/Reactor_Impl.h: + * ace/Select_Reactor_T.h: + * ace/WFMO_Reactor.h: + Improved doxygen comments. Added @deprecated to methods that + are deprecated so that in the doxygen description this is also + clearly list. + +Sat Apr 13 03:32:52 2002 Krishnakumar B + + * ace/Proactor.h: + + Moved OS.h and ACE_export.h outside the #ifdef ACE_WIN32. + ACE_export.h beacuse the #else part uses it and OS.h because + sig_atomic_t is used in one of the dummy class's signatures. If + others have other opinions, please fix the case for the #else + part also. Fixes Tru64 bustage. + +Fri Apr 12 19:15:39 2002 Steve Huston + + * ace/Asynch_Acceptor.cpp (parse_address): Set the entire address + (address and port) instead of just the IP address part. + Thanks to Alex Libman for this fix. + +Fri Apr 12 18:00:41 UTC 2002 Don Hinton + + * ace/Log_Msg.h: Added missing includes. + + * ace/Basic_Types.h: Removed erroneous ENOMEM definition. + +Fri Apr 12 10:02:58 2002 Priyanka Gontla + + * ace/Based_Pointer_T.h: + Included ace/Trace.h to fix the compilation errors about + undeclared ACE_TRACE. + +Fri Apr 12 08:56:46 2002 Priyanka Gontla + + * tests/DLL_Test_Impl.cpp: + Included OS_Errno.h to fix the compilation error about + undeclared errno. + +Fri Apr 12 15:03:12 2002 Johnny Willemsen + + * etc/*.doxygen: + Set JAVADOC_AUTOBRIEF to YES. From now on, when there is only + javadoc style comments, there first line until the first '.' is + used as brief comment. In the brief class description a lof of more + methods will have a description. + + * Timer_Heap_T.h: + Change the comment style for method remove_first from doxygen style + to javadoc style + +Fri Apr 12 13:32:12 2002 Johnny Willemsen + + * ace/WFMO_Reactor.h: + * ace/Timer_List_T.h: + * ace/Timer_Heap_T.h: + * ace/Timer_Hash_T.h: + * ace/Timeprobe_T.h: + Minor improvements doxygen comments + + * ace/POSIX_Asynch_IO.h: + Doxygen-ized some of the comments + +Fri Apr 12 00:15:32 2002 Krishnakumar B + + * include/makeinclude/platform_sunos5_sunc++.GNU: + * ace/config-sunos5.5.h: + + Reverted to status quo. If and when things go fine, I will + re-enable them. Too many things breaking currently. + +Thu Apr 11 20:37:53 2002 Krishnakumar B + + * ace/OS.i (ftell): + * ace/OS.h: + + Added new wrappers for ftell, fgetpos & fsetpos. + + * ACEXML/common/FileCharStream.cpp: + * ACEXML/common/FileCharStream.h: + + Implemented the previously unavailable available() call. + +Thu Apr 11 20:06:41 2002 Steve Huston + + * examples/C++NPv2/display_logfile.cpp: Spacing/line length + changes so it fits on the book pages. + +Thu Apr 11 18:29:27 2002 Steve Huston + + * examples/C++NPv2/Makefile: New Makefile to build display_logfile. + + * examples/C++NPv2/display_logfile.cpp: Finished and debugged on Linux. + +Thu Apr 11 22:07:40 UTC 2002 Don Hinton + + * netsvcs/lib/Client_Logging_Handler.cpp: Added missing + Log_Record.h include. + + * tests/Svc_Handler_Test.cpp: + Changed ACE_Log_Record::MAXLOGMSGLEN to ACE_MAXLOGMSGLEN. + +Thu Apr 11 20:04:22 UTC 2002 Don Hinton + + * ace/ARGV.h: Rolled back the change and readded ACE.h. + Too many error down the line to fix. + + * ace/Sample_History.cpp: Added include of OS.h. + + * apps/apps/gperf/src/Options.h: Added include of OS.h. + +Thu Apr 11 14:37:09 2002 Nanbor Wang + + * ace/config-win32-common.h: Added ACE_LACKS_PARAM_H. + +Thu Apr 11 18:21:25 UTC 2002 Don Hinton + + * ace/Basic_Types.h: Added include of + to pickup MAXPATHLEN if available and get rid of warning. + +Thu Apr 11 17:37:20 UTC 2002 Don Hinton + + * ace/Basic_Types.h: Added missing typedefs for pid_t and + ssize-t for WIN32 builds needed for my Log_Msg changes + below. + +Thu Apr 11 14:42:32 UTC 2002 Don Hinton + + * ace/ARGV.h: Replaced include of ACE.h with config-all.h. + + * ace/Addr.cpp: + * ace/OS_Dirent.cpp: + * ace/Trace.cpp: + + Added include of OS.h. + + * apps/gperf/src/Bool_Array.cpp: Changed ACE_OS::memset() to + ACE_OS_String::memset() and added include of OS_String.h. + + * tests/Log_Msg_Test.cpp: + * examples/Logger/Acceptor-server.cpp: + * examples/Logger/simple-server/Logging_Handler.cpp: + * examples/Log_Msg/test_callback.cpp: + + Added includes of Log_Record.h. + + * ace/Log_Msg.{h,cpp}: + + Added new method, last_error_adapter(), and changed the + ACE_DEBUG, et al, macros to use new method instead of + ACE_OS::last_error(). Removed includes of OS.h and + Log_Record. Changed ACE_Log_Record::MAXLOGMSGLEN to + ACE_MAXLOGMSGLEN. Removed ACE_OS::cleanup_tss friend. + + * ace/Basic_Types.h: Added definition of MAXPATHLEN and + typedef of ACE_thread_t to prevent need to include OS.h + in Log_Msg.h above. + + * ace/Default_Constants.h: + * ace/OS.h: + + Moved definitions of ACE_MAXLOGMSGLEN, ACE_MAXTOKENNAMELEN, + and ACE_MAXCLIENTIDLEN here from OS.h. + +Thu Apr 11 14:26:12 2002 Johnny Willemsen + + * Timer_Hash_T.h: + * Timer_Heap_T.h: + * Timer_List_T.h: + * Timer_Wheel_T.cpp: + * Timer_Wheel_T.h: + The timer queue classes schedule timers using absolute time. The + describtion in the implementaton files correctly described this, + but the header file comment and the argument name where describing + that the queues work on delta timers, so corrected this. + + * Timer_Queue_Adapters.cpp: + * Timer_Queue_Adapters.h: + Updated the describtion that the schedule method expects an absolute + time. + +Thu Apr 11 13:29:12 2002 Johnny Willemsen + + * ace/String_Base.h: + Fixed some small typo in comment + +Thu Apr 11 08:30:11 UTC 2002 Don Hinton + + * ace/OS_String.inl (strnlen): + Fixed compile error. + +Thu Apr 11 08:16:12 2002 Johnny Willemsen + + * ace/Timer_Queue_T.cpp: + Reverted my change of yesterday. Already the copy constructor is called + + * ace/Task.h: + * ace/Timer_Queue_Adapters.h: + Fixed some small typos in comment + + * ace/Capabilities.h: + Placed right comment with right method + +Wed Apr 10 20:00:57 2002 Ossama Othman + + * ace/Proactor.h: + + Include "ace/ACE_export.h" to pull in definition of ACE_Export + macro. + +Wed Apr 10 19:53:01 2002 Ossama Othman + + * ace/Argv_Type_Converter.cpp: + + Include "ace/OS_Errno.h" to pull in ENOMEM definition. + + (align_char_with_wchar): + + Fixed remaining ACE_OS::strcmp() to be ACE_OS_String::strcmp(). + +Wed Apr 10 19:37:58 2002 Ossama Othman + + * apps/gperf/src/Bool_Array.h: + * apps/gperf/src/Iterator.h: + * apps/gperf/src/List_Node.h: + + No need to include "ace/OS.h". "ace/config-all.h" is enough. + +Wed Apr 10 19:25:39 2002 Ossama Othman + + * apps/Gateway/Gateway/Config_Files.cpp (read_entry): + + Use "unsigned short" instead of the "u_short" typedef to avoid + including "ace/OS.h". + + * apps/Gateway/Gateway/Gateway.h: + * apps/Gateway/Gateway/Event_Channel.h: + * apps/Gateway/Gateway/Options.h: + * apps/Gateway/Peer/Options.h: + * examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.h: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Dgram.h: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.h: + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.h: + * examples/Service_Configurator/Misc/Timer_Service.h: + * netsvcs/clients/Naming/Client/Client_Test.h: + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.h: + * tests/DLL_Test_Impl.cpp: + + Include "ace/svc_export.h" to pull in ACE_Svc_Export macro. + +Wed Apr 10 18:57:11 2002 Ossama Othman + + * netsvcs/lib/Client_Logging_Handler.h: + * netsvcs/lib/Name_Handler.h: + * netsvcs/lib/Server_Logging_Handler.h: + * netsvcs/lib/TS_Clerk_Handler.h: + * netsvcs/lib/TS_Server_Handler.h: + + Include "ace/svc_export.h" to pull in ACE_Svc_Export macro. + +Wed Apr 10 19:37:12 2002 Krishnakumar B + + * ace/config-g++-common.h: + + Fixed a missing #define. This should fix the Lynx PPC build. + +Wed Apr 10 17:23:09 2002 Ossama Othman + + * ace/Auto_IncDec_T.h: + + Include "ace/Global_Macros.h" to pull ACE_UNIMPLEMENTED_FUNC + macro definition. + +Wed Apr 10 19:28:27 2002 Steve Huston + + * examples/C++NPv2/display_logfile.cpp: First cut at the C++NPv2 + Streams chapter code for displaying a logfile written from any + C++NPv1 or C++NPv2 logging daemon. + +Wed Apr 10 17:38:31 2002 Steve Huston + + * ace/README: New config macros ACE_HAS_STRNLEN and ACE_HAS_WCSNLEN. + + * ace/OS_String.{h inl}: New method ACE_OS_String::strnlen finds the + length of a string with a specified maximum length. Mimicks the + GNU strnlen(3) and wcsnlen(3) functions. + + * ace/config-linux-common.h: Added ACE_HAS_STRNLEN and ACE_HAS_WCSNLEN + if _GNU_SOURCE is defined, else glibc headers doesn't declare them. + +Wed Apr 10 11:16:57 2002 Ossama Othman + + * ace/Addr.h (hash): + * ace/Addr.i (hash): + + Use "unsigned long" instead of the "u_long" typedef to avoid + including "ace/OS.h". + +Wed Apr 10 11:07:42 2002 Ossama Othman + + * ace/Method_Request.h: + + Fixed remaining "u_long" to "unsigned long" change. + +Wed Apr 10 11:04:56 2002 Ossama Othman + + * ace/Array_Base.h: + + Include "ace/Global_Macros.h" to pull in the ACE_DES_* macros + that required by the inlined ACE_Array_Base destructor. + +Wed Apr 10 11:01:56 2002 Ossama Othman + + * ace/Global_Macros.h: + * ace/OS.h: + + Moved ACE_DES_* macros to Global_Macros.h. This allows some + sources to avoid including ace/OS.h. + +Wed Apr 10 10:54:58 2002 Ossama Othman + + * ace/OS.h: + * ace/Time_Value.h: + + Moved "time" related includes from OS.h to Time_Value.h. Fixes + build problems on Unix platforms. + +Wed Apr 10 10:40:36 2002 Ossama Othman + + Inter-header dependency reductions: + + * ace/Auto_IncDec_T.h: + * ace/Auto_Ptr.h: + * ace/Based_Pointer_T.h: + * ace/Bound_Ptr.h: + * ace/Cached_Connect_Strategy_T.h: + * ace/Cache_Map_Manager_T.h: + * ace/Caching_Strategies_T.h: + * ace/Caching_Utility_T.h: + * ace/Capabilities.h: + * ace/Cleanup_Strategies_T.h: + * ace/Containers_T.h: + * ace/CORBA_macros.h: + * ace/Dynamic_Service.h: + * ace/Env_Value_T.h: + * ace/Managed_Object.h: + * ace/Map.h: + * ace/Map_Manager.h: + + No need to include "ace/OS.h". "ace/config-all.h" is enough. + + * ace/Asynch_Acceptor.h: + + No need to include "ace/OS.h". "ace/Default_Constants.h" is + enough. + + * ace/Addr.h: + * ace/Arg_Shifter.h: + * ace/Argv_Type_Converter.h: + * ace/Based_Pointer_Repository.h: + * ace/Containers.h: + * ace/Containers.cpp: + * ace/Init_ACE.h: + * ace/Trace.h: + + No need to include "ace/OS.h". "ace/ACE_export.h" is enough. + + * ace/RB_Tree.h: + + No need to include "ace/OS.h". "ace/Global_Macros.h" is + enough. + + * ace/Global_Macros.h: + + Moved ACE_GUARD macros to this file, meaning that it is no + longer necessary to include "ace/OS.h" just to get those + macros. This should save on pre-processing times for some + sources. + + Include "ace/OS_Export.h" to pull in the ACE_OS_Export macro + definitions. + + * ace/Arg_Shifter.cpp: + * ace/Argv_Type_Converter.cpp: + + Include "ace/OS_String.h" to pull in static string manipulation + methods. + + Changed all ACE_OS string method calls to ACE_OS_String. + + * ace/Trace.cpp: + + Minor include file cosmetic tweaks. + + * ace/Time_Value.h: + * ace/Time_Value.inl: + * ace/Time_Value.cpp: + + Moved ACE_Time_Value class and related macros/constants to these + files. Files that only need the ACE_Time_Value class + declaration need only include this header instead of "ace/OS.h", + thus reducing pre-processing times. + + * ace/OS.h: + + Moved ACE_Time_Value class and ACE_GUARD macros out of this + header. + + * ace/OS.i: + * ace/OS.cpp: + + Moved ACE_Time_Value methods out of the files into the new + Time_Value.* files. + + * ace/Init_ACE.cpp: + + Use "unsigned int" instead of the "u_int" typedef to avoid + including "ace/OS.h". + + * ace/Hashable.h: + * ace/Hashable.cpp: + * ace/Method_Request.h: + * ace/Method_Request.cpp: + + No need to include "ace/OS.h". "ace/ACE_export.h" is enough. + + Use "unsigned long" instead of the "u_long" typedef to avoid + including "ace/OS.h". + + * ace/Proactor.h: + + No need to include "ace/OS.h" to pull in ACE_Time_Value class + declaration. A forward declaration is enough. + + * ace/Argv_Type_Converter.inl: + * ace/CE_Screen_Output.h: + + Cosmetic changes to improve conformance to our coding + style/guidelines. + + * ace/config-all.h: + + No need to include "ace/ACE_export.h" and "ace/svc_export.h". + They should only be included by headers that need them. + + Do not include "ace/OS_Errno.h". Fixes a circular dependency. + + * ace/Copy_Disabled.h: + * ace/Dirent.h: + * ace/Log_Msg_Backend.h: + * ace/Refcountable.h: + * ace/Recyclable.h: + * ace/String_Base_Const.h: + * ace/Thread_Adapter.h: + + Include "ace/ACE_export.h" to pull in definition of ACE_Export + macro. + + * ace/OS_Export.h: + + Include "ace/config.h" instead of "ace/config-all.h" to fix a + circular include. + + * ace/OS_Errno.h: + + No need to include "ace/config.h". It is already included + indirectly by "ace/OS_Export.h". + + * ace/OS_Dirent.h: + + Include "ace/OS_Errno.h" to pull in errno definitions. + + * ace/Handle_Ops.h: + + Include "ace/ACE_export.h" to pull in ACE_Export macro + definition. + + Added missing "#pragma once". + + * ace/Makefile: + * ace/Makefile.bor: + + Added new Time_Value.* sources to these Makefiles. + +Wed Apr 10 13:32:15 2002 Johnny Willemsen + + * ace/Token.h: + * ace/Timer_Queue_T.h: + Doxygen-ized some of the comments + + * ace/Select_Reactor_T.cpp: + Fixed typo in comment + +Wed Apr 10 07:44:12 2002 Johnny Willemsen + + * ace/Timer_Queue_T.cpp: + Instead of creating a ACE_Time_Value with the default constructor + and immediatly filling it with the assignment operator, create the + ACE_Time_Value with the copy constructor + + * examples/Logger/simple-server/Logging_Acceptor.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.h: + * examples/Reactor/Misc/test_signals_2.cpp: + Added missing includes of Log_Msg.h. These where caused by the + compilation speedup of Don Hinton on April 5th. + + * ace/Name_Request_Reply.h: + +Tue Apr 9 22:59:20 2002 Krishnakumar B + + * ace/config-sunos5.5.h: + + Added ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES to fix errors. + + * ace/config-sunos5.6.h: + + Removed definition of ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION as + we turn it on on the command line. + +Tue Apr 9 19:48:15 2002 Krishnakumar B + + * include/makeinclude/platform_osf1_4.x_cxx.GNU (LDFLAGS): + + Moved the -hidden and -non_hidden from LIBS to LDFLAGS. The + linker doesn't like it seeing at the end. This fixes the + problems with Tru64. + +Tue Apr 9 12:43:04 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added POA_BiDir to the list of tests to + be run and prevented MT_BiDir from running in minimum_corba + builds. + +Tue Apr 9 11:46:52 2002 Steve Huston + + * ace/Message_Block.h: Doxygen tweaks to block type enum. + +Tue Apr 9 11:20:19 2002 Steve Huston + + * netsvcs/Server_Logging_Handler_T.cpp (handle_logging_record): + Moved variable 'count' inside the #if 0 block so it's not flagged + as unused. + +Tue Apr 9 15:02:12 2002 Johnny Willemsen + + * ace/Containers_T.h: + Fixed two small typos + + * ace/Thread_Manager.h: + Doxygen-ized some of the comments + +Tue Apr 9 03:04:19 2002 Krishnakumar B + + * include/makeinclude/rules.lib.GNU (VLIB): + + Ensure that templates in the repository get added to the static + library during creation. This build now uses a new variable + called TMPINCDIR which points to the template repository from + which the templates should be pulled in. + + * include/makeinclude/platform_osf1_4.x_cxx.GNU: + + Added support for different template instantiations. + + * include/makeinclude/platform_tru64_cxx.GNU: + + Removed some repeated flags from the command line. + + * ace/config-cxx-common.h: + + Added ACE_TEMPLATES_REQUIRE_SOURCE to pull in the template + definitions to ensure proper template instantiation. + +Tue Apr 9 00:52:42 2002 Krishnakumar B + + * ace/config-sunos5.5.h (ACE_TEMPLATES_REQUIRE_SOURCE): + + Moved this from within a guard to enable it unconditionally. + + * ace/Obstack_T.cpp: + + Added guards to make it consistent with other usage of _T.cpp + files. + + * tests/test_config.h: + + Reverted the change Sun Apr 7 18:04:56 2002 Krishnakumar B + . The original code was right. + + * include/makeinclude/platform_g++_common.GNU: + + Cosmetic fixes. Explicitly check for egcs. It dumps out version + information in a non-standard format confusing the make + conditionals. Should fix the RedHat Static build. + + * include/makeinclude/platform_sunos5_sunc++.GNU: + + Cosmetic fixes to fix build bustage. + +Tue Apr 9 00:05:37 2002 Douglas C. Schmidt + + * ace/Logging_Strategy.h (ACE_Logging_Strategy): Changed "private" to + "protected" so subclasses can access the implementation. Thanks + to Martin Krumpolec for reporting this. This + fixes bugid 1182. + +Mon Apr 8 13:18:12 2002 Johnny Willemsen + + * ace/Activation_Queue.h: + Corrected location of doxygen comments so that the right comment + is placed below the right method + +Sun Apr 7 18:04:56 2002 Krishnakumar B + + * tests/test_config.h (randomize): + + Wrapped the initialization of singleton_ within a + ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES guard. This should fix + the problems on FreeBSD and under RedHat static. Thanks to Craig + Rodrigues for reporting this. + +Sun Apr 7 06:02:26 2002 Krishnakumar B + + * include/makeinclude/platform_lynxos.GNU: + * include/makeinclude/platform_macosx.GNU: + + Didn't know that these platforms used g++. Fixing them. + +Sun Apr 7 05:27:35 2002 Krishnakumar B + + * include/makeinclude/platform_g++_common.GNU: + + Fixed a comment from the previous checkin. + + * include/makeinclude/platform_sunos5_sunc++.GNU: + * include/makeinclude/platform_sunos5_ghs.GNU: + * include/makeinclude/platform_sunos5_kcc.GNU: + + Changed these files to the new template instantiation mechanism. + + * tests/test_config.h: + + Added missing definition for the template member. + +Sun Apr 7 04:22:19 2002 Krishnakumar B + + * include/makeinclude/wrapper_macros.GNU(templates): + + Added option templates which can be used to specify the + instantiation policy desired. Allowed values are explicit, + automatic and used. Added flag TEMPLATE_FLAGS which should be + set to the proper value in each of the platform config files. + + * include/makeinclude/platform_g++_common.GNU: + + New file which holds the parsing and setting logic for GNU C++. + + * include/makeinclude/platform_aix4_g++.GNU(templates): + * include/makeinclude/platform_aix_g++.GNU: + * include/makeinclude/platform_chorus4.x_g++.GNU: + * include/makeinclude/platform_freebsd.GNU: + * include/makeinclude/platform_gnuwin32_common.GNU: + * include/makeinclude/platform_hpux_gcc.GNU: + * include/makeinclude/platform_irix5.3_g++.GNU: + * include/makeinclude/platform_irix6.x_g++.GNU: + * include/makeinclude/platform_linux.GNU: + * include/makeinclude/platform_osf1_4.x_g++.GNU: + * include/makeinclude/platform_psosim_g++.GNU: + * include/makeinclude/platform_rtems.x_g++.GNU: + * include/makeinclude/platform_sco5.0.0-mit-pthread.GNU: + * include/makeinclude/platform_sco5.0.0-nothread.GNU: + * include/makeinclude/platform_sunos4_g++.GNU: + * include/makeinclude/platform_sunos5_g++.GNU: + * include/makeinclude/platform_unixware_g++.GNU: + + For all of the platforms above, when using g++ versions 2.95.x, + 2.96, 3.0.x or 3.x or later, the instantiation policy is set to + automatic. + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + + Only exception to the above. The kind of parsing that is done in + this file scares me. So I explicitly set it to "explicit". + + Thanks to Alex Libman for motivating + this. + + If people with any of the above platforms can test if this works + for them, it would be great. If suddenly your files don't link, + just set templates="explicit" in platform_macros.GNU and all + will be fine. This one was easy :-) Next round of changes is for + the above platforms with different compilers. + +Sun Apr 7 04:02:23 2002 Krishnakumar B + + * ace/config-g++-common.h (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES): + + Moved common definitions for egcs into a single block. Wrapped + ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES inside appropriate + compiler checks. + + * ace/config-all.h: + + Added a negation before check for + ACE_HAS_GNUC_BROKEN_TEMPLATE_INLINE_FUNCTIONS. + + * ace/config-sunos5.5.h: + + Enabled ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION and + ACE_TEMPLATES_REQUIRE_SOURCE only if Sun CC version <= 5.0. + +Sun Apr 07 10:25:12 2002 Johnny Willemsen + + * examples/IPC_SAP/SOCK_SAP/FD-unserver.cpp: + * examples/IPC_SAP/SOCK_SAP/FD-unclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-unclient.cpp: + Added include of Log_Msg.h to fix build errors in BCB + +Fri Apr 05 21:17:44 2002 Balachandran Natarajan + + * ace/CDR_Stream.cpp: Initialized a null wstring properly. + + * tests/CDR_Test.cpp (test_get): Added a test case for a + marshalling and unmarshalling a zero length wstring. + + The above changes fix [Bug 1169]. Thanks to Duane Binder + for suggesting these fixes. + +Fri Apr 5 19:20:39 2002 Steve Huston + + * ace/Proactor.h: Add #include "ace/OS.h" in the "non-AIO" section + to get the ACE_Time_Value class needed for the stubbed-out class. + + * ace/config-aix-4.x.h: Add some commentary about ACE_HAS_AIO_CALLS. + + * ace/Service_Manager.cpp: Added #include "ace/Log_Msg.h" to fix a + compile problem on AIX. + +Fri Apr 5 11:30:00 2002 Justin Michel + + * ace/OS.i: + * ace/config-win32-common.h: + + SO_REUSEADDR fix brought over from 1.2a + FD_SETSIZE fix brought over from 1.2a + Thanks to Juergen Pfreundt for + motivating this. + +Fri Apr 5 07:45:54 2002 Balachandran Natarajan + + * ace/Local_Tokens.cpp: Fixed a compile error. + +Fri Apr 5 12:51:11 UTC 2002 Don Hinton + + * ace/ACE.i (strnew): Added null pointer check to + the wchar_t version so its behavior matches the char + version. + +Fri Apr 5 11:40:00 UTC 2002 Don Hinton + + * ace/ATM_Acceptor.h + * ace/ATM_Addr.cpp + * ace/ATM_Addr.h + * ace/ATM_Connector.cpp + * ace/ATM_Connector.h + * ace/ATM_Params.h + * ace/ATM_QoS.h + * ace/ATM_Stream.h + * ace/Asynch_Acceptor.h + * ace/Asynch_IO.h + * ace/Asynch_IO_Impl.cpp + * ace/Asynch_IO_Impl.h + * ace/CE_Screen_Output.cpp + * ace/CE_Screen_Output.h + * ace/FlReactor.cpp + * ace/FlReactor.h + * ace/IOStream.h + * ace/LSOCK.cpp + * ace/LSOCK.h + * ace/LSOCK_Acceptor.cpp + * ace/LSOCK_Acceptor.h + * ace/LSOCK_CODgram.cpp + * ace/LSOCK_CODgram.h + * ace/LSOCK_Connector.cpp + * ace/LSOCK_Connector.h + * ace/LSOCK_Dgram.cpp + * ace/LSOCK_Dgram.h + * ace/LSOCK_Stream.cpp + * ace/LSOCK_Stream.h + * ace/Local_Tokens.cpp + * ace/Local_Tokens. + * ace/Msg_WFMO_Reactor.h + * ace/POSIX_Asynch_IO.h + * ace/POSIX_Proactor.h + * ace/Proactor.cpp + * ace/Proactor.h + * ace/Proactor_Impl.h + * ace/QtReactor.h + * ace/Reactor.cpp + * ace/SUN_Proactor.h + * ace/TkReactor.cpp + * ace/TkReactor.h + * ace/UNIX_Addr.cpp + * ace/UNIX_Addr.h + * ace/WFMO_Reactor.cpp + * ace/WFMO_Reactor.h + * ace/WIN32_Asynch_IO.h + * ace/WIN32_Proactor.h + * ace/XTI_ATM_Mcast.h + * ace/XtReactor.cpp + * ace/XtReactor.h + Moved all includes inside the platform- or feature-specific + macro guards and added config-all.h to the headers in order + to speed up compiles when the guard isn't defined. + +Fri Apr 5 08:51:12 2002 Johnny Willemsen + + * apps/Gateway/Peer/Peer.h: + Added missing explicit template instantion exports for msvc7. + Thanks to Tom Phan for reporting this + +Thu Apr 4 21:01:11 2002 Carlos O'Ryan + + * ace/SOCK_Dgram.cpp: + I accidentally left out some code in my last change, without it + platforms that lack IPV6 support will probably break. Whoopsie. + +Thu Apr 4 20:39:51 2002 Carlos O'Ryan + + * bin/g++dep: + Remove bogus path(s) to find gcc, they were site-specific, + host-specific and version-specific, and then outdated at + that. The developer better has a decent version of gcc in her + PATH already, or the 'make depend' commands simply won't work. + +Thu Apr 4 13:17:52 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added a new test to the list of tests + that need to be run. + +Thu Apr 4 11:52:45 2002 Carlos O'Ryan + + * ace/SOCK_Dgram.cpp: + Add support for anonymous PF_LOCAL/SOCK_DGRAM (aka + PF_UNIX/SOCK_DGRAM) sockets. As the class stood before these + changes it was impossible to create such sockets, forcing people + to choose a binding address even for sockets that are used only + to send messages. For PF_INET this is not a big deal, because + the OS (or ACE::bind_port) can choose a port for the + application. But there is no such luck for PF_LOCAL sockets, + where the application has to choose a filename for the socket, + functions like ACE_OS::tempnam() or ACE_OS::mktemp() are more + trouble than they are worth, as they open a security can of + worms. + This fixes bug 1179. + +Thu Apr 4 10:30:54 2002 Balachandran Natarajan + + * ace/RMCast/Makefile: + * ace/SSL/Makefile: + * ace/Makefile: Updated dependency. Other directories need this + too. Will get to them before the beta. + +Thu Apr 4 11:05:48 2002 Carlos O'Ryan + + * ace/Select_Reactor_Base.cpp: + Apply proposed patch for bug 1175, i.e. a possible deadlock + condition when ACE_HAS_REACTOR_NOTIFICATION_QUEUE is defined. + +Thu Apr 4 08:32:26 UTC 2002 Don Hinton + + * ace/CDR_Stream.cpp (ctor): + Modified default ctor to always add ACE_CDR::MAX_ALIGNMENT to + the size parameter since it is always required since the + subsequent call to ACE_CDR::mb_align() might advance the + (rd|wr)_ptr's up to ACE_CDR::MAX_ALIGNMENT-1 bytes. + +Wed Apr 3 18:01:33 2002 Steve Huston + + * ace/SOCK_Dgram.cpp (shared_open): Add PF_INET6 to the test for + need to bind an unused port if ACE_HAS_IPV6 is defined. + +Wed Apr 3 11:04:37 2002 Steve Huston + + * ace/Handle_Ops.{h, cpp} (handle_timed_open): + * ace/SPIPE_Connector.{h cpp} (ctor, connect): Added optional + LPSECURITY_ATTRIBTUES arg, defaults to 0. Allows Windows users + to set security for the new file/pipe open. + + * ace/SPIPE_Acceptor.{h cpp} (ctor, open): Added optional + LPSECURITY_ATTRIBUTES arg, defaults to 0, same as above. + Also added a LPSECURITY_ATTRIBUTES member for NT4 and up. + The LPSECURITY_ATTRIBUTES passed in is remembered across + named pipe instances, and is used to create each new instance. + Doxygen-ized the comments. + +Wed Apr 3 10:15:00 2002 Si Mong Park + + * tests/Atomic_Op_Test_WinCE.vcp: + * tests/Auto_IncDec_Test_WinCE.vcp: + * tests/Barrier_Test_WinCE.vcp: + * tests/Basic_Types_Test_WinCE.vcp: + * tests/Bound_Ptr_Test_WinCE.vcp: + * tests/Buffer_Stream_Test_WinCE.vcp: + * tests/Cached_Accept_Conn_Test_WinCE.vcp: + * tests/Cached_Conn_Test_WinCE.vcp: + * tests/Cache_Map_Manager_Test_WinCE.vcp: + * tests/Capabilities_Test_WinCE.vcp: + * tests/CDR_Array_Test_WinCE.vcp: + * tests/CDR_File_Test_WinCE.vcp: + * tests/CDR_Test_WinCE.vcp: + * tests/Collection_Test_WinCE.vcp: + * tests/Conn_Test_WinCE.vcp: + * tests/DLList_Test_WinCE.vcp: + * tests/DLL_Test_WinCE.vcp: + * tests/Dynamic_Priority_Test_WinCE.vcp: + * tests/Enum_Interfaces_Test_WinCE.vcp: + * tests/Future_Set_Test_WinCE.vcp: + * tests/Future_Test_WinCE.vcp: + * tests/Handle_Set_Test_WinCE.vcp: + * tests/Hash_Map_Bucket_Iterator_Test_WinCE.vcp: + * tests/Hash_Map_Manager_Test_WinCE.vcp: + * tests/High_Res_Timer_Test_WinCE.vcp: + * tests/Lazy_Map_Manager_Test_WinCE.vcp: + * tests/Logging_Strategy_Test_WinCE.vcp: + * tests/Log_Msg_Test_WinCE.vcp: + * tests/Malloc_Test_WinCE.vcp: + * tests/Map_Manager_Test_WinCE.vcp: + * tests/Map_Test_WinCE.vcp: + * tests/Max_Default_Port_Test_WinCE.vcp: + * tests/Mem_Map_Test_WinCE.vcp: + * tests/MEM_Stream_Test_WinCE.vcp: + * tests/Message_Block_Test_WinCE.vcp: + * tests/Message_Queue_Notifications_Test_WinCE.vcp: + * tests/Message_Queue_Test_Ex_WinCE.vcp: + * tests/Message_Queue_Test_WinCE.vcp: + * tests/MM_Shared_Memory_Test_WinCE.vcp: + * tests/MT_Reactor_Timer_Test_WinCE.vcp: + * tests/MT_SOCK_Test_WinCE.vcp: + * tests/Naming_Test_WinCE.vcp: + * tests/New_Fail_Test_WinCE.vcp: + * tests/Notify_Performance_Test_WinCE.vcp: + * tests/Object_Manager_Test_WinCE.vcp: + * tests/OrdMultiSet_Test_WinCE.vcp: + * tests/OS_Test_WinCE.vcp: + * tests/Priority_Buffer_Test_WinCE.vcp: + * tests/Priority_Reactor_Test_WinCE.vcp: + * tests/Priority_Task_Test_WinCE.vcp: + * tests/Process_Manager_Test_WinCE.vcp: + * tests/RB_Tree_Test_WinCE.vcp: + * tests/Reactors_Test_WinCE.vcp: + * tests/Reactor_Exceptions_Test_WinCE.vcp: + * tests/Reactor_Notify_Test_WinCE.vcp: + * tests/Reactor_Performance_Test_WinCE.vcp: + * tests/Reactor_Timer_Test_WinCE.vcp: + * tests/Reader_Writer_Test_WinCE.vcp: + * tests/Recursive_Mutex_Test_WinCE.vcp: + * tests/Refcounted_Auto_Ptr_Test_WinCE.vcp: + * tests/Reverse_Lock_Test_WinCE.vcp: + * tests/Semaphore_Test_WinCE.vcp: + * tests/Service_Config_Test_WinCE.vcp: + * tests/Sigset_Ops_Test_WinCE.vcp: + * tests/Simple_Message_Block_Test_WinCE.vcp: + * tests/SOCK_Connector_Test_WinCE.vcp: + * tests/SOCK_Send_Recv_Test_WinCE.vcp: + * tests/SOCK_Test_WinCE.vcp: + * tests/SPIPE_Test_WinCE.vcp: + * tests/SString_Test_WinCE.vcp: + * tests/Svc_Handler_Test_WinCE.vcp: + * tests/Task_Test_WinCE.vcp: + * tests/Thread_Manager_Test_WinCE.vcp: + * tests/Thread_Mutex_Test_WinCE.vcp: + * tests/Thread_Pool_Reactor_Resume_Test_WinCE.vcp: + * tests/Thread_Pool_Reactor_Test_WinCE.vcp: + * tests/Thread_Pool_Test_WinCE.vcp: + * tests/Timeprobe_Test_WinCE.vcp: + * tests/Timer_Queue_Test_WinCE.vcp: + * tests/Time_Service_Test_WinCE.vcp: + * tests/Time_Value_Test_WinCE.vcp: + * tests/Tokens_Test_WinCE.vcp: + * tests/TSS_Test_WinCE.vcp: + * tests/Upgradable_RW_Test_WinCE.vcp: + Added aygshell.lib to the link option. + +Wed Apr 3 00:03:05 2002 Krishnakumar B + + * include/makeinclude/platform_sunos5_g++.GNU (exceptions): + * include/makeinclude/platform_qnx_neutrino.GNU: + * include/makeinclude/platform_qnx_rtp_gcc.GNU: + + Removed redefinitions of ACE_HAS_GNUG_PRE_2_8 as they were + unnecessary. Some more files also seem to be abusing this flag. + But I don't have access to those exotic platforms. + +Tue Apr 2 19:36:31 2002 Steve Huston + + * ace/OS_String.inl (strtok_r): Another variant of wcstok()... + Linux/glibc uses the 3-arg version of wcstok(), and says it's + from UNIX98 and ISO/ANSI C. + +Tue Apr 2 16:21:39 2002 Steve Huston + + * ace/Get_Opt.h: Doxygen-ized the comments. + +Tue Apr 02 15:12:10 2002 Nanbor Wang + + * bin/nightlybuilds/builds.lst: Removed KCC builds from the list. + +Tue Apr 2 14:02:06 2002 Chris Cleeland + + * ace/SSL/SSL_Context.cpp (dh_params): Changed this to use the + OpenSSL 'BIO' abstraction for file i/o rather than file pointers. + Using file pointers caused problems on Win32 platforms, and BIOs + don't. So, despite the fact that it's ugly and pollutes ACE code + with an OpenSSL abstraction, at least it works. We'll have to + figure out a more palatable way of dealing with this eventually. + +Tue Apr 2 12:53:00 2002 Si Mong Park + + * ace/Argv_Type_Converter.cpp: + Fixed possible memory leak in the Dtor with incorrect counter of + argv. Thanks to Don Hinton for finding this bug. + +Mon Apr 1 18:27:46 2002 Steve Huston + + * ace/OS_String.inl (strtok_r): Corrected decision to call + wcstok() or wcstok_r(). This fixes builds on HP-UX 11. +Mon Apr 1 16:35:29 2002 Steve Huston + + * ace/Containers_T.h (ACE_Array): Added performance characteristics + and requirements table. + +Mon Apr 1 11:56:55 2002 Steve Totten + + * ace/Process.h: + * ace/Process.cpp: + + Applied change from Rich Seibel to add a + reset for the command_line_calculated_ flag (three places) and + rewrote the description of command_line_buf(). + +Mon Apr 1 12:38:44 2002 Steve Huston + + * ace/Asynch_Acceptor.h: Corrected @arg to be @a for Doxygen. + +Sun Mar 31 22:44:00 2002 Si Mong Park + + * apps/FaCE/FaCE_OS.h: + * apps/FaCE/FaCE.cpp: + * apps/FaCE/Main.cpp: + Changed 'LPWSTR' to 'ACE_TCHAR*' and 'LPCTSTR' to 'const ACE_TCHAR*'. + Also removed fuzz no-checking header to enable fuzz again. + +Sun Mar 31 22:08:00 2002 Si Mong Park + + * ChangeLog: + Fixed incorrect path for FaCE related files on prior change log + items. + +Sat Mar 30 08:58:57 2002 Douglas C. Schmidt + + * ace/Asynch_Acceptor.cpp: (handle_accept): Removed a stray + ACE_DEBUG() call. + Thanks to Edan Ayal for reporting this. + +Sun Mar 31 01:18:00 2002 Si Mong Park + + * apps/FaCE/FaCE_OS.h: + * apps/FaCE/FaCE.cpp: + * apps/FaCE/Main.cpp: + Added "// FUZZ: disable check_for_tchar" as the code is only and + specifically for the WinCE. Thanks to Nanbor Wang for help. + + * apps/CE_ARGV.H: + * apps/CE_ARGV.CPP: + Minor lower/upper case change in the include statement. + +Sat Mar 30 22:19:00 2002 Si Mong Park + + * ace/OS.h: + Removed FaCE_MAIN definition originally added during WinCE port + and moved to FaCE_OS.h in the FaCE package since it is FaCE + specific macro. + + * apps/FaCE/Face_OS.h: + Contains FaCE_MAIN macro definition to set entry point on WinCE. + + * apps/FaCE/ReadMe.txt: + Updated installation part for FacE_OS.h. + +Fri Mar 29 17:35:39 2002 Steve Huston + + * ace/Proactor.h: Doxygen-ize some comments; correct the + close() comment (no I/O completion port is known at this level). + +Fri Mar 29 13:40:00 2002 Si Mong Park + + * ace/OS.h: + Minor fix for WinCE IDC name. + + * apps/FaCE/ACE.ico: + * apps/FaCE/ACE_Racer.bmp: + * apps/FaCE/CE_ARGV.CPP + * apps/FaCE/CE_ARGV.H + * apps/FaCE/CE_Screen_Output.cpp: + * apps/FaCE/CE_Screen_Output.h: + * apps/FaCE/FaCE.cpp: + * apps/FaCE/FaCE.h: + * apps/FaCE/FACE.ico: + * apps/FaCE/FaCE.rc: + * apps/FaCE/FaCE.vcp: + * apps/FaCE/FaCE.vcw: + * apps/FaCE/FaCENOACE.vcp: + * apps/FaCE/FaCENOACE.vcw: + * apps/FaCE/License.txt: + * apps/FaCE/Main.cpp: + * apps/FaCE/newres.h: + * apps/FaCE/ReadMe.txt: + * apps/FaCE/resource.h + * apps/FaCE/TAO.BMP: + A new front-end framework utility/plug-in for ACE on WinCE. + +Fri Mar 29 11:33:00 2002 Si Mong Park + + * ace/ace_dll.vcp: + * tests/Refcounted_Auto_Ptr_Test_WinCE.vcp: + * tests/Service_Config_DLL_WinCE.vcp: + Added few files into project. + + * tests/CE_fostream.h: + * tests/CE_fostream.cpp: + A class that simulates fostream on WinCE for CDR File test. + + * tests/Bound_Ptr_Test.cpp: + * tests/CDR_File_Test.cpp: + * tests/Log_Msg_Test.cpp: + * tests/Logging_Strategy_Test.cpp: + * tests/Malloc_Test.cpp: + * tests/MEM_Stream_Test.cpp: + * tests/MM_Shared_Memory_Test.cpp: + * tests/MT_SOCK_Test.cpp: + * tests/Priority_Task_Test.cpp: + * tests/Refcounted_Auto_Ptr_Test.cpp: + * tests/SOCK_Send_Recv_Test.cpp: + * tests/SOCK_Test.cpp: + * tests/Svc_Handler_Test.cpp: + * tests/Thread_Pool_Test.cpp: + Minor updates for WinCE build. + +Fri Mar 29 11:08:29 2002 Steve Huston + + * ace/Asynch_Acceptor.h: Doxygen-ized the method comments. + +Fri Mar 29 02:50:33 2002 Craig Rodrigues + + * examples/QOS/Diffserv/README: Update links to RFC's for + Expedited Forwarding. + +Fri Mar 29 08:32:12 2002 Johnny Willemsen + + * tests/Makefile.bor: + Added new Cached_Allocator_Test + + * tests/Cached_Allocator_Test.cpp: + Fixed unicode build errors + +Thu Mar 28 23:47:00 2002 Si Mong Park + + * ace/OS.h: + * ace/OS.cpp: + Fixed WinCE entry point definitions, and factored out Unicode format + checking parts as a separate function for both WinCE and Unicode builds. + + * ace/config-WinCE.h: + Commented out the part that 'forces' WinCE to use DLL only. The + 'commented out' part has been left for possible future reference. + + * tests/test_config.h: + Changed path settings for WinCE file system as CE only supports absolute- + path and does not have concept of './'. + + * tests/tests_WinCE.vcw: + * tests/ARGV_Test_WinCE.vcp: + * tests/Atomic_Op_Test_WinCE.vcp: + * tests/Auto_IncDec_Test_WinCE.vcp: + * tests/Barrier_Test_WinCE.vcp: + * tests/Basic_Types_Test_WinCE.vcp: + * tests/Bound_Ptr_Test_WinCE.vcp: + * tests/Buffer_Stream_Test_WinCE.vcp: + * tests/Cached_Accept_Conn_Test_WinCE.vcp: + * tests/Cached_Conn_Test_WinCE.vcp: + * tests/Cache_Map_Manager_Test_WinCE.vcp: + * tests/Capabilities_Test_WinCE.vcp: + * tests/CDR_Array_Test_WinCE.vcp: + * tests/CDR_File_Test_WinCE.vcp: + * tests/CDR_Test_WinCE.vcp: + * tests/Collection_Test_WinCE.vcp: + * tests/Conn_Test_WinCE.vcp: + * tests/DLList_Test_WinCE.vcp: + * tests/DLL_Test_DLL_WinCE.vcp: + * tests/DLL_Test_WinCE.vcp: + * tests/Dynamic_Priority_Test_WinCE.vcp: + * tests/Enum_Interfaces_Test_WinCE.vcp: + * tests/Future_Set_Test_WinCE.vcp: + * tests/Future_Test_WinCE.vcp: + * tests/Handle_Set_Test_WinCE.vcp: + * tests/Hash_Map_Bucket_Iterator_Test_WinCE.vcp: + * tests/Hash_Map_Manager_Test_WinCE.vcp: + * tests/High_Res_Timer_Test_WinCE.vcp: + * tests/Lazy_Map_Manager_Test_WinCE.vcp: + * tests/Logging_Strategy_Test_WinCE.vcp: + * tests/Log_Msg_Test_WinCE.vcp: + * tests/Malloc_Test_WinCE.vcp: + * tests/Map_Manager_Test_WinCE.vcp: + * tests/Map_Test_WinCE.vcp: + * tests/Max_Default_Port_Test_WinCE.vcp: + * tests/Mem_Map_Test_WinCE.vcp: + * tests/MEM_Stream_Test_WinCE.vcp: + * tests/Message_Block_Test_WinCE.vcp: + * tests/Message_Queue_Notifications_Test_WinCE.vcp: + * tests/Message_Queue_Test_Ex_WinCE.vcp: + * tests/Message_Queue_Test_WinCE.vcp: + * tests/MM_Shared_Memory_Test_WinCE.vcp: + * tests/MT_Reactor_Timer_Test_WinCE.vcp: + * tests/MT_SOCK_Test_WinCE.vcp: + * tests/Naming_Test_WinCE.vcp: + * tests/New_Fail_Test_WinCE.vcp: + * tests/Notify_Performance_Test_WinCE.vcp: + * tests/Object_Manager_Test_WinCE.vcp: + * tests/OrdMultiSet_Test_WinCE.vcp: + * tests/OS_Test_WinCE.vcp: + * tests/Priority_Buffer_Test_WinCE.vcp: + * tests/Priority_Reactor_Test_WinCE.vcp: + * tests/Priority_Task_Test_WinCE.vcp: + * tests/Process_Manager_Test_WinCE.vcp: + * tests/RB_Tree_Test_WinCE.vcp: + * tests/Reactors_Test_WinCE.vcp: + * tests/Reactor_Exceptions_Test_WinCE.vcp: + * tests/Reactor_Notify_Test_WinCE.vcp: + * tests/Reactor_Performance_Test_WinCE.vcp: + * tests/Reactor_Timer_Test_WinCE.vcp: + * tests/Reader_Writer_Test_WinCE.vcp: + * tests/Recursive_Mutex_Test_WinCE.vcp: + * tests/Refcounted_Auto_Ptr_Test_WinCE.vcp: + * tests/Reverse_Lock_Test_WinCE.vcp: + * tests/Semaphore_Test_WinCE.vcp: + * tests/Service_Config_DLL_WinCE.vcp: + * tests/Service_Config_Test_WinCE.vcp: + * tests/Sigset_Ops_Test_WinCE.vcp: + * tests/Simple_Message_Block_Test_WinCE.vcp: + * tests/SOCK_Connector_Test_WinCE.vcp: + * tests/SOCK_Send_Recv_Test_WinCE.vcp: + * tests/SOCK_Test_WinCE.vcp: + * tests/SPIPE_Test_WinCE.vcp: + * tests/SString_Test_WinCE.vcp: + * tests/Svc_Handler_Test_WinCE.vcp: + * tests/Task_Test_WinCE.vcp: + * tests/Thread_Manager_Test_WinCE.vcp: + * tests/Thread_Mutex_Test_WinCE.vcp: + * tests/Thread_Pool_Reactor_Resume_Test_WinCE.vcp: + * tests/Thread_Pool_Reactor_Test_WinCE.vcp: + * tests/Thread_Pool_Test_WinCE.vcp: + * tests/Timeprobe_Test_WinCE.vcp: + * tests/Timer_Queue_Test_WinCE.vcp: + * tests/Time_Service_Test_WinCE.vcp: + * tests/Time_Value_Test_WinCE.vcp: + * tests/Tokens_Test_WinCE.vcp: + * tests/TSS_Test_WinCE.vcp: + * tests/Upgradable_RW_Test_WinCE.vcp: + Project files for WinCE build on eMbedded Visual C++ 3.0. + Note that some tests run fine under emulator but not on the real + machine, and some tests run okay on WinCE 3.0 but not on Pocket PC 2002. + The missing tests are mostly not supported by WinCE 3.0/PPC 2002. + For example, WinCE does not have 'fork' or environment variables. + Also, WinCE supports memory mapped file; however, the method is so different + to other Windows platforms that it is really hard to make it work correctly + on current ACE mem-map function structure. + +Thu Mar 28 16:15:17 2002 Douglas C. Schmidt + + * ace/TTY_IO.h: Added the ACE_Export macro to the Serial_Params + struct. Thanks to Pavel Repin for reporting + this. + +Thu Mar 28 13:31:19 2002 Priyanka Gontla + + * ace/POSIX_Asynch_IO.cpp (handle_close): + Fixed the warnings on Debian_Core build that were caused by the + changes earlier today. + +Thu Mar 28 16:14:39 2002 Steve Huston + + * ace/OS.h (ACE_Time_Value::dump): Added comments that'll go to + the man page to explain why this is a no-op. + +Thu Mar 28 14:26:19 2002 Douglas C. Schmidt + + * tests/Cached_Allocator_Test.cpp: Added a missing template + instantiation. + +Thu Mar 28 10:45:16 2002 Nanbor Wang + + * tests/tests.dsw: + * tests/Cached_Allocator_Test.dsp: Added this new MSVC project. + +Thu Mar 28 10:12:13 2002 Douglas C. Schmidt + + * ace/Malloc_T.{h,i,cpp}: Added support for + ACE_Dynamic_Cached_Allocator. + Thanks to Jaroslaw Nozderko for + contributing this. + + * tests: Added Cached_Allocator_Test.cpp. Thanks to + Jaroslaw Nozderko for contributing this. + + * tests/Makefile (BIN): + * tests/run_test.lst: Added Cached_Allocator_Test. + +Thu Mar 28 06:15:22 2002 Alex Libman + + * ace/POSIX_Asynch_IO.cpp, + ace/POSIX_Asynch_IO.h: + ACE_POSIX_AOICB_Asynch_Operation and ACE_POSIX_Asynch_Operation + merged in one class ACE_POSIX_Asynch_Operation + + Since POSIX_SIG_Proactor and SUN_Proactor are based on + POSIX_AIOCB_Proactor and both of them use + ACE_POSIX_AOICB_Asynch_Operation, there is no necessity to + support extra class tree. + + * ace/POSIX_Asynch_IO.cpp, + ace/POSIX_Asynch_IO.h: + ACE_POSIX_AOICB_Transmit_Handler and ACE_POSIX_Transmit_Handler + merged in ACE_POSIX_Transmit_Handler for same reason as previous + change. + + * ace/POSIX_Asynch_IO.cpp, + ace/POSIX_Asynch_IO.h: ACE_POSIX_Asynch_Accept merged with + ACE_POSIX_Asynch_Accept_Hanlder and redesigned and added + new class ACE_POSIX_Asynch_Accept_Task. + + POSIX_AIOCB_Proactor has new member + ACE_POSIX_Asynch_Accept_Task asynch_accept_task_. + + Task activation should be done from the most derived + constructors , when the final table of virtual functions is + built (simular case with notify_manager). + + // start asynch accept task + this->get_asynch_accept_task.start (); + + All POSIX_Proactors implementations ( AIOCB,SIG,SUN ) should + stop ACE_POSIX_Asynch_Accept_Task in their destructors to avoid + post_completions from based classes + + // stop asynch accept task + this->get_asynch_accept_task.stop (); + +Thu Mar 28 06:14:22 2002 Douglas C. Schmidt + + * ace/TTY_IO.cpp (Serial_Params): Zero out the values in the + Serial_Params constructor. Thanks to Pavel Repin + for reporting this. + +Wed Mar 27 20:00:31 2002 Douglas C. Schmidt + + * include/makeinclude/platform_linux.GNU: Fixed a typo where + PLATFORM_XT_LDFLAGS was spelled incorrectly. Thanks to Eric + Eide and Ansgar Konermann + for reporting this. + +Wed Mar 27 18:36:14 2002 Krishnakumar B + + * include/makeinclude/platform_linux.GNU (CXX_VERSION): + + Reorganised the switches a bit for handling the implicit + templates. + + * include/makeinclude/wrapper_macros.GNU (ACE_HAS_GNUG_PRE_2_8): + + If the compiler has g++ or any mutations of g++, test whether + the version is less than 2.8. If so set ACE_HAS_GNUG_PRE_2_8 + to 1 else set it to 0. Thanks to James Haiar + for reporting this. + +Wed Mar 27 16:32:55 2002 Irfan Pyarali + + * tests/Reactor_Dispatch_Order_Test.cpp: Minor compilation fixes. + +Wed Mar 27 15:10:27 2002 Irfan Pyarali + + * tests/Reactor_Dispatch_Order_Test: Added a new test to check the + order of dispatching of ACE Reactors. Order should be: timeout, + output, and then input. Currently, Select and WFMO Reactors are + tested. + + The following files we updated to include the new test: + + - tests/Makefile + - tests/Makefile.am + - tests/Makefile.bor + - tests/Reactor_Dispatch_Order_Test.dsp + - tests/Reactor_Dispatch_Order_Test.icc + - tests/icc.bat + - tests/run_test.lst + - tests/run_tests.bat + - tests/run_tests.psosim + - tests/run_tests_remote.lst + - tests/tests.dsw + - tests/tests.icp + + * ace/WFMO_Reactor.cpp (upcall): Changed the dispatch order to + match the Select_Reactor's dispatch order. The order now is: + + FD_WRITE + FD_CONNECT + FD_OOB + FD_READ + FD_CLOSE + FD_ACCEPT + FD_QOS + FD_GROUP_QOS + + Thanks to Steve Huston for pointing this + out. + + * tests/icc.bat: Removed duplicates. + +Wed Mar 27 10:25:12 2002 Johnny Willemsen + + * ace/High_Res_Timer.{h,cpp}: + Fixed a few small typing errors in comments + +Tue Mar 26 13:55:19 2002 Douglas C. Schmidt + + * ace/OS.i (operator *=): Explicitly promote sec() to double before + multiplying it to prevent problems with overflow. Thanks to + Eric Page for reporting this. This + fixes BugId [1174]. + +Tue Mar 26 06:50:58 2002 Douglas C. Schmidt + + * ace/Synch.h (ACE_Null_Mutex): Added a dummy "lock_" variable + to make ACE_Condition work properly. Thanks to + Ido Yellin for reporting this. + +Wed Mar 21 08:11:15 2002 Boris Kolpackov + + * THANKS: Added Frank Rybak to the Hall of fame. + +Wed Mar 20 11:23:38 2002 Priyanka Gontla + + * ace/Service_Manager.cpp (handle_input): + Moved the declaration of 'error' outside the do-while loop to + fix the 'error (undeclared)' error. + +Wed Mar 20 09:51:47 2002 Douglas C. Schmidt + + * ace/Acceptor.cpp (handle_input): Updated the comments to point out that + svc_handler->close() is called in accept_svc_handler() and + activate_svc_handler() if a failure occurs. Thanks to Rainer + Lucas for motivating this. + +Wed Mar 20 06:44:02 2002 Douglas C. Schmidt + + * ace/Service_Manager.cpp (handle_input): Fixed a bug that prevents + an infinite loop. Thanks to Sandro Doro + for reporting this. + + * include/makeinclude/platform_vxworks5.x_g++.GNU (HOST_DIR): Fixed + a typo where -mlongcal should be -mlongcall. Thanks to Erik + Johannes for reporting this. + +Wed Mar 20 14:26:12 2002 Johnny Willemsen + + * docs/usage-bugzilla.html: + Updated the link to the Bugzilla project + +Tue Mar 19 15:17:25 2002 Dante J. Cannarozzi + + * ace/Containers_T.h: with the help of Matt Hampton + updated doxygen comments for container classes + with more details at the request of Steve Huston. + +Tue Mar 19 02:40:00 2002 Si Mong Park + + * ace/OS_String.h: + * ace/OS_String.inl: + * ace/OS_String.cpp: + Corrected proper ACE_HAS_REENTRANT_FUNCTIONS macro checking location + for the strtok_r_emulation functions. Debian compilation error was + because ACE_HAS_REENTRANT_FUNCTIONS was not defined in the configuration. + If ACE_HAS_REENTRANT_FUNCTIONS is defined, then emulation functions + should not be visible. + +Mon Mar 19 08:32:34 2002 Boris Kolpackov + * THANKS: Added Chen Jian to the Hall of fame. + +Sun Mar 17 18:22:12 2002 Craig Rodrigues + + * include/makeinclude/platform_freebsd.GNU: Copy lines from + platform_linux.GNU. exceptions=1 is now the default, + unless overridden by the user, just like for Linux. + +Sun Mar 17 11:53:12 2002 Johnny Willemsen + + * include/makeinclude/compiler.bor: + When doing a wchar build don't automatically define UNICODE and _UNICODE. + +Fri Mar 15 18:08:28 2002 Steve Huston + + * ace/config-aix-4.x.h: Removed the optional setting of + ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION for Visual Age C++ + 5 without __TEMPINC__ set. This was an experiment to try and + rid the build of all the "duplicate symbol" warnings, and it + broke the incremental builds. + +Fri Mar 15 12:19:58 2002 Chad Elliott + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: + + Added support for building with exceptions enabled. + +Fri Mar 15 05:59:45 2002 Douglas C. Schmidt + + * ace/SPIPE_Acceptor.cpp: Removed the ACE_ASSERT (result == FALSE) + macro call. Thanks to Oleg Burlachenko + for reporting this. + +Fri Mar 15 00:16:06 2002 Craig Rodrigues + + * include/makeinclude/platform_freebsd.GNU: + * include/makeinclude/platform_netbsd.GNU: + Make -fno-implicit-templates conditional, instead of default. + Thanks to Denis Otchenashko for motivating + me to look into this and fix this. + +Thu Mar 14 12:50:00 2002 Si Mong Park + + * ace/OS_String.h: + * ace/OS_String.inl: + * ace/OS_String.cpp: + Fixed a skipping strtok_r_emulation definition when ACE_HAS_WCHAR is + defined. + +Thu Mar 14 11:26:41 2002 Nanbor Wang + + * performance-tests/Misc/context_switch_time.cpp: Renamed the + internally used macro, DEBUG, to ACE_DEBUG_CST to avoid clashing + with the compiler defined macro. Thanks to Allan S Iverson + for motivating the fix. + +Thu Mar 14 09:17:55 2002 Douglas C. Schmidt + + * ace/Strategies_T.cpp (activate_svc_handler): Added a call to + destroy() the svc_handler if ACE::fork() fails. Thanks to + Rainer Lucas for reporting this. + + * ace/Configuration.cpp (remove_section): Made the code consistent + for all versions of Windows. Thanks to Jon Lambert + for the fix. + + * examples/Service_Configurator/IPC-tests/client/remote_service_directory_test.cpp (ACE_TMAIN): Added + '\n' to the end of command strings so that the client won't hang. Thanks to + Marc M Adkins for this fix. + +Wed Mar 13 15:55:54 2002 Douglas C. Schmidt + + * ace/OS.h: EACCESS was misspelled! Thanks to Eric Eide + for reporting this. + +Wed Mar 13 20:50:00 2002 Si Mong Park + + * ace/OS.i: + Minor change to resolve signed/unsigned comparison warning. + + * ace/OS_String.h: + * ace/OS_String.inl: + * ace/OS_String.cpp: + Added wide-char version of strtok_r and strtok_r_emulation. + + * ace/Functor.h: + * ace/Functor.i: + Added hash related templates for ACE_ANTI_TCHAR type + when ACE_USES_WCHAR is defined. + + * ace/ace_dll.vcp: + * ace/ace_os_dll.vcp: Added missing files. + +Wed Mar 13 11:57:41 2002 Steve Huston + + * ace/Configuration_Import_Export.cpp: Replace ACE_ASSERTs with + validity checks that set errno and return -1. ACE_ASSERT is + a little too drastic for a simple error, and the ACE_ASSERT + check is removed altogether when building with ACE_NDEBUG. + +Wed Mar 13 10:36:02 2002 Craig Rodrigues + + * ace/config-freebsd-pthread.h: Fix test for POSIX RT signals. + Thanks to Denis Otchenashko for reporting + these problems. + +Wed Mar 13 10:21:49 2002 Steve Huston + + * ace/Configuration_Import_Export.cpp (ACE_Ini_ImpExp::import_config): + Remove the "else value = ACE_LIB_TEXT("")" for zero-length + values - value is already a zero-length string. + +Wed Mar 13 09:40:12 2002 Johnny Willemsen + + * ace/Registry_Name_Space.cpp: + Fixed warnings about unused variables in BCB Unicode build + +Tue Mar 12 18:37:49 2002 Steve Huston + + * ace/Configuration_Import_Export.{h cpp} (ACE_Ini_ImpExp): + Changed behavior of ACE_Ini_ImpExp::import_config() to take + the entire string, with or without whitespace, without requiring + quotes around the string. This puts functionality on par with + regular Windows INI files. + + Also, on ACE_Ini_ImpExp::export_config(), don't add quotes to + string values that are exported. import_config() will still read + files exported previously (which have quotes around strings) + but when re-exported, the quotes will not be added. + +Tue Mar 12 17:43:32 2002 Balachandran Natarajan + + * ace/CDR_Base.cpp (consolidate): If the incoming message block + does not have a chain of message blocks, there is no need to do + a deep copy, a refcount increment on the incoming datablock + would do. Thanks to Lothar Werzinger + for the patches. + +Tue Mar 12 15:32:46 2002 Balachandran Natarajan + + * PROBLEM-REPORT-FORM (Subject): Added a request for the version + of winsock on Windows based OS's. + +Tue Mar 12 15:22:29 2002 Balachandran Natarajan + + * ace/OS.i (sendv): When using winsock1, we transfer data by + sending one iovec at a time. If transfer of a buffer isnt + complete because the socket buffers got full, we need to drop + out of the loop that sends data. Thanks to Stephan Gudmundson + for providing this patch. + + * THANKS: Added Stephan Gudmundson to the Hall of fame. + +Mon Feb 25 14:06:45 2002 Chad Elliott + + * ace/config-hpux-11.00.h: + + Do not define __HP_aCC if using KCC. + + * include/makeinclude/platform_hpux_kcc.GNU: + + Add the --one-instantiation-per-object parameter to avoid + build problems with KCC. + + * tests/Dirent_Test.cpp: + + Modify this test to work with Chorus (as it does with VxWorks). + + * ace/config-aix-4.x.h: + + Defined ACE_HAS_USING_KEYWORD for AIX 4.x with Visual Age 5 or + later. This change came from Yan Dai + +Tue Mar 12 11:53:53 2002 Chad Elliott + + * bin/perltest2cpp.pl: + + Corrected the code for array assignments. + + * bin/vxworks_modify.pl: + + Use ACE_ENV_* instead of TAO_ENV_*. + +Tue Mar 12 10:45:00 2002 Justin Michel + + * ace/OS.i: + + Added call to ACE_OS::set_errno_to_last_error() in two places + where Winsock WSARecvFrom or WSASendTo were called. + +Tue Mar 12 09:06:00 2002 Si Mong Park + + * etc/Svc_Conf_l.cpp.diff: + Incorrect file had been checked in on prior commit. + This is the correct file. + + * tests/Config_Test.cpp: + Fixed incorrect delete statement. + +Tue Mar 12 08:54:00 2002 Si Mong Park + + * etc/Svc_Conf_l.cpp.diff: + Fixed CR/LF (DOS format) problem: no content changed. + +Tue Mar 12 13:52:12 2002 Johnny Willemsen + + * THANKS : Added Oleg Kraynov + +Mon Mar 11 21:05:26 2002 Krishnakumar B + + * ACEXML/parser/parser/Parser.cpp (parse): + + Added comment on the order of processing that should be done by + the parser. + +Mon Mar 11 20:21:38 2002 Steve Huston + + * ace/config-all.h: Fixed ACE_NEW section to work with HP-UX 10.20, + aC++ A.01.27 with -AA option. + +Mon Mar 11 18:48:41 2002 Steve Huston + + * examples/C++NPv1/Logging_Client.cpp: Added a compile-time check + for Win32 to be sure ACE_HAS_STANDARD_CPP_LIBRARY is set, else + trying to use the new getline() method with an old cin won't work. + +Mon Mar 11 17:43:00 2002 Si Mong Park + + * ace/Svc_Conf_l.cpp: + Minor comment change to make diff file. + + * etc/Svc_Conf_l.cpp.diff: + Updated diff file for Svc_Conf_l.cpp. + +Mon Mar 11 16:59:42 2002 Steve Huston + + * tests/TP_Reactor_Test.h (new file): + * tests/TP_Reactor_Test.cpp: Moved declarations for Receiver, + Acceptor, Sender, and Connector classes to the new file + TP_Reactor_Test.h so Visual Age C++ can find them when + instantiating templates. + +Mon Mar 11 16:38:49 2002 Steve Huston + + * tests/Reactor_Notify_Test.cpp: Added missing #include "ace/Reactor.h" + to fix Visual Age C++ compile error. + +Mon Mar 11 16:27:59 2002 Steve Huston + + * examples/C++NPv1/RT_Thread_Per_Connection_Logging_Server.cpp: + Added missing #include "ace/Auto_Ptr.h" to fix compile problem + for platforms w/o native auto_ptr (like MSVC). + +Mon Mar 11 14:23:00 2002 Si Mong Park + + * tests/Config_Test.cpp: + Removed one of the delete statement that deletes twice and thus + causing an invalid access violation. + +Mon Mar 11 10:28:45 2002 Chad Elliott + + * bin/vxworks_modify.pl: + + Update this script to work correctly with the new CORBA + Environment style. + +Mon Mar 11 12:17:12 2002 Johnny Willemsen + + * include/makeinclude/build_dll.bor: + * include/makeinclude/build_exe.bor: + * include/makeinclude/build_lib.bor: + * include/makeinclude/compiler.bor: + * include/makeinclude/decorator.bor: + * include/makeinclude/make_flags.bor: + * include/makeinclude/outputdir.bor: + Added support for a real unicode build with BCB builder. A real + unicode build can for example be done with: + make -f makefile.bor -DUNICODE + Doing a real unicode build means that the defines ACE_USES_WCHAR, + UNICODE and _UNICODE are set, diffent BCB object files are used + to link with and the compiler gets the extra compiler option -WU. + The dll names have a 'u' added so that unicode dll's are separated + from the non-unicode dll's. Also the output files are build in a + separate subdirectory. + + * ACE-INSTALL.html: + Explained the BCB make options that can be used with ACE + +Mon Mar 11 11:35:12 2002 Johnny Willemsen + + * ace/Registry_Name_Space.cpp: + Changed ACE_USHORT16 to ACE_WSTRING_TYPE because the underlying type + of ACE_WString is ACE_USHORT16 with MSVC and with BCB it is + wchar_t. The define ACE_WSTRING_TYPE hides these differences. When + UNICODE and ACE_USES_WCHAR are defined BCB gave a compile error. + +Sun Mar 10 18:53:48 2002 Si Mong Park + + * ace/Svc_Conf_l.cpp: + Commented out 'break' line to resolve unreachable statement warning. + +Sun Mar 10 05:54:30 2002 Balachandran Natarajan + + * THANKS : Added Val Dumitrescu to the + Hal of Fame. + * bin/auto_run_tests.lst: Added a new test to the daily builds. + +Sat Mar 9 21:22:51 2002 Balachandran Natarajan + + * ace/CDR_Stream.cpp: + * ace/CDR_Stream.i: + * ace/CDR_Stream.h: Added accessor methods for GIOP versions of + Input and Output CDR streams. + +Sat Mar 9 07:52:45 2002 Douglas C. Schmidt + + * ace/SPIPE_Addr.cpp (set): Changed a strcpy() to a strcat() to + fix the code. Thanks to Robert Laferriere + for reporting this. + +Fri Mar 8 22:29:36 2002 Si Mong Park + + * ace/Argv_Type_Converter.cpp: + * ace/Argv_Type_Converter.h: + * ace/Argv_Type_Converter.inl: + new class to convert command line parameter type between char + and wchar_t. + + * ace/Basic_Types.h: + Set the endian type to 'little endian' for ARM processor - + Pocket PC 2002 platform. + + * ace/Log_Record.cpp: + * ace/Log_Record.h: + Removed print method that uses ACE_CE_Bridge since CE_Bridge is + no longer supported by ACE CE port. + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Added Argv_Type_Converter class to the project. + + * ace/WFMO_Reactor.cpp: + * ace/WFMO_Reactor.h: + * ace/WFMO_Reactor.i: + Updated to support WinCE. + + * ace/Process.cpp: + Fixed incorrect call to CreateProcess for WinCE. + + * ace/config-WinCE.h: + Updated for WinCE Pocket PC 2002. + + * ace/ace.vcw: + * ace/ace_dll.vcp: + * ace/ace_os_dll.vcp: + New ACE project file for WinCE Pocket PC 2002 build on eMbedded + Visual C++ 3.0. + + * ace/Makefile: + * ace/Makefile.am: + * ace/Makefile.bor: + Added Argv_Type_Converter file. + + * ace/Configuration.cpp: + * ace/Memory_Pool.cpp: + Updated for the WinCE port. + + * ace/Read_Buffer.cpp: + * ace/Read_Buffer.h: + Disabled Ctor with ACE_HANDLE on WinCE since ACE_HANDLE is same + as FILE* on WinCE. + + * ace/OS.cpp: + * ace/OS.h: + * ace/OS.i: + Updated for WinCE port. Changes includes removal of CE Bridge + added CE argv process class, enabled many file IO functions + that formerly disabled on CE, bypassing QoS parts for CE, and + other CE specific declarations. + + * ace/Dynamic_Service.h: + * ace/Dynamic_Service.i: + Added 'instance' method uses ACE_ANTI_TCHAR type name for when + ACE_TCHAR is wchar_t. + + * ace/CE_Screen_Output.cpp: + * ace/CE_Screen_Output.h: + screen output helper class only for WinCE platform - should + not be used on any other platform. + + * ace/OS_Memory.h: + * ace/OS_String.h: + Changed to skip including stddef.h for WinCE. + + * ace/MEM_Acceptor.h: + * ace/MEM_Acceptor.i: + * ace/SOCK_Acceptor.cpp: + * ace/SOCK_Acceptor.h: + * ace/SOCK_Connector.cpp: + * ace/SOCK_Connector.h: + * ace/SOCK_Dgram_Mcast.h: + Updated to skip QoS part on WinCE. + + * ace/Svc_Conf.l: + * ace/Svc_Conf_l.cpp: + Fixed a problem giving a parse error on reading carriage return + token on Unicode formatted svc conf file. + + * ace/Registry.cpp: + Changed connect function for WinCE to return -1 because CE does + not allow direct registry connection. + + * ace/Sock_Connect.cpp: + Changed to use Iphlpapi library (standard on WinCE) on WinCE to + find IP address instead of searching registry since CE has so + many variations on registry settings. + + * ace/Log_Msg.cpp: + Minor change for WinCE on stderr. + +Fri Mar 8 19:45:31 2002 Steve Huston + + * examples/C++NPv1/Thread_Per_Connection_Logging_Server.cpp: + * examples/C++NPv1/RT_Thread_Per_Connection_Logging_Server.cpp: + Use auto_ptr<> to manage dynamically-allocated Thread_Args. + Thanks to Chris Uzdavinis for this suggestion. + +Thu Mar 7 16:10:02 2002 Douglas C. Schmidt + + * include/makeincludes/platform_linux_icc.GNU, + * ace/config-icc-common.h, + * ace/config-linux-common.h: Added support for the Intel C++ compiler + (icc). Thanks to Roger Tragins for contributing this. + +Thu Mar 7 11:17:12 2002 Johnny Willemsen + + * tests/RMCast/RMCast_Fragment_Test.cpp: + * tests/RMCast/RMCast_Membership_Test.cpp: + * tests/RMCast/RMCast_Reassembly_Test.cpp: + * tests/RMCast/RMCast_Reordering_Test.cpp: + * tests/RMCast/RMCast_Retransmission_Test.cpp: + * tests/RMCast/RMCast_UDP_Best_Effort_Test.cpp: + * tests/SSL/Thread_Pool_Reactor_SSL_Test.cpp: + Replaced main with ACE_TMAIN. + +Wed Mar 6 21:48:15 2002 Krishnakumar B + + * include/makeinclude/platform_linux_kcc.GNU (CCFLAGS): + + Moved --one_instantiation_per_object flag as a common flag. + Otherwise building with debugging enabled doesn't work with + libraries built without debug information. + +Wed Mar 6 21:42:37 2002 Krishnakumar B + + * bin/ace-install: + + Make sure that the .inl files are also installed. Thanks to + Carsten Prescher for reporting this. + +Wed Mar 6 18:30:49 2002 Steve Huston + + * examples/C++NPv1/Thread_Per_Connection_Logging_Server.h: + Reimplemented the Logging_Server::run method. Because the + handle_connections() method spawns a new thread to run the + logging session, and it calls handle_data(), the call to + handle_data() from Logging_Server::run() is incorrect. Thanks + to Raghuram Shetty for reporting + this issue. + + * examples/C++NPv1/Reactive_Logging_Server.h: + Fix wait_for_multiple_events() to correctly check error return + from select(). Also, in handle_connections(), sync the code + with the book to clear acceptor handles from the active_handles_ + after accepting all ready connections. + + * examples/C++NPv1/Reactive_Logging_Server_Ex.h (handle_connections): + Clear acceptor's handle from active_read_handles_ to keep from + dispatching it as a data handle. See, this is why you should use + the Reactor framework - so be sure to buy vol 2 ;-) + + * THANKS: Added Raghuram Shetty to the Hall of Fame. + +Wed Mar 06 17:06:43 2002 Nanbor Wang + + * tests/Cached_Accept_Conn_Test.cpp: + * tests/Cached_Conn_Test.cpp: Replaced main with ACE_TMAIN. + +Wed Mar 6 14:43:34 2002 Nanbor Wang + + * ace/OS.h: Reverted my previous "fix" to the argv argument type. + + Mon Jan 21 23:27:03 2002 Nanbor Wang + + A program entry poing main can take any of the + three forms: + + int main (int argc, char *argv[]) + int wmain (int argc, wchar_t *argv[]) + int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) + + Of them, the entry point main always gives you + the command line arguemnt in char strings form. The entry + point wmain currently can only be used under + Win32 and it returns the command line arguments in wchar + strings format. Defining the ACE_TMAIN as the + program entry point is the more portable form. The command + line arguments are given in char strings in most cases, + or wchar strings when ACE_USES_WCHAR is defined. + See $ACE_ROOT/docs/wchar.txt for more information + on ACE support on wchar. + + * docs/ACE-guidelines.html: Added a new guideline explaining which + main entry point to use, as above. + + * bin/main2TMAIN.pl: Script to replace entry points of the form + + main (int, ACE_TCHAR *[]) + + to + + ACE_TMAIN (int, ACE_TCHAR *[]) + + * *.cpp: Changed to use the new ACE_TMAIN. + +Tue Mar 06 14:30:12 2002 Johnny Willemsen + + * tests/MEM_Stream_Test.cpp: + Fixed the shutdown of this test. When _TEST_USES_THREADS is defined + we must do a wait() on the thread manager, else on the process + manager. + +Tue Mar 05 20:34:22 2002 Ossama Othman + + * ace/OS_Thread_Adapter.cpp (invoke): + * ace/Thread_Adapter.cpp (invoke_i): + + Fixed "jump out of __finally block" warning emanating from + MSVC 7. + +Tue Mar 05 15:46:15 2002 Nanbor Wang + + * ace/Memory_Pool.h: + * ace/Memory_Pool.i: Added a base_addr () method for all memroy + pool classes. For memory pools that don't have a base_addr and + will never remap the pool to a different area, this method + always return 0. + + * ace/Malloc_T.cpp: Reset this->cb_ptr_ after acquiring new memory + to memory_pool's base_addr (if base_addr != 0). This makes sure + the cb_ptr_ points to the right memory after a remap. Thanks to + Ariel Peltz for pointing this out. + +Tue Mar 5 12:20:26 2002 Ossama Othman + + * ace/INET_Addr.cpp (get_host_name_i, set): + + h_errno -> h_error. h_errno conflicts with a declaration in + Microsoft's Winsock headers. Thanks to Nanbor for pointing out + the problem. + +Tue Mar 05 09:26:46 2002 Ossama Othman + + * ace/INET_Addr.cpp (get_host_name_i, set): + + Do not clobber errno with the h_errno value returned from + gethostbyaddr_r(). They are two distinct types of errors. + + Renamed "error" to "h_errno" where appropriate to make it + more obvious that errno should not be set to the value of + h_errno. Thanks to Felix Wyss for + reporting this. + +Tue Mar 5 05:51:44 2002 Douglas C. Schmidt + + * ace/Process.cpp (spawn): If fork()/exec() fail, call ACE_OS::_exit() + rather than ACE_OS::exit() to avoid destructors being called + that will yield hang problems. Thanks to Renjie Tang + , Max V. Zinal , and + Michael Hornok for this suggestion. + This fixes BugID 1147. + +Tue Mar 5 12:24:12 2002 Johnny Willemsen + + * ace/Auto_IncDec_T.h: + Corrected typing error in comment + +Mon Mar 4 19:59:31 2002 Steve Huston + + * tests/Process_Strategy_Test.h: Added #include "ace/Strategies_T.h" + so Visual Age C++ can find ACE_Process_Strategy when instantiating + templates. + +Mon Mar 4 19:52:27 2002 Steve Huston + + * tests/Message_Queue_Test_Ex.h (new file): + * tests/Message_Queue_Test_Ex.cpp: Moved declaration of + User_Class to .h file so Visual Age C++ can find it when + instantiating templates. + +Mon Mar 4 19:43:51 2002 Steve Huston + + * tests/Framework_Component_Test.h (new file): + * tests/Framework_Component_Test.cpp: Moved declaration of + My_Singleton to .h file so Visual Age C++ can find it when + instantiating templates. + +Mon Mar 04 11:20:45 2002 Carlos O'Ryan + + * ace/Copy_Disabled.h: + * ace/Copy_Disabled.cpp: + Add new helper class to disable copy constructors and assignment + operators. I simply got sick of writing this repetitive code: + + // private & undefined + Foo (const Foo &); + Foo &operator= (const Foo&); + + The new class makes life *much* easier, simply say: + + class Foo : private ACE_Copy_Disabled + + Isn't that cool? + + * ace/Makefile: + * ace/Makefile.am: + * ace/Makefile.bor: + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Add new file to the project files and Makefiles. + +Mon Mar 4 07:36:12 2002 Johnny Willemsen + + * tests/Token_Strategy_Test.cpp: + Fixed MSVC6 unicode build errors. + +Sun Mar 3 15:56:23 2002 Craig Rodrigues + + * tests/Token_Strategy_Test.cpp: + Add template instantiations for ACE_Array, ACE_Array_Base, + ACE_Array_Iterator. + +Sun Mar 3 16:23:12 2002 Johnny Willemsen + + * tests/Token_Strategy_Test.cpp: + Fixed MSVC6 unicode build errors. + +Sun Mar 3 11:00:12 2002 Johnny Willemsen + + * tests/Token_Strategy_Test.dsp: + Added MSVC project for this test + + * tests/Token_Strategy_Test.cpp: + Corrected small typing errors in comment + + * tests/tests.dsw: + Added new Token_Strategy_Test.dsp + +Sat Mar 2 09:17:45 2002 Douglas C. Schmidt + + * ace/INET_Addr.cpp (set): Change errno = EINVAL to errno = error if + the call to ACE_OS::gethostbyname_r() fails since errno should + already have been set! Thanks to Felix Wyss + for reporting this. + +Fri Mar 01 08:03:12 2002 Johnny Willemsen + + * ace/Makefile.bor: + Added Swap.cpp to the list of installable files + + * ace/SSL/SSL_Context.cpp: + Added ACE_TEXT_CHAR_TO_TCHAR around first argument of ACE_OS::fopen + call to convert char to ACE_TCHAR to fix compile errors in unicode + build + + * include/makeinclude/ace_flags.bor: + Corrected typing error for new tao messaging library + +Wed Feb 27 13:50:20 2002 Jaiganesh Balasubramanian + + * ace/INET_Addr.cpp: + Pull back changes from last night. + +Wed Feb 27 06:00:37 2002 Douglas C. Schmidt + + * ace/Synch.h: Clarified that ACE_Auto_Event, ACE_Manual_Event, and + ACE_Event all support process-scope locking, but only Win32 + supports global naming and system-scope locking. Thanks to + Kobi Cohen Arazi for motivating this change. + +Wed Feb 27 09:24:30 2002 Carlos O'Ryan + + * include/makeinclude/platform_linux.GNU: + Pull back Jai's change from last night. It looks like an + accident to me, and it is breaking all the builds. + +Wed Feb 27 12:09:12 2002 Johnny Willemsen + + * ACE-INSTALL.html: + Added description about setting environment variable BCBVER to + the Borland building instructions + +Wed Feb 27 10:47:12 2002 Johnny Willemsen + + * include/makeinclude/ace_flags.bor: + Added lines for new TAO_Messaging library + +Wed Feb 27 01:12:32 2002 Carlos O'Ryan + + * ace/Swap.h: + * ace/Swap.inl: + * ace/Swap.cpp: + Add helper template to swap variables, very useful when + implementing exception neutral/safe classes. + +Wed Feb 26 00:38:50 2002 UTC Don Hinton + + * ace/Select_Reactor_Base.h: + * ace/Select_Reactor.cpp: + * ace/Select_Reactor_T.cpp: + + Removed ACE_SELECT_REACTOR_HAS_DEADLOCK_DETECTION since + it isn't used. + +Tue Feb 26 22:54:50 2002 UTC Don Hinton + + * ace/Synch.i (ACE_Noop_Token::queueing_strategy): + + Removed ACE_UNUSED_ARG and commented out the parameter + instead. Thanks to Ossama and Craig for pointing this out. + +Tue Feb 26 16:17:45 2002 Nanbor Wang + + * ace/Thread_Manager.h (ACE_Thread_Manager): Fixed a typo in + doxygen document tag. Thanks to Brad Hoskins + for reporting this. + +Tue Feb 26 10:22:39 2002 Steve Huston + + * include/makeinclude/platform_sunos5_sunc++.GNU: Added the ability + to enable RTTI in the compat=4 case. Removed the explicit + inclusion of an installation-specific path to -L for compat=4. + Installation-specific adidtions/changes should go in the + installation's platform_macros.GNU file. + +Tue Feb 26 09:48:24 2002 Craig Rodrigues + + * apps/drwho/Protocol_Manager.cpp: Replace #include "new.h" + with #include "ace/config.h" to eliminate gcc 3.1 warning + about deprecated header. + +Tue Feb 25 10:16:12 2002 Johnny Willemsen + + * tests/Token_Strategy_Test.cpp: + Fixed unicode compile error + +Mon Feb 25 19:30:54 2002 Steve Huston + + * tests/Collection_Test.cpp: Moved the declaration of UglyThing + to a new file, Collection_Test.h. Visual Age C++ needs it in + a separate file to do auto template instantiation. + * tests/Collection_Test.h: New file. + +Mon Feb 25 19:27:41 2002 Steve Huston + + * ace/Log_Msg.cpp (log): In handling for %t, fixed the feature + test that changes behavior for AIX 4.2 and earlier. This + section missed my long-time-ago change to the AIX OS + version constants, and ended up being used for all AIX versions + which is wrong. Thanks to Yan Dai for + reporting this problem. + + * THANKS: Added Yan Dai to the Hall of Fame. + +Mon Feb 25 19:16:12 2002 Johnny Willemsen + + * docs/tutorials/007/thread_pool.{h|cpp}: + * docs/tutorials/007/page07.html: + * docs/tutorials/007/page08.html: + * docs/tutorials/013/mld.h: + * docs/tutorials/013/page03.html: + * docs/tutorials/017/Barrier_i.h: + * docs/tutorials/017/page03.html: + * docs/tutorials/018/page03.html: + Added missing include of 'ace/Atomic_Op.h' + +Mon Feb 25 18:51:37 2002 Johnny Willemsen + + * tests/Makefile.bor: + Added new Token_Strategy_Test + + * tests/Token_Strategy_Test.cpp: + Fixed small compile error that appeared with the BCB compiler + +Mon Feb 25 17:17:37 2002 UTC Don Hinton + + * ace/Select_Reactor.h: + * ace/Select_Reactor_Base.h: + * ace/Select_Reactor_T.h: Added a new typedef, ACE_SELECT_TOKEN, + to Select_Reactor_Base.h so that the choice of TOKEN type can be + made prior to typedefing the class. This allows the use of the + TOKEN type within the paramaterized class, i.e., + ACE_Select_Reactor_Token_T and ACE_Select_Reactor_T. Otherwise + you get an error on some compilers, e.g., M$VC, that complain + about generic types. + +Mon Feb 25 15:53:56 2002 UTC Don Hinton + + * ace/Synch.i (queueing_strategy): Added ACE_UNUSED_ARG for unused + queueing_strategy parameter, thanks to Craig Rodrigues + for pointing this out. + +Mon Feb 25 09:17:39 2002 Chris Cleeland + + * ace/SSL/SSL_Context.cpp (dh_params): Wrapped the second argument + to ACE_OS::fopen with ACE_TEXT so that it behaves properly on + wide character platforms. Thanks to Craig Rodrigues for + pointing this out and Ossama Othman for explaining the + difference btw. ACE_TEXT and ACE_LIB_TEXT. + +Mon Feb 25 13:50:43 2002 UTC Don Hinton + + * ace/Token.{h|i|cpp}: Added the ability to chose the queueing + strategy, FIFO or LIFO, by using the queueing_strategy() + methods. The default is FIFO, which was the previous behavior. + Now ACE_Token_Queue::insert_entry() is always called with the + queueing_strategy in order to determine where the thread should + requeue itself. + + * ace/Synch.{h|i}: Added queueing strategy methods to + ACE_Noop_Token. + + * ace/Select_Reactor_T.{h|cpp}: + * ace/TP_Reactor.{h|cpp}: Added QUEUEING_STRATEGY parameter to + ACE_Select_Reactor_Token_T, ACE_Select_Reactor_T, and + ACE_TP_Reactor ctors with FIFO default. + + * tests/Token_Strategy_Test.cpp : + * tests/Makefile : + * tests/run_test.lst: Added new Token_Strategy_Test.cpp to test + the FIFO/LIFO strategies. + +Mon Feb 25 13:44:12 2002 Johnny Willemsen + + * docs/tutorials/018/Test_T.h: + Added missing include of Atomic_Op.h + +Fri Feb 22 15:54:32 2002 Craig Rodrigues + + * ace/Refcounted_Auto_Ptr.h: Fix comment, thanks to + Serge Kolgan . + +Fri Feb 22 09:31:35 2002 Craig Rodrigues + + * ace/QoS/QoS_Session_Factory.h (ACE_QoS_Session_Type): + Change "const static" to "static const" to remove gcc 3.1 + warning. + +Fri Feb 22 08:07:12 2002 Johnny Willemsen + + * ace/Makefile.bor: Added String_Base.cpp and Atomic_op.cpp to the + list of files that must be installed when doing a make install. + Thanks to Cyrille Chépélov for reporting that + these files missed. + +Thu Feb 21 16:33:11 2002 Douglas C. Schmidt + + * docs/tutorials/007: Rename Thread_Pool::open() to + Thread_Pool::start() and Thread_Pool::close() to + Thread_Pool::stop() and fixed all the usages. Also removed the + unneeded parameter from stop() and removed the unneeded + re-definition of close() (since we are not shadowing it any + more). Thanks to Peter Heitman for + reporting this. + +Thu Feb 21 13:12:44 2002 Chris Cleeland + + * ace/SSL/SSL_Context.* (ACE_SSL_Context): Added new methods to + specify Diffie-Hellman parameters. These parameters are + required when using DSA certificates/keys. The new methods are + dh_params, dh_params_file_name, and dh_params_file_type. + +Thu Feb 21 09:32:56 2002 Douglas C. Schmidt + + * ace/TTY_IO.cpp (control): Use the appropriate B* macros to set + all the baudrate cases. Thanks to Olli Savia for + contributing this. + + * ace/Signal.cpp (dispatch): Added a cast of (ACE_SignalHandler) + to the SIG_DFL parameter so things will work on IRIX 6.5 with + GCC 3.0.1. Thanks to Dan Green for + reporting this. + +Thu Feb 21 13:09:13 2002 Craig Rodrigues + + * ace/streams.h: strstream was deprecated in the 1998 ISO C++ + standard [D.7 depr.str.strstreams], and has been replaced by + sstream. Including or causes annoying + warnings with gcc 3.1. Since strstream and sstream are not used + internally within ACE or TAO, remove includes for strstream, and + let the developer include them in their own code. + +Wed Feb 20 15:26:43 2002 Phil Mesnier + + * apps/soreduce/Library.cpp: + * apps/soreduce/Library.h: + * apps/soreduce/Makefile: + * apps/soreduce/Obj_Module.cpp: + * apps/soreduce/Obj_Module.h: + * apps/soreduce/README: + * apps/soreduce/SO_Group.cpp: + * apps/soreduce/SO_Group.h: + * apps/soreduce/Sig_List.cpp: + * apps/soreduce/Sig_List.h: + * apps/soreduce/Signature.cpp: + * apps/soreduce/Signature.h: + * apps/soreduce/soreduce.cpp: + New application to assist in production of reduced footprint + shared libraries for specific collections of applications. For + more details see the enclosed README. + +Wed Feb 20 14:18:14 2002 Phil Mesnier + + * ace/Process.cpp: + * ace/Process.h: Added a new method + ACE_Process_Options::release_handles() to fix the trouble of + using a pipe as stdout, where the pipe closes completely when + the child terminates. This method replaces some functionality in + the Process options destructor. + +Wed Feb 20 13:01:25 2002 Douglas C. Schmidt + + * ace/Atomic_Op.i: Fix the return value of the ACE_GUARD_RETURN + macros so that if the lock fails, the comparison also fails. + Thanks to Ivan Pia for reporting this. + +Wed Feb 20 17:00:34 2002 Balachandran Natarajan + + * include/makeinclude/platform_sunos5_sunc++.GNU: Users who use + 5.2 and above could use native exceptions with inlining turned + on. Thanks to Ken O'Brien for reporting + this problem. + + * THANKS: Added Ken O'Brien to the hall of + fame. + +Mon Feb 18 23:17:08 2002 Christopher Kohlhoff + + * ACEXML/parser/parser/Makefile.bor: + Changed library name for the Borland build to be consistent with the + UNIX build. + + * include/makeinclude/ace_flags.bor: + Added macros for the ACEXML Parser library. + + * ACEXML/examples/Makefile.bor: + * ACEXML/examples/SAXPrint/Makefile.bor: + Added Borland makefiles for the SAXPrint example. + +Mon Feb 18 20:16:27 2002 Douglas C. Schmidt + + * ace/Acceptor.cpp (make_svc_handler): + * ace/Connector.cpp (make_svc_handler): There doesn't seem to be + anypoint in *conditionally* assigning the Acceptor/Connector's + reactor to the Svc_Handler, so we'll just assign it... + +Mon Feb 18 18:41:33 2002 Steve Huston + + Integrated the following from the ACE 5.2 stream: + + Wed Feb 13 15:37:41 2002 Steve Huston + + * ace/Hash_Cache_Map_Manager_T.h: Added #include "ace/Synch.h" to + pick up ACE_Null_Mutex. + + * tests/Process_Manager_Test.cpp: Added #include "ace/Thread.h" to + pick up ACE_Thread::self (). + + * tests/Refcounted_Auto_Ptr_Test.h (new file): + * tests/Refcounted_Auto_Ptr_Test.cpp: Moved definition of Printer + from .cpp to .h so Visual Age C++ can find it when instantiating + templates. Also removes the compile warning where the compiler + warns that the test won't work... + + Tue Feb 12 21:59:42 2002 Steve Huston + + * include/makeinclude/platform_aix_ibm.GNU: Added -qstaticinline + to CCFLAGS to tell compiler to generate inlined functions with + static scope instead of extern scope (how stupid is this?). + Removed error suppression options which should be unnecessary now. + + Sat Feb 9 18:34:59 2002 Steve Huston + + * examples/C++NPv1/Reactive_Logging_Server_Ex.h: Removed an extra + master_handle_set_.set_bit call. Thanks to Craig Perras + for reporting this. + + Sat Feb 9 13:49:44 2002 Steve Huston + + * ace/Hash_Map_With_Allocator_T.h: Added #include "ace/Synch.h" to + see the definition of ACE_Null_Mutex. + + * ace/config-all.h (ACE_RCSID): Make generated function static to + keep Visual Age C++ from complaining about the multiple definitions. + + Fri Feb 8 16:20:51 2002 Steve Huston + + * ace/config-aix-4.x.h: Removed #define ACE_TEMPLATES_REQUIRE_SOURCE + for Visual Age C++ 5. As it turns out, wherever the compiler sees + source and a template is referenced, it generates the template + class functions used. This is very bad for size as well as for + situations counting on only one such as ACE_Singleton. + + Also added support for explicit template instantiation with Visual + Age C++. If the preprocessor define __TEMPINC__ is not defined, + explicit instantiation is turned on. + + Mon Feb 4 17:21:39 2002 Steve Huston + + * ace/Singleton.h (ACE_TSS_Singleton): Added ACE_UNIMPLEMENTED_FUNCS + for assignment and copy ctor methods. This is necessary to allow + the *_SINGLETON_DECLARE macro, that explicitly instantiates a + template class on Win32, to compile clean when instantiating an + ACE_TSS_Singleton class. Thanks very much to Nanbor Wang for + direction on solving this problem. + + * ace/config-win32-msvc-6.h: Added ACE_NEEDS_FUNC_DEFINITIONS. This + avoids warnings when explicitly instantiating an entire class, as + with ACE_TSS_Singleton and *_SINGLETON_DECLARE, above. + + +Mon Feb 18 18:23:49 2002 Steve Huston + + * ace/Reactor.h: Clarified behavior with respect to remaining + queued notifications when end_reactor_event_loop() is called + or when the reactor instance is closed/deleted. + +Mon Feb 18 19:28:12 2002 Johnny Willemsen + + * ace/README: + * ace/Proactor.cpp: + * ace/SString.h: + * ace/Task_T.h: + * ace/Timer_Queue_Adapters.h: + * ace/config-win32-msvc-7.h: + * netsvcs/lib/Client_Logging_Handler.h: + * netsvcs/lib/Name_Handler.h: + * netsvcs/lib/TS_Clerk_Handler.h: + * netsvcs/lib/TS_Server_Handler.h: + + Made ACE compiling with the Microsoft Visual C++ 7 compiler. + Template classes cannot be exported when doing a dynamic build, so + removed some export macro's from template definitions. When a class + is derived from a class template then the class template must be + explicit instantiated and be exported. To make sure that we only do + this when a compiler supports this we introduced the new define + ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION_EXPORT. Also vc++ 7 generates + now a warning when a class is exported is derived from a class that + is not exported. + + The following info was given by Microsoft on this: + The reason that a template can't be exported anymore is that it is + unlikely that anyone wants to export all specializations of a + class template. When B is a template and D is a class, the + construction 'class ACE_Export D : public B' should + give no problems, but unfornately there is a bug in the vc++ + compiler. + + That's why we now explicit export the template instantations in ace. + +Mon Feb 18 11:00:17 2002 Nanbor Wang + + * html/index.html: Added an entry for ACEXML document. + + * ace/OS.h: Removed the extern "C" link designator from the + typedef of ACE_Service_Object_Exterminator and the definition of + gobbler functions in ACE_FACTORY_DEFINE. They are not used + outside of a DLL so it's okay to have a mangled gobbler name. + Thanks to Doug for noticing this. + +Mon Feb 18 11:12:39 2002 Steve Huston + + * ace/Refcounted_Auto_Ptr.h: Improved Doxygenation of some comments. + +Mon Feb 18 10:45:00 2002 Craig Rodrigues + + * ace/QoS/QoS_Session_Factory.h: + Add new constant + ACE_QoS_Session_Factory::ACE_DEFAULT_QOS_SESSION. Give + ACE_QoS_Session_Factory::create_session() a default argument of + ACE_DEFAULT_QOS_SESSION. + + * ace/QoS/QoS_Session_Factory.cpp: + Set the value of ACE_DEFAULT_QOS_SESSION to ACE_RAPI_SESSION on + platforms with RAPI RSVP support. Set it to + ACE_GQOS_SESSION on Win32 platforms with GQoS support. + Otherwise, issue a compilation error, since these are the only + two QoS types supported currently. + + * examples/QOS/Change_Receiver_FlowSpec/receiver.cpp: + * examples/QOS/Change_Receiver_FlowSpec/sender.cpp: + * examples/QOS/Change_Sender_TSpec/receiver.cpp: + * examples/QOS/Change_Sender_TSpec/sender.cpp: + * examples/QOS/Simple/receiver.cpp: + * examples/QOS/Simple/sender.cpp: + Remove reference to ACE_RAPI_SESSION from invocations of + create_session(), leave it empty and choose default argument + instead. This will allow the examples to compile and run on + Win32. + +Mon Feb 18 08:07:59 2002 Douglas C. Schmidt + + * ace/String_Base.{h,i}: Added two new overloaded operators that + work on characters. Thanks to Martin Krumpolec + for contributing these patches. + +Mon Feb 18 13:05:12 2002 Johnny Willemsen + + * ace/config-all.h: + Added ACE_NEW_NORETURN macro. This macro is the same as ACE_NEW + but doesn't do a return when an out of memory error occured so that + the caller can do extra handling. + + * tests/New_fail_test.cpp: + Extended this test to test the new ACE_NEW_NORETURN macro. + +Mon Feb 18 01:45:07 2002 Christopher Kohlhoff + + * include/makeinclude/compiler.bor: + * include/makeinclude/make_flags.bor: + Added support for Borland C++Builder 6. + +Sun Feb 17 16:32:01 2002 Venkita + + * ACE version 5.2.2 released. + +Sun Feb 17 16:03:03 2002 Nanbor Wang + + * etc/acexml.doxygen: Fixed the output directory name for ACEXML. + +Fri Feb 15 10:50:26 2002 Venkita Subramonian + + * ace/Dynamic_Service.h: + Fixed compile error. Added forward declaration for + ACE_Service_Object. + +Thu Feb 14 19:10:04 2002 Douglas C. Schmidt + + * ace/Refcounted_Auto_Ptr.h: Make the rep_ protected rather + than private. Rodney Morris for + motivating this. + +Thu Feb 14 15:26:06 2002 Douglas C. Schmidt + + * ace/Dynamic_Service.i (instance): Fixed instance to use an + ACE_dynamic_cast() so that the vptr is set correctly. Thanks to + Bill Dyer for suggesting this. + +Thu Feb 14 16:15:50 2002 Balachandran Natarajan + + * COPYING: Updated copyright years. + +Thu Feb 14 11:25:39 2002 Nanbor Wang + + * ACEXML/docs/bugs.txt: + * ACEXML/docs/guidelines.txt: Updated document. + +Thu Feb 14 08:17:40 2002 Douglas C. Schmidt + + * ace/config-all.h: There was a subtle difference between the + ACE_NEW based on try/catch and a 0 pointer. The version based on + the fact that new can return 0 always sets the pointer to 0 when + a memory error occured. The version that is based on try/catch + the pointer wasn't set to 0. If the pointer had a different + value, the pointer stays at the old value and wasn't set to 0. + This is now fixed. Thanks to Peter van Merkerk + for noticing this and to Johnny + Willemsen for reporting it. + + * ace/Strategies_T.h: + * ace/Strategies_T.i: Allow the reactor of the Svc Handler to be + set to the reactor passed to the Creation Strategy. Thanks to + David Smith for motivating this. + +Thu Feb 14 01:14:40 2002 Nanbor Wang + + * include/makeinclude/ace_flags.bor: Updated ACE_XML_CFLAGS. + Thanks to Johnny Willemsen for reminding this. + +Thu Feb 14 01:01:10 2002 Nanbor Wang + + * ACEXML/ACEXML.dsw: + * ACEXML/common/XML_Common.dsp: + * ACEXML/examples/SAXPrint/SAXPrint.dsp: + * ACEXML/parser/debug_validator/Debug_Validator.dsp: + * ACEXML/parser/parser/Parser.dsp: + * ACEXML/tests/NamespaceSupport_Test.dsp: + * ACEXML/tests/Transcoder_Test.dsp: Updated base include directories. + +Thu Feb 14 00:20:39 2002 Nanbor Wang + + * Makefile: + * Makefile.bor: + * ACEXML/common/Attributes.h: + * ACEXML/common/AttributesImpl.cpp: + * ACEXML/common/AttributesImpl.h: + * ACEXML/common/Attributes_Def_Builder.cpp: + * ACEXML/common/Attributes_Def_Builder.h: + * ACEXML/common/CharStream.cpp: + * ACEXML/common/CharStream.h: + * ACEXML/common/ContentHandler.h: + * ACEXML/common/DTDHandler.h: + * ACEXML/common/DTD_Manager.cpp: + * ACEXML/common/DTD_Manager.h: + * ACEXML/common/DefaultHandler.cpp: + * ACEXML/common/DefaultHandler.h: + * ACEXML/common/Element_Def_Builder.cpp: + * ACEXML/common/Element_Def_Builder.h: + * ACEXML/common/EntityResolver.h: + * ACEXML/common/Env.cpp: + * ACEXML/common/Env.h: + * ACEXML/common/ErrorHandler.h: + * ACEXML/common/Exception.cpp: + * ACEXML/common/Exception.h: + * ACEXML/common/FileCharStream.cpp: + * ACEXML/common/FileCharStream.h: + * ACEXML/common/InputSource.cpp: + * ACEXML/common/InputSource.h: + * ACEXML/common/Locator.h: + * ACEXML/common/LocatorImpl.cpp: + * ACEXML/common/LocatorImpl.h: + * ACEXML/common/Makefile: + * ACEXML/common/NamespaceSupport.cpp: + * ACEXML/common/NamespaceSupport.h: + * ACEXML/common/SAXExceptions.cpp: + * ACEXML/common/SAXExceptions.h: + * ACEXML/common/Transcode.cpp: + * ACEXML/common/Transcode.h: + * ACEXML/common/Validator.cpp: + * ACEXML/common/Validator.h: + * ACEXML/common/XMLFilter.h: + * ACEXML/common/XMLFilterImpl.cpp: + * ACEXML/common/XMLFilterImpl.h: + * ACEXML/common/XMLReader.h: + * ACEXML/common/XML_Types.h: + * ACEXML/examples/SAXPrint/Makefile: + * ACEXML/examples/SAXPrint/Print_Handler.h: + * ACEXML/examples/SAXPrint/SAXPrint_Handler.h: + * ACEXML/examples/SAXPrint/main.cpp: + * ACEXML/parser/debug_validator/Debug_Attributes_Builder.cpp: + * ACEXML/parser/debug_validator/Debug_Attributes_Builder.h: + * ACEXML/parser/debug_validator/Debug_DTD_Manager.cpp: + * ACEXML/parser/debug_validator/Debug_DTD_Manager.h: + * ACEXML/parser/debug_validator/Debug_Element_Builder.cpp: + * ACEXML/parser/debug_validator/Debug_Element_Builder.h: + * ACEXML/parser/debug_validator/Element_Tree.cpp: + * ACEXML/parser/debug_validator/Element_Tree.h: + * ACEXML/parser/parser/Entity_Manager.cpp: + * ACEXML/parser/parser/Entity_Manager.h: + * ACEXML/parser/parser/Makefile: + * ACEXML/parser/parser/Parser.cpp: + * ACEXML/parser/parser/Parser.h: + * ACEXML/tests/Makefile: + * ACEXML/tests/NamespaceSupport_Test.cpp: + * ACEXML/tests/Transcoder_Test.cpp: + * etc/acexml.doxygen: Renamed directory XML to ACEXML and moved the + base directory to include XML related files to $(ACE_ROOT). + Thanks to Johnny Tucker for the + suggestion. + +Wed Feb 13 17:42:32 2002 Balachandran Natarajan + + * ace/Configuration.cpp (operator=): Fixed a warning in g++ + builds. Stupid mistake on my part :(. + +Wed Feb 13 12:45:06 2002 Balachandran Natarajan + + * ace/Configuration.cpp: + * tests/Config_Test.cpp (iniCompare): Fixed memory leaks. Thanks + to Johnny willemson for providing the patches. + +Wed Feb 13 11:46:54 2002 Nanbor Wang + + * XML/parser/parser/Makefile: Added a library (-lACEXML) to link + to. Thanks to John Michael Zorko for + reporting this. + +Tue Feb 12 20:30:53 2002 Douglas C. Schmidt + + * ace/WIN32_Proactor.cpp (handle_events): When the proactor + was called by the reactor in handle_signal() this method should + loop till all events are done. But the loop never got executed + twice because handle_events returned 1 on success and the loop + exits. To catch more than one notifications handle_events + should be called again. Even if the loop is executed twice and + no more events are outstanding handle_events should return 0 and + not -1 when calling with timeout 0. Calling + GetQueuedCompletionStatus with timeout value 0 returns FALSE and + errno "ERROR_SUCCESS". This check has to be added to + handle_events and 0 has to be returned. Thanks to Hartmut Quast + for reporting this. + +Tue Feb 12 16:18:59 2002 Ossama Othman + + * tests/Proactor_Test.cpp (logflag): + * tests/TP_Reactor_Test.cpp (logflag): + + Removed these unused global variables. Fixes an unused variable + warning. + +Tue Feb 12 11:50:18 2002 Nanbor Wang + + * bin/pippen.pl: Applied a patch from "the source" to fix a + problem in determining project dependencies. + +Tue Feb 12 09:37:56 2002 Ossama Othman + + * ACE-INSTALL.html: + + Corrected EGCS documentation. Native exception support is now + the default. [Bug 1149] + + G++ 2.7.x is no longer supported. Updated accordingly. + +Mon Feb 11 16:31:04 2002 Ossama Othman + + * bin/make_pretty.pl (is_warning): + + Do not flag Fuzz's "#pragma warning(push)/(pop)" test title as a + warning. + +Mon Feb 11 13:49:35 2002 Ossama Othman + + * bin/fuzz.pl (check_for_push_and_pop): + + New test that verifies the number of #pragma warning(push) + pragmas matches the number of #pragma warning(pop) pragmas. + + * examples/IPC_SAP/SSL_SAP/SSL-client.cpp (shared_client_test): + * examples/IPC_SAP/SSL_SAP/SSL-client-simple.cpp + (shared_client_test): + + Do not convert the buffer length to network byte order when + allocating the buffer. Fixes excessive memory allocation. This + was apparently a cut-n-paste bug. Thanks to M Schulze + . + + * THANKS: + + Added M Schulze to the Hall of Fame. + +Mon Feb 11 05:42:02 2002 Balachandran Natarajan + + * ace/Connector.h: Fixed a typo in the coments. Thanks to Miljenko + Norsic (ETK) for reporting + this. + +Sun Feb 10 16:28:30 2002 Douglas C. Schmidt + + * ace/config-macosx.h + * ace/config-freebsd.h + * ace/config-freebsd-pthread.h + * ace/TTY_IO.cpp: + * TODO: Removed the ACE_USES_HIGH_BAUD_RATES macro since it no longer + seems to be necessary. Thanks to Olli Savia for + reporting this. + + * ace/TTY_IO.cpp: Replaced the two strcmp() calls with one + strcasecmp(). Thanks to Olli Savia for reporting + this. + +Sat Feb 9 15:17:45 2002 Balachandran Natarajan + + * bin/make_release: Changed the path of gv as a new version of GV + was installed on deuce.doc. The old version had less colors and + it started mapping them to a smaller range. The graphs looked + very ugly. The new version fixes the problem and hence a change + in path. + +Fri Feb 8 22:56:29 2002 Balachandran Natarajan + + * ace/Log_Msg.cpp (log): Fixed a warning in TRU 64 builds. + +Fri Feb 8 14:54:21 2002 Douglas C. Schmidt + + * apps/JAWS2/Makefile (LDFLAGS): + * apps/JAWS2/HTTPU/Makefile (LDFLAGS): Fixed some makefile bugs so + that this stuff compiles on AIX. Thanks to Steve Ige + for reporting this. + +Thu Feb 7 18:13:03 2002 Douglas C. Schmidt + + * tests/ACE_Init_Test.cpp (wait_and_kill_dialog): Replaced the call + to EndDialog() with EndModalLoop() to fix a race condition. + Thanks to Petru Marginean for reporting this. + +Fri Feb 8 14:02:06 2002 Balachandran Natarajan + + * THANKS: Added Marco Kranawetter + to the hall of fame. + +Fri Feb 08 11:24:36 2002 Nanbor Wang + + * ace/String_Base.h: + * ace/Task_T.h: Removed the ACE_Export decl from ACE_Task and + ACE_String_Base. They were added as work-aronds for a VC7's + internal compiler bug but didn't seem to solve the problem. + Thanks to Patrick Bennett , Johnny, and + Christian Veleba for reporting + this. + +Thu Feb 7 16:19:39 2002 Steve Huston + + * ace/config-all.h: Define new macros, ACE_nothrow and ACE_nothrow_t, + to decide which variety of nothrow is used in new (nothrow). At + this point, HP aC++ is the only platform defined to use this + feature, so that's the only section that defines it. + + * ace/Svc_Handler.(cpp h): + * examples/Shared_Malloc/test_persistence.cpp: Use the new + ACE_nothrow[_t] macros in overridden operator new. + +Thu Feb 7 14:11:31 2002 Douglas C. Schmidt + + * ace/Singleton.cpp (close): Fixed the implementation so that the + ACE_Unmanaged_Singleton's internal singleton point is reset to 0 + after cleanup to avoid double-deletion. Thanks to Marc Walrave + for this fix. + +Thu Feb 7 07:52:47 2002 Douglas C. Schmidt + + * ace/Activation_Queue.{h,i}: Added get/set methods to access/update + the underlying ACE_Message_Queue so users can call methods on + the queue directly if necessary. Thanks to Timothy Kilbourn + for reporting this. + +Tue Feb 5 07:25:49 2002 Douglas C. Schmidt + + * tests/TP_Reactor_Test.cpp: Improved the comments to clarify the + differences between this test and the Thread_Pool_Reactor_Test.cpp. + Thanks to Alex Libman for explaining this. + +Thu Feb 7 08:16:24 2002 Oliver Kellogg + + * ACE-INSTALL.html: Document the include_env=1 make switch. + + * docs/exceptions.html: Replaced the "Transition from TAO_TRY + to ACE_TRY" section with "Transition from ACE_TRY_ENV usage + to ACE_ENV_ARG". + +Wed Feb 6 06:57:35 2002 Balachandran Natarajan + + * tests/run_test.lst: Disabled TP_Reactor_Test as the test is + hanging. + +Tue Feb 5 11:59:00 2002 Craig Rodrigues + + * tests/TP_Reactor_Test.cpp (disable_signal): Eliminate unused + arguments warning on Win32 platforms. + +Mon Feb 4 16:22:20 2002 Craig Rodrigues + + * ace/OS.h: Include instead of if + ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB is defined. + +Mon Feb 4 19:58:03 2002 Boris Kolpackov + + * ace/Log_Msg.cpp: + + Fixed minor bug in what's just commited before. + Thanks to Craig Rodrigues + for pointing it out. + +Mon Feb 4 14:11:14 2002 Boris Kolpackov + + * ace/Log_Msg.h: + * ace/Log_Msg.cpp: + + Added ability to install custom backend which is a + per-process entity as opposite to callback which is + a per-thread not-inheritable entity. + +Sun Feb 3 17:59:36 2002 Krishnakumar B + + * ace/config-sunos5.5.h (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION): + + Explicitly defined the above macro as this is needed for SunOS + gcc to work. This was inside a __SUNPRO_CC #ifdef. I missed that + in my previous change. This should fix the builds under SunOS + gcc. + +Sun Feb 3 18:32:29 2002 Craig Rodrigues + + * tests/TP_Reactor_Test.cpp: Use size_t instead of long + and int for index_ and sessions_ in order to eliminate + more compiler warnings. + +Sun Feb 3 09:20:04 2002 Douglas C. Schmidt + + * tests/TP_Reactor_Test.cpp: Fixed a bunch of warnings. Thanks + to Venkita for reporting this. + +Sun Feb 3 08:22:28 2002 Venkita Subramonian + + * tests/Makefile: + Regenerated makefile to create dependencies for TP_Reactor_Test. + +Sun Feb 3 08:05:12 2002 Venkita Subramonian + + * tests/TP_Reactor_Test.dsp (RSC): + Regenerated the file in MSVC++. + +Sun Feb 3 11:16:12 2002 Johnny Willemsen + + * tests/TP_Reactor_Test.cpp: + Fixed compile error in BCB unicode build + +Sat Feb 2 07:45:51 2002 Douglas C. Schmidt + + * tests/run_test.lst: + * tests/TP_Reactor_Test.dsp: + * tests/Makefile.bor: + * tests/Makefile: Added the TP_Reactor_Test. + + * tests/TP_Reactor_Test.cpp: Added another test of the ACE_TP_Reactor. + Thanks to Alex Libman for contributing this. + + * ace/config-irix6.x-common.h: IRIX 6.5 supports AIO, so we'll + enable these features. Thanks to Alex Libman for validating + this. + + * ace/Select_Reactor_T.cpp: Fixed work_pending() so that it takes + into account pending timers that need to be expired. Thanks to + Russ Noseworthy for reporting this. + + * ace/Select_Reactor_T.cpp: Simplified the logic for calculating + timeouts in wait_for_multiple_events(). + + * ace/Process.{h,i,cpp}: When using ACE_Process_Options with the + inherit_environment set to off, i.e., ACE_Process_Options opts + (0), ACE_Process::spawn() was improperly setting the environment + in the child's process after fork (), before exec (). Changed + ACE_Process::spawn to check for the inherit_environment flag, + and to use the execve () call instead of execvp () if + inherit_environment is false. Thanks to James Risinger + for contributing this fix. + + * ace/Process.{h,i}: Added "const" to the various accessor methods. + +Sat Feb 2 00:01:36 2002 Venkita Subramonian + + * ace/config-sunos5.6.h: + Added missing #endif. + +Fri Feb 1 23:42:03 2002 Venkita Subramonian + + * ace/config-all.h: + Removed extra ). + +Fri Feb 1 21:08:37 2002 Steve Huston + + * tests/Framework_Component_Test.icc: + * tests/Vector_Test.icc: New Visual Age C++ test configurations. + + * tests/tests.icp: Add new test configurations to the project. + +Fri Jan 1 19:33:49 2002 Steve Huston + + * ace/Vector.(h i cpp): Removed 'const' from the 2nd template + argument (size_T DEFAULT_SIZE). A size_t is always const, + and having const there causes errors from HP aC++. I'm not sure + if they're completely legit, but Stroustrup 3rd Ed says the + template argument is const anyway... if this is a problem, + please let me know. + +Fri Feb 1 18:53:44 2002 Steve Huston + + * ace/ace.icc: Added Framework_Component.(h cpp) to the files list. + +Fri Feb 1 10:19:46 2002 Jeff Parsons + + * Thread_Manager.h: + + Removed extra '*/'. + +Fri Feb 01 00:00:12 2002 Nanbor Wang + + * ace/Task.h: + * ace/Thread_Manager.h: Added more explanation on how to use the + argument. Thanks to Petr Shelomovsky + for motivating the change. + +Thu Jan 31 19:18:37 2002 Steve Huston + + * ace/NT_Service.{h cpp}: To avoid race condition at shutdown time, + moved the call to report_status(SERVICE_STOPPED, 0) from the + open() method to a new override of the fini() method. Setting + status to SERVICE_STOPPED frees up Windows to do its own shutdown + for the service, and that can't be allowed to commence until all + ACE_NT_Service things are done. Thanks to Zoran Cetusic + , Patrick Bennett and Felix Wyss from + Interactive Intelligence, Inc. for diagnosing this problem and + sending in a fix. + + * THANKS: Added Zoran Cetusic, Patrick Bennett, and Felix Wyss to + the Hall of Fame. + +Thu Jan 31 17:00:52 2002 Balachandran Natarajan + + * ace/config-all.h: Need to include with all versions of + SunCC compiler and not just CC 5.0, when the compiler is using + compat mode 4. + * ace/config-sunos5.6.h: Need to define ACE_LACKS_ACE_IOSTREAM + when higher versions of CC are used with compat mode 4 and + such. + + Thanks to Tim Rydell for the fixes. + + * THANKS: Added Tim Rydell to the hall of fame. + +Thu Jan 31 17:21:49 2002 Steve Huston + + * ace/Trace.cpp (constructor and destructor): Do not attempt + trace output if ACE has not been initialized. There is too + much not set up yet to bother trying. If you are on a platform + with ACE_HAS_NONSTATIC_OBJECT_MANAGER (such as Windows) and you + really, really need tracing in static objects, you should + try #define ACE_HAS_NONSTATIC_OBJECT_MANAGER 0 in your config.h + along with #define ACE_NTRACE 0. Beware, though, there are + crocodiles lurking there - platforms defined to use non-static + object manager are that way for good reason. + + Thank you to Shmulik Regev for reporting this. + +Thu Jan 31 13:32:07 2002 Nanbor Wang + + * XML/common/XML_Common.dsp: Fixed the LIB path to use relative + path. + +Thu Jan 31 19:18:16 2002 Oliver Kellogg + + * include/makeinclude/wrapper_macros.GNU: + Corrected placement of the include_env switch. + include_env=1 is only sensible in combination with + exceptions=1. NB: The include_env switch is only + intended to facilitate transition to the ACE_ENV_ARG + macros and should not be used for new applications. + There will be unused-variable warnings when using this + build configuration. + +Thu Jan 31 11:57:07 2002 Nanbor Wang + + * XML/parser/debug_validator/Debug_Attributes_Builder.cpp: + * XML/parser/debug_validator/Debug_Element_Builder.cpp: + Temporarily removed unused arguments. + + * XML/common/FileCharStream.cpp (get): Made sure the character + read from the input file was converted to ACEXML_Char type + correctly. Casted the read XML_Char before comparing it to + 'EOF'. + +Thu Jan 31 13:06:12 2002 Boris Kolpackov + + * THANKS: + + Added Koushik Banerjee to the hall of fame. + +Wed Jan 30 22:41:39 2002 Krishnakumar B + + * include/makeinclude/platform_linux.GNU (CXX_VERSION): + + Made it work when someone wants to turn off the implicit + template instantiation. Care should be taken to #define + ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION in config.h also. + Surprisingly the code compiles without that also... + +Wed Jan 30 17:22:49 2002 Steve Huston + + * ace/Process.cpp (wait (const ACE_Time_Value&, ACE_exitcode *)): + * ace/Process_Manager.cpp (wait (pid_t, const ACE_Time_Value&, + ACE_exitcode *)): + The mechanism for waiting up to a specified time for a child + process to exit has been replaced. Replaces the fix from: + Fri Jan 25 19:58:41 2002 Steve Huston + and makes unnecessary any further work from: + Sat Jan 26 21:41:39 2002 Steve Huston + + Both classes now do a timed wait for a child by doing an + ACE_OS::sleep, counting on being interrupted if a SIGCHLD + is delivered. In ACE_Process_Manager when a reactor hasn't + been specified, and always in ACE_Process, a temporary + SIGCHLD handler is installed for the duration of the wait. + This is necessary because the default SIGCHLD action on + POSIX (and holds true for most non-Win32) is SIG_IGN, and + SIGCHLD is not generated when a child process exits. + Therefore, a handler is installed to force the SIGCHLD. + It's not needed in ACE_Process_Manager when a reactor is in + place because the reactor already has a handler for SIGCHLD. + +Wed Jan 30 15:11:49 2002 Krishnakumar B + + * include/makeinclude/platform_linux.GNU (CXX_VERSION): + * ace/config-g++-common.h: + + Turned off explicit template instantiation with gcc under Linux. + The specific versions are 2.95.x, 2.96, 3.0.x (3.x). Added a + flag implicit_templates to tweak the behaviour from the + platform_macros.GNU file. + + The combination of the compiler and binutils seems to give a + nice reduction in the footprint. + +Wed Jan 30 16:00:39 2002 Steve Huston + + * ace/Process_Manager.cpp (register_handler): Replaced ECHILD with + EINVAL if the pid is not found. Probably a more accurate + assessment of the situation, and should compile clean on WinCE. + +Wed Jan 30 13:50:17 2002 Douglas C. Schmidt + + * docs/index.html: Fixed the ACE-inheritance.pdf document so + it isn't gzipped. Thanks to Michael Searles + for reporting this. + +Wed Jan 30 09:28:12 2002 Johnny Willemsen + + * XML/parser/debug_validator/Debug_Attributes_Builder.cpp: + * XML/parser/debug_validator/Debug_DTD_Manager.cpp: + * XML/parser/debug_validator/Debug_Element_Builder.cpp: + * XML/parser/debug_validator/Element_Tree.cpp: + Added missing ACE_LIB_TEXT. This fixes the BCB unicode build errors + +Tue Jan 29 20:11:21 2002 Balachandran Natarajan + + * etc/*.doxygen (EXPAND_AS_DEFINED): Added ACE_CACHE_MAP_MANAGER + to the list in EXPAND_AS_DEFINED. Thanks to Don Hinton + for the suggestion. + +Tue Jan 29 19:36:24 2002 Balachandran Natarajan + + * bin/make_release: The whole release process has been moved to + Linux box. This is because the sun machines at WashU were having + problems and they are not dependable. The following are the list + of changes made + + - All the path related stuff have been changed ie. instead of + using /pkg/gnu tools, we use native tools on Linux now. + + - The gnu suffixes to many of the tools have been removed. + + - Most of the path to the tools have been hardcoded in the PATH + environment variabe. + + - Tools that were missing have been loaded on 3 main Linux boxes + at WashU including Graphviz and doxygen. + + - A beta cannot be cut from a sun box. + + - The script will recommend cutting a beta from deuce.doc. + + The script has been tested with a dummy release. + +Tue Jan 29 16:01:54 2002 Ossama Othman + + * bin/fuzz.pl (check_for_missing_rir_env): + + Check for ACE_ENV_ARG_PARAMETER instead of + TAO_ENV_ARG_PARAMETER. The latter is deprecated. + +Tue Jan 29 20:47:24 2002 Oliver Kellogg + + * docs/exceptions.html: Document the new ACE_ENV_ macros. + + * bin/subst_env.pl: Transform to ACE_ENV_ instead of TAO_ENV_. + +Tue Jan 29 08:39:24 2002 Oliver Kellogg + + * ace/CORBA_macros.h: + Added ACE_ENV_ARG macros to replace the TAO_ENV_ARG macros + defined in TAO/tao/orbconf.h. All exception related macros + are now defined in ace/CORBA_macros.h, and the TAO_ENV_ARG + macros will soon be deprecated. + + * include/makeinclude/wrapper_macros.GNU: + Added the include_env switch for compatibility with the + exception handling use before TAO 1.2.2. + +Tue Jan 29 08:17:12 2002 Johnny Willemsen + + * include/makeinclude/ace_flags.bor: + Added compiler flags for new cosevent orbsvcs test library CECTEST + Added compiler flags for new notify orbsvcs test library NotifyTests + +Mon Jan 28 17:44:51 2002 Steve Huston + + * ace/Process_Manager.cpp (wait): When waiting for a non-specific + process, specify -1 pid for waitpid(). This is necessary because + of Fri Jan 25 19:58:41 2002 Steve Huston + change to not alter the process group ID when ACE_Process_Manager + spawns a process. + Timed waits for a process still don't work on non-Win32, but + this fix corrects the failed wait with errno == ECHILD. + +Mon Jan 28 12:16:28 2002 Carlos O'Ryan + + * bin/auto_run_tests.lst: + Removed EC_Basic and Event_Latency tests from nightly builds, I + left them there by mistake when I took them out of the + repository (around December, 25th 2001) + +Mon Jan 28 13:20:32 2002 Nanbor Wang + + * XML/common/AttributesImpl.cpp: Removed a bunch of inline + designators. + +Sun Jan 27 22:18:50 2002 Nanbor Wang + + * bin/msvc_auto_compile.pl: Projects in XML subdirectory are + interdependent. List out the order they should be built + explicitly. + +Sun Jan 27 12:48:48 2002 Ossama Othman + + * bin/auto_run_tests.lst + * bin/performance_stats.sh: + + Updated in accordance with the new TAO "Latency" performance + test organization. + +Sun Jan 27 12:08:45 2002 Nanbor Wang + + * XML/common/Transcode.h (ACEXML_Transcoder): Improved the + documentation. + + The followings fixed the Tru64 warnings/errors. + + * XML/common/AttributesImpl.i (operator): + * XML/common/Env.i: Reordered inline functions. + + * XML/tests/Transcoder_Test.cpp: Removed an unused argument. + + * XML/common/Attributes_Def_Builder.h: Added inclusion of + "ace/Auto_Ptr.h". + + * XML/examples/SAXPrint/SAXPrint_Handler.cpp: + * XML/examples/SAXPrint/Print_Handler.cpp: Added inclusion of + "ace/Log_Msg.h". + +Sun Jan 27 15:03:12 2002 Johnny Willemsen + + * Makefile.bor: + Build the XML library with BCB + + * XML/parser/Makefile.bor: + Added debug_validator + + * XML/parser/debug_validator/Makefile.bor: + Added BCB makefile + +Sat Jan 26 19:02:49 2002 Ossama Othman + + * ace/Process_Manager.cpp (register_handler): + + Corrected code that always returned -1. Code that should only + have been run on error was always run since it was outside of an + "if block." Curly braces are a good thing (they were missing). + +Sat Jan 26 21:41:39 2002 Steve Huston + + * ace/Process_Manager.cpp (wait): Fixed compiler warning on + Linux about unused wait_until. This fix removes the ability + to spin around the 'for' loop waiting for signals multiple + times with the timeout decreasing to account for wait time. + Will have to come back to restore this functionality later. + +Sat Jan 26 14:40:12 2002 Johnny Willemsen + + * include/makeinclude/ace_flags.bor: + Added compiler and linker flags for new XML library + + * XML/common/Makefile.bor: + * XML/parser/parser.Makefile.bor: + * XML/Makefile.bor: + * XML/parser/Makefile.bor: + * XML/tests/Makefile.bor: + Added BCB makefiles for the new XML library. + +Fri Jan 25 19:58:41 2002 Steve Huston + + * ace/Process_Manager.cpp (wait(pid_t, const ACE_Time_Value &, + ACE_exitcode *status)): If platform offers sigtimedwait, use it + instead of setting ualarm and then doing sigwait. Once ualarm + is set, it will fire, even if this method has returned. This + causes Solaris processes to die on SIGALRM. + + Also, do not play with the process group ID by default. It's + not needed for doing normal signal management by most processes. + If processes really have a need to change or set a new process + group, they need to do it explicitly by using ACE_OS::setpgid() + or by setting a process group ID in an ACE_Process_Options object + when spawning processes. + + * tests/Process_Manager_Test.cpp: Added a bit more diagnostic info. + +Fri Jan 25 18:29:37 2002 Steve Huston + + * ace/config-aix-4.x.h: Removed ACE_HAS_SIGTIMEDWAIT. It compiles, + but returns ENOSYS at run time. + + * ace/config-aix5.1.h: Added ACE_HAS_SIGTIMEDWAIT. + +Fri Jan 25 15:36:40 2002 Nanbor Wang + + * ace/ace_dll.dsp: Removed /version flags from the project since + they have been taken care of by ace.rc file. Thanks to Ossama + for pointing it out. + +Fri Jan 25 14:45:00 2002 Venkita Subramonian + + * bin/auto_run_tests.lst: + Added Two_Objects test to the list. + +Fri Jan 25 14:40:15 2002 Nanbor Wang + + * XML/common/Exception.cpp: + * XML/common/NamespaceSupport.cpp: + * XML/common/SAXExceptions.cpp: + * XML/parser/parser/Parser.cpp: Moved the initialization of static + members before the inclusion of inline files to avoid + compilation erros on Borland compiler. Thanks to Johnny + Willemsen for figuring this out. + +Fri Jan 25 14:31:06 2002 Nanbor Wang + + * XML/common/NamespaceSupport.cpp: + * XML/parser/parser/Parser.cpp: Fixed several KCC warnings. + +Fri Jan 25 12:01:14 2002 Nanbor Wang + + The following changes fixed SunCC5.1 compilation errors. + + * XML/common/Makefile: + * XML/parser/parser/Makefile: + * XML/tests/Makefile: + * XML/examples/SAXPrint/Makefile: Removed extra spaces for -I + flags. + + * XML/common/Attributes_Def_Builder.h: Removed a redundant comma. + + * XML/common/NamespaceSupport.i: Changed + ACE_TEMPLATE_METHOD_SPECIALIZATION to + ACE_TEMPLATE_SPECIALIZATION. + + * XML/tests/NamespaceSupport_Test.cpp: String literals needed to + be assigned to const char *. + +Fri Jan 25 09:42:12 2002 Ossama Othman + + * ace/ace_dll.dsp: + + Corrected inconsistency in the DLL minor version. The correct + minor version for the ACE 5.2 series is "2," not "1." + +Fri Jan 25 11:21:28 2002 Nanbor Wang + + * bin/msvc_auto_compile.pl: Added XML into the list of auto build + targets. + +Fri Jan 25 00:37:00 2002 Douglas C. Schmidt + + * We now have 1,400 contributors to the ACE+TAO software. Yow! + +Thu Jan 24 17:49:46 2002 Balachandran Natarajan + + * ace/CDR_Stream.i: Fixed the check for the length within + ACE_InputCDR::read_*_array (). The method was checking just for + length passed in, which happens to be the number of elements in + the array, instead of the number of bytes necessary for the + elements. Thanks to William R Volz for + reporting this. + + * THANKS: Added William Volz to the hall of fame. + +Thu Jan 24 18:31:49 2002 Steve Huston + + * tests/Process_Manager_Test.cpp: Better diagnostics added. + +Thu Jan 24 15:14:52 2002 Nanbor Wang + + * ace/Lib_Find.cpp (ldfind): Restored previously removed Win32 + code and re-organized macros so we wouldn't upset CE builds. + +Thu Jan 24 14:53:38 2002 Nanbor Wang + + * bin/generate_doxygen.pl: + * etc/acexml.doxygen: Added the doxygen config file for XML + subdirectory. + + * Makefile: Added XML subdirectory into the lists to be compiled + and be included in the release. + + * XML/*: Merged in the XML parser code. + +Thu Jan 24 10:14:47 2002 Nanbor Wang + + * ace/ace_wchar.h: Added the definition for ACE_TEXT_SearchPath. + + * ace/Lib_Find.cpp (ldfind): Fixed UNICODE and Fuzz builds + errors. Thanks to Johnny Willemsen for + the fix. + +Wed Jan 23 16:48:54 2002 Nanbor Wang + + * ace/Lib_Find.h: + * ace/Lib_Find.cpp (ldfind): Change to use Win32 API SearchPath to + search for the target DLL and updated the document for ldfind in + header file. Thanks to Eugene Alterman + for submitting the patch. + +Wed Jan 23 14:01:32 2002 Ossama Othman + + * ace/config-lynxos.h (ACE_LACKS_INET_ATON): + + LynxOS does not implement the inet_aton() function. + +Wed Jan 23 16:37:52 2002 Steve Huston + + * ace/NT_Service.cpp (insert): If the CreateService call fails, + be sure to save the error value before making another Win32 call + that will smash it. Thanks to Kelly Hickel + for reporting this. + Also ACE-ified the source better. + + * examples/NT_Service/main.cpp: Added some ACE_ERROR output if + operations requested from the command line fail. + +Wed Jan 23 16:14:43 2002 Boris Kolpackov + + * include/makeinclude/platform_sunos5_sunc++.GNU + + Added work around for famous Sun CC "pure virtual function called" + bug. Unfortunately this involves introduction of yet another #define. + See TAO/tao/ValueBase.h for more information. + +Tue Jan 22 21:27:25 2002 Balachandran Natarajan + + * ace/ace_dll.vcp: Add Frameork_Component.* to the builds. Thanks + to Venkita for pointing it out. + +Tue Jan 22 17:42:39 2002 Steve Huston + + * ace/NT_Service.(h cpp): Added two new methods: + void capture_log_msg_attributes (void): Grabs a copy of the + calling thread's ACE_OS_Log_Msg_Attributes to facilitate + inheritance of the logging attributes in the service thread. + void inherit_log_msg_attributes (void): Called in a service + thread, inherits the main thread's logging attributes. + Modified the ACE_NT_SERVICE_RUN macro to capture the main + thread's logging attributes before starting the service control + dispatcher. Modified the ACE_NT_SERVICE_DEFINE macro to call + inherit_log_msg_attributes if the ACE_NT_Service object for + the service was set up before the thread started. + Fixes Bugzilla # 82. + + * examples/NT_Service/main.cpp: + * examples/NT_Service/ntsvc.cpp: Now writes a log file in the current + working directory which should have messages from both main and + service threads in it. + +Tue Jan 22 15:19:29 2002 Nanbor Wang + + * ace/DLL.cpp: Changed to invoke this->open() in the + constructor. Thanks to Eugene Alterman + for motivating this. + +Mon Jan 21 23:27:03 2002 Nanbor Wang + + * ace/OS.h: Reordered main redefinition macros so that it actually + passed wchar argv to main when UNICODE is defined. + +Mon Jan 21 10:01:34 2002 Frank Hunleth + + * bin/auto_run_tests.lst: + Added MIOP unit tests. + +Mon Jan 21 03:00:14 2002 Ossama Othman + + * ace/Framework_Component.cpp (register_component): + + Removed debugging statements that always printed text. + +Mon Jan 21 07:45:12 2002 Johnny Willemsen + + * ace/Framework_Component.cpp: + Fixed fuzz error + +Mon Jan 21 00:13:42 2002 Christopher Kohlhoff + + * ace/streams.h: + Workaround for Borland C++ 5.5.1 bug we have now just hit. + +Sun Jan 20 21:42:53 2002 Balachandran Natarajan + + * ace/Framework_Component.cpp: + * ace/Framework_Component_T.cpp: Fixed fuzz errors. + +2002-01-20 Oliver Kellogg + + * bin/subst_env.pl: New script to ease the transition to the + TAO_ENV_ARG macros defined in TAO/tao/orbconf.h. + +Sun Jan 20 12:38:28 2002 Balachandran Natarajan + + * tests/Framework_Component_Test.dsp: New dsp file for the test. + * tests/tests.dsw: Added the above test to the workspace. + +Sun Jan 20 12:25:28 2002 Balachandran Natarajan + + * ace/Framework_Component.h: Removed the definition of the + default constructor (in ACE_UNIMPLEMENTED_FUNC definition). The + other private constructor with a default argument tends towards + a default constructor and VC++ signals a multiple definition + error. Not sure how g++ didnt signal this one. + + * ace/Framework_Component_T.h: #include'd Framework_Component.h + * ace/Framework_Component_T.cpp: Added a #ifndef around the file. + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Added the Framwork_Component* files to the + project file. + +Sun Jan 20 10:40:28 2002 Nanbor Wang + + * tests/Vector_Test.dsp: + * tests/tests.dsw: Added a new project for Vector_Test. + +Sun Jan 20 16:25:12 2002 Johnny Willemsen + + * ace/Makefile.bor: + Added new Framework_Component + + * tests/Makefile.bor: + Added new Framework_Component_Test + +Sun Jan 20 00:00:30 2002 UTC Don Hinton + + * ace/Vector_T.cpp (dump): Commented out the contents of this + function for the time being. It assumed that the element + was an object with a dump() method, which won't always be + the case. + + * tests/Vector_Test.cpp: Changed a few data types from signed + to unsigned, size_t, to get rid of compiler warnings. + +Sat Jan 19 17:29:50 2002 Douglas C. Schmidt + + * ace/Vector_T.cpp (dump): Fixed problems with this method. Thanks + to Don Hinton for reporting this. + + * tests/Vector_Test.cpp: Changed the typedef of DATA from int to + size_t to avoid "type mismatch" compiler warnings. Thanks to + Don Hinton for reporting this. + +Sat Jan 19 22:30:26 UTC 2002 Don Hinton + + * apps/JAWS2/JAWS/Hash_Bucket_T.h: + * apps/JAWS2/JAWS/Assoc_Array.h: Added missing keyword "class" to + friend declarations. + + * ace/SString.cpp: Removed unneeded include of Service_Config.h. + + * ace/Service_Config.{h|cpp}: + * examples/Connection/misc/Connection_Handler.cpp: + + Removed static methods from ACE_Service_Config that delegated to + ACE_Reactor::instance(), and fixed a few instances where they were + still called. + + * ace/Object_Manager.cpp: + * ace/Service_Config.cpp: + * ace/Proactor.cpp: + * ace/Reactor.cpp: + + Added call to instance() methods that registers the singleton with + the new ACE_Framework_Repository so it can handle destruction, and + replaced explicit references to ACE_Reactor and ACE_Proactor with + calls to ACE_Framework_Repository. + + * ace/Framework_Component.{h|inl|cpp}: + * ace/Framework_Component_T.{h|inl|cpp}: + * ace/Makefile: + * tests/Framework_Component_Test.cpp: + * tests/Makefile: + * tests/run_test.lst: + + Added ACE_Framework_Repository to manage ACE_Framework_Component's, + e.g., singletons like ACE_Reactor or ACE_Proactor. It uses + External Polymorphism obviating any interface changes. The + components register themselves with repository in their instance + methods. This allows the Object_Manager and Service_Config to + manage these components without having to know about them a priori. + + This was needed to reduce footprint for applications like TAO that + don't need to use all the available components, e.g., ACE_Proactor. + +Sat Jan 19 10:23:39 2002 Douglas C. Schmidt + + * ace/Makefile (TEMPLATE_FILES): + * tests/Makefile.bor: + * tests/Makefile: + * tests/run_test.lst: + * ace/Vector_T.{h,i,cpp}: + * tests/Vector_Test.cpp: Added support for the new ACE_Vector to + the appropriate places. This vector behaves like the STL + vector. Thanks to Gonzo and Craig Ching for contributing this. + + * ace/Future_Set.h: Updated the documentation to explain how + various features work better. Thanks to Johnny Tucker for + contributing this. + +Fri Jan 18 19:09:41 2002 Steve Huston + + * tests/run_test.lst: Re-enabled Process_Manager_Test for all but + Chorus and VxWorks. Could not find a reason it was disabled. + Also enabled Process_Mutex_Test on Win32. + +Fri Jan 18 16:44:29 2002 Steve Huston + + * ace/ace.icc: Added Reactor_Notification_Strategy.(h cpp) sources. + + * ace/Reactor_Notification_Strategy.cpp: Fixed ACE_RCSID to refer to + Reactor_Notification_Strategy, not Strategies. + + * tests/Get_Opt_Test.icc: + * tests/INET_Addr_Test.icc: New Visual Age C++ configs for these tests. + + * tests/tests.icp: Added Get_Opt_Test.icc and INET_Addr_Test.icc + +Fri Jan 18 12:56:36 2002 Douglas C. Schmidt + + * ace/Log_Msg.cpp (init_backend): Added support for SysLog on platforms + that don't lack it. Thanks to Alexei I. Adamovich + for reporting this fix. + +Fri Jan 18 10:29:06 2002 Ossama Othman + + * ace/Service_Config.h (process_file): + * ace/Service_Config.cpp (process_directives, process_file): + + Factored out code that processes a svc.conf file into the new + static process_file() method. This allows svc.conf files to be + explicitly parsed by the application at any arbitrary point in + time instead of Service Configuration initialization time alone. + +Thu Jan 17 18:51:09 2002 Douglas C. Schmidt + + * ace/Name_Space.cpp (operator =): Fixed a memory leak. Thanks + to Ian Cahoon for reporting this. + +Thu Jan 17 12:13:51 2002 Ossama Othman + + * ace/SSL/SSL_Context.h (private_key, verify_private_key): + + Added new documentation. These methods should only be called + after a certificate has been set since key verification is + performed against the certificate, among other things. + +Thu Jan 17 13:11:27 2002 Chad Elliott + + * ace/Message_Queue.h: + * ace/Message_Queue.cpp: + * ace/Message_Queue_T.h: + * ace/Message_Queue_T.cpp: + + Provide the ability to enqueue based on the message deadline and + to dequeue based on priority, deadline and from the end. + +Wed Jan 16 11:24:52 2002 Priyanka Gontla + + * THANKS: + Updated to add Gerhard Voss . + +Wed Jan 16 06:19:01 2002 Douglas C. Schmidt + + * ace/OS.i: Replaced "set" with "sset" in sigtimedwait() and sigwait() + to avoid STL symbol clashes with MSVC++ 6.0. Thanks to Shmulik + Regev for reporting this. + +Wed Jan 16 09:01:12 2002 Johnny Willemsen + + * ace/Containers_T.{h,cpp}: + Added ACE_Fixed_Set_Const_Iterator to make it possible to + iterate through a const ACE_Fixed_Set instance + +Wed Jan 16 07:53:12 2002 Johnny Willemsen + + * include/makeinclude/ace_flags.bor: + Added new flags for the new TAO ETCL orbsvcs library + +Tue Jan 15 17:24:53 2002 Steve Huston + + * ace/SSL/SSL_Context.cpp (report_error()): Set ACE_OS::last_error() + to ERR_get_error() so the caller can get the error code later. + + * ace/SSL/SSL_SOCK_Connector.cpp: If the SSL handshake phase of a + connection attempt fails, close the underlying socket. + +Tue Jan 15 15:35:41 2002 Steve Huston + + * ace/SOCK_Connector.(h cpp): + * ace/LSOCK_Connector.(h i cpp): + * ace/MEM_Connector.(h cpp): + * ace/SSL/SSL_SOCK_Connector.(h cpp): + Improved the Doxygenation and removed the protocol_family and + protocol arguments from the ctors and connect() methods. The + protocol family is always taken from the ACE_Addr remote_sap + argument since it can now be either PF_INET or PF_INET6 (for + SOCK_Connector objects) and should be PF_UNIX for LSOCKs. + It is pointless to allow the user to request something that + is impossible to do correctly. + +Tue Jan 15 10:52:12 2002 Johnny Willemsen + + * include/makeinclude/ace_flags.bor: + Added new flags for the new TAO PortableGroup library + +Mon Jan 14 14:40:25 2002 Carlos O'Ryan + + * bin/g++dep: + Fixed small problems in the dependency generation: + - The script did not properly handle files with '+' in their + names. + - In some cases the script generated escaped blanks, i.e. lines + containing a blank preceded by a backslash. Such blanks are + interpreted as part of a dependency name and break havoc with + the builds. + +Mon Jan 14 16:49:37 2002 Steve Huston + + * ace/OS.h (ACE_STATIC_SVC_DEFINE): Corrected the documentation to + say the service-implementing class must be derived from + ACE_Service_Object, not ACE_Service_Config. + +Mon Jan 14 07:40:16 2002 Douglas C. Schmidt + + * ace/OS.i (mmap): There was a typo that prevented the ACE Memory Map + stuff from working properly on Win9x. Thanks to Edan Ayal + for reporting this. + +Sun Jan 13 18:59:37 2002 Douglas C. Schmidt + + * ace/Memory_Pool.{h,cpp}: Added a new option that makes is possible + to control whether or not a fixed address will be used when + remapping a memory-mapped file. Thanks to Jonathan Reis + for this enhancement. + +Mon Jan 14 11:02:12 2002 Johnny Willemsen + + * include/makeinclude/ace_flags.bor: + Added flags for new TAO FT_ORB library + +Sun Jan 13 08:20:05 2002 Craig Rodrigues + + * ace/config-all.h: Make sure that ACE_bad_alloc + is defined as std::bad_alloc if + ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB macro is set. + Fixes gcc 3.0.3 compilation problem. + +Fri Jan 11 22:54:22 2002 Balachandran Natarajan + + * ace/config-lynxos.h: Added #define ACE_HAS_USING_KEYWORD to teh + file. The compiler supports namespaces. According to the new + rules at the doc_group, we dont use any compilers that dont + support namespaces. The above macro is itself a waste. But we + cannot remove it overnight as it has far reaching + consequences. Working around that for the timebeing. + +Thu Jan 10 18:35:41 2002 Steve Huston + + * ace/Profile_Timer.h: Clarified that elapsed_time() calculates time + from start() to stop(). Improved Doxygenation. + +Thu Jan 10 16:53:41 2002 Nanbor Wang + + * examples/Service_Configurator/IPC-tests/server/server.dsp: The + Release version of the library needs to link in ADVAPI32.LIB as + GetUserName is used in ACE's inline code. + +Wed Jan 9 22:07:50 2002 Douglas C. Schmidt + + * ace/Logging_Strategy.cpp (fini): Make sure to cancel the + timer if interval_ and max_size_ are > 0. Thanks to Yaniv Ben + Ari for reporting this. + +Wed Jan 9 11:38:58 2002 Ossama Othman + + * tests/SSL/Makefile (LDLIBS): + + Added missing SSL and crypto libraries. Fixed link errors. + Thanks to Marvin Wolfthal for reporting the + error and suggesting a fix. + +Wed Jan 9 12:24:39 2002 Steve Huston + + * ace/Process.cpp (spawn): Don't attempt ACE_OS::setpgid if + ACE_LACKS_SETPGID is defined. Thanks to Victor Terber + for reporting this. + +Wed Jan 09 11:19:07 2002 Nanbor Wang + + * ace/OS.h: Updated the comment for ACE_CE_Bridge to indicate that + it's obsolete and will be removed in the future. + +Wed Jan 9 00:48:48 2002 Don Hinton + + * ace/Get_Opt.cpp: Make sure to cast away constness + before deleting an ACE_TCHAR array. Thanks to + Bala for reporting this. + +Tue Jan 8 17:29:33 2002 Steve Huston + + * ace/SSL/SSL_SOCK_Connector.cpp: Don't try to dereference a 0 + timeout pointer. Gack. Thanks to Ossama for pointing this out. + +Tue Jan 8 15:51:06 2002 Don Hinton + + * ace/Get_Opt.cpp + * ace/Service_Config.cpp: + + Moved the template instantiations from Service_Config.cpp to + Get_Opt.cpp where they belong. + + * ace/Get_Opt.{h.cpp}: Replaced ACE_TString with ACE_TCHAR for + type of member variable ACE_Get_Opt_Long_Option since it + wasn't really needed and took up space. + +Tue Jan 8 10:43:48 2002 Ossama Othman + + * ace/config-sunos5.5.h (ACE_LACKS_INET_ATON): + + Solaris does indeed implement the inet_aton() function, but it + is found in `libresolv.*'. It doesn't seem worth it to link + another library just for that function. Just use the emulation + in ACE that has been used for years. + +Tue Jan 8 11:31:22 2002 Steve Huston + + * tests/Makefile: When doing realclean, use the DLL_Test and + Service_Config_DLL Makefiles to clean their files up. + +Tue Jan 8 08:36:33 2002 Steve Huston + + * ace/SSL/SSL_SOCK_Acceptor.cpp (ssl_accept): + * ace/SSL/SSL_SOCK_Connector.cpp (ssl_connect): Corrected order + of operations checking EWOULDBLOCK, and fixed compile errors. + Thanks to Vlado Chovanec for this fix. + +Mon Jan 7 19:55:39 2002 Steve Huston + + * ace/SSL/SSL_SOCK_Acceptor.cpp (ssl_accept): + * ace/SSL/SSL_SOCK_Connector.cpp (ssl_connect): Added extra check + for SSL_accept/connect status failure to avoid looping on a bad + socket if the socket closes during handshake. Thanks to Vlado + Chovanec for this fix. + + Also added timeout countdown support for SSL_SOCK_Connector, same + as in: Sun Jan 6 09:37:02 2002 Ossama Othman + +Mon Jan 7 15:55:26 2002 Ossama Othman + + * ace/INET_Addr.cpp (set): + + Pass a pointer to a "struct in_addr" to inet_aton(), i.e. the + proper type, instead of a forcibly casted ACE_UINT32. Also + updated existing code to use the in_addr::s_addr member instead + of the previous ACE_UINT32 variable. + +Mon Jan 7 15:13:09 2002 Mayur Deshpande + + * performance-tests/Misc/context_switch_time.cpp (main): + Since the Yield_test does seem to work on VxWorks now (see + ChangeLog below), the 'ifdefs' for bypassing VxWorks for the + Yield-Test have now been removed. + +Mon Jan 7 15:08:25 2002 Mayur Deshpande + + * ace/OS.i (thr_yield): + Changed ::taskDelay (1) to ::taskDelay (0) for VxWorks in + thr_yield (). The change with (0), now does seem to perform + the yield correctly as reflected in the Yield-Test of + context_switch_time. Thanks to Charlie Grames + for this tip. + +Mon Jan 7 15:16:10 2002 Ossama Othman + + * ace/OS.h (INADDR_NONE): + + If the platform does not define this constant, then define it. + + * ace/OS.cpp (inet_aton): + + For some reason we were emulating inet_aton() on all platforms + using the now deprecated inet_addr() function. Use the native + inet_aton() function unless ACE_LACKS_INET_ATON is defined. + + Instead of performing a memcpy() of the IPv4 32-bit address into + the in_addr data structure, simply assign it to the s_addr field + of that data structure. It's not clear why we didn't do this in + the first place. + + (inet_ntoa): + + Fixed PSoS emulation of this method. The result is supposed to + be stored in a statically allocated string, not a dynamically + allocated one. Fixes a memory leak. Note that this change + makes the implementation non-reentrant. However, inet_ntoa() + was not designed to be reentrant to begin with. + + * ace/OS.i (inet_addr): + + On error, inet_addr() is supposed to return INADDR_NONE. + + The return value should be a 32 bit unsigned integer, not a + signed one. + + * ace/config-win32-common.h: + + MS Windows does not support the inet_aton() function. Define + ACE_LACKS_INET_ATON. + +Mon Jan 7 12:20:26 2002 Ossama Othman + + * bin/auto_run_tests.lst: + + Added the MT_SSLIOP test to the regression test suite list. + +Sun Jan 6 21:19:10 2002 John Aughey + + * tests/run_test.lst: Uncommented out Conn_Test from daily builds. + +Sun Jan 6 21:09:10 2002 John Aughey + + * ace/INET_Addr.cpp: + * ace/INET_Addr.h: + + Reverted to January 1 version until I have time to put the + set_host_name() method in correctly. + +Sun Jan 6 20:01:10 2002 Balachandran Natarajan + + * tests/run_test.lst: Commented out Conn_Test from the daily + builds. This test seems to hang blocking build progress. Have + sent a mail to John Aughey on this. + +Sun Jan 6 09:37:02 2002 Ossama Othman + + * ace/SSL/SSL_SOCK_Acceptor.cpp (accept, ssl_accept): + + Take into account the time to complete the basic TCP handshake + and the SSL handshake. Specifically, ACE_Countdown_Time is used + to reduce the timeout value after each IO operation + (e.g. accept(), SSL_accept()) used during SSL passive connection + establishment. [Bug 1110] + + Commented out debugging statements. + +Sat Jan 5 20:57:36 2002 Venkita Subramonian + + * ace/Future.cpp (get): Added another ACE_const_cast in addition + to Doug's changes to fix compile errors. See below. + +Sat Jan 5 14:57:36 2002 Craig Rodrigues + + * ace/OS_QoS.h: Fix comments, put in doxygen format. + +Sat Jan 5 08:59:41 2002 Douglas C. Schmidt + + * ace/Future.cpp (get): Added an ACE_const_cast() to silence certain + C++ compilers. Thanks to Venkita for reporting this. + +Fri Jan 5 15:17:12 2002 Johnny Willemsen + + * ace/OS.{h,cpp}: + Added ACE_TSS_Emulation::release_key() method to release a + thread_key within the TSS_Emulation when a thread is stopped. + Added ACE_TSS_Emulation::tss_keys_used_ member to administrate which + thread_keys are used and which not. + Added ACE_TSS_Keys::is_set() method to test whether a specific + thread_key is marked as used. + Changed ACE_TSS_Emulation::next_key() method to return a thread_key + that is not used yet, this key is then marked as used at the same + time. + Changed ACE_OS::thr_keyfree() method to release the key in the + TSS_Emulation when ACE_HAS_TSS_EMULATION is defined. + + These changes fix the bugzilla bugs 223 and 657. The ACE_TSS_Emulation + now recycles keys that are released earlier. + +Fri Jan 4 19:59:03 2002 John Aughey + + * ace/INET_Addr.cpp: Fixed the new set_host_name method + +Fri Jan 4 18:59:27 2002 Balachandran Natarajan + + * ChangeLogs/ChangeLog-01b: Added a new file. Trimmed this file + to have entries only in 2002. + +Fri Jan 4 15:50:42 2002 Steve Huston + + * ace/SSL/SSL_SOCK_Acceptor.cpp (ssl_accept): + * ace/SSL/SSL_SOCK_Connector.cpp (ssl_connect): + On ACE::select-reported timeout or failure, set status to return + a -1 to caller, not 0. Thanks to Vladimir Chovanec + for reporting this and sending a fix. + +Fri Jan 4 08:31:49 2002 Douglas C. Schmidt + + * tests/Thread_Manager_Test.cpp (test_task_record_keeping): Fixed + a typo in an expression on line 226. Thanks to Harvinder + Sawhney for reporting this. + +Fri Jan 4 05:51:22 2002 Douglas C. Schmidt + + * ace/Future.{h,cpp}: Made the get() and ready() methods const. + Thanks to Ran Kohavi for reporting this. + +Fri Jan 4 15:06:31 2002 Steve Huston + + * ace/String_Base.h (operator=): Add to ACE_String_Base + return type. Fixes compile error on IBM C/C++. + + * ace/SSL/SSL_SOCK_Acceptor.cpp (ssl_accept): + If SSL_get_error() returns SSL_ERROR_SYSCALL and it's EWOULDBLOCK, + don't blindly set both read and write handles for select. Check + if SSL is indicating SSL_want_write() and set the proper handle. + Also, don't ACE_ASSERT SSL_pending before return... if there's + an SSL handshake screw-up (like someone trying to break in) + just report the failure, don't abort/crash. + +Wed Jan 02 13:27:09 2002 Nanbor Wang + + * ace/INET_Addr.h: + * ace/INET_Addr.cpp: Removed tabs and trailing whitespaces. + +Wed Jan 2 08:19:18 2002 Douglas C. Schmidt + + * ace/FILE_Connector.h, + * ace/OS.h (ACE_OS): Clarified the weak semantics of O_APPEND + on Win32. Thanks to Eugene Alterman for + reporting this. + +Wed Jan 2 12:43:00 2002 John Aughey + + * ace/INET_Addr.h + * ace/INET_Addr.cpp : Added set_host_name method and moved + relevant code into this method. Changed signature of + set_address method to take a void pointer rather than a + char *. + +Wed Jan 2 12:30:01 2002 Chris Gill + + * ace/RB_Tree.i + * tests/RB_Tree_Test.cpp : added check for valid current node to + forward_i and reverse_i methods of iterator base class. Thanks to + Craig L. Ching for reporting this! + +Wed Jan 2 08:19:18 2002 Douglas C. Schmidt + + * tests/README: Clarify that run_test.pl should be used rather + the run_tests.sh. + + * tests/run_tests.bat: Clarify that run_test.pl should be used + on Win9x. Thanks to Edward A Thompson + for prompting this. + +Wed Jan 2 07:37:01 2002 Balachandran Natarajan + + * ace/Handle_Set.h: + * ace/Handle_Set.cpp: Added a method reset_state () to the + ACE_Handle_Set_Iterator class. + +Tue Jan 2 11:39:12 2002 Johnny Willemsen + + * ace/OS.i: + Added missing ACE_UNUSED_ARG in ACE_OS::event_timedwait + +Tue Jan 1 15:36:39 2002 Steve Huston + + * include/makeinclude/platform_sunos5_sunc++.GNU: Added support + for the buildbits=64 make option. + +Tue Jan 1 20:05:12 2002 Johnny Willemsen + + * ace/Name_Request_Reply.{h,cpp}: + Changed type of 3 constructor arguments from size_t to ACE_UINT32 + because the members in which these arguments are stored are also + of type ACE_UINT32 + + * ace/OS.i + In ACE_OS::umask method, changed the type in the ACE_OSCALL_RETURN + macro from int to mode_t because that is the return type of the + method + +Tue Jan 1 08:47:25 2002 Douglas C. Schmidt + + * ace/Thread.h: Clarify how the ACE_Thread_Adapter is deleted + when spawn() is called. Thanks to Preston Elder + for reporting this confusion. + +Tue Jan 1 14:09:26 2002 Johnny Willemsen + + * examples/Map_Manager/test_hash_map_manager.cpp: + Made this example compiling when ACE_USES_WCHAR is set + + * Makefile.bor: + Added examples directory because all examples for which there are + BCB makefiles now build when ACE_USES_WCHAR is set + +Tue Jan 1 00:02:12 2002 Nanbor Wang + + * ace/ace_dll.vcp: Added String_Base_Const.*. diff --git a/ACE/ChangeLogs/ChangeLog-02b b/ACE/ChangeLogs/ChangeLog-02b new file mode 100644 index 00000000000..c13db37e19f --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-02b @@ -0,0 +1,7227 @@ +Tue Dec 31 21:21:26 2002 Balachandran Natarajan + + * bin/generate_topinfo_charts.sh: + * bin/topinfo_stats.sh: Scripts to track the memory usage and plot + them. At present it works only for the simple test in + $TAO_ROOT/performance-tests/Memory/Single_Threaded. + +Tue Dec 31 17:57:19 2002 Steve Huston + + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.h: + Add #include "ace/Svc_Handler.h" + +Tue Dec 31 17:50:39 2002 Steve Huston + + * ace/OS.h: For WinCE 4 (.NET) and up, include rather than + typedef-ing ptrdiff_t. + +Tue Dec 31 17:26:41 2002 Steve Huston + + * tests/tests.mpc (DLL Test Lib): Add dllflags = ACE_BUILD_SVC_DLL to + add the correct /D option. The source uses ACE_Svc_Export to flag + dll import/export correctly. + + * tests/CE_fostream.h: #include "ace/config-all.h" before checking for + #if defined (ACE_HAS_WINCE). + +Tue Dec 31 15:05:42 2002 Steve Huston + + * ACEXML/apps/svcconf/Svcconf.cpp: Changed the condition for when + a dummy entrypoint is needed from AIX 4.3 to AIX and Visual Age C++ + version 5. Thanks for Jon Wackley for this adjustment. Also see: + Fri Dec 27 19:46:31 2002 Steve Huston + + * netsvcs/clients/Naming/Client/Makefile: If building this stuff, + reset OBJDIRS to $(VDIR) and $(VSHDIR) to clean up both. + +Mon Dec 30 21:30:41 2002 Steve Huston + + * include/makeinclude/platform_hpux_gcc.GNU: Removed the SOVERSION= + line to allow versions libraries to be set up properly. + + * ace/Based_Pointer_Repository.cpp: + * ace/Dynamic.cpp: + * ace/SString.cpp: + * tests/Framework_Component_DLL.cpp: + * tests/MEM_Stream_Test.cpp: + * tests/Process_Strategy_Test.cpp: + * tests/Timeprobe_Test.cpp: + * apps/drwho/File_Manager.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp: + * examples/Logger/Acceptor-server/server_loggerd.cpp: + * examples/Logger/simple-server/server_loggerd.cpp: + * examples/Threads/auto_event.cpp: + * examples/Threads/tss2.cpp: + Add __hpux to the conditions needed to instantiate + static template members. Also see + Sat Nov 23 18:12:37 2002 Steve Huston + +Mon Dec 30 19:32:18 2002 Steve Huston + + * tests/Codecs_Test.cpp: Add explicit template instantiation for + ACE_Auto_Basic_Array_Ptr. + +Mon Dec 30 18:44:20 Steve Huston + + * examples/C++NPv2/TP_Logging_Server.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp: + * examples/Logger/Acceptor-server/server_loggerd.cpp: + * examples/Logger/simple-server/server_loggerd.cpp: + * examples/Threads/auto_event.cpp: + * examples/Threads/tss2.cpp: + * performance-tests/Misc/test_singleton.cpp: + More singleton_ instantiations for g++ on AIX. + +Mon Dec 30 18:11:39 2002 Steve Huston + + * apps/drwho/File_Manager.cpp: Add explicit instantiation of + ACE_Singleton::singleton_. + Similar to those done for: + Tue Dec 3 20:47:39 2002 Steve Huston + +Mon Dec 30 17:38:31 2002 Steve Huston + + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp: + For Visual Age C++ 5 and up on AIX, explicitly instantiate the + CLI_Stream<> constructor. The compiler misses this one when + instantiating templates. Thank you very much to Jonathan + Wackley for diagnosing this problem and + leading to a workaround. + +Mon Dec 30 15:25:26 2002 Nanbor Wang + + * ACEXML/common/StrCharStream.cpp (open): + * ACEXML/common/FileCharStream.cpp (open): Changed to allow open + to succeed if automatic determination of encoding fails. This + allows the "Simple parsing" feature of ACEXML to work. Thanks + to Michael F"olsl for reporting the + problem. + + * ACEXML/examples/SAXPrint/main.cpp: Added a new option to test + out ACEXML's simpling parsing feature. + + * ACEXML/examples/SAXPrint/simple.svcconf.xml: Added this new + "simple" XML document to test out the "Simple" parsing feature + in ACEXML. + +Mon Dec 30 12:21:33 2002 Balachandran Natarajan + + * bin/MakeProjectCreator/config/taoversion.mpb: Fixed the version + information. This should automatically get updated during the + next beta/release. + +Sun Dec 29 18:27:38 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Prevented BiDirGIOP tests from running + in GIOP 10 builds. + +Sun Dec 29 16:43:03 2002 Nanbor Wang + + * ACEXML/common/FileCharStream.cpp (close): Changed to reset the + file pointer, filename_ and encoding_ strings after they are + release. Thanks to Andrew Marlow for + suggesting the change. + +Sun Dec 29 00:47:58 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Security tests using SSLIOP will not be + run in static builds. + +Sat Dec 28 23:05:51 2002 Steve Huston + + * bin/make_release: Use -relative to replace ACE_ROOT with a relative + path in generated makefiles. + +Sat Dec 28 13:16:24 2002 Nanbor Wang + + * ace/MEM_IO.cpp (recv_buf): Reverted my previous hack in: + + Fri Dec 27 08:38:29 2002 Nanbor Wang + + and make the connection close handling more robust. + + * tests/MEM_Stream_Test.cpp: Reverted my previous change in: + + Sat Dec 28 11:04:38 2002 Nanbor Wang + + It was not necessary. Added debug information for close + connection. + +Sat Dec 28 11:04:38 2002 Nanbor Wang + + * tests/MEM_Stream_Test.cpp: Made sure this test ignore the EIO + error from the following change when a connection was closed. + + Fri Dec 27 08:38:29 2002 Nanbor Wang + +Fri Dec 27 20:06:39 2002 Nanbor Wang + + * ace/Malloc_T.h: + * ace/Malloc_T.i: + * ace/Malloc_T.cpp: Added a new ACE_Malloc_T::bad () method to + query whether a Malloc_T object was constructed successfully. + This approach, IMO, is sub-optimal compared to using an explicit + init method approach. The existing constructor signatures, + however, prevent us from doing so without breaking backward + compatibility. + + * ace/MEM_SAP.cpp: Now that there's a way to check whether the + underlying Malloc is functioning or not. Changed MEM_SAP to + check for proper initialization of underlying Malloc object and + clean up OS resources if the Malloc object is defected. This + change makes MEM_Stream transport mechanism more robust. + +Fri Dec 27 19:46:31 2002 Steve Huston + + * ACEXML/apps/svcconf/Svcconf.cpp: Add a dummy entrypoint when + ACE_USES_CLASS_SVC_CONF == 0 on AIX 4.3. Else the AIX 4.3 linker + complains there are no csects or exported symbols saved at link + time. Thanks to Jon Wackley for reporting + this problem. + +Fri Dec 27 17:43:29 2002 Steve Huston + + * ace/OS.h: For WinCE, only typedef ptrdiff_t for _WIN32_WCE < 400. + eMbedded Visual C++ 4 (Win CE.NET) defines this type. + + * bin/MakeProjectCreator/templates/em3vcp.mpd: Removed /M$(CECrtMT) + from the CPP options. Neither evc3 nor 4 support any /M options to + set the C run-time like MSVC does. It's controlled via the _DEBUG + macro only. This also allows the generated vcp file to be used + with either evc3 or evc4 (Windows CE .NET). evc3 ignored the option, + but evc4 flags it as unknown. + +Fri Dec 27 08:38:29 2002 Nanbor Wang + + * ace/MEM_IO.cpp (recv_buf): Changed to return error (-1) and set + the errno to EIO when we receive 0 byte off the signaling socket + as this should never happen under normal circumstance. However, + on Win32 and Solaris, when one end of a connection closes the + socket while the other end is still reading the socket, the + active end will continuously receive several 0 bytes messages. + This confuses the hack of the MEM_IO mechanism and causes the + memory management routine to fall into a tight spinning + deadlock. + +Fri Dec 27 07:49:28 2002 Craig Rodrigues + + * ace/config-macosx.h: Remove temporary hacks for buggy + gcc 3.1 compiler. Thanks to John Zorko for reminding me about + this. + + * examples/Service_Configurator/IPC-tests/server/Makefile: + * examples/Service_Configurator/Misc/Makefile: + * examples/Timer_Queue/Makefile: + Add ACELIBS to ACE_SHLIBS to fix MacOS X linking problem. + +Thu Dec 26 17:11:54 2002 Balachandran Natarajan + + * bin/make_release: Fixed the following problems in the release + script which caused problems during the beta cutting process: + + - cvs commits of TAO/Changelog TAO/VERSION etc. failed. The + failure was because we were also commiting taoversion.mpb but + from $TAO_ROOT as "cvs commit ChangeLog VERSION + other_files ../bin/Makeyada". Using ../ to indicate files in + higher directories is an unpardonable mistake for cvs + 1.10.x. It used to work 1.9.x. But with 1.10* versions the + protocol changed disallowing the ../ + + - we didnt set the file permissions on the generated files + properly + + - the generated files from mpc were not added to the list of + files for which LF->CRLF conversions are supposed to be + masked during zip! + +Thu Dec 26 16:17:41 2002 Steve Huston + + * tests/tests.mpc: For DLL Test Lib, the source is DLL_Test_Impl.cpp, + not DLL_Test.cpp. + +Thu Dec 26 09:14:38 2002 Balachandran Natarajan + + * Makefile: Removed configure.in from the list of controlled files. + +Thu Dec 26 07:36:10 2002 Balachandran Natarajan + + * include/makeinclude/platform_freebsd_pthread.GNU: Removed for + sure now. This should have been removed in this "Thu Nov 14 + 22:47:45 UTC 2002 Craig Rodrigues " + checkin. Again, thanks to Craig for catching this. + +Thu Dec 26 07:31:42 2002 Balachandran Natarajan + + * apps/Gateway/Gateway/Makefile: Fixed a ttypo. Thanks to Craig + Rodrigues for catching this. + +Wed Dec 25 17:47:12 2002 Bala + + * ACE version 5.2.8 released. + +Wed Dec 25 17:39:05 2002 Balachandran Natarajan + + * bin/make_release: Fixed problems with generation of vcproj etc. + +Wed Dec 25 06:14:17 2002 Douglas C. Schmidt + + * Merry Christmas to all. May we have peace and justice for all in 2003. + +Tue Dec 24 17:29:11 2002 Balachandran Natarajan + + * docs/ACE-subsets.html: Documented the compiler options that + Steve Vranyes experimented and tested with to get a good + footprint reduction on Solaris. + +Tue Dec 24 07:31:54 2002 Balachandran Natarajan + + * ace/Argv_Type_Converter.h: + * ace/Argv_Type_Converter.cpp: Reverted the following changes "Mon + Dec 23 17:26:42 2002 Steve Huston " and + "Mon Dec 23 22:57:18 2002 Balachandran Natarajan + ". The argument parsing in + TAO gets busted due to these changes and most of tests in our + daily builds fail. + +Mon Dec 23 22:57:18 2002 Balachandran Natarajan + + * ace/Argv_Type_Converter.h: Changed saved_argc_ to be of type int + as opposed to int &. This seems to be necessitated by the change + "Mon Dec 23 17:26:42 2002 Steve Huston " + which gives compile errors on all platforms. + +Mon Dec 23 21:07:20 2002 Steve Huston + + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: Changed the Debug + define from DEBUG to _DEBUG, matching all others, and what the + ACE files expect. Fixes mismatch inlines in ACE tests. + + * tests/tests.mpc: Added CE_fostream.cpp to the CDR_File_Test inputs. + + * tests/CE_fostream.{cpp h}: Added #if defined (ACE_HAS_WINCE) to + prevent trying to compile this on non-CE systems. + +Mon Dec 23 17:26:42 2002 Steve Huston + + * ace/OS.h (main): For WinCE, eVC can't grok the #include within the + 'main' macro expansion, so #include "ace/Argv_Type_Converter.h" is + moved outside the macro definition. + + * ace/Argv_Type_Converter.{h cpp} (ctor): Change argc from int& to + int, else it can't be used in the way it's already coded into use + in the 'main' definition (above, OS.h). + + * tests/Dev_Poll_Reactor_Test.cpp: + * tests/Proactor_Test.cpp: + * tests/Proactor_Scatter_Gather_Test.cpp: Changed main() to + ACE_TMAIN(). + + * tests/FlReactor_Test.cpp: + * tests/XtReactor_Test.cpp: Add /**/ between #include and filename + to silence MS warnings about missing files during dependency updates. + +Mon Dec 23 16:16:05 2002 Boris S Kolpackov + + * bin/auto_run_tests.lst: Added + TAO/orbsvcs/tests/Security/Crash_Test to the list of tests. + +Mon Dec 23 17:08:17 2002 Balachandran Natarajan + + * THANKS: Changed Boris's information in the Hall of Fame. + +Mon Dec 23 12:13:51 2002 Steve Huston + + * examples/C++NPv1/Process_Per_Connection_Logging_Server.h: Add + 'public' keyword to Process_Per_Connection_Logging_Server's + inheritance from Logging_Server. + + * examples/C++NPv2/Makefile: Add a $(RM) -rf tempinc after each + mkfile make to clean up template instantiations for Visual Age C++ + on AIX. + + * examples/C++NPv2/Makefile.SLD: Add Logging_Handler to the files + comprising this service. + + * examples/C++NPv2/Makefile.SLDex: Added Logging_Acceptor, + Logging_Event_Handler, and Logging_Handler to the files for this + service. Removed the TEMPINC trick for Visual Age C++ to keep the + templates from each compile around for the link stage where they're + needed. + + * examples/C++NPv2/Makefile.CLD: Added Logging_Handler to files. Remove + TEMPINC destruction from each compile. + + * examples/C++NPv2/Makefile.TPLS: Add Logging_Handler to files. Remove + TEMPINC destruction from each compile. + +Mon Dec 23 14:05:21 UTC 2002 Johnny Willemsen + + * ace/config-cygwin32-common.h: + When ACE_IOV_MAX is not defined, define it is 64. The Cygwin header + files define IOV_MAX as MAX_INT-1 and ACE_IOV_MAX is defined as + IOV_MAX by default. Allocating an array of this size on the stack + results in compile errors, so we define ACE_IOV_MAX to a smaller and + more realistic number. + +Mon Dec 23 12:16:33 UTC 2002 Johnny Willemsen + + * ace/RMCast/RMCast_IO_UDP.cpp: + * ace/RMCast/RMCast_Fragment.cpp: + Use ACE_IOV_MAX instead of IOV_MAX. + +Mon Dec 23 12:02:33 UTC 2002 Johnny Willemsen + + * bin/ace_ld: + Extended this perl script so that the location of the __ctordtor.o + can be passed as -o command line option. The location is dependent + on the $VDIR in the vxworks make files. + + * include/makeinclude/platform_vxworks5.x_diab.GNU: + * include/makeinclude/platform_vxworks5.x_g++.GNU: + When calling the ace_ld perl script, pass the $VDIR as command line option + -o to the script. + +Sun Dec 22 11:41:56 2002 Balachandran Natarajan + + * ace/Connector.cpp: Fixed fuzz errors. + +Sun Dec 22 11:37:44 2002 Balachandran Natarajan + + * THANKS: Added Daniel White to the hall of fame! + +Sun Dec 22 11:31:53 2002 Craig Rodrigues + + * apps/Gateway/Gateway/Makefile: + * apps/Gateway/Peer/Makefile: Add $(ACELIB) to $(ACE_SHLIBS) so + that -lACE is added to the linkline when a shared library is + built. Solves linking problem MacOS X. Thanks to John Zorko and + Daniel white for pointing this out. + +Sun Dec 22 10:25:35 2002 Balachandran Natarajan + + * ace/Connector.cpp: Fixed a warning with g++. + +Sun Dec 22 09:18:00 2002 Balachandran Natarajan + + * ace/Connector.cpp: + * ace/Connector.h: Added a lock to the ACE_Connector class to + make the following atomic + + . Registration of AST with the handler_map_ + . Registration of the ACE_Connector with the Reactor + . and the registration of timers with the Reactor's timer + queue. + + If they are not atomic, it throws open race conditions such as + the ones documented in BUG 1405. This is not complete fix for + BUG 1405, since it taxes applications using only one thread with a + lock. This is a short-term fix to prevent the race condition + from occuring. + + Other relevant changes include + + . the AST is now refcounted + . the AST cannot be deleted directly. The lifetime of the AST + can only be manipulated using the refcount on the AST. + +Sat Dec 21 18:27:42 2002 Steve Huston + + * ace/ace_dll.vcp: + * ace/ace_os_dll.vcp: + * ace/ace.vcw: eMbedded Visual C++ workspace/projects deleted. These + need to be generated from ace.mpc when needed. The make_release + script now generates them for each source kit. When needed on a + CVS workspace build, use mwc/mpc. The autobuild system has commands + generate_workspace and generate_makefile that accomplish this. + See autobuild configs in the riverace directory for examples. + + * tests/tests_WinCE.vcw: + * tests/ARGV_Test_WinCE.vcp: + * tests/Atomic_Op_Test_WinCE.vcp: + * tests/Auto_IncDec_Test_WinCE.vcp: + * tests/Barrier_Test_WinCE.vcp: + * tests/Basic_Types_Test_WinCE.vcp: + * tests/Bound_Ptr_Test_WinCE.vcp: + * tests/Buffer_Stream_Test_WinCE.vcp: + * tests/Cached_Accept_Conn_Test_WinCE.vcp: + * tests/Cached_Conn_Test_WinCE.vcp: + * tests/Cache_Map_Manager_Test_WinCE.vcp: + * tests/Capabilities_Test_WinCE.vcp: + * tests/CDR_Array_Test_WinCE.vcp: + * tests/CDR_File_Test_WinCE.vcp: + * tests/CDR_Test_WinCE.vcp: + * tests/Collection_Test_WinCE.vcp: + * tests/Conn_Test_WinCE.vcp: + * tests/DLList_Test_WinCE.vcp: + * tests/DLL_Test_DLL_WinCE.vcp: + * tests/DLL_Test_WinCE.vcp: + * tests/Dynamic_Priority_Test_WinCE.vcp: + * tests/Enum_Interfaces_Test_WinCE.vcp: + * tests/Future_Set_Test_WinCE.vcp: + * tests/Future_Test_WinCE.vcp: + * tests/Handle_Set_Test_WinCE.vcp: + * tests/Hash_Map_Bucket_Iterator_Test_WinCE.vcp: + * tests/Hash_Map_Manager_Test_WinCE.vcp: + * tests/High_Res_Timer_Test_WinCE.vcp: + * tests/Lazy_Map_Manager_Test_WinCE.vcp: + * tests/Logging_Strategy_Test_WinCE.vcp: + * tests/Log_Msg_Test_WinCE.vcp: + * tests/Malloc_Test_WinCE.vcp: + * tests/Map_Manager_Test_WinCE.vcp: + * tests/Map_Test_WinCE.vcp: + * tests/Max_Default_Port_Test_WinCE.vcp: + * tests/Mem_Map_Test_WinCE.vcp: + * tests/MEM_Stream_Test_WinCE.vcp: + * tests/Message_Block_Test_WinCE.vcp: + * tests/Message_Queue_Notifications_Test_WinCE.vcp: + * tests/Message_Queue_Test_Ex_WinCE.vcp: + * tests/Message_Queue_Test_WinCE.vcp: + * tests/MM_Shared_Memory_Test_WinCE.vcp: + * tests/MT_Reactor_Timer_Test_WinCE.vcp: + * tests/MT_Reactor_Upcall_Test_WinCE.vcp: + * tests/MT_SOCK_Test_WinCE.vcp: + * tests/Naming_Test_WinCE.vcp: + * tests/New_Fail_Test_WinCE.vcp: + * tests/Notify_Performance_Test_WinCE.vcp: + * tests/Object_Manager_Test_WinCE.vcp: + * tests/OrdMultiSet_Test_WinCE.vcp: + * tests/OS_Test_WinCE.vcp: + * tests/Priority_Buffer_Test_WinCE.vcp: + * tests/Priority_Reactor_Test_WinCE.vcp: + * tests/Priority_Task_Test_WinCE.vcp: + * tests/Process_Manager_Test_WinCE.vcp: + * tests/RB_Tree_Test_WinCE.vcp: + * tests/Reactors_Test_WinCE.vcp: + * tests/Reactor_Exceptions_Test_WinCE.vcp: + * tests/Reactor_Notify_Test_WinCE.vcp: + * tests/Reactor_Performance_Test_WinCE.vcp: + * tests/Reactor_Timer_Test_WinCE.vcp: + * tests/Reader_Writer_Test_WinCE.vcp: + * tests/Recursive_Mutex_Test_WinCE.vcp: + * tests/Refcounted_Auto_Ptr_Test_WinCE.vcp: + * tests/Reverse_Lock_Test_WinCE.vcp: + * tests/Semaphore_Test_WinCE.vcp: + * tests/Service_Config_DLL_WinCE.vcp: + * tests/Service_Config_Test_WinCE.vcp: + * tests/Sigset_Ops_Test_WinCE.vcp: + * tests/Simple_Message_Block_Test_WinCE.vcp: + * tests/SOCK_Connector_Test_WinCE.vcp: + * tests/SOCK_Send_Recv_Test_WinCE.vcp: + * tests/SOCK_Test_WinCE.vcp: + * tests/SPIPE_Test_WinCE.vcp: + * tests/SString_Test_WinCE.vcp: + * tests/Svc_Handler_Test_WinCE.vcp: + * tests/Task_Test_WinCE.vcp: + * tests/Thread_Manager_Test_WinCE.vcp: + * tests/Thread_Mutex_Test_WinCE.vcp: + * tests/Thread_Pool_Reactor_Resume_Test_WinCE.vcp: + * tests/Thread_Pool_Reactor_Test_WinCE.vcp: + * tests/Thread_Pool_Test_WinCE.vcp: + * tests/Timeprobe_Test_WinCE.vcp: + * tests/Timer_Queue_Test_WinCE.vcp: + * tests/Time_Service_Test_WinCE.vcp: + * tests/Time_Value_Test_WinCE.vcp: + * tests/Tokens_Test_WinCE.vcp: + * tests/TSS_Test_WinCE.vcp: + * tests/Upgradable_RW_Test_WinCE.vcp: eMbedded Visual C++ + workspace/projects deleted. These need to be generated from + tests.mpc when needed. The make_release script now generates + them for each source kit. When needed on a CVS workspace build, + use mwc/mpc. The autobuild system has commands + generate_workspace and generate_makefile that accomplish this. + See autobuild configs in the riverace directory for examples. + + * tests/tests.mpc: Added New_Fail_Test. + + * ace/config-WinCE.h: Add #define ACE_LACKS_ACE_IOSTREAM. If it has + ACE_LACKS_IOSTREAM_TOTALLY, it can't possibly do ACE_IOStream<>. + + * ace/ATM_Acceptor.{h cpp}: + * ace/ATM_Addr.{h cpp}: + * ace/ATM_Params.h: + * ace/ATM_QoS.h: + * ace/Dev_Poll_Reactor.cpp: + * ace/FlReactor.cpp: + * ace/POSIX_Proactor.cpp: + * ace/QtReactor.h: + * ace/SUN_Proactor.h: + * ace/TkReactor.h: Add /**/ between #include and filename to silence + MS warnings about missing files during dependency updates. + + * ace/OS.i: Fixed typo for ACE_HAS_WINCE. + + * ace/OS.{h cpp}: Enabled ACE_OS::mktime() for ACE_HAS_WINCE. To do + this, define struct tm similarly to the way it is in the standard + C library. When called, converts the struct tm to a SYSTEMTIME, + then to a FILETIME, then inserts that into an ACE_Time_Value and + pulls out the sec() value. + In OS.h, add the ACE_HAS_WINCE section for the ace_timezone() + function. + + * ace/Filecache.cpp (ACE_Filecache_Object::update): For ACE_HAS_WINCE, + return status to indicate every file has changed since cached. + There's probably a way to do this correctly on WinCE, but there's + no time to figure it out right now. + + * ace/Logging_Strategy.cpp: In calls to ACE_OS::fopen(), added + ACE_LIB_TEXT around naked char strings to build clean with Unicode. + + * ace/NT_Service.{h cpp}: Add ACE_HAS_WINCE to the platforms that + don't attempt to build this class. + + * ace/SPIPE_Connector.cpp (connect): Pretty much disabled this for CE. + + * bin/MakeProjectCreator/templates/em3vcp.mpd: When generating + CPU-based /D options, just do /D, not /D=1. If =1 is need + for something, add it to the .mpt file. + + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: Remove /GX, /Gm, + /GR, /Gy, and /Md[d] options - embedded VC++ doesn't do these or the + previous near-working .vcp files didn't use them and no value is + seen in enabling something not previously used. + Insured that the options are consistent, for example, all Release + builds use /Ob2 (high level of inlining). + * bin/MakeProjectCreator/templates/em3vcplib.mpt: In addition to the + above removals, remove /G5 (optimize for Pentium) from Debug build. + +Sat Dec 21 12:38:41 2002 Steve Huston + + * ace/OS.cpp (snprintf): Win32 doesn't 0-terminate the string if + the maxlen is exceed, so terminate the string in that case. + +Sat Dec 21 14:36:43 UTC 2002 Johnny Willemsen + + * include/makeinclude/platform_cygwin32.GNU: + Enabled threads and removed the setting that only static libs are + build. Also set SONAME and SOVERSION to nothing because the + Cygwin linker can't handle a dll name where the version is added + after .dll. + +Fri Dec 20 20:02:41 2002 Steve Huston + + * bin/make_release: When updating version files, also update + bin/MakeProjectCreator/config/aceversion.mpb and taoversion.mpb. + Added a new subroutine, generate_makefiles() that's called just + before create_kit. It generates the workspace and project files + for ACE_wrappers/ace and ACE_wrappers/tests. If any of these are + desired for TAO, someone knowledgeable on TAO should add to the + place in generate_makefiles() for the TAO stuff. + +Fri Dec 20 16:12:33 2002 Johnny Willemsen + + * ace/ACE.h: + The math.h delived with the Cygwin32 compiler already defines + log2 as macro so added a define acelog2 as log2 to handle this + already defined macro. + +Thu Dec 19 18:47:29 2002 Steve Huston + + * tests/tests.mpc: Added Obstack_Test and Recursive_Condition_Test. + +Thu Dec 19 16:47:17 2002 Douglas C. Schmidt + + * ace/SOCK_Dgram.h: + ace/SOCK_CODgram.h: Added metatype information for + ACE_SOCK_Dgram and ACE_SOCK_CODgram. Thanks to Sankaranarayanan + K V for reporting this. + +Thu Dec 19 10:02:56 2002 Rich Seibel + + * tests/MM_Shared_Memory_Test.cpp + + removed extraneous line that made the test appear to fail + +Thu Dec 19 06:47:07 2002 Chad Elliott + + * bin/MakeProjectCreator/config/aceversion.mpb: + * bin/MakeProjectCreator/config/taoversion.mpb: + + Updated the version to reflect the current release version. + + * bin/MakeProjectCreator/modules/Driver.pm: + + Moved the Cwd::getcwd() outside the loop to avoid calling it + multiple times. + + * bin/MakeProjectCreator/templates/vc7.mpd: + + Modified the ProgramDatabaseFile to use the intermediate_dir as + the output location. Thanks to Steve Huston + for reporting it. + +Wed Dec 18 20:52:41 2002 Steve Huston + + * ace/SOCK_Dgram_Mcast.cpp (open_i): Call shared_open using the + protocol family from the specified address, not PF_INET. Allows + working with IPv6. + + * tests/Multicast_Test.cpp: If join fails, log the error reason. + +Wed Dec 18 19:57:51 2002 Steve Huston + + * ace/config-sunos5.7.h: Added ACE_HAS_SNPRINTF. I have verified + that it's available from Solaris 7 on. If someone can determine + it's available earlier, please move the definition to one of the + earlier-version config-sunos5.*.h files. + +Wed Dec 18 18:59:41 2002 Steve Huston + + * ace/ace.mpc: + * tests/tests.mpc: Back out the below changes... jumped the gun. + +Wed Dec 18 18:55:31 2002 Steve Huston + + * ace/ace.mpc: Added new Hash_Map_Manager_RT[_T].cpp files. + + * tests/tests.mpc: Added new Hash_Map_Manager_RT_Test.cpp project. + +Wed Dec 18 15:03:03 2002 Nanbor Wang + + * ace/Get_Opt.cpp (long_option): For MSVC 7.x compiler, we need to + make sure that the argument passed to "isalnum" is legal, i.e., + between 0 and 0xff, otherwise, it will crash the process. Added + a special case for MSVC 7.x and above to prevent this. + +Wed Dec 18 13:36:49 2002 Steve Huston + + * ace/ace.mwc: Workspace definition file for ACE and it's immediate + subordinates, RMCast. + + * tests/tests.mwc: Workspace definition for tests and tests/RMCast. + + * bin/MakeProjectCreator/modules/Driver.pm (run): When processing + specified input files, chdir to the directory containing the file + so the files are read and written properly when referred to using + relative paths. + +Wed Dec 18 11:38:39 2002 Nanbor Wang + + * ace/config-win32-msvc-7.h: Added pragma prefix to disable + warning of using Microsoft extension. + + * ace/Timeprobe.h: Removed MSVC specific disabling and re-enabling + of warning of using Microsoft entension. We already do this + through all the MSVC config files and there's no point of doing + this again here. + +Mon Dec 16 16:34:23 2002 Nanbor Wang + + * ace/OS.i: Applied the following patch from Eugene Alterman + . + + It appears that Win32 mmap() emulation implements MAP_FIXED + semantic under the wrong assumption about MapViewOfFileEx() + behavior. In fact if a non-null base address is supplied to + MapViewOfFileEx() it behaves like mmap() with MAP_FIXED set - it + maps at that address or fails if it unable to do it. If a null + base address is supplied it behaves like mmap() with MAP_FIXED + not set. + + This means that if MAP_FIXED is not set the emulation should set + the base address argument to 0, and it should fail if MAP_FIXED + is set and is 0. + + Besides, it makes sense for WinCE emulation to fail whenever + MAP_FIXED is set since WinCE does not support MAP_FIXED + semantic. + +Wed Dec 18 08:29:04 2002 Rich Seibel + + * ace/Synch.cpp: Added code to generate a unique name if a + platform lacks unnamed semaphores (MACOSX 10.2). + + * ace/Sock_Connect.cpp: Added a conditional include for + ifaddrs.h (MACOSX 10.2). + + * tests/Priority_Task_Test.cpp: Changed test to notify + if platform does not implement getprio instead of fail. + (MACOSX 10.2) + + * tests/MM_Shared_Memory_Test.cpp: Changed compile time test to + pick up the right implementation on platform that have + POSIX semaphores but not SYSV semaphores (MACOSX 10.2). + + * ace/Lib_Find.cpp + ace/config-macosx.h: + + Gave the builder a choice of where to get the dlcompat package. + + * ace/OS.i + ace/config-macosx.h: + + Added a switch to eliminate an error message since the dlcompat + provided APPLE dynamic linkage does not support unloading thus + complains on the use of dlclose. + +Wed Dec 18 08:29:04 2002 Rich Seibel + + * ace/Timer_Wheel_T.cpp: + + Changed types from int to long to match the return + for timer ids. + +Wed Dec 18 05:42:52 2002 Douglas C. Schmidt + + * ace/High_Res_Timer.cpp (global_scale_factor): The INTEL compiler + can also set the global scale factor. Thanks to Chris Kohlhoff + for reporting this. + +Tue Dec 17 11:22:31 2002 Phil Mesnier + + * ace/Codeset_IBM1047.h: + * ace/Codeset_IBM1047.cpp: + + Added implementations of ncs and tcs methods to return the proper + values as defined by the OSF's code and character set registry. + + * ace/CDR_Stream.cpp: + * ace/CDR_Stream.h: + * ace/CDR_Stream.i: + + Stripped out the reference counting on translator objects to avoid + build problems. + +Tue Dec 17 11:30:31 2002 Balachandran Natarajan + + * ACE-INSTALL.html: Fixed fuzz errors. + +Tue Dec 17 08:20:22 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + + Fixed a problem with generated Makefiles where CFG is defaulted. + + * bin/MakeProjectCreator/templates/nmake.mpd: + + Modified the dependencies file name. + +Tue Dec 17 07:03:40 2002 Chad Elliott + + * ace/Array_Base.h: + * ace/Atomic_Op_T.cpp: + * ace/Message_Queue.cpp: + * ace/OS.h: + + Added #include's for various files for the Green Hills compiler + for VxWorks. + + * ace/OS.cpp: + + Added a call to ::inet_aton() with a non-const char* for VxWorks. + + * ace/Thread_Adapter.cpp: + + Changed the pointer type from ACE_THR_FUNC_INTERNAL to + ACE_THR_FUNC. + + * ace/config-vxworks5.x.h: + + Added a #define for ACE_LACKS_CLEARERR for the Green Hills + compiler. + +Mon Dec 16 12:28:05 2002 Douglas C. Schmidt + + * ACE-INSTALL.html: Fixed some broken links. Thanks to + Jonathan Wackley for reporting this. + +Sat Dec 14 13:06:09 2002 Douglas C. Schmidt + + * docs/ACE-categories.html: Removed all mention of the + ACE_Multiplexor class. Thanks to Marc Tardif + for reporting this. + +Tue Dec 17 07:37:40 2002 Balachandran Natarajan + + * tests/README: Fixed typos. + +Mon Dec 16 23:31:25 2002 Balachandran Natarajan + + * THANKS: Added Guan Joe to the hall of fame. + +Mon Dec 16 18:11:03 2002 Balachandran Natarajan + + * ace/CDR_Stream.h: Moved the destructor of + ACE_Char_Codeset_Translator to be public. + +Mon Dec 16 13:14:34 2002 Phil Mesnier + + * ace/CDR_Stream.cpp: + * ace/CDR_Stream.h: + * ace/CDR_Stream.i: + Preparing for codeset negotiation. The ACE input/output CDR + streams' support for wide character IO is enhanced by adding a + flag to allow or disallow wchar i/o regardless of whether a + translator is present. There are times when wchar is not + allowed, such as GIOP 1.0, or when a native codeset for wchar + was not specified. In CORBA, a native wchar codeset must be + specified, it may not be defaulted. Within the ACE CDR streams, + wchar i/o is allowed by default, to ensure backwards + compatibility. + + I fixed a few of the reading and writing methods to ensure that + the good_bit_ flag is cleared if an error occurs. This was not + happening in all cases, leading to errors elsewhere. + + I have extended the definition of the + ACE_[W]Char_Codeset_Translator classes to make them reference + counted objects. There are some codesets that support shifting + and may be stateful. By using reference counting, the CDR + streams don't have to worry about ownership of stateful + translators. + + Finally, the translators now have pure virtual methods that + return the native and translated codeset ID values. These values + refer to entries in the DCE Code and Character Set Registry, + which is the reference for CORBA codeset ids. Anyone + implementing a char or wchar codeset will have to supply a + numeric value for the native codeset (ncs) and the translated + codeset (tcs). NCS refers to the codeset of the text on the + application side of the stream, and TCS refers to the codset of + the text on the "wire" side of the stream. + + These changes are not everything that is required to support + codeset negotiation, but it is all the changes required to the + CDR streams. + +Sat Dec 14 08:56:23 2002 Douglas C. Schmidt + + * ace/Timer_Queue_T.cpp (timeout): Commented out the change below + until we figure out how to break the dependencies on the + Reactor. Thanks to Bala for reporting this. + +Fri Dec 13 16:05:05 2002 Douglas C. Schmidt + + * ace/Timer_Queue_T.cpp (timeout): Optimize Steve's patch below + for the case where the upcall is coming from a reactor. Thanks + to Irfan for pointing this out. + +Fri Dec 13 21:12:29 2002 Steve Huston + + * ace/test_config.h: Add __hpux to the conditions needed to instantiate + ACE_Singleton::singleton_. Also see + Sat Nov 23 18:12:37 2002 Steve Huston + +Fri Dec 13 18:25:42 2002 Steve Huston + + * ace/config-aix-4.x.h: Set ACE_HAS_THREADS to 1 or 0 based on the + compiler's predefined macros. This lets users build easier without + having to worry about what ACE expects - they just have to invoke + the compiler correctly. Add #include "ace/config-posix.h" to pick + the detectable POSIX-ish settings. + + * ace/config-posix.h: If ACE_HAS_THREADS is defined as 0 on entry, + undef it and don't pick up the POSIX threads settings. Allows + single-threaded builds using this very handy config. + +Fri Dec 13 18:10:31 2002 Steve Huston + + * ace/OS.cpp (wchar snprintf, sprintf): Change the selection for + ability to use vswprintf from ACE_HAS_XPG4_MULTIBYTE_CHAR to + _XOPEN_SOURCE >= 500. vswprintf came in at XPG5 (and C99). + + * ace/config-hpux-11.00.h: Enable ACE_HAS_SNPRINTF if + _INCLUDE_HPUX_SOURCE is set after including stdsyms.h. + + * ace/config-posix.h: Set ACE_HAS_SNPRINTF if _XOPEN_SOURCE >= 500. + +Thu Dec 12 20:11:39 2002 Steve Huston + + * ace/Timer_Heap_T.cpp (cancel): Release the queue lock before + upcalling to handle_close. Fixed Bugzilla #1387. + +Thu Dec 12 12:50:34 2002 Douglas C. Schmidt + + * ace/OS.cpp: Changed a cast of unique_name to &unique_name to + fix a bug on pSoS. Thanks to Dieter Knueppel + for reporting this. + +Thu Dec 12 12:55:41 2002 Steve Huston + + * ace/OS.h: Add missing snprintf() method declaration for ACE_HAS_WCHAR + +Thu Dec 12 08:49:31 2002 Balachandran Natarajan + + * ace/Log_Msg.cpp: Fixed a warning in LynxOS builds. + +Thu Dec 12 06:18:02 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/Parser.pm: + + Fixed a bug with setting and retrieving the current working + directory. Thanks to Steve Huston for + reporting this. + +Thu Dec 12 00:01:37 2002 Balachandran Natarajan + + * netsvcs/clients/Naming/Client/Makefile: Fixed a small problem in + static builds. Hopefully they should be fine in the next round + of builds. + +Wed Dec 11 23:11:09 2002 Balachandran Natarajan + + * bin/clean_sems.sh: A shell script to remove + semaphores. Integrating the script that Ossama used to the + daily build system. + +Wed Dec 11 21:05:49 2002 Steve Huston + + * ace/Message_Block_T.cpp: + * examples/ASX/Message_Queue/priority_buffer.cpp: + * examples/Misc/test_read_buffer.cpp: + * examples/Threads/TSS_Obj.h: Added missing + #include "ace/Malloc_Base.h" to build clean on AIX, Visual Age C++ 6. + + * examples/C++NPv1/Logging_Client.cpp: + * examples/C++NPv2/Reactor_Logging_Server.cpp: + * examples/C++NPv2/Service_Reporter.cpp: + * examples/C++NPv2/SLD.cpp: + * examples/C++NPv2/SLDex.cpp: Add missing #include + "ace/Log_Msg.h" to pick up ACE_ERROR_RETURN for AIX Visual Age C++ 6. + + * examples/C++NPv2/Makefile.SLD: Remove the tempinc-bashing + redefinition of COMPILE.cc... that only works if there's a single + source file for each program. + +Wed Dec 11 19:33:19 2002 Steve Huston + + * ace/config-hpux-10.x-hpc++.h: + * ace/config-hpux-10.x.h: Picked up these changes from the 11.x config: + + Sat Nov 23 17:54:18 2002 Steve Huston + + * ace/config-hpux-11.00.h: Control the ACE_HAS_STANDARD_CPP_LIBRARY + and ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB settings by compiler- + defined macro _HP_NAMESPACE_STD, not passing them through from + platform_hpux_aCC.GNU. Similarly with ACE_HAS_EXCEPTIONS (define + it unless __HPACC_NOEH is set). This breaks a coupling from the + platform_hpux_aCC.GNU file, and will make autoconf easier as well + as making it easier for users to write makefiles without following + the ties through and trying to duplicate them. + Also, include config-posix.h to let it pick up system-supplied + settings. + + * ace/Time_Value.h: For HP-UX 10, need to typedef timespec_t because + the OS doesn't define it. + +Wed Dec 11 17:05:28 2002 Balachandran Natarajan + + * examples/Reactor/WFMO_Reactor/Talker.cpp: Fixed a warning in + Borland builds. + +Wed Dec 11 17:00:21 2002 Balachandran Natarajan + + * ace/WIN32_Asynch_IO.cpp: Fixed a warning in Borland builds. + +Tue Dec 10 19:42:29 2002 Steve Huston + + * ace/OS.{h cpp}: Added new method, ACE_OS::snprintf() that wraps + native snprintf() if available (ACE_HAS_SNPRINTF for char, + ACE_HAS_XPG4_MULTIBYTE or ACE_WIN32 for wide char); else returns + -1, ENOTSUP. + + * ace/config-linux-common.h: Add detection for ACE_HAS_SNPRINTF. + + * ace/config-win32-common.h: Removed #define ACE_HAS_VSWPRINTF. + vswprintf() on Windows is not the standard way, and this setting + was only used for Win32. See comments in OS.cpp, sprintf(wchar_t...) + for more info. Added ACE_HAS_SNPRINTF in its place. + + * ace/Log_Msg.cpp (log): Don't overrun the msg_ buffer while + building the logged message. Silently stops logging characters + when the limit is reached. + Also, on %a aborts, don't just do a "while (1);" on WinCE. + Forcing the user to cycle power is not a good idea. + + * tests/Log_Msg_Test.cpp: Add a test case for logging a string + that can't possibly fit in the logging buffers. + +Tue Dec 10 18:10:41 2002 Steve Huston + + * tests/Proactor_Test.cpp: Changed the default proactor type to + DEFAULT. If a specific proactor implementation type is desired, that + must be specified now. This matches ACE's behavior that users will + get unless they specifically change it. Also, changed loglevel to + be 0 (only highlights and errors), 1 (more progress information), + and 2 (all operation parameters and result information). The default + is 0, allowing for increased load on this test without creating + gigantic log files. All platforms now use the same test parameters + (clients, byte counts, threads, etc.) except that if the SUN + proactor is selected, the test will run with one thread regardless + of user selection. The ACE_SUN_Proactor's completion detector + (aiowait) is not multithread safe. + +Tue Dec 10 17:19:06 2002 Balachandran Natarajan + + * tests/OS_Test.cpp (ACE_TMAIN): Integrated the latest tests from + Alain for string_strsncpy_test (). The test is more robust and + tests things better. It also has comments on what it is testing + :-). + +Tue Dec 10 16:53:29 2002 Steve Huston + + * tests/OS_Test.cpp: Add missing '=' signs to fix compile error on + wide-char builds. + +Tue Dec 10 16:05:37 2002 Balachandran Natarajan + + * Makefile: Added a target 'reverseclean' + * bin/reverse_clean: Added a small perl script that does a + realclean in the reverse order on the directories passed to + it. + + The motivation for this is that some of our builds dont clean up + properly due to the dependencies. The reason for this is that + ace/ACE_COMPONENTS.list gets wiped out first, preventing things + that examine the components list (like netsvcs) from getting + cleaned. Hence we need to do a 'realclean' in reverse order of + the builds. + +Tue Dec 10 13:23:37 2002 Nanbor Wang + + * bin/PerlACE/Process.pm: + * bin/PerlACE/Process_Win32.pm: + * bin/PerlACE/Process_Unix.pm: Changed WAIT_DELAY_FACTORY from a + data member in Process_Win32 to a global data in + PerlACE::Process. You can now define an environment variable + "ACE_RUNTEST_DELAY" on both Win32 and UNIX to multiply the wait + time with the number. The same trick that I added last time + into Process_Win32 to invoke tests with purify should also work + with valgrind. + + * bin/PerlACE/Run_Test.pm (waitforfile): Changed to multiply the + wait time with the PerlACE::Process::WAIT_DELAY_FACTOR . + +Tue Dec 10 10:20:35 2002 Balachandran Natarajan + + * ace/Synch.cpp: Commented out the dump () call on ACE_cond_t, + which caused build errors from the checkin "Mon Dec 9 18:54:09 + 2002 Douglas C. Schmidt ". There is + no dump method on ACE_cond_t. + + Fixed the return type of the implementation to match the + declaration. + +Mon Dec 9 18:54:09 2002 Douglas C. Schmidt + + * ace/Synch.{h,cpp}: Added a dump() method to the template + specialization of ACE_Condition. + Thanks to Mathias Waack for reporting + this. + + * ace/Get_Opt.{h,i} Added a new argc() accessor. Thanks to + Volker Boerchers for contributing this. + +Mon Dec 9 17:58:31 2002 Steve Huston + + * tests/Multicast_Test.cpp: Added missing template instantiation for + Sun Workshop 5 compiler. + +Mon Dec 9 17:27:49 2002 Steve Huston + + * tests/Recursive_Condition_Test.cpp: In test_4, wait for the + waiter thread to wake up and exit itself before checking the + mutex recursion count. Else, the waiter may have the mutex while + the main thread is checking the count and detect a false fail. + +Mon Dec 9 17:02:41 2002 Steve Huston + + * include/makeinclude/platform_aix_ibm.GNU: Change from using + -qtemplateregistry to use -qtempinc for Visual Age C++ 6 template + handling. -qtemplateregistry is a nice idea, but generates too + many errors from missing templates. Using -qtempinc still generates + gobs of multiple-instantiation warnings, but the build is correct + and the tests run. + + * bin/aix_shr: Add the error number patterns for VA 6's multiple + template instantiation warnings to the filter-out pattern. + +Mon Dec 9 15:42:39 UTC 2002 Don Hinton + + * examples/C++NPv1/Reactive_Logging_Server_Ex.cpp: Removed + duplicate template specialization for ACE_Hash on + Windows that's no longer needed. + +Mon Dec 9 07:41:39 2002 Balachandran Natarajan + + * tests/OS_Test.cpp: + * ace/OS_String.cpp (strsncpy): Fixed a cut and paste error. + +Mon Dec 9 00:09:55 2002 Balachandran Natarajan + + * ace/INET_Addr.cpp (get_host_addr): Changed the usage of strncpy + () to strsncpy (). Thanks to Alain Decamps for donating this patch. + +Sun Dec 8 23:56:09 2002 Balachandran Natarajan + + * ace/OS_String.cpp: Applied patches from Alain Decamps to make + strsncpy () more robust. If dst == src, the return string will + have utmost 'maxlen'. + + * tests/OS_Test.cpp: Added a test case for strsncpy (). Thanks to + Alain Decamps for donating the patch. + +Sun Dec 08 22:44:07 2002 Balachandran Natarajan + + * ace/Functor.h (void *): + * ace/Functor.i: Added a template specialization for ACE_Hash . + +Sun Dec 08 09:45:34 UTC 2002 Johnny Willemsen + + * ace/Map_Manager.h: + * ace/SString.h: + * ace/Unbounded_Queue.h: + Improved doxygen documentation + +Sun Dec 08 09:37:12 UTC 2002 Johnny Willemsen + + * etc/*.doxygen: + Set JAVADOC_AUTOBRIEF to NO in all doxygen config files. When + only javadoc style documentation is used, only detailed documentation + is generated. + +Sun Dec 08 01:17:26 2002 Nanbor Wang + + * ace/Event_Handler.cpp: Fixed a typo. + +Thu Dec 5 20:30:56 2002 Douglas C. Schmidt + + * ace/Event_Handler.cpp: Updated the implementation of + ACE_Event_Handler::read_adapter() so that the code is consistent + with the stated semantics. Thanks to Ron Muck + for the fix. + + * ace/OS_Dirent.inl (readdir_r): Enhanced the + ACE_OS_Directn::readdir_r() wrapper facade so that it returns 1 + (i.e., "done") when an error occurs. Thanks to Abhay Kulkarni + for reporting this. + +Sat Dec 7 19:54:12 2002 Steve Huston + + * ace/OS.h: For WinCE, define S_IFDIR and S_IFREG file mode masks. + Also, added define for ENXIO if not supplied (like on WinCE). + +Sat Dec 07 14:29:47 2002 Nanbor Wang + + * ace/ACE.cpp (format_hexdump): This change fixed the problem that + a character is missing when the last line has less than 16 bytes + or less to display. Thanks to Terry Lao for + submitting the patch, and Johnny Willemsen + for reviewing the change. + +Fri Dec 6 23:58:47 2002 Balachandran Natarajan + + * ace/CDR_Stream.cpp: + * ace/CDR_Stream.i: Set good_bit_ to zero whenever the sanity + check for remaining length in the stream fails. Thanks to Jerry + D. De Master for pointing out the + problem. + + * ace/CDR_Array_Test.cpp: Extended the test to include test for + checking the value of good_bit () by forcing an erroneous read. + +Fri Dec 6 16:26:49 2002 Krishnakumar B + + * ace/FILE_Addr.cpp (set): Windows appends ASCII 'a' - 'z' and + 'A' - 'Z' to generate unique filenames and gives up if the + character in the template is a non-alphabetic character. In such + cases, it returns a NULL. Make sure that we supply a template + with a alphabetic character before XXXXXX as well as check for a + NULL return value. + +Thu Dec 5 22:19:41 2002 Steve Huston + + * ace/OS.{h i}: Added ACE_OS::sigwaitinfo() wrapper. + + * ace/POSIX_Proactor.{h cpp} (ACE_POSIX_SIG_Proactor): Clean up some + spelling and formatting in documentation comments. Clean up the + signal calls, and substitue ACE_OS calls for naked API calls. + Unless we have specific evidence to the contrary, trust what the + OS says with signal information. Otherwise, if we run through + all the aiocbs on every signal, we could get into a situation + where deferred I/O operations are never restarted. + + * ace/POSIX_CB_Proactor.h: Changed the comments to say this is a + callback-based proactor, not an SGI IRIX one. The callback + paradigm is part of newer POSIXes and available on more than + SGI... HP-UX, for instance. + +Thu Dec 5 20:33:18 2002 Steve Huston + + * ace/config-aix-4.x.h: Removed ACE_NEEDS_DEV_IO_CONVERSION. This + seems like a ludicrous workaround to some old, buggy compiler. + +Thu Dec 5 14:35:50 2002 Balachandran Natarajan + + * netsvcs/clients/Naming/Client/Makefile: Do not build in static + builds. + +Thu Dec 5 09:45:25 2002 Douglas C. Schmidt + + * examples/Synch/proc_sema.cpp: Fixed some typos. Thanks to + Andy King for reporting this. + +Thu Dec 5 07:39:45 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Removed Bug_1020_Regression from the + nightly regression test on Win32. + +Thu Dec 5 09:58:45 UTC 2002 Don Hinton + + * ace/config-openbsd-pthread.h: Added + ACE_LACKS_PERFECT_MULTICAST_FILTERING 1. This should + fix the errors in the test/Multicast_Test in the + nightly autobuilds. + +Wed Dec 4 21:53:28 2002 Steve Huston + + * ace/OS.h: Include for __hpux platform. + * ace/OS.cpp (num_processors_online): Try the syscall for this + on HP-UX if __hpux is defined, not hpux (only set for g++). + +Wed Dec 4 21:18:31 2002 Steve Huston + + * ace/Proactor_Timer_Test.cpp: Fix incorrect use of pointer-integer + casting. Log pointers with %@, not %x. + +Wed Dec 4 21:11:41 2002 Steve Huston + + * tests/Proactor_Test.cpp: Set all the default options and values + before parsing command line options to make it easy to predictably + vary things by hand. Also, rather than run for a determined number + of seconds, run a specific number of bytes around the loop. This + limits the size of the log, especially nice for fast processors. + Thanks to Johnny Willemsen for this idea. + +Wed Dec 4 18:37:10 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added a Server_Connection_Purging to the + nightly regression tests. + +Wed Dec 4 17:47:49 2002 Steve Huston + + * tests/Proactor_Test.cpp: On Sender read complete, start another + read if either in full duplex mode OR writing has been stopped. + We want to catch the Receiver closing the socket (read 0 bytes). + +Wed Dec 4 11:41:15 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added a Bug_1020_Regression to the + nightly regression test on Win32. + +Tue Dec 3 20:47:39 2002 Steve Huston + + * ace/SSL/SSL_Context.cpp: Add explicit instantiation of + ACE_Singleton::singleton_. + * netsvcs/lib/Name_Handler.cpp: Add explicit instantiation of + ACE_Singleton::singleton_. + * netsvcs/lib/Server_Logging_Handler.cpp: Add explicit instantiation of + ACE_Server_Logging_Handler_T::request_count_; + * tests/Framework_Component_DLL.cpp: Add explicit instantiation of + ACE_DLL_Singleton_T, + ACE_SYNCH_MUTEX>::singleton_. + * tests/MEM_Stream_Test.cpp: Add explicit instantiation of + ACE_Singleton, + ACE_SYNCH_RECURSIVE_MUTEX>::singleton_. + * tests/Process_Strategy_Test.cpp: Add explicit instantiation of + ACE_Singleton::singleton_. + * tests/Timeprobe_Test.cpp: Add explicit instantiation of + ACE_Singleton::singleton_. + + These are similar to those done in: + Sat Nov 23 18:12:37 2002 Steve Huston + + * netsvcs/clients/Naming/Client/Makefile: + * netsvcs/clients/Naming/Dump_Restore/Makefile: Add ACELIB to LIBS + to include -lACE for building the shared libs. rules.lib.GNU + doesn't add VLDLIBS when linking a shared lib, but rules.bin.GNU + adds it for binaries. This should probably be changed, but it's a + quagmire to wade into at this point, and autoconf is coming. + This fix is needed now to get this stuff building with g++ on AIX. + +Mon Dec 2 20:09:29 2002 Steve Huston + + * examples/C++NPv1/Reactive_Logging_Server_Ex.cpp: + * ACEXML/common/Mem_Map_Stream.cpp: + * ACEXML/common/URL_Addr.cpp: + * ACEXML/common/XML_Codecs.cpp: Added missing explicit template + instantiations to build clean on Sun Workshop 5. + +Mon Dec 2 19:41:27 2002 Steve Huston + + * tests/Proactor_Test.cpp: Rather than close connections outright + when beginning to shut down test, just shut down the write side. + This is an effort to make the receiving closes cleaner. + +Mon Dec 2 17:58:06 2002 Balachandran Natarajan + + * ace/ACE.cpp: Fixed a compile error with g++. + +Sat Nov 30 09:18:51 2002 Douglas C. Schmidt + + * ace/ACE.{h,cpp}: Added a new crc32() method that works on + an iovec. Thanks to Tufan Oruk for contributing + this. + + * THANKS: Just added our 1,600 contributor to ACE+TAO! + +Mon Dec 02 18:59:33 UTC 2002 Johnny Willemsen + + * ace/DLL.h: + * ace/Dirent.h: + * ace/Future_Set.h: + * ace/UPIPE_Connector.h: + * ace/UPIPE_Acceptor.h: + * ace/UNIX_Addr.h: + * ace/Configuration_Import_Export.h: + Improved doxygen documentation. + +Mon Dec 02 18:47:32 UTC 2002 Johnny Willemsen + + * THANKS: Added Tim Smith + +Sun Dec 01 10:16:45 2002 Balachandran + + * ACE version 5.2.7 released. + +Sat Nov 30 22:46:00 2002 Balachandran Natarajan + + * THANKS: Added Christophe Vedel to the hall of fame. + +Fri Nov 29 12:23:14 2002 Nanbor Wang + + * ace/Thread_Manager.h (ACE_Thread_Manager): Changed all the + accessors to the Thread_Descriptor to be protected. + + * ace/Thread_Manager.i: Removed assertion test for null + Thread_Descriptor pointer. This can happen when calling + thread_desc_self() from a thread not spawned by the + Thread_Manager, e.g., the main thread. + + Added checks in all ACE_Thread_Manager::at_exit for null + thread_desc_self to avoid crash. + + Thanks to Mathias Waack for reporting + the bug. + +Thu Nov 28 06:36:04 2002 Douglas C. Schmidt + + * apps/soreduce/Makefile: Changed INSBIN from $ACE_ROOT/bin/soreduce/ + to $ACE_ROOT/bin/. Thanks to Jaroslaw Nozderko + for reporting this. + +Thu Nov 28 07:54:28 2002 Craig Rodrigues + + * docs/tutorials/022/Acceptor_Service.h: Add include of svc_export.h + to fix compilation errors. Thanks to Viktor Ransmayr + for reporting the problem. Not + sure whether this example would still compile fine. + +Thu Nov 28 09:04:12 UTC 2002 Johnny Willemsen + + * ace/FILE.h: + * ace/Default_Constants.h: + Improved usage of doxygen commands. + +Thu Nov 28 07:23:12 UTC 2002 Johnny Willemsen + + * ace/Typed_SV_Message_Queue.h: + * ace/Strategies_T.h: + * ace/Framework_Component.h: + Improved doxygen documentation. + + * ace/TLI_Connector.i: + Made method definition and implementation the same. + +Wed Nov 27 22:38:15 2002 Balachandran Natarajan + + * ace/Connector.h: + * ace/Connector.cpp: Fix for BUG 1361. Please see + http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1361 for + more details on the problem. + + The fix is based on the assumption that ACE_Connector need not + be resumed by the TP_Reactor when used for asynch connects. + The supporting reason for this assumption is that during + connection completion or connection closure, the handler + ie. the ACE_Connector in this case is removed from the + Reactor. Hence this fix, which essentially implements the + virtual function resume_handler () and prevents itself from + being resumed. Thaks to Irfan for reviewing the fix. + +Wed Nov 27 20:35:49 2002 Steve Huston + + * include/makeinclude/platform_aix_ibm.GNU: Add Visual Age C++ 6 to + the list of compiler versions it knows about. For VA 6, use the + new -qtemplateregistry build option to try to be more efficient + about template compilation. It's still lamer than most though, and + Visual Age C++ 6 needs the aixshr filter to weed out the Duplicate + Symbol warnings. + + * include/makeinclude/rules.local.GNU: Add templateregistry to the + files/directories removed on clean. It's used by Visual Age C++ 6. + +Wed Nov 27 19:42:51 2002 Steve Huston + + * tests/MT_Reactor_Upcall_Test.cpp: Send and receive each message + field specifically; don't rely on the type and size fields being + adjacent in memory. On 64-bit Solaris w/ Forte 7 and on 64-bit + Windows XP, they aren't. + +Wed Nov 27 15:47:41 2002 Steve Huston + + * ace/config-aix5.1.h: Add #define ACE_HAS_AIO_CALLS, but commented + out. AIX did things differently enough here to be a real problem. + It should be possible to get AIO working on AIX 5, but it will + take some real work. + + * ace/POSIX_Proactor.cpp: Add #include "ace/ACE.h" + + * ace/Sock_Connect.cpp: Visual Age C++ 6 still needs to hack to + get the templates built correctly :-( Changed the compile-time check + to an alleged Visual Age C++ 7 to see if they get it right then. + + * ACEXML/common/Env.i: Add missing #include "ace/Log_Msg.h" to pick + up ACE_ASSERT. + + * ACEXML/common/FileCharStream.cpp: + * ACEXML/common/StrCharStream.cpp: Add missing #include "ace/Log_Msg.h" + + * ACEXML/common/NamespaceSupport.h: + * ACEXML/parser/parser/Entity_Manager.h: Add missing #include + "ace/Synch.h" + +Wed Nov 27 07:23:30 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Two new tests cannot run in single + threaded builds. + +Wed Nov 27 09:30:33 UTC 2002 Johnny Willemsen + + * ace/DLL.h: + * ace/Singleton.h: + Improved doxygen documentation. + +Tue Nov 26 20:04:38 2002 Steve Huston + + * tests/Proactor_Test.cpp: Added checks for condition where a read or + write fails to initiate because the socket was closed. For Windows, + this is a ERROR_NETNAME_DELETED error on the ReadFile/WriteFile call + under ACE_WIN32_Asynch_Read/Write_Stream. The test now checks for + this and doesn't report an error, but this is a departure from + what one would expect from a socket. It might be better if the + underlying call was changed to WSARecv/WSASend for Winsock2-enabled + systems. + +Tue Nov 26 16:08:22 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added two new tests to our daily builds. + +Tue Nov 26 15:10:57 2002 Balachandran Natarajan + + * ACE-INSTALL.html: Updated the file to have the right GNU make + version. Our make's dont work well with 3.78 and lower. + +Mon Nov 25 23:49:38 2002 Craig Rodrigues + + * ace/config-macosx.h: Updates for pthread configuration, provided + by John Zorko and Rich Seibel + . + + * ace/OS.i: + * ace/Sock_Connect.cpp: Remove unnecessary __MACOSX__ macros. + See: Thu Oct 17 19:18:02 UTC 2002 Craig Rodrigues + + +Mon Nov 25 18:20:41 2002 Steve Huston + + * ace/config-hpux-11.00.h: Added #define ACE_SIZEOF_WCHAR _WCHAR_T + to get ACEXML to compile. ACEXML's usage of ACE_SIZEOF_WCHAR breaks + the previous allowance for ACE_SIZEOF_WCHAR to be sizeof (wchar_t) + because it uses ACE_SIZEOF_WCHAR in a math expression. + + * examples/C++NPv2/Reactor_Logging_Server_Adapter.cpp: Added + #include "ace/INET_Addr.h" to build clean on HP-UX. + +Mon Nov 25 20:32:02 UTC 2002 Don Hinton + + * ace/README: Added ACE_LACKS_PERFECT_MULTICAST_FILTERING. + +Mon Nov 25 18:58:33 2002 Johnny Willemsen + + * ace/Local_Name_Space_T.cpp: + * ace/Process.h: + * ace/Local_Name_Space_T.h: + * ace/ATM_Params.h: + * ace/Timer_Queue_Adapters.h: + Improved documentation for doxygen generation. + + * ace/Svc_Handler.cpp: + Made method definition and implementation arguments match. + +Sat Nov 23 20:01:36 2002 Balachandran Natarajan + + * apps/*/Makefile: Updated dependecies. Thanks to Erwin Rol for + pointing out the problem. + +Sat Nov 23 18:12:37 2002 Steve Huston + + * ace/SString.cpp: Add explicit instantiation of + ACE_String_Base::NULL_String_ and + ACE_String_Base::NULL_String. + * ace/Based_Pointer_Repository.cpp: Add explicit instantiation of + ACE_Singleton:: + singleton_. + * ace/Dynamic.cpp: Add explicit instantiation of + ACE_TSS_Singleton::singleton_. + * tests/test_config.h: Added explicit instantiation of + ACE_Singleton::singleton_. + + The above are only done when using automatic template instantiation + on AIX with g++. Without this, the compiler and linker don't get + things done right and static data members in templates don't get + instantiated correctly. Thanks to Max F. Bilyk + for reporting this problem. + + * ace/SSL/Makefile: Set LIBS = $(ACELIB). Else it won't link on + AIX, g++. + + * include/makeinclude/platform_aix4_g++.GNU: Removed. Use + platform_aix_g++.GNU instead. They were similar, though not equal, + and confusing each other. + + * include/makeinclude/platform_aix_g++.GNU: Fixed to work correctly + and is now the one to use for AIX 4 and 5 with g++. + +Sat Nov 23 18:03:41 2002 Steve Huston + + * ace/String_Base.i (compare): Fix a size_t/int mismatch. + +Sat Nov 23 17:54:18 2002 Steve Huston + + * ace/POSIX_CB_Proactor.{h cpp}: Changes to align with recent + ACE_POSIX_AIOCB_Proactor changes: changed handle_events (ulong) to + handle_events_i() and made nonvirtual. Removed get_result_status(), + cancel_aiocb(), and cancel_aio() since they simply forwarded to + ACE_POSIX_AIOCB_Proactor. Remove most of allocate_aio_slot(); call + up to ACE_POSIX_AIOCB_Proactor::allocate_aio_slot then tweak the + aiocb fields for the callback. + + * ace/config-hpux-11.00.h: Control the ACE_HAS_STANDARD_CPP_LIBRARY + and ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB settings by compiler- + defined macro _HP_NAMESPACE_STD, not passing them through from + platform_hpux_aCC.GNU. Similarly with ACE_HAS_EXCEPTIONS (define + it unless __HPACC_NOEH is set). This breaks a coupling from the + platform_hpux_aCC.GNU file, and will make autoconf easier as well + as making it easier for users to write makefiles without following + the ties through and trying to duplicate them. + Also, include config-posix.h to let it pick up system-supplied + settings. + + * ace/OS_Memory.h: In the HP aCC section, remove the checks for + aCC version > 32500 and _HP_NAMESPACE_STD... just use the + ACE_HAS_STANDARD_CPP_LIBRARY setting from config-hpux-11.00.h. + + * ace/Proactor.cpp (ctor): When no implementation is supplied, be + sure to make one up, even w/o presence of realtime signals. + + * include/makeinclude/platform_hpux_aCC.GNU: If stdcpplib is not + specified by user, set it to 1 always, unless the compiler is + a .2x version and not .27 (03.27 (01.27 on 10.20) is the first + version that can do -AA); makes it unnecessary to update this every + time HP releases a new compiler version. Also rearranged the + thread-related compiler option settings to be simpler and easier + to match with what the documentation says to set. Removed the + ACE_HAS_STANDARD_CPP_LIBRARY settings; they're defined in + ace/config-hpux-11.00.h when proper (see above). + Also, added +W930 to CCLFAGS when -AA to stop a spurious warning + about placement operator delete on aC++ 03.37, 03.39. + +Sat Nov 23 17:43:29 2002 Steve Huston + + * ace/ACE.cpp (send_n): Properly update byte count for each message + block in the chain to send. Thanks to Venkita Subramonian + for reporting this and sending a fix. + +Sat Nov 23 16:55:39 2002 Steve Huston + + * tests/MEM_Stream_Test.cpp: + * tests/Notify_Performance_Test.cpp: + * tests/Priority_Reactor_Test.cpp: + * tests/Process_Manager_Test.cpp: + * tests/Reactor_Performance_Test.cpp: Replaced calls to the + deprecated ACE_Reactor::run_event_loop() and end_event_loop() + with run_reactor_event_loop() and end_reactor_event_loop(). + + * tests/Proactor_Test.cpp: Add missing \n in an ACE_DEBUG message. + +Sat Nov 23 00:16:59 2002 Craig Rodrigues + + * ace/config-posix.h: Define ACE_HAS_PTHREADS_STD + if platform defines _POSIX_THREADS. + +Fri Nov 22 13:48:39 2002 Nanbor Wang + + * ace/Containers_T.cpp (init_head): Broke up the cascading pointer + assignments to avoid a problem when using position independent + pointer. Thanks to Eugene Alterman for + reporting this. + + * ace/Svc_Conf.l: + * ace/Svc_Conf_l.cpp: Changed to always remove the matching quote + character (' or ") instead of first search for double quote, + then single quote. Thanks to Johnny Willemsen + for sumitting the patch. + +Fri Nov 22 04:52:16 2002 Bala + + * ACE version 5.2.6 released. + +Tue Nov 19 22:36:38 2002 Ossama Othman + + * ace/Time_Value.h (sec, usec, msec): + + Documentation updates/clarifications. + + * ace/Time_Value.cpp (operator++, operator--): + + Fixed postfix increment and decrement operators. Previously + they had the same implementation as their prefix increment and + decrement operator counterparts. A copy of the ACE_Time_Value + is now done prior to in/decrementing it via the corresponding + prefix operator. That copy is returned. A copy is only + performed for the postfix case. + +Tue Nov 19 18:14:10 2002 Pradeep Gore + + * bin/auto_run_tests.lst: + Modified Notify configurations. + + * bin/auto_run_tests.pl: + Checkin on behalf of Irfan - Changed logic so that it checks for + the existence of the executable and not of the parameters passed + to the executable. + +Tue Nov 19 07:09:15 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Tests not runnable in minimum + configuration were being run. Hence prevented them from + running. + +Mon Nov 18 20:49:33 2002 Nanbor Wang + + * examples/IPC_SAP/FILE_SAP/client.cpp (ACE_TMAIN): Changed to use + predefined ACE_DEFAULT_FILE_PERMS instead of the non-portable 0666. + +Mon Nov 18 12:27:46 2002 Balachandran Natarajan + + * ace/Dev_Poll_Reactor.cpp (handler): + * ace/WFMO_Reactor.i (handler): + * ace/Select_Reactor_Base_T.cpp (handler_i): The methods that + returns a signal handler associated with a certain type of + signal, does restrictive sanity checks. One of the checks that + it performs is to see whether a pointer to an event_handler is 0 + just before assigning a new event handler pointer. This check + was not required at all and hence it is now removed. Thanks to + Edan Ayal for reporting this. + +Sat Nov 16 09:38:38 2002 Balachandran Natarajan + + * ace/*/Makefile: + * tests/Makefile: + * examples/*/Makefile: + * performance-tests/*/Makefile: + * ACEXML/*/Makefile: Updated dependencies. + +Fri Nov 15 20:33:02 UTC 2002 Don Hinton + + * ace/SOCK_Dgram_Mcast.h: + * ace/config-all.h: Added new macro for platforms that don't yet + implement the new IGMPv3, perfect multicast filtering, and + replaced the #ifdef linux in the ACE_SOCK_Dgram_Mcast::ctor + with the new macro, since this isn't just a linux thing. + + * ace/config-aix-4.x.h: + * ace/config-freebsd.h: + * ace/config-linux-common.h: + * ace/config-netbsd.h: + * ace/config-openbsd.h: + Defined ACE_LACKS_PERFECT_MULTICAST_FILTERING for these platforms. + + * ace/SOCK_Dgram_Mcast.cpp (open_i): Removed redundant call to + ACE_SOCK::set_option() to set SO_REUSEADDR, since it's set in + the call to ACE_SOCK::open(). This fixes [bug 1111]. + + * tests/Multicast_Test.cpp: Enhanced test by adding new options + control the wait time when running test as a CONSUMER only, + and contol the TTL so the test could be used over routers. + Also cleaned up the code a bit to make it more readable. Thanks + to Bill Fulton for motivating these enhancements. + +Fri Nov 15 14:16:10 2002 Nanbor Wang + + * ace/Thread_Exit.h: + * ace/Thread_Exit.cpp (cleanup): Changed the type of the argument + takes to the generic (void*) and avoid including + in Thread_Exit.h. This eliminated the circular header + dependencies when ACE_LEGACY_MODE is define. + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Removed some template files from the build + lists and make sure all template files are not being built. + +Fri Nov 15 13:22:41 2002 Steve Huston + + * tests/Proactor_Test.cpp: On Win32, check for canceled I/O using + ERROR_OPERATION_ABORTED instead of ECANCELED. + +Fri Nov 15 16:51:11 UTC 2002 Craig Rodrigues + + * ace/POSIX_CB_Proactor.h: + * ace/POSIX_CB_Proactor.cpp: + Do not build on Lynx. + +Fri Nov 15 14:14:39 UTC 2002 Craig Rodrigues + + * ace/POSIX_CB_Proactor.h: + * ace/POSIX_CB_Proactor.cpp: + Do not build on Sun. + +Fri Nov 15 14:08:11 UTC 2002 Craig Rodrigues + + * include/makeinclude/platform_linux.GNU: + Linux glibc has aio_ and pthread_ calls in librt.so. + Add fix so that librt.so is linked in if threads=0. + +Fri Nov 15 07:48:37 2002 Balachandran Natarajan + + * tests/OS_Test.cpp: Added the test cases for itoa from + Joseph Sarbak . + +Fri Nov 15 07:08:46 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Fixed a few minor problems that showed + up in the daily builds. + +Thu Nov 14 22:08:49 2002 Steve Huston + + * tests/Proactor_Test.cpp: Make this test behave better: + - At the end of running time, close all the Senders. This should + cancel all the Sender outstanding operations and trip all the + Receivers into finishing their receives and closing themselves. + - Change the default Sender/Receiver count from 20 to 10. This + shrinks the log a bit without sacrificing test quality. + - Change the "inferior platforms" default Sender/Receiver count + from 1 to 3. With Proactor improvements made so far, let's give + these platforms some more exercise and see what happens. + +Thu Nov 14 23:10:32 UTC 2002 Craig Rodrigues + + * ace/POSIX_CB_Proactor.cpp: + * ace/POSIX_CB_Proactor.h: + * ace/POSIX_CB_Proactor.i: + * ace/POSIX_Proactor.cpp: + * ace/POSIX_Proactor.h: + * ace/POSIX_Proactor.i: + * ace/Proactor.cpp: + * tests/Proactor_Test.cpp: + Fixed Proactor so that on platforms that support POSIX IO, + but not POSIX RT signals, it will compile. Use the new + ACE_HAS_POSIX_REALTIME_SIGNALS macro. + +Thu Nov 14 22:47:45 UTC 2002 Craig Rodrigues + + * include/makeinclude/platform_freebsd.GNU: Merged with the + pthread version of this file. To compile without threads, + set, do make threads=0, or set threads=0 in this file. + * include/makeinclude/platform_freebsd_pthread.GNU: Removed. + * ace/config-freebsd.h: Merge with pthread version of this file. + * ace/config-freebsd-pthread.h: Removed. + * ace/OS.h: Use new ACE_HAS_POSIX_REALTIME_SIGNALS macro for + POSIX RT signals stuff, instead of ACE_HAS_AIO_CALLS. + FreeBSD has POSIX AIO, but not POSIX RT signals. + * ace/config-sunos5.6.h: Define ACE_HAS_POSIX_REALTIME_SIGNALS, + ACE_HAS_POSIX_MESSAGE_PASSING. + * ace/config-linux-common.h: Define ACE_HAS_POSIX_REALTIME_SIGNALS, + ACE_HAS_AIO_CALLS. + +Thu Nov 14 16:19:57 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added two tests, Bug_1269_Regression and + Bug_1270_Regression into the daily regression suite. They will + not run on Win32. + +Thu Nov 14 13:35:44 2002 Nanbor Wang + + * ace/Containers_T.cpp: Changed to deallocate internal nodes in + ACE_Double_Linked_List with the allocator. Thanks to Eugene + Alterman for reporting the problem. + +Thu Nov 14 10:57:47 2002 Carlos O'Ryan + + * ace/OS.h (ace_timezone): + + Fixed broken implementation for Linux. Call tzset() and then + return the global "timezone" variable instead. [Bug 1359] + +Thu Nov 14 12:19:51 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + + Modify the way projects are created on windows. If using + cygwin perl then use \n instead of \r\n. + + * bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm: + + Sort the list of projects to make the generated solution file more + similar to actual solution files. + +Thu Nov 14 06:16:51 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/Parser.pm: + + Take into account relative directories in the cd() method. + The original optimization overlooked this. + +Thu Nov 14 06:59:12 UTC 2002 Johnny Willemsen + + * ace/Date_Time.{h,i}: + Added update() method with which it is possible to set the values + in ACE_Date_Time based on a passed ACE_Time_Value. + + * ace/Time_Request_Reply.{h,cpp}: + Made the argument of the timeout method const&. Updated doxygen + documentation and marked init() as deprecated because it is a no-op. + +Wed Nov 13 18:28:39 2002 Steve Huston + + * tests/FIFO_Test.cpp: Changed to both clarify the usage of + ACE_FIFO_(Send|Recv)_Msg with and without ACE_HAS_STREAM_PIPES + and test that usage. + +Wed Nov 13 17:39:41 2002 Steve Huston + + * ace/POSIX_Proactor.{h cpp}: + * ace/SUN_Proactor.{h cpp}: Leave two handle_events() methods + available; one with a timeout, one without. Each proactor's + implementations calls an internal handle_events_i() method + that does the right thing. + (start_aio): This is a virtual method used to start an asynch I/O + request from outside the proactor (such as from an asynch read + stream). When the actual operation is to start, start_aio calls + start_aio_i(), implemented differently for the different proactors. + Similar arrangement for cancel_aio(). + + * tests/Proactor_Test.cpp: Cancel all outstanding operations before + trying to abruptly stop everything. + +Wed Nov 13 17:29:31 2002 Steve Huston + + * ace/WIN32_Asynch_IO.h (cancel_uncompleted): Filled in + description of the 'set' parameter. Thanks to Craig + Rodrigues for noticing its omission. + +Wed Nov 13 16:52:04 UTC 2002 Craig Rodrigues + + * ace/Lib_Find.cpp (ldname): MacOS X prepends an underscore to + symbols in shared libaries. + + * ace/config-macosx.h: + * include/makeinclude/platform_macosx.GNU: + + - add support for dlcompat, a third party package which provides + dlopen(), dlsym(), dlcose() functions + + - Define ACE_LD_SEARCH_PATH to DYLD_LIBRARY_PATH and + ACE_LD_SUFFIX to .dylib + +Tue Nov 12 14:12:59 2002 Balachandran Natarajan + + This is a hackish fix for BUG 1361. Please see + http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1361 + for details of this problem + + * ace/TP_Reactor.cpp (handle_socket_events): A hack to prevent + BUG 1361 from surfacing for applications like TAO, using the + TP_Reactor. This fix basically ensures that resume_i () is + not called naively. + + * ace/Event_Handler.h: Added a enum type which could be could be + used by the TP_Reactor. + +Tue Nov 12 11:53:29 2002 Steve Huston + + * tests/run_test.lst: Change FIFO_Test from !MSVC to !Win32 to + prevent it from running with Borland on Windows. Thanks to + Johnny Willemsen for pointing this out. + +Tue Nov 12 14:11:33 UTC 2002 Johnny Willemsen + + * ace/Time_Value.h: + Doxygen documentation improvements. + +Tue Nov 12 13:15:12 UTC 2002 Johnny Willemsen + + * ace/Message_Queue_T.h: + Doxygen documentation improvements. + +Mon Nov 11 20:37:18 2002 Ossama Othman + + * bin/auto_run_tests.lst: + + Added Jai's application-controlled membership load balancing + test to the list of regression tests to be run. + +Mon Nov 11 17:57:12 2002 Ossama Othman + + * bin/auto_run_tests.lst: + + Added Carlos' new PortableInterceptor AMI test to the list of + regression tests to be run. + +Mon Nov 11 16:17:59 2002 Nanbor Wang + + * bin/MakeProjectCreator/modules/TemplateParser.pm (relative): + Changed to invoke slash_to_backslash from $self. The original + code only runs on some specific version of perl. + +Mon Nov 11 13:35:53 2002 Douglas C. Schmidt + + * ace/Hash_Map_Manager_T.h: Updated + comments on the class ACE_Hash_Map_Bucket_Iterator. Thanks to + Kitty and Irfan for helping with this. + +Mon Nov 11 12:52:41 2002 Steve Huston + + * docs/ACE-subsets.html: Added the Timer component to the list of + buildable pieces. Thanks to Jason Pasion + for reporting this problem. + + * THANKS: Added Jason Pasion to the Hall of Fame. + +Mon Nov 11 12:39:18 2002 Steve Huston + + * ace/FIFO_Send_Msg.cpp (send): When setting iovec length, + static_cast the int length to size_t; the target is not an + int (as the strbuf length is). When returning the sent byte + count, don't include any additional bytes added internally + for record framing. + + * tests/FIFO_Test.cpp: New test to exercise basic and overflow + message-based FIFO I/O. + + * tests/Makefile: + * tests/run_test.lst: Added FIFO_Test. Disabled on MSVC builds + since Windows doesn't have FIFOs. + +Mon Nov 11 09:58:13 2002 Douglas C. Schmidt + + * ace/CDR_Stream.{i,cpp} Add casts to ACE_CDR::Octet and + ACE_CDR::Boolean to prevent warnings when run with MSVC++ level + 4 warnings. Thanks to Lukas Gruetzmacher + for motivating this fix. + + * ace/OS_String.cpp (itoa_emulation): Updated the code so that it'll + work correctly with negative numbers. Thanks to Joseph Sarbak + for reporting this and providing a fix. + +Sun Nov 10 19:38:45 2002 Balachandran Natarajan + + * ace/Message_Block.cpp(copy): The copy () methods were copying + data till the end_ pointer. This is a wrong assumption, + especially in places where the alloted bytes are less than the + allocated bytes. Now we use the space () method to find out the + amount of space available in the data block for copying. Thanks + to Edan Ayal for finding this and providing a patch. + + * ace/Simple_Message_Block_Test.cpp: Added a test which tests + copying in a case where the alloted space is less than the + allocated space. Thanks to Edan Ayal for this test case. + +Sat Nov 9 12:37:54 2002 Douglas C. Schmidt + + * docs/ACE-guidelines.html: Updated the ACE guidelines to + refer to the correct Doxygen links. Thanks to + Johnny Willemsen for reporting this. + +Sat Nov 9 21:48:31 2002 Steve Huston + + * tests/Proactor_Test.cpp: When disabling Nagle's, use IPPROTO_TCP, + not SOL_SOCKET, for the setsockopt level. Fixes set_option errors + in this test log. + +Sat Nov 9 18:49:11 2002 Steve Huston + + * ace/POSIX_Proactor.{h cpp i} (create_asynch_read_stream, + create_asynch_write_stream, create_asynch_read_dgram, + create_asynch_write_dgram, create_asynch_read_file, + create_asynch_write_file, create_asynch_accept, + create_asynch_connect, create_asynch_transmit_file): + Refactored all the factory creation methods from + ACE_POSIX_AIOCB_Proactor to ACE_POSIX_Proactor. + Moved the pseudo task from ACE_POSIX_AIOCB_Proactor to + ACE_POSIX_Proactor as well. + + (handle_events, cancel_aio): + Added these methods to ACE_POSIX_Proactor as pure virtual, + forcing their definition in the specific implementations. + + (start_aio): This is now a pure virtual function that all + more specific proactors need to implement. The old start_aio() + is now start_aio_i(). What used to be ACE_POSIX_AIOCB_Proactor:: + register_and_start_aio() is now ACE_POSIX_AIOCB_Proactor::start_aio. + Which type of I/O to start is now defined by an enum Opcode + that's passed to start_aio(). + + * ace/POSIX_Asynch_IO.{h cpp} (ACE_POSIX_Asynch_Operation): + Replace references to ACE_POSIX_AIOCB_Proactor with + ACE_POSIX_Proactor. Refactoring things out of specific proactor + types. + (ACE_POSIX_Asynch_Read_Stream, ACE_POSIX_Write_Stream, + ACE_POSIX_Asynch_Read_File, ACE_POSIX_Asynch_Write_File, + ACE_POSIX_Asynch_Accept, ACE_POSIX_Asynch_Connect, + ACE_POSIX_Asynch_Transmit_File, ACE_POSIX_Asynch_Transmit_Handler, + ACE_POSIX_Asynch_Read_Dgram, ACE_POSIX_Asynch_Write_Dgram): + Replace args of type ACE_POSIX_AIOCB_Proactor with + ACE_POSIX_Proactor. Matches POSIX_Proactor.* changes above. + Removed all the methods that said they were only there to kill + dominance warnings. These are not needed. + + These things all simplify the proactor framework code. Thanks to + Alex Libman for these ideas. + +Sat Nov 9 13:16:50 2002 Balachandran Natarajan + + * THANKS: Added Simon McQueen to the hall of fame. + +Fri Nov 8 13:04:10 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug in MPC where the idl file name could cause + an error on Windows if it had a slash in it. It would be + converted to a back slash and then interpreted inside a + regular expression which would cause MPC to abort. + +Fri Nov 8 13:00:56 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/BorlandProjectCreator.pm: + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/EM3ProjectCreator.pm: + * bin/MakeProjectCreator/modules/EM3WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/GHSProjectCreator.pm: + * bin/MakeProjectCreator/modules/GHSWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/GNUProjectCreator.pm: + * bin/MakeProjectCreator/modules/GNUWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/GUID.pm: + * bin/MakeProjectCreator/modules/NMakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/Parser.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateInputReader.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + * bin/MakeProjectCreator/modules/VA4ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VA4WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC6ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC6WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC7ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Performed various optimization which dramatically decreased the + amount of time to generate projects for the entire ACE tree. In + tests, the time went from 2 minutes to 1 minute. + +Fri Nov 8 12:57:57 2002 Chad Elliott + + * bin/MakeProjectCreator/README: + + Added documentation for the new verbatim keyword. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Added functionality to place test verbatim into a generated + project file. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Added verbatim markers top, macros, local and bottom. + +Fri Nov 8 12:52:16 2002 Chad Elliott + + * bin/MakeProjectCreator/README: + + Added documentation about the new idlgendir keyword. + + * bin/MakeProjectCreator/modules/GHSWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/Parser.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + * bin/MakeProjectCreator/modules/VC6WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm: + + Modified flag_overrides to work with both idlflags and idlgendir. + + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Modified all templates that deal with idl files to utilize the + idlgendir keyword. + +Fri Nov 8 04:03:29 UTC 2002 Don Hinton + + * tests/Multicast_Test.cpp: Cleaned up error messages and + error handling and insure that errors are returned. Added + 2 second timeout to call to ACE_Thread_Manager::wait() so + that lost messages won't cause test to hang. + +Wed Nov 6 18:55:22 2002 Steve Huston + + * ace/OS.{h i} (recursive_mutex_cond_unlock, + recursive_mutex_cond_relock): For Windows, don't try to save/restore + CRITICAL_SECTION members individually - there are undocumented + details at work there. Instead, release and acquire the mutex + one fewer times than the recursion count, letting Windows take + care of its internals. Fixes the hung Recursive_Condition_Test on + Windows. This also neatly removes the WinCE conditional code in + this area. + + * tests/Recursive_Condition_Test.cpp: Fix a const error that gcc + pointed out. + +Wed Nov 6 11:12:28 2002 Steve Huston + + * tests/Recursive_Condition_Test.cpp: Replaced ACE_TRACE with + ACE_DEBUG so the log gets all the info. Re-enabled the timer queue + part of the test and added a check to be sure "enough" expirations + are recorded. Added a piece of data protected by the mutex/condition + to be sure threads aren't released too early. + +Tue Nov 5 21:54:40 2002 Balachandran Natarajan + + * tests/run_tests.lst: + * tests/run_tests_remote.lst: Removed these files, since they + served no purpose other than adding to the noise. + +Tue Nov 5 15:51:29 2002 Steve Huston + + * ace/INET_Addr.cpp (set_addr): Add missing ';' in the IPv6 case. + +Tue Nov 5 20:26:33 UTC 2002 Don Hinton + + * tests/tests.mpc: Added Multicast_Test entry. + + * tests/README: Upadate instructions for adding new tests. + +Tue Nov 5 12:12:05 2002 Balachandran Natarajan + + * tests/Multicast_Test.cpp: Fixed compile errors in single threaded + builds. + +Tue Nov 5 11:24:03 2002 Nanbor Wang + + * ace/Process.h: + * ace/Process.i: Added a new method which returns + the actual value returned or 'ed by the child process. + The accessor returns the raw exit status returned by + the system APIs and the value is OS dependent. Changed the + mutator to be a proctected method and declare + ACE_Process_Manager a fried of ACE_Process as + mutator should only be used by ACE_Process_Manager. + + Thanks to Stephen Blake for reporting the + problem. + +Tue Nov 5 05:12:16 2002 Ossama Othman + + * ace/Acceptor.h: + * ace/Connector.h: + * ace/Strategies_T.h: + + Added missing STL-style template traits found in C++NPv2 + including the following: + + addr_type + acceptor_type + connector_type + handler_type + stream_type + base_type + accept_strategy_type + connect_strategy_type + creation_strategy_type + concurrency_strategy_type + recycling_strategy_type + scheduling_strategy_type + + where applicable. The old traits are still available and remain + unchanged. + +Tue Nov 5 05:54:16 UTC 2002 Don Hinton + + * tests/Multicast_Test.cpp: Fixed typo in pragma instantiation, + and replaced an instance of char* with ACE_TCHAR* to fix unicode + builds. Added #ifdef for ACE_HAS_THREADS, since it uses + ACE_Task as an active object. + + * tests/run_test.lst: Turned off Multicast_Test and + Token_Stategy_Test for single threaded builds. + +Mon Nov 4 18:01:25 UTC 2002 Don Hinton + + * tests/Makefile.bor: Added new Multicast_Test. Thanks to + Johnny Willemsen for noticing this. + +Mon Nov 4 16:14:21 UTC 2002 Don Hinton + + * tests/Multicast_Test.cpp (get_handle): Made return type of + definition ACE_HANDLE to match the declaration. Thanks to + Ed Skees for reporting this. + + * tests/Multicast_Test.dsp: + * tests/tests.dsw: Added new dsp. Thanks again to Ed Skees + for providing this. + + * THANKS: Added Ed Skees to hall of fame... + +Mon Nov 4 09:28:34 UTC 2002 Don Hinton + + * ace/SOCK_Dgram.cpp (recv): Corrected method signature in .cpp to + match the one in the .h. The .h version specified iovec*, but + the .cpp had iovec[] which confused doxygen. This fixes bug [1353]. + +Sun Nov 3 19:41:30 UTC 2002 Don Hinton + + * tests/Multicast_Test.cpp: + * tests/Makefile: + * tests/run_test.lst: Added a new test to exercise some of the new + functionality of ACE_SOCK_Dgram_Mcast. + +Sun Nov 3 10:36:50 2002 Balachandran Natarajan + + * tests/run_test.lst: Prevented SV_Shared_Memory test from running + in RH_7.1 configurations. Please see BUGID 1351 for details. + +Sat Nov 2 17:44:00 2002 Balachandran Natarajan + + * ace/Select_Reactor_Base.h: + * ace/Select_Reactor_Base.cpp: Fixed a subtle bug in the + Select_Reactor. The following were performed during the bind () + operation, which binds a handle with interested mask to an + event_handler, + + - The new masks were added to the existing wait_set + - and the new masks were also removed from the suspend_set. + + Though the above steps were fine, there exists a possibility + when the reactor could land up with a state when the handle + could be both in the wait_set and suspend_set. If suppose a + handle is initially registered for READ and EXCEPTION with the + reactor and then suspended. If the user calls register_handler + () to register the same handle for READ and WRITE, things could + go totally bizzare. + + The present fix does the following + + - If the handle is suspended, the masks are added to the + suspend_set + - else the masks are added to the wait_set and the flag that + indicates state changes within the reactor is set to 1. + + A pure virtual call is_suspended_i () was added to the + ACE_Select_Reactor_Base class to make the check for a suspended + handle possible within the bind () call. Thanks to Irfan + Pyarali who reported this problem. This + should fix the problem reported in [BUG 1305]. + +Fri Nov 1 07:35:10 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added the new + MProfile_Connection_Timeout test to the daily regression tests. + +Thu Oct 31 19:15:49 2002 Nanbor Wang + + * ACEXML/common/Attributes.h: Added the missing inclusion of + ACEXML_Export.h and the #pragma once directive. Thanks to Paul + Marquis for reporting this. + +Thu Oct 31 12:57:10 2002 Nanbor Wang + + * ace/OS.i (fstat): Added check for FILE_ATTRIBUTE_DIRECTORY on + Win32 to set the file type in the st_mode so one can determine + if it's a file or a directory. Thanks to Paul Marquis + for submitting the patch. + +Wed Oct 30 13:47:14 2002 Steve Huston + + * ace/Thread_Exit.cpp: Add #include "ace/Managed_Object.h" to get + the definition of ACE_Managed_Object. + +Wed Oct 30 11:38:36 2002 Irfan Pyarali + + * ace/Timeprobe.h: Fixed formatting of comments that somehow got + messed up in: + + http://cvs.doc.wustl.edu/viewcvs.cgi/ace/Timeprobe.h.diff?r1=4.29&r2=4.30 + +Tue Oct 29 22:27:24 2002 Frank Hunleth + + * apps/gperf/src/Key_List.cpp: Added cast to int on UCHAR_MAX and + USHRT_MAX to remove warnings of comparing signed and unsigned + values under OpenBSD. + + * ace/config-openbsd.h: + * ace/config-openbsd-pthread.h: Added ACE_HAS_MKSTEMP since + OpenBSD has the mkstemp() function, and it helps clear up + linker warnings. Also added ACE_HAS_ALT_CUSERID to clear + up errors due to _cuserid(). Thanks to Craig Rodrigues + for the latter patch. + +Tue Oct 29 15:45:06 2002 Nanbor Wang + + * ace/Thread_Exit.h: + * ace/Thread_Exit.cpp: + * ace/Thread_Manager.h: + * ace/Thread_Manager.cpp: Changed to use ACE_Thread_Manager to + clean up the global TSS ACE_Thread_Exit object instead of + depending on the more general ACE_Object_Manager::at_exit method + so we can better control the order of destruction. The change + makes sure the global TSS ACE_Thread_Exit object will only get + deleted *after* ACE_Thread_Manager has cleaned up all threads + and destroyed itself. + + Thanks to Patrick McNerthney and + Daniel Bell for reporting + the problem. + +Tue Oct 29 16:19:54 UTC 2002 Craig Rodrigues + + * ace/INET_Addr.cpp: + * ace/INET_Addr.i: + * ace/INET_Addr.h: + - Added a reset() method to initialize the underlying sockaddr_in + or sockaddr_in6 structure, and set the address family. Changed + all constructors to use this reset() method. [Bug 1342] + - (INET_Addr::set_addr) the port number was not being set, + so set it. [Bug 1329] + * tests/INET_Addr_Test.cpp: Add test to verify that address family + is being set. + * THANKS: Added Thomas Devanneaux who provided + these fixes. + +Mon Oct 28 20:46:33 2002 Steve Huston + + * ace/SOCK_Dgram_Mcast.cpp (ACE_SDM_helpers::addr_to_string): Use + the "" string in place rather than try to declare it a static. + gcc reports the original usage won't do what you think (keep one + copy for the method) but will duplicate it in each generated + method. Use it as a literal and let the compiler try to place a + single copy in a read-only section. + +Mon Oct 28 20:38:27 2002 Steve Huston + + * ace/Asynch_IO.cpp (ACE_Service_Handler::addresses()): Don't + print addresses from here. It's inappropriate for a framework + to be printing things out without being asked to. + + * ace/POSIX_Asynch_IO.cpp (ACE_POSIX_Asynch_Read_Stream::read): + * ace/WIN32_Asynch_IO.cpp (ACE_WIN32_Asynch_Read_Stream::read): + Don't print a message for a 0-byte/no space read - set errno to + ENOSPC so the caller can figure out what's going on. + + * ace/SUN_Proactor.{h cpp}: + * ace/POSIX_Proactor.{h cpp} (ACE_POSIX_AIOCB_Proactor):Change + 'return_status' arg to get_result_status(), find_completed_aio() + from int to size_t and rename transfer_count; get_result_status() + takes care of sensing -1 count and changing to 0. Passing back + a size_t smooths the path from here through to the result object. + Removed application_specific_code() - reuse the one from + ACE_POSIX_Proactor - this one called it; remove the middle-man. + + * tests/Proactor_Test.cpp: Added addresses() method implementations + to print address with session IDs; helps to match Sender/Receiver + pairs in the log. Also added some logging of basic send/recv info + to help try to track down why this facility doesn't work well. + Added a check for comparable sends/receives when a session ends. + Added a warning if there are outstanding I/O when the session + ends. This probably should be an error, but I haven't thought + through it enough to go that far. For the SUN Proactor, use one + thread by default (not 3) - aiosuspend() is not MT safe. + +Mon Oct 28 12:48:14 2002 Nanbor Wang + + * bin/PerlACE/Process_Unix.pm (Spawn): Return 0 when the function + complete successfully. Thanks to Charles F. Frasch + for reporting and suggesting the fix. + +Sun Oct 27 07:44:32 2002 John Aughey + + * ace/INET_Addr.cpp: Changed the default constructor to only + set the address family rather than doing a full set. This + should exhibit the same behavior without additional overhead. + +Sat Oct 26 21:49:15 2002 Nanbor Wang + + * ace/Process.cpp (wait): + * ace/Process.i (wait): Changed to always update this->exit_code_ + when waiting on a child process to allow method to + function properly. Removed the use of the macro + ACE_OSCALL_RETURN on ACE_OS::waitpid since ACE_OS::waitpid is + already signal safe. + + * ace/Process.h: Changed the type of this->exit_code_ from int to + ACE_exitcode. Updated documentation for mutator method + to better reflect the intention for using this + method. + + Thanks to Artashes Ghazaryan , Jaroslaw Nozderko + , and Stephen Blake + for reporting the problem. + +Sat Oct 26 11:42:04 UTC 2002 John Aughey + + * ace/INET_Addr.cpp: Changed default behavior to set 0 + port and INADDR_ANY address. + +Sat Oct 26 09:45:12 UTC 2002 Johnny Willemsen + + * ace/Timer_Heap_T.h: + Doxygen documentation fix + + * ace/OS.h: + The BCB4 header files don't define ENOTEMPTY, so define this when + detecting the BCB4 compiler. Thanks to Mike Curtis + for reporting this. + + * examples/Reactor/Proactor/test_proactor2.cpp: + Removed not needed return. Fixes a BCB4 build error + + * THANKS: Added Mike Curtis + +Wed Oct 23 16:37:15 2002 Balachandran Natarajan + + * THANKS: Added Sandeep to the Hall of Fame. + +Wed Oct 23 17:20:18 UTC 2002 Don Hinton + + * ace/Service_Object.{h,cpp} (suspend, resume, fini): + Changed return value from void to int so that the + return value of the contained ACE_Service_Type could be + propagated. + + * ace/Service_Repository.cpp (suspend, resume, fini): + Changed to propagate the return value from the + ACE_Service_Type instead of always 0. + +Tue Oct 22 16:26:56 2002 Rich Seibel + + * ace/Basic_Types.h: + Added a test for _BYTE_ORDER, same as BYTE_ORDER and + __BYTE_ORDER. VxWorks defines this. Also note, compilers + that previously automatically looked for _BYTE_ORDER when + only BYTE_ORDER was specified will likely not do so in the + future. This will proactively fix them also. + + * ace/config-all.h: + Moved the use of FUNCPTR until after the include that defines + it. Only affects VxWorks. + +Tue Oct 22 13:11:42 2002 Nanbor Wang + + * ace/OS.cpp (DllMain): Added code to invoke + DisableThreadLibraryCalls during PROCESS_ATTACH when + ACE_DISABLES_THREAD_LIBRARY_CALLS is defined to 1 as described + below. This should enhance performance of applications that + spawn a lot of threads. Thanks to Patrick McNerthney + for suggesting the change. + + We should probably apply the same optimization for the core TAO + libraries. + + * ace/config-win32-common.h: Defined a Win32-only new macros + ACE_DISABLES_THREAD_LIBRARY_CALLS which is default to 0 if not + defined by users. + +Mon Oct 21 17:26:15 2002 Douglas C. Schmidt + + * ace/SPIPE_Acceptor.cpp: Modified + SPIPE_Acceptor::create_new_instance to manually signal the event + used in the ConnectNamedPipe call when an ERROR_PIPE_CONNECTED + status is returned. Also added the handling of the status of + ERROR_NO_DATA to the same logic as ERROR_PIPE_CONNECTED. Thanks + to Patrick J. McNerthney for contributing + this. + +Tue Oct 22 10:20:41 2002 Balachandran Natarajan + + * examples/C++NPv2/Reactor_Logging_Server_T.cpp: Fixed a typo that + broke the builds. My bad :( + +Mon Oct 21 20:13:27 2002 Balachandran Natarajan + + * examples/C++NPv2/Reactor_Logging_Server_T.cpp: + * examples/C++NPv1/Logging_Server.cpp: + * examples/C++NPv1/Process_Per_Connection_Logging_Server.cpp: + * examples/C++NPv1/RT_Thread_Per_Connection_Logging_Server.cpp: + * examples/C++NPv1/Thread_Per_Connection_Logging_Server.cpp: + Fix for compile errors on Lynx platform. Thanks to Craig + Rodrigues for supplying the patches. + +Tue Oct 22 12:36:12 UTC 2002 Johnny Willemsen + + * ace/Basic_Stats.h: + * ace/Dirent_Selector.h: + * ace/Service_Config.h: + * ace/Timer_Heap_T.h: + Improved doxygen documentation. + +Mon Oct 21 22:30:51 2002 Balachandran Natarajan + + * tests/SString_Test.cpp (ACE_TMAIN): Fixed a warning in Win32 builds. + +Mon Oct 21 20:04:12 2002 Balachandran Natarajan + + * ace/WIN32_Asynch_IO.h: + * ace/WIN32_Asynch_IO.cpp: Integrated the latest patches from Eric + Frias . + +Mon Oct 21 06:54:12 2002 Balachandran Natarajan + + * tests/Recursive_Condition_Test.cpp (test_4): + * tests/RB_Tree_Test.cpp: Fixed compile errors arising out of M$ + quirks. The scoping rules for 'for' loops are busted and hence + these fixes. These fixes basically change the variable names for + the different for loops inside the same scope. + +Sun Oct 20 21:40:13 2002 Krishnakumar B + + * ACEXML/common/HttpCharStream.cpp: Handle all the error paths + gracefully and don't leak memory/sockets. + +Sun Oct 20 14:06:36 2002 Krishnakumar B + + * ACEXML/common/FileCharStream.cpp (peek_i): Fixed more + compilation errors in Borland WCHAR builds. MSVC sucks... + +Sun Oct 20 11:36:34 2002 Balachandran Natarajan + + * ACEXML/common/FileCharStream.cpp: Fixed a compile error in + Borland builds. The compile error is due to strict enforcement + of scoping rules in a for loop by Borland compiler. + +Sun Oct 20 11:31:45 2002 Balachandran Natarajan + + * ACEXML/common/Makefile.bor: Added Encoding.obj to the list of + object files. Thanks to Johnny for pointing this out. + +Sun Oct 20 11:30:04 2002 Balachandran Natarajan + + * tests/SPIPE_Test.cpp: Fixed compile errors in Borland builds. + +Sun Oct 20 10:16:23 2002 Balachandran Natarajan + + * examples/C++NPv2/display_logfile.cpp: Fix for single threaded + builds. + +Sun Oct 20 10:12:42 2002 Balachandran Natarajan + + * tests/Recursive_Condition_Test.cpp: Fix for single threaded + builds. The ACE_HAS_THREADS were improperly placed. + +Sun Oct 20 09:26:58 2002 Balachandran Natarajan + + * examples/C++NPv1/Makefile: Added changes from "Fri Oct 18 + 21:01:25 UTC 2002 Craig Rodrigues " back + since the changes are fine. Thanks to Craig for pointing that + out. + +Sun Oct 20 13:34:45 UTC 2002 Craig Rodrigues + + * examples/C++NPv2/Makefile: Replace with recursive Makefile which + does not use for loops. Add .NOTPARALLEL target to fix + build errors on parallel builds. + +Sun Oct 20 08:10:43 2002 Balachandran Natarajan + + * tests/Recursive_Condition_Test.cpp: Fixed a unused variable warning. + +Sun Oct 20 00:27:02 2002 Balachandran Natarajan + + * tests/Recursive_Condition_Test.cpp: Fixed a fuzz error. + +Sun Oct 20 00:14:32 2002 Balachandran Natarajan + + * examples/C++NPv1/Makefile: Reverted the change "Fri Oct 18 + 21:01:25 UTC 2002 Craig Rodrigues " since + this opens up some problems. Craig will look into it later and + provide a clean fix. Till then.. + +Sat Oct 19 20:00:00 2002 Stephen Torri + + * tests/Recursive_Condition_Test.cpp: + + Added test to check nesting_level after requiring a Recursive + Condition Mutex multiple times. Also after releasing for the + same number of times. + + * tests/SString_Test.cpp: + * ace/String_Base.i: + + Bug 1323 (Reported by Wayne Erchak ): Fixed. + In the effort to protect from memory problems with non-null + terminated strings the operators '<' and '>' where + rendered useless. Now the comparions use memcmp instead of + strncmp. A series of tests have been added to SString_Test.cpp + to ensure this does not happen again. + +Sat Oct 19 21:58:00 2002 Krishnakumar B + + * ace/Argv_Type_Converter.cpp: + * ace/Argv_Type_Converter.h: + * ace/Argv_Type_Converter.inl: + * ace/Codecs.cpp: + * ace/Codecs.h: + * ace/OS.cpp: + * ace/Vector_T.cpp: + * ace/Vector_T.h: + * ace/WFMO_Reactor.cpp: + * tests/Proactor_Scatter_Gather_Test.cpp: Convert bool to use int. + + * ace/SString.cpp: Removed a redundant initialization to 0. + + * tests/Makefile: Add DIRS_PARALLEL=1 to allow building in + parallel in $ACE_ROOT/tests. + +Sat Oct 19 11:40:22 2002 Steve Huston + + * ace/OS.h: Added a ptrdiff_t typedef for ACE_HAS_WINCE. eVC3, + PocketPC2002 don't define this type. + + * ace/OS.i (recursive_mutex_cond_unlock, recursive_mutex_cond_relock): + PocketPC 2002 doesn't have the RecursionCount member in the + CRITICAL_SECTION. + + * ace/OS.cpp: ACE-ified the ACE_CE_ARGV class. + + * ace/OS_Errno.cpp: Add #include "ace/OS_Memory.h" to get ACE_NEW. + + * ace/ace_os_dll.vcp: Added files Time_Value.{h cpp inl}. Changed + preprocessor file locations from $ACE_ROOT to ".." to allow + working with more than one ACE version/build. + + * ace/ace_dll.vcp: Added files DLL_Manager.{h cpp}. + Changed preprocessor file locations from $ACE_ROOT to ".." to + allow working with more than one ACE version/build. + + * ace/config-win32-common.h: Set ACE_HAS_WIN32_TRYLOCK for WinCE + in addition to ACE_HAS_WINNT4. Also ACE_HAS_INTERLOCKED_EXCHANGEADD, + but only for PPC. + + * ace/Atomic_Op.h: Only set ACE_HAS_BUILTIN_ATOMIC_OP without + ACE_HAS_INTERLOCKED_EXCHANGEADD for MSVC on x86. It's not available + for eVC, CE on other than PPC. + + * tests/ARGV_Test_WinCE.vcp + * tests/Atomic_Op_Test_WinCE.vcp + * tests/Auto_IncDec_Test_WinCE.vcp + * tests/Barrier_Test_WinCE.vcp + * tests/Basic_Types_Test_WinCE.vcp + * tests/Bound_Ptr_Test_WinCE.vcp + * tests/Buffer_Stream_Test_WinCE.vcp + * tests/Cached_Accept_Conn_Test_WinCE.vcp + * tests/Cached_Conn_Test_WinCE.vcp + * tests/Cache_Map_Manager_Test_WinCE.vcp + * tests/Capabilities_Test_WinCE.vcp + * tests/CDR_Array_Test_WinCE.vcp + * tests/CDR_File_Test_WinCE.vcp + * tests/CDR_Test_WinCE.vcp + * tests/Collection_Test_WinCE.vcp + * tests/Conn_Test_WinCE.vcp + * tests/DLList_Test_WinCE.vcp + * tests/DLL_Test_DLL_WinCE.vcp + * tests/DLL_Test_WinCE.vcp + * tests/Dynamic_Priority_Test_WinCE.vcp + * tests/Enum_Interfaces_Test_WinCE.vcp + * tests/Future_Set_Test_WinCE.vcp + * tests/Future_Test_WinCE.vcp + * tests/Handle_Set_Test_WinCE.vcp + * tests/Hash_Map_Bucket_Iterator_Test_WinCE.vcp + * tests/Hash_Map_Manager_Test_WinCE.vcp + * tests/High_Res_Timer_Test_WinCE.vcpL + * tests/Lazy_Map_Manager_Test_WinCE.vcp + * tests/Logging_Strategy_Test_WinCE.vcp + * tests/Log_Msg_Test_WinCE.vcp + * tests/Malloc_Test_WinCE.vcp + * tests/Map_Manager_Test_WinCE.vcp + * tests/Map_Test_WinCE.vcp + * tests/Max_Default_Port_Test_WinCE.vcp + * tests/Mem_Map_Test_WinCE.vcp + * tests/MEM_Stream_Test_WinCE.vcp + * tests/Message_Block_Test_WinCE.vcp + * tests/Message_Queue_Notifications_Test_WinCE.vcp + * tests/Message_Queue_Test_Ex_WinCE.vcp + * tests/Message_Queue_Test_WinCE.vcp + * tests/MM_Shared_Memory_Test_WinCE.vcp + * tests/MT_Reactor_Timer_Test_WinCE.vcp + * tests/MT_Reactor_Upcall_Test_WinCE.vcp + * tests/MT_SOCK_Test_WinCE.vcp + * tests/Naming_Test_WinCE.vcp + * tests/New_Fail_Test_WinCE.vcp + * tests/Notify_Performance_Test_WinCE.vcp + * tests/Object_Manager_Test_WinCE.vcp + * tests/OrdMultiSet_Test_WinCE.vcp + * tests/OS_Test_WinCE.vcp + * tests/Priority_Buffer_Test_WinCE.vcp + * tests/Priority_Reactor_Test_WinCE.vcp + * tests/Priority_Task_Test_WinCE.vcp + * tests/Process_Manager_Test_WinCE.vcp + * tests/RB_Tree_Test_WinCE.vcp + * tests/Reactors_Test_WinCE.vcp + * tests/Reactor_Exceptions_Test_WinCE.vcp + * tests/Reactor_Notify_Test_WinCE.vcp + * tests/Reactor_Performance_Test_WinCE.vcp + * tests/Reactor_Timer_Test_WinCE.vcp + * tests/Reader_Writer_Test_WinCE.vcp + * tests/Recursive_Mutex_Test_WinCE.vcp + * tests/Refcounted_Auto_Ptr_Test_WinCE.vcp + * tests/Reverse_Lock_Test_WinCE.vcp + * tests/Semaphore_Test_WinCE.vcp + * tests/Service_Config_DLL_WinCE.vcp + * tests/Service_Config_Test_WinCE.vcp + * tests/Sigset_Ops_Test_WinCE.vcp + * tests/Simple_Message_Block_Test_WinCE.vcp + * tests/SOCK_Connector_Test_WinCE.vcp + * tests/SOCK_Send_Recv_Test_WinCE.vcp + * tests/SOCK_Test_WinCE.vcp + * tests/SPIPE_Test_WinCE.vcp + * tests/SString_Test_WinCE.vcpS + * tests/Svc_Handler_Test_WinCE.vcp + * tests/Task_Test_WinCE.vcp + * tests/Thread_Manager_Test_WinCE.vcp + * tests/Thread_Mutex_Test_WinCE.vcp + * tests/Thread_Pool_Reactor_Resume_Test_WinCE.vcp + * tests/Thread_Pool_Reactor_Test_WinCE.vcp + * tests/Thread_Pool_Test_WinCE.vcp + * tests/Timeprobe_Test_WinCE.vcp + * tests/Timer_Queue_Test_WinCE.vcp + * tests/Time_Service_Test_WinCE.vcp + * tests/Time_Value_Test_WinCE.vcp + * tests/Tokens_Test_WinCE.vcp + * tests/TSS_Test_WinCE.vcp + * tests/Upgradable_RW_Test_WinCE.vcp + Changed include file path from $ACE_ROOT to .. to allow building + multiple versions. Added aced.lib to CE ARM Debug builds. + +Sat Oct 19 16:57:44 UTC 2002 Johnny Willemsen + + * etc/tao_*.doxygen: + Disabled the doxygen warnings. The warnings about not documented + members are still on. The warnings are not disabled in the ace + libraries because we could fix them there, but we can't fix them + in TAO because of the environment macro's that cause the method + definition arguments to be different than the implementation + arguments. + +Sat Oct 19 16:47:12 UTC 2002 Johnny Willemsen + + * ace/ace_wchar.h: + Added ACE_TEXT_WaitNamedPipe to the list of Windows functions we use + and for which there is an ascii and unicode version. + + * ace/SPIPE_Connector.cpp: + Used ACE_TEXT_WaitNamedPipe instead of ::WaitNamedPipe. This fixes + the problems in the BCB Unicode build. + +Sat Oct 19 10:09:38 2002 Balachandran Natarajan + + * examples/C++NPv2/Makefile: Reverted the change "Fri Oct 18 + 21:01:25 UTC 2002 Craig Rodrigues " since + this opens up some problems. Craig will look into it later and + provide a clean fix. Till then.. + +Sat Oct 19 09:25:52 2002 Douglas C. Schmidt + + * examples/Reactor/Misc/test_timer_queue.cpp, + * tests/Timer_Queue_Test.cpp: Fixed warnings with G++. + Thanks to Bala for reporting this. + +Fri Oct 18 22:07:31 2002 Steve Huston + + * ace/config-aix-4.x.h: Only define ACE_HAS_ALLOCA for IBM + compilers. They do it via "builtin" trickery and g++ doesn't + know that trick. + + * include/makeinclude/platform_aix4_g++.GNU: Set with_ld to aix + to avoid trying to do an soname - AIX's ld doesn't do that. + + * include/makeinclude/platform_g++_common.GNU: If with_ld is aix, + don't try to add to soname option to the linker. + +Fri Oct 18 20:13:29 2002 Steve Huston + + * include/makeinclude/platform_hpux_gcc.GNU: Added an optional + build parameter, with_ld, whose default value is hpux. This + says which ld is used with g++. + + * include/makeinclude/platform_g++_common.GNU: When setting the + SOFLAGS for setting SONAME, if with_ld is hpux, use +h, not -h. + -h means "hide symbol" in HP-UX ld. + +Fri Oct 18 17:12:03 2002 Balachandran Natarajan + + * examples/C++NPv2/display_logfile.cpp: + * examples/C++NPv2/Client_Logging_Daemon.cpp: + * examples/C++NPv2/TP_Logging_Server.h: + * examples/C++NPv2/TP_Logging_Server.cpp: Fixed compile errors in + single threaded builds. All they needed was the usage of the + right macros like ACE_SYNCH instead of ACE_MT_SYNCH and + ACE_SYNCH_MUTEX instead of ACE_Thread_Mutex. + +Fri Oct 18 16:25:09 2002 Yuanfang Zhang + + * tests/RB_Tree_Test.h: + * tests/RB_Tree_Test.cpp: + + add a new method to test forward and reverse partial tree traversal. + +Fri Oct 18 21:01:25 UTC 2002 Craig Rodrigues + + * examples/C++NPv1/Makefile: Fix comment. + * examples/C++NPv1/Makefile: Replace with recursive Makefile which + does not use for loops. + +Fri Oct 18 15:44:19 2002 Priyanka Gontla + + * THANKS: + Added Christian Barheine to the hall + of fame. + +Fri Oct 18 19:37:20 GMT 2002 Craig Rodrigues + + * ace/config-macosx.h: Define ACE_HAS_NONSTATIC_OBJECT_MANAGER + for gperf. + +Fri Oct 18 14:52:37 2002 Steve Huston + + * examples/C++NPv2/Reactor_Logging_Server.cpp: + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: + * examples/C++NPv2/TP_Reactor_Logging_Server.cpp: + * examples/C++NPv2/display_logfile.cpp: Added necessary explicit + template instantiations. + +Fri Oct 18 13:21:05 2002 Douglas C. Schmidt + + * tests/Timer_Queue_Test.cpp, + * examples/Reactor/Misc/test_timer_queue.cpp: + Fixed these tests so that it passes dynamically allocated memory + rather that values via the "act" parameter to + ACE_Timer_Queue::schedule(). This ensures the test will work + properly on strange OS platforms, such as Win64 where pointers + and longs/ints are different sizes. Thanks to Cristian + Ungureanu for motivating this. + +Fri Oct 18 17:20:02 UTC 2002 Don Hinton + + * ace/SOCK_Dgram_Mcast.{h,cpp}: + + Factored out common code to an open_i() method that open() + can call at this level and in inherited classes. + + * ace/QoS/SOCK_Dgram_Mcast_QoS.{h.cpp}: + + Modified ctor to take same default param as base class and + invoke the base class ctor. + + Removed duplicate code in open() and have it call base::open_i() + after opening the socket with QoS. Changed 1st parameter from + ACE_Addr to ACE_INET_Addr to match base classes. + + Removed duplicate code from subscribe by having it call base + class methods. + +Fri Oct 18 11:51:44 2002 Nanbor Wang + + * bin/PerlACE/Run_Test.pm: Created a new variable + $PerlACE::svcconf_ext which defines the canonical + svc.conf file extention used by various run_test scripts. By + default, this is defined to ".conf". It can be overwritten + using the environment variable ACE_RUNTEST_SVCCONF_EXT. For + example, you can define ACE_RUNTEST_SVCCONF_EXT to ".conf.xml" + if you have built your ACE with XML-based service configurator. + +Fri Oct 18 11:55:33 2002 Steve Huston + + * ace/POSIX_CB_Proactor.cpp: Removed unneeded argument to + application_specific_code(). Thanks to Tommy Persson + for contributing this fix. + + Fixes Bugzilla #1325. + + * THANKS: Added Tommy Persson to the Hall of Fame. + +Fri Oct 18 11:39:29 2002 Steve Huston + + * examples/C++NPv1/Process_Per_Connection_Logging_Server.cpp: + * examples/C++NPv1/RT_Thread_Per_Connection_Logging_Server.cpp: + * examples/C++NPv1/Thread_Per_Connection_Logging_Server.cpp: + Put the sigterm_handler function in an unnamed namespace + to avoid issues with g++ not liking 'static' and 'extern "C"' + together. + +Fri Oct 18 03:55:51 UTC 2002 Don Hinton + Bill Fulton + + * ace/SOCK_Dgram_Mcast.{h,i,cpp}: + + Enhanced support for join()'ing multiple multicast groups. Ctor + now offers finer control over a bind()'ing to an address or + interface. Appropriate default behavior has been specified, + but note that due to issues on Linux, portable code should not + join() more than one multicast group per instance. + + An open() method has been added/exposed. If not explicitely + called, it will be implicitely called by the first join(), and + will bind() the address if the OPT_BINDADDR_YES options was + specified in the ctor. + + Error handling has also been enhanced. For instance, if + OPT_BINDADDR_YES has been specified (the default on Linux), + additional join()'s will fail since the socket gets bound on + the first call to open() or join(). Previously, subsequent + calls to join() would silently fail, i.e., the call succeeded + but only datagrams sent to the first, bound address where + actually delivered. + + If ACE_SOCK_DGRAM_MCAST_DUMPABLE is defined, a list of all + subscribed groups is maintained and can be dump()'ed, although + access to this list is not public. + + Added new join()/leave() methods that remove unused, deprecated + protocol_family and protocol arguments. These values can be + determined on the fly. The old subscribe()/unsubscribe() + methods have been deprecated and are now implemented in terms + of join()/leave() respectively. + + The unsubscribe(void) method has also been deprecated. It was + designed to allow the caller to unsubscribe/leave() all + groups at once, but since a list was never kept (and still + isn't unless ACE_SOCK_DGRAM_MCAST_DUMPABLE is defined) only + the last group join()'ed was ever left. A better way would + be to either keep track of you own groups and call leave() + for each, or let the dtor close() the socket which automatically + unsubscribes from all groups. + + Some IPv6 support has been added either directly or by removing + the need for the caller to handle it (see join()/leave() above), + although the internal calls to setsockopt() are still hard wired + for IPv4. + +Fri Oct 18 06:51:07 2002 Douglas C. Schmidt + + * ace/String_Base.{i,cpp}: Fixed the formatting in these files... + +Thu Oct 17 20:02:39 2002 Steve Huston + + * examples/C++NPv1/Process_Per_Connection_Logging_Server.cpp: + * examples/C++NPv1/RT_Thread_Per_Connection_Logging_Server.cpp: + * examples/C++NPv1/Thread_Per_Connection_Logging_Server.cpp: + Add extern "C" to the signal handler function declaration to conform + strictly to its definition. + When explicitly instantiating auto_ptr<>, fully specify the + Thread_Args type else modern compilers (Forte 7) can't see it. + +Thu Oct 17 17:32:39 2002 Krishnakumar B + + * ACEXML/examples/svcconf/Svcconf_Handler.cpp: + * ACEXML/examples/svcconf/Svcconf_Handler.h: + * ACEXML/examples/svcconf/main.cpp: + + Fixed compilation errors under Windows. + +Thu Oct 17 19:18:02 UTC 2002 Craig Rodrigues + + * ace/config-macosx.h: + - Remove define of __MACOSX__, and use constant __APPLE__ + instead defined by Apple's gcc. + - Removed definitions: + ACE_HAS_MACOSX_DYLIB, ACE_LACKS_SEMBUF_T + - Added definitions: + ACE_HAS_SEMUN, ACE_HAS_SIGINFO_T, ACE_LACKS_SIGINFO_H, + ACE_HAS_UCONTEXT_T, ACE_HAS_GETIFADDRS, + ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES + - Defined ACE_HAS_POSITION_INDEPENDENT_POINTERS to 0 for temporary + Apple gcc bug workaround. + + * ace/Log_Msg.cpp (ACE_Log_Msg::log): Add check for __APPLE__ to catch + right prototype for sys_errlist. + + * ace/OS.h: Remove unnecessary __MACOSX__ check. + + * include/makeinclude/platform_macosx.GNU: Minor cleanups. + +Thu Oct 17 13:47:39 2002 Steve Huston + + * ace/OS.h: Added typedef for ACE_recursive_mutex_state for + !defined (ACE_HAS_THREADS) section. + +Thu Oct 17 16:28:05 UTC 2002 Don Hinton + + * THANKS: Added Jon Franklin + to the hall of fame. + +Thu Oct 17 10:26:59 2002 Balachandran Natarajan + + * examples/C++NPv2/display_logfile.cpp (ACE_MT_SYNCH>): Fixed a + uninitialized member usage warning. + +Thu Oct 17 00:26:13 2002 Nanbor Wang + + * ace/Malloc_T.i (release): Instead of releasing the memory_pool_ + explicitly, changed to use remove () to make sure all resources + are removed properly. + +Wed Oct 16 20:23:09 2002 Krishnakumar B + + * ACEXML/common/FileCharStream.cpp (getchar_i): + * ACEXML/common/FileCharStream.h: + + Borland defines getchar() as a macro. Rename it as getchar_i to + resolve the clash and fix compilation errors in the build. + + +Wed Oct 16 18:47:44 2002 Stephen Torri + + * examples/C++NPv1/Makefile: + + Replaced Makefile with non-for-loop version provided by + Craig Rodrigues. + +Wed Oct 16 16:52:52 2002 Nanbor Wang + + * ace/MEM_SAP.cpp (close_shm_malloc): Fixed a memory leak that I + added last time when I fixed a race condition in removing mmap + file. + +Wed Oct 16 15:35:22 2002 Steve Huston + + * tests/SPIPE_Test.cpp: Fixed compile error. + +Wed Oct 16 14:02:27 2002 Yuanfang Zhang + + * ace/RB_Tree.cpp: + * ace/RB_Tree.h: + + forward and reverse partial tree traversal. + Changed the find_i method by adding a parameter "find_Exact". + +Wed Oct 16 12:18:03 2002 Stephen Torri + + * examples/C++v1/Makefile: + * examples/C++NPv1/Makefile.Iterative_Logging_Server: + * examples/C++NPv1/Makefile.Logging_Client: + * examples/C++NPv1/Makefile.Reactive_Logging_Server: + * examples/C++NPv1/Makefile.Reactive_Logging_Server_Ex: + * examples/C++NPv1/Makefile.RT_Thread_Per_Connection_Logging_Server: + * examples/C++NPv1/Makefile.Thread_Per_Connection_Logging_Server: + * examples/C++NPv1/Makefile.wProcess_Per_Connection_Logging_Server: + + Renamed from *.mak to Makefile.* to avoid looking like an + exported MSVC project NMAKE file. (Following Steve Huston's + change to examples/C++v2). + + Fixed Make error that make realclean was not in Makefile. + + * tests/Recursive_Condition_Test.cpp: + + Changed function call of signal() to broadcast() to awaken + multiple threads waiting on a shared condition variable. + +Oct 16 11:44:27 2002 Nanbor Wang + + * ace/Thread_Manager.cpp (check_state): Changed to return 0 if + the thread id is not managed by the Thread_Manager. + + * ace/Thread_Manager.h: Updated documentation for testcancel(), + testsuspend(), and testresume (). They all return false now if + the you try to test the status of a tid that is not managed by + the Thread_Manager. + + Thanks to Giovanni Zito for reporting it. + +Wed Oct 16 12:41:29 2002 Steve Huston + + * examples/Makefile: Add C++NPv1 and C++NPv2 to the DIRS list. + + * examples/C++NPv2/Makefile: Only build the SSL-using examples + (AC_CLD, AIO_CLD, TPCLS) is ssl=1 is set. + + * examples/C++NPv2/Makefile.AC_CLD: + * examples/C++NPv2/Makefile.AIO_CLD: + * examples/C++NPv2/Makefile.TPCLS: + Set up the SSL build params correctly and warn if ssl=1 not used. + +Wed Oct 16 12:08:21 2002 Steve Huston + + * examples/C++NPv2/AC_CLD.mak: + * examples/C++NPv2/AIO_CLD.mak + * examples/C++NPv2/CLD.mak: + * examples/C++NPv2/Configurable_Logging_Server.mak: + * examples/C++NPv2/display_logfile.mak: + * examples/C++NPv2/Reactor_Logging_Server.mak: + * examples/C++NPv2/Select_Reactor_Logging_Server.mak: + * examples/C++NPv2/SLDex.mak: + * examples/C++NPv2/SLD.mak: + * examples/C++NPv2/SR_Configurable_Logging_Server.mak: + * examples/C++NPv2/TPCLS.mak: + * examples/C++NPv2/TPLS.mak: + * examples/C++NPv2/TP_Reactor_Logging_Server.mak: + Renamed from *.mak to Makefile.* to avoid looking like an + exported MSVC project NMAKE file. + + * examples/C++NPv2/Makefile: Changed to process new Makefile names. + +Wed Oct 16 11:02:41 2002 Douglas C. Schmidt + + * ace/High_Res_Timer.cpp (get_cpuinfo): Removed the recalibration of + the scale factor every time the application is launched. Thanks + to Bo Balder for reporting this. + +Wed Oct 16 10:55:11 2002 Balachandran Natarajan + + * ace/config-linux-common.h: Added support for ACE_CC_NAME, + ACE_CC_MAJOR_VERSION and ACE_CC_MINOR_VERSION for linux. Thanks + to Jaroslaw Nozderko for + suggesting this. + +Wed Oct 16 10:55:44 2002 Balachandran Natarajan + + * ace/config-win32-msvc.h (ACE_HAS_ALLOCA): Enabled alloca support + for MSVC. Thanks to Pat McNertney for + providing the patch. + +Tue Oct 15 18:49:25 2002 Stephen Torri + + * tests/Recursive_Condition_Test.cpp: + + Added two tests. + Test 2: repeat of test 1 but with a 2 second delay + after main thread signals the waiting thread. (Works) + Test 3: repeat of test 1 but with 4 threads waiting + on the condition variable. (Broken - no threads + awaken). + +Tue Oct 15 17:27:34 2002 Krishnakumar B + + * ACEXML/docs/bugs.txt: + * ACEXML/docs/TODO.txt: + + Updated to reflect the current status. + +Tue Oct 15 17:23:43 2002 Krishnakumar B + + * tests/Service_Config_Test.UTF-16.conf.xml: New file added which + is used in Service_Config_Test when ACE_HAS_XML_SVC_CONF and + ACE_USES_WCHAR is enabled. + +Tue Oct 15 17:17:44 2002 Krishnakumar B + + * ACEXML/common/Encoding.cpp: + * ACEXML/common/Encoding.h: + + New files which handle the automatic detection of encoding in + XML files. + + * ACEXML/apps/svcconf/Makefile: + * ACEXML/common/CharStream.h: + * ACEXML/common/Exception.cpp: + * ACEXML/common/FileCharStream.cpp: + * ACEXML/common/FileCharStream.h: + * ACEXML/common/HttpCharStream.cpp: + * ACEXML/common/HttpCharStream.h: + * ACEXML/common/InputSource.cpp: + * ACEXML/common/Makefile: + * ACEXML/common/Mem_Map_Stream.cpp: + * ACEXML/common/Mem_Map_Stream.h: + * ACEXML/common/StrCharStream.cpp: + * ACEXML/common/StrCharStream.h: + * ACEXML/common/XML_Common.dsp: + * ACEXML/examples/SAXPrint/Makefile: + * ACEXML/parser/parser/Makefile: + * ACEXML/parser/parser/Parser.cpp: + + Handle the automatic detection of encoding in XML files. + +Tue Oct 15 17:15:41 2002 Steve Huston + + Fixes for Bugzilla #1319: + + * ace/OS.i (ctime_r): For the 2-param ctime_r platforms, restrict + buflen to at least 26, just as 3-param platforms do. If less than + 26, return 0 and errno = ERANGE. + + * ace/OS.cpp (ctime_r): The WinCE implementation of ctime_r already + had the 26-char minimum check, but didn't set errno to ERANGE. + Now it does. + + * tests/OS_Test.cpp (ctime_r_test): Make sure that ctime_r with length + less than 26 fails and doesn't scribble on the buffer. + +Tue Oct 15 11:43:27 2002 Balachandran Natarajan + + * ace/SPIPE_Connector.cpp (connect): Convert the first argument in + the ::WaitNamedPipe () call to char * always using the macro + defined. This shold fix compilation errors in WCHAR builds. + +Tue Oct 15 16:19:33 UTC 2002 Craig Rodrigues + + [Bug 1090] + * ace/config-freebsd-pthread.h: Add ACE_HAS_GETIFADDRS. This fixes + Bugzilla bug 1090. + +Tue Oct 15 10:47:20 2002 Balachandran Natarajan + + * ace/SPIPE_Connector.cpp: Fixed a unused variable warning. + +Tue Oct 15 06:56:18 2002 Patrick J. McNerthney + + * tests/SPIPE_Test.cpp: Added support for testing the new Windows + bytestream mode. + +Mon Oct 14 20:47:21 2002 Douglas C. Schmidt + + * ace/SPIPE_Acceptor.cpp (open): Changed "mode" to "pipe_mode", + which is the name of the parameter. Thanks to Don Hinton for + reporting this. + +Mon Oct 14 19:20:35 2002 Frank Hunleth + + * ACE-INSTALL.html: Added installation notes for the OpenBSD port. + + * ace/config-openbsd.h: + * ace/config-openbsd-pthread.h: + * include/makeinclude/platform_openbsd.GNU: + * include/makeinclude/platform_openbsd_pthread.GNU: Configuration + files for OpenBSD. + + * ace/ACE.cpp: Added OpenBSD-specific error code to ACE::out_of_handles + + * ace/OS.h: Added #define for OpenBSD-specific path to siginfo.h and + ACE_LACKS_CLEARERR guards around clearerr() for OpenBSD. + + * ace/OS.i: Added support for getifaddrs() with ACE_HAS_GETIFADDRS + and fix for segfault when calling dlsym with a null handle. Added + guards on clearerr using ACE_LACKS_CLEARERR. (All only affect + OpenBSD.) + + * ace/POSIX_Proactor.cpp: + * ace/POSIX_Proactor.h: Added SystemType family for OpenBSD. + + * ace/README: Added new ACE #defines to support OpenBSD. These include: + ACE_HAS_GETIFADDRS - for support of the getifaddrs() system call + ACE_HAS_DLSYM_SEGFAULT_ON_INVALID_HANDLE - add check to dlsym call + to protect against NULL. OpenBSD 3.1 needs this. + ACE_LACKS_CLEARERR - #define to remove clearerr definition due + to bogus syntax error on OpenBSD. + + * ace/Sock_Connect.cpp: Added code to get_ip_interfaces to use + getifaddrs() if it is supported. OpenBSD is the only platform to + use this currently. Under OpenBSD, the code to parse the return + values from the corresponding ioctl calls gets confused when IPv6 + interfaces are present. + + * tests/Malloc_Test.cpp: Added OpenBSD to the list of platforms that + can't handle the remap of fault part of the test. + + * tests/Reactor_Dispatch_Order_Test.cpp: Added code for OpenBSD to + clear the write mask after handle_output is called, since OpenBSD + calls handle_output more than once before the data is received + over the pipe. + +Mon Oct 14 18:21:40 2002 Patrick J. McNerthney + + * ace/OS.h: Added FILE_FLAG_WRITE_THROUGH defines for + non-supporting operating systems and added various PIPE_* + defines for non-supporting operating systems. + + * ace/SPIPE_Connector.{h,cpp}: Added support to enable the + selection of whether bytestream or message mode is used on + Windows. Also added support for both blocking and timeout + connections on Windows, only non-blocking connections where + support before. + + * ace/SPIPE_Acceptor.{h.cpp}: Added support to enable the + selection of whether bytestream or message mode is used on + Windows. + +Mon Oct 14 20:19:51 2002 Steve Huston + + * ChangeLog: Removed a large chunk of duplicated dates from Oct 11 + back to July. + + * ace/OS.{h i}: Removed the owning_thread_ member from + ACE_recursive_mutex_state on Windows. This isn't needed since the + OS mutex restores the owner properly - it was in to do a sanity + check ACE_ASSERT, but can't do that from ACE_OS. + + * ace/WFMO_Reactor.h: Expanded and clarified the class comments + to resolve Bugzilla #772. + +Mon Oct 14 17:23:43 2002 Balachandran Natarajan + + * ace/CDR_Base.cpp (consolidate): Reverted the optimization + performed in "Tue Mar 12 17:43:32 2002 Balachandran Natarajan + ". This optimizations created problems for + CORBA::Any implementation which assumes that the data is totally + contained within the Any. Using the optimization created problems + for Any's that are copied between different threads. Thanks to + Jian Chen for reporting this problem. + +Mon Oct 14 10:12:31 2002 Steve Huston + + Fix for Bugzilla # 1316: + + * ace/Synch.h: + * ace/OS.h: Moved the ACE_recursive_mutex_state from Synch.h + to OS.h. The recursive mutex methods need to handle this stuff + internally to properly synchronize releasing and reacquiring + the mutex around condition variable waits. + + * ace/OS.i: Added ACE_OS::recursive_mutex_cond_unlock() and + ACE_OS::recursive_mutex_cond_relock() methods to support + recursive mutex handling around waiting on a condition variable. + + * ace/Synch.cpp (ACE_Condition): + Removed the guards from the broadcast() and signal() methods. + Removed the ACE_recursive_mutex_state class methods - this + functionality is now in the ACE_OS space; see above. + Reimplemented the wait() method to make use of the new ACE_OS + methods (above), enabling proper reclaiming of the recursive + mutex after cond_wait, and avoiding deadlock. + +Mon Oct 14 00:12:48 2002 Krishnakumar B + + * ACEXML/docs/bugs.txt: Updated to match the current status of + ACEXML parser. + +Sun Oct 13 19:38:35 2002 Krishnakumar B + + * ace/Exception_Macros.h: + + Consolidated the checking of exceptions preprocessor hacking + into this file. + + * ACEXML/common/XML_Macros.h: + + Include the above file and get rid of redundant and broken + checking for exceptions. + + * ace/CORBA_macros.h: + + Moved over the stuff from Exception_Macros.h to where it was + originally. This should fix all the build breakage. Thanks to + Bala for pointing out the errors in the build. + +Sun Oct 13 18:50:53 2002 Douglas C. Schmidt + + * ace/SPIPE_Stream.h: Enhanced the documentation of ACE_SPIPE_Stream. + Thanks to Pat McNerthney for motivating + this. + +Sun Oct 13 15:57:04 2002 Balachandran Natarajan + + * ace/Asynch_IO.cpp: + * ace/Asynch_IO.h: Protected ACE_Asynch_Read_File::readv () and + ACE_Asynch_Write_File::writev () from being called when + ACE_HAS_WINNT4 == 0. + * ace/WIN32_Asynch_IO.cpp: + * ace/WIN32_Asynch_IO.h: Protected + ACE_WIN32_Asynch_Read_File::readv () and + ACE_WIN32_Asynch_Write_File::writev () from being called when + ACE_HAS_WINNT4 == 0. + + Thanks to Eric Frias for reporting the + problem and Alex Libman for suggesting the fix. + + * THANKS: Added Eric Frias to the hall of + fame. + +Sun Oct 13 15:54:59 2002 Krishnakumar B + + * ACEXML/apps/svcconf/Svcconf_Handler.cpp: Fixed a couple of + warnings related to the exception argument handling. + +Sun Oct 13 00:55:27 2002 Krishnakumar B + + * ACEXML/common/XML_Common.dsp: + + Added XML_Macros.h to the project file. + + * ACEXML/examples/SAXPrint/svc.conf.xml: + + Reverted a mistaken change used for testing. + + * ACEXML/apps/svcconf/Svcconf_Handler.cpp: + * ACEXML/common/SAXExceptions.cpp: + * ACEXML/parser/debug_validator/Debug_DTD_Manager.cpp: + + Added ACE_TEXT around strings so that WCHAR build is happy. + +Sat Oct 12 23:01:29 2002 Krishnakumar B + + * ACEXML/apps/svcconf/Svcconf.h (ACEXML_Svcconf_Parser): Removed + the unused member env_. + +Sat Oct 12 22:50:02 2002 Krishnakumar B + + * ACEXML/common/XML_Macros.h: + + New file which contains the macros needed to enable support for + Exceptions in ACEXML. + + * ACEXML/apps/svcconf/Makefile: + * ACEXML/common/Makefile: + * ACEXML/examples/SAXPrint/Makefile: + * ACEXML/parser/parser/Makefile: + * ACEXML/tests/Makefile: + + Regenerate dependencies. + + * ACEXML/common/Env.cpp: + * ACEXML/common/Env.h: + * ACEXML/common/Env.i: + * ACEXML/common/Exception.cpp: + * ACEXML/common/Exception.h: + * ACEXML/common/Exception.i: + + Enable support for Native Exceptions. + + * ACEXML/apps/svcconf/Svcconf.cpp: + * ACEXML/apps/svcconf/Svcconf.h: + * ACEXML/apps/svcconf/Svcconf_Handler.cpp: + * ACEXML/apps/svcconf/Svcconf_Handler.h: + * ACEXML/common/Attributes_Def_Builder.h: + * ACEXML/common/ContentHandler.h: + * ACEXML/common/DTDHandler.h: + * ACEXML/common/DTD_Manager.h: + * ACEXML/common/DefaultHandler.cpp: + * ACEXML/common/DefaultHandler.h: + * ACEXML/common/Element_Def_Builder.h: + * ACEXML/common/EntityResolver.h: + * ACEXML/common/ErrorHandler.h: + * ACEXML/common/HttpCharStream.cpp: + * ACEXML/common/SAXExceptions.cpp: + * ACEXML/common/SAXExceptions.h: + * ACEXML/common/SAXExceptions.i: + * ACEXML/common/Validator.h: + * ACEXML/common/XMLFilterImpl.cpp: + * ACEXML/common/XMLFilterImpl.h: + * ACEXML/common/XMLReader.h: + * ACEXML/examples/SAXPrint/Print_Handler.cpp: + * ACEXML/examples/SAXPrint/Print_Handler.h: + * ACEXML/examples/SAXPrint/SAXPrint_Handler.cpp: + * ACEXML/examples/SAXPrint/SAXPrint_Handler.h: + * ACEXML/examples/SAXPrint/main.cpp: + * ACEXML/examples/SAXPrint/svc.conf.xml: + * ACEXML/examples/svcconf/Svcconf_Handler.cpp: + * ACEXML/examples/svcconf/Svcconf_Handler.h: + * ACEXML/examples/svcconf/main.cpp: + * ACEXML/parser/debug_validator/Debug_Attributes_Builder.cpp: + * ACEXML/parser/debug_validator/Debug_Attributes_Builder.h: + * ACEXML/parser/debug_validator/Debug_DTD_Manager.cpp: + * ACEXML/parser/debug_validator/Debug_DTD_Manager.h: + * ACEXML/parser/debug_validator/Debug_Element_Builder.cpp: + * ACEXML/parser/debug_validator/Debug_Element_Builder.h: + + Switch over the files to support Native Exceptions. + + * ACEXML/parser/parser/Parser.cpp: + * ACEXML/parser/parser/Parser.h: + + Use the obstack unwind to unwind the stack and reuse memory. + Currently not done throughout the parser. That will come later. + + * ace/Makefile.ace: + + Added Codecs to ACE_COMPONENTS when building FOR_TAO. Thanks to + Don Hinton for suggesting this. + + * include/makeinclude/rules.local.GNU: + + Clean up the old symlinks under $ACE_ROOT/ace when building a + new version of the libraries. + + * tests/Makefile: + + Cleanup the Codecs_Test when $ACE_ROOT/ace has been realcleaned + previously. + +Fri Oct 11 12:44:58 UTC 2002 Craig Rodrigues + + * RTJava/*: Removed. Angelo Corsaro + keeps RTJperf related files in another CVS repository. + + * ace/config-freebsd-pthread.h: Improved check of + _POSIX_REALTIME_SIGNALS preprocessor constant. + +Thu Oct 10 16:02:20 2002 Ossama Othman + + * ACE version 5.2.5 released. + +Thu Oct 10 13:56:35 2002 Ossama Othman + + * bin/make_release (check_workspace): + + Ignore platform_macros.GNU and config.h files. They are + needed when cutting the beta/release. This isn't a problem + since the ACE/TAO kits are created from a "cvs export"ed + workspace that doesn't include those files. + +Thu Oct 10 15:11:07 2002 Balachandran Natarajan + + * bin/make_release: A pattern matching issue. The cvs server now + gives a message starting with "cvs server:.." instead of "cvs + checkout:..". This created problems for Ossama when he was + trying to cut the beta. + +Wed Oct 9 23:43:51 2002 Steve Huston + + * ace/WIN32_Asynch_IO.cpp (ACE_Asynch_Read_Stream::readv, + ACE_Asynch_Write_Stream::writev, ACE_Asynch_Read_Dgram::recv, + ACE_Asynch_Write_Dgram::send): Don't double-increment iovcnt + while checking for the need for multiple iov per message block. + Fixes bug introduced in: + Fri Oct 4 20:22:41 2002 Steve Huston + +Wed Oct 9 23:08:19 2002 Steve Huston + + * include/makeinclude/rules.lib.GNU: For the funky AIX shr.o/lib*.a + machination, declare shr.o as .INTERMEDIATE to avoid rebuilding it + all the time for nothing. Thanks to Craig L. Ching for motivating + this. + +Wed Oct 09 12:19:40 2002 Nanbor Wang + + * bin/PerlACE/Process_Win32.pm: Added hack to purify a process. + This will allow us to purify all the examples, tests much + easier. It is, however, tightly coupled to Purify 6.0. The + script automaticaly switch to purifying the process if the + ACE_RUN_PURIFY_CMD environment variable is defined. See the + comments in this file for more details. + +Tue Oct 8 21:06:23 2002 Steve Huston + + * ace/config-sunos5.6.h: Undef ACE_HAS_TEMPLATE_TYPEDEFS for the + Forte 7 compiler (C++ 5.4). It should work, but Malloc_T doesn't + compile correctly with it enabled. Thanks to Serge Kolgan + for this fix. + + * ace/config-sunos5.9.h: New config.h file for Solaris 9. Right now, + it just includes config-sunos5.8.h, but Solaris 9 has some new things + to play with as time goes on. + +Tue Oct 8 09:22:41 2002 Steve Huston + + * ace/SOCK_Dgram_Bcast.cpp (send): Use next_ to find next + ACE_Bcast_Node in if_list_ rather than incrementing pointer. + Thanks to for this fix. + +Mon Oct 7 17:29:14 2002 Ossama Othman + + * tests/Proactor_Scatter_Gather_Test.cpp (initiate_read_file): + + Cast one of the operands in a subtraction operation to a size_t + to address a problem exhibited by Borland C++ where the ACE_MIN + template expects two parameters of the same type, but was + getting two parameter of different types. This problem occurred + on platforms where "unsigned int" and "unsigned long" are + different types. + +Mon Oct 07 15:21:44 2002 Nanbor Wang + + * ACEXML/apps/svcconf/XML_Svc_Conf_Parser.dsp: + * ACEXML/common/XML_Common.dsp: + * ACEXML/parser/debug_validator/Debug_Validator.dsp: + * ACEXML/parser/parser/Parser.dsp: + * ACEXML/tests/HttpCharStream_Test.dsp: + * ACEXML/tests/NamespaceSupport_Test.dsp: + * ACEXML/tests/Transcoder_Test.dsp: + * apps/JAWS2/server.dsp: + * examples/Export/test.dsp: + * examples/IPC_SAP/FILE_SAP/client.dsp: + * examples/Logger/client/client.dsp: + * examples/Logger/simple-server/server_loggerd.dsp: + * examples/QOS/Simple/receiver.dsp: + * examples/QOS/Simple/sender.dsp: + * examples/Reactor/Multicast/client.dsp: + * examples/Reactor/Multicast/server.dsp: + * examples/Reactor/Proactor/test_udp_proactor.dsp: + * examples/Synch/proc_sema.dsp: + * tests/DLL_Test_Impl.dsp: + * tests/Framework_Component_DLL.dsp: Disabled the generation + of precompiled headers. They were taking up too much disk space + on the nightly build machines. Thanks to Ossama for noticing + this. + +Sun Oct 6 09:03:28 2002 Ossama Othman + + * ace/UPIPE_Stream.cpp (send): + + Silenced a signed/unsigned conversion warning using a + static_cast<> until a better solution presents itself. + +Sat Oct 5 17:04:38 2002 Steve Huston + + * ace/Memory_Pool.cpp (ACE_Pagefile_Memory_Pool::acquire): Remove + casts on comparisons, allowing size_t values to compare directly. + + * apps/JAWS/server/IO.cpp (JAWS_Synch_IO::transmit_file): Remove + cast from send_n() return value to avoid signed/unsigned compare. + +Sat Oct 5 12:30:49 2002 Steve Huston + + * ace/Service_Manager.cpp (list_services): Remove extra right paren. + + * tests/Proactor_Timer_Test.cpp: Fixed signed/unsigned mismatch. + +Fri Oct 04 22:24:23 2002 Krishnakumar B + + * ACEXML/common/URL_Addr.cpp (string_to_addr): Added a new wrapper + which matches the signature in ACE_INET_Addr, and delegates the + work to the ACEXML_Char function to work around Borland BCB + warning about hidden virtual function. + +Fri Oct 4 21:32:51 2002 Steve Huston + + * ace/Service_Manager.cpp (list_services): Correct compiler + warning about sign/unsigned comparison. Don't bother for checking + transfer count != requested, since send_n always reports + an error (0 or -1) if there was a fail before the whole 'n' sent. + +Fri Oct 4 20:22:41 2002 Steve Huston + + * ace/ace_dll64.mak: Removed the /wd4267 to re-enable the + conversion size_t to int warning. + Added Atomic_Op.obj to the files to compile directly. + + * ace/ACE.cpp (recv, send): Extract int, not size_t, from implicit + char */int pairs. + (send_n, recv_n with ACE_Message_Blocks): Message block length + is a size_t but iov_len is u_long, so make as many iovs as needed + to fit the entire requested length. + + * ace/Asynch_Acceptor.cpp: Added casts to fix size_t->DWORD warnings. + + * ace/Asynch_IO.cpp (transmit_buffers): Cast lengths to DWORD for + Win64. + + * ace/Configuration.{h cpp} (set_binary_value, get_binary_value): + Change length arg from u_int to size_t. + + * ace/Configuration_Import_Export.cpp: Align use of u_int, size_t. + + * ace/Containers_T.cpp (ACE_Fixed_Set::insert): Use ssize_t, not int, + to track free slot since max size is a size_t. + + * ace/FIFO_Recv_Msg.i (recv): + * ace/FIFO_Send_Msg.i (send): Squeeze size_t max_len down to an int + because this gets run through the ACE_Str_Buf variant of recv/send. + If this restriction is too much, the code will need to be + refactored. + + * ace/FILE_Addr.cpp (set): Cast size_t back to int for base_set(). + + * ace/FILE_IO.cpp (recv): Count iov tuples as an int to match what's + expected at the ACE_OS::readv level. + + * ace/Filecache.h (ACE_File_Object): Change size_ from size_t to off_t. + It's a better match for what it's used for (checking against + stat.st_size, which is an off_t also). + + * ace/Functor_T.i (ACE_Pointer_Hash): Add #pragmas for Win64 to + shut up the compiler warnings about casting a pointer to u_long. + + * ace/INET_Addr.{h i} (ip_addr_size): Return an int, not size_t. This + value is just passed on to other methods (like host db functions) + that are expecting an int. Also, being the size of a IP addressing + structure, all the values are well within range of an int. + + * ace/Lib_Find.cpp (ldfind, get_temp_dir): Cast path length value to + DWORD for calls to SearchPath and GetTempPath on Windows. + + * ace/Local_Name_Space.{h cpp} (ACE_NS_String::strstr): Cast return + value from size_t to int. (hash): Change return type from size_t + to u_long to match what's expected from ACE_Hash<>, which this is + an adapter for. + + * ace/Log_Msg_NT_Event_Log.cpp (open): Cast msg_file length to + DWORD for use in Windows API. Use size_t for reg key string length + since it need not be passed to a Windows API. + + * ace/Log_Record.cpp (round_up): Do all the rounding math in size_t + terms, since all factors are size_t, but cast it back to ACE_UINT32 + since the ACE_Log_Record length_ field is ACE_UINT32 and should + stay that way due to the need to send it over the network as a + known-length field. + (print): Cast verbose_msg string length to int so it can be compared + to fprintf return value. + + * ace/MEM_Acceptor.cpp (accept): Cast string length to ACE_UINT16. + + * ace/MEM_SAP.h: + * ace/MEM_IO.{h cpp} (ACE_Reactive_MEM_IO, ACE_MT_MEM_IO): Changed + return type of send_buf and recv_buf from int to ssize_t. This + is consistent with other ACE sock-type send methods, and matches + the range of sizes allowed to request sending of and the return + type expected by ACE_MEM_IO::send() and recv(). + + * ace/Mem_Map.i (advise): Get a size_t length as expected by + ACE_OS::madvise(). + + * ace/Mem_Map.cpp (map_it): Use off_t instead of size_t to calculate + null_byte_positition when extending the file. This is the type + that ACE_OS::pwrite() expects. + + * ace/Memory_Pool.h (ACE_Pagefile_Memory_Pool::Shared_Control_Block): + Changed mapped_size_ from int to size_t to match the sizes it can + take (max_size_)and what's expected in the Win32/64 API calls. + Changed free_offset_ from int to ptrdiff_t to represent the full + range of mapped address range. Changed free_size_ from int to + size_t to match max_size_ and the range of mappable sizes. + Changed 'append' arg to map() from int to size_t, also to represent + full range of mappable size. + + * ace/Memory_Pool.i (round_up): Cast nbytes to off_t for call to + ACE::round_to_page_size(). + + * ace/Memory_Pool.cpp: Adjust usage of size_t/off_t, usually with + casts where needed. + (map): For Win64, allow full 64-bit range of file mapping size. + + * ace/Message_Queue.{h i cpp} (ACE_Message_Queue_NT): Changed + max_threads arg (ctor and open()) and max_cthrs_/cur_thrs_ from + size_t to DWORD, as expected by the underlying API (this class + is not portable, or compilable outside of ACE_WIN32). + + * ace/Msg_WFMO_Reactor.{h cpp} (poll_remaining_handles()): Changed + argument from size_t to DWORD - matches similar changes to + WFMO_Reactor, below. + + * ace/Name_Request_Reply.cpp (ctor): Cast length to ACE_UINT32. + + * ace/Naming_Context.cpp (info): Cast info string length to int. + + * ace/OS.{h i cpp}: (sema_post): Changed count from size_t to u_int, + to match both the value range for initializing (sema_init) and + the underlying OS calls on all platforms. + (getipnodebyaddr): For IPv4 case, cast len to int. + (recvfrom): size_t->int casting for Windows. + (read, write, pread, pwrite): Reduce byte count to DWORD range + for Windows. + (getcwd): Windows offers an int len for getcwd(), as opposed to + size_t everywhere else... so special-case the Windows need to + cast the length down. + (thr_create): Cast stack_size to u_int for beginthreadex(). + Other miscellaneous int/size_t casts to get Win64 to build clean. + (iovec): Changed iov_len field from size_t to u_long to match + WSABUF, as comment says to. + + * ace/OS_String.cpp (strtok_r_emulation): Change string lengths from + int to size_t, matching that returned from strlen(). + + * ace/Process.{h cpp} (setenv_i): Change len arg from int to size_t. + Matches string lengths in general, and the expectations of both + callers and callees with this information. + Changed environment_buf_index_ and environment_buf_len_ from int + to size_t as well, matching available range. + + * ace/Process_Manager.cpp: size_t to DWORD casting for current_count_. + + * ace/Registry.cpp (make_name): Use ssize_t instead of int for string + positions - matches interface for ACE_TString, which this method + accepts and uses. + + * ace/Remote_Name_Space.cpp (bind, rebind, resolve, list_names, + list_values, list_types, list_name_entries, list_value_entries, + list_type_entries): Cast length values to ACE_UINT32 as + ACE_Name_Request expects. + + * ace/Select_Reactor_Base.cpp (ACE_Select_Reactor_Handler_Repository): + In open(), cast size to int for call to ACE::set_handle_limit(). + + * ace/Service_Config.cpp (ctor): Cast size value to int for passing to + ACE_Service_Repository::instance(). The ACE_Service_Repository + size should probably be changed to size_t for consistency. + + * ace/Service_Manager.cpp (info): Cast return string length to int. + + * ace/Service_Types.cpp (info): Cast return string length to int. + + * ace/Shared_Memory_MM.i (get_segment_size): + * ace/Shared_Memory_SV.i (get_segment_size): Cast shared_memory_ size + to int. Legit since the open() call's size is an int; otherwise + this should be changed to return a size_t. + + * ace/SOCK_Connector.cpp (shared_connect_start): Align use of + int/size_t. + + * ace/SOCK_Dgram.{h cpp} (recv, send): + * ace/SOCK_Dgram_Bcast.{h cpp} (recv, send): + * ace/SOCK_Sgram_Mcast.{h i} (send, recv): Change iovcnt from + size_t to int to match the args used by other iovcnt-accepting + methods in ACE. + + * ace/SOCK_Dgram_Bcast.i (send): Align use of int/size_t. + + * ace/SOCK_IO.cpp (recv (size_t, ...), send(size_t, ...)): The + comments say the pairs are char*, int, but the code extracted + ssize_t values instead of int. Changed to extract ints as the + comment says. The values are put in iovecs which accept + unsigned long, not ssize_t. + + * ace/SPIPE_Addr.cpp (set): Align use of int/size_t. + + * ace/SPIPE_Stream.cpp (send, recv): Align use of int/size_t. + + * ace/SString.i (ACE_NS_WString): Add missing arg for ACE_WString + ctor initialization. + (ACE_SString::rfind): Cast string len to int for searching... note + this limits the string to 'int' range, though the other size + arguments/parameters are size_t. There are crocodiles lurking + here... hopefully this class is on its way out. + + * ace/SV_Shared_Memory.{h i} (get_segment_size, round_up): Changed + return type from int to size_t, matching it's argument type. + Also changed class's size_ member from int to size_t, matching + the arg from which it's set. + + * ace/Synch.{h i} (ACE_Semaphore::release): Change release count from + size_t to u_int - also see corresponding change to OS.h, above. + + * ace/Thread.{h cpp} (spawn_n): Change return value from int to size_t, + matching the range available via the 'n' argument. + + * ace/Thread_Manager.{h i cpp}: + (count_threads): Change return value from int to size_t. Matches + the requestable number of threads in spawn_n, as well as + underlying container size return. + (find_task): Change slot argument from int to size_t... matches + range of available slots. The default changed from -1 to 0, but + should make no difference since first check is for 0 >= . + (thread_all_list, task_all_list, task_list, thread_list, + hthread_list, thread_grp_list, hthread_grp_list): Changed + return value from int to ssize_t, to match argument. + + * ace/Timer_Hash_T.{h cpp}: This timer queue generates timer IDs + by casting a pointer to a dynamically-allocated structure to + a long. This, of course, is invalid on Win64. On Win64, the ID + is obtained by masking off the lower 32 bits of the pointer, + and saving the upper 32 bits. This adds an assumption that all + the Hash_Tokens allocated will have the same upper 32 bits in + the pointer value. Note that the original pointer value is used + as the ACT value in the timer scheduled within this class. The + timer ID must only be reconverted to cancel a timer by ID, or + to explicitly reschedule it. Expiration and cancel-by-handler + are all handled by reconverting the ACT to the dynamically-allocated + memory area (Hash_Token). + Also changed hash starter from time.usec() to time.sec(). usec() + isn't usually anything of value. + + * ace/Timer_Wheel_T.cpp: Added #pragma to disable compile warnings. + We know of the issue and deliberately used the fields this way. + + * ace/UPIPE_Stream.{h cpp} (send, recv): Changed return value from + int to ssize_t, consistent with other IPC streams in ACE. + + * ace/WFMO_Reactor.{h cpp} (ACE_WFMO_Reactor_Handler_Repository): + Changed max_handlep1_ and max_handlep1 () from size_t to DWORD. + Matches what they're used for (input to WaitForMultipleObjects). + (ACE_WFMO_Reactor): Changed wait_for_multiple_events() to return + DWORD, not int - matches what WaitForMultipleObjects returns. + Changed wait_status and slot args to dispatch(), safe_dispatch(), + dispatch_handles (), dispatch_handler (), simple_dispatch_handler (), + complex_dispatch_handler (), and poll_remaining_handles () to also + be DWORD, not int, as they're working directly (or close to it) + with the same WFMO return value. + + * ace/WIN32_Asynch_IO.cpp (ACE_WIN32_Asynch_Read_Stream::readv, + ACE_WIN32_Write_Stream::writev, ACE_WIN32_Asynch_Read_Dgram::recv, + ACE_WIN32_Asynch_Write_Dgram::send): + Make multiple iovecs if needed to transfer all data requested. + (ACE_WIN32_Asynch_Read_Stream::shared_read, + ACE_WIN32_Asynch_Write_Stream::shared_write, + ACE_WIN32_Asynch_Read_File::readv, + ACE_WIN32_Asynch_Write_File::writev, + ACE_WIN32_Asynch_Accept::accept, + ACE_WIN32_Asynch_Transmit_File::transmit_file): Limit requested + bytes to MAXDWORD. Return -1, ERANGE if over. + + * ace/WIN32_Proactor.{h cpp}: Changed number_of_threads_ member from + size_t to DWORD, matching the API calls it's passed to. + (post_completion): Cast transfer count from size_t back to DWORD + for posting. The cast is ok since the original requested transfer + counts (in WIN32_Asynch_IO) were limited to DWORD range. + + * tests/Config_Test.cpp: + * tests/Proactor_Scatter_Gather_Test.cpp: + * tests/Proactor_Test.cpp: + * tests/Proactor_Timer_Test.cpp: + * tests/Reactor_Timer_Test.cpp: + * tests/Semaphore_Test.cpp: + * tests/TP_Reactor_Test.cpp: size_t/int fixes. + +Fri Oct 4 18:39:19 2002 Steve Huston + + * tests/Recursive_Condition_Test.cpp: Added a deactivate/wait + on the timer queue to make sure the queue shuts down. This + reveals a bug in the recursive condition... it's stuck. + Also added a much simpler wait/signal test that shows the issue + without the additional stuff to trudge through while looking for + the problem. Thanks to Philippe Haussy + for reporting this and sending a nice, concise test case. + + * THANKS: Added Philippe Haussy to the Hall of Fame. + +Thu Oct 3 17:29:36 2002 Douglas C. Schmidt + + * ace/OS_Dirent.cpp (readdir_emulation): Don't do a FindNextFile() + right after FindFirstFile() to avoid overwriting the existing + data! Thanks to Dmitry Botcharnikov for + reporting this. + +Wed Oct 2 20:44:19 2002 Steve Huston + + * tests/Proactor_Scatter_Gather_Test.cpp: Added some more diagnostic + info and removed ACE_ASSERT on file not compared correctly - just + note the error and return. When about to writev a chain of blocks, + update the odd/even chains before writing in case the write fails; + fixes a crash on NT4... test still fails, but doesn't crash. + +Wed Oct 2 10:50:49 2002 Ossama Othman + + * ace/Basic_Types.h: + * ace/Basic_Types.cpp: + + Do not rely on the u_int and u_long typedefs. They are not + always defined in system headers. Addresses a compile-time + issue when _XOPEN_SOURCE is explicitly set to 600 on Glibc + platforms, such as Linux. + + * ace/OS.h: + + Explicitly define the u_{char,short,int,long} typedefs on Glibc + platforms when _BSD_SOURCE is not defined. Addresses a + compile-time issue when _BSD_SOURCE is not defined. + + * ace/config-linux.h: + + If ACE_HAS_PTHREADS_UNIX98_EXT is not defined, do not define + ACE_LACKS_RWLOCK_T. Addresses a compile-time issue when + _XOPEN_SOURCE is not set to a value >= 600. + + * ace/config-linux-common.h: + + Reverted change that explicitly defined _XOPEN_SOURCE to 600. + Explicitly defining _XOPEN_SOURCE to 600 causes many + compile-time errors and warnings to occur. + + Moved the check for (_XOPEN_SOURCE >= 600) after the + include. That header may define _XOPEN_SOURCE when + other macros, such as _GNU_SOURCE, are defined. + +Wed Oct 2 01:08:51 2002 Krishnakumar B + + * ace/SString.cpp (ACE_NS_WString): Fix the silly off-by-one error + causing heap corruption and core dumps in $ACE_ROOT/Naming_Test. + Thanks to Vladislav for reporting the + problem. + +Tue Oct 1 20:46:35 2002 Christopher Kohlhoff + + * ace/Atomic_Op.cpp: + Added explicit instantiations for ACE_Atomic_Op + and ACE_Atomic_Op_Ex. Programs using ACE should + no longer explicitly instantiate these classes. This change eliminates + the complexity of having to test for the ACE_HAS_BUILTIN_ATOMIC_OP + define when doing explicit instantiations. + + * tests/Atomic_Op_Test.cpp: + * tests/Notify_Performance_Test.cpp: + Removed ACE_Atomic_Op explicit instantiations that are now made in the + ACE library itself. + +Tue Oct 1 19:49:36 2002 Krishnakumar B + + * ace/Exception_Macros.h: + + Fixed some documentation for using the Exception macros. + + * ace/OS.i: + * ace/config-aix-4.x.h: + * ace/config-hpux-11.00.h: + * ace/config-linux-common.h: + * ace/config-linux.h: + + Enable support for using native rwlocks on Linux. + +Tue Oct 1 05:06:18 2002 Balachandran Natarajan + + * ace/WIN32_Asynch_IO.cpp: Minor cosmetic changes. + +Mon Sep 30 12:21:32 2002 Ossama Othman + + From Christophe Juniet + * ace/Sock_Connect.cpp (get_bcast_addr, get_ip_interfaces) + (count_interfaces): + + The ifr_addr.sa_len field was not taken into account when + incrementing the ifreq pointer on FreeBSD. Addresses network + interface enumeration problems in FreeBSD builds. + +Mon Sep 30 09:33:42 2002 Christopher Kohlhoff + + * bin/MakeProjectCreator/templates/bor.mpd: + * include/makeinclude/build_dll.bor: + * include/makeinclude/build_exe.bor: + * include/makeinclude/build_lib.bor: + * include/makeinclude/clean.bor: + * include/makeinclude/outputdir.bor: + Add support for the 'install', 'dllout' and 'libpaths' + MakeProjectCreator settings in generated Borland makefiles. + +Mon Sep 30 13:25:12 2002 Johnny Willemsen + + * include/makeinclude/platform_linux_borland.GNU: + Now it is possible to create shared libraries, but no executables + yet with Kylix3. + +Mon Sep 30 11:33:12 2002 Johnny Willemsen + + * include/makeinclude/platform_linux_borland.GNU: + Extended Kylix3 GNU file. + +Mon Sep 30 11:13:33 2002 Johnny Willemsen + + * ace/config-borland-common.h: + * ace/config-win32-common.h: + Moved the dll export stuff for the Borland compiler from the win32 + file to the borland file because the Kylix compiler also supports + the dll export stuff for shared objects. + +Mon Sep 30 10:19:33 UTC 2002 Johnny Willemsen + + * include/makeinclude/rules.bin.GNU: + Added special part for Kylix. The Kylix linker expects that the + object files and the name of the executable are separated using + a comma. + +Sun Sep 29 08:19:09 2002 Nanbor Wang + + * ACEXML/examples/SAXPrint/Makefile: Removed inclusion of + rules.lib.GNU to allow mingw compilation to proceed. Thanks to + Vince Mounts for reporting this. + + * ace/SString.h: Moved the ACE_INLINE before ACE_Export in + declaration of operator+ to resolved a mingw warning. Thanks to + Vince Mounts for reporting this. + +Fri Sep 27 12:49:33 2002 Johnny Willemsen + + * include/makeinclude/rules.lib.GNU: + Added special part for Kylix + +Thu Sep 26 21:52:05 2002 Balachandran Natarajan + + * THANKS: Added Erich Hochmuth" to + the hall of fame. + +Thu Sep 26 13:48:26 2002 Balachandran Natarajan + + * ace/TP_Reactor.cpp (remove_handler): Make a check for the return + value from the remove_handler_i () call before calling + handle_close (). Thanks to Eric Malenfant + for suggesting this. + + Eric mentions that doesnt show up the BUG 1020 problem. But + local testing here doesnt tell so. I still see some core dumps + with a test, albeit slowly! The patch cannot do any harm and + hence this is checked in. + +Thu Sep 26 07:16:56 2002 Douglas C. Schmidt + + * ace/Local_Name_Space.h (ACE_NS_String): Removed the comment + about ACE_NS_String not having a destructor since this seems to + have been overtaken by events. Thanks to Vladislav Zverev + for reporting this inconsistency. + +Thu Sep 26 09:18:55 UTC 2002 Johnny Willemsen + + * ace/Logging_Strategy.h: + Improved doxygen documentation. + +Thu Sep 26 05:42:33 UTC 2002 Johnny Willemsen + + * include/makeinclude/platform_gnuwin32_common.GNU: + Since mingw can now handle exceptions across dll boundries + removed that restriction. Thanks for Vince Mounts + for reporting this. + +Wed Sep 25 17:58:43 UTC 2002 Johnny Willemsen + + * ace/Basic_Stats.h: + * ace/Connector.h: + * ace/INET_Addr.h: + * ace/OS.h: + * ace/OS.i: + * ace/Service_Config.h: + * ace/Stats.h: + * ace/Timer_Queue_T.cpp: + * ace/TLI_Connector.cpp: + * ace/XTI_ATM_Mcast.i: + * ace/RMCast/RMCast_Reliable_Factory.h: + Small fixes in method argument names, types, comments to fix doxygen + warnings and improve the generated documentation. + +Wed Sep 25 08:44:13 2002 Ossama Othman + + * tests/Notify_Performance_Test.cpp: + + Do not explicitly instantiate an ACE_Atomic_Op template if ACE_HAS_BUILTIN_ATOMIC_OP is defined. + Defining it causes template specialization with the same + parameters to be declared. Fixes a compile-time problem in + explicit template instantiation builds. + +Wed Sep 25 14:49:12 UTC 2002 Johnny Willemsen + + * bin/fuzz.pl: + Extended the types of files that are tested in the doxygen + @file with the files_idl. Some of the idl files are parsed to + generate doxygen documentation and when then a @file tag + exists the filename must be correct. + +Tue Sep 24 20:17:50 UTC 2002 Don Hinton + + * tests/Process_Manager_Test.cpp: Removed the ACE_HAS_THREADS + requirement and the unneeded call to + ACE_Reactor::instance ()->owner () so that it would run cleanly + on single threaded builds. Thanks to Steve Huston for this + suggestion. + + * tests/run_test.lst: Added !STATIC to Framework_Component_Test since + it must load a shared library as part of the test. + +Tue Sep 24 16:07:21 2002 Steve Huston + + * examples/C++NPv1/Logging_Client.cpp: + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: + * examples/C++NPv2/Server_Shutdown.cpp: + * examples/C++NPv2/TP_Reactor_Logging_Server.cpp: + For Windows builds without ACE_HAS_STANDARD_CPP_LIBRARY, use + gets() and a char[] instead of the standard string and getline + functions. We don't want to be going this way for ACE in general, + but this fixes the legacy-mode builds. + +Tue Sep 24 06:30:31 UTC 2002 Johnny Willemsen + + * ace/ACE.h: + * ace/Acceptor.h: + * ace/Activation_Queue.h: + * ace/Asynch_Acceptor.h: + * ace/Asynch_Connector.h: + * ace/Arg_Shifter.h: + * ace/Get_Opt.h: + * ace/Local_Tokens.h: + * ace/Method_Request.h: + * ace/Thread_Manager.h: + * ace/WIN32_Asynch_IO.h: + * ace/INET_Addr.h: + Corrected doxygen tags. + + * ace/CDR_Stream.cpp (write_string): + * ace/Map_T.i (find, unbind): + * ace/Timer_Hash_T.cpp: + Made arguments in method definition and implementation the + same. + + * ace/Future.h: + Improved doxygen documentation. + + * ace/POSIX_CB_Proactor.i: + Added same ifdef as in the header file around the code in this + file, so that doxygen doesn't parse it. + +Mon Sep 23 13:43:11 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Fixed a bug with the per-project workspaces. + +Mon Sep 23 13:00:13 2002 Douglas C. Schmidt + + * ace/Log_Msg_NT_Event_Log.{h,cpp}: Made the #ifdefs consistent + in both the *.h and *.cpp files. Thanks to Johnny Willemsen for + reporting this. + +Mon Sep 23 13:14:28 2002 Steve Huston + + * ace/Task.h (wait()): + * ace/Thread_Manager.h (wait_task()): Improved documentation, also + clarifying that the waited-for threads have been joined upon return. + +Mon Sep 23 12:05:38 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/GNUWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + For GNU, NMake and Borland projects, create a workspace per + project file. + + * bin/MakeProjectCreator/modules/BorlandProjectCreator.pm: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/GHSWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Remove trailing whitespace. + +Sun Sep 22 08:49:41 2002 Douglas C. Schmidt + + * ace/Svc_Handler.cpp (flush_i): Don't flush the queued messages + if the connection fails. Thanks to Andrew Finnell + for this fix. + +Sat Sep 21 23:05:56 2002 Balachandran Natarajan + + * bin/subst_env.pl: Improved conversion to different coding + styles. Thanks to Oliver Kellog for suggesting this. + +Fri Sep 20 13:52:23 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/NMakeProjectCreator.pm: + + Fixed a problem with implicit idl dependencies. + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Added the ability to override or modify idlflags on a per file + group basis. + +Thu Sep 19 22:13:13 2002 Krishnakumar B + + * ACEXML/common/HttpCharStream.cpp: Added license for the FSM in + HttpCharStream.cpp. It is a shortened BSD license which is + compatible with ACE/TAO licensing. + +Wed Sep 18 12:26:22 2002 Douglas C. Schmidt + + * examples/Misc/test_trace.cpp: The call to activate() was + being invoked with the parameters in the wrong order. Thanks to + Jeff W for reporting this. + +Tue Sep 17 17:26:40 2002 Ossama Othman + + * ace/Basic_Types.cpp: + + Cosmetic changes to clarify some preprocessor blocks. + + * ace/CDR_Base.h: + + Corrected placement of '#' character in preprocessor + directives. It belongs in the first column, not arbitrary + ones. + +Tue Sep 17 01:35:54 UTC 2002 Don Hinton + + * ace/OS.h: Remove redundant MAXPATHLEN definition when + building VxWorks. Thanks to Rob Andzik + for pointing this out. + +Mon Sep 16 17:36:33 UTC 2002 Johnny Willemsen + + * ace/Hash_Cache_Map_Manager_T.cpp: + Use typedefs from header file. + + * ace/Process.i (setreugid): + Made method implementation same as definition + +Mon Sep 16 15:26:56 UTC 2002 Johnny Willemsen + + * ace/config-doxygen.h: + Added define ACE_HAS_TEMPLATE_TYPEDEFS to generate + ACE_Event_Handler_T documentation. + +Mon Sep 16 07:35:12 UTC 2002 Johnny Willemsen + + * ace/config-doxygen.h: + Added define ACE_HAS_EVENT_POLL to generate Dev_Poll reactor + documentation + + * ace/Acceptor.h: + * ace/Containers_T.{h,cpp}: + * ace/Dev_Poll_Reactor.h: + * ace/Sample_History.h: + * ace/Service_Config.h: + Improved doxygen documentation. + +Sat Sep 14 10:34:34 2002 Douglas C. Schmidt + + * ace/config-freebsd-pthread.h: Added + #undef ACE_LACKS_UCONTEXT_H if we're compiling for FreeBSD + version > 4. Thanks to Christophe Juniet + for reporting this. + +Fri Sep 13 08:37:09 2002 Ossama Othman + + * ace/Time_Value.h: + * ace/Time_Value.inl: + + Removed copy constructor. The default compiler-generated copy + constructor will do fine since ACE_Time_Value is a POD class. + This may also avoid potential confusion due to a missing + explicit assignment operator. The compiler-generated assignment + operator will suffice in this case, too. + + From Gonzalo Diethelm + * bin/.cvsignore: + * tests/.cvsignore: + * tests/log/.cvsignore: + + Files to silence annoying CVS messages regarding generated files + it doesn't know about. + +Fri Sep 13 08:57:03 2002 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Added the ability to modify template and project variable + assignments from the command line. Also added rules to process + idl files and place the output in the directory relative to the + specified idl file. + + Modified to not add duplicates to file lists. + +Thu Sep 12 17:18:43 2002 Douglas C. Schmidt + + * ace/Synch.{h,cpp}: Only define the recursive condition support if + we're running on Win32. Hopefully, this will be generalized for + VxWorks at some point. Thanks to Rob Andzik + for reporting this. + +Thu Sep 12 19:29:41 2002 Steve Huston + + * ace/Atomic_Op_T.i (dump): Don't try to return a value from a + 'void' method. + +Thu Sep 12 17:38:10 2002 Nanbor Wang + + * ace/Malloc_T.h: + * ace/Malloc_T.i (release): Added an extra argument (with default + value) to release so that we could decrease the refcount and + release the backing store if needed atomically (while holding the + lock.) This was causing a race condition when removing mmap + files used by MEM_Stream's. + + * ace/Memory_Pool.h: + * ace/Memory_Pool.i: + * ace/Memory_Pool.cpp: Changed the release method to take an extra + argument so that we can control whether we want to perform + cleanup on backing store or not. + + * ace/MEM_SAP.cpp (close_shm_malloc): Changed to use the extended + release method to remove the shared_memory. + + * ace/MEM_IO.cpp: When sending/receiving data reactively, make + sure we don't even try if the socket is not valid. + +Thu Sep 12 08:39:46 2002 Douglas C. Schmidt + + * ace/Synch.h (class ACE_recursive_mutex_state): Changed "HANDLE" to + "ACE_HANDLE" to avoid problems with VxWorks. Thanks to Rob + Andzik and Don Hinton + for reporting this. + +Thu Sep 12 17:36:36 UTC 2002 Craig Rodrigues + + * include/makeinclude/wrapper_macros.GNU: Use awk instead of + perl to determine the ACE major, minor, and beta versions. + +Thu Sep 12 12:02:31 2002 Steve Huston + + * tests/TSS_Test.cpp: Pass iteration count to worker() as a pointer + to int, not an int cast to a pointer and back. + +Wed Sep 11 08:44:28 2002 Douglas C. Schmidt + + * Our thoughts and prayers go out to the victims of 9/11/01 on the + anniversary of this terrible tragedy. + +Wed Sep 11 13:03:48 2002 Carlos O'Ryan + + * ace/Select_Reactor_Base.cpp: + Check the suspend mask before completely forgetting about a + handle, otherwise things do not work correctly with TP_Reactors + and multiply-registered handlers. This fixes: + http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1306 + +Tue Sep 10 17:46:51 2002 Steve Huston + + * ace/Malloc_T.{h i cpp} (ACE_Malloc_T): Changed the lock_ member from + an ACE_LOCK to an ACE_LOCK *. Also added another constructor that + accepts an ACE_LOCK pointer instead of a ACE_TCHAR *lock_name. + This allows someone to form an ACE_LOCK externally and supply + it to the ACE_Malloc_T object. This is useful if special + permissions need to be set on the lock, such as the mode_t for + ACE_Process_Mutex. + +Tue Sep 10 14:06:02 2002 Krishnakumar B + + * ace/Obstack_T.cpp: + * ace/Obstack_T.h: + + Obstack is no longer restricted to fixed-size chunks. Chunk size + is increased by a power of two if we run out of memory in a + chunk. Added implementation of unwind operations. Stack can be + unwound by giving the address of an object on the stack. Fixed a + couple of bugs in the existing implementation when used with + WCHAR. We were incrementing the pointers by sizeof (CHAR) as + well as multiplying by sizeof (CHAR) to get the number of bytes + to be copied. This improvement doesn't deal with the alignment + issues as it requires a change in Obchunk which is postponed + till after ACE 5.3 is released. + + * tests/Obstack_Test.cpp: + + New, improved test which exercises all the code paths in the + implementation unlike the previous test. + +Tue Sep 10 12:32:33 2002 Carlos O'Ryan + + * ace/Connector.cpp: + Be more informative in error messages, at least report in what + library, class and function was the error detected. This fixes: + http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1304 + +Tue Sep 10 12:28:41 2002 Carlos O'Ryan + + * ace/Connector.cpp: + Be more paranoid about using AST's returned from cleanup_AST() + and always check the return value of that function. This fixes: + http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1303 + +Mon Sep 9 16:44:00 2002 Balachandran Natarajan + + * THANKS: Surprise, surprise, Gautam Thaker'ss name was not there + in the THANKS file. So added it. + +Mon Sep 9 16:57:41 2002 Steve Huston + + * ace/POSIX_Asynch_IO.cpp (cancel): Don't sanity-check the + proactor type - just call cancel_aio and let the proactor impl + figure it out. + + * examples/Reactor/Proactor/test_aiocb.cpp: Fixes to not crash. + +Mon Sep 09 11:37:13 2002 Nanbor Wang + + * ace/OS.cpp (cond_timedwait): Changed to pass absolute time when + using emulated semaphore on WinCE. Thanks to Herbert Wang + for reporting this. + + * ace/Thread_Manager.cpp (join): This function was not cropping + the thread return status when a thread had already exited when + we called and its Thread_Descriptor had been moved to + terminated_thr_list_. Thanks to Roger Weeks + for reporting the problem. + +Mon Sep 9 00:12:04 UTC 2002 Craig Rodrigues + + * ace/Makefile.dirs: + * examples/Makefile: + * tests/Makefile: + Remove references to obsolete ACE_HAS_GNUG_PRE_2_8 make + variable. + +Sat Sep 7 23:22:20 2002 Balachandran Natarajan + + * bin/make_release: The tar ball that is put out during the + release, is copied now to the the previous_versions directory + with the appopriate version information. This should work right + since this was tested against a local repo. + + Thanks to Preston A. Elder for motivating + this change. + +Sat Sep 7 18:03:21 2002 Steve Huston + + * ace/Proactor.cpp: Removed some ACE_Proactor:: prefixes on member + variable access, replacing with this-> to clarify what's happening. + + * ace/SUN_Proactor.cpp (handle_events): No need to cast a pointer to + long to check for 0. + Re-enabled some "should never happen" ACE_DEBUG lines until we + find out what's going wrong with this stuff. + +Thu Sep 5 12:13:51 2002 Steve Huston + + * ACEXML/common/URL_Addr.inl: Removed ACE_RCSID - it's in URL_Addr.cpp. + +Wed Sep 4 16:31:29 2002 Douglas C. Schmidt + + * Kelly Clarkson wins "American Idol." Go Kelly!! + +Wed Sep 4 17:50:27 2002 Steve Huston + + * tests/run_test.pl: Change run time limit from 300 to 400 seconds. + Some tests are timing out, and when run by hand, they run just over + 5 minutes, so give them a little more time. + +Wed Sep 4 17:31:24 2002 Steve Huston + + * tests/Cached_Conn_Test.cpp: ACE_DEBUG %@ for pointers, not %d. + +Wed Sep 4 20:59:40 UTC 2002 Craig Rodrigues + + * include/makeinclude/platform_irix5.2.GNU: + * include/makeinclude/platform_m88k.GNU: + * include/makeinclude/platform_netbsd.GNU: + * include/makeinclude/platform_qnx_neutrino.GNU: + * include/makeinclude/platform_qnx_rtp_gcc.GNU: + * include/makeinclude/platform_sco-nothread.GNU: + Instead of setting -fno-implicit-templates, + use $(TEMPLATES_FLAG). Include platform_g++.GNU to get the + correct value of $(TEMPLATES_FLAG). + +Wed Sep 4 16:31:29 2002 Steve Huston + + * ace/Timer_Wheel_T.cpp: Formatting tweaks for ACE coding style. + +Wed Sep 4 20:08:54 UTC 2002 Don Hinton + + * ace/Framework_Component.cpp (close): + + Delete each component explicitely instead of calling + close_singleton () to avoid a memory leak. The dtor calls + close_singleton () anyway. Thanks Vladimir Chovanec + for reporting the leak and + suggesting the fix. + +Tue Sep 03 22:59:27 2002 Krishnakumar B + + * ACEXML/common/XML_Common.dsp: + + Added URL_Addr.inl to common. + +Tue Sep 03 22:40:22 2002 Krishnakumar B + + * ACEXML/common/HttpCharStream.cpp: + + Handle WCHAR properly when getting data from URLs. + + * ACEXML/common/URL_Addr.cpp: + * ACEXML/common/URL_Addr.h: + * ACEXML/common/URL_Addr.inl: + + Fixes for proper parsing of URLs when URLs are WCHARs. + + * ACEXML/examples/SAXPrint/main.cpp: + + Use int in GetOpt instead of char or ACEXML_Char. + +Tue Sep 3 17:12:59 2002 Ossama Othman + + * ace/OS.cpp (num_processors_online): + + Fixed ACE_TRACE macro. + +Tue Sep 3 16:38:47 2002 Ossama Othman + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + + Atomic_Op.cpp is no longer a template source file. Moved it to + the "Source Files" folder. + + * ace/Synch.cpp (ACE_Mutex): + + Fixed "unused 'mode' argument" warning. + +Tue Sep 3 15:54:33 2002 Christopher Kohlhoff + + * ace/OS.h: + * ace/OS.cpp: + + Added new functions ACE_OS::num_processors() and + ACE_OS::num_processors_online() for determining the number of CPUs + available on a system. + + * ace/Atomic_Op.cpp: + * ace/Atomic_Op.h: + * ace/Atomic_Op.i: + * ace/Atomic_Op_T.cpp: + * ace/Atomic_Op_T.h: + * ace/Atomic_Op_T.i: + * ace/Object_Manager.cpp: + * ace/Makefile.bor: + * ace/Makefile.ace: + * ace/ace.mpc: + * tests/Atomic_Op_Test.cpp: + + Added a new fast, lightweight ACE_Atomic_Op template specialization + for x86 platforms that uses the architecture's atomic integer + primitives. It currently supports Win32 using MSVC6 or BCB, and g++ + for (in theory) all x86 operating systems. It selects the + appropriate implementation for single- or multi-CPU systems at + runtime, based on the return value of the ACE_OS::num_processors + function added above. + + Note that Atomic_Op.cpp is now a real .cpp file and not a template + file, and so project files need to be updated accordingly. The + template definitions have been moved to the new Atomic_Op_T.* files. + + Note also that the ACE_Atomic_Op::mutex() operation has been + deprecated (and is not supported for the new specialization). If + you need this functionality, consider using the ACE_Atomic_Op_Ex + template instead. + +Tue Sep 3 15:40:39 2002 Ossama Othman + + * tests/XtReactor_Test.cpp (sock_callback): + + Removed this unused static function. + + * tests/TkReactor_Test.cpp (sock_callback): + + Likewise. + + (ACE_TMAIN): + + Fixed "deprecated conversion from string constant to char *" + warning. + +Tue Sep 3 15:16:03 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Fixed a typo! + +Mon Sep 2 16:48:29 2002 Steve Huston + + * tests/OS_Test.cpp (ctime_r_test): Corrected ACE_Log_Msg to use + %P, not %p, to list process ID. + +Mon Sep 2 13:17:26 2002 Steve Huston + + * ace/Memory_Pool.{h cpp}: + (ACE_MMAP_Memory_Pool_Options): Added optional file_mode arg + to set the protection mode on the mapped file, if it is + created; defaults to ACE_DEFAULT_FILE_PERMS. + (ACE_MMAP_Memory_Pool): Added file_mode_ member that can be set + by the ACE_MMAP_Memory_Pool_Options. Defaults to + ACE_DEFAULT_FILE_PERMS. It's used for call to ACE_Mem_Map::open() + and ACE_Mem_Map::map(). + + * ace/Process_Mutex.{h cpp}: ACE_Process_Mutex ctor takes an optional + mode_t arg to set the backing store mode (for ACE_Mutex use) or the + mode for the System V semaphore, when it's used. + + * ace/Synch.{h cpp} (ACE_Mutex): Constructor takes an optional mode + to set backing store protection for Pthreads process mutex case, + where memory must be allocated to hold the mutex. + + These are laying the groundwork for fixing Bugzilla #1219. + +Mon Sep 2 14:07:12 2002 Krishnakumar B + + * ace/Exception_Macros.h: + + New file which holds the exception macros previously present in + CORBA_macros.h. This file also makes the macros a bit generic so + that they can be used in other modules than TAO. + + * ace/CORBA_macros.h: + + Include only the definitions needed for TAO/CORBA. This file can + be placed under $TAO_ROOT now. Leaving it for compatibility + reasons. + + * ace/OS.i: + + Changed the definition of ctime_buf_size to const so that gcc + doesn't complain about using variable-sized array which is + non-ISO C++. + +Mon Sep 2 10:00:40 2002 Balachandran Natarajan + + * ace/Timer_List_T.cpp (get_first_i): Fixes fuzz errors. + +Sun Sep 01 08:18:37 UTC 2002 Johnny Willemsen + + * ace/Task.cpp (svc_run): + The latest version of the Borland compiler doesn't like the + static cast, so only do the static cast when the compiler + version is smaller than 0x570 + + * ace/Handle_Set.cpp: + When using Borland on Linux, we don't have fds_bits, but we have + __fds_bits. + +Sun Sep 01 07:57:12 UTC 2002 Johnny Willemsen + + * ace/config-win32-borland.h: + * ace/config-borland-common.h: + Improved Borland config files for Kylix support. + +Sun Sep 01 07:25:12 UTC 2002 Johnny Willemsen + + * include/makeinclude/platform_linux_borland.GNU: + Added first version of platform .GNU file for the Borland Kylix + compiler. Thanks to Newton Aird for + providing this first version. + + * THANKS: Added Newton Aird + +Sat Aug 31 14:57:53 2002 Balachandran Natarajan + + * THANKS: Added Cemal Yilmaz to the hall of + fame. + +Sat Aug 31 13:55:52 2002 Balachandran Natarajan + + * ace/OS.i (ctime_r): This fixes a problem on Linux for the call + to ::ctime_r where the pointer returned (result) is the same as + the pointer (buf) passed in, causing the buffer to get clobbed + if strsncpy is used subsequently to move the result back to the + caller's buffer. + + * tests/OS_Test.cpp: Added a test for ACE_OS::ctime_r (). + + Thanks to Michael Searles for providing + this patch. + +Sat Aug 31 17:45:12 UTC 2002 Johnny Willemsen + + * ace/config-borland-common.h: + Created a new config file for the Borland compiler. This will be + used on the Win32 platform and the Kylix3 compiler on Linux + + * ace/config-linux-common.h: + When the Borland compiler is detected, include the + config-borland-common.h file + + * ace/config-win32-borland.h: + Moved most of the contents to the config-borland-common.h file, + only the lines that are Win32 specific stay here. + +Sat Aug 31 10:32:38 2002 Douglas C. Schmidt + + * ace/Future.cpp (set): Removed a stray reference to "iterator" + and replaced the for loop with a while loop. Thanks to Craig + Rodrigues for reporting this. + +Sat Aug 31 01:20:09 UTC 2002 Craig Rodrigues + Gary Duzan + + * include/makeinclude/rules.nested.GNU: Rewritten by Gary Duzan. + If a list of directories is specified with DIRS= for a recursive + make, make will halt immediately and propagate a non-zero + return code to the shell if an error is encountered in a + subdirectory. The present behavior does not propagate any + errors to make if there is an error in a subdirectory. If make -k + is specified, make will keep on going even if it encounters an + error in a subdirectory, but it will also propagate a non-zero + return code to make when the make finishes. The current behavior + is to keep on going if an error is encountered in a subdirectory, + but NOT propagate a non-zero return code upon termination of make. + + * ace/Makefile.dirs: (Added) Specifies the DIRS= list of directories + to invoke recursive makes on. + + * ace/Makefile.ace: (Added). This builds libACE, like the old Makefile + did. + + * ace/Makefile: Invoke Makefile.ace first, then Makefile,dirs. It + was necessary to split apart the DIRS= rule from the part of the + Makefile which builds libACE in order to have parallel makes (-j 2) + work on recursive makes. + +Fri Aug 30 17:34:00 2002 Justin Michel + + * ace/Timer_List_T.cpp: + * ace/Timer_List_T.h: + * ace/Timer_Wheel_T.cpp: + * tests/Timer_Queue_Test.cpp: + + Reimplemented timer list to be compatible with Itanium. It no longer + uses a Node* as the timer_id, so the cancel operation is now much + more expensive. On the plus side I was able to make a few optimizations + that improve the speed of the schedule operations. + I also made a small optimization to the timer wheel, and updated + the test slightly. + +Fri Aug 30 15:53:18 2002 Steve Huston + + * tests/SSL/Makefile: Move the addition of SSL options/flags up to + before the hackery of the compile command for AIX. + +Fri Aug 30 05:48:12 UTC 2002 Johnny Willemsen + + * ace/OS.i (tempnam): + Changed defines because special things only happen on Win32 + +Thu Aug 29 22:01:27 2002 Steve Huston + + * include/makeinclude/platform_hpux_gcc.GNU: Make the build options + settable by the command line (and/or platform_macros.GNU), and + fix the threads and soname options, as well we remove the + -fstrict-prototype option from the compile options - it was needed + for an older g++ (nothing prior to g++ 3 works right on HP-UX + anyway) and is not valid for g++ 3.2 and later. Thanks to + Ville Lehtiniemi for reporting these + issues and sending fixes. + +Thu Aug 29 15:18:31 2002 Steve Huston + + * ace/Get_Opt.{h i cpp} (long_option): Only print error messages for + long message addition problems if opterr is set. Also added + ACE_LIB_TEXT to naked strings for ACE_ERROR. + + Added opt_opt() method to return the most recently matched + short option character. Thanks to Rich (Mr. POSIX) Seibel + for the idea and POSIX spec info for this new method. + + * ace/Object_Manager.cpp (init): When finishing up initialization of + the object manager, call ACE_Trace::start_tracing() to reenable + trace in cases where a user does init/fini/init. + + * tests/Get_Opt_Test.cpp: Added usage of ACE_Get_Opt::opt_opt(). + +Thu Aug 29 15:03:23 2002 Ossama Othman + + * ace/README: + + Documented ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS macro. + + * ace/config-win32-msvc-6.h + (ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS): + + MSVC++ 6 does not correctly handle exceptions thrown from + functions/methods that do not list them in the exception + specification. In particular, the unexpected exception handler + is not invoked. + +Thu Aug 29 06:12:56 2002 Douglas C. Schmidt + + * ace/Future.cpp (set): Fixed the loop code so it's possible for + the observer object to be deleted or detached in its update() + operation. Thanks to Tomer Amiaz for this + fix. + +Thu Aug 29 09:40:20 2002 Nanbor Wang + + * ACEXML/common/Transcode.h: + * ACEXML/parser/parser/Parser.h: Fixed incorrect usage of Doxygen + tag. Thanks to Johnny for pointing this out. + +Thu Aug 29 12:20:17 UTC 2002 Johnny Willemsen + + * ace/config-win32-borland.h: + Removed the 1 after 2 defines, so that they are like the defines + in other files. + +Thu Aug 29 05:53:12 UTC 2002 Johnny Willemsen + + * examples/Reactor/Proactor/post_completions.cpp: + Fixed compile error. + + * ace/OS_Dirent.h: + * ace/OS_Errno.cpp: + * ace/Time_Value.h: + * ace/Time_Value.inl: + Made method signature the same in definition and implementation. + + * ace/TkReactor.cpp: + * ace/TkReactor.h: + Made method argument names the same as in the base so that doxygen + can generate the documentation. + +Wed Aug 28 23:30:31 2002 Steve Huston + + * include/makeinclude/wrapper_macros.GNU: Remove addition of SSL + compile/link options so that not all parts of ACE, needing SSL or + not, get these options. + + * ace/SSL/Makefile: + * tests/SSL/Makefile: Added the SSL compile/link options from + wrapper_macros.GNU to these files, where they're needed. + + * ace/POSIX_Proactor.cpp (post_wakeup_completions): Use int + to count completions, not ssize_t - match the passed-in arg type. + Post the completion directly via the proactor, not via the + wakeup completion; the dynamic_cast in ACE_POSIX_Asynch_IO::post_ + completion loses the subclass of ACE_POSIX_AIOCB_Proactor and + when using any other subtype of proactor, the notification is + queued incorrectly. + + (POSIX_SIG_Proactor::notify_completion()) - always queue the signal. + Not doing so leaves a window where MT proactors can lose a signal. + + * tests/Proactor_Test.cpp: Use ACE_Proactor::close_singleton() to + delete proactor instance. Just to be sure we try it. + + * ace/SSL/SSL_Asynch_Stream.{h cpp}: u_long->size_t changes. + +Wed Aug 28 22:42:41 2002 Steve Huston + + * examples/Service_Configurator/Misc/main.cpp: + * netsvcs/clients/Naming/Client/main.cpp: + * tests/ARGV_Test.cpp: + * tests/Get_Opt_Test.cpp: Change size_t to int as a side-affect of: + Tue Aug 27 13:28:17 2002 Steve Huston + * ace/ARGV.{h i cpp}: Changed argc() value from size_t to int. It + needs to get passed to many places that expect int (argc, argv). + + * tests/Semaphore_Test.cpp: + * tests/TP_Reactor_Test.{cpp h}: + * tests/Upgradable_RW_Test.cpp: Further int/size_t corrections. + +Wed Aug 28 19:56:16 2002 Douglas C. Schmidt + + * docs/ACE-subsets.html: Updated the document to point to the + soreduce tool and to remove the discussion of PACE. Thanks to + Chumsu Kim for motivating this. + +Wed Aug 28 14:24:36 2002 Steve Huston + + * ace/Log_Msg.h: Fixed Doxygenation of ACE_Log_Msg. Thanks to + Philip Miller for reporting this. + +Wed Aug 28 11:21:04 2002 Chad Elliott + + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplib.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + * bin/MakeProjectCreator/templates/nmakedll.mpt: + * bin/MakeProjectCreator/templates/nmakeexe.mpt: + * bin/MakeProjectCreator/templates/vc6dspdll.mpt: + * bin/MakeProjectCreator/templates/vc6dspdllexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsplib.mpt: + * bin/MakeProjectCreator/templates/vc6dsplibexe.mpt: + + Enabled RTTI for all VC based template input files. + +Wed Aug 28 06:18:35 2002 Douglas C. Schmidt + + * ace: Removed the config-sunos5.8-sunc++-5.4.h file since these + changes should go in the config-sunos5.8.h file rather than + a special file. Thanks to Steve Huston for noticing this. + + * include/makeincludes: Removed the platform_sunos5_sunc++5.4.GNU + file since it's no different from the platform_sunos5_sunc++.GNU + file. Thanks to Steve Huston for noticing this. + +Wed Aug 28 06:12:12 UTC 2002 Johnny Willemsen + + * etc/tao.doxygen: + Removed Services.h of the list of not to parse files + + * etc/tao_rtportableserver.doxygen: + Added TAO_NAMESPACE to list of to expanded macros + + * tests/Timer_Queue_Test.cpp: + Fixed unicode build error + + * ace/Timer_Wheel_T.cpp: + Fixed doxygen tags. + +Tue Aug 27 19:09:17 2002 Steve Huston + + * ace/Get_Opt.h: Documentation improvements. + +Tue Aug 27 17:00:20 2002 Douglas C. Schmidt + + * ace/Signal.cpp: Fixed the ACE_Sig_Action constructors so that + it doesn't break out of the loop just because a signal handler + failed. Thanks to Marcel Loose for reporting + this. + +Tue Aug 27 19:03:05 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added $TAO_ROOT/tests/ORB_shutdown test + to the daily builds. + +Tue Aug 27 18:52:59 2002 Balachandran Natarajan + + * ace/Select_Reactor_T.cpp (wait_for_multiple_events): Normally, + select() will reset the bits in dispatch_set so that only those + filed descriptors that are ready will have bits set. However, + when an error occurs, the bit set remains as it was when the + select call was first made. Thus, we now have a dispatch_set + that has every file descriptor that was originally waited for, + which is not correct. We must clear all the bit sets because we + have no idea if any of the file descriptors is ready. + + Thanks to Jody Hagins and Carlos O'Ryan + for reporting this problem and proving the + patches. + +Tue Aug 27 15:56:10 2002 Ossama Othman + + * ace/config-sunos5.8-sunc++-5.4.h: + * include/makeinclude/platform_sunos5_sunc++5.4.GNU: + + Solaris 8 + SunC++ SPRO 5.4 platform configuration files. + Thanks to Serge Kolgan for + contributing these files. + +Tue Aug 27 17:25:39 2002 Steve Huston + + * ace/WIN32_Proactor.{h cpp}: More u_long->size_t corrections. + +Tue Aug 27 16:50:41 2002 Steve Huston + + * tests/Proactor_Test.cpp: Fixed mismatched printf formats for + size_t arguments. + +Tue Aug 27 16:32:18 2002 Steve Huston + + * ace/Proactor_Impl.h: Fixed some u_long->size_t changes missed + on POSIX platforms. + +Tue Aug 27 14:44:00 2002 Justin Michel + + * ace/Timer_Wheel_T.cpp: + + Fixed problem with incorrect name in ACE_TRACE macro. + +Tue Aug 27 13:28:17 2002 Steve Huston + + * ace/config-win32-common.h: Added #define ACE_MALLOC_ALIGN 8 for + Win64. + + * ace/Malloc_T.cpp (ACE_Cached_Allocator): When dividing up the + allocated space, maintain the platform's alignment requirements. + + * ace/ace_dll64.mak: Removed references to Hash_Map_Manager_rt.*. + + * ace/Stream_Modules.cpp (info): Cast string length back to int. + + * ace/ARGV.{h i cpp}: Changed argc() value from size_t to int. It + needs to get passed to many places that expect int (argc, argv). + + * ace/OS.{h cpp} (ACE_OS::string_to_argv): argc changed from size_t& + to int& to match the change above. + + * ace/FILE_IO.{h i cpp}: + * ace/SPIPE_Stream.{h i}: Follow-up to ACE_SOCK_Stream change in: + Mon Jul 22 16:39:21 2002 Steve Huston + (sendv_n, recvv_n, sendv, send, recv) - change iov count from + size_t to int. + + * ace/Functor_T.i (ACE_Pointer_Hash::operator()): Use reinterpret_cast + to go from pointer to u_long. + + * ace/config-win32-msvc-7.h: Define ACE_AUTO_PTR_LACKS_RESET for + Win64 SDK compiler. + + * ace/Strategies_T.{h i cpp} (ACE_Thread_Strategy): Changed n_threads + parameter (and n_threads_ member) from size_t to int - matches + what's expected by ACE_Task::activate(), which is where this + value is passed. + + * ace/Asynch_Acceptor.{h cpp}: + * ace/Asynch_IO.{h cpp}: + * ace/Asynch_IO_Impl.h: + * ace/POSIX_Asynch_IO.{h cpp}: + * ace/POSIX_Proactor.{h cpp}: + * ace/WIN32_Asynch_IO.{h cpp}: + * ace/WIN32_Proactor.{h cpp}: All byte-count arguments and members + in all classes changed from u_long to size_t. Some already were... + + * ace/SOCK_Dgram.i (send): address length is an int, not size_t. + + * tests/Cache_Map_Manager_Test.h (Hash_Key::operator()): Cast the + size_t argument to u_long for return. + + * tests/Cache_Map_Manager_Test.cpp: Cast arg for ACE_OS::srand to + u_int (matches ACE_OS signature), not size_t. + + * tests/CDR_Array_Test.cpp (zero): Change len arg to size_t, and + also the values passed to it. Also, correct length args to + ACE_InputCDR and ACE_OutputCDR - they're size_t, not int. + + * tests/Handle_Set_Test.cpp: Disable the conversion warnings + initializing the array of ACE_HANDLE values on Win64. They're fine. + + * tests/Mem_Map_Test.cpp (reverse_file): Changed size arg from int + to size_t. + + * tests/Buffer_Stream_Test.cpp: + * tests/CDR_Test.cpp: + * tests/Message_Block_Test.cpp: + * tests/Message_Queue_Notifications_Test.cpp: + * tests/Priority_Buffer_Test.cpp: + * tests/Proactor_Scatter_Gather_Test.cpp: + * tests/Proactor_Test.cpp: + * tests/Semaphore_Test.cpp: + * tests/Thread_Pool_Test.cpp: + * tests/TP_Reactor_Test.{h cpp}: + * tests/Upgradable_RW_Test.cpp: Align size_t/int usage. + + * tests/Message_Queue_Notifications_Test.cpp (Watermark_Test::producer) + Change hwm from size_t to ssize_t so it can go less than zero and + break the 'for' loop properly. + + * tests/MT_SOCK_Test.cpp: + * tests/SOCK_Test.cpp: Use an int to pass to select(), always 0 + for Win64. + + * tests/SOCK_Send_Recv_Test.cpp: + * tests/Thread_Pool_Reactor_Resume_Test.cpp: + * tests/Thread_Pool_Reactor_Test.cpp: + * tests/TSS_TEst.cpp: Add missing type cast. + +Tue Aug 27 11:08:54 2002 Douglas C. Schmidt + + * ace/Pair_T.{h,i}: Added support for operator== to the ACE_Pair + can be used in maps, etc. Thanks to Gonzalo Diethelm + for this addition. + +Tue Aug 27 06:45:58 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a problem where .i and .h files would be added even if they + didn't exist. + +Tue Aug 27 10:09:12 UTC 2002 Johnny Willemsen + + * etc/tao_dynamicany.doxygen: + * etc/tao_dynamicinterface.doxygen: + * etc/tao_iormanip.doxygen: + * etc/tao_iortable.doxygen: + * etc/tao_portableserver.doxygen: + * etc/tao_rtcorba.doxygen : + Added TAO_NAMESPACE to the list of defines to expand. + +Mon Aug 26 17:33:54 2002 Ossama Othman + + * bin/msvc_auto_compile.pl (Build_Core): + + Build the Messaging, PortableGroup and CosLoadBalancing + libraries in a specific order. CosLoadBalancing depends on the + first two. Fixes automated Win32 static builds. + +Mon Aug 26 17:14:20 2002 Ossama Othman + + * tests/TkReactor_Test.cpp: + + Fixed a number of warnings. + +Mon Aug 26 18:21:34 UTC 2002 Justin Michel + + * ace/Timer_Wheel_T.cpp: + * ace/Timer_Wheel_T.h: + * tests/Timer_Queue_Test.cpp: + + New and improved timer wheel implementation. + +Mon Aug 26 09:51:12 UTC 2002 Johnny Willemsen + + * ace/FlReactor.{h,cpp}: + * ace/TkReactor.{h,cpp}: + * ace/QtReactor.{h,cpp}: + Made the names of the arguments of the schedule_timer() method the + same as in the base class. That way doxygen generates the same + documentation for this overruled method as in the base. + + * ace/TLI_Connector.i: + * ace/XTI_ATM_MCast.i: + Made argument names the same as in the header file. + +Mon Aug 26 08:29:12 UTC 2002 Johnny Willemsen + + * ace/Connector.cpp: + Replaced all short defines with the original ones. Doxygen can't + generate the documentation because of the short defines. + +Sun Aug 25 14:15:12 UTC 2002 Johnny Willemsen + + * ace/config-win32-borland.h: + Certain defines should only be defined without a value. + +Sun Aug 25 12:45:12 UTC 2002 Johnny Willemsen + + * etc/tao.doxygen: + Added TAO_NAMESPACE to the list of macro's that must be expanded + when generating doxygen documentation. + +Sat Aug 24 22:47:22 2002 Christopher Kohlhoff + + * include/makeinclude/ace_flags.bor: + * include/makeinclude/clean.bor: + * include/makeinclude/compiler.bor: + + Updated to support MakeProjectCreator. + + * bin/MakeProjectCreator/config/core.mpb: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/BorlandProjectCreator.pm: + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + * bin/MakeProjectCreator/templates/bor.mpd: + + Fixed support for Borland makefile generation. + + New "core" config for projects that would typically be installed + on production system, i.e. pretty much everything except examples + and tests. + + New "include_dir" project attribute used to specify a directory + path where header files for the project should be installed. + + * ace/ace.mpc: + * ace/QoS/qos.mpc: + * ace/RMCast/rmcast.mpc: + * ace/SSL/ssl.mpc: + + Added "core" as a base project and added "include_dir" value. + + * apps/gperf/src/gperf.mpc: + + Added "core" as a base project. + +Sat Aug 24 16:41:36 2002 Krishnakumar B + + * ACEXML/common/FileCharStream.cpp (get): + + Remove :: in front of the macro feof. VC is hopelessly confused. + + * ace/Argv_Type_Converter.h: + + Added #include "ace/OS_Memory.h" to get ACE_NEW. I needed to + touch this to test my changes. + +Sat Aug 24 12:01:54 2002 Douglas C. Schmidt + + * ace/OS.h: #undef the atop macro so that it won't break the new + ACE_OS::atop() method on FreeBSD. Thanks to Russell Carter + and Christophe Juniet + for this report. + + * ace/config-lynxos.h: Added some #defines for LynxOS 4.0. We'll + leave these comments out for now until we figure out how to add + them without breaking earlier versions of LynxOS. Thanks to + Umberto Mascia for reporting this. + + * docs/tutorials/015/Protocol_Stream.h (class Protocol_Stream): + Changed a comment to say "server-side applications" rather than + "client-side applications." Thanks to Mark Xu + for reporting this. + +Fri Aug 23 18:20:31 2002 Steve Huston + + * ace/config-all.h: + * ace/OS_Memory.h: Moved the ACE_NEW macros from config-all.h to + OS_Memory.h + + * ace/Log_Msg.h: Removed #include "ace/Basic_Types.h" (not needed) + and replaced "ace/OS_Errno.h" with "ace/OS.h" since thread defs + are necessary. + + * ace/Basic_Types.h: Don't make thread definitions here - they belong + in ace/OS.h. + + * ace/Cache_Map_Manager_T.h: Added #include "ace/Default_Constants.h" + to get ACE_DEFAULT_MAP_SIZE when instantiating templates on AIX + with Visual Age C++. + + * ace/Caching_Utility_T.cpp: #include "ace/Min_Max.h" and + "ace/OS_Memory.h" so Visual Age C++ can see ACE_MAX and ACE_NEW + when instantiating templates. + + * ace/Arg_Shifter.cpp: Added #include "ace/OS_Memory.h" to get ACE_NEW. + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp: Added + #include "ace/Malloc_Base.h" to pick up ACE_Allocator. + + * tests/Cached_Allocator_Test.cpp: Changed default speed tests loops + from 100,000,000 to 10,000,000. run_test.pl times it out on + non-nuclear processors ;-) + +Fri Aug 23 16:59:51 2002 Nanbor Wang + + * bin/svcconf-convert.pl: Fixed regex to handle empty option + strings in static/dynamic entries correctly. + +Fri Aug 23 16:25:47 2002 Krishnakumar B + + * ace/OS.i: + * ace/OS.h: + + Removed the wrappers for functions that are known to be + overloaded by macros. #undef will break user code for these + functions. This includes feof(), ferror() and ungetc(). The + other functions seem to only have a function implementation. + + * ACEXML/common/FileCharStream.cpp: + + Removed the use of ACE_OS wrappers for the above functions. + +Fri Aug 23 08:40:38 2002 Douglas C. Schmidt + + * ace/config-qnx-rtp.h: Added some new #defines so ACE will + compile on QNX 6.2. Thanks to Leen Van Kampen + for reporting this. + + * ace/Task.cpp (svc_run): Added a #ifdef for _MSC_VER <= 1200 + since there are complaints about reinterpret_cast from int to + unsigned long. Thanks to Espen Harlinn + for this fix. + +Fri Aug 23 13:04:34 2002 Nanbor Wang + + * ace/Service_Config.cpp: Some minor cosmetic changes. + +Fri Aug 23 07:16:13 2002 Chad Elliott + + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + + Fixed a problem where the pch header files is not in the list of + header files. + +Fri Aug 23 06:07:38 2002 Krishnakumar B + + * ace/OS.h (ACE_OS): + + ungetc() is a macro under Borland. Undefine it to make Borland + compiler happy. + +Thu Aug 22 21:27:56 2002 Nanbor Wang + + * ace/OS_String.cpp (strtok_r_emulation): Applied the patch Frank + Kuhlman submitted in [Bug 1272] which + resolved an overrun error. + +Thu Aug 22 21:20:01 2002 Krishnakumar B + + * include/makeinclude/rules.local.GNU (realclean.local): + + Remove older cruft when doing a realclean. Note this is a + sledgehammer (libfoo.so*). Don't blame me if you shoot yourself + in the feet, which technically shouldn't happen as long as you + have the sources to the libraries that you built. Thanks to + Ossama for pointing out that cruft was left behind. + +Thu Aug 22 19:14:44 2002 Ossama Othman + + * ace/OS.i (fgetwc, ungetwc): + + These functions are supposed to return WEOF on error, not -1 as + their ACE_OS wrappers were doing. Corrects a warning about + initialization of a negative value to "wint_t", which is an + unsigned integer on some platforms (e.g. GNU libc). + +Thu Aug 15 10:43:51 2002 Steve Huston + + * ace/Message_Queue_T.cpp (enqueue_tail): Moved notify() call outside + lock scope, as Sun May 5 19:14:34 2002 Douglas C. Schmidt + suggested. + +Wed Aug 14 18:14:57 2002 Steve Huston + + * ace/OS.cpp (ACE_TSS_Cleanup::remove()): Always mark the key no + longer in use, instead of simply decrementing the reference count. + Shouldn't call remove() until there are no more references to + the key. + (ACE_TSS_Cleanup::detach()): Decrement the reference count when + detaching. Previously, the count could never get to 0 and the + remove() method would never be called until object manager shutdown. + This resolves a problem where a service using + ACE_Unmanaged_TSS_Singleton would do its cleanup(), but there would + still be a reference to the key... if the destructor (in an unloaded + service DLL) was called at process shutdown, it would crash. + Thanks to Craig L. Ching for pointing this + problem area out. + +Fri Aug 9 16:11:39 2002 Steve Huston + + * ace/Message_Block.cpp: + (ACE_Data_Block::ACE_Data_Block): If the data allocation fails, + reset the cur_size_ and max_size_ to 0 to reflect the fact that + there is no legitimate memory allocated. + (ACE_Message_Block::init_i): If the data block size() that results + from allocating a new ACE_Data_Block is not what was requested, + return -1 to indicate the failure. + + * ace/Malloc_T.i (ACE_Cached_Allocator::free): Don't attempt to + return a 0 pointer to the free_list_. Thanks to Laxmikant + Bopalkar for this fix. + + * THANKS: Added Laxmikant Bopalkar to the Hall of Fame. + +Thu Aug 22 17:34:18 2002 Steve Huston + + * ace/FIFO_Recv_Msg.{h i}: Fixed recv() in the non- + ACE_HAS_STREAM_PIPES case to throw away the part of a + message longer than the max number of bytes requested by + the caller. Filled out the doxygen comments in the header + to explain the behavior, and the differences when (not) + using ACE_HAS_STREAM_PIPES. + +Wed Aug 21 17:48:29 2002 Steve Huston + + * examples/C++NPv2/TP_Logging_Server.cpp (TP_Logging_Task): + * examples/C++NPv2/display_logfile.cpp (svc): + Must use reinterpret_cast, not static_cast, to cast between + unrelated types (char *, class *). + + * examples/C++NPv2/Makefile: Added AIO_CLD to top-level build. + +Thu Aug 22 18:10:46 UTC 2002 Craig Rodrigues + + * bin/nightlybuilds/builds.lst: Move RedHat_Static build + to new scoreboard. + +Thu Aug 22 01:32:46 2002 Krishnakumar B + + * ACEXML/common/StreamFactory.cpp: + + Use ACE_TEXT for literals. Add destructor to avoid linker + problems. + + * ACEXML/parser/parser/Parser.cpp: + + Use ACEXML_Char instead of char* to fix compilation with WCHAR. + + * ACEXML/common/XML_Common.dsp: + + Add files StreamFactory.{h,cpp} to the project files. + +Thu Aug 22 01:16:16 2002 Krishnakumar B + + * ace/OS.h: + + Fixed compilation error under Windows by undefining the macros. + +Wed Aug 21 22:22:42 2002 Ossama Othman + + * bin/msvc_auto_compile.pl (Build_Core): + + Removed "LoadBalancing_Static.dsp" from the list of static + library projects to build. That MSVC++ project was for the old + load balancer, and no longer exists. + +Thu Aug 22 03:50:02 UTC 2002 Craig Rodrigues + + * bin/performance_stats.sh: + * bin/footprint_stats.sh: Calculate value of DATE + inside these scripts instead of passing it in as the + third parameter. This will make it easier to make + an autobuild script around this. + +Wed Aug 21 20:40:20 2002 Krishnakumar B + + * ace/OS.h: + * ace/OS.i: + + Added wrappers for fgetc, fgetwc, ferror, clearerr, feof, + ungetc, ungetwc. All these are guaranteed to not be macros. + + * ACEXML/apps/svcconf/Svcconf_Handler.cpp: + * ACEXML/apps/svcconf/Svcconf_Handler.h: + + Fixed compilation errors. + + * ACEXML/common/FileCharStream.cpp: + * ACEXML/common/HttpCharStream.cpp: + * ACEXML/common/XMLFilterImpl.cpp: + * ACEXML/examples/SAXPrint/Print_Handler.cpp: + * ACEXML/examples/SAXPrint/SAXPrint_Handler.cpp: + * ACEXML/examples/SAXPrint/main.cpp: + * ACEXML/examples/svcconf/Svcconf_Handler.cpp: + * ACEXML/parser/debug_validator/Debug_Attributes_Builder.cpp: + * ACEXML/parser/debug_validator/Debug_DTD_Manager.cpp: + * ACEXML/parser/debug_validator/Debug_Element_Builder.cpp: + * ACEXML/parser/debug_validator/Element_Tree.cpp: + * ACEXML/parser/parser/Parser.cpp: + + Use ACE_TEXT instead of ACE_LIB_TEXT. It results in reducing + vertical space and the wchar.txt document also encourages it. + +Wed Aug 21 17:02:44 2002 Nanbor Wang + + * ace/OS_String.cpp: Changed to enabled wchar version of + strtok_r_emulation when both ACE_HAS_WCHAR and ACE_LACKS_WCSTOK + are both defined (instead of ACE_HAS_REENTRANT_FUNCTIONS.) + Thanks to Brian Appel for reporting this. + +Wed Aug 21 12:41:51 2002 Chad Elliott + + * bin/MakeProjectCreator/config/notifytest.mpb: + * tests/SSL/tests.mpc: + + Fixed a few problems with some of the mpc files. + + * nightly.mwc: + + Added an initial nightly build workspace file. + +Wed Aug 21 11:57:37 2002 Nanbor Wang + + * bin/msvc_auto_compile.pl: Added ACEXML/apps to the list of + compiled ACE directories. + +Wed Aug 21 11:15:11 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + * bin/MakeProjectCreator/templates/nmake.mpd: + + Fixed a problem dealing with Windows, NMake and idl files. + +Wed Aug 21 11:04:09 2002 Nanbor Wang + + * ace/Object_Manager.cpp (init): Changed to return failure (-1) if + ACE_Object_Manager fail to acquire the TSS ACE_Log_Msg instance + for whatever reason. Thanks to Jeremy Altavilla + for suggesting the fix. + +Wed Aug 21 07:43:12 2002 Johnny Willemsen + + * ace/ATM_Addr.{h,i}: + Made the signature definition and implementation of set_selector() + and get_selector() the same. + + * ace/CDR_Stream.cpp: + Made the read_string() signature the same as in the definition + + * ace/config-doxygen.h: + Added ACE_HAS_XTI_ATM to the list of defines that must be set + when generating the doxygen documentation + + * ace/config-win32-mingw.h: + Added extern "C" around the win32api methods ace uses but which + are not defined in the mingw win32api. + + * ace/Lib_Find.cpp: + Made signature of ldfind method the same as in the definition + + * ace/Log_Record.cpp: + Made signature of print method the same as in the definition + + * ace/Multiplexor.i: + Added #ifdef 0/#endif around the contents of this file, because the + header and cpp file also do this. Doxygen parses now this .i file + and gives a lot of warnings about this file because it cannot find + the definition of the methods in this file. + + * ace/Configuration.h: + * ace/Containers_T.cpp: + * ace/Lib_Find.h: + * ace/OS.h: + * ace/RMCast/RMCast_Reliable_Factory.h: + * ace/RMCast/RMCast_UDP_Proxy.h: + Small improvements for doxygen documentation. + + * include/makeinclude/ace_flags.bor: + Added cflags and lib for TAO PSDL library + + * include/makeinclude/platform_mingw32.GNU: + MingW doesn't support the adding of the version number after + the .dll, so set SONAME and SOVERSION to empty. + + * examples/Connection/non_blocking/test_lsock_acceptor.cpp: + * examples/Connection/non_blocking/test_lsock_connector.cpp: + Added include of Log_Msg to fix compile errors with MingW + +Tue Aug 20 14:19:55 2002 Jaiganesh@doc + + * ACE version 5.2.4 released. + +Fri Aug 16 10:25:07 2002 Ossama Othman + + * include/makeinclude/ace_flags.bor: + + Corrected CosLoadBalancing library related variables. They + were still setup for use with the old load balancer prototype. + +Fri Aug 16 11:15:49 2002 Douglas C. Schmidt + + * examples/Reactor/Proactor/test_aiosig_ace.cpp: Added + #include "ace/Log_Msg.h" so things will compile. Thanks to + Victor Poznyak for reporting this and + Alexander Libman for suggesting the fix. + +Thu Aug 15 15:22:49 2002 Nanbor Wang + + * tests/tests.dsw: Re-added Thread_Manager_Test.dsp into this + workspace. It got accidentally removed when someone merged a + branch into the main trunk. Thanks to Ronald Berger + for noticing this. + +Mon Aug 12 10:17:55 2002 Douglas C. Schmidt + + * ace/Thread_Manager.h (ACE_Thread_Manager): Fixed a type where + "manipulated" was spelled "maniputated". Thanks to + Eric Newton for reporting this. + + * PROBLEM-REPORT-FORM: Fixed a typo where "ASCII text" was spelled + "ASCII test". Thanks to Eric Newton for + reporting this. + +Fri Aug 9 12:13:21 2002 Jaiganesh Balasubramanian + + * bin/nightlybuilds/builds.1st: + Moved the Debian_Core builds to the new scoreboard. + Thanks to CRaig Rodrigues for the fix. + +Fri Aug 9 09:24:08 2002 Douglas C. Schmidt + + * ace/Time_Value.{inl,cpp}: Make sure to normalize the set() methods... + Thanks to Francois for reporting this. This + fixes BugID 1275. + +Thu Aug 8 23:11:30 2002 Balachandran Natarajan + + * include/makeinclude/rules.nested.GNU: Reverted this change "Thu + Aug 8 18:28:34 UTC 2002 Craig Rodrigues " + since it would break our daily builds. + +Thu Aug 8 18:28:34 UTC 2002 Craig Rodrigues + + * include/makeinclude/rules.nested.GNU: If we fail during a recursive + make, exit with error code 1. This makes it easier to detect errors + in automated builds. Thanks to Gary Duzan for showing + inspiring the fix. + +Wed Aug 7 12:39:31 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/Driver.pm: + + Speed up execution by changing the include path order. + + * bin/MakeProjectCreator/modules/GNUWorkspaceCreator.pm: + + Don't generate a for loop if there is only one project. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug with the global assignments overwriting project + assignments. + +Sun Aug 4 16:47:29 2002 Balachandran Natarajan + + * tests/Framework_Component_DLL.cpp: Added a missing template + instantiation. It was caught only in SunCC53 builds. + +Sun Aug 4 16:01:28 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Do not the Stack_Recursion tests in + single threaded builds. + +Sat Aug 03 17:57:33 2002 Balachandran Natarajan + + * ace/ace_dll.dsp: Removed the Hash_Map_Manager_rt.cpp from the + project file. + +Sat Aug 03 15:42:49 2002 Balachandran Natarajan + + * examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.dsp: Made sure that it + builds only in MFC debug builds. + +Sat Aug 3 14:56:23 2002 Krishnakumar B + + * ACEXML/common/HttpCharStream.cpp: + + Fixed a conversion error from char to wchar_t. Thanks to Johnny + for pointing this out. + + * ACEXML/parser/parser/Parser.cpp: + + Fixed an unreachable statement warning. Thanks to Bala for + pointing this out. + +Sat Aug 3 19:53:12 UTC 2002 Johnny Willemsen + + * ACEXML/common/XML_Codecs.h: + * ACEXML/parser/parser/Parser.h: + * ace/Registry.h: + * ace/String_Base.h: + * ace/QoS/QoS_Session_Factory.h: + Fixed doxygen commands. + +Sat Aug 3 12:36:55 2002 Balachandran Natarajan + + * ace/Hash_Map_Manager_rt.h: + * ace/Hash_Map_Manager_rt.cpp: + * ace/Hash_Map_Manager_rt.i: Removed these files from the main + trunk. They shouldnt have been there in the first place. + +Fri Aug 2 22:00:26 UTC 2002 Craig Rodrigues + + * examples/Log_Msg/Log_Msg_MFC/*: Added example to show how + to send ACE_DEBUG output to the Microsoft Visual Studio debugger console. + Thanks to Don Hinton and + Chris Hafey for help with this. + +Fri Aug 2 13:10:05 2002 Krishnakumar B + + * ACEXML/examples/SAXPrint/main.cpp (ACE_TMAIN): + * ACEXML/common/InputSource.cpp: + + Reverted the previous check-in with respect to the delete + statement. Memory is getting leaked somewhere down in ACE. + +Fri Aug 2 12:31:34 2002 Krishnakumar B + + * ACEXML/common/ContentHandler.h: + * ACEXML/parser/parser/Entity_Manager.cpp: + * ACEXML/common/NamespaceSupport.cpp: + + Fixed minor typos in the comments. + + * ACEXML/common/InputSource.cpp: + + Removed an erroneous delete statement. Not sure if this is a + implementation bug or a thinko. + + * ACEXML/common/HttpCharStream.cpp: + * ACEXML/common/Mem_Map_Stream.cpp: + * ACEXML/common/Mem_Map_Stream.h: + + Use char* when sending data on the network. Technically it + should be byte. + + * ACEXML/examples/SAXPrint/Print_Handler.cpp: + * ACEXML/examples/SAXPrint/main.cpp: + + Fixed a bug with getopt() when WCHAR is enabled. Since EOF is + -1, never use a WCHAR in the while loop. + + * ACEXML/parser/parser/Parser.cpp: + * ACEXML/parser/parser/Parser.h: + + Improved Namespace support. Modularized functions in the parser. + + * ACEXML/docs/TODO.txt: + * ACEXML/docs/bugs.txt: + * ACEXML/docs/guidelines.txt: + * ACEXML/docs/parser_features.txt: + + Updated to reflect the current status. People were reading these + old docs and assuming a lot of the features aren't implemented. + +Fri Aug 2 16:06:12 UTC 2002 Johnny Willemsen + + * ace/config-doxygen.h: + Added ACE_HAS_ATM define to also generate the doxygen documentation + of the ACE ATM classes. This is one of the last parts of ACE that + are missing in the doxygen documentation. + +Fri Aug 2 07:54:24 2002 Balachandran Natarajan + + * ace/Malloc.cpp: Rearranged member initialization list in the + constructor of ACE_Malloc_Stats, to fix warnings with explicit + template builds. + +Thu Aug 01 13:40:59 2002 Balachandran Natarajan + + * tests/Malloc_Test.cpp: Changed the usage of ASYS_TEXT to + ACE_TEXT. Should fix most of the compile errors with g++. + +Thu Aug 1 12:14:21 2002 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Added $(ACELIB) to the list of ACE_SHLIBS. + +Thu Aug 1 11:13:20 2002 Balachandran Natarajan + + * ace/Malloc_Allocator.h: + * ace/Malloc_Allocator.cpp: Removed the declaration and definition + of ACE_Malloc_Stats since they are not needed in this + translation unit. + + * ace/Malloc.h: + * ace/Malloc.cpp: Retained the definition if ACE_Malloc_Stats here + (yes, there were two declarations) and added the definition and + template instantiation for ACE_Atomic_Op used by + ACE_Alloc_Stats. This should fix the erros showing up on the + scoreboard explicit template builds which has + ACE_HAS_MALLOC_STATS turned on. + +Thu Aug 1 09:08:36 2002 Douglas C. Schmidt + + * ace/Message_Block.h: Made the non-static duplicate() and release() + methods virtual so they can be overridden by subclasses. Thanks + to Brian Raven for this suggestion. + +Thu Aug 01 15:24:32 UTC 2002 Johnny Willemsen + + * ace/OS_Thread_Adapter.h: + Fixed incorrected doxygen @file command. + +Thu Aug 01 14:52:44 UTC 2002 Johnny Willemsen + + * bin/fuzz.pl: + Improved the check for the @file doxygen command. Incomplete file + names where not detected as error. + +Thu Aug 1 07:03:05 2002 Chad Elliott + + * bin/MakeProjectCreator/README: + + Added a bit of background on the tool before plunging into the + details. + +Thu Aug 01 07:59:12 UTC 2002 Johnny Willemsen + + * ace/Asynch_Acceptor.h: + * ace/XtReactor.cpp: + * ace/XtReactor.h: + Corrected argument names to fix doxygen warnings. + +Thu Aug 01 07:34:12 UTC 2002 Johnny Willemsen + + * ace/config-win32-mingw.h: + Made the definition of the missing parts of the Win32api of MingW + dependent on the version of the w32api instead of our own defines. + This way we automically define the missing things when needed. Thanks + to Craig for suggesting this. + +Wed Jul 31 23:39:27 UTC 2002 Craig Rodrigues + + * etc/*.doxygen: Change DOT_PATH from /usr/local/bin/ to + empty, forcing doxygen to look for the dot program in PATH. + This eliminates warnings in the Doxygen nightly build. + +Wed Jul 31 12:23:47 2002 Steve Huston + + * ace/Malloc.cpp: + * ace/Malloc_T.cpp: + * tests/Malloc_Test.cpp: Changed logging of pointers to %@ + + * tests/Mem_Map_Test.cpp: Fixed loop bound error. + +Wed Jul 31 11:34:58 2002 Nanbor Wang + + * docs/index.html: Added a link to ACEXML document. + +Wed Jul 31 10:47:54 2002 Chad Elliott + + * include/makeinclude/rules.local.GNU: + + Added a gnu macro (DEPEND_CMD_ARGS) to the g++dep line to allow + pasing arguments (such as -R) to g++dep when running "make depend" + +Wed Jul 31 08:41:12 UTC 2002 Johnny Willemsen + + * ace/config-win32-mingw.h: + For the compilation of Win32_Asynch_IO we now need to have + FILE_SEGMENT_ELEMENT from winnt.h and ReadFileScatter and + WriteFileScatter from winbase.h. + These are not in the header files of the MingW w32api 1.4/1.5 + release. That's why we do these union/defines also in this header + file. By adding the defines ACE_MINGW_LACKS_READWRITE_FILESCATTER + and ACE_MINGW_LACKS_FILE_SEGMENT_ELEMENT to your config.h file + these defines/union are done by ACE for MingW32 so that everything + will compile. + +Wed Jul 31 08:11:12 UTC 2002 Johnny Willemsen + + * etc/Task.cpp: + Also the MinGW32 GCC3.1 compiler has problems with the + reinterpret_cast in the svc_run method. Use the static_cast instead. + +Wed Jul 31 07:40:12 UTC 2002 Johnny Willemsen + + * etc/*.doxygen: + Enabled warnings to get them in the doxygen scoreboard. + + * ace/Configuration.cpp: + Fixed method argument names to fix doxygen warnings. + +Tue Jul 30 15:45:23 2002 Douglas C. Schmidt + + * ace/SOCK_Dgram.h: Fixed the comment for send(), which had a + cut and paste error. Thanks to Jeff Wilson + for reporting this. + +Tue Jul 30 14:09:35 2002 Chad Elliott + + * tests/tests.mpc: + + Update the mpc file to include the libraries. + +Tue Jul 30 09:07:29 2002 Ossama Othman + + * ace/Parse_Node.h: + * ace/Parse_Node.cpp: + + Unexported all classes in this file. They are only meant for + internal use by ACE's Service Configurator. Updated Doxygen + comments accordingly. + + (apply, symbol, open_dll): + + These methods now accept a "yyerrno" reference argument to allow + for modification of the error count in a reentrant manner. + + * ace/Svc_Conf.h: + + Removed "ace_yyerrno" and "ace_yylineno" global variables. + Local ones are now used. + + Altered signature of ace_yyerror() function to accept two + additional parameters, yyerrno and yylineno. Addresses a race + condition. + + * ace/Svc_Conf.y: + + Removed all remnants of the global "yyerrno" and "yylineno" + variables. Only the reentrant versions are used now. + + Pass the "yyerrno" variable as a parameter to all functions that + read or modify the parse error count. Addresses several race + conditions. + + Fixed call to ACE_Location_Node::handle(). This method no + longer exists. The correct call is ACE_Location_Node::dll(). + For some reason, Svc_Conf_y.cpp (a generated file!!!) was + "fixed" but the parser grammar file was never fixed. + + * ace/Svc_Conf.l: + + Removed all remnants of the global "yylineno" variable. Only + the reentrant version is used now. + + * ace/Service_Config.cpp (process_directives_i): + + Removed initialization of "ace_yyerrno" and "ace_yylineno" + global variables. They no longer exist. Poof! + + Reverted my previous change. The above changes obviate the need + to take into account the global parse error count. + + * ace/Makefile: + + Tweaked Svc_Conf_y.cpp and Svc_Conf_l.cpp generation rules so + that yyerrno and yylineno are not prepended with an "ace_". + That is no longer needed. + + * etc/Svc_Conf_y.cpp.diff: + + Regenerated this patch against parsers generated by the latest + GNU Bison (1.35). + + * etc/Svc_Conf_l.cpp.diff: + + Regenerated this patch to pull in new changes to Svc_Conf_l.cpp. + +Tue Jul 30 10:06:04 2002 Douglas C. Schmidt + + * ace/Thread_Manager.cpp: Moved a stray colon until *after* + the #if !defined(ACE_USE_ONE_SHOT_AT_THREAD_EXIT) check. Thanks + to Alan Tanga for reporting this. + + * ace/POSIX_Proactor.cpp (delete_result_aiocb_list): Moved + the definition of size_t ai out of the for loops to avoid + problems on older C++ compilers. Thanks to George Varsamis + for reporting this. + +Tue Jul 30 08:14:34 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + + Added an error check for invalid inheritance syntax. + + * bin/MakeProjectCreator/modules/Driver.pm: + + Changed the progress indicator to allow for cleaner output + when an error occurs. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Remove duplicate libs, libpaths and includes when addition or + subtraction is involved. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Cleaned up the template to make generated Makefiles a little more + consistent. + +Tue Jul 30 06:50:26 2002 Douglas C. Schmidt + + * ace/Dynamic_Service.cpp: Moved ACE_Dynamic_Service::instance() + from the .i file into the .cpp file and added a #include of + "ace/Service_Object.h" to the .cpp file so the complete type of + ACE_Service_Object would be available to the HP/UX C++ compiler. + Thanks to Torsten Kuepper for + reporting this. + +Tue Jul 30 07:51:12 UTC 2002 Johnny Willemsen + + * etc/ace.doxygen: + Enabled warnings and undocument warnings to get these warnings + into the doxygen scoreboard. When this works I will enable the + warnings in all other .doxygen files later. + +Mon Jul 29 14:47:46 2002 Ossama Othman + + * ace/Service_Config.cpp (process_directives_i): + + In addition to the thread-safe yyerrno variable, check the + global ace_yyerrno variable when determining if errors have + occurred when processing Service Configurator directives. + Thanks to Doug for tracking down the problem and suggesting a + fix and to Denginere for reporting this. + +Mon Jul 29 17:30:27 2002 Steve Huston + + * ace/Get_Opt.h (ctor): Changed documented name of the skip_argv0 + argument to skip_args to better reflect that it's not just + argv[0] that can be skipped. + +Mon Jul 29 07:45:12 2002 Johnny Willemsen + + * ace/OS.cpp (uname): Only check for PROCESSOR_ARCHITECTURE_IA64 + when this is defined. The MingW w32api doesn't define this constant. + +Sun Jul 28 17:17:50 2002 Douglas C. Schmidt + + * docs/ACE-subsets.html: Updated the breakdown of files to + each subset component so it's consistent with the + $ACE_ROOT/Makefile. Thanks to Ruslan Zasukhin + for reporting this. + +Sun Jul 28 10:31:12 2002 Johnny Willemsen + + * include/makeinclude/platform_gnuwin32_common.GNU: + Use -mcpu=$(TCPU) instead of -m$(TCPU), because MingW GCC 3.1 + now gives warnings that -m is deprecated. Thanks to Craig Rodrigues + for confirming that -m was already deprecated in GCC 2.95.3 + +Sat Jul 27 17:35:06 2002 Krishnakumar B + + * include/makeinclude/platform_g++_common.GNU (SOFLAGS): + + Allow building of shared libraries with gcc and Solaris ld. + There wasn't any reason that it wouldn't work. + + * Changelog: Remove >>>>> left out by merge conflicts. People + should be more careful about checking for conflicts. + +Sat Jul 27 16:20:19 2002 Douglas C. Schmidt + + * examples/Service_Configurator/Misc/main.cpp (ACE_TMAIN): Changed + the code to be more resilient against errors that occur during + parsing of the svc.conf file. Thanks to Denginere + for motivating this change. + +Sat Jul 27 15:50:12 2002 Johnny Willemsen + + * ACEXML/examples/svcconf/main.cpp: + Made this file compiling with BCB and Unicode + + * ACEXML/examples/svcconf/Svcconf_Handler.h: + Made includes like the other examples so that we can build it with + BCB + + * ACEXML/examples/svcconf/Svcconf_Handler.cpp: + Fixed unused argument warnings + + * ACEXML/examples/svcconf/Makefile.bor: + Added this BCB makefile + + * ACEXML/examples/Makefile.bor + Added svcconf directory + +Fri Jul 26 21:00:32 2002 Balachandran Natarajan + + * ace/TP_Reactor.cpp: Fixed a unused variable warning in g++ + builds. + +Fri Jul 26 20:08:41 2002 Steve Huston + + * include/makeinclude/platform_aix4_g++.GNU: Corrected option for + using threads from -mthreads to -pthread. This may not work with + pre-gcc 3 compilers, but those compilers are busted on AIX anyway. + Added support for buildbits=32 and buildbits=64. Moved in the new + AIX library-building setup from platform_aix_ibm.GNU. + +Fri Jul 26 15:52:12 2002 Balachandran Natarajan + + * ace/TP_Reactor.cpp: Fixed a problem with handle_event + (ACE_Time_Value &). It should be calling the TP_Reactor's + handle_event () instead of Select_Reactor's. This should fix + [BUGID 1257]. + +Fri Jul 26 10:11:41 2002 Chad Elliott + + * bin/MakeProjectCreator/config/messaging.mpb: + * bin/MakeProjectCreator/config/messaging_only.mpb: + + Set up a new base project that just contains information about + the Messaging library. + + * bin/MakeProjectCreator/modules/GNUProjectCreator.pm: + * bin/MakeProjectCreator/templates/gnu.mpd: + + Allow the file lists to contain names of files that correspond + to relative directories. + +Fri Jul 26 06:40:12 2002 Douglas C. Schmidt + + * ace/OS_String.inl: Added casts of the input parameter to + (unsigned char) for the ace_isprint() and ace_isspace() methods + on ACE_OS_String to prevent problems with MSVC++ 7.0. Thanks to + Colin Weaver for suggesting this + fix. + +Fri Jul 26 10:37:12 2002 Johnny Willemsen + + * etc/tao_pss.doxygen: + Added doxygen config file to generate the new TAO PSS. + + * bin/generate_doxygen_pl: + Added tao_pss.doxygen to the list of files to generate. + + * htlm/index.html: + Added link for the new PPS doxygen documentation. + +Thu Jul 25 22:58:24 2002 Balachandran Natarajan + + * ace/Synch.cpp: Removed explicit instantiation of + ACE_Condition since a template + specialization exists. This was causing a compile error when + explicit template instantiations were used with + g++-2.95.3. + +Thu Jul 25 11:32:41 2002 Chad Elliott + + * bin/MakeProjectCreator/README: + + Added a little more detail about what the depends keyword refers + to. + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/Driver.pm: + + Changed the code to show the default type in the usage message. + + * bin/MakeProjectCreator/modules/GNUWorkspaceCreator.pm: + + Change the workspace to use a for loop when building on UNIX. + + * tests/RMCast/tests.mpc: + * tests/SSL/tests.mpc: + + Fixed the case on the dependencies lines. + +Wed Jul 24 13:38:40 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added a progress indicator (for those big workspaces). + +Wed Jul 24 13:10:19 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Add README and readme to the default documentation + files. + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/GUID.pm: + * bin/MakeProjectCreator/modules/VC7ProjectCreator.pm: + + Change the GUID generation code to be deterministic (but still + unique) to allow for multiple solution files to contain the same + project files without having to regenerate the solutions. + +Wed Jul 24 13:42:37 2002 Steve Huston + + * ace/OS.cpp (uname): Added case for PROCESSOR_ARCHITECTURE_IA64 + when decoding processor type. + +Wed Jul 24 10:58:22 2002 Steve Huston + + * ace/Acceptor.cpp (ACE_Acceptor::handle_input): When calling select(), + use a int value instead of casting a ACE_HANDLE to an int. + + * tests/Cached_Accept_Conn_Test.cpp: Use %@ instead of %d when + logging pointers. + + * tests/MT_Reactor_Upcall_Test.cpp: Added ACE_TEXT to char strings + where needed. Changed the send to send fixed header, then the + variable-size string. Sending all at once doesn't work if the + string doesn't immediately follow the size_ member in memory, + which happened on Win64. + +Wed Jul 24 10:07:24 2002 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/USAGE: + + Update the documentation to reflect the current state. + +Wed Jul 24 08:13:48 2002 Christopher Kohlhoff + + * include/makeinclude/build_dll.bor: + * include/makeinclude/build_exe.bor: + * include/makeinclude/build_lib.bor: + * include/makeinclude/make_flags.bor: + Improve debugging support with Borland C++Builder by invoking the + compiler with a full path to each source file. This can be disabled + by setting a NO_FULL_PATH environment variable to 1 or by passing + -DNO_FULL_PATH when running make, which may be necessary when doing + a debug build on Win9x. + +Wed Jul 24 07:45:43 2002 Chad Elliott + + * THANKS: Added Tim Bradley to the hall of fame. + +Tue Jul 23 21:46:54 2002 Nanbor Wang + + * ace/Process_Mutex.h: + * ace/Process_Mutex.cpp: Disallowed anonymous Process_Mutex by + invoking this->unique_name() to create a temporary name if + there's no mutex name passed to the constructor. Thanks John + Michael Zorko for reporting this problem on + Mac OSX and submitting the patch. + +Tue Jul 23 13:08:27 2002 Steve Huston + + * ace/Log_Msg.{h cpp} (log_hexdump): + * ace/ACE.{h cpp} (format_hexdump): Change size arguments from int + to size_t. Change format_hexdump()'s return from int to size_t. + +Tue Jul 23 09:48:15 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/Driver.pm: + + Always add the default include paths. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Make sure that idl generated source files go at the front of the + file list in auto-generates source lists. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Only add LIB and SHLIB assignments if we are generating a Makefile + for libraries. + +Mon Jul 22 22:30:53 2002 Nanbor Wang + + * ACEXML/common/XML_Common.dsp: Added the macro definition + ACEXML_HAS_DLL=1 to the release configuration to resolve a + nightly biuld problem. + +Mon Jul 22 18:28:48 2002 Steve Huston + + * ace/Configuration.h: Doxygen fixes. + +Mon Jul 22 16:57:19 2002 Chris Cleeland + + * bin/g++dep: Added a -R option that allows you to specify a + variable which should be used to generate relative paths if it's + defined. + +Mon Jul 22 17:45:48 2002 Steve Huston + + * ace/Get_Opt.h: Doxygen fixes. + +Mon Jul 22 16:39:21 2002 Steve Huston + + * ace/Acceptor.cpp (info): + * ace/Connector.cpp (info): Cast return val to int. + + * ace/Message_Queue.h (message_count): + * ace/Message_Queue_T.{h cpp i} (message_count): Change return value + from size_t to int. Changed cur_count_ member (and accessors that + return it) from size_t to int. This is a compromise to unify the + length of arguments without changing the return types of all + methods that return a message count (all the enqueue/dequeue methods, + as well as a few others). + Changed a number of @arg to @param for doxygen. + + * ace/SOCK_IO.{h i} (recvv, sendv): + * ace/SOCK_Stream.{h i}(recvv_n, sendv_n): Changed iovcnt arg from + size_t to int. int, though sort of odd as a choice, is the + UNIX98 standard and more commonly implemented. Removes an arg + size mismatch between the SOCK_IO and ACE layers, restricting the + iovcnt range at the SOCK_IO layers to match the layer below. + Changed the recv and send iov-enabled, deprecated methods to cast + their size_t iovcnt args to int... these deprecated methods should + be removed after 5.3 is out. + + * tests/Conn_Test.cpp: Replaced %d with %@ when logging pointers. + Added missing string arg for a ACE_ERROR %p directive. Use a + int select_width instead of casting ACE_HANDLE for Win64. + +Mon Jul 22 15:13:38 2002 Carlos O'Ryan + + * ace/Atomic_Op.h: + * ace/Atomic_Op.i: + Fixed bug 1253, add missing copy constructor. + +Mon Jul 22 13:25:29 2002 Stephen Torri + + * ace/streams.h: Fixed _MSC_VER compiler warning messages stating + concern about using MSC_VER without assurance that the macro + was defined. + +Mon Jul 22 12:20:21 2002 Krishnakumar B + + * THANKS: Added Sean Ogle to the hall of fame. + +Mon Jul 22 09:19:34 2002 Balachandran Natarajan + + * THANKS: Aded Kew Whitney and Colin Weaver to the hall of fame. + +Sat Jul 20 08:53:05 2002 Douglas C. Schmidt + + * ace/SOCK_Dgram.cpp (set_nic): Moved the #endif for + ACE_WIN32 *ahead* of the set_options() call. Thanks to Joe + Hayes for reporting this. + +Fri Jul 19 14:42:37 2002 Steve Huston + + * ace/WFMO_Reactor.cpp (make_changes_in_suspension_infos, + make_changes_in_current_infos): + Fixed bug resulting from: Wed Jul 17 11:34:28 2002 Steve Huston + +Thu Jul 18 15:48:29 2002 Steve Huston + + * ace/Future.h: Doxygenation improvements. + +Thu Jul 18 08:39:08 2002 Chad Elliott + + * bin/MakeProjectCreator/README: + + Update the documentation to reflect the additions to the grammar. + + * bin/MakeProjectCreator/config/avstreamsexe.mpb: + * bin/MakeProjectCreator/config/corba_messaging.mpb: + * bin/MakeProjectCreator/config/minimum_corba.mpb: + * bin/MakeProjectCreator/config/namingexe.mpb: + * bin/MakeProjectCreator/config/notify.mpb: + * bin/MakeProjectCreator/config/orbsvcsexe.mpb: + * bin/MakeProjectCreator/config/orbsvcslib.mpb: + * bin/MakeProjectCreator/config/rt_client.mpb: + * bin/MakeProjectCreator/config/rt_server.mpb: + * bin/MakeProjectCreator/config/rteventexe.mpb: + + Add the GNU specific info for generating conditional target + Makefiles. + + * bin/MakeProjectCreator/modules/GNUProjectCreator.pm: + + Added code to generate the conditional sections of the GNU + Makefiles. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Fix some minor problems with generated project files. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Added template info for conditional targets. + + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Removed the tie class idl targets. + + * bin/ace_components: + + Added a new append option that will be used by the generated GNU + Makefiles. + +Thu Jul 18 06:17:19 2002 Douglas C. Schmidt + + * Doug turns 40 today. Fortunately, 40 Octal is only 32 Decimal ;-). + +Wed Jul 17 15:18:31 2002 Steve Huston + + * ace/Configuration.h: Doxygen improvements. + + * ace/Configuration.cpp: All error cases where a return + (-2, -3, -4, -5) occurred now return -1 with errno set. + + * ace/OS.{i cpp}: Follow-up to Wed Jul 17 11:34:28 2002 Steve Huston + Only make ACE_WIN64 use intptr_t - must have a new SDK to get + intptr_t, and not all have it.... so use it only for ACE_WIN64 + since the compiler comes in the newer SDK... Win32 does + fine with long, which is what an intrptr_t is on Win32. + + Also fixed the PACE-busted conditional compiles around siginfo_t + to match the declaration in OS.h. Win32 needs this stuff. + +Wed Jul 17 14:25:39 2002 Steve Huston + + * include/makeinclude/platform_aix_ibm.GNU: Added -qfuncsect to the + compile options. Allows for smaller executables/libraries, and + gets rid of most of the multiple definition warnings for templates. + Unfortunately, there are still a few stragglers so the aix_shr + post-processing script is still required. + + * ace/Sock_Connect.cpp: Added a hack to get Visual Age C++ on AIX + build running clean. Have to include a template instantiation we + don't need to get the compiler to pull the proper header files + at template compilation time. + +Wed Jul 17 11:34:28 2002 Steve Huston + + * ace/OS.{i cpp}: Windows, in calls to _open_osfhandle(), cast + handle to long for C++Builder. Only MSVC has the intptr_t type. + + * ace/WFMO_Reactor.cpp (make_changes_in_current_infos, + make_changes_in_suspension_infos): Run the index from 0 to + last_valid_slot rather than valid slot down to 0 to allow + correct use of size_t index. + + * ace/WIN32_Proactor.cpp (register_handle, post_completion): Use + a reinterpret_cast, not static_cast to cast void* to ULONG for + non-Win64. + +Wed Jul 17 03:50:56 UTC 2002 Don Hinton + + * ace/ACE.cpp: + * ace/OS.{h,i,cpp}: + * ace/OS_Dirent.inl: + * ace/OS_Memory.h + * ace/OS_String.inl: + * ace/Thread_Manager.cpp: + * ace/WFMO_Reactor.cpp: + * ace/config-all.h: + * ace/config-win32-borland.h: + * ace/config-win32-msvc-5.h: + * ace/config-win32-msvc-6.h: + * include/makeinclude/wrapper_macros.GNU: + + Removed PACE. + +Tue Jul 16 14:19:37 2002 Steve Huston + + * ace/DLL_Manager.cpp: + * ace/Parse_Node.cpp: (also see Fri Jul 12 12:37:42 2002 Steve Huston) + Always use the ptrdiff_t trick to cast a void* to a func ptr. + Nanbor was right ;-) Thanks to Carlos O'Ryan + for clarifying this issue, including C++ chapter and verse. + (It's in ISO C++ section 5.2.10 for those interested). + + * tests/DLL_Test.cpp: Use ptrdiff_t as a mediary to cast a void * + to a func ptr, not a long. + +Mon Jul 15 21:23:47 2002 Balachandran Natarajan + + * ace/Message_Block.i (base): Fixed a warning in TRU 64 builds. + +Mon Jul 15 18:56:47 2002 Douglas C. Schmidt + + * ace/String_Base.cpp (substring): Changed "nil" to "nill" to + avoid conflicts with a Mac OS X macro. Thanks to Ruslan + Zasukhin for reporting this. + +Mon Jul 15 15:18:33 2002 Steve Huston + + * ace/Configuration.{h cpp}: Changed ACE_Configuration_Value_IntId + data_ member to be a union with both pointer and u_int members. + Also, the length_ member is now size_t, not u_int. + + * ace/Memory_Pool.cpp (ACE_Pagefile_Memory_Pool::map): Use + INVALID_HANDLE_VALUE instead of a literal 0xFFFFFFFF for call to + CreateFileMapping. + + * ace/OS.{h i}: New method, void *atop(const char *s) converts a + string to void *. + + * ace/OS.i (fdopen): Don't cast arg to _open_osfhandle - Microsoft + changed the type to something sensible. + (isatty): open a C run-time handle for the ACE_HANDLE. + + * ace/OS.cpp (fopen): Don't cast arg to _open_osfhandle - Microsoft + changed the type to something sensible. + (unique_name): Use sprintf %p for pointer rather than casting + to an int. + + * ace/Naming_Context.cpp (ACE_Name_Options::parse_args): Use + ACE_OS::atop instead of ACE_OS::atoi for converting an argument + to a pointer. + + * ace/SOCK_Dgram.cpp (recv, send): + * ace/SOCK_IO.cpp (recvv): Use an int select_width + to pass width to select() so it can be ignored on ACE_WIN64. + + * ace/SV_Semaphore_Simple.cpp (name_2_key): Disable the type cast + conversion warning casting ACE::crc32() to key_t... it's fine. + + * ace/WIN32_Proactor.cpp (register_handle, post_completion): The + I/O completion port's completionKey argument is a ULONG in + "older" compiler/SDK versions, but was changed to a + ULONG_PTR (new type in newer SDK/compiler) for 64-bit + transition. The new type is used conditionally based on whether or + not we're building a 64-bit version. + +Mon Jul 15 09:26:17 2002 Douglas C. Schmidt + + * ace/SString.cpp (substring): Changed "nil" to "nill" to + avoid conflicts with a Mac OS X macro. Thanks to Ruslan + Zasukhin for reporting this. + +Mon Jul 15 10:14:44 2002 Carlos O'Ryan + + * bin/MakeProjectCreator/README: + Fixed typo + +Sun Jul 14 20:14:16 2002 Douglas C. Schmidt + + * FAQ: Fixed the use of "*.ps.gz" files. Thanks to + Carol Hunsicker for pointing this + out. + +Sun Jul 14 01:55:03 2002 Balachandran Natarajan + + * ace/Message_Block.i (reset_allocators): Reset the allocators in + the chain if the message block is chained. + +Sun Jul 14 01:43:32 2002 Balachandran Natarajan + + * ace/Message_Block.h: + * ace/Message_Block.i: Added two methods viz. reset_allocators () + and access_allocators () to ACE_Message_Block. + +Sat Jul 13 17:29:35 2002 Balachandran Natarajan + + * bin/fuzz.pl: Removed the word "warning" from a print statement, + since our scoreboard scripts seems to catch that as a warning. + +Sat Jul 13 13:31:54 2002 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added the Stack_Recursion test to the + daily builds. + +Fri Jul 12 20:28:52 2002 Krishnakumar B + + * ACEXML/common/URL_Addr.cpp (string_to_addr): + + Fixed confusion in handling normal and wchar strings. It should + compile now without problems. + + * ACEXML/apps/svcconf/Svcconf_Handler.cpp: + * ACEXML/apps/svcconf/Svcconf_Handler.i: + + Fixed memory leaks, some typos and used the locator to print + out error messages. + +Fri Jul 12 17:55:08 2002 Carlos O'Ryan + + * ace/String_Base.i: + Fixed rfind() to check for pos == npos also, that solved the + regression test failures. + +Fri Jul 12 16:03:22 2002 Steve Huston + + * ace/Basic_Types.h: Itanium is little-endian, like x86. Although + the Itanium architecture allows big-endian operation, Windows + doesn't use it. + + * tests/test_config.h (randomize): Fixed some int/size_t mix-ups. + +Fri Jul 12 13:02:51 2002 Steve Huston + + * ace/String_Base.{h i} (rfind): Changed pos argument from size_t to + ssize_t to make proper use of npos and avoid compile error for + g++ 2.95.2. + +Fri Jul 12 12:37:42 2002 Steve Huston + + * ace/DLL_Manager.cpp: + * ace/Parse_Node.cpp: g++ complains that ISO C++ won't allow cast + from void * to func ptr... so cast void * to ptrdiff_t, then to + func ptr. + +Fri Jul 12 12:26:27 2002 Steve Huston + + * ace/Timer_Heap_T.cpp (ctor): Alloc timer_ids_ as ssize_t[], + not long[]. + + * examples/C++NPv2/TPCLS.dsp: Added SSL libraries to link input. + + * examples/C++NPv2/TPLS.dsp: Added Logging_Handler.{h cpp} to project. + +Fri Jul 12 12:15:49 2002 Steve Huston + + * ace/Timer_Heap_T.cpp (grow_heap): Fix compile warning. + +Thu Jul 11 21:09:36 2002 Nanbor Wang + + * Makefile.bor: Added a new BUILD target called "nightlybuild" to + simplify nightlybuild script. + +Thu Jul 11 20:42:52 2002 Nanbor Wang + + * ace/OS.i (creat): The Win32 implementation of this function was + broken. Thanks to Marvin Greenberg + for submitting the fix. + +Thu Jul 11 18:37:35 2002 Krishnakumar B + + * ACEXML/common/URL_Addr.cpp (string_to_addr): + * ACEXML/common/URL_Addr.h: + + Change the argument to match the base class INET_Addr so that + warnings under Borland BCB is eliminated. + + * ACEXML/common/HttpCharStream.cpp: + + Use ACE_TEXT_ALWAYS_CHAR to convert an Unicode URL to char* + before converting it to an address. Thanks to Nanbor for + pointing this out. + + * ACEXML/common/Makefile: + * ACEXML/common/StreamFactory.h: + * ACEXML/common/StreamFactory.cpp: + + New class to create appropriate streams based on the URI. This + is needed for handling the parameter entities. + + * ACEXML/examples/SAXPrint/main.cpp: + + Move common error message to a new usage function. + +Thu Jul 11 16:28:24 2002 Steve Huston + + * tests/Proactor_Scatter_Gather_Test.cpp: Changed Writer to derive + from ACE_Handler, not ACE_Service_Handler. It's not the target of + an asynch connection factory, and declares an open() method that + hides the one in ACE_Service_Handler. + +Thu Jul 11 16:15:49 2002 Steve Huston + + * examples/C++NPv2/SR_Configurable_Logging_Server.dsp: + * examples/TPCLS.dsp: + * examples/TPLS.dsp: + * examples/C++NPv2/examples.dsw: Added SR_Configurable_Logging_Server, + TPCLS, and TPLS projects. + + * examples/C++NPv2/TPC_Logging_Server.h: Use ACE traits macros to + allow build on Win32. + * examples/C++NPv2/TPC_Logging_Server.cpp: Fix build problems on + Win32. + + * examples/TP_Logging_Server.h (init): Added #include "ace/Auto_Ptr.h" + and corrected use of ACE_NEW_NORETURN; use ACE_Auto_Ptr::get() to get + the argv pointer. + +Thu Jul 11 15:03:47 2002 Steve Huston + + * ace/ace_dll64.mak: TEMPORARILY added /wd4267 to disable the + conversion size_t to int warning. + + * ace/Activation_Queue.{h i} (method_count): Change return type + from int to size_t. + + * ace/Arg_Shifter.cpp (cur_arg_strncasecmp): Change flag_length var + to size_t to match string function signatures. If returning a + 'remaining' length, cast back to int. + + * ace/ARGV.cpp (ctor): Build string length using size_t, not int. + + * ace/CDR_Base.cpp (ACE_CDR::consolidate): Use ptrdiff_t, not the + nonstandard ptr_arith_t. + + * ace/CDR_Stream.cpp (grow_and_adjust): Use ptrdiff_t, notptr_arith_t. + (write_string): Cast ACE_SString:length result to ACE_CDR::ULong. + A number of other size_t<->ACE_CDR::ULong casts. + + * ace/CDR_Stream.i (write_string, operator<<): Use a ACE_CDR::ULong + len, can't directly use the return from strlen(), a size_t. + + * ace/Codecs.cpp: size_t conversions. + + * ace/DEV_Addr.i (set): Cast strlen result to int for base_set. + + * ace/DEV_IO.{i cpp} (send, recv): Cast iovec count from size_t to + int for call to ACE_OS level. + + * ace/Hash_Map_Manager_T.{h, i, cpp} (shared_find): Change loc argument + from u_long to size_t. Better match for its use. + + * ace/OS.h (ACE_align_binary, ACE_ptr_align_binary): Change from + using ptr_arith_t to the standard ptrdiff_t. + + * ace/DLL_Manager.cpp: + * ace/Parse_Node.cpp: Avoid casting a void * to a long then back to a + function pointer. Cast using proper calling signature. + + * ace/Reactor_Impl.h (ACE_Reactor_Notify::notify): + * ace/Select_Reactor_Base.{h cpp} (ACE_Select_Reactor_Notify::notify): + Change return type from ssize_t to int to match advertised return + type from ACE_Reactor. + + * ace/Select_Reactor_T.cpp (check_handles): Use an int select_width + to pass width to select() so it can be ignored on ACE_WIN64. + + * ace/String_Base_Const.{h cpp}: Changed npos from int to ssize_t. + + * ace/String_Base.{h i}: (operator[]) changed slot arg from int + to size_t. (strstr(), find(), rfind()) changed return type from + int to ssize_t; change pos arg from int to size_t. + + * ace/Timer_Heap_T.{h cpp}: Change 'slot' arg from int to size_t. + Also changed timer_ids_ to use ssize_t rather than long to + avoid length mismatches between the max size and the timer + queue (a size_t) and the arrays. + + * ace/WFMO_Reactor.h (ACE_WFMO_Reactor_Notify): Change return type + from ssize_to to int to match corresponding change in + ACE_Reactor_Notify, above. The implementation already was returning + int. + + * ace/WFMO_Reactor.cpp (make_changes_in_current_infos, + make_changes_in_suspension_infos): Align use of size_t. + (wait_for_multiple_events)...........Should maybe make the + sizes in this class DWORD????? + + * ace/WIN32_Proactor.cpp (close, handle_events): completion_key + needs to be a different on Win64 than on Win32. + +Thu Jul 11 08:34:22 2002 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/Driver.pm: + + Added new options and documentation dealing with generation of + relative paths in projects. + +Wed Jul 10 11:46:02 2002 Mayur Deshpande + + * bin/auto_run_tests.lst: + + Added tests/AMH_Exception and examples/AMH/Sink_Server as tests + for AMH + +Wed Jul 10 13:31:49 2002 Steve Huston + + * examples/C++NPv2/CLD.dsp: + * examples/C++NPv2/examples.dsw: Added CLD project. + + * examples/Client_Logging_Daemon.cpp: Disable the info, suspend, and + resume methods - these are left as an exercise for the reader. + +Wed Jul 10 11:24:39 2002 Steve Huston + + * examples/C++NPv2/AIO_CLD.dsp: + * examples/C++NPv2/examples.dsw: Added AIO_CLD project. + + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: Fix Win32 compile + problems. + +Wed Jul 10 07:22:24 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + If the project creator needs the slashes converted, then + do so when generating relative paths. + +Tue Jul 9 23:24:44 2002 Krishnakumar B + + * include/makeinclude/rules.local.GNU: + + Print out more explanative messages. + + * include/makeinclude/platform_osf1_4.x_cxx.GNU: + * include/makeinclude/platform_sunos5_sunc++.GNU: + + Turn on symbol versioning for these platforms with the + proprietary compilers that ships with these systems viz, Sun CC + and cxx. + + +Tue Jul 9 16:24:46 2002 Douglas C. Schmidt + + * ace/Containers_T.cpp: Fixed inconsistent initializer order for + ACE_Fixed_Stack and ACE_Bounded_Stack. Thanks to Michael + Searles for reporting this. + +Tue Jul 9 11:10:38 2002 Steve Huston + + * apps/Gateway/Peer/Peer.{h cpp}: Renamed Peer_Acceptor::open() + to Peer_Acceptor::start() to avoid clashes with virtual + ACE_Acceptor::open. + +Tue Jul 9 09:01:14 2002 Chad Elliott + + * bin/MakeProjectCreator/config/taolib_with_idl.mpb: + + Change the default tao_idl option from -Gs to -Sc. + +Tue Jul 9 08:07:20 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + When using Cygwin Perl, we need to convert the cwd to a windows + path to match up with environment variables that are usable + outside of Cygwin. + +Tue Jul 9 07:46:57 2002 Chad Elliott + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Fix up the relative value matching code to work correctly + on Windows. + +Tue Jul 9 07:31:48 2002 Chad Elliott + + * ace/ace.mpc: + * ace/QoS/qos.mpc: + * ace/RMCast/rmcast.mpc: + * ace/SSL/ssl.mpc: + * apps/gperf/src/gperf.mpc: + * tests/tests.mpc: + * tests/RMCast/tests.mpc: + * tests/SSL/tests.mpc: + + Input files for the Make Project Creator for just the basic + libraries, exe's and tests. + +Tue Jul 9 07:24:06 2002 Chad Elliott + + * bin/mpc.pl: + * bin/mwc.pl: + + The starting point for creating workspaces and projects. + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/USAGE: + + A bit of lite documentation on the Make Project Creator. + + * bin/MakeProjectCreator/config/aceexe.mpb: + * bin/MakeProjectCreator/config/acelib.mpb: + * bin/MakeProjectCreator/config/aceversion.mpb: + * bin/MakeProjectCreator/config/avstreamsexe.mpb: + * bin/MakeProjectCreator/config/client.mpb: + * bin/MakeProjectCreator/config/global.mpb: + * bin/MakeProjectCreator/config/messaging.mpb: + * bin/MakeProjectCreator/config/namingexe.mpb: + * bin/MakeProjectCreator/config/notify.mpb: + * bin/MakeProjectCreator/config/notifytest.mpb: + * bin/MakeProjectCreator/config/orbsvcsexe.mpb: + * bin/MakeProjectCreator/config/orbsvcslib.mpb: + * bin/MakeProjectCreator/config/rt_client.mpb: + * bin/MakeProjectCreator/config/rt_server.mpb: + * bin/MakeProjectCreator/config/rteventexe.mpb: + * bin/MakeProjectCreator/config/server.mpb: + * bin/MakeProjectCreator/config/strategies.mpb: + * bin/MakeProjectCreator/config/taoexe.mpb: + * bin/MakeProjectCreator/config/taolib.mpb: + * bin/MakeProjectCreator/config/taolib_with_idl.mpb: + * bin/MakeProjectCreator/config/taoversion.mpb: + + Base projects for most of ACE and TAO. + + + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/GUID.pm: + * bin/MakeProjectCreator/modules/Parser.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateInputReader.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + The main modules of the Make Project Creator which provide most of + the functionalty. + + * bin/MakeProjectCreator/modules/BorlandProjectCreator.pm: + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/EM3ProjectCreator.pm: + * bin/MakeProjectCreator/modules/EM3WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/GHSProjectCreator.pm: + * bin/MakeProjectCreator/modules/GHSWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/GNUProjectCreator.pm: + * bin/MakeProjectCreator/modules/GNUWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/NMakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VA4ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VA4WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC6ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC6WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC7ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm: + + Subclassed workspace and project creators. + + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/bordll.mpt: + * bin/MakeProjectCreator/templates/borexe.mpt: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplib.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + * bin/MakeProjectCreator/templates/ghs.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/gnudll.mpt: + * bin/MakeProjectCreator/templates/gnuexe.mpt: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/nmakedll.mpt: + * bin/MakeProjectCreator/templates/nmakeexe.mpt: + * bin/MakeProjectCreator/templates/va4icc.mpd: + * bin/MakeProjectCreator/templates/va4iccdll.mpt: + * bin/MakeProjectCreator/templates/va4iccdllexe.mpt: + * bin/MakeProjectCreator/templates/va4icclib.mpt: + * bin/MakeProjectCreator/templates/va4icclibexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc6dspdll.mpt: + * bin/MakeProjectCreator/templates/vc6dspdllexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsplib.mpt: + * bin/MakeProjectCreator/templates/vc6dsplibexe.mpt: + * bin/MakeProjectCreator/templates/vc7.mpd: + * bin/MakeProjectCreator/templates/vc7dll.mpt: + * bin/MakeProjectCreator/templates/vc7exe.mpt: + + Template and template input files for all of the different project + creators. + +Tue Jul 9 07:21:29 2002 Chad Elliott + + * ace/Map_T.h: + * ace/Map.cpp: + * ace/Pair_T.h: + * ace/Pair.cpp: + + Remove the use of Map.h and Pair.h. + + * ace/gethrtime.cpp: + + Only compile the contents of this file if using GHS and are + building for the x86. + +Mon Jul 8 17:26:51 2002 Steve Huston + + * ace/Task.cpp (svc_run): Borland complains about reinterpret_cast from + int to unsigned long, so change the cast to ACE_THR_FUNC_RETURN to + a static_cast for that compiler. Thanks to Johnny Willemsen + for this fix. + +Fri Jul 5 10:30:44 2002 Douglas C. Schmidt + + * ace/Array_Base.cpp: Swapped the order of includes so that + Array_Base.h comes after Malloc_Base.h. Thanks to Al Pariante + for reporting this. + +Thu Jul 4 11:27:05 2002 Douglas C. Schmidt + + * Happy 226th Birthday USA! + +Sat Jul 06 19:32:40 2002 Balachandran Natarajan + + * ace/Time_Value.h (ACE_Time_Value): Fix for [BUGID 1240]. Some of + the operators were missing explicit declarations in the header + file (they were anyway defined in the inlined files) which + created problems in builds where inlining was diabled. Please + see + + http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1240 for + more details. Thanks to Marina Spivak for + reporting this. + +Fri Jul 5 18:44:39 2002 Steve Huston + + * ace/ACE.cpp: Corrected undeclared 'select_width' errors and + signed/unsigned mismatch warnings. + +Fri Jul 5 16:14:51 2002 Steve Huston + + * ace/OS.{h i} (send, sendto, recv, recvfrom): Change 'len' argument + from int to size_t. + Removed conditional typedef of ssize_t; it's done in Basic_Types.h. + + * ace/ACE.h (recv): Filled in documentation for varargs variant. + * ace/ACE.cpp (send, recv): Properly convert size_t 'count' arg to int + iovec count for call to ACE_OS::sendv/recvv(). + (handle_timed_accept, handle_timed_complete, handle_ready): Use + an int select_width for ACE_OS::select() calls to get the types + correct. This arg is ignored on Windows anyway. + + * ace/Basic_Types.h: If ACE_HAS_SSIZE_T not defined, and Win64, + typedef SSIZE_T ssize_t; else use the existing int typedef. + +Wed Jul 3 11:09:31 2002 Steve Huston + + * tests/SSL/Thread_Pool_Reactor_SSL_Test.cpp: + Change thread function to return ACE_THR_FUNC_RETURN, not void *. + +Tue Jul 02 21:43:53 2002 Nanbor Wang + + * ACEXML/common/XMLFilterImpl.h: One more pre/post mismatch. + +Tue Jul 2 16:58:55 2002 Krishnakumar B + + * ACEXML/common/XML_Types.h: + + Removed unnecessary includes and fixed a typo. + +Tue Jul 02 16:35:19 2002 Nanbor Wang + + * ACEXML/common/Attributes.h: + * ACEXML/common/Locator.h: Fixed mismatched pre/post inclusions. + + * ACEXML/parser/parser/Parser.cpp: Fixed compilation errors. + +Tue Jul 2 11:53:29 2002 Steve Huston + + * ace/config-all.h: Changed definition of ACE_THR_FUNC to incorporate + the platform's thread function return type (DWORD on Windows, + void * on most others). Uses a new typedef ACE_THR_FUNC_RETURN + to specify the platform's thread function return type. + + * ace/OS.{h i cpp} (thr_exit, thr_join): The status arg is now + a ACE_THR_FUNC_RETURN *. + Also moved remaining thread function definition type things to + config-all.h with the rest of them. + + * ace/Base_Thread_Adapter.{h cpp} (invoke(), ace_thread_adapter()): + * ace/OS_Thread_Adapter.{h cpp} + * ace/Thread_Adapter.{h cpp} (invoke(), invoke_i()): + Return type changed from void * to ACE_THR_FUNC_RETURN. + + * ace/Event_Handler.{cpp h} (read_adapter): Change return value from + void* to ACE_THR_FUNC_RETURN. + + * ace/Thread_Hook.{h cpp}: ACE_Thread_Hook::start () returns + ACE_THR_FUNC_RETURN, not void *. + + * ace/Thread.{h i} (exit, join): 'status' arg is now + ACE_THR_FUNC_RETURN *, not void *. + + * ace/Thread_Control.{h inl cpp} (status, exit): + * ace/Thread_Manager.{h cpp} (exit, join): Thread exit status + type changed from void * to ACE_THR_FUNC_RETURN. + + * ace/Task.{h cpp} (ACE_Task_Base): Return type from svc_run now + ACE_THR_FUNC_RETURN. + + * examples/C++NPv1/RT_Thread_Per_Connection_Logging_Server.cpp: + * examples/C++NPv1/Thread_Per_Connection_Logging_Server.{cpp, h}: + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: + * examples/C++NPv2/Server_Shutdown.cpp: + * examples/C++NPv2/TP_Reactor_Logging_Server.cpp: + * examples/C++NPv2/WFMO_Reactor_Logging_Server.cpp: + * examples/C++NPv2/Client_Logging_Daemon.cpp: + * examples/Connection/blocking/SPIPE-acceptor.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-server.cpp: + * examples/Reactor/WFMO_Reactor/Abandoned.cpp: + * performance-tests/TCP/tcp_test.cpp: + * tests/ACE_Init_Test.cpp: + * tests/MEM_Stream_Test.cpp: + * tests/Service_Config_DLL.cpp: + * tests/Task_Test.cpp: + * tests/Thread_Pool_Reactor_Resume_Test.cpp: + * tests/Thread_Pool_Reactor_Test.cpp: + Change thread function to return ACE_THR_FUNC_RETURN, not void *. + + * examples/C++NPv2/TP_Logging_Server.cpp (handle_input, svc): + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp (open): + * examples/C++NPv2/display_logfile.cpp (svc): Change + ACE_reinterpret_cast to ACE_static_cast. Thanks to Doug Schmidt + for finding this. + + * examples/C++NPv2/TP_Logging_Server.h: + * examples/C++NPv2/Reactor_Logging_Server_Adapter.cpp: Corrected use + of ACE_NEW_RETURN. + +Mon Jul 1 23:16:47 2002 Jeff Parsons + + * */Makefile: + + Updated dependencies. + +Mon Jul 1 21:59:44 2002 Krishnakumar B + + * ACEXML/common/Attributes.h: + * ACEXML/common/AttributesImpl.h: + * ACEXML/common/Attributes_Def_Builder.h: + * ACEXML/common/CharStream.h: + * ACEXML/common/ContentHandler.h: + * ACEXML/common/DTDHandler.h: + * ACEXML/common/DTD_Manager.h: + * ACEXML/common/DefaultHandler.h: + * ACEXML/common/Element_Def_Builder.h: + * ACEXML/common/EntityResolver.h: + * ACEXML/common/Env.h: + * ACEXML/common/ErrorHandler.h: + * ACEXML/common/Exception.h: + * ACEXML/common/FileCharStream.h: + * ACEXML/common/HttpCharStream.h: + * ACEXML/common/InputSource.h: + * ACEXML/common/Locator.h: + * ACEXML/common/LocatorImpl.h: + * ACEXML/common/Mem_Map_Stream.h: + * ACEXML/common/NamespaceSupport.h: + * ACEXML/common/SAXExceptions.h: + * ACEXML/common/StrCharStream.h: + * ACEXML/common/Transcode.h: + * ACEXML/common/URL_Addr.h: + * ACEXML/common/Validator.h: + * ACEXML/common/XMLFilter.h: + * ACEXML/common/XMLFilterImpl.h: + * ACEXML/common/XMLReader.h: + * ACEXML/common/XML_Codecs.h: + * ACEXML/common/XML_Types.h: + * ACEXML/parser/debug_validator/Debug_Attributes_Builder.cpp: + * ACEXML/parser/debug_validator/Debug_Attributes_Builder.h: + * ACEXML/parser/debug_validator/Debug_DTD_Manager.h: + * ACEXML/parser/debug_validator/Debug_Element_Builder.h: + * ACEXML/parser/debug_validator/Element_Tree.h: + * ACEXML/parser/parser/Entity_Manager.h: + * ACEXML/parser/parser/Parser.cpp: + * ACEXML/parser/parser/Parser.h: + + ACE_LACKS_PRAGMA_ONCE fixes. + +Mon Jul 1 06:21:00 2002 Douglas C. Schmidt + + * ace/Sock_Connect.cpp (count_interfaces): Added a MacOSX-specific + value for OSIOCGIFCONF. Thanks to John Zorko + for this fix. diff --git a/ACE/ChangeLogs/ChangeLog-03a b/ACE/ChangeLogs/ChangeLog-03a new file mode 100644 index 00000000000..930128362db --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-03a @@ -0,0 +1,1339 @@ +Thu Feb 20 19:18:17 2003 Balachandran Natarajan + + * ChangeLogs/ChangeLog-02b: + * ChangeLogs/ChangeLog-03a: New files having all the old ChangeLog + entries till 5.3.1. + * ChangeLog: Shortened the changelog for ease of use. + +Thu Feb 20 10:35:15 2003 Ossama Othman + + * ace/Strategies_T.h: + * ace/Strategies_T.cpp: + + Reverted part of changes that introduced extensive use of + traits since they were forcing the introduction of the + ACE_TYPENAME macro in more places than is desirable at this + point in time. They may be reintroduced in the future. + +Thu Feb 20 09:24:00 2003 Ossama Othman + + * ace/Service_Config.h: + + Forward declare ACE_Service_Object. Necessitated by inter-header + dependency reductions. + +Thu Feb 20 09:23:51 2003 Ossama Othman + + * ace/Acceptor.h: + * ace/Connector.h: + + No need to include "ace/Service_Config.h" and + "ace/Svc_Handler.h". + + Include "ace/Synch_Options.h". Necessitated by inter-header + dependency reductions. + + * ace/Acceptor.cpp: + * ace/Connector.cpp: + + Include "ace/Svc_Handler.h". Necessitated by inter-header + dependency reductions. + + * ace/Atomic_Op.h: + + Fixed doxygen documentation. + + * ace/Atomic_Op.i (operator++, operator--): + + Implement these post{in,de}crement operators in terms of their + corresponding pre{in,de}crement operators to ensure consistent + semantics. + + * ace/Atomic_Op_T.h (mutex_, own_mutex_): + + Improved const-correctness by making these mutex members + mutable. This allows us to avoid casting away the constness. + + * ace/Atomic_Op_T.i (operator==, operator>=, operator>): + (operator<=, operator<, value, operator=): + + Do not cast away the constness of the mutex. That hack is no + longer necessary since the mutex is now mutable. + + * ace/Basic_Types.h: + + Improved doxygen documentation. + + Moved endianness determination macros prior to ACE_U_LongLong + class. + + (operator=): + + Added ACE_ULongLong assignment operator declarations that accept + 32 bit signed and unsigned integers. + + (operator++, operator--): + + Added missing ACE_ULongLong post{in,de}crement operator + declarations. + + (data_): + + Make declaration order of lower and upper 32 bit members (lo_ + and hi_) of this structure dependant on the endianness of the + platform. This mimics what is done for the ACE_LongLong type + in the ACE_CDR classes. + + * ace/Basic_Types.i (operator=): + + Added ACE_ULongLong assignment operator implementation that + accept 32 bit signed and unsigned integers. + + (operator++, operator--): + + Added missing ACE_ULongLong post{in,de}crement operator + implementations. + + * ace/CDR_Base.cpp (mb_align): + + Uninlined this method in order to reduce inter-header + dependencies. + + (operator<, operator<=, operator>, operator>=, operator==): + (operator!=): + + Added these missing operator for the ACE_LongLong type. + + (Float, operator=, operator!=): + + Fixed potential unused argument warnings for the Cray/UNICOS + case. + + * ace/CDR_Base.h: + + Include "ace/OS.h" instead of "ace/Message_Block.h", and forward + declare ACE_Message_Block in order to reduce inter-header + dependencies. + + Changed all uses of typedefs like "u_char" and "u_long" to their + non-typedef counterparts, e.g. "unsigned char" and "unsigned + long". Makes it possible to avoid including headers that + contain those typedefs. + + (operator=): + + Added ACE_LongLong constructors assignment operators that accept + 32-bit integers. + + (operator==, operator!=, operator<=, operator<, operator>=): + (operator>): + + Added these missing ACE_LongLong relation operators. + + * ace/CDR_Base.inl (operator=): + + Added ACE_LongLong constructors assignment operators that accept + 32-bit integers. + + (operator==, operator!=, operator<=, operator<, operator>=): + (operator>): + + Added these missing ACE_LongLong relation operators. + + * ace/CDR_Stream.h: + + Moved definition of the ACE_CDR_BYTE_ORDER macros from OS.h to + this header. Helps with header dependency reduction. + + * ace/Capabilities.h: + + Use ACE_Hash_Map_Manager_Ex instead of ACE_Hash_Map_Manager. + Doing so saves us three template instantiations. + + * ace/Capabilities.i: + + Cosmetic changes. + + * ace/Capabilities.cpp: + + No need to include "ace/Map_Manager.h". + + Added missing ACE_RCSID macro. + + Improved conformance to ACE coding conventions. + + Removed explicit template instantiations for the + ACE_Hash_Map_Manager template. That template is no longer + used. + + (reset_caps): + + Use ACE_Hash_Map_Manager_Ex template traits instead of the + actual template type. Makes for cleaner code. + + * ace/Configuration.cpp: + * ace/Configuration.h: + * ace/Strategies_T.cpp: + * ace/Token_Collection.cpp: + * ace/Token_Collection.h: + * ace/Token_Invariants.cpp: + * ace/Token_Invariants.h: + * ace/Token_Manager.cpp: + * ace/Token_Manager.h: + * ace/WIN32_Asynch_IO.cpp: + * ace/WIN32_Asynch_IO.h: + + Take advantage of template traits to improve clarity of code. + + * ace/Copy_Disabled.h: + + Corrected comment. + + * ace/Default_Constants.h: + + Moved ACE_DEFAULT_CDR_BUFSIZE, ACE_DEFAULT_CDR_EXP_GROWTH_MAX, + ACE_DEFAULT_CDR_LINEAR_GROWTH_CHUNK, + ACE_DEFAULT_CDR_MEMCPY_TRADEOFF macros from OS.h to this + header. Helps with inter-header dependency reduction. + + * ace/Dynamic_Service_Base.cpp: + * ace/Parse_Node.cpp: + * ace/Service_Manager.cpp: + * ace/Service_Repository.cpp: + * ace/Svc_Conf.y: + * ace/Svc_Conf_y.cpp: + + Include "ace/Service_Types.h". Necessitated by inter-header + dependency reduction. + + * ace/Filecache.h: + * ace/Filecache.cpp: + * ace/Hash_Map_With_Allocator_T.h: + * ace/Hash_Map_With_Allocator_T.cpp: + * ace/Local_Name_Space_T.h: + * ace/Local_Name_Space.cpp: + + Use ACE_Hash_Map_Manager_Ex instead of ACE_Hash_Map_Manager. + Doing so saves us three template instantiations. + + * ace/Future_Set.h: + * ace/Map_T.h: + + Include "ace/Hash_Map_Manager_T.h" instead of + "ace/Hash_Map_Manager.h". The former is all that is needed, and + the latter already includes the former. + + * ace/Hash_Map_Manager_T.i (operator++, operator--): + * ace/Map_Manager.i: + * ace/RB_Tree.i: + + Implement the post-{in,de}crement operators in terms of their + pre-{in,de}crement operator counterparts to ensure consistency. + + * ace/Local_Name_Space_T.cpp: + + No need to include "ace/Auto_Ptr.h" + + Use template traits to improve code clarity. + + * ace/OS.h: + + Moved ACE_CDR_BYTE_ORDER macro definition to CDR_Stream.h. + Helps with inter-header dependencies. + + Moved ACE_DEFAULT_CDR_BUFSIZE, ACE_DEFAULT_CDR_EXP_GROWTH_MAX, + ACE_DEFAULT_CDR_LINEAR_GROWTH_CHUNK, + ACE_DEFAULT_CDR_MEMCPY_TRADEOFF to Default_Constants.h. Helps + with inter-header dependency reduction. + + * ace/POSIX_Asynch_IO.cpp: + + Added missing ACE_RCSID macro. + + (bytes_transferred): + Use map template traits to improve code clarity. + + * ace/POSIX_Asynch_IO.h: + + Redefined old map typedefs in terms of the map traits. + + * ace/Parse_Node.h: + * ace/Service_Repository.h: + + No need to include "ace/Service_Types.h". A forward declaration + for ACE_Service_Types is enough. + + * ace/Service_Config.h: + + No need to include "ace/Service_Types.h" and "ace/Signal.h". + Forward declaring ACE_Service_Types and ACE_Sig_Adapter is + enough. + + * ace/Strategies_T.h: + + No need to include "ace/Service_Config.h" and + "ace/Synch_Options.h". + + * ace/Synch_Options.h: + + Changed all uses of typedefs like "u_char" and "u_long" to their + non-typedef counterparts, e.g. "unsigned char" and "unsigned + long". Makes it possible to avoid including OS.h. A big win in + compile time reduction. + + Include "ace/Time_Value.h". Necessitated by inter-header + dependency reduction. + + * ace/Synch_Options.cpp: + + Changed all uses of typedefs like "u_char" and "u_long" to their + non-typedef counterparts, e.g. "unsigned char" and "unsigned + long". Makes it possible to avoid including OS.h. A big win in + compile time reduction. + + Include "ace/Trace.h". Necessitated by inter-header + dependency reduction. + + * ace/Template_Instantiations.cpp: + + Removed all ACE_Hash_Map_Manager related template + instantiations. The ones for ACE_Hash_Map_Manager_Ex are all + that are needed. + + * ace/SSL/SSL_SOCK_Acceptor.h (ACE_SSL_SOCK_Acceptor): + + Inherit privately from ACE_SSL_SOCK, instead of publically. + ACE_SSL_SOCK_Acceptor is IMPLEMENTED-IN-TERMS-OF ACE_SSL_SOCK. + It does not satisfy the IS-A relationship. + + * ace/SSL/SSL_SOCK_Connector.cpp (ssl_connect): + + Use ACE_Countdown_Time to take into account the time between + each call to select() instead of using the same timeout value in + each loop iteration. + + * ace/SSL/SSL_SOCK_Stream.cpp (get_remote_addr): + + Retrieve the remote addr from the parent ACE_SSL_SOCK class, not + ACE_SOCK. Addresses potential inconsistencies in the future. + + * ace/SSL/SSL_SOCK_Stream.h (ACE_SSL_SOCK_Stream): + + Removed friend declarations for the + ACE_SSL_SOCK_{Acceptor,Connector} classes. They are + unnecessary. + +Wed Feb 19 12:50:58 2003 Heather Drury + + * ACE version 5.3.1 released. + +Mon Feb 17 15:21:18 2003 Balachandran Natarajan + + * bin/auto_run_tests.lst: The Server_Protocol and the ORB_init + test in RTCORBA will not run in ST builds since the operations + ACE_OS::thr_getprio () are not supported. + +Fri Feb 14 09:53:43 2003 Rich Seibel + + * ace/config-osf1-4.0.h: Tru64 lacks the clearerr + function when built without threads (thread=0). + Thanks to Abhay Kulkarni + for reporting the problem. + +Thu Feb 13 17:50:07 2003 Krishnakumar B + + * include/makeinclude/rules.lib.GNU: Build static libraries + using xargs with the list of all the object files instead of + using them directly on the command line. This works around + brokenness of systems that have a small limit on the length of + the command-line arguments. Thanks to Abhay Kulkarni + for reporting the problem. + +Thu Feb 13 12:43:27 2003 Pradeep Gore + + * bin/auto_run_tests.lst: + Added TAO/examples/RTCORBA/Activity/run_test.pl to this list. + +Thu Feb 13 07:36:40 2003 Balachandran Natarajan + + * THANKS: Added Dmitri Belogaj to the hall of fame. + +Wed Feb 12 12:40:21 2003 Balachandran Natarajan + + * bin/auto_run_tests.lst: Prevented a few RTCORBA tests to be run + in our daily builds since changing priorities requires root + access. + +Wed Feb 12 12:06:05 2003 Balachandran Natarajan + + * ace/Strategies.h: Added this file for backward + compatibility. Backward compatibility was broken with the + following checkin + + "Tue Nov 20 12:48:39 2001 Balachandran Natarajan + ". Thanks to Dmitri Belogaj + for reporting this problem. + +Wed Feb 12 10:18:21 2003 Nanbor Wang + + * bin/MakeProjectCreator/templates/vc7.mpd: Checked in Chad's + missing ssl_libs fix. + +Wed Feb 12 08:59:12 UTC 2003 Johnny Willemsen + + * ace/UPIPE_Addr.h: + Removed ACE_UPIPE_Addr class which isn't used, typedef ACE_UPIPE_Addr + still is there. + +Tue Feb 11 22:19:39 2003 Krishnakumar B + + * examples/DLL/Makefile.Today (SHLIB): + * examples/DLL/Makefile.Newsweek (SHLIB): + + Removed extra space at the end which caused compilation to + break. Thanks to Bill Cassanova for + reporting the problem. + +Wed Feb 12 00:00:12 UTC 2003 Craig Rodrigues + + * ace/OS.h: + * ace/OS.i (thr_setprio): Add a new default thr_policy parameter which + allows us to explicitly set the policy in pthread_setschedparam(). + Introduced to eliminate a bug discovered in RT-CORBA implementation. + +Tue Feb 11 14:01:21 2003 Nanbor Wang + + * vc7_nightly.mwc: Added a temporary file specifying core nightly + build targets. Notice this file includes both ACE and TAO. + + * ace/ace.mpc: Added XML_Svc_Conf.cpp. + + * ace/SSL/ssl.mpc: Fixed dllflags setting. + +Mon Feb 10 18:08:12 2003 Balachandran Natarajan + + * THANKS: Added Otis Nyandoro to the hall of fame. + +Mon Feb 10 18:02:41 2003 Steve Huston + + * ace/OS.h: Don't special-case SEH support on ACE_HAS_WINCE. First, + CE can do SEH; second, the switching of this on/off can and should + be done in the config file. + + * ace/config-win32-common.h: Enable ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS + for WinCE. + + Thanks to Emmanuel Thevenot Beaufort + for this fix. + + * ace/Handle_Set.{h i}: Remove the ACE_Handle_Set destructor for + ACE_HAS_WINCE. The need for this predates the supported vc 3 and 4 + compilers, and having it in there triggers an SEH warning. + + * ace/SPIPE_Stream.i: Follow-up to: + Mon Feb 10 09:22:04 2003 Phil Mesnier + Added the need for ACE_HAS_WINSOCK2 to enable this code. The calls + and structures used aren't available in Winsock1. + + * ace/config-wince.h: Disable Winsock2 for CE versions less than 4.0. + +Mon Feb 10 12:14:35 2003 Jeffrey Graham + + * bin/ace-install: + + Fixed problem where all TAO executables were not installed. + + Fixed installed file permission problem. Files that should have + global access didn't have it. + + Fixed problem where the script did not easily flatten the + install directory, requires the ACE_ARCH subdirectory trees be + built. + + Fixed problem where all binaries were not filtered out. + +Mon Feb 10 19:42:12 UTC 2003 Johnny Willemsen + + * ace/ATM_Acceptor.h: + Converted old style documentation to doxygen style + + * ace/Arg_Shifter.h: + Added private declaration of copy constructor and assignment + operator. Instances of these class can not be copied using the + default ones. Also fixes a MSVC6 level 4 warning. + + * ace/Configuration.cpp: + Removed not needed MingW ifdef, the normal code also compiles with + MingW + + * ace/config-win32.h: + Removed cygwin from this file. For cygwin the config-cygwin32.h + must be included directly in config.h + + * ace/Notification_Strategy.h: + * ace/Notification_Strategy.inl: + Made mask() method const + + * include/makeinclude/ace_flags.bor: + If TAO_ROOT isn't defined, define it as $(ACE_ROOT)/TAO + + * bin/MakeProjectCreator/templates/bor.mpd: + * include/makeinclude/build_dll.bor: + * include/makeinclude/build_exe.bor: + Thanks for Christopher Kohlhoff for providing + a fix for the singleton template with Borland. The problem is that + with a singleton template the code is implicitly generated into + every object file that references it. The linker then strips out + all but a single copy of the code. When linking an exe that refers + to a singleton template in a dll, the linker would choose one + of the template code instances in the exe's .obj files, and + completely ignore the instance that was exported by the dll. + + The key to the solution is that it appears that the borland linker + chooses the first instance of the template symbols that it sees. The + linker will let you list the .lib files in the place normally used + for object files. By listing the library files before any of the + object files, it resolves the template code against the dll exports. + + * examples/Service_Configurator/Misc/Makefile: + * examples/Service_Configurator/Misc/Makefile.Timer: + * examples/Service_Configurator/Misc/Makefile.main: + Splitted the original GNU makefile in multiple files, one for the + shared library and one for the exe and one to trigger the other + two. This fixes the compile errors with this example with Cygwin + and MingW. Thanks for Vince Mounts for making + these makefiles. + +Mon Feb 10 09:22:04 2003 Phil Mesnier + + * ace/SPIPE_Stream.i: Added a special case for win32 platforms to + ACE_SPIPE_Stream::send_handle() and recv_handle() to allow handle + passing. The extension is necessary since the receiving side must + open the duplicate handle before the sending side closes it. + +Fri Feb 7 17:22:39 2003 Steve Huston + + * ace/OS.cpp (ACE_OS::thr_create): Moved the pthread_setstack() call + (and the check for whether it's available) from inside the + Pthreads draft 4/6 section to the Pthreads standard section + and corrected the condition it's used (defined + ACE_HAS_PTHREAD_SETSTACK, not !defined ACE_HAS_PTHREAD_SETSTACK). + + Also see: + Thu Jan 16 19:06:19 2003 Stephen Torri + +Fri Feb 7 16:55:58 2003 Heather Drury + + * ace/config-aix-4.x.h: Reverted change to aix config file: + + Fri Feb 7 15:27:40 2003 Heather Drury + +Fri Feb 7 15:37:19 2003 Steve Huston + + * include/makeinclude/platform_aix_ibm.GNU: Define DCCFLAGS with the + debugging options for xlC_r; Change DCFLAGS to just -g (for the C + compiler). Thanks to Trevor Fields for + reporting this problem. + +Fri Feb 7 15:27:40 2003 Heather Drury + + * ace/config-aix-4.x.h: Restored the defining of + ACE_TEMPLATES_REQUIRE_SOURCE for AIX VisualAge 5, + which is needed for building TAO. Thanks to Trevor + Fields for this fix. + +Fri Feb 7 13:04:51 2003 Steve Huston + + * ace/ace_wchar.h: Added a new macro, ACE_TEXT_ALWAYS_WCHAR(STRING). + It's the inverse of ACE_TEXT_ALWAYS_CHAR - whatever STRING is, + the macro produces a wide-char string. Thanks to + Emmanuel Thevenot Beaufort + for this macro. + +Thu Feb 6 19:30:18 2003 Steve Huston + + * tests/SString_Test.cpp: Added a test for wide-string compares of + equal-length strings that differ in the last character. + + * ace/String_Base.i (compare): When memcmp()-ing to compare, take + the size of CHAR into account when calculating byte length. Thanks + to Emmanuel Thevenot Beaufort + for this fix. + +Thu Feb 6 16:06:29 2003 Rich Seibel + + * ace/config-tru64.h: Added a guard around the + ACE_HAS_SNPRINTF as versions earlier than 5.0 do not seem + have this function. + +Thu Feb 6 15:03:04 2003 Krishnakumar B + + * include/makeinclude/rules.local.GNU: Make the removal of IDL + generated files in realclean target dependent upon the + definition of IDL_FILES. MingW make crashes on empty "rm -f " + commands. + +Thu Feb 6 15:19:28 2003 Heather Drury + + * ace/Refcounted_Auto_Ptr.h: + * ace/Refcounted_Auto_Ptr.i: Made the other get() method const. See + previous ChangeLog entry. + +Thu Feb 6 07:13:06 2003 Douglas C. Schmidt + + * ace/Refcounted_Auto_Ptr.{h,i} (get): Made the get() method const. + Thanks to Jenny Kowald for suggesting this. + +Wed Feb 5 20:48:47 2003 Krishnakumar B + + * include/makeinclude/rules.local.GNU: Added rules to generate + object files from C++ file extensions .cxx, .C and .cc, in + addition to .cpp. + +Wed Feb 5 20:15:18 2003 Krishnakumar B + + * include/makeinclude/rules.lib.GNU: Removed the conditional + setting of VSHOBJS and VSHOBJS1 based on PRELIB. There is too + much bogosity here. This should fix HP-UX and AIX breakage. + +Sat Feb 1 08:43:53 2003 Douglas C. Schmidt + + * ace/Stream_Modules.cpp (put): Return 0 rather than -1 to be consistent + wrt the put() semantics elsewhere in ACE. Thanks to Jody Hagins + for help with this. + + * tests/FIFO_Test.cpp (server): Only compile this on platforms + that aren't Win32 since FIFO's don't work there. Thanks to Carl + Halvorson for reporting this. + +Wed Feb 5 09:45:12 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_mingw32.GNU: + Removed desciption to MINGW_BASE. + +Tue Feb 4 13:13:08 2003 Krishnakumar B + + * include/makeinclude/rules.lib.GNU: + * include/makeinclude/rules.bin.GNU: + + Generalized the creation of objects from source files by + removing the dependency that the source files be named *.cpp. + Also removed a lot of junk. + + * include/makeinclude/wrapper_macros.GNU: Removed some more + accumulated cruft. + + * include/makeinclude/rules.nested.GNU: Fix recursive make so + that users can name the makefiles in sub-directories as + something other than Makefile by introducing a new variable + SUBDIR_MAKEFILE. + + * ace/Makefile: Fix the Makefile to use the above extension when + recursing into directories. + + * include/makeinclude/rules.local.GNU: Add a new local target + clean_idl_stubs.local which cleans all the IDL generated files. + This target is linked to realclean so the IDL generated files + will only be cleaned with realclean. + + Thanks to James Mansion for + reporting the bugs and suggesting some fixes. + +Tue Feb 4 11:21:13 MST 2003 Rob Andzik + + * ACE_wrappers/include/makeinclude/platform_vxworks5.x_g++.GNU + - Added three new variables + GCC_VERSION (defaults to gcc-2.96) + VXWORKS_VERSION_FLAG (defaults to -DACE_VXWORKS=0x542) + VXWORKS_STDINC_FLAG (defaults to ) + + - Modified all sets of GCCLIB_DIR to use GCC_VERSION + - Modified all references to ACE_VXWORKS to use VXWORKS_VERSION_FLAG + - replaced -nostdinc with VXWORKS_STDINC_FLAG + + * ACE_wrappers/ace/config-vxworks5.x.h + - Added define ACE_LACKS_CLEARERR (wrapped in ACE_VXWORKS check) + + * ACE_wrappers/ace/OS.i + - Added ACE_UNUSED_ARG where warnings occurred. + +Mon Feb 3 16:33:02 2003 Heather Drury + + * ace/config-freebsd.h: msgsnd() with const parameter was recently + added to FreeBSD-CURRENT. Thanks to Craig Rodrigues' for this change. + +Sat Feb 1 09:34:45 2003 Ossama Othman + + * bin/auto_run_tests.lst: + + Disable TAO's IORInterceptor test for the GIOP 1.0 build + configuration. The test requires IOR tagged components that are + not supported in GIOP 1.0. Fixes a false positive in our + scoreboard. + +Sat Feb 1 07:50 2003 Douglas C. Schmidt + + * Our deepest sympathies to the families and friends of the crew of + the US Space Shuttle Columbia, which was lost over Texas this + morning. + + "We shall never forget them nor the last time we saw them, as + they prepared for their mission and waved good-bye and slipped + the surly bonds of Earth to touch the face of God." + + - President Reagan (addressing NASA employees following the + tragic loss of the Challenger 7 crew on STS-51L.) + + Ad astra per aspera. + +Sat Feb 1 09:00:00 2003 Steve Huston + + * Space Shuttle Columbia breaks up at 200,000ft altitude at + 12,500mph. 7 astronauts killed; the US and Israel mourn their loss. + +Fri Jan 31 12:55:26 2003 Frank Hunleth + + * tests/Reactor_Exceptions_Test.cpp (worker): Added #if defined + (ACE_HAS_THREADS) guard around worker () function to remove a + compiler warning on single threaded configurations that have + exceptions enabled. + +Thu Jan 30 21:57:58 2003 Frank Hunleth + + * examples/Threads/thread_specific.cpp (worker): Added __OpenBSD__ + to the list of OS/compilers that can check printf arguments. + This removes a compilation warning. + +Thu Jan 30 21:50:27 2003 Frank Hunleth + + * ace/config-openbsd.h: Added ACE_LACKS_SETSCHED, since it turns + out that sched_setscheduler hasn't been implemented on OpenBSD. + + * bin/auto_run_tests.lst: Disabled the MT_Cubit test for OpenBSD, + since it fails completely when sched_params returns an error. + +Thu Jan 30 10:34:02 2003 Ossama Othman + + From Olivier Brunet + * ace/SSL/SSL_Context.cpp (report_error): + + Corrected format specifier for wide string case. + +Wed Jan 29 12:31:51 2003 Frank Hunleth + + * ace/config-openbsd.h: + * ace/config-openbsd-pthreads.h: Merged config files together and + removed config-openbsd-pthreads.h like what was done for + FreeBSD. + + * include/makeinclude/platform_openbsd.GNU: + * include/makeinclude/platform_openbsd_pthreads.GNU: Merged files + together and removed platform_openbsd_pthreads.GNU like + FreeBSD. Also removed gratuitous link of -lstdc++. g++ already + does that for us. Thanks to Craig Rodrigues' changelog entry. + +Wed Jan 29 11:47:29 2003 Steve Huston + + * ACEXML/tests/ContentHandler_Test.cpp: Fixed compile errors by + adding/correcting use of the ACEXML exception macros. + +Wed Jan 29 08:30:12 UTC 2003 Johnny Willemsen + + * ace/Vector_T.cpp: + Fixed bug in resize() method, of the original vector, the last + item was lost during resize(). Thanks to Denis Parnaland + for reporting this. + + * tests/Vector_Test.cpp: + Extended this test to test the resize() method of ACE_Vector. + + * THANKS: Added Denis Parnaland. + +Tue Jan 28 18:46:41 2003 Steve Huston + + * ACEXML/parser/parser/Parser.cpp (parse_element): When converting + an escape sequence, add its length, don't lose the length of + already-parsed content. Thanks to Emmanuel Thevenot Beaufort + for this fix. + + * ACEXML/tests/ContentHandler_Test.{cpp dsp}: New test that + illustrates the problem above and validates the fix. + + * ACEXML/tests/Tests.dsw: + * ACEXML/Makefile: + * ACEXML/Makefile.bor: Added ContentHandler_Test. + + * THANKS: Added Emmanuel Thevenot Beaufort to the Hall of Fame. + +Tue Jan 28 15:47:29 2003 Steve Huston + + * include/makeinclude/platform_hpux_aCC.GNU: For distrib builds, + changed the +h option to not specify the whole path; put the path + in the path search option (+b). + +Mon Jan 27 14:28:16 2003 Heather Drury + + * include/makeinclude/wrapper_macros.GNU: Remove unnecessary use + of GNU make basename command. Supplied by Ganesh Pai . + +Sun Jan 26 16:42:23 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_linux_borland.GNU: + When AIO support is found, set the right define but also add the + library liblrt to the lists to link with. Only when building with + threading support link with the pthread library. + +Sun Jan 26 16:42:23 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_linux_borland.GNU: + Don't set any BUILD_DLL defines in this file, the BUILD_DLL defines + are set in the specific makefiles. + +Sat Jan 25 20:31:56 2003 Frank Hunleth + + * ace/config-openbsd.h: + * ace/config-openbsd-pthread.h: Added ACE_HAS_SNPRINTF since + OpenBSD has snprintf() and to fix buffer overflow tested for by + tests/Log_Msg_Test. + +Sat Jan 25 18:15:48 2003 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added a new test to the daily builds. + +Sat Jan 25 13:39:23 UTC 2003 Johnny Willemsen + + * ACE-INSTALL.html: + * include/makeinclude/platform_mingw32.GNU: + * include/makeinclude/platform_gnuwin32_common.GNU: + Removed the usage of MINGW_BASE. This is not needed for using MingW. + Thankx to Viktor Ransmayr for + confirming that this is not needed. + +Fri Jan 24 07:54:12 UTC 2003 Johnny Willemsen + + * ace/OS.h: + VxWorks 5.4 lacks some ANSI prototypes. These are defined by + VxWorks 5.5 so we only define these ANSI prototypes when defined + ACE_VXWORKS and this is equal or smaller 0x540. Else we just + include apra/inet.h. + +Thu Jan 23 17:57:05 2003 Heather Drury + + * ace/README: Deleted non-ascii characters around ACE_HAS_PTHREAD_SETSTACK. + +Thu Jan 23 17:44:38 UTC 2003 Craig Rodrigues + + * include/makeinclude/platform_freebsd.GNU: Remove gratuitous link + of -lstdc++. g++ already does that for us. + +Wed Jan 22 21:08:48 2003 Steve Huston + + * examples/C++NPv2/WFMO_Reactor_Logging_Server.cpp (Quit_Handler): + Sync with code in the book. + +Wed Jan 22 18:12:41 2003 Steve Huston + + * examples/C++NPv2/Service_Reporter.cpp: + * examples/C++NPv2/Configurable_Logging_Server.cpp: Change the + name of the static service descriptor from Reporter to + Reporter_Descriptor. This is more descriptive and matches + the book. + +Wed Jan 22 18:08:27 UTC 2003 Craig Rodrigues + + * ace/config-freebsd.h: Add ACE_HAS_SNPRINTF. Fixes Log_Msg_Test. + +Wed Jan 22 18:03:35 UTC 2003 Craig Rodrigues + + * include/makeinclude/platform_linux.GNU: + * include/makeinclude/platform_linux_icc.GNU: + * include/makeinclude/platform_linux_kcc.GNU: + Remove defines of _POSIX_THREADS and _POSIX_THREAD_SAFE_FUNCTIONS. + These POSIX constants are not meant to be defined by + the user. The user must include and *check* + the value of these constants. On Linux glibc systems, + after including , the header + will be eventually be included...these constants are + defined by the glibc implementation in that header. + +Wed Jan 22 10:55:39 2003 Steve Huston + + * ace/config-tru64.h: Added ACE_HAS_SNPRINTF. Thanks to Vladimir + Chovanec for this fix. + +Wed Jan 22 01:24:51 2003 Douglas C. Schmidt + + * ace/Message_Queue_T.h: Corrected the documentation for + ACE_Message_Block_Ex so it says ACE_MESSAGE_TYPE rather than + ACE_Message_Block. + +Tue Jan 21 21:44:04 2003 Nanbor Wang + + * ACEXML/examples/SAXPrint/broken.xml: Added a new broken XML file + to make sure we handle this case properly. + + * ACEXML/parser/parser/Parser.i (get): Added a check for + successful operation from the input CharStream to avoid + out of the infinite loop when reading broken XML files. Thanks + to Volodymyr Orlenko for reporting this + and submitting the patch. + +Mon Jan 20 20:32:55 2003 Douglas C. Schmidt + + * ace/Log_Msg.cpp (log): Added a '}' at line 1531 to fix a + nasty compiler bug on Digital UNIX. Thanks to Igor Pisarenko + and + Pit Linnartz for reporting this. + +Tue Jan 21 19:29:04 2003 Heather Drury + + * bin/auto_run_tests.lst: Disabled orbsvcs/Test/EC_MT_MCast on + static builds. + +Tue Jan 21 08:43:24 2003 Balachandran Natarajan + + * bin/generate_doxygen.pl: Fixed a cut and paste error. + +Mon Jan 20 16:22:43 2003 Heather Drury + + * ace/NT_Service.cpp: Modified return statement as the + wait_for_service_state function is declared as void and it was + returning an int. + +Mon Jan 20 15:48:35 2003 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added a TAO test to the daily builds. + +Mon Jan 20 13:58:25 2003 Rich Seibel + + * ace/config-macosx.h: Added ACE_HAS_SNPRINTF as well as + ACE_LACKS_PERFECT_MULTICAST_FILTERING to make the ACE + Mac OSX 10.2.x build pass the Log_Msg_Test and the + Multicast_Test. Thanks to John Michael Zorko + for providing this patch. + +Mon Jan 20 18:59:12 UTC 2003 Johnny Willemsen + + * examples/C++NPv2/Makefile.CLD: + * examples/C++NPv2/Makefile.SLD: + * examples/C++NPv2/Makefile.SLDex: + * examples/C++NPv2/Makefile.TPCLS: + * examples/C++NPv2/Makefile.TPLS: + * ace/RMCast/Makefile: + Set the correct x_BUILD_DLL defines. These are needed for the + Cygwin/MingW and Kylix compiler. Thanks to Vince Mounts + for providing the patches. + +Mon Jan 20 11:58:00 2003 Balachandran Natarajan + + * bin/generate_doxygen.pl: Fixed the spaces in the file names + of generated man pages. Thanks to Olver Kellogg for providing + this patch. + +Sun Jan 19 11:40:10 2003 Douglas C. Schmidt + + * ace/NT_Service.{h,cpp}: Enhanced the wait_For_service_state() so + that it actually uses the wait_time parameter. Thanks to Theo + Landman for contributing this. + + * ace/Process_Manager.cpp (spawn): Cleanup dynamically allocated + memory if the spawn() fails. Thanks to Kobi Cohen-Arazi + for this fix. + +Sun Jan 19 15:03:13 UTC 2003 Johnny Willemsen + + * websvcs/lib/Makefile: + Set the correct x_BUILD_DLL defines. These are needed for the + Cygwin/MingW and Kylix compiler. + +Sat Jan 18 17:49:20 2003 Steve Huston + + * Makefile: Removed PACE references. + +Sat Jan 18 17:11:21 2003 Balachandran Natarajan + + * bin/make_release: Use doxygen 1.2.18 as opposed to doxygen + 1.2.13.1. + +Fri Jan 17 09:00:17 2003 Douglas C. Schmidt + + * ACE-INSTALL.html (make): Removed all claims that we support + SunC++ 4.2. Thanks to Kirat Singh for + reporting this. + +Sat Jan 18 09:07:12 UTC 2003 Johnny Willemsen + + * tests/Makefile.DLL_Test: + * tests/Makefile.Framework_Component_DLL: + * tests/Makefile.Service_Config_DLL: + * examples/Service_Configurator/IPC-tests/server/Makefile: + Set the correct x_BUILD_DLL defines. These are needed for the + Cygwin/MingW and Kylix compiler. + +Fri Jan 17 12:34:51 2003 Steve Huston + + * ACE-INSTALL.html: Updated platform and compiler information. + +Thu Jan 16 19:06:19 2003 Stephen Torri + + * ace/OS.cpp: + * ace/config-linux-common.h: + * ace/config-freebsd.h: + * ace/README: + + Added a new macro called ACE_HAS_PTHREAD_SETSTACK for systems + that use the newer glibc (2.3+). Eliminates linker warning about + not using the pthread function called pthread_setstack. + +Thu Jan 16 16:25:45 2003 Balachandran Natarajan + + * bin/auto_run_tests.lst: Added a TAO/orbsvcs/tests/EC_MT_Mcast + test to the daily builds. + +Thu Jan 16 12:27:24 2003 Balachandran Natarajan + + * COPYING: Extended the validity of the copyright notice from 2002 + to 2003. Should have been done yesterday, anyway, better late + than never. + +Wed Jan 15 18:02:01 2003 Bala + + * ACE version 5.3 released. + +Wed Jan 15 10:48:11 2003 Balachandran Natarajan + + * bin/make_release: Did the following enhancements + + - If it is a minor release do not append the beta version. Looks + like somone broke this and the script started writing out + things as x.3.0, whcih is bad BTW. + + - We now POSIX.1 tar, instead of old tar format with the -H + option in cpio. This helps to tar files deep in the hierarchy + tree to be properly zipped. We were loosing this in many + betas. + + - Fixes for the generated filenames copied into the + previous_versions directory. + + - Fix to get the right Version.h file in TAO. + + +Tue Jan 14 18:51:49 2003 Steve Huston + + * ace/Auto_Ptr.h: Added pragma to disable warning 4284 for Microsoft + compilers. The warned-of behavior is exactly what is intended. + + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplib.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + Added a "WCE emulator" configuration section. This allows builds + for the WinCE emulator, necessary for working with the WinCE.NET + Standard SDK emulator. + +Tue Jan 14 14:56:12 2003 Steve Huston + + * ace/config-win32-common.h: For WinCE, don't include wce.h unless + building with MFC. wce.h is an MFC file. + + * ace/config-WinCE.h: Add pragmas to link _with_ corelibc.lib and + _without_ oldnames.lib. These weren't needed with WinCE 3/PocketPC + (but they don't hurt) and are needed for WinCE .NET. The ATL headers + do these pragmas, but we don't want to add a dependency on ATL. + +Tue Jan 14 11:07:06 2003 Balachandran Natarajan + + * bin/generate_export_file.pl: Added a patch from + Gonzalo Diethelm which generates + an empty CVS Id string. + +Mon Jan 13 12:53:12 UTC 2003 Johnny Willemsen + + * ace/config-win32-common.h: + The MingW compiler can handle the export/import macros. + + * ace/config-cygwin32.h: + Corrected the guards around this header file. + +Sat Jan 11 09:37:24 2003 Douglas C. Schmidt + + * ace/OS_String.cpp (wcslen_emulation): Fixed a nasty formatting + glitch that made the code hard to read. Thanks to Ruslan + Zasukhin for reporting this. + +Fri Jan 3 21:46:00 2003 John Michael Zorko + + * netsvcs/clients/Naming/Client/Makefile: Added $(ACELIB) to + ACE_SHLIBS to fix multple -lACE problem. This wasn't an + issue on Mac OS X 10.2, but could be on other platforms. + + * examples/ASX/CCM_App/Makefile: same as above + * netsvcs/clients/Naming/Dump_Restore/Makefile: same as above + +Wed Jan 8 19:27:49 2003 Steve Huston + + * ace/Message_Block.h: Doxygenized comments for release() and copy(). + + * ace/UPIPE_Stream.{h cpp}: Removed the remaining_ member; use the + ACE_Message_BLock::length() member function to find the amount + of remaining data. + +Wed Jan 8 12:17:10 2003 Balachandran Natarajan + + * bin/ace-install: Fixed the improper usage of "or" in the "find " + command used to find the inlined files with extensions .i and + .inl. Thanks to Oliver Kellog for providing the patch. + +Tue Jan 7 13:08:12 UTC 2003 Johnny Willemsen + + * ACEXML/common/Makefile: + Set ACEXML_BUILD_DLL when building the shared lib. + +Mon Jan 6 18:31:09 2003 Balachandran Natarajan + + * bin/generate_topinfo_charts.sh: Removed the range for the + Y-AXIS, for the graphs to auto-adjust while plotting. + +Mon Jan 6 16:56:04 2003 Balachandran Natarajan + + * bin/topinfo_iorsize_stats.sh: Scripts for capturing the size of + the server and client when shipping large IOR's + + * bin/topinfo_stats.sh: Renamed to topinfo_simple_stats.sh. This + is a better to show that we capture the sizes of a simple server + and client. + + * bin/topinfo_simple_stats.sh: New file. We need to do some code + sharing between these two scripts. Just postponing that for the + timebeing. + +Mon Jan 6 11:23:12 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_gnuwin32_common.GNU: + Removed setting ACE_OS_HAS_DLL to 1, this should be done more + specific in the makefiles + +Sat Jan 4 18:46:19 2003 Steve Huston + + * ace/config-aix5.1.h: Add a #define ACE_AIX_VERS 501 if ACE_AIX_VERS + isn't already defined. Helps to build with Visual Age C++ incremental + mode. Support for incremental mode is going away after ACE 5.3, but + this crutch can be used for now. + + * ace/Makefile.ace: Remove SOCK_Dgram_Mcast_T from TEMPLATE_FILES. See + Tue Jun 25 23:22:09 UTC 2002 Craig Rodrigues + + * ace/ace.icc: Corrected the list of source files to build ACE with. + In addition to updating the source list, if building with Visual + Age C++ 5, add the TEMPLATE_FILES to the sources that get compiled. + Visual Age C++ 5 incremental needs to see them all. + + * examples/C++NPv1/Makefile: Add .NOTPARALLEL since some of the + sub-makes share object files and they can get confused. + + * tests/makeicc.pl: Add additional template-getting stuff for + Visual Age C++ 5. + + * tests/ARGV_Test.icc: + * tests/Aio_Platform_Test.icc: + * tests/Arg_Shifter_Test.icc: + * tests/Atomic_Op_Test.icc: + * tests/Auto_IncDec_Test.icc: + * tests/Barrier_Test.icc: + * tests/Basic_Types_Test.icc: + * tests/Bound_Ptr_Test.icc: + * tests/Buffer_Stream_Test.icc: + * tests/CDR_Array_Test.icc: + * tests/CDR_File_Test.icc: + * tests/CDR_Test.icc: + * tests/Cache_Map_Manager_Test.icc: + * tests/Cached_Accept_Conn_Test.icc: + * tests/Cached_Allocator_Test.icc: + * tests/Cached_Conn_Test.icc: + * tests/Capabilities_Test.icc: + * tests/Codecs_Test.icc: + * tests/Collection_Test.icc: + * tests/Config_Test.icc: + * tests/Conn_Test.icc: + * tests/DLL_Test.icc: + * tests/DLL_Test_Impl.icc: + * tests/DLList_Test.icc: + * tests/Date_Time_Test.icc: + * tests/Dev_Poll_Reactor_Test.icc: + * tests/Dirent_Test.icc: + * tests/Dynamic_Priority_Test.icc: + * tests/Enum_Interfaces_Test.icc: + * tests/Env_Value_Test.icc: + * tests/FIFO_Test.icc: + * tests/FlReactor_Test.icc: + * tests/Framework_Component_DLL.icc: + * tests/Framework_Component_Test.icc: + * tests/Future_Set_Test.icc: + * tests/Future_Test.icc: + * tests/Get_Opt_Test.icc: + * tests/Handle_Set_Test.icc: + * tests/Hash_Map_Bucket_Iterator_Test.icc: + * tests/Hash_Map_Manager_Test.icc: + * tests/High_Res_Timer_Test.icc: + * tests/INET_Addr_Test.icc: + * tests/IOStream_Test.icc: + * tests/Lazy_Map_Manager_Test.icc: + * tests/Log_Msg_Test.icc: + * tests/Logging_Strategy_Test.icc: + * tests/MEM_Stream_Test.icc: + * tests/MM_Shared_Memory_Test.icc: + * tests/MT_Reactor_Timer_Test.icc: + * tests/MT_Reactor_Upcall_Test.icc: + * tests/MT_SOCK_Test.icc: + * tests/Malloc_Test.icc: + * tests/Map_Manager_Test.icc: + * tests/Map_Test.icc: + * tests/Max_Default_Port_Test.icc: + * tests/Mem_Map_Test.icc: + * tests/Message_Block_Test.icc: + * tests/Message_Queue_Notifications_Test.icc: + * tests/Message_Queue_Test.icc: + * tests/Message_Queue_Test_Ex.icc: + * tests/Multicast_Test.icc: + * tests/Naming_Test.icc: + * tests/New_Fail_Test.icc: + * tests/Notify_Performance_Test.icc: + * tests/OS_Test.icc: + * tests/Object_Manager_Test.icc: + * tests/Obstack_Test.icc: + * tests/OrdMultiSet_Test.icc: + * tests/Pipe_Test.icc: + * tests/Priority_Buffer_Test.icc: + * tests/Priority_Reactor_Test.icc: + * tests/Priority_Task_Test.icc: + * tests/Proactor_Scatter_Gather_Test.icc: + * tests/Proactor_Test.icc: + * tests/Proactor_Timer_Test.icc: + * tests/Process_Manager_Test.icc: + * tests/Process_Mutex_Test.icc: + * tests/Process_Strategy_Test.icc: + * tests/RB_Tree_Test.icc: + * tests/Reactor_Dispatch_Order_Test.icc: + * tests/Reactor_Exceptions_Test.icc: + * tests/Reactor_Notify_Test.icc: + * tests/Reactor_Performance_Test.icc: + * tests/Reactor_Timer_Test.icc: + * tests/Reactors_Test.icc: + * tests/Reader_Writer_Test.icc: + * tests/Recursive_Condition_Test.icc: + * tests/Recursive_Mutex_Test.icc: + * tests/Refcounted_Auto_Ptr_Test.icc: + * tests/Reverse_Lock_Test.icc: + * tests/SOCK_Connector_Test.icc: + * tests/SOCK_Send_Recv_Test.icc: + * tests/SOCK_Test.icc: + * tests/SPIPE_Test.icc: + * tests/SString_Test.icc: + * tests/SV_Shared_Memory_Test.icc: + * tests/Semaphore_Test.icc: + * tests/Service_Config_DLL.icc: + * tests/Service_Config_Test.icc: + * tests/Signal_Test.icc: + * tests/Sigset_Ops_Test.icc: + * tests/Simple_Message_Block_Test.icc: + * tests/Svc_Handler_Test.icc: + * tests/TP_Reactor_Test.icc: + * tests/TSS_Test.icc: + * tests/Task_Test.icc: + * tests/Thread_Manager_Test.icc: + * tests/Thread_Mutex_Test.icc: + * tests/Thread_Pool_Reactor_Resume_Test.icc: + * tests/Thread_Pool_Reactor_Test.icc: + * tests/Thread_Pool_Test.icc: + * tests/Time_Service_Test.icc: + * tests/Time_Value_Test.icc: + * tests/Timeprobe_Test.icc: + * tests/Timer_Queue_Test.icc: + * tests/TkReactor_Test.icc: + * tests/Token_Strategy_Test.icc: + * tests/Tokens_Test.icc: + * tests/UPIPE_SAP_Test.icc: + * tests/Upgradable_RW_Test.icc: + * tests/Vector_Test.icc: + * tests/XtReactor_Test.icc: Mostly updated to build with Visual Age + C++ 5 in incremental mode. Most of the tests that use templates + don't build. They require explicitly including the needed template + source files names in the .icc file. I don't have time to add them + all now - if anyone uses this compiler, please contact me. No wonder + IBM ditched this piece of junk. + +Fri Jan 3 17:58:21 2003 Steve Huston + + * ace/SSL/SSL_Context.cpp: + * netsvcs/lib/Name_Handler.cpp: + * netsvcs/lib/Server_Logging_Handler.cpp: Add __hpux to condition + where template members are explicitly instantiated. Also see: + Tue Dec 3 20:47:39 2002 Steve Huston + +Fri Jan 3 17:45:29 2003 Steve Huston + + * include/makeinclude/platform_hpux_gcc.GNU: Use HP's /usr/bin/ar + instead of GNU ar (which may be picked up first in PATH). GNU ar + crashes - missing libfl.sl. + + * performance-tests/Misc/test_singleton.cpp: Add __hpux to conditions + for explicitly instantiating ACE_Singleton::singleton_. + +Fri Jan 3 07:49:09 2003 Chad Elliott + + * bin/aix_shr: + + Changed the name of the AIX template instantiation macro and + commented on why it's needed. + +Thu Jan 2 17:44:29 2003 Balachandran Natarajan + + * ace/config-cygwin32-common.h: Set the custom export + macro's. These will be used when building dynamically with the + cygwin compiler. + + * bin/MakeProjectCreator/templates/gnu.mpd: Generate dllflags and + libflags into the GNU makefiles. These are important for the + Cygwin/MingW and Kylix compiler. + +Thu Jan 2 16:11:38 2003 Balachandran Natarajan + + * ace/config-freebsd.h: Fix use of macros for FreeBSD 4.6: + ACE_LACKS_RWLOCK_T, ACE_LACKS_READDIR_R, ACE_LACKS_SETSCHED, + ACE_LACKS_PTHREAD_THR_SIGSETMASK. Do not define SCHED_RR, + SCHED_IO, SCHED_FIFO, SCHED_OTHER for FreeBSD >= 4.0, since they + are defined in sched.h. Thanks to Craig Rodrigues for providng + the patch. + +Thu Jan 2 13:33:01 2003 Chad Elliott + + * ace/Refcounted_Auto_Ptr.i: + + Added #include of ace/Log_Msg.h for ACE_ASSERT. + + * bin/aix_shr: + + Added -DTAO_INSTANTIATING_TEMPLATES to the link command line. + +Thu Jan 2 12:38:55 2003 Johnny Willemsen + + * ace/Makefile.ace: Set the dllflags in Makefile. This makes it + possible to do __declspec (dllexport) for the symbols in the + dll. This is needed for the Cygwin/MingW and Kylix compiler. + + Thid change takes care of the static and dynamic library cases. + +Thu Jan 2 08:57:26 2003 Johnny Willemsen + + * include/makeinclude/platform_cygwin32.GNU: Add + --enable-auto-import to the linker flags. This will result in + the linker doing auto-import without giving warnings about + it. + +Wed Jan 1 14:26:09 2003 Balachandran Natarajan + + * bin/topinfo_stats.sh: Forgot that we run this scripts in cron + environment. Set the path and other details that would help to + ease things. + diff --git a/ACE/ChangeLogs/ChangeLog-03b b/ACE/ChangeLogs/ChangeLog-03b new file mode 100644 index 00000000000..311de7bdba4 --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-03b @@ -0,0 +1,6184 @@ +Mon Jun 16 11:13:22 2003 Chris Cleeland + + * ACE version 5.3.3 released. + +Fri Jun 13 13:13:02 2003 Balachandran Natarajan + + * bin/make_release: Remeved the generation of a README file in + TAO/orbsvcs. + +Fri Jun 13 06:02:32 2003 Balachandran Natarajan + + * ace/Template_Instantiations.cpp: Removed the explicit template + instantiations introduced by this change "Thu Jun 12 15:20:37 + 2003 Balachandran Natarajan ". This + botches up SunOS53 build. + + * ace/Containers_Instantiations.cpp: A new file where we have + moved the instantiations. + + Thanks t Chris Cleeland for alerting us on this. + +Thu Jun 12 15:20:37 2003 Balachandran Natarajan + + * ace/Template_Instantiations.cpp: This file now contains some + useful template definitions that would be used by ACE+TAO and + its applications. We have started by doing + ACE_Unbounded_Queue. In future we will add other basic + types on a case by case basis. + + * ace/Stats.cpp: Removed the template instantiations of + ACE_Unbounded_Queue since it has now been moved to another + file. + + * ace/Makefile.ace: Compile the file Template_Instantiations.cpp + in normal builds. + + * ace/INET_Addr.cpp: In get_port_number_from_name () set the port + number to 0 for VxWorks. + + Thanks to Rob Andzik for providing these + patches to get ACE+TAO compiling on VxWorks 5.5. + +Wed Jun 11 16:27:41 2003 Steve Huston + + * examples/C++NPv1/Logging_Client.cpp: + * examples/C++NPv2/TP_Reactor_Logging_Server.cpp: Fixed compile error + arising from: Wed Jun 11 07:28:57 2003 Balachandran Natarajan + +Wed Jun 11 07:28:57 2003 Balachandran Natarajan + + * ace/config-lynxos.h: + * examples/C++NPv1/Logging_Client.cpp: + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: Applied + patches from Olli Savia to get the C++NPv examples + compiling on pre-LynxOS 3.0.1 with gcc 2.7-97r1. + +Tue Jun 10 12:50:16 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Only read in a base project if it hasn't been read for the current + project. + +Tue Jun 10 11:35:29 2003 Chad Elliott + + * bin/create_ace_build: + + Fixed a bug in the message printed about the config.h and + platform_macros.GNU. + +Tue Jun 10 11:09:12 2003 Chad Elliott + + * bin/PerlACE/Process.pm: + + Added a delay_factor() function that could be used to dynamically + determine the delay factor for the test scripts. Some + coordination is required to ensure that the delay factor and the + times used in run_test.pl scripts work together. + + * bin/PerlACE/Run_Test.pm: + + Added code to support running tests using the cygwin perl. + + * bin/create_ace_build: + + Added windows support by using hard links (only with MSWin32 + version of perl). + +Mon Jun 9 18:59:51 2003 Balachandran Natarajan + + * THANKS: Added Gan Deng to the hall of fame. + +Mon Jun 9 13:16:38 2003 Balachandran Natarajan + + * bin/performance_stats.sh: The sequence<> latency tests will also + be monitored on a daily basis. + +Mon Jun 9 08:27:12 UTC 2003 Johnny Willemsen + + * ace/Makefile.ace: + Added NT_Service. Thanks to Wolfgang Schroeder + for reporting this. + +Sun Jun 8 22:36:32 2003 Balachandran Natarajan + + * THANKS: Added Andrew Voumard to the hall of fame. + +Sun Jun 8 17:55:18 UTC 2003 Don Hinton + + * bin/g++_metrics.sh: + Fixed a typo that caused the script to fail. + +Sun Jun 8 10:52:23 2003 Nanbor Wang + + * bin/PerlACE/Process.pm: + * bin/PerlACE/Process_Win32.pm: + * bin/PerlACE/Process_Unix.pm: Moved the Normalize_Executable_Name + method to platform specific implementation files. The original + implementation in Process.pm was Win32 specific. + +Sat Jun 7 11:12:16 2003 Douglas C. Schmidt + + * performance-tests/Synch-Benchmarks/Synch_Lib/Benchmark_Base.h: Added a + #include for "ace/Atomic_Op.h" to solve a compilation problem. + Thanks to Nick Kukuczka for reporting + this. + +Fri Jun 6 09:31:21 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug introduced by yesterdays optimization. + Added code to detect cyclic inheritance. + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Added more optimizations. + +Fri Jun 6 06:37:33 UTC 2003 Johnny Willemsen + + * bin/MakeProjectCreator/templates/gnu.mpd: + Set ACE_SHLIB instead of ACELIB and set it before the include of + wrapper_macros.GNU + + * ACEXML/apps/svcconf/Makefile.ACEXML_XML_Svc_Conf_Parser: + * ACEXML/common/Makefile.ACEXML: + * ACEXML/examples/SAXPrint/Makefile.SAXPrint: + * ACEXML/parser/parser/Makefile.ACEXML_Parser: + * ACEXML/tests/Makefile.ContentHandler_Test: + * ACEXML/tests/Makefile.HttpCharStream_Test: + * ACEXML/tests/Makefile.NamespaceSupport_Test: + * ACEXML/tests/Makefile.Transcoder_Test: + Regenerated these makefiles based on the change above. This fixes the + Kylix/Cygwin/MinGW link errors. + + * ACEXML/common/Attributes_Def_Builder.cpp + * ACEXML/common/Element_Def_Builder.cpp + Added explicit template instantiations in case the ACE autoptr + is used. This fixes unresolved externals with VxWorks 5.5 + +Fri Jun 6 06:12:33 UTC 2003 Johnny Willemsen + + * etc/tao_rtevent.doxygen: + When generating the RTEvent documentation, alse parse the + ECG_*.{h,i,cpp} files. + +Thu Jun 5 14:03:54 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Modified the code to increase performance. These changes decrease + generation time for the ACE_wrappers tree by up to 20%. + +Thu Jun 5 11:07:04 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Fixed a bug where mwc.pl could go into an infinite loop depending + on the project dependencies and project ordering. + +Thu Jun 5 09:05:21 2003 Chad Elliott + + * bin/MakeProjectCreator/config/global.features: + + Fixed a bad comment. + +Thu Jun 5 08:20:23 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/va4icc.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Added a 'macros' keyword that allows users to pass generic macros + to the compiler. + +Thu Jun 5 07:05:42 2003 Chad Elliott + + * bin/clean_sems.sh: + + Update this script to work with IRIX, Tru64 and HP-UX and possibly + others. + +Thu Jun 5 03:45:46 UTC 2003 Don Hinton + + * include/makeinclude/wrapper_macros.GNU: + Set shared_libs_only or static_libs_only if appropriate, + even if only shared_libs and static_libs were passed, since + many Makefiles use these variables to determine what gets built. + + * netsvcs/clients/Naming/Client/Makefile: + Fixed problem that prevented static libraries from being built + by adding a LIB variable and moving these declarations to before + including wrapper_macros.GNU. Thanks to Olli Savia + for reporting the problem. + +Wed Jun 4 19:42:33 UTC 2003 Don Hinton + + * bin/g++_metrics.sh: + Use /usr/bin/time to get better metrics and output the time in + one step. Also include %x, the return value from g++ so that + users can tell whether not to use the time, since it will always + be output even for failures. + + * bin/generate_compile_stats.sh: + Added ability to gather footprint metrics for static_libs_only + builds. Also, cleaned up the code a bit and added lots of comments. + +Wed Jun 4 13:47:45 2003 Balachandran Natarajan + + * THANKS: Added Jason Cohen to the hall of fame. + +Wed Jun 4 12:43:41 2003 Balachandran Natarajan + + * ace/CDR_Stream.cpp: Removed a duplicate semicolon. Thanks to Rob + Andzik for catching this. + +Wed Jun 4 10:30:35 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + If generating projects on windows, check for case insensitive + relative paths. + +Wed Jun 04 14:11:19 UTC 2003 Johnny Willemsen + + * ace/OS_Dirent.cpp: + Changes definitions of INVALID_FILE_ATTRIBUTES and + INVALID_SET_FILE_POINTER from (-1) to ((DWORD)(-1)) to fix BCB5 + warnings. + +Wed Jun 04 07:06:12 UTC 2003 Johnny Willemsen + + * ace/DLL_Manager.cpp: + Added explicit template instantiations in case the ACE autoptr + is used. This fixes unresolved externals with VxWorks 5.5 + + * ace/Handle_Set.h: + * ace/Local_Name_Space.h: + * ace/Local_Tokens.h: + * ace/Name_Proxy.h: + * ace/Name_Request_Reply.h: + * ace/Naming_Context.h: + * ace/Object_Manager.h: + * ace/SOCK_Dgram_Mcast.h: + * ace/Thread.h: + * ace/WFMO_Reactor.h: + Doxygen improvements + + * ace/Message_Block.cpp: + * ace/Message_Block.i: + Changed u_long to unsigned long to match header file. This fixes + doxygen warnings + + * ace/String_Base.h: + * ace/String_Base.i: + Changed constructor argument alloc to the_allocator in doxygen + tags and in implementation. + + * ace/config-doxygen.h: + Added TAO_HAS_SCIOP to generate SCIP documentation, added + ACE_HAS_USING_KEYWORD to improve ACE documentation + +Tue Jun 03 07:51:20 2003 Simon McQueen + + * ACE version 5.3.2 released. + +Mon Jun 2 11:38:13 2003 Balachandran Natarajan + + * bin/bootstrap (Usage): Commented out paths on Sun boxes for + aclocal. + +Mon Jun 2 11:24:10 2003 Balachandran Natarajan + + * bin/generate_rel_manpages: Added some debugging + statements. Looks like this script has a quite a bit of code + duplicated from make_release scripts. We will fix this for the + next beta. + +Mon Jun 2 00:10:14 2003 Balachandran Natarajan + + * bin/make_release:Fixed some apparent bugs. Left some debugging + statements for future refernces. + + * Makefile: Removed acconfig.h since it is not required. Thanks to + Ossama for proving the information. + +Sun Jun 01 20:02:52 2003 Balachandran Natarajan + + * bin/make_release: Fixed a typo and added comments. + +Sun Jun 1 19:05:41 2003 Balachandran Natarajan + + * bin/make_release: The following changes were made to the release + scripts. + + - CIAO distribution has been integrated + - Generation of doxygen documentation has been moved out. + - Added checks to see whether the user of the script has got + write permissions in the output directory + - Removed the option to create releases with no zipped + libraries. + - Introduced the need for another environment variable MAILID to + provide the mail id of the person cutting the beta. + +Sun Jun 01 18:02:24 2003 Balachandran Natarajan + + * bin/generate_rel_manpages: A new script for man page + generation. This is being moved out of the release scripts for a + number of reasons. A couple of them are + + - They take a long time and beta/release process has to wait for + completion of documentation generation. + + - Any problems during documentation generation like machine + reboot or machine hang or whatever you can think off adversely + affects the beta process. The build-czar has to cleanup + numerous files and start the process all over again. + + This will help to decouple the beta cutting process and the + documentation generation process. + + * Makefile: A new target that can be used to kick of the + documentation generation. + +Fri May 30 17:15:57 2003 Nanbor Wang + + * ace/NT_Service.cpp (insert): Fixed a compilation eror. + +Fri May 30 15:54:41 2003 Balachandran Natarajan + + * bin/MakeProjectCreator/config/ciaoversion.mpb: New file having + the version information. + +Fri May 30 15:29:48 2003 Balachandran Natarajan + + * Makefile (APPLY_NEW_TAG): New tags for CIAO. + +Fri May 30 14:46:00 2003 Douglas C. Schmidt + + * examples/Threads/auto_event.cpp (writer): Replaced "wait" with "signal" + in a comment (this was a copy and past error!). Thanks to Kobi for + reporting this. + + * ace/Containers_T.h (class ACE_Ordered_MultiSet): + * ace/String_Base.h (ACE_String_Base): + * ace/Array_Base.h: Changed all uses of "ACE_Allocator *allocator" to + "ACE_Allocator *the_allocator" to prevent problems when ACE is + used with some versions of STL. Thanks to Kobi Arazi + for reporting this. + + * ace/NT_Service.cpp: Fixed some problems so that the + ACE_NT_Service::insert() methods will self-register correctly if + the service executable is located on a path with spaces. Thanks + to Theo Landman for reporting this. + +Fri May 30 13:52:49 2003 Balachandran Natarajan + + * Makefile: Added a new target 'releaseciao' to include CIAO in + our distribution. Since CIAO needs seperate versioning this new + target is needed. Further the 'releaseall' will now call + releaseall on the Makefile in the TAO directory. + +Thu May 29 22:18:00 2003 Krishnakumar B + + * bin/MakeProjectCreator/config/zziplib.mpt (zzip): + + New template for compiling ACEXML with and without ZZIPLIB. + An environment variable ZZIP_ROOT needs to be set to point to + the place where the ZZIPLIB sources are installed. Specifically, + $ZZIP_ROOT/include should contain the header files, and + $ZZIP_ROOT/lib should contain the libraries. Then MPC should be + run as follows + + $(ACE_ROOT)/bin/mwc.pl -value_template zzip=1 + + in $(ACE_ROOT)/ACEXML to generate your favourite build tools. + + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/bordll.mpt: + * bin/MakeProjectCreator/templates/borexe.mpt: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplib.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/gnudll.mpt: + * bin/MakeProjectCreator/templates/gnuexe.mpt: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/makedll.mpt: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/nmakedll.mpt: + * bin/MakeProjectCreator/templates/nmakeexe.mpt: + * bin/MakeProjectCreator/templates/va4icc.mpd: + * bin/MakeProjectCreator/templates/va4iccdll.mpt: + * bin/MakeProjectCreator/templates/va4iccdllexe.mpt: + * bin/MakeProjectCreator/templates/va4icclib.mpt: + * bin/MakeProjectCreator/templates/va4icclibexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc6dspdll.mpt: + * bin/MakeProjectCreator/templates/vc6dspdllexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsplib.mpt: + * bin/MakeProjectCreator/templates/vc6dsplibexe.mpt: + * bin/MakeProjectCreator/templates/vc7.mpd: + * bin/MakeProjectCreator/templates/vc7dll.mpt: + * bin/MakeProjectCreator/templates/vc7exe.mpt: + + Changes to existing files to support ZZIPLIB. + +Fri May 30 01:43:12 UTC 2003 Don Hinton + + * include/makeinclude/wrapper_macros.GNU: + Added ifdef's to allow users to pass versioned_so=0 to + make in order to turn off library versioning. This is + useful for those who use our makefiles to build their + own projects, but don't want to version their libraries + with the ACE version number. Thanks to Jeff Kelley + for reporting the problem and + helping to nail down the fix. + + * THANKS: + Added Jeff Kelley to the hall of fame. + +Fri May 30 00:24:05 UTC 2003 Don Hinton + + * tests/Makefile.am: + Reverse link order of -lTest_Output and -lACE so that -lACE + appears after -lTest_Output. This will clear up link problems + on platforms like HPUX where the order matters. + + * tests/Makefile.tests: + Changed LIB to LDLIB, which solves the same problem. Thanks to + Steve Huston for reporting the problem. + +Thu May 29 11:08:44 2003 Simon McQueen + + * tests/RMCast/RMCast_Fragment_Test.dsp: + * tests/RMCast/RMCast_Membership_Test.dsp: + * tests/RMCast/RMCast_Reassembly_Test.dsp: + * tests/RMCast/RMCast_Reordering_Test.dsp: + * tests/RMCast/RMCast_Retransmission_Test.dsp: + * tests/RMCast/RMCast_UDP_Best_Effort_Test.dsp: + + Fixed incorrect library path. + +Wed May 28 15:18:47 2003 Simon McQueen + + * tests/Proactor_Test.dsp: + + Added release configuration. + + * tests/Test_Output.dsp: + + Removed post build step from release and static configurations. + No longer needed. + +Wed May 28 11:07:12 UTC 2003 Johnny Willemsen + + * THANKS: Added Branko Mijic to the hall of fame. + +Mon May 26 21:14:54 2003 Nanbor Wang + + * bin/PerlACE/Process.pm: Added a new "static" function + "Normalize_Executable_Name" so that we can figure out the + correct location of a "release" build executables. + +Mon May 26 18:23:41 2003 Steve Huston + + * ace/MEM_Acceptor.cpp (accept): Replace a C-style cast with + ACE_reinterpret_cast to silence a warning from HP aC++. + + * ace/config-hpux-11.00.h: Removed define for + ACE_HAS_TIUSER_H_BROKEN_EXTERN_C - it's not broken anymore in + 11.00 relatively recent updates. + + * ace/OS.h: Changed some u_int and u_long to unsigned int and + unsigned long, respectively to compile correctly even if + system includes are done out of order. + + * ace/OS_TLI.h: Fixed comment on #else of #if !defined (ACE_HAS_TLI). + + * include/makeinclude/platform_hpux_aCC.GNU: Add -D_HPUX_SOURCE to + CCFLAGS. ACE uses things that are set up by using this macro, but + if system includes are done before ace/config.h, it isn't picked + up in time. Fixes compile errors in performance-tests/SCTP which + were triggered by including system headers before ACE headers. + Although the general rule is to not do that, it's overly + restrictive in practice and we should try to remove that + restriction when it comes up. + (g++ sets this macro by default) + +Mon May 26 12:03:33 2003 Steve Huston + + * tests/tests.mpc: Added ACE_Init_Test. The WinXP-IA64 test was + picking up an old one since it was never regenerated. + +Mon May 26 10:43:21 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + Cleanup of setting and usage of TEMPLATES_FLAG. Also do this after + the include of the g++_common file because it is set in that + file. + +Sun May 25 14:53:33 UTC 2003 Johnny Willemsen + + * ace/config-cygwin32.h: + Cygwin has fcntl but this is not implemented, but has dll support. + + * ace/OS.i: + Removed not needed cygwin specific include. + +Sun May 25 09:27:43 2003 Douglas C. Schmidt + + * ace/Malloc_T.i (free): Added a check for a NULL ptr to prevent + system crashes. Thanks to Leonid Kvetnyi for + reporting this. + +Sun May 25 10:06:12 UTC 2003 Johnny Willemsen + + * ace/config-cygwin32.h: + Cygwin has si_addr and select.h + +Sun May 25 06:04:47 UTC 2003 Don Hinton + + * ace/OS_Dirent.cpp: + * ace/ace_wchar.h: + Added defines for ACE_TEXT_File_Attributes for both + ACE_USES_WCHAR and !ACE_USES_WCHAR and changed the call in + OS_Dirent.cpp to use the new macro. + +Sat May 24 17:21:40 UTC 2003 Don Hinton + + * examples/Service_Configurator/Misc/Makefile: + Only compile if shared_libs is defined. Although the Service + Configurator will work with static only libraries, this example + will not. + + * examples/Timer_Queue/Makefile.TQTD: + * netsvcs/clients/Naming/Dump_Restore/Makefile.Dump_Restore: + Added LIB and VLIB so that static_libs and static_libs_only will + build and clean the lib*.a libraries. + +Sat May 24 15:19:01 UTC 2003 Johnny Willemsen + + * ace/config-cygwin32.h: + Removed several ACE_LACKS defines, cygwin supports a lot more + than we think. + +Sat May 24 14:37:00 UTC 2003 Don Hinton + + * ace/OS_Dirent.cpp: + Added definitions of INVALID_FILE_ATTRIBUTES and + INVALID_SET_FILE_POINTER if missing on ACE_WIN32. These + were added after VC6 shipped and are provided in subsequent + headers, including the SDK's. They are defined here for those + us who don't have the new headers. + +Sat May 24 14:10:33 UTC 2003 Johnny Willemsen + + * ace/Log_Msg.cpp: + Removed cygwin specific code, isn't needed anymore + + * ace/config-cygwin32.h: + Cygwin supports mmap and msync. + +Fri May 23 22:20:14 2003 Balachandran Natarajan + + * Kokyu/Kokyu.cpp: Fixed fuzz errors. + +Fri May 23 09:13:38 2003 Douglas C. Schmidt + + * ace/OS_Dirent.cpp (opendir_emulation): Added a check to see + if the file is infact a directory. Thanks to Udo Berninger + for reporting this fix. + +Fri May 23 10:46:50 2003 Ossama Othman + + From Carsten Madsen + * ace/TTY_IO.h (Serial_Params): + + Added new "readmincharacters" member that denotes the minimum + number of characters for a non-canonical read. + + * ace/TTY_IO.cpp (control): + + Take into account the new Serial_Params::readmincharacters value + so that serial line timeout configuration is no longer as + limited as it was prior to this change. [Bug 1388] + +Fri May 23 12:20:54 2003 Balachandran Natarajan + + * THANKS: Added Vincent Korkos to the hall of fame. + +Fri May 23 11:43:10 2003 Balachandran Natarajan + + * bin/tao_orb_tests.lst: Added the OBV tests to our daily + builds. This is going to be one of the *most* important features + for CIAO and it is really sad that it is not being tested at + all! Ran into this when I was running some smoke tests and found + a surprise. No prizes for getting it right! One of the tests + failed :(! + +Fri May 23 10:38:13 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + If idlgendir is used, generate extra information in order to clean + up the generated files. Thanks to Andrey Nechypurenko + for reporting this. + +Fri May 23 14:46:33 UTC 2003 Johnny Willemsen + + * ace/OS.i (ioctl): + Cygwin has ioctl, so removed Cygwin specific that just returned + a notsup. + +Fri May 23 09:38:55 2003 Chad Elliott + + * bin/DependencyGenerator/DependencyGenerator.pm: + + Use case insensitve exclusion and remove double slashes and back + slashes. + +Fri May 23 09:18:32 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/nmake.mpd: + + Modify the depend target to call perl and pass it the depgen.pl + script instead of directly executing depgen.pl. + +Fri May 23 08:10:23 2003 Chad Elliott + + * bin/DependencyGenerator/DependencyEditor.pm: + * bin/DependencyGenerator/DependencyGenerator.pm: + * bin/DependencyGenerator/DependencyWriter.pm: + * bin/DependencyGenerator/DependencyWriterFactory.pm: + * bin/DependencyGenerator/GNUDependencyWriter.pm: + * bin/DependencyGenerator/GNUObjectGenerator.pm: + * bin/DependencyGenerator/NMakeDependencyWriter.pm: + * bin/DependencyGenerator/NMakeObjectGenerator.pm: + * bin/DependencyGenerator/ObjectGenerator.pm: + * bin/DependencyGenerator/ObjectGeneratorFactory.pm: + * bin/DependencyGenerator/Preprocessor.pm: + * bin/depgen.pl: + + Added my generic dependency generator that will work with both GNU + Makefiles and NMakefiles. + +Fri May 23 11:41:01 UTC 2003 Johnny Willemsen + + * ace/Sock_Connect.cpp: + Corrected debug statements that where wrong or incomplete. + +Fri May 23 11:26:32 UTC 2003 Johnny Willemsen + + * ace/config-cygwin32.h: + Improved because cygwin doesn't support pthreads completely by + setting some ACE_LACKS defines. + +Fri May 23 10:01:01 UTC 2003 Johnny Willemsen + + * ace/config-cygwin32.h: + Set the correct defines when building with threading enabled. + +Fri May 23 08:08:12 UTC 2003 Johnny Willemsen + + * ace/OS.i (sigwait): + Cygwin has sigwait but it is not implemented, so for cygwin + make sigwait a notsup. + +Fri May 23 03:04:01 UTC 2003 Don Hinton + + * ace/Configuration.h: + Fixed many instances of "t_name" that had either never been set + or had been changed back to "name". This is needed to support + default or unnamed values in the Registry or ini files. This + fixes several errors on Windows, especially in WCHAR builds. + +Fri May 23 02:44:23 UTC 2003 Don Hinton + + * ace/config-win32-common.h: + Added ACE_HAS_VSWPRINTF define. This should clear up some + the tests/Malloc_Test failures for WCHAR builds. + +Thu May 22 10:53:43 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Make sure to apply the relative definitions to the flag override + values. + +Thu May 22 10:30:31 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + + If an mwc file contained a relative path to an mpc file or + directory, these workspace creators would generate invalid + workspaces. This situation is accounted for now. + +Thu May 22 15:29:02 UTC 2003 Don Hinton + + * ace/TP_Reactor.cpp: + Fixed typo on Windows. + +Thu May 22 15:02:04 UTC 2003 Don Hinton + + * tests/Signal_Test.cpp: + Added include of ace/ACE.h to fix compile problem on AIX. + +Thu May 22 13:16:11 UTC 2003 Don Hinton + + * tests/Makefile.tests: + Readded Multihomed_INET_Addr_Test that was mistakenly left out + when the makefiles were reorganized. + + * tests/Proactor_Timer_Test.dsp: + * tests/Service_Config_Tests.dsp: + * tests/Test_Output.dsp: + Fixed library path problems in Win32 Release builds. Thanks to + Simon McQueen for reporting this. + +Thu May 22 12:52:59 UTC 2003 Johnny Willemsen + + * ace/config-win32-mingw.h: + Added define ACE_LACKS_NATIVE_STRPTIME + +Thu May 22 07:35:23 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/USAGE: + + Updated the documentation on the new feature files and the + -feature_file option. + + * bin/MakeProjectCreator/config/global.features: + + This is the global feature file. It contains the default feature + settings that should be acceptable for most situations. See + comments in this file for more information. + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/FeatureParser.pm: + * bin/MakeProjectCreator/modules/Options.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Support has been added for the new feature files. + +Thu May 22 07:28:29 2003 Balachandran Natarajan + + * ace/TP_Reactor.h: + * ace/TP_Reactor.cpp: Reverted changes from this "Thu May 22 + 00:16:11 UTC 2003 Don Hinton ". The + right fix for compilers that emit warnings when trying to + override only a few methods from a set of overloaded methods in + the derived class, is to completely declare all the other + overloaded methods. In the definition of the methods that we + dont plan to override we should simply call the base class + implementation. + +Thu May 22 11:29:54 UTC 2003 Johnny Willemsen + + * ace/config-cygwin32.h: + * ace/config-cygwin32-common.h: + Moved the contents of the cygwin32-common file to the cygwin32 + file. It doesn't make sense to have two files for cygwin. + +Thu May 22 07:51:12 UTC 2003 Johnny Willemsen + + * ace/config-vxworks5.x.h: + Added defines ACE_HAS_STRPTIME and ACE_LACKS_NATIVE_STRPTIME + + * ace/config-win32-mingw.h: + Added define ACE_HAS_STRPTIME + + * ace/Token_Collection.h: + * ace/Token_Invariants.h: + * ace/Token_Manager.h: + Doxygen documentation fixes. + +Wed May 21 19:55:54 2003 Nanbor Wang + + Thanks to Tongzhe Cui for motivating the + following changes. + + * ace/MEM_Acceptor.h: + * ace/MEM_Acceptor.i (init_buffer_size): Added this new helper + function to set the initial buffer size of the newly created + ACE_MEM_Stream the acceptor creates subsequently. + + * ace/MEM_Connector.h: + * ace/MEM_Connector.i: + * ace/MEM_Acceptor.h: + * ace/MEM_Acceptor.i: Marked the malloc_options accessor function + as deprecated. + + * tests/MEM_Stream_Test.cpp (test_concurrent): Changed to use the + new init_buffer_size method to set the buffer size. + +Thu May 22 00:16:11 UTC 2003 Don Hinton + + * ace/os_include/math.h: + Fixed a FUZZ error by disabling it in this file. + + * ace/TP_Reactor.h: + Added using ACE_Select_Reactor::register_handler; so the virtual + methods that weren't reimplemented wouldn't be hidden. + + * tests/DLList_Test.cpp: + Added missing STRLIST_REVERSE_ITERATOR typedef and fixed a few + function calls that were missing an argument. + +Wed May 21 16:05:29 2003 Steve Huston + + * ace/Containers_T.i (ACE_DLList_Reverse_Iterator::next (T *&ptr)): + If the next() pointer is 0, don't dereference it. Thanks very much + to Ken Kane for this fix. + + * tests/DLList_Test.cpp: Added a run_reverse_iterate() test function + to hit the error case above. + + * THANKS: Added Ken Kane to the Hall of Fame. + +Wed May 21 21:46:19 UTC 2003 Don Hinton + + * tests/Main.cpp: + Include ace/ACE.h if ACE_HAS_WINCE is defined since it calls + ACE::init(). + + * tests/tests.mpc: + Added missing Main.cpp for Thread_Pool_Reactor_Test. + + * tests/RMCast/tests/mpc: + * tests/SSL/tests.mpc: + Added "libpaths += .." so they can find Test_Output.lib. + +Wed May 21 21:25:20 UTC 2003 Don Hinton + + * tests/Test_Output.cpp: + Add include of ace/Object_Manager.h and + ace/Framework_Component.h instead of ace/Singleton.h. This + fixes compile problems on AIX as well as reducing the number of + includes. + +Wed May 21 14:32:13 UTC 2003 Don Hinton + + * tests/Test_Output.dsp: + Removed post build step that cleaned up old versions of + Test_Output*.dll. + +Wed May 21 09:25:16 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Parser.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Push escape_regex_special() back into Parser. + + * bin/MakeProjectCreator/modules/Driver.pm: + + Print out a relative path for files that are being processed. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + If generating a workspace per project, don't modify the workspace + name. + +Wed May 21 14:12:16 UTC 2003 Johnny Willemsen + + * ace/OS.h: + * ace/config-cygwin32-common.h: + * ace/README: + Removed define ACE_HAS_CYGWIN32_SOCKET_H because it is not used and + needed anymore. + +Wed May 21 02:49:10 UTC 2003 Don Hinton + + * tests/Makefile.am: + Added missing Main.cpp to several targets. Thanks to + Terletsky Oleg for reporting this + and supplying the patch. + +Tue May 20 18:56:03 UTC 2003 Don Hinton + + * tests/tests.mpc: + * tests/RMCast/tests.mpc: + * tests/SSL/tests.mpc: + Changed name of "Test Output" project to "Test_Output" and made + it a dependency of all the other test projects. Thanks to + Nanbor Wang for this suggestion. + +Tue May 20 12:53:59 2003 Balachandran Natarajan + + * ace/TP_Reactor.h: + * ace/TP_Reactor.cpp: Do not allow users to register signal + handlers with the TP_Reactor. The TP_Reactor does not support + signals properly and allowing this is simply confusing. We + now return a value of -1 if users try registering a signal handler + with the reactor. Thanks to Carsten Prescher + for pointing this out. + +Tue May 20 10:54:10 2003 Douglas C. Schmidt + + * tests/Proactor_Test.cpp (open): Changed IPPROTO_TCP to + ACE_IPPROTO_TCP. Thanks to David Ohlemacher + for motivating this. + +Tue May 20 01:50:35 UTC 2003 Don Hinton + + * tests/Test_Output.dsp: + Added a post compile step that deletes any Test_Output*dll's in + current directory. This will be removed once the autobuilds have + have a chance to run and clean up the old files. + + * tests/Test_Output.cpp: + Fixed a typo, and changed the close_singleton() method to delete + the instance_ directly and set it = 0; + +Tue May 20 01:50:35 UTC 2003 Don Hinton + + * ace/config-aix-4.x.h: + * ace/config-cygwin32-common.h: + * ace/config-freebsd.h: + * ace/config-irix5.2.h: + * ace/config-irix5.3-g++.h: + * ace/config-irix5.3-sgic++.h: + * ace/config-irix6.x-common.h: + * ace/config-linux-common.h: + * ace/config-lynxos.h: + * ace/config-m88k.h: + * ace/config-macosx.h: + * ace/config-netbsd.h: + * ace/config-openbsd.h: + * ace/config-qnx-neutrino.h: + * ace/config-qnx-rtp.h: + * ace/config-sunos4-g++.h: + * ace/config-sunos4-lucid3.2.h: + * ace/config-sunos5.4-g++.h: + * ace/config-sunos5.4-sunc++-4.x.h: + * ace/config-sunos5.5.h: + * ace/config-tandem.h: + * ace/config-unixware-7.1.0.h: + * ace/config-win32-msvc.h: + Commented out ACE_HAS_ALLOCA. Even though these + compiler/platform combinations do have alloca(), it can be + dangerous. Users can uncomment it or define it in their own + config.h file if they want to use it. Please see ChangeLog + entry "Mon May 19 11:03:31 2003 Ossama Othman + " below for how to use it with autoconf. + +Tue May 20 01:10:42 UTC 2003 Don Hinton + + * ace/DLL_Manager.cpp (get_handle): + Always return handle on success. As coded, it only returned the + handle if the refcount was > 0 when become_owner was passed. + + Added additional debug statements when ACE::debug() is enabled. + + * tests/Makefile.Test_Output: + Correctly define TEST_OUTPUT_BUILD_DLL when building shared + library. + + * tests/test_config.h: + * tests/Test_Output.cpp: + Reverted Test_Output to a singleton, although not based on + ACE_Singleton. This keeps us from having to include + Singleton.h, which in turn includes OS.h. Thanks to Johnny + Willemsen for helping track this down and + suggesting the fix. + +Mon May 19 11:03:31 2003 Ossama Othman + + * configure.ac: + + Only detect alloca() support if explicitly enabled by the user. + + * bin/make_release: + + Reenabled bootstrapping of ACE+Autoconf support when creating + ACE beta/release kits. + + * m4/ace.m4 (ACE_CONFIGURATION_OPTIONS): + + Added "--enable-alloca" configure script option. alloca() + support will be disabled by default. + +Mon May 19 16:08:47 UTC 2003 Don Hinton + + * tests/CDR_Test.cpp: + * tests/MT_Reactor_Upcall_Test.cpp: + * tests/Pipe_Test.cpp: + * tests/Process_Mutex_Test.cpp: + * tests/Reactor_Dispatch_Order_Test.cpp: + * tests/Time_Service_Test.cpp: + Added include of ace/ACE.h to fix compile problem on AIX. ACE.h + was being picked up in ace/String_Base.cpp that's only included + when ACE_TEMPLATES_REQUIRE_SOURCE is defined, which AIX doesn't. + + * tests/RB_Tree_Test.cpp: + Added include of ace/Synch.h to fix compile problem on AIX + similar to the above. + +Mon May 19 15:14:22 UTC 2003 Don Hinton + + * tests/Test_Output.dsp: + Changed output location for dll so that other projects can find it. + + * tests/DLL_Test_Impl.dsp: + * tests/Framework_Component_DLL.dsp: + * tests/Service_Config_DLL.dsp: + Removed dependency on Test_Output.dll which isn't needed and causes + build failures in the autobuilds since they don't honor the dependencies + in tests.dsw. + +Mon May 19 11:13:12 UTC 2003 Johnny Willemsen + + * tests/SSL/Makefile.bor: + * tests/RMCast/Makefile.bor: + Changed location of Test_Output lib + + * tests/Test_Output.bor: + Changed location to core_bindir, else we can't find the lib from + other makefiles. + + * tests/Makefile.bor: + Trigger makefile for Tests.bor and Test_Output.bor, this makes + it possible to make sure that Test_Output is build first + + * tests/Tests.bor: + Contents of the original Makefile.bor. This because it is not + possible to make sure that Test_Output is build first. + +Mon May 19 04:30:45 UTC 2003 Don Hinton + + * tests/*.icc: + Added Main.cpp to all executable projects. + + * tests/libTest_Output.icc: + * tests/tests.icp: + Added new file, libTest_Output.icc, and added it to tests.icp. + + * tests/vacpp_setup.icc: + Added Test_Output to platformLinkLibs. + +Mon May 19 03:12:23 UTC 2003 Don Hinton + + * tests/Makefile.am: + Added new Test_Output.la and Main.cpp to all *SOURCE variables. + +Sun May 18 20:00:58 UTC 2003 Don Hinton + + * tests/ACE_Init_Test.cpp: + Added include of ACE.h. + + * tests/test_config.h: + Added Test_Output_Export to randomize() declaration. + + * tests/tests.dws: + * tests/Test_Output.dsp: + Added new project file, Test_Output.dsp, and added it to tests.dsw. + + * tests/*.dsp: + Added Test_Output[*].lib and Main.cpp source to all projects (except dlls). + + * tests/RMCast/*.dsp: + Added Test_Output[d].lib to all project files. + +Sun May 18 19:18:45 UTC 2003 Don Hinton + + Merged up tests changes. + + Sun May 18 18:21:00 UTC 2003 Don Hinton + + * tests/tests.mpc: + Added Test_Output library and Main.cpp to all objects. + + * tests/RMCAST/Makefile.bor: + * tests/RMCAST/tests.mpc: + * tests/SSL/Makefile: + * tests/SSL/Makefile.bor: + * tests/SSL/tests.mpc: + Added Test_Output library to all objects. + + Sun May 18 17:32:29 UTC 2003 Don Hinton + + * tests/Makefile.bor: + * tests/Test_Output.bor: + Added new Borland Makefile, tests/Test_Output.bor and modified + Makefile.bor to call it and link Test_Output.lib for all objects + and add Main.obj to OBJFILES. + + * tests/test_config.h: + * tests/Test_Output_Export.h: + Added tests/Test_Output_Export.h and added Test_Output_Export to + Test_Output class declaration. + + Sun May 18 00:04:17 UTC 2003 Don Hinton + + Merged dre_030425 up to the main and rebranched to dre_test_01. + + Sat May 17 19:31:43 UTC 2003 Don Hinton + + * ace/Codecs.h: + * ace/Unbounded_Set.inl: + * ace/Unbounded_Set_Ex.inl: + Added include of ace/Global_Macros.h: + + * tests/Makefile: + * tests/Makefile.libs: + * tests/Makefile.tests: + * tests/Makefile.dirs: + Added new files, Makefile.libs, Makefile.tests, and + Makefile.dirs, and moved the contents of Makefile to these + files. This allows us to create a new libTest_Output that all + the tests depend on. + + * tests/test_config.h: + * tests/Test_Output.cpp: + Moved the Test_Output class impementation into it's own cpp so + it can be built into libTest_Output. This helps speed up + compilation by reducing dependencies and allowing the class to + be compiled a single time instead of once for each test. + + * tests/*.cpp: + * tests/Main.cpp: + Moved ACE_TMAIN to a new file, Main.cpp, and changed all main + and ACE_TMAIN instances to run_main. This helps obviate the + need to include OS.h, needed by ACE_TMAIN, in every test, thus + speeding up compilation and reducing dependencies. + + * tests/ACE_Test.cpp: + Only include ace/ACE.h when ACE_WIN32 is defined. + + * tests/Aio_Platform_Test.cpp: + Remove include of ace/Log_Msg.h. + + * tests/Basic_Types_Test.cpp: + Replace include of ace/OS.h with ace/config-all.h. + + * tests/Bound_Ptr_Test.cpp: + Remove includes of ace/ACE.h, ace/Synch.h, ace/Message_Queue.h, + and ace/Method_Request.h. + + * tests/CDR_Array_Test.cpp: + * tests/Codecs_Test.cpp: + * tests/Mem_Map_Test.cpp: + * tests/MM_Shared_Memory_Test.cpp: + * tests/MT_Reactor_Timer_Test.cpp: + * tests/Object_Manager_Test.cpp: + * tests/Token_Strategy_Test.cpp: + Add include of ACE.h. + + * tests/Env_Value_Test.cpp: + Don't pass envp[]. + + * tests/Get_Opt_Test.cpp: + Removed include of OS.h: + + * tests/Reverse_Lock_Test.cpp: + Added include of ace/Synch.h. + + * tests/Timeprobe_Test.cpp: + Added include of ace/Singleton.h. + + * tests/RMCast/Makefile: + Added -lTest_Output to LDLIBS. + + * tests/RMCast/RMCast_Fragment_Test.cpp: + * tests/RMCast/RMCast_Membership_Test.cpp: + Added include of ace/ACE.h. + +Fri May 16 11:15:53 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Added a new keyword for custom definitions. If the file type + generated by the command doesn't belong to source, inline, header, + resource or documentation, then use generic_outputext. + +Thu May 15 09:32:01 2003 Douglas C. Schmidt + + * ace/Configuration_Import_Export.cpp (import_config): Fixed a memory + leak where the "data" buffer wasn't being deleted. Thanks to + Roland Meub for reporting this. + +Thu May 15 10:41:32 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + + Add a -r to the realclean target for custom generated files. The + generated files could be directories. + +Thu May 15 12:21:28 UTC 2003 Don Hinton + + * ace/SOCK_SEQPACK_Association.cpp: + Added missing explicit template instantiation for + ACE_Auto_Array_Ptr/ACE_Auto_Basic_Array_Ptr, needed + at least for SUNWspro_6.2. + +Thu May 15 07:08:39 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a couple of bugs with the custom build types. Generated + files were being selected due to a back regular expression match. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Only write out a new workspace if it is different than the + existing one or if one doesn't exist. + + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Only output custom rules if the input file has corresponding + output files. + +Wed May 14 20:02:56 UTC 2003 Don Hinton + + * ace/config-all.h: + * ace/README: + Rolled back Wed May 14 14:52:40 UTC 2003 Don Hinton + . + +Wed May 14 14:09:56 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug with custom types when processing multiple mpc files + that use a custom type. The type definitions were not being + removed after processing. + +Wed May 14 13:52:37 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Always use gendir if it's defined not just if the output_option is + specified. The command may output to gendir without an + output_option. + +Wed May 14 11:11:31 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/nmake.mpd: + + Force the idl_stubs target to be processed before anything else. + In case an idl file is listed but not explicitly listed in the + source files, we still need to process the idl first. + +Wed May 14 14:52:40 UTC 2003 Don Hinton + + * ace/config-all.h: + * ace/README: + Added new macro, ACE_USES_ALLOCA. If it is not defined in the + user's config.h, then turn off ACE_HAS_ALLOCA by default. + +Tue May 13 09:39:13 2003 Douglas C. Schmidt + + * ace/OS.i (last_error): Fixed this method so that it assigns errno + to the error value. This fixes an inconsistency reported by + Damien Dufour . + +Tue May 13 16:59:00 2003 Simon McQueen + + * include/makeinclude/ace_flags.bor: + + Made TAO_PORTABLESERVER_CFLAGS and TAO_PORTABLESERVER_LIB into + the aggregation of themselves and TAO_VALUETYPE/TAO_IORINTERCEPTOR/ + TAO_ORT - CFLAGS and LIB respectively. Should fix link errors on + the static build. + +Tue May 13 09:04:18 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added support for dynamic workspace and project names based on the + default project name. Asterisks in the project or workspace name + are replaced by the default name. See the README for more + details. + +Tue May 13 07:47:09 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + If a value is an empty string or an array of empty strings, then + we will assume the value is undefined for <%if()%> statements. + +Mon May 12 19:27:54 2003 Nanbor Wang + + * ace/Thread_Manager.cpp (wait): Fixed an occasional assertion + failure during shutdown of our servers which seems be caused by + a double deletion of an item in the ACE_Thread_Manager + terminated_thr_list_ in ACE_Thread_Manager::wait (). + + The statement "item = this->terminated_thr_list_.delete_head ()" + is not protected by the mutex and can be access by + more than one thread modifying the terminated_thr_list_. + Extending the mutex protection scope fixed this problem. + Thanks to Bruce McIntosh for + suggesting the fix. [Bug 1505] + +Mon May 12 13:32:56 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Check for existence of output file before checking for the size. + +Mon May 12 13:23:27 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Convert dashes in project names to underscores. VC6 can't handle + project names with dashes. + +Mon May 12 16:35:16 2003 Simon McQueen + + * include/makeinclude/build_example.bor: + + Added missing libraries to fix static build link errors. + +Mon May 12 08:56:27 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Added a check to avoid comparing the output files if they are + different sizes. + +Mon May 12 07:39:29 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Added code to compare the output project with the existing + project. If they are the same then do not overwrite the project + file. This is very helpful when your workspace is loaded in vc6 + or vc7. + +Fri May 9 16:55:17 2003 Balachandran Natarajan + + * THANKS: Added Thomas Wiegert to the hal of fame. + +Fri May 09 12:57:09 2003 Nanbor Wang + + * bin/MakeProjectCreator/config/ciao_client.mpb: + * bin/MakeProjectCreator/config/ciao_component.mpb: Added more + directories into libpaths to reflect recent TAO subsetting + efforts. + +Fri May 9 12:49:42 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug with project names with special characters not being + matched witht the proper resource file. + +Fri May 9 10:17:11 2003 Ossama Othman + + * bin/fuzz.pl (check_for_ptr_arith_t): + + New check for ptr_arith_t usage in source files. Steve Huston + points out that we should be using the portable/standard + ptrdiff_t type instead. + +Fri May 9 12:12:51 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug where file names would have extra slashes in them. + +Fri May 9 11:58:57 2003 Balachandran Natarajan + + * THANKS: Added Ira Burton to the hall of fame. + +Fri May 09 11:04:44 2003 Nanbor Wang + + * ace/Thread_Manager.h: + * ace/Thread_Manager.cpp: Applied a patch that expose the + Thread_Manager internal freelists, and the thread startup sync + mutex in Thread_Descriptor. These changes allow users to derive + their own Thread_Manager and spawn threads using a third party + library, such as that of Sybase's Open Server. Thanks to Caleb + Epstein for submitting the patch. + +Fri May 9 08:45:12 2003 Chad Elliott + + * examples/Reactor/WFMO_Reactor/Handle_Close.cpp: + + Fixed a build warning from Borland. + +Fri May 9 08:01:59 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + + Added documentation on the Custom File Definitions. + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Fixed bad error handling. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Added support for custom build definitions. See the + "Custom File Definitions" section of the README for more + information. + + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Utilize the custom types in the supported template files. + +Thu May 8 18:50:24 2003 Steve Huston + + * tests/run_test.lst: Moved Cached_Accept_Conn_Test down the list + to put some time between it and Cached_Conn_Test. They both suck up + all available sockets and one after the other is a guaranteed fail + on Windows XP due to socket starvation. + +Thu May 8 16:57:18 2003 Steve Huston + + * ace/Date_Time.i (update): WinCE doesn't do localtime(), so extract + the FILETIME value from ACE_Time_Value and convert it to system time. + Fixes Bugzilla #1502. + + * ace/OS.cpp (uname): Added proper sensing of Windows CE at runtime + as well as the ARM processor type. + + * tests/Enum_Interfaces_Test.cpp: Convert the interface address + strings to ACE_TCHAR for logging. Makes them legible on wide-char + builds. Fixes Bugzilla #1501. + +Thu May 08 15:03:17 2003 Simon McQueen + + * bin/msvc_auto_compile.pl: + + Added IORInterceptor, ObjRefTemplate, and Valuetype into the -LIB + -CORE list. I think the absence was causing the failures to build + the Naming Service in the static builds. + +Thu May 8 06:44:19 2003 Balachandran Natarajan + + * bin/topinfo_iorsize_stats.sh (FILES): Fixed a typo in the + script! + +Wed May 7 17:51:51 2003 Jeff Parsons + + * bin/MakeProjectCreator/config/iorinterceptor.mpb: + * bin/MakeProjectCreator/config/objreftemplate.mpb: + * bin/MakeProjectCreator/config/valuetype.mpb: + + New base project files correponding to the new libraries + subsetted out of TAO. + +Wed May 7 18:32:45 2003 Steve Huston + + * tests/FIFO_Test.cpp: Fix the version of main() that was actually + causing the problem (see: Tue May 6 18:06:39 2003 Steve Huston) + +Wed May 7 17:02:44 2003 Balachandran Natarajan + + * bin/MakeProjectCreator/config/ciao_component.mpb: Added the + required libraries to build the server. This was necessitated by + the recent subsetting in TAO. + +Wed May 7 17:25:49 2003 Steve Huston + + * ace/Service_Config.h: Added description of the -s option to + ACE_Service_Config::open(). Also clarified -f, -k, -n, -y and -S. + +Wed May 7 14:00:31 2003 Steve Huston + + * ace/Basic_Types.h: In ACE_LONGLONG_TO_PTR macro, replace use + of ptr_arith_t with ptrdiff_t. Thanks to Ossama for noticing this. + +Wed May 7 12:03:28 2003 Balachandran Natarajan + + * bin/topinfo_iorsize_stats.sh (FILES): Removed the memory + tracking on the client side since its of no use. Added code to + collect the actual size of the server growth once data is + marshalled. + + * bin/generate_topinfo_stats.sh: Used the 4th argument to plot + information on the y axis. + +Wed May 7 08:22:12 UTC 2003 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Just define libflags, no need to define them to 1 + +Tue May 6 18:06:39 2003 Steve Huston + + * ace/Basic_Types.h: Add typedef of ptrdiff_t for WinCE 3. Follow-up: + Tue May 6 13:39:27 2003 Steve Huston + + * tests/FIFO_Test.cpp: Changed main() to ACE_TMAIN() to fix WinCE + (wide char) build error. + + * bin/PerlACE/Process_Win32.pm: Corrected comments about what the + PocketPC script is doing. + +Tue May 6 13:39:27 2003 Steve Huston + + * ace/Functor.i (ACE_Hash::operator()): + * ace/OS_Memory.h (ACE_align_binary): Replace ptr_arith_t with + the standard type ptrdiff_t. + + * ace/Basic_Types.h: Removed all the conditionals for trying to figure + out how to define ptr_arith_t. Replaced it with a typedef + ptrdiff_t ptr_arith_t. This is a temporary placeholder until all + ptr_arith_t usage can be expunged from TAO. Required adding + #include to pick up the ptrdiff_t type. + +Tue May 6 11:50:18 2003 Chad Elliott + + * ace/Synch.cpp (get_nesting_level): + + On Windows XP 64-bit, the RecursionCount of the CRITICAL_SECTION + object is zero based. With Win32, it is 1 based. So, we use + LockCount + 1 on Win64. + +Tue May 6 09:19:07 2003 Chad Elliott + + * tests/MT_Reactor_Timer_Test.cpp: + * tests/RMCast/RMCast_Fragment_Test.cpp: + * tests/RMCast/RMCast_Reassembly_Test.cpp: + * tests/Reactor_Timer_Test.cpp: + * tests/Service_Config_Test.cpp: + * tests/Thread_Manager_Test.cpp: + + Remove build warnings on Windows XP 64-bit. + +Tue May 6 09:03:32 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Reverted my change from Tue May 6 06:54:43 2003. + +Tue May 6 06:54:43 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Simplified the generated Makefile by using the .DEFAULT rule. + +Mon May 5 19:06:49 2003 Steve Huston + + * bin/MakeProjectCreator/templates/nmake.mpd: When generating the + REALCLEAN rule, use a separate erase command for the various + exe-related files, else multiple files end up being generated in + a single pair of quotes, making the list appear as a single + filespec and nothing gets deleted. + +Mon May 5 13:34:46 2003 Chad Elliott + + * ace/RMCast/RMCast_Fragment.cpp: + * ace/RMCast/RMCast_IO_UDP.cpp: + * ace/RMCast/RMCast_Partial_Message.cpp: + * ace/RMCast/RMCast_Reassembly.cpp: + * examples/Reactor/WFMO_Reactor/APC.cpp: + * examples/Reactor/WFMO_Reactor/Handle_Close.cpp: + * examples/Reactor/WFMO_Reactor/Multithreading.cpp: + * examples/Reactor/WFMO_Reactor/Prerun_State_Changes.cpp: + * examples/Reactor/WFMO_Reactor/Removals.cpp: + * examples/Reactor/WFMO_Reactor/WFMO_Reactor.mpc: + * tests/Basic_Types_Test.cpp: + + Fixed build errors and warnings for Windows XP 64-bit. + + * tests/tests.mpc: + + Added the FIFO test. + +Mon May 5 17:07:23 UTC 2003 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Just define dllflags, no need to define them to 1 + +Sun May 4 23:59:41 2003 Balachandran Natarajan + + * ACE-INSTALL.html: Updated MAC OS part of the file as per the Jon + Zorko's request. + +Sun May 4 16:45:46 UTC 2003 Don Hinton + + * THANKS: Added Scott Gammil to the hall of fame. + +Sat May 03 16:19:39 2003 Balachandran Natarajan + + * THANKS: Added Andras Lang to the hall of fame. + +Sat May 3 18:18:07 UTC 2003 Johnny Willemsen + + * bin/fuzz.pl: + When checking for $Id strings, when found jump out of the + while loop. This improved the speed of the check by factor + two on my system. + +Fri May 2 20:07:19 2003 Jeff Parsons + + * include/makeinclude/ace_flags.bor: + + Added some flag and lib definitions that will be used by + BCB with the new TAO libraries that will appear in a + forthcoming CVS branch merge. + +Fri May 2 08:45:09 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Only create a project if source files or idl files are found or + listed. + +Thu May 1 12:55:13 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/VC6WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm: + + Use the get_validated_ordering() method. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added a method to get the validated ordering instead of modifying + the projects dependencies. That way the project caching still + functions properly in the case of overlapping projects within + multiple workspaces. + +Thu May 1 10:32:26 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + + Fixed the process return value for when the default input is used. + It was hard coded to always return 1 and did not take into account + that a default workspace could have mpc files that do not evaluate + properly. + +Thu May 1 07:09:07 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/StringProcessor.pm: + + Correct a problem with creating arrays from strings with only + spaces. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Check to see that an option was used before trying to access the + option type. + +Wed Apr 30 20:15:00 UTC 2003 Gautam Thaker + + Please direct all immediate build issues to jcohen@atl.lmco.com + if problems occur as a result of this check in. Thank you. + + * performance-tests/SCTP/SOCK_SEQPACK_srv.cpp + * performance-tests/SCTP/SOCK_STREAM_clt.cpp + * performance-tests/SCTP/SOCK_STREAM_srv.cpp + * performance-tests/SCTP/Options_Manager.cpp + + Corrected IPPROTO_SCTP #define to only occur on platforms + that don't have it defined already. + + * performance-tests/SCTP/Makefile + * performance-tests/SCTP/SOCK_SEQPACK_Association_Test.cpp + * tests/Makefile + * tests/SOCK_SEQPACK_Association_Test.cpp + * tests/SOCK_SEQPACK_Association_Test.dsp + * tests/tests.dsw + + Moved SOCK_SEQPACK_Association_Test from tests/ to + performance-tests/SCTP/. It does not match the philosophy + of the tests in the tests directory. + +Wed Apr 30 13:43:14 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + + Rename the workspace extension from .mak to .nmake to avoid + possibly overwritting a generated project. + +Wed Apr 30 10:42:04 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + + Added the full path of the input file to the error output in the + parse_file() method. + +Wed Apr 30 16:08:13 2003 Simon McQueen + + * ace/ace_lib.dsp: + + Added Multihomed_INET_Addr.*, SOCK_SEQPACK_Association.*, and + SOCK_SEQPACK_Connector.* into project to fix errors on the static + builds. + +Wed Apr 30 09:38:19 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + If no type is specified for the exclude keyword, then exclude the + listing for all project types. + +Wed Apr 30 08:37:29 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Parser.pm: + + Search the current directory for include files first instead of + last. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Convert project name spaces to underscores. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Fixed a bug in generated workspace naming. Also, added build + ordering verification. To enable invalid ordering warnings set + the MPC_VERBOSE_ORDERING environment variable. + +Wed Apr 30 07:40:51 2003 Chad Elliott + + * apps/gperf/src/Hash_Table.cpp: + * apps/gperf/src/Key_List.cpp: + + Remove build warnings on Windows XP 64-bit. + +Tue Apr 29 18:40:28 2003 Steve Huston + + Picked up the following from Riverace's 5.3 tree: + + Sat Apr 19 19:12:39 2003 Steve Huston + + * ace/config-WinCE.h: Define ACE_DEFAULT_BASE_ADDR to 0 always; + WinCE can't do fixed address memory mapped file. Also added + ACE_HAS_TSS_EMULATION; WinCE is very restrictive with TLS keys. + + * ace/config-win32-common.h: Only set ACE_DEFAULT_BASE_ADDR if it + hasn't been set prior. Allows the CE definition to hold, and also + allows a user to set a particular value. + + * ace/Configuration.cpp: When native Win32 calls are used and return + an error, set errno to the error status value so the logging %p + stuff works correctly. + + * ace/Log_Msg.cpp (log): For %p, don't try strerror() for WinCE. It + doesn't have this concept, so run everything through FormatMessage. + + * tests/Config_Test.cpp: Be sure that no keys are left open before + attempting to delete the referred-to sections later. Deleting + while a key is still open to the being-deleted section fails on CE. + + * tests/Logging_Strategy_Test.cpp: When setting the ouptut log file + name, use the platform log file extension (it's different for WinCE). + + * tests/Malloc_Test.cpp: If on WinCE, must use base 0, NEVER_FIXED + ACE_MMAP_Memory_Pool_Options. WinCE cannot do fixed addresses. + + * tests/MT_Reactor_Upcall_Test.cpp: + * tests/Reactor_Dispatch_Order_Test.cpp: Don't attempt the WFMO_Reactor + part if on WinCE. CE doesn't have the necessary Winsock2 support. + + Fri Mar 21 22:45:39 2003 Steve Huston + + * ace/config-WinCE.h: Added ACE_LACKS_AUTO_PTR; also see + Wed Feb 19 17:43:15 2003 Steve Huston + +Tue Apr 29 18:30:00 UTC 2003 Gautam Thaker + + Please direct all immediate build issues to jcohen@atl.lmco.com + if problems occur as a result of this check in. Thank you. + + * ace/ace.mpc + + Added SOCK_SEQPACK_{Association,Acceptor,Connector} and + Multihomed_INET_Addr to "Sockets" section of mpc. + +Tue Apr 29 18:15:00 UTC 2003 Gautam Thaker + + Please direct all immediate build issues to jcohen@atl.lmco.com + if problems occur as a result of this check in. Thank you. + + * performance-tests/SCTP/SOCK_SEQPACK_clt.cpp + + Added check for IPPROTO_SCTP for platforms that natively + know about SCTP. + + * tests/SOCK_SEQPACK_Association_Test.cpp + + Changed 'char' usage to 'ACE_TCHAR' + + * tests/icc.bat + + Added Multihomed_INET_Addr_Test. + Suggestion: README needs to be updated to reflect + current set of files where new tests must be added to. + +Tue Apr 29 12:58:51 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/EM3WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VA4WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC6WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Keep track of workspace files written and modify duplicate + workspace names to avoid overwritting them. + +Tue Apr 29 12:17:03 2003 Venkita Subramonian + + * ace/Message_Queue_T.cpp: + Fixed a bug in Dynamic_Message_Queue::enqueue method. The + current number of bytes was getting decremented when a message + was enqueued. Thanks to Michael Kircher + (Michael.Kircher@siemens.com) for reporting this bug. + +Tue Apr 29 11:21:40 2003 Chad Elliott + + * ACEXML/common/AttributesImpl.cpp: + * ACEXML/common/FileCharStream.cpp: + * ACEXML/common/HttpCharStream.cpp: + * ACEXML/common/Mem_Map_Stream.cpp: + * ACEXML/common/NamespaceSupport.cpp: + * ACEXML/common/StrCharStream.cpp: + * ACEXML/common/Transcode.i: + * ACEXML/common/Transcode.cpp: + * ACEXML/parser/parser/Parser.cpp: + * ace/Containers_T.cpp: + * ace/FIFO_Send_Msg.cpp: + * ace/Functor.i: + * ace/Time_Value.inl: + + Remove build warnings on Windows XP 64-bit. + + * ace/config-win32-common.h: + + Added a definition for ACE_SIZEOF_VOID_P in the ACE_WIN64 section + stating that the size of a pointer is 8 bytes. + +Tue Apr 29 11:02:27 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + + Change the workspace name from 'Makefile' to the the workspace + name plus .mak. + +Tue Apr 29 09:24:07 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Use the project name as the default library name instead of the + directory name. + +Tue Apr 29 08:47:16 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + If a project is not specified to be either a library or exe and it + can't be determined that the type is exe, we default to a library. + +Tue Apr 29 06:25:37 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + + Remove the windows only part about dllflags and libflags. + +Tue Apr 29 05:49:12 UTC 2003 Johnny Willemsen + + * ace/Makefile.bor: + Fixed typo. + +Mon Apr 28 21:20:48 2003 Douglas C. Schmidt + + * ace/POSIX_Proactor.cpp (handle_events_i): There was an incorrect + conversion from milliseconds to nanoseconds, which is now fixed. + Thanks to Ray Limpus for reporting this. + +Tue Apr 29 00:30:37 UTC 2003 Don Hinton + + * bin/generate_compile_stats.sh: + My changes below worked so well, that ls can no longer + handle all the objects, use find instead. + +Mon Apr 28 11:00:13 2003 Ossama Othman + + * configure.ac: + + Reverted change that placed configure script set optimization + flags before $CXXFLAGS. GNU Autoconf likes to add "-g -O2" to + $CXXFLAGS by default for GNU C/C++ compilers. That + unfortunately overrides the configure script optimization flags, + hence the need to revert the change. + +Mon Apr 28 10:54:02 2003 Ossama Othman + + * configure.ac: + + Updated copyright notice to include UCI and Vanderbilt DOC + groups. This is consistent with the notice in the COPYING + file. + + Do not AC_DEFINE the _POSIX_PTHREAD_SEMANTICS feature test + macros. It should be defined on the command line instead of in + the generated configuration header. Addresses potential + compile-time problems in applications that include system + headers before ACE headers. + + Optimization flags set by the `configure' script are now placed + before the user defined C++ flags (i.e. $CXXFLAGS). This allows + users to override flags set by the `configure' script. Thanks + to Braden McDaniel for pointing + out that user flags could be potentially overridden. + + Added support for UnixWare 7.1 from Oleg Terletsky + . + + * Makefile.am (AUTOMAKE_OPTIONS): + + Set the minimum Automake version in this file to allow older + Automake versions, i.e. those that do not understand options set + in the AM_INIT_AUTOMAKE autoconf macro, to detect the + requirement. + + Set the Automake strictness to "foreign" so that the `NEWS' file + will no longer be required. We currently don't use a `NEWS' + file. + + Thanks to Braden McDaniel for + suggesting these changes. + + * ace/OS.h (howmany): + + In addition to LynxOS, define this macro for UnixWare 7.1. + Thanks to Oleg Terletsky for providing + the fix. + + * bin/bootstrap: + + No longer a need to create a dummy `NEWS' file. + + * m4/compiler.m4: + * m4/config_h.m4: + * m4/platform.m4: + + Added support for UnixWare 7.1 from Oleg Terletsky + . + + Do not AC_DEFINE feature test macros (e.g. _HPUX_SOURCE) in the + generated config header. Instead define them on the command + line. Addresses potential compile-time problems in applications + that include system headers before ACE headers. + +Mon Apr 28 13:45:03 2003 Irfan Pyarali + + * tests/Hash_Map_Bucket_Iterator_Test.cpp (ACE_TMAIN): + + Added debugging statements. + + * ace/Hash_Map_Manager_T.h (class ACE_Hash_Map_Bucket_Iterator): + + Added to documentation about why there is no creation method on + the Hash Map for the ACE_Hash_Map_Bucket_Iterator. + + * ace/README: Added description for ACE_LACKS_MEMBER_TEMPLATES. + +Mon Apr 28 17:35:00 UTC 2003 Gautam Thaker + + Please direct all immediate build issues to jcohen@atl.lmco.com + if problems occur as a result of this check in. Thank you. + + * ace/Makefile.bor + + Added SOCK_SEQPACK_{Acceptor,Assocication,Connector}.obj and + Multihomed_INET_Addr.obj + +Mon Apr 28 15:15:00 UTC 2003 Gautam Thaker + + Please direct all immediate build issues to jcohen@atl.lmco.com + if problems occur as a result of this check in. Thank you. + + * tests/Makefile.am + * tests/Makefile.bor + * tests/Multihomed_INET_Addr_Test.icc + * tests/tests.icp + * tests/tests.mpc + + We finally followed the README instructions for added a new + test. Hopefully test errors for a missing Multihomed_INET_Addr_Test + on many platforms will go away. + +Mon Apr 28 15:06:27 UTC 2003 Don Hinton + + * bin/g++_metrics.sh: + Comment metrics output so it won't confuse the tao_idl + compiler, that uses CXX as the preprocessor by default. + + * bin/generate_compile_stats.sh: + Add a new "targets" parameter that allows users to generate + a targets file created with the --dry-run option. This way + even if something fails to compile, you still get a list of + all targets and their dependencies. + +Mon Apr 28 08:44:43 2003 Venkita Subramonian + + * Kokyu/Kokyu_DLL.dsp: + * Kokyu/Kokyu_Static.dsp: + Updated projects to include DSRT work. + + * Kokyu/DSRT_Schedulers.cpp: + * Kokyu/DSRT_Scheduler_Impl.cpp: Fixed some compiler errors on + MSVC++. Thanks to Simon McQueen for pointing this out. + +Mon Apr 28 07:54:04 2003 Nanbor Wang + + * ace/MEM_Stream.h (ACE_MEM_Stream): Also mentioned that the + message size limit can be tweaked from MEM_Connector. Thanks to + Tongzhe Cui for the suggestion. + +Mon Apr 28 09:21:12 UTC 2003 Johnny Willemsen + + * ace/config-cygwin32-common.h: + Added ACE_HAS_STRPTIME because cygwin supports it. + + * ace/config-doxygen.h: + Added ACE_HAS_STRPTIME to generate documentation. + +Sun Apr 27 14:39:00 2003 Nanbor Wang + + * ace/MEM_IO.h: + * ace/MEM_Stream.h: Added more documentation on the message size + limit a MEM_Stream can handle and how to adjust the limit. + Thanks to Tongzhe Cui for motivating the + change. + +Sun Apr 27 18:38:12 UTC 2003 Johnny Willemsen + + * examples/Timer_Queue/TQTDDLL.dsp: + Set correct DLL name in the Release configuration + +Sat Apr 26 21:20:37 2003 Nanbor Wang + + * ace/MEM_Acceptor.cpp (accept): Fixed how the accept acquite the + connecting (remote) port number. Thanks to Steve Huston for + calling this to my attention. + +Sat Apr 26 12:00:36 2003 Venkita Subramonian + + * Kokyu/DSRT_Scheduler.cpp: + Corrected calculation for priority range. + + * Kokyu/tests/DSRT_MIF/MIF.cpp: + Modifications to set the priority of thread based on the value + returned from the scheduler. + +Sat Apr 26 08:25:57 2003 Balachandran Natarajan + + * performance-tests/SCTP/SOCK_SEQPACK_clt.cpp: + * performance-tests/SCTP/SOCK_STREAM_clt.cpp: Fixed compile + errors. + +Sat Apr 26 10:42:56 UTC 2003 Johnny Willemsen + + * tests/Reactor_Exceptions_Test.cpp: + Changed Borland specific defines to Borland and Win32, to fix + Kylix compile error. + +Sat Apr 26 08:50:33 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_linux_borland.GNU: + * include/makeinclude/rules.lib.GNU: + * include/makeinclude/rules.bin.GNU: + Updated Kylix rules so that we don't pass the same options multiple + times to the linker. + +Sat Apr 26 08:47:12 UTC 2003 Johnny Willemsen + + * bin/msvc_auto_compile.pl: + Reverted complete change. Too much is now build in first pass. + +Fri Apr 25 20:55:00 UTC 2003 Gautam Thaker + + Please direct all immediate build issues to jcohen@atl.lmco.com + if problems occur as a result of this check in. Thank you. + + * ace/SOCK_Connector.h + * ace/SOCK_SEQPACK_Connector.h + + Added comments to recently added 'protocol' + parameter for Doxygen. + + * performance-tests/SCTP/SOCK_SEQPACK_clt.cpp + * performance-tests/SCTP/SOCK_STREAM_clt.cpp + + Removed extraneous math.h and stdio.h references, which + was causing a header conflict on AIX/64. + +Fri Apr 25 15:15:00 UTC 2003 Gautam Thaker + + Please direct all immediate build issues to jcohen@atl.lmco.com + if problems occur as a result of this check in. Thank you. + + * ace/ace_dll.dsp: + + Multihomed_INET_Addr and SOCK_SEQPACK_* + {Acceptor,Association,Connector} classes added to dsp + + * performance-tests/Makefile: + + SCTP directory added to recursive Makefile list + +Fri Apr 25 10:37:49 2003 Steve Huston + + * bin/PerlACE/Process_Win32.pm: Change the CE test control to use the + value of the ACE_WINCE_TEST_CONTROLLER environment variable as the + program name to start the controller with. It still assumes that + the only CE controller is PocketController Enterprise. Also + allows the ACE_PCE_DEVICE environment variable to contain the + PocketController device connect options. The value should start with + -l and end with a semi-colon. The generated command script no longer + includes a "reset /s" command, so the sleep(10) is removed and the + PocketController command includes the -d;-e options to disconnect + and exit Pocket Controller after the script finishes. This requires + Pocket Controller Enterprise v4. + Also changed the PocketController default sleep time from 60 to 70 + seconds - Atomic_Op_Test was running about 62 and timing out. + +Fri Apr 25 08:12:33 UTC 2003 Johnny Willemsen + + * bin/msvc_auto_compile.pl: + Reverted change of yesterday to not build DLL projects twice. + This caused several new problems in the build. + +Fri Apr 25 06:18:12 UTC 2003 Johnny Willemsen + + * ace/config-win32-borland.h: + * ace/config-borland-common.h: + Cleanup of duplicate stuff. Moved ACE_CC_PREPROCESSOR to + win32 file. + +Thu Apr 24 23:20:16 2003 Venkita Subramonian + + * Kokyu/DSRT_Dispatcher_Impl.cpp: + * Kokyu/DSRT_Dispatcher_Impl.h: + * Kokyu/DSRT_Dispatcher_Impl.i: + * Kokyu/DSRT_Schedulers.cpp: + * Kokyu/DSRT_Schedulers.h: + * Kokyu/Kokyu.cpp: + * Kokyu/Kokyu.h: + * Kokyu/tests/DSRT_MIF/MIF.cpp: + * Kokyu/tests/DSRT_MIF/svc.conf: + * Kokyu/tests/DSRT_MIF/svc.conf.xml: + + Made the importance value continuous instead of discrete to make + it more compatible with DSRT MIF scheduler. Made the MIF + scheduler accept max and min importance thru the svc.conf file. + +Thu Apr 24 20:17:44 2003 Venkita Subramonian + + * Kokyu/DSRT_Dispatcher_Impl.cpp: + * Kokyu/DSRT_Dispatcher_Impl.h: + * Kokyu/DSRT_Dispatcher_Impl.i: + * Kokyu/DSRT_Schedulers.cpp: + * Kokyu/DSRT_Schedulers.h: + * Kokyu/Kokyu.cpp: + * Kokyu/tests/DSRT_MIF/svc.conf: + * Kokyu/tests/DSRT_MIF/svc.conf.xml: + + Restructuring the Kokyu DSRT scheduler stuff. The scheduler is + now a service object so that different scheduler implementations + can be selected at run time thru the svc.conf file. + +Thu Apr 24 10:17:28 2003 Steve Totten + + * bin/MakeProjectCreator/config/smart_proxies.mpb: + + Added a smart_proxies base project to make it easy to + build with TAO smart proxies support. + +Thu Apr 24 13:55:00 UTC 2003 Gautam Thaker + + * README.SCTP + Edited for content. This file provides SCTP network level + information. + * README.OpenSS7 + Added. This file provides OpenSS7 implementation + specific information. + * README.SCIOP + Added. This file provides TAO SCIOP level related + README information. Ideally it might be put some place + under TAO/ but it is kept here with other SCTP related + README files. + +Thu Apr 24 08:14:42 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Parser.pm: + + Fix a bug with cd() caused by relative paths in directories. + +Thu Apr 24 11:06:43 UTC 2003 Johnny Willemsen + + * bin/msvc_auto_compile.pl: + When the configuration name of the dsp file containers Library, DLL + or LIB it is build first. Previous spaces are DLL and LIB where + required. Also, previously, those projects where compiled twice, + now only once. + +Thu Apr 24 08:50:23 UTC 2003 Johnny Willemsen + + * examples/Service_Configurator/Misc/Timer_Service.h: + Use ACE_STATIC_SVC_DECLARE_EXPORT instead of ACE_STATIC_SVC_DECLARE + to export Timer_Service_1 from the DLL. This solves Kylix link + problems. + +Thu Apr 24 07:44:12 UTC 2003 Johnny Willemsen + + * examples/Timer_Queue/TQTD.dsp: + * examples/Timer_Queue/TQTDDLL.dsp: + Removed TQTD.dsp and added TQTDDLL.dsp. Show in the name we build a + dll. Also add Library to the name of the configuration so that the + autobuild scripts builds this project first. + + * examples/Timer_Queue/Timer_Queue.dsw: + Updated because of name change. + +Wed Apr 23 18:19:07 2003 Ossama Othman + + * ace/iosfwd.h: + + Fixed another configuration where forward declarations would not + exist (i.e. ACE_HAS_STANDARD_CPP_LIBRARY && + ACE_USES_OLD_IOSTREAMS). + +Wed Apr 23 16:57:45 2003 Balachandran Natarajan + + * ace/Multihomed_INET_Addr.cpp: Added explicit template + instantiations. This should fix big chunk of the problems in our + daily builds. + +Wed Apr 23 21:22:00 UTC 2003 Gautam Thaker + + Please direct all immediate build issues to jcohen@atl.lmco.com + if problems occur as a result of this check in. Thank you. + + * tests/Makefile: + * tests/Multihomed_INET_Addr_Test.dsp: + * tests/SOCK_SEQPACK_Association_Test.dsp: + * tests/tests.dsw: + + Added Multihomed_INET_Addr dsp and to dsw. + Added SOCK_SEQPACK dsp and to dsw but not to test list. + +Wed Apr 23 15:31:23 2003 Nanbor Wang + + * ace/MEM_Acceptor.cpp: Removed the use of len_ptr variable in + accept method as it is not needed it at all for MEM_Acceptor and + the accept were trying to dereference the the null pointer when + resolving the remote address. Thanks to Subhabrata Biswas + for reporting the problem. + +Wed Apr 23 16:10:07 2003 Irfan Pyarali + + * ace/config-win32-msvc-6.h: + + VC 6 does not have support for member templates. Therefore, + added #define ACE_LACKS_MEMBER_TEMPLATES to the config file. + +Wed Apr 23 13:54:27 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Parser.pm: + + Include '.' in the search path when looking for base projects and + templates. + +Wed Apr 23 12:54:09 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + + Updated the template to allow cppflags and linkflags. + + * bin/MakeProjectCreator/templates/makedll.mpt: + + Added linkflags for the CC configuration. + +Wed Apr 23 12:32:29 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/makedll.mpt: + * bin/MakeProjectCreator/templates/makeexe.mpt: + + Increased the usability of the make type by adding different + configurations for different compilers. + +Wed Apr 23 09:40:26 2003 Venkita Subramonian + + * Kokyu/DSRT_Schedulers.cpp: + * Kokyu/DSRT_Schedulers.h: + + Added two new files while restructuring DSRT Scheduler classes. + + * Kokyu/DSRT_Dispatcher_Impl.cpp: + * Kokyu/DSRT_Dispatcher_Impl.h: + * Kokyu/Kokyu.cpp: + * Kokyu/Kokyu.h: + * Kokyu/tests/DSRT_MIF/Makefile: + * Kokyu/Makefile: + + Restructured the DSRT related scheduler classes. + +Wed Apr 23 06:30:04 UTC 2003 Johnny Willemsen + + * ACE-INSTALL.html: + Corrected location build scoreboard, added Cygwin to the list of + user community supported compilers and updated MinGW formattng + +Tue Apr 22 19:37:14 2003 Venkita Subramonian + + * ChangeLog: + + Removed some entries in this Changelog, which should have been + added to the TAO ChangeLog. Thanks to Steve Huston for pointing + this out. + +Tue Apr 22 18:29:18 2003 Steve Huston + + * ace/ace.mpc: Moved ARGV.cpp and Argv_Type_Converter.cpp from the + Utils section to the OS section. This is a follow-up to: + Fri Mar 28 16:04:28 2003 Steve Huston + +Tue Apr 22 17:25:09 2003 Jeff Parsons + + * ace/config-win32-msvc-6.h: + + Added pragma disable for warning about long names (caused + by template parameters). + +Tue Apr 22 21:45:00 UTC 2003 Gautam Thaker + + Please direct all immediate build issues to jcohen@atl.lmco.com + if problems occur as a result of this check in. Thank you. + + * tests/Makefile: + * tests/run_test.lst: + * tests/run_tests.bat: + + Reconnected Multihomed_INET_Addr_Test to Makefile and scripts. + +Tue Apr 22 21:20:00 UTC 2003 Gautam Thaker + + Please direct all immediate build issues to jcohen@atl.lmco.com + if problems occur as a result of this check in. Thank you. + + * performance-tests/SCTP/README: + * performance-tests/SCTP/README.SCTP_in_ACE: + * performance-tests/SCTP/run_spectrum.pl: + * performance-tests/SCTP/SOCK_SEQPACK_wrapper_facade.jpg: + + Added jpg with class diagram. + Augmented READMEs with additional clarifications. + + * performance-tests/SCTP/SCTP.dsw: + + Removed SCTP.dsw for time being -- will be adding dsw and dsp + files as Windows conformability can be properly verified. + +Tue Apr 22 13:49:42 2003 Chad Elliott + + * ace/config-sunos5.7.h: + + only exists from SunOS 5.7 on. So I added a new + macro, ACE_HAS_SYS_LOADAVG_H, which is defined in this file. + +Tue Apr 22 13:20:11 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Require multiple exclusion types to be comma separated. + +Tue Apr 22 12:28:03 2003 Venkita Subramonian + + * Kokyu/Kokyu.cpp: + * Kokyu/Default_Dispatcher_Impl.cpp + + Fixed errors in MSVC++ builds. When ACE_HAS_STANDARD_CPP_LIBRARY + is defined auto_ptr maps to the std::auto_ptr and std::auto_ptr + in MSVC++ 6.0 does not have a reset method. Thanks to Simon + McQueen for pointing this out. + +Tue Apr 22 12:47:48 2003 Steve Huston + + * ace/Get_Opt.cpp (ctor): Add ACE_LIB_TEXT to naked string literal. + +Tue Apr 22 09:16:29 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Changed the behavior when project names contain slashes or back + slashes. This is now an error due to the fact that GHS build + files are put in subdirectories. + + Also, the ability to exclude files and directories based on + project type was added to the WorkspaceCreator. + +Tue Apr 22 07:10:14 2003 Chad Elliott + + * bin/ChangeLogEditor/ChangeLogEdit.pm: + * bin/ChangeLogEditor/ChangeLogEntry.pm: + * bin/ChangeLogEditor/FileLocator.pm: + * bin/cle.pl: + + Allow the user to specify directories to be considered for the + ChangeLog entry. + +Tue Apr 22 12:43:17 2003 Simon McQueen + + * tests/Proactor_Scatter_Gather_Test.cpp: + Fixed build error on win32. + +Tue Apr 22 07:30:01 UTC 2003 Johnny Willemsen + + * ace/config-vxworks5.x.h: + Added ACE_LACKS_TEMPNAM + + * ace/OS.i (tempnam): + Removed VxWorks specific part but just expect that VxWorks + also sets ACE_LACKS_TEMPNAM just like all other OS's do. + +Tue Apr 22 06:41:13 UTC 2003 Johnny Willemsen + + * ace/SStringfwd.h: + Do the forward declaration of ACE_String_Base with CHAR instead + of T. With Borland C++ the template parameter of the forward + declaration must be exactly the same as with the real template + parameter in the template definition. This fixes the strange Kylix + errors. + +Tue Apr 22 06:14:12 UTC 2003 Johnny Willemsen + + * ace/config-cygwin32-common.h: + Removed ACE_LACKS_TEMPNAM, cygwin supports tempnam. Thanks to + Kobi Cohen-Arazi for reporting this. + +Mon Apr 21 15:45:25 2003 Ossama Othman + + * ace/SOCK_SEQPACK_Acceptor.h: + + No need to include "ace/Time_Value.h". Forward declare + ACE_Time_Value instead. + +Mon Apr 21 15:27:21 2003 Ossama Othman + + * ace/Makefile.am (libACE_Sockets_la_SOURCES, HEADER_FILES): + (INLINE_FILES): + + Added new SCTP related files to these variables. + +Mon Apr 21 15:23:44 2003 Ossama Othman + + * ace/SSL/Makefile.in: + + Removed this generated file. It shouldn't exist in the CVS + repository. + +Mon Apr 21 21:20:00 UTC 2003 Gautam Thaker + + Please direct all immediate build issues to jcohen@atl.lmco.com + if problems occur as a result of this check in. Thank you. + + * ace/OS.h: + + Added #defines for SOCK_SEQPACK related objects. + + * ace/SOCK_Connector.cpp: + * ace/SOCK_Connector.h: + + Added extra parameter to constructor and connector (with a + default value) to enable selection of protocol. + + * ace/Makefile.ace: + + Added Multihomed_INET_Addr and SOCK_SEQPACK_* to ACE lib. + + * bin/PerlACE/Process_Unix.pm: + * bin/PerlACE/Process_Win32.pm: + + emulholl@atl.lmco.com comments: + I added a line to the Wait() method in the Process::Unix and + Process::Win32 Perl classes in order to enforce what appeared + to be an implied (although undocumented) invariant for the + class: that the "running" variable should have the value 0 + whenever the process is not running. + + * include/makeinclude/platform_linux.GNU: + * include/makeinclude/wrapper_macros.GNU: + + Added build option 'sctp' to enable SCTP support in ACE. + Currently, the only SCTP implementation supported is from + OpenSS7 on the Linux platform. Specify 'sctp=openss7' to enable. + +Mon Apr 21 12:16:20 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplib.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/nmakedll.mpt: + * bin/MakeProjectCreator/templates/vc6dspdll.mpt: + + Removed the /Ob2 compiler options. This has been known to cause + problems. /O2 provides /Ob1 which is sufficient. + +Mon Apr 21 15:53:35 UTC 2003 Don Hinton + + * ace/os_includes/*.h: Fixed Fuzz errors. + +Mon Apr 21 09:14:09 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + If pch files are listed in header_files or source_files, then + remove them from the listing. It is important that they are not + duplicated. + +Mon Apr 21 04:51:09 UTC 2003 Don Hinton + + * bin/generate_compile_stats.sh: + + More changes to html generation, added system info, tables + to the detail section, last compile times, and %change. + + * ace/SStringfwd.h: + * ace/SString.h: + + Moved typedef for ACE_TString to SStringfwd.h to go with + ACE_CString and ACE_WString. + + * ace/Get_Opt.{h,cpp,i}: + + Include ace/SStringfwd.h instead of ace/SString.h in header, + changed members variables to pointers, and uninlined optstring() + to reduce inter header dependencies. + + * tests/Multicast_Test.cpp: + + Added #include "ace/SString.h". + +Sun Apr 20 11:22:12 UTC 2003 Johnny Willemsen + + * examples/Timer_Queue/Timer_Queue.dsw: + Added missing dependencies between the projects. + +Sat Apr 19 02:53:17 UTC 2003 Don Hinton + + * bin/generate_compile_stats.sh: + + Fixed a problem with sorting, modified html and graph output + to make it a little easier to read. + +Fri Apr 18 13:35:51 2003 Chad Elliott + + * ace/OS.i: + * ace/OS.cpp: + + Added an implementation of ACE_OS::thr_join() for VxWorks. + +Fri Apr 18 12:24:02 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Driver.pm: + + Allow directories to be passed in as mpc and mwc files would be. + +Fri Apr 18 12:02:31 2003 Steve Huston + + * ACEXML/common/URL_Addr.inl: + * examples/Mem_Map/IO-tests/test_io.cpp: + * examples/Reactor/Misc/test_demuxing.cpp: + * performance-tests/Misc/preempt.cpp: + * performance-tests/Server_Concurrency/Queue_Based_Workers/workers.cpp: + * performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.cpp: + * performance-tests/Server_Concurrency/Leader_Follower/leader_follower.cpp: + * performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.cpp: + Add #include "ace/INET_Addr.h" and/or "ace/ACE.h" to pick up needed + method declarations. + +Fri Apr 18 06:54:35 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/nmake.mpd: + + Fine tune the clean target to avoid deleting things that do not + belong to the project. + +Fri Apr 18 11:02:12 UTC 2003 Johnny Willemsen + + * examples/Timer_Queue/TQTD.dsp: + * examples/Timer_Queue/Async_Timer_Queue_Test.dsp: + * examples/Timer_Queue/Reactor_Timer_Queue_Test.dsp: + * examples/Timer_Queue/Thread_Timer_Queue_Test.dsp: + * examples/Timer_Queue/Timer_Queue.dsw: + Added new TQTD project to build a dll that is used by the other + project files. This matches the same structure as the GNU makefile + does. + +Thu Apr 17 16:48:23 2003 Ossama Othman + + * acconfig.h: + + Removed this old autoheader template. It is no longer used. + +Thu Apr 17 19:33:29 2003 Steve Huston + + * ace/Get_Opt.cpp: Added #include "ace/ACE.h" to pick up ACE::gcd(). + + * ace/Logging_Strategy.cpp: Added #include "ace/ACE.h" and + "ace/Lib_Find.h" to pick up needed method declarations. + + * ace/Process.i: + * ace/Process_Manager.cpp:Added #include "ace/ACE.h" to pick up + ACE::terminate_process (). + + * ace/FILE_Addr.cpp: Added #include "ace/Lib_Find.h" to pick up + ACE_Lib_Find::get_temp_dir (). + +Thu Apr 17 16:37:05 2003 Ossama Othman + + * m4/acinclude.m4 (ACE_CHECK_FUNC): + + Improved warning message to explicitly state which function + failed detection. + +Thu Apr 17 16:15:24 2003 Ossama Othman + + * Merged "autotools" branch. ChangeLog entries from that branch + follow. + + Wed Mar 26 08:00:11 2003 Ossama Othman + + * configure.ac: + + Added check for the fgetwc() function. + + * m4/config_h.m4 (ACE_LACKS_FGETWC): + + Added autoheader template for this macro. + + Tue Mar 25 08:33:55 2003 Ossama Othman + + * configure.ac: + + Call the AC_PROG_EGREP macro to make sure the $EGREP shell + variable is set. + + Tue Mar 25 08:22:03 2003 Ossama Othman + + * m4/ace.m4: + * m4/compiler.m4: + * m4/platform.m4: + + Applied Steve's change below to the remaining 'test -n/-z + "$GXX"' instances. Addresses some problems in non-GNU compiler + builds. + + Replaced all instances "egrep" with the `configure' script + defined "$EGREP". This improves the `configure' script's + portability. + + Fri Mar 21 23:17:26 2003 Steve Huston + + * configure.ac: Changed to to + work when GXX is set to no, not nul. + + Wed Mar 19 11:29:25 2003 Ossama Othman + + * configure.ac (ACE_HAS_POSIX_GETPWNAM_R): + + Only define this macro if the user hasn't disabled reentrant + function support. + + Wed Mar 19 11:10:50 2003 Ossama Othman + + * configure.ac: + + If reentrant functions are enabled by the user and detected by + the `configure' script, make sure "_REENTRANT" is added to the + preprocessor flags. [Bug 411] + + Added test for ACE_HAS_POSIX_GETPWNAM_R macro. Fixes problems + on Linux when threading is disabled. [Bug 914] + + The restartable system calls test was re-enabled in earlier + commits. [Bug 275] + + * m4/compiler.m4 (OCXXFLAGS): + + Added missing HP-UX aCC compiler optimization flag. + + * m4/config_h.m4 (ACE_HAS_POSIX_GETPWNAM_R): + + Added autoheader template for this macro. + + Fri Mar 14 11:38:56 2003 Ossama Othman + + * tests/Dirent_Test.cpp (TEST_ENTRY): + + Changed name of file from "Dirent_Test.cpp" to "Makefile". The + latter is the only one guaranteed to exist in autoconf based + VPATH builds. Dirent_Test was failing since "Dirent_Test.cpp" + did not exist in the current working directory so pick one that + will always exist. + + Fri Mar 14 10:49:48 2003 Ossama Othman + + * configure.ac (bsearch, mktemp, qsort, rand_r): + + Temporarily select C as the test language when detecting these + functions to work around a bug in some versions of Autoconf when + C++ is selected as the test language. This fixes problems where + the following macros were incorrectly defined: + + ACE_LACKS_BSEARCH + ACE_LACKS_MKTEMP + ACE_LACKS_QSORT + ACE_HAS_REENTRANT_FUNCTIONS + + The correct definition of the ACE_HAS_REENTRANT_FUNCTIONS macro + should also correct problems exhibited by the ACE one-button + tests on multi-CPU hosts. + + (ACE_LACKS_STRUCT_DIR): + + Added test that determines if this macro should be defined. + + * m4/config_h.m4 (ACE_HAS_SCANDIR, ACE_LACKS_STRUCT_DIR): + + Added templates for these preprocessor macros. + + Thu Mar 13 15:49:21 2003 Ossama Othman + + * bin/bootstrap: + + Fixed an error about a missing `ace/config.h.in' configuration + header template file when running `automake'. `Automake' should + be invoked after `autoheader' to make sure the configuration + header template files exist beforehand. Thanks to Steve Huston + for reporting the error, and providing a + means to reproduce it. + + Wed Mar 12 13:48:31 2003 Steve Huston + + * bin/bootstrap: Changed PAGER to be set using ${name:-value} instead + of test -z; HP-UX /bin/sh complained if the PAGER env var wasn't set. + + Wed Feb 19 17:02:42 2003 Ossama Othman + + * configure.ac (AC_CONFIG_FILES): + + Added RMCast, QoS and SSL Makefiles to the list of files to be + generated. + + * Makefile.am (ACLOCAL_AMFLAGS): + + Define this variable. It contains options to be passed to + `aclocal' whenever the generated Makefile invokes `aclocal'. + Addresses failed automatic attempts at regenerating the + `configure' script. + + (CONFIGURE_DEPENDENCIES): + + Define this variable to include all of the ACE-specific M4 files + in the `m4' directory. Those files will be included in the list + of dependencies for the `configure' script. Addresses failed + automatic attempts at regenerating the `configure' script. + + * ace/Makefile.am (DIST_SUBDIRS): + + Added RMCast, QoS and SSL subdirectories to the list of + directories to include in the ACE distribution. + + (SUBDIRS): + + Conditionally build the RMCast, QoS and SSL subdirectories. The + user may explicitly enable or disable them using the + "--with-rmcast", "--with-qos" and "--with-ssl" configure script + options, respectively. + + (libACE_la_SOURCES): + + Added $(libACE_Codecs_la_SOURCES) to the list of ACE library + sources. Fixes "unresolved symol" link-time errors when + building the `Codecs_Test' one-button test. + + * ace/RMCast/Makefile.am: + * ace/QoS/Makefile.am: + * ace/SSL/Makefile.am: + + Added these Automake input files for the ACE_RMCast, ACE_QoS and + ACE_SSL libraries, respectively. + + * m4/ace.m4 (ACE_CONFIGURATION_OPTIONS): + + Added "--with-rmcast", "--with-qos" and "--with-ssl" + configuration options that allow the user to explicitly enable + or disable the ACE_RMCast, ACE_QoS and ACE_SSL libraries, + respectively. The ACE_RMCast is enabled by default, while the + ACE_QoS and ACE_SSL libraries are not. + + * tests/Makefile.am: + + Build CDR_Array_Test, Codecs_Test and Tokens_Test. + + Fri Feb 14 10:02:30 2003 Ossama Othman + + * Makefile.am (all-local): + + Create a link to the $(top_srcdir)/bin directory if one doesn't + exist. It is needed for the automated regression tests we run. + + (distclean-local): + + Added this Automake recognized target. It will clean up the + `bin' link and accompanying stamp file if they exist. + + * tests/Makefile.am (all-local): + + Create a stamp file to mark whether or not the scripts and data + files are actually links to those in $(top_srcdir)/tests. + + (bin): + + Moved the rules in this target to all-local target in + $(top_srcdir)/Makefile.am. The link to the `bin' directory + should be made in the top-level directory, not the `tests' + directory. This should address problems in running the + automated regression tests. + + Removed this target. It is longer needed. + + (distclean-local): + + Only delete the scripts and data files if the stamp file created + by the all-local target exists. Prevents those in the source + directory from being erased once builds in the source directory + are re-enabled. + + Tue Feb 11 14:27:08 2003 Ossama Othman + + * tests/Makefile.am (all-local): + + Added rules to generate links to the scripts and data files in + the top-level `tests' source directory. The Scoreboard requires + that `run_test.pl' exists in the current working directory, and + some tests require that their corresponding data files exist in + that directory, too. Thanks to Steve for pointing this out. + + Mon Feb 10 14:42:59 2003 Ossama Othman + + * configure.ac: + + Generate tests/Makefile. + + Updated and re-enabled XtReactor support. + + * Makefile.am: + + Added ACE one-button test directory to the sub-directory list. + + * tests/Makefile.am: + + Updated one-button test list. It was missing some new tests. + + Wed Feb 5 13:50:09 2003 Ossama Othman + + * configure.ac: + + Added check for snprintf(). + + Added check for mutex timeouts (e.g. pthread_mutex_timedlock()). + + Updated STL map and queue conflict tests to take into account + the "std" namespace, if necessary. + + Updated "new() throws bad_alloc" test to take into account the + "std" namespace, if necessary. + + * m4/config_h.m4 (ACE_HAS_SNPRINTF, ACE_HAS_MUTEX_TIMEOUTS): + + Added autoheader templates for these macros. + + Wed Feb 5 11:54:22 2003 Ossama Othman + + * Makefile.am: + + Neglected to commit this file in the previous commit. Added + `apps' directory to the list of subdirectories. + + Sat Feb 1 14:21:38 2003 Ossama Othman + + * configure.ac: + + Added gperf related Makefiles to the list of files to generate. + + * apps/Makefile.am: + * apps/gperf/Makefile.am: + * apps/gperf/src/Makefile.am: + + Updated for use with Automake 1.7.x or better. + + * m4/ace.m4 (ACE_CONFIGURATION_OPTIONS): + + Enabled ACE gperf support. + + Sat Feb 1 13:22:59 2003 Ossama Othman + + * bin/bootstrap: + + Removed workspace/release bootstrapping code. Newer versions of + automake obviate the need to make a distinction due to improved + dependency tracking support. + + Sat Feb 1 13:14:08 2003 Ossama Othman + + * ace/Makefile.am (TEMPLATE_FILES): + + Added missing "Templates_Instantiations.cpp" file to this list. + Fixes builds from a source tree created by "make dist". + + Sat Feb 1 12:44:52 2003 Ossama Othman + + * Makefile.am (EXTRA_DIST): + + Removed "BIBLIOGRAPHY" from this list since that file no longer + exists. "make dist" now works once again. + + Sat Feb 1 12:40:11 2003 Ossama Othman + + * ace/Makefile.am (libACE_Utils_la_SOURCES): + + Removed duplicate "Filecache.cpp" entry. Fixes "multiple + definition of symbol" errors at link-time. + + Sat Feb 1 12:24:11 2003 Ossama Othman + + * configure.ac: + + Do not define the _POSIX_THREADS and + _POSIX_THREAD_SAFE_FUNCTIONS preprocessor macros. They are + feature test macros defined by the platform, and are not meant + to be defined by anything other than the platform itself. + + * m4/config_h.m4 (ACE_PREP_CONFIG_HEADER): + + Fixed autoheader templates for the ACE_UINT64_TYPEDEF and + _POSIX_PTHREAD_SEMANTICS macros so that they include a "#undef + ..." in the template. Without the "#undef" the value of the + macro will not be substituted by `configure' script. That led + to build failures. Those failures have been corrected by this + fix. + + Removed autoheader templates for the _POSIX_THREADS and + _POSIX_THREAD_SAFE_FUNCTIONS preprocessor macros. They are + feature test macros defined by the platform, and are not meant + to be defined by anything other than the platform itself. + + Added descriptions for many preprocessor macros potentially + defined/substituted by the `configure' script. + + Sat Feb 1 10:20:45 2003 Ossama Othman + + * Makefile.am: + + Updated list of files and directories to be distributed. + Removed files that no longer from the list. + + * ace/Makefile.am: + + Updated header, inline, source and template file lists to + include new files. + + Wed Jan 29 13:54:21 2003 Ossama Othman + + * configure.ac: + + Fixed autoconf warnings about AC_DEFINE being called in second + argument of AC_CACHE_VAL. The second argument should only set + the value of cache ID variable. No other side effects should + occur. + + Tue Jan 28 14:57:50 2003 Ossama Othman + + * bin/bootstrap: + + Corrected invocation order `libtoolize' and `autoconf'. + `libtoolize' should be run prior to `autoconf'. Fixes an error + concerning a missing `libtool' script. + + Fri Jan 17 20:21:41 2003 Steve Huston + + * ace/Makefile.am: Fix syntax errors for libACE_Sockets_la_SOURCES. + + Tue Jan 7 22:59:05 2003 Ossama Othman + + * configure.ac: + + Enable Libtool and Automake support. + + * bin/bootstrap: + + Call `libtoolize' to add libtool support files to the ACE + distribution. + + * m4/config_h.m4: + + Added ACE_LACKS_ACE_CODECS macro template (for the sake of + completeness). + + * m4/subsets.m4: + + Added support for "--enable-lib-codecs" configure script + option. + + Wed Jan 1 10:28:27 2003 Ossama Othman + + * configure.ac: + + Ported old `configure.in' file to the latest Autoconf + `configure.ac' syntax. + + Initialize Automake with the new AM_INIT_AUTOMAKE macro format. + + * bin/bootstrap: + + Updated `autoheader' invocation to latest command line format. + + Commented out documentation generation shell script code. At + this early stage in the new autotool effort, we need not deal + with documentation generation. + + Commented out ACE workspace/release configuration shell script + code. It may be re-enabled in the future when it is clearer how + releases will be performed. + + * m4/ace.m4: + * m4/acinclude.m4: + * m4/compiler.m4: + * m4/features.m4: + * m4/platform.m4: + * m4/subsets.m4: + * m4/threads.m4: + + Updated all macros to the latest Autoconf 2.57 syntax. + + * acconfig.h: + * m4/config_h.m4: + + Replaced old `config.h' header template (acconfig.h) with the + latest "AH_TEMPLATE" form of the configuration header template. + +Thu Apr 17 17:07:36 2003 Irfan Pyarali + + * tests/Process_Mutex_Test.cpp: Reverted my change: + + Thu Apr 17 16:04:54 2003 Irfan Pyarali + + David Levine informed me that he had placed that sleep() + purposely: + + Thu Jul 22 11:54:58 1999 David L. Levine + + and said that: + + "I think the problem has to do with calling ::waitpid () before + a fork'ed child has actually been created. It's not enough for + fork () to have returned to the parent. This really shouldn't + be a problem, but it sure looked like it was on that platform." + + I have still closed bug 91 since this is a exceptional case. + +Thu Apr 17 16:04:54 2003 Irfan Pyarali + + * tests/Process_Mutex_Test.cpp: Removed call to sleep(). It was + really not required. This closes bug 91. + +Thu Apr 17 19:26:24 UTC 2003 Don Hinton + + * ace/os_include/aio.h: + * ace/os_include/assert.h: + * ace/os_include/complex.h: + * ace/os_include/cpio.h: + * ace/os_include/ctype.h: + * ace/os_include/dirent.h: + * ace/os_include/dlfcn.h: + * ace/os_include/errno.h: + * ace/os_include/fcntl.h: + * ace/os_include/fenv.h: + * ace/os_include/float.h: + * ace/os_include/fmtmsg.h: + * ace/os_include/fnmatch.h: + * ace/os_include/ftw.h: + * ace/os_include/glob.h: + * ace/os_include/grp.h: + * ace/os_include/iconv.h: + * ace/os_include/inttypes.h: + * ace/os_include/iso646.h: + * ace/os_include/langinfo.h: + * ace/os_include/libgen.h: + * ace/os_include/limits.h: + * ace/os_include/local.h: + * ace/os_include/math.h: + * ace/os_include/monetary.h: + * ace/os_include/mqueue.h: + * ace/os_include/ndbm.h: + * ace/os_include/netdb.h: + * ace/os_include/nl_types.h: + * ace/os_include/poll.h: + * ace/os_include/pthread.h: + * ace/os_include/pwd.h: + * ace/os_include/regex.h: + * ace/os_include/sched.h: + * ace/os_include/search.h: + * ace/os_include/semaphore.h: + * ace/os_include/setjmp.h: + * ace/os_include/signal.h: + * ace/os_include/spawn.h: + * ace/os_include/stdarg.h: + * ace/os_include/stdbool.h: + * ace/os_include/stddef.h: + * ace/os_include/stdint.h: + * ace/os_include/stdio.h: + * ace/os_include/stdlib.h: + * ace/os_include/string.h: + * ace/os_include/strings.h: + * ace/os_include/stropts.h: + * ace/os_include/syslog.h: + * ace/os_include/tar.h: + * ace/os_include/termios.h: + * ace/os_include/tgmath.h: + * ace/os_include/time.h: + * ace/os_include/trace.h: + * ace/os_include/ucontext.h: + * ace/os_include/ulimit.h: + * ace/os_include/unistd.h: + * ace/os_include/utime.h: + * ace/os_include/utmpx.h: + * ace/os_include/wchar.h: + * ace/os_include/wctype.h: + * ace/os_include/wordexp.h: + * ace/os_include/arpa/inet.h: + * ace/os_include/net/if.h: + * ace/os_include/netinet/in.h: + * ace/os_include/netinet/tcp.h: + * ace/os_include/sys/ipc.h: + * ace/os_include/sys/mman.h: + * ace/os_include/sys/msg.h: + * ace/os_include/sys/resource.h: + * ace/os_include/sys/select.h: + * ace/os_include/sys/sem.h: + * ace/os_include/sys/shm.h: + * ace/os_include/sys/socket.h: + * ace/os_include/sys/stat.h: + * ace/os_include/sys/statvfs.h: + * ace/os_include/sys/time.h: + * ace/os_include/sys/timeb.h: + * ace/os_include/sys/times.h: + * ace/os_include/sys/types.h: + * ace/os_include/sys/uio.h: + * ace/os_include/sys/un.h: + * ace/os_include/sys/utsname.h: + * ace/os_include/sys/wait.h: + + Added new set of headers as part of the Subsetting effort. + These headers will be slowly introduced throughout ACE and + TAO. + +Thu Apr 17 10:52:17 2003 Ossama Othman + + * ace/iosfwd.h: + + Added forward declarations of the iostream classes for the + ACE_HAS_STANDARD_CPP_LIBRARY, + !ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB, ACE_USES_OLD_IOSTREAMS + and !ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION case. This case + previously resulted in a basically empty header. + +Thu Apr 17 11:45:51 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Driver.pm: + + Fixed a usage of undefined reference. + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/VC71ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC71WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC7ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm: + * bin/MakeProjectCreator/templates/vc7.mpd: + * bin/mpc.pl: + * bin/mwc.pl: + + Visual Studio .NET 7.1 is not 100% compatible with 7.0. So in + order to avoid requiring the user to generate projects for 7.0 and + then converting them, a new type has been added that generates + projects that are directly compatible with 7.1. + +Thu Apr 17 15:32:42 UTC 2003 Don Hinton + + * ace/Configuration.h: Made NULL_String public instead of protected + member variable. + +Thu Apr 17 08:23:19 2003 Ossama Othman + + * ace/Local_Name_Space.h (ACE_NS_String): + * ace/Local_Name_Space.cpp (ACE_NS_String): + * ace/Local_Name_Space_T.cpp (shared_rebind_i): + * ace/Name_Request_Reply.h: + * ace/Name_Request_Reply.cpp: + * ace/Remote_Name_Space.cpp: + * netsvcs/lib/Name_Handler.cpp: + + The underlying string is now an ACE_WCHAR_T instead of an + ACE_USHORT16. Not all platforms represent wide characters with + 16 bit unsigned integers. Adjusted all members, return types + and parameters accordingly. This change was prompted by the + consistency fixes made to ace/Basic_Types.h as detailed in the + "Wed Apr 16 13:35:34 2003 Ossama Othman " + ChangeLog entry. + + Use rep() instead of ushort_rep() when copying an + ACE_NS_WString. The latter only works for platforms with 16 bit + wide characters. + + * ace/Name_Request_Reply.h: + + No need to include "ace/Time_Value.h" and "ace/SString.h". The + latter isn't need at all, and a forward declaration for + ACE_Time_Value is sufficient. + + * ace/Name_Request_Reply.cpp: + + Include "ace/Time_Value.h" to pull in ACE_Time_Value class + declaration. + +Thu Apr 17 13:26:23 2003 Simon McQueen + + * bin/MakeProjectCreator/configmessaging_only.mpb: + * bin/MakeProjectCreator/rt_client.mpb: + * bin/MakeProjectCreator/rt_server.mpb: + + Supplied missing libpaths. + + * performance-tests/SCTP/SOCK_SEQPACK_clt.dsp: + * performance-tests/SCTP/SOCK_SEQPACK_srv.dsp: + * performance-tests/SCTP/SOCK_STREAM_clt.dsp: + * performance-tests/SCTP/SOCK_STREAM_srv.dsp: + * tests/Multihomed_INET_Addr_Test.dsp: + * tests/SOCK_SEQPACK_Association_Test.dsp: + + Removed these dsp's pending the resubmission of the SCTP support + to prevent continual build errors. + +Thu Apr 17 12:07:44 UTC 2003 Don Hinton + + * ace/Configuration.cpp (temp_name): + + Access a static member variable with the class name outside + the class, not the this pointer. Changed return value to const. + +Thu Apr 17 07:05:50 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Escape the project name before using it within a regular + expression. + + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplib.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + + Default the stack setting and allow the user to override it on the + command line: + + mpc.pl -type em3 -value_template stack=/stack:0x10000,0x1000 + + Thanks to Steve Huston for bringing about this change. + +Thu Apr 17 03:54:10 UTC 2003 Don Hinton + + * bin/g++_metric.sh: + + Propagate return code and only output compile metrics + on successful compilation. + + * bin/generate_compile_stats.sh: + + Improved html pages presentation. Automatically scale + graphs for better readibility, and sort detail section. + +Wed Apr 16 13:35:34 2003 Ossama Othman + + * ace/Basic_Types.h (ACE_WINT_T, ACE_WCHAR_T): + * ace/CDR_Base.h (WChar): + * ace/OS.h (WChar): + + Cleaned up redundant and inconsistent wide character related + typedefs. The ACE_OS::WChar and ACE_CDR::WChar types are now + based on the ACE_WCHAR_T type defined in ace/Basic_Types.h + rather than using a set of preprocessor conditionals to set + them. In particular, the preprocessor conditionals are now + localized in ace/Basic_Types.h. This reduces maintenance burden + since a single location need be modified instead of multiple. + +Wed Apr 16 19:27:29 UTC 2003 Don Hinton + + * ace/Get_Opt.{h,cpp}: + + Added default value for optstring in ctor so that apps can + more easily only use the long option format without also + having to provide a blank optstring. + + Added new method, last_option(), which returns the last option + processed. This allows applications to see the actual command + line text of the last option that was found (or not found in + the case of an error). This is especially useful in cases where + the option was invalid and the caller wants to print out the + invalid value. Resolves bug [1338]. + + Enhanced dump() output. + + * tests/Get_Opt_Test.cpp: + + Modified test to utilize new method, last_option(). + + * ace/Configuration.{h,cpp}: + + Added the ability to have a default, or unnamed, key. This + is done with the help of a new validate_value_name() method + which deals with the differences between Windows and everything + else. Resolves bug [1374]. + + * ace/Configuration_Import_Export.cpp (import_config): + + Changed to allow unnamed keys. + + * tests/Config_Test.cpp: + + Added test for unnanmed keys. + + * ace/Global_Macros.h: + + Modified ACE_BEGIN_DUMP macro to include a newline charater + at the end so that dump() output is easier to parse. + +Wed Apr 16 12:15:04 2003 Irfan Pyarali + + * ace/OS: + + - thr_setprio(): Streamlined code to only call + pthread_getschedparam() when is -1. + + - thr_getprio(): Added a new function so that the user can + retrieve scheduling policy information in addition to the + priority of a thread. This makes the thr_getprio() function + consistent with the changes to thr_setprio(). + + * ace/Thread: Made changes to the thr_setprio() and thr_getprio() + functions to make them similar to the ACE_OS functions. + +Wed Apr 16 11:34:49 2003 Balachandran Natarajan + + * bin/auto_run_tests.pl: Fixed a typo. + +Wed Apr 16 08:41:27 2003 Ossama Othman + + * ace/SString.h: + + Include "ace/OS.h" to pull in functions in the "ACE_OS" scope. + +Wed Apr 16 09:07:26 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + + Fixed a usage of undefined reference. + + * bin/MakeProjectCreator/templates/nmake.mpd: + + Make sure that idl gets processed before building the precompiled + header module. + +Wed Apr 16 00:10:37 2003 Ossama Othman + + * ace/CDR_Base.h: + + Isolated ACE_CDR::WChar typedef from the ACE_OS::WChar typedef. + Reduces coupling between CDR_Base.h and OS.h. + + No need to include ace/OS.h. + + Cosmetic improvements. + + * ace/CDR_Base.cpp: + + Include ace/OS.h. Necessitated by above change. + + * ace/CDR_Stream.h: + + Include ace/SStringfwd.h instead of ace/SString.h. Forward + declarations are enough. + + * ace/CDR_Stream.i: + + Use the ACE_OS_String scope instead of ACE_OS when calling + string functions. Allows removal of dependency on OS.h header. + + * ace/Global_Macros.h: + + Moved "ACE_THROW_SPEC" preprocessor macros from OS.h to this + header. Helps remove OS.h dependencies for some headers. + + * ace/INET_Addr.cpp (get_host_addr): + + Fixed VxWorks unused argument warnings. + + * ace/Message_Block.h: + + Changed all "u_long" typedefs to "unsigned long". Allows + removal of OS.h include. + + Include Default_Constants.h, Global_Macros.h, Time_Value.h and + . + + * ace/Message_Block_T.h: + + Corrected file documentation. + + * ace/OS.h: + + Moved "ACE_THROW_SPEC" and pointer alignment related macros to + smaller appropriate headers. + + * ace/OS_Memory.h: + + Moved pointer alignment related macros from OS.h to this + header. Helps reduce dependence on OS.h in some headers. + + * ace/SStringfwd.h: + + New file containing template forward declaration based + ACE_{C,W}String typedefs. Headers requiring these typedefs for + forward declarations now need only include this header instead + of SString.h. + + * ace/SString.h: + + Moved ACE_{C,W}String typedefs out of this header. See above + change. + + * ace/String_Base.h: + + Replaced ACE.h include with Global_Macros.h, OS_String.h and + OS_Memory.h. + + * ace/String_Base.i (hash): + * ace/String_Base.cpp (hash): + + Uninlined ACE_String_Base<>::hash method. Allows removal of + ACE.h include in String_Base.h. + + * ace/SSL/SSL_Asynch_Stream.cpp (do_SSL_read): + + Use of ACE_Message_Block::wr_ptr() when writing data from an + ACE_Message_Block, not rd_ptr(). + + * ace/SSL/SSL_SOCK_Stream.cpp (send, recv): + + Corrected problem in the vararg versions of these methods where + "holes" in data read/written occurred in partial reads/writes. + + * ace/SSL/SSL_SOCK_Stream.i (send_i, recv_i): + + Improved "const" correctness. + +Wed Apr 16 06:55:53 UTC UTC 2003 Johnny Willemsen + + * netsvcs/clients/Naming/Dump_Restore/Makefile: + * netsvcs/clients/Naming/Dump_Restore/Makefile.main: + * netsvcs/clients/Naming/Dump_Restore/Makefile.Dump_Restore: + Split makefile into multiple ones, one for the shared library, one + for the main. This fixes linker errors with Kylix3 + +Tue Apr 15 16:06:24 2003 Douglas C. Schmidt + + * ace/Log_Msg_NT_Event_Log.cpp (close): Make sure to check for + this->evlog_handle_ != 0 before calling DeregisterEventSource(). + Thanks to Paxton Mason for reporting this. + + * ace/Timer_Wheel_T.cpp: Removed the use of a namespace since + this breaks certain compilers that don't support namespaces + (e.g., GCC 2.7-97 on LynxOS and SunC++ with the compat4=1 + options). Thanks to Olli Savia and + Craig Watcham for reporting this problem. + + * ace/OS.h: Make sure that things don't go awry on platforms + where clearerr is defined as a macro. Thanks to Olli Savia + for reporting this problem on LynxOS. + +Tue Apr 15 17:53:29 UTC 2003 Johnny Willemsen + + * ACEXML/parser/parser/Makefile: + When building shared library set the ACEXML_PARSER_BUILD_DLL + define. This fixes linker errors in the Kylix build. + +Tue Apr 15 17:33:01 UTC 2003 Johnny Willemsen + + * acconfig.h: + * ace/Addr.{h,cpp}: + * ace/README: + Removed ACE_HAS_BROKEN_SAP_ANY. With the removal of this define + from the MinGW config file it is not used anymore in ACE so we + remove this one. + +Tue Apr 15 09:47:22 2003 Venkita Subramonian + + * Kokyu/Kokyu.cpp: + * Kokyu/DSRT_Dispatcher_Impl.cpp: + * Kokyu/tests/DSRT_MIF/MIF.cpp: + * Kokyu/tests/DSRT_MIF/svc.conf: + * Kokyu/tests/DSRT_MIF/svc.conf.xml: + + Service config related changes to Kokyu DSRT framework. + +Tue Apr 15 11:24:59 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_linux_borland.GNU: + Use bcpp as TAO_IDL preprocessor. + +Tue Apr 15 08:18:12 UTC 2003 Johnny Willemsen + + * ace/config-borland-common.h: + * ace/config-win32-borland.h: + Moved ACE_HAS_ITOA from config-borland-common to config-win32- + borland. It is only needed on Windows and not on Linux where + Kylix runs. + +Tue Apr 15 07:30:33 UTC 2003 Johnny Willemsen + + * examples/Timer_Queue/Makefile: + * examples/Timer_Queue/Makefile.main: + * examples/Timer_Queue/Makefile.TQTD: + Splitted makefile in 2 files, one to build the shared library, + one to build the main. + + * examples/Timer_Queue/Async_Timer_Queue_Test.h: + * examples/Timer_Queue/Reactor_Timer_Queue_Test.h: + * examples/Timer_Queue/Thread_Timer_Queue_Test.h: + Use ACE_Svc_Export to export the driver classes from the shared + library. This fixes the Kylix link errors. + +Tue Apr 15 06:12:12 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_linux_borland.GNU: + Corrected libraries to link with. + +Mon Apr 14 22:37:34 2003 Venkita Subramonian + + * Kokyu/Kokyu.cpp: + * Kokyu/DSRT_Dispatcher_Impl.cpp: + * Kokyu/DSRT_Dispatcher_Impl.h: + + Made the dispatcher a service object so that the scheduler type + can be passed as a parameter in svc.conf. + +Mon Apr 14 15:19:38 2003 Venkita Subramonian + + * Kokyu/tests/DSRT_MIF: + * Kokyu/tests/DSRT_MIF/MIF.cpp: + * Kokyu/tests/DSRT_MIF/Makefile: + + New test added for testing MIF schedule using Kokyu. + +Mon Apr 14 18:35:23 UTC 2003 Don Hinton + + * bin/generate_compile_stats.sh: + + Improved the html presentation by: + + - dividing ACE and TAO into two seperate pages. + - stripping off version numbers from libraries. + - stripping off the path from dependent objects (was + redundant and made it hard to read). + - sorting dependent object lists. + - stripping off the TAO/ part of the path for TAO object + since this was also redundant. + - always listing dependent objects even if there was only + one. + + Thanks to Bala for his suggestions. + +Mon Apr 14 18:28:13 UTC 2003 Johnny Willemsen + + * include/makeinclude/rules.lib.GNU: + Only pass LDFLAGS once to the linker of Kylix + + * include/makeinclude/platform_linux_borland.GNU: + Pass BORLDFLAGS to the SOFLAGS and removed setting of SOLINK.cc. + With -L the location of shared objects to link with can be set, + but this -L should be only specified once, and the paths should + then be divided by :. + +Mon Apr 14 12:56:07 2003 Venkita Subramonian + + * Kokyu/DSRT_Dispatcher_Impl.h: + * Kokyu/DSRT_Dispatcher_Impl.cpp: + * Kokyu/DSRT_Dispatcher_Impl.i: + + Added new files for Dynamic scheduling support. + +Mon Apr 14 17:28:56 UTC 2003 Johnny Willemsen + + * ace/config-cygwin32-common.h: + Removed commented out define ACE_HAS_BROKEN_SAP_ANY + + * ace/config-win32-mingw.h: + Don't define ACE_HAS_BROKEN_SAP_ANY. It gives compile errors in the + Gateway app. + +Mon Apr 14 17:09:03 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.x_diab.GNU: + * include/makeinclude/platform_vxworks5.x_g++.GNU: + * include/makeinclude/platform_vxworks5.x_ghs.GNU: + Changed the default of rtti to 1 because it is now needed to build + TAO. In the config.h file it can be overruled to 0 again for the + persons that want rtti disabled, but then they can't build TAO. + +Mon Apr 14 08:43:31 2003 Chad Elliott + + * apps/mkcsregdb/mkcsregdb.mpc: + + Added an mpc file for this project. + +Mon Apr 14 07:05:06 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a usage of undefined reference. + + * bin/mpc.pl: + * bin/mwc.pl: + + Added a -w to the command line to get the warnings. + +Mon Apr 14 10:55:48 2003 Simon McQueen + + * bin/msvc_auto_compile.pl: Amended the -TAO target so that + TAO/orbsvcs/test/Notify/lib is the first library built. Fixes + build error in TAO_RT_NotifyTests.dsp which depends on it. + +Mon Apr 14 10:14:54 2003 Simon McQueen + + * bin/MakeProjectCreator/config/namingexe.mpb: + * bin/MakeProjectCreator/config/server.mpb: + Added missing libpath entries. + +Sun Apr 13 23:00:43 UTC 2003 Don Hinton + + * bin/generate_compile_stats.sh: + + Modified script to pull date directly from build log, + only harvest build time for individual objects, dynamically + rollup objects into composite objects--libs or executables-- + based on link steps in build log, and dynamically generate + html pages for composite objects. + +Fri Apr 11 18:05:00 2003 Roy Pollock + + * ace/config-integritySCA.h + * tests/ACE.bsp + * tests/INTEGRITY.ld + + Add configuration and build files for INTEGRITY 4.0.9+SCA + + * ace/Default_Constants.h + * ace/Log_Msg.h + * ace/Mem_Map.cpp + * ace/OS.cpp + * ace/OS.h + * ace/SOCK_Dgram_Mcast.i + + Add defined(INTEGRITY) cases + + * ace/OS.i + + Cast the ACE_NOTSUP_RETURN of umask to mode_t + Add defined(INTEGRITY) cases + + * ace/POSIX_Asynch_IO.h + + Add two header includes under defined(INTEGRITY). I'm not sure + why these aren't needed on other platforms. + + * ace/SString.cpp + * ace/RMCast/RMCast_Reassembly.cpp + * ace/RMCast/RMCast_Retransmission.cpp + * tests/Token_Strategy_Test.cpp + + Fix #pragma instatiate cases to have correct syntax and match + the explicit template instantiation case. + +Fri Apr 11 13:37:34 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Driver.pm: + + Insert the starting directory into the include path by default. + +Fri Apr 11 13:09:36 2003 Chad Elliott + + * bin/MakeProjectCreator/config/acedefaults.mpb: + + Avoid duplicate default lib values by assigning instead of adding. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + If there's only one resource file, take it even if it doesn't + match the project name. + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Make fornotlast, forlast, fornotfirst and forfirst abide by if + statements. + + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + + Fixed a bug with idlgendir. The idl generated files were not + going where they were supposed to if idlgendir didn't equal ".". + +Fri Apr 11 16:18:08 2003 Simon McQueen + + * ace/Makefile.ace: + * ace/OS.h: + * ace/SOCK_Connector.cpp: + * ace/SOCK_Connector.h: + * ace/SOCK_SEQPACK_Acceptor.h: + * ace/ace_dll.dsp: + * ace/RMCast/Makefile: + * bin/PerlACE/Process_Unix.pm: + * bin/PerlACE/Process_Win32.pm: + * include/makeinclude/platform_linux.GNU: + * include/makeinclude/wrapper_macros.GNU: + * performance-tests/Makefile: + * tests/Makefile: + * tests/run_test.lst: + * tests/run_tests.bat: + * tests/RMCast/Makefile: + + Reverted changes to above files to pre ChangeLogTag: + Thu Apr 10 15:35:00 2003 Gautam Thaker + +Fri Apr 11 06:37:08 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + For assignments within components, we need to get the outer scope + value before adding or subtracting. + +Fri Apr 11 11:23:22 2003 Simon McQueen + + * ace/ace_dll.dsp: Replaced missing files to fix build error in + TAO. + +Fri Apr 11 05:56:12 UTC 2003 Johnny Willemsen + + * apps/drwho/Makefile: + Fixed error in cygwin specific part. + +Fri Apr 11 02:35:07 UTC 2003 Don Hinton + + * bin/g++_metric.sh: + * bin/generate_compile_stats.sh: + + Added new files for gathering and processing compile- + time statistics. + +Thu Apr 10 14:14:17 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Allow assignments that are specific to a particular project type. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Fixed a bug in the template where 'libs' is not used but + 'lit_libs' is. The 'lit_libs' wouldn't show up. + +Thu Apr 10 15:35:00 2003 Gautam Thaker + + * ace/Makefile.ace ace/OS.h ace/SOCK_Connector.cpp: + * ace/SOCK_Connector.h ace/SOCK_SEQPACK_Acceptor.h: + * ace/ace_dll.dsp ace/RMCast/Makefile: + * performance-tests/Makefile tests/Makefile: + * tests/run_test.lst tests/run_tests.bat: + * tests/RMCast/Makefile bin/PerlACE/Process_Unix.pm: + * bin/PerlACE/Process_Win32.pm: + * include/makeinclude/platform_linux.GNU: + * include/makeinclude/wrapper_macros.GNU: + + Above files modified. + + * ace/Multihomed_INET_Addr.cpp ace/Multihomed_INET_Addr.h: + * ace/Multihomed_INET_Addr.i ace/SOCK_SEQPACK_Acceptor.cpp: + * ace/SOCK_SEQPACK_Acceptor.i ace/SOCK_SEQPACK_Association.cpp: + * ace/SOCK_SEQPACK_Association.h: + * ace/SOCK_SEQPACK_Association.i: + * ace/SOCK_SEQPACK_Connector.cpp ace/SOCK_SEQPACK_Connector.h: + * ace/SOCK_SEQPACK_Connector.i performance-tests/SCTP/Makefile: + * performance-tests/SCTP/Options_Manager.cpp: + * performance-tests/SCTP/Options_Manager.h: + * performance-tests/SCTP/README: + * performance-tests/SCTP/README.SCTP: + * performance-tests/SCTP/README.SCTP_PERF_TEST: + * performance-tests/SCTP/README.SCTP_in_ACE: + * performance-tests/SCTP/SCTP.dsw: + * performance-tests/SCTP/SOCK_SEQPACK_clt.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_clt.dsp: + * performance-tests/SCTP/SOCK_SEQPACK_srv.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_srv.dsp: + * performance-tests/SCTP/SOCK_STREAM_clt.cpp: + * performance-tests/SCTP/SOCK_STREAM_clt.dsp: + * performance-tests/SCTP/SOCK_STREAM_srv.cpp: + * performance-tests/SCTP/SOCK_STREAM_srv.dsp: + * performance-tests/SCTP/THANKS: + * performance-tests/SCTP/hist.cpp: + * performance-tests/SCTP/hist.h: + * performance-tests/SCTP/run_spectrum.config: + * performance-tests/SCTP/run_spectrum.pl: + * performance-tests/SCTP/sample-spectrum.png: + * tests/Multihomed_INET_Addr_Test.cpp: + * tests/Multihomed_INET_Addr_Test.dsp: + * tests/SOCK_SEQPACK_Association_Test.cpp: + * tests/SOCK_SEQPACK_Association_Test.dsp: + + Above files added. + + Jason Cohen : + First SCTP checkin for ACE. The major contrib of this + checkin include the SOCK_SEQPACK classes, Multihomed_INET_Addr, + SCTP performance tests, and READMEs. + +Thu Apr 10 09:41:13 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Forgot to change the usage of GNUProjectCreator to + GNUACEProjectCreator. + +Thu Apr 10 06:52:41 2003 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + * bin/mpc.pl: + * bin/mwc.pl: + + Renamed GNU to GNUACE to indicate that the projects will only work + within ACE. + + * bin/MakeProjectCreator/modules/GNUProjectCreator.pm: + * bin/MakeProjectCreator/modules/GNUWorkspaceCreator.pm: + + Removed these files in the rename. + +Thu Apr 10 13:02:42 CEST 2003 Oliver Kellogg + + * tests/tests.{dsw,icp}: Added Unbounded_Set_Test_Ex. + + * tests/Unbounded_Set_Test_Ex.{dsp,icc}: New. + + Please bear with me, these changes were made "blindly", i.e. + I don't have access to those build environments. + +Thu Apr 10 09:51:59 2003 Johnny Willemsen + + * include/makeinclude/wrapper_macros.GNU: + Improved Kylix specific rules. For Kylix we strip the -l in from + ACE_SHLIBS and prefix it with lib and postfix with .so. + +Thu Apr 10 08:12:22 2003 Johnny Willemsen + + * include/makeinclude/platform_linux_borland.GNU: + Improved this file for Kylix support. + +Thu Apr 10 07:47:12 2003 Johnny Willemsen + + * examples/System_V_IPC/SV_Shared_Memory/SV_Shared_Memory_Test.cpp: + Fixed compile error with GNU. + +Wed Apr 9 14:10:42 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/MakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/templates/make.mpd: + + Added an install target and fixed a bug with nested makefiles. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Fixed a bug with 'requires' and 'avoids' when building libraries. + +Wed Apr 9 13:39:20 2003 Stuart Jones + + * ace/DLL_Manager.cpp: + + Added check for NULL pointer in close method. The instance + method for the ACE_Framework_Repository class can return + NULL if the Object Manager is starting up, or shutting down + and the singleton hadn't been created. This was causing a + SEGV in a later pthread_mutex_lock (DOC Bug# 1479) + +Wed Apr 9 17:11:12 UTC 2003 Johnny Willemsen and me. Improves VxWorks 5.5, MingW, Cygwin + and Kylix support. + + * ACE-INSTALL.html: + Updated for VxWorks 5.5 and documented how to use BCB with SSL. + + * Makefile.bor: + Removed build variable nightlybuild because we don't need it + anymore. + + * ace/Based_Pointer_Repository.cpp: + * ace/Dynamic.cpp: + For VxWorks also explicit instantiate static template member. This + fixes unresolved externals when using implicit templates. + + * ace/Event_Handler_T.i (get_handle ): + In case of an error, return ACE_INVALID_HANDLE and not -1 because + -1 causes problems with MingW and is not portable. + + * ace/Log_Msg_NT_Event_Log.cpp: + * ace/Log_Msg_NT_Event_Log.h: + * ace/README: + * ace/config-doxygen.h: + * ace/config-win32-common.h: + For the WinNT event log backend added a new define called + ACE_HAS_LOG_MSG_NT_EVENT_LOG. This is set in the doxygen file to + generate documentation for it. This makes it possible to generate + the documentation and to better specify to use the WinNT event log + backend or not. + + * ace/Date_Time.{h,i}: + Added a constructor to initialize an ACE_Date_Time with an + ACE_Time_Value. + + * ace/Module.h: + Improved doxygen documentation. + + * ace/config-win32-mingw.h: + Require win32api version 2.0 or later and removed Win32 API + definitions because older versions of win32api lacked these. + + * apps/drwho/Makefile: + Don't build drwho with MingW and Cygwin. + + * examples/Reactor/Misc/test_event_handler_t.cpp (signal_handler): + Signum should be an int instead of an ACE_HANDLE. + + * examples/Reactor/Ntalker/ntalker.cpp: + Changed argument interface to a_interface because interface is a + macro with MinGW. + + * examples/System_V_IPC/SV_Message_Queues/MQ_Client.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Server.cpp: + * examples/System_V_IPC/SV_Message_Queues/TMQ_Server.cpp: + * examples/System_V_IPC/SV_Shared_Memory/SV_Shared_Memory_Test.cpp: + Modified code so that when SystemV IPC isn't supported this is + printed, else the code is build normally. Fixes Cygwin and MinGW + compile problems. + + * include/makeinclude/platform_cygwin32.GNU: + * include/makeinclude/platform_mingw32.GNU: + Disable auto import warnings. There is a bug in the MinGW/Cygwin + compiler and until that is fixed the warnings are wrong so we + disable. See these files for the link to the MinGW bugentry. + + * include/makeinclude/platform_g++_common.GNU: + Make sure that unrecognized compiler options are not set with + VxWorks 5.5. Fixes bugzilla entry [1452]. Thanks to Thomas Lockhart + for reporting this and sending the + fix. + + * include/makeinclude/platform_linux_borland.GNU: + Improved this file so that we better support the Kylix3 compiler. We + don't support it 100% but we can now build the ACE tests without + problems. Several also run but also several still have problems. + + * include/makeinclude/platform_sunos5_ghs.GNU: + * include/makeinclude/platform_sunos5_kcc.GNU: + Use explicit without double quotes to match other files. + + * include/makeinclude/platform_vxworks5.x_diab.GNU: + Set VSHDIR to $(VDIR) to make it possible to override it. + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + Set VSHDIR to $(VDIR) to make it possible to override it. Moved + include of platform_g++_common.GNU after the place where CXX is set + to resolve compiler problems. Also use explicit with double quotes + to match the other files, the result is that explicit template + instantiation is again the default to use. + + * include/makeinclude/rules.bin.GNU: + * include/makeinclude/rules.lib.GNU: + * include/makeinclude/wrapper_macros.GNU: + Improved and extended Kylix specific rules. For Kylix we strip the + -l in from of each shared library passed to the linker and prefix + with lib and postfix with .so. + + * tests/Time_Value_Test.cpp: + Test assignment operator of ACE_Time_Value. + +Wed Apr 9 15:51:32 UTC 2003 Don Hinton + + * ace/Malloc_Allocator.{i,cpp}: + + Uninlined ACE_New_Allocator::{malloc, calloc, free} () to + avoid the multiple heap problem on systems like Windows. + Thanks to Gonzalo Diethelm + for reporting the problem. This fixes bug [1464]. + +Wed Apr 09 17:04:01 2003 Simon McQueen + + * apps/mkcsregdb/mkcsregdb.dsp: Added missing library in release + configuration. + +Wed Apr 9 08:22:56 2003 Chad Elliott + + * bin/MakeProjectCreator/config/default.rel: + * bin/MakeProjectCreator/config/taoexe.mpb: + * bin/MakeProjectCreator/config/taolib.mpb: + * bin/MakeProjectCreator/config/vcfullmacros.mpt: + * bin/MakeProjectCreator/config/vcpartialmacros.mpt: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/GNUProjectCreator.pm: + * bin/MakeProjectCreator/modules/Parser.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateInputReader.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplib.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + * bin/MakeProjectCreator/templates/nmakedll.mpt: + * bin/MakeProjectCreator/templates/nmakeexe.mpt: + * bin/MakeProjectCreator/templates/va4icc.mpd: + * bin/MakeProjectCreator/templates/vc6dspdll.mpt: + * bin/MakeProjectCreator/templates/vc6dspdllexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsplib.mpt: + * bin/MakeProjectCreator/templates/vc6dsplibexe.mpt: + * bin/MakeProjectCreator/templates/vc7dll.mpt: + * bin/MakeProjectCreator/templates/vc7exe.mpt: + + Removed as much hard coded ACE and TAO related text and put it in + configuration files. + +Tue Apr 8 15:03:51 2003 Steve Huston + + * tests/tests.mpc: Added Unbounded_Set_Test_Ex. + +Tue Apr 8 13:29:05 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + + Take into account the possibility of using 'defaultlibs' or + 'lit_libs' without using 'libs'. + +Tue Apr 8 13:12:25 2003 Balachandran Natarajan + + * ace/Min_Max.h: #included config-all.h. This is needed for the + header file to be used succesfully. This fixes [BUG 1485 and + thanks to Paul Marquis for reporting this + problem. + +Tue Apr 08 17:01:02 2003 Simon McQueen + + * apps/mkcsregdb/mkcsregdb.dsp: Changed 'Use run time library' + setting to fix error in Release configuration. + +Tue Apr 8 06:50:38 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/vc7.mpd: + + Removed the ProgramDataBaseFileName section. It seems to cause + build problems. + +Mon Apr 7 16:58:55 2003 Balachandran Natarajan + + * ace/Select_Reactor_Base.cpp (unbind): Fixed a subtle problem + during complete shutdown of the event handler. + + Problem: During the unbind () call we call handle_close () after + which we nullify the event handlers without much checks. This + dangerous if the application during the callback, + ie. handle_close () call registers a new handler with the + reactor. It is quite possible that the map is changed during + registration. + + Solution: We check whether the event handler's pointer in the + map and the one that was cached before calling handle_close () + are the same. + + Thanks to Kobi Cohen-Arazi" for reporting the + problem. + +Mon Apr 7 17:04:20 2003 Steve Huston + + * tests/Unbounded_Set_Test_Ex.cpp: Moved the definition of MyNode + to its own file, Unbounded_Set_Test_Ex.h to allow the + ever-cooperative AIX Visual Age C++ compiler to find the definition + when instantiating templates. Also changed the name of the + recorded log file to match the test name so the autobuild + log analysis can find it. + + * tests/run_test.lst: Added Unbounded_Set_Test_Ex. + +Mon Apr 7 12:27:25 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + If HASH and SCALAR values are mixed in a template foreach, then + remove the SCALAR values. + + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Try to make these templates less TAO focused. + + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplib.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + * bin/MakeProjectCreator/templates/nmakedll.mpt: + * bin/MakeProjectCreator/templates/nmakeexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc6dspdll.mpt: + * bin/MakeProjectCreator/templates/vc6dspdllexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsplib.mpt: + * bin/MakeProjectCreator/templates/vc6dsplibexe.mpt: + * bin/MakeProjectCreator/templates/vc7dll.mpt: + * bin/MakeProjectCreator/templates/vc7exe.mpt: + + Began adding support for MFC projects. + +Sat Apr 5 11:23:11 2003 John Michael Zorko + + * include/makeinclude/platform_macosx.GNU (CXX): Mac OSX currently + uses 64 bits for long doubles, and Apple's gcc3.1 compiler + outputs a warning if long doubles are used (since they might + change to 96 or 128 bits in the future). In the meantime, the + following patch (also attached) turns off the warning. + +Fri Apr 4 10:49:29 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/StringProcessor.pm: + + Treat single quotes as special characters when creating arrays. + They now work similarly to double quotes. + +Fri Apr 4 09:22:25 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Allow mwc files to have scoped assignments that will only apply to + the mpc files within that scope. + +Thu Apr 03 17:20:32 2003 Pradeep Gore + + * bin/MakeProjectCreator/config/notifytest.mpb: + Changed target to TAO_NotifyTests. + * bin/tao_other_tests.lst: + Added TAO/orbsvcs/tests/Notify/Lanes/run_test.pl and + TAO/orbsvcs/tests/Notify/ThreadPool/run_test.pl + or RT_Notification. + +Thu Apr 3 11:24:35 2003 Balachandran Natarajan + + * bin/tao_orb_tests.lst: Added a new test for the daily builds. + +Thu Apr 3 08:20:12 2003 Johnny Willemsen + + * Kokyu/Default_Dispatcher_Impl.h: Fixed doxygen fuzz error + +Wed Apr 2 12:44:58 2003 Chad Elliott + + * include/makeinclude/platform_hpux_aCC.GNU: + * include/makeinclude/rules.lib.GNU: + + Added an AREXTRA macro that allows the user to add arbitrary text + at the end of the ar command. HP-UX aCC defines AR in a way that + causes build errors. AREXTRA is used to fix this build problem + and doesn't affect any other platform. + +Wed Apr 2 10:17:59 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + + Factored the dynamic and static accessors into this class from + WorkspaceCreator.pm. + + * bin/MakeProjectCreator/modules/Options.pm: + + Added a utility function which can be used to determine if an + option has been used. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Use the factored dynamic and static accessors. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added the functionality to track which projects have been + generated. If multiple workspaces with overlapping projects are + processed within the same process, it is able to skip the + re-generation of the overlapping projects. Also added the ability + to use "mwb" files as base project files. + +Wed Apr 2 08:49:51 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Allow libraries to be built only if "requires" and "avoids" are + met. + +Wed Apr 2 11:51:52 CEST 2003 Oliver Kellogg + + * tests/Unbounded_Set_Test.cpp, tests/Unbounded_Set_Test_Ex.cpp: + + Zap extraneous trailing semicolons on #pragma instantiates. + +Wed Apr 2 11:44:41 CEST 2003 Oliver Kellogg + + * tests/Unbounded_Set_Test.cpp, tests/Unbounded_Set_Test_Ex.cpp: + + Add explicit template instantiations. + +Tue Apr 1 17:02:37 2003 Steve Huston + + * tests/Process_Strategy_Test.cpp: Nul-terminate received command + string to ACE_TEXT_CHAR_TO_TCHAR can deal with it; this is needed + to properly log the string in wide-char builds. + +Tue Apr 1 15:52:41 2003 Steve Huston + + * tests/Multicast_Test.cpp: If the platform doesn't support IP + multicast, log an info message, not an error. + +Tue Apr 1 10:06:57 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Driver.pm: + + Fixed a bug with multiple types and an mpc file specified with + a directory. The original file name was not being preserved. + +Tue Apr 1 16:02:30 CEST 2003 Oliver Kellogg + + * ace/Makefile.{am,bor}: Added Unbounded_Set_Ex. + +Tue Apr 1 13:42:37 CEST 2003 Oliver Kellogg + + * tests/Unbounded_Set_Test_Ex.cpp: New. + + This is a replica of Unbounded_Set_Test.cpp but uses the new + ACE_Unbounded_Set_Ex class instead of ACE_Unbounded_Set. + This is for side-by-side comparisons between the two tests. + + * tests/Makefile: Added Unbounded_Set_Test_Ex, updated dependencies. + + * tests/Makefile.{am,bor}: Added Unbounded_Set_Test_Ex. + +Tue Apr 1 12:48:33 CEST 2003 Oliver Kellogg + + * ace/Node.{h,cpp}: + + Added back the deleted_ member. + This sets the stage for the new Ace_Unbounded_Set_Ex class. + + * ace/Unbounded_Set_Ex.{h,inl,cpp}: New. + + This class is a variation on ACE_Unbounded_Set that fixes + Bugzilla bug 1460. + + * ace/Makefile.ace: Add Unbounded_Set_Ex. + +Mon Mar 31 14:04:22 2003 Phil Mesnier + + * ace/CDR_Stream.cpp: + * ace/CDR_Stream.h (ACE_OutputCDR): Provide an accessor method, + ACE_OutputCDR::wchar_maxbytes() for getting the stream size for + wide characters when no translator is involved. + + There was a problem reading wstrings when the maxbytes is less + than the size of a wchar_t. When the maxbytes value was 1, I was + using a static cast from a char to a wchar, which caused sign + propogation. Changing to assignment from an octet solved that. + + * ace/Codeset_Registry_db.cpp: Added entries for common 2 byte and + 4 byte wchar codesets, UTF-16 and UCS-4. + + * ace/Codeset_Registry.cpp: + * ace/Codeset_Registry.h: + * ace/Codeset_Registry.inl: Retyped validation methods to return + int rather than CORBA::Boolean as a result code. + +Mon Mar 31 14:03:35 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added an 'implicit' assignment to the workspace that will cause + the workspace creator to generate projects in directories where + there are no mpc files. If no valid project can be made, then + that directory is ignored. + +Mon Mar 31 12:32:32 2003 Balachandran Natarajan + + * bin/tao_orb_tests.lst: Added the new collocation tests to the + daily builds. + +Mon Mar 31 08:44:16 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug in the project creator dealing with precompiled header + files. If the pch_header or pch_source is set to "" then we need + to be sure that pch information is not put in the generated + project file. + +Mon Mar 31 08:19:16 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Fixed a bug in the Microsoft related template files where the + installed executable would not be put in the install directory. + It was previously placed in a subdirectory of the install + directory. + +Mon Mar 31 15:51:54 CEST 2003 Oliver Kellogg + + * tests/Unbounded_Set_Test.cpp: + + Verify that a set may be emptied while an iterator on the set is + in-scope but inactive. + + Changed the "Selective deletion of elements" step not to summon + bug 1460. + +Mon Mar 31 14:13:31 2003 Simon McQueen + + * apps/mkcsregdb/mkcsregdb.dsp: Added release configuration custom build step. + +Sun Mar 30 21:46:54 2003 Balachandran Natarajan + + * bin/topinfo_iorsize_stats.sh: Added data collection points for + optimized cases. + +Sun Mar 30 09:12:16 2003 Douglas C. Schmidt + + * ace/Connector.cpp (handle_timeout): Restructured the code so that + if the call to sh->handle_close() deletes the handlers, which in + turn deletes the connector, the decr_ast_refcount() call won't + cause a crash. Thanks to Tomer Amiaz for + reporting this bug and supplying a fix. + +Sat Mar 29 16:34:56 2003 Balachandran Natarajan + + * THANKS: Added Bertin Colpron to the hall of fame. + +Fri Mar 28 16:04:28 2003 Steve Huston + + * ace/OS.{h,i,cpp} (string_to_argv): Use ACE_LIB_TEXT around characters + to make them compare correctly when ACE_USES_WCHAR. Fixes this + method for use with CE. Obviates the need for ACE_CE_ARGV, which + is now gone. Users of ACE_CE_ARGV should use ACE_ARGV, which does + the same thing as ACE_CE_ARGV. + Also added /**/ to #include to prevent warnings from + Visual C++. + + * ace/config-win32-common.h: Corrected the Winsock 2, WinCE checks to + check for UNDER_CE >= 400, not == 4. + + * ace/Makefile.ace: + * docs/ACE-subsets.html: Moved ARGV and Argv_Type_Converter from UTILS + to OS; getting command lines correct is needed for basic OS function. + + * bin/PerlACE/Process_Win32.pm: Move the pocketcontroller-required + sleep from after each test to before it. This accounts for the + need to sleep after copying the initial DLLs and test files down + before beginning the test runs. The copying does a reset, requiring + some delay before attempting the first test. + +Fri Mar 28 10:18:48 2003 Steve Huston + + * bin/PerlACE/Process_Win32.pm: For WinCE, when generating the + Pocket Controller script, put a 60-second sleep between running the + test and grabbing the log file. The script doesn't wait for the + program to exit before continuing. Will take this up with SOTI, + makers of Pocket Controller. + + * ace/Configuration.cpp (ACE_Configuration_Win32Registry::remove_section): + In the non-recursive case, try to delete the key; previously only + tried to delete the key if recursive. + + * tests/Config_Test.cpp: When reporting failed file import, list why + (%p), not the failed return status (-1). Also fixed many ACE_DEBUG + and ACE_ERROR strings by enclosing in ACE_TEXT. + + * tests/Conn_Test.cpp: When displaying a hostname, properly adjust + to the charset width in use. + + * tests/run_test.lst: Added !WinCE to Env_Value_Test. CE doesn't + do environment variables. + +Thu Mar 27 14:20:32 2003 Balachandran Natarajan + + * THANKS: Added Jia Wan to the hall of fame. + +Wed Mar 26 16:45:29 2003 Balachandran Natarajan + + * THANKS: Added Sebastien Lalonde to the hall of fame. + +Wed Mar 26 16:48:31 2003 Steve Huston + + * ace/config-WinCE.h: Let ACE_HAS_WINSOCK2 be conditional on the CE + version; there was a #define ACE_HAS_WINSOCK2 at the end of the + file that shouldn't have been there. + + * ace/config-win32-common.h: For WinCE and ACE_HAS_WINSOCK2, need + to define the errno codes without WSA prefixes. Also, WinCE (at + least at CE 4.0) doesn't have Winsock 2 extensions, so don't pull + in mswsock.h, and set up to link ws2.lib, not ws2_32.lib. + + * ace/Reactor.cpp: Don't use ACE_HAS_WINCE to block out + ACE_WFMO_Reactor; use the more direct tests (Winsock versions) if + needed. + + * ace/SPIPE_Stream.i (send_handle): Don't attempt this on WinCE even + though CE4 has ACE_HAS_WINSOCK2. It doesn't have WSADuplicateSocket. + +Wed Mar 26 16:15:39 2003 Simon McQueen + + * ace/Unbounded_Set.h: + * ace/Unbounded_Set.cpp: + * ace/Unbounded_Set.inl: + * ace/Node.h: + * ace/Node.cpp: + * tests/Makefile: + * tests/Makefile.am: + * tests/Makefile.bor: + + Reverted changes to the above to position before changelog entry: + Mon Mar 24 13:16:29 CET 2003 Oliver Kellog + +Wed Mar 26 16:48:54 CET 2003 Oliver Kellogg + + * tests/Unbounded_Set_Test.cpp: + + Corrected signature of main program and inserted an + ACE_START_TEST/ACE_END_TEST. Thanks to Johnny Willemsen for + suggesting this. + +Wed Mar 26 11:33:15 CET 2003 Oliver Kellogg + + * ace/Unbounded_Set.cpp (ACE_Unbounded_Set::delete_nodes): + + Temporarily commented out the ACE_ASSERT(number_of_iterators_ == + 0) until the iterator usage problem is repaired in TAO. + +Tue Mar 25 21:08:04 2003 Phil Mesnier + + * ace/CDR_Stream.cpp: + * ace/CDR_Stream.h: + * ace/CDR_Stream.i: + + Added the value wchar_maxbytes_ to the ACE_OutputCDR which is + used to control the size of the wchar on the wire when no + translator is being used. This is because it is valid to use a + wchar codeset for which the maximum size is smaller than the + size of a wchar_t. + + * ace/OS.h: + + When defining the ACE-specific type WChar, added the existance + of the ACE_HAS_XPG4_MULTIBYTE_CHAR as a condition to allow WChar + to be an alias of wchar_t, rather than of ACE_UINT16. + + * ace/OS.i: + * ace/config-linux-common.h: + + As part of the wchar changes, it was discovered that older linux + platforms lack fgetwc() and ungetwc(), although all other wide + char related functions are supported. Added ACE_LACKS_FGETWC to + guard against this condition. + + * ace/ace_wchar.h: + + Rework the ifdef sieve to ensure that platforms such as solaris + that really do support wchar get initialized properly. + +Tue Mar 25 09:01:00 2003 Ossama Othman + + * ace/Default_Constants.h (ACE_CONNECTOR_HANDLER_MAP_SIZE): + + Changed type of this constant from "size_t" to "unsigned int". + This header does not include system headers that define "size_t" + type. Fixes a syntax error on some platforms. + +Tue Mar 25 17:09:22 CET 2003 Oliver Kellogg + + From Rudolf Weber + * ace/Unbounded_Set.cpp: + Correction to the handling of the deleted_ flag in the iterators. + + * tests/Unbounded_Set_Test.cpp: + Extended towards making it a general test of the ACE_Unbounded_Set. + Added test for the ACE_Unbounded_Set_Const_Iterator. + +Tue Mar 25 10:44:23 CET 2003 Oliver Kellogg + + * ace/Unbounded_Set.{h,cpp}: Removed the `const' at the + ACE_Unbounded_Set::iterator_leave() method declaration. + +Mon Mar 24 22:05:56 2003 Balachandran Natarajan + + * ace/Default_Constants.h: Added a const value for the connector's + map size. + * ace/Connector.cpp: Used the constant value to configure the + internal map. Too large a map doesnt help with run-time + footprint. + +Mon Mar 24 18:06:49 2003 Balachandran Natarajan + + * bin/auto_run_tests.pl: Modified the script to do the following + + - Added an option to run only TAO tests in $TAO_ROOT/tests. + - Instead of reading just one file for all the tests and + examples in our daily builds, we will now use 3 files. One of + the files is for ACE tests, one for tests in TAO and the last + one is for all the other tests and examples in TAO. + + This provides various flexibilities for a poor developer like + yours truly, to just build and run all the tests in TAO/tests + after making changes to the ORB Core. It helps automating some + development work. We could also take this to our daily + builds. We will see more of this over a period of time. + + The changes should be backward compatible and shouldnt break any + of the existing builds. + + * bin/ace_tests.lst: + * bin/tao_orb_tests.lst: + * bin/tao_other_tests.lst: New configuration files for ACE+TAO + tests. We will use only this to add new tests to ACE+TAO. + + * bin/auto_run_tests.lst: Removed this file from the repo. + +Mon Mar 24 10:23:08 2003 Ossama Othman + + * ace/SSL/SSL_Context.h: + + No longer any need to include "ace/Singleton.h" due to the below + change. + + From David Kinder + * ace/SSL/SSL_Context.inl (instance): + * ace/SSL/SSL_Context.cpp (instance): + + Uninlined this method. Fixes a problem found in Win32 "release" + builds where an application could end up with multiple + ACE_SSL_Context singleton instances. [Bug 1475] + +Mon Mar 24 18:03:34 CET 2003 Oliver Kellogg + + * ace/Unbounded_Set.{h,cpp}: + + Added method const_iterator_leave() in class ACE_Unbounded_Set. + The destructor of the ACE_Unbounded_Set_Const_Iterator calls + it. Deleted elements are not cleaned up in that case, but they + probably don't need to, given that we are dealing with a "const" + set. + + Thanks to Jeff Parsons for noticing the problem. + +Mon Mar 24 06:54:55 2003 Douglas C. Schmidt + + * ace/config-linux-common.h: Change the ACE_DEFAULT_BASE_ADDR for + the IA-64 from 0x8 to 0x0 so the Linux kernel can choose the + right value. Thanks to Sergei Pimenov + for reporting this. + +Mon Mar 24 13:16:29 CET 2003 Oliver Kellogg + + * ace/Node.{h,cpp}: + * ace/Unbounded_Set.{h,inl,cpp}: + + Fix for Bugzilla bug 1460 supplied by Rudolf Weber + , adds a `deleted' flag to ACE_Node, and + adds corresponding management methods to ACE_Unbounded_Set. + + * tests/Unbounded_Set_Test.{cpp,icc}: New. + + * tests/Makefile, tests/Makefile.{am,bor}: + Add Unbounded_Set_Test.cpp, a regression test for bug 1460. + +Sat Mar 22 11:58:12 2003 Douglas C. Schmidt + + * ace/Configuration.cpp: When remove_section() was called the + buckets created for the value and section hash map were not + deleted. Added two new lines after + if (index_->unbind (SectionExtId, allocator_)) + return -1; + + as follows: + + value_hash_map->close(); + section_entry->int_id_.section_hash_map_->close(allocator_); + + Thanks to Sandip Patel for reporting + this. + + * ace/Message_Queue_T.cpp: Moved the notify() hook calls within + the protection of the guard lock critical section to prevent + race conditions on cleanup. Thanks to Ron Muck + for this suggestion. + +Fri Mar 21 13:07:09 2003 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/Options.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added a -base option to allow a user to specify multiple base + projects to be applied toward all generated project files. + +Fri Mar 21 10:42:41 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Parser.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Factored assignment processing from ProjectCreator into Creator. + Factored convert_slashes() from ProjectCreator into Parser. + + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/Options.pm: + + Factored option processing from Driver into a new module, Options. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added support for workspace specific assignments. Currently the + only valid assignment is 'cmdline' which allows mwc to apply + command line options to a specific set of mpc files. + +Fri Mar 21 09:48:33 2003 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/Driver.pm: + + Added the -static_only option back in to allow generation of + static projects only. + +Thu Mar 20 19:50:36 2003 Steve Huston + + * ace/OS.i (ACE_OS::recursive_mutex_cond_unlock): If on WinCE, don't + do the check for RecursionCount; WinCE's structure doesn't have that + member. Also see: + Sat Mar 15 10:55:01 2003 Douglas C. Schmidt + +Thu Mar 20 17:51:39 2003 Steve Huston + + * bin/MakeProjectCreator/templates/em3vcp.mpd: Only output a linker + /entry option if building a DLL. Let binary programs pick up the + correct entrypoint from the subsystem type. It defaults to windowsce, + requiring WinMainCRTStartup. + +Thu Mar 20 14:11:01 2003 Ossama Othman + + * ace/Codecs.cpp (encode, decode): + + Fixed "comparison is always false due to limited range of data + type" warning by removing those comparisons and accompanying + code. + +Thu Mar 20 14:00:53 2003 Ossama Othman + + * ace/Memory_Pool.cpp (find_seg): + + Fixed overflow in pointer arithmetic on platforms where + sizeof(void*) is greater than sizeof(off_t). This also fixes a + "cast from pointer to integer of different size" warning. + +Thu Mar 20 12:56:26 2003 Ossama Othman + + * tests/Recursive_Condition_Bug_Test.cpp: + + Fixed unused variable warning in single-threaded builds. + +Thu Mar 20 12:35:09 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/va4icc.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Added a new keyword lit_libs that is identical to libs except that + with windows build tools, a library modified (s,d,sd) is not + added to the library name. + +Thu Mar 20 11:23:46 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Changed the default behavior for naming workspaces and projects. + They now use the name of the mwc and mpc file respectively. + +Thu Mar 20 07:23:48 2003 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/Driver.pm: + + Removed -dynamic_only and -static_only options and made "dynamic + only" the default. I added a -static option that will allow the + user to generate static projects in addition to dynamic projects. + +Thu Mar 20 07:09:54 2003 Douglas C. Schmidt + + * ace/Process_Manager.cpp: The wrong remove_handler() method was + being used in the ACE_Process_Manager::close() method. Changed + this to use the remove_handler() that removes the SIGCHLD + handler. Thanks to Carsten Prescher + for this fix. + +Wed Mar 19 18:27:08 2003 Venkita Subramonian + + * Kokyu: + * Kokyu/Default_Dispatcher_Impl.cpp: + * Kokyu/Default_Dispatcher_Impl.h: + * Kokyu/Default_Dispatcher_Impl.i: + * Kokyu/Dispatcher_Impl.cpp: + * Kokyu/Dispatcher_Impl.h: + * Kokyu/Dispatcher_Impl.i: + * Kokyu/Dispatcher_Task.cpp: + * Kokyu/Dispatcher_Task.h: + * Kokyu/Dispatcher_Task.i: + * Kokyu/Kokyu.cpp: + * Kokyu/Kokyu.dsw: + * Kokyu/Kokyu.h: + * Kokyu/Kokyu.i: + * Kokyu/Kokyu.cpp: + * Kokyu/Kokyu.dsw: + * Kokyu/Kokyu.mpc: + * Kokyu/Kokyu_DLL.dsp: + * Kokyu/Kokyu_Static.dsp: + * Kokyu/Makefile: + * Kokyu/kokyu_export.h: + * Kokyu/tests: + * Kokyu/tests/EDF: + * Kokyu/tests/EDF/EDF.dsp: + * Kokyu/tests/EDF/EDF.dsw: + * Kokyu/tests/EDF/Makefile: + * Kokyu/tests/EDF/test.cpp: + * Kokyu/tests/FIFO: + * Kokyu/tests/FIFO/FIFO.dsp: + * Kokyu/tests/FIFO/FIFO.dsw: + * Kokyu/tests/FIFO/Makefile: + * Kokyu/tests/FIFO/test.cpp: + + First Kokyu release. + +Wed Mar 19 12:08:31 2003 Chad Elliott + + * include/makeinclude/platform_irix6.x_sgic++.GNU: + + Suppress warning numbers 1253,3439,1234 and 3506. + +Wed Mar 19 07:27:59 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/templates/nmake.mpd: + + Added depend, idl_stubs and realclean targets. + +Tue Mar 18 07:24:26 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + If files are listed in "Template_Files" and "Source_Files" is + omitted, then "Source_Files" could have duplicated values from + "Template_Files". A new method has been added to correct this + situation. + +Mon Mar 17 17:38:05 2003 Balachandran Natarajan + + * include/makeinclude/platform_linux_icc.GNU: The GNU file can now + work with 64 bit intel compiler in Itanium. Thanks to Lubomir + Bulej and Petr Tuma + for providing the patches. + +Mon Mar 17 19:20:54 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_cygwin32.GNU: + Set threads to 0 when it is not defined yet. From the Cygwin daily + build we found that threading is just partly enabled with Cygwin. + First tries to enable it completely resulted in a lot of new errors, + so for the time being disable threads by default and then start + working on getting everything working with threading enabled. + Also removed setting of optimized and the --enable-auto-import + because they are not needed. + +Mon Mar 17 09:58:48 2003 Chad Elliott + + * ace/ace.mpc: + + Updated the project to include the correct template, inline and + header files. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Changed the defaults for precompiled headers. If multiple pch + headers are found, then take the one closest to the project name. + +Sun Mar 16 10:12:12 2003 Johnny Willemsen + + * ace/OS.i (recursive_mutex_cond_unlock): Fixed typo + +Sat Mar 15 13:50:18 2003 Steve Huston + + * tests/tests.mpc: Added Recursive_Condition_Bug_Test. + +Sat Mar 15 12:20:45 2003 Nanbor Wang + + * tests/tests.dsw: + * tests/Recursive_Condition_Bug_Test.dsp: Added a new project file. + +Sat Mar 15 10:55:01 2003 Douglas C. Schmidt + + * tests/Makefile: + * tests/Makefile.bor: + * tests/run_test.lst: Added Recursive_Condition_Bug_Test.cpp to + these files. + + * tests: Added a new Recursive_Condition_Bug_Test.cpp to check + that the fix from Leonid Kvetnyi is correct and doesn't cause + other problems. + + * tests/Recursive_Condition_Test.cpp (ACE_TMAIN): Minor reformatting. + + * ace/OS.i (recursive_mutex_cond_unlock): Added another check for + m->RecursionCount > 1 to fix problems where the test program hangs. + Thanks to Leonid Kvetnyi for this fix. + + * ace/Event_Handler_T.h: Changed + + typedef int (T::*SIG_HANDLER) (ACE_HANDLE, siginfo_t*, ucontext_t*); + + to this + + typedef int (T::*SIG_HANDLER) (int, siginfo_t*, ucontext_t*); + + so that we're consistent across platforms where ACE_HANDLE is a + HANDLE, not an int! Thanks to Johnny Willemsen + for reporting this. + +Fri Mar 14 22:26:56 2003 Nanbor Wang + + * bin/MakeProjectCreator/config/ciao_client.mpb: + * bin/MakeProjectCreator/config/ciao_component.mpb: + * bin/MakeProjectCreator/config/ciao_server.mpb: + * bin/MakeProjectCreator/modules/Driver.pm: Merged in CIAO + specific rules and default environment settings. These changes + help me take advantage of Chad's and other's work without + complicating my workspace. Most of other CIAO stuff are rather + localized. + + These changes have no effect on others whatsoever. + +Fri Mar 14 11:49:27 2003 Steve Huston + + * tests/Cached_Allocator_Test.cpp: Fix access out-of-bounds error. + Thanks to Alexander Libman for this fix. + +Thu Mar 13 16:11:48 2003 Ossama Othman + + * ace/Log_Msg.cpp (log_hexdump): + * tests/Proactor_Test.cpp: + + Use the ACE_SIZE_T_FORMAT_SPECIFIER macro to specify the correct + size_t format specifier. Fixes a warning exhibited on 32-bit + and 64-bit g++ builds. + +Thu Mar 13 17:35:48 2003 Steve Huston + + * examples/C++NPv1/Logging_Handler.cpp (recv_log_record): + * examples/C++NPv2/Logging_Handler.cpp (recv_log_record): Use + ACE_CDR::grow(), not ACE_Message_Block::size(), to resize the + CDR-receiving block. This maintains alignment across the resize. + Thanks to Don Hinton for this fix. + +Thu Mar 13 07:40:05 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Committing Justin Michel's modifications to + the intermediate directory to allow multiple projects within a + single directory that use the same source files. This also has + the side of organizing the generated object files into separate + project directories underneath the main intermediate directory. + +Wed Mar 12 13:31:08 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + * bin/MakeProjectCreator/templates/nmakedll.mpt: + * bin/MakeProjectCreator/templates/nmakeexe.mpt: + + Fixed output directories for executables and pdb locations as + below. + +Wed Mar 12 12:19:23 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc6dspdll.mpt: + * bin/MakeProjectCreator/templates/vc6dspdllexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsplibexe.mpt: + * bin/MakeProjectCreator/templates/vc7.mpd: + * bin/MakeProjectCreator/templates/vc7dll.mpt: + * bin/MakeProjectCreator/templates/vc7exe.mpt: + + Fixed output directories for executables. Executables of + different configurations now go into different directories. + Also, we need to always generate pdb information for executables. + +Wed Mar 12 08:59:18 2003 Ossama Othman + + * ace/Log_Msg.cpp (log_hexdump): + * tests/Proactor_Test.cpp: + + Another round of format specifier corrections. "%lu" instead of + "%u". Addresses warnings in 64 bit platform builds. + +Wed Mar 12 10:42:40 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + + Fixed a problem with projects that had a slash or back slash in + the name. + + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc6dspdllexe.mpt: + * bin/MakeProjectCreator/templates/vc7.mpd: + * bin/MakeProjectCreator/templates/vc7dll.mpt: + * bin/MakeProjectCreator/templates/vc7exe.mpt: + + Make sure pdb files get generated for the right types and in the + right locations. + +Wed Mar 12 09:54:51 2003 Chad Elliott + + Committing Paul Calabrese's MPC related + changes. + + * ACEXML/common/ACEXML_Export.h: + * ACEXML/common/common.mpc: + * ACEXML/parser/parser/parser.mpc: + * bin/MakeProjectCreator/config/acexml.mpb: + + Fix problems with ACEXML mpc files on windows. + +Wed Mar 12 08:36:12 2003 Douglas C. Schmidt + + * ace/FILE.cpp: Make the ACE_FILE::close() method check for a + valid handle. Thanks to Paul Marquis for + reporting this. + +Wed Mar 12 08:25:17 2003 Chad Elliott + + * bin/MakeProjectCreator/config/acedefaults.mpb: + * bin/MakeProjectCreator/config/aceexe.mpb: + * bin/MakeProjectCreator/config/acelib.mpb: + * bin/MakeProjectCreator/config/global.mpb: + + Changed the global values to be generic and moved the defaults for + ACE into the acedefaults base project. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug where header and inline files would be added to a + project even if they were specified to be empty. + +Wed Mar 12 07:03:54 2003 Chad Elliott + + * netsvcs/servers/Makefile.bor: + + Applying Trevor Fields modification. Change + $(OBJDIRS) to $(OBJDIR). + +Tue Mar 11 14:12:46 2003 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added a -recurse option and fixed a problem with changing + to non-existent directories. + +Mon Mar 10 18:10:31 2003 Steve Huston + + * ace/ARGV.h: Clarified the behavior of ACE_ARGV's behavior with + respect to environment variable substitution; it only substitutes + when the token is itself an environment variable reference and not + if there's an environment variable reference contained within the + token. e.g. $HOME will subtitute, $HOME/file will not. + +Mon Mar 10 14:03:11 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Factor out code to detect duplicate project names to allow the + WorkspaceCreator to use that same code to detect duplicate + workspace names. + +Mon Mar 10 13:30:30 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + If an mpc file contains projects with duplicate names, MPC will + issue a warning to that effect. + +Mon Mar 10 08:25:30 2003 Ossama Othman + + * ace/Log_Msg.cpp (log_hexdump): + * tests/Proactor_Test.cpp: + + Corrected format specifier for size_t (unsigned integer) + variable, i.e. "%u" instead of "%d". Fixes mismatched format + specifier warnings. + +Mon Mar 10 07:36:59 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Fixed a bug where multiple uses of a $() variable would not be + handled correctly with the -relative option. Thanks to Nanbor + Wang for reporting this. + +Mon Mar 10 13:47:08 CET 2003 Oliver Kellogg + + * include/makeinclude/platform_g++_common.GNU: + Cannot use CXX to determine compiler version because CXX might be + set to "insure" and insure does not pass the -dumpversion option + to the compiler. + +Sun Mar 9 10:17:16 2003 Edan Ayal + + * tests/Future_Set_Test.cpp: + * tests/Future_Test.cpp: + + Printing order should be 'a,b,c,d,e' instead of 'a,b,c,e,d'. + + First sleep() replaced with + ACE_Thread_Manager::instance()->wait(). + + Final sleep() is redundant, as the spawned threads are already + dead. + + Prime_Scheduler::close() is called twice - once by the user + (asking to close the task) and once by the framework, when the + thread exists. This causes the task_count counter to be + negative. + + Renamed the method to 'shutdown'. Change method declaration and + definition (remove 'virtual' and all the arguments). Change the + call in Method_Request_end::call to shutdown() instead of + close() + + In the future set test, place different name commands in the + name set, just to show that it can be done. + +Sat Mar 8 12:54:18 2003 Steve Huston + + * ace/Get_Opt.h: Clarified the role of the long_only argument for + the ACE_Get_Opt constructor. + +Fri Mar 7 09:58:06 2003 Phil Mesnier + + * apps/mkcsregdb/Makefile: Fixed the install location so the + make succeeds. + +Fri Mar 7 08:51:56 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/Parser.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/StringProcessor.pm: + + Reverted my change from "Fri Mar 7 06:35:09 2003 Chad Elliott" + to Parser.pm and factored out code from that module and Driver + into a new module, StringProcessor.pm. Driver and Parser now + inherit from StringProcessor. + +Fri Mar 7 07:19:46 2003 Chad Elliott + + * ACEXML/apps/svcconf/svcconf.mpc: + * ACEXML/common/common.mpc: + * ACEXML/examples/SAXPrint/SAXPrint.mpc: + * ACEXML/parser/parser/parser.mpc: + * ACEXML/tests/tests.mpc: + + Added mpc files for ACEXML related projects. + + * bin/MakeProjectCreator/config/acexml.mpb: + + Added an acexml base project to provide easy addition of ACEXML + libraries to a project. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed the code to find the main() in a .cpp. + +Fri Mar 7 06:35:09 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Parser.pm: + + Fixed a bug introduced with the + "Thu Mar 6 08:06:35 2003 Chad Elliott" modification of + Driver.pm. I made $cwd part of the class instead of a static + local. The value wasn't being updated properly since Driver.pm + now "uses" Parser. Thanks to Steve Huston for bringing this to my + attention. + +Thu Mar 6 18:14:21 2003 Steve Huston + + * include/makeinclude/platform_hpux_aCC.GNU: Rather than do the + template closure as part of the AR command, set up PRELIB to do + template closure; this allows static libs to build clean with the + xargs method introduced to rules.lib.GNU. A side-affect of this + is that the separate template closure step is also used for + shared libraries, and thus, +inst_none needed to be added to + SOFLAGS. + Also set AR to /usr/ccs/bin/ar to be sure to pick up the native + HP-supplied ar command. + + * examples/C++NPv1/Process_Per_Connection_Logging_Server.cpp: Don't + reinterpret_cast on non-Windows. Not needed and aC++ complains. + Also see: + Wed Feb 19 10:41:20 2003 Steve Huston + +Thu Mar 6 14:49:37 2003 Steve Huston + + * apps/mkcsregdb/mkcsregdb.cpp: const_cast pointers that need to be + delete[]-ed sp MSVC 6 doesn't complain. static_cast result of + strtol() to ACE_CDR::UShort when needed. + +Thu Mar 6 11:41:46 2003 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added a -notoplevel option to allow processing to occur with no + top level file created. + +Thu Mar 6 10:56:09 2003 Phil Mesnier + + * ace/Makefile.am: Adding codeset files to yet another makefile + variant. + +Thu Mar 6 09:58:41 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/nmakedll.mpt: + * bin/MakeProjectCreator/templates/nmakeexe.mpt: + + Added support for nmake on Win64. To generate nmake files use the + following command line: + + mwc.pl -type nmake -value_template platforms=Win64 + +Thu Mar 6 08:06:35 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Driver.pm: + + Added an environment variable that allows users to set default + command line parameters. The MPC_COMMANDLINE environment variable + is added to the command line parameters. It will not override any + arguments passed in. + +Wed Mar 5 21:45:39 2003 Steve Huston + + * ace/INET_Addr.cpp (get_port_number_from_name): Correct arg name + for ACE_UNUSED_ARG. Suspected cut/paste error. + + * tests/ACE_Test.cpp: const_cast the pointers returned from + ACE::execname() so they can be deleted on MSVC6. + +Wed Mar 5 07:05:11 2003 Phil Mesnier + + * ace/ace-dll.icc: + * ace/ace-lib.icc: + * ace/ace.icc: + * ace/ace_dll64.mak: + * ace/ace_lib64.mak: + Added codeset registry files to more makefiles. + +Wed Mar 5 06:32:40 2003 Phil Mesnier + + * ace/Makefile.bor: + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + + Added codeset registry files and fixed spelling error in + Makefile.bor. + +Wed Mar 5 06:10:48 2003 Phil Mesnier + + * ace/Makefile.bor: + + Added codeset registry files to makefile. + +Tue Mar 04 19:58:29 2003 Nanbor Wang + + * ACEXML/common/FileCharStream.cpp (determine_encoding): Commented + out the annoying debug information. Users should get the + encoding information from this->getEncoding(), instead of + relying on the debug info. + + * ACEXML/common/LocatorImpl.cpp (reset): Remember to reset string + pointers to 0 after deleteing them. Otherwise, a parser may + crash if it is used to parse a second file. + +Tue Mar 4 17:39:31 2003 Steve Huston + + * docs/CE-status.txt: Updated to reflect the ACE 5.3 status of CE. + + * ace/ACE.cpp (execname): Try to locate ".exe" suffix without + case sensitivity. Thanks to Kelly F. Hickel + for reporting this. Also, when appending a suffix, append it to + the name, not after the name's nul terminator. + + * ace/ACE.h: Clarified that the pointer returned, if allocated, is + allocated using new[] and should be freed with delete[]. + + * tests/ACE_Test.cpp: + * tests/ACE_Test.dsp: New test for ACE methods. At this time, it tests + the ACE::execname() method fixed above. + + * tests/Makefile: + * tests/Makefile.bor: + * tests/tests.dsw: + * tests/tests.mpc: + * tests/run_test.lst: Added ACE_Test. + +Tue Mar 4 13:54:52 2003 Phil Mesnier + + * ace/Codeset_Registry.cpp: + * ace/Codeset_Registry.h: + * ace/Codeset_Registry.inl: + + New files added to support the codeset framework. The Codeset + Registry is either a wrapper for dce code and character set + registry functions, if the system supports them, or these + fucntions are emulated. Only the functions necessary to support + TAO's Codeset translation framework are emulated. + + * ace/Codeset_Registry_db.cpp: + + The codeset "database." A minimal list (2 entries) is shipped, see + apps/mkcsregdb to build a new list of supported codesets as needed. + + * ace/CDR_Stream.h: + + Changed the interface on the ACE_[W]Char_Codeset_Translator class for + the read_[w]char_array to take a non-const array as the out parameter. + + * ace/Makefile.ace: + * ace/ace.mpc: + + Added the new codeset files to the makefile. + + * apps/mkcsregdb: + + A new application used to generate custom list of codeset identites. + The description of how to run is in a comment at the top of + ace/Codeset_Registry_db.cpp. + +Tue Jan 24 17:50:32 2003 Gonzalo Diethelm + + * ace/INET_Addr.cpp: + Method string_to_addr() now uses ACE_OS_String::strtol() instead + of the ugly hack using ACE_OS::strspn() and ACE_OS::atoi(). The + two set() methods that receive a const char port_name[] now try + first to parse that port_name as a simple number (like "901"), + and if that fails they try to resolve the port name as a + service. In order to implement this, I added a static helper + function called get_port_number_from_name() (sorry for the awful + name). + +Tue Mar 4 12:53:06 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + If no exe target or lib target is supplied, then search the source + files for a main() and set the exename. + +Tue Mar 4 09:31:01 2003 Jeff Parsons + + * ace/Configuration.cpp: + + For temporary ACE_TStrings used internally, switched to the + non-allocating constructor. Also made cosmetic changes and + changed some ACE_TString assignments to use the nocopy + assignment method added below. + + * ace/String_Base.h: + * ace/String_Base.i: + + Added a nocopy assignment method. + + * ace/ace_dll.dsp: + + Added Unbounded_Queue.h to the project. + +Mon Mar 3 11:39:20 2003 Ossama Othman + + * ace/Strategies_T.h: + + Forward declare ACE_Service_Repository. Fixes a problem exposed + by IBM Visual Age C++ 5 builds about unexpected text. + +Fri Feb 28 17:43:02 2003 Douglas C. Schmidt + + * ace/Service_Manager.h (ACE_Service_Manager): Changed private to + protected. Thanks to Terry Mihm for + suggesting this. + +Fri Feb 28 13:04:56 2003 Ossama Othman + + Changes necessitated by inter-header dependency reductions. + + * examples/Connection/non_blocking/CPP-acceptor.h: + + Include "ace/Svc_Handler.h" to pull in ACE_Svc_Handler template + declaration. + + * examples/Connection/non_blocking/test_lsock_acceptor.cpp: + * examples/Connection/non_blocking/test_tli_acceptor.cpp: + + Include "ace/Service_Config.h" to pull in ACE_Service_Config + class declaration. + +Fri Feb 28 14:12:03 2003 Chad Elliott + + * bin/ChangeLogEditor/ChangeLogEdit.pm: + * bin/ChangeLogEditor/ChangeLogEntry.pm: + * bin/ChangeLogEditor/EmailTranslator.pm: + * bin/ChangeLogEditor/FileLocator.pm: + * bin/cle.pl: + + Added a ChangeLog editor script. It uses CVS to determine which + files have been modified, added or removed and generates a blank + ChangeLog entry in the existing ChangeLog. + +Fri Feb 28 13:18:17 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm: + + Fixed a problem with project dependencies. If the project + dependency is not a project within the generated solution, then + omit it. + +Fri Feb 28 07:49:00 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Parser.pm: + + Pulled the common code out of Creator and replaced it with a + template method to collect the lines with possible line + continuation. + +Fri Feb 28 12:33:01 UTC 2003 Johnny Willemsen + + * ace/SString.cpp: + Also do the explicit template instantiations + ACE_String_Base::NULL_String_ and + ACE_String_Base::NULL_String_ when using VxWorks. + +Thu Feb 27 10:56:01 2003 Ossama Othman + + * tests/Proactor_Scatter_Gather_Test.cpp (initiate_read_file): + + Explicitly cast return value of ceil() to "size_t". Fixes a + "loss of data" warning. Loss of data isn't an issue in this + case. + +Thu Feb 27 10:53:38 2003 Ossama Othman + + * ace/Atomic_Op.cpp (single_cpu_exchange, multi_cpu_exchange): + + Fixed unused argument warnings. + +Thu Feb 27 10:46:01 2003 Ossama Othman + + Changes necessitated by inter-header dependency reductions. + + * apps/Gateway/Peer/Peer.h: + * examples/ASX/Event_Server/Event_Server/Peer_Router.h: + * examples/Connection/non_blocking/CPP-connector.h: + * netsvcs/lib/Name_Handler.h: + * netsvcs/lib/Server_Logging_Handler_T.h: + * netsvcs/lib/TS_Clerk_Handler.h: + * netsvcs/lib/TS_Server_Handler.h: + + Include "ace/Svc_Handler.h" to pull in ACE_Svc_Handler template + declaration. + + * examples/Connection/non_blocking/test_sock_acceptor.cpp: + * examples/Connection/non_blocking/test_spipe_acceptor.cpp: + + Include "ace/Service_Config.h" to pull in ACE_Service_Config + class declaration. + +Thu Feb 27 11:24:14 2003 Chad Elliott + + * apps/gperf/src/gperf.mpc: + + Change the gperf project name to contain exe to allow the + VC6ProjectCreator to create the correct dependencies. + +Thu Feb 27 10:41:33 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/VC6WorkspaceCreator.pm: + + Add a warning if duplicate projects are detected in a generated + workspace. + +Thu Feb 27 10:31:44 2003 Balachandran Natarajan + + * include/makeinclude/platform_linux_icc.GNU: The GNU file can now + work with 64 bit intel compiler in Itanium. Thanks to Lubomir + Bulej and Petr Tuma + for providing the patches. + + * THANKS: Added Lubomir Bulej to the hall of fame. + +Thu Feb 27 10:22:05 2003 Balachandran Natarajan + + * ace/Synch.h: + * ace/Synch.i: Added ACE_Null_Condition::wait (ACE_Null_Mutex &m, + const ACE_Time_Value * = 0) which seems to be missing. + +Wed Feb 26 18:42:33 2003 Christopher Kohlhoff + + * ace/Makefile.bor: + + Removed ACE_LD_DECORATOR_STR definition from CFLAGS, as this + macro is now defined by the common included makefiles. + + * ace/Synch.h: + + Added missing constructor overload and disown member function + to the ACE_Guard template specialization. + + * ace/Atomic_Op.cpp: + * ace/Atomic_Op.h: + * ace/Atomic_Op.i: + * tests/Atomic_Op_Test.cpp: + + Use InterlockedExchange (or the XCHG instruction) to provide + strong memory-ordering when assigning to an atomic integer. + + * bin/MakeProjectCreator/Creator.pm: + + Added support for line continuation using backslash in .mpc files. + +Wed Feb 26 11:55:20 2003 Chad Elliott + + * ace/ace.mpc: + + Added POSIX_CB_Proactor.cpp to the Demux files. + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Modification to allow users to name the foreach variable. + +Wed Feb 26 07:39:58 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Changed the defaulting behavior if neither exename, sharedname or + staticname are defined in an mpc file. + +Tue Feb 25 22:26:30 2003 Krishnakumar B + + * ace/Malloc.h: + * ace/Malloc.cpp: + * ace/Malloc.h: + * ace/Malloc_T.cpp: + * ace/PI_Malloc.cpp: + * ace/PI_Malloc.h: + + Teach ACE_Control_Block and friends to do alignment on 64-bit + platforms. The previous code was buggy and caused a lot of bus + errors on platforms with greater than 4-byte alignment. We no + longer multiply and divide by sizeof (long) and do the alignment + based on sizeof (union ACE_max_align_info). This change also + makes the default alignment to be at 8-byte boundary (which is + ofcourse overridable) and errs in favour of safe code by default + vs optimization for code size. This should get rid of bug + reports on SGI IRIX, Solaris 64-bit etc related to + ACE_*_Allocator and friends. + + Also fixed a couple of rounding errors which result in core + dumps, in ACE_Cached_Allocator and ACE_Dynamic_Cached_Allocator + where we happily traverse memory irrespective of alignment of + the chunk_size. + + Thanks to Dave Mercer for reporting the + problem. + + One of the items from the long list of pending items post-5.3.1. + + * ace/OS_Memory.h: + + Removed the definition of ACE_MALLOC_ALIGN from this file. + ACE_MALLOC_ALIGN is an internal definition of Malloc.h and + should have no business in OS_Memory.h. + + * include/makeinclude/rules.lib.GNU: + + Use echo on VLOBJS instead of find with *.o. This fixes build + problems on lame platforms like MacOS X where ar doesn't + generate an index and need to use ranlib. Probably the right + thing to do even otherwise since there might be more objects in + .{sh,}obj than needed for a library. + +Tue Feb 25 10:00:54 2003 Ossama Othman + + * ace/CDR_Base.h (LongLong): + * ace/CDR_Base.inl: + * ace/CDR_Base.cpp: + + Removed newly added 32-bit assignment and comparison operators. + Comparison is non-trivial in this signed case, and assignment + operators are a potential source of confusion when implicit + conversions are performed. This change basically reverts + ACE_CDR::LongLong to its previous implementation, and also + addresses some build problems on platforms with non-native 64 + bit signed integers (e.g. VxWorks). + +Tue Feb 25 08:09:13 2003 Ossama Othman + + * ace/Atomic_Op_T.h (mutex_): + + Removed "mutable" keyword from this reference member. IBM's + Visual Age C++ considers mutable reference members invalid. + + * ace/Atomic_Op_T.i: + + Go back to casting away the const-ness of the above mutex + reference member in const methods. + +Tue Feb 25 09:57:07 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Clean up the generated targets with the GNU Makefiles. + +Tue Feb 25 09:24:06 2003 Douglas C. Schmidt + + * ace/OS.cpp: Added an emulation for localtime_r() for WinCE. Thanks to + Martin Brown for reporting this. + +Tue Feb 25 08:40:12 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Always generate a realclean target, but only add idl generated + files if we had idl_files to work with. + +Tue Feb 25 07:56:59 2003 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + + Updated the documentation to reflect the removal of the 3 + character restriction on type names. + + * bin/MakeProjectCreator/config/avstreamsexe.mpb: + + Inherit from namingexe instead of reproducing the same + information. + + * bin/MakeProjectCreator/config/rteventexe.mpb: + + Inherit from server instead of reproducing the same information. + + * bin/MakeProjectCreator/modules/Driver.pm: + + Removed the restriction of a 3 character type. + + * bin/MakeProjectCreator/modules/BorlandProjectCreator.pm: + * bin/MakeProjectCreator/modules/GHSProjectCreator.pm: + * bin/MakeProjectCreator/modules/GNUProjectCreator.pm: + * bin/MakeProjectCreator/modules/NMakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC7ProjectCreator.pm: + + Refactor code into the base class. + + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/GHSWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/GNUWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Made modifications to these modules to allow an mwc file to have + multiple workspaces defined within it. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Cosmetic change. + + * bin/MakeProjectCreator/modules/MakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/MakeProjectCreator.pm: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/mpc.pl: + * bin/mwc.pl: + + Added a new project type for generic Makefiles. These are not + suitable for use within ACE or TAO, but may be useful to someone. + +Mon Feb 24 15:37:06 2003 Douglas C. Schmidt + + * ace/TTY_IO.h (ACE_TTY_IO): Added the dtrdisable member to + Serial_Params. This finishes a fix suggested by Ray Limpus + . Thanks to Jeff Parsons for noticing + this. + +Mon Feb 24 08:53:52 2003 Ossama Othman + + * ace/Basic_Types.i (operator++, operator--): + + Fixed incorrect dereferencing of non-pointer return variable. + +Sun Feb 23 12:16:34 2003 Douglas C. Schmidt + + * ace/WIN32_Asynch_IO.cpp (cancel): Added support for cancel() on + MinGW. Thanks to Vince for this fix. + + * examples/Mem_Map/Makefile: Moved the definition of DIRS to + later in the Makefile so we can exclude it from the MinGW + build. Thanks to Vince for reporting this, as well. + + * ace/WIN32_Proactor.cpp (close): Make sure to check whether + GetQueuedQueuedCompletion() returns false. Thanks to Vince + Mounts for reporting this. + +Sat Feb 22 08:16:36 2003 Ossama Othman + + * ace/Basic_Types.h (operator++, operator--): + + Fixed return type mismatch between declaration and definition in + Basic_Types.i. + +Fri Feb 21 22:21:49 2003 Steve Huston + + * ace/OS.i: Removed the #if !defined (ACE_HAS_WINCE) around the + ACE_OS::vsprintf() method. It's available on CE. Thanks to + Emmanuel Thevenot Beaufort + for this fix. + + Also enabled ACE_OS::fgets(), fflush(), thr_getspecific() similarly. + +Fri Feb 21 12:52:00 2003 Ossama Othman + + * ace/Global_Macros.h: + * ace/OS.h: + + Moved ACE_CORBA_{1,2,3} and ACE_NESTED_CLASS macro out of OS.h + and into Global_Macros.h. Helps avoid inclusion of OS.h in some + cases. + +Fri Feb 21 10:05:23 2003 Ossama Othman + + * ace/Local_Name_Space_T.cpp: + + Include "ace/Auto_Ptr.h" once again to pull in the + ACE_Auto_Basic_Array_Ptr class declaration. Fixes compile-time + problems on AIX about unknown template types. + +Fri Feb 21 13:32:43 2003 Edward Scott + + * docs/bugzilla-build-setup.html: + + Removed obsolete documentation file. Thanks to Johnny Willemsen + for reporting the problem. + +Fri Feb 21 06:18:19 2003 Ossama Othman + + * tests/Framework_Component_DLL.cpp: + + Include "ace/Service_Object.h" to pull in ACE_Service_Object + class declaration. Necessitated by inter-header dependency + reductions. + +Thu Feb 20 18:54:03 2003 Ossama Othman + + * apps/Gateway/Gateway/gatewayd.cpp: + + Include "ace/Service_Object.h" to pull in ACE_Service_Object_Ptr + class declaration. Necessitated by inter-header dependency + reductions. + +Thu Feb 20 18:49:37 2003 Ossama Othman + + * examples/Service_Configurator/Misc/Timer_Service.h: + + Include "ace/Service_Object.h" to pull in ACE_Service_Object + class declaration. Necessitated by inter-header dependency + reductions. + +Thu Feb 20 18:45:29 2003 Ossama Othman + + * examples/C++NPv2/Service_Reporter.cpp: + + Include "ace/Service_Types.h" to pull in ACE_Service_Type_Impl + class declaration. Necessitated by inter-header dependency + reductions. + +Thu Feb 20 18:31:10 2003 Ossama Othman + + * ace/Strategies_T.cpp: + + Fixed "lose of const in cast" errors. + +Thu Feb 20 18:20:19 2003 Ossama Othman + + * ace/SSL/SSL_SOCK_Acceptor.h (ACE_SSL_SOCK_Acceptor): + + Reverted the change that made this class inherit privately from + ACE_SSL_SOCK instead of publically. While this isn't strictly + the correct thing to do, IMO, it does correct some compile-time + problems. + + * ace/SSL/SSL_SOCK_Connector.cpp (ssl_connect): + + Fixed compile-time error related to violation of a const + qualifier on a pointer to the timeout value. + +Thu Feb 20 19:18:17 2003 Balachandran Natarajan + + * ChangeLogs/ChangeLog-02b: + * ChangeLogs/ChangeLog-03a: New files having all the old ChangeLog + entries till 5.3.1. + * ChangeLog: Shortened the changelog for ease of use. + +Thu Feb 20 10:35:15 2003 Ossama Othman + + * ace/Strategies_T.h: + * ace/Strategies_T.cpp: + + Reverted part of changes that introduced extensive use of + traits since they were forcing the introduction of the + ACE_TYPENAME macro in more places than is desirable at this + point in time. They may be reintroduced in the future. + +Thu Feb 20 09:24:00 2003 Ossama Othman + + * ace/Service_Config.h: + + Forward declare ACE_Service_Object. Necessitated by inter-header + dependency reductions. + +Thu Feb 20 09:23:51 2003 Ossama Othman + + * ace/Acceptor.h: + * ace/Connector.h: + + No need to include "ace/Service_Config.h" and + "ace/Svc_Handler.h". + + Include "ace/Synch_Options.h". Necessitated by inter-header + dependency reductions. + + * ace/Acceptor.cpp: + * ace/Connector.cpp: + + Include "ace/Svc_Handler.h". Necessitated by inter-header + dependency reductions. + + * ace/Atomic_Op.h: + + Fixed doxygen documentation. + + * ace/Atomic_Op.i (operator++, operator--): + + Implement these post{in,de}crement operators in terms of their + corresponding pre{in,de}crement operators to ensure consistent + semantics. + + * ace/Atomic_Op_T.h (mutex_, own_mutex_): + + Improved const-correctness by making these mutex members + mutable. This allows us to avoid casting away the constness. + + * ace/Atomic_Op_T.i (operator==, operator>=, operator>): + (operator<=, operator<, value, operator=): + + Do not cast away the constness of the mutex. That hack is no + longer necessary since the mutex is now mutable. + + * ace/Basic_Types.h: + + Improved doxygen documentation. + + Moved endianness determination macros prior to ACE_U_LongLong + class. + + (operator=): + + Added ACE_ULongLong assignment operator declarations that accept + 32 bit signed and unsigned integers. + + (operator++, operator--): + + Added missing ACE_ULongLong post{in,de}crement operator + declarations. + + (data_): + + Make declaration order of lower and upper 32 bit members (lo_ + and hi_) of this structure dependant on the endianness of the + platform. This mimics what is done for the ACE_LongLong type + in the ACE_CDR classes. + + * ace/Basic_Types.i (operator=): + + Added ACE_ULongLong assignment operator implementation that + accept 32 bit signed and unsigned integers. + + (operator++, operator--): + + Added missing ACE_ULongLong post{in,de}crement operator + implementations. + + * ace/CDR_Base.cpp (mb_align): + + Uninlined this method in order to reduce inter-header + dependencies. + + (operator<, operator<=, operator>, operator>=, operator==): + (operator!=): + + Added these missing operator for the ACE_LongLong type. + + (Float, operator=, operator!=): + + Fixed potential unused argument warnings for the Cray/UNICOS + case. + + * ace/CDR_Base.h: + + Include "ace/OS.h" instead of "ace/Message_Block.h", and forward + declare ACE_Message_Block in order to reduce inter-header + dependencies. + + Changed all uses of typedefs like "u_char" and "u_long" to their + non-typedef counterparts, e.g. "unsigned char" and "unsigned + long". Makes it possible to avoid including headers that + contain those typedefs. + + (operator=): + + Added ACE_LongLong constructors assignment operators that accept + 32-bit integers. + + (operator==, operator!=, operator<=, operator<, operator>=): + (operator>): + + Added these missing ACE_LongLong relation operators. + + * ace/CDR_Base.inl (operator=): + + Added ACE_LongLong constructors assignment operators that accept + 32-bit integers. + + (operator==, operator!=, operator<=, operator<, operator>=): + (operator>): + + Added these missing ACE_LongLong relation operators. + + * ace/CDR_Stream.h: + + Moved definition of the ACE_CDR_BYTE_ORDER macros from OS.h to + this header. Helps with header dependency reduction. + + * ace/Capabilities.h: + + Use ACE_Hash_Map_Manager_Ex instead of ACE_Hash_Map_Manager. + Doing so saves us three template instantiations. + + * ace/Capabilities.i: + + Cosmetic changes. + + * ace/Capabilities.cpp: + + No need to include "ace/Map_Manager.h". + + Added missing ACE_RCSID macro. + + Improved conformance to ACE coding conventions. + + Removed explicit template instantiations for the + ACE_Hash_Map_Manager template. That template is no longer + used. + + (reset_caps): + + Use ACE_Hash_Map_Manager_Ex template traits instead of the + actual template type. Makes for cleaner code. + + * ace/Configuration.cpp: + * ace/Configuration.h: + * ace/Strategies_T.cpp: + * ace/Token_Collection.cpp: + * ace/Token_Collection.h: + * ace/Token_Invariants.cpp: + * ace/Token_Invariants.h: + * ace/Token_Manager.cpp: + * ace/Token_Manager.h: + * ace/WIN32_Asynch_IO.cpp: + * ace/WIN32_Asynch_IO.h: + + Take advantage of template traits to improve clarity of code. + + * ace/Copy_Disabled.h: + + Corrected comment. + + * ace/Default_Constants.h: + + Moved ACE_DEFAULT_CDR_BUFSIZE, ACE_DEFAULT_CDR_EXP_GROWTH_MAX, + ACE_DEFAULT_CDR_LINEAR_GROWTH_CHUNK, + ACE_DEFAULT_CDR_MEMCPY_TRADEOFF macros from OS.h to this + header. Helps with inter-header dependency reduction. + + * ace/Dynamic_Service_Base.cpp: + * ace/Parse_Node.cpp: + * ace/Service_Manager.cpp: + * ace/Service_Repository.cpp: + * ace/Svc_Conf.y: + * ace/Svc_Conf_y.cpp: + + Include "ace/Service_Types.h". Necessitated by inter-header + dependency reduction. + + * ace/Filecache.h: + * ace/Filecache.cpp: + * ace/Hash_Map_With_Allocator_T.h: + * ace/Hash_Map_With_Allocator_T.cpp: + * ace/Local_Name_Space_T.h: + * ace/Local_Name_Space.cpp: + + Use ACE_Hash_Map_Manager_Ex instead of ACE_Hash_Map_Manager. + Doing so saves us three template instantiations. + + * ace/Future_Set.h: + * ace/Map_T.h: + + Include "ace/Hash_Map_Manager_T.h" instead of + "ace/Hash_Map_Manager.h". The former is all that is needed, and + the latter already includes the former. + + * ace/Hash_Map_Manager_T.i (operator++, operator--): + * ace/Map_Manager.i: + * ace/RB_Tree.i: + + Implement the post-{in,de}crement operators in terms of their + pre-{in,de}crement operator counterparts to ensure consistency. + + * ace/Local_Name_Space_T.cpp: + + No need to include "ace/Auto_Ptr.h" + + Use template traits to improve code clarity. + + * ace/OS.h: + + Moved ACE_CDR_BYTE_ORDER macro definition to CDR_Stream.h. + Helps with inter-header dependencies. + + Moved ACE_DEFAULT_CDR_BUFSIZE, ACE_DEFAULT_CDR_EXP_GROWTH_MAX, + ACE_DEFAULT_CDR_LINEAR_GROWTH_CHUNK, + ACE_DEFAULT_CDR_MEMCPY_TRADEOFF to Default_Constants.h. Helps + with inter-header dependency reduction. + + * ace/POSIX_Asynch_IO.cpp: + + Added missing ACE_RCSID macro. + + (bytes_transferred): + Use map template traits to improve code clarity. + + * ace/POSIX_Asynch_IO.h: + + Redefined old map typedefs in terms of the map traits. + + * ace/Parse_Node.h: + * ace/Service_Repository.h: + + No need to include "ace/Service_Types.h". A forward declaration + for ACE_Service_Types is enough. + + * ace/Service_Config.h: + + No need to include "ace/Service_Types.h" and "ace/Signal.h". + Forward declaring ACE_Service_Types and ACE_Sig_Adapter is + enough. + + * ace/Strategies_T.h: + + No need to include "ace/Service_Config.h" and + "ace/Synch_Options.h". + + * ace/Synch_Options.h: + + Changed all uses of typedefs like "u_char" and "u_long" to their + non-typedef counterparts, e.g. "unsigned char" and "unsigned + long". Makes it possible to avoid including OS.h. A big win in + compile time reduction. + + Include "ace/Time_Value.h". Necessitated by inter-header + dependency reduction. + + * ace/Synch_Options.cpp: + + Changed all uses of typedefs like "u_char" and "u_long" to their + non-typedef counterparts, e.g. "unsigned char" and "unsigned + long". Makes it possible to avoid including OS.h. A big win in + compile time reduction. + + Include "ace/Trace.h". Necessitated by inter-header + dependency reduction. + + * ace/Template_Instantiations.cpp: + + Removed all ACE_Hash_Map_Manager related template + instantiations. The ones for ACE_Hash_Map_Manager_Ex are all + that are needed. + + * ace/SSL/SSL_SOCK_Acceptor.h (ACE_SSL_SOCK_Acceptor): + + Inherit privately from ACE_SSL_SOCK, instead of publically. + ACE_SSL_SOCK_Acceptor is IMPLEMENTED-IN-TERMS-OF ACE_SSL_SOCK. + It does not satisfy the IS-A relationship. + + * ace/SSL/SSL_SOCK_Connector.cpp (ssl_connect): + + Use ACE_Countdown_Time to take into account the time between + each call to select() instead of using the same timeout value in + each loop iteration. [Bug 1110] + + * ace/SSL/SSL_SOCK_Stream.cpp (get_remote_addr): + + Retrieve the remote addr from the parent ACE_SSL_SOCK class, not + ACE_SOCK. Addresses potential inconsistencies in the future. + + * ace/SSL/SSL_SOCK_Stream.h (ACE_SSL_SOCK_Stream): + + Removed friend declarations for the + ACE_SSL_SOCK_{Acceptor,Connector} classes. They are + unnecessary. + +Wed Feb 19 10:41:20 2003 Steve Huston + + * examples/C++NPv1/Process_Per_Connection_Logging_Server.cpp: + In run_worker(), use ACE_reinterpret_cast, not ACE_static_cast, + to convert an int to an ACE_HANDLE. Thanks to Vince Mounts + for reporting this. + +Tue Feb 11 17:14:56 2003 Douglas C. Schmidt + + * ace/TTY_IO.cpp: Fixed several problems with DTR enabling. Thanks to + Ray Limpus for reporting this. + +Thu Feb 6 16:36:18 2003 Douglas C. Schmidt + + * ace/Bound_Ptr.{h,i}: Made the get() method const. Thanks to + Chris Kohlhoff for reporting this. diff --git a/ACE/ChangeLogs/ChangeLog-03c b/ACE/ChangeLogs/ChangeLog-03c new file mode 100644 index 00000000000..bbd6f2714d6 --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-03c @@ -0,0 +1,14852 @@ +Wed Jan 14 18:45:46 2004 Balachandran + + * ACE version 5.4 released. + +Wed Jan 14 17:17:41 2004 Balachandran Natarajan + + * Makefile: + + Fixed the path to some of autoconf files. Hopefully this should + be the last bug. + +Wed Jan 14 16:28:28 2004 Balachandran Natarajan + + * bin/make_release: + + Fixed a bug with the way we were collecting the list of files + for making the ACE distribution. + +Wed Jan 14 16:13:33 2004 Balachandran Natarajan + + * Makefile: + + Added RELEASE_FILES to the AUTOCONF_RELEASE_FILES. + +Wed Jan 14 14:26:54 2004 Balachandran Natarajan + + * bin/make_release: + + Made changes to the way beta kits are created. We added some + solution files and WinCE files for ACE but not for TAO+CIAO + (with a reason). But when the final kits were created, the + ACE+TAO bundles and ACE+TAO+CIAO bundles had all the ACE + specific stuff which confused the user. Moreover, the autoconf + support was also bootstrapped which confused users to no end + since autoconf works only with ACE. The bootstrapping should have + been done to the ACE distribution and not to other + distributions. + + * Makefile: + + Added an extra target for AUTOCONF_RELEASE_FILES. This will have + all the release files in ACE + the files that needs to go in + with autoconf. + + I have to test this stuff and will do so shortly. + +Wed Jan 14 09:47:56 2004 Balachandran Natarajan + + * */*_Static.ds[p,w]: + + All the Win32 static projects and workspaces have been + removed. Please use MPC to generate them. + +Wed Jan 14 07:32:32 2004 Balachandran Natarajan + + * ACE-INSTALL.html: + + Thanks to Johnny Willemsen for spotting a typo in the file. + +Tue Jan 13 22:42:16 2004 Ossama Othman + + * Makefile (RELEASE_FILES): + + Added `aclocal.m4' and `Makefile.in' to the list of files to be + included in releases/kits. This should be the last of them. + +Tue Jan 13 21:39:30 2004 Balachandran Natarajan + + * Makefile (CONTROLLED_FILES): + + Removed aux and configure from the CONTROLLED_FILES section and + moved it to the RELEASE_FILES section. + +Tue Jan 13 16:33:12 2004 Ossama Othman + + * Makefile (CONTROLLED_FILES): + + Added `aux' directory to the list of controlled files. It is a + directory generated at autotool bootstrap-time via the + bin/bootstrap script, and must be available in order for ACE's + autoconf support to work. + + Added `configure' to the list of controlled files. Users can't + run the `configure' script if it isn't shipped with the + distribution. + + * bin/bootstrap: + + Invoke `autoreconf' without the "--symlink" option. Auxiliary + files should be copied into the distribution, not symbolic + pointing to them. + + * bin/make_release: + + Prepend "/usr/local/bin" to the GNU tool path. That directory + on our release host now contains some specific versions of GNU + autotools. + +Tue Jan 13 16:42:37 2004 Steve Huston + + * ACE-INSTALL.html: Correct the autoconf section to direct the user + to create a subdirectory under ACE_wrappers. Thanks to Ossama for + pointing this out. + Also changed the traditional make section to advise user to + create config.h and platform_macros.GNU files and include the + platform file rather than link or copy the platform file. + +Tue Jan 13 16:19:29 2004 Balachandran Natarajan + + * netsvcs/clients/Naming/Client/Client.mpc: + + Fixed a dependancy issue. + +Tue Jan 13 11:28:21 2004 Ossama Othman + + * Makefile (CONTROLLED_FILES): + + Added `configure.ac' file to the list of controlled files. + + * configure.ac: + + Corrected problem where std::auto_ptr<>::reset() method was not + detected properly in the !ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB + case. + + * bin/make_release: + + Bootstrap autotool support prior to creating the kits via the + new bootstrap_autotools() subroutine described below. + + Appended Emacs "Local Variables" block containing Perl mode to + end of this file to force Perl mode instead Fundamental mode to + be used by default when editing with Emacs. + + (create_kit): + + Moved autotool bootstrapping call to new bootstrap_autotools() + subroutine. + + (bootstrap_autotools): + + New subroutine that bootstraps autotool support into the ACE + distribution. + +Tue Jan 13 18:06:23 UTC 2004 Don Hinton + + * include/makeinclude/rules.local.GNU: + Only assign LIB_INSTALL to INSTALL if INSTALL has not yet been + defined. This will allow users to continue turning off + installation of libraries by setting INSTALL= prior to including + rules.local.GNU. Thanks to Craig Rodrigues + for pointing this out. Normally, the INS* variables can be used + for this purpose, since they work for each target type. + +Mon Jan 12 23:26:28 UTC 2004 Don Hinton + + * include/makeinclude/wrapper_macros.GNU: + Added new commandline flag, static_link. It defaults to 0, but + can be set =1 to force static linking, e.g., uses "-static" when + linking with GNU ld. It's turned off by default since using it + causes the footprint to go up by almost 1 MB, due to linking all + the system and compiler .a files. This way the user can decide + if that what they really want. Thanks to Bala for helping to + formulate this policy, which matches what users expect, while + adding the capability to do real static linking if you want to. + + * include/makeinclude/rules.bin.GNU: + * include/makeinclude/rules.local.GNU: + Moved the assignment of the STATIC_LINK_FLAG from rules.bin to + rules.local so that it will get picked up even if rules.bin is + not included (MPC and some Makefiles with multiple targets don't + include rules.bin). Only add the STATIC_LINK_FLAG to LDFLAGS + if static_libs_only=1. + + * include/makeinclude/platform_sunos5_g++.GNU: + Removed default assignment of STATIC_LINK_FLAG to empty, since + it's now controlled with the new static_link flag above. It + still won't work on Solaris, but at least users wanting to use + it will get an error instead of us silently not adding "-static". + +Mon Jan 12 17:52:17 2004 Steve Huston + + * ACE-INSTALL.html: Add a section for using GNU autoconf. + + * examples/APG/ThreadPools/Futures.cpp: Don't delete all work + requests; only the Exit requests - the others are allocated on + the stack. Thanks to Andy Harvey for this fix. + +Mon Jan 12 14:24:39 2004 Steve Huston + + * tests/Makefile.am: Remove $(libdir) from libTest_Output.la listed + in dependencies - having it there caused it to not match the + plain libTest_Output.la target in the Makefile, and thus not + get built before many of the tests. Added libTest_Output.la to + the DLL_Test and Service_Config_Test dependencies. + +Mon Jan 12 15:54:13 UTC 2004 Johnny Willemsen + + * apps/JAWS/server/jaws.dsp: + Fixed incorrect macro name. + +Mon Jan 12 08:06:07 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Print out a warning if a verbatim clause is processed (depending + on the project type) and the marker is not found in the + corresponding project template. + +Mon Jan 12 01:38:44 2004 Balachandran Natarajan + + * apps/soreduce/Library.cpp: + + Fixed a compile erros with VC 6 which cannot scope variables + within for loops. + +Mon Jan 12 01:35:44 2004 Balachandran Natarajan + + * bin/msvc_auto_compile.pl: + + Fixed the path ane the name of a couple of dsp files in the CORE + builds. This should fix two problems with static builds. + +Sat Jan 10 22:39:59 2004 Balachandran Natarajan + + * bin/create_ace_build.pl: + + The following patch modifies the file so that it can handle + multiple path elements in the argument given to + create_ace_build.pl. Thanks to John Poplett + for providing the patches. + +Sat Jan 10 19:35:20 2004 Balachandran Natarajan + + * bin/msvc_auto_compile.pl: + + Added missing dsp files for compilation to the static lib + builds. The failure of te static builds is due to something + else, which wil be fixed shortly in the autobuilds. + +Sat Jan 10 17:36:45 2004 Balachandran Natarajan + + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.cpp: + + Fixed warnings with Forte 8. + +Sat Jan 10 17:11:03 2004 Jeff Parsons + + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Added generation for custom build step dependency on the + IDL or CIDL compiler executable. This enables the build to + detect errors output by the (C)IDL compiler, and also will + trigger the custom build step if the (C)IDL compiler has + been updated. + +Sat Jan 10 16:14:39 2004 Steve Huston + + * ace/OS_NS_sys_socket.inl (closesocket): On HP-UX, use + shutdown() before, and in addition to, close() to close a socket. + The previous "fix" left the socket opened after shutdown(). + + * tests/Bug_1576_Regression_Test.cpp: Use ACE_DLL_SUFFIX to form the + name of the bogus dll name instead of literal ".so". Prevents a + run-time warning from platforms that use a different suffix, such + as HP-UX. + + * tests/Makefile.am: Removed -module from the libTestOutput line + so it actually links the library for use by other tests. Added + TSS_Static_Test_SOURCES to have it build as well. + +Sat Jan 10 11:18:24 2004 Steve Huston + + * ace/config-lite.h: + * ace/Sock_Connect.cpp: Added /**/ to #include to keep MSVC from + complaining it can't find a file. + + * ace/Array_Base.cpp: The _MSC_VER check need not be done for CE + compiler - it doesn't need the extra #include and doesn't have . + +Fri Jan 9 16:55:39 2004 Steve Huston + + * examples/APG/Timers/Alarm.cpp: + * examples/APG/ThreadManagement/Coop_Cancel.cpp: + * examples/APG/ThreadManagement/Signals.cpp: + * examples/APG/ThreadManagement/Signals2.cpp: + * examples/APG/Sockets/Server.cpp: + * examples/APG/Reactor/Timers.cpp: Added ACE_NOTREACHED to + unreachable statements to kill compile warnings. + +Fri Jan 9 16:27:33 2004 Steve Huston + + * examples/APG/Streams/Answerer.cpp: Removed unnecessary template + instantiations. + + * examples/APG/ThreadPools/Futures.cpp: + * examples/APG/ThreadPools/ThreadPool.cpp: Fixed memory leak. Thanks + to Andy Harvey for reporting these. + +Fri Jan 9 15:24:30 2004 Balachandran Natarajan + + * include/makeinclude/wrapper_macros.GNU: + + Support for STLPort in ACE Makefile system. Thanks to + John Poplett for the patches. + +Fri Jan 9 20:13:21 UTC 2004 Don Hinton + + * include/makeinclude/platform_g++_common.GNU: + * include/makeinclude/rules.bin.GNU: + Set the default (blank) value of STATIC_LINK_FLAG in + rules.bin.GNU and only set it in platform_g++_common.GNU if it + hasn't been set. + + * include/makeinclude/platform_sunos5_g++.GNU: + Set STATIC_LINK_FLAG blank to prevent platform_g++_common.GNU + from setting it to "-static", since this flag doesn't work on Sun. + +Fri Jan 9 11:15:16 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Added a .PHONY target to stop GNU Make from trying to build + targets that happen to coincide with cpp files. + +Fri Jan 9 14:46:54 UTC 2004 Johnny Willemsen + + * tests/Test_Output_Export.h: + Added check for ACE_AS_STATIC_LIBS for setting the export flags for + proper building of static libraries. + +Fri Jan 9 13:12:07 UTC 2004 Johnny Willemsen + + * bin/msvc_auto_compile.pl: + Corrected the check for Use_MPC. + +Fri Jan 9 12:23:11 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/global.features: + Set dummy_label to 0. This dummy_label is used by the TAO OBV + tests which don't compile because of some bugs. The idea was + good, but when dummy_label is not in this file it is set by + default to 1. When the OBV tests work again, just remove the + requires from the corresponding MPC files. + +Fri Jan 9 12:14:05 UTC 2004 Johnny Willemsen + + * bin/msvc_auto_compile.pl: + Build FTORB_Utils before PortableGroup + +Fri Jan 9 10:15:43 UTC 2004 Johnny Willemsen + + * bin/msvc_auto_compile.pl: + When using MPC with Static builds we don't have dependencies + between the libraries in the generated dsw's. The build order + is then handled in this file, but when using MPC we use generate + different filenames than previously. Added the option -MPC, when + this is passed on the commandline we use the MPC filenames. + +Fri Jan 9 08:07:13 UTC 2004 Johnny Willemsen + + * apps/JAWS/server/jaws.dsp: + This project doesn't use a separate dll for the jaws stuff, so set + ACE_HAS_SVC_DLL to 0. + +Thu Jan 8 18:28:35 2004 Balachandran Natarajan + + * examples/APG/Streams/CommandStream.h: + + Fixed a warning with g+++ builds that were caused by wrong + initialization order of members. + +Thu Jan 8 18:15:21 2004 Steve Huston + + * examples/APG/Timers/Alarm.cpp: + * examples/APG/Timers/Task.cpp: + * examples/APG/Timers/Upcall.cpp: Add missing template instantiations. + +Thu Jan 8 15:15:49 2004 Steve Huston + + * examples/APG/Streams/Answerer.cpp (RecordingStream::open): Change + the signature to match the inherited ACE_Stream::open() method to + allow easy configuration without forcing a EndTask module. + + * examples/APG/Streams/CommandStream.{h cpp}: Move the ACE_SOCK_Stream* + argument from open() to the constructor, and make default ctor + private to force passage of the ACE_SOCK_Stream*. Change open() to + properly inherit from ACE_Stream, avoiding the "hides inherited + open()" diagnostics, and making this class easier to use in + different use cases. + + * examples/APG/Streams/RecordingDevice_Text.cpp: Changed usage of + CommandStream class to match new API, above. + + * examples/APG/Streams/Command.h: + * examples/APG/Streams/CommandTask.cpp: + * examples/APG/Streams/CommandTasks.cpp: + * examples/APG/Streams/RecordingDevice_Text.cpp: Prepended RESULT_ + to the enumerators SUCCESS, PASS, FAIL; prepended CMD_ to the + enumerators UNKNOWN, ANSWER_CALL, RETRIEVE_CALLER_ID, PLAY_MESSAGE, + RECORD_MESSAGE. These were done to avoid clashes with commonly + defined macros. Thanks to Johnny Willemsen for reporting this. + +Thu Jan 8 20:15:09 UTC 2004 Johnny Willemsen + + * examples/Reactor/Misc/test_demuxing.cpp: + Made this example compiling with BCB. + +Thu Jan 8 14:05:42 2004 Balachandran Natarajan + + * performance-tests/Misc/Makefile: + + Fixed a bild error in our daily builds. Thanks to Don for + helping with this. The change just involved removing + shared_libs=0 from the Makefile. + +Thu Jan 8 18:35:11 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Just set the four xx_DIRS we overrule always to . independent of the + configuration that the we always output to the same directory + +Thu Jan 8 12:20:23 2004 Jeff Parsons + + * bin/MakeProjectCreator/config/ciao_servant.mpb: + + Changed the default command line from '--lem-file-suffix E.idl' + (since this is now the default suffix) to one that includes + the four include paths required by the inclusion of + Components.idl, which is needed by every .cidl file. + +Thu Jan 8 12:03:22 2004 Steve Huston + + * examples/APG/Timers/TimerDispatcher.cpp: + * examples/APG/Timers/PTimerDispatcher.cpp: Added missing template + instantiations. + +Thu Jan 8 17:05:56 UTC 2004 Johnny Willemsen + + * apps/JAWS/server/HTTP_Server.{h,cpp}: + * apps/JAWS/server/server.mpc: + Made this app compiling with CBX and MPC. Set the correct defines + and use the correct export macros. + +Thu Jan 8 17:02:11 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Corrected setting of STATIC_DIR + +Thu Jan 8 11:23:41 2004 Steve Huston + + * examples/APG/Naming/Name_Binding.h: + * examples/APG/Naming/Temperature_Grapher.cpp: + * examples/APG/Naming/Temperature_Monitor.cpp: + * examples/APG/Naming/Temperature_Monitor2.cpp: Add missing + "ace/OS_NS_*" includes. + + * examples/APG/Naming/Graphable_Element.h: Added 'const' to the when() + and operator<() methods, as well as to operator<()'s parameters, + to match less<> and make CBuilderX happy. Thanks to Johnny Willemsen + for reporting this. + + * examples/APG/Naming/Makefile: Moved the "RM tempinc" up before the + sub-make to avoid inadvertant smashing of tempinc. + + * examples/APG/Proactor/HA_Proactive_Status.cpp (validate_connection): + Removed the parameter names in the ACE_WIN32 case to avoid "unused + parameter" warnings. + +Thu Jan 8 11:05:25 2004 Balachandran Natarajan + + * ace/OS_NS_sys_msg.inl: + + Used a const cast instead of a static cast. + +Thu Jan 8 16:38:56 UTC 2004 Johnny Willemsen + + * apps/JAWS3/jaws3/Export.h: + Set the JAWS_HAS_DLL define correctly when not set. This fixes + the linker errors in the CBX MPC build. + +Thu Jan 8 16:16:11 UTC 2004 Johnny Willemsen + + * ace/Date_Time.i: + Changed the order of the methods to fix Tru64 warnings. + +Thu Jan 8 11:07:31 2004 Steve Huston + + * ace/SSL/SSL_Context.cpp: Added #include "ace/ACE.h" for ACE::debug() + and "ace/OS_NS_string.h" for ACE_OS::strlen(). + +Thu Jan 8 15:45:50 GMT 2004 Paul Morrison + + * ace/OS_NS_sys_shm.inl: + * ace/OS_NS_sys_msg.inl: + * ace/OS_NS_stdlib.cpp: + * ace/Mem_Map.i: + + Added #includes to fix LynxOS compilation errors. + +Thu Jan 8 07:47:58 2004 Chad Elliott + + * ace/QoS/qos.mpc: + * ace/RMCast/rmcast.mpc: + * ace/SSL/ssl.mpc: + * ace/TMCast/TMCast.mpc: + * ace/ace.mpc: + * bin/MakeProjectCreator/config/orbsvcslib.mpb: + + Removed the include_dir setting. This is determined automatically + in the Borland template. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Removed support for the include_dir keyword. It's usage is + superseded by the use of <%relwd%> in the Borland template. + +Wed Jan 7 23:06:57 UTC 2004 Don Hinton + + * include/makeinclude/all_in_one.GNU: + * include/makeinclude/platform_g++_common.GNU: + * include/makeinclude/platform_linux.GNU: + * include/makeinclude/rules.bin.GNU: + * include/makeinclude/rules.lib.GNU: + * include/makeinclude/rules.local.GNU: + * include/makeinclude/rules.nested.GNU: + * include/makeinclude/wrapper_macros.GNU: + Use xxx ?= instead of ifndef xxx, for setting default values + since it is more concise and makes the files much smaller. + + * include/makeinclude/all_in_one.GNU: + Always add the *_UNCHECKED to the regular targets if no + components are missing, since Makefiles can have both checked + and unchecked targets. + + * include/makeinclude/platform_g++_common.GNU: + * include/makeinclude/rules.bin.GNU: + Moved the check for which ld version is used out of and above + the shared library section so that we could use the GNU_LD flag + to add "-static" to a new variable, STATIC_LINK_FLAG when using + the GNU version of ld. Then add STATIC_LINK_FLAG to LDFLAGS if + static_libs_only=1. + + * include/makeinclude/rules.lib.GNU: + Added CLEANUP_VLIB and use it to set CLEANUP_INSTALL since it + includes the VAR extention if one was set. Also, make VLIBS + dependent on IDL_SRC. + +Wed Jan 7 17:34:26 2004 Steve Huston + + * examples/APG/Proactor/HA_Proactive_Status.cpp: Added #include + "ace/Log_Msg.h" to find LM_DEBUG, et al. + + * examples/APG/Processes/Process_Manager_Spawn.cpp: + * examples/APG/Processes/Process_Mutex.cpp: + * examples/APG/Processes/Spawn.cpp: + * examples/APG/Reactor/HAStatus.cpp: + * examples/APG/Reactor/HAStatus-AC.cpp: + * examples/APG/Shared_Memory/Hash_Map.cpp: + * examples/APG/Shared_Memory/Malloc.cpp: + * examples/APG/Shared_Memory/PI_Malloc.cpp: + * examples/APG/Shared_Memory/Pool_Growth.cpp: + * examples/APG/Timers/Alarm.cpp: + * examples/APG/Timers/Task.cpp: + * examples/APG/Timers/Upcall.cpp: Added missing includes + for "ace/OS_NS_*.h". + + * examples/APG/Reactor/Client.h: + * examples/APG/Reactor/ClientService.h" Add #include + "ace/Synch_Traits.h", "ace/Null_Condition.h", and "ace/Null_Mutex.h" + for Visual Age C++ to see when compiling templates. + + * ACEXML/Makefile: + * examples/APG/Svc_Config/Makefile: + * examples/APG/Timers/Makefile: Move the rm tempinc up to before + the sub-make runs to avoid whacking it while a subsequent sub-make + is running. + + * examples/APG/Svc_Config/Makefile.dynamic: Add LIBS += $(ACELIB) + + * tests/Makefile: Add .NOTPARALLEL for Visual Age C++ to avoid + squashing tempinc randomly, resulting in missing templates. + + * tests/Makefile.tests: Moved the DIRS_PARALLEL setting down to after + wrapper_macros.GNU is included and only set it for non-Visual Age C++ + builds. The tempinc directory getting mashed in parallel builds + makes mysterious build errors happen on AIX, Visual Age C++. + +Wed Jan 7 16:33:14 2004 Balachandran Natarajan + + * ace/config-tandem-nsk-mips-v2.h: + + Added the config files provided by Gary Maxey + for Tandem NSK. + +Wed Jan 7 15:55:41 2004 Steve Huston + + * ace/OS_NS_netdb.inl (getipnodebyaddr, getipnodebyname, ): Make + ACE_WIN32 go through the IPv4-only case. Since Windows IPv6 + implementation (at this time) doesn't offer + getipnodebyname() we make the code to pass through IPV4 portion + even if ACE_HAS_IPV6 is enabled. + + * ace/OS_NS_arpa_inet.inl (inet_ntop, inet_pton): Make these run + through the IPv4-only section on Win32 as well. These may be doable + on Windows using the getnameinfo() function, but it's not clear. + Needs some research and checking (and improvement of the docs for) + what the args for ACE_OS::inet_ntop() and inet_pton() are. + +Wed Jan 7 13:09:27 2004 Balachandran Natarajan + + * ace/OS_NS_Thread.inl: + * ace/OS_NS_Thread.h: + + The following checkin "Mon Jan 5 11:02:55 2004 Douglas + C. Schmidt " actually broke + ACE_Auto_Event. The idea behind the said checkin was to do a + check whether a proper event occured during event_wait (), + insted of a spurious wakeup call. This was achieved by checking + the value of . This works great for manual + events. For auto events, we don't set the variable value if we + have waiting threads. This makes the threads calling + Auto_Event.wait () to wait for ever. + + We now have another special boolean variable added to + ACE_event_t class which keeps track whether an auto event was + signalled during the signal () call. Thanks to Dr. Schmidt for + giving this idea. We need to revisit this later after x.4 and + use inheritance and polymorphism to encapsulate these behvioral + differences. Doing now could break backward compatibility. + +Wed Jan 7 13:03:06 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Added an informational message when a project will be skipped when + a required feature is disabled or an avoided feature is enabled. + +Wed Jan 7 18:37:13 UTC 2004 Johnny Willemsen + + * ace/Makefile.bor: + Added special rule to install the os_include directory and its + subdirectories. Thanks to Chris Kohlhoff for coming up with the + solution and to Cyrille Chépélov for reporting + this. This fixes [BUGID 1669]. + +Wed Jan 7 12:13:12 2004 Chad Elliott + + * bin/MakeProjectCreator/config/orbsvcs_output.mpb: + * bin/MakeProjectCreator/config/orbsvcsexe.mpb: + * bin/MakeProjectCreator/config/tao_output.mpb: + * bin/MakeProjectCreator/config/taodefaults.mpb: + * bin/MakeProjectCreator/config/taoexe.mpb: + * bin/MakeProjectCreator/config/taolib.mpb: + + Factored staticflags, includes and libpaths common to TAO based + projects into a taodefaults base project and modified other base + projects in accordance. + + * bin/MakeProjectCreator/config/orbsvcslib.mpb: + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + * bin/MakeProjectCreator/config/taolib_with_idl.mpb: + + Factored common idlflags and after settings into a taoidldefaults + base project and modified other base projects in accordance. + +Wed Jan 7 17:50:13 UTC 2004 Johnny Willemsen + + * apps/gperf/tests/c++-res.exp: + * apps/gperf/tests/c++.gperf: + * apps/gperf/tests/cpp-res.exp: + * apps/gperf/tests/cpp.gperf: + Removed the c++ files and added them with cpp again. The BCB makefile + environment can't handle files with a + in the name. Because we are + using MPC this test is now also build with Borland. + + * apps/gperf/tests/Makefile: + * apps/gperf/tests/Makefile.am: + * apps/gperf/tests/tests.mpc: + Updated these files to reflect the change above. + +Wed Jan 7 10:34:29 2004 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/Options.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added an option that causes MPC to apply the name modifier + (specified by the -name_modifier option) to project names in + addition to workspace and project file names. + +Wed Jan 7 14:04:11 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Corrected the check whether we need to generate LIBFILES or not. + +Wed Jan 7 13:10:01 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Generate the -j option again, thanks for Chris Kohlhoff for pointing + out the need for it. If there are no staticflags or dynamicflags, just + generate nothing instead of an empty line. Don't generate the + INCLUDES anymore because we generate an explicit install target. + Fixed the install target to handle existing directories and generate + it at the end of the file. + +Wed Jan 7 13:03:49 UTC 2004 Johnny Willemsen + + * ace/Unbounded_Set_Ex.h: + Added #include of ace/os_include/os_stddef.h to get size_t. This + fixed compile errors in the Cygwin build + +Wed Jan 7 12:57:13 UTC 2004 Johnny Willemsen + + * performance-tests/UDP/UDP.mpc: + When usign gnuace generate LDLIBS += $(MATHLIB) at the place of + the local marker. This test uses sqrt and some Unix versions + then need to link their mathlib. + +Wed Jan 7 06:24:54 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + + Fixed a bug where $() variables used within Source_Files would + cause an incorrect VPATH to be created in the generated Makefile. + Also, removed an unused code block. + + * bin/MakeProjectCreator/modules/StringProcessor.pm: + + Reimplemented the create_array() method to fix a bug with escaped + double and single quotes and to improve performance. + + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/Version.pm: + + Moved the MPC version number out of Driver.pm and into a new + Version module. + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Parser.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + + Performance related changes. + +Tue Jan 6 17:50:31 2004 Steve Huston + + * ace/TLI.cpp (get_option, set_option): For the XPG5 case, use + a auto_ptr to hold the allocated buff pointer, even though + it's a void*, to compile correctly. Need to cast this to make + it work. + + * include/makeinclude/platform_aix_g++.GNU: Change -ltli_r to -lxti + to use XTI instead of TLI. Also see: + Mon Dec 29 17:09:29 2003 Steve Huston + Removed the versioned_so=0 default - with versioned_so=0, the rule + for making VLIB gets overridden by the one for VSHLIB: shr.o. Not + sure how to remedy this, but by making a versioned_so, it's at + least building it normally. + + * include/makeinclude/platform_g++_common.GNU: Made with_ld=aix not + try to set any versioned_so linker options. The default doesn't work, + and as long as we're linking to archives that contain shr.o, this + is probably fine. If we ever get rtl mode working, this probably + needs to be revisited. + +Tue Jan 6 14:00:12 2004 Steve Huston + + * examples/APG/Logging/Trace.h: + * examples/APG/Logging/Wrap_Macros.cpp: + * examples/APG/Logging/Trace_Return.cpp: The funky __VA_ARGS__ trick + works only on g++ 2.96 and later. + + * examples/APG/Makefile: Re-enabled the Logging directory - with the + fixes above, this should work everywhere now. + + * examples/Misc/test_read_buffer.cpp: Added #include + "ace/OS_NS_unistd.h" to get ACE_OS::write(). + + * examples/performance-tests/SCTP/Options_Manager.cpp: Added #include + "ace/OS_NS_stdlib.h" to get ACE_OS::atoi(). + +Tue Jan 6 13:34:29 2004 Steve Huston + + * examples/APG/ThreadSafety/Atomic_Op.cpp: + * examples/APG/ThreadSafety/RW_Lock.cpp: + * examples/APG/ThreadSafety/TSS.cpp: Added missing template + instantiations. Corrected #pragma instantiate directives. + +Mon Jan 5 17:51:36 2004 Steve Huston + + * ace/Condition_T.cpp: Added #include "ace/OS_NS_Threads.h" to get + ACE_cond_t, and a forward ref for ACE_Time_Value, both so Visual + Age C++ can see these when instantiating templates. + + * ace/Condition_T.cpp: Added #include "ace/Log_Msg.h" to pick up + ACE_ERROR, LM_ERROR, etc. + + * ace/Timer_Queue_Adapters.cpp: Added #include "ace/OS_NS_sys_time.h" + to see ACE_OS::gettimeofday(). + + * ace/Svc_Handler.cpp: + * examples/Timer_Queue/Async_Timer_Queue_Test.cpp: + * examples/Timer_Queue/Reactor_Timer_Queue_Test.cpp: + * examples/Timer_Queue/Thread_Timer_Queue_Test.cpp: Add #include + "ace/OS_NS_sys_time.h" so Visual Age C++ can see + ACE_OS::gettimeofday(). + + * examples/APG/Active_Objects/AO.cpp: + * examples/APG/Active_Objects/AO2.cpp: + * performance-tests/Misc/childbirth_time.cpp: Added #include + "ace/OS_NS_unistd.h" to see ACE_OS::sleep(). + + * examples/APG/Containers/DLList.cpp: + * examples/APG/Containers/Stacks.cpp: + * examples/APG/Containers/Queues.cpp: + * examples/APG/Containers/Array.cpp: + * examples/APG/Containers/Sets.cpp: Added #include "ace/OS_Memory.h" + to see ACE_NEW[_RETURN]. + + * examples/APG/Streams/Answerer.cpp: + * examples/APG/ThreadPools/Futures.cpp: + * examples/APG/ThreadPools/LF_ThreadPool.cpp: + * examples/APG/ThreadPools/ThreadPool.cpp: + * examples/APG/ThreadPools/TP_Reactor.cpp: + * examples/APG/ThreadSafety/Semaphore.cpp: + * examples/Threads/future1.cpp: + * examples/Threads/future2.cpp: Added #include + "ace/OS_NS_string.h" to get ACE_OS::strlen(), et al. + + * examples/Timer_Queue/Driver.cpp: Added missing #includes to make + Visual C++ happy. + + * examples/ASX/Event_Server/Event_Server/Consumer_Router.cpp: + * examples/ASX/Event_Server/Event_Server/Supplier_Router.cpp: + Add #include "ace/OS_NS_string.h" so Visual Age C++ can see + ACE_OS::strdup(). + + * examples/Connection/non_blocking/CPP-acceptor.cpp: Add #include + "ace/OS_NS_unistd.h" to get ACE_OS::write(). + + * examples/Connection/non_blocking/CPP-connector.cpp: Add #include + "ace/OS_NS_stdio.h" so Visual Age C++ can see ACE_OS::rewind(); add + #include "ace/OS_NS_unistd.h" to get ACE_OS::read(). + + * examples/Misc/test_read_buffer.cpp: Add #include "ace/OS_NS_fcntl.h" + so Visual Age C++ can see ACE_OS::open(). + + * examples/Shared_Malloc/test_malloc.cpp: Add #include + "ace/OS_NS_stdio.h" to see ACE_OS::sprintf() and "ace/OS_NS_string.h" + to see ACE_OS::memset(). + + * examples/Shared_Malloc/Options.cpp: Add #include "ace/OS_NS_stdlib.h" + so Visual Age C++ can see ACE_OS::atoi() and exit(). + + * examples/Shared_Malloc/test_multiple_mallocs.cpp: + * examples/Shared_Malloc/test_persistence.cpp: + * performance-tests/TCP/tcp_test.cpp: Add #include + "ace/OS_NS_string.h" to pick up a bunch of ACE_OS string members. + + * examples/Threads/auto_event.cpp: + * examples/Threads/barrier2.cpp: + * examples/Threads/manual_event.cpp: + * examples/Threads/process_manager.cpp: + * examples/Threads/task_three.cpp: + * examples/Threads/task_four.cpp: + * examples/Threads/thread_manager.cpp: + * examples/Threads/thread_pool.cpp: Added #include + "ace/OS_NS_unistd.h" to get sleep(), write(). + + * examples/Threads/reader_writer.cpp: Added #include "ace/Guard_T.h" + and "ace/RW_Mutex.h" so Visual Age C++ can see these classes. + + * examples/Threads/recursive_mutex.cpp: Added #include "ace/Guard_T.h" + and "ace/Recursive_Thread_Mutex.h" so Visual Age C++ can see these + classes. + + * examples/Threads/thread_specific.{h cpp}: Added #include + "ace/Guard_T.h", "ace/OS_NS_stdio.h", "ace/OS_NS_string.h", and + "ace/OS_NS_unistd.h" to satisfy Visual Age C++. + + * performance-tests/Misc/context_switch_time.cpp: Added #include + "ace/OS_NS_stdio.h" to get ACE_OS::perror(). + + * performance-tests/Misc/test_singleton.cpp: Added #include + "ace/Guard_T.h" to get ACE_Guard stuff. + + * performance-tests/Misc/test_naming.cpp: Added #include "ace/ACE.h" + to get ACE::basename(). + + * performance-tests/SCTP/Options_Manager.h" Added #include + "ace/streams.h" to portably get ostream. + + * tests/Message_Queue_Notifications_Test.cpp: + * tests/Process_Strategy_Test.cpp: + * tests/Svc_Handler_Test.cpp: Added #include "ace/Synch_Traits.h", + "ace/Null_Condition.h", and "ace/Null_Mutex.h" so Visual Age C++ + can see the stuff needed for ACE_NULL_SYNCH. + + * tests/Thread_Pool_Test.cpp: Add #include "ace/OS_NS_string.h" so + Visual Age C++ can see ACE_OS::strlen(). + + * tests/Naming_Test.cpp: Add #include "ace/ACE.h" so Visual Age C++ + can see ACE::basename(). + +Mon Jan 5 16:34:18 2004 Steve Huston + + Incorporated these fixes from Riverace's ACE 5.3: + Thu Dec 18 11:07:22 2003 Steve Huston + + * ace/ace_wchar.inl: When converting narrow<->wide on Windows, use + the current ANSI code page for narrow chars, not CP_OEMCP. This + allows 8-bit narrow characters to be converted correctly. + + Wed Dec 10 14:22:16 2003 Steve Huston + + * tests/OS_Test.cpp: Added a test for wide/narrow character string + conversions. + +Mon Jan 5 14:09:34 2004 Douglas C. Schmidt + + * ace/Log_Msg.cpp (log): + * ace/OS_NS_Thread.cpp (to_string): Tandem NSK uses a struct for + pthread_t. Need changes to existing preprocessor #ifs in + Log_Msg.cpp and OS_NS_Thread.cpp to handle this so they now + read + + # elif defined (ACE_MVS) || defined (ACE_TANDEM_T1248_PTHREADS) + + Thanks to Gary Maxey for this fix, which fixes bugid 1704. + + * ace/Handle_Set.cpp: The order of bits in the elements of the + fd_set structure for the Tandem NSK platform is left-to-right rather + than right-to-left like most other platforms except pSoS. Therefore + added + + # if defined (ACE_PSOS) || defined (ACE_TANDEM_NSK_BIT_ORDER) + + to handle this situation. Thanks to Gary Maxey + for reporting this and providing the fix. This fixes bugid 1703. + +Mon Jan 5 12:43:01 2004 Balachandran Natarajan + + * ace/Name_Proxy.cpp: + * ace/Time_Request_Reply.cpp: + + #included "ace/os_include/arpa/os_inet.h" to fix [BUG + 1701]. Thanks to Garey Maxey for reporting + the problem. + +Mon Jan 5 12:30:56 2004 Don Hinton + + * include/makeinclude/rules.lib.GNU: + + Fixed a bug report that caused the generated cpp files to be + added to the archive. Thanks to Werner Buchart + for reporting the problem. + +Mon Jan 5 10:47:51 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/cbx.mpd: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Removed the .\ that preceded file names to allow users to put + absolute paths in MPC files (which isn't recommended for + portability reasons). + +Mon Jan 5 11:02:55 2004 Douglas C. Schmidt + + * ace/OS_NS_Thread.inl: Fixed ACE_OS::event_timedwait() and + ACE_OS::event_wait() so that they use a while loop around the + ACE_OS::cond_[timed]wait() calls to avoid problems with spurious + wakeups, etc. Thanks to John Bossom + for motivating this fix. + +Sun Jan 4 20:40:41 2004 Balachandran Natarajan + + * */Makefile*: + + Release is fast approaching. Updates to the Makefile + dependencies. + +Sun Jan 4 15:12:14 2004 Balachandran Natarajan + + * apps/JAWS3/jaws3/Asynch_IO.cpp: + * apps/JAWS3/jaws3/Concurrency.cpp: + * apps/JAWS3/jaws3/Config_File.cpp: + * apps/JAWS3/jaws3/Datagram.cpp: + * apps/JAWS3/jaws3/Event_Completer.cpp: + * apps/JAWS3/jaws3/Event_Dispatcher.cpp: + * apps/JAWS3/jaws3/FILE.cpp: + * apps/JAWS3/jaws3/IO.cpp: + * apps/JAWS3/jaws3/Makefile: + * apps/JAWS3/jaws3/Options.cpp: + * apps/JAWS3/jaws3/Protocol_Handler.cpp: + * apps/JAWS3/jaws3/Reactive_IO.cpp: + * apps/JAWS3/jaws3/Signal_Task.cpp: + * apps/JAWS3/jaws3/Symbol_Table.cpp: + * apps/JAWS3/jaws3/Synch_IO.cpp: + * apps/JAWS3/jaws3/THYBRID_Concurrency.cpp: + * apps/JAWS3/jaws3/TPOOL_Concurrency.cpp: + * apps/JAWS3/jaws3/TPR_Concurrency.cpp: + * apps/JAWS3/jaws3/Task_Timer.cpp: + * apps/JAWS3/jaws3/Templates.cpp: + * apps/JAWS3/jaws3/Timer.cpp: + * apps/JAWS3/jaws3/Timer_Helpers.cpp: + + Fixed warnings in g++ due to redefinitions. + +Sun Jan 4 09:56:04 2004 Balachandran Natarajan + + * examples/APG/Makefile: + + Removed the Logging example from the builds. The macro + definitions seem to pain a few compilers. + +Sun Jan 4 11:59:46 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + There is no need to pass the libpaths with the -j commandline option + to the linker, the -L flags is only needed. The -j flag specifies + where the object files are located, the -L flag the location of the + lib files. + +Sun Jan 4 10:30:06 UTC 2004 Johnny Willemsen + + * examples/APG/Makefile: + Fixed directory name + +Sun Jan 4 10:18:32 UTC 2004 Johnny Willemsen + + * apps/JAWS3/jaws3/jaws3.mpc: + Set correct dynamicflags. Instead of using ../ as includes, use .. + Borland has problems with ../ and in other places we also use .. + +Sun Jan 4 08:59:43 UTC 2004 Johnny Willemsen + + * examples/APG/ThreadPools/Futures.cpp: + * examples/APG/ThreadPools/ThreadPool.cpp: + Changed return type of thread_id functions from int to ACE_thread_t + + * examples/APG/Signals/SigInfo.cpp: + Cygwin doesn't have unix signals, so added #ifdef for the main to + output an debug message that this example is not supported on this + platform when no unix signals are available. + + * examples/APG/Proactor/HA_Proactive_Status.{h,cpp}: + With Cygwin we don't have aio, so added here also a main that + outputs not supported when this is not available. + +Sun Jan 4 08:28:13 UTC 2004 Johnny Willemsen + + * examples/APG/Reactor/Timer_Cancel.cpp: + Fixed unused variable warning + +Sun Jan 4 08:19:12 UTC 2004 Johnny Willemsen + + * examples/APG/Containers/containers.mpc: + Prefixed the project name Map Manager with the '*' operator to + avoid project name conflicts. Added Id tag + +Sat Jan 3 23:45:38 2004 Balachandran Natarajan + + * examples/APG/Makefile: + + Some tests/examples do need threads and synchronization. Instead + of doing tricks and confusing the reader, let us be good on them + and prevent compilation in single threaded builds. + +Sat Jan 3 23:12:58 2004 Balachandran Natarajan + + * examples/Makefile: + + Added APG directory back in. + +Sat Jan 3 23:10:35 2004 Balachandran Natarajan + + * examples/APG/Proactor/HA_Proactive_Status.cpp: + * examples/APG/Processes/Spawn.cpp: + * examples/APG/Shared_Memory/Hash_Map.cpp: + * examples/APG/Signals/SigInfo.cpp: + * examples/APG/ThreadManagement/State.cpp: + * examples/APG/Threads/Activate.cpp: + * examples/APG/Timers/Alarm.cpp: + * examples/APG/Timers/CB.cpp: + * examples/APG/Timers/PCB.cpp: + * examples/APG/Timers/Task.cpp: + + Fixed more unused variable warnings and #included files that + were needed to compile on SuSE. + +Sat Jan 3 19:31:59 2004 Balachandran Natarajan + + * examples/APG/Reactor/Timer_State_Data.cpp: + * examples/APG/Streams/Answerer.cpp: + * examples/APG/Streams/Util.h: + * examples/APG/ThreadManagement/Priorities.cpp: + * examples/APG/ThreadSafety/Mutex.cpp: + + Fixed more unused variable warnings. + +Sat Jan 3 17:26:39 2004 Steve Huston + + * examples/APG/Naming/Temperature_Monitor2.cpp: + * examples/APG/Shared_Memory/Mem_Map.cpp: + * examples/APG/Streams/RecordingDevice_Text.cpp: + * examples/APG/Timers/Task.cpp: + * examples/APG/Timers/Timers.cpp: Fixed unused/uninitialized warnings. + + * examples/APG/Timers/Upcall.{h cpp}: Changed to match new + timer queue upcall handler API for ACE 5.4. + + * examples/APG/ThreadSafety/Barrier.cpp: Get a random sleep time + using ACE_OS::rand() instead of the thread ID. Thread ID is not + an integral type on some platforms. + +Sat Jan 3 14:08:13 2004 Balachandran Natarajan + + * bin/tao_other_tests.lst: + + Added the ior_corbaloc test to be run in the daily builds. + +Sat Jan 3 11:02:32 2004 Balachandran Natarajan + + * examples/Makefile: + + Removed ASG for the timebeing from the daily builds. I want to + seperate the chaff from wheat and the noise form this is making + things hard. Will let Steve know about this. + +Sat Jan 3 16:14:13 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Removed the usage of IDL_DIR. There where problems when generating + Borland makefiles for projects where the idl file is in a different + directory than the project file. In that case the IDL_DIR should + not be . but the directory where the idl files are. Because this is + a hard thing to do, just removed IDL_DIR and take the path of the + IDL file that is in the MPC file. This way Borland works just like the + other environments and this way we can also handle IDL files in + other directories. + +Sat Jan 3 13:11:13 UTC 2004 Johnny Willemsen + + Added needed includes to compile the APG examples using the Borland + compiler. + + * examples/APG/Config/ARGV_Example.cpp: + * examples/APG/Config/Get_Opt.cpp: + * examples/APG/Config/Get_Opt_Long.cpp: + Added #include "ace/OS_NS_string.h" to get ACE_OS::strcmp and + ACE_OS::strncmp. + + * examples/APG/Naming/Naming_Context.h: + * examples/APG/Processes/Spawn.cpp: + * examples/APG/Shared_Memory/Malloc.cpp + Added #include "ace/OS_NS_stdio.h" to get ACE_OS::sprintf. + + * examples/APG/Signals/SigAction.cpp: + * examples/APG/Signals/SigGuard.cpp: + * examples/APG/Signals/SigHandler.cpp: + * examples/APG/Signals/SigHandlers.cpp: + * examples/APG/ThreadManagement/Coop_Cancel.cpp: + * examples/APG/ThreadManagement/Signals.cpp: + * examples/APG/ThreadManagement/Signals2.cpp: + * examples/APG/Threads/Activate.cpp: + Added #include "ace/OS_NS_unistd.h" to get ACE_OS::sleep and + ACE_OS::getpid. + + * examples/APG/Sockets/Basic_Robust.cpp: + * examples/APG/Sockets/Server.cpp: + Added #include "ace/OS_NS_errno.h" to get ACE_OS::lasterrror. + +Fri Jan 2 18:07:31 2004 Steve Huston + + * examples/APG/Active_Objects/AO.cpp: + * examples/APG/Active_Objects/AO2.cpp: + * examples/APG/Containers/Stacks.cpp: + * examples/APG/Containers/Queues.cpp: + * examples/APG/Containers/Array.cpp: + * examples/APG/Containers/Sets.cpp: + * examples/APG/Containers/Hash_Map_Hash.cpp: + * examples/APG/Containers/Allocator.cpp: + * examples/APG/Proactor/HA_Proactive_Status.cpp: + * examples/APG/Reactor/Client.cpp: + * examples/APG/Shared_Memory/Hash_Map.cpp: + * examples/APG/Shared_Memory/Pool_Growth.cpp: + * examples/APG/Threads/Condition_Variables.cpp: + * examples/APG/Threads/Message_Queue.cpp: + * examples/APG/ThreadManagement/Start_Hook.cpp: + * examples/APG/ThreadPools/Futures.cpp: + * examples/APG/ThreadPools/LF_ThreadPool.cpp: + * examples/APG/ThreadPools/ThreadPool.cpp: Added missing template + instantiations. Corrected #pragma instantiate directives. + + * examples/APG/Config/ARGV_Example.cpp: + * examples/APG/Reactor/HAStatus.cpp: + * examples/APG/Reactor/HAStatus-AC.cpp: Added #include + "ace/os_include/os_netdb.h" to get MAXHOSTNAMELEN. + + * examples/APG/Naming/Graphable_Element.h: Corrected include for + list<> to be , not "list". + + * examples/APG/Naming/Graphable_Element.cpp: Removed this file. It + only had template instantiations in it, for list<> and friends. + We're not even going to try this with explicit instantiation. + + * examples/APG/Shared_Memory/Record.h: Changed #include "ace/OS.h" + to "ace/OS_NS_string.h". + + * examples/APG/Signals/SigAction.cpp: Account for platforms that + require the signal handler to be extern "C". + + * examples/APG/Makefile: Only build the Naming directory if using + implicit template instantiation. See above for rationale. + +Fri Jan 2 13:00:20 2004 Chad Elliott + + * examples/APG/Sockets/sockets.mpc: + + Prefixed the project name with the '*' operator to avoid project + name conflicts. + +Fri Jan 2 08:56:04 2004 Chad Elliott + + * examples/APG/Config/config.mpc: + * examples/APG/Containers/containers.mpc: + * examples/APG/Reactor/reactor.mpc: + * examples/APG/Shared_Memory/shared_memory.mpc: + * examples/APG/Svc_Config/svc_config.mpc: + + Changed instances of dllflags to dynamicflags and added the '*' + operator to some of the project names to remove duplicates. + +Fri Jan 02 08:08:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Also overrule PASCALDIR and UNICODEDIR + +Thu Jan 01 20:25:22 2004 Balachandran Natarajan + + * tests/TSS_Static_Test.dsp: + + A new project file for TSS_Static_Test. + + * tests/tests.dsw: + + Added the new dsp file into the project. + +Thu Jan 1 17:56:31 2004 Steve Huston + + * ace/OS_NS_sys_socket.inl (closesocket): On HP-UX, use + shutdown() rather than close() to close a socket. shutdown() + will abort an in-progress operation in another thread, while + close() won't. This fixes the hang in the + MT_Reference_Counted_Event_Handler_Test and will make the Proactor + stuff more easy to work with as well. + + * ace/Time_Value.h: Don't include (or ) directly; + use ace/os_include/sys/os_time.h to get what's needed. This + prevents HP-UX from pulling in before and + picking up the wrong declaration for select(). Fixes gcc builds. + + * ace/Name_Space.h: Replace forward declarations of ACE_Unbounded_Set + with #include "ace/Unbounded_Set.h". Needed to generate template + specializations. + + * examples/APG/Logging/Callback-2.h: + * examples/APG/Logging/LogManager.h: + * examples/APG/Naming/Thermometer.h: + * examples/APG/Naming/Temperature_Monitor.cpp: + * examples/APG/Naming/Temperature_Monitor2.cpp: + * examples/APG/Proactor/HA_Proactive_Status.h: + * examples/APG/Processes/Process_Manager_Death.cpp: + * examples/APG/Reactor/HAStatus.cpp: + * examples/APG/Reactor/Reschedule.cpp: + * examples/APG/Reactor/Schedule_Timers.cpp: + * examples/APG/Reactor/Timer_Cancel.cpp: + * examples/APG/Reactor/Timer_State_Data.cpp: + * examples/APG/Shared_Memory/Malloc.cpp: + * examples/APG/Shared_Memory/PI_Malloc.cpp: + * examples/APG/Signals/SigInfo.cpp: + * examples/APG/Streams/RecordingDevice.h: + * examples/APG/ThreadManagement/Coop_Cancel.cpp: + * examples/APG/ThreadPools/Futures.cpp: + * examples/APG/ThreadPools/Task_ThreadPool.cpp: + * examples/APG/ThreadPools/ThreadPool.cpp: + * examples/APG/ThreadSafety/Barrier.cpp: + Added #includes for "ace/OS_NS_*.h" as needed to convert from + 5.3 OS.h usage to refactored OS_NS_*.h headers. Added missing + header includes that worked by accident in ACE 5.3. + + * examples/APG/Timers/Upcall.h: Added registration () method that + is now required for a timer queue upcall functor class. This is + also new at ACE 5.4. + +Thu Jan 1 16:23:17 2004 Steve Huston + + * bin/make_release: Add VC6 to files that generate_makefiles() makes. + +Thu Jan 1 15:20:30 2004 Steve Huston + + * examples/Makefile: + * examples/APG: Added all examples from "The ACE Programmer's Guide". + +Thu Jan 1 20:28:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/outputdir.bor: + Object files are always placed in subdirectories dependent on the + configuration + +Thu Jan 1 17:59:32 UTC 2004 Johnny Willemsen + + * ace/OS_NS_Thread.h: + Removed not needed doxygen close group tag + +Thu Jan 1 17:23:44 UTC 2004 Don Hinton + + * include/makeinclude/rules.local.GNU: + Added CLEANUP_BIN to the list of objects cleaned up during a + clean, since they aren't always added to SRC. They get cleaned + when you do a realclean since it removes the .obj directory, but + this allows you to use clean correctly too. + + * include/makeinclude/wrapper_macros.GNU: + Make sure that all appropriate variables are added to the + cleanup targets, e.g., we used to test for LIB, then LIB2, then + LIB_UNCHECKED in that order, but quit testing once we found + one. Now, we test them all and add them. This fixes a bug with + realclean discovered because MPC defines LIB in terms of + LIB_UNCHECKED, then sets LIB= if sufficient components weren't + built, but only after we already set CLEANUP_LIB=$LIB. Which + meant we ended up not cleaning anything. Thanks to Bala for + noticing the problem and motivating the fix. + +Thu Jan 1 16:00:11 UTC 2004 Johnny Willemsen + + * ASNMP/asnmp/asn1.cpp: + Removed not needed ;. This is the last fix for bugzilla [BUGID 1677] + +Thu Jan 1 09:51:05 2004 Balachandran Natarajan + + * bin/tao_orb_tests.lst: + + Added smart proxies test to the daily builds. + +Thu Jan 1 00:35:21 2004 Balachandran Natarajan + + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.cpp: + + Fixed a warning in Solaris 8 builds. + +Thu Jan 1 00:00:00 2004 Douglas C. Schmidt + + * Happy New Year! Let's hope that 2004 is a safe and prosperous + year for everyone. + +Wed Dec 31 21:57:08 2003 Kobi Cohen-Arazi + + * ace/Base_Thread_Adapter.h: + * ace/Base_Thread_Adapter.inl: + * ace/Base_Thread_Adapter.cpp: + + Added #include "os_include/sys/os_time.h" and + data member itimerval itimer_ wrapped with ACE_USES_GPROF. + + This data member will hold the thread profiling timer. + Added Accessor function to itimer_ data member. + (ACE_Base_Thread_Adapter) Constructor calls getitimer. + (ace_thread_adapter) Calls setitimer. + Both are wrapped with ACE_USES_GPROF + + * ace/README: + Added Useful information about ACE_USES_GPROF macro. + That macro enable profiling with gprof in a multithreaded + application. + +Wed Dec 31 13:13:11 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Optimized the implementation of the -exclude option to correctly + avoid searching for files located in excluded directories. + +Wed Dec 31 07:13:25 2003 Chad Elliott + + * ace/TMCast/MTQueue.hpp: + + Added #include for ace/os_include/sys/os_types.h to get the + definition of size_t and changed references to std::size_t to + size_t. + + * ace/config-win32-msvc.h: + + Added a #pragma waring to disable warning #4800 which is a + conversion of integer to boolean warning. + +Wed Dec 31 06:46:36 2003 Chad Elliott + + * apps/JAWS3/jaws3.mwc: + + Removed this file. It is not necessary for two reasons. 1) The + jaws3 project will be part of the "apps" workspace. 2) If a + workspace with just jaws3 is desired, one could run mwc.pl in the + apps/JAWS3 directory to obtain the same results as the removed + mwc file. + +Wed Dec 31 12:30:11 UTC 2003 Johnny Willemsen + + * examples/Export/dll.h: + Removed not needed ; to fix Tru64 warning + +Tue Dec 30 18:14:39 2003 Steve Huston + + * ace/OS_TLI.inl (t_alloc): For XPG5, the t_alloc() return type + changed from char* to void*, so using ACE_OSCALL_RETURN doesn't + work. Use ACE_OSCALL to control the type and return more closely. + + * ace/Timer_List_T.cpp: Add #include "ace/Guard_T.h to get ACE_Guard. + + * apps/Gateway/Gateway/Gateway.cpp: Added #include "ace/OS_NS_stdio.h" + so Visual Age C++ can see ACE_OS::sprintf(). + + * apps/Gateway/Gateway/gatewayd.cpp: Add #include "ace/OS_NS_unistd.h" + so Visual Age C++ can see ACE_OS::access(). + + * apps/Gateway/Peer/Options.cpp: Added #include "ace/OS_NS_stdlib.h" + so Visual Age C++ can see ACE_OS::exit(), getenv(), and atoi(). + Added #include "ace/OS_Memory.h" to get ACE_NEW_RETURN. + + * apps/Gateway/Peer/Peer.cpp: Added #include "ace/OS_NS_stdio.h" + so Visual Age C++ can see ACE_OS::sprintf() and rewind(). Added + "ace/OS_NS_string.h" to get ACE_OS::strdup(). + + * apps/Gateway/Peer/Peer.h: Added #include "ace/Null_Condition.h" + and "ace/Null_Mutex.h" to see the classes invoked via NULL_SYNCH + used in the ACE_Svc_Handler template invocation. + + * apps/drwho/Options.cpp: Added #include "ace/OS_NS_stdlib.h" + so Visual Age C++ can see ACE_OS::exit(), and atoi(). + + * apps/drwho/File_Manager.cpp: Added #include "ace/OS_NS_stdio.h" + so Visual Age C++ can see ACE_OS::tempnam(). + + * apps/gperf/src/Options.cpp: Added #include "ace/OS_NS_stdlib.h" + so Visual Age C++ can see ACE_OS::atoi(). + + * examples/ASX/CCM_App/SC_Server.cpp: Add #include "ace/OS_NS_unistd.h" + so Visual Age C++ can see ACE_OS::read(). + + * examples/ASX/Event_Server/Event_Server/Consumer_Router.cpp: + * examples/ASX/Event_Server/Event_Server/Supplier_Router.cpp: + Add #include "ace/OS_NS_stdio.h" so Visual Age C++ can see + ACE_OS::sprintf(). + + * examples/ASX/Event_Server/Event_Server/Event_Analyzer.cpp: + Add #include "ace/OS_NS_string.h" so Visual Age C++ can see + ACE_OS::strdup(). + + * examples/ASX/Event_Server/Transceiver/transceiver.cpp: + Add #include "ace/OS_NS_string.h" so Visual Age C++ can see + ACE_OS::strcmp(). + + * examples/ASX/Message_Queue/buffer_stream.cpp: Added + #include "ace/OS_NS_string.h" to find ACE_OS::strncpy(), + #include "ace/OS_NS_unistd.h" to find ACE_OS::read() and write(), and + #include "ace/OS_NS_stdio.h" to find ACE_OS::sprintf(). + + * examples/ASX/Message_Queue/priority_buffer.cpp: Added + #include "ace/OS_NS_stdio.h" to get ACE_OS::puts(). + + * examples/ASX/UPIPE_Event_Server/Consumer_Router.cpp: + * examples/ASX/UPIPE_Event_Server/Supplier_Router.cpp: + Add #include "ace/OS_NS_stdio.h" so Visual Age C++ can see + ACE_OS::sprintf() and "ace/OS_NS_string.h" to see ACE_OS::strdup(). + + * examples/ASX/UPIPE_Event_Server/Event_Analyzer.cpp: + Add #include "ace/OS_NS_string.h" so Visual Age C++ can see + ACE_OS::strdup(). + + * examples/C++NPv2/Service_Reporter.cpp: Add #include + "ace/OS_NS_string.h" so Visual Age C++ can find ACE_OS::strcat() + and strlen(). + + * examples/C++NPv2/Client_Logging_Daemon.cpp: Add #include + "ace/OS_NS_sys_time.h" to find ACE_OS::gettimeofday(). + + * examples/C++NPv2/TP_Logging_Server.cpp: Added #include + "ace/OS_Memory.h" to see ACE_NEW_RETURN and "ace/Guard_T.h" to + get the ACE_GUARD stuff. + + * examples/C++NPv2/TP_Logging_Server.h: Added #include + "ace/Synch.h" to see whatever ACE_SYNCH needs. + + * examples/C++NPv2/SR_Configurable_Logging_Server.cpp: Added #include + "ace/OS_Memory.h" to see ACE_NEW_RETURN. + + * examples/C++NPv2/display_logfile.cpp: Add #include + "ace/OS_NS_string.h" to see ACE_OS::strlen() and strnlen(). + + * examples/Connection/misc/test_upipe.h: Added + #include "ace/OS_NS_unistd.h" to find ACE_OS::read(). + + * examples/IPC_SAP/TLI_SAP/ftp-server.cpp: Add #include + "ace/OS_NS_stdio.h" to find ACE_OS::perror(). + + * examples/IPC_SAP/TLI_SAP/db-server.cpp: Add #include + "ace/OS_NS_stdio.h" to find ACE_OS::sprintf(). + + * examples/IPC_SAP/UPIPE_SAP/ex1.cpp: Add #include "ace/OS_NS_string.h" + to find ACE_OS::strcpy(). + + * examples/Logger/Acceptor-server/server_loggerd.cpp: Added #include + "ace/Null_Mutex.h" and "ace/Test_and_Set.h" to get needed class defs. + + * examples/Map_Manager/test_hash_map_manager.cpp: Added #include + "ace/Synch.h" to get whatever ACE_SYNCH is. + + * examples/Naming/test_open.cpp: + * examples/Naming/test_writers.cpp: Added #include "ace/OS_NS_unistd.h" + to get ACE_OS::getpid(). + + * examples/Reactor/Dgram/CODgram.cpp: Added #include + "ace/OS_NS_string.h" to get ACE_OS::strcpy(). + + * examples/Reactor/Dgram/Dgram.cpp: Added #include "ace/OS_NS_string.h" + to get ACE_OS::strcpy() and "ace/OS_NS_unistd.h" to get sleep(). + + * examples/Reactor/Misc/notification.cpp: Added #include + "ace/OS_NS_unistd.h" to get ACE_OS::read() and sleep(). + + * examples/Reactor/Misc/test_reactors.cpp: Add #include + "ace/Recursive_Thread_Mutex.h" to get ACE_Recursive_Thread_Mutex def. + + * examples/Reactor/Misc/test_signals_2.cpp: Add #include "ace/Signal.h" + to see ACE_Sig_Handlers. + + * examples/Reactor/Misc/test_timer_queue.cpp: Add #include + "ace/OS_NS_sys_time.h" to get ACE_OS::gettimeofday(). + + * examples/Reactor/Multicast/client.cpp: Add #include "ace/OS_Memory.h" + to get ACE_NEW_RETURN and "ace/OS_NS_stdlib.h" to get ACE_OS::atoi(). + + * examples/Reactor/Ntalker/ntalker.cpp: Add #include + "ace/OS_NS_unistd.h" to get ACE_OS::read(). + + * examples/Service_Configurator/IPC-tests/client/remote_thr_stream_client.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_dgram_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/broadcast_client_test.cpp: + Add #include "ace/OS_NS_stdlib.h" to get ACE_OS::atoi() and exit(). + + * examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.i: + * examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.i: + * examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.i: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.i: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.i: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.i: + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.i: + Add #include "ace/OS_NS_string.h" to get ACE_OS::strdup() and + strncpy(). + + * examples/Service_Configurator/IPC-tests/server/Handle_R_Dgram.i: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Broadcast.i: + Add #include "ace/OS_NS_string.h" to get ACE_OS::strdup() and + strncpy(); "ace/OS_NS_unistd.h" to get ACE_OS::read()/write(). + + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp: + Add #include "ace/OS_NS_stdio.h" to get ACE_OS::puts() and sprintf(), + "ace/OS_NS_string.h" and "ace/OS_NS_unistd.h". + + * examples/Service_Configurator/IPC-tests/server/server_test.cpp: Added + #include "ace/OS_NS_unistd.h" to get ACE_OS::getpid(). + + * include/makeinclude/platform_aix_ibm.GNU: Changed -ltli_r to -lxti; + Matches change to ACE_HAS_XTI in: + Mon Dec 29 17:09:29 2003 Steve Huston + +Tue Dec 30 15:21:16 2003 Balachandran Natarajan + + * ace/INET_Addr.cpp (set_interface): + + Check for multicast link local in addition to unicast link local + before calling a if_nametoindex (). Thanks to Andre Kostur + for providing the patch. + +Tue Dec 30 13:02:09 2003 Chad Elliott + + * ace/ace.mpc: + + Added the os_include, os_include/arpa, os_include/net, + os_include/netinet and os_include/sys directories to the + Header_Files section. + + * bin/MakeProjectCreator/modules/Parser.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Added code to get allow templates to get the current working + directory and the directory relative to the current working + directory with the relative definitions. + + * bin/MakeProjectCreator/templates/bor.mpd: + + Updated the Borland template to put the executables and libraries + in locations consistent with all other MPC generated projects. + + * include/makeinclude/build_dll.bor: + * include/makeinclude/build_example.bor: + * include/makeinclude/build_exe.bor: + * include/makeinclude/build_lib.bor: + * include/makeinclude/install.bor: + * include/makeinclude/outputdir.bor: + + Modified these to work with the new Borland template. The + defaults have not been changed and the changes that were made + should be backward compatible with the existing Borland + makefiles. + +Tue Dec 30 15:16:02 UTC 2003 Don Hinton + + * *.mpb: + * bin/MakeProjectCreator/templates/*.mpt: + Added $ID tag to quash fuzz errors. + +Tue Dec 30 08:38:59 2003 Chad Elliott + + * ace/ace.mpc: + + Removed Refcounted_Auto_Ptr.cpp from the Template_Files. + Apparently there was never a Refcounted_Auto_Ptr.cpp. + +Mon Dec 29 17:09:29 2003 Steve Huston + + * ace/TLI.cpp: Add #include "ace/OS_TLI.h" to see the ACE_OS::t_* + methods and LOCALNAME/REMOTENAME. In get_option() and set_option(), + decide on use of auto_ptr vs. ACE_Auto_Array_Ptr based on the XPG + level currently being used. XPG5 changed the buf member from + char* to void*. + + * ace/config-aix-4.x.h: Removed ACE_HAS_TIUSER_H and ACE_HAS_TLI; + added ACE_HAS_XTI. Go with the more advanced capabilities. + + * include/makeinclude/platform_aix_ibm.GNU: Set the default value + for 'inline' based on 'debug' - if debug is on, inline off, and + vice-versa. + + * include/makeinclude/wrapper_macros.GNU: Corrected the "inline ?=" + line to set the default to 1 (instead of blank). This enables + inlining unless platform_macros.GNU sets it explicitly. + +Mon Dec 29 14:48:30 2003 Balachandran Natarajan + + * bin/tao_other_tests.lst: + + Do not run reference counted servant test in the minimum corba + builds. + +Mon Dec 29 12:48:22 2003 Balachandran Natarajan + + * bin/tao_other_tests.lst: + + Reduced iterations for a few tests. + +Mon Dec 29 18:28:54 UTC 2003 Don Hinton + + * etc/ace.doxygen: + Also remove the final '/' from STRIP_FROM_PATH, i.e., + STRIP_FROM_PATH=$(ACE_ROOT)/, so that the file list will look + like this, ace/, instead of /ace/. + +Mon Dec 29 11:20:50 2003 Balachandran Natarajan + + * bin/tao_orb_tests.lst: + + Added Bug_1670_Regression to the daily builds. + +Mon Dec 29 10:57:23 2003 Balachandran Natarajan + + * bin/tao_orb_tests.lst: + + Added Bug_1568_Regression to the daily builds. + +Mon Dec 29 08:48:40 2003 Chad Elliott + + Committing changes originally made by Trevor Fields + on TAO 1.3a. + + * bin/MakeProjectCreator/config/dsnotifylogadmin.mpb: + + Changed the inheritance to correspond with what the + DsNotifyLogAdmin library uses. + + * bin/MakeProjectCreator/config/openssl.mpb: + + Added $(SSL_ROOT)/out32 to the libpaths to pick up static + OpenSSL libraries on Windows. + + * bin/MakeProjectCreator/config/portablegroup.mpb: + + Added inheritance of minimum_corba. + +Sun Dec 28 22:36:22 2003 Balachandran Natarajan + + * bin/tao_orb_tests.lst: + + Added Bug_1693_Test to the daily builds. + +Sun Dec 28 15:46:43 UTC 2003 Johnny Willemsen + + * etc/*.doxygen: + Removed CGI_NAME, CGI_URL, DOC_URL, DOC_ABSPATH, BIN_ABSPATH and + EXT_DOC_PATHS from the doxygen config files. These options are no + longer available because doxygen now uses PHP for search pages + instead of CGI. The search page is disabled at this moment. + +Sun Dec 28 15:09:34 UTC 2003 Don Hinton + + * etc/ace.doxygen: + Changed CASE_SENSE_NAMES=NO in order to fix problems on systems + without case sensitive file systems; doxygen adds enough of the + path to make each filename unique. Enabled SHORT_NAMES to make + sure names don't grow too long. + + Set FULL_PATH_NAMES=YES and STRIP_FROM_PATH=$(ACE_ROOT) to avoid + duplicate filenames on the file list page. If this works out, we + may change some of the others also. + +Sun Dec 28 11:38:43 UTC 2003 Johnny Willemsen + + * ace/Message_Queue.h: + Use doxygen style of comments for deprecated enum members so that + they appear on the doxygen deprecated page. + +Sun Dec 28 10:44:13 UTC 2003 Johnny Willemsen + + * ace/OS_NS_stdio.cpp: + On Tru64 getchar() is a macro which expands to fgetc. fgetc exists + in the global and in the ACE_OS namespace, so on Tru64 use + ::getchar() which then expands to ::fgetc(). This looks to work on + the Tru64 box I am testing on. + +Sat Dec 27 12:55:45 UTC 2003 Johnny Willemsen + + * ace/SOCK_Dgram_Mcast.h: + Added @deprecated to the deprecated methods in this file so that + they appear on the doxygen deprecated page. + +Sat Dec 27 10:32:11 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + Re-added setting of GCCLIB_DIR for SIMNT which I removed by accident. + Thanks to Thomas Lockhart for + pointing this out. + +Sat Dec 27 10:22:13 UTC 2003 Johnny Willemsen + + * bin/fuzz.pl: + Also check for Id tag in .GNU files. + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + * include/makeinclude/platform_linux_borland.GNU: + * include/makeinclude/platform_integrity_ghs.GNU: + Added missing Id tag + +Fri Dec 26 17:29:29 2003 Steve Huston + + * m4/ace.m4: Uncommented the AM_CONDITIONAL for BUILD_SSL so + explicit sets of --with-ssl work. + +Fri Dec 26 16:53:18 2003 Steve Huston + + * m4/ace.m4: Don't restrict --enable-rtti to Solaris. AIX Visual Age + C++ needs to be able to turn this on also. Also changed the default + to yes, believing I saw a need for RTTI in TAO recently. + + * m4/compiler.m4: For AIX Visual Age C++, if rtti is desired, add + -qrtti to CXXFLAGS. + + * ace/OS_NS_Thread.inl: Added #include "ace/OS_NS_sys_mman.h" to see + ACE_OS::shm_unlink() and ACE_OS::shm_open(), needed when + ACE_LACKS_NAMED_POSIX_SEM is defined. + + * ace/Timer_Hash_T.cpp: + * ace/TImer_Wheel_T.cpp: Added #include "ace/OS_NS_sys_time.h" so + Visual Age C++ can see ACE_OS::gettimeofday(), and "ace/Guard_T.h" + so Visual Age C++ can see ACE_Guard classes. + + * tests/test_config.h: + * tests/Signal_Test.cpp: + * tests/Thread_Pool_Test.cpp: Added #include "ace/OS_NS_stdio.h" so + Visual Age C++ sees ACE_OS::sprintf(). + + * tests/Message_Block_Test.cpp: Added #include "ace/OS_NS_string.h" + so Visual Age C++ sees ACE_OS::strcmp() and "ace/OS_NS_stdio.h" + so Visual Age C++ sees ACE_OS::sprintf(). + + * tests/Message_Queue_Test.cpp: + * tests/Upgradable_RW_Test.cpp: Added #include "ace/OS_NS_sys_time.h" + so Visual Age C++ can see ACE_OS::gettimeofday() and + "ace/OS_NS_stdio.h" so it can see ACE_OS::sprintf(). + + * tests/Message_Queue_Test_Ex.cpp: + * tests/Recursive_Condition_Bug_Test.cpp: + * tests/Thread_Manager_Test.cpp: Added #include + "ace/OS_NS_sys_time.h" so Visual Age C++ can see + ACE_OS::gettimeofday(). + + * tests/Message_Queue_Notifications_Test.cpp: + * tests/Reactor_Dispatch_Order_Test.cpp: + * tests/SString_Test.cpp: + * tests/Svc_Handler_Test.cpp: Added #include "ace/OS_NS_string.h" so + Visual Age C++ sees ACE_OS::strlen(). + + * tests/Multicast_Test.cpp: Added #include "ace/Min_Max.h" so + Visual Age C++ can see ACE_MIN and ACE_MAX. Added #include + "ace/OS_NS_sys_time.h" so Visual Age C++ can see + ACE_OS::gettimeofday() and "ace/OS_NS_stdio.h" so it can see + ACE_OS::sprintf(). + + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + * tests/Reactor_Registration_Test.cpp: + * tests/Reference_Counted_Event_Handler_Test.cpp: Added #include + "ace/Reactor.h" so Visual Age C++ sees ACE_Reactor. + + * tests/MT_Reference_Counted_Notify_Test.cpp: + * tests/Timer_Cancellation_Test.cpp: Added #include + "ace/Reactor.h" so Visual Age C++ sees ACE_Reactor and + "ace/OS_NS_unistd.h" so Visual Age C++ sees ACE_OS::sleep(). + + * tests/Naming_Test.cpp: + * tests/Priority_Task_Test.cpp: + * tests/Thread_Pool_Reactor_Test.cpp: + * tests/Thread_Pool_Reactor_Resume_Test.cpp: Added #include + "ace/OS_NS_string.h" so Visual Age C++ can see ACE_OS::strcmp(). + + * tests/Process_Manager_Test.cpp: + * tests/Reactor_Notify_Test.cpp: Added #include "ace/OS_NS_unistd.h" + so Visual Age C++ can see ACE_OS::sleep(). + + * tests/Process_Strategy_Test.cpp: Added #include "ace/OS_NS_string.h" + so Visual Age C++ can see ACE_OS::strcpy(), strcat(), strlen(). + + * tests/Reader_Writer_Test.cpp: Added #include "ace/Guard_T.h" and + "ace/RW_Thread_Mutex.h" so Visual Age C++ can see ACE_Guard and + ACE_RW_Thread_Mutex classes. + + * tests/Recursive_Condition_Test.cpp: Added #include + "ace/OS_NS_sys_time.h" so Visual Age C++ sees ACE_OS::gettimeofday() + and "ace/OS_NS_unistd.h" so Visual Age C++ sees ACE_OS::sleep(). + + * tests/Service_Config_Test.cpp: Added #include "ace/OS_NS_stdio.h" so + Visual Age C++ can see ACE_OS::fprintf(). + + * tests/Time_Service_Test.cpp: Added #include "ace/OS_NS_string.h" + so Visual Age C++ sees ACE_OS::strcat(). + + * tests/TP_Reactor_Test.cpp: Added #include "ace/OS_NS_stdio.h" so + Visual Age C++ sees ACE_OS::sprintf() and "ace/OS_NS_string.h" so + Visual Age C++ sees ACE_OS::strlen(). + + * tests/TSS_Test.cpp: + * tests/TSS_Test_Errno.h: + * tests/Thread_Mutex_Test.cpp: Added #include "ace/Guard_T.h" so Visual + Age C++ can see ACE_Guard stuff and "ace/Thread_Mutex.h" to see the + ACE_Thread_Mutex class. + +Fri Dec 26 12:30:55 2003 Balachandran Natarajan + + * bin/MakeProjectCreator/config/taoexe.mpb: + * bin/MakeProjectCreator/config/taolib_with_idl.mpb: + + We are forcing -Sc to the users. Though this is generally good, + but it breaks some of the tests in TAO that uses the TIE + classes. Just removing -Sc so that we have the minimal number + of options out here. + +Fri Dec 26 18:22:07 UTC 2003 Don Hinton + + * include/makeinclude/all_in_one.GNU: + Test CLEANUP_BIN, etc., instead of BIN to determine whether or + not to include rules.bin.GNU, etc. These file define the + CLEANUP_INSTALL variables needed to properly do a realclean. + This is needed because Makefiles might use BIN2 or BIN_UNCHECKED + instead of BIN, but still need to be cleaned up. + + * include/makeinclude/rules.lib.GNU: + * include/makeinclude/rules.local.GNU: + Added '*' to end of lib name so that *all* versions of a lib are + cleaned up, not just the current one. + + * include/makeinclude/rules.local.GNU: + No need to test to see if a variable is defined in order to + define it, just use ?= which only sets a variable if not yet + defined. + +Thu Dec 25 18:03:28 2003 Balachandran Natarajan + + * bin/MakeProjectCreator/config/ftorbutils.mpb: + + Removed the dependency on CosNaming. + +Thu Dec 25 00:00:00 2003 Douglas C. Schmidt + + * Merry Christmas!!! + +Wed Dec 24 17:10:45 UTC 2003 Don Hinton + + * bin/fuzz.pl: + Modified the regular expression for matching Makefiles to better + filter out unwanted files. + + * examples/C++NPv1/Makefile.Iterative_Logging_Server: + * examples/C++NPv1/Makefile.Logging_Client: + * examples/C++NPv1/Makefile.Process_Per_Connection_Logging_Server: + * examples/C++NPv1/Makefile.RT_Thread_Per_Connection_Logging_Server: + * examples/C++NPv1/Makefile.Reactive_Logging_Server: + * examples/C++NPv1/Makefile.Reactive_Logging_Server_Ex: + * examples/C++NPv1/Makefile.Thread_Per_Connection_Logging_Server: + * examples/C++NPv2/Makefile.AC_CLD: + * examples/C++NPv2/Makefile.AIO_CLD: + * examples/C++NPv2/Makefile.CLD: + * examples/C++NPv2/Makefile.Configurable_Logging_Server: + * examples/C++NPv2/Makefile.Reactor_Logging_Server: + * examples/C++NPv2/Makefile.SLD: + * examples/C++NPv2/Makefile.SLDex: + * examples/C++NPv2/Makefile.SR_Configurable_Logging_Server: + * examples/C++NPv2/Makefile.Select_Reactor_Logging_Server: + * examples/C++NPv2/Makefile.TPCLS: + * examples/C++NPv2/Makefile.TPLS: + * examples/C++NPv2/Makefile.TP_Reactor_Logging_Server: + * examples/C++NPv2/Makefile.display_logfile: + * examples/DLL/Makefile.Newsweek: + * examples/DLL/Makefile.Today: + * examples/Service_Configurator/Misc/Makefile.Timer: + * examples/Service_Configurator/Misc/Makefile.main: + * examples/Timer_Queue/Makefile.TQTD: + * examples/Timer_Queue/Makefile.main: + * include/makeinclude/Makefile.rtems: + * performance-tests/Synch-Benchmarks/Makefile.driver: + * performance-tests/Synch-Benchmarks/Makefile.synch_tests: + Fixed Fuzz errors. + +Wed Dec 24 12:51:23 UTC 2003 Johnny Willemsen + + * apps/Gateway/Gateway/Config_Files.cpp: + * apps/Gateway/Gateway/File_Parser.cpp: + * apps/Gateway/Gateway/File_Parser.h: + * apps/Gateway/Gateway/Gateway.cpp: + Added RT_ to the members of the Return_Type enum. Tru64 has a + define SUCCESS and this clashed with the enum member SUCCESS. + +Wed Dec 24 12:35:41 UTC 2003 Johnny Willemsen + + * ace/config-osf1-4.0.h: + Removed ACE_HAS_TLI and ACE_HAS_TLI_PROTOTYPES. Added ACE_HAS_XTI. + This fixes compile errors on Tru64. + + * include/makeinclude/platform_osf1_4.x_cxx.GNU: + * include/makeinclude/platform_osf1_4.x_g++.GNU: + * include/makeinclude/platform_osf1_4.x_kcc.GNU: + * include/makeinclude/platform_osf1_4.x_rcc.GNU: + Link with xti library instead of tli + +Wed Dec 24 09:54:43 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + Add discussion of conventions to be used to identify shipped + versions of VxWorks. Allow implicit templates using the + templates variable. Default continues to be "explicit". + Clean up some references to obsolete and unsupported versions + of VxWorks compilers. Use explicit paths to compilers and + utilities, and remove manipulation of PATH. + Set the default version of VxWorks to 5.5.1, as shipped with + Tornado 2.2 on PPC604. + Removed -traditional from compiler flags, it causes problems + with VxWorks 5.5. + + * ace/config-g++-common.h: + Move VxWorks-specific features to config-vxworks5.x.h. + + * ace/config-vxworks5.x.h: + Isolate Tornado-2.1 features to a check for ACE_VXWORKS == 0x542. + This is consistent with the conventions suggested by J. Willemsen + though VxWorks 5.4.2 also shipped with Tornado 2.0.2. See further + discussion in platform_vxworks5.x_g++.GNU. + Disable ACE_LACKS_AUTO_PTR except for ACE_VXWORKS == 0x542 since + it is available on Tornado 2.2.x for PPC604 at least. Comments + indicate that this was a problem on a Hitachi processor for + Tornado 2.1. + + Thanks to Thomas Lockhart for + providing these patches. + +Tue Dec 23 17:55:19 2003 Steve Huston + + * tests/Makefile.am: Added ACE_Test_SOURCES so automake doesn't + set this up needing ACE_Test.c. + +Tue Dec 23 16:52:56 2003 Chris Cleeland + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Reordered printing of make rules so that the standard targets + (all, install, debug, etc.) are emitted into the makefile BEFORE + the targets for each project. This insures that 'all' remains + the first target in the makefile, and is thus the default target + when make is invoked without a target. + + This should resolve the problem where builds failed due to what + looked like the IDL compiler not being completely built. + +Tue Dec 23 21:18:22 UTC 2003 Don Hinton + + * netsvcs/lib/Makefile.bor: + * netsvcs/servers/Makefile.bor: + Added $Id to fix fuzz errors. + +Tue Dec 23 20:35:40 UTC 2003 Don Hinton + + * ace/config-freebsd.h: + Added ACE_HAS_PTHREAD_SETSTACK if __FreeBSD_version >= 501000. + + * ace/os_include/os_pthread.h: + Added guard around define of ACE_HAS_PTHREAD_SETSTACK. Thanks + to Craig Rodrigues for these patches. + +Tue Dec 23 20:19:51 UTC 2003 Don Hinton + + * *.{mpc,mwc}: + Added $Id to MPC files to fix fuzz errors. + +Tue Dec 23 12:31:16 UTC 2003 Johnny Willemsen + + * Kokyu/Dispatcher_Impl.h: + Added export macro, so that the destructor is exported. This fixes + the link errors in the CBuilderX MPC build. + +Mon Dec 22 17:46:12 2003 Steve Huston + + * configure.ac: Don't bother getting a ACE_HAS_TLI_PROTOTYPES + setting if ACE_HAS_XTI. It's not needed. Fix the check for + ACE_HAS_CONFLICTING_XTI_MACROS to only include xti.h, not tliuser.h, + since that's where the errors are. The XTI and TLI parts are now + separate; if the platform has XTI, none of the TLI checks are done. + Made the check for sigaction()'s second argument set (or not) + new config setting, ACE_HAS_SIGACTION_CONSTP2. See below. + + * m4/config_h.m4: Removed entries for ACE_LACKS_POSIX_PROTOTYPES and + ACE_LACKS_SOME_POSIX_PROTOTYPES. Renamed ACE_HAS_BROKEN_XTI_MACROS + to ACE_HAS_CONFLICTING_XTI_MACROS. Added entries for + ACE_HAS_SIGACTION_CONSTP2. See rationale in ace/README entry, below. + + * ace/README: Clarified the meanings of ACE_HAS_TLI, ACE_HAS_XTI, + and ACE_HAS_SVR4_TLI. Changed entry for ACE_HAS_BROKEN_XTI_MACROS to + ACE_HAS_CONFLICTING_XTI_MACROS and explained it more (both names were + used previously). Removed entries for ACE_LACKS_POSIX_PROTOTYPES + and ACE_LACKS_SOME_POSIX_PROTOTYPES. These ended up a catch-all for + platforms that had odd, or non-conforming (these days anyway) APIs + for some SysV, signal, or stdio functions. Any reference to + ACE_LACKS_POSIX_PROTOYPES is now gone. If it causes any problems + (very doubtful since the only configs that used it were + SunOS 4) it can be added back in a more explanatory fashion. + Uses of ACE_LACKS_SOME_POSIX_PROTOTYPES are replaced by + more specific settings that autoconf is detecting now anyway. + These are: + ACE_HAS_SIGACTION_CONSTP2: sigaction() 2nd parameter is + const sigaction*, as opposed to non-const. + + * ace/config-hpux-11.00.h: Removed #define ACE_HAS_BROKEN_XTI_MACROS. + This is not sued any longer (see README above). + + * ace/config-linux-common.h: + * ace/config-integritySCA.h: + * ace/config-lynxos.h: + * ace/config-qnx-neutrino.h: + * ace/config-qnx-rtp.h: + * ace/config-unixware-7.1.0.h: + * ace/config-unixware-7.1.0.udk.h: Removed entry for + ACE_LACKS_SOME_POSIX_PROTOTYPES. Applies only for glibc earlier than + 2.2. If this breaks something, send details to me. + + * ace/config-rtems.h: Removed ACE_LACKS_POSIX_PROTOTYPES and + ACE_LACKS_SOME_POSIX_PROTOTYPES; added ACE_HAS_SIGACTION_CONSTP2. + + * ace/config-sco-5.0.0.h: + * ace/config-sco-5.0.0-mit-pthread.h: + * ace/config-tandem.h: Removed entry for ACE_LACKS_POSIX_PROTOTYPES + (was commented out anyway). + + * ace/config-sunos4-sun3.x.h: + * ace/config-sunos4-sun4.1.4.h: + * ace/config-sunos4-sun4.x.h: Removed entry for + ACE_LACKS_POSIX_PROTOTYPES. If this breaks a build, please email + shuston@riverace.com with compile errors and PRF. + + * ace/OS_NS_dlfcn.inl: Removed #include "ace/OS.h"; replaced with + #include "ace/OS_NS_fcntl.h" and "ace/OS_NS_unistd.h". + (dlsym): Removed the #if defined (ACE_LACKS_POSIX_PROTOTYPES) - this + is not needed. + + * ace/OS_NS_signal.inl (sigaction): const_cast the new sigaction arg + if ACE_HAS_SIGACTION_CONSTP2 is not defined. This takes the place + of either ACE_LACKS_SOME_POSIX_PROTOTYPES or + ACE_LACKS_POSIX_PROTOTYPES. + + * ace/OS_TLI.h: Rearranged the places and situations that TLI or XTI + headers are included. These were confused over the years as platforms + were ported to, and the TLI API evolved to XTI. The way this now + works mirrors the way modern platforms work. XTI is the newer and + current API. If XTI is available, ACE_HAS_XTI should be set. If + XTI is not available, but the older TLI is, ACE_HAS_TLI should be + set. ACE_HAS_XTI takes precedence if they're both set. If only TLI + is available, the correct header (tiuser.h) is included if + ACE_HAS_TIUSER_H is set. tiuser.h is a compatibility carryover for + platforms with XTI. If the platform has TLI, not XTI, and no + tiuser.h, this file doesn't include any system headers - this may + be wrong, but I don't have any platforms available to try. + Also, ACE_HAS_SVR4_TLI applies to platforms with TLI (not XTI) and + additional, pre-XTI functionality such as t_getname(). This is + true for older SunOS, but I don't think any modern platforms + should set this. XTI includes all the things that distinguish + ACE_HAS_SVR4_TLI from TLI, so if ACE_HAS_XTI is set, ACE_HAS_SVR4_TLI + is ignored. To summarize, the order of precedence is, XTI, then + TLI, optionally modified by ACE_HAS_SVR4_TLI. + + * ace/OS_TLI.inl (t_getname): Add code for calling t_getprotaddr() + if ACE_HAS_XTI. It would be good to add ACE_OS::t_getprotaddr() + since most platforms support XTI these days. But this will do + for now. + + * ace/TLI.cpp (get_local_addr): Forward this through to + ACE_OS::t_getname(), which can now handle both ACE_HAS_XTI and + ACE_HAS_SVR4_TLI. + (set_option, get_option): Added the XTI code for these. + + * ace/TLI_Connector.cpp (complete): + * ace/TLI_Stream.cpp (get_remote_addr): Regardless of which flavor of + XTI/TLI is set, call ACE_OS::t_getname() to get the address info. + It now can do both XTI and TLI. + + * ace/os_include/os_errno.h: Removed the #defines for LOCALNAME and + REMOTENAME. These are now in ace/OS_TLI.h where they come from. + + * ace/config-lite.h: Add a check after including config.h for + ACE_HAS_XTI. XTI is what TLI evolved to, and wherever ACE + wants to provide a TLI function or not, it checks for ACE_HAS_TLI. + Since ACE_HAS_XTI can be set without ACE_HAS_TLI, we set ACE_HAS_TLI + to get the basic functionality-providing checks taken care of. + +Mon Dec 22 17:01:39 2003 Steve Huston + + * tests/Makefile.am: Removed comment on -module option for + libTestOutput. Added ACE_Test and TSS_Static_Test. + +Mon Dec 22 14:08:41 2003 Chad Elliott + + * ACE-INSTALL.html: + + Updated building sections with MPC related information. + +Mon Dec 22 19:25:59 UTC 2003 Don Hinton + + * tests/Bound_Ptr_Test.h: + * tests/Message_Queue_Notifications_Test.cpp: + * tests/NonBlocking_Conn_Test.h: + * tests/Process_Strategy_Test.cpp: + * tests/Svc_Handler_Test.cpp: + Fixed fuzz errors by removing unneeded #include of Synch.h. + +Mon Dec 22 10:31:41 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + + Added information about disallowing duplicate projects within a + single workspace regardless of the project type. It is no longer + specific to the VC6 type. + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Changed the workspace output to allow a user to make a specific + target within the workspace. If the user specified target + requires other projects, then those projects are built also. For + example, a user could execute "make CosNaming" using the Makefile + generated from the TAOACE.mwc file and the CosNaming library + would be built including everything else that was required to + build that library. + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC6ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC6WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC7ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Changed the output section of the code to only compare the + existing output file to the newly created output file only if + required by the individual project or workspace type. Currently + only VC6, EM3 (through inheritance), VC7 and VC71 (through + inheritance) use this. + +Sun Dec 21 08:40:46 2003 Balachandran Natarajan + + * performance-tests/Synch-Benchmarks/Synch_Lib/Benchmark_Base.cpp: + + Fixed an annoying warning about redefinition. + +Sun Dec 21 13:55:12 UTC 2003 Johnny Willemsen + + * tests/Test_Output.dsp: + Cleared the output directory for the static configurations, all + test project expect the lib to be in the same directory. + +Sun Dec 21 10:16:43 UTC 2003 Johnny Willemsen + + * *.bor: + Added missing Id tag to all Borland makefiles which didn't have it + yet. + +Sun Dec 21 10:02:11 UTC 2003 Johnny Willemsen + + * ace/Timeprobe.h: + Added missing includes when ACE_COMPILE_TIMEPROBES is set to 1. + Thanks to Konstantinos Margaritis for reporting + this. + +Sun Dec 21 09:45:13 UTC 2003 Johnny Willemsen + + * Kokyu/Makefile.bor: + * Kokyu/Makefile.Kokyu.bor: + Added Id tag to fix fuzz errors + +Sat Dec 20 17:51:49 UTC 2003 Johnny Willemsen + + * ACEXML/parser/parser/ParserContext.inl: + Removed not needed ; to fix a Tru64 warning + +Sat Dec 20 14:21:13 UTC 2003 Johnny Willemsen + + * ACEXML/*.bor: + Added missing Id tag to fix fuzz errors + +Sat Dec 20 13:22:12 UTC 2003 Johnny Willemsen + + * bin/fuzz.pl: + Changed filters to the types of files a little so that a Makefile.bor is + handled as a Borland makefile. + +Fri Dec 19 22:56:26 2003 Balachandran Natarajan + + * ace/RMCast/RMCast.h: + * ace/RMCast/RMCast_IO_UDP.cpp: + * ace/RMCast/RMCast_UDP_Proxy.cpp: + + Enums are evil, more so with broken compilers that cannot scope + enums within a class. LynxOS defines a bunch of #defines with + MT_* which starts colliding with the MT_* declaration in the + above files. Renamed the enums to be RMCAST_MT_*. Thanks to + Thomas Lockhart for providing + patches to fix this. + +Fri Dec 19 22:34:42 2003 Balachandran Natarajan + + * ace/INET_Addr.i: + + Fix for [BUGID 1688]. Please see + + http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1688 + + for more details. Thanks to Gary Maxey for + the patch. + +Fri Dec 19 11:57:20 2003 Steve Huston + + * tests/Sigset_Ops_Test.cpp: Add an optional can_miss parameter to + the siglistset() function; defaults to 0 (current behavior). Pass + it as 1 when the full (sigfillset) set is being tested because + there's no guarantee that all signals from 1-ACE_NSIG are legit + and set in the sigset. This is true on Red Hat Linux w/ NPTL + (Redhat 9 and Enterprise Linux 3, for example). Thanks to + Roger Beathard (rbeathar@cisco.com) for reporting this issue. + + * tests/Makefile.tests: Added TSS_Static_Test. + +Fri Dec 19 08:43:44 2003 Douglas C. Schmidt + + * ace/Malloc_T.cpp: Reformatted some of the code to conform to + ACE guidelines. In particular, stuff like this: + + if ((this->lock_ = ACE_Malloc_Lock_Adapter_T ()(pool_name)) == 0) + return; + + should be written like this: + + this->lock_ = ACE_Malloc_Lock_Adapter_T ()(pool_name); + if (this->lock_ == 0) + return; + + since the latter is less error prone and more readable! + +Fri Dec 19 13:31:59 UTC 2003 Johnny Willemsen + + * ACEXML/parser/parser/Parser.i (isChar): + Made the argument non const, just as the method declaration + in the header file. This fixes a compile error on Tru64. + +Fri Dec 19 13:29:13 UTC 2003 Johnny Willemsen + + * examples/C++NPv2/C++NPv2.mpc: + Use the new wfmo base project. + +Fri Dec 19 13:27:54 UTC 2003 Johnny Willemsen + + * performance-tests/SCTP/Options_Manager.cpp: + Removed not needed ; after extern C to fix a Tru64 warning + +Fri Dec 19 07:19:37 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/AutomakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/BorlandProjectCreator.pm: + * bin/MakeProjectCreator/modules/CbxProjectCreator.pm: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/EM3ProjectCreator.pm: + * bin/MakeProjectCreator/modules/GHSProjectCreator.pm: + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + * bin/MakeProjectCreator/modules/MakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/NMakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/Options.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + * bin/MakeProjectCreator/modules/VA4ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC6ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC7ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added a workspace/project name modifier (-name_modifier) which can + be used to modify workspace and project names using a pattern + replacement. The parameter passed to -name_modifier will have any + instances of the asterisk character replaced with the actual + workspace or project name. + + Also, deprecated the -static_only option and modified -static to + generate only static projects (since dynamic and static couldn't + co-exist with the vc6 and vc7 types). + + And, finally, replaced $generator with $creator which is more + consistent with object names. + +Fri Dec 19 11:45:13 UTC 2003 Johnny Willemsen + + * ace/config-osf1-3.2.h: + * ace/config-osf1-4.0.h: + Replaced ACE_HAS_64BIT_LONGS with ACE_SIZEOF_LONG 8 to fix compile + errors on Tru64. + + * bin/MakeProjectCreator/config/wfmo.mpb: + Added new config file. Projects that need wfmo, should be based on + this. + + * include/makeinclude/wrapper_macros.GNU: + When wfmo is not set, we set it to 0. So by default all platforms that + use the GNU makefiles lack wfmo support. + + * include/makeinclude/platform_mingw32.GNU: + MinGW has wfmo, so set wfmo to 1. + + * examples/Reactor/WFMO_Reactor/WFMO_Reactor.mpc: + Based now on the wfmo instead of a GNU specific hack. This simplifies + this MPC file but also with MinGW we will now build these examples. + +Fri Dec 19 10:46:13 UTC 2003 Johnny Willemsen + + * ace/Codeset_Registry.cpp: + Removed not needed ; after ACE_RCSID to fix Tru64 warning. + + * ace/OS.h: + * ace/OS_TLI.h: + * ace/UUID.{h,cpp,inl}: + * ace/OS_NS_arpa_inet.h: + Removed not needed ; after namespace close } to fix Tru64 warning. + + * ace/config-cxx-common.h: + Added ACE_HAS_STD_TEMPLATE_CLASS_MEMBER_SPECIALIZATION. I hope all + version of the Compaq CC compiler will support this, V6.5 needs this + + * ace/config-tru64.h: + Tru64 5.1 doesn't have stdint.h so added ACE_LACKS_STDINT_H. I don't + know of previous versions, so made this dependent on the version of + Tru64. + + * ace/config-osf1-4.0.h: + Moved check for ACE_MT_SAFE for ACE_LACKS_CLEARERR a little bit down, + so that ACE_MT_SAFE is always defined to fix compile error on Tru64. + + * tests/Reference_Counted_Event_Handler_Test.cpp: + Make sure we don't have local variables with the same name but + different type to fix Tru64 warning. + +Fri Dec 19 03:29:33 UTC 2003 Don Hinton + + * examples/System_V_IPC/SV_Semaphores/Semaphores_1.cpp: + * examples/System_V_IPC/SV_Semaphores/Semaphores_2.cpp: + * tests/SV_Shared_Memory_Test.cpp: + More explicit template instantiations of + ACE_Malloc_Lock_Adapter_T. + +Fri Dec 19 01:27:00 UTC 2003 Irfan Pyarali + + * examples/Reactor/WFMO_Reactor/Abandoned.cpp (handle_timeout): + + Must remove handler from the Reactor before the handler dies. + Otherwise, a call back from the Reactor will result in a seg + fault. + +Fri Dec 19 01:26:00 UTC 2003 Don Hinton + + * ace/Process_Mutex.cpp: + * ace/RW_Process_Mutex.cpp: + * ace/Thread_Mutex.cpp: + Added #include ace/Malloc_T.h. + +Fri Dec 19 00:46:23 UTC 2003 Don Hinton + + * ace/Null_Mutex.h: + Added template specialization of ACE_Malloc_Lock_Adapter_T. + + * ace/Process_Mutex.cpp: + * ace/RW_Process_Mutex.cpp: + * ace/Thread_Mutex.cpp: + Added explicit template instantiations for + ACE_Malloc_Lock_Adapter. + +Thu Dec 18 22:43:09 UTC 2003 Don Hinton + + * ace/Malloc_T.{h,cpp}: + Added a new functor template class, ACE_Malloc_Lock_Adapter_T, used + by ACE_Malloc_T as a factory for the ACE_LOCK template parameter, + and allows the use of locking strategy classes that don't have a + satisfactory ctor taking a single required ACE_TCHAR* parameter, + which is the default. Thanks to John Glynn for + motivating this. + + * ace/Process_Semaphore.{h,cpp}: + * ace/Thread_Semaphore.{h,cpp}: + Added template specializations of ACE_Malloc_Lock_Adapter_T for + ACE_Process_Semaphore and ACE_Thread_Semaphore since they don't + have a satisfactory ctor taking an ACT_TCHAR*. Thanks to John + Glynn for motivating this. + +Thu Dec 18 11:55:29 2003 Chad Elliott + + * ace/Null_Barrier.h: + * ace/Null_Condition.h: + * ace/Null_Mutex.h: + * ace/Null_Semaphore.h: + + All methods in both of these files are inline and therefor do not + need ACE_Export. + + * ace/ace.mpc: + + Updated the Inline_Files and Header_Files sections. + + * examples/TMCast/Member/member.cpp: + + Added #include of OS_NS_string.h to get ACE_OS::strlen and added a + return value for main. + +Thu Dec 18 09:53:31 2003 Balachandran + + * ACE version 5.3.6 released. + +Thu Dec 18 08:45:06 2003 Balachandran Natarajan + + * bin/make_release: + + Generate vc71 for the ace alone. We used to generate vc7 project + files. But now we generate vc71. Theoretically we shouldn't need + to generate this. But this is not the time to argue with Steve H + ;)! Will do after the beta goes out! + +Wed Dec 17 12:54:18 2003 Balachandran Natarajan + + * ace/TMCast/Group.cpp: + * ace/TMCast/LinkListener.hpp: + + More fixes for VC 71. Thanks to Chad Elliott for helping + me checking the results. + +Wed Dec 17 09:52:18 2003 Balachandran Natarajan + + * ace/TMCast/LinkListener.hpp: + + Fixed errors in VC71 builds. + +Wed Dec 17 15:21:36 UTC 2003 Don Hinton + + * performance_tests/Misc/Makefile: + Remove static_libs_only=0 and add static_libs=1 and + shared_libs=0 to insure that only static libs are built. We + need to set these values individually instead of setting + static_libs_only, since users may override it in + platform_macros.GNU. Thanks to John Zorko for + tracking this down and supplying the patch. This fixed the + MacOSX compile errors on the scoreboard. + +Wed Dec 17 11:25:43 UTC 2003 Johnny Willemsen + + * ace/TMCast/Group.cpp: + Fixed compile errors in the SunOS Forte8 build caused by the + lack of the scope of the exceptions. + +Wed Dec 17 11:16:12 UTC 2003 Johnny Willemsen + + * ace/TMCast/TMCast.mpc: + TMCast uses native exceptions, so added requires += exceptions + to this mpc file. This fixes compile errors in no exception + builds. + + * bin/MakeProjectCreator/config/tmcast.mpb: + Because TMCast uses native exceptions, this is also required for + everything that uses TMCast. + +Tue Dec 16 11:48:11 2003 Chad Elliott + + * ace/config-aix-4.x.h: + * ace/config-aix5.1.h: + + Updated the AIX config files to reflect the existence of + netinet/tcp.h on AIX 5.1. + +Tue Dec 16 09:31:18 2003 Douglas C. Schmidt + + * ace/Thread_Semaphore.{h,cpp}: + * ace/Process_Semaphore.{h,cpp}: Reverted the change + Sun Dec 14 15:26:46 2003 Douglas C. Schmidt + since this has too many side-effects + that'll break user code. The "Right Thing"[TM] here is simply + to update the ACE_Malloc<> documentation to explain not to use + the ACE_Process_Semaphore or ACE_Thread_Semaphore, but instead + to use the ACE_Process_Mutex or ACE_Thread_Mutex. Thanks to + Don Hinton and Bala for motivating this change. + +Tue Dec 16 08:29:05 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + + Fixed the install targets when installing to the current + directory. + +Tue Dec 16 07:13:53 2003 Chad Elliott + + * ace/TMCast/TMCast.mpc: + * ace/ace.mwc: + * bin/MakeProjectCreator/config/tmcast.mpb: + + Added a project and base project for TMCast. + + * examples/IPC_SAP/SSL_SAP/SSL-server-simple.cpp: + * examples/TMCast/Member/member.cpp: + + Added #include's to get things to build on Linux. + + * examples/TMCast/Member/Member.mpc: + + Added an mpc to override the default project to add the tmcast + base project. + +Mon Dec 15 20:34:31 2003 Balachandran Natarajan + + * tests/MM_Shared_Memory_Test.cpp: + * tests/Reactor_Notify_Test.cpp: + * tests/Semaphore_Test.cpp: + * tests/TP_Reactor_Test.cpp: + + More fixes like "Mon Dec 15 11:09:45 2003 Douglas C. Schmidt + ". Thanks to Don for motivating this. + +Mon Dec 15 18:51:15 UTC 2003 Johnny Willemsen + + * bin/MakeProjectCreator/templates/gnu.mpd: + Added setting of CLEANUP_INSTALL, this has the result that an exe + that is installed into a different directory is also removed when + doing a clean. Thanks to Don and Chad for validating this. + +Mon Dec 15 11:09:45 2003 Douglas C. Schmidt + + * tests/Proactor_Test.cpp (ACE_MT_SYNCH>): + * ace/POSIX_CB_Proactor.cpp (ACE_POSIX_CB_Proactor): Added a + cast to (unsigned int) so things will work properly for the + ACE_Thread_Semaphore. Thanks to Bala and Don Hinton for + reporting these problems. + +Mon Dec 15 10:11:31 2003 Chad Elliott + + * tests/NonBlocking_Conn_Test.h: + * tests/NonBlocking_Conn_Test.cpp: + + Moved the template class Svc_Handler into a header file so that + Visual Age C++ could implicitly instantiate the template. + + * tests/Message_Queue_Notifications_Test.cpp: + * tests/Process_Strategy_Test.cpp: + * tests/Reactor_Registration_Test.cpp: + * tests/Reactors_Test.cpp: + * tests/Recursive_Mutex_Test.cpp: + * tests/Reference_Counted_Event_Handler_Test.cpp: + * tests/Svc_Handler_Test.cpp: + * tests/TP_Reactor_Test.h: + + Added various #include's to get the tests to build on AIX with + Visual Age C++ 5.0. + +Mon Dec 15 10:06:17 2003 Steve Huston + + * ace/OS_NS_stdio.cpp (gets): Reverted this change: + Thu Dec 11 18:13:29 2003 Steve Huston + It broke the Borland build and wasn't a very good fix for the + AIX situation either. Since Riverace is dropping AIX 4.3 support + at ACE 5.4, I'm not going to push this issue. It appears to be a + compiler issue with Visual Age C++ version 5. + +Mon Dec 15 07:29:27 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Removed a redundant rule to create the $(TEMPINCDIR) directory. + + * include/makeinclude/rules.local.GNU: + + Added -p to the mkdir command in the rules to make the + $(CLEANUP_DIRS). + +Mon Dec 15 11:35:12 UTC 2003 Johnny Willemsen + + * ace/Naming_Context.cpp: + When ACE_HAS_TRACE is defined include ace/OS_NS_strings.h to get + ACE_OS::strcasecmp. This fixes a compile error when ACE_NTRACE has + been defined to 0 + +Sun Dec 14 15:26:46 2003 Douglas C. Schmidt + + * ace/Thread_Semaphore.{h,cpp}: Added support for an ACE_Thread_Semaphore + that takes a first param that's an ACE_TCHAR * so that things + will work properly if ACE_Thread_Semaphore is used with + ACE_Malloc<>. Thanks to John Glynn for + motivating this. + + * ace/Process_Semaphore.{h,cpp}: Added support for an ACE_Process_Semaphore + that takes a first param that's an ACE_TCHAR * so that things + will work properly if ACE_Process_Semaphore is used with + ACE_Malloc<>. Thanks to John Glynn for + motivating this. + +Sun Dec 13 20:00:00 2003 Douglas C. Schmidt + + * Saddam Hussein captured in a "spider hole" in Iraq. Sic Semper + Tyrannis. + +Sat Dec 13 23:29:05 2003 Balachandran Natarajan + + * bin/tao_orb_tests.lst: + * bin/tao_other_tests.lst: + + Many of the tests were being run in the single threaded + configuration, though they shouldn't have been. + +Fri Dec 12 19:31:00 2003 Balachandran Natarajan + + * bin/tao_orb_tests.lst: + + Some tests were run twice. They have been removed. + +Fri Dec 12 08:53:50 2003 Chad Elliott + + * bin/DependencyGenerator/DependencyEditor.pm: + * bin/DependencyGenerator/DependencyWriter.pm: + * bin/DependencyGenerator/GNUObjectGenerator.pm: + * bin/DependencyGenerator/ObjectGenerator.pm: + * bin/DependencyGenerator/Preprocessor.pm: + * bin/depgen.pl: + + More optimizations to decrease dependency generation times. + + * bin/DependencyGenerator/DependencyGenerator.pm: + + Fixed a bug where when replacing paths (using the -A option), it + wouldn't replace as much of the path as it could depending on the + replacement values. Now they are sorted by length so that the + longest values are checked first. + +Fri Dec 12 08:37:45 2003 Chad Elliott + + * bin/create_ace_build.pl: + + When creating a build on Windows and we run into a problem with + linking to a target that has a path that is "too long", we resort + to the short file name and everyone's happy. + +Thu Dec 11 18:25:39 2003 Steve Huston + + * ace/Future.cpp: Added #include "ace/Guard_T.h" and + "ace/Recursive_Thread_Mutex.h" if ACE_HAS_THREADS is defined. + There are ACE_Guards that use it and AIX Visual Age C++ needs + to see these headers to work right. + + * ace/Future_Set.h: Added #include "ace/Null_Mutex.h" since this + file references it in an ACE_Hash_Map_Manager declaration. Even if + it may have been available during compile, Visual Age C++ needs to + see the header during link time as well, and it only remembers to + look at headers that were explicitly included. + +Thu Dec 11 18:13:29 2003 Steve Huston + + * ace/OS_NS_netdb.inl: Changed use of naked ::memset() calls to + ACE_OS::memset(). Fixes compile errors on AIX 4.3. + + * ace/OS_NS_stdio.cpp (gets): Added "ACE_STD_NAMESPACE::" prefix to + getchar() call; fixes compile error on AIX 4.3. + +Wed Dec 10 18:20:12 UTC 2003 Johnny Willemsen + + * ace/Message_Queue.h: + Mark deprecated enums with @deprecated so that they appear on the + doxygen deprecated page + + * ace/Thread.h: + Moved comment above method instead of between augments. + +Wed Dec 10 13:16:03 2003 Ossama Othman + + * ace/UUID.cpp (to_string): + + Fixed incorrect delete() operator call. Use vector delete[]() + instead of scalar delete() since array was allocated with + new[](). + +Wed Dec 10 15:09:13 UTC 2003 Johnny Willemsen + + * examples/TMCast/Member/member.cpp: + Added missing includes + +Wed Dec 10 13:39:53 UTC 2003 Johnny Willemsen + + * ace/Log_Msg.cpp: + In case of ACE_Log_Msg::SYSLOG is set, log messages to the backend + and in case of closing down redirect logging to stderr + +Wed Dec 10 07:18:44 2003 Chad Elliott + + * bin/depgen.pl: + + Fixed a bug introduced by my change on Tue Dec 9 13:00:30 2003. + +Wed Dec 10 13:17:13 UTC 2003 Johnny Willemsen + + * examples/IPC_SAP/SSL_SAP/SSL-server-poll.cpp: + Added #include of ace/OS_NS_poll.h to get poll() stuff. + +Wed Dec 10 07:09:10 2003 Chad Elliott + + * bin/MakeProjectCreator/config/dseventlogadmin.mpb: + + The dseventlogadmin base project should also inherit from event. + +Wed Dec 10 12:56:47 UTC 2003 Johnny Willemsen + + * examples/IPC_SAP/SSL_SAP/SSL-server-fancy.cpp: + Added #include of OS_NS_sys_select.h to get ACE_OS::select + +Wed Dec 10 12:50:13 UTC 2003 Johnny Willemsen + + * examples/IPC_SAP/SSL_SAP/SSL-client.h: + Fixed casing of include + +Wed Dec 10 10:20:48 UTC 2003 Johnny Willemsen + + * ace/NT_Service.cpp (wait_for_service_state): + Initialize last_state and last_check_point with 0 to fix MinGW + compiler warnings. + +Wed Dec 10 9:31:13 UTC 2003 Johnny Willemsen + + * ace/Task_Ex_T.h: + Removed the ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION_EXPORT directive. + It is meaningless to define it with ACE_MESSAGE_TYPE. Thanks to + Kobi Cohen-Arazi for reporting this. + +Wed Dec 10 9:18:12 UTC 2003 Johnny Willemsen + + * performance-tests/TTCP/ACE-C++/TTCP_ACE_C++.mpc: + Removed this file from the repo. This performance-tests contains + so many non-portable code that it is impossible to build it on + all the platforms we have. + +Wed Dec 10 8:39:12 UTC 2003 Johnny Willemsen + + * tests/Tests.bor: + Added TSS_Static_Test + +Tue Dec 9 13:00:30 2003 Chad Elliott + + * bin/DependencyGenerator/DependencyEditor.pm: + * bin/DependencyGenerator/DependencyGenerator.pm: + * bin/DependencyGenerator/DependencyWriter.pm: + * bin/DependencyGenerator/DependencyWriterFactory.pm: + * bin/DependencyGenerator/GNUDependencyWriter.pm: + * bin/DependencyGenerator/GNUObjectGenerator.pm: + * bin/DependencyGenerator/NMakeDependencyWriter.pm: + * bin/DependencyGenerator/NMakeObjectGenerator.pm: + * bin/DependencyGenerator/ObjectGenerator.pm: + * bin/DependencyGenerator/ObjectGeneratorFactory.pm: + * bin/DependencyGenerator/Preprocessor.pm: + * bin/depgen.pl: + + Performance optimizations that decrease dependency generation + times by up to 10%. + +Tue Dec 9 17:49:12 UTC 2003 Johnny Willemsen + + * ACEXML/apps/svcconf/Svcconf_Handler.cpp: + Added #include of ace/OS_NS_strings.h to get ACE_OS::strcasecmp + +Tue Dec 9 16:33:43 UTC 2003 Don Hinton + + * include/makeinclude/platform_aix_ibm.GNU: + Removed ACELIB from LIBS since both LIBS and ACELIB is added to + VLDLIBS in wrapper_macros.GNU. Otherwise -lACE appears twice in + the link command. + +Tue Dec 9 15:51:13 UTC 2003 Johnny Willemsen + + * ace/Log_Msg.cpp: + When ACE_Log_Msg::LOGGER or ACE_Log_Msg::SYSLOG is passed as + flags, make sure the correct bit is set in flags_. This fixes + the problem reported by A. Kleibeuker + that CORBA::ORB_init() + fails after ACE_Log_Msg::SYSLOG is passed to the + ACE_Log_Msg->open() call. + +Tue Dec 9 09:28:49 2003 Chad Elliott + + * bin/DependencyGenerator/DependencyEditor.pm: + + Removed some unnecessary module usage. + + * bin/DependencyGenerator/DependencyGenerator.pm: + * bin/DependencyGenerator/GNUDependencyWriter.pm: + * bin/DependencyGenerator/NMakeDependencyWriter.pm: + + Avoid copying the array of object files for a speed increase. + + * bin/DependencyGenerator/Preprocessor.pm: + + Fixed a bug where #if's inside of c comments would be counted. + Fixed a bug where the Preprocessor would not return an array + reference if the last file to be processed did not exist. + +Tue Dec 9 09:23:06 2003 Chad Elliott + + * ace/OS_NS_Thread.h: + * ace/OS_NS_Thread.cpp: + + Worked around a bug in the VxWorks OS loader that caused complex + objects to be constructed multiple times. Instead of having a + static ACE_TSS_Keys object within the ACE_TSS_Emulation class, we + have a static pointer that is allocated upon the first call of + ACE_TSS_Emulation::next_key(). + + * ace/OS_NS_dlfcn.inl: + * ace/OS_NS_string.cpp: + * ace/OS_NS_sys_utsname.cpp: + * ace/Pipe.cpp: + * ace/SV_Message_Queue.h: + * ace/SV_Semaphore_Simple.h: + * ace/SV_Shared_Memory.h: + * ace/config-lite.h: + * ace/config-vxworks5.x.h: + + Added #includes necessary for building on VxWorks. + + * ace/os_include/os_signal.h: + + Changed NSIG to ACE_NSIG. + + * ace/os_include/os_unistd.h: + + Added #include for gethostname(). + + * tests/TSS_Static_Test.cpp: + * tests/run_test.lst: + * tests/tests.mpc: + + Added a test to ensure that TSS used during static construction + functions properly. This test only performs a test if TSS + emulation is used. + +Tue Dec 9 15:09:55 UTC 2003 Don Hinton + + Thanks to Bruce Jones for the + following patches for IRIX. + + * ace/config-irix6.5.x-sgic++.h: + Removed ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION and + added ACE_HAS_STD_TEMPLATE_CLASS_MEMBER_SPECIALIZATION. + + * ace/config-irix6.x-common.h: + Added ACE_LACKS_PERFECT_MULTICAST_FILTERING. + + * ace/config-irix6.x-sgic++-nothreads.h: + Added ACE_LACKS_STDINT_H. + + * include/makeinclude/platform_irix6.x_sgic++.GNU: + Set templates = implicit in not yet defined and only add + -no_prelink to CCFLAGS if templates != implicit. + +Mon Dec 8 19:44:04 UTC 2003 Don Hinton + + * include/makeinclude/rules.bin.GNU: + * include/makeinclude/rules.local.GNU: + * include/makeinclude/rules.nested.GNU: + * include/makeinclude/wrapper_macros.GNU: + Make sure that all variables are defined prior to first use to + get rid of warnings. + + * include/makeinclude/rules.lib.GNU: + * include/makeinclude/wrapper_macros.GNU: + Moved the initial assignment of SOVERSION and SONAME from + wrapper_macros.GNU to rules.lib.GNU so that users can set them + in a Makefile or in another file, e.g., rules.tao.GNU. + Since it must be set prior to it's use in rules.lib.GNU--it's + used in a target name that isn't a pattern, so it's evaluated + when the file is read--it can't be set later. If versioned_so=1 + and the user has not set a value, either in the Makefile or by + including a file like rules.tao.GNU that defines it, the default + ACE version number will be used. Note that rules.tao.GNU now + behaves like rules.lib.GNU and only sets SOVERSION and SONAME + if versioned_so=1 and they have not yet been set. Thanks to + Milan Cvetkovic for motivating this + change. + +Mon Dec 8 07:38:52 2003 Douglas C. Schmidt + + * ace/Logging_Strategy.cpp (fini): Check whether there's a reactor + configured before trying to access it! Thanks to Yoav Borer + for reporting this. + +Mon Dec 8 16:14:01 UTC 2003 Johnny Willemsen + + * bin/fuzz.pl: + Added a noncvs file check. I found yesterday some ncb and opt files + in the TAO part of the repo, and they shouldn't be in the repo. This + are msvc6 generated files. So added a noncvs file check which checks + whether these files exists, and if they exist, give an error. If + people know of more extensions that shouldn't get into the repo, + feel free to add them. + +Mon Dec 8 16:06:12 UTC 2003 Johnny Willemsen + + Added the ability to better determine whether apps/drwho must be build. + By setting rwho=0 into the default.features file that MPC uses no + makefiles are generated. For GNU make, just put rwho=0 into your + own platform_macros.GNU file or in the specific platform file. + + * apps/drwho/drwho.mpc: + Added requires rwho and removed the usage of nobuild. + + * apps/drwho/nobuild.mpb: + Removed this file from the repo, it is not needed anymore + + * include/makeinclude/wrapper_macros.GNU: + When rwho is not set, set it to 1. This way, we can set in the specific + .GNU files rwho=0 when that environment doesn't support rwho. + + * include/makeinclude/platform_chorus.GNU: + * include/makeinclude/platform_chorus4.x_g++.GNU: + * include/makeinclude/platform_chorus_ghs.GNU: + * include/makeinclude/platform_cygwin32.GNU: + * include/makeinclude/platform_mingw32.GNU: + * include/makeinclude/platform_vxworks5.x_diab.GNU: + * include/makeinclude/platform_vxworks5.x_g++.GNU: + * include/makeinclude/platform_vxworks5.x_ghs.GNU: + Added rwho=0 because these environments don't have rwho. + +Mon Dec 8 09:14:39 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Driver.pm: + + Remove trailing slashes and duplicate slashes from relative paths. + +Sun Dec 7 20:23:34 2003 Balachandran Natarajan + + * bin/auto_run_tests.pl: + + Fixed a problem with this checkin "Fri Nov 21 07:24:07 UTC 2003 + Don Hinton ". The config_list + declaration should be within the loop, else the list will be + permanent. This lead to our ACE tests being run thrice, TAO ORB + tests twice and other tests once. That change was bogus. All + that was required was to remove ":" in the optlist. Finding + this out only took 3 hours after getting mislead to search + through all the perl scripts for autobuild :(! + +Sat Dec 6 19:36:19 2003 Steve Huston + + * ace/os_include/sys/os_stat.h: Added #include "ace/Time_Value.h" + in the ACE_HAS_WINCE section because the WinCE version of struct + stat uses ACE_Time_Value for time fields. + + * ace/config-WinCE.h: Added ACE_LACKS_FCNTL_H. eVC doesn't supply this, + at least thru version 4.1. + + * ace/iosfwd.h: Disable most of this file if ACE_LACKS_IOSTREAM_TOTALLY + is set. + + * ace/QtReactor.h: + * ace/os_include/os_errno.h: Added /**/ to #include statements to + keep eVC from complaining about files not being there. + +Sat Dec 6 19:27:26 2003 Steve Huston + + * tests/aix_hack_for_main.cpp: New file that is here to be + compiled first, along with Main.cpp, before any real test. + This simply gets Main.o ready for all the other tests. + This gets things back to where each test need only compile + one source file, and the AIX C++ hack to delete the tempinc + directory works again. + + * tests/Makefile.tests: Add aix_hack_for_main to the front of the + BIN set of tests. It must be first in order for this hack to work. + +Sat Dec 6 09:28:17 2003 Balachandran Natarajan + + * bin/tao_other_tests.lst: + + A bunch of tests depend on dynamic libraries being + available. They have been prevented from running in the static + builds. I am sending a separate mail to the authors to fix + this. + +Sat Dec 6 12:55:13 UTC 2003 Johnny Willemsen + + * examples/Reactor/WFMO_Reactor/APC.dsp: + * examples/Reactor/WFMO_Reactor/APCTest.dsp: + * examples/Reactor/WFMO_Reactor/WFMO_Reactor.dsw: + The APC.dsp file was a normal test file, but it should be a + binary file, to prevent all kinds of problems by adding and + removing a file with the same name, just removed APC.dsp and + added APCTest.dsp as binary. Also updated the corresponding dsw + file. This should fix an error in the msvc6 debug build when + cygwin cvs is used. + +Fri Dec 5 21:48:43 2003 Balachandran Natarajan + + * ace/CORBA_macros.h: + Fixed a typo in the documentation. Thanks to Thomas Lockhart for + pointing it out. + +Fri Dec 5 10:20:23 UTC 2003 Johnny Willemsen + + * performance-tests/TTCP/ACE-C++/wrapper-new-ttcp.cpp: + Removed not used local variable + +Fri Dec 5 07:28:13 UTC 2003 Johnny Willemsen + + * tests/Vector_Test.cpp: + Added explicit template instantiation for the ACE_Vector_Iterator + +Thu Dec 4 17:13:29 2003 Steve Huston + + * configure.ac: Removed extraneous set of [] for AS_IF test + ace_has_tli_funcs = yes. Allows complete testing for all TLI/XTI- + related features. Fixes some HP-UX problems. + Wrapped ACE_HAS_BROKEN_T_ERROR check in + ACE_CONVERT_WARNINGS_TO_ERRORS to work right on HP-UX. + + * m4/compiler.m4: Added a conditional set around CFLAGS on HP-UX, + trying to silence a sh diagnostic at configure time. Didn't work... + Added +p to WERROR for HP aC++. Allows "future error" warnings + to be noted as errors. Now can properly detect non-const 5th + arg to select(). + + * m4/tls.m4: Moved AM_CONDITIONAL(BUILD_SSL) outside of the test + $ac_cv_openssl_libs. This makes sure BUILD_SSL gets set properly + whether or not with-ssl is set. + + * ace/OS_NS_Thread.cpp (rwlock_init): Added + !defined (ACE_HAS_PTHREADS_UNIX98_EXT) to the cases where the .cpp + version of rwlock_init() is defined (as opposed to the version in + OS_NS_Thread.inl). This matches an earlier change to OS_NS_Thread.h: + Thu Nov 20 17:30:18 2003 Steve Huston + +Thu Dec 4 13:56:50 2003 Jeff Parsons + + * ace/Basic_Types.cpp: + + Added #includes needed to compile if ACE_LACKS_LONGLONG_T is + defined. + +Thu Dec 4 13:46:36 2003 Chad Elliott + + * bin/DependencyGenerator/DependencyEditor.pm: + * bin/DependencyGenerator/DependencyGenerator.pm: + * bin/DependencyGenerator/Preprocessor.pm: + + Added optimizations that cut the dependency generation time by + over 40%. + +Thu Dec 4 18:34:13 UTC 2003 Johnny Willemsen + + * tests/Bug_1576_Regression_Test.cpp: + This tests whether loading a non-existent .so will really fail. + Don't log dll.error() because this is the error that we could + not load the .so and this will then result in an error on the + scoreboard. Just log an error in case we are able to load the + non-existent .so + +Thu Dec 4 16:51:13 UTC 2003 Johnny Willemsen + + * ace/config-vxworks5.x.h: + VxWorks 5.5 (0x550) has clearerr, so changed the defines that + set ACE_LACKS_CLEARERR to == 0x542 instead of >= 0x542. Thanks + to Thomas Lockhart for reporting + this. + +Thu Dec 4 16:31:12 UTC 2003 Johnny Willemsen + + * tests/Vector_Test.cpp: + When using BCB6 or earlier the second template argument of the + ACE_Vector template must be passed explicit. Just expecting + that the default one is used doesn't work with Borland. + +Thu Dec 4 14:30:44 2003 Kobi Cohen-Arazi + + * ace/Task_Ex_T.i (reply, put_next): + These 2 functions related to ACE_Stream Framework, + doesn't work with new ACE_Task_Ex (yet) + +Wed Dec 3 23:37:59 2003 Kobi Cohen-Arazi + + * ace/Task_Ex_T.h: + Add remark about the idea of merging ACE_Task and ACE_Task_Ex. + Add remark about sibling always returning 0 + + * ace/Task_Ex_T.cpp (ACE_Task_Ex::sibling): + ACE_Task_Ex::sibling cannot call mod_->sibling(this) because it + is not typed as ACE_Task<>. Return 0 always when calling sibling. + TODO: That can be fixed if ACE_Task and ACE_Task_Ex can be merged so + ACE_Task_Ex can have the Module ability - aka the Stream model. + See ACE_Task_Ex.h for more info on that. + +Wed Dec 3 12:14:51 2003 Steve Huston + + Pulled in these changes from the 5.3 stream: + + Tue Dec 2 14:43:28 2003 Steve Huston + + * ace/Vector_T.{h cpp i}: Added operator== and operator!= methods + that take the correct vector length into account. The inherited + ACE_Array methods run the whole array max length. + + Thu Sep 04 12:20:39 2003 Steve Huston + + * ace/Vector_T.{h, i, cpp}: Added new ACE_Vector_Iterator class + to correctly detect end of the vector content. Use this new class as + ACE_Vector<>::Iterator. ACE_Vector previously used ACE_Array_Iterator + as the iterator, but it doesn't notice the end of the legit vector + area. + + * tests/Vector_Test.cpp: Added a test of the ACE_Vector::Iterator + range to be sure it gets all legit vector elements, and no more. + Thanks to Yann Steff for this test addition + and for diagnosing the failure cause. + +Wed Dec 3 15:58:12 UTC 2003 Johnny Willemsen + + * performance-tests/Misc/basic_perf.bor: + * performance-tests/Misc/childbirth_time.bor: + * performance-tests/Misc/context_switch_time.bor: + * performance-tests/Misc/preempt.bor: + * performance-tests/Misc/test_mutex.bor: + * performance-tests/Misc/test_naming.bor: + * performance-tests/Misc/test_singleton.bor: + * netsvcs/build.bor: + * include/makeinclude/build_example.bor: + * include/makeinclude/build_exe.bor: + * examples/Timer_Queue/Async_Timer_Queue_Test.bor: + * examples/Timer_Queue/Reactor_Timer_Queue_Test.bor: + * examples/Timer_Queue/Thread_Timer_Queue_Test.bor: + * examples/Smart_Pointers/gadget_test.bor: + * examples/Smart_Pointers/widget_test.bor: + * examples/Reactor/Multicast/client.bor: + * examples/Reactor/Multicast/server.bor: + * examples/Export/export_dll.bor: + * examples/Export/test.bor: + * apps/build.bor: + Added missing Id tag + +Wed Dec 3 09:48:55 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Fixed a bug in the generated GNU Makefile where idl files that had + scoped idlflag assignments would be processed every time + regardless of whether the generated files were up-to-date or not. + +Wed Dec 3 11:06:12 UTC 2003 Johnny Willemsen + + * ace/OS_NS_Thread.h: + Changed definition thr_setprio to fix link errors in MSVC6 release + build. + +Wed Dec 3 11:39:45 2003 Kobi Cohen-Arazi + + * tests/Task_Ex_Test.cpp: + Added explicit instantiations to ACE_Task_Ex and ACE_Message_Queue_Ex + +Tue Dec 2 16:33:14 2003 Steve Huston + + * ace/OS_NS_Thread.h: Add #include "ace/Object_Manager_Base.h" to get + the ACE_OS_Object_Manager definition referenced by the ACE_OS_GUARD + macros. + + * ace/OS_NS_Thread.inl: (ACE_OS_Thread_Mutex_Guard, + ACE_OS_Recursive_Thread_Mutex_Guard): Changed use of + ACE_Object_Manager::starting_up to ACE_OS_Object_Manager to match + the class preallocated locks are obtained in the ACE_OS_GUARD + macros, above. Fixes compile errors on Linux and others. + +Tue Dec 2 14:43:17 2003 Steve Huston + + * ace/OS_NS_Thread.{h inl} (ACE_OS_Thread_Mutex_Guard, + ACE_OS_Recursive_Thread_Mutex_Guard): Changed the constructors to + check ACE_Object_Manager::starting_up () before grabbing the + monitor lock. If done before ACE_Object_Manager has been + initialized, the lock reference is invalid and often results + in a crash in the guard object. + The motivating case for this fix is a static ACE_Date_Time + object which resulted in an ACE_OS_GUARD crashing in + ACE_OS::localtime_r(). Thanks to Craig L. Ching + for this report. + + * tests/Date_Time_Test.cpp: Test a static ACE_Date_Time object. + +Tue Dec 2 16:19:33 UTC 2003 Johnny Willemsen + + * tests/Bound_Ptr_Test.h: + Moved Printer definition outside the ACE_HAS_THREADS check to + fix compile problems in single threaded builds. + +Tue Dec 2 12:15:18 UTC 2003 Johnny Willemsen + + * examples/C++NPv2/Server_Shutdown.cpp: + Added include of ace/OS_NS_string.h to get ACE_OS::strcmp + +Tue Dec 2 12:07:13 UTC 2003 Johnny Willemsen + + * apps/JAWS2/JAWS/Cache_Manager_T.cpp: + Removed all std::, this causes problems in our MSVC6 builds + +Mon Dec 1 22:04:37 2003 Kobi Cohen-Arazi + + * tests/Task_Ex_Test.cpp: + Move User_Defined_Msg class to Task_Ex_Test.h. + + * tests/Task_Ex_Test.dsp: + Add Task_Ex_Test.h to dsp. + + * tests/Task_Ex_Test.h: + Added to fix problems with AIX IBM and Template instantiations. + +Mon Dec 1 13:03:50 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + + Fixed a bug in the subtraction operator on strings. Values in + doubled quoted strings weren't being subtracted properly. + +Mon Dec 01 16:01:33 UTC 2003 Johnny Willemsen + + * bin/MakeProjectCreator/modules/Creator.pm (add_file_written): + There was a warning given when something was written with exactly the + same name, added an extra warning when things are just different by + casing. This is no problem on a Unix box, but on a Windows box it + will result in the fact that the second file overwrites the first. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + Do the duplicate check case insensitive by making everything lower + case. Thanks to Chris Cleeland for helping + me fixing this. The reason is that VC6 handles project names + case insensitive. + +Sun Nov 30 10:40:13 UTC 2003 Johnny Willemsen + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + When duplicates our not allowed and duplicates are found, then output + an error instead of a warning + +Sun Nov 30 10:22:29 2003 Kobi Cohen-Arazi + + * tests/tests.dsw: + * tests/Task_Ex_Test.icc: + * tests/Task_Ex_Test.dsp: + * tests/Makefile.am: + Added Task_Ex_Test to Makefile.am and tests.dsw + Added Task_Ex_Test.icc, Task_Ex_Test.dsp + +Sat Nov 29 15:25:36 UTC 2003 Don Hinton + + * ace/config-lite.h: (new file) + * ace/config-all.h: + Added new file, config-lite.h, and moved most of the code, + except for the includes, from config-all.h to the new file, + and included it in config-all.h. Since some of the files + included by config-all.h in turn include config-all.h, we + ended up with a circular include problem on some platforms. The + new file eliminates the problem by separating the includes from + the definitions. + + * ace/ACE_export.h: + * ace/os_include/os_stdarg.h: + * ace/os_include/os_stddef.h: + * ace/os_include/os_stdio.h: + Include config-lite.h instead of config-all.h to avoid + circular include problem. Most, if not all, of the files in + ace/os_include need only config-lite.h, but these are the only + files that currently have the circular include problem. Future + subsetting can address the rest after the release. + +Fri Nov 28 17:08:34 2003 Venkita Subramonian + + * Kokyu/README: Added this file with some basic information on + Kokyu and pointing to the Kokyu html documents under Kokyu/docs. + +Fri Nov 28 17:17:29 2003 Steve Huston + + * ace/Caching_Strategies_T.i: Added #include "ace/OS_Memory.h" so + ACE_NEW can be found properly when inlined methods are used without + the .cpp file, such as when instantiating templates in AIX Visual + Age C++. + + * ace/Cache_Map_Manager_T.cpp: Added #include "ace/Log_Msg.h" to + find ACE_ERROR, et al. + + * ace/Env_Value_T.h: Added #include "ace/Global_Macros.h" to + get ACE_UNIMPLEMENTED_FUNC and "ace/OS_NS_stdlib.h" to get + strtol, strtoul. + + * ace/Reverse_Lock_T.inl: Added #include "ace/OS_NS_errno.h" so + errno can be found properly when inlined methods are used without + the .cpp file, such as when instantiating templates in AIX Visual + Age C++. + + * tests/Bound_Ptr_Test.{h, cpp}: Added #include "ace/Null_Mutex.h" + to find ACE_Null_Mutex. Moved the Printer and Scheduler class + definitions from Bound_Ptr_Test.cpp to a new file, Bound_Ptr_Test.h + so AIX Visual Age C++ can find it when instantiating templates. + + * tests/Buffer_Stream_Test.cpp: + * tests/Cached_Accept_Conn_Test.cpp: + * tests/Cached_Allocator_Test.cpp: + * tests/Cached_Conn_Test.cpp: + * tests/CDR_Test.cpp: + * tests/Config_Test.cpp: + * tests/Env_Value_Test.cpp: + * tests/Logging_Strategy_Test.cpp: + * tests/MT_Reactor_Upcall_Test.cpp: Added #include + "ace/OS_NS_string.h" to get string functions. + + * tests/Cache_Map_Manager_Test.cpp: Added #include "ace/OS_NS_stdlib.h" + to get atoi() and srand(), and "ace/OS_Memory.h" for ACE_NEW. + + * tests/Capabilities_Test.cpp: Added #include "ace/OS_NS_fcntl.h" to + get open() and "ace/OS_NS_unistd.h" to get write(). + + * tests/Conn_Test.cpp: Added #include "ace/OS_NS_sys_select.h" to get + select() and the proper mutex header, Thread_Mutex.h, Null_Mutex.h, + or Process_Mutex.h. + + * tests/Conn_Test.h: Added #include "ace/Null_Condition.h" so the + template parent has it available when instantiating templates. + + * tests/Env_Value_Test.cpp: + * tests/Get_Opt_Test.cpp: + * tests/Handle_Set_Test.cpp: + * tests/Hash_Map_Bucket_Iterator_Test.cpp: Added #include + "ace/OS_NS_stdlib.h" to get itoa(). + + * tests/Future_Set_Test.cpp: + * tests/Logging_Strategy_Test.cpp: Added #include "ace/OS_NS_stdio.h" + and "ace/OS_NS_unistd.h" to get missing symbols on AIX. + + * tests/Future_Test.cpp: Added #include "ace/OS_NS_sys_time.h" to get + gettimeofday() and "ace/OS_NS_string.h" to get strlen(). + + * tests/MEM_Stream_Test.cpp: Added #include "ace/OS_NS_stdio.h" to get + sprintf(). + +Fri Nov 28 11:21:05 2003 Ossama Othman + + The following are fixes for problems exposed by running + `autoreconf' with the "--warnings=all" command line option. + + * configure.ac: + + Precompute the absolute path of the ACE "tests" build + directory. + + * Makefile.am (CONFIGURE_DEPENDENCIES): + + Updated configure script dependency list to reflect latest set + of M4 filenames. + + * ace/Makefile.am: + * ace/QoS/Makefile.am: + * ace/RMCast/Makefile.am: + * ace/SSL/Makefile.am: + * apps/gperf/src/Makefile.am: + * tests/SSL/Makefile.am: + + "INCLUDES" -> "AM_CPPFLAGS". The former is obsolete. + + * tests/Makefile.am (libdir): + + Do not set this variable to the absolute path of the current + working directory via the "$(shell pwd)" GNU Make extension. + Instead pre-compute it inside the `configure' script, and then + substitute the actual value inside the generated Makefile. + "$(shell pwd)" is not portable to non-GNU Make implementations. + + * m4/ace.m4: + + Ran `autoupdate' on this file to update obsolete Autoconf + macros. In particular, "AC_HELP_STRING" is now + "AS_HELP_STRING". + +Fri Nov 28 15:37:36 UTC 2003 Johnny Willemsen + + * tests/Makefile.tests: + Added Task_Ex_Test + +Fri Nov 28 15:34:53 UTC 2003 Johnny Willemsen + + * ace/config-WinCE.h: + Added missing # before include. + +Fri Nov 28 15:11:13 UTC 2003 Johnny Willemsen + + * include/makeinclude/ace_flags.bor: + * include/makeinclude/build_core_exe.bor: + * include/makeinclude/build_core_library.bor: + * include/makeinclude/build_dll.bor: + * include/makeinclude/build_lib.bor: + * include/makeinclude/build_library.bor: + * include/makeinclude/clean.bor: + * include/makeinclude/compiler.bor: + * include/makeinclude/decorator.bor: + * include/makeinclude/install.bor: + * include/makeinclude/make_flags.bor: + * include/makeinclude/outputdir.bor: + * include/makeinclude/recurse.bor + Added missing id tag + +Fri Nov 28 14:59:03 UTC 2003 Johnny Willemsen + + * ACE-INSTALL.html: + Updated Cygwin documentation, use GCC 3.2.3 and select DOS + as default text file type. + +Fri Nov 28 08:56:50 2003 Douglas C. Schmidt + + * ace/Configuration_Import_Export.cpp (import_config): Rearranged + the code a bit to avoid declaring the "end" variable multiple + times in the loop. Thanks to Moran Levi for suggesting this. + +Fri Nov 28 14:31:12 UTC 2003 Johnny Willemsen + + * bin/fuzz.pl: + Fixed error in my previous change. + +Fri Nov 28 14:03:53 UTC 2003 Johnny Willemsen + + * ace/OS_NS_Thread.inl: + Moved ACE_OS::mutex_init() above ACE_OS::event_init() to fix + internal compiler error with Cygwin. + +Fri Nov 28 13:43:12 UTC 2003 Johnny Willemsen + + * bin/fuzz.pl: + Also check for Id string in the .bor files. + +Thu Nov 27 10:40:32 2003 Douglas C. Schmidt + + * ace/Configuration_Import_Export.cpp (import_config): The + problem: when importing a configuration from file - the import + process assumes maximum line length of 4096 bytes (which means + actually about 1360 bytes because each byte is represented as + three bytes in the output file). The solution is to use a + dynamic buffer to load a line from the file. If the load did not + reach the end of the line - resize the buffer and continue until + the end of the line is reached. Thanks to Moran Levi + for the fixes. + +Thu Nov 27 16:51:31 2003 Balachandran Natarajan + + * tests/ARGV_Test.cpp: + + Fixed compile errors on Win32. + +Thu Nov 27 10:51:00 UTC 2003 Don Hinton + + * include/makeinclude/rules.bin.GNU: + * include/makeinclude/rules.lib.GNU: + Added new variable, LIB_INSTALL that contains the libraries that + should be installed and added it as a dependency of BIN so that + the libs will get installed prior to building the BIN that depends + on it. + +Wed Nov 26 18:36:04 2003 Balachandran Natarajan + + * tests/ARGV_Test.cpp: + + Fixed compile errors, mostly related to missing includes. + +Wed Nov 26 17:09:32 2003 Balachandran Natarajan + + * ace/Log_Msg.cpp (log): Fixed a compile error with VC6. + +Wed Nov 26 12:10:22 2003 Douglas C. Schmidt + + * ace/OS_NS_signal.h: Put the typedef for ACE_SIGNAL_C_FUNC inside + of an extern "C" block to quiet warnings on Solaris. Thanks to + Kevin Heifner for this suggestion! + + * ace/POSIX_Proactor.cpp: Made the sig_handler() function static + so that it won't "leak" out of ACE! + + * tests/Log_Msg_Test.cpp (test_format_specs): + * ace/Log_Msg.cpp (log): ACE_Log_Msg::log has a number of problems + when ACE is built with ACE_USES_WCHAR + 1) %m needs to convert strerror to wide string + 2) %I should not use memset to set spaces in wide string + 3) recent modifications to remove dependencies on ACE_TRACE + prevent %I from indenting + Thanks to Duane Binder for these fixes. Fixes [BUGID 1660] + +Wed Nov 26 12:15:22 2003 Balachandran Natarajan + + * bin/tao_other_tests.lst: + + Blocked a number of tests from running in if messaging is disabled. + +Wed Nov 26 17:41:13 UTC 2003 Johnny Willemsen + + * include/makeinclude/ace_flags.bor: + Changed TAO FT flags and libs + +Wed Nov 26 10:11:20 2003 Douglas C. Schmidt + + * tests/ARGV_Test.cpp: Added new functions to test the fixes by + Duane Binder below. + + * ace/Argv_Type_Converter.cpp (cleanup): Ensure we don't try to + delete memory that wasn't allocated dynamically. Thanks to + Duane Binder for reporting this and + providing a fix. This fixes bugid 1658. + + * ace/Log_Msg_NT_Event_Log.cpp (open): + ACE_Log_Msg_NT_Event_Log::open() has a problem with passing the + program name to ACE_TEXT_RegSetValueEx. It is passing + msg_file_length. msg_file_length is defined as + ACE_OS::strlen(msg_file). Unfortunately, this is 1/2 the + required buffer length since this argument is defined in bytes, + not in characters. End result - the event log message file entry + is truncated resulting in the log message file not found. + Thanks to Duane Binder for reporting + this and providing a fix. This fixes bugid 1659. + + * ace/POSIX_Proactor.cpp: Changed sig_handler() to be extern "C". + Thanks to Chris Cleeland for suggesting this fix. + + * ace/Process.{h,cpp}: Fixed the ACE_Process_Options::command_line_argv() + method so that it doesn't modify the command_line_buf_ parameter + directly since this messes things up when process_name() is + used. Thanks to Dror Tirosh for reporting + this. + +Wed Nov 26 16:09:55 UTC 2003 Don Hinton + + * tests/IO_Stream_Test.cpp: + Added #include OS_NS_sys_wait.h: + +Wed Nov 26 15:58:07 UTC 2003 Don Hinton + + * ace/config-WinCE.h: + Added #define ACE_LACKS_SIGNAL_H and ACE_LACKS_SYS_STAT_H. + +Wed Nov 26 14:52:43 UTC 2003 Johnny Willemsen + + * examples/IPC_SAP/SSL_SAP/SSL-server.cpp: + Corrected wrong include + +Tue Nov 25 16:24:18 2003 Balachandran Natarajan + + * bin/tao_orb_tests.lst: + + Added the Servant_To_Reference_Test for the daily builds. + +Tue Nov 25 23:41:21 2003 Kobi Cohen-Arazi + + * apps/JAWS3/jaws3/Concurrency.cpp: + + Remove the unnecessary ACE_TEMPLATE_METHOD_SPECIALIZATION + + * apps/JAWS3/jaws3/Config_File.cpp: + + Added #include "ace/Unbounded_Queue.h" + + * apps/JAWS3/jaws3/Datagram.cpp: + + Remove unnecessary default values in cpp impl file. + + * apps/JAWS3/jaws3/Event_Dispatcher.cpp: + Use ACE_THR_FUNC_RETURN instead of void* + + * apps/JAWS3/jaws3/IO.h: + + Added #include "ace/Singleton.h" and #include + "ace/Synch_Traits.h" + + * apps/JAWS3/jaws3/Reactive_IO.cpp: + + Added #include "ace/ACE.h" + + * apps/JAWS3/jaws3/Signal_Task.cpp: + + Added #define JAWS_BUILD_DLL. Use ACE_THR_FUNC_RETURN instead of + void*. Add if !defined (ACE_WIN32) for WIN32 because of SIGHUP + + * apps/JAWS3/jaws3/Signal_Task.h: + + Added #include "jaws3/Export.h" and add JAWS_Export to + JAWS_Signal_Task + + * apps/JAWS3/jaws3/THYBRID_Concurrency.h: + * apps/JAWS3/jaws3/TPR_Concurrency.h: + + Added #include "ace/Atomic_Op.h" + +Tue Nov 25 23:35:27 2003 Kobi Cohen-Arazi + + * apps/JAWS3/jaws3.mwc: + * apps/JAWS3/jaws3/jaws3.mpc: + + Added To the repository + +Tue Nov 25 15:01:28 2003 Balachandran Natarajan + + * bin/MakeProjectCreator/config/global.features: + + Added sctp and xt_reactor to the list of features. + +Tue Nov 25 12:34:15 2003 Balachandran Natarajan + + * ace/DLL.h: Made the constructors explicit. + + * ace/Service_Config.cpp: + + Fix for one of the problems that showed up in TAO. For some + reason we were passing in a "0" to the constructor + ACE_Service_Type that was expecting a const ACE_DLL &. None of + the compilers complained about this, since they created + temporary. This created all sorts of problems once this "Sun Nov + 23 11:00:02 2003 Douglas C. Schmidt + " went through since it added a new + constructor. + + We have now fixed it by creating a temporary and forcing the + compiler to use the right constructor of ACE_Service_Type. This + shouldn't be harmful, since we were expecting just this. + +Tue Nov 25 11:14:09 2003 Chad Elliott + + * ace/config-lynxos.h: + * include/makeinclude/platform_lynxos.GNU: + + Made modifications to support LynxOS 4.0.0 and shared libraries. + +Tue Nov 25 14:13:24 UTC 2003 Don Hinton + + * include/makeinclude/all_in_one.GNU: + Include rules.bin.GNU after rules.lib.GNU so that dependencies + can be correctly set. Use definition of DIRS to decide whether + to include rules.nested.GNU or rules.nonested.GNU. + rules.nested.GNU is needed to recurse directories if DIRS is + defined. + +Tue Nov 25 10:08:12 2003 Kobi Cohen-Arazi + + * apps/JAWS3/jaws3/io.h: + * apps/JAWS3/jaws3/io.cpp: + * apps/JAWS3/jaws3/file.h: + * apps/JAWS3/jaws3/file.cpp: + Removed. + + +Tue Nov 25 09:23:35 2003 Kobi Cohen-Arazi + + * apps/JAWS3/small/SS_Templates.cpp: + * apps/JAWS3/jaws3/io.h: + * apps/JAWS3/jaws3/io.cpp: + * apps/JAWS3/jaws3/file.h: + * apps/JAWS3/jaws3/file.cpp: + * apps/JAWS3/jaws3/Timer_Helpers.h: + * apps/JAWS3/jaws3/Timer_Helpers.cpp: + * apps/JAWS3/jaws3/Templates.cpp: + * apps/JAWS3/jaws3/Reactive_IO_Helpers.h: + * apps/JAWS3/jaws3/Options.h: + * apps/JAWS3/jaws3/Options.cpp: + * apps/JAWS3/jaws3/Asynch_IO_Helpers.h: + * apps/JAWS3/jaws3-todo/Reactive_Socket_Helpers.h: + * apps/JAWS3/jaws3-todo/Reactive_Socket_Helpers.cpp: + * apps/JAWS3/http/HTTP_States.h: + * apps/JAWS3/contrib/john_at_lyris_dot_com/readme: + * apps/JAWS3/contrib/jmills_at_tga_dot_com/readme: + * apps/JAWS3/bench/rqfiles.cpp: + * apps/JAWS3/bench/mkfiles.cpp: + * apps/JAWS3/docs/web/images/jaws3_components.gif: + * apps/JAWS3/docs/web/images/jaws3_components.fig: + * apps/JAWS3/docs/web/images/jaws3_banner.png: + * apps/JAWS3/docs/web/images/jaws3_banner.gif: + + Added to the repository + +Tue Nov 25 05:25:58 UTC 2003 Don Hinton + + * include/makeinclude/all_in_one.GNU: + Include rules.nonested.GNU instead of rules.nested.GNU to enable + parallel builds. Thanks to Bala for noticing that the builds + didn't always build in parallel as expected. + +Mon Nov 24 18:30:12 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_sunos5_sunc++.GNU: + When using CC 5.5 (SunForte8) then use implicit templates + +Mon Nov 24 17:29:30 UTC 2003 Don Hinton + + * include/makeinclude/rules.local.GNU: + Added a $(TAO_IDL_DEP) target that emits an error if the + $(TAO_IDL_DEP) doesn't exist. Thanks to Carlos for + motivating this and suggesting the use of /bin/false to force + make to see the error. + +Mon Nov 24 16:59:53 UTC 2003 Johnny Willemsen + + * ace/OS_NS_stdio.inl: + Moved ACE_OS::flock_unlock() to an earlier place in this file + to fix an internal compiler with MinGW. + +Mon Nov 24 07:03:15 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplib.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + * bin/MakeProjectCreator/templates/nmakedll.mpt: + * bin/MakeProjectCreator/templates/vc6dspdll.mpt: + * bin/MakeProjectCreator/templates/vc6dsplib.mpt: + + Removed the /Zi option (enable debugging information) from the + release targets. + +Mon Nov 24 05:26:14 UTC 2003 Don Hinton + + * include/makeinclude/rules.local.GNU: + Only cleanup shared libraries when shared_libs is defined and + static libraries when static_libs is defined. Also, test for + whether or not the CLEANUP targets in this case are empty, not + b + just for existence, since they always exist by this time. + +Mon Nov 24 02:38:58 UTC 2003 Don Hinton + + * include/makeinclude/all_in_one.GNU: + * include/makeinclude/wrapper_macros.GNU: + * include/makeinclude/rules.local.GNU: + Removed the multiple assignments to BUILD from + wrapper_macros.GNU and all_in_one.GNU and replaced them with a + single assignment to VBUILD in rules.local.GNU. VBUILD always + includes the following targets: IDL_SRC, VLIBS, VBIN, then + filters out any of these already in BUILD and includes them too. + IDL_SRC and the V* targets get defined in the appropriate + rules.*.GNU file or Makefile or are defined in rules.local.GNU + prior to use. If VBIN has not yet been defined when + rules.local.GNU is loaded, but BIN has been (because BIN or + BIN_UNCHECKED was defined in the Makefile but rules.bin.GNU + wasn't included), VBIN is defined in terms of BIN, and is set to + depend on VLIBS. VLIBS is defined in rules.lib.GNU and + discussed below. + + * include/makeinclude/rules.lib.GNU: + Assign VLIB and/or VSHLIB and VSHLIBA to VLIBS if either + static_libs and/or shared_libs is defined, respectively. Added + a rule that they depend on IDL_SRC if it's defined, which will + insure that they are built first. Issue warning if this file + was included but no *LIB or *LIB_UNCHECKED variables were defined. + + * include/makeinclude/rules.bin.GNU: + Modified the BIN target to command to use the specific objects + from the dependency list instead of $^ which takes all the + dependencies, even those added elsewhere--make is evil in this + respect. Since objects could be listed multiple times, sort is + used to remove duplicates. Added dependency rules making VBIN + dependent on VLIBS and IDL_SRC. Issue warning if this file is + included and BIN or BIN_UNCHECKED wasn't defined. + + * include/makeinclude/rules.local.GNU: + In addition to the BUILD changes noted above, added + makefile.local target the prints out the name of the Makefile in + use. This really helpful in big directories with lots of + Makefiles. Set the SUFFIXES to nothing so that implicit rule + matching based on suffixes is turn off--we only want our + explicit rules to fire. Removed the IDL_SRC dependency rule + added below since it was redundant and already handled in + rules.tao.GNU. + + * include/makeinclude/wrapper_macros.GNU: + Removed VBIN assignment since it belongs in rules.bin.GNU and/or + rules.local.GNU and is no longer needed here since the BUILD + variable assignments were removed as noted above. Added + comments on how to use the various variables. + + * include/makeinclude/all_in_one.GNU: + * include/makeinclude/platform_g++_common.GNU: + * include/makeinclude/platform_linux.GNU: + * include/makeinclude/rules.bin.GNU: + * include/makeinclude/rules.lib.GNU: + * include/makeinclude/rules.local.GNU: + * include/makeinclude/wrapper_macros.GNU: + Use ifdef/ifndef to test to see if variables exist before + testing their values. + + * apps/Gateway/Gateway/Makefile: + Added -lGateway to LDLIBS and removed the VBIN target dependency + lists. + + * apps/Gateway/Peer/Makefile: + Added -lPeer to LDLIBS and removed the VBIN target dependency + lists. + + * tests/Makefile.DLL_Test: + * tests/Makefile.Framework_Component_DLL: + * tests/Makefile.Service_Config_DLL: + * tests/Makefile.Test_Output: + Removed the erroneous BUILD variable assignments that were + incorrect and no longer work correctly. + +Sun Nov 23 11:00:02 2003 Douglas C. Schmidt + + * ace/Service_Object.cpp (ACE_Service_Type): Added an ACE_const_cast<> + to resolve a bug. Thanks to Bala for reporting this. + +Sun Nov 23 14:17:33 UTC 2003 Johnny Willemsen + + * tests/Tests.bor: + Added Task_Ex_Test + +Sun Nov 23 10:06:43 UTC 2003 Johnny Willemsen + + * ACE-INSTALL.html: + Added a new section how to build ACE with Cygwin + +Sat Nov 22 15:39:05 2003 Balachandran Natarajan + + * ace/Service_Object.h: + + Made dll_> mutable. This should get rid of the errors in + the scoreboard. + +Sat Nov 22 22:10:14 2003 Kobi Cohen-Arazi + + * tests/Task_Ex_Test.cpp: + * tests/run_test.lst: + * tests/tests.mpc: + Added test for ACE_Task_Ex + +Sat Nov 22 22:03:34 2003 Kobi Cohen-Arazi + + * ace/ace.mpc: + + Added Task_Ex_T file + +Sat Nov 22 22:00:15 2003 Kobi Cohen-Arazi + + * ace/Task_Ex_T.h: + * ace/Task_Ex_T.i: + * ace/Task_Ex_T.cpp: + + Added support for ACE_Task with Use define Message template + parameter. + +Sat Nov 22 21:07:09 2003 Kobi Cohen-Arazi + + * ace/OS_NS_Thread.h : + + Added "&& !defined (ACE_DEFAULT_THREAD_KEYS)". Problems occurs + on win2k/XP when OS support up to 1024 slots, but MS-sdk + defines TLS_MINIMUM_AVAILABLE as 64. Now, Win2k/XP Users can + raise that number, define-ing ACE_DEFAULT_THREAD_KEYS as 1024 + e.g.. + +Sat Nov 22 11:18:38 2003 Balachandran Natarajan + + * ace/Service_Object.{h,cpp}: + + Reverting this change "Fri Nov 21 12:13:42 2003 Balachandran + Natarajan " since Dr. Schmidt wants to + fix this the right way. + +Fri Nov 21 12:13:42 2003 Balachandran Natarajan + + * ace/Service_Object.{h,cpp}: + + Reverted this change since it broke the builds. + "Thu Nov 20 18:11:32 2003 Douglas C. Schmidt + ". We will get a better patch soon + from the user. + +Thu Nov 20 18:11:32 2003 Douglas C. Schmidt + + * ace/Service_Object.{h,cpp}: Added a new constructor for + ACE_Service_Type that is passed an ACE_SHLIB_HANDLE handle. + This fixes a bug with ACE_DLL_Strategy::make_svc_handler(). + Thanks to Thomas Girard for reporting + this. + +Fri Nov 21 13:26:22 UTC 2003 Don Hinton + + * *Makefile*: + Updated dependencies for all Makefiles normally built. + + * include/makeinclude/macros.GNU: + * include/makeinclude/rules.common.GNU: + Added cleanup_idl_stubs. It was already there as a .local + target, now it can be called directly. This allows you to + cleanup the idl stub code for a particular project without + having to run realclean which will cleanup all everything in the + directory. + +Fri Nov 21 07:24:07 UTC 2003 Don Hinton + + * bin/auto_run_tests.pl: + Moved the declaration of $config_list to before the if(!getopt + line, since it's used there if the if is satisfied. Removed the + ":" after a in the getopt argument list, since -a does not take + a mandatory argument (which is what ":" means). This has + prevented any tests from running in the ACE only autobuilds. + since September. + +Fri Nov 21 02:57:35 UTC 2003 Don Hinton + + This is a major reorganization of the make system, and was + motivated by intermittent build errors in the autobuilds as well + as the pending move to MPC. Sorry if it's a little long, it's in + a quasi Irfan-Bala style... + + Specific changes are noted below, but here's a basic overview: + + clean: Cleans up only the objects actually created by the + current project. If multiple makefiles exist in the same + directory, they no longer need to be completely rebuilt because + another makefile issued a clean. This will help in large + directories like $(ACE_ROOT)tests or + $(TAO_ROOT)/orbsvcs/orbsvcs. These objects are cleaned up even + if a particular feature is not enabled, e.g., rmcast, ssl, + Other, etc., and is not dependent on bin/ace_components or the + files it maintains. So, for normal development, prefer clean + over realclean. + + realclean: Cleans up everything, including the removal of the + .obj or .shobj directories, and any IDL files, e.g., *C.h, etc. + Like clean:, it also cleans up objects whether or not the + feature is currently enabled, thus obviating reverseclean: + entirely. Also removed the multiple $(RM) lines. Each clean + target now only invokes $(RM) a single time, and they aren't + invoked at all in Makefiles that don't actually build anything. + This reduced the time to run realclean on TAO by about 10%. + + BUILD: It now includes $(IDL_SRC) as the first dependency, so + that idl_stubs is always invoked first if needed. It also + includes, in order, $(VLIB), $(VSHLIB), and $(VSHLIBA), + depending on the values of static_libs and shared_libs. + Finally, it includes $(VBIN) so that it's the last thing built. + This ordering will always work even in parallel builds, -jn + with n > 1, since dependencies are processed in order. Had + these target just satisfied other rules, but were not explicitly + ordered, make would have tried to build them at the same time. + This should fix most of the parallel build autobuild errors. + + depend: Now depends on idl_studs, so you no longer have to run + both in order. depend will invoke idl_stubs if needed. It also + uses $(VDIR) instead of a hard coded .obj/ value, and removes + the config-*h files even if it's run in the $(ACE_ROOT)/ace + directory, but leaves config-all.h and a new variable file, + $(ACE_PLATFORM_CONFIG), which can be set in the appropriate + platform_*.GNU file to correspond to the matching config-*.h + file. For instance, it is set to config-linux.h in + platform_macros.GNU so that changes to config-linux.h will + insure recompilation on Linux. It defaults to config.h if not + set in platform_*.GNU. $(PSRC) is now set to $(addsuffix .cpp, + $(CLEANUP_BIN)), where $(CLEANUP_BIN) is either $(BIN) or + $(BIN_UNCHECKED) or $(BIN2), $(BIN_UNCHECKED) is heavily used in + TAO and MPC, and $(BIN2) is heavily used in ACE, so both are + maintained. This insures that it will be added to the + dependencies even if the developer forgets to add it to the + Makefile. In fact, it's here so it doesn't have to be added to + the Makefile. + + install/deinstall: These are somewhat problematic, since they + *must* be installed to actually run anything, but now they + install exactly what you build, $(LIB) or $(SHLIB), and + deinstall the same even if the feature isn't enabled, as in + clean above. Also, the versioning code was modified a bit to + make it easier to understand and make deinstall work correctly. + + $(IDL_SRC): This target was added here, because adding it to + $(TAO)/rules_tao.GNU wouldn't work correctly due to backward + compatibility issues. Anyway, it depends on $(IDL_FILES) and + will force idl_stubs to be run if any of the idl files change. + Unfortunately, we can't yet generate dependencies for idl files, + but perhaps that won't be hard to add in the future. + + component_check.GNU: Including this file is similar to calling a + function with named parameters, it's been altered to let you + include it as many times as you want. It will probably evolve + over time, but currently, you add of list of all components that + you want to tests to an input variable, REQUIRED_COMPONENTS, + include the file, then test to see if the return variable, + MISSING_COMPONENTS, contains any of the components specified in + REQUIRED_COMPONENTS, if it does, these components are missing, + i.e., not specified in either platform_macros.GNU, the + commandline, or contained in any of the ace_components files. + For example, if you want to test for ssl and Other, you'd do + something like this: + + REQUIRED_COMPONENTS = ssl Other + include $(ACE_ROOT)/include/makeinclude/component_check.GNU + ifneq ($(MISSING_COMPONENTS),) + all: + @echo Missing $(MISSING_COMPONENTS) + endif + + This should greatly simplify Makefiles in general and MPC + templates in particular. + + * include/makeinclude/all_in_one.GNU: + * include/makeinclude/component_check.GNU: + Moved the code that set the BIN, LIB, and SHLIB variable from + component_check.GNU to all_in_one.GNU, and removed the include + guards from component_check.GNU so it could be included multiple + times like a function call. Also, set the BUILD to the correct + values depending on which variables are set (BUILD is also set + correctly in wrapper_macros.GNU, but this implementation should + be more correct if all_in_one.GNU is used instead of including + the other files individually). + + * include/makeinclude/platform_linux.GNU: + * include/makeinclude/wrapper_macros.GNU: + * include/makeinclude/rules.local.GNU: + * bin/g++dep: + Added ACE_PLATFORM_CONFIG = config-linux.h, so that + config-linux.h will always be included in dependencies on + Linux. Added default value of config.h to wrapper_macros.GNU, + and pass it to g++dep where it is used to replace the matching + file dependency with $(ACE_PLATFORM_CONFIG) so we can pick up + the correct dependency automatically on each platform. + + * include/makeinclude/wrapper_macros.GNU: + * include/makeinclude/platform_sunos5_kcc.GNU: + * include/makeinclude/platform_sunos5_sunc++.GNU: + Moved the assignment of the CLEANUP_* variables to the top of + wrapper_macros.GNU, and changed the test in the two platform_* + files from BIN to CLEANUP_BIN, so they can be correctly tested + even if BIN_UNCHECKED of BIN2 was defined in the Makefile + instead of BIN. + + * include/makeinclude/rules.bin.GNU: + Assign CLEANUP_BIN to PSRC so that it gets passed to depend and + dependencies are generated even if the component isn't enabled + or not explicitly included in VOBJS which is derived from SRC. + + * include/makeinclude/rules.lib.GNU: + Modified the versioning variables and created CLEANUP_INSTALL so + that libraries can be installed and uninstalled correctly even + if components are currently enabled. Cosmetic fixes to the + ifdef code to make it more readable, added comments. + + * include/makeinclude/rules.local.GNU: + More cosmetic changes to make it more readable. Added + CLEANUP_OBJDIRS to make it easier to keep track of what + directories need to be removed during clean and realclean. + Condensed the clean and install/deinstall target code to use + fewer rm calls and only call them if there's something to do. + Also, only cleanup the library or bin that was created, + including a specific version number if available. These use the + special CLEANUP_* variables so they aren't dependent on whether + or not a feature or component is enabled. + + * include/makeinclude/wrapper_macros.GNU: + Added $(IDL_SRC) to all the BUILD variables (there are lots of + them), so that they are always generated first if defined. + Commented out the assignment of $(VSHDIR) to $(VDIR) is building + shared_libs_only and not on VXWORKS. This doesn't seem right, + especially if we are building bins and libs in the same directory. + +Thu Nov 20 17:30:18 2003 Steve Huston + + * ace/os_include/sys/os_socket.h: HP-UX supplies the socklen_t type + unless some feature set less than _XOPEN_SOURCE_EXTENDED is + specifically requested. However, it only actually uses the + socklen_t type in supplied socket functions if + _XOPEN_SOURCE_EXTENDED is specifically requested. So, for example, + the compile options ACE usually uses (includes -mt) cause + _HPUX_SOURCE to be set, which sets _INCLUDE_XOPEN_SOURCE_EXTENDED + (causing socklen_t to be defined) but _not_ _XOPEN_SOURCE_EXTENDED + (causing socket functions to use int, not socklen_t). + + * ace/OS_NS_Thread.h (ACE_rwlock_t): Uncomment the two lines that + set "typedef pthread_rwlock_t ACE_rwlock_t" for + ACE_HAS_PTHREADS_UNIX98_EXT. + + * ace/OS_NS_Thread.inl (rw_trywrlock_upgrade): Add "defined + (ACE_HAS_PTHREADS_UNIX98_EXT)" to the platforms that return + ENOTSUP for this. Avoids tripping over the code that emulates it + without having the emulated lock type set up. + + * ace/OS_NS_sys_stat.h: Change #include "ace/os_include/sys/os_types.h" + to "ace/os_include/sys/os_stat.h" to get the proper struct stat + definition for the platform. Fixes compile error on HP-UX. + +Thu Nov 20 09:35:01 2003 Dale Wilson + + * bin/MakeProjectCreator/config/fault_tolerance.mpb: + New--to support fault tolerance mpc files. + + * bin/MakeProjectCreator/config/orbsvcsexe.mpb: + * bin/MakeProjectCreator/config/taoexe.mpb: + Add IDL includes to match CPP includes. + +Thu Nov 20 07:51:59 2003 Douglas C. Schmidt + + * ace/OS_NS_sys_uio.cpp: "Short-circuit the readv_emulation() and + writev_emulation() for the case where there's just a single + element in the iovec. Thanks to Edan Ayal + for contributing this. + +Wed Nov 19 11:55:43 2003 Douglas C. Schmidt + + * ace/Mem_Map.i (map): Reverted the change from + + Mon Nov 17 17:09:37 2003 Douglas C. Schmidt + + since this isn't the right fix. Thanks to Kitty for noting this. + +Wed Nov 19 10:09:12 2003 Chad Elliott + + * bin/DependencyGenerator/GNUDependencyWriter.pm: + * bin/DependencyGenerator/Preprocessor.pm: + + Modifications that decrease the time to generate dependencies by + 7 percent. + + * bin/depgen.pl: + + Added the -n option to the usage and updated the version number. + +Wed Nov 19 09:53:06 2003 Balachandran Natarajan + + * ace/config-win32-msvc-7.h: + + MSVC 7 supports templates class specialization. + +Tue Nov 18 22:31:00 2003 Balachandran Natarajan + + * bin/MakeProjectCreator/config/naming.mpb: + + Naming service now depends on messaging. + +Tue Nov 18 22:12:53 2003 Balachandran Natarajan + + * ace/Log_Msg.cpp: + * ace/Log_Msg.h: + + Fixed warnings in the daily builds. Further, made some cosmetic + changes. + +Tue Nov 18 21:25:23 2003 Tao Lu + + * html/index.html: + Configured the index.html to display CIAO doxygen information. + +Tue Nov 18 15:58:00 2003 Ossama Othman + + * configure.ac (AC_PROC_CC, AC_PROG_CPP, AC_PROG_CC_C_O): + + No need to check for a C compiler and preprocessor. ACE is only + compiled with a C++ compiler. + + (AC_LIBTOOL_TAGS): + + Added call to this Libtool autoconf macro to only enable C++ + library support. C and FORTRAN support are unnecessary. Note + that this forces a requirement on Libtool 1.5 or better. + + (ACE_CHECK_TLS): + + Only run the OpenSSL detection tests if SSL support is enabled + by the user. + + * m4/ace.m4: + + Enable TLS/SSL support by default. + + * m4/aio.m4: + * m4/features.m4: + + Renamed `features.m4' file to `aio.m4' to better reflect the + contents of this file, namely asynchronous IO checks. + + * m4/config_h.m4 (AH_BOTTOM): + + Prevent Emacs from inadvertently applying the "Local Variables" + block to be placed in the generated "config.h" header to this + Autoconf/M4 file by splitting the words "Local" and "Variables" + into two separate concatenated M4 quoted blocks. + + * m4/tls.m4: + + New Autoconf OpenSSL detection tests. + + * ace/Makefile.am (clean-local): + + Updated list of additional files/directories unknown to the + standard "clean" target to be cleaned. + + * ace/SSL/Makefile.am: + + (AM_CPPFLAGS): + + Add preprocessor flags necessary to build applications with + OpenSSL support. Detected at "configure-time". + + (libACE_SSL_la_LIBADD): + + Link the OpenSSL libraries detected at "configure-time." + + * tests/Makefile.am (SUBDIRS): + + Build the SSL test subdirectory. + + (noinst_SCRIPTS): + + Removed non-existent files from this list. Fixes some build + problems. + + (libTest_Output_la_LDFLAGS): + + Removed "-module" libtool flag from libTest_Output.* linker + flags. This library is meant to be linked at build time, not + loaded dynamically. + + (*_SOURCES, LDADD): + + No need to add `Main.cpp' to all test source lists. Simply + adding `Main.o' to $(LDADD) is much cleaner and provides the + same effect. + + (Reference_Counted_Event_Handler_Test_SOURCES): + + Fixed source file list. This test is now built correctly. + + (EXTRA_DIST): + + Added `Main.cpp' to the list of files to be explicitly + distributed with the ACE distribution when building a + distribution with the Autoconf support. + + (all-local): + + "$(top_srcdir/tests" -> "$(srcdir)". The latter is cleaner and + provides the same effect/result. + + (clean-local): + + Updated list of additional files/directories unknown to the + standard "clean" target to be cleaned. + + (distclean-local): + + Removed `bin' directory from the list of directories to be + erased. It hasn't been generated for quite some time. + + * tests/SSL/Makefile.am: + + New Automake Makefile template for the ACE_SSL library test. + +Tue Nov 18 16:37:21 2003 Douglas C. Schmidt + + * examples/IPC_SAP/DEV_SAP/reader/reader.cpp (main): Changed + recv_n() to recv() so that the underlying Windows Read() + function is called properly (recv_n() doesn't call this). + Thanks to Mike Gingell for + reporting this. + +Tue Nov 18 16:22:45 2003 Tao Lu + + * etc/ciao.doxygen: + * etc/ciao_assembly_deployer.doxygen : + * etc/ciao_componentserver.doxygen : + * etc/ciao_daemon.doxygen : + * etc/ciao_serveractivator.doxygen : + * etc/ciao_xml_helpers.doxygen : + * bin/generate_doxygen.pl : + * html/index.html : + Added some more doxygen files. + +Tue Nov 18 16:14:29 2003 Steve Huston + + * include/makeinclude/platform_hpux_aCC.GNU: Add preprocessor defs + for threads ability to CPPFLAGS, not CCFLAGS. Thanks to Ossama + Othman for this suggestion. + +Tue Nov 18 16:03:10 UTC 2003 Don Hinton + + Thanks to Olli Savia for the following patches: + + * ace/OS_NS_sys_mman.inl: + Added #include OS_NS_sys_stat.h if __Lynx__ is defined. + + * ace/RMCast/RMCast.h: + Added #include /**/ before #undef'ing MT_DATA if + __Lynx__ is defined, since it's MT_DATA is defined in this file. + + * tests/Max_Default_Port_Test.cpp: + Changed NULL to 0 to fix compile problem on LynxOS. + +Tue Nov 18 15:01:49 2003 Simon McQueen + + * ace/Log_Msg.h: + * ace/Log_Msg.cpp: + + Time / time and date stamps can now be placed on log entries by + defining the environment property ACE_LOG_TIMESTAMP to be one of + 'TIME' / 'DATE'. This fixes bug #1635. + +Tue Nov 18 08:11:52 2003 Dale Wilson + + * bin/MakeProjectCreator/config/ftorbutils.mpb: + + Ftorbutils depends on CosNaming. + +Tue Nov 18 05:12:17 UTC 2003 Don Hinton + + * include/makeinclude/all_in_one.GNU: + Added ability to include an arbitrary Makefile passed as + ADDITIONAL_INCLUDE, and added BUILD rule dependency of idl_stubs + if IDL_SRC is defined. Added TAO_ROOT is not already defined. + +Mon Nov 17 20:34:27 2003 Tao Lu + + * etc/ciao.doxygen: + * bin/generate_doxygen.pl: + + Added doxygen configuration file for ciao. + +Mon Nov 17 20:12:53 2003 Tao Lu + + * etc/tao_ifr.doxygen: + Added doxygen configuration file for IFR_Service. + +Mon Nov 17 20:00:14 2003 Balachandran Natarajan + + * ace/Default_Constants.h: + + Added a new #define ACE_IPV6_LOCALHOST. The + ACE_DEFAULT_SERVER_HOST would point to ACE_IPV6_LOCALHOST if + IPV6 is enabled and ACE_LOCALHOSt of IPV4 is used. + + Thanks to Bryan Bruesker for providing the patches. + +Mon Nov 17 18:55:49 2003 Balachandran Natarajan + + * ace/Asynch_Connector.cpp: + + Use ACE_reinterpret_cast instead of a C style casts. + + * ace/INET_Addr.cpp: + + Fixed a problem with the ACE_INET_Addr::set () method, where the + type and size of this object were not being set. This could + cause a problem when the type of sa is different than the type + of this ACE_INET_Addr. Even though the inet_addr_ member will + be set correctly, the type and size will be, making the state + of the ACE_INET_Addr inconsistent. + + * ace/Multihomed_INET_Addr.cpp: + * ace/Multihomed_INET_Addr.h: + * ace/Multihomed_INET_Addr.i: + + Added a get_addresses method () that takes a sockaddr_in6* as + argument, so that if the ACE_Multihomed_INET_Addr is storing + only IPv6 addresses, they can all be put into an array of + sockaddr_in6 by this method. Further, changed the variable name + within the class to be secondaries_, ie. with an underscore. + + * ace/SOCK_Dgram_Mcast.cpp: + + Added a memset to make_multicast_ifaddr6 to ensure that the + ipv6_mreq is zero'ed out before using it. + + + Thanks to Bryan Bruesker for providing the patches. + +Tue Nov 18 00:35:51 UTC 2003 Don Hinton + + * include/makeinclude/component_check.GNU: + * include/makeinclude/wrapper_macros.GNU: + Added new variable, ACE_MAKE_OPTIONS, to wrapper_macros.GNU that + collects all the flags passed to make, e.g., ssl, sctp, rmcast, + etc.... Use this variable in component_check.GNU so that we + only have to add new flags one place. + +Tue Nov 18 00:04:30 UTC 2003 Don Hinton + + * include/makeinclude/all_in_one.GNU: + Fixed variable tests and changed the order variables are added + to BUILD, i.e., put the libraries first, then the bins. This + insures the libs are built first if a Makefile builds both libs + and executables. + + * netsvcs/clients/Naming/Client/Makefile: + Removed the special BIN target with a dependency on SHLIB, since + this is now handled automagically by the above rule. + +Mon Nov 17 17:09:37 2003 Douglas C. Schmidt + + * ace/Mem_Map.i (map): Disable the use of MAP_FIXED on Linux + since it seems to cause problems. Thanks to Lothar Werzinger + for this fix. + +Mon Nov 17 21:50:29 UTC 2003 Don Hinton + + * include/makeinclude/rules.local.GNU: + * include/makeinclude/wrapper_macros.GNU: + Renamed the CLEAN_* variables to CLEANUP_*, and moved them from + rules.local.GNU to wrapper_macros.GNU. + + * include/makeinclude/all_in_one.GNU: + * include/makeinclude/component_check.GNU: + Added new files that simplify the makefile systems. + all_in_one.GNU replaces and conditionally includes all the other + standard makeinclude files. It also includes the new + component_check.GNU file that handles all the conditional + compilation rules. All you need to do is add a list of required + components needed for the particular project, e.g., rmcast, + shared_libs, Other, etc..., to REQUIRED_COMPONENTS and then + include all_in_one.GNU. These files will simplify MPC a great + deal. + + * netsvcs/Makefile: + * netsvcs/clients/Makefile: + * netsvcs/clients/Logger/Makefile: + * netsvcs/clients/Naming/Makefile: + * netsvcs/clients/Naming/Client/Makefile: + * netsvcs/clients/Naming/Dump_Restore/Makefile: + * netsvcs/clients/Naming/Dump_Restore/Makefile.Dump_Restore: + * netsvcs/clients/Naming/Dump_Restore/Makefile.main: + * netsvcs/clients/Tokens/Makefile: + * netsvcs/clients/Tokens/collection/Makefile: + * netsvcs/clients/Tokens/deadlock/Makefile: + * netsvcs/clients/Tokens/invariant/Makefile: + * netsvcs/clients/Tokens/manual/Makefile: + * netsvcs/clients/Tokens/mutex/Makefile: + * netsvcs/clients/Tokens/rw_lock/Makefile: + * netsvcs/lib/Makefile: + * netsvcs/servers/Makefile: + Modified these Makefiles to use the new all_in_one.GNU file + above and updated dependencies. This is mainly a test and + example for future MPC implementations. + +Mon Nov 17 16:37:49 2003 Steve Huston + + * include/makeinclude/rules.lib.GNU: Moved the AIX shr.o-building stuff + out of the main path of the VSHLIB rule. Avoids bulding the shr.o + file with the SOVERSION suffix. Now the shr.o file is made without + decoration, inserted into the .a file, then deleted. The .a file + is correctly decorated and installed. + +Sun Nov 16 23:49:02 2003 Balachandran Natarajan + + * ace/INET_Addr.h: + + Fixed a typo in the interface documentation. + + * ace/SOCK_Dgram.cpp: + + In shared_open () used INADDR_ANY when calling bind_port () + instead of 0. + + * ace/Asynch_Acceptor.cpp: + + Modifies the call to bind_port in open () so that if the address + passed in is the any address, the protocol is passed to + bind_port so that when IPv6 is enabled, it will bind to the IPv6 + any address instead of the IPv4 one + + * ace/Sock_Connect.cpp: + + Modified bind_port () so that if the protocol specified is + PF_INET6 and the IP address is not INADDR_ANY, then the address + will be set to an IPv4-mapped IPv6 address before doing the + bind. + + Thanks to Brian Buesker for the + patches. + +Sun Nov 16 23:08:16 2003 Balachandran Natarajan + + * bin/footprint_stats.sh: + + Removed Smart_Proxies from the daily build since it made no + sense to have that. Added new libraries like the Valuetype that + we would like to track to the daily stats pages. + +Sun Nov 16 18:33:27 UTC 2003 Don Hinton + + * ace/Reactor.cpp: + Added #include Recursive_Thread_Mutex.h. + +Fri Nov 14 15:17:30 2003 Chris Cleeland + + * ace/INET_Addr.cpp (get_host_addr): Fixed these two methods so + that they work properly on vxworks. They used to work in 1.2a, + but those changes got lost during an IPv6 refactoring after the + release of DOC 1.2.1. This should close [RT 3183]. + + * tests/INET_Addr_Test.cpp: Added a test for the augmented + version of get_host_addr. + +Fri Nov 14 15:55:30 UTC 2003 Don Hinton + + * ace/os_include/sys/os_select.h: + Rolled back change from Thu Nov 13 23:22:21 UTC 2003 Don Hinton + which was incorrect. The + ACE_HAS_SELECT_H refers to . + +Fri Nov 14 10:50:33 UTC 2003 Johnny Willemsen + + * ace/OS_NS_sys_wait.inl: + Moved the wait method below the waitpid method. After searching for + hours for the internal compiler error MinGW has the solution was + to easy to think of. Because wait calls waitpid it must be below + waitpid in the inline file. This fixes the internal compiler + error in the MinGW build and restores the order of wait and waitpid + to the state before the ACE_OS split up. + +Fri Nov 14 00:42:22 UTC 2003 Don Hinton + + * tests/DLL_Test.cpp: + * tests/DLL_Test_Impl.cpp: + Test for !ACE_LACKS_RTTI to #ifdef away dynamic_cast test. Add + ACE_UNUSED_ARG around dll if ACE_LACKS_RTTI is defined to quash + unused arg warning. + +Thu Nov 13 23:22:21 UTC 2003 Don Hinton + + * ace/os_include/sys/os_select.h: + Added missing #include of select.h when ACE_HAS_SELECT_H is + defined. + + * tests/DLL_Test.cpp: + * tests/DLL_Test_Impl.cpp: + #ifdef away the dynamic_cast test if ACE_LACKS_RTTI is defined. + +Thu Nov 13 16:22:19 2003 Steve Huston + + * configure.ac: Make the check for sys/select.h set + ACE_LACKS_SYS_SELECT_H is _not_ found. Added a check of select.h + that sets ACE_HAS_SELECT_H. Changed further code tests that used + ACE_HAS_SELECT_H to include to use + ACE_LACKS_SYS_SELECT_H instead. + + * m4/config_h.m4: Added AH_TEMPLATE for ACE_LACKS_SYS_SELECT_H. + +Thu Nov 13 19:56:53 UTC 2003 Don Hinton + + * ASNMP/tests/Octet_Test.cpp: + Added #include OS_NS_string.h. + + Thanks to Olli Savia for the following fixes need to + compile ACE on LynxOS. + + * ace/Base_Thread_Adapter.cpp: + Added #include OS_NS_Thread.h if ACE_HAS_TSS_EMULATION is defined. + + * ace/OS_NS_stdlib.cpp: + Added #include OS_NS_stdio.h and OS_NS_sys_stat.h if + ACE_LAKCS_MKTEMP is defined. + + * ace/OS_NS_strings.cpp: + Added #include OS_NS_ctype.h if ACE_LACKS_STRCASECMP is defined. + + * ace/config-lynxos.h: + Added ACE_LACKS_WCHAR_H, ACE_LACKS_REGEX_H, and + ACE_LACKS_TCP_NODELAY. + +Thu Nov 13 12:54:35 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + When defining OBJS, always use $(notdir $(FILES)). + +Thu Nov 13 18:39:15 UTC 2003 Don Hinton + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: + * examples/C++NPv2/TPC_Logging_Server.cpp: + Added #include os_netdb.h to get MAXHOSTNAMELEN. + + * examples/IPC_SAP/SSL_SAP/SSL-client.h: + Fixed typo, missing "ace" in #include path. + + * examples/IPC_SAP/SSL_SAP/SSL-server.cpp: + Added #include OS_NS_select.h. + + * examples/OS/Process/process.cpp: + Added #include OS_NS_stdio.h. + + * examples/QOS/Diffserv/diffserv_test.cpp: + Added #include OS_NS_string.h. + +Thu Nov 13 12:13:28 2003 Chad Elliott + + * bin/DependencyGenerator/DependencyGenerator.pm: + * bin/DependencyGenerator/Preprocessor.pm: + + Changed the behavior of the -n option to only exclude inline files + that are not included by the cpp file being processed. + +Thu Nov 13 17:37:04 UTC 2003 Don Hinton + + * ace/DEV_Addr.{cpp,i}: + Moved #include os_socket.h from .cpp to .i since it is needed + there, removed #include SString.h from .i and added + OS_NS_string.h and Global_Macros.h, then moved the #include's in + .cpp to below the #include of .i so that the inlined and + non-inlined builds would behave the same. + + * ace/SString.i: + Added #include ACE.h if not already included, e.g., when + ACE_TEMPLATES_REQUIRE_SOURCE isn't defined. + +Thu Nov 13 17:39:19 UTC 2003 Craig Rodrigues + + * ace/config-freebsd.h: + Remove #define ACE_SIZEOF_LONG_DOUBLE, since this value + is hardcoded for 32-bit platforms. Dan Eischen + reported that this caused the + Basic_Types_Test to fail on 64-bit FreeBSD platforms. + The correct value for this constant is defined later + on in Basic_Types.h by including . + +Thu Nov 13 11:27:23 2003 Chad Elliott + + * bin/DependencyGenerator/DependencyEditor.pm: + * bin/DependencyGenerator/DependencyGenerator.pm: + * bin/depgen.pl: + + Added an option (-n) to produce dependencies with no inline files. + +Thu Nov 13 17:14:29 UTC 2003 Don Hinton + + * ace/config-WinCE.h: + Added #define ACE_LACKS_ERRNO_H and ACE_LACKS_TIME_H. + + * ace/config-all.h: + * ace/os_include/os_stddef.h: + Fixed typo's in rarely accessed #ifdef'd sections. + +Thu Nov 13 16:18:30 UTC 2003 Don Hinton + + * ace/Sock_Connect.cpp: + Added #include Guard_T.h and Recursive_Thread_Mutex.h when + ACE_HAS_IPV6 is defined. + +Thu Nov 13 16:10:54 UTC 2003 Don Hinton + + * apps/Gateway/Gateway/File_Parser.cpp: + Added #include OS_NS_stdlib.h to fix compile errors on HP. + + * examples/Connection/non_blocking/CPP-acceptor.h: + * examples/Connection/non_blocking/CPP-connector.h: + Added #include Signal.h to fix compile errors on HP. + +Thu Nov 13 16:11:07 UTC 2003 Don Hinton + + * ace/OS_TLI.h: + Fixed a typo by changing the test to determine whether or not to + include os_tcp.h and #undef TCP_NODELY and TCP_MAXSEG to avoid a + conflict with sys/xti.h from ACE_HAS_BROKEN_XTI_MACROS to + ACE_HAS_CONFLICTING_XTI_MACROS. This should fix compile + problems in HP. + + * ace/os_include/netinet/os_tcp.h: + Removed the ACE_HAS_CONFLICTING_XTI_MACROS test that #undef'd + TCP_NODELAY and TCP_MAXSEG. This only needs to be done prior to + including sys/xti.h. + +Thu Nov 13 04:26:17 UTC 2003 Don Hinton + + * include/makeinclude/rules.lib.GNU; + Added # -*- Makefile -*- at the top of the file so emacs will + highlight the syntax. + + * include/makeinclude/rules.local.GNU: + Added explicit shared library with version extension to the + deinstall.local target so that it will get cleaned up even if it + is only defined as SHLIB_UNCHECKED. + +Thu Nov 13 03:32:14 UTC 2003 Don Hinton + + * bin/MakeProjectCreator/templates/gnu.mpd: + Rolled back the part of Wed Nov 12 12:43:14 2003 Chad Elliott + that added a line to realclean to remove + the *_UNCHECKED files. This is unnecessary and doesn't work + with specialized targets, see Wed Nov 12 07:40:27 UTC 2003 Don + Hinton for details. + +Wed Nov 12 16:55:00 2003 Justin Michel + + * ace/NT_Service.h: + * ace/QoS/qos.mpc: + * bin/MakeProjectCreator/config/amh.mpb: + * bin/MakeProjectCreator/config/ami.mpb: + * bin/MakeProjectCreator/config/avstreams.mpb: + * bin/MakeProjectCreator/config/dseventlogadmin.mpb: + * bin/MakeProjectCreator/config/dsnotifylogadmin.mpb: + * bin/MakeProjectCreator/config/global.features: + * bin/MakeProjectCreator/config/mfc.mpb: + * bin/MakeProjectCreator/config/namingexe.mpb: + * bin/MakeProjectCreator/config/notification.mpb: + * bin/MakeProjectCreator/config/notifytest.mpb: + * bin/MakeProjectCreator/config/psdl.mpb: + * bin/MakeProjectCreator/config/qos.mpb: + * bin/MakeProjectCreator/config/rpc.mpb: + * bin/MakeProjectCreator/config/rt_client.mpb: + * bin/MakeProjectCreator/config/rt_server.mpb: + * bin/MakeProjectCreator/config/rteventexe.mpb: + * bin/MakeProjectCreator/config/rteventlogadmin.mpb: + * bin/MakeProjectCreator/config/smart_proxies.mpb: + * bin/MakeProjectCreator/config/ssliop.mpb: + * bin/MakeProjectCreator/config/taoclient.mpb: + * bin/MakeProjectCreator/config/wxwindows.mpb: + * examples/ConfigViewer/ConfigViewer.mpc: + * examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.mpc: + * examples/NT_Service/NT_Service.mpc: + * examples/QOS/Change_Receiver_FlowSpec/QOS_Change_Receiver_FlowSpec.mpc: + * examples/QOS/Change_Sender_TSpec/QOS_Change_Sender_FlowSpec.mpc: + * examples/QOS/Diffserv/QOS_Diffserv.mpc: + * examples/QOS/Simple/QOS_Simple.mpc: + * examples/RMCast/Send_File/RMCast_Send_File.mpc: + * examples/Timer_Queue/Timer_Queue.mpc: + * performance-tests/Misc/Misc.mpc: + * performance-tests/RPC/RPC.mpc: + * performance-tests/Server_Concurrency/Leader_Follower/Server_Concurrency_Leader_Follower.mpc: + * performance-tests/Server_Concurrency/Queue_Based_Workers/Server_Concurrency_Queue_Based_Workers.mpc: + * performance-tests/Synch-Benchmarks/Synch_Benchmarks.mpc: + * performance-tests/Synch-Benchmarks/Base_Test/Synch_Benchmarks_Base_Test.mpc: + * performance-tests/Synch-Benchmarks/Perf_Test/Synch_Benchmarks_Perf_Test.mpc: + * performance-tests/Synch-Benchmarks/Synch_Lib/Synch_Benchmarks_Synch_Lib.mpc: + * performance-tests/TCP/TCP.mpc: + * performance-tests/TTCP/ACE-C++/TTCP_ACE_C++.mpc: + * performance-tests/UDP/UDP.mpc: + + Imported many misc MPC file fixes from the OCI repository. + Imported new mpc and mpb files from the OCI repository. + Added missing #include to ace/NT_Service.h that was used by + macros defined in this file. + +Wed Nov 12 12:43:14 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Added LIB_UNCHECKED and SHLIB_UNCHECKED. Added a line to the + realclean rule that removes BIN_UNCHECKED, LIB_UNCHECKED and + SHLIB_UNCHECKED. + +Wed Nov 12 11:21:55 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug where relative definitions wouldn't be properly + processed on Windows depending on where mwc.pl was run. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Fixed a bug in a warning message. The wrong project name was + being displayed. + +Wed Nov 12 16:44:24 UTC 2003 Don Hinton " + + * ace/OS_NS_sys_time.inl: + Fixed typo. + +Wed Nov 12 15:42:31 UTC 2003 Don Hinton + + * ace/config-macosx.h: + Added #define ACE_LACKS_SEARCH_H. + + * ace/config-vxworks5.x.h: + Added #define ACE_LACKS_WCHAR_H and ACE_LACKS_PWD_H. + + * ace/OS_NS_unistd.inl: + Added #include OS_NS_stdio.h if ACE_LACKS_ACCESS is defined. + Added #include os_unistd.h if VXWORKS or ACE_HAS_WINCE is + define. + + * ace/OS_NS_sys_time.inl: + Added #include OS_NS_time.h if VXWORKS, CHORUS, or ACE_PSOS is + defined. + +Wed Nov 12 09:30:13 UTC 2003 Johnny Willemsen + + * ace/OS_NS_dirent.h: + Added ACE_Export to opendir_emulation + +Wed Nov 12 09:26:48 UTC 2003 Don Hinton + + * include/makeinclude/rules.local.GNU: + Use CLEAN_LIB and CLEAN_SHLIB for the deinstall.local target as + well. + +Wed Nov 12 08:44:54 UTC 2003 Don Hinton + + * performance-tests/SCTP/Makefile: + Moved the BIN variable up to top of file (above + rules.common.GNU), and removed rules.bin.GNU, since the targets + are explicitly defined. Otherwise nothing gets cleanup during + realclean. + +Wed Nov 12 07:40:27 UTC 2003 Don Hinton + + * include/makeinclude/rules.local.GNU: + Added CLEAN_BIN, CLEAN_LIB, CLEAN_SHLIB, and CLEAN_SHLIBA + variables that are assigned the values of BIN or BIN_UNCHECKED, + etc values. Changed the realclean target to use the CLEAN_* + variables instead of the BIN/BIN2, etc., variables. This will + insure that realclean removes these files even if the + ace_components files have already been removed. The *2 variety + were add by David Levine, Mon Apr 12 14:24:28 1999 David + L. Levine , but newer projects, especially + in TAO, have begun using the *_UNCHECKED naming scheme. Since + these files where often dependent on the ace_components files, + they never got cleaned up. This should also obviates the need + for the reverseclean target. + + * netsvcs/Makefile: + Removed ace_components test from around the DIRS variable. You + should always descend into the directories and give them the + opportunity to clean themselves up. + + * netsvcs/clients/Naming/Client/Makefile: + Added use of *_UNCHECKED variables so that these files will get + cleanup during a realclean. + + * tests/Makefile.tests: + Added Service_Config_Test and Framework_Component_Test to the + BIN2 variable if not being built so that they will always get + deleted during a realclean. + +Tue Nov 11 18:48:27 2003 Balachandran Natarajan + + * tests/Map_Manager_Test.cpp: + + Renamed the variable ENTRY to MAP_ENTRY since it was clashing + with system headers. + +Tue Nov 11 18:02:56 2003 Balachandran Natarajan + + * ace/TSS_T.cpp (ts_object): + + Added the change "Mon Nov 10 22:30:14 2003 Kobi Cohen-Arazi + " back into the repo. The actual problem lay + elsewhere. Please see below. + + + The double checked locking optimization in ts_init () was the + culprit. After grabbing the lock, if the check for null pointer + fails, meaning it was already allocated, just return 0 instead + of a -1. This should fix most of the runtime problems that we + saw in the builds today. + +Tue Nov 11 17:25:10 2003 Balachandran Natarajan + + * ace/TSS_T.cpp: + + Reverting the change "Mon Nov 10 22:30:14 2003 Kobi Cohen-Arazi + ". The change is so benign that the problem is + elsewhere. This change just triggered something else. Reverting + this since our daily builds can run properly. + +Tue Nov 11 12:20:14 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Fixed a bug in the implicitly generated dependencies where actual + inter-project dependencies would be abandoned in favor of + implicitly generated dependencies. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Make sure that PWD is set before it is used. + +Tue Nov 11 17:09:46 UTC 2003 Don Hinton + + * bin/fuzz.pl: + Added new check, check_for_makefile_variable, to verify that + MAKEFILE variable is correct and that Makefile's not named just + "Makefile" without an extension, have a MAKEFILE variable. Added + check for spaces around "=" to dependency file check. Added + makefiles to the ID check. + +Tue Nov 11 15:45:23 UTC 2003 Johnny Willemsen + + * ace/OS_NS_stdlib.inl: + Added #include of ace/os_include/os_search.h to get bsearch and other + search functions + + * ace/WFMO_Reactor.i: + Added #include of ace/Thread.h + +Tue Nov 11 15:13:36 UTC 2003 Don Hinton + + * examples/ASX/CCM_App/Makefile: + Added depend and realclean targets to force them to call + Makefile.CCM_App. Updated dependencies. + + * examples/ASX/CCM_App/Makefile.CCM_App: + Added MAKEFILE variable, and updated dependencies. + +Mon Nov 10 17:02:37 2003 Jeff Parsons + + * ace/CDR_Stream.i: + + Added cast to ACE_CDR::Boolean of return values where necessary in + extraction methods, similarly to what is already in insertion + methods. Thanks to Ted Mules for the + resulting warnings on MSVC at warning level 4. This closes + [BUGID:1632]. + +Mon Nov 10 16:43:19 2003 Steve Huston + + * ace/Acceptor.cpp: Add #include "ace/OS_NS_stdio.h" to get sprintf() + and "ace/OS_NS_string.h" to get strdup(). + + * ace/Svc_Conf_l.cpp: Add #include "ace/OS_NS_string.h" for strrchr(). + + * ace/Synch_Traits.h: Add #include "ace/config-all.h" to find the + template and threads config settings. + + * ace/RMCast/RMCast_UDP_Proxy.cpp: + * ace/RMCast/RMCast_IO_UDP.i: Added #include "ace/OS_Memory.h" to + get ACE_NEW_RETURN. + + * netsvcs/lib/Log_Message_Receiver.h: Add #include of either + "ace/Thread_Mutex.h" or "ace/Null_Mutex.h" for the ACE_Guard + template arg (ACE_SYNCH_MUTEX_T). + + * netsvcs/lib/TS_Clerk_Handler.h: Add #include + "ace/os_include/os_dirent.h" to get MAXNAMLEN. + + * netsvcs/lib/TS_Clerk_Handler.cpp: Add #include + "ace/OS_NS_string.h" to get strcat() and "ace/OS_NS_stdio.h" to + get sprintf(). + + * netsvcs/lib/Client_Logging_Handler.cpp: Add #include + "ace/OS_NS_stdio.h" to get ACE_OS::sprintf(). + + * netsvcs/lib/Name_Handler.cpp: Add #include "ace/OS_NS_string.h" to + get ACE_OS::strlen(). + + * netsvcs/clients/Naming/Client/Client_Test.cpp: Add #include + "ace/OS_NS_stdio.h" for ACE_OS::fgets(), "ace/OS_NS_unistd.h" + for ACE_OS::getpid(), "ace/OS_NS_string.h" for strtok(), and + "ace/os_include/os_ctype.h" for isupper()/tolower(). + + * netsvcs/client/Naming/Dump_Restore/Dump_Restore.cpp: Add #include + "ace/OS_NS_string.h", "ace/OS_NS_stdio.h", and "ace/OS_NS_unistd.h" + to get missing ACE_OS functions. + + * tests/Service_Config_DLL.cpp: Add #include "ace/OS_NS_string.h" and + "ace/OS_NS_stdio.h" to get missing ACE_OS functions. + +Mon Nov 10 22:30:14 2003 Kobi Cohen-Arazi + + * ace/TSS_T.cpp: + Fix ts_get and ts_object functions to check ts_init() return value, + and return 0 when ts_init failed. + +Mon Nov 10 20:15:46 UTC 2003 Don Hinton + + * ace/SV_Message_Queue.i: + Added struct to msqid_ds* cast to try to get around compile + error on MacOSX. + + * ace/Semaphore.cpp: + Added #include ACE.h. + + * ace/config-macosx.h: + Added ACE_LACKS_POLL_H. + +Mon Nov 10 16:37:43 UTC 2003 Johnny Willemsen + + * examples/Reactor/WFMO_Reactor/Removals.cpp: + Added #include ace/Event.h to get ACE_Event + +Mon Nov 10 04:37:46 UTC 2003 Don Hinton + + * bin/fuzz.pl: + Added mpb and mpt to the MPC files to check for Id. + + * ACEXML/apps/svcconf/svcconf.mpc: + * ACEXML/common/common.mpc: + * ACEXML/examples/SAXPrint/SAXPrint.mpc: + * ACEXML/parser/parser/parser.mpc: + * ACEXML/tests/tests.mpc: + * Kokyu/Kokyu.mpc: + * Kokyu/tests/DSRT_MIF/DSRT_MIF.mpc: + * Kokyu/tests/EDF/EDF.mpc: + * Kokyu/tests/FIFO/FIFO.mpc: + * ace/ace.mwc: + * ace/QoS/qos.mpc: + * ace/RMCast/rmcast.mpc: + * ace/SSL/ssl.mpc: + * tests/tests.mpc: + * tests/tests.mwc: + * tests/RMCast/acetest.mpb: + * tests/RMCast/tests.mpc: + * tests/SSL/acetest.mpb: + * tests/SSL/tests.mpc: + Fixed FUZZ errors. + +Mon Nov 10 03:56:03 UTC 2003 Don Hinton + + * examples/NT_Service/main.cpp: + * examples/Registry/test_registry_iterator.cpp: + * examples/Registry/test_registry_update.cpp: + Fixed FUZZ errors. + + * examples/NT_Service/main.cpp: + Added #include OS_NS_errno.h. + + * ace/NT_Service.h: + * ace/WFMO_Reactor.h: + Removed #include Synch.h. + + * ace/WFMO_Reactor.cpp: + Added #include Null_Condition.h. + + * ace/WFMO_Reactor.h: + Added #include Auto_Event.h, Manual_Event.h, + Condition_Thread_Mutexc.h, and Lock_Adapter_T.h. + +Mon Nov 10 02:44:59 UTC 2003 Don Hinton + + * ace/IOStream.h: + Readded streams.h needed on Windows. Fixed Fuzz error. + +Mon Nov 10 02:44:59 UTC 2003 Don Hinton + + * ACE.mwc: + * vc7_nightly.mwc: + * ACEXML/ACEXML.mwc: + * ACEXML/apps/apps.mwc: + * ACEXML/examples/examples.mwc: + * ACEXML/parser/parser.mwc: + * ASNMP/examples/examples.mwc: + * Kokyu/tests/tests.mwc: + * apps/Gateway/Gateway.mwc: + * apps/JAWS/JAWS.mwc: + * apps/JAWS/clients/clients.mwc: + * apps/JAWS2/JAWS2.mwc: + * apps/gperf/gperf.mwc: + * examples/ASX/ASX.mwc: + * examples/Connection/Connection.mwc: + * examples/IOStream/IOStream.mwc: + * examples/IPC_SAP/IPC_SAP.mwc: + * examples/Logger/Logger.mwc: + * examples/Mem_Map/Mem_Map.mwc: + * examples/OS/OS.mwc: + * examples/RMCast/RMCast.mwc: + * examples/Reactor/Reactor.mwc: + * examples/Service_Configurator/Service_Configurator.mwc: + * examples/System_V_IPC/System_V_IPC.mwc: + * netsvcs/netsvcs.mwc: + * netsvcs/clients/clients.mwc: + * netsvcs/clients/Naming/Naming.mwc: + * websvcs/websvcs.mwc: + Removed these files from the repo. Most, if not all, of these + files were added to force MPC to create a makefile. MPC has + since been fixed to allow this via the -hierarchy flag. + +Mon Nov 10 01:58:00 UTC 2003 Don Hinton + + * ASNMP/examples/get/get.cpp: + * ASNMP/examples/get/get_async.cpp: + * ASNMP/examples/next/next.cpp: + * ASNMP/examples/set/set.cpp: + * ASNMP/examples/trap/trap.cpp: + * ASNMP/examples/walk/walk.cpp: + * ASNMP/tests/test_config.h: + * ace/Basic_Types.cpp: + * ace/Log_Msg.cpp: + * ace/Log_Record.cpp: + * ace/Logging_Strategy.cpp: + * ace/OS.cpp: + * ace/SString.cpp: + * ace/Token.cpp: + * ace/iosfwd.h: + * apps/JAWS2/JAWS/Cache_Manager_T.cpp: + * apps/mkcsregdb/mkcsregdb.cpp: + * apps/soreduce/Library.h: + * examples/ASX/UPIPE_Event_Server/event_server.cpp: + * examples/C++NPv1/Logging_Client.cpp: + * examples/C++NPv1/Logging_Handler.cpp: + * examples/C++NPv2/Logging_Handler.cpp: + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: + * examples/C++NPv2/Server_Shutdown.cpp: + * examples/C++NPv2/TP_Reactor_Logging_Server.cpp: + * examples/Log_Msg/test_log_msg.cpp: + * examples/Log_Msg/test_ostream.cpp: + * examples/Logger/Acceptor-server/server_loggerd.cpp: + * examples/Reactor/Misc/test_time_value.cpp: + * examples/Reactor/Proactor/test_proactor2.cpp: + * examples/Reactor/Proactor/test_proactor3.cpp: + * examples/Shared_Malloc/test_persistence.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Client.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Server.cpp: + * examples/System_V_IPC/SV_Message_Queues/TMQ_Client.cpp: + * examples/System_V_IPC/SV_Message_Queues/TMQ_Server.cpp: + * examples/Threads/task_three.cpp: + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp: + * performance-tests/SCTP/Options_Manager.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_clt.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_srv.cpp,: + * performance-tests/SCTP/SOCK_STREAM_clt.cpp: + * performance-tests/SCTP/SOCK_STREAM_srv.cpp: + * tests/CDR_File_Test.cpp: + * tests/Log_Msg_Test.cpp: + * tests/Test_Output.cpp: + Fixed FUZZ errors. + + * ace/IOStream.h: + * apps/JAWS/clients/Caching/test_URL.cpp: + * apps/JAWS2/HTTP_10_Parse.cpp + * apps/soreduce/Library.cpp: + * examples/Reactor/Ntalker/ntalker.cpp: + * examples/Reactor/Proactor/test_cancel.cpp: + * examples/Reactor/Proactor/test_proactor.cpp: + * tests/Max_Default_Port_Test.cpp: + * tests/Proactor_Test.cpp: + * tests/TP_Reactor_Test.cpp: + Removed #include streams.h. + + * ace/RMCast/RMCast_Fragment.h: + * ace/RMCast/RMCast_IO_UDP.h: + * ace/RMCast/RMCast_Retransmission.h: + * tests/Lazy_Map_Manager_Test.cpp: + Removed #include Synch.h. + + * ace/Object_Manager.h: + * ace/Svc_Conf_l.cpp: + Removed temporary fix in Object_Manager.h, removed #include of + Object_Manager.h from Svc_Conf_l.cpp, and added #include + Recursive_Thread_Mutex.h, OS_NS_stdio.h, and OS_NS_ctype.h. + + * apps/JAWS/clients/Blobby/Makefile: + * apps/JAWS/clients/Caching/Makefile: + * apps/JAWS/server/Makefile: + * apps/soreduce/Makefile: + Updated dependencies. + + * bin/fuzz.pl: + Fixed typo, should be mwc, not mpw as one of MPC type files. + +Sun Nov 9 20:53:07 UTC 2003 Don Hinton + + * docs/tutorials/002/server.cpp: + * docs/tutorials/005/server.cpp: + * docs/tutorials/006/server.cpp: + * docs/tutorials/007/server.cpp: + * docs/tutorials/022/server.cpp: + Added #include Signal.h. + + * docs/tutorials/003/client.cpp: + Added #include OS_NS_string.h and OS_NS_stdio.h. + + * docs/tutorials/004/client.cpp: + * docs/tutorials/019/shmem.cpp: + * docs/tutorials/020/mmap.cpp: + Added #include OS_NS_stdio.h. + + * docs/tutorials/008/broadcast_client.cpp: + * docs/tutorials/008/directed_client.cpp: + * docs/tutorials/008/server.cpp: + * docs/tutorials/009/server.cpp: + * docs/tutorials/015/Protocol_Stream.cpp: + * docs/tutorials/015/Xmit.cpp: + * docs/tutorials/015/ZlibCompressor.cpp: + * docs/tutorials/015/client.cpp: + Added #include OS_NS_string, and ACE_OS to some memcpy methods, + etc... + + * docs/tutorials/007/thread_pool.h: + Added #include Mutex.h. + + * docs/tutorials/009/broadcast_client.cpp: + * docs/tutorials/009/directed_client.cpp: + Added #include OS_NS_string.h and Time_Value.h. + + * docs/tutorials/010/message_queue.cpp: + * docs/tutorials/010/task.cpp: + * docs/tutorials/011/task.cpp: + * docs/tutorials/016/condition.cpp: + * docs/tutorials/019/server.cpp: + * docs/tutorials/019/server2.cpp: + * docs/tutorials/019/shmem.cpp: + * docs/tutorials/020/mmap.cpp: + * docs/tutorials/020/server.cpp: + * docs/tutorials/020/server2.cpp: + Added #include OS_NS_unistd.h. + + * docs/tutorials/010/task.h: + * docs/tutorials/011/task.h: + * docs/tutorials/012/task.h: + * docs/tutorials/013/task.cpp: + * docs/tutorials/017/Barrier_i.cpp: + Added #include Barrier.h. + + * docs/tutorials/011/message_queue.cpp: + * docs/tutorials/012/message_queue.cpp: + * docs/tutorials/012/task.cpp + Added #include OS_NS_unistd.h and OS_NS_string.h. Added + ACE_OS:: to several strlen methods, etc... + + * docs/tutorials/013/block.h: + Removed #include Synch.h and added #include Lock_Adapter_T.h and + Mutex.h. + + * docs/tutorials/013/mld.h: + * docs/tutorials/017/Barrier_i.h: + Removed #include of Synch.h and added Mutex.h. + + * docs/tutorials/013/task.h: + * docs/tutorials/017/Barrier_i.h: + Added forward declaration of ACE_Barrier. + + * docs/tutorials/013/work.h: + Removed #include Synch.h. + + * docs/tutorials/015/Makefile.client: + * docs/tutorials/015/Makefile.server: + Removed CompressionSocket from FILES and added -lz to LDLIBS. + + * docs/tutorials/016/Condition_i.h: + Removed #include Synch.h and added Thread_Mutex.h, + Condition_Thread_Mutex.h, and Guard_T.h. + + * docs/tutorials/018/Test_T.h: + Added Barrier.h and Mutex.h. + + * docs/tutorials/019/client.cpp: + * docs/tutorials/020/client.cpp: + Added #include os_ctype.h. + + * docs/tutorials/022/Makefile: + Added -I../005 to CPPFLAGS since this tutorial needs to find + client_handler from tutorial 005. + +Sun Nov 9 16:32:28 UTC 2003 Don Hinton + + * bin/fuzz.pl: + Added line feed for dependency check output to make it easier to + read. + +Sun Nov 9 13:27:12 UTC 2003 Johnny Willemsen + + * ace/config-win32-borland.h: + Added ACE_HAS_STD_TEMPLATE_CLASS_MEMBER_SPECIALIZATION + +Sun Nov 9 13:14:12 UTC 2003 Johnny Willemsen + + * ace/Makefile.bor: + Added OS_main + +Sun Nov 9 00:01:22 2003 Balachandran Natarajan + + * bin/fuzz.pl: + + Fixed a typo. "streams" was spelt as "steams". + +Sun Nov 9 04:37:29 UTC 2003 Don Hinton + + * bin/fuzz.pl: + + Removed STDERR from print statements for new checks. They + didn't work well and got the messages out of order. Thanks to + Bala for motivating this. + +Sat Nov 8 22:11:23 2003 Balachandran Natarajan + + * tests/TkReactor_Test.cpp: + + Fixed a compile error by removing cerr. + +Sun Nov 9 04:08:16 UTC 2003 Don Hinton + + * bin/fuzz.pl: + Added extra line feed to the file checks to make them more + readable. Fixed synch check to only pick up Synch.h and + Synch_T.h. + + * */Makefile*: + Updated dependencies. + + * ACEXML/apps/svcconf/Makefile.ACEXML_XML_Svc_Conf_Parser: + * ACEXML/common/Makefile.ACEXML: + * ACEXML/examples/SAXPrint/Makefile.SAXPrint: + * ACEXML/parser/parser/Makefile.ACEXML_Parser: + * ACEXML/tests/Makefile.ContentHandler_Test: + * ACEXML/tests/Makefile.HttpCharStream_Test: + * ACEXML/tests/Makefile.NamespaceSupport_Test: + * ACEXML/tests/Makefile.Transcoder_Test: + Removed DEPENDENCY_FILE variable and updated dependencies. + + * tests/Makefile.libs: + Added depend target to get the other makefiles to update depends. + + * tests/Makefile.Service_Config_DLL: + * tests/Makefile.DLL_Test: + * tests/Makefile.Framework_Component_DLL: + * tests/Makefile.Test_Output: + Added MAKEFILE variable so depend would update dependencies, + then updated them. + + * ace/Synch.cpp: + * ace/Synch.h: + * ace/Synch_T.cpp: + * ace/Synch_T.h: + Added FUZZ: disable check_for_synch_include. + + * apps/JAWS2/HTTP_10_Request.cpp: + Added #include OS_NS_pwd.h. + + * apps/JAWS2/JAWS/Headers.cpp: + * apps/JAWS2/JAWS/Parse_Headers.cpp: + * examples/QOS/Simple/Receiver_QoS_Event_Handler.cpp: + * examples/QOS/Simple/Sender_QoS_Event_Handler.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.cpp: + Added #include OS_NS_string.h. + + * performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.h: + Added #include Barrier.h. + + * examples/Reactor/Proactor/test_aiocb_ace.cpp: + Added #include os_aio.h and OS_NS_string.h. + + * examples/Reactor/Proactor/test_aiosig_ace.cpp: + Added #include os_aio.h, OS_SN_signal.h, OS_NS_unistd.h, + OS_NS_fcntl.h, Asynch_IO.h. + + * ACEXML/common/Mem_Map_Stream.h: + * Kokyu/Dispatcher_Task.cpp: + * Kokyu/tests/DSRT_MIF/MIF.cpp: + * ace/FlReactor.cpp: + * ace/Malloc_Allocator.h: + * ace/PI_Malloc.cpp: + * ace/Sock_Connect.cpp: + * ace/TkReactor.cpp: + * ace/XtReactor.cpp: + * ace/CLASSIX/CLASSIX_CO_Acceptor.cpp: + * ace/CLASSIX/CLASSIX_Port_Core.cpp: + * ace/SSL/SSL_Context.cpp: + * ace/SSL/SSL_SOCK_Connector.cpp: + * apps/Gateway/Gateway/Options.h: + * apps/JAWS/clients/Caching/ID_Generator.h: + * apps/JAWS/server/JAWS_Concurrency.h: + * apps/JAWS/server/JAWS_Pipeline.h: + * apps/JAWS2/JAWS/Cache_Manager_T.h: + * apps/JAWS2/JAWS/Concurrency.h: + * apps/JAWS2/JAWS/Pipeline.h: + * apps/JAWS2/JAWS/Reaper.h: + * apps/JAWS3/jaws3/Concurrency.cpp: + * apps/JAWS3/jaws3/Concurrency_T.cpp: + * apps/JAWS3/jaws3/FILE.cpp: + * apps/JAWS3/jaws3-todo/Reactive_Socket.cpp: + * examples/ASX/CCM_App/SC_Server.cpp: + * examples/ASX/Event_Server/Event_Server/Event_Analyzer.h: + * examples/ASX/Event_Server/Event_Server/Options.cpp: + * examples/ASX/Event_Server/Transceiver/transceiver.h: + * examples/ASX/Message_Queue/buffer_stream.cpp: + * examples/ASX/UPIPE_Event_Server/Event_Analyzer.h: + * examples/ASX/UPIPE_Event_Server/Options.cpp: + * examples/Bounded_Packet_Relay/BPR_Drivers.h: + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: + * examples/C++NPv2/TP_Logging_Server.h: + * examples/C++NPv2/WFMO_Reactor_Logging_Server.cpp: + * examples/Connection/misc/Connection_Handler.h: + * examples/Connection/misc/test_upipe.h: + * examples/IOStream/server/iostream_server.h: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-memclient.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-client.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-server-fancy.cpp: + * examples/Logger/Acceptor-server/server_loggerd.h: + * examples/NT_Service/ntsvc.h: + * examples/QOS/Simple/Fill_ACE_QoS.h: + * examples/Reactor/Misc/notification.cpp: + * examples/Reactor/Misc/test_reactors.cpp: + * examples/Reactor/Proactor/post_completions.cpp: + * examples/Reactor/Proactor/test_end_event_loop.cpp: + * examples/Reactor/Proactor/test_multiple_loops.cpp: + * examples/Reactor/Proactor/test_timeout.cpp: + * examples/Reactor/WFMO_Reactor/Removals.cpp: + * examples/Reactor/WFMO_Reactor/Suspended_Removals.cpp: + * examples/Reactor/WFMO_Reactor/Talker.cpp: + * examples/Shared_Malloc/test_multiple_mallocs.cpp: + * examples/Shared_Malloc/test_position_independent_malloc.cpp: + * examples/Synch/proc_sema.cpp: + * examples/Threads/TSS_Obj.h: + * examples/Threads/TSS_Task.h: + * examples/Threads/recursive_mutex.cpp: + * examples/Threads/task_two.cpp: + * examples/Threads/tss1.cpp: + * examples/Web_Crawler/Mem_Map_Stream.h: + * examples/Web_Crawler/URL_Visitor.h: + * netsvcs/lib/Client_Logging_Handler.h: + * netsvcs/lib/Log_Message_Receiver.cpp: + * netsvcs/lib/Server_Logging_Handler.cpp: + * netsvcs/lib/Server_Logging_Handler_T.h: + * performance-tests/Misc/test_guard.cpp: + * performance-tests/Misc/test_singleton.h: + * performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.h: + * performance-tests/Synch-Benchmarks/synch_driver.cpp: + * performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.cpp: + * performance-tests/Synch-Benchmarks/Base_Test/base_test.cpp: + * performance-tests/Synch-Benchmarks/Base_Test/mutex_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/Adaptive_Lock_Performance_Test_Base.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/adaptive_mutex_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/adaptive_recursive_lock_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/adaptive_sema_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/condb_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/conds_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/context_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/guard_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/memory_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/mutex_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/recursive_lock_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/rwrd_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/rwwr_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/sema_test.cpp: + * performance-tests/Synch-Benchmarks/Synch_Lib/Benchmark_Base.h: + * tests/Buffer_Stream_Test.cpp: + * tests/Cache_Map_Manager_Test.cpp: + * tests/Cached_Accept_Conn_Test.h: + * tests/Cached_Conn_Test.h: + * tests/Framework_Component_DLL.h: + * tests/Future_Set_Test.cpp: + * tests/Future_Test.cpp: + * tests/Lazy_Map_Manager_Test.cpp: + * tests/MT_Reactor_Timer_Test.h: + * tests/Map_Manager_Test.cpp: + * tests/Notify_Performance_Test.cpp: + * tests/Reactor_Performance_Test.h: + * tests/Reactors_Test.cpp: + * tests/Reader_Writer_Test.cpp: + * tests/Recursive_Condition_Test.cpp: + * tests/Recursive_Mutex_Test.cpp: + * tests/Refcounted_Auto_Ptr_Test.cpp: + * tests/Svc_Handler_Test.cpp: + * tests/TP_Reactor_Test.h: + * tests/Test_Output.cpp: + * tests/Thread_Pool_Reactor_Resume_Test.h: + * tests/Thread_Pool_Reactor_Test.h: + * tests/CLASSIX/CLASSIX_Con_Acc_Test.h: + * tests/CLASSIX/CLASSIX_Notify_Test.cpp: + * tests/SSL/Thread_Pool_Reactor_SSL_Test.h: + Removed #include Synch*.h and added need synch includes (most. + almost all, files required no additional includes). + +Sun Nov 9 00:25:57 UTC 2003 Craig Rodrigues + + * ace/QoS/QoS_Session_Impl.cpp: Add include of OS_NS_arpa_inet.h + to unbreak build. + +Sat Nov 8 20:54:53 UTC 2003 Don Hinton + + * bin/fuzz.pl: + Added the following new fuzz checks: + + check_for_dependency_file: Checks to see if the Makefile uses + the DEPENDENCY_FILE variable. If it does, check to see if the + dependency file is in cvs. If not, flag it as an error, since + the realclean target needs the dependencies to properly + function. + + check_for_streams_include: Checks to see if ace/streams.h has + been included since this is an expensive and often unneeded file. + + check_for_OS_h_include: Checks to see if ace/OS.h has been + included. This files is maintained for backward + compatibility but should not be included within ACE+TAO since + it is expensive and often unneeded--include the OS_NS*.h files + instead. + + check_for_synch_include: Checks to see if ace/Synch.h or + ace/Synch_T.h have been included. These files are maintained + for backward compatibility but should not be included within + ACE+TAO since they are expensive and often unneeded--include + the specific synch file instead, e.g., ace/Null_Mutex.h. + + Added the *.mpc and *.mwc files to the check_for_id_string + test. + +Sat Nov 8 04:52:30 UTC 2003 Don Hinton + + * apps/soreduce/Library.h: + Added #include streams.h + +Sat Nov 8 04:11:17 UTC 2003 Don Hinton + + * ace/OS_main.h + * ace/OS_main.cpp: + Fixed last checkin on Windows and WINCE. This involved adding a + pure virtual method and implementing it in a derived class in + the macro and having it call the users entry point on Windows. + Otherwise the ACE dll complained about unresolved externals when + linking. + +Fri Nov 7 23:29:02 UTC 2003 Don Hinton + + * ace/OS_main.h + * ace/OS_main.cpp: + Added class to get around problems on Windows. This is a + first cut. If it works out, I'll clean it up. + +2003-11-07 Emre Turkay + + * ace/config-win32-msvc.h: + Added QT_DLL definition. + +Fri Nov 7 21:09:01 UTC 2003 Don Hinton + + * ace/Makefile.ace: + * ace/ace.mpc: + * ace/OS.cpp: + * ace/OS_main.h + * ace/OS_main.cpp: + Added new file, OS_main.cpp, and restructured the "main" macros + to call real functions the now live in OS_main.cpp. Added + OS_main.cpp to the makefiles and OS.cpp. + +Fri Nov 7 15:21:49 2003 Steve Huston + + * ace/Connector.cpp: Added #include "ace/os_include/os_fcntl.h" to + get ACE_NONBLOCK, "ace/OS_NS_stdio.h" to get ACE_OS::sprintf(), and + "ace/OS_NS_string.h" to get ACE_OS::strdup(). + + * ace/Service_Config.h: + * ACEXML/common/URL_Addr.h: Added #include "ace/Default_Constants.h" to + see ACE_DEFAULT_SERVICE_REPOSITORY_SIZE. + + * ace/Codeset_Registry.cpp: + * ace/Local_Name_Space.cpp: + * ace/Local_Name_Space_T.cpp: + * ace/Module.i: + * ace/Name_Space.cpp: + * ace/Naming_Context.cpp: + * ace/Obstack_T.cpp: + * ace/Parse_Node.cpp: + * ace/Remote_Name_Space.cpp: + * ace/Service_Config.i: + * ace/Service_Manager.cpp: + * ace/Service_Types.cpp: + * ace/Stream.cpp: + * ace/Svc_Conf_y.cpp: + * ace/UUID.cpp: + * ace/RMCast/RMCast_Partial_Message.cpp: + * ACEXML/common/AttributesImpl.i: + * ACEXML/common/Encoding.cpp: + * ACEXML/common/Exception.cpp: + * ACEXML/common/HttpCharStream.cpp: + * ACEXML/common/NamespaceSupport.cpp: + * ACEXML/common/SAXExceptions.cpp: + * ACEXML/common/StrCharStream.cpp: + * ACEXML/common/StreamFactory.cpp: + * ACEXML/common/Transcode.cpp: + * ACEXML/common/URL_Addr.{inl cpp}: + * ACEXML/common/XML_Codecs.cpp: + * ACEXML/parser/parser/Parser.cpp: + * ACEXML/tests/ContentHandler_Test.cpp: + * ACEXML/tests/Transcorder_Test.cpp: Add #include "ace/OS_NS_string.h" + to see ACE_OS::strcmp() and friends. + + * ace/RMCast/RMCast_Reordering.cpp: Added #include "ace/Guard_T.h" to + see ACE_Guard. + + * ACEXML/tests/HttpCharStream_Test.cpp: + Added #include "ace/OS_NS_stdio.h" to get ACE_OS::printf(). + +Fri Nov 7 11:21:57 2003 Balachandran Natarajan + + * ace/CDR_Stream.cpp: + + Fixed a typo in the comments. + + * ace/Message_Block.cpp: + + Removed unnecessary lines. + +Fri Nov 7 17:11:15 UTC 2003 Don Hinton + + * ace/Dev_Poll_Reactor.cpp: + Added #include of os_poll.h and OS_NS_sys_mman.h. + + * ace/OS_NS_string.inl: + Added #include of os_string.h. + + * ace/OS_NS_wchar.{h,inl}: + Added #ifdef ACE_HAS_WCHAR around fgetwc() declaration as well + as some cosmetic changes, #ifdef indentation. + +Fri Nov 7 11:28:39 2003 Steve Huston + + * tests/Vector_Test.cpp: Added tests of the equality and inequality + operators. + +Fri Nov 7 06:50:49 UTC 2003 Don Hinton + + * Kokyu/Makefile.Kokyu: + * ace/Makefile.ace: + * ace/RMCast/Makefile: + * apps/Gateway/Gateway/Makefile: + * apps/Gateway/Peer/Makefile: + * apps/drwho/Makefile: + * apps/gperf/src/Makefile: + * apps/gperf/tests/Makefile: + * examples/ASX/CCM_App/Makefile: + * examples/ASX/Event_Server/Event_Server/Makefile: + * examples/ASX/Event_Server/Transceiver/Makefile: + * examples/ASX/Message_Queue/Makefile: + * examples/ASX/UPIPE_Event_Server/Makefile: + * examples/C++NPv1/Makefile: + * examples/Connection/misc/Makefile: + * examples/Connection/non_blocking/Makefile: + * examples/IOStream/client/Makefile: + * examples/IOStream/server/Makefile: + * examples/IPC_SAP/DEV_SAP/reader/Makefile: + * examples/IPC_SAP/DEV_SAP/writer/Makefile: + * examples/IPC_SAP/FIFO_SAP/Makefile: + * examples/IPC_SAP/FILE_SAP/Makefile: + * examples/IPC_SAP/SOCK_SAP/Makefile: + * examples/IPC_SAP/SPIPE_SAP/Makefile: + * examples/IPC_SAP/TLI_SAP/Makefile: + * examples/IPC_SAP/UPIPE_SAP/Makefile: + * examples/Log_Msg/Makefile: + * examples/Logger/Acceptor-server/Makefile: + * examples/Logger/client/Makefile: + * examples/Logger/simple-server/Makefile: + * examples/Map_Manager/Makefile: + * examples/Mem_Map/IO-tests/Makefile: + * examples/Mem_Map/file-reverse/Makefile: + * examples/Misc/Makefile: + * examples/Naming/Makefile: + * examples/RMCast/Send_File/Makefile: + * examples/Reactor/Dgram/Makefile: + * examples/Reactor/FIFO/Makefile: + * examples/Reactor/Misc/Makefile: + * examples/Reactor/Multicast/Makefile: + * examples/Reactor/Ntalker/Makefile: + * examples/Service_Configurator/IPC-tests/client/Makefile: + * examples/Service_Configurator/IPC-tests/server/Makefile: + * examples/Shared_Malloc/Makefile: + * examples/Shared_Memory/Makefile: + * examples/Synch/Makefile: + * examples/System_V_IPC/SV_Message_Queues/Makefile: + * examples/System_V_IPC/SV_Semaphores/Makefile: + * examples/System_V_IPC/SV_Shared_Memory/Makefile: + * examples/Threads/Makefile: + * examples/Timer_Queue/Makefile: + * netsvcs/clients/Logger/Makefile: + * netsvcs/clients/Naming/Client/Makefile: + * netsvcs/clients/Naming/Dump_Restore/Makefile: + * netsvcs/clients/Tokens/collection/Makefile: + * netsvcs/clients/Tokens/deadlock/Makefile: + * netsvcs/clients/Tokens/invariant/Makefile: + * netsvcs/clients/Tokens/mutex/Makefile: + * netsvcs/clients/Tokens/rw_lock/Makefile: + * netsvcs/lib/Makefile: + * netsvcs/servers/Makefile: + * performance-tests/Misc/Makefile: + * performance-tests/SCTP/Makefile: + * performance-tests/Server_Concurrency/Leader_Follower/Makefile: + * performance-tests/Server_Concurrency/Queue_Based_Workers/Makefile: + * performance-tests/TCP/Makefile: + * performance-tests/UDP/Makefile: + * tests/Makefile.tests: + * tests/RMCast/Makefile: + * websvcs/lib/Makefile: + * websvcs/tests/Makefile: + Updated dependencies. + +Fri Nov 7 02:08:17 UTC 2003 Don Hinton + + * ace/SOCK_Dgram.i: + Use ACE_reinterpret_cast instead of a raw "C" style cast. Gets + rid of a warning on HPUX. + +Fri Nov 7 00:51:59 UTC 2003 Don Hinton + + * ace/INET_Addr.cpp: + Added #ifdef around IPV6 specific code to remove errors on + platforms where AV_INET6 is not defined. Changed and instance + of ACE_OS_String to ACE_OS. + + * ace/Sock_Connect.cpp: + Added #ifdef around IPV6 specific code to remove errors on + platforms where AV_INET6 is not defined. + + * ace/os_include/sys/os_resource.h: + Added #includes of sys/syscall.h and sys/systemino.h if + ACE_HAS_SYSCALL_H and ACE_HAS_SYSINFO are defined respectively. + This should clear up errors on HPUX. + + * examples/IOStream/server/iostream_server.cpp: + Added #include of Signal.h. + +Thu Nov 6 17:04:22 2003 Balachandran Natarajan + + * ace/INET_Addr.cpp (set_address): + + Applied patches from Bryan Buesker which basically just changes + the semantics of ACE_INET_Addr::set_address when map is set to + 1. Previously, if map was non-zero, len was 4, and the type was + already set to AF_INET for the ACE_INET_Addr, then the address + would not be set to an IPv4-mapped IPv6 address. It is probably + more desirable for the map argument to force the address to be + an IPv4 mapped IPv6 address in this case (regardless of the + current type of the address). + +Thu Nov 6 17:57:10 UTC 2003 Don Hinton + + * ace/OS_Log_Msg_Attributes.h: + * ace/Basic_Types.h: + Moved #include config-all.h outside header guard to avoid circular + include problem due to including OS_main.h in config-all.h on + Windows. + + * ace/Base_Thread_Adapter.h: + * ace/Cleanup.h: + * ace/Global_Macros.h: + * ace/OS_Dirent.h: + * ace/OS_Errno.h: + * ace/OS_Log_Msg_Attributes.h: + * ace/OS_Memory.h: + * ace/OS_NS_Thread.h: + * ace/OS_QoS.h: + * ace/OS_String.h: + * ace/OS_Thread_Adapter.h: + * ace/Object_Manager_Base.h: + * ace/Thread_Hook.h: + * ace/Time_Value.h: + * ace/os_include/os_pthread.h: + Changed the rest of the #include OS_Export.h to ACE_export.h and + ACE_OS_Export to ACE_Export. + +Thu Nov 6 17:53:35 UTC 2003 Don Hinton + + * ace/INET_Addr.{h,i} (set_addr): + Removed the default parameter for map and added back the + original set_addr method that matches the one in ACE_Addr, and + have it call the new method with the default value under the + covers. This silences warnings about hidden methods. + +Thu Nov 6 16:40:35 UTC 2003 Don Hinton + + * ACEXML/common/FileCharStream.h: + * ACEXML/common/HttpCharStream.h: + * apps/soreduce/Library.h: + Removed #include of streams.h. + + * ace/ACE_export.h: + Moved the #include of config-all.h up and outside the + ACE_EXPORT_H include guard to avoid circular include problems on + Windows caused by including OS_main.h in config-all.h to pick up + the main macros. OS_main.h includes Object_Manager.h. + +Thu Nov 6 10:12:50 2003 Balachandran Natarajan + + * ace/INET_Addr.cpp: + + Added patch from Bryan Bruesker to use ACE_OS::if_nametoindex () + instead of plain if_nametoindex (). + +Thu Nov 6 09:50:34 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + + Added information about generating GNUACE projects that will only + build static libraries. + +Thu Nov 6 12:46:12 UTC 2003 Johnny Willemsen + + * ace/RMCast/RMCast.rc: + Added resource file for the RMCast library. Thanks to + Andrew L. Shwaika for supplying this. + +Thu Nov 6 10:20:23 UTC 2003 Johnny Willemsen + + * apps/JAWS/server/HTTP_Server.cpp: + Added include of Signal.h. + +Thu Nov 6 07:57:43 UTC 2003 Johnny Willemsen + + * ace/Static_Object_Lock.h: + Corrected pre.h to post.h + +Thu Nov 6 07:37:13 UTC 2003 Johnny Willemsen + + * ASNMP/asnmp/smival.h: + * ASNMP/agent/agent_impl.cpp: + Added os_include/os_stddef.h to get size_t + +Thu Nov 6 07:31:12 UTC 2003 Johnny Willemsen + + * examples/Connection/blocking/SPIPE-acceptor.cpp: + * examples/Connection/blocking/SPIPE-connector.h: + Added include of Signal.h. + +Thu Nov 6 04:53:54 UTC 2003 Don Hinton + + * ace/OS_NS_dlfcn.inl: + Removed ACE_OS from strerror call in an HP #ifdef that I had + erroneously added during subsetting--it was obviously like that + for a reason... + + * ace/OS_TLI.h: + Add #include of os_tcp.h before #include of sys/xti.h if + ACE_HAS_BROKEN_XTI_MACROS is defined. This error arose due to + the different order of includes after subsetting. + + * ace/SString.h: + Changed #include streams.h to iosfwd.h. Due to the change in + the order of includes, we are now getting errors on SuSE due to + ceil and floor already being declared. This is not a final fix, + but is necessary to keep the stats builds running. + +Wed Nov 5 19:02:51 2003 Balachandran Natarajan + + * ace/CDR_Stream.cpp (clone_from): + + Fixed an alignment problem under the following conditions + + - The incoming CDR buffer has a message of size exactly 1024 + bytes. + + - The data block within the message block in the destination CDR + is not aligned on an 8 byte boundary. + + This lead to improper copying. The problem was that the call + clone () on the source data block returned exactly 1024 bytes + and in addition could potentially (which is the destination) + could be aligned on a 4 byte boundary. This made the destination + buffer to get aligned on a 8 byte boundary and lose 4 bytes of + space which lead to improper copying of the source + buffer. Thanks to Jian Chen for reporting + the problem. + + The above problem now been fixed by doing an additional size + increment on the cloned datablock. We have also added a small + optimization. We don't always clone the data block. We do it only + if the size of the source buffer is larger than the size of the + destination buffer. This should lead to a small increase in + performance since we are avoiding an allocation along the + critical path. + + I haven't received a response yet from Jian on whether this + patch solves his problem. But I am positive that this would + help. + +Wed Nov 5 18:52:01 2003 Balachandran Natarajan + + * ace/OS_NS_sys_socket.h: + + #include'd os_include/net/os_if.h to get the definitions of + if_nametoindex () if_indextoname () etc. + +Wed Nov 5 23:45:09 UTC 2003 Don Hinton + + * ace/OS_NS_sys_socket.inl: + Fixed FUZZ error. + +Wed Nov 5 18:16:40 2003 Steve Huston + + * ace/ARGV.i: Added #include "ace/Global_Macros.h" to find ACE_TRACE. + + * ace/Global_Macros.h: Added #include "ace/OS_Errno.h" near the + ACE_ALLOCATOR* and ACE_NEW* macros to see errno and ENOMEM. + + * ace/ACE.cpp: Added #include "ace/OS_NS_string.h" to find + ACE_OS::strlen(). + + * ace/Capabilities.cpp: Added #include "ace/os_includes/os_ctype.h" + to get isdigit(), "ace/OS_Memory.h" to get ACE_NEW_RETURN, and + "ace/OS_NS_string.h" to get ACE_OS::strcmp(). + + * ace/Configuration.cpp: + * ace/Configuration_Import_Export.cpp: + * ace/DLL_Manager.cpp: + * ace/Filecache.cpp: + * ace/Get_Opt.cpp: + * ace/Process.{cpp i} + * ace/SString.cpp: + * ace/UPIPE_Stream.cpp: Added #include "ace/OS_NS_string.h" to pick + up ACE_OS string functions. + + * ace/Based_Pointer_Repository.cpp: + * ace/Filecache.cpp: + * ace/Local_Name_Space_T.cpp: + * ace/Malloc_T.h: + * ace/Object_Manager.cpp: + * ace/Process_Manager.cpp: + * ace/Reactor.cpp: + * ace/Select_Reactor_T.cpp: + * ace/Signal.cpp: + * ace/Singleton.cpp: + * ace/Svc_Conf_l.cpp: + * ace/Thread_Exit.cpp: + * ace/Thread_Manager.cpp: + * ace/Timer_Heap_T.cpp: + * ace/Timer_Queue_T.cpp: + * ace/UUID.cpp: Added #include "ace/Guard_T.h" to find ACE_Guard. + + * ace/DEV_Addr.cpp: + * ace/FILE_Addr.cpp: + * ace/SPIPE_Addr.cpp: Added #include "ace/OS_NS_string.h" to get + ACE_OS functions and "ace/os_include/sys/os_socket.h" to get + AF_DEV, etc. defs. + + * ace/Log_Msg.cpp: Added #include "ace/OS_NS_stdio.h" to pick up + ACE_OS::snprintf() and "ace/Guard_T.h" to find ACE_Guard. + * ace/SString.h: Added #include "ace/streams.h" if + !ACE_LACKS_IOSTREAM_TOTALLY to pick up the correct ostream type. + + * ace/Process_Manager.h: Add #include "ace/Time_Value.h" to get the + ACE_Time_Value class and member defs needed. + + * ace/Sock_Connect.cpp: Added #include "ace/OS_NS_string.h", + "ace/OS_NS_unistd.h" and "ace/OS_NS_stdlib.h" and "ace/OS_Memory.h" + to get missing functions. + + * ace/Thread_Adapter.cpp: Added #include "ace/Object_Manager_Base.h" to + get ACE_OS_Object_Manager class. + + * ace/Time_Request_Reply.cpp: Added #include + "ace/os_include/netinet/os_in.h" to get htonl(), ntohl(). + + * ace/TP_Reactor.cpp: Added #include "ace/OS_NS_sys_time.h" to get + ACE_OS::gettimeofday() and "ace/Log_Msg.h" to get logging macros. + + * ace/TP_Reactor.h: Added #include "ace/Timer_Queue.h" so IBM Visual + Age C++ can see the whole ACE_Timer_Queue type for template reasons. + + * ace/Timer_Queue.h: Add #include of either + ace/Recursive_Thread_Mutex.h or ace/Null_Mutex.h based on + ACE_HAS_THREADS. IBM Visual Age C++ needs to see the complete + type. + + * ace/Parse_Node.cpp: Added #include "ace/ACE.h" to see ACE::debug(). + + * netsvcs/lib/TS_Clerk_Handler.h: Added #include "ace/Null_Mutex.h". + +Wed Nov 5 23:26:11 UTC 2003 Don Hinton + + * ace/config-all.h: + Added #include of OS_main.h to pick up the main macros that + handle instantiating ACE_Object_Manager when + ACE_HAS_NONSTATIC_OBJECT_MANAGER is defined. Thanks to Justin + Michel for identifying the problem and + suggesting the solution. + +Wed Nov 5 21:47:35 UTC 2003 Don Hinton + + * ace/OS_NS_Thread.h: + Changed export declaration for rwlock_init() to + ACE_NAMESPACE_INLINE_FUNCTION to fix link errors on Windows. + + * ace/OS_NS_time.h: + Changed export declaration for gmtime_r() to + ACE_NAMESPACE_INLINE_FUNCTION to fix link errors on Windows. + +Wed Nov 5 21:22:45 UTC 2003 Don Hinton + + * ace/OS_NS_stdio.h: + Changed export declaration for + default_win32_security_attributes(), + fopen_mode_to_open_mode_converter(), and fputs() to + ACE_NAMESPACE_INLINE_FUNCTION to fix link errors on Windows. + + * ace/OS_NS_stropts.h: + Changed export declaration for getmsg(), getpmsg(), and + fattach() to ACE_NAMESPACE_INLINE_FUNCTION to fix link errors on + Windows. + +Wed Nov 5 15:09:00 2003 Justin Michel + + * apps/gperf/src/gperf.cpp: + + Added missing #include "ace/OS_main.h" + +Wed Nov 5 19:03:20 UTC 2003 Don Hinton + + * ace/ACE.cpp: + Added #include of OS_NS_poll.h if ACE_HAS_POLL and + ACE_HAS_LIMITED_SELECT are defined. Thanks to Andrew G. Harvey + for reporting this. + + * ace/TLI.cpp: + Added #include of OS_NS_sys_socket.h to pickup opthdr. Thanks + again to Andrew G. Harvey for reporting this. + + * ace/INET_Addr.cpp: + Added ACE_UNUSED_ARG wrapper around the map variable when + ACE_HAS_IPV6 isn't defined to get rid of warning. + + * ace/Log_Msg.cpp: + Changed #ifdef to include Object_Manager_Base.h if ACE_MT_SAFE + != 0 (instead of == 0) instead of Object_Manger.h. + + * ace/Object_Manager.h: + * ace/Static_Object_Lock.h: + Added new file, Static_Object_Lock.h, and moved + ACE_Static_Object_Lock.h there to help reduce need to include + Object_Manger.h. + + * ace/Reactor.cpp: + Made #includes of Reactor implementations conditional on usage. + Removed #include of Reactor_Impl.h and Handle_Set.h + (Handle_Set.h isn't needed and Reactor_Impl.h doesn't need to be + read again). Include Static_Object_Lock.h instead of + Object_Manager.h. + + * OS.i: + * ace/os_include/os_pwd.h: + * ace/os_include/os_stdlib.h: + * ace/os_include/os_time.h: + Moved remaining functions prototypes for AIX and Digital Unix to + the appropriate places. + +Wed Nov 5 11:58:04 2003 Douglas C. Schmidt + + * ace/SOCK_Dgram_Mcast.cpp, + * ace/Asynch_Connector.cpp, + * ace/INET_Addr.cpp, + * ace/OS.h, + * ace/OS.i, + * ace/Sock_Connect.n, + * ace/Sock_Connect.i, + * ace/SOCK_Dgram.i, + * ace/SOCK_Dgram.cpp, + * ace/SOCK_Dgram_Mcast.h, + * ace/SOCK_Dgram_Mcast.cpp, + * ace/SOCK_SEQPACK_Acceptor.cpp, + * ace/OS_NS_sys_socket.{h,inl}: + Finished adding IPv6 support to ACE. The main addition is + support for UDP multicast over IPv6 for Linux. Thanks to Brian + Buesker for contributing this. + +Wed Nov 5 15:28:30 UTC 2003 Don Hinton + + * tests/Multihomed_INET_Addr_Test.cpp: + Added ACE_OS to a couple more memcmp's I missed last time. + +Wed Nov 5 14:53:19 UTC 2003 Don Hinton + + * ace/Multihomed_INET_Addr.{h,cpp}: + Removed some "/**/" comments from normal #include statements so + these includes can be picked up by doxygen. This is a doxygen + "feature" that excludes includes from documentation that have an + unknown character. + + * ace/Synch.cpp: + * ace/Thread_Mutex.cpp: + * ace/RW_Thread_Mutex.cpp: + Moved the explicit template instantiations from Synch.cpp to + these files since Synch.cpp is not always compiled. + + * tests/Multihomed_INET_Addr_Test.cpp: + Added ACE_OS to a memcmp call to fix a compile error. + +Wed Nov 5 14:08:59 UTC 2003 Johnny Willemsen + + * ace/config-win32-mingw.h: + Added defines ACE_LACKS_TERMIOS_H and ACE_LACKS_NETINET_TCP_H + +Wed Nov 5 13:18:33 UTC 2003 Johnny Willemsen + + * ace/config-cygwin32.h: + Removed ACE_LACKS_SYS_MSG_H + + * ace/config-win32-mingw.h: + Added ACE_LACKS_SYS_SHM_H + + * ace/Flag_Manip.cpp: + Added os_include/os_termios.h for Cygwin build + + * ace/IO_Cntl_Msg.h: + Added os_include/os_stddef.h to get size_t + + * ace/OS_NS_stdio.h: + Added os_include/os_unistd.h for Cygwin build + + * ace/Proactor.h: + Added os_include/os_stddef.h and os_include/os_signal.h for + Cygwin + + * ace/os_include/os_signal.h: + * ace/OS_NS_signal.h + Moved ACE_SIGNAL_C_FUNC from os_signal.h to OS_NS_Signal.h because + with Cygwin siginfo_t is defined in OS_NS_Signal.h + +Wed Nov 5 10:04:12 UTC 2003 Johnny Willemsen + + * ace/README: + * ace/config-all.h: + * ace/config-win32-borland.h: + Changed my solution for the explicit std:: namespace I made this + morning. Making ACE_STD_NAMESPACE dependent of + ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB breaks other compilers, so + introduced the new define ACE_USES_EXPLICIT_STD_NAMESPACE which + defines how ACE_STD_NAMESPACE is expanded. Set this define in the + Borland config file only. + +Wed Nov 5 09:40:19 UTC 2003 Johnny Willemsen + + * examples/IPC_SAP/SOCK_SAP/CPP-unclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-unserver.cpp: + * examples/NT_Service/main.cpp: + * examples/Reactor/Proactor/simple_test_proactor.cpp: + * examples/Reactor/Proactor/test_proactor2.cpp: + * examples/Reactor/Proactor/test_timeout_st.cpp: + * examples/Reactor/WFMO_Reactor/Console_Input.cpp: + * examples/Reactor/WFMO_Reactor/Handle_Close.cpp: + * examples/Reactor/WFMO_Reactor/Network_Events.cpp: + * examples/Reactor/WFMO_Reactor/Prerun_State_Changes.cpp: + Added #include of OS_main.h to get ACE_TMAIN macro + + * examples/Threads/wfmo.cpp: + Added #include of OS_main.h to get ACE_TMAIN macro and + OS_NS_unistd.h to get ACE_OS::sleep. + +Wed Nov 5 07:53:19 UTC 2003 Johnny Willemsen + + * ace/Dev_Poll_Reactor.cpp: + * ace/Name_Space.h: + Fixed fuzz errors + +Wed Nov 5 07:46:12 UTC 2003 Johnny Willemsen + + * ARGV.h: + Define a private copy constructor and assignment operator. The + compiler generated versions will not work correctly so prevent + copying of an instance. + + * config-win32.h: + Moved the check for __BORLANDC__ above the check for _MSC_VER. The + preview Borland compilers defines both, but we must include in that + case the Borland config file. + + * Connector.{h,cpp}: + Moved include of Handle_Set.h from cpp to h file. We really need + it in the header file. + + * config-all.h: + Because ACE_OS is now a namespace we encountered a problem with the + Borland compilers. In ACE_OS::fclose() we did call ::fclose() but + the Borland compiler now gives an ambiguity between ACE_OS::fclose() + and std::fclose(). To fix this we added ACE_STD_NAMESPACE which + is set to std when ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB is defined + to 1. In other cases we let ACE_STD_NAMESPACE be nothing. In + ACE_OS::fclose() we program now ACE_STD_NAMESPACE::fclose() so that + when using Borland this expands to std::fclose(), in other cases to + ::fclose(). + + * OS_NS_stdio.inl: + * OS_NS_time.cpp: + * OS_NS_time.inl: + * OS_NS_wchar.inl: + Use ACE_STD_NAMESPACE for the method which appear in ACE_OS and std + +Wed Nov 5 05:33:44 UTC 2003 Don Hinton + + * ACEXML/common/FileCharStream.cpp: + Added #include OS_NS_wchar.h when ACE_USES_WCHAR is defined. + + * examples/Reactor/WFMO_Reactor/Console_Input.cpp: + * examples/Reactor/WFMO_Reactor/Directory_Changes.cpp: + * examples/Reactor/WFMO_Reactor/Multithreading.cpp: + * examples/Reactor/WFMO_Reactor/Registration.cpp: + Added #included needed on Windows due to recent subsetting. + +Tue Nov 04 19:37:31 2003 Nanbor Wang + + * COPYING: Modified to include CIAO in the Copyright disclaimer. + Thanks to Roland Schimmack for motivating the change. + +Wed Nov 5 01:23:08 UTC 2003 Don Hinton + + * apps/Gateway/Gateway/Event_Channel.cpp: + * apps/Gateway/Gateway/Gateway.cpp: + * apps/Gateway/Peer/Peer.cpp: + * netsvcs/lib/Name_Handler.cpp: + * netsvcs/lib/Server_Logging_Handler_T.cpp: + * netsvcs/lib/TS_Server_Handler.cpp: + * tests/Multicast_Test.cpp: + * tests/Process_Manager_Test.cpp: + * examples/ASX/Event_Server/Event_Server/event_server.cpp: + * examples/ASX/Event_Server/Transceiver/transceiver.cpp: + * examples/ASX/UPIPE_Event_Server/event_server.cpp: + * examples/Connection/misc/Connection_Handler.cpp: + * examples/Connection/non_blocking/CPP-acceptor.cpp: + * examples/Connection/non_blocking/CPP-connector.cpp: + * examples/Logger/simple-server/server_loggerd.cpp: + * examples/Reactor/Misc/notification.cpp: + * examples/Reactor/Misc/test_demuxing.cpp: + * examples/Reactor/Misc/test_signals_1.cpp: + * examples/Service_Configurator/IPC-tests/server/server_test.cpp: + * examples/Threads/task_three.cpp: + * examples/Threads/thread_manager.cpp: + * examples/Threads/thread_specific.cpp: + Added #include of Signal.h. + + * examples/Reactor/Misc/pingpong.cpp: + Added #include of Null_Mutex.h. + + * examples/C++NPv2/Logging_Event_Handler_Ex.cpp: + Added #include of ace/Timer_Queue.h. + +Wed Nov 5 00:56:43 UTC 2003 Don Hinton + + * Process_Manager.cpp: + Added #include of OS_NS_sys_time.h: + + * ace/Reactor_Impl.h: + Added #include of Time_Value.h. + +Wed Nov 5 00:28:47 UTC 2003 Don Hinton + + * ace/OS_Dirent.h: + * ace/OS_Memory.h: + * ace/OS_String.h: + * ace/OS_TLI.h: + * ace/config-all.h: + Moved the #defines of ACE_OS_String, ACE_OS_Memory, + ACE_OS_Dirent, and ACE_OS_TLI to config-all.h. This makes it + easier for older code that may still use these old class names + to continue to compile even though the header refactoring has + eliminated the old empty headers. + +Tue Nov 4 16:03:06 2003 Ossama Othman + + * ace/Makefile.am (HEADER_FILES): + + Added new Timer_Queuefwd.h header to this list. + +Tue Nov 4 15:35:30 2003 Ossama Othman + + * tests/Conn_Test.cpp: + + Include "ace/Signal.h". Necessitated by inter-header dependency + reductions. + +Tue Nov 4 14:36:59 2003 Ossama Othman + + * ace/Array_Base.cpp: + + Check if _MSC_VER macro is defined prior to checking if + it is defined to a specific value. Addresses warnings in some + g++ configurations. + + * ace/Asynch_Pseudo_Task.h: + + Nuked trailing whitespace. + + * ace/CDR_Base.cpp (swap_4_array): + + Fixed problem where byte swapping code for arrays containing 4 + byte elements on platforms with 8 byte alignment was not + enabled. + + * ace/Connector.cpp: + + Include "ace/Handle_Set.h". Necessitated by inter-header + dependency reductions. + + * ace/Dev_Poll_Reactor.cpp: + + Include "ace/Signal.h". Necessitated by inter-header dependency + reductions. + + * ace/Name_Space.h: + + Forward declare the ACE_Unbounded_Set and + ACE_Unbounded_Set_Iterator template classes instead of including + "ace/Unbounded_Set.h". + + No need to include "ace/Name_Proxy.h". + + * ace/Naming_Context.h: + + No need to include "ace/SString.h", "ace/Containers.h" and + "ace/Name_Proxy.h". + + * ace/OS_NS_string.h: + + No need to forward declare ACE_Time_Value. + + * ace/Process_Manager.h: + + No need to include "ace/Reactor.h". A forward declaration for + ACE_Reactor is enough. + + * ace/Process_Manager.cpp: + + Include "ace/Reactor.h" to pull in ACE_Reactor class + declaration. + + * ace/Reactor.h: + + Include new "ace/Timer_Queuefwd.h" header instead of + "ace/Timer_Queue.h". Forward declarations are enough. + + No need to include "ace/Signal.h". Forward declarations for + ACE_Sig_{Action,Handler,Set} are enough. + + No need to include "ace/Handle_Set.h". Forward declaring + ACE_Handle_Set is enough. + + * ace/Reactor.i: + + No need to include "ace/Handle_Set.h". The forward declaration + in "ace/Reactor.h" is enough. + + * ace/Reactor_Impl.h: + + Include new "ace/Timer_Queuefwd.h" header instead of + "ace/Timer_Queue.h". Forward declarations are enough. + + No need to include "ace/Signal.h". Forward declarations for + ACE_Sig_{Action,Handler,Set} are enough. + + * ace/Reactor_Timer_Interface.h: + + Include "ace/Time_Value.h" to pull in ACE_Time_Value class + declaration. + + * ace/SString.h (ACE_NS_WString): + + Corrected documentation. + + * ace/SString.i: + + No need to include "ace/Malloc_Base.h". + + * ace/SString.cpp: + + Cosmetic reorganization of code. + + * ace/Select_Reactor_Base.h: + + No need to include "ace/Signal.h". + + Include new "ace/Timer_Queuefwd.h" header instead of + "ace/Timer_Queue.h". Forward declarations are enough. + + * ace/Select_Reactor_Base.cpp: + * ace/Select_Reactor_T.cpp: + + Include "ace/Signal.h" to pull in ACE signal classes. + + * ace/TP_Reactor.h: + + No need to include "ace/Log_Msg.h". + + * ace/TP_Reactor.cpp: + + No need to include "ace/Reactor.h". + + Include "ace/Timer_Queue.h" and "ace/Signal.h" to pull in + ACE_Timer_Queue and ACE signal classes. + + * ace/Timer_Queue.h: + + Moved ACE_Timer_Queue typedef to new Timer_Queuefwd.h file. + + Include "ace/Timer_Queuefwd.h" to pull in ACE_Timer_Queue + typedef. + + * ace/Timer_Queue_T.cpp: + + No need to include "ace/Signal.h". + + * ace/Timer_Queuefwd.h: + + New file containing forward declarations and typedefs for the + ACE_Timer_Queue class and friends. + +Tue Nov 4 17:58:29 2003 Steve Huston + + * ace/UUID.cpp: Added explicit instantiation of + ACE_Singleton::singleton_ to work around g++ issue on HP-UX and AIX. + +Tue Nov 4 20:40:26 UTC 2003 Don Hinton + + * tests/test_config.h: + Removed #include of streams.h. + + * tests/CDR_File_Test.cpp: + Added #include of streams.h. This is the only test that needs + it. + +Tue Nov 4 14:22:00 2003 Justin Michel + + * ace/config-freebsd.h + Added ACE_LACKS_WCSNICMP, ACE_LACKS_WCSICMP, ACE_LACKS_WCSDUP, + ACE_LACKS_ITOW, ACE_HAS_3_PARAM_WCSTOK, and ACE_LACKS_TOWLOWER, + needed when ACE_HAS_WCHAR is defined. + +Tue Nov 4 09:50:47 2003 Ossama Othman + + * tests/Makefile.am + (MT_Reference_Counted_Event_Handler_Test_SOURCES): + (MT_Reference_Counted_Notify_Test_SOURCES): + (NonBlocking_Conn_Test_SOURCES): + (Reactor_Registration_Test_SOURCES): + (Reference_Counted_Event_Handler_Test_SOURCES): + (Timer_Cancellation_Test_SOURCES): + (Timer_Queue_Reference_Counting_Test_SOURCES): + (WFMO_Reactor_Test_SOURCES): + + Added these missing test source declarations. + +Tue Nov 4 09:15:13 2003 Ossama Othman + + * ace/OS_NS_stdlib.inl: + * ace/OS_NS_sys_time.inl: + * ace/OS_NS_sys_uio.inl: + * ace/OS_NS_sys_utsname.inl: + + Include "ace/os_include/os_errno.h". The ACE_OSCALL macros used + in these files use the global errno variable. + + * ace/os_include/os_pthread.h: + + Don't define ACE_HAS_MUTEX_TIMEOUTS if it has been previously + defined. Fixes a warning for configurations that explicitly + define ACE_HAS_MUTEX_TIMEOUTS. + + Do not directly check the GNU libc-specific "__USE_XOPEN2K" + XPG6 feature test macro. The correct/portable way to check for + XPG6 features is to check if _XOPEN_SOURCE >= 600. + + * ace/os_include/sys/os_time.h: + + No need to include "ace/os_include/sys/os_select.h". + + * ace/os_include/sys/os_types.h: + + Check if ACE_SIZEOF_LONG macro is defined prior to checking if + it is defined to a specific value. Addresses warnings in some + g++ configurations. + +Tue Nov 4 16:48:54 UTC 2003 Don Hinton + + * ace/Barrier.cpp: + * ace/Condition_Recursive_Thread_Mutex.cpp: + Include Log_Msg.h when ACE_HAS_DUMP is defined. + + * ace/OS_NS_stdio.inl: + * ace/OS_NS_string.cpp: + * ace/OS_NS_strings.inl: + * ace/OS_NS_unistd.inl: + * ace/OS_NS_wchar.cpp: + * ace/OS_NS_wchar.h: + Added #includes needed when ACE_HAS_WCHAR is defined. + + * ace/SSL/SSL_SOCK.cpp: + * ace/SSL/SSL_SOCK_Stream.cpp: + Added #includes needed when ssl=1. + +Tue Nov 4 14:29:38 UTC 2003 Don Hinton + + * ace/CDR_Streams.i: + Added #include OS_NS_string.h and OS_Memory.h. + +Tue Nov 4 06:20:18 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/VC6ProjectCreator.pm: + + Remove an unnecessary intermediate variable. + + * bin/MakeProjectCreator/modules/VC7ProjectCreator.pm: + * bin/MakeProjectCreator/templates/vc7dll.mpt: + * bin/MakeProjectCreator/templates/vc7exe.mpt: + * bin/MakeProjectCreator/templates/vc7lib.mpt: + * bin/MakeProjectCreator/templates/vc7libexe.mpt: + + Split static projects from dynamic projects ala VC6. When one VC7 + static library project depends on another, they are linked + together as the second one is built. This causes the contents of + each library to grow tremendously. Splitting the projects allows + us to omit the project dependencies for static libraries. + +Tue Nov 4 01:03:56 2003 Ossama Othman + + * configure.ac (AC_PREREQ): + + Fixed typo in copyright statement. + + Bumped autoconf prerequisite to version 2.57g. Function tests + in versions prior to that did not function properly on HP-UX. + + (AC_CONFIG_AUX_DIR): + + Call this Autoconf macro with an "aux" argument. This causes + all autotool related scripts to be placed in to the `aux' + directory. Addresses a problem with some versions of libtoolize + where an empty auxiliary directory name is assumed instead of + the well defined defaults. This change also happens to remove + some of the clutter in the top-level directory. + + (AC_CONFIG_MACRO_DIR): + + Call this Autoconf macro with a "m4" argument to inform + autotools that recognize this macro where the ACE Autconf/M4 + macros are located. + + * bin/bootstrap: + + Replaced manual calls to aclocal, autoheader, autoconf, automake + and libtoolize with a single call to `autoreconf'. The latter + is a bit smarter about bootstrapping autoconfiscated + workspaces, and also allows us to simplify this bootstrap + script. + + * m4/ace.m4: + + Started converting all Bourne shell "if" blocks to Autoconf + "AS_IF" blocks. The latter provides improved portability. + + * m4/acinclude.m4: + * m4/compiler.m4: + * m4/features.m4: + * m4/subsets.m4: + + Nuked trailing whitespace. + + * m4/config_h.m4 (AH_TOP): + + Removed "-*- C++ -*-" Emacs mode comment. It had no effect + since it wasn't in the first few lines of the generated + `config.h' file. + + (AH_BOTTOM): + + Define Emacs mode at the bottom of the generated `config.h' file + using the canonical Emacs "Local Variables" block. The + generated `config.h' file is now correctly interpreted as a C++ + header when opened in Emacs. + + + * m4/threads.m4: + + Started converting all Bourne shell "if" blocks to Autoconf + "AS_IF" blocks. The latter provides improved portability. + + Refactored common POSIX threads detection code to an autoconf + macro. + + Replaced brittle POSIX thread code that checked for backward + compatibility macros. Use a run/link-time test instead. This + allows us to avoid determining what the real pthread_create() + function is called. This should fix a Pthread detection problem + that occurred on HP-UX. + + * ace/Makefile.am: + + Updated source lists with latest set of source filenames. + + * apps/gperf/mdate-sh: + * apps/gperf/texinfo.tex: + + Removed these files. They are automatically added when + bootstrapping an "autoconfiscated" workspace. + +Wed Nov 4 08:34:12 UTC 2003 Johnny Willemsen + + * ace/OS_NS_netdb.cpp: (getmacaddress) + Always do an reinterpret_cast because the static_cast also doesn't + work when ansi casts is enabled. Thanks to Edan Ayal + for reporting this. + +Wed Nov 4 08:18:37 UTC 2003 Don Hinton + + * ace/OS_NS_signal.h: + Removed include of OS_export and changed ACE_OS_Export to + ACE_Export to fix compile errors. + +Wed Nov 4 06:15:13 UTC 2003 Johnny Willemsen + + The following list of changes fixes build errors in the Borland builds + + * ace/Object_Manager_Base.cpp: + Added #include of OS_NS_stdio.h + + * ace/OS_NS_dirent.inl: + Added #include of OS_Memory.h + + * ace/OS_NS_fcntl.cpp: + Added #include of OS_NS_stdio.h, OS_NS_Thread.h, OS_NS_macros.h and + Object_Manager_Base.h + + * ace/OS_NS_fcntl.inl: + Added #include of OS_NS_errno.h + + * ace/OS_NS_signal.h: + Added #include of os_include/os_signal.h, ACE_export.h and OS_export.h + + * ace/OS_NS_stdio.inl: + Added #include OS_NS_macros.h + + * ace/OS_NS_stropts.inl: + Added #include of OS_NS_macros.h and OS_QoS.h + + * ace/OS_NS_sys_mman.inl: + Added #include of OS_NS_stdio.h, OS_NS_macros.h and OS_NS_errno.h + + * ace/OS_NS_sys_resource.inl: + Added #include of OS_NS_macros.h + + * ace/OS_NS_sys_select.inl: + Added #include of os_include/os_errno.h + + * ace/OS_NS_sys_socket.inl: + Added #include of OS_NS_stdio.h, OS_QoS.h and Global_Macros.h + + * ace/OS_NS_sys_stat.inl: + Added OS_NS_errno.h + + * ace/OS_NS_sys_uio.cpp: + Added #include OS_Memory.h, OS_NS_string.h and OS_NS_unistd.h + + * ace/OS_NS_sys_utsname.cpp + Added #include OS_NS_string.h, OS_NS_stdio.h and OS_NS_unistd.h + + * ace/OS_NS_sys_wait.inl: + Added #include of OS_NS_errno.h and Global_Macros.h + + * ace/OS_NS_Thread.cpp: + Added #include of Object_Manager_Base.h + + * ace/OS_NS_Thread.inl: + Added #include of OS_NS_stdio.h and OS_NS_errno.h + + * ace/OS_NS_unistd.inl: + Added #include of OS_NS_macros., OS_NS_fcntl.h and Default_Constants.h + +Tue Nov 4 04:55:40 UTC 2003 Don Hinton + + * ace/CDR_Stream.h: + Removed #include of OS_Memory.h and OS_String.h. + + * ace/Object_Manager.h: + Added #includes needed due to subsetting. + + * performance-tests/SCTP/SOCK_SEQPACK_srv.cpp: + * tests/CDR_Test.cpp: + Added #includes needed due to subsetting. + + * ace/ace.mpc: + Removed commented out Synch.cpp--comments aren't supported. + + * ace/Makefile.ace: + Removed Synch and added new files, e.g., Mutex, etc... + +Mon Nov 3 22:11:24 2003 Balachandran Natarajan + + * ace/config-sunos5.5.h: Added a note about SunCC 5.0. + +Mon Nov 3 20:35:12 2003 Balachandran Natarajan + + * ace/config-sunos5.5.h: + + Added ACE_HAS_STD_TEMPLATE_CLASS_MEMBER_SPECIALIZATION, since + CC 5.3 seems to be doing the right thing for class member + specializations. We will soon check things out on other + compilers. + +Mon Nov 3 19:38:45 2003 Balachandran Natarajan + + * ace/config-all.h: + + Added a new #define, ACE_TEMPLATE_CLASS_MEMBER_SPECIALIZATION + which defines template <> for definitions of member functions + of a class that is specialized. + + * ace/config-g++-common.h: + + Added ACE_HAS_STD_TEMPLATE_CLASS_MEMBER_SPECIALIZATION, since + g++ is doing the right thing for class member specializations. + +Mon Nov 3 17:02:42 UTC 2003 Don Hinton + + * ace/config-openbsd.h: + * ace/config-macosx.h: + Added ACE_LACKS_WCHAR_H. + + * ace/OS_NS_dlfcn.inl: + Added #includes needed when ACE_USES_ASM_SYMBOL_IN_DLSYM is + defined. + + * ace/OS_NS_sys_msg.inl: + * ace/OS_NS_sys_shm.inl: + Added #include of OS_NS_errno.h: + +Mon Nov 3 16:43:27 UTC 2003 Don Hinton + + * ace/OS_NS_dlfcn.inl: + Added missing #includes needed on HPUX due to recent + subsetting. + + * ace/OS_NS_time.inl: + Changed #ifdef around ACE_OS::timezone implementation to be just + __GNUG__ since it seems to be needed on all OS's that use g++. + + * ace/OS_NS_string.h: + Changed ACE_OS_Export to ACE_Export. + + * ace/OS_NS_unistd.cpp: + Added #include of sys/pstat.h needed on HPUX. + + * ace/os_include/os_termios.h: + Added #include of sys/modem.h on HPUX to pickup the MDTR + definition. + +Mon Nov 3 10:19:43 UTC 2003 Johnny Willemsen + + * ace/Makefile.bor: + Updated this file with all recent changes + +Mon Nov 3 08:24:12 UTC 2003 Johnny Willemsen + + * ace/config-win32-borland.h: + Added #define ACE_LACKS_TERMIOS_H + +Mon Nov 3 06:41:16 UTC 2003 Don Hinton + + * ace/OS_NS_stdio.h: + Added missing ACE_Export to printf() declaration. + +Mon Nov 3 06:09:08 UTC 2003 Don Hinton + + * tests/MM_Shared_Memory_Test.cpp: + * tests/OS_Test.cpp: + * tests/Proactor_Scatter_Gather_Test.cpp: + * tests/Proactor_Test.cpp: + * tests/SPIPE_Test.cpp: + Added #includes needed on Windows due to recent + subsetting. + +Mon Nov 3 05:02:24 UTC 2003 Don Hinton + + * ace/OS_NS_netdb.cpp: + Added missing #ifdef ACE_MT_SAFE around + ACE_OS::netdb_{acquire|release} method implementations. This + fixes single threaded build errors on platforms that define + ACE_LACKS_NETDB_REENTRANT_FUNCTIONS. + +Mon Nov 3 04:43:43 UTC 2003 Don Hinton + + * Makefile: + * bin/reverseclean: + Pass the $(MAKE) variable to the reverseclean script and use it + instead of "make". This fixes problems in autobuilds that + assign something other than "make" to the make_program + variable. + +Mon Nov 3 04:12:12 UTC 2003 Craig Rodrigues + + * include/makeinclude/platform_freebsd.GNU: + Overhaul the OS version tests so that they actually work. + The "-pthread" gcc flag was recently deprecated in FreeBSD's gcc, so + use the correct pthread flags for gcc, based on the OS version. + Inspired by similar tests in /usr/ports/Mk/bsd.port.mk + +Mon Nov 3 03:04:48 UTC 2003 Don Hinton + + * ace/Barrier.h: + * ace/Managed_Object.h: + * ace/Object_Manager.h: + * tests/Priority_Reactor_Test.cpp: + Added #include needed when not inlining due to recent + subsetting. + + * ace/OS_NS_Thread.inl: + Added #ifdef ACE_MT_SAFE around ACE_OS_Thread_Mutex_Guard + implementation. + + * ace/Object_Manager_Base.h: + Removed ACE_OS friend statements and redundant method + declarations (which were problematic on Windows). + + * ace/Token.cpp: + Moved #include of Token.i outside of ACE_HAS_THREADS #ifdef + since ACE_Noop_Token is there and required in single threaded + builds. + +Sun Nov 2 15:58:23 UTC 2003 Don Hinton + + * ace/ace.mpc: + Added a comment about footprint and compile times, and moved the + commented out files up--MPC doesn't like comments in file + lists. Thanks to Johnny Willemsen + for reporting this. + + * ace/OS_NS_netdb.inl: + Fixed a couple of instances of ::memcpy that didn't include + ACE_OS. + + * ace/OS_NS_netdb.cpp: + Added #include Object_Manager_Base.h. + + * ace/OS_NS_unistd.cpp: + Added #include Object_Manager_Base.h and OS_NS_Thread.h. + + * ace/OS_NS_time.inl: + Added #include OS_NS_sys_time.h. + +Sun Nov 2 12:55:21 UTC 2003 Johnny Willemsen + + * ace/Shared_Memory.h: + Added #include of os_include/os_stddef.h to get size_t definition. + +Sun Nov 2 10:01:13 UTC 2003 Johnny Willemsen + + * ace/OS_main.h: + Fixed fuzz error and added #include of post.h + + * ace/OS_NS_macros.h: + Added #include of post.h + + * ace/Timer_Queue_T.h: + Added #include of Time_Value.h + + * ace/config-win32-borland.h: + Added several defines because of lacking system header files. + +Sun Nov 2 00:23:25 UTC 2003 Don Hinton + + * ace/OS_NS_netdb.cpp: + Added #include of OS_NS_Thread.h needed when + ACE_LACKS_NETDB_REENTRANT_FUNCTIONS is defined. + + * ace/OS_NS_poll.inl: + Added #include of OS_NS_errno.h. + + * ace/OS_NS_unistd.cpp: + Added #include of Guard_T.h. + + * ace/Object_Manager_Base.cpp: + Fixed typo. + + * ace/os_include/os_signal.h: + Fixed typo. Thanks to Johnny Willemsen + for reporting this. + +Sat Nov 1 23:45:49 UTC 2003 Don Hinton + + * ace/ACE_export.h: + Added ACE_NAMESPACE_INLINE_FUNCTION and ACE_NAMESPACE_STORAGE_CLASS + macros to help control exporting of symbols from namespaces on + Windows. + + * ace/OS_NS_Thread.h: + * ace/OS_NS_arpa_inet.{h,inl}: + * ace/OS_NS_ctype.h: + * ace/OS_NS_dirent.h: + * ace/OS_NS_dlfcn.h: + * ace/OS_NS_errno.h: + * ace/OS_NS_fcntl.h: + * ace/OS_NS_math.h: + * ace/OS_NS_netdb.h: + * ace/OS_NS_poll.h: + * ace/OS_NS_pwd.h: + * ace/OS_NS_regex.h: + * ace/OS_NS_signal.h: + * ace/OS_NS_stdio.h: + * ace/OS_NS_stdlib.h: + * ace/OS_NS_string.h: + * ace/OS_NS_strings.h: + * ace/OS_NS_stropts.h: + * ace/OS_NS_sys_mman.h: + * ace/OS_NS_sys_msg.h: + * ace/OS_NS_sys_resource.h: + * ace/OS_NS_sys_select.h: + * ace/OS_NS_sys_shm.h: + * ace/OS_NS_sys_socket.h: + * ace/OS_NS_sys_stat.h: + * ace/OS_NS_sys_time.h: + * ace/OS_NS_sys_uio.h: + * ace/OS_NS_sys_utsname.h: + * ace/OS_NS_sys_wait.h: + * ace/OS_NS_time.h: + * ace/OS_NS_unistd.h: + * ace/OS_NS_wchar.h: + * ace/OS_TLI.h: + Added extern ACE_Export to non-inlined method prototypes and + ACE_NAMESPACE_INLINE_FUNCTION to inlined ones. + +Sat Nov 1 18:18:12 UTC 2003 Johnny Willemsen + + * ace/config-win32-mingw.h: + Added defines to specify that MinGW lacks certain header files. + Because of the rework this was now found. + +Sat Nov 1 17:16:45 UTC 2003 Don Hinton + + * ace/ace.mpc: + Reordered new files to make them easer to verify. + + * ace/Makefile.ace: + Added new files and removed OS, OS_String, OS_Memory, and + OS_Dirent. + + * Kokyu/Makefile.Kokyu: + * ace/Makefile.ace: + * ace/ace.mpc: + * ace/RMCast/Makefile: + * apps/Gateway/Gateway/Makefile: + * apps/Gateway/Peer/Makefile: + * apps/drwho/Makefile: + * apps/gperf/src/Makefile: + * apps/gperf/tests/Makefile: + * examples/ASX/CCM_App/Makefile: + * examples/ASX/Event_Server/Event_Server/Makefile: + * examples/ASX/Event_Server/Transceiver/Makefile: + * examples/ASX/Message_Queue/Makefile: + * examples/ASX/UPIPE_Event_Server/Makefile: + * examples/C++NPv1/Makefile: + * examples/Connection/misc/Makefile: + * examples/Connection/non_blocking/Makefile: + * examples/IOStream/client/Makefile: + * examples/IOStream/server/Makefile: + * examples/IPC_SAP/DEV_SAP/reader/Makefile: + * examples/IPC_SAP/DEV_SAP/writer/Makefile: + * examples/IPC_SAP/FIFO_SAP/Makefile: + * examples/IPC_SAP/FILE_SAP/Makefile: + * examples/IPC_SAP/SOCK_SAP/Makefile: + * examples/IPC_SAP/SPIPE_SAP/Makefile: + * examples/IPC_SAP/TLI_SAP/Makefile: + * examples/IPC_SAP/UPIPE_SAP/Makefile: + * examples/Log_Msg/Makefile: + * examples/Logger/Acceptor-server/Makefile: + * examples/Logger/client/Makefile: + * examples/Logger/simple-server/Makefile: + * examples/Map_Manager/Makefile: + * examples/Mem_Map/IO-tests/Makefile: + * examples/Mem_Map/file-reverse/Makefile: + * examples/Misc/Makefile: + * examples/Naming/Makefile: + * examples/RMCast/Send_File/Makefile: + * examples/Reactor/Dgram/Makefile: + * examples/Reactor/FIFO/Makefile: + * examples/Reactor/Misc/Makefile: + * examples/Reactor/Multicast/Makefile: + * examples/Reactor/Ntalker/Makefile: + * examples/Service_Configurator/IPC-tests/client/Makefile: + * examples/Service_Configurator/IPC-tests/server/Makefile: + * examples/Shared_Malloc/Makefile: + * examples/Shared_Memory/Makefile: + * examples/Synch/Makefile: + * examples/System_V_IPC/SV_Message_Queues/Makefile: + * examples/System_V_IPC/SV_Semaphores/Makefile: + * examples/System_V_IPC/SV_Shared_Memory/Makefile: + * examples/Threads/Makefile: + * examples/Timer_Queue/Makefile: + * netsvcs/clients/Logger/Makefile: + * netsvcs/clients/Naming/Client/Makefile: + * netsvcs/clients/Naming/Dump_Restore/Makefile: + * netsvcs/clients/Tokens/collection/Makefile: + * netsvcs/clients/Tokens/deadlock/Makefile: + * netsvcs/clients/Tokens/invariant/Makefile: + * netsvcs/clients/Tokens/mutex/Makefile: + * netsvcs/clients/Tokens/rw_lock/Makefile: + * netsvcs/lib/Makefile: + * netsvcs/servers/Makefile: + * performance-tests/Misc/Makefile: + * performance-tests/SCTP/Makefile: + * performance-tests/Server_Concurrency/Leader_Follower/Makefile: + * performance-tests/Server_Concurrency/Queue_Based_Workers/Makefile: + * performance-tests/TCP/Makefile: + * performance-tests/UDP/Makefile: + * tests/Makefile.tests: + * tests/RMCast/Makefile: + * websvcs/lib/Makefile: + * websvcs/tests/Makefile + Updated dependencies. + +Sat Nov 1 16:27:58 UTC 2003 Don Hinton + + * ace/os_include/os_signal.h: + Added prototype for pthread_sigmask() for those platforms that + don't include it in signal.h, ie. Free BSD. + +Sat Nov 1 05:40:21 UTC 2003 Don Hinton + + * ace/Cleanup.{h,inl,cpp}: + * ace/OS_main.h: + * ace/OS_NS_arpa_inet.{h,inl,cpp}: + * ace/OS_NS_ctype.{h,inl,cpp}: + * ace/OS_NS_dirent.{h,inl,cpp}: + * ace/OS_NS_dlfcn.{h,inl,cpp}: + * ace/OS_NS_errno.{h,inl,cpp}: + * ace/OS_NS_fcntl.{h,inl,cpp}: + * ace/OS_NS_macros.h: + * ace/OS_NS_math.{h,inl,cpp}: + * ace/OS_NS_netdb.{h,inl,cpp}: + * ace/OS_NS_poll.{h,inl,cpp}: + * ace/OS_NS_pwd.{h,inl,cpp}: + * ace/OS_NS_regex.{h,inl,cpp}: + * ace/OS_NS_signal.{h,inl,cpp}: + * ace/OS_NS_stdio.{h,inl,cpp}: + * ace/OS_NS_stdlib.{h,inl,cpp}: + * ace/OS_NS_string.{h,inl,cpp}: + * ace/OS_NS_strings.{h,inl,cpp}: + * ace/OS_NS_stropts.{h,inl,cpp}: + * ace/OS_NS_sys_mman.{h,inl,cpp}: + * ace/OS_NS_sys_msg.{h,inl,cpp}: + * ace/OS_NS_sys_resource.{h,inl,cpp}: + * ace/OS_NS_sys_select.{h,inl,cpp}: + * ace/OS_NS_sys_shm.{h,inl,cpp}: + * ace/OS_NS_sys_socket.{h,inl,cpp}: + * ace/OS_NS_sys_stat.{h,inl,cpp}: + * ace/OS_NS_sys_time.{h,inl,cpp}: + * ace/OS_NS_sys_uio.{h,inl,cpp}: + * ace/OS_NS_sys_utsname.{h,inl,cpp}: + * ace/OS_NS_sys_wait.{h,inl,cpp}: + * ace/OS_NS_Thread.{h,inl,cpp}: + * ace/OS_NS_time.{h,inl,cpp}: + * ace/OS_NS_unistd.{h,inl,cpp}: + * ace/OS_NS_wchar.{h,inl,cpp}: + * ace/Object_Manager_Base.{h,inl,cpp}: + Added new files. + + * ace/OS.{h,i,cpp}: + * ace/OS_Dirent.{h,i,cpp}: + * ace/OS_String.{h,i,cpp}: + * ace/OS_Memory.{h,inl,cpp}: + * ace/OS_TLI.{h,inl}: + Converted ACE_OS* classes to ACE_OS namespace and moved all the + code to the new files above based on the Single Unix Spec. + + * ace/ace.mpc: + Added new files and removed OS.cpp, OS_String.cpp, + OS_Dirent.cpp, and OS_Memory.cpp. Also removed Synch.cpp and + added the individual concurrency files that had already been + added to the repo a while back.. + + * ace/OS.h: + * ace/Synch.h: + Added DO_NOT_INCLUDE #ifdef to make it easy to remove the entire + contents of these files for testing purposes. + + * ace/OS_main.h: + Moved the ACE_TMAIN macros here. + + * ace/Object_Manager_Base.{h,inl,cpp}: + Moved the ACE_Object_Manager_Base, ACE_OS_Object_Manager, and + ACE_OS_Object_Manager_Manager classes here. + + * ace/config-all.h: + Moved ACE_OS_TRACE macro here. + + * ace/config-vxworks5.x.h: + Added ACE_LACKS_ARPA_INET_H. + + * ace/config-win32-msvc.h: + Added ACE_LACKS_SEMAPHORE_H, ACE_LACKS_STRINGS_H, + ACE_LACKS_PWD_H, ACE_LACKS_POLL_H, ACE_LACKS_SYS_SHM_H, + ACE_LACKS_SYS_MSG_H, ACE_LACKS_NETINET_TCP_H, + ACE_LACKS_TERMIOS_H, and ACE_LACKS_REGEX_H. + + * ace/Time_Value.{h,cpp}: + Moved ACE_Countdown_Time here. + + * ace/TTY_IO.h: + Moved ACE_VMIN and ACE_VTIME macros here. + + * ace/SOCK.h: + Moved ACE_SHUTDOWN* macros here. + + * ace/Mutex.h: + Moved ACE_DEFAULT_MUTEX macros here. + + * ace/Log_Msg.cpp: + Moved sys_siglist define here. + + * ace/Handle_Set.cpp: + Moved ACE_MSB_MASK macro here. + + * ace/Global_Macros.h: + Moved PIPE_TYPE_*, NEW_MALLOC*, ACE_SEH*, template typedef + macros here. + + * ace/Default_Constants.h: + ACE_MAX_USERID out, ACE_DEV_NULL and ACE_SYSCALL_FAILED in. + + * ace/Cleanup.{h,inl,cpp}: + Added new file and moved ACE_Cleanup* and ACE_OS_Exit_Info + classes here. + + * ace/Basic_Types.h: + Moved ACE_HTONL and ACE_NTOHL macros here. + + * ace/os_include/os_dirent.h: + Moved ACE_DIR typedef here: + + * ace/os_include/os_dlfcn.h: + Moved _dl* function prototypes here. + + * ace/os_include/os_fcntl.h: + Moved O_NONBLOCK and F_GETFL defines here. + + * ace/os_include/os_limits.h: + Moved ACE_RTSIG_MAX define here. + + * ace/os_include/os_pthread.h: + Moved the sun priocntl includes here. + + * ace/os_include/os_regex.h: + Moved the regexpr.h include here. + + * ace/os_include/os_signal.h: + Moved the rest of the signal defines and includes here. + + * ace/os_include/os_stdio.h: + Moved the ACE_MAX_USERID define here. + + * ace/os_include/os_stdlib.h: + Moved the mktemp() prototype here. + + * ace/os_include/os_string.h: + * ace/OS_NS_stdio.inl: + Moved additional string related includes and strerror define + to os_string.h. Moved ACE_SPRINTF_ADAPTER to OS_NS_stdio.inl. + + * ace/os_include/os_strings.h: + Removed ACE_HAS_STRINGS hack. + + * ace/os_include/os_stropts.h: + Moved _XOPEN_EXTENDED_SOURCE, SIOCGIFBRDADDR, and SIOCGIFADDR + defines, strbuf type, and isastream() prototype here. + + * ace/os_include/os_time.h: + Moved timespec typedef and time related std using declaration + here. + + * ace/os_include/os_ucontext.h: + Moved ucontext_t typedef here. + + * ace/os_include/os_unistd.h: + Moved the id related prototypes, *_OK macros, and the + read_timedwait() and write_timedwait() prototypes here. + + * ace/os_include/arpa/os_inet.h: + Moved the inet_*() prototypes here. + + * ace/os_include/netinet/os_in.h: + Moved the multicast types and IP_* defines here. + + * ace/os_include/netinet/os_tcp.h: + Moved the TCP_NODELAY and TCP_MAXSEG defines here. + + * ace/os_include/sys/os_mman.h: + Moved the MAP_* defines here. + + * ace/os_include/sys/os_resource.h: + Moved the usage and limit defines and prototypes here. + + * ace/os_include/sys/os_select.h: + Moved NFDBITS and select() prototype here. + + * ace/os_include/sys/os_sem.h: + Moved the GETVAL, SETVAL, GETALL, SETALL, and SEM_UNDO defines + here. + + * ace/os_include/sys/os_socket.h: + Moved the socket related *_timedwait() prototypes and + ACE_SOCKET_LEN typedef here. + + * ace/os_include/sys/os_stat.h: + Added /**/ for system include. + + * ace/os_include/sys/os_time.h: + Moved gettimeofday() prototype here. + + * ace/os_include/sys/os_times.h: + Fixed typo. + + * ace/os_include/sys/os_types.h: + Moved ACE_timer_t typedef and types related std using + declarations here. + + * ace/os_include/sys/os_uio.h: + Moved readv_timedwait() writev_timedwait() prototypes here. + + * ace/os_include/sys/os_wait.h: + Moved wait macros, WIFEXITED, etc.., here. + + * ACEXML/apps/svcconf/Svcconf_Handler.cpp: + * ACEXML/common/FileCharStream.cpp: + * ACEXML/common/NamespaceSupport.{h,cpp}: + * ACEXML/common/StrCharStream.cpp: + * ACEXML/common/URL_Addr.cpp: + * ACEXML/common/XML_Types.h: + * ACEXML/examples/SAXPrint/main.cpp: + * ACEXML/parser/parser/Entity_Manager.h: + * ACEXML/parser/parser/Parser.cpp: + * ACEXML/tests/ContentHandler_Test.cpp: + * ACEXML/tests/HttpCharStream_Test.cpp: + * ACEXML/tests/NamespaceSupport_Test.cpp: + * ACEXML/tests/Transcoder_Test.cpp: + * ASNMP/asnmp/address.{h,cpp}: + * ASNMP/asnmp/asn1.{h,cpp}: + * ASNMP/asnmp/ctr64.cpp: + * ASNMP/asnmp/integer.cpp: + * ASNMP/asnmp/octet.cpp: + * ASNMP/asnmp/oid.{h,cpp}: + * ASNMP/asnmp/pdu.cpp: + * ASNMP/asnmp/smi.h: + * ASNMP/asnmp/snmp.cpp: + * ASNMP/asnmp/timetick.cpp: + * ASNMP/asnmp/transaction.cpp: + * ASNMP/asnmp/vb.{h,cpp}: + * ASNMP/asnmp/wpdu.{h,cpp}:, + * ASNMP/tests/Counter64_Test.cpp: + * ASNMP/tests/Counter_Test.cpp: + * ASNMP/tests/Gauge_Test.cpp: + * ASNMP/tests/Integer_Test.cpp: + * ASNMP/tests/Octet_Test.cpp: + * ASNMP/tests/Oid_Test.cpp: + * ASNMP/tests/Target_Test.cpp: + * ASNMP/tests/Varbind_Test.cpp: + * ASNMP/tests/test_config.h: + * Kokyu/Dispatcher_Task.cpp: + * Kokyu/tests/DSRT_MIF/MIF.cpp: + * Kokyu/tests/EDF/test.cpp: + * Kokyu/tests/FIFO/test.cpp: + * ace/ACE.{i,cpp}: + * ace/ARGV.cpp: + * ace/Acceptor.cpp: + * ace/Active_Map_Manager.{h,i}: + * ace/Addr.cpp: + * ace/Arg_Shifter.cpp: + * ace/Argv_Type_Converter.cpp: + * ace/Asynch_Acceptor.cpp: + * ace/Asynch_IO_Impl.cpp: + * ace/Asynch_Pseudo_Task.cpp: + * ace/Atomic_Op.cpp: + * ace/Auto_Event.cpp: + * ace/Barrier.cpp: + * ace/Base_Thread_Adapter.cpp: + * ace/Basic_Types.cpp: + * ace/CDR_Base.cpp: + * ace/CDR_Stream.i: + * ace/CE_Screen_Output.h: + * ace/Capabilities.cpp: + * ace/Codecs.cpp: + * ace/Condition_Thread_Mutex.cpp: + * ace/Configuration.cpp: + * ace/Configuration_Import_Export.cpp: + * ace/DEV.cpp: + * ace/DEV_IO.{i,h}: + * ace/DLL.cpp: + * ace/DLL_Manager.cpp: + * ace/Date_Time.i: + * ace/Dirent.{i,h}: + * ace/Dirent_Selector.{h,cpp}: + * ace/Env_Value_T.h: + * ace/Event.{h,cpp}: + * ace/FIFO.{h,cpp}: + * ace/FIFO_Recv.i: + * ace/FIFO_Recv_Msg.{i,cpp}: + * ace/FIFO_Send.i: + * ace/FIFO_Send_Msg.cpp: + * ace/FILE.cpp: + * ace/FILE_IO.{i,cpp}: + * ace/File_Lock.h: + * ace/Filecache.{h,cpp}: + * ace/Flag_Manip.{h,i,cpp}: + * ace/Framework_Component.cpp: + * ace/Functor.i: + * ace/Future.h: + * ace/Guard_T.{h,inl}: + * ace/Handle_Gobbler.h: + * ace/Handle_Ops.cpp: + * ace/Handle_Set.cpp: + * ace/High_Res_Timer.{h,i,cpp}: + * ace/INET_Addr.{i,cpp}: + * ace/IOStream.{h,cpp}: + * ace/IOStream_T.h: + * ace/IO_Cntl_Msg.h: + * ace/IO_SAP.cpp: + * ace/IO_SAP.i: + * ace/IPC_SAP.{i,cpp}: + * ace/LOCK_SOCK_Acceptor.cpp: + * ace/Lib_Find.cpp: + * ace/Local_Name_Space_T.cpp: + * ace/Lock_Adapter_T.cpp: + * ace/Log_Msg.cpp: + * ace/Log_Msg_NT_Event_Log.cpp: + * ace/Log_Msg_UNIX_Syslog.cpp: + * ace/Log_Record.cpp: + * ace/Log_Record.i: + * ace/Logging_Strategy.cpp: + * ace/MEM_Acceptor.cpp: + * ace/MEM_Addr.{i,cpp}: + * ace/MEM_IO.i: + * ace/Malloc.{h,cpp}: + * ace/Malloc_Allocator.i: + * ace/Malloc_T.{h,cpp}: + * ace/Manual_Event.cpp: + * ace/Mem_Map.{h,i,cpp}: + * ace/Memory_Pool.cpp: + * ace/Message_Block.cpp: + * ace/Message_Queue_T.cpp: + * ace/Metrics_Cache.{h,cpp}: + * ace/Metrics_Cache_T.h: + * ace/Module.h: + * ace/Mutex.{h,inl,cpp}: + * ace/NT_Service.cpp: + * ace/Name_Request_Reply.cpp: + * ace/Naming_Context.{h,cpp}: + * ace/OS_QoS.{h,cpp}: + * ace/OS_Thread_Adapter.cpp: + * ace/Object_Manager.h: + * ace/PI_Malloc.cpp: + * ace/POSIX_Asynch_IO.{h,cpp}: + * ace/POSIX_Proactor.cpp: + * ace/Pipe.{h,i}: + * ace/Proactor.h: + * ace/Proactor_Impl.h: + * ace/Process.{i,cpp}: + * ace/Process_Manager.cpp: + * ace/Profile_Timer.{h,i,cpp}: + * ace/RW_Mutex.{h,cpp}: + * ace/RW_Process_Mutex.h: + * ace/Reactor_Timer_Interface.h: + * ace/Read_Buffer.cpp: + * ace/Recursive_Thread_Mutex.{h,cpp}: + * ace/Refcounted_Auto_Ptr.h: + * ace/Registry.{h,cpp}: + * ace/Registry_Name_Space.h: + * ace/Remote_Name_Space.cpp: + * ace/SOCK.{h,i}: + * ace/SOCK_Acceptor.cpp: + * ace/SOCK_Dgram.{h,cpp}: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_IO.cpp: + * ace/SOCK_SEQPACK_Acceptor.cpp: + * ace/SOCK_SEQPACK_Association.cpp: + * ace/SPIPE.cpp: + * ace/SPIPE_Acceptor.cpp: + * ace/SPIPE_Addr.cpp: + * ace/SPIPE_Addr.h: + * ace/SPIPE_Connector.cpp: + * ace/SPIPE_Stream.i: + * ace/SString.{h,cpp}: + * ace/SV_Message.{h,i}: + * ace/SV_Message_Queue.{h,i}: + * ace/SV_Semaphore_Simple.{h,i}: + * ace/SV_Shared_Memory.{h,i}: + * ace/Sample_History.cpp: + * ace/Sched_Params.{h,cpp}: + * ace/Select_Reactor_T.cpp: + * ace/Semaphore.{h,inl,cpp}: + * ace/Service_Config.cpp: + * ace/Service_Manager.cpp: + * ace/Service_Repository.cpp: + * ace/Service_Types.cpp: + * ace/Shared_Memory.h: + * ace/Shared_Memory_SV.i: + * ace/Signal.{h,i}: + * ace/Singleton.h: + * ace/Sock_Connect.cpp: + * ace/Stats.{h,cpp}: + * ace/Stream_Modules.cpp: + * ace/String_Base.{h,i,cpp}: + * ace/System_Time.{h,cpp}: + * ace/TLI.{h,cpp}: + * ace/TLI_Acceptor.{h,cpp}: + * ace/TLI_Connector.cpp: + * ace/TLI_Stream.h: + * ace/TSS_T.cpp: + * ace/TTY_IO.{h.cpp}: + * ace/Task_T.i: + * ace/Thread.{h,i}: + * ace/Thread_Adapter.cpp: + * ace/Thread_Control.h: + * ace/Thread_Hook.cpp: + * ace/Thread_Manager.h: + * ace/Thread_Mutex.{h,cpp}: + * ace/Time_Value.inl: + * ace/Timeprobe.{h,cpp}: + * ace/Timeprobe_T.{h,cpp}: + * ace/Timer_Heap_T.cpp: + * ace/Timer_Queue_Adapters.cpp: + * ace/Timer_Queue_T.cpp: + * ace/Token.{h,i}: + * ace/Trace.cpp: + * ace/UNIX_Addr.i: + * ace/UUID.{h,cpp}: + * ace/Unbounded_Set.h: + * ace/WFMO_Reactor.cpp: + * ace/WIN32_Asynch_IO.cpp: + * ace/WIN32_Asynch_IO.h: + * ace/WIN32_Proactor.{h,cpp}: + * ace/gethrtime.cpp: + * ace/RMCast/RMCast.h: + * ace/RMCast/RMCast_Copy_On_Write.{h,i}}: + * ace/RMCast/RMCast_IO_UDP.{h,cpp}: + * ace/RMCast/RMCast_Membership.{h,cpp}: + * ace/RMCast/RMCast_Reassembly.h: + * ace/RMCast/RMCast_Reordering.h: + * ace/RMCast/RMCast_Sequencer.{h,cpp}: + * ace/RMCast/RMCast_UDP_Proxy.cpp: + * apps/Gateway/Gateway/Connection_Handler_Connector.cpp: + * apps/Gateway/Gateway/Event.h: + * apps/Gateway/Gateway/Event_Channel.cpp: + * apps/Gateway/Gateway/Event_Forwarding_Discriminator.h: + * apps/Gateway/Gateway/File_Parser.{h,cpp}: + * apps/Gateway/Gateway/Gateway.h: + * apps/Gateway/Gateway/Options.{h,cpp}: + * apps/Gateway/Peer/Options.cpp: + * apps/JAWS/clients/Blobby/Blob.{h,cpp}: + * apps/JAWS/clients/Blobby/Blob_Handler.{h,cpp}: + * apps/JAWS/clients/Blobby/blobby.cpp: + * apps/JAWS/clients/Caching/URL_Properties.cpp: + * apps/JAWS/server/HTTP_Config.cpp: + * apps/JAWS/server/HTTP_Handler.cpp: + * apps/JAWS/server/HTTP_Helpers.cpp: + * apps/JAWS/server/HTTP_Helpers.h: + * apps/JAWS/server/HTTP_Request.cpp: + * apps/JAWS/server/HTTP_Request.h: + * apps/JAWS/server/HTTP_Response.cpp: + * apps/JAWS/server/HTTP_Server.h: + * apps/JAWS/server/IO.cpp: + * apps/JAWS/server/Parse_Headers.{h,cpp}: + * apps/JAWS/server/main.cpp: + * apps/JAWS/stress_testing/global.h: + * apps/JAWS2/HTTP_10_Write.cpp: + * apps/JAWS2/HTTPU/http_export.h: + * apps/JAWS2/HTTPU/parse_http_request.h: + * apps/JAWS2/HTTPU/parse_http_response.cpp: + * apps/JAWS2/HTTPU/parse_http_response.h: + * apps/JAWS2/HTTPU/parse_url.cpp: + * apps/JAWS2/JAWS/Cache_Hash_T.h: + * apps/JAWS2/JAWS/Cache_Manager.cpp: + * apps/JAWS2/JAWS/Cache_Manager.h: + * apps/JAWS2/JAWS/Cache_Object.{h,cpp}: + * apps/JAWS2/JAWS/Export.h: + * apps/JAWS2/JAWS/FILE.{h,cpp}: + * apps/JAWS2/JAWS/Filecache.{h,cpp}: + * apps/JAWS2/JAWS/Headers.cpp: + * apps/drwho/BS_Client.cpp: + * apps/drwho/BS_Server.cpp: + * apps/drwho/Binary_Search.cpp: + * apps/drwho/CM_Client.{h,cpp}: + * apps/drwho/CM_Server.cpp: + * apps/drwho/Comm_Manager.h: + * apps/drwho/File_Manager.cpp: + * apps/drwho/HT_Client.cpp: + * apps/drwho/HT_Server.cpp: + * apps/drwho/Hash_Table.cpp: + * apps/drwho/Multicast_Manager.{h,cpp}: + * apps/drwho/Options.h: + * apps/drwho/PMC_All.cpp: + * apps/drwho/PMC_Flo.cpp: + * apps/drwho/PMC_Ruser.cpp: + * apps/drwho/PMC_Usr.cpp: + * apps/drwho/PMS_All.cpp: + * apps/drwho/PMS_Flo.cpp: + * apps/drwho/PMS_Ruser.cpp: + * apps/drwho/PMS_Usr.cpp: + * apps/drwho/PM_Client.cpp: + * apps/drwho/PM_Server.cpp: + * apps/drwho/Protocol_Manager.{h,cpp}: + * apps/drwho/Rwho_DB_Manager.cpp: + * apps/drwho/SL_Server.cpp: + * apps/drwho/SM_Client.cpp: + * apps/drwho/SM_Server.cpp: + * apps/drwho/client.cpp: + * apps/drwho/global.h: + * apps/drwho/server.cpp: + * apps/gperf/src/Bool_Array.cpp: + * apps/gperf/src/Gen_Perf.cpp: + * apps/gperf/src/Hash_Table.cpp: + * apps/gperf/src/Hash_Table.h: + * apps/gperf/src/Iterator.cpp: + * apps/gperf/src/Key_List.cpp: + * apps/gperf/src/List_Node.cpp: + * apps/gperf/src/Options.cpp: + * apps/gperf/src/Options.h: + * apps/gperf/src/Vectors.h: + * apps/gperf/src/gperf.cpp: + * apps/gperf/tests/test.cpp: + * apps/mkcsregdb/mkcsregdb.cpp: + * apps/soreduce/Library.cpp: + * apps/soreduce/Obj_Module.cpp: + * apps/soreduce/SO_Group.cpp: + * examples/ASX/Event_Server/Event_Server/Consumer_Router.cpp: + * examples/ASX/Event_Server/Event_Server/Options.{h,cpp}: + * examples/ASX/Event_Server/Event_Server/Supplier_Router.cpp: + * examples/ASX/Message_Queue/bounded_buffer.cpp: + * examples/ASX/Message_Queue/buffer_stream.cpp: + * examples/ASX/UPIPE_Event_Server/Options.{h,cpp}: + * examples/C++NPv1/Logging_Client.cpp: + * examples/C++NPv1/Logging_Handler.cpp: + * examples/C++NPv1/Logging_Server.cpp: + * examples/C++NPv1/Reactive_Logging_Server_Ex.h: + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: + * examples/C++NPv2/Client_Logging_Daemon.cpp: + * examples/C++NPv2/Configurable_Logging_Server.cpp: + * examples/C++NPv2/Logging_Event_Handler.cpp: + * examples/C++NPv2/Logging_Handler.cpp: + * examples/C++NPv2/Reactor_Logging_Server_Adapter.cpp: + * examples/C++NPv2/SR_Configurable_Logging_Server.cpp: + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: + * examples/C++NPv2/Server_Shutdown.cpp: + * examples/C++NPv2/Service_Reporter.cpp: + * examples/C++NPv2/TPC_Logging_Server.cpp: + * examples/C++NPv2/TP_Logging_Server.cpp: + * examples/C++NPv2/TP_Logging_Server.h: + * examples/C++NPv2/TP_Reactor_Logging_Server.cpp: + * examples/C++NPv2/WFMO_Reactor_Logging_Server.cpp: + * examples/C++NPv2/display_logfile.cpp: + * examples/DLL/Newsweek.{h,cpp}: + * examples/DLL/Today.{h,cpp}: + * examples/IPC_SAP/ATM_SAP/CPP-client.cpp: + * examples/IPC_SAP/ATM_SAP/CPP-server.cpp: + * examples/IPC_SAP/DEV_SAP/reader/reader.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-Msg-client.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-Msg-server.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-client.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-server.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-test.cpp: + * examples/IPC_SAP/FILE_SAP/client.cpp: + * examples/IPC_SAP/SOCK_SAP/C-inclient.cpp: + * examples/IPC_SAP/SOCK_SAP/C-inserver.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.h: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-poll.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-unclient.cpp: + * examples/IPC_SAP/SOCK_SAP/FD-unclient.cpp: + * examples/IPC_SAP/SOCK_SAP/FD-unserver.cpp: + * examples/IPC_SAP/SPIPE_SAP/NPClient.cpp: + * examples/IPC_SAP/SPIPE_SAP/NPServer.cpp: + * examples/IPC_SAP/SPIPE_SAP/client.cpp: + * examples/IPC_SAP/SPIPE_SAP/consumer_msg.cpp: + * examples/IPC_SAP/SPIPE_SAP/consumer_read.cpp: + * examples/IPC_SAP/SPIPE_SAP/producer_msg.cpp: + * examples/IPC_SAP/SPIPE_SAP/producer_read.cpp: + * examples/IPC_SAP/SPIPE_SAP/server.cpp: + * examples/IPC_SAP/SPIPE_SAP/shared.h: + * examples/IPC_SAP/SSL_SAP/SSL-client-simple.h: + * examples/IPC_SAP/SSL_SAP/SSL-client.h: + * examples/IPC_SAP/TLI_SAP/CPP-client.cpp: + * examples/IPC_SAP/TLI_SAP/CPP-server.cpp: + * examples/IPC_SAP/TLI_SAP/db-client.cpp: + * examples/IPC_SAP/TLI_SAP/ftp-client.cpp: + * examples/IPC_SAP/UPIPE_SAP/ex1.cpp: + * examples/IPC_SAP/UPIPE_SAP/ex2.cpp: + * examples/IPC_SAP/UPIPE_SAP/ex3.cpp: + * examples/Log_Msg/test_callback.cpp: + * examples/Log_Msg/test_log_msg.cpp: + * examples/Log_Msg/test_ostream.cpp: + * examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFCDlg.cpp: + * examples/Logger/Acceptor-server/server_loggerd.h: + * examples/Logger/client/logging_app.cpp: + * examples/Logger/simple-server/Logging_Handler.h: + * examples/Map_Manager/test_hash_map_manager.cpp: + * examples/Mem_Map/IO-tests/IO_Test.cpp: + * examples/Mem_Map/IO-tests/test_io.cpp: + * examples/Mem_Map/file-reverse/file-reverse.cpp: + * examples/Misc/test_XtReactor1.cpp,: + * examples/Misc/test_XtReactor2.cpp: + * examples/Misc/test_dump.{h,cpp}: + * examples/Misc/test_get_opt.cpp: + * examples/Misc/test_profile_timer.cpp: + * examples/Misc/test_read_buffer.cpp: + * examples/Misc/test_set.cpp: + * examples/Misc/test_sstring.cpp: + * examples/Misc/test_trace.cpp: + * examples/NT_Service/ntsvc.cpp: + * examples/Naming/test_multiple_contexts.cpp: + * examples/Naming/test_non_existent.cpp: + * examples/Naming/test_open.cpp: + * examples/Naming/test_writers.cpp: + * examples/OS/Process/imore.cpp: + * examples/OS/Process/process.cpp: + * examples/QOS/Change_Receiver_FlowSpec/Fill_ACE_QoS.h: + * examples/QOS/Change_Receiver_FlowSpec/QoS_Util.cpp: + * examples/QOS/Change_Receiver_FlowSpec/Sender_QoS_Event_Handler.cpp: + * examples/QOS/Change_Receiver_FlowSpec/receiver.cpp: + * examples/QOS/Change_Receiver_FlowSpec/sender.cpp: + * examples/QOS/Change_Sender_TSpec/Fill_ACE_QoS.h: + * examples/QOS/Change_Sender_TSpec/QoS_Util.cpp: + * examples/QOS/Change_Sender_TSpec/Sender_QoS_Event_Handler.cpp: + * examples/QOS/Change_Sender_TSpec/receiver.cpp: + * examples/QOS/Change_Sender_TSpec/sender.cpp: + * examples/QOS/Simple/Fill_ACE_QoS.h: + * examples/QOS/Simple/QoS_Util.cpp: + * examples/QOS/Simple/Sender_QoS_Event_Handler.cpp: + * examples/QOS/Simple/receiver.cpp: + * examples/QOS/Simple/sender.cpp: + * examples/RMCast/Send_File/Receiver.cpp: + * examples/RMCast/Send_File/Sender.cpp: + * examples/Reactor/Dgram/CODgram.cpp: + * examples/Reactor/Dgram/Dgram.cpp: + * examples/Reactor/Misc/pingpong.cpp: + * examples/Reactor/Misc/test_early_timeouts.cpp: + * examples/Reactor/Misc/test_time_value.cpp: + * examples/Reactor/Multicast/Log_Wrapper.cpp: + * examples/Reactor/Multicast/client.cpp: + * examples/Reactor/Multicast/server.cpp: + * examples/Reactor/Ntalker/ntalker.cpp: + * examples/Reactor/Proactor/post_completions.cpp: + * examples/Reactor/Proactor/test_aiocb_ace.cpp: + * examples/Reactor/Proactor/test_cancel.cpp: + * examples/Reactor/Proactor/test_end_event_loop.cpp: + * examples/Reactor/Proactor/test_proactor.cpp: + * examples/Reactor/Proactor/test_timeout.cpp: + * examples/Reactor/Proactor/test_udp_proactor.cpp: + * examples/Reactor/WFMO_Reactor/APC.cpp: + * examples/Reactor/WFMO_Reactor/Abandoned.cpp: + * examples/Reactor/WFMO_Reactor/Directory_Changes.cpp: + * examples/Reactor/WFMO_Reactor/Exceptions.cpp: + * examples/Reactor/WFMO_Reactor/Multithreading.cpp: + * examples/Reactor/WFMO_Reactor/Registration.cpp: + * examples/Reactor/WFMO_Reactor/Registry_Changes.cpp: + * examples/Reactor/WFMO_Reactor/Removals.cpp: + * examples/Reactor/WFMO_Reactor/Suspended_Removals.cpp: + * examples/Reactor/WFMO_Reactor/Talker.cpp: + * examples/Reactor/WFMO_Reactor/Timeouts.cpp: + * examples/Reactor/WFMO_Reactor/Window_Messages.cpp: + * examples/Registry/test_registry_iterator.cpp: + * examples/Registry/test_registry_update.cpp: + * examples/Service_Configurator/IPC-tests/client/broadcast_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_dgram_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_fifo_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_pipe_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_spipe_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_stream_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_dgram_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_service_directory_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_stream_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_thr_stream_client_test.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.i: + * examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.i: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.i: + * examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.i: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.i: + * examples/Service_Configurator/IPC-tests/server/Handle_L_SPIPE.i: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.i: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Dgram.i: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.i: + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.i: + * examples/Service_Configurator/Misc/main.cpp: + * examples/Shared_Malloc/Options.cpp: + * examples/Shared_Malloc/Options.h: + * examples/Shared_Malloc/test_malloc.cpp: + * examples/Shared_Memory/test_MM.cpp: + * examples/Shared_Memory/test_SV.cpp: + * examples/Smart_Pointers/Widget_Part_Impl.cpp: + * examples/Smart_Pointers/gadget_test.cpp: + * examples/Smart_Pointers/widget_test.cpp: + * examples/Synch/proc_sema.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Client.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Server.cpp: + * examples/System_V_IPC/SV_Message_Queues/TMQ_Client.cpp: + * examples/System_V_IPC/SV_Message_Queues/TMQ_Server.cpp: + * examples/System_V_IPC/SV_Message_Queues/test.h: + * examples/System_V_IPC/SV_Shared_Memory/SV_Shared_Memory_Test.cpp: + * examples/System_V_IPC/SV_Shared_Memory/SV_Shared_Memory_Test.h: + * examples/Threads/auto_event.cpp: + * examples/Threads/barrier1.cpp: + * examples/Threads/barrier2.cpp: + * examples/Threads/cancel.cpp: + * examples/Threads/future1.cpp: + * examples/Threads/future2.cpp: + * examples/Threads/manual_event.cpp: + * examples/Threads/process_manager.cpp: + * examples/Threads/process_mutex.cpp: + * examples/Threads/process_semaphore.cpp: + * examples/Threads/reader_writer.cpp: + * examples/Threads/recursive_mutex.cpp: + * examples/Threads/task_five.cpp: + * examples/Threads/task_four.cpp: + * examples/Threads/task_one.cpp: + * examples/Threads/task_three.cpp: + * examples/Threads/task_two.cpp: + * examples/Threads/thread_manager.cpp: + * examples/Threads/thread_pool.cpp: + * examples/Threads/thread_specific.cpp: + * examples/Threads/token.cpp: + * examples/Threads/tss1.cpp: + * examples/Threads/tss2.cpp:: + * examples/Timer_Queue/main_async.cpp: + * examples/Timer_Queue/main_reactor.cpp: + * examples/Timer_Queue/main_thread.cpp: + * examples/Web_Crawler/Options.cpp: + * examples/Web_Crawler/Options.h: + * examples/Web_Crawler/URL_Addr.cpp: + * examples/Web_Crawler/URL_Status.h: + * netsvcs/clients/Logger/direct_logging.cpp: + * netsvcs/clients/Logger/indirect_logging.cpp: + * netsvcs/clients/Naming/Client/Client_Test.cpp: + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp: + * netsvcs/clients/Tokens/collection/collection.cpp: + * netsvcs/clients/Tokens/collection/rw_locks.cpp: + * netsvcs/clients/Tokens/deadlock/deadlock_detection_test.cpp: + * netsvcs/clients/Tokens/invariant/invariant.cpp: + * netsvcs/clients/Tokens/manual/manual.cpp: + * netsvcs/clients/Tokens/mutex/test_mutex.cpp: + * netsvcs/clients/Tokens/rw_lock/rw_locks.cpp: + * netsvcs/lib/Base_Optimizer.h: + * netsvcs/lib/Log_Message_Receiver.h: + * netsvcs/lib/Server_Logging_Handler.h: + * netsvcs/lib/Server_Logging_Handler_T.cpp: + * netsvcs/lib/TS_Clerk_Handler.cpp: + * netsvcs/lib/TS_Server_Handler.cpp: + * performance-tests/Misc/basic_perf.cpp: + * performance-tests/Misc/childbirth_time.cpp: + * performance-tests/Misc/context_switch_time.cpp: + * performance-tests/Misc/preempt.cpp: + * performance-tests/Misc/test_mutex.cpp: + * performance-tests/Misc/test_naming.cpp: + * performance-tests/Misc/test_singleton.cpp: + * performance-tests/SCTP/Options_Manager.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_Association_Test.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_clt.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_srv.cpp: + * performance-tests/SCTP/SOCK_STREAM_clt.cpp: + * performance-tests/SCTP/SOCK_STREAM_srv.cpp: + * performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.cpp: + * performance-tests/Server_Concurrency/Leader_Follower/leader_follower.cpp: + * performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.cpp: + * performance-tests/Server_Concurrency/Queue_Based_Workers/workers.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.h: + * performance-tests/Synch-Benchmarks/Synch_Lib/export_mac.h: + * performance-tests/TCP/tcp_test.cpp: + * performance-tests/UDP/udp_test.cpp: + * tests/Aio_Platform_Test.cpp: + * tests/Auto_IncDec_Test.cpp: + * tests/Barrier_Test.cpp: + * tests/Basic_Types_Test.cpp: + * tests/Buffer_Stream_Test.cpp: + * tests/CE_fostream.h: + * tests/Cache_Map_Manager_Test.cpp: + * tests/Config_Test.cpp: + * tests/Conn_Test.cpp: + * tests/DLL_Test.cpp: + * tests/DLL_Test_Impl.cpp: + * tests/DLL_Test_Impl.h: + * tests/Dirent_Test.cpp: + * tests/Enum_Interfaces_Test.cpp: + * tests/Env_Value_Test.cpp: + * tests/FIFO_Test.cpp: + * tests/Framework_Component_DLL.cpp: + * tests/Hash_Map_Bucket_Iterator_Test.cpp: + * tests/Hash_Map_Manager_Test.cpp: + * tests/High_Res_Timer_Test.cpp: + * tests/INET_Addr_Test.cpp: + * tests/Logging_Strategy_Test.cpp: + * tests/MEM_Stream_Test.cpp: + * tests/MEM_Stream_Test.h: + * tests/MM_Shared_Memory_Test.cpp: + * tests/MT_Reactor_Upcall_Test.cpp: + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + * tests/MT_SOCK_Test.cpp: + * tests/Main.cpp: + * tests/Map_Test.{h,cpp}: + * tests/Max_Default_Port_Test.cpp: + * tests/Mem_Map_Test.cpp: + * tests/Message_Queue_Notifications_Test.cpp: + * tests/Message_Queue_Test.cpp: + * tests/Message_Queue_Test_Ex.{h,cpp}: + * tests/Multicast_Test.cpp: + * tests/Multihomed_INET_Addr_Test.cpp: + * tests/Naming_Test.cpp: + * tests/New_Fail_Test.cpp: + * tests/OS_Test.cpp: + * tests/Obstack_Test.cpp: + * tests/Pipe_Test.cpp: + * tests/Priority_Task_Test.cpp: + * tests/Proactor_Test.cpp: + * tests/Process_Mutex_Test.cpp: + * tests/Process_Strategy_Test.cpp: + * tests/RB_Tree_Test.cpp: + * tests/Reactor_Notify_Test.cpp: + * tests/Reader_Writer_Test.cpp: + * tests/Reverse_Lock_Test.cpp: + * tests/SOCK_Connector_Test.cpp: + * tests/SOCK_Send_Recv_Test.cpp: + * tests/SOCK_Test.cpp: + * tests/SPIPE_Test.cpp: + * tests/Semaphore_Test.cpp: + * tests/Signal_Test.cpp: + * tests/Sigset_Ops_Test.cpp: + * tests/Simple_Message_Block_Test.cpp: + * tests/TP_Reactor_Test.{h,cpp}: + * tests/TSS_Test.cpp: + * tests/Test_Output.cpp: + * tests/Thread_Manager_Test.cpp: + * tests/Thread_Mutex_Test.cpp: + * tests/Thread_Pool_Reactor_Resume_Test.cpp: + * tests/Thread_Pool_Reactor_Test.cpp: + * tests/Thread_Pool_Test.cpp: + * tests/Time_Service_Test.cpp: + * tests/Timeprobe_Test.cpp: + * tests/Timer_Queue_Reference_Counting_Test.cpp: + * tests/Timer_Queue_Test.cpp: + * tests/Upgradable_RW_Test.h: + * tests/RMCast/Main.cpp: + * tests/RMCast/RMCast_Fragment_Test.cpp: + * tests/RMCast/RMCast_Membership_Test.cpp: + * tests/RMCast/RMCast_Reassembly_Test.cpp: + * tests/RMCast/RMCast_Reordering_Test.cpp: + * tests/RMCast/RMCast_Retransmission_Test.cpp: + * tests/SSL/Main.cpp: + * websvcs/lib/URL_Addr.cpp: + * websvcs/lib/URL_Addr.i + Removed OS.h and refactored #includes due to above subsetting; + changed occurrences of ACE_OS_String and ACE_OS_Dirent to + ACE_OS; changes u_long, etc., to unsigned long to reduce + dependencies; reordered includes in *.cpp's to come after the + inline file include, reducing the difference between inlined and + non-inlined builds. + + * ace/CLASSIX/CLASSIX_OS.h: + * ace/CLASSIX/CLASSIX_Port_Core.h: + Removed #include OS.h from these files, but didn't add new + headers since it isn't regularly compiled. + + * ACEXML/parser/parser/ParserContext.cpp: + Added template instantiation for ACE_Swap. + +Fri Oct 31 14:29:07 2003 Edward R. Mulholland + + * performance-tests/SCTP/run_spectrum.pl: + + Eliminated spurious error messages. + +Fri Oct 31 14:09:37 2003 Edward R. Mulholland + + * ace/Multihomed_INET_Addr.cpp: + * ace/Multihomed_INET_Addr.h: + + The port numbers of the secondary addresses are now kept in sync + with the port number of the primary address. + + * ace/SOCK_SEQPACK_Acceptor.h: + * ace/SOCK_SEQPACK_Association.h: + * ace/SOCK_SEQPACK_Connector.h: + * ace/OS.h: + + The PEER_ADDR typedefs have been changed from ACE_INET_Addr to + ACE_Multihomed_INET_Addr. The "broken templates" section of + OS.h has been changed accordingly. + + * ace/SOCK_SEQPACK_Acceptor.cpp: + + Hostname restrictions are now preserved during wildcard bind + operations. + +Fri Oct 31 07:50:48 2003 Balachandran Natarajan + + * bin/MakeProjectCreator/config/dynamicinterface.mpb: + * bin/MakeProjectCreator/config/iorinterceptor.mpb: + * bin/MakeProjectCreator/config/messaging.mpb: + * bin/MakeProjectCreator/config/objreftemplate.mpb: + * bin/MakeProjectCreator/config/valuetype.mpb: + + The dependencies were not right. For long the weak links between + libraries allowed us to get away without proper + dependencies. With the refactoring the dependencies got explicit + and we need the dependencies set right. + +Fri Oct 31 07:38:40 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Allow a user to set the sharedname to empty to force only static + builds. Also, fixed the output directory target such that it will + be executed before the library is generated. + + * bin/MakeProjectCreator/templates/automake.mpd: + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/ghs.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/va4icc.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + + Allow these templates to work properly if the sharedname is set to + empty. + + * bin/MakeProjectCreator/templates/vc7.mpd: + * bin/MakeProjectCreator/templates/vc7dll.mpt: + + Partially fixed a bug with static libraries. The wrong + configuration type and library tool was being used. A correct + implementation of the vc7 type would involve splitting the static + build targets from the dynamic into separate projects. + +Thu Oct 30 16:14:06 2003 Balachandran Natarajan + + * ace/Thread_Manager.cpp (spawn_i): + + Fixed ACE_Thread_Manager problem on VxWorks where thread id + could be corrupted by taking address of a temporary + variable. Thank to Dennis Noll, and Brian Mendel for tracking + this down. + +Thu Oct 30 11:57:36 2003 Balachandran Natarajan + + * bin/tao_orb_tests.lst: Added a couple of Portable_Interceptor + tests to the daily builds. + +Thu Oct 30 09:33:15 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + + Allow the GENFLAGS value to be overridden by MPC when the makefiles + are being generated. + +Thu Oct 30 14:24:12 UTC 2003 Johnny Willemsen + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.mpc: + Corrected dynamicflags + +Thu Oct 30 07:48:29 2003 Chad Elliott + + * bin/MakeProjectCreator/config/ciao_servant.mpb: + + Removed the double quotes around E.idl, since this caused problems + with the VC71 projects and wasn't necessary anyway. + +Thu Oct 30 06:35:57 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + + Fixed a reference of libflag that should have been staticflag. + +Wed Oct 29 14:06:45 2003 Venkita Subramonian + + * Kokyu/Kokyu_defs.{h,i}: Added default constructor for + ConfigInfo, which puts in default values. + +Wed Oct 29 12:02:41 2003 Steve Huston + + * bin/MakeProjectCreator/templates/automake.mpd: Change the + minimum required automake version to 1.7 and added some + further header comments. + +Wed Oct 29 07:03:12 2003 UTC Johnny Willemsen + + * include/makeinclude/rules.local.GNU: + Added a rule so that files with extension .rc are compiled with + COMPILE.rc which is then the RC. By setting then RC to the + resource compiler in the specific GNU file resource files are + compiled. + + * include/makeinclude/wrapper_macros.GNU: + Added COMPILE.rc rule that uses the new RC to make it easy to set the + resource compiler needed. + + * include/makeinclude/platform_gnuwin32_common.GNU: + Set RC to windres. Cygwin and MinGW have a resource compiler and then + put version info into the DLL. + + * bin/MakeProjectCreator/templates/gnu.mpd: + Generate the resource files into the makefile and when RC is set add + those files to FILES so that the resource files are compiled. + + Thanks to Andrew L. Shwaika for pointing us at the + possibility to use a resource compiler with MinGW. + +Tue Oct 28 17:07:19 2003 Steve Huston + + * Makefile.am: Added definition of ACLOCAL so autoconf stuff gets + rebuilt correctly when needed. + +Tue Oct 28 16:33:41 2003 Steve Huston + + * m4/ace.m4: Added new option, --enable-stdcpplib, defaults to yes. + This enables (disables) use of the standard C++ library on platforms + where it makes a difference, like HP-UX aC++. + + * m4/compiler.m4: For HP aC++, add -Ae (c89 mode) to CFLAGS. + When using --enable-stdcpplib=yes with aC++, add -AA to CXXFLAGS. + +Tue Oct 28 07:52:12 UTC 2003 Johnny Willemsen + + * include/makeinclude/wrapper_macros.GNU: + Added GNU variable pipes. When this is not set, it defaults to 0. + When it is 1, it results in adding -pipe to the CFLAGS. + + * include/makeinclude/platform_gnuwin32_common.GNU: + Only set pipes to 1, the new code in wrapper_macros.GNU will add + the needed compiler flag + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + When running the Tornado compiler on Win32 we can use pipes, so + when pipes is not set, set it to 1. Also don't add the compiler + flag anymore, this is done in wrapper_macros.GNU + +Mon Oct 27 16:00:19 2003 Steve Huston + + * ACEXML/common/ZipCharStream.cpp: Silence HP aC++ warnings about + an empty translation unit. + +Mon Oct 27 15:51:39 2003 Steve Huston + + * configure.ac: + * m4/acinclude.m4: Remove \ from \-quoted double- and back-quote + characters to obey warnings from autoheader 2.57g. autoheader's + processing of these warnings was erroneous, causing it to fail. + +Mon Oct 27 19:48:13 UTC 2003 Johnny Willemsen + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + For reverseclean don't use the reverse_clean perl script but do + a realclean in reverse order. This fixes the problem we have in the + Sun Forte build where the list of arguments to the perl script is + to long. + +Mon Oct 27 11:17:03 2003 Gautam Thaker + + * SOCK_SEQPACK_clt.cpp: + Fixed a previously made change that was using sizes for tests as + n**2 rather than 2**n! + SOCK_STREAM_clt.cpp: + Fixed a previously made change that was using sizes for tests as + n**2 rather than 2**n! + +Sat Oct 25 10:51:23 UTC 2003 Johnny Willemsen + + * ace/config-win32-common.h: Fixed compile problem in this file + +Fri Oct 17 18:40:55 2003 Douglas C. Schmidt + + * ace/Log_Msg.cpp: Modify the ACE_Log_Msg::dec() method to avoid + "going negative." Thanks to Matthieu Vansteene + for reporting this. + +Thu Oct 23 17:14:47 2003 Douglas C. Schmidt + + * ace/config-win32-common.h: Fixed a problem whereby ACE_IOV_MAX + should have been 16 for Win 95/98/me. Thanks to Enrico Detoma + for reporting this. + +Fri Oct 24 11:27:52 2003 Venkita Subramonian + + * ACE version 5.3.5 released. + +Fri Oct 24 10:48:41 2003 Venkita Subramonian + + * ACE-INSTALL.html: Changed documentation to reflect the fact that + $ACE_ROOT/lib also has to added LD_LIBRARY_PATH since some of + the libraries are generated in this directory. + +Fri Oct 24 10:46:56 2003 Balachandran Natarajan + + * Makefile: Added lib to the release files. + +Wed Oct 22 11:14:33 UTC 2003 Johnny Willemsen + + * ASNMP/tests/Counter64_Test.cpp: + Added define ULLONG on Win32 to fix compile error with MinGW. + +Tue Oct 21 11:00:51 2003 Balachandran Natarajan + + * ace/Select_Reactor_Base.cpp (notify): Release memory from the + Event_Handler_var after adding messages to the notify queue + without adding any messages to the pipe. Thanks to the daily + builds for catching this. + +Mon Oct 20 13:31:36 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/nmake.mpd: + + Remove the dependency on the pch generated file from the object + target. It is unnecessary and causes problems with the /YX + option. + +Mon Oct 20 16:38:12 UTC 2003 Don Hinton + + * bin/create_ace_build.pl: + Don't exclude *.exp when linking since these are the expected + result files for apps/gperf/tests. + + * tests/New_Fail_Test: + Added #ifdef around unused code to remove warnings> + + * ace/Auto_Event.cpp: + * ace/Event.cpp: + * ace/Lock.cpp: + * ace/Manual_Event.cpp: + * ace/Mutex.cpp: + * ace/RW_Mutex.cpp: + * ace/RW_Thread_Mutex.cpp: + * ace/Thread_Semaphore.cpp: + Added #include of the associated headers that were missing. + This will be needed once these files are compiled separately via + MPC. Thanks to Barry Benowitz for + motivating this. + +Sun Oct 19 21:25:59 2003 Venkita Subramonian + + * performance-tests/SCTP/hist.cpp: Fixed fuzz errors. Include + "ace/os_include/os_math.h" instead of math.h. + +Sun Oct 19 21:16:44 2003 Venkita Subramonian + + * apps/JAWS3/http/HTTP_Service_Handler.h: + * apps/JAWS3/http/HTTP_Service_Handler.cpp: + * apps/JAWS3/small/SS_Service_Handler.cpp: + * apps/JAWS3/small/SS_Service_Handler.h: Fixed Fuzz errors. + +Sun Oct 19 20:36:50 2003 Venkita Subramonian + + * Kokyu/docs/Kokyu.html: + * Kokyu/docs/kokyu1.jpg: + * Kokyu/docs/kokyu2.jpg: + * Kokyu/docs/KokyuEC.jpg: + * Kokyu/Kokyu.html: + * Kokyu/kokyu1.jpg: + * Kokyu/kokyu2.jpg: + * Kokyu/KokyuEC.jpg: Moved these files to Kokyu/docs. Thanks to + Bala for pointing this out. + +Fri Oct 17 16:21:39 2003 Steve Huston + + * include/makeinclude/wrapper_macros.GNU: Only set SONAME if + platform_macros.GNU didn't. + + * include/makeinclude/platform_g++_common.GNU: Conditionalize + addition of SONAME to SOFLAGS based on versioned_so, not on + SONAME's content. However, even with versioned_so, don't try to + add SOFLAGS stuff if with_ld is openbsd - it doesn't support it. + + * include/makeinclude/platform_aix_g++.GNU: + * include/makeinclude/platform_hpux_aCC.GNU: + * include/makeinclude/platform_hpux_gcc.GNU: + * include/makeinclude/platform_macosx.GNU: + * include/makeinclude/platform_vxworks5.x_g++.GNU: Set versioned_so + to 0 by default to avoid shared lib version tagging rather + than set SONAME to blank. + + * include/makeinclude/platform_openbsd.GNU: Set with_ld to openbsd + to tell platform_g++_common.GNU not to add the ldname options + even if versioned_so is enabled. + + * include/makeinclude/platform_sunos5_sunc++.GNU: Add shared lib + option to SOFLAGS if versioned_so is 1. Set versioned_so to 1 + by default. + +Fri Oct 17 06:48:15 UTC 2003 Johnny Willemsen + + * ace/OS.h: + When using the new CBX preview compiler define ACE_NSIG as _NSIG + +Thu Oct 16 21:18:06 2003 Venkita Subramonian + + * bin/MakeProjectCreator/config/kokyu_dsrt_schedulers.mpb: + Added rtscheduling as a base project. This should take care of + link problems in cygwin build. + +Thu Oct 16 18:08:01 UTC 2003 Johnny Willemsen + + * ace/Basic_Types.h: + Reverted my change below, when I committed it, I realized it + is not the correct place + + * ace/config-win32-borland.h: + Added ACE_LACKS_PTRDIFF_T and ACE_PTRDIFF_T_TYPE to get the + ptrdiff_t out of the std namespace. + +Thu Oct 16 17:56:13 UTC 2003 Johnny Willemsen + + * ace/Basic_Types.h: + When using the new Borland compiler from CBuilderX get + ptrdiff_t out of the std namespace. This fixes hundreds + of compile errors in our CBX Preview build. + +Thu Oct 16 15:36:22 2003 Steve Huston + + * bin/PerlACE/Process_Win32.pm: For testing using Pocket Controller, + use "start/wait" instead of running the command and sleeping. Gets + the tests run quicker and more reliably. Requires Pocket Controller + Enterprise V4.01 or higher. + +Thu Oct 16 09:03:11 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + + Fixed another problem with * in the after keyword. Multiple + listings with * would only pick up the first one. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + If install is set to . for exe's then don't do anything. + + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/makedll.mpt: + + Added support for setting ar flags and setting cpp flags on the + make command line. + +Thu Oct 16 09:02:24 2003 Chad Elliott + + * bin/DependencyGenerator/DependencyGenerator.pm: + + Escape regular expression special characters from strings + before they are used as regular expressions. + +Thu Oct 16 08:37:54 2003 Chad Elliott + + * apps/gperf/tests/tests.mpc: + + Fixed a bug with dependencies and parallelism between building the + test and running the test. + +Wed Oct 15 13:40:02 2003 Huang-Ming Huang + + * bin/MakeProjectCreator/config/ftrtevent.mpb + * bin/MakeProjectCreator/config/ftrteventclient.mpb + Added for fault tolerant event service. + +Wed Oct 15 18:28:02 UTC 2003 Don Hinton + + * ace/os_include/net/os_if.h: + Added #undef of IOR on HP-UX. IOR is used in TAO. Thanks to + Torsten Kopper for this patch. + +Wed Oct 15 12:10:39 2003 Douglas C. Schmidt + + * ACE-INSTALL.html: Updated the documentation to make it + clear that setenv is a TCSH/CSHism. Thanks to David McKen + for reporting this. + +Wed Oct 15 13:22:32 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_linux_borland.GNU: + Also set versioned_so to 0 in this file. + +Wed Oct 15 13:16:12 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_mingw32.GNU: + * include/makeinclude/platform_cygwin32.GNU: + Instead of setting SONAME and SOVERSION to empty, set + versioned_so to 0 to indicate that versioned dll's should + be used because cygwin and mingw have problem with this. + This makes Cygwin/MinGW working again. + +Wed Oct 15 08:45:20 EDT 2003 Kevin Bryank + + * bin/MakeProjectCreator/config/rtcosscheduling.mpb: + Adding base project for using the RTC 1.0 Scheduling Service + +Wed Oct 15 10:40:12 UTC 2003 Johnny Willemsen + + * ace/Select_Reactor_Base.cpp: + Fixed unused argument warning when ACE_HAS_REACTOR_NOTIFICATION_QUEUE + is defined + +Tue Oct 14 21:54:07 2003 Nanbor Wang + + * Makefile (CIAO_CORE_DIRS): Added Kokyu to the list of base + library for CIAO. Although CIAO doesn't depend on Kokyu, it is + needed to allow the compilation in orbsvcs/orbsvcs/ to run to + completion. + +Tue Oct 14 23:21:00 UTC 2003 Don Hinton + + * ace/OS.h: + Removed following method declarations that were not implemented + or used: times(), cond_timedwait_i(), alarm_i(), ualarm_i(), + sleep_i(), nanosleep_i(), select_i(), poll_i(), sema_wait_i(), + sigtimedwait_i(), gettimeofday_i(). + + * ace/Process.h: + Fixed typo and added #include of Global_Macros.h. + +Tue Oct 14 17:13:46 2003 Douglas C. Schmidt + + * ace/Process.h: Put the ACE_Process copy constructor and + assignment operator in the private part of the class to disallow + copying. Thanks to Adam Fanello for + reporting this. + + * ace/OS.cpp: Added patches to support PHARLAP. Thanks + to Ira Burton for supplying these. + +Tue Oct 14 13:54:19 2003 Steve Huston + Picked up from ACE 5.3: + Wed Jun 11 17:18:39 2003 Steve Huston + + * include/makeinclude/wrapper_macros.GNU: Make SOVERSION + user-settable if versioned_so is enabled. Thanks to Craig L. + Ching for this idea. + Also moved the versioned_so and SOVERSION setup to after + platform_macros.GNU is included so that users can set this stuff + up in their platform_macros.GNU file. The ACE_MAJOR_VERSION, + etc. variables are still set up before platform_macros.GNU, though, + in case platform_macros.GNU wants to use them. + +Tue Oct 14 10:45:32 2003 Nanbor Wang + + * Makefile: Added a new CIAO_Core target for building all CIAO + core libraries and tools, including everything they need. + Thanks to Gautam for suggesting this. + +Tue Oct 14 03:43:47 2003 Venkita Subramonian + + * Kokyu/DSRT_Direct_Dispatcher_Impl_T.cpp: Added this-> + qualification to instance variables in base class to fix + compile warnings in HPUX build. + + * Kokyu/Default_Dispatcher_Impl.cpp: + * Kokyu/DSRT_CV_Dispatcher_Impl_T.cpp: + * Kokyu/Dispatcher_Task.cpp: + * Kokyu/Dispatcher_Task.h: + * Kokyu/Kokyu.h: + * Kokyu/Kokyu_defs.i: Removed/added comments + +Tue Oct 14 05:50:43 UTC 2003 Johnny Willemsen + + * tests/Reactor_Notification_Queue_Test.cpp: + Fixed compile error in MSVC6 WChar build + +Mon Oct 13 17:52:31 2003 Balachandran Natarajan + + * tests/Reactor_Notification_Queue_Test.cpp: Fixed a warning in + g++ builds. + +Tue Oct 14 05:27:03 2003 Balachandran Natarajan + + * tests/Reactor_Notification_Queue_Test.dsp: Added this time for + real. + +Mon Oct 13 15:25:41 2003 Venkita Subramonian + + * bin/MakeProjectCreator/config/kokyu_dsrt_schedulers.mpb: + Added include path to the Kokyu_dsrt_schedulers directory. + +Mon Oct 13 08:51:29 2003 Balachandran Natarajan + + * ace/ace_wchar.inl: Reverted the change to BUG 1605 that was + applied. The MSDN documentation doesn't suggest a 1 instead of a + -1. Reopening BUG 1605. + +Mon Oct 13 12:39:33 UTC 2003 Johnny Willemsen + + * tests/Makefile.tests: + Fixed typo in Reactor_Notification_Queue_Test + +Mon Oct 13 08:36:43 UTC 2003 Johnny Willemsen + + * Kokyu/Kokyu_dsrt.h: + * Kokyu/DSRT_CV_Dispatcher_Impl_T.h: + Fixed fuzz pre/post error. + + * tests/Reactor_Notification_Queue_Test.cpp: + Fixed fuzz file mismatch error. + +Mon Oct 13 06:34:12 UTC 2003 Johnny Willemsen + + * bin/mpc.pl: + * bin/MakeProjectCreator/templates/cbxexe.mpt: + * bin/MakeProjectCreator/templates/cbxdll.mpt: + * bin/MakeProjectCreator/templates/cbx.mpd: + * bin/MakeProjectCreator/modules/CbxProjectCreator.pm: + Added first version of cbx generator. This generated project files + for the new C++BuilderX development environment. This just sets some + of the options and adds all files to the project. + +Sun Oct 12 21:07:04 2003 Balachandran Natarajan + + * tests/Makefile.tests: + * tests/Tests.bor: + * tests/run_test.lst: + * tests/tests.mpc: Regular exercise for building and running the + test on all the platforms. + +Sun Oct 12 19:03:31 2003 Venkita Subramonian + + * Kokyu/Dispatcher_Task.cpp: Changed the Null lock in the + allocator to Mutex lock. + +Sun Oct 12 17:20:40 2003 Balachandran Natarajan + + * ace/Select_Reactor_Base.cpp: Fix for [BUG 1268]. Please refer to + bugzilla database at + + http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1268 + + for more details on the source of the problem and the solution + for the same. Thanks to Carlos O'Ryan for providing patches. + + * tests/Reactor_Notification_Queue_Test.cpp: + * tests/Reactor_Notification_Queue_Test.dsp: + * tests/tests.dsw: New test that stresses the feature of sending + notify messages to the reactor. Thanks to Carlos O'Ryan for + providing the test. + +Sun Oct 12 14:08:38 2003 Venkita Subramonian + + * bin/MakeProjectCreator/config/kokyu_dsrt_schedulers.mpb: + * bin/MakeProjectCreator/config/kokyu_dsrt_scheduler_client.mpb: + * bin/MakeProjectCreator/config/kokyu_dsrt_scheduler_server.mpb: + Added MPC base project files for Kokyu DSRT schedulers. + +Sun Oct 12 11:48:02 2003 Venkita Subramonian + + * Kokyu/Kokyu.html: + * Kokyu/kokyu1.jpg: + * Kokyu/kokyu2.jpg: + * Kokyu/KokyuEC.jpg: Added some initial documentation on Kokyu. + +Sun Oct 12 17:34:12 UTC 2003 Johnny Willemsen + + * ACE-INSTALL.html: + Removed mentioning of tests/run_tests.bat, it has been removed + some time ago and the perl script run_tests.pl is the only one + to use. Updated documentation for Borland support. CBuilderX is + now supported, but not the new preview compiler that is shipped + with CBuilderX. + +Sun Oct 12 08:42:32 2003 Venkita Subramonian + + * Kokyu/tests/DSRT_MIF/MIF.cpp: + * Kokyu/tests/DSRT_MIF/Makefile: + * Kokyu/tests/FIFO/test.cpp: + * Kokyu/tests/FIFO/README: + * Kokyu/tests/EDF/README: + * Kokyu/tests/EDF/test.cpp: Added more output info + statements. Added README for the examples. + +Sat Oct 11 23:48:21 2003 Ossama Othman + + * bin/tao_other_tests.lst: + + Enabled TAO load balancer infrastructure controlled membership + and CPU load monitor tests. + +Sat Oct 11 21:51:52 2003 Venkita Subramonian + + * Kokyu/Kokyu_defs.{h,i,cpp}: + * Kokyu/Default_Dispatcher_Impl.cpp: Fixed some minor bugs related + to setting the dispatcher with the correct sched policy. + + * Kokyu/tests/FIFO/test.cpp: Added some output print statements to + print error messages on dispatcher failure. + +Sat Oct 11 17:39:09 2003 Venkita Subramonian + + * Kokyu/Dispatcher_Task.i: + * Kokyu/Dispatcher_Task.h: + * Kokyu/DSRT_Direct_Dispatcher_Impl_T.cpp: + * Kokyu/DSRT_CV_Dispatcher_Impl_T.cpp: + + Add this-> qualification when referencing instance variables in + base class to get rid of compiler warnings in HPUX build. + + * ace/ace_wchar.inl: Fix for BUG 1605. Thanks to Dmitry + Botcharnikov and Stephan Bettermann + for reporting the problem and suggesting + a solution. Please see + + http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1605 + + for a description of the problem. + +Sat Oct 11 11:01:05 2003 Venkita Subramonian + + * Kokyu/Koku_defs.h: + Added export qualification for some classes to get rid of link + errors in MSVC builds. + +Fri Oct 10 22:56:35 2003 Venkita Subramonian + + * Kokyu/Kokyu_defs.{h,i,cpp}: + * Kokyu/Dispatcher_Task.{i,h,cpp}: + * Kokyu/Dispatcher_Impl.h: + * Kokyu/Default_Dispatcher_Impl.cpp: + + Added allocator, sched scope, sched policy, reordering queue + attributes to the Dispatcher_Attributes class. This will make + the dispatcher more configurable. + + * Kokyu/tests/FIFO/test.cpp: + * Kokyu/tests/EDF/test.cpp: + + Added command line options to specify the sched policy. + +Fri Oct 10 19:52:26 UTC 2003 Don Hinton + + * ace/OS.{h,i}: + On some platforms clearerr is a macro. Because of this, + the name ACE_OS::clearerr will cause errors. So in order + to use the macro as it is defined but also keep the name + ACE_OS::clearerr, clearerr macro is used in inline function, + and then undefined. This patch fixes the "fixes" committed by + Wed Sep 24 08:57:36 2003 Balachandran Natarajan + and Tue Apr 15 16:06:24 2003 Douglas + C. Schmidt . Thanks to Olli Savia + for submitting the patch and Bala for motivation me + to apply it... + +Fri Oct 10 10:05:14 UTC 2003 Johnny Willemsen + + * include/makeinclude/compiler.bor: + Instead of obj use $(OBJEXT) and instead of lib use $(LIBEXT) to + handle the new extensions for the CBX Preview compiler. + +Fri Oct 10 08:14:33 UTC 2003 Johnny Willemsen + + * include/makeinclude/compiler.bor: + Added some support for the new CBuilderX preview compiler. This has + a different name and different options to be used. When defining CBX + as environment variable this new compiler is used, else we just use + the normal compiler. + +Thu Oct 09 12:43:51 2003 Irfan Pyarali + + * bin/MakeProjectCreator/config/rtscheduling.mpb (after): The + after directive should have the name of the project and not the + name of the directory. This should solve the problem of + RTScheduling tests making before the RTScheduler library has + been built. + +Wed Oct 08 21:43:30 2003 Huang-Ming Huang + + * bin/MakeProjectCreator/config/ftorb.mpb + * bin/MakeProjectCreator/config/ftclientorb.mpb + * bin/MakeProjectCreator/config/ftserverorb.mpb + * bin/MakeProjectCreator/config/ftorbutils.mpb + + Modified or Added for the separation of FT framework. + +Wed Oct 8 14:17:33 UTC 2003 Johnny Willemsen + + * bin/MakeProjectCreator/templates/gnu.mpd: + When using Kylix use a different $(BIN) rule. This will fix a lot + of the errors we have in the Kylix build. + +Wed Oct 8 13:56:43 UTC 2003 Johnny Willemsen + + * apps/soreduce/Library.cpp: + * apps/soreduce/Obj_Module.cpp: + * apps/soreduce/SO_Group.cpp: + Fixed compile errors that appeared in the MinGW build. Used + the ACE_OS version of methods instead of the native ones. + +Wed Oct 8 07:12:33 UTC 2003 Johnny Willemsen + + * ASNMP/asnmp/address.cpp: + Fixed compile problem in MinGW build + +Tue Oct 7 21:10:22 2003 Venkita Subramonian + + * Kokyu/DSRT_CV_Dispatcher_Impl_T.{h,cpp}: + * Kokyu/DSRT_Dispatcher_Impl_T.{h,cpp}: + * Kokyu/DSRT_Direct_Dispatcher_Impl_T.{h,cpp}: + * Kokyu/DSRT_Dispatch_Item_T.h: + * Kokyu/DSRT_Sched_Queue_T.{h,cpp}: + * Kokyu/Kokyu_dsrt.cpp: + Added condition variable based implementation of DSRTCORBA + scheduler mechanisms. + + * Kokyu/tests/DSRT_MIF/MIF.cpp: + * Kokyu/tests/DSRT_MIF/Makefile: + Added explicit template instantiations. + +Tue Oct 7 14:54:47 2003 Balachandran Natarajan + + * ace/Reactor.h: Renamed a variable name, signals to sigset. The + former was creating problems when Reactor is used with + Qt. Thanks to Hans Utz for + reporting the problem. + + * Makefile: Added Kokyu to the list of controlled files. Thanks to + Don Hinton for the patch and Werner Buchert for reporting the + problem. + +Tue Oct 07 14:01:11 UTC 2003 Johnny Willemsen + + * examples/Mem_Map/IO-tests/test_io.cpp: + Fixed warning in MinGW build. + +Tue Oct 07 07:54:33 UTC 2003 Johnny Willemsen + + * ace/config-win32-cygwin.h: + Removed ACE_LACKS_SENDMSG and ACE_LACKS_RECVMSG because Cygwin + supports these. + +Tue Oct 07 06:07:12 UTC 2003 Johnny Willemsen + + * ace/config-win32-mingw.h: + Define ACE_HAS_SSIZE_T when building with MinGW version 3 or later + + * examples/Connection/blocking/SPIPE-acceptor.cpp: + * examples/Connection/blocking/SPIPE-acceptor.h: + * Connection/blocking/test_spipe_acceptor.cpp: + This example uses AsynchIO, check for this when compiling and when + this is not available then just build a main saying this isn't + available. This fixes build problems in the Cygwin build. + + * bin/MakeProjectCreator/templates/bor.mpd: + Generate NAME, else nothing happens when building with Borland. + +Fri Oct 03 22:41:20 2003 Chris Cleeland + + * ACE version 5.3.4 released. + +Fri Oct 3 09:37:59 2003 Chad Elliott + + * apps/gperf/tests/gperf_test.mpb: + + Added 'gperf' to the after setting to make sure that gperf gets + built before the tests. + +Thu Oct 2 13:49:22 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + + Also remove underscores that are followed by spaces. The value + could be a space separated list and removing the trailing + underscore isn't enough. + +Thu Oct 2 13:02:44 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + + When generating project names from '*' remove trailing + underscores. + +Thu Oct 2 07:33:07 2003 Venkita Subramonian + + * Kokyu/Default_Dispatcher_Impl.{cpp,i}: + * Kokyu/Dispatcher_Task.{cpp,h,i}: + Fixed to use allocators instead of new. + + * Kokyu/Kokyu_defs.{cpp,i,h}: + * Kokyu/Kokyu_dsrt.h: + Moved some structure definitions around. + + * Kokyu/tests/EDF/test.cpp: + * Kokyu/tests/FIFO/test.cpp: + Added shutdown of the dispatcher at the end. + +Wed Oct 1 10:59:35 2003 Chad Elliott + + * apps/gperf/src/gperf.mpc: + + Inherit from the crosscompile base project. + + * bin/MakeProjectCreator/config/crosscompile.mpb: + + Added a project to disable building (with the gnuace type) for + things that shouldn't be built when crosscompiling. + +Wed Oct 1 09:19:28 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/vc7.mpd: + + When optimize is not set, then turn off some linker optimizations. + + * bin/MakeProjectCreator/templates/vc7dll.mpt: + * bin/MakeProjectCreator/templates/vc7exe.mpt: + + When building release targets set optimize equal to 3 (full + optimization). + +Wed Oct 1 07:20:31 2003 Chad Elliott + + * bin/depgen.pl: + + Escape special characters of strings that are going to be used as + regular expressions. + +Wed Oct 1 06:55:03 2003 Chad Elliott + + * apps/drwho/drwho.mpc: + * apps/drwho/nobuild.mpb: + + Added verbatim (in nobuild.mpb) to stop the drwho application from + building on VxWorks, Chorus, minbw32 and cygwin32. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Added a new marker to support the above change. + + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/makedll.mpt: + + Fixed support for HP-UX. + + * bin/depgen.pl: + + Added support to ignore aCC style options (with a plus sign). + +Tue Sep 30 14:06:53 2003 Chad Elliott + + * apps/gperf/tests/gperf_test.mpb: + * apps/gperf/tests/tests.mpc: + + Added an mpc file for all of the gperf tests. + + * bin/MakeProjectCreator/modules/AutomakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/BorlandProjectCreator.pm: + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + * bin/MakeProjectCreator/modules/MakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/NMakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Added code to handle double dollar signs ($$) in mpc assignment + values. In make based projects, leave $$ as it is, but in others + convert $$ into $. + +Tue Sep 30 10:44:42 2003 Balachandran Natarajan + + * ace/Bug_1576_Regression_Test.cpp: Fixed fuzz errors. + +Tue Sep 30 10:43:34 2003 Balachandran Natarajan + + * ace/UUID.cpp (ACE_Utils): + + Fixed fuzz errors. + +Tue Sep 30 10:40:37 2003 Balachandran Natarajan + + * Kokyu/DSRT_Direct_Dispatcher_Impl_T.h: + * Kokyu/DSRT_Dispatch_Item_T.h: + * Kokyu/DSRT_Dispatch_Item_T.i: + * Kokyu/DSRT_Dispatcher_Impl_T.h: + * Kokyu/DSRT_Sched_Queue_T.h: + * Kokyu/Default_Dispatcher_Impl.h: + * Kokyu/Dispatcher_Impl.h: + * Kokyu/Dispatcher_Task.h: + * Kokyu/Kokyu.h: + * Kokyu/Kokyu_defs.h: + * Kokyu/Kokyu_dsrt.h: + + Fixed fuzz errors. + +Tue Sep 30 10:10:17 2003 Chad Elliott + + * bin/ChangeLogEditor/ChangeLogEntry.pm: + + Escape special characters in file names used as regular + expressions. + +Thu Sep 25 12:39:26 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/nmake.mpd: + + Fixed a bug in the nmake template with dependency generation. + +Thu Sep 25 12:05:22 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Added the ability to use || in the <%if()%>. + + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Added support for an empty target within the project, but process + targets (such as idl files) that may generate source code. + + * bin/MakeProjectCreator/modules/VC6WorkspaceCreator.pm: + + Commented out shift for $self since it isn't used. + + * bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm: + + Removed arbitrary restriction upon duplicate project names. + + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/makedll.mpt: + + Support versions of make other than GNU and added support for + Tru64, LynxOS, MacOS, Unixware and QNX. + +Thu Sep 25 09:24:23 2003 Chad Elliott + + * bin/DependencyGenerator/DependencyEditor.pm: + * bin/DependencyGenerator/DependencyGenerator.pm: + * bin/DependencyGenerator/Preprocessor.pm: + * bin/depgen.pl: + + Modified the dependency generator to be smarter about processing + include files. + + * include/makeinclude/rules.local.GNU: + + By default use g++dep for dependency generation, but allow an + alternate by setting the DEPGEN make macro. + +Thu Sep 25 09:28:47 2003 Douglas C. Schmidt + + * performance-tests/Misc/childbirth_time.cpp (prof_ace_os_thread): Replaced + NULL with 0 to ensure the code compiles on LynxOS. Thanks to + Olli Savia for reporting this. + + * ace/Pipe.cpp (open): Swapped the order of the SO_RCVBUF and + SO_SNDBUF socket option calls so that the reader sets the RCVBUF + and the writer sets the SNDBUF. Thanks to Tomer Amiaz + for reporting this. + +Wed Sep 24 15:29:25 2003 Douglas C. Schmidt + + * ace/QtReactor.cpp: Fixed a silly mistake caused by a + comment being too close to a '*' character! Thanks to Serge + Kolgan for reporting this. + +Wed Sep 24 12:36:21 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Add implicit project dependencies when generating a per project + workspace. + +Wed Sep 24 11:00:22 2003 Jeff Parsons + + * ace/ace_dll.dsp: + + Added missing files to the project. + +Wed Sep 24 08:57:36 2003 Balachandran Natarajan + + * bin/auto_run_tests.pl: Fixed incorrect usage message. This fixes + [BUG 1588]. Thanks to Carlos O'Ryan for the patches. + + * ace/OS.h: Fixed definition of macro clearerr to it's original + value. Thanks to Olli Savia for providing the + patches to get it compiling on LynxOS. + +Mon Sep 22 23:10:51 2003 Ossama Othman + + * tests/Bug_1576_Regression_Test.dsp: + * tests/tests.dsw: + + Added missing MSVC++ 6 project file for Bug_1576_Regression_Test + test. Fixes failures in Windows builds due to missing project + file. + +Mon Sep 22 11:36:26 2003 Chad Elliott + + * ace/SString.cpp: + + Added __Lynx__ to the special check for instantiating + ACE_String_Base::NULL_String_. + +Mon Sep 22 11:04:03 2003 Chad Elliott + + * bin/MakeProjectCreator/config/portablegroup.mpb: + + Use comps and tagchecks instead of requires for 'PortableGroup'. + +Mon Sep 22 10:16:06 2003 Chad Elliott + + * include/makeinclude/platform_lynxos.GNU: + + Only set optimize to 1 if it hasn't been set previously. + +Fri Sep 19 07:01:48 2003 Jeff Parsons + + * ace/ace_dll.dsp: + + Added missing files to the project. + +Thu Sep 18 13:49:56 2003 Gautam H. Thaker + + * performance-tests/SCTP/README: + + Added a table providing additional clarifications about + different implementations of SCTP under Linux and its + implications with respect to ACE Wrapper facades supported. + +Thu Sep 18 10:55:58 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Removed the S.cpp from the specialized idl file rules to avoid yet + another parallel build problem. + +Thu Sep 18 08:34:14 2003 Chad Elliott + + * ace/config-all.h: + + Corrected a misspelling of ace in a #include. + +Tue Sep 16 13:19:42 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Set the TEMPINCDIR to a subdirectory under the original TEMPINCDIR + value. This will happen only if TEMPINCDIR is defined (for AIX). + + * include/makeinclude/platform_aix4_cset++.GNU: + * include/makeinclude/platform_aix_ibm.GNU: + + Set the template include directory via the -qtempinc= + option instead of using the default (tempinc). + + * include/makeinclude/rules.lib.GNU: + + Use $(TEMPINCDIR) instead of tempinc. + +Tue Sep 16 11:49:19 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/AutomakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/FeatureParser.pm: + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/Parser.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateInputReader.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + * bin/MakeProjectCreator/modules/VC71WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Perform some optimizations on the code to decrease generation + time. + +Tue Sep 16 11:55:18 2003 Gautam H. Thaker + + * performance-tests/SCTP/SOCK_SEQPACK_srv.cpp: + + fix compiler warning due to unintialized pointer + + * performance-tests/SCTP/README.LKSCTP + + update README to indicate new LKSCTP API support. + + * ace/SOCK_SEQPACK_Acceptor.cpp + * ace/SOCK_SEQPACK_Acceptor.h + * ace/SOCK_SEQPACK_Association.cpp + * ace/SOCK_SEQPACK_Association.h + * ace/SOCK_SEQPACK_Connector.cpp + * ace/SOCK_SEQPACK_Connector.h + + Changes to support changed LKSCTP API support from 2.6.test.4 + kernel an onward. + +Tue Sep 16 10:28:02 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Escape the file name that's used as a regular expression. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Add implicit project dependencies when using the -hierarchy + option. + +Mon Sep 15 13:22:40 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added some optimizations to the circular dependency tree + generation code. + +Mon Sep 15 06:42:28 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added a check in the dependency sorter for an undefined dependency + value (this only happened with the vc7 and vc71 types). + +Fri Sep 12 13:31:50 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Updated the code to detect and drop circular dependencies. The + original code was wrong and would drop dependencies that didn't + need to be. + +Fri Sep 12 11:51:17 2003 Jeff Parsons + + * Kokyu/Kokyu.dsp: + + Fixed setting for release configuration. + +Fri Sep 12 11:38:57 2003 Jeff Parsons + + * tests/Test_Output.dsp: + * tests/UUIDTest.dsp: + + Fixed settings for the release configuration. + +Fri Sep 12 11:36:17 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Modified the AIX compiler support to be a rule, instead of + modifying $(COMPILE.cc), that will be run before building the all + target. + +Fri Sep 12 10:56:02 2003 Jeff Parsons + + * tests/DLL_Test_Impl.dsp: + * tests/DLL_Test.dsp: + + Turned on RTTI for all configurations. + +Thu Sep 11 12:37:05 2003 Douglas C. Schmidt + + * Second anniversary of the September 11th terrorist attacks on + the USA. Let us pray that clear heads will prevail in the + prevention of future conflicts. + +Thu Sep 11 06:39:23 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Fixed a bug with the automatic project dependencies that was + related to directories and the location that mwc.pl was run. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Added support for poor AIX compilers that don't deal with + templates correctly. This was basically a cut and paste into the + template from the original ACE_wrappers/tests/Makefile. + +Wed Sep 10 13:26:14 MST 2003 Trevor Fields + + * bin/performance_stats.sh: + + Changed the path to mogrify. It uses /usr/bin/X11/bin path if it is + not present in the /usr/local/bin + +Wed Sep 10 11:48:31 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Allow files with spaces to be processed correctly. + + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + + Added support for files with spaces (vc7 already supported them). + + * bin/MakeProjectCreator/templates/nmake.mpd: + + Fixed a warning about the /Ob option. + +Wed Sep 10 10:21:16 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Fixed a logic error when filtering out circular dependencies. + +Wed Sep 10 10:07:43 2003 Chad Elliott + + * bin/MakeProjectCreator/config/avstreams.mpb: + * bin/MakeProjectCreator/config/concurrency.mpb: + * bin/MakeProjectCreator/config/event.mpb: + * bin/MakeProjectCreator/config/ftorb.mpb: + * bin/MakeProjectCreator/config/ifrservice.mpb: + * bin/MakeProjectCreator/config/lifecycle.mpb: + * bin/MakeProjectCreator/config/loadbalancing.mpb: + * bin/MakeProjectCreator/config/naming.mpb: + * bin/MakeProjectCreator/config/notification.mpb: + * bin/MakeProjectCreator/config/property.mpb: + * bin/MakeProjectCreator/config/rtcorbaevent.mpb: + * bin/MakeProjectCreator/config/rtevent.mpb: + * bin/MakeProjectCreator/config/rtoldevent.mpb: + * bin/MakeProjectCreator/config/rtsched.mpb: + * bin/MakeProjectCreator/config/rtschedevent.mpb: + * bin/MakeProjectCreator/config/security.mpb: + * bin/MakeProjectCreator/config/time.mpb: + * bin/MakeProjectCreator/config/trading.mpb: + + Change requires to tagchecks. Using requires here was not + correct. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Use tagchecks even if comps is used. + +Wed Sep 10 08:04:25 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added automatic parallel dependencies. If more than one project + in the same directory contains shared source files, then the + projects will become dependent upon each other. This will help + avoid files (both generated source and object) being overwritten + by multiple instances of make. This only has an effect on the + GNUACE workspaces. + +Tue Sep 9 15:04:51 MST 2003 Trevor Fields + + * examples/Web_Crawler/Mem_Map_Stream.h: + + Changed '#define once' back to '#pragma once' + +Tue Sep 9 08:56:42 2003 Jeff Parsons + + * ace/ace_dll.dsp: + + Added CORBA_macros.h to the project. + +Mon Sep 8 07:04:06 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Added support to the 'after' keyword to use the '*' mechanism as + can be used in the project() definition. + +Fri Sep 5 13:39:07 2003 Chad Elliott + + * bin/MakeProjectCreator/config/client.mpb: + * bin/MakeProjectCreator/config/server.mpb: + + I realized that many more mpc projects use client and server. + They should be converted to use taoserver and taoclient, but until + that happens I will put these back. + +Fri Sep 5 08:20:15 2003 Chad Elliott + + * bin/MakeProjectCreator/config/avstreams.mpb: + * bin/MakeProjectCreator/config/concurrency.mpb: + * bin/MakeProjectCreator/config/event.mpb: + * bin/MakeProjectCreator/config/ftorb.mpb: + * bin/MakeProjectCreator/config/ifrservice.mpb: + * bin/MakeProjectCreator/config/lifecycle.mpb: + * bin/MakeProjectCreator/config/loadbalancing.mpb: + * bin/MakeProjectCreator/config/naming.mpb: + * bin/MakeProjectCreator/config/notification.mpb: + * bin/MakeProjectCreator/config/portablegroup.mpb: + * bin/MakeProjectCreator/config/property.mpb: + * bin/MakeProjectCreator/config/qt-min.mpb: + * bin/MakeProjectCreator/config/rmcast.mpb: + * bin/MakeProjectCreator/config/rtcorbaevent.mpb: + * bin/MakeProjectCreator/config/rtevent.mpb: + * bin/MakeProjectCreator/config/rtoldevent.mpb: + * bin/MakeProjectCreator/config/rtsched.mpb: + * bin/MakeProjectCreator/config/rtschedevent.mpb: + * bin/MakeProjectCreator/config/security.mpb: + * bin/MakeProjectCreator/config/time.mpb: + * bin/MakeProjectCreator/config/trading.mpb: + + Updated these base projects with the correct comps and requires + values. + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Make all keywords case insensitive (as it should have been). + + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + + Fixed a bug with custom build types and the use of $^. + + * bin/MakeProjectCreator/config/client.mpb: + * bin/MakeProjectCreator/config/messaging_only.mpb: + * bin/MakeProjectCreator/config/server.mpb: + + Removed these files. They have outlived their usefulness. + +Fri Sep 5 06:56:37 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Fixed a bug with generated idl targets (for those that have + special options or output directories). + +Thu Sep 4 16:00:18 2003 Douglas C. Schmidt + + * ace/Hash_Map_Manager_T.h: Updated the documentation for + current_size() and total_size() to be more accurate. Thanks to + Gerard Grant for motivating this. + +Thu Sep 4 14:21:33 2003 Gautam H. Thaker + + * performance-tests/SCTP/README.SCTP: + * performance-tests/SCTP/README.LKSCTP: + * performance-tests/SCTP/README.OpenSS7: + + Slight update to README files. Made more clear how SCTP + capable kernel and ACE/TAO are built. Due to recent + changes in LKSCTP API additional changes will be committed + in near future as new Linux kernel with the changes is released. + +Thu Sep 4 09:56:28 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Modified the GNUACEWorkspaceCreator to generate a workspace that + will work with the -j option of GNU Make. Each project in the + workspace has an individual target with dependencies on the + necessary targets which allows GNU Make to determine which + projects can be built in parallel. + +Thu Sep 4 09:30:26 2003 Balachandran Natarajan + + * ace/Log_Msg.h: Reverted this change "Wed Sep 3 17:42:00 2003 + Justin Michel ". This caused builds to + break so easily. + +Wed Sep 3 17:42:00 2003 Justin Michel + + * ace/Log_Msg.h: + + An empty ACE_ASSERT now uses ACE_UNUSED_ARG. This prevents + warnings by compilers that aren't smart enough to recognize that + the code *is* used, but only by the preprocessor. + +Wed Sep 3 17:01:02 2003 Balachandran Natarajan + + * ace/UUID.cpp (ACE_Utils): + * examples/Web_Crawler/Mem_Map_Stream.h: + * examples/Web_Crawler/URL_Visitor.h : Fixed warnings in g++ + builds. + +Wed Sep 3 11:53:53 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + + Added a dependency to all source files upon any generated files + (be it idl or custom build). + +Wed Sep 3 09:44:01 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Move the location of the idl_stubs dependency above the include of + rules.lib.GNU. + +Tue Sep 2 18:00:00 2003 Justin Michel + + * ace/UUID.cpp: + * ace/UUID.h: + * ace/UUID.i: + + Removed implementations of copy constructors and assignment + operators, and made them private. These were not correct, and + would cause an infinite loop if ever called. I also had to + comment out several other broken operators that were using the + copy constructors or assignment operators. In general, someone + should take a close look at these classes, and either fix all the + many problems, or remove apparently unnecessary features entirely. + + * test/tests.mpc: + + Added support for the UUID test. This test really doesn't test + very much right now, as it still passed even though I had removed + most of the functionality from the uuid classes. + +Tue Sep 2 17:25:24 UTC 2003 Trevor Fields + + * examples/Web_Crawler/Command_Processor.h + * examples/Web_Crawler/HTTP_URL.h + * examples/Web_Crawler/Iterators.h + * examples/Web_Crawler/Mem_Map_Stream.h + * examples/Web_Crawler/Options.h + * examples/Web_Crawler/URL.h + * examples/Web_Crawler/URL_Addr.h + * examples/Web_Crawler/URL_Status.h + * examples/Web_Crawler/URL_Visitor.h + * examples/Web_Crawler/URL_Visitor_Factory.h + * examples/Web_Crawler/Web_Crawler.h + + Applied Johnny Willemsen's changes. These are fixes for the + #if !defined (ACE_LACKS_PRAGMA_ONCE) lines + +Tue Sep 2 07:02:19 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + + Updated the documentation on the defaulting behavior of MPC. + +Sat Aug 30 12:10:00 2003 Justin Michel + + * bin/create_ace_build.pl: + + Changed to continue linking even when some source files can't + be found. It appears that the perl link() function doesn't work + correctly on Windows Server 2003. A little investigating shows that + several other file functions have problems with long path names on + that os unless you use the Unicode versions. I verified this with a + simple c++ program, that tried to use _fullpath() and CreateHardLink(). + Currently the only problems are in the Notify service performance tests, + because these have extremely long path names. + +Fri Aug 29 15:18:36 UTC 2003 Don Hinton + + * apps/JAWS/clients/Blobby/blobby.mpc: + * apps/soreduce/soreduce.mpc: + Added exename to both of these to force an exe to be created + instead of a library. + + * tests/RMCast/acetest.mpb + Modified the path for Main.cpp so that it picks up the one in + the current directory. Some build were having problems with + this and didn't create the .obj directory which cause + compilation to fail. + +Fri Aug 29 13:41:40 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Modified the template to avoid including wrapper_macros.GNU more + than once. Instead of setting SHLIB_UNCHECKED and then checking + for the feature and setting SHLIB if it's enabled, I set SHLIB, + check for the feature and then reset SHLIB if the feature isn't + enabled. + +Fri Aug 29 13:21:01 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + + Elaborated on a key point of custom definitions. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Empty the ACELIB variable after including wrapper_macros.GNU. + This is a feature of wrapper_macros.GNU that MPC doesn't need. + +Fri Aug 29 08:27:58 2003 Venkita Subramonian + + * Kokyu/Dispatcher_Task.cpp: + * Kokyu/Kokyu_defs.cpp: + * Kokyu/tests/DSRT_MIF/MIF.cpp: Added explicit template + instantiations to fix compile errors in + Solaris_9_Forte7_ACE_(MPC) build. Thanks to Don Hinton for + pointing this out. + +Thu Aug 28 22:29:03 2003 Ossama Othman + + From Don Hinton + * tests/Bug_1576_Regression_Test.cpp: + + Updated to work in wchar builds. + +Thu Aug 28 07:57:33 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Driver.pm: + + Added ERROR: to the output when an unknown option is passed on the + command line. + +Thu Aug 28 07:10:54 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Added the reverseclean target as best as it could be supported by + MPC. + +Thu Aug 28 06:33:12 UTC 2003 Johnny Willemsen + + * ASNMP/tests/Address_Test.cpp: + Fixed compile error + +Thu Aug 28 04:24:24 UTC 2003 Don Hinton + + * ACEXML/apps/svcconf/.depend.Makefile.ACEXML_XML_Svc_Conf_Parser: + * ACEXML/common/.depend.Makefile.ACEXML: + * ACEXML/examples/SAXPrint/.depend.Makefile.SAXPrint: + * ACEXML/parser/parser/.depend.Makefile.ACEXML_Parser: + * ACEXML/tests/.depend.Makefile.ContentHandler_Test: + * ACEXML/tests/.depend.Makefile.HttpCharStream_Test: + * ACEXML/tests/.depend.Makefile.NamespaceSupport_Test: + * ACEXML/tests/.depend.Makefile.Transcoder_Test: + Removed these files since they should be generated dynamically + by the new MPC Makefiles (that will also be generated + dynamically). + +Wed Aug 27 20:34:19 2003 Venkita Subramonian + + * Kokyu/Kokyu_defs.h: Added export qualification to + Dispatcher_Attributes class to fix link error in + Win2K_VC71_NET_DLL build. + +Wed Aug 27 17:52:44 2003 George Edwards + + * bin/tao_orb_tests.lst: + + Added the following new tests to daily builds: + TAO/tests/OBV/Collocated/Forward/ + TAO/tests/Portable_Interceptors/Bug_1559/ + TAO/tests/Portable_Interceptors/Collocated/Dynamic/ + TAO/tests/Portable_Interceptors/Collocated/Service_Context_Manipulation/ + +Wed Aug 27 15:18:49 2003 Ossama Othman + + * include/makeinclude/wrapper_macros.GNU (CCFLAGS): + + Do not add "-Wno-uninitialized" to GNU C++ compiler flags. It + is no longer needed to avoid (apparently) bogus warnings. + Keeping it around hides potentially real problems. + +Wed Aug 27 14:23:00 2003 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/Options.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Reverted the -recurse change from Mon Aug 18 12:28:09 2003. Added + a -exclude option that allows users to exclude directories + independently from the -recurse option. + +Wed Aug 27 13:25:20 2003 Venkita Subramonian + + * Kokyu/Kokyu_defs.h: Added inline qualification to operator != to + fix warnings in SunOS_SunCC53 build. + +Wed Aug 27 17:06:12 UTC 2003 Johnny Willemsen + + * examples/Reactor/Proactor/test_cancel.cpp: + * examples/Reactor/Proactor/test_proactor.cpp: + * examples/Reactor/Proactor/test_udp_proactor.cpp: + Added a main that is used when these examples are build on a + platform on which these examples don't work. This fixes the link + errors in the Cygwin build. + +Wed Aug 27 10:32:03 2003 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + + Added documentation for the new -hierarchy option. + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/Options.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added a -hierarchy option which forces MPC to generate a workspace + at each directory level between the current directory and the + directory in which the mpc file is located. + +Tue Aug 26 18:57:07 UTC 2003 Don Hinton + + * ASNMP/asnmp/ASNMP_Export.h: + Added new export file to define ASNMP_Export needed on Windows. + + * ASNMP/asnmp/ASNMP_Export.h: + * ASNMP/asnmp/address.h: + * ASNMP/asnmp/asn1.h: + * ASNMP/asnmp/counter.h: + * ASNMP/asnmp/ctr64.h: + * ASNMP/asnmp/enttraps.h: + * ASNMP/asnmp/gauge.h: + * ASNMP/asnmp/integer.h: + * ASNMP/asnmp/octet.h: + * ASNMP/asnmp/oid.h: + * ASNMP/asnmp/pdu.h: + * ASNMP/asnmp/sagent.h: + * ASNMP/asnmp/smival.h: + * ASNMP/asnmp/snmp.h: + * ASNMP/asnmp/target.h: + * ASNMP/asnmp/timetick.h: + * ASNMP/asnmp/transaction.h: + * ASNMP/asnmp/transaction_result.h: + * ASNMP/asnmp/vb.h: + * ASNMP/asnmp/wpdu.h: + Changed ACE_Export to ASNMP_Export in order to correctly create + dll's on Windows. Thanks to Johnny Willemsen + for pointing this out. + + * tests/DLL_Test_Impl.h: + Added #include OS_Memory.h. + +Tue Aug 26 16:32:12 UTC 2003 Johnny Willemsen + + * ace/RW_Mutex.h: + Fixed incorrect doxygen file tag + +Tue Aug 26 11:22:41 UTC 2003 Justin Michel + + * bin/MakeProjectCreator/templates/vc7.mpd: + + Projects should default to optimization=0. This prevented the + tao_idl project from compiling. + +Tue Aug 26 11:10:45 2003 Jeff Parsons + + * ace/CDR_Stream.i: + + Changed the logic of the checks for return value in + insertion and extraction of bounded (w)strings. If the + bound_ member value of the helper construct was 0, the + operator could incorrectly return 0 after a successful + read or write. Thanks to Tufan Oruk and + Johnny Willemsen for independently + reporting problems that are consequences of this bug. + +Tue Aug 26 09:55:19 2003 Venkita Subramonian + + * Kokyu/Kokyu_defs.{cpp,h,i}: Added operator != for ConfigInfo to + satisfy RH71_Explicit_Templates build. + +Tue Aug 26 09:21:44 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + When checking for the -k option, remove --unix from the MAKEFLAGS + value. This helps things work with Cygwin. Thanks to Johnny + Willemsen for reporting this. + +Tue Aug 26 08:37:21 2003 Venkita Subramonian + + * Kokyu/DSRT_Sched_Queue_T.h: Changed the prototype of + Guid_Hash::operator method with full qualification for the + Guid_t type. This is to fix compile errors in + SunOS_8_Forte8_Debug build. + + * Kokyu/Kokyu.h: + * Kokyu/Kokyu_defs.h: + * Kokyu/Kokyu_dsrt.h: + * Kokyu/DSRT_Dispatch_Item_T.h: + * Kokyu/DSRT_Direct_Dispatcher_Impl_T.h: + * Kokyu/Kokyu_defs.i: + Replaced non_copyable with ACE_Copy_Disabled. + +Tue Aug 26 08:24:09 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/MakeWorkspaceCreator.pm: + + Set PWD on the make command line when the project makefile isn't + in the current directory. + +Mon Aug 25 22:03:43 UTC 2003 Don Hinton + + * ASNMP/asnmp/address.cpp: + * ASNMP/asnmp/address.h: + * ASNMP/asnmp/ctr64.cpp: + * ASNMP/asnmp/ctr64.h: + * ASNMP/asnmp/integer.cpp: + * ASNMP/asnmp/integer.h: + * ASNMP/asnmp/target.cpp: + * ASNMP/asnmp/target.h: + * ASNMP/asnmp/timetick.cpp: + * ASNMP/asnmp/timetick.h: + Fixed additional const compilation errors. + + * ASNMP/tests/tests.mpc: + Added new mpc file. + + * ASNMP/tests/Address_Test.cpp: + * ASNMP/tests/Target_Test.cpp: + Removed unused variables to quash warnings. + + * ASNMP/tests/test_config.h: + Added #include streams.h and removed old style headers; changed + use of open() flags to correct type. + +Mon Aug 25 11:51:44 2003 Ossama Othman + + * COPYING: + * THANKS: + + Updated Doug's e-mail address. + +Mon Aug 25 11:13:28 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplib.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/nmakedll.mpt: + * bin/MakeProjectCreator/templates/nmakeexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc6dspdll.mpt: + * bin/MakeProjectCreator/templates/vc6dspdllexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsplib.mpt: + * bin/MakeProjectCreator/templates/vc6dsplibexe.mpt: + * bin/MakeProjectCreator/templates/vc7.mpd: + * bin/MakeProjectCreator/templates/vc7dll.mpt: + * bin/MakeProjectCreator/templates/vc7exe.mpt: + + Added the ability to enable and disable optimization for the + nmake, em3, vc6 and vc71 types. By default the release targets + have optimization on and using -value_template optimize= + allows a user to turn off optimization compiler flags. + +Mon Aug 25 08:00:20 UTC 2003 Kobi Cohen-Arazi + + * apps/JAWS3: + Added to ACE_wrapper repository + +Mon Aug 25 05:44:33 UTC 2003 Johnny Willemsen + + * tests/Tests.bor: + Added Bug_1576_Regression_Test + +Sun Aug 24 20:21:02 UTC 2003 Don Hinton + + * ASNMP/asnmp/octet.cpp: + * ASNMP/asnmp/ctr64.cpp: + Explicitly initialized base class in copy constructors to + quash warning. + +Sun Aug 24 19:04:23 UTC 2003 Don Hinton + + * ASNMP/agent/agent_impl.cpp: + Removed unused args to quash a warning. + + * ASNMP/agent/snmp_agent.cpp: + * ASNMP/asnmp/octet.cpp: + * ASNMP/asnmp/octet.h: + * ASNMP/asnmp/oid.cpp: + * ASNMP/asnmp/oid.h: + * ASNMP/asnmp/pdu.cpp: + * ASNMP/asnmp/pdu.h: + * ASNMP/asnmp/smival.h: + * ASNMP/asnmp/snmp.cpp: + * ASNMP/asnmp/snmp.h: + * ASNMP/asnmp/snmperrs.h: + * ASNMP/asnmp/vb.cpp: + * ASNMP/asnmp/vb.h: + * ASNMP/examples/get/get.cpp: + * ASNMP/examples/get/get_async.cpp: + * ASNMP/examples/next/next.cpp: + * ASNMP/examples/set/set.cpp: + * ASNMP/examples/trap/trap.cpp: + * ASNMP/examples/walk/walk.cpp: + Fixed const warnings. + + * ASNMP/asnmp/address.cpp: + * ASNMP/asnmp/counter.cpp: + * ASNMP/asnmp/gauge.cpp: + * ASNMP/asnmp/integer.cpp: + * ASNMP/asnmp/timetick.cpp: + Explicitly initialized base class in copy constructors to + quash warning. + + * ASNMP/asnmp/transaction.cpp: + * ASNMP/asnmp/wpdu.cpp: + Cast void* to char* in delete [] statement to quash warning. + +Sun Aug 24 09:45:13 2003 Balachandran Natarajan + + * samewise: Removed contents of this directory since the new + MakefileProjectCreator (MPC) supresedes this. + +Sun Aug 24 14:09:33 UTC 2003 Johnny Willemsen + + * bin/fuzz.pl: + Extended fuzz script to check for id which should be Id. + Found some by accident and now extending fuzz script to find + all and make sure in the future this kind of problem is found. + +Sat Aug 23 12:55:04 2003 Ossama Othman + + * ace/DLL.cpp (ACE_DLL, open_i): + * ace/DLL_Manager.cpp (ACE_DLL_Manager, ~ACE_DLL_Manager, open): + (close, symbol, get_handle, open_dll, unload_dll): + + Only print error messages if the ACE debugging flag is set, + i.e if ACE::debug() returns a non-zero value. Thanks to Carlos + for pointing out that the ACE_DLL class was printing out error + messages without the user/application ever requesting them. + +Sat Aug 23 12:38:08 2003 Ossama Othman + + * ace/Dev_Poll_Reactor.cpp: + + Added "const" qualifier to some constant variables. + + From Carlos O'Ryan + * ace/DLL.cpp (symbol): + * ace/config-linux.h: + + Fixed problem where seg fault could occur if symbol() method is + called after a failed call to open(). Thanks to Jody Hagins + for finding this bug. [Bug 1576] + + * tests/Bug_1576_Regression_Test.cpp: + * tests/Makefile.tests (BIN): + * tests/run_test.lst: + * tests/tests.mpc: + + New test that verifies whether or not bug 1576 regressions + occur. + +Sat Aug 23 19:26:41 UTC 2003 Don Hinton + + * ASNMP/agent/agent.mpc: + * ASNMP/asnmp/asnmp.mpc: + * ASNMP/examples/examples.mwc: + * ASNMP/examples/get/get.mpc: + * ASNMP/examples/next/next.mpc: + * ASNMP/examples/set/set.mpc: + * ASNMP/examples/trap/trap.mpc: + * ASNMP/examples/walk/walk.mpc: + Added missing mwc and mpc files. + + * ASNMP/asnmp.mwc: + Modified workspace so it would pickup the correct subdirectories + automatically. + + * ACE.mwc: + Added ASNMP subdirectory. + + * ASNMP/agent/main.cpp: + * ASNMP/examples/get/get.cpp: + * ASNMP/examples/get/get_async.cpp: + * ASNMP/examples/next/next.cpp: + * ASNMP/examples/set/set.cpp: + * ASNMP/examples/trap/trap.cpp: + * ASNMP/examples/walk/walk.cpp: + Fixed compile errors by adding missing #includes needed due to + recent subsetting, e.g., streams.h and ACE.h. + +Fri Aug 22 20:10:41 UTC 2003 Justin Michel + + * ace/SSL/ssl.mpc + * apps/gperf/src/gperf.mpc + * bin/MakeProjectCreator/config/acedefaults.mpb + * bin/MakeProjectCreator/config/openssl.mpb + * bin/MakeProjectCreator/config/ssl.mpb + * bin/MakeProjectCreator/modules/ProjectCreator.pm + * bin/MakeProjectCreator/modules/VC6WorkspaceCreator.pm + * bin/MakeProjectCreator/modules/VC71WorkspaceCreator.pm + * bin/MakeProjectCreator/modules/VC7ProjectCreator.pm + * bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm + * bin/MakeProjectCreator/templates/bor.mpd + * bin/MakeProjectCreator/templates/vc7.mpd + + SSL now works in a more normal MPC feature fashion similar to all + the other feature-based libraries. I removed the hard-coded ssl + logic from some of the mpd files that still had it. A side-effect + of the new way, is that you must now define an SSL_ROOT + environment variable that the openssl.mpb feature will now use to + locate the openssl libraries. + + There were some problems with the existing vc7.mpd template. I've + improved the template, and also added support for lots of new + settings in the corresponding .mpt files. (Although I haven't used + them yet.) I'll probably use this to enable some of the new + features in vc71 that help track down problems that typically only + show up in release mode. + + The creation of workspaces for vc71 did not correctly set + dependencies between projects. + + I added an allow_duplicates() method to the WorkspaceCreator. A + warning will always be generated if a workspace contains duplicate + project names, and now the vc6/7/71 creators will abort creation + of these invalid workspaces. I suggest that any future + WorkspaceCreator subclasses that generate IDE projects, override + allow_duplicates() to return 0. + + Renamed the gperf_exe to gperf. This was named as a special hack + for vc6 that is now unnecessary. We had already renamed other + similar projects, but missed this one. + +Fri Aug 22 15:28:34 UTC 2003 Don Hinton + + * ACE.mwc: + Added CVS Id keyword. + + * apps/JAWS/server/server.mpc: + * netsvcs/clients/Naming/Client/Client.mpc: + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.mpc: + * netsvcs/servers/servers.mpc: + Modified project names to keep MSVC happy--it can't deal with + duplicate names. + +Wed Aug 20 06:59:52 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/VC6WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Warn about duplicate project names for all project types. It will + have to be this way as long as MPC supports VC6. + +Tue Aug 19 10:07:47 2003 Douglas C. Schmidt + + * doc/tutorials/015: Added support for compression. Thanks + to Andrew Marlow for contributing + this. + +Mon Aug 18 21:26:51 UTC 2003 Don Hinton + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + * bin/MakeProjectCreator/templates/gnu.mpd: + Add comments to the top of the created Makefiles saying they + were generated by MPC and should not be modified directly. + + * ACE.mwc: + * ACEXML/apps/apps.mwc: + * ACEXML/examples/examples.mwc: + * ACEXML/parser/parser.mwc: + * Kokyu/tests/tests.mwc: + * apps/Gateway/Gateway.mwc: + * apps/JAWS/JAWS.mwc: + * apps/JAWS/clients/clients.mwc: + * apps/JAWS2/JAWS2.mwc: + * apps/gperf/gperf.mwc: + * examples/ASX/ASX.mwc: + * examples/Connection/Connection.mwc: + * examples/IOStream/IOStream.mwc: + * examples/IPC_SAP/IPC_SAP.mwc: + * examples/Logger/Logger.mwc: + * examples/Mem_Map/Mem_Map.mwc: + * examples/OS/OS.mwc: + * examples/RMCast/RMCast.mwc: + * examples/Reactor/Reactor.mwc: + * examples/Service_Configurator/Service_Configurator.mwc: + * examples/System_V_IPC/System_V_IPC.mwc: + * netsvcs/netsvcs.mwc: + * netsvcs/clients/clients.mwc: + * netsvcs/clients/Logger/Logger.mpc: + * netsvcs/clients/Naming/Naming.mwc: + * netsvcs/clients/Naming/Client/Client.mpc: + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.mpc: + * netsvcs/lib/lib.mpc: + * netsvcs/servers/servers.mpc: + * websvcs/websvcs.mwc: + * websvcs/lib/lib.mpc: + * websvcs/tests/tests.mpc: + Added missing mwc and mpc files. Most of the mwc files were + needed so that running mwc.pl -recurse would create Makefiles in + directories that contained only subdirectories and no mpc files. + +Mon Aug 18 12:28:09 2003 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/Options.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added the ability to exclude directories when using the -recurse + option. See USAGE or mwc.pl -h for details. + +Mon Aug 18 15:22:02 2003 Simon McQueen + + * bin/tao_other_tests.lst: + + Changed the TAO/orbsvcs/tests/ImplRepo test from SANDBOX to + !MINIMUM to broaden platform coverage of the IMR testing. + +Sun Aug 17 16:35:01 2003 Ossama Othman + + * ace/RB_Tree.i (dump_i): + * ace/RB_Tree.cpp (dump_i): + + Uninlined this method to avoid adding an inter-header dependency + on "ace/Log_Msg.h". Also fixes some explicit template + instantiation builds. + + * tests/Collection_Test.cpp: + + Removed duplicate template instantiation. + +Sun Aug 17 16:06:20 2003 Ossama Othman + + * ace/Shared_Object.h: + + Include "ace/os_includes/sys/os_types.h" to pull in size_t + typedef instead of "ace/OS.h". The latter is overkill. + + * ace/Shared_Object.cpp: + + Include "ace/Global_Macros.h" to pull in ACE_TRACE macro + definition. + +Sun Aug 17 15:31:29 2003 Ossama Othman + + * ace/OS.h (ACE_CLEANUP_FUNC): + * ace/config-all.h + + Moved this typedef to config-all.h. Allows sources to use this + typedef without including the compile-time expensive OS.h. + +Fri Aug 15 14:02:22 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/makedll.mpt: + + Added support to the 'make' type for AIX and IRIX. + +Fri Aug 15 10:38:57 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Fixed a missing check for naming the foreach variable when dealing + with grouped files. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Moved the setting of LDLIBS or ACE_SHLIBS before including + wrapper_macros.GNU. This should allow for the kylix kludge to + work. + +Fri Aug 15 15:29:16 UTC 2003 Don Hinton + + * apps/JAWS2/JAWS/Parse_Headers.cpp: + Modified the ACCESSOR macro to only concatenate the x, or member + variable, token. This resolves a problem with the gcc 3.3 + preprocessor. Thanks to Tim Hawes for + reporting the problem and Carlos O'Ryan for supplying the fix. + + * THANKS: + Added Tim Hawes to the hall of fame. + +Fri Aug 15 09:07:09 2003 Douglas C. Schmidt + + * ace/OS.{h,i}: Changed "advice" to "map_advice" to avoid a + keyword naming conflict with AspectC++. Thanks to Gary Duzan + for reporting this. + +Fri Aug 15 01:49:00 UTC 2003 Don Hinton + + * Kokyu/Makefile.Kokyu: + Moved the assignment to ACE_SHLIBS to a point prior to including + wrapper_macros.GNU, because the code the modifies the link + library names to work with Kylix is located in + wrapper_macros.GNU, and must come after the assignment. + +Fri Aug 15 00:37:22 UTC 2003 Don Hinton + + * tests/tests.mpc: + Added missing Recursive_Condition_Bug_Test and + Unbounded_Set_Test_Ex projects. + +Thu Aug 14 18:31:14 UTC 2003 Don Hinton + + * ace/Message_Queue.h: + Added #include Null_Mutex.h and Null_Condition.h to the VxWorks + specific branch needed due to recent subsetting. + + * ace/config-irix5.3-sgic++.h: + Added #define ACE_LACKS_STDINT_H. Thanks to Bruce Jones + for reporting the problem. + + * THANKS: + Added Bruce Jones to hall of fame. + +Thu Aug 14 10:56:57 2003 Ossama Othman + + * ace/OS.h: + * ace/SSL/SSL_SOCK_Connector.h: + + Nuked trailing whitespace. + + * ace/SSL/SSL_SOCK_Connector.cpp (ssl_connect): + + Fixed bug where the "counted down" timeout value was not used in + the ACE::select() call. This fixes a problem where connection + timeouts lasted longer than they should have. The corrected + behavior now matches the documented behavior. + +Thu Aug 14 04:02:41 UTC 2003 Don Hinton + + * Kokyu/Makefile.Kokyu: + Added ACELIB to ACE_SHLIBS to resolve link problems on MacOSX. + Thanks to John Michael Zorko for reporting + this. + +Wed Aug 13 19:48:17 2003 Venkita Subramonian + + * Kokyu/tests/FIFO/test.cpp: + * Kokyu/tests/EDF/test.cpp: + * Kokyu/Kokyu_defs.h: + * Kokyu/Kokyu_defs.cpp: + * Kokyu/Kokyu.h: + * Kokyu/Kokyu.cpp: + * Kokyu/Dispatcher_Task.cpp: + * Kokyu/Dispatcher_Impl.i: + * Kokyu/Dispatcher_Impl.h: + * Kokyu/Default_Dispatcher_Impl.h: + * Kokyu/Default_Dispatcher_Impl.cpp: + + Separated activation of the dispatcher and setting up of + dispatching lanes. Added an activate () method to the dispatcher + and associated classes. + +Wed Aug 13 23:43:24 UTC 2003 Don Hinton + + * ace/Bound_Ptr.i: + Added #include Log_Msg.h when ACE_NEW_THROWS_EXCEPTIONS is + defined to pickup ACE_ASSERT. + + * apps/JAWS/server/HTTP_Server.cpp: + Added a JAWS_ prefix the enums to get around conflict on Windows + where ASYNCH is defined as a macro. + + * apps/soreduce/Obj_Module.cpp: + Added #include Log_Msg.h to pickup ACE_ASSERT. + + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.cpp: + Added #ifdef around ACE_Trace::start/stop_tracing() based on + ACE_HAS_TRACE. + +Wed Aug 13 20:27:46 UTC 2003 Don Hinton + + * tests/tests.mpc: + Added Multihomed_INET_Addr_Test. + +Wed Aug 13 18:35:08 UTC 2003 Don Hinton + + * Kokyu/tests/DSRT_MIF/MIF.cpp: + Changed ACE_Thread_Mutex to ACE_SYNCH_MUTEX to quash an error on + single threaded builds. + +Wed Aug 13 17:38:09 UTC 2003 Don Hinton + + * apps/Gateway/Gateway/gateway.mpc: + * apps/JAWS/clients/Blobby/blobby.mpc: + * apps/JAWS/clients/Caching/caching.mpc: + * apps/JAWS/server/server.mpc: + * apps/drwho/drwho.mpc: + * apps/soreduce/soreduce.mpc: + Added missing MPC project files. + +Wed Aug 13 15:47:13 UTC 2003 Don Hinton + + * apps/drwho/File_Manager.h: + Added #include Null_Mutex.h needed when + ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION is defined due to recent + subsetting. + +Mon Aug 11 19:19:24 2003 Douglas C. Schmidt + + * ace/Global_Macros.h: Updated the documentation to point to + the C++NPv2 and POSA2 books. Thanks to Valery Salamakha + for motivating this change! + +Mon Aug 11 08:39:06 2003 Venkita Subramonian + + * Kokyu/Koyu_dsrt.h: Removed Kokyu_Export qualification for + template class MUF_Comparator. This was giving compile errors in + Win2K_VC71_NET_DLL build. + +Mon Aug 11 06:35:12 UTC 2003 Johnny Willemsen + + * Kokyu/Makefile: + Removed windows specific part in this makefile. This gave + problems with MinGW and the MSys shell and isn't needed. + +Mon Aug 11 01:46:23 UTC 2003 Don Hinton + + * include/makeinclude/platform_g++_common.GNU: + Modified the test for "GNU ld" to grep for the count instead of + relying on the return value which doesn't appear to work + correctly on all versions, specifically MacOSX and older + versions of OpenBSD (two platforms to which I lack access). + Thanks to John Michael Zorko for help + debugging this. + +Sun Aug 10 14:04:17 2003 Venkita Subramonian + + * Kokyu/tests/DSRT_MIF/Makefile: Updated dependencies. + +Sun Aug 10 13:32:42 2003 Venkita Subramonian + + * Kokyu/DSRT_Direct_Dispatcher_Impl_T.{h,cpp}: Moved the method + definition of MoreEligible::operator() to the header file to get + rid of MSV compiler errors. I suspect that the nested class + MoreEligible could be causing the problem. + + * Kokyu/DSRT_Sched_Queue_T.{h,cpp}: Moved the method + definition of Guid_Hash::operator() to the header file to get + rid of MSV compiler errors. I suspect that the nested class + could be causing the problem. + + * Kokyu/Kokyu_dsrt.{h,cpp}: Corrected a typo and included + Kokyu_dsrt.i instead of Kokyu.i. Removed Kokyu_Export + qualification for template classes. + + * Kokyu/Kokyu_defs.h: Added export qualification for noncopyable + class. + +Sun Aug 10 09:52:17 2003 Venkita Subramonian + + * Kokyu/tests/DSRT_MIF/MIF.dsp: + * Kokyu/tests/DSRT_MIF/MIF.dsw: + * Kokyu/tests/EDF/Makefile: + * Kokyu/tests/FIFO/Makefile: + Added the above files which were missing. + +Sun Aug 10 08:58:18 2003 Venkita Subramonian + + * Kokyu/tests/DSRT_MIF/MIF.cpp: Included Synch.h to get rid of + compile errors. + +Sun Aug 10 08:16:36 2003 Balachandran Natarajan + + * ace/DEV.h: Fixed a typo in the definition of + ACE_DEV_STREAM. Thanks to Edan Ayal for + pointing this out. + +Sun Aug 10 06:17:43 UTC 2003 Don Hinton + + * examples/Export/dll.cpp: + Fixed a typo in last checkin, i.e., added a space. + +Sat Aug 9 20:55:47 UTC 2003 Don Hinton + + * examples/Connection/blocking/SPIPE-acceptor.cpp: + * examples/Export/dll.cpp: + Added missing explicit template instantiations. + + * examples/examples/OS/Process/imore.cpp: + * examples/Connection/blocking/SPIPE-connector.cpp: + * examples/OS/Process/process.cpp: + * examples/Reactor/Proactor/test_proactor.cpp: + Added const to char* declarations to quash warnings. + + * examples/Timer_Queue/Thread_Timer_Queue_Test.cpp: + Added #include Condition_T.h and Thread_Mutex.h needed for + explicit template instantiation. + + * examples/Timer_Queue/Timer_Queue.mpc: + Added "after" directive so library gets compiled first. + + * tests/Collection_Test.cpp: + Fixed a typo in an explicit template instantiation directive. + +Sat Aug 9 13:56:37 2003 Venkita Subramonian + + * Kokyu/Dispatcher_Task.h: Deleted extra qualification for method + prototype declarations to get rid of compiler warnings in + Debian_Full_Reactors build. + + * Kokyu/Makefile: Updated dependencies. + +Sat Aug 9 18:23:32 UTC 2003 Don Hinton + + * ace/ace.mpc: + Added Container_Instantiations.cpp to resolve problems on + Solaris when templates=explicit. + +Sat Aug 9 12:49:11 UTC 2003 Johnny Willemsen + + * etc/tao_rtevent.doxygen: + Added TAO/orbsvcs/orbsvcs/Event_Service_Constants.h to the list + of files that must be parsed for the RTEvent doxygen documentation + +Sat Aug 9 06:17:49 UTC 2003 Don Hinton + + * ace/Process_Mutex.cpp: + Readded explicit template instantiation of + ACE_GUARD and #includes needed to compile it. + +Sat Aug 9 05:16:32 UTC 2003 Don Hinton + + * include/makeinclude/platform_g++_common.GNU: + Modified the ld version test so that it wouldn't printout error + information to the build log on failure. + +Sat Aug 9 04:21:24 UTC 2003 Don Hinton + + * ace/config-freebsd.h: + Added a test for ACE_MT_SAFE to support single threaded builds. + + * include/makeinclude/platform_aix_g++.GNU: + * include/makeinclude/platform_gnuwin32_common.GNU: + * include/makeinclude/platform_irix6.x_sgic++.GNU: + * include/makeinclude/platform_linux.GNU: + * include/makeinclude/platform_linux_borland.GNU: + * include/makeinclude/platform_linux_icc.GNU: + * include/makeinclude/platform_osf1_4.x_cxx.GNU: + * include/makeinclude/platform_sunos5_g++.GNU: + * include/makeinclude/platform_sunos5_ghs.GNU: + * include/makeinclude/wrapper_macros.GNU: + Add ACE_MT_SAFE=0 to CPPFLAG in wrapper_macros.GNU instead of + each individual platform_*.GNU file. + + * include/makeinclude/platform_g++_common.GNU: + * include/makeinclude/platform_vxworks5.x_g++.GNU: + Set SONAME equal to nothing in the individual platform_*.GNU + files to turn off library naming instead of using with_ld. + with_ld, however it is still used with hpux to modify the + options. + + * include/makeinclude/platform_aix_g++.GNU: + * include/makeinclude/platform_freebsd.GNU: + * include/makeinclude/platform_g++_common.GNU: + * include/makeinclude/platform_gnuwin32_common.GNU: + * include/makeinclude/platform_hpux_gcc.GNU: + * include/makeinclude/platform_irix5.2.GNU: + * include/makeinclude/platform_irix5.3_g++.GNU: + * include/makeinclude/platform_irix6.x_g++.GNU: + * include/makeinclude/platform_linux.GNU: + * include/makeinclude/platform_lynxos.GNU: + * include/makeinclude/platform_m88k.GNU: + * include/makeinclude/platform_macosx.GNU: + * include/makeinclude/platform_netbsd.GNU: + * include/makeinclude/platform_openbsd.GNU: + * include/makeinclude/platform_osf1_4.x_g++.GNU: + * include/makeinclude/platform_psosim_g++.GNU: + * include/makeinclude/platform_qnx_neutrino.GNU: + * include/makeinclude/platform_qnx_rtp_gcc.GNU: + * include/makeinclude/platform_sco-nothread.GNU: + * include/makeinclude/platform_sco5.0.0-mit-pthread.GNU: + * include/makeinclude/platform_sco5.0.0-nothread.GNU: + * include/makeinclude/platform_sunos4_g++.GNU: + * include/makeinclude/platform_sunos5_g++.GNU: + * include/makeinclude/platform_unixware_g++.GNU: + * include/makeinclude/platform_vxworks5.x_g++.GNU: + Move the inclusion of platform_g++_common.GNU in the + platform_*.GNU files to after DLD (and SONAME) have been set so + that platform_g++_common.GNU can use the value to to help + determine whether or not to add -Wl,-E to LDFLAGS. Also added + additional checking to make sure that we only test GNU ld. + +Fri Aug 8 23:23:30 2003 Venkita Subramonian + + * Kokyu/Dispatcher_Task.{h,cpp,i}: + Renamed init() method so that it does not hide the base class + init method. + + * Kokyu/Default_Dispatcher_Impl.cpp: + Commented out some debug statements. + +Sat Aug 9 01:03:52 UTC 2003 Don Hinton + + * ace/Based_Pointer_Repository.cpp: + * ace/Malloc_Instantiations.cpp: + * ace/Timer_Hash.cpp: + * ace/Timer_Heap.cpp: + * ace/Timer_List.cpp: + * ace/Timer_Queue.cpp: + * ace/Timer_Wheel.cpp: + Added #include of various Synch headers needed on Solaris when + ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION is defined. + +Fri Aug 8 13:26:25 2003 Venkita Subramonian + + * Kokyu/Dispatcher_Task.{h,cpp}: Changed typo TAO_SYNCH_MUTEX to + ACE_SYNCH_MUTEX to get rid of compile errors in explicit + template instantiation builds. + +Fri Aug 8 11:03:57 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + + Remove the 'perl' call before depgen.pl. + + * bin/MakeProjectCreator/templates/nmake.mpd: + + Put back ACE_ROOT reference in the templates for the depgen.pl + script. It is necessary since nmake doesn't support the windows + associates like the command prompt does. + +Fri Aug 8 10:42:16 2003 Venkita Subramonian + + * Makefile: Added Kokyu to CORE_DIRS list since + TAO/orbsvcs/orbsvcs is in core build and + TAO/orbsvcs/orbsvcs/Event/*Kokyu* depends on Kokyu framework. + +Fri Aug 8 13:22:12 UTC 2003 Johnny Willemsen + + * examples/Service_Configurator/IPC-tests/client/local_dgram_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_pipe_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_stream_client_test.cpp: + Added include of OS.h to get ACE_TMAIN. This fixes the link errors we see + with these examples. + +Fri Aug 8 07:10:06 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/makedll.mpt: + + Moved the shflags out of the configurations and into the + platforms. The link flag is particular to the linker of the + platform. + +Fri Aug 8 06:56:52 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + + Fixed a problem with my change from Thu Aug 7 12:43:05 2003. The + INSTARGET needed to be set before it was used in the all: + dependencies. + +Thu Aug 7 21:47:25 2003 Venkita Subramonian + + * Kokyu/Kokyu.h: Included Dispatcher_Impl.h header file instead of + forward declaring Dispatcher_Impl. This was causing compile + errors/warnings in some builds. + + * Kokyu/Makefile: Updated dependencies. + +Thu Aug 07 16:36:29 2003 Nanbor Wang + + * bin/MakeProjectCreator/config/qt-min.mpb: Added a minimal Qt + base project for those projects which require to use Qt library + but not ACE_QtReactor. + + * bin/MakeProjectCreator/config/qt-min_moc.mpb: Same twist for + qt_moc.mpb. Things can probably be condensed more, later. + +Thu Aug 7 13:29:22 2003 Venkita Subramonian + + * Makefile: Added Kokyu directory to DIRS and CLONE variables, so + that it is included as part of the autobuilds and release tar + ball. Thanks to Craig Rodrigues for pointing + this out. + +Thu Aug 7 12:43:05 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + + Fixed a problem with the generic make template where a static + library wouldn't get installed. + +Thu Aug 7 13:08:28 UTC 2003 Don Hinton + + * ace/Unbounded_Set_Ex.cpp: + Added #include of os_errno.h to pick up ENOMEM on older versions + of gcc and needed due to recent subsetting. + +Thu Aug 7 07:35:56 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Corrected a bug in the dependency sorting logic by removing the + use of splice and manually moving the array entries. + +Thu Aug 7 06:18:57 2003 Chad Elliott + + * include/makeinclude/rules.local.GNU: + + Added a dash in front of the include for the dependency file to + suppress warnings about missing files. + +Thu Aug 7 00:12:50 UTC 2003 Don Hinton + + * ace/Handle_Set.i: + Added several #includes required by the FD_ZERO macro on various + platforms, including os_string.h, os_strings.h, and bstring.h, + required by recent subsetting. + + * ace/Process_Mutex.cpp: + Removed explicit template instantiation of + ACE_GUARD that doesn't appear to be needed + within ACE and highlighted by recent subsetting. + + * ace/TSS_T.cpp: + Added conditional #include TSS_Adapter.h when ACE_HAS_THR_C_DEST is + defined and required by recent subsetting. + + * ace/Timer_Queue_T.cpp: + Added #include Null_Mutex.h required by recent subsetting. + +Wed Aug 6 14:50:00 UTC 2003 Gautam Thaker + + Please send all comments/questions about this commit to + Jason Cohen, jcohen@atl.lmco.com + + LKSCTP Support added for Linux 2.5/2.6 kernels with LKSCTP patch. + + * ace/SOCK_SEQPACK_Acceptor.h: + * ace/SOCK_SEQPACK_Connector.h: + Changed default protocol from 0 to 132 (IPPROTO_SCTP). + This forces all current usage of SOCK_SEQPACK_* to use + SCTP. This was done because LKSCTP support was added to + the SOCK_SEQPACK code, but overrides with SOCK_STREAM. + Currently, OpenSS7 and LKSCTP have different views on this. + + * ace/SOCK_SEQPACK_Acceptor.cpp: + * ace/SOCK_SEQPACK_Association.cpp: + * ace/SOCK_SEQPACK_Connector.cpp: + Added #ifdef ACE_HAS_LKSCTP sections to SOCK_SEQPACK_* files + to support socket interface differences between LKSCTP and OpenSS7. + + * ace/os_include/sys/os_socket.h: + * include/makeinclude/platform_linux.GNU: + To enable LKSCTP support on a patched Linux 2.5/2.6 kernel, + you must supply 'sctp=lksctp' to your make command line. + + * performance-tests/SCTP/Options_Manager.cpp + Now allows automatic server selection of port. + + * performance-tests/SCTP/README + * performance-tests/SCTP/README.LKSCTP: + * performance-tests/SCTP/README.SCTP: + * performance-tests/SCTP/README.SCTP_in_ACE: + Made additions for LKSCTP to the documentation. + +Wed Aug 6 14:13:25 UTC 2003 Don Hinton + + * ace/Null_Condition.h (vait): + Removed unused variable in method declaration to quash a warning. + +Wed Aug 6 03:29:03 UTC 2003 Don Hinton + + Additional includes required by recent subsetting. + + * Kokyu/Dispatcher_Task.h: Lock_Adapter_T.h. + * apps/JAWS2/HTTPU/http_headers.h: Null_Mutex.h. + * apps/JAWS2/HTTPU/http_status.h: Synch_Traits.h. + * apps/JAWS2/JAWS/Cache_Manager_T.cpp: streams.h. + * apps/JAWS2/JAWS/IO.h: Synch_Traits.h. + * apps/JAWS2/JAWS/IO_Handler.h: RW_Thread_Mutex.h + * apps/JAWS2/JAWS/JAWS.h: Trace.h. + * apps/JAWS2/JAWS/Parse_Headers.h: Synch_Traits.h. + * apps/soreduce/Library.h: streams.h. + + * apps/JAWS2/JAWS/Server.cpp: + Added #ifdef around ACE_Trace calls to turn on/off tracing. + +Wed Aug 6 02:27:32 UTC 2003 Don Hinton + + * include/makeinclude/platform_g++_common.GNU: + Modified the test for whether or not GNU ld supports the -E + option needed to enable dynamic_casting of objects passed to + shared libraries. Thanks to Chris Cleeland + for suggesting we dynamically obtain which + ld to use by passing the -print-prog-name to gcc, and + Krishnakumar B for the patch. + + * ace/Null_Mutex.h: + * ace/Null_Semaphore.h: + Removed unused variable name to silence warnings. + +Tue Aug 5 17:25:35 UTC 2003 Don Hinton + + * ace/Dev_Poll_Reactor.{cpp,h}: + Added #includes of Reverse_Lock_T.h, Recursive_Thread_Mutex.h, + Null_Mutex.h, and Lock_Adapter_T.h needed due to recent subsetting. + + * ace/Dump_T.cpp: + Added #include of Global_Macros.h. + + * ace/Global_Macros.h: + Added #include of the appropriate new header to get the + definition of placement new(). Thanks to Olli Savia + for this suggestion. + + * ace/Log_Msg.cpp: + Removed the explicite template instantiation of ACE_Reverse_Lock + that wasn't used and appeared to be dead code. Thanks to Olli + Savia for pointing out the problem. + + * ace/Timer_Queue_Adapters.{h,cpp}: + Moved #include of Condition_Recursive_Thread_Mutex.h from the + cpp to the header since it's used as a member variable. + + * examples/Reactor/WFMO_Reactor/APC.cpp: + * examples/Reactor/WFMO_Reactor/Abandoned.cpp: + * examples/Reactor/WFMO_Reactor/Registration.cpp: + * examples/Reactor/WFMO_Reactor/Registry_Changes.cpp: + Added #include of Auto_Event.h needed due to recent subsetting + changes. + + * tests/Proactor_Test.cpp: + Added #include of Thread_Semaphore needed due to recent + subsetting changes. + +Tue Aug 5 15:16:54 UTC 2003 Don Hinton + + * ace/os_include/os_errno.h: + * ace/os_include/os_limit.h: + Moved define for PIPE_BUF from os_errno.h, where it have been + moved by mistake (see Mon Aug 4 13:08:29 UTC 2003 Don Hinton + ) to os_limit.h. + + * ace/os_include/os_errno.h: + * ace/os_include/sys/os_wait.h: + Moved define for WNOHANG from os_errno.h, where it have been + moved by mistake (see Mon Aug 4 13:08:29 UTC 2003 Don Hinton + ) to sys/os_wait.h. + +Tue Aug 5 01:17:55 UTC 2003 Don Hinton + + * ace/TSS_T.cpp: + Rolled back part of the fix from Mon Aug 4 21:02:12 UTC 2003 + Don Hinton . Some of the cpp still + needs to be ifdef'd out for single threaded builds. + + * ace/Timer_Queue_Adapters.cpp: + Added #include Condition_Recursive_Thread_Mutex.h needed on some + Windows builds. + +Mon Aug 4 21:02:12 UTC 2003 Don Hinton + + * ace/TSS_T.{h,cpp}: + Removed ACE_HAS_THREADS #ifdef around ACE_TSS* classes that + shouldn't have been there, and was erroneously added when the + code was moved. Although ACE_TSS probably should be ifdef'd and + the ACE_TSS_TYPE macros used, that wasn't the purpose of the + move, so it was set back to the way it was. + + * ace/Free_List.h: + Added #include os_stddef.h to pick up size_t. Thanks to John + Michael Zorko for submitting this patch. + +Mon Aug 4 17:03:55 UTC 2003 Don Hinton + + * ace/Bound_Ptr.i: + Added #include of Guard_T.h. + + * apps/mkcsregdb/mkcsregdb.cpp: + Added #include of Log_Msg.h. + + * examples/Export/dll.h: + Added #include of Null_Mutex.h. + + * examples/Reactor/Proactor/post_completions.cpp: + Added #include of Thread_Mutex.h and changed ACE_Thread_Mutex to + ACE_SYNCH_MUTEX. + + * examples/Smart_Pointers/Gadget_Part.h. + Added #include Synch_Traits.h and Thread_Mutex.h. + +Mon Aug 4 13:56:31 UTC 2003 Don Hinton + + * ace/Synch_T.h: + Added #include Synch.h to insure backward compatibility on + non-threaded builds. + + * ace/Strategies_T.cpp: + Added #include ACE.h needed when not inlining. + +Mon Aug 4 13:08:29 UTC 2003 Don Hinton + + * ace/OS.h: + * ace/os_include/os_errno.h: + Moved some additional error code definitions to os_errno.h. + This will fix compile errors on FreeBSD. + + * ace/config-win32-common.h: + Added ACE_LACKS_ARPA_INET_H. This will fix compile problems on + Windows. + +Mon Aug 4 09:31:12 UTC 2003 Johnny Willemsen + + * ace/os_include/os_dlfcn.h: + Added VxWorks includes for shared library functions. + + * ace/OS.i: + Implemented access, dlerror and dlopen for VxWorks. There is no + reference counting on dlopen, when calling it multiple times on + the same shared lib it will load the same lib multiple times, + this because VxWorks has no reference counting. Use these with + care because of the strange VxWorks implementation. Thanks to + Marc Walrave for creating this. + +Mon Aug 4 23:47:33 2003 Ossama Othman + + * ace/Array_Base.cpp: + + For MSVC++ 6, include standard C++ header to pull in + placement new() operator prototype. Addresses template + instantiation errors. + +Mon Aug 4 22:41:24 2003 Ossama Othman + + * ace/DLL_Manager.cpp: + + Include "ace/Guard_T.h" to pull in ACE_Guard template + declaration. + + * ace/MEM_Addr.cpp: + + Include "ace/OS.h" to pull in ACE_OS::strtoul() static function + prototype. + + * ace/Process_Semaphore.h: + + Include "ace/Semaphore.h" to pull in the ACE_Semaphore class + declaration for the (ACE_WIN32 || ACE_HAS_POSIX_SEM || ACE_PSOS) + case. + + * ace/Service_Object.cpp: + + Include "ace/ACE.h" to pull in ACE::strnew() function prototype. + + * ace/Service_Repository.cpp: + + Include "ace/ACE.h" to pull in ACE::debug() function prototype. + + * ace/Token.h: + + Fixed compile-time problems in MSVC++ builds. Some headers must + still be included for the ACE_TOKEN_USES_SEMAPHORE case. + + * ace/WIN32_Asynch_IO.h: + + Include "ace/Null_Mutex.h" to pull in ACE_Null_Mutex class + declaration. + + * ace/WIN32_Proactor.h: + + Include "ace/Auto_Event.h" to pull in ACE_Auto_Event class + declaration. + +Mon Aug 4 04:28:59 UTC 2003 Don Hinton + + * ace/Condition_Recursive_Thread_Mutex.cpp: + * ace/Condition_Thread_Mutex.cpp: + * ace/TSS_T.{cpp,h}: + * ace/Thread_Mutex.h: + * ace/Token.{h,i}: + Added or adjusted placement of #ifdef ACE_HAS_THREADS in order + to fix compile errors on single threaded builds. + + * ace/DLL_Manager.h: + Added #include ace/os_include/os_dlfcn.h needed for single + threaded builds. + +Mon Aug 4 03:26:30 UTC 2003 Don Hinton + + * ace/Auto_Event.{h,cpp,inl}: + * ace/Barrier.{h,cpp,inl}: + * ace/Condition_Recursive_Thread_Mutex.{h,cpp,inl}: + * ace/Condition_T.{h,cpp,inl}: + * ace/Condition_Thread_Mutex.{h,cpp,inl}: + * ace/Event.{h,cpp,inl}: + * ace/Guard_T.{h,cpp,inl}: + * ace/Lock.{h,cpp,inl}: + * ace/Lock_Adapter_T.{h,cpp,inl}: + * ace/Manual_Event.{h,cpp,inl}: + * ace/Mutex.{h,cpp,inl}: + * ace/Null_Barrier.h: + * ace/Null_Condition.h: + * ace/Null_Mutex.h: + * ace/Null_Semaphore.h: + * ace/RW_Mutex.{h,cpp,inl}: + * ace/RW_Thread_Mutex.{h,cpp,inl}: + * ace/Recursive_Thread_Mutex.{h,cpp,inl}: + * ace/Reverse_Lock_T.{h,cpp,inl}: + * ace/Semaphore.{h,cpp,inl}: + * ace/Synch_Traits.h: + * ace/TSS_Adapter.{h,cpp,inl}: + * ace/TSS_T.{h,cpp,inl}: + * ace/Thread_Mutex.{h,cpp,inl}: + * ace/Thread_Semaphore.{h,cpp,inl}: + * ace/Synch.{h,cpp,i}: + * ace/Synch_T.{h,cpp,i}: + Moved all the code out of Synch* and into new files, roughly one + per class as part of the footprint and compile time reduction + effort. + + * ace/TSS_T.h: + * ace/OS.h: + Moved the ACE_TSS_TYPE macros from OS.h to TSS_T.h: + + * ace/Token.{h,i}: + * ace/Synch.{h,i}: + Moved the ACE_Noop_Token class from Synch.* to Token.*. + + * ace/ARGV.cpp: + * ace/Activation_Queue.h: + * ace/Active_Map_Manager_T.h: + * ace/Asynch_Pseudo_Task.h: + * ace/Atomic_Op.h: + * ace/Atomic_Op_T.{h,i}: + * ace/Based_Pointer_Repository.{cpp,h}: + * ace/Bound_Ptr.i: + * ace/Cached_Connect_Strategy_T.{cpp,h}: + * ace/Capabilities.h: + * ace/Configuration.h: + * ace/Containers_T.cpp: + * ace/DLL_Manager.{cpp,h}: + * ace/Dump.{cpp,h}: + * ace/Dynamic.cpp: + * ace/Event_Handler.h: + * ace/Filecache.h: + * ace/Framework_Component.{h,cpp,inl}: + * ace/Free_List.{h,i}: + * ace/Future.h: + * ace/Handle_Set.cpp: + * ace/Hash_Cache_Map_Manager_T.{h,i}: + * ace/Hash_Map_With_Allocator_T.h: + * ace/High_Res_Timer.cpp: + * ace/Lib_Find.cpp: + * ace/Local_Name_Space.h: + * ace/Local_Name_Space_T.h: + * ace/Log_Msg.{cpp,h}: + * ace/Log_Record.{h,i}: + * ace/MEM_SAP.i: + * ace/Malloc.cpp: + * ace/Malloc_Allocator.cpp: + * ace/Malloc_T.h: + * ace/Map_Manager.{h,i}: + * ace/Memory_Pool.cpp: + * ace/Message_Block.cpp: + * ace/Message_Queue.h: + * ace/Message_Queue_T.h: + * ace/Metrics_Cache.h: + * ace/Name_Request_Reply.cpp: + * ace/Object_Manager.{cpp,h}: + * ace/POSIX_Asynch_IO.h: + * ace/POSIX_CB_Proactor.h: + * ace/Proactor.cpp: + * ace/Process_Manager.{cpp,h}: + * ace/Process_Mutex.{cpp,h}: + * ace/Process_Semaphore.h: + * ace/RB_Tree.{cpp,i}: + * ace/SOCK_Acceptor.cpp: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_Dgram_Mcast.h: + * ace/SOCK_SEQPACK_Acceptor.cpp: + * ace/SPIPE_Acceptor.h: + * ace/Select_Reactor_Base.cpp: + * ace/Select_Reactor_T.{cpp,h}: + * ace/Service_Repository.{h,i}: + * ace/Service_Types.{h,i}: + * ace/Signal.{cpp,h}: + * ace/Singleton.{cpp,h}: + * ace/Strategies_T.{cpp,h}: + * ace/System_Time.h: + * ace/Task_T.{cpp,h}: + * ace/Test_and_Set.cpp: + * ace/Thread_Exit.cpp: + * ace/Thread_Manager.{cpp,h}: + * ace/Timeprobe.h: + * ace/Timer_Queue.h: + * ace/Timer_Queue_T.cpp: + * ace/Token.{cpp,h,i}: + * ace/Token_Invariants.h: + * ace/Token_Manager.h: + * ace/UPIPE_Acceptor.h: + * ace/UPIPE_Connector.h: + * ace/UPIPE_Stream.h: + * ace/UUID.h: + * ace/Unbounded_Queue.cpp: + * apps/drwho/BS_Client.cpp: + * examples/ASX/Event_Server/Event_Server/Consumer_Router.h: + * examples/ASX/Event_Server/Event_Server/Peer_Router.h: + * examples/ASX/UPIPE_Event_Server/Peer_Router.h: + * examples/C++NPv2/Logging_Event_Handler_Ex.h: + * examples/Logger/simple-server/Reactor_Singleton.h: + * examples/Misc/test_get_opt.cpp: + * examples/Misc/test_set.cpp: + * examples/Misc/test_trace.cpp: + * examples/Reactor/Misc/test_timer_queue.cpp: + * examples/Shared_Malloc/test_persistence.cpp: + * examples/Threads/TSS_Data.h: + * examples/Threads/barrier2.cpp: + * examples/Threads/task_one.cpp: + * examples/Timer_Queue/Thread_Timer_Queue_Test.h : + * performance-tests/SCTP/Options_Manager.cpp + * performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.h: + * performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.cpp: + * performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.h: + * performance-tests/Server_Concurrency/Queue_Based_Workers/workers.cpp: + * tests/Aio_Platform_Test.cpp: + * tests/Basic_Types_Test.cpp: + * tests/Cached_Allocator_Test.cpp: + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + * tests/Malloc_Test.cpp: + * tests/Message_Block_Test.cpp: + * tests/Message_Queue_Notifications_Test.cpp: + * tests/Reactor_Timer_Test.cpp: + * tests/Recursive_Condition_Bug_Test.cpp: + * tests/Task_Test.cpp: + * tests/Thread_Manager_Test.cpp: + * tests/Thread_Pool_Test.cpp: + * tests/Timeprobe_Test.cpp: + * tests/Timer_Queue_Reference_Counting_Test.cpp: + * tests/Timer_Queue_Test.cpp: + * tests/Token_Strategy_Test.cpp: + Refactored the includes due to Synch changes above. + + * etc/ace.doxygen: + Added "__ACE_INLINE__" and ACE_TEMPLATES_REQUIRE_SOURCE to + PREDEFINES so that the all the includes would show up in the + doxygen file reference pages. + + * ace/Log_Msg.{h,cpp}: + Removed the static log_msg_tss_key_ variable from ACE_Log_Msg + and added a free function in Log_Msg.cpp with a static local + variable to hold the same value. The obviates the need to + include OS.h in Log_Msg.h. + +Sun Aug 3 20:55:24 2003 Balachandran Natarajan + + * tests/RMCast/RMCast_Reassembly_Test.cpp: + * tests/RMCast/RMCast_UDP_Best_Effort_Test.cpp: #included ACE.h to + get rid of compile errors in the full reactor build. + +Sat Aug 2 17:50:30 2003 Jeff Parsons + + * ace/WIN32_Asynch_IO.h: + + Added #include of ace/Handle_Set.h. + +Fri Aug 1 17:23:32 2003 Balachandran Natarajan + + * ace/Cache_Map_Manager_T.cpp: + * ace/Functor.i: + * ace/Hash_Map_Manager_T.cpp: + * ace/Map_Manager.cpp: + * ace/POSIX_Asynch_IO.h: + * ace/RB_Tree.i: + * ace/String_Base.cpp: Changed all the includes of OS.h and + Malloc.h to OS_String.h and Malloc_Base.h, since that is + sufficient. Thanks to Carlos O'Ryan for providing the + patches. This helps to improve the compilation time of ACE and + its applications that use the above features. + +Fri Aug 1 14:55:00 2003 Dan Troesser + + * bin/create_ace_build.pl: + + Added -a (absolute) option to correspond with original + create_ace_build script. + +Fri Aug 1 14:52:17 2003 Justin Michel + + * bin/MakeProjectCreator/config/acedefaults.mpb: + + Removed the legacy libpaths. They make the log output too long, and + seem to cause a problem with some nightly builds for some + unknown reason. We'll just have to be careful not to check in + mpc-generated files without editing for reverse compatibility. + +Fri Aug 1 12:37:59 UTC 2003 Johnny Willemsen + + * ace/config-vxworks5.x.h: + Added setting of ACE_HAS_CHARPTR_DL + +Fri Aug 1 07:21:39 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Added a 'forcount' which provides a one based index of the foreach + iterations. + +Fri Aug 1 06:37:39 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug where pch files were being picked up even if they did + not end with a valid extension. + +Thu Jul 31 14:22:17 2003 Justin Michel + + * bin/create_ace_build.pl: + * bin/MakeProjectCreator/config/acedefaults.mpb: + * bin/MakeProjectCreator/config/loadbalancing.mpb: + * bin/MakeProjectCreator/config/property.mpb: + * bin/MakeProjectCreator/config/rtoldevent.mpb: + + Added .disable to the list of files that won't be linked + by create_ace_build.pl. + Added legacy libpaths so that generated Makefiles will be + reverse compatible with existing ones, as a temporary + workaround until everything is MPC generated. + Fixed some typos in base mpb files. + +Thu Jul 31 13:12:17 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + The KEEP_GOING flag is automatically set now. It is keyed off of + the -k option to make. If -k is passed to make, then KEEP_GOING + will be set to 1, otherwise it will be set to 0. + +Thu Jul 31 11:36:35 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Added the ability for the main Makefile to stop after the first + error. By default, it moves on to the next makefile when an error + is encountered. Now, set the make macro KEEP_GOING to zero to + have it stop after the first error is encountered. + +Thu Jul 31 16:14:30 UTC 2003 Don Hinton + + * examples/C++NPv2/C++NPv2.mpc: + * examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.mpc: + * examples/Reactor/WFMO_Reactor/WFMO_Reactor.mpc: + * examples/Registry/Registry.mpc: + Added a verbatim tag that ifdef's out the entire Makefile on + non-Windows systems. This code can probably be factored out + into a platform specific template that Windows only project + inherit. Also, this will probably prevent these project from + being built with Cygwin and MinGW, since the only test for the + MAKE variable, not a Windows specific variable. + +Thu Jul 31 07:42:57 2003 Douglas C. Schmidt + + * apps/soreduce/Obj_Module.cpp (add_source): + * apps/soreduce/SO_Group.cpp (add_executable): Fixed bugs where + application code was being called within ACE_ASSERT macros, + which were disappearing when ACE_NDEBUG was enabled! Thanks to + Roland Meub for reporting this fix. + +Thu Jul 31 01:29:16 UTC 2003 Don Hinton + + * examples/Export/Export.mpc: + Added sharedname to library project and libs to executable so + they would link correctly. + + * examples/IPC_SAP/FIFO_SAP/fifo_sap.mpc: + * examples/Smart_Pointers/Smart_Pointers.mpc: + Fixed minor typo's in exename and sourcefile name. + +Thu Jul 31 00:49:18 UTC 2003 Don Hinton + + These are changes needed in order to use MPC. + + * examples/C++NPv2/WFMO_Reactor_Logging_Server.cpp: + * examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.{h,cpp}: + * examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFCDlg.{h,cpp}: + * examples/Log_Msg/Log_Msg_MFC/MFC_Log.cpp: + * examples/Reactor/WFMO_Reactor/APC.cpp: + * examples/Reactor/WFMO_Reactor/Abandoned.cpp: + * examples/Reactor/WFMO_Reactor/Directory_Changes.cpp: + * examples/Reactor/WFMO_Reactor/Exceptions.cpp: + * examples/Reactor/WFMO_Reactor/Multithreading.cpp: + * examples/Reactor/WFMO_Reactor/Registration.cpp: + * examples/Reactor/WFMO_Reactor/Registry_Changes.cpp: + * examples/Reactor/WFMO_Reactor/Removals.cpp: + * examples/Reactor/WFMO_Reactor/Suspended_Removals.cpp: + * examples/Reactor/WFMO_Reactor/Talker.cpp: + * examples/Reactor/WFMO_Reactor/Window_Messages.cpp: + * examples/Registry/test_registry_iterator.cpp: + * examples/Registry/test_registry_update.cpp: + * examples/Service_Configurator/Misc/Timer_Service.cpp: + Modified include order and added ifdef's around WIN32 specific + code so these projects will compile on non-Windows platforms, + since MPC doesn't currently allow you to easily exclude projects + based on platform. + + * examples/Connection/blocking/SPIPE-acceptor.cpp: + * examples/Connection/blocking/SPIPE-connector.cpp: + Removed an unused parameter and added parentheses to fix compile + warnings and errors. + + * examples/Reactor/Proactor/test_multiple_loops.cpp: + Fixed a capitalization typo in an include, and added an else + branch to define a main() function. + + * examples/RMCast/Send_File/RMCast_Send_File.mpc: + * tests/RMCast/acetest.mpb: + Added a "requires += rmcast" so that these projects would only + be compiled if libRMCast had been compiled, i.e., rmcast=1. + +Wed Jul 30 19:21:27 UTC 2003 Don Hinton + + * ace/Global_Macros.h: + * ace/Log_Msg.cpp: + * ace/Naming_Context.cpp: + * ace/Object_Manager.cpp: + * ace/README: + * examples/ASX/Event_Server/Event_Server/Options.cpp: + * examples/ASX/UPIPE_Event_Server/Options.cpp: + * examples/Shared_Malloc/Options.cpp: + Added ACE_HAS_TRACE macro that gets defined if ACE_NTRACE=0 and + is used to ifdef away calls to ACE_Trace when not tracing. This + removes the need to link in Trace.o for static applications not + tracing. + + * ace/Asynch_Acceptor.cpp: + * ace/Auto_Ptr.h: + * ace/Auto_Ptr.i: + * ace/Based_Pointer_T.h: + * ace/Based_Pointer_T.i: + * ace/OS.h: + * ace/SV_Semaphore_Complex.i: + * ace/SV_Semaphore_Simple.i: + * ace/Synch_Options.cpp: + * ace/Trace.h: + * tests/Proactor_Timer_Test.cpp: + * tests/Reactor_Timer_Test.cpp: + Adjusted includes to reflect the above change by mainly removing + Trace.h, though in some cases by including Global_Macros.h or + Trace.h for the two tests. + + * bin/generate_export_file.pl: + Made the generated code match what's in Global_Macros.h: + + * ace/Select_Reactor.h: + When ACE_MT_SAFE=0, ifdef away the unused template specialization + of ACE_Guard>. + +Wed Jul 30 17:00:03 2003 Yamuna Krishnamurthy + + * ace/UUID.cpp: + + Removed erroneous casting of timeLow. Thanks to Johnny Willemsen + for pointing this out. + +Wed Jul 30 02:18:17 UTC 2003 Don Hinton + + * configure.ac: + * m4/config_h.m4: + Added macros to check for existence of stdint.h and inttypes.h + and define the appropriate ACE_LACKS_* macro is they are + missing. + + * ace/os_include/os_pthread.h: + Added check for UNIXWARE_7_1 before defining default values for + several THR_* macros. Terletsky Oleg + for supplying these patches. + +Tue Jul 29 09:59:35 2003 Chad Elliott + + * ace/UUID.cpp: + + Changed the #includes to use the ace directory. + + * ace/ace.mpc: + + Added Metrics_Cache.cpp and UUID.cpp. + +Tue Jul 29 09:39:58 2003 Chad Elliott + + * bin/MakeProjectCreator/config/vcpartialmacros.mpt: + + Modified to add to pch_defines instead of assigning. + + * bin/MakeProjectCreator/templates/bordll.mpt: + * bin/MakeProjectCreator/templates/borexe.mpt: + * bin/MakeProjectCreator/templates/common.mpt: + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplib.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + * bin/MakeProjectCreator/templates/gnudll.mpt: + * bin/MakeProjectCreator/templates/gnuexe.mpt: + * bin/MakeProjectCreator/templates/makedll.mpt: + * bin/MakeProjectCreator/templates/nmakedll.mpt: + * bin/MakeProjectCreator/templates/nmakeexe.mpt: + * bin/MakeProjectCreator/templates/va4iccdll.mpt: + * bin/MakeProjectCreator/templates/va4iccdllexe.mpt: + * bin/MakeProjectCreator/templates/va4icclib.mpt: + * bin/MakeProjectCreator/templates/va4icclibexe.mpt: + * bin/MakeProjectCreator/templates/vc6dspdll.mpt: + * bin/MakeProjectCreator/templates/vc6dspdllexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsplib.mpt: + * bin/MakeProjectCreator/templates/vc6dsplibexe.mpt: + * bin/MakeProjectCreator/templates/vc7dll.mpt: + * bin/MakeProjectCreator/templates/vc7exe.mpt: + + Added the common.mpt for a place to put common template input + settings and added an include of common to each template input + file. + +Tue Jul 29 09:01:44 2003 Chad Elliott + + * Kokyu/tests/DSRT_MIF/DSRT_MIF.mpc: + * Kokyu/tests/EDF/EDF.mpc: + * Kokyu/tests/FIFO/FIFO.mpc: + + Added mpc files for the tests. + + * bin/MakeProjectCreator/config/kokyu.mpb: + + Added an include of $(ACE_ROOT)/Kokyu. + +Tue Jul 29 07:59:51 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + + Remove ACE_ROOT reference in the templates for the depgen.pl + script. + +Tue Jul 29 07:46:58 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Change the way the 'implicit' keyword works. It now takes both + boolean values and character strings that represent base projects + for implicitly generated projects. See the README for more + details. + + * examples/examples.mwc: + + Utilize the new 'implicit' functionality. + +Mon Jul 28 22:00:00 2003 Balachandran Natarajan + + * bin/footprint_stats.sh: Added new libraries that were not + covered. + +Mon Jul 28 15:06:32 2003 Jeff Parsons + + * ace/WFMO_Reactor.i: + + Fixed typo in preprocessor directive. + +Mon Jul 28 19:23:22 UTC 2003 Don Hinton + + * ace/WFMO_Reactor.cpp: + Added ACE_UNUSED_ARG to dump to silence a warning when + ACE_HAS_DUMP is not defined. + +Mon Jul 28 18:29:38 UTC 2003 Don Hinton + + * ace/RB_Tree.cpp: + Added ACE_UNUSED_ARG to dump_i and dump_node_i to silence a + warning when ACE_HAS_DUMP is not defined. + +Mon Jul 28 13:01:49 2003 Balachandran Natarajan + + * ace/UUID.h: + * ace/UUID.cpp: The implementations are now placed in a namespace + ACE_Utils. Since we can now use namespaces, adding them to a + namespace made more sense. + + * ace/UUID.i: File UUID.i is now renamed to be UUID.inl + + * ace/UUID.inl: New file. + + * tests/UUIDTest.cpp: Changes to confirm to the above changes. + +Mon Jul 28 12:49:23 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Added the ability to uppercase and lowercase strings within the + templates. + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/AutomakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/AutomakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/templates/automake.mpd: + * bin/mpc.pl: + * bin/mwc.pl: + + Added initial support for Automake. This is by no means complete + or even correct, but it's a starting point. Perhaps someone who + knows something about Automake could make the automake template + better (correct). + +Mon Jul 28 09:36:15 2003 Gan Deng + + * bin/tao_orb_tests.lst + Put the Bug_1551_Regression test into the daily builds. + +Sun Jul 27 20:19:48 UTC 2003 Don Hinton + + * ace/ARGV.cpp: + * ace/ATM_Acceptor.cpp: + * ace/ATM_Acceptor.i: + * ace/ATM_Addr.cpp: + * ace/ATM_Addr.i: + * ace/ATM_Connector.cpp: + * ace/ATM_Connector.i: + * ace/ATM_Params.cpp: + * ace/ATM_Params.i: + * ace/ATM_QoS.cpp: + * ace/ATM_QoS.i: + * ace/ATM_Stream.cpp: + * ace/ATM_Stream.i: + * ace/Acceptor.cpp: + * ace/Activation_Queue.cpp: + * ace/Active_Map_Manager_T.i: + * ace/Addr.cpp: + * ace/Array_Base.inl: + * ace/Atomic_Op.cpp: + * ace/Atomic_Op_T.cpp: + * ace/Atomic_Op_T.i: + * ace/Auto_IncDec_T.cpp: + * ace/Auto_Ptr.cpp: + * ace/Auto_Ptr.i: + * ace/Based_Pointer_T.cpp: + * ace/Cache_Map_Manager_T.cpp: + * ace/Cache_Map_Manager_T.i: + * ace/Caching_Strategies_T.i: + * ace/Connector.cpp: + * ace/Containers_T.cpp: + * ace/Containers_T.i: + * ace/DEV.cpp: + * ace/DEV_Addr.cpp: + * ace/DEV_Connector.cpp: + * ace/DEV_IO.cpp: + * ace/Dev_Poll_Reactor.cpp: + * ace/Dump_T.cpp: + * ace/Dynamic_Service_Base.cpp: + * ace/Event_Handler_T.cpp: + * ace/FIFO.cpp: + * ace/FIFO_Recv.cpp: + * ace/FIFO_Recv_Msg.cpp: + * ace/FIFO_Send.cpp: + * ace/FIFO_Send_Msg.cpp: + * ace/FILE.cpp: + * ace/FILE_Addr.cpp: + * ace/FILE_Connector.cpp: + * ace/FILE_IO.cpp: + * ace/File_Lock.cpp: + * ace/Framework_Component.cpp: + * ace/Future.cpp: + * ace/Get_Opt.cpp: + * ace/Handle_Set.cpp: + * ace/Hash_Map_Manager_T.cpp: + * ace/Hash_Map_Manager_T.i: + * ace/High_Res_Timer.cpp: + * ace/INET_Addr.cpp: + * ace/IO_SAP.cpp: + * ace/IPC_SAP.cpp: + * ace/LSOCK.cpp: + * ace/LSOCK_Acceptor.cpp: + * ace/LSOCK_CODgram.cpp: + * ace/LSOCK_Connector.cpp: + * ace/LSOCK_Dgram.cpp: + * ace/Local_Name_Space_T.cpp: + * ace/Local_Tokens.cpp: + * ace/Log_Msg.cpp: + * ace/Log_Record.cpp: + * ace/MEM_Acceptor.cpp: + * ace/MEM_Addr.cpp: + * ace/MEM_Connector.cpp: + * ace/MEM_IO.cpp: + * ace/MEM_SAP.cpp: + * ace/MEM_Stream.cpp: + * ace/Malloc.cpp: + * ace/Malloc_Allocator.cpp: + * ace/Malloc_Allocator.i: + * ace/Malloc_T.cpp: + * ace/Map_Manager.cpp: + * ace/Map_T.i: + * ace/Mem_Map.cpp: + * ace/Memory_Pool.cpp: + * ace/Message_Block.cpp: + * ace/Message_Queue.cpp: + * ace/Message_Queue_T.cpp: + * ace/Module.cpp: + * ace/Name_Proxy.cpp: + * ace/Name_Request_Reply.cpp: + * ace/Naming_Context.cpp: + * ace/OS.cpp: + * ace/Obchunk.cpp: + * ace/Obstack_T.cpp: + * ace/PI_Malloc.cpp: + * ace/Parse_Node.cpp: + * ace/Pipe.cpp: + * ace/Priority_Reactor.cpp: + * ace/Process_Manager.cpp: + * ace/Process_Mutex.cpp: + * ace/Process_Semaphore.cpp: + * ace/Profile_Timer.cpp: + * ace/RB_Tree.cpp: + * ace/RB_Tree.i: + * ace/RW_Process_Mutex.cpp: + * ace/Reactor.cpp: + * ace/Read_Buffer.cpp: + * ace/Registry_Name_Space.cpp: + * ace/Remote_Name_Space.cpp: + * ace/Remote_Tokens.cpp: + * ace/SOCK.cpp: + * ace/SOCK_Acceptor.cpp: + * ace/SOCK_CODgram.cpp: + * ace/SOCK_Connector.cpp: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_IO.cpp: + * ace/SOCK_SEQPACK_Acceptor.cpp: + * ace/SOCK_SEQPACK_Association.cpp: + * ace/SOCK_SEQPACK_Connector.cpp: + * ace/SOCK_Stream.cpp: + * ace/SPIPE.cpp: + * ace/SPIPE_Acceptor.cpp: + * ace/SPIPE_Addr.cpp: + * ace/SPIPE_Connector.cpp: + * ace/SPIPE_Stream.cpp: + * ace/SString.cpp: + * ace/SV_Message.cpp: + * ace/SV_Message_Queue.cpp: + * ace/SV_Semaphore_Complex.cpp: + * ace/SV_Semaphore_Simple.cpp: + * ace/SV_Shared_Memory.cpp: + * ace/Select_Reactor_Base.cpp: + * ace/Select_Reactor_T.cpp: + * ace/Service_Config.cpp: + * ace/Service_Manager.cpp: + * ace/Service_Object.cpp: + * ace/Service_Repository.cpp: + * ace/Service_Types.cpp: + * ace/Shared_Memory_MM.cpp: + * ace/Shared_Memory_SV.cpp: + * ace/Signal.cpp: + * ace/Singleton.cpp: + * ace/Stats.i: + * ace/Strategies_T.cpp: + * ace/Stream.cpp: + * ace/Stream_Modules.cpp: + * ace/String_Base.i: + * ace/Svc_Handler.cpp: + * ace/Synch.cpp: + * ace/Synch.i: + * ace/Synch_Options.cpp: + * ace/Synch_T.cpp: + * ace/TLI.cpp: + * ace/TLI_Acceptor.cpp: + * ace/TLI_Connector.cpp: + * ace/TLI_Stream.cpp: + * ace/Task_T.cpp: + * ace/Thread_Control.cpp: + * ace/Thread_Manager.cpp: + * ace/Time_Request_Reply.cpp: + * ace/Time_Value.cpp: + * ace/Timer_Hash_T.cpp: + * ace/Timer_Heap_T.cpp: + * ace/Timer_List_T.cpp: + * ace/Timer_Queue_T.cpp: + * ace/Timer_Wheel_T.cpp: + * ace/Token.cpp: + * ace/Token_Collection.cpp: + * ace/Token_Invariants.cpp: + * ace/Token_Manager.cpp: + * ace/Token_Request_Reply.cpp: + * ace/Trace.cpp: + * ace/Typed_SV_Message.cpp: + * ace/Typed_SV_Message_Queue.cpp: + * ace/UNIX_Addr.cpp: + * ace/UPIPE_Acceptor.cpp: + * ace/UPIPE_Connector.cpp: + * ace/UPIPE_Stream.cpp: + * ace/Unbounded_Queue.cpp: + * ace/Unbounded_Set.cpp: + * ace/Unbounded_Set_Ex.cpp: + * ace/Vector_T.cpp: + * ace/WFMO_Reactor.cpp: + * ace/WFMO_Reactor.i: + * ace/XTI_ATM_Mcast.cpp: + * ace/README: + Added new macro, ACE_HAS_DUMP, and used it to #ifdef out the + bodies of the dump() methods is it isn't defined. This will + help reduce footprint for deployed applications that don't use + dump(). Currently, it is not defined by default. + +Sun Jul 27 12:51:14 2003 Venkita Subramonian + + * Kokyu/DSRT_Dispatcher_Impl.{cpp,h,i}: + Deleted these files. + + * Kokyu/Kokyu.dsp: + * Kokyu/Kokyu_Static.dsp: + Updated due to the above deletion. + +Sun Jul 27 12:13:31 2003 Venkita Subramonian + + * Kokyu/DSRT_Schedulers.{cpp,h): + Removed this file. + + * Kokyu/Kokyu_DLL.dsp: + Replaced with Kokyu.dsp. + + * Kokyu/Kokyu.mwc: + Deleted this until I am able to get the mwc based generation + working. + + * Kokyu/Kokyu.mpc: + Changed "dllflags" keyword to "dynamicflags". This was causing + build errors in Win2K_VC71_NET_DLL Remedy build. Thanks to + Johnny Willemsen for pointing this out. + + * Kokyu/Makefile.Kokyu: + Updated dependencies. + + * Kokyu/Kokyu.dsp: + * Kokyu/Kokyu_Static.dsp: + * Kokyu/Kokyu.dsw: + Updated project and workspace files with newly added DSRT files. + +Sat Jul 26 22:08:48 UTC 2003 Don Hinton + + * ace/OS.h (getmacaddress): + Removed unused local variable. Resolves compile warnings on + Sun. + +Sat Jul 26 13:25:12 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_gnuwin32_common.GNU: + When linking with mingw, also link netapi32 because this is now + needed because of the ACE_OS::getmacaddress() addition + +Fri Jul 25 22:01:14 2003 Venkita Subramonian + * Kokyu/Kokyu.dsp: + * Kokyu/Kokyu_DLL.dsp: + * Kokyu/Kokyu_Static.dsp: + + No .cpp extension was generated in MPC created .dsp + file. Corrected this manually. + +Fri Jul 25 17:41:08 2003 Venkita Subramonian + + * Kokyu/Kokyu_DLL.dsp: + * Kokyu/DSRT_Schedulers.cpp: + * Kokyu/DSRT_Scheduler.h: + + Removed these files from CVS. Kokyu_DLL.dsp is renamed to + Kokyu.dsp after conversion to MPC. + + * Kokyu/DSRT_Direct_Dispatcher_Impl_T.{cpp,h}: + * Kokyu/DSRT_Dispatch_Item_T.{cpp,h,i}: + * Kokyu/DSRT_Dispatcher_Impl_T.{cpp,h,i}: + * Kokyu/DSRT_Sched_Queue_T.{cpp,h}: + * Kokyu/Kokyu_dsrt.{cpp,h,i} + + Added new files to implement dynamic scheduling schedulers. + + * Kokyu/Kokyu.dsp: + * Kokyu/Kokyu.mwc: + * Kokyu/Kokyu.mpc: + * Kokyu/Makefile.Kokyu: + * Kokyu/Makefile.Kokyu.bor: + * Kokyu/Makefile.bor: + * Kokyu/Kokyu.dsw: + * Kokyu/Kokyu_Static.dsp: + * Kokyu/Makefile: + + Created MPC file for Kokyu and generated project files from MPC. + + * Kokyu/Kokyu_defs.{cpp,h,i} + * Kokyu/Default_Dispatcher_Impl.{cpp,h,i} + * Kokyu/Dispatcher_Impl.{h,cpp,i} + * Kokyu/Dispatcher_Task.{h,cpp,i} + * Kokyu/Kokyu.{cpp,h,i} + * Kokyu/kokyu_export.h + + Reorganized files and updated comments and doxygen documentation. + + * Kokyu/tests/DSRT_MIF/MIF.cpp + + Modified example to reflect new Kokyu dispatcher class. + +Thu Jul 24 14:23:44 2003 Douglas C. Schmidt + + * ace/Future.{h,cpp}: Removed the operator new/delete/& so + that ACE_Future can be stored in STL containers (e.g., + sets/maps/etc.). Thanks to Felix Wyss , + Patrick Bennett , and Johnny Tucker + for helping with this. + +Fri Jul 25 17:32:58 UTC 2003 Don Hinton + + * ace/os_include/os_dlfcn.h: + Define ACE_DEFAULT_SHLIB_MODE to be RTLD_LAZY|RTLD_GLOBAL + when ACE_HAS_SVR4_DYNAMIC_LINKING, not just for Linux. + Thanks to Krishnakumar B for suggesting + this. + + * include/makeinclude/platform_macosx.GNU: Add with_ld=macosx. + * include/makeinclude/plafform_g++_common.GNU: + Don't add "-Wl,-E" to LDFLAGS when with_ld=macosx. Thanks to + John Michael Zorko pointing out the problem + and supplying a patch. Also, thanks to Craig Rodrigues + for suggesting we set the default for + with_ld=gnu and only add "-Wl,-E", which id gnu linker + specific, if we're using the gnu version of ld. + +Fri Jul 25 11:37:09 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Added the ability to access grouped source files through the + template. The grouped_source_files, grouped_header_files, etc. + can be used if the files are grouped in the mpc file (as they + currently are in ace.mpc). + + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + * bin/MakeProjectCreator/templates/gnu.mpd: + + Utilize the new template ability and remove the 'gnu_source_files' + and 'build' references and code. + +Fri Jul 25 09:17:39 2003 Balachandran Natarajan + + * bin/performance_stats.sh: + * bin/generate_performance_chart.sh: Redefined the range for + plotting different graphs. + +Fri Jul 25 08:53:12 2003 Balachandran Natarajan + + * bin/performance_stats.sh: Changed the path to mogrify. On + flamenco.dre it is installed in /usr/local instead of + /usr/bin/X11. This would break the stats pages at UCI. The pages + at UCI haven't been updated in a long while. Hence shouldn't be a + big deal. + + With this change the thumbnails should be fine at dre pages. + +Fri Jul 25 11:10:21 UTC 2003 Johnny Willemsen + + * ace/config-win32-common.h: + Only do a pragma comment with MSVC + + * ace/Makefile.bor: + Added UUID + * ace/UUID.h: + Fixed compile error with Borland + + * ace/UUID.cpp: + Improved log line. + + * tests/UUIDTest.cpp: + Fix compile problem in unicode build and ACE_START_TEST to + get logfile. + + * tests/Tests.bor: + Added UUIDTest + +Fri Jul 25 09:34:11 UTC 2003 Johnny Willemsen + + * ace/config-win32-common.h: + Also include nb30.h with MinGW and Borland, but don't do a + pragma comment with MinGW + + * ace/OS.cpp (getmacaddress): + Fixed incorrect trace, with Borland and MinGW use a reinterpret + cast instead of a static cast. + +Thu Jul 24 17:32:51 2003 Pradeep Gore + + * bin/tao_other_tests.lst: + + Added: + $TAO_ROOT/orbsvcs/examples/Notify/Lanes/run_test.pl: !ST !MINIMUM + $TAO_ROOT/orbsvcs/examples/Notify/ThreadPool/run_test.pl: !ST !MINIMUM + +Thu Jul 24 16:23:53 2003 Balachandran Natarajan + + * bin/generate_performance_chart.sh: Changed the scale to which + the graph is plotted. + +Thu Jul 24 14:00:29 2003 Balachandran Natarajan + + * ace/DEV_IO.h (recv_n): + * ace/DEV_IO.i: The semantics of recv_n () is now changed to have + a timeout and a byte transferred variable. The interface now has + the semantics associated with ACE_OS::recv_n () and ACE::recv_n + () calls. Thanks to Tom Phan . + +Thu Jul 24 15:01:59 UTC 2003 Don Hinton + + * include/makeinclude/platform_g++_common.GNU: + Added check for !static_libs_only before setting LDFLAGS += + -Wl,-E, since the static_libs and shared_libs variables aren't + reset until later in wrapper_macros.GNU, e.g., users can either + set shared_libs=0 or static_libs_only=1 to turn off shared_libs. + +Thu Jul 24 13:56:54 UTC 2003 Don Hinton + + * include/makeinclude/platform_g++_common.GNU: + * include/makeinclude/platform_linux.GNU: + Rolled back the part of Wed Jul 23 23:47:52 UTC 2003 Don Hinton + that changed LDFLAGS in + platform_linux.GNU, and instead added the same code to + platform_g++_common.GNU for shared libs only. This should + fix the spike in footprint that showed up this morning due to + yesterday's change. + +Thu Jul 24 01:19:59 UTC 2003 Don Hinton + + * tests/DLL_Test.dsp: + * tests/DLL_Test_Impl.dsp: + Enabled RTTI so we can test dynamic_cast'ing in a dll. + +Wed Jul 23 23:47:52 UTC 2003 Don Hinton + + * ace/os_include/os_dlfcn.h: + Changed ACE_DEFAULT_SHLIB_MODE to be RTLD_LAZY|RTLD_GLOBAL on Linux + in order to enable dynamic_cast'ing in shared libraries loaded by + ACE_DLL. + + * include/makeinclude/platform_linux.GNU: + Added -Wl,-E to LDFLAGS to add all symbols to the dynamic symbol + table in order to enable dynamic_cast'ing in shared libraries + loaded by ACE_DLL. Thanks to Milan Cvetkovic + for reporting this and providing the fix. + + * tests/DLL_Test.cpp: + * tests/DLL_Test.h: + * tests/DLL_Test_Impl.cpp: + Added a dynamic_cast test to the existing DLL_Test. + + * THANKS: + Added Milan Cvetkovic to the hall of fame. + +Wed Jul 23 12:43:48 2003 Ossama Othman + + * ace/UUID.cpp: + + Added missing ACE_RCSID macro. + + (UUID_node): + + Use UUID_node::NODE_ID_SIZE instead of the hardcoded constant + "6". Improves code maintainability. + + (ACE_UUID): + + Corrected format specifier mismatch warnings in sscanf() call + exhibited by G++ 3.2.2. Hexadecimal format specifiers ("%x") + expect the corresponding argument to be an unsigned int, not a + signed int. + +Wed Jul 23 19:35:27 UTC 2003 Don Hinton + + * THANKS: + Added Serkan Unsal to hall of fame. + +Wed Jul 23 18:03:21 UTC 2003 Don Hinton + + * ace/config-cygwin32.h: + Include os_math.h here so it always gets included before + ACE.h, since math.h defines log2 as macro that conflicts with + the method ACE::log2(). + + * ace/ace/String_Base.cpp: + Remove #include "ace/streams.h" and let the cpp's that actually + use it include it themselves. This helps reduce both footprint + and compile-times. Thanks to Bala Natarajan + for motivating this change. + +Wed Jul 23 17:34:56 UTC 2003 Johnny Willemsen + + * ace/Configuration_Import_Export.h: + Document for ACE_Registry_ImpExp that the value after dword is read + in hexidecimal format. Thanks to Todd Cooper for + reporting this. + +Tue Jul 22 22:46:18 2003 Balachandran Natarajan + + * ace/OS.h: Fixed a typo in the documentation of read_n (). + +Tue Jul 22 23:24:53 UTC 2003 Don Hinton + + * ace/OS.cpp (ACE_Thread_ID::to_string): + Fixed WCHAR build errors by making all types char instead of + ACE_TCHAR and removing ACE_LIB_TEXT macros. + +Tue Jul 22 19:20:16 2003 Yamuna Krishnamurthy + + * ace/ace_dll.dsp: + + Included the UUID generator files into the project to compile on + windows. + + * tests/tests.dsw: + * tests/UUIDTest.dsp: + + Updated tests.dsw to include the corresponding UUIDTest.dsp + project for the unit test UUIDTest which tests the ACE UUID + generator. + +Tue Jul 22 16:43:01 UTC 2003 Johnny Willemsen + + * ace/OS.i: + Changed new rand_r() implementation a little bit + +Tue Jul 22 15:12:02 UTC 2003 Don Hinton + + * ace/iosfwd.h: + Added #include "ace/streams.h" if __APPLE_CC__ is defined. This + fixes problems with gperf hanging on MAC OSX. Thanks to John + Michael Zorko for reporting the problem and + supplying the patch. + +Tue Jul 22 14:59:59 UTC 2003 Don Hinton + + * include/makeinclude/platform_linux.GNU: + Rolled back Wed Jun 18 17:28:25 2003 Balachandran Natarajan + and added _GNU_SOURCE instead. If + _GNU_SOURCE is defined, these defaults plus a few others + including _XOPEN_SOURCE, get set by default--and defaults can + and do change over time. This should also cleanup warnings on + Debian builds. + +Tue Jul 22 10:29:39 2003 Steve Huston + + * ace/OS.cpp: Fixed compile error; #elif should be #else. + * ace/UUID.cpp: Added #include "ace/Log_Msg.h" to pick up the necessary + things for doing logging (ACE_DEBUG, etc.). + +Tue Jul 22 06:01:03 UTC 2003 Johnny Willemsen + + * Select_Reactor_T.cpp: + * Timer_Heap_T.cpp: + * Timer_List_T.cpp: + * Timer_Wheel_T.cpp: + Fixed incorrect ACE_TRACE statements to fix fuzz errors. + +Tue Jul 22 05:44:12 UTC 2003 Johnny Willemsen + + * ace/OS.i: + Added an implementation for rand_r() on Win32. Thanks to + Kees van Marle for noticing the lack of this + implementation. + +Tue Jul 22 00:19:39 UTC 2003 Don Hinton + + * examples/C++NPv2/Logging_Handler.cpp: + Added #include "ace/streams.h" to resolve compile error. + +Mon Jul 21 22:57:54 UTC 2003 Don Hinton + + * bin/fuzz.pl: + Added check for "/**/" comment in pre.h/post.h includes. Thanks + to Johnny Willemsen for motivating this. + + * ace/Basic_Types.h: + * ace/Strategies.h: + * ace/UUID.h: + * docs/tutorials/022/Acceptor_Service.h: + * Kokyu/*.h: + Added comment that adding "/**/" between the #include and the + filenames in order to improve doxygen documentation. + +Mon Jul 21 22:52:46 2003 Yamuna Krishnamurthy + + * ace/OS.h: + * ace/OS.cpp: + + Moved #include from OS.h to OS.cpp. This + should resolve the compile errors on solaris. + +Mon Jul 21 08:59:14 2003 Irfan Pyarali + + * ace/UUID.cpp (get_systemtime): + + Temporary fix to get the compiles rolling again. + +Mon Jul 21 01:56:44 2003 Yamuna Krishnamurthy + + * ace/OS.h: + * ace/OS.cpp: + + Added method getmacaddress () to get the mac address of the host + for generating UUIDs + + Added to_string() method to ACE_Thread_ID class to create a + string representation of ACE_Thread_ID. + + * ace/config-win32-common.h: + + Included file nb30.h and library netapi32.lib required for + obtaining MACaddress on windows. + + * ace/UUID.h: + * ace/UUID.cpp: + * ace/UUID.i: + + Files added to generate UUID (Universally Unique ID) based on + expired IETF draft titled "UUIDs and GUIDs". Modifications were + made to the UUID generation as defined by the specification to + add thread and process ids. This was done by adding a new + variant 0xc0 not defined by the specification. By default only + the time variant version of the UUID as defined by the spec is + generated. + + * tests/Makefile.tests: + * tests/UUIDTest.cpp: + + Simple test added to verify ACE UUID generation. + +Sun Jul 20 14:14:46 2003 Douglas C. Schmidt + + * ace/NT_Service.i (ACE_NT_Service): Set dwWaitHint to 0 in the + constructor. Thanks to Emiliano Berenbaum + for reporting this. + +Fri Jul 18 18:59:46 2003 Douglas C. Schmidt + + * ACE-INSTALL.html: Clarified that ACE+TAO no longer build with + MSVC++ 5.x or earlier. Thanks to Amol Tambe + for reporting this. + +Sat Jul 19 18:38:50 UTC 2003 Don Hinton + + * docs/ACE-guidelines.html: + Added comment that adding "/**/" between the #include and the + file name prevents Doxygen from including the file in the file + reference tree graphs, and should be used with pre.h and + post.h--which makes the large ones much easier to understand. + + * ace/*.h: + * ace/CLASSIX/*.h: + * ace/QoS/*.h: + * ace/RMCast/*.h: + * ace/SSL/*.h: + * ace/os_include/*.h: + * ace/os_include/arpa/*.h: + * ace/os_include/net/*.h: + * ace/os_include/netinet/*.h: + * ace/os_include/sys/*.h: + * performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.h: + * performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.h: + * tests/Service_Config_DLL.h: + Added "/**/" between the #include and filename for pre.h and + post.h so Doxygen won't include them in the file reference tree + graphs. + +Fri Jul 18 17:58:12 UTC 2003 Johnny Willemsen + + * ace/Asynch_IO.h: + * ace/Local_Tokens.h: + * ace/Service_Types.h: + Fixed doxygen warnings. + +Fri Jul 18 10:36:51 2003 Krishnakumar B + + * THANKS: Added Dieter Knüppel to the + contributors list. + +Thu Jul 17 15:02:56 UTC 2003 Don Hinton + + * examples/C++NPv1/Logging_Handler.cpp: + Added #include "ace/streams.h". + +Thu Jul 17 12:49:39 UTC 2003 Don Hinton + + * examples/NT_Service/main.cpp: + Added #include "ace/streams.h". + +Thu Jul 17 06:21:30 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/BorlandProjectCreator.pm: + + Changed the name of borland projects to just be the project name + .bor. + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/Options.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Changed the default workspace names for nmake and borland to + Makefile. Additionally, I added an option (-make_coexistence) + to allow the gnuace, nmake and borland types to coexist. This + option causes the default workspace names for nmake and borland to + work as they previously had. The nmake workspace would be + workspace name .nmake and the borland workspace would be named + Makefile.bor. + +Wed Jul 16 15:29:37 2003 Justin Michel + + * bin/create_ace_build.pl: + + Fixed to link include/makeinclude/*.bor files. + A few more link exclusions were added. + +Wed Jul 16 15:27:37 2003 Irfan Pyarali + + * ace/Dev_Poll_Reactor.h (find_handler): + + Pure virtual specifier for find_handler() was a cut and paste + error. + +Wed Jul 16 08:38:49 2003 Chad Elliott + + * bin/MakeProjectCreator/config/acedefaults.mpb: + * bin/MakeProjectCreator/config/openssl.mpb: + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/gnudll.mpt: + * bin/MakeProjectCreator/templates/gnuexe.mpt: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/makedll.mpt: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/nmakedll.mpt: + * bin/MakeProjectCreator/templates/nmakeexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc6dspdll.mpt: + * bin/MakeProjectCreator/templates/vc6dspdllexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsplibexe.mpt: + * bin/MakeProjectCreator/templates/vc7.mpd: + * bin/MakeProjectCreator/templates/vc7dll.mpt: + * bin/MakeProjectCreator/templates/vc7exe.mpt: + + Switched ssl over to use the feature based style instead of the + template style. Now, the ssl related libraries will only be added + to the generated projects if the ssl feature is enabled. + +Wed Jul 16 08:00:10 2003 Chad Elliott + + * bin/MakeProjectCreator/config/acedefaults.mpb: + * bin/MakeProjectCreator/config/global.features: + * bin/MakeProjectCreator/config/zzip.mpb: + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/bordll.mpt: + * bin/MakeProjectCreator/templates/borexe.mpt: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplib.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/gnudll.mpt: + * bin/MakeProjectCreator/templates/gnuexe.mpt: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/makedll.mpt: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/nmakedll.mpt: + * bin/MakeProjectCreator/templates/nmakeexe.mpt: + * bin/MakeProjectCreator/templates/va4icc.mpd: + * bin/MakeProjectCreator/templates/va4iccdll.mpt: + * bin/MakeProjectCreator/templates/va4iccdllexe.mpt: + * bin/MakeProjectCreator/templates/va4icclib.mpt: + * bin/MakeProjectCreator/templates/va4icclibexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc6dspdll.mpt: + * bin/MakeProjectCreator/templates/vc6dspdllexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsplib.mpt: + * bin/MakeProjectCreator/templates/vc6dsplibexe.mpt: + * bin/MakeProjectCreator/templates/vc7.mpd: + * bin/MakeProjectCreator/templates/vc7dll.mpt: + * bin/MakeProjectCreator/templates/vc7exe.mpt: + + Switched the zzip configuration information over to use the + feature based style instead of doing it within the templates. + Now, to enable zzip use the -feature_file option to specify a file + that has 'zzip=1' and 'zlib=1'. For more information on the + -feature_file option see the README. + (or use bin/MakeProjectCreator/config/default.features) + + * bin/MakeProjectCreator/config/zziplib.mpt: + + Removed this file. + +Wed Jul 16 12:15:34 UTC 2003 Don Hinton + + * ace/IOStream_T.cpp: + * ace/config-borland-common.h: + * ace/config-psos-diab-mips.h: + * ace/config-psos-diab-ppc.h: + * ace/config-psos-diab.h: + * ace/config-psos-tm.h: + * ace/config-psosim-g++.h: + * ace/config-vxworks5.x.h: + * ace/config-win32-ghs.h: + * ace/iosfwd.h: + Removed all references to ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION. + It was used to include ace/iosfwd.h instead of ace/streams.h, + but files should only include one they need instead of always + including ace/streams.h, which includes if available + and unnecessarily increases compile times. Thanks to Carlos O'Ryan + motivating this. + + * ace/OS.h: + * ace/Basic_Types.h: + Removed the #ifdefs for ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION and + always include ace/iosfwd.h. + + * ace/OS_Log_Msg_Attributes.h: + Replaced include of ace/streams.h with ace/iosfwd.h in order + to improve compile times + + * performance-tests/SCTP/Options_Manager.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_clt.cp: + * performance-tests/SCTP/SOCK_SEQPACK_srv.cpp: + * performance-tests/SCTP/SOCK_STREAM_clt.cpp: + * performance-tests/SCTP/SOCK_STREAM_srv.cpp: + Added include of ace/streams.h, needed due to the above change. + +Tue Jul 16 11:43:12 UTC 2003 Johnny Willemsen + + * tests/tests.mpc: + Some tests where based on aceexe, changes this to acetest. This + fixes problems with vc71. + +Tue Jul 15 06:22:55 2003 Chad Elliott + + * bin/MakeProjectCreator/config/global.features: + * bin/MakeProjectCreator/config/zlib.mpb: + + Added the zlib feature (disabled by default). This will allow + users to enable the zlib feature and pull in include paths, lib + paths and library which will be dependent upon the ZLIB_ROOT + environment variable. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Fixed a bug where false warnings would be displayed if + MPC_VERBOSE_ORDERING was set. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Added a rule to create the libout directory. + Fixed a bug in the gnu template that only affected TAO libraries + that had 'requires' or 'avoids'. + + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/makedll.mpt: + + Fixed a problem with cppflags and dependencies. + + * bin/depgen.pl: + + Ignore unknown options instead of causing an error. + + * bin/ChangeLogEditor/FileLocator.pm: + + Fixed a bug where the correct CVSROOT value wasn't being used. + +Mon Jul 14 18:33:12 UTC 2003 Johnny Willemsen + + * ace/os_include/os_errno.h: + When building for VxWorks also include errnoLib.h + + * ace/OS.cpp (inet_aton): + Fixed VxWorks specific implementation. Thanks to Eric Held + for reporting this, this fixes bugzilla + entry [1484] + + * THANKS: + Added Eric Held + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + Removed windows specific use of cmd. This is not needed and + causes problems when using MinGW with the MSYS shell on windows. + + * include/makeinclude/platform_cygwin32.GNU: + Threading compiles with cygwin again, so no need anymore to set + threads to 0 when not defined. + + * ChangeLog: + Fixed fuzz errors about backslashed in file path + + * tests/Logging_Strategy_Test.cpp: + Removed not needed newline. + + * tests/MEM_Stream_Test.cpp: + Fixed typo in comment + + * tests/run_test.lst: + The FIFO_Test doesn't run with Cygwin. + +Mon Jul 14 11:16:25 2003 Craig Rodrigues + + * ace/POSIX_Proactor.cpp: FreeBSD defines the sysconf value + for _SC_AIO_LISTIO_MAX to 16, and the sysconf value for + _SC_AIO_MAX to be 1024. The lower value must be assigned to + aiocb_list_max_size_ otherwise aio_suspend() will fail. There + was already already some logic in here to support HPUX that also + works for FreeBSD, so use that. + +Sat Jul 12 17:55:14 2003 Irfan Pyarali + + * tests/Conn_Test.cpp: + + Added explicit template instantiation for ACE_Connector_Base. + +Fri Jul 11 16:30:02 2003 Irfan Pyarali + + * tests/MT_Reference_Counted_Event_Handler_Test.cpp (run_main): + + The string in ACE_START_TEST was incorrect. + +Fri Jul 11 01:08:41 2003 Irfan Pyarali + + * ACEXML/common/Mem_Map_Stream.cpp: + * apps/Gateway/Gateway/Connection_Handler_Connector.cpp: + * apps/Gateway/Peer/Peer.cpp: + * apps/JAWS/clients/Blobby/Blob.cpp: + * apps/JAWS/clients/Caching/http_handler.cpp: + * examples/ASX/Event_Server/Transceiver/transceiver.cpp: + * examples/Connection/blocking/SPIPE-connector.cpp: + * examples/Connection/misc/test_upipe.cpp: + * examples/Connection/non_blocking/test_lsock_connector.cpp: + * examples/Connection/non_blocking/test_sock_connector.cpp: + * examples/Connection/non_blocking/test_spipe_connector.cpp: + * examples/Connection/non_blocking/test_tli_connector.cpp: + * examples/Web_Crawler/URL_Visitor.cpp: + * netsvcs/lib/TS_Clerk_Handler.cpp: + * tests/Cached_Accept_Conn_Test.cpp: + * tests/Cached_Conn_Test.cpp: + * tests/Dev_Poll_Reactor_Test.cpp: + * tests/NonBlocking_Conn_Test.cpp: + * tests/Priority_Reactor_Test.cpp: + * tests/Reactor_Performance_Test.cpp: + * tests/TP_Reactor_Test.cpp: + * tests/CLASSIX/CLASSIX_Con_Acc_Test.cpp: + + Added explicit template instantiation for ACE_Connector_Base. + +Fri Jul 11 00:38:16 2003 Irfan Pyarali + + * ace/Dev_Poll_Reactor.h (ACE_Dev_Poll_Reactor): + + Added find_handler() method. + +Thu Jul 10 19:51:52 2003 Irfan Pyarali + + * tests/Conn_Test.cpp: + + Fixed incorrect template instantiation for + ACE_NonBlocking_Connect_Handler. + +Thu Jul 10 15:11:55 2003 Irfan Pyarali + + * tests/MT_Reference_Counted_Event_Handler_Test.dsp + * tests/MT_Reference_Counted_Notify_Test.dsp + * tests/NonBlocking_Conn_Test.dsp + * tests/Reactor_Registration_Test.dsp + * tests/Reference_Counted_Event_Handler_Test.dsp + * tests/Timer_Cancellation_Test.dsp + * tests/Timer_Queue_Reference_Counting_Test.dsp + * tests/WFMO_Reactor_Test.dsp + + Updated project files to add Main.cpp. + +Wed Jul 09 22:48:48 2003 Irfan Pyarali + + * tests/Thread_Pool_Reactor_Resume_Test: + + Removed the lame reference counting scheme in this test and + replaced it with the new and proper reference counting. + +Wed Jul 09 21:37:52 2003 Irfan Pyarali + + * tests/MT_Reactor_Timer_Test.cpp (handle_close): + + Removed unused arg warning. + +Wed Jul 09 21:22:24 2003 Irfan Pyarali + + * ace/Timer_Heap_T.cpp (insert): + + The decision to grow the heap was made on this formula: + + if (this->cur_size_ + 2 >= this->max_size_) + + though the correct decision should have been: + + if (this->cur_size_ + this->cur_limbo_ + 2 >= this->max_size_) + + Without this, tests/Timer_Queue_Test was failing with + cur_size_ = 15, cur_limbo_ = 20 and max_size_ = 35, but insert() + did not regrow the heap and eventually schedule() failed. + +Wed Jul 09 13:17:57 2003 Irfan Pyarali + + * ace/Select_Reactor_Base.cpp (purge_pending_notifications): + + Fixed build problem when ACE_HAS_REACTOR_NOTIFICATION_QUEUE, + there was a typo in the name of a local variable. Thanks to + Carlos for pointing this out. + +Tue Jul 08 17:28:58 2003 Irfan Pyarali + + * tests/MT_Reactor_Timer_Test.cpp (handle_close): + + Not sure why handle_close() was trying to remove the handler + from the Reactor. handle_close() is called as a result of being + removed from the Reactor. No need to remove again. + +Tue Jul 08 15:02:48 2003 Irfan Pyarali + + * examples/Reactor/Misc/pingpong.cpp: + + Included "ace/Test_and_Set.h" explicitly. + +Tue Jul 08 14:49:38 2003 Irfan Pyarali + + * ace/Timer_List_T: + * ace/Timer_Wheel_T: + + Fixed unused arg warning in cancel_i(). + +Mon Jul 7 23:17:21 2003 Nanbor Wang + + * ace/Thread_Manager.cpp (spawn_i): Change to always return the + thread "handle" if users ask for it. For some reason, we did + not return this value on some platforms, although it's always + been available. Thanks to Robin Farine + for reporting this. [Bug 1546] + +Mon Jul 07 18:00:38 2003 Irfan Pyarali + + * The following changes are related to improving memory management + of Event Handlers when they interact with Reactors (and Timer + Queues). When a handler is registered with the Reactor, the + Reactor increments the reference count on the handler. The + Reactor also increments this reference count when making upcalls + on the handler. The reference count is decremented when an + upcall completes or when the handler is removed from the + Reactor. + + This mechanism is similar to what happens between POAs and + Servants and it allows for the safe deletion of handlers. This + mechanism is particularly need for multi-threaded applications + that can have multiple threads executing upcalls on a handler + that needs to be shutdown in a safe manner. The following + illustrates an example of how this mechanism works: + + - When a handler is created, it reference count is one. + + - After the handler is registered with the Reactor, it reference + count becomes two. + + - At this point, the handler creator can let go of the handler + reference, bringing down the reference count to one. + + - For each thread executing upcalls on the handler, the Reactor + increments the reference count by one. So if three threads were + simultaneously making upcalls on a handler, the reference count + would be four. + + - Assuming an external event (and thread) decides to close the + handler. It simply removes the handler from the Reactor. This + decreases the reference count to three. + + - As each thread completes their upcall, the reference reduces. + + - Once the final thread exits the upcall, the reference reaches + zero, and the handler is finally deleted. + + This mechanism ensures that the handler is not deleted until the + final upcall thread exits the handler. + + Reference counting on handlers is optional and is disabled by + default. To enable reference counting on a handler, reset its + reference counting policy to "ENABLED". + + To facilitate reference counting of handlers, an + ACE_Event_Handler_var class was added. This class is akin to + the PortableServer::ServantBase_var class. + + Similar reference counting related changes were made to the + Timer Queues so that handlers can be used in a thread safe + manner with the queues. + + The Connector implementation was completely revised to utilize + the new memory management mechanisms and remove existing + concurrency bugs. + + Several new examples/tests were added: + + - tests/Reference_Counted_Event_Handler_Test + - tests/MT_Reference_Counted_Event_Handler_Test + - tests/MT_Reference_Counted_Notify_Test + - tests/Timer_Queue_Reference_Counting_Test + - tests/NonBlocking_Conn_Test + - tests/Reactor_Registration_Test + - tests/WFMO_Reactor_Test + - tests/Timer_Cancellation_Test + + Details follow below: + + Fri May 09 20:13:37 2003 Irfan Pyarali + + * ace/Event_Handler: + + Added reference counting capabilities to the event handler. The + reference counting will be used for event handler memory + management by Reactors that will call add_reference() and + remove_reference() during registrations, removals, and upcalls. + This mechanism is similar to the protocol between servants and + POAs. + + Reference counting is configurable and can be controlled by the + Reference_Counting_Policy which is disabled by default. + + Added a ACE_Event_Handler_var auto pointer like class for + Event Handlers. This class calls + ACE_Event_Handler::remove_reference() in its destructor. + + Added reactor_timer_interface() method that returns the + Reactor's timer related interface. + + * ace/Reactor_Timer_Interface.h: + + Added a new class ACE_Reactor_Timer_Interface that contains + timer related (pure virtual) methods of the Reactor. This + allows us to make timer related calls on the Reactor from the + Timer Queue without having to include Reactor.h. + + * ace/Reactor: + + Vastly improved documentation, specially with respect to how the + reference counting works. + + Made the Reactor class inherit from ACE_Reactor_Timer_Interface + so that timer related calls can be made on the Reactor from the + Timer Queue without having to include Reactor.h. + + * ace/Reactor: + * ace/Reactor_Impl: + * ace/Select_Reactor_T: + * ace/WFMO_Reactor: + + Added a new find_handler() method that returns the event handler + associated with a . + + * ace/Select_Reactor_Base.cpp: + + - bind(): Make sure that the user is not registering a different + handler for an existing handle in the + Reactor_Handler_Repository. Also, if it is a new entry, call + add_reference() if reference counting is needed. + + - unbind(): Call remove_reference() if the removal is complete + and reference counting is needed. Also, Bala's change: + + Mon Apr 7 16:58:55 2003 Balachandran Natarajan + + is no longer necessary since handle_close() is now only called + once the Reactor state has been completely updated. + + - mask_ops(): If the handle is not suspended, then set the ops + on the , otherwise set the . + + - handler_i(): Add to reference count of event handler before + returning to the user if reference counting is needed. + + - ACE_Select_Reactor_Notify::dispatch_notify(): + - ACE_Select_Reactor_Notify::purge_pending_notifications(): + - ACE_Select_Reactor_Notify::notify(): + + Added reference counting for notifies. + + * ace/Select_Reactor_T: + + notify_handle(): Added reference counting to upcalls. + + * ace/TP_Reactor: + + - remove_handler(): All remove_handler() specializations can be + removed since there no longer is the requirement of calling + handle_close() from outside the Reactor lock. + + - handle_timer_events(): Call preinvoke() and postinvoke() on + the timer queue so that timer upcalls can be reference counted. + + - handle_socket_events(): Added reference counting to upcalls. + + - mask_ops(): Specialization no longer necessary since the base + class now does the right thing. + + * ace/WFMO_Reactor: + + - handler(): Original handler() method was not locked. + + - bind_i(): Call add_reference() if reference counting is + needed. + + - make_changes_in_current_infos(): + - make_changes_in_suspension_infos(): + - make_changes_in_to_be_added_infos(): + + The iteration loop was incorrect. When an entry was replaced + from the one at the end, the newly shifted entry was skipped and + not evaluated. make_changes_in_to_be_added_infos() did not need + this change since entries are not moved around in the + set. + + Also, call remove_reference() if reference counting if needed. + + - complex_dispatch_handler(): Added reference counting to + upcalls. + + - ACE_WFMO_Reactor_Notify::purge_pending_notifications(): + - ACE_WFMO_Reactor_Notify::notify(): + - ACE_WFMO_Reactor_Notify::handle_signal(): + + Added reference counting for notifies. + + * ace/Timer_Queue_T: + + - Not sure why we were including Test_and_Set.h when we only + needed to include Event_Handler.h. + + - dispatch_info() and dispatch_info_i(): Made these virtual so + that they can be specialized. + + - ACE_Timer_Node_Dispatch_Info_T: Added so + that we can determine if we need to call remove_reference() if + it is not a recurring timer and if reference counting is + required. This value is passed to the timeout() method of the + upcall functor. + + - timeout(): When handle_timeout() returns -1, invoke + cancel_timer() on the reactor if the event handler has a valid + reactor, otherwise invoke cancel() on the timer queue. It is + necessary to get the same locking as was used when registering + the timer, which was potentially done holding the reactor lock + while the timer queue could have been configured with a null + lock. + + - schedule(): No longer a pure virtual method. It now grabs + the lock, call schedule_i(), and finally calls registration() on + the upcall functor. + + - registration(): This method is called when a timer is + registered. + + - preinvoke(): Invokes add_reference() on the event handler if + reference counting is required before making the upcall. + + - upcall(): Changed the signature to pass + ACE_Timer_Node_Dispatch_Info_T instead of the individual + parameters. + + - postinvoke(): Invokes remove_reference() on the event handler + if reference counting is required after making the upcall. + + - cancel_type() and cancel_timer(): Split cancellation() into + two methods. cancel_timer() is called when a timer is + canceled. cancel_type() is called when a handler is + canceled. Also added parameter to these method. + cancel_timer() will be used for reference counting and + cancel_type() will be used for calling handle_close(). + + - expire(): Call preinvoke() before calling upcall() and + postinvoke() after calling upcall(). + + - deletion(): Now calls cancel_type() and cancel_timer() for + each timer remaining in the queue. + + * ace/Timer_List_T: + * ace/Timer_Wheel_T: + * ace/Timer_Heap_T: + * ace/Timer_Hash_T: + + - schedule_i(): This method replaces the old schedule() method. + Locking is not necessary anymore. + + - cancel(): This method will call cancel_timer() once for each + timer canceled and cancel_type() once for each handler + canceled. + + - cancel_i(): The check will be performed in the + upcall functor. + + * ace/Timer_Heap_T: + + - ~ACE_Timer_Heap_T(): Don't use for the for loop + since it reduces after free_node() is called. + + - cancel(): Not sure why this is the only cancel() where the + upcall is made outside the lock. + + * ace/Timer_Wheel_T: + + - expire(): Made this method similar to Timer_Queue_T::expire() + by (a) invoking preinvoke() before calling upcall() and invoking + postinvoke() after calling upcall() and (b) making sure that we + skip past time values that have already "expired" when + rescheduling. + + * ace/Timer_Hash_T: + + - ACE_Timer_Hash_Upcall: Updated this upcall functor to match + the new APIs. + + - ACE_Timer_Hash_Upcall::registration(): + - ACE_Timer_Hash_Upcall::cancel_type(): + - ACE_Timer_Hash_Upcall::cancel_timer(): + + Nothing to be done in these methods since + registration/cancellation will be handled by the upcall functor + of the timer hash. + + - ACE_Timer_Hash_Upcall::preinvoke(): + - ACE_Timer_Hash_Upcall::postinvoke(): + - ACE_Timer_Hash_Upcall::preinvoke(): + + Assert that these methods never get invoked since we don't + invoke expire() on the buckets. + + - ACE_Timer_Hash_Upcall::deletion(): Call up to the upcall + functor of the timer hash since the timer hash does not invoke + deletion() on its upcall functor directly. This is because + entries are actually registered with the buckets, and this + method will be invoked when the buckets are cleaned up. + + - Hash_Token: Added TYPE information to the token. This + required templatizing Hash_Token since TYPE is a template + parameter. + + - reschedule(): Cancel the old timer before registering the new + one. Otherwise, the old timer will always remain in the + buckets. Also, make sure that the new bucket position is noted. + + - dispatch_info_i(): This method needs to be specialized to give + the original act and not the modified act. + + - free_node(): Needs to cancel the timer in addition to freeing + the node. + + - expire(): Only call cancel() for timers that don't need to be + rescheduled. reschedule() takes care of removing the old timer + for timers that need to be rescheduled. Also, made this method + similar to Timer_Queue_T::expire() by invoking preinvoke() + before calling upcall() and invoking postinvoke() after calling + upcall(). + + * ace/Proactor: + + Updated ACE_Proactor_Handle_Timeout_Upcall upcall functor to + match the new APIs. + + * ace/Connector: + + Completely reworked the Connector to utilize the reference + counting provided by the Reactor. This new design fixes bugs + 1405 and 1408. + + - There used to be a hash map that mapped handles to service + handlers. There is no need for this map since the Reactor + already keeps this mapping. We now keep a simple handle set to + remember the non-blocking connects in progress. This will help + when the Connector is closing down and we need to cancel the + non-blocking connections in progress. + + - The Connector no longer needs to inherit from + ACE_Service_Object since it does not register with the Reactor. + We now use ACE_NonBlocking_Connect_Handler for handling + non-blocking connects. The resume(), suspend(), and init() + no-ops, and fini() and info() were removed. + + - The is no longer needed since we use the Reactor lock + to do all our synchronization. This will solve bug 1408. + + - We no longer need the flag. + + - Need to add a field since the Connector is no + longer an event handler. + + - Reference counting of ASTs is no longer needed since event + handlers are reference counted. + + Thanks to Andrew Voumard for helping + with this. + + * tests/Reference_Counted_Event_Handler_Test: + + This test is used to check reference counting of the Event + Handler when it interacts with the Reactor. + + * tests/MT_Reference_Counted_Event_Handler_Test: + + This test tries to represents what happens in the TAO ORB wrt to + event handlers, reactors, timer queues, threads, and connection + caches, minus the other complexities. The following three + Reactors are tested: Select, TP, and WFMO. + + The test checks proper use and shutting down of client-side + event handlers when it is used by invocation threads and/or + event loop threads. Server-side event handlers are either + threaded or reactive. A purger thread is introduced to check the + connection recycling and cache purging. Nested upcalls are also + tested. + + * tests/MT_Reference_Counted_Notify_Test: + + This test is used to check reference counting of the event + handlers when it interacts with the reactor notification + mechanism. + + * tests/Timer_Queue_Reference_Counting_Test: + + New test is used to check reference counting of the Event + Handler when it interacts with Timer Queues. + + * tests/NonBlocking_Conn_Test: + + This test checks for the proper working of the following: + - blocking connections + - blocking connections with timeouts + - non-blocking connections + - non-blocking connections without waiting for completions + - non-blocking connections with timeouts + + * tests/Reactor_Registration_Test: + + This is a test of registering handlers with the Reactor. + + * tests/WFMO_Reactor_Test: + + New test of the WFMO_Reactor. It makes sure that removals and + suspensions work correctly. + + * tests/Timer_Cancellation_Test: + + A test to ensure the timer cancellation works correctly. + + * tests/Makefile: + * tests/Makefile.am: + * tests/Makefile.bor: + * tests/run_test.lst: + * tests/tests.icp: + * tests/tests.mpc: + * tests/tests.dsw: + + Added new tests: + + - MT_Reference_Counted_Event_Handler_Test + - MT_Reference_Counted_Notify_Test + - NonBlocking_Conn_Test + - Reactor_Registration_Test + - Reference_Counted_Event_Handler_Test + - Timer_Cancellation_Test + - Timer_Queue_Reference_Counting_Test + - WFMO_Reactor_Test + + * tests/Conn_Test.cpp: + + Updated template instantiations. + + * tests/icc.bat: + * tests/run_tests.bat: + * tests/run_tests.psosim: + + Removed this file since it has become obsolete. + + Wed May 14 17:56:13 2003 Irfan Pyarali + + * ace/OS.i: + + - event_timedwait(): For relative times, the parameter + was being modified. Instead use a stack variable such that the + parameter is not modified. + + * ace/Timer_Hash_T: + + - expire(): Remove nodes from the buckets instead of simply + getting them and canceling them later. Also, if timers were + expired, find the new earliest time. + + - reschedule(): No need to cancel the timer node since it is now + removed from the bucket in expire(). + + - free_node(): No need for this function since nodes are removed + from the bucket in expire(). + + - cancel(): No need to pass to bucket's cancel() since the + act comes from the Hash Token. Also, only perform upcall and + related cleanup on successful bucket cancel. + + - Added asserts in the code since there is not enough error + checking (and recovery) going on. + + * ace/Reactor: + * ace/Reactor_Impl: + * ace/Select_Reactor_T: + * ace/WFMO_Reactor: + + Renamed handler() to find_handler() since ACE_HANDLE is an "int" + on UNIX platforms and that causes ambiguity between + handler(ACE_HANDLE) and handler(int). + + * ace/Select_Reactor_Base.cpp (unbind): + + unbind() and bind(): Minor fixes for UNIX specific code. + + * ace/SOCK_SEQPACK_Association.cpp: + + Added template instantiation for ACE_Auto_Array_Ptr. + + * ace/Connector.cpp: + + cancel() and close(): Changed calls from Reactor::handler() to + Reactor::find_handler(). + + * tests/MT_Reference_Counted_Notify_Test.cpp: + * tests/NonBlocking_Conn_Test.cpp: + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + * tests/Reference_Counted_Event_Handler_Test.cpp: + * tests/Timer_Queue_Reference_Counting_Test.cpp: + + Added template instantiations. + + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + + - main(): Added code to ignore SIGPIPE. + + - test(): Converted this into template class so that multiple + instances of reactor implementation can be created. + + - Added additional asserts. + + Thu May 15 18:12:10 2003 Irfan Pyarali + + * ace/WFMO_Reactor (find_handler): + + Fixed minor oversights. + + * ace/Timer_Hash_T.cpp: + * ace/Connector.cpp: + + Fixed unused arg warnings. + + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + + - Added a Pipe class. It is a replica of the ACE_Pipe class. + Only difference is that this class always uses two sockets to + create the pipe, even on platforms that support pipes. + + - Removed some test cases that don't work on Linux. + + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + * tests/MT_Reference_Counted_Notify_Test.cpp: + * tests/Reference_Counted_Event_Handler_Test.cpp: + * tests/Reactor_Registration_Test.cpp: + * tests/Timer_Cancellation_Test.cpp: + * tests/Timer_Queue_Reference_Counting_Test.cpp: + + - Fixed member ordering in constructors. + - Fixed unused arg warnings. + + Thu May 15 19:46:49 2003 Irfan Pyarali + + * ACEXML/common/Mem_Map_Stream.cpp: + * apps/Gateway/Gateway/Connection_Handler_Connector.cpp: + * apps/Gateway/Peer/Peer.cpp: + * apps/JAWS/clients/Blobby/Blob.cpp: + * apps/JAWS/clients/Caching/http_handler.cpp: + * examples/ASX/Event_Server/Transceiver/transceiver.cpp: + * examples/Connection/blocking/SPIPE-connector.cpp: + * examples/Connection/misc/test_upipe.cpp: + * examples/Connection/non_blocking/test_lsock_connector.cpp: + * examples/Connection/non_blocking/test_sock_connector.cpp: + * examples/Connection/non_blocking/test_spipe_connector.cpp: + * examples/Connection/non_blocking/test_tli_connector.cpp: + * examples/Web_Crawler/URL_Visitor.cpp: + * netsvcs/lib/TS_Clerk_Handler.cpp: + * tests/Cached_Accept_Conn_Test.cpp: + * tests/Cached_Conn_Test.cpp: + * tests/Dev_Poll_Reactor_Test.cpp: + * tests/Priority_Reactor_Test.cpp: + * tests/Reactor_Performance_Test.cpp: + * tests/TP_Reactor_Test.cpp: + * tests/CLASSIX/CLASSIX_Con_Acc_Test.cpp: + + Fixed Connector related template instantiations. + + Fri May 16 16:34:35 2003 Irfan Pyarali + + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + * tests/Timer_Queue_Reference_Counting_Test.cpp (cancellation_test): + + Fixed static array initialization warnings. + + Tue May 20 18:33:07 2003 Irfan Pyarali + + * ace/Connector: + + Reverted the Connector to inherit from ACE_Service_Object again. + Even though the Connector no longer registers with the Reactor, + it still needs to inherit from ACE_Service_Object so that it can + be used through the Service Configurator primarily for dynamic + linking. The resume(), suspend(), and init() no-ops, and fini() + and info() were restated. + + Mon Jun 30 16:31:33 2003 Irfan Pyarali + + * ace/SSL/ACE_SSL_LIB.dsp: + + Fixed the project names - they should be: + + # Name "ACE_SSL_LIB - Win32 Static Release" + # Name "ACE_SSL_LIB - Win32 Static Debug" + + instead of: + + # Name "ACE_SSL_LIB - Win32 Release" + # Name "ACE_SSL_LIB - Win32 Debug" + + Wed Jul 02 15:31:33 2003 Irfan Pyarali + + * examples/Connection/non_blocking/CPP-connector.cpp: + + handle_close() on the Connector was being specialized to know + when the connection was not successful. This is not the correct + approach in the first place since one should look for close() on + the service handler. In addition, handle_close() is no longer + used by ACE_Connector. Therefore, I changed this to use close() + on the service handler. + + * apps/JAWS/clients/Caching/http_handler.h: + + Included "ace/Svc_Handler.h" explicitly. + + * examples/Logger/Acceptor-server/server_loggerd.cpp: + + Included "ace/Test_and_Set.h" explicitly since + ace/Timer_Queue_T.h is no longer including it. + + Thu Jun 26 17:36:13 2003 Irfan Pyarali + + * bin/msvc_auto_compile.pl: + + Added -tests_TAO and -examples_TAO options to make all projects + in TAO tests and TAO examples. + + Thu May 22 14:13:37 2003 Irfan Pyarali + + * Merged Reactor_RefCount branch with the main truck since all ACE + level changes are now complete. New branch is + Reactor_RefCount_1. + + Tue May 27 19:59:25 2003 Irfan Pyarali + + * Merged Reactor_RefCount_1 branch with the main truck to avail + new changes by Bala to the TAO connection handlers. New branch + is Reactor_RefCount_2. + +Mon Jul 7 12:38:01 2003 Douglas C. Schmidt + + * ace/Message_Queue_T.cpp: Updated the implementation of all the + dequeue_*() methods so that the "next_" and "prev_" pointer of + the dequeue'd message block are set to 0. Failure to do this + can cause weird behavior when a dequeue'd message block is + passed to ACE::write_n().... Thanks to Wenlong Tang + for reporting this. + +Mon Jul 7 11:14:02 2003 Jeff Parsons + + * TAO_IDL/be/be_visitor_structure/any_op_cs.cpp (visit_enum): + + Fixed a cut and paste error that was causing the code generation + for the any operators in the stub source file to be skipped. Thanks + to for reporting the bug. + + * TAO_IDL/be/be_visitor_enum/any_op_cs.cpp: + + Fixed cut and paste error in the explicit template instantiation. + +Mon Jul 7 12:31:40 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/MakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/templates/make.mpd: + + Added a 'depend' target and fixed the default library installation + target. + +Sun Jul 6 09:55:16 2003 Balachandran Natarajan + + * ace/Task.cpp: Fixed compile errors with MSVC 7.1 when + ACE_HAS_ANSI_CAST and RTTI is turned on. Thanks to Marek Brudka + for providing the patch. + + * THANKS: Added Marek to the hall of fame. + +Sat Jul 5 06:57:33 UTC 2003 Johnny Willemsen + + * THANKS: Updated e-mail address of Serge Kolgan + +Fri Jul 4 17:05:39 2003 Yamuna Krishnamurthy + + * include/makeinclude/ace_flags.bor: + + Added the TAO_RTSCHEDULER_CFLAGS flag to build RTSCheduler + library using Borland compiler. + +Fri Jul 4 07:29:12 UTC 2003 Johnny Willemsen + + * include/makeinclude/platform_gnuwin32_common.GNU: + Added support for the -pipe command line option of the g++ compiler + on Win32. This uses pipes instead of intermediate files and speeds up + the compilation. This is enabled by default but can be disabled by + adding pipes=0 to your platform_macros.GNU file. Thanks to + Serge Kolgan for this suggestion. + +Thu Jul 3 22:05:58 UTC 2003 Don Hinton + + * ace/config-linux-common.h: + * ace/os_include/os_pthread.h: + Moved the ACE_HAS_PTHREAD_SETSTACK definition to os_pthread.h + along with all the other pthread related definitions. This + should help eliminate warnings about using a the deprecated + function pthread_attr_setstackaddr. + +Thu Jul 03 17:00:47 2003 Nanbor Wang + + * bin/MakeProjectCreator/config/ciao_client.mpb: Added "security" + as one of the depending library for all CIAO clients. + +Thu Jul 3 13:15:17 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Added 'libpath' to the custom define keywords to allow a user to + specify an additional library search path for the custom command. + +Thu Jul 3 11:49:23 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Removed tao_idl specific defaults from these template files. + +Wed Jul 2 23:58:11 UTC 2003 Craig Rodrigues + + * ace/config-freebsd.h: + FreeBSD 5.1 implements (ACE_LACKS_STDINT_H) and + reentrant password functions (ACE_LACKS_PWD_REENTRANT_FUNCTIONS). + rand_r has been implemented for quite some time now + (ACE_LACKS_RAND_REENTRANT_FUNCTIONS). + +Wed Jul 2 23:34:18 UTC 2003 Don Hinton + + * tests/RMCast/RMCast_Fragment_Test.dsp: + * tests/RMCast/RMCast_Membership_Test.dsp: + * tests/RMCast/RMCast_Reassembly_Test.dsp: + * tests/RMCast/RMCast_Reordering_Test.dsp: + * tests/RMCast/RMCast_Retransmission_Test.dsp: + * tests/RMCast/RMCast_UDP_Best_Effort_Test.dsp: + Added Main.cpp to the projects. + +Wed Jul 2 23:10:25 UTC 2003 Don Hinton + + * tests/RMCast/Makefile: + * tests/RMCast/Makefile.bor: + * tests/RMCast/Main.cpp: + * tests/SSL/Makefile: + * tests/SSL/Makefile.bor: + * tests/SSL/Main.cpp: + Added Main.cpp and wired it up in the Makefiles. This is + needed to work with Justin's changes below in preparation to + using MPC for all builds. + +Wed Jul 2 22:48:18 UTC 2003 Don Hinton + + * ace/config-all.h/ + Rolled back Wed Jul 2 22:17:15 UTC 2003 Don Hinton + temporarily, since it is defined + inconsistently and compilation will fail if ACE_HAS_ANSI_CASTS is + just defined and not defined as a number. + +Wed Jul 2 22:17:15 UTC 2003 Don Hinton + + * ace/config-all.h/ + Added test for ACE_HAS_ANSI_CASTS != 0, not just its existence + since this is the way it is used. + +Wed Jul 02 14:57:00 2003 Justin Michel + + * examples/Registry/Registry.mpc + * tests/RMCast/acetest.mpb + * tests/SSL/acetest.mpb + * bin/create_ace_build.pl + * bin/MakeProjectCreator/config/rtnotify.mpb + * bin/MakeProjectCreator/config/valuetype.mpb + * examples/IPC_SAP/SOCK_SAP/sock_sap.mpc + * examples/IPC_SAP/SSL_SAP/SSL_SAP.mpc + * examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.mpc + * examples/Mem_Map/IO-tests/IO_Test.cpp + * examples/Mem_Map/IO-tests/test_io.cpp + * examples/OS/Process/OS_Process.mpc + * examples/QOS/Change_Receiver_FlowSpec/QOS_Change_Receiver_FlowSpec.mpc + * examples/QOS/Change_Sender_TSpec/QOS_Change_Sender_FlowSpec.mpc + * examples/QOS/Diffserv/QOS_Diffserv.mpc + * examples/QOS/Simple/QOS_Simple.mpc + * examples/RMCast/Send_File/RMCast_Send_File.mpc + * examples/Reactor/Misc/Reactor_Misc.mpc + * examples/Reactor/Multicast/Reactor_Multicast.mpc + * examples/Service_Configurator/IPC-tests/client/Service_Configurator_IPC_Client.mpc + * examples/Service_Configurator/IPC-tests/server/Service_Configurator_IPC_Server.mpc + * examples/Service_Configurator/Misc/Service_Configurator_Misc.mpc + * examples/Shared_Malloc/Shared_Malloc.mpc + * examples/Shared_Memory/Shared_Memory.mpc + * examples/Smart_Pointers/Smart_Pointers.mpc + * examples/System_V_IPC/SV_Message_Queues/SV_Message_Queues.mpc + * examples/System_V_IPC/SV_Semaphores/SV_Semaphores.mpc + * examples/Threads/Threads.mpc + * examples/Timer_Queue/Timer_Queue.mpc + * tests/acetest.mpb + * tests/tests.mpc + * tests/RMCast/RMCast_Fragment_Test.cpp + * tests/RMCast/RMCast_Membership_Test.cpp + * tests/RMCast/RMCast_Reassembly_Test.cpp + * tests/RMCast/RMCast_Reordering_Test.cpp + * tests/RMCast/RMCast_Retransmission_Test.cpp + * tests/RMCast/RMCast_UDP_Best_Effort_Test.cpp + * tests/RMCast/tests.mpc + * tests/SSL/Thread_Pool_Reactor_SSL_Test.cpp + * tests/SSL/tests.mpc + + Added some missing project files. + Updated all ACE tests to use the common test library. + Updated ACE test mpc files to use a common base project. + Fixed mpc files for broken examples. + Added base projects rtnotify and valuetype. + +Wed Jul 2 13:16:14 UTC 2003 Don Hinton + + * ace/config-doxygen.h: + Added define of __ACE_INLINE__ so that inlining will be turned + on in order to help identify unwanted inter-header dependencies. + +Tue Jul 1 20:47:35 UTC 2003 Don Hinton + + * ace/os_include/os_limits.h: + Added include of os_stdio.h. This picks up FILENAME_MAX on + Windows and fixes an alignment problem with ACE_PI_Control_Block + due to differing definitions for MAXNAMELEN. Thanks to + Serge Kolgan for help figuring this out. + + +Tue Jul 1 19:39:16 UTC 2003 Don Hinton + + * ace/config-vxworks5.x.h: + Added ACE_LACKS_SYS_UN_H and ACE_LACKS_PTHREAD_H. + + * ace/os_include/sys/os_mman.h: + Added !defined (ACE_WIN32) to the initial #if for the PROT_* + define section so Windows can make it to the #ifelse section. + +Sun Jun 29 01:31:52 UTC 2003 Don Hinton + + * ace/UNIX_Addr.h: + Added include of ace/os_include/sys/os_un.h to fix compile + problems on VxWorks. + +Sat Jun 28 15:26:11 2003 Douglas C. Schmidt + + * ace/OS_Dirent.inl (readdir_r): Added defined (__FreeBSD__) + here. Thanks to Karim Fodil-Lemelin for + submitting a patch. + +Fri Jun 27 12:52:12 UTC 2003 Johnny Willemsen + + * ace/Process.h: + Added forward declaration of ACE_Time_Value to fix compile + erros in Jaws server app. + +Thu Jun 26 21:34:43 2003 Chris Cleeland + + * ace/QtReactor.cpp: Removed precompiled header include residue + from OCI version. + +Thu Jun 26 17:35:00 2003 Justin Michel + + * Kokyu/Kokyu.mpc: + * bin/create_ace_build.pl: + * bin/MakeProjectCreator/config/kokyu.mpb: + * bin/MakeProjectCreator/config/rtkokyuevent.mpb: + + Fixes for mpc generated builds. + create_ace_build won't link .opt files. + +Thu Jun 26 16:31:51 2003 Chris Cleeland + + * ace/QtReactor.h: + * ace/QtReactor.cpp: + + The QtReactor works by semi-unifying the Qt Event loop with the + Reactor event loop. Most of the time, the Qt Event loop is the + dominant loop, but occasionally, when wait_for_multiple_events + gets called, the reactor loop becomes the dominant loop. + + Previous QtReactor implementations only overloaded + register_handler, caused them to never notice when an + application changed the mask on a previously-registered handler, + e.g., via ACE_Reactor::schedule_wakeup. Thus, the Qt event loop + never knew about the new interest or lack thereof, and didn't + call it back. + + This newer version overloads ACE_Reactor::bit_ops, and tweaks + the registrations with the Qt event loop according to bit_ops' + arguments' mask operations. This *should* allow us to catch + every twiddling of masks, although there is no comprehensive + regression test for this for any kind of reactor. + + From inspection, it appears as if the XtReactor might need + similar changes. + +Thu Jun 26 02:22:42 UTC 2003 Don Hinton + + * etc/ace.doxygen: + Added ace/pre.h and ace/post.h to the exclude list. This will + clean up the file dependency graphs a bit and make the more + complex ones a bit easier to read. + +Thu Jun 26 01:47:03 UTC 2003 Don Hinton + + * ace/config-freebsd.h: + Added #define ACE_LACKS_STDINT_H. + +Wed Jun 25 17:00:00 2003 Justin Michel + + * Kokyu/Kokyu.mpc: + * bin/MakeProjectCreator/config/ciao_client.mpb: + * bin/MakeProjectCreator/config/ciao_component.mpb: + * bin/MakeProjectCreator/config/idl_compiler.mpt: + * bin/MakeProjectCreator/config/idl_compiler_win32.mpt: + * bin/MakeProjectCreator/config/iorinterceptor.mpb: + * bin/MakeProjectCreator/config/messaging_only.mpb: + * bin/MakeProjectCreator/config/objreftemplate.mpb: + * bin/MakeProjectCreator/config/portableserver.mpb: + * bin/MakeProjectCreator/config/tao_output.mpb: + * bin/MakeProjectCreator/config/valuetype.mpb: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Fixes for various mpc generation problems. + +Wed Jun 25 13:14:00 2003 Justin Michel + + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Forgot to rename the dllflag keyword. + +Wed Jun 25 12:45:44 2003 Balachandran Natarajan + + * bin/topinfo_iorsize_stats.sh (s_id): + * bin/topinfo_simple_stats.sh: We used 'top' to determine the + runtime memory used by the process. A better way to get this + done is to use /proc/processid/status. The scripts have been + changed to use the proc info instead of 'top'. + +Wed Jun 25 11:00:00 2003 Justin Michel + + * nightly.mwc: + * ACEXML/ACEXML.mwc: + * ACEXML/common/common.mpc: + * ACEXML/parser/parser/parser.mpc: + * ASNMP/asnmp.mwc: + * Kokyu/Kokyu.mpc: + * ace/ace.mpc: + * ace/ace.mwc: + * ace/QoS/qos.mpc: + * ace/RMCast/rmcast.mpc: + * ace/SSL/ssl.mpc: + * apps/apps.mwc: + * apps/gperf/src/gperf.mpc: + * apps/mkcsregdb/mkcsregdb.mpc: + * bin/create_ace_build.pl: + * bin/MakeProjectCreator/README + * bin/MakeProjectCreator/config/acedefaults.mpb: + * bin/MakeProjectCreator/config/aceexe.mpb: + * bin/MakeProjectCreator/config/acelib.mpb: + * bin/MakeProjectCreator/config/acexml.mpb: + * bin/MakeProjectCreator/config/avstreams.mpb: + * bin/MakeProjectCreator/config/avstreamsexe.mpb: + * bin/MakeProjectCreator/config/bidir_giop.mpb: + * bin/MakeProjectCreator/config/ciao_client.mpb: + * bin/MakeProjectCreator/config/ciao_component.mpb: + * bin/MakeProjectCreator/config/ciao_servant.mpb: + * bin/MakeProjectCreator/config/ciao_server.mpb: + * bin/MakeProjectCreator/config/client.mpb: + * bin/MakeProjectCreator/config/concurrency.mpb: + * bin/MakeProjectCreator/config/dslogadmin.mpb: + * bin/MakeProjectCreator/config/dynamicany.mpb: + * bin/MakeProjectCreator/config/dynamicinterface.mpb: + * bin/MakeProjectCreator/config/etcl.mpb: + * bin/MakeProjectCreator/config/event.mpb: + * bin/MakeProjectCreator/config/ftorb.mpb: + * bin/MakeProjectCreator/config/global.features + * bin/MakeProjectCreator/config/global.mpb: + * bin/MakeProjectCreator/config/ifr_client.mpb: + * bin/MakeProjectCreator/config/ifrservice.mpb: + * bin/MakeProjectCreator/config/iorinterceptor.mpb: + * bin/MakeProjectCreator/config/iormanip.mpb: + * bin/MakeProjectCreator/config/iortable.mpb: + * bin/MakeProjectCreator/config/lifecycle.mpb: + * bin/MakeProjectCreator/config/loadbalancing.mpb: + * bin/MakeProjectCreator/config/messaging.mpb: + * bin/MakeProjectCreator/config/messaging_only.mpb: + * bin/MakeProjectCreator/config/naming.mpb: + * bin/MakeProjectCreator/config/namingexe.mpb: + * bin/MakeProjectCreator/config/notification.mpb: + * bin/MakeProjectCreator/config/notify.mpb: + * bin/MakeProjectCreator/config/notifytest.mpb: + * bin/MakeProjectCreator/config/objreftemplate.mpb: + * bin/MakeProjectCreator/config/orbsvcs_output.mpb: + * bin/MakeProjectCreator/config/orbsvcsexe.mpb: + * bin/MakeProjectCreator/config/orbsvcslib.mpb: + * bin/MakeProjectCreator/config/portablegroup.mpb: + * bin/MakeProjectCreator/config/portableserver.mpb: + * bin/MakeProjectCreator/config/property.mpb: + * bin/MakeProjectCreator/config/qos.mpb: + * bin/MakeProjectCreator/config/qt_moc.mpb: + * bin/MakeProjectCreator/config/rmcast.mpb: + * bin/MakeProjectCreator/config/rt_client.mpb: + * bin/MakeProjectCreator/config/rt_server.mpb: + * bin/MakeProjectCreator/config/rtcorba.mpb: + * bin/MakeProjectCreator/config/rtcorbacommon.mpb: + * bin/MakeProjectCreator/config/rtcorbaevent.mpb: + * bin/MakeProjectCreator/config/rtevent.mpb: + * bin/MakeProjectCreator/config/rteventexe.mpb: + * bin/MakeProjectCreator/config/rtoldevent.mpb: + * bin/MakeProjectCreator/config/rtportableserver.mpb: + * bin/MakeProjectCreator/config/rtsched.mpb: + * bin/MakeProjectCreator/config/rtschedevent.mpb: + * bin/MakeProjectCreator/config/security.mpb: + * bin/MakeProjectCreator/config/server.mpb: + * bin/MakeProjectCreator/config/smart_proxies.mpb: + * bin/MakeProjectCreator/config/ssl.mpb: + * bin/MakeProjectCreator/config/strategies.mpb: + * bin/MakeProjectCreator/config/svc_utils.mpb: + * bin/MakeProjectCreator/config/tao_output.mpb: + * bin/MakeProjectCreator/config/taoclient.mpb: + * bin/MakeProjectCreator/config/taoexe.mpb: + * bin/MakeProjectCreator/config/taolib.mpb: + * bin/MakeProjectCreator/config/taolib_with_idl.mpb: + * bin/MakeProjectCreator/config/taoserver.mpb: + * bin/MakeProjectCreator/config/taoversion.mpb: + * bin/MakeProjectCreator/config/time.mpb: + * bin/MakeProjectCreator/config/trading.mpb: + * bin/MakeProjectCreator/config/typecodefactory.mpb: + * bin/MakeProjectCreator/config/valuetype.mpb: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + * bin/MakeProjectCreator/modules/VA4ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC6ProjectCreator.pm: + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/bordll.mpt: + * bin/MakeProjectCreator/templates/borexe.mpt: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplib.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/gnudll.mpt: + * bin/MakeProjectCreator/templates/gnuexe.mpt: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/makedll.mpt: + * bin/MakeProjectCreator/templates/makeexe.mpt: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/nmakedll.mpt: + * bin/MakeProjectCreator/templates/nmakeexe.mpt: + * bin/MakeProjectCreator/templates/va4icc.mpd: + * bin/MakeProjectCreator/templates/va4iccdll.mpt: + * bin/MakeProjectCreator/templates/va4iccdllexe.mpt: + * bin/MakeProjectCreator/templates/va4icclib.mpt: + * bin/MakeProjectCreator/templates/va4icclibexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc6dspdll.mpt: + * bin/MakeProjectCreator/templates/vc6dspdllexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsplib.mpt: + * bin/MakeProjectCreator/templates/vc6dsplibexe.mpt: + * bin/MakeProjectCreator/templates/vc7.mpd: + * bin/MakeProjectCreator/templates/vc7dll.mpt: + * bin/MakeProjectCreator/templates/vc7exe.mpt: + * bin/PerlACE/Process_Unix.pm: + * bin/PerlACE/Process_Win32.pm: + * examples/example_base.mpb: + * examples/examples.mwc: + * examples/ASX/CCM_App/ASX_CCM_App.mpc: + * examples/ASX/Message_Queue/ASX_Message_Queue.mpc: + * examples/C++NPv1/C++NPv1.mpc: + * examples/C++NPv2/C++NPv2.mpc: + * examples/ConfigViewer/ConfigViewer.mpc: + * examples/Connection/blocking/Connection_Blocking.mpc: + * examples/Connection/misc/Connection_Misc.mpc: + * examples/Connection/non_blocking/Connection_Non_Blocking.mpc: + * examples/DLL/DLL.mpc: + * examples/Export/Export.mpc: + * examples/IOStream/client/IOStream_Client.mpc: + * examples/IOStream/server/IOStream_Server.mpc: + * examples/IPC_SAP/ATM_SAP/atm_sap.mpc: + * examples/IPC_SAP/DEV_SAP/reader/dev_sap_reader.mpc: + * examples/IPC_SAP/DEV_SAP/writer/dev_sap_writer.mpc: + * examples/IPC_SAP/FIFO_SAP/fifo_sap.mpc: + * examples/IPC_SAP/FILE_SAP/file_sap_client.mpc: + * examples/IPC_SAP/SOCK_SAP/sock_sap.mpc: + * examples/IPC_SAP/SPIPE_SAP/SPIPE_SAP.mpc: + * examples/IPC_SAP/SSL_SAP/SSL_SAP.mpc: + * examples/IPC_SAP/TLI_SAP/TLI_SAP.mpc: + * examples/IPC_SAP/UPIPE_SAP/UPIPE_SAP.mpc: + * examples/Log_Msg/Log_Msg.mpc: + * examples/Logger/Acceptor-server/Logger_Acceptor_Server.mpc: + * examples/Logger/client/Logger_client.mpc: + * examples/Logger/simple-server/Logger_Simple_Server.mpc: + * examples/Mem_Map/IO-tests/Mem_Map_IO_Tests.mpc: + * examples/Mem_Map/file-reverse/Mem_Map_File_Reverse.mpc: + * examples/Misc/Misc.mpc: + * examples/Naming/Naming.mpc: + * examples/OS/Process/OS_Process.mpc: + * examples/QOS/Change_Receiver_FlowSpec/QOS_Change_Receiver_FlowSpec.mpc: + * examples/QOS/Change_Sender_TSpec/QOS_Change_Sender_FlowSpec.mpc: + * examples/QOS/Diffserv/QOS_Diffserv.mpc: + * examples/QOS/Simple/QOS_Simple.mpc: + * examples/RMCast/Send_File/RMCast_Send_File.mpc: + * examples/Reactor/Dgram/Reactor_Dgram.mpc: + * examples/Reactor/FIFO/Reactor_FIFO.mpc: + * examples/Reactor/Misc/Reactor_Misc.mpc: + * examples/Reactor/Multicast/Reactor_Multicast.mpc: + * examples/Reactor/Ntalker/Reactor_Ntalker.mpc: + * examples/Reactor/Proactor/Proactor.mpc: + * examples/Reactor/WFMO_Reactor/WFMO_Reactor.mpc: + * examples/Service_Configurator/IPC-tests/client/Service_Configurator_IPC_Client.mpc: + * examples/Service_Configurator/IPC-tests/server/Service_Configurator_IPC_Server.mpc: + * examples/Service_Configurator/Misc/Service_Configurator_Misc.mpc: + * examples/Shared_Malloc/Shared_Malloc.mpc: + * examples/Shared_Memory/Shared_Memory.mpc: + * examples/Smart_Pointers/Smart_Pointers.mpc: + * examples/System_V_IPC/SV_Message_Queues/SV_Message_Queues.mpc: + * examples/System_V_IPC/SV_Semaphores/SV_Semaphores.mpc: + * examples/Threads/Threads.mpc: + * examples/Timer_Queue/Timer_Queue.mpc: + * examples/Web_Crawler/Web_Crawler.mpc: + * performance-tests/perf.mwc: + * tests/acetest.mpb: + * tests/tests.mpc: + * tests/tests.mwc: + * tests/RMCast/tests.mpc: + * tests/SSL/tests.mpc: + + Updated MPC with the latest features and changes from OCI's repo. Created + new mpb base projects to make mpc files as simple as possible, and updated + existing mpb base projects. Added and updated mpc files to use the latest + features and make use of base projects. + Added the create_ace_build.pl script that is more MPC friendly and works + on Windows. + Removed unused nightly.mwc. + Note : The new MPC base projects will now output all library files to + consistent locations across platforms. This is controlled by the three + files acelib.mpb, tao_output.mpb, and orbsvcs_output.mpb using the + libout keyword. Currently all of these are set to output to $ACE_ROOT/lib. + All libraries will be placed in this directory, including .dll files on + Windows. This means that Windows users will have to add %ACE_ROOT%\lib to + their %PATH%. This is analogous to %LD_LIBRARY_PATH% on Unix. + +Wed Jun 25 10:20:15 2003 Balachandran Natarajan + + * THANKS: Added missing doc_group folks at Vanderbilt. + +Wed Jun 25 13:36:51 UTC 2003 Don Hinton + + * ace/Service_Object.h: + Rolled back change from Sun Jun 22 03:27:10 UTC 2003 Don Hinton + which made ACE_DLL member variable a + reference as part of subsetting, which caused + Service_Config_Test to fail. + +Wed Jun 25 03:47:36 UTC 2003 Don Hinton + + * ace/config-linux.h: + * ace/os_include/os_pthread.h: + Removed include of pthread.h from config-linux.h and moved the + pthread_mutex_timedlock() declaration to os_pthread.h. + + * tests/Makefile.tests: + Added special build rule when on hpux that changes the link + order, i.e., main.o comes before x_Test.o. Hopefully this + will clear up linker errors on Hp with the gcc compiler that + started appearing after the tests directory was reorganized. + +Tue Jun 24 18:38:33 2003 Pradeep Gore + + * bin/tao_other_tests.lst: + Added Notify Basic test for RT_Notification. + Moved the Notify Lanes and Threadpool test with the other + Notify tests. + +Tue Jun 24 15:47:16 2003 Nanbor Wang + + * bin/MakeProjectCreator/config/ciao_client.mpb: Added + $(CIAO_ROOT)/ciao to idlflags. + + Added $(TAO_ROOT)/orbsvcs/orbsvcs to libpaths and linking + Security to even a simple stub DLL because of the way + components.idl is being set up. (Hint: we really don't need + them.) + + * bin/MakeProjectCreator/config/ciao_component.mpb: Reorganized + the template since I moved some of the libraries to ciao_client + to fix the components.idl definition problem. + + * bin/MakeProjectCreator/config/ciao_servant.mpb: Added this new + template to isolate customize CIDL rules for servant DLLs. It + turned out they also requires the stuff defined in the + Deployment module (thus, the CIAO_Server library.) + + * bin/MakeProjectCreator/templates/gnu.mpd: Added code to define + CIAO_ROOT in Makefiles if it's not defined already. + + Thanks to Chad Elliott for helping me setting up the custom + rules for CIDL compiler and answering my tons of questions. + +Tue June 24 16:26:06 2003 Yamuna Krishnamurthy + + * ace/QoS/QoS_Session.h: + * ace/QoS/QoS_Session_Impl.h: + * ace/QoS/QoS_Session_Impl.cpp: + * ace/QoS/QoS_Session_Impl.i: Added methods to set the source host + and port that is used to populate the TSpec for the + sending_qos. + +Tue Jun 24 13:10:25 2003 Douglas C. Schmidt + + * ace/Cached_Connect_Strategy_T.cpp (cached_connect): Added + a check for "|| errno == EADDRINUSE" to fix problems on Windows. + Thanks to Valery Salamakha for + reporting this. + +Tue Jun 24 12:07:06 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Convert custom defined values to relative paths if possible. If + it isn't possible, continue to use environment variables. + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Push the relative() method into the ProjectCreator, where it + should have been in the first place. + +Tue Jun 24 15:38:49 UTC 2003 Don Hinton + + * ace/Filecache.cpp: + Added include of ACE.h. + + * ace/Global_Macros.h: + Added include of ace/Trace.h when tracing is turned on. + + * ace/Typed_SV_Message.i: + Added include of ace/Global_Macros.h to pick up ACE_TRACE. + +Tue Jun 24 15:15:03 UTC 2003 Don Hinton + + * ace/os_include/sys/os_socket.h: + Removed ACE_HAS_CYGWIN32_SOCKET_H ifdef that included + cygwin32/socket.h, which is no longer needed. Thanks to "Johnny + Willemsen" for reporting this. + +Tue Jun 24 14:40:43 UTC 2003 Don Hinton + + * ace/String_Base.i: + Added include of Min_Max.h. Thanks to Olli Savia + for reporting this and supplying the fix. + + * ace/config-lynxos.h: + * ace/os_include/net/os_if.h: + Added new macro ACE_NEEDS_IPC_1C_H used to include ipc_1c.h + before net/if.h for LynxOS 3.1.0 and later. Thanks to Olli + Savia for reporting this and supplying the fix. + + * ace/os_include/os_signal.h: + * ace/os_include/os_ucontext.h: + Moved include of os_ucontext.h to bottom of os_signal.h and + included os_signal.h in os_ucontext.h. Thanks to John Michael + Zorko for reporting this. + +Tue Jun 24 03:50:21 UTC 2003 Don Hinton + + * ace/Based_Pointer_Repository.h: + Added include of os_stddef.h to pick up size_t. + +Tue Jun 24 02:00:02 UTC 2003 Don Hinton + + * etc/ace/doxygen: + Added the subdirectories under os_include so they'll get + included in the documentation. + +Tue Jun 24 01:25:38 UTC 2003 Don Hinton + + * ace/OS.h: + Removed a set of defines, e.g., LPSECURITY_ATTRIBUTES, and + ACE_OVERLAPPED struct in the ACE_PSOS that were missed before. + + * ace/OS.h: + * ace/os_include/os_stdint.h: + * ace/os_include/sys/os_types.h: + * ace/Process.h: + Moved typedefs for pid_t and ACE_exitcode and definition for + ACE_INVALID_PID to os_types.h and included it in Process.h. + + * ace/os_include/sys/os_uio.h: + * ace/os_include/os_limits.h: + Moved ACE_IOV_MAX and IOV_MAX defines from os_uio.h to + os_limits.h and included os_limits.h in os_uio,h. + +Mon Jun 23 12:46:05 2003 Rich Seibel + + * bin/tao_other_tests.lst: + Broke out the Naming Service flat-file persistence tests and + added a new Redundant Naming Service test. Both these tests + are disabled on mininum CORBA. + +Sun Jun 22 11:23:52 2003 Douglas C. Schmidt + + * THANKS: Added our 1,700th contributor to ACE+TAO. It's amazing + how many people have contributed to these open-source projects + since 1992! + +Mon Jun 23 11:51:13 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Added another MPC environment variable to allow a user to get an + informational message about which projects were skipped due to the + current set of features. + +Sun Jun 22 13:58:08 UTC 2003 Don Hinton + + * ace/Lib_Find.h: + Added include of os_stdio.h to pick up FILE, needed by BCB and + possibly other builds. + + * ace/Malloc_Allocator.i: + Removed redundant define of ACE_ASSERT> + +Sun Jun 22 04:54:45 UTC 2003 Don Hinton + + * ace/Handle_Set.[i,cpp]: + Moved include of Log_Msg.h from the cpp to the i file. + + * ace/INET_Addr.i: + * ace/Malloc_Allocator.i: + Added include of OS.h. + +Sun Jun 22 04:32:15 UTC 2003 Don Hinton + + * ace/Global_Macros.h: + Place LPSECURITY_ATTRIBUTES within !defined (ACE_WIN32) guards. + + * ace/Asynch_IO.h: + * ace/Malloc_Base.h: + Added include of ace/os_include/sys/os_types.h. + + * ace/OS.h: + * ace/os_include/sys/os_mman.h: + Moved MS_SYNC definition from OS.h to here. + + * ace/Basic_Types.h: + * ace/os_include/sys/os_types.h: + Moved ssize_t typedef here from Basic_Types.h. + + * ace/config-win32-common.h: + Add ACE_LACKS_PTHREAD_H. + + * ace/Malloc_Allocator.i: + Fixed typo. + +Sun Jun 22 03:27:10 UTC 2003 Don Hinton + + * ace/ACE.h: + * ace/ARGV.h: + * ace/Array_Base.cpp: + * ace/Array_Base.h: + * ace/Asynch_Connector.h: + * ace/Asynch_IO.cpp: + * ace/Asynch_IO.h: + * ace/Asynch_Pseudo_Task.h: + * ace/Based_Pointer_Repository.h: + * ace/DEV.cpp: + * ace/DEV_Addr.h: + * ace/DEV_Connector.cpp: + * ace/DEV_IO.h: + * ace/DEV_IO.i: + * ace/DLL.h: + * ace/DLL_Manager.cpp: + * ace/DLL_Manager.h: + * ace/Date_Time.h: + * ace/Date_Time.i: + * ace/Event_Handler.h: + * ace/Event_Handler_T.i: + * ace/FIFO.h: + * ace/FIFO_Recv.h: + * ace/FIFO_Recv.i: + * ace/FIFO_Recv_Msg.h: + * ace/FIFO_Send.h: + * ace/FIFO_Send.i: + * ace/FIFO_Send_Msg.h: + * ace/FILE.cpp: + * ace/FILE_Addr.h: + * ace/FILE_IO.h: + * ace/FILE_IO.i: + * ace/Flag_Manip.h: + * ace/Flag_Manip.i: + * ace/Free_List.h: + * ace/Functor.h: + * ace/Functor.i: + * ace/Get_Opt.cpp: + * ace/Handle_Ops.cpp: + * ace/Handle_Ops.h: + * ace/Handle_Set.h: + * ace/Lib_Find.h: + * ace/Malloc_Allocator.h: + * ace/Malloc_Allocator.i: + * ace/Malloc_Base.h: + * ace/Message_Block_T.cpp: + * ace/OS.h: + * ace/Parse_Node.cpp: + * ace/Process.h: + * ace/Read_Buffer.h: + * ace/Service_Object.h: + * ace/Sock_Connect.h: + * ace/Thread_Control.h: + * ace/Thread_Exit.h: + * ace/Typed_SV_Message.h: + * ace/Unbounded_Queue.h: + Removed include of OS.h and/or ACE.h from headers and adjusted + includes in headers and other files by including appropriate + headers in order to reduce dependencies as part of the + subsetting effort. + + * ace/OS.h: + * ace/Asynch_IO.cpp: + * ace/Asynch_IO.h: + Changed u_long to unsigned long to help remove dependencies. + Moved the typedef for TRANSMIT_FILE_BUFFERS here from OS.h. + + * ace/Functor.h: + * ace/Functor.i: + Changed u_long to unsigned long to help remove dependencies. + + * ace/OS.h: + * ace/Global_Macros.h: + Moved definitions for many macros including + LPSECURITY_ATTRIBUTES and GENERIC_READ, etc... here from OS.h. + Moved the ACE_ALLOCATOR_* macros here from OS.h. + + * ace/Makefile.ace: + Added Date_Time so it will get build if + ACE_LACKS_INLINE_FUNCTIONS is defined. + + * ace/os_include/os_pthread.h: + Added include of ace/OS_Export.h if ACE_HAS_POSIX_SEM to pick up + ACE_Export. + + * ace/OS.h: + * ace/os_include/os_signal.h: + Moved ACE_SIGRTMIN, etc., defines here from OS.h. + + * ace/OS.h: + * ace/os_include/os_stdio.h: + Moved ACE_OVERLAPPED typedef here from OS.h. + + * examples/IPC_SAP/FIFO_SAP/FIFO-Msg-client.cpp: + * websvcs/lib/URL_Addr.i: + Added include of OS.h. + + * tests/CDR_File_Test.cpp: + Added include of ACE.h. + +Sat Jun 21 13:47:28 UTC 2003 Don Hinton + + * ace/OS.h: + Fixed typo. + +Sat Jun 21 12:05:42 UTC 2003 Johnny WIllemsen + + * ace/config-win32-mingw.h: + Added some more lacks defines that are needed + +Fri Jun 20 17:57:10 2003 Gan Deng + + * bin/performance_stats.sh + + Added the latency tests for sequences of various data types. + +Fri Jun 20 13:32:21 2003 Ossama Othman + + * include/makeinclude/platform_linux.GNU (PLATFORM_SSL_CPPFLAGS): + + Some Linux OpenSSL installations compile in Kerberos support. + Add the Kerberos include path to preprocessor include path. + Fixes build problems on Red Hat 9 installations. Note that this + is an interim fix. + +Fri Jun 20 10:07:39 2003 Chad Elliott + + * bin/MakeProjectCreator/config/qt_moc.mpb: + + Switch this to be a project instead of a feature. It doesn't hurt + to inherit from it if you don't use the MOC_Files component. + + * bin/MakeProjectCreator/modules/Parser.pm: + + Added + and - to the escape_regex_special() method. + +Fri Jun 20 09:52:44 2003 Chad Elliott + + * ace/ace.mpc: + + Added inheritance from qt_moc and qt_reactor. These will only be + processed if the 'qt' feature is enabled. + + * ace/qt_reactor.mpb: + + Added QtReactor_moc.cpp to the list of files. + + * bin/MakeProjectCreator/config/acedefaults.mpb: + + Added inheritance from the qt base project. + + * bin/MakeProjectCreator/config/qt.mpb: + + Contains the basic feature definition for qt libs and apps. + + * bin/MakeProjectCreator/config/qt_moc.mpb: + + Contains the custom definition for MOC files. + + * bin/MakeProjectCreator/modules/ArrayHandle.pm: + + Removed this file. It isn't necessary anymore. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Changed the way feature files are read. This new way is better + and less hacky. + + * bin/pch_cmd.pl: + + Don't modify the file if no precompiled header is found. + +Fri Jun 20 14:28:12 UTC 2003 Johnny WIllemsen + + * ace/config-win32-mingw.h: + Updated this file because of the os splitting. + +Fri Jun 20 09:08:05 2003 Chad Elliott + + * bin/pch_cmd.pl: + + Fixed the usage to display the correct options. + +Fri Jun 20 08:54:29 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Added code to process type specific assignments that may be + defined within a feature. + +Fri Jun 20 08:10:11 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + + Added documentation about the new feature project type. + + * bin/MakeProjectCreator/config/global.features: + + Defaulted the qt feature to disabled. + + * bin/MakeProjectCreator/modules/ArrayHandle.pm: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Parser.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + The majority of the code for handling feature project went in + here. One main thing that was changed is that instead of using + the <$fh> paradigm to read files, the following is used + $_ = $fh->getline(). This is compatible with the new ArrayHandle + module that I added. + + * bin/MakeProjectCreator/modules/Options.pm: + + Added a missing space in the completion command. + + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Changed the code to match some new methods added in Creator and + ProjectCreator. + +Thu Jun 19 13:03:49 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Fixed a bug where the BUILD target wouldn't be updated when the + project had component requirements. + +Thu Jun 19 12:14:31 2003 Gan Deng + + * bin/tao_other_tests.lst + + Added the latency tests for sequences of various data types. + +Thu Jun 19 11:36:14 2003 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Updated the GNUACE template to issue information as to why a + particular project wasn't built based on the comps, requires and + avoids values. + +Thu Jun 19 12:18:22 UTC 2003 Don Hinton + + * ace/OS.h: + * ace/config-vxworks5.x.h: + * ace/os_include/os_dirent.h: + Fixed typos in the VXWORKS ifdef'd sections. + + * ace/OS.h: + * ace/os_include/os_stdio.h: + Moved include of remLib.h to os_stdio.h, and uncommented + sysLib.h since it is needed for sysClkRateGet(). Thanks to Rod + Andzik for help tracking this down. + + * ace/os_include/os_netdb.h: + Removed the VXWORKS tests for hostent and servent. + + * ace/config-aix-4x.h: + Added ACE_LACKS_STDINT_H. + + * ace/config-hpux-11.00.h: + Added ACE_LACKS_STDINT_H and ACE_LACKS_SYS_SELECT_H. + +Thu Jun 19 07:50:04 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug with multiple 'specific' scopes in a single project. + +Thu Jun 19 07:13:16 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + + Documented the existing 'specific' keyword. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Added the ability to specify multiple project types with the + 'specific' scope. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Removed ACESHLIB from the lit_libs assignment. + + * bin/MakeProjectCreator/templates/makedll.mpt: + + Added the ssl_libs definition. + +Thu Jun 19 12:04:28 UTC 2003 Don Hinton + + * ace/Default_Constants.h: + Added guards around ACE_LD_LIBRARY_PATH and + ACE_LD_SEARCH_PATH_SEPARATOR_STR. Thanks to John Michael + Zorko for reporting the problem. + +Thu Jun 19 07:01:57 2003 Balachandran Natarajan + + * ace/config-lynxos.h: Since LynxOS lacks sys/select.h and + dlfcn.h header files, config file needs ACE_LACKS_DLFCN_H + and ACE_LACKS_SYS_SELECT_H to be defined. Thanks to Olli Savia + for the patch. + +Thu Jun 19 06:35:26 2003 John Michael Zorko + + * ace/config-macosx.h: Patches to get ACE building on OSX10.2 + again. + +Thu Jun 19 00:27:38 2003 Stephen Torri + + * ace/Timeprobe.h: + * ace/Timeprobe.cpp: + * ace/Timeprobe_T.cpp: + * ace/Timeprobe_T.h: + + Advanced new timeprobe. New features are a + ring buffer for elements kept in data structure. + This eliminates the ACE_ASSERT when an element + is attempted to be inserted into a full data + structure. Old data is overwritten until the + cache is read and cleared. + + Timeprobes now include a second argument to + allow for an ACE_ALLOCATOR. This allocator allows + for the data structure that will contain the + ACE_Timeprobes to be done in the constructor. A + new function called 'increase_size' allows for + the data structure to increase the number of + measurements it can take. It does so by creating a + new structure with the new size and copying the + elements from the old structure. + + * ace/Makefile.ace: + * ace/Metrics_Cache.cpp: + * ace/Metrics_Cache.h: + * ace/Metrics_Cache.i: + * ace/Metrics_Cache_T.cpp: + * ace/Metrics_Cache_T.h: + * ace/Metrics_Cache_T.i: + + Added new Metrics Cache. + + * ACE/ace/OS.h: + + Added two new macros called ACE_NEW_MALLOC_ARRAY_RETURN + and ACE_NEW_MALLOC_ARRAY. ACE_NEW_MALLOC_ARRAY_RETURN + returns an array of class pointers with their space + preallocated and each entry initialized. If there is + an error the value contained in RET_VAL is returned. + ACE_NEW_MALLOC_ARRAY is the same but there is no + return of a value if there is an error. + +Wed Jun 18 21:27:44 2003 Nanbor Wang + + * docs/exceptions.html: Added documentation for the + ACE_ENV_BKWD_COMPAT macro. + +Wed Jun 18 17:28:25 2003 Balachandran Natarajan + + * include/makeinclude/platform_linux.GNU (CXX): Added some default + options specified in the /usr/sys/features.h. + + Thanks to Keith Snively and J. Russell + Noseworthy for + providing these patches. + +Wed Jun 18 17:20:28 2003 Balachandran Natarajan + + * ace/Log_Record.cpp: + * ace/Log_Record.h (print): Changed the 3rd argument to be of type + ACE_OSTREAM_TYPE instead of ostream. + + * ace/ace/config-sunos5.5.h: Added ACE_HAS_TEMPLATE_TYPEDEFS and + removed ACE_TEMPLATES_REQUIRES_SOURCE. + + Thanks to Keith Snively and J. Russell + Noseworthy for + providing these patches. + +Wed Jun 18 15:59:18 UTC 2003 Don Hinton + + * ace/OS.h: + Added includes of os_fcntl.h, os_netdb.h, os_semaphore.h, + os_signal.h, os_stdio.h, os_stdlib.h, os_stropts.h, os_unistd.h, + arpa/os_inet.h, sys/select.h, and sys/os_socket.h to the VxWorks + section. All the includes in OS.h will be reorganized once the + builds stabilize. + +Wed Jun 18 10:54:18 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Allow scoped assignments to be applied to directories as well as + listed mpc files. + +Wed Jun 18 15:19:17 UTC 2003 Don Hinton + + * ace/OS.h: + * ace/os_include/os_fcntl.h: + * ace/os_include/os_netdb.h: + * ace/os_include/os_semaphore.h: + * ace/os_include/os_signal.h: + * ace/os_include/os_stdio.h: + * ace/os_include/os_stdlib.h: + * ace/os_include/os_stropts.h: + * ace/os_include/os_unistd.h: + * ace/os_include/arpa/os_inet.h: + * ace/os_include/sys/select.h: + * ace/os_include/sys/os_socket.h: + Moved the following VxWorks includes from OS.h as noted: + semLib.h to os_semaphore.h; ioLib.h to os_fcntl.h, os_stdio.h, + os_stropts.h, os_unistd.h; hostLib.h to os_netdb.h; sigLib.h to + os_signal.h; envLib.h to os_stdlib.h; inetLib.h to + arpa/os_inet.h; selectLib.h to sys/select.h; sockLib.h to + sys/socket.h. + + * ace/OS.h: + Commented out remLib.h and sysLib.h since they don't appear to + be used by ACE at all. + + * ace/OS.h: + * ace/os_include/sys/os_un.h: + Moved sockaddr_un declaration to sys/os_un.h. + + * ace/OS.h: + * ace/os_include/os_signal.h: + Moved NSIG definition to os_signal.h. + + * ace/config-vxworks5.x.h: + Added following ACE_LACKS_* defines: STDINT_H, INTTYPS_H, + UNISTD_H, SYS_SELECT_H, SYS_TIME_H, SYS_RESOURCE_H, DLFCN_H, + SYS_UIO_H, SYS_IPC_H, SYS_SEM_H, STROPTS_H, and SYS_MSG_H. + +Wed Jun 18 14:00:00 UTC 2003 Don Hinton + + * ace/config-openbsd.h: + Added ACE_LACKS_STDINT_H and ACE_LACKS_STROPTS_H. + +Wed Jun 18 13:47:01 UTC 2003 Johnny Willemsen + + * etc/ace.doxygen: + Also parse the new os_include subdirectory for doxygen docu + +Wed Jun 18 08:11:35 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/NMakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC6ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC7ProjectCreator.pm: + + For custom defined values, convert $(...) to the corresponding + environment variable accessor, if it is required. Custom builds + done in the MS based IDE's are placed in a batch file and then + executed. For this particular case, $(...) doesn't work so we + convert the values on assignment. + +Wed Jun 18 07:38:26 2003 Chad Elliott + + * bin/pch_cmd.pl: + + This script can be used to edit c++ file generated by a given + command to add a #include of a precompile header. + +Wed Jun 18 07:35:22 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug where scoped assignment additions for custom types + would override the values given in the Define_Custom section. + +Wed Jun 18 07:16:33 UTC 2003 Johnny Willemsen + + * ace/config-win32-borland.h: + Added ACE_LACKS_DIRENT_H, ACE_LACKS_SYS_IOCTL_H, ACE_LACKS_STROPTS_H + and ACE_HAS_DIRENT + +Wed Jun 18 06:21:12 UTC 2003 Johnny Willemsen + + * ace/config-win32-borland.h: + Added ACE_LACKS_STDINT_H + +Wed Jun 18 03:22:15 UTC 2003 Don Hinton + + * ace/config-borland-common.h: + * ace/config-win32-borland.h: + Moved ACE_LACKS that were added to config-borland-common.h in + Tue Jun 17 18:34:39 UTC 2003 Don Hinton + to config-win32-borland.h. Moved + ACE_LACKS_STRRECVFD from config-borland-common.h to config-win32-borland.h. + +Tue Jun 17 21:50:13 2003 Douglas C. Schmidt + + * ace/Synch.{h,i,cpp}: Changed the ACE_Recursive_Thread_Mutex's + "recursive_mutex_" data member to "lock_" so that it would work + with the ACE_Guard properly. Thanks to Arturo Montes + for this fix. + +Wed Jun 18 02:14:16 UTC 2003 Don Hinton + + * ace/config-cywin32.h: + Added following ACE_LACKS_* defines: STDINT_H, INTTYPES_H, + SYS_IPC_H, SYS_SEM_H, SYS_MSG_H, and STROPTS_H. Thanks to Jeff + Parsons for pointing this out. + +Tue Jun 17 15:25:20 2003 Nanbor Wang + + * ace/Sock_Connect.cpp (get_windows_version): + * ace/WIN32_Asynch_IO.cpp (readv,writev): Fixed compilation errors + when ACE_HAS_WINSOCK2=0. Thanks to Raymond Hoofman + for submitting the patches. + +Tue Jun 17 18:34:39 UTC 2003 Don Hinton + + * ace/OS.h: + Removed includes for os_dirent.h and os_errno.h since they are + pulled in by OS_Dirent.h and OS_Errno.h. + + * ace/OS_Dirent.h: + * ace/os_include/os_dirent.h: + Moved all the typedefs to os_dirent.h and changed OS_Dirent.h + include it. + + * ace/OS_Errno.h: + * ace/os_include/os_errno.h: + Moved all the typedefs, declarations, and defines to os_errno.h + and included it in OS_Errno.h. + + * ace/OS_Log_Msg_Attributes.h: + Include os_stdio.h instead of and . + + * ace/OS_Memory.[h,inl,cpp]: + Rearranged includes, and included os_* headers. + + * ace/OS_String.[h,inl]: + * ace/config-all.h: + Include os_* headers. + + * ace/config-psos-diab-mips.h: + Added ACE_LACKS_STDLIB_H and ACE_LACKS_STRING_H. + + * ace/os_include/os_strings.h: + Define ACE_LACKS_STRINGS_H if !ACE_HAS_STRINGS. + + * ace/config-borland-common.h: + Added following ACE_LACKS_* defines INTTYPES_H,UCONTEXT_H, + SYS_SELECT_H, SYS_TIME_H, SYS_RESOURCE_H, SYS_WAIT_H, DLFCN_H, + SYS_MMAN_H, SYS_UIO_H, SYS_SOCKET_H, NETINET_IN_H, NETDB_H, + NET_IF_H, SYS_IPC_H, and SYS_SEM_H. + +Tue Jun 17 13:44:09 2003 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Added a new custom definition keyword 'pch_option' to allow the + custom build command to possibly generate code that is compatible + with precompiled headers. + +Tue Jun 17 14:42:25 2003 Gautam H. Thaker + + * performance-tests/SCTP/Options_Manager.cpp: + + Change was necessary for build on RH 9.0 to work properly. + Change consisted of moving the definition of IPPROTO_SCTP + to after all the other includes. + +Tue Jun 17 13:26:58 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + When matching possible output files for custom builds, check for + forward slashes and back slashes. + +Tue Jun 17 17:28:12 UTC 2003 Johnny Willemsen + + * ace/SSL/Makefile: + Set ACE_SSL_BUILD_DLL when building a shared lib + +Tue Jun 17 11:47:52 2003 Douglas C. Schmidt + + * ace/Future.{h,cpp}: Changed all uses of ACE_Thread_Mutex to + ACE_Recursive_Thread_Mutex and also changed the + ACE_Condition_Thread_Mutex to + ACE_Condition_Recursive_Thread_Mutex. This should fix bugs with + deadlock. Thanks to Thomas Groth for + providing these patches. + + * ace/DLL_Manager.cpp (symbol): Added missing newlines in + debug/error messages. Thanks to Rick Ohnemus + for reporting this. + +Tue Jun 17 15:49:32 UTC 2003 Don Hinton + + * ace/os_include/aio.h: + * ace/os_include/assert.h: + * ace/os_include/complex.h: + * ace/os_include/cpio.h: + * ace/os_include/ctype.h: + * ace/os_include/dirent.hd: + * ace/os_include/lfcn.h: + * ace/os_include/errno.h: + * ace/os_include/fcntl.h: + * ace/os_include/fenv.h: + * ace/os_include/float.h: + * ace/os_include/fmtmsg.h: + * ace/os_include/fnmatch.h: + * ace/os_include/ftw.h: + * ace/os_include/glob.h: + * ace/os_include/grp.h: + * ace/os_include/iconv.h: + * ace/os_include/inttypes.h: + * ace/os_include/iso646.h: + * ace/os_include/langinfo.h: + * ace/os_include/libgen.h: + * ace/os_include/limits.h: + * ace/os_include/local.h: + * ace/os_include/math.h: + * ace/os_include/monetary.h: + * ace/os_include/mqueue.h: + * ace/os_include/ndbm.h: + * ace/os_include/netdb.h: + * ace/os_include/nl_types.h: + * ace/os_include/poll.h: + * ace/os_include/pthread.h: + * ace/os_include/pwd.h: + * ace/os_include/regex.h: + * ace/os_include/sched.h: + * ace/os_include/search.h: + * ace/os_include/semaphore.h: + * ace/os_include/setjmp.h: + * ace/os_include/signal.h: + * ace/os_include/spawn.h: + * ace/os_include/stdarg.h: + * ace/os_include/stdbool.h: + * ace/os_include/stddef.h: + * ace/os_include/stdint.h: + * ace/os_include/stdio.h: + * ace/os_include/stdlib.h: + * ace/os_include/string.h: + * ace/os_include/strings.h: + * ace/os_include/stropts.h: + * ace/os_include/syslog.h: + * ace/os_include/tar.h: + * ace/os_include/termios.h: + * ace/os_include/tgmath.h: + * ace/os_include/time.h: + * ace/os_include/trace.h: + * ace/os_include/ucontext.h: + * ace/os_include/ulimit.h: + * ace/os_include/unistd.h: + * ace/os_include/utime.h: + * ace/os_include/utmpx.h: + * ace/os_include/wchar.h: + * ace/os_include/wctype.h: + * ace/os_include/wordexp.h: + * ace/os_include/arpa/inet.h: + * ace/os_include/net/if.h: + * ace/os_include/netinet/in.h: + * ace/os_include/netinet/tcp.h: + * ace/os_include/sys/ipc.h: + * ace/os_include/sys/mman.h: + * ace/os_include/sys/msg.h: + * ace/os_include/sys/resource.h: + * ace/os_include/sys/select.h: + * ace/os_include/sys/sem.h: + * ace/os_include/sys/shm.h: + * ace/os_include/sys/socket.h: + * ace/os_include/sys/stat.h: + * ace/os_include/sys/statvfs.h: + * ace/os_include/sys/timeb.h: + * ace/os_include/sys/time.h: + * ace/os_include/sys/times.h: + * ace/os_include/sys/types.h: + * ace/os_include/sys/uio.h: + * ace/os_include/sys/un.h: + * ace/os_include/sys/utsname.h: + * ace/os_include/sys/wait.h: + Removed these file--they were replaced by the ones below with + the "os_" prefix. + +Tue Jun 17 15:21:36 UTC 2003 Don Hinton + + Merged in the following subsetting changes. + + * ace/*: + * ace/os_include/*: + Added "os_" prefix to all the new include file names, and + modified the includes to match the new names. + + Sat May 17 13:41:38 UTC 2003 Don Hinton + + * ace/config-freebsd.h: + Added ACE_LACKS_STROPTS_H. + + Fri May 16 18:26:11 UTC 2003 Don Hinton + + * ace/os_include/aio.h: + * ace/os_include/iconv.h: + * ace/os_include/pthread.h: + * ace/os_include/signal.h: + * ace/os_include/stddef.h: + * ace/os_include/stdint.h: + * ace/os_include/ucontext.h: + * ace/os_include/sys/stat.h: + Nuked trailing whitespace. + + Fri May 16 18:03:09 UTC 2003 Don Hinton + + * ace/config-all.h: + Cosmetic changes. + + * ace/os_include/*.h: + Added extern "C" begin and end brackets to all files, even those + with not additions, and places all additions inside the extern + "C" {}'s. Rearranged some of the #ifdef's and moved includes to + the top of the files so that only those headers that need to be + are couched in extern "C". + + Thu May 15 17:01:28 UTC 2003 Don Hinton + + * ace/OS.h: + Adding #include of ace/os_include/sys/sem.h and + ace/os_include/errno.h/ + + * ace/config-win32-msvc.h: + Added ACE_LACKS_DIRENT_H, ACE_LACKS_DLFCN_H, + ACE_LACKS_NETDB_H, and ACE_LACKS_NET_IF_H defines. + + * ace/os_include/dlfcn.h: + * ace/os_include/sys/mman.h: + Rearranged ACE_WIN32 #ifdef's. + + * ace/os_include/limits.h: + Fixed a typo. + + Thu May 15 00:12:34 UTC 2003 Don Hinton + + * ace/os_include/limits.h: + * ace/os_include/dirent.h: + * ace/os_include/netdb.h: + Moved MAXNAMLEN define from limits.h to dirent.h, and + MAXHOSTNAMELEN from limits.h to netdb.h to clear up + warnings on Solaris. + + Wed May 14 17:40:28 UTC 2003 Don Hinton + + * ace/OS.h: + Moved more code, as listed below. + + * ace/Default_Constants.h: + Moved ACE_DIRECTORY_SEPERATOR_*, ACE_PLATFORM_*, + ACE_LD_SEARCH_PATH_*, ACE_DLL_*, ACE_DEFAULT_SVC_CONF, + ACE_DEFAULT_[LOCAL|GLOBAL]NAME_*, ACE_DEFAULT_NAMESPACE_*, + ACE_DEFAULT_THREAD_PRIORITY, and ACE_MAX_DEFAULT_PORT + defines here. + + * ace/Global_Macros.h: + Moved the Service Configurator macros here. + + * ace/Handle_Set.h: + * ace/os_include/sys/select.h: + Moved the fd_mask typedef from ace/Handle_Set.h to + ace/os_include/sys/select.h. + + * ace/config-all.h: + Moved ACE_OSTREAM, ACE_DEFAULT_LOG_STREAM, ACE_SYNCH_*, + ACE_WSOCK_VERSION, _REENTRANT, ACE_USING, ACE_TYPENAME_*, + and ACE_TEMPLATE_SPECIALIZATION defines here. + + * ace/config-psosim-g++: + Moved the size_t define here. + + * ace/config-win32-msvc.h: + Moved the pragma warning disable's and ACE_HAS_STRICT here. + + * ace/os_include/*h: + Changed the @file and include guards to include an OS/os + prefix. The file names will be changed when we merge to + the main trunk. + + * ace/os_include/dlfcn.h: + Moved extern "C" {} wrapper around the include of dlfcn.h when + ACE_HAS_DLFCN_H_BROKEN_EXTERN_C defined, ACE_SHLIB_*, + ACE_DEFAULT_SHLIB_MODE, and RTLD_* defines here. + + * ace/os_include/errno.h: + Moved the ACE_PSOS and ACE_WIN32 E* defines here. + + * ace/os_include/fcntl.h: + Moved the ACE_WIN32 O_* and ACE_NONBLOCK defines here. + + * ace/os_include/limits.h: + Added POSIX NAME_MAX and HOST_NAME_MAX. Moved MAXNAMLEN, + MAXNAMELEN, and MAXHOSTNAMELEN here. + + * ace/os_include/netdb.h: + Move queue define when ACE_HAS_STL_QUEUE_CONFLICT is defined here. + Added extern "C" {} around netdb.h include. Moved hostent, + servent structs and ACE_[HOSTENT|SERVENT|PROTOENT]_DATA* + defines here. + + * ace/os_include/pthread.h: + Added extern "C" {} wrapper around pthread.h include. + + * ace/os_include/signal.h: + Moved siginfo_t typedef here. Added extern "C" {} wrapper + around signal.h include and moved sigset_t typedef here. Moved + ACE_SignalHandler and ACE_SignalHandlerV function typedefs + and sigaction struct definition here. + + * ace/os_include/stdint.h: + Moved ACE_PSOS typedefs here. + + * ace/os_include/stdlib.h: + Moved alloca.h include here. + + * ace/os_include/string.h: + Changed extern to extern "C" to the strdup() declaration. + + * ace/os_include/unistd.h: + Changed extern to extern"C" to the getopt() declaration. + + * ace/os_include/arpa/inet.h: + Added extern "C" {} around arpa/inet.h include. + + * ace/os_include/net/if.h: + Move map define when ACE_HAS_STL_MAP_CONFLICT is defined here. + Added extern "C" {} around net/if.h include. Moved + IFF_LOOPBACK define here. Moved struct ifafilt declare when + ACE_HAS_BROKEN_IF_HEADER is defined. + + * ace/os_include/netinet/in.h: + Move queue define when ACE_HAS_STL_QUEUE_CONFLICT is defined here. + Added extern "C" {} around netinet/in.h include. Moved + IPPORT_RESERVED, IPPORT_USERRESERVED, INADDR_LOOPBACK, + INADDR_NONE, INET_ADDRSTRLEN, and INET6_ADDRSTRLEN defines here. + + * ace/os_include/netinet/tcp.h: + Moved TCP_NODELAY define here. + + * ace/os_include/sys/ipc.h: + Moved ACE_INVALID_SEM_KEY and the IPC_* defines here. + + * ace/os_include/sys/mman.h: + Moved extern "C" {} around sys/mman.h when ACE_HAS_BROKEN_MMAP_H + is defined. Moved the PROT* and MAP_* defines here. + + * ace/os_include/sys/sem.h: + Moved union semun definition here. + + * ace/os_include/sys/socket.h: + Moved cygwin32/socket.h include here. Moved __cplusplus + undef/def around sys/socket.h include when + ACE_HAS_AIX_BROKEN_SOCKET_HEADER is defined. Moved AF_*, PF_*, + ACE_ADDRESS_FAMILY_INET and ACE_PROTOCOL_FAMILY_INET defines + here. + + * ace/os_include/sys/stat.h: + Added undef ACE_LACKS_SYS_STAT_H if ACE_PSOS is defined (should + go in the ACE_PSOS headers, eventually). Changed umask(), + mkfifo(), and mkdir() declarations from extern to extern "C". + + * ace/os_include/sys/uio.h: + Moved iovec definition for ACE_WIN32 here. Moved + ACE_[READ|WRITE]_TYPE typedefs here. + + Sun May 11 14:42:23 UTC 2003 Don Hinton + + * ace/OS.h: + Moved more code, as listed below. + + * ace/Basic_Types.h: + Changed #includes to use new headers. Moved MAXPATHLEN + to ace/os_include/limits.h. + + * ace/Malloc.h: + * ace/Default_Constants.h: + Moved ACE_DEFAULT_BASE_ADDR here. + + * ace/os_include/limits.h: + Added conditional include of . Moved howmany + macro and MAXPATHLEN here. Added POSIX PATH_MAX. + + * ace/os_include/time.h: + Moved timespec_t typedef for ACE_PSOS here. + + Sat May 10 21:39:05 UTC 2003 Don Hinton + + * ace/OS.h: + Removed commented and moved more code, as listed below. + + * ace/Handle_Set.h: + Moved ACE_FD_SETSIZE and ACE_DEFAULT_SELECT_REACTOR_SIZE + defines here. + + * ace/Malloc.h: + Moved ACE_DEFAULT_BASE_ADDR define here. Fixed #ifdef + indentation. + + * ace/Timer_Queue_T.cpp: + Moved ACE_TIMER_SKEW define here. + + * ace/os_include/pthread.h: + Moved a large section of pthread defines and typedefs here. + + * ace/os_include/stdio.h: + Moved ACE_PSOS_SNARFS_HEADER_INFO decl's for fdopen(), tempnam(), + and fileno() here. + + * ace/os_include/stdlib.h: + Moved ACE_PSOS_SNARFS_HEADER_INFO decl for putenv() here. + + * ace/os_include/string.h: + Moved ACE_PSOS_SNARFS_HEADER_INFO decl for strdup() here. + + * ace/os_include/unistd.h: + Moved ACE_PSOS_SNARFS_HEADER_INFO decl's for getopt() and + isatty() here. + + * ace/os_include/sys/stat.h: + Moved ACE_PSOS_SNARFS_HEADER_INFO decl's for umask(), mkfifo(), + and mkdir() here. + + * apps/gperf/src/Vectors.h: + Moved ACE_ASCII_SIZE, ACE_EBCDIC_SIZE, and + ACE_STANDARD_CHARACTER_SET_SIZE defines here. + + Sat May 10 18:59;32 UTC 2003 Don Hinton + + * ace/config-cygwin32.h: + Added ACE_LACKS_SYS_IPC_H ACE_LACKS_SYS_MSG_H. + + Sat May 10 16:18:24 UTC 2003 Don Hinton + + * ace/OS.h: + Commented and moved more code, as listed below. + + * ace/SV_Semaphore_Simple.h: + Moved ACE_DEFAULT_SEM_KEY define here. + + * ace/os_include/fcntl.h: + Moved O_NDELAY, ACE_NONBLOCK, and O_* defines for __BORLANDC__ + here. + + * ace/os_include/signal.h: + Moved SIG* and ACE_SIG* defines here. + + * ace/os_include/stddef.h: + Moved size_t for ACE_PSOS_DIAB_MIPS here. + + * ace/os_include/stdio.h: + Moved ACE_MAX_USERID, BUFSIZ, ACE_STRBUF_SIZE, and ACE_STD* + defines here. + + * ace/os_include/string.h: + Moved str[n]imp() for __BORLANDC__ and ACE_SPRINTF_ADAPTER + defines here. + + * ace/os_include/unistd.h: + Moved _SC_AIO_MAX, chdir(), access(), getcwd(), and isatty() + defines for __BORLANDC__ here. + + * ace/os_include/sys/mman.h: + Moved PROT_RDWR define here. + + * ace/os_include/sys/socket.h: + Moved CMSG_DATA define here. + + * ace/os_include/sys/stat.h: + Moved stat(), umask(), and fstat() defines for __BORLANDC__ here. + + * ace/os_include/sys/timeb.h: + Moved ftime() and timeb defines for __BORLANDC__ here. + + * ace/os_include/sys/types.h: + Moved longlong_t, key_t, and pid_t here. + + Sat May 10 19:19:09 UTC 2003 Don Hinton + + * ace/OS.h: + Commented and moved more code, as listed below. + + * ace/os_include/sys/types.h: + Added ACE_LACKS_SYS_MMAN_H define. + + * ace/os_include/sys/types.h: + Moved nlink_t, uid_t, gid_t, and caddr_t typedefs for + ACE_WIN32 here. + + Fri May 9 22:45:24 UTC 2003 Don Hinton + + * ace/OS.h: + Commented and moved more code, as listed below. + + * ace/os_include/signal.h: + Moved ACE_HAS_SIG_MACROS and ACE_HAS_SIG_ATOMIC_T ifdefs, + sigemptyset undefs, and SCO SIGIO def and include of + sys/regset.h here. + + * ace/os_include/stdlib.h: + Move rand_r() declaration here. + + * ace/os_include/string.h: + Moved strtok_r() declaration here. + + * ace/os_include/time.h: + Moved strptime() declaration here. + + * ace/os_include/unistd.h: + Moved ualarm(), pread/pwrite(), getpgid(), and lseek64/llseek() + declarations here. + + * ace/os_include/sys/mman.h: + Moved MAP_* and PROT_* defines for ACE_WIN32 here. + + * ace/os_include/sys/msg.h: + Moved struct msqid_sh declaration for ACE_WIN32 here. + + * ace/os_include/sys/resource.h: + Moved struct rusage declaration for ACE_WIN32 here. + + * ace/os_include/sys/select.h: + Moved NFDBITS define for ACE_WIN32 here. + + * ace/os_include/sys/shm.h: + Moved struct shmaddr declaration for ACE_WIN32 here. + + * ace/os_include/sys/socket.h: + Moved struct msghdr and related declarations here. + + * ace/os_include/sys/uio.h: + Moved [ACE_]IOV_MAX defines here. + + Fri May 9 16:10:50 UTC 2003 Don Hinton + + * ace/OS.h: + Commented and moved more code, as listed below. + + * ace/config-sunos5.5.h: + Added ACE_LACKS_STDINT_H. + + * ace/os_include/stropts.h: + Moved includes of [sys/]timod.h, sys/filio.h, and sys/sockio.h + here. + + * ace/os_include/sys/msg.h: + Moved ACE_HAS_BROKEN_MSG_H and ACE_LACKS_SYSV_MSQ_PROTOS + #ifdef's here. + + Fri May 9 01:20:49 UTC 2003 Don Hinton + + * ace/config-cygwin32.h: + Added ACE_LACKS_SYS_SEM_H macro. + + Fri May 9 00:20:32 UTC 2003 Don Hinton + + * ace/config-win32-msvc.h: + Added following ACE_LACKS macros: INTTYPES_H, STROPTS_H, + SYS_IOCTL_H, SYS_IPC_H, and SYS_SEM_H. + + * ace/SV_Semaphore_Complex.cpp: + * ace/SV_Semaphore_Simple.cpp: + Added #include "ace/os_include/sys/sem.h". + + * ace/SPIPE_Stream.h: + Added #include "ace/os_include/stropts.h". + + Thu May 8 23:24:43 UTC 2003 Don Hinton + + * ace/OS.h: + Commented out a ton of code and moved it into the following + files as noted. The commented out code will be removed once the + other platforms have been tested and we are ready to commit to + the main trunk. + + * ace/Thread.h: + Moved struct cancel_state here. + + * ace/os_include/pthread.h: + Moved pthead_self() declaration here. + + * ace/os_include/semaphore.h: + Moved struct ACE_sema_t and SEM_FAILED here. + + * ace/os_include/stdint.h: + Moved BSD style types, e.g., u_char, here. + + * ace/os_include/stropts.h: + Moved struct strrecvfd declaration here. + + * ace/os_include/time.h: + Moved ACE_HAS_2_PARAM_ASCTIME_R_AND_CTIME_R define and + undef of ctime when ACE_HAS_BROKEN_CTIME here. + + * ace/os_include/sys/msg.h: + Moved struct msgbuf declaration here. + + * ace/os_include/sys/resource.h: + Moved rlimit typedef here. + + * ace/os_include/sys/sem.h: + Moved struct sembuf declaration here. + + * ace/os_include/sys/stat.h: + Moved ACE_LACKS_MODE_MASK, e.g., S_IRWXG, definitions + and struct stat here. + + * ace/os_include/sys/types.h: + Moved clockid_t and dev_t typedefs and conditional include + of here. + + * ace/os_include/sys/uio.h: + Moved struct iovec and related typedefs here. + + Thu May 7 02:04:00 UTC 2003 Don Hinton + + * ace/OS.h: + Replaced Windows specific includes for ws2tcpip.h, direct.h, + process.h, and io.h with the appropriate new headers listed + below. + + * ace/config-cygwin32.h: + Added following ACE_LACKS macros: STDINT_H, INTTYPES_H, + STROPTS_H, and UCONTEXT_H. + + * ace/config-win32-msvc.h: + Added several ACE_LACKS macros: UCONTEXT_H, STDINT_H, + SYS_SELECT_H, TIME_H, SYS_RESOURCE_H, SYS_WAIT_H, + SYS_UIO_H, SYS_SOCKET_H, and NETINET_IN_H. + + * ace/os_include/unistd.h: + Added include for and on Windows, + but not WINCE. + + * ace/os_include/sys/stat.h: + Added include for on Windows, but not WINCE. + + * ace/os_include/netinet/in.h: + Added include for when ACE_HAS_WINSOCK2 is + defined and != 0. + + Wed May 7 00:02:10 UTC 2003 Don Hinton + + * ace/OS.{i,h}: + * ace/os_include/signal.h: + * ace/os_include/stropts.h: + Modified most of the #includes of systems headers to use the + ace/os_include/*.h headers, and started moving some of the + #ifdef'd code to the new headers. + + * ace/config-linux-common.h: + Removed #define ACE_LACKS_STRRECVFD and added #define + ACE_HAS_STRBUF_T. + +Tue Jun 17 06:36:39 2003 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC6ProjectCreator.pm: + + Removed a hack in the VC6 projects which originally appended EXE, + DLL and LIB to the end of the project names. This caused problems + with exe dependencies and wasn't necessary in the first place. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Changed value from undef to '' to avoid using an undefined + reference in case a referenced environment variable doesn't + exist. + +Tue Jun 17 06:42:33 UTC 2003 Johnny Willemsen + + * ace/OS.h: + Only define ACE_DLL_SUFFIX and ACE_DLL_PREFIX when they are not + defined yet. This makes it easy to overrule them in the config + files like below. + + * ace/config-cygwin32.h: + Set ACE_DLL_SUFFIX to .dll for Cygwin. + + * ace/config-win32-mingw.h: + Set ACE_DLL_PREFIX to lib for MinGW. + +Tue Jun 17 05:37:12 UTC 2003 Johnny Willemsen + + * ACE-INSTALL.html: + Added remedy info + + * ace/DLL.cpp: + Removed duplicate space in debug line + + * ace/DLL_Manager.cpp: + Corrected incorrect classname in debug line and when having problems + loading a DLL, report also the name of the dll. + + * ace/Filecache.cpp: + Corrected incorrect comment + + * ace/config-win32-borland.h: + Added define ACE_NEEDS_DL_UNDERSCORE + + * ace/Lib_Find.cpp: + Removed special borland check because for borland we set now + ACE_NEEDS_DL_UNDERSCORE + +Mon Jun 16 22:24:25 2003 Balachandran Natarajan + + * ace/Priority_Reactor.h: Fixed typos in the operator= and copy + constructor. Thanks to Douglas A Stuart + for reporting the problem. + + * THANKS: Added Doug A Stuart to the hall of fame. diff --git a/ACE/ChangeLogs/ChangeLog-04a b/ACE/ChangeLogs/ChangeLog-04a new file mode 100644 index 00000000000..0c4668dfbb2 --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-04a @@ -0,0 +1,10491 @@ +Sat Jul 31 10:22:05 2004 Balachandran Natarajan + + * bin/make_release: + + WashU cvs is running a very old version of CVS which doesn't + support many of the old commands that we used to use. Retiring + those commands and set the working ones. + +Sat Jul 31 07:08:15 2004 Ossama Othman + + * bin/make_release: + + Improved "wrong OS" error message so that it prints what it + believes to be the OS type. + +Sat Jul 31 06:35:24 2004 Ossama Othman + + * NEWS: + + Added missing items for ACE 5.4.2. Thanks to Olli Savia for + pointing out what was missing. + +Sat Jul 31 05:47:31 2004 Balachandran Natarajan + + * Release: + * bin/make_release: + + Changed the pattern for looking at borland makefiles. + +Sat Jul 31 03:15:39 2004 Balachandran Natarajan + + * Release: Include ACE.mwc which is very important. + +Sat Jul 31 02:45:52 2004 Balachandran Natarajan + + * bin/make_release: + + Cosmetic changes to make the generated project and GNUmakefiles + look uniform. + +Fri Jul 30 17:28:44 2004 Ossama Othman + + * NEWS: Added ACE 5.4.2 noteworthy items. + +Fri Jul 30 23:29:17 2004 Balachandran Natarajan + + * bin/make_release: + + The chgrp on deuce.doc freaked out again. This check-in fixes + this problem using a hack. Cutting a beta on deuce.doc should + probably be avoided in future. We should be okay for this beta. + +Fri Jul 30 19:18:08 2004 Balachandran Natarajan + + * bin/make_release: + + Added generation of Borland makefiles along with the + release. Thanks to Johnny for reminding me on this. + +Thu Jul 29 18:19:17 2004 Ossama Othman + + * ace/config-irix6.x-common.h: + * ace/config-irix6.x-g++.h: + * ace/config-irix6.x-kcc.h: + * ace/config-irix6.x-sgic++-nothreads.h: + * ace/config-irix6.x-sgic++.h: + + IRIX configuration updates that address compile- and run-time + errors. Thanks to Kitty and Brian Waltersdorf + for supplying + the necessary changes and patch. + +Wed Jul 28 00:09:08 2004 Ossama Othman + + * examples/IPC_SAP/SSL_SAP/SSL-server-fancy.cpp (handle_events): + + Fixed "comparison of signed and unsigned values" warning + exhibited by CBuilderX. + +Tue Jul 27 07:11:50 2004 J.T. Conklin + + * Reverted change: + Tue Jun 8 16:27:39 2004 Steve Huston + + MPC generated Makefile.am's are not quite ready for the upcoming + beta. + +Tue Jul 27 06:18:12 UTC 2004 Johnny Willemsen + + * ace/Time_Value.h: + Reverted my change of yesterday, the Cygwin people made an error and + have corrected it already, the workaround is not needed for Cygwin + anymore. According to the Cygwin mailing list we could also have + fixed this by adding -Wl,--enable-runtime-pseudo-reloc as linker + options, maybe this works also for MinGW, we should test this + +Mon Jul 26 12:09:19 2004 Steve Huston + + * ace/Proactor.cpp: Add #include "ace/Auto_Ptr.h" to find auto_ptr<> + correctly on Visual Age C++. + +Mon Jul 26 10:34:12 UTC 2004 Johnny Willemsen + + * ace/Time_Value.h: + The latest version of the Cygwin binutils gives linker errors + on the exported static members. The workaround we used for + MinGW is now also needed for Cygwin. + +Sun Jul 25 17:04:16 2004 Ossama Othman + + * tests/Dev_Poll_Reactor_Test.cpp (server_worker): + + Removed extern "C" declaration for this function. Sun C++ 5.5 + whines about it. + +Sun Jul 25 23:18:53 2004 Balachandran Natarajan + + * Release: + * bin/make_release: + + Tag and bundle ACE_MPC along with the release. This seems to + work. Final stages of testing are on. + +Sun Jul 25 22:16:27 2004 Balachandran Natarajan + + * bin/make_release: + + Fixed some simple mistakes which prevented the release form + happening. + +Sun Jul 25 22:13:48 2004 Balachandran Natarajan + + * Release: + + Makefile with release information. + +Fri Jul 23 16:08:21 2004 Douglas C. Schmidt + + * ace/SOCK_Acceptor.cpp (accept): Added a check whether addr == 0 + before calling a method on it. Thanks to Heiko Nardmann + for reporting this. + +Fri Jul 23 10:19:00 2004 Ossama Othman + + * ace/Proactor.cpp (timeout): + + Release the asynch_timer instance from the auto_ptr<> after the + completion has been posted and prior to exiting this method + successfully. Once the completion is posted, the proactor + becomes responsible for managing the asynch_timer memory. + Addresses memory access violations revealed by a + Proactor_Timer_Test failure. Thanks to Johnny for pointing out + the failure. + +Fri Jul 23 11:38:26 2004 Balachandran Natarajan + + * bin/make_release: + + Changes to the make_release. This has not been tested + yet. Checking in to test it in a different repository. + +Fri Jul 23 13:32:12 UTC 2004 Johnny Willemsen + + * tests/SOCK_Connector_Test.cpp: + Fixed incorrect Id tag, the $ around was missing, therefore it + wasn't updated by cvs anymore. + +Thu Jul 22 14:11:24 2004 Ossama Othman + + * examples/Log_Msg/Log_Msg_MFC/MFC_Log.cpp (log): + + Fixed Unicode build errors caused by use of raw "char" string + instead of an "ACE_TCHAR" string. + +Thu Jul 22 16:47:31 2004 Steve Huston + + * examples/APG/Reactor/HAStatus.cpp: + * examples/APG/Reactor/HAStatus-AC.cpp: (from pg 151, 174) In + ClientService::handle_input(), the data was not copied to the + ACE_Message_Block, nor was the write pointer updated. Changed the + allocation to only specify the needed size, and then call + ACE_Message_Block::copy() to copy the needed data in. Thanks to + Jaroslaw Nozderko for + reporting this problem. + +Thu Jul 22 16:12:19 2004 Steve Huston + + * examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.cpp: Removed the call + to CWinAPp::Enable3dControls(). It's deprecated from MFC 5.0 on. + + * examples/NT_Service/ntsvc.cpp: Moved the schedule_timer() call from + the Service constructor to the svc() method. It's not needed for + simply installing and removing the service. Also, when the service + is to shut down, cancel the timer. Fixes a hanging handler crash + on shutdown. Thanks to Johann Kandlbauer for + reporting this problem. + + * THANKS: Added Johann Kandlbauer to the Hall of Fame. + +Wed Jul 21 06:39:12 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added libs that must be build first in the msvc static builds + +Mon Jul 19 21:11:18 2004 Ossama Othman + + * tests/Dev_Poll_Reactor_Test.cpp: + + Added missing "ace/OS_NS_netdb.h" include directive. Addresses + compile-time errors on our Solaris 8 build. + +Mon Jul 19 17:40:15 2004 Irfan Pyarali + + * ace/WFMO_Reactor.cpp (bind_i): + + Adam Rymarczuk noted that crashes occurred while adding handles + to the Reactor when the pending additions exceeded what the + to_be_added set could hold. Even though logically speaking + there was space available because there were several deletions + pending, we are out of room in the to_be_added set because the + Reactor event loop hasn't run in a while (the to_be_added and + to_be_deleted sets are not processed until some thread runs the + event loop). + + The solution to fix the out-of-bounds write is to add the check: + + this->handles_to_be_added_ < this->max_size_ + + to the bind_i() method. + + Thanks to Adam Rymarczuk for + reporting this problem. This closes bug 1878. + +Mon Jul 19 09:25:58 2004 Ossama Othman + + * ace/Proactor.cpp (timeout): + + Fixed leaked ACE_Asynch_Result_Impl instance. Thanks to + Fukasawa Mitsuo for reporting the + problem. [Bug 1879] + +Mon Jul 19 06:38:00 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Instead of hard coding the makefile name, we use a new method on + the WorkspaceCreator to get the current output name. Also, when + recursing into directories, pass the current makefile name as a + parameter to make to ensure that we are sticking with the correct + line of generated makefiles. + + * bin/MakeProjectCreator/config/kokyu_dsrt_scheduler_server.mpb: + * bin/MakeProjectCreator/config/kokyu_dsrt_schedulers.mpb: + + Removed the project name from these base projects. + + * bin/MakeProjectCreator/config/client.mpb: + + Removed this file. It is no longer referenced. + +Sun Jul 18 11:33:58 2004 Douglas C. Schmidt + + * Birthday number 42!! + +Sun Jul 18 09:08:42 2004 Ossama Othman + + * bin/tao_orb_tests.lst: + + Added new PolicyFactory test to the test run list. + +Sun Jul 18 00:26:19 2004 Marek Brudka + + * ace/QtReactor.h + * ace/QtReactor.cpp + + Changed QtReactor constructors to follow the way plain + ACE_Select_Reactor is constructed. + + * tests/QtReactor.cpp + * tests/QtReactor.h + Reduced number of socket handlers for QNX NTO as Qt@NTO is + compiled with small FD_SETSIZE. + + * ace/config-qnx-rtp-62x.h + Decreased FD_SETSIZE to 1000 to better follow QNX NTO limits. + +Sat Jul 17 14:50:12 UTC 2004 Johnny Willemsen + + * examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.{h,cpp,i}: + * examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.{h,cpp,i}: + Fixed compile errors in wchar build + +Sat Jul 17 14:35:12 UTC 2004 Johnny Willemsen + + * examples/Shared_Malloc/test_position_independent_malloc.cpp: + * examples/Shared_Malloc/test_persistence.cpp: + * examples/Shared_Malloc/test_malloc.cpp: + * examples/Shared_Malloc/test_multiple_mallocs.cpp: + Fixed compile errors in wchar build + +Sat Jul 17 12:32:12 UTC 2004 Johnny Willemsen + + * tests/NonBlocking_Conn_Test.cpp: + Replaced www.affa-az.com with www.dre.vanderbilt.edu, the first + seems to be unavailable and this results in the failing of this + test in our daily builds + +Sat Jul 17 01:34:44 2004 Marek Brudka + + * ace/README (ACE_HAS_QT): + Create section on ACE_HAS_QT and ACE_QTREACTOR_CLEAR_PENDING_EVENTS. + + * ace/QtReactor.cpp: + * ace/QtReactor.h: + Introduced ACE_QTREACTOR_CLEAR_PENDING_EVENTS switch to disable + calling ACE_Event_Handler::handle_* for handles without activity, + espacially for ACE_Acceptor::handle_input. see ace/README. + + * test/QtReactor_Test.cpp: + * test/QtReactor_Test.cpp: + Fixed bug related with bad interpretation of + ACE_Acceptor::make_svc_handler. Modified some ACE_DEBUG. + +Fri Jul 16 16:37:31 2004 Douglas C. Schmidt + + * ChangeLog: "Do not look at lazer pointer with remaining eye". + + Thanks to Russ Noseworthy + for this deep thought + ;-) + +Fri Jul 16 07:27:56 2004 J.T. Conklin + + * tests/Makefile.am: + Build UUIDTest. + + * ace/Makefile.am: + Added support for building UUID subset. + +Thu Jul 15 18:57:55 2004 Marek Brudka + + * tests/QtReactor_Test.cpp: Fixed acceptor bug for Windows Qt. + Added few debug messages. + +Thu Jul 15 07:01:15 2004 J.T. Conklin + + * configure.ac: + * m4/config_h.m4: + Removed ACE_HAS_STD_TEMPLATE_METHOD_SPECIALIZATION and added + ACE_HAS_STD_TEMPLATE_CLASS_MEMBER_SPECIALIZATION checks. + + These feature-test macros are used to set ACE_TEMPLATE_METHOD_- + SPECIALIZATION and ACE_TEMPLATE_CLASS_MEMBER_SPECIALIZATION as + appropriate to accommodate the template specialization syntax + required by different compilers. The former is obsolete and + has (mostly) been removed, the latter is used by TAO. + +Wed Jul 14 10:10:24 2004 Ossama Othman + + * ace/Dev_Poll_Reactor.h: + + Removed extraneous character that was inadvertently committed. + +Tue Jul 13 22:51:53 2004 Ossama Othman + + * examples/Shared_Malloc/Options.h (slave_name): + + Corrected return value of this method. "const ACE_TCHAR *", not + "const char *". + + * examples/Shared_Malloc/Options.cpp: + + Fixed mismatched wide string concatenation. + +Tue Jul 13 06:21:23 2004 Ossama Othman + + * examples/APG/Processes/Spawn.cpp (doWork): + + Fixed mismatched format specifier warning. + +Mon Jul 12 20:08:17 2004 Ossama Othman + + * ace/Dev_Poll_Reactor.h: + + The sys_epoll interface was introduced in Linux kernel 2.5.45. + Don't support backported versions since they appear to be + buggy. The obsolete ioctl()-based interface is no longer + supported. Issue a preprocessor error in those cases. + +Mon Jul 12 19:51:21 2004 Ossama Othman + + * examples/APG/Reactor/Client.cpp (ACE_TMAIN): + * examples/APG/Streams/Answerer.cpp (get_outgoing_message): + * examples/APG/Streams/Command.h: + * examples/APG/Streams/CommandStream.cpp (open): + * examples/APG/Streams/CommandTask.cpp (svc): + * examples/APG/Streams/CommandTasks.cpp: + * examples/APG/Streams/MessageInfo.h: + * examples/APG/Streams/RecordingDevice_Text.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.i: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.i: + * examples/Service_Configurator/Misc/main.cpp (ACE_TMAIN): + * examples/Shared_Malloc/Options.h: + * examples/Shared_Malloc/Options.cpp: + * examples/Shared_Malloc/test_persistence.cpp (main): + * examples/Shared_Memory/test_MM.cpp (main): + * examples/Web_Crawler/HTTP_URL.cpp (send_request): + * examples/Web_Crawler/URL_Addr.cpp (set): + * examples/Web_Crawler/URL_Visitor.cpp (execute): + + Addressed compile-time problems in "wchar" builds (generally + incorrect conversion from wchar * to char * and/or vice versa). + +Mon Jul 12 18:29:12 2004 Johnny Willemsen + + * ace/Dev_Poll_Reactor.h: + When ACE_HAS_REACTOR_NOTIFICATION_QUEUE is defined include + ace/Unbounded_Queue. This should fix the errors in the SunCC 5.5 + build + +Mon Jul 12 20:32:25 2004 Balachandran Natarajan + + * ace/Service_Config.cpp: + + Fixed a bug with this change "Tue Jul 6 11:59:53 2004 + Balachandran Natarajan " which + prevented any of the entries in svc.conf files from being read. + +Sun Jul 11 20:26:17 2004 Johnny Willemsen + + * ACE-INSTALL.html + Added MinGW and Cygwin to the list of environments Remedy supports + +Mon Jul 12 01:31:53 2004 Marek Brudka + + * tests/QtReactor_Test.cpp: + * tests/QtReactor_Test.h: + * tests/tests.mpc: + New automatic test for testing QtReactor. This test may also + serve as an example of Qt and ACE integration. + + * ace/QtReactor.cpp: + * ace/QtReactor.h: + Many bugfixes in QtReactor. QtReactor is operational now, though + it should be rewritten to make it more efficient and improve the + clarity of sources. Moreover, valgrind reports small memory leak + in QtReactor_Test, though it's not clear now if the leak results + from QtReactor or test code. + +Sun Jul 11 16:48:12 2004 Johnny Willemsen + + * ace/SOCK_Acceptor.cpp: + Fixed compile error in commit of Douglas below + +Sun Jul 11 10:52:06 2004 Douglas C. Schmidt + + * ace/SOCK_Acceptor.cpp (shared_open): ACE_SOCK_Acceptor::shared_open() + was binding its passive-mode socket to INADDR_ANY whenever a + wildcard is specified for the port. Fixed this so that it uses + whatever the actual address is (which could very well still be + INADDR_ANY). Thanks to Kobi Cohen-Arazi + and Ed Mulholland for this solution. + +Sun Jul 11 06:33:12 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added some projects that we must buld first in a static build before + doing a full build + +Sat Jul 10 10:18:30 2004 Ossama Othman + + * ace/SSL/SSL_SOCK_Stream.h: + * ace/SSL/SSL_Asynch_Stream.h: + + Clarified "context" parameter copying semantics. + +Thu Jul 10 09:38:44 2004 Frank Hunleth + + * ace/config-openbsd.h: + + Added ACE_HAS_UCONTEXT_T for OpenBSD 3.5 and later. Thanks to + J.T. Conklin for sending the patch over + right after I upgraded to 3.5. + +Sat Jul 10 09:37:34 2004 Balachandran Natarajan + + * ACE-INSTALL.html: + + Added information on MPC for users who build from anon cvs + repository. + +Fri Jul 9 23:45:25 2004 Ossama Othman + + * ace/RB_Tree.h (ACE_RB_Tree_Base::allocator): + * ace/RB_Tree.inl: + + This non-template class method is now inlined in the RB_Tree.h + header rather than in RB_Tree.inl since that file may be + included multiple times when inlining is disabled and on + platforms where ACE_TEMPLATES_REQUIRE_SOURCE is defined. In + those platform/configuration combinations, multiple definitions + of this method occured. Placing the definition inline in the + header avoids such errors. + +Fri Jul 9 21:23:13 2004 Douglas C. Schmidt + + * ace/RB_Tree.{h,inl,cpp}: Fixed a number of bugs pertaining to + ACE_RB_Tree's failure to use its allocators correctly. Thanks + to Lothar Werzinger for these fixes. + + * ace/Global_Macros.h: Added macros for ACE_SOCK_DGRAM, + ACE_SOCK_DGRAM_MCAST, and ACE_SOCK_DGRAM_BCAST so they will work + on compilers like MIPSPro v.7.41 that don't support template + typedefs. Thanks to Brian Waltersdorf + for reporting this and + suggesting a fix. + +Thu Jul 8 16:00:29 2004 Steve Huston + + * ace/Timer_Queue_Adapters.h: If ACE_HAS_DEFERRED_TIMER_COMMANDS is + set, #include "ace/Unbounded_Queue.h" and forward declare + ACE_Command_Base, as these are needed later. + + * examples/Bounded_Packet_Relay/Bounded_Packet_Relay.mpc: + * examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.h: Moved + the #define ACE_HAS_DEFERRED_TIMER_COMMANDS macro setting from the + .h file to the .mpc file. Helps poor Visual Age C++ deal with it + correctly when instantiating templates. + + * examples/Bounded_Packet_Relay/BPR_Drivers_T.cpp: Added #include + "ace/OS_NS_string.h" to pick up ACE_OS::memset(). + +Thu Jul 8 11:32:31 2004 Steve Huston + + * ace: Renamed config-aix-5.1.h to config-aix-5.x.h since it covers + both AIX 5.1 and 5.2. + +Thu Jul 8 08:56:53 2004 Balachandran Natarajan + + * ACE.mwc: + + A workspace file ACE alone. + +Thu Jul 8 01:09:32 2004 Douglas C. Schmidt + + * ace: Renamed config-aix5.1.h to config-aix-5.1.h to be consistent + with the other AIX config*.h files. + +Wed Jul 7 21:26:00 2004 Ossama Othman + + * ace/Dev_Poll_Reactor.h: + * ace/Dev_Poll_Reactor.cpp: + + Integrated updates from Jaroslaw Nozderko + that replace old Linux + /dev/epoll based implementation to latest sys_epoll API. + + Added missing header inclusions. + + * tests/Dev_Poll_Reactor_Test.cpp: + + Added missing "ace/OS_NS_unistd.h" include. + +Wed Jul 7 06:31:30 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Reverted my generic target change from Thu Jul 1 14:00:09 2004. + It caused make to invoke every workspace target twice. + +Wed Jul 7 00:03:34 2004 Douglas C. Schmidt + + * ace/OS_NS_errno.inl: Clarified why ACE_OS::last_error() + has a preference for errno. Thanks to Lance Paine + for motivating this. + +Tue Jul 6 16:13:31 2004 Rich Seibel + + * bin/tao_other_tests.lst: + Added the new test for nsadd change. + + * THANKS: added Dave Knox to file. + +Tue Jul 6 15:02:30 2004 Steve Huston + + * tests/run_test.lst: Added Dev_Poll_Reactor_Test. + +Tue Jul 6 11:59:53 2004 Balachandran Natarajan + + * ace/Service_Config.cpp: Reverted the following change. + + + Tue Mar 16 2004 ACE version 5.4 P4 + * ace/Service_Config.cpp: Insert component into repository before + calling init as in the init the component may access the + service repository. + + Dr. Schmidt opines that this change is wrong for the following + reasons: + + (1) If the init () call returns a -1, the component should not + be in the repository in the first place. + + (2) If the component is in the repository, there is a + possibility that another application thread could access the + component in the repository before the component is + initialized. + + + Unless we address the above concerns to satisfaction, this + change cannot be added to the repository. + +Tue Jul 6 12:03:19 2004 Steve Huston + + * netsvcs/lib/Token_Handler.cpp (parse_args): The inherited + ACE_Strategy_Acceptor::service_port_ member was removed prior + to ACE 5.3. Use a local variable instead. Thanks to Johnny + Willemsen for reporting this. + +Mon Jul 5 11:45:34 2004 Ossama Othman + + * ace/UUID.cpp (ACE_Utils): + + Corrected syntax error in ACE_Thread_ID instance. + +Mon Jul 5 10:40:59 2004 Douglas C. Schmidt + + * ace/UUID.cpp (ACE_Utils): Replaced the ACE_Thread_ID constructor + with the new one that calls the ACE_OS::thr_self() methods. + + * ace/OS_NS_Thread.{h,cpp}: Added a new constructor to + ACE_Thread_ID that calls the ACE_OS::thr_self() methods to + initialize an object, rather than having to do this externally + to the constructor. + +Mon Jul 5 14:46:12 UTC 2004 Johnny Willemsen + + * ace/config-cygwin32.h: + Removed ACE_LACKS_SYS_MSG_H and added ACE_HAS_TIMEZONE_GETTIMEOFDAY + to fix compile errors with Cygwin + +Sun Jul 4 20:30:56 2004 Douglas C. Schmidt + + * ace/OS_NS_Thread.cpp: There was some weirdness in the + to_string() method, which should have been using the local data + members for the thread id and thread handle, but instead was + calling the OS functions directly... Thanks to Michael Hollins + for reporting this. + +Sat Jul 3 06:46:06 2004 J.T. Conklin + + * ace/config-openbsd.h: + #define ACE_HAS_UCONTEXT_T. Addresses a compile-time error. + +Fri Jul 2 17:54:22 2004 Steve Huston + + * examples/APG/ThreadPools/Task_ThreadPool.cpp: Break out of + Manager::svc() when getq() fails. Thanks to J.T. Conklin + for reporting this. + +Fri Jul 2 10:42:00 2004 Douglas C. Schmidt + + * ace/Based_Pointer_T.inl (operator->): Replaced the use of + a C-style cast with a reinterpret cast. Thanks to + Rick Ohnemus for this fix, which + closes bugid 1866. + + * ACE-INSTALL.html (HREF): Fixed a typo. Thanks to + Rick Ohnemus for this fix, which + closes bugid 1867. + +Thu Jul 1 17:03:40 2004 Jaiganesh B + + * bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb: + + Updated to include files from the DAnCE directory. + +Thu Jul 1 16:59:03 2004 Jaiganesh B + + * bin/MakeProjectCreator/config/ciao_deployment_stub: + + Updated to include files from the DAnCE directory. + +Thu Jul 1 16:24:47 2004 Jaiganesh B + + * bin/MakeProjectCreator/config/ciao_client_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb: + + Updated the mpb files to point to the + new DAnCE directory. + +Thu Jul 1 14:42:36 2004 Tao Lu + + * etc/ciao_assembly_deployer.doxygen: + * etc/ciao_componentserver.doxygen: + * etc/ciao_daemon.doxygen: + + Fixed some reference error. Thanks to Johnny Willemsen + for reporting these bugs. + +Thu Jul 1 14:00:09 2004 Chad Elliott + + * bin/MakeProjectCreator/config/default.rel: + + Reworded some comments. + + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + + Removed an unused variable. + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Added a generic target that just passes the target on to the + children makefiles. This is the last target in the generated + workspace to avoid problems with explicitly listed targets such as + all, clean, realclean, etc. + + Also removed the deprecated "reverseclean" target. + + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + + Added support for the new MPC 'postcommand' keyword for custom + definitions. See $MPC_ROOT/README for more details. + + * include/makeinclude/wrapper_macros.GNU: + + Changed the default INSLIB location from $(ACE_ROOT)/ace to + $(ACE_ROOT)/lib. + +Thu Jul 1 13:34:51 2004 Steve Huston + + * ace/Basic_Types.h: Change the ACE_UINT64_FORMAT_SPECIFIER and + ACE_INT64_FORMAT_SPECIFIER to depend on the value of + ACE_SIZEOF_LONG. If long is an 8-byte type, then the 'l' + format modifier is correct instead of 'll'. Fixes compile + warnings from g++ in 64-bite mode. Thanks to Andre Kostur + for this fix. + +Thu Jul 1 07:54:11 2004 Douglas C. Schmidt + + * ace/OS_NS_Thread.inl: Changed the thr_min_stack() wrapper method + so it just calls the underlying OS function without using + ACE_ADAPT_RETVAL. Thanks to Mattias Nilsson + for reporting this bug and + providing a fix. + +Thu Jul 1 09:42:12 UTC 2004 Johnny Willemsen + + * html/index.html: + Fixed html tag so that ciao documentation is not on a lower level + +Thu Jul 1 09:10:12 UTC 2004 Johnny Willemsen + + * tests/run_test.pl: + When Valgrind is set, don't add valgrind exe, this is done + in PerlACE already + +Wed Jun 30 10:56:21 2004 Balachandran Natarajan + + * bin/MakeProjectCreator/config/ciao_client_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_component_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_server_dnc.mpb: + + Use the DnC version of the libraries for linking and related + tasks instead of the regular core libraries. + + * bin/MakeProjectCreator/config/global.features: + + removed 'dnc = 0' nonsense. + +Wed Jun 30 08:12:12 UTC 2004 Johnny Willemsen + + * ace/SString.cpp: + To make things easier to maintenance use the new + ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION macro to check + whether we need to explicit instantiate static template members. + This macro is set for the GNU compiler for AIX, HPUX and VxWorks. + +Wed Jun 30 06:12:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_hpux_aCC.GNU: + Removed usage of inst_close, inst_auto and inst_none. These control + how templates are used, but this setup caused a crash in the HP + assigner. I have check this on the aCC mailing list and it seems that + these options are obsolete and shouldn't be used, the compiler is + already capable at handling templates for a long time. I have + done a test run with the HP aCC compiler without these options + and then the crash in the assigner is gone and we don't got any + other errors, so removed these options + +Tue Jun 29 19:30:31 2004 Ossama Othman + + * ace/Dev_Poll_Reactor.h (mask_ops, mask_ops_i): + + Added return value documentation for these methods. + + * ace/Dev_Poll_Reactor.cpp (remove_handler_i): + + Corrected problem where error condition may be incorrectly + detected in some cases. Thanks to Jaroslaw Nozderko + for pointing out the + problem. + +Tue Jun 29 08:36:12 UTC 2004 Johnny Willemsen + + * etc/tao_ifr.doxygen: + Fixed errors in the listing of the tagfiles + + * etc/ciao.doxygen: + * etc/ciao_assembly_deployer.doxygen: + * etc/ciao_componentserver.doxygen: + * etc/ciao_daemon.doxygen: + * etc/ciao_serveractivator.doxygen: + * etc/ciao_xml_helpers.doxygen: + Corrected the location where the documentation of the tagged + files can be found + +Tue Jun 29 06:55:12 UTC 2004 Johnny Willemsen + + * examples/APG/Sockets/Basic_Robust.cpp: + * examples/APG/Sockets/Iovec.cpp: + Compile fixes for unicode builds + +Mon Jun 28 23:42:18 2004 Ossama Othman + + * ace/config-lynxos.h (ACE_HAS_NONCONST_MSGSND): + + LynxOS 4's msgsnd() function accepts a non-const "void *" buffer + argument. Addresses a compile-time error. + +Tue Jun 29 06:08:12 UTC 2004 Johnny Willemsen + + * examples/APG/Naming/Nodelocal.cpp: + * examples/APG/Naming/Temperature_Grapher_Options.h: + * examples/APG/Naming/Temperature_Monitor_Options.h: + Fixed compile errors in unicode build. + +Mon Jun 28 16:39:25 2004 J.T. Conklin + + * ace/OS.h: + Removed preprocessor conditional with identical contents + for both cases. + +Mon Jun 28 16:34:29 2004 Steve Huston + + * configure.ac: If wcstok() is detected, added a check for whether it + has 2 or 3 parameters; set ACE_HAS_3_PARAM_WCSTOK if it's 3. + + * m4/subsets.m4: Added the Filecache, Metrics, and UUID components + to the selectable subsets of ACE. + + * m4/config_h.m4: Added a template for ACE_LACKS_ACE_UUID and + ACE_HAS_3_PARAM_WCSTOK. + + Note that I also removed the subset-building support from the MPC + template for automake files. So, these subset-selecting options are + still here as a placeholder for now, but will likely be removed in + the future. If subset building is required, then more effort will + need to be put into the automake support in MPC. + +Mon Jun 28 17:27:12 UTC 2004 Johnny Willemsen + + * ace/SOCK_Acceptor.h: + * ace/Sock_Connect.h: + * ace/SUN_Proactor.h: + * ace/Token.h: + * ace/Token_Collection.h: + * ace/Token_Manager.h: + Doxygen improvements + +Mon Jun 28 16:42:12 UTC 2004 Johnny Willemsen + + * etc/ciao.doxygen: + * etc/ciao_assembly_deployer.doxygen: + * etc/ciao_componentserver.doxygen: + * etc/ciao_daemon.doxygen: + * etc/ciao_serveractivator.doxygen: + * etc/ciao_xml_helpers.doxygen: + Fixed errors in the listing of the tagfiles + +Mon Jun 28 16:31:12 UTC 2004 Johnny Willemsen + + * os-patches/linux-patches.html: + * os-patches/lynxos-patches.html: + Removed these files, they are really old and outdated + +Mon Jun 28 15:55:12 UTC 2004 Johnny Willemsen + + * examples/APG/Processes/Spawn.cpp: + Fixed compile error in unicode build + +Mon Jun 28 15:46:12 UTC 2004 Johnny Willemsen + + * examples/APG/Config/HA_Status.cpp: + Fixed compile error in unicode build + +Mon Jun 28 14:08:12 UTC 2004 Johnny Willemsen + + * examples/OS/Process/imore.cpp: + Fixed compile errors in unicode build + +Mon Jun 28 12:15:12 UTC 2004 Johnny Willemsen + + * ace/Svc_Handler.h: + * ace/Synch_Options.h: + * ace/WIN32_Proactor.h: + Doxygen improvements + +Mon Jun 28 08:31:12 UTC 2004 Johnny Willemsen + + * TODO: + Zapped this file from the repo, it is really outdated. + +Mon Jun 28 08:06:12 UTC 2004 Johnny Willemsen + + * ASNMP/tests/Integer_Test.cpp: + Fixed warnings in MinGW build + +Mon Jun 28 08:01:12 UTC 2004 Johnny Willemsen + + * bin/PerlACE/Process_Unix.pm: + Removed ACE_RUN_VALGRIND_OPT for valgrind. The easiest way + to do this is to set the environment variable VALGRIND_OPTS and + then valgrind will use these settings. This way the user can + control all the options of valgrind, which options there are, + see the valgrind documentation + +Mon Jun 28 06:58:12 UTC 2004 Johnny Willemsen + + * examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.{h,cpp}: + Changed COMMAND to MYCOMMAND to fix compile errors wit HPUX 11i and + GCC, COMMAND seems to be a define there. + + * bin/footprint_stats.sh: + Fixed path of ValueType library + +Sun Jun 27 21:42:47 2004 Ossama Othman + + * examples/Misc/test_XtReactor1.cpp: + * examples/Misc/test_XtReactor2.cpp: + + Fixed compile-time errors due to missing headers. + + Fixed compile-time warning about deprecated conversion from a + string constant to char *. + + * tests/TkReactor_Test.cpp: + + Fixed compile-time errors due to missing headers. + +Sun Jun 27 10:22:03 2004 Douglas C. Schmidt + + * ace/Logging_Strategy.h: Clarified the use of the ACE_Reactor. + Thanks to Randy Secrest for motivating this. + +Sat Jun 26 11:44:05 2004 Ossama Othman + + * tests/XtReactor_Test.cpp: + + Added missing #include "ace/OS_NS_unistd.h". It is needed for + the ACE_OS::sleep() declaration. + +Fri Jun 25 17:40:29 2004 Steve Huston + + * tests/Max_Default_Port_Test.cpp (client): Specify AF_INET when + giving both a port and hostname string. The listener was set up + at IPv4, so make sure this one is as well. Fixes this test's failures + when running on an IPv6-enabled system. + +Fri Jun 25 18:40:12 UTC 2004 Johnny Willemsen + + * tests/run_test.pl: + Removed all options for valgrind. The easiest way to do this is + to set the environment variable VALGRIND_OPTS and then valgrind + will use these settings. This way the user can control all the + options of valgrind, which options there are, see the valgrind + documentation + +Fri Jun 25 11:47:31 UTC 2004 Johnny Willemsen + + * ace/Configuration.h: + * ace/Local_Name_Space_T.h: + * ace/Obstack_T.h: + * ace/POSIX_Asynch_IO.h: + * ace/SOCK_IO.h: + Added @deprecated to the deprecated methods and typedefs so that + doxygen puts them on a deprecated page and marks them also visible + deprecated in the documentation itself + +Fri Jun 25 08:28:12 UTC 2004 Johnny Willemsen + + * ace/Env_Value_T.h: + Doxygen fixes + +Fri Jun 25 08:03:12 UTC 2004 Johnny Willemsen + + * ace/Based_Pointer_Repository.cpp: + * ace/Timeprobe_T.h: + Doxygen fixes + +Fri Jun 25 07:56:12 UTC 2004 Johnny Willemsen + + * ace/Timeprobe.cpp: + Fixed explicit template instantiations + +Thu Jun 24 08:55:49 2004 Ossama Othman + + * ace/config-lite.h (ACE_WIN32CALL_RETURN): + + Reverted usage of static_cast<> back to C style cast. Some + compilers on Windows fail to compile some ACE code when using + the former. + +Thu Jun 24 07:03:27 2004 J.T. Conklin + + * ace/OS_NS_dlfcn.inl: + * ace/OS_NS_signal.inl: + * ace/OS_NS_stdio.inl: + * ace/OS_NS_sys_shm.inl: + * ace/OS_NS_sys_socket.inl: + * ace/OS_NS_unistd.inl: + * ace/config-openvms.h: + * ace/config-tandem-nsk-mips-v2.h: + Removed conditional code enabled by ACE_LACKS_POSIX_PROTOTYPES + and ACE_LACKS_SOME_POSIX_PROTOTYPES, as those macros have been + obsolete for some time. + +Thu Jun 24 06:59:29 2004 J.T. Conklin + + * configure.ac: + * m4/config_h.m4: + Added checks for ACE_LACKS_WCSCAT, ACE_LACKS_WCSCHR, + ACE_LACKS_WCSCMP, ACE_LACKS_WCSCPY, ACE_LACKS_WCSCSPN, + ACE_LACKS_WCSDUP, ACE_LACKS_WCSICMP, ACE_LACKS_WCSLEN, + ACE_LACKS_WCSNCAT, ACE_LACKS_WCSNCMP, ACE_LACKS_WCSNCPY + ACE_LACKS_WCSNICMP, ACE_LACKS_WCSPBRK, ACE_LACKS_WCSRCHR, + ACE_LACKS_WCSSPN, ACE_LACKS_WCSSTR, ACE_LACKS_WCSTOD, + ACE_LACKS_WCSTOK, ACE_LACKS_WCSTOL, and ACE_LACKS_WCSTOUL. + +Wed Jun 23 17:31:29 2004 Steve Huston + + * ace/config-lite.h: For ACE_OSCALL[_RETURN] macros, changed the + static_cast back to a C-style cast. Not enough type information + was known in all cases. Particularly, on HP-UX, the return value + from shl_load() is a pointer to a struct, and the struct internals + aren't known. This caused aC++ to refuse to do the static_cast. + Also see: + Mon Jun 21 13:37:57 2004 Ossama Othman + +Wed Jun 23 11:25:23 2004 J.T. Conklin + + * configure.ac: + Changed to not check for SysV IPC functions unless the + cooresponding header files are present. OS X does not support + SysV IPC, but it's C library contains stubs for all the system + calls (probably left over from the BSD libc). + + * ace/README: + * ace/config-openvms.h: + * ace/os_include/sys/os_shm.h: + Removed ACE_LACKS_SHMID_DS_T. Replaced conditional definition + with an opaque declaration. + + * ace/README: + * ace/config-openvms.h: + * ace/config-win32-common: + * ace/os_include/sys/os_msg.h: + Removed ACE_LACKS_MSQID_DS_T. Replaced conditional definition + with an opaque declaration. + + * configure.ac: + * ace/README: + * ace/config-mvs.h: + * ace/config-qnx-neutrino.h: + * ace/config-qnx-rtp-62x.h: + * ace/config-qnx-rtp-pre62x.h: + * ace/config-tandem-nsk-mips-v2.h: + * ace/config-tandem.h: + * ace/config-win32-common.h: + * ace/os_include/sys/os_msg.h: + * m4/config_h.m4: + Removed ACE_LACKS_MSGBUF_T. Previous changed removed last + instance where msgbuf was used. + + * ace/OS_NS_sys_msg.inl: + Fixed case where C-style cast was being used to cast away const + when it didn't need to. + + * ace/OS_NS_sys_msg.inl: + Removed conditional code enabled by ACE_LACKS_POSIX_PROTOTYPES + and ACE_LACKS_SOME_POSIX_PROTOTYPES, as those macros have been + obsolete for some time. + +Wed Jun 23 11:24:39 2004 Ossama Othman + + * ace/OS_NS_macros.h: + + Missed one static_cast<> reversion in the Win32 case. See the + "Tue Jun 22 12:33:49 2004 Ossama Othman + " ChangeLog entry for details. + +Wed Jun 23 12:18:39 2004 Steve Huston + + * ace/String_Base.{h inl}: Added new method, fast_clear(), which + sets the string length to 0. Doesn't release string-allocated + memory, but if the memory was externally supplied, it is no + longer referenced from the string object. Thanks to + Sergei Kuchin for contributing this + method. + + * tests/SString_Test.cpp: Added smoke test for fast_clear(). + + * THANKS: Added Sergei Kuchin to the Hall of Fame. + +Wed Jun 23 14:51:12 UTC 2004 Johnny Willemsen + + * bin/footprint_stats.sh: + Added strategies library and corrected locations of valuetype + and rtscheduler library + +Wed Jun 23 06:52:12 UTC 2004 Johnny Willemsen + + * ace/config-lite.h: + * ace/README: + Changed ACE_HAS_MEMORY_PROFILER to ACE_INITIALIZE_MEMORY_BEFORE_USE. + The last says better what we do. This define is then set when + running with valgrind or purify. Thanks to Chris Cleeland for + the suggestion + +Tue Jun 22 16:54:35 2004 J.T. Conklin + + * configure.ac: + Changed ACE_HAS_LIMITED_RUSAGE_T and ACE_HAS_BROKEN_SETRLIMIT + checks to include before . + Changed ACE_HAS_BROKEN_WRITEV check to use !ACE_LACKS_UNISTD_H + instead of ACE_HAS_UNISTD_H (which is never set). + +Tue Jun 22 13:54:36 2004 J.T. Conklin + + * ace/config-macosx-panther.h: + * ace/config-macosx.h: + Changed to define only ACE_HAS_TIMEZONE_GETTIMEOFDAY. + ACE_HAS_VOIDPTR_GETTIMEOFDAY had also been defined. + +Tue Jun 22 12:33:49 2004 Ossama Othman + + * ace/OS_NS_macros.h (ACE_SOCKCALL_RETURN): + + Reverted my change that turned the C style cast into a + static_cast<> in the Win32 case. ACE uses Win32 HANDLES (a + void * type), and MSVC++ 6 won't accept a static_cast<> from a + pointer type to an integral type. + +Tue Jun 22 07:27:27 2004 J.T. Conklin + + * configure.ac: + * ace/OS_NS_sys_time.inl: + * ace/README: + * ace/config-cygwin32.h: + * ace/config-hpux-10.x.h: + * ace/config-hpux-11.00.h: + * ace/config-hpux11.h: + * ace/config-linux-common.h: + * ace/config-macosx-panther.h: + * ace/config-macosx.h: + * ace/config-rtems.h: + * ace/config-sco-4.2-nothread.h: + * ace/config-sco-5.0.0-mit-pthread.h: + * ace/config-sunos4-lucid3.2.h: + * ace/config-sunos4-sun3.x.h: + * ace/config-sunos4-sun4.1.4.h: + * ace/config-sunos4-sun4.x.h: + * ace/config-tandem.h: + * ace/config-unixware-7.1.0.h: + * ace/config-unixware-7.1.0.udk.h: + * ace/os_include/sys/os_time.h: + * m4/config_h.m4: + Renamed ACE_HAS_SUNOS4_GETTIMEOFDAY to ACE_HAS_VOIDPTR_GETTIMEOFDAY. + Changed canned SunOS 4 configs to use ACE_HAS_TIMEZONE_GETTIMEOFDAY, + as SunOS wasn't changed to use a void * until SunOS 5/Solaris 2. + +Tue Jun 22 13:57:12 UTC 2004 Johnny Willemsen + + * ace/config-lite.h: + * ace/README: + I am testing with valgrind. This also detects unitialized memory + like purify and in TAO we use ACE_HAS_PURIFY to explicitly + initialize memory to prevent errors from Purify. To prevent that + we check for different tools inside the TAO code, introduced + ACE_HAS_MEMORY_PROFILER which will be used within TAO, this is then + set when ACE_HAS_PURIFY or ACE_HAS_VALGRIND is set. If we need some + more special things for the tools, we can easily set a new define + based on ACE_HAS_PURIFY and ACE_HAS_VALGRIND. + + * ace/Asynch_Acceptor.h: + Doxygen update + +Tue Jun 22 12:49:31 UTC 2004 Johnny Willemsen + + * bin/performance_stats.sh: + Also run the AMH_Single_Threaded performance test + + * html/Stats/detailed_performance.shtml: + Added the AMH_Single_Threaded performance test. Now we can monitor + the performance of AMH also. This is in preparation of some changes + that add the ability to use allocators for the AMH Response Handlers + which should have a positive effect on the performance. With + AMH on the scoreboard we can monitor it directly. + +Tue Jun 22 08:05:31 UTC 2004 Johnny Willemsen + + * bin/PerlACE/Process_Unix.pl: + When using valgrind things go slower, so added code to set the + delay factor, so that timeouts get longer. We start with 5, maybe + that is enough. Also corrected the setting of the timeout for + purify + +Tue Jun 22 07:07:31 UTC 2004 Johnny Willemsen + + * bin/PerlACE/Process_Unix.pl: + Added the option to use valgrind as memory test tool. This can + be enabled by setting the environment variable ACE_RUN_VALGRIND_CMD + to the valgrind version you want to start. If this is set, then + valgrind is used with the default options "-q --leak-check=yes + --trace-children=yes". This can be overruled by setting the + environment variable ACE_RUN_VALGRIND_OPT, if that is set + we use those options, if the default options are not complete, + feel free to add new ones. + +Mon Jun 21 23:19:38 2004 Ossama Othman + + * bin/MakeProjectCreator/config/ftorbutils.mpb: + + This base project requires minimum CORBA support to be disabled. + Projects that depend on these base projects must be aware of + this. Added an "avoids += minimum_corba" entry. + +Mon Jun 21 22:31:45 2004 J.T. Conklin + + * ace/config-freebsd.h: + * ace/config-netbsd.h: + * ace/config-openbsd.h: + Changed to define ACE_HAS_TIMEZONE_GETTIMEOFDAY instead of + ACE_HAS_SUNOS4_GETTIMEOFDAY. + +Mon Jun 21 13:49:22 2004 Ossama Othman + + * ace/OS_NS_macros.h: + + Use a static_cast<> instead of a C style cast. ANSI C++ casts + are the preferred method of casting in ACE. + +Mon Jun 21 13:37:57 2004 Ossama Othman + + * ace/config-lite.h: + + Removed versions of ACE_OSCALL and ACE_OSCALL_RETURN macros that + restarted the given operation when ACE_HAS_SIGNAL_SAFE_OS_CALLS + was defined. That capability was never enabled by any of our + supported platforms. In fact, some parts of ACE would not + function properly when that ability was enabled. Furthermore, + they assumed that ability to restart system calls was determined + statically. That assumption does not hold for modern platforms, + where that ability is determined dynamically at run-time. + Thanks to J.T. Conklin for pointing out the problems with + defining ACE_HAS_SIGNAL_SAFE_OS_CALLS. + + These changes also fix a problem with self-assignment of the + variable used to store the return value of an operation wrapped + within an ACE_ADAPT_RETVAL macro (e.g. ACE_OSCALL_RETURN + (ACE_ADAPT_RETVAL (..., ace_result_),...). Thanks to Andrew + G. Harvey for poiniting out the + self-assignment. + + * ace/OS_NS_Thread.cpp: + * ace/OS_NS_Thread.inl: + * ace/OS_NS_signal.inl: + * ace/OS_NS_unistd.inl: + + Updated ACE_OSCALL_RETURN(ACE_ADAPT_RETVAL()) macro calls to use + a locally declared result variable instead of the one that + existed in the ACE_OSCALL_RETURN macro. The latter no longer + exists. + + * ace/README: + + Removed documentation for ACE_HAS_SIGNAL_SAFE_OS_CALLS macro. + It is no longer used. + +Mon Jun 21 13:13:09 2004 J.T. Conklin + + * configure.ac: + * m4/config_h.m4: + Removed ACE_HAS_SIGNAL_SAFE_OS_CALLS test. The macro has + been deprecated. + +Mon Jun 21 13:21:38 2004 Steve Huston + + * ace/String_Base.cpp (resize): Don't free() the existing buffer if + release_ is 0. Caller controls the memory area and freeing it may + be a very bad thing to do. The larger allocated area causes the + release_ flag to be set to 1. Thanks to Kelly Hickel + for reporting this. + +Mon Jun 21 12:45:20 2004 Steve Huston + + * ace/SSL/SSL_SOCK_Connector.cpp: Added #include "ace/OS_NS_errno.h" + so Visual Age C++ can see ACE_OS::set_errno_to_last_error(). + +Mon Jun 21 09:17:56 2004 Douglas C. Schmidt + + * ace/OS_NS_Thread.cpp (thr_create): Only try to close down the + tmp_handle if it's not NULL. Thanks to chdommreis@t-online.de + for reporting this and providing a fix. This fixes bugid 1859. + +Mon Jun 21 11:56:31 UTC 2004 Johnny Willemsen + + * tests/run_test.pl: + Enabled leak check and tracing of child processes for Valgrind. + +Mon Jun 21 10:19:31 UTC 2004 Johnny Willemsen + + * tests/run_test.pl: + Added new config Valgrind to be able to run the tests under + Valgrind. + +Sun Jun 20 22:09:58 2004 Ossama Othman + + * m4/ace.m4 (ACE_CONFIGURATION_OPTIONS): + * tests/Makefile.am: + + Added support for conditionally building IPv6 tests. + + * tests/Dirent_Test.cpp (TEST_ENTRY): + + Changed filename detected in test to one that always exists in + configure-based VPATH builds (run_test.lst). Addresses a + problem where the test would fail since the file in question + only existed in the source directory. Thanks to J.T. Conklin + for reporting this problem. + +Sun Jun 20 23:35:05 UTC 2004 Don Hinton + + * doc/ACE-subsetting.html: + Updated to reflect the current subsetting work we've been doing + over the last year or so. This is a first cut, and will be + revised before the release. + +Sun Jun 20 13:03:19 2004 Ossama Othman + + * bin/MakeProjectCreator/config/loadbalancing.mpb: + + TAO's load balancing service requries AMI support, not just the + messaging library. Added missing "requires += ami". + +Sun Jun 20 12:33:11 2004 Ossama Othman + + * bin/MakeProjectCreator/config/ftrteventchannel.mpb: + + The FTRT_EventChannel requires CORBA messaging support. Added + missing "requires += corba_messaging" to this base project. + +Sun Jun 20 12:17:08 2004 Ossama Othman + + * bin/MakeProjectCreator/config/event.mpb: + * bin/MakeProjectCreator/config/ftrtevent.mpb: + + These base projects require minimum CORBA support to be + disabled. Projects that depend on these base projects must be + aware of this. Added an "avoids += minimum_corba" entry. + +Sun Jun 20 18:27:12 UTC 2004 Johnny Willemsen + + * examples/APG/ThreadManagement/Priorities.cpp: + Replaced include of ace/OS.h with ace/OS_unistd.h and fixed typo + in macro + +Sun Jun 20 17:59:12 UTC 2004 Johnny Willemsen + + * ace/TLI_Acceptor.cpp: + Fixed compile warning in Tru64 build + +Sun Jun 20 09:39:58 2004 J.T. Conklin + + * ace/OS_NS_time.h: + Changed to call gettimeofday() for timezone information on + OpenBSD systems again, it turns out it does not export the + global timezone variable. + +Sun Jun 20 14:39:12 UTC 2004 Johnny Willemsen + + * ace/FILE.{h,cpp}: + Removed deprecated position() set method, use seek() + Removed deprecated position() get method, use tell() + + * ace/Timer_Queue_Adapters.{h,inl}: + Removed the deprecated timer_queue() method that returns a + reference + + * examples/Timer_Queue/Thread_Timer_Queue_Test.cpp: + * examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.cpp: + Don't use the deprecated timer_queue() that returns a + reference + + * examples/APG/Signals/SigInfo.cpp: + Use ACE_OS::strerror instead of strerror directly. + + * examples/IPC_SAP/FILE_SAP/client.cpp: + Don't use the ACE_FILE deprecated methods + +Sun Jun 20 00:25:17 2004 J.T. Conklin + + * ace/OS_NS_time.inl: + Instructions in powerpc inline assembly code introduced in: + Fri Jun 18 12:42:52 2004 J.T. Conklin + need to be separated by newlines, not semicolons, which may be + interpreted as comment characters. + +Sat Jun 19 07:11:48 2004 J.T. Conklin + + * configure.ac: + * m4/config_h.m4: + * ace/README: + * ace/config-chorus.h: + * ace/config-cygwin32.h: + * ace/config-integritySCA.h: + * ace/config-macosx-panther.h: + * ace/config-macosx.h: + * ace/config-psos-diab-mips.h: + * ace/config-psos-diab-ppc.h: + * ace/config-psos-diab.h: + * ace/config-psos-tm.h: + * ace/config-psosim-g++.h: + * ace/config-qnx-neutrino.h: + * ace/config-qnx-rtp-62x.h: + * ace/config-qnx-rtp-pre62x.h: + * ace/config-rtems.h: + * ace/config-tandem.h: + * ace/config-vxworks5.x.h: + Changed ACE_LACKS_SYSV_MSG_H to ACE_LACKS_SYS_MSG_H. Both + were used in various places throughout ACE. + +Sat Jun 19 11:23:28 2004 Balachandran Natarajan + + * docs/minimumTAO.html: + + This document doesn't belong in ACE. Moving it to TAO/docs. + +Sat Jun 19 13:38:12 UTC 2004 Johnny Willemsen + + * examples/APG/Signals/SigInfo.cpp: + Use ACE_DEBUG to output a message that fork is needed, and + don't include ace/streams.h, it is not needed + +Sat Jun 19 13:29:12 UTC 2004 Johnny Willemsen + + * ace/High_Res_Timer.h: + Improved doxygen tags + +Sat Jun 19 12:48:12 UTC 2004 Johnny Willemsen + + * ace/OS_String.h: + Removed commented out code + +Sat Jun 19 12:26:12 UTC 2004 Johnny Willemsen + + * ACE-INSTALL.html: + Fixed small issues + +Sat Jun 19 07:39:12 UTC 2004 Johnny Willemsen + + * ace/QoS/SOCK_Dgram_Mcast_QoS.{h,cpp,i}: + Changed checks for ACE_LACKS_INLINE_FUNCTIONS with __ACE_INLINE__ in + the h/cpp files. In the .i files changed ASYS_INLINE with ACE_INLINE. + +Sat Jun 19 07:31:12 UTC 2004 Johnny Willemsen + + * ace/SSL/SSL_SOCK_Acceptor.cpp: + Added missing include for non inlined builds + +Sat Jun 19 07:24:12 UTC 2004 Johnny Willemsen + + * ace/SSL/SSL_SOCK.{h,cpp,i}: + * ace/SSL/SSL_SOCK_Acceptor.{h,cpp,i}: + * ace/SSL/SSL_SOCK_Connector.{h,cpp,i}: + * ace/SSL/SSL_SOCK_Stream.{h,cpp,i}: + Changed checks for ACE_LACKS_INLINE_FUNCTIONS with __ACE_INLINE__ in + the h/cpp files. In the .i files changed ASYS_INLINE with ACE_INLINE. + +Fri Jun 18 18:36:39 2004 Steve Huston + + * docs/index.html: Changed title of the ACE-tutorial.pdf/ps link to + say it's a tutorial, not the ACE programmer's guide, so as not to + confuse this with "The ACE Programmer's Guide" (APG). Thanks to + Johnny Willemsen for pointing out this confusion. + + * docs/ACE-tutorials.html: Removed. All of the pertinent information + is on the index.html page. + +Fri Jun 18 12:42:52 2004 J.T. Conklin + + * ace/OS_NS_time.cpp: + * ace/OS_NS_time.inl: + * ace/OS_NS_time.h: + Changed GNU C version of readPPCTimeBase() so it can be + inlined in ACE_OS::gethrtime() and compiled on Mac OS X + where "r" register prefixes are required in inline asm. + +Fri Jun 18 12:04:35 2004 J.T. Conklin + + * ACE_INSTALL.html: + Added description of --enable-ipv6 and --enable-ipv4-ipv6 + flags. + + * m4/ace.m4: + Added --enable-ipv6 flag which sets ACE_HAS_IPV6. + Added --enable-ipv4-ipv6 flag which sets + ACE_USES_IPV4_IPV6_MIGRATION. + + * m4/config_h.m4: + Added ACE_USES_IPV4_IPV6_MIGRATION template. + +Fri Jun 18 10:23:49 2004 Ossama Othman + + * ACE-INSTALL.html: + + Updated some more URLs, and improved formatting of some text. + +Fri Jun 18 11:49:23 2004 Balachandran Natarajan + + * docs/ACE-inheritance.pdf: + * docs/ACE-inheritance.ps.gz: + + These are simply out dated files. Doxygen produces better + things. Users should refer to doxygen and not this. + +Fri Jun 18 11:47:22 2004 Balachandran Natarajan + + * docs/ACE-SSL.html: + * docs/ACE-bug-process.html: + * docs/ACE-development-process.html: + * docs/ACE-guidelines.html: + * docs/ACE-porting.html: + * docs/msvc_notes.txt: + * docs/usage-bugzilla.html: + + Updated all these documents with new links. Tried removing + outdated information as much as possible. + +Fri Jun 18 10:12:47 2004 Balachandran Natarajan + + * ACE-INSTALL.html: + + Updated ACE-INSTALL with information about a bunch of things + related to MPC. Haven't updated anything about using MPC other + than pointing out the documentation. Need to see what else + should be added. + + * docs/msvc_notes.txt: + + Updated this file about the location of libraries. + + * include/makeinclude/wrapper_macros.GNU: + + Added documentation for the option stlport=1 which can be used + in platform_macros.GNU. + +Fri Jun 18 11:08:12 UTC 2004 Johnny Willemsen + + * ace/config-lite.h: + Removed setting ASYS_INLINE, we don't use it anymore, instead we + use ACE_INLINE + +Fri Jun 18 10:31:12 UTC 2004 Johnny Willemsen + + * ace/config-openvms.h: + Removed all commented out defines + + * ace/IOStream_T.cpp: + Added include of ace/OS_Memory.h + +Thu Jun 17 21:54:37 2004 J.T. Conklin + + * ace/configure.ac: + Changed ACE_LACKS_UNIX_DOMAIN_SOCKETS check to #include + before ; it is required by many + systems. + +Thu Jun 17 22:10:18 2004 Douglas C. Schmidt + + * ace/Timer_Wheel_T.cpp: + + Fixed recalc_earliest() to remember the spoke with the earliest + time not from the current wheel iteration. If the entire wheel + is searched and no earliest time from the current iteration is + found, then the remembered spoke is the earliest_spoke_. Thanks + to Ken Descoteaux for this fix. This fixes + bugid 1853. + +Thu Jun 17 12:48:09 2004 J.T. Conklin + + * ace/configure.ac: + Added small part of change: + Wed Jun 16 16:00:52 2004 J.T. Conklin + that was not committed at the time. + + * ace/OS_NS_time.h: + Changed to avoid use of gettimeofday() for timezone info + on *BSD systems. Changed to always call tzset() for all + systems that get timezone info from global variable. + This fixes bugzilla bug 1845. + +Thu Jun 17 09:19:45 2004 J.T. Conklin + + * configure.ac: + * m4/config_h.m4: + Added checks for pthread_suspend(), pthread_suspend_np(), + pthread_continue(), pthread_continue_np(), and pthread_ + resume_np() which set ACE_HAS_PTHREAD_SUSPEND, etc... + + * ace/OS_NS_Thread.inl: + Changed to call pthread_suspend_np(), pthead_continue_np(), or + pthread_resume_np() as appropriate, depending on the values of + the above macros. + This fixes bugzilla bug 1839. + +Thu Jun 17 11:52:39 2004 Steve Huston + + * ace/SSL/SSL_SOCK_Stream.cpp: + * examples/C++NPv2/AC_CLient_Logging_Daemon.cpp: + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-server-poll.cpp: + * tests/CDR_Array_Test.cpp: + * tests/CDR_File_Test.cpp: + * tests/CDR_Test.cpp: + * tests/Config_Test.cpp: + * tests/MEM_Stream_Test.cpp: + * tests/Pipe_Test.cpp: + * tests/Proactor_Test.cpp: + * tests/Proactor_Test_IPV6.cpp: + * tests/SSL/Thread_Pool_Reactor_SSL_Test.cpp: + Added needed includes to fix AIX Visual Age C++ compile problems. + +Thu Jun 17 09:43:49 2004 Douglas C. Schmidt + + * docs/ACE-porting.html: Updated this file so that it mentions + CIAO and also provides additional information on porting + logistics for people who want to contribute a port back to the + DOC group. Thanks to Thomas Rohner + for motivating this. + +Thu Jun 17 09:20:12 UTC 2004 Johnny Willemsen + + * examples/Bounded_Packet_Relay/BPR_Drivers_T.cpp: + Added missing include to fix compile error in HPUX build + +Wed Jun 16 16:00:52 2004 J.T. Conklin + + * configure.ac: + * m4/config_h.m4: + Added check for getifaddrs() which sets ACE_HAS_GETIFADDRS if it + does not exist. + + * configure.ac: + * m4/config_h.m4: + * ace/OS_NS_Thread.inl: + * ace/README: + Added new config knob ACE_LACKS_RWLOCKATTR_PSHARED for those + systems which support thread but not processes scope rwlocks. + This fixes bugzilla bug 1841. + + * configure.ac: + * m4/config_h.m4: + * ace/README: + Removed check for pthread_suspend() and pthread_continue() in + ACE_HAS_PTHREADS_UNIX98_EXT test as these interfaces were not + part of the Version 2 of the Single Unix Specification + (aka UNIX98). + This fixes bugzilla bug 1840. + +Wed Jun 16 16:51:52 2004 Steve Huston + + * ace/SSL/SSL_Context.h: Changed include of os_include/os_pthread.h to + OS_NS_Thread.h so ACE_mutex_t is picked up correctly on all + platforms. + + * ace/SSL/SSL_SOCK_Acceptor.cpp: + * ace/SSL/SSL_SOCK_Connector.cpp: + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-client.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-client-simple.cpp: + * tests/SOCK_Test_IPv6.cpp: + * tests/SOCK_Send_Recv_Test_IPV6.cpp: + * tests/Proactor_Test_IPV6.cpp: Added missing #include directives + to fix compiler errors. + +Wed Jun 16 15:02:39 2004 Steve Huston + + * ace/Asynch_Acceptor.cpp: + * ace/Get_Opt.cpp: + * ace/MEM_Acceptor.cpp: + * ace/SOCK_SEQPACK_Acceptor.cpp: + * ace/SOCK_SEQPACK_Association.cpp: + * ace/SOCK_SEQPACK_Connector.cpp: + * ACEXML/common/SAXExceptions.cpp: + * ACEXML/common/URL_Addr.cpp: + * examples/C++NPv1/Process_Per_Connection_Logging_Server.cpp: + * examples/C++NPv2/display_logfile.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-memclient.cpp: + * examples/IPC_SAP/TLI_SAP/ftp-client.cpp: + * examples/Logger/Acceptor-server/server_loggerd.cpp: + * examples/Service_Configurator/IPC-tests/client/local_dgram_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_fifo_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_pipe_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_stream_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_stream_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_service_directory_test.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.cpp: + * examples/Synch/proc_sema.cpp: + * netsvcs/lib/Client_Logging_Handler.cpp: + * performance-tests/Misc/basic_perf.cpp: + * performance-tests/TCP/tcp_test.cpp: + * performance-tests/UDP/udp_test.cpp: Added missing #include + directives to fix compile errors on AIX Visual Age C++. + + * ace/Flag_Manip.h: Added #include "ace/os_include/os_fcntl.h" to + make the values for ACE_Flag_Manip available to callers. + + * ace/POSIX_Proactor.cpp: + * ace/POSIX_Asynch_IO.cpp: Added #include "ace/Flag_Manip.h" and + changed ACE::set_flags() to ACE_Flag_Manip::set_flags(). + + * Kokyu/DSRT_Dispatcher_Impl_T.h: Added #includes to pick up needed + declarations for ACE_SYNCH_RECURSIVE_MUTEX. + +Wed Jun 16 12:48:21 2004 Steve Huston + + * ace/OS_NS_unistd.inl (access): Fixed the ACE_HAS_WINCE part of this + to check the opened handle for 0, not ACE_INVALID_HANDLE, since it's + a FILE *, not a handle. With this fix, the WinCE part and the VxWorks + part are the same, so they were combined. + + * tests/OS_Test.cpp: Added access_test() to test ACE_OS::access() + features. + +Wed Jun 16 06:58:33 2004 J.T. Conklin + + * ace/Makefile.am: + Fixed typo. + +Wed Jun 16 12:23:12 UTC 2004 Johnny Willemsen + + * docs/ACE-bug-process.html: + * docs/ACE-development-process.html: + Corrected links for commercial support and always use the generic + page with all commercial support companies + + * docs/ACE-porting.html: + Updated that ACE_OS is now a namespace, not a class + +Wed Jun 16 12:05:12 UTC 2004 Johnny Willemsen + + * docs/ACE-porting.html: + Updated, we now require C++ namespace and ANSI casts. + +Wed Jun 16 10:38:12 UTC 2004 Johnny Willemsen + + * ace/OS_NS_ctype.{h,inl}: + Added ace_isalnum, ace_isalpha, ace_iscntrl, ace_isdigit, + ace_isgraph, ace_islower, ace_ispunct, ace_isupper, ace_isxdigit, + and to_upper. This fixes bugzilla [1762]. + + * ace/config-freebsd.h: + * ace/config-linux-common.h: + * ace/config-qnx-rtp-pre62x.h: + * ace/config-vxworks5.x.h: + Added define ACE_LACKS_TOWUPPER, these files already set + ACE_LACKS_TOWLOWER so I assume that they are the ones + that also lack towlower. + + * ace/Get_Opt.cpp: + Use ACE_OS::isalnum instead of isalnum directly to fix compile + errors in Tru64 build. + +Wed Jun 16 10:00:12 UTC 2004 Johnny Willemsen + + * bin/Service_Config.perl: + Zapped this file, it converts very old ACE code in a little bit + newer code and we don't need to do this anymore + +Wed Jun 16 09:59:12 UTC 2004 Johnny Willemsen + + * bin/rename-ace.pl: + Zapped this file, we don't use it and there is no need to keep it + +Wed Jun 16 09:57:12 UTC 2004 Johnny Willemsen + + * bin/make_pretty.pl: + Zapped this file from the repo, we have now autobuild for this + +Wed Jun 16 09:54:12 UTC 2004 Johnny Willemsen + + * bin/generate_compile_stats.sh: + Let the default yrange be 5 seconds, 10 seconds is too much for ACE, + the graphs are hard to read. + +Wed Jun 16 08:00:12 UTC 2004 Johnny Willemsen + + * ace/*.{h,cpp,i,inl}: + * ace/Makefile.ac: + * ace/ace.mpc: + Replaced all .i files with its .inl version. Cvs can't handle + rename, so the .i file is removed and the same contents is + added as .inl, so if you need history, it can be that you + have to look at the .i file for the complete history. Updated + the .h and .cpp files for the needed includes. + +Tue Jun 15 23:31:51 2004 J.T. Conklin + + * configure.ac: + Changed ACE_HAS_UCONTEXT_T test to include and + (if it exists). + This fixes bugzilla bug 1844. + + * configure.ac: + Set ACE_SIG_MACROS if any of sigemptyset, sigdelset, sigaddset, + sigdelset, or sigismember are macros. + This fixes bugzilla bug 1836. + +Wed Jun 16 06:13:12 UTC 2004 Johnny Willemsen + + * ace/TLI.h: + * ace/TLI_Acceptor.cpp: + * ace/TLI_Connector.cpp: + * ace/TLI_Stream.cpp: + Added missing includes + +Tue Jun 15 22:11:09 2004 Ossama Othman + + * examples/IOStream/client/iostream_client.cpp: + + Added missing "ace/OS_NS_stdlib.h" and "ace/OS_NS_unistd.h" + includes. + +Tue Jun 15 20:27:06 2004 J.T. Conklin + + * ace/os_include/sys/os_select.h: + Added #include of os_unistd.h to bring in select() declaration + on 4.4BSD derived systems. + This fixes bugzilla bug 1842. + + * configure.ac: + * ace/config_h.m4: + Added check for gethostent which sets ACE_LACKS_GETHOSTENT if + it does not exist. + This fixes bugzilla bug 1838. + + * configure.ac: + * ace/config_h.m4: + Changed check for to set ACE_LACKS_STROPTS_H if it + doesn't exist. + This fixes bugzilla bug 1837. + + * ace/Log_Msg.cpp: + Avoid declaring sys_nerr on those targets which provide one in + their system headers to avoid conflicts due to differing const + qualification, etc. + This fixes bugzilla bug 1843. + +Tue Jun 15 12:18:12 UTC 2004 Johnny Willemsen + + * ace/Local_Name_Space_T.cpp: + Added missing include + +Tue Jun 15 08:09:12 UTC 2004 Johnny Willemsen + + * examples/Log_Msg/Log_Msg_MFC/MFC_Log.cpp: + Added missing include + +Mon Jun 14 16:46:35 2004 Carlos O'Ryan + + * include/makeinclude/rules.local.GNU: + * bin/DependencyGenerator/GNUObjectGenerator.pm: + * bin/DependencyGenerator/GNUDependencyWriter.pm: + Generated dependencies that do not depend on the particular + values of VDIR, VSHDIR, OBJEXT and SOEXT at the time of the + dependency generation. Using the values is silly, as they can + easily be expanded when the dependencies are used. This new + style makes dependencies "portable." + + * bin/DependencyGenerator/Preprocessor.pm: + Only consider lines that match '^\s*#', preprocessor directives + follow that pattern. The old code could have added #includes + inside comments (except that most comments were stripped.) + Reduce the depth of those nested ifs() a little bit. + +Mon Jun 14 20:16:12 UTC 2004 Johnny Willemsen + + * ace/TLI_Acceptor.h: + Added missing ; + +Mon Jun 14 19:26:12 UTC 2004 Johnny Willemsen + + * ACE-INSTALL.html: + Updated supported platforms and Borland instructions + +Mon Jun 14 13:58:02 2004 Douglas C. Schmidt + + * docs/ACE-guidelines.html: Updated the guidelines to + recommend the use of ".inl" suffices for inline files, rather + than ".i". Thanks to Patrick Bennett + for motivating this change. + +Mon Jun 14 18:37:12 UTC 2004 Johnny Willemsen + + * performance-tests/Misc/preempt.cpp: + * performance-tests/Server_Concurrency/Leader_Follower/leader_follower.cpp: + * performance-tests/Server_Concurrency/Queue_Based_Workers/workers.cpp: + * performance-tests/TCP/tcp_test.cpp: + * performance-tests/UDP/udp_test.cpp: + Added missing include for non-inlined builds. + +Mon Jun 14 18:28:12 UTC 2004 Johnny Willemsen + + * examples/C++NPv1/Process_Per_Connection_Logging_Server.cpp: + * examples/C++NPv1/Reactive_Logging_Server.h: + * examples/C++NPv1/Reactive_Logging_Server_Ex.h: + * examples/Connection/blocking/SPIPE-connector.cpp: + * examples/IPC_SAP/SOCK_SAP/FD-unclient.cpp: + * examples/IPC_SAP/SOCK_SAP/FD-unserver.cpp: + * examples/Mem_Map/IO-tests/test_io.cpp: + * examples/Service_Configurator/IPC-tests/client/local_stream_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_pipe_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_dgram_client_test.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.i: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.i: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.i: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.i: + * examples/Shared_Malloc/test_malloc.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Client.cpp: + * examples/System_V_IPC/SV_Semaphores/Semaphores_1.cpp: + * examples/System_V_IPC/SV_Semaphores/Semaphores_2.cpp: + * examples/Threads/future1.cpp: + * examples/Threads/future2.cpp: + * netsvcs/lib/Client_Logging_Handler.cpp: + * netsvcs/lib/clients/Logger/direct_logging.cpp: + Added missing include for non-inlined builds. + +Mon Jun 14 17:45:12 UTC 2004 Johnny Willemsen + + * examples/APG/ThreadPool/TP_Reactor.cpp: + Added missing include for non-inlined builds. + +Mon Jun 14 16:49:12 UTC 2004 Johnny Willemsen + + * ACEXML/common/Mem_Map_Stream.cpp: + * apps/Gateway/Gateway/Conrete_Connection_Handlers.cpp: + * apps/Gateway/Gateway/Gateway.cpp: + * apps/JAWS/client/Blobby/blobby.cpp: + * apps/drwho/HT_Client.cpp: + * apps/drwho/HT_Server.cpp: + * apps/drwho/PMC_All.cpp: + * apps/drwho/PMC_Flo.cpp: + * apps/drwho/PMC_Ruser.cpp: + * apps/drwho/PMC_Usr.cpp: + * apps/drwho/PMS_All.cpp: + * apps/drwho/PMS_Flo.cpp: + * apps/drwho/PMS_Ruser.cpp: + * apps/drwho/PMS_Usr.cpp: + * apps/drwho/PM_Client.cpp: + * apps/drwho/server.cpp: + Added missing include for non-inlined builds. + +Mon Jun 14 15:11:12 UTC 2004 Johnny Willemsen + + * examples/APG/Shared_Memory_Pool_Growth.cpp: + Added missing include for non-inlined builds. + +Mon Jun 14 15:08:12 UTC 2004 Johnny Willemsen + + * tests/FIFO_Test.cpp: + * tests/MEM_Stream_Test.cpp: + * tests/MT_Reactor_Upcall_Test.cpp: + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + * tests/MT_SOCK_Test.cpp: + * tests/Malloc_Test.cpp: + * tests/Priority_Reactor_Test.cpp: + * tests/Process_Strategy_Test.cpp: + * tests/SOCK_Test.cpp: + * tests/SV_Shared_Memory_Test.cpp: + * tests/Signal_Test.cpp: + * tests/TP_Reactor_Test.cpp: + * tests/Thread_Pool_Reactor_Resume_Test.cpp: + * tests/Thread_Pool_Reactor_Test.cpp: + Added missing include for non-inlined builds. + +Mon Jun 14 14:43:12 UTC 2004 Johnny Willemsen + + * ace/Handle_Gobbler.i: + * tests/Conn_Test.cpp: + Added missing include + +Mon Jun 14 14:36:12 UTC 2004 Johnny Willemsen + + * ace/TTY_IO.cpp: + Added missing include + +Mon Jun 14 09:22:53 2004 Patrick Bennett + + * ace/Dirent_Selector.cpp: + ACE_Dirent_Selector destructor now calls internal close() method. + Previously, the memory allocated by ACE_Dirent_Selector would be + leaked upon clean destruction or exception unwind unless close() + was explicitly called. + +Mon Jun 14 14:08:12 UTC 2004 Johnny Willemsen + + * ace/POSIX_Proactor.cpp: + Added missing include + +Mon Jun 14 13:59:12 UTC 2004 Johnny Willemsen + + * ace/ACE.cpp: + * ace/ACE.h: + * ace/ACE.i: + * ace/Asynch_Acceptor.cpp: + * ace/Condition_Recursive_Thread_Mutex.cpp: + * ace/Condition_Recursive_Thread_Mutex.h: + * ace/Configuration.cpp: + * ace/DEV.cpp: + * ace/DEV.h: + * ace/DEV.i: + * ace/DEV_Connector.cpp: + * ace/DEV_Connector.h: + * ace/DEV_Connector.i: + * ace/DEV_IO.cpp: + * ace/DEV_IO.h: + * ace/DEV_IO.i: + * ace/Date_Time.cpp: + * ace/Date_Time.h: + * ace/Date_Time.i: + * ace/Dirent_Selector.inl: + * ace/Event_Handler.i: + * ace/FIFO.cpp: + * ace/FIFO_Recv.cpp: + * ace/FIFO_Recv.h: + * ace/FIFO_Recv.i: + * ace/FIFO_Recv_Msg.cpp: + * ace/FIFO_Recv_Msg.h: + * ace/FIFO_Recv_Msg.i: + * ace/FIFO_Send.cpp: + * ace/FIFO_Send.h: + * ace/FIFO_Send.i: + * ace/FIFO_Send_Msg.cpp: + * ace/FIFO_Send_Msg.h: + * ace/FIFO_Send_Msg.i: + * ace/FILE.cpp: + * ace/FILE.h: + * ace/FILE.i: + * ace/FILE_Connector.cpp: + * ace/FILE_Connector.h: + * ace/FILE_Connector.i: + * ace/FILE_IO.cpp: + * ace/FILE_IO.h: + * ace/FILE_IO.i: + * ace/Filecache.cpp: + * ace/FlReactor.h: + * ace/Flag_Manip.cpp: + * ace/Flag_Manip.h: + * ace/Flag_Manip.i: + * ace/Framework_Component_T.cpp: + * ace/Framework_Component_T.h: + * ace/Handle_Ops.cpp: + * ace/Handle_Ops.h: + * ace/IO_SAP.cpp: + * ace/IO_SAP.h: + * ace/IO_SAP.i: + * ace/IPC_SAP.cpp: + * ace/IPC_SAP.h: + * ace/IPC_SAP.i: + * ace/Init_ACE.cpp: + * ace/Init_ACE.h: + * ace/LSOCK.cpp: + * ace/LSOCK.h: + * ace/LSOCK.i: + * ace/LSOCK_Acceptor.cpp: + * ace/LSOCK_CODgram.cpp: + * ace/LSOCK_CODgram.h: + * ace/LSOCK_CODgram.i: + * ace/LSOCK_Connector.cpp: + * ace/LSOCK_Connector.h: + * ace/LSOCK_Connector.i: + * ace/LSOCK_Dgram.cpp: + * ace/LSOCK_Dgram.h: + * ace/LSOCK_Dgram.i: + * ace/LSOCK_Stream.cpp: + * ace/LSOCK_Stream.h: + * ace/LSOCK_Stream.i: + * ace/Lib_Find.h: + * ace/Log_Msg.cpp: + * ace/Log_Msg_NT_Event_Log.cpp: + * ace/Log_Msg_UNIX_Syslog.cpp: + * ace/Log_Record.cpp: + * ace/Log_Record.h: + * ace/Log_Record.i: + * ace/Logging_Strategy.cpp: + * ace/MEM_Acceptor.cpp: + * ace/MEM_Acceptor.h: + * ace/MEM_Acceptor.i: + * ace/MEM_Connector.cpp: + * ace/MEM_Connector.h: + * ace/MEM_Connector.i: + * ace/MEM_IO.cpp: + * ace/MEM_IO.h: + * ace/MEM_IO.i: + * ace/MEM_SAP.cpp: + * ace/MEM_SAP.h: + * ace/MEM_SAP.i: + * ace/MEM_Stream.cpp: + * ace/MEM_Stream.h: + * ace/MEM_Stream.i: + * ace/Memory_Pool.cpp: + * ace/Metrics_Cache.cpp: + * ace/Metrics_Cache.h: + * ace/Multihomed_INET_Addr.i: + * ace/Naming_Context.cpp: + * ace/OS_Dirent.cpp: + * ace/OS_Dirent.h: + * ace/OS_Log_Msg_Attributes.inl: + * ace/OS_Thread_Adapter.cpp: + * ace/OS_Thread_Adapter.h: + * ace/Obchunk.i: + * ace/Object_Manager_Base.cpp: + * ace/Object_Manager_Base.h: + * ace/POSIX_Asynch_IO.cpp: + * ace/POSIX_Asynch_IO.h: + * ace/Parse_Node.i: + * ace/Pipe.cpp: + * ace/Pipe.h: + * ace/Pipe.i: + * ace/Process.cpp: + * ace/Process_Manager.cpp: + * ace/Process_Mutex.h: + * ace/Process_Semaphore.cpp: + * ace/RW_Process_Mutex.cpp: + * ace/Reactor_Notification_Strategy.inl: + * ace/Reactor_Timer_Interface.h: + * ace/Registry.cpp: + * ace/SOCK.h: + * ace/SOCK_Acceptor.cpp: + * ace/SOCK_Acceptor.h: + * ace/SOCK_Acceptor.i: + * ace/SOCK_CODgram.cpp: + * ace/SOCK_Connector.cpp: + * ace/SOCK_Connector.h: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/SOCK_Dgram_Bcast.h: + * ace/SOCK_Dgram_Bcast.i: + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_Dgram_Mcast.h: + * ace/SOCK_Dgram_Mcast.i: + * ace/SOCK_IO.cpp: + * ace/SOCK_IO.i: + * ace/SOCK_SEQPACK_Acceptor.cpp: + * ace/SOCK_SEQPACK_Acceptor.h: + * ace/SOCK_SEQPACK_Acceptor.i: + * ace/SOCK_SEQPACK_Association.cpp: + * ace/SOCK_SEQPACK_Association.h: + * ace/SOCK_SEQPACK_Association.i: + * ace/SOCK_SEQPACK_Connector.cpp: + * ace/SOCK_SEQPACK_Connector.h: + * ace/SOCK_SEQPACK_Connector.i: + * ace/SOCK_Stream.cpp: + * ace/SOCK_Stream.h: + * ace/SOCK_Stream.i: + * ace/SPIPE.cpp: + * ace/SPIPE.h: + * ace/SPIPE.i: + * ace/SPIPE_Connector.cpp: + * ace/SPIPE_Connector.h: + * ace/SPIPE_Connector.i: + * ace/SPIPE_Stream.cpp: + * ace/SPIPE_Stream.h: + * ace/SPIPE_Stream.i: + * ace/SV_Message_Queue.cpp: + * ace/SV_Message_Queue.h: + * ace/SV_Message_Queue.i: + * ace/SV_Semaphore_Complex.cpp: + * ace/SV_Semaphore_Complex.h: + * ace/SV_Semaphore_Complex.i: + * ace/SV_Semaphore_Simple.cpp: + * ace/SV_Semaphore_Simple.h: + * ace/SV_Semaphore_Simple.i: + * ace/Service_Config.h: + * ace/Service_Manager.i: + * ace/Shared_Object.i: + * ace/Strategies_T.cpp: + * ace/Strategies_T.h: + * ace/Strategies_T.i: + * ace/Svc_Conf_l.cpp: + * ace/Synch.cpp: + * ace/Synch.h: + * ace/Synch_Options.i: + * ace/Synch_T.cpp: + * ace/Synch_T.h: + * ace/System_Time.cpp: + * ace/Test_and_Set.h: + * ace/Thread_Adapter.i:nl + * ace/Timeprobe.i: + * ace/Token_Request_Reply.h: + * ace/UPIPE_Acceptor.cpp: + * ace/UPIPE_Acceptor.h: + * ace/UPIPE_Acceptor.i: + * ace/UPIPE_Connector.cpp: + * ace/UPIPE_Connector.h: + * ace/UPIPE_Connector.i: + * ace/UPIPE_Stream.i: + * ace/WIN32_Asynch_IO.cpp: + * ace/WIN32_Proactor.cpp: + Changed checks for ACE_LACKS_INLINE_FUNCTIONS with __ACE_INLINE__ in + the h/cpp files. In the .i files changed ASYS_INLINE with ACE_INLINE. + We now just use one method of including inline files. As a side effect + we now have to add some extra includes for non inlined builds because + they don't get the includes of the .i files anymore for free. + + * ace/config-openvms.h: + Removed not needed lines + + * ace/SSL/SSL_Context.cpp: + * ace/Based_Pointer_Repository.cpp: + * ace/Dynamic.cpp: + * ace/UUID.cpp: + To make things easier to maintenance use the new + ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION macro to check + whether we need to explicit instantiate static template members. + This macro is set for the GNU compiler for AIX, HPUX and VxWorks. + + * ace/Dev_Poll_Reactor.cpp: + * ace/Dev_Poll_Reactor.h: + * ace/Reactor.h: + * ace/Reactor.i: + * ace/Reactor_Impl.h: + * ace/Select_Reactor_Base.cpp: + * ace/Select_Reactor_T.cpp: + * ace/Select_Reactor_T.h: + * ace/WFMO_Reactor.cpp: + * ace/WFMO_Reactor.h: + Removed deprecated set_timer_queue method + + * ace/ATM_Acceptor.h: + * ace/Stream.h: + * ace/TLI_Acceptor.h: + No need to include ace/Time_Value.h, just forward declare + ACE_Time_Value. + + * ace/Condition_Recursive_Thread_Mutex.inl: + * ace/Dynamic_Service_Base.i: + * ace/FlReactor.i: + * ace/Framework_Component_T.inl: + * ace/Handle_Ops.i: + * ace/Init_ACE.i: + * ace/OS_Thread_Adapter.inl: + * ace/Metrics_Cache.i: + * ace/Lib_Find.i: + * ace/OS_Dirent.inl: + * ace/Object_Manager_Base.inl: + * ace/POSIX_Asynch_IO.i: + * ace/Synch_T.i: + * ace/Synch.i: + * ace/Test_and_Set.i: + Removed these files, they are empty. If we need to have an inline file + we will add it when needed. + + * ace/Makefile.am: + Removed the files I zapped from the repo + +Mon Jun 14 08:28:24 2004 Douglas C. Schmidt + + * docs/ACE-development-process.html: The link to + + http://ace.cs.wustl.edu/bugs/index.cgi + + should point to + + http://deuce.doc.wustl.edu/bugzilla/index.cgi + + Thanks to Patrick Bennett for + reporting this. + +Mon Jun 14 11:45:12 UTC 2004 Johnny Willemsen + + * examples/Timer_Queue/Reactor_Timer_Queue_Test.cpp + Use ACE_Reactor::timer_queue instead of the deprecated set_timer_queue + + * tests/Config_Test.cpp: + * tests/Log_Msg_Test.cpp: + * tests/Mem_Map_Test.cpp: + * tests/MM_Shared_Memory_Test.cpp: + * tests/MT_Reactor_Timer_Test.cpp: + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + * tests/MT_SOCK_Test.cpp: + * tests/Naming_Test.cpp: + * tests/Pipe_Test.cpp: + * tests/Proactor_Scatter_Gather_Test.cpp: + * tests/Proactor_Test.cpp: + * tests/Process_Mutex_Test.cpp: + * tests/SOCK_Connector_Test.cpp: + * tests/SOCK_Send_Recv_Test.cpp: + * tests/SOCK_Test.cpp SPIPE_Test.cpp: + * tests/Time_Service_Test.cpp: + * tests/Time_Value_Test.cpp: + * tests/Tokens_Test.cpp: + * tests/UPIPE_SAP_Test.cpp: + * websvcs/lib/URL_Addr.cpp: + * examples/Reactor/WFMO_Reactor/Talker.cpp: + * examples/Service_Configurator/IPC-tests/client/local_fifo_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_service_directory_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_stream_client_test.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.i: + * examples/Web_Crawler/URL_Addr.cpp: + * ASNMP/tests/test_config.h: + Added needed includes. I am working on changing checks for + ACE_LACKS_INLINE_FUNCTIONS by checks for __ACE_INLINE_ in ACE, + so that we can enabled/disable inlining completely in ACE. As a + result of this I reduced some header file dependencies and now + some tests need more includes. More of these changes will follow. + + * tests/Framework_Component_DLL.cpp: + * tests/MEM_Stream_Test.cpp: + * tests/Process_Strategy_Test.cpp: + * tests/Timeprobe_Test.cpp: + * netsvcs/lib/Name_Handler.cpp: + * netsvcs/lib/Server_Logging_Handler.cpp: + * performance-tests/Misc/test_singleton.cpp: + To make things easier to maintenance use the new + ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION macro to check + whether we need to explicit instantiate static template members. + This macro is set for the GNU compiler for AIX, HPUX and VxWorks. + +Sun Jun 13 15:44:23 2004 Douglas C. Schmidt + + * tests/Message_Queue_Test.cpp: Enhanced this test so that it + checks to see whether dequeue_prio() works properly. + +Sun Jun 13 18:12:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/tmcast.mpb: + For TMCast we require threads and we shouldn't set the + dynamicflags. That is only required when we build a library + and not when we use it. + +Sun Jun 13 17:05:12 UTC 2004 Johnny Willemsen + + * apps/JAWS/clients/Blobby/blobby.cpp: + * apps/JAWS/server/IO.cpp: + * apps/gperf/src/Hash_Table.cpp: + Added needed includes + +Sun Jun 13 17:01:12 UTC 2004 Johnny Willemsen + + * examples/APG/Logging/Callback-2.h: + * examples/APG/Sockets/Basic_Robust.cpp: + * examples/APG/Sockets/Server.cpp: + * examples/C++NPv1/Logging_Client.cpp: + * examples/C++NPv2/Client_Logging_Daemon.cpp: + * examples/C++NPv2/Logging_Handler.cpp: + * examples/C++NPv2/WFMO_Reactor_Logging_Server.cpp: + * examples/IPC_SAP/DEV_SAP/writer/writer.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-server.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-test.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.h: + * examples/IPC_SAP/SPIPE_SAP/NPClient.cpp: + * examples/IPC_SAP/SPIPE_SAP/NPServer.cpp: + * examples/Logger/client/logging_app.cpp: + * examples/Logger/simple-server/Logging_Handler.cpp: + * examples/OS/Process/imore.cpp: + * examples/QOS/Diffserv/diffserv_test.cpp: + * examples/RMCast/Send_File/Receiver.cpp: + * examples/RMCast/Send_File/Sender.cpp: + * examples/Reactor/Dgram/CODgram.cpp: + * examples/Reactor/FIFO/client.cpp: + * examples/Reactor/FIFO/server.cpp: + * examples/Reactor/Misc/test_demuxing.cpp: + * examples/Reactor/Proactor/test_cancel.cpp: + * examples/Reactor/Proactor/test_multiple_loops.cpp: + * examples/Reactor/Proactor/test_proactor.cpp: + * examples/Reactor/WFMO_Reactor/Registry_Changes.cpp: + Added needed includes. I am working on changing checks for + ACE_LACKS_INLINE_FUNCTIONS by checks for __ACE_INLINE_ in ACE, + so that we can enabled/disable inlining completely in ACE. As a + result of this I reduced some header file dependencies and now + some tests need more includes. More of these changes will follow. + + * examples/APG/Logging/Use_LogManager.cpp: + * examples/APG/Timers/PTimerDispatcher.cpp: + * examples/APG/Timers/TimerDispatcher.cpp: + * examples/C++NPv2/TP_Logging_Server.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp: + * examples/Logger/simple-server/server_loggerd.cpp: + * examples/Logger/Acceptor-server/server_loggerd.cpp: + * examples/Threads/auto_event.cpp: + * examples/Threads/tss2.cpp: + To make things easier to maintenance use the new + ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION macro to check + whether we need to explicit instantiate static template members. + This macro is set for the GNU compiler for AIX, HPUX and VxWorks. + + * examples/APG/Shared_Memory/Hash_Map.cpp: + * examples/APG/Shared_Memory/Malloc.cpp: + * examples/APG/Shared_Memory/PI_Malloc.cpp: + * examples/APG/Shared_Memory/Pool_Growth.cpp: + Fixes for wchar builds + +Sun Jun 13 16:53:12 UTC 2004 Johnny Willemsen + + * bin/generate_footprint_chart.sh: + Removed fixed yrange of 3000. Especially for the smaller libraries + the generated graphs are hard to read. Just let gnuplot determine + the needed yrange + +Sun Jun 13 15:19:12 UTC 2004 Johnny Willemsen + + * examples/Log_Msg/Log_Msg_MFC/StdAfx.h: + Fixed errors in mfc builds. + +Sun Jun 13 11:45:12 UTC 2004 Johnny Willemsen + + * tests/Config_Test.cpp: + * tests/Log_Msg_Test.cpp: + * tests/Mem_Map_Test.cpp: + * tests/MM_Shared_Memory_Test.cpp: + * tests/MT_Reactor_Timer_Test.cpp: + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + * tests/MT_SOCK_Test.cpp: + * tests/Naming_Test.cpp: + * tests/Pipe_Test.cpp: + * tests/Proactor_Scatter_Gather_Test.cpp: + * tests/Proactor_Test.cpp: + * tests/Process_Mutex_Test.cpp: + * tests/SOCK_Connector_Test.cpp: + * tests/SOCK_Send_Recv_Test.cpp: + * tests/SOCK_Test.cpp SPIPE_Test.cpp: + * tests/Time_Service_Test.cpp: + * tests/Time_Value_Test.cpp: + * tests/Tokens_Test.cpp: + * tests/UPIPE_SAP_Test.cpp: + Added needed includes. I am working on changing checks for + ACE_LACKS_INLINE_FUNCTIONS by checks for __ACE_INLINE_ in ACE, + so that we can enabled/disable inlining completely in ACE. As a + result of this I reduced some header file dependencies and now + some tests need more includes. More of these changes will follow. + + * tests/Framework_Component_DLL.cpp: + * tests/MEM_Stream_Test.cpp: + * tests/Process_Strategy_Test.cpp: + * tests/Timeprobe_Test.cpp: + To make things easier to maintenance use the new + ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION macro to check + whether we need to explicit instantiate static template members. + This macro is set for the GNU compiler for AIX, HPUX and VxWorks. + +Sun Jun 13 10:19:12 UTC 2004 Johnny Willemsen + + * ace/config-aix-4.x.h: + * ace/config-hpux-10.x-g++.h: + * ace/config-hpux-11.00.h: + * ace/config-vxworks5.x.h: + * ace/README: + Added new macro ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION. + With the GCC compiler on HPUX, AIX and VxWorks we need to explictly + instantiate static template members to assure that we have the static + only once. This new macro is a side effect of bug 1823. We check + for GNU and one of the mentioned OS's in the cpp files but this + is hard to maintain and once in a while we find that in a certain + file we lack a check for a certain OS. This new macro will be used + as replacement so that we can control whether to instantiate the + static template members from the config files. The changes to the + cpp files will follow soon. + +Sat Jun 12 17:16:53 2004 Douglas C. Schmidt + + * ace/Message_Queue_T.cpp (dequeue_prio_i): Change the use of + < to <= so that we'll find the earliest message in a group of + messages with the same priority to preserve FIFO order. Thanks + to Olivier Brunet for reporting this problem. + + * ace/Message_Queue_T.h (class ACE_Message_Queue): Updated the + documentation to be accurate about preserving FIFO order within + a priority level. + + * ace/Message_Queue_T.cpp (enqueue_i): Fixed an incorrect comment + - the tail is where the lowest priority message is and the head + is where the higest priority message is! + +Fri Jun 11 17:16:01 2004 Ossama Othman + + * docs/README.tutorials: + + New README file pointing users to C++NPv{1,2} and APG examples. + +Fri Jun 11 14:11:12 UTC 2004 Johnny Willemsen + + * ace/OS_NS_stdio.inl: + Fixed unused parameter warning + +Fri Jun 11 13:27:12 UTC 2004 Johnny Willemsen + + * tests/run_test.lst: + Moved the Recursive_Condition_Bug_Test to the end of the list, it + crashes hard with Cygwin and prevents to other tests from running. + This way we now get a better overview of our current Cygwin support. + +Thu Jun 10 21:40:03 2004 Ossama Othman + + * docs/tutorials: + + Removed obsolete ACE tutorials. They are not maintained, and + have been superseded by the C++NPv{1,2} and APG examples in + their corresponding `ACE_wrappers/examples' directories. + +Thu Jun 10 18:41:29 2004 Steve Huston + + * apps/JAWS3/jaws3/Asynch_IO.cpp: + * apps/JAWS3/jaws3/IO.h: + * apps/JAWS3/jaws3/Config_File.cpp: + * apps/JAWS3/jaws3/Datagram.h: + * apps/JAWS3/jaws3/Export.h: + * apps/JAWS3/jaws3/Options.cpp: + * apps/JAWS3/jaws3/Protocol_Handler.h: + * apps/JAWS3/jaws3/Symbol_Table.h + * apps/JAWS3/jaws3/Synch_IO.cpp: + * apps/JAWS3/jaws3/THYBRID_Concurrency.cpp: + * apps/JAWS3/jaws3/TPOOL_Concurrency.cpp: + * apps/JAWS3/jaws3/TPR_Concurrency.cpp: + * apps/JAWS3/jaws3/Task_Timer.h: + * apps/JAWS3/jaws3/Templates.cpp: + * apps/JAWS3/jaws3/Timer.h: + * apps/JAWS3/jaws3/Timer_Helpers.h: + * examples/APG/Misc_IPC/UDP_Broadcast.cpp: + * examples/APG/Misc_IPC/UDP_Multicast.cpp: + * examples/APG/Misc_IPC/UDP_Unicast.cpp: + * examples/APG/Shared_Memory/Mem_Map.cpp: + * examples/APG/Svc_Config/HA_Configurable_Server_Dynamic.cpp: + * examples/APG/Svc_Config/HA_Configurable_Server_Static.cpp: + * examples/APG/Svc_Config/HA_Status_Dynamic.cpp: + * examples/APG/Svc_Config/HA_Status_Static.cpp: + * examples/APG/ThreadManagement/Async_Cancel.cpp: + Don't include "ace/OS.h" - it screws up HP aC++ and somehow starts + complaining about mismatched t_bind things in OS_TLI.inl. Weird. + +Thu Jun 10 19:41:02 2004 Olli Savia + + * ACE-INSTALL.html: + + Updated LynxOS resource advice. + +Thu Jun 10 10:07:22 2004 Steve Huston + + * ace/Makefile.am: Added Functor_String.{h inl cpp}. Thanks to + J.T. Conklin for reporting this. + +Wed Jun 9 09:36:03 2004 Ossama Othman + + * ace/Select_Reactor_Base.cpp: + * ace/Select_Reactor_T.cpp: + + Use prefix {in,dec}rement operators where applicable instead of + postfix operators. The former are more efficient. + +Wed Jun 09 09:27:21 2004 Ossama Othman + + * ace/WFMO_Reactor.cpp: + + Use prefix {in,dec}rement operators where applicable instead of + postfix operators. The former are more efficient. + + Fixed "pointless comparison of unsigned integer with zero" + MSVC++ 7.1 warning. + + * ace/Process_Manager.cpp (wait): + + Fixed incorrect preprocessor conditional. Addresses "pointless + comparison of unsigned integer with zero" warning from MSVC++ + 7.1. + +Wed Jun 9 12:04:29 2004 Steve Huston + + * ace/OS_NS_sys_socket.inl (closesocket): Changed the constant passed + to ACE_OS::shutdown() from SD_SEND to ACE_SHUTDOWN_WRITE to make + it portable for Winsock1 and Winsock2 environments. Thanks to + Weida Ma for reporting this problem. + +Wed Jun 9 10:47:39 2004 Steve Huston + + * ace/Dirent_Selector.cpp (close): Regarding this: + Thu Jun 3 18:49:59 2004 Douglas C. Schmidt + Only platforms with ACE_LACKS_STRUCT_DIR dynamically allocate the + d_name string. All others include it in the dirent struct itself. + Please see Bugzilla 1833 - this problem should be remedied in + ACE_OS::scandir_emulation itself, and this patch removed. + +Tue Jun 8 17:01:32 2004 Steve Huston + + * include/makeinclude/platform_hpux_aCC.GNU: Removed the AREXTRA + definition. It caused all the files to be listed twice on the + ar command line; once from xargs and once from the command given + to xargs. Thanks to Ofira Shaer for + reporting this problem. + + * THANKS: Added Ofira Shaer. + +Tue Jun 8 16:27:39 2004 Steve Huston + + * configure.ac: Removed the individual AC_CONFIG_FILE entries for the + automake-generated Makefiles. Replaced with an m4_include of a + MPC-generated list of all Makefiles it generated during the most + recent MPC run. The file created by MPC is configure.ac.Makefiles. + If this works well, we can generate the Makefile.am files as needed + and remove the hand-maintained ones from the repo. + +Tue Jun 8 09:20:18 2004 Steve Huston + + * ace/IOStream_T.i: Add missing #includes to satisfy ACE_OS references. + +Sun Jun 6 09:48:17 2004 Douglas C. Schmidt + + * ace/SOCK_Dgram_Bcast.cpp (mk_broadcast): If there are + no broadcastable interfaces found, mk_broadcast() now returns -1 + and sets errno to ENXIO ("no such device or address"). Thanks to + Dave Craig for suggesting this fix. + + * ace/SOCK_Dgram_Bcast.cpp (mk_broadcast): Only complain about + broadcast not being enabled for an interface if host_name is non + NULL. Thanks to Dave Craig for this fix, + which resolves bugid 1831. + +Sat Jun 5 09:06:09 2004 Douglas C. Schmidt + + * ace/RMCast/RMCast_IO_UDP.i: Added a fix so that the transmitter + no longer hangs waiting for the acknowledgement unicast response + messages. The recipients were transmitting acknowledgements, + but the transmitter was listening to the socket that was bound + to a specific multicast address. Thanks to Dave Craig + for this fix. + +Thu Jun 3 23:21:13 2004 Ossama Othman + + * ace/Dirent_Selector.cpp (close): + + Fixed compile-time error where "d_name" member was accessed with + the dot "." operator instead of the pointer "->" operator. + +Thu Jun 3 18:49:59 2004 Douglas C. Schmidt + + * ace/Dirent_Selector.cpp (close): Need to call + + ACE_OS::free (this->namelist_[n_].d_name); + + in close() since ACE_OS::scandir() allocates a dirent structure + array that includes a dynamically allocated ACE_TCHAR *. Thanks + to Benjamin Bronk for reporting this + and providing the fix. This fixes bugid 1833. + +Thu Jun 3 17:36:39 2004 Tao Lu + + * bin/MakeProjectCreator/config/ciao_client_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb: + * bin/MakeProjectCreator/config/ciao_deployment_stub.mpb: + Added the -Sc to the idlflag to turn the tie class generation + off by default. + +Thu Jun 3 23:33:23 2004 Marek Brudka + + * include/makeinclude/platform_qnx_rtp_gcc.GNU (inline): + Removed optimization flags when debug is on due to g++ internal + compiler error. + +Thu Jun 3 12:32:52 2004 Jeff Parsons + + * ace/RW_Process_Mutex.h: + + Added #include of OS_NS_fcntl.h to pull in + ACE_DEFAULT_OPEN_PERMS. + +Thu Jun 3 10:52:18 2004 Arvind S. Krishna + + * bin/MakeProjectCreator/config/ciao_deployment_stub.mpb: + * bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb: + + Added idlfalgs+= to enable idl compiler to generate stubs and + skels for projects that inherit from the aforementioned mpc + files. + +Wed Jun 2 21:07:31 2004 Tao Lu + + * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_deployment_stub.mpb: + * bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb: + * bin/MakeProjectCreator/config/ciao_client_dnc.mpb: + + I have to change these file again to prepare to delete + $CIAO_ROOT/DnC/Core directory and move every thing there to + $CIAO_ROOT/DnC/ciao directory so the CIDL generated code will + find the right include file. + +Wed Jun 2 20:42:49 2004 Tao Lu + + * bin/MakeProjectCreator/config/ciao_client_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_component_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_server_dnc.mpb: + + Added these files to avoid conflit between the old and the new + CIAO implementation. + +Thu Jun 03 00:30:00 Marek Brudka + + * ace/RW_Process_Mutex.h (ACE_RW_Process_Mutex): + * ace/RW_Process_Mutex.cpp (ACE_RW_Process_Mutex): + Appended file mode to mutex constructor to solve the + difficulties reported by Bae-Sik Chon . + +Wed Jun 2 07:30:56 2004 Chad Elliott + + * ace/OS_NS_Thread.cpp: + + Added the class name for the ACE_TSS_DESTRUCTOR cast. + +Wed Jun 2 00:03:20 2004 Ossama Othman + + * ace/Log_Msg.cpp + * ace/Timer_Hash_T.cpp: + + Converted all ACE cast macro calls to their ANSI C++ cast + counterparts. + + Use prefix {in,dec}rement operators where applicable instead of + postfix operators. The former are more efficient. + + * ace/SSL/SSL_Asynch_BIO.cpp: + * ace/SSL/SSL_SOCK_Stream.cpp: + * ace/SSL/SSL_SOCK_Stream.i: + + Converted all ACE cast macro calls to their ANSI C++ cast + counterparts. + +Tue Jun 1 18:31:44 2004 Steve Huston + + * ace/Lib_Find.cpp: Added /**/ to naked platform-specific #includes + to keep eVC from complaining it can't find the files. + +Tue Jun 1 16:37:30 2004 Douglas C. Schmidt + + * ace/SOCK_Dgram_Bcast.cpp (send): Set the port number of the + broadcast address before sending the iovec. Thanks to Dave + Wolfe for this patch, which fixes + bugid 1830. + + * ace/OS_NS_Thread.cpp: Added a cast for (ACE_TSS_DESTRUCTOR) + so the code will compile properly on Solaris when + ACE_HAS_TSS_EMULATION is enabled. Thanks to Kevin Christian + for reporting this. + +Tue Jun 1 16:56:39 2004 Steve Huston + + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: Changed use of + SHUT_RDWR arg for ACE_OS::shutdown() to ACE_SHUTDOWN_BOTH, which is + set up correctly across all platforms. Fixes compile error on + Windows. + + * ace/SOCK.h: + * ace/OS_NS_sys_socket.h: Moved the setup of ACE_SHUTDOWN_READ, + ACE_SHUTDOWN_WRITE, and ACE_SHUTDOWN_BOTH from SOCK.h to + OS_NS_sys_socket.h. There's no need to include SOCK.h to use + the lower-level ACE_OS::shutdown() directly. + +Sat May 29 16:12:28 2004 Olli Savia + + * include/makeinclude/platform_lynxos.GNU: + + Added X11 related libs needed to build XtReactor. + +Fri May 28 18:35:41 2004 Steve Huston + + * tests/FIFO_Test.cpp (server): The select() trick to wait for the + writer to open the FIFO doesn't seem to work on AIX. It seems to + select() the fifo handle as a normal file handle, always readable. + So on AIX, sleep 1 second before proceeding. + +Fri May 28 15:54:26 2004 Steve Huston + + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: In + Close_Socket_Thread::svc(), do a ACE_OS::shutdown() before closing + the socket. This is enough to pop another thread off a blocked + read/write on platforms that block the close() until an in-progress + operation completes, such as AIX and Linux. With this, remove the + #if linux checks that disabled some types of test. + It could be argued that the shutdown() should be done as part of + ACE_OS::closesocket() (it already does this for HP-UX), but I + hesitate to rock the boat here... + +Thu May 27 19:02:18 2004 Steve Huston + + * ace/Timer_Hash_T.cpp (schedule_i): For Win64, reinterpret_cast from + ptrdiff_t to long is incorrect; static_cast is more appropriate. + +Thu May 27 20:00:29 2004 Olli Savia + + * ace/README: + + Added ACE_LACKS_REALPATH and ACE_LACKS_SWAB. + +Thu May 27 12:10:29 2004 Steve Huston + + * examples/Service_Configurator/IPC-tests/server/Svc_Cfg_IPC_Server.mpc: + Changed exe's "after" clause to reflect renamed library project name. + Also see: + Thu May 7 02:00:00 2004 Marek Brudka + +Thu May 27 18:22:22 2004 Olli Savia + + * ace/config-lynxos.h: + + Added ACE_HAS_GETPAGESIZE and ACE_HAS_MEMCHR macros. + +Thu May 27 17:55:38 2004 Olli Savia + + * ACE-INSTALL.html: + + Updated LynxOS resource advises. These were unnesessary large. + This fixes bugzilla bug 1154. + +Wed May 26 23:51:53 2004 Ossama Othman + + * ace/OS_NS_string.cpp: + + Converted all ACE cast macro calls to their ANSI C++ cast + counterparts. + + * ace/OS_NS_sys_socket.inl: + + Use prefix {in,dec}rement operators where applicable instead of + postfix operators. The former are more efficient. + +Wed May 26 23:44:04 2004 Ossama Othman + + * tests/Reactor_Registration_Test.cpp (Event_Handler): + (handle_input): + + Fixed "comparison between signed and unsigned integer" + warnings. + +Wed May 26 10:36:39 2004 Tao Lu + + * bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb: + * bin/MakeProjectCreator/config/ciao_deployment_stub.mpb: + Added these two mpb files to ease the mpc file writing for + CIAO DnC run time. + +Wed May 26 10:40:36 2004 Boris Kolpackov + + * ace/TMCast/README: Added description of architecture that + I prepared for Carlos some time ago but never actually + committed it. + +Tue May 25 22:08:42 UTC 2004 Don Hinton + + * bin/MakeProjectCreator/templates/gnu.mpd: + Also turn off LIBCHECK when passing -k, keep-going. + +Tue May 25 21:32:17 UTC 2004 Don Hinton + + * bin/MakeProjectCreator/templates/gnu.mpd: + Turn off LIBCHECK when doing dry-runs. + + * include/makeinclude/rules.local.GNU: + Print out MAKEFLAGS during builds. + +Mon May 24 12:16:29 2004 Steve Huston + + * configure.ac: Corrected comments in the pthread_rwlock-related + checks. They had cut/paste errors and said signinfo_t. Thanks to + J.T. Conklin for this fix. + +Fri May 21 16:44:29 2004 Steve Huston + + * examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.mpc: Removed the pch + specs from this and replaced with a normal exe-producing set of + specs and files. There were no pch directives in the files, and this + drove MSVC nuts at compile time, complaining of a missing #endif + where there clearly was none. + + * examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.{cpp h}: Moved #include + "ace/Log_Msg.h" from .h to .cpp, as nothing in the .h file needs it. + +Fri May 21 15:28:31 2004 Steve Huston + + * ace/Makefile.am: Removed OS_Export.h and Sock_Connect.i as they're + no longer valid files. Please also see: + Tue May 18 11:28:22 UTC 2004 Johnny Willemsen + Fri May 7 09:11:21 UTC 2004 Johnny Willemsen + +Thu May 20 21:19:44 2004 Phil Mesnier + + * ace/CDR_Stream.h: + * ace/CDR_Stream.i: Add a method to get the byte ordering flag so + that serialization of UTF-16 data will be able to do the right + thing WRT byte ordering. This is necessary since UTF-16 byte + ordering (as required by CORBA) is independent of the CDR Stream + byte order. + + * ace/Codeset_Registry.h: + * ace/Codeset_Symbols.h: Codeset_Symbols is a collection of + #defines for all the standard codeset id values. + +Thu May 20 18:23:49 2004 Steve Huston + + * tests/SOCK_Dgram_Bcast_Test.cpp: When sending a datagram, only send + the formatted text string, noth the whole buffer. Some OSes (i.e. + AIX) don't allow a broadcast of that large a buffer. Also, fixed + the style, indentation, and narrow/wide text capability. + +Thu May 20 10:21:39 2004 Steve Huston + + * examples/APG/Reactor/Client.cpp: In handle_input(), use "%.*C", + not "%*C" to limit output to string length. In handle_timeout (), + referring to a buffer in ACE_Message_Block's ctor doesn't copy the + data; it simply refers to it. This would produce garbage output. + Thanks to Dale Hawkins for these fixes. + + * examples/APG/Containers/Queues.cpp (runStackUnboundedQueue): The + DataElement arrays inserted into the queue should be defined outside + their 'for' loops to avoid repeated, unnecessary constructor and + destruction. Thanks to Bill Hopkins for + this suggestion. + + * THANKS: Added Dale Hawkins and Bill Hopkins. + +Wed May 19 12:46:33 2004 Steve Huston + + * ace/SSL/SSL_SOCK.i: Added missing #include "ace/OS_NS_sys_socket.h" + +Wed May 19 12:14:21 2004 Steve Huston + + * tests/Reactor_Registration_Test.cpp: Fixed string types to work + for both narrow and wide chars; fixed size types to work for + 64-bit platforms. + +Wed May 19 08:57:24 2004 Douglas C. Schmidt + + * ace/OS_NS_Thread.inl: Fixed the ACE_OS::thr_self() call so that + it doesn't use the ACE_OSCALL_RETURN macro, which compares the + return value of pthread_self() with -1 to see if the function + encountered an error. However, pthread_t may be an opaque value + (a pointer, a struct, etc.) that may not be able to be compared + with a literal without an error. Furthermore, the pthreads and + X/Open XPG standards do not define any error conditions for + pthread_self(), so checking the return value with -1 is + meaningless. Thanks to J.T. Conklin + for reporting this problem and providing a fix. + +Wed May 19 07:20:35 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Conditionally use the .NOTPARALLEL rule based on the existence and + time stamp of generated files in addition to the time stamp on the + generation tool (if applicable). In situations where the + generated files are up-to-date, using -j will actually be + beneficial instead of ignored. + + * include/makeinclude/rules.local.GNU: + + Switch to using depgen.pl instead of g++dep. It is accurate and + tremendously faster than g++dep. The dependency generation tool + can be controlled by setting the DEPGEN make macro. + +Tue May 18 16:55:39 2004 Steve Huston + + * ace/OS_NS_dirent.cpp (ACE_SCANDIR_COMPARATOR): + * ace/OS_NS_stdlib.h (ACE_COMPARE_FUNC): For Windows with Microsoft + Visual C++ compiler, explicitly specify __cdecl calling convention + so it remains correct even if built with a different default + calling convention. Thanks to Ivan Murphy + for this fix. + +Tue May 18 11:26:39 2004 Steve Huston + + * tests/tests.mpc: Replaced the "exename" lines for ACE_Test, + ACE_Init_Test, and FIFO_Test. Somehow they got lost... + +Tue May 18 11:07:22 2004 Steve Huston + + * examples/Service_Configurator/IPC-tests/client/local_dgram_client_test.cpp: + Removed arguments from ACE_OS::tempnam() call, forcing it to use + the defaults and select the char* variant. + +Tue May 18 14:28:22 UTC 2004 Johnny Willemsen + + * ace/LSOCK.cpp: + Added missing include ace/OS_NS_sys_socket.h + +Tue May 18 09:22:35 2004 Chad Elliott + + * bin/mpc.pl: + * bin/mwc.pl: + + Provide the getBasePath() method which returns the full path to + the MPC location. This will be used by MPC's Version module in + the future. + +Tue May 18 11:32:22 UTC 2004 Johnny Willemsen + + * ace/Condition_Thread_Mutex.h: + Documentation fix + +Tue May 18 11:28:22 UTC 2004 Johnny Willemsen + + * ace/SOCK.{h,cpp,i}: + * ace/SOCK_Acceptor.{h,cpp,i}: + * ace/SOCK_CODgram.{h,cpp,i}: + * ace/Sock_Connect.{h,cpp}: + * ace/SOCK_Connector.{h,cpp,i}: + * ace/SOCK_Dgram.{h,cpp,i}: + * ace/SOCK_Dgram_Bcast.{cpp,h,i} + * ace/SOCK_Dgram_Mcast.i: + * ace/SOCK_IO.{h,cpp,ï): + Instead of using ACE_LACKS_INLINE_FUNCTIONS use __ACE_INLINE__ to + check whether to enabling inlining or not. The last is the way + we now use and the first is not really working. In fact, all files + with ACE_LACKS_INLINE_FUNCTIONS use always inlining even when + __ACE_INLINE__ is not defined. With the latest GCC versions on + Windows we get hundreds of warnings that we are missing declspec + import and inline, when building DLL's we disable inlining but + this doesn't work for all files. See bugzilla 1581 for some + more info. More files will be updated later. + + * ace/Sock_Connect.i: + Removed this file, was not containing any code + + * ace/QoS/SOCK_Dgram_Mcast_QoS.cpp: + Added needed include of changes above + +Tue May 18 08:25:22 UTC 2004 Johnny Willemsen + + * bin/msvc_mpc_auto_compile.pl: + When building ACE also build the examples, some of them are used + in the test run. + +Tue May 18 08:14:22 UTC 2004 Johnny Willemsen + + * ace/Barrier.{h,cpp}: + Made method signature in implementation same as declaration and fixed + doxygen documentation + +Tue May 18 08:00:22 UTC 2004 Johnny Willemsen + + * Kokyu/tests/DSRT_MIF/MIF.cpp: + Fix for unicode builds + +Tue May 18 06:20:22 UTC 2004 Johnny Willemsen + + * ace/Time_Value.cpp: + Fixed compile error + +Mon May 17 21:19:27 2004 Ossama Othman + + * ace/CDR_Stream.h: + + Spelling correction. + + * ace/Time_Value.cpp (normalize, operator *=): + + Optimized some code. + + ACE coding style updates. + + * tests/Time_Value_Test.cpp (run_main): + + Updated code to conform to ACE coding conventions. + +Mon May 17 17:35:24 2004 Steve Huston + + * ace/Timer_Queue_T.cpp (schedule): Don't narrow the scheduled timer ID + from long to int; this smashes the ID on 64-bit systems where the + timer ID is larger than 32 bits holds; for example, in ACE_Timer_Hash + where it's a pointer. + +Mon May 17 22:38:48 2004 Marek Brudka + + * ace/Time_Value.cpp (operator *): + * ace/Time_Value.h (operator *): + * ace/Time_Value.inl (operator *): + operator *(double) moved from *inl into *cpp. The multiplication + algorithm change to extend the range of results to + . Doxygen docs for operator * + extended. + * tests/Time_Value_Test.cpp: + Added several tests for the result of multiplication by + double. + +Mon May 17 16:48:41 2004 Steve Huston + + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: Add #include + "AIO_CLD_export.h" to the non-AIO section so it will at least + build and load on non-AIO systems. + +Mon May 17 15:46:39 2004 Steve Huston + + * apps/JAWS3/jaws3/Templates.cpp: Added missing ACE_Atomic_Op_Ex + instantiation. Thanks to Johnny Willemsen for this fix. + +Mon May 17 13:29:11 2004 Steve Huston + + * examples/Web_Crawler/URL.h: Changed return type of send_request() + to ssize_t, matching change to HTTP_URL.h from: + Thu May 13 14:40:12 2004 Steve Huston + +Mon May 17 19:19:00 2004 Marek Brudka + + * tests/SOCK_Dgram_Bcast_Test.cpp (run_auto_test): + + Removed warning on declared, but not used function. Added + OS_NS_unistd.h include to make sure ACE_OD::sleep is declared. + +Mon May 17 13:22:18 2004 Steve Huston + + * ace/OS_NS_stdio.h (tempnam): Had to remove the default 'dir' value + on the wchar variant because it conflicts with the char version + when defaults are taken into account. + + * ace/OS_NS_stdio.inl (tempnam): For the wchar_t variant, have to + copy the narrow-char name to a wide-char string and free() the + original. + (fopen (wchar_t *...)): ACE_TEXT_ALWAYS_CHAR doesn't convert a + string if ACE_USES_WCHAR setting already matches ACE_TCHAR. Thus, to + force a convert of wchar_t to char, use ACE_Wide_To_Ascii directly. + +Mon May 17 11:58:33 2004 Steve Huston + + * ace/WIN32_Asynch_IO.cpp (writev): If the passed-in chain of + ACE_Message_Blocks contains a 0-length block, it would cause + a iovec to be uninitialized and still passed to WSASend(). This is + fixed. Thanks to Ken Kane for reporting this. + +Mon May 17 17:00:00 2004 Marek Brudka + + * ace/Time_Value.inl: + Fixed a bug in operator *=( double ) which caused overflow for + results greater than 2 seconds. Thanks to Mirek Pabich + for this patch. + +Mon May 17 08:45:18 2004 Carlos O'Ryan + + * bin/g++dep: + Document all the crazy sed commands that are used in this + script. Also, simplified the data flow by using a single sed + invocation (and a single sed script) to apply all the + transformations. Reduce the number of temporary files, and + ensure that the sed script file is removed if an error or + interrupt occurs. + +Mon May 17 12:40:22 UTC 2004 Johnny Willemsen + + * ace/POSIX_CB_Proactor.cpp (handle_events_i): + * ace/Semaphore.cpp (constructor): + * ace/Thread_Semaphore.cpp (constructor): + Made method signature the same as in the header file, this fixes + doxygen warnings. + + * ace/Thread_Semaphore.h: + Doxygen documentation fixes. + +Mon May 17 12:32:22 UTC 2004 Johnny Willemsen + + * ace/Hash_Cache_Map_Manager_T.{cpp,i}: + Replaced T_1 with ACE_T1 and T_2 with ACE_T2 to be able to + generate better doxygen documentation + + * etc/ace.doxygen: + Added ACE_T1 and ACE_T2 to the EXPAND_AS_DEFINED list. These macros + are used in some template classes to make the code more readable but + doxygen gets problems when we don't expand these macros. + +Sun May 16 17:40:11 UTC 2004 Johnny Willemsen + + * performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.cpp: + Fixed internal compiler error in MinGW build. + +Sun May 16 15:39:11 UTC 2004 Johnny Willemsen + + * ace/config-cygwin32.h: + Added ACE_HAS_VOIDPTR_MMAP and removed ACE_HAS_SIG_MACROS + +Sun May 16 13:11:11 UTC 2004 Johnny Willemsen + + * tests/run_test.lst: + Move the Process_Strategy_Test to the end of this file. It fails + with Cygwin and hangs and prevents the other tests of running. So + when it is last we will see the results of more tests on Cygwin. + +Sun May 16 12:59:11 UTC 2004 Johnny Willemsen + + * bin/PerlACE/Process_Unix.pm: + * bin/PerlACE/Process_Win32.pm: + Print an info message in the TerminateWaitKill so that we can see in + the build log files that a process is tried to terminate. + +Sun May 16 12:47:11 UTC 2004 Johnny Willemsen + + * tests/SOCK_Dgram_Bcast_Test.cpp: + Fixed compile error because of incorrect include + +Sun May 16 12:38:11 UTC 2004 Johnny Willemsen + + * ace/config-cygwin32.h: + Added ACE_LACKS_PTHREAD_KILL. Cygwin 1.5.9 gives a stackdump + when pthread_kill is used, so disable this feature until we + get a cygwin with this bug fixed. + +Sun May 16 12:14:12 UTC 2004 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Disabled the crash_on_write tests on Win32 because it doesn't work + and there are no plans to fix this soon. See bugzilla 959. + +Sun May 16 11:31:12 UTC 2004 Johnny Willemsen + + * ace/config-cygwin32.h: + Added ACE_HAS_SYSV_IPC and removed defines that where needed for + older Cygwin versions. We are still working on getting things working + and even with the newest version we still don't have 100% working + tests, so we don't bother maintaining stuff for older versions that + are really broken + +Sat May 15 19:48:00 2004 Marek Brudka + + * ace/Sock_Connect.cpp (get_bcast_addr): + The loop over interfaces was buggy the same way as previously in + mk_broadcast. Fixed. It seems sa_len is serious portability + problem. Shall ACE_HAS_SA_LEN macro be defined and respected? + + * ace/SOCK_Dgram_Bcast.cpp (mk_broadcast): + FreeBSD also has sockaddr.sa_len, hence the loop over interfaces + shall work correctly. + +Sat May 15 19:48:00 2004 Marek Brudka + + * ace/SOCK_Dgram_Bcast.cpp (mk_broadcast): + ACE_ERROR message modified to print the name of problematic interface. + +Sat May 15 19:17:00 2004 Marek Brudka + + * ace/SOCK_Dgram_Bcast.cpp (mk_broadcast): + Quick fix to previous bugfix. It seems that not every system (eg. Linux) + provides sockaddr.sa_len. Previous fix (see below) restricted now to AIX, + QNX and CHORUS, where sa_len is avalaible. + +Sat May 15 17:25:17 2004 Marek Brudka + + * ace/SOCK_Dgram_Bcast.h: + * ace/SOCK_Dgram_Bcast.cpp: + Fixed bug in mk_broadcast related with incorrect length of struct ifreq. + Thanks to Mirek Pabich for this patch. + * tests/SOCK_Dgram_Bcast_Test.cpp: + tests/tests.mpc: + test/run_test.lst: + New automatic test for checking against bugs similiar to those reported by + Mirek Pabich. The usability of the test is restricted, as some errors in + broadcast handling can be detected only in LAN transmission. + * tests/tests.mpc: + MT_Reference_Counted_Event_Handler_Test project name truncated to + MT_Ref_Counted_Event_Handler_Test. + +Fri May 14 22:13:13 2004 Ossama Othman + + * bin/MakeProjectCreator/config/event.mpb: + + Reordered subprojects to force TAO_Messaging library to be + listed in static link commands after TAO_DynamicInterface + library. The latter depends on the former. Addresses static + build link-time errors. Thanks to Chad for providing a patch. + +Fri May 14 14:22:49 2004 Steve Huston + + * ace/Service_Repository.{h cpp} (insert): If there's no space left in + in the service repository, set errno to ENOSPC before returning -1. + (remove): Added an optional argument that can receive the + service record pointer for the removed service. If the pointer is + returned to the caller, it is not deleted. If the pointer is not + returned to the caller (the default) it is deleted (this is the + historic behavior). This is needed to properly support removing + a service record quickly after inserting it during service + initialization. See "Tue Mar 16 2004 + ACE version 5.4 P4", below. + +Thu May 13 14:40:12 2004 Steve Huston + + * ace/Functor.{h i}: The ACE_Hash, ACE_Equal_To, and ACE_Less_Than + "char"-type specializations were being done as ACE_TCHAR, and if + ACE_USES_WCHAR defined, also as ACE_ANTI_TCHAR. These are now changed + to always do 'char' and, if ACE_HAS_WCHAR, also wchar_t. Thus, + they're both compiled whenever possible and not only when + ACE_USES_WCHAR is set up. + + * ace/OS_NS_stdio.{h, inl}: Added wchar_t variants of tempnam () + and rename (). + + * ace/OS_NS_sys_stat.{h, inl}: Added a wchar_t variant of stat (). + + * ace/OS_NS_unistd.{h, inl}: Added a wchar_t variant of unlink (). + + * examples/Web_Crawler/Command_Processor.cpp (execute): Make sure + the URL path string is narrow. (insert): Use ACE_TEXT around + string literals. + + * examples/Web_Crawler/HTTP_URL.{h cpp} (send_request): Change return + type from int to ssize_t, matching the normal types used in ACE. + Use size_t, not int, for string size. + + * examples/Web_Crawler/Mem_Map_Stream.cpp (recv): Cast the length + to off_t to match what seek() expects. + + * examples/Web_Crawler/main.cpp: + * examples/Web_Crawler/Web_Crawler.{h, cpp}: + * examples/Web_Crawler/Options.{h, cpp}: Changed main() to ACE_TMAIN() + and all the command line options processing to ACE_TCHAR. + + * examples/Web_Crawler/URL_Addr.cpp: Add ACE_TEXT to string literals. + + Changes merged in from Siemens Medical Systems: + Tue May 11 2004 ACE version 5.4 P15 + * tests/Proactor_Scatter_Gather_Test.cpp: Close down the proactor + before finishing otherwise the object manager will hang. + + Mon Apr 26 2004 ACE version 5.4 P13 + * ace/Registry_Name_Space.cpp: Removed 64-bit warnings. + + Fri Apr 16 2004 ACE version 5.4 P12 + * ace/Based_Pointer_T.h: Made target_ and base_offset_ type + ptrdiff_t instead of long to avoid problems with 64bit. + + Tue Mar 16 2004 ACE version 5.4 P8 + * ace/DLL_Manager.cpp: + * ace/NT_Service.cpp: + Use ACE_LIB_TEXT instead of ACE_TEXT. + + Tue Mar 16 2004 ACE version 5.4 P7 + * ace/OS_NS_sys_stat.{h,inl}: Added a wchar version of mkdir(). + + Tue Mar 16 2004 ACE version 5.4 P6 + * ace/OS_NS_fcntl.cpp (open): + * ace/OS_NS_stdio.{h inl}: + * ace/OS_NS_sys_mman.inl (mmap): + * ace/OS_NS_Thread.inl (mutex_init, event_init, sema_init): + Added a thread safe method + ACE_OS::default_win32_security_attributes_r(). + + Tue Mar 16 2004 ACE version 5.4 P4 + * ace/Service_Config.cpp: Insert component into repository before + calling init as in the init the component may access the service + repository. + + Tue Mar 16 2004 ACE version 5.4 P3 + * ace/Functor.i,h: Added the classes ACE_Hash and + ACE_Hash which had gone missing between 5.0.7 and + 5.3.1/5.4. + + Wed Feb 25 2004 Ivan Murphy ACE 5.4 P2 + * ace/OS_NS_stdio.{h,cpp,inl}: Added wchar version of fopen(). + + Wed Feb 25 2004 Ivan Murphy ACE 5.4 P1 + * ace/OS_NS_stdlib.{h,inl}: Added wchar_t version of putenv(). + +Fri May 14 10:00:22 2004 Ossama Othman + + * configure.ac: + * ace/README (ACE_HAS_EXPLICIT_KEYWORD, ACE_HAS_MUTABLE_KEYWORD): + * ace/CDR_Base.h: + * ace/config-borland-common.h: + * ace/config-g++-common.h: + * ace/config-icc-common.h: + * ace/config-lite.h (ACE_EXPLICIT, ACE_MUTABLE): + * ace/config-openvms.h: + * ace/config-tandem-nsk-mips-v2.h: + * ace/config-win32-ghs.h: + * ace/config-win32-msvc-6.h: + * ace/config-win32-msvc-7.h: + * ace/config-win32-visualage.h: + * m4/config_h.m4: + + ACE now requires C++ "explicit" and "mutable" keyword support. + Document these macros as deprecated, and removed all related + references. + + * ace/Auto_Ptr.h: + * ace/Bound_Ptr.h: + * ace/CDR_Stream.h: + * ace/Configuration.h: + * ace/DEV_Addr.h: + * ace/Date_Time.h: + * ace/Dirent.h: + * ace/FILE_Addr.h: + * ace/INET_Addr.h: + * ace/Local_Tokens.h: + * ace/MEM_Addr.h: + * ace/Parse_Node.h: + * ace/SOCK_Dgram_Mcast.h: + * ace/SString.h: + + Replaced all uses of "ACE_EXPLICIT" and "ACE_MUTABLE" with + "explicit" and "mutable", respectively. These ACE macros are + deprecated. + +Thu May 13 21:59:25 2004 Ossama Othman + + * ace/CDR_Base.h (ACE_CDR::Boolean): + + Potential ambiguities can occur if some classes, for example, + contain implicit conversion operators whose return values can + themselves be implicitly converted to a bool even though bool + was not the intended type. If multiple CDR stream insertion + operators (for example) exist, including one that accepts the + ACE_OutputCDR::from_boolean type, the compiler may be unable to + choose the appropriate insertion operator. As of yet, this + problem does not appear to occur if the ACE_CDR::Boolean type is + an "unsigned char" instead of "bool". If the C++ "explicit" + keyword is unavailable to us, resort to making ACE_CDR::Boolean + an unsigned char, which also happens to be a valid + implementation. Fixes TAO builds on platforms that do not + support the C++ "explicit" keyword. + + * ace/Synch_Traits.h: + + Corrected doxygen documentation. + +Thu May 13 21:07:45 2004 Ossama Othman + + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: + Fixed compile-time errors for !ACE_WIN32 && !ACE_HAS_AIO_CALLS + case. + +Fri May 14 07:05:43 2004 Olli Savia + + * ace/config-lynxos.h: + + Added ACE_LACKS_MUTEXATTR_PSHARED for LynxOS 3.0.x. + +Fri May 14 06:56:20 2004 Olli Savia + + * ace/OS_NS_stdlib.h: + * ace/OS_NS_stdlib.inl: + * ace/OS_NS_stdlib.cpp: + * ace/config-lynxos.h: + + Added ACE_OS::realpath() implementation. + +Thu May 13 20:23:12 2004 Ossama Othman + + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test.h: + + Added missing "ace/svc_export.h" include. Fixes compile-time + errors in multithread-enabled builds. + +Thu May 13 18:37:52 2004 Steve Huston + + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: Added missing + #include "ace/Service_Object.h" for the non-AIO case. + +Thu May 13 21:39:00 2004 Marek Brudka + + * bin/MakeProjectCreator/templates/gnu.mpd: Changed dependency file + name to make file names shorter. Thanks to Chad Elliott + for this patch. + +Thu May 13 21:39:00 2004-05-13 Marek Brudka + + * docs/ACE-guidelines.html: Added guideline about long file + names. + +Thu May 13 18:57:12 UTC 2004 Johnny Willemsen + + * ace/config-cygwin32.h: + Added ACE_LD_SEARCH_PATH defined as PATH. Because Cygwin runs on + Windows we must use PATH and not LD_LIBRARY_PATH which is the + default in ACE. + +Thu May 13 15:59:31 UTC 2004 Johnny Willemsen + + * ace/config-cygwin32.h: + Added ACE_HAS_SNPRINTF. Cygwin supports this. + +Thu May 13 15:28:32 UTC 2004 Johnny Willemsen + + * ace/config-cygwin32.h: + Added ACE_LACKS_MUTEXATTR_PSHARED, Cygwin export this function but + it doesn't work at this moment. + +Thu May 13 07:24:21 UTC 2004 Johnny Willemsen + + * ace/Cache_Map_Manager_T.{h,cpp,i}: + * ace/Cached_Connect_Strategy_T.cpp: + * ace/Hash_Cache_Map_Manager_T.h: + * tests/Cached_Accept_Conn_Test.{h,cpp}: + * tests/Cached_Conn_Test.cpp: + * ace/README: + * examples/Web_Crawler/URL_Visitor.cpp: + Removed ACE_HAS_BROKEN_EXTENDED_TEMPLATES. This was for a bug in pre + GCC 2.8 compilers which we don't support anymore. + + * ace/config-openvms.h: + Cleanup + +Wed May 12 21:26:37 2004 Ossama Othman + + * performance-tests/Server_Concurrency/Leader_Follower/leader_follower.cpp: + * performance-tests/Server_Concurrency/Queue_Based_Workers/workers.cpp: + + Use the "ACE_SYNCH" trait instead of "ACE_MT_SYNCH". Fixes + single-threaded build compile-time errors. + + * performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.cpp: + * performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.h: + * performance-tests/Synch-Benchmarks/Base_Test/base_test.cpp: + * performance-tests/Synch-Benchmarks/Base_Test/mutex_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test.h: + + #ifdef out the code if ACE_HAS_THREADS is not defined. This + code is only meant to be used when multithreading support in ACE + is enabled. Fixes single-threaded build compile-time errors. + +Wed May 12 20:13:41 2004 Ossama Othman + + * ace/Local_Tokens.cpp: + * ace/Log_Msg_IPC.cpp: + * ace/Log_Msg_NT_Event_Log.cpp: + * ace/Log_Msg_UNIX_Syslog.cpp: + * ace/Log_Record.cpp: + * ace/MEM_Acceptor.cpp: + * ace/MEM_IO.cpp: + * ace/Memory_Pool.cpp: + * ace/Message_Block.cpp: + * ace/Message_Block_T.cpp: + * ace/Message_Queue.cpp: + + Replaced deprecated ACE cast macro usage with ANSI C++ cast + counterparts. + + * ace/Profile_Timer.h (ACE_Profile_Timer::ACE_Elapsed_Time): + + Corrected Doxygen documentation for this class. + + * ace/Profile_Timer.cpp (elapsed_time): + + Corrected comments in this method. + + * ace/RW_Mutex.h: + + Nuked trailing whitespace. + +Wed May 12 16:48:41 2004 Steve Huston + + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: If built on + a platform that doesn't offer AIO, display an error message on + service load, and fail. + +Wed May 12 11:34:22 2004 Steve Huston + + * ace/config-freebsd.h: Reverted this change: + Tue May 11 12:33:49 2004 Steve Huston + because I mistakenly wiped out AIOCB_Proactor support, not + CB_Proactor support. Thanks to Matthew Corey for correcting + me on this. + + * ace/POSIX_CB_Proactor.{h cpp}: Also related to: + Tue May 11 12:33:49 2004 Steve Huston + Removed the __FreeBSD_version_ check and all FreeBSD-specific + code from ACE_POSIX_CB_Proactor. This class is no longer compiled + on FreeBSD per Matthew Corey's advice. + + * ace/Proactor.cpp (ctor): Added __FreeBSD__ to the condition under + which ACE_POSIX_CB_Proactor is not used as the default + implementation. Thanks to Bill Cassanova for reporting this. + +Wed May 12 13:29:43 UTC 2004 Johnny Willemsen + + * ace/OS_NS_sys_socket.inl(sendv): + When WSASend returns SOCKET_ERROR we already set errno, but + we have to return -1 in that case. The number of bytes send + in case of failure with WinSock2 is always 0, and this is + used differently by the callers. This fixes bugzilla bug 1816. + +Wed May 12 08:09:49 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/BorlandProjectCreator.pm: + + Sort the directories when forming the cppdir value. We need to + ensure that '.' comes first. Borland make attempts to generate + source files in each CPPDIR directory until it is successful + which explains multiple invocations of tao_idl. + +Wed May 12 07:32:13 UTC 2004 Johnny Willemsen + + * ace/config-openvms.h: + Cleanup + + * examples/Web_Crawler/URL_Visitor.h: + Removed commented out code + +Wed May 12 07:03:13 UTC 2004 Johnny Willemsen + + * ace/README: + Removed description of ACE_HAS_GNUC_BROKEN_TEMPLATE_INLINE_FUNCTIONS. + This was for a bug in GCC 2.7.3 which we don't support anymore and + none of the config files set this define at this moment. + + * ace/Thread_Manager.h: + Removed usage of ACE_INLINE_FOR_GNUC and improved doxygen + documentation + + * ace/Memory_Pool.h: + Improved doxygen documentation + + * ace/Mem_IO.h: + Removed usage of ACE_INLINE_FOR_GNUC + + * ace/config-lite.h: + Removed checking of ACE_HAS_GNUC_BROKEN_TEMPLATE_INLINE_FUNCTIONS and + setting of ACE_INLINE_FOR_GNUC. This was for GCC 2.7.3 and we don't + support this anymore and the broken template define is not set in any + config file. + +Wed May 12 06:37:13 UTC 2004 Johnny Willemsen + + * ace/OS_NS_sys_socket.inl: + After the ::WSASend call we must check the return value and in case + of an error we must call ACE_OS::set_errno_to_wsa_last_error to set + errno. After the other ::WSA calls we must call also this method + instead of ACE_OS::set_errno_to_last_error. This fixes bugzilla + bug 1815. + +Tue May 11 17:39:22 2004 Steve Huston + + * examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.rc: Converted back to + neutral text format. + +Tue May 11 14:21:39 2004 Steve Huston + + * examples/APG/Streams/streams.mpc: Added 'threads' to the requires + spec. + +Tue May 11 12:33:49 2004 Steve Huston + + * ace/config-freebsd.h: If FreeBSD 5, change the Proactor default + implementation to not be ACE_POSIX_AIOCB_Proactor. Apparantly, + FreeBSD 5 removed the SIGEV_THREAD notification method. + + * ace/POSIX_CB_Proactor.{h cpp}: Added __FreeBSD_version > 500000 as + a condition that prevents this class from being compiled. + + Thanks to Bill Cassanova for reporting this issue and to + Matthew Corey for digging through the FreeBSD headers to find + out what's going on. + + * THANKS: Added Bill Cassanova and Matthew Corey to the Hall of Fame. + +Tue May 11 08:58:33 2004 Chad Elliott + + * ace/ace.mpc: + + Removed non-existent headers from the Header_Files section. + +Tue May 11 09:30:21 UTC 2004 Johnny Willemsen + + * ace/Registry.h: + Converted partly to doxygen style + +Tue May 11 09:22:13 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/winregistry.mpb: + Added new feature winregistry, this is set by default. This is to + determine if the environment has the windows registry. + + * include/makeinclude/wrapper_macros.GNU: + By default with GNU make winregistry is set to 0 when not set. + + * include/makeinclude/platform_mingw32.GNU: + MinGW has windows registry, so set winregistry to 1 + + * examples/Registry/Registry.mpc: + Removed gnuace verbatim parts and replaced by added winregistry + as base project. Because of this the registry tests are now build + with MinGW. + +Mon May 10 19:17:21 UTC 2004 Johnny Willemsen + + * ace/config-cygwin32.h: + Added define ACE_LACKS_THREAD_PROCESS_SCOPING, Cygwin lacks + this and with this define set the Bound_Ptr test works. + +Mon May 10 14:42:29 2004 Steve Huston + + * examples/APG/Active_Objects/AO.cpp: + * examples/APG/Active_Objects/AO2.cpp: + * examples/APG/ThreadManagement/Coop_Cancel.cpp: + * examples/APG/ThreadManagement/Priorities.cpp: + * examples/APG/ThreadManagement/Pool.cpp: + * examples/APG/ThreadManagement/Signals.cpp: + * examples/APG/ThreadManagement/Signals2.cpp: + * examples/APG/ThreadPools/LF_ThreadPool.cpp: + * examples/APG/ThreadPools/Futures.cpp: + * examples/APG/ThreadPools/Task_ThreadPool.cpp: + * examples/APG/ThreadPools/ThreadPool.cpp: + * examples/APG/ThreadPools/TP_Reactor.cpp: + * examples/APG/ThreadSafety/Barrier.cpp: + * examples/APG/ThreadSafety/Mutex.cpp: + * examples/APG/ThreadSafety/RW_Lock.cpp: + * examples/APG/ThreadSafety/Semaphore.cpp: + * examples/APG/ThreadSafety/TSS.cpp: + * examples/APG/Threads/Condition_Variables.cpp: + * examples/APG/Threads/Mutexes.cpp: + * examples/APG/Threads/Message_Queue.cpp: + Fixed to compile without ACE_HAS_THREADS enabled. + +Mon May 10 18:40:43 UTC 2004 Johnny Willemsen + + * ace/config-cygwin32.h: + Added define of ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS. Cygwin + has this and first tests show that now some threading tests + run without problems. Let wait for a new fresh daily build to + tackle the next failing test. + +Mon May 10 12:15:45 2004 Simon McQueen + + * ace/CDR_Stream.cpp (read_wchar): + + Replaced use of read_octet_array with read_array to take + account of the endianness of the stream when demarshalling + a wchar. This closes bug 1807. + +Mon May 10 10:24:23 UTC 2004 Johnny Willemsen + + * ace/Time_Value.inl: + Fixed incorrect trace + +Mon May 10 06:22:21 UTC 2004 Johnny Willemsen + + * bin/fuzz.pl: + The files with extension icc shouldn't be in the repo + also, so extended the noncvs files with this extension + +Sun May 9 13:12:37 2004 Tao Lu + + * bin/MakeProjectCreator/config/global.features: + Added dnc to the default features to avoid unintentional + building of $CIAO_ROOT/DnC directory. + +Sun May 9 16:07:00 2004 Marek Brudka + + * bin/fuzz.pl: + Script checks now if file names are not too long. Names + exceeding 50 characters are classified as an error (QNX limit), + MPC files longer than 30 characters lead to warnings as MPC can + add some characters eg. .depend.GNUmakefile. + +Sun May 9 13:20:22 UTC 2004 Johnny Willemsen + + * bin/fuzz.pl: + Files with extension dsp and dsw and the GNUmakefile* files + shouldn't be in the repo, so added these to the noncvs file + check + +Sun May 9 12:59:11 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Updated name of project file we must build first when doing a static + msvc build. This has to be done because of the changes of + Marek Brudka to get smaller filenames + +Sat May 8 16:25:31 2004 Balachandran Natarajan + + * ace/Time_Value.h: + * ace/Time_Value.inl: + + Added an operator=. Without this, the + ACE_HAS_TIMED_MESSAGE_BLOCK has no chance of working. + +Sat May 8 00:10:23 2004 Ossama Othman + + * apps/JAWS3/jaws3/Concurrency.h: + + Use the "ACE_SYNCH" trait instead of "ACE_MT_SYNCH". Doing so + allows the JAWS3 library to build in a single threaded + environment. Fixes single-threaded build compile-time errors. + + * ace/Synch_Traits.h: + + Corrected doxygen documentation. + +Fri May 7 15:59:30 2004 Ossama Othman + + * Kokyu/tests/DSRT_MIF/MIF.cpp (svc): + + Fixed "variable set but never used" Compaq C++ warning. + + * ace/TMCast/Protocol.cpp: + + Fixed "declared but never referenced" Compaq C++ warning. + +Fri May 7 14:45:16 2004 Ossama Othman + + * GNUmakefile: + + Removed this GNUmakefile. It must now be generated by MPC. The + kit creation code in this file will be moved to the + bin/make_release script. + +Fri May 7 17:26:33 2004 Steve Huston + + * include/makeinclude/platform_aix_ibm.GNU: Changed the rtti default + to 1 and changed the associated -qrtti option from dynamiccast to + all since some parts of ACE use type IDs. + + * ASNMP/asnmp/sagent.h: Added implied keyword "private" to sagent's + derivation. Quiets a warning from Visual Age C++. + + * apps/JAWS3/jaws3/Event_Dispatcher.cpp: Added #include + "ace/Log_Msg.h" to pick up logging macros. Removed #include + "ace/OS.h". + + * examples/Reactor/Proactor/test_cancel.cpp: + * examples/Reactor/Proactor/test_proactor.cpp: + * examples/Reactor/Proactor/test_udp_proactor.cpp: + * performance-tests/Synch-Benchmarks/synch_driver.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/adaptive_mutex_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/adaptive_recursive_lock_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/adaptive_sema_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/pipe_proc_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/pipe_thr_test.cpp: + * performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.cpp: + * performance-tests/Synch-Benchmarks/Base_Test/base_test.cpp: + * performance-tests/Synch-Benchmarks/Base_Test/mutex_test.cpp: + Added #include for OS_NS_*.h methods and/or "ace/Log_Msg.h" to + pick up logging macros. + + * performance-tests/Synch-Benchmarks/Perf_Test/guard_test.cpp: Added + #include "ace/Guard_T.h" to see ACE_GUARD macros and classes. + + * performance-tests/Synch-Benchmarks/Perf_Test/memory_test.cpp: Added + #include "ace/OS_NS_string.h" to see ACE_OS stuff. + + * performance-tests/Synch-Benchmarks/Perf_Test/recursive_lock_test.cpp: + Added #include "ace/Recursive_Thread_Mutex.h" to find that class. + + * performance-tests/Synch-Benchmarks/Perf_Test/rwrd_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/rwwr_test.cpp: Added + #include "ace/RW_Mutex.h" to find that class. + +Fri May 7 14:25:07 2004 Ossama Othman + + * ace/Log_Msg.cpp: + + Don't bother checking if errno is less than sys_nerr on glibc + platforms. strerror() can handle values greater than sys_nerr + gracefully. Fixes "`sys_nerr' is deprecated; use `strerror' or + `strerror_r' instead" link-time warnings. + + Replaced deprecated ACE cast macro usage with ANSI C++ cast + counterparts. + +Fri May 7 09:38:06 2004 Ossama Othman + + * ace/Mutex.h: + + Fixed doxygen documentation. + + Removed "ace/Log_Msg.h" include. It isn't needed in this + header. + + * ace/Mutex.cpp: + + Include "ace/Log_Msg.h" to pull in ACE_ERROR macros. + +Fri May 7 08:08:05 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Reverted my change from Thu May 6 12:16:16 2004. It can cause + problems when all the generated files are present, but are + out-of-date. + +Fri May 7 12:15:33 UTC 2004 Johnny Willemsen + + * ace/config*.h: + Removed setting of ACE_NTRACE to 1 when it is not set, this is + already done in config-all.h, so there is no need to do it + in each config file seperately. + +Fri May 7 09:48:32 UTC 2004 Johnny Willemsen + + * include/makeinclude/build_example.bor: + Removed this file, with the MPC transition we don't use it anymore + +Fri May 7 09:11:21 UTC 2004 Johnny Willemsen + + * ace/OS_Export.h: + Removed this file, with the rework in ACE_OS the ACE_OS_Export has + been deprecated and not used. This file is only used in the ACE + library itself and not by users, so it is safe to remove this. + This fixes bugid 1700. + + * ace/ace.mpc: + * ace/config-win32-ghs.h: + Removed usage of ACE_OS_BUILD_DLL and ACE_OS_HAS_DLL + +Thu May 6 22:15:14 2004 Ossama Othman + + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + * include/makeinclude/wrapper_macros.GNU: + + ".inl" is now the default TAO_IDL generated stub/skeleton inline + file extension instead of ".i". The latter is generally used + for preprocessed C sources. Updated these files accordingly. + +Thu May 7 02:00:00 2004 Marek Brudka + + * examples/Service_Configurator/IPC-tests/: + * Service_Configurator_IPC_Client.mpc move to Svc_Cfg_IPC_Client.mpc + * _test postix appended to resulting executables to ensure conformance with + examples/Service_Configurator/IPC-tests/README + * examples/Service_Configurator/IPC-tests/README: modified to reflect saome name + changes + * examples/Service_Configurator/IPC-tests/server/svc.conf repaired as for some time + shared library is called IPC_Tests_Server, but not just Server + * examples/C++NPv2/C++NPv2.moc: project names with *Logging* changed to *Log* + * performance-tests/Server_Concurrency/Queue_Based_Workers/Server_Concurrency_Queue_Based_Workers.mpc: + moved to Svr_Conc_Queue_Based_Workers.mpc + * performance-tests/Server_Concurrency/Leader_Follower/Server_Concurrency_Leader_Follower.mpc: + moved to Svr_Conc_Leader_Follower.mpc + +Thu May 6 12:16:16 2004 Chad Elliott + + * ACEXML/common/common.mpc: + + Since Source_Files is now specified, we need to also specify the + Header_Files that do not correspond to any cpp files. + + * bin/MakeProjectCreator/config/notification.mpb: + + The TAO_CosNotification library needs the TAO_Svc_Utils library. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Only use the .NOTPARALLEL: rule if all of the generated files have + not been generated. This can speed up parallel builds on a + rebuild and on projects that share generated source files. + +Thu May 6 12:43:29 2004 Steve Huston + + * examples/Bounded_Packet_Relay/BPR_Drivers.cpp: + * examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.cpp: + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: + * examples/C++NPv2/TPC_Logging_Server.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-client.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-client-simple.cpp: + Added missing #includes so Visual Age C++ can see ACE_OS methods. + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: Moved the declarations + of AC_Input_Handler and AC_Output_Handler to a new file, + AC_Client_Logging_Daemon.h, so Visual Age C++ can see them when + instantiating templates. + + * examples/C++NPv2/AIO_Client_Logging_Daaemon.cpp: Moved the + declarations of AIO_Input_handler, AIO_Output_Handler, and + AIO_CLD_Connector to a new file, AIO_Client_Logging_Daemon.h, + so Visual Age C++ can see them when instantiating templates. + + * examples/Reactor/Proactor/test_cancel.cpp: + * examples/Reactor/Proactor/test_proactor.cpp: Moved the declaration + of the Receiver class to a new file, test_cancel.h and + test_proactor.h respectively, so Visual Age C++ can see it when + instantiating templates. + +Thu May 6 11:04:22 2004 Steve Huston + + * examples/DLL/Today.{h cpp}: + * examples/DLL/Newsweek.{h cpp}: Added a nothrow-variant operator + new if ACE_HAS_NEW_NOTHROW is defined. The ACE_NEW_* macros use + nothrow when available. + +Wed May 5 23:35:33 2004 Ossama Othman + + * ace/Get_Opt.cpp (~ACE_Get_Opt_Long_Option): + + MSVC++ 6 can't deal with delete[]ing a const ACE_TCHAR *. + Reintroduced a const_cast<> that addresses this issue by + reverting a portion of the change in the "Wed May 5 14:14:53 + 2004 Ossama Othman " set of + changes. + +Wed May 5 23:27:36 2004 Ossama Othman + + * ace/OS_NS_sys_stat.inl (fstat): + + Corrected static_cast<> typo in Win32 case. Fixes Win32 + compile-time errors. + +Wed May 5 22:30:44 2004 Ossama Othman + + * Kokyu/tests/DSRT_MIF/MIF.cpp: + * apps/JAWS3/jaws3/Concurrency.h: + * examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.cpp: + * examples/Smart_Pointers/widget_test.cpp: + * performance-tests/Server_Concurrency/Leader_Follower/leader_follower.cpp: + * performance-tests/Server_Concurrency/Queue_Based_Workers/workers.cpp: + * performance-tests/Synch-Benchmarks/Base_Test/mutex_test.cpp: + + Include appropriate headers to fix undefined type compile-time + errors. + + * examples/Reactor/Proactor/test_timeout.cpp: + + Changed ACE_Atomic_Op<> lock template parameter from + ACE_Thread_Mutex to ACE_SYNCH_MUTEX. Allows this file to build + in single threaded builds. + +Wed May 5 16:34:13 2004 Ossama Othman + + * ace/CDR_Base.h (ACE_CDR): + + Improved doxygen documentation of basic CDR/IDL types. + + (ACE_CDR::Boolean): + + Versions of GNU G++ less than version 3.0 defined a pre-C99 bool + type that was an enumeration. In some cases the enumeration + could be promoted to an int, causing a potential problem where a + 4 byte integer (for example) could be selected when attempting + to send a boolean over a CDR stream. + +Wed May 5 18:10:32 2004 Steve Huston + + * examples/IPC_SAP/SSL_SAP/SSL-server-poll.cpp: Change #include + to "ace/OS_NS_stdio.h" since ACE_OS::fprintf() is used. + +Wed May 5 14:14:53 2004 Ossama Othman + + * ace/Future.h (ACE_Future_Rep): + * ace/Map_Manager.h (ACE_Map_Manager): + * ace/Refcounted_Auto_Ptr.h: + + Declare lock members as "mutable" to avoid using a + const_cast<> hack in const methods that modify the lock + member through an ACE_GUARD. + + * ace/Future.cpp (get): + * ace/Map_Manager.i (current_size, total_size): + * ace/Refcounted_Auto_Ptr.i: + + Removed const_cast<> around lock member. It is no longer + needed since the lock member is now declared "mutable". + + * ace/CDR_Stream.h: + + Minor Doxygen documentation update. + + * ace/ACE.cpp: + * ace/ARGV.cpp: + * ace/ARGV.i: + * ace/ATM_Acceptor.cpp: + * ace/ATM_Connector.cpp: + * ace/ATM_Stream.cpp: + * ace/Acceptor.cpp: + * ace/Activation_Queue.cpp: + * ace/Arg_Shifter.cpp: + * ace/Asynch_Acceptor.cpp: + * ace/Asynch_Connector.cpp: + * ace/Asynch_IO.cpp: + * ace/Atomic_Op.cpp: + * ace/Atomic_Op.i: + * ace/Base_Thread_Adapter.cpp: + * ace/Based_Pointer_T.i: + * ace/Basic_Stats.cpp: + * ace/Basic_Types.h: + * ace/Basic_Types.i: + * ace/CDR_Base.cpp: + * ace/CDR_Base.inl: + * ace/CDR_Stream.cpp: + * ace/CDR_Stream.i: + * ace/Caching_Utility_T.cpp: + * ace/Cleanup.cpp: + * ace/Codecs.cpp: + * ace/Codeset_IBM1047.cpp: + * ace/Condition_T.inl: + * ace/Configuration.cpp: + * ace/Connector.cpp: + * ace/Containers_T.cpp: + * ace/DEV_Addr.i: + * ace/DEV_IO.cpp: + * ace/DEV_IO.i: + * ace/DLL.cpp: + * ace/DLL_Manager.cpp: + * ace/Dev_Poll_Reactor.cpp: + * ace/Dynamic_Service.cpp: + * ace/Env_Value_T.h: + * ace/FIFO_Recv_Msg.i: + * ace/FIFO_Send_Msg.cpp: + * ace/FIFO_Send_Msg.i: + * ace/FILE_Addr.cpp: + * ace/FILE_Connector.cpp: + * ace/FILE_IO.cpp: + * ace/FlReactor.cpp: + * ace/Framework_Component.cpp: + * ace/Functor_T.i: + * ace/Future_Set.cpp: + * ace/Get_Opt.cpp: + * ace/Global_Macros.h: + * ace/Hash_Map_Manager_T.cpp: + * ace/Hash_Map_Manager_T.i: + * ace/High_Res_Timer.cpp: + * ace/INET_Addr.cpp: + * ace/INET_Addr.i: + * ace/Lib_Find.cpp: + * ace/Local_Name_Space.cpp: + * ace/Log_Record.i: + * ace/MEM_Addr.cpp: + * ace/MEM_Connector.cpp: + * ace/MEM_IO.i: + * ace/MEM_SAP.i: + * ace/Malloc_T.cpp: + * ace/Malloc_T.i: + * ace/Mem_Map.cpp: + * ace/Mem_Map.i: + * ace/Memory_Pool.i: + * ace/Message_Queue.i: + * ace/Multihomed_INET_Addr.cpp: + * ace/Mutex.inl: + * ace/Name_Proxy.cpp: + * ace/Name_Request_Reply.cpp: + * ace/OS_NS_Thread.inl: + * ace/OS_NS_arpa_inet.inl: + * ace/OS_NS_dirent.inl: + * ace/OS_NS_dlfcn.inl: + * ace/OS_NS_math.inl: + * ace/OS_NS_netdb.inl: + * ace/OS_NS_signal.inl: + * ace/OS_NS_stdio.inl: + * ace/OS_NS_stdlib.inl: + * ace/OS_NS_string.inl: + * ace/OS_NS_stropts.inl: + * ace/OS_NS_sys_msg.inl: + * ace/OS_NS_sys_shm.inl: + * ace/OS_NS_sys_socket.inl: + * ace/OS_NS_sys_stat.inl: + * ace/OS_NS_time.inl: + * ace/OS_NS_unistd.inl: + * ace/OS_TLI.inl: + * ace/Object_Manager.i: + * ace/Obstack_T.i: + * ace/Process.cpp: + * ace/Process_Manager.cpp: + * ace/Profile_Timer.cpp: + * ace/RB_Tree.i: + * ace/Recursive_Thread_Mutex.inl: + * ace/Registry.cpp: + * ace/SOCK.cpp: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_Dgram.i: + * ace/SOCK_IO.cpp: + * ace/SOCK_IO.i: + * ace/SPIPE_Addr.cpp: + * ace/SPIPE_Stream.cpp: + * ace/SString.i: + * ace/SUN_Proactor.cpp: + * ace/SV_Semaphore_Simple.cpp: + * ace/SV_Semaphore_Simple.h: + * ace/Select_Reactor_Base.cpp: + * ace/Service_Config.cpp: + * ace/Service_Manager.cpp: + * ace/Service_Object.cpp: + * ace/Service_Types.cpp: + * ace/Service_Types.i: + * ace/Shared_Memory_MM.i: + * ace/Shared_Memory_SV.i: + * ace/Signal.i: + * ace/Stats.cpp: + * ace/Strategies_T.cpp: + * ace/String_Base.cpp: + * ace/String_Base.i: + * ace/Svc_Conf.h: + * ace/Task.cpp: + * ace/Thread_Adapter.cpp: + * ace/Thread_Manager.i: + * ace/Time_Value.inl: + * ace/Typed_SV_Message_Queue.i: + * ace/ace_wchar.inl: + + Converted all uses of ACE cast macros to their corresponding + ANSI C++ equivalent. The ACE cast macros are deprecated. + + * ace/OS_NS_fcntl.h: + + Nuked trailing whitespace. + +Wed May 5 16:16:33 2004 Steve Huston + + * ace/WIN32_Proactor.cpp (post_completion): reinterpret_cast the void* + to ULONG_PTR on Win64. + +Wed May 5 14:52:21 2004 Steve Huston + + * apps/soreduce/Library.cpp: + * apps/soreduce/Obj_Module.cpp: + * apps/soreduce/Sig_List.cpp: + * apps/soreduce/SO_Group.cpp: + * examples/Connection/blocking/SPIPE-acceptor.cpp: + * examples/Connection/blocking/SPIPE-connector.cpp: + * examples/OS/Process/process.cpp: + * examples/Reactor/Proactor/test_end_event_loop.cpp: + * examples/Reactor/Proactor/post_completions.cpp: + * examples/Reactor/Proactor/test_proactor.cpp: + * examples/Reactor/Proactor/test_timeout.cpp: + * examples/Reactor/Proactor/test_udp_proactor.cpp: + * examples/Service_Configurator/Misc/Timer_Service.cpp: + * examples/Threads/cancel.cpp: + * examples/Web_Crawler/Command_Processor.cpp: + * examples/Web_Crawler/HTTP_URL.cpp: + * examples/Web_Crawler/Options.{h cpp}: + * examples/Web_Crawler/URL_Visitor.cpp: Added #includes for various + "ace/OS_NS_*.h" files to let Visual Age C++ see missing methods. + + * apps/soreduce/Obj_Module.h: Added forward declaration for + ACE_Message_Block. + + * examples/Misc/test_XtReactor1.cpp: + * examples/Misc/test_XtReactor2.cpp: + * examples/OS/Process/imore.cpp: + * performance-tests/Synch-Benchmarks/Synch_Lib/Benchmark_Base.cpp: + Added #include "ace/Log_Msg.h". + +Wed May 5 09:18:00 2004 Justin Michel + + * ace/OS_NS_unistd.inl: + + Attempt to use ::gethostname() on Win32, before falling back to + GetComputerName(), to implement ACE_OS::hostname(). The latter + returns the NetBios name, which may not be the same as the DNS + name. + +Wed May 5 09:13:46 2004 Carlos O'Ryan + + * ace/ace.mpc: + * ace/Auto_Functor.h: + * ace/Auto_Functor.inl: + * ace/Auto_Functor.cpp: + Moved from TAO/tao, this class provides auto_ptr<>-like + functionality, what to do on destruction is controlled by a + functor. So, you could write auto_ptr<> and + ACE_Auto_Array_Ptr<> in terms of it, and many other similar + classes. + +Tue May 4 18:32:49 2004 Steve Huston + + * apps/mkcsregdb/mkcsregdb.cpp: Added #includes to pick up missing + ACE_OS methods on AIX. + +Tue May 4 18:16:33 2004 Steve Huston + + * ace/OS_NS_stdio.cpp (checkUnicodeFormat): ACE_OS::fread() returns + size_t, not int. + + * ace/WIN32_Proactor.cpp (register_handle): reinterpret_cast the void* + to ULONG_PTR on Win64. + + * apps/soreduce/Obj_Module.{h cpp} (add_source): + * apps/soreduce/Library.{h cpp} (ctor, load_modules, set_path): + Changed path arugment and usage from ACE_TCHAR* to char*. It's + used only with narrow chars throughout the rest of the sources. + +Tue May 4 09:51:24 2004 Balachandran Natarajan + + * bin/make_release: + + Fix for [BUG 1798]. Thanks to Johnny for reporting this bug. + +Mon May 3 18:12:30 2004 Steve Huston + + * ace/TMCast/MTQueue.hpp: Remove 'mutable' from the mutex_ member. + Visual Age C++ says you can only 'mutable' a non-reference member. + + * ace/TMCast/TransactionController.hpp: Added #include + "ace/OS_NS_string.h" so Visual Age C++ can find ACE_OS::memcpy(). + Added #include to enable typeid operator. + + * Kokyu/tests/DSRT_MIF/MIF.cpp: Added #include "ace/ACE.h" so Visual + Age C++ can see ACE::is_prime(). + + * Kokyu/tests/EDF/test.cpp: Added #include "ace/OS_NS_sys_time.h" so + Visual Age C++ can see ACE_OS::gettimeofday(). + + * ASNMP/asnmp/octet.cpp (to_string_hex): Instead of using separate + #if/#endif blocks for fmt, one for WIN32, and one for __unix, use + #if WIN32, #else. __unix wasn't defined for Visual Age C++ 6. + + * apps/JAWS/clients/Blobby/Blob.cpp: + * apps/JAWS/clients/Blobby/Blob_Handler.cpp: Added #include + "ace/OS_NS_string.h" so Visual Age C++ can see ACE_OS:: string + methods. + +Mon May 3 13:13:00 2004 Chad Elliott + + * bin/MakeProjectCreator/config/mfc.mpb: + + Removed this file. + + * bin/MakeProjectCreator/config/ace_mfc.mpb: + + The majority of the mfc has been moved out into the MPC config + directory. The ace_mfc base project now inherits from mfc and + adds ACE_HAS_MFC=1 to the macros. + + * examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.mpc: + + Inherit from ace_mfc instead of mfc. + + * bin/cle.pl: + + Enhanced the domain name detection on Windows. + +Mon May 3 09:58:25 2004 Ossama Othman + + * include/makeinclude/rules.local.GNU: + * include/makeinclude/rules.nested.GNU: + + Changed references to "Makefile" to "GNUmakefile". + +Mon May 3 00:00:00 2004 Ossama Othman + + * Makefile*: + + Removed all Makefiles. GNUmakefiles must now be generated by + MPC. + +Sun May 2 13:53:12 UTC 2004 Johnny Willemsen + + * ace/Task.cpp (svc_run): + Also MSVC8 needs to use the static cast instead of reinterpet + case. + +Sat May 1 22:23:35 2004 Ossama Othman + + * Makefile: + * bin/Makefile: + * GNUmakefile: + * bin/GNUmakefile: + + Renamed "Makefile"s to "GNUmakefile"s to make it obvious to + users that GNU Make is required to parse the files. + + * bin/ace-install: + * bin/ace_components: + * bin/count_lines: + * bin/create_ace_build.pl: + * bin/fuzz.pl: + * bin/g++dep: + * bin/make_release: + * bin/perltest2cpp.pl: + * bin/update-ace+tao.sh: + + Updated to references to "Makefile" to use the new name + "GNUmakefile". + +Sat May 01 17:12:21 UTC 2004 Johnny Willemsen + + * apps/Gateway/Gateway/Options.{h,cpp}: + Fixed compile problems in unicode build + +Sat May 01 13:52:32 UTC 2004 Johnny Willemsen + + * ace/SSL/SSL_Asynch_Stream.h: + Doxygen improvement + +Sat May 01 13:17:54 UTC 2004 Johnny Willemsen + + * ace/TMCast/MTQueue.hpp: + Fixed unused parameter warnings + +Sat May 01 12:58:43 UTC 2004 Johnny Willemsen + + * examples/APG/Logging/LogManager.h: + * examples/APG/Logging/Use_Multiple_Sinks.cpp: + * examples/APG/Logging/Use_Ostream.cpp: + Changed checking for _MSC_VER, first check if this define is + set. This fixes warnings in the GCC 3.4 build. + +Sat May 01 11:51:34 UTC 2004 Johnny Willemsen + + * docs/minimumTAO.html: + Updated link for footprint stats. + +Sat May 01 11:20:32 UTC 2004 Johnny Willemsen + + * Kokyu/tests/FIFO/test.cpp: + Fixed compile problems in unicode builds + +Sat May 01 09:44:21 UTC 2004 Johnny Willemsen + + * ACE-INSTALL.html: + Updated Remedy supported platforms, updated Borland build info + and added a non supported platforms section where we list the + platforms that have been supported in the past, but are now + not anymore. + +Fri Apr 30 18:11:35 2004 Ossama Othman + + * PACE: + + Removed PACE from the ACE CVS module. It is no longer + maintained. + + * configure.ac: + + Do not define ACE_HAS_ANSI_CASTS if the compiler supports ANSI + C++ casts. ACE now requires that support. If the compiler does + not support ANSI C++ casts, issue an error message accordingly. + + * m4/config_h.m4 (ACE_PREP_CONFIG_HEADER): + + Removed template for ACE_HAS_ANSI_CASTS macro. It is no longer + used. [Bug 1758] + + * ace/README: + + Removed description for ACE_HAS_ANSI_CASTS macro. It is no + longer used since compilers that do not support ANSI C++ casts + are no longer supported. [Bug 1758] + + * ace/config-lite.h: + + Removed ACE cast macros that wrap C style casts, i.e those used + when ACE_HAS_ANSI_CASTS is not defined. ACE now requires + compilers that support ANSI C++ casts (e.g. static_cast<>, + etc). [Bug 1758] + + Documented ACE cast macros as deprecated. + + * ace/config-win32-msvc.h: + + Do not support the MSVC++ 5 configuration header. MSVC++ 5 is + no longer supported. + + * ace/config-win32-msvc-5.h: + + Removed this configuration header. MSVC++ 5 has not been + supported for quite some time. + + * ace/config-borland-common.h: + * ace/config-chorus.h: + * ace/config-cray.h: + * ace/config-cxx-common.h: + * ace/config-g++-common.h: + * ace/config-hpux-10.x-hpc++.h: + * ace/config-hpux-11.00.h: + * ace/config-icc-common.h: + * ace/config-integritySCA.h: + * ace/config-macosx-panther.h: + * ace/config-macosx.h: + * ace/config-openvms.h: + * ace/config-osf1-4.0.h: + * ace/config-qnx-rtp-62x.h: + * ace/config-sunos5.5.h: + * ace/config-sunos5.6.h: + * ace/config-tandem-nsk-mips-v2.h: + * ace/config-unixware-7.1.0.udk.h: + * ace/config-win32-ghs.h: + * ace/config-win32-msvc-6.h: + * ace/config-win32-msvc-7.h: + * ace/config-win32-visualage.h: + + Removed all references to the deprecated ACE_HAS_ANSI_CASTS + macro. [Bug 1758] + +Fri Apr 30 14:20:41 2004 Steve Huston + + * include/makeinclude/platform_aix_g++.GNU: For AIX 5.x, changed the + SOFLAGS link option -Wl,-bexpall to -Wl,-bexpfull. This allows the + gcc 3.x type information to be exported to the library and useable + by applications. Thanks very much to Randy Hammon + for this fix! + Also, if rtti=0, add -DACE_LACKS_RTTI to CFLAGS in addition to adding + -fno-rtti. Also changed the rtti default from 0 to 1. + + * THANKS: Added Randy Hammon to the Hall of Fame. + +Fri Apr 30 10:19:28 2004 Steve Huston + + * ace/OS_NS_sys_socket.inl (read): Fix typo, missing _. + +Thu Apr 29 14:17:46 2004 Ossama Othman + + * ace/config-doxygen.h (OPENSSL_VERSION_NUMBER): + + Define this macro to be greater than a certain value so that the + ACE_SSL asynchronous IO class documentation can be generated by + Doxygen. [Bug 1748] + +Thu Apr 29 13:48:30 2004 Ossama Othman + + * ace/OS_NS_sys_socket.inl (sendv): + + Corrected problem for the Winsock 1 case where the amount of + previously sent data would not be reported if an error occurred + when attempting to send data in a subsequent loop iteration. + + (accept, recv, send): + * ace/OS_NS_unistd.inl (read): + + Do not set errno to EWOULDBLOCK when errno is set to EAGAIN and + EGAIN equals EWOULDBLOCK. This saves us two (equality check and + assignment) TSS accesses for the _REENTRANT case on platforms + where EGAIN and EWOULDBLOCK are the same (e.g. Linux). + Performance improvements should be evident those platforms. + + * ace/OS_NS_sys_uio.cpp (writev_emulation): + + Replaced the old implementation with a new faster one based on + the one in ace/SSL/SSL_SOCK_Stream.cpp that incurs no + allocations nor copies. The new implementation can also handle + partial writes. Performance improvements should be visible on + platforms that do not support writev() (i.e. define + ACE_LACKS_WRITEV), such as MS Windows. + +Thu Apr 29 14:35:49 2004 Steve Huston + + * ace/SOCK_SEQPACK_Connector.cpp (shared_connect_start): Corrected + sizeof() usage; error introduced at: + Thu Apr 29 11:25:49 2004 Steve Huston + +Thu Apr 29 11:37:12 2004 Steve Huston + + * ace/SSL/SSL_Context.cpp: Add #include "ace/Guard_T.h" so AIX Visual + Age C++ can see ACE_Guard. + + * tests/Refcounted_Auto_Ptr_Test.cpp: Add #include "ace/Null_Mutex.h" + so AIX Visual Age C++ can see ACE_Null_Mutex when instantiating + templates. + +Thu Apr 29 11:25:49 2004 Steve Huston + + These are all to quiet the 64-bit compiler on Win64. + + * ace/CDR_Stream.i (write_wstring): cast size_t return from + ACE_OS::strlen() to ACE_CDR::ULong to correct types. + + * ace/OS_NS_stropts.inl (putmsg): ACE_OS::write() returns ssize_t; + cast it back to int for return to caller. + + * ace/OS_NS_sys_uio.{h, inl, .cpp}: writev() returns ssize_t. Thus, + the writev_emulation() method also must return ssize_t. Also + corrected the ACE_OSCALL_RETURN 'type' argument from int to ssize_t. + + * ace/Process.cpp (spawn): When forming the +H command line options, + use %I64d, not %d, on Win64. + + * ace/SOCK_SEQPACK_Acceptor.cpp (shared_open): Cast the 'namelen' + argument to ACE_OS::bind() to int to match the signature. + + * ace/SOCK_SEQPACK_Association.{h i} (recvv_n, sendv_n): The iovec + count was changed from size_t to int to be consistent with the + other analogous methods in ACE. + + * ace/SOCK_SEQPACK_Association.cpp (get_local_addrs, get_remote_addrs): + Correct usage of int/size_t types. + + * ace/SOCK_SEQPACK_Connector.cpp (shared_connect_start): Use 'int', + not 'size_t' as address length argument to ACE_OS::bind(). + + * ace/UUID.cpp (to_string): Change UUID_STRING_LENGTH from int to + size_t to match string handling length types. + +Thu Apr 29 06:13:21 UTC 2004 Johnny Willemsen + + * examples/APG/ThreadSafety/Tokens_Deadlock.cpp: + Include ace/OS_NS_unistd.h to get ACE_OS sleep + +Wed Apr 28 22:06:08 2004 Ossama Othman + + * ace/Basic_Stats.cpp: + * ace/Parse_Node.cpp: + * ace/Sample_History.cpp: + * ace/Stats.cpp: + + Fixed unused parameter and variable warnings in the ACE_NLOGGING + case. + + * netsvcs/lib/Token_Handler.cpp: + + Include "ace/Signal.h" to pull in ACE_Sig_Action class + declaration. + +Wed Apr 28 14:25:21 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/gnu.mpd: + Removed $(EXEEXT) for BIN_UNCHECKED. This has strange problems + in our MinGW build. We are looking at this again for OpenVMS. + +Wed Apr 28 13:00:22 UTC 2004 Johnny Willemsen + + * ace/Mutex.{cpp,inl}: + - Improved the dump() method. + - Release all resources in the remove() + - Changed the constructor not to allocate unnecessary resource + (thread mutex) in case process shared mutex is requested + *and* supported + Change from Martin Corino + +Wed Apr 28 12:53:32 UTC 2004 Johnny Willemsen + + * ace/Lib_Find.cpp: + * ace/Memory_Pool.cpp: + Added missing quotes to the ACE_RCSID macro. + +Wed Apr 28 12:19:32 UTC 2004 Johnny Willemsen + + First checkin of the OpenVMS port of ACE. This port is done by + Martin Corino . This is not finished yet, we have + to do more testing but a lot of the ACE tests work without problems. + Documentation and readmes will be updated in the near future with + an explanation how to use ACE on OpenVMS. + + * ace/Mem_Map.cpp (open): + Added special VMS sharing attributes for memory map file ::open() + + * ace/Memory_Pool.cpp (commit_backing_store_name): + ::fsync() called to make sure change is commited to disk. + + * ace/Lib_Find.cpp (ldfind, ldname): + Added OpenVMS way of finding shared libraries + + * ace/ACE.i (recv_i): + OpenVMS cannot ::read() on socket, must use ::recv() + + * ace/OS_NS_sys_stat.inl (fstat): + Called ::fsync() before calling ::fstat() to make sure all changes + have been commited to disk + + * ace/OS_NS_sys_mman.inl: + In ACE_OS::mmap() added ::fsync() before ::mmap() to make sure all + is committed to disk. + In ACE_OS::shm_open() added special OpenVMS sharing attributes for + memory map file ::open() + + * ace/config-openvms.h: + New config file for OpenVMS 7.3-2. + + * include/makeinclude/platform_openvms.GNU: + New file for OpenVMS 7.3-2 + + * bin/MakeProjectCreator/templates/gnu.mpd: + Use $(EXEEXT) for BIN_UNCHECKED. + +Wed Apr 28 09:34:11 UTC 2004 Johnny Willemsen + + * include/makeinclude/rules.local.GNU: + Added special way of pwd retrieval for mingw because the normal + way gives problems under mingw. Thanks to Martin Corino + for creating this patch. + +Wed Apr 28 06:19:32 UTC 2004 Johnny Willemsen + + * ace/OS_NS_stdio.cpp (DllMain): + Replaced check for ACE_OS_HAS_DLL with ACE_HAS_DLL. ACE_OS_HAS_DLL + is deprecated and will be removed in the near future. Thanks to + Felix Wyss for reporting this. + +Wed Apr 28 06:13:13 UTC 2004 Johnny Willemsen + + * tests/Pipe_Test.cpp: + * tests/Process_Mutex_Test.cpp: + Fixed compile problems in unicode builds + +Tue Apr 27 18:15:40 2004 Steve Huston + + * ace/OS_NS_Thread.inl (rw_trywrlock_upgrade): If on a platform + with ACE_HAS_PTHREADS_UNIX98_EXT, try the call. It'll probably fail, + but the error is more accurate than ENOTSUP. + + * tests/Reader_Writer_Test.cpp: Realign the diagnostics on write lock + upgrade failure to match the #if/#else logic in + ACE_OS::rw_trywrlock_upgrade(). Add some %p to the output to help + more in failure conditions. + +Tue Apr 27 08:31:21 UTC 2004 Johnny Willemsen + + * examples/APG/ThreadPools/TP_Reactor.cpp: + * examples/APG/Threads/Message_Queue.cpp: + Don't use ACE_Reactor deprecreated methods. + +Tue Apr 27 08:18:23 UTC 2004 Johnny Willemsen + + * tests/MT_Reactor_Timer_Test.cpp: + * tests/Notify_Performance_Test.cpp: + * tests/Service_Config_Test.cpp: + * tests/TP_Reactor_Test.cpp: + * tests/Thread_Pool_Reactor_Resume_Test.cpp: + * tests/Thread_Pool_Reactor_Test.cpp: + Don't use ACE_Get_Opt and ACE_Reactor deprecreated methods. + +Mon Apr 26 17:21:39 2004 Steve Huston + + * configure.ac: Change the tests for sem_init() and sem_destroy() to + use AC_SEARCH_LIBS instead of AC_CHECK_FUNC. The entrypoints are in + librt, so weren't being located. This allows ACE_HAS_POSIX_SEM to + be detected correctly. + +Mon Apr 26 17:31:11 UTC 2004 Johnny Willemsen + + * ace/Acceptor.cpp: + Use ACE_Reactor::instance()->end_reactor_event_loop () to end the + event loop instead of the deprecated ACE::Reactor::end_event_loop() + +Mon Apr 26 02:09:01 2004 Ossama Othman + + * ace/CDR_Base.h (ACE_CDR::Boolean): + + This type is now a true C++ "bool". On a related note, the + OMG IDL-to-C++ mapping allows this type to be "bool" for ANSI + compliant compilers. All compilers currently supported by ACE + support the C++ "bool" type, so we're in luck. + + * ace/CDR_Stream.h: + + Made all single argument "{from,to}_*" constructors explicit (if + supported by the compiler), as required by the OMG IDL-to-C++ + mapping. Addresses potential implicit conversion issues. + + Fixed some broken Doxygen documentation. + + (good_bit_, do_byte_swap_, current_is_writable_): + + Converted these flags and their corresponding accessors from + "int" to "bool", and changed the declaration order to optimize + size of ACE_{Output,Input}CDR classes by avoiding unnecessary + static alignment padding. Both classes are now 8 + bytes smaller, at least on platforms with 4 byte alignment. + + * ace/CDR_Stream.i: + + Updated good_bit_, do_byte_swap_ and current_is_writable_ + assignments to use C++ "bool" values. + + * ace/CDR_Stream.cpp: + + Updated base member initializer lists to match new member + declaration order. + + Updated good_bit_, do_byte_swap_ and current_is_writable_ + assignments to use C++ "bool" values. + + Use "const" where applicable. + + Use prefix increment operator instead of postfix increment + operator where applicable. The former is more efficient. + +Mon Apr 26 15:05:12 UTC 2004 Johnny Willemsen + + * ace/Message_Queue.cpp: + In ACE_Message_Queue_NT::open() use ACTIVATED instead of + WAS_ACTIVE because the last is deprecated. + +Mon Apr 26 10:04:43 2004 Chad Elliott + + * bin/MakeProjectCreator/config/mfc.mpb: + + Within 'specific' sections, set the subsystem and use_mfc template + variables to correct values for use with MFC. + +Mon Apr 26 09:59:32 UTC 2004 Johnny Willemsen + + * ace/Memory_Pool.h: + Doxygen improvements + +Mon Apr 26 07:44:21 UTC 2004 Johnny Willemsen + + * os-patches/vxworks-5.1.txt: + Removed this file from the repo. It is not correct anymore + and we don't support VxWorks 5.1 anymore. + +Mon Apr 26 07:18:23 UTC 2004 Johnny Willemsen + + * tests/test_config.h: + Removed the non win32 version of ACE_APPEND_LOG. Bug 1792 + reported that child logs didn't work on non win32 platforms. + A tests on our linux system demonstrated that when we removed + the non win32 version of ACE_APPEND_LOG things works again + on Linux. This non win32 version did close the file stream + and this seems not logical. Thanks to Martin Corino + for reporting this. + +Sun Apr 25 23:17:26 2004 Ossama Othman + + * examples/IPC_SAP/SSL_SAP/SSL-client-simple.cpp: + + Include "ace/Null_Mutex.h" to pull in ACE_Null_Mutex class + declaration. + + * examples/IPC_SAP/SSL_SAP/SSL-server-poll.cpp: + + Include "ace/Log_Msg.h" and "ace/OS_NS_stdio.h" to pull + ACE_ERROR related macros and ACE_OS::perror() prototype, + respectively. + + * examples/IPC_SAP/SSL_SAP/Makefile: + + Added missing ACE SSL preprocessor and linker flags. + +Sun Apr 25 09:22:50 2004 Chad Elliott + + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + + Make use of new MPC features to correctly represent the output + files generated with various tao_idl options. + +Sun Apr 25 09:57:54 UTC 2004 Johnny Willemsen + + * tests/Tokens_Test.cpp: + Added include of ace/Barrier.h to fix compile error + +Sun Apr 25 09:52:13 UTC 2004 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added TAO/tests/Collocation/run_test.pl + +Fri Apr 23 22:35:23 2004 Ossama Othman + + * ace/Process_Manager.cpp (wait): + * ace/WFMO_Reactor.cpp (dispatch_handles): + + Fixed "pointless comparison of unsigned integer with zero" + MSVC++ 7.1 warning. + +Fri Apr 23 22:26:19 2004 Ossama Othman + + * examples/Web_Crawler/Iterators.cpp (next): + + Explicitly cast offset value from size_t to off_t to address + "change of sign in integer conversion" warning exhibited by + MSVC++ 7.1. + +Fri Apr 23 22:13:35 2004 Ossama Othman + + * ace/Token_Collection.h: + * ace/Token_Invariants.h: + + Include "ace/Null_Mutex.h" to pull ACE_Null_Mutex class + declaration. + +Fri Apr 23 20:25:05 2004 Ossama Othman + + * Kokyu/Kokyu_defs.h: + * Kokyu/Kokyu_defs.i: + + Changed return types for equality operators to "bool", as is the + norm for modern C++. + +Fri Apr 23 12:50:34 2004 Ossama Othman + + * tests/Config_Test.cpp (iniCompare): + + Changed type of equality flag variable from an "int" to a + "bool". Addresses a "'&=' : unsafe mix of type 'int' and type + 'bool' in operation" warning exhibited by MSVC++ 6. + +Fri Apr 23 11:23:04 2004 Ossama Othman + + * ace/Local_Tokens.cpp: + * ace/Local_Tokens.h: + * ace/Timeprobe.h: + + Do not include "ace/Synch{_T}.h". Include less expensive ones + instead. Fixes a "fuzz" error. + + * ace/Token_Manager.h: + + Moved "ace/Map_Manager.h" inclusion within the + ACE_HAS_TOKENS_LIBRARY block. There is no need to include it if + that macro isn't defined. + +Fri Apr 23 11:14:51 2004 Ossama Othman + + * examples/Smart_Pointers/Widget_Impl.h: + + Include "ace/Synch_Traits.h" and "ace/Thread_Mutex.h". + Necessitated by header inclusion reductions in + "ace/Refcounted_Auto_Ptr.*". + +Fri Apr 23 15:01:23 UTC 2004 Johnny Willemsen + + * tests/Thread_Manager_Test.cpp: + When ACE_LACKS_PTHREAD_KILL has been defined, don't fail on a + non supported kill. Thanks to Martin Corino + for extending this. + +Fri Apr 23 14:49:21 UTC 2004 Johnny Willemsen + + * tests/run_test.pl: + Changed the way we integrate with Codeguard. Removed the -g + commandline option and use "-Config Codeguard" to enable + inspection of codeguard logs. This is much easier to maintain + and this way the bin/auto_run_tests.pl doesn't need to be + modified. + +Fri Apr 23 10:30:31 2004 Steve Huston + + * tests/Recursive_Condition_Test.cpp: Missed a variable change. + +Fri Apr 23 07:35:41 2004 Steve Huston + + * ace/OS_NS_Thread.inl (mutex_init): Forgot some changes of type to + lock_scope for Windows. + +Fri Apr 23 11:24:21 UTC 2004 Johnny Willemsen + + * tests/run_test.pl: + Extended the checking of children logs. Some tests spawn child + processes and these processes log then to a different log + startin with the executable name, but then with a postfix. These + child logs are already inspected, but only for error and warning + not for the starting/ending lines. We now check whether starting + and ending is in the log file and also the number of starting + and ending lines must match. + +Fri Apr 23 06:18:43 UTC 2004 Johnny Willemsen + + * tests/Pipe_Test.cpp: + * tests/Process_Manager_Test.cpp: + * tests/Process_Mutex_Test.cpp: + * tests/Signal_Test.cpp: + * tests/Time_Service_Test.cpp: + These tests did check for ACE_LACKS_FORK but didn't use fork + at all, but ACE_Process::spawn() to spawn new processes. + This function has much more implementations, so removed the + check for fork. In case a platform doesn't support this test, + this should be solved in the run_tests.lst file. + +Fri Apr 23 06:15:13 UTC 2004 Johnny Willemsen + + * ace/OS_NS_Thread.inl: + Fixed incorrect check in ACE_OS::condattr_init() + +Thu Apr 22 22:22:59 2004 Ossama Othman + + * bin/clone.cpp: + * tests/Dirent_Test.cpp: + + Replaced "ace/OS.h" include with lighterweight "ace/OS_NS_*.h" + includes. Fixes "fuzz" errors. + +Thu Apr 22 20:54:26 2004 Ossama Othman + + * ace/SSL/SSL_Asynch_Stream.h: + * ace/SSL/SSL_Context.cpp: + * ace/SSL/SSL_Context.h: + * ace/SSL/SSL_SOCK_Stream.i: + + Updated included headers as necessary due to removal of + "ace/Synch.h" #include. + +Thu Apr 22 20:01:12 2004 Ossama Othman + + * ace/ATM_Addr.cpp: + * ace/ATM_Addr.h: + * ace/ATM_Addr.i: + * ace/Active_Map_Manager.h: + * ace/Active_Map_Manager.i: + * ace/Addr.h: + * ace/Addr.i: + * ace/Atomic_Op.h: + * ace/Atomic_Op.i: + * ace/Atomic_Op_T.h: + * ace/Atomic_Op_T.i: + * ace/Based_Pointer_T.h: + * ace/Based_Pointer_T.i: + * ace/Basic_Types.h: + * ace/Basic_Types.i: + * ace/Bound_Ptr.h: + * ace/Bound_Ptr.i: + * ace/CDR_Base.cpp: + * ace/CDR_Base.h: + * ace/Cache_Map_Manager_T.h: + * ace/Cache_Map_Manager_T.i: + * ace/Cleanup.cpp: + * ace/Cleanup.h: + * ace/Configuration.cpp: + * ace/Configuration.h: + * ace/Containers_T.cpp: + * ace/Containers_T.h: + * ace/Containers_T.i: + * ace/DEV_Addr.h: + * ace/DEV_Addr.i: + * ace/FILE_Addr.h: + * ace/FILE_Addr.i: + * ace/Functor_T.h: + * ace/Functor_T.i: + * ace/Future.cpp: + * ace/Future.h: + * ace/Get_Opt.h: + * ace/Get_Opt.i: + * ace/Hash_Map_Manager_T.h: + * ace/Hash_Map_Manager_T.i: + * ace/INET_Addr.cpp: + * ace/INET_Addr.h: + * ace/INET_Addr.i: + * ace/IOStream.h: + * ace/Local_Name_Space.cpp: + * ace/Local_Name_Space.h: + * ace/Local_Tokens.h: + * ace/Local_Tokens.i: + * ace/MEM_Addr.h: + * ace/MEM_Addr.i: + * ace/Map_Manager.h: + * ace/Map_Manager.i: + * ace/Map_T.h: + * ace/Map_T.i: + * ace/Name_Space.cpp: + * ace/Name_Space.h: + * ace/OS_Errno.h: + * ace/OS_Errno.inl: + * ace/OS_NS_Thread.cpp: + * ace/OS_NS_Thread.h: + * ace/Pair_T.h: + * ace/Pair_T.i: + * ace/RB_Tree.h: + * ace/RB_Tree.i: + * ace/Refcounted_Auto_Ptr.h: + * ace/Refcounted_Auto_Ptr.i: + * ace/Registry.cpp: + * ace/Registry.h: + * ace/SPIPE_Addr.h: + * ace/SPIPE_Addr.i: + * ace/SString.h: + * ace/SString.i: + * ace/Select_Reactor_Base.h: + * ace/Select_Reactor_Base.i: + * ace/Service_Config.h: + * ace/Service_Config.i: + * ace/Strategies_T.h: + * ace/Strategies_T.i: + * ace/String_Base.cpp: + * ace/String_Base.h: + * ace/String_Base.i: + * ace/Thread_Manager.h: + * ace/Thread_Manager.i: + * ace/Time_Value.h: + * ace/Time_Value.inl: + * ace/Timeprobe.h: + * ace/Timeprobe.i: + * ace/UNIX_Addr.h: + * ace/UNIX_Addr.i: + * ace/Unbounded_Set.cpp: + * ace/Unbounded_Set.h: + * ace/Unbounded_Set_Ex.cpp: + * ace/Unbounded_Set_Ex.h: + * ace/Vector_T.cpp: + * ace/Vector_T.h: + * ace/Vector_T.i: + * ace/CLASSIX/CLASSIX_Group.h: + * ace/CLASSIX/CLASSIX_Group.i: + * ace/CLASSIX/CLASSIX_Port.h: + * ace/CLASSIX/CLASSIX_Port.i: + * apps/Gateway/Gateway/Event.h: + * apps/JAWS/clients/Caching/Local_Locator.h: + * apps/JAWS/clients/Caching/Local_Locator.i: + * apps/JAWS/clients/Caching/URL_Properties.h: + * apps/JAWS/clients/Caching/URL_Properties.i: + * docs/tutorials/016/Condition_i.cpp: + * docs/tutorials/016/Condition_i.h: + * docs/tutorials/016/condition.cpp: + * examples/Web_Crawler/URL_Addr.cpp: + * examples/Web_Crawler/URL_Addr.h: + * tests/CDR_File_Test.cpp: + * tests/Collection_Test.cpp: + * tests/Collection_Test.h: + * tests/IOStream_Test.cpp: + * ACEXML/common/AttributesImpl.h: + * ACEXML/common/AttributesImpl.i: + * ACEXML/common/URL_Addr.h: + * ACEXML/common/URL_Addr.inl: + * ACEXML/parser/parser/ParserContext.h: + * ACEXML/parser/parser/ParserContext.inl: + + Changed all return types for equality, relational and logical + operators to "bool", as is the norm for modern C++. + +Thu Apr 22 17:06:04 2004 Ossama Othman + + * ace/OS_NS_Thread.inl (mutex_init): + + Explicitly cast the unused returned values of an + ACE_ADAPT_RETVAL macro call to "void" to address a "right-hand + operand of comma has no effect" warning exhibited by GNU g++ 3.4 + (pre-release). + +Thu Apr 22 17:06:39 2004 Steve Huston + + * tests/Recursive_Condition_Test.cpp: Fixed broken log string. Also, + when checking nesting level, ignore it if get_nesting_level() returns + -1, ENOTSUP. This will be the case for native Pthreads recursive + mutexes. + +Thu Apr 22 16:51:29 2004 Steve Huston + + * ace/OS_NS_Thread.h: + * ace/OS_NS_Thread.inl: + Reverted this change: + Wed Mar 31 14:43:48 UTC 2004 Don Hinton + which confused the lock scope (process vs. thread) with lock type + (recursive, non-recursive, etc.). Panagiotis sent a revised patch + to separately specify the lock type as an optional argument, + lock_type, to ACE_OS::mutex_init(). This allows Pthreads recursive + mutexes where they are available. + I also renamed the 'type' argument to lock_scope to differentiate + this further and avoid confusion in the future. + On ACE_OS::thread_mutex_init(), the meaning of the old 'type' + argument is changed. It previously combined the scope and type. + Now it is just the type (e.g. recursive), as the scope is inherent + in the method used. + For clarification on ACE_HAS_RECURSIVE_MUTEXES, it means that the + platform is capable of them, not that they always are, as one would + expect. However, before Pthreads had recursion added, it was + never optional. Now it is. + + * ace/config-linux.h: Only set ACE_HAS_RECURSIVE_MUTEXES if + ACE_HAS_PTHREADS_UNIX98_EXT is set. + + * ace/config-aix4.x.h: + * ace/config-hpux-11.00.h: Added ACE_HAS_RECURSIVE_MUTEXES. This is + predicated on ACE_HAS_PTHREADS_UNIX98_EXT, which is already set. + Some other configs have ACE_HAS_PTHREADS_UNIX98_EXT also, but I + don't have access to them for testing, so didn't add it to those. + + * ace/Thread_Mutex.cpp (ctor): Pass 0 for lock_type to + ACE_OS::thread_mutex_init(), not USYNC_THREAD. + +Thu Apr 22 11:53:00 2004 Ossama Othman + + * bin/fuzz.pl (check_for_non_bool_operators): + + Improved regular expressions to catch additional cases. + +Thu Apr 22 12:00:00 2004 Marek Brudka + + * ace/TMCast/Link_Listener.hpp: removed ACE_Addr bug which led to + sigsegv in TMCast applications. + +Thu Apr 22 12:13:52 2004 Chad Elliott + + * ACEXML/common/codecs.mpb: + * ACEXML/common/common.mpc: + + Support disabling the ace_codecs feature. This project takes + advantage of the ! (not) feature of MPC. + +Thu Apr 22 14:00:05 UTC 2004 Johnny Willemsen + + * bin/ace_tests.lst: + The wfmo reactor tests shouldn't be run using Cywin. The wfmo + run_test.pl test for windows but Cygwin runs on windows but + doesn't have the wfmo reactor. + +Thu Apr 22 07:58:20 2004 Chad Elliott + + * bin/prj_install.pl: + Removed this file. It now lives in the MPC directory. + +Thu Apr 22 00:22:03 2004 Ossama Othman + + * bin/fuzz.pl (check_for_non_bool_operators): + + New test that determines if equality, relational and logical + operators return a type other than "bool". A "bool" return type + for such operators is the norm for modern C++ compilers. + +Thu Apr 22 07:12:22 UTC 2004 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added TAO/tests/Bug_1495_Regression.pl to the list of test + that must be run. + +Thu Apr 22 06:02:12 UTC 2004 Johnny Willemsen + + * ace/QoS/qos.mpc: + With Visual C++ 8 also define ACE_HAS_WINSOCK2_GQOS. Visual C++ + 8 is at this moment Microsoft Visual Studio .NET 2005 March + 2004 Preview. + +Wed Apr 21 13:36:41 2004 Steve Huston + + * ace/os_include/os_time.h: Reverted this change: + Thu Apr 15 17:56:29 2004 Steve Huston + and directly include instead. Although the Apr 15 + change fixed the g++ build on HP-UX, it revived a compile error + for the aC++ build wherein the ACE_OS::sigaction() method would + not compile, apparantly due to some confusion over partially-defined + struct sigaction in some inlined situations. I have no idea why, + but at this point, both the aC++ and g++ builds are quiet. + +Tue Apr 20 12:47:32 UTC 2004 Johnny Willemsen + + * ace/os_include/sys/os_shm.h: + Removed empty shmaddr when ACE_WIN32 is set, it is not used in + ACE. Added empty struct shmid_ds when ACE_LACKS_SHMID_DS_T is + defined. + + * ace/README: + Added ACE_LACKS_SHMID_DS_T + +Tue Apr 20 06:17:43 2004 Balachandran Natarajan + + * THANKS: + + To avoid spam for our dear users we have changed the @ symbol + and the dot symbol to be in character format. + +Mon Apr 19 14:10:21 UTC 2004 Johnny Willemsen + + * ace/OS_NS_Thread.inl: + Moved the implementation of ACE_OS::thr_equal() before the first + placed where it is used in this file. This fixes a warning in the + Tru64 build. + +Mon Apr 19 14:02:31 UTC 2004 Johnny Willemsen + + * ace/os_include/sys/os_msg.h: + Instead of defining an empty struct msqid_ds when + ACE_WIN32 is set, use the new ACE_LACKS_MSQID_DS_T define. + + * ace/README: + Added ACE_LACKS_MSQID_DS_T description + + * ace/config-win32-common.h: + Win32 doesn't have the struct msqid_ds, so added ACE_LACKS_MSQID_DS_T + +Fri Apr 16 12:34:29 2004 Steve Huston + + * ace/ace.icp: + * tests/tests.icp: Removed these left-over Visual Age C++ projects. + + * ace/ace_dll64.mak: + * ace/ace_lib64.mak: + * apps/JAWS/clients/WebSTONE/src/client/webclient.mak: + * apps/JAWS/clients/WebSTONE/src/gendata/genrand.mak: + * apps/JAWS/clients/WebSTONE/src/master/webmaster.mak: + * examples/C++NPv1/Process_Per_Connection_Logging_Server.mak: + Removed these MSVC make files. These are all now generatable via MPC. + +Fri Apr 16 09:35:12 UTC 2004 Johnny Willemsen + + * ace/Default_Constants.h: + Added ACE_MAX_UDP_PACKET_SIZE + + * ace/RMCast/RMCast_IO_UDP.cpp: + Use ACE_MAX_UDP_PACKET_SIZE instead of a hardcoded constant. Makes + it possible to overrule the value from the config.h file. + +Fri Apr 16 06:38:11 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/gnu.mpd: + Fixed error in the libcheck that was put in accidently when merging + from our test system to the latest cvs version. + +Thu Apr 15 23:28:24 2004 Ossama Othman + + * include/makeinclude/platform_sunos5_sunc++.GNU (CCFLAGS): + (CPPFLAGS): + + Moved preprocessor flags in compiler flags variable $(CCFLAGS) + to preprocessor flags variable $(CPPFLAGS). Addresses potential + dependency generation problems. + +Thu Apr 15 17:56:29 2004 Steve Huston + + * ace/os_include/os_time.h: Include ace/os_include/sys/os_time.h + before . This insures that the X/Open form of select(), + using fdset* as opposed to int*, gets selected, at least on HP-UX. + +Thu Apr 15 14:38:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/rules.local.GNU: + Reverted the $(PWD) changed, it caused unexpected problems. We are + working on a better solution. + +Thu Apr 15 12:33:27 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/gnu.mpd: + Changed the way we do a lib check. Instead of using the shell we use + normal make rules. Another advantage is that we now give all libraries + we are missing instead of the first one. Thanks to + Martin Corino for changing this. + +Thu Apr 15 12:29:21 UTC 2004 Johnny Willemsen + + * bin/check_build_logs: + * bin/show_log_dir.pl: + * bin/vc_filter.pl: + Removed these files, they are old and not needed anymore. Looks + some more files in bin can be removed, we should have a good look + at what we really need + +Thu Apr 15 07:20:35 2004 Chad Elliott + + * ACE-INSTALL.html: + * bin/MakeProjectCreator/README: + + Added information on how to obtain MPC and the location of + documentation. + +Thu Apr 15 10:52:21 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_mingw32.GNU: + Set PRELIB to empty for MinGW and set a specific PWD. + +Thu Apr 15 10:16:32 UTC 2004 Johnny Willemsen + + * ace/OS_NS_unistd.inl: + Reimplemented the ACE_OS::setsid(). Introduced ACE_LACKS_SETSID so + that from the config file we can say if the platform supports setsid() + or not. VxWorks and PSOS don't have the concept of processes so + there we return just 0, just like to other methods related to this one. + This way when we get another port to a platform which doesn't have + setsid() we just have to add this define to the config file. + + * ace/config-chorus.h: + * ace/config-integritySCA: + * ace/config-win32-common.h: + Added define of ACE_LACKS_SETSID because these platforms lack this + + * ace/README: + Documented ACE_LACKS_SETSID + +Thu Apr 15 09:51:32 UTC 2004 Johnny Willemsen + + * include/makeinclude/wrapper_macros.GNU: + Introduced PWD. This is used to get the current working + directory. When it is not set, it is $(shell pwd). On Windows + without cygwin we don't have pwd, so we need to get another + way of doing this, this makes it possible to overrule this. + + * include/makeinclude/rules.local.GNU: + Use $(PWD) to get the working directory + + * include/makeinclude/platform_g++_common.GNU: + Added mingw specific rules for determining if the GNU ld has -E + +Thu Apr 15 08:54:33 UTC 2004 Johnny Willemsen + + * ace/OS_NS_sys_stat.inl: + Changed order of inline methods to fix warnings in Tru64 build. + +Thu Apr 15 08:37:32 UTC 2004 Johnny Willemsen + + * ace/OS_NS_unistd.inl: + Changed location of ACE_OS::getpagesize(). The method must be + above the first place where it is used. This fixes a warning + in the Tru64 build. + +Thu Apr 15 07:14:21 UTC 2004 Johnny Willemsen + + * examples/APG/ThreadSafety/Tokens.cpp: + Added include of ace/OS_NS_time.h to get ACE_OS::nanosleep + +Thu Apr 15 07:04:13 UTC 2004 Johnny Willemsen + + * bin/msvc_auto_compile.pl: + Removed this file. The msvc_mpc_auto_compile.pl script must + be used. + +Wed Apr 14 22:18:58 2004 Ossama Othman + + * Kokyu/DSRT_Direct_Dispatcher_Impl_T.cpp (svc): + + Wrapped ACE_Guard instantiation within an ACE_GUARD_RETURN + macro. Addresses an unused variable warning. + +Wed Apr 14 20:29:52 2004 Ossama Othman + + * ace/OS_NS_Thread.cpp (thr_create): + + Explicitly cast the unused returned values of two + ACE_ADAPT_RETVAL macro calls to "void" to address a "right-hand + operand of comma has no effect" warning exhibited by GNU g++ 3.4 + (pre-release). + +Wed Apr 14 19:27:29 2004 Ossama Othman + + * ace/os_include/os_unistd.h (_POSIX_TIMER_MAX): + (ACE_DEFAULT_TIMERS): + + Moved definitions of these macros to other more appropriate + files described below. + + * ace/os_include/os_limits.h (_POSIX_TIMER_MAX): + + Moved conditional definition of this macro to this file to avoid + potential definition before the one in . Fixes macro + redefinition warnings. + + * ace/Default_Constants.h (ACE_DEFAULT_TIMERS): + + Moved conditional definition of this macro to this file. It + didn't make much sense to define it in the os_unistd.h + portability header. + +Wed Apr 14 17:28:21 2004 Ossama Othman + + * include/makeinclude/platform_qnx_rtp_gcc.GNU: + + Corrected "fuzz" error regarding missing RCS ID. + +Wed Apr 14 23:03:20 2004 Marek Brudka + + * ace/DLL_Manager.cpp: + + Additional validation in DLL_Handle::symbol. + + * ace/Mem_Map.cpp: + + QNX NTO cannot mmap regular files, but can map shared + memory. Mem_Map was modified for QNX NTO the same it was done + for CHORUS, namely ::open and ::unlink was replaced by + resp. ::shm_open and ::shm_unlink in QNX NTO section. This is + only a partial bugfix, as one it prevents mapping ordinary + files. + + * tests/Mem_Map_Test.cpp: + + ::open in QNX NTO sections was replaced by Mem_Map::open to + ensure ::shm_open is invoked. + +Wed Apr 14 17:17:22 2004 Steve Huston + + * ace/config-hpux-11.00.h: Fixed missing end-of-comment mark that + no-oped much of this file. Thanks to the compiler for all the + help finding this one.... NOT! + +Wed Apr 14 14:09:19 2004 Ossama Othman + + * ace/os_include/os_unistd.h (ACE_DEFAULT_TIMERS, _SC_TIMER_MAX): + + #define ACE_DEFAULT_TIMERS to _POSIX_TIMER_MAX, not + _SC_TIMER_MAX. The latter is a parameter meant to be passed to + the sysconf() C library function. It does not represent the + maximum number of concurrent timers per process. The fact that + its value is close to the value for _POSIX_TIMER_MAX is a + coincidence (e.g. _SC_TIMER_MAX on Linux/glibc is 35 and + _POSIX_TIMER_MAX is 32). This addresses potential problems + where the default number of timers is more than the platform + allows. + + In addition to addressing the above issue, this change also + fixes a warning regarding an undefined "_SC_TIMER_MAX" macro on + Linux/glibc. On that platform "_SC_TIMER_MAX" is actually + defined in an enumeration. + + (_SC_AIO_MAX): + + Removed this macro definition. It served no useful purpose. + +Wed Apr 14 16:18:10 2004 Irfan Pyarali + + * ace/Cached_Connect_Strategy_T.cpp: + + In ACE_Cached_Connect_Strategy_Ex::connect_svc_handler_i(), the + reference counter of the entry in the hashtable + (ACE_Refcounted_Hash_Recyclable) was being incremented in all + cases. It should only incremented if the hint passed to + connect_svc_handler_i() is not used. + + Thanks to Torsten Kuepper for + reporting this bug. This closes bug 1781. + +Wed Apr 14 16:14:59 2004 Steve Huston + + * ace/Basic_Types.h: Add _M_AMD64 (Opteron) as a known little-endian + architecture. Thanks to Ivan Murphy for + this fix. + +Wed Apr 14 21:07:35 2004 Marek Brudka + + * ACE-INSTALL.html: updated documentation in QNX section. + * include/makeinclude/platform_qnx_rtp_gcc.GNU: several changes + related to compilation under QNX RTP v.6.2.0. + * ace/Mutex.inl: Fixed bugs for pthread::process_mutex placed in + shared memory + * ace/Process_Mutex.h: Explained in doxygen documentation the + difference between SYSV semaphores and pthreads based process + mutexes. + * ace/RW_Process_Mutex.h: Added \todo section in doxygen doc. + * ace/Dev_Addr.h: + * ace/Dev_Addr.i: + * ace/File_Addr.h: + * ace/Module.h: + * ace/Module.i: + * ace/SPIPE_Addr.h: MAXNAMLEN replaced by MAXPATHLEN to prevent + filename truncation + * ace/Time_Value.cpp: Removed warning for QNX RTP related with + unsigned tv_sec + * ace/config-qnx-rtp-62x.h: + * ace/config-qnx-rtp-pre62x.h: + * ace/config-qnx-rtp.h: + * ace/config-qnx-neutrino.h: New configuration macros for QNX RTP. + * ace/OS.h: Removed unnecessary semicolon in QNX (4.x) section. + * tests/Process_Mutex_Test.cpp: Ensured correct order of + pthreads-based Process_Mutex destruction. + +Wed Apr 14 12:34:56 2004 Ossama Othman + + * tests/Makefile.libs: + + Reverted a change (Makefile.libs,v 4.3 2004/04/13 23:15:45 + mbrudka) that incorrectly replaced a dependency on test_config.h + with test_$(ACE_PLATFORM_CONFIG). Thanks to Johnny Willemsen + for pointing me in the right direction. + +Wed Apr 14 11:26:20 2004 Steve Huston + + * include/makeinclude/platform_aix_g++.GNU: If rtti=0, add + -fno-rtti to CFLAGS. Previously, the rtti setting had no affect. + +Wed Apr 14 10:04:43 2004 Chad Elliott + + * bin/MakeProjectCreator/config/ifrservice.mpb: + + Added minimum_corba to the inheritance list. The IFRService + library won't build with minimum poa enabled. + +Wed Apr 14 06:54:32 UTC 2004 Johnny Willemsen + + * tests/Tokens_Test.cpp: + * netsvcs/lib/Token_Handler.h: + Fixed compile errors when ACE_HAS_TOKENS_LIBRARY is defined + +Tue Apr 13 12:51:12 UTC 2004 Johnny Willemsen + + * ace/Local_Tokens.h: + Added missing includes that are needed when ACE_HAS_TOKENS_LIBRARY + is defined. + +Tue Apr 13 08:44:22 2004 Steve Huston + + * ace/Select_Reactor_T.cpp (check_handles): Fixed typo. + +Wed Apr 7 12:27:19 2004 Steve Huston + + * ASNMP/asnmp/target.cpp (operator==): Removed the lhs==rhs check at + the top. This is a nice-to-have optimization, but MSVC7.1 reports + all control paths are recursive. + + * ASNMP/tests/Integer_Test.cpp: Changed 'si' from short to unsigned + short. It's initialized with 32768, which doesn't fit in 16 bits, + and the comments on its use inside the test itself say it's + unsigned short. There are not other comments to explain what this + is trying to do, so I may have this wrong... Anyone with more info + on this, please feel free to contact me. + + * examples/Log_Msg/Log_Msg_MFC/MFC_Log.h: Formatting adjustment. + + * examples/TMCast/Member/member.cpp: static_cast ACE_UINT64 to + unsigned long to avert a VC7.1 compiler warning about truncation. + +Tue Apr 13 00:47:43 2004 Ossama Othman + + * ace/Global_Macros.h (ACE_NEW_MALLOC_RETURN, ACE_NEW_MALLOC): + (ACE_NEW_MALLOC_NORETURN, ACE_NEW_MALLOC_ARRAY_RETURN): + (ACE_NEW_MALLOC_ARRAY): + + Explicitly cast the return value of the placement new operator + call to "void" to address a "statement has no effect" warning + exhibited by GNU g++ 3.4 (pre-release). + + * ace/Arg_Shifter.cpp: + * ace/OS_NS_strings.h: + * ace/Unbounded_Set.h: + + Nuked trailing whitespace. + + * ace/README: + + Updated autoconf support comments. + +Mon Apr 12 17:43:51 2004 Steve Huston + + * ace/config-linux-common.h: In the newer-glibc section, add a + #define ACE_POSIX_SIG_PROACTOR. This is a (possibly incomplete) + attempt to make Linux use the sig proactor for newer linuxes such + as Red Hat Linux 9 and Enterprise Linux 3, where it is possible to + send a signal across threads in a process. I'm not terribly worried + if the check is imperfect, since there's no chance for asynch I/O to + work any other way, and not at all on Linux versions that can't do + the cross-thread signals. + +Mon Apr 12 16:40:33 2004 Steve Huston + + * ace/config-hpux-11.00.h: Force the Proactor implementation to + ACE_POSIX_AIOCB_Proactor if the user didn't select one. The CB + approach is not supported at HP-UX 11.00. + + Also this from the 5.4 support stream: + Fri Mar 26 16:24:39 2004 Steve Huston + + * ace/config-hpux-11.00.h: Added ACE_HAS_SIGACTION_CONSTP2. + +Mon Apr 12 13:55:46 2004 Chad Elliott + + * apps/JAWS/clients/Caching/caching.mpc: + * apps/JAWS/server/server.mpc: + + Made these projects require ace_filecache. + + * bin/MakeProjectCreator/config/ftclientorb.mpb: + + Made this base project require ace_uuid. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Cleaned up and simplified the template somewhat. + +Mon Apr 12 12:54:37 2004 Chad Elliott + + * ace/config-win32-common.h: + + Only define ACE_HAS_WINSOCK2_GQOS if ACE_HAS_QOS is defined. + + * bin/MakeProjectCreator/config/qos.mpb: + + If the qos feature is enabled, add ACE_HAS_QOS to the macros. + +Mon Apr 12 13:51:42 UTC 2004 Johnny Willemsen + + * ace/ace.mpc: + Removed default part from the Template_Files, it is not needed. + +Mon Apr 12 13:39:12 UTC 2004 Johnny Willemsen + + * ace/config-win32-common.h: + * ace/config-win32-msvc-5.h: + * ace/config-win32-msvc-6.h: + Moved define ACE_HAS_LLSEEK from msvc5/6 file to the win32 common + file. This fixes bugid 1780. Thanks to Pierre Bisaillon + for reporting this. + +Thu Apr 1 15:40:55 2004 Douglas C. Schmidt + + * ace/Strategies_T.cpp (activate_svc_handler): Make sure to + store/restore errno when calling svc_handler->destroy (). + Thanks to Ewald Dieterich for reporting + this. This fixes bugid 1776. + +Sun Apr 11 18:33:35 2004 Balachandran Natarajan + + * */*.icc: + + Axed them from the repo. Thanks to Johnny for reminding me to do + this. + +Sun Apr 11 18:22:39 2004 Balachandran Natarajan + + * apps/JAWS2/HTTPU/HTTPU.DSP: + * java/gjt/GJT.DSP: + * java/src/JACE.DSP: + + Axed them from the repo. + +Sun Apr 11 18:19:55 2004 Balachandran Natarajan + + * apps/JAWS2/HTTPU/HTTPU.DSW: + * java/gjt/GJT.DSW: + * java/src/JACE.DSW: + + Removed these. + +Sat Apr 10 23:39:54 2004 Balachandran Natarajan + + * */*.ds[p,w]: + + Removed. + +Fri Apr 9 16:07:33 2004 Steve Huston + + * ace/Select_Reactor_T.cpp (check_handles): The previous method of + locating handles to check -- iterating the handler repository for + ACE_Event_Handler pointers and calling get_handle() -- didn't work + if the handler didn't do get_handle() as we expected. Changed this + to build a union of the read/write/exception wait_set masks and + iterate through that. If a bad handle is found, call + remove_handler_i() based on the handle, not the event handler + pointer. + +Thu Apr 8 20:12:30 2004 Balachandran Natarajan + + * */*.bor: + + Removed all the borland makefiles files from the + repository. Files in include/makeinclude have not been removed. + +Thu Apr 8 11:57:29 2004 Steve Huston + + * ace/POSIX_Asynch_IO.cpp (handle_output): Be sure to unregister this + handler from the asynch task before posting the completion. The + completion handler may do anything, including delete the handler, + before this method has a chance to remove it from the asynch task. + Matches an earlier fix for Windows: + Thu Mar 11 17:00:14 2004 Steve Huston + +Thu Apr 8 08:03:13 2004 Chad Elliott + + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + + Modified this base project to set tao_idl and tao_idlflags as + template overrides. The custom command was then set to $(TAO_IDL) + and the idlflags was set to $(TAO_IDLFLAGS). In all project + creators (except GNUACE), these values will be replaced by the + template override values. + + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + + Override the expand_variables_from_template_values method to turn + off variable expansion. This allows us to set TAO_IDL and + TAO_IDLFLAGS as variables within the generated project and gives + more flexibility to the user. + + * bin/MakeProjectCreator/config/vcfullmacros.mpt: + * bin/MakeProjectCreator/config/vcpartialmacros.mpt: + + Set the ACE_HAS_MFC macro to 1 instead of just defining it. + + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + + Updated these to properly support the 'pch_postrule' custom + defined keyword. + + * bin/mpc.pl: + * bin/mwc.pl: + + Updated these to give a somewhat more useful message when the MPC + core is not found in the usual place. Setting the MPC_ROOT + environment variable can help these scripts determine the location + of the MPC core. + +Mon Apr 5 13:27:27 2004 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/mpc.pl: + * bin/mwc.pl: + + Updated these to point to the new MPC repository. + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/config/bison.mpb: + * bin/MakeProjectCreator/config/flex.mpb: + * bin/MakeProjectCreator/config/lex.mpb: + * bin/MakeProjectCreator/config/openssl.mpb: + * bin/MakeProjectCreator/config/qt.mpb: + * bin/MakeProjectCreator/config/qt_moc.mpb: + * bin/MakeProjectCreator/config/rpc.mpb: + * bin/MakeProjectCreator/config/zlib.mpb: + * bin/MakeProjectCreator/modules/AutomakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/AutomakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/BMakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/BMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/CbxProjectCreator.pm: + * bin/MakeProjectCreator/modules/CbxWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/EM3ProjectCreator.pm: + * bin/MakeProjectCreator/modules/EM3WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/FeatureParser.pm: + * bin/MakeProjectCreator/modules/GHSProjectCreator.pm: + * bin/MakeProjectCreator/modules/GHSWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/GUID.pm: + * bin/MakeProjectCreator/modules/HTMLProjectCreator.pm: + * bin/MakeProjectCreator/modules/HTMLWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/MPC.pm: + * bin/MakeProjectCreator/modules/MWC.pm: + * bin/MakeProjectCreator/modules/MakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/MakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/NMakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/Options.pm: + * bin/MakeProjectCreator/modules/OutputMessage.pm: + * bin/MakeProjectCreator/modules/Parser.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/SLEProjectCreator.pm: + * bin/MakeProjectCreator/modules/SLEWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/StringProcessor.pm: + * bin/MakeProjectCreator/modules/TemplateInputReader.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + * bin/MakeProjectCreator/modules/VA4ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VA4WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC6ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC6WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC71ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC71WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC7ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/Version.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + * bin/MakeProjectCreator/templates/automake.mpd: + * bin/MakeProjectCreator/templates/bmake.mpd: + * bin/MakeProjectCreator/templates/bmakecommon.mpt: + * bin/MakeProjectCreator/templates/bmakedll.mpt: + * bin/MakeProjectCreator/templates/bmakedllexe.mpt: + * bin/MakeProjectCreator/templates/bmakelib.mpt: + * bin/MakeProjectCreator/templates/bmakelibexe.mpt: + * bin/MakeProjectCreator/templates/cbx.mpd: + * bin/MakeProjectCreator/templates/cbxdll.mpt: + * bin/MakeProjectCreator/templates/cbxexe.mpt: + * bin/MakeProjectCreator/templates/common.mpt: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplib.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + * bin/MakeProjectCreator/templates/ghs.mpd: + * bin/MakeProjectCreator/templates/html.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/makedll.mpt: + * bin/MakeProjectCreator/templates/makeexe.mpt: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/nmakedll.mpt: + * bin/MakeProjectCreator/templates/nmakeexe.mpt: + * bin/MakeProjectCreator/templates/sle.mpd: + * bin/MakeProjectCreator/templates/sledll.mpt: + * bin/MakeProjectCreator/templates/sleexe.mpt: + * bin/MakeProjectCreator/templates/va4icc.mpd: + * bin/MakeProjectCreator/templates/va4iccdll.mpt: + * bin/MakeProjectCreator/templates/va4iccdllexe.mpt: + * bin/MakeProjectCreator/templates/va4icclib.mpt: + * bin/MakeProjectCreator/templates/va4icclibexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc6dspdll.mpt: + * bin/MakeProjectCreator/templates/vc6dspdllexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsplib.mpt: + * bin/MakeProjectCreator/templates/vc6dsplibexe.mpt: + * bin/MakeProjectCreator/templates/vc7.mpd: + * bin/MakeProjectCreator/templates/vc7dll.mpt: + * bin/MakeProjectCreator/templates/vc7exe.mpt: + * bin/MakeProjectCreator/templates/vc7lib.mpt: + * bin/MakeProjectCreator/templates/vc7libexe.mpt: + + Removed these files. + +Fri Apr 02 13:36:08 2004 Balachandran + + * ACE version 5.4.1 released. + +Fri Apr 2 13:05:56 2004 Balachandran Natarajan + + * NEWS: + + Updated with the latest developments just prior to BFO. + +Thu Apr 1 22:54:51 2004 Balachandran Natarajan + + * bin/make_release: + + Fixes from testing. + +Thu Apr 1 18:03:10 2004 Balachandran Natarajan + + * bin/make_release: + + We now generate static project files for VC6, solution and + vcproj files for VC7 (for the whole of + ACE+TAO+CIAO). Additionally we also generate em3 files for the + whole of ACE. This is for the ACE distribution only. + +Thu Apr 1 10:21:31 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/SLEWorkspaceCreator.pm: + + Fixed a case error for the SlickEdit workspace creator. + +Thu Apr 1 08:34:55 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug where relative directory replacement wouldn't take + place if the value contained the current directory plus additional + subdirectories. Also, if the relative directory were the same as + the current directory the replacement would be invalid and + wouldn't point to the correct directory. + +Wed Mar 31 23:20:52 2004 Balachandran Natarajan + + * apps/JAWS3/bench/mkfiles.cpp: + * apps/JAWS3/bench/rqfiles.cpp: + * examples/APG/Naming/Makefile.nodelocal: + + +Wed Mar 31 18:08:48 2004 Balachandran Natarajan + + * bin/MakeProjectCreator/config/bison.mpb: + * bin/MakeProjectCreator/config/flex.mpb: + * bin/MakeProjectCreator/config/lex.mpb: + * examples/APG/Naming/Makefile.netlocal: + * examples/APG/Naming/Makefile.netlocal_reader: + * examples/APG/Naming/Makefile.nodelocal: + * examples/APG/Naming/Makefile.nodelocal_shared: + * examples/APG/Naming/Makefile.nodelocal_shared_reader: + * examples/APG/Svc_Config/Makefile.dynamic: + * examples/APG/Svc_Config/Makefile.static: + * examples/APG/Timers/Makefile.singles: + * examples/APG/Timers/Makefile.timers: + * examples/APG/Timers/Makefile.upcall: + + More fuzz warnings. + +Wed Mar 31 18:11:18 UTC 2004 Johnny Willemsen + + * ace/Functor_String.h: + Fixed compile problem in wchar builds + +Wed Mar 31 11:46:48 2004 Balachandran Natarajan + + * bin/fuzz.pl: + + Removed checks for certain things like OS.h inclusions and such + since we may not have time to fix them before the BFO. Once we + clean the rest of the stuff for BFO, will add this back. + +Wed Mar 31 17:31:54 UTC 2004 Don Hinton + + * include/makeinclude/platform_g++_common.GNU: + Modified grep test for linker output so it will run correctly on + Solaris. Thanks to Andrew G. Harvey for + discovering the problem and providing work arounds. Also, thanks + to Kitty for for recommending which + one to use. + +Wed Mar 31 14:43:48 UTC 2004 Don Hinton + + * ace/OS_NS_Thread.inl: + * ace/config-linux.h: + Enable the usage of native recursive mutexes for the + implementation of ACE recursive mutexes. According to the + README, ACE_HAS_RECURSIVE_MUTEXES should be defined for + platforms where all mutexes are recursive. This seems a + little bit counter intuitive, as it implies that recursive + mutexes are supported by the platform. But in reality, it means + that all mutexes are recursive. + + Added ACE_HAS_NONRECURSIVE_MUTEXES, which, together with + ACE_HAS_RECURSIVE_MUTEXES means the platform supports both + recursive and non-recursive mutexes. This maintains the default + behavior on non-GNU/Linux platforms. Thanks to Panagiotis Issaris + for this patch. + + * ace/README: + Added documentation for ACE_HAS_NONRECURSIVE_MUTEXES. + + * THANKS: + Added Panagiotis Issaris to the hall of fame. + +Wed Mar 31 14:22:32 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_cygwin32.GNU: + * include/makeinclude/platform_mingw32.GNU: + Instead of that people when they need to have a different TCPU + need to edit these files, made it so that we only default to + TCPU=pentiumpro when it is not set yet. In the platform_macros.GNU + people can now overrule this default. + +Wed Mar 31 09:06:13 UTC 2004 Johnny Willemsen + + Reverted our change of + Sun Mar 14 12:10:11 UTC 2004 Johnny Willemsen + + * ace/Time_Value.{h,cpp}: + * ace/Select_Reactor_T.{cpp ,i}: + * ace/Timer_Queue_Adapters.{h,cpp}: + * ace/Timer_Queue_T.{h,i,cpp}: + * ace/Timer_Wheel_T.cpp: + * ace/Timer_Hash_T.cpp: + * ace/Timer_List_T.cpp: + Removed accessor for zero and max_time which where added in the commit + above. We found that with some more complex TAO tests the linker was + still having problems using the zero and max_time static members. + + As a different solution only for MinGW we define two static variables + in the header file that use zero and max_time. With these two statics + the linker can resolve these two members and we know don't get any + linker problem anymore with MinGW. In case you had problems in your + MinGW app, this patch also fixes the problems in your application + without the need to change your app code. + + Thanks to Martin Corino for figuring + out the problem and making the patches. + +Tue Mar 30 17:53:32 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/templates/sle.mpd: + * bin/MakeProjectCreator/templates/sledll.mpt: + * bin/MakeProjectCreator/templates/sleexe.mpt: + * bin/MakeProjectCreator/modules/SLEProjectCreator.pm: + * bin/MakeProjectCreator/modules/SLEWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/MWC.pm: + * bin/MakeProjectCreator/modules/MPC.pm: + Added a new MPC template for Visual SlickEdit 8.1. This template is + not 100% ready yet, but hereby the first version so that workspaces + and projects are generated for simple project types. + +Mon Mar 29 20:52:22 2004 Balachandran Natarajan + + * ace/Functor_String.h: + + Fixed a typo. + +Mon Mar 29 12:24:54 2004 Douglas C. Schmidt + + * examples/Threads/manual_event.cpp (worker): + * tests/Upgradable_RW_Test.cpp (run_main): + * tests/Conn_Test.cpp (client): Changed the name "barrier" + to "thread_barrier" to fix a problem with macro conflicts on + certain OS platforms. Thanks to Levente Torok + for reporting this. + +Mon Mar 29 17:02:33 UTC 2004 Johnny Willemsen + + * examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.h: + Include Functor_T.h instead of Functor.h because of Bala changes of + yesterday. This fixes the compile problems in the daily builds with + this example + +Mon Mar 29 08:03:08 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Modified the rules to ensure that generated files are made before + attempting to build cpp files. These rules will only be in effect + when they are needed (ie. generated files are anything but source + files). + +Mon Mar 29 09:11:13 UTC 2004 Johnny Willemsen + + * ace/ATM_Acceptor.h: + * ace/ATM_Connector.h: + * ace/ATM_QoS.h: + * ace/ATM_Stream.h: + * ace/Atomic_Op_T.h: + * ace/Dump_T.cpp: + * ace/Flag_Manip.cpp: + * ace/Method_Request.h: + * ace/Metrics_Cache_T.h: + * ace/Refcounted_Auto_Ptr.i: + * ace/SOCK.i: + Added missing ace/ before some includes. Thanks to Roland Meub + for reporting this. + + * ace/DEV.h: + * ace/DEV_IO.h: + * ace/SOCK.h: + * ace/TTY_IO.h: + Fixed some doxygen warnings. + +Mon Mar 29 00:20:57 2004 Balachandran Natarajan + + * ace/Makefile.bor: + + Added Functor_String.h to the faily builds on Borland. + +Sun Mar 28 23:44:51 2004 Balachandran Natarajan + + * ace/Functor.h: + * ace/Functor_String.cpp: + * ace/Functor_String.h: + + Removed inclusions of Functor_T.h. This is simply a brain dead + way of doing things. + + * ace/Functor_T.h: + + Include Functor.h and Functor_String.h so that we get the + specializations first. + + * ace/Hash_Map_Manager_T.h: + * ace/RB_Tree.h: + + Include Functor_T.h. They don't have any purpose in life to + include the specializations. + +Sun Mar 28 13:39:56 2004 Balachandran Natarajan + + * ace/Capabilities.h: + + #included Functor_String.h to force compilers to use the + specialization. + + * ace/ace_dll.dsp: + + Added the new functor specializations into the project files. + +Sun Mar 28 19:07:44 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/notifytest.mpb: + Updated name of NotifyTests library name, it should have TAO_ to + match my update of today in the NotifyTests lib MPC file. This way + this library has exactly the same name as in none mpc builds. + +Sun Mar 28 12:16:41 2004 Balachandran Natarajan + + * ACEXML/common/NamespaceSupport.i: + + Removed functors that were there in this file. + + * ACEXML/common/XML_Types.h: + + Forcibly include Functor_String.h to get the functors for + ACE_CString and ACE_WString. + +Sun Mar 28 12:14:05 2004 Balachandran Natarajan + + * ace/Functor_String.cpp: + * ace/Functor_String.h: + * ace/Functor_String.inl: + + Functors for ACE_CString and ACE_WString. They have been placed + in seperate files to avoid coupling the rest of ACE (which uses + Functor.h) with strings that could lead to increased + footprints. + + * ace/Makefile.ace: + * ace/ace.mpc: + + New files for building. + +Sun Mar 28 15:31:22 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added some dsps to build first in a static build + +Sun Mar 28 14:57:13 UTC 2004 Johnny Willemsen + + * bin/nightlybuilds/*: + Removed all these files from the repo, these are already replaced a + long time by the autobuild project. + +Sat Mar 27 15:29:09 2004 Douglas C. Schmidt + + * tests/Multicast_Test_IPV6.cpp (leave): Replaced + + size_t size = 0; + + with + + size_t size = this->address_vec_.size (); + + Thanks to Johnny Willemsen for reporting this! + +Fri Mar 26 14:15:44 2004 Balachandran Natarajan + + * bin/MakeProjectCreator/config/idl_compiler.mpt: + * bin/MakeProjectCreator/config/idl_compiler_win32.mpt: + * bin/MakeProjectCreator/config/notify.mpb: + * bin/MakeProjectCreator/config/qt-min.mpb: + * bin/MakeProjectCreator/config/qt-min_moc.mpb: + + While playing around with ARMS repository, I accidentally added + these files back into the repo. Removing them once again. + +Thu Mar 25 11:58:46 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/bmake.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + + Fixed a bug in these templates where if a project had custom build + rules, but no source files, the custom build rules would not be + executed. + +Thu Mar 25 09:10:44 2004 Balachandran Natarajan + + * ace/OS_NS_Thread.h: + + Thanks to Martin Corino for supplying patches + that fixes build problems on non-pthread platforms. + +Wed Mar 24 22:36:01 2004 Balachandran Natarajan + + * ace/POSIX_Proactor.cpp: + + Fixed warning in g++ builds. + + * ace/Task.h (activate): + * ace/Thread_Manager.cpp: + * ace/Thread_Manager.h (spawn and spawn_n): + + Changed the default flags in the above methods. They now include + THR_INHERIT_SCHED. This makes the defaults consistent with C++ + NPV1 and C++ NPV2. If a priority other than + ACE_DEFAULT_THREAD_PRIORITY is passed into the + argument, the THR_INHERIT_SCHED flag is dropped silently. This + takes care of the problems reported by Abhijit Sachdev, which + was basically a bug that prevented the priorities being + inherited in thread-per-connection strategy. + + Thanks to Steve Huston for motivating the right fix that would + not affect user code at all. + +Wed Mar 24 16:41:29 2004 Steve Huston + + * ACE-INSTALL.html: Remove remaining reference to the "soft link" + method of specifying a platform-specific config.h and + platform_macros.GNU file. All instructions regarding these now + use the preferred method - creating a local file and including + the platform-specific one into it. Also cleaned up some old info. + + * PROBLEM-REPORT-FORM: Direct the user to not include an entire + platform-specific config.h or platform_macros.GNU file. This is + an effort to make submitted forms more concise and easy to read. + +Wed Mar 24 07:25:19 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug where settings were not being properly reset when + processing a 'specific' section for one project and then + processing other projects. + +Tue Mar 23 22:13:01 2004 Ossama Othman + + * bin/tao_orb_tests.lst: + + Added new PortableInterceptors ORB::shutdown() regression test + to the nightly build test runs. + +Tue Mar 23 20:18:20 2004 Douglas C. Schmidt + + * apps/gperf/README: Fixed the README file so it points to + the right version of the GPERF paper. Thanks to Eric Whorter + for reporting this. + +Tue Mar 23 20:12:51 2004 Gautam Thaker + + * performance-tests/SCTP/Options_Manager.cpp (Options_Manager): + Fixed two instances of array[strlen] = '\0'; to + Fixed two instances of array[strlen - 1] = '\0'; + Thanks to andreas.koehler@sysde.eads.net for reporting this + error. + +Tue Mar 23 18:31:40 2004 Steve Huston + + * tests/SSL/Makefile: + * tests/SSL/aix_hack_for_main.cpp: Added aix_hack_for_main.cpp to get + something without templates to build first. This all helps Visual + Age C++ on AIX deal with reality. Also see: + Sat Dec 6 19:27:26 2003 Steve Huston + +Tue Mar 23 07:22:33 2004 Chad Elliott + + * examples/Export/Export.mpc: + + Simplified this mpc file. + + * examples/Export/dll.h: + * examples/Export/dll.cpp: + + Fixed a problem with building on Windows with static libraries. + Added an extern to the test_variable to stop duplicate symbols + when building static libraries. The extern does not have any + adverse effects when building dynamic libraries. + +Mon Mar 22 14:23:44 2004 Steve Huston + + * ace/config-sunos5.7.h: Leave Solaris using the AIOCB proactor at + all versions. None of them work very well, so just leave this one + in place, as it imposes no signal restrictions on the application. + The concurrent access of (via aio_suspend(), aiowiat(), etc.) and + use of for I/O, aiocbs is really wreaking havoc with the proactor + implementations, I'm afraid. I believe this is really going to need + some serious work. + +Mon Mar 22 13:30:53 2004 Chad Elliott + + * bin/MakeProjectCreator/config/rpc.mpb: + + Added the -C option to ensure that the generated code can be used + by c++ compilers. Also, changed the output source files and + header files to fix a problem with make targets. + + * bin/MakeProjectCreator/modules/MakeWorkspaceCreator.pm: + + Added a generated target to allow users to invoke a rule to + produce just the generated files. + + * bin/MakeProjectCreator/templates/bmake.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + + Fixed a bug in these templates where generated files (other than + idl stubs) would not be created before attempting to build object + files. + +Mon Mar 22 14:10:12 2004 Steve Huston + + * ace/POSIX_Proactor.cpp: Fix "unused argument" warning. The code + that really uses the signal_number argument _may_ need to be + re-enabled again, so the name is left in the signature. + +Mon Mar 22 13:45:19 2004 Steve Huston + + * examples/APG/Timers/CB.cpp (handle_timeout): The reset_interval() + call needs to happen whether ACE_NDEBUG or not; putting it in an + ACE_ASSERT no-ops it out if ACE_NDEBUG. + +Mon Mar 22 10:57:20 2004 Steve Huston + + * ace/SSL/SSL_Asynch_Stream.cpp: + * ace/SSL/SSL_Asynch_BIO.cpp: Added #include "ace/OS_NS_string.h" to + pick up missing symbols on AIX. + +Sat Mar 20 22:25:07 2004 Douglas C. Schmidt + + * tests/Multicast_Test.cpp (leave): Replaced + + size_t size = 0; + + with + + size_t size = this->address_vec_.size (); + + Thanks to Valery Salamakha + for reporting this! + +Sat Mar 20 17:01:55 2004 Balachandran Natarajan + + * ace/Timer_Queue_Adapters.h: + * ace/Timer_Queue_Adapters.i: + + Changes from the effect of the following change "Thu Mar 18 + 22:47:05 2004 Balachandran Natarajan " + +Sat Mar 20 18:45:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + When gendir is set, a \ must be added, not a /. This fixes + problems in the Borland builds that where caused by the fact + that the realclean didn't work and we did compile old generated + files. + +Sat Mar 20 11:15:19 2004 Olli Savia + + * ace/Containers_T.cpp: + * ace/Containers_T.i: + Removed unnesessary LynxOS checks. LynxOS's updated compiler can + handle these files correctly. + +Fri Mar 19 08:33:01 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Fixed a bug where a command dependency would be placed upon + generated files. The full path to the command is not always + supplied during custom definition and thus dependencies couldn't + be satisfied because the command doesn't necessarily exist in the + current directory. + + The solution was to add a new custom definition keyword that + allows the user to determine whether the command dependency should + be generated or not. The default is to not generate a command + dependency. + + * bin/MakeProjectCreator/README: + + Documented the new 'dependant' keyword for custom definitions. + + * bin/MakeProjectCreator/config/ciao_servant.mpb: + * bin/MakeProjectCreator/config/psdl.mpb: + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + + Set 'dependent' to 1 to ensure that the command dependency is + generated for these custom definitions. + +Thu Mar 18 22:47:05 2004 Balachandran Natarajan + + * ace/Task.cpp: + * ace/Task.h: + * ace/Thread_Manager.cpp: + * ace/Thread_Manager.h: + + The following change has been reverted "Fri Mar 5 23:09:14 2004 + Balachandran Natarajan " . A better + fix would be available soon. These fixes actually borke backward + compatibility in a bad way. + +Thu Mar 18 13:50:21 2004 Steve Huston + + * ace/Asynch_IO.{h cpp}: The change in + Thu Mar 11 14:35:41 2004 Steve Huston + didn't go far enough... the problem exists in all derivatives of + ACE_Asynch_Operation_Impl. Only ACE_Asynch_Operation deleted the + implementation_ pointer in its constructor. However, since each + derivative of ACE_Asynch_Operation was declaring its own + implementation_ (in addition to the one in ACE_Asynch_Operation), + no implementation was ever, in fact, being deleted. Hence: + 1. The ACE_Asynch_Operation::implementation_ member is removed, + along with the void implementation(ACE_Asynch_Operation_Impl*) + method that set it. + 2. The ACE_Asynch_Operation_Impl* implementation() method is now + pure virtual in ACE_Asynch_Operation and must be implemented + in each operation class. + 3. Each operation class needs to maintain its own appropriately + typed implementation pointer, and delete it when necessary. + 4. The implementation(ACE_*_Impl*) methods are all removed, as + none are necessary, and none are used any longer. + The operation classes already were creating their own implementation + objects, so that is the same now. However, they all now delete the + implementation at destructor time. + +Thu Mar 18 08:59:40 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + + Removed an extraneous dash in the install target. + +Wed Mar 17 21:00:36 2004 Balachandran Natarajan + + * ace/Global_Macros.h: + * ace/config-aix-4.x.h: + * ace/config-g++-common.h: + * ace/config-win32-visualage.h: + + Added a new #define ACE_EXPLICIT_TEMPLATE_DESTRUCTOR_TAKES_ARGS + and enabled this feature only on the above platforms. With g++, + it is supported with g++ 3.4. This #define is used by + ACE_DES_FREE_TEMPLATE3 declarations in Global_Macros.h. Thanks + to Oliver Kellog for providing the patches. + + * ace/Task.h (activate): + * ace/Thread_Manager.h (spawn): + * ace/Timer_Queue_Adapters.h (activate): + + The last argument is now set to true as + default. This will get the behavior that C++ NPV1 and NPV2 + prescribes. Thanks to Dr. Schmidt and Abhijit Sachdev for + motivating this. + +Wed Mar 17 17:55:49 2004 Steve Huston + + * ace/Proactor.cpp (ctor): Change the default proactor implementation + to favor CB, then SIG, then AIOCB. The CB proactor works best on + many platforms, avoiding multithread issues with aio_suspend() on + most platforms other than HP-UX, and avoiding signal/thread mixes + on as many platforms as possible because it raises so many problems. + + * ace/POSIX_CB_Proactor.{h cpp}: Remove __sun as a condition that + prevents compilation of ACE_POSIX_CB_Proactor. Sun can do this + proactor type just fine. Added an 'extern "C"' variant of the + aio completion function for platforms (such as Solaris 8) that + have ACE_HAS_SIG_C_FUNC. + + * ace/config-sunos5.7.h: For Solaris 7 and later, use the default + proactor, ACE_POSIX_CB_Proactor. + + * ace/config-linux-common.h: Remove ACE_POSIX_AIOCB_PROACTOR setting. + The AIOCB proactor doesn't work with multiple threads since the + aio_suspend() call isn't multi-thread safe and ACE doesn't protect + the aiocb list. The SIG proactor doesn't work before the 2.6 kernel + because signals can't be queued across threads. CB works everywhere. + Note though, that even at the 2.6 kernel, read/write to sockets (and + some other things, I believe) get converted to blocking regardless of + what the application does. Thus, the only way to use aio on Linux + at this time is by ping-ponging, like the half-duplex mode in + Proactor_Test. Not terribly useful... + + * tests/Proactor_Test.cpp: + * tests/Proactor_Test_IPV6.cpp: Only allow the CB-type proactor for + !__Lynx__. Lynx is the only remaining AIO-enabled platform for + which this proactor type is not valid. + +Wed Mar 17 13:54:41 2004 Balachandran Natarajan + + * ace/Logging_Strategy.cpp: + + Reverting this change since it breaks MSVC builds! Looks like + VC6 is an old compiler wrt to ANSI C++ standards. Working things + for g++ 3.4 needs to wait. "Tue Mar 16 10:48:48 2004 + Balachandran Natarajan ". + +Wed Mar 17 14:20:31 2004 Steve Huston + + * ace/config-aix5.1.h: The AIO enable/disable check added at + Mon Mar 15 15:42:33 2004 Steve Huston + confuses the Visual Age C++ preprocessor. Rearrange it to use + a temporary macro, _ACE_DISABLE_AIO_CALLS_ if we need to turn off + ACE_HAS_AIO_CALLS after including config-aix-4.x.h. + + * examples/APG/Proactor/HA_Proactive_Status.cpp: Add #include + "ace/Message_Block.h" so Visual Age C++ can see ACE_Message_Block. + +Wed Mar 17 18:34:14 UTC 2004 Johnny Willemsen + + * tests/run_test.pl: + Changed -c to -g, -c is used by other scripts for the config + +Wed Mar 17 18:20:11 UTC 2004 Johnny Willemsen + + * tests/run_test.pl: + Added -c commandline option. With this option you can say that the + script has to look for a codeguard log. This log is placed in the + same directory as the executable, with the same name but with a cgl + extension. We use this for a new codeguard enabled BCB6 build. + +Tue Mar 16 16:56:36 2004 Balachandran Natarajan + + * asnmp/tests/Gauge_test.cpp: + * asnmp/tests/Counter_test.cpp: + + #ifdef'ed portions of the code which has no chances of compiling + on Win32, since native support for the used basic types are + missing. Changing the types to something else makes the test + useless. Commenting it out for Win32 shouldn't hurt anyone. + +Tue Mar 16 16:34:38 2004 Balachandran Natarajan + + * asnmp/tests/Varbind_Test.cpp: + * asnmp/tests/Counter64_Test.cpp: + + #ifdef'ed portions of the code which has no chances of compiling + on Win32, since native support for the used basic types are + missing. Changing the types to something else makes the test + useless. Commenting it out for Win32 shouldn't hurt anyone. + +Tue Mar 16 10:48:48 2004 Balachandran Natarajan + + * ace/Logging_Strategy.cpp: + + Use std::streamoff () to get the offset instead of casting. + + * ace/Malloc_T.i: + * ace/Strategies_T.cpp: + + #included OS_NS_string.h. + + Thanks to Oliver Kellog for providing the patches. + +Tue Mar 16 09:40:36 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + When adjusting template values, based on the -value_template + option, we must deal with them as arrays to maintain spaces within + individual values. + +Tue Mar 16 07:55:10 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Fixed a bug where workspaces that contain projects that depend + upon projects outside the local directory would have invalid + dependencies. + + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + Rewrote the 'if' handling code to be complete and support multiple + or's, and's and not's. + +Tue Mar 16 06:22:40 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Reverting my change from Mon Mar 15 08:31:05 2004. It has + undesirable effects in some situations. + +Mon Mar 15 18:26:39 2004 Steve Huston + + * examples/APG/Proactor/HA_Proactive_Status.h: Add #include + "ace/Asynch_IO.h" so AIX Visual Age C++ can find things at + template instantiate time. + +Mon Mar 15 15:42:33 2004 Steve Huston + + * ace/config-aix5.1.h: Set this up for use with AIX 5.2 as well. + AIX 5.2 has POSIX AIO, but it's not run-time enabled by default. + So, allow the user to turn it on, but leave it off by default. + + * ace/Asynch_Connector.cpp: Added #include "ace/OS_NS_sys_socket.h" and + "ace/OS_Memory.h" to pick up needed definitions on AIX when Visual + Age C++ is instantiating templates. + + * ace/POSIX_CB_Proactor.{h cpp}: Enabled use of the CB proactor on + non-sgi, non-FreeBSD systems. AIX likes this proactor implementation. + Also, fixed a mistaken timer setting where the number of desired + milliseconds timeout was instead specified as number of seconds. + + * tests/Proactor_Test.{cpp, h}: + * tests/Proactor_Test_IPV6.cpp: Moved the definitions of Sender + and Receiver to a new file, Proactor_Test.h. This allows AIX Visual + Age C++ to see the class definitions when instantiating templates. + Removed the #ifdef __sgi around use of the CB proactor, as that + is available and, indeed, works best, for AIX. + +Mon Mar 15 13:42:13 2004 Balachandran Natarajan + + * ace/CDR_Stream.cpp: + + Fixed a typo. Thanks to Andreas Koehler for pointing this out. + +Mon Mar 15 17:21:13 UTC 2004 Johnny Willemsen + + * examples/C++NPv2/WFMO_Reactor_Logging_Server.cpp: + Fixed unused argument warning in MinGW builds. Thanks to + Martin Corino for fixing this. + + * examples/APG/Logging/Trace.h: + In case ACE_NTRACE is set to 1 then TRACE_RETURN should + return the given value instead of doing nothing. Thanks + to Martin Corino for finding this. + +Mon Mar 15 10:01:43 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/AutomakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/BMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/CbxWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/EM3WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/HTMLWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/MakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VA4WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC6WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC71WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm: + + Added information at the top of the generated workspace for these + types. The information includes the CVS $Id keyword, the command + line options for MPC and a warning about directly editing the + file. + +Mon Mar 15 08:31:05 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/Driver.pm: + + Warn the user if the version of perl they are using is less than + perl 5.6. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug with custom file types where header and inline files + would not be considered as generated targets if matching generated + source files were not explicitly listed. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Add the $(PATH) to VPATH when using custom commands in case the + custom command does not have a path in the exe name, which will + allow GNU Make to find the command and process the rule. + +Sun Mar 14 15:44:41 UTC 2004 Johnny Willemsen + + * examples/Reactor/WFMO_Reactor/APC.cpp: + * examples/Reactor/WFMO_Reactor/Timeouts.cpp: + Cancel scheduled timers before quitting. This fixes the access + violations we see in the MinGW build when running these examples. + Caused by the fact that the event handler is on the stack and so + already destroyed when the singleton reactor is getting destroyed. + Thanks to Martin Corino with helping solving + these crashes. + +Sun Mar 14 14:21:13 UTC 2004 Johnny Willemsen + + * ace/Time_Value.cpp: + Fixed typo which resulted in compile errors. + +Sun Mar 14 12:52:31 UTC 2004 Johnny Willemsen + + * examples/Reactor/WFMO_Reactor/Registration.cpp: + Fixed warnings in MinGW build + +Sun Mar 14 12:48:43 UTC 2004 Johnny Willemsen + + * examples/Reactor/WFMO_Reactor/Network_Events.cpp: + Fixed warnings in MinGW build + +Sun Mar 14 12:44:12 UTC 2004 Johnny Willemsen + + * examples/Reactor/WFMO_Reactor/Abandoned.cpp: + Fixed warnings in MinGW build + +Sun Mar 14 12:41:52 UTC 2004 Johnny Willemsen + + * examples/Reactor/WFMO_Reactor/Handle_Close.cpp: + Fixed warnings in MinGW build + +Sun Mar 14 12:28:32 UTC 2004 Johnny Willemsen + + * examples/IPC_SAP/SPIPE_SAP/NPClient.cpp: + * examples/IPC_SAP/SPIPE_SAP/NPServer.cpp: + Fixed warnings in the MinGW build. Thanks to Martin Corino + for supplying the patches. + +Sun Mar 14 12:18:16 UTC 2004 Johnny Willemsen + + * examples/Reactor/WFMO_Reactor/Window_Messages.cpp: + Fixed warning in MinGW build. + +Sun Mar 14 12:16:53 UTC 2004 Johnny Willemsen + + * examples/Reactor/WFMO_Reactor/Talker.cpp: + Changed member initialization order to fix MinGW warning. + +Sun Mar 14 12:12:31 UTC 2004 Johnny Willemsen + + * examples/Reactor/WFMO_Reactor/Exceptions.cpp: + * examples/Reactor/WFMO_Reactor/Removals.cpp: + Fixed warnings in MinGW build. + +Sun Mar 14 12:10:11 UTC 2004 Johnny Willemsen + + * ace/Time_Value.{h,cpp}: + MingW has a problem importing static class data members (even with + --enable-auto-import) in case these members are referenced inside + heavily nested template class methods. It is somehow related to + optimization since with higher optim. levels more linking errors + are detected as with lower optim. levels. Since this is something + which is not going to be solved soon in the MingW environment and + the number of affected members are relatively few and the possible + fixes relatively simple (create accessor methods) we added accessor + methods for the zero and max_time static members of ACE_Time_Value. + + * ace/Select_Reactor_T.{cpp ,i}: + * ace/Timer_Queue_Adapters.{h,cpp}: + * ace/Timer_Queue_T.{h,i,cpp}: + * ace/Timer_Wheel_T.cpp: + * ace/Timer_Hash_T.cpp: + * ace/Timer_List_T.cpp: + Use the accessor methods to get zero and max_time instead of the + static public members. + + This fixes the link errors in the MinGW build. Thanks to + Martin Corino for figuring out the problem and + making the patches. + +Sun Mar 14 10:01:32 UTC 2004 Johnny Willemsen + + * ace/Lib_Find.cpp (ld_find): + When the dll is not found on win32, try again using ACE_DLL_PREFIX + prefixed. With MinGW all dll's have lib prefixed and when the prefix + wasn't attached by the user things failed. This fixes the DLL test + problems in the MinGW build. Thanks to Martin Corino + for figuring this out and making the patch. + + * ace/config-win32-mingw.h: + Removed setting of ACE_DLL_PREFIX, this is already done in + Default_Constants.h + +Sat Mar 13 18:25:11 UTC 2004 Johnny Willemsen + + * examples/OS/Process/process.cpp: + Fixed warnings in MinGW build. Thanks to Martin Corino + for creating the patch. + +Sat Mar 13 18:06:57 2004 Olli Savia + + * include/makeinclude/platform_g++_common.GNU: + * ace/config-lynxos.h: + Enabled implicit template instantiation for LynxOS 3.x. + +Sat Mar 13 09:43:11 UTC 2004 Johnny Willemsen + + * tests/Dirent_Test.cpp: + The first step of this test is to test the selector. To test this the + test uses Makefile as file to test for, but with the MPC builds we + remove the file Makefile and generate the file GNUMakefile, so at the + moment this tests runs there is no Makefile file and the test fails. + Changed the test so that it uses Dirent_Test.cpp as filename, this + is always there. Thanks to Martin Corino for + figuring out the problem. + +Fri Mar 12 16:29:29 2004 Balachandran Natarajan + + * tests/SString_Test.cpp: + + Fixed warnings in g++ builds. + +Fri Mar 12 12:51:45 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Fixed a bug where circular dependencies could be added by the + implicit dependency generation code due to path mismatches. + +Fri Mar 12 13:33:32 UTC 2004 Johnny Willemsen + + * examples/Reactor/WFMO_Reactor/Prerun_State_Changes.cpp: + * examples/Reactor/WFMO_Reactor/Timeouts.cpp: + Added some ACE_UNUSED_ARGs to silence MinGW warnings + +Fri Mar 12 13:20:14 UTC 2004 Johnny Willemsen + + * examples/APG/Active_Objects/active_objects.mpc: + * examples/APG/Active_Objects/active_objects.mwc: + * examples/APG/Config/config.mpc: + * examples/APG/Config/config.mwc: + * examples/APG/Containers/containers.mwc: + * examples/APG/Logging/logging.mpc: + * examples/APG/Logging/logging.mwc: + * examples/APG/Misc_IPC/misc_ipc.mpc: + * examples/APG/Misc_IPC/misc_ipc.mwc: + * examples/APG/Naming/naming.mpc: + * examples/APG/Naming/naming.mwc: + * examples/APG/Proactor/proactor.mpc: + * examples/APG/Proactor/proactor.mwc: + * examples/APG/Processes/processes.mpc: + * examples/APG/Processes/processes.mwc: + * examples/APG/Reactor/reactor.mpc: + * examples/APG/Reactor/reactor.mwc: + * examples/APG/Shared_Memory/shared_memory.mpc: + * examples/APG/Shared_Memory/shared_memory.mwc: + * examples/APG/Signals/signals.mpc: + * examples/APG/Signals/signals.mwc: + * examples/APG/Sockets/sockets.mpc: + * examples/APG/Sockets/sockets.mwc: + * examples/APG/Streams/streams.mpc: + * examples/APG/Streams/streams.mwc: + * examples/APG/Svc_Config/svc_config.mpc: + * examples/APG/Svc_Config/svc_config.mwc: + * examples/APG/ThreadManagement/threadmgmt.mpc: + * examples/APG/ThreadManagement/threadmgmt.mwc: + * examples/APG/ThreadPools/threadpools.mpc: + * examples/APG/ThreadPools/threadpools.mwc: + * examples/APG/ThreadSafety/threadsafety.mpc: + * examples/APG/ThreadSafety/threadsafety.mwc: + * examples/APG/Threads/threads.mpc: + * examples/APG/Threads/threads.mwc: + * examples/APG/Timers/timers.mpc: + * examples/APG/Timers/timers.mwc: + Added missing Id tag + +Fri Mar 12 06:18:32 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Added a missing space that broke things when idl files are + involved. + +Fri Mar 12 12:12:43 UTC 2004 Johnny Willemsen + + * Framework_Component_Test.cpp: + * Max_Default_Port_Test.cpp: + * Reactor_Exceptions_Test.cpp: + The test_config.h file must be included as first file else we don't + get log files in our SuSE 9 ACE build which has set ACE_NLOGGING. + +Fri Mar 12 11:03:11 UTC 2004 Johnny Willemsen + + * tests/Auto_IncDec_Test.cpp: + * tests/CDR_File_Test.cpp: + * tests/Capabilities_Test.cpp: + * tests/Get_Opt_Test.cpp: + * tests/Log_Msg_Test.cpp: + * tests/Logging_Strategy_Test.cpp: + * tests/Max_Default_Port_Test_IPV6.cpp: + * tests/Token_Strategy_Test.cpp: + * tests/Obstack_Test.cpp: + The test_config.h file must be included as first file else we don't + get log files in our SuSE 9 ACE build which has set ACE_NLOGGING. + +Thu Mar 11 17:00:14 2004 Steve Huston + + * ace/WIN32_Asynch_IO.cpp (handle_output): Be sure to unregister this + handler from the asynch task before posting the completion. The + completion handler may do anything, including delete the handler, + before this method has a chance to remove it from the asynch task. + +Thu Mar 11 14:35:41 2004 Steve Huston + + * ace/Asynch_IO.cpp (~ACE_Asynch_Connect): Delete the implementation_ + giving it a chance to unregister from the reactor and clean up + anything else needed, as well a plug a memory leak. + +Thu Mar 11 13:59:00 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/bmake.mpd: + + Changed the custom rules to be more compact. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Made custom output files dependent upon the command that generates + them. Additionally, fixed a bug where generated source files + would always be regenerated if idl files existed in the project. + +Thu Mar 11 12:18:59 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Added a .PHONY target for each of the individual targets to avoid + a possible problem if a file or directory exists with the same + name as the target. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Remove duplicated mpc files when aggregating workspaces. If an + mpc file is added before a workspace is aggregated, the + duplication can be detected. If it happens the other way around, + it can not and will be an error. + + * tests/tests.mpc: + + The UUIDTest requires ace_uuid. + +Thu Mar 11 11:49:28 2004 Balachandran Natarajan + + * ace/SString.cpp (substring): + + If the value of the length argument is greater than the size of + the string, we made a mistake by setting the wrong length in the + newly create SString object. Thanks to Michael Kircher + for reporting this. + + * tests/SString_Test.cpp (run_main): + + Added a test for the above problem. + +Thu Mar 11 11:16:13 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Generate workspaces that use directory recursion when the + workspace contains targets within multiple directories. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Maintain directory groups when sorting dependencies. + +Thu Mar 11 08:47:55 2004 Douglas C. Schmidt + + * ace/WIN32_Proactor.cpp (post_completion): + ACE_WIN32_Proactor::post_completion executes these two + operations in wrong order: + + 1. If Proactor event is valid, signal it + 2. Post a completion + + If, for example, a Reactor is connected to the proactor through + the event, it may receive the event notification BEFORE the + completion has been posted, which is wrong. To fix the problem, + those two operations must be swapped: FIRST post a completion, + THEN signal the event. Thanks to Enrico Detoma + and Ishay Green + for reporting this. This closes bugid 1763. + +Thu Mar 11 16:36:09 2004 Kobi Cohen-Arazi + + * tests/Semaphore_Test.cpp (worker): + + Fix a problem in counting the timeouts. if acquire == -1 then + increment timeouts and check diff time against ACE_ALLOWED_SLACK + +Thu Mar 11 07:10:15 2004 Balachandran Natarajan + + * ace/String_Base.cpp (resize): + + Set release_ = 1, else we will start leaking memory. Thanks to + Andrew G. Harvey for reporting the problem. + +Thu Mar 11 06:42:19 2004 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/Options.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/Version.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added a new option, -genins, that will generate install files + after processing each project that can be used with + prj_install.pl. + + * bin/prj_install.pl: + + This script reads .ins files generated by MPC and installs + portions of a project into an alternate location. + +Wed Mar 10 18:34:12 2004 Tao Lu + + * bin/fuzz.pl: + Changed the requried runlevel for check_for_include test. + Also added support for the user to specify any single test + to run by using the [-t test_name] argument option. + +Wed Mar 10 18:54:01 2004 Balachandran Natarajan + + * bin/MakeProjectCreator/configs/ciao_servant.mpb: + + Added cidlflags as a keyword. Thanks to Ed Mulholland for + motivating this. + +Wed Mar 10 12:33:04 2004 Tao Lu + + * bin/fuzz.pl: + Added support for checking of + "#include <(ace)|(tao)|(ciao)\/.*>" to avoid conflict + with Doxygen. + Thanks Don Hinton for the idea. + +Wed Mar 10 11:39:41 2004 Steve Huston + + * ace/INET_Addr.cpp (set (const sockaddr_in *addr, int len)): Check + the specified length to be sure we don't overrun the structure the + address is copied to. There's a bit of evidence from a customer + suggesting that (Windows) GetAcceptExSockaddrs() may return an + address length of the length passed to AcceptEx, and not the + length of a sockaddr_in structure. This guards against that. + +Wed Mar 10 11:29:13 UTC 2004 Johnny Willemsen + + * ace/Task.cpp: + Fixed unused parameter warning in single threaded builds + +Wed Mar 10 10:16:43 UTC 2004 Johnny Willemsen + + * bin/msvc_mpc_auto_compile.pl: + Corrected end message + +Wed Mar 10 10:07:54 UTC 2004 Johnny Willemsen + + * bin/msvc_mpc_auto_compile.pl: + Improved verbose output + +Tue Mar 9 17:00:11 UTC 2004 Johnny Willemsen + + * netsvcs/clients/Logger/direct_logging.cpp: + * netsvcs/clients/Logger/indirect_logging.cpp: + Fixed compile problems in wchar builds + +Tue Mar 9 18:03:42 2004 Olli Savia + + * ace/config-lynxos.h + Removed ACE_LACKS_INET_ATON. + + * ace/os_include/arpa/os_inet.h + Added missing prototype inet_aton for LynxOS. + +Tue Mar 9 09:22:19 2004 Balachandran Natarajan + + * ace/POSIX_Proactor.cpp: + + Fixed a unused variable warning. + +Tue Mar 9 14:31:11 UTC 2004 Johnny Willemsen + + * examples/Reactor/WFMO_Reactor/run_test.pl: + Improved this test script so that it outputs an error when the + executable cannot be found, instead of just trying to spawn a non + existent executable. + +Tue Mar 9 08:01:20 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug where generated files were not added to the list of + output files for a custom command. + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added the ability to combine multiple workspaces into one by + listing them within a workspace declaration. + +Tue Mar 9 09:07:43 UTC 2004 Johnny Willemsen + + * ace/POSIX_Proactor.cpp: + Added ACE_UNUSED_ARG to silence unused parameter warning + +Tue Mar 9 09:03:04 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added an other dsp to build first + +Tue Mar 9 08:25:15 2004 Olli Savia + + * ace/config-lynxos.h + Readded ALIGNBYTES and ALIGN macros. LSOCK.cpp uses these + which I missed due to macro expansion. + +Mon Mar 8 18:03:41 2004 Steve Huston + + * ace/Timer_Queue_Adapters.i (activate): Remove erroneous + ACE_UNUSED_ARG lines. Someone removed the arg names from the + signature, making ACE_UNUSED_ARG unnecessary. + +Mon Mar 8 17:03:18 2004 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/AutomakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Changed the default behavior for all "make" based workspace + creators such that the -hierarchy option is the default. It is no + longer necessary to pass the -hierarchy option when generating + workspaces and projects of type make, bmake, borland, gnuace or + nmake. + +Mon Mar 8 11:38:43 2004 Douglas C. Schmidt + + * ace/Time_Value.inl (set): Make sure to roundup the + double value properly. Thanks to James Hu for suggesting the + fix and for Mikael Lundqvist + for reporting it. + +Mon Mar 8 15:52:33 2004 Steve Huston + + * ace/POSIX_Asynch_IO.{h cpp}: Added ACE_POSIX_Asynch_Read_Dgram and + ACE_POSIX_Asynch_Write_Dgram functionality. These were previously + left as "not supported". The functions don't offer the + immediate-success feature available on Windows, and the Dgram + socket must be "connected" as there's no address-specification + feature available in the asynch IO facility on POSIX. + + * ace/POSIX_Proactor.cpp: Comment out the signal setup; this should + not be necessary and, indeed, is erroneous, at least on Linux. + It's commented out instead of removed in case further testing on + other platforms determines that it is needed sometimes. + +Mon Mar 8 13:48:06 2004 Balachandran Natarajan + + * NEWS: + + Added a NEWS file which tracks user visible changes between + every beta. Thanks to Olli Savia and Gary Duzan for motivating + this. + +Mon Mar 8 13:18:13 2004 Balachandran Natarajan + + * ace/Timer_Queue_Adapters.h: + * ace/Timer_Queue_Adapters.i: + + Fixed warnings for the SunCC compiler. + +Mon Mar 8 20:32:35 2004 Olli Savia + + * ACE-INSTALL.html + Updated LynxOS section. + +Mon Mar 8 20:21:15 2004 Olli Savia + + * ace/config-lynxos.h + Added correct handling of ACE_NEEDS_IPC_1C_H for different + LynxOS versions. + + ACE_HAS_TERM_IOCTLS is now enabled for all LynxOS versions. + + Moved missing prototype declaration of pthread_sigmask to + os_signal.h. + + Removed unneeded ALIGNBYTES and ALIGN macros. + + * ace/os_include/os_signal.h + Added missing prototype declaration of pthread_sigmask. + +Mon Mar 8 18:34:09 2004 Kobi Cohen-Arazi + + * ace/Process_Semaphore.cpp: + * ace/Process_Mutex.inl: + Added SEM_UNDO when using SysV Semaphore Complex methods. + That fixes bug 1153 thanks to Frank Kuhlmann + +Mon Mar 8 16:33:12 UTC 2004 Johnny Willemsen + + * ASNMP/tests/tests.mpc: + * ASNMP/asnmp/asnmp.mpc: + * ASNMP/examples/get/get.mpc: + * ASNMP/examples/next/next.mpc: + * ASNMP/examples/set/set.mpc: + * ASNMP/examples/trap/trap.mpc: + * ASNMP/examples/walk/walk.mpc: + Added missing file extensions. This prevented resulted in project + files that did nothing. + +Mon Mar 8 16:14:13 UTC 2004 Johnny Willemsen + + * ace/Thread_Manager.cpp: + Rewrote the retrieval of the thread priority so that we don't + have to do a static_cast. The BCB compiler doesn't allow this + cast. + +Mon Mar 8 13:57:12 UTC 2004 Johnny Willemsen + + * tests/TkReactor_Test.cpp: + Fixed compile errors. Thanks to Robert Schiele + for reporting this. + +Sun Mar 7 18:35:15 2004 Olli Savia + + * ace/config-lynxos.h + Removed unneeded ACE_LACKS_MKTEMP macro. + + * ace/os_include/os_stdlib.h + Added missing mktemp() prototype for LynxOS 3.x.x + +Sun Mar 7 17:29:33 2004 Olli Savia + + * ace/config-lynxos.h + Removed some unneeded ACE_LACKS_* macros. + + * ace/os_include/os_stdlib.h + * ace/os_include/os_strings.h + Added missing prototypes for LynxOS 3.x.x + +Sat Mar 06 12:48:39 2004 Balachandran Natarajan + + * ace/Thread_Manager.cpp: + + Fixed a compilation error on Win32. + +Fri Mar 5 23:09:14 2004 Balachandran Natarajan + + * ace/OS_NS_sys_socket.inl (closesocket): + + Win32 distinguishes between shutting down a socket connection + and closing a socket. Therefore call shutdown on the socket + before closing down the socket. Thanks to Kitty for digging up + the MSDN documentation and the patch. + + * ace/Task.cpp (activate): + * ace/Task.h (activate): + + Added an extra argument, inherit_priority which tells the thread + manager to inherit the priority of the calling thread or use the + priority passed in. + + * ace/Thread_Manager.cpp: + * ace/Thread_Manager.h (spawn, spawn_n, spawn_i): + + Added an extra argument, inherit_priority which tells the thread + manager to inherit the priority of the calling thread or use the + value of the priority passed in. This argument is set to false + by default, which would retain the classical behaviour. + + Thanks to Abhijit Sachdev for reporting the + bug. Thanks to Dr. Schmidt and Kitty for motivating me to add + the fix in ACE. + + I am not still certain whether the above fix is okay. Folks who + call ACE_Thread::spawn* and ACE_OS::thr_create () will not get + this feature. Still wondering whether we should propogate this + feature down to ACE_Thread or ACE_OS level. Willing to hear any + advise or motivation on this. + + * ace/Thread.cpp: + + Cosmetic formatting fixes. + + * ace/os_include/os_langinfo.h: + * ace/os_include/os_spawn.h: + + Fixed typos in the included file names. Thanks to Robert + Schiele for reporting the problem. + +Fri Mar 5 18:12:24 2004 Steve Huston + + * ace/Asynch_Acceptor.cpp (open): If any of the steps in the open fail, + close the socket and reset listen_handle_ to ACE_INVALID_HANDLE + before returning. Also added ACE_LIB_TEXT around the naked literal + strings for ACE_ERROR. + +Fri Mar 5 22:56:45 UTC 2004 Don Hinton + + * bin/MakeProjectCreator/templates/gnu.mpd: + Converted it back to unix file by running dos2unix. Added -*- + Makefile -*- to top of file. + +Fri Mar 5 16:56:25 2004 Yamuna Krishnamurthy + + * bin/tao_other_tests.lst: + + Replaced the string 'RTP/UDP' with 'RTP_UDP' where specified as + a command line argument to the AVStreams tests run_test.pl. This + was to ensure that the '/' in the string does not confuse the + script parser. This should fix the run time errors in the + builds. + +Fri Mar 5 12:14:56 2004 Chad Elliott + + * bin/MakeProjectCreator/config/mfc.mpb: + + Set the ACE_HAS_MFC to 1 instead of just defining it. + + * bin/MakeProjectCreator/config/notifytest.mpb: + * bin/MakeProjectCreator/config/rtnotify.mpb: + + Switched these projects to use notification instead of notify. + The notify base project only inherited from notification and + provided nothing else. + + * bin/MakeProjectCreator/config/notify.mpb: + + Removed this file. + +Fri Mar 5 10:56:35 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + * bin/MakeProjectCreator/modules/VC7WorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + More code optimizations. A significant time reduction has + occurred with the use of -hierarchy. + +Fri Mar 5 09:47:55 2004 Olli Savia + + * ACE-INSTALL.html + Updated LynxOS section and fixed some HTML errors. + + * include/makeinclude/platform_lynxos.GNU + Compile flag -Wall is now used on all versions of LynxOS. + +Fri Mar 5 01:41:54 UTC 2004 Don Hinton + + * ace/Node.h: + Added forward declaration for ACE_Unbounded_Queue_Const_Iterator. + + * include/makeinclude/rules.bin.GNU: + * include/makeinclude/rules.lib.GNU: + * include/makeinclude/rules.local.GNU: + Moved the IDL_SRC dependencies from rules.local.GNU to the bin + and lib files to get around a problem with hand crafted makefile + rules including all dependencies in the link line. + +Thu Mar 4 17:45:29 2004 Steve Huston + + * include/makeinclude/platform_aix_ibm.GNU: For AIX 5.2, add a compile + flag, -U__C99_RESTRICT, to work around a compiler problem that is + tickled by aio.h. This can be removed when IBM supplies a compiler + fix for Visual Age C++, which they intend to do in May 2004. + + * ace/POSIX_Asynch_IO.cpp: Add #include "ace/ACE.h" to see + ACE::set_flags(), and "ace/OS_NS_sys_stat.h" to see + ACE_OS::filesize() on AIX. + +Thu Mar 4 07:39:52 2004 Douglas C. Schmidt + + * ace/Node.h: Added ACE_Unbounded_Queue_Const_Iterator as a + friend to ACE_Node. Thanks to Matthew Harris + for reporting this. This closes BUGID + 1759. + +Thu Mar 4 16:14:04 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed an infinite loop introduced by the previous change. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Added progress indication when writing out workspaces. + +Thu Mar 4 13:19:06 2004 Chad Elliott + + * bin/DependencyGenerator/DependencyEditor.pm: + * bin/DependencyGenerator/DependencyGenerator.pm: + * bin/DependencyGenerator/Preprocessor.pm: + * bin/depgen.pl: + + Added an option to exclude dependency information from user + specified files. + + * include/makeinclude/rules.local.GNU: + + Added the option to exclude dependencies found from config.h to + avoid pulling in files such as config-linux.h, config-sunos5.6.h, + etc. + + * bin/g++dep: + + Added an option to be compatible with depgen.pl. + +Thu Mar 4 11:17:27 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/AutomakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/BMakeProjectCreator.pm: + * bin/MakeProjectCreator/modules/BorlandProjectCreator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + + Removed extraneous calls to sort. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateInputReader.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + + More code optimizations for an additional 8% performance increase. + +Thu Mar 4 07:59:15 2004 Chad Elliott + + * ace/config-lynxos.h: + * include/makeinclude/platform_lynxos.GNU: + + Enable alloca for LynxOS and remove the -ansi option from CCFLAGS + (which allows users to use alloca). Thanks to Olli Savia + for providing this patch. + +Thu Mar 4 06:39:11 2004 Olli Savia + + * tests/Max_Default_Port_Test_IPV6.cpp + Fixed compile error on LynxOS. + +Thu Mar 4 04:28:53 UTC 2004 Don Hinton + + * include/makeinclude/rules.local.GNU: + Added a dependency rule that all objects depend on IDL_SRC, if + it is defined. This makes more sense that having the resulting + lib or exe dependent since it's the objects that use them, or + more precisely, the cpp's include the headers, etc... Thanks to + Bala for motivating this. + +Thu Mar 4 01:30:45 UTC 2004 Don Hinton + + * include/makeinclude/wrapper_macros.GNU: + Rolled back change: Tue Mar 2 23:57:29 UTC 2004 Don Hinton + . Apparently, some compilers need + things like -I, etc..., when dealing with templates at link + time. After the BFO release, we may try to determine who needs + what, but since it isn't critical path, I've rolled it back. + Thanks to Steve Huston from pointing this out. + +Wed Mar 3 13:06:59 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Put in some more optimizations that make MPC about 9% faster. + Also, fixed a problem with generating implicit project + dependencies too many times when the -hierarchy option is used. + +Wed Mar 3 16:58:16 UTC 2004 Don Hinton + + * include/makeinclude/rules.nested.GNU: + Don't use the "-C" option when invoking make recursively, use + the "cd subdir && make ..." variant instead. This fixes a + compatibility problem Clearmake. Thanks to "Pai, Ganesh" + for this suggestion. + +Wed Mar 3 13:43:17 UTC 2004 Don Hinton + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + Use a variable $TARGET_SEP instead of '-' to seperate the + project name from the target. Thanks to Chad Elliott + for reporting the problem. + +Wed Mar 3 07:42:54 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/StringProcessor.pm: + + Rewrote my optimization from Tue Mar 2 12:28:09 2004 such that + escaped double quotes are preserved. + +Wed Mar 3 07:08:11 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + When dealing with template's, we need to take into account the + possibility of windows absoulte paths (eg. c:\foo\gnu.mpd). + +Tue Mar 2 20:03:43 2004 Ossama Othman + + * ace/OS_NS_unistd.h (rmdir): + * ace/OS_NS_unistd.inl (rmdir): + + Added ACE_OS::rmdir() implementation submitted by Andrew + T. Finnell . [Bug 1409] + +Wed Mar 3 03:23:35 UTC 2004 Don Hinton + + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + Add a reverseclean target that only has a realclean dependency, + so that callers expecting a reverseclean target will get still + work. Since reverseclean is not implemented in normal + makefiles, just in top level ones, this target must be handled + explicitly. A lot of autobuilds still call reverseclean. + +Tue Mar 2 18:59:53 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/StringProcessor.pm: + + Reverted my change from Tue Mar 2 12:28:09 2004 which broke in + certain usages. + +Tue Mar 2 18:36:08 2004 Chad Elliott + + * ace/TMCast/TMCast.mpc: + + Fixed the requires by removing the comma. + +Tue Mar 2 23:57:29 UTC 2004 Don Hinton + + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + Added a check for "ciao" that mimics the behavior of + already in place for tao. This will enable us to know + if it's a ciao project so we can include a ciao specific + rules file. + + * bin/MakeProjectCreator/modules/Parser.pm: + Output the name of the file that can't be opened + instead of just saying unable to read. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + Don't always tack on a file extension. This was particularly + vexing when trying to pass a different template file. + This way, you can let your shell complete the file name + that you find without having to hit the delete key 5 times. + + Allow calls to pass the absolute path--just easier for + scripts to handle. + + * include/makeinclude/wrapper_macros.GNU: + Removed $(CCFLAGS) $(CPPFLAGS) from the link step. Thanks + to Boris Kolpackov for pointing + this out. + + * include/makeinclude/rules.local.GNU: + Make sure assignments to CLEANUP_OBJS is always additive. + + * include/makeinclude/platform_chorus.GNU: + * include/makeinclude/platform_chorus4.x_g++.GNU: + * include/makeinclude/platform_freebsd.GNU: + * include/makeinclude/platform_linux.GNU: + * include/makeinclude/platform_lynxos.GNU: + * include/makeinclude/platform_macosx.GNU: + * include/makeinclude/platform_macosx_panther.GNU: + * include/makeinclude/platform_openbsd.GNU: + * include/makeinclude/platform_psosim_g++.GNU: + * include/makeinclude/platform_qnx_neutrino.GNU: + * include/makeinclude/platform_qnx_rtp_gcc.GNU: + * include/makeinclude/platform_sunos5_g++.GNU: + * include/makeinclude/platform_unixware_g++.GNU: + Don't always include -pipe in CFLAGS, let users + control it with the pipes option. + +Tue Mar 2 18:46:11 2004 Steve Huston + + * tests/SSL/Thread_Pool_Reactor_SSL_Test.cpp: + * tests/RMCast/RMCast_Fragment_Test.cpp: + * tests/RMCast/RMCast_Reassembly_Test.cpp: Added #include + "ace/OS_NS_string.h" to get missing ACE_OS methods on AIX. + + * tests/RMCast/RMCast_Retransmission_Test.cpp: Added #include + "ace/ACE.h" to get missing methods on AIX. + +Tue Mar 2 23:40:42 UTC 2004 Don Hinton + + * bin/create_ace_build.pl: + Don't remove files with the .exp extension from the list + of files used to create a workspace since they are used + by the gperf tests and will break autobuilds that use + this script. + +Tue Mar 2 23:26:28 UTC 2004 Don Hinton + + * bin/g++dep: + Added the -MG option so that missing dependency files won't + cause g++ to stop processing. Thanks for Steve Huston for + pointing this out. + + Modified the sed script that modifies the output to correctly + blow away only the platform specific config file. This was + needed since we now have config-all.h and config-lite.h. Thanks + to Bala for pointing out the problem. + + * ace/Makefile.ace: + * ace/RMCast/Makefile: + Updated dependencies. + +Tue Mar 2 23:12:17 UTC 2004 Don Hinton + + * tests/Dirent_Test.cpp: + Fixed the CVS Id tag. + +Tue Mar 2 22:58:40 UTC 2004 Don Hinton + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + Rewrote the output generation to be more human readable + by using standard makefile techniques. Also, discovered + a bug in the dependencies (that was also present prior + to this change) since it's now easier to grok the + generated makefile. I'll fix it once I've checked in + all the other MPC changes in my queue. + +Tue Mar 2 12:28:09 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/bmake.mpd: + * bin/MakeProjectCreator/templates/bmakedllexe.mpt: + * bin/MakeProjectCreator/templates/bmakelibexe.mpt: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/nmakeexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc6dspdllexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsplibexe.mpt: + * bin/MakeProjectCreator/templates/vc7.mpd: + * bin/MakeProjectCreator/templates/vc7exe.mpt: + * bin/MakeProjectCreator/templates/vc7libexe.mpt: + + Allow the user to generate projects with executable names with a + modifier for different configurations similar to the library + modifier for debug/release. To enable this add '-value_template + use_modifier=1' to your MPC command line. + +Tue Mar 2 12:33:51 2004 Steve Huston + + * m4/compiler.m4: Added HPUX_VERS to HP-UX compiler options, and + -D_HPUX_SOURCE to aC++ options. This mirrors what the traditional + platform options do. + +Tue Mar 2 11:16:03 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/BMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + + Avoid looping and using substr to count instances of '/', use tr + instead. + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/FeatureParser.pm: + * bin/MakeProjectCreator/modules/Parser.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/StringProcessor.pm: + * bin/MakeProjectCreator/modules/TemplateInputReader.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + * bin/MakeProjectCreator/modules/VC7ProjectCreator.pm: + + Performed various optimizations to gain roughly a 10% increase in + performance. + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Rewrote the workspace generation code to be similar to the other + make based creators and reduced the size of the generated + workspace. + + * bin/MakeProjectCreator/modules/Version.pm: + + Incremented the version number. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Fixed two bugs in the workspace creator: + + 1) Using implicit as a scoped assignment caused project files to + be added multiple times which is an error. + 2) When a project name with characters that could be special + characters in regular expressions are not used within a + workspace, but are referenced by other projects, the code + would bomb out. + +Mon Mar 1 18:03:22 2004 Steve Huston + + * tests/Multicast_Test_IPV6.cpp: Added #include "ace/Min_Max.h" to + see ACE_MIN, ACE_MAX. + +Mon Mar 1 22:50:51 UTC 2004 Craig Rodrigues + + * performance-tests/SCTP/SOCK_SEQPACK_srv.cpp: + Fix this test so that it actually reports + multiple interfaces properly. + +Mon Mar 01 14:54:14 2004 Irfan Pyarali + + * tests\MT_Reference_Counted_Notify_Test.cpp (Simple_Event_Handler): + * tests\Timer_Queue_Reference_Counting_Test.cpp (Simple_Event_Handler): + + Removed asserts in add_reference() and remove_reference() for + event handlers not participating in reference counting. + +Sun Feb 29 14:45:11 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/gnu.mpd: + When building a static build, add always the staticflags flags + to the CPPFLAGS. Previously we did this only when building the + libraries, but then the executables get link errors. This fixes + compile problems when using Cygwin or MinGW in a static build. + +Sun Feb 29 14:04:41 UTC 2004 Johnny Willemsen + + * tests/Framework_Component_DLL_Export.h: + Added check for ACE_AS_STATIC_LIBS for setting the export flags for + proper building of static libraries. + +Sun Feb 29 13:59:13 UTC 2004 Johnny Willemsen + + * performance-tests/Synch-Benchmarks/Synch_Lib/export_mac.h: + Added check for ACE_AS_STATIC_LIBS for setting the export flags for + proper building of static libraries. + +Sun Feb 29 09:53:15 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added an other dsp to build first + +Sat Feb 28 15:56:11 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added more dsps that must be build first + +Fri Feb 27 12:33:10 2004 Irfan Pyarali + + * ace/Event_Handler.cpp (add_reference and remove_reference): + + Previously, add_reference() and remove_reference() were called + on a event handler only if the reference counting policy was + enabled. Unfortunately, this meant that at every place where + add_reference() and remove_reference() were called, a check had + to be made to see if the reference counting policy was enabled. + It also meant that Event_Handler_var class could not be used + with event handlers that do not enable the reference counting + policy since the Event_Handler_var class was calling + add_reference() and remove_reference() without checking the + reference counting policy. + + So I modified the add_reference() and remove_reference() methods + so that they check perform the necessary check for the reference + counting policy. This way the Event_Handler_var can be used + without concern for whether the event handler has the reference + counting policy enabled. Similarly, add_reference() and + remove_reference() can also be called without concern for + whether the event handler has the reference counting policy + enabled. Only in some places in the ACE library, + remove_reference() cannot be called on the event handler because + it might have been closed. Therefore, an explicit check for the + reference counting policy still needs to be performed. + + Reference counting in the following files was made simple + because of above change: + + - ace/Select_Reactor_Base.cpp + - ace/Select_Reactor_T.cpp + - ace/Timer_Queue_T.cpp + - ace/WFMO_Reactor.cpp + + The tests/Reference_Counted_Event_Handler_Test.cpp test was + extended to check this change. + + Thanks to Dom Monteiro and Liat + (vliat1@hotmail.com) for pointing out this problem. + +Fri Feb 27 11:20:30 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Parser.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Change the way lines are read so line continuation (ending a line + in \) would work uniformly within mpb, mpc and mwc files. + +Fri Feb 27 08:51:20 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug where 'specific' assignments were always added to + existing values. It did not allow for straight assignments or + subtractions. Now, specific assignments (additions and + subtractions) are processed as they are read instead of at the end + of the project. + +Fri Feb 27 11:34:11 UTC 2004 Johnny Willemsen + + * include/makeinclude/compiler.bor: + When doing a release build with BCB5 also don't use -O2. Thanks + to Andreas Wagner for reporting this. This + fixes bug [1754]. + +Fri Feb 27 09:02:07 UTC 2004 Johnny Willemsen + + * ace/OS_NS_unistd.h: + Fixed definition fsync to fix linker errors in the msvc6 + static builds. + +Thu Feb 26 18:08:19 2004 Steve Huston + + * examples/APG/Reactor/Client.cpp: Add missing #include + "ace/OS_NS_string.h" to get ACE_OS::strlen(). + +Thu Feb 26 18:02:41 2004 Steve Huston + + * m4/tls.m4: Add handling for ACE_TLS_LDFLAGS so user can specify + linker options (e.g. -L) necessary to find SSL libs. + +Thu Feb 26 12:26:28 2004 Ossama Othman + + * tests/Makefile.am (Bug_1576_Regression_Test): + + Added this test to the list of tests. It was missing. Thanks + to Kevin Stacy for reporting the problem. + + * tests/DLL_Test.cpp (dynamic_cast_test): + + Corrected spelling in error message. + + * THANKS: + + Added Kevin Stacy to the hall of fame. + +Thu Feb 26 10:54:42 2004 Balachandran Natarajan + + * Makefile: + + Removed the CIAO_Core target, since it was brain dead in the + first place. Thanks to Ed Mulholland for motivating this. + +Thu Feb 26 11:15:39 2004 Steve Huston + + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: In declaration of + ACE_Output_Handler, add "using ACE_Service_Handler::open;" before + declaring the override of it. Helps to disambiguate which open() + we mean, ACE_Task::open(), or ACE_Service_Handler::open(). Sun + Forte 8 complained about this ambiguity. Thanks to Johnny Willemsen + for reporting this and working on a fix. + +Wed Feb 25 13:11:47 2004 Douglas C. Schmidt + + * ace/OS_NS_unistd.inl: Added support for ACE_OS::fsync(). + Thanks to Michel Drapeau for + reporting this. + +Wed Feb 25 16:37:11 2004 Steve Huston + + * tests/Proactor_Test_IPV6.cpp: Fixed problem introduced in change + earlier today. + +Wed Feb 25 11:39:38 2004 Chad Elliott + + * ace/codecs.mpb: + + Removed unnecessary macros. I missed this one in the previous + commit. + +Wed Feb 25 11:28:11 2004 Chad Elliott + + * ace/OS_NS_unistd.inl: + + If ACE_HAS_CLOCK_GETTIME is defined, use nanosleep() in + ACE_OS::sleep (const ACE_Time_Value &tv) as is used in + the other version, ACE_OS::sleep (u_int seconds). + + * ace/other.mpb: + * ace/uuid.mpb: + + Removed unnecessary macros. + +Wed Feb 25 12:09:31 2004 Steve Huston + + * tests/Proactor_Test_IPV6.cpp: Fixed problems with mismatched + char/wchar_t usage. + +Wed Feb 25 10:43:32 2004 Chad Elliott + + * ace/config-lynxos.h: + + Fixed the portion of the header that determines whether we are + building on LynxOS 4.0.x or not. Thanks to Olli Savia + for reporting this problem and testing my changes on + LynxOS 3.1.0. + +Tue Feb 24 17:31:22 2004 Steve Huston + + * examples/APG/Reactor/Client.cpp: Fixed manipulation and iterations_ + count and way that memory is copied into a new ACE_Message_Block. + Thanks to Karen L. Regner for reporting + these problems. + + * THANKS: Added Karen Regner to the Hall of Fame. + +Tue Feb 24 17:22:45 2004 Steve Huston + + * ace/Message_Block.h: Fixed up some of the documentation; clarified + that the data buffer given to a constructor is not copied anywhere, + but referenced. + +Tue Feb 24 18:57:11 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added another dsp that must be build first + +Tue Feb 24 18:13:19 UTC 2004 Johnny Willemsen + + * performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test{h,cpp}: + Fixed compile problems in wchar builds + +Tue Feb 24 17:58:43 UTC 2004 Johnny Willemsen + + * ace/Hash_Map_Manager_T.{h,i}: + Added protected accessor methods cur_size and table. People which + create a derived class can use these accessors. Thanks to Ganesh Pai + for the idea. + +Tue Feb 24 17:34:11 UTC 2004 Johnny Willemsen + + * performance-tests/Synch-Benchmarks/Perf_Test/Adaptive_Lock_Performance_Test_Base.h: + * performance-tests/Synch-Benchmarks/Perf_Test/adaptive_mutex_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/adaptive_recursive_lock_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/adaptive_sema_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/Benchmark_Performance.{h,cpp}: + * performance-tests/Synch-Benchmarks/Perf_Test/guard_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test.{h,cpp}: + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.{h,cpp,i}: + * performance-tests/Synch-Benchmarks/Perf_Test/pipe_proc_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/pipe_thr_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/sysvsema_test.cpp: + Fixed compile problems in wchar builds + +Tue Feb 24 07:49:17 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + + Added a fill_value() template value called mpc_files which returns + an array of mpb files and the mpc file that is currently being + processed. + + * bin/MakeProjectCreator/modules/HTMLProjectCreator.pm: + + Fixed a divide by zero error that would arise when there is no + inheritance at all. + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/templates/bmake.mpd: + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/html.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/va4icc.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Added a new keyword called pure_libs which is similar to lit_libs + however no file extension is added to the name. So, it is + expected that the user will provide the complete library name when + using pure_libs. + +Mon Feb 23 16:57:19 2004 Steve Huston + + * ace/OS_NS_unistd.inl (write): On Windows with overlapped mode in + an error condition, need to use ACE_FAIL_RETURN, not naked return, + to properly set errno to GetLastError. + +Mon Feb 23 17:33:04 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added some more project files that must be build first + +Mon Feb 23 16:08:43 UTC 2004 Johnny Willemsen + + * ace/ACE_export.h: + When using Cygwin and MinGW GCC version 3.3.1 or later we get dozens + of warnings about methods that are defined locally after being + referenced with dllimport. So, when using Cygwin or MinGW, when + building with inlining enabled, make sure the methods in the ACE_OS + namespace are marked as inline and not with dllimport. This fixes + the warnings in the ACE_OS namespace but not the warnings in all + other places. Thanks to Wu Yongwei for sending + a fix for this. + +Mon Feb 23 07:03:11 2004 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/templates/html.mpd: + * bin/MakeProjectCreator/modules/HTMLProjectCreator.pm: + * bin/MakeProjectCreator/modules/HTMLWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + * bin/MakeProjectCreator/modules/MPC.pm: + * bin/MakeProjectCreator/modules/MWC.pm: + + Added Justin Michel's HTML workspace and project creator and put + in many enhancements including an inheritance hierarchy display + and information from the MPC templates (when used with the -ti + option). + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Provide the full file names to the base projects and let the + individual project creators deal with that. + + * bin/MakeProjectCreator/modules/VA4ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC6ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC7ProjectCreator.pm: + + Removed the unused separate_static_project() method. + + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplib.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + + Renamed some temple variables. + +Sat Feb 21 14:24:20 2004 Balachandran Natarajan + + * include/makeinclude/platform_macosx_panther.GNU: + + Added -mpcpu=G3 and -mtune=G4 to OCFLAGS. Mac OS X 10.3 requires + a PowerPC G3 chip and hence this isn't adding any restrictions + to ACE/TAO that the target platform doesn't already have for + itself. Thanks to Thomas Costa for the + patches. + +Sat Feb 21 19:56:13 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added some more project files that must be build first when doing + at full static build. + +Sat Feb 21 19:49:11 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Build FaultTolerance.dsp after FTORB_Utils and PortableGroup + +Sat Feb 21 15:14:43 UTC 2004 Johnny Willemsen + + * Kokyu/tests/EDF/test.cpp: + Fixed compile problem in wchar build. + +Sat Feb 21 15:08:12 UTC 2004 Johnny Willemsen + + * performance-tests/Synch-Benchmarks/synch_driver.cpp: + Fixed compile problem in wchar build. + +Sat Feb 21 08:33:55 2004 Balachandran Natarajan + + * ace/DEV_IO.i (recv_n): + + Using ACE::recv_n () created problems on Win32 serial port + code. Now we call recv_n () on all platform on all platforms but + Win32. On Win32 we call read_n () which works. Thanks to Philip + Miller for reporting the problem. + +Sat Feb 21 08:30:53 2004 Balachandran Natarajan + + * ace/CDR_Base.h: + * ace/CDR_Base.cpp: + Reverted this change "Fri Feb 20 17:14:46 2004 Irfan Pyarali + " as I work about a way to handle + this. + +Fri Feb 20 18:21:39 2004 Steve Huston + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: + AC_Input_Handler::close() should accept a u_long, not u_int, to + properly override ACE_Svc_Handler::close(). + AC_CLD_Connector::connect_svc_handler() first arg is a + ACE_Svc_Handler*&, not ACE_Svc_Handler*, to properly override + ACE_Connector::connect_svc_handler(). + Thanks to Johnny Willemsen for pointing these out. + +Fri Feb 20 17:14:46 2004 Irfan Pyarali + + * ace/CDR_Base.{h,cpp} (NonNative LongLong and LongDouble): + + Added assignment operators for these two types. + + * ace/CDR_Stream.cpp (read_16): + + The function for reading a longdouble was adjusting and aligning + the buffer to longlong size rather than to longdouble size. + +Fri Feb 20 17:12:14 2004 Yamuna Krishnamurthy + + * bin/tao_other_tests.lst: + + Modified script to run Pluggable and Simple_Two_Stage tests with + SCTP_SEQ transport protocol only when the SCTP config flag is + set. + +Fri Feb 20 21:18:13 UTC 2004 Johnny Willemsen + + * Static_Performance.dsw: + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore_static.dsp: + * examples/Service_Configurator/IPC-tests/server/Server_static.dsp: + * examples/ASX/CCM_App/CCM_App_static.dsp: + Removed these static msvc6 project files. Use MPC to generate these + if you need them. These are outdated and should have gone before 1.4 + was released. + +Fri Feb 20 18:47:26 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added FaultTolerance.dsp, RTCosScheduling and FtRtEvent.dsp to this + file, so that they are build first with all other needed libs in the + static builds. + +Fri Feb 20 16:40:13 UTC 2004 Johnny Willemsen + + * apps/mkcsregdb/mkcsregdb.cpp: + Fixed warning in BCB builds about comparing signed and unsigned + values + +Fri Feb 20 07:51:04 2004 Balachandran Natarajan + + * etc/ace.doxygen: + + Reverted the change "Sun Dec 28 15:09:34 UTC 2003 Don Hinton + " since it broke stuff in + ACE-categories.html. Don seems to have a better fix. Till + then. This reversal will create problems for folks who untar + doxygen documentation on platforms where the path length could + be an issue. + +Thu Feb 19 15:22:49 2004 Steve Huston + + * ace/Template_Instantiations.cpp: Add a block to keep HP aC++ from + issuing a warning about an empty translation unit. + + * ace/Global_Macros.h: Added #include "ace/config-lite.h" because + this file checks on config options. + + * ace/config-all.h: No need to include "ace/Global_Macros.h" from here. + + * ace/MEM_Addr.cpp (same_host): To account for IPv4/IPv6 differences, + use ACE_INET_Addr::operator==. Because that method takes the port + number into account when comparing, and we don't care about the + port number, copy the two addresses to new ACE_INET_Addr objects + and set their port numbers to 0, then compare. + + * tests/Multicast_Test_IPV6.cpp: + * tests/Proactor_Test_IPV6.cpp: Corrected name of log file so + the test script can find it. + +Thu Feb 19 08:06:09 2004 Douglas C. Schmidt + + * ace/OS_NS_sys_stat.inl (lstat): Removed the ACE_WIN32 + branch since Windows doesn't support _lstat(). Thanks to + Johnny Willemsen for this. + + * ace/config-win32-common.h: Added ACE_LACKS_LSTAT. Thanks to + Johnny Willemsen for this. + +Thu Feb 19 11:40:11 UTC 2004 Johnny Willemsen + + * tests/Dirent_Test.cpp: + Fixed typo + +Wed Feb 18 13:51:28 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/FeatureParser.pm: + * bin/MakeProjectCreator/modules/OutputMessage.pm: + * bin/MakeProjectCreator/modules/Parser.pm: + + Make all of the error and diagnostic messages go through the + OutputMessage module. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Made inheritance hierarchy information available to the project + creator subclasses. + + * bin/MakeProjectCreator/modules/Version.pm: + + Increment the version number. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Fixed a problem with the implicit inter-project dependency + generation code. It now looks at indirect project dependency to + avoid adding inter-project dependencies when they are not needed. + This fixes [BUGID 1653]. + +Wed Feb 18 11:36:44 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/bmake.mpd: + + Added a missing <%endif%>. + +Wed Feb 18 10:41:07 2004 Balachandran Natarajan + + * ace/OS_NS_sys_stat.inl: Removed an extra endif. Thanks to Don + Hinton for sending the patch. + +Wed Feb 18 07:04:55 2004 Douglas C. Schmidt + + * ace/OS_NS_sys_stat.{h,inl}: Changed the first parameter of + lstat() to be ACE_TCHAR rather than just char and revised the + #defines so things should work better on Windows. Thanks to + Johnny Willemsen for reporting this. + + * tests/Dirent_Test.cpp (dirent_count): Rearranged some + code so the test would work. Thanks to Zvika Ashani + for reporting this and testing it. + + * ace/os_include/sys/os_stat.h: Changed S_IFLNK to 0200000. + Thanks to Zvika Ashani for reporting + this and testing it. + +Tue Feb 17 19:55:56 UTC 2004 Craig Rodrigues + + * ace/SOCK_SEQPACK_Connector.cpp: + Add #include to get ACE_OS::memcpy(). + +Tue Feb 17 10:29:34 2004 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC6ProjectCreator.pm: + * bin/MakeProjectCreator/modules/VC7ProjectCreator.pm: + + Added an environment variable, + MPC_DEPENDENCY_COMBINED_STATIC_LIBRARY, to control the creation of + inter-project dependencies of static libraries for the em3, vc6, + vc7 and vc71 project types. If the environment variable is set, + MPC will generate inter-project dependencies for static libraries. + Whereas, normally it would not. + + * bin/MakeProjectCreator/modules/VA4ProjectCreator.pm: + + Removed a redundant version of the translate_value() method. + +Mon Feb 16 08:06:23 2004 Douglas C. Schmidt + + * ace/os_include/sys/os_stat.h: Changed the value of S_IFLNK so + that it's different than S_IFREG. Thanks to Zvika Ashani + for reporting this. + +Mon Feb 16 13:40:34 2004 Chad Elliott + + * bin/MakeProjectCreator/config/openssl.mpb: + * bin/MakeProjectCreator/config/qos.mpb: + * bin/MakeProjectCreator/config/qt.mpb: + * bin/MakeProjectCreator/config/zlib.mpb: + + Added bmake to the specific sections for these base projects. + +Sun Feb 15 16:34:58 2004 Balachandran Natarajan + + * ace/os_include/sys/os_stat.h: + + Fixed a typo that was causing compile errors on Win32. + +Sun Feb 15 09:40:46 2004 Douglas C. Schmidt + + * ace/os_include/sys/os_stat.h: Added a #define for + S_IFLNK for Windows platforms, which lack this #define. Thanks + to Zvika Ashani for reporting this. + +Sun Feb 15 10:00:58 2004 Balachandran Natarajan + + * tests/Dirent_Test.cpp: + + Fixed unused function warnings. + +Sat Feb 14 11:41:27 2004 Douglas C. Schmidt + + * ace/OS_NS_sys_stat.inl: Implement lstat() so that it'll + use stat() on platforms that don't support lstat(). + + * tests/Dirent_Test.cpp: Updated this test so it will + illustrate how to recurse through a hierarchical directory + structure. Thanks to Zvika Ashani for + helping to motivate this example and for providing the initial + implementation. + +Sat Feb 14 09:22:25 2004 Balachandran Natarajan + + * ace/TMCast/Makefile: + * ace/TMCast/TMCast.mpc: + + Needs threads=1 to compile. + +Sat Feb 14 08:48:10 2004 Balachandran Natarajan + + * ace/TMCast/Group.cpp: + + Fixed compile errors in daily builds. + +Fri Feb 13 12:21:06 2004 Douglas C. Schmidt + + * ace/Process_Manager.cpp (wait): If the + ACE_Event_Handler::handle_exit() methods kills a managed + process, the process_table_ array is modified before + this->remove_proc (idx) is called. In this case the value of idx + is wrong, so we replace remove_proc(idx) with remove(pid). + Thanks to Carsten Prescher for + reporting this. This fixes bugid 1743. + +Fri Feb 13 09:47:25 2004 Balachandran Natarajan + + * ace/CDR_Stream.cpp (clone_from): + + The check that is done before we go for an allocation needs to + include the CDR alignment. + + * ace/TMCast/Group.cpp: + + Use standard macros like ACE_SYNCH_MUTEX that can compile in + single-threaded and multi-threaded builds. Thanks to Duane + Binder for providing the patches. + +Fri Feb 13 10:50:31 2004 Steve Huston + + * examples/APG/Timers/Task.cpp: In main(), interval should be + initialized with 100000 usecs, not 1000, to be .1 sec as the + comment indicates. Thanks to Norm Whitehead + for reporting this. + + * THANKS: Added Norm Whitehead to the Hall of Fame. + +Thu Feb 12 10:40:40 2004 Balachandran Natarajan + + * docs/ACE-categories.html: + + Fixed the url location. But the file names will not work since + we have broken the name generation in doxygen. We will fix that + next. + +Thu Feb 12 09:34:37 2004 Chad Elliott + + * bin/depgen.pl: + + Added the ACE_PLATFORM_CONFIG environment variable to the + replacement list. I'm not sure why this is desirable, but g++dep + does it so now depgen.pl does it. + + * bin/DependencyGenerator/DependencyEditor.pm: + * bin/DependencyGenerator/DependencyGenerator.pm: + * bin/DependencyGenerator/GNUDependencyWriter.pm: + * bin/DependencyGenerator/GNUObjectGenerator.pm: + * bin/DependencyGenerator/NMakeObjectGenerator.pm: + * bin/DependencyGenerator/ObjectGenerator.pm: + * bin/DependencyGenerator/Preprocessor.pm: + + Made many optimizations to compensate for the additional + replacement variable. + + * bin/MakeProjectCreator/config/fault_tolerance.mpb: + + The fault_tolerance base project needs the ftorb base project. + +Wed Feb 11 16:25:11 2004 Steve Huston + + * ace/INET_Addr.cpp (get_host_addr): On Windows for IPv6, don't try + to call ACE_OS::inet_ntop() - it's not supported. The rough + equivalent is getnameinfo(). Rather than add this at the ACE_OS + layer after BFO (getnameinfo() may have been replaced by newer + APIs in other OSes) add the getnameinfo() call in here. + This fixes the crash in INET_Addr_Test on Windows w/ IPv6. + +Wed Feb 11 13:14:39 2004 Steve Huston + + * tests/INET_Addr_Test_IPV6.cpp: Cast INADDR_ANY to ACE_UINT32 to + disambiguate it from a 0 char*. Fixes compile error on Windows. + +Wed Feb 11 15:39:29 GMT 2004 Paul Morrison + + * examples/APG/Signals/SigAction.cpp + + Added a reinterpret_cast to fix a build error with LynxOS. + +Wed Feb 11 15:31:06 GMT 2004 Paul Morrison + + * TAO/orbsvcs/Logging_Service/Basic_Logging_Service/Makefile + * TAO/orbsvcs/Logging_Service/Event_Logging_Service/Makefile + * TAO/orbsvcs/Logging_Service/Notify_Logging_Service/Makefile + * TAO/orbsvcs/examples/Log/RTEvent/Makefile + + Added -lTAO_Svc_Utils to LDLIBS line to remove link errors with + LynxOS build. + +Wed Feb 11 07:36:16 2004 Chad Elliott + + * bin/MakeProjectCreator/config/default.rel: + * bin/MakeProjectCreator/modules/Driver.pm: + + Added the ability to use wildcards in the default.rel file. For + example, *_ROOT is now used to pick up all environment variables + that end in _ROOT. + +Tue Feb 10 13:32:51 2004 Steve Huston + + * examples/APG/Proactor/HA_Proactive_Status.cpp: Add ACE_TEXT + around string literal and make the "need async I/O" message + more explicit. + +Tue Feb 10 11:27:59 2004 Chad Elliott + + * bin/MakeProjectCreator/config/bison.mpb: + * bin/MakeProjectCreator/config/flex.mpb: + * bin/MakeProjectCreator/config/lex.mpb: + + Added base projects with custom definitions for bison, flex and + lex. Currently, yacc can't be supported since the output file + can't be explicitly specified. + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Added the line number to an informational message. + + * bin/MakeProjectCreator/templates/make.mpd: + + Fixed this template to allow source files to exist within + sub-directories, but have the object files go in the build + directory. + +Tue Feb 10 15:51:50 UTC 2004 Craig Rodrigues + + * include/makeinclude/platform_linux.GNU: + Even if the user overrides PLATFORM_SCTP_CPPFLAGS in + platform_macros.GNU, either ACE_HAS_OPENSS7_SCTP or + ACE_HAS_LKSCTP *must* be added to PLATFORM_SCTP_CPPFLAGS, otherwise + wrong code will get compiled. Also, for sctp=lksctp, do + not hardcode PLATFORM_SCTP_LIBS to /usr/local/lib/libsctp.a. +` Instead set PLATFORM_SCTP_LDFLAGS to -L/usr/local/lib + and set PLATFORM_SCTP_LIBS to -lsctp. + +Tue Feb 10 08:45:10 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Fixed a bug in the template where no binary targets would be built + if there are no libraries linked in. + +Tue Feb 10 07:29:55 2004 Balachandran Natarajan + + * ace/OS_NS_wchar.h: + + #included ace/os_include/os_errno.h. Needed for builds where + ACE_HAS_SIGNAL_SAFE_OS_CALLS is defined. Thanks to Kobi + Cohen-Arazi for the patch. + +Mon Feb 9 18:21:41 2004 Steve Huston + + * examples/APG/Naming/Name_Binding.h: The Name_Binding destructor + should use ACE_OS::free(), not delete[], to release type_. It + was allocated using ACE_OS::strdup(). + +Mon Feb 9 16:10:07 2004 Douglas C. Schmidt + + * ace/Memory_Pool.cpp: ACE_Shared_Memory_Pool::commit_backing_store_name() + and ACE_Shared_Memory_Pool::handle_signal() ACE_ERROR_RETURN + macros were returning the wrong value (0 instead of -1). Thanks + to Kobi Cohen-Arazi for reporting + this problem. + +Mon Feb 9 13:58:30 2004 Chad Elliott + + * bin/DependencyGenerator/GNUObjectGenerator.pm: + + Fixed a bug where cpp files in subdirectories would have the wrong + target name generated in the dependencies. + + * bin/DependencyGenerator/Preprocessor.pm: + + Removed an unnecessary directory in the include search path. + +Mon Feb 9 10:31:40 2004 Chad Elliott + + * bin/DependencyGenerator/Preprocessor.pm: + + If the file for which dependencies are being generated contains a + directory name, then we need to look for include files in that + directory. + +Mon Feb 9 07:00:05 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/bmake.mpd: + + Added the custom generated files to the realclean target. + +Sun Feb 8 15:36:30 2004 Douglas C. Schmidt + + * THANKS: Just added the 1,800th contributor to the THANKS file!! + +Sun Feb 8 15:34:11 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Also generate a realclean target for the IDL files so that IDL + generated files are removed when running a realclean. + +Sun Feb 8 14:25:43 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/cbx.mpd: + Added first version support of using the Cygwin compiler within + the CBuilderX Development Environment + +Sun Feb 8 14:02:53 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/cbx.mpd: + Added MinGW support for in the CBuilderX IDE + +Sun Feb 8 13:06:13 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/cbx.mpd: + Improved the CBuilderX template. Don't compile template files and + disabled some warnings. + +Sat Feb 7 19:33:56 2004 Douglas C. Schmidt + + * examples/RMCast/Send_File/Sender.cpp (ACE_TMAIN): + Fixed a typo in the comments. Thanks to Olli Savia + for the patch. + +Fri Feb 6 15:49:37 2004 Jeff Parsons + + * bin/MakeProjectCreator/config/ciao_client.mpb: + * bin/MakeProjectCreator/config/ciao_servant.mpb: + + Added TAO_ROOT/tao and CIAO_ROOT/ciao to the include + paths (C++ and (C)IDL). These additions allow users + to include or without + being concerned about the specific directory they + reside in. + +Fri Feb 6 14:53:27 2004 Tao Lu + + * bin/MakeProjectCreator/config/global.features: + + Added a new feature cidl into the global features. + This feature is turned off by default, so no makefiles + or project files will be gnerated for CCF and CIDLC. + +Fri Feb 6 14:13:25 2004 Douglas C. Schmidt + + * ace/Time_Value.inl (msec): Changed the return type of + ACE_Time_Value::msec() from long to unsigned long to prevent + problems with wrap-arounds that yield negative numbers. Thanks + to Matthew Gillen for this fix. + +Fri Feb 6 11:50:36 2004 Balachandran Natarajan + + * ace/INET_Addr.cpp: + + Fixes a problem that this change "Thu Jan 15 08:02:23 2004 + Douglas C. Schmidt " opened up and which + Craig Rodrigues reported. This problem has been lying around for + almost an year now. In the static method + get_port_number_from_name (), if we get a portnumber 0 + (perfectly valid to send a 0) we missed to check for port + 0. This has now been fixed. Thanks to Craig for reporting this. + +Fri Feb 6 09:48:01 2004 Balachandran Natarajan + + * include/makeinclude/platform_sunos5_sunc++.GNU (CPPFLAGS): + * include/makeinclude/platform_sunos5_g++.GNU (CPPFLAGS): + + Reverted the change "Fri Feb 6 09:31:30 2004 Balachandran + Natarajan " since it creates more + problems. + + * ace/config-sunos5.5.h: + + Added ACE_LACKS_SWAB. This is a lie. There are signatures + mismatch and adding compile time options that get the right + signatures messes things up a lot. Someone needs to take a look + at it fix the compile time options properly. + +Fri Feb 6 09:35:13 2004 Chad Elliott + + * bin/MakeProjectCreator/config/rteventlogadmin.mpb: + + Changed to inherit from dslogadmin and rtoldevent instead of + dseventlogadmin. + +Fri Feb 6 09:31:30 2004 Balachandran Natarajan + + * include/makeinclude/platform_sunos5_sunc++.GNU (CPPFLAGS): + * include/makeinclude/platform_sunos5_g++.GNU (CPPFLAGS): + + Added -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1 to + CPPFLAGS. This should fix the compile errors in Solaris builds. + +Fri Feb 6 09:04:50 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + + Added support for dynamicflags, staticflags and rc files. + + * bin/MakeProjectCreator/templates/makedll.mpt: + + Added the _REENTRANT macro to the extracppflags for many of the + platforms. + +Fri Feb 6 06:35:32 2004 Chad Elliott + + * bin/MakeProjectCreator/USAGE: + + Updated the usage to reflect the new Cbx workspace type. + + * bin/MakeProjectCreator/modules/CbxWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/MWC.pm: + + Added the workspace counterpart to the CbxProjectCreator. Thanks + to Johnny Willemsen for providing me an example workspace. + +Fri Feb 6 11:48:13 UTC 2004 Johnny Willemsen + + * include/makeinclude/rules.local.GNU: + Fixed typo in this file which caused build problems when .rc are + used (Cygwin and MinGW do this). + +Thu Feb 5 13:38:15 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/bmake.mpd: + + Added rules for all of the MPC supported C++ file extensions. + +Thu Feb 5 11:25:50 2004 Boris Kolpackov + + * include/makeinclude/rules.bin.GNU: + * include/makeinclude/rules.lib.GNU: + * include/makeinclude/rules.local.GNU: + + Modified build rules to allow projects with sources in sub- + directoris. Thanks to Don Hinton + for his help. + +Thu Feb 5 08:48:27 2004 Douglas C. Schmidt + + * ace/Thread_Manager.{h,cpp}: added a new methods called + testterminate() which checks to see whether a thread has + terminated or not. Thanks to Avi Ouziel + for this suggestion. + +Thu Feb 5 07:55:10 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/BorlandProjectCreator.pm: + + Fixed a bug where Borland projects generated on UNIX would not + reflect the correct cppdir value. + + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/MakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + + Sort the projects names so projects are easier to find in large + lists. + + * bin/MakeProjectCreator/modules/Driver.pm: + + Fixed a bug in the usage output. + + * bin/MakeProjectCreator/modules/Version.pm: + + Updated the MPC version number. + + * bin/MakeProjectCreator/USAGE: + + Updated the usage to reflect the new alternative Borland Make + project type. + + * bin/MakeProjectCreator/modules/MPC.pm: + * bin/MakeProjectCreator/modules/MWC.pm: + * bin/MakeProjectCreator/modules/BMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/BMakeProjectCreator.pm: + * bin/MakeProjectCreator/templates/bmake.mpd: + * bin/MakeProjectCreator/templates/bmakecommon.mpt: + * bin/MakeProjectCreator/templates/bmakedll.mpt: + * bin/MakeProjectCreator/templates/bmakedllexe.mpt: + * bin/MakeProjectCreator/templates/bmakelib.mpt: + * bin/MakeProjectCreator/templates/bmakelibexe.mpt: + + Added a new alternative Borland Make project type called bmake. + It does not rely on any of the .bor files in + ACE_wrappers/include/makeinclude. + +Wed Feb 4 21:55:38 UTC 2004 Don Hinton + + * ace/config-lynxos.h: + * ace/os_include/os_stdlib.h: + * ace/os_include/os_unistd.h: + Moved the prototypes for getopt() and putenv() out of + config-lynxos.h and into the appropriate os_include header. + Added prototype of swab() to os_unistd.h. Thanks to Olli Savia + for the patch. + +Wed Feb 4 14:21:46 2004 Jeff Parsons + + * bin/MakeProjectCreator/config/ciao_client.mpb: + * bin/MakeProjectCreator/config/ciao_servant.mpb: + * bin/MakeProjectCreator/config/orbsvcsexe.mpb: + * bin/MakeProjectCreator/config/orbsvcslib.mpb: + * bin/MakeProjectCreator/config/taodefaults.mpb: + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + * bin/MakeProjectCreator/config/valuetype.mpb: + + Removed all path includes except TAO_ROOT and CIAO_ROOT, + for IDL, CIDL and C++ compilers. + +Wed Feb 4 18:15:16 UTC 2004 Craig Rodrigues + + * include/makeinclude/platform_linux.GNU: Allow + user to override SCTP flags in platform_macros.GNU + before including platform_linux.GNU. + +Wed Feb 4 17:41:25 UTC 2004 Craig Rodrigues + + * include/makeinclude/platform_freebsd.GNU: + Change thread flags to reflect new changes in FreeBSD. + KSE-based -lpthread is now the default library in + FreeBSD-CURRENT. + +Tue Feb 3 16:21:49 2004 Steve Huston + + * m4/compiler.m4: If --disable-rtti is specified on AIX, add + -DACE_LACKS_RTTI to CXXFLAGS. + + * netsvcs/clients/Naming/Client/Makefile.am: + * netsvcs/clients/Naming/Dump_Restore/Makefile.am: Removed the + extraneous path prefix for the required same-directory libraries in + main_LDADD to allow the Makefile to see the library and build it + first at make time. + +Tue Feb 3 14:35:53 2004 Balachandran Natarajan + + * ace/config-win32-msvc-6.h: + * ace/config-win32-common.h: + + Moved the definition of ACE_HAS_NONCONST_SWAB from VC6 to + win32-common.h. Thanks to Andrew G. Harvey + for the suggestion. + +Tue Feb 3 11:36:41 2004 Steve Huston + + * examples/APG/Reactor/Client.cpp: + * examples/APG/ThreadSafety/TSS.cpp: Add template instantiations needed + to correct LynxOS build. Thanks to Olli Savia for + these fixes. + +Tue Feb 3 07:37:20 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + + Added a missing foreach for the configurations. It's necessary in + order to access the platforms. + +Mon Feb 2 13:53:08 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/OutputMessage.pm: + + Added an interface for printing informational, warning and error + messages. This allows messages to be manipulated prior to being + printed. Informational messages are off by default and can be + enabled by setting the MPC_INFORMATION environment variable. The + informational and warning messages can be turned off by setting the + MPC_SILENT environment variable. + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/Driver.pm: + * bin/MakeProjectCreator/modules/FeatureParser.pm: + * bin/MakeProjectCreator/modules/Parser.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/StringProcessor.pm: + * bin/MakeProjectCreator/modules/TemplateInputReader.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Use the OutputMessage interface instead of print for messages. + +Mon Feb 2 13:48:23 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/bor.mpd: + + Move the location of the custom build rules to ensure that they + are added to the all target before the object files. This ensures + that the custom build rules are processed before source files are + compiled. + +Mon Feb 02 10:00:29 2004 Balachandran Natarajan + + * ace/config-win32-msvc-6.h: + + Looks like VC6 has a non-const swab. + + * ace/OS_NS_unistd.inl: + + Fixed the non-const part of the swab () to compile with vc6. + +Mon Feb 2 08:18:41 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/CbxProjectCreator.pm: + + Removed an unused implementation of the fill_value() method. + +Mon Feb 2 07:41:25 2004 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/va4icc.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Removed the ssl and defaultlibs keyword. These were unncessary + and should have been removed long ago. + +Mon Feb 2 07:16:42 2004 Balachandran Natarajan + + * ace/OS_NS_unistd.h: + * ace/OS_NS_unistd.inl: + + Changed the parameters to void * instead of char * since most of + the platforms take a void *. + +Mon Feb 2 06:56:32 2004 Balachandran Natarajan + + * ace/Makefile.ace: + + Building applications which use ACE library fail because + LynxOS's linker is unable to find dlopen() which is used in + DLL_Manager.o and implemented in OS_NS_dlfcn.o. + + To fix this, OS_NS_dlfcn.o must be placed after DLL_Manager.o + when creating libACE.a with ar. Thanks to Olli Savia for the + patch. + +Sun Feb 1 19:09:54 UTC 2004 Johnny Willemsen + + * ace/config-borland-common.h: + * ace/config-win32-borland.h: + Kylix doesn't have swab, CBuilder has a non-const swab, CBuilderX + has the normal swab + +Sun Feb 1 17:06:13 UTC 2004 Johnny Willemsen + + * ace/OS_NS_unistd.inl: + * ace/README: + Some platforms have a swab function where the first argument is + non const, added ACE_HAS_NONCONST_SWAB which then must be set. + + * ace/config-win32-borland.h: + Added ACE_HAS_NONCONST_SWAB + +Sun Feb 1 15:15:44 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_linux.GNU: + Added missing libraries that are needed when linking with fltk + support. + +Sun Feb 1 12:36:13 UTC 2004 Johnny Willemsen + + * include/makeinclude/build_lib.bor: + Added support for using the CBX ar with the -M commandline option + to pass it a script. This fixes the too long commandline. + +Sat Jan 31 11:01:33 2004 Balachandran Natarajan + + * ace/OS_NS_unistd.h: + * ace/OS_NS_unistd.inl: + + Thanks to Olli Savia, we now have a ACE_OS::swab (). This calls + the platform specific swab () function. There is a emulation + which could be used on platforms that don't support ::swab + (). The emulation can be used by defining ACE_LACKS_SWAB. + + I haven't added ACE_LACKS_SWAB in any config file. We will do it + as and when things showup in our daily builds. + +Sat Jan 31 08:52:13 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/smart_proxies.mpb: + Removed requires smart_proxies, there is no need for this and + only prevents the smart_proxies tests from compiling + +Fri Jan 30 19:33:49 UTC 2004 Craig Rodrigues + + * include/makeinclude/platform_linux.GNU: Allow user to override + OCFLAGS in platform_macros.GNU file. + +Fri Jan 30 10:30:26 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/bor.mpd: + + Force the custom build targets to be processed before compiling + any of the cpp files. + +Fri Jan 30 09:02:30 2004 Douglas C. Schmidt + + * ace/Proactor.cpp (proactor_run_event_loop): Make sure to + return if the handle_events() call return 0, which indicates + a timeout. Thanks to Daniel Buchs for + this fix. + +Fri Jan 30 07:41:20 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/MPC.pm: + * bin/MakeProjectCreator/modules/MWC.pm: + * bin/mpc.pl: + * bin/mwc.pl: + + Pulled the creator lists out of the perl scripts and moved them + into the new MPC and MWC modules. This will allow the extension + of MPC by providing a way to hook new workspace and project types + into MPC without adding anything to the MPC repository. + +Thu Jan 29 14:10:51 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/MakeWorkspaceCreator.pm: + + Clean up some double quoted strings. + + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + + Changed the workspace output to allow a user to make a specific + target within the workspace. If the user specified target + requires other projects, then those projects are built also. For + example, a user could execute "nmake CosNaming" using the Makefile + generated from the TAOACE.mwc file and the CosNaming library + would be built including everything else that was required to + build that library. + +Thu Jan 29 14:04:50 2004 Balachandran Natarajan + + * ace/Asynch_Connector.cpp: + * ace/Local_Name_Space_T.cpp: + * ace/Local_Tokens.cpp: + * ace/MEM_Acceptor.cpp: + * ace/MEM_Connector.cpp: + * ace/Multihomed_INET_Addr.cpp: + * ace/Process_Manager.cpp: + * ace/Remote_Tokens.cpp: + * ace/Service_Config.cpp: + * ace/Service_Manager.cpp: + * ace/Sock_Connect.cpp: + * ace/Timeprobe_T.cpp: + * ace/Token.cpp: + * ace/Token_Invariants.cpp: + * ace/CLASSIX/CLASSIX_Select_Reactor.cpp: + + Thanks to Duane Binder for providing + patches to fix some of the messages printed out using + ACE_Log_Msg. + +Thu Jan 29 14:03:42 2004 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/config/amh.mpb: + * bin/MakeProjectCreator/config/ciao_client.mpb: + * bin/MakeProjectCreator/config/smart_proxies.mpb: + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + * bin/MakeProjectCreator/config/valuetype.mpb: + * bin/MakeProjectCreator/modules/NMakeWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + * bin/MakeProjectCreator/modules/TemplateParser.pm: + * bin/MakeProjectCreator/templates/automake.mpd: + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/bordll.mpt: + * bin/MakeProjectCreator/templates/borexe.mpt: + * bin/MakeProjectCreator/templates/cbx.mpd: + * bin/MakeProjectCreator/templates/cbxdll.mpt: + * bin/MakeProjectCreator/templates/cbxexe.mpt: + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/em3vcpdll.mpt: + * bin/MakeProjectCreator/templates/em3vcpdllexe.mpt: + * bin/MakeProjectCreator/templates/em3vcplib.mpt: + * bin/MakeProjectCreator/templates/em3vcplibexe.mpt: + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/gnudll.mpt: + * bin/MakeProjectCreator/templates/gnuexe.mpt: + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/makedll.mpt: + * bin/MakeProjectCreator/templates/nmake.mpd: + * bin/MakeProjectCreator/templates/nmakedll.mpt: + * bin/MakeProjectCreator/templates/nmakeexe.mpt: + * bin/MakeProjectCreator/templates/va4iccdll.mpt: + * bin/MakeProjectCreator/templates/va4iccdllexe.mpt: + * bin/MakeProjectCreator/templates/va4icclib.mpt: + * bin/MakeProjectCreator/templates/va4icclibexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc6dspdll.mpt: + * bin/MakeProjectCreator/templates/vc6dspdllexe.mpt: + * bin/MakeProjectCreator/templates/vc6dsplib.mpt: + * bin/MakeProjectCreator/templates/vc6dsplibexe.mpt: + * bin/MakeProjectCreator/templates/vc7.mpd: + * bin/MakeProjectCreator/templates/vc7dll.mpt: + * bin/MakeProjectCreator/templates/vc7exe.mpt: + * bin/MakeProjectCreator/templates/vc7lib.mpt: + * bin/MakeProjectCreator/templates/vc7libexe.mpt: + + Removed IDL_Files as a built-in build type and replaced it as a + custom build type. The syntax of IDL_Files has only changed in + that idlgendir is no longer a usable keyword. gendir should be + used in its place. Additionally, the custom build rules can not + be executed in parallel when using the GNUACE project type. This + does not stop multiple unrelated projects from being built in + parallel. In order to get the IDL custom build type, your project + must inherit, either directly or indirectly, from taoidldefaults. + The amh, ciao_client, taoexe and taolib_with_idl base projects all + inherit from taoidldefaults. Others get it indirectly. + + * bin/MakeProjectCreator/config/idl_compiler.mpt: + * bin/MakeProjectCreator/config/idl_compiler_win32.mpt: + + Removed these files. + +Thu Jan 29 13:32:17 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Remove the WARNING: from the informational message that a + workspace wasn't created because no projects were created. + +Thu Jan 29 10:10:26 2004 Boris Kolpackov + + * THANKS: + + Added Hans-Peter Bock . + +Wed Jan 28 13:21:00 2004 Chad Elliott + + * ace/ace.mpc: + + Only inherit from qt_reactor instead of qt_moc and qt_reactor. + + * ace/qt_reactor.mpb: + + Inherit from ace_qt and qt_moc. + + * bin/MakeProjectCreator/config/ace_qt.mpb: + * bin/MakeProjectCreator/config/acedefaults.mpb: + * bin/MakeProjectCreator/config/qt.mpb: + + Inherit from the ace_qt base project as part of the reorganization + of qt and qt_moc. + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Allow features to inherit from other base projects just as + projects do. + + * bin/MakeProjectCreator/config/qt-min.mpb: + * bin/MakeProjectCreator/config/qt-min_moc.mpb: + + Removed these files. + +Wed Jan 28 10:26:17 2004 Boris Kolpackov + + * ace/TMCast/README: + + Fixed a few typos. + +Wed Jan 28 09:17:36 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Added custom build output inference that takes gendir settings + into account. If a custom build file is listed, gendir is set and + the generated source isn't listed in the Source_Files list, then + the correct generated source files will be listed with the correct + path determined by gendir. + +Wed Jan 28 08:54:29 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Changed the output name from Makefile to GNUmakefile in accordance + with [BUGID 1726]. GNU Make will look for GNUmakefile before it + looks for Makefile. + +Wed Jan 28 08:20:59 2004 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/config/ciao_servant.mpb: + + Prefixed cidl with a dot in the inputexts assignment. + +Wed Jan 28 06:46:55 UTC 2004 Johnny Willemsen + + * ace/ACE.h: + * ace/config-cygwin32.h: + Moved os_math.h include from config-cygwin32.h to ACE.h. When + ACE_NTRACE is set we got include problems. Cygwin defines log2 + as macro and we have ACE::log2. The include of os_math.h is only + done for Cygwin. Thanks to Yi Zuo + for reporting this. + +Tue Jan 27 20:49:12 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added ETCL.dsp to the list of projects to build first in a static build. + +Mon Jan 26 17:12:38 2004 Steve Huston + + * ace/OS_NS_sys_stat.inl (filesize): Declare sb using ACE_stat instead + of struct stat to pick up whatever gets set up for that platform. + Fixes compile error on HP-UX aCC. + +Mon Jan 26 15:18:06 2004 Gautam Thaker + + * bin/count_lines (initfiletypes): + + Added .py for python and .php for php scripts. + +Mon Jan 26 15:47:55 2004 Steve Huston + + * examples/APG/Timers/PCB.cpp: Don't put needed things inside + ACE_ASSERT - they disappear when built with ACE_NDEBUG. + +Mon Jan 26 13:01:42 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/makedll.mpt: + + Added support for cygwin32 and mingw32. + +Mon Jan 26 18:10:13 UTC 2004 Johnny Willemsen + + * include/makeinclude/build_lib.bor: + * include/makeinclude/compiler.bor: + Added support for the CBuilderX Preview ar. + +Mon Jan 26 16:14:32 UTC 2004 Johnny Willemsen + + * include/makeinclude/clean.bor: + Changed this file a little, special independent clean fules for cbx + and other versions and dependent on the version used the right clean + rule is used. + +Mon Jan 26 16:02:13 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + * include/makeinclude/build_dll.bor: + * include/makeinclude/build_exe.bor: + * include/makeinclude/build_lib.bor: + * include/makeinclude/clean.bor: + The CBuilderX Preview compiler uses the .o extension for object + files, all other Borland versions use .obj. Some time ago I + introduced $(OBJ_EXT) to handle this, but this was not complete + yet. Change the makefile instructure to handle $(OBJ_EXT) instead + of obj and changed the MPC Borland template to generate $(OBJ_EXT) + instead of obj. This way everything works as normally, but when + you use the new CBuilderX Preview environment you must regenerate + your makefiles using MPC. + +Mon Jan 26 09:35:51 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + + When calling the prelink script, the object files should be in + double quotes. + +Mon Jan 26 07:19:13 2004 Chad Elliott + + * bin/MakeProjectCreator/config/ftrteventchannel.mpb: + * bin/MakeProjectCreator/config/utils.mpb: + + Added base projects for the TAO_FTRT_EventChannel and TAO_Utils + libraries. + +Sun Jan 25 18:05:31 2004 Steve Huston + + * examples/APG/Streams/RecordingDevice_Text.cpp: Fixed formatting + to fit in its spots in the book. + +Sun Jan 25 20:46:03 UTC 2004 Don Hinton + + * ace/Global_Macros.h: + * ace/config-lite.h: + * ace/config-all.h: + Moved the ACE_TRACE defines from Global_Macros.h to config-all. + and ACE_OS_TRACE from config-lite.h to config-all.h, and added + ACE_OS_NTRACE to config-all.h with the same symantics. Thanks + to Johnny Willemsen for motivating this + change. + + * examples/ASX/Event_Server/Event_Server/Options.cpp: + * examples/ASX/UPIPE_Event_Server/Options.cpp: + Added #include OS_NS_strings.h if ACE_HAS_TRACE is defined. + +Sun Jan 25 15:55:13 UTC 2004 Johnny Willemsen + + * ace/OS_NS_stdio.h: + Removed check for ACE_MT_SAFE for the win32 specific methods. + +Sun Jan 25 09:11:40 2004 Balachandran Natarajan + + * bin/msvc_mpc_auto_compile.pl: + + Some cosmetic fixes to get ACEXEML and Kokyu compiled well + before other things. The dsw's in TAO hierarchy do not have the + dsp's of ACE hierarchy included but for TAOACE.dsw. + +Sun Jan 25 08:59:40 2004 Balachandran Natarajan + + * Kokyu/Kokyu.mwc: + * ACEXML/ACEXML.mwc: + + Added new workspace files. The above pieces should be compilable + without going into TAO and using TAOACE.mwc. + +Sun Jan 25 12:26:19 UTC 2004 Johnny Willemsen + + * tests/Auto_IncDec_Test.cpp: + Extended debug info with the total number of threads. This then shows + that with Cygwin threads that exit are not removed from the + thread manager + +Sun Jan 25 11:34:31 UTC 2004 Johnny Willemsen + + * tests/Tests.bor: + Added SOCK_Test_IPv6 + +Sun Jan 25 11:26:43 UTC 2004 Johnny Willemsen + + * ace/config-borland-common.h: + CBuilderX Preview doesn't support multithreaded builds, so removed + fix for _endthreadex + +Sun Jan 25 10:49:13 UTC 2004 Johnny Willemsen + + * bin/msvc_static_compile.pl: + Cleaned up some old stuff + +Sat Jan 24 16:11:43 UTC 2004 Johnny Willemsen + + * ace/OS_NS_stdlib.inl: + With CBuilderX Preview putenv, wcstod, wcstol and wcstoul are in the + std namespace, so added ACE_STD_NAMESPACE which expands to std with + Borland, to nothing with other compilers. + + * ace/OS_NS_stdio.inl: + The vswprintf for Dinkum STL is different. CBuilderX Preview has + std::tempnam, so added checking for borland version. + + * ace/OS_NS_stdio.cpp: + vswprintf and vsnprintf are different with CBuilderX Preview + + * ace/config-win32-borland.h: + CBuilderX Preview has no itoa + +Sat Jan 24 15:29:11 UTC 2004 Johnny Willemsen + + * ace/config-win32-borland.h: + CBuilderX Preview doesn't have wcsdup + +Fri Jan 23 14:04:31 2004 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Changed the defaulting rules for implicitly adding source files + when IDL_Files (or any other custom type) is specified. + Previously, generated source files would only be added to the + Source_Files section only if IDL_Files was not specified and no + generated source files were already listed in Source_Files. Now, + the generated source files will be added whether or not IDL_Files + is specified and no generated source files were already listed in + Source_Files. + +Fri Jan 23 19:09:43 UTC 2004 Johnny Willemsen + + * ace/OS_NS_string.cpp: + With CBuilderX Preview strdup is in the std namespace, so + added ACE_STD_NAMESPACE which expands to std with Borland, + to nothing with other compilers. + +Fri Jan 23 10:04:00 2004 Gary Maxey + + Fix for BUGID 1722, for Tandem NSK platform. + * ace/OS_NS_stdlib.inl: + + Need to use spt_system() instead of system(). + + * ace/OS_NS_sys_wait.inl: + + Need to use spt_waitpid() instead of waitpid() + +Fri Jan 23 09:49:00 2004 Gary Maxey + + * ace/OS_NS_Thread.inl: + + Fix for BUGID 1708 + + Added #elif in ACE_OS::sigwait to use alternate sigwait() when + compiling for Tandem NSK platform. + +Fri Jan 23 09:34:00 2004 Gary Maxey + + * ace/OS_NS_unistd.inl: + + Fix for BUGID 1709 + + Added #ifdef to use alternate select() when compiling for Tandem + NSK platform. + +Fri Jan 23 10:30:12 2004 Chad Elliott + + * bin/create_ace_build.pl: + + Exclude .exp files and ensure that we can stat() the real file + before checking the modification time in + backup_and_copy_changed(). + +Fri Jan 23 09:41:11 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/vc7.mpd: + + Reverted my change from Tue Jan 20 14:11:48 2004. While the + generated vcproj loads properly, the project does not link + properly. + +Fri Jan 23 15:04:11 UTC 2004 Johnny Willemsen + + * ace/config-win32-borland.h: + Fixed ACE_WCSDUP_EQUIVALENT for CBuilderX Preview + +Fri Jan 23 07:20:02 2004 Chad Elliott + + * bin/MakeProjectCreator/config/global.features: + + Changed wxwindows to wxWindows to match the changes put in by + Scott Harris. + +Fri Jan 23 13:06:56 UTC 2004 Johnny Willemsen + + * ace/config-tru64.h: + Define ACE_LACKS_STDINT_H when DIGITAL_UNIX is greater than + 0x40E instead of 0x510. Thanks to Daniel Miranda + for reporting this. + +Fri Jan 23 11:05:13 UTC 2004 Johnny Willemsen + + * ace/config-win32-borland.h: + Added ACE_HAS_3_PARAM_WCSTOK for the new CBuilderX Preview + compiler + +Fri Jan 23 10:47:54 UTC 2004 Johnny Willemsen + + * ace/config-win32-borland.h: + Another set of changes for CBuilderX. strcasecmp and strncasecmp + should come from the std namespace + +Fri Jan 23 10:04:11 UTC 2004 Johnny Willemsen + + * ace/config-win32-borland.h: + ACE_STRCASECMP_EQUIVALENT and ACE_STRNCASECMP_EQUIVALENT are not + needed anymore for the CBuilderX Preview compiler + +Fri Jan 23 09:42:15 UTC 2004 Johnny Willemsen + + * ace/OS_NS_time.inl: + Dinkum STL doesn't have tzset. Fixes another compile problem with + the new Borland CBuilderX Preview compiler + +Fri Jan 23 09:36:11 UTC 2004 Johnny Willemsen + + * ace/Object_Manager.cpp: + CBuilderX Preview defines _MSC_VER and __BORLANDC__ so only use + _CrtSetReportMode when _MSC_VER is defined and not __BORLANDC__. + Borland isn't making thing easier to maintain. + +Fri Jan 23 09:30:45 UTC 2004 Johnny Willemsen + + * ace/config-borland-common.h: + CBuilderX Preview has _endthreadex in the std namespace + +Fri Jan 23 09:23:11 UTC 2004 Johnny Willemsen + + * ace/config-win32-borland.h: + CBuilderX seems to lack win32 structural exceptions + +Fri Jan 23 08:41:53 UTC 2004 Johnny Willemsen + + * ace/os_include/os_time.h: + Dinkum STL doesn't have timezone or _timezone so only try to use + timezone when we don't have Dinkum STL. + +Fri Jan 23 07:38:13 UTC 2004 Johnny Willemsen + + * ace/README: + * ace/OS_NS_time.h: + Added ace_timezone implementation for use with Dinkum STL, which + lacks _timezone. For this added ACE_HAS_DINKUM_STL which can be + set when using the Dinkum STL version. + + * ace/config-win32-borland.h: + The new CBuilderX preview compiler uses Dinkum STL, so se then + ACE_HAS_DINKUM_STL + +Thu Jan 22 19:57:59 2004 Ossama Othman + + * ace/Makefile.am (install-data-local): + + Fixed problem that occurred when performing a "make install". + The "os_include" source and installation directories were not + properly referenced. + +Thu Jan 22 18:11:00 2004 Gary Maxey + + * ace/os_include/os_pthread.h + + Fix for BUGID 1707 + + Added #ifdef so correct pthreads include file is used when + compiling for Tandem NSK platform. + +Thu Jan 22 17:48:56 2004 Gary Maxey + + * ace/config-tandem-nsk-mips-v2.h + + Added missing #endif to end of file + +Thu Jan 22 19:08:56 2004 Balachandran Natarajan + + * ace/OS_NS_sys_stat.inl (mkdir): + + ACE_OS::mkdir for OS PSOS wrote one character behind allocated + memory. Fixed it by adding an extra byte for allocation. Thanks + to Dieter Knueppel for reporting the + problem and suggesting a fix. + +Thu Jan 22 19:00:50 2004 Balachandran Natarajan + + * ace/os_include/os_signal.h: + + This patch fixes redeclaration of pthread_sigmask + function which showe up RH 9 systems with glibc + 2.3. pthread_sigmask declaration is now protected by a guard + which will be defined in the platform configuration file. Thanks + to Olli Savia for providing the patch. + + * ace/config-linux-common.h: + + A fix similar to this fix "Wed Jan 21 13:38:11 UTC 2004 Johnny + Willemsen ", but added + ACE_HAS_PTHREAD_SIGMASK_PROTO within the block for glib 2.3. + +Thu Jan 22 19:02:31 2004 Steve Huston + + * examples/APG/ThreadPools/Task_ThreadPool.cpp: Use 0, not NULL, to + initialize a pointer. + +Thu Jan 22 18:08:31 2004 Steve Huston + + * examples/APG/ThreadPools/ThreadPool.cpp: Don't ACE_ASSERT action + that needs to be performed regardless of the ACE_NDEBUG setting. + +Thu Jan 22 13:25:49 2004 Chad Elliott + + * ace/config-sunos5.5.h: + * ace/config-sunos5.7.h: + + Define ACE_LACKS_GETLOADAVG in config-sunos5.5.h since SunOS 5.5 + and 5.6 do not have getloadavg(). Undefine it in + config-sunos5.7.h, since it has it. + +Wed Jan 22 10:33:47 2004 Scott Harris + + * bin/MakeProjectCreator/config/wxwindows.mpb + * include/makeinclude/platform_linux.GNU + * include/makeinclude/platform_linux_borland.GNU + * include/makeinclude/platform_linux_icc.GNU: + Fixed wxwindows base project in support + of $TAO_ROOT/util/wxNamingViewer. + wxwindows project now require wxWindows defined + (in plaform_macros.GNU) as was since 12/1/00 + instead of wxwindows. I choose historical precidence + over making the macro and project name both + being all lower case. + + Note: The wxNamingViewer Makefile was overriding the + PLATFORM_WX_* macros defined in platform_*.GNU so I updated the + macros in platform_*.GNU to be like the overrides in the Makefile. + These macros are based on the wxWindows configuration. + The wxNamingViewer makefile contains the only use of these + macros. + + Only tested on RedHat 9 with wx_gtk 2.4.2. + + Note - the platform_*.GNU files definition of PLATFORM_WX_* + only support wxWindows over GTK+. + TBD - support wxWindows MSVC and Borland in wxwindows.mpc. + + +Thu Jan 22 12:19:42 2004 Chad Elliott + + * ace/ace.mpc: + * ace/codecs.mpb: + * ace/filecache.mpb: + * ace/other.mpb: + * ace/svcconf.mpb: + * ace/token.mpb: + * ace/uuid.mpb: + + Split some of the components into features that are enabled by + default. The use of comps and compname are no longer supported. + + * bin/MakeProjectCreator/README: + + Removed descriptions of comps and compname. They have been + replaced by features specific to the gnuace type. + + * bin/MakeProjectCreator/config/avstreams.mpb: + * bin/MakeProjectCreator/config/concurrency.mpb: + * bin/MakeProjectCreator/config/event.mpb: + * bin/MakeProjectCreator/config/ftclientorb.mpb: + * bin/MakeProjectCreator/config/ftorbutils.mpb: + * bin/MakeProjectCreator/config/ftrtevent.mpb: + * bin/MakeProjectCreator/config/ftrteventclient.mpb: + * bin/MakeProjectCreator/config/ftserverorb.mpb: + * bin/MakeProjectCreator/config/ifrservice.mpb: + * bin/MakeProjectCreator/config/lifecycle.mpb: + * bin/MakeProjectCreator/config/loadbalancing.mpb: + * bin/MakeProjectCreator/config/naming.mpb: + * bin/MakeProjectCreator/config/notification.mpb: + * bin/MakeProjectCreator/config/orbsvcsexe.mpb: + * bin/MakeProjectCreator/config/orbsvcslib.mpb: + * bin/MakeProjectCreator/config/portablegroup.mpb: + * bin/MakeProjectCreator/config/property.mpb: + * bin/MakeProjectCreator/config/rtcorbaevent.mpb: + * bin/MakeProjectCreator/config/rtcosscheduling.mpb: + * bin/MakeProjectCreator/config/rtevent.mpb: + * bin/MakeProjectCreator/config/rtoldevent.mpb: + * bin/MakeProjectCreator/config/rtsched.mpb: + * bin/MakeProjectCreator/config/rtschedevent.mpb: + * bin/MakeProjectCreator/config/security.mpb: + * bin/MakeProjectCreator/config/ssliop.mpb: + * bin/MakeProjectCreator/config/time.mpb: + * bin/MakeProjectCreator/config/trading.mpb: + + Removed the use of comps and compname. + + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Removed code specific to comps and compname. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Removed comps and compname related code and replaced it with a + more generic mechanism. + + * include/makeinclude/wrapper_macros.GNU: + + Set some ace related features to 1 by default. + + * tests/tests.mpc: + + Use feature requirement instead of comps. + +Thu Jan 22 17:23:01 UTC 2004 Johnny Willemsen + + * examples/APG/Config/HASTATUS_export.h: + Added check for ACE_AS_STATIC_LIBS for setting the export flags for + proper building of static libraries. + +Thu Jan 22 17:16:13 UTC 2004 Johnny Willemsen + + * apps/JAWS/server/server.mpc: + Added missing cpp extension to main + +Thu Jan 22 09:47:04 2004 Chad Elliott + + * tests/RMCast/acetest.mpb: + + Reverted some previous changes that were required due to bugs in + MPC that have since been fixed. + +Thu Jan 22 06:47:48 2004 Balachandran Natarajan + + * ace/Strategies_T.cpp: + + Fix for BUGID 1719. Please see + + http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1719 + + for details. + +Wed Jan 21 22:31:37 2004 Ossama Othman + + * tests/SSL/Makefile.am (EXTRA_DIST): + + Force test PEM files to be included in distribution. Another + problem revealed by "make distcheck". + +Wed Jan 21 22:06:34 2004 Ossama Othman + + * configure.ac (AC_CONFIG_FILES): + + Added missing `netsvcs' Makefiles to the files generated by the + configure script. + + * Makefile.am (SUBDIRS): + + Added "netsvcs" directory to the list of subdirectories to + recurse. + + * netsvcs/Makefile.am: + + Reverted a series of changes that somehow left this file in an + inconsistent state in our CVS repository, and unparsable by + Automake. In particular, it incorrectly contained + Borland-specific Makefile code. + + Updated to our latest Makefile.am conventions. + + * netsvcs/clients/Makefile.am: + * netsvcs/clients/Logger/Makefile.am: + * netsvcs/clients/Naming/Client/Makefile.am: + * netsvcs/clients/Naming/Dump_Restore/Makefile.am: + * netsvcs/clients/Tokens/Makefile.am: + * netsvcs/clients/Tokens/collection/Makefile.am: + * netsvcs/clients/Tokens/deadlock/Makefile.am: + * netsvcs/clients/Tokens/invariant/Makefile.am: + * netsvcs/clients/Tokens/manual/Makefile.am: + * netsvcs/clients/Tokens/mutex/Makefile.am: + * netsvcs/clients/Tokens/rw_lock/Makefile.am: + * netsvcs/lib/Makefile.am: + * netsvcs/servers/Makefile.am: + + Updated to our latest Makefile.am conventions. + + * tests/Makefile.am: + + Added more missing header files to appropriate source file + lists. Missing files were made evident when running a "make + distcheck". + +Wed Jan 21 20:12:38 2004 Ossama Othman + + * configure.ac (ACE_CONFIG_COMMANDS): + + Include ACE version in configuration completion message to + improve clarity. + +Wed Jan 21 20:17:34 2004 Douglas C. Schmidt + + * ace/Message_Queue.i: Fixed ACE_Message_Queue_NT::is_empty() + so that it returns the right result. Thanks to Ariel Peltz + for contributing this fix. + +Wed Jan 21 13:28:41 2004 Ossama Othman + + * configure.ac: + + Do not rely on "ace/OS.cpp" when performing test that determines + if the generated configuration is usable. "ace/OS.cpp" has been + superseded by and split off into several other files. Addresses + bogus ACE usability configure script errors when running a "make + distcheck". + + * ace/Makefile.am: + + Added missing "-version-number" libtool flag for all subset + libraries. Fixes problem where the library version for all + these libraries was "0.0.0". Thanks to Robert Schiele + for discovering the problem and for + providing a fix. + + (libACE_Utils_la_SOURCES): + + Added Template_Instantiations.cpp file to this source list. + Fixes a "missing file" problem revealed by a "distcheck". + + (HEADER_FILES, INLINE_FILES, TEMPLATE_FILES): + + Updated these source file lists. Addresses "missing file" + problems exhibited when performing a "make distcheck". + + * m4/acinclude.m4 (ACE_USE_TEMP_FILE): + + Fixed problem that prevented the "distcheck" target from passing + due to an attempt to write a file into a read-only directory. + + * tests/Makefile.am (Multihomed_INET_Addr_Test_SOURCES): + + Removed "Multihomed_INET_Addr_Test.h" from this source file + list. That file doesn't exist. Detected when performing a + "make distcheck". + + (libService_Config_DLL_la_SOURCES, libTest_Output_la_SOURCES): + + Added missing Service_Config_DLL_Export.h and + Test_Output_Export.h file to these test's source lists, + respectively. Addresses problem revealed by a "distcheck". + + (lib_LTLIBRARIES) + + Added missing Framework_Component_DLL library to the list of + libraries to build. + +Wed Jan 21 13:37:20 2004 Balachandran Natarajan + + * bin/msvc_mpc_auto_compile.pl: + + Added gperf to the list of workspaces that needs compilation + upfront as part of core. + +Wed Jan 21 13:38:11 UTC 2004 Johnny Willemsen + + * ace/config-linux-common.h: + + glibc version 2.3 defines the method isastream, so from this + glibc version don't do this anymore in the ACE library by + setting then the define ACE_HAS_ISASTREAM_PROTO. On RH9 defining + the isastream method within ACE caused errors because there this + method has an exception specification. This only appeared when + other libraries are used which include stropts.h themselves. + Also on SuSE 9 with glibc v2.3 I see that isastream has an + exception specification. This fixed [BUGID 1613]. Thanks to + Jeffrey Graham and Akim Boyko + for reporting this. + +Wed Jan 21 12:58:13 UTC 2004 Johnny Willemsen + + * ace/config-win32-common.h: + Removed the setting of MWMO_ALERTABLE when using MinGW. This is + set already by MinGW a long time. + + * ace/config-win32-common.h: + * ace/config-win32-mingw.h: + * ace/OS_NS_dirent.cpp: + * ace/OS_NS_dirent.inl: + * ace/README: + MinGW delivers a dirent.h which has opendir, closedir, readdir, + etc. Because in the OS_NS_dirent files always on win32 is assumed + that we haven't these methods, introduces ACE_LACKS_OPENDIR, + ACE_LACKS_CLOSEDIR and ACE_LACKS_READDIR. These defines are set + in config-win32-common and undef'd in config-win32-mingw.h. + So, on MinGW we use the normal opendir/closedir/readdir, the other + environmens in win32 use the corresponding emulation methods. This + fixes [BUGID 1718]. Thanks to Matthew Grosso + for reporting this and supplying the patches. + +Tue Jan 20 19:58:03 2004 Ossama Othman + + * configure.ac: + + Replaced all uses of the "changequote" M4 built-in with proper + quoting. Use of "changequote" is very discouraged by autoconf + developers since it is often a source of M4 programming + problems. + + (ACE_VERSION, AC_INIT): + + Statically determine the version of ACE using M4 built-ins at + autoconf-time, instead of dynamically setting the ACE version in + a shell variable at configure-time. This allows the package + version to be set in the autoconf AC_INIT call since AC_INIT + expects a static value. + + Replaced "TEST-VERSION" version value passed to AC_INIT call + with new ACE_VERSION macro. This allows the correct package + version, e.g. "5.4" instead of "TEST-VERSION", to be propagated + to a number of places within the configure script itself, and + Makefile.in templates generated by Automake. For example, + "configure --help" and "configure --version" now display the + correct version of ACE. + + (ACE_CURRENT, ACE_AGE, ACE_REVISION): + + Removed all kludges that worked around libtool's versioning + scheme. Libtool 1.5 or better now provides a means to set a + package defined library version. Thanks to Robert Schiele + pointing out the new libtool + feature. + + * bin/bootstrap: + + Cleaned up obsolete comments and commented code. + + Force auxiliary files to be copied to prevent older versions + from being used with newer versions autotools that expect newer + versions of the auxiliary files. + + Clarified some progress messages so that it is obvious that + bootstrapping corresponds to ACE autotool support. + + * m4/ace.m4: + * m4/acinclude.m4: + * m4/compiler.m4: + * m4/platform.m4: + + Replaced all uses of the "changequote" M4 built-in with proper + quoting. Use of "changequote" is very discouraged by autoconf + developers since it is often a source of M4 programming + problems. + + * ace/Makefile.am (libACE_la_LDFLAGS): + + Use new libtool 1.5 "-version-number" option instead of + "-version-info" to override libtool's versioning scheme with + ACE's versioning scheme. Thanks to Robert Schiele + pointing out the new libtool + feature. + + * ace/RMCast/Makefile.am (libACE_RMCast_la_LDFLAGS): + * ace/SSL/Makefile.am (libACE_SSL_la_LDFLAGS): + + Set ACE_RMCast and ACE_SSL library versions to ACE library + version, instead of not setting at all (defaulting to 0.0.0). + This is consistent with our stock/classical ACE build + Makefiles. + +Tue Jan 20 16:57:54 2004 Balachandran Natarajan + + * ace/Active_Map_Manager.i: + * ace/CDR_Stream.i: + + Fixed warnings in VC71 builds. Thanks to Grutzmacher + Lukas for reporting the problem and + providing patches. + +Tue Jan 20 15:37:18 2004 Balachandran Natarajan + + * bin/msvc_mpc_auto_compile.pl: + + Fixed some typos in the comments. + +Mon Jan 19 18:49:50 2004 Balachandran Natarajan + + * bin/msvc_mpc_auto_compile.pl: + + This is a new auto_compile script for MSVC with MPC. This just + build DLL's for both debug and release versions. The old file + msvc_auto_compile.pl is age old and suffers from severe brain + hemorrage which is hard to rectify with simple band aids and + stuff. The old file simply needs to go. This new script will be + used completely for DLL builds after testing in our daily + builds. + +Tue Jan 20 14:11:48 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/em3vcp.mpd: + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + * bin/MakeProjectCreator/templates/vc7.mpd: + + Added support for file grouping in these templates. If source + files are grouped in the mpc file, they will show up grouped in + the graphical interfaces for these project types. + +Tue Jan 20 12:20:35 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + + Fixed a bug where the all target wouldn't be generated if the + platform is capable of shared libraries but the user only wants + static libraries. + + * bin/MakeProjectCreator/templates/makedll.mpt: + + Rearranged some of the VxWorks related settings. + +Tue Jan 20 18:02:19 UTC 2004 Johnny Willemsen + + * ace/config-cygwin32.h: + Made some small corrections. + +Tue Jan 20 17:05:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/compiler.bor: + When using BCB6 and release builds we get errors about __strcmp__ is + undefined. This is caused by the optimizer of BCB6 which generates + code for common functions like strcpy() within the calling function's + scope. The compiler flag is -Oi and this is set when the complete -O2 + optimization options is passed. So, with BCB6 in release builds, + we don't set -O2, but set all specific optimization flags but just not + -Oi. This is the only way I could fix this. + +Tue Jan 20 16:00:11 UTC 2004 Johnny Willemsen + + * ace/config-cygwin32.h: + Added support for the Cygwin 1.5.6-1 version + +Mon Jan 19 13:31:46 2004 Steve Huston + + * Makefile: In AUTOCONF_RELEASE_FILES, changed aux to aux_config to + match: Fri Jan 16 12:29:48 2004 Ossama Othman. + +Mon Jan 19 17:27:13 UTC 2004 Johnny Willemsen + + * bin/make_release: + Dfm files shouldn't get LF->CRLF conversions. Thanks to + Martin Kaul for reporting this. + +Mon Jan 19 10:46:51 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/GUID.pm: + + Mask the 4 byte portions of the GUID with 0xffffffff to avoid + problems with 64-bit versions of Cygwin Perl. Thanks to Cristian + Ferretti for reporting this and + providing a fix. + +Mon Jan 19 10:22:05 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/make.mpd: + * bin/MakeProjectCreator/templates/makedll.mpt: + + Added support for VxWorks 5.5 PPC and PENTIUM. + +Mon Jan 19 15:59:11 UTC 2004 Johnny Willemsen + + * tests/Tests.bor: + Added missing FIFO_Test. Thanks to Peter Bekiesch + for reporting this. + +Mon Jan 19 08:07:02 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + + Fixed a bug where files added to the Template_Files section were + not removed from the Source_Files section due to differences in + slashes to backslashes. + +Mon Jan 19 07:24:16 2004 Chad Elliott + + * examples/Misc/test_XtReactor1.cpp: + * examples/Misc/test_XtReactor2.cpp: + + Removed #define for String (added back in '96). The workaround is + apparently no longer needed. Also fixed some build errors and + warnings. + +Mon Jan 19 10:00:12 UTC 2004 Johnny Willemsen + + * bin/msvc_auto_compile.pl: + Fixed typo in file path + +Sun Jan 18 15:32:59 2004 Balachandran Natarajan + + * ACE-INSTALL.html: + + Added patches from Viktor Ransmayr + for a documentation patch, which describes how to build ACE + using only the MinGW and MSYS package. + +Sun Jan 18 10:27:11 2004 Balachandran Natarajan + + * performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.cpp: + + Used ACE_UINT64_DBLCAST_ADAPTER instead of direct casting to a + double to be more portable. + +Sun Jan 18 10:13:16 2004 Balachandran Natarajan + + * Logging/LogManager.h: + * Logging/Use_Multiple_Sinks.cpp: + * Logging/Use_Ostream.cpp: + * Naming/Name_Binding.h: + + #included fstream conditionally on VC6. This should fix the + remaining compile errors on VC6 with MPC builds. + +Sun Jan 18 09:48:03 2004 Balachandran Natarajan + + * examples/TMCast/member.cpp: + + Fixed a compilation errors with VC6 which stemmed due to the + fact that a unsigned long long was used. We use ACE_UINT64 + instead. + +Sun Jan 18 09:40:04 2004 Balachandran Natarajan + + * tests/SOCK_Send_Recv_Test_IPV6.cpp: + * tests/SOCK_Test_IPv6.cpp: + + More warnings from unused functions. + +Sun Jan 18 09:55:32 UTC 2004 Johnny Willemsen + + * bin/msvc_auto_compile.pl: + Added tests/Test_Output.dsp to the list of libs to be build first + when building statically. Removed the code for the non-MPC static + build, the projects for this are removed before the 1.4 release. + + * bin/msvc_static_order.lst: + Added tests/Test_Output.dsp to the list of libs to be build first. + +Sun Jan 18 08:52:11 UTC 2004 Johnny Willemsen + + * ASNMP/asnmp/ctr64.h: + Added include of ace/Basic_Types.h to get ACE_UINT64 definition. + +Sun Jan 18 08:45:13 UTC 2004 Johnny Willemsen + + * tests/Tests.bor: + Fixed this makefile + +Sun Jan 18 00:00:07 2004 Balachandran Natarajan + + * tests/Max_Default_Port_Test_IPV6.cpp: + * tests/SOCK_Send_Recv_Test_IPV6.cpp: + * tests/SOCK_Test_IPv6.cpp: + + Fixed unused function warnings in the daily builds. + +Sat Jan 17 23:52:38 2004 Balachandran Natarajan + + * tests/SOCK_Dgram_Test.cpp: + + Fixed a compile error in Full_Reactor builds. + +Sat Jan 17 19:38:11 UTC 2004 Johnny Willemsen + + * tests/INET_Addr_Test_IPV6.cpp: + * tests/Proactor_Test_IPV6.cpp: + * tests/SOCK_Send_Recv_Test_IPV6.cpp: + + Fixed incorrect doxygen file tag. + +Sat Jan 17 19:35:43 UTC 2004 Johnny Willemsen + + * examples/C++NPv2/AC_CLD_export.h: + * examples/C++NPv2/AIO_CLD_export.h: + * examples/C++NPv2/CLD_export.h: + * examples/C++NPv2/SLD_export.h: + * examples/C++NPv2/SLDEX_export.h: + * examples/C++NPv2/TPCLS_export.h: + * examples/C++NPv2/TPLS_export.h: + Added check for ACE_AS_STATIC_LIBS for setting the export flags for + proper building of static libraries. + +Sat Jan 17 19:19:33 UTC 2004 Johnny Willemsen + + * ASNMP/asnmp/ASNMP_Export.h: + Added check for ACE_AS_STATIC_LIBS for setting the export flags for + proper building of static libraries. + + * ASNMP/asnmp/ctr64.cpp: + * ASNMP/asnmp/ctr64.h: + Changed unsigned long long to ACE_UINT64 + + * ASNMP/asnmp/address.h: + * ASNMP/asnmp/octet.h: + * ASNMP/asnmp/oid.h: + * ASNMP/asnmp/pdu.h: + * ASNMP/asnmp/vb.h: + Added missing ASNMP_Export macro. + + This fixes several build problems on Win32. Thanks to + Michelangelo Nottoli for reporting this + and supplying the ideas how to fix this. + +Sat Jan 17 18:43:12 UTC 2004 Johnny Willemsen + + * bin/msvc_static_compile.pl: + * bin/msvc_static_order.lst: + When using static projects we cannot use the dependencies between + different libraries. Therefor we have to explicitly define the + build order. The existing msvc_auto_compile.pl script was getting + to complex, so added a new msvc_static_compile.pl script that will + be used for building statically. In the msvc_static_order.lst the + order of building can be specified. + +Sat Jan 17 09:46:38 2004 Balachandran Natarajan + + * ace/TMCast/Group.cpp: + + Fixed compile errors with VC++ 6. + +Sat Jan 17 15:29:01 UTC 2004 Johnny Willemsen + + * ASNMP/asnmp/asn1.cpp: + Removed not needed ; + +Sat Jan 17 15:05:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/ec_typed_events.mpb: + * bin/MakeProjectCreator/config/ec_use_typed_events.mpb: + * bin/MakeProjectCreator/config/event.mpb: + The fix for the ec_typed_events feature. Thanks to Chad Elliot for + explaining that MPC inheritance is based on file name. So CosEvent.mpc + inherits from ec_typed_events in the orbsvcs directory, projects using + event inherit from event which inherits from ec_use_typed_events + which then sets the needed compiler flags and adds the needed + libraries to the linker. + +Sat Jan 17 00:56:54 2004 Balachandran Natarajan + + * tests/Proactor_Test_IPV6.cpp + * tests/SOCK_Send_Recv_Test_IPV6.cpp: + * tests/SOCK_Test_IPv6.cpp: + + Fixed compilation errors in builds that don't have IPV6 enabled. + +Sat Jan 17 00:45:40 2004 Balachandran Natarajan + + * tests/Multihomed_INET_Addr_Test_IPV6.dsp: + * tests/INET_Addr_Test_IPV6.dsp: + * tests/Max_Default_Port_Test_IPV6.dsp: + * tests/Multicast_Test_IPV6.dsp: + * tests/Proactor_Test_IPV6.dsp: + * tests/SOCK_Send_Recv_Test_IPV6.dsp: + * tests/SOCK_Test_IPv6.dsp: + + New dsp files for the tests + + * tests/tests.dsw: + + Workspace file with the mods. + +Sat Jan 17 00:12:21 2004 Balachandran Natarajan + + * tests/run_test.lst: + * tests/tests.mpc: + + Added missing tests. + +Fri Jan 16 23:57:08 2004 Balachandran Natarajan + + * tests/INET_Addr_Test_IPV6.cpp: + * tests/Max_Default_Port_Test_IPV6.cpp: + * tests/Multicast_Test_IPV6.cpp: + * tests/Multihomed_INET_Addr_Test_IPV6.cpp: + * tests/Proactor_Test_IPV6.cpp: + * tests/SOCK_Send_Recv_Test_IPV6.cpp: + + Fixed a typo in the name of the files that are printed out for + logging and error checking. + +Fri Jan 16 23:25:03 2004 Balachandran Natarajan + + * tests/Tests.bor: + + New test to the borland makefiles. + +Fri Jan 16 23:21:10 2004 Balachandran Natarajan + + * tests/run_test.lst: + + Added the new tests to the daily build. + +Fri Jan 16 23:19:17 2004 Balachandran Natarajan + + * tests/tests.mpc: + + Added the new tests to the MPC. + +Fri Jan 16 23:01:11 2004 Balachandran Natarajan + + * tests/Multihomed_INET_Addr_Test_IPV6.cpp: + * tests/Proactor_Test_IPV6.cpp: + * tests/SOCK_Send_Recv_Test_IPV6.cpp: + * tests/SOCK_Test_IPv6.cpp: + + More IPV6 tests from Brian Bruesker. + + * tests/Makefile.tests: + + Added these new tests. + +Fri Jan 16 21:38:59 2004 Balachandran Natarajan + + * tests/INET_Addr_Test_IPV6.cpp: + * tests/Max_Default_Port_Test_IPV6.cpp: + * tests/Multicast_Test_IPV6.cpp: + * tests/Multihomed_INET_Addr_Test_IPV6.cpp: + + New test for IPV6. These tests were donated by Brian Bruesker. + + * tests/SOCK_Dgram_Test.cpp: + + Cosmetic fix. + + * tests/Makefile.tests: + + Added the new tests. + +Fri Jan 16 18:44:04 2004 Balachandran Natarajan + + * tests/INET_Addr_Test.cpp: + * tests/Max_Default_Port_Test.cpp: + * tests/Multicast_Test.cpp: + * tests/Multihomed_INET_Addr_Test.cpp: + * tests/Proactor_Test.cpp: + * tests/SOCK_Send_Recv_Test.cpp: + * tests/SOCK_Test.cpp: + + Reverted changes from "Fri Jan 16 17:25:50 2004 Balachandran + Natarajan " since the IPV6 needs to be + placed seperately. + +Fri Jan 16 17:25:50 2004 Balachandran Natarajan + + * tests/INET_Addr_Test.cpp: + * tests/Max_Default_Port_Test.cpp: + * tests/Multicast_Test.cpp: + * tests/Multihomed_INET_Addr_Test.cpp: + * tests/Proactor_Test.cpp: + * tests/SOCK_Send_Recv_Test.cpp: + * tests/SOCK_Test.cpp: + + Thanks to Brian Bruesker , we now have + tests for IPV6 features in the above tests + + * tests/SOCK_Dgram_Test.cpp: + + A simple test based on SOCK_Test for Datagrams. Thanks once + again to Brian Bruesker. + + * tests/Makefile.tests: + + Added the new test. + +Fri Jan 16 15:04:17 2004 Douglas C. Schmidt + + * ace/SOCK_Dgram_Bcast.cpp (close): Set the this->if_list_ + field to 0 to let applications close and re-open the socket. + Without it, a second close will delete already delete'd memory. + Thanks to Shannon Barber for + this fix. + +Fri Jan 16 12:29:48 2004 Ossama Othman + + * configure.ac (AC_CONFIG_AUX_DIR): + + Changed auxiliary directory filename from "aux" to + "aux_config". The former is not an allowed/valid name on + Windows. Thanks to Greg Mulyar for pointing + out the problem. + +Fri Jan 16 14:19:14 2004 Balachandran Natarajan + + * tests/tests.mpc: + + Fixed the project names in MPC to be similar to the ones used in + default distribution. Thanks to Boris Kaminer + for motivating this fix. + +Fri Jan 16 16:09:31 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/event.mpb: + Removed ec_typed_events as base. This resulted in problems in + building other orbsvcs which then use the ec_typed_events.mpb + which is located in $(TAO_ROOT)/orbsvcs/orbsvcs. This restores + the situation to the previous situation and in meantime we can + figure out a better solution. + +Fri Jan 16 15:01:11 UTC 2004 Johnny Willemsen + + * tests/Logging_Strategy_Test.cpp: + For checking if we are building statically use ACE_AS_STATIC_LIBS and + not ACE_HAS_STATIC_LIBS. With this fix this tests runs again in the + BCB6 static build. + +Fri Jan 16 11:27:01 UTC 2004 Johnny Willemsen + + * tests/Service_Config_DLL_Export.h: + Added check for ACE_AS_STATIC_LIBS for setting the export flags for + proper building of static libraries. + +Fri Jan 16 11:25:32 UTC 2004 Johnny Willemsen + + * examples/APG/Svc_Config/HASTATUS_export.h + Added check for ACE_AS_STATIC_LIBS for setting the export flags for + proper building of static libraries. + +Fri Jan 16 09:57:45 UTC 2004 Johnny Willemsen + + * tests/DLL_Test.bor: + * tests/DLL_Test.cpp: + Changed this test so that it works in MPC and non-MPC builds. + We use always the decorator string for the dll name. + +Fri Jan 16 08:56:13 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/ec_typed_events.mpb: + Added this file. When the feature ec_typed_events is available, + we must link with the IFRClient and DynamicInterface library. + + * bin/MakeProjectCreator/config/event.mpb: + Add ec_typed_events as parent project. When ec_typed_events is + available projects using event should link with the extra needed + libraries. This fixes the link errors in the BCB6 Static build. + +Thu Jan 15 20:54:38 2004 Ossama Othman + + * configure.ac: + + Require GNU Autoconf 2.58 or better, not 2.57g or better. + Version 2.57g was a testing release not a stable release. + + Use more comprehensive (custom) test for detecting shm_open() + support instead of AC_CHECK_FUNC. In particular, use + AC_LINK_IFELSE so that we can detect missing function prototype + errors. Addresses a problem on Solaris builds where shm_open() + support was incorrectly detected as available despite the fact + POSIX.1b support was not enabled. + + Removed ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION test. This macro is + no longer used. + + * ace/os_include/sys/os_resource.h: + + Include in the ACE_HAS_PROC_FS case. It is + necessary to pull in the "prusage_t" typedef. That typedef is + used later in this header. Addresses an ACE+autoconf build + problem on Solaris. + + * m4/ace.m4: + + Corrected quoting problem that caused "--enable-fast" help + string to be echoed incorrectly. + + * m4/acinclude.m4: + + Corrected typo in warning message. + + * m4/compiler.m4: + + Updated Sun C++ 5.0 configuration settings to match those in the + latest platform_sunos5_sunc++.GNU file. + + * m4/config_h.m4 (AH_BOTTOM): + + Added empty line to text appended to generated `config.h' file + to correct a "non-empty ending line" warning exhibited by Sun + C++ 5.0. + + (ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION): + + Removed template for this preprocessor macro. It is no longer + used. + +Thu Jan 15 20:33:09 2004 Balachandran Natarajan + + * docs/ACE-development-process.html (HREF): + + Added a small writeup about the features of BFO. + +Thu Jan 15 19:47:13 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/avstreams.mpb: + Avstreams uses the feature qos, so when qos=1 is set in the + default.features file we use the ACE_QoS library. Projects + using avstreams should also use this feature, so that they also + link with ACE_QoS when qos=1. This fixes link errors in the + BCB6 Static Build. + +Thu Jan 15 18:50:42 UTC 2004 Johnny Willemsen + + * tests/ACE_Init_Test.cpp: + Fixed compile problem in BCB6 Unicode build + +Thu Jan 15 18:42:11 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/portablegroup.mpb: + PortableGroup uses iormanip, so also projects using portablegroup + need this. This fixes the compile problems in the BCB6 Static + build. + +Thu Jan 15 18:33:16 UTC 2004 Johnny Willemsen + + * examples/C++NPv1/Process_Per_Connection_Logging_Server.cpp: + Use ACE_OS::strcpy instead of strcpy to fix compile problem in + BCB6 Static build. + +Thu Jan 15 11:12:45 2004 Chad Elliott + + * bin/MakeProjectCreator/config/ciao_servant.mpb: + * bin/MakeProjectCreator/config/qt-min_moc.mpb: + * bin/MakeProjectCreator/config/qt_moc.mpb: + + Removed the command options from the command setting and put them + into the commandflags settings. + + * bin/MakeProjectCreator/templates/cbx.mpd: + + Added the initial support for custom build types. + + * bin/MakeProjectCreator/templates/em3vcp.mpd: + + Fixed a bug in this template where the !ENDIF for custom build + types would be missing. + + * bin/MakeProjectCreator/templates/vc6dsp.mpd: + + Added user dependencies for custom build types. + + * bin/MakeProjectCreator/templates/vc7.mpd: + + Fixed the user dependencies for custom build types such that it is + not hard coded to be the CIAO IDL compiler for all custom build + types. + +Thu Jan 15 16:47:11 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/rtcorbacommon.mpb: + The rtcorbacommon library needs portableserver and doesn't build + when minimum_corba is set + +Thu Jan 15 08:02:23 2004 Douglas C. Schmidt + + * ace/INET_Addr.cpp (get_port_number_from_name): Changed + initial value of port_number from 0 to -1. Thanks to + Stephen Moon for this fix. + +Thu Jan 15 16:06:54 UTC 2004 Johnny Willemsen + + * examples/Export/test_export.h: + * ace/TMCast/Export.hpp: + Added check for ACE_AS_STATIC_LIBS for setting the export flags for + proper building of static libraries. + +Thu Jan 15 16:03:11 UTC 2004 Johnny Willemsen + + * examples/Bounded_Packet_Relay/Bounded_Packet_Relay.mpc: + * examples/Synch/Synch.mpc: + Added new mpc files for these examples + +Thu Jan 15 08:14:08 2004 Chad Elliott + + * bin/MakeProjectCreator/README: + + Added documentation for keyword mapping which will allow users to + map custom defined keywords into the project level scope. + Removed support for the idlpreprocessor keyword. + + * bin/MakeProjectCreator/config/core.mpb: + + Changed core = 1 into a verbatim clause that enbles the removal of + the core keyword. + + * bin/MakeProjectCreator/config/vcpartialmacros.mpt: + + Removed the ACE specific precompiled headers macro. + + * bin/MakeProjectCreator/modules/AutomakeProjectCreator.pm: + + Propagated change from GNUACEProjectCreator on Wed Jan 7 06:24:54 + 2004. + + * bin/MakeProjectCreator/modules/Creator.pm: + * bin/MakeProjectCreator/modules/ProjectCreator.pm: + Added support for keyword mapping which will allow users to map + custom defined keywords into the project level scope. + + * bin/MakeProjectCreator/modules/MakeWorkspaceCreator.pm: + + Changed the workspace output to allow a user to make a specific + target within the workspace. If the user specified target + requires other projects, then those projects are built also. + + * bin/MakeProjectCreator/modules/Version.pm: + + Updated the version number of MPC. + + * bin/MakeProjectCreator/modules/WorkspaceCreator.pm: + + Warn about circular dependencies between projects. + + * bin/MakeProjectCreator/templates/bor.mpd: + + Added verbatim markers, removed the use of the core keyword in + favor of the verbatim used to get the same effect. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Fixed a bug in this template where TAO_ORBSVCS was not being + handled properly. + Removed the use of the idlpreprocessor keyword in favor of the + verbatim used to get the same effect. + +Local Variables: +add-log-time-format: current-time-string +End: diff --git a/ACE/ChangeLogs/ChangeLog-04b b/ACE/ChangeLogs/ChangeLog-04b new file mode 100644 index 00000000000..fe54044d243 --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-04b @@ -0,0 +1,8063 @@ +Thu Dec 30 12:54:28 2004 Chris Cleeland + + * NEWS: Updated to include latest release news. + +Thu Dec 30 11:44:51 2004 Steve Huston + + * NEWS: Noted that the autoconf stuff gave up on complete automation + via MPC-generation of the Makefile.am files. Autoconf should work + mostly for 5.4.3 and completely before 5.5. + +Wed Dec 29 18:53:12 2004 Steve Huston + + * tests/run_test.pl: If running a WinCE test, the log file has a + .txt suffix, not .log. If it's .log, there's no (easy) way to look + at the file on the device itself, so they're named .txt. + +Tue Dec 28 19:45:58 2004 Balachandran Natarajan + + * bin/make_release: + + Added .png to the list of files that needs to be omitted from + LF->CRLF conversions. Thanks to Johnny for pointing this out. + +Sat Dec 25 20:58:12 2004 Balachandran Natarajan + + * bin/make_release: + + Generated textual version of TAO-INSTALL.html and + CIAO-INSTALL.html within the distribution. + +Wed Dec 22 12:47:19 2004 Steve Huston + + * ACE-INSTALL.html: Revised the platforms and support section to + reflect the need for actively maintained platforms to be represented + on the build scoreboard. Old, unmaintained platforms are subject to + deprecation and removal. + +Wed Dec 22 11:35:07 2004 Ossama Othman + + * configure.ac: + * m4/ace.m4: + * m4/compiler.m4: + * m4/platform.m4: + + Reverted change described in "Sun Dec 19 14:23:53 2004 ..." that + changed "$host" to "$target". The latter is only used by tool + chains (compilers, linkers, etc) and is not needed in ACE's + case. To enable cross-compilation support, users should set the + host platform via the "--host" configure script option, as + described in the "./configure --help" output. + +Wed Dec 22 11:17:57 2004 Chad Elliott + + * bin/show_unused_macros.pl: + + This script will find macros in specified config files that + are not referenced in other config files, but are referenced + in the rest of the ace source files. The macros that it shows + are candidates for removal from ace. + +Wed Dec 22 08:00:33 2004 Chad Elliott + + * bin/MakeProjectCreator/config/ftclientorb.mpb: + * bin/MakeProjectCreator/config/ftserverorb.mpb: + + These both require interceptors to function properly. + + * bin/tao_other_tests.lst: + + Added !STATIC to the following: + + TAO/performance-tests/Protocols/run_test.pl + TAO/orbsvcs/tests/Notify/Basic/run_test.pl notify.rt.conf + + Added !MINIMUM to the following: + + TAO/orbsvcs/tests/Bug_1393_Regression/run_test.pl + TAO/orbsvcs/tests/Bug_1395_Regression/run_test.pl + TAO/orbsvcs/tests/Bug_1436_Regression/run_test.pl + TAO/orbsvcs/tests/Bug_1437_Regression/run_test.pl + + Added !DISABLE_INTERCEPTORS to the following: + + TAO/orbsvcs/tests/FaultTolerance/GroupRef_Manipulation/run_test.pl + TAO/orbsvcs/tests/FaultTolerance/IOGR/run_test.pl + TAO/orbsvcs/tests/FaultTolerance/IOGRManipulation/run_test.pl + + Added !NO_MESSAGING to the following: + + TAO/orbsvcs/tests/Log/Basic_Log_Test/run_test.pl + TAO/orbsvcs/tests/BiDir_CORBALOC/run_test.pl + TAO/orbsvcs/tests/Bug_1395_Regression/run_test.pl + TAO/orbsvcs/tests/Bug_1437_Regression/run_test.pl + + * tests/Multicast_Test.cpp: + + If the wait() for the consumer thread fails, we need to forcably + shutdown that thread so that it does not reference deleted memory. + +Tue Dec 21 12:17:50 2004 Chad Elliott + + * bin/PerlACE/Process_Win32.pm: + + Take into account the fact that installed binaries do not conform + to the -ExeSubDir option. + +Tue Dec 21 04:52:25 2004 Balachandran Natarajan + + * Release: + * bin/make_release: + + Udated them to add the correct versions of files. + +Mon Dec 20 17:38:12 UTC 2004 Johnny Willemsen + + * tests/run_test.lst: + Added missing : between tests and LynxOS + +Mon Dec 20 08:33:28 2004 J.T. Conklin + + * configure.ac: + + Added test for ACE_LACKS_UMASK. + +Mon Dec 20 08:10:31 2004 J.T. Conklin + + * configure.ac: + * m4/config_h.m4: + + Replaced autoheader templates for type and size in config_h.m4 + with a third argument to AC_DEFINE in configure.ac. + +Mon Dec 20 09:40:22 2004 Chad Elliott + + * bin/tao_other_tests.lst: + + Re-removed TAO/orbsvcs/tests/Notify/Lanes/run_test.pl and + TAO/orbsvcs/tests/Notify/ThreadPool/run_test.pl. These tests + require more scheduling priorities than most of the nightly build + systems have access to as a regular user. + +Mon Dec 20 16:47:08 2004 Olli Savia + + * ace/Mem_Map.h: + * ace/Mem_Map.inl: + * ace/Mem_Map.cpp: + * ace/OS_NS_sys_mman.inl: + Replaced ACE_HAS_LYNX_BROKEN_MMAP with ACE_HAS_LYNXOS_BROKEN_MMAP + to be more consistent in macro naming. + + * ace/Time_Value.h: + Removed unnecessary LynxOS specific includes. + + * ace/config-lynxos.h: + Added #define ACE_HAS_LYNXOS_BROKEN_MMAP. + + * tests/Cached_Conn_Test.cpp: + * tests/Priority_Reactor_Test.cpp: + * tests/Reader_Writer_Test.cpp: + * tests/TSS_Test.cpp: + * tests/Thread_Mutex_Test.cpp: + Removed unnecessary LynxOS specific code. + + * tests/run_test.lst: + Enabled/disabled some test for LynxOS. + +Mon Dec 20 14:19:12 UTC 2004 Johnny Willemsen + + * ace/config-WinCE.h: + Added ACE_LACKS_TEMPNAM + + * ace/OS_NS_stdlib.inl: + Simplified tempnam implementation and replaced several C-style + casts with their C++ version. Removed obsolete gets that was + commented out. + + * ace/OS_NS_stdlib.h: + Changed some comments to doxygen style + +Mon Dec 20 13:36:12 UTC 2004 Johnny Willemsen + + * ace/OS_NS_arpa_inet.cpp: + Replace C-style cast with C++ const_cast + + * ace/config-vxworks5.x.h: + Updated supported versions + + * ace/config-openvms.h: + Removed old comments + +Mon Dec 20 13:26:12 UTC 2004 Johnny Willemsen + + * ace/os_include/os_semaphore.h: + Removed not needed include of semLib.h with VxWorks. The file + semaphore.h does this already. + +Mon Dec 20 13:12:12 UTC 2004 Johnny Willemsen + + * ace/CDR_Stream.{cpp,inl}: + Removed the read_float and write_float from the cpp file and removed + the guards around it in the inl file. When VXWORKS was set, but not + ghs we didn't get any of the methods. This seems a very old + workaround so zap it, we don't need it anymore and caused problems + +Mon Dec 20 12:54:12 UTC 2004 Johnny Willemsen + + * ace/INET_Addr.cpp {get_port_number_from_name): + Only check for ACE_LACKS_GETSERVBYNAME, VxWorks and Chorus have + this define also set + +Mon Dec 20 11:44:12 UTC 2004 Johnny Willemsen + + * ace/config-vxworks5.x.h: + * ace/README: + * ace/OS_NS_dirent.inl: + Added ACE_HAS_NONCONST_OPENDIR + +Mon Dec 20 11:35:12 UTC 2004 Johnny Willemsen + + * ace/config-vxworks5.x.h: + * ace/README: + * ace/OS_NS_unistd.inl: + Added ACE_HAS_NONCONST_UNLINK + +Mon Dec 20 11:29:12 UTC 2004 Johnny Willemsen + + * ace/config-vxworks5.x.h: + * ace/README: + * ace/OS_NS_unistd.inl: + Added ACE_HAS_NONCONST_RMDIR + + * ace/OS_NS_unistd.inl: + Merged the two ACE_OS::getopt methods to one, no need to have a special + win32 not supported version + +Mon Dec 20 11:18:12 UTC 2004 Johnny Willemsen + + * ace/config-vxworks5.x.h: + * ace/README: + * ace/OS_NS_unistd.inl: + Added ACE_HAS_NONCONST_CHDIR + +Mon Dec 20 11:01:12 UTC 2004 Johnny Willemsen + + * ace/config-integritySCA.h: + * ace/config-psos-diab-mips.h: + * ace/config-psos-diab-ppc.h: + * ace/config-psos-diab.h: + * ace/config-psos-tm.h: + * ace/config-psos-psosim-g++.h: + * ace/config-WinCE.h: + Added ACE_LACKS_UMASK + + * ace/config-vxworks5.x.h: + Adde ACE_LACKS_UMASK, ACE_HAS_NONCONST_STAT and ACE_MKDIR_LACKS_MODE + + * ace/config-win32-common.h: + Added ACE_MKDIR_LACKS_MODE + + * ace/OS_NS_sys_stat.inl: + Merged all umask implementation to one version and introduced + an ACE_LACKS_UMASK to check if umask is supported or not. + Use the new ACE_HAS_NONCONST_STAT instead of checking for VxWorks + explicitly + Use ACE_MKDIR_LACKS_MODE to determine whether a mode must be passed + with the mkdir invocation or not. + + * ace/README: + Documented new defines + +Mon Dec 20 10:37:12 UTC 2004 Johnny Willemsen + + * ace/Time_Value.h: + Removed not needed VxWorks specific include + + * ace/config-tandem.h: + Removed a lot of commented out defines, makes it much easier + to search for deprecated defines + + * ace/config-g++-common.h: + Removed check for VxWorks >= 540, older versions are not supported + anymore, so no need to do this check + +Sun Dec 19 14:23:53 2004 J.T. Conklin + + * configure.ac: + * m4/ace.m4: + * m4/compiler.m4: + * m4/platform.m4: + + Replace use of $host with $target. Needed if we're ever to + support cross compilation. + +Sun Dec 19 17:52:12 UTC 2004 Johnny Willemsen + + * examples/QOS/Change_Sender_TSpec/receiver.cpp: + * examples/QOS/Change_Sender_TSpec/sender.cpp: + * examples/QOS/Change_Sender_TSpec/QoS_Util.{h,cpp}: + Fixed compile error in unicode build + + * examples/QOS/Change_Sender_TSpec/QOS_Change_Sender_FlowSpec.mpc: + * examples/QOS/Change_Sender_TSpec/QOS_Change_Sender_TSpec.mpc: + Renamed to match directory name + +Sun Dec 19 15:46:12 UTC 2004 Johnny Willemsen + + * ace/os_include/os_time.h: + Fixed incorrect comment after endif + +Sun Dec 19 16:35:34 2004 Olli Savia + + * ace/README: + Updated ACE_HAS_PREDEFINED_THREAD_CANCELLED_MACRO description. + + * ace/config-lynxos.h: + Added ACE_HAS_PREDEFINED_THREAD_CANCELLED_MACRO and removed + ACE_POLL_IS_BROKEN. + +Sun Dec 19 10:45:12 UTC 2004 Johnny Willemsen + + * examples/QOS/Change_Receiver_FlowSpec/sender.cpp: + * examples/QOS/Diffserv/diffserv_test.cpp: + * examples/QOS/Diffserv/server.cpp: + Fixed compile error in unicode build + +Sun Dec 19 01:32:05 2004 Emre Turkay + + * ace/config-win32-msvc.h: + + Added a if not defined guard to the QT_DLL definition. + +Sat Dec 18 10:03:41 2004 Olli Savia + + * ace/README: + Added ACE_HAS_PREDEFINED_THREAD_CANCELLED_MACRO. + + * tests/Malloc_Test.cpp: + There is no reason not to compile this test on LynxOS. It doesn't + work but there are now better chances that it will be fixed some + day. + +Fri Dec 17 13:53:12 UTC 2004 Johnny Willemsen + + * ace/OS.inl: + Corrected comment after #endif + +Fri Dec 17 13:41:12 UTC 2004 Johnny Willemsen + + * ace/OS_NS_unistd.cpp: + Converted ACE casts to C++ casts, removed the checks for win32 and + vxworks for execlp, execle and execl, these methods are not + implemented for any environment, so no need to have a special + notsup for windows and vxworks + +Fri Dec 17 13:19:12 UTC 2004 Johnny Willemsen + + * ace/IOStream_T.cpp: + Removed code to define a variable to prevent munch problems. Not + needed anymore with the latest VxWorks version and the static + metioned is also gone already. + +Fri Dec 17 12:47:12 UTC 2004 Johnny Willemsen + + * ace/IO_SAP.cpp: + Just always build the code, the ACE_OS layer handles the not + supported issues on Win32 and VxWorks. + +Fri Dec 17 12:21:12 UTC 2004 Johnny Willemsen + + * ace/OS.h: + Also on VxWorks include os_un.h + +Fri Dec 17 11:31:12 UTC 2004 Johnny Willemsen + + * ace/OS_NS_sys_socket.inl: + HPUX and VxWorks seem to have a send that accepts a const char*, so + removed them from the list that uses a char* + +Thu Dec 16 16:53:12 UTC 2004 Johnny Willemsen + + * ace/Timeprobe_T.cpp: + Removed checking of ACE_HAS_BROKEN_DES_ARRAY_FREE. This define is + not set for any compiler, so removed it. + + * tests/Timeprobe_Test.cpp: + Added missing include to get this test compiling + +Thu Dec 16 16:13:12 UTC 2004 Johnny Willemsen + + * ACE-INSTALL.html: + Some minor documentation updates for VxWorks. + +Thu Dec 16 10:06:10 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Check for multiple places for the test executable. Some Linux + installations don't have /bin/test, but do have /usr/bin/test. + This will allow more parallel building to occur. + +Thu Dec 16 16:00:12 UTC 2004 Johnny Willemsen + + * ace/OS_NS_Thread.h: + Converted some documentation to doxygen style + +Thu Dec 16 09:34:02 2004 Chad Elliott + + * ace/OS_NS_sys_socket.inl (getsockname): + + Fixed a bug introduced Mon Dec 13 10:34:24 2004 where the sockaddr + would be zero'ed out instead of just the sin_zero of the + sockaddr_in. + +Thu Dec 16 15:22:12 UTC 2004 Johnny Willemsen + + * tests/Thread_Manager_Test.cpp: + Replaced ACE cast macro with the C++ variant + +Thu Dec 16 15:07:12 UTC 2004 Johnny Willemsen + + * ace/config-vxworks5.x.h: + Removed defines for VxWorks <= 0x540, these are not usable anymore + + * tests/log/Makefile.am: + Removed this file, checked it with J.T. Conklin, we don't need this + file anymore + +Thu Dec 16 14:38:12 UTC 2004 Johnny Willemsen + + * ace/os_include/arpa/os_inet.h: + Removed prototypes for VxWorks <= 0x540, these VxWorks versions + are not usable anymore because of the lack of namespace support. + +Thu Dec 16 16:12:07 2004 Olli Savia + + * ace/Mem_Map.h: + * ace/Mem_Map.inl: + * ace/Mem_Map.cpp: + * ace/OS_NS_sys_mman.inl: + Replaced __Lynx__ macro with ACE_HAS_LYNX_BROKEN_MMAP macro. + This makes code maintenace easier across different + LynxOS versions. + +Thu Dec 16 14:14:12 UTC 2004 Johnny Willemsen + + * ace/Flag_Manip.cpp: + Instead of checking for ACE_WIN32 or VXWORKS or ACE_LACKS_FCNTL, + only check for ACE_LACKS_FCNTL, win32 and VxWorks have this define + already set + +Thu Dec 16 14:07:12 UTC 2004 Johnny Willemsen + + * ace/config-lite.h: + Removed commected out typedef in VxWorks part + +Thu Dec 16 13:49:12 UTC 2004 Johnny Willemsen + + * examples/QOS/Simple/QoS_Util.{h,cpp}: + * examples/QOS/Simple/sender.cpp: + * examples/QOS/Simple/receiver.cpp: + Fixed compile problems in unicode builds + +Thu Dec 16 13:03:12 UTC 2004 Johnny Willemsen + + * examples/Reactor/FIFO/client.cpp: + Fixed link errors in unicode builds + +Thu Dec 16 13:00:12 UTC 2004 Johnny Willemsen + + * examples/Reactor/Misc/test_timer_queue.cpp: + * examples/Reactor/Misc/test_signals_2.cpp: + * examples/Reactor/Misc/test_signals_1.cpp: + * examples/Reactor/Misc/test_reactors.cpp: + * examples/Reactor/Misc/test_event_handler_t.cpp: + * examples/Reactor/Misc/test_early_timeouts.cpp: + Fixed link errors in unicode builds + + * examples/Reactor/Misc/Reactor_Misc.mpc: + Added missing test_event_handler_t + +Thu Dec 16 10:18:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_gnuwin32_common.GNU: + Only set FL and GL flags when they are not set + + * include/makeinclude/wrapper_macros.GNU: + Removed setting of PACE root, we don't use this anymore + + Thanks to Pete McCann for reporting these + problems. + +Wed Dec 15 17:05:22 2004 Steve Huston + + * tests/Test_Output.cpp: When resetting msg_ostream to cerr, specify + 0 for delete_ostream. ACE_Log_Msg is not allowed to delete cerr. + Fixes the crash in Logging_Strategy_Test. + +Wed Dec 15 16:01:12 UTC 2004 Johnny Willemsen + + * examples/APG/Active_Objects/active_objects.mwc: + * examples/APG/Config/config.mwc: + * examples/APG/Containers/containers.mwc: + * examples/APG/Logging/logging.mwc: + * examples/APG/Misc_IPC/misc_ipc.mwc: + * examples/APG/Naming/naming.mwc: + * examples/APG/Proactor/proactor.mwc: + * examples/APG/Processes/processes.mwc: + * examples/APG/Reactor/reactor.mwc: + * examples/APG/Shared_Memory/shared_memory.mwc: + * examples/APG/Signals/signals.mwc: + * examples/APG/Sockets/sockets.mwc: + * examples/APG/Streams/streams.mwc: + * examples/APG/Svc_Config/svc_config.mwc: + * examples/APG/ThreadManagement/threadmgmt.mwc: + * examples/APG/ThreadPools/threadpools.mwc: + * examples/APG/Threads/threads.mwc: + * examples/APG/ThreadSafety/threadsafety.mwc: + * examples/APG/Timers/timers.mwc: + Removed these files, they are not needed anymore because all project + files are now generated and they interfere in our release proces, + they cause workspaces which only differ in casing then the + ones generated from higher levels. + +Wed Dec 15 13:37:12 UTC 2004 Johnny Willemsen + + * bin/make_release: + Also exclude ASNMP/asnmp.mwc during the dynamic release. + +Wed Dec 15 10:04:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_gnuwin32_common.GNU: + Set GL flags to the correct values + +Tue Dec 14 19:53:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_cygwin32.GNU: + * include/makeinclude/platform_gnuwin32_common.GNU: + Moved fltk flags to gnuwin32 file + +Tue Dec 14 19:40:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_cygwin32.GNU: + Added flags for fltk usage with cygwin + +Tue Dec 14 18:23:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/wrapper_macros.GNU: + Fixed typo in the ACE_MAKE_OPTIONS added for fl_reactor + +Tue Dec 14 12:25:12 UTC 2004 Martin Corino + + * include/makeinclude/platform_vxworks5.5.x.GNU: + Fixed unwanted inclusion of VxWorks system libraries in link + command. + +Tue Dec 14 09:44:12 UTC 2004 Johnny Willemsen + + * ace/OS_NS_sys_socket.inl: + Added missing include when ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO + is defined to 1 + +Mon Dec 13 19:30:12 UTC 2004 Johnny Willemsen + + * tests/Semaphore_Test.cpp (worker): + Changed the way we compare if the acquire failed. Use a intermediate + long as in the test_timeout function to handle the case when + the acquire returns a little bit earlier than we expected. This + fixes the incorrect test failure with Interix and MinGW. Thanks for + Steven Frare for sorting this out + and supplying a patch + +Mon Dec 13 10:34:24 2004 Ossama Othman + + From Roland Mueb : + * ace/OS_NS_sys_socket.inl (getpeername, getsockname): + + If (the new) ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO preprocessor + symbol is defined, initialize the sockaddr_in::sin_zero field to + zero after the call to get{peer,sock}name() when the address + family is AF_INET. Some platforms, like older versions of the + Linux kernel, do not initialize the sin_zero field since that + field is generally only used for padding/alignment purposes. On + those platforms memcmp()-based comparisons of the sockaddr_in + structure, such as the one in the ACE_INET_Addr equality + operator, may fail due to random bytes in the sin_zero field + even though that field is unused. This fix prevents equality + comparison of two different sockaddr_in instances that refer to + the same socket from failing. + + * ace/OS_NS_macros.h (ACE_SOCKCALL): + + Added non-returning counterpart to the ACE_SOCKCALL_RETURN + macro. Used by the above fix. + + * ace/config-linux-common.h: + + Define ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO if Linux kernel + version is less than 2.5.47. Kernels prior to that version did + not initialize the sockaddr_in::sin_zero field. + +Mon Dec 13 10:07:52 2004 J.T. Conklin + + * configure.ac: + * m4/config_h.m4: + + Changed to provide ACE_INT64 typedef. + +Mon Dec 13 10:16:40 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/templates/gnudll.mpt: + * bin/MakeProjectCreator/templates/gnuexe.mpt: + + Modifications to add a 'targetoutdir' template variable which + determines the output location of object files, exes and + libraries. By default, this template variable is not set and does + not affect anything. + +Mon Dec 13 16:11:23 2004 Balachandran Natarajan + + * bin/make_release: + + Exclude ASNMP/asnmp.mwc during the release. + +Mon Dec 13 06:33:42 2004 J.T. Conklin + + * ace/config-netbsd.h: + + Provide ACE_INT64 typedef. + +Mon Dec 13 12:50:12 UTC 2004 Johnny Willemsen + + * ace/Log_Msg.cpp: + Added q as usable format specifier to print out a int64 value. Not + usable when no native int64 is available. + +Mon Dec 13 12:26:12 UTC 2004 Johnny Willemsen + + * ace/Basic_Types.h: + * ace/config-win32-common.h: + Added ACE_INT64 typedef. Note that there is no emulated ACE_INT64, + it is just defined for platforms having such a type natively. In the + future we could deliver an emulation, but with this typedef at least + people trying to work on multiple platforms with native int64 can use + this typedef to get portable code + +Mon Dec 13 04:34:18 2004 Balachandran Natarajan + + * Release: + Removed some old files from the release + + * bin/make_Release: + + Bootstrapped autoconf with TAO instead of just ACE. + +Mon Dec 13 04:25:24 2004 Balachandran Natarajan + + * Release: + + Added protocols directory. Thanks to JT for letting me know + this. + +Mon Dec 13 00:14:01 2004 Olli Savia + + * protocols/ace/HTBP/HTBP_Filter.cpp: + Removed unnecessary include. + + * tests/Reactor_Dispatch_Order_Test.cpp: + LynxOS 3.x needs the same special handling as OpenBSD to + pass this test. + +Sat Dec 11 17:38:12 UTC 2004 Johnny Willemsen + + * ace/Atomic_Op_T.h: + Fixed incorrect method declarations and not needed ACE_INLINE + +Sat Dec 11 17:26:09 2004 Balachandran Natarajan + + * bin/tao_other_tests.lst: + + Added a new test to the daily builds. + +Sat Dec 11 10:39:38 2004 Douglas C. Schmidt + + * ace/{Atomic_Op.h,Atomic_Op_T.h,Atomic_Op_T.inl,Atomic_Op_T.inl} + (operator=): Updated the ACE_Atomic_Op so that it allows + "chained assignments." Thanks to Michael Altmann for these fixes. + +Sat Dec 11 09:53:12 UTC 2004 Johnny Willemsen + + * ace/Task.cpp: + Minor borland fix + +Fri Dec 10 18:40:29 2004 Steve Huston + + * tests/Reactor_Exceptions_Test.cpp: Force the ACE_SOCK_Dgram to all + its work with IPv4. Allows this test to run clean on IPv6 systems + as well as IPv4. + +Fri Dec 10 23:06:24 UTC 2004 Don Hinton + + * Kokyu/tests/DSRT_MIF/MIF.cpp: + Changed barrier to bar because barrier() is a macro. + +Fri Dec 10 12:13:12 UTC 2004 Johnny Willemsen + + * ace/Logging_Strategy.cpp: + Changed the setting of the ostream on the log_msg. Only at the + moment the logging strategy has created a new ostream, then we + pass 1, to indicate that the log_msg must delete the ostream. + This fixes the crash of this test on all windows platforms. + +Fri Dec 10 11:15:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/gnu.mpd: + Removed usage of taoconfig.mk, we have zapped this in the idea + that it was not used. All the things this file set are already + handled by MPC + +Fri Dec 10 09:52:12 UTC 2004 Johnny Willemsen + + * ace/Strategies_T.{h,cpp,inl}: + Made ACE_DLL_Strategy usable in unicode builds. Thanks to + Thomas Girard + for reporting this. This fixed bugzilla [2005] + +Fri Dec 10 08:55:12 UTC 2004 Johnny Willemsen + + * ACE-INSTALL.html: + Added description about Interix (Windows Services for Unix). + Thanks to Steven Frare for adding + this. + +Thu Dec 9 14:04:12 2004 Steve Huston + + * ACE-INSTALL.html: Clarified that there is no leading '#' character + for the 'include' statement in platform_macros.GNU. Thanks to + Dave Dalapati for this suggestion. + + * THANKS: Added Dave Dalapati to the Hall of Fame. + +Tue Dec 7 18:24:06 2004 Jeff Parsons + + * bin/tao_other_tests.lst: + + Added all 5 tests in TAO/orbsvcs/tests/InterfaceRepo to the list. + All these tests are disabled for minimum CORBA builds. + +Tue Dec 7 18:48:39 2004 Steve Huston + + * bin/Makefile.am: Comment out the TESTS for now. The auto_run_tests.pl + depends on having the tests built in the same tree as the sources. + + * tests/Makefile.am: Change TESTS to a list of all the test programs + and TEST_ENVIRONMENT to an invocation of "run_test.pl -t" to enable + it to run each test separately. + +Tue Dec 7 18:38:19 2004 Steve Huston + + * m4/aio.m4: In the check for POSIX Realtime signals, do the + #include first, enclosed in extern "C", else HP-UX + gets a bad definition for an internal function call (___sysconf()). + +Tue Dec 7 17:48:21 2004 Steve Huston + + * examples/APG/ThreadManagement/Priorities.cpp: Fixed message block + handling logic errors. Can't just queue the same block to + multiple tasks, especially those in different threads. Now it + clones the block for each putq(), and queues a MB_BREAK block + when it's done so the service threads know to stop. Thanks to + Steven Patrick for reporting this problem. + + Fixes Bugzilla #2002 + (http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=2002) + +Tue Dec 7 13:10:08 2004 Douglas C. Schmidt + + * ace/Logging_Strategy.cpp (init): Make sure that the dynamically + allocated ostream is deleted on shutdown. Thanks to Zvika + Ashani for reporting this. + +Tue Dec 7 08:19:12 UTC 2004 Johnny Willemsen + + * bin/GNUmakefile.clone: + Removed this file because clone.cpp has been zapped + +Mon Dec 6 18:16:39 2004 Steve Huston + + * m4/config_h.m4: Added AH_TEMPLATE for ACE_HAS_POSIX_REALTIME_SIGNALS. + + * m4/aio.m4: Split the realtime-signals check out of the AIO + functionality check. If the basic AIO calls are available and + functional, then check if the signal-based AIO test works. If so, + set ACE_HAS_POSIX_REALTIME_SIGNALS. + + * tests/Makefile.am: Include the run_test.pl script in TESTS and + note it as a dist_check_SCRIPTS, not noinst_SCRIPTS. This lets + "make check" run it. + + * tests/run_test.pl: Add $top_srcdir to the path for locating + Perl auxiliary modules. For automake builds, this is needed since + the script isn't linked into the build tree. + +Mon Dec 6 16:34:29 2004 Steve Huston + + * ACE-INSTALL.html: Removed mention and instructions for the 'clone' + program. Favor use of bin/create_ace_build.pl since it is more + reliable, simpler, doesn't rely on Makefile content that's not + there, and doesn't need to be built first. + + * bin/clone.1: + * bin/clone.cpp: Removed; this program has been superseded by the + bin/create_ace_build.pl script. See ACE-INSTALL.html for details. + + Thanks to Neil Cohen for bringing this up. + +Mon Dec 6 10:46:02 2004 Chad Elliott + + * examples/APG/Threads/Guards.cpp: + + Put #if guards around the body to avoid build problems when + threads are disabled. + +Mon Dec 6 06:53:43 2004 Chad Elliott + + * apps/soreduce/SO_Group.cpp: + + Increase the number of libraries that soreduce can handle. + +Mon Dec 06 11:34:12 UTC 2004 Johnny Willemsen + + * ace/config-win32-mingw.h: + Added ACE_LACKS_SIGSET_DEFINITIONS + +Mon Dec 06 10:49:12 UTC 2004 Johnny Willemsen + + * ace/config-win32-mingw.h: + Undef ACE_LACKS_SIGSET, MinGW has sigset but this define is set + from config-win32-common.h + +Mon Dec 06 10:06:12 UTC 2004 Johnny Willemsen + + * ace/config-win32-interix.h: + Fixed fuzz errors + +Mon Dec 06 09:29:12 UTC 2004 Johnny Willemsen + + * ace/os_include/os_signal.h: + Added patch for Interix and removed not needed MinGW check + + * ace/Sock_Connect.cpp: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/SOCK_Dgram_Mcast.cpp: + Applied patches for the Interix port. Thanks to + Steven Frare for the patches. + +Mon Dec 06 09:06:12 UTC 2004 Johnny Willemsen + + * ace/config-win32-interix.h: + * include/makeinclude/platform_win32_interix.GNU: + New files for Interix (Microsoft Services for Unix). Thanks to + Steven Frare for these new files + +Sun Dec 05 16:44:00 2004 Balachandran Natarajan + + * ace/Select_Reactor_T.cpp (dispatch_notification_handlers): + + Decrement the number_of_active_handles after a successful + dispatch. This seems to cause Reactor_Notify_Test to fail on + Win32. The reason why this does not show up in *nix is left as + an exercise to the reader! Thanks to Steve Huston for alerting + us about this issue. + +Sat Dec 4 20:39:20 2004 Douglas C. Schmidt + + * THANKS: Added the 1,900th contributor to the THANKS file!! + +Sun Dec 5 14:49:57 2004 Balachandran Natarajan + + * tests/TP_Reactor_Test.cpp: + + The test creates some listeners in the one button test, if that + exceeds SOMAXCONN the test fails. We now reset the number of + senders in the test to SOMAXCONN if they exceed + SOMAXCONN. Thanks to Frare Steven for + the patch. + +Fri Dec 3 07:37:38 2004 J.T. Conklin + + * MakeProjectCreator/config/dsnotifylogadmin_serv.mpb: + + Changed to inherit from notification_serv. + +Fri Dec 3 12:54:12 UTC 2004 Martin Corino + + * ace/config-vxworks5.x.h: + Added _GLIBCPP_USE_LONG_LONG for GCC 3.3+ since it is not defined + by the compiler itself. This solves problems with long long support + in standard C++ includes. + +Fri Dec 3 11:50:12 UTC 2004 Johnny Willemsen + + * ace/Timeprobe_T.cpp: + Fixed casing in include + +Thu Dec 2 13:38:33 2004 Chad Elliott + + * apps/soreduce/Library.h: + * apps/soreduce/Library.cpp: + * apps/soreduce/README: + + Modified soreduce to output mpc files instead of makefiles. + +Thu Dec 2 11:09:07 2004 J.T. Conklin + + * apps/gperf/tests/Makefile.am: + + Revert my previous change. Fixed orignal problem by putting the + stamp file in the same directory as the output file. Thanks to + Chad Elliott for letting me know that the gperf options for the + two invocations of gperf on idl.gperf were different. + +Thu Dec 2 16:42:12 UTC 2004 Martin Corino + + * include/makeinclude/platform_vxworks5.5.x.GNU: + Added explicit 'signed-char' flags for ppc and arm builds. + +Thu Dec 2 11:08:29 2004 Steve Huston + + * examples/APG/Threads/Guards.cpp: Fixed "unused parameter" warning. + +Thu Dec 2 15:06:12 UTC 2004 Martin Corino + + * ace/Timeprobe_T.cpp: + Fixed another compile problem (missing include for ACE_OS::memcpy). + +Thu Dec 2 14:26:12 UTC 2004 Martin Corino + + * ace/Timeprobe_T.cpp: + Fixed error in ACE_Timeprobe_Ex<>::print_absolute_times() where ACE_hrtime_t + was incorrectly assumed to be a structure/class (it's an integer type). + +Thu Dec 2 09:45:12 UTC 2004 Johnny Willemsen + + * bin/PerlACE/ConfigList.pm: + Remove trailing white spaces from entry after the split. Interix + perl had problems with this. Thanks to Steven Frare + for reporting this and J.T. Conklin for + simplifying the patch. + +Thu Dec 2 09:11:12 UTC 2004 Martin Corino + + * include/makeinclude/platform_vxworks5.5.x.GNU: + Recommitting because file seemed screwed up when checking out on + Windows. + +Thu Dec 2 08:32:12 UTC 2004 Martin Corino + + * include/makeinclude/platform_vxworks5.5.x.GNU: + Changed template handling to allow implicit template instantiation + with VxWorks GNU toolchain. + +Wed Dec 1 15:01:39 2004 Steve Huston + + * examples/APG/Threads/Guards.cpp: + * examples/APG/Threads/Message_Blocks.cpp: Enabled the code here that + was previously blocked out. Fixed narrow/wide-char spec for a + string to ACE_Log_Msg. Thanks to Johnny Willemsen for pointing + out that none of this code was actually getting compiled. + +Wed Dec 1 08:49:12 UTC 2004 Martin Corino + + * include/makeinclude/platform_vxworks5.5.x.GNU: + Fixed linking issues concerning ACE/TAO libraries. + +Tue Nov 30 16:38:08 2004 J.T. Conklin + + * apps/gperf/tests/Makefile.am: + + Changed to only generate idl.cpp from idl.gperf once. The + attempt to generate it twice, the a second time in a different + directory failed because the "stamp" file was the same. + +Tue Nov 30 17:32:29 2004 Steve Huston + + * m4/ace.m4: Added two new options, --enable-pthreads and + --enable-uithreads. These en/dis-able the use of Pthreads and + UI Threads (aka Solaris threads), respectively. Some platforms + (namely AIX) offer a hokey UI Threads that barely functions but + can't be used for any real work. Efforts to detect this and + automatically disable it have been unfruitful, so this option was + added. Pthreads defaults to yes, UI threads defaults to, except on + Solaris where it defaults to yes. + + * m4/threads.m4: Only do Pthreads/UIthreads checks if the corresponding + implementation is enabled by the command line (or default) using + the above new options. + +Tue Nov 30 07:32:18 2004 Chad Elliott + + * apps/gperf/tests/iout2_gen/.empty: + * bin/MakeProjectCreator/templates/gnu.mpd: + + Reverted my previous change as it caused more problems than it + solved. Instead, after much research I've found that VPATH + doesn't work when source files are generated into a directory + other than '.', so I made a directory (iout2_gen) to hold the + generated source (idl.cpp) from the iinset2 gperf test. + +Tue Nov 30 09:51:12 UTC 2004 Martin Corino + + * ace/ACE.inl: + Implemented temporary fix for problems with VxWorks GNU toolchains. + +Mon Nov 29 17:56:39 2004 Steve Huston + + * tests/Test_Output.cpp: Re this change: + Fri Nov 19 18:19:19 2004 Steve Huston + the reinterpret_cast<> breaks some stuff on LynxOS. So only do + reinterpret_cast on ACE_LACKS_IOSTREAM_TOTALLY, else use + dynamic_cast. This should fix LynXOS. Thanks to + Olli Savia for bringing this to my attention. + +Mon Nov 29 14:10:12 2004 Chad Elliott + + * ace/ace.mpc: + + Added a verbatim clause with MPC-ized versions of the original + Svc_Conf_y.cpp and Svc_Conf_l.cpp targets from Makefile.ace. + +Mon Nov 29 13:12:14 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Modified the OBJS setting to allow cpp files that are generated + into a subdirectory below where the mpc file exists. gperf tests + happen to do this now. + +Mon Nov 29 16:07:12 UTC 2004 Martin Corino + + * examples/Web_Crawler/Iterators.cpp: + Minor change to get rid of warning in GCC 2.96 build. + +Mon Nov 29 16:03:12 UTC 2004 Martin Corino + + * ACEXML/common/HttpCharStream.cpp: + Minor change to get rid of warning in GCC 2.96 build. + +Mon Nov 29 15:43:12 UTC 2004 Martin Corino + + * performance-tests/SCTP/Options_Manager.h: + * performance-tests/SCTP/Options_Manager.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_srv.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_clt.cpp: + * performance-tests/SCTP/SOCK_STREAM_srv.cpp: + * performance-tests/SCTP/SOCK_STREAM_clt.cpp: + Fixed problems with use of iostreams for + ACE_LACKS_IOSTREAM_TOTALLY builds (VxWorks DIAB). + +Mon Nov 29 07:04:58 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Moved the setting of SOVERSION below the include for + wrapper_macros.GNU and enclose it in a if check for versioned_so + to be 1. This allows users to build without versioned shared + libraries. + + Also, fixed a problem with the realclean target. The executable + extension was not added when the installed target was added to the + CLEANUP_INSTALL macro. + + Thanks to Johnny Willemsen for reporting both of these problems. + +Sun Nov 28 22:10:48 2004 J.T. Conklin + + * bin/am_edit: + + Removed old file. MPC-generated Makefile.am's make this script + obsolete. + +Mon Nov 29 07:36:03 2004 Olli Savia + + * apps/JAWS/server/HTTP_Helpers.cpp: + Added "const" qualifiers to silence compile time warnings. + +Sun Nov 28 17:53:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/notify_serv.mpb: + Added etcl and dynamicany as base projects to fix link errors in the + BCB6 Static build + +Sun Nov 28 16:16:12 UTC 2004 Martin Corino + + * ace/config-vxworks5.x.h: + Added ACE_HAS_USING_KEYWORD for DIAB compiler. + +Sun Nov 28 12:26:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/gnu.mpd: + * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_servant.mpb: + Made it possible to overrule the commands for the cidlc compiler, just as + with TAO_IDL. Needed for cross builds like VxWorks + +Sat Nov 27 14:51:12 UTC 2004 Martin Corino + + * bin/MakeProjectCreator/templates/gnu.mpd: + Changed use of 'mkdir -p' to '$(MKDIR)' command for more compatibility. + +Fri Nov 26 19:38:58 2004 J.T. Conklin + + * configure.ac: + * Makefile.am: + + Use AC_SUBST instead of AM_CONDITIONAL for directories that may + be omitted in a distribution. + +Fri Nov 26 17:54:32 2004 J.T. Conklin + + * bin/tao_other_tests.lst: + + Added orbsvcs/test/Log/Basic_Log_Test test to the list. + +Fri Nov 26 18:24:39 2004 Steve Huston + + * ace/OS_NS_Thread.inl (thr_getprio): WinCE doesn't support + GetPriorityClass, so this method will do ENOTSUP on WinCE. + + Also fixed the Friday ChangeLog entries that said it was Nov 25. + +Fri Nov 26 17:46:29 2004 Steve Huston + + * examples/System_V_IPC/SV_Message_Queues/TMQ_Client.cpp: Corrected + wide-char issues. + + * examples/Threads/task_three.cpp: ACE_OSTREAM_TYPE is not always a + class that offers close(). So just delete the object when it's + not needed any longer. Also, remove the reference from ACE_Log_Msg. + +Fri Nov 26 19:12:12 UTC 2004 Martin Corino + + * examples/Threads/task_three.cpp: + Fixed another compile problem. + +Fri Nov 26 16:16:12 UTC 2004 Martin Corino + + * examples/System_V_IPC/SV_Message_Queues/TMQ_Client.cpp: + Fixed compile problems. + +Fri Nov 26 12:00:12 UTC 2004 Martin Corino + + * ace/config-vxworks5.x.h: + Added ACE_HAS_STANDARD_CPP_LIBRARY for DIAB builds. + +Fri Nov 26 11:04:12 UTC 2004 Martin Corino + + * examples/Threads/task_three.cpp: + * examples/System_V_IPC/SV_Message_Queues/TMQ_Client.cpp: + * examples/Logger/Acceptor-server/server_loggerd.cpp: + * examples/Log_Msg/test_log_msg.cpp: + Fixed problems with iostreams for ACE_LACKS_IOSTREAM_TOTALLY builds + (VxWorks DIAB). + +Fri Nov 26 10:26:12 UTC 2004 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Don't run bug_1535_regression when minimum_corba is enabled. + +Fri Nov 26 10:17:12 UTC 2004 Johnny Willemsen + + * ACE-INSTALL.html: + Removed some old info about os-patches, these are gone already for + some time, also corrected the location of the main define, it is now + in OS_main.h. As last, changed the references to several files from + the site of Doug to the local directory. This because of two reasons, + first there are development teams without internet access (yes, they + still exist in the world), and the site of Doug always gives the + latest version, but when using a certain ACE version I want to have + the documentation of MPC belonging to that version, not with the + current version, which can be something completely different in + a few years. + +Fri Nov 26 08:57:12 UTC 2004 Johnny Willemsen + + * ACE-INSTALL.html: + Minor updates about Borland and VxWorks versions that are supported + +Thu Nov 25 15:45:38 2004 J.T. Conklin + + * bin/tao_other_tests.lst: + + Added orbsvcs/test/Bug_XXXX_Regression tests to the list. + +Thu Nov 25 18:24:12 UTC 2004 Johnny Willemsen + + * websvcs/tests/Test_URL_Addr.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_Association_Test.cpp: + Use ACE_TMAIN instead of main to fix link errors in the unicode + builds. + +Thu Nov 25 09:25:29 2004 J.T. Conklin + + * bin/tao_other_tests.lst: + + Added FaultTolerance tests to list. + +Thu Nov 25 14:38:12 UTC 2004 Johnny Willemsen + + * examples/APG/Threads/Guards.cpp: + * examples/APG/Threads/Message_Blocks.cpp: + Use ACE_TMAIN instead of main to fix link errors in the unicode + builds. + +Wed Nov 24 17:23:22 2004 Irfan Pyarali + + * ace\Timer_Wheel_T.cpp (expire): + + ACE_Timer_Wheel_T<>::expire() made the upcall before + rescheduling a recurring timer. The problem with this is that + if the upcall code tries to cancel the recurring timer, the + cancel will fail since the timer has not been rescheduled. The + fix is to move the rescheduling code before the upcall code. + Thanks to Domingos Monteiro for reporting + and providing a fix for this bug. + +Wed Nov 24 16:02:21 2004 Steve Huston + + * ace/Asynch_Connector.{h cpp}: Removed the locally-defined + "static ACE_INET_Addr local_default" used for the default + local address on connects. In the lower levels of ACE, the local + address is compared to ACE_Addr::sap_any, and this one didn't + match with IPv6 defined. The default arg is now ACE_Addr::sap_any, + like the other default local addresses, such as ACE_Connector. + + * ace/WIN32_Asynch_IO.cpp: If a ACE_OS::bind() fails, print a message + with the real reason in it, not just "ACE_OS::bind failed". + + * tests/Proactor_Test.cpp: Added a check to see that the test + actually does some data transfer, else it isn't really doing + anything. + +Wed Nov 24 14:40:29 2004 Steve Huston + + * tests/NonBlocking_Conn_Test.cpp (test): Don't leave bogus + ACE_INET_Addr entries in addresses[] if a name lookup fails. + Doing so causes screwups later when each entry is assumed to + have a legit address to form into a string. + +Wed Nov 24 13:32:32 2004 Chad Elliott + + * bin/msvc_static_order.lst: + + Added the remaining CosNotification libraries, Security library + and the ImplRepo_Service projects to ensure that things are built + in the correct order. + +Wed Nov 24 12:24:57 2004 Chad Elliott + + * bin/MakeProjectCreator/config/notification_serv.mpb: + + Added the svc_utils base project. The CosNotification_Serv + library needs it and this should fix static link errors for + Notify_Service. + +Wed Nov 24 09:44:43 2004 Chad Elliott + + * include/makeinclude/platform_hpux_aCC.GNU: + + After conversation with Johnny, I am reverting my previous change. + +Wed Nov 24 09:05:45 2004 Chad Elliott + + * include/makeinclude/platform_hpux_aCC.GNU: + + Suppress warning 1039 about binary incompatibility with 3.33 to + 3.50. + +Wed Nov 24 08:18:51 2004 Chad Elliott + + * apps/gperf/tests/Makefile.am: + * apps/gperf/tests/tests.mpc: + + Generate the gperf generated code into an alternate directory for + the iinset2 project. Since iinset and iinset2 share the same + input file, the correct gperf commandflags weren't being used for + the second project to be processed. + + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + + When gendir is used, attempt to automatically make the specified + directory. + +Wed Nov 24 12:00:12 UTC 2004 Johnny Willemsen + + * performance-tests/SCTP/hist.cpp: + * performance-tests/SCTP/Options_Manager.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_clt.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_srv.cpp: + * performance-tests/SCTP/SOCK_STREAM_clt.cpp: + * performance-tests/SCTP/SOCK_STREAM_srv.cpp: + Replaced NULL with 0 + +Tue Nov 23 20:41:57 2004 Balachandran Natarajan + + * ace/OS_NS_Thread.inl: + + Reverted this change "Tue Nov 23 20:26:51 2004 Balachandran + Natarajan " since this has no scope of + working. I guess the policy stuff itself is a bad thing for + Win32. Let me find out from the original contributor. + +Tue Nov 23 20:26:51 2004 Balachandran Natarajan + + * ace/OS_NS_Thread.inl: + + The previous checkin used ::GetCurrentProcess () to access the + policy which is not right, but the "id" passed in should be + used to maintain the semantics of thr_getprio (). + +Tue Nov 23 14:06:41 2004 Dale Wilson + + * ace/OS_NS_Thread.inl: + Three problems in ACE_OS::thr_getprio on Windows: + 1) GetThreadPriority doesn't fail so the check for errors is + unnecessary. + 2) On the other hand GetPriorityClass may fail. + The check for errors from GetPriortyClass was incorrect. + 3) GetPriorityClass takes a process handle not a thread handle + so it was always failing. + + +Tue Nov 23 10:35:41 2004 Chad Elliott + + * ASNMP/asnmp/address.cpp: + + VxWorks doesn't have h_errno. + +Tue Nov 23 15:33:12 UTC 2004 Martin Corino + + * ace/Auto_Ptr.h: + Added missing auto_ptr(auto_ptr &) constructor. + +Tue Nov 23 15:20:12 UTC 2004 Martin Corino + + * ace/config-vxworks5.x.h: + Fixed auto_ptr config for GNU-G builds. + +Tue Nov 23 07:56:11 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm: + + Added support for dynamically determining the includedir. + +Tue Nov 23 07:39:23 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Modified to support the MPC 'version' keyword. If version is set, + then we will set the SOVERSION macro. + +Tue Nov 23 07:30:12 UTC 2004 Johnny Willemsen + + * ace/DLL.cpp: + Fixed compile problems in unicode builds + +Tue Nov 23 00:37:14 2004 Olli Savia + + * examples/APG/ThreadPools/Futures.cpp: + Removed unnecesary type cast in CompletionCallBack::update(). + Replaced NULL with 0 in Manager::shut_down(). + + * examples/Export/dll.cpp: + Added explicit static template member instantiation. + +Mon Nov 22 13:45:05 2004 Chad Elliott + + * bin/GNUmakefile.clone: + + Renamed GNUmakefile to GNUmakefile.clone to avoid being + overwritten when bin.mpc is processed. + + * ACE-INSTALL.html: + + Changed documentation on building clone.cpp to take the above into + account. + +Mon Nov 22 19:33:12 UTC 2004 Johnny Willemsen + + * ACE-INSTALL.html: + When building with gcc for cygwin the binutils package + must also be installed. + +Mon Nov 22 12:08:27 2004 Ciju John + + * bin/MakeProjectCreator/config/notify.mpb: + Fixed fuzz.pl caught inconsistencies. + +Mon Nov 22 11:58:25 2004 Chad Elliott + + * bin/fuzz.pl: + + Account for multiple whitespace when checking for non-bool return + values on equality/in-equality operators. + +Mon Nov 22 07:44:23 2004 Venkita Subramonian + + * Kokyu/Kokyu_dsrt.{cpp,h}: + + Changed the return type of + DSRT_Dispatcher_Factory::create_dispatcher method from + auto_ptr to DSRT_Dispatcher*. This was causing + build errors with VxWorks5.5.1_PPC85XX_GCC3.3. Thanks to Johnny + Willemsen (jwillemsen@remedy.nl) for pointing this out. + + * Kokyu/Kokyu.h: + + Changed some documentation. + +Sun Nov 21 10:34:42 2004 Douglas C. Schmidt + + * ace/Message_Queue_T.h: Changed the access control specifier + of ACE_Message_Queue_Ex::queue_ from private to protected to + enabled subclasses to access it. Thanks to Nuno Silva + for this suggestion. This change fixes + bugid 1984. + +Sat Nov 20 18:12:55 UTC 2004 Balachandran Natarajan + + * ace/OS_NS_Thread.inl: + + Fixes for thr_getprio () on Win32. Thanks to Abhi for motivating this fix. + +Sat Nov 20 07:40:48 2004 Carlos O'Ryan + + * ace/DLL.cpp: + Doug needs to write 500 times on the board "I will not commit + before compiling." Missing a value in a return statement from a + function returning int. + +Fri Nov 19 14:42:00 2004 Krishnakumar B + + * ACEXML/common/NamespaceSupport.cpp: + * ACEXML/parser/parser/Parser.cpp: + + Fixes to namespace support in ACEXML. Thanks to Weida Ma + for the patches. + + * ACEXML/examples/SAXPrint/broken.xml: + + broken.xml should be broken. Added some errors to make this + file invalid. + + * ACEXML/examples/SAXPrint/main.cpp: + + Repeat the parsing twice to make sure that we catch any leaks or + memory corruption due to code paths that are not always + exercised. + +Fri Nov 19 18:19:19 2004 Steve Huston + + * ace/os_include/os_errno.h: Add EPERM for Win32 that doesn't have + it. For example, WinCE. + + * tests/Test_Output.cpp (ACE_Test_Output::output_file()): Use + reinterpret_cast, not dynamic_cast, to convert the OFSTREAM + pointer. dynamic_cast isn't valid where OFSTREAM is a void*, + like on WinCE. + + * tests/HTBP/Reactor_Tests/server.cpp: + * tests/HTBP/ping/server.cpp: Use ACE_TMAIN, not main() to pick up + proper signature on WinCE. Also corrected narrow/wide-char issues. + +Fri Nov 19 16:03:31 2004 Douglas C. Schmidt + + * ace/DLL.cpp: Cleaned up the code a bit since it was messy + and improved the documentation to clarify the role of + "close_handle_on_destruction". Also fixed a bug in + ACE_DLL::close() since it wasn't guarding against multiple + calls, i.e., one explicit and one implicit via the + destructor. Thanks to Russell Mora + for motivating these fixes. + +Mon Oct 18 13:02:11 2004 Dale Wilson + + * bin/MakeProjectCreator/config/notify.mpb: + missing file from merge. + +Wed Oct 13 15:44:58 2004 Dale Wilson + + * bin/MakeProjectCreator/config/notify_serv.mpb: + missing file from merge. + +Fri Nov 19 13:13:00 2004 Gary Maxey + + * ace/README + + Documented new ACE Portability Macros + +Fri Nov 19 10:17:00 2004 Gary Maxey + + * ace/ACE.inl: + + Use ::recv() instead of ::read() on Tandem NSK platform + because it is faster. + + * ace/OS_NS_sys_socket.inl + + In ACE_OS::sendv, when ACE_HAS_SOCK_BUF_SIZE_MAX, avoid writing + more than system allows. + + * ace/config-tandem-nsk-mips-v2.h + * ace/config-tandem-nsk-mips-v3.h + + Updated ACE_HAS_SOCK_BUF_SIZE_MAX define + +Fri Nov 19 09:55:35 2004 Venkita Subramonian + + * Kokyu/Kokyu.{h,cpp}: + + Changed the return type of Dispatcher_Factory::create_dispatcher + method from auto_ptr to Dispatcher*. This was + causing build errors in some beta compilers and warnings in + MSVC6, Tru64 and OpenVMS compilers. It looks like these + compilers are broken in terms of auto_ptr implementation, + specifically returning auto_ptr types from + functions/methods. Thanks to Johnny Willemsen + (jwillemsen@remedy.nl) for pointing this out. + + +Fri Nov 19 07:33:33 2004 Chad Elliott + + * examples/APG/Logging/Trace.h: + * examples/APG/Logging/Trace_Return.cpp: + * examples/APG/Logging/Wrap_Macros.cpp: + + Fixed more VxWorks related build errors. Apparently, the g++ 2.96 + that comes with VxWorks can't handle ... in a macro parameter list + (however g++ 2.96 on linux can). + +Fri Nov 19 06:55:32 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/bor.mpd: + + If there is no exe or lib target, don't include one of the *.bor + from include/makeinclude and create a dummy 'all' target. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Added $(EXEEXT) to the end of the TAO_IDL_DEP assignment to + support windows builds. + +Fri Nov 19 09:48:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Only generate CPPDIR and CDIR when cppdir is defined, this fixes + build problems when a project is tried to build without source + code + +Fri Nov 19 09:35:12 UTC 2004 Johnny Willemsen + + * ace/config-win32-common.h: + Added define ACE_LACKS_PWD_FUNCTIONS, Win32 doesn't have this also, + and by setting this define we don't need to explicitly check for + win32 anymore when we use this macro. + + * ace/OS_NS_pwd.inl: + Simplified some checks, just check for ACE_LACKS_PWD_FUNCTIONS + and not also for ACE_WIN32 + + * examples/APG/Processes/Spawn.cpp: + Just check for ACE_LACKS_PWD_FUNCTIONS + +Thu Nov 17 15:55:00 2004 Gary Maxey + + * bin/PerlACE/Process_Unix.pm + + Add logic for "nonstop_kernel" platform quirks + + * bin/PerlACE/Run_Test.pm + + Define "wait_interval_for_process_creation" variable + to allow for per-platform customization. + +Thu Nov 18 19:22:12 UTC 2004 Johnny Willemsen + + * examples/APG/Processes/Spawn.cpp: + Don't call setUserId when ACE_WIN32 and ACE_LACKS_PWD_FUNCTIONS are + not set, then this method is just not there. + +Thu Nov 18 11:52:19 2004 Chad Elliott + + * bin/MakeProjectCreator/config/ciao_servant.mpb: + * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb: + * bin/MakeProjectCreator/config/psdl.mpb: + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + + Changed these base projects to use 'dependent' in the new manner + where it represents the command upon which the generated files are + dependent. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Changed to use TAO_IDL_DEP as the dependency for the idl generated + files. + + * bin/MakeProjectCreator/config/trading_serv.mpb: + * bin/MakeProjectCreator/config/trading_skel.mpb: + + Renamed these mpc files to mpb files. The mpc extension works, + it's just a matter of consistency. + +Thu Nov 18 16:31:12 UTC 2004 Johnny Willemsen + + * protocols/protocols.mwc: + Added missing Id tag + +Thu Nov 18 09:35:01 2004 Chad Elliott + + * examples/APG/Processes/Spawn.cpp: + * examples/APG/ThreadManagement/Priorities.cpp: + + Fixed build problems with VxWorks specific code. + +Thu Nov 18 14:42:12 UTC 2004 Martin Corino + + * ace/OS_NS_Thread.inl: + Fixed unused arg warning. + +Thu Nov 18 14:38:12 UTC 2004 Martin Corino + + * ace/Semaphore.cpp: + Change to improve support for platforms missing shmopen(). + +Thu Nov 18 14:35:12 UTC 2004 Martin Corino + + * ace/config-cygwin32.h: + Changed some defines to improve Cygwin build. + +Thu Nov 18 07:38:34 2004 Chad Elliott + + * ace/Service_Config.cpp: + + Distinguish between the existence of and the file permissions + for the default service configurator file (svc.conf). Thanks to + Dipa Suri and Adam Howell + for reporting this. + +Thu Nov 18 07:10:26 2004 Chad Elliott + + * examples/Logger/Acceptor-server/Logger_Acceptor_Server.mpc: + * examples/Logger/client/Logger_client.mpc: + * examples/Logger/simple-server/Logger_Simple_Server.mpc: + + Added exename settings to these. They use ACE_MAIN, but that's no + longer recognized by MPC as an exe entry point. + + * performance-tests/Synch-Benchmarks/Base_Test/Synch_Benchmarks_Base_Test.mpc: + * performance-tests/Synch-Benchmarks/Perf_Test/Synch_Benchmarks_Perf_Test.mpc: + + Changed these library projects to inherit from acelib instead of + aceexe. + + * protocols/protocols.mwc: + + Added a default workspace so that msvc_mpc_auto_compile.pl can + find the HTBP (and future libraries). + +Thu Nov 18 06:48:28 2004 Chad Elliott + + * bin/envinfo.cpp: + + Added #include "ace/OS_NS_sys_utsname.h" to get ACE_utsname. + +Thu Nov 18 12:36:12 UTC 2004 Johnny Willemsen + + * examples/Threads/task_three.cpp: + Changed ACE cast macros with the c++ versions + +Wed Nov 17 18:37:12 UTC 2004 Martin Corino + + * tests/test_config.h: + Added include of OS_NS_fcntl.h needed for VxWorks build. + +Wed Nov 17 08:53:11 2004 J.T. Conklin + + * ace/Makefile.am: + + Updated. + + * ace/ace.mpc: + + Added Memory_Pool.h to Header_Files. + + * Makefile.am: + * configure.ac: + + Changed to configure/build ACEXML only if --with-acexml (the + default) was specified. + +Tue Nov 16 07:09:12 UTC 2004 Johnny Willemsen + + * ace/RB_Tree.cpp: + In ACE_RB_Tree_Iterator_Base constructor initialise entry local + variable with 0, so that when find_i doesn't find anything we don't + set the node_ to an unitialised value. Thanks to Andreas Koehler + for reporting this. + +Sun Nov 14 10:12:00 2004 J.T. Conklin + + * ACEXML/apps/svcconf/Makefile.am: + * ACEXML/common/Makefile.am: + * ACEXML/parser/parser/Makefile.am: + * Kokyu/Makefile.am: + * ace/Makefile.am: + * ace/QoS/Makefile.am: + * ace/RMCast/Makefile.am: + * ace/SSL/Makefile.am: + * ace/TMCast/Makefile.am: + * protocols/ace/HTBP/Makefile.am: + + Restored LDFLAGS definition. + +Sun Nov 14 05:03:47 2004 Balachandran Natarajan + + * bin/tao_orb_tests.lst: + + Added a new test for the daily regression. + +Sat Nov 13 14:34:33 2004 J.T. Conklin + + * configure.ac: + + Split Kokyu directories out of monolithic AC_CONFIG_FILES list, + into a separate, smaller, AC_CONFIG_FILES that is used only if + the Kokyu subdirectory exists. This pattern can be used for + other subdirectories (ACEXML, ASNMP, etc.) to provide flexibilty + for packaging and compile-time configuration. + +Sat Nov 13 10:40:13 2004 J.T. Conklin + + * configure.ac: + + Removed line with m4_include([configure.ac.Makefiles]), + autoreconf barfs with it present, even though it was + "commented out" with dnl... + + * apps/gperf/tests/Makefile.am: + + Tweak to work around MPC brokenness. + +Fri Nov 12 20:54:14 2004 J.T. Conklin + + * Makefile.am: + + Restore conditionalized SUBDIR definition for Kokyu and TAO. + Restore bin_SCRIPT and man_MANS definitions so the ace-config + script and manpage is installed. + + * ACEXML/apps/svcconf/Makefile.am: + * ACEXML/common/Makefile.am: + * ACEXML/parser/parser/Makefile.am: + * ace/Makefile.am: + * ace/QoS/Makefile.am: + * ace/RMCast/Makefile.am: + * ace/SSL/Makefile.am: + * ace/TMCast/Makefile.am: + * protocols/ace/HTBP/Makefile.am: + + Restore includedir definitions so headers are installed in the + correct place. + +Fri Nov 12 16:35:00 2004 Gary Maxey + + * ace/config-tandem-nsk-mips-v2.h + + Updated for compatibility with latest repository changes + + * ace/config-tandem-nsk-mips-v3.h + + Added for new compiler version + +Fri Nov 12 18:30:19 2004 Steve Huston + + * tests/Makefile.am: Moved HTBP down under '.' to make sure + libTest_Output is built first. + +Fri Nov 12 17:23:41 2004 Steve Huston + + * bin/bin.mpc: + * bin/PerlACE/perlace.mpc: These are meant to propagate the + testing scripts over to the build area for automake builds. + + * bin/auto_run_tests.pl: When no test-set options are supplied, add + in the TAO test lists only if there is an $ACE_ROOT/TAO directory. + Facilitates being able to use this script without options from + the automake-generated "make check" command. + + * configure.ac: Updated with the list of Makefiles below. + + * ACEXML/apps/svcconf/Makefile.am: + * ACEXML/apps/Makefile.am: + * ACEXML/common/Makefile.am: + * ACEXML/examples/SAXPrint/Makefile.am: + * ACEXML/examples/Makefile.am: + * ACEXML/parser/parser/Makefile.am: + * ACEXML/parser/Makefile.am: + * ACEXML/tests/Makefile.am: + * ACEXML/Makefile.am: + * ASNMP/agent/Makefile.am: + * ASNMP/asnmp/Makefile.am: + * ASNMP/examples/get/Makefile.am: + * ASNMP/examples/next/Makefile.am: + * ASNMP/examples/set/Makefile.am: + * ASNMP/examples/trap/Makefile.am: + * ASNMP/examples/walk/Makefile.am: + * ASNMP/examples/Makefile.am: + * ASNMP/tests/Makefile.am: + * ASNMP/Makefile.am: + * ace/Makefile.am: + * ace/QoS/Makefile.am: + * ace/RMCast/Makefile.am: + * ace/SSL/Makefile.am: + * ace/TMCast/Makefile.am: + * apps/JAWS/Makefile.am: + * apps/JAWS/clients/Blobby/Makefile.am: + * apps/JAWS/clients/Makefile.am: + * apps/JAWS/clients/Caching/Makefile.am: + * apps/JAWS/server/Makefile.am: + * apps/Makefile.am: + * apps/Gateway/Gateway/Makefile.am: + * apps/Gateway/Makefile.am: + * apps/Gateway/Peer/Makefile.am: + * apps/JAWS3/jaws3/Makefile.am: + * apps/JAWS3/Makefile.am: + * apps/drwho/Makefile.am: + * apps/gperf/src/Makefile.am: + * apps/gperf/Makefile.am: + * apps/gperf/tests/Makefile.am: + * apps/mkcsregdb/Makefile.am: + * apps/soreduce/Makefile.am: + * bin/Makefile.am: + * bin/PerlACE/Makefile.am: + * examples/APG/Active_Objects/Makefile.am: + * examples/APG/Config/Makefile.am: + * examples/APG/Containers/Makefile.am: + * examples/APG/Logging/Makefile.am: + * examples/APG/Misc_IPC/Makefile.am: + * examples/APG/Naming/Makefile.am: + * examples/APG/Proactor/Makefile.am: + * examples/APG/Processes/Makefile.am: + * examples/APG/Reactor/Makefile.am: + * examples/APG/Shared_Memory/Makefile.am: + * examples/APG/Signals/Makefile.am: + * examples/APG/Sockets/Makefile.am: + * examples/APG/Streams/Makefile.am: + * examples/APG/Svc_Config/Makefile.am: + * examples/APG/ThreadManagement/Makefile.am: + * examples/APG/ThreadPools/Makefile.am: + * examples/APG/ThreadSafety/Makefile.am: + * examples/APG/Threads/Makefile.am: + * examples/APG/Timers/Makefile.am: + * examples/APG/Makefile.am: + * examples/ASX/CCM_App/Makefile.am: + * examples/ASX/Makefile.am: + * examples/ASX/Message_Queue/Makefile.am: + * examples/Bounded_Packet_Relay/Makefile.am: + * examples/C++NPv1/Makefile.am: + * examples/C++NPv2/Makefile.am: + * examples/Makefile.am: + * examples/Connection/blocking/Makefile.am: + * examples/Connection/Makefile.am: + * examples/Connection/misc/Makefile.am: + * examples/Connection/non_blocking/Makefile.am: + * examples/DLL/Makefile.am: + * examples/Export/Makefile.am: + * examples/IOStream/client/Makefile.am: + * examples/IOStream/Makefile.am: + * examples/IOStream/server/Makefile.am: + * examples/IPC_SAP/ATM_SAP/Makefile.am: + * examples/IPC_SAP/Makefile.am: + * examples/IPC_SAP/DEV_SAP/reader/Makefile.am: + * examples/IPC_SAP/DEV_SAP/Makefile.am: + * examples/IPC_SAP/DEV_SAP/writer/Makefile.am: + * examples/IPC_SAP/FIFO_SAP/Makefile.am: + * examples/IPC_SAP/FILE_SAP/Makefile.am: + * examples/IPC_SAP/SOCK_SAP/Makefile.am: + * examples/IPC_SAP/SPIPE_SAP/Makefile.am: + * examples/IPC_SAP/SSL_SAP/Makefile.am: + * examples/IPC_SAP/TLI_SAP/Makefile.am: + * examples/IPC_SAP/UPIPE_SAP/Makefile.am: + * examples/Log_Msg/Makefile.am: + * examples/Logger/Acceptor-server/Makefile.am: + * examples/Logger/client/Makefile.am: + * examples/Logger/simple-server/Makefile.am: + * examples/Logger/Makefile.am: + * examples/Mem_Map/IO-tests/Makefile.am: + * examples/Mem_Map/Makefile.am: + * examples/Mem_Map/file-reverse/Makefile.am: + * examples/Misc/Makefile.am: + * examples/NT_Service/Makefile.am: + * examples/Naming/Makefile.am: + * examples/OS/Process/Makefile.am: + * examples/OS/Makefile.am: + * examples/QOS/Diffserv/Makefile.am: + * examples/QOS/Makefile.am: + * examples/QOS/Change_Receiver_FlowSpec/Makefile.am: + * examples/QOS/Change_Sender_TSpec/Makefile.am: + * examples/QOS/Simple/Makefile.am: + * examples/RMCast/Send_File/Makefile.am: + * examples/RMCast/Makefile.am: + * examples/Reactor/Dgram/Makefile.am: + * examples/Reactor/Makefile.am: + * examples/Reactor/FIFO/Makefile.am: + * examples/Reactor/Misc/Makefile.am: + * examples/Reactor/Multicast/Makefile.am: + * examples/Reactor/Ntalker/Makefile.am: + * examples/Reactor/Proactor/Makefile.am: + * examples/Reactor/WFMO_Reactor/Makefile.am: + * examples/Registry/Makefile.am: + * examples/Service_Configurator/IPC-tests/client/Makefile.am: + * examples/Service_Configurator/IPC-tests/Makefile.am: + * examples/Service_Configurator/IPC-tests/server/Makefile.am: + * examples/Service_Configurator/Makefile.am: + * examples/Service_Configurator/Misc/Makefile.am: + * examples/Shared_Malloc/Makefile.am: + * examples/Shared_Memory/Makefile.am: + * examples/Smart_Pointers/Makefile.am: + * examples/Synch/Makefile.am: + * examples/System_V_IPC/SV_Semaphores/Makefile.am: + * examples/System_V_IPC/SV_Message_Queues/Makefile.am: + * examples/System_V_IPC/Makefile.am: + * examples/TMCast/Member/Makefile.am: + * examples/TMCast/Makefile.am: + * examples/Threads/Makefile.am: + * examples/Timer_Queue/Makefile.am: + * examples/Web_Crawler/Makefile.am: + * netsvcs/clients/Logger/Makefile.am: + * netsvcs/clients/Makefile.am: + * netsvcs/clients/Naming/Client/Makefile.am: + * netsvcs/clients/Naming/Makefile.am: + * netsvcs/clients/Naming/Dump_Restore/Makefile.am: + * netsvcs/Makefile.am: + * netsvcs/lib/Makefile.am: + * netsvcs/servers/Makefile.am: + * performance-tests/Misc/Makefile.am: + * performance-tests/SCTP/Makefile.am: + * performance-tests/Server_Concurrency/Leader_Follower/Makefile.am: + * performance-tests/Server_Concurrency/Queue_Based_Workers/Makefile.am: + * performance-tests/Server_Concurrency/Makefile.am: + * performance-tests/Synch-Benchmarks/Base_Test/Makefile.am: + * performance-tests/Synch-Benchmarks/Makefile.am: + * performance-tests/Synch-Benchmarks/Perf_Test/Makefile.am: + * performance-tests/Synch-Benchmarks/Synch_Lib/Makefile.am: + * performance-tests/TCP/Makefile.am: + * performance-tests/UDP/Makefile.am: + * performance-tests/Makefile.am: + * tests/Makefile.am: + * tests/SSL/Makefile.am: + * tests/RMCast/Makefile.am: + * tests/HTBP/Reactor_Tests/Makefile.am: + * tests/HTBP/Send_Large_Msg/Makefile.am: + * tests/HTBP/Send_Recv_Tests/Makefile.am: + * tests/HTBP/ping/Makefile.am: + * tests/HTBP/Makefile.am: + * websvcs/lib/Makefile.am: + * websvcs/Makefile.am: + * websvcs/tests/Makefile.am: + * Makefile.am: + * protocols/ace/HTBP/Makefile.am: + * protocols/ace/Makefile.am: + * protocols/Makefile.am: + Either updated or new automake files. These were all generated with + MPC and checked in. A number will require further tweaks to be + useable for installing an autoconfigure'd ACE. At some point, we + may work on the MPC extensions needed to completely automate the + Makefile.am file generation, but at this point, those changes are + only useful for automake build targets. + +Sat Nov 13 23:49:57 2004 Kobi Cohen-Arazi + + * tests/Test_Output.cpp (ACE_Test_Output::close): + Added delete of the stream and setting msg_ostream to 0. That way + when re-initing the stream, it will be recreated. + +Fri Nov 12 09:10:28 2004 Chad Elliott + + * ace/config-integritySCA.h: + * include/makeinclude/platform_integrity_ghs.GNU: + + Merged in changes from TAO 1.3a. + +Fri Nov 12 09:48:22 2004 Steve Huston + + * ace/ACE.cpp (terminate_process): Return 0 for success (not 1) and + -1 for failure (not 0). Thanks to Russell Mora for this fix. + +Fri Nov 12 06:33:02 2004 Chad Elliott + + * ace/OS_NS_Thread.cpp: + + Removed a duplicated #elif clause. + +Fri Nov 11 12:29:12 UTC 2004 Martin Corino + + * include/makeinclude/platform_vxworks5.5.x.GNU: + * bin/MakeProjectCreator/templates/gnu.mpd: + * ace/config-vxworks5.x.h: + More changes to accommodate VxWorks 5.5.1 builds. + +Thu Nov 11 19:05:45 2004 Krishnakumar B + + * bin/MakeProjectCreator/config/ciao_component_dnc.mpb (project): + Added a dependency from ciao_component_dnc to + ciao_deployment_stub to resolve errors in building examples + based on DAnCE framework. + +Thu Nov 11 15:56:00 2004 Gary Maxey + + * ace/OS_NS_time.h + Add typedef for ACE_hrtime_t for Tandem platform. + Add conversion defines needed by High_Res_Timer.cpp. + + * ace/High_Res_Timer.cpp + Use macro definition for time difference calculation in + ACE_High_Res_Timer::calibrate. + + * ace/OS_NS_sys_select.inl + + Use spt_select instead of select for Tandem pthreads. + + * ace/os_include/os_pthread.h + * ace/OS_NS_Thread.cpp + * ace/Sched_Params.cpp + + Add clause to existing ifdef for Tandem pthreads process + priority definitions. + + * ace/CDR_Base.h + + Use LongLong typedef specialized for Tandem platform. + + * ace/Basic_Types.cpp + + For Tandem platform, altered initialization of flags + variable in "operator<<" method. + + * ace/ACE_Export.h + + Added variation for "#define ACE_NAMESPACE_STORAGE_CLASS" + for Tandem platform compiler. + +Thu Nov 11 17:27:24 2004 Kobi Cohen-Arazi + + * ace/Logging_Strategy.cpp: + Fixed handle_timeout conditional test to check the max_size + against the size of the file and not the value of a pointer. Fix + init to handle re-init correctly. When wipeout_logfile_ is true, + than close the file and reopen it truncated, when wipeout_logfile_ + is false, don't reopen the file unless its not open already. + +Thu Nov 11 08:34:12 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added HTPB library so that this lib is build first in a static + msvc build + +Wed Nov 10 12:42:45 2004 Chad Elliott + + * ace/OS_Errno.h: + * ace/OS_Errno.cpp: + + Do not inline this code if building with debug enabled using gcc + on Solaris. If it is inlined, it can cause deadlocks during + static initialization. + + * bin/MakeProjectCreator/config/rtscheduling.mpb: + + The TAO_RTScheduler library links in the TAO_PortableServer + library, so this base project needs the portableserver base + project. + + * tests/Priority_Task_Test.cpp: + + Print out an informational message if we are unable to change + priority due to user privileges instead of an error. + + + Applying the following changes from Trevor Fields + (fields_t@ociweb.com): + + Mon Oct 25 12:12:14 MST 2004 Trevor Fields + + * ace/Service_Repository.h: + * ace/Service_Repository.i: + * ace/Service_Repository.cpp: + + Changed the lock from an ACE_Thread_Mutex to an + ACE_Recursive_Thread_Mutex. This was done to stop the + deadlock from occuring on Solaris with gcc (>3) non-optimized + builds. + The problem is that the dynamic library loading is being done + according to the link line, every time a variable is looked up. + This results in loading a new library while holding the Service + Repository lock resulting in a single threaded deadlock. + The problem manifests itself in executables that deadlock before + reaching main(). The ImR_Activator is one of the programs that + currently is broken by this problem. + + Wed Sep 1 13:23:44 MST 2004 Trevor Fields + + * ace/Service_Repository.cpp: + Changed the insert method to delete a replaced service + after releasing the lock. This was done to prevent + deadlocks that were occuring on solaris with gcc > 3.2.1 + in the debug mode. + +Wed Nov 10 16:42:12 UTC 2004 Martin Corino + + * include/makeinclude/platform_vxworks5.5.x.GNU: + New platform configuration for VxWorks >= 5.5.1. + This new file (should) work(s) for both the GNU and DIAB toolchains on + any host for any target:-) + +Wed Nov 10 16:38:12 UTC 2004 Martin Corino + + * ace/config-vxworks5.x.h: + Added template specialization macros for DIAB builds. + +Wed Nov 10 16:35:12 UTC 2004 Martin Corino + + * bin/MakeProjectCreator/templates/gnu.mpd: + * include/makeinclude/rules.local.GNU: + * include/makeinclude/wrapper_macros.GNU: + Introduced use of ACE_MKDIR and MKDIR variables to better support + VxWorks 5.5.1 builds. + +Wed Nov 10 07:10:12 2004 Chad Elliott + + * ASNMP/asnmp/enttraps.h: + * ASNMP/asnmp/smival.h: + + Get rid of warnings from both aCC and Borland. + +Wed Nov 10 13:04:12 UTC 2004 Johnny Willemsen + + * ace/config-win32-mingw.h: + Added format specifiers for INT64 and UINT64. + +Tue Nov 9 11:53:39 PST 2004 Dave Craig + + * ace/Multihomed_INET_Addr.cpp: + * ace/Multihomed_INET_Addr.h: + * tests/SOCK_SEQPACK_SCTP_Test.cpp: + Add WCHAR support to ACE_Multihomed_INET_Addr, so + SOCK_SEQPACK_SCTP_Test will not fail to build when passing a wchar_t + argument on platforms that define ACE_USES_WCHAR. + + Add Qualcomm disclaimer to SOCK_SEQPACK_SCTP_Test. + + Note, there's still one more check-in to make SOCK_SEQPACK_SCTP_Test + a shell of a executable on platforms that do not define ACE_HAS_SCTP. + +Tue Nov 9 09:39:09 2004 Chad Elliott + + * bin/tao_other_tests.lst: + + The ImR/Combined_Service example will not run on single threaded + builds. + +Tue Nov 9 09:07:26 2004 Olli Savia + + * examples/Web_Crawler/Command_Processor.cpp: + Added explicit static template member instantiations. + +Mon Nov 8 13:30:47 2004 Chad Elliott + + * tests/OS_Test.cpp: + + Converted the binary string data in string_convert_test() to hex + escape sequences to get it to compile on gcc 3.4.1. + +Mon Nov 8 12:05:03 2004 Chad Elliott + + * include/makeinclude/rules.lib.GNU: + + Removed the unnecessary semi-colon from the end of the ar command + line and collapsed the special rule for vxworks_ntbuild as it was + no longer needed. + +Mon Nov 8 11:34:34 2004 Chad Elliott + + * bin/DependencyGenerator/DependencyEditor.pm: + * bin/DependencyGenerator/DependencyGenerator.pm: + + Slight performance modifications. + + * bin/generate_export_file.pl: + + Print debug messages to STDERR to allow clean redirection with the + use of the -d option. + +Mon Nov 8 07:53:46 2004 Chad Elliott + + * bin/msvc_mpc_auto_compile.pl: + + Added the protocols directory to the ace core directories. + +Fri Nov 5 13:44:57 2004 Chad Elliott + + * bin/MakeProjectCreator/config/acedefaults.mpb: + + Added ACE_NO_INLINE=1 to debug_macros only for the bmake project + type. + +Fri Nov 5 18:11:41 2004 Balachandran Natarajan + + * ace/OS_NS_Thread.cpp (thr_create): + + Fixed memory leak that were caused due to allocated + not being deleted whenever there is an error. Got + around this problem by using an auto_ptr, and releasing the + pointer when thr_create () is successful. Thanks to Gary Maxey + for reporting the problem. + + * ace/Base_Thread_Adapter.h (ACE_Base_Thread_Adapter): + + Moved the destructor to be public and the constructor to be + private. Making the destructor seems to have more downsides like + the one above (which basically prevented us from using + auto_ptr's). + +Fri Nov 5 16:14:12 UTC 2004 Martin Corino + + * ace/OS_NS_stdlib.cpp: + Fixed unnecessary inclusion of 'limits' for VxWorks because + it caused problems with GCC 2.9.6 toolchain. + +Fri Nov 5 07:52:51 2004 J.T. Conklin + + * ace/ACE.cpp: + + Changed gcd() from recursive to iterative implementation. + A good optimizing compiler should be able to convert the + tail call to a jump; but some compilers aren't good, and + sometimes ACE is compiled without optimization. + +Fri Nov 5 15:36:12 UTC 2004 Martin Corino + + * bin/MakeProjectCreator/templates/gnu.mpd: + * include/makeinclude/rules.bin.GNU: + Changes to support VxWorks 5.5.1 linking (both DIAB and GNU + toolchains). With VxWorks 5.5.1 linking is done based on + rules/targets defined in the makefile configuration provided + with the VxWorks toolset which is embedded in the ACE/TAO + structure through the platform_macros. + +Fri Nov 5 15:30:12 UTC 2004 Martin Corino + + * ace/config-vxworks5.x.h: + Updates for VxWorks 5.5.1 support. + +Fri Nov 5 07:27:16 2004 J.T. Conklin + + * configure.ac: + * Makefile.am: + + Changed to configure/build new protocols subdirectory + heirarchy. + + * ace/Makefile.am: + + Changed to not decend into HTBP subdirectory. + + * protocols/Makefile.am: + * protocols/ace/Makefile.am: + * protocols/ace/HTBP/Makefile.am: + + Added new files. Automake support for new HTBP location. + +Fri Nov 5 07:33:33 2004 Chad Elliott + + * bin/MakeProjectCreator/config/htbp.mpb: + + Added an include path for $(ACE_ROOT)/protocols. This will allow + everything that uses HTBP to compile. + +Fri Nov 5 10:30:12 UTC 2004 Martin Corino + + * ace/OS_NS_stdlib.cpp: + Fixed ACE_OS::mkstemp_emulation() for VxWorks because of 'max' + macro clash with 'std::numeric_limits::max ()'. + +Fri Nov 5 07:28:12 UTC 2004 Johnny Willemsen + + * tests/Test_Output.cpp: + Replaced ACE cast macro with C++ version + +Thu Nov 4 22:08:40 2004 Phil Mesnier + + * ace/HTBP/: + Moved to new protocols/ace/HTBP. + + * protocols/: + This is a new subdirectory added in anticipation of new + libraries that use ACE to create new methods of transporting + data between peers. This directory exists as a peer to ace + signifying that entites under this directory are not wrappers in + and of themselves, but do not necessarily have dependencies on + any higher level code. + + * protocols/ace/HTBP: + This directory contains the implementation of the Hypertext + Tunneling Bidirectional Protocol, that was previously under the + ace directory. The additional ace directory was added to avoid + having to modify any code that depends on HTBP, currently its + tests and the TAO pluggable protocol, HTIOP. Keeping the + relative path the same meant that the only external change + required as a side effect of this move was to add a single line + to htbp.mpb so that code including HTBP headers get + -I $ACE_ROOT/protocols added to the compile line. No other + changes are required. + + * ace/ace.mwc: + Removed ace/HTBP from the workspace definition. + + * bin/MakeProjectCreator/config/htbp.mpb: + Added "includes += $(ACE_ROOT)/protocols" to the base project. + +Thu Nov 4 18:47:22 2004 Steve Huston + + * ace/config-WinCE.h: Added ACE_LACKS_WCTYPE_H for CE 3 and lower. + + * ace/OS_NS_sys_stat.inl: For CE, removed data truncation warnings. + +Thu Nov 4 17:06:08 CST 2004 Scott Harris + + * test/Test_Output.cpp: + + Fix a bug introduced by a memory leak fix in Logging_Strategy.cpp, + Mon Oct 18 21:13:02 2004 Douglas C. Schmidt + , that broke the test/Logging_Strategy_Test on some platforms. + The problem is that Test_Output gives its file stream away + to ACE_LOG_MSG and then ACE_Logging_Strategry::init destroys the + stream but ACE_END_TEST still tries to close and destory it. + The solution was to only have Test_Output close/destroy the + stream if it has not already be changed in ACE_LOG_MSG. + + * test/Log_Msg_Test.cpp: + + The above change made it so ACE_Test_Output::output_file () + returns the ACE_MSG_LOG stream so it would not return + a possibly destroyed stream. Log_Msg_Test had + to be changed to save off the message stream when it + switched to a different file stream and then back + to the original. + +Thu Nov 4 14:00:50 2004 J.T. Conklin + + * ace/QoS/Makefile.am: + + Added includedir definition so that headers are installed + in $prefix/include/ace/QoS. + + * configure.ac: + * ace/Makefile.am: + + Changed to configure/build HTBP protocol library. + + * ace/HTBP/Makefile.am: + + Added new file, automake support for HTBP protocol. + +Thu Nov 4 06:28:34 2004 Chad Elliott + + * examples/IPC_SAP/SSL_SAP/SSL-client.cpp: + + Added another cast that I missed on my Wed Nov 3 07:13:19 2004 + check-in. + +Wed Nov 3 10:02:25 2004 Chad Elliott + + * bin/tao_orb_tests.lst: + + TAO/tests/IDL_Test/run_test.pl also can not be run with CORBA + Messaging disabled. + + * bin/tao_other_tests.lst: + + TAO/performance-tests/Protocols/run_test.pl can not be run in a + minimum corba build. + + Both TAO/examples/ior_corbaloc/run_test.pl and + TAO/utils/nslist/run_test.pl now require CORBA Messaging + because the Naming_Service requires it due to the addition of the + relative roundtrip timeout ability in the TAO_Naming_Server class. + +Wed Nov 3 09:40:21 2004 Chad Elliott + + * bin/tao_orb_tests.lst: + + TAO/tests/Bug_1568_Regression/run_test.pl and + TAO/tests/Bug_1670_Regression/run_test.pl can not be run with + CORBA Messaging disabled. + +Wed Nov 3 08:49:15 2004 Chad Elliott + + * bin/tao_other_tests.lst: + + Removed TAO/orbsvcs/tests/Notify/Lanes/run_test.pl and + TAO/orbsvcs/tests/Notify/ThreadPool/run_test.pl. These tests + require more scheduling priorities than most of the nightly build + systems have access to as a regular user. + +Wed Nov 3 06:24:31 2004 J.T. Conklin + + * bin/MakeProjectCreator/config/ftrteventchannel.mpb: + * bin/MakeProjectCreator/config/messaging.mpb: + + Changed to inherit from corba_messaging instead of appending + corba_messaging to requires. + +Wed Nov 3 07:24:06 2004 Chad Elliott + + * tests/HTBP/htbptest.mpb: + + Added missing Id tag. + +Wed Nov 3 07:13:19 2004 Chad Elliott + + * ACEXML/parser/parser/Parser.i: + + Removed unused variable 'ch'. + + * ACEXML/parser/parser/Parser.cpp: + + Added ACE_NOTREACHED around return to avoid warnings from Tru64 + compiler. + + * ASNMP/asnmp/address.cpp: + * ASNMP/asnmp/octet.cpp: + * ASNMP/asnmp/oid.h: + * ASNMP/asnmp/oid.cpp: + * ASNMP/asnmp/smival.h: + * ASNMP/asnmp/transaction.cpp: + + Getting rid of build warnings from various compilers (cxx, aCC, + etc.) + + * examples/IPC_SAP/SSL_SAP/SSL-client.cpp: + + Because of my Tue Nov 2 13:51:15 2004 change, cast -1 to size_t + in a couple of places. + +Tue Nov 2 18:37:22 2004 Steve Huston + + * tests/SOCK_SEQPACK_SCTP_Test.cpp: Reverted: + Tue Nov 2 10:15:01 2004 Chad Elliott + and changed the Server() and Client() return types from void* + to ACE_THR_FUNC_RETURN to fix compile errors. Also changed a + char to unsigned char to avoid a truncation warning. + +Tue Nov 2 14:09:57 2004 Chad Elliott + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: + * tests/Dev_Poll_Reactor_Test.cpp: + + Handle the alternate version of + ACE_Connector<>::connect_svc_handler and in the process remove a + SunCC warning. + +Tue Nov 2 13:51:15 2004 Chad Elliott + + * ASNMP/asnmp/asn1.cpp: + + Cast literal integer to u_long to match the type of the variable. + + * ace/config-linux-common.h: + + Check for __x86_64__ similarly to __ia64 to get rid of some build + warnings. + + * examples/IPC_SAP/SSL_SAP/SSL-client.cpp: + + Use size_t instead of int to match the size of void*. + +Tue Nov 2 10:15:01 2004 Chad Elliott + + * tests/SOCK_SEQPACK_SCTP_Test.cpp: + + Cast the first parameter to ACE_Thread_Manager::spawn to + ACE_THR_FUNC (as is done in other tests) to avoid compilation + problems on Windows. + +Mon Nov 1 07:27:11 2004 Douglas C. Schmidt + + * ace/INET_Addr.cpp: Fixed the implementation of + + ACE_INET_Addr (const char port_name[], + ACE_UINT32 ip_addr, + const char protocol[] = "tcp"); + + ACE_INET_Addr (const wchar_t port_name[], + ACE_UINT32 ip_addr, + const wchar_t protocol[] = "tcp"); + + so that they convert the ip_addr into network byte order before + calling set(). Thanks to Xue Yong Zhi for + reporting this bug and providing the fix. + +Tue Nov 2 06:56:21 2004 Chad Elliott + + * performance-tests/SCTP/SCTP.mpc: + + Added verbatim sections to the client projects to adds $(MATHLIB) + to LDLIBS for gnuace projects. The math library is needed for + some UNIX platforms and is set in the corresponding platform_*.GNU + files. + +Tue Nov 2 07:59:12 UTC 2004 Johnny Willemsen + + * performance-tests/SCTP/Options_Manager.cpp: + Removed extern C around the include of an ACE header file, this + fixes the compile problems in the Borland builds + +Mon Nov 1 10:21:00 2004 Gary Maxey + + * ace/TP_Reactor.cpp: performace enhancement in handle_timer_events + See Bugzilla #1971 for details. + + * ace/TP_Reactor.cpp: performace enhancement in handle_timer_events + See Bugzilla #1971 for details. + +Mon Nov 1 08:37:47 2004 Phil Mesnier + + * tests/HTBP/Send_Large_Msg/Send_Large_Msg.mpc: + * tests/HTBP/Send_Large_Msg/Send_Recv_Test.mpc: + * tests/HTBP/Reactor_Tests/Reactor_Tests.mpc: + * tests/HTBP/ping/ping.mpc: + + Removed dependency on htbptest.mpb, as this breaks the automated + mpc script. + +Mon Nov 1 07:34:03 2004 Phil Mesnier + + * tests/HTBP/htbptest.mpb: + * tests/HTBP/Reactor_Tests/Reactor_Tests.mpc: + * tests/HTBP/Send_Large_Msg/Send_Large_Msg.mpc: + * tests/HTBP/Send_Large_Msg/Test_Output.cpp: + * tests/HTBP/Send_Recv_Tests/SendRecv_Test.mpc: + * tests/HTBP/Send_Recv_Tests/Test_Output.cpp: + * tests/HTBP/ping/ping.mpc: + + Removed duplicate Test_Output.cpp source and added a new base + project that includes libTest_Output.so. + +Mon Nov 1 07:16:12 UTC 2004 Johnny Willemsen + + * tests/FlReactor_Test.cpp: + Set the reactor of the event handler to make this test working. + Thanks to Ertugrul Sorar for supplying + the patch + +Fri Oct 29 22:48:34 2004 Phil Mesnier + + * ace/HTBP/HTBP_ID_Requestor.cpp: + Fixed Single thread build error due to mutex type mismatch. + +Fri Oct 29 12:15:23 2004 Steve Huston + + * performance-tests/SCTP/SOCK_SEQPACK_clt.cpp: Add missing #include + "ace/OS_Memory.h" to find ACE_NEW_RETURN. + +Fri Oct 29 12:09:28 2004 Steve Huston + + * examples/Shared_Memory/test_MM.cpp: Don't try ACE_OS::mkstemp() + if ACE_LACKS_MKSTEMP is defined. + +Fri Oct 29 09:30:37 2004 Chad Elliott + + * ace/HTBP/HTBP_Channel.cpp: + + Remove build warning from g++. + +Thu Oct 28 13:12:18 2004 Chad Elliott + + * tests/SOCK_SEQPACK_SCTP_Test.cpp: + + If IPPROTO_SCTP is not defined, let the protocol default. + +Thu Oct 28 11:16:26 2004 Phil Mesnier + + * ace/HTBP/HTBP_Environment.cpp: + * ace/HTBP/HTBP_ID_Requestor.cpp: + Fixed overlooked literal wide string and a missing include file. + +Thu Oct 28 11:48:29 2004 Steve Huston + + * examples/Reactor/Misc/pingpong.cpp: Added missing includes + "ace/Barrier.h" and "ace/Thread.h" for ACE_WIN32. Also added + some missing ACE_TEXT() around string literals. + +Thu Oct 28 07:03:28 2004 Chad Elliott + + * examples/IPC_SAP/SOCK_SAP/CPP-unclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-unserver.cpp: + * examples/Reactor/Misc/pingpong.cpp: + + Added #include "ace/OS_NS_unistd.h" for ACE_OS::read, + ACE_OS::unlink, ACE_OS::getpid and ACE_OS::fork. + + * performance-tests/SCTP/SOCK_STREAM_clt.cpp: + + Added #include "ace/OS_Memory.h" for ACE_NEW_RETURN. + +Thu Oct 28 11:50:12 UTC 2004 Johnny Willemsen + + * bin/dsp2dsp.pl: + Removed this file, dsp's are now generated with MPC + +Thu Oct 28 06:21:40 2004 Chad Elliott + + * ace/HTBP/HTBP_Session.cpp: + + Removed another extra semi-colon. + +Thu Oct 28 00:27:57 2004 Olli Savia + + * apps/JAWS/server/HTTP_Request.cpp: + Replaced NULL with 0. + +Wed Oct 27 16:22:49 2004 Steve Huston + + * ace/UNIX_Addr.{h i}: Added wchar_t variants of the char-accepting + constructor and set() methods. Changed addr_to_string() to accept + ACE_TCHAR, not char, for the buffer. This unifies it with the other + address classes, restoring the ability to interchange it in + the Acceptor/Connector framework. + * ace/UNIX_Addr.cpp (set): Use strsncpy(), not memcpy(), to copy + the rendezvous string in, assuring a null-terminated string. + + * examples/IPC_SAP/DEV_SAP/reader/dev_sap_reader.mpc: + * examples/IPC_SAP/DEV_SAP/writer/dev_sap_writer.mpc: + Added exename and Source_Files spec since there's no main(). + + * examples/Reactor/Misc/Reactor_Misc.mpc: Added pingpong program. + + * examples/IPC_SAP/SOCK_SAP/sock_sap.mpc: Corrected names in + CPP_unserver project and added CPP_unclient project. + + * examples/Connection/blocking/SPIPE-acceptor.{h cpp}: + * examples/Connection/blocking/SPIPE-connector.{h cpp}: + * examples/Connection/blocking/test_spipe_acceptor.cpp: + * examples/Connection/blocking/test_spipe_connector.cpp: + * examples/Connection/misc/test_upipe.cpp: + * examples/Connection/misc/Connection_Handler.cpp: + * examples/Connection/non_blocking/CPP-acceptor.{h cpp}: + * examples/Connection/non_blocking/CPP-connector.{h cpp}: + * examples/Connection/non_blocking/test_lsock_acceptor.cpp: + * examples/Connection/non_blocking/test_lsock_connector.cpp: + * examples/Connection/non_blocking/test_sock_acceptor.cpp: + * examples/Connection/non_blocking/test_sock_connector.cpp: + * examples/Connection/non_blocking/test_spipe_acceptor.cpp: + * examples/Connection/non_blocking/test_spipe_connector.cpp: + * examples/IPC_SAP/DEV_SAP/reader/reader.cpp: + * examples/IPC_SAP/DEV_SAP/writer/writer.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-test.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-memclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-unclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-unserver.cpp: + * examples/IPC_SAP/SOCK_SAP/FD-unserver.cpp: + * examples/IPC_SAP/SOCK_SAP/FD-unclient.cpp: + * examples/IPC_SAP/SPIPE_SAP/NPClient.cpp: + * examples/IPC_SAP/SPIPE_SAP/NPServer.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-client-simple.{h cpp}: + * examples/IPC_SAP/SSL_SAP/SSL-client.{h cpp}: + * examples/IPC_SAP/SSL_SAP/SSL-sever-fancy.{h cpp}: + * examples/Logger/Acceptor-server/server_loggerd.{h cpp}: + * examples/Logger/client/logging_app.cpp: + * examples/Logger/simple-server/Logging_Handler.cpp: + * examples/Logger/simple-server/server_loggerd.cpp: + * examples/Mem_Map/IO-tests/IO_Test.cpp: + * examples/Mem_Map/IO-tests/test_io.cpp: + * examples/OS/Process/process.cpp + * examples/Reactor/FIFO/server.cpp: + * examples/Reactor/Misc/test_demuxing.cpp: + * examples/Reactor/Misc/notification.cpp: + * examples/Reactor/Misc/pingpong.cpp: + * examples/Reactor/Multicast/Log_Wrapper.cpp: + * examples/Service_Configurator/IPC-tests/client/local_dgram_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_stream_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_pipe_client_test.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.{h i cpp}: + * examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.{h i cpp}: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.{h i cpp}: + * examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.{h i cpp}: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.{h i cpp}: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.{h i cpp}: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Dgram.{h i cpp}: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.{h i cpp}: + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.{h i cpp}: + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.{h cpp}: + * examples/Service_Configurator/IPC-tests/server/server_test.cpp: + * examples/Shared_Memory/test_MM.cpp: + * examples/Shared_Memory/Options.{h cpp}: + * examples/Shared_Memory/test_malloc.cpp: + * performance-tests/SCTP/Options_Manager.cpp: + * performance-tests/SCTP/SOCK_STREAM_clt.cpp: + * performance-tests/SCTP/SOCK_STREAM_srv.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_clt.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_srv.cpp: + Wide-char fixes. + + * performance-tests/SCTP/SCTP.mpc: New - describes the projects in + this directory. These will build ok without SCTP enabled, so they + don't need to be "required" to have sctp. + +Wed Oct 27 14:33:42 2004 Phil Mesnier + + * ace/HTBP/HTBP_Addr.cpp: + * ace/HTBP/HTBP_Filter_Factory.cpp: + * ace/HTBP/HTBP_ID_Requestor.cpp: + * ace/HTBP/HTBP_Outside_Squid_Filter.h: + Addressing errors raised by AIX 64 compiler. + +Wed Oct 27 12:11:11 2004 Phil Mesnier + + * ace/HTBP/HTBP_Addr.cpp: + * ace/HTBP/HTBP_Environment.cpp: + * ace/HTBP/HTBP_Environment.h: + * ace/HTBP/HTBP_Filter.cpp: + * ace/HTBP/HTBP_Filter.h: + * ace/HTBP/HTBP_ID_Requestor.cpp: + * ace/HTBP/HTBP_ID_Requestor.h: + * ace/HTBP/HTBP_Inside_Squid_Filter.cpp: + * ace/HTBP/HTBP_Session.cpp: + * tests/HTBP/Reactor_Tests/client.cpp: + * tests/HTBP/Send_Large_Msg/client.cpp: + * tests/HTBP/Send_Large_Msg/run_test.pl: + * tests/HTBP/Send_Large_Msg/server.cpp: + * tests/HTBP/Send_Recv_Tests/SendRecv_Test.cpp: + * tests/HTBP/ping/client.cpp: + Numerous fixes to make support for wchar builds correct. + +Wed Oct 27 10:33:15 2004 Chad Elliott + + * ace/HTBP/HTBP.mpc: + + Modified the dynamicflags to match the macro used in + HTBP_Export.h. + +Wed Oct 27 09:28:05 2004 Chad Elliott + + * bin/msvc_static_order.lst: + + Added the HTIOP library to the static order list. + +Wed Oct 27 09:16:16 2004 Chad Elliott + + * tests/HTBP/Reactor_Tests/Reactor_Tests.mpc: + * tests/HTBP/Send_Large_Msg/Send_Large_Msg.mpc: + * tests/HTBP/Send_Recv_Tests/SendRecv_Test.mpc: + * tests/HTBP/ping/ping.mpc: + + Ensure that these projects get built in the right order by + inheriting from the htbp base project. + +Wed Oct 27 13:05:12 UTC 2004 Martin Corino + + * include/makeinclude/rules.local.GNU: + * include/makeinclude/rules.lib.GNU: + + Added changes to support VxWorks DIAB build on Windows. + +Wed Oct 27 07:54:11 2004 Chad Elliott + + * ace/HTBP/HTBP_Addr.h: + * ace/HTBP/HTBP_Channel.h: + * ace/HTBP/HTBP_Environment.h: + * ace/HTBP/HTBP_Filter.h: + * ace/HTBP/HTBP_Filter_Factory.h: + * ace/HTBP/HTBP_ID_Requestor.h: + * ace/HTBP/HTBP_Inside_Squid_Filter.h: + * ace/HTBP/HTBP_Notifier.h: + * ace/HTBP/HTBP_Outside_Squid_Filter.h: + * ace/HTBP/HTBP_Session.h: + * ace/HTBP/HTBP_Stream.h: + + Semi-colons are not required on the closing brace of a namespace + and cause errors on a few compilers. + +Wed Oct 27 07:46:42 2004 Chad Elliott + + * ace/HTBP/HTBP_Addr.h: + * ace/HTBP/HTBP_Channel.cpp: + * ace/HTBP/HTBP_Environment.h: + * ace/HTBP/HTBP_Stream.cpp: + + Use "" instead of <> in #include. + + * ace/HTBP/HTBP_ID_Requestor.cpp: + * ace/HTBP/HTBP_Session.h: + * ace/HTBP/HTBP_Session.cpp: + + Use ACE_SYNCH and ACE_SYNCH_MUTEX instead of ACE_MT_SYNCH and + ACE_Thread_Mutex for threads=0 builds. + + * ace/OS_NS_Thread.inl: + + ACE_OS::thr_getspecific() was missing an #else clause for the + ACE_HAS_THREADS macro. + +Wed Oct 27 08:05:12 UTC 2004 Martin Corino + + * include/makeinclude/rules.local.GNU: + + Fixed 'mkdir' handling for 'normal' cygwin32 and mingw32 builds + since 'make' here uses 'sh.exe' as shell instead of 'cmd.exe' as + the make for VxWorks does. + +Tue Oct 26 13:55:20 2004 Chad Elliott + + * ACEXML/common/StreamFactory.cpp: + * ACEXML/common/ZipCharStream.h: + * ACEXML/common/ZipCharStream.cpp: + * ACEXML/examples/SAXPrint/main.cpp: + + Switch to using the zzip base project found in MPC which means + switch from macro ACEXML_HAS_ZZIPLIB to USE_ZZIP. + + * bin/MakeProjectCreator/config/zzip.mpb: + + Removed this file. It is a duplicate of the one contained in + MPC/config except for the trigger macro. + +Fri Oct 26 11:18:21 PDT 2004 Dave Craig + + * ace/SOCK_SEQPACK_Association.h: + * ace/SOCK_SEQPACK_Association.cpp: + Add SOCK_SEQPACK_Association::abort() to ungracefully remove an + association. See RFC 2960 for more details. + + * tests/SOCK_SEQPACK_Test.cpp: + * tests/tests.mpc: + * tests/tests.lst: + Add simple test to exercise SOCK_SEQPACK_* functionality through + loopback and verify that abort() is doing what it is supposed to + be doing. It took a while to exercise all of the different #define's, + but the results should come out fine w/+w/o ACE_HAS_IPV6, w/+w/o + ACE_HAS_SCTP, and w/+w/o ACE_LACKS_FORK. TAO with LKSCTP did not + compile, so it was not regressed. + +Tue Oct 26 13:05:28 2004 Chad Elliott + + * ace/HTBP/HTBP.mpc: + * ace/HTBP/HTBP_Addr.h: + * ace/HTBP/HTBP_Channel.h: + * ace/HTBP/HTBP_Channel.cpp: + * ace/HTBP/HTBP_Environment.h: + * ace/HTBP/HTBP_Filter.h: + * ace/HTBP/HTBP_Filter_Factory.h: + * ace/HTBP/HTBP_ID_Requestor.h: + * ace/HTBP/HTBP_Inside_Squid_Filter.h: + * ace/HTBP/HTBP_Notifier.h: + * ace/HTBP/HTBP_Notifier.cpp: + * ace/HTBP/HTBP_Outside_Squid_Filter.h: + * ace/HTBP/HTBP_Session.h: + * ace/HTBP/HTBP_Session.inl: + * ace/HTBP/HTBP_Stream.h: + * ace/HTBP/HTBP_Stream.cpp: + * bin/MakeProjectCreator/config/htbp.mpb: + * bin/MakeProjectCreator/config/htiop.mpb: + * tests/HTBP/Reactor_Tests/Reactor_Tests.mpc: + * tests/HTBP/Send_Large_Msg/Send_Large_Msg.mpc: + * tests/HTBP/Send_Recv_Tests/SendRecv_Test.mpc: + * tests/HTBP/ping/ping.mpc: + + Fixed many fuzz errors. + +Tue Oct 26 09:39:18 2004 Chad Elliott + + * ace/HTBP/HTBP_Inside_Squid_Filter.cpp: + + Set toklen to zero to avoid using it in an uninitialized state. + +Tue Oct 26 12:28:12 UTC 2004 Martin Corino + + * include/makeinclude/rules.local.GNU: + + Fixed sections for 'ifeq ("$(OS)", "Windows_NT")' since these + now get hit again as the OS variable works again (see previous). + Needed this for VxWorks cross-builds on NT. + +Tue Oct 26 12:22:12 UTC 2004 Martin Corino + + * ace/ace.mpc: + + Changed 'OS' filegroup to 'ACE_OS' since otherwise with GNU + makefiles the OS environment variable gets overruled (and this + is/was supposed to be used in rules.local.GNU). + +Tue Oct 26 10:56:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_linux_pgi.GNU + Improved pgi support + +Mon Oct 25 23:30:49 2004 Phil Mesnier + + * NEWS: + Added a comment regarding HTBP. + +Mon Oct 25 23:20:53 2004 Phil Mesnier + + * ace/HTBP/README: + Added some text that had been in TAO/orbsvcs/orbsvcs/HTIOP but + is better located here. + + * bin/MakeProjectCreator/config/htbp.mpb: + * bin/MakeProjectCreator/config/htiop.mpb: + Base projects used to add libACE_HTBP.so or libTAO_HTIOP.so to + projects. + +Mon Oct 25 21:27:03 2004 Phil Mesnier + + * ace/ace.mwc: + Added HTBP as a new project. + + * ace/HTBP: + This is a new streaming protocol, HTTP Tunneling Bidirectional + Protocol. Motivation for this protocol comes from Essex-Radez + (www.radez.com). A description of the protocol details may be + found in ace/HTBP/README. + + * tests/HTBP: + This is a collection of tests specific to HTBP. + +Mon Oct 25 20:13:07 2004 Phil Mesnier + + * ace/Global_Macros.h: + Added a new service configuration macro for defining a factory + function for classes scoped within namespaces. The new macro is + ACE_FACTORY_NAMESPACE_DEFINE. The associated comment block + provides usage details. + +Mon Oct 25 09:05:02 2004 Steve Totten + + * ACEXML/common/Transcode.h: + Renamed STATUS to ACEXML_STATUS to avoid name clash on + platforms that define a macro STATUS (e.g., Tru64 cxx 6.1). + +Sun Oct 24 08:39:12 UTC 2004 Johnny Willemsen + + * tests/run_test.lst: + Removed OTHER and ALL from some tests, I don't see why these tests + just shouldn't run on a few platforms. + +Sat Oct 23 11:27:47 2004 Douglas C. Schmidt + + * ace/WIN32_Asynch_IO.cpp (shared_write): Changed the return values + for ACE_Asynch_Write_Stream::write() and + ACE_Asynch_Read_Stream::read() so that they return 0 rather than + 1. This makes the code more portable between Windows and POSIX. + Thanks to Jaroslaw Nozderko + for reporting this. + + * ace/POSIX_Proactor.cpp (ACE_AIOCB_Notify_Pipe_Manager): + Added a call to + + ACE_Flag_Manip::set_flags (this->pipe_.read_handle (), ACE_NONBLOCK); + + so that the ACE_POSIX_AIOCB_Proactor doesn't hang on SuSe Linux + 9.1. Thanks to Vukajlo for reporting + this fix. + +Fri Oct 22 17:55:32 2004 Steve Huston + + * configure.ac: Added check for ACE_LACKS_WCTYPE_H. + +Fri Oct 22 17:00:27 2004 Steve Huston + + * ace/os_include/sys/os_stat.h: Add more values for the 'mode' flags + for WinCE and use the macros defined for them in the Windows API. + + * ace/OS_NS_sys_stat.inl (stat): Set the st_mode value for WinCE. + + * tests/Dirent_Test.cpp: Don't attempt ACE_OS::chdir() for + ACE_LACKS_CHDIR; the method isn't declared on those platforms. + + * tests/Time_Value_Test.cpp: Removed stray #include . + +Fri Oct 22 11:10:55 2004 Chad Elliott + + * bin/DependencyGenerator/GNUObjectGenerator.pm: + + Fixed an object file path mismatch between the MPC generated + makefiles and the dependencies generated by depgen.pl. + + * bin/MakeProjectCreator/config/xerces.mpb: + + Moved this file into MPC. It is not ACE specific, so let others + benefit from it. + +Fri Oct 22 09:47:05 2004 Chad Elliott + + * ace/RMCast/RMCast_Copy_On_Write.h: + * ace/RMCast/RMCast_Membership.h: + * ace/RMCast/RMCast_Reordering.h: + + Removed doxygen errors. + +Fri Oct 22 12:06:19 UTC 2004 Johnny Willemsen + + * ace/config-linux-common.h: + * include/makeinclude/platform_linux_pgi.GNU: + Improved pgi support + +Fri Oct 22 11:47:26 2004 Balachandran Natarajan + + * bin/MakeProjectCreator/config/xerces.mpb: + + Use libs instead of lit_libs since xerces also does the + decoration in their VC* binaries. + +Fri Oct 22 11:32:19 UTC 2004 Johnny Willemsen + + * ace/OS_NS_ctype.inl: + When ACE_HAS_WCHAR is defined, include os_include/os_wctype.h to get + towlower and towupper + + * ace/config-linux-common.h: + Improved pgi support + +Fri Oct 22 08:34:19 UTC 2004 Johnny Willemsen + + * bin/make_release: + Added fl_reactor=1 and xt_reactor=1 to the default.features file + that is used to generate the GNU makefiles, this will only generate + the corresponding makefiles, but to build with fl_reactor/xt_reactor + you have to set it to 1 in the platform_macros.GNU file + +Thu Oct 21 18:23:19 2004 Steve Huston + + * ace/config-win32-msvc-7.h: ACE_HAS_TEMPLATE_TYPEDEFS doesn't apply + to the Win64 SDK compiler (version 1300), even though it does for + as MSVC 7.1 latest on Win32 (version 1310). + + * ace/CDR_Base.h: Only use ACE::If_Then_Else on MSVC for VC 7.1; the + Win64 SDK compiler can't hack it. + + * ASNMP/tests/test_config.h (randomize): Added some static_cast to + convert size_t to int. Fixes compile warnings on Win64. + +Thu Oct 21 18:25:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_linux_pgi.GNU: + * ace/config-linux-common.h: + * ace/config-lite.h: + Changes to support the Portland Group PGI High-Performance + Compiler on Linux. This is just a first checkin, a new build + has been setup and the port to this compiler will be done the + next months, in case you want to know more, look at www.pgroup.com + for the compiler details + +Thu Oct 21 12:32:52 2004 Chad Elliott + + * ACEXML/common/AttributesImpl.h: + + Fixed doxygen errors dealing with the use of @var in a single line + comment. + +Thu Oct 21 09:12:32 2004 Chad Elliott + + * bin/tao_other_tests.lst: + + No Notification Service test can be run when mimimum_corba is + enabled. + +Thu Oct 21 08:43:57 2004 Chad Elliott + + * ace/OS_NS_Thread.cpp: + + Corrected the mismatched ACE_TRACE macros. + +Wed Oct 20 14:53:19 2004 Steve Huston + + * ace/OS_main.h: For WinCE, don't intersperse a call to an ace_os_... + function. Just set up a ACE_Main object and call its run() method. + Fixed the run() method on WinCE to take the command line args + that WinMain gets on CE. + +Wed Oct 20 10:42:22 2004 Chad Elliott + + * bin/MakeProjectCreator/config/ftserverorb.mpb: + + The ftserverorb base project needs to inherit from portablegroup + to get the required settings (since TAO_FT_ServerORB depends on + TAO_PortableGroup and TAO_Messaging). + +Tue Oct 19 20:42:06 2004 Dale Wilson + + * ace/OS_NS_Thread.inl: + Missed this file in my previous check in. + +Tue Oct 19 17:04:19 2004 Steve Huston + + * tests/Multicast_Test.cpp: Explicitly specify PF_INET when creating + the multicast socket. All of the addresses used in the test are + IPv4, so force the socket to be IPv4 as well. Fixes run-time errors + when IPv6 is enabled. The TCP stuff can pick up the correct address + family from the specified address, but for datagrams, there's no + real hint to pick up from. + +Tue Oct 19 15:29:19 2004 Steve Huston + + * ace/Message_Block.cpp (ACE_Data_Block::clone()): When copying data + from the original block to the cloned, only copy cur_size_ bytes. + Preserves the "has been written" boundary in the new block and avoids + a possible "uninitialized read" diagnostic from Purify, et al. + Thanks to Kelly F. Hickel for reporting this. + +Tue Oct 19 17:58:12 UTC 2004 Johnny Willemsen + + * ace/config-win32-dmc.h: + Improved Digital Mars C++ support + +Tue Oct 19 06:47:04 2004 Chad Elliott + + * bin/tao_other_tests.lst: + + Reverted my previous change and removed + TAO/orbsvcs/examples/Notify/Lanes/run_test.pl and + TAO/orbsvcs/examples/Notify/ThreadPool/run_test.pl from the list. + These are the ones that require root privileges. + +Tue Oct 19 06:17:24 2004 Chad Elliott + + * bin/tao_other_tests.lst: + + Removed TAO/orbsvcs/tests/Notify/Lanes/run_test.pl from the list. + It requires root privileges and shouldn't be run in a nightly + build. + +Mon Oct 18 19:21:25 2004 J.T. Conklin + + * bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm: + + Fixed typo setting ACE_ROOT environment variable in the TAO_IDL + definition. + +Mon Oct 18 21:13:02 2004 Douglas C. Schmidt + + * ace/Logging_Strategy.cpp: Fixed the init() method so that it doesn't + leak memory if it's called more than once. Thanks to Kobi + for this fix. + + * ace/Pagefile_Memory_Pool.cpp: Fixed two bugs with the + ACE_Pagefile_Memory_Pool constructor: + + 1. In the constructor is called with options=0, then the + internal meber local_cb_ is never initialised. Thus there is + no way of using it with ACE_Malloc. + + 2. When used for ACE_Malloc in the following way + + : ACE_Malloc + Malloc1 ("NAME_TEST" ) + + as a mutex is created with the name given, the internal call + to CreateFileMapping (CreateFileMappingEx) fails because a + system object of the same name already exists (the mutex). + Thanks to Domingos Monteiro + for reporting these problems and providing the fixes. + +Mon Oct 18 17:45:29 2004 Steve Huston + + * examples/APG/Naming/Graph.cpp: + * examples/APG/Naming/Temperature_Grapher.cpp: Don't attempt to + compile the few parts of this that use std::list (the + Graphable_Element_List typedef) without implicit template + instantiation. It's too much trouble to try to follow the + various platforms' incantations. + +Mon Oct 18 17:18:12 UTC 2004 Johnny Willemsen + + * ace/config-win32-dmc.h: + Improved Digital Mars C++ support + +Mon Oct 18 12:15:14 2004 Steve Huston + + * examples/C++NPv2/display_logfile.cpp: Wide-char fixes. + +Mon Oct 18 18:34:55 2004 Olli Savia + + * ace/os_include/os_signal.h: + Removed unneeded LynxOS specific pthread_sigmask + protoype declaration. + +Fri Oct 15 18:50:19 2004 Steve Huston + + * ace/OS_NS_Thread.cpp: In places where the old ace_result_ part of + the previous incantation of ACE_OSCALL_RETURN was used, create a + local 'result' variable and use that. ace_result_ is only used in + the Win32 version of ACE_OSCALL_RETURN. + +Fri Oct 15 17:46:29 2004 Steve Huston + + * configure.ac: Added checks for the swab() variants that have: + (const char*, char*, ssize_t) [SVID3 - ACE_HAS_CONST_CHAR_SWAB] + and (char*, char*, ssize_t) [Windows, et al - ACE_HAS_NONCONST_SWAB]. + Also altered the ACE_HAS_TYPENAME test to work on Forte C++ 7. + + * m4/config_h.m4: Added ACE_HAS_CONST_CHAR_SWAB and + ACE_HAS_NONCONST_SWAB. + + * ace/OS_NS_unistd.inl (swab): Added code for ACE_HAS_CONST_CHAR_SWAB + variant for swab() found on Solaris. + + * ace/config-sunos5.5.h: Replace ACE_LACKS_SWAB with + ACE_HAS_CONST_CHAR_SWAB. This was determined by running the autoconf + tests. If it doesn't work uniformly, will need some feature-test + tweaks. + +Fri Oct 15 17:33:18 2004 Steve Huston + + * ace/ACE.h: + * ace/OS_NS_signal.h: Include config-lite.h instead of config-all.h. + It drags in too much and some trips up the aC++ compiler. Not sure + why... it's a tangled web. + + * ace/Message_Block.h: Add #include "ace/config-lite.h" since it needs + to know config settings. + +Fri Oct 15 16:44:29 2004 Steve Huston + + * ace/OS_NS_stdlib.cpp (mkstemp_emulation): Related to: + Fri Oct 8 23:13:13 2004 Ossama Othman + Only figure out a configurable limit on non-WinCE platforms. WinCE + lacks too much to get fancy, so just use 127. + + * ace/Ping_Socket.cpp: Added Win32 /**/ trickery to keep MSVC from + complaining about missing header files. + + * ace/OS_main.{h cpp}: Use ACE_HAS_WINCE, not ACE_WINCE, as the + config macro to decide on Windows CE stuff. + Also, the WinCE version of ACE_Main_Base::run() takes the WinCE + command line args, not argc/argv. The argc/argv conversion from + the text command line is now in the .cpp file, removing the need + for including ARGV.h in OS_main.h, the source of many header file + loops. + +Fri Oct 15 13:28:02 2004 Dale Wilson + + * ace/OS_NS_Thread.h: + * ace/OS_NS_Thread.cpp: + * ace/os_include/os_pthread.h: + This corrects a conflict between recent TSS changes and + TSS Emulation. The problem was a result of failing to distinguish + between native and emulated TSS keys. + + TSS_Emulation uses a single native TSS key to emulate a compile- + time-configurable number of emulated keys. Function overloading + based on various integer types was used to distinguish native key + management from emulated key management. The integral types involved + varied from platform to platform. So, for example, + thr_keyfree(unsigned int) frees a native key while thr_keyfree(unsigned long) + frees an emulated key (on some platforms). + + The failure happened when the emulated key with the same value as the + real key on which the emulation was based was freed. Due to the above- + mentioned confusion the real key was being freed-- breaking the emulation. + + The solution was to rename several internal routines so that thr_keyfree_native + frees a real key while thr_keyfree frees an emulated key. The native methods + are used only internally in the OS_NS_Thread.cpp file so the change is localized. + + In the process I eliminated a lot of duplicated (copy-paste-tweaked) code. + Thus with this change allocating a native key uses the same code whether or not + TSS Emulation is enabled. + + I also cleared up another area of confusion in the ACE_TSS_Cleanup + object. Methods were documented and in some cases renamed to + make it clear whether the method was managing the lifetime of a TSS object or a + TSS key. + + ACE_TSS_Cleanup is internal to OS_NS_Thread.cpp so the change will not have any + impact on other parts of the system. + + Finally I added a number of ACE_ASSERTS in places where the comments said + "This will never happen." but it was happening and being ignored. + + +Fri Oct 15 13:34:17 2004 Chad Elliott + + * bin/tao_other_tests.lst: + + The TAO/orbsvcs/examples/ImR/Combined_Service/run_test.pl script + should only be run if exceptions are enabled. + +Fri Oct 15 10:09:34 2004 Dale Wilson + + * tests/TSS_Test.cpp: + * tests/TSS_Test_Errno.h: + + Olli's report that TSS_Test was failing when TSS_Emulation prompted + me to take a closer look at TSS_Test. I found a number of problems, + none of which was related to the TSS Emulation issue. That will be + addressed separately. + + The most serious problem was attempting to log a message from within + a TSS cleanup function. Since the log message buffer is itself a TSS + object this only works of the TSS objects happen to be deleted in the + "right" order. There was even a comment that said: + // Anyways, for whatever reason, the ACE_DEBUG causes a + // core dump on LynxOS 2.5.0. + + I was amused by: void *ptr; operator delete (ptr);. It works, but it's a bad + example to set for people who might read this code as an example of how to + clean up "real" TSS objects. Sometimes calling the destructor is important. + + If the comments can be trusted, the code was deleting TSS objects twice when + ACE_HAS_PTHREADS_DRAFT4 was defined. + + Finally I added a test of TSS object lifetime management. Previously + it did a lot of calls without really checking to see if they worked. + It now counts the number of TSS objects created and the number deleted to + insure that every object created is actually deleted. For now a failure + of this check generates a warning rather than an error because I want + to see how this turns out on various platforms without adding a new + test failure right before upcoming beta release. + +Fri Oct 15 01:28:58 2004 J.T. Conklin + + * netsvcs/lib/Makefile.am: + + Changed to install netsvcs library. + +Fri Oct 15 06:52:12 UTC 2004 Johnny Willemsen + + * tests/Vector_Test.cpp: + * ace/Task.cpp: + Changed Borland C++ version checks + +Thu Oct 14 21:03:00 2004 J.T. Conklin + + * ace/CDR_Base.cpp: + * ace/CDR_Base.inl: + + Added AMD64 optimized versions of ACE_CDR::swap_{2, 4, 8}, and + ACE_CDR::swap_{2, 4}_array. + +Thu Oct 14 08:07:36 2004 Chad Elliott + + * ace/Profile_Timer.inl: + + If ACE_HAS_PRUSAGE_T is defined, we need to include + ace/OS_NS_stropts.h to get ACE_OS::ioctl. + + * ace/Profile_Timer.cpp: + + If ACE_HAS_PRUSAGE_T is defined, we need to include + ace/OS_NS_stdio.h to get ACE_OS::sprintf. + +Thu Oct 14 12:27:23 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.x_diab.GNU + Some small changes for the Windriver Diab compiler + +Thu Oct 14 12:23:23 UTC 2004 Johnny Willemsen + + * ace/config-lite.h: + * ace/config-vxworks5.x.h: + * ace/Task.cpp: + Some small changes for the Windriver Diab compiler + +Wed Oct 13 21:55:13 2004 Ossama Othman + + * include/makeinclude/wrapper_macros.GNU (acexml): + + Enable ACEXML support by default. Addresses build issues + introduced by the "--with-acexml" configure script changes + described below. Thanks to Bala for pointing this out and for + suggesting a fix. + +Tue Oct 12 22:37:16 2004 Ossama Othman + + * m4/ace.m4: + + Changed "--with-uses-wchar" configure script option to + "--enable-uses-char". The latter is the correct convention for + features. "--with-*" is by convention only used for requesting + use of other software packages in the package being configured. + +Wed Oct 13 06:53:55 2004 Olli Savia + + * tests/DLL_Test_Impl.cpp: + * tests/Message_Block_Test.cpp: + * tests/SOCK_Connector_Test.cpp: + * tests/SOCK_SEQPACK_SCTP_Test.cpp: + * tests/Timer_Queue_Test.cpp: + * tests/TkReactor_Test.cpp: + * tests/XtReactor_Test.cpp: + Replaced NULL with 0. + +Tue Oct 12 17:33:51 2004 Steve Huston + + * ace/Local_Memory_Pool.{h cpp}: + * ace/MMAP_Memory_Pool.cpp: + * ace/Sbrk_Memory_Pool.cpp: + * ace/Shared_Memory_Pool.cpp: Add missing includes to fix AIX builds. + +Tue Oct 12 17:58:12 UTC 2004 Martin Corino + + * ace/Sbrk_Memory_Pool.h: + * ace/Shared_Memory_Pool.h: + + Added ace/os_include/sys/os_mman.h. + +Tue Oct 12 06:44:12 UTC 2004 Johnny Willemsen + + * ace/Local_Memory_Pool.h: + * ace/MMAP_Memory_Pool.h: + * ace/Pagefile_Memory_Pool.h: + * ace/Sbrk_Memory_Pool.h: + * ace/Shared_Memory_Pool.h: + Fixed incorrect doxygen file tag + +Mon Oct 11 19:43:22 2004 Irfan Pyarali + + * ace/Local_Memory_Pool.cpp (acquire): + + Added ace/OS_Memory.h. + + * ace/MMAP_Memory_Pool.cpp: + + Added ace/OS_NS_string.h and ace/OS_NS_sys_stat.h. + + * ace/Pagefile_Memory_Pool.h: + + Added ace/os_include/sys/os_mman.h. + +Mon Oct 11 09:52:40 2004 Marek Brudka + + * ace/config-qnx-rtp-62x.h: + Set ACE_LACKS_CUSERID. + +Mon Oct 11 10:14:36 2004 J.T. Conklin + + * examples/System_V_IPC/SV_Semaphores/Semaphores_1.cpp: + * tests/SV_Shared_Memory_Test.cpp: + + Changed to #include ace/SV_Sempahore_Complex.h, which had been + implicitly included via Memory_Pool.h, even though it was not + needed by the interface or implementation. + + * ace/Makefile.am: + * ace/ace.mpc: + + Updated. + + * ace/Local_Memory_Pool.cpp: + * ace/Local_Memory_Pool.h: + * ace/MMAP_Memory_Pool.cpp: + * ace/MMAP_Memory_Pool.h: + * ace/Pagefile_Memory_Pool.cpp: + * ace/Pagefile_Memory_Pool.h: + * ace/Pagefile_Memory_Pool.inl: + * ace/Sbrk_Memory_Pool.cpp: + * ace/Sbrk_Memory_Pool.h: + * ace/Shared_Memory_Pool.cpp: + * ace/Shared_Memory_Pool.h: + + New files. + + * ace/Memory_Pool.cpp: + * ace/Memory_Pool.inl: + * ace/Memory_Pool.h: + + Split apart Memory_Pool.{cpp,h,inl} into a separate set of files + for each class and "outlining" inlined virtual functions. Since + the implementations are related by interface, not inheritance; + locating them all in the same file typically results in static + footprint bloat. + + Removed Memory_Pool.{cpp,inl}. + +Mon Oct 10 12:48:03 2004 Martin Corino + + * ace/config-hpux-11.00.h: + + Added XPG4 multibyte (wchar) support for __GLIBC__ >= 2. + +Mon Oct 10 9:43:03 2004 Martin Corino + + * ace/config-tru64.h: + + Added XPG4 multibyte support for DIGITAL_UNIX >= 5. + +Sat Oct 9 23:08:04 2004 Ossama Othman + + * bin/MakeProjectCreator/config/acexml.mpb: + + Added a "requires += acexml" MPC project flag. Allows + generation of Automake conditionals in MPC generated Makefile.am + files. + + * bin/MakeProjectCreator/config/global.features: + + Enable support ACEXML by default. This was previously the + implicit default. It must be now be explicit in order to + correctly support features like the new "--with-acexml" + configure script option described below. + + * m4/ace.m4: + + Added new "--with-acexml" configure script option. It allows a + user to enable (the default) or disable support for ACEXML. + +Sat Oct 9 13:55:26 2004 Balachandran Natarajan + + * bin/MakeProjectCreator/config/ciao_client_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_deployment_stub.mpb: + * bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb: + * bin/MakeProjectCreator/config/ciao_server_dnc.mpb: + + Fixed library ordering issues. This should fix a few link errors + in CIAO static builds. + +Fri Oct 8 23:13:13 2004 Ossama Othman + + * ace/OS_NS_stdlib.cpp (mkstemp_emulation): + + We only care about UTF-8 / ASCII characters in generated + filenames. A UTF-16 or UTF-32 character could potentially cause + a very large space to be searched in the do/while() loop that + generated alphanumeric characters, greatly slowing down this + mkstemp() implementation. It is more practical to limit the + search space to UTF-8 / ASCII characters (i.e. 127 characters). + +Fri Oct 8 18:40:19 2004 Steve Huston + + * ace/SSL/ssl.mpc: Removed the automake-specific part. The MPC-supplied + openssl.mpb file now includes the automake libs/includes that were + here. + + * examples/NT_Service/NT_Service.mpc: Inherit from the winregistry + project. Makes this require winregistry. Although not strictly + correct, it's close enough. Probably would be more correct to + rename winregistry to windows, but I won't rock the boat today. + + * m4/ace.m4: Don't emit ACE_NTRACE unless the user specifically + says --enable-trace. ace/config-all.h knows how to default + tracing correctly. Also, for --enable-tracing, set ACE_NTRACE + to 0; for disable tracing, set ACE_NTRACE to 1. + +Fri Oct 8 06:27:12 UTC 2004 Johnny Willemsen + + * ace/Malloc_Allocator.cpp: + Added include of ace/OS_NS_string.h for ACE_OS::memset, fixes + compile errors in several builds + +Thu Oct 7 17:32:18 2004 J.T. Conklin + + * ace/Malloc_Allocator.cpp: + * ace/Malloc_Allocator.inl: + + Moved all virtual methods from *.inl to *.cpp. + +Thu Oct 7 16:45:21 2004 Steve Huston + + * bin/MakeProjectCreator/config/global.features: Added uses_wchar = 0 + as a default. Says not to use ACE_USES_WCHAR. No affect on + ACE_HAS_WCHAR (a platform's ability to handle wide-char). This + setting is primarily to avoid those areas of ACE's examples that + aren't coded to work correctly with both narrow and wide chars. + + * apps/drwho/drwho.mpc: + * apps/gperf/src/gperf.mpc: + * apps/gperf/tests/gperf_test.mpb: + * apps/soreduce/soreduce.mpc: + * examples/C++NPv1/C++NPv1.mpc: + * examples/C++NPv2/C++NPv2.mpc: + Added "avoids += uses_wchar" to projects that don't builds cleanly + with ACE_USES_WCHAR. For drwho/gperf/soreduce, they weren't designed + for wide-char use and the changes to make them so are widespread. + For C++NPv1/2, there's code that would need to change, but is used + in the book prior to where narrow/wide char handling is introduced. + To keep the code in sync with the books, just don't try to build + this on wide-char builds. + + * m4/ace.m4: Added new configure option, --with-uses-wchar. If yes, + then ACE_USES_WCHAR is set. Defaults to no. + + * m4/config_h.m4: Added AH_TEMPLATE for ACE_USES_WCHAR. + +Thu Oct 7 11:42:40 2004 Chad Elliott + + * bin/tao_orb_tests.lst: + + Added the new Typedef_String_Array test to the list. + +Thu Oct 7 11:21:37 2004 john_c + + * ace/SPIPE.cpp + * ace/SPIPE.h + * ace/SPIPE_Acceptor.cpp + When closing stream pipes, only one end was being closed. + This led to file descriptors being leaked each time an + SPIPE_Acceptor is opened. Now both the file + descriptors are being closed in close method. + +Thu Oct 7 11:56:12 UTC 2004 Johnny Willemsen + + Reverted my change below, broke the LynxOS build + + Tue Sep 28 11:28:12 UTC 2004 Johnny Willemsen + + * ace/config-g++-common.h: + Removed setting of ACE_SIZEOF_LONG_DOUBLE, this is done in + Basic_Types.h + +Thu Oct 7 07:13:12 UTC 2004 Johnny Willemsen + + * ace/config-all.h: + When ACE_HAS_VERBOSE_NOTSUP is defined we print a message + with fprintf to let the user know he used a not supported + function. Use ACE_OS::fprintf for doing this, to solve compile + problems with VxWorks. + +Wed Oct 6 13:58:06 2004 J.T. Conklin + + * ace/Process.cpp: + * ace/Process.inl: + + Moved virtual method ACE_Managed_Process::unmanage() from + *.inl to *.cpp. + +Wed Oct 6 13:41:22 2004 J.T. Conklin + + * ace/Functor.cpp: + * ace/Functor.inl: + + Moved virtual dtor ACE_Command_Base::~ACE_Command_Base from + *.inl to *.cpp. + +Wed Oct 6 16:34:29 2004 Steve Huston + + * ace/OS_NS_wchar.cpp: For ACE_HAS_WCHAR, #include "ace/OS_NS_string.h" + since it's needed in some of the emulation methods. + +Wed Oct 6 14:50:53 2004 Chris Cleeland + + * tests/Message_Queue_Test.cpp (iterator_test): Changed initial + HWM specification for the QUEUE size to match the size of + 'buffer'. It seems very strange to try to send each element of + 'buffer' into the queue, but to set QUEUE's HWM potentially + lower than sizeof(buffer). This makes the test run to + completion on platforms like RH8 where it had been failing for a + good long while. + +Wed Oct 6 11:20:53 2004 J.T. Conklin + + * ace/Message_Queue.cpp: + * ace/Message_Queue.inl: + + Move virtual dtor ACE_Message_Queue_Base::~ACE_Message_Queue_Base + and virtual method ACE_Message_Queue_Base::state() from *.inl to + *.cpp. + + * ace/Signal.cpp: + * ace/Signal.inl: + + Move virtual dtor ACE_Sig_Adapter::~ACE_Sig_Adapter() from *.inl + to *.cpp. + +Wed Oct 6 12:25:29 2004 Steve Huston + + * examples/APG/Logging/Change_Mask.cpp: + * examples/APG/Logging/Howto_Syslog.cpp: + * examples/APG/Logging/Simple1.cpp: + * examples/APG/Logging/Simple2.cpp: + * examples/APG/Logging/Trace_Return.cpp: + * examples/APG/Logging/Use_Callback.cpp: + * examples/APG/Logging/Use_Callback2.cpp: + * examples/APG/Logging/Use_Logger.cpp: + * examples/APG/Logging/Use_Logging_Server.cpp: + * examples/APG/Logging/Use_Logging_Strategy.cpp: + * examples/APG/Logging/Use_LogManager.cpp: + * examples/APG/Logging/Use_Multiple_Sinks.cpp: + * examples/APG/Logging/Use_Ostream.cpp: + * examples/APG/Logging/Use_Stderr.cpp: + * examples/APG/Logging/Use_Syslog.cpp: + * examples/APG/Logging/Wrap_Macros.cpp: + * examples/APG/Logging/Wrap_Macros_Alt.cpp: + * examples/APG/Processes/Spawn.cpp: + * examples/APG/Reactor/Client.cpp: + * examples/APG/Shared_Memory/Hash_Map.cpp: + * examples/APG/Shared_Memory/Pool_Growth.cpp: + * examples/APG/Streams/RecordingDevice_Text.cpp: + ACE_TRACE string gets ACE_LIB_TEXT applied - don't wrap it in + ACE_TEXT. + + * examples/ASX/UPIPE_Event_Server/event_server.cpp: + * examples/ASX/UPIPE_Event_Server/Options.{cpp i h}: + * examples/ASX/UPIPE_Event_Server/Consumer_Router.{cpp h}: + * examples/ASX/UPIPE_Event_Server/Peer_Router.{cpp h}: + * examples/ASX/UPIPE_Event_Server/Event_Analyzer.{cpp h}: + * examples/ASX/UPIPE_Event_Server/Supplier_Router.{cpp h}: + * examples/C++NPv2/Service_Reporter.cpp: + Corrected narrow/wide-char issues. + +Wed Oct 6 15:10:12 UTC 2004 Johnny Willemsen + + * tests/Test_Output.cpp: + Added missing includes for VxWorks + +Wed Oct 6 15:00:12 UTC 2004 Johnny Willemsen + + * tests/Dynamic_Priority_Test.cpp: + When building with VxWorks include OS_NS_string.h + +Wed Oct 6 09:59:28 2004 Steve Huston + + * ace/Connector.cpp (connect_i): On connect fail, use + ACE_OS::last_error(), not errno, to check the cause. Thanks to + Todd Marshall for reporting this. + + * THANKS: Added Todd Marshall to the Hall of Fame. + +Tue Oct 5 13:12:56 2004 Dale Wilson + + * ace/Dev_Poll_Reactor.cpp: + * ace/Select_Reactor_T.cpp: + * ace/Signal.cpp: + Allow for bad status return from ACE_Sig_Set:is_member (int signo) + See Bugzilla #1954 for details. + +Tue Oct 5 11:16:53 2004 Dale Wilson + + * ace/OS_NS_stdlib.cpp: + Build error on VC7.1: initializing float w/ double may lose data + There was already a cast there to suppress the warning. I included + entire expression in the cast. + +Tue Oct 5 08:54:20 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + + Allow the addition to 'postcommand' within the scope of a custom + section. This is part of the MPC change from Tue Oct 5 08:53:10 + 2004. + +Mon Oct 4 13:34:08 2004 Ossama Othman + + * ace/OS_NS_stdlib.cpp: + + Added missing "ace/OS_NS_ctype.h" include. + + (mkstemp_emulation): + + ACE_OS::rand_r() accepts a reference to a non-const + ACE_RANDR_TYPE, not a pointer to a const one. Removed + "address-of" "&" from ACE_OS::rand_r() seed argument, and + removed the "const" qualifier from "seed" variable declaration. + +Mon Oct 4 14:22:03 2004 Martin Corino + + * ace/OS_NS_stdlib.cpp: + Fixed incorrect include ('OS_fcntl.h' -> OS_NS_fcntl.h'). + +Sun Oct 3 18:45:03 2004 Olli Savia + + * ace/OS_NS_stdlib.cpp: (realpath) + Removed extra "}". + +Fri Oct 1 23:41:11 2004 Ossama Othman + + * ace/OS_NS_ctype.h: + * ace/OS_NS_ctype.inl: + + Removed "const" qualifier from all pass-by-value function + parameters. There is no point in making such parameters + "const". + +Fri Oct 1 23:30:06 2004 Ossama Othman + + * ace/OS_NS_stdlib.h (mkstemp, mkstemp_emulation): + * ace/OS_NS_stdlib.inl (mkstemp): + * ace/OS_NS_stdlib.cpp (mkstemp_emulation): + + Added new mkstemp(3) implementation for the case where + ACE_LACKS_MKSTEMP is defined. It attempts to retain all of the + security features that vendor supplied mkstemp() implementation + provide, such as preventing symbolic link attacks. A race + condition, however, may exist when attempting to use this + implementation to create a temporary file on a network + filesystem. + + ACE_OS::mkstemp() is now available when ACE_LACKS_MKSTEMP is + defined. + + From Ganesh Pai + * ace/Hash_Map_Manager_T.h: + * ace/Map_Manager.h: + * ace/RB_Tree.h: + + Added new "lock_type" type trait. Allows one to more easily + determine the type of the underlying map/table lock. + +Fri Oct 1 11:54:17 MST 2004 Trevor Fields + + * bin/MakeProjectCreator/config/messaging.mpb: + Added requires += corba_messaging + +Fri Oct 1 11:35:59 2004 J.T. Conklin + + * Makefile.am: + * configure.ac: + + Changed to configure/build Kokyu if directory is present. + + * Kokyu/Makefile.am: + * Kokyu/tests/Makefile.am: + * Kokyu/tests/DSRT_MIF/Makefile.am: + * Kokyu/tests/EDF/Makefile.am: + * Kokyu/tests/FIFO/Makefile.am: + + New files. + +Thu Sep 30 22:20:10 2004 Ossama Othman + + * m4/tls.m4 (ACE_CHECK_TLS): + + Fixed problem where leading forward slash was not included in + the Kerberos include directory pathname. Thanks to Steve Huston + for reporting the problem. + +Thu Sep 30 19:30:23 2004 J.T. Conklin + + * ace/Makefile.am: + * ace/ace.mpc: + + Added Guard_T.* and IO_Cntl_Msg.h to header, inline, and + template files. + +Thu Sep 30 18:24:51 2004 J.T. Conklin + + * ace/Makefile.am: + + Update. + + * ace/ace.mpc: + + Remove headers that no longer exist / have been renamed. + +Thu Sep 30 18:06:41 2004 J.T. Conklin + + * ace/ace.mpc: + + Sorted header, inline, and template file sections to make it + easier to figure out if something is missing. + +Thu Sep 30 18:00:33 2004 J.T. Conklin + + * ace/ace.mpc: + + Added many missing header, inline, and template files. These + were based on what used to be installed with the old automake + builds and were lost now that ace/Makefile.am is generated by + MPC. + +Thu Sep 30 17:32:25 2004 J.T. Conklin + + * ACEXML/parser/parser/Makefile.am: + + Fix typo in includedir definition. + +Thu Sep 30 14:02:26 2004 Steve Huston + + * configure.ac: Added the same kernel version-checking code to the + ACE_HAS_EVENT_POLL check that Dev_Poll_Reactor.h uses to be sure + that if enabled, it will compile. + +Thu Sep 30 07:19:02 2004 J.T. Conklin + + * configure.ac: + + Removed aceConf.sh.in from AC_CONFIG_FILES. + + * aceConf.sh.in: + + Removed file. + +Thu Sep 30 01:26:41 2004 Ossama Othman + + * configure.ac: + + Added check for Linux event poll interface. + + * m4/config_h.m4: + + Added autoheader templates for the ACE_HAS_{EVENT,DEV}_POLL + preprocessor symbols. + + * m4/tls.m4 (ACE_CHECK_TLS): + + Fixed test for Kerberos include flags so that it wouldn't assume + that Kerberos include flags are needed for all cases. + + Fixed problem where the Kerberos include flags would not be set + correctly if running the `configure' script with cached results. + + Define and substitute new make variable + "ACE_KERBEROS_INCLUDES" that contains a directory rather than a + preprocessor command line option. The existing + "ACE_TLS_CPPFLAGS" preprocessor command line option variable is + not compatible with MPC. + + * ace/SSL/Makefile.am (libACE_SSL_la_CPPFLAGS): + + Added "-I$(ACE_KERBEROS_INCLUDES)" to the preprocessor flag + list. + + (libACE_SSL_la_LIBADD): + + Added "-lssl -lcrypto" to the library link list. + + * ace/SSL/ssl.mpc: + + Define new automake project-specific section that defines the + OpenSSL libraries to link, and added the + $(ACE_KERBEROS_INCLUDES) include directory variable to the + generated include path. + +Wed Sep 29 18:13:31 2004 Steve Huston + + * tests/tests.mpc: Added 'script' as a base project for Test_Output + and set Script_Files to run_test.pl and run_test.lst. This is to + pull the testing files to the build area for tests. + +Wed Sep 29 17:50:27 2004 Steve Huston + + * ace/OS_Memory.h: If ACE_HAS_NEW_NOTHROW is defined, then make sure + that ACE_NEW_THROWS_EXCEPTIONS is defined as well. The configure + script checks for ACE_HAS_NEW_NOTHROW and I believe that all + "up to date" compiler run-times throw an exception on a new() + failure. + +Wed Sep 29 17:30:25 2004 Irfan Pyarali + + * ace/Basic_Stats.{h,inl,cpp}: + + - Removed calculation of variation squared or deviation in the + output from dump_results(). I don't think either was been + calculated since the formula of (sum squared / samples_count) - + (avg squared) isn't a meaningful statistical value. + + - Also simplified division in dump_results() and removed + unnecessary conversions. + + - is no longer needed. + + - Made some minor simplifications to the code. + + - Made the fields of ACE_Basic_Stats public. + + - and were not being assigned in accumulate(). + + * performance-tests/SCTP/SOCK_SEQPACK_srv.cpp: + + Fixed a for loop. It should be 1 to n inclusive. + + * ace/DLL_Manager.cpp: + + Added additional debug statements. + + * bin/tao_other_tests.lst: + + TAO/performance-tests/Protocols/run_test.pl was added. + +Wed Sep 29 17:11:39 2004 Steve Huston + + * ace/TMCast/LinkListener.hpp: Added #include "Protocol.hpp" to + be able to see the Protocol namespace and "ace/OS_NS_string.h" + to see ACE_OS::memcpy(). + +Wed Sep 29 13:01:00 2004 J.T. Conklin + + * ACEXML/apps/svcconf/Makefile.am: + * ACEXML/common/Makefile.am: + * ACEXML/parser/parser/Makefile.am: + + Update so that libraries and headers are installed. + +Wed Sep 29 12:29:44 2004 Steve Huston + + * ace/TMCast/MTQueue.cpp: (new file) + * ace/TMCast/Group.cpp: Added/fixed explicit template instantiations + to get build working on Solaris, Forte 7. + +Wed Sep 29 12:20:19 2004 Steve Huston + + * examples/Smart_Pointers/widget_test.cpp: Include "ace/Null_Mutex.h" + to get the ACE_Null_Mutex specializations for ACE_Guards. Fixes + build error on Sun Forte C++. + +Wed Sep 29 09:41:02 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm: + + Rewrote this module so that the code is generic and completely + data driven. + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + When setting the MAKEFILE variable get the non-workspace decorated + name. This will allow GNUmakefile's generated from multiple + workspaces within the same directory to work. + +Wed Sep 29 14:05:12 UTC 2004 Johnny Willemsen + + * ace/config-win32-msvc-7.h: + * ace/config-win32-msvc-8.h: + Removed setting of ACE_HAS_BROKEN_NESTED_TEMPLATES. This is used + in CIAO and it seems not be needed anymore with vc7 and newer + +Wed Sep 29 09:54:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_win32_dmc.GNU: + Added rwho=0, dmc doesn't have the needed header files + +Wed Sep 29 09:51:12 UTC 2004 Johnny Willemsen + + * ace/os_include/netinet/os_tcp.h: + * ace/README: + * ace/config-tandem.h: + * ace/config-mvs.h: + Removed ACE_LACKS_TCP_H, ACE_LACKS_NETINET_TCP_H is already there + and better + + * ace/config-win32-dmc.h: + Added ACE_LACKS_NETINET_TCP_H + +Wed Sep 29 09:44:12 UTC 2004 Johnny Willemsen + + * ace/config-win32-dmc.h: + Added ACE_LACKS_SYS_MSG_H + +Wed Sep 29 07:46:12 UTC 2004 Johnny Willemsen + + * ace/config-tandem-nsk-mips-v2.h: + Fixed pre/post include + +Wed Sep 29 07:06:12 UTC 2004 Johnny Willemsen + + * bin/fuzz.pl: + Fixed pre/post check, the matching of the /**/ was not + correct. Added a check for _MSC_VER >= 1200. This is at + level 6, when we have updated more code, we can lower the + level. + +Tue Sep 28 21:05:37 2004 J.T. Conklin + + * Makefile.am: + + Changed to add TAO to subdirs if BUILD_TAO is defined. + +Tue Sep 28 15:38:57 2004 J.T. Conklin + + * ACEXML/apps/svcconf/svcconf.mpc: + * ACEXML/common/common.mpc: + * ACEXML/parser/parser/parser.mpc: + + Changed to inherit from core.mpb, so that libraries will + be installed. + +Tue Sep 28 15:22:01 2004 J.T. Conklin + + * bin/MakeProjectCreator/config/acedefaults.mpb: + + Changed to add $(ACE_BUILDDIR) to include path for automake + builds. + +Tue Sep 28 15:16:54 2004 J.T. Conklin + + * ACEXML/apps/svcconf/Makefile.am: + * ACEXML/common/Makefile.am: + * ACEXML/parser/parser/Makefile.am: + * ace/Makefile.am: + * ace/RMCast/Makefile.am: + * ace/SSL/Makefile.am: + * ace/TMCast/Makefile.am: + + Added includedir definitions so headers are installed in + the expected place. + + * ACEXML/apps/svcconf/Makefile.am: + * ACEXML/common/Makefile.am: + * ACEXML/parser/parser/Makefile.am: + * ace/Makefile.am: + * ace/RMCast/Makefile.am: + * ace/SSL/Makefile.am: + * ace/TMCast/Makefile.am: + * netsvcs/clients/Naming/Client/Makefile.am: + * netsvcs/clients/Naming/Dump_Restore/Makefile.am: + * netsvcs/lib/Makefile.am: + + Added _LDFLAGS definitions to set shared library version + numbers. + +Tue Sep 28 14:31:10 2004 J.T. Conklin + + * ACEXML/apps/svcconf/Makefile.am: + * ACEXML/common/Makefile.am: + * ACEXML/examples/SAXPrint/Makefile.am: + * ACEXML/parser/parser/Makefile.am: + * ACEXML/tests/Makefile.am: + * Makefile.am: + * ace/RMCast/Makefile.am: + * ace/SSL/Makefile.am: + * apps/gperf/Makefile.am: + * apps/gperf/src/Makefile.am: + * apps/gperf/tests/Makefile.am: + * configure.ac: + * netsvcs/servers/Makefile.am: + * tests/Makefile.am: + * tests/SSL/Makefile.am: + + Update so things successfully build when srcdir != builddir. + +Tue Sep 28 12:48:37 2004 Chad Elliott + + * include/makeinclude/wrapper_macros.GNU: + + My change from Mon Sep 27 14:10:15 2004 was causing problems with + cygwin builds. A better solution is to not set INSBIN at all and + allow it to be set in the generated makefile or by the user on the + make command line. + +Tue Sep 28 15:25:12 UTC 2004 Johnny Willemsen + + * ace/os_include/os_fcntl.h: + For the DMC compiler define _O_TEMPORARY, seems to lack this + +Tue Sep 28 14:38:12 UTC 2004 Johnny Willemsen + + * ace/config-win32-dmc.h: + When ACE_LACKS_STRUCT_DIR is defined, undef it, it must not be + set with the DMC compiler + +Tue Sep 28 14:14:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_win32_dmc.GNU: + Added -ND to the CFLAGS to indicate that we want to build with + thread and dll support. + +Tue Sep 28 09:13:57 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + + Borland Make has a maximum line length of roughly 32767. The + 'all' target could exceed that length given a large amount of + projects within a single workspace. In that case, we have to + create an 'all' target that specifically lists the target commands + and thereby creating a larger workspace makefile, but working + around the Borland Make limitation. + +Tue Sep 28 11:28:12 UTC 2004 Johnny Willemsen + + * ace/config-g++-common.h: + Removed setting of ACE_SIZEOF_LONG_DOUBLE, this is done in + Basic_Types.h + +Mon Sep 27 18:53:33 2004 J.T. Conklin + + * bin/MakeProjectCreator/config/script.mpb: + * bin/MakeProjectCreator/config/man.mpb: + + New files to support scripts and manpages. Inherit from these + files, add the list of scripts or manapages to Script_Files or + Man_Files, and MPC templates with script/manpage support will + do the right thing. + +Mon Sep 27 21:16:24 2004 Carlos O'Ryan + + * bin/fuzz.pl: + Do not complain about @file directives without a filename. + Doxygen assumes the current file as the filename, so it cannot + possibly be inconsistent. + +Mon Sep 27 17:44:08 2004 J.T. Conklin + + * bin/MakeProjectCreator/config/orbsvcslib.mpb: + + Changed to add $(TAO_BUILDDIR)/orbsvcs to include path for + automake builds. + +Mon Sep 27 17:04:29 2004 Steve Huston + + * Makefile.am: + * ace/Makefile.am: + * ace/QoS/Makefile.am: + * ace/RMCast/Makefile.am: + * ace/SSL/Makefile.am: + * ace/TMCast/Makefile.am: + * ACEXML/Makefile.am: + * ACEXML/common/Makefile.am: + * ACEXML/parser/Makefile.am: + * ACEXML/parser/parser/Makefile.am: + * ACEXML/examples/Makefile.am: + * ACEXML/examples/SAXPrint/Makefile.am: + * ACEXML/apps/Makefile.am: + * ACEXML/apps/svcconf/Makefile.am: + * ACEXML/tests/Makefile.am: + * apps/Makefile.am: + * apps/gperf/Makefile.am: + * apps/gperf/src/Makefile.am: + * apps/gperf/tests/Makefile.am: + * netsvcs/Makefile.am: + * netsvcs/lib/Makefile.am: + * netsvcs/clients/Makefile.am: + * netsvcs/clients/Logger/Makefile.am: + * netsvcs/clients/Naming/Makefile.am: + * netsvcs/clients/Naming/Client/Makefile.am: + * netsvcs/clients/Naming/Dump_Restore/Makefile.am: + * tests/Makefile.am: + * tests/SSL/Makefile.am: + * tests/RMCast/Makefile.am: + MPC-generated automake files, tweaked to work correctly. The rest of + the automake files will be checked in in the coming days. This set + replaces older ones that pre-dated the MPC-usage effort and were + largely out of date as they were. + +Mon Sep 27 14:10:15 2004 Chad Elliott + + * include/makeinclude/wrapper_macros.GNU: + + Set INSBIN to $(PWD) by default. To allow installation of apps + (even if 'install' is not used in the mpc file), the gnu template + always sets INSTALL to $(VBIN:%=$(INSBIN)/%) for exe's. Without + this change every exe built gets installed up in $(ACE_ROOT)/bin + which is not what we want. + +Mon Sep 27 13:46:21 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Modified the template to override the value of INSBIN if it is set + to '.'. This is similar to what is done for INSLIB and is an + iteration with rules.local.GNU. When installing, it checks for + $PWD but does not account for the fact that '.' is the same as + $PWD. + +Mon Sep 27 15:34:35 2004 Balachandran Natarajan + + * bin/MakeProjectCreator/config/ciao_deployment_stub.mpb: + + Added CIAO_DnC_Client to the list of libraries being linked in. + +Mon Sep 27 09:25:37 2004 Jeff Parsons + + * performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.cpp: + + Put back the recently-removed ACE_UINT64_DBLCAST_ADAPTER, + so now it and static_cast are both applied to the + computation of elapsed_time_per_invocation, which will hopefully + satisfy both MSVC 6 and MSVC 7.1. + +Mon Sep 27 12:54:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/xerces.mpb: + New base project which can be used when xerces is used + +Sun Sep 26 18:58:12 UTC 2004 Johnny Willemsen + + * ace/os_include/os_limits.h: + Removed setting of MAXSYMLINKS when not set, this is not the way + to fix compile problems in OS_NS_stdlib.cpp, set ACE_LACKS_SYMLINKS + instead if symbolic links are not supported + + * ace/config-openvms.h: + Added ACE_LACKS_SYMLINKS, removed MAXSYMLINKS + + * ace/config-vxworks.h: + Added ACE_LACKS_SYMLINKS, ACE_LACKS_REALPATH and + ACE_HAS_NONCONST_READV + +Sun Sep 26 21:06:53 2004 Olli Savia + + * ace/OS_NS_stdlib.h: + (mktemp, mkstemp) Changed protototype (parameter name) to match + implementation. + + * ace/OS_NS_stdlib.cpp: (realpath) + Added check for new macro ACE_LACKS_SYMLINKS to leave out symbolic + links related code. This fixes compile errors on platforms which + do not support symbolic links. Fixes bug 1900. + + * ace/README: + Added ACE_LACKS_SYMLINKS. + +Sun Sep 26 14:13:12 UTC 2004 Johnny Willemsen + + * ace/ICMP_Socket.cpp: + * ace/Ping_Socket.cpp: + Fixed incorrect ACE_TRACE usage + +Sun Sep 26 14:10:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/imr_activator.mpb: + * bin/MakeProjectCreator/config/imr_locator.mpb: + Added missing Id tag + +Sun Sep 26 10:10:12 UTC 2004 Johnny Willemsen + + * ace/ICMP_Socket.h: + * ace/Ping_Socket.h: + Added missing /**/ before include of pre/post.h to fix fuzz + errors + +Sun Sep 26 10:07:12 UTC 2004 Johnny Willemsen + + * ace/ACE_crc32.cpp: + * ace/ACE_crc_ccitt.cpp: + Removed trailing ; after namespace closure, fixes Tru64 build + warning + +Fri Sep 24 22:35:25 2004 Ossama Othman + + From Robert S. Iakobashvili and + Gonzalo A. Diethelm : + + * ace/ICMP_Socket.cpp: + * ace/ICMP_Socket.h: + * ace/ICMP_Socket.inl: + * ace/Ping_Socket.cpp: + * ace/Ping_Socket.h: + * ace/Ping_Socket.inl: + * tests/Network_Adapters_Test.cpp: + * tests/Network_Adapters_Test.h: + + New ICMP and "ping" support, and accompanying test. + + * ace/Makefile.am (libACE_Sockets_la_SOURCES): + * ace/ace.mpc: + * tests/Makefile.am: + * tests/tests.mpc: + + Added new ICMP and "ping" source files to the appropriate + source lists. + +Fri Sep 24 13:16:44 MST 2004 Trevor Fields + + * bin/tao_other_tests.lst: + Added new ImplRepo tests. + +Fri Sep 24 11:07:03 2004 J.T. Conklin + + * ace/ACE.h: + * ace/ACE_crc32.cpp: + * ace/ACE_crc_ccitt.cpp: + + Changed the buffer and iovec versions of ACE::crc32() and + ACE_crc_ccitt() family of functions to take an additional + initial/partial crc argument. This allows CRCs to be computed + over multiple buffers/iovecs by passing the result as input to + the next call. The default value allows callers to omit the + argument on the first call. + +Fri Sep 24 12:39:31 2004 Carlos O'Ryan + + * build/Linux/include/makeinclude/platform_linux.GNU: + Provide reasonable defaults for Boost.Test + + * bin/MakeProjectCreator/config/boost_unit_test.mpb: + Different sites may have different configurations for boost, + made the options needed to compile with it configurable via the + platform_macros.GNU file. + +Fri Sep 24 10:21:38 2004 Jeff Parsons + + * performance-tests/Server_Concurrrency/Leader_Follower/RT_CORBA_Leader_Follower.cpp: + + Replaced ACE_UINT64_DBLCAST_ADAPTER, which doesn't satisfy + the stricter MSVC 7.1, with static_cast. + +Fri Sep 24 10:55:34 2004 Steve Huston + + * ace/config-linux-common.h: If __USE_POSIX199309 is defined from + set ACE_HAS_CLOCK_GETTIME. This is most often the case. + +Fri Sep 24 10:40:11 2004 Steve Huston + + * apps/JAWS/clients/Blobby/blobby.cpp: + * apps/JAWS/clients/Blobby/Blob.{h cpp}: + * apps/JAWS/clients/Blobby/Blob_Handler.cpp: + * apps/JAWS/clients/Blobby/Options.{h cpp}: + * apps/JAWS/clients/Caching/http_client.cpp: + * apps/JAWS/clients/Caching/http_handler.cpp: + * apps/JAWS/server/HTTP_Server.{h cpp}: + * apps/JAWS/server/HTTP_Response.cpp: + Wide-char fixes. + +Fri Sep 24 10:34:26 2004 Steve Huston + + * bin/MakeProjectCreator/config/acedefaults.mpb: + * bin/MakeProjectCreator/config/acelib.mpb: For automake projects, + change ACE_ROOT to either top_srcdir or top_builddir depending + on whether it's looking for source (such as includes) or libraries. + + * performance-tests/Synch-Benchmarks/Synch_Lib/Synch_Benchmarks_Synch_Lib.mpc: + Changed base project from aceexe to acelib. This builds a library. + +Fri Sep 24 07:04:29 2004 J.T. Conklin + + * ace/Makefile.am: + * ace/ace.mpc: + + Add new files. + + * ace/ACE.h: + * ace/ACE_crc_ccitt.cpp: + + Added ACE::crc_ccitt() family of functions in new file + ACE_crc_ccitt.cpp. + + * ace/ACE_crc32.cpp: + + Changed table and shift expression so the special case with + additional masking for systems where ACE_UINT32 is more than 32 + bits wide (such as the Cray) is not needed. See "A Painless + Guide to CRC Error Detection Algorithms" by Ross Williams for + details. + + * ace/ACE.cpp: + * ace/ACE_crc32.cpp: + + Split out ACE::crc32() family of functions out of ACE.cpp into + new file ACE_crc32.cpp. + +Fri Sep 24 08:36:12 UTC 2004 Johnny Willemsen + + * ace/config-lite.h: + The ACE_UNUSED_ARG macro didn't work with the DMC compiler, so + added a new version of this macro that silences the not used + warning with DMC. + +Fri Sep 24 08:29:12 UTC 2004 Johnny Willemsen + + * ace/OS_NS_sys_socket.inl (sendto): + Removed usage of ACE_CONST_CAST + +Thu Sep 23 19:27:22 2004 J.T. Conklin + + * ace/ACE.cpp: + * ace/ACE.h: + + Changed iovec version of ACE::crc32 to take a const iovec. + +Thu Sep 23 19:59:12 UTC 2004 Johnny Willemsen + + * ace/Service_Manager.h: + * ace/Service_Object.h: + * ace/Signal.h: + * ace/Service_Types.h: + * ace/Stream_Modules.h: + * ace/Thread.inl: + Documentation fixes + + * ace/OS_NS_stdio.inl: + Added some checks for __DMC__ for the Digital Mars compiler + + * ace/OS_NS_stdio.cpp: + Added some checks for __DMC__ for the Digital Mars compiler and + use ::_close instead of _close, the former works with all compilers + and DMC, with DMC the _close is a macro. + +Thu Sep 23 19:53:12 UTC 2004 Johnny Willemsen + + * ace/streams.h: + Removed explicit check of _MSC_VER >= 1200, just check for _MSC_VER, + version 1200 is msvc6, the oldest msvc compiler we support, this + compiler and newer have pragma warning push/pop + +Thu Sep 23 12:07:02 2004 J.T. Conklin + + * ace/ACE.cpp: + * ace/ACE.h: + + Changed buffer version of ACE::crc32 to take a void * argument + (to avoid requiring callers to cast non-char data structures), + and a size_t length. + +Thu Sep 23 13:24:54 2004 Chad Elliott + + * ACEXML/tests/tests.mpc: + * examples/DLL/DLL.mpc: + * examples/Export/Export.mpc: + * examples/NT_Service/NT_Service.mpc: + * examples/Reactor/Ntalker/Reactor_Ntalker.mpc: + * examples/Web_Crawler/Web_Crawler.mpc: + * performance-tests/Misc/Misc.mpc: + * performance-tests/Server_Concurrency/Leader_Follower/Svr_Conc_Leader_Follower.mpc: + * performance-tests/Server_Concurrency/Queue_Based_Workers/Svr_Conc_Queue_Based_Workers.mpc: + * performance-tests/Synch-Benchmarks/Synch_Benchmarks.mpc: + * performance-tests/TCP/TCP.mpc: + * performance-tests/UDP/UDP.mpc: + + Added an 'exename' setting for the projects in these mpc files. + The cpp files contain some form of ACE_MAIN which used to be + recognized by MPC as an entry point. It is now necessary to set + exename since MPC will no longer recognize ACE_MAIN as a "main" + function. + +Thu Sep 23 15:13:12 UTC 2004 Johnny Willemsen + + * ace/Service_Config.h: + Doxygen improvement + +Thu Sep 23 07:42:33 2004 J.T. Conklin + + * ace/ACE.cpp: + + Changed buffer and iovec versions of ACE:crc32() to hoist + computing the end position out of the loop. + +Thu Sep 23 14:34:12 UTC 2004 Johnny Willemsen + + * ace/config-win32-dmc.h: + New config file for the Digital Mars C++ compiler (see + www.digitalmars.com). Not fully working, but a first version. + + * include/makeinclude/platform_win32_dmc.GNU: + New GNU file for the DMC compiler, also first version + + * ace/config-win32.h: + Added check for __DMC__ + + More small changes for the DMC compiler will follow + +Wed Sep 22 14:40:15 2004 J.T. Conklin + + * ace/ACE.cpp: + + Changed ACE::crc32() family of functions to NOT fold in the + length of the string/buffer/iovec into the CRC. + + * ace/ACE.cpp: + * ace/ACE.h: + + Changed return type of ACE::crc32() family of functions from + u_long to ACE_UINT32. + +Wed Sep 22 13:46:01 2004 Balachandran Natarajan + + * bin/msvc_cidlc.pl: + + CIDLC cannot be compiled in release mode. Enable only debug + mode. + +Wed Sep 22 10:35:18 2004 J.T. Conklin + + * ace/ACE.cpp: + + Added const qualifier to ACE_OS::crc_table_. + +Wed Sep 22 17:37:12 UTC 2004 Johnny Willemsen + + * ace/Dynamic_Service_Base.h: + Doxygen fix + +Wed Sep 22 07:04:46 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Fixed a bug that I introduced in my Tue Sep 21 06:38:17 2004 + change. INSBIN can't be set to '.'. It causes many problematic + interactions with rules.local.GNU and rules.nested.GNU. + +Tue Sep 21 20:13:40 2004 J.T. Conklin + + * configure.ac: + + Added checks for getipnodebyaddr() and getipnodebyname() which + set ACE_LACKS_GETIPNODEBYADDR and ACE_LACKS_GETIPNODEBYNAME. + + * ace/OS_NS_netdb.inl: + + Changed __GLIBC__'s in conditionals to ACE_LACKS_GETIPNODEBYADDR + or ACE_LACKS_GETIPNODEBYNAME. + + * ace/config-linux-common.h: + * ace/config-netbsd.h: + + Added #define for ACE_LACKS_GETIPNODEBYADDR and + ACE_LACKS_GETIPNODEBYNAME. + +Tue Sep 21 17:50:27 2004 Steve Huston + + * examples/APG/Naming/naming.mpc: Correct the exename for Nodelocal. + It was conflicting with that of Netlocal, which, when generated, + confused Visual Age C++ templates and automake. + +Tue Sep 21 12:16:39 2004 Steve Huston + + * ACEXML/parser/parser/Parser.cpp: parse_encoding_decl(), don't + crash if the input source doesn't declare an encoding. + reset(), if current_ is already 0 (the case if no parsing ever + really got started) don't dereference it. + +Tue Sep 21 18:00:12 UTC 2004 Johnny Willemsen + + * ace/OS_NS_unistd.inl (readlink): + Only when ACE_LACKS_READLINK this is not supported, the checks for + win32 or wince are removed. + + * ace/config-WinCE.h: + * ace/config-win32-common.h: + Define ACE_LACKS_READLINK + +Tue Sep 21 15:29:12 UTC 2004 Johnny Willemsen + + * tests/QtReactor_Test.cpp: + Fixed incorrect ACE_TRACE usage, thanks to Vincent Newsum + for reporting this, this fixes + BUG 1940. + +Tue Sep 21 06:38:17 2004 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + This is a fix for [Bug 1915]. I moved the block of code that + set up INSBIN and INSLIB before the include of wrapper_macros.GNU + to ensure that the values for 'install', 'dllout' and 'libout' are + used instead of the defaults found in wrapper_macros.GNU. I + didn't use the patch supplied for this bug because it didn't take + into accout the possibility of overriding the INSBIN and INSLIB + values on the make command line. Thanks to Thomas Girard + for reporting this and supplying a + patch. + +Tue Sep 21 09:56:12 UTC 2004 Johnny Willemsen + + * ace/QtReactor.cpp: + Fixed incorrect ACE_TRACE usage, thanks to Vincent Newsum + for reporting this, this fixes + BUG 1939. We should setup a daily build with Qt soon. + +Mon Sep 20 18:07:03 2004 Balachandran Natarajan + + * tests/run_test.pl: + + Reverted the change "Sun Sep 19 20:36:43 2004 Balachandran + Natarajan " since it was giving + troubles on every platform. + +Mon Sep 20 06:54:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/global.features: + Set ssl to 0 again, added wince=0, seems this has been removed by + accident + +Sun Sep 19 20:36:43 2004 Balachandran Natarajan + + * tests/run_test.pl: + + Fix for BUG 1924. Please see + + http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1924 + + for details. Thanks to Paul for the + patch. + +Sun Sep 19 14:51:32 2004 Carlos O'Ryan + + * bin/tao_orb_tests.lst: + Add yet another test to the list. + +Sun Sep 19 13:49:31 2004 Carlos O'Ryan + + * bin/MakeProjectCreator/config/global.features: + Add new "boost" feature. It should be enabled if you + are planning to use the boost::unit_test_framework classes. + Naturally you will also have to install boost (www.boost.org) + I am writing unit tests for some classes, and I am too stubborn + to use a sub-standard unit tests frameworks like cxxtest, but + too smart to roll my own. + + * bin/MakeProjectCreator/config/boost_unit_test.mpb: + New base project for unit tests based on the + boost::unit_test_framework. Try it, it is good for you. + +Sun Sep 19 08:03:57 2004 Balachandran Natarajan + + * bin/msvc_cidlc.pl: + + A new perl script to compile and build the CIDL compiler. + +Fri Sep 17 13:19:05 2004 Chad Elliott + + * tests/Dirent_Test.cpp: + * tests/Message_Queue_Test_Ex.cpp: + + Corrected minor build problems for VxWorks. + +Fri Sep 17 11:53:10 2004 Chad Elliott + + * ace/ACE.cpp: + + Return the system variable, maxFiles, in ACE::max_handles() + instead of the FD_SETSIZE which does not reflect the actual limit. + + * ace/Capabilities.cpp: + + Template instantiations for the ACE_Hash and + ACE_Equal_To were conflicting with template + specialization of the same on VxWorks. I'm not sure if they are + required for any compiler, but I wanted to be safe and exclude + them in a #if !defined (VXWORKS). + + * ace/Proactor.cpp: + + Moved the template instantiations for + auto_ptr and + auto_ptr into the right #if clause. + + * ace/config-vxworks5.x.h: + + The current GNU compiler for VxWorks (2.96) is the only old + compiler that could possible build ACE and it supports template + specialization, lacks auto_ptr and has various other platform + differences. + + * ace/os_include/os_limits.h: + + Define MAXSYMLINKS if it isn't defined by the system headers. + I chose 20 which is what I found in other system header files. + + * ace/os_include/sys/os_stat.h: + + Define S_ISLNK if it isn't defined by the system headers. + +Fri Sep 17 12:09:27 2004 Steve Huston + + * examples/ASX/CCM_App/CCM_App.cpp: + * examples/ASX/CCM_App/SC_Server.cpp: + * examples/ASX/Event_Server/Event_Server/event_server.cpp: + * examples/ASX/Event_Server/Event_Server/Options.{h cpp}: + * examples/ASX/Event_Server/Event_Server/Supplier_Router.{h cpp}: + * examples/ASX/Event_Server/Event_Server/Event_Analyzer.{h cpp}: + * examples/ASX/Event_Server/Event_Server/Consumer_Router.{h cpp}: + * examples/ASX/Event_Server/Event_Server/Peer_Router.cpp: + * examples/ASX/Event_Server/Transceiver/transceiver.{h cpp}: + * examples/ASX/Message_Queue/buffer_stream.cpp: + Char width fixes to build clean with wide-char. + +Fri Sep 17 08:42:50 2004 Steve Totten + + * bin/PerlACE/Process_Win32.pm (Executable): + Fixed an error in which Executable() returns a UNIX-style + path instead of a Windows-style path if the IGNOREEXESUBDIR + member is set. Now, test scripts can use + PerlACE::Process::IgnoreExeSubDir() to make sure an + executable is found in the path specified without the + addition of the setting of -ExeSubDir. This change was + required for Windows Release and Static builds after the + installation directory for various common utilities was + changed to %ACE_ROOT%\bin. + +Fri Sep 17 09:30:12 UTC 2004 Johnny Willemsen + + * ace/config-cygwin32.h: + Added several defines, result of autoconf testing with Cygwin + +Thu Sep 16 20:40:06 2004 Ossama Othman + + * bin/tao_other_tests.lst: + + Removed SecurityLevel1 test from this list of tests to run. The + SecurityLevel1 IDL module is longer supported by TAO. + +Fri Sep 17 00:25:17 2004 Olli Savia + + * ace/IOStream_T.h: + * ace/Object_Manager.cpp: + Changed NULL to 0 to silence compile time warning. + +Thu Sep 16 14:14:31 2004 J.T. Conklin + + * bin/MakeProjectCreator/config/event_serv.mpb: + + Changed to inherit from svc_utils. + +Thu Sep 16 12:36:29 2004 Steve Huston + + * ace/POSIX_Proactor.{h cpp}: Change the SystemType enumerator value + names to begin with ACE_. This avoids conflicts with other facilities + that use an OS_ prefix. + +Thu Sep 16 09:22:08 2004 Dale Wilson + + * ace/OS_NS_Thread.cpp: + In ACE_TSS_Cleanup::exit, defer deleting TSS objects + until it is no longer necessary to access the ACE_TSS_Cleanup + itself. One of the objects to be deleted is a Thread_Exit + which may eventually cause (or at least allow) the deletion + of the ACE_TSS_Cleanup. + The original code worked like this but I changed it when + I added additional cleanup operations to the exit method. + +Thu Sep 16 08:14:14 2004 Chad Elliott + + * ace/Memory_Pool.cpp: + * ace/config-hpux-11.00.h: + + Removed a bug workaround for aCC A.03.04. It is no longer a + problem to specify other mmap base addresses when running + 64-bit HP-UX applications. + +Thu Sep 16 07:47:09 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Added a CUSTOM_TARGETS macro that will allow users to access + custom targets that can be generated with the use of the + 'verbatim' clause in mpc files. + +:09 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Added a CUSTOM_TARGETS macro that will allow users to access + custom targets that can be generated with the use of the + 'verbatim' clause in mpc files. + +Thu Sep 16 10:07:00 UTC 2004 Martin Corino + + * apps/Gateway/Peer/peer.mpc: + * apps/Gateway/Peer/svc.conf: + * apps/Gateway/Gateway/gateway.mpc: + * apps/Gateway/Gateway/svc.conf: + + Changed MPC configuration to generate the correct makefiles/project + files for building a separate daemon executable and service object + shared library. + Changed service configurator files to use correct PATH specification. + +Thu Sep 16 08:28:12 UTC 2004 Johnny Willemsen + + * ace/os_include/os_limits.h: + Added special include for VxWorks, it defines _POSIX_TIMER_MAX + in time.h + +Thu Sep 16 08:20:12 UTC 2004 Johnny Willemsen + + * ace/config-cygwin32.h: + Added ACE_HAS_POSIX_SEM and ACE_LACKS_NAMED_POSIX_SEM + + * ace/OS_NS_sys_mman.{h,inl}: + Moved include ace/os_include/sys/os_mman.h from inl to header + file, so that we get all the needed constants when building + with Cygwin and inlining disabled + +Thu Sep 16 07:55:12 UTC 2004 Johnny Willemsen + + * m4/config_h.m4: + Removed ACE_HAS_CYGWIN32_SOCKET_H + +Thu Sep 16 07:33:12 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added the new orbsvcs libs + +Wed Sep 15 15:32:59 2004 J.T. Conklin + + * configure.ac: + + Added checks for fgetws and fputws. + + * ace/OS_NS_stdio.h: + * ace/OS_NS_stdio.inl: + + Added feature test macros ACE_LACKS_FGETWS and ACE_LACKS_FPUTWS + and disable wide character versions of fgets and fputs if they + are not present. Thanks to Johnny Willemsen for reporting this + bug. + +Wed Sep 15 15:17:39 2004 J.T. Conklin + + * ace/OS_NS_string.h: + + Changed preprocessor conditional for the declaration of the wide + character version of strtok_r_emulation() to use ACE_WCHAR and + ACE_LACKS_WCSTOK instead of ACE_HAS_REENTRANT_FUNCTIONS. Thanks + to Johnny Willemsen for reporting this bug. + +Wed Sep 15 11:41:53 2004 Douglas C. Schmidt + + * ace/ACE.cpp (set_handle_limit): Removed the + + ACE_NOTREACHED (return 0); + + and replaced it with + + return 0; + + Thanks to Martin Corino for reporting this. + +Wed Sep 15 10:46:07 2004 Dale Wilson + + * ace/Log_Msg.cpp: + + Explicitly initialize a static int to zero to make it clear that + the initial value is important. + +Wed Sep 15 12:51:12 UTC 2004 Johnny Willemsen + + * configure.ac: + Removed check for ACE_HAS_CYGWIN32_SOCKET_H, this is not needed + anymore + +Tue Sep 14 22:44:39 2004 Balachandran Natarajan + + * ace/Inet_Addr.cpp: + + Fix for the problem reported by Charlie Duke, which is that + ACE_INET_Addr::string_to_addr cannot accept an address string + produced by ACE_INET_Addr::addr_to_string method. The output of + addr_to_string method is of the form "[ipv4]:port" while the + string_to_addr accepts "ipv4:port" i.e. cannot handle "[]". + + The fix for this is not to include "[]" in + string_to_addr. Thanks to Charlie Duke . + + * THANKS: Updated Charlie's email address. + +Tue Sep 14 15:02:05 2004 Dale Wilson + + * NEWS: + Updated: TSS leak has been conquered. + +Tue Sep 14 11:07:25 2004 Steve Huston + + * ace/Malloc_T.{h inl}: Added ACE_Cached_Allocator<>::pool_depth() + and ACE_Dynamic_Cached_Allocator<>::pool_depth(). Each returns the + number of items in the cache available for allocating. Thank you to + Jeff Jones for this addition. + + * tests/Cached_Allocator_Test.cpp: Added tests of the new pool_depth() + method. + + * THANKS: Added Jeff Jones to the Hall of Fame. + +Tue Sep 14 11:58:12 UTC 2004 Johnny Willemsen + + * ace/Dynamic_Service.h: + Doxygen improvement + +Tue Sep 14 10:21:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + Added support for the Intel 8.1 C++ Compiler + +Tue Sep 14 07:01:12 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added TAO/orbsvcs/orbsvcs/CosNaming_Skel to the list of projects + to build first. + +Mon Sep 13 19:09:23 2004 J.T. Conklin + + * configure.ac: + * m4/config_h.m4: + + Changed to use ACE_CHECK_HAS_FUNC([scandir]) and get rid of + explicit definition, autoconf template macro, etc. + +Mon Sep 13 20:33:25 2004 Douglas C. Schmidt + + * ace/Select_Reactor_Base.cpp: Changed the + ACE_Select_Reactor_Handler_Repository::open() method so that it + uses the generalized ACE::set_handle_limit() method to not lower + the handles, which caused problems for applications that want to + use small reactor sizes but not limit the number of handles in + the process. Thanks to Eider Oliveira for suggesting this. + + * ace/ACE.cpp, + ace/ACE.h: Generalized ACE::set_handle_limit() so + it can be told not to lower the handle limit. + +Mon Sep 13 18:15:44 2004 J.T. Conklin + + * ACE_wrappers/m4/platform.m4: + + Added new ACE_FUNC_IOCTL_ARGTYPES macro, used to set + ACE_IOCTL_TYPE_ARG2. + + * ACE_wrappers/ace/config-netbsd.h: + + Added ACE_IOCTL_TYPE_ARG2 definition. + + * ACE_wrappers/ace/OS_NS_stropts.h: + * ACE_wrappers/ace/OS_NS_stropts.inl: + + Added feature test macro ACE_IOCTL_TYPE_ARG2 (which defaults to + int) so that ACE_OS::ioctl uses the same type as ::ioctl. This + help avoid sign extension problems on 64 bit platforms that use + unsigned long. + +Mon Sep 13 15:52:04 2004 Dale Wilson + + * ace/OS_NS_Thread.h: + * ace/OS_NS_Thread.cpp: + * ace/TSS_T.cpp: + Bugzilla Bug 1542 TSS Leak revisited. + The goal is for each thread's TSS object to be + deleted at thread exit time, and for the TSS + key itself to be released when: + the last thread stops using it, or + the ACE_TSS (if any) is deleted + which ever comes *last*. + +Mon Sep 13 14:56:53 2004 Balachandran Natarajan + + * ace/RB_Tree.h (class ACE_RB_Tree): + * ace/RB_Tree.cpp: + + Added a special constructor useful for providing a valid vtable + and allocator if the tree is reconstructed from shared + memory. Thanks to Lothar Werzinger for the patches. + +Mon Sep 13 12:49:22 2004 Steve Huston + + * ace/config-aix-4.x.h: Alter the value of ACE_SIZEOF_WCHAR based + on whether or not __64BIT__ is set (4 if yes, 2 if no). See + /usr/include/sys/types.h for verification. + + * apps/Gateway/Gateway/Connection_Handler.cpp: Add missing #include + "ace/OS_NS_string.h". + +Mon Sep 13 12:39:11 2004 Steve Huston + + * ace/DLL_Manager.cpp: Added explicit template instantiations for + Wed Sep 8 17:13:41 2004 Steve Huston + +Mon Sep 13 06:50:46 2004 J.T. Conklin + + * bin/MakeProjectCreator/config/dslogadmin_serv.mpb: + + Changed to inherit from svc_utils. + +Mon Sep 13 12:02:12 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added TAO/orbsvcs/orbsvcs/CosNotification_Skel + +Mon Sep 13 10:42:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + When using the 8.0 compiler, disable certain warnings about padding + +Mon Sep 13 09:57:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + The intel compiler on Itanium is called icc, not ecc anymore + +Mon Sep 13 09:46:12 UTC 2004 Johnny Willemsen + + * ace/OS_NS_Thread.inl: + Fixed compile error in VxWorks specific code + +Mon Sep 13 09:44:12 UTC 2004 Johnny Willemsen + + * ace/config-icc-common.h: + Added ACE_HAS_STD_TEMPLATE_CLASS_MEMBER_SPECIALIZATION + +Mon Sep 13 09:31:12 UTC 2004 Johnny Willemsen + + * configure.ac: + Added ACE_CHECK_LACKS_HEADERS for wchar.h. + +Mon Sep 13 09:06:12 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added TAO/orbsvcs/orbsvcs/CosNaming_Serv to the list of projects + to build first. + +Sun Sep 12 17:20:39 2004 J.T. Conklin + + * bin/MakeProjectCreator/config/rteventlogadmin.mpb + + Update *.mpb files to reflect new libraries. + + * bin/MakeProjectCreator/config/dseventlogadmin.mpb + * bin/MakeProjectCreator/config/dseventlogadmin_serv.mpb + * bin/MakeProjectCreator/config/dseventlogadmin_skel.mpb + * bin/MakeProjectCreator/config/dslogadmin.mpb + * bin/MakeProjectCreator/config/dslogadmin_serv.mpb + * bin/MakeProjectCreator/config/dslogadmin_skel.mpb + * bin/MakeProjectCreator/config/dsnotifylogadmin.mpb + * bin/MakeProjectCreator/config/dsnotifylogadmin_serv.mpb + * bin/MakeProjectCreator/config/dsnotifylogadmin_skel.mpb + + Split Logging, Event Logging, and Notify Logging Services into + client stub, servant skeleton, and service implementation + libraries. + + * bin/MakeProjectCreator/config/ec_use_typed_events_serv.mpb: + * bin/MakeProjectCreator/config/event_serv.mpb + * bin/MakeProjectCreator/config/event_skel.mpb + + Updated dependencies. + + * bin/MakeProjectCreator/config/ec_use_typed_events_skel.mpb: + + Removed file, events skeleton w/typed events does not require + any additional dependencies. They have been moved to _serv. + +Sun Sep 12 17:20:12 UTC 2004 Johnny Willemsen + + * ace/Log_Msg.cpp (log): + In then handling of %Z replaced an ACE_NEW_RETURN with a + ACE_NEW_NORETURN, so that when allocation fails, we just do + a break instead of return. Seems this code was written before + the existence of ACE_NEW_NORETURN. This also fixes the crashing + of the Intel 8.0 C++ Compiler on Itanium on this file, no idea + why this caused a crash, that is one for Intel to sort out. + +Sat Sep 11 11:41:12 UTC 2004 Johnny Willemsen + + * apps/Gateway/Peer/Peer.cpp: + * apps/Gateway/Peer/peerd.cpp: + Added missing includes to fix compile problems in Cygwin build + +Fri Sep 10 22:54:55 2004 Balachandran Natarajan + + * bin/MakeProjectCreator/config/ciao_server.mpb: + * bin/MakeProjectCreator/config/ciao_server_dnc.mpb: + + Added utils to the list of projects that are inherited. + +Sat Sep 11 00:49:39 2004 Olli Savia + + * ace/IOStream.h: + Changed NULL to 0 to silence compile time warning. + +Fri Sep 10 15:39:22 2004 Steve Huston + + * ace/High_Res_Timer.{h inl cpp}: Added a new static method that + calculates the difference between two ACE_hrtime_t quantities. + Takes into account that the time counter may have wrapped around + between the start and end. Changed all time difference calculations + to use the new elapsed_hrtime() method. + +Fri Sep 10 13:53:00 UTC 2004 Martin Corino + + * ace/Time_Value.h: + * ace/Time_Value.inl: + + Moved '#include "ace/Basic_Types.h"' from Time_Value.cpp to + Time_Value.h because it's needed there since ACE_UINT64 is + introduced (see below). + +Thu Sep 09 18:29:17 2004 Ossama Othman + + * ace/Time_Value.h (msec): + * ace/Time_Value.inl (msec): + + Even though MSVC++ 6 supports 64 bit integers, it does not + support the "long long" syntax. Instead it supports its own + "__int64" built-in type. Use "ACE_UINT64" instead of "unsigned + long long". Fixes syntax errors exhibited by MSVC++ 6. + +Thu Sep 9 16:40:27 2004 Steve Huston + + * apps/Gateway/Gateway/Connection_Handler.cpp: + * apps/Gateway/Gateway/Connection_Handler_Connector.cpp: + * apps/Gateway/Gateway/File_Parser.{h cpp}: + * apps/Gateway/Gateway/Gateway.cpp: + * apps/Gateway/Gateway/gatewayd.cpp: + * apps/Gateway/Peer/Options.{h cpp}: + * apps/Gateway/Peer/Peer.{h cpp}: Narrow/wide char fixes. + + * apps/Gateway/Gateway/Options.h: Removed const char *connector_host() + method because it's not ever defined or referenced. + + * apps/Gateway/Peer/peer.mpc: New project definition. + +Thu Sep 9 16:17:38 2004 Olli Savia + + * apps/JAWS3/jaws3/Templates.cpp: + Added explicit static template member instantiations. + +Thu Sep 9 05:58:12 UTC 2004 Johnny Willemsen + + * ace/OS_NS_unistd.cpp: + Implemented num_processors and num_processors_online for Cygwin + +Wed Sep 8 21:50:13 2004 Balachandran Natarajan + + * ace/Time_Value.h: + * ace/Time_Value.inl: + + The change added in this checkin + + Wed Sep 8 10:17:46 2004 Douglas C. Schmidt + should not be available on platforms that lacks long long. + +Wed Sep 8 17:13:41 2004 Steve Huston + + * ace/DLL_Manager.{h cpp}: Added new private method, + ACE_DLL_Handle::get_dll_names(). + This builds the list of names to try to dlopen() based on the + specified dll_name and the platform's prefix/suffix/decorator + configuration. It doesn't try to load anything and doesn't do any + search path games like ACE::ldfind(). All of the rules for locating + files based on environments and security policy are administered by + the OS. This just feeds names to try, allowing for example, svc.conf + to continue simply specifying base names like "ACE". This restores + basic OS functionality, such as the ability to load a DLL from the + same directory as the loading executable, as well as closing + potential security loopholes opened by ACE's scanning the search + path and passing absolute paths to dlopen(). + ACE_DLL_Handle::open() now calls get_dll_names() for a list of names + to try unless ACE_MUST_HELP_DLOPEN_SEARCH_PATH is defined, in which + case it does the old ACE::ldfind() call and dlopen()s the + absolute path as it did before this change. + + This also allows DLLs to load on wide-char non-Windows builds without + messing with the sprintf() format specs in Lib_Find.cpp. + +Wed Sep 8 10:17:46 2004 Douglas C. Schmidt + + * ace/Time_Value.{h,inl} Added a new msec() method that uses + unsigned long long to compute the value to prevent overflow. + Thanks to Boris Kaminer for reporting this. + +Wed Sep 8 08:15:00 UTC 2004 Simon Massey + + * tests/FIFO_Test.cpp + Fixed one of the failing tests under HPUX requires delay like AIX + +Wed Sep 8 08:15:00 UTC 2004 Simon Massey + + * tests/IOStream_Test.cpp + Sorry, I got the wrong header file yesterday; isspace() is defined in + ace/os_include/os_ctype.h NOT #include ace/OS_NS_ctype.h + +Tue Sep 7 16:39:28 2004 J.T. Conklin + + * bin/MakeProjectCreator/config/dseventlogadmin.mpb + * bin/MakeProjectCreator/config/dsnotifylogadmin.mpb + * bin/MakeProjectCreator/config/lifecycle.mpb + * bin/MakeProjectCreator/config/notifytest.mpb + * bin/MakeProjectCreator/config/rtnotify.mpb + * bin/MakeProjectCreator/config/time.mpb + + Update *.mpb files to reflect new libraries. In many cases this + required adding inheriting from additional base projects, as + libraries were being linked in because of naming -- which was + once the service implementation (and thus pulled in lots of + other libraries) and is now just the Naming client stubs. + + * bin/MakeProjectCreator/config/ec_use_typed_events.mpb + * bin/MakeProjectCreator/config/ec_use_typed_events_skel.mpb + * bin/MakeProjectCreator/config/event.mpb + * bin/MakeProjectCreator/config/event_serv.mpb + * bin/MakeProjectCreator/config/event_skel.mpb + * bin/MakeProjectCreator/config/naming.mpb + * bin/MakeProjectCreator/config/naming_serv.mpb + * bin/MakeProjectCreator/config/naming_skel.mpb + * bin/MakeProjectCreator/config/notification.mpb + * bin/MakeProjectCreator/config/notification_serv.mpb + * bin/MakeProjectCreator/config/notification_skel.mpb + * bin/MakeProjectCreator/config/trading.mpb + * bin/MakeProjectCreator/config/trading_serv.mpc + * bin/MakeProjectCreator/config/trading_skel.mpc + + Split Event, Naming, Notification, and Trading Services into + client stub, servant skeleton, and service implementation + libraries. + +Tue Sep 7 15:45:00 UTC 2004 Simon Massey + + * examples/IOStream/server/iostream_server.cpp + getpid() from ace/OS_NS_unistd.h actually used in both halves of + #ifdef #else #endif guard so the conditional arround the #include + is actually wrong and so has been removed. + + * tests/IOStream_Test.cpp + isspace() used without #include ace/OS_NS_ctype.h, added this to + the guarded section where it is used. + +Tue Sep 7 07:08:26 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/BorlandProjectCreator.pm: + + As part of the -expand_env option, I moved some functionality out + of the ProjectCreator.pm and into this module which was only used + by this project creator. + +Tue Sep 7 06:41:27 2004 Chad Elliott + + * include/makeinclude/rules.local.GNU: + + Removed the if check for static_libs_only. The STATIC_LINK_FLAG + option will be added to the LDFLAGS if static_link is set to 1. + +Mon Sep 6 10:04:12 UTC 2004 Johnny Willemsen + + * ace/Sock_Connect.cpp: + When using VxWorks also include OS_NS_stdio.h + +Mon Sep 6 07:12:12 UTC 2004 Johnny Willemsen + + * ace/OS.h: + Removed include of sys/modem.h for HPUX, this is already done in + os_include/os_termios.h + +Fri Sep 3 15:53:19 2004 Steve Huston + + * ace/config-sunos5.8.h: Added ACE_HAS_TIMEZONE. This may be + pertinent to previous Solaris versions, but I don't have any + to test on. + +Fri Sep 3 12:34:41 2004 J.T. Conklin + + * ace/OS_NS_sys_mman.inl: + + Removed redundant conditional used to disable madvise for WIN32 + systems. Instead use ACE_LACKS_MADVISE feature test macro. + + * ace/config-win32-common.h: + + Added ACE_LACKS_MADVISE definition. + +Fri Sep 3 15:10:22 2004 Steve Huston + + * ace/config-aix-5.x.h: Add ACE_HAS_TIMEZONE. + + * ace/OS_NS_time.h: Include "ace/OS_NS_errno.h" - ACE_NOTSUP_RETURN + sets errno. + +Fri Sep 3 21:36:51 2004 Olli Savia + + * apps/drwho/File_Manager.cpp: + Use ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION + to check if explicit template instantiation is needed. + Thanks to Johnny Willemsen for informing me about this + macro. + +Fri Sep 3 20:02:20 2004 Olli Savia + + * ace/OS_NS_unistd.inl: + There is no need to check missing prototype since this has + already been taken care by os_unistd.h. + + * ace/os_include/arpa/os_inet.h: + * ace/os_include/os_stdlib.h: + * ace/os_include/os_strings.h: + * ace/os_include/os_unistd.h: + To make things easier to maintain use new ACE_LACKS_xxx_PROTOTYPE + macros to check whether we need to declare missing function + prototype. + + * ace/README: + Added new ACE_LACKS_xxx_PROTOTYPE macros + + * ace/config-lynxos.h: + Modified to follow changes above. + +Fri Sep 3 19:35:48 2004 Olli Savia + + * ace/Log_Msg.h: + Removed broken macro redefinition code to prevent people + thinking that it actually works. Cleaned up #undef's. + +Fri Sep 3 19:30:18 2004 Olli Savia + + * ace/Global_Macros.h: + LynxOS no longer needs special macro handling. + +Fri Sep 3 19:13:24 2004 Olli Savia + + * apps/drwho/File_Manager.cpp: + LynxOS 3.x needs explicit template instantiation. + +Fri Sep 3 10:44:27 2004 Steve Huston + + * ace/Process_Manager.cpp (append_proc): If the process_table_ needs + to be enlarged, make sure it's to a size greater than 0. If the + original size is 0, change it to DEFAULT_SIZE, else double it (as + was always done). + (resize): Changed to not shrink the process_table_ array. Primarily + to guard against changing it to 0, but also guards against having to + decide what to do with entries that won't fit in the new array. + +Fri Sep 3 07:43:12 UTC 2004 Johnny Willemsen + + * examples/DLL/test_dll.cpp: + * examples/Export/test.cpp: + Fixed for unicode builds + +Thu Sep 2 16:39:29 2004 J.T. Conklin + + * ace/config-linux-common.h: + * ace/config-netbsd.h: + + Changed to define ACE_HAS_TIMEZONE. + + * ace/OS_NS_time.h: + + Changed ace_timezone() to use ACE_HAS_TIMEZONE feature test + macro instead of OS-specific macros to determine whether to + use global timezone variable or the gettimeofday() function + to obtain the current timezone. + + * configure.ac: + + Changed to call ACE_VAR_TIMEZONE. + + * m4/platform.m4: + + Added new macro, ACE_VAR_TIMEZONE. Sets new feature test macro + ACE_HAS_TIMEZONE if platform supports global timezone variable. + +Thu Sep 2 16:43:29 2004 Steve Huston + + * m4/ace.m4: Added AM_CONDITIONAL for BUILD_EXCEPTIONS, BUILD_THREADS, + BUILD_ACE_CODECS, BUILD_ACE_FILECACHE, BUILD_ACE_OTHER, + BUILD_ACE_TOKEN, BUILD_ACE_UUID, BUILD_RWHO, BUILD_WFMO, and + BUILD_WINREGISTRY so the MPC 'requires' feature can properly weed + things out without configure- and build-time errors. + +Thu Sep 2 12:51:00 UTC 2004 Martin Corino + + * tests/Process_Manager_Test.cpp: + + Changed commandline buildup of childprocesses to start with './' + for non-WIN32 platforms as with other tests. + By default test did not run on OpenVMS without this. + +Thu Sep 2 12:51:00 UTC 2004 Martin Corino + + * ace/config-openvms.h: + + Added ACE_LACKS_UNIX_SIGNALS since OpenVMS cannot use signals + in combination with PTHREAD. + + * ace/Process.cpp: + * ace/Process_Manager.cpp: + + Implemented alternatives in timed wait() functions for systems + with ACE_LACKS_UNIX_SIGNALS and !WIN32. + +Thu Sep 2 07:24:20 2004 Chad Elliott + + * bin/MakeProjectCreator/config/core.mpb: + * bin/MakeProjectCreator/templates/bor.mpd: + + Switch the borland template over to use the INSTALL_THIS_TARGET + template value instead of a 'verbatim' section to do the same + thing. + +Thu Sep 2 09:12:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_gnuwin32_common.GNU: + With gcc 3.4.1 -mcpu is deprecated, but -mtune must be used + +Thu Sep 2 07:24:12 UTC 2004 Johnny Willemsen + + * apps/FaCE/FaCE.mpc: + * apps/FaCE/FaCENOACE.mpc: + Added missing Id tag + +Wed Sep 1 17:16:29 2004 Steve Huston + + * ace/Reverse_Lock_T.inl: + * ace/Typed_SV_Message.inl: Added #include "ace/config-all.h" to get + missing macros (ACE_NOTSUP_RETURN, ACE_TRACE). + + * apps/JAWS/clients/Caching/http_client.cpp: + * apps/JAWS/clients/Caching/http_handler.cpp: + * apps/JAWS/server/HTTP_Response.cpp: + * apps/JAWS/server/HTTP_Server.{h cpp}: + * apps/JAWS/server/IO.cpp: + * apps/JAWS3/jaws3/Task_Timer.cpp: Add missing includes. + +Wed Sep 1 12:32:31 2004 Ossama Othman + + * ace/OS_NS_Thread.inl (mutex_init): + + Explicitly cast the unused returned value of an + ACE_ADAPT_RETVAL macro call to "void" to address a "right-hand + operand of comma has no effect" warning exhibited by GNU g++ + 3.4.x. Thanks to Bogdan Jeram and + Paul Lew for reporting the warning. + +Wed Sep 1 11:35:44 2004 J.T. Conklin + + * m4/config_h.m4: + + Removed ACE_UINT64_FORMAT_SPECIFIER autoheader template. It + is now defined within ACE_CHECK_FORMAT_SPECIFIERS. + + * m4/platforms.m4: + + Added new macro ACE_CHECK_FORMAT_SPECIFIERS, which is used to + define preprocessor macros that overide the defaults provided + for size_t, ssize_t, ACE_INT64, and ACE_UINT64 *printf format + specifiers. I don't think autoconf feature tests are possible, + especially if we ever hope to support cross compilation, but at + least this pulls everything into one place. + +Wed Sep 1 12:52:40 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm: + + Split out the ACE specific portion of AutomakeWorkspaceCreator.pm + into a new helper module. The helper module is dynamically loaded + in by the AutomakeWorkspaceCreator. + +Wed Sep 1 10:01:57 2004 J.T. Conklin + + * ace/SOCK_Dgram_Bcast.cpp: + + Added !defined(__NetBSD__) to conditional so sockaddr.sa_len + version of the code will be used. Fixes SOCK_Bcast_Dgram_Test + failures. + + * ace/Sock_Connect.cpp: + + Added !defined(__NetBSD__) to conditional so sockaddr.sa_len + version of the code will be used. + +Wed Sep 1 12:40:28 2004 Steve Huston + + * ace/config-aix-4.x.h: Changed the ACE_HAS_3_PARAM_WCSTOK test to + include _XOPEN_SOURCE >= 500, not == 500. Fixes compile error + on AIX 5.2. + +Wed Sep 1 12:45:12 UTC 2004 Johnny Willemsen + + * ace/Dump_T.cpp: + Added include of config-all.h to get ACE_TRACE + +Wed Sep 1 07:43:46 2004 Douglas C. Schmidt + + * tests/Message_Queue_Notifications_Test.cpp (producer): Fixed + this test so it works with the changes to + ACE_Message_Queue::is_full_i() below. Thanks to Rick Robinson + for this fix, as well. + + * ace/Message_Queue_T.inl: Changed the implementation of + is_full_i() so the comparision operator is >= rather than >, + which makes it possible to use a 0 high water mark to disable + the enqueue side of the queue. Thanks to Rick Robinson + for reporting this. + + * ace/POSIX_Proactor.h: Updated the documentation to use + the right names for ACE_POSIX_SIG_Proactor and + ACE_POSIX_AIOCB_Proactor. Thanks to John D. Robertson + for motivating this fix. + +Wed Sep 1 07:00:39 2004 Chad Elliott + + * bin/MakeProjectCreator/config/global.features: + + Disable the wince feature setting. + + * apps/FaCE/FaCE.mpc: + * apps/FaCE/FaCENOACE.mpc: + + Adding mpc files to replace the vcp files. These projects will + only build on wince so they require the wince feature which is + disabled by default. + + * apps/FaCE/FaCE.vcp: + * apps/FaCE/FaCE.vcw: + * apps/FaCE/FaCENOACE.vcp: + * apps/FaCE/FaCENOACE.vcw: + + Removed these files. + +Wed Sep 1 06:48:34 2004 Chad Elliott + + * examples/Mem_Map/file-reverse/Mem_Map_File_Reverse.mpc: + + With the current version of MPC, we must specify the exename for + this project. MPC no longer automatically determines that + ACE_TMAIN is the entry point. + +Wed Sep 1 10:12:12 UTC 2004 Johnny Willemsen + + * ace/config-hpux-11.00.h: + Added several new defines, these are gathered by comparing an + autoconf generated config.h and the original file. It seems HPUX + has much more stuff than we currently use. Everything is tested + on HPUX 11i v2, maybe it breaks older versions, I don't think so + but if it will, our daily builds will trigger this and we have + to make the defines than dependent on the HPUX version. Added are: + ACE_HAS_NEW_NO_H, ACE_HAS_AUTOMATIC_INIT_FINI, + ACE_HAS_LONG_MAP_FAILED, ACE_HAS_MEMCHR, + ACE_HAS_POSITION_INDEPENDENT_POINTERS, ACE_HAS_POSIX_GETPWNAM_R, + ACE_HAS_P_READ_WRITE, ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS, + ACE_LACKS_PRI_T, ACE_HAS_SIG_C_FUNC, ACE_HAS_SIGSUSPEND, + ACE_HAS_SOCKLEN_T, ACE_HAS_SYS_ERRLIST, ACE_HAS_VOIDPTR_MMAP, + ACE_HAS_VOIDPTR_SOCKOPT, ACE_HAS_GETRUSAGE_PROTOTYPE, ACE_HAS_TIMOD_H, + ACE_HAS_SYS_XTI_H, ACE_HAS_PTHREAD_RESUME_NP. If you don't agree to + one of these defines, let us know, then we also have some work on + the autoconf support, because autoconf gave info all these can be + setup. + +Wed Sep 1 07:02:12 UTC 2004 Johnny Willemsen + + * ace/Synch_Options.cpp: + * ace/Shared_Object.cpp: + * ace/Read_Buffer.cpp: + * ace/SV_Message.inl: + Added include of config-all.h to get ACE_TRACE + +Tue Aug 31 12:18:01 2004 J.T. Conklin + + * ace/config-netbsd.h: + + Moved ACE_HAS_PENTIUM into "defined(__i386__)" conditional. + +Tue Aug 31 14:38:19 2004 Steve Huston + + * ace/OS_NS_errno.h: + * ace/os_include/os_errno.h: Include config-lite.h instead of + config-all.h to minimize re-includes. + + * ace/OS_NS_errno.inl: Include config-all.h to pick up ACE_TRACE. + +Tue Aug 31 08:36:12 UTC 2004 Johnny Willemsen + + * ace/config-hpux-11.00.h: + Added ACE_HAS_STD_TEMPLATE_CLASS_MEMBER_SPECIALIZATION for the HP aCC + compiler + +Tue Aug 31 08:16:12 UTC 2004 Johnny Willemsen + + * ace/OS_NS_time.cpp: + When ACE_LACKS_NATIVE_STRPTIME is defined, include + os_include/os_ctype.h to get isdigit + +Tue Aug 31 00:21:48 2004 J.T. Conklin + + * ace/config-unixware-7.1.0.h: + * ace/config-unixware-7.1.0.udk.h: + + Removed vestigial ACE_HAS_LAZY_V definition. + +Tue Aug 31 00:17:45 2004 J.T. Conklin + + * ace/config-unixware-7.1.0.h: + * ace/config-unixware-7.1.0.udk.h: + + Removed vestigial ACE_HAS_IOMANIP_NO_H definition. + +Mon Aug 30 23:57:58 2004 J.T. Conklin + + * ace/config-netbsd.h: + * ace/config-unixware-7.1.0.h: + * ace/config-unixware-7.1.0.udk.h: + + Removed vestigial ACE_HAS_SYS_IOCTL_H definition. ACE now uses + ACE_LACKS_SYS_IOCTL_H. + + * ace/config-integritySCA.h: + + Removed vestigial ACE_LACKS_SYS_FILE_H definition. + + * ace/config-integritySCA.h: + * ace/config-psos-diab-mips.h: + * ace/config-qnx-neutrino.h: + * ace/config-rtp-62x.h: + * ace/config-rtp-pre62x.h: + + Removed vestigial ACE_LACKS_RPC_H definition. + +Mon Aug 30 23:47:41 2004 J.T. Conklin + + * configure.ac: + + Added check for ACE_LACKS_TOWLOWER and ACE_LACKS_TOWUPPER. + +Mon Aug 30 23:39:33 2004 J.T. Conklin + + * configure.ac: + + Changed check for libc.h and osfcn.h to not export a feature + test macro definition, as the results are only needed within + the configure script itself. + +Mon Aug 30 23:28:03 2004 J.T. Conklin + + * ace/config-macos.h: + * ace/config-macos-panther.h: + + Removed vestigial ACE_HAS_PTHREAD_CANCEL and ACE_HAS_PTHREAD_KILL + definitions. + +Mon Aug 30 23:18:51 2004 J.T. Conklin + + * ace/config-linux-common.h: + * ace/config-openbsd.h: + + Removed vestigial ACE_HAS_MKSTEMP definition. ACE now uses + ACE_LACKS_MKSTEMP. + +Mon Aug 30 22:39:24 2004 J.T. Conklin + + * tests/TSS_Test.cpp: + + Changed the number of iterations from 100 to 25 so the test will + run on systems with pthreads with the minimum required number of + thread keys (128). This should still be sufficient to check the + TSS wrappers without exceeding the minimum requirements. + +Mon Aug 30 18:31:28 2004 J.T. Conklin + + * ace/config-netbsd.h: + + Add ACE_SSIZE_T_FORMAT_SPECIFIER and ACE_SIZE_T_FORMAT_SPECIFIER + definitions for NetBSD/amd64. + + * netsvcs/clients/Logger/Makefile.am: + * netsvcs/clients/Naming/Client/Makefile.am: + * netsvcs/clients/Naming/Dump_Restore/Makefile.am: + * netsvcs/servers/Makefile.am: + + Fix the _LDADD definitions that MPC doesn't get right yet. + + * configure.ac: + + Added checks for: ACE_LACKS_STRCHR, ACE_LACKS_STRCSPN, + ACE_LACKS_STRERROR, ACE_LACKS_STRPBRK, ACE_LACKS_STRSPN, + ACE_LACKS_STRTOD, ACE_LACKS_STRTOL, ACE_LACKS_STRTOUL, + and ACE_LACKS_SWAB. + + Added check for ACE_HAS_STRNLEN. + + Added checks for: ACE_LACKS_ARPA_INET_H, ACE_LACKS_DIRENT_H, + ACE_LACKS_DLFCN_H, ACE_LACKS_ERRNO_H ACE_LACKS_FCNTL_H, + ACE_LACKS_NET_IF_H, ACE_LACKS_NETDB_H, ACE_LACKS_NETINET_IN_H, + ACE_LACKS_SEARCH_H, ACE_LACKS_SEMAPHORE_H, ACE_LACKS_SIGNAL_H, + ACE_LACKS_STDLIB_H, ACE_LACKS_STRING_H, ACE_LACKS_STRINGS_H, + ACE_LACKS_SYS_IOCTL_H, ACE_LACKS_SYS_IPC_H, ACE_LACKS_SYS_MMAN_H, + ACE_LACKS_SYS_RESOURCE_H, ACE_LACKS_SYS_SEM_H, ACE_LACKS_SYS_SHM_H, + ACE_LACKS_SYS_SOCKET_H, ACE_LACKS_SYS_STAT_H, ACE_LACKS_SYS_TIME_H, + ACE_LACKS_SYS_UN_H, ACE_LACKS_SYS_WAIT_H, ACE_LACKS_TERMIOS_H, and + ACE_LACKS_TIME_H. + + Removed checks for ACE_HAS_SYS_IOCTL_H. + +Mon Aug 30 17:38:22 2004 Steve Huston + + Changes that get PocketPC/WinCE back into a state where they build. + + * ace/config-WinCE.h: Add ACE_LACKS_ASSERT_H, ACE_LACKS_SEARCH_H, + and ACE_LACKS_WCHAR_H for WinCE 3. + Add ACE_LACKS_SWAB for all versions. + + * ace/config-win32-msvc.h: Set (or clear) ACE_LACKS_RTTI based on + whether or not the compiler switch to enable rtti is used. + + * ace/OS_Errno.{h inl}: + * ace/OS_NS_errno.{h inl}: Moved ACE_CE_Errno from OS_Errno to + OS_NS_errno. This seems like a more sensible place for an errno + replacement, and avoids having to add includes for OS_Errno.h to + a bunch of other files. + + * ace/OS_NS_stdio.inl (rename): In the char* variant, always convert + the names to wide-char for WinCE. + + * ace/OS_NS_stdlib.{h cpp inl}: Don't attempt ACE_OS::realpath() for + ACE_HAS_WINCE. It has no native support and there's no + ACE_OS::getcwd() to fake it with. + + * ace/OS_NS_stropts.{h cpp}: The 9-arg version of ACE_OS::ioctl is + ok for WinCE, but the ACE_QoS one is disabled. Changed both files + to implement this. They were mismatched for CE. + + * ace/OS_NS_sys_select.inl: Replace #include ace/os_include/os_errno.h + with ace/OS_NS_errno.h to pick up errno correctly across all + platforms. + + * ace/OS_NS_sys_socket.cpp: Moved #endif closing #ifndef ACE_HAS_WINCE + to encompass join_leaf() to match what's done in the class decl. + + * ace/OS_NS_sys_stat.inl (mkdir, stat): Added #include + "ace/OS_NS_macros.h" to get ACE_ADAPT_RETVAL. + For the char* mkdir() and stat(), CE needs to convert + the strings to wide-char. + + * ace/OS_NS_time.h: Moved the day_of_week and month_name const + strings into the ACE_OS namespace, as OS_NS_time.cpp desires. + + * ace/OS_NS_time.cpp: Removed the MT-only compile block around the + day_of_week and month_name arrays. As suspected by Don Hinton, + this is an incorrect condition. + Also added #include "ace/OS_NS_stdio.h" for ACE_HAS_WINCE, as the + ctime_r emulation needs it. + + * ace/OS_NS_unistd.inl (unlink): Convert path to wide-char for WinCE. + (rmdir): RemoveDirectory() takes only 1 arg. + wide-char getcwd() is a NOTSUP for WinCE, as is the char* version. + + * ace/Proactor.cpp: Add #include "ace/config-lite.h" since the + user config is needed to decide whether to compile this file. + Also remove 'tv' param name from the stubbed-out version of + run_event_loop(ACE_Time_Value&). + +Mon Aug 30 16:24:51 2004 Steve Huston + + * NEWS: Noted that the wide-char stuff is done and autoconf is in + progress. + +Mon Aug 30 11:54:01 2004 Ossama Othman + + * bin/MakeProjectCreator/config/security.mpb: + + Added missing "interceptors" and "corba_messaging" base + projects. + + * bin/MakeProjectCreator/config/ssliop.mpb: + + Added missing "interceptors" base project. + +Mon Aug 30 13:02:22 2004 Steve Huston + + * ace/Basic_Types.h: Don't use sizeof() when defining ACE_SIZEOF_WCHAR. + Other code (e.g. ACEXML) in ACE uses ACE_SIZEOF_WCHAR in + preprocessor tests, so it needs to be a preprocessor constant. + If the config file doesn't set it, and on an XPG4 system, set + the size to 4. If it's wrong, Basic_Types_Test will catch it. + + * tests/Basic_Types_Test.cpp: Remove the comment that says the check + for ACE_SIZEOF_WCHAR is pointless. It's now important. + +Mon Aug 30 10:05:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/amh.mpb: + * bin/MakeProjectCreator/config/ami.mpb: + Both use idlflags, so add taoidldefaults as base project + +Mon Aug 30 06:39:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/amh.mpb: + AMH is dependent on messaging and doesn't require ami + +Sun Aug 29 16:53:00 UTC 2004 Martin Corino + + * ace/config-linux-common.h: + + Added '__GLIBC_MINOR__ < 2' test for setting ACE_POLL_IS_BROKEN + on Alpha platform. + +Fri Aug 27 11:40:37 2004 J.T. Conklin + + * bin/MakeProjectCreator/ftrtevent.mpb: + * bin/MakeProjectCreator/portablegroup.mpb: + + Changed to inherit from messaging.mpb. + + * bin/MakeProjectCreator/rtsched.mpb: + + Changed to inherit from svc_utils.mpb. + +Fri Aug 27 13:38:25 2004 Steve Huston + + * netsvcs/clients/Naming/Client/Client_Test.cpp: + * netsvcs/clients/Naming/Client/main.cpp: + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.{h cpp}: + * netsvcs/clients/Naming/Dump_Restore/main.cpp: + * netsvcs/servers/main.cpp: + * websvcs/lib/URL_Addr.cpp: Fix wide-char errors. + +Fri Aug 27 12:01:37 2004 Steve Huston + + * netsvcs/lib/Client_Logging_Handler.cpp: + * netsvcs/lib/Log_Message_Receiver.{h cpp}: + * netsvcs/lib/Name_Handler.{h cpp}: + * netsvcs/lib/Server_Logging_Handler_T.{h cpp}: + * netsvcs/lib/TS_Server_Handler.{h cpp}: + * netsvcs/lib/TS_Clerk_Handler.{h cpp}: Correct Service Configurator + framework entrypoints (init(), etc.) to match ACE_TCHAR* instead of + char*. Also corrected char-width problems and naked text literals. + + * ACEXML/parser/parser/Parser.cpp: Fixed uninitialized variable. + +Fri Aug 27 08:18:21 2004 Balachandran Natarajan + + * bin/footprint_stats.sh: + + Fixed the path to the libraries. Thanks to Johnny for spotting + the error in the scoreboard. + +Fri Aug 27 10:20:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/security.mpb: + Security library uses valuetype, so added valuetype as base + project. + +Fri Aug 27 09:48:12 UTC 2004 Johnny Willemsen + + * examples/QOS/Change_Receiver_FlowSpec/QoS_Util.{h,cpp}: + * examples/QOS/Change_Receiver_FlowSpec/receiver.cpp: + Fixed unicode build errors + +Fri Aug 27 09:36:12 UTC 2004 Johnny Willemsen + + * examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.{h,cpp,i}: + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.{h,cpp,i}: + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.{h,cpp}: + Fixed unicode build errors + +Fri Aug 27 09:06:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/loadbalancing.mpb: + Loadbalancing uses iorinterceptor, so added that as base + +Fri Aug 27 08:06:12 UTC 2004 Johnny Willemsen + + Integrated ORTrefactor_2 branch into main. Previously the PortableServer + library was dependent on IORInterceptor, ObjRefTemplate and Valuetype, + this dependency has been removed. PortableServer doesn't use these libs + anymore, but IORInterceptor, ObjRefTemplate and Valuetype are now + dependent on PortableServer. This will reduce the size of corba servers + which don't use IORInterceptor, ObjRefTemplate and Valuetype. + + This are the needed MPC changes. Without MPC this would have been a + hard job to change all makefiles by hand. + + Fri Aug 20 13:18:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/portableserver.mpb: + * tao/PortableServer.mpc: + PortableServer is not dependent on ValueType anymore, so removed it + as base project + + Fri Aug 20 11:47:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/iorinterceptor.mpb: + When using iorinterceptor use portableserver and objreftemplate + + * bin/MakeProjectCreator/config/objreftemplate.mpb: + When using objreftemplate, you must use portableserver + + * bin/MakeProjectCreator/config/portableserver.mpb: + When using portableserver there is no need to use objreftemplate and + iorinterceptor + +Fri Aug 27 07:40:00 UTC 2004 Martin Corino + + * ace/ace_wchar.h: + + Fixed for broken OpenVMS build because of missing + and includes. + +Thu Aug 26 19:55:03 2004 J.T. Conklin + + * ace/Makefile.am: + + Fixed thinko in last change. CVS and .svn directories *and* + their contents must be pruned in install-local-data target. + +Thu Aug 26 19:37:10 2004 J.T. Conklin + + * ace/Makefile.am: + + Changed dist-hook and install-local-data targets to skip .svn as + well as CVS directories to support subversion. + +Thu Aug 26 19:22:31 2004 J.T. Conklin + + * ace/Makefile.am: + + Added If_Then_Else.h to HEADER_FILES. + +Thu Aug 26 11:53:26 2004 Steve Huston + + * ace/Time_Value.h: Added extern "C++" around the ACE_Time_Value class + declaration for WinCE. This is a total hack that I hate, but I have + not been able to find any other way around it. The same code + worked before the great ACE_OS reorg, but I don't know what tickled + it to start misbehaving. Without the hack, eVC complains that + the operators are C functions and so can't return a class. + + * ace/Dev_Poll_Reactor.{cpp h}: Inserted /**/ in #include directives + to silence MSVC warnings that the files are missing dependencies. + +Thu Aug 26 11:39:29 2004 Steve Huston + + * ACEXML/common/XML_Types.h: Add #include "ace/Basic_Types.h" to + pick up ACE_SIZEOF_WCHAR. + +Thu Aug 26 12:22:12 UTC 2004 Johnny Willemsen + + * ace/OS_NS_unistd.cpp: + Tru64 also provides sysconf functionality to retrieve number + of cpu's. Implemented ACE_OS::num_processors() and + ACE_OS::num_processors_online() for Tru64 (Digital Unix) + + * tests/OS_Test.cpp: + Corrected copy/paste error + +Thu Aug 26 11:54:12 UTC 2004 Johnny Willemsen + + * tests/OS_Test.cpp: + Added test for ACE_OS::num_processors() and + ACE_OS::num_processors_online() + +Thu Aug 26 09:23:12 UTC 2004 Johnny Willemsen + + * ACE-INSTALL.html: + I know we are working on footprint, but stating that an entire + build of ACE/TAO could use more than 2MB of diskspace is an + understatement ;-). Updated this to could use more than 4GB of + diskspace, which is something we have seen on the 64 bit systems. + Also updated the peak memory usage from 256Mb to 512Mb, the + Notification Service is a very memory consuming services when + being build. + +Thu Aug 26 09:16:12 UTC 2004 Johnny Willemsen + + * ACE-INSTALL.html: + Updated instructions to build SSL with Borland C++, no OpenSSL + patch is necessary anymore and now MPC must be used. Updated HPUX + supported platforms. + +Thu Aug 26 07:58:00 UTC 2004 Martin Corino + + * ace/config-linux-common.h: + + Included check on defined(__alpha) for correctly setting 64 bit + format specifiers. + + * examples/Threads/cancel.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/Benchmark_Performance.cpp: + + Fixed 64 bit conversion warnings. + +Thu Aug 26 06:47:12 UTC 2004 Johnny Willemsen + + * ace/Auto_Ptr.h: + Readded disappeared include of post.h + +Wed Aug 25 23:31:02 2004 Chris Cleeland + + * include/makeinclude/platform_linux.GNU: + + Fixed an error caused by a misplaced newline in Rich's previous + commit. + + * include/makeinclude/platform_sunos5_sunc++.GNU: + + Brought over the following changes from OCITAO 1.3a. + Added -ladm to LIBS. This is needed for SunOS 5.6 for + resolving symbols for regular expression processing (e.g., + compile, step), and does not appear to cause a problem on + later version of SunOS. + + Change directory that is argument to ld's '-R' to use the new + $ACE_ROOT/lib directory rather than $ACE_ROOT/ace. + +Wed Aug 25 21:10:37 2004 J.T. Conklin + + * configure.ac: + + Fixed tipo introduced by: + Mon Aug 23 23:23:18 2004 Ossama Othman + +Wed Aug 25 17:33:47 2004 J.T. Conklin + + * ace/config-netbsd.h: + + Removed ACE_NTRACE definition. It slipped in again. + +Wed Aug 25 16:00:11 2004 Chris Cleeland + + * ace/Auto_Ptr.h: + * ace/Auto_Ptr.inl: + + Added new ACE_Auto_Ptr which can be used more portably than + auto_ptr even with the ACE auto_ptr workarounds. Specifically, + this obviates the need for the ACE_AUTO_PTR_RESET macro, and + will have better performance than the pre-standard auto_ptr that + comes with VC6. + +Wed Aug 25 14:58:51 2004 Rich Seibel + + * include/makeincludes/platform_linux.GNU: + Generalized the way the rt library is searched. The + previous code did not find it on RedHat AS 3.0 for opteron. + +Wed Aug 25 14:49:11 2004 Rich Seibel + + * ace/Basic_Types.h: + added __x86_64 to long double to satisy opteron. + +Wed Aug 25 11:15:33 2004 Ossama Othman + + * ACE-INSTALL.html: + + Updated ACE_SSL library build notes to refer to MPC, i.e. the + proper way to add ACE_SSL support to GNUmakefiles and MSVC++ + workspace/project files. Thanks to Johnny for pointing out that + the documentation was out of date. + + Wrap the "Last modified" line within an Emacs "hhtms" block to + allow Emacs to automatically update the date and time this file + was last modified. + +Wed Aug 25 11:46:49 2004 Steve Huston + + * ace/os_include/sys/os_pstat.h: If ACE_HAS_SYS_PSTAT_H, include + and (not ) as directed by + HP-UX man page. HP-UX 11 is the only config that sets this. + +Wed Aug 25 08:46:02 2004 Chad Elliott + + * include/makeinclude/wrapper_macros.GNU: + + Fixed the ace_filecache misspelling. + +Wed Aug 25 08:38:29 2004 Steve Huston + + * ace/OS_NS_unistd.inl (rmdir): Removed the ACE_USES_WCHAR case from + the char* version of this method. + +Wed Aug 25 09:36:12 UTC 2004 Johnny Willemsen + + * ACE-INSTALL.html: + Minor updates to Cygwin notes + +Wed Aug 25 09:04:12 UTC 2004 Johnny Willemsen + + * ace/os_include/sys/os_pstat.h: + Corrected incorrect doxygen file tag + +Wed Aug 25 08:47:00 UTC 2004 Martin Corino + + * ace/config-lite.h: + + Introduced new macro ACE_HAS_PROCESS_SPAWN to be able to do + better checks for availability of subprocessing than is + possible with ACE_LACKS_FORK. See [Bug 1793]. + + * tests/MEM_Stream_Test.cpp: + * tests/Malloc_Test.cpp + * tests/SOCK_Dgram_Bcast_Test.cpp + + Changed to use new ACE_HAS_PROCESS_SPAWN macro to test for + subprocessing capabilities. See [Bug 1793]. + +Wed Aug 25 01:19:03 2004 J.T. Conklin + + * configure.ac: + + Add checks for ACE_HAS_SYS_PSTAT_H and ACE_HAS_SYS_LOADAVG_H. + +Wed Aug 25 08:17:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_hpux_aCC.GNU: + The warnings disabled in this file are for major version 03 of aCC + only (PA-RISC), for version 05 (Itanium), disable 1016 and 1031, + these are binary incompatible warnings. + +Wed Aug 25 07:12:12 UTC 2004 Johnny Willemsen + + * ace/os_include/sys/os_loadavg.h: + * ace/os_include/sys/os_pstat.h: + New files to include sys/loadavg.h and sys/pstat.h when + ACE_HAS_SYS_LOADAVG_H and ACE_HAS_SYS_PSTAT_H is set + + * ace/config-hpux-11.00.h: + HPUX has sys/pstat.h, so added define ACE_HAS_SYS_PSTAT_H + + * ace/README: + Documented ACE_HAS_SYS_LOADAVG_H and ACE_HAS_SYS_PSTAT_H + + * ace/OS.h: + Removed including of sys/pstat.h, it is really not needed here + + * ace/OS_NS_unistd.cpp: + Instead of including sys/pstat.h include os_include/sys/os_pstat.h + +Wed Aug 25 07:04:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_hpux_aCC.GNU: + Changed CXXVERS to CXXMINORVERS and added CXXMAJORVERS, + we just compare minor version at this moment, but we really + should also check major vers soon, major version 3 is aCC + on PARISC, version 5 is on Itanium. Changed the way we + detect itanium to a portable way that works with all + HPUX versions. + +Tue Aug 24 19:59:18 2004 J.T. Conklin + + * ace/config-netbsd.h: + + Fixed typo in last change, add back typedef for ACE_UINT64. + +Tue Aug 24 19:32:07 2004 J.T. Conklin + + * ace/config-netbsd.h: + + Removed extraneous cruft left over from autoheader generated + file. Added conditional support for NetBSD/AMD64. + +Tue Aug 24 15:03:22 2004 Steve Huston + + * ace/OS_NS_Thread.inl (thread_mutex_init): Fixed wchar_t version to + pass a 0 sa value. Corrects the passing of the lock_type value + through to ACE_OS::mutex_init(), restoring behavior of recursive + mutexes. + +Tue Aug 24 14:07:22 2004 Steve Huston + + Changes to improve the functionality of wide-char operation on + non-Windows platforms: + + * ace/ace_wchar.h: If ACE_HAS_XPG4_MULTIBYTE_CHAR is defined, but not + ACE_HAS_WCHAR, set ACE_HAS_WCHAR. + + * ace/ACE.cpp (timestamp): Use ACE_TCHAR for temp char arrays, + not char. If ACE_USES_WCHAR on non-Windows, use %ls for printf + strings, not %s. + + * ace/ARGV.cpp (constructor): Replaced most of the body with a call + to ACE_OS::argv_to_string(). + + * ace/Basic_Types.h: + * ace/Cleanup.h: + * ace/Object_Manager_Base.h: + * ace/OS_NS_string.h: + * ace/os_include/os_float.h: + * ace/os_include/os_inttypes.h: + * ace/os_include/os_limits.h: + * ace/os_include/os_signal.h: + * ace/os_include/os_stdint.h: + * ace/os_include/os_stdlib.h: + * ace/os_include/os_time.h: + * ace/os_include/os_ucontext.h: + * ace/os_include/os_unistd.h: + * ace/os_include/sys/os_ipc.h: + * ace/os_include/sys/os_mman.h: + * ace/os_include/sys/os_msg.h: + * ace/os_include/sys/os_resource.h: + * ace/os_include/sys/os_select.h: + * ace/os_include/sys/os_sem.h: + * ace/os_include/sys/os_shm.h: + * ace/os_include/sys/os_socket.h: + * ace/os_include/sys/os_stat.h: + * ace/os_include/sys/os_statvfs.h: + * ace/os_include/sys/os_timeb.h: + * ace/os_include/sys/os_time.h: + * ace/os_include/sys/os_times.h: + * ace/os_include/sys/os_types.h: + * ace/os_include/sys/os_uio.h: + * ace/os_include/sys/os_un.h: + * ace/os_include/sys/os_utsname.h: + * ace/os_include/sys/os_wait.h: #include "config-lite.h" rather than + "config-all.h". Only need the user config.h and "lite" things. + Including config-all.h introduces a circular include + dependency from OS_main.h. + + * ace/Default_Constants.h: Add ACE_LIB_TEXT() to ACE_DEFAULT_SVC_CONF + strings. + + * ace/Env_Value_T.i (fetch_value): For non-Win32, force the env var + name to narrow-char then convert the result back to ACE_TCHAR. + + * ace/FILE_Connector.cpp (connect): When generating a temp name, + convert it to ACE_TCHAR for ACE_FILE_Addr. + + * ace/Get_Opt.cpp (constructor): When checking for POSIXLY_CORRECT, + must always use char *, not ACE_TCHAR*, on non-Win32. + + * ace/High_Res_Timer.cpp: Added ACE_LIB_TEXT to naked string literals. + Use 'char' when it must be narrow char; ACE_TCHAR when it has to + change based on ACE_USES_WCHAR. + + * ace/Lib_Find.cpp (ldfind, get_temp_dir): Environment variables on + non-Windows are always narrow char, so account for that. + + * ace/Log_Msg_UNIX_Syslog.cpp: Operate internally with all narrow + chars because the underlying OS APIs are only narrow char. + + * ace/Log_Msg.cpp (log): For 'D', 'M', 'm', 'N', and 'p', use the + proper 's' format code for the platform/char width. Similar to + Log_Record.cpp below. + + * ace/Log_Msg.h (ACE_ASSERT): Convert __FILE__ name to proper char + width when necessary. + + * ace/Log_Record.cpp: When formatting log strings, have to change + printf formats if using wide chars on non-Windows. Wide-char + strings are printed with %ls, whereas Windows uses %s for + wide-char strings if the format is wide-char. + + * ace/Memory_Pool.cpp (ctor): Change backing_store_name to narrow + char when needed to pass it to sscanf(). + + * ace/Object_Manager_Base.cpp (print_error_message): Add + ACE_TEXT_ALWAYS_CHAR to the message arg to convert on wide-char + builds. + + * ace/OS_main.h: For ACE_MAIN on non-Windows ACE_USES_WCHAR platforms, + convert the argv to wchar_t, and pass the wide-char strings to the + ACE_TCHAR[]-expecting real main program. + + * ace/OS_NS_dirent.inl (opendir): Moved the const_cast-needing + VxWorks part to its own #elif section. Added ACE_TEXT_ALWAYS_CHAR + to the other invocation of ::opendir(). + + * ace/OS_NS_dlfcn.inl (dlerror, dlopen, dlsym): Corrected use of + narrow/wide-char. + + * ace/OS_NS_stdio.inl (cuserid, fdopen, freopen): Don't use + ACE_TCHAR when a char is always needed. + (fgets, fputs, perror, puts): Changed to have both narrow- and + wide-char variants. + (checkUnicodeFormat): Use a platform-neutral 2-byte type to + read 2 bytes. Need a non-Windows 'whence' arg for fseek(). + (vsprintf (wchar_t)): Added the non-Windows, XPG5 code for this to + use the XPG5 vswprintf() when equippped. + + * ace/OS_NS_stdlib.{h inl cpp}: + (ACE_OS::mktemp() and mkstemp()): Changed to have both narrow- + and wide-char variants for the !ACE_LACKS_MKTEMP case. + Offering both for the ACE_LACKS_MKTEMP case is a low-return + use of time since the wide-char variant will probably never be used. + (strenvdup): Handle ACE_USES_WCHAR on non-Windows by converting + back and forth to narrow-char. + (system): On non-Windows, convert command line string to narrow-char. + (getcwd): Changed to have both narrow- and wide-char variants. + + * ace/OS_NS_sys_stat.inl (creat, mkfifo): For non-Windows, convert + name to narrow-char when needed. + (lstat): Change from a single ACE_TCHAR-based interface to both + char* and wchar_t*. + + * ace/OS_NS_time.inl (ctime, ctime_r): Corrected narrow/wide char + usage. + + * ace/OS_NS_unistd.inl (truncate): For non-Windows, convert the path + to narrow-char when needed. + (realpath): Changed to have both narrow- and wide-char variants. + + * ace/OS_NS_unistd.{h inl cpp}: + (rmdir): Changed to have both narrow- and wide-char variants. + (argv_to_string): Handle narrow and wide-char environment variables. + (fork_exec): Convert path and argv to narrow-char when needed. + + * ace/Process.cpp (spawn): Convert argv, procname, env vars to narrow + char for non-Windows wide-char builds. + + * ace/Process.i (setreugid): Convert user name to narrow char for + getpwnam(). + + * ace/Process_Mutex.cpp (ctor): Don't convert name to ACE_TCHAR for + ACE_SV_Semaphore case - it requires char*. + + * ace/Process_Semaphore.cpp (ctor): Convert name to narrow char + for ACE_SV_Semaphore_Complex case. + + * ace/Sock_Connect.cpp (get_bcast_addr): + * ace/SOCK_Dgram_Bcast.cpp (mk_broadcast): Host name needs to be + converted to narrow-char for wide-char builds. + + * ace/SOCK_Dgram_Mcast.cpp (make_multicast_ifaddr): Interface name + needs to be converted to narrow-char for wide-char builds. + + * ace/SV_Semaphore_Simple.{h,i,cpp}: Added wide-char versions of + the named constructor and open() methods. They forward to the + narrow-char versions. + + * tests/Dirent_Test.cpp: Account for dirent's d_name is an ACE_TCHAR + when ACE_LACKS_STRUCT_DIR and a char* otherwise. + + * tests/FIFO_Test.cpp: Change ACE_ALPHABET to char[]. + + * tests/Proactor_Test.cpp: Change complete_message from ACE_TCHAR + to char. This is easier to handle; as ACE_TCHAR, we'd need to + correct all the message block pointer adjustments to take the + charset width into account. + + * tests/Log_Msg_Test.cpp: + * tests/MEM_Stream_Test.cpp: + * tests/Message_Queue_Test.cpp: + * tests/Pipe_Test.cpp: + * tests/Process_Manager_Test.cpp: + * tests/Process_Mutex_Test.cpp: + * tests/Process_Strategy_Test.cpp: + * tests/Signal_Test.cpp: + * tests/SOCK_Connector_Test.cpp: + * tests/SOCK_Dgram_Test.cpp: + * tests/SOCK_Send_Recv_Test.cpp: + * tests/SOCK_Test.cpp: + * tests/SV_Shared_Memory_Test.cpp: Char width correction. + + * tests/Service_Config_Test.cpp: + * tests/Service_Config_Test.WCHAR_T.conf: + * tests/Service_Config_Test.WCHAR_T.conf.xml: Added WCHAR_T-coded + versions of the test input file and changed the test to use + them on non-Windows ACE_USES_WCHAR builds. + + * tests/Test_Output.cpp (set_output): Handle env var and filepath + building correctly even on wide-char non-Windows builds. + + * ACEXML/common/XML_Types.h: typedef ACEXML_Char as ACE_TCHAR, else + it doesn't match any char interfaces when wchar_t is not 2 bytes. + + * ACEXML/parser/parser/Parser.cpp (parse_char_reference): Add the + case where wide-char is 4 bytes. + + Also brought in this fix: + Mon Mar 8 15:52:33 2004 Steve Huston + + * ace/POSIX_Proactor.cpp: Comment out the signal setup; this should + not be necessary and, indeed, is erroneous, at least on Linux. + It's commented out instead of removed in case further testing on + other platforms determines that it is needed sometimes. + +Tue Aug 24 10:22:18 2004 Steve Huston + + * ace/config-linux-common.h: Added ACE_HAS_SCANDIR and a new + macro, ACE_SCANDIR_CMP_USES_VOIDPTR, saying that scandir() + cmp() function takes void pointers, not dirent pointers. + + * ace/OS_NS_dirent.inl (scandir): When calling native scandir() + with ACE_SCANDIR_CMP_USES_VOIDPTR, cast comparator appropriately. + Also, for native scandir(), ACE_TEXT_ALWAYS_CHAR the dirname. + + * ace/OS_NS_dlfcn.inl: + * tests/Test_Output.cpp: Added #include "ace/OS_NS_string.h" to get + ACE_OS string methods. Fixes compile error on inline=0 build. + +Tue Aug 24 11:16:00 2004 Jules White + + * ACE-INSTALL.html: Added a section on using ACE within Eclipse + +Tue Aug 24 10:10:22 2004 Steve Huston + + * ace/config-all.h: Moved #include "ace/OS_main.h" down to the bottom + of the file, lest it invoke a circular dependency. + + * ace/OS_NS_stdlib.inl: Added #include "ace/config-all.h" to get + ACE_TRACE. + +Mon Aug 23 23:23:18 2004 Ossama Othman + + * Makefile.am (AUTOMAKE_OPTIONS): + + Removed required Automake version from `Makefile.am'. + `configure.ac' already defines it. + + * configure.ac: + + Updated required version of Automake to 1.9. + + Added test for partial template specialization. Issue a warning + if it isn't support by the compiler since ACE will require it in + the near future. + + * ace/ACE.h: + + Corrected ACE namespace documentation to describe the ACE + namespace itself rather than summarizing the contents of this + header (i.e. the value added global ACE functions). + + * ace/If_Then_Else.h: + + Doxygen documentation corrections and improvements. + +Mon Aug 23 22:19:16 2004 Ossama Othman + + * tests/CDR_Test.cpp (run_main): + + Added run-time assertions that verify proper CDR type sizes + (e.g. sizeof (ACE_CDR::Boolean) == 1). + +Mon Aug 23 19:18:58 2004 J.T. Conklin + + * m4/config_h.m4: + + Removed autoheader template for ACE_LACKS_PARAM_H. + +Mon Aug 23 18:33:40 2004 J.T. Conklin + + * configure.ac: + + Added check for ACE_HAS_ITOA. + Added check for ACE_LACKS_ITOW. + +Mon Aug 23 18:22:25 2004 J.T. Conklin + + * ace/config-dgux-4.11-epc.h + * ace/config-dgux-4.x-ghs.h + * ace/config-freebsd.h + * ace/config-lynxos.h + * ace/config-m88k.h + * ace/config-macosx-panther.h + * ace/config-macosx.h + * ace/config-openbsd.h + * ace/config-sunos4-g++.h + * ace/config-sunos4-lucid3.2.h + * ace/config-sunos4-sun3.x.h + * ace/config-sunos4-sun4.1.4.h + * ace/config-sunos4-sun4.x.h + * ace/config-sunos5.4-centerline-2.x.h + * ace/config-sunos5.4-g++.h + * ace/config-sunos5.4-sunc++-4.x.h + * ace/config-sunos5.5.h + * ace/config-tandem.h + * ace/config-unixware-2.01-g++.h + * ace/config-unixware-2.1.2-g++.h + * ace/config-unixware-7.1.0.h + * ace/config-unixware-7.1.0.udk.h + * ace/os_include/os_stropts.h + + Changed name of feature test macro ACE_HAS_SOCKIO_H to + ACE_HAS_SYS_SOCKIO_H. + +Mon Aug 23 17:41:40 2004 J.T. Conklin + + * m4/config_h.m4: + * m4/platform.m4: + + Removed support for unused ACE_NETBSD feature test macro. + +Mon Aug 23 17:37:16 2004 J.T. Conklin + + * m4/platform.m4: + + Add check for ACE_LACKS_PERFECT_MULTICAST_FILTERING. + +Mon Aug 23 16:33:59 2004 J.T. Conklin + + * ace/config-netbsd.h: + + Remove PACKAGE, PACKAGE_*, and VERSION definitions. The latter + conflicts with some of the test/example programs. I'll get rid + of the others just to be safe. + + Comment out ACE_NTRACE, as the constant definition conflicts + with Misc_test_trace. We probably need an option to control + whether tracing and debugging features are enabled when ACE/ + TAO is compiled that is separate from the one used after it + has been built. + +Mon Aug 23 16:06:39 2004 J.T. Conklin + + * configure.ac: + + Added checks for ACE_HAS_VWFPRINTF and ACE_HAS_VWSPRINTF. + +Tue Aug 24 00:34:30 2004 Marek Brudka + + * ace/QtReactor.cpp: + Removed unecessary #include . Thanks to + Gan Deng for a patch. + + +Mon Aug 23 17:53:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_hpux_aCC.GNU: + Added support for itanium on HPUX 11iv2 (11.23). Different options + have to be passed when on itanium, so when version 11.23 is detected, + set itanium to 1 and dependent on that set different compiler options. + +Mon Aug 23 16:58:18 UTC 2004 Don Hinton + + * include/makeinclude/rules.local.GNU: + Added CCFLAGS to the list of arguments passed to the dependency + generator. Thanks to Matthew Townsend + for reporting the problem. + + * THANKS: + Added Matthew Townsend to the hall of fame. + +Mon Aug 23 08:34:12 UTC 2004 Johnny Willemsen + + * ace/config-hpux11.h: + Removed this file from the repo, use config-hpux-11.00.h instead, + the contents of this file refers to config-hpux11-xx.h files + which are not there, making this file unusable. + +Sun Aug 22 21:49:14 2004 J.T. Conklin + + * ace/config-netbsd.h: + + Update with autoconf generated results. While not perfect, the + old version would be difficult to update by hand. + +Mon Aug 23 01:04:34 2004 Balachandran Natarajan + + * ace/Select_Reactor_T.cpp: + + Made some slight changes to the BUG 1890 patch after receiving + some clarifications from Kobi. + +Sun Aug 22 11:11:00 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/amh.mpb: + When using amh, you must have valuetype support, so add valuetype + as base project of amh + +Sun Aug 22 09:53:00 UTC 2004 Martin Corino + + * tests/MEM_Stream_Test.cpp: + + Changed to remove compile warning resulting from bad use + of ACE_UNUSED_ARG(). + +Fri Aug 20 15:29:29 MST 2004 Trevor Fields + + * bin/auto_run_tests.pl: + * tests/run_test.pl: + Changed the run test scripts to time the execution + and print test finished messages. This for the + generation of statistics. + +Fri Aug 20 15:10:08 2004 J.T. Conklin + + * bin/MakeProjectCreator/config/core.mpb: + + Changed to define INSTALL_THIS_TARGET for automake builds. + + * bin/MakeProjectCreator/config/taodefaults.mpb: + + Changed to add $(TAO_BUILDDIR) to includes for automake builds. + + * bin/MakeProjectCreator/config/acedefaults.mpb: + + Changed to add $(ACE_BUILDDIR) to includes for automake builds. + +Fri Aug 20 12:17:39 2004 J.T. Conklin + + * configure.ac: + * m4/config_h.m4: + + Added check for ACE_SIZEOF_WCHAR. + +Fri Aug 20 16:13:29 2004 Dale Wilson + + * ace/OS_NS_Thread.h: + * ace/OS_NS_Thread.cpp: + * ace/TSS_T.cpp: + Revert. It triggers (or causes) an intermittent problem + in the Timer_Cancellation_Test + +Fri Aug 20 10:22:34 2004 Dale Wilson + + * TAO/tests/MT_Client/client.cpp: + Revert this. It wasn't supposed to be included in my previous + check in. (Thu Aug 19 12:42:19 2004) + +Fri Aug 20 15:20:31 2004 Balachandran Natarajan + + Fixes for Bug 1890. Please see + + http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1890 + + for details of this bug. What follows are the individual changes. + + * ace/Select_Reactor_Base.cpp: + * ace/Select_Reactor_Base.h: + + Added a new method clear_dispatch_mask (), which as the name + indicates clears the masks in the dispatch_set. The dispatch set + is a new addition, which keeps track of the handles that can be + used for dispatching. + + * ace/Select_Reactor_Base.inl: + * ace/Select_Reactor_T.cpp: + * ace/Select_Reactor_T.h: Modified dispatch_io_set () so that it + doesn't break the loop when state_changes occur. This is the + crux of the 1890 bug report. If unbinding occurs as part of an + upcall, the bit_ops () calls clear_dispatch_mask (), which + prevents dispatching to already removed (and potentially + rebounded) handles. + + Additional cosmetic changes. + + * ace/Priority_Reactor.cpp: + * ace/Priority_Reactor.h: + * ace/TP_Reactor.cpp: + * ace/TP_Reactor.h: + * ace/TP_Reactor.inl: + + Replicate changes to the above reactors. + + * ace/Signal.h: + * ace/Signal.inl: + + Added a default argument to the ACE_Signal class, which is used + by the ACE_Select_Reactor. + + Thanks to Kobi for the patches. + +Fri Aug 20 14:26:00 UTC 2004 Martin Corino + + * tests/Process_Mutex_Test.cpp: + + Changed to use a separate logfile per child (based on PID like + in MEM_Stream_Test) because of concurrency problems in using a + single non-synchronized child logfile (at least under windows). + +Fri Aug 20 14:10:00 UTC 2004 Martin Corino + + * tests/MEM_Stream_Test.cpp: + + Changed to use child processes instead of threads for testing. + See also [Bug 1793]. + +Fri Aug 20 07:47:00 UTC 2004 Martin Corino + + * bin/bin/MakeProjectCreator/templates/gnu.mpd: + + Added $(EXEEXT) to BIN build target. + Removed from $(EXEEXT) from install and cleanup target + because these are derived from build target. + This improves link behaviour (disables unnecessary links + because dependency checks on build targets did not function) + on platforms using GNU make and having a executable extension + (like MingW; .exe). + Fixes [Bug 1876]. + + * apps/gperf/tests/tests.mpc: + + Added $(EXEEXT) to verbatim 'runtests' targets because + otherwise dependencies on build targets do not function + anymore. + +Thu Aug 19 16:45:05 2004 J.T. Conklin + + * bin/MakeProjectCreator/config/security.mpb: + + Changed to inherit from orbsvcslib. + +Thu Aug 19 12:42:19 2004 Dale Wilson + + * TAO/tests/MT_Client/client.cpp: + + * ace/OS_NS_Thread.h: + * ace/OS_NS_Thread.cpp: + * ace/TSS_T.cpp: + Repeat part of the checkin from Fri Aug 13 15:26:40 2004 + This corrects the incorrect thread-in-use count problem + that leads to premature TSS key deletion, but does not fix + the TSS leak because fixing that reveals other problems + that I don't have a solution for, yet. + +Thu Aug 19 08:26:11 2004 J.T. Conklin + + * apps/drwho/Rwho_DB_Manager.h: + + Changed to #include before , + as the latter needs the former on some systems. + +Thu Aug 19 08:07:53 2004 J.T. Conklin + + * examples/APG/Signals/SigAction.cpp: + + Changed to use a (conditional) extern "C" linkage block around + my_sighandler, because the plain extern "C" directive resulted + in a declaration with multiple storage classes. + +Thu Aug 19 08:44:12 UTC 2004 Johnny Willemsen + + * PROBLEM-REPORT-FORM: + Ask for the default.features file used by MPC. + +Wed Aug 18 21:02:34 2004 Dale Wilson + + * ace/OS_NS_Thread.h: + * ace/OS_NS_Thread.cpp: + * ace/Object_Manager.cpp: + * ace/TSS_T.cpp: + Revert TSS leak fix (temporarily, I hope) + until I can find and eliminate the hang. + +Wed Aug 18 15:07:00 UTC 2004 Martin Corino + + * bin/msvc_static_compile.pl: + bin/msvc_mpc_auto_compile.pl: + + Fixed wrong comment characters. + +Wed Aug 18 13:35:00 UTC 2004 Martin Corino + + * bin/msvc_static_compile.pl: + + Added support for building VC8 projects. + +Wed Aug 18 13:29:00 UTC 2004 Martin Corino + + * bin/msvc_mpc_auto_compile.pl: + + Added support for building VC8 projects. + +Wed Aug 18 08:50:00 UTC 2004 Simon Massey + + * ace/Asynch_Connector.h: + * ace/Asynch_Connector.cpp: + + Thanks to Douglas for his assistance. This change introduces a + class-static "local_default" for use as the default parameter + for the second attribute of + ACE_Asynch_Connector<>::connect(). This "simplifies" the nested + templated class for the Solaris Lynxos GCC295 cross compiler + which was faulting due to the complexity of this + definition. This change does not appreachiably modify the + signature of the member function, just stops clients from having + to create their own local default parameter. + +Wed Aug 18 01:05:37 2004 J.T. Conklin + + * include/makeinclude/platform_netbsd.GNU: + + Update to support current NetBSD platforms. + +Tue Aug 17 21:03:08 2004 J.T. Conklin + + * bin/MakeProjectCreator/config/interceptors.mpb: + + New file, with base project requiring interceptors. Project + files should inherit from this instead of providing explicit + requires statements to eliminate duplicate entries in list. + +Tue Aug 17 17:42:16 2004 J.T. Conklin + + * bin/MakeProjectCreator/config/rtcosscheduler.mpb: + + Changed to inherit from orbsvcslib. + +Tue Aug 17 09:50:46 2004 Balachandran Natarajan + + * bin/MakeProjectCreator/config/ciao_servant.mpb: + * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb: + + Added the path to $TAO_ROOT/orbsvcs to the CIDL compiler. + +Tue Aug 17 14:30:00 UTC 2004 Simon Massey + * tests/Proactor_Test.cpp + Revertion of change to this file (for the sake of being complete). + +Tue Aug 17 13:00:00 UTC 2004 Simon Massey + * ace/Asynch_Connector.h + Revertion of change to this file as it breaks the windows build and + changed the public interface of the template class. + +Tue Aug 17 10:03:00 UTC 2004 Martin Corino + + * ace/ACE.cpp: + + Added ACE_UNUSED_ARG() to is_sock_error() for non-WIN32 + builds. + +Tue Aug 17 09:43:00 UTC 2004 Martin Corino + + * bin/msvc_static_order.lst: + + Removed DOS style linefeeds. + +Tue Aug 17 08:49:00 UTC 2004 Martin Corino + + * ace/OS_NS_String.cpp: + + Removed some hidden characters causing compile problems. + +Tue Aug 17 08:00:00 UTC 2004 Simon Massey + * ace/Asynch_Connector.h + * tests/Proactor_Test.cpp + Due to a long standing fatal cross development compiler bug in the + Solaris -> Lynxos cross development environment. + (LynxOS gcc 2.95.3 cross compiler) + +Tue Aug 17 08:00:00 UTC 2004 Martin Corino + + * ace/ACE.h: + ace/ACE.cpp: + + Added ACE::is_sock_error() to be able to test if errorcode is + WinSock error *before* converting to error string. + + * ace/OS_NS_String.cpp: + + Fixed WCHAR bug in ACE_OS::strerror(). + Introduced use of ACE::is_sock_error(). + +Mon Aug 16 22:53:53 2004 Ossama Othman + + * ace/SSL/SSL_SOCK_Stream.cpp (~ACE_SSL_SOCK_Stream): + + Removed useless invalidation of "ssl_" pointer member by + assignment of zero. Once the destructor is called, the object + no longer exists so invalidation is unnecessary. + +Mon Aug 16 16:54:18 2004 J.T. Conklin + + * bin/MakeProjectCreator/config/ftorbutils.mpb + * bin/MakeProjectCreator/config/smart_proxies.mpb + * bin/MakeProjectCreator/config/svc_utils.mpb + + Changed to inherit from orbsvcslib instead of taolib_with_idl. + + * bin/MakeProjectCreator/config/orbsvcslib.mpb: + + Added $(TAO_ROOT)/orbsvcs to includes. + Added -I$(TAO_ROOT)/orbsvcs to idlflags. + +Mon Aug 16 15:58:21 2004 Steve Huston + + * ace/Signal.cpp: Added template instantiations for + ACE_Fixed_Set_Iterator_Base. Related to: + Mon Aug 2 08:55:17 2004 Douglas C. Schmidt + +Mon Aug 16 15:30:29 2004 Steve Huston + + * ace/Task.cpp (svc_run): Added "defined (ACE_WIN32)" to the + "defined (__IBMCPP__)" test for how to cast a thread result. + __IBMCPP__ is defined for both Windows (where the alternate cast + is needed) and AIX (where it is prohibited). + This is related to this change: + Fri Aug 6 08:34:12 UTC 2004 Johnny Willemsen + +Mon Aug 16 11:54:50 2004 Ossama Othman + + * ace/ACE.h (debug): + + Corrected the export qualifier for these functions. They are no + longer inlined. + +Mon Aug 16 11:16:02 2004 Ossama Othman + + * ace/ACE.h: + + Moved remaining ACE namespace variables out of header and into + the '.cpp' file. They should not be accessed/modified + directly. + + * ace/ACE.inl (hex_chars_, nibble2hex): + + No need to declare/define the hex_chars_ constant variable in + the ACE namespace. Define it as a static constant in the + nibble2hex() function instead, the only place it is used. + + * ace/ACE.cpp (debug): + + Unlined these functions. They generally aren't performance + critical, and doing so allows us to remove the ACE::debug_ + internal variable to the '.cpp' file. + +Mon Aug 16 11:16:02 2004 Ossama Othman + + * ace/ACE.h: + * ace/ACE.cpp: + + Added remaining missing DLL export qualifiers. Fixes + "unresolved external symbol" errors in MS Windows builds. + + Moved variables in ACE namespace that are internal to ACE into + the '.cpp' file. They should be not be accessed or modified + directly. + +Mon Aug 16 10:58:09 2004 Ossama Othman + + * ace/ACE.h (recv): + + Fixed DLL export qualifier. Addresses "unresolved external + symbol" link-time errors in MS Windows builds. + +Mon Aug 16 12:14:37 2004 Balachandran Natarajan + + * bin/MakeProjectCreator/config/ciao_deployment_stub.mpb: + * bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb: + * bin/MakeProjectCreator/config/ciao_server_dnc.mpb: + + Changed the names of the Deployment libraries. Arranged the + dependencies in such a manner so that it is easier to use it in + the application. + +Mon Aug 16 09:27:12 UTC 2004 Martin Corino + + * bin/msvc_mpc_auto_compile.pl: + + Added MSVC 7.1 compatibility through '-vc7' option. + + * bin/msvc_static_compile.pl: + + Added MSVC 7.1 compatibility through '-vc7' option. Added + support for MPC '-name_modifier' option. + + * bin/msvc_static_compile.lst: + + Removed projectfile extensions to be able to generate these + dynamically from 'msvc_static_compile.pl'. + +Sat Aug 14 19:38:20 2004 Ossama Othman + + * ace/CDR_Base.h: + + Do not include "ace/If_Then_Else.h" when using MSVC++ 6. It + can't handle the partial template specializations in that file. + +Sat Aug 14 19:34:02 2004 Ossama Othman + + * ace/Sock_Connect.cpp (ipv6_enabled_): + + Fixed syntax error. + +Sat Aug 14 13:07:50 2004 Ossama Othman + + * ace/QoS/SOCK_Dgram_Mcast_QoS.cpp (subscribe_ifs): + + The "ACE_Sock_Connect" interim pseudo namespace no longer + exists. Use the true "ACE" C++ namespace instead. Fixes a + compile-time error. + +Sat Aug 14 14:48:01 2004 Balachandran Natarajan + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Add /usr/lib as a path for library check. If the location of the + library is not specified by the application, the compiler, + linker and loader knows where to look in for *nix based + systems. So should our library checker.Without this applications + MPC file starts pointing to /usr/lib to locate libraries like + PCAP and XERCES, which can be installed with system + libraries. It is bad to see installation specific thingies + making its way up the order. + +Sat Aug 14 09:28:19 2004 Ossama Othman + + * ace/CDR_Base.h (ACE_CDR::Boolean): + + MSVC++ 6 can't handle partial template specializations so fall + back on an unsigned char typedef if _MSC_VER < 1300 (i.e. MSVC++ + version is less than 7). This is an interim solution to get the + MSVC++ 6 builds going again. + + * ace/IfThenElse.h: + * ace/If_Then_Else.h: + + Renamed the former to the latter, including the class template + defined within, to match ACE naming conventions. Thanks to Doug + for pointing this out. + +Sat Aug 14 01:43:16 2004 Ossama Othman + + * ace/CDR_Base.h (ACE_CDR): + + Parenthesize boolean condition that is the first argument to the + ACE::IfThenElse<> template to avoid any potential confusion. + +Sat Aug 14 00:33:59 2004 Ossama Othman + + * ace/IfThenElse.h (IfThenElse): + + Place sample code within a Doxygen code block. Addresses some + documentation formatting problems. + +Fri Aug 13 23:26:56 2004 Ossama Othman + + * ace/IfThenElse.h: + + New template that allows one to choose between two types at + compile-time based on a boolean value. This is basically the + IfThenElse template described in the book "C++ Templates" by + Vandevoorde and Josuttis. + + * ace/CDR_Base.h (ACE_CDR::Boolean): + + Detect at compile-time whether the C++ "bool" type can be used + as the underlying ACE_CDR::Boolean type using the new + ACE::IfThenElse template. + + * ace/ACE.h: + * ace/Flag_Manip.cpp: + * ace/Flag_Manip.h: + * ace/Flag_Manip.inl: + * ace/Handle_Ops.cpp: + * ace/Handle_Ops.h: + * ace/Init_ACE.cpp: + * ace/Init_ACE.h: + * ace/Lib_Find.cpp: + * ace/Lib_Find.h: + * ace/Sock_Connect.cpp: + * ace/Sock_Connect.h: + + Functions that were in the pseudo "ACE" namespace are now in a + true "ACE" C++ namespace. + + * ace/ACE.inl (log2): + + Use the prefix increment operator when incrementing the loop + index. It is generally more efficient than the postfix + increment operator. + + * ace/Asynch_Acceptor.cpp: + * ace/Asynch_Connector.cpp: + * ace/DEV_Connector.cpp: + * ace/DLL_Manager.cpp: + * ace/FILE_Addr.cpp: + * ace/FILE_Connector.cpp: + * ace/INET_Addr.inl: + * ace/IO_SAP.cpp: + * ace/IPC_SAP.cpp: + * ace/Logging_Strategy.cpp: + * ace/MEM_Acceptor.cpp: + * ace/Memory_Pool.cpp: + * ace/Naming_Context.cpp: + * ace/POSIX_Asynch_IO.cpp: + * ace/POSIX_Proactor.cpp: + * ace/SOCK_Acceptor.cpp: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_SEQPACK_Acceptor.cpp: + * ace/SPIPE_Connector.cpp: + * ace/System_Time.cpp: + * ace/UPIPE_Connector.cpp: + * tests/Enum_Interfaces_Test.cpp: + * tests/FIFO_Test.cpp: + * tests/INET_Addr_Test.cpp: + * tests/INET_Addr_Test_IPV6.cpp: + + Updated all calls to functions that were in the pseudo "ACE" + namespace through a former ACE class base class + (e.g. ACE_Sock_Connect, ACE_Flag_Manip, etc) to use the correct + "ACE" namespace. Use of the base class names should never have + been used since it was known long ago that the "ACE" pseudo + namespace would be changed to true C++ namespace. + + * ace/Basic_Types.h: + * ace/OS_NS_fcntl.inl: + * ace/OS_NS_stdio.h: + * ace/OS_NS_stdlib.h: + + Nuked trailing whitespace. + +Sat Aug 14 03:44:02 2004 Balachandran Natarajan + + * ace/TSS_T.cpp: + + Fixed compilation errors in the SingleThreaded builds. + +Sat Aug 14 03:37:44 2004 Balachandran Natarajan + + * ace/OS_NS_Thread.cpp: + + Fixed a unused variable warning in the daily builds. + +Sat Aug 14 01:58:32 2004 Balachandran Natarajan + + * Release: + + Added the NEWS file to the release. Thanks to Ramiro Morales + for reporting the problem. + +Fri Aug 13 16:17:32 2004 Douglas C. Schmidt + + * ace/Module.h (class ACE_Module): + * ace/Task.h (ACE_Task_Base): + Updated the documentation so it's more clear. Thanks to Andrew + Athan for motivating this. + + * ace/Stream.h: Updated the documentation for push() and pop() to + clarify how it affects open() and close() hooks on the tasks. + Thanks to Andrew Athan for + motivating this. + +Fri Aug 13 15:26:40 2004 Dale Wilson + + * ace/TSS_T.cpp: + Pass the TSS key to ACE_OS::thr_key_detach. This + eliminates the table lookup formerly required to + identify the key being detached. + + * ace/OS_NS_Thread.h: + * ace/OS_NS_Thread.cpp: + --Accept and use the TSS key from TST_T.cpp + --Typedef the function pointer used to delete TSS + objects. This improves readability. + --Change the name of the ACE_TSS_Info member from + tss_obj_ to tss_info_. This avoids confusion + due to conflicting use of the name "tss_obj" + --Check to see if a thread has actually used + a TSS key before decrementing the "number of + threads using this key" counter. This eliminates + a messy situation in which the key is deleted + while threads are still using it. + --Fix bugzilla 1542: Leaks in ACE_TSS + Note that the patch suggested + in the bugzilla report did not completely address + the problem, so this fix takes a different approach. + Significant features of this change: + > The ACE_TSS_Cleanup::detach method now frees the + thread's specified TSS entry. Formerly it leaked it. + > The exit method defers to the detach method to + free the entry. This ensures entries are handled + consistently -- no matter how they are freed up. + > The ACE_TSS_Cleanup::in_use_ entry receives special + handling to avoid using it while deleting it. Formerly + it was leaked, so it didn't matter. + -- Note this does NOT address bugzilla 1797. I'll + look at that one next. + + * ace/Object_Manager.cpp: + Eliminating TSS leaks revealed another problem. The + main thread was not waiting for other threads to exit + before dismantling the ACE infrastructure in + Object_Manager::fini. There's a hack in Thread_Manager + that disables the wait method when the Object_Manager + is shutting down. + Unfortunatly this causes a messy race condition in which + one thread is deleting objects while other threads are + using them. + The "solution" here is to call Thread_Manager::wait() + with a short (1 second) timeout. If the threads have + already exited -- no problem, and no delay. If they + haven't, they get a chance to exit cleanly. + +Fri Aug 13 18:43:01 2004 Balachandran Natarajan + + * ace/CDR_Base.h (ACE_CDR): + + Reverted the usage of C++ bool as a typedef of + ACE_CDR::Boolean. We will now use unsigned char on all + platforms. MacOSX (Panther) atleast makes the size of bool to be + 4 bytes which creates problems for TAO. Thanks to Rich Shapiro + for reporting the problem. + +Fri Aug 13 18:44:12 UTC 2004 Johnny Willemsen + + * ace/IOStream_T.h: + When ACE_LACKS_IOSTREAM_FX is defined, also include ace/os_include/ + os_ctype.h + +Fri Aug 13 12:03:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Also install pidl files + +Fri Aug 13 07:15:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_gnuwin32_common.GNU: + Pass the def file with -Wl, to the compiler, it is a linker option + and with the Cygwin GCC 3.3.3 it seems the compiler thinks the def + file is a modula2 file. By marking it as linker option it works + without problems again + + * etc/*.doxygen: + Set INTERNAL_DOCS to YES, that way we generate documentation for + stuff marked with @internal, but doxygen will make sure the + documentation says it is for internal use only + +Thu Aug 12 21:17:05 2004 J.T. Conklin + + * bin/MakeProjectCreator/config/taolib.mpb: + Inherit from pidl.mpb: + + * bin/MakeProjectCreator/config/pidl.mpb: + New file, custom file type definition for *.pidl files. + +Thu Aug 12 16:12:18 2004 Balachandran Natarajan + + * bin/fuzz.pl: + + Priority of synch.h inclusion is reduced. + +Thu Aug 12 13:23:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/config/acedefaults.mpb: + Use LIBMODIFIER with bmake, not LIB_MODIFIER + +Thu Aug 12 07:54:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_hpux_gcc.GNU: + Removed support for buildbits=64 again, the way I tried it doesn't + work + +Wed Aug 11 22:20:49 2004 Balachandran Natarajan + + * bin/fuzz.pl: + + Priority of OS.h and Synch.h inclusions have been reduced. + +Wed Aug 11 11:55:46 2004 J.T. Conklin + + * bin/MakeProjectCreator/config/event.mpb + * bin/MakeProjectCreator/config/ftorbutils.mpb + * bin/MakeProjectCreator/config/ftrtevent.mpb + * bin/MakeProjectCreator/config/rtcorbacommon.mpb + Changed to inherit from minimum_corba instead of providing avoids + statements to eliminate duplicate entries in list. + +Wed Aug 11 08:48:48 2004 Chad Elliott + + * bin/MakeProjectCreator/modules/BorlandProjectCreator.pm: + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Call $self->mpc_dirname() instead of dirname() to be consistent + with the modules in MPC. + + * bin/mpc.pl: + * bin/mwc.pl: + + Put back the getBasePath() function and cleaned up the VMS + support. + +Wed Aug 11 10:32:12 UTC 2004 Johnny Willemsen + + * bin/tao_other_tests.lst: + Don't run the PluggableUDP examples when NO_DIOP is defined, + makes it possible to exclude these examples in builds that don't + have DIOP + +Wed Aug 11 08:32:12 UTC 2004 Martin Corino + + * ace/Process.cpp: + Added OpenVMS version of ACE_Process::spawn(). + + * include/makeinclude/platform-openvms.GNU: + Removed mathlibrary from required libs. + Added dummy code to circumvent 'touch' problem with OpenVMS make port. + +Wed Aug 11 08:00:12 UTC 2004 Johnny Willemsen + + * bin/tao_other_tests.lst: + Don't run TAO/orbsvcs/tests/Notify/performance-tests/Filter when + MINIMUM is set, this test isn't build with minimum corba + +Tue Aug 10 10:57:00 2004 J.T. Conklin + + * configure.ac: + Enable check for ACE_HAS_WCHAR. We'll never shake out any + wide character configuration bugs that may remain if it's + disabled. + +Tue Aug 10 11:08:31 2004 Steve Huston + + * ace/config-linux-common.h: Removed ACE_LACKS_TOWLOWER and + ACE_LACKS_TOWUPPER. These functions are present but, I suspect, + marked "lacks" because of type conflicts, which J.T. Conklin fixed: + Mon Aug 9 23:13:48 2004 J.T. Conklin + +Tue Aug 10 06:52:47 2004 J.T. Conklin + + * configure.ac: + Removed AC_LANG_PUSH([C])/.../AC_LANG_POP([C]) which forced the + use of C for selected AC_CHECK_FUNC calls. The current version + of autoconf always uses C. + +Tue Aug 10 14:00:00 UTC 2004 Simon Massey + + I shouldn't have been rushed into these guarded #includes. The + following two files now need these guarded #includes to be moved + after the rest. + + * ace/FILE_IO.h + * ace/FIFO_Send_Msg.h + Moved guarded #include "ace/OS_NS_stropts.h" to end of other + #includes + +Tue Aug 10 11:20:00 UTC 2004 Simon Massey + + * examples/IOStream/server/iostream_server.cpp + Added missing #include "ace/OS_NS_unistd.h" inside the guard of + #if defined (ACE_HAS_STRING_CLASS) + + * tests/IOStream_Test.cpp + Added missing #include "ace/OS_NS_unistd.h" inside the guard of + #if !defined (ACE_LACKS_ACE_IOSTREAM) + +Tue Aug 10 12:01:12 UTC 2004 Johnny Willemsen + + * bin/tao_orb_tests.lst: + * bin/tao_other_tests.lst: + When DISABLE_BIDIR is set, don't run the BiDIR tests, this can be + used for builds that build without BiDIR GIOP + +Tue Aug 10 11:20:00 UTC 2004 Simon Massey + + Thanks to Johnny Willemsen for the information + leading to these guard conditions. + + * ace/Sock_Connect.cpp + Added guard checks around #include "ace/OS_NS_fcntl.h" + + * ace/DEV_IO.h + * ace/FILE_IO.h + * ace/FIFO_Send_Msg.h + Added guard checks around #include "ace/OS_NS_stropts.h" + + * ace/Pipe.cpp + * ace/SPIPE_Acceptor.cpp + Added guard checks around #include "ace/OS_NS_unistd.h" + +Mon Aug 9 23:13:48 2004 J.T. Conklin + + * ace/config-freebsd.h: + Remove #define of ACE_LACKS_TOWLOWER and ACE_LACKS_TOWUPPER. + FreeBSD has these functions, but they were disabled because + of the problem below. + + * ace/OS_NS_ctype.h: + * ace/OS_NS_ctype.inl: + * ace/OS_NS_strings.cpp: + * ace/OS_NS_wchar.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.cpp: + * tests/Config_Test.cpp: + * tests/Proactor_Test.cpp: + * tests/Proactor_Test_IPV6.cpp: + Renamed ACE_OS::to_upper(int) and ACE_OS::to_upper(wint_t) to + ACE_OS::ace_toupper() and ACE_OS::ace_towupper() because they + are ambiguous on systems where wint_t is in fact an int. The + same was done for ACE_OS::to_lower(), etc. + +Mon Aug 9 18:12:12 UTC 2004 Johnny Willemsen + + * ace/OS_NS_stdlib.cpp (realpath): + Applied ACE code formatting to make it readable + +Mon Aug 9 15:20:00 UTC 2004 Simon Massey + + * ace/Sock_Connect.cpp + Added missing #include "ace/OS_NS_fcntl.h" + + * ace/DEV_IO.h + * ace/FILE_IO.h + * ace/FIFO_Send_Msg.h + Added missing #include "ace/OS_NS_stropts.h" + + * ace/Pipe.cpp + * ace/SPIPE_Acceptor.cpp + Added missing #include "ace/OS_NS_unistd.h" + +Mon Aug 9 15:05:12 UTC 2004 Johnny Willemsen + + * include/makeinclude/platform_hpux_gcc.GNU: + When buildbits is set to 64, add -m64 to the CPPFLAGS + +Mon Aug 9 09:25:12 2004 Huang-Ming Huang + + * tests/Dynamic_Priority_Test.cpp: + Fixed buffer overrun problem when ACE_HAS_TIMED_MESSAGE_BLOCKS + macro is defined. + +Mon Aug 9 09:56:12 UTC 2004 Johnny Willemsen + + * examples/APG/Processes/Spawn.cpp: + Changed the check of the result of spawn, use ACE_INVALID_PID + instead of -1. + +Mon Aug 9 08:55:12 UTC 2004 Johnny Willemsen + + * ace/OS_NS_unistd.inl (chdir): + Fixed Visual Age on Win32 implementation + + Thanks to Boris Kaminer for reporting + this. + +Sun Aug 8 22:43:37 2004 J.T. Conklin + + * ace/config-integritySCA.h: + * m4/config_h.m4: + Removed vestigial mentions of ACE_HAS_ONE_DEFINITION_RULE. + +Sun Aug 8 17:38:05 2004 J.T. Conklin + + * ace/README: + * ace/config-g++-common.h: + Removed vestigial mentions of ACE_HAS_GNUG_PRE_2_8. + + * m4/compiler.m4: + * m4/config_h.m4: + Removed check for ACE_HAS_GNUC_BROKEN_TEMPLATE_INLINE_FUNCTIONS + and ACE_HAS_GNUG_PRE_2_8, as those feature test macros have been + removed from ACE for some time. + + * m4/config_h.m4: + * m4/threads.m4: + Replaced AH_TEMPLATE for ACE_HAS_STHREADS and ACE_HAS_PTHREADS + with third argument to AC_DEFINE. + +Sun Aug 8 07:12:32 2004 J.T. Conklin + + * configure.ac: + Start converting checks for for prototypes to use AC_CHECK_DECL + instead of AC_EGREP_CPP or AC_EGREP_HEADER. + + * ace/OS_NS_sys_resource.inl: + Changed so conditionals aren't used inside macro call. + + * m4/subsets.m4: + Changed AC_HELP_STRING to AS_HELP_STRING. + + * ace/config-sco-4.2-nothread.h: + * ace/config-sco-5.0.0-mit-pthread.h: + * ace/config-sco-5.0.0.h: + * ace/config-tandem.h: + Removed (commented-out) definition of ACE_HAS_SYSCALL_GETRUSAGE. + + * ace/config-hpux11.h: + * ace/config-hpux-11.00.h: + Removed ACE_HAS_SYSCALL_GETRUSAGE. getrusage() was added in + HPUX 10.10. + + * configure.ac: + Fixed check for setregid() and setreuid() prototypes to look for + them in , not . + + * m4/config_h.m4: + Replace some AH_TEMPLATE definitions. ACE_CHECK_HAS_HEADERS and + ACE_CHECK_LACKS_HEADERS provide autoheader templates themselves. + + * configure.ac: + Replace some calls to AC_CHECK_HEADERS with ACE_CHECK_HAS_HEADERS + or ACE_CHECK_LACKS_HEADERS. + + * m4/ace_headers.m4: + New file, with ACE_CHECK_HAS_HEADERS and ACE_CHECK_LACKS_HEADERS + autoconf macros. These macros are similar to AC_CHECK_HEADERS, + but define either ACE_HAS_ or ACE_LACKS_. + + * ace/OS_NS_unistd.inl: + * config-rtems.h: + Changed name of feature test macro ACE_HAS_GETOPT_PROTO to + ACE_HAS_GETOPT_PROTOTYPE. + + * ace/config-linux-common.h: + * ace/config-unixware-7.1.0: + * ace/config-unixware-7.1.0.udk.h: + * ace/os_include/sys/os_resource.h: + Changed name of feature test macro ACE_HAS_GETRUSAGE_PROTO to + ACE_HAS_GETRUSAGE_PROTOTYPE. + + * ace/Basic_Types.h: + * ace/config-chorus.h: + * ace/config-integritySCA.h: + * ace/config-mvs.h: + * ace/config-openvms.h: + * ace/config-psos-diab.h: + * ace/config-psos-diab-mips.h: + * ace/config-psos-diab-ppc.h: + * ace/config-psos-tm.h: + * ace/config-psosim-g++.h: + * ace/config-tandem.h: + * ace/config-vxworks5.x.h: + * ace/config-win32-common.h: + * ace/os_include/os_limits.h: + Changed name of feature test macro ACE_LACKS_PARAM_H to + ACE_LACKS_SYS_PARAM_H. + + * ace/OS.inl: + * ace/config-dgux-4.11-epc.h: + * ace/config-freebsd.h: + * ace/config-hpux-10.x.h: + * ace/config-hpux-11.00.h: + * ace/config-hpux11.h: + * ace/config-irix5.2.h: + * ace/config-irix5.3-g++.h: + * ace/config-irix5.3-sgic++.h: + * ace/config-irix6.x-common.h: + * ace/config-linux-common.h: + * ace/config-m88k.h: + * ace/config-macosx-panther.h: + * ace/config-macosx.h: + * ace/config-netbsd.h: + * ace/config-openbsd.h: + * ace/config-osf1-3.2.h: + * ace/config-osf1-4.0.h: + * ace/config-sco-4.2-nothread.h: + * ace/config-sco-5.0.0-mit-pthread.h: + * ace/config-sco-5.0.0.h: + * ace/config-sunos4-g++.h: + * ace/config-sunos4-lucid3.2.h: + * ace/config-sunos4-sun3.x.h: + * ace/config-sunos4-sun4.1.4.h: + * ace/config-sunos4-sun4.x.h: + * ace/config-sunos5.4-centerline-2.x.h: + * ace/config-sunos5.4-g++.h: + * ace/config-sunos5.4-sunc++-4.x.h: + * ace/config-sunos5.5.h: + * ace/config-tandem-nsk-mips-v2.h: + * ace/config-tandem.h: + * ace/config-unixware-2.01-g++.h: + * ace/config-unixware-2.1.2-g++.h: + * ace/config-unixware-7.1.0.h: + * ace/config-unixware-7.1.0.udk.h: + * ace/os_include/sys/os_resource.h: + Changed name of feature test macro ACE_HAS_SYSCALL_H to + ACE_HAS_SYS_SYSCALL_H. + +Sat Aug 7 10:43:51 2004 Jeff Parsons + + * ace/OS_NS_string.cpp: + * ace/OS_NS_string.h: + * ace/OS_NS_string.inl: + + Uninlined the ACE_OS::strerror() method, so the #include of ACE.h + necessitated by the changes in + + Fri Aug 6 07:58:54 2004 Douglas C. Schmidt + + can be moved to the .cpp file. + +Fri Aug 6 20:22:02 2004 J.T. Conklin + + * configure.ac: + Added check for mkstemp() which sets ACE_LACKS_MKSTEMP if + it is not available. + +Fri Aug 6 19:13:12 UTC 2004 Martin Corino + + * ace/config-openvms.h: + Added ACE_HAS_VOIDPTR_GETTIMEOFDAY. + +Fri Aug 6 08:17:23 2004 J.T. Conklin + + * m4/ace.m4: + Split new ACE_WITH_RMCAST, ACE_WITH_QOS, and ACE_WITH_SSL macros + out of ACE_CONFIGURATION_OPTIONS so they can be used with other + packages. + + * ace/OS_NS_sys_uio.cpp: + * ace/OS_NS_sys_uio.h: + * ace/OS_NS_sys_uio.inl: + Changed ACE_OS::readv_emulation() and ACE_OS::writev_emulation() + to use const iovec * instead of type of system iovec parameter. + Changed ACE_OS::readv() to cast const qualification of iovec + parameter away if ACE_HAS_NONCONST_READV. + Changed ACE_OS::writev() to cast const qualifiaction of iovec + parameter away if ACE_HAS_NONCONST_WRITEV. + * ace/os_include/os_uio.h: + Removed ACE_READV_TYPE type definition. + Removed ACE_WRITEV_TYPE type definition. + Changed readv_timedwait and writev_timedwait definitions to + use const iovec *'s for iovec parameter. + + * ace/OS_sys_socket.inl: + Cast const qualifiaction away if ACE_HAS_NONCONST_SENDMSG. + * ace/os_include/sys/os_socket.h: + Removed ACE_SENDMSG_TYPE type definition. + + * ace/OS_sys_resource.h: + * ace/OS_sys_resource.inl: + Changed ACE_OS::setrlimit() to use const struct rlimit* + instead of type of system rlimit parameter. Cast const + qualification away if ACE_HAS_NONCONST_SETRLIMIT. + * ace/os_include/sys/os_resource.h: + Removed ACE_SETRLIMIT_TYPE type definition. + + * ace/config-chorus.h: + * ace/config-linux-common.h: + * ace/config-lynxos.h: + * ace/config-m88k.h: + * ace/config-osf1-3.2.h: + * ace/config-osf1-4.0.h: + * ace/config-psos-diab-mips.h: + * ace/config-psos-diab-ppc.h: + * ace/config-psos-diab.h: + * ace/config-psos-tm.h: + * ace/config-psosim-g++.h + * ace/config-rtems.h: + * ace/config-sunos5.4-centerline-2.x.h: + * ace/config-sunos5.4-g++.h: + * ace/config-sunos5.4-sunc++-4.x.h: + * ace/config-tandem-nsk-mips-v2.h: + * ace/config-tandem.h: + * ace/config-vxworks5.x.h: + * configure.ac: + * m4/config_h.m4: + Rename ACE_HAS_BROKEN_SETRLIMIT, ACE_HAS_BROKEN_SENDMSG, + ACE_HAS_BROKEN_READV, and ACE_HAS_BROKEN_WRITEV to + ACE_HAS_NONCONST_SETRLIMIT, ACE_HAS_NONCONST_SENDMSG, + ACE_HAS_NONCONST_READV, and ACE_HAS_NONCONST_WRITEV to + be more descriptive of what's really broken. + + * bin/MakeProjectCreator/config/ec_used_typed_events.mpb: + Changed to inherit from dynamicinterface and ifr_client instead + of providing libs and after statements so that dependency chain + is complete. + +Fri Aug 6 10:26:20 2004 Jeff Parsons + + * ace/OS_NS_string.h: + + Added include of ACE.h needed for WIN32 version of change in + + Fri Aug 6 07:58:54 2004 Douglas C. Schmidt + + * ace/OS_NS_string.inl: + + Fixed typo and mismatched return type for WIN32. + +Fri Aug 6 14:15:12 UTC 2004 Johnny Willemsen + + * ace/config-win32-common.h: + Don't define export macro's also for Visual Age. + + * ace/config-win32-visualage.h: + Added special Visual Age export macros + + Thanks to Boris Kaminer for reporting + this. + +Fri Aug 6 14:14:12 UTC 2004 Martin Corino + + * ace/OS_NS_sys_socket.h: + Removed include for 'ace/os_include/netinet/os_tcp.h'. + * ace/Pipe.cpp: + Added include for 'ace/os_include/netinet/os_tcp.h' to provide + TCP macros/constants (f.i. TCP_NODELAY) for OS like OpenVMS. + +Fri Aug 6 07:58:54 2004 Douglas C. Schmidt + + * ace/Message_Block.cpp (crunch): If rd_ptr_ was greater than + wr_ptr_ memory was overwritten, so added a check for this case + and return -1 in this case. Also, simplified the initial if + statement. Thanks to Boris Kaminer for reporting this. + + * ace/OS_NS_string.inl: Updated ACE_OS::strerror() so it checks + for socket errors explicitly. Thanks to Boris Kaminer + for reporting this. + +Fri Aug 6 10:18:12 UTC 2004 Martin Corino + + * ace/config-openvms.h: + Added ACE_LACKS_REALPATH. + Added '#define MAXSYMLINKS 0'. + Removed uppercase macros for pthread symbols. + +Fri Aug 6 10:08:12 UTC 2004 Martin Corino + + * ace/OS_NS_sys_socket.h: + Added include for 'ace/os_include/netinet/os_tcp.h' to provide + TCP macros/constants (f.i. TCP_NODELAY) for OS like OpenVMS. + +Fri Aug 6 09:50:12 UTC 2004 Johnny Willemsen + + * bin/make_release: + For generating the project files for borland, vc6 & vc71 set + qos=1 in the default.features file, these environments support + qos. + +Fri Aug 6 09:41:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + Just always use Makefile.bor as workspace name, this is the way + our Borland users expect things to work. + +Fri Aug 6 09:15:00 UTC 2004 Simon Massey + + * apps/JAWS3/jaws3/Reactive_IO_Helpers.h + private -> public ~JAWS_IO_Reactive_Handler (void) due to + aCC: HP ANSI C++ B3910B A.03.39 compiler bug not allowing + friend derived classes access. + +Fri Aug 6 08:34:12 UTC 2004 Johnny Willemsen + + * ace/config-win32-msvc-7.h: + * ace/config-win32-msvc-8.h: + Added ACE_HAS_TEMPLATE_TYPEDEFS + + * ace/config-win32-visualage.h: + Added huge list of new defines + + * ace/Event_Handler_T.h: + Instead of -1 use ACE_INVALID_HANDLE to make it portable + + * ace/Malloc.cpp: + Corrected assert + + * ace/OS_NS_sys_stat.h: + For IBMCPP also define ACE_stat as stat + + * ace/OS_NS_sys_stat.inl (stat): + For Visual Age use special _stat call + + * ace/Task.cpp (svc_run): + For Visual Age also do a static cast + + Thanks to Boris Kaminer for reporting + this. + +Fri Aug 6 08:03:12 UTC 2004 Johnny Willemsen + + * ace/config-win32-msvc-8.h: + Added this file for msvc8, is a copy of msvc7 but this will change as + things are tested for msvc8. + + * ace/config-win32-msvc.h: + If msvc_ver >= 1400 then we are including the msvc-8 file. + +Thu Aug 5 23:50:38 2004 J.T. Conklin + + * bin/MakeProjectCreator/config/ec_use_typed_events.mpb: + Changed to inherit from dynamicinterface and ifr_client instead + of providing libs and after statements so that dependency chain + is complete. + +Thu Aug 5 13:17:26 2004 Douglas C. Schmidt + + * ace/ACE.cpp (sock_error): Changed the WSAEWOULDBLOCK message + back to "resource temporarily unavailable" to be consistent with + the UNIX error string. Thanks to Boris Kaminer + for reporting this. + + * examples/NT_Service/ntsvc.{h,cpp}: Added a destructor to + Service that cancels the timer. Thanks to Scott Harris + for this fix. + + * ace/ACE.cpp (sock_error): Added support for WSAEISCONN. + Thanks to Boris Kaminer for reporting + this. + +Thu Aug 5 07:45:53 2004 J.T. Conklin + + * m4/config_h.m4: + Replace some AH_TEMPLATE definitions. ACE_CHECK_HAS_FUNCS and + ACE_CHECK_LACKS_FUNCS provide autoheader templates themselves. + + * configure.ac: + Replace some calls to AC_CHECK_FUNCS with ACE_CHECK_HAS_FUNCS or + ACE_CHECK_LACKS_FUNCS. + + * m4/ace_functions.m4: + New file, with ACE_CHECK_HAS_FUNCS and ACE_CHECK_LACKS_FUNCS + autoconf macros. These macros are similar to AC_CHECK_FUNCS, + but define either ACE_HAS_ or ACE_LACKS_. + +Thu Aug 5 09:21:12 UTC 2004 Johnny Willemsen + + The following changes are from Martin Corino + + * bin/mwc.pl: + * bin/mpc.pl: + * bin/depgen.pl: + * bin/cle.pl: + Added various changes to support autobuild MPC generation on + OpenVMS. + +Wed Aug 4 18:09:47 2004 J.T. Conklin + + * m4/ace.m4: + * configure.ac: + Support --with/without-tao flag to provide find grain + control over TAO configuration. + +Wed Aug 4 16:19:40 2004 Ossama Othman + + * ace/Global_Macros.h (ACE_CORBA_1, ACE_CORBA_2, ACE_CORBA_3): + + Marked these macros as deprecated, and removed the version of + these macros that defined the obsolete "CORBA_foo" broken + namespace workaround classes. + +Wed Aug 4 14:46:07 2004 J.T. Conklin + + * Makefile.am: + * configure.ac: + Configure TAO if TAO subdirectory is present. + +Wed Aug 4 16:33:14 2004 Balachandran Natarajan + + * ace/Select_Reactor_T.cpp: + + Fix for Bug 1893. Please see + + http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1893 + + for details. Thanks to Alan L Batongbacal + for the patch. + +Wed Aug 4 08:31:43 2004 Douglas C. Schmidt + + * ace/config-linux-common.h: If the version of glibc + is less than 2.1 add the ACE_HAS_NONCONST_MSGSND macro. Thanks + to Anand and Johnny Willemsen for this + fix. + +Tue Aug 3 15:25:43 2004 Ossama Othman + + From Jaroslaw Nozderko . + * ace/Dev_Poll_Reactor.cpp (register_handler_i): + + Allow same handler to be registered with a different event, + which is consistent with the other reactor implementations. + +Tue Aug 3 13:04:24 2004 J.T. Conklin + + * ace/Svc_Handler.h: + * ace/Svc_Handler.cpp: + Add throw() exception specifier to no-throw version of class + local operator new. In addition to squelching warnings from + gcc, this tells the compiler to check the return value before + constructing the object. + +Tue Aug 3 08:55:37 2004 J.T. Conklin + + * ace/Condition_Recursive_Thread_Mutex.cpp: + * ace/Functor.inl: + * ace/config-borland-common.h: + * ace/config-g++-common.h: + * ace/config-hpux-11.00.h: + * ace/config-lite.h: + * ace/config-lynxos.h: + * ace/config-sunos5.5.h: + * ace/config-tandem-nsk-mips-v2.h: + * ace/config-win32-ghs.h: + Remove vestigial traces of ACE_TEMPLATE_METHOD_SPECIALIZATION. + +Tue Aug 3 14:42:12 UTC 2004 Johnny Willemsen + + * ace/Containers_T.cpp: + Fixed incorrect trace macro + +Tue Aug 3 08:22:10 2004 Douglas C. Schmidt + + * ace/config-aix-5.x.h: + ace/OS_NS_dirent.inl (readdir_r): Added support for AIX and G++. + Thanks to Raz Ben-Yehuda . + +Tue Aug 3 11:56:12 UTC 2004 Johnny Willemsen + + * bin/msvc_static_order.lst: + Updated location of TAO vc6 static project files + +Tue Aug 3 06:19:06 2004 Chad Elliott + + * bin/MakeProjectCreator/config/acedefaults.mpb: + + Added macros in a specific section for the bmake project type. + +Tue Aug 3 07:07:12 UTC 2004 Johnny Willemsen + + * bin/MakeProjectCreator/modules/BorlandProjectCreator.pm: + * bin/MakeProjectCreator/templates/bor.mpd: + Updated Borland templates to handle resource files in + subdirectories, this is needed for the moving of the mpc + files in TAO. Thanks to J.T. Conklin for making these + patches. + +Mon Aug 2 15:33:27 2004 Steve Huston + + * ace/Containers_T.cpp (ACE_Fixed_Set_Iterator::remove()): Had to + qualify 'iterated_items_' with 'this->' to make it visible in this + class now that iterated_items_ is in an inherited class. This per + HP-UX aC++, citing [temp.dep], 14.6.2(3) in the C++ Standard. + +Mon Aug 2 15:20:37 2004 Steve Huston + + * apps/JAWS3/jaws3/Event_Result.h: Added #include + "ace/os_include/os_stddef.h" to pick up size_t for platforms where + it's not defined by the compiler, such as Cygwin. Thanks to + Johnny Willemsen for reporting this. + +Mon Aug 2 08:55:17 2004 Douglas C. Schmidt + + * ace/Containers_T.h: The class ACE_Fixed_Set had some bugs in + it's interface declaration and also some in it's implementation: + 1) typedef the wrong class for is constant iterator and + 2) its method size() misbehave in certain circumstances where + elements were randomly deleted from a set object. + Moreover, the iterators of ACE_Fixed_Set has a lot of code in + common so the can be refactored to have a common abstract + ancestor with all the shared code. Therefore, refactored the + three classes and fixed the bug on the size() method. Thanks + to J. Abelardo Gutierrez for these fixes. + +Mon Aug 2 09:06:39 2004 Steve Huston + + * ace/os_include/os_signal.h: Removed the #include os_time.h - it's + not needed for anything in this header, and for some reason, it + introduces a type oddity on HP-UX - aC++ gets the idea there's a + tentative struct sigaction and doesn't match the real one, causing + compile errors in ACE_OS::sigaction(). + + * ace/OS_TLI.h: Removed stray '#'. + + * ace/Signal.{h inl}: Removed the hack typedef ACE_SIGACTION that + was allegedly put in for an HP-UX C++ bug. It's not needed and is + causing further problems. #include "ace/os_include/os_signal.h" + to get the needed signal-related types. + + * apps/JAWS3/jaws3/Event_Result.h: Changed #include "ace/OS.h" to + "ace/OS_NS_errno.h". Removing the "big hammer" OS.h stuff. This + fixes a compile error in OS_TLI.inl on HP-UX w/ aC++. Why? I + have no idea... there's something odd still about orders of + includes and/or preprocessor defs or something. This odd compile + error creeps up every once in a while and is always related to + fudging something somewhere (see fix above for signal...) but + this one doesn't have an apparant cause. + + * include/makeinclude/platform_hpux_aCC.GNU: Removed AREXTRA. It + was breaking static lib builds. + +Sun Aug 1 08:15:23 2004 J.T. Conklin + + * configure.ac: + Moved subdirectory configuration above call to AC_OUTPUT. + + * ace/OS_Memory.h: + Provide ACE_nothrow and ACE_nothrow_t definitions for platforms + where definitions are not handled by special cases. + + * configure.ac: + * m4/config_h.m4: + Added check for ACE_HAS_NEW_NOTHROW. + +Sun Aug 1 15:04:12 UTC 2004 Johnny Willemsen + + * ace/QoS/qos.mpc: + Also with bmake set macros += ACE_HAS_WINSOCK2_GQOS + + * ace/Select_Reactor_Base.h: + * ace/Object_Manager_Base.cpp: + * ace/Object_Manager.cpp: + * ace/Global_Macros.h: + * ace/Dev_Poll_Reactor.h: + Doxygen improvements/fixes + + * ace/config-openvms.h: + Removed commented out lines + + * ace/CDR_Stream.h: + Changed to signature for the to_string methods from char to + ACE_CDR::char so that they match the implementation + +Sun Aug 1 09:07:16 2004 Balachandran Natarajan + + * ChangeLogs/ChangeLog-04a: + + Moved contents from this file to a new file. + +Sat Jul 31 17:01:27 2004 Balachandran Natarajan + + * bin/generate_rel_manpages: + + This is now executed at tao.dre for generating doxygen + documentation. The files are then scp'ed to the main website. + +Sat Jul 31 11:13:20 2004 Ossama Othman + + * ACE version 5.4.2 released. + +Local Variables: +add-log-time-format: current-time-string +End: diff --git a/ACE/ChangeLogs/ChangeLog-05a b/ACE/ChangeLogs/ChangeLog-05a new file mode 100644 index 00000000000..c6a64f51119 --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-05a @@ -0,0 +1,5879 @@ +Fri May 13 06:08:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_time.inl: + Made fix for Intel C++ compiler under Windows + +Thu May 12 10:20:55 2005 Douglas C. Schmidt + + * Updated the COPYING file to clarify some ambiguity about + proprietary usage of ACE. + +Tue May 10 08:34:16 2005 Douglas C. Schmidt + + * ace/Token.h (ACE_Token): Improved the documentation to emphasize + that the semantics aren't truly readers/writer. Thanks to + Altaf Aali for motivating this. + + * ace/OS_NS_Thread.cpp (thr_create): Fixed a bug that wasn't + allowing the stack size to be size if the stack address wasn't + also being set. Thanks to Andreas Schuler + for reporting this. + +Fri May 6 13:50:12 UTC 2005 Martin Corino + + * ace/OS_NS_time.inl: + Fixed ACE_OS::gethrtime() for Intel Compiler on PENTIUM plaform. + +Fri May 6 11:29:12 UTC 2005 Johnny Willemsen + + * tests/Timer_Cancellation_Test.cpp: + Added missing ACE_TEXT macro usage + +Fri May 6 10:52:12 UTC 2005 Johnny Willemsen + + * tests/Recursive_Condition_Bug_Test.cpp: + When creating the ACE_Message_Block using an allocator, pass the + allocator to the ACE_Message_Block so that the MB will use that + allocator to free itself. Fixes a mismatch free/delete error + with valgrind + +Fri May 6 10:39:12 UTC 2005 Johnny Willemsen + + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + Fixed invalid read in the valgrind build. + +Thu May 5 11:33:12 UTC 2005 Johnny Willemsen + + * bin/tao_other_tests.lst: + Don't run the Notify Reconnecting test in a static build. Thanks + to Justin Michel for confirming this + +Thu May 5 11:27:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + When building shared libraries add -Wl,-E to the linker options + to be able to do a dynamic_cast in a shared library of a class + that is defined in the application. This fixes the ACE DLL_Test + failure with the Intel C++ Compiler. + +Tue May 3 14:27:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_aix_g++.GNU: + Simplified this file + + * include/makeinclude/platform_aix_ibm.GNU: + Simplified this file and set gcc as preprocessor for TAO_IDL. The + Visual Age preprocessor is not usable for building applications + with idl files that include other idl files which only contain + includes. This is reported to IBM and we now force gcc as + preprocessor to prevent all kind of strange errors when building + the TAO examples/tests + +Sun May 1 09:59:12 UTC 2005 Johnny Willemsen + + * examples/Reactor/Misc/pingpong.cpp: + Fixed compile error + +Sun May 1 01:06:34 2005 Ossama Othman + + * ace/Select_Reactor_Base.cpp: + * ace/Select_Reactor_Base.inl: + + Moved all virtual functions out of line. Inlining them prevents + run-time type identification from functioning properly when + using g++ 4.x's "-fvisibility-inlines-hidden" command line + option/feature. Addresses failed dynamic_cast<>s of an + ACE_Reactor_Impl base class to an ACE_Select_Reactor subclass. + + * ace/Select_Reactor_Base.h (~ACE_Reactor_Notify): + + Explicitly declare this destructor as virtual. It was already + implicitly virtual due to the virtual destructor in the + ACE_Event_Handler base class. This explicit declaration is + simply a reminder that it is virtual, and shouldn't be inlined + since doing so can potentially cause failed dynamic_cast<>s when + using g++ 4.x's hidden visibility of inlined functions feature. + +Sat Apr 30 15:24:13 2005 Douglas C. Schmidt + + * examples/Reactor/Misc/pingpong.cpp (run_svc): Allocate the + Ping_Pong callback dynamically to avoid crashses when things + close down. Thanks to Johnny Willemsen for narrowing down the + problem and to Alex Ott for reporting it. + +Fri Apr 29 23:45:59 2005 Ossama Othman + + * examples/Bounded_Packet_Relay/BPR_Drivers.cpp: + * examples/Bounded_Packet_Relay/BPR_Drivers.h: + * examples/Mem_Map/IO-tests/IO_Test.cpp: + * examples/Mem_Map/IO-tests/IO_Test.h: + * examples/Reactor/Misc/test_event_handler_t.cpp: + * examples/Threads/future2.cpp: + * examples/Timer_Queue/Driver.cpp: + * examples/Timer_Queue/Driver.h: + + Added virtual destructor to silence g++ 4.0 warnings. + + * examples/Threads/future2.cpp (test_timeout): + + Fixed "variable may be used initialized" warning. + +Fri Apr 29 09:25:28 2005 Douglas C. Schmidt + + * ace/Thread_Exit.cpp (cleanup): Set ACE_Thread_Manager::thr_exit_ + to 0 to prevent a later crash in + ACE_Thread_Manager::set_thr_exit(). Thanks to D. J. Stachniak + for submitting a fix and Slava Gorelik + for reporting the problem. + +Fri Apr 29 12:42:12 UTC 2005 Johnny Willemsen + + * ACE-INSTALL.html: + Added some info about Visual Age versions that cause problems + +Fri Apr 29 08:55:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + On IA64 add -mp to the compiler flags to disable the optimizer + because of problems in the TAO IDL_Test + +Thu Apr 28 23:06:59 2005 Ossama Othman + + * ace/config-linux-common.h: + + Do not perform feature tests using implementation-specific + preprocessor symbols. Use the standard ones instead + (e.g. _POSIX_C_SOURCE, _ISO_C99SOURCE, _BSD_SOURCE, + _XOPEN_SOURCE, etc). + +Thu Apr 28 22:53:16 2005 Ossama Othman + + * ace/config-linux-common.h (ACE_LACKS_MKSTEMP_PROTOTYPE): + + Do not define this preprocessor symbol if _XOPEN_SOURCE_EXTENDED + is already defined. Addresses mkstemp() unmatched prototype + related errors exhibited by g++ 4.0 on some Linux platforms. + +Wed Apr 27 14:29:03 2005 J.T. Conklin + + * ace/Log_Msg.cpp (ACE_Log_Msg::log_hexdump): + + Check log priority before allocating message buffer and + formatting message, an unnecessary expense if the message isn't + going to be output. Thanks to for + reporting this problem. + +Wed Apr 27 20:25:12 UTC 2005 Johnny Willemsen + + * examples/Reactor/Misc/pingpong.cpp: + When no commandline argument has been passed, exit normally with + an ACE_ERROR_RETURN instead of an abort. Thanks to Alex Ott + for reporting this. + +Wed Apr 27 18:30:12 UTC 2005 Johnny Willemsen + + * ace/Message_Block.h: + Removed include of stdlib.h, it shouldn't be here + + * ace/Process_Semaphore.h: + * ace/Reactor.h: + * ace/SOCK_Stream.h: + * ace/Task.h: + * ace/Token_Request_Reply.h: + * ace/UPIPE_Stream.h: + Doxygen improvements + +Wed Apr 27 15:31:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/ace_tk.mpb: + Fixed wrong LDFLAGS. Thanks to Peter Grotrian + for reporting this. This + fixes bugzilla [2096] + +Wed Apr 27 15:27:12 UTC 2005 Johnny Willemsen + + * ace/Barrier.h: + * ace/DLL.cpp: + Added missing includes when threads=0. Thanks to Peter Grotrian + for reporting this. This + fixes bugzilla [2097] + +Wed Apr 27 15:11:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_unistd.inl: + When ACE_HAS_CLOCK_GETTIME is defined include ace/os_include/ + os_time.h to get nanosleep. Fixes compile errors with gcc on ia64 + +Tue Apr 26 10:59:02 2005 J.T. Conklin + + * netsvcs/lib/Makefile.am: + + Add *_LDFLAGS definition to set shared library version number. + +Sun Apr 24 14:02:51 2005 Emre Turkay + + * bin/ciao_tests.lst: + + CIAO regression test won't run on minimum_corba. Added the + configuration requirement in the file. + +Sun Apr 24 10:53:40 2005 Nanbor Wang + + * ace/MEM_Stream.h: + * ace/MEM_Acceptor.cpp: Changed code to ensure the internal buffer + size of MEM_Stream will be at least 4096 bytes by default. The + minimum internal buffer size determines the largest message + allowable per send operation. This size used to depend on the + default minimum size of ACE_Malloc size, which currently no + longer allocates a minimum of 4K memory. One can change the + default MEM_Stream buffer size by redefining the + ACE_MEM_STREAM_MIN_BUFFER (in bytes) in the config.h file. + + Thanks to Voronkov Konstantin for + motivating this change. + +Sun Apr 24 09:49:12 UTC 2005 Johnny Willemsen + + * ace/config-aix-5.x.h: + Removed GNUC check for ACE_HAS_POSIX_GETPWNAM_R. + +Sat Apr 23 20:09:12 UTC 2005 Johnny Willemsen + + * ace/CDR_Size.cpp: + * ace/CDR_Stream.cpp: + Do the include of SString.h before the include of the inline file + to fix compile problems with AIX + +Sat Apr 23 20:05:12 UTC 2005 Johnny Willemsen + + * ace/TP_Reactor.cpp: + Added include of OS_NS_sys_time.h to get ACE_OS::gettimeofday() + +Sat Apr 23 13:12:27 2005 Douglas C. Schmidt + + * ace/Task.inl (grp_id): + * ace/Managed_Object.h (class ACE_Managed_Object): + * ace/Thread.inl (setprio): + * ace/OS_NS_Thread.inl: + Changed all uses of "id" to something else to avoid conflicts + with Mac OS X, where "id" is a keyword. Thanks to Ron Wilson + for reporting this problem. + +Sat Apr 23 08:20:11 2005 Ossama Othman + + * examples/Log_Msg/test_log_msg.cpp (ACE_TMAIN): + * tests/Log_Msg_Test.cpp (test_log_msg_features): + + Fixed "possible loss of data" VC++ 7.1 warnings. + +Fri Apr 22 18:02:37 2005 Douglas C. Schmidt + + * ace/Log_Msg.cpp (open): Fixed a problem with LOGGER and logger_key + and the backend_->open() call. Thanks to Jerry D. De Master + for reporting this. + +Fri Apr 22 22:45:35 2005 Ossama Othman + + * apps/JAWS3/jaws3/Event_Completer.h (~JAWS_Event_Completer): + * apps/JAWS3/jaws3/Event_Completer.cpp (~JAWS_Event_Completer): + * examples/APG/ThreadPools/Futures.cpp (~IManager): + * examples/APG/ThreadPools/ThreadPool.cpp (~IManager): + * examples/APG/Timers/PCB.h (~PCB): + * examples/APG/Timers/PCB.cpp (~PCB): + * performance-tests/Misc/test_mutex.cpp (~Mutex_Base): + + Added virtual destructor to silence g++ 4.0 warnings. + + * examples/APG/Containers/DataElement.h: + * examples/APG/Containers/Stacks.cpp: + * examples/APG/ThreadPools/Futures.cpp: + * examples/APG/ThreadSafety/TSS.cpp (get_attribute): + * performance-tests/Server_Concurrency/Latency_Stats.h + (Throughput_Stats): + * tests/Cache_Map_Manager_Test.cpp (find_test_hash_cache): + * tests/Future_Test.cpp (run_main): + * tests/Map_Manager_Test.cpp: + + Fixed "variable may be used initialized" g++ 4.0 warnings. + + * examples/APG/Naming/Temperature_Monitor2.cpp (record_history): + * examples/Log_Msg/test_log_msg.cpp (ACE_TMAIN): + * tests/Log_Msg_Test.cpp (test_log_msg_features): + + Fixed "operation may undefined" g++ 4.0 warnings. + + * tests/Message_Block_Test.cpp: + + Fixed "non-local variable ' alloc_struct [2]' + uses anonymous type" g++ 4.0 warning. + +Fru Apr 22 18:13:12 UTC 2005 Johnny Willemsen + + * ACE-INSTALL.html: + Added AIX to the list of Remedy IT supported platforms + +Fri Apr 22 12:14:41 2005 Balachandran Natarajan + + * ace/Connector.cpp: + * ace/Connector.h: + + Added a new version of NBCH::close () which can be used by + ACE_Connector::cancel () . The close () was essential for the + cancel () to provide proper pre and post conditions, without + which applications have no clue on the status of things. + +Thu Apr 21 23:57:33 2005 Ossama Othman + + * include/makeinclude/platform_g++_common.GNU: + + Only add g++ 4.x visibility flags when shared libraries are + enabled. + +Thu Apr 21 18:37:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + Set optimize default to 0 when not set. The optimizer of the Intel + Compiler can cause several problems, so disable it by default + +Thu Apr 21 18:30:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + Simplified this file + +Thu Apr 21 18:16:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_sunos5_g++.GNU: + Simplified this file and use exceptions by default, just as with + suncc + +Wed Apr 20 16:06:22 2005 Steve Huston + + * tests/run_test.pl: If -t is specified (run specified test[s]) then + don't load run_test.lst. This allows autoconfig builds to use this + script to run the "make check"-ordered tests using this script + to do log checks and timeouts. + +Wed Apr 20 20:01:12 UTC 2005 Johnny Willemsen + + * tests/ACE_Test.cpp: + Now fixed the compile warning for real + +Wed Apr 20 12:51:17 2005 Ossama Othman + + * ace/Cleanup_Strategies_T.cpp: + * ace/Cleanup_Strategies_T.h: + * apps/Gateway/Gateway/File_Parser.h: + * apps/Gateway/Gateway/File_Parser.cpp: + * examples/Web_Crawler/URL_Visitor.cpp: + * examples/Web_Crawler/URL_Visitor.h: + * examples/Web_Crawler/URL_Visitor_Factory.cpp: + * examples/Web_Crawler/URL_Visitor_Factory.h: + + Added virtual destructors to address g++ 4.0 warnings. + +Wed Apr 20 07:15:12 UTC 2005 Johnny Willemsen + + * tests/ACE_Test.cpp: + Fixed compile warning + +Tue Apr 19 18:46:29 2005 Steve Huston + + * tests/Makefile.am: Correct the variable name used to inject a test + executor - TESTS_ENVIRONMENT, not TEST_ENVIRONMENT. + +Tue Apr 19 16:41:47 2005 Steve Huston + + * ace/Basic_Types.h: Don't attempt to typedef ACE_UINT64 based on + specific available types if ACE_LACKS_LONGLONG_T or + ACE_LACKS_UNSIGNEDLONGLONG_T is defined - in either of these 'lacks' + is set, ACE_U_LongLong is declared and typedef'd to ACE_UINT64. + + * tests/Proactor_Test.cpp: + * tests/Proactor_Test_IPV6.cpp: Added missing template instantiations. + +Tue Apr 19 19:17:12 UTC 2005 Johnny Willemsen + + * ace/ACE.inl: + Fixed log2 method. It returned incorrectly log2(x) + 1. + + * ace/Log_Record.cpp: + Removed from priority_names_ array now log2 gives back the + correct result + + * tests/ACE_Test.cpp: + Added a regression test for ACE::log2. + + This fixes bugzilla bug 2078. Thanks to Brian O'Connor + for reporting this problem. + +Tue Apr 19 18:34:12 UTC 2005 Johnny Willemsen + + * ace/config-pharlap.h: + Define IP_TOS to 8 when ACE_HAS_PHARLAP_RT is defined. Thanks to + David Hauck for this fix + +Tue Apr 19 16:22:12 UTC 2005 Johnny Willemsen + + * ace/Time_Value.h: + Fixed compile problem with Embedded Visual C++ 4.0 using a release + build. Thanks to Mitscher Dubreus + for reporting this problem and to Bruce Elliot + for delivering the fix. + +Tue Apr 19 08:32:12 UTC 2005 Johnny Willemsen + + * examples/APG/ThreadPools/ThreadPool.cpp: + * examples/C++NPv1/Reactive_Logging_Server_Ex.h: + Initialise pointer with 0 + +Tue Apr 19 08:31:12 UTC 2005 Johnny Willemsen + + * examples/APG/ThreadSafety/Mutex.cpp: + Added virtual destructor to LogMessage to silince pre gcc 4.0 + +Tue Apr 19 06:54:12 UTC 2005 Johnny Willemsen + + * examples/ASX/UPIPE_Event_Server/UPIPE_Event.mpc: + * examples/ASX/Event_Server/Event_Server/Event.mpc: + * examples/ASX/Event_Server/Transceiver/Transceiver.mpc: + Fixed these mpc files, they should build an executable, not a + shared library + +Mon Apr 18 17:56:36 2005 J.T. Conklin + + * configure.ac: + + Add check for check_settime and set ACE_HAS_CLOCK_SETTIME if + it exists. + +Mon Apr 18 19:16:12 UTC 2005 Johnny Willemsen + + * ace/config-win32-borland.h: + Added a check that when threading is enabled we have to link + with multithreaded libraries. + +Mon Apr 18 11:43:05 2005 Emre Turkay + + * bin/auto_run_tests.pl: + + Fixed a typo preventing autobilds to run CIAO test. + +Mon Apr 18 11:38:29 2005 Steve Huston + + * examples/Reactor/WFMO_Reactor/Window_Messages.cpp: Remove poorly + ordered auto_ptr for ACE_Msg_WFMO_Reactor instance. Let the + ACE_Reactor object delete the implementation to assure correct order. + +Mon Apr 18 14:12:12 UTC 2005 Johnny Willemsen + + * examples/APG/Active_Objects/AO.cpp: + * examples/APG/Active_Objects/AO2.cpp: + Initialise local variables with 0 + +Mon Apr 18 12:54:12 UTC 2005 Johnny Willemsen + + * tests/RB_Tree_Test.cpp: + Initialise pointer with 0 + +Mon Apr 18 12:42:12 UTC 2005 Johnny Willemsen + + * examples/Threads/future1.cpp: + Initialise pointer with 0 + +Mon Apr 18 11:26:12 UTC 2005 Johnny Willemsen + + * netsvcs/lib/Server_Logging_Handler_T.cpp: + * tests/Cache_Map_Manager_Test.cpp: + * tests/Logging_Strategy_Test.cpp: + Removed pragma once to fix gcc pre 4.0 warning + + * tests/Future_Set_Test.cpp: + * tests/OrdMultiSet_Test.cpp: + Initialise pointer with 0 + + * tests/SOCK_Test_IPv6.cpp: + Moved ACE_ALPHABET into ACE_HAS_IPV6 block + +Mon Apr 18 10:05:12 UTC 2005 Johnny Willemsen + + * ace/config-win32-common.h: + * ace/config-win32-msvc.h: + Moved the _MT check from the win32-common file to win32-msvc, this + check is for msvc, not for Borland and g++. Thanks to + Stefan Morrow for motivating this + change. + + * include/makeinclude/compiler.bor: + No need to define _MT + +Mon Apr 18 09:46:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added new Deactivate_Object test + +Mon Apr 18 07:22:12 UTC 2005 Johnny Willemsen + + * ace/Parse_Node.{h,cpp,inl}: + Removed inl file, it is empty + + * ace/ace.mpc: + Added Parse_Node.cpp, it was not listed + + * ace/Makefile.am: + Removed Parse_Node.inl + +Sun Apr 17 20:02:01 2005 Olli Savia + + * ace/README: + * ace/config-unixware-2.01-g++.h: + * ace/config-unixware-2.1.2-g++.h: + Removed references to ACE_HAS_THREAD_T. It is no longer + used in ACE/TAO code. + +Sun Apr 17 19:49:05 2005 Olli Savia + + * ace/config-netbsd.h: + * ace/config-unixware-7.1.0.h: + * ace/config-unixware-7.1.0.udk.h: + Removed ACE_HAS_SYS_IOCTL_H definition. It is no longer + used in ACE/TAO code. + +Sun Apr 17 19:33:55 2005 Olli Savia + + * ace/config-win32-interix.h: + Removed ACE_HAS_ANSI_CASTS definition. It is no longer + used in ACE/TAO code. + +Sun Apr 17 10:44:43 2005 Douglas C. Schmidt + + * ace/ACE.cpp (sock_error): Added a bunch more WSA* socket error + values. Thanks to Arto Jalkanen for + contributing this. + +Sun Apr 17 07:51:55 2005 Ossama Othman + + * ace/config-lite.h (ACE_EXPORT_SINGLETON_DECLARATION): + (ACE_EXPORT_SINGLETON_DECLARE): + + Added suitable defaults when ACE_HAS_CUSTOM_EXPORT_MACROS is + defined and these aren't. + +Sun Apr 17 17:34:38 2005 Olli Savia + + * ace/config-win32-interix.h: + * m4/config_h.m4: + Removed references to ACE_HAS_SYSCALL_H. It is no longer + used in ACE/TAO code. + +Sat Apr 16 20:47:11 2005 Emre Turkay + + * bin/ciao_tests.lst: + + The required constraints Exceptions and !STATIC are added to the + CIAO test. + +Sat Apr 16 20:37:07 2005 Emre Turkay + + * bin/auto_run_tests.pl: + * bin/ciao_tests.lst: + + Added auto_build tests for CIAO. + +Sat Apr 16 16:33:53 2005 Ossama Othman + + * ace/Parse_Node.inl: + * ace/Parse_Node.cpp: + + Moved inlined virtual destructors out of line. Addresses + unresolved symbol errors when using g++ 4.0 with a default + symbol visibility set to "hidden". + +Sat Apr 16 09:18:42 2005 Ossama Othman + + * ace/Reactor.inl: + * ace/Reactor.cpp: + + Moved inlined virtual methods out of line. Addresses unresolved + symbol errors when using g++ 4.0's "-fvisibility-inlines-hidden" + command line option. The methods can be inlined again once/if + we make the methods non-virtual. Since the ACE_Reactor now + implements the Bridge design pattern, they no longer need to be + virtual. However, they will remain virtual for a while due to + potential user legacy app / backward compatibility issues. + +Fri Apr 15 11:36:45 2005 Ossama Othman + + * ace/Timeprobe.h: + + Drop the semi-colon after the ACE_SINGLETON_DECLARE. The + convention is not to add a trailing semi-colon. Addresses a g++ + 4.0 CVS snapshot error about an extra semi-colon. + + * ace/config-g++-common.h (ACE_EXPORT_SINGLETON_DECLARE): + + Added a trailing semi-colon in the definition of this macro for + g++ 4.x or better. This is the same convention we use for + Windows. + +Fri Apr 15 12:14:12 UTC 2005 Martin Corino + + * bin/PerlACE/ProcessVX_Win32.pm: + Simplification and improvements. + +Fri Apr 15 11:59:12 UTC 2005 Martin Corino + + * bin/tao_orb_tests.lst: + Excluded some tests explicitly for VxWorks builds. + +Fri Apr 15 09:33:12 UTC 2005 Martin Corino + + * ACE_INSTALL.html: + Some updates concerning VxWorks support. + +Thu Apr 14 23:35:57 2005 Ossama Othman + + * ace/Timeprobe.h: + + Include "ace/Null_Mutex.h" to pull in complete ACE_Null_Mutex + type. Fixes "incomplete type" errors. + + * ace/config-g++-common.h (ACE_EXPORT_SINGLETON_DECLARATION): + (ACE_EXPORT_SINGLETON_DECLARE): + + Define these macros to a suitable C++ expression. Addresses + syntax errors. + +Fri Apr 15 07:57:38 2005 Olli Savia + + * ace/Ping_Socket.cpp: + Replaced NULL with 0. + +Fri Apr 15 07:39:20 2005 Olli Savia + + * ace/OS.inl: + Fixed typo in comment. + + * ace/config-integritySCA.h: + Removed ACE_HAS_SYSENT_H definition. It is no longer + used in ACE/TAO code. + +Fri Apr 15 07:27:38 2005 Olli Savia + + * ace/README: + Removed ACE_HAS_BROKEN_ENUMS. It is no longer used in ACE/TAO code. + + * ace/config-fsu-pthread.h: + * ace/config-mit-pthread.h: + * ace/config-sco-5.0.0-mit-pthread.h: + Removed ACE_HAS_PTHREAD_ATTR_INIT, ACE_HAS_PTHREAD_ATTR_DESTROY and + ACE_HAS_PTHREAD_YIELD_VOID_PTR definitions. These are no longer + used in ACE/TAO code. + +Fri Apr 15 07:19:20 2005 Olli Savia + + * ace/Handle_Set.cpp: + * ace/README: + * m4/config_h.m4: + Removed references to ACE_HAS_BROKEN_BITSHIFT. It is no longer + needed. + +Thu Apr 14 17:12:44 2005 Steve Huston + + * configure.ac: Corrected the variable used to tell whether or not + to check for ACE_HAS_XPG4_MULTIBYTE_CHAR. Fixes configure on Solaris. + + * ace/Service_Config.h: #include "ace/SString.h" instead of + "ace/SStringfwd.h" to make sure everything needed for explicit + template instantiation is present. + +Thu Apr 14 15:25:31 2005 Steve Huston + + * NEWS: Added a note that the reactor change: + Wed Apr 13 14:34:12 UTC 2005 Martin Corino + may cause some trouble in programs that dynamically allocate + a reactor implementation then destroy it before the ACE_Reactor + referring to it. This is always bad, but now will cause a crash. + + * examples/Reactor/WFMO_Reactor/run_test.pl: Removed the "require + Process" line - it tried to refer to the one in $ACE_ROOT/bin, which + was removed: + Mon Apr 4 11:20:08 2005 J.T. Conklin + + * tests/Priority_Reactor_Test.cpp (run_main): + * tests/Reactor_Notify_Test.cpp (run_test): Use the ACE_Reactor's + delete_implementation setting to delete any created reactor + implementation instead of using separate auto_ptr objects for the + ACE_Reactor and its implementation. Prevents destruction + order issues if the implementation is destroyed first. + +Thu Apr 14 09:21:14 2005 Chad Elliott + + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + + Added support for the -SS, -Sci and -Ssi options. + +Thu Apr 14 10:27:12 UTC 2005 Johnny Willemsen + + * ace/config-cygwin32.h: + Removed setting of ACE_HAS_CLOCK_SETTIME. Cygwin seems to define + clock_settime but we get an unresolved symbol when linking. + +Thu Apr 14 00:03:12 2005 Olli Savia + + * ace/config-rtems.h: + Removed ACE_HAS_PROCESS_ENUM definition. It is no longer + used in ACE/TAO code. + +Wed Apr 13 23:58:15 2005 Olli Savia + + * ace/config-irix6.x-common.h: + Removed ACE_HAS_SETOWN definition. It is no longer + used in ACE/TAO code. + +Wed Apr 13 23:42:41 2005 Olli Savia + + * ace/config-win32-interix.h: + Removed ACE_HAS_MKSTEMP definition. It is no longer + used in ACE/TAO code. + +Wed Apr 13 13:42:21 2005 J.T. Conklin + + * ace/Proactor_Impl.cpp: + + Only compile if system supports asynchronous I/O. + +Wed Apr 13 19:07:41 2005 Olli Savia + + * ace/OS_NS_time.inl: + Handle broken prototype of clock_settime() by adding + const_cast if ACE_HAS_NONCONST_CLOCK_SETTIME is defined. + + * ace/OS_NS_unistd.inl: + Fixed wrong comment and removed commented out code. + + * ace/README: + Documented new macros ACE_HAS_NONCONST_CLOCK_SETTIME + and ACE_LACKS_SCANDIR_PROTOTYPE. + + * ace/TSS_T.h: + Fixed wrong comment. + + * ace/config-lynxos.h: + Added new defines ACE_HAS_NONCONST_CLOCK_SETTIME, + ACE_HAS_SCANDIR, ACE_LACKS_SCANDIR_PROTOTYPE and + ACE_SCANDIR_CMP_USES_VOIDPTR. + + * ace/os_include/os_dirent.h: + Declare scandir() prototype if ACE_LACKS_SCANDIR_PROTOTYPE + is defined. + +Wed Apr 13 14:34:12 UTC 2005 Martin Corino + + * ace/Reactor.cpp: + Added call to close() to reactor implementation in destructor to + prevent problems with destruction of implementation instance when + created on the stack. + +Wed Apr 13 07:32:19 2005 J.T. Conklin + + * ace/Thread_Hook.h: + * ace/Thread_Hook.cpp: + + Move ACE_Thread_Hook destructor out of line so it's not compiled + and included in each translation unit that includes Thread_Hook.h. + +Wed Apr 13 07:27:21 2005 J.T. Conklin + + * ace/CDR_Stream.h: + * ace/CDR_Stream.cpp: + + Move ACE_Char_Codeset_Translator destructor out of line so it is + not compiled and included in each translation unit that includes + CDR_Stream.h. + +Wed Apr 13 07:20:54 2005 J.T. Conklin + + * ace/Makefile.am: + * ace/ace.mpc: + + Add Proactor_Impl.cpp to list of source files. + + * ace/Proactor_Impl.h: + * ace/Proactor_Impl.cpp: + + Move ACE_Proactor_Impl destructor out of line into new file + Proactor_Impl.cpp so it's not compiled and included in each + translation unit that includes Proactor_Impl.h. + +Tue Apr 12 19:30:40 2005 J.T. Conklin + + * ace/Makefile.am: + * ace/ace.mpc: + + Add Reactor_Impl.cpp to list of source files. + + * ace/Reactor_Impl.h: + * ace/Reactor_Impl.cpp: + + Move ACE_Reactor_Impl destructor out of line into new file + Reactor_Impl.cpp so it's not compiled and included in each + translation unit that includes Reactor_Impl.h. + +Tue Apr 12 16:44:19 2005 Boris Kolpackov + + * protocols/ace/RMCast/Protocol.h: + + Got rid of the "might be used uninitialized" warnings. + +Tue Apr 12 09:17:34 2005 Arvind S. Krishna + + * tests/Memcpy_Test.cpp: + Fixed VC6 build errors relating to include file for + ACE_OS::memcpy. + +Tue Apr 12 13:11:12 UTC 2005 Martin Corino + + * bin/PerlACE/ProcessVX.pm: + Enhanced functionality for controlling kernel reboot. + +Tue Apr 12 07:53:39 2005 Arvind S. Krishna + + * tests/Memcpy_Test.cpp: + Fixed problems with VC6 build. + +Tue Apr 12 07:26:12 UTC 2005 Martin Corino + + * bin/PerlACE/ProcessVX.pm: + Fixed problem for non-Win based builds. + +Tue Apr 12 08:06:34 2005 Olli Savia + + * ace/config-lynxos.h: + Fixed wrong comment. + + * include/makeinclude/platform_lynxos.GNU: + VERSION now defaults to 4.0.0 + +Tue Apr 12 07:48:05 2005 Olli Savia + + * ace/config-linux-common.h: + * ace/config-osf1-4.0.h: + * configure.ac: + * m4/config_h.m4: + + Removed references to ACE_POLL_IS_BROKEN. It is no longer + used in ACE/TAO code. + +Mon Apr 11 21:55:57 2005 Arvind S. Krishna + + * tests/Memcpy_Test.cpp: + + Scoped gettimeofday invocation as ACE_OS::gettimeofday as it was + causing errors in the ACE build + +Mon Apr 11 12:17:01 2005 Ossama Othman + + * ace/config-lite.h: + + Make sure DSO/DLL symbol related export macros other than + ACE_Proper_Export_Flag are defined if not previously defined in + the ACE_HAS_CUSTOM_EXPORT_MACROS case. Simplifies configuration + for compilers that only need ACE_Proper_Export_Flag. + + * m4/compiler.m4 (ACE_SET_COMPILER_FLAGS): + * m4/config_h.m4 (ACE_PREP_CONFIG_HEADER): + + Enable g++ visibility attribute support when using g++ 4.0 or + better. + +Mon Apr 11 11:50:46 2005 J.T. Conklin + + * ace/README: + * ace/config-hpux-10.x.h: + * ace/config-hpux-11.00.h: + * ace/config-openvms.h: + * ace/config-osf1-3.2.h: + + Fix typo: POSIX 1.b -> POSIX.1b. + +Mon Apr 11 11:39:11 2005 J.T. Conklin + + * ace/OS_NS_time.h: + * ace/OS_NS_time.inl: + + Add ACE_OS::clock_settime(). + + * ace/config-chorus.h: + * ace/config-cygwin32.h: + * ace/config-hpux-10.x.h: + * ace/config-hpux-11.00.h: + * ace/config-integritySCA.h: + * ace/config-linux-common.h: + * ace/config-lynxos.h: + * ace/config-netbsd.h: + * ace/config-openvms.h: + * ace/config-osf1-3.2.h: + * ace/config-osf1-4.0.h: + * ace/config-qnx-neutrino.h: + * ace/config-qnx-rtp-62x.h: + * ace/config-qnx-rtp-pre62x.h: + * ace/config-rtems.h: + * ace/config-sunos5.5.h: + * ace/config-vxworks5.x.h: + + Define ACE_HAS_CLOCK_SETTIME in every canned config-* header + that defines ACE_HAS_CLOCK_GETTIME. + + * ace/README: + + Document new feature test macro ACE_HAS_CLOCK_SETTIME. + +Mon Apr 11 10:27:12 2005 Ossama Othman + + * include/makeinclude/platform_g++_common.GNU: + + Fixed ambiguities when determining whether g++ 4.0 or better is + being used. + + * include/makeinclude/platform_linux.GNU (CXX): + + Do not set CXX variable to "g++" if it has been previously set. + Addresses problem where g++ version was not retrieved from the + g++ compiler set by the user. + +Mon Apr 11 15:56:55 2005 Boris Kolpackov + + * protocols/ace/RMCast/Protocol.h: + + Moved things around a bit in hope it will help BCB6. + +Mon Apr 11 12:58:12 UTC 2005 Martin Corino + + * bin/PerlACE/Run_Test.pm: + * bin/PerlACE/Process_Win32.pm: + Changes to improve/add support for VxWorks tests. + + * bin/PerlACE/ProcessVX.pm: + * bin/PerlACE/ProcessVX_Win32.pm: + New Process class with support for running VxWorks tests on + remote targets. + + * tests/run_test.pl: + Changed to utilize the new ProcessVX class. + +Mon Apr 11 11:38:12 UTC 2005 Martin Corino + + * ace/OS_NS_Thread.cpp: + Added new "C" function 'vx_execae' for VxWorks builds. + Used to run VxWorks tasks (tests) in a more controlled, + synchronous way. + +Mon Apr 11 11:27:12 UTC 2005 Martin Corino + + * ace/config-g++-common.h: + Defined ACE_LACKS_MEMBER_TEMPLATES for GCC < 3.0 as a solution + for recent template compile errors from TypeCode refactoring. + +Mon Apr 11 11:25:12 UTC 2005 Johnny Willemsen + + * ace/Refcounted_Auto_Ptr.h: + Removed explicit for the constructor which I added recently. I causes + problems for user apps that use the implicit conversion. This class + has more problems which need to be resolved. + +Mon Apr 11 09:27:12 UTC 2005 Johnny Willemsen + + * ace/os_include/netinet/os_in.h: + Define IP_MULTICAST_LOOP when it is not defined yet. Fixes problems + with Pharlab. + +Mon Apr 11 09:20:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_netdb.cpp (getmacaddress): + Added Pharlab support + +Mon Apr 11 00:00:42 2005 Boris Kolpackov + + * ace/CDR_Size.cpp: + + Removed unnecessary return statement. + +Sun Apr 10 15:36:58 2005 Arvind S. Krishna + + * tests/Memcpy_Test.cpp: + + Fixed wrong include file to fix compilation errors on Windows + box. + +Sun Apr 10 15:05:35 2005 Arvind S. Krishna + + * tests/tests.mpc: + * tests/Memcpy_Test.cpp: + + Changed the name of the test to ensure that it is same as the + log file created. + +Sun Apr 10 13:25:26 2005 Boris Kolpackov + + * ace/CDR_Size.h: + * ace/CDR_Size.cpp: + * ace/CDR_Size.inl: + + Added new ACE_SizeCDR. It is a CDR stream similar to + ACE_OutputCDR but instead of serializing anything + ACE_SizeCDR calculates the size of the resulting + representation. + + * ace/ace.mpc: + * ace/Makefile.am: + + Added new files. + + * tests/CDR_Test.cpp: + + Added test for ACE_SizeCDR. + + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Protocol.h: + + Ported to use ACE_SizeCDR. + +Sun Apr 10 03:02:21 2005 Ossama Othman + + * ace/config-g++-common.h: + + Do not define "ACE_LACKS_PRAGMA_ONCE" for g++ 4.x. G++ 4.x + supports the "#pragma once" preprocessor directive. + + Define the DLL export macros to the appropriate g++ 4.x + visibility attribute. + + * include/makeinclude/platform_g++_common.GNU (CCFLAGS): + + Added "-fvisibility=hidden -fvisibility-inlines-hidden" to the + compiler flags when using g++ 4.x. Doing so, in conjunction, + with the export macro changes described above, allows ACE-based + shared libraries to take full advantage of G++ 4.0's visibility + attribute support, resulting in substantially improved shared + libraries (or DSOs in alternative speak). Some shared + library-specific improvements include substantially reduced + library footprint, improved application start-up times, and + improved performance. + +Sun Apr 10 02:17:31 2005 Ossama Othman + + * ace/SSL/SSL_Asynch_Stream.h: + + Removed export macros from forward declarations. They aren't + necessary, and cause the forthcoming g++ 4.0 to issue an error + when enabling visibility attribute support. + +Sun Apr 10 02:10:06 2005 Ossama Othman + + * ace/Copy_Disabled.cpp: + + Removed "#pragma once" preprocessor directive from this + implementation source file. "#pragma once" is only meant for + use in sources that are included by others. + +Sat Apr 9 21:05:23 2005 Phil Mesnier + + * protocols/ace/HTBP/HTBP_Inside_Squid_Filter.cpp: + + Changed the construction of a request header to use + get_host_addr() rather than get_host_name() to deal with remote + peers that do not have resolvable hostnames. + +Sat Apr 9 17:00:37 2005 Arvind S. Krishna + + * tests/Memcpy_Test.cpp: + + Added a test to test the speed of memcpy () for data sizes less + than 16 bytes. This test checks to see if loop unrolling is + faster than memcpy for these data sizes. + + * tests/run_test.lst: + * tests/tests.mpc: + + Updated the run list file to run this test and created a + corresponding entry to build this test. + +Sat Apr 9 10:04:37 2005 Ossama Othman + + * ace/Thread_Hook.h (~ACE_Thread_Hook): + + Fixed "undefined reference" link-time error. + +Fri Apr 8 23:24:33 2005 Ossama Othman + + * ace/RB_Tree.cpp (remove_i): + + Fixed "control reaches end of non-void function" warning. + +Fri Apr 8 22:42:55 2005 Ossama Othman + + * ace/Capabilities.cpp (getval, resetcaps): + * ace/Thread_Manager.cpp (ACE_EXECUTE_OP): + + Initialize variables. Addresses "variables may be used + unitialized" g++ 4.0 (CVS snapshot) warnings. + + * ace/Connector.h (~ACE_Connector_Base): + * ace/Reactor_Timer_Interface.h (~ACE_Reactor_Timer_Interface): + * ace/Thread_Hook.h (~ACE_Thread_Hook): + + Added virtual destructors. Fixes "contains virtual functions + but non-virtual destructor" g++ 4.0 (CVS snapshot) warnings. + +Fri Apr 8 22:28:56 2005 Ossama Othman + + * include/makeinclude/platform_g++_common.GNU (templates): + + Set templates variable to "automatic" if using g++ 4.x. Thanks + to John Michael Zorko for pointing out the problem. + +Fri Apr 8 16:39:00 2005 Gary Maxey + + * ace/Stats.cpp + + In dump_throughput() handle cast to double when + ACE_LACKS_UNSIGNEDLONGLONG_T. + + * tests/High_Res_Timer_Test.cpp + + Use ACE_HRTIME_CONVERSION instead of ACE_U64_TO_U32 for + platform independence. + + +Fri Apr 8 12:15:00 2005 Gary Maxey + + * ace/Basic_Types.h + + If ACE_LACKS_UNSIGNEDLONGLONG_T do not typedef ACE_UINT64 as + unsigned long long. + + Add define for ACE_UINT64_DBLCAST_ADAPTER when + ACE_LACKS_UNSIGNEDLONGLONG_T. + +Fri Apr 8 14:31:12 UTC 2005 Johnny Willemsen + + * apps/JAWS3/jaws3/Concurrency.h: + Use template<> + +Fri Apr 8 12:29:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_sys_socket.cpp: + * ace/README: + When ACE_DONT_INIT_WINSOCK is set we don't initialize the winsock + library + + * ace/config-pharlab.h: + Added ACE_LACKS_IP_ADD_MEMBERSHIP. + + Thanks to David Hauck for supplying + these changes + +Fri Apr 8 12:08:12 UTC 2005 Johnny Willemsen + + * bin/msvc_static_order.lst: + Moved portablegroup library before FTORB_Utils + +Fri Apr 8 07:59:12 UTC 2005 Johnny Willemsen + + * bin/fuzz.pl: + The TAO_IDL compiler now has the option to suppress generation + the inline files, so we now don't allow any empty inline files + in the repo, also not generated ones + +Wed Apr 6 23:13:08 2005 Ossama Othman + + * ace/Value_Ptr.h: + + Disable converting copy/assignment operations for compilers that + do not support member templates, i.e. if + ACE_LACKS_MEMBER_TEMPLATES is defined. + +Wed Apr 6 14:49:39 2005 J.T. Conklin + + * ace/Makefile.am: + * ace/ace.mpc: + + Add Value_Ptr.h to list of header files. + +Wed Apr 6 13:41:13 2005 Ossama Othman + + * ace/CDR_Base.h: + + Corrected comment. + + * ace/Value_Ptr.h: + + Value_Ptr implementation based on code in Herb Sutter's book + "More Exceptional C++". It is a smart pointer implementation + designed for use as a class member. + +Wed Apr 6 19:25:12 UTC 2005 Johnny Willemsen + + * ace/Sock_Connect.cpp: + * ace/OS_NS_dlfcn.inl: + Added fix for Pharlab. Thanks to David Hauck + for supplying them + +Wed Apr 6 19:36:31 2005 Olli Savia + + * include/makeinclude/platform_lynxos.GNU: + Set static_libs_only=1 on LynxOS 3.x which does not support + shared libraries. + +Tue Apr 5 13:41:27 2005 J.T. Conklin + + * configure.ac: + + Removed ACE_SUBST for ACE_LIBDIR, ACE_LIBS, ACE_INCLUDEDIR, + TAO_LIBDIR, TAO_LIBS, and TAO_INCLUDEDIR since we're using + pkg-config now. + +Tue Apr 5 13:30:21 2005 J.T. Conklin + + * ace/Pipe.cpp: + + Removed defined(ACE_WIN32) from preprocessor conditional which + selects whether socketpair() is used, as config-win32-common.h + already defines the ACE_LACKS_SOCKETPAIR feature test macro. + +Mon Apr 4 11:20:08 2005 J.T. Conklin + + * bin/Process.pm: + * bin/Process_Unix.pm: + * bin/Process_Win32.pm: + + Removed. Stale versions of files now in bin/PerlACE. + +Mon Apr 4 19:41:44 2005 Olli Savia + + * ace/config-lynxos.h: + Added #define ACE_HAS_ICMP_SUPPORT 1. + + * tests/Reactor_Dispatch_Order_Test.cpp: + Workaround needs to be applied to LynxOS 4.x as well. + +Thu Mar 31 07:48:12 UTC 2005 Johnny Willemsen + + * ace/Refcounted_Auto_Ptr.h: + Added explicit keyword to single argument constructor now RMCast is + updated + +Thu Mar 31 09:58:48 2005 Boris Kolpackov + + * protocols/ace/RMCast/Acknowledge.cpp: + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Retransmit.cpp: + + Updated to work with explicit ctor in ACE_Refcounted_Auto_Ptr. + +Tue Mar 29 18:44:12 UTC 2005 Johnny Willemsen + + * ace/Refcounted_Auto_Ptr.h: + Removed the explicit again, it seems to give a problem in RMCast, will + check this later + +Tue Mar 29 15:12:12 UTC 2005 Johnny Willemsen + + * ace/SOCK_Dgram.{h,cpp}: + Changed the ACE_SOCK_Dgram::set_nic() to have a return value + so that the caller can check whether things succeeded or not + +Tue Mar 29 15:05:12 UTC 2005 Johnny Willemsen + + * ace/Refcounted_Auto_Ptr.h: + Added explicit keyword to single argument constructor + +Tue Mar 29 07:58:40 2005 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Support the new postbuild keyword. + +Tue Mar 29 06:21:34 2005 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Support the modification to the MPC xerces base project that set + the xerceslib template variable to allow for the many different + library names it could have. + +Mon Mar 28 17:32:30 2005 J.T. Conklin + + * ace/Process.h: + + Fix typo in comment. + +Fri Mar 25 16:41:56 2005 J.T. Conklin + + * bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm: + + Change regular expression match $(KEY) instead of of adding + "$(" and ")" to the key itself. + +Fri Mar 25 09:27:40 2005 J.T. Conklin + + * configure.ac: + * m4/config_h.m4: + + Removed ACE_{,U}INT64_TYPEDEF macros. These resulted in + preprocessor conditionals used to set ACE_{,U}INT64. Now that + Basic_Types.h has been refactored, config headers can override + it by defining ACE_{,U}INT{8,16,32,64}_TYPE. We will use that + generalized infrastructure instead. + +Fri Mar 25 07:49:08 2005 J.T. Conklin + + * ace/Basic_Types.h: + + Fix typo -- missing trailing semicolon when defining + ACE_{,U}INT64 from ACE_{U,}INT64_TYPE. + +Fri Mar 25 07:10:35 2005 J.T. Conklin + + * ace/config-unixware-7.1.0.h: + * ace/config-unixware-7.1.0.udk.h: + + Removed ACE_UINT64_TYPEDEF definition. Let Basic_Types.h + do its thing. + +Fri Mar 25 07:02:59 2005 J.T. Conklin + + * ace/config-win32-common.h: + + Define ACE_INT64_TYPE and ACE_UINT64_TYPE macros instead of + actual typedef definitions. + +Thu Mar 24 23:42:34 2005 J.T. Conklin + + * ace/Basic_Types.h: + + Fix typo in ACE_SIZEOF_LONG_LONG definition for systems with + ACE_LACKS_LONG_LONG set. + + Set ACE_SIZEOF_LONG_LONG to 8 if we can't figure out what to set + it to from ULLONG_MAX or ULONGLONG_MAX, which may not be present + or may need special contortions to be defined. + +Thu Mar 24 12:27:05 2005 J.T. Conklin + + * ace/README: + + Describe ACE_{,U}INT{8,16,32,64}_FORMAT_SPECIFIER macros. + + Describe ACE_{,U}INT{8,16,32,64}_TYPE macros. + + * ace/Basic_Types.h: + + Decouple the conditionals used to set the ACE_SIZEOF_{SHORT,INT, + LONG,LONG_LONG} macros from those used to define the + ACE_{,U}INT{8,16,32,64} types. + + Removed cases for specific CPUs and OSs, but provide a mechanism + where values can be set in platform specific config-*.h headers. + +Thu Mar 24 11:26:58 2005 J.T. Conklin + + * ace/README: + + Describe ACE_HAS_{,U}INT{8,16,32,64}_T macros. + + * configure.ac: + + Added check for {,u}int{8,16,32,64}_t types and set + ACE_HAS_{,U}INT32_T if found. + +Thu Mar 24 13:23:00 2005 Rich Seibel + + Moving updates for Mac made by Paul and Chad to get it to work. + + * include/makeinclude/platform_macosx.GNU: + + Explicitly default the threads variable to threads=1. This + was preventing ACE_TMCast from building. + Change the optimization option to -O2. -O3 was causing some + link problems in the IDL compiler. + + * bin/MakeProjectCreator/config/ftorbutils.mpb: + + Add a dependency on the PortableGroup library. This is + part of cleaning up the linkage between PortableGroup and + some of the FT* libraries. + +Thu Mar 24 14:12:19 2005 Steve Huston + + * include/makeinclude/platform_hpux_aCC.GNU: Rather than hand-set all + needed macros and library references for multithreading, use the + compiler's -mt option if not on a .2x compiler version. -mt was + added at 03.30, so 03.2x doesn't have it - maintain the hand-set + values for that. This leaves out .1x versions which probably + aren't used any longer anyway. + +Thu Mar 24 13:17:12 UTC 2005 Johnny Willemsen + + * examples/APG/Containers/Hash_Map_Hash.h: + * examples/APG/Containers/Map_Manager_Specialization.cpp: + * examples/APG/Containers/RB_Tree_Functors.h: + Use template<> instead of ACE_TEMPLATE_SPECIALIZATION + +Wed Mar 23 16:51:00 2005 Gary Maxey + + * ace/README + + Describe new macro ACE_LACKS_UNSIGNEDLONGLONG_T + + * ace/Basic_Types.h + + Slightly alter declaration of ACE_U_LongLong to handle the "has + long long but no unsigned long long" case. + + Make use of ACE_LACKS_UNSIGNEDLONGLONG_T in a few places to + define other macros. + + * ace/Basic_Types.cpp + Make use of ACE_LACKS_UNSIGNEDLONGLONG_T in existing #if + + * ace/Basic_Types.inl + + Alternate implementation for ACE_U_LongLong class. + + * ace/Time_Value.inl + + Add static_cast needed when using alternate implementation of + ACE_U_LongLong (when ACE_LACKS_UNSIGNEDLONGLONG_T is defined). + + * ace/Log_Msg.cpp + Make use of ACE_LACKS_UNSIGNEDLONGLONG_T in existing #if + + * ace/config-tandem-nsk-mips-v3.h + + Define ACE_LACKS_UNSIGNEDLONGLONG_T + + +Wed Mar 23 10:11:02 2005 J.T. Conklin + + * ace/Time_Value.h: + + Remove HPUX_10 conditional timespec_t typedef. The typedef is + also defined if ACE_LACKS_TIMESPEC_T, which is set in the HPUX + config-*.h files. + +Wed Mar 23 06:28:00 2005 Chad Elliott + + * bin/tao_other_tests.lst: + + Do not run this test if corba_messaging is disabled. + +Tue Mar 22 18:25:27 2005 J.T. Conklin + + * ace/Time_Value.inl: + + Implement operator+ and operator- in terms of operator+= and + operator-=. This represents current C++ best practices, and + eliminates a second call to normalize the results. + +Tue Mar 22 11:15:12 UTC 2005 Johnny Willemsen + + * ace/config*.h: + Removed defining ACE_HAS_STD_TEMPLATE_SPECIALIZATION and + ACE_HAS_STD_TEMPLATE_CLASS_MEMBER_SPECIALIZATION. We use now + the normal C++ way of doing this and we don't need the defines + above. + +Mon Mar 21 18:19:24 2005 J.T. Conklin + + * ace/Shared_Memory_Pool.cpp: + + Add "defined(SEGV_MAPPER) || defined(SEGV_MEMERR)" to the + preprocessor conditional that enables the test whether the fault + address falls within the allocated memory blocks --- FreeBSD 5.X + has a siginfo_t struct with a si_addr field, but doesn't provide + SEGV_MAPERR. + + With this change, the automake build now supports FreeBSD 5.X. + +Mon Mar 21 12:54:12 UTC 2005 Johnny Willemsen + + * ace/config-lite.h: + Always define ACE_TEMPLATE_SPECIALIZATION as template<> + and ACE_TEMPLATE_CLASS_MEMBER_SPECIALIZATION as nothing. + All compilers we support do support this syntax and we + are updating our code to juse template<> instead of the + macro. When ACE_LACKS_DEPRECATED_MACROS is defined these + defines are not set making it easy to detect places where + deprecated macros are used. + + * ace/Atomic_Op.h: + * ace/Condition_Recursive_Thread_Mutex.h: + * ace/Functor.h: + * ace/Functor_String.h: + * ace/Null_Mutex.h: + * ace/Process_Semaphore.h: + * ace/Select_Reactor.h: + * ace/Thread_Semaphore.h: + Use template<> instead of ACE_TEMPLATE_SPECIALIZATION + +Fri Mar 18 22:40:30 2005 J.T. Conklin + + * m4/config_h.m4: + + Remove unused ACE_LACKS_SYSTIMES_H autoheader template. + + Remove ACE_HAS_SIG_ATOMIC_T autoheader template. The + description is provided by the AC_DEFINE in the check. + + * m4/platform.m4: + + Add ACE_SIZE_T_FORMAT_SPECIFIER and ACE_SSIZE_T_FORMAT_SPECIFIER + definitions for Linux in ACE_CHECK_FORMAT_SPECIFIERS. Processor + specific values taken from config-linux-common.h. + + Remove ACE_UINT64_FORMAT_SPECIFIER definition for Linux from + ACE_SET_PLATFORM_MACROS. + +Fri Mar 18 22:36:28 2005 J.T. Conklin + + * configure.ac: + * m4/config_h.m4: + + Use ACE_CHECK_LACKS_FUNCS instead of AC_CHECK_FUNC/AC_DEFINE for + inet_aton(). + +Fri Mar 18 14:13:59 2005 J.T. Conklin + + * Kokyu/Makefile.am: + * ace/Makefile.am: + * ace/QoS/Makefile.am: + * ace/SSL/Makefile.am: + * protocols/ace/HTBP/Makefile.am: + * protocols/ace/RMCast/Makefile.am: + * protocols/ace/TMCast/Makefile.am: + + Regenerate. + + * Kokyu/Kokyu.mpc: + + Inherit from core. + Add pkgconfig_files section. + +Fri Mar 18 13:15:10 2005 Chad Elliott + + * ace/Thread_Manager.cpp: + + Fixed a deadlock condition where two threads calling wait() will + block forever waiting for each other. + +Fri Mar 18 10:25:13 2005 J.T. Conklin + + * ace/ace.mpc: + + Add pkgconfig_files section. + +Fri Mar 18 09:56:55 2005 J.T. Conklin + + * ace/QoS/qos.mpc: + * ace/SSL/ssl.mpc: + * protocols/ace/HTBP/HTBP.mpc: + + Add pkgconfig_files section. + +Fri Mar 18 08:28:51 2005 Chad Elliott + + * ace/Svc_Conf_y.cpp: + * ace/ace.mpc: + + There was a slight snafu in one of my sed expressions that caused + problems on unicode builds. + +Fri Mar 18 06:52:59 2005 Chad Elliott + + * ace/Svc_Conf.h: + * ace/Svc_Conf.l: + * ace/Svc_Conf.y: + * ace/Svc_Conf_Tokens.h: + * ace/Svc_Conf_l.cpp: + * ace/Svc_Conf_y.cpp: + * ace/ace.mpc: + + Updated the rules to regenerate Svc_Conf_l.cpp and Svc_Conf_f.cpp. + They are based on the original rules prior to the MPC switchover, + but have been enhanced to minimize the diff's (completely removing + the need for patching Svc_Conf_y.cpp). + + * etc/Svc_Conf_l.cpp.diff: + + Updated the diff to the latest version of Svc_Conf_l.cpp. + + * etc/Svc_Conf_y.cpp.diff: + + Removed this file. + +Fri Mar 18 09:49:32 2005 Boris Kolpackov + + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Retransmit.cpp: + * protocols/ace/RMCast/Acknowledge.cpp: Added missing headers. + +Thu Mar 17 23:13:34 2005 Ossama Othman + + * ace/config-lite.h: + + Mark ACE template specialization related macros as deprecated + through documentation and by placing them within an "#if + !defined (ACE_LACKS_DEPRECATED_MACROS)" block. Developers + should use the standard C++ template specialization syntax + instead. + +Thu Mar 17 11:02:15 2005 J.T. Conklin + + * configure.ac: + + Add no-define to AC_INIT_AUTOMAKE so that PLATFORM and VERSION + are not defined in config.h. + +Thu Mar 17 19:45:10 2005 Boris Kolpackov + + * protocols/ace/RMCast/Acknowledge.cpp: + * protocols/ace/RMCast/Acknowledge.h: + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Link.h: + * protocols/ace/RMCast/Retransmit.cpp: + * protocols/ace/RMCast/Retransmit.h: Implemented manual thread + stopping instead of SUS thread cancellation. + + * protocols/ace/RMCast/Bits.h: + * protocols/ace/RMCast/Socket.cpp: Some cleanups. + + +Thu Mar 17 07:34:30 2005 J.T. Conklin + + * bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm: + + Match "$(TAO_IDL)" instead of "TAO_IDL", to avoid emitting + TAO_IDL/TAO_IDLFLAGS variable definitions for the TAO_IDL + Makefile.am itself. + +Wed Mar 16 10:29:28 2005 Chad Elliott + + * bin/tao_other_tests.lst: + + Enabled the EC_Mcast test. The RTEvent library and test itself + have been fixed. + +Wed Mar 16 09:54:12 UTC 2005 Martin Corino + + * include/makeinclude/platform_vxworks5.5.x.GNU: + Fixed (really) cleanup target for VxWorks builds. + +Tue Mar 15 19:08:01 2005 J.T. Conklin + + * configure.ac: + * m4/ace.m4: + * m4/tls.m4: + + Changed the ACE_ENABLE_SSL macro to depend on ACE_CHECK_TLS + instead of requiring the latter be called in configure.ac. + Fixes a bug where ACE and TAO's configure scripts selected + different SSL options. + +Tue Mar 15 13:14:12 UTC 2005 Johnny Willemsen + + * bin/tao_other_tests.lst: + Removed Two_Objects tests, it is already in the orb core test + list, no need to run it twice + +Mon Mar 14 16:32:08 2005 Boris Kolpackov + + * protocols/ace/RMCast/Socket.h: + * protocols/ace/RMCast/Socket.cpp: Added support for querying + incoming message size. + + * examples/RMCast/Send_Msg/Receiver.cpp: Added a check that + discards messages of a wrong size before reading them. + +Mon Mar 14 16:13:13 (IST) 2005 Balachandran Natarajan + + * bin/tao_orb_tests.lst: + + Added the Hang_Shutdown test to the daily builds. + +Mon Mar 14 10:07:12 UTC 2005 Martin Corino + + * include/makeinclude/platform_vxworks5.5.x.GNU: + Fixed cleanup target for VxWorks builds. + +Sat Mar 12 13:30:12 UTC 2005 Johnny Willemsen + + * bin/tao_other_tests.lst: + Removed SANDBOX for the ImplRepo NameService test, I see no reason + why we just can't run it. Only in a minimum build we can't run it + +Fri Mar 11 18:21:49 2005 Steve Huston + + * configure.ac: When checking for std namespace, decide which + iostream file to include based on ACE_USES_OLD_IOSTREAMS. On + systems that offer both iostream and iostream.h, including + iostream.h will hide the std stuff even though it's available. + +Fri Mar 11 18:15:18 2005 Steve Huston + + * m4/compiler.m4: Remove the hard-coded addition of -library=iostream. + This uses old iostreams. Not sure why this was here, since the + regular GNU build doesn't turn it on. + + * ace/OS_Memory.h: For Sun CC, add settings needed for proper + definition of ACE_nothrow. Thanks to Mark Wilson + for reporting this. + + * THANKS: Added Mark Wilson to the Hall of Fame. + +Fri Mar 11 18:05:29 2005 Steve Huston + + * ace/OS_NS_arpa_inet.cpp (inet_aton): Windows Server 2003 changed + the behavior of inet_addr() when given a zero-length name. Change + zero-length names to " " (1 space) to restore the old behavior and + match other platforms' behavior. + +Fri Mar 11 18:56:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + Add -$(MAKEFLAGS) to the makerules + +Fri Mar 11 11:58:12 UTC 2005 Johnny Willemsen + + * examples/APG/Logging/Use_Multiple_Sinks.cpp: + * examples/APG/Logging/Use_Ostream.cpp: + * examples/APG/Logging/LogManager.h: + Changed _MSC_VER checks + +Fri Mar 11 10:56:12 UTC 2005 Johnny Willemsen + + * ace/config-win32-msvc.h: + Added fuzz disable for check_for_msc_ver + + * bin/fuzz.pl: + Lowered the level for the _MSC_VER check to level 3. This is for + checking if we don't check _MSC_VER >= 1200. This is the checking + for msvc 6 or newer and that is the minimum we support. A lof of + files are updated yesterday, this fuzz check is to detect the last + and to detect newer commits that have this check + +Fri Mar 11 10:43:12 UTC 2005 Martin Corino + + * include/makeinclude/platform_vxworks5.5.x.GNU: + Added additional cleanup target for VxWorks builds. + +Thu Mar 10 17:28:38 2005 Steve Huston + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: + * examples/C++NPv2/TPC_Logging_Server.cpp: Only dynamic_cast a + ACE_HANDLE to int when not on ACE_WIN32. Else there's a risk of + compile errors, such as from HP aC++ that a dynamic_cast from + int to int is illegal. + +Wed Mar 9 21:59:24 2005 Douglas C. Schmidt + + * ace/Time_Value.inl (ACE_Time_Value): Moved the definition of + ACE_Time_Value::set (const struct timeval &) to before it is + used by the ACE_Time_Value constructor. This avoids many + warnings with GCC 3.4.1. Thanks to Peter Heitman + for reporting this and suggesting the fix. + +Wed Mar 9 11:09:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Removed duplicate entry of Server_Leaks test + +Wed Mar 9 10:16:12 UTC 2005 Johnny Willemsen + + * ace/config-hpux-11.00.h: + With the latest versions of the HP aCC compiler, when the compiler + option -AA is passed, then _INCLUDE__STDC_A1_SOURCE is defined and + then we get a three parameter wcstok. We define at that moment + ACE_HAS_3_PARAM_WCSTOK. + +Wed Mar 9 09:31:12 UTC 2005 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added RMCast and TMCast libraries so that they are build first, + fixes problems in the msvc6 static build + +Tue Mar 8 17:01:34 2005 Steve Huston + + * configure.ac: Correct the variable checked for whether or not to + do the SSL/TLS check from ace_user_with_ssl to ace_user_enable_ssl. + Matches the change from --with-ssl to --enable-ssl. See also: + Sat Jan 29 00:39:37 2005 J.T. Conklin + +Tue Mar 8 15:26:29 2005 Steve Huston + + * ace/Asynch_Acceptor.cpp (handle_accept): Don't restart an accept + as a result of a canceled accept. + + * ace/Asynch_IO_Impl.h (ACE_Asynch_Operation_Impl): + * ace/Proactor_Impl.h (ACE_Proactor_Impl): + * ace/WIN32_Asynch_IO.{h cpp}: + * ace/WIN32_Proactor.{h cpp}: + * ace/POSIX_Asynch_IO.{h cpp}: + * ace/POSIX_Proactor.{h cpp}: Added 'const' to all methods that accept + a ACE_Handler::Proxy_Ptr. Makes sure that the proper management of + reference count on the handler proxy is done. + +Tue Mar 8 11:06:12 UTC 2005 Johnny Willemsen + + * bin/make_release: + In the default.features file used to generate the GNU makefiles + removed tk_reactor=1 and xt_reactor=1, these are not used anymore + and added tk=1, xt=1, fl=1 and qt=1 + +Tue Mar 8 07:02:14 2005 Olli Savia + + * ace/config-lynxos.h: + Rearranged (sorted) defines. + +Mon Mar 7 21:27:12 UTC 2005 Johnny Willemsen + + * ACE-INSTALL.html: + Added new VxWorks and OpenVMS versions + +Mon Mar 7 14:14:12 UTC 2005 Johnny Willemsen + + * ace/config-doxygen.h: + Added ACE_USE_RCSID defined as 0, don't expand the ACE_RCSID + macro when generating the documentation + +Mon Mar 7 06:57:12 UTC 2005 Johnny Willemsen + + * ace/Process_Manager.cpp: + Added the include of Countdown_Time.h + +Sun Mar 6 20:21:54 2005 J.T. Conklin + + * ace/Makefile.am: + + Regenerate. + +Sun Mar 6 17:17:57 2005 Ossama Othman + + From Matthew Harris + * m4/ace.m4: + + Fixed "$withval" mismatch in AC_ARG_ENABLE blocks. Use + "$enableval" instead. Addresses problems where attempts to + enable/disable support for the ACE ACEXML, QoS and SSL libraries + via the `configure script' would fail. [Bug 2053] + +Sun Mar 6 20:04:12 UTC 2005 Johnny Willemsen + + * ace/Process_Manager.cpp: + Added include of OS_NS_sys_time.h to get ACE_OS::gettimeofday + + * ace/Process_Manager.h: + Include Time_Value.h instead of Countdown_Time.h + +Sun Mar 6 19:06:12 UTC 2005 Johnny Willemsen + + * ace/Countdown_Time.{h,cpp}: + Removed not needed includes, removed workaround for WinCE, it is just + needed for ACE_Time_Value that is in Time_Value.h and removed empty + comment lines + +Sun Mar 6 19:01:12 UTC 2005 Johnny Willemsen + + * ace/SSL/SSL_SOCK_Acceptor.cpp: + Added the include of Countdown_Time.h + +Sun Mar 6 18:59:12 UTC 2005 Johnny Willemsen + + * ace/Time_Value.h: + Readded removed include of os_time.h to fix compile errors with + Borland + +Sun Mar 6 15:01:00 2005 Marek Brudka + + * include/makeinclude/wrapper_macros.GNU (Message): + * bin/MakeProjectCreator/config/global.features (Module): + * ACE-INSTALL.html (Module): + Simplied Makefile generation for GUI support in ACE and TAO. + +Sun Mar 6 01:58:04 2005 Tao Lu + + * Kokyu/tests/DSRT_MIF/MIF.cpp + Added the include of Countdown_Time.h + +Sun Mar 6 00:52:13 2005 Tao Lu + + * ace/Process.cpp + * ace/Process_Manager.h + * ace/Process_Manager.cpp + * ace/Reactor_Impl.h + * ace/TP_Reactor.cpp + * ace/Proactor_Impl.h + * ace/POSIX_CB_Proactor.cpp + * ace/SSL/SSL_SOCK_Connector.cpp + * ace/SSL/SSL_SOCK_Stream.cpp + Removed unnecessary includes and added include + at proper places. + + * ace/ace.mpc + Added Countdown_Time.cpp. + +Sat Mar 5 23:57:53 2005 Tao Lu + + * ace/Time_Value.h + * ace/Time_Value.cpp + * ace/Time_Value.inl + * ace/Countdown_Time.h + * ace/Countdown_Time.cpp + moved the ACE_Countdown_Time to seperate files to avoid + the wrong Windows release build behavior for client + application when the right header is not included. + + There are ways of avoiding many changes but to make things + look nice .... so will work on the whole ACE/TAO repo next. + +Sat Mar 5 08:48:02 2005 Douglas C. Schmidt + + * tests/QtReactor_Test.cpp: Reformatted this file so it conforms to + the ACE programming style guide. + + * netsvcs/lib/TS_Clerk_Handler.cpp (parse_args): Fixed a typo + where ACE_TESXT should be ACE_TEXT. Thanks to + Sean Parker for reporting this. + +Fri Mar 4 10:32:17 2005 Douglas C. Schmidt + + * ace/Naming_Context.cpp: Changed ACE_OS::strcat() to + ACE_OS::strcpy() to fix a bug. Thanks to David Hauck + for reporting this bug and providing a + fix. + +Fri Mar 4 15:18:50 2005 Boris Kolpackov + + * examples/RMCast/Send_Msg/Receiver.cpp: + * examples/RMCast/Send_Msg/Sender.cpp: Replaced usage of + std::vector and std::cerr with ACE_Vector and ACE_ERROR/ACE_DEBUG + respectively. This should fix warnings in VC6 build. + +Fri Mar 4 12:11:12 UTC 2005 Johnny Willemsen + + * ace/Process_Manager.cpp: + Initialise pointer with 0 + +Thu Mar 3 12:17:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Only use mkdir to create a directory when it not exists yet + +Wed Mar 2 21:44:22 2005 Boris Kolpackov + + * protocols/ace/RMCast/Socket.cpp: + * protocols/ace/RMCast/Socket.h: Moved implementation to + Socket_Impl. Made Socket delegate all functionality to + Socket_Impl. This way I can use all kinds of obfuscated + names in Socket_Impl (in order to fight compiler warnings) + without affecting end user. + + * protocols/ace/RMCast/Stack.h: Removed export macro from + all types declared there. + + * examples/RMCast/Send_Msg/Receiver.cpp: + * examples/RMCast/Send_Msg/Sender.cpp: Updated to use + ACE_INET_Addr instead of ACE_RMCast::Address (which was + just a typedef of ACE_INET_Addr). + +Wed Mar 2 09:58:12 UTC 2005 Johnny Willemsen + + * ACE-INSTALL.html: + Updated the build instructors for the tests with Borland, the + protocols directory must also be build before the tests. Thanks + to Aapo M�inen + for reporting this. + +Tue Mar 1 12:39:11 2005 Douglas C. Schmidt + + * apps/JAWS3/jaws3/Protocol_Handler.h: Added + JAWS_Export to class JAWS_Protocol_Handler. Thanks to Shaun + Cooley for reporting this. + +Tue Mar 1 10:33:15 2005 Boris Kolpackov + + * protocols/ace/RMCast/Acknowledge.h: Made Acknowledge::Descr + public to get broken Sun C++ 5.4 out of its misery. + +Tue Mar 1 07:40:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_hpux_aCC.GNU: + Also HP aCC 3.60 has a bug when having private constructors and + creating an instance from the friend class + +Mon Feb 28 17:10:41 2005 Steve Huston + + * ace/Asynch_Pseudo_Task.{h cpp}: Removed all the flg_active_ and + finish locking stuff. Use the thr_count() value to tell if the + thread is running, and don't try to interlock cleanup activities + with other classes. It's messy and doesn't work right. There are + too many race conditions between closing handles and closing down + this object. + Corrected ACE_LIB_TEXT use instead of + ACE_TEXT, and added missing commas between some strings. + + * ace/POSIX_Asynch_IO.{h cpp}: + * ace/WIN32_Asynch_IO.{h cpp}: Don't try to interlock against the + Asynch_Pseudo_Task. If it's going, it's going. Only hold the lock + around access to the connection/handle map since that's accessed + from the asynch pseudo task thread as well as the caller's. + +Mon Feb 28 09:59:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_hpux_aCC.GNU: + HP aCC 3.57 has a bug that causes a compile error when we have + a class with a private constructor and we try to create it from + a friend class. We disable array optimization for this compiler + version to be able to build ACE and TAO. + + * ace/OS_NS_stdio.cpp (snprintf): + Added two static cast to silence warnings with Borland and MinGW + +Mon Feb 28 11:10:58 2005 Boris Kolpackov + + * protocols/ace/RMCast/Acknowledge.h: Made Acknowledge::Queue + a friend of Acknowledge. Hopefully this will help Sun C++ 5.4. + +Sun Feb 27 08:51:23 2005 Douglas C. Schmidt + + * ace/OS_NS_stdio.cpp (snprintf): Enhanced this function so + it terminates the string with a null char if it is *exactly* the + same length as the buffer. Thanks to Bruce MacDonald for reporting this and providing a + fix. This fixes bugid 2058. + +Fri Feb 25 18:46:33 2005 Steve Huston + + * ace/Asynch_Pseudo_Task.cpp: Forgot some cleanups for places + returning -2. Fixed. Also reduced the clutter of diagnostic + messages and added useful output (such as %p) to those remaining. + + * ace/POSIX_Asynch_IO.cpp: Additional handle cleanups and checks + for ACE_POSIX_Asynch_Accept::close (). + +Fri Feb 25 17:29:12 2005 Steve Huston + + * ace/config-hpux-11.00.h: Always set ACE_HAS_SVR4_DYNAMIC_LINKING. + This is now available always. + + * include/makeinclude/platform_hpux_gcc.GNU: Add -Wl,-E to + SOFLAGS for linking shared libraries. Per info in + Bugzilla #2057, this is needed to have dynamic_cast work across + shared libraries. It still doesn't work, and not sure why... + + * tests/DLL_Test.cpp: Use the correct ACE_DEBUG specifier for + pointers (%@, not %x). + + * tests/DLL_Test_Impl.cpp: Added an ACE_DEBUG in dynamic_cast_test() + to see what's being tested, not only the results. + +Fri Feb 25 13:49:27 2005 Steve Huston + + * ace/POSIX_Asynch_IO.{h cpp}: Added 'const' to all the handler_proxy + references on Result-type constructors. + Removed the ACE_LIB_TEXT around strings to ACE_TRACE. + ACE_TRACE adds the ACE_LIB_TEXT. + (Asynch_Accept::handle_close()): This can be called if the + listen handle gets closed in addition to when the pseudo task + is being destroyed. Mark the handle invalid. + + * ace/WIN32_Asynch_IO.{h cpp}: Added 'const' to all the handler_proxy + references on Result-type constructors. + (accept): Corrected function name in message. + (ACE_WIN32_Asynch_Accept_Result::complete): If the accept failed, + be sure to close the accept handle created in accept(). + + * ace/Asynch_Pseudo_Task.cpp: Removed return value -2 to signify + task shutting down, and return -1/errno = ESHUTDOWN instead. + Secret values like -2 make maintenance harder. + Also removed some of the ACE_ERROR() statements in favor of + setting a reasonable errno value. Lets callers know what's going + on in the code, not just show it in diagnostic output. + +Fri Feb 25 07:08:35 2005 Chad Elliott + + * ace/SOCK_Dgram_Bcast.cpp: + + Added !defined(__APPLE__) to conditional so sockaddr.sa_len + version of the code will be used. Fixes SOCK_Bcast_Dgram_Test + failures. + + * bin/MakeProjectCreator/config/event_serv.mpb: + + The CosEvent_Serv library requires the CosNaming library. + + * bin/auto_run_tests.pl: + + Put a space between my and $ to avoid problems with older version + of perl. + + * bin/tao_other_tests.lst: + + Don't run the XML_Persistence or Reconnecting Notify tests from + static builds. + + * include/makeinclude/platform_hpux_aCC.GNU: + + Removed an extra closing parenthesis from the line that determined + the HP-UX model. + +Fri Feb 25 12:55:37 2005 Boris Kolpackov + + * protocols/ace/RMCast/Link.h: + * protocols/ace/RMCast/Link.cpp: Overrode recv() from + Out_Element. This should clear warnings on BCB and HP C++. + +Fri Feb 25 10:15:12 UTC 2005 Johnny Willemsen + + * ace/config-lite.h: + Added ifndef ACE_LACKS_DEPRECATED_MACROS around the ACE_x_cast + macros so that we can easily prevent the ACE_x_cast macros to be + defined so that we can check whether they are used in ACE/TAO + +Thu Feb 24 21:05:42 2005 Boris Kolpackov + + * protocols/ace/RMCast/Socket.h: + * protocols/ace/RMCast/Socket.cpp: Removed class-scope + using-declaration for VxWorks can't handle it. + +Thu Feb 24 12:37:19 2005 Steve Huston + + * ace/Asynch_Acceptor.cpp (accept): Use ==, not =, to check a value. + This is why constants work better on the left-hand side... + + * ace/POSIX_Asynch_IO.{h cpp} (ACE_POSIX_Asynch_Result): + * ace/WIN32_Asynch_IO.{h cpp} (ACE_WIN32_Asynch_Result): Changed + the handler_proxy_ from a Proxy_Ptr& to a Proxy_Ptr. This causes + the reference count to be incremented properly, avoiding premature + deletion of the ACE_Handler. Fixes weird errors and crashes with + Proactor_Test. + +Wed Feb 23 13:53:39 2005 J.T. Conklin + + * bin/MakeProjectCreator/config/acedefaults.mpb: + * bin/MakeProjectCreator/config/taodefaults.mpb: + + Add automake specific am_version variable. + +Wed Feb 23 19:56:01 2005 Boris Kolpackov + + * protocols/ace/RMCast/Stack.h: Added export macros. + +Wed Feb 23 19:48:59 2005 Boris Kolpackov + + * protocols/ace/RMCast/Bits.h: + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Socket.cpp: + * protocols/ace/RMCast/Socket.h: Replaced auto_ptr with + ACE_Auto_Ptr. + +Tue Feb 22 18:03:41 2005 Steve Huston + + * ace/Ping_Socket.cpp: Rather than try to use struct ip, which can + change subtly between platforms, use the well-known layout of the + IP header to pick off the length field. This avoids a maze of + #if blocks to use the platform struct properly at the cost of + using low-level details. + +Tue Feb 22 21:30:04 2005 Boris Kolpackov + + * protocols/ace/RMCast/Link.cpp: Replaced assignment of auto_ptr's + with a call to reset() in search for a way around VxWorks' broken + implementation. + +Tue Feb 22 21:20:22 2005 Boris Kolpackov + + * protocols/ace/RMCast/Stack.cpp: + * protocols/ace/RMCast/Stack.h: Moved implementation of functions + from .h to .cpp. This should get rid of warnings in VC7.1 build. + +Mon Feb 21 18:18:29 2005 Steve Huston + + * configure.ac: Added a check for the need to add _NO_BITFIELDS to + compile macros. This is needed to prevent compile errors on + Visual Age C++ on AIX. Without it, the check for need to alter + TCP header file includes gets the wrong answer, then the build + tries the wrong thing. This gets around having to know the + TCP header issue apriori like we do with the hand config.h. + + Changed the ACE_HAS_DEV_POLL test from a check for the /dev/poll + file to a run-test to be able to open it. The file is there on + HP-UX, but not useable til some patches are installed. + + Fixed a missing set of quotes on $ace_user_with_ssl. + + * ace/Asynch_Acceptor.cpp (ACE_Asynch_Accept::handle_accept): Don't + try to restart an accept if the listen socket is closed. Together + with closing the socket in the destructor, prevents errors at + destructor time from trying to restart an accept. + + * ace/Dev_Poll_Reactor.cpp: Include if not on + Linux, not only if on Solaris. Allows this to work on other + /dev/poll-enabled platforms. + +Mon Feb 21 12:43:41 2005 Steve Huston + + * ace/Asynch_IO.{h cpp} (ACE_Asynch_Accept): Added an optional + addr_family parameter to ACE_Asych_Accept. Defaults to AF_INET + (IPv4) to maintain current functionality. + Doxygen-ized the comments for accept(). + + * ace/Asynch_IO_Impl.h (ACE_Asynch_Accept_Impl): Pass the new + addr_family arugment along to the implementation classes. + + * ace/POSIX_Asynch_IO.{h cpp}: + * ace/WIN32_Asynch_IO.{h cpp} (ACE_WIN32_Asynch_Accept::accept): Use + the new addr_family parameter to open a new accept handle if needed. + It is up to the caller to make sure that addr_family matches the + family used when the listen socket was opened. + Also use the address family to scale the required size + of the address area in the specified message block. + + * Asynch_Acceptor.{h cpp}: Added a new addr_family_ member to remember + the in-use address family from open(). Use this value to calculate + the space needed for addresses, as well as passing it to + ACE_Asynch_Accept::accept() to open the correct type of handle + when needed. + Marked the address_size() method deprecated. It assumes use of + IPv4 addresses and since it's static, it can't use the addr_family_ + knowledge. Replaced all internal uses of this with the proper + adjustment based on the address family in use. + Close the listen_handle_ when this object is destroyed. + +Mon Feb 21 09:32:21 2005 Steve Huston + + * ace/Ping_Socket.h: Removed extraneous ',' to fix compiler warning. + + * m4/config_h.m4: Added AH_TEMPLATE for ACE_LACKS_INET_ATON + * configure.ac: Added check for ACE_LACKS_INET_ATON. + +Mon Feb 21 15:42:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added missing semi colon after the Identity test + +Mon Feb 21 07:31:12 UTC 2005 Johnny Willemsen + + * examples/RMCast/Send_Msg/Send_Msg.mpc: + Both examples require exceptions + +Sun Feb 20 19:15:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/rmcast.mpb: + Removed exceptions as base projects + +Sat Feb 19 10:32:29 2005 Boris Kolpackov + + * examples/RMCast/Send_Msg/Receiver.cpp: Added explicit + return statements from ACE_TMAIN. + +Sat Feb 19 00:54:22 2005 Balachandran Natarajan + + * ace/Select_Reactor_T.inl (deactivate): + + Fixed a potential race when trying to update deactivated_ flag. + +Fri Feb 18 20:05:53 2005 Douglas C. Schmidt + + * ace/Signal.{h,inl}: Make the destructor of ACE_Sig_Handler virtual + to silence warnings. Thanks to Lothar for + reporting this. + +Fri Feb 18 19:54:33 2005 Martin Corino + + * tests/Max_Default_Port_Test.cpp: + + Fixed a bug because I forgot an #if/#endif bracket:-( + +Fri Feb 18 18:48:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Don't try to run bug_1551_regression on Irix + +Fri Feb 18 09:46:25 2005 Dale Wilson + + * NEWS: + Documented TSS changes. + + * ace/OS_NS_Thread.h: + Added a comment that the "inst" argument to ACE_OS::thr_key_detach + and thr_keycreate is deprecated and will be ignored. + +Fri Feb 18 09:34:06 2005 Dale Wilson + + * ace/OS_NS_Thread.cpp: + Remove another ACE_UNUSED_ARG for the defunct inst argument. + This one showed up in single-threaded builds. + +Fri Feb 18 13:48:33 2005 Martin Corino + + * tests/Max_Default_Port_Test.cpp: + + Tweaked the test for VxWorks so it can also succeed on + that platform with non-optimized kernels. + +Fri Feb 18 07:21:33 2005 Boris Kolpackov + + * protocols/ace/RMCast/Socket.cpp: Qualified call to + base's send(). Hopefully it will make VC6 happy. + +Thu Feb 17 18:23:33 2005 Steve Huston + + * m4/ace.m4: Corrected error message on --enable-wfmo. + Added default (yes) for --enable-rtti. + +Thu Feb 17 14:26:28 2005 Boris Kolpackov + + * examples/RMCast/Send_Msg/Sender.cpp: + * examples/RMCast/Send_Msg/Receiver.cpp: Changed to use + ACE_TMAIN and ACE_TCHAR instead of main and char. + + +Thu Feb 17 14:15:42 2005 Boris Kolpackov + + * protocols/ace/RMCast/Protocol.h: Removed accidental use + of C++ exceptions plus changes to make VC6 happy. + + * protocols/ace/RMCast/RMCast.mpc: Removed `exceptions' + from the list of prerequisites. + + * examples/RMCast/Send_Msg/Receiver.cpp: Got rid of + repetitive `i' uses in for-loops. VC6 can't handle that. + +Thu Feb 17 09:48:03 2005 J.T. Conklin + + * protocols/ace/RMCast/RMCast.mpc: + * protocols/ace/TMCast/TMCast.mpc: + + Added Pkgconfig_Files sections. + +Thu Feb 17 08:32:08 2005 Dale Wilson + + * ace/OS_NS_Thread.cpp: + Fix compile errors when TSS Emulation is enabled. + de-templatize the Thread_Safe_Instance object to avoid fighting + template instantiation issues now. + +Wed Feb 16 17:10:14 2005 Ossama Othman + + * ace/OS_NS_Thread.cpp (thr_key_detach, thr_keycreate): + + Removed "ACE_UNUSED_ARG" macro calls for non-existent "inst" + parameter. + +Wed Feb 16 17:04:50 2005 Ossama Othman + + * bin/MakeProjectCreator/config/rmcast.mpb: + * protocols/ace/RMCast/RMCast.mpc: + + The RMCast protocol implementation currently requires thread + support. Updated these MPC files accordingly. + + * protocols/ace/RMCast/Protocol.h (NAK): + + Since "NAK" is now a class instead of struct, public inheritance + must be explicitly specified. Fixes compile-time errors related + to inaccessible members in the "Profile" base class. + +Wed Feb 16 18:31:28 2005 Steve Huston + + * protocols/ace/RMCast/Acknowledge.cpp: + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Socket.cpp: + Fixed some constructs to make MSVC6 happy. Primarily, MSVC6 won't + allow type& var (ref). Must be type& var = ref. + + * protocols/ace/RMCast/Protocol.h: Changed struct NAK to class NAK to + make MSVC6 happy. + + MSVC6 is still not completely happy, but someone with more insight as + to the intentions here will need to take a look. + +Wed Feb 16 16:18:45 2005 Dale Wilson + + * ace/OS_NS_Thread.cpp: + Rework the ACE_TSS_Cleanup to: + - Remove special handling for ACE_TSS. (No automatic key free) + - If the application replaces a TSS object, the application assumes + responsibility for deleting the old object (as specifed by POSIX) + Note that the TSS_Test program depends on this behavior. + - If an application frees a TSS key while it is still in use by other + threads, the TSS objects are leaked. Formerly I had added an ASSERT + to catch this case, but POSIX says it's legal (but I still think it's + wrongheaded!) + - Interpret a request to attach a zero pointer to a TSS key for a thread + as a detach from the key. The TSS_Test program does this then frees + the key (which is how I found out about the previous point). + - Rework the ACE_TSS_Cleanup instance support to make it safe to delete + the ACE_TSS_Cleanup object even in not all threads have terminated. + Lingering threads may leak, but they shouldn't crash. Note that on + windows it is commmon practice to leave threads running -- expecting them + to be terminated by end-of-process (shudder.), and TAO has a habit of not + waiting for a thread blocked at a select() to terminate. + - Make it safe to call ACE_OS::cleanup_tss more than once for the same + thread. This makes the change to OS_NS_stdio (below) safe. + + * ace/OS_NS_Thread.h: + Remove tss_inst from the ACE_TSS_Info structure. + It was used by ACE_TSS special handling. + + * ace/TSS_T.cpp: + Explicitly call ACE_OS::thr_keyfree from the destructor of an ACE_TSS + rather than relying on special handling from ACE_TSS_Cleanup. + + * ace/OS_NS_stdio.cpp: + Add a call to ACE_OS::cleanup_tss to the DllMain function on THREAD_DETACH. + This will cleanup TSS for non-ACE threads that call ACE functions (like logging) + on WIN32 systems. + + This change addresses Bugzilla 1542 and 2044 (although not the way the author of the + bugzilla report suggested.) + + +Wed Feb 16 20:41:12 UTC 2005 Johnny Willemsen + + * bin/generate_rel_manpages: + We are now using doxygen 1.4.1 + +Wed Feb 16 11:17:27 2005 Steve Huston + + * ace/OS_NS_stdlib.cpp: Don't #include if the max() method + won't be used; same reasoning as: + Tue Feb 15 18:19:25 2005 Steve Huston + +Wed Feb 16 18:15:07 2005 Olli Savia + + * include/makeinclude/platform_lynxos.GNU: + Fixed setting of ACE_LYNXOS_MAJOR and ACE_LYNXOS_MINOR. + +Wed Feb 16 11:04:29 2005 Steve Huston + + * ace/SSL/SSL_Asynch_Stream.cpp: Corrections to use ACE_Handler::Proxy + instead of naked ACE_Handler pointers/references. + +Wed Feb 16 10:19:19 2005 Steve Huston + + * ace/Asynch_IO.h: Remove the extraneous ACE_Handler:: qualification + of Proxy_Ptr used inside ACE_Handler. This confused MSVC 6. + +Wed Feb 16 10:13:41 2005 Steve Huston + + * examples/Reactor/Proactor/post_completions.cpp: + * examples/Reactor/Proactor/test_proactor.cpp: Adjust the overridden + result class and internal proactor calls to pass handler's proxy + pointer, not the handler itself. + +Wed Feb 16 07:02:15 2005 Chad Elliott + + * ace/OS_NS_stdlib.inl: + * ace/config-sunos5.7.h: + * ace/config-sunos5.8.h: + + On SunOS 5.7, some wchar_t related methods are always in the std + namespace when building with SunCC 5.3. + + * bin/PerlACE/Process_Unix.pm: + * bin/PerlACE/Process_Win32.pm: + + Added a ACE_TEST_WINDOW environment variable which can be used to + start each process in a separate window by setting it to + something like 'rxvt -e' and ACE_TEST_VERBOSE which causes the + command line of each process to be printed out as it is started. + + * examples/C++NPv2/C++NPv2.mpc: + + Added additional project ordering for the gnuace type to avoid + build problems with parallel builds. + + * examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFCDlg.cpp: + + Simple modifications to allow this to build with EVC 4. + + * include/makeinclude/platform_g++_common.GNU: + + Changed a grep command to something compatible with Solaris as + well as Linux. + + * include/makeinclude/platform_sunos5_sunc++.GNU: + + Set the default template instantiation mode to automatic for every + version except SunCC 4.2. + +Wed Feb 16 12:56:12 UTC 2005 Johnny Willemsen + + * etc/ace_rmcast.doxygen: + Fixed typo in INPUT + +Tue Feb 15 18:10:56 2005 J.T. Conklin + + * m4/ace.m4: + + Removed ACE_ENABLE_RMCAST macro. Building RMCast library is now + unconditional. + +Tue Feb 15 18:45:26 2005 Steve Huston + + * ace/POSIX_Asynch_IO.{h cpp}: + * ace/POSIX_Proactor.cpp: Fixed compile errors resulting from + Proxy_Ptr changes, below. + +Tue Feb 15 18:19:25 2005 Steve Huston + + * ace/Asynch_IO.{h cpp}: + * ace/Asynch_IO_Impl.h: + * ace/POSIX_Asynch_IO.{h cpp}: + * ace/POSIX_Proactor.{h cpp}: + * ace/Proactor.{h cpp}: + * ace/Proactor_Impl.h: + * ace/WIN32_Asynch_IO.{h cpp}: + * ace/WIN32_Proactor.{h cpp}: All methods that accepted an ACE_Handler + below the user-accessed methods were changed to accept an + ACE_Handler::Proxy_Ptr instead. The ACE_Handler class has a new + Proxy_Ptr typedef which is an ACE_Refcounted_Auto_Ptr for + a Proxy class. When an ACE_Handler is created, it allocates a + Proxy to refer to itself. The Proxy carries a pointer to the + ACE_Handler it proxies for in lower levels of the framework. + When the ACE_Handler is destroyed, it clears the ACE_Handler + pointer in the proxy. + Any part of the framework that dispatches completions gets the + ACE_Handler pointer from the proxy and only dispatches if the + pointer is not 0. This allows ACE_Handlers to be deleted while + operations may be outstanding, a previously vexing issue since one + can never be sure how many operations are outstanding at any given + time. The Proxy remains valid until all references to it are + released. + + * ace/config-win32-common.h: Removed NOMINMAX define. The min/max + stuff is needed for MFC and CString classes and, since we require + ACE includes to come before system includes, adding NOMINMAX in all + cases makes life very hard for these users. + + * ace/OS_NS_stdlib.cpp (mkstemp_emulation): Don't try the + std::numeric_limits::max() call if 'max' is a macro. Use the + older hard-coded 127 instead. + +Tue Feb 15 14:33:18 2005 J.T. Conklin + + * examples/RMCast/Send_Msg/Makefile.am: + * examples/TMCast/Member/Makefile.am: + + Regenerated. + + * examples/RMCast/Send_Msg/Receiver.cpp: + * examples/RMCast/Send_Msg/Sender.cpp: + * examples/TMCast/Member/member.cpp: + + Changed to so headers are + #included the same regardless of whether they're in the + source tree or installed. + + * examples/TMCast/Member/Member.mpc: + + Add exename definition so executable is actually built. + +Tue Feb 15 16:15:28 2005 Steve Huston + + * examples/RMCast/Receiver.cpp: + * examples/RMCast/Sender.cpp: + * examples/TMCast/Member/member.cpp: Corrected location of includes + after they moved. + +Tue Feb 15 13:34:42 2005 J.T. Conklin + + * Makefile.am: + + Move examples until after protocols in SUBDIRS. + +Tue Feb 15 13:32:15 2005 J.T. Conklin + + * configure.ac: + + Configure moved RMCast and TMCast libraries. + + * bin/MakeProjectCreator/config/rmcast.mpb: + + Removed "requires += rmcast". The RMCast library is now built + unconditionally. + + * bin/MakeProjectCreator/config/rmcast.mpb: + * bin/MakeProjectCreator/config/tmcast.mpb: + + Append $(ACE_ROOT)/protocols to includes. + +Tue Feb 15 21:27:25 2005 Olli Savia + + * ace/config-lynxos.h: + * include/makeinclude/platform_lynxos.GNU: + Updated. Utilize new ACE_LYNXOS_* macros, removed some ancient + settings etc. + + * examples/APG/ThreadPools/LF_ThreadPool.cpp: + * examples/APG/ThreadPools/ThreadPool.cpp: + Replaced NULL with 0. + + * tests/Reactor_Dispatch_Order_Test.cpp: + Utilize new ACE_LYNXOS_* macros to differentiate LynxOS + versions. + +Tue Feb 15 10:23:39 2005 Douglas C. Schmidt + + * examples/Service_Configurator/Misc/Timer_Service.cpp (handle_close): + Make sure to cancel the timer when we're done. Thanks to Scott + Z for reporting this. + +Tue Feb 15 11:11:12 UTC 2005 Johnny Willemsen + + * ace/ACE.h: + * ace/OS_NS_string.h: + Doxygen improvements + +Tue Feb 15 11:07:12 UTC 2005 Johnny Willemsen + + * etc/ace_rmcast.doxygen: + Updated because of move of RMCast library + +Mon Feb 14 20:19:35 2005 Ossama Othman + + * protocols/ace/RMCast/Socket.h (Socket): + + Export this class in the shared library case. Addresses + link-time errors in MS Windows builds. + +Mon Feb 14 18:45:28 2005 Steve Huston + + * protocols/ace/RMCast/Acknowledge.{h cpp}: + * protocols/ace/RMCast/Link.h: + * protocols/ace/RMCast/Protocol.{h cpp}: + * protocols/ace/RMCast/Retransmit.{h cpp}: + * protocols/ace/RMCast/Simulator.{h cpp}: + * protocols/ace/RMCast/Socket.{h cpp}: + * protocols/ace/RMCast/Stack.{h cpp}: + Get RMCast's includes by #include "file.h", not + #include . + +Mon Feb 14 18:24:19 2005 Steve Huston + + * ace/OS_TLI.inl: Added "namespace ACE_OS" around all the methods, + instead of prepending ACE_OS to the names. This continues some + similar changes, such as to OS_NS_signal.inl. + + * apps/JAWS3/jaws3/Asynch_IO.h: + * apps/JAWS3/jaws3/Asynch_IO_Helpers.h: + * apps/JAWS3/jaws3/Concurrency_T.h: + * apps/JAWS3/jaws3/Event_Dispatcher.h: + * apps/JAWS3/jaws3/Options.h: + * apps/JAWS3/jaws3/Reactive_IO.h: + * apps/JAWS3/jaws3/Reactive_IO_Helpers.h: + * apps/JAWS3/jaws3/Signal_Task.h: + * apps/JAWS3/jaws3/Synch_IO.h: + Removed #include "ace/OS.h", replacing with other #includes + as needed. If OS.h is included, some other OS_*.h files can get + pulled in and sometimes ends up tentatively defining structs in + ACE_OS's namespace. This can end up tripping HP-UX aCC. Not sure + why it's only aCC and not other compilers as well, but there it is. + Finally resolves some nagging compile errors on HP-UX. + + * apps/JAWS3/jaws3/Concurrency.cpp: + * apps/JAWS3/jaws3/IO.cpp: Add missing OS_NS_* defines + necessitated by no longer including OS.h. + +Mon Feb 14 17:36:43 2005 Steve Huston + + * ace/ace.mwc: Removed RMCast and TMCast, since they're now under + protocols/ace. + + * ace/Makefile.am: + * protocols/ace/Makefile.am: Moved RMCast and TMCast entries from + the former to the latter. + +Mon Feb 14 17:03:11 2005 Steve Huston + + * ace/RMCast/Acknowledge.cpp: + * ace/RMCast/Acknowledge.h: + * ace/RMCast/Agent.tar.bz2: + * ace/RMCast/Bits.h: + * ace/RMCast/Link.cpp: + * ace/RMCast/Link.h: + * ace/RMCast/Protocol.cpp: + * ace/RMCast/Protocol.h: + * ace/RMCast/RMCast.mpc: + * ace/RMCast/Retransmit.cpp: + * ace/RMCast/Retransmit.h: + * ace/RMCast/Simulator.cpp: + * ace/RMCast/Simulator.h: + * ace/RMCast/Socket.cpp: + * ace/RMCast/Socket.h: + * ace/RMCast/Stack.cpp: + * ace/RMCast/Stack.h: + Moved from ace/RMCast to protocols/ace/RMCast. + + * ace/TMCast/ACE_TMCast.pc.in: + * ace/TMCast/Export.hpp: + * ace/TMCast/FaultDetector.hpp: + * ace/TMCast/Group.cpp: + * ace/TMCast/Group.hpp: + * ace/TMCast/GroupFwd.hpp: + * ace/TMCast/LinkListener.hpp: + * ace/TMCast/MTQueue.cpp: + * ace/TMCast/MTQueue.hpp: + * ace/TMCast/Makefile.am: + * ace/TMCast/Messaging.hpp: + * ace/TMCast/Protocol.cpp: + * ace/TMCast/Protocol.hpp: + * ace/TMCast/README: + * ace/TMCast/TMCast.mpc: + * ace/TMCast/TransactionController.hpp: + Moved from ace/TMCast to protocols/ace/TMCast. + +Mon Feb 14 21:34:12 UTC 2005 Johnny Willemsen + + * ace/Global_Macros.h: + Added !ACE_LACKS_DEPRECATED_MACROS around ACE_CLASS_IS_NAMESPACE, + ACE_CORBA_1, ACE_CORBA_2, and ACE_CORBA_3. We have a build where + ACE_LACKS_DEPRECATED_MACROS is defined and we can so easily make + sure these deprecated macros are not used anymore in the ACE/TAO + code, our users can just use these macros until x.5.1 has been + released, then these macros are on the list to be removed. + +Mon Feb 14 23:08:52 2005 Olli Savia + + * include/makeinclude/platform_lynxos.GNU: + Added missing Id tag that somehow disappeared in + previous checkin. + +Mon Feb 14 12:17:06 2005 Ossama Othman + + * ace/RMCast/Link.cpp: + + Include "ace/OS_NS_sys_socket.h" to pull in ACE_OS::connect() + prototype. + + * ace/RMCast/Protocol.h: + + Include "ace/OS_NS_string.h" to pull in ACE_OS::memcpy() + prototype. + +Mon Feb 14 11:59:27 2005 Ossama Othman + + * ace/RMCast/Protocol.h (id): + * ace/RMCast/Protocol.cpp (id): + + Moved static constant initialization out of class declaration. + MSVC++ 6 cannot handle in-class static constant initialization. + Thanks to Chad Elliot for pointing the problem. + + * ace/RMCast/Link.cpp (recv): + + Changed the "switch" expression to an "if/else" expression since + the actual values of the cases are no longer available to the + compiler when compiling this file. + +Mon Feb 14 20:37:56 2005 Olli Savia + + * include/makeinclude/platform_lynxos.GNU: + + Removed LynxOS 2.5 leftovers. + Added definition of two new preprocessor macros + ACE_LYNXOS_MAJOR and ACE_LYNXOS_MINOR. These macros make + easier to maintain code that depend on LynxOS version. + +Mon Feb 14 10:51:12 UTC 2005 Johnny Willemsen + + * Kokyu/DSRT_Dispatch_Item_T.h: + * ACEXML/common/InputSource.h: + Replaced ACE_EXPLICIT with explicit + +Mon Feb 14 01:22:19 2005 Ossama Othman + + * examples/RMCast/Send_Msg/Receiver.cpp: + + Use "ACE_OS::memcmp()" instead of "std::memcmp()". MSVC++ 6 + doesn't place memcmp() in the "std" C++ namespace. + +Mon Feb 14 00:56:18 2005 Ossama Othman + + * ace/RMCast/Acknowledge.cpp: + + No need to include "ace/OS.h". Include "ace/OS_NS_unistd.h" + instead. + + * ace/RMCast/Protocol.h: + + Corrected friend declaration to use "struct" instead of "class" + since the friend type in question is actually struct. + +Mon Feb 14 00:41:11 2005 Ossama Othman + + * ace/RMCast/Bits.h: + + Added support for single-threaded configurations. + + * ace/RMCast/Link.cpp: + + Explicitly cast INADDR_ANY argument in ACE_INET_Addr constructor + call to ACE_UINT32. Addresses constructor ambiguity issues + exhibited by some compilers. + + * ace/RMCast/Protocol.h: + * ace/RMCast/Simulator.h: + * ace/RMCast/Socket.h: + + Added missing #include directives now made necessary by header + reductions in "Bits.h". + +Sun Feb 13 13:32:12 UTC 2005 Johnny Willemsen + + * ace/Timer_Queue_Adapters.h: + Doxygen improvements + +Sun Feb 13 13:18:12 UTC 2005 Johnny Willemsen + + * ace/config-lite.h: + When the new define ACE_LACKS_DEPRECATED_MACROS is set, the + deprecated macros ACE_MUTABLE, ACE_EXPLICIT and + ACE_CONST_WHEN_MUTABLE are not defined making it easy to see + if we use these deprecated macros anywhere. These macros are + defined normally so for our users nothing changes + + * ace/README: + Documented ACE_LACKS_DEPRECATED_MACROS + +Sun Feb 13 07:03:12 UTC 2005 Johnny Willemsen + + * bin/tao_other_tests.lst: + Disabled the notify filter performance test under Irix, it hangs + forever + + * ace/Asynch_IO.h: + Updated some method signatures so that they are exactly the same + as used in the implementation to resolve Doxygen warnings + + * ace/config-doxygen.h: + Added define of ACE_HAS_ICMP_SUPPORT to 1 so that icmp classes are + also parsed by doxygen + +Sat Feb 12 09:00:51 2005 J.T. Conklin + + * m4/ace.m4: + + Rename ACE_WITH_{GL,FL,QT,TK} autoconf macros to ACE_PATH_{GL, + FL,QT,TK} to be consistant with standard naming conventions. + +Sat Feb 12 01:00:25 2005 Ossama Othman + + * ace/RMCast/Protocol.h (Header): + + Fixed "value computed is not used" warning exhibited by g++ 4.0 + CVS snapshot. + + * ace/RMCast/RMCast.mpc: + * bin/MakeProjectCreator/config/rmcast.mpb: + + Require native C++ exception support. The new reliable + multicast implementation currently requires it. + +Sat Feb 12 00:09:18 2005 Ossama Othman + + * ace/RMCast/Protocol.h: + + Work around Borland C++ Builder 6 (or earlier) inability to deal + with default template parameters. Thanks to Johnny for + suggesting a work-around. + +Fri Feb 11 21:39:04 2005 J.T. Conklin + + * configure.ac: + + Updated for new RMCast implementation. + + * tests/Makefile.am: + + Removed RMCast from SUBDIRS. + + * ace/RMCast/Makefile.am: + * examples/RMCast/Makefile.am: + * examples/RMCast/Send_Msg/Makefile.am: + + New files. + +Fri Feb 11 17:59:50 2005 J.T. Conklin + + * ace/Makefile.am: + + Fix typo in pkgconfigdatadir definition. + +Fri Feb 11 18:11:29 2005 Steve Huston + + * ace/Dev_Poll_Reactor.{h inl cpp}: + Comment out the check for epoll's proper Linux kernel version + based on linux/version.h. It's not always accurate. For example, + on Fedora Core 2 it says 2.4.20, yet the actual kernel is 2.6.5 + and epoll_ctl works fine (apparantly). + + Removed the original reference counting scheme based on the + handler repository and implemented the ACE_Event_Handler-based + scheme used by the other reactors. Kept the + ACE_Dev_Poll_Handler_Guard class, though, as it is very nice. + Just changed some contents and added a release() method to make it + easier to work with the notify case since the refcount is incremented + when the handler is queued for notify and decremented after the + later upcall is done. + + (wakeup_all_threads): Removed the #if 0 block around the notify() + call. This works fine (and is necessary) for epoll-capable systems. + + (handle_events_i, dispatch): Moved the signal-dispatched detection + to handle_events_i() from dispatch() and allowed a dispatched signal + to count as a dispatched event instead of always causing a + -1/EINTR return. + + (dispatch_io_events): Increment io_handlers_dispatched before + doing the upcall. Previously, it wouldn't get incremented if the + handler returned -1. + + * ace/Reactor.cpp: Added the ability to specify ACE_Dev_Poll_Reactor + as the default reactor implementation by specifying + ACE_USE_DEV_POLL_REACTOR_FOR_REACTOR_IMPL in the config file. + + * tests/Dev_Poll_Reactor_Test.cpp: Ignore SIGPIPE, else if the + receiving side closes its handle first, the sending side will crash + on SIGPIPE. Make the Client shut down its reactor if handle_output() + fails. Else, the timer will never fire again and the test will hang. + + * tests/MT_Reactor_Upcall_Test.cpp: + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + * tests/MT_Reference_Counted_Notify_Test.cpp: Added test for + ACE_Dev_Poll_Reactor using -d (defaults to 1) but only runs it + if ACE_HAS_EVENT_POLL is set. + For MT_Reference_Counted_Notify_Test, added checks to see that + the reference count actually gets incremented for the upcall. + +Fri Feb 11 13:55:47 2005 J.T. Conklin + + * configure.ac: + * m4/config_h.m4: + + Define ACE_HAS_ICMP_SUPPORT if host supports raw sockets. + This fixes bugzilla id [2039]. + +Fri Feb 11 21:33:37 UTC 2005 Johnny Willemsen + + * bin/make_release: + Don't perform crlf conversions on a .bz2 file during the release + +Fri Feb 11 08:43:04 2005 Ossama Othman + + * ace/RMCast/Makefile.am: + * ace/RMCast/RMCast.cpp: + * ace/RMCast/RMCast.h: + * ace/RMCast/RMCast.rc: + * ace/RMCast/RMCast_Ack_Worker.cpp: + * ace/RMCast/RMCast_Ack_Worker.h: + * ace/RMCast/RMCast_Ack_Worker.i: + * ace/RMCast/RMCast_Copy_On_Write.cpp: + * ace/RMCast/RMCast_Copy_On_Write.h: + * ace/RMCast/RMCast_Copy_On_Write.i: + * ace/RMCast/RMCast_Export.h: + * ace/RMCast/RMCast_Fork.cpp: + * ace/RMCast/RMCast_Fork.h: + * ace/RMCast/RMCast_Fork.i: + * ace/RMCast/RMCast_Fragment.cpp: + * ace/RMCast/RMCast_Fragment.h: + * ace/RMCast/RMCast_Fragment.i: + * ace/RMCast/RMCast_IO_UDP.cpp: + * ace/RMCast/RMCast_IO_UDP.h: + * ace/RMCast/RMCast_IO_UDP.i: + * ace/RMCast/RMCast_Membership.cpp: + * ace/RMCast/RMCast_Membership.h: + * ace/RMCast/RMCast_Membership.i: + * ace/RMCast/RMCast_Module.cpp: + * ace/RMCast/RMCast_Module.h: + * ace/RMCast/RMCast_Module.i: + * ace/RMCast/RMCast_Module_Factory.cpp: + * ace/RMCast/RMCast_Module_Factory.h: + * ace/RMCast/RMCast_Partial_Message.cpp: + * ace/RMCast/RMCast_Partial_Message.h: + * ace/RMCast/RMCast_Partial_Message.i: + * ace/RMCast/RMCast_Proxy.cpp: + * ace/RMCast/RMCast_Proxy.h: + * ace/RMCast/RMCast_Proxy.i: + * ace/RMCast/RMCast_Reassembly.cpp: + * ace/RMCast/RMCast_Reassembly.h: + * ace/RMCast/RMCast_Receiver_Module.cpp: + * ace/RMCast/RMCast_Receiver_Module.h: + * ace/RMCast/RMCast_Receiver_Module.i: + * ace/RMCast/RMCast_Reliable_Factory.cpp: + * ace/RMCast/RMCast_Reliable_Factory.h: + * ace/RMCast/RMCast_Reliable_Factory.i: + * ace/RMCast/RMCast_Reordering.cpp: + * ace/RMCast/RMCast_Reordering.h: + * ace/RMCast/RMCast_Reordering.i: + * ace/RMCast/RMCast_Resend_Handler.cpp: + * ace/RMCast/RMCast_Resend_Handler.h: + * ace/RMCast/RMCast_Resend_Handler.i: + * ace/RMCast/RMCast_Resend_Worker.cpp: + * ace/RMCast/RMCast_Resend_Worker.h: + * ace/RMCast/RMCast_Resend_Worker.i: + * ace/RMCast/RMCast_Retransmission.cpp: + * ace/RMCast/RMCast_Retransmission.h: + * ace/RMCast/RMCast_Retransmission.i: + * ace/RMCast/RMCast_Sequencer.cpp: + * ace/RMCast/RMCast_Sequencer.h: + * ace/RMCast/RMCast_Sequencer.i: + * ace/RMCast/RMCast_Singleton_Factory.cpp: + * ace/RMCast/RMCast_Singleton_Factory.h: + * ace/RMCast/RMCast_Singleton_Factory.i: + * ace/RMCast/RMCast_UDP_Event_Handler.cpp: + * ace/RMCast/RMCast_UDP_Event_Handler.h: + * ace/RMCast/RMCast_UDP_Event_Handler.i: + * ace/RMCast/RMCast_UDP_Proxy.cpp: + * ace/RMCast/RMCast_UDP_Proxy.h: + * ace/RMCast/RMCast_UDP_Proxy.i: + * ace/RMCast/RMCast_UDP_Reliable_Receiver.cpp: + * ace/RMCast/RMCast_UDP_Reliable_Receiver.h: + * ace/RMCast/RMCast_UDP_Reliable_Receiver.i: + * ace/RMCast/RMCast_UDP_Reliable_Sender.cpp: + * ace/RMCast/RMCast_UDP_Reliable_Sender.h: + * ace/RMCast/RMCast_UDP_Reliable_Sender.i: + * ace/RMCast/RMCast_Worker.cpp: + * ace/RMCast/RMCast_Worker.h: + * examples/RMCast/Makefile.am: + * examples/RMCast/Send_File/Makefile.am: + * examples/RMCast/Send_File/RMCast_Send_File.mpc: + * examples/RMCast/Send_File/Receiver.cpp: + * examples/RMCast/Send_File/Sender.cpp: + * tests/RMCast/Main.cpp: + * tests/RMCast/Makefile.am: + * tests/RMCast/RMCast_Fragment_Test.cpp: + * tests/RMCast/RMCast_Membership_Test.cpp: + * tests/RMCast/RMCast_Reassembly_Test.cpp: + * tests/RMCast/RMCast_Reordering_Test.cpp: + * tests/RMCast/RMCast_Retransmission_Test.cpp: + * tests/RMCast/RMCast_UDP_Best_Effort_Test.cpp: + * tests/RMCast/acetest.mpb: + * tests/RMCast/tests.mpc: + + Removed old ACE reliable multicast implementation. It is not + maintained, and is now superseded by Boris's implementation + described below. + + From Boris Kolpkacov + * ace/RMCast/Acknowledge.cpp: + * ace/RMCast/Acknowledge.h: + * ace/RMCast/Agent.tar.bz2: + * ace/RMCast/Bits.h: + * ace/RMCast/Link.cpp: + * ace/RMCast/Link.h: + * ace/RMCast/Protocol.cpp: + * ace/RMCast/Protocol.h: + * ace/RMCast/RMCast.mpc: + * ace/RMCast/Retransmit.cpp: + * ace/RMCast/Retransmit.h: + * ace/RMCast/Simulator.cpp: + * ace/RMCast/Simulator.h: + * ace/RMCast/Socket.cpp: + * ace/RMCast/Socket.h: + * ace/RMCast/Stack.cpp: + * ace/RMCast/Stack.h: + * examples/RMCast/Send_Msg/Protocol.h: + * examples/RMCast/Send_Msg/README: + * examples/RMCast/Send_Msg/Receiver.cpp: + * examples/RMCast/Send_Msg/Send_Msg.mpc: + * examples/RMCast/Send_Msg/Sender.cpp: + + New reliable source-ordered multicast protocol implementation + for message-oriented multi-sender group communication built on + top of IPv4 multicast. + +Fri Feb 11 16:01:37 2005 Martin Corino + + * tests/Thread_Pool_Reactor_Test.cpp: + * tests/Thread_Pool_Reactor_Resume_Test.cpp: + + Scaled down the tests on VxWorks as for CHORUS to make them + runnable with default target kernel network parameters. + +Fri Feb 11 07:32:06 2005 Chad Elliott + + * ace/OS_NS_sys_time.h: + * ace/OS_NS_sys_time.inl: + * ace/OS_NS_time.h: + * ace/Time_Value.h: + * ace/Time_Value.inl: + + Enhanced support for Release mode builds for EVC 4. + +Fri Feb 11 08:54:12 UTC 2005 Johnny Willemsen + + * bin/generate_doxygen.pl: + Group all ciao projects together and get then the version from + the version file in the CIAO directory. This way with a release + the ciao documentation gets the correct version number + +Fri Feb 11 08:52:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/outputdir.bor: + Don't use separate output directories for the output, this is + not used anymore after the switch to MPC. + + * bin/MakeProjectCreator/templates/bor.mpd: + No need to set STATIC_DIR, DEBUG_DIR and UNICODE_DIR anymore + + * include/makeinclude/recurse.bor: + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + Removed usage of MAKE_FLAGS, was not set at all + +Fri Feb 11 08:47:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added !IRIX to the Bug_1361_Regression tests, it hangs forever on + Irix + +Thu Feb 10 07:04:33 2005 Johnny Willemsen + + * ACE version 5.4.4 released. + +Thu Feb 10 02:51:19 2005 Balachandran Natarajan + + * Release: Added *.vcw files to the tar distribution. + +Thu Feb 10 08:35:12 UTC 2005 Johnny Willemsen + + * bin/make_release: + Don't do crlf conversion on .vsd files, that are Microsoft Visio + files which must be shipped unmodified + +Wed Feb 9 14:37:12 UTC 2005 Johnny Willemsen + + * bin/make_release: + Added the removal of the temporary file we create in the + old_versions_dir to check if we can write to that directory + +Tue Feb 8 20:58:12 UTC 2005 Johnny Willemsen + + * ACE-INSTALL.html: + Improved VxWorks description, committed on behalf of Martin Corino + +Tue Feb 8 05:46:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Disable the CodeSet test in the static builds + +Mon Feb 7 21:36:37 2005 Martin Corino + + * tests/run_test.pl: + + Some improvements for autobuild testruns on VxWorks. + +Mon Feb 7 15:19:40 2005 Phil Mesnier + + * bin/tao_orb_tests.lst: + Added CodeSet test to the list. This should run on all platforms + except those using GIOP 1.0 explicitly. + +Mon Feb 7 14:56:12 UTC 2005 Johnny Willemsen + + * bin/make_release: + Added a test to check if the previous_version directory is + writeable for the user running this script + +Mon Feb 7 05:32:32 2005 J.T. Conklin + + * configure.ac: + + Configure ACEXML makefiles if ACEXML directory exists. + +Mon Feb 7 13:18:12 UTC 2005 Johnny Willemsen + + * bin/tao_other_tests.lst: + After disabling a few test according to the logs already simple tests + do hang our system. This can't be true, so for the time being I + disabled all performance tests under windows and enabled the other + tests again. + +Mon Feb 7 12:24:12 UTC 2005 Johnny Willemsen + + * bin/tao_other_tests.lst: + Don't run the pluggable udp tests on win32 + +Mon Feb 7 11:49:12 UTC 2005 Johnny Willemsen + + * bin/tao_other_tests.lst: + Also don't run the AMI Latency test on Win32 + +Mon Feb 7 11:36:12 UTC 2005 Johnny Willemsen + + * bin/tao_other_tests.lst: + Also don't run the Quoter example on Win32 + +Mon Feb 7 11:16:12 UTC 2005 Johnny Willemsen + + * bin/tao_other_tests.lst: + Also don't run the Loadbalancing example on Win32 + +Mon Feb 7 10:34:12 UTC 2005 Johnny Willemsen + + * bin/tao_other_tests.lst: + Don't run the AMI Sequence_Latency performance-test under Windows, + it causes the system to crash. We will sort out this problem later but + we first need to get the other tests running on Windows to keep an + eye on the test results. + +Sun Feb 6 20:53:12 UTC 2005 Johnny Willemsen + + * ACE-INSTALL.html: + Added SuSE Linux to the list of platforms supported by + Remedy IT + +Sun Feb 6 10:33:12 UTC 2005 Johnny Willemsen + + * ace/Service_Object.cpp: + * ace/LSOCK_Stream.cpp: + * ace/Event_Handler.cpp: + Replaced c-style casts with C++ casts + +Sat Feb 5 20:12:37 2005 Martin Corino + + * ace/OS_NS_Thread.cpp: + * ace/OS_NS_Thread.h: + * ace/OS_NS_Thread.inl: + + Fixed some flaws in TSS_Emulation tests for TSS key validity introduced + some 3 years ago when key reuse was enabled for TSS_Emulation. + +Sat Feb 5 15:17:37 2005 Martin Corino + + * tests/run_test.pl: + + Some improvements for autobuild testing with VxWorks. + + * tests/Reactor_Notify_Test.cpp: + * tests/Task_Ex_Test.cpp: + + Scaled down testparameters for VxWorks because otherwise the tests take too + long and are killed before having a chance to finish. + +Sat Feb 5 11:38:37 2005 Martin Corino + + * tests/run_test.pl: + + Added functionality to run and analyze ACE tests for VxWorks from the + autobuild process (depending on target features). + + * tests/Multicast_Test.cpp: + + Fixed sloppy resource management (sockets) leading to problems on VxWorks. + + * tests/TP_Reactor_Test.cpp: + + Fixed compiletime test around pthread_sigmask() call so it now compiles + correctly for (non-WIN32) platforms having threads but no pthread_sigmask() + (f.i. VxWorks). + +Sat Feb 4 11:32:37 2005 Martin Corino + + * ace/OS_NS_time.inl: + + Made ACE_OS::gethrtime() for VxWorks always (also on PENTIUM) go through + clock_gettime() because the RDTSC somehow does not work correctly (all + HiResTime related tests fail) and clock_gettime() does. + +Fri Feb 4 14:23:12 UTC 2005 Johnny Willemsen + + * ace/Hashable.inl: + Replaced c-style cast with C++ const_cast + +Thu Feb 3 09:25:38 2005 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Ensure that TAO_ROOT is set if it is a tao or a ciao project. + +Thu Feb 3 12:43:37 UTC 2005 Johnny Willemsen + + * include/makeinclude/rules.local.GNU: + Added build rule for .rc files in a static build. Thanks to + Arto Jalkanen for reporting this. + +Thu Feb 3 10:36:37 UTC 2005 Johnny Willemsen + + * ace/config-win32-common.h: + Added ACE_LACKS_UNIX_SYSLOG + + * ace/Log_Msg_UNIX_Syslog.{h,cpp}: + Only check for the ACE_LACKS_UNIX_SYSLOG define, not for ACE_WIN32. + Makes it a little easier to maintain and then this class is also + added to the doxygen documentation + +Thu Feb 3 10:28:37 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/templates/gnu.mpd: + Removed some empty lines and use the ?= operator to set TAO_ROOT + and CIAO_ROOT if they are not set yet, saves us a few lines in each + generated GNU makefile + +Thu Feb 3 08:43:37 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/templates/gnu.mpd: + Only generate CIAO_ROOT when we are generating a project for CIAO + +Thu Feb 3 08:43:37 2005 Martin Corino + + * test/Proactor_Test_IPV6.cpp: + + Fixed incorrect logfile name in cases where this test is unsupported + leading to falsely reported testfailures. + +Wed Feb 2 15:25:39 2005 Steve Huston + + * ace/OS_NS_stdio.inl (vsprintf): Clarified the reason why ULONG_MAX + doesn't always work with vswprintf(). glibc (at least newer versions + such as 2.3) check the bounds of the buffer/size combination before + attempting the operation. + +Wed Feb 02 08:57:23 2005 Balachandran Natarajan + + * bin/make_release: + + Added some comments and removed some old comments. + +Wed Feb 2 08:46:51 2005 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Added an include of $(CIAO_ROOT)/rules.ciao.GNU if 'ciao' is set. + +Tue Feb 01 16:12:43 2005 Balachandran Natarajan + + * bin/make_release: + + A typo that created problems during tar ball creation. Removed + updates to the *version.mpb's too. + +Tue Feb 1 19:44:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.5.x.GNU: + Reverted part of the change Fri Jan 28 20:46:12 UTC 2005. + Set shared_libs to empty and static_libs to 1, because of the + change our static builds are broken, we will figure this out + when we have setup some shared builds. + +Tue Feb 1 14:33:37 2005 Martin Corino + + * test/OS_Test.cpp: + + Excluded rename test for VxWorks since this is only supported for a restricted + set of filesystem drivers. + +Tue Feb 1 14:30:37 2005 Martin Corino + + * ace/OS_NS_time.inl: + + Moved buflen check in ctime_r() to more global scope. This way + we always get required behaviour even if OS *with* buflen arg + behaves badly (i.e. VxWorks). + +Tue Feb 1 13:47:12 UTC 2005 Johnny Willemsen + + * ace/ace.mpc: + * ace/ace_flreactor.mpc: + * ace/ace_qtreactor.mpc: + * ace/ace_tkreactor.mpc: + * ace/ace_xtreactor.mpc: + * bin/MakeProjectCreator/config/aceexe.mpb: + * bin/MakeProjectCreator/config/acelib.mpb: + * bin/MakeProjectCreator/config/ciao_client.mpb: + * bin/MakeProjectCreator/config/ciao_client_dnc.mpb: + * bin/MakeProjectCreator/config/taoexe.mpb: + * bin/MakeProjectCreator/config/taolib.mpb: + Removed version as base project. This will be removed because it + results in the fact that each generated GNU makefile will get the + version number generated. We want that the GNU make rules get the + version number from Version.h + + * bin/MakeProjectCreator/config/aceversion.mpb: + * bin/MakeProjectCreator/config/ciaoversion.mpb: + * bin/MakeProjectCreator/config/taoversion.mpb: + Removed these files. + +Tue Feb 1 12:42:37 2005 Martin Corino + + * tests/Dirent_Test.cpp: + + Fixed directory recursion test for VxWorks where chdir() only + accepts full paths. + +Tue Feb 1 11:19:12 UTC 2005 Johnny Willemsen + + * bin/ace_tests.lst: + Added !VxWorks for the WFMO_Reactor tests. The perl script for those + tests detects windows or not, but with VxWorks we are using Windows + as host, but do a cross environment test. This prevents us from + running these tests on a VxWorks target. + +Mon Jan 31 20:48:04 2005 Ossama Othman + + * tests/Proactor_Test.cpp (TestData): + * tests/Proactor_Test_IPV6.cpp (TestData): + + Name the nested/local structure declared in this class to + workaround MSVC++ complaints about required compiler generated + default constructors for unnamed classes. + +Mon Jan 31 13:37:48 2005 Douglas C. Schmidt + + * ace/Acceptor.cpp (handle_close): Fixed the code so that it + closes down properly. Thanks to Kobi Cohen-Arazi + for this fix. + +Mon Jan 31 11:14:12 UTC 2005 Johnny Willemsen + + * ace/Service_Config.h: + Doxygen improvements + +Mon Jan 31 10:35:12 UTC 2005 Johnny Willemsen + + * netsvcs/clients/Naming/Client/Client_Test.cpp: + Fixed compile warning in wchar build + +Mon Jan 31 10:32:12 UTC 2005 Johnny Willemsen + + * ASNMP/agent/agent.mpc: + Added avoids += uses_wchar, the code can't be build with wchar + enabled + +Mon Jan 31 09:16:12 UTC 2005 Johnny Willemsen + + * ace/ARGV.h: + * ace/Configuration.h: + Doxygen improvements + +Mon Jan 31 08:29:12 UTC 2005 Johnny Willemsen + + * examples/APG/Logging/Trace_Return.cpp: + * apps/JAWS/clients/Caching/http_client.cpp: + Fixed unicode errors + + * apps/mkcsregdb/mkcsregdb.mpc: + * ASNMP/examples/walk/walk.mpc: + * ASNMP/examples/trap/trap.mpc: + * ASNMP/examples/set/set.mpc: + * ASNMP/examples/next/next.mpc: + * ASNMP/examples/get/get.mpc: + Added avoids += uses_wchar, the code can't be build with wchar + enabled + +Mon Jan 31 08:18:12 UTC 2005 Johnny Willemsen + + * examples/APG/Reactor/Timers.cpp: + Fixed unicode link errors + +Mon Jan 31 07:16:12 UTC 2005 Johnny Willemsen + + * ace/ace_wchar.h: + Added ACE_TEXT_OutputDebugString + + * examples/Log_Msg/Log_Msg_MFC/MFC_Log.cpp: + Use ACE_TEXT_OutputDebugString instead of ::OutputDebugString + to fix compile errors in wchar builds + +Sun Jan 30 08:46:56 2005 Ossama Othman + + * ace/Filecache.cpp: + + Added missing "template<>" to explicit class member + specializations, as required by the C++ standard. + +Sun Jan 30 13:45:12 UTC 2005 Johnny Willemsen + + * examples/IOStream/client/iostream_client.cpp: + Fixed unicode compile warning + +Sun Jan 30 13:37:12 UTC 2005 Johnny Willemsen + + * examples/C++NPv1/Process_Per_Connection_Logging_Server.cpp: + Use ACE_OS::strncpy instead of strncpy directly to fix compile + error in Cygwin build + +Sun Jan 30 13:33:12 UTC 2005 Johnny Willemsen + + * examples/ASX/CCM_App/CCM_App.cpp: + Fixed warning in unicode build + + * ace/Service_Object.h: + Doxygen fixes + +Sun Jan 30 13:28:12 UTC 2005 Johnny Willemsen + + * examples/APG/Logging/Wrap_Macros.cpp: + Fixed compile problem in unicode build + +Sun Jan 30 13:25:12 UTC 2005 Johnny Willemsen + + * examples/APG/Reactor/Timers.cpp: + Fixed compile problem in unicode build + +Sun Jan 30 13:22:12 UTC 2005 Johnny Willemsen + + * examples/TMCast/Member/member.cpp: + Fixed compile problem in unicode build + +Sun Jan 30 13:04:12 UTC 2005 Johnny Willemsen + + * ACE-INSTALL.html: + * include/makeinclude/*.bor: + * bin/MakeProjectCreator/templates/bor.mpd: + Removed support for PASCAL, this was used for BCB4 which is already + not supported already for a long time + +Sat Jan 29 23:55:03 2005 Ossama Othman + + * examples/Misc/test_read_buffer.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_L_SPIPE.i: + * examples/Web_Crawler/URL.h: + + Added missing header include directives that are necessary due + to inter-header dependency reductions in ACE. + +Sat Jan 29 23:44:37 2005 Ossama Othman + + * examples/ASX/Event_Server/Event_Server/event_server.cpp: + * examples/ASX/Event_Server/Transceiver/transceiver.cpp: + * examples/ASX/UPIPE_Event_Server/event_server.cpp: + + Added missing "ace/OS_NS_unistd.h" include directives. Fixes + compile-time errors related to missing function prototypes. + +Sat Jan 29 11:12:58 2005 J.T. Conklin + + * examples/OS/Process/process.cpp: + + Fixed compile errors due to (now) missing includes because of include + reductions done to Service_Config.h and Svc_Handler.h. + +Sat Jan 29 16:12:37 2005 Martin Corino + + * apps/Gateway/Gateway/gatewayd.cpp: + * examples/APG/Svc_Config/HA_Status_Static.h: + * examples/ASX/CCM_App/SC_Server.cpp: + * examples/Connection/blocking/SPIPE-acceptor.h: + * examples/Connection/blocking/SPIPE-connector.h: + * examples/Connection/misc/test_upipe.h: + * examples/Reactor/FIFO/server.cpp: + * examples/Reactor/Misc/notification.cpp: + * examples/Reactor/Misc/test_demuxing.cpp: + * examples/Reactor/Misc/test_signals_1.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.h: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.h: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.h: + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.h: + * examples/Service_Configurator/IPC-tests/server/server_test.cpp: + * examples/Service_Configurator/Misc/Timer_Service.h: + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test.cpp: + * tests/Logging_Strategy_Test.cpp: + * tests/Service_Config_Test.cpp: + + Fixed compile errors due to (now) missing includes because of include + reductions done to Service_Config.h and Svc_Handler.h. + +Sat Jan 29 00:39:37 2005 J.T. Conklin + + * m4/ace.m4: + + Change --with-{acexml,qos,rmcast,ssl} to --enable-{acexml,qos, + rmcast,ssl} to be consistant with standard autoconf conventions. + This also paves the way for a *new* --with-ssl flag to point to + the openssl install directory. + +Fri Jan 28 20:30:02 2005 Ossama Othman + + * ace/Configuration.h: + + Include "ace/SStringfwd.h" instead of "ace/SString.h". Forward + declarations of ACE's string types are enough. Reduces + interheader dependencies and also reduces ACE's footprint + slightly. + + * ace/Configuration.cpp: + * ace/Local_Name_Space.cpp + * ace/Remote_Name_Space.cpp: + * ace/Service_Config.cpp: + + Include "ace/SString.h" since to pull in complete ACE string + class declarations, since the corresponding header only has + forward declarations of those string classes. + + * ace/Filecache.cpp: + * ace/Filecache.h: + + Removed alternatives to C++ template specializations in these + files. All platforms supported by ACE support standard C++ + explicit/full specialization of classes and their members. + + * ace/Local_Name_Space.h: + * ace/Remote_Name_Space.h: + + Forward declare ACE_NS_WString instead of including + "ace/SString.h". The former is all that is needed. + + * ace/Name_Proxy.h: + + Include "ace/Event_Handler.h" to pull in complete + ACE_Event_Handler class declaration. Necessitated by include + directive reductions in ace/Service_Config.h. + + * ace/Process.h: + * ace/Time_Request_Reply.h: + * ace/Token_Collection.h: + + Removed "ace/SString.h" include directive. It isn't needed. + + * ace/Service_Config.h: + + Include "ace/SStringfwd.h" instead of "ace/SString.h". Forward + declarations of ACE's string types are enough. Reduces + interheader dependencies and also reduces ACE's footprint + slightly. + + Forward declare ACE_XML_Svc_Conf class instead of include + "ace/XML_Svc_Conf.h". The former is all that is needed. + + Removed "ace/Reactor.h" and "ace/Svc_Conf_Tokens.h" include + directives. They haven't been needed for quite some time. + + * ace/Svc_Handler.h: + + No need to include "ace/Service_Config.h". "ace/Reactor.h" is + enough. + + * netsvcs/clients/Naming/Client/Client_Test.cpp: + * netsvcs/clients/Naming/Client/main.cpp: + * protocols/ace/HTBP/HTBP_Channel.cpp: + + Include "ace/Reactor.h" to pull in complete ACE_Reactor class + declaration. + +Fri Jan 28 16:02:28 2005 Steve Huston + + * tests/Proactor_Test.cpp: + * tests/Proactor_Test_IPV6.cpp: Fixed compile diagnostics. + +Fri Jan 28 20:46:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.5.x.GNU: + Applied some changes from Thomas Lockhart + : + - set versioned_so to 0, VxWorks doesn't support this + - set shared_libs to 0, by default we build staticly, but this + can be overridden by our users. For dynamic builds Thomas + supplied more fixes but we have to test some more before adding + those. + - added some more notes + - removed remark of Tornado 1.0, it is not usable anymore + +Fri Jan 28 14:00:12 UTC 2005 Johnny Willemsen + + * html/README: + Corrected download link doxygen documentation + +Fri Jan 28 13:52:12 UTC 2005 Johnny Willemsen + + * examples/README: + Removed description of CORBA directory, it doesn't exists anymore + +Fri Jan 28 13:44:12 UTC 2005 Johnny Willemsen + + * tests/Multicast_Test_IPV6.cpp: + Updated debug message that this test needs multicast and thread + support. When this is not available return 0 not 1 just as the + other tests do. This way single threaded builds don't flag this + test as failed. + +Fri Jan 28 09:03:12 UTC 2005 Johnny Willemsen + + * tests/Network_Adapters_Test.{h,cpp}: + Fixed compile warnings when building this test with the Borland + compiler. Thanks to Robert Iakobashvili + for supplying the patches + +Fri Jan 28 08:38:12 UTC 2005 Johnny Willemsen + + * ace/Global_Macros.h + Changed ACE_SERVER_ADDRESS to don't cause problems in unicode + builds + +Fri Jan 28 08:15:12 UTC 2005 Johnny Willemsen + + * examples/C++NPv2/C++NPv2.mpc: + Don't build the configurable_logging_server when uses_wchar is defined. + This example just can't build with wchar + +Fri Jan 28 07:32:12 UTC 2005 Johnny Willemsen + + * examples/ASX/Event_Server/Event_Server/Event.mpc: + * examples/ASX/Event_Server/Transceiver/Transceiver.mpc: + * examples/ASX/UPIPE_Event_Server/UPIPE_Event.mpc: + New MPC files. Thanks to Thomas Lockhart + for contributing + these. + +Fri Jan 28 05:32:12 UTC 2005 Johnny Willemsen + + * ace/Name_Request_Reply.h: + Removed private copy constructor and assignment operator, in the + netsvcs library this gave problems. + +Thu Jan 27 18:28:19 2005 Steve Huston + + * tests/Proactor_Test.{h cpp}: + * tests/Proactor_Test_IPV6.cpp: Rearranged the pieces of this test to + allow the Acceptor and Connector objects to be destroyed during the + test and still have all the stats kept accurately. This is to enable + testing of some Proactor improvements that are coming. + + * tests/Proactor_Scatter_Gather_Test.cpp: + * tests/TP_Reactor_Test.cpp: Be careful to use the same address family + when forming the listen and connect addresses. This allows things to + work regardless of IPv4/IPv6 use. + +Thu Jan 27 18:59:12 UTC 2005 Johnny Willemsen + + * ace/Hash_Map_Manager_T.inl: + Replaced c-style cast with C++ casts + +Thu Jan 27 18:48:12 UTC 2005 Johnny Willemsen + + * ace/ARGV.cpp: + * ace/Condition_Recursive_Thread_Mutex.cpp: + * ace/Condition_Thread_Mutex.cpp: + * ace/Dump.cpp: + * ace/Event.cpp: + * ace/Filecache.cpp: + * ace/Message_Block.cpp: + * ace/OS_NS_sys_socket.cpp: + * ace/Service_Object.cpp: + * ace/Service_Types.cpp: + Replaced c-style cast with C++ casts + + * ace/Name_Proxy.cpp: + * ace/Naming_Context.cpp: + Added missing members to initialisation list + + * ace/Name_Proxy.h: + * ace/Name_Request_Reply.h: + Added private assignment operator and copy constructor + to prevent copying. + +Wed Jan 26 12:57:12 UTC 2005 Johnny Willemsen + + * ace/ICMP_Socket.{h,cpp}: + * ace/Ping_Socket.{h,cpp}: + * tests/Network_Adapters_Test.cpp: + Added missing includes. Thanks to Peter Falsh + for reporting this. + + * tests/run_test.lst: + Added Network_Adapters_Test + +Tue Jan 25 21:05:12 UTC 2005 Martin Corino + + * tests/Reactor_Registration_Test.cpp: + + Revoked earlier change because it's erroneous:-( + +Tue Jan 25 19:41:12 UTC 2005 Martin Corino + + * examples/IPC_SAP/SPIPE_SAP/producer_msg.cpp: + + Fixed typo in include statement. Thanks to JT Conklin. + +Tue Jan 25 15:47:12 UTC 2005 Johnny Willemsen + + * docs/ACE-bug-process.html: + Fixed links + +Tue Jan 25 15:24:12 UTC 2005 Johnny Willemsen + + * docs/ACE-categories.html: + Updated this document + +Tue Jan 25 15:05:12 UTC 2005 Johnny Willemsen + + * ace/OS.h: + Removed include of os_include/sys/os_fcntl.h, this file doesn't + exists + +Tue Jan 25 14:41:12 UTC 2005 Martin Corino + + * examples/IPC_SAP/SPIPE_SAP/producer_msg.cpp: + + Added a necessary includefile which make things compile better + when ACE_HAS_STREAM_PIPES is defined. + +Tue Jan 25 14:15:12 UTC 2005 Martin Corino + + * tests/Reference_Counted_Event_Handler_Test.cpp: + * tests/Reactor_Registration_Test.cpp: + + Tidied up resource management (i.e. close pipes in eventhandler + destructors) since VxWorks does not automatically release those + when a dynamically loaded app module is finished. + + * tests/Reactor_Dispatch_Order_Test.cpp: + + Tidied up resource management and fixed handling superfluous output + event (like OpenBSD and Lynx). + +Mon Jan 24 23:10:33 2005 Ossama Othman + + * ace/Process_Manager.cpp (terminate): + * ace/Signal.cpp (remove_handler, register_handler): + * ace/Thread_Manager.cpp (spawn_i): + + Fixed "control reaches end of non-void function" warnings + exhibited by the latest GNU G++ 4.0 CVS snapshot. + +Mon Jan 24 17:00:39 2005 J.T. Conklin + + * ace/Makefile.am: + + Fix thinko in pkgsrc *.pc file generation. + +Mon Jan 24 18:24:12 UTC 2005 Martin Corino + + * examples/IPC_SAP/SPIPE_SAP/consumer_msg.cpp: + * examples/IPC_SAP/SPIPE_SAP/producer_msg.cpp: + * examples/IPC_SAP/SPIPE_SAP/producer_read.cpp: + * examples/IPC_SAP/SPIPE_SAP/server.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_L_SPIPE.i: + + Added a number necessary includefiles which make things compile better + when ACE_HAS_STREAM_PIPES is defined. + +Mon Jan 24 07:49:21 2005 Douglas C. Schmidt + + * ace/OS_NS_sys_socket.inl (setsockopt): Fixed a mistake in the + comment, where it should say "Windows always set + SO_REUSEADDR=1." Thanks to YiQing Xiong + for reporting this. + +Mon Jan 24 11:23:12 UTC 2005 Martin Corino + + * tests/CDR_Test.cpp: + + Fixed incorrect initializer for char array. + +Sun Jan 23 21:34:00 2005 J.T. Conklin + + * ace/Makefile.am: + * examples/Misc/Makefile.am: + * tests/Makefile.am: + + Regenerate. + + * m4/ace.m4: + + Added extra quoting to AC_REQUIRE arguments. + Set BUILD_ACE_{FL,TK,QT,XT}REACTOR automake conditionals. + +Sun Jan 23 19:17:25 2005 J.T. Conklin + + * m4/ace.m4: + + Create new ACE_WITH_{GL,FL,QT,TK} autoconf macros which will be + used for finding OpenGL, FL/TK, Qt and Tk libraries and setting + compiler and linker flags. + +Sun Jan 23 15:45:46 2005 J.T. Conklin + + * m4/ace.m4: + + Split --enable-{fl,qt,tk,xt}-reactor processing into separate + autoconf macros. + +Sun Jan 23 15:07:08 2005 Balachandran Natarajan + + * bin/make_release: + + Omit .cvsignore files. + +Sun Jan 23 18:14:12 UTC 2005 Johnny Willemsen + + * examples/Reactor/Proactor/test_multiple_loops.cpp: + * examples/Shared_Memory/test_SV.cpp: + * examples/Smart_Pointers/gadget_test.cpp: + * examples/Smart_Pointers/widget_test.cpp: + * examples/System_V_IPC/SV_Message_Queues/TMQ_Server.cpp: + +Sun Jan 23 15:47:12 UTC 2005 Johnny Willemsen + + * examples/OS/Process/process.cpp: + * examples/IPC_SAP/TLI_SAP/CPP-client.cpp: + Fixed unicode build error + +Sun Jan 23 13:56:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/wrapper_macros.GNU: + + Default rtti to 1 instead of 0, we now use dynamic_cast in the + ACE library itself, TAO requires RTTI, so changed the default + + * include/makeinclude/platform_vxworks5.5.x.GNU: + + Simplified this file by using ?= + +Sun Jan 23 13:18:12 UTC 2005 Johnny Willemsen + + * ace/Capabilities.cpp: + Removed instantiations of ACE_Hash and ACE_Equal_To of + ACE_TString. These where already giving problems on VxWorks, + now also on Irix, so removed them. Thanks to Doug McCorkle + for reporting this + +Sun Jan 23 12:39:20 2005 Marek Brudka + + * bin/MakeProjectCreator/config/tao_xtresource.mpb: + * bin/MakeProjectCreator/config/tao_tkresource.mpb: + * bin/MakeProjectCreator/config/tao_qtresource.mpb: + * bin/MakeProjectCreator/config/tao_flresource.mpb: + * bin/MakeProjectCreator/config/ace_xtreactor.mpb: + * bin/MakeProjectCreator/config/ace_xt.mpb: + * bin/MakeProjectCreator/config/ace_x11.mpb: + * bin/MakeProjectCreator/config/ace_tkreactor.mpb: + * bin/MakeProjectCreator/config/ace_tk.mpb: + * bin/MakeProjectCreator/config/ace_motif.mpb: + * bin/MakeProjectCreator/config/ace_gl.mpb: + * bin/MakeProjectCreator/config/ace_flreactor.mpb: + * bin/MakeProjectCreator/config/ace_fl.mpb: + * bin/MakeProjectCreator/config/ace_athena.mpb: + * ace/ace_xtreactor.mpc: + * ace/ace_tkreactor.mpc: + * ace/ace_qtreactor.mpc: + * ace/ace_flreactor.mpc: + * ace/ace.mpc: + + Added missing Id strings. + +Sun Jan 23 02:22:13 2005 J.T. Conklin + + * ace/ACE_FlReactor.pc.in: + * ace/ACE_QtReactor.pc.in: + * ace/ACE_TkReactor.pc.in: + * ace/ACE_XtReactor.pc.in: + + New files, pkg-config *.pc templates. + + * ace/ace_flreactor.mpc: + * ace/ace_qtreactor.mpc: + * ace/ace_tkreactor.mpc: + * ace/ace_xtreactor.mpc: + + Removed Demux subsection from Source_Files. + + Added empty Inline_Files, Template_Files, and Resource_Files + sections. + + Added Pkgconfig_Files sections. + +Sun Jan 23 00:25:48 2005 J.T. Conklin + + * m4/ace.m4: + + Initial --enable-tk-reactor and --enable-qt-reactor support. + Set BUILD_{FL,TK,QT,XT} automake conditionals. + +Sun Jan 23 01:54:59 2005 Marek Brudka + + * */.cvsignore: + To make cvs silent. + + * tests/tests.mpc: + * tests/XtReactor_Test.cpp: + * tests/XtMotifReactor_Test.cpp: + * tests/XtAthenaReactor_Test.cpp: + * tests/TkReactor_Test.cpp: + * tests/QtReactor_Test.h: + * tests/QtReactor_Test.cpp: + * tests/FlReactor_Test.cpp: + * include/makeinclude/wrapper_macros.GNU: + * include/makeinclude/platform_sunos5_g++.GNU: + * include/makeinclude/platform_lynxos.GNU: + * include/makeinclude/platform_linux_pgi.GNU: + * include/makeinclude/platform_linux_icc.GNU: + * include/makeinclude/platform_linux_borland.GNU: + * include/makeinclude/platform_linux.GNU: + * examples/Misc/test_XtReactor2.cpp: + * examples/Misc/test_XtReactor1.cpp: + * examples/Misc/Misc.mpc: + * bin/MakeProjectCreator/config/tao_xtresource.mpb: + * bin/MakeProjectCreator/config/tao_tkresource.mpb: + * bin/MakeProjectCreator/config/tao_qtresource.mpb: + * bin/MakeProjectCreator/config/tao_flresource.mpb: + * bin/MakeProjectCreator/config/strategies.mpb: + * bin/MakeProjectCreator/config/global.features: + * bin/MakeProjectCreator/config/acedefaults.mpb: + * bin/MakeProjectCreator/config/ace_xtreactor.mpb: + * bin/MakeProjectCreator/config/ace_xt.mpb: + * bin/MakeProjectCreator/config/ace_x11.mpb: + * bin/MakeProjectCreator/config/ace_tkreactor.mpb: + * bin/MakeProjectCreator/config/ace_tk.mpb: + * bin/MakeProjectCreator/config/ace_qtreactor.mpb: + * bin/MakeProjectCreator/config/ace_qt.mpb: + * bin/MakeProjectCreator/config/ace_motif.mpb: + * bin/MakeProjectCreator/config/ace_gtk.mpb: + * bin/MakeProjectCreator/config/ace_gl.mpb: + * bin/MakeProjectCreator/config/ace_flreactor.mpb: + * bin/MakeProjectCreator/config/ace_fl.mpb: + * bin/MakeProjectCreator/config/ace_athena.mpb: + * ace/config-win32-msvc.h: + * ace/config-doxygen.h: + * ace/ace_xtreactor.mpc: + * ace/ace_tkreactor.mpc: + * ace/ace_qtreactor.mpc: + * ace/ace_flreactor.mpc: + * ace/ace.mwc: + * ace/ace.mpc: + * ace/XtReactor.h: + * ace/XtReactor.cpp: + * ace/TkReactor.h: + * ace/TkReactor.cpp: + * ace/README: + * ace/QtReactor.h: + * ace/QtReactor.cpp: + * ace/FlReactor.h: + * ace/FlReactor.cpp: + * ace/ACE_XtReactor_export.h: + * ace/ACE_TkReactor_export.h: + * ace/ACE_QtReactor_export.h: + * ace/ACE_FlReactor_export.h: + * ACE-INSTALL.html: + Changes related with separation of GUI reactors. + The additional information is avalaible below. + + Wed Jan 19 22:55:50 2005 Marek Brudka + + * bin/MakeProjectCreator/config/tao_xtresource.mpb: + * bin/MakeProjectCreator/config/tao_xtreactor.mpb: + * bin/MakeProjectCreator/config/tao_tkresource.mpb: + * bin/MakeProjectCreator/config/tao_tkreactor.mpb: + * bin/MakeProjectCreator/config/tao_qtresource.mpb: + * bin/MakeProjectCreator/config/tao_qtreactor.mpb: + * bin/MakeProjectCreator/config/tao_flresource.mpb: + * bin/MakeProjectCreator/config/tao_flreactor.mpb: + + Adapted to new naming. + + Sun Jan 9 01:13:42 2005 Marek Brudka + + * ace/TkReactor.h (Module): + * ace/TkReactor.cpp (Module): + * ace/FlReactor.h (Module): + * ace/FlReactor.cpp (Module): + + Removed factory methods for loading reactor from shared + library. + + * bin/MakeProjectCreator/config/global.features (Module): + + Disabled by defult tao_flreactor and tao_tkreactor features. + + Mon Jan 3 22:48:32 2005 Marek Brudka + + * ace/ace_xtreactor.mpc (Module): + * ace/ace_tkreactor.mpc (Module): + * ace/ace_qtreactor.mpc (Module): + * ace/ace_flreactor.mpc (Module): + + Removed ace_*reactor required features. + + Tue Dec 14 00:09:48 2004 Marek Brudka + + * bin/MakeProjectCreator/config/ace_x11.mpb (Module): + * bin/MakeProjectCreator/config/ace_gl.mpb (Module): + * bin/MakeProjectCreator/config/ace_fl.mpb (Module): + * ACE-INSTALL.html (Module): + + Modified base projects to enable FlReactor compilation for + Windows. + + Mon Dec 13 01:39:12 2004 Marek Brudka + + * bin/MakeProjectCreator/config/ace_xt.mpb (Module): + * bin/MakeProjectCreator/config/ace_gl.mpb (Module): + * bin/MakeProjectCreator/config/ace_fl.mpb (Module): + + Removed nice feature inheritance and reentered a workaround + related with "verbatim" section bug in MPC. + + Mon Dec 13 00:36:44 2004 Marek Brudka + + * bin/MakeProjectCreator/config/strategies.mpb (Module): + + Removed explicite dependencies of TAO_Strategies on + TAO_TkReactor. + + * bin/MakeProjectCreator/config/tao_tkreactor.mpb (Module): + + Creating base project for using TAO_TkReactor library. + + * bin/MakeProjectCreator/config/strategies.mpb (Module): + + Removed dependency on tao_tkreactor. + + * tests/TkReactor_Test.cpp (Module): + * bin/MakeProjectCreator/config/ace_tk.mpb (Module): + * ace/config-doxygen.h (Module): + + Removed ACE_HAS_TK macros. + + * ace/TkReactor.h (Module): + * ace/TkReactor.cpp (Module): + + Removed ACE_HAS_TK macros. Created factory method TkReactor in + dll. + + Sun Dec 12 22:53:48 2004 Marek Brudka + + * tests/FlReactor_Test.cpp (Module): + + Removed ACE_HAS_FL macros. + + * bin/MakeProjectCreator/config/strategies.mpb (Module): + + Removed explicite dependence of TAO_Strategies on + TAO_FlReactor. + + * bin/MakeProjectCreator/config/tao_flreactor.mpb (Module): + + Creating base project for using TAO_FlReactor library. + + * bin/MakeProjectCreator/config/ace_fl.mpb (Module): + + Removed ACE_HAS_FL macros. + + * ace/config-doxygen.h (Module): + + Removed ACE_HAS_FL macros. + * ace/FlReactor.h (Module): + * ace/FlReactor.cpp (Module): + + Removed ACE_HAS_FL macros. Created factory method for + instantinating FlReactor from dll. + + Sun Dec 12 02:14:51 2004 Marek Brudka + + * .cvsignore: + + Made cvs more silent on executables. + + * tests/tests.mpc (Module): + + Introduced new dependencies on ace_flreactor and ace_tkreactor + for specific reactors tests. + + * include/makeinclude/platform_sunos5_sunc++.GNU (Module): + + Replaced ace_with_x11 by x11 feature. + + * include/makeinclude/wrapper_macros.GNU (Module): + + Modified documentation about features. Removed rules for an + unknown gtk_reactor. Modified statements related with new naming + schema and feature definitions. + + * bin/MakeProjectCreator/config/global.features (Module): + + Grouped and commented features related with GUI reactors. + + * bin/MakeProjectCreator/config/strategies.mpb (Module): + + Created temporary dependence on tao_tk(fl)reactors. To be + removed when TAO is separated from Tk and Fl Reactors. + + * bin/MakeProjectCreator/config/tao_flreactor.mpb (Module): + * bin/MakeProjectCreator/config/tao_tkreactor.mpb (Module): + + Created dummy projects to tao_*reactors. Will be handy when TAO + is separated from Tk and Fl Reactors. + + * bin/MakeProjectCreator/config/tao_xtreactor.mpb (Module): + * bin/MakeProjectCreator/config/tao_qtreactor.mpb (Module): + * bin/MakeProjectCreator/config/ace_xtreactor.mpb (Module): + * bin/MakeProjectCreator/config/ace_tkreactor.mpb (Module): + * bin/MakeProjectCreator/config/ace_qtreactor.mpb (Module): + * bin/MakeProjectCreator/config/ace_flreactor.mpb (Module): + + Unified derivation and naming schema. + + * bin/MakeProjectCreator/config/ace_fltk.mpb (Module): + + Replaced this file by ace_fl.mpb + + * bin/MakeProjectCreator/config/ace_xt.mpb (Module): + * bin/MakeProjectCreator/config/ace_x11.mpb (Module): + * bin/MakeProjectCreator/config/ace_tk.mpb (Module): + * bin/MakeProjectCreator/config/ace_qt.mpb (Module): + * bin/MakeProjectCreator/config/ace_motif.mpb (Module): + * bin/MakeProjectCreator/config/ace_fl.mpb (Module): + * bin/MakeProjectCreator/config/ace_gl.mpb (Module): + * bin/MakeProjectCreator/config/ace_athena.mpb (Module): + + Replaced ace_with_* features by * features to unify naming + schema. Removed unnecessary definitions + (includes,flags,libraries). Introduced unified derivation + schema. + + * ace/ace_xtreactor.mpc (Module): + * ace/ace_tkreactor.mpc (Module): + * ace/ace_qtreactor.mpc (Module): + * ace/ace_flreactor.mpc (Module): + + Added header files. Created new dependencies. + + * ace/TkReactor.h (Module): + * ace/FlReactor.h (Module): + + Used new export macros. + + * ace/ACE_TkReactor_export.h (Module): + * ace/ACE_FlReactor_export.h (Module): + + Created export macros for these GUI reactors. Will be handy in + future. + + * ACE-INSTALL.html (Module): + + Rewrote documentation related with GUI reactors. + + Fri Dec 10 23:53:41 2004 Marek Brudka + + * bin/MakeProjectCreator/config/global.features (Module): + + Removed xt_reactor feature. + + * ACE-INSTALL.html (Module): + + Modified documentation related to QtReactor and XtReactor. + + Fri Dec 10 22:57:22 2004 Marek Brudka + + * tests/QtReactor_Test.cpp (Message): + + Removed unnecesary log about lack of Qt support. + + Fri Dec 10 22:39:12 2004 Marek Brudka + + * bin/MakeProjectCreator/config/global.features (Message): + + Disabled by default ace_With_xt and ace_with_x11. + + * include/makeinclude/wrapper_macros.GNU (Module): + + Replace qt_rector variables by qt, as MPC currently uses qt + feature. + + Fri Dec 10 01:04:52 2004 Marek Brudka + + * examples/Misc/.cvsignore (Module): + + Created few ignores to make cvs silent. + + Fri Dec 10 00:45:56 2004 Marek Brudka + + * tests/.cvsignore (Module): + + Created few ignores to make cvs silent. + + * ace/ace_xtreactor.mpc (Module): + + * ace/config-tandem.h (Module): + * ace/config-doxygen.h (Module): + * ace/XtReactor.cpp (Module): + + Removed ACE_HAS_XT macros. + + * ace/XtReactor.h (Module): + + Removed ACE_HAS_XT macros and applied export macros for + ACE_XtReactor. + + * ace/README (Module): + + Removed notice on ACE_HAS_XT. + + * ace/ACE_XtReactor_export.h (Module): + + Create export macros for XtReactor. Please, do not ask if anyone + needs these macros under Windows. Probably no, but they are + present here to remain consistent with the rest of ACE. + + * tests/tests.mpc (Module): + + Created two project XtReactor_Tests for Athena widgets and + Motif. Removed XtReactor_Test. + + * tests/XtReactor_Test.cpp (Module): + * tests/XtMotifReactor_Test.cpp (Module): + * tests/XtAthenaReactor_Test.cpp (Module): + + XtReactor_Test was splitted into separate test for Athena + widgets and Motif, hence they depend on distinct + libraries. Removed ACE_HAS_XT and ACE_LACKS_MOTIF macros, as + they are not needed now. + + * examples/Misc/test_XtReactor2.cpp (Module): + * examples/Misc/test_XtReactor1.cpp (Module): + + Removed ACE_HAS_XT macros. + + * examples/Misc/Misc.mpc (Module): + + Added dependencies on ace_xtreactor and ace_motif. + + * bin/MakeProjectCreator/config/tao_xtreactor.mpb (Module): + * bin/MakeProjectCreator/config/ace_xtreactor.mpb (Module): + + Created base projects for applications using ACE/TAO_XtReactor + libraries. + + * bin/MakeProjectCreator/config/global.features (Module): + + By default ace_with_x11, ace_withxt, ace_with_motif, + ace_with_athena features are not avalaible. + + * bin/MakeProjectCreator/config/ace_xt.mpb (Module): + * bin/MakeProjectCreator/config/ace_x11.mpb (Module): + + Transformed features into projects with explicit requirements. + + * bin/MakeProjectCreator/config/ace_motif.mpb (Module): + + Created base project for motif/lestif library. + + * bin/MakeProjectCreator/config/ace_athena.mpb (Module): + + Created base project for athena widgets library. + + * ACE-INSTALL.html (Module): + + Modified section on QtReactor and added section on XtReactor. + + Tue Dec 7 20:48:36 2004 Marek Brudka + + * ace/ace_qtreactor.mpc (Module): + * ace/QtReactor_export.h (Module): + * ace/QtReactor.h (Module): + * ace/ACE_QtReactor_export.h (Module): + + Change QtReactor_export.h into ACE_QtReactor_export.h to avoid + possible, though not very probably name conflict and remain + consistent with TAO_QtReact_export. + + Tue Dec 7 00:23:54 2004 Marek Brudka + + * ace/ace_qtreactor.mpc (Module): + * ace/QtReactor_export.h (Module): + * ace/QtReactor.h (Module): + + Created and applied export macros for ACE_QtReactor library. + + Sun Dec 5 23:18:29 2004 Marek Brudka + + * include/makeinclude/wrapper_macros.GNU (Module): + * include/makeinclude/platform_linux_pgi.GNU (Module): + * include/makeinclude/platform_linux_icc.GNU (Module): + * include/makeinclude/platform_linux.GNU (Module): + + Removed unnecessary ACE_HAS_QT and make options regarding + qt. All those things are now set up by MPC. + + * tests/tests.mpc (Module): + + Removed explicit dependency on qt. It is ensured now by qt base + project. + + * tests/QtReactor_Test.h (Module): + * tests/QtReactor_Test.cpp (Module): + + Removed ACE_HAS_QT section as MPC manages now configuration. + + * bin/MakeProjectCreator/config/tao_qtreactor.mpb (Module): + + Removed tao_qtreactor as it seems to be redundant with qt=1. I'm + not sure if this. + + * bin/MakeProjectCreator/config/ace_qt.mpb (Module): + + Removed ace_qtreactor as it seems to be redundant with qt=1. I'm + not sure if this. + + * ace/config-win32-msvc.h (Module): + + Removed sections related with ACE_HAS_QT and QT_DLL + definition. It is manged now by MPC. + + * ace/config-doxygen.h (Module): + + Removed ACE_HAS_QT as it is ACE_QtReactor compiles now alway if + qt option is set. + + * ace/README (Module): + + Removed paragraph on ACE_HAS_QT. + + * ace/QtReactor.h (Module): + * ace/QtReactor.cpp (Module): + + Removed code compiled conditionally on ACE_HAS_QT + predicate. Compilation is now managed by MPC. + + Sat Dec 4 17:03:38 2004 Marek Brudka + + * tests/RMCast/.cvsignore (Module): + * ace/.cvsignore (Module): + * tests/.cvsignore (Module): + + Added linux executables to prevent cvs warnings. + + Sat Dec 4 16:02:30 2004 Marek Brudka + + * ace/qt_reactor.mpb (Module): + + This base project is no necessary now. + + Sat Dec 4 15:51:01 2004 Marek Brudka + + * bin/MakeProjectCreator/config/ace_qtreactor.mpb (Module): + * ace/ace_qtreactor.mpc (Module): + + Removed depracated qt_moc project. + + Sat Dec 4 15:49:03 2004 Marek Brudka + + * ACE-INSTALL.html (Module): + + Added paragraph on building ACE_QtLibrary. + + Sat Dec 4 14:28:54 2004 Marek Brudka + + * bin/MakeProjectCreator/config/global.features (Module): + + Added comment about -features option. + + Fri Dec 3 23:10:39 2004 Marek Brudka + + * bin/MakeProjectCreator/config/tao_qtreactor.mpb (Added): + * bin/MakeProjectCreator/config/ace_xt.mpb (Added): + * bin/MakeProjectCreator/config/ace_x11.mpb (Added): + * bin/MakeProjectCreator/config/ace_tk.mpb (Added): + * bin/MakeProjectCreator/config/ace_qtreactor.mpb (Added): + * bin/MakeProjectCreator/config/ace_gtk.mpb (Added): + * bin/MakeProjectCreator/config/ace_gl.mpb (Added): + * bin/MakeProjectCreator/config/ace_fltk.mpb (Added): + * ace/ace_xtreactor.mpc (Added): + * ace/ace_tkreactor.mpc (Added): + * ace/ace_qtreactor.mpc (Added): + * ace/ace_flreactor.mpc (Added): + + * tests/tests.mpc (Modified): + * include/makeinclude/wrapper_macros.GNU (Modified): + * include/makeinclude/platform_sunos5_sunc++.GNU (Modified): + * include/makeinclude/platform_sunos5_g++.GNU (Modified): + * include/makeinclude/platform_lynxos.GNU (Modified): + * include/makeinclude/platform_linux_pgi.GNU (Modified): + * include/makeinclude/platform_linux_icc.GNU (Modified): + * include/makeinclude/platform_linux_borland.GNU (Modified): + * include/makeinclude/platform_linux.GNU (Modified): + * bin/MakeProjectCreator/config/acedefaults.mpb (Modified): + * bin/MakeProjectCreator/config/ace_qt.mpb (Modified): + * ace/ace.mwc (Modified): + * ace/ace.mpc (Modified): + + Initial changes related with the separation of reactors into + distinct libraries. Many thanks to Raphael Bossek + for this patch. + +Sat Jan 22 21:18:58 2005 Kobi Cohen-Arazi + + * ace/Logging_Strategy.cpp (handle_timeout): Fixed when defined + ACE_LACKS_IOSTREAM_TOTALLY. Use ftell instead of fseek in order + to get the current file length. Thanks to Kim ByeongSu for pointing it out. + +Sat Jan 22 21:13:11 2005 Kobi Cohen-Arazi + + * tests/Test_Output.cpp(close): Fixed when + ACE_LACKS_IOSTREAM_TOTALLY - fflush and fclose should be called + only when output_file_ is valid, and it points to the same + current ACE_LOG_MSG->msg_ostream (). + +Fri Jan 21 19:07:12 UTC 2005 Johnny Willemsen + + * ACE-INSTALL.html: + Added Solaris 10 + +Fri Jan 21 18:39:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_client.mpb: + Removed duplicate includes + +Fri Jan 21 16:03:12 UTC 2005 Johnny Willemsen + + * examples/IPC_SAP/FIFO_SAP/FIFO-Msg-server.cpp: + Fixed compile error in Solaris 10 build + +Fri Jan 21 11:38:12 UTC 2005 Johnny Willemsen + + * etc/ace.doxygen: + Also parse config-lite.h and config-all.h to generate the + ACE documentation + +Thu Jan 20 22:48:24 2005 Ossama Othman + + * docs/ACE-guidelines.html: + + Removed obsolete ACE cast macro usage recommendations. They are + deprecated. Thanks to Olli Savia for + pointing out this document needed updating. + + Updated and removed out-of-date guidelines. + +Thu Jan 20 19:07:35 2005 Ossama Othman + + * bin/ACE-casts-convert: + + Enhanced to support conversion of ACE_*_cast_[1-5]_{ptr,ref} + macro calls to their standard C++ counterparts. + + * ace/Map_T.inl: + + Converting remaining deprecated ACE cast macro calls using the + enhanced ACE-casts-convert script described above. + +Thu Jan 20 18:18:00 2005 Ossama Othman + + * ACEXML/apps/svcconf/Svcconf_Handler.cpp: + * ACEXML/common/AttributesImpl.cpp: + * ACEXML/common/FileCharStream.cpp: + * ACEXML/common/HttpCharStream.cpp: + * ACEXML/common/Mem_Map_Stream.cpp: + * ACEXML/common/NamespaceSupport.cpp: + * ACEXML/common/SAXExceptions.cpp: + * ACEXML/common/StrCharStream.cpp: + * ACEXML/common/Transcode.cpp: + * ACEXML/parser/debug_validator/Debug_Attributes_Builder.cpp: + * ACEXML/parser/parser/Entity_Manager.i: + * ACEXML/parser/parser/Parser.cpp: + * ACEXML/tests/ContentHandler_Test.cpp: + * ACEXML/tests/Transcoder_Test.cpp: + * Kokyu/Dispatch_Deferrer.cpp: + * Kokyu/Dispatcher_Task.cpp: + * ace/QoS/SOCK_Dgram_Mcast_QoS.cpp: + * ace/RMCast/RMCast_Fragment.cpp: + * ace/RMCast/RMCast_IO_UDP.cpp: + * ace/RMCast/RMCast_Partial_Message.cpp: + * ace/RMCast/RMCast_Reassembly.cpp: + * apps/JAWS/server/IO.cpp: + * apps/JAWS/server/JAWS_Pipeline_Handler.cpp: + * apps/JAWS2/HTTP_10_Parse.cpp: + * apps/JAWS2/HTTP_10_Write.cpp: + * apps/JAWS2/JAWS/Assoc_Array.cpp: + * apps/JAWS2/JAWS/Concurrency.cpp: + * apps/JAWS2/JAWS/IO.cpp: + * apps/JAWS2/JAWS/Pipeline_Tasks.cpp: + * apps/JAWS3/http/HTTP_States.h: + * apps/JAWS3/jaws3/Asynch_IO.cpp: + * apps/drwho/CM_Client.cpp: + * apps/drwho/CM_Server.cpp: + * apps/drwho/server.cpp: + * apps/gperf/src/Hash_Table.cpp: + * apps/gperf/src/Key_List.cpp: + * apps/gperf/src/List_Node.cpp: + * apps/mkcsregdb/mkcsregdb.cpp: + * examples/APG/Config/HA_Status.cpp: + * examples/APG/Logging/Callback-2.h: + * examples/APG/Misc_IPC/UDP_Broadcast.cpp: + * examples/APG/Misc_IPC/UDP_Unicast.cpp: + * examples/APG/Naming/Name_Binding.h: + * examples/APG/Proactor/HA_Proactive_Status.cpp: + * examples/APG/Reactor/Client.cpp: + * examples/APG/Reactor/HAStatus-AC.cpp: + * examples/APG/Reactor/HAStatus.cpp: + * examples/APG/Reactor/Timer_State_Data.cpp: + * examples/APG/Shared_Memory/Hash_Map.cpp: + * examples/APG/Shared_Memory/Malloc.cpp: + * examples/APG/Shared_Memory/PI_Malloc.cpp: + * examples/APG/Sockets/Iovec.cpp: + * examples/APG/Svc_Config/HA_Status_Dynamic.cpp: + * examples/APG/Svc_Config/HA_Status_Static.cpp: + * examples/APG/ThreadPools/TP_Reactor.cpp: + * examples/APG/Timers/Alarm.cpp: + * examples/APG/Timers/CB.cpp: + * examples/APG/Timers/PCB.cpp: + * examples/APG/Timers/Task.cpp: + * examples/Bounded_Packet_Relay/BPR_Drivers.cpp: + * examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.cpp: + * examples/C++NPv1/Logging_Client.cpp: + * examples/C++NPv1/Process_Per_Connection_Logging_Server.cpp: + * examples/C++NPv1/RT_Thread_Per_Connection_Logging_Server.cpp: + * examples/C++NPv1/Thread_Per_Connection_Logging_Server.cpp: + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: + * examples/C++NPv2/Client_Logging_Daemon.cpp: + * examples/C++NPv2/Logging_Event_Handler.h: + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: + * examples/C++NPv2/Server_Shutdown.cpp: + * examples/C++NPv2/Service_Reporter.cpp: + * examples/C++NPv2/TPC_Logging_Server.cpp: + * examples/C++NPv2/TP_Logging_Server.cpp: + * examples/C++NPv2/TP_Reactor_Logging_Server.cpp: + * examples/C++NPv2/WFMO_Reactor_Logging_Server.cpp: + * examples/C++NPv2/display_logfile.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-test.cpp: + * examples/IPC_SAP/FILE_SAP/client.cpp: + * examples/IPC_SAP/SOCK_SAP/C-inclient.cpp: + * examples/IPC_SAP/SOCK_SAP/C-inserver.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-unserver.cpp: + * examples/IPC_SAP/SOCK_SAP/FD-unserver.cpp: + * examples/Reactor/Misc/notification.cpp: + * examples/Reactor/Multicast/Log_Wrapper.cpp: + * examples/Reactor/Proactor/test_aiosig_ace.cpp: + * examples/Reactor/WFMO_Reactor/APC.cpp: + * examples/Reactor/WFMO_Reactor/Handle_Close.cpp: + * examples/Reactor/WFMO_Reactor/Multithreading.cpp: + * examples/Reactor/WFMO_Reactor/Removals.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.i: + * examples/Shared_Malloc/test_malloc.cpp: + * examples/Shared_Malloc/test_persistence.cpp: + * examples/Shared_Malloc/test_position_independent_malloc.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Client.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Server.cpp: + * examples/System_V_IPC/SV_Message_Queues/TMQ_Client.cpp: + * examples/System_V_IPC/SV_Message_Queues/TMQ_Server.cpp: + * examples/TMCast/Member/member.cpp: + * examples/Threads/thread_manager.cpp: + * examples/Threads/thread_specific.cpp: + * examples/Timer_Queue/Thread_Timer_Queue_Test.cpp: + * examples/Web_Crawler/Command_Processor.cpp: + * examples/Web_Crawler/Iterators.cpp: + * examples/Web_Crawler/Mem_Map_Stream.cpp: + * examples/Web_Crawler/URL_Addr.cpp: + * examples/Web_Crawler/URL_Visitor.cpp: + * netsvcs/lib/Name_Handler.cpp: + * protocols/ace/HTBP/HTBP_Channel.cpp: + * protocols/ace/HTBP/HTBP_Session.cpp: + * performance-tests/Misc/basic_perf.cpp: + * performance-tests/Misc/childbirth_time.cpp: + * performance-tests/Misc/context_switch_time.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_clt.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_srv.cpp: + * performance-tests/SCTP/SOCK_STREAM_clt.cpp: + * performance-tests/SCTP/SOCK_STREAM_srv.cpp: + * performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.cpp: + * performance-tests/Server_Concurrency/Leader_Follower/leader_follower.cpp: + * performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.cpp: + * performance-tests/Server_Concurrency/Queue_Based_Workers/workers.cpp: + * performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.cpp: + * tests/ACE_Init_Test.cpp: + * tests/ACE_Test.cpp: + * tests/CDR_Array_Test.cpp: + * tests/Cache_Map_Manager_Test.cpp: + * tests/Cache_Map_Manager_Test.h: + * tests/Conn_Test.cpp: + * tests/DLL_Test.cpp: + * tests/DLList_Test.cpp: + * tests/Dynamic_Priority_Test.cpp: + * tests/FlReactor_Test.cpp: + * tests/Handle_Set_Test.cpp: + * tests/IOStream_Test.cpp: + * tests/MT_Reactor_Upcall_Test.cpp: + * tests/MT_SOCK_Test.cpp: + * tests/Malloc_Test.cpp: + * tests/Map_Manager_Test.cpp: + * tests/Max_Default_Port_Test.cpp: + * tests/Max_Default_Port_Test_IPV6.cpp: + * tests/Message_Queue_Test.cpp: + * tests/Message_Queue_Test_Ex.cpp: + * tests/Multicast_Test.cpp: + * tests/Multicast_Test_IPV6.cpp: + * tests/OS_Test.cpp: + * tests/Object_Manager_Test.cpp: + * tests/Priority_Buffer_Test.cpp: + * tests/Priority_Reactor_Test.cpp: + * tests/Proactor_Scatter_Gather_Test.cpp: + * tests/Proactor_Test.cpp: + * tests/Proactor_Test_IPV6.cpp: + * tests/Proactor_Timer_Test.cpp: + * tests/Process_Strategy_Test.cpp: + * tests/Reactor_Performance_Test.cpp: + * tests/Reactor_Timer_Test.cpp: + * tests/Reactors_Test.cpp: + * tests/Recursive_Condition_Bug_Test.cpp: + * tests/Recursive_Condition_Test.cpp: + * tests/Recursive_Mutex_Test.cpp: + * tests/SOCK_SEQPACK_SCTP_Test.cpp: + * tests/SOCK_Send_Recv_Test.cpp: + * tests/SOCK_Send_Recv_Test_IPV6.cpp: + * tests/SString_Test.cpp: + * tests/SV_Shared_Memory_Test.cpp: + * tests/Semaphore_Test.cpp: + * tests/Service_Config_DLL.cpp: + * tests/Service_Config_Test.cpp: + * tests/TSS_Test.cpp: + * tests/Task_Ex_Test.cpp: + * tests/Thread_Pool_Reactor_Resume_Test.cpp: + * tests/Thread_Pool_Reactor_Test.cpp: + * tests/Thread_Pool_Test.cpp: + * tests/Time_Value_Test.cpp: + * tests/HTBP/Reactor_Tests/test_config.h: + * tests/HTBP/Send_Recv_Tests/SendRecv_Test.cpp: + * tests/RMCast/RMCast_Fragment_Test.cpp: + * tests/RMCast/RMCast_Membership_Test.cpp: + * tests/RMCast/RMCast_Reassembly_Test.cpp: + * tests/RMCast/RMCast_Reordering_Test.cpp: + * tests/RMCast/RMCast_Retransmission_Test.cpp: + * tests/SSL/Thread_Pool_Reactor_SSL_Test.cpp: + * websvcs/lib/URL_Addr.cpp: + + Converted remainder of + ACE_{static,dynamic,reinterpret,const}_cast macros calls to + their standard C++ counterparts using new bin/ACE-casts-convert + script. + +Thu Jan 20 18:53:12 UTC 2005 Johnny Willemsen + + * ace/MEM_Acceptor.h: + Doxygen improvement + +Thu Jan 20 18:26:12 UTC 2005 Johnny Willemsen + + * ace/MEM_Addr.h: + Doxygen improvement + +Thu Jan 20 15:46:12 UTC 2005 Johnny Willemsen + + * ace/Connector.cpp: + Replaced C-style cast with C++ const_cast + +Thu Jan 20 07:00:15 2005 Chad Elliott + + * bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm: + + Honor the -into option by prefixing each open with the + correct output directory determined by the new method on the + Creator. + +Thu Jan 20 01:16:21 2005 Ossama Othman + + * bin/ACE-casts-convert: + + New convenience script that converts all ACE cast macro calls + (e.g. ACE_static_cast (foo, bar)) to their standard C++ + counterparts (e.g. static_cast (bar)). It is meant as an + aid to help app developers that use the ACE cast macros upgrade + their apps to the standard C++ cast syntax since the ACE cast + macros were deprecated back in ACE 5.4.2. + +Wed Jan 19 23:06:14 2005 J.T. Conklin + + * bin/MakeProjectCreator/config/acelib.mpb: + + Changed to inherit from pkgconfig.mpb. + + * bin/MakeProjectCreator/config/pkgconfig.mpb: + + New file, custom file definition for pkgconfig *.pc.in file. + +Wed Jan 19 15:20:19 2005 Steve Huston + + * ace/Dev_Poll_Reactor.inl: Add #include "ace/Log_Msg.h" to pick up + ACE_ASSERT. Fixes compile error on Solaris 9. + +Wed Jan 19 11:23:41 2005 Chad Elliott + + * bin/MakeProjectCreator/modules/BorlandProjectCreator.pm: + + Use the new get_use_env() method which is part of the MPC change + from Wed Jan 19 11:20:42 2005. + +Wed Jan 19 08:28:11 2005 Chad Elliott + + * bin/tao_orb_tests.lst: + + Added TAO/tests/GIOP_Fragments/PMB_With_Fragments/run_test.pl to + the list of tests. + +Tue Jan 18 09:32:47 2005 Chad Elliott + + * bin/MakeProjectCreator/templates/bor.mpd: + * bin/MakeProjectCreator/templates/gnu.mpd: + + Allow the addition to 'command' and 'dependent' within the scope + of a custom section. This is part of the MPC change from + Tue Jan 18 09:29:09 2005. + +Tue Jan 18 08:17:10 2005 Douglas C. Schmidt + + * ace/Log_Msg.cpp (open): Fixed the logic to pass prog_name + rather than logger_key, which fixes a bug with syslog. Thanks + to Robert Iakobashvili for this fix. + +Mon Jan 17 23:08:20 2005 J.T. Conklin + + * configure.ac: + + Clarify that we're checking whether the second argument to + gettimeofday() is a _struct_ timezone *. + + * m4/platform.m4: + + Fixed ACE_VAR_TIMEZONE macro to avoid false positive on systems + with the timezone() function. + +Sun Jan 16 23:26:58 2005 J.T. Conklin + + * m4/config_h.m4: + + Removed autoheader template for ACE_HAS_SIGINFO_T. + + * configure.ac: + + Simplified check for ACE_HAS_SIGINFO_T. + Added check for ACE_LACKS_SI_ADDR. + Added check for ACE_HAS_PTHREAD_NP_H. + +Sun Jan 16 22:14:25 2005 J.T. Conklin + + * ace/os_include/os_pthread.h: + + #include if ACE_HAS_PTHREAD_NP_H is defined. + + * ace/README: + + Document new feature test macro ACE_HAS_PTHREAD_NP_H. + +Sun Jan 16 18:52:12 UTC 2005 Johnny Willemsen + + * ace/CDR_Stream.{h,cpp}: + Don't implement the destructor of ACE_WChar_Codeset_Translator + in the header file, but in the cpp file. Fixes link errors + with TAO and Cygwin. Thanks to Mike McGahan + for reporting this. + This fixes bugzilla id [2020]. + +Sat Jan 15 22:22:12 UTC 2005 Johnny Willemsen + + * tests/HTBP/Send_Large_Msg/Send_Large_Msg.mpc: + Also build the client after the Test_Output library + +Thu Jan 13 23:32:03 2005 Ossama Othman + + * ace/Capabilities.cpp: + * ace/Configuration.cpp: + * ace/Connector.cpp: + * ace/Containers_T.cpp: + * ace/Dev_Poll_Reactor.cpp: + * ace/Dynamic_Service.cpp: + * ace/FILE.cpp: + * ace/LSOCK_Acceptor.cpp: + * ace/LSOCK_Stream.cpp: + * ace/Log_Msg.cpp: + * ace/Message_Queue.cpp: + * ace/Message_Queue_T.cpp: + * ace/Naming_Context.cpp: + * ace/OS_NS_fcntl.cpp: + * ace/OS_NS_netdb.cpp: + * ace/OS_NS_stdio.cpp: + * ace/OS_NS_stropts.cpp: + * ace/OS_NS_sys_uio.cpp: + * ace/OS_NS_sys_utsname.cpp: + * ace/OS_NS_time.cpp: + * ace/OS_NS_unistd.inl: + * ace/OS_NS_wchar.cpp: + * ace/OS_Thread_Adapter.cpp: + * ace/Obstack_T.cpp: + * ace/POSIX_Asynch_IO.cpp: + * ace/POSIX_CB_Proactor.cpp: + * ace/POSIX_Proactor.cpp: + * ace/Parse_Node.cpp: + * ace/Remote_Name_Space.cpp: + * ace/SOCK_Acceptor.cpp: + * ace/SOCK_Connector.cpp: + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_SEQPACK_Acceptor.cpp: + * ace/SOCK_SEQPACK_Association.cpp: + * ace/SOCK_SEQPACK_Connector.cpp: + * ace/Select_Reactor_Base.cpp: + * ace/Service_Config.cpp: + * ace/Service_Repository.cpp: + * ace/Sock_Connect.cpp: + * ace/Stream_Modules.cpp: + * ace/Svc_Conf.y: + * ace/Svc_Conf_y.cpp: + * ace/TLI.cpp: + * ace/TLI_Acceptor.cpp: + * ace/TLI_Connector.cpp: + * ace/TSS_T.cpp: + * ace/Timer_Heap_T.cpp: + * ace/Timer_Wheel_T.cpp: + * ace/Token_Collection.cpp: + * ace/UPIPE_Stream.cpp: + * ace/UUID.cpp: + * ace/Unbounded_Queue.cpp: + * ace/Unbounded_Set.cpp: + * ace/WFMO_Reactor.cpp: + * ace/WIN32_Asynch_IO.cpp: + * ace/WIN32_Proactor.cpp: + + Converted all ACE_*_cast macro calls to their standard C++ + counterparts. The ACE_*_cast macros were deprecated in ACE + 5.4.2. + +Thu Jan 13 11:29:35 2005 Boris Kolpackov + + * ace/TMCast/Group.cpp: + * ace/TMCast/LinkListener.hpp: Use ACE_hthread_t instead of + ACE_thread_t to join threads. + +Wed Jan 12 22:52:12 2005 Ossama Othman + + * ace/OS_NS_stdio.h (gets): + * ace/OS_NS_stdio.cpp (gets): + + Removed this implementation. While this ACE implementation of + gets() did not contain the security holes that all standard + gets() implementations have, keeping it around only serves to + foster confusion since (1) some may incorrectly assume that this + ACE-specific gets() implementation has the same holes as + standard ones, and (2) invoking it with a default size argument + so that it looks like a standard gets() call results in behavior + that is different from the standard. Use fgets() instead. + + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: + * examples/C++NPv2/Server_Shutdown.cpp: + * examples/C++NPv2/TP_Reactor_Logging_Server.cpp: + + Replaced all gets() calls with their fgets() counterparts. + gets() is evil (read insecure), and should not be used. + +Wed Jan 12 14:02:03 2005 Boris Kolpackov + + * ace/TMCast/Group.cpp: + * ace/TMCast/LinkListener.hpp: Called different version of + ACE_OS::thr_join which happens to be supported on Win32. Thanks + to Huang Rui for reporting the + problem and helping in narrowing it down. + +Tue Jan 11 23:16:35 2005 Ossama Othman + + * configure.ac: + + Added test for existence of `/dev/poll' device file. If that + file exists and is readable define the "ACE_HAS_DEV_POLL" + preprocessor symbol. + + * m4/config_h.m4: + + Minor preprocessor symbol documentation fixes. + +Tue Jan 11 22:32:47 2005 Ossama Othman + + * ace/Dev_Poll_Reactor.cpp (remove_handler_i): + + Release the lock during the "close" upcall. Fixes a deadlock + that occurred when cancelling a timer during removal of an event + handler from the reactor. Thanks to Gao Xianchao for reporting the problem and confirming that + this change fixes the problem. + +Wed Jan 12 00:12:03 2005 Balachandran Natarajan + + * ace/OS_NS_signal.inl: + + Fixed a compile error with the following checkin "Tue Jan 11 + 18:14:22 2005 Steve Huston ". Not sure + whether this is going to break aCC. The existing code broke + atleast g++ 3.3.4. Need to sync with Steve on this. + +Tue Jan 11 18:14:22 2005 Steve Huston + + * ace/OS_NS_signal.inl: Added "namespace ACE_OS" to this as some other + .inl files have done. This helped get HP aC++ around its confusion + of ACE_OS::sigaction() vs. sigaction(). Added "::" to the sigaction + type specifiers in the signature to resolve the confusion between + the sigaction type and ACE_OS::sigaction. + +Mon Jan 10 12:41:23 2005 Steve Huston + + * tests/Test_Output.cpp (close): If the output_file_ pointer is + already 0, don't flush/close/delete it. Logging_Strategy_Test + does a close before the end of the program, and this will + cause ACE_END_TEST to close it again and crash, at least on + some plaforms. + +Mon Jan 10 10:29:38 2005 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Ensure that all generated files are created before attempting to + create the precompiled header binary. + + * bin/depgen.pl: + + Use canonpath on all paths provide by the user to ensure that + things get substituted properly in the generated dependency file. + +Mon Jan 10 16:10:12 UTC 2005 Johnny Willemsen + + * examples/Mem_Map/IO-tests/test_io.cpp: + Fixed compile errors + +Mon Jan 10 12:29:12 UTC 2005 Johnny Willemsen + + * apps/gperf/tests/test.cpp: + Fixed unicode link errors + +Mon Jan 10 10:28:12 UTC 2005 Johnny Willemsen + + * examples/Mem_Map/IO-tests/test_io.cpp: + * examples/IPC_SAP/TLI_SAP/ftp-server.cpp: + * examples/IPC_SAP/TLI_SAP/ftp-client.cpp: + * examples/IPC_SAP/TLI_SAP/db-server.cpp: + * examples/IPC_SAP/TLI_SAP/db-client.cpp: + * examples/IPC_SAP/TLI_SAP/CPP-server.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-memserver.cpp: + * examples/Connection/non_blocking/test_lsock_acceptor.cpp: + * examples/Bounded_Packet_Relay/bpr_thread.cpp: + * examples/ASX/Message_Queue/bounded_buffer.cpp: + * examples/ASX/Message_Queue/priority_buffer.cpp: + * examples/ASX/CCM_App/SC_Client.cpp: + Fixed unicode link errors + +Mon Jan 10 08:41:12 UTC 2005 Johnny Willemsen + + * examples/System_V_IPC/SV_Message_Queues/MQ_Client.cpp: + Fixed compile error + +Sun Jan 9 19:49:19 2005 J.T. Conklin + + * ACE-INSTALL.html: + + Updated to note that autoconf/automake build is available + in ACE only and ACE+TAO releases. + +Sun Jan 9 18:29:13 2005 J.T. Conklin + + * ACEXML/apps/svcconf/Makefile.am: + * ACEXML/common/Makefile.am: + * ACEXML/parser/parser/Makefile.am: + * Kokyu/Makefile.am: + * protocols/ace/HTBP/Makefile.am: + + Generate pkg-config *.pc files from templates. + + * ACEXML/apps/svcconf/ACEXML_XML_Svc_Conf_Parser.pc.in: + * ACEXML/common/ACEXML.pc.in: + * ACEXML/parser/parser/ACEXML_Parser.pc.in: + * Kokyu/Kokyu.pc.in: + * protocols/ace/HTBP/ACE_HTBP.pc.in: + + New files, pkg-config *.pc templates. + +Sun Jan 9 17:53:12 UTC 2005 Johnny Willemsen + + * examples/System_V_IPC/SV_Semaphores/Semaphores_1.cpp: + * examples/System_V_IPC/SV_Semaphores/Semaphores_2.cpp: + * examples/System_V_IPC/SV_Shared_Memory/SV_Shared_Memory_Test.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Client.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Server.cpp: + Fixed unicode compile errors + +Sun Jan 9 17:49:12 UTC 2005 Johnny Willemsen + + * netsvcs/lib/Server_Logging_Handler_T.{h,cpp}: + Fixed unicode compile errors + +Sun Jan 9 12:47:12 UTC 2005 Johnny Willemsen + + * examples/IOStream/client/iostream_client.cpp: + * examples/IOStream/server/iostream_server.cpp: + * examples/IPC_SAP/TLI_SAP/CPP-ATM-client.cpp: + * examples/IPC_SAP/TLI_SAP/CPP-ATM-server.cpp: + * examples/OS/process/process.cpp: + Fixed unicode link errors + +Sun Jan 9 12:37:12 UTC 2005 Johnny Willemsen + + * examples/Connection/non_blocking/test_lsock_connector.cpp: + * examples/Connection/non_blocking/test_spipe_acceptor.cpp: + * examples/Connection/non_blocking/test_spipe_connector.cpp: + * examples/Connection/non_blocking/test_tli_acceptor.cpp: + * examples/Connection/non_blocking/test_tli_connector.cpp: + Fixed unicode link errors + +Sun Jan 9 11:18:12 UTC 2005 Johnny Willemsen + + * tests/Unbounded_Set_Test.cpp: + Removed test for bug 1460, it is just not safe to remove the element + the iterator points to, always move the iterator first forward + and then remove the element. + +Sat Jan 8 14:50:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/server.mpb: + Removed this file, name is just too generic, use taoserver for + TAO servers that have taoexe and portableserver as base project + and server as exename + +Fri Jan 7 21:04:44 2005 Balachandran Natarajan + + * include/makeinclude/wrapper_macros.GNU: + + Added the required path settings for SSL. + +Fri Jan 7 18:23:19 2005 Steve Huston + + * configure.ac: Corrected the check for ACE_HAS_CONFLICTING_XTI_MACROS. + We're checking for a conflict of macros from other places. The + requirement for this macro originally came from HP-UX, and shows + as a "Future error" (aka a warning) from aC++. Simply having + the macros show up when the "wrong" header is included first isn't + a problem - it's the compiler complaining that they conflict. + +Fri Jan 7 19:36:12 UTC 2005 Johnny Willemsen + + * tests/tests.mpc: + Found that Unbounded_Set_Test was not listed, added this + + * tests/run_test.lst: + Removed Unbounded_Set_Test_Ex, but added Unbounded_Set_Test + +Fri Jan 7 15:04:12 UTC 2005 Johnny Willemsen + + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.i: + Added include of OS_NS_unistd.h to fix compile errors in Solaris 10 + build. + +Fri Jan 7 08:39:40 2005 Chad Elliott + + * tests/HTBP/Send_Large_Msg/Send_Large_Msg.mpc: + * tests/HTBP/Send_Recv_Tests/SendRecv_Test.mpc: + + Added after += Test_Output to make sure that these projects aren't + built before the Test_Output library. + +Fri Jan 7 13:19:12 UTC 2005 Johnny Willemsen + + * ace/Unbounded_Set_Ex.{h,cpp,inl}: + * ace/ace.mpc: + * ace/Makefile.am: + Removed the ACE_Unbounded_Set_Ex. It gives the false idea + that the iterators can be used thread safe. If you used this, + use ACE_Unbounded_Set and handle thread safety in your own + code + + * ace/Node.{h,cpp}: + Removed deleted_, this was there for ACE_Unbounded_Set_Ex, which + is now removed. + + * tests/Unbounded_Set_Test_Ex.{h,cpp}: + * tests/Makefile.am: + * tests/tests.mpc: + Removed the ACE_Unbounded_Set_Ex test + +Fri Jan 7 11:38:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_math.inl: + Replaced ACE_OS:: before each method with namespace ACE_OS {}, + hopefully this fixes the compile warnings in the SuSE 8 fuzz builds. + Thanks to Steve Huston for this idea. + + * ace/config-vxworks5.x.h: + Removed ACE_HAS_NONCONST_RMDIR, rmdir has a const char* on VxWorks + + * ace/OS_NS_unistd.inl (rmdir): + Removed part with ACE_HAS_NONCONST_RMDIR, there are no config files + anymore that define this + + * ace/README: + Removed ACE_HAS_NONCONST_RMDIR + +Thu Jan 6 18:29:22 2005 Steve Huston + + * configure.ac: Added check for + ACE_EXPLICIT_TEMPLATE_DESTRUCTOR_TAKES_ARGS ( ~CLASS() ), + and made it the primary check since most compilers like this one. + If this one fails, then test for + ACE_HAS_WORKING_EXPLICIT_TEMPLATE_DESTRUCTOR ( ~CLASS() ). Some + compilers don't like this one (such as IBM Visual Age C++) but + do like the first one. + + * m4/config_h.m4: Added ACE_EXPLICIT_TEMPLATE_DESTRUCTOR_TAKES_ARGS. + +Thu Jan 6 08:54:12 UTC 2005 Johnny Willemsen + + * examples/IPC_SAP/SPIPE_SAP/producer_msg.cpp: + * examples/IPC_SAP/SPIPE_SAP/consumer_read.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-Msg-server.cpp: + Added includes to fix compile errors in Solaris 10 build + +Wed Jan 5 14:06:03 2005 Chad Elliott + + * ace/config-aix-4.x.h: + * include/makeinclude/platform_aix_ibm.GNU: + + Visual Age 6 does not require #pragma implementation for template + cpp files and so for backward compatibility, set the + ACE_TEMPLATES_REQUIRE_PRAGMA macro if using Visual Age 5 or + earlier and ACE_TEMPLATES_REQUIRE_SOURCE for 6 and later. + +Wed Jan 5 13:03:23 2005 Jeff Parsons + + * ace/qt_reactor.mpb: + + Modified this file similarly to those in + + Wed Jan 5 09:25:49 2005 Jeff Parsons + + so that MPC regeneration will work correctly when qt=1. + +Wed Jan 5 17:46:12 UTC 2005 Johnny Willemsen + + * ace/Dev_Poll_Reactor.cpp: + Added include of ace/OS_NS_stropts.h to get ACE_OS::ioctl + +Wed Jan 5 09:25:49 2005 Jeff Parsons + + * ace/ace.mpc: + * ace/codecs.mpb: + * ace/filecache.mpb: + * ace/other.mpb: + * ace/svcconf.mpb: + * ace/token.mpb: + * ace/uuid.mpb: + + Removed the extra nested braces related to ACE_COMPONENTS + that create "subdirectories" in VC project files. In makefiles, + these "components" can be separately compiled but not linked, + so the feature is not used on any platform. In VC projects, + the extra level of folders makes source and header files + much harder to locate in the GUI environment. + +Wed Jan 5 14:34:12 UTC 2005 Johnny Willemsen + + * ace/Dev_Poll_Reactor.cpp: + Always include OS_NS_fcntl.h and OS_NS_unistd.h + +Wed Jan 5 14:28:12 UTC 2005 Johnny Willemsen + + * ace/RMCast/RMCast.{h,cpp,i}: + * ace/RMCast/RMCast_Worker.{h,cpp,i}: + * ace/RMCast/RMCast_Module_Factory.{h,cpp,i}: + * ace/RMCast/RMCast_Reassembly.{h,cpp,i}: + Removed i file, update h/cpp + + * ace/RMCast/*.cpp: + Updated module name to RMCast in ACE_RCSID tag + + * ace/RMCast/Makefile.am: + Updated + +Wed Jan 5 13:21:12 UTC 2005 Johnny Willemsen + + * bin/fuzz.pl: + Added zip files to the noncvs files that shouldn't be in the repo. + Added a new check that tests for inline files just containing empty + lines and c-style comments. These files shouldn't be in the repo + and need to get removed. There is an exclusion for TAO_IDL generated + files, we don't have an option yet to suppress the generation of + empty inline files so, we allow them for the time being. Thanks to + Don Hinton, Carlos O'Ryan and Martin Corino for their answers + on my questions. + +Wed Jan 5 09:44:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_dirent.inl (readdir_r): + For readdir_r we also have multiple versions on Solaris. Changed + the detection which version to use. Tested on Solaris 8, hopefully + fixes also the problems on Solaris 10 + +Wed Jan 5 09:30:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_Thread.inl (sigwait): + On Solaris it seems we have two versions of sigwait, one with one + argument, another with two arguments. Added a check to detect which + one to use and implemented both variants. I tested this on Solaris 8 + and there it works, is should fix the compile problems in the + Solaris 10 x86 isis build + +Wed Jan 5 09:10:12 UTC 2005 Johnny Willemsen + + * ace/Dev_Poll_Reactor.cpp: + Fixed includes for Solaris x86 isis build + +Tue Jan 4 17:38:23 2005 J.T. Conklin + + * Makefile.am: + * Release: + * configure.ac: + + Updated for removal of ace-config.in and ace-config.1.in. + + * ace-config.in: + * ace-config.1.in: + + Removed. + +Tue Jan 4 18:19:11 2005 Steve Huston + + * ace/ACE_export.h: Adjusted ACE_NAMESPACE_INLINE_FUNCTION to include + the extern storage class when inlining for non-Windows. This resolves + some warnings on Solaris/Forte7, and is (hopefully!) the nit + behind the mysterious intermittent compile failures on HP-UX aCC. + +Tue Jan 4 17:37:29 2005 Steve Huston + + * ace/ACE.h: Corrected t_rcv(), t_rcv_n_i() to be extern ACE_Export, + not ACE_NAMESPACE_INLINE_FUNCTION - the bodies are defined in the + .cpp file, and not inline. + +Tue Jan 4 17:22:14 2005 Steve Huston + + * ace/Signal.h: + * ace/TLI.h: + * ace/TLI_Stream.h: Include "ace/config-lite.h" before testing any ACE + config macros. + +Tue Jan 4 09:56:46 2005 J.T. Conklin + + * ace/TMCast/TMCast.mpc: + * bin/MakeProjectCreator/config/tmcast.mpb: + + Changed to inherit from exceptions.mpb and threads.mpb + + * bin/MakeProjectCreator/exceptions.mpb: + * bin/MakeProjectCreator/threads.mpb: + + New files, MPC base projects that require exceptions and threads + respecitively. Projects can inherit from these instead of using + an explicit requires +=, which can result in duplicate entries. + +Tue Jan 4 13:40:12 UTC 2005 Johnny Willemsen + + * etc/create-jace-release: + Removed this file + +Tue Jan 4 13:33:12 UTC 2005 Johnny Willemsen + + * ace/CLASSIX/*: + * tests/CLASSIX/*: + Removed all these files, they are old and not maintained for + a long time + + * psosim/*: + * java/*: + Removed the contents of these directories. These files where not + shipped as part of the release and are not used anymore. + + This fixes bugzilla bug [2015]. + +Tue Jan 4 08:07:12 UTC 2005 Johnny Willemsen + + * tests/Multicast_Test.cpp: + * tests/Multicast_Test_IPV6.cpp: + Fixed unused argument warnings + +Tue Jan 4 04:25:44 2005 Balachandran Natarajan + + * ace/OS_NS_sys_stat.inl: + * ace/OS_NS_sys_utsname.inl: + + Fixes for SUN Studio 9 builds on x86 platform. New builds will + be setup soon to track this on a day-today basis. + +Mon Jan 3 16:53:59 2005 J.T. Conklin + + * examples/TMCast/Member/Makefile.am: + + Update for ACE prefix being added to TMCast library name. + +Mon Jan 3 17:42:39 2005 Steve Huston + + * apps/JAWS/server/server.mpc: + * apps/JAWS3jaws3/jaws3.mpc: Added "avoids += uses_wchar" because + there are some sources in here that won't work with wide-char. + Furthermore, it's not immediately clear what the needs of the code + are with respect to char width. These could probably be fixed, + but may require (or be greatly helped by) some improvement to + ACE_Process_Options::setenv() to accept narrow-char args and/or + adjust string formatting to account for wide-char input. + + * examples/Connection/non_blocking/CPP-acceptor.cpp: The + ACE_DEFAULT_SERVER_PORT_STR is already defined in terms of + ACE_TEXT, so it shouldn't be wrapped in ACE_TEXT. + +Mon Jan 3 14:38:01 2005 J.T. Conklin + + * netsvcs/lib/Makefile.am: + + Install header files. + +Mon Jan 3 14:34:57 2005 J.T. Conklin + + * ace/Makefile.am: + * ace/QoS/Makefile.am: + * ace/RMCast/Makefile.am: + * ace/SSL/Makefile.am: + * ace/TMCast/Makefile.am: + + Generate pkg-config *.pc files from templates. + + * ace/ACE.pc.in: + * ace/QoS/ACE_QoS.pc.in: + * ace/RMCast/ACE_RMCast.pc.in: + * ace/SSL/ACE_SSL.pc.in: + * ace/TMCast/ACE_TMCast.pc.in: + + New files, pkg-config *.pc templates. + +Mon Jan 3 19:16:12 UTC 2005 Johnny Willemsen + + * ace/Dev_Poll_Reactor.{h,cpp}: + Changed the return type of the notify method to int to match the + declaration in the base class. Also added argument names to the + header file to help doxygen generate the documentation. Thanks to + Alexander Libman for + reporting this. + + * ace/Reactor_Impl.h: + Added argument names to the notify method so that doxygen can + generate better documentation + +Mon Jan 3 13:05:46 2005 Chad Elliott + + * bin/MakeProjectCreator/config/core.mpb: + + Added a setting for the template variable 'install_headers' which + is currently only used by the automake project type. + Coincidentally, I changed the case of INSTALL_THIS_TARGET to + lowercase. I personally prefer lowercase and since MPC is case + insensitive with respect to variable names, it causes no harm to + the borland project type which also uses that template variable. + +Mon Jan 3 10:56:59 2005 J.T. Conklin + + * ace/TMCast/Makefile.am: + * ace/TMCast/TMCast.mpc: + * bin/MakeProjectCreator/config/tmcast.mpb: + + Add ACE prefix to TMCast library name. + +Mon Jan 3 14:35:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_sunos5_sunc++.GNU: + Previously explicit was the default for templates, changed this + so that we use explicit for version 4.2 and 5.3 and otherwise + we default to implicit. Explicit templates are not usable anymore + for TAO, maybe these older compilers work for ACE, but we don't + know. + +Mon Jan 3 08:02:33 2005 Douglas C. Schmidt + + * examples/TMCast/Member: + * TMCast/*: Changed the use of TMCast to ACE_TMCast. Thanks to + J.T. Conklin for pointing out the inconsistency. + +Mon Jan 3 09:55:12 UTC 2005 Johnny Willemsen + + * tests/Thread_Manager_Test.cpp: + * tests/Conn_Test.cpp: + Fixed compile errors with VxWorks and ACE_HAS_PTHREADS + +Mon Jan 3 09:48:12 UTC 2005 Johnny Willemsen + + * ace/config-vxworks5.x.h: + Added include of vxCpu.h to get the CPU defines from VxWorks + so that we can determine if we use pentium or not + +Sun Jan 2 13:20:12 UTC 2005 Johnny Willemsen + + * tests/Thread_Manager_Test.cpp: + Fixed compile errors with VxWorks and ACE_HAS_PTHREADS + + * examples/Misc/test_trace.cpp: + Replaced variable with name _ by trace, this fixes compile warning + with VxWorks. + +Sun Jan 2 13:16:12 UTC 2005 Johnny Willemsen + + * tests/Conn_Test.cpp: + Fixed compile errors with VxWorks and ACE_HAS_PTHREADS + +Sun Jan 2 12:52:12 UTC 2005 Johnny Willemsen + + * ace/config-vxworks5.x.h: + When ACE_HAS_PTHREADS is defined, include the VxWorks file + types/vxTypesOld.h, the header file sys/stat.h uses types from + this file and is not according to the spec. A TSR has been + filed to WindRiver to get this corrected, until the time being + this is the easiest fix because on more places we got problems + and we only now have one fix that is easily to remove + +Sun Jan 2 12:18:12 UTC 2005 Johnny Willemsen + + * ace/Thread_Manager.cpp: + VxWorks deliver also a pthread implementation. This can be used by + defined ACE_HAS_PTHREADS, but when this is set, we don't need to use + some special VxWorks code. + +Sun Jan 2 11:27:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_stdlib.cpp: + Fixed compile problem when ACE_LACKS_MKTEMP is defined + +Sun Jan 2 10:40:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_client.mpb: + * bin/MakeProjectCreator/config/ciao_client_dnc.mpb: + Added ciaoversion as base project so that the version number + assigned to SOVERSION in the GNU makefiles is set to the CIAO + version and not to the TAO version + +Sun Jan 2 10:06:12 UTC 2005 Johnny Willemsen + + * tests/CDR_Array_Test.cpp: + * tests/CDR_File_Test.cpp: + * tests/Logging_Strategy_Test.cpp + Fixed deprecated conversion warnings + +Sun Jan 2 09:53:12 UTC 2005 Johnny Willemsen + + * ace/config-vxworks5.x.h: + Added, ACE_HAS_NONCONST_GETBY + +Sat Jan 1 22:53:41 2005 Balachandran Natarajan + + * bin/generate_rel_manpages: + + Fixed the doxygen revision number + + * bin/make_release: + + Fixed a typo. + +Sat Jan 1 18:46:12 UTC 2005 Johnny Willemsen + + Reverted the change below, the define doesn't seem to be the + correct one, it breaks on some platforms, have to investigate + this again + + * ace/OS_NS_stdlib.cpp: + Just include os_limits.h instead of limits directly + + * ace/os_include/os_limits.h: + Dependent on ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB include + limits or limits.h, just as we do for new + +Sat Jan 1 15:12:12 UTC 2005 Johnny Willemsen + + * ace/Service_Config.{h,cpp}: + Fixed compile problems in unicode builds + +Sat Jan 1 13:54:12 UTC 2005 Johnny Willemsen + + * ace/Service_Config.cpp: + Added include of OS_NS_unistd.h to get ACE_OS::getpid() + +Sat Jan 1 13:45:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_gnuwin32_common.GNU: + Added needed flags for wxWindows + +Sat Jan 1 13:37:12 UTC 2005 Johnny Willemsen + + * docs/ACE-guidelines.html: + Updated that ACE_OS is a namespace, not a class + +Sat Jan 1 13:26:12 UTC 2005 Johnny Willemsen + + * ACE-INSTALL.html: + Updated VxWorks instructions and some other small improvements + + * ace/Activation_Queue.h: + * ace/Active_Map_Manager.h: + * ace/Arg_Shifter.h: + * ace/Lib_Find.h: + * ace/Local_Memory_Pool.h: + * ace/Pipe.h: + * ace/Timer_List_T.h: + * ace/Timer_Hash_T.h: + Doxygen improvements + + * ace/Async_Acceptor.cpp: + * ace/WIN32_Asynch_IO.cpp: + Just check for msvc, not for _MSC_VER > 1020, that version is really + ancient and we always have a bigger version number + + * ace/config-all.h: + When ACE_HAS_VERBOSE_NOTSUP is defined, we use ACE_OS::fprintf, so + always include OS_NS_stdio.h, it doesn't work to include cstdio. This + fixes compile problems with VxWorks when ACE_HAS_VERBOSE_NOTSUP is + defined. Also there is no need to include vxWorks.h for VxWorks. + + * ace/Configuration.cpp (create_index): + Improved error message to make clear something went wrong + + * ace/Dirent.cpp: + * ace/OS_Memory.cpp: + * ace/OS_TLI.cpp: + Removed construction to silence the HP aCC compiler, empty cpp + files are used a lot in the ACE_OS files and there it is not needed, + so zap it here. + + * ace/MMAP_Memory_Pool.h: + Define private copy constructor and assignment operator for + ACE_MMAP_Memory_Pool_Options. This class contains pointers + it is not allowed to copy them, so prevent that. + + * ace/Naming_Context.cpp: + Replaced ACE cast macro with the C++ version. Just don't use argv[0] + without checking argc in the parse_args method. Under VxWorks it can + happen that argc and argv are 0, so reading argv[0] returns random + memory. When argc = 0, then we just don't have a program name + + * ace/OS_Errno.h: + Prevent copying of ACE_Errno_Guard + + * ace/UUID.cpp: + Added missing \n in several ACE_DEBUG statements + + * ace/OS_Log_Msg_Attributes.h: + Prevent copying of ACE_OS_Log_Msg_Attributes + + * ace/config-lite.h: + VxWorks deliver also a pthread implementation. This can be used by + defined ACE_HAS_PTHREADS, but when this is set, we don't need some + special VxWorks types, so changed some checks for VXWORKS to + VXWORKS && !defined ACE_HAS_PTHREADS + + * ace/OS_NS_stropts.inl: + * ace/OS_NS_arpa_inet.inl: + * ace/Service_Object.cpp: + * ace/String_Base.cpp: + * ace/OS_NS_stdlib.inl: + Replaced c-style cast with C++ cast + + * ace/OS_NS_stdio.cpp: + * ace/OS_NS_time.cpp: + * ace/Pipe.cpp: + * tests/Max_Default_Port_Test.cpp: + * tests/Time_Value_Test.cpp: + Replaced ACE cast macros with C++ casts + + * ace/Default_Constants.h: + Added ACE_LIB_TEXT to ACE_DEFAULT_SERVER_PORT_STR to fix compile + errors in Unicode builds + + * ace/OS_Memory.h: + Removed not needed check for borland + + * ace/OS_NS_sys_wait.inl: + Added ACE_LACKS_WAIT and ACE_LACKS_WAITPID, these defines are set + in the needed config files to determine if the OS has wait and + waitpid + + * ace/config-chorus.h: + Added ACE_LACKS_WAIT + + * ace/config-win32-common.h: + Added ACE_LACKS_WAIT, ACE_LACKS_SOCKETPAIR and ACE_LACKS_DUP2 + + * ace/OS_NS_signal.h: + Removed commented out typedefs + + * ace/OS_NS_sys_socket.inl: + Replaced C style cast with C++ const_cast and in socketpair + just only check for ACE_LACKS_SOCKETPAIR, this define is now + also set for win32 + + * ace/OS_NS_unistd.inl (dup2): + Check for ACE_LACKS_DUP2 instead for specific OS defines + + * ace/Time_Value.h: + Prevent copying of ACE_Countdown_Time + + * ace/config-g++-common.h: + Cleaned up this file, removed code for pre 2.8 versions of gcc, these + are already dropped with the x.4 release. Makes maintenance a lot + easier. + + * ace/config-vxworks5.x.h: + Added several defines, detect pentium or not on the CPU define that + is set. Make several defines dependent on ACE_HAS_PTHREADS, when this + is set, we want to use the pthread library of VxWorks. + + * ace/config-psosim-g++.h: + * ace/config-psos-tm.h: + * ace/config-psos-diab.h: + * ace/config-psos-diab-ppc.h: + * ace/config-psos-diab-mips.h: + Added ACE_LACKS_WAIT, ACE_LACKS_WAITPID and ACE_LACKS_DUP2 + + * ace/config-integritySCA.h: + Added ACE_LACKS_WAIT, ACE_LACKS_WAITPID + + * ace/OS_NS_time.inl: + VxWorks defines asctime_r and ctime_r but with a 3rd size_t*, + this is not according to the spec, so a new define + ACE_HAS_SIZET_PTR_ASCTIME_R_AND_CTIME_R is added on which we + can determine to use this variant of asctime_r and ctime_r. + A support request to WindRiver has been make to get these + methods spec compliant in newer versions of VxWorks. + + * ace/Object_Manager_Base.{h,cpp}: + Replaced ACE cast macros with C++ casts, use unsigned int instaead + of u_int because u_int is not defined with VxWorks when using + the pthread support + + * ace/README: + Documented the new defines + + * ace/OS_NS_string.{h,cpp,inl}: + * ace/config-doxygen.h: + * configure.ac: + Removed ACE_LACKS_STRCHR and ACE_LACKS_STRCSPN and the related + code, these defines aren't set in any config file so the emulation + is not needed anymore + + * ace/Log_Msg.cpp: + When a buffer overflow has occured, just don't log anything anymore, + when for example a backend is used, the pointer to that backend + can also be corrupted. So, just only log when there is no overflow. + + * ace/SOCK_Dgram_Bcast.cpp: + Replaced ACE cast with C++ cast, also handle VxWorks specially and + when setsockopt fails, use ACE_ERROR_RETURN to return -1 and log an + error message so that the log explains what goes wrong. + + * ace/os_include/os_time.h: + VxWorks doesn't have 2 arg ctime_r and asctime_r + + * ace/os_include/os_signal.h: + Don't include sigLib.h with VxWorks when ACE_HAS_PTHREADS is defined + + * ace/Malloc_T.h: + Moved ACE_Malloc_Lock_Adapter_T to the end of this file to prevent + compile problems with VxWorks. + + * ace/OS_NS_sys_shm.cpp: + Removed some code that was already marked as not used. + + * ace/OS_NS_Thread.{h,cpp,inl}: + Removed old code that was guarded using ifdef 0. Don't use + ACE_OS_TRACE in thr_getspecific_native because this method is + used in the trace functionality and are tracing again in this + macro, so we get a stack overflow. Changed several checks for + VxWorks to include ACE_HAS_PTHREADS. Made several methods + smaller by combining includes and reducing duplicated code. + Replaced ACE casts with C++ casts. + + * ace/OS_NS_stdlib.cpp: + Just include os_limits.h instead of limits directly + + * ace/os_include/os_limits.h: + Dependent on ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB include + limits or limits.h, just as we do for new + + * ace/Unbounded_Set.{h,cpp}: + Doxygen update and return a Unbounded_Set& from the operator= + to allow chaining. + + * examples/Misc/test_trace.cpp: + Replaced variable with name _ by trace, this fixes compile warning + with VxWorks. + + * tests/UPIPE_SAP_Test.cpp: + * tests/Conn_Test.cpp: + Removed explicit template instantiations for Borland C++, we don't use + that. + + * tests/Cache_Map_Manager_Test.cpp: + * tests/Cached_Accept_Conn_Test.cpp: + * tests/Cached_Conn_Test.cpp: + * tests/CDR_Array_Test.cpp: + * tests/CDR_File_Test.cpp: + * tests/CDR_Test.cpp: + * tests/Hash_Map_Bucket_Iterator_Test.cpp: + * tests/Logging_Strategy_Test.cpp: + * tests/MEM_Stream_Test.cpp: + * tests/Multicast_Test.cpp: + * tests/Multicast_Test_IPV6.cpp: + * tests/SOCK_Dgram_Bcast_Test.cpp: + Replaced argv[0] with fixed program name, because argc could be zero + with VxWorks and then we get a crash when using argv[0]. + + * tests/Config_Test.cpp: + Logged an error if tests.reg can't be opened. + + * tests/FIFO_Test.cpp: + Only run this test when ACE_LACKS_MKFIFO is not defined, other + platforms then win32 also can lack this. Replaced ACE casts with + C++ casts. + + * tests/Log_Msg_Test.cpp: + Don't try to overflow the log buffer with VxWorks, this will result + in a crash and then the rest of this test is not done. + + * tests/MT_Reactor_Timer_Test.cpp: + Rewrote this test a little to use ACE_ERROR instead of ACE_ASSERT, + under VxWorks the log files are only written at the moment the + tests ends normally and with the ACE_ASSERT we just didn't get + a log file, with the ACE_ERROR we get one and can look better why + it fails under VxWorks. + + * tests/Signal_Test.cpp: + Replace ACE casts with C++ casts and changed the return types of the + thread functions to fix compile errors with VxWorks. + + * tests/run_test.lst: + Enabled some more tests for VxWorks. + + * tests/run_test.pl: + Added .out to the program names generated in the VxWorks script + +Sat Jan 1 00:00:00 2005 Douglas C. Schmidt + + * Happy New Year!!! + +Fri Dec 31 15:23:58 2004 J.T. Conklin + + * ace/Service_Config.cpp: + * ace/Service_Config.h: + + Added support for -p command line argument, which specifies + a filename to write the process id. + +Thu Dec 30 13:21:37 2004 Chris Cleeland + + * ACE version 5.4.3 released. + +Local Variables: +add-log-time-format: current-time-string +End: diff --git a/ACE/ChangeLogs/ChangeLog-05b b/ACE/ChangeLogs/ChangeLog-05b new file mode 100644 index 00000000000..15f3ed61bea --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-05b @@ -0,0 +1,2815 @@ +Fri Aug 5 13:19:33 2005 Simon McQueen + + * Release: + + Remove tagging of man/* files. + +Thu Aug 4 16:10:24 BST 2005 Donald Sharp + + * tests/Array_Map_Test.cpp: + Some compilers, like SunCC5.5 on Solaris, do not delete their + temporaries in expression scope. Placing the expressions in an + inner block ensures that the reference count is as expected + +Wed Aug 03 09:35:12 UTC 2005 Martin Corino + + * tests/Process_Manual_Event_Test.cpp: + Added additional tests for lacking PSHARED support. + +Sat Jul 30 10:38:12 UTC 2005 Johnny Willemsen + + * bin/tao_other_tests.lst: + Added missing semi colon for CosEvent basic test + +Fri Jul 29 14:25:12 2005 Steve Huston + + * ace/config-aix-5.x.h: Disable ACE_HAS_POSIX_SEM if the Posix + flags indicate its presence but _XOPEN_SOURCE is not >= 500. + + * tests/run_test.pl: When looking for sub-log files, match the program + name only at the start. Prevents finding, for example, + Process_Manual_Event_Test-child.log when looking for + Manual_Event_Test-*.log. + +Fri Jul 29 14:26:37 2005 Simon McQueen + + * bin/tao_other_tests.lst: + + Scheduled TAO/orbsvcs/tests/CosEvent/Basic/run_test.pl to be + run on all not minimum or single threaded builds. + +Fri Jul 29 09:28:12 UTC 2005 Johnny Willemsen + + * apps/JAWS2/JAWS/Filecache.cpp: + * apps/JAWS2/JAWS/IO.cpp: + * apps/JAWS2/JAWS/IO_Handler.cpp: + Fixed compile errors when building with Borland C++. I have created + an MPC file but find it too risky to add that just before the + release, will do that when the release is out. + + * ace/Global_Macros.h: + When ACE_EXPLICIT_TEMPLATE_DESTRUCTOR_TAKES_ARGS is defined, define + a special version of ACE_DES_FREE_TEMPLATE3 and + ACE_DES_FREE_TEMPLATE4 just as we do for ACE_DES_FREE_TEMPLATE and + ACE_DES_FREE_TEMPLATE2. + + Thanks to Olivier Gu�in + for reporting this. + +Fri Jul 29 07:18:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_cray.GNU: + * include/makeinclude/platform_freebsd.GNU: + * include/makeinclude/platform_hpux.GNU: + * include/makeinclude/platform_hpux_gcc.GNU: + * include/makeinclude/platform_irix5.3_g++.GNU: + * include/makeinclude/platform_irix6.x_g++.GNU: + * include/makeinclude/platform_irix6.x_kcc.GNU: + * include/makeinclude/platform_linux_borland.GNU: + * include/makeinclude/platform_m88k.GNU: + * include/makeinclude/platform_mvs.GNU: + * include/makeinclude/platform_netbsd.GNU: + * include/makeinclude/platform_openbsd.GNU: + * include/makeinclude/platform_osf1_3.2_cxx.GNU: + * include/makeinclude/platform_osf1_4.x_kcc.GNU: + * include/makeinclude/platform_sco5.0.0-CC-fsu-pthread.GNU: + * include/makeinclude/platform_sco5.0.0-fsu-pthread.GNU: + * include/makeinclude/platform_sco5.0.0-mit-pthread.GNU: + * include/makeinclude/platform_sco5.0.0-nothread.GNU: + * include/makeinclude/platform_tandem.GNU: + * include/makeinclude/platform_vxworks5.5.x.GNU: + * include/makeinclude/platform_win32_interix.GNU: + Updated location for libraries from $ACE_ROOT/ace to + $ACE_ROOT/lib. Thanks to Ian Zagorskih + for reporting this. + This fixes bugzilla 2202 + +Thu Jul 28 13:59:11 2005 Simon McQueen + + * bin/tao_other_tests.lst: + + Added !MINIMUM to Bug_1630_Regression test. It needs the IFR. + +Thu Jul 28 01:46:40 2005 Ossama Othman + + * ace/Cache_Map_Manager_T.cpp: + * ace/Cache_Map_Manager_T.inl: + * ace/MEM_SAP.cpp: + * ace/MEM_SAP.inl: + * ace/Map_T.cpp: + * ace/Map_T.inl: + * ace/Signal.cpp: + * ace/Signal.inl: + + Moved virtual destructors in exported classes out of line. + Addresses RTTI problems when the using g++ 4.0 hidden visibility + for inline functions feature. + +Thu Jul 28 00:28:46 2005 Ossama Othman + + * ace/Array_Map.cpp: + * ace/Array_Map.h: + * ace/Array_Map.inl: + + Added third equality functor template parameter. Defaults to + std::equal_to<> if unspecified. Necessary for cases where + operator==() is not suitable or available for a given key type. + + (erase): + + Explicitly destroy the tail element by assigning a default + constructed value_type instance to it. Prevents duplicate + instances of erase()d elements from existing. Some applications + may assume that erased elements no longer exist. This + essentially disables the lazy destruction behavior of + ACE_Array_Map. Note that this change also applies to the case + of a map of size 1. + + * ace/Refcountable.cpp: + * ace/Refcountable.inl: + + Moved ~ACE_Refcountable() virtual destructor out of line. + Addresses RTTI issues when g++ 4.0 hidden visibility of inlined + functions is enabled. + + * ace/config-lite.h: + + Disable use of ACE_RCSIDs by default. Most users never need to + determine the RCS ID of a given object file in an ACE-based + binary so optimize for the common case. Also reduces + footprint. + + * tests/Array_Map_Test.cpp: + + Added reference count test to verify that the number of + references/copies of a given data element drop by the same + amount as was increased during insertion. + +Wed Jul 27 16:33:46 2005 Gary Maxey + + * ace/config-tandem-nsk-mips-v3.h: + + Add #define for ACE_ANY_OPS_USE_NAMESPACE + +Mon Jul 25 19:25:12 UTC 2005 Johnny Willemsen + + * tests/Naming_Test.cpp: + Initialise pointer with 0 + +Mon Jul 25 15:31:12 UTC 2005 Johnny Willemsen + + * ace/Timer_Hash_T.cpp: + Initialise some pointers with 0 + + * ace/Refcountable.h: + Removed some empty doxygen tags + + * ace/Naming_Context.cpp: + Removed not needed ACE_UNUSED_ARG + +Sat Jul 23 16:36:36 2005 Jaiganesh B + + * bin/ciao_tests.lst: + + enabled running CIAO NodeApplicationTest again. + +Fri Jul 22 16:31:29 2005 Steve Huston + + * ace/Basic_Types.h: The change from: + Fri Jul 8 15:42:18 2005 Steve Huston + turned a previous warning into an error on newer g++ versions. + Instead, moved the __hi_lo struct definition out of the + anonymous union and renamed it to not be a compiler-private name + (with 2 leading underscores). This should resolve all the + issues. Thanks to Simon Massey for figuring this out. + +Fri Jul 22 11:13:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_server_dnc.mpb: + Add naming as base project, CIAO_DnC_Server has this + also + +Fri Jul 22 09:30:00 UTC 2005 Simon Massey + + * tests/run_test.lst: + Don't run Process_Manual_Event_Test on HPUX + +Thu Jul 21 10:41:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Don't run Bug_2174_Regression in a minimum corba build + +Thu Jul 21 09:15:12 UTC 2005 Johnny Willemsen + + * ace/Atomic_Op_T.h: + Use deprecate tag for deprecated methods + +Thu Jul 21 09:24:58 2005 Simon McQueen + + * bin/ciao_tests.lst: + + Descheduled the 3 TAO/CIAO/DAnCE/tests/NodeApplicationTest + tests. They fail and there have been no responses to + requests that they be fixed. + +Wed Jul 20 06:45:00 2005 J.T. Conklin + + * bin/msvc_static_order.lst: + + Added Ds{Event,Notify}LogAdmin_{IDL,Skel,Serv} --- just to + be safe. + +Wed Jul 20 09:31:12 UTC 2005 Johnny Willemsen + + * protocols/ace/RMCast/Makefile.am: + Added new files + +Wed Jul 20 08:38:12 UTC 2005 Johnny Willemsen + + * bin/auto_run_tests.pl: + Check for result != 0 instead of result > 0. It seems that when + a run_test.pl has been added from a windows box that it sometimes + doesn't get execute permission and then the script can't be + executed on Unix systems. The return value is then -1 and this + wasn't detected by the scripts + +Wed Jul 20 07:55:12 UTC 2005 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added DsLogAdmin_IDL + +Tue Jul 19 14:24:47 2005 Gary Maxey + + * bin/PerlACE/Process_Unix.pm: + + Append command line arguments based on ACE_RUNTEST_ARGS + environment variable. + + * ace/config-tandem-nsk-mips-v3.h: + + Adjust platform specific macros + +Tue Jul 19 19:09:12 UTC 2005 Johnny Willemsen + + * ace/Log_Record.cpp: + Reverted part of the change below. Not all platforms have snprintf, + just use sprintf, all platforms have that. Fixes problems with + VxWorks + Thu Jul 14 12:23:12 UTC 2005 Johnny Willemsen + +Tue Jul 19 14:08:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added new Register_Initial_References test. This will fail in + all builds, it seems we have some bugs to fix + +Tue Jul 19 12:37:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added new recursive ORBInitializer test + +Tue Jul 19 11:49:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Enable Bug_2088, rewrote this test to test the current functionality + which matches the draft 3.1 spec. The Corba 3.0.3 seems to be not + usable. + +Tue Jul 19 10:28:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_fcntl.cpp: + * ace/OS_NS_sys_mman.inl: + When returning an ACE_HANDLE return ACE_INVALID_HANDLE instead + of -1 as error + +Mon Jul 18 18:21:20 2005 Steve Huston + + * NEWS: Added ACE_OS::closesocket() and Solaris 10 notes. + +Mon Jul 18 12:11:39 2005 J.T. Conklin + + * bin/msvc_static_order.lst: + + Add CosNaming_IDL, CosTrading_IDL, and CosNotification_IDL + projects to list. + +Mon Jul 18 11:42:09 2005 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Revived the old style where each GNUmakefile has individual + targets that contain the necessary dependencies. To utilize this + you must set the MPC_GNUACE_NAMED_TARGETS environment variable. + +Mon Jul 18 09:08:01 2005 Gary Maxey + + * bin/tao_orb_tests.lst: + + Added OBV/ValueBox the list of tests. This is a new test + to exercise boxed value types. + +Mon Jul 18 15:51:04 2005 Simon McQueen + + * ace/OS_NS_Thread.cpp: + + Removed unreachable statements identified by HP non stop + MIPS build warnings. + +Mon Jul 18 09:21:14 2005 Phil Mesnier + + * NEWS: + + Took out TAO-specific comments. + +Mon Jul 18 13:44:12 UTC 2005 Johnny Willemsen + + * ace/Mem_Map.cpp: + + Reverted the change below, it causes problems on AIX and Solaris. It + seems that on AIX we now use ACE_OS::open for shared memory, with the + change below we use ACE_OS::shm_open but this fails for strange + reasons and I have no idea what the problem is at this moment. So + revert this until Martin is back from his vacation + + Tue Jul 05 21:40:12 UTC 2005 Martin Corino + Changed to consistently use ACE_OS::shm_open/ACE_OS::shm_unlink. + +Mon Jul 18 13:31:12 UTC 2005 Johnny Willemsen + + * html/index.html: + Update link for DAnCE + +Mon Jul 18 15:02:58 2005 Boris Kolpackov + + * protocols/ace/RMCast/Acknowledge.cpp: + * protocols/ace/RMCast/Fragment.cpp: + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Reassemble.cpp: + + Fixed a bunch of warnings. + +Mon Jul 18 08:00:35 2005 Phil Mesnier + + * NEWS: + + Added comments regarding TAG_ALTERNATE_IIOP_ADDRESS and + refactored codeset negotiation support. + +Mon Jul 18 10:25:12 UTC 2005 Johnny Willemsen + + * ace/MMAP_Memory_Pool.cpp (init_acquire): + Added class name to the error messages and print the method + name. + + * ace/SString.cpp: + Initialise pointers with 0 + +Mon Jul 18 11:33:23 2005 Boris Kolpackov + + * NEWS: + + Updated with the latest achievements in RMCast. + +Mon Jul 18 08:18:12 UTC 2005 Johnny Willemsen + + * bin/make_release: + Removed exclude of asnmp.mwc, this file has been zapped + +Fri Jul 15 16:35:37 2005 Phil Mesnier + + * bin/MakeProjectCreator/config/global.features: + * bin/MakeProjectCreator/config/negotiate_codesets.mpb: + * bin/MakeProjectCreator/config/taoclient.mpb: + * bin/MakeProjectCreator/config/taoserver.mpb: + + Added a new feature, negotiate_codesets. Disabled by default, + but when enabled in default.features or on the mpc/mwc command + line adds TAO_Codeset to the project's libs list. Dynamically + linked applications do not need to do anything, the libary will + be dynamically loaded if needed by the ORB. Static applications + must enable this feature. Merely enabling is not sufficient, to + actually make use of the codeset code, they must also include + tao/Codeset/Codeset.h somewhere in their application. Enabling + the mpc feature without including the header will not cause any + code to be statically linked. Enabling the feature with dynamic + applications will add a dependency on the TAO_Codeset library + regardless of the use of the code. + +Fri Jul 15 08:04:12 UTC 2005 Johnny Willemsen + + * bin/make_release: + Also exclude ASNMP/asnmp.mwc when generating the em3 project files. + Thanks to Sam Mesh for reporting + this. This fixes bugzilla bug 2190. + +Thu Jul 14 12:47:12 UTC 2005 Johnny Willemsen + + * ace/Log_Record.cpp: + Fixed compile error in previous committed caused when merging + changes from one system to another + +Thu Jul 14 12:23:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_stdio.cpp (sprintf wchar): + ULONG_MAX was passed, this caused vswprintf to return always -1 + because ULONG_MAX is of course really large on a 64bit system. + Pass 4096 instead, just as done with the other vswprintf in + OS_NS_stdio.inl. + + * ace/Log_Record.cpp: + Use snprintf because we know the sizes of the buffer, this way + we don't call the method above that caused problems on 64bit + systems. This fixes bugzilla 2176. + +Thu Jul 14 09:31:55 2005 Boris Kolpackov + + * protocols/ace/RMCast/Flow.cpp: + + Fixed fuzz error over math.h inclusion. + +Wed Jul 13 22:12:12 UTC 2005 Gan Deng + + * etc/ciao_DAnCE.doxygen + + Added "RECURSIVE=YES" so source files could be found correctly + Also added excluded path option for CIAO examples and tests. + +Wed Jul 13 17:10:45 2005 Phil Mesnier + + * bin/MakeProjectCreator/config/codeset.mpb: + + A new base project for use when creating codeset translators or + any other code that must depend on the new library, TAO_Codeset. + +Wed Jul 13 12:42:57 2005 Chad Elliott + + * bin/tao_other_tests.lst: + + Due to the way that the ORB is coded such that it does not require + the IFR_Client library at link time, the InterfaceRepo/Application + test can not run on static builds (even though the client has the + IFR_Client library linked in). + +Wed Jul 13 12:28:12 UTC 2005 Johnny Willemsen + + * tests/Process_Semaphore_Test.cpp: + Fixed compile error in previous change + +Wed Jul 13 07:56:12 UTC 2005 Johnny Willemsen + + * tests/Process_Semaphore_Test.cpp: + Only test timeouts when ACE_HAS_POSIX_SEM_TIMEOUT is defined + +Wed Jul 13 07:26:12 UTC 2005 Johnny Willemsen + + * ace/config-sunos5.5.h: + Added include of config-posix.h, let this file try to sort out + which posix parts Sun delivers + + * ace/config-sunos5.6.h: + Sun 5.6 incorrectly reports that it has shm_open + +Wed Jul 13 07:23:12 UTC 2005 Johnny Willemsen + + * ace/Process_Semaphore.cpp: + Removed commented out explicit template instantiations + + * ace/Containers_T.h: + Small doxygen fix + +Tue Jul 12 22:59:12 UTC 2005 Gan Deng + + * html/index.html: + + Fixed a typo which was introduced in this HTML file for + my earlier checkin. + +Tue Jul 12 16:17:38 2005 Douglas C. Schmidt t + + * Updated all the COPYING files to reflect the revised DOC + software open-source license. Thanks to Angela Ziegenhorn + for these modifications. + +Tue Jul 12 18:00:12 UTC 2005 Johnny Willemsen + + * ace/Thread_Manager.cpp (remove_thr_all): + Don't just delete each Thread_Descriptor, but call remove_thr + for each Thread_Descriptor, this method will add the descriptor + to the freelist and handle all other cleanup actions. Fixes + some invalid reads we found in some RTCorba tests + +Tue Jul 12 17:15:00 2005 Boris Kolpackov + + * protocols/ace/RMCast/Flow.cpp: + * protocols/ace/RMCast/Protocol.h: + + Added missing includes. + +Tue Jul 12 14:46:53 2005 Boris Kolpackov + + * protocols/ace/RMCast/Parameters.h: + + Forgot to add this file for Mon Jul 11 20:08:51 2005. + +Mon Jul 11 12:51:12 UTC 2005 Johnny Willemsen + + * ace/config-win32-msvc-8.h: + Only define ACE_HAS_SIG_ATOMIC_T when not building for WinCE. + Thanks to Mitscher Dubreus for reporting + this. + +Mon Jul 11 12:18:12 UTC 2005 Johnny Willemsen + + * ace/Thread_Manager.inl: + Initialise pointer with 0 + +Mon Jul 11 20:08:51 2005 Boris Kolpackov + + * protocols/ace/RMCast/Flow.cpp: + * protocols/ace/RMCast/Flow.h: + + Implemented flow control stack element. + + * protocols/ace/RMCast/Acknowledge.cpp: + * protocols/ace/RMCast/Acknowledge.h: + * protocols/ace/RMCast/Fragment.cpp: + * protocols/ace/RMCast/Fragment.h: + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Link.h: + * protocols/ace/RMCast/Protocol.h: + * protocols/ace/RMCast/Reassemble.cpp: + * protocols/ace/RMCast/Reassemble.h: + * protocols/ace/RMCast/Retransmit.cpp: + * protocols/ace/RMCast/Retransmit.h: + * protocols/ace/RMCast/Socket.cpp: + * protocols/ace/RMCast/Socket.h: + + Made protocol parameters configurable on a per-instance + basis. + + * protocols/examples/RMCast/Send_Msg/Protocol.h: + * protocols/examples/RMCast/Send_Msg/Receiver.cpp: + + Made receiver print throughput information. + +Mon Jul 11 08:41:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_Thread.h: + Doxygen improvements + +Mon Jul 11 08:10:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug_2174_Regression to the list of tests. It will fail + until the fix for this bug is in the archive + +Sun Jul 10 23:24:12 UTC 2005 Gan Deng + + * etc/DAnCE.doxygen: + + Added doxygen configuration file for DAnCE. + +Sat Jul 9 06:24:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_Thread.h: + Doxygen improvements + +Sat Jul 9 06:18:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_Thread.inl (thr_cancel): + Fixed VxWorks implementation. Thanks to Abhijit Sachdev for motivating this fix. + +Fri Jul 8 15:42:18 2005 Steve Huston + + * ace/Array_Map.h: Extended the range of Sun C++ compilers not + providing a fully standards-compliant STL to include C++ 5.7 + (Studio 10). To include a compliant STL would break backward + binary compatibility with C++ 5.0 - 5.6, so Sun won't (yet) + do it. They do, however, include Stlport 4 with C++ 5.7. You can + enable this by building ACE with stlport=1. + + * ace/Basic_Types.h (ACE_ULongLong): Added a name to the anonymous + struct declared in the anonymous union. Silences a warning from + Sun Studio 10. + Added __amd64 to the "little endian" machine indicators. Corrects + this check for Solaris 10 x86. + + * ace/config-sunos5.10.h: Noted that Studio 10 (C++ 5.7) works + as well. + + * include/makeinclude/platform_sunos5_sunc++.GNU: If -fast is required, + be sure it goes to the left of any -xarch options on the command + line, else it'll override -xarch. Also, added support for building + with stlport=1 on Studio 10 (C++ 5.7). + + * tests/CDR_Array_Test.cpp: When saying "Data OK", print type + name (%s), not truncated pointer (%d). + +Fri Jul 8 12:37:15 2005 Douglas C. Schmidt + + * ace/QoS/SOCK_Dgram_Mcast_QoS.cpp (subscribe): Added checks + to guard against cases where the qos_session is NULL. Thanks to + Dom Monteiro and Yamuna for + isolating the problem. + +Fri Jul 8 09:52:02 2005 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + + Utilize the MakeProjectBase to minimize the code in this module. + +Fri Jul 8 11:19:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_Thread.inl (thr_cancel): + Added implementation for VxWorks. + +Fri Jul 8 08:22:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_string.cpp: + Added include of OS_NS_stdio.h when ACE_LACKS_STRERROR is not + defined + +Thu Jul 7 18:11:29 2005 Steve Huston + + * configure.ac: + * ace/README: + * ace/config-WinCE.h: + * ace/config-mvs.h: + * ace/config-openvms.h: + * ace/config-psos-diab.h: + * ace/config-psos-diab-mips.h: + * ace/config-psos-diab-ppc.h: + * ace/config-psos-tm.h: + * ace/config-psosim-g++.h: + * ace/config-rtems.h: + * ace/config-sunos5.7.h: + * ace/config-tandem-nsk-mips-v2.h: + * ace/config-tandem-nsk-mips-v3.h: + * ace/config-vxworks5.x.h: + * ace/config-win32-interix.h: + * ace/config-win32-visualage.h: + * ace/OS_NS_string.{h cpp}: + * m4/config_h.m4: Removed all references to sys_nerr and + ACE_LACKS_SYS_NERR. These are old, hacky ways to check things + that can be done better (see below). + + * ace/OS_NS_string.{h cpp} (strerror): Check for an invalid errnum + value by checking the return value of strerror(); supply a + "Unknown error %d" message if it's bad, and set errno to EINVAL. + + * ace/Log_Msg.cpp (log): Use ACE_OS::strerror() and its new return + value to check for the need to try another way to format 'p' and + 'm' messages. Windows is now the only special case. + + * ace/Select_Reactor_Base.cpp: Include "Timer_Queue.h" instead of + "Timer_Heap.h" to get the appropriate definitions and inclusion of + other needed headers; in this case, Recursive_Thread_Mutex.h. Fixes + compile errors on Solaris 10. + + * include/makeinclude/platform_sunos5_sunc++.GNU: Changed -xarch= from + v9 to generic64 when using "buildbits=64" on Sun Studio 10 + (C++ 5.7). This works for both Sparc and x86 architectures. + +Thu Jul 7 17:24:21 2005 Simon McQueen + + * bin/tao_orb_tests.lst: + + Scheduled regression test for bugzilla #2183. + +Thu Jul 7 09:27:56 2005 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Modified the template code to avoid generating lines that end in + spaces. + +Thu Jul 7 09:11:23 2005 Douglas C. Schmidt + + * ace/Message_Block.cpp: Changed the order of the #includes + to work around a problem when ACE is used with STLport. Thanks + to Alvin Lee for reporting this. This fixes another part of + bugid 2185. + +Tue Jul 5 22:05:19 2005 Douglas C. Schmidt + + * ace/DLL.cpp: Fixed a problem with ACE_DLL::close() where + the dll_name_ might not be deleted if dll_handle_ was 0. Thanks + to Alvin Lee for reporting this. This + fixes the first part of bugid 2185. + +Tue Jul 5 18:13:29 2005 Steve Huston + + * ACE-INSTALL.html: Removed Windows CE from the platforms Riverace + supports and added links to some Riverace pages. + +Tue Jul 05 21:40:12 UTC 2005 Martin Corino + + * ace/Mem_Map.cpp: + Changed to consistently use ACE_OS::shm_open/ACE_OS::shm_unlink. + +Tue Jul 05 21:15:12 UTC 2005 Martin Corino + + * ace/OS_NS_Thread{.h .inl .cpp}: + Fixes for compile problems in MACOS_X_Panther build. + + Outlined ACE_OS::cond_init() to gain some footprint reduction. + +Tue Jul 5 18:17:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_netdb.cpp (getmacaddress): Some layout fixes and + also fixed a handle leak in the Sun part. Thanks to + for reportint this. This fixes + bugid 1875 + +Tue Jul 5 08:30:07 2005 Douglas C. Schmidt + + * ace/OS_NS_netdb.cpp (getmacaddress): Call close() to avoid + a handle leak. Thanks to W.M. van den Boogaard for reporting this fix. This fixes + bugid 2182. + +Mon Jul 04 21:08:12 UTC 2005 Martin Corino + + * ace/INET_Addr.h: + * ace/INET_Addr.cpp: + Added support for specifying interface ids for IPv6 Link Local + addresses either as part of the address ('%') + separately through ACE_INET_Address::set_interface(). + Straightened out differences between Windows and Linux. + ACE_INET_Address::get_host_addr() now returns '%' formatted address when appropriate both on Windows + (natively) and Linux (ACE). Thanks to Srikanth Gopal + for reporting this problem. + +Mon Jul 4 04:21:53 2005 Ossama Othman + + * ace/Array_Map.h (ACE_Array_Map): + + Work around non-standard compliant Sun C++ + std::reverse_iterator<> template arguments. Define a typedef + specific to Sun C++ 5.5 or earlier. + +Sun Jul 3 14:59:25 2005 J.T. Conklin + + * examples/APG/Config/Makefile.am: + + Regenerate. + +Sun Jul 03 18:40:12 UTC 2005 Martin Corino + + * include/makeinclude/rules.lib.GNU: + Addition for VxWorks shared lib build. + + * include/makeinclude/platform_vxworks5.5.x.GNU: + Some cleanup and changes for shared lib builds. + +Fri Jul 01 14:40:25 2005 Gary Maxey + + * ace/config-tandem-nsk-mips-v3.h: + * ace/config-tandem-nsk-mips-v2.h: + Defined platform specific format specifiers for 64 bit integers + +Fri Jul 1 12:52:12 UTC 2005 Johnny Willemsen + + * ace/config-doxygen.h: + Added ACE_HAS_IPV6 + +Fri Jul 1 11:25:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/interceptors.mpb + Don't use pi as base lib. + + * bin/MakeProjectCreator/config/iorinterceptor.mpb + * bin/MakeProjectCreator/config/loadbalancing.mpb + * bin/MakeProjectCreator/config/rtscheduling.mpb: + * bin/MakeProjectCreator/config/fault_tolerance.mpb + * bin/MakeProjectCreator/config/ftclientorb.mpb + Added pi and pi_server as base projects when needed + +Fri Jul 1 10:05:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Added support for StackReserveSize and StackCommitSize + template variables. + +Wed Jun 29 13:58:17 2005 Justin Michel + + * ace/OS_NS_Thread.cpp: + + Somehow my previous checkin had many other differences besides the + simple change that I made. I've remerged the corresponding code + from the previous version, but I have no idea how the change + happened. + +Wed Jun 29 18:36:12 UTC 2005 Johnny Willemsen + + * ace/Default_Constants.h: + Removed ACE_CONNECTOR_HANDLER_MAP_SIZE, it is not used at all + anywhere in the repo. Found this when solving a problem with + OpenVMS + +Wed Jun 29 12:33:18 2005 Steve Huston + + * examples/APG/Config/config.mpc: + * examples/APG/Config/Makefile.am: + * examples/APG/Config/HA_Status.cpp: Simplify greatly to build + HA_Status as a simple executable, not a DLL. Thanks to Gavin Yu + for noticing this problem. + + * examples/APG/Config/HA_Status.h: Removed. + + * THANKS: Added Gavin Yu to the Hall of Fame. + + * ace/Timer_Heap_T.cpp (dtor): When cleaning out the timer nodes, + free_node() before doing the deletion() upcall. Prevents a user's + handle_close() from doing a cancel_timer() and ripping the current + timer node out from under us and causing free_node() to assert(). + +Wed Jun 29 10:43:11 2005 Justin Michel + + * ace/OS_NS_Thread.cpp: + + Port the ACE_DISABLE_WIN32_INCREASE_PRIORITY feature from earlier + OCI versions of ACE, so that a user can disable the setting of a + thread to the realtime priority class. This prevents hard lockups + of Windows machines when running as an administrator, and allows + many tests to function when not running as an admin. + +Tue Jun 28 20:58:11 2005 J.T. Conklin + + * bin/MakeProjectCreator/config/core.mpb: + + inherit from new install base project for backwards compatibility. + + * bin/MakeProjectCreator/config/conv_lib.mpb: + * bin/MakeProjectCreator/config/install.mpb: + * bin/MakeProjectCreator/config/install_bin.mpb: + * bin/MakeProjectCreator/config/install_headers.mpb: + * bin/MakeProjectCreator/config/install_lib.mpb: + + New new base projects to offer more flexibility on what parts of + a project are installed. install_bin, install_lib, and install_ + headers install binaries, libraries, and header files. install + installs everything. conv_lib is for "convenience libraries", a + set of objects that is packaged as a library for the developer's + convenience. For most builds it builds a shared library that is + installed without the cooresponding headers; but the automake + build uses automake's native convenience library support --- a + static library is built and linked into the executable(s). + +Tue Jun 28 08:41:03 2005 Ming Xiong + + * bin/MakeProjectCreator/config/global.features + + Added a new feature ziparchive which is needed by + CIAO/DAnCE/ComponentPackager + +Mon Jun 27 09:38:12 UTC 2005 Martin Corino + + * ace/README: + Added documentation for ACE_USES_FIFO_SEM, ACE_HAS_LINUX_NPTL + and ACE_HAS_POSIX_SEM_TIMEOUT. + +Mon Jun 27 22:22:00 2005 Ossama Othman + + * ace/Array_Map.h (ACE_Array_Map): + + Added missing "const_pointer" typedef/trait. + + * tests/Array_Map_Test.cpp (index_operator_test): + + Work around compiler / STL implementations that cannot handle + implicit conversions from iterator to const_iterator (e.g. due + to missing template constructor) by accessing the iterators + through a reference to const a Map. We don't strictly need a + const Map for this test but having one allows us to exercise + const iterators. + +Mon Jun 27 21:54:12 UTC 2005 Martin Corino + + * ace/config-linux-common.h: + Made inclusion of config-posix.h user selectable by defining + ACE_HAS_LINUX_NPTL rather than including it by default since + there are too many problems with that with the differences + in the various Linux distros. + Only with a Linux distro having the latest NPTL implemented + (SuSE 9.3) have I been able to effectively use POSIX macros. + +Mon Jun 27 20:00:12 UTC 2005 Johnny Willemsen + + * ace/Codecs.cpp: + * ace/Configuration.cpp: + * ace/DLL_Manager.cpp: + * ace/Multihomed_INET_Addr.cpp: + * ace/OS_NS_stdlib.cpp: + * ace/Service_Config.cpp: + Within the ACE lib ACE_LIB_TEXT must be used instead of ACE_TEXT + +Mon Jun 27 12:26:15 2005 Douglas C. Schmidt + + * ace/Malloc_T.h: Updated the ACE_Malloc_T documentation to + mention the limitations with find()/bind(). Thanks to Hanson Lu + for reporting this. + +Mon Jun 27 10:24:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/rtcosscheduling.mpb: + Added requires dummy_label. The RTCosScheduling library uses + a non compliant way to register its interceptors. This is + causing problems with the PI refactory so disable the building + of this lib until that has been fixed. See also bugzilla 2163. + +Mon Jun 27 08:21:12 UTC 2005 Martin Corino + + * ace/OS_NS_Thread.cpp: + Change to protect against race condition in sema based Event + implementation. + + * ace/OS_NS_Thread.inl: + Change in errno (EINTR) handling with FIFO based sema timedwait. + +Mon Jun 27 06:59:12 UTC 2005 Johnny Willemsen + + * ace/Message_Queue_T.{h,cpp}: + Initialise pointers with 0 and removed work around for Sun CC 5.1, + we don't support that compiler already for years + +Mon Jun 27 01:03:12 2005 Stoyan Paunov + + * bin/MakeProjectCreator/config/global.features: + * MPC/config/global.features: + * MPC/config/ZIP_Wrapper.mpb: + + Added a new feature to MPC regarding the ZIP_Wrappers used by + the Repository Manager. I added this feature to make sure the RM + would not be compiled unless the proper ZIP libraries are in place. + Please check the README in CIAO/DAnCE/new_RepositoryManager + + +Sun Jun 26 22:29:12 UTC 2005 Martin Corino + + * ace/config-posix.h: + Made test for POSIX_SEM TIMEOUTS more specific. + + * ace/config-linux-common.h: + Added check to fix detection of POSIX_SEM TIMEOUTS for Linux + >= 2.6 because of crippled POSIX macros (moved here from + config-posix.h). + Made implementation of FIFO based Semaphores for Linux < 2.6 + user selectable instead of default (default now back to + situation before I added FIFO based Semaphores). + + * ace/OS_NS_Thread{.h .cpp .inl}: + Added support for Process shared Events when Process shared + pthread mutexes are not supported but FIFO Sems are configured. + Fixed several issues concerning correct errno handling in + case of timeouts. + + * tests/run_test.lst: + Added missing Manual_Event_Test. + + * tests/Process_Manual_Event_Test.cpp: + * tests/Process_Semaphore_Test.cpp: + Improved protection against non-supporting builds. + + * tests/Dirent_Test.cpp: + Made this test a little less braindead so it does not recognize + FIFOs and PIPEs as directories anymore and tries chdir() on + them which is quite annoying. + +Sat Jun 25 01:42:22 2005 Ossama Othman + + * ace/Array_Map.h: + + MSVC++ 6's reverse_iterator adapter implementation is not + standard's compliant. Adjusted reverse_iterator template + parameters accordingly for this one case (i.e. _MSC_VER <= + 1200). + + * ace/Array_Map.cpp (insert): + + MSVC++ 6 doesn't like the "typename" qualification in the first + template argument to the std::pair<> return type. Removed it in + for the _MSC_VER <= 1200 case. + + * tests/Array_Map_Test.cpp: + + MSVC++ 6 doesn't pick up the const rbegin/rend() methods without + making the map object const, despite the fact the return value + is assigned to a const_reverse_iterator. Work around the + problem by casting the non-const map instance to a reference to + a const map when _MSC_VER <= 1200. + +Fri Jun 24 22:49:16 2005 J.T. Conklin + + * protocols/ace/RMCast/Makefile.am: + + Regenerated. + +Fri Jun 23 19:58:12 UTC 2005 Martin Corino + + * ace/OS_NS_Thread.inl: + Added include for non-inline builds. + +Fri Jun 23 19:38:12 UTC 2005 Martin Corino + + * ace/OS_NS_Thread.h: + Removed extra semi-colon. + +Fri Jun 23 19:36:12 UTC 2005 Martin Corino + + * tests/Process_Manual_Event_Test.cpp: + * tests/Process_Semaphore_Test.cpp: + Added protection for singlethread builds. + +Fri Jun 24 11:42:43 2005 Ossama Othman + + * ACE-INSTALL.html: + + Added notes about testing and developing autotool support, and + how to bootstrap that support into a workspace. + +Fri Jun 24 11:36:26 2005 Ossama Othman + + * ace/Array_Map.cpp: + * ace/Array_Map.inl: + + Added missing "typename" keyword before template parameter + dependent types. Addresses VC++ 7.1/8 and Sun CC++ compile-time + warnings and errors. + +Fri Jun 24 11:02:06 2005 Chad Elliott + + * bin/PerlACE/Process_Win32.pm: + + Fixed this module to work with the ACE_TEST_WINDOW environment + variable that I added some time back. + +Fri Jun 23 13:36:12 UTC 2005 Martin Corino + + * ace/OS_NS_Thread.cpp: + Fixed unused 'result' variable in ACE_OS::event_init(). + +Fri Jun 23 13:00:12 UTC 2005 Martin Corino + + * tests/Process_Manual_Event_Test.cpp: + * tests/Process_Semaphore_Test.cpp: + Fixes for compile errors on Linux 64bit. + +Fri Jun 23 10:20:12 UTC 2005 Martin Corino + + * ace/OS_NS_Thread.inl: + Made sure ETIME is always returned on timeouts of + ACE_OS::sema_timedwait and not ETIMEDOUT. + + * tests/Semaphore_Test.cpp: + Extended platform coverage of timeout tests. + + * tests/Auto_Event_Test.cpp: + * tests/Manual_Event_Test.cpp: + * tests/Process_Manual_Event_Test.cpp: + * tests/Process_Semaphore_Test.cpp: + * tests/run_test.lst: + * tests/tests.mpc: + Added new tests. + +Fri Jun 23 09:17:12 UTC 2005 Martin Corino + + * tests/INET_Addr_Test_IPV6.cpp: + * tests/Multihomed_INET_Addr_Test_IPV6.cpp: + * tests/SOCK_Send_Recv_Test_IPV6.cpp: + * tests/SOCK_Test_IPV6.cpp: + Fixed WCHAR compile problems. + +Fri Jun 23 08:49:12 UTC 2005 Martin Corino + + * ace/OS_NS_Thread{.h .cpp .inl}: + Extended ACE_OS::event_xxx implementation to support platforms + having either PThread support with Process Shared condition + variables or POSIX semaphores with named (process shared) + semaphore support or using the new FIFO based semaphores. + Fixed manual_reset implementation of condition based events + (event_pulse() did not work). + +Fri Jun 23 08:49:12 UTC 2005 Martin Corino + + * ace/config-aix-4.x.h: + Fixed problems by incorrectly reported ACE_HAS_POSIX_SEM_TIMEOUT + by config-posix.h. + +Fri Jun 24 07:20:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_Thread.h: + Removed extra semi-colon. + +Thu Jun 23 22:24:12 UTC 2005 Martin Corino + + * ace/config-linux-common.h: + Fixed typo (ACE_HAS_SHMOPEN should be ACE_HAS_SHM_OPEN). + +Thu Jun 23 17:14:39 2005 Steve Huston + + * ace/Dev_Poll_Reactor.cpp (schedule_timer, reset_timer_interval): + * ace/Select_Reactor_T.cpp (schedule_timer, reset_timer_interval): + * ace/WFMO_Reactor.inl (cancel_timer, schedule_timer, reset_timer_interval): + If timer_queue_ is 0, don't attempt to call through it. Instead, + return -1 with errno ESHUTDOWN for scheduling; return 0 for cancel. + +Thu Jun 23 12:10:16 2005 Ossama Othman + + * ace/Array_Map.h: + * ace/Array_Map.inl: + * ace/Array_Map.cpp: + + Map implementation that focuses on small footprint and fast + iteration. Search times are, however, linear (O(n)) meaning + that this map isn't suitable for large data sets that will be + searched in performance critical areas of code. Iteration over + large data sets, however, is faster than linked list-based maps, + for example, since spatial locality is maximized through the use + of contiguous arrays as the underlying storage. + + * ace/Makefile.am: + * ace/ace.mpc: + + Added new Array_Map.* source files. + + * tests/Array_Map_Test.cpp: + + Regression test for ACE_Array_Map. + + * tests/Makefile.am: + * tests/run_test.lst: + * tests/tests.mpc: + + Added new Array_Map_Test regression test. + +Thu Jun 23 07:49:43 2005 J.T. Conklin + + * ace/Logging_Strategy.cpp (init): + + Changed to not delete output stream when wipeout_logfile_ is + set, as that may result in a double delete when ownership of + the new stream is transferred to this->log_msg_. + + Changed to not delete existing output stream if a new one is + not been created. + + Thanks to Mark Callaghan and Ossama Othman for assistance. + +Thu Jun 23 12:34:12 UTC 2005 Martin Corino + + * ace/config-posix.h: + Fixed problems for single threading builds. + +Thu Jun 23 10:59:12 UTC 2005 Johnny Willemsen + + * man/Makefile.am: + * man/man3/Makefile.am: + Removed these files because are also not part of the release + +Wed Jun 22 20:29:39 2005 Ossama Othman + + * ace/OS_NS_Thread.h: + + Removed extra semi-colon. Fixes g++ 4.0 builds. + +Wed Jun 22 19:11:23 2005 Ossama Othman + + * THANKS: + + Added Mark Callaghan to the Hall of Fame. + + * ace/Log_Msg.cpp (msg_ostream): + + Close, do not delete, the file stream in the + ACE_LACKS_IOSTREAM_TOTALLY case, as is done in the + ~ACE_Log_Msg() destructor. Addresses memory management issues. + Thanks to J.T. Conklin and Mark Callaghan for pointing out the + problem and suggesting the fix. + + Do not reset the ostream_ and delete_ostream_ attributes if + the pointer to ostream_ is equal to the ostream argument passed + to this method. Prevents premature destruction of the ostream. + Thanks to Mark Callaghan for suggesting this fix. + +Wed Jun 22 19:55:12 UTC 2005 Martin Corino + + * ace/OS_NS_Thread{.h .inl}: + Oops, fixed some more wchar problems. + +Wed Jun 22 19:16:12 UTC 2005 Martin Corino + + * ace/OS_NS_sys_mman.inl: + * ace/OS_NS_Thread{.h .inl .cpp}: + * ace/INET_Addr.cpp: + * ace/SOCK_Dgram_Mcast.cpp: + Fixed wchar problems in arguments and variables. + + * ace/config-linux-common.h: + Undef ACE_HAS_SHMOPEN after having included config-posix.h as + there are some things to check out here before really using + ::shm_open()! + +Wed Jun 22 09:25:12 2005 Gary Maxey + + * ace/config-lite.h: + Added __TANDEM platform to ACE_UNUSED_ARG macro + +Wed Jun 22 12:24:12 UTC 2005 Martin Corino + + * ace/config-posix.h: + Added test to set new macro ACE_HAS_POSIX_SEM_TIMEOUT when supported. + + * ace/config-linux-common.h: + Added include for config-posix.h to test for more supported POSIX + functionality. + Added special test for Linux kernels < 2.6 because these falsely + report certain POSIX support while not having that in reality + (f.i. ACE_HAS_POSIX_SEM with ACE_HAS_POSIX_SEM_TIMEOUT). + + * ace/config-lite.h: + Added test to undef (new) macro ACE_USES_FIFO_SEM (see below) when + other macro settings invalidate this one. + + * ace/os_include/os_pthread.h: + Extended test to prevent definition of ACE_sema_t when ACE_USES_FIFO_SEM + is defined. + + * ace/OS_NS_Thread{.h .inl .cpp}: + Added new implementation of ACE_OS::sema_XXX methods based on FIFOs + (derived from W. Richard Stevens, UNIX Network Programming V2) + active when !ACE_HAS_POSIX_SEM && ACE_USES_FIFO_SEM. + Offshoot of customer request for process shareable solution for Linux + 2.4.xx kernels. + + Outlined most ACE_OS::mutex_XXX and ACE_OS::event_XXX methods resulting + in a) ~7 Kb footprint reduction (Linux 2.6) and b) lessened dependency + complexities allowing later introduction of another Event platform + emulation. + + +Wed Jun 22 08:51:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/build_core_exe.bor: + * include/makeinclude/build_core_library.bor: + Removed these files, not used anymore + +Wed Jun 22 08:39:12 UTC 2005 Johnny Willemsen + + * tests/SOCK_Test_IPv6.cpp: + Fixed compile errors on Linux when ACE_HAS_IPV6 has been defined + +Wed Jun 22 07:53:12 UTC 2005 Johnny Willemsen + + * ace/SOCK_Dgram_Mcast.cpp: + Fixed compile errors on Linux when ACE_HAS_IPV6 has been defined + + * include/makeinclude/compiler.bor: + No need anymore to include ace_flags.bor + + * include/makeinclude/ace_flags.bor: + Removed this file, not needed anymore + +Tue Jun 21 18:06:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/compiler.bor: + Removed -a8 and -b from the compiler flags, this are the defaults + for the compiler, so no need to explicitly specify them. Thanks to + Chad about informing me that -b is the default. + +Tue Jun 21 07:30:58 2005 Chad Elliott + + * bin/MakeProjectCreator/config/global.mpb: + + Set libpaths to '.' since libout is set to '.' as well. + +Mon Jun 20 20:07:45 2005 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Support for the bug fix where the 'postcommand' wouldn't be + applied if there was more than one output file per input file. + +Mon Jun 20 16:45:39 2005 Steve Huston + + * ace/Asynch_IO.cpp: Added explicit template instantiations for + ACE_Refcounted_Auto_Ptr. + +Mon Jun 20 11:36:21 2005 Steve Huston + + * ace/OS_NS_sys_socket.inl (closesocket): Removed the + ACE_OS::shutdown() call in an HP-UX block. Calling shutdown breaks + an often-used idiom in UNIX programming of forking a new process + to handle a connection and closing the handle in the parent. Doing + a shutdown() before close() initiates a TCP close even though there + are multiple handles to the same socket. Thanks to Doug Schmidt + and Howard Finer for the exchange that led to this change. This + reverts a change made earlier: + Thu Jan 1 17:56:31 2004 Steve Huston + +Mon Jun 20 09:46:24 2005 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Fixed a long standing bug where the libpath set in a Define_Custom + was not utilized. + +Mon Jun 20 15:35:42 2005 Boris Kolpackov + + * protocols/ace/RMCast/Acknowledge.cpp: + * protocols/ace/RMCast/Fragment.cpp: + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Protocol.h: + * protocols/ace/RMCast/Reassemble.cpp: + + Made code VC6-compatible. + +Mon Jun 20 11:38:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/bidir_giop.mpb: + Added pi as base project, this was implicitly in the past because + portableserver was based on pi. + +Mon Jun 20 10:46:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/portableserver.mpb: + The portableserver library is not dependent on pi anymore. + The new pi_server library is dependent. + + * bin/MakeProjectCreator/config/ftrtevent.mpb: + * bin/MakeProjectCreator/config/ftrteventchannel.mpb: + * bin/MakeProjectCreator/config/ifrservice.mpb: + These projects use functionality of pi_server, so added that + as base project + + * bin/MakeProjectCreator/config/rtportableserver.mpb: + * bin/MakeProjectCreator/config/messaging.mpb: + Added pi as base project, this was implicitly in the past because + portableserver was based on pi. + +Fri Jun 17 17:37:53 2005 Emre Turkay + + * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb: + + Added header_outputext to clean up the generated header files on + request. + +Fri Jun 17 17:22:13 2005 Boris Kolpackov + + * protocols/ace/RMCast/Acknowledge.cpp: + * protocols/ace/RMCast/Acknowledge.h: + * protocols/ace/RMCast/Fragment.cpp: + * protocols/ace/RMCast/Fragment.h: + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Protocol.cpp: + * protocols/ace/RMCast/Protocol.h: + * protocols/ace/RMCast/Reassemble.cpp: + * protocols/ace/RMCast/Reassemble.h: + * protocols/ace/RMCast/Retransmit.cpp: + * protocols/ace/RMCast/Retransmit.h: + * protocols/ace/RMCast/Simulator.h: + * protocols/ace/RMCast/Socket.cpp: + * protocols/ace/RMCast/Socket.h: + + Implemented message fragmentation. + + * protocols/examples/RMCast/Send_Msg/Protocol.h: + * protocols/tests/RMCast/Protocol.h: + * protocols/tests/RMCast/Sender.cpp: + + Changed to send messages that would require fragmentation. + +Fri Jun 17 09:14:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/pi_server.mpb: + New base project for pi_server. Will contain all needed portable + interceptor functionality specific for the server side + +Fri Jun 17 08:40:12 UTC 2005 Johnny Willemsen + + * ace/Object_Manager.cpp: + Removed comment about very old gcc version + + * ace/Service_Config.h: + Added new ACE_DYNAMIC_SERVICE_DIRECTIVE macro that makes it possible + to load a service using a process_directive call that works with the + normal service configurator and the xml based one. Thanks to + Lothar Werzinger for providing this + new macro. We will use it then in TAO to load the services on + demand. + +Thu Jun 16 07:38:57 2005 Douglas C. Schmidt + + * ace/SOCK_Stream.cpp (close): Removed the call to this->close_writer() + since that functionality was done by ACE_SOCK::close(), which + delegates to ACE_OS::closesocket(), which handles this + automatically. + + * ace/Process.cpp (running): Only try to "kill" a process if + the PID is valid. Thanks to Howard Finer for contributing this. + + * ace/Pipe.h (ACE_Pipe): Updated the documentation for this class + to clarify why it uses sockets on Windows. Thanks to Dave + Varnell for prompting this. + + * ace/INET_Addr.cpp (set): Changed the test of + + if (port_number < 0) + + to + + if (port_number == -1) + + to fix problems reported by Vemund Handeland + + +Wed Jun 15 12:36:04 MST 2005 Trevor Fields + + * bin/PerlACE/Run_Test.pm: + + Adding method to add a library path dynamically for the run test + scripts. + +Wed Jun 15 17:50:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + reverse the libs, this solves a lot of problems in our static builds. + +Wed Jun 15 07:46:16 2005 Chad Elliott + + * include/makeinclude/rules.bin.GNU: + + Resurrected rules.bin.GNU as it may be required by old + hand-written makefiles. + +Wed Jun 15 07:36:14 2005 Chad Elliott + + * bin/MakeProjectCreator/templates/bor.mpd: + + Removed the use of uniq for libpaths. This was a work-around for + a bug in MPC which has been fixed. + +Wed Jun 15 11:30:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Removed reverse, with this no static initializers where called + +Wed Jun 15 09:48:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Use uniq for libpaths so that we don't generate things twice + +Wed Jun 15 09:06:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Reversed the order in which the libs are generated. This make sure + we first get the static created for ACE, then for TAO, etc. Fixes + the problems in the CBX static build + +Tue Jun 14 17:52:39 2005 Steve Huston + + * ace/Thread_Manager.h: Improved documentation for the task_list() + and task_all_list() methods. + +Tue Jun 14 14:19:12 UTC 2005 Johnny Willemsen + + * ACE-INSTALL.html: + Updated Borland build instructions + +Tue Jun 14 12:35:12 UTC 2005 Johnny Willemsen + + * ace/Reactor_Timer_Interface.{h,cpp}: + Moved destructor to a new cpp file to fix Cygwin warnings + + * ace/ace.mpc: + * ace/Makefile.am: + Added Reactor_Timer_Interface.cpp + +Tue Jun 14 12:30:12 UTC 2005 Johnny Willemsen + + * ace/IO_Cntl_Msg.{h,cpp,inl}: + Moved methods implemented in the header file to a new inl file. + Fixes warnings in the Cygwin build + + * ace/ace.mpc: + * ace/Makefile.am: + Added IO_Cntl_Msg.cpp + +Tue Jun 14 11:05:12 UTC 2005 Johnny Willemsen + + * bin/auto_run_tests.pl: + Fixed typo in comment + +Tue Jun 14 08:48:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/interceptors.mpb: + * bin/MakeProjectCreator/config/portableserver.mpb: + * bin/MakeProjectCreator/config/rtcorba.mpb: + * bin/MakeProjectCreator/config/utils.mpb: + Added pi as base project + +Mon Jun 13 13:50:53 2005 Emre Turkay + + * bin/ciao_tests.lst: + + Added the node application tests to the autobuilds. + +Mon Jun 13 18:06:12 UTC 2005 Johnny Willemsen + + * performance-tests/SCTP/SOCK_STREAM_clt.cpp: + Fixed compile errors + +Mon Jun 13 13:57:12 UTC 2005 Johnny Willemsen + + * bin/make_release: + Don't do LF->CRLF conversion for xls files, that are Microsoft + Excel files. The RTCorba tests have such a file. + +Mon Jun 13 13:48:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/pi.mpb: + New base project for the new PI library we will add soon to the + archive. This PortableInterceptor libray will contain the + ORBInitializer Registry, Policy Factory Registry and ORBInitInfo + in the first version + +Mon Jun 13 12:52:12 UTC 2005 Johnny Willemsen + + * performance-tests/SCTP/hist.{h,cpp}: + * performance-tests/SCTP/SOCK_SEQPACK_clt.cpp: + * performance-tests/SCTP/SOCK_STREAM_clt.cpp: + Moved the hist struct with associated methods to the ACE_SCTP + namespace. This should fix the last compile errors in Irix. + Thanks to Doug McCorkle for providing + the patches + +Mon Jun 13 10:41:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/kokyu_dsrt_scheduler_server.mpb: + * bin/MakeProjectCreator/config/kokyu_dsrt_scheduler.mpb: + Moved the codecfactory from the server to the normal project, + also the clients need it + +Sun Jun 12 14:53:33 2005 J.T. Conklin + + * ace/Logging_Strategy.cpp (parse_args): + + Update comment to make it clear value is being converted from + number of KB to number of bytes. + +Sun Jun 12 12:48:12 UTC 2005 Martin Corino + + * include/makeinclude/platform_g++_common.GNU: + Fixed problem with GXX version detection when default Make + shell is CMD.EXE and problems with different version reports + with non-standard GCC implementations (like VxWorks:-). + + * include/makeinclude/wrapper_macros.GNU: + Fixed problem with ACE version detection when default Make + shell is CMD.EXE. + + * include/makeinclude/rules.local.GNU: + Fixed problem with creation of .depend files when default Make + shell is CMD.EXE. + + * include/makeinclude/rules.lib.GNU: + * include/makeinclude/platform_vxworks5.5.x.GNU: + Changed to implement support for creation of shared libs for + VxWorks targets. + +Sat Jun 11 11:31:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/kokyu_dsrt_scheduler_server.mpb: + Added codecfactory as base + +Fri Jun 10 18:33:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/rtcosscheduling.mpb: + Added missing base projexts. Thanks for JT for reporting this + +Fri Jun 10 16:03:12 UTC 2005 Martin Corino + + * tests/DLL_Test.cpp: + Updated to use new 'ACE_HAS_DYNAMIC_LINKING' macro. + +Fri Jun 10 16:00:12 UTC 2005 Martin Corino + + * ace/config-lite.h: + Introduced new macro 'ACE_HAS_DYNAMIC_LINKING' to enable more + generalized testing for platforms supporting dynamic linking + than 'ACE_HAS_SVR4_DYNAMIC_LINKING' supports (which excludes + WIN32, VxWorks and HPUX which *do* support dynamic linking). + +Fri Jun 10 15:53:12 UTC 2005 Martin Corino + + * ace/OS_main.h: + * ace/OS_main.cpp: + Changed implementation of 'ace_main' entrypoints for VxWorks to + support shared library builds without resulting in 'undefined symbol' + messages for 'ace_main_i'. + +Fri Jun 10 15:47:12 UTC 2005 Martin Corino + + * ace/OS_NS_dlfcn.inl: + Fixed VxWorks implementation of dlopen(). + +Fri Jun 10 07:55:32 2005 Phil Mesnier + + * bin/tao_orb_tests.lst: + Added new test for Alternate IIOP addresses. + +Fri Jun 10 13:16:53 2005 Simon McQueen + + * ace/Reactor.cpp (register_handler): + + Backed out Thu Jun 9 11:12:39 2005 Steve Huston. + It was causing test failures on Linux. + +Fri Jun 10 06:43:25 2005 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Interpret flag_overrides of the custom_types->dependent setting + as an array instead of a string. This makes things consistent + with non-overridden values of dependent. + + * bin/create_ace_build: + * bin/create_ace_build.pl: + + Inform users about using $MPC_ROOT/clone_build_tree.pl instead of + these scripts. + + * bin/depgen.pl: + + Simplified/collapsed duplicated code from the VMS additions. + +Thu Jun 9 18:38:12 UTC 2005 Johnny Willemsen + + * ace/Event.h: + Doxygen improvements + + * bin/MakeProjectCreator/config/codecfactory.mpb: + New base project for the new codecfactory for TAO + +Thu Jun 9 18:32:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added tao/tests/POA/Reference_Counting + +Thu Jun 9 11:47:31 2005 Steve Huston + + * tests/Pipe_Test.cpp: Fixed wide-char text issues. + +Thu Jun 9 11:12:39 2005 Steve Huston + + * ace/Reactor.cpp (register_handler): When registering for one or more + signals, set the event handler's reactor() pointer to the registered + reactor. Makes this behavior consistent with all other registration + types. + +Thu Jun 9 16:18:32 2005 Boris Kolpackov + + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Socket.cpp: + * protocols/ace/RMCast/Socket.h: + + Implemented timed recv() and size(). + +Thu Jun 9 13:16:53 2005 Simon McQueen + + * bin/tao_other_tests.lst: + + Added Bug_2137_Regression test. + +Thu Jun 9 09:31:28 2005 Simon McQueen + + * NEWS: + + Updated with late release note submissions. + +Wed Jun 08 08:43:59 2005 Simon McQueen + + * ACE version 5.4.6 released. + +Wed Jun 8 11:21:50 2005 Simon McQueen + + * NEWS: + + Updated with release note entries. + +Fri Jun 3 13:42:18 2005 Steve Huston + + * ace/String_Base.h: Removed ACE_INLINE from the operator+ functions. + The functions are defined in String_Base.cpp. Fixes compile errors + on Solaris autoconf build. + + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: Added missing + #include for ace/Null_Mutex.h and ace/Null_Condition.h since this + example uses ACE_Task. + + * Kokyu/DSRT_Sched_Queue_T.h: Added missing #include "ace/Null_Mutex.h" + +Thu Jun 2 13:58:29 2005 Steve Huston + + * ace/Local_Tokens.cpp (~ACE_TSS_TPQ_Entry): Replaced missing '}' from: + Mon May 30 18:10:56 2005 Ossama Othman + +Wed Jun 1 18:33:29 2005 Steve Huston + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: Reordered some + #include directives so files needed by ace/Connector.h are in before + ace/Connector.h. Fixes optimized autoconf build on AIX. + +Wed Jun 1 12:19:27 2005 Steve Huston + + * ace/OS_NS_signal.inl: Reverted: + Tue May 31 18:51:31 2005 Steve Huston + It broke builds on Linux and BSD, at least, with compile errors like: + `::' does not have a class or union named `sigaction' + I think this is probably an issue of including files in the wrong + order and it only trips up HP-UX, but I'm not sure. + +Wed Jun 1 07:10:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Removed bug 2088 test for the time being, the fix isn't the correct one + and now the test has wrong expectations + +Tue May 31 18:51:31 2005 Steve Huston + + * ace/OS_NS_signal.inl (sigaction): Added "::" qualifier to references + to "struct sigaction" to distinguish it from sigaction in the + ACE_OS namespace. This was tripping up HP aC++ in certain use cases. + +Tue May 31 18:46:29 2005 Steve Huston + + * ace/INET_Addr.cpp (set_address): When needing to plug in an + IPv4-mapped IPv6 address, avoid any possibility of compiler struct + member non-contiguous alignment. Use the ip6 address type and + plug the values in where they go. Thanks to Robert Iakobashvili + for this idea. + +Tue May 31 21:45:10 2005 Boris Kolpackov + + * NEWS: + + Updated RMCast-related information. + +Tue May 31 11:49:23 2005 Ossama Othman + + * ace/Free_List.inl: + * ace/Message_Queue_T.inl: + * ace/POSIX_CB_Proactor.inl: + * ace/SUN_Proactor.inl: + + Removed these empty inline files. + + * ace/Free_List.cpp: + * ace/Free_List.h: + * ace/Message_Queue_T.cpp: + * ace/Message_Queue_T.h: + * ace/POSIX_CB_Proactor.cpp: + * ace/POSIX_CB_Proactor.h: + * ace/SUN_Proactor.cpp: + * ace/SUN_Proactor.h: + + Removed include directives for removed inline files. + + * ace/Timer_Queue_Adapters.cpp (activate): + + Moved method definition out of ACE_HAS_DEFERRED_TIMER_COMMANDS + block. Fixes "unresolved symbol" link-time errors. + + * ace/Makefile.am (nobase_include_HEADERS): + + Removed newly removed inline file. + +Tue May 31 10:39:10 2005 Justin Michel + + * ace/String_Base.inl: + * ace/String_Base.cpp: + + Move operator+=() methods from .inl to .cpp in an effort to + reduce footprint. + +Mon May 30 18:10:56 2005 Ossama Othman + + * ace/Addr.cpp: + * ace/Addr.inl: + * ace/Event_Handler_T.cpp: + * ace/Event_Handler_T.inl: + * ace/Free_List.cpp: + * ace/Free_List.inl: + * ace/Hashable.cpp: + * ace/Hashable.inl: + * ace/IOStream_T.cpp: + * ace/IOStream_T.inl: + * ace/Local_Tokens.cpp: + * ace/Local_Tokens.inl: + * ace/Lock_Adapter_T.cpp: + * ace/Lock_Adapter_T.inl: + * ace/Malloc_T.cpp: + * ace/Malloc_T.inl: + * ace/Map_T.cpp: + * ace/Map_T.inl: + * ace/Message_Block.cpp: + * ace/Message_Block.inl: + * ace/Message_Queue.cpp: + * ace/Message_Queue.inl: + * ace/Message_Queue_T.cpp: + * ace/Message_Queue_T.inl: + * ace/POSIX_CB_Proactor.cpp: + * ace/POSIX_CB_Proactor.inl: + * ace/POSIX_Proactor.cpp: + * ace/POSIX_Proactor.inl: + * ace/Refcounted_Auto_Ptr.h: + * ace/Refcounted_Auto_Ptr.inl: + * ace/Refcounted_Auto_Ptr.cpp: + * ace/Remote_Tokens.cpp: + * ace/Remote_Tokens.inl: + * ace/Reverse_Lock_T.cpp: + * ace/Reverse_Lock_T.inl: + * ace/SUN_Proactor.cpp: + * ace/SUN_Proactor.inl: + * ace/Shared_Memory_MM.cpp: + * ace/Shared_Memory_MM.inl: + * ace/Shared_Memory_SV.cpp: + * ace/Shared_Memory_SV.inl: + * ace/Strategies_T.cpp: + * ace/Strategies_T.inl: + * ace/Task.cpp: + * ace/Task.inl: + * ace/Thread_Manager.cpp: + * ace/Thread_Manager.inl: + * ace/Timer_Queue_Adapters.cpp: + * ace/Timer_Queue_Adapters.inl: + * ace/Timer_Queue_T.inl: + + Moved inlined virtual methods out of line. Addresses + RTTI-related problems when using g++ 4.0's + "-fvisibility-inlines-hidden" command line option. + + * ace/String_Base.cpp: + + Removed "ACE_INLINE" macros. They should not be used in this + out-of-line source file. + + * ace/Makefile.am: + * ace/ace.mpc: + + Added Refcounted_Auto_Ptr.cpp to the list of template files. + +Mon May 30 13:39:12 UTC 2005 Johnny Willemsen + + * ace/Task.cpp: + The Borland preview compiler is the only Borland compiler capable + of handling the reinterpret cast + +Mon May 30 13:14:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added TAO/tests/Portable_Interceptors/Bug_2088/run_test.pl + +Mon May 30 09:34:12 UTC 2005 Martin Corino + + * include/makeinclude/platform_vxworks5.x_diab.GNU: + * include/makeinclude/platform_vxworks5.x_g++.GNU: + + Removed these files since these platform configurations are + not supported anymore with the current ACE/TAO releases. + The currently supported platform configuration is the + 'platform_vxworks5.5.x.GNU'. + +Mon May 30 09:19:12 UTC 2005 Johnny Willemsen + + * ace/Array_Base.cpp: + Initialise pointer with 0 + +Mon May 30 08:02:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_aix_ibm.GNU: + Don't use -qstaticinline in a 64bit build with Visual Age 6. When + this option is specified TAO crashes strangely. Seems a problem + in the Visual Age compiler in 64bit mode. + +Sun May 29 17:49:00 2005 J.T. Conklin + + * m4/compiler.m4: + + Disable the use of gcc's symbol visibility on MacOSX, since it + requires features of the ELF object file format not present in + Mach-O. Longer term we need a feature check that explicitly + tests for proper operation of symbol visibility instead of a + list of systems where it's disabled. + +Fri May 27 15:32:15 2005 Justin Michel + + * ace/ACE.h: + * ace/ACE.cpp: + + Added a new ACE::wild_match() function which is used to support the + TAO -ORBPreferredInterfaces option. wild_match was contributed by + Kevin Heifner . + + * ace/SOCK_SEQPACK_Association.h: + * ace/SOCK_SEQPACK_Connector.h: + * apps/drwho/Protocol_Manager.cpp: + * examples/APG/Reactor/Timers.cpp: + * tests/Network_Adapters_Test.cpp: + + These files #included config.h which isn't safe, because it + won't necessarilly pick up the correct symbols. For example, I + caught this by trying to build ACE on Windows with + __ACE_INLINE__ = 0. The files that #included config.h directly + saw that it was defined as 0, but changing them to #include + config-all.h instead, correctly saw that the symbol was + undefined. + +Fri May 27 10:26:34 2005 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Interpret custom_types->dependent as an array instead of a string. + This is completely backward compatible since a string is just a + one element array in the template language. + +Fri May 27 12:22:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_aix_ibm.GNU: + When building for 64bit, make sure we enable the 64bit warnings + +Fri May 27 08:49:12 UTC 2005 Martin Corino + + * ace/OS_NS_Thread.inl: + + Fixed possible NULL-pointer assignment for VxWorks implementation + of ACE_OS::thr_sigsetmask(). + +Fri May 27 00:40:19 2005 Ossama Othman + + * bin/tao_orb_tests.lst: + + Added new recursive type Any insertion/extraction test to the + test suite. + +Thu May 26 17:07:34 2005 Justin Michel + + * ace/String_Base.inl: + * ace/String_Base.cpp: + + Move all non-trivial functions out of the .inl file. Hopefully this + will cause a net improvement to the footprint. + +Thu May 26 16:13:34 2005 Justin Michel + + * ace/config-win32-msvc-6.h: + + The standard library that comes with vc6 is pre-standard c++, + but it's close enough for many things. Enabling its use should + be more portable. This was done long ago for the OCI versions of + TAO (Since 1.2a), and was apparently overlooked until now. + +Thu May 26 15:22:10 2005 Emre Turkay + + * Release: + + Added the contrib directory into the Release script. + +Thu May 26 18:21:12 UTC 2005 Johnny Willemsen + + * ace/Thread_Manager.{h,cpp}: + Added thr_state method to ACE_Thread_Manager so that we are able + to retrieve the state of a certain thread. + +Thu May 26 07:39:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_cygwin32.GNU: + * include/makeinclude/platform_freebsd.GNU: + * include/makeinclude/platform_gnuwin32_common.GNU: + * include/makeinclude/platform_osf1_3.2_cxx.GNU: + * include/makeinclude/platform_osf1_4.x_cxx.GNU: + * include/makeinclude/platform_osf1_4.x_g++.GNU: + * include/makeinclude/platform_qnx_neutrino.GNU: + * include/makeinclude/platform_rtems.x_g++.GNU: + Simplified these files by using the ?= operator + +Wed May 25 15:51:03 2005 Steve Totten + + * ace/OS_NS_stdio.inl: + * ace/OS_NS_stdio.cpp: + * ace/OS_TLI.inl: + * ace/config-aix-4.x.h: + * ace/config-posix.h: + These files were using improper syntax to compare the value of + _XOPEN_SOURCE against a constant that caused compilation errors on + HP-UX 11.23 with HP aC++/ANSI C B3910B A.06.00. For example: + #if defined (_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500) + was changed to: + #if (defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) >= 500) + + Thanks to Paul Koch for reporting + this problem and providing the solution. + +Wed May 25 20:08:12 UTC 2005 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added new RTEvent_Skel and RTEvent_Serv libraries and removed + RTOldEvent + +Tue May 24 20:09:28 2005 J.T. Conklin + + * bin/MakeProjectCreator/config/time.mpb: + + Inherit from svc_utils.mpb. + +Tue May 24 20:46:28 2005 Olli Savia + + * ace/config-irix6.x-common.h: + * ace/config-linux-common.h: + Changed incorrect define ACE_USES_NEW_TERMIOS to + ACE_USES_NEW_TERMIOS_STRUCT. + +Tue May 24 09:31:42 2005 Chad Elliott + + * bin/MakeProjectCreator/config/acedefaults.mpb: + + Use $(ILIBMODIFIER) instead of $(LIBMODIFIER). + + * tests/Pipe_Test.cpp: + * tests/Process_Mutex_Test.cpp: + + Added missing ACE_TEXT () around option strings. This was causing + a very strange file to show up after the Process_Mutex_Test was + run in the Borland unicode build and the Pipe_Test didn't run at + all. + +Tue May 24 00:17:09 2005 Emre Turkay + + * bin/MakeProjectCreator/config/cidlc.mpb: + + Created a base project for cidlc & ccf project files. + +Tue May 24 07:58:09 2005 Olli Savia + + * ace/SSL/SSL_SOCK_Stream.h: + Added include "ace/os_include/os_stdio.h" to fix compile + problem on LynxOS. Thanks to Christine Ballard + for reporting the problem. + +Mon May 23 23:11:14 2005 Emre Turkay + + * contrib/utility/*: + + Added the utility library. + +Mon May 23 16:38:13 2005 Steve Huston + + * examples/Reactor/Proactor/post_completions.cpp: Made use of the + ACE_POSIX_SIG_Proactor-based test dependent on + ACE_HAS_POSIX_REALTIME_SIGNALS, not ACE_POSIX_SIG_PROACTOR. + ACE_POSIX_SIG_PROACTOR indicates a preference for that proactor + implementation when one is not specified; it's not a capability + indicator. The presence of the ACE_POSIX_SIG_Proactor implementation + is based on the ACE_HAS_POSIX_REALTIME_SIGNALS setting, so that's + what's used to decide whether to explicitly use + ACE_POSIX_SIG_Proactor. This fixes a build error on Mac OS X Tiger + with autoconfigure, as well as any other platform with AIO + support that doesn't declare a Proactor implementation preference. + Thanks to J.T. Conklin for raising this issue and working on testing + fixes. + +Mon May 23 14:52:19 2005 Justin Michel + + * ACEXML/tests/util/util.mpc: + + Add missing $ Id tag. + +Mon May 23 13:02:25 2005 Justin Michel + + * ace/String_Base.h: + * ace/String_Base.inl: + * ace/String_Base.cpp: + + Fixed some documentation bugs, and added some new features to + this class. New efficient overloads for string concatenation. + Fixed clear(1) to work as documented. Used a more optimal + string growth when concatenating strings. Performance + optimizations for string concatenation. + + * tests/SString_Test.cpp: + + Test the new string concatenation overloads. + + * bin/tao_other_tests.lst: + + Enabled new ImR tests, and grouped all ImR tests together. + +Mon May 23 12:26:19 2005 Steve Huston + + * ace/Thread.h: Doxygen-ized the join() comments. + +Mon May 23 13:18:12 UTC 2005 Johnny Willemsen + + * ace/Lib_Find.cpp: + Reverted change below, causes compile errors with some compilers + +Mon May 23 12:50:12 UTC 2005 Johnny Willemsen + + * ace/Lib_Find.cpp: + Small const fix + +Mon May 23 10:56:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/ftrtevent.mpb: + * bin/MakeProjectCreator/config/rtcorbaevent.mpb: + Use rtevent_serv as base project. These projects use some rtevent + implementation stuff so just the client side stubs are not enough. + + * bin/MakeProjectCreator/config/rteventexe.mpb: + Use rtevent_skel as base project + +Mon May 23 10:24:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/rtevent_serv.mpb: + * bin/MakeProjectCreator/config/rtevent_skel.mpb: + New files, the RTEvent service is being split in 3 libs so + we need some new base projects + +Mon May 23 05:47:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/rtoldevent.mpb: + Removed this file + + * bin/MakeProjectCreator/config/rteventlogadmin.mpb: + Removed rtoldevent as base project + +Sun May 22 12:01:46 2005 Olli Savia + + * ace/High_Res_Timer.cpp: + + Fixed a typo in comment. + +Fri May 20 21:11:07 2005 Ossama Othman + + * ace/DLL.cpp (~ACE_DLL): + + Explicitly delete() this->dll_name_. It is normally delete()d + in ACE_DLL::close(). However, that may not occur if full + ACE_DLL initialization is interruepted due to errors + (e.g. attempting to open a DSO/DLL that does not exist). Fixes + a memory leak. + + * ace/Log_Msg.cpp (msg_ostream): + + Delete the previously allocated ostream prior to setting the new + one, if necessary. Fixes a memory leak. + + * ace/Logging_Strategy.h (ACE_Logging_Strategy): + + Converted integer fields that are really booleans to be of type + "bool", and reordered fields to avoid excessive alignment + padding. Reduces size of this class by 8 bytes on most + platforms. + + * ace/Logging_Strategy.cpp: + + Initialize fields in base member initializer list to prevent + accidental use of uninitialized fields. + + Use C++ "true" and "false" instead of "1" and "0", respectively, + when setting boolean field values. + + * ace/SString.h (ACE_Auto_String_Free): + + Corrected documentation suggesting use of + ACE_Auto_Array_Ptr. The correct template argument is + "char", not "char *". + + * tests/CDR_Test.cpp: + * tests/Multicast_Test.cpp: + + Fixed memory leaks. + + * tests/Logging_Strategy_Test.cpp: + + Updated to be consistent with boolean field changes in + ACE_Logging_Strategy class. + + * tests/TP_Reactor_Test.cpp (delete_reactor): + + Reordered finalization code to prevent memory leak. + +Fri May 20 19:05:22 2005 Douglas C. Schmidt + + * ace/Thread.h (ACE_Thread): Updated the documentation of + ACE_Thread::join(). Thanks to Alan Balasuar + for motivating this fix. + +Sat May 21 18:30:12 UTC 2005 Johnny Willemsen + + * tests/HTBP/Reactor_Tests/server.cpp: + Fixed value computed is not used warning in GCC IA64 build + +Fri May 20 15:28:00 2005 Gary Maxey + + * ace/config-lite.h + + Added TANDEM platform for ACE_NOTREACHED macro. + +Thu May 19 19:10:30 2005 Douglas C. Schmidt + + * apps/Gateway/Gateway/Concrete_Connection_Handlers.cpp + (handle_output): + + Removed + + ACE_ASSERT (errno == EWOULDBLOCK); + + since errno may have been changed by this point. Thanks to Ro + Madhavan for reporting this. + +Thu May 19 18:50:23 2005 Steve Huston + + * ace/ICMP_Socket.{h cpp inl}: + * ace/Ping_Socket.{h cpp inl}: + * tests/Network_Adapters_Test.{cpp, h}: Moved ICMP_Socket and + Ping_Socket out of the ACE namespace and changed names to + ACE_ICMP_Socket and ACE_Ping_Socket, respectively. Also fixed up + some text strings with ACE_TEXT. + ACE_ICMP_Socket now does not check for root euid - allow the OS to + do whatever checks it requires/implements. + Improved implementation of ACE_Ping_Socket. + Thanks to Robert Iakobashvili for these improvements and changes. + +Thu May 19 15:59:38 2005 Steve Huston + + * ace/SOCK.h: Clarified doc on close() - it sets the object's + handle to ACE_INVALID_HANDLE. + +Thu May 19 08:58:48 2005 Ossama Othman + + * ace/INET_Addr.cpp: + * ace/INET_Addr.inl: + + Moved remaining virtual methods out of line. See "Wed May 18 + 16:19:32 2005 Ossama Othman " for + details. + +Thu May 19 15:21:00 UTC 2005 Jeff Parsons + + * bin/MakeProjectCreator/config/taoidl3toidl2defaults.mpb: + + Added line + + after += TAO_IDL3_TO_IDL2_EXE + + to the config file to make sure that the executable is built + before being used in a test, example or application. Thanks to + Chad Elliott for suggesting the change. + +Thu May 19 14:05:12 UTC 2005 Johnny Willemsen + + * netsvcs/clients/Logger/indirect_logging.cpp: + * netsvcs/lib/Client_Logging_Handler.cpp: + When we can't open the logger print out an error and exit with -1. + +Thu May 19 00:38:46 2005 Ossama Othman + + * config-g++-common.h: + * config-lite.h: + + Removed ACE_EXPORT_SINGLETON_{DECLARATION,DECLARE} macro + definitions. They do not provide the expected behavior in g++ + 4.0 configurations, as they do in VC++ configurations. + +Wed May 18 16:19:32 2005 Ossama Othman + + * ace/ATM_Addr.cpp: + * ace/ATM_Addr.inl: + * ace/DEV_Addr.cpp: + * ace/DEV_Addr.inl: + * ace/FILE_Addr.cpp: + * ace/FILE_Addr.inl: + * ace/INET_Addr.cpp: + * ace/INET_Addr.inl: + * ace/MEM_Addr.cpp: + * ace/MEM_Addr.inl: + * ace/SPIPE_Addr.cpp: + * ace/SPIPE_Addr.inl: + * ace/Service_Types.cpp: + * ace/Service_Types.inl: + * ace/UNIX_Addr.cpp: + * ace/UNIX_Addr.inl: + + Moved virtual method implementation out-of-line. Since the + classes to which they belong are exported, inlining them will + cause problems when attempting to perform a dynamic_cast<> in + binaries built with g++ 4.0's -fvisibility-inlines-hidden + command line option. + + * ace/Strategies_T.cpp (dump): + + Removed ACE_INLINE from this out of line method. + +Wed May 18 15:44:12 UTC 2005 Martin Corino + + * ace/Semaphore.cpp: + + Removed check for missing shm_open() since this causes problems + for platforms supporting POSIX_SEM (and thus not using + shm_open/open). Thanks to Raoul Gough for reporting this. + + * ace/config-openvms.h: + Added ACE_LACKS_UNNAMED_SEMAPHORE to compensate for above + change. + +Wed May 18 14:37:12 UTC 2005 Johnny Willemsen + + * examples/ASX/Message_Queue/buffer_stream.cpp: + Initialise all pointers with 0 + +Wed May 18 09:25:35 2005 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + * include/makeinclude/rules.lib.GNU: + * include/makeinclude/platform_gnuwin32_common.GNU: + + Fixed a problem that I introduced in a previous change. Resource + files were not being handled properly and the + platform_gnuwin32_common.GNU file was referencing $(VSHOBJS1) + which I removed. + + * include/makeinclude/all_in_one.GNU: + * include/makeinclude/wrapper_macros.GNU: + * include/makeinclude/rules.bin.GNU: + + Removed the file rules.bin.GNU and all references to it. + +Tue May 17 20:58:46 UTC 2005 Jeff Parsons + + * bin/MakeProjectCreator/config/taoidl3toidl2defaults.mpb: + + New file, a base project for the tao_idl3_to_idl2 executable, + so it can be executed automatically in a test or example. + +Tue May 17 18:31:12 UTC 2005 Johnny Willemsen + + * examples/ASX/Message_Queue/ASX_Message_Queue.mpc: + Don't build the buffer_stream exe when wchar is enabled, this + example expects just char. + +Tue May 17 09:32:01 2005 Ossama Othman + + * tests/Collection_Test.cpp: + + Avoid casting between a pointer to a function and a pointer to + an object. ISO C++ forbids such casts. Fixes a g++ 4.0 + warning. + +Tue May 17 07:50:07 2005 Justin Michel + + * ace/Cache_Map_Manager_T.cpp: + * ace/Cached_Connect_Strategy_T.cpp: + * ace/Caching_Strategies_T.cpp: + * ace/Caching_Utility_T.cpp: + * ace/Cleanup_Strategies_T.cpp: + * ace/Hash_Cache_Map_Manager_T.h: + * ace/Hash_Cache_Map_Manager_T.cpp: + * ace/QoS/QoS_Manager.h: + + Fix incorrect use of #pragma once. + + * ace/Functor.h: + * ace/Functor.inl: + * ace/Global_Macros.h: + * ace/ace_wchar.h: + * ace/config-win32-msvc.h: + + Add a new ACE_LACKS_NATIVE_WCHAR_T macro, which can be used to + check whether a platform supports overloading on wchar_t without + conflict. The existing ACE_WSTRING_HAS_USHORT_SUPPORT was + incorrectly being used for two purposes. This setting should let + us enable native wchar_t support on VC7+. + + * ace/OS_NS_time.inl: + + Add a static_cast because time_t is 64bit on some platforms + where long is 32 bit. + + * ace/OS_NS_unistd.inl: + + Mask out the X_OK(6) bit for the amode parameter of the access() + function because this bit is illegal on Win32 and will assert. + + * ace/config-win32-msvc-7.h: + + Clarify comment on ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION_EXPORT. + + * ace/config-win32-msvc-8.h: + + Disable deprecation warning 4996, because the + _CRT_SECURE_NO_DEPRECATE macro doesn't appear to work + correctly. + + * ace/streams.h: + + Add missing "using std::ios_base". + +Mon May 16 21:39:30 2005 Ossama Othman + + * ace/Ping_Socket.h (Ping_Socket): + + Corrected class name in Doxygen documentation. + +Mon May 16 19:18:14 2005 J.T. Conklin + + * configure.ac: + * examples/Makefile.am: + * protocols/Makefile.am: + * protocols/examples/Makefile.am: + + Adapt autoconf build to adjust to relocation of RMCast examples. + +Mon May 16 15:58:29 2005 Steve Huston + + * ACE-INSTALL.html: Corrected the names of the Sun compilers supported. + Thanks to Nick Todd for + bringing this error to our attention. + + * THANKS: Added Nick Todd to the Hall of Fame. + +Mon May 16 12:33:29 2005 Ossama Othman + + * THANKS: + + Added Mario Di Giacomo to the Hall of Fame. + + * ace/Service_Templates.cpp: + + Include "ace/SString.h" to pull in ACE_TString declaration. + Thanks to Mario Di Giacomo for + reporting the problem. + + * tests/Cache_Map_Manager_Test.cpp (find_test_cache): + + Fixed "variable may be used uninitialized" warning. + +Mon May 16 19:13:12 UTC 2005 Johnny Willemsen + + * ace/Malloc.h: + Doxygen improvement + +Mon May 16 10:57:57 2005 J.T. Conklin + + * ace/Makefile.am: + + Reset DEFAULT_INCLUDES to address ambiguity between system's + signal.h and semaphore.h headers and ACE's Signal.h and + Semaphore.h headers on case insensitive file systems. + + This may be the best setting for all ACE/TAO Makefile.am's, + but this is the only one that requires it. + +Mon May 16 10:56:31 2005 J.T. Conklin + + * configure.ac: + + Add ACE_LD_SEARCH_PATH and ACE_DLL_SUFFIX settings for + darwin/MacOSX. + + Add ACE_HAS_NANOSLEEP feature test check. + +Mon May 16 10:49:10 2005 J.T. Conklin + + * ace/POSIX_CB_Proactor.h: + + Add defined(__APPLE__) to conditional wrapping sigval_t type + definition. + +Mon May 16 10:45:18 2005 J.T. Conklin + + * m4/ace.m4 (ACE_CONFIGURATION_OPTIONS): + + Changed *win* patterns to *win32* to avoid matching darwin, + the MacOSX kernel. + +Mon May 16 15:13:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_mingw32.GNU: + * include/makeinclude/platform_sco5.0.0-nothread.GNU: + * include/makeinclude/platform_sunos4_g++.GNU: + * include/makeinclude/platform_sunos5_sunc++.GNU: + * include/makeinclude/platform_unixware_g++.GNU: + * include/makeinclude/platform_unixware_udk.GNU: + * include/makeinclude/platform_win32_dmc.GNU: + * include/makeinclude/platform_win32_interix.GNU: + Simplified these files by using the ?= operator. This sets a value + only when it is not set yet. + +Mon May 16 09:24:29 2005 Chad Elliott + + * bin/tao_orb_tests.lst: + + Enabled the Exposed_Policies test on Linux. + + * bin/tao_other_tests.lst: + + Added a !NO_IFR configuration to each IFR related test. + The IFR_Service will not run on MacOS X unless TAO is built + statically due to gcc's in ability to deal with template + instantiated singletons correctly. + + Added a NO_LOADAVG configuration to avoid running the load average + based test on platforms that do not have support for obtaining the + load average from the system. + + Added a configuration for NO_MCAST for machines that do not have + multicast capabilities or the multicast implementation is broken. + + Added !STATIC to two LoadManager tests to support static builds on + Windows. + +Mon May 16 14:19:12 UTC 2005 Johnny Willemsen + + * ace/Active_Map_Manager.h: + * ace/Base_Thread_Adapter.h: + * ace/Process.h: + * ace/QtReactor.h: + Doxygen improvement + + * ace/QtReactor.cpp: + Fixed compile problems with msvc6 + + * examples/ASX/Message_Queue/buffer_stream.cpp: + Use ACE_SIZE_T_FORMAT_SPECIFIER to print out an size_t variable + with ACE_OS::sprintf + + * include/makeinclude/platform_hpux_aCC.GNU: + * include/makeinclude/platform_hpux_gcc.GNU: + * include/makeinclude/platform_irix6.x_g++.GNU: + * include/makeinclude/platform_irix6.x_sgic++.GNU: + * include/makeinclude/platform_linux.GNU: + * include/makeinclude/platform_linux_borland.GNU: + * include/makeinclude/platform_linux_cxx.GNU: + * include/makeinclude/platform_macosx.GNU: + Simplified these files by using the ?= operator. This sets a value + only when it is not set yet. Also set some variables using ?= so + that our users can easily define their own values. + + * include/makeinclude/platform_linux_icc.GNU: + Disable warning 1572 (floating point warning), correct name of Qt + library and only set several variables when they are not set yet + +Mon May 16 09:01:07 2005 Chad Elliott + + * tests/Conn_Test.cpp: + + Force this test to use threads (instead of fork) on MacOS X. + + * tests/FIFO_Test.cpp: + + Sleep 1 second (as is done on AIX and HP-UX) before attempting to + receive from the fifo. + + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + + Set global_event_loop_thread_variable before activating the thread + that may use it. + + * tests/Naming_Test.cpp: + + Allow the user to determine the location of the context file by + the TMPDIR, TEMP and TMP environment variables. + + * tests/Pipe_Test.cpp: + * tests/Process_Mutex_Test.cpp: + + Use the value from argv[0] instead of hardcoding the exe name. + The hardcoded name does not work on Windows Release builds. + + * tests/Process_Strategy_Test.cpp: + + Use threads by default on HP-UX instead of fork. + Added a timeout for the recv() call in + Counting_Service::handle_input() for HP-UX only. + + * tests/run_test.lst: + + Added a configuration for NO_MCAST for machines that do not have + multicast capabilities or the multicast implementation is broken. + + * tests/SSL/aix_hack_for_main.cpp: + * tests/aix_hack_for_main.cpp: + + Removed these files. They are no longer needed due to MPC. + +Mon May 16 08:52:11 2005 Chad Elliott + + * bin/MakeProjectCreator/config/crosscompile.mpb: + + Added lib_warning, require_warning and avoid_warning to the list + of targets in the CROSS-COMPILE portion. + + * bin/MakeProjectCreator/config/rtcorbaevent.mpb: + + The RTCORBAEvent library requires the CosNaming library. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Support the MPC feature that will allow users to specify arbitrary + input file dependencies. + + Changed the OBJS setting to use $(notdir) only if the source file + contains ../ and added explicit rules for source files that are + located in subdirectories. + + * include/makeinclude/platform_macosx_panther.GNU: + + Explicitly default the threads variable to threads=1. This + was preventing ACE_TMCast from building. + Change the optimization option to -O2. -O3 was causing some + link problems in the IDL compiler. + + * include/makeinclude/platform_sunos5_sunc++.GNU: + + Allow users to override the inline and exceptions settings. + + * include/makeinclude/platform_vxworks5.5.x.GNU: + * include/makeinclude/rules.local.GNU: + + Provide better support for building for VxWorks on a Windows host + without Cygwin. + + * include/makeinclude/rules.lib.GNU: + + Changed the SHOBJS setting to be consistent with the OBJS setting. + Also, removed VLOBJS and SHOBJS1 which were redundant and set + exactly as SHOBJS was. + + * include/makeinclude/wrapper_macros.GNU: + + Set ec_typed_events to 1 by default. This matches the default for + MPC features. + + * bin/pch_cmd.pl: + + Removed this file. It is no longer necessary. + +Mon May 16 08:44:14 2005 Chad Elliott + + * ace/ACE.cpp: + * ace/config-irix6.x-sgic++.h: + * ace/config-qnx-neutrino.h: + * ace/config-qnx-rtp-common.h: + * ace/config-sunos5.5.h: + + Put ACE_LIB_TEXT around all ACE_CC_NAME definitions to support + wide character builds on Solaris, QNX and IRIX. + + * ace/ACE_export.h: + + Added support for SunCC 5.6. + + * ace/Multihomed_INET_Addr.h: + * ace/Multihomed_INET_Addr.cpp: + + Added an explicit constructor that takes a const char* for + symmetry with the ACE_INET_Addr class. + + * ace/Naming_Context.cpp: + + Removed a bug workaround for aCC A.03.04. It is no longer a + problem to specify other mmap base addresses when running + 64-bit HP-UX applications. + + * ace/OS_NS_Thread.inl: + * ace/config-macosx-panther.h: + * ace/Sched_Params.cpp: + + MacOS X has pthread_getschedparam but has the ACE_LACKS_SETSCHED + macro defined. I have added a new macro, + ACE_HAS_PTHREAD_SCHEDPARAM, that can be defined to use + pthread_getschedparam and pthread_setschedparam even when + ACE_LACKS_SETSCHED is defined. + + + * ace/OS_NS_Thread.cpp: + + Fixed an issue that arose within the static builds on Windows. + The ACE_Thread_Mutex static data member of the + TSS_Cleanup_Instance class was being used (in the + TSS_Cleanup_Instance constructor) before it was statically + initialized. I have switched it (and the condition variable + associated with it) to a pointer that is allocated the first + time into the TSS_Cleanup_Instance constructor. + + * ace/Process_Manager.cpp: + + Committing a change from Justin Michel . + The close() method failed to unregister the reactor on Windows. + + * ace/ace.mpc: + + Removed an unnecessary 'install' setting. + + * ace/config-sunos5.10.h: + + SunOS 5.10 has scandir (ACE_HAS_SCANDIR). + + * ace/os_include/sys/os_socket.h: + + When using LKSCTP, include before + to avoid macro problems. + +Sun May 15 11:57:56 2005 Douglas C. Schmidt + + * ace/INET_Addr.cpp (set): Changed the test from + + if (port_number < 0) + + to + + if (port_number == -1) + + to work around problems when (port_number & 0x80 != 0). Thanks + to Vemund Handeland for reporting + this. + +Mon May 16 11:35:00 2005 Boris Kolpackov + + * protocols/tests/tests.mwc: + * protocols/tests/RMCast/Protocol.h: + * protocols/tests/RMCast/RMCast.mpc: + * protocols/tests/RMCast/Receiver.cpp: + * protocols/tests/RMCast/Sender.cpp: + * protocols/tests/RMCast/run_test.pl: + + Added regression test with loss and reordering simulator + for RMCast. + +Mon May 16 11:26:14 2005 Boris Kolpackov + + * examples/RMCast/Makefile.am: + * examples/RMCast/Send_Msg/Makefile.am: + * examples/RMCast/Send_Msg/Protocol.h: + * examples/RMCast/Send_Msg/README: + * examples/RMCast/Send_Msg/Receiver.cpp: + * examples/RMCast/Send_Msg/Send_Msg.mpc: + * examples/RMCast/Send_Msg/Sender.cpp: + + Removed as part of the moving all RMCast-related + code to protocols/. + +Mon May 16 11:22:09 2005 Boris Kolpackov + + * protocols/examples/example_base.mpb: + * protocols/examples/examples.mwc: + * protocols/examples/RMCast/Makefile.am: + * protocols/examples/RMCast/Send_Msg/Makefile.am: + * protocols/examples/RMCast/Send_Msg/Protocol.h: + * protocols/examples/RMCast/Send_Msg/README: + * protocols/examples/RMCast/Send_Msg/Receiver.cpp: + * protocols/examples/RMCast/Send_Msg/Send_Msg.mpc: + * protocols/examples/RMCast/Send_Msg/Sender.cpp: + + Copyied from examples/RMCast as part of the moving + all RMCast-related code to protocols/. + + +Mon May 16 11:05:26 2005 Boris Kolpackov + + * examples/RMCast/Send_Msg/Receiver.cpp: + * examples/RMCast/Send_Msg/Sender.cpp: + + Showcase new features (see below). + +Mon May 16 10:58:43 2005 Boris Kolpackov + + * protocols/ace/RMCast/Acknowledge.cpp: + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Link.h: + * protocols/ace/RMCast/Protocol.cpp: + * protocols/ace/RMCast/Protocol.h: + * protocols/ace/RMCast/Retransmit.cpp: + * protocols/ace/RMCast/Socket.cpp: + * protocols/ace/RMCast/Socket.h: + + Implemented message aging and unavailability reporting, + reactor-compatible interface, and message size query + interface. + + * protocols/ace/RMCast/README: + + Protocol documentation. + +Sat May 14 06:05:55 2005 Johnny Willemsen + + * ACE version 5.4.5 released. + +Local Variables: +add-log-time-format: current-time-string +End: diff --git a/ACE/ChangeLogs/ChangeLog-05c b/ACE/ChangeLogs/ChangeLog-05c new file mode 100644 index 00000000000..3dfeb0ad918 --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-05c @@ -0,0 +1,6715 @@ +Fri Dec 30 16:39:46 2005 J.T. Conklin + + * ace/OS_NS_string.cpp: + * ace/OS_NS_string.h: + * ace/OS_NS_string.inl: + + Make ACE_OS::strdup(const char *) and ACE_OS::strdup(const + wchar_t *) inline. Provide ACE_OS::strdup_emulation(const + char *) and ACE_OS::strdup_emulation(const wchar_t *) for + systems that don't have a native (or type-safe equivalent) + strdup() and wcsdup() functions. + + * configure.ac: + + Replace scattered feature tests with calls to new + ACE_FUNC_STRCASECMP, ACE_FUNC_STRNCASECMP, ACE_FUNC_STRDUP, + ACE_FUNC_WCSCASECMP, ACE_FUNC_WCSNCASECMP, ACE_FUNC_WCSDUP + autoconf macros. + + * m4/ace_func.m4: + + New file. + + Feature tests for related features (e.g does function exist, + does it have a prototype, does it have const/non-const args, + etc.) are scattered all over configure.ac. This file is for + ACE_FUNC_FOO macros (similar to autoconf's own AC_FUNC_FOO), + which bring all these feature tests together in once place. + This clean-up makes the configure.ac easier to maintain at + the same time. + + Provide ACE_FUNC_STRCASECMP, ACE_FUNC_STRNCASECMP, + ACE_FUNC_STRDUP, ACE_FUNC_WCSCASECMP, ACE_FUNC_WCSNCASECMP, + ACE_FUNC_WCSDUP macros to start things off. + +Fri Dec 30 17:52:41 2005 Steve Huston + + * ace/Dev_Poll_Reactor.cpp (work_pending_i): Upon return from + epoll_wait(), don't blindly set start_pevents_ to events_. If + epoll_wait() returns -1, this erroneously sets start_pevents_ to + a value that may not make sense. + +Fri Dec 30 12:17:17 2005 J.T. Conklin + + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: + Fixed compile error due to expected implicit conversion + +Fri Dec 30 15:11:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.1.GNU: + Added rtp and pthread flags, when rtp is set to 1 we are building + for real time process model, when pthread is set to 1 we are + building with the pthread support + +Fri Dec 30 15:02:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_unistd.inl: + Added workaround for incorrect swab include for vxworks 6.1 + +Fri Dec 30 15:00:12 UTC 2005 Johnny Willemsen + + * ace/config-vxworks6.1.h: + * ace/config-vxworks6.2.h: + Updated after first testing with the RTP model + +Fri Dec 30 14:50:12 UTC 2005 Johnny Willemsen + + * examples/C++NPv2/Client_Logging_Daemon.cpp: + Fixed compile error due to expected implicit conversion + +Fri Dec 30 14:41:12 UTC 2005 Johnny Willemsen + + * ace/Time_Value.{h,inl}: + Added assignment operator for a time_t + +Fri Dec 30 12:40:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_sys_time.inl: + Instead of return -1 return ACE_Time_Value(-1) + +Fri Dec 30 12:34:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug_2345_Regression + +Fri Dec 30 11:41:12 UTC 2005 Johnny Willemsen + + * examples/Reactor/Misc/pingpong.cpp: + * examples/Reactor/Misc/pingpong.cpp: + Updated because the constructors of ACE_Time_Value are now explicit + +Fri Dec 30 11:11:12 UTC 2005 Johnny Willemsen + + * apps/Gateway/Gateway/Connection_Handler.{h,cpp}: + * apps/Gateway/Gateway/Event_Channel.cpp: + * apps/Gateway/Gateway/Gateway.cpp: + * apps/Gateway/Gateway/Options.{h,cpp}: + * netsvcs/lib/TS_Clerk_Handler.{h,cpp}: + * examples/APG/Timers/Timers.cpp: + * examples/APG/Timers/Upcall.cpp: + Updated timeouts to be a long and updated some code because + the constructors of ACE_Time_Value are now explicit + +Fri Dec 30 10:47:12 UTC 2005 Johnny Willemsen + + * ace/Time_Value.{h,inl}: + Added += and -= for a time_t + + * examples/APG/ThreadManagement/Priorities.cpp: + * examples/APG/ThreadManagement/Signals2.cpp: + * examples/APG/ThreadManagement/Signals.cpp: + * examples/APG/ThreadManagement/Coop_Cancel.cpp: + Initialise pointers with 0 + +Fri Dec 30 10:47:12 UTC 2005 Johnny Willemsen + + * ace/Time_Value.h: + Made all single argument constructors explicit to prevent implicit + conversions. + +Fri Dec 30 10:44:12 UTC 2005 Johnny Willemsen + + * ace/Profile_Timer.cpp (elapsed_rusage): + Use ACE_Time_Value to calculate the time difference. The type + of time could be FILETIME on Windows and it is not safe to just + use the - operator on that. This did compile because the + ACE_Time_Value seems to be used because of implicit conversions + +Fri Dec 30 10:05:12 UTC 2005 Johnny Willemsen + + * tests/Reference_Counted_Event_Handler_Test.cpp: + Explicit create ACE_Time_Value's when scheduling timers + +Fri Dec 30 09:58:12 UTC 2005 Johnny Willemsen + + * ace/Proactor.cpp: + When setting a ACE_Time_Value to zero use ACE_Time_Value::zero + instead of 0 + +Thu Dec 29 11:55:39 2005 Steve Huston + + * ace/DLL.h: Further Doxygen-ized and expanded the documentation. + + * ace/config-macros.h: Add __HP_aCC to the compilers that need to have + unreachable statements suppressed to avoid a compile diagnostic. + + * ace/config-hpux-11.00.h: Add ACE_LACKS_PERFECT_MULTICAST_FILTERING + for HP-UX 11iv2 (11.23). + +Thu Dec 29 11:04:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.5.x.GNU: + * include/makeinclude/platform_vxworks6.1.GNU: + Changed the way we set TAO_IDL + +Thu Dec 29 09:13:12 UTC 2005 Johnny Willemsen + + * ace/os_include/os_sched.h: + Another update to the way we detect if we have to define cpu_set_t, + older linux versions do have glibc2.3 but not this type. + +Wed Dec 28 11:47:17 2005 J.T. Conklin + + * m4/acinclude.m4: + + Remove some long commented-out macros that reimplemented core + autoconf functionality. + +Wed Dec 28 19:51:12 UTC 2005 Johnny Willemsen + + * ace/config-vxworks6.2.h: + Another update for the changes in 6.2 + +Wed Dec 28 19:25:12 UTC 2005 Johnny Willemsen + + * ace/config-vxworks6.2.h: + Removed some lacks macros which 6.2 should deliver according + to the documentation + +Wed Dec 28 11:21:55 2005 J.T. Conklin + + * configure.ac: + + Add ACE_LACKS_SCHED_H feature test. Use it in other tests + that #include . + +Wed Dec 28 11:08:18 2005 J.T. Conklin + + * m4/config_h.m4: + + Remove ACE_HAS_3_PARAM_WCSTOK autoconf header template. + + * configure.ac: + + Added description to AC_DEFINE for ACE_HAS_3_PARAM_WCSTOK. + +Wed Dec 28 19:00:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_Thread.cpp: + Rearranged some code to make the autoconf checks for set/get + affinity easier + +Wed Dec 28 10:56:42 2005 J.T. Conklin + + * configure.ac: + + Change ACE_HAS_CPU_SET_T feature test to look in . + + Add ACE_HAS_2_PARAM_SCHED_{GET,SET}AFFINITY feature tests. + +Wed Dec 28 16:08:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_Thread.cpp: + Introduced ACE_HAS_2_PARAM_SCHED_SETAFFINITY and + ACE_HAS_2_PARAM_SCHED_GETAFFINITY. Some glibc versions ship with + a two param version. + + * ace/config-linux-common.h: + Removed the setting for setaffinity/getaffinity based on + glibc version. Found that even with glibc 2.3 some systems had a + two param version, some 3. + +Wed Dec 28 12:22:12 UTC 2005 Johnny Willemsen + + * ace/os_include/os_sched.h: + Improved cpu_set_t typedef + +Wed Dec 28 11:32:12 UTC 2005 Johnny Willemsen + + * ace/Message_Block.h: + Doxygen improvements + +Wed Dec 28 10:24:12 UTC 2005 Johnny Willemsen + + * ace/config-linux-common.h: + Glicc 2.3 and newer also have sched_getaffinity and + sched_setaffinity. + +Wed Dec 28 10:11:12 UTC 2005 Johnny Willemsen + + * ace/config-linux-common.h: + Glibc 2.3 seems to have cpu_set_t + +Wed Dec 28 09:52:12 UTC 2005 Johnny Willemsen + + * ace/os_include/os_unistd.h: + Made some workarounds dependent on BCB version + + * ace/os_include/os_sched.h: + If ACE_HAS_CPU_SET_T is not defined then typedef cpu_set_t. + If your platforms has the type cpu_set_t, then set this define + in the config file + + * ace/OS_NS_Thread.{h,cpp}: + Added thr_set_affinity and thr_get_affinity to bind a thread + to a certain CPU. This is part of the extensions proposed in + bugzilla 2342. Thanks to Robert Iakobashvili + for these extensions. + + This will probably break some builds, where we have to add + ACE_HAS_CPU_SET_T to the config file. + + * ace/README: + Documented ACE_HAS_CPU_SET_T + +Tue Dec 27 19:21:19 2005 J.T. Conklin + + * m4/ace.m4: + + Add ACE_ENABLE_CDR_SWAP_ON_READ, ACE_ENABLE_CDR_SWAP_ON_WRITE, + ACE_ENABLE_CDR_ALIGNMENT, ACE_ENABLE_STRDUP_EMULATION, and + ACE_ENABLE_WCSDUP_EMULATION to support --enable options of + the same name. Allows users to configure these aspects of + ACE without editing the generated config.h header. + + * configure.ac: + + Fix typo in ACE_LACKS_MADVISE_PROTOTYPE feature test. + +Tue Dec 27 15:14:05 2005 J.T. Conklin + + * THANKS: Added Vladimir Panov to the Hall of Fame. + +Tue Dec 27 14:49:20 2005 J.T. Conklin + + * m4/config_h.m4: + + Remove ACE_HAS_STRDUP_EMULATION autoconf header template. + + * configure.ac: + + Changed strdup feature test to set ACE_LACKS_STRDUP instead + of ACE_HAS_STRDUP_EMULATION. + + Added (missing) ACE_LACKS_STRCHR feature test. + + * ace/README: + + Update ACE_HAS_STRDUP_EMULATION description. Added + ACE_HAS_WCSDUP_EMULATION, ACE_LACKS_STRCHR, ACE_LACKS_WCSCHR, + ACE_LACKS_STRDUP, and ACE_LACKS_WCSDUP descriptions. + + * ace/OS_Memory.h: + + Updated comment explaining that users may want to set + ACE_HAS_STRDUP_EMULATION if they need to control what memory + allocator is used to include ACE_HAS_WCSDUP_EMULATION. + + * ace/OS_NS_string.cpp: + + The ACE_HAS_STRDUP_EMULATION feature test macro was being used + for two purposes. One is for systems which don't have a native + strdup(). The other is for when the user needs to control/ + override what memory allocator is used. + + I've separated these options by adding a new ACE_LACKS_STRDUP + feature test macro. ACE's emulated strdup() implementation is + used if either ACE_LACK_STRDUP or ACE_HAS_STRDUP_EMULATION is + set. + + Added ACE_HAS_WCSDUP_EMULATION, similar to the above, for + symmetry with the wide character version. + +Tue Dec 27 14:17:56 2005 J.T. Conklin + + * m4/config_h.m4: + + Remove ACE_HAS_SET_T_ERRNO autoconf header template. + + * configure.ac: + + Change ACE_HAS_SET_T_ERRNO feature test to use "standard" + ACE_CHECK_HAS_FUNC() macro. + +Tue Dec 27 13:36:22 2005 J.T. Conklin + + * ace/os_include/sys/os_mman.h: + + Provide madvise prototype if ACE_LACKS_MADVISE_PROTOTYPE. + + * configure.ac: + + Added ACE_LACKS_MADVISE_PROTOTYPE feature test. + + This should fix bugzilla bug 2274. Thanks to Steve Williams + < steve at telxio dot com > for reporting this and providing + an initial patch. + +Tue Dec 27 13:29:27 2005 J.T. Conklin + + * apps/gperf/Makefile.am: + + Regenerated. + + * apps/gperf/gperf.mpc: + + New file. Adds rule for building/installing gperf.1 manpage. + Partially addresses bugzilla bug 2280. + +Tue Dec 27 12:45:37 2005 J.T. Conklin + + * configure.ac: + + Fix typo in last change. + +Tue Dec 27 12:41:00 2005 J.T. Conklin + + * configure.ac: + + Add ACE_HAS_CPU_SET_T, ACE_HAS_PTHREAD_GETAFINITY_NP, + ACE_HAS_PTHREAD_SETAFFINITY_NP, ACE_HAS_SCHED_GETAFFINITY, + and ACE_HAS_SCHED_SETAFFINITY feature tests for a patch + Johnny is preparing. + +Tue Dec 27 11:11:15 2005 J.T. Conklin + + * m4/config_h.m4: + + Remove ACE_LACKS_SYSTEM_H autoconf header template. + + * configure.ac: + + Remove ACE_LACKS_SYSTIME_H feature test, and the use of + ACE_LACKS_SYSTIME_H in other feature test macros. C.f. + + Tue Dec 27 14:50:12 UTC 2005 Johnny Willemsen + +Tue Dec 27 11:06:00 2005 J.T. Conklin + + * configure.ac: + + Add ACE_LACKS_ALARM feature test. + +Tue Dec 27 15:26:12 UTC 2005 Johnny Willemsen + + * ace/config-vxworks6.1.h: + * ace/config-vxworks6.2.h: + Removed ACE_LACKS_DUP2 + +Tue Dec 27 14:50:12 UTC 2005 Johnny Willemsen + + * ace/config-cygwin32.h: + * ace/config-dgux-4.11-epc.h: + * ace/config-dgux-4.x-ghs.h: + * ace/config-freebsd.h: + * ace/config-irix5.3-g++.h: + * ace/config-irix5.3-sgic++.h: + * ace/config-irix6.x-common.h: + * ace/config-linux-common.h: + * ace/config-macosx-panther.h: + * ace/config-macosx-tiger.h: + * ace/config-macosx.h: + * ace/config-mvs.h: + * ace/config-openbsd.h: + * ace/config-psos-diab-mips.h: + * ace/config-psos-diab-ppc.h: + * ace/config-psos-diab.h: + * ace/config-psos-tm.h: + * ace/config-psosim-g++.h: + * ace/config-qnx-neutrino.h: + * ace/config-qnx-rtp-62x.h: + * ace/config-qnx-rtp-pre62x.h: + * ace/config-sco-5.0.0-mit-pthread.h: + * ace/config-sco-5.0.0.h: + * ace/config-sunos4-g++.h: + * ace/config-sunos4-sun4.1.4.h: + * ace/config-sunos4-sun4.x.h: + * ace/config-tandem-nsk-mips-v2.h: + * ace/config-tandem-nsk-mips-v3.h: + * ace/config-tandem.h: + * ace/config-tru64.h: + * ace/config-unixware-2.1.2-g++.h: + * ace/config-unixware-7.1.0.h: + * ace/config-unixware-7.1.0.udk.h: + * ace/config-vxworks5.x.h: + * ace/config-vxworks6.2.h: + * ace/config-win32-interix.h: + * ace/README: + Removed ACE_LACKS_SYSTIME_H, it is not used anymore in ACE + +Tue Dec 27 14:31:12 UTC 2005 Johnny Willemsen + + * ace/config-vxworks6.1.h: + * ace/config-vxworks6.2.h: + Added initial version of VxWorks 6.2 config file. This is updated + based on the documentation, no testing has been done + +Tue Dec 27 13:27:12 UTC 2005 Johnny Willemsen + + * ace/os_include/sys/os_select.h: + Only include selectLib for VxWorks when VxWorks doesn't deliver + sys/select.h + + * ace/OS_NS_unistd.inl: + Introduced ACE_LACKS_ALARM to make it easier to determine which + platform has alarm and which not + + * ace/config-chorus.h: + * ace/config-psos-diab.h: + * ace/config-win32-common.h: + Added ACE_LACKS_ALARM + + * ace/config-vxworks6.1.h: + Added some documentation about defines which we could drop for + VxWorks 6.2 according to the documentation + +Tue Dec 27 11:37:12 UTC 2005 Johnny Willemsen + + * ace/config-vxworks6.1.h: + VxWorks 6.1 has two models, kernel and real time process (rtp). + Based on the model some API's are not available. + +Tue Dec 27 09:42:12 UTC 2005 Johnny Willemsen + + * ace/Time_Value.{h,inl}: + Changed the first argument of the constructor accepting two + longs to time_t to fix 64bit conversion warnings + +Sun Dec 25 09:04:50 2005 Douglas C. Schmidt + + * Merry Christmas, 2005!!!! + +Fri Dec 23 13:16:12 UTC 2005 Johnny Willemsen + + * ace/config-win32-common.h: + Added ACE_LACKS_SCHED_H, windows doesn't have sched.h + +Fri Dec 23 13:04:12 UTC 2005 Johnny Willemsen + + * ace/INET_Addr.inl: + Fixed warning about unreachable code when ipv6 is enabled + +Fri Dec 23 11:09:12 UTC 2005 Johnny Willemsen + + * ace/Sock_Connect.cpp: + Added missing defined + +Fri Dec 23 08:02:12 UTC 2005 Johnny Willemsen + + * tests/Buffer_Stream_Test.cpp: + Fixed ambiguity errors with vc6 + +Fri Dec 23 07:55:12 UTC 2005 Johnny Willemsen + + * ace/Time_Value.{h,inl}: + Removed the set with time_t and changed the set with two longs to + pass seconds as time_t. This should work on all platforms fine. + Thanks to JT for the ideas. + + * ace/System_Time.cpp: + Use the set with two arguments + +Thu Dec 22 18:33:29 2005 Steve Huston + + * include/makeinclude/platform_aix_ibm.GNU: Change Visual Age 6 to use + -qtemplateregistry also. It's faster and doesn't require the same + strict source organization of templates that -qtempinc does. + Also stop using the aixshr hack to strip warnings out of the + linker output - it's not needed with -qtemplateregistry. + Try removing -qstaticinline - this was an attempt to stop some of + the duplicate symbol warnings that -qtempinc triggered; hopefully, + removing this will let the linker/compiler unify singleton instances. + +Thu Dec 22 14:35:12 2005 J.T. Conklin + + * bin/MakeProjectCreator/config/rtcorbacommon.mpb: + + Add $(srcdir) relative include path. + +Thu Dec 22 14:06:07 2005 Chad Elliott + + * bin/tao_orb_tests.lst: + + Added Portable_Interceptors/Processing_Mode_Policy/Collocated and + Portable_Interceptors/Processing_Mode_Policy/Remote to the list. + +Thu Dec 22 19:09:12 UTC 2005 Johnny Willemsen + + * examples/Reactor/Misc/notification.cpp: + * examples/Reactor/Misc/test_signals_1.cpp: + Fixed ambiguity warnings + + * ace/Time_Value.{h,cpp,inl}: + Don't pass time_t as reference to set, just by value, moved the + method to the inline file and set tv_usec to 0, thanks to JT + for this suggestions. + +Thu Dec 22 10:43:23 2005 Chad Elliott + + * bin/cle.pl: + * bin/ChangeLogEditor/CVSFileLocator.pm: + * bin/ChangeLogEditor/ChangeLogEntry.pm: + * bin/ChangeLogEditor/FileLocator.pm: + * bin/ChangeLogEditor/FileLocatorFactory.pm: + * bin/ChangeLogEditor/SVNFileLocator.pm: + + Added support for Subversion. It will automatically switch to + svn if it detects that it is being run in a directory + controlled by Subversion. + + * bin/DependencyGenerator/GNUObjectGenerator.pm: + * bin/DependencyGenerator/MakeObjectGenerator.pm: + + Switch to actual arrays inside the process() method and return the + reference. It is faster to push onto an array than an array + reference. + + * bin/MakeProjectCreator/config/cidlc.mpb: + + Added nmake to the specific section for compile_flags. + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Added .PHONY when creating named targets to avoid problems with + target executables that have the same name as the project. + + * bin/depgen.pl: + + Added a -i option to not print an error if no source files are + provided. + + * include/makeinclude/rules.local.GNU: + + Modified to pass the -i option to depgen.pl and to pass the -n + option to depgen.pl if inline=1. + +Thu Dec 22 12:37:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_Thread.cpp: + Use taskName to get the task name under VxWorks instead of directly + using the TCB struct + + * ace/Sock_Connect.cpp: + Use for VxWorks also the unix way of retrieving the interfaces, the + VxWorks specific way doesn't work with VxWorks 6.1 anymore + +Thu Dec 22 12:30:12 UTC 2005 Johnny Willemsen + + * ace/Time_Value.{h,cpp}: + Added set that accepts time_t, time_t is a 64bit type under + Windows64. + + * ace/System_Time.cpp: + Use the new Time_Value::set method that accepts time_t + +Thu Dec 22 12:22:12 UTC 2005 Johnny Willemsen + + * ace/WIN32_Proactor.cpp: + Added workarounds for vc6 which doesn't have ULONG_PTR + +Wed Dec 21 06:40:29 2005 Steve Huston + + * ace/Asynch_Acceptor.cpp (set_handle): Added return 0 to success case. + Also see: + Fri Dec 16 12:38:27 2005 Douglas C. Schmidt + +Thu Dec 22 06:12:39 2005 Steve Huston + + * ace/SSL/SSL_SOCK_Stream.cpp: Add missing #include "ace/OS_Memory.h" + to see ACE_NEW_RETURN. Also changed the type used with + ioctl (, FIONREAD, ) from u_long to ACE_UINT32 for portability. + + * apps/JAWS2/JAWS/Headers.cpp: Add missing + #include "ace/OS_NS_stdlib.h" to see ACE_OS::free(). + + * apps/JAWS2/JAWS/IO.cpp: Add missing #include "ace/OS_NS_string.h" + to see ACE_OS::memcpy(). Add missing #include "ace/Min_Max.h" to see + ACE_MIN. + + * apps/JAWS2/JAWS/Server.cpp: Add missing #include "ace/OS_NS_string.h" + to see ACE_OS::strcpy(). + + * apps/JAWS2/JAWS/Parse_Headers.cpp: Add missing + #include "ace/Log_Msg.h". + + * examples/APG/Containers/Map_Manager.cpp: + * examples/APG/Containers/Map_Manager_Specialization.cpp: Add missing + #include "ace/Log_Msg.h". + + * examples/IPC_SAP/SSL_SAP/SSL-server-poll.cpp: Add missing + #include "ace/OS_NS_stdlib.h" for ACE_OS::malloc()/free(). + +Wed Dec 21 12:44:19 2005 J.T. Conklin + + * THANKS: Add Jonathan Sprinkle to the Hall of Fame. + + * configure.ac: + + Define ACE_LACKS_NAMED_POSIX_SEM if platform lacks any of + sem_open(), sem_close(), or sem_unlink() are undefined. This + should help automake builds on Cygwin, which does not provide + sem_unlink(). Thanks to Jonathan Sprinkle who provided the + failing config.log. + +Wed Dec 21 12:32:10 2005 J.T. Conklin + + * ace/Time_Value.inl: + + Use g++'s __builtin_constant_p() predicate to avoid calling + ::normalize() if both arguments to ACE_Time_Value::set(long, + long) are already "normalized". This avoids an unnecessary + method call when initializing ACE_Time_Value constants. + +Wed Dec 21 11:40:53 2005 J.T. Conklin + + * ace/OS_NS_Thread.cpp (ACE_OS::thr_create): + + If ACE_HAS_PTHREAD_ATTR_SETCREATESUSPEND_NP and THR_SUSPENDED + is set, use pthread_attr_setcreatesuspend_np() and set thread + creation attributes so thread is started in "suspended" state. + + * configure.ac: + + Add feature test for ACE_HAS_PTHREAD_ATTR_SETCREATESUSPSEND_NP. + + * ace/README: + + Document ACE_HAS_PTHREAD_ATTR_SETCREATESUSPEND_NP. + +Wed Dec 21 19:17:12 UTC 2005 Johnny Willemsen + + * netsvcs/clients/Naming/Client/Client_Test.cpp: + Replaced assert with ACE_ERROR + +Wed Dec 21 19:14:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/vc8nmake.mpb: + With vc8 and nmake we have to pass different compiler flags then + with vc6 and vc71. To make it easier to use, you can regenerate + the nmake files for vc8 using: -type nmake -base vc8nmake -recurse + This way you get the needed flags for vc8 + +Wed Dec 21 18:45:12 UTC 2005 Johnny Willemsen + + * ace/WFMO_Reactor.cpp: + * protocols/ace/HTBP/HTBP_Session.cpp: + Initialise pointer with 0 + + * include/makeinclude/platform_vxworks6.1.GNU: + * include/makeinclude/platform_vxworks5.5.x.GNU: + Use EXEEXT instead of .exe when setting TAO_IDL + +Wed Dec 21 18:42:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added bug_2328_regression + +Tue Dec 20 17:24:39 2005 Steve Huston + + * ace/config-aix-4.x.h: Define ACE_TEMPLATES_REQUIRE_SOURCE if + compiling with an IBM compiler and __TEMPINC__ is not defined. + This covers -qnotempinc and -qtemplateregistry cases (for XL C++ 7). + Define ACE_TEMPLATES_REQUIRE_PRAGMA if compiling with an IBM + compiler and -qtempinc was specified on the command line. This + unifies proper handling and covers both ACE+TAO builds and users' + inclusion of ACE+TAO in user projects regardless of which template + model chosen. + + * ace/Local_Name_Space.cpp: Add #include "ace/ACE.h" to see + ACE::hash_pjw(). + + * ace/Malloc_T.h: Add #include "ace/Malloc_Base.h" to see + ACE_Allocator. + + * ace/POSIX_CB_Proactor.cpp: Add #include "ace/OS_NS_sys_time.h" to see + ACE_OS::gettimeofday(). + + * ace/Sock_Connect.cpp: Removed hack at this compiler version. + + * ace/SString.inl: Add #include "ace/OS_NS_stdlib.h" to see + ACE_OS::free(). + + * ace/SString.cpp: Add #include "ace/OS_Memory.h" to see + ACE_NEW_RETURN. Change #include "ace/Malloc.h" to "ace/Malloc_T.h" + to pick up needed symbols. + + * include/makeinclude/platform_aix_ibm.GNU: Added compiler-specific + section for XL C++ 7. Also removed the explicit setting of + ACE_TEMPLATES_REQUIRE_[PRAGMA|SOURCE]. The proper one to use is + determined by whether or not -qtempinc is specified to the compiler. + Since this is knowable at compile time and what a user does may + not match what the ACE/TAO build does, proper selection of the + correct setting is moved to config-aix-4.x.h. + + * include/makeinclude/rules.local.GNU: Add templateregistry.* to the + file cleanup list. XL C/C++ 7 builds use -qtemplateregistry and + specify a name templateregistry.$(MAKEFILE). + +Tue Dec 20 20:24:39 2005 Douglas C. Schmidt + + * ace/UUID.cpp (ACE_Utils): Move the lock to the top of the + UUID_Generator::get_timestamp() method to avoid subtle race + conditions. Thanks to Howard Finer for + this fix. + +Fri Dec 16 12:38:27 2005 Douglas C. Schmidt + + * ace/Asynch_Acceptor.{h,cpp}: Added an int return value to + set_handle() so that errors can be propagated back to callers. + Thanks to Eyal Car for this fix. + This closes bugid 2261. + +Wed Dec 21 16:19:12 UTC 2005 Johnny Willemsen + + * ace/CDR_Base.cpp: + * ace/CDR_Stream.cpp: + Fixed 64bit conversion warnings from int to long + + * ace/config-vxworks6.1.h: + VxWorks 6.1 defines MAP as CPU type, if it is defined, + undef it so that we can use MAP as typedef throughout ACE/TAO + + * ace/Configuration_Import_Export.cpp: + Fixed 64bit conversion warning from u_int to u_long + + * ace/Malloc_T.cpp: + Added some checks for valid pointers before calling memset. + Thanks to Oh Yoon Sik for reporting + this. + + * ace/OS_NS_sys_stat.inl (mkdir): + Replaced c-style cast with C++ cast + + * ace/Basic_Types.h: + Removed ptr_arith_t, it is not used anymore + + * ace/OS_NS_time.cpp: + Fixed the month calculation for WinCE. + Thanks to Oh Yoon Sik for reporting + this. + + * ace/WIN32_Proactor.cpp: + The code for ACE_WIN64 should also be used for ACE_WIN32 so + zapped the ACE_WIN32 specific case + + * include/makeinclude/platform_linux_icc.GNU: + When optimizations are disabled pass -O2 to the compiler. Always + disable the floating point optimizations to get correct floats + in the IDL compiler. + + * examples/Reactor/Misc/test_demuxing.cpp: + Instead of an ACE_ASSERT, use ACE_ERROR_RETURN + + * tests/Basic_Types_Test.cpp: + Use ptr_diff_t instead of ptr_arith_t + + * tests/Buffer_Stream_Test.cpp: + Initialise pointers with 0 + + * etc/tao.doxygen: + Expand all emulated exception macros, that will improve our + documentation. I will recheck doxygen later and if things look + correct I will apply the same change to the other configuration + files. + + * bin/MakeProjectCreator/modules/BorlandProjectCreator.pm: + Updated because of changes to MPC. + +Tue Dec 20 08:02:03 2005 Simon McQueen + + * ACE version 5.4.8 released. + +Mon Dec 20 09:58:00 UTC 2005 Simon Massey + + * bin/make_release: + Removed the $0 from the "Generated by " comment inserted into + the Version.h files. + +Mon Dec 19 16:50:00 UTC 2005 Simon Massey + + * bin/make_release: + Removed the extra end of line inserted into the + Id: ChangeLog,v 4.9518 2005/12/20 10:03:35 bugzilla Exp + comment from all of the Version.h generators. (Around the same + line as before.) + +Mon Dec 19 14:40:00 UTC 2005 Simon Massey + + * bin/make_release: + Removed the #include "ace/Versioned_Namespace.h" generator + from line 643 (it wasn't adding the correct end of line + and concensous was that it was actually in error anyway). + +Thu Dec 15 08:08:31 2005 Steve Huston + + * ace/Asynch_IO.h: Clarified arguments and return value for + ACE_Asynch_Read_Stream::open. + +Thu Dec 15 08:06:29 2005 Steve Huston + + * ace/Service_Templates.cpp: Only #include headers if we need to + instantiate templates; i.e., if using either form of explicit + template instantiation. This avoids the sigaction issue with + HP aC++ A.03.56. + +Tue Dec 13 12:13:26 2005 Douglas C. Schmidt + + * COPYING: Updated this file to mention compliance issues wrt the + new "The Energy Policy Act of 2005". Thanks to Malcolm Spence + for providing this. + +Tue Dec 13 18:38:12 UTC 2005 Johnny Willemsen + + * etc/tao_cosnotification.doxygen: + Also parse the subdirectories below Notify and also add inline + files, the generated doxygen docu was not complete + +Tue Dec 13 00:54:04 2005 Ossama Othman + + * bin/MakeProjectCreator/config/tao_versioning_idl_defaults.mpb: + + New MPC base project containing necessary versioned namespace + related TAO_IDL flags for PIDL and IDL files in core TAO + libraries and TAO orbsvcs libraries. + +Mon Dec 12 15:31:50 2005 Ossama Othman + + * ace/ace_for_tao.mpc: + + Added "nmake" to the list of Windows-based build types that + should be considered when adding Windows-specific sources to the + ace_for_tao subset. + +Mon Dec 12 15:23:29 2005 Ossama Othman + + * tests/tests.mpc (UPIPE_SAP_Test): + + Disable this test in the ace_for_tao configuration. It depends + on features not found in the ace_for_tao subset. + +Mon Dec 12 14:15:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/compiler.bor: + Only when we build without VCL support add _NO_VCL to the compiler + flags + +Mon Dec 12 13:01:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/vcl.mpb: + Added verbatim VCL=1 to this base project. This way the correct + startup objects are linked with the application when vcl is + used + +Sun Dec 11 18:03:05 2005 Ossama Othman + + * ace/UPIPE_Stream.h (MT_Stream): + + Moved this typedef out of the global namespace to the + ACE_UPIPE_Stream class. It is only used within this class. + Doing so also addresses global namespace pollution issues. + + * examples/ASX/Event_Server/Event_Server/event_server.cpp: + * examples/ASX/UPIPE_Event_Server/event_server.cpp: + + Reinstated local MT_Stream typedefs. The global namespace + pollution fix described above allows this. Fixes compile-time + error in single threaded builds. + +Thu Dec 8 07:20:25 2005 Ossama Othman + + * ace/Dynamic.h: + * ace/OS_main.cpp: + * ace/OS_main.h: + * ace/TSS_Adapter.h: + * ace/QoS/QoS_Decorator.cpp: + * ace/QoS/QoS_Decorator.h: + * ace/QoS/QoS_Manager.cpp: + * ace/QoS/QoS_Manager.h: + * ace/QoS/QoS_Session.h: + * ace/QoS/QoS_Session_Factory.cpp: + * ace/QoS/QoS_Session_Factory.h: + * ace/QoS/QoS_Session_Impl.cpp: + * ace/QoS/QoS_Session_Impl.h: + * ace/QoS/QoS_Session_Impl.i: + * ace/QoS/SOCK_Dgram_Mcast_QoS.cpp: + * ace/QoS/SOCK_Dgram_Mcast_QoS.h: + * ace/QoS/SOCK_Dgram_Mcast_QoS.i: + + Fixed versioned namespace support. The versioning macros calls + were missing. + +Thu Dec 8 08:28:12 UTC 2005 Johnny Willemsen + + * examples/APG/ThreadSafety/threadsafety.mpc: + Fixed error in this mpc project which caused build errors with + borland + +Wed Dec 7 05:50:01 2005 Ossama Othman + + * apps/JAWS/clients/Caching/caching.mpc: + * apps/JAWS2/JAWS/jaws2.mpc: + * bin/MakeProjectCreator/config/winregistry.mpb: + * examples/APG/Containers/containers.mpc: + * examples/APG/Svc_Config/svc_config.mpc: + * examples/APG/ThreadSafety/threadsafety.mpc: + * examples/C++NPv2/C++NPv2.mpc: + * examples/QOS/Diffserv/QOS_Diffserv.mpc: + * examples/Reactor/Proactor/Proactor.mpc: + * examples/Reactor/WFMO_Reactor/WFMO_Reactor.mpc: + * tests/tests.mpc: + + Disable some projects in these MPC files when "ace_for_tao" is + enabled. + +Tue Dec 6 21:34:03 2005 Ossama Othman + + * examples/ASX/Event_Server/Event_Server/event_server.cpp: + * examples/ASX/UPIPE_Event_Server/event_server.cpp: + + Removed duplicate "MT_Stream" typedef that made the same typedef + in `ace/UPIPE_Stream.h' ambiguous. Fixes a versioned namespace + build error. + +Tue Dec 6 18:40:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/acedefaults.mpb: + For vc8 set ExceptionHandling to 2. This enabled the structured + exception handling. Normally vc8 doesn't catch structured exceptions + but we except so for some tests and else the disabling of the + win32 error windows doesn't work. This fixes bugzilla [BUG:2290] + See also http://www.codecomments.com/archive292-2005-8-578262.html + for backgroup. Thanks to Steve Huston and Chad Elliott for + proposing to handle this in this mpb file instead of in the vc8 + base mpc template + +Tue Dec 6 01:55:12 2005 Ossama Othman + + * ace/config-macros.h: + + Removed "#pragma once" directive. The necessary preprocessor + symbol definitions necessary to disable this directive + are generally C++ preprocessor/compiler-specific. This + prevents proper configuration of this #pragma in the + presence of a C compiler. + +Mon Dec 5 14:46:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_stdio.inl: + With Borland also just use tempnam instead of _tempname + +Mon Dec 5 08:44:12 UTC 2005 Johnny Willemsen + + * ace/config-win32-borland.h: + * ace/config-win32-dmc.h: + * ace/OS_NS_stdio.inl: + Introduced new macros ACE_HAS_NONCONST_TEMPNAM and + ACE_HAS_NONCONST_FDOPEN. Borland C++ Builder 6 and previous had + non compliant non const methods but this is now corrected in + BDS2006, so instead of hacking also a version check in the + OS_NS_stdio.inl just check for a define and set this in the borland + config file. Also DMC seems to have one incorrect signature + so also set it there. + +Sun Dec 4 06:49:59 2005 Ossama Othman + + * ace/SSL/SSL_Context.cpp: + + Use an ACE_Thread_Mutex instead of ACE_Mutex. The former is + faster and lighter weight. + +Sat Dec 3 17:56:04 2005 Ossama Othman + + * ace/SSL/SSL_Asynch_BIO.cpp: + * ace/SSL/SSL_Asynch_Stream.h: + + Replaced ACE_SSL_bio_{read,write} functors with a single + structure containing static read() and write() methods. + Functors are overkill in this case. + + Documented why a structure is used instead of a free + function. + + * ace/SSL/SSL_Context.h: + + Removed obsolete comment. + +Sat Dec 3 11:51:36 2005 Ossama Othman + + * ace/Base_Thread_Adapter.h: + + Removed unnecessary "ace/Global_Macros.h" include directive in + versioned namespace case. + + * ace/SSL/SSL_Asynch_BIO.cpp: + + Fixed versioned namespace support for free functions in this + file. + + (BIO_s_Asynch): + + Removed this unnecessary function. It simply returned the + address of a global object. Just take the address directly in + the calling code. + + (BIO_new_ACE_Asynch, ACE_SSL_make_BIO): + + Renamed BIO factory function to "ACE_SSL_make_BIO", which is + more consistent with ACE naming conventions. Removed extern "C" + declaration, as well, since there's no need for it to be so. + + (ACE_SSL_bio_read, ACE_SSL_bio_write): + + New functors that that make the necessary calls on the + ACE_SSL_Asynch_Stream object. + + (ACE_Asynch_BIO_read, ACE_Asynch_BIO_write): + + Use new ACE_SSL_bio_{read,write} functors instead of making + direct calls on the ACE_SSL_Asynch_Stream object. + + * ace/SSL/SSL_Asynch_BIO.h: + + Moved extern "C" BIO callback function prototypes to + SSL_Asynch_BIO.cpp. There's no need for them to be visibile to + the user. + + Renamed BIO factory function to "ACE_SSL_make_BIO", which is + more consistent with ACE naming conventions. Removed extern "C" + declaration, as well, since there's no need for it to be so. + + * ace/SSL/SSL_Asynch_Stream.cpp (open): + + Updated name of BIO factory function. + + * ace/SSL/SSL_Asynch_Stream.h: + + Removed unnecessary free function prototypes. + + (ACE_SSL_Asynch_Stream): + + Replaced friend function declarations with friend structure + (used as functors) declarations. Works around scope qualifier + problems in Sun compilers when used on free functions. + +Fri Dec 2 10:27:47 2005 J.T. Conklin + + * bin/msvc_static_order.lst: + + Add RTEventLogAdmin project. + +Fri Dec 2 13:14:12 UTC 2005 Johnny Willemsen + + * ace/Task.inl: + Replaced c-style casts with C++ const_cast + +Fri Dec 2 11:39:12 UTC 2005 Johnny Willemsen + + * ace/os_include/sys/os_stat.h: + * ace/os_include/sys/os_timeb.h: + Made some workarounds for Borland specific on the BCB version. + That way we can remove them easier in the future when we + deprecated certain releases + +Fri Dec 2 01:25:52 2005 Ossama Othman + + * ace/Versioned_Namespace.h: + + Update preprocessor check to use new config-macros.h specific + include guard preprocessor symbol. + + * ace/config-macros.h: + * ace/config-lite.h: + + Moved all macros, preprocessor symbols and some non-C++-specific + typedefs to the new `config-macros.h' header. Allows + configuration macros/values to be used in C sources. + + * ace/config-all.h: + + Removed redundant "ace/ace_wchar.h" include directive. It's + already included by `config-lite.h'. + + * ace/config-aix-4.x.h: + * ace/config-chorus.h: + * ace/config-cygwin32.h: + * ace/config-linux-common.h: + * ace/config-osf1-4.0.h: + * ace/config-rtems.h: + * ace/config-sunos5.5.h: + * ace/config-vxworks5.x.h: + * ace/config-vxworks6.1.h: + + Relaxed unsupported compiler preprocessor error for non-C++ + compilers. Simplifies use of configuration macros/values in + presence of C compiler. + + * ace/Makefile.am: + * ace/ace.mpc: + + Added new config-macros.h header to the appropriate header + lists. + +Fri Dec 2 00:43:12 2005 Ossama Othman + + * ace/Module.h: + * apps/JAWS/server/HTTP_Request.h: + * apps/JAWS/server/IO.h: + * apps/JAWS2/JAWS/Cache_Object.h: + * apps/JAWS2/JAWS/IO.h: + * apps/JAWS2/JAWS/IO_Acceptor.h: + * apps/JAWS2/JAWS/IO_Handler.h: + * apps/soreduce/Obj_Module.h: + * examples/APG/Containers/Hash_Map_Hash.h: + * examples/APG/Containers/RB_Tree_Functors.h: + * examples/APG/ThreadPools/Request_Handler.h: + * examples/ASX/Event_Server/Event_Server/Options.h: + * examples/ASX/Event_Server/Event_Server/event_server.cpp: + * examples/C++NPv1/Iterative_Logging_Server.h: + * examples/C++NPv1/Logging_Handler.h: + * examples/C++NPv1/Logging_Server.h: + * examples/C++NPv2/Logging_Handler.h: + * examples/Shared_Malloc/Malloc.h: + + More versioned namespace build fixes. + +Thu Dec 1 08:07:23 2005 Douglas C. Schmidt + + * ace/Service_Config.cpp (open_i): + * ace/Service_Config.h (ACE_Service_Config): Don't try to + register a signal handler if the signal number is < 0! Thanks + to Brian Raven for this fix. + +Wed Nov 30 13:37:59 2005 William Otte + + * bin/MakeProjectCreator/config/cidlc.mpb + + Updated to make thie base project consistent with the semantics + of the boost base projects from MPC. + +Tue Nov 29 11:20:12 UTC 2005 Ossama Othman + + * ace/Parse_Node.cpp (make_func_name): + + Do not use a stack instantiated variable length array. Use a + dynamically allocated array instead. Saves us a copy, and + fixes g++ build errors when using its "-pedantic" command line + option. + + Fixed string length calculation. Addresses Service + Configurator failures when versioned namespace support is + enabled. + +Wed Nov 30 00:33:21 2005 Ossama Othman + + * ACEXML/parser/parser/parser.mpc: + * bin/MakeProjectCreator/config/avstreams.mpb: + * bin/MakeProjectCreator/config/rmcast.mpb: + * netsvcs/clients/Logger/Logger.mpc: + * netsvcs/servers/servers.mpc: + + Disable these projects when "ace_for_tao" is enabled. + +Wed Nov 30 08:58:35 2005 William Otte + + * html/index.html + + Removed obsolete CIAO components, cleaned up the HTML a bit. + +Tue Nov 29 11:20:12 UTC 2005 Johnny Willemsen + + * ace/Timer_Queue_T.cpp: + Use prefix increment operator instead of postfix + +Tue Nov 29 07:41:12 UTC 2005 Johnny Willemsen + + * ace/Malloc.{h,cpp}: + Removed copy constructor and name assign methods from ACE_Name_Node, + these where implemented with an assert saying not implemented. This + is not a good thing to do and also fixes some warnings in our + Intel 9.1 beta build. If someone used these methods they would get + an assert in runtime, now they get a compile error meaning we + have to implement them + +Mon Nov 28 07:26:31 2005 Ossama Othman + + * protocols/ace/HTBP/HTBP.mpc: + + Added missing "avoids += ace_for_tao". + +Mon Nov 28 06:50:04 2005 Ossama Othman + + * tests/ACE_Init_Test.cpp (run_main): + + Removed unnecessary versioned namespace related "using" + keyword. + +Sun Nov 27 22:37:44 2005 Bala Natarajan + + * ace/Array_Map.h: + + Included the Sun CC 5.8, as an additional CC compiler that + requires complete specification for a trait declaration. + + Just for information. Sun CC 5.8 comes with Studio 11, which is + free (as in FREE BEER!!). + +Sun Nov 27 04:05:52 2005 Ossama Othman + + * ace/ace.mpc: + * ace/ace_for_tao.mpc: + * bin/MakeProjectCreator/config/aceexe.mpb: + * bin/MakeProjectCreator/config/acelib.mpb: + * bin/MakeProjectCreator/config/versioned_namespace.mpb: + + Added versioned namespace MPC support. Disabled by default. + Add "versioned_namespace=1" to default.features to enable. + + * Kokyu/Kokyu_defs.h: + * ace/Asynch_Connector.h: + * ace/Cleanup.cpp: + * ace/Cleanup.h: + * ace/If_Then_Else.h: + * ace/OS.h: + * ace/Object_Manager.cpp: + * ace/Object_Manager.inl: + * ace/Value_Ptr.h: + * ace/SSL/SSL_Asynch_Stream.h: + * ace/SSL/SSL_SOCK_Acceptor.cpp: + * protocols/ace/HTBP/HTBP_Addr.cpp: + * protocols/ace/HTBP/HTBP_Addr.h: + * protocols/ace/HTBP/HTBP_Channel.cpp: + * protocols/ace/HTBP/HTBP_Channel.h: + * protocols/ace/HTBP/HTBP_Channel.inl: + * protocols/ace/HTBP/HTBP_Environment.cpp: + * protocols/ace/HTBP/HTBP_Environment.h: + * protocols/ace/HTBP/HTBP_Filter.cpp: + * protocols/ace/HTBP/HTBP_Filter.h: + * protocols/ace/HTBP/HTBP_Filter.inl: + * protocols/ace/HTBP/HTBP_Filter_Factory.cpp: + * protocols/ace/HTBP/HTBP_Filter_Factory.h: + * protocols/ace/HTBP/HTBP_ID_Requestor.cpp: + * protocols/ace/HTBP/HTBP_ID_Requestor.h: + * protocols/ace/HTBP/HTBP_Inside_Squid_Filter.cpp: + * protocols/ace/HTBP/HTBP_Inside_Squid_Filter.h: + * protocols/ace/HTBP/HTBP_Inside_Squid_Filter.inl: + * protocols/ace/HTBP/HTBP_Notifier.cpp: + * protocols/ace/HTBP/HTBP_Notifier.h: + * protocols/ace/HTBP/HTBP_Outside_Squid_Filter.cpp: + * protocols/ace/HTBP/HTBP_Outside_Squid_Filter.h: + * protocols/ace/HTBP/HTBP_Outside_Squid_Filter.inl: + * protocols/ace/HTBP/HTBP_Session.cpp: + * protocols/ace/HTBP/HTBP_Session.h: + * protocols/ace/HTBP/HTBP_Session.inl: + * protocols/ace/HTBP/HTBP_Stream.cpp: + * protocols/ace/HTBP/HTBP_Stream.h: + * tests/ACE_Init_Test.cpp: + * tests/Process_Strategy_Test.h: + + Corrected build errors in versioned namespace builds. + + * bin/MakeProjectCreator/config/acexml.mpb: + + Disable ACEXML libraries when "ace_for_tao" is enabled. + +Fri Nov 25 19:04:10 2005 Ossama Othman + + * NEWS: + + Updated with latest versioned namespace information. + + * ace/ACE_Codecs_export.h: + * ace/ACE_Memory_export.h: + * ace/ACE_Reactor_export.h: + * ace/ACE_Sockets_export.h: + * ace/ACE_Threads_export.h: + * ace/ace.mwc: + * ace/ace_codecs_for_tao.mpc: + * ace/ace_configuration_for_tao.mpc: + * ace/ace_memory_for_tao.mpc: + * ace/ace_reactor_for_tao.mpc: + * ace/ace_sockets_for_tao.mpc: + * ace/ace_threads_for_tao.mpc: + * ace/ace_timer_for_tao.mpc: + * bin/MakeProjectCreator/config/acecodecslib_for_tao.mpb: + * bin/MakeProjectCreator/config/acememorylib_for_tao.mpb: + * bin/MakeProjectCreator/config/acereactorlib_for_tao.mpb: + * bin/MakeProjectCreator/config/acesocketslib_for_tao.mpb: + * bin/MakeProjectCreator/config/acethreadslib_for_tao.mpb: + * bin/MakeProjectCreator/config/acetimerlib_for_tao.mpb: + + Removed smaller ace_for_tao subsets. Only a single ace_for_tao + subset library was originally intended. + + * ace/Activation_Queue.h: + * ace/Barrier.h: + * ace/Based_Pointer_Repository.h: + * ace/Codecs.h: + * ace/Dev_Poll_Reactor.h: + * ace/File_Lock.h: + * ace/LSOCK.h: + * ace/LSOCK_Acceptor.h: + * ace/LSOCK_CODgram.h: + * ace/LSOCK_Connector.h: + * ace/LSOCK_Dgram.h: + * ace/LSOCK_Stream.h: + * ace/MEM_Acceptor.h: + * ace/MEM_Addr.h: + * ace/MEM_Connector.h: + * ace/MEM_IO.h: + * ace/MEM_SAP.h: + * ace/MEM_Stream.h: + * ace/MMAP_Memory_Pool.h: + * ace/Mem_Map.h: + * ace/Method_Request.h: + * ace/Msg_WFMO_Reactor.h: + * ace/Multihomed_INET_Addr.h: + * ace/PI_Malloc.h: + * ace/Pagefile_Memory_Pool.h: + * ace/Priority_Reactor.h: + * ace/Process.h: + * ace/Process_Manager.h: + * ace/Process_Semaphore.h: + * ace/RW_Process_Mutex.h: + * ace/SOCK_CODgram.h: + * ace/SOCK_Dgram_Bcast.h: + * ace/SOCK_Dgram_Mcast.h: + * ace/SOCK_SEQPACK_Acceptor.h: + * ace/SOCK_SEQPACK_Association.h: + * ace/SOCK_SEQPACK_Connector.h: + * ace/SV_Shared_Memory.h: + * ace/Sbrk_Memory_Pool.h: + * ace/Shared_Memory.h: + * ace/Shared_Memory_MM.h: + * ace/Shared_Memory_Pool.h: + * ace/Shared_Memory_SV.h: + * ace/Thread_Semaphore.h: + * ace/UNIX_Addr.h: + + Removed ace_for_tao subset-specific export macro calls and + include directives. They are no longer needed. + + * ace/ace_for_tao.mpc: + + Added a number of source files required to build the + Notification Service and its tests. + + * Kokyu/tests/DSRT_MIF/DSRT_MIF.mpc: + * ace/QoS/qos.mpc: + * apps/soreduce/soreduce.mpc: + * bin/MakeProjectCreator/config/ftclientorb.mpb: + * bin/MakeProjectCreator/config/htbp.mpb: + * bin/MakeProjectCreator/config/ifrservice.mpb: + * bin/MakeProjectCreator/config/naming_serv.mpb: + * bin/MakeProjectCreator/config/portablegroup.mpb: + * bin/MakeProjectCreator/config/rtevent_serv.mpb: + * bin/MakeProjectCreator/config/ssl.mpb: + * bin/MakeProjectCreator/config/strategies.mpb: + * bin/MakeProjectCreator/config/tmcast.mpb: + * examples/APG/Active_Objects/active_objects.mpc: + * examples/APG/Config/config.mpc: + * examples/APG/Misc_IPC/misc_ipc.mpc: + * examples/APG/Naming/naming.mpc: + * examples/APG/Proactor/proactor.mpc: + * examples/APG/Processes/processes.mpc: + * examples/APG/Shared_Memory/shared_memory.mpc: + * examples/APG/Streams/streams.mpc: + * examples/APG/Svc_Config/svc_config.mpc: + * examples/APG/ThreadPools/threadpools.mpc: + * examples/APG/ThreadSafety/threadsafety.mpc: + * examples/ASX/Event_Server/Event_Server/Event.mpc: + * examples/ASX/UPIPE_Event_Server/UPIPE_Event.mpc: + * examples/C++NPv1/C++NPv1.mpc: + * examples/C++NPv2/C++NPv2.mpc: + * examples/Connection/blocking/Connection_Blocking.mpc: + * examples/Connection/misc/Connection_Misc.mpc: + * examples/Connection/non_blocking/Connection_Non_Blocking.mpc: + * examples/IPC_SAP/DEV_SAP/reader/dev_sap_reader.mpc: + * examples/IPC_SAP/DEV_SAP/writer/dev_sap_writer.mpc: + * examples/IPC_SAP/FIFO_SAP/fifo_sap.mpc: + * examples/IPC_SAP/FILE_SAP/file_sap_client.mpc: + * examples/IPC_SAP/SOCK_SAP/sock_sap.mpc: + * examples/IPC_SAP/UPIPE_SAP/UPIPE_SAP.mpc: + * examples/Mem_Map/IO-tests/Mem_Map_IO_Tests.mpc: + * examples/Mem_Map/file-reverse/Mem_Map_File_Reverse.mpc: + * examples/Misc/Misc.mpc: + * examples/Naming/Naming.mpc: + * examples/OS/Process/OS_Process.mpc: + * examples/Reactor/Dgram/Reactor_Dgram.mpc: + * examples/Reactor/FIFO/Reactor_FIFO.mpc: + * examples/Reactor/Proactor/Proactor.mpc: + * examples/Service_Configurator/IPC-tests/client/Svc_Cfg_IPC_Client.mpc: + * examples/Shared_Malloc/Shared_Malloc.mpc: + * examples/Shared_Memory/Shared_Memory.mpc: + * examples/Synch/Synch.mpc: + * examples/System_V_IPC/SV_Message_Queues/SV_Message_Queues.mpc: + * examples/System_V_IPC/SV_Semaphores/SV_Semaphores.mpc: + * examples/Threads/Threads.mpc: + * performance-tests/SCTP/SCTP.mpc: + * tests/tests.mpc: + + Added "avoids += ace_for_tao" to projects that require features + of ACE not found in the ace_for_tao subset. Addresses link-time + errors. + +Fri Nov 25 12:45:20 2005 Steve Huston + + * tests/Proactor_Test.cpp: + * tests/Proactor_Test_IPV6.cpp: Corrected ACE_Atomic_Op instantiations + for size_t. + +Fri Nov 25 10:00:21 2005 Steve Huston + + * ace/POSIX_Proactor.cpp (ACE_POSIX_Asynch_Timer): Don't explicitly + call ACE_Asynch_Result_Impl() - it's pointless and isn't listed + as an ancestor of this class. + (create_asynch_timer): Use a ACE_POSIX_Asynch_Timer * to match + the created object type. + + * ace/POSIX_Asynch_IO.cpp: Remove explicit calls to base-class + constructors from all constructors. It's not needed and seems to + cause problems on 64-bit code, at least on AIX. + + * include/makeinclude/platform_aix_ibm.GNU: AIX now uses the XPG4 tail + command syntax, requiring "-n 1" to read the last line; refuses "-1". + Thanks to Mike Knight for + alerting us to this. + + * THANKS: Added Mike Knight to the Hall of Fame. + +Thu Nov 24 20:00:37 2005 Simon McQueen + + * bin/tao_other_tests.lst: + + Scheduled bug #2316 regression. + +Thu Nov 24 14:56:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + For Intel C++ 9.1 also disable warning 1684 + +Thu Nov 24 01:38:57 2005 Ossama Othman + + * bin/fuzz.pl: + + Added a test that flags common versioned namespace related + errors/misuses. + + * bin/MakeProjectCreator/config/global.features: + + Disable versioned namespace support by default. + + * ace/Atomic_Op.h: + * ace/Auto_Ptr.h: + * ace/Barrier.h: + * ace/Base_Thread_Adapter.h: + * ace/CDR_Stream.h: + * ace/Cleanup_Strategies_T.cpp: + * ace/Dev_Poll_Reactor.h: + * ace/Functor_String.h: + * ace/High_Res_Timer.cpp: + * ace/LSOCK_Connector.inl: + * ace/Local_Name_Space_T.h: + * ace/Log_Msg.h: + * ace/Malloc.h: + * ace/Malloc_Allocator.h: + * ace/Message_Queue.h: + * ace/OS_Memory.h: + * ace/OS_NS_Thread.cpp: + * ace/OS_NS_Thread.h: + * ace/OS_NS_errno.h: + * ace/OS_NS_math.inl: + * ace/OS_NS_netdb.cpp: + * ace/OS_NS_netdb.h: + * ace/OS_NS_sys_msg.h: + * ace/OS_NS_time.h: + * ace/OS_main.cpp: + * ace/Object_Manager.h: + * ace/Parse_Node.cpp: + * ace/Ping_Socket.cpp: + * ace/Proactor.cpp: + * ace/Proactor.h: + * ace/Profile_Timer.cpp: + * ace/Profile_Timer.inl: + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_Dgram_Mcast.h: + * ace/SOCK_Dgram_Mcast.inl: + * ace/SPIPE_Stream.h: + * ace/Select_Reactor_T.cpp: + * ace/Service_Config.h: + * ace/Service_Templates.cpp: + * ace/Sock_Connect.cpp: + * ace/Svc_Conf_l.cpp: + * ace/Svc_Conf_y.cpp: + * ace/Thread_Manager.cpp: + * ace/Time_Value.h: + * ace/Timeprobe.h: + * ace/Timer_Hash_T.h: + * ace/Timer_List.cpp: + * ace/Timer_Queue.cpp: + * ace/config-lite.h: + * ace/SSL/SSL_Asynch_BIO.cpp: + * ace/SSL/SSL_Context.cpp: + + Corrected build errors in versioned namespace builds. + +Wed Nov 23 19:54:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/wrapper_macros.GNU: + Set xerces to 1 by default if it is not set + +Wed Nov 23 11:00:46 2005 Douglas C. Schmidt + + * docs/ACE-guidelines.html: Updated the guidelines to explain how + TAO binary options should be specified, i.e. as the integral + values 0 or 1. + +Wed Nov 23 09:54:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + When optimize=0, disable floating point optimizations. This way we + don't get floating point overflows in the TAO IDL test. If someone + enables optimize then we just let the compiler optimize things and + we could get overflows. + +Tue Nov 22 17:42:13 2005 Kobi Cohen-Arazi + + * ace/Select_Reactor_T.cpp (dispatch): + Fixed a bug which derived from bug #1890. active_handle_count + must be updated when state is changed. Every time some handler + remove add or suspend itself of another handle, state is + changed, and that should be reflected in the + active_handle_count. Thanks for Vadim Iosevich . + +Tue Nov 22 18:27:30 2005 Steve Huston + + * m4/tls.m4: Correct botched assignment to ace_TLS_CPPFLAGS when + additional Kerberos directory is needed. + +Tue Nov 22 03:33:14 2005 Bala Natarajan + + * ace/ace_configuration_for_tao.mpc: + + Some groups require ACE_Configuration. This MPC should probably + help those groups with a smaller library to use instead of + pulling in the whole ACE library. + +Tue Nov 22 01:43:52 2005 Ossama Othman + + * bin/MakeProjectCreator/config/portablegroup.mpb: + + Rather than disable this project in the ACE_FOR_TAO + configuration, inherit from acesocketslib_for_tao to allow it to + be used. + +Tue Nov 22 09:40:00 UTC 2005 Simon Massey + + * NEWS: + + Added Stoyan Paunov and Arvind S. Krishna entries. + +Mon Nov 21 23:56:06 2005 Ossama Othman + + * ace/ace_for_tao.mpc: + * ace/ace_threads_for_tao.mpc: + + Moved ACE_crc32.cpp to ace_threads_for_tao subset within + Windows compiler conditional. It is only needed by the + SV_Semaphore_Simple listed within that conditional block. + + * ace/ace_timer_for_tao.mpc: + * bin/MakeProjectCreator/config/acetimerlib_for_tao.mpb: + + New ACE_FOR_TAO timer library subset. + + * ace/Obchunk.cpp: + * ace/Obchunk.h: + * ace/Obchunk.inl: + * ace/Object_Manager.cpp: + * ace/Object_Manager.h: + * ace/Object_Manager.inl: + * ace/Object_Manager_Base.cpp: + * ace/Object_Manager_Base.h: + * ace/Obstack.cpp: + * ace/Obstack.h: + * ace/Obstack_T.cpp: + * ace/Obstack_T.h: + * ace/Obstack_T.inl: + + Added missing versioned namespace support. + + * ace/SSL/SSL_Context.h: + + Removed ACE_SSL_locking_callback prototype since it is not part + of the public interface, and since a prototype (and definition) + already exists in the SSL_Context.cpp implementation file. + + Removed static class members and placed them in anonymous + namespace in the implementation file. + + * ace/SSL_Context.cpp: + + Static class members are now in an anonymous namespace. There's + no need to expose them in the corresponding header. + + Mangle global SSL callback functions with the appropriate + versioned namespace name, if enabled. + + Improved exception safety of lock memory management and + lock acquisition/release by taking advantage of an + ACE_Auto_Basic_Array_Ptr and ACE_Mutex, respectively. + + * Kokyu/tests/DSRT_MIF/DSRT_MIF.mpc: + * apps/drwho/drwho.mpc: + * apps/soreduce/soreduce.mpc: + * examples/APG/Active_Objects/active_objects.mpc: + * examples/APG/Misc_IPC/misc_ipc.mpc: + * examples/APG/Shared_Memory/shared_memory.mpc: + * examples/APG/ThreadPools/threadpools.mpc: + * examples/APG/ThreadSafety/threadsafety.mpc: + * examples/ASX/Event_Server/Event_Server/Event.mpc: + + Inherit from the appropriate ACE_FOR_TAO subset MPC base + project. Addresses unresolved symbol errors. + +Tue Nov 22 09:33:30 (IST) 2005 Bala Natarajan + + * bin/MakeProjectCreator/config/portablegroup.mpb: + + Do not build in ACE_FOR_TAO configuration. + +Tue Nov 22 09:27:30 (IST) 2005 Bala Natarajan + + * ace/OS_NS_sys_utsname.cpp: + * ace/OS_NS_sys_utsname.h: + * ace/OS_NS_sys_utsname.inl: + + Uninlined uname (). Compiling it on Solaris 9 with Studio9, + and inline enabled is a pain. DOC's scoreboard uses inline=0 + on corona, and hence doesn't show the error. Uninlining solves + the problem. + + * ace/ace_for_tao.mpc: + + Added a few files to be built in ACE_FOR_TAO config. This fixes + many errors in gperf and orbsvcs on Solaris. + +Mon Nov 21 19:16:30 2005 Steve Huston + + * m4/tls.m4: Make sure we don't lose the user's specified OpenSSL + location when searching for Kerberos files. + +Mon Nov 21 13:26:53 2005 Arvind S. Krishna + + * NEWS: + + Updated NEWS file to reflect additions to the latest beta. + +Mon Nov 21 11:00:02 2005 William Otte + + * bin/MakeProjectCreator/config/cidlc.mpb + + Added a verbatim section for gnuace targets to pull in the + boost_filesystem and boost_regex libraries. + +Mon Nov 21 08:16:29 2005 Steve Huston + + * ace/SSL/SSL_Context.h: Removed "::" from friend declaration to + fix compile errors on Solaris, Forte 6 Update 2. (Sun C++ 5.4). + +Fri Nov 18 23:07:09 UTC 2005 Jeff Parsons + + * include/makeinclude/wrapper_macros.GNU: + + Applied a syntax submitted by Martin Corino + to the setting of $LEX and $YACC. The existing syntax set + these variables only if they were not already set, but + unfortunately, GNU make sets them by default. For DOC + Group purposes, they need to be set to 'flex' and + 'bison' respectively. + +Fri Nov 18 17:22:19 2005 Steve Huston + + * protocols/ace/RMCast/Template_Instantiations.cpp: Completed + template instantiations. + + * protocols/ace/RMCast/Makefile.am: + * protocols/ace/TMCast/Template_Instantiations.cpp: Explicit + instantiations needed for TMCast. + + * tests/Based_Pointer_Test.cpp: Added explicit instantiation for + ACE_Malloc_T. + + * tests/DLList_Test.cpp: #include "ace/Malloc_T.h" rather than + "ace/Malloc.h" to pick up ACE_Allocator<> before the explicit + instantiation needs it. + +Fri Nov 18 14:16:45 2005 Douglas C. Schmidt + + * ace/WIN32_Asynch_IO.cpp (shared_read): Added a new case for + ERROR_MORE_DATA, which isn't actually an error after all. + Thanks to Yongming Wang for contributing + this. + +Fri Nov 18 10:39:01 2005 William Otte + + * bin/MakeProjectCreator/config/cidlc.mpb + + Added rest of change intended for: + Thu Nov 17 18:08:45 UTC 2005 Jeff Parsons + +Thu Nov 17 18:08:45 UTC 2005 Jeff Parsons + + * bin/MakeProjectCreator/config/cidlc.mpb: + + Fix submitted by Will Otte intended + to be part of + + Tue Nov 15 12:44:37 2005 William Otte + +Thu Nov 16 13:16:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/compiler.bor: + When VCL is defined, set different startup obj and also define + PACKAGES + + * include/makeinclude/build_exe.bor: + Added PACKAGES to the compiler flags + +Thu Nov 16 12:36:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/compiler.bor: + Added extra linker paths + + * bin/MakeProjectCreator/config/vcl.mpb: + New base project, usable for building VCL application with Borland + C++ Builder + + * bin/MakeProjectCreator/config/global.features: + Disable vcl by default + +Wed Nov 16 15:48:29 2005 Steve Huston + + * ace/Hash_Map_Manager_T.h: For Sun CC 5.4 and earlier with explicit + template instantiation, can't prevent seeing operator= or + ACE_Hash_Map_Manager explicit templates won't compile. Ick. + + * apps/JAWS3/jaws3/Templates.cpp: Adjusted ACE_Reactor_Token_T type + usage. Follow-up change to match those in: + Fri Aug 26 18:01:31 2005 Steve Huston + + * protocols/ace/RMCast/Template_Instantiations.cpp: Added more needed + instantiations. + +Wed Nov 16 14:12:08 USMST 2005 Yan Dai + + * bin/tao_orb_tests.lst: + + Disabled CSD tests on VxWorks builds. + +Tue Nov 15 23:41:39 2005 Ossama Othman + + * ace/Service_Config.cpp (ACE_FACTORY_DEFINE): + + Moved this macro call outside of the versioned namespace. It + should be in the global namespace. + + * ace/Svc_Conf.h: + * ace/Svc_Conf.l: + * ace/Svc_Conf.y: + * ace/Svc_Conf_Lexer_Guard.cpp: + * ace/Svc_Conf_Lexer_Guard.h: + * ace/Svc_Conf_l.cpp: + * ace/Svc_Conf_y.cpp: + + Added missing versioned namespace macros. + +Tue Nov 15 15:41:19 2005 Steve Huston + + * NEWS: Added WinCE, VC8, ACE_Dev_Poll_Reactor, and ACE_RB_Tree notes. + + * bin/make_release: Generate VC8 files for both Win32 and WinCE. + Since VC8 uses the same suffixes as VC71, the Win32 files have + _vc8 appended, and WinCE files have _WinCE appended. WinCE files + are generated with feature uses_wchar=1, vc8 uses defaults. + + * docs/CE-status.txt: Added some info on CE support under VC8. + +Tue Nov 15 12:44:37 2005 William Otte + + * bin/MakeProjectCreator/config/cidlc.mpb + + Added a directive to remove runtime dependancy on VC71 + runtime libraries on Windows. Thanks to Kitty for suggesting + the fix. + +Tue Nov 15 11:31:41 2005 Steve Huston + + * ace/Atomic_Op.{h inl} (ACE_Atomic_Op (TYPE c)): Changed the signature + to be const TYPE& for long and unsigned long. This aligns it with the + ACE_Atomic_Op template's (const TYPE&) constructor signature and + resolves undefined references to it in the explicit template builds. + + * ace/Event_Handler.cpp: Added explicit instantiation of + ACE_Atomic_Op when ACE_HAS_BUILTIN_ATOMIC_OP + is not defined. This covers the event handler reference counting + use of ACE_Atomic_Op. + + * ace/Malloc_Instantiations.cpp: Corrected header file inclusions. + + * protocols/ace/RMCast/Makefile.am: + * protocols/ace/RMCast/Template_Instantiations.cpp: New file to + hold all explicit template instantiations needed for RMCast. + This is a temporary file, only for the ACE 5.5 release. Then it + can be expunged with the test of the explicit template + instantiation support. + +Tue Nov 15 09:31:29 2005 Steve Huston + + * ace/Dev_Poll_Reactor.{h cpp}: Add an optional decr_refcnt parameter + to ACE_Dev_Poll_Rector_Repository::unbind () to control whether or + not the unbound event handler's refcount is to be decremented. + When registering a handler, remember to increment its refcount if + needed; conversely, decrement it when all events are removed. + Be sure to initialize epoll_event structs. + + * tests/Dev_Poll_Reactor_Test.cpp (handle_input): Fix buffer overrun. + +Tue Nov 15 13:57:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_stdio.{cpp.inl}: + Fixed compile errors in BCB Unicode build + +Tue Nov 15 07:28:35 2005 Douglas C. Schmidt + + * ace/Service_Config.cpp (initialize): Added a check to avoid + overwriting a service that's already installed without having it + explicitly removed first. Thanks to Domingos Monteiro for this fix. + +Mon Nov 14 08:25:12 UTC 2005 Johnny Willemsen + + * ace/WIN32_Asynch_IO.cpp: + * ace/Asynch_Acceptor.cpp: + Removed check for >= BCB3 + + * ace/OS_NS_sys_stat.inl: + BCB has the normal umask + + * ace/OS_NS_stdio.inl: + Replaced c-style cast with C++ cast + + * ace/os_include/os_string.h: + Some BCB specific defines are not needed with BCB6 or newer + +Mon Nov 14 07:57:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/boost_unit_test.mpb: + Removed this file, not used anymore + + * bin/MakeProjectCreator/config/cidlc.mpb: + Use base projects for boost_filesystem, boost_regex and + exceptions, will resolve the link errors in the icc + linux build + +Fri Nov 11 16:04:44 2005 J.T. Conklin + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Emit "idl_stubs" target for IDL projects defining MPC's + custom_only variable. Fixes problems with some of the + scoreboard statistics builds. + +Fri Nov 11 11:06:31 2005 Ossama Othman + + * ACEXML/common/common.mpc: + * ace/ACE_Codecs_export.h: + * ace/Codecs.h: + * ace/ace.mwc: + * ace/ace_codecs_for_tao.mpc: + * apps/JAWS/server/server.mpc: + * apps/JAWS3/jaws3/jaws3.mpc: + * examples/Service_Configurator/IPC-tests/server/Svc_Cfg_IPC_Server.mpc: + * examples/Threads/Threads.mpc: + * examples/Web_Crawler/Web_Crawler.mpc: + * netsvcs/clients/Naming/Client/Client.mpc: + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.mpc: + * netsvcs/lib/lib.mpc: + * performance-tests/Misc/Misc.mpc: + * performance-tests/SCTP/SCTP.mpc: + * performance-tests/Server_Concurrency/Leader_Follower/Svr_Conc_Leader_Follower.mpc: + * performance-tests/Server_Concurrency/Queue_Based_Workers/Svr_Conc_Queue_Based_Workers.mpc: + * performance-tests/Synch-Benchmarks/Base_Test/Synch_Benchmarks_Base_Test.mpc: + * performance-tests/Synch-Benchmarks/Perf_Test/Synch_Benchmarks_Perf_Test.mpc: + * performance-tests/TCP/TCP.mpc: + * performance-tests/UDP/UDP.mpc: + * tests/tests.mpc: + + Addressed some "ace_for_tao" link-time failures. + +Fri Nov 11 09:21:53 2005 Ossama Othman + + * include/makeinclude/wrapper_macros.GNU: + + Added missing "ace_for_tao" support. Addresses "ace_for_tao" + build errors in GNU Make based builds. + +Fri Nov 11 12:15:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_sunos5_g++.GNU: + Removed very old note + +Thu Nov 10 09:05:58 2005 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Added a template variable, libname_prefix, that can be set to + prefix all library names (sharedname, staticname and libs). Note + that lit_libs and pure_libs are not affected. + +Thu Nov 10 07:39:12 UTC 2005 Johnny Willemsen + + * ace/config-vxworks6.1.h: + Added ACE_HAS_SNPRINTF + +Wed Nov 9 19:44:36 2005 Ossama Othman + + * bin/MakeProjectCreator/config/acecodecslib_for_tao.mpb: + * ace/ace_codecs_for_tao.mpc: + * ace/QoS/qos.mpc: + * ACEXML/common/common.mpc: + + Fixed "ace_for_tao" subset related unresolved symbol errors. + +Wed Nov 9 17:05:59 2005 William Otte + + * ace/config-macosx-tiger.h + + Corrected wchar support for Tiger. + + * include/makeinclude/platform_macosx_tiger_gcc3.3.GNU + * include/makeinclude/platform_macosx_tiger_gcc4.GNU + + Removed the versioned platform_macros because there were no + significant changes needed to support GCC3.3 on OS X. + + * include/makeinclude/platform_macosx_tiger.GNU + + Merged platform_macros file. Set CC and CXX to the desired + compiler if you wish to use the non-default compiler. + +Tue Nov 8 15:27:25 2005 William Otte + + * ace/config-macosx-tiger.h + + Fixed size of long double for Mac OS X Tiger with GCC 3.3. + +Mon Nov 7 16:27:12 2005 William Otte + + * bin/MakeProjectCreator/config/csd_framework.mpb + * bin/MakeProjectCreator/config/notifytest.mpb + * bin/MakeProjectCreator/config/rteventlogadmin.mpb + + Fixes for linking errors on OS X. + +Mon Nov 7 15:24:30 2005 William Otte + + * include/makeinclude/platform_macosx_tiger_gcc3.3.GNU + + Added a macros file for Tiger with GCC 3.3. + +Mon Nov 7 14:45:05 UTC 2005 Jeff Parsons + + * ace/Stats.h: + + Made private section of class ACE_Stats protected, for + convenient subclassing. + +Mon Nov 7 09:21:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/compiler.bor: + Added -L$(BCB)\lib\psdk always to the linker flags + +Sun Nov 6 21:19:44 2005 Bala Natarajan + + * ace/ace_sockets_for_tao.mpc: + + Fixed another bug with the MPC file. + + * protocols/ace/HTBP/HTBP.mpc: + + Reverted the avoids declaration. + +Sun Nov 6 21:02:17 2005 Bala Natarajan + + * ace/ace_for_tao.mpc: + * ace/ace_threads_for_tao.mpc: + * protocols/ace/HTBP/HTBP.mpc: + * protocols/ace/RMCast/RMCast.mpc: + * protocols/ace/TMCast/TMCast.mpc: + * protocols/examples/RMCast/Send_Msg/Send_Msg.mpc: + * protocols/tests/RMCast/RMCast.mpc: + + Fixed subtle errors with ace_for_tao builds. + +Sat Nov 5 13:28:12 UTC 2005 Johnny Willemsen + + * examples/APG/Shared_Memory/Hash_Map.cpp: + Replaced MAP with HASH_MAP to fix compile problems with VxWorks 6.1 + +Sat Nov 5 13:01:12 UTC 2005 Johnny Willemsen + + * ace/Cache_Map_Manager_T.{h,cpp,inl}: + Replaced MAP_TYPE with CMAP_TYPE, MAP_TYPE is also used on some + platforms already + + * include/makeinclude/compiler.bor: + Fixed typo + +Fri Nov 4 09:18:17 2005 Ossama Othman + + * ace/Dev_Poll_Reactor.h (Token_Guard): + + Fixed incorrect unimplemented constructor related error that was + introduced when removing ACE_UNIMPLEMENTED_FUNC macro usage. + +Fri Nov 4 14:04:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/compiler.bor: + Make sure that we always add $(BCB)\lib to the linker flags + +Fri Nov 4 12:28:12 UTC 2005 Johnny Willemsen + + * tests/Lazy_Map_Manager_Test.cpp: + Changed MAP to LAZY_MAP + + * tests/Map_Test.cpp: + Changed MAP to TEST_MAP + +Fri Nov 4 12:04:12 UTC 2005 Johnny Willemsen + + * ace/Cache_Map_Manager_T.{h,cpp,inl}: + Changed MAP to MAP_TYPE to resolve conflicts with VxWorks 6.1 + MAP define + +Fri Nov 4 11:16:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_unistd.inl: + For VxWorks 6.1 also include os_string.h to get swab + +Fri Nov 4 10:52:12 UTC 2005 Johnny Willemsen + + * ace/Capabilities.{h,cpp}: + Changed MAP to CAPABILITIES_MAP. VxWorks 6.1 defines the cpu + type MAP which results in a compile error + + * ace/os_include/sys/os_un.h: + Only define the struct sockaddr_un with VxWorks versions older + then 6.1 + +Fri Nov 4 10:33:12 UTC 2005 Johnny Willemsen + + * ace/config-vxworks6.1.h: + * include/makeinclude/platform_vxworks6.1.GNU: + New files for VxWorks 6.1. This is just a first draft version, a lot + of porting work has to be done + + * ace/OS_NS_stdlib.cpp: + Fixed variable not used warning with VxWorks 6.1 + +Fri Nov 4 10:09:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_Thread.h: + Only define VX_FP_TASK when it is not defined yet + +Fri Nov 4 08:50:12 UTC 2005 Johnny Willemsen + + * ace/Global_Macros.h: + Removed check for BCB3, that is ancient + +Thu Nov 3 12:34:30 2005 Douglas C. Schmidt + + * ace/Service_Config.h (ACE_DYNAMIC_SERVICE_DIRECTIVE): Added a + missing '\' at near the end of a macro. Thanks to Lothar + Werzinger for this fix. + +Thu Nov 3 09:16:23 2005 Ossama Othman + + * ace/Activation_Queue.h: + * ace/Atomic_Op.h: + * ace/Condition_Recursive_Thread_Mutex.h: + * ace/DLL.h: + * ace/DLL_Manager.h: + * ace/Dev_Poll_Reactor.h: + * ace/Framework_Component.h: + * ace/Get_Opt.h: + * ace/Mem_Map.h: + * ace/Message_Queue.cpp: + * ace/Message_Queue.h: + * ace/Method_Request.h: + * ace/Null_Mutex.h: + * ace/PI_Malloc.h: + * ace/Process.h: + * ace/Read_Buffer.h: + * ace/Select_Reactor.h: + * ace/Stats.h: + * ace/TP_Reactor.h: + + Removed unnecessary uses of ACE_UNIMPLEMENTED_FUNC macro. It is + only meant to be used for private unimplemented member functions + in class templates. + + * ace/Versioned_Namespace.h: + + Clarified preprocessor error message. + +Wed Nov 2 09:19:04 2005 Ossama Othman + + * ace/ACE.h (strdelete): + + Declare wchar version of ACE::strdelete() with + ACE_NAMESPACE_INLINE_FUNCTION macro since it is now inlined. + Addresses duplicate definition errors in wchar-enabled builds. + +Wed Nov 2 08:51:29 2005 Bala Natarajan + + * ace/CDR_Stream.h: + * ace/CDR_Stream.inl: + + Removed ACE_OutputCDR_Auto_Reset. Firstly + ACE_Utils::Auto_Functor should be used and secondly such classes + don't serve any purpose beyond Output_CDR. + +Tue Nov 1 22:19:03 2005 Ossama Othman + + * ace/Makefile.am (nobase_include_HEADERS): + + Added missing "Versioned_Namespace.h" header. + + * ace/Versioned_Namespace.h: + + Clarified preprocessor error message. + +Tue Nov 1 14:28:51 2005 William Otte + + * ace/config-macosx-tiger.h + + Some changes to fix compile errors in JAWS. Thanks to Johnny for + suggesting a fix. + +Tue Nov 1 15:29:12 UTC 2005 Johnny Willemsen + + * ACE-INSTALL.html: + Updated supported platforms + +Tue Nov 1 12:32:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + * bin/tao_other_tests.lst: + Moved Bug_2074_Regression to orbsvcs + +Mon Oct 31 13:38:07 MST 2005 Yan Dai + + * bin/msvc_static_order.lst: + + Moved the TAO/tests/CSD_Strategy_Tests/TP_Common/CSD_TP_Test_Lib + before TAO/tests/Collocation/Collocation_Test_Stub. This should + resolve the TP_Foo_* libs compilation errors on static build. + +Mon Oct 31 09:54:18 2005 J.T. Conklin + + * ace/Makefile.am: + Removed Synch_Options.inl and TSS_Adapter.inl. + +Mon Oct 31 07:55:57 2005 Ossama Othman + + * ace/Registry.cpp (STRING_SEPARATOR): + * ace/Registry.h (STRING_SEPARATOR): + + Reintroduced this string as a static class member. It is also + used outside of the ACE_Registry class in + ACE_Registry_Name_Space. Fixes an unresolved symbol error in + Borland builds. + +Mon Oct 31 14:15:12 UTC 2005 Johnny Willemsen + + * ace/Makefile.am: + Removed Service_Manager.inl + +Mon Oct 31 13:03:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug_2084_Regression + +Mon Oct 31 12:37:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added TAO/tests/Bug_2074_Regression/run_test.pl to the list + +Mon Oct 31 10:42:12 UTC 2005 Johnny Willemsen + + * ace/pre.h: + Reverted change below, makes it much easier to use ACE from + application projects + Fri Oct 28 10:19:12 UTC 2005 Johnny Willemsen + +Mon Oct 31 09:40:12 UTC 2005 Johnny Willemsen + + * ace/gethrtime.cpp: + * ace/Base_Thread_Adapter.cpp: + Fixed fuzz errors + +Mon Oct 31 08:15:12 UTC 2005 Johnny Willemsen + + * bin/msvc_static_order.lst: + Moved CSD test lib down, let us see the impact on the vc build + +Mon Oct 31 06:55:12 UTC 2005 Johnny Willemsen + + * ace/UPIPE_Connector.cpp: + Added missing include for Linux builds + +Sun Oct 30 08:11:12 UTC 2005 Johnny Willemsen + + * ace/Task.h: + Fixed gcc4 compile error + +Fri Oct 28 16:07:45 2005 Ossama Othman + + * ace/SSL/SSL_Context.cpp (ACE_SSL_locking_callback): + (ACE_SSL_thread_id): + + Removed duplicate definitions. + +Fri Oct 28 16:42:12 2005 Don Busch + + * bin/MakeProjectCreator/config/messaging_optional.mpb + + Add "after += Messaging" to ensure that CosNaming_Serv and + CosEvent_Serv always build after Messaging + +Fri Oct 28 14:28:13 2005 Ossama Othman + + * ace/Map_Manager.h: + + Include "ace/Default_Constants.h" to pull in + ACE_DEFAULT_MAP_SIZE definition. + +Fri Oct 28 10:42:32 2005 Ossama Othman + + * ace/Copy_Disabled.cpp + * ace/Copy_Disabled.h: + * ace/Makefile.am (libACE_la_SOURCES): + * ace/ace.mpc: + + Reinstituted Copy_Disabled.cpp. Addresses unresolved symbol + link-time errors. + +Fri Oct 28 09:23:11 2005 Ossama Othman + + * ace/Reverse_Lock_T.h (ACE_Acquire_Method): + + Fixed typo. + +Fri Oct 28 14:05:12 UTC 2005 Johnny Willemsen + + * ace/Select_Reactor_Base.cpp: + Fixed possible unitialized warning + +Fri Oct 28 10:19:12 UTC 2005 Johnny Willemsen + + * ace/pre.h: + Removed several arguments for the option push, these are passed + from the commandline already + +Fri Oct 28 07:56:12 UTC 2005 Johnny Willemsen + + * ace/config-linux-common.h: + Added ACE_HAS_UALARM + +Fri Oct 28 00:01:06 2005 Ossama Othman + + * ace/ACE.cpp: + * ace/ACE.h: + * ace/ACE.inl: + * ace/ACE_crc32.cpp: + * ace/ACE_crc_ccitt.cpp: + * ace/ARGV.cpp: + * ace/ARGV.h: + * ace/ARGV.inl: + * ace/ATM_Acceptor.cpp: + * ace/ATM_Acceptor.h: + * ace/ATM_Acceptor.inl: + * ace/ATM_Addr.cpp: + * ace/ATM_Addr.h: + * ace/ATM_Addr.inl: + * ace/ATM_Connector.cpp: + * ace/ATM_Connector.h: + * ace/ATM_Connector.inl: + * ace/ATM_Params.cpp: + * ace/ATM_Params.h: + * ace/ATM_Params.inl: + * ace/ATM_QoS.cpp: + * ace/ATM_QoS.h: + * ace/ATM_QoS.inl: + * ace/ATM_Stream.cpp: + * ace/ATM_Stream.h: + * ace/ATM_Stream.inl: + * ace/Acceptor.cpp: + * ace/Acceptor.h: + * ace/Activation_Queue.cpp: + * ace/Activation_Queue.h: + * ace/Activation_Queue.inl: + * ace/Active_Map_Manager.cpp: + * ace/Active_Map_Manager.h: + * ace/Active_Map_Manager.inl: + * ace/Active_Map_Manager_T.cpp: + * ace/Active_Map_Manager_T.h: + * ace/Active_Map_Manager_T.inl: + * ace/Addr.cpp: + * ace/Addr.h: + * ace/Addr.inl: + * ace/Arg_Shifter.cpp: + * ace/Arg_Shifter.h: + * ace/Argv_Type_Converter.cpp: + * ace/Argv_Type_Converter.h: + * ace/Argv_Type_Converter.inl: + * ace/Array_Base.cpp: + * ace/Array_Base.h: + * ace/Array_Base.inl: + * ace/Array_Map.cpp: + * ace/Array_Map.h: + * ace/Array_Map.inl: + * ace/Asynch_Acceptor.cpp: + * ace/Asynch_Acceptor.h: + * ace/Asynch_Connector.cpp: + * ace/Asynch_IO.cpp: + * ace/Asynch_IO.h: + * ace/Asynch_IO_Impl.cpp: + * ace/Asynch_IO_Impl.h: + * ace/Asynch_IO_Impl.inl: + * ace/Asynch_Pseudo_Task.cpp: + * ace/Asynch_Pseudo_Task.h: + * ace/Atomic_Op.cpp: + * ace/Atomic_Op.h: + * ace/Atomic_Op.inl: + * ace/Atomic_Op_T.cpp: + * ace/Atomic_Op_T.h: + * ace/Atomic_Op_T.inl: + * ace/Auto_Event.cpp: + * ace/Auto_Event.h: + * ace/Auto_Event.inl: + * ace/Auto_Functor.cpp: + * ace/Auto_Functor.h: + * ace/Auto_Functor.inl: + * ace/Auto_IncDec_T.cpp: + * ace/Auto_IncDec_T.h: + * ace/Auto_IncDec_T.inl: + * ace/Auto_Ptr.cpp: + * ace/Auto_Ptr.h: + * ace/Auto_Ptr.inl: + * ace/Barrier.cpp: + * ace/Barrier.h: + * ace/Barrier.inl: + * ace/Base_Thread_Adapter.cpp: + * ace/Base_Thread_Adapter.h: + * ace/Base_Thread_Adapter.inl: + * ace/Based_Pointer_Repository.cpp: + * ace/Based_Pointer_Repository.h: + * ace/Based_Pointer_T.cpp: + * ace/Based_Pointer_T.h: + * ace/Based_Pointer_T.inl: + * ace/Basic_Stats.cpp: + * ace/Basic_Stats.h: + * ace/Basic_Stats.inl: + * ace/Basic_Types.cpp: + * ace/Basic_Types.h: + * ace/Basic_Types.inl: + * ace/Bound_Ptr.h: + * ace/Bound_Ptr.inl: + * ace/CDR_Base.cpp: + * ace/CDR_Base.h: + * ace/CDR_Base.inl: + * ace/CDR_Size.cpp: + * ace/CDR_Size.h: + * ace/CDR_Size.inl: + * ace/CDR_Stream.cpp: + * ace/CE_Screen_Output.cpp: + * ace/CE_Screen_Output.h: + * ace/Cache_Map_Manager_T.cpp: + * ace/Cache_Map_Manager_T.h: + * ace/Cache_Map_Manager_T.inl: + * ace/Cached_Connect_Strategy_T.cpp: + * ace/Cached_Connect_Strategy_T.h: + * ace/Caching_Strategies_T.cpp: + * ace/Caching_Strategies_T.h: + * ace/Caching_Strategies_T.inl: + * ace/Caching_Utility_T.cpp: + * ace/Caching_Utility_T.h: + * ace/Capabilities.cpp: + * ace/Capabilities.h: + * ace/Capabilities.inl: + * ace/Cleanup.cpp: + * ace/Cleanup.h: + * ace/Cleanup.inl: + * ace/Cleanup_Strategies_T.cpp: + * ace/Codecs.cpp: + * ace/Codecs.h: + * ace/Codeset_IBM1047.cpp: + * ace/Codeset_IBM1047.h: + * ace/Codeset_Registry.inl: + * ace/Condition_Recursive_Thread_Mutex.cpp: + * ace/Condition_Recursive_Thread_Mutex.h: + * ace/Condition_T.cpp: + * ace/Condition_T.h: + * ace/Condition_T.inl: + * ace/Condition_Thread_Mutex.cpp: + * ace/Condition_Thread_Mutex.h: + * ace/Condition_Thread_Mutex.inl: + * ace/Configuration.cpp: + * ace/Configuration.h: + * ace/Configuration_Import_Export.cpp: + * ace/Configuration_Import_Export.h: + * ace/Connection_Recycling_Strategy.cpp: + * ace/Connection_Recycling_Strategy.h: + * ace/Connector.cpp: + * ace/Connector.h: + * ace/Container_Instantiations.cpp: + * ace/Containers.cpp: + * ace/Containers.h: + * ace/Containers.inl: + * ace/Containers_T.cpp: + * ace/Containers_T.h: + * ace/Containers_T.inl: + * ace/Copy_Disabled.h: + * ace/Countdown_Time.cpp: + * ace/Countdown_Time.h: + * ace/DEV.cpp: + * ace/DEV.h: + * ace/DEV.inl: + * ace/DEV_Addr.cpp: + * ace/DEV_Addr.h: + * ace/DEV_Addr.inl: + * ace/DEV_Connector.cpp: + * ace/DEV_Connector.h: + * ace/DEV_Connector.inl: + * ace/DEV_IO.cpp: + * ace/DEV_IO.h: + * ace/DEV_IO.inl: + * ace/DLL.cpp: + * ace/DLL.h: + * ace/DLL_Manager.cpp: + * ace/DLL_Manager.h: + * ace/Date_Time.h: + * ace/Date_Time.inl: + * ace/Dev_Poll_Reactor.cpp: + * ace/Dev_Poll_Reactor.h: + * ace/Dev_Poll_Reactor.inl: + * ace/Dirent.h: + * ace/Dirent.inl: + * ace/Dirent_Selector.cpp: + * ace/Dirent_Selector.h: + * ace/Dirent_Selector.inl: + * ace/Dump.cpp: + * ace/Dump.h: + * ace/Dump_T.cpp: + * ace/Dump_T.h: + * ace/Dynamic.cpp: + * ace/Dynamic.h: + * ace/Dynamic.inl: + * ace/Dynamic_Service.cpp: + * ace/Dynamic_Service.h: + * ace/Dynamic_Service.inl: + * ace/Dynamic_Service_Base.cpp: + * ace/Dynamic_Service_Base.h: + * ace/Env_Value_T.cpp: + * ace/Env_Value_T.h: + * ace/Env_Value_T.inl: + * ace/Event.cpp: + * ace/Event.h: + * ace/Event.inl: + * ace/Event_Handler.cpp: + * ace/Event_Handler.h: + * ace/Event_Handler.inl: + * ace/Event_Handler_T.cpp: + * ace/Event_Handler_T.h: + * ace/Event_Handler_T.inl: + * ace/FIFO.cpp: + * ace/FIFO.h: + * ace/FIFO.inl: + * ace/FIFO_Recv.cpp: + * ace/FIFO_Recv.h: + * ace/FIFO_Recv.inl: + * ace/FIFO_Recv_Msg.cpp: + * ace/FIFO_Recv_Msg.h: + * ace/FIFO_Recv_Msg.inl: + * ace/FIFO_Send.cpp: + * ace/FIFO_Send.h: + * ace/FIFO_Send.inl: + * ace/FIFO_Send_Msg.cpp: + * ace/FIFO_Send_Msg.h: + * ace/FIFO_Send_Msg.inl: + * ace/FILE.cpp: + * ace/FILE.h: + * ace/FILE.inl: + * ace/FILE_Addr.cpp: + * ace/FILE_Addr.h: + * ace/FILE_Addr.inl: + * ace/FILE_Connector.cpp: + * ace/FILE_Connector.h: + * ace/FILE_Connector.inl: + * ace/FILE_IO.cpp: + * ace/FILE_IO.h: + * ace/FILE_IO.inl: + * ace/File_Lock.cpp: + * ace/File_Lock.h: + * ace/File_Lock.inl: + * ace/Filecache.cpp: + * ace/Filecache.h: + * ace/FlReactor.cpp: + * ace/FlReactor.h: + * ace/Flag_Manip.cpp: + * ace/Flag_Manip.h: + * ace/Flag_Manip.inl: + * ace/Framework_Component.cpp: + * ace/Framework_Component.h: + * ace/Framework_Component.inl: + * ace/Framework_Component_T.cpp: + * ace/Framework_Component_T.h: + * ace/Free_List.cpp: + * ace/Free_List.h: + * ace/Functor.cpp: + * ace/Functor.h: + * ace/Functor.inl: + * ace/Functor_String.h: + * ace/Functor_String.inl: + * ace/Functor_T.cpp: + * ace/Functor_T.h: + * ace/Functor_T.inl: + * ace/Future.cpp: + * ace/Future.h: + * ace/Future_Set.cpp: + * ace/Future_Set.h: + * ace/Get_Opt.cpp: + * ace/Get_Opt.h: + * ace/Get_Opt.inl: + * ace/Global_Macros.h: + * ace/Guard_T.cpp: + * ace/Guard_T.h: + * ace/Guard_T.inl: + * ace/Handle_Gobbler.h: + * ace/Handle_Gobbler.inl: + * ace/Handle_Ops.cpp: + * ace/Handle_Ops.h: + * ace/Handle_Set.cpp: + * ace/Handle_Set.h: + * ace/Handle_Set.inl: + * ace/Hash_Cache_Map_Manager_T.cpp: + * ace/Hash_Cache_Map_Manager_T.h: + * ace/Hash_Cache_Map_Manager_T.inl: + * ace/Hash_Map_Manager.cpp: + * ace/Hash_Map_Manager.h: + * ace/Hash_Map_Manager_T.cpp: + * ace/Hash_Map_Manager_T.h: + * ace/Hash_Map_Manager_T.inl: + * ace/Hash_Map_With_Allocator_T.cpp: + * ace/Hash_Map_With_Allocator_T.h: + * ace/Hash_Map_With_Allocator_T.inl: + * ace/Hashable.cpp: + * ace/Hashable.h: + * ace/Hashable.inl: + * ace/High_Res_Timer.cpp: + * ace/High_Res_Timer.h: + * ace/High_Res_Timer.inl: + * ace/ICMP_Socket.cpp: + * ace/ICMP_Socket.h: + * ace/ICMP_Socket.inl: + * ace/INET_Addr.cpp: + * ace/INET_Addr.h: + * ace/INET_Addr.inl: + * ace/IOStream.cpp: + * ace/IOStream.h: + * ace/IOStream_T.cpp: + * ace/IOStream_T.h: + * ace/IOStream_T.inl: + * ace/IO_Cntl_Msg.cpp: + * ace/IO_Cntl_Msg.h: + * ace/IO_Cntl_Msg.inl: + * ace/IO_SAP.cpp: + * ace/IO_SAP.h: + * ace/IO_SAP.inl: + * ace/IPC_SAP.cpp: + * ace/IPC_SAP.h: + * ace/IPC_SAP.inl: + * ace/If_Then_Else.h: + * ace/Init_ACE.cpp: + * ace/Init_ACE.h: + * ace/Intrusive_List.cpp: + * ace/Intrusive_List.h: + * ace/Intrusive_List.inl: + * ace/Intrusive_List_Node.cpp: + * ace/Intrusive_List_Node.h: + * ace/Intrusive_List_Node.inl: + * ace/LOCK_SOCK_Acceptor.cpp: + * ace/LOCK_SOCK_Acceptor.h: + * ace/LSOCK.cpp: + * ace/LSOCK.h: + * ace/LSOCK.inl: + * ace/LSOCK_Acceptor.cpp: + * ace/LSOCK_Acceptor.h: + * ace/LSOCK_CODgram.cpp: + * ace/LSOCK_CODgram.h: + * ace/LSOCK_CODgram.inl: + * ace/LSOCK_Connector.cpp: + * ace/LSOCK_Connector.h: + * ace/LSOCK_Connector.inl: + * ace/LSOCK_Dgram.cpp: + * ace/LSOCK_Dgram.h: + * ace/LSOCK_Dgram.inl: + * ace/LSOCK_Stream.cpp: + * ace/LSOCK_Stream.h: + * ace/LSOCK_Stream.inl: + * ace/Lib_Find.cpp: + * ace/Lib_Find.h: + * ace/Local_Memory_Pool.cpp: + * ace/Local_Memory_Pool.h: + * ace/Local_Name_Space.cpp: + * ace/Local_Name_Space.h: + * ace/Local_Name_Space_T.cpp: + * ace/Local_Name_Space_T.h: + * ace/Local_Tokens.cpp: + * ace/Local_Tokens.h: + * ace/Local_Tokens.inl: + * ace/Lock.cpp: + * ace/Lock.h: + * ace/Lock.inl: + * ace/Lock_Adapter_T.cpp: + * ace/Lock_Adapter_T.h: + * ace/Lock_Adapter_T.inl: + * ace/Log_Msg.cpp: + * ace/Log_Msg.h: + * ace/Log_Msg_Backend.cpp: + * ace/Log_Msg_Backend.h: + * ace/Log_Msg_Callback.cpp: + * ace/Log_Msg_Callback.h: + * ace/Log_Msg_IPC.cpp: + * ace/Log_Msg_IPC.h: + * ace/Log_Msg_NT_Event_Log.cpp: + * ace/Log_Msg_NT_Event_Log.h: + * ace/Log_Msg_UNIX_Syslog.cpp: + * ace/Log_Msg_UNIX_Syslog.h: + * ace/Log_Priority.h: + * ace/Log_Record.cpp: + * ace/Log_Record.h: + * ace/Log_Record.inl: + * ace/Logging_Strategy.cpp: + * ace/Logging_Strategy.h: + * ace/MEM_Acceptor.cpp: + * ace/MEM_Acceptor.h: + * ace/MEM_Acceptor.inl: + * ace/MEM_Addr.cpp: + * ace/MEM_Addr.h: + * ace/MEM_Addr.inl: + * ace/MEM_Connector.cpp: + * ace/MEM_Connector.h: + * ace/MEM_Connector.inl: + * ace/MEM_IO.cpp: + * ace/MEM_IO.h: + * ace/MEM_IO.inl: + * ace/MEM_SAP.cpp: + * ace/MEM_SAP.h: + * ace/MEM_SAP.inl: + * ace/MEM_Stream.cpp: + * ace/MEM_Stream.h: + * ace/MEM_Stream.inl: + * ace/MMAP_Memory_Pool.cpp: + * ace/MMAP_Memory_Pool.h: + * ace/Makefile.am: + * ace/Malloc.cpp: + * ace/Malloc.h: + * ace/Malloc.inl: + * ace/Malloc_Allocator.cpp: + * ace/Malloc_Allocator.inl: + * ace/Malloc_Base.h: + * ace/Malloc_Instantiations.cpp: + * ace/Malloc_T.cpp: + * ace/Malloc_T.h: + * ace/Malloc_T.inl: + * ace/Managed_Object.cpp: + * ace/Managed_Object.h: + * ace/Managed_Object.inl: + * ace/Manual_Event.cpp: + * ace/Manual_Event.h: + * ace/Manual_Event.inl: + * ace/Map.cpp: + * ace/Map.h: + * ace/Map_Manager.cpp: + * ace/Map_Manager.h: + * ace/Map_Manager.inl: + * ace/Map_T.cpp: + * ace/Map_T.h: + * ace/Map_T.inl: + * ace/Mem_Map.cpp: + * ace/Mem_Map.h: + * ace/Mem_Map.inl: + * ace/Message_Block.cpp: + * ace/Message_Block.h: + * ace/Message_Block.inl: + * ace/Message_Block_T.cpp: + * ace/Message_Block_T.h: + * ace/Message_Block_T.inl: + * ace/Message_Queue.cpp: + * ace/Message_Queue.h: + * ace/Message_Queue.inl: + * ace/Message_Queue_T.cpp: + * ace/Message_Queue_T.h: + * ace/Method_Object.h: + * ace/Method_Request.cpp: + * ace/Method_Request.h: + * ace/Metrics_Cache_T.cpp: + * ace/Metrics_Cache_T.h: + * ace/Metrics_Cache_T.inl: + * ace/Min_Max.h: + * ace/Module.cpp: + * ace/Module.h: + * ace/Module.inl: + * ace/Msg_WFMO_Reactor.cpp: + * ace/Msg_WFMO_Reactor.h: + * ace/Msg_WFMO_Reactor.inl: + * ace/Multihomed_INET_Addr.cpp: + * ace/Multihomed_INET_Addr.h: + * ace/Multihomed_INET_Addr.inl: + * ace/Multiplexor.h: + * ace/Multiplexor.inl: + * ace/Mutex.cpp: + * ace/Mutex.h: + * ace/Mutex.inl: + * ace/NT_Service.cpp: + * ace/NT_Service.h: + * ace/NT_Service.inl: + * ace/Name_Proxy.cpp: + * ace/Name_Proxy.h: + * ace/Name_Request_Reply.cpp: + * ace/Name_Request_Reply.h: + * ace/Name_Space.cpp: + * ace/Name_Space.h: + * ace/Naming_Context.cpp: + * ace/Naming_Context.h: + * ace/Node.cpp: + * ace/Node.h: + * ace/Notification_Strategy.cpp: + * ace/Notification_Strategy.h: + * ace/Notification_Strategy.inl: + * ace/Null_Barrier.h: + * ace/Null_Condition.h: + * ace/Null_Mutex.h: + * ace/Null_Semaphore.h: + * ace/OS.h: + * ace/OS_Errno.cpp: + * ace/OS_Errno.h: + * ace/OS_Errno.inl: + * ace/OS_Log_Msg_Attributes.h: + * ace/OS_Log_Msg_Attributes.inl: + * ace/OS_NS_Thread.cpp: + * ace/OS_NS_Thread.h: + * ace/OS_NS_Thread.inl: + * ace/OS_NS_arpa_inet.cpp: + * ace/OS_NS_arpa_inet.h: + * ace/OS_NS_arpa_inet.inl: + * ace/OS_NS_ctype.h: + * ace/OS_NS_ctype.inl: + * ace/OS_NS_dirent.cpp: + * ace/OS_NS_dirent.h: + * ace/OS_NS_dirent.inl: + * ace/OS_NS_dlfcn.cpp: + * ace/OS_NS_dlfcn.h: + * ace/OS_NS_dlfcn.inl: + * ace/OS_NS_errno.h: + * ace/OS_NS_errno.inl: + * ace/OS_NS_fcntl.cpp: + * ace/OS_NS_fcntl.h: + * ace/OS_NS_fcntl.inl: + * ace/OS_NS_math.cpp: + * ace/OS_NS_math.h: + * ace/OS_NS_math.inl: + * ace/OS_NS_netdb.cpp: + * ace/OS_NS_netdb.h: + * ace/OS_NS_netdb.inl: + * ace/OS_NS_poll.cpp: + * ace/OS_NS_poll.h: + * ace/OS_NS_poll.inl: + * ace/OS_NS_pwd.cpp: + * ace/OS_NS_pwd.h: + * ace/OS_NS_pwd.inl: + * ace/OS_NS_regex.cpp: + * ace/OS_NS_regex.h: + * ace/OS_NS_regex.inl: + * ace/OS_NS_signal.cpp: + * ace/OS_NS_signal.h: + * ace/OS_NS_signal.inl: + * ace/OS_NS_stdio.cpp: + * ace/OS_NS_stdio.h: + * ace/OS_NS_stdio.inl: + * ace/OS_NS_stdlib.cpp: + * ace/OS_NS_stdlib.h: + * ace/OS_NS_stdlib.inl: + * ace/OS_NS_string.cpp: + * ace/OS_NS_string.h: + * ace/OS_NS_string.inl: + * ace/OS_NS_strings.cpp: + * ace/OS_NS_strings.h: + * ace/OS_NS_strings.inl: + * ace/OS_NS_stropts.cpp: + * ace/OS_NS_stropts.h: + * ace/OS_NS_stropts.inl: + * ace/OS_NS_sys_mman.cpp: + * ace/OS_NS_sys_mman.h: + * ace/OS_NS_sys_mman.inl: + * ace/OS_NS_sys_msg.cpp: + * ace/OS_NS_sys_msg.inl: + * ace/OS_NS_sys_resource.cpp: + * ace/OS_NS_sys_resource.h: + * ace/OS_NS_sys_resource.inl: + * ace/OS_NS_sys_select.cpp: + * ace/OS_NS_sys_select.h: + * ace/OS_NS_sys_select.inl: + * ace/OS_NS_sys_shm.cpp: + * ace/OS_NS_sys_shm.h: + * ace/OS_NS_sys_shm.inl: + * ace/OS_NS_sys_socket.cpp: + * ace/OS_NS_sys_socket.h: + * ace/OS_NS_sys_socket.inl: + * ace/OS_NS_sys_stat.cpp: + * ace/OS_NS_sys_stat.h: + * ace/OS_NS_sys_stat.inl: + * ace/OS_NS_sys_time.cpp: + * ace/OS_NS_sys_time.h: + * ace/OS_NS_sys_time.inl: + * ace/OS_NS_sys_uio.cpp: + * ace/OS_NS_sys_uio.h: + * ace/OS_NS_sys_uio.inl: + * ace/OS_NS_sys_utsname.cpp: + * ace/OS_NS_sys_utsname.h: + * ace/OS_NS_sys_utsname.inl: + * ace/OS_NS_sys_wait.cpp: + * ace/OS_NS_sys_wait.h: + * ace/OS_NS_sys_wait.inl: + * ace/OS_NS_time.cpp: + * ace/OS_NS_time.h: + * ace/OS_NS_time.inl: + * ace/OS_NS_unistd.cpp: + * ace/OS_NS_unistd.h: + * ace/OS_NS_unistd.inl: + * ace/OS_NS_wchar.cpp: + * ace/OS_NS_wchar.h: + * ace/OS_NS_wchar.inl: + * ace/OS_QoS.cpp: + * ace/OS_QoS.h: + * ace/OS_TLI.h: + * ace/OS_TLI.inl: + * ace/OS_Thread_Adapter.cpp: + * ace/OS_Thread_Adapter.h: + * ace/OS_main.cpp: + * ace/OS_main.h: + * ace/PI_Malloc.cpp: + * ace/PI_Malloc.h: + * ace/PI_Malloc.inl: + * ace/POSIX_Asynch_IO.cpp: + * ace/POSIX_Asynch_IO.h: + * ace/POSIX_CB_Proactor.cpp: + * ace/POSIX_CB_Proactor.h: + * ace/POSIX_Proactor.cpp: + * ace/POSIX_Proactor.h: + * ace/POSIX_Proactor.inl: + * ace/Pagefile_Memory_Pool.cpp: + * ace/Pagefile_Memory_Pool.h: + * ace/Pagefile_Memory_Pool.inl: + * ace/Pair.cpp: + * ace/Pair.h: + * ace/Pair_T.cpp: + * ace/Pair_T.h: + * ace/Pair_T.inl: + * ace/Parse_Node.cpp: + * ace/Parse_Node.h: + * ace/Ping_Socket.cpp: + * ace/Ping_Socket.h: + * ace/Ping_Socket.inl: + * ace/Pipe.cpp: + * ace/Pipe.h: + * ace/Pipe.inl: + * ace/Priority_Reactor.cpp: + * ace/Priority_Reactor.h: + * ace/Proactor.cpp: + * ace/Proactor.h: + * ace/Proactor.inl: + * ace/Proactor_Impl.cpp: + * ace/Proactor_Impl.h: + * ace/Process.cpp: + * ace/Process.h: + * ace/Process.inl: + * ace/Process_Manager.cpp: + * ace/Process_Manager.h: + * ace/Process_Manager.inl: + * ace/Process_Mutex.cpp: + * ace/Process_Mutex.h: + * ace/Process_Mutex.inl: + * ace/Process_Semaphore.cpp: + * ace/Process_Semaphore.h: + * ace/Process_Semaphore.inl: + * ace/Profile_Timer.cpp: + * ace/Profile_Timer.h: + * ace/Profile_Timer.inl: + * ace/QtReactor.cpp: + * ace/QtReactor.h: + * ace/RB_Tree.cpp: + * ace/RB_Tree.h: + * ace/RB_Tree.inl: + * ace/RW_Mutex.cpp: + * ace/RW_Mutex.h: + * ace/RW_Mutex.inl: + * ace/RW_Process_Mutex.cpp: + * ace/RW_Process_Mutex.h: + * ace/RW_Process_Mutex.inl: + * ace/RW_Thread_Mutex.cpp: + * ace/RW_Thread_Mutex.h: + * ace/RW_Thread_Mutex.inl: + * ace/Reactor.cpp: + * ace/Reactor.h: + * ace/Reactor.inl: + * ace/Reactor_Impl.cpp: + * ace/Reactor_Impl.h: + * ace/Reactor_Notification_Strategy.cpp: + * ace/Reactor_Notification_Strategy.h: + * ace/Reactor_Notification_Strategy.inl: + * ace/Reactor_Timer_Interface.cpp: + * ace/Reactor_Timer_Interface.h: + * ace/Reactor_Token_T.cpp: + * ace/Reactor_Token_T.h: + * ace/Read_Buffer.cpp: + * ace/Read_Buffer.h: + * ace/Read_Buffer.inl: + * ace/Recursive_Thread_Mutex.cpp: + * ace/Recursive_Thread_Mutex.h: + * ace/Recursive_Thread_Mutex.inl: + * ace/Recyclable.cpp: + * ace/Recyclable.h: + * ace/Recyclable.inl: + * ace/Refcountable.cpp: + * ace/Refcountable.h: + * ace/Refcountable.inl: + * ace/Refcounted_Auto_Ptr.cpp: + * ace/Refcounted_Auto_Ptr.h: + * ace/Refcounted_Auto_Ptr.inl: + * ace/Registry.cpp: + * ace/Registry.h: + * ace/Registry_Name_Space.cpp: + * ace/Registry_Name_Space.h: + * ace/Remote_Name_Space.cpp: + * ace/Remote_Name_Space.h: + * ace/Remote_Tokens.cpp: + * ace/Remote_Tokens.h: + * ace/Remote_Tokens.inl: + * ace/Reverse_Lock_T.cpp: + * ace/Reverse_Lock_T.h: + * ace/Reverse_Lock_T.inl: + * ace/SOCK.cpp: + * ace/SOCK.h: + * ace/SOCK.inl: + * ace/SOCK_Acceptor.cpp: + * ace/SOCK_Acceptor.h: + * ace/SOCK_Acceptor.inl: + * ace/SOCK_CODgram.cpp: + * ace/SOCK_CODgram.h: + * ace/SOCK_CODgram.inl: + * ace/SOCK_Connector.cpp: + * ace/SOCK_Connector.h: + * ace/SOCK_Connector.inl: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_Dgram.h: + * ace/SOCK_Dgram.inl: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/SOCK_Dgram_Bcast.h: + * ace/SOCK_Dgram_Bcast.inl: + * ace/SOCK_IO.cpp: + * ace/SOCK_IO.h: + * ace/SOCK_IO.inl: + * ace/SOCK_SEQPACK_Acceptor.cpp: + * ace/SOCK_SEQPACK_Acceptor.h: + * ace/SOCK_SEQPACK_Acceptor.inl: + * ace/SOCK_SEQPACK_Association.cpp: + * ace/SOCK_SEQPACK_Association.h: + * ace/SOCK_SEQPACK_Association.inl: + * ace/SOCK_SEQPACK_Connector.cpp: + * ace/SOCK_SEQPACK_Connector.h: + * ace/SOCK_SEQPACK_Connector.inl: + * ace/SOCK_Stream.cpp: + * ace/SOCK_Stream.h: + * ace/SOCK_Stream.inl: + * ace/SPIPE.cpp: + * ace/SPIPE.h: + * ace/SPIPE.inl: + * ace/SPIPE_Acceptor.cpp: + * ace/SPIPE_Acceptor.h: + * ace/SPIPE_Addr.cpp: + * ace/SPIPE_Addr.h: + * ace/SPIPE_Addr.inl: + * ace/SPIPE_Connector.cpp: + * ace/SPIPE_Connector.h: + * ace/SPIPE_Connector.inl: + * ace/SPIPE_Stream.cpp: + * ace/SPIPE_Stream.inl: + * ace/SString.cpp: + * ace/SString.h: + * ace/SString.inl: + * ace/SStringfwd.h: + * ace/SUN_Proactor.cpp: + * ace/SUN_Proactor.h: + * ace/SV_Message.cpp: + * ace/SV_Message.h: + * ace/SV_Message.inl: + * ace/SV_Message_Queue.cpp: + * ace/SV_Message_Queue.h: + * ace/SV_Message_Queue.inl: + * ace/SV_Semaphore_Complex.cpp: + * ace/SV_Semaphore_Complex.h: + * ace/SV_Semaphore_Complex.inl: + * ace/SV_Semaphore_Simple.cpp: + * ace/SV_Semaphore_Simple.h: + * ace/SV_Semaphore_Simple.inl: + * ace/SV_Shared_Memory.cpp: + * ace/SV_Shared_Memory.h: + * ace/SV_Shared_Memory.inl: + * ace/Sample_History.cpp: + * ace/Sample_History.h: + * ace/Sample_History.inl: + * ace/Sbrk_Memory_Pool.cpp: + * ace/Sbrk_Memory_Pool.h: + * ace/Sched_Params.cpp: + * ace/Sched_Params.h: + * ace/Sched_Params.inl: + * ace/Select_Reactor.cpp: + * ace/Select_Reactor.h: + * ace/Select_Reactor_Base.cpp: + * ace/Select_Reactor_Base.h: + * ace/Select_Reactor_Base.inl: + * ace/Select_Reactor_T.cpp: + * ace/Select_Reactor_T.h: + * ace/Select_Reactor_T.inl: + * ace/Semaphore.cpp: + * ace/Semaphore.h: + * ace/Semaphore.inl: + * ace/Service_Config.cpp: + * ace/Service_Config.h: + * ace/Service_Config.inl: + * ace/Service_Manager.cpp: + * ace/Service_Manager.h: + * ace/Service_Manager.inl: + * ace/Service_Object.cpp: + * ace/Service_Object.h: + * ace/Service_Object.inl: + * ace/Service_Repository.cpp: + * ace/Service_Repository.h: + * ace/Service_Repository.inl: + * ace/Service_Templates.cpp: + * ace/Service_Types.cpp: + * ace/Service_Types.h: + * ace/Service_Types.inl: + * ace/Shared_Memory.cpp: + * ace/Shared_Memory.h: + * ace/Shared_Memory_MM.cpp: + * ace/Shared_Memory_MM.h: + * ace/Shared_Memory_MM.inl: + * ace/Shared_Memory_Pool.cpp: + * ace/Shared_Memory_Pool.h: + * ace/Shared_Memory_SV.cpp: + * ace/Shared_Memory_SV.h: + * ace/Shared_Memory_SV.inl: + * ace/Shared_Object.cpp: + * ace/Shared_Object.h: + * ace/Shared_Object.inl: + * ace/Signal.cpp: + * ace/Signal.h: + * ace/Signal.inl: + * ace/Singleton.cpp: + * ace/Singleton.h: + * ace/Singleton.inl: + * ace/Sock_Connect.cpp: + * ace/Sock_Connect.h: + * ace/Static_Object_Lock.h: + * ace/Stats.cpp: + * ace/Stats.h: + * ace/Stats.inl: + * ace/Strategies_T.cpp: + * ace/Strategies_T.h: + * ace/Strategies_T.inl: + * ace/Stream.cpp: + * ace/Stream.h: + * ace/Stream.inl: + * ace/Stream_Modules.cpp: + * ace/Stream_Modules.h: + * ace/String_Base.cpp: + * ace/String_Base.h: + * ace/String_Base.inl: + * ace/String_Base_Const.cpp: + * ace/String_Base_Const.h: + * ace/Svc_Conf.h: + * ace/Svc_Conf_Lexer_Guard.cpp: + * ace/Svc_Conf_Lexer_Guard.h: + * ace/Svc_Handler.cpp: + * ace/Svc_Handler.h: + * ace/Swap.cpp: + * ace/Swap.h: + * ace/Swap.inl: + * ace/Synch.cpp: + * ace/Synch_Options.cpp: + * ace/Synch_Options.h: + * ace/Synch_Options.inl: + * ace/Synch_T.cpp: + * ace/Synch_T.h: + * ace/Synch_Traits.h: + * ace/System_Time.cpp: + * ace/System_Time.h: + * ace/TLI.cpp: + * ace/TLI.h: + * ace/TLI.inl: + * ace/TLI_Acceptor.cpp: + * ace/TLI_Acceptor.h: + * ace/TLI_Connector.cpp: + * ace/TLI_Connector.h: + * ace/TLI_Connector.inl: + * ace/TLI_Stream.cpp: + * ace/TLI_Stream.h: + * ace/TLI_Stream.inl: + * ace/TP_Reactor.cpp: + * ace/TP_Reactor.h: + * ace/TP_Reactor.inl: + * ace/TSS_Adapter.cpp: + * ace/TSS_Adapter.h: + * ace/TSS_Adapter.inl: + * ace/TSS_T.cpp: + * ace/TSS_T.h: + * ace/TSS_T.inl: + * ace/TTY_IO.cpp: + * ace/TTY_IO.h: + * ace/Task.cpp: + * ace/Task.h: + * ace/Task.inl: + * ace/Task_Ex_T.cpp: + * ace/Task_Ex_T.h: + * ace/Task_Ex_T.inl: + * ace/Task_T.cpp: + * ace/Task_T.h: + * ace/Task_T.inl: + * ace/Template_Instantiations.cpp: + * ace/Test_and_Set.cpp: + * ace/Test_and_Set.h: + * ace/Thread.cpp: + * ace/Thread.h: + * ace/Thread.inl: + * ace/Thread_Adapter.cpp: + * ace/Thread_Adapter.h: + * ace/Thread_Adapter.inl: + * ace/Thread_Control.cpp: + * ace/Thread_Control.h: + * ace/Thread_Control.inl: + * ace/Thread_Exit.cpp: + * ace/Thread_Exit.h: + * ace/Thread_Hook.cpp: + * ace/Thread_Hook.h: + * ace/Thread_Manager.cpp: + * ace/Thread_Manager.h: + * ace/Thread_Manager.inl: + * ace/Thread_Mutex.cpp: + * ace/Thread_Mutex.h: + * ace/Thread_Mutex.inl: + * ace/Thread_Semaphore.cpp: + * ace/Thread_Semaphore.h: + * ace/Thread_Semaphore.inl: + * ace/Time_Request_Reply.cpp: + * ace/Time_Request_Reply.h: + * ace/Time_Value.cpp: + * ace/Time_Value.h: + * ace/Time_Value.inl: + * ace/Timeprobe.cpp: + * ace/Timeprobe.h: + * ace/Timeprobe.inl: + * ace/Timeprobe_T.cpp: + * ace/Timeprobe_T.h: + * ace/Timer_Hash.cpp: + * ace/Timer_Hash.h: + * ace/Timer_Heap.cpp: + * ace/Timer_Heap.h: + * ace/Timer_Heap_T.cpp: + * ace/Timer_Heap_T.h: + * ace/Timer_List.cpp: + * ace/Timer_List.h: + * ace/Timer_Queue.cpp: + * ace/Timer_Queue.h: + * ace/Timer_Queue_Adapters.cpp: + * ace/Timer_Queue_Adapters.h: + * ace/Timer_Queue_Adapters.inl: + * ace/Timer_Queue_T.cpp: + * ace/Timer_Queue_T.h: + * ace/Timer_Queue_T.inl: + * ace/Timer_Queuefwd.h: + * ace/Timer_Wheel.cpp: + * ace/Timer_Wheel.h: + * ace/Timer_Wheel_T.cpp: + * ace/Timer_Wheel_T.h: + * ace/TkReactor.cpp: + * ace/TkReactor.h: + * ace/Token.cpp: + * ace/Token.h: + * ace/Token.inl: + * ace/Token_Collection.cpp: + * ace/Token_Collection.h: + * ace/Token_Collection.inl: + * ace/Token_Invariants.cpp: + * ace/Token_Invariants.h: + * ace/Token_Manager.cpp: + * ace/Token_Manager.h: + * ace/Token_Manager.inl: + * ace/Token_Request_Reply.cpp: + * ace/Token_Request_Reply.h: + * ace/Token_Request_Reply.inl: + * ace/Trace.cpp: + * ace/Trace.h: + * ace/Typed_SV_Message.cpp: + * ace/Typed_SV_Message.h: + * ace/Typed_SV_Message.inl: + * ace/Typed_SV_Message_Queue.cpp: + * ace/Typed_SV_Message_Queue.h: + * ace/Typed_SV_Message_Queue.inl: + * ace/UNIX_Addr.cpp: + * ace/UNIX_Addr.h: + * ace/UNIX_Addr.inl: + * ace/UPIPE_Acceptor.cpp: + * ace/UPIPE_Acceptor.h: + * ace/UPIPE_Acceptor.inl: + * ace/UPIPE_Addr.h: + * ace/UPIPE_Connector.cpp: + * ace/UPIPE_Connector.h: + * ace/UPIPE_Connector.inl: + * ace/UPIPE_Stream.cpp: + * ace/UPIPE_Stream.h: + * ace/UPIPE_Stream.inl: + * ace/UUID.cpp: + * ace/UUID.h: + * ace/UUID.inl: + * ace/Unbounded_Queue.cpp: + * ace/Unbounded_Queue.h: + * ace/Unbounded_Queue.inl: + * ace/Unbounded_Set.cpp: + * ace/Unbounded_Set.h: + * ace/Unbounded_Set.inl: + * ace/Value_Ptr.h: + * ace/Vector_T.cpp: + * ace/Vector_T.h: + * ace/Vector_T.inl: + * ace/WFMO_Reactor.cpp: + * ace/WFMO_Reactor.h: + * ace/WFMO_Reactor.inl: + * ace/WIN32_Asynch_IO.cpp: + * ace/WIN32_Asynch_IO.h: + * ace/WIN32_Proactor.cpp: + * ace/WIN32_Proactor.h: + * ace/XML_Svc_Conf.cpp: + * ace/XML_Svc_Conf.h: + * ace/XTI_ATM_Mcast.cpp: + * ace/XTI_ATM_Mcast.h: + * ace/XTI_ATM_Mcast.inl: + * ace/XtReactor.cpp: + * ace/XtReactor.h: + * ace/ace.mpc: + * ace/ace_wchar.h: + * ace/ace_wchar.inl: + * ace/config-lite.h: + * ace/gethrtime.cpp: + * ace/SSL/SSL_Asynch_Stream.cpp: + * ace/SSL/SSL_Asynch_Stream.h: + * ace/SSL/SSL_Context.cpp: + * ace/SSL/SSL_Context.h: + * ace/SSL/SSL_Context.inl: + * ace/SSL/SSL_SOCK.cpp: + * ace/SSL/SSL_SOCK.h: + * ace/SSL/SSL_SOCK.i: + * ace/SSL/SSL_SOCK_Acceptor.cpp: + * ace/SSL/SSL_SOCK_Acceptor.h: + * ace/SSL/SSL_SOCK_Acceptor.i: + * ace/SSL/SSL_SOCK_Connector.cpp: + * ace/SSL/SSL_SOCK_Connector.h: + * ace/SSL/SSL_SOCK_Connector.i: + * ace/SSL/SSL_SOCK_Stream.cpp: + * ace/SSL/SSL_SOCK_Stream.h: + * ace/SSL/SSL_SOCK_Stream.i: + + Added versioned namespace support. + + Removed some empty and/or unnecessary `.cpp' and `.inl' files. + + Hid some static class member constants declared in headers in + the corresponding implementation `.cpp' file. + +Thu Oct 27 11:29:12 UTC 2005 Johnny Willemsen + + * tests/Process_Strategy_Test.cpp: + * tests/Reactor_Dispatch_Order_Test.cpp: + 64bit fixes + +Thu Oct 27 11:25:12 UTC 2005 Johnny Willemsen + + * examples/Threads/barrier2.cpp: + 64bit fixes + +Thu Oct 27 11:58:07 2005 Simon McQueen + + * bin/tao_other_tests.lst: + + Three new FT regression tests. + +Thu Oct 27 09:35:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added TAO Bug_2201_Regression test + +Wed Oct 26 17:22:12 2005 Don Busch + + * bin/MakeProjectCreator/config/event_serv.mpb + * bin/MakeProjectCreator/config/messaging.mpb + * bin/MakeProjectCreator/config/messaging_optional.mpb + * bin/MakeProjectCreator/config/naming_serv.mpb + + This is a footprint reduction fix, eliminating a library dependency. + TAO 1.4 introduced a new dependency on the Messaging, Valuetype, + PI, and CodecFactory libraries for the CosNaming_Serv and + CosEvent_Serv libraries. Turning off CORBA Messaging did not remove + this dependency. Thus, any application that uses CosNaming_Serv or + CosEvent_Serv, but not CORBA Messaging, depends on those libraries + anyway. This change eliminates the CosNaming_Serv and CosEvent_Serv + dependencies on Messaging (and thus PI, CodecFactory, and Valuetype) + when CORBA Messaging and Interceptors are turned off. It reduces + the footprint in that case by about 600K. + There is a TAO ChangeLog entry with the same timestamp that + descibes the TAO changes. + +Wed Oct 26 12:26:01 2005 Ossama Othman + + * ace/Codeset_Registry.cpp (locale_to_registry_i): + (registry_to_locale_i): + + Corrected reversed destination and source arguments in memcpy() + call. + + Improved const correctness. Revealed the above memcpy() + problem. + + * ace/Codeset_Registry.h: + * ace/Codeset_Registry_db.cpp: + + Made registry entry array "const" to prevent the above memcpy() + problem from being potentially reintroduced in the future. Also + provides the compiler with additional optimization opportunities + (e.g. placing the array in read-only memory). + + * apps/mkcsregdb/mkcsregdb.cpp (init_output, fini_output): + + Updated output to generate an array of const registry entries in + accordance with the changes made to ace/Codeset_Registry.h. + +Wed Oct 26 15:45:12 UTC 2005 Johnny Willemsen + + * bin/msvc_cidlc.pl: + Print an error if no configurations have been build, at that moment + we just didn't build something which we have to handle as error + +Wed Oct 26 12:58:17 2005 Simon McQueen + + * ace/OS_NS_stdio.inl: + + Added a ACE_WIN32 implementation for ACE_OS::vsnprintf for + wide chars using ::_vsnwprintf, in the style of the existing + ACE_OS::vsnprintf for normal chars. + + This (hopefully) fixes bug #2208. + +Tue Oct 25 22:18:03 2005 Ossama Othman + + * ace/CDR_Stream.h (OutputCDR_Auto_Reset): + * ace/CDR_Stream.inl (OutputCDR_Auto_Reset): + + Prepend "ACE_" to this class (described in ChangeLog entry "Fri + Aug 26 11:43:01 2005 Justin Michel ") to + address potential global namespace pollution issues, and to be + consistent with ACE naming conventions. + + Adding missing ACE_Export. Addresses unresolved symbol errors + in Windows and g++ 4 builds when inlining is disabled and + TAO_RESET_OUTPUT_CDR_AFTER_SEND is defined to 1. + + Use "this" pointer to reference class members, as dictated by + ACE coding conventions/guidelines. + +Tue Oct 25 09:05:47 MST 2005 Yan Dai + + * bin/msvc_static_order.lst: + + Rolled back + "Mon Oct 24 12:58:45 MST 2005 Yan Dai " change, + the entry should be project file name. + +Tue Oct 25 08:57:12 UTC 2005 Johnny Willemsen + + * ace/config-qnx-rtp-62x.h: + Added ACE_HAS_3_PARAM_WCSTOK + +Tue Oct 25 08:46:12 UTC 2005 Johnny Willemsen + + * tests/Pipe_Test.cpp: + Fixed invalid assert + +Mon Oct 24 12:58:45 MST 2005 Yan Dai + + * bin/msvc_static_order.lst: + + Corrected the entry TAO/tests/CSD_Strategy_Tests/TP_Common/CSD_TP_Test. + The library name should be used instead of project name. + +Mon Oct 24 10:21:39 2005 Ossama Othman + + * docs/ACE-guidelines.html: + + Added shared library guidelines. + +Mon Oct 24 14:52:12 UTC 2005 Johnny Willemsen + + + * ace/OS_NS_Thread.inl: + Fixed typo in VxWorks part + + * ace/config-vxworks5.x.h: + Added some extra ACE_LACKS_x for VxWorks + +Mon Oct 24 07:19:29 2005 Douglas C. Schmidt + + * ace/Dev_Poll_Reactor.cpp: Fixed a couple of bugs that + were causing core dumps. Thanks to Oh Yoon Sik + for these fixes. + +Sun Oct 23 13:05:33 2005 Douglas C. Schmidt + + * tests/Pipe_Test.cpp (run_main): Updated this test to be a bit + cleaner. + + * tests/Dirent_Test.cpp: Fixed a typo in the comments - this test + exericses the ACE_Dirent class, not the ACE_OS_Dirent class. + +Fri Oct 21 07:46:47 2005 Douglas C. Schmidt + + * ace/Dev_Poll_Reactor.cpp (open): Set notification pipe into + non-blocking mode to prevent deadlock. Thanks to Oh Yoon Sik + for this fix. + +Mon Oct 24 10:55:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/templates/gnu.mpd: + Corrected the way we pass the include paths to windres + +Mon Oct 24 08:41:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/wrapper_macros.GNU: + Pass RCFLAGS to the resource compiler + +Mon Oct 24 08:37:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_unistd.{h,inl}: + 64bit fixes + +Mon Oct 24 08:32:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/templates/gnu.mpd: + Generate includes for the resource compiler, this fixes compile + problems of the resource file when it contains includes that + expect an include path being set + +Mon Oct 24 06:58:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/ace_qt.mpb: + Update to enable to define specific versions of the + QT library(-ies) needed to be linked for Windows based + builds as with *nix based builds. + +Sun Oct 23 22:27:45 2005 Ossama Othman + + * ace/Global_Macros.h: + * ace/Versioned_Namespace.h: + + Disable versioned namespace support for MSVC++ 6. It's + preprocessor can't handle the required macro expansions. + +Sun Oct 23 21:48:15 2005 Ossama Othman + + * ace/README: + + Added documentation that describes how to override the default + versioned namespace name when ACE_HAS_VERSIONED_NAMESPACE is + defined. + + * ace/Version.h: + + Removed "ace/Versioned_Namespace.h" include directive. It + caused some resource compilers on Windows some grief. + + * ace/Versioned_Namespace.h: + + Updated required header filename in preprocessor error message. + This header should now be included through "ace/config-lite.h". + + * ace/config-lite.h: + + Include "ace/Version.h" and "ace/Versioned_Namespace.h" to pull + in versioned namespace support (disabled by default). + + * ace/post.h: + * ace/pre.h: + + Removed versioned namespace support. Versioned namespace + declarations must now be added directly to the appropriate ACE + library headers. Addresses premature closure of versioned + namespace. + +Sun Oct 23 06:47:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + Generate new RC_FLAGS with the includes that need to be passed to + the resource compiler + + * include/makeinclude/build_dll.bor: + * include/makeinclude/build_exe.bor: + Use the new RC_FLAGS + +Sat Oct 22 11:23:12 UTC 2005 Johnny Willemsen + + * ace/Codeset_Registry.h: + Doxygen improvements + +Fri Oct 21 14:28:54 MST 2005 Yan Dai + + * bin/MakeProjectCreator/config/csd_pt_test_exe.mpb: + + Added dependency on pi base project since the PI.h is included + in the test application for the static initialization. + +Fri Oct 21 10:54:44 MST 2005 Yan Dai + + * bin/msvc_static_order.lst: + + Added TAO/tests/CSD_Strategy_Tests/TP_Common/CSD_TP_Test_Lib. + +Fri Oct 21 11:44:33 2005 Arvind S. Krishna + + * ace/CDR_Stream.h + + Fixed a typo in the optimization description of + ACE_LACKS_CDR_ALIGNMENT flag. + +Fri Oct 21 07:09:57 2005 J.T. Conklin + + * bin/msvc_static_order.lst: + + Add CosEvent_IDL project before CosEvent, CosEvent_Skel, and + CosEvent_Serv. + +Fri Oct 21 12:54:12 UTC 2005 Johnny Willemsen + + * ace/Proactor.h: + Added virtual destructor to the dummy ACE_Proactor that is + enabled when the ACE_Proactor can't be used + +Fri Oct 21 12:48:12 UTC 2005 Johnny Willemsen + + * ace/Log_Msg.cpp: + Fixed compile problem in Linux builds + +Fri Oct 21 12:39:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_unistd.{h,inl} (sbrk): + Use ptrdiff_t as argument type to fix 64bit conversions + +Fri Oct 21 12:32:12 UTC 2005 Johnny Willemsen + + * ace/Message_Queue_T.{h,cpp}: + Changed cur_count to size_t and use prefix operators instead + of postfix + +Fri Oct 21 11:03:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/compiler.bor: + BCBVER must be explicitly defined by the end user and must + be set to a supported value, else just don't build. + +Fri Oct 21 10:24:12 UTC 2005 Johnny Willemsen + + * ace/Log_Msg.cpp (log) + Check for passing of NULL pointers to %C and %w + formatting strings and replace them with "(null)" to avoid + crashes. Thanks to Scooter for + reporting this. Fixes bugzilla bug 2276 + +Thu Oct 20 22:20:26 2005 Douglas C. Schmidt + + * ace/Dev_Poll_Reactor.cpp (open): Disabling the notify pipe was + failing, but now it works. Thanks to Oh Yoon Sik for this fix. + +Thu Oct 20 14:36:12 UTC 2005 Johnny Willemsen + + * ace/CDR_Base.cpp: + Removed character before #include + +Thu Oct 20 08:53:47 2005 Arvind S. Krishna + + * ace/CDR_Base.cpp: + * ace/CDR_Stream.h: + * ace/CDR_Stream.cpp: + * ace/CDR_Stream.inl: + * ace/Message_Block.cpp: + + CORBA specification mandates alignment of basic types to their + natural boundaries. However, in certain situations (1) where + such alignment is not needed by the platform and/or (2) + homogeneous systems exists on the client and server sides, this + alignment can be ignored to improve (de)marshaling + efficiency. This commit adds the ACE_LACKS_CDR_ALIGNMENT flag to + the CDR streams that enables applications to ignore alignment + during (de)marshaling. This macro should be used when ACE_CDR is + both the (de)marshaler. Additionally, use this option only when + byte orders of the two machines are the same. This restriction + is temporary and will be removed in a subsequent commit. + +Thu Oct 29 11:09:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_unistd.{h,inl}: + Changed the return value and arguments of ualarm from u_int + to u_long to fix 64bit problems + +Wed Oct 19 18:57:53 2005 Douglas C. Schmidt + + * ace/OS_NS_stdio.inl (flock_init): Only allocate the + memory for the name if the call to ACE_OS::open() succeeds. + This fixes a subtle memory leak. Thanks to Sandeep Deshpande + for this fix! + +Wed Oct 19 09:56:31 2005 Ossama Othman + + * include/makeinclude/platform_macosx_tiger_gcc4.GNU: + + Disable symbol visibility support by default. Apple's g++ 4 + compiler doesn't appear to correctly support visibility + attributes, at least as well as the vanilla g++. Thanks to + Will, Kitty and J.T. for testing and tracking the problem. + +Wed Oct 19 09:26:34 2005 Ossama Othman + + * ace/ACE.h (strdelete): + + Declare this function with the ACE_NAMESPACE_INLINE_FUNCTION. + Addresses case where this method is inlined, and should not be + marked "extern". + +Wed Oct 19 09:23:13 2005 Ossama Othman + + * ace/pre.h: + + Moved include directive for "ace/Version.h" before existing + pragmas in this file. Addresses Borland preprocessor warnings + regarding duplicate "pushed" options. Thanks to Johnny for + suggesting this fix. + +Wed Oct 19 08:51:12 UTC 2005 Johnny Willemsen + + * tests/CDR_File_Test.cpp: + Fixed compile error + +Wed Oct 19 07:43:12 UTC 2005 Johnny Willemsen + + * ace/Reactor_Token_T.h: + Removed code for including the .inl file, it is not there, just + a waste of bytes ;-) + +Wed Oct 19 00:23:02 2005 Ossama Othman + + * ace/Global_Macros.h (ACE_FACTORY_DEFINE): + (ACE_FACTORY_NAMESPACE_DEFINE): + + Don't bother qualifying the SERVICE_CLASS name with + ACE_VERSIONED_NAMESPACE_NAME scope. That scoped is already + pulled in by a "using" clause. Addresses compile-time errors + caused by calling the ACE_FACTORY_{NAMESPACE_}DEFINE macro + within a namespace and passing the locally scoped name of the + SERVICE_CLASS rather than the fully qualified one. + +Tue Oct 18 23:23:14 2005 Ossama Othman + + The following changes comprise the core implementation of + "versioned namespace" support in ACE. When enabled, all ACE + library code will be wrapped within a namespace, such as + "ACE_5_4_7", to prevent symbol conflicts with other versions of + ACE shared libraries in third party libraries. This feature is + disabled by default to preserve backward compatibility. + + * ace/Global_Macros.h: + + Updated ACE Service Configurator macros to take into account + versioned namespace when enabled. + + * ace/Parse_Node.cpp (ACE_Function_Node, make_func_name): + * ace/Parse_Node.h: + + Check if factory function is using the ACE naming convention. + If so, it is likely that the ACE factory function macros + (e.g. ACE_FACTORY_DECLARE) were used to declare and define it, + so mangle the function name to include the ACE versioned + namespace name as is done in the ACE macros. Otherwise, leave + the function name as is. + + * ace/README: + + Added description for new ACE_HAS_VERSIONED_NAMESPACE + preprocessor symbol. + + * ace/Version.h: + + Include "ace/Versioned_Namespace.h" to pull in versioned + namespace macros. + + * ace/Versioned_Namespace.h: + + New header containing core versioned namespace macros. + + * ace/ace.mpc (Header_Files): + + Added "Versioned_Namespace.h" to list of headers. + + * ace/pre.h: + + Include "ace/Version.h" to pull in versioned namespace support. + + * ace/post.h: + + End versioned namespace block, if enabled. + + * bin/make_release (update_version_files): + + Generate include directive for "ace/Versioned_Namespace.h" when + creating "ace/Version.h". + +Tue Oct 18 23:08:34 2005 Ossama Othman + + * ace/ACE.cpp (strdelete): + * ace/ACE.inl (strdelete): + + Inlined this function. It simply calles operator delete[] on a + pointer to char or wchar_t. Reduces footprint if it is never + called, and optimizes the call at run-time slightly if it is + called. + +Tue Oct 18 20:51:19 2005 J.T. Conklin + + * bin/MakeProjectCreator/config/csd_framework.mpb: + + Remove "core" from list of base projects. Just because + we use the CSD framework, doesn't necessarily mean that + the project should be installed. It needs to explictly + inherit from core (or install, install-bin, install-lib, + or install-headers) for that. + +Tue Oct 18 18:06:43 2005 J.T. Conklin + + * bin/MakeProjectCreator/config/kokyu_dsrt_schedulers.mpb: + + Add $(TAO_BUILDDIR)/examples/Kokyu_dsrt_schedulers to + includes for automake builds. + +Tue Oct 18 17:24:26 MST 2005 Yan Dai + + Merged in the CSD (Custom Servant Dispatching) feature from OCI. + + * bin/tao_orb_tests.lst: + + Added CSD tests. + + * bin/MakeProjectCreator/config/csd_framework.mpb: + * bin/MakeProjectCreator/config/csd_threadpool.mpb: + * bin/MakeProjectCreator/config/csd_tp_test_lib.mpb: + * bin/MakeProjectCreator/config/csd_tp_test_exe_c.mpb: + * bin/MakeProjectCreator/config/csd_tp_test_exe_b.mpb: + * bin/MakeProjectCreator/config/csd_tp_test_exe_a.mpb: + * bin/MakeProjectCreator/config/csd_tp_foo_c_lib.mpb: + * bin/MakeProjectCreator/config/csd_tp_foo_b_lib.mpb: + * bin/MakeProjectCreator/config/csd_tp_foo_a_lib.mpb: + * bin/MakeProjectCreator/config/csd_pt_testservant_lib.mpb: + * bin/MakeProjectCreator/config/csd_pt_testinf_lib.mpb: + * bin/MakeProjectCreator/config/csd_pt_test_exe.mpb: + + Added base projects for the CSD strategies and tests. + +Tue Oct 18 22:24:11 2005 Olli Savia + + * ace/TTY_IO.h: + Changed type of readmincharacters from int to unsigned int. + Fixes compile time warning. + +Tue Oct 18 09:53:29 2005 Ossama Othman + + From Mickael P. Golovin + * ace/Argv_Type_Converter.cpp: + + Fixed strdup()/operator delete() mismatches. Strings allocated + by strdup() should be deallocated using free(). + + This was also reported by Gerolf Reinwardt . + +Mon Oct 17 22:05:37 2005 Olli Savia + + * ace/TTY_IO.cpp: + Removed :: qualifiers from terminal interface + function calls. This should fix compile problems + on Cygwin. + +Mon Oct 17 13:38:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/notifytest.mpb: + Added notication_serv as base project, needed for collocated + tests + +Mon Oct 17 10:04:12 UTC 2005 Johnny Willemsen + + * ace/FILE_IO.inl: + Removed some not needed c-style casts + + * tests/CDR_File_Test.cpp: + Explicitly initialise memory with 0 when we are using a + profiler. + +Mon Oct 17 09:21:12 UTC 2005 Johnny Willemsen + + * ace/Time_Value.{h,inl}: + * ace/UUID.cpp: + Fixed 64bit conversion problems. Added a to_usec method + to ACE_Time_Value that returns the total of sec and usec + as ACE_UINT64 and use that in UUID.cpp. + Thanks to James Megquier . + This fixes bugzilla 2263 + +Sun Oct 16 13:01:12 2005 J.T. Conklin + + * protocols/ace/RMCast/Acknowledge.cpp: + + Fix typo in last change. + +Sun Oct 16 12:05:45 2005 J.T. Conklin + + * ace/config-netbsd.h: + + Define ACE_HAS_TERMIOS. + +Sun Oct 16 11:59:05 2005 J.T. Conklin + + * configure.ac: + + Updated tty feature checks to define ACE_HAS_TERMIO and/or + ACE_HAS_TERMIOS. + +Sun Oct 16 19:39:10 2005 Olli Savia + + * ace/TTY_IO.h: + Fixed Doxygen tags. + +Sun Oct 16 09:27:25 2005 Douglas C. Schmidt + + * protocols/ace/RMCast/Acknowledge.{h,cpp} + * protocols/ace/RMCast/Parameters.h: + Added some fixes so that the default size of the hash map won't + be so huge. Thanks to Felix Li for + these fixes. + +Sun Oct 16 17:17:50 2005 Olli Savia + + * ace/OS.h: + * ace/config-cray.h: + * ace/config-cygwin32.h: + * ace/config-dgux-4.11-epc.h: + * ace/config-dgux-4.x-ghs.h: + * ace/config-freebsd.h: + * ace/config-hpux-11.00.h: + * ace/config-irix6.x-common.h: + * ace/config-linux-common.h: + * ace/config-lynxos.h: + * ace/config-m88k.h: + * ace/config-macosx-panther.h: + * ace/config-macosx-tiger.h: + * ace/config-macosx.h: + * ace/config-openbsd.h: + * ace/config-qnx-neutrino.h: + * ace/config-qnx-rtp-62x.h: + * ace/config-qnx-rtp-pre62x.h: + * ace/config-rtems.h: + * ace/config-sco-5.0.0-mit-pthread.h: + * ace/config-sco-5.0.0.h: + * ace/config-sunos5.4-centerline-2.x.h: + * ace/config-sunos5.4-g++.h: + * ace/config-sunos5.4-sunc++-4.x.h: + * ace/config-sunos5.5.h: + * ace/config-tandem.h: + * ace/config-unixware-2.01-g++.h: + * ace/config-unixware-2.1.2-g++.h: + * ace/config-unixware-7.1.0.h: + * ace/config-unixware-7.1.0.udk.h: + * ace/config-win32-interix.h: + Replaced old TTY_IO related macros with the new + ACE_HAS_TERMIOS macro. + + * ace/TTY_IO.cpp: + Added include "ace/config-lite.h" to pull feature macro + definitions. + +Sun Oct 16 16:14:48 2005 Olli Savia + + * ace/README: + * ace/TTY_IO.cpp: + Introduce new macros ACE_HAS_TERMIO and ACE_HAS_TERMIOS to + select between old ioctl based interface and POSIX terminal + interface. The old macros ACE_HAS_TERM_IOCTLS and + ACE_HAS_NEW_TERMIOS_STRUCT are not used anymore. Thanks + to J.T. Conklin for motivating this change. + +Sun Oct 16 12:08:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Don't run Big_AMI test in minimum builds + +Sat Oct 15 00:57:19 2005 Steve Totten + + * bin/tao_other_tests.lst: + + Added TAO/orbsvcs/examples/CosEC/TypedSimple/run_test.pl to + the nightly tests. + +Fri Oct 14 22:30:40 2005 Krishnakumar B + + * ace/config-macosx-tiger.h (ACE_HAS_NEW_TERMIOS_STRUCT): Defined + the macro ACE_HAS_NEW_TERMIOS_STRUCT to fix compilation errors + on Mac OS X Tiger. + +Fri Oct 14 14:56:16 2005 Chris Cleeland + + * ace/ACE.cpp: + * ace/SOCK_Connector.cpp: + + Reverted the change from Fri Sep 2 15:08:27 2005 Justin Michel + due to suspicions that it might be inadvertently responsible for + observed additional jitter in TAO performance tests. The + motivation for the original change and a patch to restore the + original change is documented in Bugzilla #2246. + +Fri Oct 14 11:49:29 2005 J.T. Conklin + + * ACEXML/apps/svcconf/Makefile.am: + + Tweak to use pkgconfigdir and @libdir@/pkgconfig instead of + pkgconfdatadir and ${prefix}/lib/pkgconfig to be consistent with + all our other Makefile.am's. This will hold until we regenerate + all the ACE Makefile.am's from MPC. [Bug 2266] + +Fri Oct 14 14:19:12 UTC 2005 Johnny Willemsen + + Reverted the change below, causes compile problems + + Fri Oct 14 10:52:12 UTC 2005 Johnny Willemsen + * ace/SSL/SSL_Asynch_BIO.{h,cpp}: + Fixed 64bit conversion warnings + +Fri Oct 14 12:01:12 UTC 2005 Johnny Willemsen + + * apps/soreduce/Library.cpp: + Fixed 64bit problem + +Fri Oct 14 11:44:12 UTC 2005 Johnny Willemsen + + * ace/SOCK_IO.{h,inl}: + 64bit fix + +Fri Oct 14 10:52:12 UTC 2005 Johnny Willemsen + + * ace/SSL/SSL_Asynch_BIO.{h,cpp}: + Fixed 64bit conversion warnings + + * ace/OS_NS_unistd.{h,inl}: + Let getpagesize return a long + +Fri Oct 14 08:05:12 UTC 2005 Johnny Willemsen + + * protocols/ace/HTBP/HTBP_Session.cpp: + Fixed signed/unsigned warning + +Thu Oct 13 17:39:31 2005 Steve Huston + + * ace/TTY_IO.cpp: Changed ACE_TTY_IO_{ODD EVEN MARK SPACE} to + char* from ACE_TCHAR* since the strings they're compared to (from + Serial_Params) are char* always. + + * ace/config-win32-common.h: Removed the check for UNDER_CE >= 0x400 + && UNDER_CE < 0x500 when deciding whether or not to define E... + symbols. Windows Mobile 5 requires them as well. + +Thu Oct 13 13:58:44 2005 Ossama Othman + + * ace/config-g++-common.h (ACE_IMPORT_SINGLETON_DECLARE): + (ACE_IMPORT_SINGLETON_DECLARATION): + + Suppress "-pedantic" error caused by use of g++ "extern + template" extension by preceding the expression with + "__extension__". + +Thu Oct 13 15:38:29 2005 Steve Huston + + * ace/RB_Tree.{cpp h}: Follow-up to: + Fri Jul 9 21:23:13 2004 Douglas C. Schmidt + + Don't include a tree pointer in each RB_Tree_Node just to be able to + get back to the tree to retrieve the allocator. Leave the allocator + pointer in ACE_RB_Tree_Base, and add a ACE_RB_Tree::remove_children_i + method that uses the allocator to release memory. Thank you to + Sergei Kuchin for this improvement. + +Thu Oct 13 20:42:00 2005 Olli Savia + + * ace/TTY_IO.cpp: + Enable noncanonical input processing on POSIX systems. + +Thu Oct 13 19:18:44 2005 Olli Savia + + * ace/TTY_IO.cpp: + Oops. Use tcsetattr() instead of tcgetattr() to set terminal + parameters. + +Thu Oct 13 18:49:15 2005 Olli Savia + + * ace/TTY_IO.cpp: + TTY_IO class now uses POSIX terminal interface if it is + available. Should fix compile problems on various + platforms. + +Thu Oct 13 15:02:12 UTC 2005 Johnny Willemsen + + * examples/Threads/task_four.cpp: + * examples/Reactor/Proactor/post_completions.cpp: + Fixed warning in MinGW build + +Thu Oct 13 17:51:04 2005 Olli Savia + + * ace/TTY_IO.cpp: + Fixed wchar issues. + +Thu Oct 13 14:36:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Don't run the Hang_Shutdown test in a single threaded build + +Thu Oct 13 14:07:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_arpa_inet.cpp: + * ace/Pipe.cpp: + 64bit fixes + +Thu Oct 13 13:54:12 UTC 2005 Johnny Willemsen + + * examples/Threads/tss2.cpp: + Fixed warning in MinGW build + +Thu Oct 13 13:31:12 UTC 2005 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added tests/DLL_Test_Parent + +Thu Oct 13 13:30:12 UTC 2005 Johnny Willemsen + + * ace/Configuration.{h,cpp}: + * ace/FILE_IO.cpp: + 64bit fixes + +Thu Oct 13 13:21:12 UTC 2005 Johnny Willemsen + + * ace/Message_Queue.{h,cpp,inl}: + * ace/Message_Queue_T.{h,cpp}: + Changed message_count to be a size_t to fix 64bit conversion warnings + in code that uses this. + +Thu Oct 13 13:05:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_Thread.{h,inl}: + Changed return type of priority_control from int to long to fix + 64bit issues. + + * ace/Mem_Map.{h,inl}: + * ace/OS_NS_sys_shm.{h,inl}: + Fixed 64bit conversion warnings + +Thu Oct 13 11:46:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_stdlib.{h,cpp,inl}: + Let readline return ssize_t instead of int to fix 64bit + conversion issues + +Thu Oct 13 07:49:37 2005 Olli Savia + + * ace/TTY_IO.cpp: + Include OS_NS_string.h to fix compile error on various platforms. + +Wed Oct 12 23:55:23 2005 Olli Savia + + * ace/TTY_IO.cpp: + Rearranged includes to fix compile error on LynxOS. + +Wed Oct 12 23:08:43 2005 Olli Savia + + * ace/CDR_Stream.inl: + * ace/CDR_Stream.cpp: + * ace/SString.cpp: + Fixed might be unitialized warning in FC4 build. + +Wed Oct 12 22:50:39 2005 Olli Savia + + * ace/TTY_IO.cpp: + * ace/config-freebsd.h: + * ace/config-irix6.x-common.h: + * ace/config-linux-common.h: + * ace/config-openbsd.h: + * ace/config-win32-interix.h: + Changed ACE_USES_NEW_TERMIOS_STRUCT to ACE_HAS_NEW_TERMIOS_STRUCT + to better follow ACE naming conventions. + +Wed Oct 12 22:32:33 2005 Olli Savia + + * ace/TTY_IO.h: + * ace/TTY_IO.cpp: + TTY_IO class overhaul. See NEWS for more information. + + * NEWS: + Added TTY_IO changes. + +Wed Oct 12 12:02:46 2005 Ossama Othman + + * tests/Based_Pointer_Test.cpp: + * tests/dll_test_parent_lib.mpb: + * tests/tests.mpc: + + Fixed project dependencies for tests with an accompanying shared + library. + +Wed Oct 12 12:39:12 UTC 2005 Johnny Willemsen + + * examples/APG/Sockets/Basic.cpp: + * examples/APG/Streams/Util.h: + * examples/APG/Streams/CommandTasks.cpp: + * examples/APG/Threads/Message_Queue.cpp: + * examples/Reactor/Misc/notification.cpp: + * examples/Reactor/Misc/test_timer_queue.cpp: + * examples/Reactor/Multicast/server.cpp: + Fixed 64bit conversion warnings + +Wed Oct 12 09:26:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/ipv6.mpb: + Also for cbx we need to add an extra lib + +Wed Oct 12 08:35:12 UTC 2005 Johnny Willemsen + + * bin/fuzz.pl: + Also raised the level for the rir check + +Wed Oct 12 08:10:12 UTC 2005 Johnny Willemsen + + * bin/fuzz.pl: + Raised the level for the environment macro check to >= 6. This way + the check is there but we don't run it by default in our daily + fuzz build + +Wed Oct 12 08:08:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.5.x.GNU: + Changed the default for exceptions to 1 + +Tue Oct 11 17:53:12 UTC 2005 Johnny Willemsen + + * ace/CDR_Stream.cpp (skip_wchar): + When having a 1.1 stream, we must use + ACE_OutputCDR::wchar_maxbytes_ instead of sizeof (ACE_CDR::WChar) + to determine whether we have to read 2 or 4 bytes for a + ACE_CDR::WChar. This fixes the failing of the TAO Codec test + under fe linux + +Tue Oct 11 08:28:12 UTC 2005 Martin Corino + + * ace/INET_Addr{.h .inl}: + Added additional "is_xx' method for IPv6 address testing. + +Tue Oct 11 01:17:10 2005 Ossama Othman + + From James Megquier + * tests/DLL_Test.cpp (basic_test): + * tests/tests.mpc: + + Rename DLL_Test library to avoid MPC name conflict with DLL_Test + executable. [Bug 2258] + + * ace/config-g++-common.h: + + Sadly, G++ 4.x silently ignores visibility attributes on + template instantiations, which breaks singletons. As a + workaround, we use the GCC visibility pragmas. And to make them + fit in a macro, we use C99's _Pragma() (see + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17470). [Bug 2260] + + * ace/Based_Pointer_Repository.h: + * ace/Obstack.h: + * ace/Timeprobe.h: + * examples/Export/dll.h: + + Declare exported (i.e. default visibility) singleton templates + prior to typedefs that reference them. Prevents g++ 4.0 from + silently making their visibility hidden. [Bug 2260] + + * include/makeinclude/platform_g++_common.GNU: + + Added "no_hidden_visibility" make flag/variable. Setting to "1" + in a platform_macros.GNU file will disable g++ 4.0 visibility + attribute support. [Bug 2259] + +Tue Oct 11 06:53:12 UTC 2005 Johnny Willemsen + + * ace/Guard_T.cpp: + When ACE_HAS_DUMP is defined include Log_Msg.h to get ACE_DEBUG. + Thanks to James Megquier for reporting + this. This fixes bugzilla bug 2257 + + * ACE-INSTALL.html: + Updated Remedy IT support platforms and added + Borland C++ Builder 2006 as new support platform. This is now + publicly announced by Borland. + +Mon Oct 10 15:45:17 2005 William Otte + + * bin/MakeProjectCreator/config/ciao_config_handlers.mpb: + + Updated to reflect changes in config handles. + +Mon Oct 10 19:12:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_dirent.cpp: + Fixed 64bit conversion + +Mon Oct 10 13:08:12 UTC 2005 Johnny Willemsen + + * tests/Reactor_Timer_Test.cpp: + Timers are of type long, so update this test to use long for timer + ids, not int. + +Mon Oct 10 10:51:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added new Big_AMI test + +Sun Oct 9 21:34:08 2005 Olli Savia + + * ace/config-lynxos.h: + Do not define ACE_LACKS_SETREGID ACE_LACKS_SETREUID + on LynxOS 4.x + +Fri Oct 7 17:52:38 2005 J.T. Conklin + + * bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm: + + Fix typo in recently added TAO_IDL_DEP definition. + +Fri Oct 7 17:35:42 2005 J.T. Conklin + + * examples/Service_Configurator/IPC-tests/server/Makefile.am: + * tests/Makefile.am: + + Regenerate to account for recent changes. + +Fri Oct 7 13:31:10 2005 J.T. Conklin + + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + + Changed to add -Sa and -St flags to idlflags variable instead of + tao_idlflags. This ensures they will be emitted (unless they're + suppressed by anytypecode.mpb) in the automake build, where the + value of TAO_IDLFLAGS is set in AutomakeWorkspaceHelper.pm. + + This would have cought recent problems I introduced in TAO when + splitting out IDL compilation into separate projects. + +Fri Oct 7 09:32:06 2005 J.T. Conklin + + * bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm: + + Define TAO_IDL_DEP if TAO_IDL is found in the any per-project + Makefile.am as they are aggregated into the final Makefile.am. + +Fri Oct 7 12:36:12 UTC 2005 Johnny Willemsen + + * tests/Upgradable_RW_Test.cpp: + Fixed might be unitialized warning in MinGW build + +Fri Oct 7 08:15:12 UTC 2005 Johnny Willemsen + + * ace/config-win32-borland.h: + Removed ACE_LACKS_MODE_MASKS, it is in config-win32-common.h. + +Fri Oct 7 07:39:12 UTC 2005 Johnny Willemsen + + * protocols/ace/HTBP/HTBP_Stream.{h,cpp,inl}: + * protocols/ace/HTBP/HTBP_Notifier.{h,cpp,inl}: + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.{h,cpp,i}: + * apps/JAWS/clients/Caching/URL_Locator.{h,cpp,i}: + Removed empty inline files + + * protocols/ace/HTBP/Makefile.am: + * examples/Service_Configurator/IPC-tests/server/Makefile.am: + * apps/JAWS/clients/Caching/Makefile.am: + Removed inline files we zapped above + +Thu Oct 6 15:42:29 2005 Ossama Othman + + * tests/DLL_Test.cpp: + * tests/DLL_Test.h: + * tests/DLL_Test_Impl.cpp: + * tests/DLL_Test_Parent.cpp: + * tests/DLL_Test_Parent.h: + * tests/DLL_Test_Parent_Export.h: + * tests/dll_test_parent_lib.mpb: + + Moved "Parent" base class to a separate DSO/DLL to break a + cyclic dependency, in turn allowing its virtual methods to be + moved out of line. Addresses dynamic_cast<> failures in g++ 4.0 + builds. Thanks to Carlos for suggesting this change. [Bug 2143] + + Moved "Child" subclass virtual methods out of line to address + RTTI related problems when using g++ 4.0's + -fvisibility-inlines-hidden command line option. [Bug 2143] + + * tests/tests.mpc: + + Added new DLL_Test_Parent_Lib project. + + Updated DLL_Test project dependencies to reflect new DLL test + library layout. + + Corrected MPC "dynamicflags" variable for "Based Pointer Test + Lib" and "DLL Test Lib" projects. "ACE_SVC_BUILD_DLL" not + "ACE_BUILD_SVC_DLL". + +Thu Oct 6 17:56:19 2005 Steve Huston + + Added support for Windows Mobile 5 and Pocket PC 2003 using + Visual Studio 2005 (Beta 2). Reorganized some of the config-win32-* + files to ensure OS things are in config-win32-common.h and compiler + things are in the various compiler files. + + * ace/config-win32-common.h: Now #includes config-WinCE.h. It's + possible that config-WinCE.h may get chopped down further and/or + subsumed into config-win32-common.h as config-WinCE.h gets refined. + + Added ACE_LACKS_MODE_MASKS. It's needed on all variants of + Windows and all compilers. + + Turn on both ACE_USES_WCHAR and UNICODE if either is set. Removed + this setting from config-WinCE.h. + + * ace/config-win32-borland.h: + * ace/config-win32-dmc.h: + * ace/config-win32-ghs.h: + * ace/config-win32-mingw.h: + * ace/config-win32-msvc-6.h: + * ace/config-win32-msvc-7.h: + * ace/config-win32-msvc-8.h: + * ace/config-win32-visualage.h: Removed ACE_LACKS_MODE_MASKS. + Removed ACE_ENDTHREADEX (moved to config-win32-msvc.h). + + * ace/config-win32-msvc.h: Added ACE_ENDTHREADEX with proper + setting depending on Windows PC vs. Mobile. + + * ace/config-win32.h: Doesn't include config-WinCE.h any longer. + + * ace/config-WinCE.h: Moved the errno value definitions to + config-win32-msvc-6.h. They're only needed for the eVC 3 and 4 + compilers, which report themselves using the same versions as + MSVC 6. + + * ace/Object_Manager.cpp (init): Only act on config.h's + ACE_DISABLE_WIN32_ERROR_WINDOWS setting if on Windows, but not CE. + + * ace/OS_NS_time.h: Only define struct tm for WinCE if compiling + on something less than Visual Studio 2005. + + * ace/OS_NS_unistd.inl (rmdir, unlink): + * ace/OS_NS_sys_stat.inl (mkdir, stat): For wchar_t version on WinCE, + specify the ...W() form of the system call rather than assume + the call maps to the W form. WinCE can do either A or W now. + + * ace/OS_NS_time.(cpp h) (day_of_week_name[], month_name[]): + * ace/OS_NS_sys_socket.cpp (socket_init, socket_fini): + Changed char array from wchar_t to ACE_TCHAR. WinCE can do either + narrow or wide and this allows it to adjust. Everything was + initialized using ACE_LIB_TEXT already. + + * ace/OS_NS_stdio.inl (fdopen, rename, freopen): For WinCE, need to + convert the ACE_TCHAR string to wchar always. There's no char* + version of fdopen, et al that I can see. + + * ace/Service_Config.(h inl): Only define the alternate + intialize/resume/suspend/remove methods for WinCE if ACE_USES_WCHAR + is set. Else there's already a char* version. + + * ace/TSS_T.cpp (ctor): Use ACE_LIB_TEXT around strings for the + MessageBox() call on CE. This resolves properly depending on the + build. CE doesn't always use unicode any more. + + * tests/Logging_Strategy_Test.cpp (get_statistics): Use time_t + instead of int to return the modified time. Makes it portable to + 64 bits. + +Thu Oct 6 10:09:12 UTC 2005 Johnny Willemsen + + * bin/fuzz.pl: + Extended empty inline files to also ignore lines starting + with /* as real contents. Will propobly reveal another few files + we should zap + +Thu Oct 6 08:24:12 UTC 2005 Johnny Willemsen + + * netsvcs/lib/Base_Optimizer.h: + * netsvcs/lib/Client_Logging_Handler.h: + * netsvcs/lib/Log_Message_Receiver.h: + * netsvcs/lib/Name_Handler.h: + * netsvcs/lib/Server_Logging_Handler.h: + * netsvcs/lib/Server_Logging_Handler_T.h: + * netsvcs/lib/Token_Handler.h: + * netsvcs/lib/TS_Clerk_Handler.h: + * netsvcs/lib/TS_Server_Handler.h: + Converted documentation to doxygen style + +Thu Oct 6 08:19:12 UTC 2005 Johnny Willemsen + + * tests/Message_Queue_Test.cpp: + * tests/Message_Queue_Test_Ex.cpp: + Fixed might be unitialized warning in MinGW build + +Thu Oct 6 08:12:12 UTC 2005 Johnny Willemsen + + * netsvcs/ACE-netsvcs.html: + Fixed small typo + +Wed Oct 5 22:07:19 2005 J.T. Conklin + + * configure.ac: + + Add check for ACE_HAS_PTHREAD_GETCONCURRENCY and + ACE_HAS_PTHREAD_SETCONCURRENCY. + + * ace/OS_NS_Thread.inl: + + Changed ACE_OS::getconcurrency () to use ::pthread_getconcurrency() + if ACE_HAS_PTHREAD_GETCONCURRENCY is set. + + Changed ACE_OS::setconcurrency () to use ::pthread_setconcurrency() + if ACE_HAS_PTHREAD_SETCONCURRENCY is set. + + * ace/README: + + Define ACE_HAS_PTHREAD_GETCONCURRENCY and + ACE_HAS_PTHREAD_SETCONCURRENCY feature test macros. + +Wed Oct 5 13:18:26 2005 Ossama Othman + + * examples/Shared_Malloc/Malloc.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Client.cpp: + * examples/System_V_IPC/SV_Semaphores/Semaphores_1.cpp: + * examples/System_V_IPC/SV_Semaphores/Semaphores_2.cpp: + * tests/SV_Shared_Memory_Test.cpp: + + More include directive additions/fixes. + +Wed Oct 5 13:00:12 UTC 2005 Johnny Willemsen + + * ace/CDR_Base.h: + Doxygen fixes and removed some checks for very old msvc and borland + versions + +Wed Oct 5 12:48:12 UTC 2005 Johnny Willemsen + + * ace/svcconf.mpb: + Replaced some spaces with a tab, should fix our Cygwin build + +Wed Oct 5 10:38:12 UTC 2005 Johnny Willemsen + + * examples/APG/Processes/Spawn.cpp: + Fixed 64bit conversion warnings + +Wed Oct 5 11:11:21 2005 Simon McQueen + + * bin/MakeProjectCreator/config/core_anytypecode.mpb: + + Add new base MPC base project that links with the TAO_AnyTypeCode + library but does not inherit from taoidldefaults or set any IDL + compiler flags. To be used as an alternative to anytypecode.mpb + for all projects under $ACE_ROOT/TAO/tao. + +Wed Oct 5 02:11:28 2005 Ossama Othman + + * ace/ace_os.mpc: + + Removed this file. It was inadvertently committed. + +Wed Oct 5 01:57:37 2005 Ossama Othman + + * apps/JAWS2/JAWS/Cache_Manager.cpp: + * examples/APG/Active_Objects/AO.cpp: + * examples/APG/Active_Objects/AO2.cpp: + * examples/APG/Shared_Memory/Hash_Map.cpp: + * tests/Bound_Ptr_Test.cpp: + + Include appropriate headers to address incomplete type + definition related compile-time errors. Necessitated by header + dependency reductions in ACE. + +Wed Oct 5 08:18:12 UTC 2005 Johnny Willemsen + + * ace/SSL/SSL_Asynch_Stream.cpp: + Fixed bug 1770 and 1805. Yoav Borer + Thanks to for reporting + these. + +Wed Oct 5 00:41:18 2005 Ossama Othman + + * ace/Activation_Queue.cpp: + * ace/Activation_Queue.h: + + Moved "ace/Method_Request.h" include directive to implementation + file. A forward request in the header will suffice. + + * ace/SOCK_CODgram.h: + + Support export macros specific to ACE subset libraries. + + * ace/ace.mwc: + + Added missing "ace_for_tao" subset MPC files. + + * ace/ace_memory_for_tao.mpc: + * ace/ace_reactor_for_tao.mpc: + * ace/ace_sockets_for_tao.mpc: + * ace/ace_threads_for_tao.mpc: + + New TAO-specific ACE subset MPC files that were not committed + in initial "ace_for_tao" commit. + +Tue Oct 4 14:21:26 2005 Ossama Othman + + * netsvcs/lib/TS_Clerk_Handler.h: + + More include directive fixes/additions now necessary due to + header dependency reductions in ACE. + +Tue Oct 4 11:12:31 2005 Ossama Othman + + * apps/JAWS2/JAWS/Cache_Object.h: + * apps/JAWS2/JAWS/Cache_Object.cpp: + + Include appropriate headers to address incomplete type + definition related compile-time errors. Necessitated by header + dependency reductions in ACE. + + Declare lock members that are meant to be mutable in all cases + as "mutable", and remove casts that worked around the + unnecessary "constness" of those members. + +Tue Oct 4 10:39:24 2005 Ossama Othman + + * ace/Service_Config.cpp: + + Include "ace/Signal.h" when ACE_LACKS_UNIX_SIGNALS is + undefined. Addresses build errors in non-Windows builds. + Necessitated by header dependency reductions in ACE. + +Tue Oct 4 10:00:00 UTC 2005 Simon Massey + + * ace/Obstack_T.h: + + Fix warning about nested comments. + +Mon Oct 3 13:30:58 2005 Ossama Othman + + * examples/APG/Containers/Hash_Map.cpp: + * examples/APG/Shared_Memory/Malloc.cpp: + * examples/APG/Shared_Memory/PI_Malloc.cpp: + * examples/APG/Shared_Memory/Pool_Growth.cpp: + * examples/Shared_Malloc/Malloc.cpp: + * examples/Shared_Malloc/Malloc.h: + * examples/Shared_Malloc/test_malloc.cpp: + * examples/Shared_Malloc/test_multiple_mallocs.cpp: + * examples/Shared_Malloc/test_persistence.cpp: + * examples/Shared_Malloc/test_position_independent_malloc.cpp : + + Include appropriate headers to address incomplete type + definition related compile-time errors. Necessitated by header + dependency reductions in ACE. + +Mon Oct 3 18:40:12 UTC 2005 Johnny Willemsen + + * ace/SSL/SSL_Context.cpp: + Use prefix increment/decrement instead of postfix + +Mon Oct 3 10:48:23 2005 Ossama Othman + + * ace/ACE_Memory_export.h: + * ace/ACE_Reactor_export.h: + * ace/ACE_Sockets_export.h: + * ace/ACE_Threads_export.h: + + New export headers for a number of ACE subset libraries. + + * ace/Activation_Queue.cpp: + * ace/Configuration.h: + * ace/Malloc.cpp: + * ace/Obstack_T.h: + * ace/Obstack_T.cpp: + * ace/Svc_Conf_l.cpp: + * ace/Timer_Hash_T.cpp: + * tests/Based_Pointer_Test.cpp: + * tests/Malloc_Test.cpp: + * tests/Message_Block_Test.cpp: + + Include appropriate headers to address incomplete type + definition related compile-time errors. Necessitated by header + dependency reductions in ACE. + + * ace/Activation_Queue.h: + * ace/Barrier.h: + * ace/Based_Pointer_Repository.h: + * ace/Dev_Poll_Reactor.h: + * ace/File_Lock.h: + * ace/LSOCK.h: + * ace/LSOCK_Acceptor.h: + * ace/LSOCK_CODgram.h: + * ace/LSOCK_Connector.h: + * ace/LSOCK_Dgram.h: + * ace/LSOCK_Stream.h: + * ace/MEM_Acceptor.h: + * ace/MEM_Addr.h: + * ace/MEM_Connector.h: + * ace/MEM_IO.h: + * ace/MEM_SAP.h: + * ace/MEM_Stream.h: + * ace/MMAP_Memory_Pool.h: + * ace/Mem_Map.h: + * ace/Method_Request.h: + * ace/Msg_WFMO_Reactor.h: + * ace/Multihomed_INET_Addr.h: + * ace/PI_Malloc.h: + * ace/Pagefile_Memory_Pool.h: + * ace/Priority_Reactor.h: + * ace/Process.h: + * ace/Process_Manager.h: + * ace/Process_Semaphore.h: + * ace/RW_Process_Mutex.h: + * ace/SOCK_Dgram_Bcast.h: + * ace/SOCK_Dgram_Mcast.h: + * ace/SOCK_SEQPACK_Acceptor.h: + * ace/SOCK_SEQPACK_Association.h: + * ace/SOCK_SEQPACK_Connector.h: + * ace/SV_Shared_Memory.h: + * ace/Sbrk_Memory_Pool.h: + * ace/Shared_Memory.h: + * ace/Shared_Memory_MM.h: + * ace/Shared_Memory_Pool.h: + * ace/Shared_Memory_SV.h: + * ace/Thread_Semaphore.h: + * ace/UNIX_Addr.h: + + Support export macros specific to ACE subset libraries. + + * ace/Array_Map.h: + + Comment cleanup. + + * ace/High_Res_Timer.h: + + Removed trailing whitespace. + + * ace/Malloc.h: + + Removed extraneous headers unnecessary for the types declared in + this header. + + * ace/OS_NS_Thread.inl (ACE_Thread_ID): + + Prefer initialization of thread_id_ member in base member + initializer list rather than constructor body. + + * ace/ace.mpc: + * ace/ace.mwc: + * ace/ace_for_tao.mpc: + * ace/ace_os.mpc: + + Add support ACE subsets (predominantly TAO-specific). + + * ace/svcconf.mpb: + + Moved Svc_Conf parser and lexer generation Make rules to this + MPC base project. Allows subset projects to inherit these + rules. + + * bin/MakeProjectCreator/config/ace_for_tao.mpb: + * bin/MakeProjectCreator/config/acememorylib_for_tao.mpb: + * bin/MakeProjectCreator/config/acenosubsets.mpb: + * bin/MakeProjectCreator/config/acereactorlib_for_tao.mpb: + * bin/MakeProjectCreator/config/acesocketslib_for_tao.mpb: + * bin/MakeProjectCreator/config/acethreadslib_for_tao.mpb: + + New TAO-specific ACE subset MPC support. Enabled when + "ace_for_tao" is set to "1" in an MPC features file. + + * bin/MakeProjectCreator/config/aceexe.mpb: + * bin/MakeProjectCreator/config/acelib.mpb: + + Support "ace_for_tao" subset. + + * bin/MakeProjectCreator/config/global.features: + + Disabled "ace_for_tao" feature by default. + + * bin/MakeProjectCreator/config/taolib.mpb: + + Inherit "ace_for_tao" feature project. Causes TAO-based + projects to use the "ace_for_tao" subset libraries when that + feature is enabled. + +Mon Oct 3 12:50:00 2005 Simon Massey + + * ace/Asynch_IO.h: + + Remove some more Doxygen warnings from the scoreboard. + +Mon Oct 3 13:54:12 UTC 2005 Johnny Willemsen + + * performance-tests/Server_Concurrency/Leader_Follower/leader_follower.cpp: + Fixed might be unitialized warning in Cygwin build + +Mon Oct 3 12:50:00 2005 Simon Massey + + * ace/ACE.h: + * ace/Acceptor.h: + * ace/Stats.h: + * ace/Containers_T.h: + + Remove some Doxygen warnings from the scoreboard. + +Mon Oct 3 11:27:13 2005 Simon McQueen + + * bin/tao_other_tests.lst: + + Scheduled TAO/orbsvcs/tests/Bug_2248_Regression. + +Mon Oct 3 09:54:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_gnuwin32_common.GNU: + Changed the default of exceptions to be 1 + +Mon Oct 3 06:22:12 UTC 2005 Johnny Willemsen + + * ace/Log_Msg.{h,cpp}: + Changed type of msg_off_ from int to long to fix 64bit + conversion warnings + +Sun Oct 2 19:18:01 2005 Olli Savia + + * ace/config-lynxos.h: + Added contents from config-lynxos4.0.0.h to this file. + config-lynxos4.0.0.h is no longer needed. + + * ace/config-lynxos4.0.0.h: + Removed this file. + +Sat Oct 1 11:49:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_stdio.cpp: + Fixed _open_osfhandle call + +Fri Sep 30 14:00:36 2005 Chris Cleeland + + * bin/fuzz.pl: + + Added a new test, check_for_refcountservantbase, that will + report occurrences of PortableServer::RefCountServantBase in + code. This is good because the default is now changed in TAO to + reflect the change in the CORBA spec. + + Changed all error and warning messages to be consistently + printed with the keyword "Error: " or "Warning: " followed by + the filename and line number where the problem occurred, then + followed by a text description of the problem. This makes the + messages' format consistent with that output by grep and + compilers so that one can use tools like emacs' 'compile' mode + to step through the fuzz errors and easily fix things. + +Fri Sep 30 10:34:24 2005 J.T. Conklin + + * configure.ac: + + Add feature checks for ACE_LACKS_INTMAX_T, ACE_LACKS_INTPTR_T, + ACE_LACKS_UINTMAX_T, and ACE_LACKS_UINTPTR_T. + + * ace/README: + + Define ACE_LACKS_INTMAX_T, ACE_LACKS_UINTMAX_T, and + ACE_LACKS_UINTPTR_T feature test macros. + +Fri Sep 30 13:34:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + Corrected the directory changing code to take 2 or more deep + relative paths into account. Merged this fix from the MPC + templates bmake. Thanks to Chad Elliott for fixing these. + +Fri Sep 30 08:40:12 UTC 2005 Johnny Willemsen + + * ace/config-win32-borland.h: + * ace/config-win32-msvc-6.h: + * ace/OS_NS_stdio.cpp: + * ace/OS_NS_stdio.inl: + * ace/OS_NS_unistd.inl: + * ace/README: + Added new ACE_LACKS_INTPTR_T and use this. This type is used to call + _open_osfhandle on windows. It seems not to be available with BCB6 + and earlier and msvc6. Thanks to Simon McQueen for notifying me that + msvc6 also lacks this. + +Fri Sep 30 07:14:12 UTC 2005 Johnny Willemsen + + * ace/SOCK_IO.cpp: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/SOCK_Dgram.cpp: + * ace/OS_NS_unistd.inl: + * ace/OS_NS_stdio.inl: + * ace/OS_NS_stdio.cpp: + * ace/MEM_IO.cpp: + * ace/ACE.cpp: + Fixed 64bit conversion warnings when building on win32 with 64bit + warnings enabled + +Thu Sep 29 16:07:02 2005 Arvind S. Krishna + + * bin/FOCUS: + Directory where FOCUS related work will be added. + + * bin/FOCUS/ChangeLog: + * bin/FOCUS/FOCUS.pl: + * bin/FOCUS/NEWS: + * bin/FOCUS/PROBLEM-REPORT-FORM: + * bin/FOCUS/Parser: + * bin/FOCUS/README: + * bin/FOCUS/VERSION: + * bin/FOCUS/docs: + * bin/FOCUS/specializations: + + FOCUS related files and directories. Please read the Changelog + in FOCUS for more details on each component. + + * bin/FOCUS/specializations/Context-Specific-Optimizations: + * bin/FOCUS/specializations/Flushing_Strategy: + * bin/FOCUS/specializations/Messaging_Strategy: + * bin/FOCUS/specializations/Protocol_Family: + * bin/FOCUS/specializations/README: + * bin/FOCUS/specializations/Reactor_Family: + * bin/FOCUS/specializations/Wait_Strategy: + + Specializations for the different components in ACE+TAO. Each + directory contains the specialization files for specializing the + appropriate component/strategy. + + * bin/FOCUS/Parser/FOCUSParser.pm: + + Parser/weaver that reads the specialization description and + performs the transformations. + + * bin/FOCUS/docs/FOCUS.html: + + Start at the documentation effort. + + The Changelogs within the FOCUS directory will capture the + different changes henceforth. + +Thu Sep 29 13:28:29 2005 Chris Cleeland + + * bin/fuzz.pl (check_for_refcountservantbase): + + Added a new fuzz check to catch derivations to + PortableServer::RefCountServantBase. Obviously, this check only + applied to TAO, and the test itself isn't very discriminating as + it simply looks for the presence of + "PortableServer::RefCountServantBase" in a file and doesn't + attempt to detect derivation. There are also no means to turn + off the check in comments. But it's better than nothing. + +Thu Sep 29 15:18:24 2005 Simon McQueen + + * bin/tao_other_tests.lst: + + Scheduled TAO/orbsvcs/tests/Bug_2247_Regression. + +Thu Sep 29 12:18:12 UTC 2005 Johnny Willemsen + + * bin/footprint_stats.sh: + Fixed codeset library name + +Thu Sep 29 09:03:00 UTC 2005 Simon Massey + + * apps/JAWS2/JAWS/IO_Acceptor.cpp: + Fixed unused parameters + +Thu Sep 29 09:02:12 UTC 2005 Johnny Willemsen + + * html/Stats/footer.html: + * html/Stats/configuration.shtml: + * html/Stats/navigation.html: + * html/Stats/index.shtml: + * html/Stats/detailed_footprint.shtml: + I have taken the files currently on the webserver and updated + cvs with these versions. This way we can update these files + in cvs and update the webserver automatically. I will reconfigure + the stats build to copy all the files in this directory to + the webserver when the build is ready + + * html/Stats/footprint.shtml: + * html/Stats/img.html: + * html/Stats/simple_footprint.shtml: + * html/Stats/performance.shtml: + * html/Stats/compilation.shtml: + New files + + * bin/footprint_stats.sh: + Also generate the footprint of the new core TAO libs we added + the last months + +Thu Sep 29 08:01:12 UTC 2005 Johnny Willemsen + + * html/index.html: + Fixed typo + +Thu Sep 29 07:59:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_fcntl.cpp: + Use C++ cast instead of c-style cast + + * ace/FILE_Connector.cpp: + Small layout fix + +Wed Sep 28 11:38:07 2005 Chad Elliott + + Committing the following change on behalf of Wallace Zhang + . + + * bin/tao_orb_tests.lst: + + Enabled a new Smart Proxy test,i.e., + $TAO_ROOT/tests/Smart_Proxies/dtor/run_test.pl + +Wed Sep 28 07:46:57 2005 J.T. Conklin + + * ace/Atomic_Op.cpp: + * ace/Atomic_Op.h: + * ace/Atomic_Op.inl: + * ace/Object_Manager.cpp: + + Revert change: + Fri Sep 16 19:54:20 2005 J.T. Conklin + + As the new ACE_Atomic_Op + template specialization was not found responsible for the + TAO performance regressions. + +Wed Sep 28 11:54:12 UTC 2005 Johnny Willemsen + + * ACE-INSTALL.html: + Small updates to Borland documentation + +Wed Sep 28 07:08:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/compiler.bor: + At the moment BCBVER is not set, we default to BCB6. + +Tue Sep 27 13:40:45 2005 William Otte + + * bin/MakeProjectCreator/config/ciao_config_handlers.mpb + * bin/MakeProjectCreator/config/ciao_xml_utils.mpb + + Added files that should have been part of the previous commit. + +Tue Sep 27 13:12:28 2005 William Otte + + * bin/MakeProjectCreator/config/ciao_client.mpb + + Removed another obsolete ciao base project. + + * bin/MakeProjectCreator/config/ciao_client_dnc.mpb + * bin/MakeProjectCreator/config/ciao_component_dnc.mpb + * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb + * bin/MakeProjectCreator/config/ciao_server_dnc.mpb + + Revamped the CIAO base project structure to fix deficiencies + exposed by the especially strict linker on MacOS. + +Tue Sep 27 10:29:49 2005 William Otte + + * bin/MakeProjectCreator/config/ciao_component.mpb + * bin/MakeProjectCreator/config/ciao_servant.mpb + * bin/MakeProjectCreator/config/ciao_server.mpb + + Removed obsolete CIAO base projects. + +Tue Sep 27 13:02:12 UTC 2005 Johnny Willemsen + + * etc/ciao_DAnCE.doxygen: + Removed zapped XML_Helpers directory + +Tue Sep 27 10:39:12 UTC 2005 Johnny Willemsen + + * bin/fuzz.pl: + Also detect ACE_THROW in an ACE_TRY block + +Mon Sep 26 10:36:12 UTC 2005 Johnny Willemsen + + * bin/fuzz.pl: + Extended fuzz check to detect ACE_THROW_RETURN in an ACE_TRY block, + in that case ACE_TRY_THROW should be used. + +Mon Sep 26 10:02:12 UTC 2005 Johnny Willemsen + + * etc/ciao_xml_helpers.doxygen: + * etc/ciao_config_handlers.doxygen: + Renamed ciao_xml_helpers to ciao_config_handlers. Corrected also + paths, fixes errors in the doxygen build + + * bin/generate_doxygen.pl: + Updated change above + +Sat Sep 24 12:56:20 2005 Bala Natarajan + + * ace/Acceptor.cpp: + * ace/Strategies_T.cpp (accept_svc_handler): + + Errno of failed accept() call is potentially not preserved due + to unguarded call of svc_handler->close(). Thus when + accept_svc_handler() returns -1 the errno value may be due to a + subsequent failure in the svc_handler->close() method rather + than the original accept() failure, making handling of the + accept() failures difficult. Thanks to Russell Mora + for the patch. + +Fri Sep 23 10:07:25 2005 William Otte + + * ace/config-macosx-tiger.h + * include/makeinclude/platform_macosx_tiger_gcc4.GNU + + Updates for Tiger compatibility. Thanks to Michael van der + Westhuizen (r1mikey at gmail dot com) for help with tracking + down some troublesome issues in the platform_macros. + +Thu Sep 22 12:40:20 2005 J.T. Conklin + + * m4/ace.m4: + + Set BUILD_TAO_FLRESOURCE, BUILD_TAO_QTRESOURCE, + BUILD_TAO_TKRESOURCE, and BUILD_TAO_XTRESOURCE automake + conditionals if --enable-fl-reactor, --enable-qt-reactor, + --enable-tk-reactor, or --enable-xt-reactor are specified + at configure time. + +Thu Sep 22 08:40:00 UTC 2005 Simon Massey + + * tests/run_test.lst: + Stop based_pointer_test running on VxWorks and Static builds. + +Thu Sep 22 08:08:12 UTC 2005 Johnny Willemsen + + * examples/ASX/Event_Server/Event_Server/event_server.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.h: + 64bit fix + + * bin/fuzz.pl: + Extended fuzz check to detect several corba calls without an + ACE_CHECK in between + + * ace/SOCK_Dgram.cpp: + Small layout fixes + + * ace/Service_Config.h: + Added missing ACE_LIB_TEXT to some macros + +Tue Sep 20 10:37:24 2005 Douglas C. Schmidt + + * ace/Pipe.inl: Added #include of "ace/ACE.h" to get the + right class definition for the ACE:: methods. Thanks to Simon + Massey for reporting this. + +Tue Sep 20 15:20:12 UTC 2005 Martin Corino + + * bin/tao_orb_tests.lst: + Added new TAO/tests/CallbackTest/*.pl tests. + +Tue Sep 20 10:10:00 UTC 2005 Simon Massey + + * tests/Based_Pointer_Test.cpp: + Attempt to fix bug 2232 (Implimented the diffs found there). + +Tue Sep 20 08:43:12 UTC 2005 Martin Corino + + * bin/tao_other_tests.lst: + Added new IPV6 specific tests. + +Tue Sep 20 08:29:12 UTC 2005 Martin Corino + + * bin/tao_orb_tests.lst: + Added new TAO/tests/BiDirectional/run_test_ipv6.pl + IPV6 test. + +Mon Sep 19 11:43:59 2005 Douglas C. Schmidt + + * docs/ACE-guidelines.html: Added a guideline that disallows the use of + assert() macros et al. in core ACE, TAO, and CIAO + library/framework code. Thanks to Dave Giovannini and Carlos O'Ryan for motivating this. + + * protocols/ace/RMCast/Socket.cpp: Replaced the use of ACE_OS::write() + and ACE_OS::read() with the new ACE_Pipe::send() and + ACE_Pipe::recv() methods thanks to Felix's enhancements. + + * ace/Pipe.{h,inl,cpp}: Added a full complement of send*() and recv*() + methods so that the code is portable across different operating + systems without requiring user-level #ifdefs. Thanks to Felix + Li for submitting these enhancements. + +Mon Sep 19 12:35:39 2005 Justin Michel + + * tests/MT_SOCK_Test.cpp: + + Fix use of ACE_static_cast from my Fri Sep 2 checkin. + +Mon Sep 19 10:51:26 2005 William Otte + + * bin/generate_doxygen.pl + + Removed obsolete CIAO projects from Doxygen generation. + + * etc/ciao_xml_helpers.doxygen + + Updated path to new config_handlers. + + * etc/ciao_assembly_deployer.doxygen + * etc/ciao_componentserver.doxygen + * etc/ciao_daemon.doxygen + * etc/ciao_serveractivator.doxygen + + Removed obsolete ciao doxygen files. + +Sun Sep 18 17:28:12 UTC 2005 Martin Corino + + * ace/INET_Addr.cpp: + Fixed bug in ACE_INET_Addr::string_to_addr(). + +Sun Sep 18 17:26:12 UTC 2005 Martin Corino + + * ace/Log_Msg.cpp: + Fixed compile error in latest addition to code. + +Sun Sep 18 10:08:05 2005 Douglas C. Schmidt + + * ace/Log_Msg.cpp (log): Check for passing of NULL pointers to %s + formatting strings and replace them with "(null") to avoid + crashes. Thanks to Steven Xie for + reporting this and to J.T. for suggesting the fix. + + * protocols/ace/RMCast/Acknowledge.cpp (ACE_RMCast): + made the default ACE_Hash_Map_Manager size be 10 rather than + 1024. Thanks to Felix Li for reporting + this. + +Fri Sep 16 19:54:20 2005 J.T. Conklin + + * ace/Atomic_Op.cpp: + * ace/Atomic_Op.h: + * ace/Atomic_Op.inl: + * ace/Object_Manager.cpp: + + #if 0 ACE_Atomic_Op + specialization to see if it's responsible for recent + TAO performance degradation. + +Fri Sep 16 10:57:12 UTC 2005 Martin Corino + + * bin/tao_orb_tests.lst: + + Added new TAO/tests/IPV6 test to runlist (only when config + IPV6 defined). + +Thu Sep 15 12:35:27 2005 J.T. Conklin + + * THANKS: + + Added Jin Zhi Ye. + + * ace/os_include/os_stdio.h: + + #undef fgetc and fputc if they are defined, as macro expansion + conflicts with our use of the same names in the ACE_OS wrapper + functions. Reported by Jin Zhi Ye . + +Thu Sep 15 18:55:12 UTC 2005 Martin Corino + + * ace/Atomic_Op.inl: + + Small fix to get rid of annoying warning on Windows concerning + unary '-'. + +Wed Sep 14 13:36:34 2005 J.T. Conklin + + * configure.ac: + + Changed ACE_HAS_MEMCPY_LOOP_UNROLL feature test code such that + smemcpy() correctly returns it's first argument. + + Added third argument to ACE_HAS_MEMCPY_LOOP_UNROLL's AC_DEFINE + to provide the description for config.h. + +Tue Sep 13 14:38:12 UTC 2005 Martin Corino + + * include/makeinclude/platform_vxworks5.5.x.GNU: + + Changed munching step for VxWorks SIMPC builds to generate asm + output to circumvent compiler output problem in certain files. + + * include/makeinclude/rules.lib.GNU: + + Small change to make output of prelink step visible for static + libraries build for VxWorks with -frepo. + +Tue Sep 13 09:30:03 2005 Arvind S. Krishna + + * ace/OS_NS_string.{h,cpp,inl}: + Updated the loop unrolled memcpy version name to fast_memcpy + rather than smemcpy. + +Tue Sep 13 09:18:54 2005 Arvind S. Krishna + + * configure.ac: + + Fixed the autoconf test that checks for memcpy loop unrolling + optimization, by (1) removing the testit function and replacing + it with a function pointer, (2) by properly setting the right + ACE macro when the test succeeds and (3) enabling the flag only + when the test produces a result > 10% for all sizes between + 1..16. + +Tue Sep 13 14:10:12 UTC 2005 Martin Corino + + * tests/Cached_Accept_Conn_Test.cpp: + * tests/Cached_Conn_Test.cpp: + * tests/Message_Block_Test.cpp: + + Fixed problems with explicit template instantiations and + VxWorks builds. + +Tue Sep 13 11:52:12 UTC 2005 Martin Corino + + * apps/JAWS2/JAWS/Cache_Manager_T.cpp: + * examples/APG/Logging/LogManager.h: + * examples/APG/Logging/Use_Multiple_Sinks.cpp: + * examples/APG/Logging/Use_Ostream.cpp: + * examples/C++NPv1/Logging_Client.cpp: + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: + * examples/C++NPv2/Server_Shutdown.cpp: + * examples/C++NPv2/TP_Reactor_Logging_Server.cpp: + * examples/Export/test.cpp: + + Fixed for environments defining ACE_USES_OLD_IOSTREAMS + (which unfortunately is the case for Windows x64 at the + moment due to shortcomings in the Platform SDK). + +Tue Sep 13 10:30:00 UTC 2005 Simon Massey + + * bin/tao_orb_tests.lst: + Added Bug_2234_Regression test. + +Tue Sep 13 10:11:12 UTC 2005 Martin Corino + + * bin/tao_orb_tests.lst: + Excluded a few tests based on 'IPV6' configuration because + they use features which are not IPv6 compatible (yet) like + SHMIOP. + +Fri Sep 9 18:57:31 2005 Steve Huston + + * ace/Sock_Connect.cpp (bind_port): Replace variable s_addr with + addr_p. s_addr is a macro on some systems (in this case, Solaris 8) + and caused problems. + +Fri Sep 9 11:05:27 2005 Phil Mesnier + + * ace/config-lynxos4.0.0.h: + Added new config file to accomodate new version of LynxOS. + +Thu Sep 8 16:33:38 2005 J.T. Conklin + + * m4/tls.m4: + + Added support for --with-openssl, --with-openssl-include, and + --with-openssl-libdir options so users can select or override + the location of the OpenSSL libraries. + +Thu Sep 8 18:43:12 2005 Steve Huston + + * tests/Based_Pointer_Test.cpp (mmap_remap_test): Don't keep increasing + the allocation until the base pointer changes without checking for + an allocation failure. This caused all memory to be absorbed on AIX + without remapping the base, then the log file was so big that + the log processor for the scoreboard ran out of memory processing it. + +Thu Sep 8 06:47:11 2005 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + + Allow files with .. in the path to count in the VPATH setting. + +Wed Sep 7 14:44:58 2005 J.T. Conklin + + * ace/SSL/Makefile.am: + * examples/C++NPv2/Makefile.am: + * examples/IPC_SAP/SSL_SAP/Makefile.am: + + Regenerated. + + * bin/MakeProjectCreator/config/ace_openssl.mpb: + + Use 'compile_flags' instead of 'includes' to set compile flags + to @ACE_TLS_CPPFLAGS@. Thanks to Chad Elliot for this hint. + + Uncomment automake "specific" block. + +Tue Sep 6 22:02:16 2005 J.T. Conklin + + * bin/MakeProjectCreator/config/ace_openssl.mpb: + + Subtract /usr/kerberos/includes from includes for automake + builds. + + Changed ${ACE_TLS_FOO} to @ACE_TLS_FOO@ so variables will be + substituted by the values obtained by the configure script. + +Tue Sep 6 21:56:43 2005 J.T. Conklin + + * m4/tls.m4: + + Changed to substitute ACE_TLS_CPPFLAGS and ACE_TLS_LDFLAGS like + was done with ACE_TLS_LIBS. + +Tue Sep 6 19:43:47 2005 J.T. Conklin + + * bin/MakeProjectCreator/config/automake.features: + + New features file for automake build. + +Tue Sep 6 17:37:15 2005 J.T. Conklin + + * bin/MakeProjectCreator/config/ssl.mpb: + * ace/SSL/ssl.mpc: + + Changed to inherit from ace_openssl.mpb instead of openssl.mpb. + + * bin/MakeProjectCreator/config/ace_openssl.mpb: + + New file, similar to other ace_*.mpb files, so we can + override values inherited from MPC's openssl.mpb. + +Tue Sep 6 12:20:22 2005 J.T. Conklin + + * ace/Object_Manager.cpp: + + Changed to invoke ACE_Atomic_Op::init_functions () to initialize function pointers. + + * ace/Atomic_Op.cpp: + * ace/Atomic_Op.h: + * ace/Atomic_Op.inl: + + Added ACE_Atomic_Op template + specialization using the existing atomic operations for longs + with judicious use of casts. The implementation isn't ideal, + since two sets of function pointers need to be set. This can + be revisited when we add specializations for int and unsigned + int. + +Tue Sep 6 10:32:23 2005 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Change the position of the use of custom 'output_option' setting. + Ensure that the input file is the last thing on the command line. + +Tue Sep 6 12:51:19 UTC 2005 Don Sharp + + * apps/JAWS2/JAWS/IO.h + Small fix to counter LynxOS' defining ERROR_MESSAGE + +Tue Sep 6 08:46:12 UTC 2005 Martin Corino + + * include/makeinclude/platform_vxworks5.5.x.GNU: + Small fix for '-frepo' builds with shared libs. + +Mon Sep 5 14:56:53 2005 Boris Kolpackov + + * protocols/ace/RMCast/Socket.cpp: + + Reverted this change: "Replaced calls to read/write with + recv_n/send_n to make things work with BCB on Windows". + It breaks VC6. + +Sun Sep 4 22:27:19 2005 Boris Kolpackov + + * protocols/ace/RMCast/Link.cpp: + + Aligned receiving buffer manually. This is necessary because + some of the broken compilers (like BCB) do not adhere to the + standard when it some to the alignment of the buffers returned + by operator new. Thanks to Vladislav Zverev for reporting this. + + * protocols/ace/RMCast/Socket.cpp: + * protocols/ace/RMCast/Socket.h: + + Added the from argument to the recv() function. Made the Reactor + interface code executed only when it is actually used. Replaced + calls to read/write with recv_n/send_n to make things work with + BCB on Windows. Thanks to Vladislav Zverev for suggestions. + +Fri Sep 2 08:29:38 2005 Arvind S. Krishna + + * ace/OS_NS_string.h: + * ace/OS_NS_string.cpp: + * ace/OS_NS_string.inl: + + Updated the ACE_OS::memcpy optimization to factor out the loop + unrolled code into a separate function. This should enable + memcpy function itself to be inlined. Thanks to JT jtc at + acorntoolworks dot com. + +Fri Sep 2 10:44:12 UTC 2005 Martin Corino + + * ace/SOCK_Dgram{.h .cpp}: + * ace/SOCK_Dgram_Mcast{.h .cpp}: + Added IPv6 multicast support for Win32 (>= XP Pro/Server 2003). + + * tests/Multicast_Test_IPV6.cpp: + Changed to do IPv6 multicast for non-linux systems as well. + + * bin/MakeProjectCreator/config/ipv6.mpb: + Added new feature config for IPv6 support. + Adds additional link library Iphlpapi.lib for windows projects + (MPC types vc6, vc7, vc71, vc8, nmake, borland and bmake) + and sets macro ACE_HAS_IPV6. + + * bin/MakeProjectCreator/config/global.features: + * bin/MakeProjectCreator/config/acedefaults.mpb: + Introduced 'ipv6' feature. + +Fri Sep 2 15:08:27 2005 Justin Michel + + * ace/ACE.cpp: + + The code that waited for connections to complete had problems + with some Windows machines. The code now doesn't trust the write + bit in select() to indicate an accepted connection. + + * ace/SOCK_Connector.cpp: + + There was a workaround for ACE_WIN32 that would wait 35ms and + retry after the first connection failure. It wouldn't retry the + connect(), but would just retry select(). This workaround + appears to be unnecessary for current Windows machines, so I + changed the #ifdef ACE_WIN32 to #ifdef ACE_HAS_NON_BLOCKING_BUG. + + * ace/config-win32-common.h: + + ACE would always default to a ACE_DEFAULT_BACKLOG of 5. Changed + to default to SOMAXCONN on Win32. This special value is used by + Winsock listen() to indicate that the machine should + automatically pick a suitable default. + + * tests/MT_SOCK_Test.cpp: + + This test is really to verify that the listen() backlog feature + works correctly. Updated the code to make this testable and + consistent. The code now sleeps in the server thread to give the + 30 client threads time to attempt to connect. Only 5-9 clients + should succeed, because the Acceptor is created with a listen() + backlog=5. + +Thu Sep 1 17:28:25 2005 J.T. Conklin + + * ace/Atomic_Op.cpp: + * ace/Atomic_Op.h: + + Added ACE_Atomic_Op template + specialization for AMD64 when compiled with GCC. + +Thu Sep 1 17:38:10 2005 William Otte + + * bin/ciao_tests.lst + + Corrected the path to the hello test. + +Thu Sep 1 18:00:31 2005 Steve Huston + + * tests/Based_Pointer_Test.cpp: Corrected to build on MSVC 6, + lacking template typedefs. Thanks to Johnny Willemsen for + this fix. + +Thu Sep 1 15:05:55 2005 William Otte + + * bin/MakeProjectCreator/config/ciao_client_dnc.mpb + * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb + + Updates to support the CIAO reorganization. + +Thu Sep 1 19:14:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + For MPC projects that are custom_only and only have IDL + build rules the install target didn't work anymore. If the project + is not an dll or exe, we generate an include of install.bor + and set the install types to includes. This way the install + target works for the generate borland makefiles + +Thu Sep 1 11:55:39 2005 J.T. Conklin + + * ace/OS_NS_unistd.cpp (num_processors, num_processors_online): + + Provide implementation for *BSD and MacOSX. + +Thu Sep 01 10:42:17 2005 Gary Maxey + + * ace/config-tandem-nsk-mips-v3.h: + Defined ACE_SIZEOF_WCHAR + +Thu Sep 1 15:20:12 UTC 2005 Johnny Willemsen + + * ace/SV_Message_Queue.h: + Fixed copy/paste error + +Thu Sep 1 14:22:12 UTC 2005 Johnny Willemsen + + * ace/POSIX_Proactor.cpp: + * ace/SV_Message_Queue.{h,inl}: + Fixed 64bit warnings + + * ace/UPIPE_Connector.cpp: + Fixed formatting + +Thu Sep 1 14:11:12 UTC 2005 Johnny Willemsen + + * ace/Timer_Heap_T.cpp: + Fixed 64bit conversion error + +Thu Sep 1 10:10:12 UTC 2005 Johnny Willemsen + + * ace/ACE.cpp: + * ace/LSOCK.{h,cpp}: + Fixed 64bit conversion problems + +Thu Sep 1 10:03:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + Suppress warning 1684 with Intel 9. This is: + Conversion from pointer to same-sized integral type + (potential portability problem) + +Thu Sep 1 09:27:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_sys_socket.{h,inl}: + Updated return value of send/recv methods from int to ssize_t to + fix problems on 64bit systems. On 32bit systems int is size of + ssize_t so no backward compatibility issues. This is part of + bug 2203 + + * ace/OS_NS_unistd.inl: + Replaced c-style cast with C++ cast + +Thu Sep 1 08:20:12 UTC 2005 Martin Corino + + * include/makeinclude/platform_vxworks5.5.x.GNU: + Added missing library searchpath for '-frepo' builds. + +Thu Sep 1 07:42:12 UTC 2005 Johnny Willemsen + + * ace/Service_Config.h: + Added ACE_REMOVE_SERVICE_DIRECTIVE that works with plain svc.conf + and the xml version. Thanks to + Lothar Werzinger for creating this new + macro + +Wed Aug 31 14:25:12 UTC 2005 Johnny Willemsen + + * ace/DLL_Manager.cpp: + Initialize pointer to zero + +Wed Aug 31 14:11:12 UTC 2005 Johnny Willemsen + + * ace/MEM_Stream.{h,inl}: + * ace/OS_NS_sys_msg.{h,inl}: + 64bit fixes + + * ace/Framework_Component.cpp: + Initialize pointer to zero + +Wed Aug 31 08:48:19 2005 Arvind S. Krishna + + * configure.ac: + Added a test to see if memcpy unrolling improves performance as + opposted to a vanilla memcpy. This optimization is thanks to + Mike Martinez martinez_m at oci dot com. + + * OS_NS_string.inl: + Updated ACE_OS::memcpy to use the corresponding loop unrolling + based on a flag set by configure. + +Wed Aug 31 10:33:12 UTC 2005 Johnny Willemsen + + * ace/Get_Opt.cpp: + Fixed 64bit conversion warning + +Wed Aug 31 10:29:12 UTC 2005 Johnny Willemsen + + * ace/LSOCK.{h,cpp} (recv_handle): + Changed the type of the len argument from int to ssize_t to + fix 64bit conversion problems + +Wed Aug 31 10:26:12 UTC 2005 Johnny Willemsen + + * ace/Log_Msg_UNIX_Syslog.{h,cpp}: + * ace/Log_Record.{h,inl}: + Fixed 64bit conversion problems + +Wed Aug 31 10:16:12 UTC 2005 Johnny Willemsen + + * ace/Timer_Heap_T.{h,cpp}: + Fixed 64bit conversion problems + +Wed Aug 31 07:39:12 UTC 2005 Martin Corino + + * ace/Sock_Connect.cpp: + Fixed WChar problem. + +Wed Aug 31 06:10:12 UTC 2005 Johnny Willemsen + + * tests/Based_Pointer_Test_Lib.cpp: + Fixed GCC 4 error + +Tue Aug 30 14:50:18 2005 Ossama Othman + + * ace/OS_NS_Thread.inl (ACE_Thread_ID): + + Moved small functions out-of-line. Reduces footprint and + improves performance slightly. + + From Patrick Bennett + * ace/OS_NS_Thread.cpp (operator==): + * ace/Thread_Manager.inl (operator=-): + + Corrected thread id/handle equality logic. It was previously + inverted. + +Tue Aug 30 18:50:12 UTC 2005 Johnny Willemsen + + * tests/Based_Pointer_Test.cpp: + Corrected remap test, some platforms grow the mmap area + downwards. This fixes bugzilla bug 2226. Thanks to + James Megquier for reporting this and + Steve Williams for validating this. + +Tue Aug 30 18:31:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + Use -fPIC instead -KPIC + +Tue Aug 30 18:20:12 UTC 2005 Johnny Willemsen + + * tests/Based_Pointer_Test.cpp: + Some more wchar fixes + +Tue Aug 30 18:16:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_Thread.{h,cpp}: + Made the methods id, handle and to_string of the ACE_Thread_Id + class const. Thanks to Felix Wyss + for reporting this. + +Tue Aug 30 18:11:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + Use icpc as C++ compiler. + +Tue Aug 30 14:49:12 UTC 2005 Martin Corino + + * ace/README: + Added description for new ACE_HAS_IPV6_V6ONLY macro. + +Tue Aug 30 13:49:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_win32_icc.GNU: + First version of Intel C++ compiler on Windows using GNU make + + * ace/config-win32-msvc-7.h: + Only define ACE_HAS_EXCEPTIONS when it is not defined yet + +Tue Aug 30 12:38:12 UTC 2005 Johnny Willemsen + + * ace/Array_Map.h: + The 64bit version of the Intel C++ compiler can only work together + with the latest Platform SDK (June 2005). This SDK ships with an + old version of the system header files, this is not the same as + shipped with Visual C++ 2003. This SDK has the old STL implementation + as shipped with VC6, so we need the workaround for the VC6 compiler + also with the latest SDK. It seems newer system header files define + _CPPLIB_VER, when this is not defined we have old header file, so + made another check, when _MSC_VER is defined, but not _CPPLIB_VER + we assume older header files and use the vc6 way of reverse + iterator usage. Hopefully Microsoft ships a platform SDK soon which + has updated header files + +Tue Aug 30 12:22:17 2005 Simon McQueen + + * apps/JAWS2/JAWS/IO.cpp: + * apps/JAWS2/JAWS/IO.h: + + Removed mispelled message type 'CONFORMATION'. + +Tue Aug 30 10:32:12 UTC 2005 Johnny Willemsen + + * ace/Process_Manager.cpp: + * ace/WFMO_Reactor.cpp: + Fixed incorrect checks for MSC_VER, it should be _MSC_VER + +Tue Aug 30 10:02:12 UTC 2005 Johnny Willemsen + + * tests/Based_Pointer_Test.cpp: + Fixed compile error + +Tue Aug 30 09:00:12 UTC 2005 Martin Corino + + * ace/Default_Constants.h: + Added some new default macros for IPv6. + + * ace/INET_Addr{.cpp .h .inl}: + Added more (IPv6 specific) functionality (is_xxx methods). + Changed get_host_addr() to return IPv6 formatted string for + IPv4 mapped IPv6 addresses (argumentation inside:). + Changed string_to_addr() to recognize and handle extended + IPv6 textual address format, i.e. '[' ']'. + + * ace/Sock_Connect.cpp: + Added support for retrieval of IPv6 local interfaces to + ACE::get_ip_interfaces(). + Supported for Windows XP (and newer) and Linux (possibly other + *nixes as well). + +Tue Aug 30 06:02:12 UTC 2005 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + When inlining is disabled, add -fno-inline to the compiler flags. + This should fix the assembler errors the Intel 9 compiler on + linux gives + +Mon Aug 29 17:26:49 2005 Steve Huston + + * ace/Reactor_Token_T.h: Set the default queueing policy to + ACE_Token::FIFO, instead of ACE_TOKEN_TYPE::FIFO to work around + MSVC 6's inability to deal with the definition inside a + template class argument. This hack can be removed after + ACE 5.5 is released. + +Mon Aug 29 19:33:12 UTC 2005 Johnny Willemsen + + * tests/Based_Pointer_Test.cpp: + Wchar fixes + +Mon Aug 29 14:29:12 UTC 2005 Johnny Willemsen + + * tests/Based_Pointer_Test.cpp: + Fixed GCC compile error + +Mon Aug 29 14:01:12 UTC 2005 Johnny Willemsen + + * ace/Object_Manager.cpp: + Also for Intel C++ call the _CrtSetReportMode + +Mon Aug 29 10:56:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/nmake.features: + New features file for the nmake project type + +Mon Aug 29 09:31:12 UTC 2005 Johnny Willemsen + + * ace/MMAP_Memory_Pool.cpp: + Fixed bugzilla bug 2218, when an ACE_MMAP_Memory_Pool memory + segment base address is moved due to a remapping operation, + the ACE_Based_Pointer_Repository is updated with the new + base address, but the old mapping was not removed. + + Thanks to Steve Williams for reporting + this and supplying the fix and regression test below. + +Mon Aug 29 09:20:12 UTC 2005 Johnny Willemsen + + * ace/MMAP_Memory_Pool.cpp: + Fixed bugzilla bug 2216, when an ACE_MMAP_Memory_Pool is created + using an existing backing store, the ACE_Based_Pointer_repository + was not updated with the mapped segment information. + + Thanks to Steve Williams for reporting + this and supplying the fix and regression test below. + +Mon Aug 29 09:14:12 UTC 2005 Johnny Willemsen + + * ace/Based_Pointer_Repository.h: + Export the based pointer repository from the dll as singleton. + Fixes bugzilla bug 1919. + + * tests/Based_Pointer_Test.cpp: + * tests/Based_Pointer_Test_Lib.cpp: + New test for bugzilla bug 1919. Thanks to Steve Williams + for creating this test + + * tests/run_test.lst: + Added Based_Pointer_Test + + * tests/tests.mpc: + Added Based_Pointer_Test + +Sun Aug 28 14:25:07 2005 Arvind S. Krishna + + * ace/Reactor.h: + * ace/Reactor.cpp: + * ace/Reactor.inl: + * ace/Select_Reactor.h: + * ace/Select_Reactor_Base.h: + * ace/Select_Reactor_T.cpp: + * ace/Select_Reactor_T.h: + * ace/TP_Reactor.cpp: + + The reactor framework in ACE allows plug and play of different + reactors such as Select, TP, Devpoll etc. The TAO middleware + implementation and applications that run atop TAO typically use + one particular implementation of the Reactor. For example, a + single-threaded application might use select_* reactors. The + Reactor framework uses the bridge pattern to transparently + invoke operations on the right reactors. When the concrete + Reactor is known, it should be possible to specialize the + framework to use the concrete reactor directly rather than use + the bridge. + + As a part of the Feature Oriented Customizer (FOCUS) tool being + developed in my research, we are trying to specialize frameworks + when the concrete implementation type is known a priori. FOCUS + provides an XML based transformation engine, where the + specialization transformations are captured in XML file and a + weaver specializes the code. + + To help in this transformation process, this commit adds markers + within the source code. These markers are added as special + comments. For example, //@@ + REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK represents a hook + where forward declarations and include files are added by the + weaver. As these markers are comments therefore should not + affect normal applications in *any* manner. Additionally, + applications that use multiple reactor implementations not be + affected/do not need any change. Currently, these + specializations are targeted for TAO middleware, where + applications know the target reactor a priori and want to + leverage the specialization to improve performance. + +Sun Aug 28 14:13:25 2005 Arvind S. Krishna + + * ace/Object_Manager.cpp: + * ace/Naming_Context.cpp: + * ace/Log_Msg.cpp: + + When ACE_HAS_TRACE flag is defined, the aforementioned files did + not include the Trace.h include. This commit fixes the + resulting compilation problems. + +Fri Aug 26 18:01:31 2005 Steve Huston + + * ace/Select_Reactor.cpp: + * ace/Select_Reactor_Base.h: + * ace/Select_Reactor_T.(h cpp): + * ace/Reactor_Token_T.(h cpp): Moved the definition/implementation of + ACE_Select_Reactor_Token_T and its associated token-type selection + macros to new file Reactor_Token_T.(h cpp); retargeted + ACE_Select_Reactor_Token_T to call the ACE_Reactor_Impl interface + rather than ACE_Select_Reactor. Renamed the class + ACE_Reactor_Token_T to reflect this refactoring. This allows the + token to be used in reactor implementations that are not derived + from ACE_Select_Reactor. + + * ace/ace.mpc: + * ace/Makefile.am: Added the new files Reactor_Token_T.cpp and .h. + + * ace/Dev_Poll_Reactor.(h cpp): Replace the use of ACE_SYNCH_MUTEX with + ACE_Reactor_Token_T for the reactor's internal-protecting lock. + Allows threads wishing to twiddle with the registrations or run the + event loop to properly notify and synchronize with another thread + that's already running the event loop. + Also Clarified documentation on the queue-type members of + ACE_Dev_Poll_Reactor_Notify. + + * ace/POSIX_Proactor.cpp (ACE_POSIX_SIG_Proactor::handle_events_i): + Retry the wait on EINTR. Previous comments said this automatically + happened because ACE_OSCALL_RETURN did it; it no longer does that, + so explicit EINTR check code was added here. + + * apps/JAWS3/jaws3/Event_Dispatcher.h: Correct for the new reactor + token type defined, above. + + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: Added ACE_TEXT + where needed for ACE_DEBUG statements. + + * tests/Multicast_Test.cpp: After stopping the reactor loop on test + timeout, wait for the task's thread(s) to exit or there's a race + between thread exit and deleting the task's memory. + +Fri Aug 26 10:52:38 2005 Gary Maxey + + * ace/Array_Map.inl: + + In operator[], broke complex statement into two statements. + Compiler got confused by the original statement and generated + incorrect code. + +Fri Aug 26 11:43:01 2005 Justin Michel + + * ace/CDR_Stream.h: + * ace/CDR_Stream.inl: + * ace/CDR_Stream.cpp: + + Add a new simple class using RAII to call reset on an output CDR + when it goes out of scope. This is used to implement a new TAO + option that will reset() output CDRs after sending each request. + + Add an optional ACE_Lock* to one of the input CDR + constructors. This is used by one of the TAO Any_Impl derived + classes to provide thread safety for its internal CDR. + +Fri Aug 26 11:02:21 2005 Chad Elliott + + * bin/fuzz.pl: + + Enhanced the check_for_ace_check function to detect the use of + ACE_CHECK/ACE_CHECK_RETURN from within an ACE_TRY block. + +Fri Aug 26 09:40:08 2005 Justin Michel + + * ace/OS_NS_Thread.cpp: + + Add missing ACE_ADAPT_RETVAL functions for calls to ::pthread* + routines. This allows the caller to check the errno to find out + what went wrong. + +Fri Aug 26 09:06:32 2005 Chad Elliott + + * bin/fuzz.pl: + + Fixed the detection of missing ACE_CHECK/ACE_TRY_CHECK. It was + missing most ACE_ENV_ARG_PARAMETER's due to a fouled up regular + expression. + +Fri Aug 26 13:29:12 UTC 2005 Johnny Willemsen + + * ace/Reactor.cpp (schedule_timer): + Fixed implicit conversion from long to int to long, found + by 64bit warnings + + * ace/POSIX_Asynch_IO.cpp: + Fixed 64bit bit conversion warning + +Thu Aug 25 18:53:31 2005 Steve Huston + + * tests/Array_Map_Test.cpp: Don't attempt to build this test if + using explicit template instantiation. It's hopeless trying STL + code with explicit templates, especially portably. + + * tests/Time_Value_Test.cpp: Fixed typo. + +Thu Aug 25 11:40:36 2005 Chris Cleeland + + * ace/Task.cpp (activate): Corrected misuse of the argument + 'grp_id' rather than the data member 'grp_id_'. This prevented + activate() from being able to join existing group. Thanks to + Kevin Heifner for catching this. + +Thu Aug 25 12:32:18 2005 Steve Huston + + * tests/Process_Manual_Event_Test.cpp: Removed #if0 block put in + for testing and fixed compile error. + +Wed Aug 24 19:09:31 2005 Steve Huston + + * configure.ac: Copied in updated copyright paragraph from COPYING. + + * ace/OS_NS_Thread.cpp: Formatting fixes. + + * tests/Process_Manual_Event_Test.cpp: ACE_ERROR formatting + corrections (%p needs a string); code format fixes. + +Wed Aug 24 17:15:28 2005 Steve Huston + + * ace/Stream_Modules.h: Added some info about ACE_Stream_Head so + I don't have to keep looking it up ;-) + +Wed Aug 24 12:39:04 2005 Chad Elliott + + * bin/fuzz.pl: + + Fixed this script to work with the ACE_ENV_ARG_PARAMTER and + ACE_ENV_SINGLE_ARG_PARAMETER macros. This will begin to check all + of the missing ACE_CHECK/ACE_TRY_CHECK's again. + +Wed Aug 24 08:51:12 UTC 2005 Johnny Willemsen + + * ace/Select_Reactor_Base.cpp: + Fixed possible unitialized used warning + +Tue Aug 23 22:56:33 2005 Ossama Othman + + * ace/Dev_Poll_Reactor.cpp (close): + + Removed unnecessary zeroing of underlying epoll data structure + array. + + Deallocate epoll event data structure array and /dev/poll event + handler file descriptor array after closing the epoll and + /dev/poll file descriptor, respectively, to ensure consistent + finalization of resources, to prevent potential destruction of + event resources while waiting for events in another thread. + It's not clear whether such a scenario will occur since a lock + is currently held but better to be consistent. + +Tue Aug 23 22:35:00 2005 Ossama Othman + + * tests/Array_Map_Test.cpp (reference_count_test): + + Added some assertions to further verify correct ACE_Array_Map + operation. + + * tests/Dev_Poll_Reactor_Test.cpp (handle_input): + + Fixed loop variable increment. A for-scope variable was + shadowing the "bytes_read" value, preventing the loop variable + from being updated correctly. + +Tue Aug 23 22:24:16 2005 Ossama Othman + + * ace/Atomic_Op_T.cpp: + * ace/Atomic_Op_T.inl: + + Moved inlined constructor to the ".inl" inline source file. + +Tue Aug 23 22:17:29 2005 Ossama Othman + + * apps/JAWS2/JAWS/JAWS.h: + + Fixed '"JAWS_NTRACE" is not defined' g++ 4.0 preprocessor symbol + warning. + +Tue Aug 23 19:59:12 UTC 2005 Johnny Willemsen + + * apps/JAWS2/JAWS/IO_Handler.{h,cpp}: + Tried to fix gcc4 errors + +Tue Aug 23 18:57:12 UTC 2005 Johnny Willemsen + + * ace/Configuration.cpp: + Explicitly initialize local variables + + * ace/OS_NS_sys_socket.inl: + Removed not needed c-style casts that caused 64bit warnings + +Mon Aug 22 09:36:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/bmake.features + * bin/MakeProjectCreator/config/borland.features + * bin/MakeProjectCreator/config/em3.features + * bin/MakeProjectCreator/config/gnuace.features + * bin/MakeProjectCreator/config/vc6.features + * bin/MakeProjectCreator/config/vc71.features + * bin/MakeProjectCreator/config/vc8.features + New features file for each project type we ship in the release. + This files are read by MPC for the correct type when generating + makefiles. + + * bin/make_release: + No need to generate multiple default.features file in the + release proces, this is now handled in the features file + per project type + +Mon Aug 22 08:46:12 UTC 2005 Johnny Willemsen + + * ace/config-unixware-7.1.0.udk.h: + Removed commented out define + +Mon Aug 22 08:30:12 UTC 2005 Johnny Willemsen + + * ace/config-win32-msvc-8.h: + Disable warning 4290 again + +Mon Aug 22 08:29:12 UTC 2005 Johnny Willemsen + + * ace/Configuration.{h,cpp}: + Moved operator != out of header file to cpp file + +Mon Aug 22 11:09:07 2005 Olli Savia + + * include/makeinclude/platform_lynxos.GNU: + Improved shared library support for LynxOS 4.0 + +Sun Aug 21 13:19:12 UTC 2005 Johnny Willemsen + + * ace/Select_Reactor_T.cpp (check_handles): + Pass select_handles as 0 on Win32, this was now just done for + Win64, but it is not needed on Win32 and also causes conversion + warnings when 64bit checks are enabled on win32. + +Sun Aug 21 11:13:12 UTC 2005 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added the new core libs + +Fri Aug 19 14:15:12 UTC 2005 Martin Corino + + * ace/Sock_Connect.cpp: + Reverted IPv6 related to accomodate some TAO builds which have + ACE_HAS_IPV6 but do not have my TAO IPv6 changes yet. + Will commit all at a later moment. + +Fri Aug 19 13:39:12 UTC 2005 Johnny Willemsen + + * ace/Name_Request_Reply.cpp: + Fixed conversion warning + +Fri Aug 19 13:26:12 UTC 2005 Johnny Willemsen + + * ace/DLL_Manager.cpp + * ace/Log_Msg.cpp + * ace/MEM_Acceptor.cpp + * ace/MEM_IO.inl + * ace/Select_Reactor_Base.cpp + * ace/SV_Semaphore_Complex.cpp + * ace/UUID.cpp + * ace/WIN32_Asynch_IO.cpp + Fixed conversion warnings given by Visual C++ 2003 at warning + level 4. Used the correct types for intermediate variables, no + casts are needed. + +Fri Aug 19 12:28:12 UTC 2005 Johnny Willemsen + + * ace/CORBA_macros.h: + For HP aCC use the special ACE_THROW_RETURN to fix the warnings + that the compiler gives + +Fri Aug 19 09:54:12 UTC 2005 Johnny Willemsen + + * etc/tao_pi.doxygen: + * etc/tao_pi_server.doxygen: + * etc/tao_anytypecode.doxygen: + New config files + + * etc/tao_portableserver.doxygen: + Cleanup + + * html/index.html: + Added new libs + + * bin/generate_doxygen.pl: + Also generate documentation for the new projects + +Fri Aug 19 09:04:12 UTC 2005 Martin Corino + + * ace/Sock_Connect.cpp: + Added include of OS_NS_stdio.h since some builds otherwise miss out + on things like ACE_OS::fopen() and such (now for real). + + * ace/SOCK_Connector.cpp: + Reverted change which was meant for Sock_Connect.cpp:-( + +Fri Aug 19 08:40:12 UTC 2005 Johnny Willemsen + + * ace/config-win32-msvc-7.h: + Disable 4290 again, a scoreboard build showed that we need to + disable it, but didn't had that problem on my local systme + +Fri Aug 19 08:33:12 UTC 2005 Martin Corino + + * ace/Sock_Connect.cpp: + Added include of OS_NS_stdio.h since some builds otherwise miss out + on things like ACE_OS::fopen() and such. + +Fri Aug 19 07:56:12 UTC 2005 Johnny Willemsen + + Merged changes from the AnyRefactor branch as below + + Wed Aug 17 07:01:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/anytypecode.mpb: + * bin/MakeProjectCreator/config/taoclient.mpb: + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + By default we now suppress Any and Typecode generation with -Sa + and -St but when the AnyTypeCode library is used, then these + options are removed from the idl flags. This way simple apps + don't get this lib by default + + Tue Aug 16 19:00:12 UTC 2005 Johnny Willemsen + + * ace/config-win32-msvc-7.h: + * ace/config-win32-msvc-8.h: + Removed disabling of warning 4290 + + * ace/CORBA_macros.h: + Removed special ACE_THROW_RETURN for win32 and HP aCC, this + is not needed and only gives a lot of warnings at level 4 + with msvc + + Thu Aug 11 10:48:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/orbsvcsexe.mpb: + Added AnyTypeCode + + Wed Aug 10 11:40:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/orbsvcslib.mpb: + Added AnyTypeCode as base project. + + Wed Aug 10 09:34:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/valuetype.mpb: + Added AnyTypeCode as base project + + Wed Aug 10 08:14:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/taoclient.mpb: + Just for short, added anytypecode to the client. This should really be + dependent on the idl compiler flags + + Fri Jul 29 18:30:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/codecfactory.mpb + * bin/MakeProjectCreator/config/dynamicany.mpb + * bin/MakeProjectCreator/config/ifr_client.mpb + * bin/MakeProjectCreator/config/iormanip.mpb + * bin/MakeProjectCreator/config/strategies.mpb + Added AnyTypeCode as base project + + Thu Jul 28 12:33:12 UTC 2005 Johnny Willemsen + + * bin/MakeProjectCreator/config/anytypecode.mpb: + New base project + +Thu Aug 18 09:34:12 UTC 2005 Martin Corino + + * ace/Sock_Connect.cpp: + Added support for retrieval of IPv6 local interfaces to + ACE::get_ip_interfaces(). + Supported for Windows XP (and newer) and Linux (possibly other + *nixes as well). + +Wed Aug 17 18:39:12 UTC 2005 Johnny Willemsen + + * ace/Message_Block.{h,cpp,inl}: + In case a locking strategy is used, also make sure we use the + lock when accessing the reference count of the ACE_Data_Block. + Thanks to Viktor Chernenko + for reporting this + and supplying some patches to start with. This should fix + according to Viktor some crashes in the notificaion service + under high load. + +Wed Aug 17 15:30:12 UTC 2005 Johnny Willemsen + + * ace/Condition_Recursive_Thread_Mutex.{h,cpp}: + Moved ACE_Condition_Recursive_Thread_Mutex constructor + implementation from header to cpp file + +Wed Aug 17 15:25:12 UTC 2005 Johnny Willemsen + + * apps/JAWS2/JAWS/Waiter.cpp: + Call find_by_index instead of find + +Tue Aug 16 19:13:12 UTC 2005 Johnny Willemsen + + * apps/JAWS2/JAWS/Assoc_Array.{h,cpp}: + * apps/JAWS2/JAWS/Concurrency.cpp: + Changed find(int) to find_by_index (int), to resolve + ambiguity warnings of the HP aCC compiler + +Tue Aug 16 11:16:12 UTC 2005 Johnny Willemsen + + * apps/JAWS2/JAWS/Pipeline_Handler_T.cpp: + Replaced c-style cast with reinterpret cast + +Tue Aug 16 11:11:12 UTC 2005 Johnny Willemsen + + * ace/config-hpux-11.00.h: + Added ACE_HAS_WORKING_EXPLICIT_TEMPLATE_DESTRUCTOR + +Tue Aug 16 06:46:12 UTC 2005 Johnny Willemsen + + * apps/JAWS2/JAWS/Assoc_Array.cpp: + Removed pragma once + +Mon Aug 15 21:55:00 2005 Douglas C. Schmidt + + * apps/JAWS2/JAWS/IO_Handler.cpp: #include "JAWS/Filecach.h" + to get the definition of JAWS_Cached_FILE. Thanks to + Simon Massey and Steve Huston for reporting this. + +Mon Aug 15 11:03:42 2005 J.T. Conklin + + * bin/MakeProjectCreator/config/dslogadmin_serv.mpb: + + Changed to inherit from utils. + +Mon Aug 15 09:12:12 UTC 2005 Johnny Willemsen + + * ace/DLL_Manager.cpp: + We first try to find the file using the decorator so that when a + filename with and without decorator is used, we get the file with + the same decorator as the ACE dll has and then as last resort + the one without. For example with msvc, the debug build has a "d" + decorator, but the release build has none and we really want to get + the debug version of the library in a debug application instead + of the release one. + + Thanks to Vitaly Belekhov for + reporting this and supply the patches. This fixed bugzilla + 2210 + +Sun Aug 14 11:27:54 2005 Douglas C. Schmidt + + * apps/JAWS2/JAWS/IO_Handler.cpp (handle_transmit_file): Fixed + a bug where + + delete (ACE_Filecache_Handle *) result.act (); + + should have been + + delete (JAWS_Cached_FILE *) result.act (); + + Thanks to Anand Rathi for reporting + this. + +Fri Aug 12 12:00:12 UTC 2005 Johnny Willemsen + + * apps/JAWS2/JAWS/Parse_Headers.{h,cpp}: + Changed STATUS_CODE enum to fix compile errors with VxWorks + +Thu Aug 11 16:04:30 2005 Chris Cleeland + + * ace/OS_NS_stdio.inl (ACE_HAS_WCHAR vsnprintf): This is an + actively edited file today! Fixed the name of the last + argument in the call so that it actually matches the name + of the argument in the arg list. + +Thu Aug 11 14:13:22 2005 Chad Elliott + + * include/makeinclude/platform_sunos5_sunc++.GNU: + + ACE will not compile with SunCC 5.6 or 5.7 if native exceptions + are disabled unless STLPort is used. + +Thu Aug 11 12:29:39 2005 Steve Huston + + * ace/Time_Value.inl (msec): When moving tv_sec to ACE_UINT64, + static cast it to the desired ACE_UINT64, not ACE_UINT32. + + * ace/ace_wchar.inl (convert): + * ace/OS_NS_unistd.inl (read): + * ace/OS_NS_stdio.inl (fread, fwrite): + * ace/OS_NS_sys_socket.inl (sendto): Use proper types portable to + 64 bits. + + * ace/Functor.inl (ACE_Hash): If unsigned long is + not 4 bytes, don't try to cast 64 bits down to 4 bytes. + + * ace/OS_NS_stdio.inl (ACE_HAS_WCHAR vsnprintf): This is the same + situation as ACE_OS::vsprintf - the X/Open/XPG folks got it right + and added the maxlen argument when defining wide-char *printf + functions, so just use vswprintf() - there's no such thing as + vswnprintf(). + +Thu Aug 11 06:44:44 2005 Chad Elliott + + * bin/depgen.pl: + * bin/DependencyGenerator/DependencyWriterFactory.pm: + * bin/DependencyGenerator/MakeDependencyWriter.pm: + * bin/DependencyGenerator/MakeObjectGenerator.pm: + * bin/DependencyGenerator/ObjectGeneratorFactory.pm: + + Added a generic make dependency generator. + + * bin/MakeProjectCreator/config/smart_proxies.mpb: + + Switched orbsvcslib with taolib_with_idl since Smart Proxies have + nothing to do with orbsvcs. + + * bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm: + + Added support for CIAO and a hook for correctly modifying the + library path to account for differences with the automake layout + of ACE and TAO. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + If static_libs_only is set to 1, build up a list of libraries upon + which the BIN target will be dependent. This will cause binaries + to re-link in the event that a static library is updated. + +Thu Aug 11 09:44:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_stdio.inl: + Made the wchar vsnprintf a notsup, linux doesn't support this and + I don't have time to fix this. + +Thu Aug 11 07:54:12 UTC 2005 Johnny Willemsen + + * apps/JAWS2/JAWS/Concurrency.cpp: + Fixed single threaded build + +Thu Aug 11 07:44:12 UTC 2005 Johnny Willemsen + + * ace/OS_NS_stdio.inl: + Added wchar vsnprintf version, was declared but not implemented + +Wed Aug 10 15:43:37 2005 Gary Maxey + + * tests/run_test.lst: + Excluded tests inappropriate for HP-NSK platform + +Wed Aug 10 11:27:01 2005 Ossama Othman + + * ace/OS_NS_stdio.inl (vsnprintf): + + Fixed "no return statement in function returning non-void" + warning. + + Removed uses of deprecated ACE_OSCALL macro. + +Wed Aug 10 10:03:40 2005 Gary Maxey + + * ace/OS_NS_stdio.inl: + * ace/Process.cpp + + Regarding change: + Fri Jul 22 13:29:32 2005 Douglas C. Schmidt + use vsnprintf only if the platform supports it. + +Wed Aug 10 07:37:12 UTC 2005 Johnny Willemsen + + * apps/JAWS2/JAWS/IO.cpp: + * apps/JAWS2/JAWS/IO_Acceptor.cpp: + * apps/JAWS2/JAWS/IO_Handler.h: + Fixed compile errors in Cygwin build + +Wed Aug 10 07:27:12 UTC 2005 Johnny Willemsen + + * apps/JAWS2/JAWS/Reaper.h: + Fixed compile error in single threaded builds + +Tue Aug 9 16:57:09 2005 Phil Mesnier + + * bin/MakeProjectCreator/config/taolib.mpb: + Added the codeset project to the "after" list to ensure the + codeset library is built for any project that also depends on + TAO. This is necessary because there are some executables that + depend on libTAO and may therefore depend on libTAO_Codeset, but + do not include taoexe in the MPC base project list. For example + some of the CIAO executables have no need for the build elements + brought in by taoidldefaults base project. + +Tue Aug 9 11:11:50 2005 Phil Mesnier + + * bin/MakeProjectCreator/config/negotiate_codesets.mpb: + Removed unused compiler macro. + + * bin/MakeProjectCreator/config/orbsvcsexe.mpb: + * bin/MakeProjectCreator/config/rt_client.mpb: + * bin/MakeProjectCreator/config/rt_server.mpb: + Added dependency on negotiate_codesets feature so that the + TAO_Codeset library will be added in the correct order, + if desired. + + * bin/MakeProjectCreator/config/taoexe.mpb: + Added Codeset project to the After list to ensure that the + Codeset library is available for dynamic linking for those + applications that require it. + +Tue Aug 9 10:48:39 2005 Douglas C. Schmidt + + * ace/OS_NS_stdio.cpp (snprintf): Added a wchar_t version of + snprintf(). Thanks to Simon Massey for reporting this. + +Tue Aug 9 13:22:12 UTC 2005 Johnny Willemsen + + * bin/make_release: + Added sxd to files that should not get crlf conversion + +Tue Aug 9 13:18:43 UTC 2005 Jeff Parsons + + * ace/Global_Macros.h: + + Added missing '#' before a 'define'. + +Tue Aug 9 11:48:12 UTC 2005 Johnny Willemsen + + * ace/config-win32-msvc-6.h: + Added ACE_HAS_NO_THROW_SPEC + + * ace/Global_Macros.h: + Simplified ACE_THROW_SPEC specificiation. This way with vc71 and vc8 + we get exception specifications. + +Tue Aug 9 10:59:12 UTC 2005 Johnny Willemsen + + * ace/Svc_Conf_l.cpp: + Forced a commit of this file, will probably solve the regeneration + errors + + * apps/JAWS2/JAWS/Waiter.h: + Added missing include + +Mon Aug 8 12:54:51 2005 Steve Huston + + * ace/Log_Msg.cpp (open): Reverted these changes: + Fri Apr 22 18:02:37 2005 Douglas C. Schmidt + + * ace/Log_Msg.cpp (open): Fixed a problem with LOGGER and logger_key + and the backend_->open() call. Thanks to Jerry D. De Master + for reporting this. + + Tue Jan 18 08:17:10 2005 Douglas C. Schmidt + + * ace/Log_Msg.cpp (open): Fixed the logic to pass prog_name + rather than logger_key, which fixes a bug with syslog. Thanks + to Robert Iakobashvili for this fix. + + They broke a fix from: + Sat Dec 1 19:39:22 2001 Steve Huston + + * ace/Log_Msg.h: Improved the documentation for open() to note the + role of the logger_key argument when LOGGER and SYSLOG are set in + flags. + To get the progr_name used as the syslog/event log source ID, pass + a 0 logger_key. + + * ace/SOCK_Dgram_Mcast.h: Clarified that instead of using set_option, + use ACE_SOCK::set_option(). + + * ace/DEV_Addr.{h inl cpp}: Fix non-0-terminated name possibility + when setting a new name. Thanks to James Damour + for this fix. + Also introduced a private enum to define the length of the name + buffer and use the new value to limit string copy sizes. + + * THANKS: Added James Damour to the Hall of Fame. + +Mon Aug 8 10:44:16 2005 William Otte + + * ace/OS_NS_stdio.inl + * ace/Process.cpp + + Fixed a compilation problem from: + + Fri Jul 22 13:29:32 2005 Douglas C. Schmidt + +Mon Aug 8 09:57:15 2005 William Otte + + * ace/config-macosx-tiger.h + * include/makeinclude/platform_macosx_tiger_gcc4.GNU + + Adding preliminary support for OS X 10.4 + +Mon Aug 8 13:58:12 UTC 2005 Johnny Willemsen + + * apps/JAWS2/JAWS/IO.cpp: + * apps/JAWS2/JAWS/Concurrency.{h,cpp}: + Fixed compile problems in single threaded build + +Sat Aug 6 17:25:04 2005 Douglas C. Schmidt + + * ace/Svc_Conf.l: Removed the ' and " characters to avoid + problems with Lex. Thanks to Rohini Madhavan and Brian Buesker + for helping with this. + +Wed Aug 3 12:35:23 2005 Douglas C. Schmidt + + * ace/Asynch_Acceptor.{h,cpp}: + * ace/Asynch_Connector.{h,cpp}: Fixed the code so it doesn't try + to build on Windows CE. Thanks to Alan Anderson + for reporting this. + + * ace/DEV_Addr.cpp (set): NULL-terminate the devname_ string. + Thanks to James Damour for reporting + this problem. + +Tue Aug 2 14:01:39 2005 Douglas C. Schmidt + + * THANKS: Added Abdel Rigumye , + who is the 2000th contributor to ACE+TAO+CIAO!!!! + +Fri Jul 22 13:29:32 2005 Douglas C. Schmidt + + * ace/Process.cpp (command_line): Changed the use of + ACE_OS::vsprintf() to use the new ACE_OS::vsnprintf(). Thanks + to Xue for this suggestion, as well. + + * ace/OS_NS_stdio.{h,inl}: Added support for ACE_OS::vsnprintf(). + Thanks to Xue Yong Zhi for this + suggestion. + +Mon Aug 8 08:58:12 UTC 2005 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added two new collocation tests + + * apps/JAWS2/JAWS/jaws2.mpc: + New MPC file + +Fri Aug 05 07:37:20 2005 Simon Massey + + * ACE version 5.4.7 released. + + diff --git a/ACE/ChangeLogs/ChangeLog-06a b/ACE/ChangeLogs/ChangeLog-06a new file mode 100644 index 00000000000..f5ab9e868ab --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-06a @@ -0,0 +1,4912 @@ +Tue Apr 18 08:54:49 UTC 2006 Johnny Willemsen + + * tests/SSL/SSL_Asynch_Stream_Test.cpp: + Fixed main signature to resolve link errors in the Cygwin build. + +Tue Apr 18 07:58:49 UTC 2006 Johnny Willemsen + + * tests/SSL/SSL_Asynch_Stream_Test.cpp: + Fixed warning in solaris build + +Tue Apr 18 07:55:49 UTC 2006 Johnny Willemsen + + * tests/SSL/SSL_Asynch_Stream_Test.cpp: + Fixed compile error in Cygwin build + +Tue Apr 18 07:24:49 UTC 2006 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added ImR_Client lib + +Mon Apr 17 18:15:49 UTC 2006 Steve Huston + + * tests/SSL/SSL_Asynch_Stream_Test.cpp: Fixed compile error correctly. + +Mon Apr 17 14:47:23 UTC 2006 William R. Otte + + * ace/config-macosx-tiger.h + + Added ACE_HAS_AIO_CALLS. + +Mon Apr 17 10:06:23 UTC 2006 Steve Huston + + * tests/SSL/SSL_Asynch_Stream_Test.cpp: Restrict building this test + to platforms with both threads and AIO support. Fixes Cygwin + build problem. + +Sat Apr 15 10:57:12 UTC 2006 Johnny Willemsen + + * tests/SSL/SSL_Asynch_Stream_Test.cpp: + Fixed compile error + +Fri Apr 14 15:53:21 UTC 2006 Steve Huston + + * NEWS: Updated to reflect the changes and fixes below. + + * ace/Task.{h inl cpp}: Change ACE_Task::lock_ from ACE_Thread_Mutex + to ACE_Recursive_Thread_Mutex, and hold lock_ across call to + ACE_Task::close() in ACE_Task_Base::cleanup(). This guards against + multiple threads in close() seeing a 0 thr_count() and acting on it. + Thanks to Howard Finer for this fix. + Fixes Bugzilla #2339. + + * ace/SOCK_Stream.h: Explain more about how the *_n methods work and + how to use the timeout and bytes_transferred arguments. + + * examples/Threads/task_three.cpp: Change name of the file static + ACE_Thread_Mutex from lock_ to Lock to avoid clashing with the + ACE_Task-inherited member lock_. + + * ace/SSL/SSL_Asynch_Stream.{h cpp}: Changes that allow + ACE_SSL_Asynch_Stream objects to be instantiated; required adding + an implementation of the pure virtual implementation() method + inherited from ACE_Asynch_Operation. + Also moved the declaration of the ACE_SSL_Asynch_Read_Stream_Result, + ACE_SSL_Asynch_Write_Stream_Result, and ACE_SSL_Asynch_Result classes + from the .cpp file to the .h file so applications can see them. + Also corrected and enhanced a lot of the documentation. + + * tests/SSL/tests.mpc: + * tests/SSL/Makefile.am: + * tests/SSL/SSL_Asynch_Stream_Test.cpp: Added a new test that at least + tests building an application to use ACE_SSL_Asynch_Stream. + +Fri Apr 14 14:57:12 UTC 2006 Chad Elliott + + * bin/msvc_static_compile.pl: + + Added a work-around for devenv using the solution file to build + additional projects even when the .vcproj is specified. This only + happens when using the -CORE option to this script. First, all + .sln files are temporarily renamed and then named back when the + build is done or a SIGINT or SIGTERM is detected. + +Wed Apr 12 14:48:38 UTC 2006 William R. Otte + + * bin/MakeProjectCreator/config/ciao_component_dnc.mpb + + Fixes for linking errors in OS X. + +Tue Apr 11 20:06:12 2006 Douglas C. Schmidt + + * ace/OS_NS_stdio.inl (rewind): Replaced SetFilePointer() with + fseek() on WinCE since it works better. Thanks to Andrey + Nechypurenko for reporting this. + +Wed Apr 12 08:14:00 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_events_dnc.mpb: + Added ciao_rtevent_dnc as base project to fix link errors in the + VxWorks static builds + +Tue Apr 11 14:10:00 UTC 2006 Steve Huston + + * ASNMP/asnmp/transaction.cpp (handle_input): Return 0 on successful + socket read, not the number of bytes. Thanks to Jason Zhang for this + fix. + + * THANKS: Added Jason Zhang to the Hall of Fame. + +Tue Apr 11 13:12:36 UTC 2006 Simon McQueen + + * ace/Lib_Find.h: + + aCC 3.31 seems to want an extra newline at the end of this file. + + * ace/config-macros.h: + + ACE_NOTREACHED is reached for aCC up to 3.31 at least. + + * include/makeinclude/platform_hpux_aCC.GNU: + + Define ACE_LACKS_MEMBER_TEMPLATES for aCC 3.31 because it does. + +Tue Apr 11 12:41:00 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_config_handlers.mpb: + Added event config handles and add all projects to the after + to get the correct build order + +Mon Apr 10 18:37:17 UTC 2006 Wallace Zhang + + * ace/ace_for_tao.mpc: + + Added Capabilities.cpp into the lib. + Required by TAO/orbsvcs/examples/ImR/Advanced to + use the getline function. The ace_for_tao lib is + increased by 0.1M. + +Mon Apr 10 18:04:00 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Don't run bug 2134 regression in a minimum build + +Mon Apr 10 14:34:00 2006 Johnny Willemsen + + * tests/Object_Manager_Test.cpp: + Fixed compile problem in single threaded no inline build + +Mon Apr 10 12:28:00 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_server_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb: + Added ciao_events_dnc + +Mon Apr 10 12:06:00 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_domainapplicationmanager_dnc.mpb: + New base project + +Mon Apr 10 11:52:00 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_component_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_container_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_deployment_stub.mpb: + Changed base projects + +Mon Apr 10 10:27:03 UTC 2006 Don Sharp + + * tests/Unload_libACE.cpp: + Set up a guard for WIN32 && ACE_USES_WCHAR. + +Mon Apr 10 09:36:00 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_rtevent_dnc.mpb: + New base project + +Mon Apr 10 09:13:00 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_events_base_dnc.mpb: + New base project + +Mon Apr 10 06:23:00 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_container_dnc.mpb: + New file, matches library name + + * bin/MakeProjectCreator/config/ciao_xml_utils.mpb: + Use exceptions as base project + + * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb: + Use ciao_events_dnc as base project + + * bin/MakeProjectCreator/config/ciao_events_dnc.mpb: + Add ciao_container_dnc and ciao_client_dnc to make things easier to + maintain. Also use the CIAO_Dnc_Events library instead of the + two seperate libs + + * bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb: + * bin/MakeProjectCreator/config/ciao_deployment_stub.mpb: + Removed CIAO_DnC_Events as seperate lib + +Sun Apr 9 12:00:00 2006 Douglas C. Schmidt + + * docs/ACE-bug-process.html: Updated this page to more accurately + reflect how the DOC group handles enhancement requests. Thanks + to David White for + motivating this. + +Sat Apr 8 18:32:29 2006 Douglas C. Schmidt + + * ace/Shared_Memory_MM.h (ACE_Shared_Memory_MM): + * ace/Shared_Memory_SV.h (ACE_Shared_Memory_SV): + Added comments that underscore that these classes should not be + used and instead ACE_Malloc or ACE_Mem_Map should be used. + Thanks to Qingbo Cai for motivating these + comments. + +Fri Apr 7 19:56:03 UTC 2006 Gan Deng + + * bin/MakeProjectCreator/config/ciao_events_dnc.mpb + + Modified to make CIAO_DnC_Events_Base and CIAO_RT_Event + libraries explicitly specified in "libs +=" to resolve + linking errors in BC compilers. + +Fri Apr 7 13:13:06 UTC 2006 Don Sharp + + * tests/tests.mpc: + Add staticflags += ACE_AS_STATIC_LIBS for Library Unload + +Fri Apr 7 07:36:12 UTC 2006 Johnny Willemsen + + * ace/Token.{h,inl}: + Fixed compile problem in single threaded no online build. Thanks + to Ossama Othman for reporting this + +Thu Apr 6 21:11:24 UTC 2006 Steve Huston + + * ace/SSL/SSL_Context.cpp (private_key, context, dh_params): If setting + up the new file fails, reset the corresponding + ACE_SSL_Data_File member to allow retries to proceed. + + * NEWS: Added user-visible items for 5.5.1. + +Thu Apr 6 19:15:12 UTC 2006 Johnny Willemsen + + * ace/Thread.cpp: + Fixed compile problem in single threaded no online build. Thanks + to Ossama Othman for reporting this + +Thu Apr 6 15:58:00 UTC 2006 Simon Massey + + * bin/tao_other_tests.lst: + Add more !DISABLE_ToFix_LynxOS_* marks to failing tests + +Thu Apr 6 10:07:12 UTC 2006 Johnny Willemsen + + * tests/run_test.lst: + * tests/tests.mpc: + * tests/Bug_2497_Regression_Test.cpp: + Added regression for bug 2497, we have to see what the best fix + is. Thanks to Sergey Zubarev for + providing reporting this. + +Thu Apr 6 06:05:12 UTC 2006 Johnny Willemsen + + * ace/config-macosx-tiger.h: + Don't define ACE_SIZEOF_LONG_DOUBLE when it is already set. Can + happen when we build for OS X on Intel. Thanks to Ignacio Alvarez + for reporting this. This fixes bugzilla + 2496. + +Wed Apr 5 23:02:50 UTC 2006 Adam Mitz + + * bin/tao_orb_tests.lst: + + Added TAO/tests/Bug_2494_Regression. + +Wed Apr 5 22:03:52 UTC 2006 Gan Deng + + * bin/MakeProjectCreator/config/ciao_events_dnc.mpb + + Modify the project dependency so its built after + CIAO_DnC_Container project. This should fix the + errors on SuSE_FP_Stats build. + +Wed Apr 5 19:32:19 UTC 2006 Gan Deng + + * bin/MakeProjectCreator/config/ciao_deployment_stub.mpb + + Added library dependency to CIAO_Events_DnC, so static + build could resolve symbols in this library. + +Mon Apr 5 14:59:37 UTC 2006 Ossama Othman + + * ace/SSL/SSL_Context.cpp: + * ace/SSL/SSL_Context.h: + + Addressed access to locks that have already been destroyed by + reintroducing some of the original static variable semantics. + Some, but not all, of the exception-safety fixes that introduced + the order of destruction problem were retained. + + (random_seed, egd_file, seed_file): + + Declared these methods "static" since they do not manipulate + internal ACE_SSL_Context members. + +Wed Apr 5 14:58:12 UTC 2006 Don Sharp + + * tests/Unload_libACE.cpp: + Set up a guard for ACE_AS_STATIC_LIBS. + + * tests/tests.mpc: + Add an empty Resource_Files section to the Library Unload project. + +Wed Apr 5 14:25:00 UTC 2006 Simon Massey + + * bin/tao_other_tests.lst: + Add more !DISABLE_ToFix_LynxOS_* marks to failing tests + +Wed Apr 5 13:10:00 UTC 2006 Johnny Willemsen + + * ace/CDR_Stream.cpp: + Initialise local pointer with 0 + +Wed Apr 5 11:55:00 UTC 2006 Simon Massey + + * bin/tao_other_tests.lst: + Add more !DISABLE_ToFix_LynxOS_* marks to failing tests + +Tue Apr 4 18:51:41 UTC 2006 Steve Huston + + * ace/SOCK_Acceptor.cpp (shared_open): If ACE_OS::listen() fails, + guard errno before closing the socket to prevent loss of the error + value, at least on Windows. Thank you to Aleksandar Vukajlovic + for this fix. + + * THANKS: Added Aleksandar Vukajlovic to the Hall of Fame. + +Tue Apr 4 15:44:03 UTC 2006 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Reverting my change from Mon Apr 3 12:12:27 UTC 2006 and changing + the default from directory based building/dependencies to named + targets (which is the way that all other make based MPC project + types work). This is being done by request (RT #8510). + +Tue Apr 4 15:28:00 UTC 2006 Don Sharp + + * tests/Unload_libACE.cpp: + Cope when log file cannot be opened. + +Tue Apr 4 15:06:00 UTC 2006 Don Sharp + + * tests/Unload_libACE.cpp: + Add guards for __MINGW32__ and __CYGWIN32__. + Don't error if libACE isn't found. + +Tue Apr 4 14:10:00 UTC 2006 Simon Massey + + * bin/tao_other_tests.lst: + Add more !DISABLE_ToFix_LynxOS_* marks to failing tests + +Mon Apr 3 23:04:51 UTC 2006 Steve Huston + + * include/makeinclude/platform_aix_ibm.GNU: Removed the explicit + setting of ACE_TEMPLATES_REQUIRE_SOURCE in CCFLAGS introduced at + Wed Feb 22 16:26:43 GMT 2006 Rich Seibel . + ACE_TEMPLATES_REQUIRE_SOURCE is set (or not) from config-aix-4.x.h + depending on what template instantiation options were specified on + the command line. + +Mon Apr 3 13:45:29 UTC 2006 Ossama Othman + + * ace/Basic_Types.inl: + + Fixed versioned namespace related errors for configurations that + define ACE_LACKS_LONGLONG_T and/or ACE_LACKS_UNSIGNEDLONGLONG_T. + +Mon Apr 3 13:45:00 UTC 2006 Simon Massey + + * bin/tao_other_tests.lst: + Add more !DISABLE_ToFix_LynxOS_* marks to failing tests + +Mon Apr 3 12:12:27 UTC 2006 Chad Elliott + + * bin/MakeProjectCreator/README: + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Added support for a new workspace based setting that only makes + sense to the 'gnuace' project type called 'named_targets'. If + 'named_targets' is set, the workspace (GNUmakefile) will be + generated such that each target can be built via it's project name + and directory location does not affect dependencies. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Support the new source component scoped keyword 'buildflags'. + +Mon Apr 3 10:25:00 UTC 2006 Simon Massey + + * bin/tao_orb_tests.lst: + Add more !DISABLE_ToFix_LynxOS_* marks to failing tests + +Mon Apr 3 09:38:00 UTC 2006 Simon Massey + + * bin/tao_other_tests.lst: + Remove PRISM_ONLY tests (again arg!) + +Sat Apr 1 19:08:28 2006 Douglas C. Schmidt + + * ace/OS_NS_math.inl: Improved the computations for floor() and ceil(). + Thanks to Abdullah Sowayan for this + patch. + +Sat Apr 1 17:14:59 UTC 2006 J.T. Conklin + + * configure.ac: + * m4/compiler.m4: + + Removed special cases for *freebsd*. Thanks to Thomas Girard + who sent patches for + Debian GNU/kFreeBSD systems (FreeBSD kernel / GNU libc). The + changes added *k*bsd-gnu patterns to override the special cases + matched by *freebsd*. However, further investigation has proved + that they were not needed for FreeBSD either. + +Fri Mar 31 23:51:48 UTC 2006 J.T. Conklin + + * configure.ac: + + Changed to #include in the + feature test, avoiding the autoconf "present but cannot + be compiled" warning. + +Fri Mar 31 15:00:00 UTC 2006 Simon Massey + + * bin/tao_other_tests.lst: + Add more !DISABLE_ToFix_LynxOS_* marks to failing tests + +Fri Mar 31 13:59:04 UTC 2006 Don Sharp + + * tests/Unload_libACE.cpp: + Add guard for ACE_VXWORKS and declare local main(). + + * tests/tests.mpc: + Remove Main.cpp reference from the Library Unload project. + +Fri Mar 31 11:41:54 UTC 2006 Steve Huston + + * ace/OS_NS_Thread.h: + * ace/OS_NS_Thread.inl: + * ace/Recursive_Thread_Mutex.cpp: Reverted changes from + Thu Mar 30 18:51:13 UTC 2006 Steve Huston + because they broke builds on many platforms. + +Fri Mar 31 10:56:12 UTC 2006 Johnny Willemsen + + * ace/Timer_List_T.cpp: + Use prefix increment instead of postfix + + * ace/Timer_Hash_T.cpp: + Initialise pointer with 0 + + * ace/Reactor_Token_T.h: + Converted some documentation to doxygen style + + * ace/Log_Record.cpp: + Initialise some pointers with 0, made some local variables const. + + * ace/IOStream_T.h: + Fixed some doxygen warnings + +Fri Mar 31 08:33:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/compiler.bor: + Added CPU_FLAG as possible flag, this can be -3/-4/-5/-6 to optimize + things for a certain CPU, see the Borland help for more info what + these flags do. When this is set, this is passed to the compiler + + * ACE-INSTALL.html: + Document CPU_FLAG for Borland + + * ace/config-win32-borland.h: + The Borland compiler can't handle assembly in inline methods or + template methods. We do have inline assembly when building for + pentium, so when we inlining enabled and do build for pentium + we set ACE_LACKS_INLINE_ASSEMBLY to disable the inline assembly. + Thanks to Steve Orner for reporting + this. + +Thu Mar 30 21:03:27 UTC 2006 Jeff Parsons + + * ace/Event_Handler.cpp (read_adapter): + + Fixed typo introduced in + + Thu Mar 30 10:24:50 2006 Douglas C. Schmidt + +Thu Mar 30 10:24:50 2006 Douglas C. Schmidt + + * ace/Event_Handler.cpp (read_adapter): It was possible for + handle_close() to "delete this" so we need to cache the reactor + pointer and use it here. Thanks to Yuan for this fix. + +Thu Mar 30 18:51:13 UTC 2006 Steve Huston + + * tests/Unload_libACE.cpp: Fixed broken fprintf() call. + + * ace/OS_NS_Thread.h (ACE_thread_mutex_t): + * ace/OS_NS_Thread.inl: For Windows, replace CRITICAL_SECTION with a + struct including a CRITICAL_SECTION as well as a recursion count. + This allows us to properly do recursion in combination with a + condition variable across all Windows editions and versions. + + * ace/Recursive_Thread_Mutex.cpp (get_nesting_level): This is now + possible for platforms with ACE_HAS_RECURSIVE_THREAD_MUTEX. + + Thanks to Adrian Tulloch for + these improvements. + + * THANKS: Added Adrian Tulloch to the Hall of Fame. + +Thu Mar 30 17:04:48 UTC 2006 Gan Deng + + * bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb + * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb + + Modified to support CIAO pub/sub service integration. + + * bin/MakeProjectCreator/config/ciao_events_dnc.mpb + + Added this mpb file for pub/sub service integration + in CIAO. + +Thu Mar 30 15:45:00 UTC 2006 Simon Massey + + * tests/Unload_libACE.cpp: + Corrected missing file handle. + +Thu Mar 30 13:14:12 UTC 2006 Johnny Willemsen + + * examples/Service_Configurator/IPC-tests/client/local_fifo_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_dgram_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_stream_client_test.cpp: + * apps/JAWS3/jaws3/Config_File.cpp: + Fixed value might be unitialized warnings + +Thu Mar 30 12:32:12 UTC 2006 Johnny Willemsen + + * ace/Configuration.cpp: + * ace/Shared_Memory_MM.cpp: + * ace/ARGV.cpp: + * examples/APG/Containers/Stacks.cpp: + * examples/APG/Containers/RB_Tree_Functors.cpp: + * examples/APG/Containers/Queues.cpp: + * ace/RB_Tree.inl: + * tests/Hash_Map_Manager_Test.cpp: + Fixed value might be unitialized warnings + +Thu Mar 30 11:27:00 UTC 2006 Simon McQueen + + * include/makeinclude/platform_sunos5_sunc++.GNU: + + Define variable ACE_CC_PREPROCESSOR to be 'cc' if the SunCC version + is 5.4. This fixes bug #2478. + + See also: Thu Mar 30 11:26:45 UTC 2006 Simon McQueen + in TAO/ChangeLog. + +Thu Mar 30 11:16:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added BiDirectional_DelayedUpcall + +Thu Mar 30 11:04:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Run BiDirectional_NestedUpcall also on VxWorks + +Thu Mar 30 00:46:52 UTC 2006 J.T. Conklin + + * m4/compiler.m4: + + Change the default of --enable-symbol-visibility option from yes + to no. + +Wed Mar 29 22:33:36 UTC 2006 J.T. Conklin + + * configure.ac: + + Changed to #include in the + feature test, avoiding the autoconf "present but cannot + be compiled" warning. + +Wed Mar 29 19:26:37 UTC 2006 Olli Savia + + * ace/TTY_IO.cpp: + Do not try to control DTR under LynxOS. It sets serial port + to non-functional state. + +Wed Mar 29 14:14:06 UTC 2006 J.T. Conklin + + * ACE-INSTALL.html: + * m4/ace.m4: + + Changed --with-gperf to --enable-gperf to be consistant with the + intent of --with-* / --enable-* flags. Thanks to Vincent Joseph + for running into this. + +Wed Mar 29 13:25:12 UTC 2006 Don Sharp + + * ace/Log_Msg.cpp: + * include/makeinclude/platform_lynxos.GNU + + Add code to ensure cleanup in ACE_Log_Msg::close (void). + For some systems, e.g. LynxOS, we need to ensure that + any registered thread destructor action for this thread + is disabled. This is a revision of an earlier attempt to + achieve the same thing. The ACE tests pass with this edition. + + * tests/Unload_libACE.cpp + + This source does not use ACE functionality directly. + It tests that the ACE shared library can be safely loaded, + (and unloaded), by a non-ACE program exercising the + cleanup code above. + + * tests/run_test.lst + * tests/tests.mpc + + Build and run the new test + +Wed Mar 29 07:04:12 UTC 2006 Johnny Willemsen + + * ace/Log_Msg.cpp: + Initialise pointers with 0, small const changes + +Wed Mar 29 06:44:12 UTC 2006 Johnny Willemsen + + * etc/*.doxygen: + Also expand ACE_ENV_ARG_DECL_NOT_USED and + ACE_ENV_SINGLE_ARG_DECL_NOT_USED + +Tue Mar 28 21:30:01 UTC 2006 jiang,shanshan + + * ace/Log_Msg.{h,cpp} + * ace/Log_Record.{cpp,h,inl}: + Updated these files to solve the stack overflow problem in ACE_Log_Msg + and ACE_Log_Record. Moves buffers that can be large in stack in malloced + memory. + Thanks to qwerty for motivating and + suggesting the fix to this problem. + +Tue Mar 28 18:34:26 UTC 2006 Wallace Zhang + + * bin/tao_other_tests.lst: + Added a missing semicolon. + +Tue Mar 28 14:51:19 UTC 2006 J.T. Conklin + + * m4/compiler.m4: + + Added support for --disable-symbol-visibility flag so users + can explicitly disable symbol visibility in the cases where + it does not work (or does not work properly) but the feature + test selects it anyway. + +Tue Mar 28 09:04:55 2006 Douglas C. Schmidt + + * ace/OS_NS_sys_resource.inl (setrlimit): Fixed a bug where + "resource" appeared twice in the call to setrlimit(). Thanks to + Vincent Joseph for reporting this. + +Tue Mar 28 14:10:00 UTC 2006 Simon Massey + + * bin/tao_orb_tests.lst: + more !DISABLE_ToFix_LynxOS_* marks to tests + +Mon Mar 27 19:06:52 UTC 2006 Wallace Zhang + + * bin/tao_other_tests.lst: + + Added test + TAO/orbsvcs/tests/Security/MT_SSLIOP/run_test_harsh.pl to + test fix for bug in Bug 1647. + +Mon Mar 27 16:39:41 UTC 2006 Steve Huston + + * tests/tests.mpc: Added a "verbatim" to get the automake-needed + setup for running the scoreboard test script for the tests. + +Mon Mar 27 14:16:00 UTC 2006 Simon Massey + + * bin/tao_other_tests.lst: + Add more !DISABLE_ToFix_LynxOS_* marks to failing tests + +Mon Mar 27 07:46:33 2006 Douglas C. Schmidt + + * ace/Acceptor.h: Updated the documentation to clarify that an + acceptor can only listen on one port at a time. Thanks to + Mockey Chen for motivating + this. + +Mon Mar 27 11:08:00 UTC 2006 Simon Massey + + * bin/tao_orb_tests.lst: + Add more !DISABLE_ToFix_LynxOS_* marks to failing tests + +Mon Mar 27 09:18:07 UTC 2006 Simon McQueen + + * ace/Configuration.h: + + Remove 'explicit' keyword from a two arg constructor. This is + upsetting aCC 331. + +Mon Mar 27 03:57:38 UTC 2006 J.T. Conklin + + * m4/compiler.m4: + + Check whether "gcc" supports symbol visibility options by + invoking the compiler with those options. This addresses + configure failures due to icc's incomplete gcc emulation. + Should fix bugzilla issues 2338 and 2384. + +Sun Mar 26 21:40:10 2006 Douglas C. Schmidt + + * ace/TSS_T.cpp: Added patches to silence the type-punning warning + from G++ 4.x. Thanks to Ken Sedgwick for contributing this + stuff! + +Sun Mar 26 17:29:08 UTC 2006 J.T. Conklin + + * m4/compiler.m4: + + Add ACE_CHECK_CFLAGS and ACE_CHECK_CXXFLAGS autoconf macros + to verify if c/c++ compiler supports the specified command- + line options. + +Fri Mar 24 12:05:00 UTC 2006 Simon Massey + + * bin/tao_other_tests.lst: + Add more !DISABLE_ToFix_LynxOS_* marks to failing tests + +Thu Mar 23 16:20:00 UTC 2006 Simon Massey + + * bin/tao_orb_tests.lst: + Add more !DISABLE_ToFix_LynxOS_* marks to failing tests + +Thu Mar 23 16:00:49 UTC 2006 Chad Elliott + + * ace/Svc_Conf_Lexer.cpp: + + Fixed two bugs. + + 1) Line numbers were not calculated correctly as in most cases the + new line characters were thrown away but not counted. + 2) Strings were not allowed to contain nested quotes. However, + the original lexer allowed this. Thanks to JR Andreassen + for reporting this. + +Thu Mar 23 14:37:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/vcl.mpb: + Also set specific options for the bds template + +Thu Mar 23 14:37:12 UTC 2006 Johnny Willemsen + + * ace/os_include/os_limits.h: + Updated documentation why we have a VxWorks specific + workaround + +Thu Mar 23 14:22:00 UTC 2006 Simon Massey + + * bin/tao_other_tests.lst: + Add more !DISABLE_ToFix_LynxOS_* marks to failing tests + + * bin/PerlACE/Run_Test.pm: + Add lynxos platform default timing configuration + +Thu Mar 23 12:14:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/templates/bor.mpd: + If linkflags are available, generate them into the project + file + + * bin/MakeProjectCreator/config/vcl.mpb: + Added -aa to the link flags to indicate that we link a + windows application. This prevents a dosbox from appearing + when we start a vcl windows app. + +Thu Mar 23 03:41:18 UTC 2006 Ciju John + + * ace/Time_Value.inl (set): + + timespec_t doesn't have a 'sec' member. Changed it to 'tv_sec'. + +Wed Mar 22 18:42:36 UTC 2006 Ossama Othman + + From Russell Mora + * ace/Time_Value.inl: + + With MSVC8 the type of time_t is by default 64-bit unless + _USE_32BIT_TIME_T is defined - changed #ifdef to recognise this + and also changed other set() methods to use the version that + knows how to handle the 64-bit type. + +Wed Mar 22 17:55:48 UTC 2006 Gan Deng + + * bin/MakeProjectCreator/config/ciao_events_dnc.mpb + * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb + * bin/MakeProjectCreator/config/ciao_deployment_dnc.mpb + + Reverted my earlier change + "Tue Mar 21 21:58:17 UTC 2006 Gan Deng + ". + + I will put earlier changes back in later when all the + libraries in CIAO to support pub/sub services have + been checked in. + +Wed Mar 22 16:19:12 UTC 2006 Johnny Willemsen + + * ace/config-osf1-4.0.h: + Added ACE_HAS_NONCONST_SENDMSG + +Wed Mar 22 15:32:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_osf1_4.x_g++.GNU: + Removed -fno-strict-prototypes from the CCFLAGS, thanks to + Karl Schmitt for reporting this. + +Tue Mar 21 21:58:17 UTC 2006 Gan Deng + + * bin/MakeProjectCreator/config/ciao_events_dnc.mpb + * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb + * bin/MakeProjectCreator/config/ciao_deployment_dnc.mpb + + Added a base MPC project to support pub/sub integration + in CIAO. + +Tue Mar 21 19:06:12 UTC 2006 Chad Elliott + + Committing on behalf of Adam Mitz . + + * bin/PerlACE/Process_Win32.pm: + + In some cases .EXE was not being added to the end of the + executable name. This change fixes that problem and also changes + Spawn() to return -1 on failure instead of exiting. + +Tue Mar 21 15:30:00 UTC 2006 Simon Massey + + * bin/tao_other_tests.lst: + Add more !DISABLE_ToFix_LynxOS_* marks to failing tests + +Tue Mar 21 14:29:29 UTC 2006 J.T. Conklin + + * configure.ac: + + If system lacks the cpu_set_t type, skip the feature tests for + sched_getaffinity() and sched_setaffinity(). The interface of + these system calls have changed three times, and ACE currently + only supports the latter two varients. The supported varients + both have arguments of type cpu_set_t. + + On a system with the first varient, the feature tests detects + the existance of sched_getaffinity() and sched_setaffinity(), + it also detects that it's the not most current varient. This + results in feature test macros being defined for the second + varient, which causes a build failure in OS_NS_Thread.cpp. + + By avoiding the feature tests, we avoid defining any processor + affinity related feature test macros, and ACE will be compiled + as if the system does not support any form of processor + affinity. + + See bugzilla issue 2466 for details. + +Tue Mar 21 11:03:12 UTC 2006 Johnny Willemsen + + * performance-tests/Misc/childbirth_time.cpp: + * examples/OS/Process/imore.cpp: + Fixed unicode build errors + +Tue Mar 21 06:49:12 UTC 2006 Johnny Willemsen + + * bin/tao_other_tests.lst: + Removed all PrismTech tests + +Mon Mar 20 22:53:09 UTC 2006 Steve Huston + + * tests/Makefile.am: Restored hand-inserted settings to allow running + the ACE tests during "make check". This needs to be added to the + mpc file, but we're discussing how to do this. + +Mon Mar 20 08:58:26 UTC 2006 Simon Massey + + * bin/tao_other_tests.lst: + Add more !DISABLE_ToFix_LynxOS_* marks to failing tests + +Mon Mar 20 08:58:26 2006 Douglas C. Schmidt + + * ACE-INSTALL.html: Removed all references to egcs, which + is hopelessly out of date.. + +Mon Mar 20 14:54:23 UTC 2006 Olli Savia + + * ace/Task_Ex_T.h: + Added a workaround for buggy LynxOS 3.x compiler. + +Mon Mar 20 10:15:12 UTC 2006 Johnny Willemsen + + * ace/TP_Reactor.cpp (post_process_socket_event): + Before acquiring the token, first check if we really have to do some + post processing, if not, then we just don't acquire the token. This + fixes the performance drop in the TAO thread pool performance test. + Thanks to Kobi Cohen-Arazi + for noticing this drop in the performance stats. + + * ace/TP_Reactor.h: + Small documentation improvement + +Sun Mar 19 21:30:39 2006 Douglas C. Schmidt + + * ACE-INSTALL.html (href): Rearranged the order of things + so that it explains how to build and install ACE before going + into all sorts of details about various platforms and compilers. + Thanks to Axter for motivating this. + +Sat Mar 18 15:20:45 2006 Douglas C. Schmidt + + * ace/Timer_Queue_Adapters.cpp (activate): Set active_ to 1 + in case we were deactivated. Thanks to Yauheni Akhotnikau + for reporting this. + +Fri Mar 17 16:35:36 UTC 2006 Ossama Othman + + * docs/Symbol_Versioning.html: + + New document that describes how to use ACE's versioned namespace + support. [Bug 2458] + +Fri Mar 17 15:50:00 UTC 2006 Simon Massey + + * tests/run_test.lst + Add more !DISABLE_ToFix_LynxOS_* marks to failing tests + +Fri Mar 17 13:38:18 UTC 2006 Jeff Parsons + + * bin/MakeProjectCreator/config/ciaocidldefaults.mpb: + + New file, containing cidl-related stuff removed from + ciao_servant_dnc.mpb, which now inherits from the new + base project. These changes allow CIAO applications + to set up the build either in the existing way, where + the servant build executes the CIDL compiler, then the + IDL compiler on the resulting *E.idl file, then the + C++ compiler on all the results, or to have separate + builds for CIDL files (which executes first), then + IDL files, then generated and hand-written C++ files. + + * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb: + + Changes described in the item above. + +Fri Mar 17 13:37:12 UTC 2006 Johnny Willemsen + + * ace/TP_Reactor.cpp: + Fixed variable not used warning + +Fri Mar 17 08:56:12 UTC 2006 Johnny Willemsen + + * ace/TP_Reactor.{h,cpp,inl}: + Fixed bugzilla #2395. This was about a race condition in the + TP_Reactor, when the handle_x method returns -1 the handler + is removed and after that we try to resume. Normally this resume + is a noop because for the handle there is no event handler anymore. + But to resume the handle we need to reacquire the lock on the + reactor, in the time between the remove and the reacquire we could + have received a new connection for which the handle is used which + we already freed and then we can resume this handle but then for + a new eventhandler. The fix is to do the remove and resume as atomic + operation. Thanks to Bala Natarajan and Steve Huston for reviewing + the patches and Kees van Marle for debugging and analyzing this + problem. + +Thu Mar 16 21:54:29 UTC 2006 Steve Huston + + * ace/Timer_Heap_T.cpp (grow_heap): Reset timer_ids_min_free_ after + growing the heap. Fixes Bugzilla #2447 where timer IDs may be + improperly duplicated under certain conditions. + + * tests/Timer_Queue_Test.cpp: Added a new function, + test_unique_timer_heap_ids(), as supplied in Bugzilla #2447 to + verify the fix. + + Thank you very much to Dan Pozdol and + Paxton Mason for identifying the bug, + its conditions and causes, supplying the test program and supplying + the fix! + + * THANKS: Added Dan Pozdol to the Hall of Fame. + +Thu Mar 16 16:30:00 UTC 2006 simon massey + + * tests/run_test.lst + Add !DISABLE_ToFix_LynxOS_* marks to failing ACE tests + +Thu Mar 16 15:53:55 UTC 2006 jiang,shanshan + + * ace/UUID.cpp + * protocols/ace/RMCast/Simulator.cpp + Updated these files to solve some potential static-cast errors. + +Thu Mar 16 13:47:56 UTC 2006 Chad Elliott + + * ace/config-vxworks6.2.h: + + In kernel mode, VxWorks 6.2 lacks suseconds_t. + +Thu Mar 16 12:27:12 UTC 2006 Johnny Willemsen + + * etc/ciao_DAnCE.doxygen: + Fixed incorrect links to the location of the documentation of the + other ACE/TAO libraries + +Thu Mar 16 12:20:12 UTC 2006 Johnny Willemsen + + * html/index.html: + Added CIAO Config Handlers + +Thu Mar 16 12:14:12 UTC 2006 Johnny Willemsen + + * etc/*.doxygen: + Set GENERATE_HTMLHELP to YES. This generates a few extra files + which our users can use to convert the generated htlm documentation + easily to a windows help file + +Thu Mar 16 12:05:12 UTC 2006 Johnny Willemsen + + * etc/*.doxygen: + Set DOT_MULTI_TARGETS to TRUE, this will speedup the doxygen + generation. + +Wed Mar 15 16:38:08 UTC 2006 Olli Savia + + * ace/OS_NS_Thread.inl: + Only LynxOS 3.0.x has buggy pthread_cond_timedwait. + + * ace/Reverse_Lock_T.h: + Added a workaround for buggy LynxOS 3.x compiler. + +Wed Mar 15 15:27:51 UTC 2006 jiang,shanshan + + * ace/Capabilities.cpp + * ace/Codecs.cpp + Updated these files to solve the Capabilities_Test & Codecs_Test + tests errors. + +Wed Mar 15 12:18:12 UTC 2006 Johnny Willemsen + + * etc/*.doxygen: + Set SEARCHENGINE to YES for all doxygen config files, enables + the possibility to do searches in the doxygen generated + documentation + +Wed Mar 15 11:34:12 UTC 2006 Johnny Willemsen + + * ace/Handle_Set.{cpp,inl}: + Use prefix increment/decrement instead of postfix + +Tue Mar 14 11:22:35 2006 Douglas C. Schmidt + + * ace/String_Base.inl (empty), + * ace/String_Base.h (ACE_String_Base): Added + an empty() method to be more like STL strings. Thanks to + Patrick Rabau for contributing this. + +Tue Mar 14 23:33:27 UTC 2006 Steve Huston + + * ace/OS_NS_Thread.inl (recursive_mutex_cond_unlock): Fix this for + WinCE. CE doesn't have a RecursionCount, and LockCount is not an + indicator of recursion on WinCE; instead, see when it's unlocked + by watching the OwnerThread, which will change to something other + than the current thread when it's been unlocked "enough" times. + Thanks to Spencer Vanroekel for the investigations leading to this solution. + + * THANKS: Added Spencer Vanroekel to the Hall of Fame. + +Tue Mar 14 20:58:12 UTC 2006 jiang,shanshan + + * ace/WIN32_Asynch_IO.cpp + * ace/ACE.cpp + * ace/Capabilities.cpp + * ace/Codecs.cpp + * ace/FIFO.cpp + * ace/FIFO.h + * ace/FIFO_Recv.cpp + * ace/FIFO_Recv.h + * ace/FIFO_Recv_Msg.cpp + * ace/FIFO_Recv_Msg.h + * ace/FIFO_Send.cpp + * ace/FIFO_Send.h + * ace/FIFO_Send_Msg.cpp + * ace/FIFO_Send_Msg.h + * ace/Get_Opt.cpp + * ace/INET_Addr.cpp + * ace/MEM_Acceptor.cpp + * ace/MEM_IO.cpp + * ace/RB_Tree.cpp + * ace/Reactor.cpp + * ace/SOCK_Dgram_Mcast.cpp + * ace/SV_Semaphore_Complex.cpp + * ace/SV_Semaphore_Complex.h + * ace/SV_Semaphore_Complex.inl + * ace/SV_Semaphore_Simple.cpp + * ace/SV_Semaphore_Simple.h + * ace/SV_Semaphore_Simple.inl + * ace/TTY_IO.cpp + * ace/UUID.cpp + * ACEXML/common/FileCharStream.cpp + * ACEXML/common/HttpCharStream.cpp + * ACEXML/common/Transcode.cpp + * ACEXML/common/XML_Macros.h + * ACEXML/parser/parser/Parser.cpp + * ACEXML/parser/parser/Parser.i + * apps/gperf/src/Gen_Perf.cpp + * apps/gperf/src/Key_List.cpp + * apps/gperf/src/List_Node.cpp + * apps/gperf/src/Options.cpp + * protocols/ace/HTBP/HTBP_ID_Requestor.cpp + Updated these files to solve the warnings when setting up "VC level + 4 warnings" on Windows. These warnings include "unreachable code", + "assignment within conditional expression", "conversion from some + type to another type, possible loss of data", "local variable may be + used without having been initialized" and so on. + Thanks to Lukas Gruetzmacher + for motivating the fix to these "VC level 4 warnings". + +Tue Mar 14 15:55:08 UTC 2006 Olli Savia + + * ace/Task_T.h: + Added a workaround for buggy LynxOS 3.x compiler. + + * include/makeinclude/platform_lynxos.GNU: + Made debug=0 as default for LynxOS 3.x + +Tue Mar 14 15:50:09 UTC 2006 Olli Savia + + * ace/OS_NS_Thread.cpp: + Removed the :: prefix from pthread calls that are macros + on LynxOS. + +Tue Mar 14 09:51:12 UTC 2006 Johnny Willemsen + + * bin/generate_rel_manpages: + Updated doxygen version + +Mon Mar 13 22:01:23 UTC 2006 Olli Savia + + * tests/run_test.lst: + Do not run Multicast_Test and Process_Strategy_Test on LynxOS. + +Mon Mar 13 21:47:22 UTC 2006 Olli Savia + + * ace/OS_NS_Thread.inl: + Removed the :: prefix from pthread calls that are macros + on LynxOS. + + * ace/config-lynxos.h: + Do not define _POSIX_THREADS_CALLS under LynxOS 4.0. + + Thanks to Abdullah Sowayan + for reporting the problem and providing the initial patch. + +Mon Mar 13 22:21:25 UTC 2006 Nilabja R + + * ace/Process.h: + Changed the documentation of ACE_Process::spawn function.It + returns 1 if avoid_zombies option is set. does not return the + pid. + +Mon Mar 13 19:35:12 UTC 2006 Johnny Willemsen + + * ace/TP_Reactor.cpp: + Fixed typo in comment + + * ace/OS_NS_sys_select.inl: + Initialize pointer with 0 + + * ace/ACE.cpp: + Use prefix decrement/increment instead of postfix. Replaced + several c-style casts with C++ casts + +Mon Mar 13 17:20:47 UTC 2006 Wallace Zhang + + * ace/os_include/sys/os_time.h: + + Fixed a fuzz build error. + +Mon Mar 13 15:15:12 UTC 2006 Johnny Willemsen + + * ace/Token.cpp: + Use prefix decrement/increment instead of postfix + +Mon Mar 13 14:59:12 UTC 2006 Johnny Willemsen + + * ace/Select_Reactor_Base.cpp: + Initialise several pointers to 0 + +Mon Mar 13 14:02:12 UTC 2006 Johnny Willemsen + + * ace/Handle_Set.h: + Doxygen improvements + + * ace/Handle_Set.inl: + Use prefix increment instead of postfix + +Mon Mar 13 07:51:10 2006 Douglas C. Schmidt + + * Reverted this change + + Sun Mar 12 09:10:01 2006 Douglas C. Schmidt + + Since it was causing runtime failures. Thanks to Johnny for + reporting this. + +Mon Mar 13 13:26:12 UTC 2006 Johnny Willemsen + + * ace/TP_Reactor.cpp (handle_socket_events): + When suspend_i returns -1 return directly + +Mon Mar 13 12:11:52 UTC 2006 Don Sharp + + * ace/OS_NS_Thread.inl + Yank error reported by Abdullah, fixed. + +Sun Mar 12 19:21:12 UTC 2006 Johnny Willemsen + + * ace/Event_Handler.h: + Documentation improvement + + * ace/UTF32_Encoding_Converter.cpp: + Initialise pointer with 0 + + * ace/Select_Reactor_T.cpp (dump): + Also dump the contents of the suspend set + + * ace/Select_Reactor_Base.cpp (dump): + Improved output + +Sun Mar 12 09:10:01 2006 Douglas C. Schmidt + + * ace/TSS_T.cpp: Changed all calls of the form + + if (ACE_Thread::getspecific (this->key_, (void **) &tss_adapter) == -1) + + to + + void *temp = tss_adapter; // Need this temp to keep G++ from complaining. + if (ACE_Thread::getspecific (this->key_, &temp) == -1) + + to silence GCC warnings. Thanks to Lothar for this, as well. + +Sat Mar 11 09:09:35 2006 Douglas C. Schmidt + + * ace/CDR_Stream.inl: Changed all calls of the form + + ACE_OutputCDR::write_float (ACE_CDR::Float x) + { + return this->write_4 (reinterpret_cast (&x)); + } + + to + + ACE_OutputCDR::write_float (ACE_CDR::Float x) + { + void * tmp = &x; + return this->write_4 (reinterpret_cast (tmp)); + } + + to silence GCC warnings. Thanks to Lothar Werzinger for + suggesting this fix. + +Sun Mar 12 11:00:08 UTC 2006 Simon McQueen + + * bin/PerlACE/Process_Win32.pm: + + Don't postfix ".EXE" onto executables if they already have it and + IgnoreExeSubDir is set. Will make this: + + $PERL_SCRIPT = new PerlACE::Process($^X); + $PERL_SCRIPT->Arguments("some_perl_script.pl"); + $PERL_SCRIPT->IgnoreExeSubDir(1); + + ... start working again. + +Sat Mar 11 12:54:12 UTC 2006 Johnny Willemsen + + * ace/Timer_Wheel_T.h: + Don't split the unimplemented macros over multiple lines, fixes + compile problems with the Sun compilers. Thanks to Sven-Uwe + Sieler-Hornke + + for reporting this + +Fri Mar 10 16:01:58 UTC 2006 Chad Elliott + + Committing the following on behalf of Adam Mitz + . + + * bin/tao_orb_tests.lst: + + Added TAO/tests/CollocationLockup. + +Fri Mar 10 14:35:12 UTC 2006 Johnny Willemsen + + * tests/run_test.lst: + Don't run Multicast_Test_IPV6 in ACE_FOR_TAO builds + +Fri Mar 10 08:58:52 UTC 2006 J.T. Conklin + + * m4/pkg.m4: + + Add pkg.m4 from pkg-config 0.20 distribution, so configure + script can be regenerated on systems without it installed. + +Thu Mar 9 09:18:58 2006 Douglas C. Schmidt + + * COPYING: Updated the date to include 2006. + Thanks to Alan Kierstead for + motivating the fix to this oversight. + +Thu Mar 9 15:28:53 UTC 2006 Chad Elliott + + * bin/MakeProjectCreator/config/concurrency.mpb: + * bin/MakeProjectCreator/config/concurrency_serv.mpb: + * bin/MakeProjectCreator/config/dseventlogadmin.mpb: + * bin/MakeProjectCreator/config/dslogadmin.mpb: + * bin/MakeProjectCreator/config/etcl.mpb: + * bin/MakeProjectCreator/config/event.mpb: + * bin/MakeProjectCreator/config/event_serv.mpb: + * bin/MakeProjectCreator/config/ftrteventchannel.mpb: + * bin/MakeProjectCreator/config/htiop.mpb: + * bin/MakeProjectCreator/config/naming.mpb: + * bin/MakeProjectCreator/config/naming_serv.mpb: + * bin/MakeProjectCreator/config/notification.mpb: + * bin/MakeProjectCreator/config/notification_serv.mpb: + * bin/MakeProjectCreator/config/property.mpb: + * bin/MakeProjectCreator/config/property_serv.mpb: + * bin/MakeProjectCreator/config/rtevent_serv.mpb: + * bin/MakeProjectCreator/config/rteventlogadmin.mpb: + * bin/MakeProjectCreator/config/rtkokyuevent.mpb: + * bin/MakeProjectCreator/config/rtnotify.mpb: + * bin/MakeProjectCreator/config/trading.mpb: + * bin/MakeProjectCreator/config/trading_serv.mpb: + + Updated these base projects to fix the TAO_ORBSVCS GNU Make + macro. In many cases, I just moved the 'tagchecks' setting out of + the _serv.mpb into the base for both _serv.mpb and _skel.mpb + files. In others, I had to add the missing 'tagchecks' setting. + +Thu Mar 9 08:58:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb: + Removed include path that is not there anymore + +Wed Mar 8 20:58:39 UTC 2006 J.T. Conklin + + * ACE-INSTALL.html: + + Improve documentation for autoconf/automake build. + +Wed Mar 8 15:06:56 UTC 2006 Simon McQueen + + * bin/tao_orb_tests.lst: + + Scheduled regression test for bug #2429. See ticket for status. + +Wed Mar 8 10:17:12 UTC 2006 Johnny Willemsen + + * examples/Reactor/TP_Reactor/run_test.pl: + Both clients should start in parallel, not after each other + +Wed Mar 8 04:53:09 UTC 2006 J.T. Conklin + + * m4/ace.m4: + + Change ACE_PATH_FL to pass --enable-gl to fltk-config. + +Wed Mar 8 03:32:08 UTC 2006 J.T. Conklin + + * m4/ace.m4: + + Changed ACE_ENABLE_XT_REACTOR to AC_REQUIRE() ACE_PATH_XT + instead of AC_PATH_XTRA. + + Changed ACE_PATH_FL to AC_REQUIRE() ACE_PATH_X11. + + Add ACE_PATH_XT autoconf macro that sets ACE_XT_CPPFLAGS, + ACE_XT_LDFLAGS, and ACE_XT_LIBS. + + Add ACE_PATH_X11 autoconf macro that sets ACE_X11_CPPFLAGS, + ACE_X11_LDFLAGS, and ACE_X11_LIBS. + +Tue Mar 7 18:57:12 UTC 2006 Johnny Willemsen + + * examples/DLL/Newsweek.cpp: + Fixed compile error + +Tue Mar 7 18:48:31 UTC 2006 Steve Huston + + * ace/Event_Handler.cpp (read_adapter): Never pass the handler's + handle value to handle_input(). The handle_input() call is being + made on behalf of stdin, not any other handle. It also mimics + the behavior of the non-Windows case, where ACE_STDIN is registered + with the reactor, regardless of the handler's handle value. + Thanks to Aaron Scamehorn + for noticing this problem. + + * THANKS: Added Aaron Scamehorn to the Hall of Fame. + +Tue Mar 7 13:57:12 UTC 2006 Johnny Willemsen + + * ace/Reactor.h: + Doxygen improvements + +Tue Mar 7 09:39:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Don't run Bug_2417_Regression in ST builds + +Tue Mar 7 08:45:26 UTC 2006 J.T. Conklin + + * ace/Makefile.am: + * tests/Makefile.am: + + Regenerate. + + * bin/MakeProjectCreator/config/automake.features: + + Set athena and motif to 1 + + * bin/MakeProjectCreator/config/ace_fl.mpb: + + For autoconf build: + + Change @ACE_FLTK_CPPFLAGS@ and @ACE_FLTK_LIBS@ to + $(ACE_FLTK_CPPFLAGS) and $(ACE_FLTK_LIBS) + + Add $(ACE_FLTK_LDFLAGS) to linkflags. + + Subtract '$(ACE_X11_CPPFLAGS)' from compile_flags. + Subtract '$(ACE_X11_LDFLAGS)' from libpaths. + Subtract '$(ACE_X11_LIBS)' from macros. + + * bin/MakeProjectCreator/config/ace_qt.mpb: + + For autoconf build: + + Change @ACE_QT_CPPFLAGS@ and @ACE_QT_LIBS@ to + $(ACE_QT_CPPFLAGS) and $(ACE_QT_LIBS) + + Add $(ACE_QT_LDFLAGS) to linkflags. + + * bin/MakeProjectCreator/config/ace_tk.mpb: + + For autoconf build: + + Change @ACE_TK_CPPFLAGS@ and @ACE_TK_LIBS@ to + $(ACE_TK_CPPFLAGS) and $(ACE_TK_LIBS) + + Add $(ACE_TK_LDFLAGS) to linkflags. + + * bin/MakeProjectCreator/config/ace_xt.mpb: + + For autoconf build: + Add $(ACE_XT_CPPFLAGS) to compile_flags. + Add $(ACE_XT_LDFLAGS) to linkflags. + Add $(ACE_XT_LIBS) to pure_libs. + + * bin/MakeProjectCreator/config/ace_11.mpb: + + For autoconf build: + Add $(ACE_X11_CPPFLAGS) to compile_flags. + Add $(ACE_X11_LDFLAGS) to linkflags. + Add $(ACE_X11_LIBS) to pure_libs. + +Tue Mar 7 08:01:12 UTC 2006 Johnny Willemsen + + * examples/DLL/Newsweek.cpp: + * examples/DLL/Today.cpp: + * examples/Shared_Malloc/test_persistence.cpp: + Fixed compile errors + +Tue Mar 7 07:19:06 UTC 2006 J.T. Conklin + + * ace/Makefile.am: + * tests/Makefile.am: + + Regenerated. + +Tue Mar 7 07:16:40 UTC 2006 J.T. Conklin + + * ace/ace.m4: + + Add Truncate.h to Header_Files section. + +Tue Mar 7 07:12:39 UTC 2006 J.T. Conklin + + * bin/MakeProjectCreator/config/ace_qt.mpb: + + For autoconf build: + Subtract '$(QTDIR)/include' from includes. + Subtract '$(QTDIR)/lib' from libpaths. + Subtract 'QT_THREAD_SUPPORT' from macros. + +Tue Mar 7 05:50:31 UTC 2006 J.T. Conklin + + * configure.ac: + + Regenerate. + + * bin/MakeProjectCreator/config/ace_fl.mpb: + + For autoconf build: + Add @ACE_FLTK_CPPFLAGS@ to compile_flags. + Add @ACE_FLTK_LIBS@ to pure_libs. + + * bin/MakeProjectCreator/config/ace_qt.mpb: + + For autoconf build: + Subtract 'qt-mt$(QT_VERSION)' from lit_libs. + Add @ACE_QT_CPPFLAGS@ to compile_flags. + Add @ACE_QT_LIBS@ to pure_libs. + + * m4/ace.m4: + + Implement ACE_PATH_FL. + Implement ACE_PATH_QT. + Implement ACE_ENABLE_FL_REACTOR. + Implement ACE_ENABLE_QT_REACTOR. + + Thanks to Thomas Girard + for these fixes. + +Mon Mar 6 18:25:41 UTC 2006 Chad Elliott + + * ace/OS_NS_Thread.inl: + * ace/os_include/os_semaphore.h: + + Added an implementation for timed semaphore wait provided by + Gottwald Port Technology. It is very similar to the emulated + semphore in the event that ACE_HAS_POSIX_SEM is not defined. + Previously, this was not supported at all when ACE_HAS_POSIX_SEM + was defined. + + * ace/os_include/sys/os_time.h: + + Added sys to the file name to avoid Doxygen warnings. + + * bin/MakeProjectCreator/config/ace_qt.mpb: + + This change coincides with a change in MPC where the qt library + setting was changed. + + * bin/tao_other_tests.lst: + + I added !DISABLE_INTERCEPTORS to all the Security tests as + both the TAO_Security library and TAO_SSLIOP library require + interceptors. + + * include/makeinclude/rules.local.GNU: + + Removed an extra dollar sign, that GNU Make apparently didn't + care about but shouldn't have been there anyway. + + * bin/MakeProjectCreator/config/global.mpb: + + Removed this file. It is redundant to the global.mpb found in + MPC. + +Mon Mar 06 15:44:12 2006 Johnny Willemsen + + * examples/DLL/Newsweek.{h,cpp}: + * examples/DLL/Today.{h,cpp}: + * examples/Shared_Malloc/test_persistence.cpp: + Added operator delete, fixes warnings with icc 9.1 + + * ace/CDR_Stream.cpp: + * tests/Thread_Pool_Test.cpp: + Initialise pointer with 0 + + * ace/Pipe.inl: + Replaced c-style casts with C++ casts + + * ace/Svc_Handler.h: + Made the closing_ member an int, it is used that way, not as + char. + +Mon Mar 06 15:13:12 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug_2417_Regression + +Sun Mar 05 11:10:32 2006 Wallace Zhang + + * ACE version 5.5 released. + +Sun Mar 5 15:35:54 UTC 2006 Wallace Zhang + + * bin/make_release: + + Corrected a warning when generating WinCE projects. + +Sat Mar 4 14:09:44 UTC 2006 Wallace Zhang + + * ace/ATM_Acceptor.h: + + Added a missing semicolon. Thanks to Felix Li for reporting this. + +Thu Mar 2 02:01:12 UTC 2006 Wallace Zhang + + * NEWS: + + Updated this file with more inputs. + +Thu Mar 2 00:51:18 UTC 2006 Steve Huston + + * NEWS: Added Win64 and WinCE notes. + +Wed Mar 1 23:47:13 UTC 2006 Steve Huston + + * bin/make_release: Added "wince=1" to the MPC -features option for + the WinCE file generation; helps prevents WinCE-hostile projects + from being generated. + + * ace/config-win32-msvc-8.h: VC8 still lacks sigatomic_t for WinCE 5. + + * ace/config-WinCE.h: Removed some compiler-specific settings that + were moved to compiler-specific configs previously but not updated + for CE. Updated things that are now available. + + * tests/CDR_File_Test.cpp: + * tests/CE_fostream.{h cpp}: CE iostream hack not needed for CE when + iostreams are available (VC 8, included). + + * examples/Reactor/TP_Reactor/client.cpp: + * examples/Reactor/TP_Reactor/server.cpp: + * examples/Reactor/TP_Reactor/AcceptHandler.cpp: + * examples/Reactor/TP_Reactor/ReadHandler.cpp: + * netsvcs/servers/main.cpp: + * tests/Array_Map_Test.cpp: Use ACE_TEXT around all pieces of + concatenated string; VC8 WinCE misses the line ending. + Removed ACE_TEXT around ACE_TRACE's argument; ACE_TRACE adds it. + + * netsvcs/lib/Token_Handler.{h cpp} (init, parse_args): Changed argv + from char*[] to ACE_TCHAR*[]. Also fixed some missing ACE_TEXTs. + + * protocols/ace/RMCast/Acknowledge.cpp: + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Protocol.h: + * protocols/ace/RMCast/Retransmit.cpp: + * protocols/ace/RMCast/Socket.cpp: + * protocols/ace/TMCast/LinkListener.hpp: + * protocols/ace/TMCast/TransactionController.hpp: + * protocols/ace/TMCast/Group.cpp: ACEified naked system calls abort() + and perror(). + + * examples/APG/ThreadSafety/Tokens_Deadlock.cpp: + * examples/APG/Processes/Spawn.cpp: + * examples/APG/Processes/Process_Mutex.cpp: Add missing ACE_TEXT around + string args. + + * examples/NT_Service/NT_Service.mpc: Add avoids += wince - CE doesn't + do services. + + * examples/Web_Crawler/main.cpp: Don't try SIGFPE protection if + on WinCE. + + * examples/Web_Crawler/URL_Status.h: Changed STATUS_NOT_FOUND to + STATUS_ITEM_NOT_FOUND and STATUS_NOT_IMPLEMENTED to + STATUS_OP_NOT_IMPLEMENTED. CE apparantly has macros with these + names that messes this up. + + * examples/Reactor/WFMO_Reactor/WFMO_Reactor.mpc: Added wince to the + "avoids" clause for APC, Registry_Changes, Talker and + Window_Messages; WinCE doesn't the necessary features. + + * examples/Reactor/WFMO_Reactor/Window_Messages.cpp: Add missing + #include "ace/Auto_Event.h" + + * tests/MT_SOCK_Test.cpp: Remove the #if ACE_WIN64 from the check + for first send causes reset. This happens with 32-bit as well, + at least on Win XP-64 SP2. It's unrelated to the functionality under + test, and if there's an actual sending side botch that causes the + socket to be closed prematurely, it should show up as another error + in the server side. + +Wed Mar 1 16:12:50 UTC 2006 Steve Huston + + * tests/run_test.lst: Added !BAD_AIO to the Proactor_Test and + Proactor_Test_IPV6. This makes it possible to avoid this test on + platforms that simply aren't capable of performing decent AIO. + +Wed Mar 1 10:22:12 UTC 2006 Johnny Willemsen + + * ace/MT_SOCK_Test.cpp: + Fixed compile problem + +Wed Mar 1 09:48:12 UTC 2006 Johnny Willemsen + + * ace/Env_Value_T.h: + First to all template specializations before the generic one and + use template<> for the specializations, this fixes the compile + errors with GCC 4.1 + +Wed Mar 1 07:36:12 UTC 2006 Johnny Willemsen + + * examples/Reactor/TP_Reactor/AcceptHandler.cpp: + * examples/Reactor/TP_Reactor/server.cpp: + Fixed warnings in vc6 builds + +Wed Mar 1 00:16:26 UTC 2006 Steve Huston + + * ace/Recursive_Thread_Mutex.cpp (get_nesting_level): On Win64 with + AMD64/EM64T, use the CRITICAL_SECTION's RecursionCount member, not + LockCount, as was changed in this entry: + Tue May 6 11:50:18 2003 Chad Elliott + It remains to be seen under what conditions LockCount is used (it + may be for Itanium, for example) but for now, use of RecursionCount + is conditional to AMD64. + + * tests/Reactor_Dispatch_Order_Test.cpp: Print some useful order info + rather than ACE_ASSERT everywhere. Also fixed some ACE_TEXT stuff. + +Tue Feb 28 23:28:57 UTC 2006 J.T. Conklin + + * ace/Makefile.am: + + Add DEFAULT_INCLUDES definition that got lost during regeneration. + Fixes autoconf builds on case-insensitive filesystems. + +Tue Feb 28 19:46:16 UTC 2006 Steve Huston + + * tests/MT_SOCK_Test.cpp: Add a special-case check for Win64. It + appears that Win64 listen/accept side has some changed behavior + but I haven't found any Windows docs to state this; just observed + behavior. It appears that WinXP-64 will appear to accept connections + at the TCP level past the listen backlog but if data arrives before + the actual application-level accept() occurs, the connection is + reset. I can see where this would be sensible for a web server or + something like that, but it causes a problem for this use case where + the test client side connects and starts sending. + Note I also tried modifying the checks in the connect path (in + ACE.cpp, handle_timed_complete()), but the connection really does + appear to be accepted clean; a peek recv will complete without + the reset being noticed, hence my speculation that Microsoft + "enhanced" the behavior at the server side. + Also, fixed a lot of bad indentation and some missing ACE_TEXTs. + +Tue Feb 28 11:12:12 UTC 2006 Johnny Willemsen + + * ace/Connector.cpp: + Initialise several pointers explicitly with 0 + +Tue Feb 28 00:21:53 UTC 2006 Steve Huston + + * ace/config-WinCE.h: Don't set ACE_LACKS_IOSTREAM_TOTALLY for + MSVC 8 and up. + + * ace/CDR_Stream.cpp (grow_and_adjust): + * ace/CDR_Base.cpp (consolidate): Avoid losing data when + comparing ptrdiff_t values. + + * ace/Event_Handler.{h cpp}: Allow + ACE_Event_Handler:register_stdin_handler to build on WinCE. + + * ace/FILE_IO.cpp (send, recv): Truncate the number of iovec tuples + down to range of an int. + + * ace/OS_NS_stropts.{h cpp}: + * ace/OS_NS_sys_socket.{h cpp}: Allow QoS-enabled operations on WinCE + 5.0 and up. + + * ace/OS_NS_unistd.inl: 64-bit adjustments. + + * ace/Time_Value.{cpp inl}: + * tests/Time_Value_Test.cpp: Add ACE_WIN64 to the platforms that use + LONG_MAX/LONG_MIN rather than std::numeric_limits for the + time bounds. On Win64, time_t is 64 bits, yet the timeval members + used internally to ACE_Time_Value are still long. This makes time + values outside the LONG_MAX, LONG_MIN range very broken and many + tests start failing in odd ways. Thanks to J.T. Conklin for this fix. + + * ace/Token_Request_Reply.{cpp inl}: 32/64 bit adjustments. + + * netsvcs/lib/Token_Handler.{h cpp} (ACE_TS_Mutex, ACE_TS_WLock, + ACE_TS_RLock): Changed the name argument from char* to ACE_TCHAR* + to build clean on wchar systems. The classes that use this and that + this uses already were ACE_TCHAR. + +Mon Feb 27 22:36:20 UTC 2006 Steve Huston + + * tests/SSL/Makefile.am: Hand-corrected the addition of + ACE_TLS_CPPFLAGS, ACE_TLS_LDFLAGS, ACE_TLS_LIBS needed to pick up + user's specification of where the SSL libraries are. + +Mon Feb 27 08:17:49 2006 Douglas C. Schmidt + + * ace/Dev_Poll_Reactor.cpp (acquire_quietly): Moved the error message + so that it only is printed if it's a real error, not just a + timeout. Thanks to Oh Yoon Sik for + reporting this. + +Sun Feb 26 19:21:12 UTC 2006 Johnny Willemsen + + * ace/SOCK_IO.{cpp,inl}: + Fixed compile errors, it is ACE_Utils::Truncate, not ACE_Truncate + +Sun Feb 26 13:05:12 UTC 2006 Johnny Willemsen + + * tests/Reactor_Timer_Test.cpp: + Replaced asserts with ace_error to fix warnings in release builds + +Sat Feb 25 22:57:32 UTC 2006 Steve Huston + + * tests/Process_Manual_Event_Test.cpp: On Windows, use a complete + path name to spawn the child process with, else it doesn't work when + the test is in a subdir of ACE_wrappers/tests, as it is with + Win XP64 and WinCE. + + * ace/SOCK_IO.h: Clarify that on recvv() and sendv(), the number of + iovecs handled will be limited to the maximum value of an int. + * ace/SOCK_IO.inl (sendv, recvv): ACE_Truncate the 'n' number of + iovecs passed down to the ACE level. + * ace/SOCK_IO.cpp (send, recv): Reduce the size_t n iovec count to an + int range after dividing by 2 to fit it into the ACE_OS level. + +Sat Feb 25 12:45:12 UTC 2006 Johnny Willemsen + + * bin/tao_other_tests.lst: + Removed Security Policies tests, it has been removed from the repo + +Fri Feb 24 23:43:04 UTC 2006 J.T. Conklin + + * tests/Time_Value_Test.cpp: + + use std::numeric_limits::max() + and std::numeric_limits::min() (or LONG_MAX and LONG_MIN + for those platforms that lack std::numeric_limits) instead of + ACE_INT32_MAX and ACE_INT32_MIN for time bounds. + +Fri Feb 24 21:16:48 UTC 2006 xiong,ming + + * bin/MakeProjectCreator/config/ciao_config_handlers.mpb + + Add a verbatim to disable hidden_visibility for project + dependent on Config_Handlers + +Fri Feb 24 19:08:12 UTC 2006 Johnny Willemsen + + * bin/auto_run_tests.pl: + If we can't chdir to the directory then don't die, but just continue + with the next test + +Fri Feb 24 17:29:47 UTC 2006 Steve Huston + + * ace/Truncate.h: Include all needed code inline here and mark the + function and specialization inline. + * ace/Truncate.{inl cpp}: Removed. All code for ACE_Truncate is inlined + and included in the Truncate.h file. + + * ace/ace.mpc: + * ace/Makefile.am: Removed Truncate.cpp and Truncate.inl. + +Fri Feb 24 16:31:36 UTC 2006 Steve Huston + + * ace/Connector.{h cpp}: Changed the non_blocking_handles_ member + used to remember handles currently in-progress with a non-blocking + connect from ACE_Handle_Set to ACE_Unbounded_Set. This enables + ACE_Connector to be used with handle values outside the range + that select() can deal with (FD_SETSIZE) and is needed to run + large numbers of handles as is now possible with the + ACE_Dev_Poll_Reactor. + Removed the deprecated internal-only + SVC_HANDLER* ACE_NonBlocking_Connect_Handler::close (void) + method. There was already a replacement close() with more + sensible arguments that performed close operations in the correct + order, avoiding accesses to event handlers that were deleted. + Don't ACE_ASSERT when seeing a ACE_Connector::close() error; log + an error and keep going. + + * ace/Container_Instantiations.cpp: Added instantiations for + ACE_Unbounded_Set, used in ACE_Connector. + + * ace/Dev_Poll_Reactor.cpp (find_handler): Increment the found + handler's reference count, as the other reactor implementations do. + + * ace/Dev_Poll_Reactor.h: Fix typos. + +Fri Feb 24 15:38:20 UTC 2006 J.T. Conklin + + * m4/ace.m4: + + Fix typo in last change: + Thu Feb 23 23:00:45 UTC 2006 J.T. Conklin + +Fri Feb 24 15:26:07 UTC 2006 Don Sharp + + * ace/config-lynxos.h + * ace/Log_Msg.cpp: + + Back out code dealing with system's that have a + BROKEN_THREAD_KEYFREE after Olli Savia pointed + out that it breaks Task_Ex_Test. + +Fri Feb 24 15:03:12 UTC 2006 Johnny Willemsen + + * ace/Message_Block.h: + Doxygen improvements + +Fri Feb 24 14:34:12 UTC 2006 Johnny Willemsen + + * ace/Process_Manager.cpp: + Initialize pointer with 0 + + * ace/Process_Manager.h: + Tag the reap() method as deprecated + +Fri Feb 24 14:10:06 UTC 2006 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + + Modified the 'vpath' code so that it does not require knowlege of + how MPC internally stores filename lists. It does not change any + functionality. + +Fri Feb 24 13:55:12 UTC 2006 Johnny Willemsen + + * examples/Reactor/TP_Reactor/client.cpp: + * examples/Reactor/TP_Reactor/server.cpp: + Made these compiling with wchar enabled + +Fri Feb 24 11:51:12 UTC 2006 Johnny Willemsen + + * ace/ACE_export.h: + Also for borland changed ACE_INLINE_TEMPLATE_FUNCTION to + ACE_Export + +Fri Feb 24 11:24:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Fixed casing of Bug_2289_Regression + +Fri Feb 24 00:19:22 UTC 2006 Steve Huston + + * ace/ACE_export.h: Changed ACE_INLINE_TEMPLATE_FUNCTION to use + ACE_Export instead of "extern" for Visual C++. Fixes missing + ACE_Truncate symbols outside of the ACE library on Windows. + +Thu Feb 23 23:22:18 UTC 2006 Steve Huston + + * examples/APG/Logging/Callback.h: + * examples/APG/Logging/Callback-2.h: + * examples/APG/Logging/Callback-3.h: Add conditional areas for + platforms lacking IOStream support. + +Thu Feb 23 23:00:45 UTC 2006 J.T. Conklin + + * m4/ace.m4: + + Use "eval" when setting ACE_TCL_LIB to expand any variables in + ${TCL_LIB_SPEC}. Thanks to Thomas Girard . + +Thu Feb 23 19:53:51 UTC 2006 J.T. Conklin + + * tests/DLL_Test_Impl.cpp: + + Changed so nothrow operator delete has same exception + specification in declaration and definition. + +Thu Feb 23 17:01:15 UTC 2006 Simon McQueen + + * bin/tao_orb_tests.lst: + + Scheduled test for bug #2186. This will fail until fixed. + +Thu Feb 23 15:56:24 UTC 2006 J.T. Conklin + + * ace/Svc_Handler.cpp: + + Fix typo (identifier-name) introduced in: + Thu Feb 23 09:02:12 UTC 2006 Johnny Willemsen + +Thu Feb 23 14:44:54 UTC 2006 Don Sharp + + * ace/Log_Msg.cpp: + + Add code to ensure cleanup in ACE_Log_Msg::close (void). + For some systems, e.g. LynxOS, we need to ensure that + any registered thread destructor action for this thread + is disabled. + +Thu Feb 23 14:54:52 UTC 2006 J.T. Conklin + + * m4/ace.m4: + + Tweak how ACE_TCL_CPPFLAGS, ACE_TCL_LIBS, ACE_TK_CPPFLAGS, + and ACE_TK_LIBS are defined. + + * tests/Makefile.am: + + Fix regeneration bug. + +Thu Feb 23 10:05:22 UTC 2006 Simon McQueen + + * bin/tao_orb_tests.lst: + + Scheduled regression tests for bugs #2289 and #2134. + +Thu Feb 23 09:16:12 UTC 2006 Johnny Willemsen + + * examples/Reactor/TP_Reactor/*: + Example program demonstrating the TP_Reactor. This is also a + test program for bugzilla bug 2395. For reproducing start + the perl script but also do other activity on the system, + then it can happen that the same event handler is invoked + from multiple threads. Thanks to Martin Kolleck and Tino + Riethmueller for creating this example program. + +Thu Feb 23 08:35:09 UTC 2006 Don Sharp + + * ace/config-lynxos-pthread.h: + Remove this file. Change handling for LynxOS' use of macros + + * include/makeinclude/platform_lynxos.GNU: + * ace/config-lynxos.h: + Revert changes for building dynamic libraries + + * ace/os_include/os_pthread.h: + Remove inclusion of ace/config-lynxos-pthread.h + + * ace/OS_NS_Thread.inl: + If it's a macro we can't say "::pthread_cancel" + +Thu Feb 23 09:02:12 UTC 2006 Johnny Willemsen + + * tests/DLL_Test_Impl.{h,cpp}: + Added nothrow operator delete + + * ace/TP_Reactor.h: + * ace/Signal.h: + Documentation improvement + + * ace/Time_Value.cpp (operator*): + Use correct type for usec + + * ace/Svc_Handler.cpp: + Use casts in operator delete + +Thu Feb 23 08:08:26 UTC 2006 J.T. Conklin + + * ace/Makefile.am: + * tests/Makefile.am: + + Regenerate for TK Reactor changes. + +Thu Feb 23 06:47:26 UTC 2006 J.T. Conklin + + * bin/MakeProjectCreator/config/ace_tk.mpb: + + Add automake specific section for TCL and TK CPPFLAGS and LIBS. + + * m4/ace.m4: + + Change ace_enable_{fl,qt,tk,xt}_reactor to + ace_user_enable_{fl,qt,tk,xt}_reactor for consistency. + + Implement ACE_PATH_TCL. + + Implement ACE_PATH_TK. + + Implement ACE_ENABLE_TK_REACTOR. + + Thanks to Thomas Girard + for these fixes. + +Wed Feb 22 20:56:17 UTC 2006 Steve Huston + + * ace/ACE_export.h: Added another macro, ACE_INLINE_TEMPLATE_FUNCTION, + to take care of the compiler differences when an inlineable + function template can be out-lined. Some compilers (e.g. Microsoft) + like an extern storage class to prevent multiple instances; others + (practically all others) refuse the extern storage class and + resolve the multiples at link time. + + * ace/Truncate.{h inl}: Change ACE_NAMESPACE_INLINE_FUNCTION use to + ACE_INLINE_TEMPLATE_FUNCTION. + +Wed Feb 22 22:18:56 UTC 2006 Olli Savia + + * tests/run_test.lst: + Run some more tests on LynxOS. + +Wed Feb 22 21:30:35 UTC 2006 Olli Savia + + * ace/Truncate.inl: + Added include "ace/os_include/os_limits.h" to pull INT_MAX. + + * ace/config-lynxos.h: + Define ACE_LACKS_NUMERIC_LIMITS when compiling with GCC 2.x. + Define ACE_HAS_POSIX_SEM on LynxOS 4.0. + +Wed Feb 22 19:16:32 UTC 2006 Steve Huston + + * ace/ACE_export.h: Add __HP_aCC 06.05 and up to the list of compilers + that don't like "extern inline". + +Wed Feb 22 16:50:16 UTC 2006 Steve Huston + + * ace/String_Base.{h cpp}: Add operator= to set string from a + CHAR*. Optimizes performance in this case by removing the need + for a temporary object. Thanks to Kelly Hickel for this improvement. + + * tests/SString_Test.cpp: Added test for new operator=. + +Wed Feb 22 17:26:01 UTC 2006 Olli Savia + + * ace/TTY_IO.h: + Changed type of dtrdisable from int to bool. + + * examples/IPC_SAP/DEV_SAP/reader/reader.cpp: + * examples/IPC_SAP/DEV_SAP/writer/writer.cpp: + Changed to reflect recent changes in TTY_IO.h. + +Wed Feb 22 16:31:28 UTC 2006 Chad Elliott + + * bin/MakeProjectCreator/config/vcl.mpb: + + Added the 'bmake' type in order to support VCL. + + * bin/mpc.pl: + * bin/mwc.pl: + + Simplified these scripts by using FindBin. Also, made a + modification to preserve @ARGV so that when it is used by the + workspace creators, it contains the original arguments provided by + the user. + +Wed Feb 22 16:26:43 GMT 2006 Rich Seibel + + * include/makeinclude/platform_aix_ibm.GNU: + * THANKS + Added templates=manual to set manually instantiated + templates (without setting ACE_HAS_EXPLICIT_TEMPLATE_ + INSTANTIATION) and determining that -qeh=v6 is needed + to get the more general exception behavior. + + Thanks to Marc Brown and Andrew Keane for suggesting + these changes. + +Wed Feb 22 15:48:15 UTC 2006 Steve Huston + + * ace/Timer_Heap_T.cpp: Fixed mismatch signed/unsigned compare warning. + +Wed Feb 22 08:33:03 UTC 2006 Don Sharp + + * include/makeinclude/platform_lynxos.GNU + * ace/config-lynxos.h + change settings for building dynamic libraries + + * ace/config-lynxos-pthread.h + new file for handling LynxOS' use of macros + + * ace/Log_Msg.cpp + * ace/os_include/os_pthread.h + Handle broken thread key free on LynxOS + +Tue Feb 21 23:49:20 UTC 2006 Steve Huston + + * ace/Truncate.{h inl cpp}: New function template, ACE_Utils::Truncate, + for truncating types to int. Compares the value to the maximum int + value and, if passed value is greater, returns the max int; else + returns the original value cast to int. Useful for the many places + that return int but maintain larger types (such as size_t) + internally. There's a specialization for size_t since it's used so + much. + + * ace/ace.mpc: Add Truncate.cpp + + * ace/Makefile.am: Added Truncate.{h inl cpp} + + * ace/Message_Queue_T.cpp: + * ace/Message_Queue.cpp: Use ACE_Utils::Truncate() to return size/count + related values that may overflow the range of an int. Prevents odd + conditions that may appear as failures when dealing with very large + numbers of items in a queue. And, resolves compile warnings. + + * ace/Timer_Heap_T.cpp: In constructor, add checks to see if max_size_ + is outside the range of a long and reduce it if so. This ensures we + can cast size_t values to a long as a timer ID (pop_freelist). + NOTE!!! In grow_heap(), the size is doubled and there's no check for + failures in range or in allocation. This a problem that should be + looked at. + + * ace/Service_Manager.cpp (reconfigure_services): + * ace/WIN32_Asynch_IO.cpp: + * ace/UPIPE_Connector.cpp (connect): Fix compiler warnings. + +Tue Feb 21 23:08:38 UTC 2006 Steve Huston + + * ace/OS_NS_time.cpp: Add missing close brace for blank namespace + in ACE_HAS_WINCE case. + +Tue Feb 21 20:20:12 UTC 2006 Johnny Willemsen + + * protocols/ace/TMCast/MTQueue.hpp: + Initialise pointer to 0 to fix gcc4.1 warning + +Tue Feb 21 19:26:12 UTC 2006 Johnny Willemsen + + * bin/tao_other_tests.lst: + Fixed typo in this file + + * bin/generate_compile_stats.sh: + Improved this script, print date/time after the Detail in html, also + when we can't find the footprint size of an object file, just list it + with ? as size, that way we can at least see all objects and don't + miss any. + + * include/makeinclude/wrapper_macros.GNU: + Default use_dep_libs to 1 + + * bin/MakeProjectCreator/templates/gnu.mpd: + Only when use_dep_libs is set to 1 (which is the default) set DEPLIBS. + In the footprint builds we set use_dep_libs to 0 because it causes + problems when interpreting the map files generated by the linker. + +Tue Feb 21 19:14:12 UTC 2006 Johnny Willemsen + + * tests/Process_Manual_Event_Test.cpp: + Fixed this test + +Fri Feb 17 08:15:57 2006 Douglas C. Schmidt + + * ace/Asynch_Acceptor.h: Used ACE_DEFAULT_ASYNCH_BACKLOG instead + of ACE_DEFAULT_BACKLOG since the latter is set to a huge value + on Windows. Thanks to Alex Libman and Daniel <__daniel___ at icg + do tu-graz dot ac dot at> for their help. + + * ace/Default_Constants.h: Added a new macro called + ACE_DEFAULT_ASYNCH_BACKLOG that defaults to 5. + +Mon Feb 20 15:03:01 2006 Wallace Zhang + + * ACE version 5.4.10 released. + +Sun Feb 19 13:38:32 UTC 2006 Johnny Willemsen + + * bin/make_release: + Fixed bug in excluding of mwc files + +Fri Feb 17 19:16:32 UTC 2006 Wallace Zhang + + * NEWS: + + Updated this file with more inputs. + +Thu Feb 16 13:38:39 2006 Wallace Zhang + + * bin/generate_rel_manpages: + + Updated the script with latest info at naboo.dre. + +Thu Feb 16 13:38:00 UTC Simon Massey + + * bin/tao_orb_tests.lst: + Added regression test for Bugzilla 2403 + +Thu Feb 16 09:23:12 2006 Johnny Willemsen + + * bin/make_release: + Changed the exclude of mwc files, use TAO_* and CIAO_* + +Thu Feb 16 08:33:12 2006 Johnny Willemsen + + * bin/performance_stats.sh: + Added AMI to the combined performance figure + +Wed Feb 15 20:06:42 2006 Douglas C. Schmidt + + * ace/Timer_Heap_T.cpp: Fixed cancel() so that it doesn't miss any + nodes due to reheapifying during a remove. Thanks to Oh Yoon + Sik for this fix. + +Wed Feb 15 20:04:13 UTC 2006 J.T. Conklin + + * configure.ac: + + #include in ACE_HAS_POSIX_TIME feature test (if + supported by platform). Thanks to Vladimir Panov for reporting this bug. + +Wed Feb 15 19:58:36 UTC 2006 Chad Elliott + + * bin/fuzz.pl: + + Modified the check_for_long_file_names function to correctly deal + with the length of the MPC project names instead of the length of + the .mpc file itself. The length of the .mpc file name does not + necessarily indicate the length of the generated project name. + +Wed Feb 15 18:16:02 UTC 2006 J.T. Conklin + + * ace/Time_Value.cpp: + + Adding/subtracting 0.999999 from max and min is required to really + represent a saturated time value. + +Wed Feb 15 12:32:37 UTC 2006 Chad Elliott + + * ace/Svc_Conf_Lexer.cpp: + + Changed two instances of memcpy() to memmove(). The areas being + copied could possibly overlap. + +Wed Feb 16 11:40:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added new AdvSlotExt PI test + +Wed Feb 16 07:54:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_sunos5_sunc++.GNU: + Disabled visibility by default, seems to cause some issues in the + builds at this moment + +Tue Feb 14 22:56:39 UTC 2006 J.T. Conklin + + * include/makeinclude/rules.local.GNU: + + Added *.core to list of files to clean. + +Tue Feb 14 22:04:46 UTC 2006 William R. Otte + + * bin/MakeProjectCreator/config/security.mpb + * bin/MakeProjectCreator/config/ssliop.mpb + + Fixes for linking errors/warnings in OS X. + +Tue Feb 14 21:43:01 UTC 2006 J.T. Conklin + + * configure.ac: + + #include before in + ACE_LACKS_MADVISE_PROTOTYPE feature test. Thanks to Vladimir + Panov for reporting and providing a + patch for this bug. + +Tue Feb 14 18:36:16 UTC 2006 J.T. Conklin + + * ace/Time_Value.cpp: + + Changed operator *= to use std::numeric_limits::max() + and std::numeric_limits::min() (or LONG_MAX and LONG_MIN + for those platforms that lack std::numeric_limits) instead of + ACE_INT32_MAX and ACE_INT32_MIN when saturating the results. + + This uses the correct limits for whatever underlying type time_t + is when std::numeric_limits is available, and uses the limits + for the traditional type, long, when it is not. + + Removed call to normalize(), as set() already normalizes results. + +Tue Feb 14 14:47:00 UTC 2006 Chad Elliott + + * bin/fuzz.pl: + + When checking for maximum length of mpc files, ensure that only + .mpc files are checked. + +Tue Feb 14 08:34:12 UTC 2006 Johnny Willemsen + + * ace/config-lynxos.h: + Added ACE_HAS_CHARPTR_SHMDT + +Tue Feb 14 08:24:12 UTC 2006 Johnny Willemsen + + * ace/Svc_Handler.{h cpp}: Add ACE_LACKS_PLACEMENT_OPERATOR_DELETE + around the operator delete with nothrow. This fixes the compile + errors with Borland C++ + +Mon Feb 13 17:50:49 UTC 2006 Steve Huston + + * ace/Svc_Handler.{h cpp}: Add placement operator delete to match + the nothrow variant placement operator new. This ensures proper + cleanup if the constructor throws an exception. + + * ace/config-hpux-11.00.h: Only set ACE_LACKS_PLACEMENT_OPERATOR_DELETE + for aC++ versions earlier than A.03.55.02. Fixes Bugzilla #2394. + +Mon Feb 13 18:23:27 UTC 2006 J.T. Conklin + + * configure.ac: + + Fix typos in ACE_HAS_CHARPTR_SHMAT and ACE_HAS_CHARPTR_SHMDT + feature tests. + +Mon Feb 13 09:33:20 UTC 2006 Ossama Othman + + * ace/config-sunos5.5.h (ACE_IMPORT_SINGLETON_DECLARATION): + (ACE_IMPORT_SINGLETON_DECLARE): + + Comment out these macro definitions. The "extern template" + extension available in MSVC++ and g++ doesn't work for Sun + Studio C++ compilers. An alternative may need to be found. + +Mon Feb 13 14:51:10 UTC 2006 Chad Elliott + + * ace/Svc_Conf_Lexer.cpp: + + Catch the possible situation where we were unable to allocate a + converter and mark it as a conversion failure. + + * include/makeinclude/platform_vxworks5.5.x.GNU: + + If we are compiling for a PPC, we need to add the -mlongcall + option for many TAO tests (and some user applications). + +Mon Feb 13 11:49:12 UTC 2006 Johnny Willemsen + + * netsvcs/servers/svc.conf: + * netsvcs/servers/svc.conf.xml: + Use port 20006 for the Name_Server, is the same port as we + default to in ACE. Fixes a problem that the Name_Server and + Logging Server both use the same port as default + +Mon Feb 13 11:40:12 UTC 2006 Johnny Willemsen + + * ace/Service_Manager.h: + * ace/Service_Repository.h: + Doxygen improvements + +Mon Feb 13 10:08:12 UTC 2006 Johnny Willemsen + + * ace/Obstack_T.h: + Doxygen improvement + +Mon Feb 13 10:01:12 UTC 2006 Johnny Willemsen + + * tests/Proactor_Test.cpp: + Don't test certain functionality when ACE_HAS_WINNT4 is 0 + + * tests/Future_Test.cpp: + * tests/Future_Set_Test.cpp: + Moved real code out of ACE_ASSERT, fixes crashing of these + tests in release builds + +Mon Feb 13 08:57:12 UTC 2006 Johnny Willemsen + + * ace/config-borland-common.h: + Readded ACE_SIZEOF_LONG_DOUBLE 10 again + +Mon Feb 13 08:41:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_shm.inl (shmat): + Added const_cast to get rid of compile errors with LynxOS + +Mon Feb 13 08:28:12 UTC 2006 Johnny Willemsen + + * ace/config-macosx-panther.h: + Removed ACE_LACKS_USECONDS_T + +Mon Feb 13 08:22:12 UTC 2006 Johnny Willemsen + + * ace/config-aix-4.x.h: + * ace/config-hpux-11.00.h: + Added ACE_LACKS_SYS_SYSCTL_H + +Mon Feb 13 08:17:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_unistd.cpp (num_processors_online): + Made the HPUX specific implementation the last option to use + +Mon Feb 13 08:12:12 UTC 2006 Johnny Willemsen + + * ace/config-vxworks5.x.h: + Added ACE_LACKS_NUMERIC_LIMITS + +Mon Feb 13 08:09:12 UTC 2006 Johnny Willemsen + + * ace/config-cygwin32.h: + Added ACE_LACKS_SYS_SYSCTL_H + +Mon Feb 13 05:12:51 UTC 2006 J.T. Conklin + + * ace/config-netbsd.h: + * configure.ac: + + Revert: + Sun Feb 12 19:07:39 UTC 2006 J.T. Conklin + + Caused build failures because NetBSD doesn't support + pthread_attr_{get,set}schedpolicy(). It's not clear what + ACE_HAS_PTHREAD_SCHEDPARAM actually means. + +Sun Feb 12 19:48:19 UTC 2006 J.T. Conklin + + * m4/config_h.m4: + + Remove AH_TEMPLATE for ACE_HAS_SIN_LEN. + +Sun Feb 12 19:43:42 UTC 2006 J.T. Conklin + + * m4/config_h.m4: + * configure.ac: + + Removed AH_TEMPLATEs for ACE_HAS_PTHREADS_DRAFT4, + ACE_HAS_PTHREADS_DRAFT6, ACE_HAS_PTHREADS_DRAFT7, and + ACE_HAS_PTHREADS_STD from m4/config_h.m4; and add the + descriptions as the third arguments in the AC_DEFINEs + in configure.ac. + +Sun Feb 12 19:07:39 UTC 2006 J.T. Conklin + + * ace/config-netbsd.h: + + Define ACE_HAS_PTHREAD_SCHEDPARAM. + + * configure.ac: + + Define ACE_HAS_PTHREAD_SCHEDPARAM if platform supports + pthread_getschedparam() and pthread_setschedparam(). + +Sun Feb 12 19:01:47 UTC 2006 J.T. Conklin + + * ace/config-macosx-panther.h: + * ace/config-macosx-tiger.h: + * ace/config-macosx.h: + * ace/config-mit-pthread.h: + * ace/config-qnx-neutrino.h: + * ace/config-qnx-rtp-62x.h: + * ace/config-qnx-rtp-pre62x.h: + * ace/config-unixware-7.1.0.h: + * ace/config-unixware-7.1.0.udk.h: + + Remove ACE_HAS_PTHREAD_SIGMASK definition. This feature test + macro was deprecated and replaced with ACE_LACKS_PTHREAD_SIGMASK + some ~5 years ago. + +Sun Feb 12 13:31:12 UTC 2006 Johnny Willemsen + + * ace/config-linux-common.h: + Check for icc as the first compiler, when icc is used in gcc + compatibility mode we else incorrectly use gcc. + +Sun Feb 12 13:20:12 UTC 2006 Johnny Willemsen + + * ace/config-sunos5.5.h: + Added ACE_LACKS_SYS_SYSCTL_H + +Sun Feb 12 13:18:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_shm.inl (shmdt): + Added a const cast when ACE_HAS_CHARPTR_SHMDT is defined + +Sun Feb 12 13:08:12 UTC 2006 Johnny Willemsen + + * ace/config-sunos5.5.h: + Fixed typo in this file + +Sun Feb 12 13:01:12 UTC 2006 Johnny Willemsen + + * ace/config-vxworks5.x.h: + Added ACE_LACKS_SYS_SYSCTL_H + +Sun Feb 12 08:01:12 UTC 2006 Johnny Willemsen + + * ace/config-cygwin32.h: + Removed ACE_LACKS_USECONDS_T, Cygwin does deliver useconds_t + +Sat Feb 11 19:54:12 UTC 2006 Johnny Willemsen + + * ace/config-lynxos.h: + Added ACE_LACKS_SUSECONDS_T and ACE_LACKS_USECONDS_T + + * ace/config-hpux-11.00.h: + Added ACE_LACKS_SUSECONDS_T + +Sat Feb 11 19:48:12 UTC 2006 Johnny Willemsen + + * ace/Time_Value.cpp: + Also undef min when defined and do it before including limits, + should fix our MingW build + +Sat Feb 11 19:09:12 UTC 2006 Johnny Willemsen + + * ace/config-cygwin32.h + * ace/config-vxworks5.x.h: + * ace/config-macosx-panther.h: + Added ACE_LACKS_SUSECONDS_T and ACE_LACKS_USECONDS_T + +Sat Feb 11 10:37:04 2006 Douglas C. Schmidt + + * ace/ace_wchar.inl (convert): Fixed a bug where the character + conversion was getting improperly sign converted. Thanks to + Olivier Brunet for this fix. + +Fri Feb 10 22:49:07 UTC 2006 Ossama Othman + * ace/config-sunos5.5.h: + * include/makeinclude/platform_sunos5_sunc++.GNU: + + Added Sun Studio 8 or better symbol visibility/scope support. + Provides improved shared libraries by reducing footprint + (e.g. 17% reduction for ACE), reducing symbol clashes with + third party libraries and increasing run-time performance. + [Bug 2378] + +Fri Feb 10 21:26:42 UTC 2006 J.T. Conklin + + * configure.ac: + + Added ACE_HAS_CHARPTR_SHMAT and ACE_HAS_CHARPTR_SHMDT + feature tests. Fixes bug 2388. + +Fri Feb 10 19:24:10 UTC 2006 Chad Elliott + + * bin/MakeProjectCreator/config/trading_serv.mpb: + + Added iortable as a base project as the TAO_CosTrading_Serv + library now utilizes the TAO_IORTable library. + +Fri Feb 10 16:00:00 UTC 2006 Simon Massey + + * bin/tao_orb_tests.lst: + Removed "Request_Interceptor_Flow" Portable Interceptors test + when configuration HAS_EXTENDED_FT_INTERCEPTORS as it will + fail. + +Fri Feb 10 15:32:12 UTC 2006 Johnny Willemsen + + * tests/Dirent_Test.cpp: + Made this test compiling with Borland C++ with wchar enabled + +Fri Feb 10 14:25:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + Disable visibility by default, seems the Intel C++ compiler + has some issues which we reported to Intel + +Fri Feb 10 14:23:06 UTC 2006 Chad Elliott + + * bin/PerlACE/Run_Test.pm: + + Fixed the add_path() method to work on both Windows and UNIX. + + * bin/depgen.pl: + + If the -i option is passed, create a dependency file even if there + are no source files. This will allow NMake files to proceed + without warning. + + * bin/generate_export_file.pl: + + Changed to always emit the static library code unless the -n is + used. There is no reason not to support static libraries by + default. + +Fri Feb 10 14:20:54 UTC 2006 xiong,ming + + * bin/ciao_tests.lst + + Reverse a previous change to ciao_tests due to concerns + for autobuild logging.A smaller test will be added instead. + +Fri Feb 10 13:22:34 UTC 2006 xiong,ming + + * bin/ciao_tests.lst + + Added Bug_2130_Regression test + +Fri Feb 10 13:07:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_unistd.inl (write): + Use another const cast when ACE_HAS_CHARPTR_SOCKOPT is defined + +Fri Feb 10 12:51:12 UTC 2006 Johnny Willemsen + + * bin/make_release: + Use *.mwc to exclude any mwc files instead of listing them + explicitly, prevents the problems which we had with x.4.9 when + we had some new mwc files which caused an overwrite of + GNUmakefiles. + +Fri Feb 10 12:42:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + Removed OCFLAGS += -axK, this flag is really dependent on the CPU + that is targeted, it is just not a good idea to do this in general + when optimization is enabled + +Fri Feb 10 12:00:12 UTC 2006 Johnny Willemsen + + * ace/Message_Queue.cpp: + * ace/WIN32_Proactor.cpp: + Applied workarounds for broken vc6 header files + +Fri Feb 10 11:03:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/wrapper_macros.GNU: + Set exceptions default to 1 + + * include/makeinclude/platform_linux_icc.GNU: + Set optimize to 1 again now Intel has fixed a bug in their IA64 + compiler, also added support for visibility + +Fri Feb 10 10:53:12 UTC 2006 Johnny Willemsen + + * ACE-INSTALL.html: + Updated link to tenermerx code + + * ace/Asynch_IO.h: + Fixed problem when ACE_HAS_WINNT4 has been set to 0. Thanks to + Karl Schmitt for reporting this. + + * ace/ACE.cpp: + * ace/Select_Reactor_T.cpp: + Fixed incorrect comment after endif + + * ace/Auto_Event.h: + * ace/Based_Pointer_Repository.h: + * ace/Based_Pointer_T.h: + * ace/Default_Constants.h: + * ace/Dev_Poll_Reactor.h: + * ace/Event_Handler.h: + * ace/File_Lock.h: + * ace/Framework_Component.h: + * ace/Free_List.h: + * ace/Future.h: + * ace/Future_Set.h: + * ace/Guard_T.h: + * ace/Handle_Gobbler.h: + * ace/Handle_Set.h: + * ace/Hash_Map_Manager_T.h: + * ace/Hash_Map_With_Allocator_T.h: + * ace/Local_Tokens.h: + * ace/Map_Manager.h: + * ace/MEM_IO.h: + * ace/MEM_SAP.h: + * ace/MEM_Stream.h: + * ace/Message_Block.h: + * ace/Message_Queue.h: + * ace/Msg_WFMO_Reactor.h: + * ace/Node.h: + * ace/Null_Mutex.h: + * ace/Null_Semaphore.h: + * ace/Object_Manager.h: + * ace/Process_Manager.h: + * ace/Reactor.h: + * ace/Reactor_Notification_Strategy.h: + * ace/Proactor.h: + * ace/Recursive_Thread_Mutex.h: + * ace/Service_Object.h: + * ace/WFMO_Reactor.h: + * ace/Reactor_Impl.h: + * ace/Proactor_Impl.h: + * ace/Signal.h: + * ace/Svc_Handler.h: + * ace/SOCK_SEQPACK_Association.h: + * ace/Test_and_Set.h: + * ace/Thread_Mutex.h: + * ace/Timer_Heap_T.h: + * ace/TP_Reactor.h: + * ace/Timer_Queue_Adapters.h: + * ace/Timer_Hash_T.h: + * ace/Timer_Queue_T.h: + * ace/Unbounded_Set.h: + * ace/Select_Reactor_T.h: + * ace/Service_Config.h: + Doxygen improvements + + * ace/Auto_IncDec_T.h: + Removed incorrect comment + + * ace/config-aix-4.x.h: + * ace/config-borland-common.h: + * ace/config-cray.h: + * ace/config-cxx-common.h: + * ace/config-doxygen.h: + * ace/config-g++-common.h: + * ace/config-hpux-10.x-hpc++.h: + * ace/config-hpux-11.00.h: + * ace/config-icc-common.h: + * ace/config-integritySCA.h: + * ace/config-irix6.x-sgic++.h: + * ace/config-kcc-common.h: + * ace/config-lynxos.h: + * ace/config-netbsd.h: + * ace/config-openvms.h: + * ace/config-osf1-4.0.h: + * ace/config-sunos5.5.h: + * ace/config-sunos5.6.h: + * ace/config-tandem-nsk-mips-v2.h: + * ace/config-tandem-nsk-mips-v3.h: + * ace/config-unixware-7.1.0.udk.h: + * ace/config-vxworks5.x.h: + * ace/config-vxworks6.2.h: + * ace/config-win32-dmc.h: + * ace/config-win32-ghs.h: + * ace/config-win32-msvc-6.h: + * ace/config-win32-msvc-7.h: + * ace/config-win32-msvc-8.h: + * ace/config-win32-visualage.h: + * ace/README: + Removed ACE_HAS_USING_KEYWORD, all our compilers have it so need + for a seperate define anymore + + * ace/config-borland-common.h: + Removed ACE_LACKS_INLINE_ASSEMBLY, ACE_NEW_THROWS_EXCEPTIONS, and + ACE_SIZEOF_LONG_DOUBLE and added ACE_HAS_NEW_NOTHROW + + * ace/config-doxygen.h: + Fixed define of __ACE_INLINE__ + + * ace/config-icc-common.h: + Added custom export macros, the ICC compiler does support the + visibility attribute + + * ace/config-lynxos.h: + Added ACE_HAS_CHARPTR_SHMAT + + * ace/config-macros.h: + Always expand ACE_USING to using + + * ace/config-psos-diab-mips.h: + * ace/config-psos-diab-ppc.h: + * ace/config-psos-diab.h: + * ace/config-psos-tm.h: + * ace/config-psosim-g++.h: + Added ACE_LACKS_ENV + + * ace/config-sunos5.5.h: + Added ACE_HAS_CHARPTR_SHMDT + + * ace/config-win32-borland.h: + Removed ACE_LACKS_STDINT_H, ACE_LACKS_DIRENT_H, undef the + following defines, borland has them, ACE_LACKS_STRUCT_DIR, + ACE_LACKS_CLOSEDIR, ACE_LACKS_OPENDIR, ACE_LACKS_READDIR, + ACE_LACKS_REWINDDIR, added ACE_HAS_WOPENDIR, ACE_HAS_WCLOSEDIR, + ACE_HAS_WREADDIR, ACE_HAS_WREWINDDIR + + * ace/config-WinCE.h: + Added ACE_LACKS_PIPE + + * ace/Dirent.{h,inl}: + * ace/Dirent_Selector.{h,cpp,inl}: + * ace/os_include/os_dirent.h: + * ace/OS_NS_dirent.{h,cpp,inl}: + Borland delivers wopendir, wclosedir for wchar_t directory names + but also wdirent instead of dirent. Added a ACE_DIRENT macro that + normally expands to dirent but with Borland it can expand to + wdirent when build with ACE_USES_WCHAR + + * ace/DLL_Manager.h: + No need to export ACE_DLL_Handle, internal class + + * ace/Framework_Component.h: + Declare private copy constructor/assignment operator, + should allow making a copy + + * ace/INET_Addr.cpp: + Changed some tests for VxWorks, only a specific implementation + should be used when ACE_LACKS_GETHOSTBYNAME and + ACE_LACKS_GETHOSTBYADDR are set, with newer VxWorks version we + don't have these defines set, so we don't need to use a different + code path for VxWorks + + * ace/Local_Name_Space.cpp: + * ace/Name_Space.cpp: + * ace/Parse_Node.cpp: + Initialize all members, fixes GCC warnings + + * ace/MEM_SAP.h: + Don't export ACE_MEM_SAP_Node, it is an internal class + + * ace/Message_Queue.cpp: + * ace/WIN32_Proactor.cpp: + Removed win32 bit specific code, the 64bit case is the one also to + use for 32bit. + + * ace/Time_Value.h: + * ace/os_include/os_time.h: + Moved timespec to os_time, it belongs there. Fixes bugzilla + bug [2380]. + + * ace/Node.h: + Declare private assignment operator + + * ace/OS_NS_stdlib.inl (getenv): + Removed psos specific part, solved by adding a define to the + psos confi files + + * ace/OS_NS_sys_utsname.cpp: + Merged the two uname implementations to one method to make + the maintenance easier + + * ace/OS_NS_Thread.inl: + Replaced VXWORKS with ACE_VXWORKS + + * ace/Select_Reactor_Base.h: + Added forward declaration of ACE_Sig_Handler, this class is + used in the interfaces as pointer + + * ace/OS_NS_sys_shm.{h,inl}: + Changed the void* argument of shmdt and shmat to a const void*, + introduced ACE_HAS_CHARPTR_SHMAT and ACE_HAS_CHARPTR_SHMDT for + the platforms that have a char* version of these methods. + + * ace/TP_Reactor.{h,cpp}: + Don't export ACE_EH_Dispatch_Info and ACE_TP_Token_Guard, it are + internal classes. Renamed grab_token to acquire_read_token as the + todo mentioned, addded private copy constructor and assignment + operator for ACE_TP_Token_Guard, no copying should be allowed + + * ace/Unbounded_Queue.cpp: + * ace/Unbounded_Set.cpp: + Use prefix increment/decrement + + * ace/OS_NS_unistd.inl: + Merged the two pipe methods to one and replaced some c-style casts + with C++ casts. + + * ace/OS_NS_unistd.cpp: + Refactored num_processors, use sysconf when _SC_NPROCESSORS_CONF is + defined, when ACE_HAS_SYSCTL has been set we use sysctl + Refactored num_processors_online, use sysconf when + _SC_NPROCESSORS_ONLN is defined, when ACE_HAS_SYSCTL has been + set we use sysctl. + + * ace/Time_Value.{h,cpp,inl}: + Use suseconds_t as type for usec + + * ace/Select_Reactor_T.inl: + Added include of Signal.h to fix compile error in the solaris + autoconf build + + * bin/tao_other_tests.lst: + Also run EC_MT_MCast in a static configuration + + * bin/tao_orb_tests.lst: + Added AMH_Oneway and Bug_2319_Regression + + * bin/perltest2cpp.pl: + Removed this file + +Thu Feb 9 20:07:59 UTC 2006 J.T. Conklin + + * ace/Time_Value.cpp: + + Some platforms pollute the namespace with a max() macro, which + makes it impossible to invoke std::numeric_limits::max(). + #undef max after all the headers have been #included. + +Thu Feb 9 18:51:16 UTC 2006 J.T. Conklin + + * configure.ac: + + #include in the ACE_HAS_2_PARAM_SCHED_GETAFFINITY + and ACE_HAS_2_PARAM_SCHED_SETAFFININTY feature tests. Thanks to + Doug McCorkle for reporting this bug. + +Thu Feb 9 20:05:00 UTC 2006 Iliyan Jeliazkov + + * bin/tao_other_tests.lst: + + Added the new secure policies test. + +Thu Feb 9 17:40:17 UTC 2006 J.T. Conklin + + * ace/OS_NS_string.cpp (ACE_OS::strerror): + + Don't use strlen() to see if length is zero, check if the + first char is null (O(1) vs. O(N)). + +Thu Feb 9 16:59:40 UTC 2006 J.T. Conklin + + * test/MEM_Stream_Test.cpp: + + Align test_reactive() and test_concurrent() so the same + error/warnings are emitted. + + * Flag_Manip.cpp: + * IPC_SAP.cpp + * MEM_IO.cpp: + * SOCK_Dgram.cpp: + * SSL/SSL_SOCK_Stream.cpp: + + Change type of FIONBIO and FIONREAD ioctl from u_long, + ACE_INT32, etc. to int for portability. + + * ace/Time_Value.cpp: + + Use std::numeric_limits::max () instead of LONG_MAX + as ctor's first argument when initializing ACE_Time_Value:: + max_time if !ACE_LACKS_NUMERIC_LIMITS, as time_t may not be + a long. Fixes Timer_Queue_Reference_Counting_Test on NetBSD/amd64. + + * configure.ac: + + Added ACE_LACKS_NUMERIC_LIMITS feature test. + + * ace/README: + + Document new ACE_LACKS_NUMERIC_LIMITS feature test macro, which + should be defined to 1 if platform lacks std::numeric_limits<>. + + * ace/Cached_Connect_Strategy_T.cpp (cached_connect): + + Handle ETIMEDOUT as we do for EWOULDBLOCK. Fixes + Cached_Conn_Test on NetBSD systems. + + * ace/config-freebsd.h: + * ace/config-netbsd.h: + * ace/config-openbsd.h: + * ace/config-macosx-panther.h: + * ace/config-macosx-tiger.h: + * ace/config-macosx.h: + + Define ACE_HAS_SOCKADDR_IN6_SIN6_LEN. + This may be needed for other canned configs. + + * ace/config-aix-4.x.h: + * ace/config-cray.h: + * ace/config-freebsd.h: + * ace/config-macosx-panther.h: + * ace/config-macosx-tiger.h: + * ace/config-macosx.h: + * ace/config-mvs.h: + * ace/config-netbsd.h: + * ace/config-openbsd.h: + * ace/config-qnx-neutrino.h: + * ace/config-qnx-rtp-62x.h: + * ace/config-qnx-rtp-pre62x.h: + * ace/config-unixware-7.1.0.h: + * ace/config-unixware-7.1.0.udk.h: + * ace/config-win32-interix.h: + + Change ACE_HAS_SIN_LEN to ACE_HAS_SOCKADDR_IN_SIN_LEN. + + * ace/README: + + Document new feature test macros ACE_HAS_SOCKADDR_IN_SIN_LEN and + ACE_HAS_SOCKADDR_IN6_SIN6. + + Removed description of ACE_HAS_SIN_LEN. This macro was defined, + but not used anywhere in ACE, TAO, or CIAO. It's being removed + rather than used because the new macros follow our feature test + naming conventions. + + * ace/INET_Addr.cpp: + * ace/INET_Addr.inl: + + Set the sockaddr_in.sin_len and sockaddr_in6.sin6_len members if + new ACE_HAS_SOCKADDR_IN_SIN_LEN or ACE_HAS_SOCKADDR_IN6_SIN6_LEN + feature test macros are defined. + +Tue Feb 7 23:28:29 UTC 2006 Steve Huston + + * ace/SPIPE_Acceptor.cpp (close): On Windows, wait for completion + (cancellation) of an outstanding ConnectNamedPipe operation. If + left outstanding and the ACE_SPIPE_Acceptor object is deleted, the + OS will write into deleted memory. Thanks to Nathan Bamford + for reporting this. + + * THANKS: Added Nathan Bamford to the Hall of Fame. + +Wed Feb 08 15:46:51 2006 Wallace Zhang + + * ACE version 5.4.9 released. + +Mon Feb 6 18:39:20 UTC 2006 Wallace Zhang + + * NEWS: + + Updated with info from Doug Schmidt. + +Mon Feb 6 15:49:57 UTC 2006 Wallace Zhang + + * NEWS: + + Updated with info from Steve Huston. + +Mon Feb 6 14:44:12 UTC 2006 Johnny Willemsen + + * ACE-INSTALL.html: + Improved documentation for the BCBVER environment setting which + is required for building with the Borland C++ compilers + +Fri Feb 3 23:48:32 UTC 2006 Steve Huston + + * ace/Barrier.h: Noted shutdown() was added for 5.4.9. + + * ace/Message_Queue_T.{h cpp}: Changed enqueue_head(), enqueue_tail() + to recognize that the ACE_Message_Block passed may have other + block(s) connected to it via the next() pointers. This allows a + caller to pre-connect a series of ACE_Message_Blocks and coalesce + the enqueueing of the series into a single method call. + Thanks to Guy Peleg for suggesting + this enhancement. + Also revamped the Doxygenization of ACE_Message_Queue's + documentation. + + * tests/Message_Queue_Test.cpp: Added chained_block_test() to test + the new functionality above. + +Fri Feb 3 14:47:53 UTC 2006 Ossama Othman + + * ace/Cleanup_Strategies_T.h: + + Added missing versioned namespace declarations. + + * ace/Guard_T.h: + + Fixed versioned namespace related errors in single-threaded + builds with that feature enabled. + + * ace/WFMO_Reactor.h: + + Forward declare the ACE_WFMO_Reactor_Test class outside of the + versioned namespace. This test class is actually declared in + the global namespace of a standalone test. + +Fri Feb 3 07:53:16 2006 Douglas C. Schmidt + + * ace/OS_NS_sys_socket.inl (setsockopt): Make sure to + map WSAEOPNOTSUPP to the ENOTSUP errno value so the code is + portable across versions of sockets! Thanks to David Hauck + for this fix. + + * ace/OS_NS_sys_socket.inl (setsockopt): Only check for + WSAEOPNOTSUPP on platforms that actually support this macro! + Thanks to Wallace Zhang for reporting this. + +Thu Feb 2 23:59:37 UTC 2006 William Otte + + * html/index.html + + Removed the XML_helpers link, as that documentation is no + longer generated. + +Thu Feb 2 23:41:39 UTC 2006 William Otte + + * bin/MakeProjectCreator/config/acedefaults.mpb + + Added zlib to the feature inherits to resolve linking errors + on Windows. + +Thu Feb 2 13:35:18 Pacific Standard Time 2006 Ossama Othman + + * ace/OS_NS_Thread.h: + + Fixed versioned namespace related errors in single-threaded + builds with that feature enabled. + +Thu Feb 2 17:49:42 UTC 2006 J.T. Conklin + + * ace/OS_NS_string.h: + + Add ACE_Export decoration to ACE_OS::fast_memcpy() declaration. + +Thu Feb 2 15:47:35 UTC 2006 Chad Elliott + + * examples/Map_Manager/Map_Manager.mpc: + + Added an mpc file to create the right kind of project. The + symptoms of bad or missing mpc files are stray library symbolic + links. + +Thu Feb 2 14:48:03 UTC 2006 J.T. Conklin + + * Makefile.am: + + Build examples and tests subdirectories after building + protocols. I think all of the HTBP, RMCast and TMCast examples + and tests should be moved underneath protocols eventually , but + it's too close to the release to do it safely. + +Thu Feb 2 11:19:12 UTC 2006 Johnny Willemsen + + * tests/Naming_Test.cpp: + Moved some real test code out of ACE_ASSERT calls + +Thu Feb 2 06:15:12 UTC 2006 Johnny Willemsen + + * tests/run_test.lst: + Fixed another error in this file + +Wed Feb 1 20:33:12 UTC 2006 Johnny Willemsen + + * ace/Event_Handler.h: + Doxygen improvement + +Wed Feb 1 20:16:12 UTC 2006 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added CosConcurrency_IDL + +Wed Feb 1 18:00:06 UTC 2006 William Otte + + * ace/ace_for_tao.mpc + + Added Dirent_Selector.cpp to fix the Dirent test. + +Wed Feb 1 08:17:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_shm.inl: + Reverted another part of my changes + +Wed Feb 1 07:52:12 UTC 2006 Johnny Willemsen + + * tests/run_test.lst: + Fixed !ACE_FOR_TAO additions + +Tue Jan 31 22:08:57 UTC 2006 Steve Huston + + * ace/Barrier.{h cpp}: Added a new shutdown () method which aborts all + waiting on the barrier. Thanks to John Lilley for contributing this method. + Also note that the wait() method can now return -1 with errno + ESHUTDOWN if the barrier is shut down while waiting for it. + + * tests/Barrier_Test.cpp: Added a test for barrier shutdown. + + * THANKS: Added John Lilley to the Hall of Fame. + +Tue Jan 31 21:34:34 UTC 2006 William Otte + + * bin/ciao_tests.lst + + Added the hello test *without* naming service so we get results + even on platforms with a broken/nonextant Naming Service. + +Tue Jan 31 16:51:27 UTC 2006 William Otte + + * bin/ciao_tests.lst + * bin/tao_other_tests.lst + * tests/run_test.lst + + Added a bunch of !ACE_FOR_TAO qualifiers to tests that are not + built/runnable when the ACE_FOR_TAO feature is used. + + * tests/run_test.lst + + Removed the avoid of ace_for_tao from the Dirent test, as Dirent.cpp + is now built as part of ace_for_tao. + +Tue Jan 31 09:44:10 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_shm.{h,inl}: + Reverted my change below, removed the const, it causes problems with + solaris, have to add a special case for solaris, but will do that + after x.4.9 is out + + Fri Jan 27 12:36:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_shm.{h,inl}: + Changed for the shmdt and shmat methods the void* argument to + const void*, this is the way posix defines these methods. + +Mon Jan 30 17:53:10 UTC 2006 William Otte + + * bin/ciao_tests.lst + + Added a !NOXERCES qualifier so it is possible to run only tests + that do not require xerces. + +Sat Jan 28 18:40:30 2006 Douglas C. Schmidt + + * ace/Array_Base.h (class ACE_Array_Base): Changed private to + protected to enable access to certain members in derived + classes. Thanks to luxi78@gmail.com for suggesting this. + +Fri Jan 27 23:29:44 UTC 2006 James H. Hill + + * docs/ace_guidelines.vsmacros: + + Re-added the Visual Studio macros as a binary file. + +Fri Jan 27 23:21:49 UTC 2006 James H. Hill + + + * docs/ace_guidelines.vsmacros: + + Removed this file since it's a binary file. + +Fri Jan 27 18:47:34 UTC 2006 William Otte + + * ace/ace_for_tao.mpc + + Added Dirent.cpp to resolve linking errors in TAO_IDL on Windows. + +Fri Jan 27 14:53:03 UTC 2006 Chad Elliott + + * bin/PerlACE/Run_Test.pm: + + Added a method to get a random port number within the range of + 10002 - 32767. + +Fri Jan 27 14:10:12 UTC 2006 Johnny Willemsen + + * tests/Reactor_Performance_Test.cpp: + Initialise some pointers with 0 + +Fri Jan 27 13:56:12 UTC 2006 Johnny Willemsen + + * ace/DLL_Manager.h: + Doxygen improvements + +Fri Jan 27 13:43:50 UTC 2006 J.T. Conklin + + * bin/msvc_static_order.lst: + + More tweaks for split of CosConcurrency library --- build tests + after building the library. + +Fri Jan 27 13:42:03 UTC 2006 J.T. Conklin + + * configure.ac: + + Fix typo in last change. + +Fri Jan 27 12:36:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_shm.{h,inl}: + Changed for the shmdt and shmat methods the void* argument to + const void*, this is the way posix defines these methods. + +Fri Jan 27 11:31:12 UTC 2006 Johnny Willemsen + + * ace/Select_Reactor_T.cpp: + Forgot this file to commit, only include the .inl file when + inlining is disabled + +Fri Jan 27 11:06:12 UTC 2006 Johnny Willemsen + + * ace/Connector.h: + Improved doxygen + +Fri Jan 27 10:43:12 UTC 2006 Johnny Willemsen + + * ace/Swap.h: + Added a deprecated tag to this file, std::swap can be used without + problems on all platforms, we do it in TAO without problems + +Fri Jan 27 10:36:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_wait.h: + Improved doxygen + +Fri Jan 27 10:11:12 UTC 2006 Johnny Willemsen + + * tests/Thread_Manager_Test.cpp: + Updated this test for VxWorks with pthread support + +Fri Jan 27 09:45:12 UTC 2006 Johnny Willemsen + + * html/Stats/performance.shtml: + Changed picture to 800*600 + + * bin/performance_stats.sh: + Copy the contents of html/Stats to the destination directory, this + way any change in this directory is automatically published on + the webserver. The old contents of the webserver has been checked + to make sure we don't loose any data. + +Fri Jan 27 09:14:12 UTC 2006 Johnny Willemsen + + * ace/Select_Reactor_Base.h: + * ace/Select_Reactor.h: + * ace/config-sunos5.5.h: + * ace/config-osf1-4.0.h: + Doxygen improvements + + * ace/Select_Reactor_T.{h,inl}: + Doxygen improvements and enabled inlining in the inline file again, + this was disabled and I could find that someone disable this 7 years + ago because of a bug in the Sun compiler at that moment. The current + supported versions don't have a problem with this, so enabled + inlining again in this core part of ACE. + +Fri Jan 27 03:09:01 UTC 2006 J.T. Conklin + + * configure.ac: + + If examples and/or tests have been disabled, don't bother + generating subdirectory hierarchies or Makefiles for them. + +Fri Jan 27 02:43:53 UTC 2006 J.T. Conklin + + * Makefile.am: + * m4/ace.m4: + + Remove support for --{enable,disable}-ace-perftests. The + performance tests are now enabled/disabled with the plain + --{enable,disable}-ace-tests option. We decided this as + flags for each type of example and test gets a unwieldly + once we factor in TAO (and sometime in the future CIAO). + +Thu Jan 26 18:53:10 2006 Douglas C. Schmidt + + * Makefile.am (SUBDIRS): + * m4/ace.m4: Added support to enable/disable building the ACE tests, + performance tests, and examples. Thanks to Thomas E Lackey + for contributing this. + +Thu Jan 26 20:25:39 UTC 2006 Steve Huston + + * examples/APG/Streams/BasicTask.h: + * examples/APG/Streams/EndTask.h: Fixed ACE_Message_Block memory leaks. + +Thu Jan 26 17:59:16 UTC 2006 Gan Deng + + * bin/MakeProjectCreator/config/dance_extension_stub.mpb + + Added a new MPC base project for DAnCE. + +Thu Jan 26 15:38:38 UTC 2006 Steve Huston + + * protocols/ace/RMCast/Template_Instantiations.cpp: Replace the + separate long and long long instantiations with u64 instantiations. + This is what the code says, and avoids issues with 64-bit + explicit instantiations builds. + +Thu Jan 26 15:20:12 UTC 2006 Johnny Willemsen + + * ace/Singleton.h: + Doxygen improvements + +Thu Jan 26 15:05:04 UTC 2006 Steve Huston + + * protocols/ace/RMCast/Template_Instantiations.cpp: Add missing + template instantiations. + +Thu Jan 26 14:02:12 UTC 2006 Johnny Willemsen + + * tests/Message_Block_Test.cpp: + * tests/Process_Manual_Event_Test.cpp: + * tests/Process_Mutex_Test.cpp: + Moved real code out of ACE_ASSERT macro's, this functionality + wasn't executed in release mode builds. Found this because of + warnings in the Intel release build that a variable was used + before it was assigned a value. + +Thu Jan 26 13:21:12 UTC 2006 Johnny Willemsen + + * bin/performance_stats.sh: + Increased size of pictures to 800x600 and also put linux and + gcc version into a file which is used by the other html files + + * bin/generate_performance_chart.sh: + * bin/generate_topinfo_charts.sh: + Generate pictures of 800x600 + +Thu Jan 26 13:16:12 UTC 2006 Johnny Willemsen + + * html/Stats/configuration.shtml: + Get linux and gcc version from the file instead of hardcoding + it in this file + + * html/Stats/simple_footprint.shtml: + Removed the smart proxies lib, it is always 0 size, added PI + and PI_Server + +Thu Jan 26 13:06:12 UTC 2006 Johnny Willemsen + + * bin/generate_compile_stats.sh: + Extended this script to generate a seperate page for the CIAO + footprint stats. Also made the generated png images the size + of 800x600 and get the gcc version from gcc itself instead of + generating it hardcoded + +Thu Jan 26 13:03:12 UTC 2006 Johnny Willemsen + + * bin/generate_footprint_chart.sh: + Generate the png images of size 800x600, little bit bigger, makes + it more easier to read + +Thu Jan 26 11:32:12 UTC 2006 Johnny Willemsen + + * ace/Registry.h: + * ace/Token_Request_Reply.h: + * ace/Semaphore.h: + * ace/Hash_Map_Manager_T.h: + * ace/Sched_Params.h: + Doxygen improvements + +Thu Jan 26 10:47:12 UTC 2006 Johnny Willemsen + + * html/Stats/detailed_footprint.shtml: + Updated header page to also mention that we gather CIAO stats + +Wed Jan 25 20:16:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_Thread.h: + * ace/config-linux-common.h: + * ace/config-macros.h: + * ace/RB_Tree.h: + Doxygen improvements + + * ace/config-freebsd.h: + * ace/config-macosx.h: + * ace/config-netbsd.h: + * ace/config-openbsd.h: + * ace/config-vxworks6.2.h: + Added ACE_HAS_SYSCTL, will be used in some new code that will + be added after x.4.9 + +Wed Jan 25 19:57:12 UTC 2006 Johnny Willemsen + + * ace/config-win32-common.h: + Added ACE_LACKS_SUSECONDS_T and ACE_LACKS_USECONDS_T + + * ace/WIN32_Asynch_IO.h: + * ace/TSS_T.h: + * ace/Timer_Queue_T.h: + * ace/String_Base.h: + * ace/iosfwd.h: + * ace/High_Res_Timer.h: + * ace/Configuration.h: + * ace/Log_Msg.h: + * ace/Message_Queue.h: + * ace/Process.h: + * ace/SOCK_Dgram_Mcast.h: + * ace/Managed_Object.h: + * ace/Map_Manager.h: + * ace/Containers_T.h: + * ace/SString.h: + * ace/IOStream.h: + Doxygen improvements + +Wed Jan 25 19:35:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/modules/BorlandWorkspaceCreator.pm: + Don't use the directory group sorting with borland + +Wed Jan 25 19:22:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_types.h: + If ACE_LACKS_SUSECONDS_T is defined then define suseconds_t as + long. If ACE_LACKS_USECONDS_T is defined then define useconds_t + as unsigned long. + +Wed Jan 25 15:05:27 UTC 2006 J.T. Conklin + + * configure.ac: + + Added feature test for ACE_LACKS_SUSECONDS_T and + ACE_LACKS_USECONDS_T. + +Wed Jan 25 15:00:05 UTC 2006 J.T. Conklin + + * configure.ac: + + Added feature tests for ACE_LACKS_SYS_SYSCTL_H and + ACE_HAS_SYSCTL. + +Wed Jan 25 14:38:10 UTC 2006 Olli Savia + + * ace/SSL/SSL_Asynch_BIO.h: + * include/makeinclude/platform_lynxos.GNU: + Fixed compile error on LynxOS when ssl=1. + +Wed Jan 25 13:06:12 UTC 2006 Johnny Willemsen + + * ace/Array.h: + * ace/Asynch_IO.h: + * ace/Asynch_IO_Impl.h: + * ace/Atomic_Op_T.h: + * ace/Basic_Types.h: + * ace/Caching_Utility_T.h: + * ace/CDR_Size.h: + * ace/CDR_Stream.h: + * ace/Cleanup_Strategies_T.h: + Improved documentation by using @note doxygen tag + +Wed Jan 25 12:48:12 UTC 2006 Johnny Willemsen + + * ace/TP_Reactor.{h,cpp}: + Improved doxygen + +Wed Jan 25 12:34:12 UTC 2006 Johnny Willemsen + + * ace/Select_Reactor_Base.h: + Improved doxygen + +Wed Jan 25 12:13:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/vcl.mpb: + Add compile_flags that are needed to build vcl apps + + * bin/MakeProjectCreator/templates/bor.mpd: + If compile_flags is set, then add them to the CFLAGS + +Wed Jan 25 11:36:12 UTC 2006 Johnny Willemsen + + * html/Stats/footprint.shtml: + Added link for CIAO footprint we are going to gather + +Wed Jan 25 10:43:12 UTC 2006 Johnny Willemsen + + * ace/config-win32-common.h: + Added ACE_LACKS_SYS_SYSCTL_H + +Wed Jan 25 10:38:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_sysctl.h: + New os_include system header include file, will be used after x.4.9 + is out because using it now can break to much builds + +Tue Jan 24 18:07:12 UTC 2006 Johnny Willemsen + + * ace/config-vxworks6.2.h: + Readded ACE_LACKS_MKTEMP again, the function is declared but can't + be resolved during linking, reported this to WindRiver + +Tue Jan 24 16:56:51 UTC 2006 Steve Huston + + * ace/OS_NS_signal.inl: Removed explicit ACE_OS from sigaction + function - left over from trying to work around HP issues yesterday. + +Tue Jan 24 16:28:11 UTC 2006 J.T. Conklin + + * configure.ac: + + Added feature tests for ACE_LACKS_KILL and ACE_LACKS_SIGACTION. + +Tue Jan 24 16:08:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_dlfcn.inl: + The symFindByName is only working with VxWorks in kernel mode + +Tue Jan 24 14:44:35 UTC 2006 Steve Huston + + * ace/Activation_Queue.h: Corrected @retval for enqueue(). Returns + >0 (number of requests now queued) on success, not 0. Thanks to + Guy Peleg for this correction. + +Tue Jan 24 14:00:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_stdlib.cpp: + Only with VxWorks 5.5.1 don't use limits, newer versions to have this + +Tue Jan 24 13:43:12 UTC 2006 Johnny Willemsen + + * ace/config-vxworks6.2.h: + Removed ACE_LACKS_MKTEMP, VxWorks 6.2 delivers this function + +Tue Jan 24 13:39:12 UTC 2006 Johnny Willemsen + + * ace/config-vxworks6.2.h: + Removed ACE_LACKS_MMAP and ACE_LACKS_MPROTECT, VxWorks 6.2 delivers + these functions + +Tue Jan 24 13:08:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_resource.inl: + Use the ACE_UNUSED_ARG macro for arguments that are not used + +Tue Jan 24 12:54:35 UTC 2006 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Choosed a non-group sorting method if the MPC_GNUACE_NAMED_TARGETS + environment variable is set. + +Tue Jan 24 12:32:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_netdb.{h,cpp,inl}: + * ace/config-vxworks5.x.h: + Simplified the vxworks specific code, VxWorks 6.2 does deliver several + of the API's we don't had with VxWorks 5.5.1. + + * ace/config-psos-diab-mips.h: + * ace/config-psos-diab-ppc.h: + * ace/config-psos-diab.h: + * ace/config-psos-tm.h: + * ace/config-psosim-g++.h: + Added ACE_LACKS_GETHOSTBYNAME + +Tue Jan 24 12:12:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_netdb.h: + * ace/OS_NS_netdb.inl: + Use ACE_VXWORKS instead of VXWORKS and introduced + ACE_LACKS_GETHOSTBYADDR, ACE_LACKS_GETPROTOBYNUMBER and + ACE_LACKS_GETPROTOBYNAME to make maintenance easier + + * ace/config-chorus.h: + * ace/config-psos-diab-mips.h: + * ace/config-psos-diab-ppc.h: + * ace/config-psos-diab.h: + * ace/config-psos-tm.h: + * ace/config-psosim-g++.h: + * ace/config-vxworks5.x.h: + * ace/config-vxworks6.2.h: + * ace/config-WinCE.h: + Added the new defines to the correct files + +Tue Jan 24 11:48:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_arpa_inet.cpp (inet_aton): + Use ACE_VXWORKS instead of VXWORKS and made it dependent on the + VxWorks version number + +Tue Jan 24 10:33:12 UTC 2006 Johnny Willemsen + + * OS_NS_signal.inl: + Introduced ACE_LACKS_SIGACTION and ACE_LACKS_KILL to make things + easier to maintain + + * ace/config-chorus.h: + * ace/config-psos-diab-mips.h: + * ace/config-psos-diab-ppc.h: + * ace/config-psos-diab.h: + * ace/config-psos-tm.h: + * ace/config-psosim-g++.h: + * ace/config-win32-common.h: + * ace/config-WinCE.h: + Added ACE_LACKS_SIGACTION, ACE_LACKS_KILL + +Mon Jan 23 22:08:56 UTC 2006 Steve Huston + + * ace/OS_NS_signal.{h inl}: + * ace/OS_TLI.h: The method-name-same-as-struct-name hack for HP aC++ + needs to go up through version 03.65. This compiler version is used + on HP-UX 11iv2 on PA-RISC, so the hack can't be expunged when + removing HP-UX 11.00 support. The hack does not appear to be needed + for aC++ on HP-UX on Integrity (aC++ v06.xx). Also see + Mon Jan 23 16:35:40 UTC 2006 Steve Huston + +Mon Jan 23 20:19:25 UTC 2006 William Otte + + * bin/ciao_tests.lst + + Removed the "Exceptions" qualifier from the CIAO tests, as we + no longer support emulated exceptions, and we want these + tests to run everywhere. + +Mon Jan 23 18:07:00 UTC 2006 Steve Huston + + * apps/Gateway/Gateway/Event_Channel.cpp: Put the ACE_INET_Addr + setup on separate lines to help aC++ optimizer get it right. + +Mon Jan 23 16:35:40 UTC 2006 Steve Huston + + * ace/OS_TLI.{h inl}: HP aC++ 03.56 (last aC++ for HP-UX 11.00) gets + confused with struct t_optmgmt being defined as extern "C" by the OS + and referenced in namespace ACE_OS by ACE. To help this compiler + deal, typedef ACE_TOPTMGMT appropriately, with extern "C" for + aC++ less than 03.60 and normally for all other compilers. This + should take care of the odd t_optmgmt errors. + + When we remove support for HP-UX 11.00, this hack should be removed + as well. + + * apps/JAWS3/jaws3/Reactive_IO.cpp: Replace #include "ace/OS.h" with + #include "ace/OS_NS_unistd.h". Leaving OS.h gets HP aCC into a state + where it gets confused about methods and types with the same name, + in this case t_optmgmt. + +Mon Jan 23 15:51:12 UTC 2006 Johnny Willemsen + + * ace/ATM_Acceptor.h: + * ace/OS_NS_stdio.h: + Doxygen improvements + +Mon Jan 23 15:43:56 UTC 2006 J.T. Conklin + + * bin/msvc_static_order.lst: + + Update for split of CosConcurrency, CosProperty, and + RTEventLogAdmin libraries. + +Mon Jan 23 08:02:08 2006 Douglas C. Schmidt + + * ace/Pipe.cpp: Added static_cast (0) rather than + (u_short) 0 to the ACE_INET_Addr local_any in ACE_Pipe::open(). + +Sat Jan 21 08:19:34 UTC 2006 James H. Hill + + * docs/ACE-guidelines.html: + * docs/ace_guidelines.vsmacros: + + Added Visual Studio .NET macros project that helps with formatting + according to ACE guidelines. Also noted the macros project in the + documentation file. + +Fri Jan 20 22:51:09 UTC 2006 Stoyan Paunov + + * apps/JAWS/server/IO.h: + * apps/JAWS/server/IO.cpp: + + Fixed unused paramerer warnings. + + * apps/JAWS2/JAWS/IO.h: + * apps/JAWS2/JAWS/IO.cpp: + + tried to fix the 'cast to pointer from interger of different size' + warning. It had to do with the fact that x86_64 void* are 8 bytes and + the cast was from an int which 4 bytes. When James Hu wrote that + code there were no 64 bit archs so the error is showing up now. + +Fri Jan 20 15:05:12 UTC 2006 Johnny Willemsen + + * ace/WIN32_Proactor.h: + No need to export ACE_WIN32_Asynch_Timer + +Fri Jan 20 14:55:12 UTC 2006 Johnny Willemsen + + * etc/*.doxygen: + Updated EXPAND_AS_DEFINED so that we generate documentation with + exceptions in the interfaces + +Fri Jan 20 13:56:12 UTC 2006 Johnny Willemsen + + * ace/config-macros.h: + Replace VXWORKS with ACE_VXWORKS and guarded the following + macros with ACE_LACKS_DEPRECATED_MACROS so that usage of these + deprecated macros within ACE/TAO is prevented: ACE_USING, + ACE_SYNCH_1, and ACE_SYNCH_2 + +Fri Jan 20 11:29:54 UTC 2006 Boris Kolpackov + + * protocols/ace/RMCast/Protocol.h: + + Fixed a race condition. + + * protocols/ace/TMCast/FaultDetector.hpp: + + Added a flag to prevent a single group member from terminating + until data is received from other members. + +Fri Jan 20 11:24:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added new PI AdvSlot test + +Wed Jan 18 19:40:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added new PI Slot test + +Wed Jan 18 19:15:12 UTC 2006 Johnny Willemsen + + * ace/WFMO_Reactor.cpp: + Replace c-style cast with reinterpret_cast + + * ACE-INSTALL.html: + Small cygwin update + + * ace/Mem_Map.h: + Doxygen improvements + + * ace/Mem_Map.cpp: + ACE_OS::filesize returns off_t + +Wed Jan 18 18:22:13 UTC 2006 J.T. Conklin + + * apps/Gateway/Gateway/Event_Channel.cpp: + + Updated because constructors of ACE_INET_Addr are now explicit. + +Wed Jan 18 06:55:12 UTC 2006 Johnny Willemsen + + * ace/config-cygwin32.h: + Added ACE_HAS_4_4BSD_SENDMSG_RECVMSG + +Tue Jan 17 20:37:05 UTC 2006 J.T. Conklin + + * bin/MakeProjectCreator/config/rteventlogadmin.mpb: + * bin/MakeProjectCreator/config/rteventlogadmin_serv.mpb: + * bin/MakeProjectCreator/config/rteventlogadmin_skel.mpb: + + Split RTEventLogAdmin Service into three libraries: + RTEventLogAdmin, RTEventLogAdmin_Skel, and RTEventLogAdmin_Serv + for client stubs, servant skeletons, and service implementation + respectively. + +Tue Jan 17 20:28:12 UTC 2006 Johnny Willemsen + + * ace/Module.h: + Doxygen improvement + +Tue Jan 17 19:56:12 UTC 2006 Johnny Willemsen + + * ace/config-cygwin32.h: + Added ACE_HAS_P_READ_WRITE and removed ACE_LACKS_READDIR_R, this + is for Cywin 1.5.19 + +Tue Jan 17 18:50:12 UTC 2006 Johnny Willemsen + + * ace/INET_Addr.{h,cpp}: + Improved doxygen, changed VXWORKS to ACE_VXWORKS and make one + of the constructors that has two arguments, one has to be passed + the other has a default value explicit + +Tue Jan 17 17:38:46 UTC 2006 Steve Huston + + * examples/C++NPv2/display_logfile.cpp: In the Logrec_Module + constructor, don't use base-class initialization to pass &task_ + to ACE_Module. Doing so passes &task_ before task_ has been + constructed. Thus, when ACE_Module sets the task's module + pointer, it gets overwritten when task_ is constructed after + return from ACE_Module's constructor. Calling task_'s module() + method in this case will yield a 0 pointer, which is not correct. + To remedy this, call ACE_Module::open() directly from within + the Logrec_Module constructor. + Also see Stroustrup pg 307. + Thanks to David Hawkins for pointing this out. + +Tue Jan 17 16:27:47 UTC 2006 Olli Savia + + * ace/OS_NS_dlfcn.inl: + Fixed compile error on LynxOS 3.x. + +Tue Jan 17 15:37:29 UTC 2006 Chad Elliott + + * bin/MakeProjectCreator/config/taodefaults.mpb: + + If the corba_messaging feature is disabled, then add the + TAO_HAS_CORBA_MESSAGING=0 macro to ensure that TAO is built + properly. + +Tue Jan 17 14:03:14 UTC 2006 Steve Huston + + * ace/Module.h: Change ~ACE_Module to be virtual so that derived + classes can be cleaned up properly. Thanks to David Hawkins + for this fix. + + * THANKS: Added David Hawkins to the Hall of Fame. + +Tue Jan 17 01:12:35 2006 Douglas C. Schmidt + + * ace/Pipe.cpp (open): Added a cast to u_short for the first + parameter to ACE_INET_Addr to avoid complaints on certain + compilers. Thanks to Wallace Zhang for reporting this. + +Mon Jan 16 06:59:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_dlfcn.inl: + Fixed compile errors with VxWorks 5.5 + +Mon Jan 16 15:17:22 2006 Douglas C. Schmidt + + * ace/Pipe.cpp (open): Changed + + ACE_INET_Addr local_any ("localhost:0"); + + to + + ACE_INET_Addr local_any (0, ACE_LOCALHOST); + + so that it will work more portably. Thanks to Steve Huston for + suggesting this fix. + +Mon Jan 16 20:43:26 UTC 2006 Olli Savia + + * ace/README: + Removed ACE_HAS_PREDEFINED_THREAD_CANCELLED_MACRO, it is + no longer used. + + * ace/config-lynxos.h: + Minor updates for LynxOS 4.0. + + * tests/run_test.lst: + Run a few more tests on LynxOS. + +Mon Jan 16 20:08:12 UTC 2006 Johnny Willemsen + + * ace/Log_Record.h: + Doxygen improvement + +Mon Jan 16 19:52:12 UTC 2006 Johnny Willemsen + + * ace/os_include/os_errno.h: + Replaced VXWORKS with ACE_VXWORKS + +Mon Jan 16 19:44:12 UTC 2006 Johnny Willemsen + + * ace/SOCK_IO.cpp: + When using FIONREAD the 3rd argument should be of type int. This + fixes bugzilla bug 2360. Thanks to Michael Klein + for reporting this. + + * ace/SV_Semaphore_Complex.h: + Instead of ACE_USING just use "using" + + * ace/Sched_Params.cpp: + * ace/ACE.cpp: + * ace/INET_Addr.cpp: + * ace/OS_NS_netdb.cpp: + Replaced VXWORKS with ACE_VXWORKS + + * ace/Read_Buffer.h: + * ace/Reactor.h: + Doxygen improvement + + * ace/Flag_Manip.inl: + Removed remark about VxWorks, not valid anymore with + newer versions + + * ace/OS_NS_dlfcn.inl: + Removed ACE_HAS_CHARPTR_DL, is not defined in any config file + + * ace/config-all.h: + Removed old vxworks specific part + +Mon Jan 16 17:23:42 UTC 2006 Olli Savia + + * ace/config-lynxos.h: + Added ACE_HAS_POSIX_REALTIME_SIGNALS. + +Mon Jan 16 17:20:50 UTC 2006 Olli Savia + + * ace/config-lynxos.h: + Do not use mmap() emulation on LynxOS 4.0. + +Mon Jan 16 17:00:26 UTC 2006 Stoyan Paunov + + * apps/JAWS/server/HTTP_Handler.h: + * apps/JAWS/server/HTTP_Handler.cpp: + * apps/JAWS/server/HTTP_Server.h: + * apps/JAWS/server/HTTP_Server.cpp: + * apps/JAWS/server/IO.h: + * apps/JAWS/server/IO.cpp: + * apps/JAWS/server/README: + * apps/JAWS/server/svc.conf: + + Checking the some changes to JAWS. This is the code that adds the ability + to start the server without file caching. This functionality is necessary + for the proper coordination of file creations and deletions between JAWS + and the RepositoryManager in CIAO. The changes are explained in the README. + I have added a line in the svc.conf file which shows how to enable this new + functionality. + +Mon Jan 16 16:53:38 UTC 2006 Olli Savia + + * ace/config-lynxos.h: + Removed ACE_HAS_PREDEFINED_THREAD_CANCELLED_MACRO, it is + no longer used. + +Mon Jan 16 14:35:10 UTC 2006 Olli Savia + + * ace/config-lynxos.h: + * include/makeinclude/platform_lynxos.GNU: + Improved shared library support for LynxOS 4.0. + +Mon Jan 16 05:54:44 2006 Douglas C. Schmidt + + * ace/Timer_Queue_Adapters.cpp (svc): Added a fix so that + this code will work for both regular timers and high-resolution + timers. Thanks to Eric Tiangang and Robert + Iakobashvili for this fix. This + fixes bugid 2348. + + * include/makeinclude/platform_linux.GNU (LD): + Pass -O3 to GNU-linker to reduce footprint due to ld + optimizations. Thanks to Robert Iakobashvili for this enhancement. + +Sun Jan 15 19:20:12 UTC 2006 Johnny Willemsen + + * ace/SOCK_IO.{cpp,inl}: + Removed several casts which where not needed and only cause + problems with 64bit builds + +Sun Jan 15 18:57:12 UTC 2006 Johnny Willemsen + + * ace/Service_Config.h: + Fixed ACE_DYNAMIC_SERVICE_DIRECTIVE macro when unicode is + enabled. Thanks to Jan Ohlenburg . + +Sun Jan 15 06:06:38 UTC 2006 J.T. Conklin + + * bin/MakeProjectCreator/config/avstreams.mpb: + + Update to inherit from property_serv. as this project uses a + collocated property service --- property.mpb now only brings + in the client stubs. + + * bin/MakeProjectCreator/config/concurrency.mpb: + * bin/MakeProjectCreator/config/concurrency_serv.mpb: + * bin/MakeProjectCreator/config/concurrency_skel.mpb: + + Split CosConcurrency Service into three libraries: + CosConcurrency, CosConcurrency_Skel, and CosConcurrency_Serv for + client stubs, servant skeletons, and service implementation + respectively. + + * bin/MakeProjectCreator/config/property.mpb: + * bin/MakeProjectCreator/config/property_serv.mpb: + * bin/MakeProjectCreator/config/property_skel.mpb: + + Split CosProperty Service into three libraries: + CosProperty, CosProperty_Skel, and CosProperty_Serv for client + stubs, servant skeletons, and service implementation + respectively. + +Sat Jan 14 12:59:39 2006 Douglas C. Schmidt + + * ace/Pipe.cpp (open): Added a workaround so that "localhost:0" + is used rather than sap_any to avoid triggering firewall rules + on Windows. Thanks to Paul Felix for this fix. + + * ace/ACE.h (ACE): Updated the documentation for ACE::fork() to + indicate that -1 or 1 are returned if avoid_zombies != 0. This + is a bug that needs to be fixed at some point. Thanks to Tobias + Herzke for reporting this. + +Fri Jan 13 19:06:33 UTC 2006 J.T. Conklin + + * configure.ac: + + Reorder some function feature tests so they're closer to + alphabetical order. This makes it easier to maintain. + +Fri Jan 13 17:56:53 UTC 2006 J.T. Conklin + + * configure.ac: + + Added ACE_LACKS_SYSTEM feature test. + +Fri Jan 13 09:38:21 2006 Douglas C. Schmidt + + * docs/ACE-bug-process.html (HREF): Updated this document to + explain the process for submitting a patch. Thanks to Rick + Taylor for motivating this. + +Fri Jan 13 12:22:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_Thread.cpp (~TSS_Cleanup_Instance): + Set the members to zero after a delete because it are static + ones. + +Fri Jan 13 11:47:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_stdlib.inl: + Changed ACE_OS::system to use ACE_LACKS_SYSTEM + + * ace/config-chorus.h: + * ace/config-psos-diab-mips.h: + * ace/config-psos-diab-ppc.h: + * ace/config-psos-diab.h: + * ace/config-psos-tm.h: + * ace/config-psosim-g++.h: + * ace/config-WinCE.h: + Added ACE_LACKS_SYSTEM + +Fri Jan 13 08:34:18 UTC 2006 J.T. Conklin + + * test/test_config.h: + + Changed so the very first thing we do is #undef ACE_NDEBUG. + + * test/OS_Test.cpp: + + Changed to make "test_config.h" the first header to be + #included, as it #undef's ACE_NDEBUG. This ensures ACE_ASSERT() + will be defined so it validates its expression even for debug=0 + builds. Without this, all the checks in this file are compiled + out. Fortunately unreferenced symbol warnings made us aware of + this problem. + +Fri Jan 13 07:53:12 UTC 2006 Johnny Willemsen + + * ace/config-lynxos.h: + Added ACE_LACKS_SETEGID + +Fri Jan 13 04:49:41 UTC 2006 J.T. Conklin + + * configure.ac: + + Changed to use AC_SEARCH_LIBS for the -lsocket and -lnsl + libraries before calling ACE_CONFIGURATION_OPTIONS. Third party + libraries may those libraries, and if they haven't been added to + $LIBS, the feature tests will fail. + +Thu Jan 12 20:30:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_time.inl: + * ace/README: + Added ACE_HAS_CLOCK_GETTIME_MONOTONIC, this is the patch from + bugzilla bug 2358. Not closing that one yet, have to see how + to autoconf this and where this new macro should be set. Thanks + to Robert Iakobashvili for these + patches + +Thu Jan 12 19:50:12 UTC 2006 Johnny Willemsen + + * ace/Assert.h: + Export the __ace_assert function to resolve link errors on + Windows + +Thu Jan 12 16:44:40 UTC 2006 Steve Huston + + * ace/Functor.{h inl}: Using ACE_LACKS_LONGLONG_T wasn't good enough + for deciding when to do an ACE_Hash<[unsigned] long long>. MSVC6 + can't hack it. So, do the specialization for the 64-bit types if + ACE_SIZEOF_LONG < 8, avoiding a duplication of ACE_Hash. + Also, since the way "unsigned long long" is declared varies across + compilers, use ACE_[U]INT64 rather than the native C++ type. + + * ace/INET_Addr.cpp (string_to_addr): u_short always compares >= 0, + so rely on the indicated end of successful scan from ACE_OS::strtol() + to say whether it scanned all digits or stopped short of the end of + the string. + +Thu Jan 12 12:59:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.2.GNU: + For rtp mode, set PIC correctly + +Thu Jan 12 12:01:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.2.GNU: + When building for rtp also set DLD + +Thu Jan 12 11:51:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.2.GNU: + For rtp model we don't need to make sure the shared object + directory is the same as static + +Thu Jan 12 11:45:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_unistd.inl: + Fixed some comments after endif + + * ace/config-lynxos.h: + Added ACE_LACKS_SETUID and ACE_LACKS_SETEUID + +Thu Jan 12 10:34:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.2.GNU: + Improved building executables for rtp + +Thu Jan 12 10:10:12 UTC 2006 Johnny Willemsen + + Removed all support for VxWorks 6.1, this version wa just an + intermediate step from 5.5 to 6.2. The port never completed and + we are aimin at 6.2 at this moment, so to not give false + impressions removed all the support for 6.1. + + * include/makeinclude/platform_vxworks6.1.GNU: + * ace/config-vxworks6.1.h: + Removed these files + + * ace/Sock_Connect.cpp: + * ace/OS_NS_unistd.inl: + * ace/os_include/os_time.h: + * ace/os_include/os_stdio.h: + * ace/os_include/sys/os_wait.h: + Removed references to VxWorks 6.1 + +Thu Jan 12 09:51:12 UTC 2006 Johnny Willemsen + + * ace/config-vxworks5.x.h: + Added ACE_LACKS_GETPGID + +Thu Jan 12 01:08:32 UTC 2006 J.T. Conklin + + * ace/ACE.pc.in: + + Added @LIBS@ to Libs. + + * ace/SSL/ACE_SSL.pc.in: + + Added @ACE_TLS_LDFLAGS@ and @ACE_TLS_LIBS@ to Libs. + + Added @ACE_TLS_CPPFLAGS@ to Cflags. + +Wed Jan 11 22:17:39 UTC 2006 Steve Huston + + * protocols/ace/RMCast/Template_Instantiations.cpp: Added missing + explicit instantiations. + +Wed Jan 11 21:19:21 UTC 2006 Steve Huston + + * ace/Functor.{h inl}: Remove the ACE_* type specializations and + add specializations for ACE_Hash for [unsigned] short, + [unsigned] int, [unsigned] long, [unsigned] long long. This + should resolve the compile errors on some platforms resulting + from the changes in: + Tue Jan 10 23:04:06 UTC 2006 Steve Huston + and still allow everything to work regardless of what integral types + are used. + +Wed Jan 11 11:43:42 2006 Ossama Othman + + From Richard Ward + * ace/Auto_Ptr.h (ACE_AUTO_PTR_RESET): + + Assign "NEWPTR" macro argument to a temporary "TYPE" pointer, + and use that pointer in place of "NEWPTR" to force "NEWPTR" to + be expanded only once. Prevents a memory leak from occuring + when "NEWPTR" is an expression such as "new foo". + + Delete the object released from the auto_ptr<>. Previously it + was ignored, resulting in a memory leak. Fixes a memory leak. + + * THANKS: + + Added Richard to the Hall of Fame. + +Wed Jan 11 18:58:15 UTC 2006 J.T. Conklin + + * ace/Assert.cpp: + * ace/Assert.h: + + Added const qualifier to __ace_assert() "expression" parameter. + +Wed Jan 11 17:36:44 UTC 2006 J.T. Conklin + + * ace/Assert.h: + + Use ACE_VERSIONED_NAMESPACE_NAME prefix for __ace_assert() + invocation. + +Wed Jan 11 14:24:20 UTC 2006 J.T. Conklin + + * Makefile.am: + + Updated. + + * ace/ace.mpc: + * ace/ace_for_tao.mpc: + + Added Assert.cpp to Source_Files section. + + * ace/Global_Macros.h: + + Changed to #include "ace/Assert.h", as the ACE_FACTORY_DEFINE + macro uses ACE_ASSERT. + + * ace/Log_Msg.h: + + Changed to #include "ace/Assert.h" for backwards compatibilty + with earlier ACE releases. + + * ace/Assert.cpp: + * ace/Assert.h: + + Factor ACE_ASSERT() macro out of Log_Msg.h into new files + Assert.h, with a helper-function in Assert.cpp. This reduces + the footprint of an ACE_ASSERT() invocation to a single call. + +Wed Jan 11 13:14:52 UTC 2006 Chad Elliott + + * include/makeinclude/rules.local.GNU: + + Corrected a problem in determining if depgen.pl is the dependency + generator. The logic can now handle the instance where the script + is preceded by /usr/bin/perl (or something similar). + +Wed Jan 11 06:47:04 2006 Douglas C. Schmidt + + * ace/OS_NS_Thread.cpp (~TSS_Cleanup_Instance): Delete the mutex and condition + variable to prevent memory leaks. Thanks to Domingos Monteiro + for this fix. + +Tue Jan 10 23:04:06 UTC 2006 Steve Huston + + * ace/Functor.{h inl}: Added specialization for ACE_Hash + to help the explicit instantiation build get along. + +Tue Jan 10 22:30:21 UTC 2006 Steve Huston + + * ace/INET_Addr.cpp (string_to_addr): Correctly identify a specified + port number of "0". Thanks to Guy Peleg for this fix. + + * THANKS: Added Guy Peleg to the Hall of Fame. + +Tue Jan 10 20:05:54 UTC 2006 Chad Elliott + + * include/makeinclude/rules.local.GNU: + + Ensure that the correct object files get cleaned up when doing a + make clean. Logic was duplicated in this file (but did not + correspond to the correct logic found in the gnu.mpd or + rules.lib.GNU). + +Tue Jan 10 17:45:10 UTC 2006 Scott Harris + + * bin/tao_other_tests.lst: + + Added TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/run_test.pl. + +Tue Jan 10 17:09:26 UTC 2006 J.T. Conklin + + * configure.ac: + + Add feature tests for ACE_LACKS_CHDIR, ACE_LACKS_DUP2, + ACE_LACKS_GETPID, ACE_LACKS_ISATTY, ACE_LACKS_SETPGID, and + ACE_LACKS_UNLINK. Re-arrange some things so the tests are + closer to alphabetical order -- this makes the file easier + to maintain. + +Tue Jan 10 16:35:35 UTC 2006 Chad Elliott + + * bin/ChangeLogEditor/ChangeLogEdit.pm: + * bin/cle.pl: + + Removed references to the name "CVS". At this layer, the revision + control system is unknown. + +Tue Jan 10 13:36:55 UTC 2006 Chad Elliott + + * ace/Svc_Conf_Lexer.cpp: + + Modified GNU specific code to compile with the -pedantic option. + +Tue Jan 10 13:21:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.2.GNU: + Compilation for rtp mode is now the default + +Tue Jan 10 13:14:12 UTC 2006 Johnny Willemsen + + * ace/config-vxworks6.1.h: + * ace/config-vxworks6.2.h: + Only define ACE_MAIN in kernel mode + +Tue Jan 10 11:36:43 UTC 2006 J.T. Conklin + + * configure.ac: + + Added feature tests for ACE_LACKS_DUP, ACE_LACKS_GETEGID, + ACE_LACKS_GETEUID, ACE_LACKS_GETGID, ACE_LACKS_GETUID, + ACE_LACKS_PIPE, ACE_LACKS_SETEGID, ACE_LACKS_SETEUID, + ACE_LACKS_SETSID, ACE_LACKS_SETGID, and ACE_LACKS_SETUID. + +Tue Jan 10 10:10:12 UTC 2006 Johnny Willemsen + + * ace/config-hpux-10.x.h: + * ace/config-hpux-11.00.h: + Added ACE_LACKS_SETEGUID and ACE_LACKS_SETEUID + +Tue Jan 10 10:02:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_unistd.inl: + Simplified a lot of methods in this file by adding new ACE_LACKS + macros. For VxWorks and psos we now also return -1 with notsup + for the uid methods, these methods just don't work on these + platforms because they are not there and we don't have multiple + users. This will make this file much easier to maintain + + * ace/config-chorus.h: + * ace/config-integritySCA.h: + * ace/config-psos-diab-mips.h: + * ace/config-psos-diab-ppc.h: + * ace/config-psos-diab.h: + * ace/config-psos-tm.h: + * ace/config-psosim-g++.h: + * ace/config-vxworks5.x.h: + * ace/config-vxworks6.1.h: + * ace/config-vxworks6.2.h: + * ace/config-win32-common.h: + Added the new ACE_LACKS macros from OS_NS_unistd.inl + +Tue Jan 10 07:21:19 UTC 2006 J.T. Conklin + + * examples/C++NPv2/Makefile.am: + * examples/C++NPv2/README: + * examples/C++NPv2/Reactor_Logging_Server.cpp: + * examples/C++NPv2/Reactor_Logging_Server_Adapter.h: + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: + * examples/C++NPv2/TP_Logging_Server.h: + * examples/C++NPv2/TP_Reactor_Logging_Server.cpp: + * examples/C++NPv2/WFMO_Reactor_Logging_Server.cpp: + + Update for change below. + + * examples/C++NPv2/Reactor_Logging_Server.h: + * examples/C++NPv2/Reactor_Logging_Server_T.h: + + Renamed Reactor_Logging_Server.h to Reactor_Logging_Server_T.h. + When ACE_TEMPLATES_REQUIRES_SOURCE is not defined (as is so in + the automake build), the Sun Studio 11 C++ compiler associates + Reactor_Logging_Server.h with Reactor_Logging_Server.cpp instead + of Reactor_Logging_Server_T.cpp when instantiating templates. + This results in interesting (and difficult to track down) errors. + +Mon Jan 9 20:20:14 UTC 2006 J.T. Conklin + + * m4/ace.m4: + + Explicitly automake conditional BUILD_ACE_FOR_TAO to false + (at least for now). + + * ace/Makefile.am: + + Small tweaks to fix errors introduced by MPC generation. + +Mon Jan 9 20:19:12 UTC 2006 Johnny Willemsen + + * tests/makeicc.pl: + Removed this file, it is ancient + +Mon Jan 9 19:08:12 UTC 2006 Johnny Willemsen + + * ace/ace_wchar.h: + VxWorks rtp has int_t + + * ace/config-vxworks6.2.h: + Rtp has wchar.h and wctype.h + + * ace/OS_NS_String.{h,inl,cpp}: + Updated the wchar_t methods that has a int_t argument to use wchar_t + instead. That matches the opengroup definition and resolved the + compile errors with VxWorks. Also replaced some c-style and static + casts with const_casts. + + * ace/config-vxworks6.2.h: + VxWorks 6.2 in rtp mode has a lot of wchar_t functionality, use it! + +Mon Jan 9 18:32:55 UTC 2006 J.T. Conklin + + * ace/Makefile.am: + + Regenerated for Service Configurator parser changes: + Mon Jan 9 15:18:49 UTC 2006 Chad Elliott + + * ace/ace.mpc: + + Added Hash_Map_Manager.h to Header_Files section. + +Mon Jan 9 18:03:50 UTC 2006 J.T. Conklin + + * configure.ac: + + Added ACE_LACKS_GETOPT and ACE_LACKS_SYSCONF feature tests. + +Mon Jan 9 15:18:49 UTC 2006 Chad Elliott + + * ace/Encoding_Converter.h: + * ace/Encoding_Converter.cpp: + * ace/Encoding_Converter_Factory.h: + * ace/Encoding_Converter_Factory.cpp: + * ace/Svc_Conf.h: + * ace/Svc_Conf_Lexer.h: + * ace/Svc_Conf_Lexer.cpp: + * ace/UTF16_Encoding_Converter.h: + * ace/UTF16_Encoding_Converter.inl: + * ace/UTF16_Encoding_Converter.cpp: + * ace/UTF32_Encoding_Converter.h: + * ace/UTF32_Encoding_Converter.cpp: + * ace/UTF8_Encoding_Converter.h: + * ace/UTF8_Encoding_Converter.cpp: + * ace/svcconf.mpb: + + Added Unicode support to the Service Configurator by hand-coding + the lexer portion to properly take into account non-US UTF8, + UTF16 and UTF32 encodings. Some of the UFT16 and UTF32 conversion + code came directly from Unicode, Inc. + + This is a drop-in replacement for the flex generated lexer and + heap allocates the encoding converters. However, this version + performs less heap allocations and has a smaller footprint than + the flex generated lexer. + + * tests/Service_Config_Test.UTF-16.conf: + * tests/Service_Config_Test.WCHAR_T.conf: + + Added byte order marks to ensure that they are interpreted + properly on all machines. + + * ace/Svc_Conf.l: + * ace/Svc_Conf_Lexer_Guard.h: + * ace/Svc_Conf_Lexer_Guard.cpp: + * ace/Svc_Conf_l.cpp: + + * etc/Svc_Conf_l.cpp.diff: + + Removed these files. + +Mon Jan 9 14:38:12 UTC UTC 2006 Johnny Willemsen + + * ace/OS_NS_unisth.{h,cpp}: + Integrated patches of bugzilla bug 2357, thanks to Volker Lukas + for delivering this. This adds setuid(uid_t), + setgid(gid_t), getuid() and getgid(). + Also introduced ACE_LACKS_SYSCONF and ACE_LACKS_GETOPT to make + the VxWorks 6.2 port cleaner + + * ace/config-integritySCA.h: + * ace/config-psos-diab-mips.h: + * ace/config-psos-diab-ppc.h: + * ace/config-psos-diab.h: + * ace/config-psos-tm.h: + * ace/config-vxworks5.x.h: + * ace/config-vxworks6.1.h: + * ace/config-vxworks6.2.h: + * ace/config-win32-common.h: + Added ACE_LACKS_SYSCONF and ACE_LACKS_GETOPT to the appropriate + config files + +Mon Jan 9 14:14:12 UTC UTC 2006 Johnny Willemsen + + * ace/OS_main.cpp.{h,cpp}: + The VxWorks specific way of handling main shouldn't be used + when building for the rtp model, then the normal main should + be used + +Mon Jan 9 13:44:12 UTC UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added TAO/tests/Bug_2349_Regression/run_test.pl + +Mon Jan 9 11:27:12 UTC UTC 2006 Johnny Willemsen + + * ace/config-vxworks6.2.h: + * ace/OS_NS_stdlib.inl: + Added ACE_LACKS_PUTENV. VxWorks 6.2 seems to have this method + declared, but when linking in rtp model we get an unresolved + external. So, just disable it for the moment, send a test + case for this to WindRiver + +Mon Jan 9 10:47:12 UTC UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.2.GNU: + Improved build rules for the rtp model + +Mon Jan 9 09:36:29 UTC 2006 J.T. Conklin + + * configure.ac: + + Fix typo in ACE_LACKS_NAMED_POSIX_SEM feature test. + +Mon Jan 9 09:30:12 UTC UTC 2006 Johnny Willemsen + + * ace/PI_Malloc.h: + Doxygen improvements + +Mon Jan 9 09:16:12 UTC UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_stat.{h,inl}: + Changed the return type of filesize to off_t, that is the type to + be used for filesizes + +Mon Jan 9 07:59:12 UTC UTC 2006 Johnny Willemsen + + * ace/os_include/os_limits.h: + VxWorks 6.2 defines PIPE_BUF as -1, this is not correct, undef it + when it is defined as -1. + +Sun Jan 8 19:34:12 UTC UTC 2006 Johnny Willemsen + + * ace/config-vxworks6.2.h: + Updated some more to reflect the OS correctly. + + * ace/Sock_Connect.cpp: + Updated for vxworks 6.2 + + * ace/POSIX_Asynch_IO.cpp: + * ace/POSIX_CB_Proactor.h: + * ace/POSIX_Proactor.{h,cpp}: + Added ACE_OPCODE_ for the OpCode enums READ and WRITE, READ is also + a define under VxWorks making this problematic to enable + + * include/makeinclude/platform_vxworks6.2.GNU: + Improved rtp building rules + +Sat Jan 7 13:34:12 UTC UTC 2006 Johnny Willemsen + + * ace/Time_Value.{h,inl}: + For the sec accessor methods use time_t as type, that is also the + type used to store the number of seconds. + +Sat Jan 7 13:29:12 UTC UTC 2006 Johnny Willemsen + + * ace/config-win32-msvc-8.h: + Added ACE_HAS_NEW_NOTHROW. Msvc8 throws std::bad_alloc by default, + for the ACE_NEW macros we disable this, we just get a zero back on + out of memory. This fixes bugzilla bug 2333 + +Sat Jan 7 13:17:12 UTC UTC 2006 Johnny Willemsen + + * ace/config-win32-mingw.h: + Added ACE_HAS_NONCONST_WCSDUP + +Fri Jan 6 21:20:58 UTC 2006 J.T. Conklin + + * ace/Process_Manager.cpp: + * ace/Process_Manager.h: + + There can be a race condition if a process exits between the + time it is spawned and the time its handler is registered. + Changed the spawn() methods to take an optional handler so + it can be registered atomically. + +Thu Jan 5 15:37:32 UTC 2006 J.T. Conklin + + * configure.ac: + + Add ACE_LACKS_UNAME feature test. + +Thu Jan 5 11:48:12 UTC 2006 Johnny Willemsen + + * ace/README: + * ace/config-chorus.h: + * ace/config-integritySCA.h: + * ace/config-psosim-g++.h: + * ace/config-vxworks5.x.h: + * ace/config-vxworks6.1.h: + * ace/config-vxworks6.2.h: + * ace/config-win32-common.h: + * ace/OS_NS_sys_utsname.{h,cpp}: + Introduced ACE_LACKS_UNAME and refactored ACE_OS::uname a + little bit. VxWorks 6.2 does deliver uname in the new rtp model, + this file explicitly checked for some OS defines, adding there + the new rtp check was making it real complex, so added this new + define and set it in the appropriate config files. Also handle + some new processor architecture defines windows now has. + + * ace/OS_NS_sys_utsname.inl: + Removed this file, was empty + + * ace/Makefile.am: + Updated because of removed file + +Thu Jan 5 09:52:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.2.GNU: + Improved rtp model support + +Wed Jan 4 21:25:11 UTC 2006 J.T. Conklin + + * ChangeLog: + + Changed "add-log-time-format" to a really ugly lambda expression + that formats changelog timestamps in UTC and works with both GNU + Emacs and XEmacs. + +Wed Jan 4 19:50:27 UTC 2006 Chad Elliott + + * bin/ChangeLogEditor/ChangeLogEntry.pm: + + Modified this to use UTC instead of local time. + +Wed Jan 4 18:44:12 UTC 2006 Johnny Willemsen + + * netsvcs/lib/Client_Logging_Handler.cpp: + Fixed 64bit conversion warning + +Wed Jan 4 11:04:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/templates/gnu.mpd: + Generate LIBNAME and PRJ_TYPE, needed for VxWorks rtp support + +Wed Jan 4 10:49:12 UTC 2006 Johnny Willemsen + + * ace/config-vxworks6.2.h: + In rtp mode we can't access the WIND_TCB struct anymore, meaning + that the TSS emulation can't work anymore. + + * ace/OS_NS_Thread.{h,cpp,inl}: + Only call the native tss methods when they are available + +Wed Jan 4 09:39:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_time.h: + Added workaround for VxWorks 6.2 that defines timeval in time.h + + * ace/High_Res_Timer.cpp: + * ace/OS_NS_time.inl: + * ace/README: + * ace/Time_Value.inl: + Removed checks for !ACE_HAS_BROKEN_TIMESPEC_MEMBERS, this define + is not set in any config file, so zapped it + +Wed Jan 4 08:30:12 UTC 2006 Johnny Willemsen + + * ace/config-vxworks6.2.h: + Improved support for the diab compiler + + * ace/TTY_IO.cpp: + Only define the const char arrays when they are going to be + used. Fixes unused variable warnings with vxworks + + * ace/OS_NS_dlfcn.inl: + * ace/OS_NS_stropts.inl: + * ace/OS_NS_sys_socket.inl: + * ace/OS_NS_Thread.h: + * ace/os_include/os_dirent.h: + * ace/os_include/os_fcntl.h: + * ace/os_include/os_limits.h: + * ace/os_include/os_netdb.h: + * ace/os_include/os_stropts.h: + * ace/os_include/sys/os_socket.h: + * ace/os_include/sys/os_un.h: + Made VxWorks specific includes dependent on the VxWorks version. + VxWorks is getting more and more posix compliance which means we + don't have to include special VxWorks header files. Also use + ACE_VXWORKS to check for this + +Tue Jan 3 21:31:29 2006 J.T. Conklin + + * ChangeLog: + + Add "indent-tabs-mode: nil" to Local Variables at end of file. + Untabify. + Delete-trailing-whitespace. + +Tue Jan 3 14:26:12 UTC 2006 Johnny Willemsen + + * ace/ACE.cpp: + Don't use maxFiles with VxWorks 6.2 + +Tue Jan 3 13:03:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_Thread.cpp: + Renamed MAX_ARGS to ACE_MAX_ARGS because VxWorks 6.2 has also a + define MAX_ARGS + + * ace/config-vxworks6.2.h: + Updated based on first testing + + * ace/os_include/sys/os_select.h: + * ace/os_include/os_netdb.h: + * ace/os_include/os_signal.h: + * ace/os_include/os_unistd.h: + * ace/os_include/os_unistd.h: + * ace/OS_NS_unistd.inl: + Minor updated for vxworks 6.1 + +Mon Jan 2 10:56:57 2006 J.T. Conklin + + * ace/OS_NS_string.cpp: + + Fix conditionals around ACE_OS::strdup_emulation(const wchar*). + Remove code that was moved to ACE_OS::strdup(const wchar*). + +Mon Jan 2 18:58:12 UTC 2006 Johnny Willemsen + + * protocols/ace/RMCast/Protocol.h: + Initialise pointer with 0 + +Mon Jan 2 13:45:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_Thread.cpp: + Only use the spa methods in non rtp model + + * ace/os_include/sys/os_wait.h: + VxWorks 6.1 defines wait and waitpid in wait.h + +Mon Jan 2 12:32:12 UTC 2006 Johnny Willemsen + + * ace/os_include/os_stdio.h: + Added workaround for vxworks6.1 and rtp for cuserid + + * ace/os_include/os_time.h: + VxWorks 6.1 defines in kernel mode timeval in sys/times.h + + * ace/OS_NS_string.cpp: + Fixed compile error with Borland + + * ace/os_include/os_signal.h: + Don't include sigLib.h when building for rtp model + + * ace/OS_NS_Thread.{h,inl}: + Don't include special VxWorks header files when building for rtp + + * ace/Sock_Connect.cpp: + Made workaround for VxWorks dependent on version umber + +Mon Jan 2 12:04:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.5.x.GNU: + * include/makeinclude/platform_vxworks6.1.GNU: + * bin/MakeProjectCreator/templates/gnu.mpd: + Made it possible to build for rtp and kernel mode + + * ace/config-vxworks6.1.h: + * ace/config-vxworks6.2.h: + Improved mapping + + * ace/Sock_Connect.cpp: + Reverted removal of VxWorks specific code, this is needed + for VxWorks 5.5, for 6 we have to develop a new section + + * ace/os_include/os_stdlib.h: + Only include envLib.h when not building for rtp + + * ace/os_include/os_dlfcn.h: + Only include specific VxWorks files when not building for rtp + +Sun Jan 1 00:00:00 2006 Douglas C. Schmidt + + * Happy New Year!!! + diff --git a/ACE/ChangeLogs/ChangeLog-06b b/ACE/ChangeLogs/ChangeLog-06b new file mode 100644 index 00000000000..2212ce3f6f0 --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-06b @@ -0,0 +1,8927 @@ +Fri Nov 17 07:06:10 UTC 2006 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added another RTScheduling example library project + +Fri Nov 17 06:47:10 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + Updated this file because tao_idl doesn't generate a S_T.inl + file anymore + +Thu Nov 16 20:38:10 UTC 2006 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added new RTScheduling example library projects to fix compile + errors in the msvc static builds + +Wed Nov 15 23:23:10 UTC 2006 J.T. Conklin + + * protocols/Makefile.am: + + Add lost support for --disable-ace-tests and --disable-ace-examples + +Wed Nov 15 21:55:01 UTC 2006 J.T. Conklin + + * ace/Makefile.am: + + Add OS.inl to nobase_include_HEADERS. + +Wed Nov 15 19:08:39 UTC 2006 J.T. Conklin + + * ace/config-lite.h: + + Changed to not include on Solaris systems + when using the stlport4 C++ library. + +Wed Nov 15 15:33:10 UTC 2006 J.T. Conklin + + * apps/JAWS/clients/Caching/caching.mpc: + + Add exename definition so that an executable, rather than + a shared library, is built. + +Wed Nov 15 10:35:00 UTC 2006 Simon Massey + + * NEWS: + + Added entry for Iliyan Jeliazkov. + +Wed Nov 15 01:56:28 UTC 2006 J.T. Conklin + + * protocols/ace/HTBP/Makefile.am: + * protocols/ace/RMCast/Makefile.am: + * protocols/ace/TMCast/Makefile.am: + + Change includedir to omit the "protocols" subdirectory. + + The header files for these libraries are intended to be + installed in ${prefix}/include/ace/{HTBP,RMCast,TMCast} + not ${prefix}/include/protocols/ace/{HTBP,RMCast,TMCast}. + +Wed Nov 15 01:11:02 UTC 2006 J.T. Conklin + + * ace/Makefile.am: + + Add Numeric_Limits.h to nobase_include_HEADERS. + +Tue Nov 14 18:42:18 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Gestalt.inl: + * ace/Service_Gestalt.cpp: + + After a gestalt gets close()-ed it is still a valid instance + however, because it is disassociated from its service repository + the situation becomes another special case the gestalt + implementation must account for. This change is in addition to + the bug fix introduced with the change from "Thu Nov 9 20:07:42 + UTC 2006". + +Tue Nov 14 14:30:12 UTC 2006 Johnny Willemsen + + * ace/Select_Reactor_T.cpp: + Removed some not used macros that did cause problems when running + FOCUS + +Tue Nov 14 11:23:12 UTC 2006 Johnny Willemsen + + * ace/Timer_Queue_T.cpp: + Added hook for FOCUS, const improvement + +Tue Nov 14 07:56:12 UTC 2006 Johnny Willemsen + + * ACE-INSTALL.html: + Updated rtems information + +Mon Nov 13 00:17:19 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Gestalt.cpp: + + Calling close() on a gestalt must not obliterate any static + service registrations. Those may still be needed if the gestalts + gets re-opened again, before its destructor runs. This change + fixes a problem (introduced with "Thu Nov 9 20:07:42 UTC 2006") + which broke this invariant. + +Sat Nov 11 18:37:12 UTC 2006 Chris Cleeland + + * ace/Service_Gestalt.cpp (find_processed_static_svc): + + Added a check at the beginning of this function that drops out + if processed_static_svcs_ or the arg is a zero pointer. This + gets ride of core dumps in scoreboard builds running tests like + some of the TAO EC tests (basically anything which has a static + service defined and expects to find it), but there is still the + more fundamental problem as to why the static services aren't + there in the first place. + +Fri Nov 10 22:30:12 UTC 2006 Martin Corino + + * include/makeinclude/platform_vxworks6.3.GNU: + + Fixes for VxWorks 6.3 PPC builds. + +Fri Nov 10 21:26:41 UTC 2006 Chris Cleeland + + * ace/OS_NS_Thread.h (THR_HAS_WTHREADS): + + Added THR_EXPLICIT_SCHED definition to ACE_HAS_WTHREADS clause + so that application-level code doesn't have to have #ifdefs to + figure out whether it's okay to use THR_EXPLICIT_SCHED. + + This change is part of a change to TAO from + Thu Nov 9 15:42:32 UTC 2006 Chris Cleeland + +Fri Nov 10 15:02:26 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Config.cpp (close): + + Removing a forgotten debug statetement. + +Fri Nov 10 13:42:12 UTC 2006 Martin Corino + + * bin/vx_repo_link.pl: + + New perl 'program' to handle link phase for VxWorks 5.5.x + builds using -frepo option. + + * include/makeinclude/platform_vxworks5.5.x.GNU: + * include/makeinclude/rules.lib.GNU: + + Changes to enable building ACE/TAO apps for VxWorks 5.5.x SIMNT + targets using -frepo option. + +Fri Nov 10 12:53:32 UTC 2006 William R. Otte + + * bin/make_release: + * docs/bczar/bczar.html: + + Minor update to bczar documentation to correct install paths, + minor bugfix to release script to correct PRF generation. + +Fri Nov 10 12:22:12 UTC 2006 Johnny Willemsen + + * ace/INET_Addr.cpp: + Fixed argument not used warnings in rtems no network build + +Fri Nov 10 10:06:12 UTC 2006 Johnny Willemsen + + * ace/Reactor_Impl.h: + * ace/Dev_Poll_Reactor.{h,cpp}: + * ace/Select_Reactor_T.{h,cpp}: + * ace/WFMO_Reactor.{h,inl}: + Changed initialized to return a bool, that is the type we store + as member. + +Fri Nov 10 10:03:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_unistd.cpp: + Const changes and use prefix operators instead of postfix + + * ace/Process.cpp: + Use prefix increment instead of postfix + + * ace/Reactor.cpp (timer_queue): + No need to use an intermediate variable + +Fri Nov 10 05:47:15 UTC 2006 William R. Otte + + * docs/bczar/bczar.html + + Updates to release script documentation. + +Thu Nov 9 20:07:42 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Config.cpp: + * ace/Service_Gestalt.h: + * ace/Service_Gestalt.cpp: + + A follow up to my change from "Wed Nov 8 22:12:46". Adding the + close_svcs() call in ACE_Service_Config::close() ensured that + the repository and its contents gets properly finalized, but it + did not account for the potential subsequent re-opening of the + Service Config. This causes failures in open/close/open + scenarios, like Framework_Component_Test. + +Thu Nov 9 19:59:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_aix4_cset++.GNU: + * include/makeinclude/platform_integrity_ghs.GNU: + * include/makeinclude/platform_irix6.x_sgic++.GNU: + * include/makeinclude/platform_linux_pgi.GNU: + * include/makeinclude/platform_macosx_panther.GNU: + * include/makeinclude/platform_macosx_tiger.GNU: + * include/makeinclude/platform_netbsd.GNU: + * include/makeinclude/platform_openbsd.GNU: + * include/makeinclude/platform_osf1_4.x_rcc.GNU: + * include/makeinclude/platform_vxworks5.x_ghs.GNU: + Simplified these files using the ?= operator + +Thu Nov 09 16:10:10 UTC 2006 Martin Corino + + * ace/Service_Config.cpp: + + Reverted my earlier change of Nov 6 and additionally removed + the ACE_Reactor::instance() call from the ACE_Service_Config + CTOR since it seems to be unnecessary here. + +Thu Nov 9 15:22:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/wrapper_macros.GNU: + Default threads to 1 if not set, thanks to Chad for helping out + with finding out why I had a problem in the rtems build + +Thu Nov 9 12:46:54 UTC 2006 J.T. Conklin + + * bin/MakeProjectCreator/config/acedefaults.mpb: + * bin/MakeProjectCreator/config/taodefaults.mpb: + + Add automake specific section to subtract out $(ACE_ROOT)/lib + from libpaths, as libraries are not copied to, or linked from, + there in automake builds. This removes unnecessary -L's from + being added to *_LDFLAGS, sometimes eliminating the need for + that automake variable altogether. + +Thu Nov 9 10:48:52 UTC 2006 Olli Savia + + * examples/IPC_SAP/DEV_SAP/reader/reader.cpp: + * examples/IPC_SAP/DEV_SAP/writer/writer.cpp: + Changed used baudrate to 19200. Extended reader example to handle + timeout. + +Thu Nov 9 10:50:12 UTC 2006 Johnny Willemsen + + * ace/Timer_Heap_T.{h,cpp}: + Changed the preallocated constructor from int to bool. + +Thu Nov 9 09:25:48 UTC 2006 Olli Savia + + * ace/TTY_IO.cpp: + Removed LynxOS 3.x specific workaround. + +Wed Nov 8 22:22:27 UTC 2006 Steve Huston + + * bin/make_release: Re-applied this: + Sat Oct 28 20:10:42 UTC 2006 Steve Huston + +Wed Nov 8 22:12:46 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Config.cpp: + * ace/Service_Gestalt.cpp: + + This resolves a problem with shutting down the Service + Configurator via the static ACE_Service_Config::close () method, + where the registered services' fini() methods were not being + called. For full details, see bugzilla# 2701. Thanks to Aaron + Scamehorn for discovering + it an providing a test case. + +Wed Nov 8 19:21:17 UTC 2006 William R. Otte + + * bin/make_release: + + Updates to the release script to work with Subversion. + +Mon Nov 6 16:07:43 UTC 2006 Douglas C. Schmidt + + * ace/SOCK_IO.h (ACE_SOCK_IO): Clarified the behavior of + non-blocking I/O. Thanks to Robert Neumann for motivating this change. + +Tue Nov 08 15:40:10 UTC 2006 Martin Corino + + * ace/INET_Addr.inl: + + Enhanced operator <() to support IPv6 addresses as well. + Thanks to Andre Kostur (akostur at incognito dot com) for + submitting a patch for this. + +Wed Nov 8 14:24:02 UTC 2006 J.T. Conklin + + * configure.ac: + + Change ACE_LACKS_NET_IF_H feature test to #include + (if present). + +Wed Nov 8 13:45:07 UTC 2006 Chad Elliott + + * examples/C++NPv2/C++NPv2.mpc: + + The AC_CLD project requires threads in order to build and run + correctly. + +Tue Nov 07 15:49:10 UTC 2006 Martin Corino + + * ace/OS_NS_netdb.inl: + + Changes to accomodate VxWorks 6.x versions of gethostbyname and + gethostbyaddr. These are threadsafe as the x_r versions are but + require deallocating the returned hostent structure. + +Tue Nov 7 15:44:12 UTC 2006 Johnny Willemsen + + * ace/Sock_Connect.cpp: + With VxWorks 6.3 in rtp mode with IPv6 enabled declare the + in6addr_ constants explicitly, these are exported by the + VxWorks 6.3 rtp header files but not implemented + +Tue Nov 07 13:31:10 UTC 2006 Martin Corino + + * include/makeinclude/platform_vxworks6.3.GNU: + + Fixed build settings for PPC32 builds with softfloat. + +Tue Nov 7 10:38:25 UTC 2006 Simon McQueen + + * tests/Naming_Test.cpp: + + Moved an ::open out of an ACE_ASSERT. It wasn't getting performed on + some builds. + +Tue Nov 7 09:56:12 UTC 2006 Johnny Willemsen + + * performance-tests/Misc/basic_func.{h,cpp}: + Renamed B to BB to resolve compile problems on rtems where we + have also a typedef B + +Tue Nov 7 07:52:12 UTC 2006 Johnny Willemsen + + * ace/ACE.h: + Also rtems defines log2, use the same workaround as with cygwin + + * include/makeinclude/platform_rtems.x_g++.GNU: + Removed -ansi + +Tue Nov 7 01:47:46 UTC 2006 Phil Mesnier + + * ace/Sock_Connect.cpp (count_interfaces): + Another scoreboard fix. + +Mon Nov 6 20:52:12 UTC 2006 Johnny Willemsen + + * apps/Gateway/Gateway/Config_Files.{h,cpp}: + * apps/Gateway/Gateway/File_Parser.{h,cpp}: + * apps/Gateway/Gateway/Gateway.cpp: + Renamed class FP to FPRT. This resolves the compile errors on + rtems where a struct FP does exist + +Mon Nov 6 16:52:14 UTC 2006 Phil Mesnier + + * ace/Sock_Connect.cpp: + My fix for Solaris x86 broke HPUX. The trouble is that the + method ACE::count_interfaces() is only used by the "generic" + implementation of get_ip_interfaces(). Probably a better + solution is to remove count_interfaces() and move its + functionality into the get_ip_interfaces() implementation, but + that is a bigger change than I care to make at the moment. I + think it should be possible to do so in a way that also reduces + the footprint and improves performance by eliminating the + effectively duplicated code in count_interfaces(). + +Mon Nov 06 14:14:10 UTC 2006 Martin Corino + + * ace/config-vxworks6.3.h: + + Fixed incorrect definition of IOV_MAX. + +Mon Nov 6 13:08:12 UTC 2006 Johnny Willemsen + + * ace/config-sunos5.5.h: + Added ACE_HAS_GETRUSAGE, thanks to Michael Klein + for reporting that SunOS has + this method, fixes bugzilla 2694. + +Mon Nov 6 12:59:12 UTC 2006 Johnny Willemsen + + * examples/Service_Configurator/Misc/main.cpp: + * examples/Service_Configurator/Misc/Service_Configurator_Misc.mpc: + * examples/Service_Configurator/Misc/svc.conf1 + Fixed shared library name, make working for embedded platforms. + Thanks to Abdul Sowayan + for reporting this, fixes bugzilla bug 2698 + +Mon Nov 06 11:17:10 UTC 2006 Martin Corino + + * ace/Service_Config.cpp: + + Implemented a fix for runtime problems in case + ACE_HAS_NONSTATIC_OBJECT_MANAGER is defined (seen on VxWorks 6.3 RTP). + +Sun Nov 5 14:14:51 UTC 2006 Phil Mesnier + + * ace/Sock_Connect.cpp: + Fix for Solaris x86. + +Sat Nov 4 12:46:12 UTC 2006 Johnny Willemsen + + * ace/config-sunos4*.h: + Removed these files, these are ancient and not supported anymore + +Fri Nov 3 18:12:36 UTC 2006 Douglas C. Schmidt + + * tests/Unload_libACE.cpp (main): Reverted the ACE_OS::exit() from + this since it's not supposed to be an ACE test. Thanks to Simon + Massey for reporting this. + +Fri Nov 03 15:52:10 UTC 2006 Martin Corino + + * bin/PerlACE/ProcessVX_Unix.pm: + + Bugfix in cmdline composition. + +Fri Nov 3 15:15:43 UTC 2006 Phil Mesnier + + * ace/Sock_Connect.cpp: + Scoreboard cleanup. + +Fri Nov 03 10:54:10 UTC 2006 Martin Corino + + * ace/OS_NS_sys_time.inl: + + Fixed conversion warning on OpenVMS. + +Fri Nov 3 00:39:04 UTC 2006 Phil Mesnier + + * ace/Sock_Connect.cpp: + One more optimization, this one to combine the methods for + evaluating the IPv6 or IPv4 enabled status. + +Fri Nov 3 00:32:27 UTC 2006 Phil Mesnier + + * ace/Select_Reactor_Base.inl: + * ace/Select_Reactor_Base.cpp: + Additional optimization for finding and unbinding event + handlers. The solution moves the test for handles in range into + the top-level find and unbind methods to allow the fix for bug + 2653 to continue to work in unbind while avoiding a double check + for handles in range during a find. + +Thu Nov 2 20:33:55 UTC 2006 Douglas C. Schmidt + + * tests/SOCK_Test_IPv6.cpp (spawn): + * tests/Pipe_Test.cpp (run_main): + * tests/SPIPE_Test.cpp (client): + * tests/TkReactor_Test.cpp (run_main): + * tests/MT_SOCK_Test.cpp (spawn): + * tests/Process_Strategy_Test.cpp (run_main): + * tests/Unload_libACE.cpp (main): + * tests/SOCK_Test.cpp (spawn): + * tests/Priority_Reactor_Test.cpp (run_main): + * tests/SOCK_Dgram_Test.cpp (spawn): + * tests/SOCK_SEQPACK_SCTP_Test.cpp (spawn_test): + * examples/Map_Manager/test_hash_map_manager.cpp (ACE_TMAIN): + * apps/mkcsregdb/mkcsregdb.cpp (fail): Replaced exit() with + ACE_OS::exit(). + +Wed Nov 01 20:04:00 US Central Time 2006 Douglas C. Schmidt + + * Bronson Royce Schmidt checked in at 7 pounds, 15 ounces and + 21.25 inches long. + +Thu Nov 2 16:10:10 UTC 2006 Phil Mesnier + + * ace/Sock_Connect.cpp: + Cleaned up debugging code left in my previous premature commit. + +Thu Nov 2 15:42:29 UTC 2006 Phil Mesnier + + * ace/Sock_Connect.cpp: + * ace/Sock_Connect.h: + Added support for IPv6 detection on HPUX, AIX, Solaris, WinCE, + and VxWorks 5.5.x. + +Wed Nov 01 09:05:10 UTC 2006 Martin Corino + + * ace/OS_NS_stdlib.inl: + + Fixed conversion warnings in atop() on OpenVMS. + +Wed Nov 01 08:35:10 UTC 2006 Martin Corino + + * ace/OS_NS_sys_stat.h: + + Fixed Borland compile failure over def of ACE_Stat. + +Tue Oct 31 23:08:32 UTC 2006 Steve Huston + + * ace/Dev_Poll_Reactor.h: Note that the Linux epoll code implementation + is supported, but the /dev/poll implementation is still + experimental. + +Tue Oct 31 10:31:10 UTC 2006 Ossama Othman + + * ace/OS_NS_sys_stat.h (ACE_WSTAT_FUNC_NAME): + + Corrected wstat() function name for Borland. + +Mon Oct 30 19:57:20 UTC 2006 Jeff Parsons + + * bin/ciao_tests.lst: + + Added run_test.pl in CIAO/tests/IDL3/Events/Any to the list of + CIAO tests to be run automatically. + +Mon Oct 30 17:34:35 UTC 2006 Ossama Othman + + * ace/config-win32-common.h: + + Use 64-bit file offsets by default in the WIN64 case, similar to + what 64-bit UNIX systems do. + +Mon Oct 30 17:23:15 UTC 2006 Steve Huston + + * include/makeinclude/wrapper_macros.GNU: Added 2 new build options, + dmalloc and mtrace. When specified at build time (e.g. make mtrace=1) + the PLATFORM_DMALLOC_CPPFLAGS and/or PLATFORM_MTRACE_CPPFLAGS values + are added to CPPFLAGS. For dmalloc, the PLATFORM_DMALLOC_LDFLAGS and + PLATFORM_DMALLOC_LIBS are added to LDFLAGS and LIBS, respectively. + Also added the ability to specify additional purify and quantify + command-line options by setting PLATFORM_PURIFY_OPTIONS and + PLATFORM_QUANTIFY_OPTIONS, respectively. Thank you to Howard + Finer for supplying these additions. + +Mon Oct 30 16:56:28 UTC 2006 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + The implementation for the 'targetoutdir' template variable was + incorrect. Libraries and executables were not symbolically linked + to the output location correctly. Also, 'targetoutdir' was not + taken into account for the 'libpaths' setting. + +Mon Oct 30 15:30:47 UTC 2006 Simon McQueen + + * bin/tao_orb_tests.lst: + + Scheduled regression test for bug #2669. + +Mon Oct 30 14:31:42 UTC 2006 Phil Mesnier + + * ace/Select_Reactor_Base.inl: + Reverting the functional part of my previous commit until I + learn the correct way to manage the upper bound test portably. + + * bin/tao_orb_tests.lst: + Make the Bug 2654 test be ignored for minimum CORBA builds. + +Mon Oct 30 12:18:03 UTC 2006 Phil Mesnier + + * ace/Select_Reactor_Base.inl (unbind): + Added an additional validity check and a comment to ward off + future optimizations. + +Mon Oct 30 09:24:42 UTC 2006 Ossama Othman + + * ace/OS_NS_sys_stat.h (ACE_stat): + * ace/OS_NS_sys_stat.inl (stat, wstat): + + Only use Windows 64-bit stat structures and functions when + _FILE_OFFSET_BITS=64 is defined. Addresses 64-bit conversion + warnings. + +Sun Oct 30 05:31:01 UTC 2006 Ossama Othman + + * ace/Auto_Ptr.h (ACE_auto_ptr_reset): + + Adjusted function template arguments to handle case where the + auto_ptr element type and pointer type passed to this function + are not the same. Addresses argument deduction failures. + + * ace/FILE.h (ACE_FILE): + + 64-bit file offset fixes. s/off_t/ACE_OFF_T. + + * ace/Truncate.h (Truncator): + + Added explicit specializations for int and long for Borland. + Relying on ACE_{U}INT32 specializations is not sufficient. + + * tests/CDR_File_Test.cpp (run_test): + + A 64-bit file offset is not always enabled. Corrected offset + type. s/ACE_LOFF_T/ACE_OFF_T. + +Sun Oct 29 17:10:39 UTC 2006 Phil Mesnier + + * bin/tao_orb_tests.lst: + Added Bug 2654 regression test to suite. + +Sat Oct 28 20:50:56 UTC 2006 Steve Huston + + * examples/Threads/thread_specific.cpp: Need to reinterpret_cast a + pointer back to an intptr_t. + +Sat Oct 28 20:10:42 UTC 2006 Steve Huston + + * bin/make_release: Added Smartphone configurations to the WinCE + project files generated at release time. + +Sat Oct 28 13:50:01 UTC 2006 Phil Mesnier + + * ace/Select_Reactor_Base.cpp: + + Fix to address Win32-specific problems in bug 2653 fix. + +Sat Oct 28 01:48:27 UTC 2006 Steve Huston + + * include/makeinclude/wrapper_macros.GNU: Add -L$(INSLIB) to LDFLAGS + if it was not there already. Allows link to work when built libraries + are moved to locations other than the default $(ACE_ROOT)/lib + location. + +Fri Oct 28 03:23:18 UTC 2006 Ossama Othman + + * apps/JAWS2/JAWS/FILE.cpp: + * apps/JAWS2/JAWS/FILE.h: + * apps/JAWS2/JAWS/IO.cpp: + * apps/JAWS3/jaws3/FILE.cpp: + * apps/JAWS3/jaws3/FILE.h: + * examples/Threads/thread_manager.cpp: + * examples/Threads/cancel.cpp: + * examples/Threads/thread_specific.cpp: + * examples/C++NPv1/Process_Per_Connection_Logging_Server.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/Benchmark_Performance.cpp + Addressed 64-bit conversion warnings. + +Fri Oct 28 02:49:11 UTC 2006 Ossama Othman + + * examples/APG/Shared_Memory/Mem_Map.cpp: + * examples/Mem_Map/file-reverse/file-reverse.cpp: + * examples/Web_Crawler/Mem_Map_Stream.cpp: + + Addressed 64-bit conversion warnings. + +Fri Oct 27 21:41:25 UTC 2006 Phil Mesnier + + * THANKS: + * ace/Select_Reactor_Base.inl: + * ace/Select_Reactor_Base.cpp: + * ace/TP_Reactor.inl: + * ace/TP_Reactor.cpp: + * tests/run_test.lst: + + The fix for bug 2653. Thanks to Scott Mitchell and Chris Reed for the + considerable effort they put in helping to isolate this problem. + +Fri Oct 27 21:28:36 UTC 2006 Phil Mesnier + + * tests/Bug_2653_Regression_Test.cpp: + * tests/tests.mpc: + + Added a new regression test. Without the accompaning fix, the + test coredump. If you comment out the call to test_for_crash, + the test will spin madly for 5 seconds, then abort. With the + pending fix to the TP reactor, the test has no errors. + +Fri Oct 27 19:48:23 UTC 2006 Ossama Othman + + * ace/Filecache.cpp (ACE_Filecache_Object): + + Cast -1 to size_t. Ugly (and works), but currently necessary. + Addresses "passing negative value" warnings. + +Fri Oct 27 19:28:16 UTC 2006 Ossama Othman + + * ace/OS_NS_stdio.inl (flock_adjust_params): + * ace/OS_NS_sys_stat.inl (filesize): + + Fixed comparison of signed/unsigned warnings. + +Fri Oct 27 09:25:12 UTC 2006 Johnny Willemsen + + * ace/Configuration_Import_Export.cpp: + Explicitly initialise pointer to 0 to silence warning in + gcc cygwi build + +Fri Oct 27 01:58:09 UTC 2006 Ossama Othman + + From Russell Mora + * ace/ACE.cpp: + * ace/ACE.h: + * ace/FILE.cpp: + * ace/File_Lock.h: + * ace/File_Lock.inl: + * ace/Filecache.cpp: + * ace/Filecache.h: + * ace/Local_Memory_Pool.cpp: + * ace/MEM_Acceptor.h: + * ace/MEM_Acceptor.inl: + * ace/MEM_IO.cpp: + * ace/MEM_IO.inl: + * ace/MEM_IO.h: + * ace/MMAP_Memory_Pool.cpp: + * ace/MMAP_Memory_Pool.h: + * ace/Mem_Map.cpp: + * ace/Mem_Map.h: + * ace/Mem_Map.inl: + * ace/OS_NS_macros.h: + * ace/OS_NS_stdio.cpp: + * ace/OS_NS_stdio.inl: + * ace/OS_NS_stdio.h: + * ace/OS_NS_sys_mman.h: + * ace/OS_NS_sys_mman.inl: + * ace/OS_NS_sys_stat.h: + * ace/OS_NS_sys_stat.inl: + * ace/OS_NS_unistd.cpp: + * ace/OS_NS_unistd.inl: + * ace/OS_NS_unistd.h: + * ace/Pagefile_Memory_Pool.inl: + * ace/Shared_Memory_MM.cpp: + * ace/Shared_Memory_MM.h: + * ace/Shared_Memory_MM.inl: + * ace/Shared_Memory_Pool.cpp: + * ace/Shared_Memory_Pool.h: + * ace/os_include/sys/os_types.h: + * ace/os_include/sys/os_stat.h: + * ace/os_include/os_unistd.h: + * examples/Web_Crawler/Iterators.cpp: + * examples/Web_Crawler/Mem_Map_Stream.cpp: + * examples/Web_Crawler/Mem_Map_Stream.h: + * examples/IPC_SAP/FILE_SAP/client.cpp: + + Added support for 64-bit file offsets on 32-bit platforms that + support the _FILE_OFFSET_BITS preprocessor symbol, as well as + Windows. Enable by defining the _FILE_OFFSET_BITS=64 + preprocessor symbol. ACE provides the necessary support on + Windows when it is defined with the assistance of a new + ACE_OFF_T typedef. + +Thu Oct 26 24:44:55 UTC 2006 Ossama Othman + + * ace/Truncate.h (Truncator): + + Removed ACE_Export macros in the Borland case. They shouldn't + be necessary. + +Thu Oct 26 14:05:12 UTC 2006 Johnny Willemsen + + * bin/tao_other_tests.lst: + Added orbsvcs/tests/Event/UDP test which tests the rtec + udp federation + +Thu Oct 26 11:19:45 UTC 2006 Olli Savia + + * ace/config-lynxos.h: + Added include "ace/config-posix.h" and removed defines + that are already defined by config-posix.h. + +Thu Oct 26 10:29:49 UTC 2006 Olli Savia + + * ace/config-posix.h: + Removed duplicate check of _POSIX_MESSAGE_PASSING. + +Thu Oct 26 07:48:12 UTC 2006 Johnny Willemsen + + * ace/Truncate.h: + + Added partial specialization for when types are the same, fixes + compile problems in the ACE lib with Borland + +Thu Oct 26 07:01:12 UTC 2006 Johnny Willemsen + + * ace/config-vxworks5.x.h: + Added ACE_LACKS_INTPTR_T, VxWorks 5.5.x seems not to deliver this + type + +Thu Oct 26 00:31:56 UTC 2006 Ossama Othman + + * ace/Auto_Ptr.h: + + Added missing "element_type" typedef. + + (ACE_auto_ptr_reset): + + Introduced this new function template to simplify the + ACE_AUTO_PTR_RESET macro implementation, to support + ACE's other auto_ptr-like class templates + (e.g. ACE_Auto_Array_Ptr<>), and to make auto_ptr + reset() operations convenient and easy for those needing the + ACE_AUTO_PTR_RESET functionality to. Users now need only + perform a call like: + + ACE_auto_ptr_reset (my_auto_ptr_instance, new foo); + + Note that ACE_AUTO_PTR_RESET support for ACE's other + auto_ptr-like classes isn't strictly necessary since they all + support the reset() method. + + Addresses build failures on platforms that define + ACE_LACKS_AUTO_PTR_RESET and in code that expects to use + ACE_AUTO_PTR_RESET on ACE_Auto_{Basic_}_Array<> instances. + +Wed Oct 25 22:42:03 UTC 2006 Ossama Othman + + * tests/Integer_Truncate_Test.cpp: + + Remove "const" qualifiers from types used in + ACE_Utils::Truncate<>() function template parameters that are + deduced using argument dependent lookup. Borland appears to get + confused, and can't find the non-const template parameter + Truncate<>() specializations. + +Wed Oct 25 20:17:13 UTC 2006 Ossama Othman + + * ace/Hash_Map_Manager_T.inl (ACE_Hash_Map_Iterator_Base_Ex): + + Removed commented ACE_TRACE macro entirely. Fuzz parses + commented out code, and still incorrectly reports an ACE_TRACE + mismatch. + + * ace/Truncate.h: + + Yet another attempt at placating Borland C++. Removed the + partial specialization for truncating values of the same type. + Typedefed the underlying Truncator structure template to further + simplify the function call. + +Wed Oct 25 18:31:47 UTC 2006 Ossama Othman + + * examples/C++NPv1/Reactive_Logging_Server.h: + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: + + Include "ace/Basic_Types.h" to pull in intptr_t typedef. + +Wed Oct 25 15:05:42 UTC 2006 Steve Huston + + * ace/OS_NS_stdlib.inl (atop): s/intptr/intptr_t/ in ACE_WIN64 case. + +Wed Oct 25 09:47:12 UTC 2006 Johnny Willemsen + + * ace/SOCK_Dgram.cpp: + Fixed compile error in non win32 part + +Wed Oct 25 09:24:12 UTC 2006 Johnny Willemsen + + * ace/ace_for_tao.mpc: + Added Rtems_init.c, for rtems without network support we + also use the ace_for_tao base project + +Wed Oct 25 08:38:12 UTC 2006 Johnny Willemsen + + * ace/config-rtems.h: + * ace/OS_NS_netdb.inl: + Added ACE_LACKS_GETHOSTBYADDR_R + +Wed Oct 25 08:11:12 UTC 2006 Johnny Willemsen + + * ace/config-rtems.h: + * ace/OS_NS_sys_socket.inl: + Added ACE_LACKS_GETSOCKOPT, ACE_LACKS_RECV, ACE_LACKS_SEND, + and ACE_LACKS_SENDTO + +Wed Oct 25 08:04:12 UTC 2006 Johnny Willemsen + + * tests/Priority_Buffer_Test.cpp: + Fixed compile problem with gcc 2.96 + +Wed Oct 25 07:58:12 UTC 2006 Johnny Willemsen + + * ace/config-rtems.h: + * ace/OS_NS_sys_socket.inl: + Added ACE_LACKS_ACCEPT, ACE_LACKS_CONNECT, ACE_LACKS_GETPEERNAME, + ACE_LACKS_GETSOCKNAME + +Wed Oct 25 06:30:12 UTC 2006 Johnny Willemsen + + * ace/TTY_IO.cpp: + Fixed compile error on Vxworks + +Tue Oct 24 23:53:08 UTC 2006 Steve Huston + + * ace/config-aix-4.x.h: Changed ACE_HAS_PTHREAD_CONTINUE to + ACE_HAS_PTHREAD_CONTINUE_NP and ACE_HAS_PTHREAD_SUSPEND to + ACE_HAS_PTHREAD_SUSPEND_NP. The non-_NP varieties return ENOTSUP; + the _NP varieties are the only documented APIs through AIX 5.3. + Thanks to Guy Peleg for raising this issue. + + * tests/Thread_Manager_Test.cpp: Altered the suspend/resume tests to + only allow ENOTSUP as a legit result if the config.h file does not + include ACE_HAS_... settings that indicate it should work. + +Tue Oct 24 23:59:10 UTC 2006 Ossama othman + + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.inl + (init): + * examples/Shared_Malloc/test_position_independent_malloc.cpp + (parse_args): + + Use intptr_t instead of int when casting to void*. Addresses + "sizes do not match" warnings in 64-bit Intel compiler builds. + +Tue Oct 24 23:49:25 UTC 2006 Ossama Othman + + * ace/Hash_Map_Manager_T.inl (ACE_Hash_Map_Iterator_Base_Ex): + + Commented out use of ACE_TRACE macro. The regular expression in + the bin/fuzz.pl script used to detect ACE_TRACE mismatch + incorrectly identifies a mismatch the ACE_TRACE question. Once + the fuzz script is fixed, the ACE_TRACE can be uncommented. + +Tue Oct 24 22:20:38 UTC 2006 Ossama Othman + + * ace/Truncate.h: + + Rename truncate to trunc. Yet another attempt at fixing Borland + compiler brain damage. + +Tue Oct 24 22:01:41 UTC 2006 Ossama Othman + + * ace/OS_NS_stdlib.inl (atop): + + Use intptr_t type to fix 64-bit conversion to void* warnings. + + * ace/Select_Reactor_Base.h (max_handlep1): + * ace/Select_Reactor_Base.inl (max_handlep1): + + Changed return type to be ACE_HANDLE on UNIX platforms instead + of size_t. Addresses "loss of significant bits" warnings in + 64-bit Intel compiler builds. + + * ace/Select_Reactor_Base.cpp (dump): + + Corrected format specifiers for Windows configuration. + + * ace/Select_Reactor_T.cpp (work_pending): + (wait_for_multiple_events): + + Removed unnecessary casts and corrected type of "width" variable + that is passed to select(). + + * tests/Map_Manager_Test.cpp (test_cache_map_manager): + + Fixed "might be used uninitialized" warning. + +Tue Oct 24 17:46:40 UTC 2006 Ossama Othman + + * ace/Truncate.h (Truncator): + + Export the Borland-specific specializations from the DLL. This + should address the "undefined symbol" link-time problem. + + * bin/MakeProjectCreator/config/acexml.mpb: + + Re-disabled ACEXML when ace_for_tao is enabled. ACEXML needs + the ACE_Configuration and memory map classes that are not found + in the ace_for_tao subset. + +Tue Oct 24 14:44:09 UTC 2006 Olli Savia + + * ace/TTY_IO.cpp: + + Changed the default constructor to always initialise member + variables regardless of ACE_HAS_TERMIOS or ACE_HAS_TERMIO setting. + +Tue Oct 24 14:16:12 UTC 2006 Johnny Willemsen + + * ace/ACE.cpp: + Use some bools instead of int + + * ace/INET_Addr.cpp (set_port_number): + Added check for ACE_LACKS_HTONS + + * ace/INET_Addr.inl (get_port_number): + Added check for ACE_LACKS_NTOHS + +Tue Oct 24 13:54:12 UTC 2006 Johnny Willemsen + + * ace/os_include/netinet/os_in.h: + * ace/config-rtems.h: + Added ACE_LACKS_IP_MREQ + + * ace/INET_Addr.cpp (get_port_number_from_name): + Added ACE_LACKS_HTONS check + +Tue Oct 24 13:27:12 UTC 2006 Johnny Willemsen + + * ace/Reactor.h: + Added an include of Time_Value.h, this is included implicitly + but this implicit include is not there when using FOCUS with + tp-reactor specialization + +Tue Oct 24 13:09:12 UTC 2006 Johnny Willemsen + + * ace/Sock_Connect.cpp: + * ace/config-rtems.h: + Added ACE_LACKS_GET_BCAST_ADDR + +Tue Oct 24 13:00:12 UTC 2006 Johnny Willemsen + + * ace/os_include/os_socket.h: + * ace/config-rtems.h: + Added ACE_LACKS_SOCKADDR + +Tue Oct 24 12:54:12 UTC 2006 Johnny Willemsen + + * ace/os_include/os_netdb.h: + * ace/config-rtems.h: + Added ACE_LACKS_HOSTENT + +Tue Oct 24 12:09:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_arpa_inet.inl: + * ace/config-rtems.h: + Added ACE_LACKS_INET_ADDR and ACE_LACKS_INET_NTOA + +Tue Oct 24 12:00:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_socket.h: + Define MSG_OOB when it is not defined + +Tue Oct 24 11:17:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_socket.inl: + * ace/config-rtems.h: + Added ACE_LACKS_SOCKET, ACE_LACKS_SHUTDOWN and ACE_LACKS_SETSOCKOPT + +Tue Oct 24 11:08:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_select.inl: + * ace/config-rtems.h: + Added ACE_LACKS_SELECT + +Tue Oct 24 10:58:12 UTC 2006 Johnny Willemsen + + * ace/os_include/netinet/os_in.h: + * ace/config-rtems.h: + Added ACE_LACKS_IN_ADDR and ACE_LACKS_SOCKADDR_IN + +Tue Oct 24 06:31:05 UTC 2006 Ossama Othman + + * ace/Numeric_Limits.h (ACE_Numeric_Limits): + + Added missing "char" specialization for the + ACE_LACKS_NUMERIC_LIMITS case. The "signed char" and + "unsigned char" specializations are not always suitable. + +Tue Oct 24 04:04:26 UTC 2006 Ossama Othman + + * ace/Hash_Map_Manager_T.h (lock_): + + Placed "mutable" keyword to beginning of declaration. It is a + storage class specifier, not a CV qualifier, and belongs at the + beginning. Addresses g++ warnings. + + * ace/Sock_Connect.cpp (get_fqdn): + + Addressed "might be used uninitialized warnings. + +Mon Oct 23 02:28:42 UTC 2006 Ossama Othman + + * ace/Array_Base.cpp: + * ace/Array_Base.h: + * ace/Array_Base.inl: + + Added STL-style traits, iterators and swap() method. + + (operator=): + + Improved exception-safety. + + * ace/Array_Map.h: + * ace/config-lite.h: + + Moved reverse_iterator declarations to a new + ACE_DECLARE_STL_REVERSE_ITERATORS so that other ACE containers + may use them in a way that minimizes platform-specific + declaration duplication. + + * ace/CDR_Stream.cpp (read_boolean_array): + + Addressed a Coverity CHECKED_RETURN error. There's no need to + check the return value of read_boolean() in this case. + Explicitly cast the return value to "void". + + Addressed Coverity DEADCODE error. No need to check for zero + "cont" pointer since the ACE_NEW_RETURN() call that initializes + it will return immediately. "cont" cannot be zero if the latter + call succeeds. + + * ace/CDR_Stream.inl (operator>>): + + Explicitly check return value of input stream read operations. + Addressed a Coverity CHECKED_RETURN errors. + + * ace/Configuration.cpp (new_section): + + Fixed Coverity USE_AFTER_FREE error. Memory was being accessed + after it was freed. + + * ace/Configuration_Import_Export.cpp: + + Addressed Coverity RESOURCE_LEAK errors. + + * ace/Default_Constants.h (ACE_DEFAULT_CLOSE_ALL_HANDLES): + + This symbol represents a boolean value. s/1/true. + + * ace/Dev_Poll_Reactor.cpp (bind): + * ace/WFMO_Reactor.cpp (bind_i): + + Disallow binding of a nil event handler pointer to the + repository. It is deferenced later on this method. + + * ace/Hash_Map_Manager_T.h: + * ace/Hash_Map_Manager_T.inl: + + Added STL-style traits and iterator accessors. + + (find): + + New method that returns an iterator as an "out" parameter. An + iterator return value could not be used due a conflict with an + existing find() method. + + (unbind): + + New method that unbinds the value pointed to by the given + iterator. + + (ACE_Hash_Map_Iterator_Base_Ex, ACE_Hash_Map_Iterator_Ex): + + New constructors that position the iterator at the given + ACE_Hash_Map_Entry. + + * ace/Lib_Find.cpp (ldfind): + + Place parentheses around ternary operator "?:" conditional to + address an operator precedence problem. In this case, an + expression such as "a + b ? 0 : 1" was used, which is equivalent + to "(a + b) ? 0 : 1" instead of the desired "a + (b ? 0 : 1)". + + Changed local variable name from "got_suffix" to "has_suffix" to + clarify how the variable is being used. + + * ace/OS_NS_Thread.inl (rw_unlock): + + Fixed potential deadlock in case where reference count is one. + Addresses a Coverity DEADLOCK error. + + * ace/OS_NS_dirent.cpp (scandir_emulation): + + Fixed potential dereferencing of zero pointer reported by the + Coverity FORWARD_NULL checker. + + * ace/OS_NS_fcntl.cpp (open): + + Return if SetFilePointer() call fails. Addresses Coverity + CHECKED_RETURN error. + + Added support for large files SetFilePointer() calls. Thanks to + Russell Mora for this fix. + + * ace/OS_NS_stdio.cpp (fopen): + + Fixed potential crash if null mode string is passed to this + method. + + * ace/OS_NS_stdio.inl (fdopen): + * ace/OS_NS_unistd.inl (isatty): + + No need to check for ACE_LACKS_INTPTR_T. Just use intptr_t in + all cases. ACE now supplies this typedef if the platform + doesn't. + + * ace/OS_TLI.h (t_bind): + * ace/OS_TLI.inl (t_bind): + + Work around HP aCC 3.63 namespace scoping problem using typedef + hack in use for other structures. + + * ace/Select_Reactor_Base.cpp: + * ace/Select_Reactor_Base.h: + * ace/Select_Reactor_Base.inl: + + Changed underlying event handler container from a simple array + to an ACE_Hash_Map_Manager<> on Windows, and to an + ACE_Array_Base<> on UNIX-like platforms. + + Use of an ACE_Hash_Map_Manager<> on Windows allows for faster + event handler searches. + + Use of an ACE_Array_Base<> on UNIX-like platforms allows us to + leverage advantages using a container (improved + exception-safety, container interface, etc), while still + retaining the direct file descriptor to event handler mapping at + essentially no cost to footprint relative to the previous + implementation. + + (bind): + + Disallow binding of a nil event handler pointer to the + repository. It is deferenced later on this method. Addresses a + potential crash. + + * ace/Service_Config.cpp (current): + + Simplified these methods. + + Removed global lock that was held when accessing TSS. Only + initialization of global implementation needs to synchronized + with that lock. + + Removed redundant accesses to TSS. + + * ace/Service_Config.h: + + Removed stray semi-colon. + + (impl_): + + This method no longer needs to return the pointer by reference. + + * ace/Service_Repository.cpp: + + Changed loop index type so that it matches repository size type + (an unsigned integer), and updated loop decrement to take into + account the index type is now unsigned. + + * ace/Sock_Connect.h (ipv4_enabled): + * ace/Sock_Connect.cpp (ipv4_enabled): + + New run-time check for existence IPv4 stack. Some hosts only + contain IPv6 stacks. + + From Sriram Chandramouli + (get_fqdn): + + New method that retrieves fully qualified domain. getaddrinfo() + doesn't always provide the desired results. + + * ace/Svc_Conf.y (ace_get_module): + * ace/Svc_Conf_y.cpp (ace_get_module): + + Simplified explicit casts. + + Prevent dereferencing of potentially null pointer. + + * ace/System_Time.cpp: + * ace/System_Time.h: + + No need to include "ace/Malloc_T.h", "ace/MMAP_Memory_Pool.h" + and "ace/Null_Mutex.h". Forward declarations are sufficient. + + Use time_t type instead of ACE_UINT32 when returning times, such + as those returned from ACE_OS::time(). Addresses lack of + precision issues. + + * ace/Thread_Manager.cpp (wait): + + Addressed a Coverity CHECKED_RETURN error. There's no need to + check the return value of ACE_Thread::join() in this case. + Explicitly cast the return value to "void". + + * ace/Time_Value.h (ACE_ONE_SECOND_IN_USECONDS): + + Made this constant type-safe. It is now of type suseconds_t, + instead of a preprocessor symbol definition. + + * ace/UUID.cpp (lock): + + Addressed USE_AFTER_FREE Coverity error. Do not return a + pointer to the previous lock. It may have been destroyed. + + * ace/UUID.h (lock): + + Changed return type from "ACE_SYNCH_MUTEX*" to "void". The + interface/implementation does not provide a means to safely + return the previous lock instance. + + * ace/ace_wchar.inl (convert): + + Corrected calculation of wide string length. + + * bin/MakeProjectCreator/config/acexml.mpb: + + No longer any need to explicitly disable ACEXML in the + ace_for_tao configuration. + + * include/makeinclude/platform_irix6.x_sgic++.GNU: + + SGI 7.3.x compiler doesn't have the 3506 error code. Do not + attempt to supress it. + +Mon Oct 23 22:24:01 UTC 2006 Ossama Othman + + * ace/Unbounded_Queue.cpp (set): + + Explicitly initialize dummy value. Addresses "use of + uninitialized variable" g++ 4.1 warning when the variable is a + POD type. + + * ace/ace_for_tao.mpc: + + Removed unnecessary semaphore related files. + + Added missing ace/Truncate.h header. + +Mon Oct 23 21:44:32 UTC 2006 Ossama Othman + + * ace/Truncate.h (Truncator): + + Borland doesn't appear to be able to grok the use of the + function call operator in the ACE_Utils::Truncate<> function + template. Replaced the Truncator<>::operator() function call + operator with a static Truncator<>::truncate() method instead. + +Mon Oct 23 13:29:15 UTC 2006 Olli Savia + + * ACE-INSTALL.html: + * ace/Mem_Map.h: + * ace/Mem_Map.inl: + * ace/Mem_Map.cpp: + * ace/OS_NS_Thread.inl: + * ace/OS_NS_sys_mman.inl: + * ace/Reverse_Lock_T.h: + * ace/Task_Ex_T.h: + * ace/Task_T.h: + * ace/config-lynxos.h: + * include/makeinclude/platform_lynxos.GNU: + + Removed LynxOS 3.x support. + +Mon Oct 23 12:59:35 UTC 2006 Chad Elliott + + * bin/generate_compile_stats.sh: + + Corrected a bug with my previous change. If config.h or + platform_macros.GNU were not present, the html would be incorrect. + I also added default.features to the list of configuration files + that are displayed. + +Mon Oct 23 06:34:24 UTC 2006 Douglas C. Schmidt + + * ace/os_include/os_pthread.h: Changed + + # if !defined (ACE_LACKS_RWLOCK_T) + + to + + # if !defined (ACE_LACKS_RWLOCK_T) && !defined (ACE_HAS_PTHREADS_UNIX98_EXT) + + to stop a compile error on Solaris after SunOS 5.8. Thanks to + Boris Kaminer for reporting + this fix. + +Sun Oct 23 00:29:55 UTC 2006 Ossama Othman + + * ace/Truncate.h: + + In the Borland-specific workaround, explicitly cast return value + of ACE_Numeric_Limits::max() of the smaller unsigned type to the + unsigned larger type to which it is being compared. Addresses + non-intuitive "comparison of signed and unsigned types" warning + issued by Borland compiler. Borland promotes unsigned char to + int, instead of unsigned int, when comparing to unsigned int. + This implicit type promotion behavior complies with the C++ + standard, but is a bit awkward nonetheless (IMHO :)). Thanks to + Johnny for pointing out Borland's explanation of the + non-intuitive warning. + +Sun Oct 22 08:11:25 UTC 2006 Ossama Othman + + * ace/Token_Request_Reply.inl (token_name): + + Simplified use of ACE_Utils::Truncate<> function template. Only + the "TO" type must be explicitly specified. The "FROM" type is + deduced automatically by the compiler. Note that explicitly + specifying both template parameters is perfectly valid, too. + + * ace/Truncate.h (Truncator): + + Added char/int specializations for Borland to allow the + Integer_Truncate_Test to compile. All of the Borland-specific + Truncator specializations are meant to be a temporary workaround + until Borland C++ is capable of supporting the generalized + implementation. + +Sat Oct 21 14:49:21 UTC 2006 Steve Huston + + * ace/TSS_T.{h cpp}: Added "volatile" keyword to once_ member + since it can be changed by other threads. Removed the lock + acquiring from the ts_object() methods - after once_ is checked, + there are no further needs for locks. When needed, the key_ is + set up by ts_init() which does acquire a lock. This avoids a lock + acquire/release cycle on all calls when initialization of the + ACE_TSS object is not required, speeding up performance. Thanks to + Guy Peleg for reporting this and + to Russell Mora for assisting in + analyzing the situation and recommending the particular fixes. + + * ace/Logging_Strategy.h: Minor doxygen improvements. + + * ace/Sock_Connect.cpp: When checking for IPv6 interfaces on Windows, + there's two conditionally compiled blocks of code. One block was + built if ACE_HAS_IPV6 SIO_ADDRESS_LIST_QUERY are both defined; the + other was built if ACE_HAS_IPV6 is defined. Added the check for + SIO_ADDRESS_LIST_QUERY to the second case as well since it makes + no sense to run it if the first isn't built. Thanks to Andre + Kostur for this fix. Also see: + Mon Oct 16 14:24:25 UTC 2006 Steve Huston + + * ace/Task_T.h (reply): Clarified what happens on a reply(). Thanks + to Doug Schmidt for explaining the rationale for this. + + * ace/Token_Request_Reply.inl (token_name): VC7.1 had trouble grokking + the ACE_Utils::Truncate arguments in this case, so add the types + to a more complete specification of what template is desired. + +Sat Oct 21 15:19:46 UTC 2006 Steve Huston + + * configure.ac: Removed the check for LINUX_VERSION that disabled + the check for epoll on Linux. Just let the check run - the macros + used checked the kernel/C version used to build the kernel instead + of the running kernel itself (I think...). In any event, the + use of the macros to disable the check prevented the check from + running on systems (such as RHEL 4) that do have epoll. Thank you + to Brian Campbell for researching + this area. + +Sat Oct 21 10:48:12 UTC 2006 Martin Corino + + * bin/PerlACE/RunTest.pm: + * bin/PerlACE/ProcessVX.pm: + * bin/PerlACE/ProcessVX_Unix.pm: + + Changes to accomodate running autotests for VxWorks RTPs on + Linux hosts. + +Sat Oct 21 04:34:33 UTC 2006 Ossama Othman + + * ace/OS_NS_stdlib.cpp: + + Always include "ace/Numeric_Limits.h" in the ACE_LACKS_MKSTEMP + case. There is no need to conditionally include it when "max" + is undefined. Addresses VxWorks build errors. + + * ace/Truncate.h: + + Only use workaround for Borland compiler versions less than or + equal to 0x582. Thanks to Johnny for the suggestion. + + * tests/Integer_Truncate_Test.cpp (sizeof_from_lt_sizeof_to): + + Explicitly cast types in inequality comparison to silence + comparison of signed and unsigned warnings. It's not clear why + the warning is occuring since both types are unsigned. + + Removed remaining set of redundant parentheses that were + missed in a previous commit. + +Fri Oct 20 12:55:12 UTC 2006 Johnny Willemsen + + * ace/Service_Manger.{h,cpp}: + Changed debug_ member to a real bool + +Fri Oct 20 12:40:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_socket.inl (bind): + * ace/config-rtems.h: + Added ACE_LACKS_BIND + + * ace/Basic_Types.h: + Fixed compile problems with BCB6 + +Fri Oct 20 12:05:12 UTC 2006 Johnny Willemsen + + * ace/Log_Record.inl: + Added check for ACE_LACKS_NTOHL and ACE_LACKS_HTONL + + * ace/config-rtems.h: + Added ACE_LACKS_NTOHL and ACE_LACKS_HTONL when no networking + is available + +Fri Oct 20 09:56:12 UTC 2006 Johnny Willemsen + + * ace/INET_Addr.h: + Small change to improve doxygen documentation + + * ace/OS_NS_sys_socket.inl (listen): + Added ACE_LACKS_LISTEN + + * ace/config-rtems.h: + Added ACE_LACKS_LISTEN + +Fri Oct 20 09:36:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_nodeapplicationmanager.mpb: + * bin/MakeProjectCreator/config/ciao_nodemanager_stub.mpb: + * bin/MakeProjectCreator/config/ciao_targetmanager_stub.mpb: + New base projects + + * bin/MakeProjectCreator/config/ciao_static_dnc_app.mpb: + Use the new base projects above + + Thanks to Abdul Sowayan + for delivering these files + +Fri Oct 20 09:00:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_socket.h: + Defined AF_UNSPEC and PF_UNSPEC when these are not defined by the + OS header files. + +Fri Oct 20 08:55:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_uio.h: + When INADDR_ANY is not defined, then define it, we need it in several + of the ACE header files + +Fri Oct 20 08:44:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_uio.h: + We define iovec when ACE_WIN32 was defined, changed this to a new + define, ACE_LACKS_IOVEC to make it easier to use with other platforms + + * ace/config-win32-common.h: + Added ACE_LACKS_IOVEC + + * ace/config-rtems.h: + When no networking has been configured, also define ACE_LACKS_IOVEC + +Thu Oct 19 22:28:59 UTC 2006 Shanshan Jiang + + * contrib/minizip/iowin32.c + * contrib/minizip/iowin32.h + Removed these files. + +Thu Oct 19 23:20:26 UTC 2006 Ossama Othman + + * examples/IPC_SAP/SOCK_SAP/CPP-inserver.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: + * examples/C++NPv1/Reactive_Logging_Server.h: + + Fixed integer/void* conversion related warnings by using + the "intptr_t" type instead of "int" or "long". + +Thu Oct 19 22:58:02 UTC 2006 Ossama Othman + + * ace/Truncate.h: + + Borland compilers currently cannot handle the template + meta-programming in this header. Work around the limitation by + explicitly specializing the ACE_Utils::Truncator<> structure + template for a select few 32- and 64-bit integers. More will be + added as needed. + +Thu Oct 19 17:25:16 UTC 2006 Ossama Othman + + * tests/Integer_Truncate_Test.cpp: + + Removed redundant parentheses. + +Thu Oct 19 15:25:12 UTC 2006 Johnny Willemsen + + * bin/generate_rel_manpages: + Updated doxygen version + + * bin/MakeProjectCreator/templates/gnu.mpb: + Removed kylix support + +Thu Oct 19 13:19:12 UTC 2006 Johnny Willemsen + + * ace/OS_main.h: + Added main for rtems + +Thu Oct 19 11:48:12 UTC 2006 Johnny Willemsen + + * ace/Rtems_init.c: + Fixed empty translation unit warnings + +Thu Oct 19 08:27:12 UTC 2006 Martin Corino + + * include/makeinclude/platform_openvms.GNU: + Small change to create hardlinks for produced executables. + +Wed Oct 18 16:19:38 UTC 2006 Shanshan Jiang + + * contrib/minizip/minizip.suo + * contrib/minizip/miniziplibrarycode.suo + Removed these files. + +Wed Oct 18 13:52:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_rtems.x_g++.GNU: + Major cleanup of old stuff and always define ACE_HAS_RTEMS + + * etc/rtems_init.c: + * ace/rtems_init.c: + Another move, for rtems we require some functions to always + be available, this defines our network settings and much more. + Because we always build static, we moved this to the ACE lib, + on rtems we define ACE_HAS_RTEMS and then compile the contents + of this file. This way the functions in this file are available + in any executable we link + + * ace/OS.h: + * ace/os_include/os_signal.h: + * ace/os_include/sys/os_types.h: + * ace/OS_NS_stdio.h: + * ace/OS_NS_time.inl: + Replaced __rtems__ with ACE_HAS_RTEMS + + * ace/ace.mpc: + Added rtems_init.c + +Wed Oct 18 13:01:12 UTC 2006 Johnny Willemsen + + * include/makeincludes/rules.bin.GNU: + * include/makeincludes/rules.lib.GNU: + * include/makeincludes/wrapper_macros.GNU: + * include/makeincludes/platform_linux_borland.GNU: + Removed kylix support + +Wed Oct 18 10:05:12 UTC 2006 Johnny Willemsen + + * apps/Gateway/Gateway/File_Parser.cpp: + Removed egcs workaround + +Wed Oct 18 08:07:12 UTC 2006 Johnny Willemsen + + * tests/rtems_init.c: + * etc/rtems_init.c: + Moved from tests to etc + +Tue Oct 18 06:27:12 UTC 2006 Johnny Willemsen + + * examples/Reactor/Misc/test_signals_1.cpp: + * performance-tests/Misc/context_switch_time.cpp: + Renamed the global count variables to another name. These triggered + a bug in the VxWorks 5.5.2 compiler which we reported to windriver. + By renaming these we will get an error free compilation. + +Tue Oct 18 06:02:28 UTC 2006 Ossama Othman + + * ace/Basic_Types.h (intptr_t, uintptr_t): + + Provided suitable typedefs for these standard types when + ACE_LACKS_INTPTR_T is defined. + + * ace/Event_Handler.cpp (~ACE_Event_Handler_var): + + Only use an ACE_Errno_Guard if the underlying ACE_Event_Handler + pointer is non-zero. Saves a TSS access in the zero + ACE_Event_Handler pointer case. + + (operator=): + + Made strongly exception safe. + + * ace/FILE_IO.cpp (send, recv): + * ace/Message_Queue.cpp (enqueue, dequeue): + * ace/Message_Queue_T.cpp: + * ace/OS_NS_unistd.inl (hostname): + + Explicitly supply the "int" "TO" type to the + ACE_Utils::Truncate<> function template. It must now be + explicitly specified since ACE_Utils::Truncate<> now supports + truncation to all integer types, not just "int". + + * ace/Global_Macros.h (ACE_STATIC_CONSTANT): + + New macro for in-class static integral constant initialization + that works around compilers that don't like such initialization. + In-class integral constants in this case are meant to be + compile-time constants so that they may be used as template + arguments, for example. BOOST provides a similar macro. + + * ace/OS_NS_stdlib.inl (atop): + * ace/OS_NS_stdio.cpp (fopen): + + Removed ACE_LACKS_INTPTR_T check. It is no longer needed. + + * ace/Truncate.h: + + Generalized the ACE_Utils::Truncate<> function template + implementation for all integer types. + + * tests/run_test.lst: + * tests/tests.mpc: + + Added new "Integer_Truncate_Test" test that verifies the + ACE_Utils::Truncate<> function template works for all type + size/sign scenarios. + +Tue Oct 17 21:28:11 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Gestalt.cpp (parse_args_i): + + Checking for no arguments was missed inadvertently in the + original change-set from "Tue Oct 17 16:27:27 UTC 2006 ..." + +Tue Oct 17 21:09:36 UTC 2006 Shanshan Jiang + + * contrib/minizip/ChangeLogUnzip + * contrib/minizip/crypt.h + * contrib/minizip/ioapi.c + * contrib/minizip/ioapi.h + * contrib/minizip/iowin32.c + * contrib/minizip/iowin32.h + * contrib/minizip/miniunz.c + * contrib/minizip/minizip.c + * contrib/minizip/minizip.mpc + * contrib/minizip/minizip_export.h + * contrib/minizip/mztools.c + * contrib/minizip/mztools.h + * contrib/minizip/unzip.c + * contrib/minizip/unzip.h + * contrib/minizip/zip.c + * contrib/minizip/zip.h + Added the minizip project. Thanks to Krishnakumar Balasubramanian + for providing this. + +Tue Oct 17 17:17:36 UTC 2006 Douglas C. Schmidt + + * ace/OS_NS_unistd.inl (truncate): SetFilePointerEx() returns a + BOOL not a DWORD (unlike SetFilePointer()..). Thanks to Boris + Kaminer for reporting this. + +Tue Oct 17 16:27:27 UTC 2006 Iliyan Jeliazkov + + * ace/DLL_Manager.cpp: + * ace/Parse_Node.cpp: + + Updated logging messages. + + * ace/Service_Gestalt.cpp: + + Updated logging messages to exclude the "e-word" causing false + positives in the Service_Config_Test. Updated comments. + +Tue Oct 17 12:35:12 UTC 2006 Johnny Willemsen + + * apps/soreduce/Library.cpp: + taoversion is not a valid base project. Thanks to Manuel Traut + for reporting this. + +Tue Oct 17 12:09:12 UTC 2006 Johnny Willemsen + + * ACE-INSTALL.html: + Updated supported platforms by Remedy IT. New are VxWorks 5.5.2, + OpenVMS 8.3, RTEMS and LynxOS. + +Tue Oct 17 12:05:12 UTC 2006 Johnny Willemsen + + * ace/config-rtems.h: + Cleanup + + * include/makeinclude/plaform_rtems.x_g++.GNU: + Improved for rtems 4.6.6 + +Tue Oct 17 07:03:12 UTC 2006 Johnny Willemsen + + * ace/config-rtems.h: + * ace/OS_NS_unistd.inl: + Added support for ACE_LACKS_FDOPEN + +Mon Oct 16 21:29:57 UTC 2006 Phil Mesnier + + * THANKS: Updated Chris Reed's entry in the list. + +Mon Oct 16 20:04:59 UTC 2006 Iliyan Jeliazkov + + This change fixes bug#2612. See the description for the gory + details. In a nutshell, the problem is caused by the fact that + static services, loaded from a DLL, as part of a dynamic service + initialization can not be safely finalized when the dynamic + service's DLL gets unloaded. This was historically handled by + simply not unloading DLLs, and by finalizing all services at + process exit. With the introduction of the local configurations + feature, this changed. + + The finalization order was supposed to be guaranteed by the + ordering of the services in the repository. It really was a + kludge, because when dynamically loading and removing services + the order can change. Then whenever the process tries to clean + up, the dynamic service's DLL can be unloaded (because it gets + finalized first), and the static services' destructor code would + become inaccessible. The situation results in a SEGV at exit(). + + * ace/DLL.h: + * ace/DLL.cpp: + + Made assignment operator return a non-const reference to make it + well-formed. See C++ Standard, section "[special]". + + * ace/DLL_Manager.cpp: + * ace/Dynamic_Service_Base.cpp (instance): + * ace/Parse_Node.cpp: + + Fixed formatting and logging + + * ace/Service_Config.cpp (parse_args_i): + + Fixing a bug related to parsing the command line options that + take arguments. Thanks to Aaron Scamehorn for reporting it. + + * ace/Service_Gestalt.cpp: + + Added ACE_Service_Dynamic_Guard (formerly + ACE_Service_Type_Forward_Declaration_Guard) which helps to + resolve an issue with hybrid services, i.e. dynamic services, + accompanied by static services in the same DLL. Only automatic + instances of SDG are supposed to exist. Those are created during + (dynamic) service initialization and serve to: + + (a) Ensure the service we are loading is ordered last in the + repository, following any other services it may cause to + register, as part of its own registration. This is a common case + when loading dynamic services from DLLs - there are often static + initializers, which register static services. + + (b) The SDG instance destructor detects if the dynamic service + initialized successfully and "fixes-up" all the newly registered + static services, so that each holds a reference to the DLL, from + which they have originated. + + Updated comments and formatting. + + * ace/Service_Object.h (dll): + * ace/Service_Object.inl (dll): + + Added void dll (const ACE_DLL&) to make it possible to + "relocate" services registered through static initializers found + in DLL's code segment(s). + + * ace/Service_Object.cpp (fini): + + Modified ACE_Service_Type::fini() to ensure the DLL associated + with the service is properly closed. This in conjunction with + the gestalt changes above, makes it possible to safely and + completely unload a service. + + * ace/Service_Repository.h: + * ace/Service_Repository.cpp (remove_i,relocate_i,relocate): + + Added relocate(), which allows association of a (static) service + objects with a DLL. Per changes to ACE_Service_Gestalt, + above. Added a counterpart private relocate_i(), which does not + obtain locks. + + * tests/Service_Config_Test.cpp: + + Added a test that combines more than one argument-taking command + line option to guard against regression for the bug fixed in + ACE_Service_Config::parse_args_i (see above). + +Mon Oct 16 19:20:12 UTC 2006 Johnny Willemsen + + * ace/config-rtems.h: + Updated with more changes needed for rtems + + * ace/os_include/os_signal.h: + Added specific defines for rtems + + * ace/OS_NS_time.cpp (difftime): + Removed not used variable and get gmtime/gmtime_r from the + global scope + + * ace/OS_NS_string.{h,cpp,inl}: + Added ACE_LACKS_STRTOK_R to make the rtems port easier + +Mon Oct 16 14:24:25 UTC 2006 Steve Huston + + * ace/OS_NS_netdb.{cpp inl} (gethostbyname[_r], gethostbyaddr[_r]): + Check the specified string (name or addr) for unspecified or of + 0 length and return 0 if so - bypasses a system call and a possible + memory leak. Thanks to Howard Finer + for these fixes. + + * ace/Sock_Connect.cpp (get_ip_interfaces): Don't report an error if + we can't find IPv6 addresses. It may be on a system with ACE_HAS_IPV6 + support compiled but IPv6 not configured/enabled. Thanks to Andre + Kostur for reporting this. + + * ace/WFMO_Reactor.cpp (ok_to_wait): In the ACE_HAS_WINCE block, + change fwaitAll arg from TRUE to FALSE - it must be FALSE on + WinCE (thru WinMobile 5) per MSDN. Thanks to Drew Reynaud + for this fix. + + * THANKS: Added Drew Reynaud to the Hall of Fame. + +Mon Oct 16 14:21:48 UTC 2006 Chad Elliott + + * bin/generate_compile_stats.sh: + + I accidentally deleted a letter in my previous commit. + +Mon Oct 16 14:02:12 UTC 2006 Johnny Willemsen + + * ace/config-rtems.h: + Added first set of missing defines + + * ace/os_include/sys/os_select.h: + * ace/os_include/sys/os_uio.h: + Removed rtems specific part, not needed anymore + + * ace/os_include/sys/os_types.h: + Added rtems check + + * include/makeinclude/plaform_rtems.x_g++.GNU: + Updated + +Mon Oct 16 13:47:25 UTC 2006 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Use the create_command_line_string() method instead of printing + the command line directly. This opens the door for disabling this + functionality. + +Mon Oct 16 12:18:14 UTC 2006 Chad Elliott + + * ace/OS_NS_Thread.inl: + * ace/os_include/os_semaphore.h: + + The feature that I put in for Gottwald Port on Mon Mar 6 18:25:41 + UTC 2006 causes a performance overhead for semaphores where + ACE_HAS_POSIX_SEM is defined (SunOS, HP-UX, MacOS X, etc.). For + those that are not interested in timed semaphores, this feature + provides nothing and is detemental to performance. Now, this + feature is disabled by default and must be manually enabled by + defining the ACE_HAS_POSIX_SEM_TIMEOUT_EMULATION macro. + +Mon Oct 16 12:06:10 UTC 2006 Chad Elliott + + * bin/generate_compile_stats.sh: + + Added some changes to make this script usable for software other + than ACE+TAO+CIAO. + + - Enhanced the usage message. + - Fixed minor HTML errors. + - Added options to set the base root directory and software title. + +Mon Oct 16 11:53:12 UTC 2006 Johnny Willemsen + + * examples/IOStream/client/IOStream_Client.mpc: + * examples/IOStream/server/IOStream_Server.mpc: + Added exename so that we create an exe, not a dll + + * examples/IOStream/client/.cvsignore: + * examples/IOStream/server/.cvsignore: + Removed duplicate lines + + * examples/IOStream/server/iostream_server.cpp: + Added needed include for building with VxWorks 5.5.2 + +Mon Oct 16 08:33:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/templates/ciao_static_dnc_app.mpb: + New base project for static dnc. + Thanks to Abdul Sowayan + for creating this file + +Sun Oct 15 23:22:52 UTC 2006 Phil Mesnier + + * bin/tao_orb_tests.lst: + Added Bug_2683_Regression to the test suite. + +Fri Oct 13 18:26:19 UTC 2006 Andy Stafford + + * include/makeinclude/wrapper_macros.GNU: + + Added 'lksctp' as recognized option to sctp documentation. + +Fri Oct 13 18:13:00 UTC 2006 Chad Elliott + + * bin/cle.pl (getDefaultDomain): + + Fixed a bug where extra text would be part of the domain name when + the /etc/hosts file contains an alias after the fully qualified + host name. + +Fri Oct 13 12:32:35 UTC 2006 Chad Elliott + + * bin/PerlACE/Process_Unix.pm: + + Added support for remote testing on UNIX only. Currently, ssh or + rsh is used to run an executable on the remote machine. The + remote test capability is only enabled if the RemoteInformation + method is called on the PerlACE::Process object. For more + details, see the RemoteInformation method in this module. + +Fri Oct 13 10:25:12 UTC 2006 Johnny Willemsen + + * apps/soreduce/Library.cpp: + aceversion is not a valid base project. Thanks to Manuel Traut + for reporting this. + +Thu Oct 12 16:44:34 UTC 2006 Douglas C. Schmidt + + * ace/Log_Record.cpp (operator<<): Zapped the nonconst_record and + const_cast since this is no longer needed as per the following + change: + + Sun Aug 12 00:34:42 2001 Steve Huston + * ace/Log_Record.h: + * ace/Log_Record.i (msg_data()): Changed ACE_TCHAR *msg_data() + to: const ACE_TCHAR *msg_data (void) const. Makes it safer, + and conforms to all current usage inside ACE. Also makes + C++ Network Programming examples simpler :-) + + Thanks to Abdul Sowayan + for reporting this. + +Thu Oct 12 15:45:24 UTC 2006 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + If a custom definition has an 'output_option' set, the order of + listing the input file changes such that it is listed before the + output_option setting in the build rule. + + * bin/auto_run_tests.pl: + + Added a new option, -l, which can be used to specify an arbitrary + list of tests. + +Thu Oct 12 12:20:12 2006 Johnny Willemsen + + * ace/Svc_Conf.h: + Fixed incorrect placed ACE_BEGIN_VERSIONED_NAMESPACE_DECL macro. + Thanks to Alexander Libman + for reporting this + +Wed Oct 11 15:24:04 UTC 2006 Steve Huston + + * ace/Log_Record.{h inl cpp}: Removed the set_msg_data_ptr() + method - it opens the possibility of putting a buffer in place + that can't be freed properly. All of the memory allocating and + deleting should be done internally to this class. The removed + method was only used internally. + Added a private msg_data_size_ member that keeps the allocated size + of msg_data_ in ACE_TCHARs (not bytes) to tell if the buffer needs + to be resized. Comparing to the string length is incorrect - it + causes buffer reallocating whenever a short logged message is + followed by a longer one, even if both are much shorter than the + allocated length of msg_data_. When a ctor allocates a msg_data_ + area, set the first spot to '\0' to a call to msg_data_len() won't + get random answers or a crash. + (msg_data (const ACE_TCHAR *)): Changed this method to return int, + not void. It also will now reallocate the msg_data_ buffer if needed + to hold the specified string. operator<< now uses msg_data() to set + the string instead of the now removed set_msg_data_ptr() method, + keeping all msg_data_ allocation and release in the same class. + (operator<<): Fix memory leak when setting a new msg_data_ + buffer. Thanks to Arturo Montes for letting us know about the leak. + + * docs/ACE-guidelines.html: Clarify the format of ChangeLog entries. + Remove the recommendation to always test on egcs; things should be + tested on at least Windows and Linux, but egcs is outdated. + +Tue Oct 10 18:46:12 2006 Johnny Willemsen + + * ACE-INSTALL.html: + Document how to get a current copy from subversion + +Tue Oct 10 14:16:12 2006 Johnny Willemsen + + * ace/CDR_Stream.cpp: + Fixed incorrect comment + +Tue Oct 10 12:54:00 UTC 2006 Simon Massey + + * ace/config-win32-msvc.h: + Changed the MFC build run-time dll decorators to match + the current build system settings. + +Tue Oct 10 06:08:12 2006 Johnny Willemsen + + * bin/fuzz.pl: + Changed check for empty inline files to also check for empty + source files + + * bin/MakeProjectCreator/config/avoids_corba_e_compact.mpb: + * bin/MakeProjectCreator/config/avoids_corba_e_micro.mpb: + New avoids projects + + * etc/ace.doxygen: + Expand some more macros, should improve documentatation + + * html/README: + Updated download location to ISIS + +Tue Oct 10 06:03:12 2006 Johnny Willemsen + + * docs/ACE-bug-process.html: + Updated to mention svn + + * docs/Download.html: + Commented out the source packages that are not complete at this moment + +Mon Oct 09 09:07:12 2006 Johnny Willemsen + + * bin/generate_rel_manpages: + Fixed an error in this script and updated the location to which the + generated packages should be copied to + +Mon Oct 09 09:03:12 2006 Johnny Willemsen + + * docs/Download.html: + Updated with the new download locations + + * docs/bczar/bczar.html: + Updated documentation generation instructions + +Thu Oct 05 00:35:37 2006 William R. Otte wotte@dre.vanderbilt.edu + + * ACE version 5.5.3 released. + +Tue Oct 3 16:45:35 UTC 2006 Shanshan Jiang + + * NEWS + Updated the NEWS to add the changes for ACE_Hash_MultiMap_Manager + class and executionmanager_stub and plan_generator base projects. + +Tue Oct 3 15:02:14 UTC 2006 Steve Huston + + * NEWS: Described the ACE_Refcounted_Auto_Ptr effects of + Thu Jul 6 20:45:15 UTC 2006 Steve Huston + +Mon Oct 2 12:21:12 UTC 2006 Johnny Willemsen + + * ace/Log_Msg.cpp: + Const/bool improvements + +Mon Oct 2 11:26:12 UTC 2006 Johnny Willemsen + + * ace/Log_Msg.{h,cpp}: + Changed is_set_ conditional values member to bool + +Sat Sep 30 14:00:33 UTC 2006 Steve Huston + + * tests/Cached_Allocator_Test.cpp: + * tests/Codecs_Test.cpp: + * tests/Enum_Interfaces_Test.cpp: + * tests/Get_Opt_Test.cpp (run_test): + * tests/Naming_Test.cpp: + * tests/Reactor_Notification_Queue_Test.cpp: + * tests/Reference_Counted_Event_Handler_Test.cpp: + * tests/Timer_Queue_Reference_Counting_Test.cpp: + Correct logging format for wide-char build. + +Fri Sep 29 18:54:29 UTC 2006 Steve Huston + + * ace/OS_NS_signal.inl (sigaction): In the !ACE_HAS_SIGACTION_CONSTP2 + case, use ACE_SIGACTION instead of "struct sigaction" to pick up + the funky HP hack. Also see: + Mon Jan 23 22:08:56 UTC 2006 Steve Huston + +Fri Sep 29 10:00:04 UTC 2006 Johnny Willemsen + + * examples/Web_Crawler/Web_Crawler.mpc: + Added avoids+=uses_wchar for borland and bmake, the Borland + compiler gives a warning which can't be easily suppressed and + by not building this project we do get a few new green builds + +Thu Sep 28 19:37:13 UTC 2006 Iliyan Jeliazkov + + * bin/diff-builds.pl: + Fixed the finding of the nearest earlier build for a given date. + +Thu Sep 28 16:53:14 UTC 2006 Shanshan Jiang + + * bin\MakeProjectCreator\config\ciao_executionmanager_stub.mpb + * bin\MakeProjectCreator\config\ciao_plan_generator.mpb + Added the base projects for executionmanager_stub and plan_generator. + +Thu Sep 28 14:46:43 UTC 2006 Iliyan Jeliazkov + + * bin/diff-builds.pl: + + Updated to fix temporary files creation. Now all those are put + in the temporary files directory. Fixed the ability to compare + just two dates. + +Thu Sep 28 13:35:04 UTC 2006 Johnny Willemsen + + * ace/config-hpux-11.00.h: + Removed ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION that + was set for gcc, with this define set the ACE library doesn't + build. + + * ace/CDR_Stream.cpp: + Initialise pointer with 0 + + * ace/TP_Reactor.{h,inl}: + Changed owner from int to bool. + +Wed Sep 27 21:18:04 UTC 2006 Steve Huston + + * ace/Synch_Options.h: Corrected the table of possible Use_Reactor, + Timeout combinations - it was reversed. + + * ace/WFMO_Reactor.{h cpp}: Change the delete_signal_handler_, + delete_timer_queue_, delete_handler_rep_, delete_notify_handler_, + and open_for_business_ members from int to bool to more + accurately reflect their nature as yes/no indicators. + Also, initialize notify_handler_ to 0 in constructors to avoid + a UMR warning from Purify. + +Wed Sep 27 06:28:12 UTC 2006 Johnny Willemsen + + * bin/msvc_static_compile.pl: + Added protocols directory + +Tue Sep 26 09:49:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/dynamicany.mpb: + Derive from valuetype, needed to get AbstractBase::_nil() in a no + inline build. + +Mon Sep 25 16:29:42 UTC 2006 Douglas C. Schmidt + + * ace/ACE.cpp (send_n_i): Conditionally removed the check for + errno == ENOBUFS because Winsock send, or WSASend will try to + enqueue all buffer at once (to the kernel) and if not it will + return ENOBUFS, in which case the socket is always ready for + writing but actually winsock can never perform such write and we + have endless loop. Thanks to Aleksandar Vukajlovic for reporting this and suggesting a fix. + +Mon Sep 25 11:39:35 UTC 2006 Boris Kolpackov + + * ace/Bound_Ptr.inl: + * ace/Bound_Ptr.h: + + Applied workarounds that should fix compile errors on BCB6. + Thanks to Martin Corino for providing + the patch. + + * protocols/ace/TMCast/Messaging.hpp: + * protocols/ace/TMCast/TransactionController.hpp: + + Updated to use ACE_Strong_Bound_Ptr. + +Fri Sep 22 12:42:37 UTC 2006 Douglas C. Schmidt + + * docs/index.html: Added a link to the http://www.acejoy.com ACE + developers website in China. Thanks to Winston Zhang for creating this website. + +Tue Sep 19 12:27:47 UTC 2006 Douglas C. Schmidt + + * tests/Unload_libACE.cpp: Fixed the formatting of this file so it + conformed to ACE guidelines. + +Tue Sep 19 02:54:20 UTC 2006 Douglas C. Schmidt + + * ace/FILE_Connector.h: Changed the documentation to reflect the fact + that mkstemp() is used, not mktemp(). + +Thu Sep 21 16:51:34 UTC 2006 Ciju John + + * ace/TP_Reactor.h: + * ace/TP_Reactor.cpp: + The TP_Reactor signal handling implementation is + incomplete. In the current implementation under certain + circumstances (event loop breaks out if interrupted. This is + controlled via ACE_Select_Reactor_T::restart()), a properly + handled OS signal can break the reactor event loop in + an unpredictable manner. This is due to the fact that we cannot + predict which thread will receive the OS signal. Untill the + TP_Reactor signal handling is fixed, I am commenting it out. + +Thu Sep 21 15:13:19 UTC 2006 Phil Mesnier + + * bin/tao_orb_tests.lst: + Added new bug 2188 regression test. + +Mon Sep 18 10:56:29 UTC 2006 Steve Huston + + * include/makeinclude/platform_sunos5_sunc++.GNU: Add buildbits=64 + branch for Sun Studio 11 (Sun C++ 5.8). Thanks to Aleksandar + Vukajlovic for this. + + * THANKS: Added Aleksandar Vukajlovic to the Hall of Fame. + +Thu Sep 14 23:01:16 UTC 2006 Steve Huston + + * ace/Bound_Ptr.inl: Tweak syntax to try and work around apparant + issues with BCB6. + +Thu Sep 14 21:48:39 UTC 2006 Steve Huston + + * ace/OS_NS_Thread.inl (thr_getspecific): Removed the ACE_Errno_Guard + around ::TlsGetValue() in the ACE_HAS_WTHREADS case. The comments + near the code said (paraphrasing) "...it was to protect against + ACE_Log_Msg::instance() overwriting the error value before it had a + chance to be logged; although ACE_ERROR et al already store the + error value before calling ACE_Log_Msg::instance(), there may be a + chance that other uses of ACE_Log_Msg don't protect this way." + I have a report that having the errno guard in place is taking + over 10% CPU during a customer system's run-time. This is way too + much to have in a hot path, especially for a mis-placed guard. + It seems a little random to be picking on ACE_OS::thr_getspecific() + when there are many more OS calls in the ACE_Log_Msg::instance() + call path. + If there are really cases outside of ACE_ERROR... et al, then the + guard should be worked into ACE_Log_Msg::instance() method. However, + rather than try that now, let's see if there are any real issues, + since OS-level calls should be setting errno when errors are + noticed, propagating from GetLastError() via + ACE_OS::set_errno_to_last_error () as needed. + Thanks to Kelly Hickel for raising + this point. + +Wed Sep 13 18:25:37 UTC 2006 Boris Kolpackov + + * ace/Bound_Ptr.h: + * protocols/ace/RMCast/Reassemble.cpp: + + Re-applied my changes (Wed Sep 6) on build czar's (Steve + Huston) request. + +Tue Sep 12 18:07:57 UTC 2006 William R. Otte + + * docs/svn/svn-prefs.reg + * docs/svn/config + + Added pdf,eps,ps as binary file types. + +Tue Sep 12 13:56:22 UTC 2006 Douglas C. Schmidt + + * apps/JAWS3/small/SS_Service_Handler.h: Added #include + "ace/svc_export.h". Thanks to Andy Wang for reporting this. + +Tue Sep 12 13:56:09 UTC 2006 Douglas C. Schmidt + + * apps/JAWS3/small/SS_State_DONE.h: + * apps/JAWS3/small/SS_State_READ.h: Added #include + "ace/Synch_Traits.h". Thanks to Andy Wang for reporting this. + +Thu Sep 7 19:43:02 UTC 2006 Douglas C. Schmidt + + * ace/FILE_Connector.h (ACE_FILE_Connector): Updated the + documentation to remove mention of the return values. Thanks to + Hieu Ngyuen for + reporting this. + +Mon Sep 11 13:03:17 UTC 2006 Boris Kolpackov + + * ace/Bound_Ptr.h: + * protocols/ace/RMCast/Reassemble.cpp: + + Reverted my previous changes (Wed Sep 6) since BCB2006 + is unable to handle the required C++ constructs. + +Sun Sep 10 09:23:04 UTC 2006 William R. Otte + + * include/makeinclude/platform_g++_common.GNU + + Committing a fix provided by Ossama Othman (Ossama_Othman at symantec dot com) + to fix a problem with symbol visibility when building static libraries. + +Fri Sep 8 21:11:20 UTC 2006 Steve Huston + + * ace/CDR_Stream.cpp (ACE_OutputCDR::replace()): Fixed compile error + from apparant cut/paste error in ACE_ENABLE_SWAP_ON_WRITE path. + Thanks to JR Andreassen for reporting this. + + * ace/Bound_Ptr.h: Changed new constructor/assignment to use + dynamic_cast in order to be able to transport pointers through + that can go both up and down a class hierarchy. + (See Wed Sep 6 07:40:03 UTC 2006 Boris Kolpackov + ). + + * protocols/ace/RMCast/Protocol.h (clone(), clone_()): Replaced use of + naked pointers returned from clone_() with ACE_Strong_Bound_Ptr and + used new ACE_Strong_Bound_Ptr ctor to facilitate carrying a more- + refined type through a Profile_ptr and back. Closes up a window + for exception unsafeness noticed by Boris Kolpackov. Also see + Tue Aug 22 22:52:41 UTC 2006 Steve Huston + +Fri Sep 8 18:25:17 UTC 2006 Steve Huston + + * ace/Synch_Options.{h cpp}: Improved the documentation for this + class, particularly the table that explains the behavior for the + valid combinations of reactor-usage and timeout. Thank you to + Andriy Gapon for motivating this. + + Also changed the return type of operator[] from int to bool; its + meaning was always 1/0 but was overlooked in the sweep for this + type of thing last year. + + * NEWS: Added the ACE_Synch_Options::operator[] return type change. + + * THANKS: Added Andriy Gapon to the Hall of Fame. + +Wed Sep 6 07:40:03 UTC 2006 Boris Kolpackov + + * ace/Bound_Ptr.h: + + Added new constructor and assignment operator templates that + support the naked pointer-like implicit conversion. + + * protocols/ace/RMCast/Reassemble.cpp: + + Use the new constructor to get rid of reinterpret_cast. + +Tue Sep 5 21:28:02 UTC 2006 Nishanth Shankaran + + * bin/MakeProjectCreator/config/ciao_race_component.mpb: + * bin/MakeProjectCreator/config/ciao_race_default.mpb: + * bin/MakeProjectCreator/config/ciao_race_monitor.mpb: Added new + RACE specific base projects. + +Fri Sep 1 19:58:06 UTC 2006 Ciju John + + * bin/tao_orb_tests.lst: + Turn on nightly regression test for bug 1476. + +Fri Sep 1 13:49:12 UTC 2006 Martin Corino + + * bin/PerlACE/Run_Test.pm: + Increased process creation timeout for tests on openVMS. + +Thu Aug 31 01:45:06 UTC 2006 Sumant Tambe + + Added .xml files to it. + * docs/svn/config: + * docs/svn/svn-prefs.reg: + +Wed Aug 30 17:45:30 UTC 2006 Iliyan Jeliazkov + + This change fixes bug#2648 + + * ace/Service_Object.cpp: + + Fixed formatting. + + * ace/Service_Repository.cpp: + + Updated logging. + + * ace/Service_Types.h: + * ace/Service_Types.cpp: + + Added ACE_Service_Object_Type::initialized_ member variable to + hold the result of calling init() on the ACE_Service_Object. The + value is later consulted in ACE_Service_Object_Type::fini() to + determine if ACE_Service_Object::fini() should be + called. C++NPv2 (page 120) says that fini() must be called if + and only if, init() succeeded, i.e. returned 0. + +Wed Aug 30 17:18:52 UTC 2006 Shanshan Jiang + + * bin/MakeProjectCreator/config/ciao_config_handlers.mpb + Modified this file to fixed the "reference to `ACE_Singleton::instance()'"warnings + with FC5_Static build. + +Wed Aug 30 13:34:50 UTC 2006 William R. Otte + + * bin/make_release + + Updates to the make_release script to make it subversion compatible. + major updates to be aware of: + . Assumes the working copy it uses is flattened + . Must have DOC_ROOT set + . Script should be started from DOC_ROOT. + . Produces traditional (nested) releases + . Now produces a set of source-only kits in addition to + the traditional kits. + + IMPORTANT: The release makefiles have not been updated, and are + most likely broken. + + Producing a release is a two step process: + make_release -u # Update version numbers + make_release -k ace+tao+ciao # Create all kits. + +Wed Aug 30 12:19:12 UTC 2006 Johnny Willemsen + + * ace/CDR_Stream.{h,cpp}: + Use true/false consistently for the good_bit + +Wed Aug 30 05:57:12 UTC 2006 Johnny Willemsen + + * tests/Service_Config_Test.cpp: + Fixed argument not used warnings + +Tue Aug 29 21:17:26 UTC 2006 Steve Huston + + * tests/Service_Config_DLL.{h cpp}: + * tests/Service_Config_Test.cpp: Added a test for ACE_Service_Config's + behavior when a dynamic service's init() hook returns -1 (failure). + This was precipitated by Bugzilla #2648. + +Tue Aug 29 18:07:39 UTC 2006 Ossama Othman + + * examples/IPC_SAP/SSL_SAP/SSL_SAP.mpc: + * tests/SSL/tests.mpc: + + Disable MPC projects in these files that depend on features not + found in the "ACE for TAO" subset", i.e. ACE_Profile_Timer and + asynch I/O. + +Tue Aug 29 13:19:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added bug 2560 regression. It runs fine on windows but seem to + crash on linux exhibiting a bug that isn't fixed yet. + +Tue Aug 29 13:17:12 UTC 2006 Johnny Willemsen + + * bin/PerlACE/ProcessVX.pm: + Commented out the ProcessVX_Unix require, it resulted in + errors on test systems when they don't have Net::Telnet () + available. + +Tue Aug 29 11:16:12 UTC 2006 Johnny Willemsen + + * bin/PerlACE/Run_Test.pm: + * bin/PerlACE/ProcessVX_Unix.pm: + * tests/run_test.pl: + Changes for running tests on linux with vxworks 6.3 rtp model target + +Tue Aug 29 08:20:12 UTC 2006 Johnny Willemsen + + * tests/run_test.lst: + Don't run UUIDTest in ACE_FOR_TAO configuration + + * bin/ace-tests.lst: + Don't run wfmo reactor tests in ACE_FOR_TAO configuration + +Tue Aug 29 00:24:48 UTC 2006 Adam Mitz + + * docs/run_test.txt: + Fixed Perl bug in example (needed "" instead of '' to get $ variable + expansion) and added explanatory text on using $PerlACE::ACE_ROOT + and $PerlACE::TAO_ROOT. + +Tue Aug 29 00:26:56 UTC 2006 Ossama Othman + + * ace/SSL/ssl.mpc + * ace/SSL/ssl_for_tao.mpc + * bin/MakeProjectCreator/config/ssl_full.mpb: + * bin/MakeProjectCreator/config/ssl.mpb: + * bin/MakeProjectCreator/config/ssl_for_tao.mpb: + + Added support for new ACE_SSL subset "ACE_SSL_FOR_TAO" for + "ace_for_tao" configuration. The ACE_SSL_FOR_TAO subset merely + lacks asychronous I/O support. + +Tue Aug 29 00:04:29 UTC 2006 Ossama Othman + + * ace/ACE_export.h: + + SGI C++ 7.3 compiler does not support standard C++ "extern + inline" declarations. + + * ace/Log_Msg.cpp (log): + + Corrected scalar/vector operator delete() mismatch. The wide + string buffer was allocated as an array. Destroy it + accordingly. + + * ace/MMAP_Memory_Pool.cpp (ACE_MMAP_Memory_Pool): + + Prevent potential dereferencing of null pointer. + + * ace/Svc_Conf_Param.h: + + Corrected author information. + +Mon Aug 28 23:59:50 UTC 2006 Ossama Othman + + From Amnon Berger + * ace/SSL/SSL_Context.h (ACE_SSL_Context): + * ace/SSL/SSL_Context.cpp (certificate): + + Added support for reading an X.509 certificate from memory + instead of a file. + +Mon Aug 28 19:33:50 UTC 2006 Sumant Tambe + + A quick perl script to create a change-log-entry date and time. + * bin/cltime.pl: + + Added *.cidl *.pcd *.cdd + * docs/svn/config: + * docs/svn/svn-prefs.reg: + +Mon Aug 28 14:14:39 UTC 2006 Iliyan Jeliazkov + + * bin/tao_other_tests.lst: + Added TAO/orbsvcs/tests/Security/Big_Request/run_test.pl to the + list of SSL-based tests. Thanks to Johnny Willemsen + for pointig out that it was missing. + +Mon Aug 28 13:45:12 UTC 2006 Johnny Willemsen + + * ace/Svc_Conf_Lexer.cpp: + Fixed variable not used warning when ACE_USES_WCHAR is not + defined + + * ace/Min_Max.h: + Removed ACE_LACKS_MIN_MAX_TEMPLATES and the code that was + there when this define was set, this define wasn't enabled + in any configuration file. + +Mon Aug 28 11:53:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/taodefaults.mpb: + Added exceptions as base project, TAO requires native C++ exceptions. + +Mon Aug 28 11:45:12 UTC 2006 Johnny Willemsen + + * protocols/tests/RMCast/RMCast.mpc: + Removed avoids usage, that is already in the base projects + +Mon Aug 28 11:13:12 UTC 2006 Johnny Willemsen + + * etc/*.doxygen: + Set ignore prefix in several files to improve generated + documentation + +Mon Aug 28 11:08:12 UTC 2006 Johnny Willemsen + + * etc/acexml.doxygen: + Ignore ACEXML_ as prefix + +Mon Aug 28 10:34:12 UTC 2006 Johnny Willemsen + + * docs/run_test.txt: + Updated to explain how the script works on VxWorks and extended + the exampl in such a way that if there is not an executable + it returns directly + +Mon Aug 28 10:07:12 UTC 2006 Johnny Willemsen + + * tests/run_test.lst: + Added UUIDTest, was just not listed in this file + + * bin/PerlACE/ProcessVX_Unix.pm: + New initial file for running tests for VxWorks from an unix host + + * bin/PerlACE/ProcessVX.pm: + On unix use the new file above + +Mon Aug 28 09:05:20 UTC 2006 Boris Kolpackov + + * bin/ace_tests.lst: + + Copied test exclusion list from the Multicast_Test entry. + + * protocols/tests/RMCast/Protocol.h: + * protocols/tests/RMCast/run_test.pl: + + Adjusted the timeout value and message size. + +Sun Aug 27 11:11:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added twoway DII collocation test + +Sun Aug 27 00:03:07 UTC 2006 Douglas C. Schmidt + + * ace/Filecache.cpp (ACE_Filecache_Object): Added a call to + + this->lock_.release (); + + to release the lock and so the same file can be fetched again. + Thanks to Liu Qian for reporting + this. + +Sat Aug 26 17:40:12 UTC 2006 Johnny Willemsen + + * docs/ACE-porting.html: + ACE_VXWORKS is the define for VxWorks, exceptions are required + for TAO. + +Sat Aug 26 17:36:12 UTC 2006 Johnny Willemsen + + * docs/ACE-guidelines.html: + Updated some parts to mention svn instead of cvs + +Sat Aug 26 03:11:01 UTC 2006 Krishnakumar B + + * docs/svn/svn-prefs.reg: + * docs/svn/config: + + Updates to add even more file types. + +Sat Aug 26 02:32:18 UTC 2006 Krishnakumar B + + * docs/svn/svn-prefs.reg: + * docs/svn/config: + + Updated these files to add more entries to the list of globally + ignored extensions, and also to the list of file types which + should have automatic properties set. Also synced up the config and + svn-prefs.reg file. + +Fri Aug 25 22:01:38 UTC 2006 Steve Huston + + * ace/Sock_Connect.cpp (get_ip_interfaces, count_interfaces): + Corrected to extract IPv6 information correctly from ioctl()- + returned structures. + + * tests/Enum_Interfaces_Test.cpp: On error condition ACE_HAS_IPV6 but + no ipv6 interfaces, do the log as LM_ERROR so the scoreboard picks + it up. + +Fri Aug 24 12:55:12 UTC 2006 Johnny Willemsen + + * ace/config-vxworks6.3.h: + * ace/Process.cpp: + * ace/Task.cpp: + Fixes for building on vxworks 6.3 with diab 5.4 compiler + +Fri Aug 24 11:17:12 UTC 2006 Johnny Willemsen + + * ace/CDR_Size.cpp: + Added include of OS_Memory.h to get ACE_align_binary + +Thu Aug 24 21:40:24 UTC 2006 Steve Huston + + * tests/Process_Manual_Event_Test.cpp (acquire_release): Fixed a race + condition whereby while a parent and child were ping-ponging, it + was possible for one process to signal event1, wait on event2, then + signal event1 again before the other process could respond to + event1 being signaled and reset it. Thus, event1 was being reset + after the other process signaled it, ensuring a never-ending + wait at the end of the iterations. I changed the code to quickly + reset the event before printing the debug message, thereby closing + the window of opportunity a lot. But probably not completely + removing it... we'll have to see. + +Thu Aug 24 16:40:54 UTC 2006 Steve Huston + + * ace/config-aix-4.x.h: Only need to set + ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION for g++ + prior to g++ 4.1 (have only heard report of this for g++ 4.1; + it may need adjustment for 4.0). Thanks to Nzer Zaidenberg + for reporting the original + problem and testing this fix. + + * THANKS: Added Nzer Zaidenberg to the Hall of Fame. + +Thu Aug 24 16:33:22 UTC 2006 James H. Hill + + * docs/svn/config: + * docs/svn/svn-prefs.reg: + + Added auto-props for *.tex and *.cls files. + +Thu Aug 24 13:48:12 UTC 2006 Johnny Willemsen + + * ace/config-openvms.h + Removed ACE_HAS_SOCK_BUF_SIZE_MAX, not needed anymore with the + latest OpenVMS versions + +Thu Aug 24 08:11:12 UTC 2006 Johnny Willemsen + + * ace/DLL.h + * ace/Service_Repository.h + * ace/Service_Object.cpp + * ace/Parse_Node.cpp + * ace/Service_Object.inl + * ace/Parse_Node.h + * ace/Service_Repository.cpp + * ace/Service_Object.h + * ace/Service_Gestalt.h + * ace/Service_Gestalt.cpp + * ace/DLL_Manager.cpp + * ace/DLL.cpp + Reverted change from below on request of Iliyan because it broke + a set of tests that spawn a thread in init. + Tue Aug 22 21:43:34 UTC 2006 Iliyan Jeliazkov + +Wed Aug 23 08:32:12 UTC 2006 Johnny Willemsen + + * ace/Sock_Connect.{h,cpp}: + Reverted the change below, VxWorks/OpenVMS/AIX all have problems + after this change + + Tue Aug 22 15:19:46 UTC 2006 Phil Mesnier + * ace/Sock_Connect.h: + * ace/Sock_Connect.cpp: + +Tue Aug 22 22:52:41 UTC 2006 Steve Huston + + * protocols/ace/RMCast/Protocol.h: Replaced use of + ACE_Refcounted_Auto_Ptr with ACE_Strong_Bound_Ptr. Code formerly used + ACE_Refcounted_Auto_Ptr::release() with the assumption it had the + same semantics as auto_ptr::release() - stealing the pointer away. + This used to work by accident. The fixed ACE_Refcounted_Auto_Ptr's + release() method decrements the reference count which may cause the + object to be deleted, which is what happened all the time in the + RMCast protocol's clone() methods. Because all the clone() methods + relied on being able to take a more-derived pointer and use it as + a Profile*, changing the refcounted pointer type necessitated + changing the protected clone_() methods to return a naked pointer + rather than a refcounted one. This is acceptable because the naked + pointer is not exposed to class users; the public methods insert + the naked pointer into a ACE_Strong_Bound_Ptr before giving access + to it externally. + + * protocols/ace/RMCast/Acknowledge.cpp: + * protocols/ace/RMCast/Reassemble.cpp: With properly functioning + refcounted pointers (see above) these needed a few changes to + make proper use of the pointers while maintaining correct reference + counts. + +Tue Aug 22 21:43:34 UTC 2006 Iliyan Jeliazkov + + This change fixes bug#2612. + + * ace/DLL.h: + * ace/DLL.cpp: + + Made assignment return 'T&' instead of 'const T&'. Adjusted code + formatting and logging messages. + + * ace/DLL_Manager.cpp: + + Fixed formatting. + + * ace/Parse_Node.h: + * ace/Parse_Node.cpp: + + Added accessor for the underlying ACE_DLL and adjusted logging. + + * ace/Service_Gestalt.h: + * ace/Service_Gestalt.cpp: + + Introduced ACE_Service_Type_DLL_Guard class. As dynamic service + objects are loaded, static service objects that come with the + same DLL code, may also be registered. The static services + however, have no information about the context in which their + registration takes place and their relation with the DLL is + lost. A situation can easily arise where the dynamic service + object is finalized and its DLL - unmapped, but some of the + DLL's static services may still be around. Their finalization + would not be possible, if the DLL counting that code is gone. + + The guard, when instantiated (on the stack) swaps out the + current Gestalt and its service repository, and replaces them + with a "sandbox" Gestalt, which has lifetime sufficient for just + the current service initialization. Note that this mechanism is + effective even in the case where a service initialization causes + re-entry into the Gestalt to load and initialize another service + as part of the initialization. + + If no action is taken (in case of an error, for instance) the + guard destructor will simply finalize all newly initialized + service(s) from the sandbox. On the other hand, if + initialization is successful the service object descriptors are + "relocated" to the original Gestalt. + + During the relocation, all static services are "fixed-up" to + hold a reference to the DLL they belong to. Effectively, a + static service, initialized via loading of a particular DLL, + becomes a dynamic service. Thus the order of service + finalization does not matter anymore because the DLL will be + help in memory until the last service object it provides is + finalized. + + * ace/Service_Object.h: + * ace/Service_Object.inl: + * ace/Service_Object.cpp: + + Added a relocate method to modify the ACE_DLL each SO has. + + * ace/Service_Repository.h: + * ace/Service_Repository.cpp: + + Befrended ACE_Service_Type_DLL_Guard. Adjusted logging. + + * tests/Service_Config_Test.cpp: + + Simplified test case. + +Tue Aug 22 18:37:48 UTC 2006 Phil Mesnier + + * bin/MakeProjectCreator/config/ipv6.mpb: + + Building with IPv6 for WinCE requires an additional library for + rtti that is not required for the windows builds. + + * bin/ciao_tests.lst: + * bin/tao_orb_tests.lst: + * bin/tao_other_tests.lst: + Added ACE_FOR_TAO exclusions as necessary + +Tue Aug 22 15:19:46 UTC 2006 Phil Mesnier + + * ace/Sock_Connect.h: + * ace/Sock_Connect.cpp: + + Refactored interface discovery code. The methods used to find + IPv6 interface addresses is highly platform specific. So much so + that the single method was too confusing to maintain. With this + patch, the code has been refactored to put each + platform-specific variation in its own method, then only compile + the method needed by any given platform. I'm not sure this will + yield much of a footprint reduction, as all the existing code is + still present, it is just easier to keep track of what is going on. + + Also, when IPv6 is enabled, it might be on a platform that is + using IPv6 exclusively, ie, with no IPv4 enabled. At least one + third-party user of ACE requested a specific test for IPv4 + enablement status, thus I have added a new method for that test. + + * ace/config-linux.h: + Linux supplies the getipaddrs system call. + + * tests/Enum_Interfaces_Test.cpp: + Extended the test so that if ACE is built with ACE_HAS_IPV6 + defined, the test will expect at least one IPv6 endpoint or it + will fail. + +Tue Aug 22 11:41:12 UTC 2006 Johnny Willemsen + + * ace/UUID.{h,cpp}: + Implemented copy constructor + + * tests/UUIDTest.cpp: + Test copy constructor + +Tue Aug 22 09:36:12 UTC 2006 Johnny Willemsen + + * ace/UUID.{h,inl}: + Made the accessors const and reimplemented operator == and + operator !=. + + * tests/UUIDTest.cpp: + Test the operator != and ==. + +Mon Aug 21 20:46:43 UTC 2006 Steve Huston + + * configure.ac: Modified the check for the net/if.h header file + to do a #include if it exists. Allows the compile + of net/if.h to succeed, fixing a configure warning for a file that + exists but won't compile. Thanks to Don Meek for reporting this problem. + + * THANKS: Added Don Meek to the Hall of Fame. + +Mon Aug 21 20:43:59 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Config.inl: + + Added the missing implementation of the static process_file () + method. Thanks to Lothar Werzinger for + pointing that out. + +Mon Aug 21 20:06:38 Pacific Daylight Time 2006 Ossama Othman + + From Russell Mora : + * ace/Thread_Exit.cpp (instance): + + Fixed race condition in generated code by stopping optimizer + from re-ordering static variable initializations by declaring + static "instance_" variable as "volatile". This problem was + observed on a quad-CPU Solaris 8 box. + +Mon Aug 21 18:31:12 UTC 2006 Johnny Willemsen + + * etc/*.doxygen: + In all files except ace.doxygen added SHORT_NAMES=YES to let + doxygen generate shorter filenames, this should fix the problems + we had during the release with cpio not capable of handling + long filenames + +Mon Aug 21 17:46:55 UTC 2006 Ossama Othman + + * ace/Numeric_Limits.h (ACE_Numeric_Limits): + + The Microsoft Platform SDK does not provide + std::numeric_limits<> specializations for 64 bit integers so we + need to explicitly provide ACE_Numeric_Limits<> specializations + to compensate for this deficiency. [Bug 2639] + + Unfortunately there is no way to tell if the platform SDK is + being used so we specialize for the ACE_WIN64 + MSVC++ 7.1 case, + which is the configuration that exhibits this problem. It also + happens to be a fairly isolated configuration since 64-bit + support in MSVC++ 7.1 was not very good to begin with. + +Mon Aug 21 15:35:26 UTC 2006 Douglas C. Schmidt + + * ace/Timeprobe_T.cpp (print_times): More fixed for timestamp + inversion due to recording time from different threads. This + prints a warning message the first time it detects a timestamp + inversion. It also fixes various minor problems in the + timeprobe reports whenever the total number of timeprobes + exceeds 8192. Thanks to Patrick Rabau for contributing this. + + * ace/INET_Addr.h: Updated the documentation of the non-reentrant + versions of get_host_addr() and get_host_name() to clarify how + they can be used correctly (or better yet not used at all..). + Thanks to Ephy Levy for motivating + this. + + * ace/Logging_Strategy.cpp: Added a destructor to delete + this->filename_, which is allocated in the constructor. Thanks + to Amnon AB for reporting this. + + * ace/Acceptor.h: Made the suspend()/resume() methods of + ACE_Strategy_Acceptor public rather than protected. Thanks to + Amnon AB for reporting this. + + * docs/Symbol_Versioning.html (HREF): Added a link to the Riverace + webpage that describes symbol versioning in ACE. Thanks to + Steve Huston for contributing this. + + * ace/Timeprobe_T.cpp (print_times): Revised the code so that if + there is a timestamp inversion due to recording time from + different threads, the time difference will be displayed as a + negative value instead of a gigantic positive value. Also + compute the time difference correctly when the timeprobe array + wraps around. Thanks to Patrick Rabau + for this fix. + + * ace/Containers_T.cpp, + * ace/Log_Msg.cpp, + * ace/CDR_Size.cpp, + * ace/CDR_Size.inl, + * ace/CDR_Stream.cpp: Fixed a bunch of problems with type punning. + Thanks to Thomas Girard for + reporting this. + + * ace/TSS_T.cpp (tryacquire): There was a missing '&' in + + ACE_Thread::getspecific (this->key_, temp); + + Thanks to Thomas Girard for + reporting this. + +Mon Aug 21 10:45:12 UTC 2006 Johnny Willemsen + + * ace/UUID.{h,cpp,inl}: + Extended UUID to make it possible to assign a string to a UUID + to set it a new value. + + * tests/UUIDTest.cpp: + Extended this test to test the new functionality above. + +Mon Aug 21 10:26:12 UTC 2006 Johnny Willemsen + + * ace/UUID.{h,cpp,inl}: + Changed node_release_ to a real bool and use ACE_ERROR instead + of ACE_DEBUG for a real error message + + * ace/OS_NS_unistd.cpp: + Const improvement + +Sat Aug 19 22:03:03 UTC 2006 Yan Dai + + * bin/tao_orb_tests.lst + + Excluded the DII collocation oneway test from running in the minimum + CORBA build. + +Fri Aug 18 20:38:35 UTC 2006 Steve Huston + + * examples/APG/Logging/Trace.h: Further changed use of __VA_ARGS__ + to remove the comma and the fixed FMT arg from the macros. This + may still trigger the same ISO C99 warning, but it doesn't fail. + +Fri Aug 18 17:22:08 UTC 2006 Steve Huston + + * ace/OS_NS_unistd.cpp (pwrite): Corrected the large-file-offset + logic to build correctly for Windows. Also moved the explicit + SetFilePointerEx() before WriteFile() to the non-ACE_HAS_WINNT4 + section - for ACE_HAS_WINNT4 the supplied OVERLAPPED structure + carries the file offset to write at. + +Fri Aug 18 17:08:35 UTC 2006 Yan Dai + + * bin/tao_orb_tests.lst + + Added DII collocation oneway test. This is the regression test + for bugzilla #2545. + +Fri Aug 18 15:49:01 UTC 2006 Steve Huston + + * examples/APG/Logging/Trace.h: Changed the varargs form used in the + macros from ##__VA_ARGS__ to ,__VA_ARGS__ in an effort to conform + to C99 and clear some compile warnings from gcc4. This effectively + prohibits leaving the varargs out completely from the macro + invocation but that use-case isn't exercised anyway. + + * bin/ace_tests.lst: Add protocols/tests/RMCast/run_test.pl to run + RMCast tests, except ACE_FOR_TAO builds. + +Fri Aug 18 12:03:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Don't run Bug_2510_Regression in a ST build, it uses threading + + * bin/MakeProjectCreator/templates/bor.mpd: + Don't print a message with the dummy realclean + +Thu Aug 17 14:20:00 UTC 2006 Simon Massey + + * apps/drwho/Binary_Search.cpp: + * apps/drwho/CM_Client.cpp: + * apps/drwho/CM_Server.cpp: + * apps/drwho/Hash_Table.cpp: + * apps/drwho/Options.cpp: + * apps/drwho/Options.h: + * apps/drwho/PMC_All.cpp: + * apps/drwho/PMC_Flo.cpp: + * apps/drwho/PMC_Ruser.cpp: + * apps/drwho/PMC_Usr.cpp: + * apps/drwho/PMS_All.cpp: + * apps/drwho/PMS_Flo.cpp: + * apps/drwho/PMS_Ruser.cpp: + * apps/drwho/PMS_Usr.cpp: + * apps/drwho/Protocol_Manger.cpp: + * apps/drwho/Protocol_Record.cpp: + * apps/drwho/Rwho_DB_Manager.cpp: + * apps/drwho/Search_Struct.cpp: + * apps/drwho/Single_Lookup.cpp: + * apps/Gateway/Gateway/Gateway.cpp: + * apps/Gateway/Gateway/Options.cpp: + * apps/Gateway/Gateway/Options.h: + + Renamed the enum ID "DEBUG" to "DEBUGGING", was causing problems + with MFC builds. + +Thu Aug 17 12:15:12 UTC 2006 Johnny Willemsen + + * tests/SString_Test.cpp: + Added a check whether npos is zero, if it is print an error, + with Intel C++ 9.0 with the Microsoft platform SDK this seems + to be zero + +Thu Aug 17 08:30:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_client_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_deployment_stub.mpb: + * bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb: + * bin/MakeProjectCreator/config/ciao_events_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_rtevent_dnc.mpb: + Removed -Sc form the taoidlflags, it is deprecated already sometime + ago + +Wed Aug 16 22:19:47 UTC 2006 Steve Huston + + * ace/Acceptor.h: Doxygen improvements. + +Wed Aug 16 17:42:02 UTC 2006 Ossama Othman + + * ace/Numeric_Limits.h: + + Explicitly #undef min and max before including in the + Mingw case to address global namespace pollution induced + conflicts. The previous attempt to address this problem where + the Windows-specific NOMINMAX preprocessor symbol was defined in + this header didn't work since the min and max macros were + already defined beforehand. In order for NOMINMAX to work as + expected, it would be have to be defined before any Windows + headers are included, or more preferrably on the + preprocessor/compiler command line. Unfortunately, that would + probably break some applications. + +Wed Aug 16 14:51:58 UTC 2006 William R. Otte + + * docs/svn/svn-prefs.reg + * docs/svn/config + + Updated to correct keywords values, and add use-commit-times + as a default option. + +Wed Aug 16 10:19:41 UTC 2006 Johnny Willemsen + + * ace/Obstack_T.{cpp,inl}: + Moved grow_fast and freeze methods from inl to cpp file, + should fix the link problems with the RHAS IPv6 build + +Wed Aug 16 09:50:41 UTC 2006 Johnny Willemsen + + * examples/Misc/Misc.mpc: + * examples/Misc/test_timestamp.cpp: + Simple small test for ACE::timestamp() + +Wed Aug 16 08:37:41 UTC 2006 Johnny Willemsen + + * include/makeinclude/build_lib.bor: + * include/makeinclude/clean.bor: + * include/makeinclude/compiler.bor: + Removed support for the CBuilderX preview compiler, it has never + become more then preview and we don't test with it anymore + + * include/makeinclude/recurse.bor: + Removed from the repo, seems not to be used anymore + +Tue Aug 15 17:47:11 UTC 2006 Ossama Othman + + * ace/Numeric_Limits.h: + + Windows defines min/max macros that interfere with the + numeric_limits::min/max() traits. Prevent those macros from + being defined by defining the Windows-specific NOMINMAX symbol + before any Windows headers are included. This is currently + only done for Mingw builds since the problem is not exhibited by + other Windows builds (e.g. MSVC++, Borland, etc). + +Tue Aug 15 16:17:56 UTC 2006 Shanshan Jiang + + * ace/Hash_MultiMap_Manager_T.h + Made some minor changes to the documentation to use @a to refer to + argument names. + +Tue Aug 15 15:00:00 UTC 2006 Adam Mitz + + * ace/Event_Handler.cpp: + + Updated Event_Handler_var to use an ACE_Errno_Guard to + prevent overwriting the errno. + + * bin/tao_orb_tests.lst + + Added new test: TAO/tests/Oneway_Timeouts/run_test.pl + +Tue Aug 15 14:22:53 UTC 2006 Shanshan Jiang + + * ace/Hash_MultiMap_Manager_T.h + Address the "unsupported xml/html tag" warnings in doxygen build. + +Tue Aug 15 08:36:00 UTC 2006 Simon Massey + + * bin/MakeProjectCreator/config/acedefaults.mpb + + Backout all of the recent MFC changes. + + * bin/MakeProjectCreator/config/ace_opt_mfc.mpb: + + DELETED. + +Mon Aug 14 23:34:11 UTC 2006 William R. Otte + + * ace/TP_Reactor.cpp + * ace/TP_Reactor.h + + Removed all register_handler member functions from these files. + This essentially enables the ability to register signal handlers in + the TP Reactor by implicitly delegating to the select reactor base + class. + + Other register_handler methods (not relating to signal handling) + were explicit delegations to the select reactor base class, present + only to silence virtual function hiding warnings created by + disabling the signal related methods. + +Mon Aug 14 16:14:56 UTC 2006 Shanshan Jiang + + * test/Hash_Multi_Map_Manager_Test.cpp + Address the "no matching function for call" errors. + + * ace/Hash_MultiMap_Manager_T.h + Address the "unsupported xml/html tag" warnings in doxygen build. + +Mon Aug 14 16:00:00 UTC 2006 Simon Massey + + * bin/MakeProjectCreator/config/ace_mfc.mpb: + * bin/MakeProjectCreator/config/ace_opt_mfc.mpb: + + Backout the "Specific" guards. + +Mon Aug 14 15:20:00 UTC 2006 Simon Massey + + * bin/MakeProjectCreator/config/ace_mfc.mpb: + * bin/MakeProjectCreator/config/ace_opt_mfc.mpb: + + Specific the macro and don't inherit from mfc for opt. + +Mon Aug 14 15:43:12 UTC 2006 Steve Huston + + * tests/Makefile.am: Added Hash_Multi_Map_Manager_Test. + +Mon Aug 14 13:33:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/clean.bor: + Use .inl as file extension to clean instead of .i + + * bin/MakeProjectCreator/templates/bor.mpd: + Added empty realclean target + +Mon Aug 14 12:52:19 UTC 2006 Chad Elliott + + * ACE-INSTALL.html: + + I added "-type gnuace" to the options where the default project + type was assumed. Eventually, MPC will not have a default project + type. + + * include/makeinclude/macros.GNU: + * include/makeinclude/rules.common.GNU: + * include/makeinclude/rules.local.GNU: + + Added a new target to remove only the binaries (executables and + shared libraries). + +Mon Aug 14 11:15:12 UTC 2006 Johnny Willemsen + + * ace/*.h: + Added /**/ to the include of config-all.h and ACE_export.h, this + way doxygen doesn't add these files to the include graphs which + make them much easier to read + +Sun Aug 13 23:30:02 UTC 2006 Yan Dai + + * bin/tao_other_tests.lst: + + Excluded TAO POAManagerFactory and EndpointPolicy tests from + running in a minimum CORBA configuration. + +Sun Aug 13 22:21:55 UTC 2006 Shanshan Jiang + + * test/Hash_Multi_Map_Manager_Test.cpp + Address the "Implicit conversion of string literal to char * is + deprecated" warnings. + +Sun Aug 13 15:25:17 UTC 2006 Boris Kolpackov + + * bin/MakeProjectCreator/config/ciaocidldefaults.mpb: + + Removed '--' from the cidlc command line. + +Sun Aug 13 000:02:00 UTC 2006 Shanshan Jiang + + * ace/Hash_MultiMap_Manager_T.inl + * ace/Hash_MultiMap_Manager_T.cpp + * ace/Hash_MultiMap_Manager_T.h + Change the name of these files into Hash_Multi_Map_Manager.*. + Add some comments to explain in brief the purpose of using + ACE_Hash_Multi_Map_Manager class and how to use it. + Remove the backward compatibility of ACE_Hash_Multi_Map_Manager class + and its associated iterator classes. + Remove "_Ex" on the names of ACE_Hash_Multi_Map_Manager class and its + associated iterator classes. + + * ace/Hash_MultiMap_Manager.h + Remove this file since it simply includes the + Hash_MultiMap_Manager_T.h file. + + * test/Hash_MultiMap_Manager_Test.cpp + Change the name of this file into Hash_Multi_Map_Manager_Test.cpp. + Address the "convert const char* to ACE_TCHAR*" errors. + + * ace/ace.mpc + Change the name of Hash_MultiMap_Manager project into + Hash_Multi_Map_Manager. + + * test/run_test.lst + * test/tests.mpc + Change the name of Hash_MultiMap_Manager_Test project into + Hash_Multi_Map_Manager_Test. + +Fri Aug 11 16:46:56 UTC 2006 Shanshan Jiang + + * ace/Hash_MultiMap_Manager.h + * ace/Hash_MultiMap_Manager_T.cpp + * ace/Hash_MultiMap_Manager_T.h + * ace/Hash_MultiMap_Manager_T.inl + Add these files which implement Hash_MultiMap_Manager. + + * test/Hash_MultiMap_Manager_Test.cpp + Add this test file for Hash_MultiMap_Manager. + + * ace/ace.mpc + Modify this file to include Hash_MultiMap_Manager. + + * test/run_test.lst + * test/tests.mpc + Modify these files to include Hash_MultiMap_Manager_Test. + +Fri Aug 11 16:37:34 UTC 2006 Steve Huston + + * tests/CDR_File_Test.cpp: Corrected a signed/unsigned compare. + +Fri Aug 11 13:59:12 UTC 2006 Johnny Willemsen + + * ace/CDR_Size.cpp: + Add include of OS_Memory.h to get ACE_align_binary + + * ace/Sig_Handler.cpp: + Add include of Guard_T.h to get the guards + + * ace/config-vxworks6.3.h: + Add some code for the diab compiler but this is not complete + support, just some testing results. + +Fri Aug 11 07:17:12 UTC 2006 Johnny Willemsen + + * docs/svn/config: + * docs/svn/svn-prefs.reg: + Added settings for .idl and .pidl + +Thu Aug 10 13:14:12 UTC 2006 Johnny Willemsen + + * bin/tao_other_tests.lst: + Disabled the performance tests on OpenVMS for the moment, they + result in too much error logs + +Thu Aug 10 10:33:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + Updated for -GX + +Thu Aug 10 09:38:13 UTC 2006 Simon McQueen + + * bin/tao_other_tests.lst: + + Exclude Bug_2615_Regression from running on 'ACE for TAO' builds. + +Thu Aug 10 01:52:34 UTC 2006 Steve Huston + + * ace/config-aix-4.x.h: Added ACE_HAS_TEMPLATE_TYPEDEFS for Visual + Age C++ 6 and higher. + +Wed Aug 9 14:15:18 UTC 2006 Ciju John + + * bin/MakeProjectCreator/config/csd_threadpool.mpb: + + Added a dependency upon threads.mpb as this project shouldn't be + built if thread support is not going to be built into TAO. + +Wed Aug 9 13:45:00 UTC 2006 Simon Massey + + * bin/MakeProjectCreator/config/acedefaults.mpb + + Typo, Remove the + character that came with the patch file. + +Wed Aug 9 12:17:00 UTC 2006 Simon Massey + + * bin/MakeProjectCreator/config/ace_opt_mfc.mpb + * bin/MakeProjectCreator/config/acedefaults.mpb + + Chad's new fix for MPC building MFC projects. + +Tue Aug 8 14:00:06 UTC 2006 Carlos O'Ryan + + * Merged in all the changes from the fix_bug_2540 branch, that is, + from revision 73857 to revision 73859. + + Thu Aug 3 21:49:27 UTC 2006 Carlos O'Ryan + + * ace/TP_Reactor.cpp: + * ace/Select_Reactor_T.cpp: + Avoid the problems described in bug 2540 by detecting the + infinite loop and recomputing the number of active handlers. + Thanks to Jody Hagins for correcting my original "fix." + +Tue Aug 8 14:05:00 UTC 2006 Simon Massey + + * bin/MakeProjectCreator/config/ace_mfc.mpb + * bin/MakeProjectCreator/config/acedefaults.mpb + + Reverted Chad's fix for MPC building MFC projects. + It seems that this causes non MFC builds to build as MFC + breaking the scoreboard. + +Tue Aug 8 09:30:12 UTC 2006 Johnny Willemsen + + * ACE.mwc: + Removed several directories which aren't existing anymore + +Tue Aug 8 09:28:12 UTC 2006 Johnny Willemsen + + * ACE-INSTALL.html: + Removed some parts of the VxWorks building instructions because + it was really wrong what was said + +Tue Aug 8 09:15:00 UTC 2006 Simon Massey + + * ace/OS_Memory.h + * ace/config-win32-msvc.h + * bin/MakeProjectCreator/config/ace_mfc.mpb + * bin/MakeProjectCreator/config/acedefaults.mpb + + Chad's fix for MPC building MFC projects. Correction for + Thu Apr 27 21:04:08 UTC 2006 Steve Huston + throw CMemoryException on out-of-memory condition. These + exceptions must be caught by pointer and thrown via calling + AfxThrowMemoryException (). + +Tue Aug 8 08:06:12 UTC 2006 Johnny Willemsen + + * ace/Select_Reactor_Base.cpp: + * ace/Select_Reactor_T.cpp: + Const improvements, use bool when possible + +Tue Aug 8 07:46:12 UTC 2006 Johnny Willemsen + + * bin/generate_rel_manpages: + * bin/make_release: + Did a little bit of cleanup removing old things + +Tue Aug 8 07:11:12 UTC 2006 Johnny Willemsen + + * ace/Select_Reactor_T.cpp (dump): + Removed usage of not needed operator++ on the handle set + +Mon Aug 7 08:02:12 UTC 2006 Johnny Willemsen + + * ace/Handle_Set.{h,cpp}: + Removed operator++, it is deprecated and nothing more then a noop + +Fri Aug 4 07:57:12 UTC 2006 Johnny Willemsen + + * ace/Asynch_IO.h: + * ace/Event_Handler.h: + * ace/Framework_Component_T.h: + * ace/Hash_Map_Manager_T.h: + * ace/IO_SAP.h: + * ace/Local_Tokens.h: + * ace/LSOCK_Connector.h: + * ace/Map_Manager.h: + * ace/Map_T.h: + * ace/WFM_Reactor.h: + Doxygen improvements + +Thu Aug 3 10:39:12 UTC 2006 Johnny Willemsen + + * ace/Connector.h: + Improved documentation + +Wed Aug 2 22:54:24 UTC 2006 Phil Mesnier + + * THANKS: Added Eric Danielou to the hall of fame. + +Wed Aug 2 21:27:59 UTC 2006 Adam Mitz + + * bin/PerlACE/Run_Test.pm: + + Added two new packaged-scoped variables, $PerlACE::ACE_ROOT and + $PerlACE::TAO_ROOT. $PerlACE::TAO_ROOT is set to the TAO_ROOT + environment variable, if one exists. If not it is set to + $ACE_ROOT/TAO. $PerlACE::ACE_ROOT is the same as the ACE_ROOT + envrionment variable so it's just there for convenience and for + symmetry. + +Wed Aug 2 20:19:04 UTC 2006 Adam Mitz + + * bin/tao_other_tests.lst: + Added new test (TAO/orbsvcs/tests/ImplRepo/Bug_2604_Regression). + +Wed Aug 2 18:16:12 UTC 2006 Johnny Willemsen + + * ace/Connector.cpp: + Const improvements + + * ace/Caching_Utility_T.h: + * ace/config-lite.h: + * ace/Event_Handler.h: + * ace/Framework_Component.h: + * ace/Lock.h: + * ace/Lock_Adapter_T.h: + * ace/Null_Mutex.h: + * ace/Object_Manager.h: + * ace/Object_Manager_Base.h: + * ace/Proactor.cpp: + * ace/Process_Manager.h: + * ace/Semaphore.h: + * ace/Thread_Exit.h: + Doxygen improvements + +Wed Aug 2 15:50:48 UTC 2006 Simon McQueen + + * bin/tao_other_tests.lst: + + Schedule bugzilla #2615 regression test. + +Wed Aug 2 14:55:45 UTC 2006 Chad Elliott + + * ACE-INSTALL.html: + + Updated the location of the MPC documentation. It was moved from + the MPC root directory to a docs directory. + + * bin/ChangeLogEditor/CVSFileLocator.pm: + * bin/ChangeLogEditor/ChangeLogEdit.pm: + * bin/ChangeLogEditor/ChangeLogEntry.pm: + * bin/ChangeLogEditor/FileLocator.pm: + * bin/ChangeLogEditor/SVNFileLocator.pm: + * bin/cle.pl: + + Added better support for subversion and it now reports errors from + cvs/svn. + + * bin/MakeProjectCreator/README: + + Updated to provide information on anonymously checking out MPC + using Subversion. + + * bin/make_release: + + I added "-type gnuace" to the options where the default project + type was assumed. Eventually, MPC will not have a default project + type. + +Wed Aug 2 13:47:12 UTC 2006 Johnny Willemsen + + * docs/ACE-development-process.html: + Document the fact that people should test on at least two + platforms and should be available for some days after they + commit a change. + +Wed Aug 2 11:16:12 UTC 2006 Johnny Willemsen + + * docs/Download.html: + Also put the download page from deuce.doc under svn control + so that we can update it for the svn conversion + +Wed Aug 2 11:07:12 UTC 2006 Johnny Willemsen + + * docs/bczar/bczar.html: + * docs/bczar/privileges.html: + Added documents that where on deuce.doc, the documentation + for the bczar how to create a release should really be handled + with care, so put them under svn control + +Tue Aug 1 20:23:50 UTC 2006 Adam Mitz + + * ace/config-macosx-tiger.h: + Added preliminary support for Mac OS X 10.4 on Intel CPU's. + +Tue Aug 1 20:00:12 UTC 2006 Johnny Willemsen + + * ace/config-vxworks6.3.h: + Enabled some features in ACE because vxworks 6.3 delivers more system + api's + +Mon Jul 31 19:23:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_stropts.inl (ioctl): + Check for ACE_HAS_IOCTL_INT_3_PARAM to make it easier to handle + the different VxWorks versions + + * config-vxworks5.x.h: + * config-vxworks6.2.h: + * config-vxworks6.3.h: + Added ACE_HAS_IOCTL_INT_3_PARAM + +Mon Jul 31 18:48:12 UTC 2006 Johnny Willemsen + + * Containers_T.{h,cpp}: + * Hash_Map_Manager_T.{h,cpp}: + * Map_Manager.{h,inl}: + * Node.{h,cpp}: + Removed check for !ACE_HAS_BROKEN_NOOP_DTORS, this define is + not in any config file + + * config-unixware-7.1.0.udk.h: + Removed commented out define + + * Token_Collection.{h,cpp}: + * Token_Manager.{h,inl}: + Changed debug flag to be a bool + + * SOCK_Dgram_Bcast.h + * TP_Reactor.h + * Signal.h + * Thread.h + * Thread_Adapter.h + Documentation updates + +Mon Jul 31 14:57:08 UTC 2006 Steve Huston + + * apps/Makefile.am: Removed hard-coded inclusion of gperf in the + SUBDIRS list; it's an optional piece; see also + Tue Jun 20 20:19:37 UTC 2006 Steve Huston + Thanks to Robert Schwebel for this fix. + +Mon Jul 31 14:36:12 UTC 2006 Johnny Willemsen + + * etc/*.doxygen: + Cleanup of these files + +Sat Jul 29 11:26:12 UTC 2006 Johnny Willemsen + + * ace/config-icc-common.h: + Added fix for Intel C++ 9.1 + +Fri Jul 28 15:32:27 UTC 2006 William R. Otte + + * ace/SSL/Makefile.am + * ace/QoS/Makefile.am + * performance-tests/Synch-Benchmarks/Base_Test/Makefile.am + * performance-tests/Synch-Benchmarks/Perf_Test/Makefile.am + * Kokyu/Makefile.am + * apps/JAWS/clients/Caching/Makefile.am + * ACEXML/apps/svcconf/Makefile.am + * ACEXML/common/Makefile.am + * ACEXML/parser/parser/Makefile.am + * ACEXML/examples/SAXPrint/Makefile.am + * websvcs/lib/Makefile.am + * examples/ASX/Event_Server/Event_Server/Makefile.am + * examples/ASX/UPIPE_Event_Server/Makefile.am + * examples/Service_Configurator/IPC-tests/server/Makefile.am + + Updated to comply with the .i->.inl changes from: + Thu Jul 27 20:30:26 UTC 2006 William R. Otte + +Fri Jul 28 12:17:12 UTC 2006 Johnny Willemsen + + * Kokyu/DSRT_Dispatch_Item_T.inl: + * ACEXML/parser/parser/Parser.inl: + Fixed file tag + +Thu Jul 27 20:30:26 UTC 2006 William R. Otte + + * ace/SSL/SSL_SOCK_Connector.h + * ace/SSL/SSL_SOCK_Acceptor.inl + * ace/SSL/SSL_SOCK_Acceptor.cpp + * ace/SSL/SSL_SOCK_Connector.i + * ace/SSL/SSL_SOCK_Stream.h + * ace/SSL/SSL_SOCK_Stream.i + * ace/SSL/SSL_SOCK_Acceptor.h + * ace/SSL/SSL_SOCK_Acceptor.i + * ace/SSL/SSL_SOCK.cpp + * ace/SSL/SSL_SOCK.inl + * ace/SSL/SSL_SOCK.h + * ace/SSL/SSL_SOCK.i + * ace/SSL/SSL_SOCK_Connector.cpp + * ace/SSL/SSL_SOCK_Connector.inl + * ace/SSL/SSL_SOCK_Stream.cpp + * ace/SSL/SSL_SOCK_Stream.inl + * ace/QoS/SOCK_Dgram_Mcast_QoS.inl + * ace/QoS/SOCK_Dgram_Mcast_QoS.cpp + * ace/QoS/QoS_Session_Impl.cpp + * ace/QoS/QoS_Session_Impl.inl + * ace/QoS/SOCK_Dgram_Mcast_QoS.h + * ace/QoS/SOCK_Dgram_Mcast_QoS.i + * ace/QoS/QoS_Session_Impl.h + * ace/QoS/QoS_Session_Impl.i + * performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.cpp + * performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.inl + * performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.h + * performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.i + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.inl + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.h + * performance-tests/Synch-Benchmarks/Perf_Test/Performance_Test_Options.i + * Kokyu/Kokyu_dsrt.cpp + * Kokyu/Kokyu_dsrt.inl + * Kokyu/Kokyu.cpp + * Kokyu/Kokyu.inl + * Kokyu/Kokyu_defs.h + * Kokyu/Kokyu_defs.i + * Kokyu/Dispatcher_Impl.h + * Kokyu/Dispatcher_Impl.i + * Kokyu/Default_Dispatcher_Impl.h + * Kokyu/Default_Dispatcher_Impl.i + * Kokyu/Dispatch_Deferrer.h + * Kokyu/Dispatch_Deferrer.i + * Kokyu/DSRT_Dispatcher_Impl_T.h + * Kokyu/DSRT_Dispatcher_Impl_T.i + * Kokyu/DSRT_Dispatch_Item_T.h + * Kokyu/DSRT_Dispatch_Item_T.i + * Kokyu/Kokyu_dsrt.h + * Kokyu/Kokyu_defs.cpp + * Kokyu/Kokyu_defs.inl + * Kokyu/Kokyu_dsrt.i + * Kokyu/Kokyu.h + * Kokyu/Dispatcher_Impl.cpp + * Kokyu/Dispatcher_Impl.inl + * Kokyu/Kokyu.i + * Kokyu/Default_Dispatcher_Impl.cpp + * Kokyu/Default_Dispatcher_Impl.inl + * Kokyu/Dispatch_Deferrer.cpp + * Kokyu/Dispatch_Deferrer.inl + * Kokyu/DSRT_Dispatcher_Impl_T.cpp + * Kokyu/DSRT_Dispatcher_Impl_T.inl + * Kokyu/DSRT_Dispatch_Item_T.cpp + * Kokyu/DSRT_Dispatch_Item_T.inl + * apps/JAWS/clients/Caching/Local_Locator.inl + * apps/JAWS/clients/Caching/Local_Locator.cpp + * apps/JAWS/clients/Caching/URL_Properties.inl + * apps/JAWS/clients/Caching/URL_Properties.cpp + * apps/JAWS/clients/Caching/Local_Locator.h + * apps/JAWS/clients/Caching/Local_Locator.i + * apps/JAWS/clients/Caching/URL_Properties.h + * apps/JAWS/clients/Caching/URL_Properties.i + * apps/JAWS/clients/Caching/Locator_Request_Reply.cpp + * apps/JAWS/clients/Caching/Locator_Request_Reply.inl + * apps/JAWS/clients/Caching/Locator_Request_Reply.h + * apps/JAWS/clients/Caching/Locator_Request_Reply.i + * apps/JAWS2/HTTPU/http_response.h + * apps/JAWS2/HTTPU/http_response.i + * apps/JAWS2/HTTPU/http_base.inl + * apps/JAWS2/HTTPU/http_base.cpp + * apps/JAWS2/HTTPU/http_headers.h + * apps/JAWS2/HTTPU/http_headers.i + * apps/JAWS2/HTTPU/http_status.inl + * apps/JAWS2/HTTPU/http_status.cpp + * apps/JAWS2/HTTPU/parse_http_request.h + * apps/JAWS2/HTTPU/http_request.inl + * apps/JAWS2/HTTPU/parse_http_request.i + * apps/JAWS2/HTTPU/http_request.cpp + * apps/JAWS2/HTTPU/parse_http_response.h + * apps/JAWS2/HTTPU/http_response.cpp + * apps/JAWS2/HTTPU/parse_http_response.i + * apps/JAWS2/HTTPU/http_response.inl + * apps/JAWS2/HTTPU/http_headers.inl + * apps/JAWS2/HTTPU/http_headers.cpp + * apps/JAWS2/HTTPU/http_base.h + * apps/JAWS2/HTTPU/http_base.i + * apps/JAWS2/HTTPU/parse_http_request.inl + * apps/JAWS2/HTTPU/parse_http_request.cpp + * apps/JAWS2/HTTPU/http_status.h + * apps/JAWS2/HTTPU/parse_http_response.cpp + * apps/JAWS2/HTTPU/parse_http_response.inl + * apps/JAWS2/HTTPU/http_status.i + * apps/JAWS2/HTTPU/http_request.h + * apps/JAWS2/HTTPU/http_request.i + * ACEXML/apps/svcconf/Svcconf_Handler.cpp + * ACEXML/apps/svcconf/Svcconf_Handler.inl + * ACEXML/apps/svcconf/Svcconf_Handler.h + * ACEXML/apps/svcconf/Svcconf_Handler.i + * ACEXML/common/AttributesImpl.cpp + * ACEXML/common/LocatorImpl.cpp + * ACEXML/common/Env.cpp + * ACEXML/common/Exception.cpp + * ACEXML/common/SAXExceptions.h + * ACEXML/common/SAXExceptions.i + * ACEXML/common/AttributesImpl.h + * ACEXML/common/AttributesImpl.i + * ACEXML/common/XMLFilterImpl.cpp + * ACEXML/common/Env.h + * ACEXML/common/SAXExceptions.cpp + * ACEXML/common/Env.i + * ACEXML/common/Exception.h + * ACEXML/common/Exception.i + * ACEXML/common/AttributesImpl.inl + * ACEXML/common/LocatorImpl.inl + * ACEXML/common/Env.inl + * ACEXML/common/XMLFilterImpl.h + * ACEXML/common/XMLFilterImpl.i + * ACEXML/common/Exception.inl + * ACEXML/common/XMLFilterImpl.inl + * ACEXML/common/LocatorImpl.h + * ACEXML/common/LocatorImpl.i + * ACEXML/common/SAXExceptions.inl + * ACEXML/parser/debug_validator/Element_Tree.i + * ACEXML/parser/debug_validator/Element_Tree.cpp + * ACEXML/parser/debug_validator/Element_Tree.inl + * ACEXML/parser/debug_validator/Element_Tree.h + * ACEXML/parser/parser/Parser.h + * ACEXML/parser/parser/Parser.i + * ACEXML/parser/parser/Entity_Manager.cpp + * ACEXML/parser/parser/Entity_Manager.inl + * ACEXML/parser/parser/Entity_Manager.h + * ACEXML/parser/parser/Entity_Manager.i + * ACEXML/parser/parser/Parser.cpp + * ACEXML/parser/parser/Parser.inl + * ACEXML/examples/SAXPrint/SAXPrint_Handler.cpp + * ACEXML/examples/SAXPrint/SAXPrint_Handler.inl + * ACEXML/examples/SAXPrint/SAXPrint_Handler.h + * ACEXML/examples/SAXPrint/SAXPrint_Handler.i + * websvcs/lib/URL_Addr.h + * websvcs/lib/URL_Addr.i + * websvcs/lib/URL_Addr.cpp + * websvcs/lib/URL_Addr.inl + * examples/ASX/Event_Server/Event_Server/Options.h + * examples/ASX/Event_Server/Event_Server/Options.i + * examples/ASX/Event_Server/Event_Server/Options.inl + * examples/ASX/UPIPE_Event_Server/Options.h + * examples/ASX/UPIPE_Event_Server/Options.i + * examples/ASX/UPIPE_Event_Server/Options.inl + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.cpp + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.inl + * examples/Service_Configurator/IPC-tests/server/Handle_L_SPIPE.cpp + * examples/Service_Configurator/IPC-tests/server/Handle_L_SPIPE.inl + * examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.h + * examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.i + * examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.h + * examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.i + * examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.h + * examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.i + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.cpp + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.inl + * examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.h + * examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.i + * examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.h + * examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.i + * examples/Service_Configurator/IPC-tests/server/Handle_R_Dgram.h + * examples/Service_Configurator/IPC-tests/server/Handle_R_Dgram.i + * examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.h + * examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.i + * examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.inl + * examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.cpp + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.h + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.i + * examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.inl + * examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.cpp + * examples/Service_Configurator/IPC-tests/server/Handle_L_SPIPE.h + * examples/Service_Configurator/IPC-tests/server/Handle_L_SPIPE.i + * examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.inl + * examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.cpp + * examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.cpp + * examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.inl + * examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.cpp + * examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.inl + * examples/Service_Configurator/IPC-tests/server/Handle_R_Dgram.cpp + * examples/Service_Configurator/IPC-tests/server/Handle_R_Dgram.inl + * examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.cpp + * examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.inl + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.h + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.i + + Moved the .i file to .inl (with history), changed the includes in the + .cpp and .h files to match, removed the .i file. + +Thu Jul 27 18:43:12 UTC 2006 Johnny Willemsen + + * ACE-INSTALL.html: + Some more updates to refer to the subversion archive + +Thu Jul 27 13:57:31 UTC 2006 William R. Otte + + * docs/svn/config + + Fixed syntax errors. thanks to Adam Mitz for reporting them. + +Thu Jul 27 10:14:12 UTC 2006 Johnny Willemsen + + Committing some small changes I had pending to see how svn behaves now + with updates and status info on the build systems. + + * ace/Recursive_Thread_Mutex.{h,cpp}: + Changed removed_ to a bool + + * ace/Thread_Mutex.{h,cpp,inl}: + Changed removed_ to a bool and removed ACE_USES_OBSOLETE_GUARD_CLASSES + support. + +Thu Jul 27 07:37:12 UTC 2006 Johnny Willemsen + + * etc/tao.doxygen: + * etc/tao_portableserver.doxygen: + Set ignore prefix + + * Kokyu/Dispatcher_Task.i + * Kokyu/Dispatcher_Task.inl + Renamed .i to .inl so that we can have a look how subversion stores + this in the history + + * Kokyu/Dispatcher_Task.cpp + * Kokyu/Dispatcher_Task.h + * Kokyu/Makefile.am + Updated for the change above. + +Wed Jul 26 07:25:12 UTC 2006 Johnny Willemsen + + * bin/sets-manager.py: + Fixed typo + +Wed Jul 26 07:25:12 UTC 2006 Johnny Willemsen + + * ACE-INSTALL.html: + * html/Stats/index.shtml: + * docs/ACE-bug-process.html: + Updated documentation to point to the new svn repository + +Tue Jul 25 21:51:07 UTC 2006 William R. Otte + + * bin/PythonACE/fuzz/max_project_len.py + * bin/PythonACE/fuzz/inline.py + + Fixed errors in these checks. + +Tue Jul 25 20:52:51 UTC 2006 William R. Otte + + * bin/PythonACE/fuzz/cpp_inline.py + + Fixed this check, it was incorrectly matching ACE_INLINES inside + defines and comments. + +Tue Jul 25 20:16:26 UTC 2006 William R. Otte + + * docs/svn/svn-prefs.reg + * docs/svn/config + + Updated to add global-ignores to mimic .cvsignore functionality. + +Tue Jul 25 19:40:54 UTC 2006 William R. Otte + + * bin/PythonACE/__init__.py + + This enables PythonACE to be loaded as a module. + + * bin/PythonACE/fuzz/check_includes.py + * bin/PythonACE/fuzz/no_conflict_markers.py + + Fixed these checks, they were incorrectly flagging errors. + + * bin/fuzz.py + + Command line fuzz client that uses the PythonACE fuzz module. + + * bin/sets-manager.py + + Corrected this file to point at DOC/Middleware instead of ACE/Middleware. + +Mon Jul 24 23:58:33 UTC 2006 William R. Otte + + * docs/svn/svn-prefs.reg + * docs/svn/config + + Updated these files to add svn:keywords to most text types. + +Mon Jul 24 23:53:53 UTC 2006 William R. Otte + + * bin/create_ace_build.pl + + Fix provided by Steve Huston to prevent this script from building + links from .svn directories. + +Mon Jul 24 19:17:37 UTC 2006 William R. Otte + + * bin/fuzz.pl + + Disabled the ID string check until the script can be fixed to ignore + .svn directories. + +Mon Jul 24 15:45:34 UTC 2006 William R. Otte + + * Subversion conversion completed at revision 73730 + +Sun Jul 23 15:44:43 UTC 2006 William R. Otte + + * Repository frozen for repository conversion + +Sun Jul 23 11:17:31 UTC 2006 Johnny Willemsen + + * bin/make_release: + Don't exclude the other mwc files for vc71/vc8, this will create then + some more workspace files which just contain a subset of the projects + +Sun Jul 23 09:25:12 UTC 2006 Olli Savia + + * NEWS: + Added a note about TTY_IO API change. + +Sat Jul 22 19:12:10 UTC 2006 William R. Otte + + * docs/svn/config + * docs/svn/svn-prefs.reg + + These are client side configuration files for Subversion. Currently, + the automate setting svn:eol-style and svn:executable properties on + newly added files. + +Sat Jul 22 18:28:33 UTC 2006 William R. Otte + + * bin/sets-manager.py + + First cut of a branching script for subverion. Pass --help + to get documentation. + +Fri Jul 21 13:28:31 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + Updated because of -oS addition to tao_idl + +Fri Jul 21 13:17:31 UTC 2006 Johnny Willemsen + + * ace/OS_NS_unistd.cpp: + Const improvements and initialise pointer with 0 + +Thu Jul 20 21:44:31 UTC 2006 Iliyan Jeliazkov + + * tests/Service_Config_Test.cpp: + + In testLimits (), surrounded string literals with ACE_TEXT to + fix a build error on wchar builds. + +Thu Jul 20 16:42:04 UTC 2006 Ossama Othman + + * ace/Basic_Types.h: + + Removed ACE_NTOHLL function. It was experimental, untested and + not ready for the ACE sources just yet. + + Removed "ace/os_include/netinet/os_in.h" include directive. Now + that ACE_NTOHLL has been removed it is no longer necessary. + + * ace/Numeric_Limits.h: + + Commented out "{unsigned} long long" specializations in the + ACE_LACKS_NUMERIC_LIMITS case. They're currently not used, and + we need + +Thu Jul 20 15:19:30 UTC 2006 Douglas C. Schmidt + + * ace/Basic_Types.h: Added + + # include "ace/os_include/netinet/os_in.h" // Get ntohl() + + and added the inline keyword to ACE_NTOHLL() to fix the problems + introduced with + + Wed Jul 19 22:46:51 UTC 2006 Ossama Othman + +Thu Jul 20 15:01:32 UTC 2006 Douglas C. Schmidt + + * ace/Configuration.cpp: Made + ACE_Configuration_ExtId::operator==() and + ACE_Configuration_ExtId::operator!=() case insensitive. Thanks + to Domingos Monteiro for this + contribution. + +Thu Jul 20 09:57:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/tao_no_iiop.mpb: + New feature to disable iiop in TAO + + * bin/MakeProjectCreator/config/global.features: + Set tao_no_iiop to 0 by default + +Thu Jul 20 09:11:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_Thread.h: + Doxygen improvements + +Thu Jul 20 08:55:12 UTC 2006 Johnny Willemsen + + * ace/Mutex.{h,cpp,inl}: + Made the removed_ member a bool instead of an int + +Thu Jul 20 08:37:17 UTC 2006 Olli Savia + + * ace/TTY_IO.cpp: + Fixed compile error on VxWorks. Thanks to Johnny for pointing + out the problem. + +Wed Jul 19 23:39:05 UTC 2006 William R. Otte + + * bin/PythonACE/fuzz/__init__.py + * bin/PythonACE/fuzz/_generic_handler.py + * bin/PythonACE/fuzz/_mailer.py + * bin/PythonACE/fuzz/_singleton.py + * bin/PythonACE/fuzz/_warning_handler.py + * bin/PythonACE/fuzz/streams_include.py + + Changes necessary to support mailing (non-fatal) Fuzz errors to + the user that attempts a commit. streams_include is an example + of a fuzz check that sends warnings instead of stopping commits. + +Wed Jul 19 22:46:51 UTC 2006 Ossama Othman + + * ace/Basic_Types.h (ACE_INT64, ACE_UINT64): + + Silence g++ "-pedantic" warnings regarding use of "long long" + type by preceding the typedef with the g++ __extension__ + keyword. + +Wed Jul 19 21:15:51 UTC 2006 Iliyan Jeliazkov + + * NEWS: + + Updated the file with a note announcing the interface change + from "Wed Jul 19 20:11:52 UTC 2006". + +Wed Jul 19 20:11:52 UTC 2006 Iliyan Jeliazkov + + * ace/ACE.h: + * ace/ACE.cpp: + + Changing ACE::debug () to use boolean instead of char. + + * ace/Acceptor.cpp: + * ace/DLL_Manager.cpp: + * ace/Dynamic_Service_Dependency.cpp: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/Service_Gestalt.cpp: + * ace/Service_Object.cpp: + * ace/Service_Repository.cpp: + * ace/Service_Types.cpp: + + Updating places where ACE::debug() return value is interpreted + as a integral type. + + * tests/Service_Config_Test.cpp: + + Fixing the test to correctly account for XML-based service + configurations. + +Wed Jul 19 15:53:09 UTC 2006 William R. Otte + + * bin/PythonACE/fuzz/__init__.py + * bin/PythonACE/fuzz/_fuzz.py + * bin/PythonACE/fuzz/_generic_handler.py + * bin/PythonACE/fuzz/_path.py + * bin/PythonACE/fuzz/_types.py + * bin/PythonACE/fuzz/check_includes.py + * bin/PythonACE/fuzz/cpp_inline.py + * bin/PythonACE/fuzz/inline.py + * bin/PythonACE/fuzz/math_include.py + * bin/PythonACE/fuzz/max_filename.py + * bin/PythonACE/fuzz/max_project_len.py + * bin/PythonACE/fuzz/newline.py + * bin/PythonACE/fuzz/no_conflict_markers.py + * bin/PythonACE/fuzz/noncvs.py + * bin/PythonACE/fuzz/ptr_arith_t.py + * bin/PythonACE/fuzz/refcountservantbase.py + * bin/PythonACE/fuzz/verify_changelog.py + + This is a python module designed to eventually replace the + bin/fuzz.pl script. Each .py file in the fuzz directory that + does not have a _ at the beginning of its filename contains a + single check. New fuzz checks can be added to the system simply + by creating a new file in the fuzz directory. Care should be + taken to select a filename that does not conflict with an + existing python module. + + ptr_arith_t.py and inline.py are good examples that use the + generic handler to implement their checks, max_project_len is a + good example of a check that does not use the generic handler. + +Wed Jul 19 15:07:29 UTC 2006 Iliyan Jeliazkov + + * ace/DLL_Manager.cpp: + + Fixing a build problem on HP and Windows, as a consequence of my + earlier change: "Tue Jul 18 19:17:54 UTC 2006". Moral: use + ACE_TEXT around literal expressions only. + +Wed Jul 19 13:55:39 UTC 2006 Olli Savia + + * examples/IPC_SAP/DEV_SAP/reader/reader.cpp: + * examples/IPC_SAP/DEV_SAP/writer/writer.cpp: + Updated to reflect changes below. + +Wed Jul 19 13:39:13 UTC 2006 Olli Savia + + * ace/TTY_IO.h: + Changed type of rtsenb from 'int' to 'unsigned char'. + Updated documentation to note that 'parityenb' member is + now deprecated. + + * ace/TTY_IO.cpp: + Changed constructor of Serial_Params class to assign sensible + values to class members. + +Wed Jul 19 10:47:31 UTC 2006 Steve Huston + + * tests/Proactor_Timer_Test.cpp: Corrected compile warning re static. + +Wed Jul 19 08:00:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_config_handlers_base.mpb: + Use exceptions as base project + +Wed Jul 19 7:14:10 UTC 2006 Ossama Othman + + * ace/String_Base.h (size_type): + + Explicitly bring the ACE_String_Base_Const::size_type typedef + into the ACE_String_Base<> scope through a "using" declaration. + IBM Visual Age 6 and Sun Studio 10 have difficulty resolving the + name otherwise. + + * ace/SString.cpp: + + Replaced std::numeric_limits<>::max() call that was + inadvertently introduced with its ACE_Numeric_Limits<> + counterpart. The former is not available on VxWorks. + +Tue Jul 18 22:52:38 UTC 2006 Steve Huston + + * tests/Message_Queue_Test_Ex.cpp: Rearranged the pieces left out of + single-threaded builds; should correct single-threaded builds. + +Tue Jul 18 20:50:49 UTC 2006 Douglas C. Schmidt + + * Happy Birthday to me!! + +Tue Jul 18 19:17:54 UTC 2006 Iliyan Jeliazkov + + This change is in response to bug#2602, which was reported by + Lothar Werzinger . It fixes a + problem with trying to use XML as the service configuration file + format. The change also includes additional comments and + in-line documentation on the new ability to use local service + repositories. + + * ace/DLL_Manager.cpp: + + Updated the debugging output of DLL_Handle::open() to be able to + see _why_ a DLL open failed. For example, the errno message is + 'not found' in a case where one tries to open library A, which + in turn depends on library B, but B is missing. This change + allows one to see the underlying cause for the error + (via DLL_Handle::error(), if ACE_DEBUG=2, or greater is + present). + + * ace/Parse_Node.h: + * ace/Parse_Node.cpp: + + Moving the ACE_Service_Type_Factory here, from + Service_Config.{h,cpp} This class is only needed when + ACE_USES_CLASSIC_SVC_CONF is 1, i.e. when ACE is using the + non-XML configuration file format. Therefore, moving it to + Parse_Node.{h,cpp} causes it to compile only if needed. + + * ace/Service_Config.h: + + Removed the static get_xml_svc_conf() method, as it already has + the required implementation in the base class. + + * ace/Service_Gestalt.h: + * ace/Service_Gestalt.cpp: + + Moved the ACE_Service_Type_Factory class to Parse_Node.{h,cpp}. + Updated the documentation with a more clear description of the + class responsibilities. Corrected minor omissions. + +Tue Jul 18 18:12:17 UTC 2006 Douglas C. Schmidt + + * ACE-INSTALL.html: Updated the description of how to build + ACE+TAO using MPC. Thanks to Steve Totten for helping with + this. + +Tue Jul 18 19:04:42 UTC 2006 Ossama Othman + + * ace/Numeric_Limits.h: + + Corrected short integer limit constants, i.e. "s/SHORT/SHRT/g". + + Try other known "long long" integer constants if + "{U}LLONG_{MIN,MAX}" are not available. Issue a preprocessor + error if all known cases have been exhausted. + +Tue Jul 18 16:55:31 UTC 2006 Ossama Othman + + * ace/Makefile.am (libACE_la_SOURCES, nobase_include_HEADERS): + + Added new Sig_{Adapter,Handler}.* source and header files. + +Mon Jul 17 23:18:52 UTC 2006 Douglas C. Schmidt + + * ace/README: Documented the ACE_TIMEPROBE_ASSERTS_FIXED_SIZE macro. + +Mon Jul 17 23:16:55 UTC 2006 Douglas C. Schmidt + + * ace/Timeprobe_T.cpp (timeprobe): Added a check to guard against + segfaults by wrapping the index around when it reaches the end + of the buffer. Thanks to Patrick Rabau for this fix. + +Tue Jul 18 13:21:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug_2595_Regression + +Tue Jul 18 12:48:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + Fixed the rules to decide whether a .inl file should be added + or not. Thanks to Chad Elliot for noticing this incorrect + rule. + +Tue Jul 18 09:59:12 UTC 2006 Johnny Willemsen + + * bin/PerlACE/ProcessVX_Win32.pm: + Increased delay factor from 2 to 3, downloading executables + seems to take longer now + +Tue Jul 18 09:54:12 UTC 2006 Johnny Willemsen + + * bin/PerlACE/Process_Unix.pm: + Removed chorus support + +Mon Jul 17 22:52:19 UTC 2006 Steve Huston + + * ace/Proactor.cpp (schedule_timer): Record the ACE_Proactor instance + that the timer is scheduled on in the ACE_Handler; makes this + behavior analogous to that in ACE_Reactor::schedule_timer(). + + * tests/Proactor_Timer_Test.cpp: Add a test for repeating timers and + canceling a repeating timer when it's likely that an expiration for + the timer is already queued when it's canceled. + +Mon Jul 17 16:06:57 UTC 2006 Steve Huston + + * tests/Unload_libACE.cpp: Alter the libACE suffix for HP-UX on + PA-RISC only. Also see: + Fri Jul 14 19:44:03 UTC 2006 john_c + +Mon Jul 17 22:11:42 UTC 2006 Chad Elliott + + * examples/Threads/process_semaphore.cpp: + + Added #include of ace/OS_NS_stdlib.h to get ACE_OS::atoi(). + +Mon Jul 19 11:21:56 UTC 2006 Ossama Othman + + * ace/String_Base.cpp: + * ace/String_Base.inl: + + Explicitly qualify size_type parameters with "typename" to force + some compilers (Sun Studio 10) to recognize it as a type. + +Mon Jul 17 17:49:41 UTC 2006 Ossama Othman + + * include/makeinclude/platform_hpux_aCC.GNU (SOFLAGS): + + Corrected shared library path for Itanium builds. + + * protocols/ace/HTBP/HTBP_ID_Requestor.cpp (get_HTID): + + Use new ACE_CString::size_type type to hold string + position/index value, instead of "int". Addresses "comparison + between signed and unsigned" warnings. + +Mon Jul 17 16:04:07 UTC 2006 Chad Elliott + + * NEWS: + + Added information about the use of atomic operations on SPARC + Solaris. + +Mon Jul 17 15:09:21 UTC 2006 Steve Huston + + * ace/Refcounted_Auto_Ptr.{h inl} (null): Changed the return type + of the null() method from int to bool in order to more accurately + reflect the true/false nature of the returned value. + + * NEWS: Noted the above change. + +Mon Jul 17 15:05:05 UTC 2006 Steve Huston + + * examples/System_V_IPC/SV_Message_Queues/MQ_Server.cpp: Added + include "ace/Log_Msg.h" in the "non-supported platform" case. + Fixes compile error on Windows. + +Mon Jul 17 13:03:09 UTC 2006 Chad Elliott + + * ace/ace_for_tao.mpc: + + Sig_Handler.cpp and Sig_Adapter.cpp are needed to link gperf. + +Mon Jul 17 12:49:34 UTC 2006 Chad Elliott + + * netsvcs/servers/main.cpp: + + Added a missing #include for ace/Sig_Adapter.h. + +Mon Jul 17 11:57:26 UTC 2006 Chad Elliott + + * ace/qt_reactor.mpb: + + Removed this file. It was no longer referenced by ace and it's + functionality was replaced by ace_qtreactor.mpc. + +Mon Jul 17 10:41:14 UTC 2006 Steve Huston + + * tests/Message_Queue_Test_Ex.cpp: Removed the VxWorks-specific + section from MQ_Ex_N_Tester::receiver() - it was apparantly + pulled in from another test example and didn't need to be here. + Should resolve compile errors on VxWorks. + +Mon Jul 18 09:32:12 UTC 2006 Johnny Willemsen + + * ace/config-vxworks6.3.h: + * include/makeinclude/platform_vxworks6.3.GNU: + New files for VxWorks 6.3 + + * ace/os_include/sys/os_types.h: + * ace/os_include/os_stdio.h: + * ace/OS_NS_unistd.inl: + * ace/OS_NS_arpa_inet.cpp: + Updated for VxWorks 6.3 + +Sun Jul 17 06:49:21 UTC 2006 Ossama Othman + + * apps/soreduce/Library.cpp (set_path): + * apps/soreduce/Obj_Module.cpp (add_source): + * examples/Misc/test_sstring.cpp: + * examples/Web_Crawler/Command_Processor.cpp: + * examples/Web_Crawler/URL_Visitor.cpp: + + Use new ACE_CString::size_type type to hold string + position/index value, instead of "int". Addresses "comparison + between signed and unsigned" warnings. + + * examples/APG/Signals/SigAction.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Server.cpp: + * examples/System_V_IPC/SV_Message_Queues/TMQ_Server.cpp: + + Include "ace/OS_NS_stdlib.h" to pull in ACE_OS::exit() + prototype. + + * examples/APG/Signals/SigGuard.cpp: + * examples/APG/Signals/SigHandler.cpp: + * examples/APG/Signals/SigHandlers.cpp: + * examples/APG/ThreadManagement/Signals.cpp: + * examples/APG/ThreadManagement/Signals2.cpp: + * examples/ASX/CCM_App/SC_Server.cpp: + * examples/ASX/Event_Server/Event_Server/event_server.cpp: + * examples/ASX/UPIPE_Event_Server/event_server.cpp: + * examples/Connection/blocking/SPIPE-connector.h: + * examples/Connection/misc/Connection_Handler.cpp: + * examples/Connection/non_blocking/CPP-acceptor.h: + * examples/Connection/non_blocking/CPP-connector.h: + * examples/Service_Configurator/IPC-tests/server/server_test.cpp: + * netsvcs/lib/TS_Clerk_Handler.cpp: + + Include "ace/Sig_Handler.h" or "ace/Sig_Adapter.h" to pull in + ACE_Sig_Handler or ACE_Sig_Adapter class declaration, + respectively. Necessitated by "ace/Signal.h" refactoring. + +Sun Jul 16 23:14:53 UTC 2006 Ciju John + + * ace/String_Base_Const.cpp: + + Took out an extra sem-colon. It seems to make the + FC4_Versioned_Namespace build grumpy. + +Sat Jul 15 16:14:05 UTC 2006 Ciju John + + * NEWS: + + Added entry on HPUX library extension changes. + +Fri Jul 14 22:10:02 UTC 2006 Ossama Othman + + * ace/Sig_Handler.cpp: + + Removed explicit template instantiations. They snuck back in + when Signal.* was refactored. Thanks to Johnny for pointing + this out. + +Fri Jul 14 21:32:02 UTC 2006 Ossama Othman + + * ace/Numeric_Limits.h: + + "ace/ACE_Export.h" -> "ace/ACE_export.h". Darn Windows case + insensitivity. + + Removed unnecessary "ACE_Export" from ACE_Numeric_Limits primary + template. + + * ace/Registry.cpp (make_name): + + Use ACE_TString::size_type, not ssize_t, to hold string position + values. Addresses signed/unsigned comparison warnings. + + * ace/Shared_Memory_Pool.h: + + Include new "ace/Sig_Handler.h" header to pull in + ACE_Sig_Handler class declaration. + + * ace/String_Base.h: + + Added tips to documentation related to potentially user visible + changes. + +Fri Jul 14 21:10:11 UTC 2006 Ossama Othman + + * ace/Atomic_Op.h (ACE_Atomic_Op): + * ace/Atomic_Op.inl (ACE_Atomic_Op): + + Reverted change that made the constructor parameters for the + "long" type specialization be passed in by reference to const + instead of by value. Explicit template instantiation is no + longer performed by ACE so there is no need for the + specialization constructor parameters to match the primary + template constructor parameters. + + * ace/CDR_Base.cpp: + * ace/CDR_Stream.h: + * ace/CDR_Stream.inl: + + Const-correctness improvements. + + * ace/CDR_Base.h: + + Minor const related cosmetic changes. + + * ace/CDR_Base.inl (first_size, next_size): + + Quickly multiply by two using a bit shift. This is guaranteed + to work since the variable is an unsigned integer. + + * ace/CORBA_macros.h: + + Removed unnecessary instantiation of emulated exception + environment variable from native exception case. Reduces + footprint in code that uses the ACE emulated exception macros in + a native C++ exception configuration, and provides a slight + performance increase due to resulting tighter binaries. + + * ace/DLL_Manager.cpp (get_dll_names): + + ACE_TString::rfind() now return an ACE_TString::size_type type. + Use ACE_TString::size_type, not ssize_t, to hold the return + value of ACE_TString::rfind(). + + * ace/Dev_Poll_Reactor.cpp: + + Include new "ace/Sig_Handler.h" header to pull in + ACE_Sig_Handler class declaration. + + Added support for HP-UX devpoll headers. + + * ace/Event_Handler.cpp: + + No need to include "ace/Message_Block.h". + + * ace/MMAP_Memory_Pool.h: + * ace/Select_Reactor_T.cpp: + * ace/TP_Reactor.cpp: + * ace/WFMO_Reactor.inl: + + Include new "ace/Sig_Handler.h" header to pull in + ACE_Sig_Handler class declaration. + + * ace/Malloc_Base.h (ACE_Allocator): + + Defined a new "size_type" typedef (currently a "size_t") to + simplify potential allocator size type changes in the future. + It's introduction was motivated by the ACE string class size + type fixes described below. Analogous to the STL + std::allocator<>::size_type typedef. + + * ace/Numeric_Limits.h: + + Traits containing basic integer limits. Useful for + template-based code on platforms that lack + std::numeric_limits<>. These traits are not meant to be a + replacement for std::numeric_limits<>. Rather they are a crutch + until all ACE-supported platforms support + std::numeric_limits<>. [Bug 2451] + + * ace/OS_NS_dirent.inl: + + "__USE_POSIX" -> "_POSIX_SOURCE". The former is a C library + implementation-specific feature test macro/symbol. + + * ace/OS_NS_stdio.cpp: + * ace/OS_NS_stdio.h: + * ace/OS_NS_stdio.inl (get_win32_versioninfo): + + Fixed/added missing wide character support. + + * ace/OS_NS_stdlib.cpp (mkstemp_emulation): + + Clean up preprocessor conditional blocks by taking advantage of + new ACE_Numeric_Limits<> trait templates. + + * ace/OS_NS_stdlib.inl (atop): + + Address VC++ 64-bit warnings by taking advantage of standard + intptr_t type, if available. + + * ace/OS_NS_sys_socket.inl (closesocket): + + Do not shutdown the write end here. Doing so will break + applications that duplicate a handle on fork(), for example, and + expect to continue writing in the fork()ed process. + + * ace/OS_NS_sys_utsname.cpp (uname): + + Fixed garbage in wide string output. + + * ace/Object_Manager.cpp: + + No need to include "ace/Containers.h". + + Include newly refactored "ace/Sig_Adapter.h" instead of old + "ace/Signal.h". Removes dependency on the ACE_Reactor. Allows + service configurator-disabled subset containing + ACE_Object_Manager support to be built, e,g, MPC ace_svcconf=0 + configuration. + + * ace/Object_Manager_Base.cpp (init): + * ace/Process.cpp (pass_handle): + + Fixed Windows version info handling in wide string + configurations. + + * ace/Process_Manager.h (wait): + + Clarified that the timeout value is a relative time, not + absolute, in the documentation. + + * ace/SOCK_Acceptor.cpp (shared_open): + + Removed assertion that assumes all protocol families are + internet related. This method is invoked by some non-internet + protocol subclasses, such as ACE_LSOCK_Acceptor. + + * ace/SOCK_Stream.cpp (close): + + Reinstituted explicit close_writer() method call for the + ACE_WIN32 case since ACE_OS::close() no longer causes the writer + to be shutdown on Windows (nor should it!). + + * ace/Service_Config.cpp: + + Replaced old "ace/Signal.h" include directive with + "ace/Sig_Adapter.h". ACE_Sig_Handler support is unnecessary. + + Removed redundant "ace/Service_Config.h" include directive. + + * ace/Sig_Adapter.cpp: + * ace/Sig_Adapter.h: + * ace/Sig_Handler.cpp: + * ace/Sig_Handler.h: + * ace/Sig_Handler.inl: + * ace/Signal.cpp: + * ace/Signal.h: + * ace/Signal.inl: + + Refactored ACE_Sig_Adapter and ACE_Sig_Handler classes from + "ace/Signal.*" into their own dedicated source files. Allows + ACE_Sig_{Guard,Set} to be used without introducing a dependency + on the ACE_Reactor framework. + + * ace/String_Base_Const.cpp (npos): + * ace/String_Base_Const.h (npos): + + Introduced a new "size_type" typedef. This is consistent with + the standard C++ string class typdef/trait. + + The "no position" constant is now an unsigned integer of the + same "size" type used by the underlying ACE string allocator. + It is defined to be the maximum value the unsigned type can + handle (e.g. ACE_Numeric_Limits::max()). This works + since a string length will always be less than or equal to + "max() - 1" since the final character in the string is the null + terminator. [Bug 2598] + + * ace/String_Base.cpp: + * ace/String_Base.h: + * ace/String_Base.inl: + * ace/SString.cpp: + * ace/SString.h: + * ace/SString.inl: + + All size parameter and return value types are now consistent + with the size type of the underlying allocator + (i.e. ACE_Allocator::size_type). Addresses inability of ACE + string classes to provide valid search index for string lengths + greater than the maximum value of ssize_t, a signed type. In + particular, the find(), rfind() and strstr() methods now return + an unsigned integer (size_t) instead of a signed one + (ssize_t). Affected classes include: + + ACE_CString + ACE_WString + ACE_TString + ACE_NS_WString + + Unless you have been explicitly using -1 instead of npos when + comparing the return value of find(), rfind() and strstr(), + and/or assigning the return value to ssize_t you should not see + any difference. A new size_type typedef has been added to the ACE + string class to aid developers. + + The ACE_String_Base<>::strstr() documentation as well as a + default rfind() argument erroneously referred to -1 instead of + npos. Those instances have been corrected. + + To summarize, a "no position" condition is denoted using the npos + constant, not -1. It can be referred directly by scoping it with + the appropriate string class (e.g. ACE_CString::npos, + ACE_WString::npos, etc). [Bug 2598] + + * ace/Task_T.h: + + Include "ace/IO_Cntl_Msg.h" to pull in ACE_IO_Cntl_Msg class + declaration. + + * ace/Time_Value.cpp (max_time): + + Cleaned up preprocessor conditional blocks by taking advantage + of ACE_Numeric_Limits trait templates. + + * ace/Timer_Queue_Adapters.cpp: + + Include "ace/Signal.h" to pull in ACE_Sig_Guard class + declaration. + + * ace/Timer_Queue_Adapters.h: + + Forward declare ACE_Sig_Set class. No need for the full blown + declaration. + + * ace/Token.cpp: + + Minor cosmetic change. + + * ace/ace_wchar.h (ACE_GetVersionEx): + + New wide string support for Windows "GetVersionEx{A,W}()" + functions. + + * ace/ace_wchar.inl: + + Improved const-correctness. + + * ace/config-aix-4.x.h: + * ace/config-macosx-panther.h: + * ace/config-macosx-tiger.h: + * ace/config-macosx.h: + + Fixed single-threaded configuration so that all multi-thread + support is disabled. + + * ace/ace.mpc: + + Added missing DLL_Manager.cpp source file, and newly refactored + Sig_{Adapter,Handler}.cpp source files. + + * ace/ace_for_tao.mpc: + + Explicitly require the ace_svcconf MPC feature. + + Added missing ACE_LACKS_ACE_TOKEN macro. The ace_for_tao subset + does not support ACE's token collections. + + * ace/svcconf.mpb: + + Do not define ACE_HAS_ACE_SVCCONF. There is no such macro in + the ACE sources. + + Explicitly remove ACE_LACKS_ACE_SVCCONF from the macro list. + + Moved "DLL_Manager.cpp" to the core ACE library source file + list. "DLL_Manager.cpp" is not an optional component, and must + always exist in ACE regardless of whether or not ACE's service + configurator support is enabled. + + * ace/token.mpb: + + Do not define ACE_HAS_ACE_TOKEN. There is no such macro in + the ACE sources. + + Explicitly remove ACE_LACKS_ACE_TOKEN from the macro list. + + * bin/MakeProjectCreator/config/ace_for_tao.mpb: + + Added missing ACE_LACKS_ACE_TOKEN macro. The ace_for_tao subset + does not support ACE's token collections. + + * tests/SString_Test.cpp: + + Corrected checks for "no position" return values to compare + against "npos" constant, not "-1". + +Fri Jul 14 20:57:12 UTC 2006 Johnny Willemsen + + * ace/INET_Addr.cpp: + Initialise some pointers explicitly with 0 + +Fri Jul 14 20:41:23 UTC 2006 john_c + + * bin/tao_orb_tests.lst: + + Add new test TAO/tests/Optimized_Connection to nightly builds. + +Fri Jul 14 20:39:41 UTC 2006 Steve Huston + + * ace/config-vxworks6.2.h: Reverted this change: + Fri Jul 14 10:34:43 UTC 2006 Steve Huston + It appears to not work, and I can't test anything else here. + +Fri Jul 14 18:53:32 UTC 2006 William R. Otte + + * bin/MakeProjectCreator/config/global.features + * bin/MakeProjectCreator/config/stl.mpb + + Added an stl feature/base project for projects that use portions + of the STL that may not be universally supported. + +Fri Jul 14 19:44:03 UTC 2006 john_c + + * ace/config-hpux-11.00.h: + * include/makeinclude/platform_hpux_aCC.GNU: + + Changing the shared library extension for hpux ia64 to ".so". On + HP-UX 11i Version 1.5 the naming scheme is lib*.sl for PA and + lib*.so on IPF. + +Fri Jul 14 19:29:59 UTC 2006 Steve Huston + + * ace/OS_NS_stdio.cpp (DllMain): Add extern "C" to the DllMain + signature - enables it to be located and called at startup. + Thanks to Hubert Talbot + for this fix. + +Fri Jul 14 19:13:06 UTC 2006 john_c + + * ace/Timer_Queue_Adapters.cpp: + + Include file was missing. Fixes compile error when + ACE_HAS_DEFERRED_TIMER_COMMANDS is defined. + +Fri Jul 14 19:05:15 UTC 2006 Ciju John + + * bin/tao_other_tests.lst: + + Adding the TAO/orbsvcs/tests/Event/Mcast/RTEC_MCast_Federated + test to nightly builds. + +Fri Jul 14 16:25:00 UTC 2006 Phil Mesnier + + * bin/tao_orb_tests.lst: + Added exclusions for Bug_2593_Regression test. + +Fri Jul 14 15:50:34 UTC 2006 Adam Mitz + + * bin/PerlACE/Process_Unix.pm: + * bin/PerlACE/Process_Win32.pm: + + Added an optional parameter to Process->Kill(). If the parameter is + true then the return value from the process is ignored. + +Fri Jul 14 15:45:04 UTC 2006 Steve Huston + + * tests/Message_Queue_Test_Ex.{h cpp}: Corrected for !ACE_HAS_THREADS. + +Fri Jul 14 15:39:53 UTC 2006 Adam Mitz + + * bin/tao_other_tests.lst: + Added new test (TAO/orbsvcs/tests/CosEvent/Timeout/run_test.pl). + +Fri Jul 14 10:34:43 UTC 2006 Steve Huston + + * ace/config-vxworks6.2.h: Added ACE_LACKS_USECONDS_T to fix a + compile error. It's in the non-__RTP__ section since that's where + ACE_LACKS_SUSECONDS_T was, but I'm not sure this is correct. + +Fri Jul 14 07:26:46 UTC 2006 Olli Savia + + * ace/Thread_Mutex.h: + * ace/ace_wchar.h: + * tests/SOCK_Dgram_Bcast_Test.cpp: + Fixed typos in comments. + + * m4/config_h.m4: + Removed references to ACE_HAS_TERM_IOCTLS. It's no longer + used in ACE/TAO/CIAO code. + +Fri Jul 14 02:11:21 UTC 2006 Phil Mesnier + + * bin/tao_orb_tests.lst: + Added new test for Bug 2593 to nightly suite. + +Thu Jul 13 20:40:10 UTC 2006 Olli Savia + + * ace/config-integritySCA.h: + Removed references to ACE_HAS_ATTR_SETSCHED. It's no longer + used in ACE/TAO/CIAO code. + + * ace/config-rtems.h: + Removed references to ACE_HAS_SIGNAL_SAFE_OS_CALLS. It's no longer + used in ACE/TAO/CIAO code. + + * ace/config-sco-5.0.0-mit-pthread.h: + Removed references to ACE_HAS_T_OPMGMT. It's no longer + used in ACE/TAO/CIAO code. + +Thu Jul 13 10:35:39 UTC 2006 Olli Savia + + * ace/Base_Thread_Adapter.cpp: + * ace/Cleanup.cpp: + * ace/OS.cpp: + * ace/OS_Errno.cpp: + * ace/OS_Log_Msg_Attributes.cpp: + * ace/OS_NS_Thread.cpp: + * ace/OS_NS_arpa_inet.cpp: + * ace/OS_NS_ctype.cpp: + * ace/OS_NS_dirent.cpp: + * ace/OS_NS_dlfcn.cpp: + * ace/OS_NS_errno.cpp: + * ace/OS_NS_fcntl.cpp: + * ace/OS_NS_math.cpp: + * ace/OS_NS_netdb.cpp: + * ace/OS_NS_poll.cpp: + * ace/OS_NS_pwd.cpp: + * ace/OS_NS_regex.cpp: + * ace/OS_NS_signal.cpp: + * ace/OS_NS_stdio.cpp: + * ace/OS_NS_stdlib.cpp: + * ace/OS_NS_string.cpp: + * ace/OS_NS_strings.cpp: + * ace/OS_NS_stropts.cpp: + * ace/OS_NS_sys_mman.cpp: + * ace/OS_NS_sys_msg.cpp: + * ace/OS_NS_sys_resource.cpp: + * ace/OS_NS_sys_select.cpp: + * ace/OS_NS_sys_sendfile.cpp: + * ace/OS_NS_sys_shm.cpp: + * ace/OS_NS_sys_socket.cpp: + * ace/OS_NS_sys_stat.cpp: + * ace/OS_NS_sys_time.cpp: + * ace/OS_NS_sys_uio.cpp: + * ace/OS_NS_sys_wait.cpp: + * ace/OS_NS_time.cpp: + * ace/OS_NS_unistd.cpp: + * ace/OS_NS_wchar.cpp: + * ace/OS_TLI.cpp: + * ace/Thread_Adapter.cpp: + * ace/Thread_Control.cpp: + * apps/JAWS2/HTTPU/parse_http_request.cpp: + * apps/JAWS2/HTTPU/parse_http_response.cpp: + + Fixed typo in comment. + +Thu Jul 13 09:51:33 UTC 2006 Olli Savia + + * configure.ac: + Removed references to ACE_HAS_EXCEPTION_H. It's no longer + used in ACE/TAO/CIAO code. + +Thu Jul 13 09:48:10 UTC 2006 Olli Savia + + * ace/os_include/os_string.h: + * ace/os_include/os_stropts.h: + Fixed typo in comment. + +Thu Jul 13 09:32:54 UTC 2006 Olli Savia + + * ace/config-vxworks6.2.h: + * configure.ac: + * m4/config_h.m4: + Removed references to ACE_HAS_USING_KEYWORD. It's no longer + used in ACE/TAO/CIAO code. + +Thu Jul 6 20:45:15 UTC 2006 Steve Huston + + * ace/Refcounted_Auto_Ptr.{h inl}: Repaired the ACE_Refcounted_Auto_Ptr + reset() and release() methods per Bugzilla #1925. They will both now + detach from the underlying ACE_Refcounted_Auto_Ptr_Rep object; + reset() will create a new one for the new pointer specified as its + argument. Generally modified the class to not make changes to the + underlying ACE_Refcounted_Auto_Ptr_Rep (such as with reset()). This + safely allows the get() method to avoid using the lock for reading + the pointer value since there's no way to change the underlying + rep's pointer. + Also cleaned up the Doxygen stuff for these classes. + + This work resulted in removal of the following methods in + ACE_Refcounted_Auto_Ptr_Rep (not ACE_Refcounted_Auto_Ptr): + - null () + - assign () + - release () + - reset () + + This significantly improves ACE_Refcounted_Auto_Ptr. This is not + a recommendation to [not] use it over ACE_Strong_Bound_Ptr. Just + responding to user reports. It may still be possibly/adviseable to + work further on this class, though I have no specific ideas or + reports at this time. + + * tests/Refcounted_Auto_Ptr_Test.{h cpp}: Added tests for release() + and reset() per code supplied in Bugzilla #1925. Removed code in + ACE_ASSERT since it doesn't run in Release builds; replaced with + explicit checks and ACE_ERROR. + +Wed Jul 12 20:32:49 UTC 2006 Steve Huston + + * tests/Message_Queue_Test_Ex.{h cpp}: Fixed compile errors on Linux. + +Wed Jul 12 19:15:58 UTC 2006 Steve Huston + + * ace/Message_Queue_T.{h cpp}: Added a new class, + ACE_Message_Queue_Ex_N, that + is similar to ACE_Message_Queue_Ex in that the object queued is a + template parameter. However, ACE_Message_Queue_Ex_N allows the + enqueueing and dequeueing of multiple chained objects at once. This + wasn't added to ACE_Message_Queue_Ex because the chained object + functionality requires the ACE_MESSAGE_TYPE class to have a + ACE_MESSAGE_TYPE *next (void) const method, analogous to + ACE_Message_Block::next(), to follow the chain and this would + probably break existing applications using ACE_Message_Queue_Ex. + + * tests/Message_Queue_Test_Ex.{h cpp}: Added test capability for + ACE_Message_Queue_Ex_N. + + * NEWS: Added description of the new class. + + Thanks to Guy Peleg for + contributing this new class and its tests. + +Wed Jul 12 16:37:40 UTC 2006 Steve Huston + + * etc/ace.doxygen: + * etc/ace_qos.doxygen: + * etc/ace_ssl.doxygen: Use the IGNORE_PREFIX directive to have Doxygen + ignore the ACE_, ACE_QoS_, ACE_SSL_ prefixes when alphabetizing + the class index. Thanks to Stefan Naewe + for this idea. + + * THANKS: Added Stefan Naewe to the Hall of Fame. + +Wed Jul 12 14:30:16 UTC 2006 Steve Huston + + * ace/config-lynxos.h: + * ace/config-netbsd.h: Changed ACE_SCANDIR_CMP_USES_VOIDPTR to + ACE_SCANDIR_CMP_USES_CONST_VOIDPTR - makes it match the decl in + ace/os_include/os_dirent.h and should resolve a compile error. + +Wed Jul 12 13:55:09 UTC 2006 Steve Huston + + * ace/Message_Queue.inl: Move the #include out of the namespace; see + Tue Jul 11 13:38:10 UTC 2006 Steve Huston + +Wed Jul 12 10:15:12 UTC 2006 Martin Corino + + * include/makeinclude/platform_openvms.GNU: + Added fixes for SSL support. + + * ace/config-openvms.h: + Added ACE_HAS_PTHREAD_SCHEDPARAM. + + * ace/Global_Macros.h: + * ace/Lib_Find.cpp: + * ace/Service_Config.cpp: + * ace/Service_Config.h: + * ace/Service_Object.cpp: + * ace/Service_Object.h: + Moved OpenVMS specific dynamic service support class to a + better place. + +Wed Jul 12 07:13:01 UTC 2006 Olli Savia + + * ace/FILE_Connector.cpp: + It is safe to use ACE_OS::mkstemp() on all platforms. + +Wed Jul 12 02:21:12 UTC 2006 Johnny Willemsen + + * bin/msvc_static_order.lst: + Build ObjRefTemplate before IORInterceptor + +Tue Jul 11 23:09:28 UTC 2006 Chad Elliott + + * include/makeinclude/platform_hpux_aCC.GNU: + + The C compiler doesn't support the -mt option. So, add -mt to + CC_THR_DEFS and then later add CC_THR_DEFS to CCFLAGS. CCFLAGS + isn't used when compiling C files. + +Tue Jul 11 22:30:21 UTC 2006 Steve Huston + + * ace/config-win32-common.h: + * ace/config-WinCE.h: Break the tight tie between UNICODE and + ACE_USES_WCHAR I introduced in + Thu Oct 6 17:56:19 2005 Steve Huston + Now ACE_USES_WCHAR is always on for CE; non-CE Windows builds must + explicitly set ACE_USES_WCHAR independent of UNICODE. Thanks to + Russell Morra for explaining + the situation and submitting this fix. + +Tue Jul 11 22:20:14 UTC 2006 Steve Huston + + * bin/generate_doxygen.pl: Add the ability to put the generated + HTML output in a specified location using the new -html_output + command line option. It alters the path specified for the + HTML_OUTPUT and GENERATE_TAGFILE Doxygen options. + +Tue Jul 11 22:09:56 UTC 2006 Steve Huston + + * include/makeinclude/platform_linux.GNU: Added support for the + "buildbits=64" and "buildbits=32" make settings to target + 32- and 64-bit build targets, respectively. Thanks to Boris + Kaminer for this addition. + +Tue Jul 11 22:22:04 UTC 2006 Steve Huston + + * configure.ac: Change the minimum automake version to 1.9.6; this is + required to generate Makefiles that work properly on AIX. + + * m4/compiler.m4: For AIX, replace ACE_AIX_MAJOR_VERS and + ACE_AIX_MINOR_VERS compile macros with ACE_AIX_VERS as the + hand-edited platform_aix_ibm.GNU has and the code expects. + Also removed the AIX 3 and 4 code since AIX 3 and 4 are no longer + supported. Also, turned on -qtemplateregistry for xlC-type + compilers (Visual Age C++ 6 and XL C++ 7). + +Tue Jul 11 21:37:51 UTC 2006 Steve Huston + + * ace/OS_NS_stdio.cpp (snprintf, sprintf): In the wchar versions, + adjust the preprocessor checks to pick up the way that Solaris + indicates the presence of XPG5 capability. Allows these functions + to work, which allows ACE_Log_Msg to work also. + + * ace/OS_NS_unistd.{h inl} (ualarm): Changed u_long arguments and + return value to useconds_t to gain portability. + + * ace/OS_NS_dirent.{h inl cpp}: Made the selector and comparator + function pointer arguments to ACE_OS::scandir() and + scandir_emulation() be extern "C" to enforce their use with a + C RTL function. This resolves warnings from Solaris and makes usage + correct across all platforms. The function types are now in + typedefs ACE_SCANDIR_SELECTOR and ACE_SCANDIR_COMPARATOR, + respectively. The typedef was used previously only for Windows/MSVC + where the calling convention change had bit someone - now it's + uniform for all. + Also, folded in the ACE_SCANDIR_CMP_USES_VOIDPTR def here to + set up the proper typing with extern "C" for when it's needed to + cast inside the ACE_OS::scandir() implementation. The interface + offered by ACE_OS::scandir() is always defined in terms of + ACE_SCANDIR_SELECTOR and ACE_SCANDIR_COMPARATOR. + + * ace/Dirent_Selector.{h cpp}: Use the extern "C"-containing typedefs + for selector/comparator functions set up for ACE_OS::scandir() in + ACE_Dirent_Selector as well since they get passed through to ACE_OS. + + * apps/soreduce/Library.cpp: + * tests/Dirent_Test.cpp: Mark selector/comparator functions that'll be + passed to ACE_OS::scandir() as extern "C" to match new param types. + + * ace/config-aix-5.x.h: Added ACE_HAS_SCANDIR since AIX has scandir(), + as well as the needed ACE_SCANDIR_SEL_LACKS_CONST and + ACE_SCANDIR_CMP_USES_VOIDPTR to adjust to it's differences from + the common way scandir() is usually defined. + + * ace/config-hpux-11.00.h: Added ACE_HAS_SCANDIR. + + * ace/config-linux-common.h: Clarify that, despite the man page, + ACE_SCANDIR_CMP_USES_CONST_VOIDPTR is needed, at least on RHEL 3 + and 4. + + * ace/README: Added descriptions for ACE_HAS_SCANDIR and + ACE_SCANDIR_CMP_USES_VOIDPTR as well as the new settings + ACE_SCANDIR_SEL_LACKS_CONST and ACE_SCANDIR_CMP_USES_CONST_VOIDPTR. + + * NEWS: Summarize the above user-visible selector/comparator changes. + +Tue Jul 11 17:39:00 UTC 2006 Olli Savia + + * ace/Basic_Types.h: + * ace/OS.h: + Removed unnecessary includes. + +Tue Jul 11 17:25:06 UTC 2006 Olli Savia + + * include/makeinclude/platform_rtems.x_g++.GNU: + * include/makeinclude/wrapper_macros.GNU: + + Removed references to obsolete ACE_HAS_GNUG_PRE_2_8 make + variable. Removed egcs checks. + +Tue Jul 11 16:55:57 UTC 2006 Olli Savia + + * ace/TTY_IO.cpp: + Enable raw mode correctly on POSIX systems. Accept "none" as + valid parity value. Thanks to hongxing + for the patch. + + * ace/TTY_IO.h: + Updated documentation to reflect changes above. + + * ace/os_include/sys/os_resource.h: + Fixed typo in comment. + +Tue Jul 11 16:38:29 UTC 2006 Olli Savia + + * ace/config-linux-common.h: + * ace/os_include/os_signal.h: + * ace/os_include/os_stropts.h: + + Changed ACE_HAS_ISASTREAM_PROTO to ACE_HAS_ISASTREAM_PROTOTYPE and + ACE_HAS_PTHREAD_SIGMASK_PROTO to ACE_HAS_PTHREAD_SIGMASK_PROTOTYPE + to better follow ACE naming conventions. + +Tue Jul 11 13:38:10 UTC 2006 Steve Huston + + * ace/Message_Queue.inl: Include "ace/Guard_T.h" in the ACE_WIN32 + section to avoid compile errors with Release builds. + + * ace/TSS_T.h: Improved documentation. + + * tests/ACE_Init_TestDlg.cpp: Added comment block at the top to explain + the file's purpose. + + * tests/Task_Test.cpp: Added a smoke test for the new + ACE_Task::last_thread() method. + +Thu Jul 6 12:48:58 UTC 2006 Douglas C. Schmidt + + * ace/OS_NS_sys_socket.inl (sendto): Initialize "bytes_sent" to 0 + to avoid random values. Thanks to Winston Zhang for reporting this. + +Wed Jul 5 20:32:20 UTC 2006 Douglas C. Schmidt + + * ace/WFMO_Reactor.cpp (open): Added some more code to prevent + memory leaks when the ACE_WFMO_Reactor is reopened. Thanks to + Sonicfly Zhou for this fix. + +Tue Jul 11 12:19:23 2006 Johnny Willemsen + + * etc/tao.doxygen: + Added .idl to FILE_PATTERNS + +Tue Jul 11 12:01:12 UTC 2006 Chad Elliott + + * ace/Atomic_Op.cpp: + * ace/Atomic_Op_Sparc.h: + * ace/Atomic_Op_Sparc.c: + * include/makeinclude/platform_sunos5_sunc++.GNU: + + Added a SPARC assembler implementation of functions needed for use + within the ACE_Atomic_Op specializations. The implementation will + only be used if atomic_ops_sparc is set to 1 in + platform_macros.GNU. It also requires that v8plus or higher be + used with SunCC. + + * ace/Makefile.am: + * ace/ace.mpc: + + Added the new Atomic_Op_Sparc.c. + + * ace/CDR_Base.cpp: + + In grow(), call the clone_nocopy() method on the ACE_Data_Block + with the new size. Previously, the clone_nocopy() would be called + and then directly after that, size() would be called on the cloned + data block which would re-allocate to the new size and copy the + previous contents. + + In the same method, we avoid constructing an ACE_Message_Block to + avoid reference count manipulating the data block's reference + count. + + Also, in consolidate(), avoid attempting to copy data if the + destination and source are the same. [RT 8372] + + * ace/CDR_Stream.h: + * ace/CDR_Stream.cpp: + + Added a constructor that takes an ACE_Data_Block* which can be + used to avoid an allocation while constructing the + ACE_Message_Block held by the ACE_OutputCDR. [RT 8372] + + * ace/Message_Block.h: + * ace/Message_Block.cpp: + * ace/Message_Block_T.h: + * ace/Message_Block_T.cpp: + + Added a new parameter to the ACE_Data_Block::clone_nocopy() method + that allows the user copy the data block, but increase the size + all in one step. [RT 8372] + + * ace/OS_NS_string.inl: + + Added an unrolled implementation of memset, only active if + ACE_HAS_SLOW_MEMSET is defined, that supports up to 16 bytes + without calling into the memset() C function. + + * ace/config-sunos5.5.h: + + SunCC 5.x supports new(nothrow_t). So, I have enable the use of + it when exceptions are enabled. [RT 8372] + + * ace/OS_NS_Thread.h: + * ace/os_include/os_pthread.h: + + Added macro definitions required to build ACE and TAO on Solaris + without using the pthreads library. + + * include/makeinclude/platform_aix_ibm.GNU: + * include/makeinclude/platform_hpux_aCC.GNU: + * include/makeinclude/platform_irix6.x_sgic++.GNU: + + Added 64-bit options to the CFLAGS macros to deal with the newly + added C file in ACE. [RT 8372] + +Tue Jul 11 01:47:23 2006 Johnny Willemsen + + * tests/Log_Msg_Test.cpp: + initialise pointer with 0 + +Tue Jul 11 01:37:23 2006 Johnny Willemsen + + * ace/OS_NS_unistd.h: + Layout change + +Tue Jul 11 01:09:23 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + If -oA has been used as idlflags, don't add the A files + +Tue Jul 11 00:50:23 2006 Johnny Willemsen + + * bin/generate_compile_stats.sh: + Updated to also handle redhat version information + +Sun Jul 09 05:53:23 2006 Johnny Willemsen + + * ACE version 5.5.2 released. + +Fri Jul 7 08:07:50 UTC 2006 Johnny Willemsen + + * ACE-INSTALL.html: Small improvements + +Thu Jul 6 19:57:50 UTC 2006 Steve Huston + + * ACE-INSTALL.html: Improvements and corrections motivated by + Abdul Sowayan . + +Wed Jul 5 19:15:37 UTC 2006 Steve Huston + + * ACE-INSTALL.html: Cleaned up further; clarified role of DOC and + support companies and use of PROBLEM-REPORT-FORM. + + * NEWS: Noted removal of Chorus and pSOS. + +Tue Jul 4 04:10:11 UTC 2006 Douglas C. Schmidt + + * tests/Memcpy_Test.cpp: Added a short summary of this test. + Thanks to Arvind Krishna for contributing it. + +Tue Jul 4 01:05:47 UTC 2006 Douglas C. Schmidt + + * tests/Memcpy_Test.cpp (testit): ACE-ified this test. + +Tue Jul 4 01:03:52 UTC 2006 Douglas C. Schmidt + + * tests/CE_fostream.cpp: + * tests/Service_Config_Test.cpp: Improved the description of these + tests. + +Mon Jul 3 14:42:45 UTC 2006 Iliyan Jeliazkov + + * NEWS: Updated the NEWS file with information about using multiple + service repositories. + +Mon Jul 3 03:25:43 UTC 2006 Douglas C. Schmidt + + * examples/APG/Svc_Config/HA_Configurable_Server_Dynamic.cpp + (ACE_TMAIN): Changed the reactor event loop to explicitly pass + in ACE_Reactor::check_reconfiguration(). Thanks to Michael Reed + for reporting this. + +Mon Jul 3 03:15:14 UTC 2006 Douglas C. Schmidt + + * examples/Service_Configurator/IPC-tests/server/server_test.cpp + (ACE_TMAIN): Changed the reactor event loop to explicitly pass + in ACE_Reactor::check_reconfiguration(). + +Fri Jun 30 13:40:12 UTC 2006 Johnny Willemsen + + * bin/msvc_static_order.lst: + Added CSD_Framework and CSD_ThreadPool + +Fri Jun 30 09:33:12 UTC 2006 Johnny Willemsen + + * bin/generate_rel_manpages: + Updated doxygen version we are using for the release + +Fri Jun 30 07:29:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/taoexe.mpb: + Added corba/e and core_minimum_corba as base projects so that + the executables that can be build with CORBA/e and minimum + corba do have set the correct flags during compilation + +Thu Jun 29 17:30:52 UTC 2006 Steve Huston + + * NEWS: Added a note about the logging changes from + Tue May 16 22:23:55 UTC 2006 William R. Otte + +Thu Jun 29 10:05:12 UTC 2006 Johnny Willemsen + + * tests/Signal_Test.cpp: + Layout changes + +Thu Jun 29 09:13:12 UTC 2006 Johnny Willemsen + + * ace/Containers_T.cpp: + Initialise pointer with 0 + +Thu Jun 29 08:52:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_g++_common.GNU: + * include/makeinclude/platform_osf1_4.x_cxx.GNU: + * include/makeinclude/platform_sunos5_ghs.GNU: + * include/makeinclude/platform_sunos5_sunc++.GNU: + * include/makeinclude/wrapper_macros.GNU: + Removed support for explicit templates, we don't support that + anymore + +Thu Jun 29 08:34:12 UTC 2006 Johnny Willemsen + + * docs/ACE-guidelines.html: + Document that the STL generic algorithms are safe to be used and + made some other small updates + +Wed Jun 28 10:03:12 UTC 2006 Johnny Willemsen + + * ace/ace_for_tao.mpc: + Added missing file because of the sendfile addition to TAO + +Wed Jun 28 09:20:08 UTC 2006 Boris Kolpackov + + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Link.h: + * protocols/ace/RMCast/Socket.cpp: + Added explicit calls to close functions for sockets and pipes. + Thanks to finalpatch for reporting this. + +Wed Jun 28 07:10:12 UTC 2006 Johnny Willemsen + + * docs/ACE-guidelines.html: + Document that template template arguments are not possible to + be used because HP aCC 3.70 doesn't support it. + +Tue Jun 27 13:06:12 UTC 2006 Johnny Willemsen + + * ace/Unbounded_Queue.cpp: + Explicitly initialise pointers with 0 + +Tue Jun 27 08:59:12 UTC 2006 Johnny Willemsen + + * ace/ace_for_tao.mpc: + Added MMAP_Memory_Pool.* because TAO uses these for sendfile + support + +Tue Jun 27 06:56:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_unistd.inl: + * ace/config-WinCE.h: + WinCE doesn't seem to have SetFilePointerEx, so introduced + ACE_LACKS_SETFILEPOINTEREX which we check in OS_NS_unistd.inl, + if this is set we fallback to SetFilePointer + +Tue Jun 27 06:47:12 UTC 2006 Johnny Willemsen + + * tests/CDR_File_Test.cpp: + Fixed 64bit conversion warning + +Tue Jun 27 06:34:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/taolib.mpb: + Added tao_versioning_idl_defaults as base + +Mon Jun 26 13:27:00 UTC 2006 Simon Massey + + * NEWS: + Added PICurrent refactoring note. Moved from NEWS to TAO/NEWS + +Mon Jun 26 08:27:12 UTC 2006 Johnny Willemsen + + * ace/DLL_Manager.h: + Reexport ACE_DLL_Handle, the ACE_DLL_Manager returns a pointer + to this type in its interfaces. Thanks to Patrick Bennett + for reporting this + +Mon Jun 26 08:17:12 UTC 2006 Martin Corino + + * include/makeinclude/platform_openvms.GNU: + Some compileswitch changes. + + * ace/config-openvms.h: + Added multicast filtering setting. + +Sun Jun 25 11:54:12 UTC 2006 Martin Corino + + * include/makeinclude/platform_openvms.GNU: + Some compileswitch changes. + +Sun Jun 25 08:36:12 UTC 2006 Johnny Willemsen + + * bin/msvc_mpc_auto_compile.pl: + Build gperf and TAO_IDL before tao + +Sat Jun 24 14:02:15 UTC 2006 Steve Huston + + * ace/Lib_Find.cpp (open_temp_file): In the ACE_WIN32 section, + 'perm' is not used, so use ACE_UNUSED_ARG on it. + + * tests/Hash_Map_Manager_Test.cpp: Use const ACE_TCHAR with literal + string, not non-const. Resolves compile warning on some compilers. + +Fri Jun 23 21:03:37 UTC 2006 Jeff Parsons + + * ace/Lib_Find.cpp (open_temp_file): + + Added FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE + for the 'perms' argument of the Windows version, which + eliminates a open_temp_file() failure in the IDL compiler + on a file that was previously opened/closed with fopen/fclose. + Thanks to Krishnakumar Balasubramanian + for figuring out the fix. + +Fri Jun 23 16:01:31 UTC 2006 Steve Huston + + * examples/Reactor/Proactor/test_proactor.cpp (open): When calling + ACE_OS::open(), don't supply a very UNIXy-looking 0644 value for + the 'perms' argument. Let it default to something reasonable for + the platform. Using 0644 on Windows passes something Windows doesn't + like, and the test fails. Thanks very much to William Cote + for fixing this. + + * THANKS: Added William Cote to the Hall of Fame. + +Fri Jun 23 13:20:21 UTC 2006 Johnny Willemsen + + Reverted the change below, it triggers pidl recompilation for all pidl files + Fri Jun 23 07:36:21 UTC 2006 Johnny Willemsen + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + Added .pidl to the inputext. This should be the way how things should + run fine again in TAO but it seems somewhere ther is something missing. + +Fri Jun 23 07:36:21 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + Added .pidl to the inputext. This should be the way how things should + run fine again in TAO but it seems somewhere ther is something missing. + +Thu Jun 22 21:05:20 UTC 2006 Krishnakumar B + + * ace/OS_NS_fcntl.h (ACE_DEFAULT_OPEN_PERMS): Set the value of + ACE_DEFAULT_OPEN_PERMS from ACE_DEFAULT_FILE_PERMS instead of + 0. This ensures that users of ACE_OS::open() who don't override + the default argument get a sensible default. + +Thu Jun 22 15:08:01 UTC 2006 Steve Huston + + * ace/SSL/SSL_Context.{h cpp} (load_trusted_ca): Added a third + argument, bool use_env_defaults, which defaults to true. If false, + the ca_file and ca_dir arguments do not get ACE defaults applied + to them if passed as 0. This allows a user to specify a 0 file or + directory to the underlying SSL_CTX_load_verify_locations() function. + If a ca_dir is supplied, attempt to add its CA list to the + X509 names in addition to that of ca_file. + + (seed_file): If the file loads ok, check RAND_status() to see if + there's "enough" entropy. + + * ace/SSL/SSL_Context.inl: + * ace/SSL/SSL_Asynch_Stream.cpp: + * ace/SSL/SSL_SOCK_Stream.cpp: When setting up SSL_CTX, set the verify + mode as well. When creating a new socket object, let it inherit the + verify mode from the SSL context rather than making a call back to + the context to retrieve the verify mode and setting it with a + separate SSL call. + +Thu Jun 22 14:48:12 UTC 2006 Johnny Willemsen + + * bin/msvc_static_order.lst: + Build the portableserver earlier in the list of libs + +Thu Jun 22 05:29:48 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Gestalt.cpp: + + The initialize_i() method would not remove a service, which + failed to initialize, in case the ACE_NOLOGGING is defined. For + some reason the two blocks of code were switched around. Thanks + to Martin Corino for pointing out the + problem. + +Wed Jun 21 21:29:04 UTC 2006 Steve Huston + + * ace/config-lynxos.h: Added ACE_LACKS_STRPTIME. This should fix a + compile error on LynxOS. + +Wed Jun 21 15:45:32 UTC 2006 Steve Huston + + * tests/Hash_Map_Manager_Test.cpp: Fix incorrect concatenating of + text literals. + +Wed Jun 21 07:10:12 UTC 2006 Johnny Willemsen + + * examples/Misc/test_trace.cpp: + Fixed fuzz error + +Tue Jun 20 23:20:17 UTC 2006 Douglas C. Schmidt + + * tests/Framework_Component_DLL.cpp: Added a description of this test. + +Tue Jun 20 22:34:43 UTC 2006 Steve Huston + + * tests/Service_Config_DLL.cpp: Added a comment block at the top + to describe this file's purpose. + +Tue Jun 20 22:09:54 UTC 2006 Steve Huston + + * ace/OS_NS_time.cpp (strptime): Added a const_cast wherever + a return of something based on the const char *buf was done; related + to: + Tue Jun 20 20:19:37 UTC 2006 Steve Huston + + * NEWS: Noted that the signature of ACE_OS::strptime() changed, also + related to the entry above. + +Tue Jun 20 20:19:37 UTC 2006 Steve Huston + + * configure.ac: + * ace/README: + * ace/OS_NS_time.h: + * ace/OS_NS_time.inl: + * ace/OS_NS_time.cpp: + * m4/config_h.m4: The ACE_OS::strptime() wrapper was previously not + compiled in unless ACE_HAS_STRPTIME was set. If this was set and + ACE_LACKS_NATIVE_STRPTIME was also set, an emulation was supplied. + This has been changed so that: + - ACE_OS::strptime() is always supplied. + - The emulation is used if ACE_LACKS_STRPTIME is set. + - The first arg to ACE_OS::strptime() is now "const char *" + instead of "char *" as the native strptime() is. + - ACE_OS::strptime() is inlineable. + ACE_HAS_STRPTIME is no longer used, and ACE_LACKS_NATIVE_STRPTIME + is changed to ACE_LACKS_STRPTIME. If ACE_LACKS_STRPTIME is set + and the user decides not to include the emulation, then + ACE_REFUSE_STRPTIME_EMULATION should be set, which will cause + ACE_NOTSUP_RETURN to be used instead of the emulation. + + * ace/config-borland-common.h: + * ace/config-vxworks5.x.h: + * ace/config-vxworks6.2.h: + * ace/config-win32-dmc.h: + * ace/config-win32-ghs.h: + * ace/config-win32-mingw.h: + * ace/config-win32-msvc-7.h: + * ace/config-win32-msvc-8.h: + * ace/config-win32-visualage.h: Removed ACE_HAS_STRPTIME; changed + ACE_LACKS_NATIVE_STRPTIME to ACE_LACKS_STRPTIME. + + * ace/config-cygwin32.h: + * ace/config-doxygen.h: + * ace/config-irix6.x-common.h: + * ace/config-linux-common.h: + * ace/config-netbsd.h: + * ace/config-openvms.h: + * ace/config-sunos5.5.h: + * ace/config-tandem-nsk-mips-v3.h: Removed ACE_HAS_STRPTIME. + + * ace/config-rtems.h: Changed ACE_LACKS_NATIVE_STRPTIME to + ACE_LACKS_STRPTIME. + NOTE!! RTEMS users should add #define ACE_REFUSE_STRPTIME_EMULATION + to the local config.h file to avoid bringing in the emulation, + maintaining behavior in previous ACE versions. + + For additional background on why this arrangement was put in place + originally, please see: + Tue Aug 10 14:46:12 1999 David L. Levine + It makes sense, but adds a unique requirement for porting to new + platforms that one must know to explicitly enable an existing wrapper, + even if its natively available. This has tripped up a number of porting + efforts (including mine) and now it's consistent with other wrappers. + + * m4/ace.m4: Add --enable-wince to set up the BUILD_WINCE setting + that's inserted into the Makefile.am files for the wince MPC setting. + + * ace/ace.mpc: Replace config-win32-msvc-6.h with config-win32-msvc-8.h + + * bin/bin/mpc: Removed the verbatim for automake that adds + TESTS=auto_run_tests.pl - it was an early attempt at getting the + test ability to work that never was right. + + * */Makefile.am: Regenerated with MPC. This effectively changes the + version scheme based on the changes in: + Thu May 18 16:37:46 UTC 2006 Steve Huston + + * apps/Makefile.am: Hand-added code to avoid building gperf if + --disable-gperf was specified to configure. Thanks to Robert Schwebel + for this fix. + + * apps/gperf/tests/Makefile.am: This one doesn't get close to being + regenerated with MPC. The "stamp" items require hand-tweaking as + given in previous entries for this file. + + * ace/Makefile.am: Regenerated with MPC and hand-tweaked to add needed + "nobase_include_HEADERS =" line. + + * configure.ac: Added the following new AC_CONFIG_FILES entries: + + * ACEXML/tests/util/Makefile.am: + * apps/JAWS2/Makefile.am: + * apps/JAWS2/JAWS/Makefile.am: + * examples/ASX/Event_Server/Makefile.am: + * examples/ASX/Event_Server/Event_Server/Makefile.am: + * examples/ASX/Event_Server/Transceiver/Makefile.am: + * examples/ASX/UPIPE_Event_Server/Makefile.am: + * examples/Map_Manager/Makefile.am: + * examples/Reactor/TP_Reactor/Makefile.am: + * protocols/tests/Makefile.am: + * protocols/tests/RMCast/Makefile.am: New files, generated with MPC. + + * THANKS: Added Robert Schwebel to the Hall of Fame. + +Tue Jun 20 19:25:20 UTC 2006 Steve Huston + + * ace/Task.{h inl cpp}: Moved the public data members (thr_count_, + thr_mgr_, flags_, grp_id_, lock_) from public to a new protected + section. There was a comment that said these should be private, but + no reason given why they weren't. + Removed the thr_count_dec() method since it is no longer used + anywhere in ACE. Moved its functionality into cleanup() where it + also sets the new last_thread_id_ member (see below). + Added a new member last_thread_id_ which holds the thread ID + (ACE_thread_t) of the last thread to exit svc() processing. Before + any threads exit, the value is 0; it's set to 0 in the constructor + and in activate(). + The new accessor, ACE_thread_t last_thread (void) const, retrieves + the value of last_thread_id_. It's recommended that a thread in + close() check the last_thread_id_ value, rather than the thr_count(), + when deciding if it's safe to destroy the object. Since thr_count + can be seen as 0 in multiple threads concurrently, it's not safe + to rely on for destroying a thread. This fixes Bugzilla #2339. + Thanks to Howard Finer for this idea. + + * NEWS: Added a note about the new ACE_Task::last_thread() method. + +Tue Jun 20 18:55:12 UTC 2006 Martin Corino + + * tests/Based_Pointer_Test.cpp: + * tests/Based_Pointer_Test_Lib.cpp: + * tests/CDR_File_Test.cpp: + * tests/DLL_Test.cpp: + * tests/Malloc_Test.cpp: + * tests/Process_Manager_Test.cpp: + Several fixes to make OpenVMS happy. + +Tue Jun 20 18:04:45 UTC 2006 Douglas C. Schmidt + + * examples/Log_Msg/test_ostream.cpp (ACE_TMAIN): Couldn't used + std::getline() for some odd reason.. Fixed by using + ifstream::getline() instead. Thanks to Johnny for reporting + this. + +Tue Jun 20 14:31:05 UTC 2006 Douglas C. Schmidt + + * examples/Misc/test_trace.cpp (recursive): Simplified the + ACE_TRACE method name to make fuzz happy. + +Tue Jun 20 13:50:12 UTC 2006 Johnny Willemsen + + * tests/Hash_Map_Manager_Test.cpp: + Fixed unicode compile problems + +Tue Jun 20 12:51:19 UTC 2006 James H. Hill + + * bin/ChangeLogEditor/FileLocatorFactory.pm: + + Now supports the standard hack for subversion on Windows when + SVN_ASP_DOT_NET_HACK environment variable is set. Instead + of placing repo info in a .svn file, it is placed in _svn. + +Tue Jun 20 12:31:12 UTC 2006 Martin Corino + + * ace/os_include/os_time.h: + * ace/os_include/sys/os_types.h: + Fixed type definitions for OpenVMS. + + * ace/config-openvms.h: + Updated build configuration for OpenVMS. + + * ace/Lib_Find{.h .cpp}: + * ace/DLL_Manager.cpp: + * ace/Service_Config{.h .cpp}: + * ace/Global_Macros.h: + * ace/Strategies_T.cpp: + * ace/Logging_Strategy.cpp: + Added support for dynamic loading scheme of service configurator + framework under OpenVMS. + + * ace/OS_NS_stdio.h: + Additional include for OpenVMS. + +Tue Jun 20 08:23:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/taolib.mpb: + Add corba subset projects as base + + * bin/MakeProjectCreator/config/core_minimum_corba.mpb: + New file for usage within the core libs + + * bin/MakeProjectCreator/config/core_minimum_corba.mpb: + Make minimum corba a feature + +Tue Jun 20 07:42:12 UTC 2006 Johnny Willemsen + + * examples/Log_Msg/test_callback.cpp: + Fixed typo + +Tue Jun 20 07:04:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/global.features: + CORBA subset configurations are disabled by default + +Mon Jun 19 18:03:12 UTC 2006 Martin Corino + + * include/makeinclude/platform_openvms.GNU: + Changed template instantiation model. + + * include/makeinclude/rules.local.GNU: + Change to enable adding custom REALCLEAN_FILES in platform file. + +Mon Jun 19 15:11:12 UTC 2006 Martin Corino + + * bin/auto_run_tests.pl: + Changed to enable spawning Perl testscripts on OpenVMS. + +Mon Jun 19 14:26:12 UTC 2006 Johnny Willemsen + + * ACE-INSTALL.html: + Replaced dsp/dsw with sln/vcproj. Thanks to Abdullah Sowayan + for reporting this + +Mon Jun 19 13:14:54 UTC 2006 Douglas C. Schmidt + + * tests/Hash_Map_Manager_Test.cpp (test_two_allocators): Fixed a typo. + Thanks to Abdul for reporting this. + + * tests/Hash_Map_Manager_Test.cpp (test_two_allocators): Added a + test for the two allocator version of ACE_Hash_Map_Manager. + Thanks to Jarek for contributing this. + +Mon Jun 19 02:55:48 UTC 2006 Douglas C. Schmidt + + * examples/Log_Msg/test_ostream.cpp (ACE_TMAIN): Enhanced the test to + show the ofstream output better. + +Mon Jun 19 01:31:46 UTC 2006 Douglas C. Schmidt + + * examples/Log_Msg/test_callback.cpp (ACE_TMAIN): Zapped the + extraneous '\n' from the messages. + +Mon Jun 19 01:06:49 UTC 2006 Douglas C. Schmidt + + * examples/Misc/test_trace.cpp: Enhanced to the the ACE_TRACE macro. + +Sun Jun 18 16:58:20 UTC 2006 Douglas C. Schmidt + + * netsvcs/clients/Logger/indirect_logging.cpp (ACE_TMAIN): Cleaned + up the test to work if none of the daemons are running. + +Sun Jun 18 16:44:14 UTC 2006 Douglas C. Schmidt + + * ace/Signal.{inl,cpp}: Moved the destructors out of the *.inl + file into the *.cpp file since inline destructors aren't really + a good idea. + +Sun Jun 18 16:35:13 UTC 2006 Douglas C. Schmidt + + * netsvcs/lib/Client_Logging_Handler.cpp (send): Printout the type + of log message as a diagnostic to make it easier to see the + filtering that's going on! + +Fri Jun 16 17:48:18 UTC 2006 Douglas C. Schmidt + + * ace/CDR_Size.cpp (adjust): Added a fix for the case where + ACE_LACKS_CDR_ALIGNMENT is undefined. Thanks to Aleksandar + Vukajlovic for contributing + this. + +Fri Jun 16 13:57:53 UTC 2006 Douglas C. Schmidt + + * ace/Ping_Socket.cpp: Replaced the use of char, short, int, + etc. for struct ip and icmp with the equivalent + ACE_UNIT[8,12,32] types to ensure a fixed size. Thanks to Paul + Daugherty and Robert S. Iakobashvili + for reporting this and contributing + a fix. + +Mon Jun 19 11:37:17 UTC 2006 Johnny Willemsen + + * ace/OS_NS_unistd.{h,cpp,inl}: + Changed the (f)truncate method to use ACE_LOFF_T and use + SetFilePointerEx on windows to fix 64bit warnings + +Mon Jun 19 10:08:17 UTC 2006 Johnny Willemsen + + * bin/diff-builds.pl: + Changed this script not to die when we can't find results for + a certain date, then just take the closest results. + +Mon Jun 19 10:00:17 UTC 2006 Johnny Willemsen + + * ace/Service_Gestalt.cpp: + * ace/Acceptor.cpp: + Const improvement + +Mon Jun 19 09:56:17 UTC 2006 Ossama Othman + + * ace/OS_NS_sys_sendfile.cpp (sendfile_emulation): + + Verify the ACE_OS::mmap() call succeeded prior to continuing. + + Use ACE_OS::send() instead of ACE_OS::write() on Windows. The + latter doesn't provide the same semantics on Windows as on + Unix. Addresses an ACE_OS::sendfile() failure on Windows. + +Tue Jun 13 02:10:12 UTC 2006 Johnny Willemsen + + * tests/run_tests.lst: + Don't run netlink test in ACE_FOR_TAO configuration + +Mon Jun 12 17:00:02 UTC 2006 J.T. Conklin + + * include/makeinclude/wrapper_macros.GNU: + + Set winnt to 0 if not explicitly set by a platform_*.GNU + makefile. + +Mon Jun 12 16:48:19 UTC 2006 Douglas C. Schmidt + + * tests/SV_Shared_Memory_Test.cpp (run_main): Moved a couple of + calls outside of ACE_ASSERT since they don't belong in there. + +Mon Jun 12 14:34:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_stat.h: + Fixed mingw definition of ACE_stat + +Mon Jun 12 10:24:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/vc6.features: + Removed this file, wer don't support vc6 anymore + +Mon Jun 12 01:30:03 UTC 2006 Douglas C. Schmidt + + * ace/Thread_Manager.cpp (wait): Changed the flag parameters to be + bool rathet than int. Thanks to Johnny for this suggestion. + +Sat Jun 10 22:32:03 UTC 2006 Steve Huston + + * ACE-INSTALL.html: Corrected a bunch of platform build things and + hopefully clarified the sections a bit. + + * bin/make_release: Removed the search for, and chmod for, dsp/dsw + files - they're for MSVC6 which is no longer generated. + +Sat Jun 10 10:07:32 UTC 2006 Phil Mesnier + + * ace/Thread_Manager.cpp: + Fix for compiler errors. + +Sat Jun 10 04:31:54 UTC 2006 J.T. Conklin + + * bin/MakeProjectCreator/config/automake.features: + + Define MPC feature variable "wxWindows" to 1. + + * bin/MakeProjectCreator/config/wxwindows.mpb: + + Add automake specific definitions for compile_flags, + linkflags, and pure_libs. + +Fri Jun 9 19:25:19 UTC 2006 Douglas C. Schmidt + + * ace/Thread_Manager.h: Added a new parameter to wait() that + determines whether relative or absolute time is used. Thanks to + Sonicfly Zhou for this idea. + +Fri Jun 9 14:06:52 UTC 2006 Douglas C. Schmidt + + * ace/Hash_Map_With_Allocator_T.{h,inl,cpp}: Enhanced this class + so that it compiles with the new "two allocator" + ACE_Hash_Map_Manager_Ex class. This class needs to be improved + so that it actually leverages the two allocator features, but + that's something for the future. + +Fri Jun 9 13:15:38 UTC 2006 Douglas C. Schmidt + + * ace/Hash_Map_Manager_T.h: Clarified the meaning of the + constructor and open() parameters. + +Fri Jun 9 13:07:40 UTC 2006 Douglas C. Schmidt + + * ace/Hash_Map_Manager_T.cpp (open): If the user doesn't supply an + entry_alloc pointer then use the table_alloc pointer. + +Fri Jun 9 13:00:22 UTC 2006 Douglas C. Schmidt + + * ace/Hash_Map_Manager_T.cpp (open): Zapped the use of ACE_ASSERT + and replaced it with and if statement. We shouldn't be using + ACE_ASSERT in ACE library code.. + +Fri Jun 9 12:53:48 UTC 2006 Douglas C. Schmidt + + * ace/Hash_Map_Manager_T.{h,inl,cpp}: Added support for a separate + allocator for creating the entries in the chain of + ACE_Hash_Map_Entry objects in the buckets. There are now two + allocators, one for the bucket table and the other for the + entries in the buckets. Thanks to Jaroslaw Nozderko for this fix. + +Fri Jun 9 14:04:12 UTC 2006 Johnny Willemsen + + * ace/ace_for_tao.mpc: + Updated because ARGV and Arg_Shifter are template files now + +Fri Jun 9 13:58:12 UTC 2006 Johnny Willemsen + + * ace/FILE_IO.cpp: + Const improvements + + * ace/MMAP_Memory_Pool.cpp: + Added static cast from ACE_LOFF_T to size_t and const improvements + +Fri Jun 9 13:58:12 UTC 2006 Johnny Willemsen + + * ace/FILE_IO.cpp: + Added static cast from ACE_LOFF_T to size_t + +Fri Jun 9 13:42:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_stat.inl: + Use special stat call for vc71 + +Fri Jun 9 13:33:12 UTC 2006 Johnny Willemsen + + * ace/Connection_Recycling_Strategy.h: + Doxygen improvement + +Fri Jun 9 13:12:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_unistd.{h,cpp}: + Use ACE_LOFF_T in the pwrite interface + +Fri Jun 9 12:47:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_stat.h: + With vc71 use _stati64 for ACE_stat, not __stat64. The first has + time as 32bit, the second time as 64 bit (__time64_t) which causes + problems because the time interfaces of ACE use time_t which is + 32bit with vc71 but 64bit with vc8. + +Fri Jun 9 10:29:12 UTC 2006 Johnny Willemsen + + * ace/Configuration_Import_Export.cpp: + Initialise pointer with 0 + +Fri Jun 9 10:13:12 UTC 2006 Johnny Willemsen + + * ace/Arg_Shifter.{h,cpp}: + Also refactored ACE_Arg_Shifter to ACE_Arg_Shifter and + made ACE_Arg_Shifter a typedef. The refactoring fo ACE_ARGV resulted + in a drop of the TAO Hello client executable of about 2.5Kb which is + nice for such a small change. + + * ace/ace.mpc: + * ace/Makefile.am: + Updated because Arg_Shifter.cpp is not a template file + +Fri Jun 9 09:54:12 UTC 2006 Johnny Willemsen + + * ace/config-linux-common.h: + Added ACE_HAS_NETLINK, all linux versions do support netlink sockets. + This closes bugzilla bug 2317. Thanks to Robert Iakobashvili + and Razi Ben-Yehuda + for creating the netlink wrappers + +Fri Jun 9 08:16:12 UTC 2006 Johnny Willemsen + + * tests/SOCK_Netlink_Test.cpp: + New test for netlink sockets. Thanks to Robert Iakobashvili + for creating this test. + + * tests/tests.mpc: + * tests/run_test.lst: + Added new netlink test + +Fri Jun 9 07:55:12 UTC 2006 Johnny Willemsen + + * ace/ARGV.{h,cpp,inl}: + + Refactored ACE_ARGV to ACE_ARGV_T which is a template, where + ACE_ARGV is now a typedef of ACE_ARGV_T. Taken the + idea from the wchar work of David Giovannini + + * ace/ace.mpc: + * ace/Makefile.am: + + ARGV.cpp added to the template files, added the new netlink files + + * ace/OS_NS_sys_stat.{h,inl}: + * ace/MMAP_Memory_Pool{h,cpp}: + * ace/Mem_Map.{h,cpp,inl}: + * ace/Filecache.{h,cpp}: + * ace/FILE_IO.cpp: + * ace/FILE.h: + + Use ACE_LOFF_T for the filesize so that we can support files + bigger then 2Gb on windows and other platforms. Also use for + Borland the 64bit stat structure and api's. This fixes bugzilla + bug 1286, thanks to Ruslan Zasukhin for reporting this. Also fixes part of bugzilla + bug 2359, thanks to Olivier Brunet + for reporting this. + +Thu Jun 8 17:13:42 UTC 2006 Douglas C. Schmidt + + * ace/String_Base.h, + ace/Array_Map.h: Removed the @deprecated + comments to make Ossama happy ;-) This fixes bugid 2558. + +Thu Jun 8 12:44:46 UTC 2006 Douglas C. Schmidt + + * ace/OS_NS_Thread.inl (recursive_mutex_lock): Cleaned up the + structure of the code here so that we don't try to release the + nesting lock unless it was acquired successfully. Thanks to + J.T. for reporting this. + +Thu Jun 8 12:37:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/corba_e_compact.mpb: + * bin/MakeProjectCreator/config/corba_e_micro.mpb: + New base projects for CORBA/e micro and compact + +Thu Jun 8 12:28:49 UTC 2006 Chad Elliott + + * bin/DependencyGenerator/DependencyEditor.pm: + * bin/DependencyGenerator/DependencyGenerator.pm: + * bin/DependencyGenerator/GNUDependencyWriter.pm: + * bin/DependencyGenerator/GNUObjectGenerator.pm: + * bin/DependencyGenerator/Preprocessor.pm: + * bin/depgen.pl: + + Committing performance improvements which take off about 7% from + the dependency generation time for the whole ACE_wrappers tree. + +Thu Jun 8 11:57:58 UTC 2006 J.T. Conklin + + * ace/OS_NS_dirent.cpp: + * ace/OS_NS_dirent.h: + + Don't compile the {opendir,readir,closedir,scandir}_emulation() + functions if {opendir,readir,closedir,scandir} are provided by + the OS. + +Thu Jun 8 11:29:12 UTC 2006 Johnny Willemsen + + * ace/Netlink_Addr.h: + * ace/SOCK_SEQPACK_Association.h: + Doxygen fixes + + * ace/OS_NS_Thread.inl: + Const improvement + +Thu Jun 8 11:37:59 UTC 2006 J.T. Conklin + + * ace/config-netbsd.h: + + Define ACE_HAS_SCANDIR and ACE_SCANDIR_CMP_VOIDPTR. + +Wed Jun 7 23:02:53 UTC 2006 Krishnakumar B + + * tests/Recursive_Mutex_Test.cpp: Use ACE_TEST_MUTEX instead of + ACE_Recursive_Thread_Mutex so that we use the right version of + mutex (ACE_Process_Mutex) on Windows. Thanks to Doug for the + suggestion. This should fix the Recursive_Mutex_Test failing on + Windows. + +Wed Jun 7 21:42:36 UTC 2006 William R. Otte + + * bin/MakeProjectCreator/config/ciao_config_handlers.mpb + + Fixed static library ordering problem. + +Wed Jun 7 13:34:12 UTC 2006 Johnny Willemsen + + * ace/config-doxygen.h: + Added ACE_HAS_NETLINK so that we get documentation for the new + netlink classes + +Wed Jun 7 13:31:12 UTC 2006 Johnny Willemsen + + * tests/run_test.lst: + Removed chorus + +Wed Jun 7 13:16:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_socket.h: + When ACE_HAS_NETLINK is defined, include more files specific + for this protocol. + +Wed Jun 7 12:56:12 UTC 2006 Johnny Willemsen + + * ace/Netlink_Addr.{h,cpp,inl}: + * ace/SOCK_Netlink.{h,cpp,inl}: + New files for netlink sockets. Thanks to Robert Iakobashvili + and Razi Ben-Yehuda + for creating these new files. + These files will be added to the ACE mpc later this week, with + the files in the repo it is much easier to test them on + multiple linux version. See bugzilla bug 2317 for more info. + +Wed Jun 7 12:28:18 UTC 2006 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Changed the message displayed when a project isn't build when a + particular feature is disabled. Many users thought that this + message was an error, I believe, because of the word 'missing'. + +Wed Jun 7 11:46:12 UTC 2006 Johnny Willemsen + + * ace/config-suncc-common.h: + New config file for the SunCC compiler, idea is to refactor + all things related to the Sun C++ compiler to this file. This is + to make it easier to support Sun C++ on Linux + +Wed Jun 7 10:45:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_linux_suncc.GNU: + First version for using the Sun compiler on Linux. The compiler + itself is an alpha version, so no guarantees at this moment + +Wed Jun 7 10:07:12 UTC 2006 Johnny Willemsen + + * ace/Strategies_T.cpp: + Initialise pointer with 0 and const improvement + +Wed Jun 7 09:19:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + When using -SS we do generate an empty S.h file, so add S + to the header_outputext so that we zap this file during a clean + +Wed Jun 7 09:02:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_aix_g++.GNU: + Set X11 and Xt defines, thanks to Peter Grotrian + for reporting this. This fixes + bugzilla 2556 + + * ace/config-sunos5.5.h: + Added fixes to build with threads=0, this fixes bugzilla bug 2555. Thanks + to Peter Grotrian for reporting + this. + + * ace/config-aix-4.x.h: + Added fixes to build with threads=0, this fixes bugzilla bug 2553. Thanks + to Peter Grotrian for reporting + this. + + * include/makeinclude/platform_chorus.GNU: + * include/makeinclude/platform_chorus4.x_g++.GNU: + * include/makeinclude/platform_chorus_ghs.GNU: + * include/makeinclude/platform_psos_diab.GNU: + * include/makeinclude/platform_psos_diab_ppc.GNU: + * include/makeinclude/platform_psos_tm.GNU: + * include/makeinclude/platform_psosim_g++.GNU: + Removed these files, psos and chorus are not supported anymore + +Wed Jun 7 08:27:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_Thread.cpp: + Added needed check for VxWorks with task api + + * ace/os_include/sys/os_stat.h: + Removed workarounds for old Borland compiler versions + +Wed Jun 7 03:25:00 UTC 2006 William R. Otte + + * bin/MakeProjectCreator/config/ciao_config_handlers_base.mpb + * bin/MakeProjectCreator/config/ciao_config_handlers_base.mpc + + Corrected the file extension. + +Tue Jun 6 21:11:37 UTC 2006 Douglas C. Schmidt + + * ace/WFMO_Reactor.cpp (open): make sure we delete the + notify_handler_ before reassigning it to prevent resource leaks. + Thanks to Sonicfly Zhou for suggesting + this. + +Tue Jun 6 21:41:02 UTC 2006 Steve Huston + + * ace/Service_Gestalt.{h cpp}: + * ace/Dynamic_Service_Base.cpp: + * ace/Dynamic_Service_Dependency.cpp: + * ace/Service_Config.cpp: + * ace/Service_Object.cpp: + * ace/Svc_Conf_Lexer.cpp: Add missing #include directives. + +Tue Jun 6 18:09:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_Thread.cpp: + Reverted a change for VxWorks, broke other platforms, will make + a new change tomorrow. + +Tue Jun 6 17:14:51 UTC 2006 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + + Cleaned up the fill_value() method and removed an unused method. + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Use DirectoryManager::mpc_basename() instead of + File::Basename::basename(). + +Tue Jun 6 15:43:32 UTC 2006 William R. Otte + + * bin/MakeProjectCreator/templates/gnu.mpd + + Modified to explicitly state the name of a project being skipped + due to missing features or libraries. + +Tue Jun 6 03:57:08 UTC 2006 J.T. Conklin + + * ace/Hash_Map_Manager_T.cpp: + * ace/Hash_Map_Manager_T.h: + + Added key() and item() methods to ACE_Hash_Map_Entry<>, to be + like ACE_RB_Tree_Node<>. This makes it easier to switch code + to and from Hash_Maps and RB_Trees. Mark direct access to + the ext_id_ and int_id_ fields @deprecated. + + * ace/Hash_Map_Manager_T.cpp: + * ace/Hash_Map_Manager_T.h: + * ace/Hash_Map_Manager_T.inl: + * ace/RB_Tree.h: + * ace/RB_Tree.inl: + + Added operator->() for iterators to be more like STL API. + +Mon Jun 5 20:27:42 UTC 2006 William R. Otte + + * bin/MakeProjectCreator/config/ciao_config_handlers.mpb + * bin/MakeProjectCreator/config/ciao_config_handlers_base.mpc + + Restructured to clean up config handlers MPC files. + +Sun Jun 4 13:38:21 UTC 2006 Douglas C. Schmidt + + * tests/Array_Map_Test.cpp: Fixed all uses of empty() to be + is_empty(). + +Sun Jun 4 13:35:25 UTC 2006 Douglas C. Schmidt + + * ace/Array_Map.{h,inl}, + * ace/Intrusive_List.{h,inl}, + * ace/String_Base.{h,inl}: Changed empty() to is_empty(), which + makes more sense. Kept empty() around for the time being as a + @deprecated method. Thanks to Domingos Monteiro for this suggestion. + +Sun Jun 4 00:51:38 UTC 2006 Douglas C. Schmidt + + * ace/CString.{h,inl,cpp}: Added some performance improvements for ACE_CString: + + . Introduced new operators == and != to compare ACE_CString + and const char *. This results in at least a 10-fold performance + improvement, due to avoiding dynamic memory allocation. + + . Streamlined the existing operator == between two ACE_CString's. + (15% improvement in some cases, due to avoiding some of the + overhead of compare()) + + Also cleaned up some of the doxygen comments, e.g., the + ACE_CString comparison operators must have been returning an + integer at some point (?), but it's not the case anymore. + Thanks to Patrick Rabau for these + patches. + +Fri Jun 2 19:52:19 UTC 2006 Yan Dai + + * bin/tao_orb_tests.lst: + + Removed DII_Collocation_Tests. + +Fri Jun 2 16:29:55 UTC 2006 Douglas C. Schmidt + + * ace/Select_Reactor_T.cpp (open): Added an error message + explicitly noting that the notification pipe open failed, which + should make debugging easier when this occurs, e.g., due to a + disabled network interface. Thanks to David Highley for this suggestion. + +Fri Jun 2 12:20:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/taoidl3toidl2defaults.mpb: + Updated to make cross compilation possible + +Fri Jun 2 12:12:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/templates/gnu.mpd: + Added TAO_IDL3_TO_IDL2 and TAO_IDL3_TO_IDL2_DEP as first step to + run idl3_to_idl2 in a cross build environment + +Fri Jun 2 11:51:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.2.GNU: + Updated for VxWorks 6.2 + +Fri Jun 2 11:33:36 UTC 2006 Douglas C. Schmidt + + * tests/Recursive_Mutex_Test.cpp (test_recursion_depth): The + get_nesting_level() only works on certain OS platforms, so don't + use it as part of the test. + +Fri Jun 2 10:13:12 UTC 2006 Johnny Willemsen + + * ace/Configuration.cpp: + Fixed operator== + + * tests/Config_Test.{h,cpp}: + Added an explicit test for operator==. Thanks to Popeye Cai + for reporting this. This + fixes bugzilla bug 2550 + +Fri Jun 2 10:02:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_Thread.cpp: + Improved VxWorks 6.2 support + + * ace/Svc_Handler.cpp: + 64bit change and initialise pointer with 0 + + * ace/Process.cpp: + Added support for VxWorks 6.x in rtp mode + +Fri Jun 2 09:42:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_Thread.inl: + Added necessary code for VxWorks 6.2 + +Thu Jun 1 23:13:58 UTC 2006 Yan Dai + + * bin/tao_orb_tests.lst: + + Added oneway and twoway DII_Collocation_Tests. + +Thu Jun 1 20:53:31 UTC 2006 Jeff Parsons + + * tests/Recursive_Mutex_Test.cpp (run_main): + + Added ACE_UNUSED_ARG macros to eliminate 'unused parameter' + warnings on single threaded builds. + +Thu Jun 1 16:54:56 UTC 2006 Yan Dai + + * bin/tao_orb_tests.lst: + + Added new DII_Collocation_Tests. + +Thu Jun 1 13:59:12 UTC 2006 Johnny Willemsen + + * ace/FILE.cpp: + Const improvement + +Thu Jun 1 12:15:12 UTC 2006 Johnny Willemsen + + * tests/Dirent_Test.cpp: + Updated VxWorks specific checks, removed chorus checks + +Thu Jun 1 11:03:12 UTC 2006 Johnny Willemsen + + * examples/Threads/thread_pool.cpp: + Fixed 64bit conversion warnings + +Thu Jun 1 09:39:12 UTC 2006 Johnny Willemsen + + * bin/diff-builds.pl: + Corrected usage of strftime + +Thu Jun 1 09:19:12 UTC 2006 Johnny Willemsen + + * ace/Default_Constants.h: + Define the platform suffix for vxworks + + * ace/Sock_Connect.cpp: + Added include for VxWorks and removed some unneeded checks + for vxworks >= 0x600 + + * ace/ACE.h: + Doxygen improvement + + * ace/config-vxworks6.2.h: + Updated with more settings to better match vxworks 6.2 + + * ace/Process_Manager.cpp: + Added specific check for vxworks + + * ace/OS_NS_stdlib.inl: + Emulate putenv with setenv when putenv is not available but + setenv is. + +Thu Jun 1 02:26:03 UTC 2006 Phil Mesnier + + * ace/Service_Gestalt.h: + * ace/Service_Gestalt.cpp: + + Reworked the way static svc descriptors are kept so that if DLLs + include static initializers, they won't cause a problem if the + DLL is later unloaded and reloaded. There is currently no + dependency replationship between these "static" services and the + DLL that contains them, so there is still a slight risk that + pointers held after the DLL is unloaded might be referenced. But + the only thing that actually uses these pointers is the service + gestalt itself if it is processing an explicit static directive + and the desired service object had not yet been loaded in that + configuration context. + +Wed May 31 20:49:03 UTC 2006 Jeff Parsons + + * examples/APG/Logging/Trace.h: + + Added '##' to several macro definitions in this file, at the + suggestion of Steve Huston to get + rid of warnings on GCC4 platforms. + +Wed May 31 18:18:37 UTC 2006 Jeff Parsons + + * bin/MakeProjectCreator/config/ciao_config_handlers.mpb: + + Shortened some line lengths, to make the file more readable. + +Wed May 31 16:36:43 UTC 2006 Steve Huston + + * tests/tests.mpc: + * tests/run_test.lst: Don't build or run Unload_libACE on WinCE. The + code is purposely leaving out ACE stuff and the ACE stuff is needed + for WinCE, unless there's lots of conditional code added to duplicate + the workings on ACE_TMAIN on CE. + +Wed May 31 14:33:16 UTC 2006 Jeff Parsons + + * ace/OS_NS_Thread.inl (recursive_mutex_lock): + + Added additional ACE_UNUSED_ARG for the timeout parameter, to + eliminate warnings in single-threaded builds. + +Wed May 31 13:05:05 UTC 2006 Douglas C. Schmidt + + * ace/Argv_Type_Converter.cpp (align_char_with_wchar): ACE-ified this code. + +Wed May 31 14:00:16 UTC 2006 Jeff Parsons + + * tests/Recursive_Mutex_Test.cpp (run_main): + + Moved '#if defined (ACE_HAS_THREADS)' up a few lines to include + a variable defined inside the same guard at the top of the file, + to eliminate an 'undefined' error on single-threaded builds. + +Wed May 31 13:37:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug_2542_Regression, this should run without problems + +Wed May 31 11:44:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_time.inl: + Fixed unreachable code warning + +Wed May 31 09:23:12 UTC 2006 Johnny Willemsen + + * tests/run_test.lst: + Changes for ACE_FOR_TAO configuration + +Wed May 31 08:19:12 UTC 2006 Johnny Willemsen + + * tests/Bound_Ptr_Test.cpp: + Initalise pointers with 0 + +Wed May 31 08:16:12 UTC 2006 Johnny Willemsen + + * tests/Recursive_Mutex_Test.cpp: + Added missing include to get ACE_OS::sleep + +Tue May 30 21:56:52 UTC 2006 Steve Huston + + * ACE-INSTALL.html: Corrected the AIX section; removed descriptions of + old compilers that are no longer supported and suggested the config + and platform_macros files to use. Thanks to Michelle Zheng + for motivating this. + + * THANKS: Added Michelle Zheng to the Hall of Fame. + +Tue May 30 19:17:40 UTC 2006 Phil Mesnier + + * ace/Dynamic_Service.h: + * ace/Dynamic_Service.inl: + * ace/Dynamic_Service.cpp: + * ace/Dynamic_Service_Base.h: + * ace/Dynamic_Service_Base.cpp: + * ace/Dynamic_Service_Dependency.cpp: + + In order to ensure proper separation of contexts, this patch + gives the dynamic service instance lookup the ability to + optionally exclude the global configuration context. + + * ace/Service_Gestalt.h: + * ace/Service_Gestalt.cpp: + + To allow explicitly configured static service objects, those for + which a directive such as 'static XYZ "foo bar"', to be + independently configured in different configuration contexts, + these changes retain any static service descriptor for service + XYZ, then looks for a previous instance of XYZ in the local + context only, otherwise it uses the previously retained static + service descriptor to create a new instance. + + +Tue May 30 18:24:54 UTC 2006 Douglas C. Schmidt + + * ace/DLL.h (ACE_DLL): Updated the documentation of open() to explain the + lookup scheme when a filename is given. Thanks to Phlip + for motivating this. + +Tue May 30 13:06:42 UTC 2006 Douglas C. Schmidt + + * ace/ACE.inl: + * ace/Base_Thread_Adapter.cpp: + * ace/Default_Constants.h: + * ace/Global_Macros.h: + * ace/OS.h: + * ace/OS_NS_Thread.cpp: + * ace/OS_NS_Thread.h: + * ace/OS_NS_netdb.inl: + * ace/OS_NS_signal.inl: + * ace/OS_NS_sys_socket.inl: + * ace/OS_NS_time.inl: + * ace/OS_main.cpp: + * ace/OS_main.h: + * ace/Object_Manager_Base.h: + * ace/Process_Manager.cpp: + * ace/Process_Semaphore.cpp: + * ace/Process_Semaphore.h: + * ace/Process_Semaphore.inl: + * ace/Recursive_Thread_Mutex.cpp: + * ace/SV_Semaphore_Simple.h: + * ace/TLI_Acceptor.cpp: + * ace/Thread_Adapter.cpp: + * ace/Token.h: + * ace/config-macros.h: Removed all vestiges of PSOS. + +Tue May 30 12:22:53 UTC 2006 Chad Elliott + + * bin/mpc.pl: + * bin/mwc.pl: + + Added a load-time check for the minimum perl version (5.6). + +Tue May 30 12:18:12 UTC 2006 Johnny Willemsen + + * ace/Log_Msg.cpp: + * ace/OS_NS_dirent.inl: + * ace/OS_NS_netdb.inl: + * ace/OS_NS_pwd.inl: + * ace/OS_NS_stdlib.inl: + * ace/OS_NS_Thread.cpp: + * ace/OS_NS_Thread.inl: + * ace/OS_NS_time.cpp: + * ace/OS_NS_time.inl: + * ace/Thread_Manager.cpp: + * ace/os_include/os_pthread.h: + * ace/os_include/os_stdlib.h: + Removed support for HPUX 10.20 + + * ace/os_include/net/os_if.h: + * ace/os_include/netinet/os_tcp.h: + Removed psos support + + * ace/os_include/sys/os_types.h: + Removed ACE_LACKS_FLOATING_POINT + +Tue May 30 11:57:12 UTC 2006 Johnny Willemsen + + * ace/config-hpux-10.x-g++.h + * ace/config-hpux-10.x-hpc++.h + * ace/config-hpux-10.x.h + Removed these files, not supported anymore + + * ace/OS_NS_time.inl: + Removed check for ACE_CTIME_R_RETURNS_INT, it was for hpux 10.20 + +Tue May 30 11:57:12 UTC 2006 Johnny Willemsen + + * ace/config-osf1-4.0.h: + Removed, contents merged to tru64 file + + * ace/config-tru64.h: + Added osf1-4.0 file contents, be aware that tru64 support hasn't + been tested for a long time. + +Tue May 30 11:45:12 UTC 2006 Johnny Willemsen + + * tests/Recursive_Mutex_Test.cpp: + Fixed compile error + +Tue May 30 11:11:12 UTC 2006 Johnny Willemsen + + * ace/os_include/os_stdio.h: + Removed psos support + + * ace/IOStream.h: + Removed checks for ACE_LACKS_CHAR_STAR_RIGHT_SHIFTS, that was only + set for chorus which is removed + + * ace/Basic_Types.h: + * ace/Log_Msg.cpp: + * ace/Profile_Timer.{h,cpp}: + Removed checks for ACE_LACKS_FLOATING_POINT. Was only set for chorus + which is now removed. + + * ace/OS_NS_Thread.cpp: + Removed chorus support + + * ace/config-chorus.h: + Removed. + + * ace/INET_Addr.cpp + * ace/Lib_Find.cpp + * ace/Local_Tokens.cpp + * ace/Log_Record.cpp + * ace/Parse_Node.cpp + Removed check for ACE_HAS_BROKEN_CONDITIONAL_STRING_CASTS, is only + set for psos which we don't support anymore + + * ace/os_include/os_signal.h: + Removed check for ACE_SIGINFO_IS_SIGINFO_T, only set for psos + + * ace/config-psos-diab-mips.h + * ace/config-psos-diab-ppc.h + * ace/config-psos-diab.h + * ace/config-psos-tm.h + * ace/config-psosim-g++.h + Removed from the repo, psos support has been removed + +Tue May 30 10:48:12 UTC 2006 Johnny Willemsen + + * ace/CDR_Stream.cpp: + Use true/false, when demarshaling a string, check the result of the + demarshaling of the length of the string, if that failed, just return + directly instead of trying to demarshal a random lenght string + + * ace/Task.h: + * ace/System_Time.h: + Doxygen improvement + + * ace/ACE.cpp: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/Sock_Connect.cpp: + * ace/Process.cpp: + * ace/OS_NS_unistd.cpp: + * ace/Mem_Map.cpp: + Removed chorus support + + * ace/config-fsu-pthread.h: + Removed this file, this configuration isn't supported and used for + ages + + * ace/Condition_Thread_Mutex.cpp: + * ace/Recursive_Thread_Mutex.cpp: + Removed fsu pthread support + + * ace/Process_Manager.cpp: + Const improvement + + * ace/OS.inl: + * ace/OS_NS_sys_socket.inl: + * ace/OS_NS_stdlib.cpp: + * ace/OS_NS_stdlib.inl: + * ace/OS_NS_Thread.cpp: + Removed psos support + + * ace/OS_NS_unistd.inl: + * ace/OS_NS_stdio.{h,cpp,inl}: + * ace/Handle_Set.h: + * ace/OS_NS_Thread.{h,inl}: + Removed psos and chorus support + + * ace/Thread_Manager.{h,cpp,inl}: + Made terminated_ a real bool, removed chorus support, check for + ACE_VXWORKS instead of VXWORKS + + * ace/OS_NS_sys_time.inl: + Check for ACE_VXWORKS instead of VXWORKS + + * ace/MMAP_Memory_Pool.{h,cpp}: + Removed chorus support, use bool internally and added an option to + get each time an unique mmap filename + + * ace/config-linux-common.h: + Added ACE_HAS_VOIDPTR_MMAP and removed KCC support + + * ace/ace_wchar.inl + * ace/Default_Constants.h + * ace/INET_Addr.h + * ace/IPC_SAP.cpp + * ace/Message_Queue.cpp + * ace/Message_Queue.h + * ace/Message_Queue.inl + * ace/Message_Queue_T.cpp + * ace/Message_Queue_T.h + * ace/OS.h + * ace/OS_NS_macros.h + * ace/OS_NS_stdio.h + * ace/OS_NS_stdio.inl + * ace/OS_NS_stdlib.inl + * ace/OS_NS_Thread.cpp + * ace/OS_NS_Thread.h + * ace/OS_NS_Thread.inl + * ace/OS_NS_time.inl + * ace/Recursive_Thread_Mutex.cpp + * ace/Sched_Params.cpp + * ace/Select_Reactor_T.cpp + * ace/SOCK_Dgram_Bcast.cpp + * ace/Thread_Manager.h + * ace/Token.h + Check for ACE_VXWORKS instead of VXWORKS + +Mon May 29 22:08:50 UTC 2006 Douglas C. Schmidt + + * ace/OS_NS_Thread.inl (recursive_mutex_lock): *Really* make the compiler + happy now. Thanks Olli! + +Mon May 29 21:12:50 UTC 2006 Douglas C. Schmidt + + * ace/OS_NS_Thread.inl (recursive_mutex_lock): Added a const_cast + for ACE_Time_Value * to make the compiler happy when passing the + timeout parameter to ACE_OS::cond_timed_wait(). Thanks to Olli + Savia for helping here. + +Mon May 29 20:30:44 UTC 2006 Douglas C. Schmidt + + * We recently added the 2100th contributor to ACE+TAO+CIAO!!! The + 2000th contributor was added in August of 2005, this means that + over 100 different people have contributed to the project in the + past 9 months! + +Mon May 29 19:50:54 UTC 2006 Douglas C. Schmidt + + * examples/Service_Configurator/IPC-tests/server/server_test.cpp (ACE_TMAIN): + Changed + + ACE_Reactor::instance ()->run_reactor_event_loop () + + to + + ACE_Reactor::run_event_loop () + + so that reconfiguration happens properly after a SIGHUP or + SIGINT occurs. Thanks to Kevin Hu for motivating this. + +Mon May 29 18:10:50 UTC 2006 Steve Huston + + * tests/Signal_Test.cpp: + * tests/Thread_Manager_Test.cpp: Add missing ACE_TEXT to a string. + +Mon May 29 18:44:05 UTC 2006 Douglas C. Schmidt + + * tests/Recursive_Mutex_Test.cpp: Enhanced this test to exercise + the new timed feature of ACE_Recursive_Thread_Mutex. + +Mon May 29 18:16:31 UTC 2006 Douglas C. Schmidt + + * ace/Recursive_Thread_Mutex.h: Clarified that get_nesting_level() + may return -1 on some platforms when ACE_HAS_RECURSIVE_MUTEXES + is enabled. + +Mon May 29 17:45:02 UTC 2006 Douglas C. Schmidt + + * ace/Recursive_Thread_Mutex.inl: Moved some of the short accessor + methods from the Recursive_Thread_Mutex.cpp file to here. + + * ace/Recursive_Thread_Mutex.h, + ace/Recursive_Thread_Mutex.inl: Added support for time recursive + mutexes, thanks also to Abdullah. + + * ace/OS_NS_Thread.h, + * ace/OS_NS_Thread.inl: Added support for timed recursive mutexes. + Thanks to Abdullah Sowayan for contributing this. + +Mon May 29 17:30:52 UTC 2006 Douglas C. Schmidt + + * ace/OS_NS_Thread.h: Updated the documentation to clarify why + recursive mutexes can't be used for ACE_OS::mutex_lock(). + +Mon May 29 18:27:08 UTC 2006 Jeff Parsons + + * examples/DLL/test_dll.cpp: + + Changed instances of a C-style cast from void* to + pointer-to-function to a two-step reinterpret_cast + using ptrdiff_t as an intermediate. C++ forbids casting + directly between pointer-to-object and pointer-to-function, + and some of the newer compilers are catching it. + +Sat May 27 15:03:07 UTC 2006 Douglas C. Schmidt + + * netsvcs/servers/main.cpp (ACE_TMAIN): Removed the following code: + + if (ACE::debug () == 0) + ACE_LOG_MSG->priority_mask (~LM_DEBUG, ACE_Log_Msg::PROCESS); + + since (1) it makes debugging hard and (2) it's simply wrong + since it's blowing away anything that's set by the + ACE_Logging_Strategy in the svc.conf file. + +Sat May 27 14:37:14 UTC 2006 Douglas C. Schmidt + + * ace/Log_Record.cpp (print): Only print out the log records if the + corresponding type is enabled for logging. + +Sat May 27 14:35:21 UTC 2006 Douglas C. Schmidt + + * netsvcs/servers/main.cpp: Enable the ignore_debug_flag in the + ACE_Service_Config::open() call so that we can override the + default ACE_Log_Priority settings in the svc.conf file. + +Sat May 27 11:36:12 UTC 2006 Johnny Willemsen + + * performance-tests/SCTP/hist.cpp: + Fixed compile error + +Fri May 26 22:02:48 UTC 2006 Steve Huston + + * examples/IPC_SAP/SPIPE_SAP/consumer_msg.cpp: + * examples/IPC_SAP/SPIPE_SAP/consumer_read.cpp: + * examples/IPC_SAP/SPIPE_SAP/server.cpp: Wide-char fixes; there's no + wide-char variant for ACE_OS::fdetach(). + + * examples/IPC_SAP/TLI_SAP/CPP-client.cpp: + * examples/IPC_SAP/TLI_SAP/db-client.cpp: + * examples/IPC_SAP/TLI_SAP/ftp-client.cpp: + * examples/Connection/non_blocking/test_tli_acceptor.cpp: + * examples/Connection/non_blocking/test_tli_connector.cpp: + Wide-char/narrow-char fixes. + +Fri May 26 21:47:56 UTC 2006 Douglas C. Schmidt + + * netsvcs/lib/Client_Logging_Handler.cpp, + * netsvcs/lib/Server_Logging_Handler_T.cpp, + * ace/Log_Msg_IPC.cpp: Removed the special case code for Windows + since it seems like ACE (or Windows) now handles this properly. + +Fri May 26 21:20:35 UTC 2006 Douglas C. Schmidt + + * ace/Log_Record.cpp (operator>>): Add one when allocating the buffer. + +Fri May 26 13:16:48 UTC 2006 Nanbor Wang + + * ace/DLL_Manager.cpp: + + Fixed incorrect usage of ACE::debug check. Thanks to Johnny for + reporting this. + +Fri May 26 15:04:55 UTC 2006 Jeff Parsons + + * ASNMP/tests/Counter_Test.cpp: + * ASNMP/tests/Gauge_Test.cpp: + * performance-tests/SCTP/hist.cpp: + + Added static_cast<>s to eliminate implicit conversion warnings. + +Fri May 26 12:42:12 UTC 2006 Johnny Willemsen + + * tests/Naming_Test.cpp: + Replaced assert with if statement, resolved argument not used + warning in BCB6 release builds + +Fri May 26 10:26:12 UTC 2006 Johnny Willemsen + + * tests/Bug_1890_Regression_Test.cpp: + * tests/Bug_2540_Regression_Test.cpp: + New tests made by Carlos O'Ryan for the given bug numbers. + + * tests/run_test.lst: + * tests/tests.mpc: + Added the new tests above + +Fri May 26 09:53:12 UTC 2006 Johnny Willemsen + + * bin/PerlACE/Run_Test.pm: + Increased wait_interval_for_process_creation from 5 to 10 seconds. + On the slower systems some tests failed because the startup time + is longer then 5 seconds, especially if several configuration files + are read and saved during startup + +Fri May 26 08:21:12 UTC 2006 Johnny Willemsen + + * bin/diff-builds.pl: + Fixed typo in comment + +Thu May 25 04:58:44 UTC 2006 Douglas C. Schmidt + + * tests/Tokens_Test.cpp (run_main): Don't try to spawn the + netsvcs/server/main if it's not built. + +Thu May 25 03:53:47 UTC 2006 J.T. Conklin + + * m4/config_h.m4: + + Removed AH_TEMPLATE for ACE_LACKS_TCP_H. This was replaced + with ACE_LACKS_NETINET_TCP_H long ago. + +Wed May 24 22:19:43 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Repository.{h, inl, cpp}: + + Changed size arguments type to size_t in ctor, open, + current_size, total_size and the corresponding members. + ACE_Service_Repository_Iterator::next_ now starts from 0 instead + of -1 to avoid warnings about signed/unsigned comparisons. + + * ace/Service_Gestalt.cpp: + + Reverted the change "Wed May 24 14:00:43 UTC 2006 Iliyan + Jeliazkov ", since now the + Service_repository::instance() takes size_t argument. + + * performance-tests/Synch-Benchmarks/Base_Test/Synch_Benchmarks_Base_Test.mpc: + * performance-tests/Synch-Benchmarks/Perf_Test/Synch_Benchmarks_Perf_Test.mpc: + + Fixed and error whereby the DLL's generated by this two project + files did not match the name used in the svc configuration + files, causing the test to crash because of missing DLL. + +Wed May 24 13:08:08 UTC 2006 Steve Huston + + * ace/Message_Queue.h: Added #include "ace/Thread_Mutex.h" on platforms + that have ACE_Message_Queue_NT available; that class has a + ACE_Thread_Mutex member so the include is needed to see the class. + Thanks to Guy Peleg for this fix. + +Wed May 24 17:39:47 UTC 2006 Douglas C. Schmidt + + * ace/Remote_Tokens.cpp (request_reply): Added a helpful error + message to make it easy to track down problems with TSS. + +Wed May 24 17:22:31 UTC 2006 J.T. Conklin + + * configure.ac: + + Change feature test to define ACE_LACKS_NATIVE_STRPTIME if + system doesn't support strptime(), as it seems ACE doesn't + follow its feature test macro naming conventions when it comes + to strptime(). + + Changed ACE_LACKS_STRPTIME_PROTOTYPE feature test to use + AC_CHECK_DECL instead of AC_EGREP_HEADER. + +Wed May 24 16:33:59 UTC 2006 J.T. Conklin + + * configure.ac: + * m4/config_h.m4: + + Changed ACE_LACKS_STRPTIME and ACE_LACKS_STRPTIME_PROTOTYPE + feature tests to use the same idiom as similar tests. This + Avoids requiring an AH_TEMPLATE for each feature test macro + in config_h.m4. + +Wed May 24 09:07:53 2006 Douglas C. Schmidt + + * ace/Activation_Queue.cpp, + * ace/Activation_Queue.inl: Fixed the queue() "setter" method + so that it doesn't leak memory. Thanks to David Chu for providing this fix. + +Wed May 24 14:00:43 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Gestalt.cpp: + + Added a cast from size_t to int in the ctor to match the + interface of ::instance() and to quiet the 64bit compilers, + complaining about loss of precision in the implicit conversion. + +Tue May 23 19:21:55 UTC 2006 J.T. Conklin + + * tests/Signal_Test.cpp: + + Reset SIGHUP handler to SIG_DFL to support cases where SIGHUP + is ignored (running under nohup(1), etc.). + +Tue May 23 10:55:59 2006 Douglas C. Schmidt + + * netsvcs/lib/Client_Logging_Handler.cpp (handle_input): + * netsvcs/lib/Server_Logging_Handler_T.cpp + (handle_logging_record): Cleaned up the code so that it should + have no memory leaks and will also build cleanly on all the OS + platforms. + + * ace/Log_Msg_IPC.cpp: Fix support for ACE_HAS_STREAM_PIPES. + +Tue May 23 13:05:03 UTC 2006 Phil Mesnier + + * ace/Log_Msg.cpp: + Fixing a memory leak found by valgrind. + + * ace/Timeprobe.cpp: + Added missing include - this wouldn't comple with both noinline + and ACE_COMPILE_TIMEPROPE set. + +Mon May 22 21:13:15 UTC 2006 Iliyan Jeliazkov + + * bin/diff-builds.pl: + + Updated to allow diff between the tests failures today and on a + specified date, for the clean builds (or, all the builds from + the build score). + +Mon May 22 19:06:41 UTC 2006 Steve Huston + + * ace/Log_Record.cpp (operator<<, operator>>): Have to use a different + CDR array method when ACE_USES_WCHAR. + +Mon May 22 09:04:12 UTC 2006 Johnny Willemsen + + * netsvcs/lib/Client_Logging_Handler.cpp: + Fixed compile error on Solaris + +Mon May 22 04:53:29 UTC 2006 J.T. Conklin + + * tests/Signal_Test.cpp: + + The change: + Sat May 20 15:10:55 UTC 2006 J.T. Conklin + + Was not enough to get this test working on all platforms. + + Revert to using ACE_Sig_Guard in worker_child(). Handle the + SIGINT race condition by raising it if and only if the child + was not shut down by the parent. + +Sun May 21 13:46:49 UTC 2006 Iliyan Jeliazkov + + * tests/Service_Config_Test.cpp: + + Fixing Windows test failures, because errno gets overriden + between Service Repository::insert() and testLimits(). Most + likely, it happens in ace_yyparse (), however the existing + mechanism for reporting parser errors does not allow for + reliably propagating the cause of the error. Removing the test + for the cause of the error and simply reporting the error, if it + had occured. + +Sat May 20 15:10:55 UTC 2006 J.T. Conklin + + * tests/Signal_Test.cpp: + + Changed synchronous tests to block signals at the top level. + This had been done with a ACE_Sig_Guard, but that lead to a race + condition between when the guard was release and the delivery of + the SIGINT the client sends to itself. The SIGINT would then be + handled by the default handler, which terminated the process + before the "Ending" message was written to the log. + + #if'd out the ACE_DEBUG, etc. invocations from handle_signal(). + These result in signal-unsafe functions being called when the + handler is called asynchronously. A braver person would have + just removed them entirely. + +Fri May 19 20:08:29 UTC 2006 Steve Huston + + * ace/config-sunos5.6.h: + * ace/os_include/sys/os_mman.h: Moved the declaration of ::madvise() + from config-sunos5.6.h to os_mman.h, to be compiled only when + ACE_LACKS_MADVISE_PROTOTYPE is defined. Set + ACE_LACKS_MADVISE_PROTOTYPE in config-sunos5.6.h where it used to + declare madvise(). This allows autoconf-detected + ACE_LACKS_MADVISE_PROTOTYPE platforms (such as Solaris 9) to + compile correctly. + +Fri May 19 17:53:51 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Gestalt.cpp: + + Fixed a defect in process_directive () which was replacing the + ENOSPC errno with EINVAL. Added #ifndef ACE_NLOGGING / #endif + around logging statements. + + * ace/Service_Repository.cpp: + + Minor reformating. + + * tests/Service_Config_DLL.cpp: + + Added two independent service objects, to be used in the + testLimits test. See testLimits(). + + * tests/Service_Config_Test.cpp: + + Reworked the testLimits() to avoid printing the word "error", + which confuses the test driver into thinking the test failed. + +Fri May 19 17:51:33 UTC 2006 Phil Mesnier + + * ace/Service_Gestalt.cpp: + + Elminated memory leak found by valgrind. + +Fri May 19 17:09:51 UTC 2006 Jeff Parsons + + * tests/Service_Config_Test.cpp: + + Fixed a warning due to assignment of a string literal to a + non-const variable. + +Thu May 18 17:42:09 UTC 2006 Iliyan Jeliazkov + + * bin/diff-builds.pl: + + Contributing a little tool to find the difference in the failing + tests between two dates, on the same build. Or between two + builds, on a particular date. Thanks to Johnny Willemsen + for mining and hosting the data used by + this script. + +Thu May 18 17:33:57 UTC 2006 J.T. Conklin + + * configure.ac: + * m4/config_h.m4: + + Changed feature test for socklen_t to #include + before . Use cannonical AC_CHECK_TYPE and + AC_DEFINE with a third argument instead of a AH_TEMPLATE for + ACE_HAS_SOCKLEN_T. Fixes configuration on OpenBSD. Thanks to + Vladimir Panov for reporting this bug. + +Thu May 18 16:37:46 UTC 2006 Steve Huston + + * configure.ac: Set a ACE_VERSION_NAME variable with the version + string (canonical major.minor.beta), which may include a fix kit id. + + * bin/MakeProjectCreator/config/acedefaults.mpb: Change am_version from + libtool's -version-info format (current:revision:age) to the ACE + release number format (major.minor.beta) and rename it am_release. + This is intended for use with the libtool's -release option and will + result in library names that correspond to the ACE kit number. + The -version-info option uses interface numbers meant to indicate a + series of public API numbers. However, with ACE, things change + pretty often. Rather than try to come up with a way of managing + interface numbers, just use the release numbering that users know + and are used to. + +Thu May 18 15:15:16 UTC 2006 Iliyan Jeliazkov + + * bin/tao_orb_tests.lst: + + Removed Limits from the list of ORB tests because it is now part + of ACE. + + * tests/Service_Config_Test.cpp: + + Added functionality to test gestalt size limits. + +Thu May 18 15:21:33 UTC 2006 Steve Huston + + * NEWS: + * ace/Task.{h inl cpp}: Reverted the changes from: + Fri Apr 14 15:53:21 UTC 2006 Steve Huston + Tasks that delete themselves from within close() would invalidate + the lock that ACE_Task held across the close() call and perform + undefined and illegal actions on the deleted lock upon return. + Bugzilla #2339 remains unresolved. + +Wed May 17 20:31:11 UTC 2006 Roopa Pundaleeka + + * ace/DLL_Manager.cpp: + * ace/DLL_Manager.h: + The dll handle is added to the to the + handle_vector_ only after the library is opened + successfully. This way, the vector does not have redundant + handles. + + * ace/Object_Manager.cpp: + ACE_DLL_Manager::close_singleton is called explicitly from the + ACE_Object_Manager to make sure ACE_DLL_Manager gets cleaned up, + even if there was an error while opening a lib file. + + Thanks to Timo Kuosmanen for + reporting this. + +Wed May 17 14:07:33 2006 Douglas C. Schmidt + + * netsvcs/lib/Server_Logging_Handler_T.cpp: Improved the code so + that it should compile and run properly on Windows. Thanks to + Phil Mesnier for reporting this. + +Wed May 17 19:07:43 UTC 2006 Steve Huston + + * ace/Dynamic_Service_Dependency.h: Doxygen correction; use @c to + set a word in "typewriter" font, but for known class names, there's + no need to do this. + +Wed May 17 17:56:49 UTC 2006 William R. Otte + + * examples/C++NPv1/Logging_Client.cpp + * examples/C++NPv1/Logging_Handler.cpp + * examples/C++NPv2/Logging_Handler.cpp + + Removed now-redundant CDR insertion/extration operators now + defined in ace/Log_Record.{h,cpp} + +Wed May 17 09:35:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_ipc.h: + * ace/os_include/sys/os_socket.h: + * ace/os_include/sys/os_stat.h: + * ace/os_include/sys/os_types.h: + Removed psos support + + * ace/os_include/sys/os_mman.h: + Removed madvice prototype and ACE_LACKS_MADVISE_PROTOTYPE, it + is not set in any config file + +Wed May 17 02:23:31 UTC 2006 Phil Mesnier + + * ace/Log_Msg_IPC.cpp: + + Fix typo exposed on systems with ACE_HAS_STREAM_PIPES defined. + I'll leave it to Will & Doug to do whatever the TO DO said to do. + +Tue May 16 22:23:55 UTC 2006 William R. Otte + + * ace/Log_Msg_IPC.cpp + * ace/Log_Record.cpp + * ace/Log_Record.h + * ace/Log_Record.inl + * netsvcs/lib/Client_Logging_Handler.cpp + * netsvcs/lib/Server_Logging_Handler_T.cpp + + Fixed some problems that stemmed from changing ACE_Log_Msg + msg_data_ from a fixed-size array to a dynamically-sized array. + Thanks to Keith Muzzioli , + John Black , and Mitsuo + Fukasawa for reporting this + and to Doug Schmidt for helping to fix it! + +Tue May 16 13:20:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_time.inl: + * ace/OS_NS_time.{h,cpp,inl}: + Removed chorus and psos support + + * ace/OS_Thread_Adapter.cpp: + Removed psos support + +Tue May 16 13:09:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_wait.{h,inl}: + Remove chorus support + + * ace/OS_NS_stropts.inl: + * ace/OS_NS_sys_stat.inl: + * ace/OS_NS_string.inl: + Removed psos support + +Tue May 16 13:02:12 UTC 2006 Johnny Willemsen + + * ace/Log_Msg.cpp: + * ace/OS_NS_arpa_inet.{h,cpp,inl}: + * ace/OS_NS_dirent.inl: + Removed psos support + + * ace/INET_Addr.cpp: + * ace/config-macros.h: + Removed chorus support + + * ace/Unbounded_Queue.h: + Removed remark about chorus + + * ace/config-cray.h: + Removed explicit template instantiation define, we don't have that + anymore + + * ace/config-hpux-11.00.h: + * ace/config-sunos5.7.h: + * ace/config-rtems.h: + * ace/config-osf1-4.0.h: + Removed kcc support + +Mon May 15 11:30:14 UTC 2006 Phil Mesnier + + * bin/tao_other_tests.lst: + Added more tests that can't run in ACE_FOR_TAO configations due + to dependency on something that avoids ACE_FOR_TAO. + +Mon May 15 01:15:45 UTC 2006 Phil Mesnier + + * bin/tao_orb_tests.lst: + * bin/tao_other_tests.lst: + Added !ACE_FOR_TAO to those tests for which MPC skips generating + executables because it directly or indirectly avoids ACE_FOR_TAO. + Indirect avoidance occurs when a project derives from a base + project that avoids ACE_FOR_TAO. + +Thu May 11 12:37:12 UTC 2006 Johnny Willemsen + + * ace/Message_Block.h: + Doxygen improvements + +Thu May 11 11:15:12 UTC 2006 Johnny Willemsen + + * ace/Dev_Poll_Reactor.cpp: + Removed chorus support + +Thu May 11 07:19:12 UTC 2006 Kees van Marle + + * bin/tao_orb_tests.lst: + Added Bug_1254_Regression + +Wed May 10 14:10:02 UTC 2006 Steve Huston + + * ace/config-win32-msvc-7.h: MSVC 7.1 operator new throws an exception + on an out-of-memory condition, but only when the standard C++ + library is used; the older CRT new() doesn't. + +Tue May 9 11:38:30 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/orbsvcslib.mpb: + Add -GT to the idlflags, all orbsvcs then do generate the TIE files, + if people then use them, they get them out of the box. + +Tue May 9 07:36:30 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/taoidldefaults.mpb: + Removed -Sc, added -GT, see bugzilla bug 2525 for more info + +Tue May 9 07:25:30 UTC 2006 Johnny Willemsen + + * ace/Condition_T.{h,cpp,inl}: + * ace/Local_Name_Space_T.cpp: + * ace/Configuration.cpp: + * ace/Sched_Params.cpp: + * ace/Mutex.{h,cpp,inl}: + * ace/Select_Reactor_T.cpp: + * ace/Signal.cpp: + Removed Chorus support + + * ace/CDR_Stream.cpp: + Small layout change + + * ace/Event_Handler.cpp: + Removed psos support + + * ace/Message_Block.h: + Doxygen improvements + + * ace/Message_Block.cpp: + Const improvement + +Sun May 7 21:03:30 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Config.{h,cpp}: + + Weeding out the remaining issues with single threaded + builds. The implementation now relies on the ACE_TSS_* macros to + abstract from the differences among build styles and platform + support for TSS. + + * ace/Service_Gestalt.{h,cpp}: + + Eliminated commented out code. Minor reformatting in places. + + * ace/TSS_T.{h,inl,cpp}: + + Added some comments to help others avoid a few pitfalls. Made + ts_init() a non-const, which eliminates a few const_cast's. + +Sun May 7 07:02:51 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Config.h: + * ace/Service_Config.cpp: + + Refactored the TSS usage (again) to fix a nasty + order-of-initialization problem. The gist of which is that, if + the ptr (to a template class instance) is a static member, in + static builds, it will be initialized by the process prologue + code *after* another static initializer has had the chance to + use and assign it a value. The solution was to use a method + scope static instance, which C++ guarantees to be initialized by + the (first) exit from that method. + + * ace/Service_Gestalt.h: + * ace/Service_Gestalt.cpp: + + Refactored the construction to avoid using straight new in + constructor initializer lists. Replaced new with ACE_NEW_* where + appropriate. + +Sat May 6 18:08:13 UTC 2006 J.T. Conklin + + * configure.ac: + + Add feature tests for ACE_LACKS_ASCTIME, ACE_LACKS_ACSTIME_R, + ACE_LACKS_GETCWD, ACE_LACKS_GMTIME, ACE_LACKS_GMTIME_R, + ACE_LACKS_LOCALTIME, and ACE_LACKS_STRFTIME. + +Sat May 6 09:52:06 2006 Douglas C. Schmidt + + * examples/DLL/test_dll.cpp: Renamed the DLLs and removed the "./" + from the pathname. Thanks to Sam and Roopa for reporting this + and tracking it down, respectively. + +Sat May 6 10:23:13 UTC 2006 Steve Huston + + * include/makeinclude/platform_sunos5_sunc++.GNU: Add -lrt -laio to + the LIBS. The Proactor framework needs this; I'm not sure why it + never showed up until static builds were run. + +Tue Apr 25 10:22:16 2006 Douglas C. Schmidt + + * ace/OS_NS_string.cpp (strerror): Do a sanity check to make sure + errnum >= 0 and < _sys_nerr and set errno to EINVAL if things + are not sane. Thanks to Aleksandar Vukajlovic for this fix. + +Fri May 5 19:37:12 UTC 2006 Johnny Willemsen + + * ace/Default_Constants.h: + Added a compile time check that ACE_DEFAULT_CDR_BUFSIZE must be + defined to a value bigger then 0, it is 0 we get in a never ending + loop in the CDR code + +Fri May 5 17:01:32 UTC 2006 Steve Huston + + * examples/Service_Configurator/IPC-tests/client/local_spipe_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_thr_stream_client_test.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_L_SPIPE.{cpp i h}: + Wide-char corrections. + +Fri May 5 13:11:12 UTC 2006 Johnny Willemsen + + * ace/FIFO.cpp: + * ace/os_include/os_stddef.h: + Removed psos support + + * ace/config-WinCE.h: + * ace/os_include/os_stddef.h: + Moved setting of ACE_LACKS_STDDEF_H and ACE_LACKS_PTRDIFF_T to the + WinCE file + +Fri May 5 13:08:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_openvms.GNU: + Changed the way templates are handled + +Fri May 5 11:42:12 UTC 2006 Johnny Willemsen + + * ace/Reactor_Token_T.h: + Removed workaround for vc6 + +Fri May 5 08:38:12 UTC 2006 Johnny Willemsen + + * ace/MMAP_Memory_Pool.{h,cpp}: + Made guess_on_fault_ a real bool + +Fri May 5 08:09:12 UTC 2006 Johnny Willemsen + + * ace/os_include/os_dirent.h: + * ace/os_include/os_errno.h: + * ace/os_include/os_netdb.h: + * ace/os_include/os_stdint.h: + * ace/os_include/os_time.h: + * ace/os_include/os_string.h: + * ace/os_include/os_stdlib.h: + Removed psos support + + * ace/os_include/os_dlfcn.h: + * ace/os_include/os_signal.h: + Removed psos and kcc support + + * ace/os_include/os_pthread.h: + Removed chorus support + + * ace/os_include/os_unistd.h: + Removed chorus and psos support + +Fri May 5 07:59:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_utsname.cpp: + * ace/OS.h + Removed psos and chorus support + + * ace/OS_NS_fcntl.cpp: + * ace/Lib_Find.cpp: + * ace/OS_NS_netdb.inl: + Removed psos support + + * ace/Mem_Map.cpp: + Removed chorus support + + * ace/IOStream.h: + Removed checks for KCC compiler + +Fri May 5 07:42:12 UTC 2006 Johnny Willemsen + + * ace/Base_Thread_Adapter.h: + * ace/SPIPE_Connector.cpp: + * ace/SOCK_Dgram.cpp: + * ace/Select_Reactor_T.cpp: + * ace/Handle_Set.cpp: + Removed code for psos, support for this platform will be removed + + * ace/CDR_Base.h: + Removed check for KCC compiler + + * ace/Malloc_Allocator.h: + Doxygen improvement + +Thu May 4 22:11:06 UTC 2006 Steve Huston + + * ace/Message_Block.h: Made ACE_Data_Block::release_i() virtual. + Thanks to Gary Fernandez for this change. + +Thu May 4 21:07:10 UTC 2006 Steve Huston + + * ace/SPIPE_Acceptor.cpp (create_new_instance, close): Have to use + ACE_TEXT_ALWAYS_CHAR to pass pipe name on wide-char w/ + ACE_HAS_STREAM_PIPES. Thanks to Gary Fernandez for this fix and to Yasser + Zabuair for also reporting it. This + fixes bugid 2541. + + * THANKS: Added Gary and Yasser to the Hall of Fame. + +Thu May 4 08:50:12 UTC 2006 Johnny Willemsen + + Reverted the change below, broke the sendfile test and Steve + Huston changed things in such a way that sendfile is only + used on Solaris 9 and newer + + Tue May 2 09:34:54 Pacific Daylight Time 2006 + * ace/OS_NS_sys_sendfile.inl (sendfile): + Removed "::" global scope qualifier from platform sendfile() + call. It caused problem on Solaris 8. Thanks to Simon Massey + and Johnny Willemsen for analyzing the problem and suggesting + this fix. + +Thu May 4 08:36:12 UTC 2006 Johnny Willemsen + + * ace/ace_for_tao.mpc: + Added OS_NS_sys_sendfile + +Thu May 4 00:43:32 UTC 2006 J.T. Conklin + + * ace/Makefile.am: + + Add Dynamic_Service_Dependency.{cpp,h} to appropriate lists. + +Wed May 3 16:02:10 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Config.h: + * ace/Service_Config.cpp: + + Fixed a problem due to an attempt to access current_ before it + has been initialized (a static ACE_TSS instance). The current_ + is now just a pointer to an ACE_TSS instance, which gets + dynamicaly allocated upon invoking the current() method. The + deallocation of that instance is left up to the Object Manager + with which the dynamic ACE_TSS instance is registered. + + * ace/TSS_T.h: + + Added a ACE_TSS_SET () to complete the set of TSS access + operations, which should work regardless of threading, TSS + emulation and TSS availability. + +Wed May 3 11:52:12 UTC 2006 Johnny Willemsen + + * ace/Mem_Map.inl: + Small const improvements + +Wed May 3 10:39:12 UTC 2006 Johnny Willemsen + + * ace/Mem_Map.{h,cpp,inl}: + Made close_handle_ a bool + +Wed May 3 08:56:12 UTC 2006 Johnny Willemsen + + * ace/config-macros.h: + Removed support for KCC + +Wed May 3 08:14:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_sendfile.h: + Export sendfile_emulation to resolve link problems in the + windows builds + +Wed May 3 03:36:23 UTC 2006 Phil Mesnier + + * ace/Svc_Conf_y.cpp: + + Moved the ACE_BEGIN_VERSIONED_NAMESPACE_DECL macro to include + ace_yyparse. + +Tue May 2 09:34:54 Pacific Daylight Time 2006 + + * ace/OS_NS_sys_sendfile.inl (sendfile): + + Removed "::" global scope qualifier from platform sendfile() + call. It caused problem on Solaris 8. Thanks to Simon Massey + and Johnny Willemsen for analyzing the problem and suggesting + this fix. + +Tue May 2 10:34:12 UTC 2006 Johnny Willemsen + + * ace/config-WinCE.h: + Added ACE_LACKS_GETCWD, ACE_LACKS_ASCTIME, ACE_LACKS_ASCTIME_R, + ACE_LACKS_GMTIME, ACE_LACKS_GMTIME_R, ACE_LACKS_LOCALTIME and + ACE_LACKS_STRFTIME. These macros are new and will be used soon + in the ACE_OS layer. + +Mon May 1 19:49:45 UTC 2006 Steve Huston + + * ace/ARGV.{h i cpp}: Filled out more of the documentation in this + class, specifically mentioning that the class will enforce the + "whitespace separates tokens, except when quoted" rule of command + line parsing that's consistent with ACE_Get_Opt, etc. Also removed + documentation of non-existant restrictions such as after using + add(), can't use buf(). + Removed the State enum since the only value ever used was ITERATIVE, + and changed "int state_" to "bool iterative_" (and removed the + state() accessor). Changed substitute_env_args_ from int to bool. + + * ace/OS_NS_unistd.{h cpp} (argv_to_string, string_to_argv): Changed + the substitute_env_args parameter from "int" to "bool" to better + reflect what it is, a yes/no indicator. + +Mon May 1 06:53:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_sunos5_g++.GNU: + * include/makeinclude/platform_sunos5_sunc++.GNU: + Also for solaris 10 link the sendfile lib + +Sun Apr 30 04:21:37 UTC 2006 Phil Mesnier + + * ace/Svc_Conf_y.cpp: + What I meant to commit last time. + +Sun Apr 30 02:21:16 UTC 2006 Phil Mesnier + + * ace/Svc_Conf_y.cpp: + Eliminating more warnings from the scoreboard. I'm not sure the + best way to add this patch to ace/svcconf.mpb, since it affects + more than just gnuace targets. The easiest would be to store the + diff between this commit and the previous version and run patch, + but I'm not sure how to integrate that solution. + +Sat Apr 29 13:58:28 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Gestalt.cpp: + More fuzz cleanup. + +Sat Apr 29 13:17:24 UTC 2006 Phil Mesnier + + * ace/ACE.cpp: + Fuzz cleanup. + + * THANKS: + Added credits. + +Fri Apr 28 22:31:52 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Gestalt.cpp: + + Removed an ';' after ACE_TRACE, which was confusing GCC4 with + "hidden visibility" enabled. + +Fri Apr 28 21:22:53 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Config.cpp: + * ace/Service_Gestalt.cpp: + + More re-formatting to weed out those pesky tabs. + +Fri Apr 28 20:57:19 UTC 2006 Steve Huston + + * ace/config-sunos5.8.h: + * ace/config-sunos5.9.h: Moved ACE_HAS_SENDFILE from Solaris 8 to + Solaris 9. Solaris 8 supports sendfilev[64] but not sendfile, + at least not without some patches I don't know about. + +Fri Apr 28 20:13:41 UTC 2006 Steve Huston + + * include/makeinclude/platform_sunos5_g++.GNU: + * include/makeinclude/platform_sunos5_sunc++.GNU: + Solaris 9 puts sendfile() is a separate library, so LIBS needs + -lsendfile on Solaris 9. + +Fri Apr 28 18:03:11 UTC 2006 Iliyan Jeliazkov + + * ace/ACE.cpp: + * ace/DLL.cpp: + * ace/DLL_Manager.cpp: + * ace/Dynamic_Service_Base.cpp: + * ace/Dynamic_Service_Dependency.cpp: + * ace/Parse_Node.cpp: + * ace/Service_Config.inl: + * ace/Service_Config.cpp: + * ace/Service_Gestalt.cpp: + * ace/Service_Object.cpp: + * ace/Service_Repository.cpp: + * ace/Service_Types.cpp: + * ace/Shared_Object.cpp: + + Applied formatting style consistent with ACE convention. + +Fri Apr 28 15:48:25 UTC 2006 Steve Huston + + * ace/Service_Config.cpp (open_i): ACE_DEFAULT_SVC_CONF shouldn't + be enclosed in ACE_LIB_TEXT since it's defined in terms of + ACE_LIB_TEXT already. + +Fri Apr 28 15:49:21 UTC 2006 Phil Mesnier + + * ace/Makefile.am: + Added new Service_Gestalt files to the appropriate lists. + +Fri Apr 28 15:42:59 UTC 2006 Phil Mesnier + + * ace/Service_Config.cpp: + Fixed a problem killing some wchar builds. + + * ace/Service_Gestalt.h: + Cleaned up the long-lines of the UNIMPLEMENTED functions. + +Fri Apr 28 15:26:53 UTC 2006 Steve Huston + + * ace/Timer_Queue_Adapters.h: Clarified the use and restrictions with + ACE_Async_Timer_Queue_Adapter. + +Fri Apr 28 15:22:35 UTC 2006 Steve Huston + + * apps/JAWS2/JAWS/Concurrency.cpp: Removed unused variables. + +Fri Apr 28 14:54:04 UTC 2006 Steve Huston + + * ace/config-macros.h: HP aC++ needs to see the statement in + ACE_NOTREACHED up to the version 6 series (Integrity). Also see + Tue Apr 11 13:12:36 UTC 2006 Simon McQueen + +Fri Apr 28 14:31:48 UTC 2006 Steve Huston + + * ace/Service_Gestalt.h: Removed extraneous ';' from + ACE_UNIMPLEMENTED_FUNC usage. + + * m4/ace.m4: Fixed incorrect variable referenced in case during + --enable-uses-wchar. Thanks to Paul Robinson for reporting this. + +Fri Apr 28 14:03:50 UTC 2006 Iliyan Jeliazkov + + * ace/Dynamic_Service.h: + * ace/Parse_Node.h: + + Fixed the usage of ACE_UNIMPLEMENTED_FUNC to remove the trailing + semicolon. It was causing build errors on compilers that define + the macro as empty. + +Fri Apr 28 13:55:01 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Gestalt.h: + + Fixed the usage of ACE_UNIMPLEMENTED_FUNC to remove the trailing + semicolon. It was causing build errors on compilers that define + the macro as empty. + +Fri Apr 28 13:29:08 UTC 2006 Iliyan Jeliazkov + + * bin/tao_orb_tests.lst: + + Updated the conditions for running the ORB-specific service + repository tests. + +Fri Apr 28 13:23:57 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Config.h: + + Updated the declaration of current_ to match the definition in + its use of ACE_TSS_TYPE macro, as they are not equivalent for + a single-threaded builds. + +Fri Apr 28 13:21:12 UTC 2006 Johnny Willemsen + + * tests/Process_Mutex_Test.cpp: + When spawn fails log an error and exit instead of using an assert + which causes an abort of the exe + +Fri Apr 28 13:15:12 UTC 2006 Johnny Willemsen + + * tests/Pipe_Test.cpp: + When spawn fails log an error and exit instead of using an assert + which causes an abort of the exe + +Fri Apr 28 12:49:12 UTC 2006 Johnny Willemsen + + * ace/config-openvms.h: + Added __SIGNED_INT_TIME_T so that we get a signed time_t that + matches the POSIX spec that ACE expects. + +Fri Apr 28 12:23:12 UTC 2006 Johnny Willemsen + + * ace/config-openvms.h: + Removed comments, macros are documented in generally, added + ACE_LACKS_PERFECT_MULTICAST_FILTERING + +Fri Apr 28 11:11:12 UTC 2006 Johnny Willemsen + + * bin/PerlACE/Process_VMS.pm: + New file to be able to run the tests automatically on OpenVMS + + * bin/PerlACE/Process.pm: + When running on OpenVMS use Process_VMS + + * ace/config-openvms.h: + Added ACE_HAS_SIGISMEMBER_BUG + + * tests/run_test.pl: + If ACE_ROOT is not set, add ../bin to lib + +Fri Apr 28 09:23:12 UTC 2006 Johnny Willemsen + + * tests/Process_Manager_Test.cpp: + Also create a logfile for each child process started + +Fri Apr 28 08:06:12 UTC 2006 Johnny Willemsen + + * tests/run_test.lst: + Added Sendfile_Test + +Fri Apr 28 08:04:12 UTC 2006 Johnny Willemsen + + * tests/Sendfile_Test.cpp: + Added missing include + +Thu Apr 27 21:04:08 UTC 2006 Steve Huston + + * ace/OS_Memory.h: Allow configs to set ACE_bad_alloc to avoid + extending the if-elif chain here further. + + * ace/config-win32-msvc.h: Regardless of MSVC version, MFC changes + operator new to throw CMemoryException on out-of-memory condition. + Version-specific settings still control the setting of + ACE_HAS_NEW_NOTHROW. Thanks to Mohit Kapoor for this fix. + + * ace/Select_Reactor_T.cpp (handle_error): HACK ALERT! Some Linux + kernels will return from select() with an "invalid" errno value, + ERESTARTNOHAND, when compiled with profiling enabled. This works + around the problem. This is a known kernel bug; see Red Hat Bugzilla + https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=161468 and + https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=123648 as well + as Riverace support issue #167 and Riverace's complaint to Red Hat, + support issue #17841808. + + * THANKS: Added Mohit Kapoor to the Hall of Fame. + +Thu Apr 27 20:14:52 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Gestalt.cpp: + + Fixed a complaint from a ACE_NDEBUG builds about unrefrenced + variable (only used in ACE_ASSERT). + +Thu Apr 27 18:33:18 UTC 2006 Johnny Willemsen + + * tests/Aio_Platform_Test.cpp: + When AIO is not available, just print an info message and exit + + * tests/run_test.lst: + Added Aio_Platform_Test, it was not in this file at all + +Thu Apr 27 18:21:17 UTC 2006 Steve Huston + + * ace/config-aix-5.x.h: Added ACE_HAS_SIGSUSPEND. + +Thu Apr 27 14:57:10 UTC 2006 Iliyan Jeliazkov + + * ace/Svc_Conf.y: + * ace/Svc_Conf_Tokens.h: + * ace/Svc_Conf_y.cpp: + + Fixed fuzz complaint about #include inside a versioned namespace + in Svc_Conf_y.cpp. It was due to a code that Bison generates a + part of the parser, from Svc_Conf.y. Changed the versioned + namespace to encloses the non-generated code only, while the + rest of the parser seems to be designed so that multiple parses + can coexist without name clashes. + +Thu Apr 27 14:29:07 UTC 2006 Iliyan Jeliazkov + + * ace/Dynamic_Service_Dependency.h: + * ace/Dynamic_Service_Dependency.cpp: + + Updated to remove an empty inl file. + + * ace/Dynamic_Service_Dependency.inl: + + Removed this file. + +Thu Apr 27 14:00:18 UTC 2006 Johnny Willemsen + + * ace/Sock_Connect.cpp: + Implemented get_ip_interfaces for OpenVMS + +Thu Apr 27 11:19:18 UTC 2006 Johnny Willemsen + + * ace/Array_Map.h: + * ace/ATM_Addr.h: + * ace/Atomic_Op_T.h: + * ace/Base_Thread_Adapter.h: + * ace/Cached_Connect_Strategy_T.h: + * ace/Capabilities.h: + * ace/Default_Constants.h: + * ace/Hash_Map_Manager_T.h: + * ace/Log_Msg_Callback.h: + * ace/Log_Msg_IPC.h: + * ace/Map_Manager.h: + * ace/POSIX_Asynch_IO.h: + * ace/POSIX_Proactor.h: + * ace/RB_Tree.h: + * ace/Strategies_T.h: + * ace/Timer_Heap_T.h: + * ace/Timer_List_T.h: + * ace/Timer_Queue_Adapters.h: + * ace/Timer_Queue_T.h: + * ace/Timer_Wheel_T.h: + Fixed doxygen warnings + +Thu Apr 27 01:49:18 UTC 2006 Ossama Othman + + * ace/OS_NS_sys_sendfile.h (sendfile, sendfile_emulation): + * ace/OS_NS_sys_sendfile.cpp (sendfile_emulation): + + ACE_LOFF_T -> off_t. Expected ACE_LOFF_T behavior is still + under scrutiny. + + * ace/OS_NS_sys_sendfile.inl: + + Added missing include directive. Addresses + infinite recursion at run-time when ACE_HAS_SENDFILE is defined. + + (sendfile): + + ACE_LOFF_T -> off_t, as above. + +Wed Apr 26 22:00:21 UTC 2006 Iliyan Jeliazkov + + * ace/Parse_Node.h: + * ace/Service_Gestalt.h: + + Correcting a build problem, caused by the extraneous semicolons + after ACE_UNIMPLEMENTED_FUNC + +Wed Apr 26 20:21:49 UTC 2006 Iliyan Jeliazkov + + The motivation for these changes was to enable support in ACE + for multiple instances of Service Configuration Repository, or + more appropriately - "Gestalt" (from the German word, meaning + something that's more than the sum of its parts). This is + feature is necessary to enable support for ORB-specific, or more + generally - service-specific sets of services, i.e. to be able + to have dynamically loaded services to use their own private set + of service objects. In the context of the implementation I will + use "gestalt" as a synonym for service configuration context or + service configuration repository. + + In order to accomplish this, the "instance"-related + functionality of the former ACE_Service_Config class has been + moved to another class - ACE_Service_Gestalt. The + ACE_Service_Config retains all static interfaces and those + members, pertaining to the concept of process-wide configuration + state. The service config, as known today has been retained as a + concept, but in its specialized semantics as holding a + process-wide configuration state. The primary concept expressing + an instance of configuration context is the gestalt. The + implementation actually uses a specialization of + ACE_Service_Gestalt in order to implement ACE_Service_Config as + a singleton, special case of configuration context. + + The static methods in ACE_Service_Config provide access to + process-wide gestalt (ubergestalt, anyone?) instance. + + For more details, here is the history of all included changes, + with their motivation and explanation. It is ordered + alphabetically, by the names of the changed files: + + * ace/ACE.cpp: + + Added to the condition evaluating ACE::debug() to include a + check if environmental variable ACE_DEBUG has been set. + + Updated the debug() function to call getenv() only once by using + a method-local static variable to hold the value from the + environment. + + * ace/DLL.h: + * ace/DLL.cpp: + + Implemented an operator=, needed in order to implement the + ACE_Service_Configuration_Guard class. + + * ace/DLL_Manager.cpp: + + Improved the error diagnostics so that a "file not found" would + not mask a "symbol not defined" error when loading a DLL. + + * ace/Dynamic_Service.h: + + "Privatized" copy ctor and operator= for ACE_Dynamic_Service + objects since it is not designed for such operations. + + * ace/Dynamic_Service.inl: + + Added overloaded method instance() for ACE_ANTI_TCHAR. + + * ace/Dynamic_Service.cpp: + + Changes to enable instantiation of a service, based on the + registration in a particular service repository. Adding a method + that takes ACE_Service_Gestalt* additional parameter. + + * ace/Dynamic_Service_Base.h: + * ace/Dynamic_Service_Base.cpp: + + Factored out a find_i() method to be used by the friend + ACE_Dynamic_Service_Dependency class. It implements the specific + lookup policy that extends the search to the global repository + if the named service object can not be found locally. + + Added instance method, allowing the caller to explicitly specify + the gestalt. + + * ace/Dynamic_Service_Dependency.h: + * ace/Dynamic_Service_Dependency.inl: + * ace/Dynamic_Service_Dependency.cpp: + + A newly introduced class, whose instances are designed to be + embedded inside instances of other classes, typically created by + DLL-based factories (service objects). This provides a way to + declare dependency on a specific service, thus avoiding order of + initialization issues with objects whose implementation code + resides in dynamically loaded services. + + It is disastrous to have dynamically loadable services create + and give away ownership of objects and then be unloaded before + all those instances have been deleted. Normally the code for + such objects classes resides within the TEXT segment of the DLL, + which implements the service. If a service gets removed, its DLL + may be unmapped from memory and then any attempt to invoke a + method on the said objects will cause SEGV. + + Such instances must contain a member of + ACE_Dynamic_Service_Dependency initialized with the service they + depend on. @code ACE_Dynamic_Service_Dependency's constructor + and destructor are "magical" - they work by maintaining the + underlying dynamic service's DLL reference count. + + The problem was not present before because the one Service + Repository outlived any other user objects. Now that an + un-loadable service can own its configuration, the sequence of + service finalization has been reversed. + + Updated the implementation of ACE_Dynamic_Service_Dependency + class to ease debugging. ACE_Dynamic_Service_Dependency gets + initialized whenever a dependent service gets loaded, to help us + keep our access to dependent instances after their DLL is gone + (by upping the ref count on the DLL). + + Updated usage of gestalt's instance() to current(). Removed + unnecessary comments. + + * ace/Global_Macros.h: + + Changed the ACE_STATIC_SVC_DEFINE to use the new + ACE_Service_Config::insert () method, which allows to streamline + the Service Configuration interface and promote hiding the + storage used for the static service descriptors. + + * ace/Parse_Node.h: + * ace/Parse_Node.cpp: + + Changes to aid in keeping track of the gestalt, while deep in + the guts of the svc.conf parser. + + Replaced the ACE_Service_Gestalt & in the method signatures with + ACE_Service_Gestalt * to unify the interfaces. + + Updated the static function node's logic to use only + ACE_Service_Gestalt public members and to no longer rely on + knowledge about the internal storage representation of service + repository. + + Removed a static_cast<> in ACE_Static_Function_Node::symbol() + that was causing problems on some platforms. It was not even + necessary as both sides were of the same type. + + * ace/Service_Config.{h,inl,cpp}: + + This separates the responsibilities between the service gestalt, + which represents an _instance_ of configuration information, and + the service config, which represents a special, process-wide, + global configuration repository. Since both these entities + represent the same concept - service configuration state, but + from different aspects, the ACE_Service_Config now inherits + (publicly) from ACE_Service_Gestalt. + + Lots of instance-related code moved to ACE_Service_Gestalt + Replaced the use of char with ACE_ANTI_TCHAR and the appropriate + ACE_TEXT_* macros. + + Moved the parsing of command-line options, pertaining to the + process as a whole, here - in the parse_args_i () (protected, + virtual). + + In order to resolve a problem caused by the inability of a + dependent static service to determine which gestalt they need to + register with, the concept of "current" was separated from the + "global" gestalt. The current gestalt is pointed to by a + pointer, stored in thread-specific storage (TSS) and manipulated + by the ACE_Service_Config_Guard class that implements the + "resource acquisition is initialization" idiom. + + Fixed an error in the separation of responsibilities between the + instance gestalt and the global (ubergestalt), during + initialization. The bug can cause infinite recursion, when + initializing an ORB, housed in a dynamic service. The singleton + gestalt (i.e. ACE_Service_Config) must be initialized through + open_i(), before open_i() can proceed initializing the specific + gestalt instance. The difficulty is in that some use cases + reverse the order of initialization by calling + ACE_Service_Config::open () first and then, at some point call + the instance gestalt open_i(). The solution is to use the + is_initialized_ member together with an explicit call to + ACE_Service_Config::global()->open_i(). To ease debugging of + the process of registering static service, I have changes the + ACE_Service_Config::static_svcs() to return + ACE_Service_Gestalt::instance (), instead. Thus all the + ACE_STATIC_SVC* macros are still working (no need to change + existing code), but now there is a convenient place to debug - + see the newly added ACE_Service_Gestalt::insert () method. The + header file no longer declares ACE_STATIC_SVCS, + ACE_STATIC_SVCS_ITERATOR, ACE_SVC_QUEUE and + ACE_SVC_QUEUE_ITERATOR. Those are now protected typedefs in + ACE_Service_Gestalt, where they are actually used. + + Added new insert () method to use instead of the sequence + static_svc ()->insert () which unnecessary exposes the internal + storage structure of Service Configurator. Made no_static_svcs_ + an instance member, instead of a class (static) member, thus + providing for ability to set it per instance, not globally. + + Added default values for open_i() and declared private copy ctor + and assignment operator for ACE_Service_Config_Guard, since it + is not intended to be copied. + + Similarly, moved the parts of the open_i() functionality that + did not belong in every instance of the gestalt. + ACE_Service_Config is again a process-wide Singleton,registered + with ACE_Object_Manager. + + Eliminated old #if 0-ed code in Service_Config.cpp. + + * ace/Service_Gestalt.h: + * ace/Service_Gestalt.inl: + * ace/Service_Gestalt.cpp: + + Encapsulates the idea of Service Configuration repository, or + configuration context. + + Changed open_i to be able to detect if it is working on the + special, process-wide instance (ubergestalt) or a "plain" + gestalt instance, since there are things that must only be done + once per process - like signal handler, logging key and + daemon-ization of the whole process. + + Added an ignore_static_svcs parameter to + ACE_Service_Gestalt::open_i in order to preserve the prior + behavior of the singleton ACE_Service_Gestalt instance. Even + though its no_static_svcs_ member was being initialized with 1, + some clients (TAO) needs to be able to override it. Since now a + call to open_i on an instance gestalt may precede in time the + call to open_i on the ubergestalt, we need a mechanism to allow + the no_static_svcs_ value to be overridden. + + Added the insert()'s implementation (described above). Added a + singleton() method to return the process-wide gestalt singleton + (or ubergestalt?:). Used in open_i() to account for the fact + that now a Service Gestalt may be called to open () prior to + open () on the singleton instance, which would typically contain + the bulk of the static service object descriptors. + + There was a problem with "hybrid" service objects, i.e. dynamic + SO which contains static SO (dependent services). The dependent + services are typically registered via static ctor or static + initializer at the point of loading of the dynamic SO's DLL. As + such, they end up registering before the dynamic SO. Upon + finalization of the service repository, the dynamic SO is + finalized first, thus unloading its DLL and unmapping the TEXT + segment, where the dependent static services code is. When + next, the static SO is to be finalized its memory is no longer + at valid address. The change ensures the dynamic service is + registered *before* its dependent static services and will + therefore be finalized last. The solution is based upon the + concept of forward declaring a dynamic service, named after the + configuration file being processed. Before processing a file, + we simply check for an existing service with the same name and + "pass" if we find one. + + Fixed the ACE_Service_Config_Guard's detection of the case where + the forward service declaration was not replaced by a proper + declaration as expected. It now properly removes the forward + decl, not the "good" instance. + + Cleared up the TSS management issue, causing executable to crash + on startup. The problem was due to an order-of-instantiation + issue, involving the TSS-based pointer to the current + gestalt. Used ACE_Object_Manager's shutting_down and starting_up + methods to determine if it is safe to use the static ACE_TSS + instance. + + Added const-ness for find(). Removed prototypes for initialize, + resume, suspend and remove that used plain char type and + conditionally compiled in only for WinCE and + ACE_USES_WCHAR. Service_Config still declares and defines these + (using ACE_ANTI_TCHAR). Updated to resolve problems when built + with ACE_USES_WCHAR. + + Declared private copy ctor and assignment operator for + ACE_Service_Gestalt and ACE_Service_Type_Factory, since their + instances are not intended to be copied. Added an + ACE_UNIMPLEMENTED_FUNC macro for the copy-ctor and assignment + operator of ACE_Service_Type_Factory. + + Reorganized to streamline the header file and remove unnecessary + declarations and to add a decl for find_static_svc_descriptor(). + + Changed the open() method's implementation to incorporate the + additional parameter for open_i(). + + Added the new find_static_svc_descriptor() member, which allows + ACE_Static_Function_Node to not need to know how the static + services are registered in the service repository. + + * ace/Service_Object.h: + * ace/Service_Object.inl: + * ace/Service_Object.cpp: + + Exposed the dll_ member through dll () const method because the + reference is needed by the new ACE_Dynamic_Service_Dependency + class. Fixed the dump () method. + + * ace/Service_Repository.h: + * ace/Service_Repository.cpp: + + Added const-ness for the find* () methods. Added debugging. The + remove method changes the order of services registrations in the + repository, which may break the Service Repository's invariant, + imposed by the need to correctly finalize dynamic services with + their own static services. + + For example, consider a case where a static service (S0) is + registered in the repository. Then a DLL-based service (D1) + registers its own static service (S1). So far the order is + "finalization-compatible": S0 < D1 < S1, i.e. services will be + finalized in reverse order and D1's DLL will still be available + when finalizing S1. Now let's remove (S0). Currently, after + this operation the repository end up in this order: S1 < D1, + which is trivially not finalization-compatible. + + Instead of replacing the pointer with the last ptr to a svc in + the array (repository) and then decrementing the current size of + the repo, the solution actually shifts left the rest of the + array. + + * ace/Service_Types.cpp: + * ace/Shared_Object.cpp: + + Removed some and updated existing debug statements. Eliminated + dead partial instantiation code. + + * ace/Svc_Conf.y: + * ace/Svc_Conf.h: + * ace/Svc_Conf_Tokens.h: + * ace/Svc_Conf_y.cpp: + + Changed to allow propagation of the knowledge about which + gestalt is currently being used for service registrations. + + Factored the ACE_Svc_Conf_Param class out in its own translation + unit. + + * ace/Svc_Conf_Param.h: + + Replaced the ACE_Service_Gestalt & in the method signatures with + ACE_Service_Gestalt * + + * ace/svcconf.mpb: + + Updated the svcconf.mpb rule to allow building with Bison 2.0 + and up. The change adds #ifdef/#endif around the generated + header file. A YYSTYPE_IS_DECLARED define is added in order to + make sure the token declarations from the Svc_Conf_Tokens.h are + used instead of those generated in the Svc_Conf_y.cpp file. + + Added the new Dynamic_Service_Dependency.* files. + + * bin/tao_orb_tests.lst: + + Adding the new tests to the automated test suite to run during + the nightly builds. + +Wed Apr 26 17:13:57 UTC 2006 Phil Mesnier + + * bin/tao_orb_tests.lst: + Added test for Parallel_Connect_Strategy. This test will take + about 9 minutes to run to completion. + +Wed Apr 26 14:22:31 UTC 2006 Phil Mesnier + + * bin/tao_orb_tests.lst: + Added tests for new POA features. + + * bin/MakeProjectCreator/config/endpointpolicy.mpb: + Applications wishing to use the TAO EndpointPolicy should add + this base project to their MPC files. This will include + libTAO_EndpointPolicy in their link lines. + +Wed Apr 26 14:10:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_hpux_kcc.GNU: + * include/makeinclude/platform_irix6.x_kcc.GNU: + * include/makeinclude/platform_linux_kcc.GNU: + * include/makeinclude/platform_osf1_4.x_kcc.GNU: + * include/makeinclude/platform_sunos5_kcc.GNU: + * include/makeinclude/platform_tru64_kcc.GNU: + Removed these files which are for the KAI C++ compiler. This + compiler doesn't exist anymore and full support for KAI C++ + has been removed now from ACE/TAO. See bugzilla bug 2007 + +Wed Apr 26 13:03:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added TAO/tests/POA/Bug_2511_Regression + +Wed Apr 26 12:52:12 UTC 2006 Johnny Willemsen + + * ace/Process_Manager.cpp: + Fixed fuzz errors and use const when possible + +Wed Apr 26 12:02:12 UTC 2006 Johnny Willemsen + + * tests/CDR_Test.cpp: + Boolean is now size 1 or bigger, the marshaling code will take + care that a Boolean is marshaled as octet of size 1 + +Wed Apr 26 11:28:28 UTC 2006 Phil Mesnier + + * bin/tao_orb_tests.lst: + Added TAO/tests/OBV/truncatable. + +Wed Apr 26 10:05:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added TAO/tests/OBV + +Wed Apr 26 09:56:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added TAO/tests/Portable_Interceptors/Bug_2510_Regression + +Wed Apr 26 07:21:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.5.x.GNU: + Increased template-depth to 50, hopefully this is large enough to + also build CIAO + +Tue Apr 25 16:44:04 UTC 2006 Phil Mesnier + + * ace/CDR_Stream.h: + * ace/CDR_Stream.cpp: + Added code to support rewinding the output CDR to some previous + location and updating a value there. This is required to support + marshaling offset values were the target of the offset is not + known until the final offset target is actually reached. + +Tue Apr 25 13:50:12 UTC 2006 Martin Corino + + * tests/Signal_Test.cpp: + Fixed this test for (modern) Linux and Solaris at least. + The crux is blocking signals before calling sigwait() when doing + synchronous signal handling. + +Tue Apr 25 09:35:12 UTC 2006 Johnny Willemsen + + * ace/Base_Thread_Adapter.h: + * ace/Cleanup.h: + Fixed some errors I made + +Tue Apr 25 09:23:12 UTC 2006 Johnny Willemsen + + * ACE-INSTALL.html: + Updated supported platforms and use vc8 for the MPC examples + +Tue Apr 25 08:49:12 UTC 2006 Johnny Willemsen + + * ace/CDR_Base.h: + Always use bool for Boolean, see bugzilla 2514 for more info + +Tue Apr 25 06:33:12 UTC 2006 Johnny Willemsen + + * ace/Log_Msg.h: + Put back ACE_TSS_CLEANUP_NAME that got lost by accident with the + vc6 cleanup. Thanks to Olli Savia for reporting this. + +Mon Apr 24 17:39:12 UTC 2006 Johnny Willemsen + + * tests/run_test.lst: + Added Signal_Test. Thanks to Martin Corino for notificing that + we don't run this test on any platform. + +Mon Apr 24 10:17:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added TAO/tests/Bug_1676_Regression + +Mon Apr 24 09:57:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.5.x.GNU: + Increase template depth to resolve compile errors when building + TAO with the new sequence implementation + +Mon Apr 24 09:17:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_types.h: + Added ACE_LOFF_T for LynxOS. Thanks to Simon Massey for delivering + the patch + +Fri Apr 21 16:28:26 UTC 2006 William R. Otte + + Merge from ARMS Escher repository. + + * ace/OS_NS_Thread.cpp + + Updated sched_params() to not ignore the process id passed in. + Also enhanced the Windows implementation to get a handle to the + process specified before applying the priority class changes. + + * ace/Process_Manager.cpp + * ace/Process_Manager.h + + Added methods set_scheduler and set_scheduler_all + to set scheduling parameters for process(es) managed by this + class. + + * bin/MakeProjectCreator/config/ciao_config_handlers.mpb + + Fixed build ordering problem in CIAO. + +Fri Apr 21 07:41:12 UTC 2006 Johnny Willemsen + + * ace/Caching_Utility_T.cpp: + Removed invalid added const + +Thu Apr 20 19:27:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_types.h: + Added ACE_LOFF_T for the BSD variants, thanks to J.T. Conklin + for delivering the patch + +Thu Apr 20 18:16:12 UTC 2006 Johnny Willemsen + + * ace/config-macros.h: + Removed setting of ACE_ANY_OPS_USE_NAMESPACE again. This causes + problems when building CIAO. Thanks to Jeff Parsons for finding + this. + +Thu Apr 20 11:46:12 UTC 2006 Johnny Willemsen + + * tests/ACE_Init_Test.rc: + Removed another msvc specific part + +Thu Apr 20 11:06:12 UTC 2006 Johnny Willemsen + + * bin/fuzz.pl: + Added a check for deprecated macros, first one to check is + ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION + + * tests/*.cpp: + * protocols/*.cpp: + * ACEXML/*.cpp: + * performance-tests/*.cpp + * netsvcs/*.cpp + Removed all explicit template instantiations + + * ace/os_include/sys/os_types.h: + Added ACE_LOFF_T typedef for VxWorks 6.2 and newer + +Thu Apr 20 07:23:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_types.h: + Always define ACE_LOFF_T so that we can use it in the sendfile + wrapper + +Thu Apr 20 07:17:12 UTC 2006 Johnny Willemsen + + * ace/svcconf.mpb: + Removed Service_Templates.cpp + +Wed Apr 19 19:18:12 UTC 2006 Johnny Willemsen + + * ace/*: + Removed explicit template support + +Wed Apr 19 15:09:12 UTC 2006 Johnny Willemsen + + * tests/Bug_2368_Regression_Test.cpp: + Fixed compile error and compile warning + +Wed Apr 19 14:35:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_sys_sendfile.h: + Updated include to get size_t and ACE_LOFF_T to fix compile + errors on Solaris + +Wed Apr 19 13:31:12 UTC 2006 Johnny Willemsen + + * examples/APG/Logging/Use_Multiple_Sinks.cpp: + * examples/APG/Logging/Use_Ostream.cpp: + * examples/APG/Logging/LogManager.h: + Removed vc6 workarounds + +Wed Apr 19 13:13:12 UTC 2006 Johnny Willemsen + + * tests/Bug_2368_Regression_Test.cpp: + * tests/run_test.lst: + * tests/tests.mpc: + Added regression for bug 2368, this will fail because this bug + isn't addressed yet + +Wed Apr 19 13:08:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_sunos5_g++.GNU: + Use -shared instead of -G when building shared libraries. Thanks to + Alan L Batongbacal for reporting this. This + fixes bugzilla bug 1848. + +Wed Apr 19 12:11:12 UTC 2006 Johnny Willemsen + + * tests/ACE_Init_Test.rc: + Removed msvc specific lines + + * tests/tests.mpc: + The ACE_Init_Test should use its resource file. Fixes bugzilla + 2495 + + * ace/Capabilities.{h,cpp}: + Prefix increment instead of postfix + + * ace/Hash_Map_Manager_T.{h,cpp}: + Removed workaround for suncc 4.2 + + * ace/Object_Manager.h: + * ace/Parse_Node.h: + * ace/POSIX_Proactor.h: + * ace/Thread_Mutex.h: + Doxygen improvements + + * ace/Parse_Node.cpp: + Use prefix increment, initialise pointers with 0 and don't print + an error message when we can't a dll, this gives false messages + when using TAO. This fixes bugzilla 2383. Thanks to Ming Xiong + for making a patch. + + * ace/Proactor.h: + Removed all virtual keywords, not needed for this class. Fixes + bugzilla 2178. + + * ace/Thread_Manager.h: + Removed virtual keywords, not needed and safes footprint. Fixes + bugzilla 2179. + + * bin/fuzz.pl: + Added more msvc checks to detect code constructors for vc6 or + vc7.0 + +Wed Apr 19 11:48:12 UTC 2006 Johnny Willemsen + + Merged ACE changes from sendfile branch. Also made a lot of const + improvements throughout ACE. + + Tue Apr 4 10:20:36 2006 Ossama Othman + + * ace/Mem_Map.cpp (open): + + Only copy the filename to the ACE_Mem_Map::filename_ member + if the call to open() succeeds. + + * ace/PI_Malloc.h (ACE_Malloc_Header): + + Added missing private and undefined copy constructor. The + corresponding assignment operator was already there. + + Wed Mar 29 14:51:12 2006 Johnny Willemsen + + * ace/config-sunos5.8.h: + Solaris 8 and newer also support sendfile. It seems HPUX also + supports it but with a different signature and semantics, so just + don't try it there yet. + + Wed Mar 29 13:06:12 2006 Johnny Willemsen + + * ace/MMAP_Memory_Pool.{h,cpp,inl}: + Added new .inl file to implement the new mmap accessors, include + this new file in the header and implementation file + + Wed Mar 29 08:00:12 2006 Ossama Othman + + * ace/OS_NS_sys_sendfile.cpp + * ace/OS_NS_sys_sendfile.h + * ace/OS_NS_sys_sendfile.inl + New sendfile wrapper + + * ace/MMAP_Memory_Pool.h: + Added accessors for mmap + + * ace/ace.mpc + Added OS_NS_sys_sendfile + + * ace/config-linux-common.h + Added ACE_HAS_SENDFILE + +Wed Apr 19 07:48:12 UTC 2006 Johnny Willemsen + + Merged ACE changes from sequpdate3 branch + + * ace/config-osf1-3.2.h: + Removed, very old + + * ace/config-tru64.h: + Removed include of config-osf1-3.2.h + + * ace/OS_Dirent.cpp: + * ace/OS_Memory.{cpp,inl}: + * ace/OS_String.{cpp,inl}: + * ace/Sync.cpp: + Removed these files, where not build for a long time already + + * ace/ace.mpc: + Removed files above + + * ace/OS_Memory.h: + * ace/OS_String.h: + Removed include of inline files + + * ace/config-win32-msvc6.h: + * ace/config-kcc-common.h: + Removed these files, vc6 and kcc are deprecated + + * ace/config-irix6.x-kcc.h: + * ace/config-osf1-4.0.h: + * ace/config-sunos5.5.h: + Removed support for KCC + + * ace/Asynch_IO_Impl.h: + Removed workarounds for KCC + + * ace/config-win32-msvc.h: + Removed support for vc6 and vc7.0 + + * ace/Array_Base.cpp: + * ace/Array_Map.{h,cpp}: + * ace/Base_Thread_Adapter.h: + * ace/Cleanup.h: + * ace/Log_Msg.h: + * ace/Versioned_Namespace.h: + * ace/Get_Opt.cpp: + * ace/WIN32_Proactor.cpp: + * ace/Message_Queue.cpp: + * ace/CDR_Base.h: + Removed work arounds for vc6 + + * ace/README + * ace/config-win32-msvc6.h: + * ace/Global_Macros.h: + Deprecated ACE_HAS_BROKEN_NAMESPACES, we drop msvc6 and I am + removing the workarounds for this compiler one by one as part of the + new sequence implementation. Because we deprecate this also + ACE_NESTED_CLASS is deprecated + + * ace/config-win32-msvc6.h: + * ace/config-win32-msvc7.h: + * ace/config-win32-msvc8.h: + Removed ACE_HAS_BROKEN_IMPLICIT_CONST_CAST, not used in ACE + + * ace/config-win32-msvc6.h: + * ace/config-win32-visualage.h: + * ace/Registry.h + Removed ACE_HAS_BROKEN_NESTED_TEMPLATES, only used for msvc6 and + visual age, both are being dropped + +Wed Apr 19 07:48:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug_2503_Regression + +Tue Apr 18 20:49:16 2006 Wallace Zhang + + * ACE version 5.5.1 released. + +Local Variables: +mode: change-log +add-log-time-format: (lambda () (progn (setq tz (getenv "TZ")) (set-time-zone-rule "UTC") (setq time (format-time-string "%a %b %e %H:%M:%S %Z %Y" (current-time))) (set-time-zone-rule tz) time)) +indent-tabs-mode: nil +End: diff --git a/ACE/ChangeLogs/ChangeLog-07a b/ACE/ChangeLogs/ChangeLog-07a new file mode 100644 index 00000000000..b70a051d787 --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-07a @@ -0,0 +1,3198 @@ +Mon Jan 22 23:14:56 2007 William R. Otte + + * ACE version 5.5.5 released. + +Thu Jan 18 16:45:31 UTC 2007 Douglas C. Schmidt + + * ace/README: Added ACE_HAS_EBCDIC. + + * ace/Codeset_IBM1047.{h,cpp}: Changed ACE_MVS to ACE_HAS_EBCDIC + in these files so that EBCDIC support can be enabled for non-MVS + platforms. Thanks to Harry Goldschmitt + for this suggestion. + +Fri Jan 19 12:35:42 UTC 2007 Chad Elliott + + * bin/tao_orb_tests.lst: + + TAO/tests/ORB_Local_Config/Bug_1459/run_test.pl should not run + when built as ACE_FOR_TAO. + +Thu Jan 18 19:22:41 UTC 2007 Chad Elliott + + * NEWS: + + Documented this change. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Provide a __prebuild__ target that performs the prebuild step or + nothing if a prebuild step wasn't supplied. + + * include/makeinclude/rules.common.GNU: + + Added the __prebuild__ target to the front of the all + dependencies. + + This change fixes Bugzilla #2713. + +Wed Jan 17 15:55:06 UTC 2007 Iliyan Jeliazkov + + * bin/tao_orb_tests.lst: + Making sure the Transport::Current tests are not ran when the + functionality is disabled. + +Wed Jan 17 15:10:12 UTC 2007 Johnny willemsen + + * ace/config-g++-common.h: + Make sure that we don't set visibility for singletons + when visibility is turned off completely + +Wed Jan 17 12:20:57 UTC 2007 Chad Elliott + + * bin/PerlACE/Run_Test.pm: + + Added a function to check for the privileges required to set + thread priority on HP-UX. For all other platforms, it is a noop. + +Tue Jan 16 21:00:20 UTC 2007 Iliyan Jeliazkov + + * ace/Service_Gestalt.cpp: + + Fixing a memory leak of a gestalt instance, caused by an + incorrect re-initialization. + +Mon Jan 15 21:54:47 UTC 2007 Steve Huston + + * ace/SOCK_Stream.h: Corrected Doxygen tags. + +Mon Jan 15 10:15:47 UTC 2007 Johnny Willemsen + + * ace/config-rtems.h: + Improved rtems 4.7 support + +Fri Jan 12 20:09:47 UTC 2007 Johnny Willemsen + + * ace/config-g++-common.h: + Fixed incorrect macro + +Thu Jan 11 21:42:47 UTC 2007 Steve Huston + + * ace/Message_Block.h: Comment typos. + * ace/SOCK_Stream.h: Corrected documentation for what the + _n() variants do with timeouts. + +Thu Jan 11 15:27:27 UTC 2007 Phil Mesnier + + * docs/ACE-guidelines.html: + Fixed formatting. + +Wed Jan 10 20:31:52 UTC 2007 Phil Mesnier + + * docs/ACE-guidelines.html: + Added some text making explicit the use of "#if defined (FOO)" + rather than "#if FOO" so as to avoid trouble with Doxygen. + +Wed Jan 10 16:08:32 UTC 2007 Chad Elliott + + * tests/CDR_Array_Test.cpp: + + Added a work-around for an issue with gcc 4.1.1 (and possibly + later versions) where certain variables are optimized away while + they are still needed. + +Wed Jan 10 15:19:02 UTC 2007 Steve Huston + + * NEWS: Noted that Windows 95, 98, Me, etc. prior to NT4 SP2 are + no longer supported. The code for this is described at + Sat Jan 6 00:06:52 UTC 2007 Steve Huston + + * ACE-INSTALL.html: Corrected Pharlap references. + +Wed Jan 10 14:16:04 UTC 2007 Johnny Willemsen + + * docs/svn/config: + * docs/svn/svn-prefs.reg: + Added .vxe to global ignore list + +Wed Jan 10 11:40:04 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Don't run 1482 with VxWorks RTP + +Wed Jan 10 07:55:04 UTC 2007 Johnny Willemsen + + Reverted my change below. It worked in terms that it compiled on + all platforms but it resulted in a big footprint increase (about 1.5%) + for a full application and that is just too much. + + Tue Jan 9 11:21:30 UTC 2007 Johnny Willemsen + * ace/String_Base.cpp: + * ace/String_Base.h: + Moved the members of String_Base_Const to String_Base and + removed String_Base_Const + + * ace/String_Base_Const.cpp: + * ace/String_Base_Const.h: + Remove String_Base_Const. It was there as workaround for an old + sun compiler which we don't support anymore. Fixes bugzilla bug + 2588. + + * ace/ace.mpc: + * ace/ace_for_tao.mpc: + * ace/Makefile.am: + Removed String_Base_Const.{h,cpp} + +Wed Jan 10 02:01:04 UTC 2007 Chris Cleeland + + * bin/MakeProjectCreator/config: Added "default.features" to + svn:ignore property. + + * tests: Re-generated the svn:ignore property. + +Wed Jan 10 00:22:01 UTC 2007 Steve Huston + + * ace/POSIX_Proactor.cpp: Fixed some spelling and logging issues. + +Tue Jan 9 22:57:24 UTC 2007 Steve Huston + + * tests/SOCK_Send_Recv_Test.cpp: Added a check to make sure nonblocking + recv() works without blocking; this feature is relied on by later + tests, and is also the subject of a customer report. + Also, removed all the ACE_ASSERTS - tests should never do asserts. + It kills the program without any legit idea of what went on, and they + disappear in Release builds. + +Tue Jan 9 15:36:30 UTC 2007 Johnny Willemsen + + * ace/Log_Msg.cpp: + * ace/Thread_Manager.{h,cpp,inl}: + Removed ACE_USE_ONESHOT_AT_THREAD_EXIT checks, that define + is not set in any config file + +Tue Jan 9 14:17:50 UTC 2007 Chad Elliott + + * bin/msvc_static_order.lst: + + Added TAO/tao/TC to the end of the TAO library list. + +Tue Jan 9 12:47:30 UTC 2007 Johnny Willemsen + + * ace/Log_Record.cpp: + Const improvement and initialise pointer with 0 + + * ace/Process_Manager.h: + Doxygen improvements + + * ace/String_Base.cpp: + Added missing typename to get the npos compiling with all compilers + +Tue Jan 9 11:21:30 UTC 2007 Johnny Willemsen + + * ace/String_Base.cpp: + * ace/String_Base.h: + Moved the members of String_Base_Const to String_Base and + removed String_Base_Const + + * ace/String_Base_Const.cpp: + * ace/String_Base_Const.h: + Remove String_Base_Const. It was there as workaround for an old + sun compiler which we don't support anymore. Fixes bugzilla bug + 2588. + + * ace/ace.mpc: + * ace/ace_for_tao.mpc: + * ace/Makefile.am: + Removed String_Base_Const.{h,cpp} + +Tue Jan 9 09:11:44 UTC 2007 Krishnakumar B + + * docs/svn/config (enable-auto-props): + * docs/svn/svn-prefs.reg: + + Added .clo to the list of extensions that we want metadata to be + associated with. Fixed a bunch of unmatched quotes in + svn-prefs.reg, and updated the mime-type of pdf to be + application/pdf as opposed to application/postscript. + +Tue Jan 9 08:12:30 UTC 2007 Johnny Willemsen + + * ace/Log_Msg.cpp: + Initialise pointers with 0 + + * ace/config-hpux-11.00.h: + Fixed defines to work with wchar builds + +Tue Jan 9 03:46:14 UTC 2007 J.T. Conklin + + * configure.ac: + + Add ACE_LACKS_STRNLEN_PROTOTYPE feature test. + +Mon Jan 8 19:55:31 UTC 2007 Chad Elliott + + * ace/SString.cpp: + + When creating a substring, only allocate the ACE_SString in the + return statement to avoid needless memory allocation and possibly + leaking memory. + + * tests/SString_Test.cpp: + + Specialized memory cleanup for the particular usage pattern of + ACE_SString near the end of the test. + +Mon Jan 8 19:48:50 UTC 2007 Steve Huston + + * ace/config-lite.h (ACE_DECLARE_STL_REVERSE_ITERATOR): The + non-standard declaration is only needed on Windows when VC7.1 + and the 64-bit SDK are used. + +Mon Jan 8 18:54:55 UTC 2007 Chad Elliott + + * tests/Bug_1890_Regression_Test.cpp: + * tests/Bug_2540_Regression_Test.cpp: + + Reverted my previous changes where the ACE_Select_Reactor was + explicitly chosen. The bug reports specifically talk about the + select reactor, but they actually apply to others as well. + +Mon Jan 8 18:50:30 UTC 2007 Johnny Willemsen + + * ace/os_include/os_string.h: + Added ACE_LACKS_STRNLEN_PROTOTYPE to define strnlen prototype, + seems to lack with RedHat 6.2 Thanks to Nelson Filipe Ferreira Gonçalves + for delivering the + autoconf log + + * ace/config-linux-common.h: + Glibc 2.1 and lower don't have a strnlen prototype + +Mon Jan 8 18:43:36 UTC 2007 Chad Elliott + + * tests/Bug_2540_Regression_Test.cpp: + + This test had the same problem as Bug_1890_Regression_Test.cpp. + Explicitly use the ACE_Select_Reactor. + +Mon Jan 8 17:58:46 UTC 2007 Chad Elliott + + * tests/Bug_1890_Regression_Test.cpp: + + Bug 1890 is specifically targeted for the Select Reactor. So, + instead of relying on ACE_Reactor::instance() being an + ACE_Select_Reactor, explicitly use the ACE_Select_Reactor impl. + This will fix this test on Windows. + +Mon Jan 8 16:51:55 UTC 2007 Wallace Zhang + + * tests/Bug_2368_Regression_Test.cpp: + + Improved the test output to show the failure caused by the + unresolved bug is expected. + +Mon Jan 8 13:48:17 UTC 2007 Chad Elliott + + * examples/APG/Logging/Trace.h: + + Undefine TRACE before defining it to avoid warnings from vc71. + +Mon Jan 8 12:41:30 UTC 2007 Johnny Willemsen + + * ace/TP_Reactor.cpp: + Also use ACE_DISABLE_NOTIFY_PIPE_DEFAULT in the constructors + +Mon Jan 8 12:00:30 UTC 2007 Johnny Willemsen + + * ace/Select_Reactor_T.cpp: + Const improvement + + * ace/Select_Reactor_T.h : + Also use ACE_DISABLE_NOTIFY_PIPE_DEFAULT in the constructors + +Mon Jan 8 11:23:30 UTC 2007 Johnny Willemsen + + * ace/Select_Reactor_T.h (open): + Also use ACE_DISABLE_NOTIFY_PIPE_DEFAULT as default for disable_notify_pipe + + * ace/Select_Reactor_T.h: + Doxygen improvements + +Mon Jan 8 10:45:30 UTC 2007 Johnny Willemsen + + * ace/Select_Reactor_Base.h: + Doxygen improvements + + * ace/Select_Reactor_Base.h: + Changed the way we set the default for the + ACE_Select_Reactor_Notify::open call, instead of just hardcoding + the default 0, use the ACE_DISABLE_NOTIFY_PIPE_DEFAULT define + which is set by default to 0, but which we can set from a + config file to 1 to disable the notification pipe. + + * ace/config-posix-nonetworking.h: + Set ACE_DISABLE_NOTIFY_PIPE_DEFAULT to 1. The notification pipe + doesn't work when networking is fully disabled. + +Mon Jan 8 00:10:52 UTC 2007 Iliyan Jeliazkov + + * bin/tao_orb_tests.lst: + + Adding "!MINIMUM" for the TransportCurrent tests, since it + precludes the use of the TC functionality. + +Sun Jan 7 19:02:30 UTC 2007 Johnny Willemsen + + * ace/config-hpux-11.00.h: + Don't set ACE_SIZEOF_WCHAR, let Basic_Types just do this. Fixes + the difference between ACE_SIZEOF_WCHAR and sizeof(wchar_t) on + the HP aCC test on the IA64 aCC build which runs on the Sep 2006 + version of HPUX + +Sat Jan 6 04:41:30 UTC 2007 Chris Cleeland + + * include/makeinclude/macros.GNU: + * include/makeinclude/rules.common.GNU: + * include/makeinclude/rules.local.GNU: + + Added new phony target, "svnignore", which takes a good guess at + what files are generated in a directory and adds them to + svn:ignore property on the containing directory. + + * apps/gperf/src: + * apps/gperf/tests: + * bin: + * examples/APG/Active_Objects: + * examples/APG/Config: + * examples/APG/Containers: + * examples/APG/Logging: + * examples/APG/Misc_IPC: + * examples/APG/Naming: + * examples/APG/Proactor: + * examples/APG/Processes: + * examples/APG/Reactor: + * examples/APG/Shared_Memory: + * examples/APG/Signals: + * examples/APG/Sockets: + * examples/APG/Streams: + * examples/APG/Svc_Config: + * examples/APG/ThreadManagement: + * examples/APG/ThreadPools: + * examples/APG/ThreadSafety: + * examples/APG/Threads: + * examples/APG/Timers: + * examples/ASX: + * examples/ASX/CCM_App: + * examples/ASX/Message_Queue: + * examples/Bounded_Packet_Relay: + * examples/C++NPv1: + * examples/C++NPv2: + * examples/Connection/blocking: + * examples/Connection/misc: + * examples/Connection/non_blocking: + * examples/DLL: + * examples/Export: + * examples/IOStream/client: + * examples/IOStream/server: + * examples/IPC_SAP/ATM_SAP: + * examples/IPC_SAP/DEV_SAP/reader: + * examples/IPC_SAP/DEV_SAP/writer: + * examples/IPC_SAP/FIFO_SAP: + * examples/IPC_SAP/FILE_SAP: + * examples/IPC_SAP/SOCK_SAP: + * examples/IPC_SAP/SPIPE_SAP: + * examples/IPC_SAP/TLI_SAP: + * examples/IPC_SAP/UPIPE_SAP: + * examples/Log_Msg: + * examples/Logger/Acceptor-server: + * examples/Logger/client: + * examples/Logger/simple-server: + * examples/Mem_Map/IO-tests: + * examples/Mem_Map/file-reverse: + * examples/Misc: + * examples/Naming: + * examples/OS/Process: + * examples/Reactor/Dgram: + * examples/Reactor/FIFO: + * examples/Reactor/Misc: + * examples/Reactor/Multicast: + * examples/Reactor/Ntalker: + * examples/Reactor/Proactor: + * examples/Service_Configurator/IPC-tests/client: + * examples/Service_Configurator/IPC-tests/server: + * examples/Service_Configurator/Misc: + * examples/Shared_Malloc: + * examples/Shared_Memory: + * examples/Smart_Pointers: + * examples/Synch: + * examples/System_V_IPC/SV_Message_Queues: + * examples/System_V_IPC/SV_Semaphores: + * examples/Threads: + * examples/Timer_Queue: + * examples/Web_Crawler: + * protocols/examples/RMCast/Send_Msg: + * protocols/examples/TMCast/Member: + * protocols/tests/HTBP/Reactor_Tests: + * protocols/tests/HTBP/Send_Large_Msg: + * protocols/tests/HTBP/Send_Recv_Tests: + * protocols/tests/HTBP/ping: + * protocols/tests/RMCast: + * tests: + * tests/log: + + Added subversion svn:ignore properties on all these directories + comparable to the values previously in the vertigial .cvsignore + files, as well as updated them commensurate with the new svnignore + gnuace make target. + + * apps/gperf/src/.cvsignore: + * apps/gperf/tests/.cvsignore: + * examples/APG/Active_Objects/.cvsignore: + * examples/APG/Config/.cvsignore: + * examples/APG/Containers/.cvsignore: + * examples/APG/Logging/.cvsignore: + * examples/APG/Misc_IPC/.cvsignore: + * examples/APG/Naming/.cvsignore: + * examples/APG/Proactor/.cvsignore: + * examples/APG/Processes/.cvsignore: + * examples/APG/Reactor/.cvsignore: + * examples/APG/Shared_Memory/.cvsignore: + * examples/APG/Signals/.cvsignore: + * examples/APG/Sockets/.cvsignore: + * examples/APG/Streams/.cvsignore: + * examples/APG/Svc_Config/.cvsignore: + * examples/APG/ThreadManagement/.cvsignore: + * examples/APG/ThreadPools/.cvsignore: + * examples/APG/ThreadSafety/.cvsignore: + * examples/APG/Threads/.cvsignore: + * examples/APG/Timers/.cvsignore: + * examples/ASX/.cvsignore: + * examples/ASX/CCM_App/.cvsignore: + * examples/ASX/Message_Queue/.cvsignore: + * examples/Bounded_Packet_Relay/.cvsignore: + * examples/C++NPv1/.cvsignore: + * examples/C++NPv2/.cvsignore: + * examples/Connection/blocking/.cvsignore: + * examples/Connection/misc/.cvsignore: + * examples/Connection/non_blocking/.cvsignore: + * examples/DLL/.cvsignore: + * examples/Export/.cvsignore: + * examples/IOStream/client/.cvsignore: + * examples/IOStream/server/.cvsignore: + * examples/IPC_SAP/ATM_SAP/.cvsignore: + * examples/IPC_SAP/DEV_SAP/reader/.cvsignore: + * examples/IPC_SAP/DEV_SAP/writer/.cvsignore: + * examples/IPC_SAP/FIFO_SAP/.cvsignore: + * examples/IPC_SAP/FILE_SAP/.cvsignore: + * examples/IPC_SAP/SOCK_SAP/.cvsignore: + * examples/IPC_SAP/SPIPE_SAP/.cvsignore: + * examples/IPC_SAP/TLI_SAP/.cvsignore: + * examples/IPC_SAP/UPIPE_SAP/.cvsignore: + * examples/Log_Msg/.cvsignore: + * examples/Logger/Acceptor-server/.cvsignore: + * examples/Logger/client/.cvsignore: + * examples/Logger/simple-server/.cvsignore: + * examples/Mem_Map/IO-tests/.cvsignore: + * examples/Mem_Map/file-reverse/.cvsignore: + * examples/Misc/.cvsignore: + * examples/Naming/.cvsignore: + * examples/OS/Process/.cvsignore: + * examples/Reactor/Dgram/.cvsignore: + * examples/Reactor/FIFO/.cvsignore: + * examples/Reactor/Misc/.cvsignore: + * examples/Reactor/Multicast/.cvsignore: + * examples/Reactor/Ntalker/.cvsignore: + * examples/Reactor/Proactor/.cvsignore: + * examples/Service_Configurator/IPC-tests/client/.cvsignore: + * examples/Service_Configurator/IPC-tests/server/.cvsignore: + * examples/Service_Configurator/Misc/.cvsignore: + * examples/Shared_Malloc/.cvsignore: + * examples/Shared_Memory/.cvsignore: + * examples/Smart_Pointers/.cvsignore: + * examples/Synch/.cvsignore: + * examples/System_V_IPC/SV_Message_Queues/.cvsignore: + * examples/System_V_IPC/SV_Semaphores/.cvsignore: + * examples/Threads/.cvsignore: + * examples/Timer_Queue/.cvsignore: + * examples/Web_Crawler/.cvsignore: + * protocols/examples/TMCast/Member/.cvsignore: + * protocols/tests/HTBP/Reactor_Tests/.cvsignore: + * protocols/tests/HTBP/Send_Large_Msg/.cvsignore: + * protocols/tests/HTBP/Send_Recv_Tests/.cvsignore: + * protocols/tests/HTBP/ping/.cvsignore: + * tests/.cvsignore: + * tests/log/.cvsignore: + + Removed these files in favor of svn:ignore properties on the + parent directory. + +Sat Jan 6 00:06:52 UTC 2007 Steve Huston + + * ace/config-WinCE.h: Removed the ACE_HAS_WINNT4 stuff. + + * ace/config-pharlap.h: Removed the ACE_HAS_WINNT4 stuff and added + ACE_LACKS_WIN32_SECURITY_DESCRIPTORS and ACE_LACKS_WIN32_MOVEFILEEX. + Added ACE_HAS_IP_MULTICAST. + Thanks to David Hauck for helping with these changes. + + * ace/config-lite.h: Removed another vestige of MSVC 6 support. + + * ace/Default_Constants.h: + * ace/config-win32-common.h: Moved the Win32 ACE_DEFAULT_FILE_PERMS + settings to config-win32-common.h + Also removed all the pre-NT4 stuff from config-win32-common.h. + + * ace/Asynch_Acceptor.{h cpp}: + * ace/Asynch_IO.{h cpp}: + * ace/Asynch_IO_Impl.{h cpp}: + * ace/Message_Queue.{h cpp inl}: + * ace/Message_Queue_T.{h cpp}: + * ace/Proactor.{h cpp}: + * ace/Proactor_Impl.{h cpp}: + * ace/WIN32_Asynch_IO.{h cpp}: + * ace/WIN32_Proactor.{h cpp}: + ACE_Message_Queue_NT and ACE_Asynch_IO switched from using + ACE_HAS_WINNT4==1 and maybe some other platforms to using the new + ACE_HAS_WIN32_OVERLAPPED_IO setting. It's now incumbent on the + config maintainer to keep config-win32-*.h, config-WinCE.h, + config-pharlap.h, etc. up to date on these features as the + various versions do or don't support them. + + * ace/config-win32-mingw.h: Removed ACE_HAS_WINNT4 section. + + * ace/Configuration.cpp (ACE_Configuration_Win32Registry::remove_section): + Removed the pre-NT4 section that checked for non-empty section. + + * ace/Mem_Map.cpp: Removed all the support for ACE_USE_MAPPING_NAME + since it was used only for pre-NT4 Windows. + + * ace/Msg_WFMO_Reactor.cpp (wait_for_multiple_events): Removed the + pre-NT4 code block that switched to MsgWaitForMultipleObjectsEx. + All Win platforms without ACE_LACKS_MSG_WMFO can do this now. + + * ace/OS_NS_stdio.inl (rename): + * tests/OS_Test.cpp: The ability to rename a file to one that exists + without removing the 'to' file first is now detected by the new + feature macro ACE_LACKS_WIN32_MOVEFILEEX instead of ACE_HAS_WINNT4. + + * ace/OS_NS_unistd.cpp (pread, pwrite): The Windows code that can do + overlapped is now built based on ACE_HAS_WIN32_OVERLAPPED_IO instead + of ACE_HAS_WINNT4. + + * ace/Pagefile_Memory_Pool.cpp: Setting up a security descriptor for + the file mapping is now determined by the lack of + ACE_LACKS_WIN32_SECURITY_DESCRIPTORS, not ACE_HAS_WINNT4. + + * ace/README: Added descriptions for ACE_HAS_WIN32_OVERLAPPED_IO, + ACE_HAS_WIN32_NAMED_PIPES, ACE_LACKS_WIN32_SECURITY_DESCRIPTORS, + ACE_LACKS_WIN32_MOVEFILEEX. + + * ace/Sock_Connect.cpp: Removed all the code that rummaged through + the registry looking for net interfaces on Windows. Getting + interface info now requires WinCE, Pharlap, or Winsock2. This removes + support for Win95, Win98, etc. + + * ace/SPIPE_Acceptor.{cpp h} (ACE_SPIPE_Acceptor): Now useable on + Windows when ACE_HAS_WIN32_NAMED_PIPES is set, not ACE_HAS_WINNT4. + Similar to above with ACE_HAS_WIN32_OVERLAPPED_IO - config + maintainers need to manage this setting. + + * ace/OS_NS_Thread.cpp (sched_params): Fix mis-aligned #if block + for ACE_HAS_PHARLAP_RT. Also, for scope == ACE_SCOPE_PROCESS, return + -1, ENOTSUP for Pharlap; it doesn't have SetPriorityClass(). + + * ACE-INSTALL.html: Removed mention of ACE_HAS_WINNT4 and building + for Win95/98/Me - ACE now requires WinNT 4 or later. + Updated the information for building for Pharlap ETS. + + * tests/CDR_File_Test.cpp: + * tests/Svc_Handler_Test.cpp: Removed the check for NT4 or better when + setting TEST_CAN_UNLINK_IN_ADVANCE. VxWorks is the only case + remaining where this needs to be set. + + * tests/Malloc_Test.cpp: Removed the Win NT4 case checks for setting + ACE_TEST_REMAP_ON_FAULT; Win9x is no longer supported. Also, when + deciding address ranges for testing, decide at run time based on + GetVersionInfo() on Windows, not on preprocessor checks. + + * tests/Message_Queue_Test.cpp: Use ACE_HAS_WIN32_OVERLAPPED_IO to + decide whether or not to test ACE_Message_Queue_NT. + + * tests/Proactor_Scatter_Gather_Test.cpp: Decide whether or not to + run this test based on ACE_HAS_WIN32_OVERLAPPED_IO instead of + ACE_HAS_WINNT4. + + * ace/Proactor_Timer_Test.cpp: Run this test on Windows based on + ACE_HAS_WIN32_OVERLAPPED_IO instead of !ACE_HAS_WINCE. + + * tests/SPIPE_Test.cpp: + * tests/UPIPE_SAP_Test.cpp: Manage which features to test on Windows + based on ACE_HAS_WIN32_NAMED_PIPES instead of ACE_HAS_WINNT4. + + * ace/Dev_Poll_Reactor.cpp: Fixed spelling error in a comment. + +Fri Jan 5 21:46:16 UTC 2007 Wallace Zhang + + * ace/Process.cpp: + + Improved the implementation of ACE_Process_Options::setenv(...) + to address the potential buffer overflow when invoking + sprintf and/or vsprintf. This fixes bug 2660 and 2762. More + discussions have been accumulated in RT 9198. + +Fri Jan 5 19:06:17 UTC 2007 Chad Elliott + + * bin/msvc_static_order.lst: + + Added project names to correct the build order for + TAO/tests/Collocation and TAO/tests/TransportCurrent. + +Fri Jan 5 14:03:12 UTC 2007 Chad Elliott + + * apps/JAWS2/HTTPU/http_headers.h: + + For the sake of compiling on HP-UX, #undef SERVER if it's defined. + +Fri Jan 5 13:34:18 UTC 2007 Johnny Willemsen + + * ace/OS_NS_stdio.cpp: + * ace/config-hpux-11.00.h: + Disable ACE_HAS_VFWPRINTF again for HPUX, takes more time, + something for the future + +Fri Jan 5 13:15:16 UTC 2007 Phil Mesnier + + * ace/INET_Addr.cpp: + + Replaced #if ACE_HAS_IPV6 with #if defined () to avoid confusing + doxygen. + +Fri Jan 5 12:59:18 UTC 2007 Johnny Willemsen + + * tests/Manual_Event_Test.cpp: + Removed n_iterations variable, it is not used at all + +Fri Jan 5 12:44:18 UTC 2007 Johnny Willemsen + + * ace/OS_NS_stdio.cpp: + When ACE_HAS_WCHAR is defined include os_wchar.h to get the + wchar methods which is needed on for example HPUX + + * ace/config-linux-common.h: + * ace/config-vxworks6.2.h: + * ace/config-vxworks6.3.h: + * ace/config-vxworks6.4.h: + Added ACE_HAS_VFWPRINTF + + * ace/config-win32-common.h: + Removed ACE_HAS_VSWPRINTF, isn't used anymore + +Fri Jan 5 11:09:18 UTC 2007 Johnny Willemsen + + * ace/config-hpux-11.00.h: + Moved ACE_SIZEOF_LONG outside the aCC specific block, this is + also needed with GCC + +Fri Jan 5 10:40:18 UTC 2007 Johnny Willemsen + + * tests/Thread_Creation_Threshold_Test.cpp: + Removed not needed semicolon after namespace closure + +Fri Jan 5 10:30:18 UTC 2007 Johnny Willemsen + + * contrib/minizip/unzip.c: + * contrib/minizip/zip.c: + Fixed unitialized warnings + +Fri Jan 5 10:04:18 UTC 2007 Johnny Willemsen + + * ace/config-g++-common.h: + A change related to my commit of: + Thu Jan 4 08:55:12 UTC 2007 Johnny Willemsen + With FC6 a bug in GCC has been fixed. This is then fixed in + GCC 4.1.1 but only in the RedHat codebase, not in other + GCC 4.x compilers. The HP GCC 4.1.1 compiler hasn't this + fix but also the SuSE 10.2 GCC 4.1.2 compiler has not this + fix. We assume at this moment that GCC 4.2 will have this + fix. If you have FC6 you must add the following define to + your config.h file: + ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS 1 + +Fri Jan 5 07:05:18 UTC 2007 J.T. Conklin + + * bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm: + + Remove "-Ge 1" from initial TAO_IDLFLAGS definition. + +Fri Jan 5 03:34:00 UTC 2007 Phil Mesnier + + * ace/INET_Addr.cpp: + + Refactored the addr_to_string() method to format numeric IPv6 + addresses using [addr]:port to disambiguate addresses such as + [fe80::1:2:3]:12345. This should be benign as string_to_addr() + already parses [ipv6addr]:port formatted strings. + +Fri Jan 5 00:51:22 UTC 2007 Phil Mesnier + + * ace/INET_Addr.h: + * ace/INET_Addr.inl: + + Added a new method, is_multicast(), to assist applications in + determining if the inet address is or is not a multicast address + regardless of it being an IPv4 or IPv6 format. + + * ace/Timer_Queue_Adapters.cpp: + + Fixed a bug in + ACE_Async_Timer_Queue_Adapter::schedule_ualarm() wherein the + time value for the alarm was computed using + ACE_OS::gettimeofday() rather than using the timer queue's + gettimeofday implementation. Thus situations where an alternate + time source were used, the scheduled alarm would be wrong. + +Thu Jan 4 15:51:41 UTC 2007 Chris Cleeland + + * tests/Thread_Creation_Threshold_Test.cpp: Changed name of + anonymous namespace constant from DEBUG to PRINT_DEBUG_MSGS to + avoid potential conflicts with #defines. This should clean up + at least one Windows build, and possibly others as well. + +Thu Jan 4 15:33:08 UTC 2007 J.T. Conklin + + * configure.ac: + + Check instead of for gettimeofday() + prototype. Also use AC_CHECK_DECL instead of AC_EGREP_CPP. + This fixes bugzilla bug 2764. + +Thu Jan 4 13:53:33 UTC 2007 J.T. Conklin + + * ACEXML/tests/Makefile.am: + * ACEXML/tests/util/Makefile.am: + * ACEXML/apps/svcconf/Makefile.am: + * ACEXML/common/Makefile.am: + * ACEXML/examples/SAXPrint/Makefile.am: + + Tweak to use ACE_{ZLIB,ZZIP}_{CPPFLAGS,LDFLAGS,LIBS} + instead of -I${ZLIB_ROOT}/include, etc. The former + are substituted by the configure script. + + * m4/ace.m4: + + Add ACE_PATH_ZLIB and ACE_PATH_ZZIP autoconf macros. + zlib and zzip can now be enabled at configure time + with --with-zlib and --with-zzip. + +Thu Jan 4 12:45:46 UTC 2007 Chad Elliott + + * ace/Basic_Stats.cpp: + * ace/Parse_Node.cpp: + * ace/Sample_History.cpp: + * ace/Service_Repository.cpp: + + Remove build warnings when ACE_NLOGGING is defined. + +Thu Jan 4 08:55:12 UTC 2007 Johnny Willemsen + + * ace/config-g++-common.h: + With gcc 4.{0,1} we couldn't use visibility attributes for singletons + because of a bug in GCC. This has been fixed in GCC 4.1.1 that + gets shipped with FC6. This change enables the visibily + attributes again for GCC 4.1.1 or newer. + + * ace/Obstack.h: + Reverted the change below, it is an incorrect change + Wed Nov 22 09:07:12 2006 Johnny Willemsen + Use ACE_EXPORT_SINGLETON_DECLARATION to resolve link errors + on FC6. Thanks to Ken Sedgwick for + reporting this and testing out the patch. + +Wed Jan 3 22:31:05 UTC 2007 Chris Cleeland + + This entry merges in changes from OCITAO 1.4a which were + originally part of RT 8678. + + * ace/README: + * ace/config-sunos5.9.h: + + Added new compiler macro, ACE_LACKS_THR_CONCURRENCY_FUNCS, to + accomodate the deprecation of thr_concurrency() in Solaris 9 + onwards. The functions still exist, but the call semantics have + changed slightly such that values for which they would + previously succeed now fail despite the fact that they are + effectively no-ops in Solaris >= 9. This would cause + thr_create(THR_NEW_LWP) to fail in a process when invoked for + the 65536th (or greater) time. + + Currently this macro is only defined on Solaris 9+, but, since I + believ this function was only ever present on Solaris anyway, it + could probably be defined in general, and simply #undef'd on + Solaris 8 and prior. + + * ace/OS_NS_Thread.cpp (thr_create): + + Conditionally removed THR_NEW_LWP section when + ACE_LACKS_THR_CONCURRENCY_FUNCS is defined. + + * tests/Thread_Creation_Threshold_Test.cpp: + * tests/run_test.lst: + * tests/tests.mpc: + + Added a new test to check the threshold of thread creation. + This simply verifies that more than 2^15 threads can be created + sequentially (not simultaneously). + +Wed Jan 3 22:10:54 UTC 2007 Chris Cleeland + + * ace/CDR_Stream.inl (adjust): + + Reverted one-line change committed in r76279 and as part of + entry from "Wed Jan 3 05:53:04 UTC 2007 Chris Cleeland + ". After getting some questions from + Johnny and posing them to the originators of the change, the + originators indicated that, over time, the problem may have been + application-related as they could never isolate a test case that + provoked it. + +Wed Jan 3 19:52:05 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Run the compression test when ZLIB is part of the config list + +Wed Jan 3 19:34:47 UTC 2007 Chad Elliott + + * bin/tao_orb_tests.lst: + + TAO/tests/Any/Recursive also does not work when the build is + static. It uses ACE_Dynamic_Service to locate the + TAO_TypeCodeFactory_Adapter which fails. + +Wed Jan 3 18:35:02 UTC 2007 Chad Elliott + + * bin/tao_orb_tests.lst: + + Do not run TAO/tests/Any/Recursive if minimum_corba, + corba_e_compact or corba_e_micro are enabled. Not all portions of + the test build with any one of these enabled. + +Wed Jan 3 15:50:39 UTC 2007 Chad Elliott + + * ACEXML/apps/svcconf/svcconf.mpc: + * ACEXML/common/common.mpc: + * ACEXML/parser/parser/parser.mpc: + * Kokyu/Kokyu.mpc: + * ace/QoS/qos.mpc: + * ace/SSL/ssl.mpc: + * ace/SSL/ssl_for_tao.mpc: + * ace/ace.mpc: + * ace/ace_flreactor.mpc: + * ace/ace_for_tao.mpc: + * ace/ace_qtreactor.mpc: + * ace/ace_tkreactor.mpc: + * ace/ace_xtreactor.mpc: + * apps/gperf/src/gperf.mpc: + * protocols/ace/HTBP/HTBP.mpc: + * protocols/ace/RMCast/RMCast.mpc: + * protocols/ace/TMCast/TMCast.mpc: + + Use the install base project instead of the deprecated core base + project. + +Wed Jan 3 15:25:05 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added new PI test + +Wed Jan 3 14:57:49 UTC 2007 Chad Elliott + + * bin/MakeProjectCreator/config/ipv6.mpb: + + The cbx project type was replaced by the bds4 project type. + +Wed Jan 03 14:20:00 UTC 2007 Simon Massey + + * ace/CORBA_macros.h: + With MFC, must delete any caught and eaten "out of memory" exceptions. + +Wed Jan 3 13:25:06 UTC 2007 Chad Elliott + + * bin/msvc_static_order.lst: + + Build the TAO/tests/Smart_Proxies/Collocation/SP_Collocation_Idl + project before SP_Collocation_TestStubsLib. + +Wed Jan 3 13:16:16 UTC 2007 Chad Elliott + + * bin/tao_other_tests.lst: + + Added !NO_MCAST to those tests that use multicast. + + * tests/Unload_libACE.cpp: + * tests/tests.mpc: + * tests/unload_libace.mpb: + + Added support for running this test when ace_for_tao is enabled. + +Wed Jan 3 12:33:33 UTC 2007 Chad Elliott + + * include/makeinclude/wrapper_macros.GNU: + + Since the zzip base project now 'requires' zlib, we can default + zlib to 1. This will cause no harm to those that do not have zlib + since zlib is a "feature" project and will not be included in any + project unless it is explicitly enabled. + +Wed Jan 3 09:36:13 UTC 2007 Olli Savia + + * include/makeinclude/wrapper_macros.GNU: + * ace/OS_NS_stdio.inl: + * tests/OS_Test.cpp: + + Added the ability to use trio (http://sourceforge.net/projects/ctrio/) + if platform lacks decent support for vsnprintf. trio support is + enabled by defining trio=1 in plaform_macros.GNU + +Wed Jan 3 07:52:05 UTC 2006 Johnny Willemsen + + Reverted my change below, it breaks the singleton on windows, the EXPORT + should not be there, seems we need a different way to resolve this + problem with FC6. + + Tue Jan 2 14:27:05 UTC 2006 Johnny Willemsen + * ace/Based_Pointer_Repository.h: + Use ACE_EXPORT_SINGLETON_DECLARATION to resolve link errors + on FC6. Thanks to Olli Savia for + reporting this and testing out the patch. + +Wed Jan 3 07:47:05 UTC 2006 Johnny Willemsen + + * ASNMP/tests/test_config.h: + Only define ACE_START_TEST and ACE_END_TEST when they are not + defined yet. Removed some old code at the same time + +Wed Jan 3 06:47:58 UTC 2007 J.T. Conklin + + * configure.ac: + + Added feature test for ACE_LACKS_REALPATH. Fixes bugzilla bug + 2613. + +Wed Jan 3 06:09:39 UTC 2007 J.T. Conklin + + * configure.ac: + + Added feature test for ACE_HAS_SIGVAL_SIGVAL_INT and, for + completeness, ACE_HAS_SIGVAL_SIGVAL_PTR. Fixes bugzilla bug + 2716. + +Wed Jan 3 05:53:04 UTC 2007 Chris Cleeland + + This entry documents the merge of several small bug fixes from + the OCI distribution. + + * ace/QtReactor/QtReactor.cpp: + + Merged in a change from OCITAO 1.4a that fixed a bug in + ACE_QtReactor::QtWaitForMultipleEvents() where + the two select() calls in that function might select on different + handler sets. The problem is the dispatch_set/wait_set can be + changed during the two select() calls. This could happen while + waiting for an event, another event is handled and dispatched + which changes the dispatch_set/wait_set. + + This bug was found on a single thread Qt application [RT 8751]. + + * ace/CDR_Stream.inl (adjust): + + Applied a one-line change from Dan Troesser , originally committed to OCITAO 1.4a. VC8 + detected that memory around a buffer was being modified. + Changed a boundary check from <= check to < that some believed + was causing a write past the end of the buffer. After the + change, there were no compilation problems with VC8 and all the + ACE CDR-related tests passed. + + * bin/tao_orb_tests.lst: + + Add in Bug_2702_Regression test. + + * bin/auto_run_tests.pl: + + Change the search logic for listed tests so that the script + "finds" tests even when the layout isn't using the "traditional" + layout where $TAO_ROOT == $ACE_ROOT/TAO. + + * NEWS: Updated to reflect these changes. + +Wed Jan 3 05:26:07 UTC 2007 J.T. Conklin + + * configure.ac: + + Added feature test for ACE_LACKS_SIGVAL_T. Fixes bugzilla bug + 2761. + +Tue Jan 2 16:02:25 UTC 2007 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Use the MakeWorkspaceBase module to reduce the amount of + duplicated code. + +Tue Jan 2 14:27:05 UTC 2006 Johnny Willemsen + + * ace/Based_Pointer_Repository.h: + Use ACE_EXPORT_SINGLETON_DECLARATION to resolve link errors + on FC6. Thanks to Olli Savia for + reporting this and testing out the patch. + +Tue Jan 2 12:38:05 UTC 2006 Johnny Willemsen + + * ace/config-rtems.h: + Added ACE_LACKS_THREAD_PROCESS_SCOPING, rtems only supports + PTHREAD_SCOPE_PROCESS, setting another value will result in a + notsup error + + * ace/OS_NS_Thread.cpp: + Removed some old FSU thread code + +Tue Jan 2 11:38:05 UTC 2006 Johnny Willemsen + + * ace/config-rtems.h: + Removed ACE_LACKS_MKFIFO, rtems has this API + + * ace/config-win32-borland.h: + * ace/OS_NS_stdio.inl: + Removed support for the Borland C++ preview compiler that shipped + with CBuilderX + + * ace/os_include/os_signal.h: + Removed Borland C++ preview support and fixed ACE_NSIG define + for rtems + +Tue Jan 2 11:18:05 UTC 2006 Johnny Willemsen + + * ace/config-macosx-panther.h: + * ace/config-macosx-tiger.h: + Added ACE_LACKS_SIGVAL_T + +Tue Jan 2 11:15:05 UTC 2006 Johnny Willemsen + + * config-rtems.h: + Removed ACE_LACKS_PUTENV, rtems has this method, fixes the + Env_Value_Test failure + +Tue Jan 2 11:06:05 UTC 2006 Johnny Willemsen + + * ace/ARGV.cpp: + Fixed constructor that combines two argv arrays to handle + an empty array as we can have with embedded platforms like + VxWorks and RTEMS + +Tue Jan 2 10:49:05 UTC 2006 Johnny Willemsen + + * tests/run_test.lst: + Added missing ARGV_Test + +Tue Jan 2 10:23:05 UTC 2006 Johnny Willemsen + + * ace/config-rtems.h: + RTEMS does have aio support but there are several errors in the + rtems header files and it looks also that the behaviour is not + correct, reported this to the rtems maintainers and for the + rtems 4.6 version we disable the AIO support in ACE + +Tue Jan 2 09:44:05 UTC 2006 Johnny Willemsen + + * tests/ARGV_Test.cpp: + Fixed compile errors in unicode build + +Mon Jan 1 21:56:50 UTC 2007 James H. Hill + + * docs/ace_guidelines.vsmacros: + + Fixed bug that was causing the previous find and replace + values to be used when the current document is being saved. + +Mon Jan 1 18:51:05 UTC 2006 Johnny Willemsen + + * ace/os_include/os_errno.h: + Defined ECANCELED when it has not been defined yet, fixes problems + with rtems + +Mon Jan 1 18:39:05 UTC 2006 Johnny Willemsen + + * ace/POSIX_CB_Proactor.h: + Introduced new ACE_LACKS_SIGVAL_T, when this is defined then ACE + does a typedef for sigval_t + + * ace/config-aix-5.x.h: + * ace/config-macosx.h: + * ace/config-rtems.h: + * ace/config-sunos5.4-g++.h: + * ace/config-sunos5.4-sunc++-4.x.h: + * ace/config-sunos5.5.h: + * ace/config-vxworks5.x.h: + * ace/config-vxworks6.2.h: + * ace/config-vxworks6.3.h: + * ace/config-vxworks6.4.h: + Added ACE_LACKS_SIGVAL_T + + * ace/POSIX_Asynch_IO.h: + Doxygen improvement + +Sun Dec 31 22:33:14 UTC 2006 J.T. Conklin + + * tests/SV_Shared_Memory_Test.cpp: + + Check and exit if allocator was not successfully initialized + (other processes could be using all the kernel's SysV shared + memory pages). Otherwise the test's child process will be stuck + in a spinloop while filling up the filesystem with log messages. + +Sun Dec 31 18:56:05 UTC 2006 Johnny Willemsen + + * docs/svn/config: + * docs/svn/svn-prefs.reg: + Added some more file extensions + + * bin/generate_doxygen.pl: + * etc/tao_compression.doxygen: + * etc/tao_transportcurrent.doxygen: + * html/index.html: + Added doxygen generations for transport current and compression + +Sun Dec 31 16:11:05 UTC 2006 J.T. Conklin + + * ACEXML/common/Makefile.am: + + Fix stray trailing \ introduced in: + Sat Dec 30 06:20:18 UTC 2006 J.T. Conklin + +Sat Dec 30 06:23:13 UTC 2006 J.T. Conklin + + * */Makefile.am: + + Baseline regeneration to match recent MPC, *.mpc, and *.mpb + changes. + +Sat Dec 30 06:20:18 UTC 2006 J.T. Conklin + + * ACEXML/tests/Makefile.am: + * ACEXML/tests/util/Makefile.am: + * ACEXML/apps/svcconf/Makefile.am: + * ACEXML/common/Makefile.am: + * ACEXML/examples/SAXPrint/Makefile.am: + + Hand-add automake conditionals for BUILD_ZZIP and BUILD_ZLIB. + Unfortunately MPC resolves options, files, etc. set by + "features" at project generation time, but we want them to be + configure time options. + +Sat Dec 30 06:16:53 UTC 2006 J.T. Conklin + + * configure.ac: + + Configure Makefiles for new subdirectory. + + * apps/JAWS2/Makefile.am: + + Regenerate to descend into HTTPU subdirectory. + + * apps/JAWS2/HTTPU/Makefile.am: + + New Makefile.am. + +Sat Dec 30 06:12:59 UTC 2006 J.T. Conklin + + * m4/ace.m4: + + Add placeholder automake conditionals for BUILD_ZLIB and + BUILD_ZZIP. + + * bin/MakeProjectCreator/acexml.mpb: + + Derive from both zlib and zzip. + +Fri Dec 29 16:57:10 UTC 2006 Steve Huston + + * ace/SOCK_Dgram.cpp (recv): Corrected a "can't delete void*" warning + that entered with + Thu Dec 28 22:47:05 UTC 2006 Steve Huston + +Fri Dec 29 08:41:35 UTC 2006 Olli Savia + + * tests/Proactor_Timer_Test.cpp: + Fixed compile error on LynxOS with 2.95.3. + +Fri Dec 29 08:31:21 UTC 2006 Johnny Willemsen + + * ace/os_include/os_signal.h: + Did some cleanup in this file, removed old stuff + +Fri Dec 29 07:33:58 UTC 2006 J.T. Conklin + + * bin/MakeProjectCreator/config/automake.features: + + Set java, zlib, and zzip. We'll use automake conditionals to + defer these options to configure time. + +Thu Dec 28 22:47:05 UTC 2006 Steve Huston + + * ace/SOCK_IO.{h, inl}: Changed the + recvv(iovec[], size_t, const ACE_Time_Value* = 0) and + sendv (const iovec[], size_t, const ACE_Time_Value*=0) methods + to specify the iovec count argument as int instead of size_t + since it gets reduced to int in the underlying OS calls (usually). + Removed the following deprecated methods: + + ssize_t recv (iovec iov[], + size_t n, + const ACE_Time_Value *timeout = 0) const; + + ssize_t recv (iovec *io_vec, + const ACE_Time_Value *timeout = 0) const; + + ssize_t send (const iovec iov[], + size_t n, + const ACE_Time_Value *timeout = 0) const; + + These were previously replaced with more specific ...v() methods. + + * ace/SOCK_Dgram.cpp (recv): Resolved ssize_t to u_long truncation + warning. + + * ace/Service_Repository.{h cpp} (find, find_i): Changed the + ignore_suspended argument from int to bool to reflect it's true/false + nature. + Changed find_i() to return the located name's index in a size_t + argument when located - this allows it to pass indices as big as the + table can hold. The return value -1, -2 is not changed, but >= 0 + is no longer returned; it's == 0 for success, and the caller needs + to get the index from the 'slot' argument. This should cause no + issues since find_i() is private and internal use has been adjusted + to match; callers of find() have no use for an index value for a + table internal to ACE_Service_Repository. + + * ace/Service_Gestalt.cpp (~ACE_Service_Type_Dynamic_Guard): Use of + ACE_Service_Repository::find_i() adjusted per above. + + * ace/Msg_WFMO_Reactor.cpp: Resolve truncation warning for 64-bit. + + * NEWS: Updated with API changes noted above. + +Thu Dec 28 20:56:28 UTC 2006 Iliyan Jeliazkov + + * bin/tao_orb_tests.lst: + + Updated to enable TAO/tests/TransportCurrent/Framework for + static builds. + +Thu Dec 28 19:11:21 UTC 2006 Johnny Willemsen + + Reverted my change below this broke a lot of builds, seems + the settings in MPC are not used for ACE/TAO/CIAO so we need + to have them also in ACE duplicated + + Thu Dec 28 12:57:21 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/global.features: + Removed the settings that are already set in the MPC + global.features file, no need to duplicate that info. + +Thu Dec 28 15:35:11 UTC 2006 J.T. Conklin + + * configure.ac: + + Add ACE_HAS_3_PARAM_READDIR_R feature test. + +Thu Dec 28 14:54:00 UTC 2006 Pavel Zaichenko + + * ace/OS_NS_unistd.cpp, + * ace/ARGV.cpp, + * ace/ARGV.h: Completed the integration of the quote_args feature + throughout the code. + +Thu Dec 28 14:49:50 UTC 2006 Douglas C. Schmidt + + * ace/ARGV.inl (argc): This method now first calls argv() before + returning the argc count. + +Thu Dec 28 12:57:21 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/global.features: + Removed the settings that are already set in the MPC + global.features file, no need to duplicate that info. + +Thu Dec 28 12:37:21 UTC 2006 Johnny Willemsen + + * ace/DLL_Manager.cpp (get_handle): + Simplified this method a little + + * ace/Dynamic_Service_Base.cpp: + Layout change + + * ace/os_include/net/os_if.h: + Include ws2tcpip.h on windows as we do in the other files, this + way we don't get redefinitions on windows + + * ace/Service_Gestalt.cpp (process_directive): + No need to use an intermediate variable + + * tests/ARGV_Test.cpp: + Fixed deprecated conversion warnings + + * tests/Time_Value_Test.cpp: + Added another test + +Thu Dec 28 11:13:21 UTC 2006 Johnny Willemsen + + * ace/config-aix-5.x.h: + Define ACE_HAS_3_PARAM_READDIR_R always independent of the compiler + used. + +Wed Dec 27 21:15:50 UTC 2006 Douglas C. Schmidt + + * ace/ARGV.{h,cpp} Generalized the constructor for ACE_ARGV_T so + that it can optionally be directed to quote args or not, which + is consistent with the ACE_ARGV_T::add() method + described below. + + * ace/OS_NS_unistd.{h,cpp}: ACE_OS::argv_to_string() was updated + to implement the feature described above. + +Wed Dec 27 21:19:57 UTC 2006 Pavel Zaichenko + + * ace/OS_NS_stdlib.cpp: ACE_OS::strenvdup() now correctly expands + environment variables are correctly expanded in strings of form + "$ACE_ROOT/subdir", "/some/dir/$ARCH/subdir" as well as + "$ACE_ROOT". + + * ace/OS_NS_unistd.cpp: ACE_OS::argv_to_string() and + ACE_OS::string_to_argv() now converts arguments list argv[] to + string and vice versa. Double quotes (") are correctly + quoted/unquoted during conversion. + + * ace/ARGV.{h,inl,cpp}: Made the following enhancements: + + ACE_ARGV_T::add(const CHAR_TYPE *next_arg, bool quote_arg = false) + Now takes an additional argument + * @param quote_arg The argument @a next_arg need to be quoted while + * adding to the vector. + which is queued in the queue_ as well as next_arg for farther usage. + + ACE_ARGV_T::add(CHAR_TYPE *argv[]) + Each entry argv[i] of the argument list is interpreted as a single argument + (white spaces are preserved). + + ACE_ARGV_T::create_buf_from_queue() + Creates a command line using arguments (next_arg, quote_arg) queued + with add() method. Quotes double quote symbols (") if needed. + +Wed Dec 27 21:14:34 UTC 2006 Douglas C. Schmidt + + * ace/ARGV.{h,cpp}: Removed the + + int argv_to_string (CHAR_TYPE **argv, CHAR_TYPE *&buf); + + method since it's redundant with what's in ACE_OS::argv_to_string(). + +Wed Dec 27 20:27:29 UTC 2006 Douglas C. Schmidt + + * ace/OS_NS_stdlib.{h,inl,cpp}: There's no need for the + strenvdup() method to be defined as + ACE_NAMESPACE_INLINE_FUNCTION. + +Wed Dec 27 15:12:12 UTC 2006 Douglas C. Schmidt + + * ace/Map_Manager.{h,inl}: Added a default constructor for + ACE_Map_Entry to initialize the data members. Thanks to Dieter + Knueppel for this fix. + +Wed Dec 27 16:14:12 UTC 2006 Johnny Willemsen + + * ace/os_include/netinet/os_in.h: + Define IPPROTO_TCP when not defined yet + + * ace/os_include/netinet/os_tcp.h: + Define TCP_NODELAY when not defined yet + +Wed Dec 27 16:10:12 UTC 2006 Johnny Willemsen + + * ace/os_include/net/os_if.h: + Only define the IFF_x defines when ACE_LACKS_NETWORKING is + defined to resolve redefinition warnings on windows + +Wed Dec 27 14:06:12 UTC 2006 Johnny Willemsen + + * ace/config-posix-nonetworking.h: + Added ACE_LACKS_GETHOSTENT + +Wed Dec 27 12:42:12 UTC 2006 Johnny Willemsen + + * ace/Atomic_Op_T.h: + Doxygen improvements + +Wed Dec 27 11:22:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_socket.h: + Define SO_ERROR when it is not defined yet + +Wed Dec 27 10:34:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_socket.h: + Added ACE_LACKS_LINGER support + + * ace/config-posix-nonetworking.h: + Added ACE_LACKS_LINGER + +Wed Dec 27 10:30:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_socket.h: + Define SOCK_SEQPACKET when it is not defined yet + +Wed Dec 27 10:27:12 UTC 2006 Johnny Willemsen + + * ace/config-posix-nonetworking.h: + Added ACE_LACKS_IFCONF + + * ace/os_include/net/os_if.h: + Added some more types that need to be defined by ACE when + we compile without network support + + * ace/SOCK_Dgram.cpp: + Removed check for ACE_LACKS_IFREQ + + * ace/SOCK_Dgram_Bcast.cpp: + Layout changes + +Wed Dec 27 10:15:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_socket.h: + Define SO_BROADCAST when it is not defined yet + +Wed Dec 27 10:11:12 UTC 2006 Johnny Willemsen + + * ace/os_include/netinet/os_in.h: + Add sockaddr_un when ACE_LACKS_SOCKADDR_UN is defined + + * ace/config-posix-nonetworking.h: + Added ACE_LACKS_SOCKADDR_UN + +Wed Dec 27 10:05:12 UTC 2006 Johnny Willemsen + + * ace/Name_Request_Reply.cpp: + Use ACE_NTOHS so that this file compiles without network support + +Wed Dec 27 09:35:12 UTC 2006 Johnny Willemsen + + * tests/ARGV_Test.cpp: + Fixed deprecated conversion warnings + +Wed Dec 27 09:32:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_dirent.cpp: + Removed workaround for vc6 + + * ace/OS_NS_dirent.inl: + Layout change + +Wed Dec 27 09:27:06 UTC 2006 Olli Savia + + * tests/Log_Msg_Test.cpp: + Updated comment. + +Wed Dec 27 09:24:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_dirent.inl (readdir_r): + Simplified the OS checks in this method, use the new + define ACE_HAS_3_PARAM_READDIR_R. This is then set in the + config files below, maybe it has to be set in more, but the + scoreboard will show that. + + * ace/config-aix-5.x.h: + * ace/config-cygwin32.h: + * ace/config-freebsd.h: + * ace/config-hpux-11.00.h: + * ace/config-linux-common.h: + * ace/config-netbsd.h: + * ace/config-rtems.h: + * ace/config-sunos5.5.h: + * ace/config-vxworks6.4.h: + Added ACE_HAS_3_PARAM_READDIR_R + + * ace/config-linux-common.h: + Added new ACE_LACKS_LINUX_VERSION_H around include of linux/version.h. + This file isn't present with BlueCAT 4 Linux from LynuxWorks. + + * ace/config-posix.h: + Layout changes + + * ACE-INSTALL.html: + Updated supported platforms by Remedy IT + + * ace/INET_Addr.cpp: + Use the ACE_NTOHL macro and remove the check for ACE_LACKS_NTOHL + + * ace/Map_Manager.{h,cpp}: + Changed free_ to a real bool + + * ace/Name_Proxy.cpp: + * ace/Name_Request_Reply.cpp: + * ace/Time_Request_Reply.cpp + Use the ACE_NTOHL macro so that this file compiles without networking + support + +Wed Dec 27 09:10:27 UTC 2006 Olli Savia + + * ace/Process.cpp: + Changed to use ACE_LACKS_VSNPRINTF instead of ACE_HAS_SNPRINTF. + +Tue Dec 26 22:47:57 UTC 2006 Douglas C. Schmidt + + * ace/OS_NS_unistd.cpp: Reverted the changes to ACE_OS::argv_to_string() + from here: + + Sun Dec 24 22:29:24 UTC 2006 Douglas C. Schmidt + + so that Signal_Test.cpp tests don't break. In a nutshell, each + argv[i] argument to ACE_ARGV is not supposed to be quoted. + Thanks to Steve Huston for reporting this. + +Tue Dec 26 22:46:34 UTC 2006 Douglas C. Schmidt + + * tests/ARGV_Test.cpp (run_main): Updated the test to test how the + conversion from char *argv[] to a char * works. + +Mon Dec 25 16:19:42 UTC 2006 Douglas C. Schmidt + + * Merry Christmas everyone!!! + +Sun Dec 24 23:13:37 UTC 2006 Douglas C. Schmidt + + * tests/ARGV_Test.cpp: Updated the test to ensure that Pavel's + patches work properly. + +Sun Dec 24 22:29:24 UTC 2006 Douglas C. Schmidt + + * ace/OS_NS_stdlib.inl, + * ace/OS_NS_unistd.cpp: Modified ACE_OS::strenvdup() and + ACE_OS::argv_to_string() so they split the arguments containing + spaces in accordance with the documentation. Thanks to Pavel + Zaichenko for these patches. + +Fri Dec 22 17:35:53 UTC 2006 J.T. Conklin + + * ace/OS_NS_dirent.inl: + + Add a __NetBSD__ to the preprocessor conditional to select the + three argument version of readdir_r. While this what was done + for FreeBSD, HPUX, etc., it really points out a need for a new + feature test macro. + + * ace/config-netbsd.h: + + Only define thread-related feature test macros if ACE_MT_SAFE is + defined (with a non-zero value). + +Fri Dec 22 13:56:15 UTC 2006 Steve Huston + + * apps/JAWS2/HTTPU/http_heders.cpp: + * apps/JAWS2/HTTPU/http_status.cpp: Specify type and class separately + for each static member instance to allow HP aC++ 03.* (PA-RISC + compiler) to grok it. At least the Itanium compilers could handle + this... there's hope. + +Fri Dec 22 12:52:05 UTC 2006 Olli Savia + + * include/makeinclude/platform_lynxos.GNU: + Build shared libs by default. + +Fri Dec 22 09:31:12 UTC 2006 Johnny Willemsen + + * ace/Service_Manager.h: + Improved doxygen documentation, thanks to Stefan Naewe + for delivering the patch + +Thu Dec 21 21:54:51 UTC 2006 Douglas C. Schmidt + + * ace/config-freebsd.h: Added support for SCTP in FreeBSD version + 700028 and greater. Thanks to Craig Rodrigues for reporting this. + +Thu Dec 21 20:19:04 UTC 2006 Johnny Willemsen + + * ace/Sock_Connect.cpp: + Use prefix increment and made get_interfaces working with rtems + +Thu Dec 21 16:12:16 UTC 2006 Iliyan Jeliazkov + + * bin/tao_orb_tests.lst: + + Fixing the condition for running the Transport::Current tests + (note that ST = Single Threaded, not STATIC). + +Thu Dec 21 14:31:04 UTC 2006 Johnny Willemsen + + * ace/Sock_Connect.cpp: + Added support for get_interfaces for rtems + +Thu Dec 21 13:32:08 UTC 2006 Olli Savia + + * include/makeinclude/platform_lynxos.GNU: + Moved macro definitions from CFLAGS to CPPFLAGS. + +Thu Dec 21 12:12:04 UTC 2006 Johnny Willemsen + + * include/makeinclude/rules.bin.GNU: + Removed old chorus rules + +Thu Dec 21 10:17:04 UTC 2006 Johnny Willemsen + + * ace/UUID.cpp: + Fixed initialisation warning + +Thu Dec 21 09:45:00 UTC 2006 Simon Massey + + * ace/OS_TLI.inl: + * ace/OS_NS_signal.h: + + Updated some HPUX Acc version bug fixes..... + +Thu Dec 21 08:47:04 UTC 2006 Johnny Willemsen + + * apps/JAWS2/HPPTU/http_headers.{h,inl}: + Fixed const warnings with Intel C++ + +Wed Dec 20 22:06:14 UTC 2006 Olli Savia + + * tests/OS_Test.cpp: + HP-UX has broken vsnprintf function. Changed the test not + to fail on HP-UX. + +Wed Dec 20 16:35:53 UTC 2006 Iliyan Jeliazkov + + These are fixes correcting scoreboard issues pertaining to the + checkin from Tue Dec 19 22:09:34 UTC 2006. + + * bin/tao_orb_tests.lst: + + Added the two Transport::Current tests to the scoreboard. + + * bin/MakeProjectCreator/config/tc.mpb: + + Moved this file to $TAO_ROOT/MPC/config where it belongs. + +Wed Dec 20 12:31:04 UTC 2006 Johnny Willemsen + + * tests/test_config.h: + Only define ACE_START_TEST and ACE_END_TEST when they are not + defined yet. This way we can set our own define in the config.h + file and for example just do logging to stdout instead of a file + which can be problematic when the test target doesn't have a + file system + +Wed Dec 20 04:52:04 UTC 2006 William R. Otte + + * ACE-INSTALL.html: + * docs/Download.html: + + Fleshed out SVN instructions a bit more, corrected link mistake in + Download.html. + + Thanks to Craig Rodrigues for the patch. + +Tue Dec 19 22:09:34 UTC 2006 Iliyan Jeliazkov + + * bin/MakeProjectCreator/config/tc.mpb: + + Added a new project type for projects using the Transport + Current functionality. + +Tue Dec 19 20:05:42 UTC 2006 William R. Otte + + * docs/Download.html: + Added link to SVN documentation. + +Tue Dec 19 14:19:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_rtems.x_g++.GNU: + Set load address + +Tue Dec 19 14:18:12 UTC 2006 Johnny Willemsen + + * ace/Object_Manager_Base.cpp (print_error_message): + Fixed invalid filename + +Tue Dec 19 13:16:38 UTC 2006 Douglas C. Schmidt + + * ace/Log_Msg_NT_Event_Log.cpp (log): Changed the loop iterator to + be size_t rather than long to silence a warning about comparing + signed and unsigned values. Thanks to Johnny for reporting + this. + +Tue Dec 19 09:11:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_unistd.inl (readdir_r): + Refactored this method to make it easier to maintain and at the + same moment fixed compile error when building ACE on VxWorks 6.4 + in kernel mode without pthread support + +Mon Dec 18 22:28:48 UTC 2006 Douglas C. Schmidt + + * ace/Log_Msg_NT_Event_Log.cpp (log): Iterate for i < + log_record.msg_data_len() rather than i < log_record.length () + to avoid nasty overrun errors. Thanks to Paxton Mason for reporting this. This fixes bugid 2754. + +Mon Dec 18 22:28:18 UTC 2006 Douglas C. Schmidt + + * ace/Log_Record.h: Clarify the meaning of length() in the + comments. Thanks to Paxton Mason for + motivating this. + +Mon Dec 18 13:48:12 UTC 2006 Johnny Willemsen + + * ACEXML/common/common.mpc: + * bin/MakeProjectCreator/configs/acexml.mpb: + Added zzip as base, this project really uses zzip + + * bin/MakeProjectCreator/configs/acedefaults.mpb: + Removed zzip and zlib as base projects. Any project that uses + zzip or zlib should derive from the correct project, but not + acedefaults. When making them a base from acedefaults any + project links with zzip/zlib even when they don't use it. + + This fixes bugzilla bug 2751. + +Mon Dec 18 10:59:12 UTC 2006 Johnny Willemsen + + * apps/JAWS2/HTTPU/parse_url.h: + Added prefix to the members of the URL_ERROR enum, NONE is a macro + on some platforms like VxWorks + +Mon Dec 18 10:04:19 UTC 2006 Olli Savia + + * tests/OS_Test.cpp: + Do not execute snprintf test if ACE_LACKS_VSNPRINTF is defined. + +Fri Dec 15 23:09:29 UTC 2006 Steve Huston + + * apps/JAWS2/JAWS/Makefile.am: Removed JAWS.h; see + Thu Dec 14 21:08:19 UTC 2006 Steve Huston + +Fri Dec 15 15:03:12 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.3.GNU: + * include/makeinclude/platform_vxworks6.4.GNU: + * ace/config-vxworks6.4.h: + * ace/config-vxworks6.3.h: + * ace/OS_NS_unistd.inl: + * ace/OS_NS_arpa_inet.cpp: + * ace/os_include/os_stdio.h: + * ace/os_include/sys/os_types.h: + Added support for VxWorks 6.4 + +Thu Dec 14 21:08:19 UTC 2006 Steve Huston + + * apps/JAWS2/JAWS/jaws2.mpc: Corrected compiler defines to add + JAWS_BUILD_DLL, not replace previous. + + * apps/JAWS2/JAWS/Export.h: Replaced contents with new content + generated from generate_export_file.pl. Previous content was + generated from GenerateExportH.BAT and was missing lots of + stuff, some of which prevented generation of .lib, .exp files. + + * apps/JAWS2/JAWS/JAWS.h: Removed; it only had JAWS_TRACE defined + which is properly defined in Export.h now. + + * apps/JAWS2/JAWS/Pipeline_Tasks.cpp: + * apps/JAWS2/JAWS/IO_Handler.cpp: + * apps/JAWS2/JAWS/IO.cpp: + * apps/JAWS2/JAWS/Concurrency.cpp: Removed #include "JAWS/JAWS.h" + +Thu Dec 14 12:36:43 UTC 2006 Johnny Willemsen + + * ace/config-qnx-neutrino.h: + Added several missing defines to build with QNX + +Thu Dec 14 11:57:43 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_qnx_neutrino.GNU: + Set all tools using ?= so that we can override the name + from the platform_macros.GNU file + +Thu Dec 14 00:12:49 UTC 2006 Steve Huston + + * ace/OS_NS_Thread.cpp (event_init): Solaris's shm_open() requires a + single '/' on the name argument. I opted to put that logic here + rather than the lower-level ACE_OS::shm_open(), but that point + is debatable. In any case, look for a leading / on the name if + ACE_SHM_OPEN_REQUIRES_ONE_SLASH is defined; if it's not there, + add it. + + * ace/config-sunos5.8.h: Added ACE_SHM_OPEN_REQUIRES_ONE_SLASH. + + * ace/README: Add description of ACE_SHM_OPEN_REQUIRES_ONE_SLASH. + + * configure.ac: Added check for ACE_SHM_OPEN_REQUIRES_ONE_SLASH. + Fixed check for ACE_LACKS_NUMERIC_LIMITS to display the findings + when configuring. + + * m4/config_h.m4: Added ACE_SHM_OPEN_REQUIRES_ONE_SLASH and + ACE_LACKS_NUMERIC_LIMITS. + +Wed Dec 13 15:04:57 UTC 2006 Iliyan Jeliazkov + + * bin/tao_orb_tests.lst: + + Updated the configuration for ORB_Local_Config/Bug_2612 to + require a multithreaded build to reflect the design goals of the + test. + +Tue Dec 12 23:50:43 UTC 2006 J.T. Conklin + + * NEWS: + + Document --enable-ace-reactor-notification-queue. + + * m4/ace.m4: + + Add autoconf support for --enable-ace-reactor-notification-queue. + Configuring with this option sets ACE_HAS_REACTOR_NOTIFICATION_QUEUE + in config.h. + +Wed Dec 13 01:41:19 UTC 2006 Abdullah Sowayan + + * ace/UUID.cpp: + + Fixed a potential memory leak. Dynamic memory was allocated but + not freed under special circumstances. For details, check BUGID + 2746. This closes BUGID 2746. + +Tue Dec 12 22:38:06 UTC 2006 Steve Huston + + * apps/JAWS2/HTTPU/parse_url.h: Made the char* members const to + resolve compile warnings about assignment of char* literals. + +Tue Dec 12 19:54:05 UTC 2006 Steve Huston + + * apps/JAWS2/HTTPU/httpu.mpc: Must build HTTPU after JAWS2. + +Tue Dec 12 19:54:04 UTC 2006 Chad Elliott + + * bin/fuzz.pl: + + Changed the regular expression to recognize #include's of files + with double quotes within a version block. + +Tue Dec 12 19:31:39 UTC 2006 Chad Elliott + + * bin/fuzz.pl: + + Corrected a bug where a non-ACE/TAO/CIAO file included within a + version block was being marked as an error. + +Tue Dec 12 17:01:42 UTC 2006 Jeff Parsons + + * bin/MakeProjectCreator/config/MPC.cfg: + + Added $DDS_ROOT/MPC/config to the includes, since the + .mpb files in DDS have been moved to this location, making + them consistent with the location of similar files in + TAO and CIAO. + +Tue Dec 12 15:08:32 UTC 2006 Chad Elliott + + * bin/tao_other_tests.lst: + + Added the Trading unit test to the list. + +Tue Dec 12 13:47:44 UTC 2006 Steve Huston + + * apps/JAWS2/HTTPU/httpu.mpc: Corrected build flags and added required + link library JAWS2. + +Tue Dec 12 06:05:38 UTC 2006 J.T. Conklin + + * configure.ac: + + Add ACE_HAS_ISASTREAM_PROTOTYPE feature test. + +Tue Dec 12 06:00:09 UTC 2006 J.T. Conklin + + * configure.ac: + + Add ACE_HAS_PTHREAD_SIGMASK_PROTOTYPE feature test. + +Tue Dec 12 05:13:33 UTC 2006 J.T. Conklin + + * configure.ac: + + Add ACE_LACKS_MKTEMP_PROTOTYPE and ACE_LACKS_MKSTEMP_PROTOTYPE + feature tests. + + * ace/README: + + Document ACE_LACKS_MKSTEMP feature test macro. + +Mon Dec 11 20:51:59 UTC 2006 Douglas C. Schmidt + + * apps/JAWS2/HTTPU/httpu.mpc: Added a new MPC file. Thanks to + Sergey for this. + + * apps/JAWS2/HTTPU/http_base.cpp (receive): Made this work with + HTTPU. Thanks to Sergey Kosenko for these patches. + +Mon Dec 11 20:21:14 UTC 2006 Steve Huston + + * ace/CDR_Stream.{h cpp} (ACE_OutputCDR): Added a new method, int + consolidate (void) which consolidates any continuation message + blocks into the start block, ensuring that all data is located + in one block on return. This is useful for situations which + require the entire encoded stream to be available in one buffer, + regardless of length. + + * tests/CDR_Test.cpp: Added a test for consolidate(). + + * NEWS: Added notice for new consolidate() method. + + Thanks to Howard Finer for supplying + the new ACE_OutputCDR::consolidate() method. + +Mon Dec 11 20:03:04 UTC 2006 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Changed the template to use the words "make macros" instead of + features. There may have be some confusion with MPC features. + +Mon Dec 11 17:39:46 UTC 2006 James H. Hill + + * docs/ace_guidelines.vsmacros: + + Fixed macros specification so the same file can be used + with both VS.NET 2003 and VS.NET 2005 development + environments. + +Mon Dec 11 15:23:08 UTC 2006 Chad Elliott + + * bin/MakeProjectCreator/config/MPC.cfg: + * bin/mpc.pl: + * bin/mwc.pl: + + Removed the code that specifically added the gnuace and borland + project types and rely on the dynamic_types directive in the + MPC.cfg to have the MPC core add them. + +Sat Dec 9 19:13:52 UTC 2006 Olli Savia + + * ace/config-vxworks5.x.h: + Added ACE_LACKS_VSNPRINTF. + +Fri Dec 8 20:20:09 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Config.cpp (parse_args_i): + + Moving the "default:" label outside the block that handles the + "case 's':". Even though it should work correctly on allmost any + compiler, things like this are bad form. Thanks to Aaron + Scamehorn for noticing. + +Fri Dec 8 20:15:40 UTC 2006 J.T. Conklin + + * THANKS: Add Ray Lischner. + +Fri Dec 8 16:39:51 UTC 2006 Steve Huston + + * ace/Null_Mutex.h: Added ACE_Export to the class declarations. + Although they are probably inlined, VS .NET 2005 (VC8) complains + in some cases when a dll-interface class inherits from a + non-dll-interface class. + +Fri Dec 8 15:36:23 UTC 2006 Ciju John + + * tests/run_test.lst: + Bug_2659_Regression_Test cannot run in a single threaded build. + +Fri Dec 8 05:21:38 UTC 2006 J.T. Conklin + + * configure.ac: + + Changed code to extract version number from ace/Version.h to be + more resilient to leading whitespace like was added by a bug in + the release script in the last beta. Thanks to Ray Lischner + for this patch. + Also thanks to Paul Riley for reporting + this problem. + +Thu Dec 7 14:13:43 UTC 2006 Johnny Willemsen + + * ace/DLL_Manager.cpp: + Made error message dependent on ACE::debug. Thanks to David Faure + for reporting this. + +Thu Dec 7 14:09:43 UTC 2006 Johnny Willemsen + + * bin/ciao_tests.lst: + Added RTCMM test + +Thu Dec 7 12:47:43 UTC 2006 Johnny Willemsen + + * ace/Read_Buffer.h: + Doxygen improvements + + * ace/Read_Buffer.cpp: + Initialise pointer with 0 and use prefix increment + +Thu Dec 7 09:47:43 UTC 2006 Johnny Willemsen + + * ACE-INSTALL.html: + Improved rtems documentation + + * MakeProjectCreator/config/avoids_ace_for_tao.mpb: + New base project for avoids ace_for_tao + + * bin/ciao_tests.lst + * bin/tao_orb_tests.lst + * bin/tao_other_tests.lst + Disabled all tests that are disabled in a minimum_corba build also + when using CORBA/e compact and micro + +Thu Dec 7 07:49:24 UTC 2006 Olli Savia + + * ace/OS_NS_stdio.h: + * ace/OS_NS_stdio.inl: + * ace/OS_NS_stdio.cpp: + + Implemented ACE_OS::snprintf() by using ACE_OS::vsnprintf(). + Removed duplicate code and made maintaining easier. + + * ace/README: + * ace/config-cygwin32.h: + * ace/config-freebsd.h: + * ace/config-hpux-11.00.h: + * ace/config-irix6.x-common.h: + * ace/config-linux-common.h: + * ace/config-lynxos.h: + * ace/config-macosx-panther.h: + * ace/config-macosx-tiger.h: + * ace/config-macosx.h: + * ace/config-netbsd.h: + * ace/config-openbsd.h: + * ace/config-openvms.h: + * ace/config-posix.h: + * ace/config-qnx-rtp-62x.h: + * ace/config-sunos5.7.h: + * ace/config-tru64.h: + * ace/config-vxworks6.2.h: + * ace/config-vxworks6.3.h: + * ace/config-win32-common.h: + * ace/config-win32-interix.h: + + Removed ACE_HAS_SNPRINTF and added ACE_LACKS_VSNPRINTF + if necessary (I probably missed some platforms, need to recheck + after next scoreboard round). + +Thu Dec 7 00:27:58 UTC 2006 J.T. Conklin + + * m4/config_h.m4: + * configure.ac: + + Remove obsolete ACE_HAS_UNION_WAIT feature test. + +Wed Dec 6 21:06:37 UTC 2006 Ciju John + + * tests/Bug_2659_Regression_Test.cpp: + Compile failure on RTEMS due to non-ANSI signal API on the + platform. Fixed by casting function ptr to proper type. + +Wed Dec 6 14:49:44 UTC 2006 J.T. Conklin + + * m4/config_h.m4: + * configure.ac: + + Remove obsolete ACE_LACKS_CMSG_DATA_MACRO and + ACE_LACKS_CMSG_DATA_MEMBER feature test. + +Wed Dec 6 11:07:43 UTC 2006 Johnny Willemsen + + * ace/config-mit-pthread.h: + * ace/config-sco-5.0.0-mit-pthread.h: + Removed MIT pthread config files, not supported for years + anymore + + * ace/config-mklinux.h: + Removed, this linux version hasn't been maintained for years + + * ace/ACE.cpp: + Removed all mit-pthread specific code + + * configure.ac: + Removed mit-pthread checks + + * ace/WFMO_Reactor.cpp: + Const/bool change + +Wed Dec 6 07:57:43 UTC 2006 Johnny Willemsen + + * bin/ciao_tests.lst: + * bin/tao_orb_tests.lst: + * bin/tao_other_tests.lst: + Disabled all tests that are disabled in a minimum_corba build also + when using CORBA/e compact and micro + +Tue Dec 5 23:53:34 UTC 2006 Ciju John + + * tests/Bug_2659_Regression_Test.cpp: + * tests/run_test.lst: + * tests/tests.mpc: + Adding regression test for Bug 2659. + +Tue Dec 5 19:44:43 UTC 2006 Johnny Willemsen + + * ace/config-freebsd.h: + Simplified ACE_HAS_SNPRINTF setting + + * ace/config-irix6.x-common.h: + * ace/config-sco-5.0.0-mit-pthread.h: + * ace/config-tru64.h: + Removed commented out defines, makes it easier to search whether + a macro is defined in any config file or not + + * ace/config-tru64.h: + Use config-posix.h + + * ace/Read_Buffer.{h,cpp}: + Changed close_on_delete to a real bool + + * ace/Service_Config.{h,inl}: + * ace/Service_Gestalt.{h,cpp,inl}: + Use bool for the ignore arguments + + * ace/SOCK_Dgram.inl: + Const change + +Tue Dec 5 15:47:43 UTC 2006 Johnny Willemsen + + * include/makeinclude/makeinclude/platform_osf1_3.2_cxx.GNU: + * include/makeinclude/makeinclude/platform_osf1_4.x_cxx.GNU: + * include/makeinclude/makeinclude/platform_osf1_4.x_g++.GNU: + * include/makeinclude/makeinclude/platform_osf1_4.x_rcc.GNU: + Removed, very old + + * include/makeinclude/makeinclude/platform_tru64_cxx.GNU: + * include/makeinclude/makeinclude/platform_tru64_g++.GNU: + We should be able to build on tru64 but it isn't really maintained, + moved the contents of the osf files into these files + +Tue Dec 5 15:22:43 UTC 2006 Johnny Willemsen + + * include/makeinclude/makeinclude/platform_aix4_cset++.GNU: + * include/makeinclude/makeinclude/platform_aix.GNU: + Moved contents of cset++ method into the aix one, the aix + file just included the first one + + * include/makeinclude/makeinclude/platform_aix4.2.GNU: + Removed, old + + * ace/config-aix-4.x.h: + * ace/config-aix-5.x.h: + Moved contents of 4.x.h file into the 5.x.h file. Removed a lot + of old checks for AIX 4 so that we can maintain things easier. + + * ace/ACE.cpp: + * ace/OS_NS_sys_wait.inl: + Removed ACE_HAS_UNION_WAIT, was only set for aix4 + + * ace/Log_Msg.cpp: + * ace/OS_NS_Thread.cpp: + Removed code for AIX 4.x to handle pthread_t + + * ace/os_include/sys/os_socket.h: + Removed ACE_HAS_AIX_BROKEN_SOCKET_HEADER, was only set for aix 4 + +Tue Dec 5 15:08:43 UTC 2006 Johnny Willemsen + + * ace/config-aix-4.1.x.h: + * ace/config-aix-4.2.x.h: + * ace/config-aix-4.3.x.h: + Removed, these AIX versions aren't supported anymore + +Tue Dec 5 14:33:43 UTC 2006 Johnny Willemsen + + * ace/config-irix6.x-sgic++-nothreads.h: + Removed + +Tue Dec 5 14:30:43 UTC 2006 Johnny Willemsen + + * ace/config-sunos5.4-centerline-2.x.h: + * include/makeinclude/platform_sunos5_centerline.GNU: + Removed centerline support + +Tue Dec 5 14:07:43 UTC 2006 Johnny Willemsen + + * include/makeinclude/platform_sunos4_g++.GNU: + * include/makeinclude/platform_sunos4_lucid.GNU: + * include/makeinclude/platform_sunos4_sunc++3.x.GNU: + * include/makeinclude/platform_sunos4_sunc++4.x.GNU: + Removed, not supported anymore + +Tue Dec 5 13:59:43 UTC 2006 Johnny Willemsen + + * ace/config-sco-5.0.0-fsu-pthread.h: + Deleted, fsu pthread is already removed some time ago. + +Tue Dec 5 13:58:12 UTC 2006 Johnny Willemsen + + * ace/config-sco-4.2-nothread.h: + Deleted, ancient + +Tue Dec 5 13:51:12 UTC 2006 Johnny Willemsen + + * ace/config-dgux-4.11-epc.h: + * ace/config-dgux-4.x-ghs.h: + * include/makeinclude/platform_dgux4_epc.GNU: + * include/makeinclude/platform_dgux4_ghs.GNU: + Deleted + + * ace/OS_NS_Thread.cpp: + Removed dgux support. Fixes bugzilla 2011 + +Tue Dec 5 13:41:12 UTC 2006 Johnny Willemsen + + * ace/config-irix5.2.h: + * ace/config-irix5.3-g++.h: + * ace/config-irix5.3-sgic++.h: + * include/makeinclude/platform_irix5.2.GNU: + * include/makeinclude/platform_irix5.3_g++.GNU: + * include/makeinclude/platform_irix5.3_sgic++.GNU: + Deleted + + * include/makeinclude/platform_irix6.x_common.GNU: + Use operator ?= + + * ace/os_include/os_signal.h: + Removed Irix 5 support, fixes bugzilla 2013. + +Tue Dec 5 13:31:12 UTC 2006 Johnny Willemsen + + * ace/config-m88k.h: + * include/makeinclude/platform_m88k.GNU: + Deleted + + * ace/os_include/os_signal.h: + * ace/os_include/sys/os_resource.h: + * ace/os_include/sys/os_time.h: + Removed support for m88k which isn't maintained for years now. + Fixes bugzilla 2012 + +Tue Dec 5 13:28:10 UTC 2006 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + If the gendir setting for the custom file is '.', then ommit the + gendir setting. This is required for version 3.4.45 of MPC. + +Tue Dec 5 12:20:12 UTC 2006 Johnny Willemsen + + * ace/os_include/sys/os_socket.h: + Removed check for ACE_LACKS_CMSG_DATA_MACRO which wasn't + set in any configuration file. This also resulted in the + removal of ACE_LACKS_CMSG_DATA_MEMBER because this define + was never checked + + * ace/config-qnx-neutrino.h: + * ace/config-qnx-rtp-62x.h: + * ace/config-qnx-rtp-pre62x.h: + * ace/config-tandem-nsk-mips-v2.h: + * ace/config-tandem-nsk-mips-v3.h: + Removed ACE_LACKS_CMSG_DATA_MEMBER, it has no impact at all + +Tue Dec 5 11:25:00 UTC 2006 Simon Massey + + * ace/SStringfwd.h: + + Provide for annoying HP aCC 3.xx template bug. + +Tue Dec 5 10:01:12 UTC 2006 Johnny Willemsen + + * ace/config-lynxos.h: + + Improved LynxOS 4.2 support + +Mon Dec 4 23:13:12 UTC 2006 Iliyan Jeliazkov + + * ace/Service_Gestalt.cpp (init_i): + + Fixed bug#2735 and eliminated a potential memory leak of the + list of already processed static services. The failure scenario + is based on a case where static initializers register a bunch of + service objects and then later the gestalt::open() is called. At + that point, the abovementioned list is reinitialized and its + contents was lost. See also the other failure scenario + (bug#2701) for which a fix was put in on Nov 9 2006. + +Mon Dec 4 18:00:16 UTC 2006 Iliyan Jeliazkov + + * bin/tao_orb_tests.lst: + + Added a regression test for bug#2612 + +Mon Dec 4 15:42:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config: + Moved TAO base projects to $TAO_ROOT/MPC/config + +Mon Dec 4 13:16:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/MPC.cfg: + Set includes so that TAO and CIAO base projects could be + under TAO_ROOT and CIAO_ROOT + + * bin/MakeProjectCreator/config/ciao_client_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_component_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_config_handlers.mpb: + * bin/MakeProjectCreator/config/ciao_config_handlers_base.mpb: + * bin/MakeProjectCreator/config/ciao_container_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_deployment_stub.mpb: + * bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb: + * bin/MakeProjectCreator/config/ciao_domainapplicationmanager_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_events_base_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_events_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_executionmanager_stub.mpb: + * bin/MakeProjectCreator/config/ciao_nodeapplication.mpb: + * bin/MakeProjectCreator/config/ciao_nodeapplicationmanager.mpb: + * bin/MakeProjectCreator/config/ciao_nodemanager_stub.mpb: + * bin/MakeProjectCreator/config/ciao_nodemanager_svnt.mpb: + * bin/MakeProjectCreator/config/ciao_noop_configurator.mpb: + * bin/MakeProjectCreator/config/ciao_plan_generator.mpb: + * bin/MakeProjectCreator/config/ciao_race_component.mpb: + * bin/MakeProjectCreator/config/ciao_race_default.mpb: + * bin/MakeProjectCreator/config/ciao_race_monitor.mpb: + * bin/MakeProjectCreator/config/ciao_rtevent_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_server_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_static_dnc_app.mpb: + * bin/MakeProjectCreator/config/ciao_targetmanager_stub.mpb: + * bin/MakeProjectCreator/config/ciao_targetmanager_svnt.mpb: + * bin/MakeProjectCreator/config/ciao_xml_utils.mpb: + * bin/MakeProjectCreator/config/ciaocidldefaults.mpb: + * bin/MakeProjectCreator/config/cidlc.mpb: + * bin/MakeProjectCreator/config/dance_extension_stub.mpb: + Moved to $CIAO_ROOT/MPC/config + +Mon Dec 4 13:13:12 UTC 2006 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Don't run Bug_2709_Regression with ACE_FOR_TAO + +Mon Dec 4 12:49:12 UTC 2006 Johnny Willemsen + + * ace/Basic_Types.h: + Added check for __ia64__, then we assume we have little endian, + this define is set by the HP OpenVMS compiler + +Mon Dec 4 12:26:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_targetmanager_svnt.mpb: + New base project + +Mon Dec 4 11:27:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_nodeapplication.mpb: + New base project for nodeapplication library + + * bin/MakeProjectCreator/config/ciao_nodeapplicationmanager.mpb: + Derive from ciao_nodeapplication + + * bin/MakeProjectCreator/config/ciao_nodemanager_stub.mpb: + * bin/MakeProjectCreator/config/ciao_nodemanager_svnt.mpb: + * bin/MakeProjectCreator/config/ciao_race_default.mpb: + * bin/MakeProjectCreator/config/ciao_race_monitor.mpb: + * bin/MakeProjectCreator/config/ciao_targetmanager_stub.mpb: + Fixed incorrect id tag + + * bin/MakeProjectCreator/config/ciao_noop_configurator.mpb: + New base project + +Mon Dec 4 11:26:12 UTC 2006 Johnny Willemsen + + * bin/fuzz.pl: + Corrected the expression to fill the files_mpc array and + enabled the Id check again + +Fri Dec 1 13:36:12 UTC 2006 Johnny Willemsen + + * Kokyu/docs/Kokyu.html: + Updated download location of ACE/TAO/CIAO + +Wed Nov 29 15:40:12 UTC 2006 Johnny Willemsen + + * ace/OS_NS_unistd.cpp (num_processors*): + Check the return value of sysctl, if it returns -1 then + also return the method with -1 + +Wed Nov 29 12:47:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_client_dnc.mpb: + Simplified this file + +Wed Nov 29 11:03:12 UTC 2006 Johnny Willemsen + + * ace/Malloc_T.{h,cpp}: + Changed delete_lock_ to a real bool + +Wed Nov 29 07:09:17 UTC 2006 J.T. Conklin + + * Makefile.am: + * configure.ac: + + If ACEXML, ASNMP, or protocols subdirectories are not present, + don't try to configure or build them. Thanks to Stephen Torri + for reporting this. + +Tue Nov 28 21:02:25 UTC 2006 Steve Huston + + * ace/WIN32_Asynch_IO.cpp (ACE_WIN32_Asynch_Connect::post_result): + The 'result' pointer is invalid upon return from post_completion() + regardless of whether or not it succeeds. This fix prevents + dereferencing result on failure of post_completion(), such as at + proactor shutdown. Thank you to Ken Kane for the analysis and fix. + + * THANKS: Updated Ken Kane's email address. + +Tue Nov 28 20:36:12 UTC 2006 Johnny Willemsen + + * bin/auto_run_tests.pl: + Added \n after the message when we can't chdir to a certain + directory to prevent detecting the wrong test because this + message is then on the same line as the next test. + +Tue Nov 28 20:15:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_deployment_svnt.mpb: + Removed include path that didn't exist anymore + +Tue Nov 28 16:04:45 UTC 2006 William R. Otte + + * bin/MakeProjectCreator/config/ciao_config_handlers_base.mpb + * bin/MakeProjectCreator/config/ciao_nodemanager_svnt.mpb + + Fix for linker warnings/errors on OS X. + +Tue Nov 28 14:08:23 UTC 2006 J.T. Conklin + + * bin/msvc_mpc_auto_compile.pl: + + Reorder @ace_core_dirs so that protocols follows tests, as + the HTBP protocol tests depend on the Test_Output library. + +Tue Nov 28 13:30:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/event.mpb: + * bin/MakeProjectCreator/config/event_serv.mpb: + * bin/MakeProjectCreator/config/event_skel.mpb: + * bin/MakeProjectCreator/config/ftorbutils.mpb: + * bin/MakeProjectCreator/config/ftrtevent.mpb: + * bin/MakeProjectCreator/config/ifrservice.mpb: + * bin/MakeProjectCreator/config/imr_locator.mpb: + * bin/MakeProjectCreator/config/portablegroup.mpb: + * bin/MakeProjectCreator/config/rtcorbacommon.mpb: + Added avoids_corba_e_compact as base project, if we have CORBA/e + compact we don't have the needed features available to build these + projects. + +Tue Nov 28 13:25:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/avoids_corba_e_micro.mpb: + * bin/MakeProjectCreator/config/avoids_corba_e_compact.mpb: + Fixed incorrect feature name + + * bin/MakeProjectCreator/config/global.features: + Removed duplicate minimum_corba + +Tue Nov 28 09:53:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ciao_client_dnc.mpb: + * bin/MakeProjectCreator/config/ciao_events_dnc.mpb: + Removed security as base, for the moment we decoupled from + the security service. + +Tue Nov 28 00:28:28 UTC 2006 J.T. Conklin + + * protocols/tests/HTBP/htbptest.mpb: + + Add dependency on Test_Output. + +Mon Nov 27 12:30:28 UTC 2006 Chad Elliott + + * tests/Bug_2653_Regression_Test.cpp: + + When a thread is started, you must wait() on it before exiting the + process to avoid a core dump. + + * tests/run_test.pl: + + Print out the test header before checking for the executable. If + the executable is not there, it will appear as if the previous + test failed. + +Mon Nov 27 08:45:12 UTC 2006 Johnny Willemsen + + * ace/config-sunos5.5.h: + Fixed compile problem on solaris x86 when _FILE_OFFSET_BITS=64 + is set. Thanks to Michael Klein + for reporting this. Fixed bugzilla bug 2693. + +Mon Nov 27 08:09:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/minimum_corba.mpb: + * bin/MakeProjectCreator/config/avoids_minimum_corba.mpb: + Renames minimum_corba to avoids_minimum_corba. Fixes bugzilla + 2589. + + * bin/MakeProjectCreator/config/avoids_corba_e_micro.mpb: + Fixed this file and made corba_e_compact its parent, when + we can't build a project in corba_e_compact then corba_e_micro + is also not an option. + + * bin/MakeProjectCreator/config/event.mpb: + * bin/MakeProjectCreator/config/event_serv.mpb: + * bin/MakeProjectCreator/config/event_skel.mpb: + * bin/MakeProjectCreator/config/ftorbutils.mpb: + * bin/MakeProjectCreator/config/ftrtevent.mpb: + * bin/MakeProjectCreator/config/ifrservice.mpb: + * bin/MakeProjectCreator/config/imr_locator.mpb: + * bin/MakeProjectCreator/config/portablegroup.mpb: + * bin/MakeProjectCreator/config/rtcorbacommon.mpb: + Updated for rename of minimum_corba + +Mon Nov 27 06:05:38 UTC 2006 Olli Savia + + * tests/OS_Test.cpp: + Fixed compile error on VxWorks. Thanks to Johnny Willemsen + for pointing out the problem and suggesting a fix. + +Fri Nov 24 13:27:55 UTC 2006 J.T. Conklin + + * bin/MakeProjectCreator/config/automake.features: + + Set stl and boost. We'll use automake conditionals to defer + these options to configure time. + +Fri Nov 24 13:05:01 UTC 2006 Olli Savia + + * tests/OS_Test.cpp: + Added ACE_OS::snprintf test. + +Fri Nov 24 10:08:12 UTC 2006 Johnny Willemsen + + * ace/Sock_Connect.cpp: + Fixed compile errors when building on linux with no + networking support + +Thu Nov 23 17:06:17 UTC 2006 Simon McQueen + + * ace/OS_Errno.h: + * ace/OS_Errno.cpp: + + Fix compile errors with g++ on Solaris with NDEBUG. + +Thu Nov 23 14:09:17 UTC 2006 Steve Huston + + * include/makeinclude/rules.lib.GNU: Corrected error introduced by + Wed Nov 22 21:53:17 UTC 2006 Steve Huston . + +Thu Nov 23 06:53:12 UTC 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/ace_for_tao.mpb: + Added ACE_LACKS_MSG_WFMO as define, that prevents other projects + to try to use the msg wfmo reactor which is not available in the + ace_for_tao configuration + +Thu Nov 23 03:14:58 UTC 2006 J.T. Conklin + + * tests/Integer_Truncate_Test.cpp: + * apps/JAWS/clients/WebSTONE/src/README: + + Removed svn:executable property. + +Wed Nov 22 23:16:22 UTC 2006 Steve Huston + + * examples/Timer_Queue/Async_Timer_Queue_Test.cpp: Ignore SIGQUIT code + for platforms with ACE_LACKS_UNIX_SIGNALS. Fixes WinCE build error. + +Wed Nov 22 21:58:16 UTC 2006 Steve Huston + + * tests/RB_Tree_Test.cpp: Don't use ACE_ASSERT for code - it doesn't + get executed in Release builds. + + Pulled these in from the 5.5 stream: + + Mon Nov 20 21:26:24 UTC 2006 Steve Huston + + * ace/config-win32-msvc.h: + * ace/OS_Memory.h: + The MFC new/exception code needed the ability to delete a caught + CMemoryException object to prevent memory leaks (see + http://msdn2.microsoft.com/de-de/library/0e5twxsh(VS.80).aspx). + This necessitates that every platform other than Windows/MFC gets + an empty define for ACE_del_bad_alloc, and the ACE_NEW... macros + have ACE_del_bad_alloc expanded in the catch block. + For past history of this issue, see the trail starting at: + Tue Aug 8 09:15:00 UTC 2006 Simon Massey + + Thu Nov 16 16:14:32 UTC 2006 Steve Huston + + * ace/String_Base.{h inl}: Added a capacity() method that returns + the number of allocated CHAR units in the string object. Thanks to + Kelly Hickel for supplying this. + + * NEWS: Updated with recent ACE_String_Base and build additions. + + Mon Nov 13 17:40:58 UTC 2006 Steve Huston + + * ace/String_Base.{h cpp}: Added a fast_resize(size_t) method to + manage the sizing/reallocating of the string, but doesn't do the + memory setting of resize(). Changed resize() to call fast_resize() + then do the memory setting. + Thank you to Kelly Hickel for these + additions. + + +Wed Nov 22 21:53:17 UTC 2006 Steve Huston + + Pulled these in from the 5.5 stream: + + Thu Nov 16 21:56:37 UTC 2006 Steve Huston + + * include/makeinclude/rules.local.GNU: For creating the object file + directories (e.g., VDIR and VSHDIR, and their subdirectories), change + from using the directory as a prerequisite and make that prereq + a PHONY target to embed the command(s) to check and create the + directory if needed. This accomplishes two things: 1) allows the + make to work with clearmake in GNU compatibility mode (clearmake + always saw the PHONY target as remade and remade every file in the + project), and 2) avoids using a PHONY target as a prerequisite, + something the GNU make manual says to avoid. Thank you to Howard + Finer for motivating and assisting + in this effort. + + Tue Nov 14 22:33:03 UTC 2006 Steve Huston + + * include/makeinclude/rules.lib.GNU: Change VLOBJS and VSHOBJS to + use $(patsubst) instead of $(if) to look for entries that have + relative directories in them (../). Avoids $(if) which does not + work in Clearcase's clearmake GNU compatibility mode. + +Wed Nov 22 19:52:23 UTC 2006 J.T. Conklin + + * ace/Select_Reactor_T.inl: + + Add #include of "Log_Msg.h". This is required to bring things + into scope on systems where ACE_TEMPLATES_REQUIRE_SOURCE isn't + defined/needed. + +Wed Nov 22 18:27:39 UTC 2006 J.T. Conklin + + * performance-tests/Synch-Benchmarks/Base_Test/Makefile.am: + + Regenerated. + + * performance-tests/Synch-Benchmarks/Base_Test/Synch_Benchmarks_Base_Test.mpc: + + Add automake specific includes definition to find headers + relative to source directory. + +Wed Nov 22 16:57:55 UTC 2006 J.T. Conklin + + * performance-tests/Synch-Benchmarks/Perf_Test/Makefile.am: + + Regenerated. + + * performance-tests/Synch-Benchmarks/Perf_Test/Synch_Benchmarks_Perf_Test.mpc: + + Add automake specific includes definition to find headers + relative to source directory. + +Wed Nov 22 16:48:58 UTC 2006 J.T. Conklin + + * Makefile.am: + + Hand tweak, HTBP tests depend on Test_Output library. This + requires changing the build order so that the protocols dir + is built after tests. + + * apps/gperf/tests/Makefile.am: + + Hand tweak to find gperf executable on automake builds. Chad + has given me info to make MPC generation work, which I'll add + in the near future. + + * m4/ace.m4: + + Placeholder for a BUILD_WXWINDOWS feature test. For now it + always returns false. + + * configure.ac: + + Configure examples/ConfigViewer/Makefile. + +Wed Nov 22 15:34:12 UTC 2006 J.T. Conklin + + * ace/Version.h: + + Remove extraneous whitespace from ACE_VERSION macro definition. + + * ace/Makefile.am: + + Hand tweak. + + * ace/QoS/Makefile.am: + + Revert to earlier version until MPC generation issues are + resolved. + + * apps/JAWS2/JAWS/Makefile.am: + * apps/JAWS3/jaws3/Makefile.am: + + Regenerated. + + * apps/JAWS2/JAWS/jaws2.mpc: + * apps/JAWS3/jaws3/jaws3.mpc: + + Add automake specific includes definition to find headers + relative to source directory. + +Wed Nov 22 14:24:31 UTC 2006 J.T. Conklin + + * ace/Makefile.am: + + Regenerated. + + * ace/ace_xtreactor.mpc: + * ace/ace_tkreactor.mpc: + * ace/ace_flreactor.mpc: + * ace/ace_qtreactor.mpc: + + Changed to specify full name of pkgconfig template file, + the MPC Custom spec does not automatically match *.pc.in + files. + +Wed Nov 22 14:16:40 UTC 2006 J.T. Conklin + + * examples/ConfigViewer/Makefile.am: + + New file. + +Wed Nov 22 14:10:08 UTC 2006 J.T. Conklin + + * protocols/tests/RMCast/Makefile.am: + * protocols/tests/Makefile.am: + * protocols/tests/HTBP/Reactor_Tests/Makefile.am: + * protocols/tests/HTBP/Send_Large_Msg/Makefile.am: + * protocols/tests/HTBP/Makefile.am: + * protocols/tests/HTBP/Send_Recv_Tests/Makefile.am: + * protocols/tests/HTBP/ping/Makefile.am: + * protocols/ace/RMCast/Makefile.am: + * protocols/ace/Makefile.am: + * protocols/ace/TMCast/Makefile.am: + * protocols/ace/HTBP/Makefile.am: + * protocols/examples/RMCast/Send_Msg/Makefile.am: + * protocols/examples/RMCast/Makefile.am: + * protocols/examples/Makefile.am: + * protocols/examples/TMCast/Member/Makefile.am: + * protocols/examples/TMCast/Makefile.am: + * ace/Makefile.am: + * ace/SSL/Makefile.am: + * ace/QoS/Makefile.am: + * performance-tests/Synch-Benchmarks/Base_Test/Makefile.am: + * performance-tests/Synch-Benchmarks/Makefile.am: + * performance-tests/Synch-Benchmarks/Synch_Lib/Makefile.am: + * performance-tests/Synch-Benchmarks/Perf_Test/Makefile.am: + * performance-tests/Server_Concurrency/Leader_Follower/Makefile.am: + * performance-tests/Server_Concurrency/Makefile.am: + * performance-tests/Server_Concurrency/Queue_Based_Workers/Makefile.am: + * performance-tests/TCP/Makefile.am: + * performance-tests/UDP/Makefile.am: + * performance-tests/SCTP/Makefile.am: + * performance-tests/Makefile.am: + * performance-tests/Misc/Makefile.am: + * Kokyu/tests/FIFO/Makefile.am: + * Kokyu/tests/DSRT_MIF/Makefile.am: + * Kokyu/tests/Makefile.am: + * Kokyu/tests/EDF/Makefile.am: + * Kokyu/Makefile.am: + * tests/SSL/Makefile.am: + * tests/Makefile.am: + * apps/Gateway/Gateway/Makefile.am: + * apps/Gateway/Makefile.am: + * apps/Gateway/Peer/Makefile.am: + * apps/mkcsregdb/Makefile.am: + * apps/drwho/Makefile.am: + * apps/gperf/tests/Makefile.am: + * apps/gperf/src/Makefile.am: + * apps/gperf/Makefile.am: + * apps/JAWS/clients/Blobby/Makefile.am: + * apps/JAWS/clients/Makefile.am: + * apps/JAWS/clients/Caching/Makefile.am: + * apps/JAWS/server/Makefile.am: + * apps/JAWS/Makefile.am: + * apps/JAWS2/JAWS/Makefile.am: + * apps/JAWS2/Makefile.am: + * apps/JAWS3/jaws3/Makefile.am: + * apps/JAWS3/Makefile.am: + * apps/soreduce/Makefile.am: + * bin/Makefile.am: + * ACEXML/tests/Makefile.am: + * ACEXML/tests/util/Makefile.am: + * ACEXML/apps/svcconf/Makefile.am: + * ACEXML/apps/Makefile.am: + * ACEXML/common/Makefile.am: + * ACEXML/Makefile.am: + * ACEXML/parser/Makefile.am: + * ACEXML/parser/parser/Makefile.am: + * ACEXML/examples/SAXPrint/Makefile.am: + * ACEXML/examples/Makefile.am: + * websvcs/tests/Makefile.am: + * websvcs/lib/Makefile.am: + * websvcs/Makefile.am: + * netsvcs/clients/Logger/Makefile.am: + * netsvcs/clients/Tokens/rw_lock/Makefile.am: + * netsvcs/clients/Tokens/mutex/Makefile.am: + * netsvcs/clients/Tokens/deadlock/Makefile.am: + * netsvcs/clients/Tokens/collection/Makefile.am: + * netsvcs/clients/Tokens/invariant/Makefile.am: + * netsvcs/clients/Tokens/manual/Makefile.am: + * netsvcs/clients/Naming/Dump_Restore/Makefile.am: + * netsvcs/clients/Naming/Makefile.am: + * netsvcs/clients/Naming/Client/Makefile.am: + * netsvcs/clients/Makefile.am: + * netsvcs/lib/Makefile.am: + * netsvcs/servers/Makefile.am: + * netsvcs/Makefile.am: + * ASNMP/tests/Makefile.am: + * ASNMP/Makefile.am: + * ASNMP/agent/Makefile.am: + * ASNMP/asnmp/Makefile.am: + * ASNMP/examples/get/Makefile.am: + * ASNMP/examples/trap/Makefile.am: + * ASNMP/examples/Makefile.am: + * ASNMP/examples/set/Makefile.am: + * ASNMP/examples/next/Makefile.am: + * ASNMP/examples/walk/Makefile.am: + * examples/OS/Makefile.am: + * examples/OS/Process/Makefile.am: + * examples/Synch/Makefile.am: + * examples/Timer_Queue/Makefile.am: + * examples/Log_Msg/Makefile.am: + * examples/Misc/Makefile.am: + * examples/ASX/CCM_App/Makefile.am: + * examples/ASX/Event_Server/Transceiver/Makefile.am: + * examples/ASX/Event_Server/Event_Server/Makefile.am: + * examples/ASX/Event_Server/Makefile.am: + * examples/ASX/Message_Queue/Makefile.am: + * examples/ASX/UPIPE_Event_Server/Makefile.am: + * examples/ASX/Makefile.am: + * examples/Web_Crawler/Makefile.am: + * examples/Shared_Malloc/Makefile.am: + * examples/QOS/Change_Sender_TSpec/Makefile.am: + * examples/QOS/Diffserv/Makefile.am: + * examples/QOS/Simple/Makefile.am: + * examples/QOS/Change_Receiver_FlowSpec/Makefile.am: + * examples/Bounded_Packet_Relay/Makefile.am: + * examples/System_V_IPC/SV_Message_Queues/Makefile.am: + * examples/System_V_IPC/Makefile.am: + * examples/System_V_IPC/SV_Semaphores/Makefile.am: + * examples/Map_Manager/Makefile.am: + * examples/APG/Svc_Config/Makefile.am: + * examples/APG/ThreadSafety/Makefile.am: + * examples/APG/ThreadPools/Makefile.am: + * examples/APG/Active_Objects/Makefile.am: + * examples/APG/Logging/Makefile.am: + * examples/APG/Misc_IPC/Makefile.am: + * examples/APG/Proactor/Makefile.am: + * examples/APG/Threads/Makefile.am: + * examples/APG/Shared_Memory/Makefile.am: + * examples/APG/Reactor/Makefile.am: + * examples/APG/Signals/Makefile.am: + * examples/APG/Timers/Makefile.am: + * examples/APG/ThreadManagement/Makefile.am: + * examples/APG/Config/Makefile.am: + * examples/APG/Containers/Makefile.am: + * examples/APG/Processes/Makefile.am: + * examples/APG/Naming/Makefile.am: + * examples/APG/Makefile.am: + * examples/APG/Sockets/Makefile.am: + * examples/APG/Streams/Makefile.am: + * examples/Registry/Makefile.am: + * examples/Smart_Pointers/Makefile.am: + * examples/DLL/Makefile.am: + * examples/IPC_SAP/DEV_SAP/reader/Makefile.am: + * examples/IPC_SAP/DEV_SAP/Makefile.am: + * examples/IPC_SAP/DEV_SAP/writer/Makefile.am: + * examples/IPC_SAP/FILE_SAP/Makefile.am: + * examples/IPC_SAP/SOCK_SAP/Makefile.am: + * examples/IPC_SAP/SPIPE_SAP/Makefile.am: + * examples/IPC_SAP/ATM_SAP/Makefile.am: + * examples/IPC_SAP/SSL_SAP/Makefile.am: + * examples/IPC_SAP/UPIPE_SAP/Makefile.am: + * examples/IPC_SAP/FIFO_SAP/Makefile.am: + * examples/IPC_SAP/Makefile.am: + * examples/IPC_SAP/TLI_SAP/Makefile.am: + * examples/Logger/Acceptor-server/Makefile.am: + * examples/Logger/Makefile.am: + * examples/Logger/simple-server/Makefile.am: + * examples/Logger/client/Makefile.am: + * examples/Export/Makefile.am: + * examples/Service_Configurator/Makefile.am: + * examples/Service_Configurator/IPC-tests/server/Makefile.am: + * examples/Service_Configurator/IPC-tests/Makefile.am: + * examples/Service_Configurator/IPC-tests/client/Makefile.am: + * examples/Service_Configurator/Misc/Makefile.am: + * examples/IOStream/server/Makefile.am: + * examples/IOStream/Makefile.am: + * examples/IOStream/client/Makefile.am: + * examples/Threads/Makefile.am: + * examples/Shared_Memory/Makefile.am: + * examples/Reactor/Ntalker/Makefile.am: + * examples/Reactor/TP_Reactor/Makefile.am: + * examples/Reactor/FIFO/Makefile.am: + * examples/Reactor/Multicast/Makefile.am: + * examples/Reactor/WFMO_Reactor/Makefile.am: + * examples/Reactor/Proactor/Makefile.am: + * examples/Reactor/Makefile.am: + * examples/Reactor/Dgram/Makefile.am: + * examples/Reactor/Misc/Makefile.am: + * examples/Connection/non_blocking/Makefile.am: + * examples/Connection/blocking/Makefile.am: + * examples/Connection/Makefile.am: + * examples/Connection/misc/Makefile.am: + * examples/NT_Service/Makefile.am: + * examples/Naming/Makefile.am: + * examples/Makefile.am: + * examples/Mem_Map/IO-tests/Makefile.am: + * examples/Mem_Map/file-reverse/Makefile.am: + * examples/Mem_Map/Makefile.am: + * examples/C++NPv1/Makefile.am: + * examples/C++NPv2/Makefile.am: + + Regenerated. + +Wed Nov 22 13:45:43 UTC 2006 J.T. Conklin + + * configure.ac: + + Update for HTBP unit test and TMCast example move. + + * protocols/tests/HTBP/Reactor_Tests/Reactor_Tests.mpc: + * protocols/tests/HTBP/Reactor_Tests/client.cpp: + * protocols/tests/HTBP/Reactor_Tests/inside.conf: + * protocols/tests/HTBP/Reactor_Tests/server.cpp: + * protocols/tests/HTBP/Reactor_Tests/Makefile.am: + * protocols/tests/HTBP/Reactor_Tests/test_config.h: + * protocols/tests/HTBP/Reactor_Tests/run_test.pl: + * protocols/tests/HTBP/HTBP_Config.conf: + * protocols/tests/HTBP/Send_Large_Msg/client.cpp: + * protocols/tests/HTBP/Send_Large_Msg/Send_Large_Msg.mpc: + * protocols/tests/HTBP/Send_Large_Msg/server.cpp: + * protocols/tests/HTBP/Send_Large_Msg/Makefile.am: + * protocols/tests/HTBP/Send_Large_Msg/run_test.pl: + * protocols/tests/HTBP/Makefile.am: + * protocols/tests/HTBP/Send_Recv_Tests/SendRecv_Test.mpc: + * protocols/tests/HTBP/Send_Recv_Tests/Makefile.am: + * protocols/tests/HTBP/Send_Recv_Tests/SendRecv_Test.cpp: + * protocols/tests/HTBP/htbptest.mpb: + * protocols/tests/HTBP/ping/client.cpp: + * protocols/tests/HTBP/ping/server.cpp: + * protocols/tests/HTBP/ping/Makefile.am: + * protocols/tests/HTBP/ping/ping.mpc: + * protocols/tests/HTBP/ping/run_test.pl: + * protocols/tests/HTBP/README: + + Move HTBP unit tests to protocols/tests/HTBP... + + * tests/HTBP/Reactor_Tests/Reactor_Tests.mpc: + * tests/HTBP/Reactor_Tests/client.cpp: + * tests/HTBP/Reactor_Tests/inside.conf: + * tests/HTBP/Reactor_Tests/server.cpp: + * tests/HTBP/Reactor_Tests/Makefile.am: + * tests/HTBP/Reactor_Tests/test_config.h: + * tests/HTBP/Reactor_Tests/run_test.pl: + * tests/HTBP/HTBP_Config.conf: + * tests/HTBP/Send_Large_Msg/client.cpp: + * tests/HTBP/Send_Large_Msg/Send_Large_Msg.mpc: + * tests/HTBP/Send_Large_Msg/server.cpp: + * tests/HTBP/Send_Large_Msg/Makefile.am: + * tests/HTBP/Send_Large_Msg/run_test.pl: + * tests/HTBP/Makefile.am: + * tests/HTBP/Send_Recv_Tests/SendRecv_Test.mpc: + * tests/HTBP/Send_Recv_Tests/Makefile.am: + * tests/HTBP/Send_Recv_Tests/SendRecv_Test.cpp: + * tests/HTBP/htbptest.mpb: + * tests/HTBP/ping/client.cpp: + * tests/HTBP/ping/server.cpp: + * tests/HTBP/ping/Makefile.am: + * tests/HTBP/ping/ping.mpc: + * tests/HTBP/ping/run_test.pl: + * tests/HTBP/README: + + ...from tests/HTBP. + + * protocols/examples/TMCast/Member/Member.mpc: + * protocols/examples/TMCast/Member/member.cpp: + * protocols/examples/TMCast/Member/Makefile.am: + * protocols/examples/TMCast/Member/README: + * protocols/examples/TMCast/Makefile.am: + + Moved TMCast examples to protocols/examples/TMCast... + + * examples/TMCast/Member/Member.mpc: + * examples/TMCast/Member/member.cpp: + * examples/TMCast/Member/Makefile.am: + * examples/TMCast/Member/README: + * examples/TMCast/Makefile.am: + + ...from examples/TMCast. + +Wed Nov 22 13:25:12 2006 Johnny Willemsen + + * ace/ace_for_tao.mpc: + Add uuid as base project. For building COIOP as part of the + TAO strategies library we need uuid. The nicest solution would + be to make the uuid feature dependent on the ace_for_tao + feature and let the user overrule this but that is not + possible yet. If you are using ace_for_tao and don't want + to have uuid pulled in, set uuid explicitly to 0 in your + default.features file. + +Wed Nov 22 10:48:12 2006 Johnny Willemsen + + * ace/Log_Msg.cpp: + Refactored handling of %W. Added a check for a nill pointer + as we have for ascii strings. Fixes bugzilla 2277. + + * tests/Log_Msg_Test.cpp: + Added test for %W with a string as argument and with a + nill pointer. Fixes bugzilla 2715. + +Wed Nov 22 10:38:12 2006 Johnny Willemsen + + * examples/Misc/test_XtReactor1.cpp: + * examples/Misc/test_XtReactor2.cpp: + * tests/FlReactor_Test.cpp: + * tests/XtReactor_Test.cpp: + * tests/TkReactor_Test.cpp: + * tests/QtReactor_Test.cpp: + Updated because of move below. + +Wed Nov 22 10:35:12 2006 Johnny Willemsen + + * ace/QtReactor*.*: + * ace/FlReactor*.*: + * ace/XtReactor*.*: + * ace/TkReactor*.*: + Moved these reactors to their own subdirectories to make + maintenance a lot easier. + +Wed Nov 22 10:45:12 2006 Johnny Willemsen + + * bin/MakeProjectCreator/config/core_anytypecode.mpb: + Removed svn:executable property + + * bin/MakeProjectCreator/config/core_strategies.mpb + New base project for the strategies library when build in + ace_for_tao configuration + + * bin/MakeProjectCreator/config/orbsvcslib.mpb: + Removed -GT so that we also don't generate TIE files for the + orbsvcs anymore. Will speedup builds and simplify other mpc + files + + * bin/MakeProjectCreator/config/strategies.mpb + Derive from core_strategies. Now the strategies library + does get build in an ace_for_tao configuration but + shmiop and uiop are not build at all, other protocols + can be build. This way we can build COIOP in an ace_for_tao + setup + + * bin/make_release: + Removed dsp/dsw reference, corrected naming of the ACE + packages when the version number gets added. + + * include/makeinclude/platform_hpux_aCC.GNU: + Removed HPUX 10.20 support + + * include/makeinclude/platform_lynxos.GNU: + ACE_HAS_BROKEN_THREAD_KEYFREE is now set in the config file + + * include/makeinclude/wrapper_macros.GNU: + Removed ACE_HAS_GNUG_PRE_2_8 checks + +Wed Nov 22 09:07:12 2006 Johnny Willemsen + + * docs/run_test.txt: + Document ACE_RUN_VX_TGT_HOST + + * docs/bczar/bczar.html: + Updated this file + + * ace/config-freebsd.h: + * ace/POSIX_Proactor.cpp: + Added ACE_HAS_SIGVAL_SIGVAL_INT, this fixes bugzilla + bug 2716. Thanks to Craig Rodrigues + for reporting this. + + * ace/ace.mpc: + Added missing OS.inl. This fixes bugzilla bug 2705. + Thanks to Daniel Black + for reporting this. + + * Release: + Removed dsw files + + * ace/config-rtems.h: + * ace/config-posix-nonetworking.h: + Moved the configuration to build without no networking + support to its own file so that we can reuse this for + example on linux + + * ace/config-rtems.h: + Added support for rtems 4.7 + + * ace/config-unixware-7.1.0.udk.h: + Cleanup + + * ace/config-lyxos.h: + Added support for LynxOS 4.2 + + * ace/config-linux.h: + * ace/config-linux-common.h: + Moved ACE_HAS_GETIFADDRS to the common file and added + support for ACE_LACKS_NETWORKING on linux + + * ace/INET_Addr.cpp: + * ace/OS_NS_netdb.cpp + Fixed compile problem when using ACE_LACKS_NETWORKING on + linux + + * ace/Obstack.h: + Use ACE_EXPORT_SINGLETON_DECLARATION to resolve link errors + on FC6. Thanks to Ken Sedgwick for + reporting this and testing out the patch. + + * ace/OS_NS_string.inl: + Initialise pointer with 0 + +Mon Nov 20 08:16:34 2006 Simon McQueen + + * ACE version 5.5.4 released. + +Local Variables: +mode: change-log +add-log-time-format: (lambda () (progn (setq tz (getenv "TZ")) (set-time-zone-rule "UTC") (setq time (format-time-string "%a %b %e %H:%M:%S %Z %Y" (current-time))) (set-time-zone-rule tz) time)) +indent-tabs-mode: nil +End: diff --git a/ACE/ChangeLogs/ChangeLog-07b b/ACE/ChangeLogs/ChangeLog-07b new file mode 100644 index 00000000000..2e96e779dc8 --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-07b @@ -0,0 +1,7459 @@ +Fri Jul 27 06:50:14 CDT 2007 Johnny Willemsen + + * ACE version 5.5.10 released. + +Thu Jul 26 10:52:23 UTC 2007 Johnny Willemsen + + * tests/Dynamic_Test.cpp: + Removed some printf statements that where not needed + +Wed Jul 25 22:13:59 UTC 2007 Steve Huston + + * tests/ACE_Init_Test.cpp: Added missing #include "ace/OS_NS_unistd.h" + to see ACE_OS::sleep(). + +Wed Jul 25 18:43:53 UTC 2007 William R. Otte + + * bin/make_release.py: + + Additional bugfixes for packaging process. + +Wed Jul 25 08:24:23 UTC 2007 Johnny Willemsen + + * ace/CDR_Size.cpp: + If an argument isn't used, just not give it a name and + then remove ACE_UNUSED_ARG + + * ace/CDR_Stream.h: + * ace/CDR_Size.inl: + Layout change + + * ace/OS_NS_time.inl: + Const change + + * bin/tao_other_tests.lst: + Don't run 2709 when ST is defined + +Tue Jul 24 22:45:37 UTC 2007 Steve Huston + + * ace/Bound_Ptr.inl (operator=): Check for assign-to-self first; + the code would work assigning to self (as the comment states) but + why do it? Also resolves some compile warnings on HP aC++. + +Tue Jul 24 20:38:50 UTC 2007 Douglas C. Schmidt + + * COPYING: Updated this file to reflect 2007. + +Tue Jul 24 21:09:27 UTC 2007 Steve Huston + + * tests/Proactor_Test_IPV6.cpp: Default to half duplex operation on + Linux. Identical to recent change to Proactor_Test.cpp; see + Wed Jun 27 13:48:50 UTC 2007 Steve Huston + + * tests/Multicast_Test_IPV6.cpp: Don't log an error if + IPV6_MULTICAST_LOOP is an unsupported sockopt; also fix spelling. + +Tue Jul 24 20:03:24 UTC 2007 Ciju John + + * bin/tao_orb_tests.lst: + Adding regression test for Bug 3000 to autorun list. + +Tue Jul 24 15:15:43 UTC 2007 Vadym Ridosh + + * THANKS: Added Daniel de Angelis Cordeiro to the Hall of Fame. + +Tue Jul 24 06:58:23 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + * bin/tao_other_tests.lst: + Moved all POA examples to the orb tests, core builds should also + test the POA in detail. + +Mon Jul 23 20:16:23 UTC 2007 Steve Huston + + * tests/Multicast_Test_IPV6.cpp: Always enable IPV6_MULTICAST_LOOP + since the test relies on seeing the datagrams sent on the local + host and various platforms have different defaults. + ACE_SOCK_Dgram_Mcast documents this indeterminate state, so if + the app cares (as this one does), it should set it specifically. + +Mon Jul 22 09:59:30 UTC 2007 Johnny Willemsen + + * tests/unload_libace.mpb: + Also define _CRT_SECURE_NO_WARNINGS with nmake + +Mon Jul 22 09:58:30 UTC 2007 Johnny Willemsen + + * ace/config-win32-msvc.h: + Intel C++ does mimic MSVC but does have different warning + numbers. Disable some Intel C++ warnings + +Mon Jul 22 08:04:30 UTC 2007 Johnny Willemsen + + * ace/Rtems_init.c: + * ace/Atomic_Op_Sparc.c: + With Intel C++ don't define the static variable, result in a + warning that it is not used + +Mon Jul 22 06:34:30 UTC 2007 Johnny Willemsen + + * ace/CDR_Stream.{h,cpp,inl}: + Changed wchar_maxbytes_ to a size_t to resolve warnings with BCB2007 + and removed the return value of get_version/set_version, they just + always do a return 0 which isn't usefull + + * ace/SPIPE_Stream.inl: + Directly use the local variables + +Sat Jul 21 06:26:30 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + + Disable check_for_exception_spec for now. This test will be reenabled and + the remaining usage of exception sepcifications will be zapped once the + beta is out. + +Sat Jul 21 00:48:31 UTC 2007 Steve Huston + + * ace/SOCK_Dgram_Mcast.cpp (subscribe_i): Removed duplicate IPv4 + code. + +Fri Jul 20 21:32:48 UTC 2007 Steve Huston + + * ace/MEM_Acceptor.cpp (accept): Use the sockaddr_in whose address was + taken to set ACE_INET_Addr; don't cast back and forth from sockaddr. + + * ace/Sock_Connect.cpp (get_bcast_addr): No need to cast a pointer + simply to pass it to ACE_OS::memcpy(). Avoids a possible unaligned + access warning. + + * ace/SOCK_Dgram.inl (recv): Use sockaddr.sa_family to get the + address type; same field as sockaddr_in.sin_family and avoids + unaligned access warnings from HP aC++. + +Fri Jul 20 18:15:27 UTC 2007 Adam Mitz + + * NEWS: + + Added entries for the ACE_Vector::swap() fix and Microsoft PSDK + 64-bit compiler support. + +Fri Jul 20 14:44:40 UTC 2007 Wallace Zhang + + * contrib/FaCE/FaCE.mpc: + + Since we are not going to maintain this, label it as a + dummy project. + +Fri Jul 20 12:09:58 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + + enhanced and enabled check_for_exception_spec. + +Fri Jul 20 11:00:00 UTC 2007 Simon Massey + + * bin/tao_orb_tests.lst: + * bin/tao_other_tests.lst: + + Removed 2926 & 2936 tests from LynxOS, seems to be the + memory mapping problem again. + +Fri Jul 20 09:44:12 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added POA/Forwarding + +Fri Jul 20 08:48:12 UTC 2007 Johnny Willemsen + + * examples/APG/Processes/Spawn.cpp: + * examples/APG/Reactor/Timers.cpp: + Added missing includes + +Fri Jul 20 08:40:12 UTC 2007 Johnny Willemsen + + * ace/OS_NS_Thread.cpp: + Use ACE_HAS_POSIX_SEM_TIMEOUT instead of ACE_HAS_POSIX_TIMEOUT. + This fixes bugzilla 2947 + + * ace/OS_NS_time.inl (gethrtime): + Reshuffeld the implementation to make some checks less complex + + * ace/Service_Gestalt.h: + Doxygen fixes + +Fri Jul 20 07:36:00 UTC 2007 Simon Massey + + * ace/Thread_Manager.cpp: + + I should stop trying to second guess myself, the derived class + has a protected destructor! + +Fri Jul 20 03:22:02 UTC 2007 Abdullah Sowayan + + * examples/APG/Active_Objects/AO.cpp: + * examples/APG/Active_Objects/AO2.cpp: + * examples/APG/Logging/Trace_Return.cpp: + * examples/APG/Logging/Wrap_Macros.cpp: + * examples/APG/Processes/Spawn.cpp: + * examples/APG/Reactor/HAStatus.cpp: + * examples/APG/Reactor/Timers.cpp: + * examples/APG/Signals/SigInfo.cpp: + * examples/APG/Sockets/Server.cpp: + * examples/APG/Streams/Answerer.cpp: + * examples/APG/ThreadManagement/Async_Cancel.cpp: + * examples/APG/ThreadPools/LF_ThreadPool.cpp: + * examples/APG/ThreadSafety/Semaphore.cpp: + * examples/APG/Threads/Condition_Variables.cpp: + * examples/ASX/CCM_App/CCM_App.cpp: + * examples/ASX/Event_Server/Event_Server/Options.cpp: + * examples/ASX/Message_Queue/buffer_stream.cpp: + * examples/ASX/UPIPE_Event_Server/Options.cpp: + * examples/ASX/UPIPE_Event_Server/event_server.cpp: + * examples/C++NPv1/Logging_Client.cpp: + * examples/C++NPv1/Logging_Handler.cpp: + * examples/C++NPv1/Logging_Server.cpp: + * examples/C++NPv1/Process_Per_Connection_Logging_Server.cpp: + * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: + * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: + * examples/C++NPv2/Client_Logging_Daemon.cpp: + * examples/C++NPv2/Reactor_Logging_Server_T.cpp: + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: + * examples/C++NPv2/Server_Shutdown.cpp: + * examples/C++NPv2/TP_Reactor_Logging_Server.cpp: + * examples/C++NPv2/display_logfile.cpp: + * examples/ConfigViewer/ValueDlg.cpp: + * examples/Connection/misc/Connection_Handler.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-Msg-client.cpp: + * examples/IPC_SAP/SOCK_SAP/C-inserver.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-memclient.cpp: + * examples/IPC_SAP/SOCK_SAP/FD-unclient.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-client-simple.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-client.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-server-fancy.cpp: + * examples/Map_Manager/test_hash_map_manager.cpp: + * examples/Mem_Map/IO-tests/IO_Test.cpp: + * examples/OS/Process/process.cpp: + * examples/QOS/Diffserv/diffserv_test.cpp: + * examples/QOS/Diffserv/server.cpp: + * examples/Reactor/Dgram/CODgram.cpp: + * examples/Reactor/Dgram/Dgram.cpp: + * examples/Reactor/Misc/pingpong.cpp: + * examples/Reactor/Misc/test_demuxing.cpp: + * examples/Reactor/Misc/test_early_timeouts.cpp: + * examples/Reactor/Misc/test_event_handler_t.cpp: + * examples/Reactor/Misc/test_reactors.cpp: + * examples/Reactor/Multicast/Log_Wrapper.cpp: + * examples/Reactor/Multicast/client.cpp: + * examples/Reactor/Proactor/post_completions.cpp: + * examples/Reactor/Proactor/simple_test_proactor.cpp: + * examples/Reactor/Proactor/test_aiocb.cpp: + * examples/Reactor/Proactor/test_aiosig.cpp: + * examples/Reactor/Proactor/test_aiosig_ace.cpp: + * examples/Reactor/Proactor/test_end_event_loop.cpp: + * examples/Reactor/Proactor/test_proactor.cpp: + * examples/Reactor/Proactor/test_proactor2.cpp: + * examples/Reactor/Proactor/test_proactor3.cpp: + * examples/Reactor/Proactor/test_udp_proactor.cpp: + * examples/Reactor/WFMO_Reactor/Handle_Close.cpp: + * examples/Reactor/WFMO_Reactor/Multithreading.cpp: + * examples/Reactor/WFMO_Reactor/Prerun_State_Changes.cpp: + * examples/Reactor/WFMO_Reactor/Removals.cpp: + * examples/Reactor/WFMO_Reactor/Suspended_Removals.cpp: + * examples/Reactor/WFMO_Reactor/Talker.cpp: + * examples/Service_Configurator/IPC-tests/client/local_fifo_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_spipe_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_dgram_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_stream_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_thr_stream_client_test.cpp: + * examples/Shared_Malloc/Options.cpp: + * examples/Synch/proc_sema.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Server.cpp: + * examples/Threads/barrier2.cpp: + * examples/Threads/future1.cpp: + * examples/Threads/future2.cpp: + * examples/Threads/manual_event.cpp: + * examples/Threads/task_five.cpp: + * examples/Threads/task_four.cpp: + * examples/Threads/task_three.cpp: + * examples/Threads/task_two.cpp: + * examples/Threads/thread_pool.cpp: + * examples/Threads/tss1.cpp: + * examples/Threads/wfmo.cpp: + * examples/Web_Crawler/Options.cpp: + + Fixed ACE_OS fuzz warnings. Use ACE_OS calls instead of raw OS functions + where possible. If fuzz detected a false-positive, then disable + the ACE_OS fuzz check for that section of the code. + +Thu Jul 19 23:33:05 UTC 2007 Steve Huston + + * ace/Event_Handler.cpp (ctor): Put reference_count_ init back in the + initializer list. Reverts: + Thu Jul 19 17:15:42 UTC 2007 Steve Huston + because a newer compiler (A.06.13) resolves the warning. Thanks + to Johnny for noticing this. + +Thu Jul 19 19:54:22 UTC 2007 Adam Mitz + + * ace/Numeric_Limits.h: + + Use the macro ACE_LACKS_NUMERIC_LIMITS_64_BIT_TYPES to control + whether or not ACE should define its own std::numeric_limits<> + specializations for the 64-bit integral types. + + * ace/OS_NS_stdio.inl: + * ace/OS_NS_stdio.cpp: + + The Platform SDK 64-bit compiler works like vc71 (not vc8) with + respect to the arguments needed for vswprintf(). + + * ace/OS_NS_sys_stat.h: + + Use the macro ACE_MSVC_USES_DOUBLE_UNDERSCORE_STAT64 to control + whether ACE_stat should be __stat64 instead of _stat64 (MSVC only). + + * ace/checked_iterator.h: + + The Platform SDK 64-bit compiler doesn't have checked iterators. + + * ace/config-lite.h: + + Use the macro ACE_HAS_BROKEN_STD_REVERSE_ITERATOR to indicate that + the std::reverse_iterator class template needs a 2nd argument. + + * ace/config-win32-msvc-8.h: + + With the Platform SDK compiler (detected using _MSC_FULL_VER), we + will now define ACE_AUTO_PTR_LACKS_RESET along with the three macros + listed above and other macros needed to get a good build. This only + applies to the x64 (aka AMD64/EMT64) target. + +Thu Jul 19 17:15:42 UTC 2007 Steve Huston + + * ace/Event_Handler.cpp (ctor): Put the init of reference_count_ + in-body to avoid value-copied-to-temporary. + + * ace/Log_Msg.cpp (exists): No need for casting a void* to + ACE_Log_Msg* just to check for 0. + + * ace/OS_NS_Thread.cpp (event_init): Remove unreachable return. + + * ace/Svc_Conf_y.cpp: Suppress warning 2111 "statement is unreachable" + for HP aC++ on Itanium. + + * include/makeinclude/platform_hpux_aCC.GNU: Remove PRELIB. PRELIB + for instantiating templates prior to the real link hasn't been + needed for many years. Hopefully all the ancient compiler users + have upgraded. + +Thu Jul 19 14:00:00 UTC 2007 Simon Massey + + * ace/Thread_Manager.cpp: + + This cast is actually not needed and was incorrect anyway. + +Thu Jul 19 12:40:00 UTC 2007 Simon Massey + + * tests/OS_Test.cpp: + * tests/Map_Test.cpp: + + Change all ACE_ASSERTS to THIS_IS_NOT_AN_ASSERT_IT_IS_A_NON_DEBUG_TEST_AS_WELL + as these tests are relying on the assert doing the actual run-time + test and error reporting. These SHOULD NOT be asserts but always + compiled and valid (otherwise the actual test code themselves is + pointless). MORRAL: DO NOT IGNORE UNUSED VARIABLE WARNINGS ISSUED + BY A COMPILER. + +Thu Jul 19 11:32:05 UTC 2007 Abdullah Sowayan + + * protocols/ace/TMCast/Group.hpp: + * protocols/ace/TMCast/Group.cpp: + + Zap the usage of exception specifications. + +Thu Jul 19 10:29:57 UTC 2007 Vadym Ridosh + + * bin/tao_other_tests.lst: + Disabled TAO/examples/PluggableUDP/tests/Performance in single + threaded builds. + +Thu Jul 19 10:18:57 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + Disable visibility with Intel C++ 10.0, we do have some errors + +Thu Jul 19 09:52:57 UTC 2007 Johnny Willemsen + + * ace/config-icc-common.h: + Updated export/import macros to be used with Intel C++ + + * include/makeinclude/platform_linux_icc.GNU: + Enable visibility with Intel C++ 10.0. It results in a few + warnings but seems to work. + + * ace/Atomic_Op.h: + Updated define to check for Intel C++ + + * ace/config-rtems.h: + Removed reference to KCC + +Thu Jul 19 07:32:57 UTC 2007 Johnny Willemsen + + * tests/SOCK_Netlink_Test.cpp: + Added missing include + +Thu Jul 19 03:00:57 UTC 2007 Abdullah Sowayan + + * tests/Auto_Event_Test.cpp: + * tests/Buffer_Stream_Test.cpp: + * tests/Bug_1890_Regression_Test.cpp: + * tests/Bug_2540_Regression_Test.cpp: + * tests/Bug_2609_Regression_Test.cpp: + * tests/Bug_2659_Regression_Test.cpp: + * tests/Bug_2912_Regression_Test.cpp: + * tests/CE_fostream.cpp: + * tests/Conn_Test.cpp: + * tests/Dev_Poll_Reactor_Test.cpp: + * tests/Dynamic_Test.cpp: + * tests/FlReactor_Test.cpp: + * tests/Future_Set_Test.cpp: + * tests/Future_Test.cpp: + * tests/High_Res_Timer_Test.cpp: + * tests/IOStream_Test.cpp: + * tests/Log_Msg_Backend_Test.cpp: + * tests/Logging_Strategy_Test.cpp: + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + * tests/Malloc_Test.cpp: + * tests/Manual_Event_Test.cpp: + * tests/Message_Block_Test.cpp: + * tests/Multicast_Test.cpp: + * tests/Multicast_Test_IPV6.cpp: + * tests/Notify_Performance_Test.cpp: + * tests/OS_Test.cpp: + * tests/Pipe_Test.cpp: + * tests/Priority_Reactor_Test.cpp: + * tests/Priority_Task_Test.cpp: + * tests/Proactor_Scatter_Gather_Test.cpp: + * tests/Proactor_Test.cpp: + * tests/Proactor_Test_IPV6.cpp: + * tests/QtReactor_Test.cpp: + * tests/Reactor_Notify_Test.cpp: + * tests/Reactor_Performance_Test.cpp: + * tests/Reactors_Test.cpp: + * tests/Recursive_Condition_Bug_Test.cpp: + * tests/Refcounted_Auto_Ptr_Test.cpp: + * tests/SOCK_Dgram_Bcast_Test.cpp: + * tests/SOCK_Netlink_Test.cpp: + * tests/SOCK_SEQPACK_SCTP_Test.cpp: + * tests/SPIPE_Test.cpp: + * tests/SSL/SSL_Asynch_Stream_Test.cpp: + * tests/SSL/Thread_Pool_Reactor_SSL_Test.cpp: + * tests/Semaphore_Test.cpp: + * tests/TP_Reactor_Test.cpp: + * tests/Task_Ex_Test.cpp: + * tests/Task_Test.cpp: + * tests/Thread_Creation_Threshold_Test.cpp: + * tests/Thread_Pool_Reactor_Resume_Test.cpp: + * tests/Thread_Pool_Reactor_Test.cpp: + * tests/Thread_Pool_Test.cpp: + * tests/TkReactor_Test.cpp: + * tests/Token_Strategy_Test.cpp: + * tests/Unload_libACE.cpp: + * tests/XtAthenaReactor_Test.cpp: + * tests/XtMotifReactor_Test.cpp: + + Fixed ACE_OS fuzz warnings. Use ACE_OS calls instead of raw OS functions + where possible. If fuzz detected a false-positive, then disable + the ACE_OS fuzz check for that section of the code. + +Wed Jul 18 20:25:07 UTC 2007 Steve Huston + + * tests/Proactor_Test.{h cpp}: Fixed to log operation and byte counts + correctly on both 32 and 64 bit platforms. + +Wed Jul 18 12:59:27 UTC 2007 Johnny Willemsen + + * ace/Basic_Types.h: + Added special ACE_LONGLONG_TO_PTR for OpenVMS + + * ace/Dynamic_Service_Base.h: + * ace/Service_Config.cpp: + Layout change + +Wed Jul 18 06:45:27 UTC 2007 Douglas C. Schmidt + + * 45 and going strong! + +Wed Jul 18 05:02:49 UTC 2007 Abdullah Sowayan + + * ace/Activation_Queue.cpp: + * ace/Future.cpp: + * apps/JAWS/clients/WebSTONE/src/bench.c: + * apps/JAWS/clients/WebSTONE/src/genrand.c: + * apps/JAWS/clients/WebSTONE/src/getopt.c: + * apps/JAWS/clients/WebSTONE/src/gettimeofday.c: + * apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/http.h: + * apps/JAWS/clients/WebSTONE/src/sysdep.h: + * apps/JAWS/clients/WebSTONE/src/webmaster.c: + * contrib/FaCE/Main.cpp: + * contrib/minizip/unzip.c: + * contrib/minizip/unzip.h: + * contrib/minizip/zip.h: + * examples/Threads/thread_pool.cpp: + * tests/ACE_Init_TestDlg.h: + * tests/Message_Block_Test.cpp: + * tests/Network_Adapters_Test.cpp: + + Fixed Fuzz warnings. Zapped the usage of NULL and replaced every + NULL with 0 instead. + +Tue Jul 17 18:38:53 UTC 2007 Steve Huston + + * examples/Reactor/Multicast/Log_Wrapper.cpp (open): Removed the + ACE_LACKS_UTSNAME_T block as it's no longer needed. See + Mon Jul 16 21:00:46 UTC 2007 Steve Huston + +Tue Jul 17 18:21:25 UTC 2007 Steve Huston + + * ace/Process.h: Expanded the documentation for creation_flags(). + +Tue Jul 17 18:07:01 UTC 2007 Steve Huston + + * ace/os_include/os_intrin.h: Corrected the prototypes for + InterlockedExchange[Add] on VC7.1. Thanks to Juraj Ivancic + for this fix. + +Tue Jul 17 10:20:24 UTC 2007 Johnny Willemsen + + * examples/Reactor/Proactor/test_proactor2.cpp: + * examples/Reactor/Proactor/test_proactor3.cpp: + Fixed some compile warnings/errors + +Tue Jul 17 08:36:24 UTC 2007 Johnny Willemsen + + * ace/POSIX_Proactor.h: + * ace/SUN_Proactor.h: + Doxygen updates + + * ace/Service_Gestalt.cpp: + Layout changes + +Tue Jul 17 04:03:24 UTC 2007 Abdullah Sowayan + + * Kokyu/Dispatch_Deferrer.cpp: + * ace/FoxReactor/FoxReactor.h: + * apps/JAWS/clients/Caching/http_client.cpp: + * apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/crit.h: + * apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/dll.h: + * apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/file.h: + * apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/nterrors.h: + * apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/sem.h: + * apps/JAWS/clients/WebSTONE/src/parse_file_list.c: + * apps/JAWS/clients/WebSTONE/src/rexec.c: + * apps/JAWS/clients/WebSTONE/src/sysdep.h: + * apps/JAWS/clients/WebSTONE/src/sysdep.c: + * apps/JAWS/clients/WebSTONE/src/webclient.c: + * apps/JAWS/stress_testing/http_tester.cpp: + * apps/JAWS/stress_testing/util.cpp: + * apps/JAWS2/JAWS/Parse_Headers.cpp: + * apps/JAWS3/bench/rqfiles.cpp: + * apps/JAWS3/jaws3/Cached_Allocator_T.cpp: + * contrib/FaCE/CE_Screen_Output.cpp: + * contrib/FaCE/FaCE.cpp: + * contrib/FaCE/FaCE_OS.h: + * contrib/minizip/crypt.h: + * contrib/minizip/ioapi.c: + * contrib/minizip/miniunz.c: + * contrib/minizip/minizip.c: + * contrib/minizip/mztools.c: + * contrib/minizip/unzip.c: + * contrib/minizip/zip.c: + * examples/APG/Shared_Memory/PI_Malloc.cpp: + * examples/IPC_SAP/ATM_SAP/CPP-client.cpp: + * examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFCDlg.h: + * examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFCDlg.cpp: + * examples/Misc/test_XtReactor1.cpp: + * examples/Misc/test_XtReactor2.cpp: + * examples/Naming/test_multiple_contexts.cpp: + * examples/Naming/test_writers.cpp: + * examples/OS/Process/imore.cpp: + * examples/OS/Process/process.cpp: + * examples/Reactor/Multicast/Log_Wrapper.cpp: + * examples/Reactor/Proactor/test_proactor2.cpp: + * examples/Reactor/WFMO_Reactor/Window_Messages.cpp: + * examples/Threads/task_three.cpp: + * examples/Timer_Queue/Driver.cpp: + * netsvcs/clients/Naming/Dump_Restore/createfile.cpp: + * netsvcs/lib/TS_Clerk_Handler.cpp: + * performance-tests/Synch-Benchmarks/context.c: + * performance-tests/TTCP/ACE-C++/wrapper-new-ttcp.cpp: + * performance-tests/TTCP/C/new-ttcp.cpp: + * performance-tests/UDP/udp_test.cpp: + * tests/Bug_2497_Regression_Test.cpp: + * tests/Bug_2912_Regression_Test.cpp: + * tests/Dirent_Test.cpp: + * tests/OS_Test.cpp: + * tests/SOCK_Netlink_Test.cpp: + * tests/Sigset_Ops_Test.cpp: + * tests/Unload_libACE.cpp: + + Fixed Fuzz warnings. Zapped the usage of NULL and replaced every + NULL with 0 instead. + +Tue Jul 17 02:48:10 UTC 2007 Phil Mesnier + + * bin/msvc_static_order.lst: + Fixed misspelled directory name. + +Mon Jul 16 21:00:46 UTC 2007 Steve Huston + + * ace/OS_NS_sys_utsname.{h cpp}: When ACE needs to define a + ACE_utsname struct (for sytems where ACE_LACKS_UTSNAME_T) define + the character strings as char[], not ACE_TCHAR[], to make it + the same across all platforms. Unifies handling for this struct + and fixes Bugzilla #2665. + + * NEWS: Describes the above change in ACE_utsname's types. + + * tests/Enum_Interfaces_Test.cpp: Remove the specialized handling for + ACE_utsname depending on the ACE_LACKS_UTSNAME setting; it's all the + same now. + +Mon Jul 16 20:15:22 UTC 2007 Steve Huston + + * tests/run_test.pl: When checking for Starting/Ending lines in + child sublogs, allow one Process_Manager_Test sublog to miss its + Ending line. One of the child processes gets terminated and on + some platforms (notably HP-UX 11 on PA-RISC) this leaves a short + log file. Since this is the intended purpose of the test, don't + flag it as a failure. + +Mon Jul 16 19:29:56 UTC 2007 Steve Huston + + * ace/POSIX_Proactor.cpp (ACE_AIOCB_Notify_Pipe_Manager): Set pipe's + read handle blocking, else it constantly completes reads of 0 + bytes, EWOULDBLOCK. Correcting this makes HP-UX PA-RISC + Proactor_Timer_Test complete. + +Mon Jul 16 18:57:12 UTC 2007 Johnny Willemsen + + * examples/Reactor/Proactor/Proactor.mpc: + Temporarily removed proactor2 and 3, to cleanup scoreboard + +Mon Jul 16 10:01:12 UTC 2007 Johnny Willemsen + + * examples/Reactor/Proactor/test_aiosig.cpp: + Fixed compile problems, thanks to Craig Rodrigues + for reporting these + + * examples/Reactor/Proactor/Proactor.mpc: + Added proactor2 and proactor3 + + * examples/Reactor/Proactor/test_proactor3.cpp: + Fixed compile warnings + +Sun Jul 15 18:45:03 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + + Enhaced NULL detection. + Re-enable the check for NULL. + +Sun Jul 15 14:52:12 UTC 2007 Johnny Willemsen + + * ace/Future.cpp: + Reverted the change of yesterday to use prefix decrement, breaks the + future code + +Sun Jul 15 13:08:50 UTC 2007 Abdullah Sowayan + + * ace/Malloc.h: + * ace/OS_NS_stdio.inl: + * ace/OS_NS_stropts.cpp: + * ace/OS_NS_unistd.cpp: + * ace/Object_Manager_Base.cpp: + * ace/QoS/QoS_Session_Impl.cpp: + * ace/Rtems_init.c: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_SEQPACK_Connector.inl: + * ace/SSL/SSL_Asynch_BIO.cpp: + * ace/SSL/SSL_Context.cpp: + * ace/Sock_Connect.cpp: + * ace/os_include/os_stddef.h: + + Fixed Fuzz warnings regarding the usage of NULL. Prefer the usage of 0 instead + of NULL. + +Sun Jul 15 04:21:44 UTC 2007 Phil Mesnier + + * bin/msvc_static_order.lst: + Add a new pre-build project to the list. This resolves msvc + static build errors. + +Sat Jul 14 15:03:39 UTC 2007 Abdullah Sowayan + + * performance-tests/Misc/childbirth_time.cpp: + * performance-tests/Misc/preempt.cpp: + * performance-tests/Misc/test_guard.cpp: + * performance-tests/Misc/test_naming.cpp: + * performance-tests/RPC/client.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_clt.cpp: + * performance-tests/SCTP/SOCK_STREAM_clt.cpp: + * performance-tests/SCTP/hist.cpp: + * performance-tests/Server_Concurrency/Queue_Based_Workers/RT_CORBA_Workers.cpp: + * performance-tests/Synch-Benchmarks/Base_Test/Baseline_Test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/guard_test.cpp: + * performance-tests/TCP/tcp_test.cpp: + * performance-tests/TTCP/C/new-ttcp.cpp: + * performance-tests/UDP/udp_test.cpp: + + Fixed ACE_OS fuzz warnings. Use ACE_OS calls instead of raw OS functions + where possible. If fuzz detected a false-positive, then disable + the ACE_OS fuzz check for that section of the code. + +Sat Jul 14 07:47:12 UTC 2007 Johnny Willemsen + + * ace/config-macosx-tiger.h: + Removed commented out defines + + * ace/Future.cpp: + Use prefix decrement + + * ace/Handle_Set.h: + * ace/Timer_Queue_T.h: + Doxygen improvements + + * ace/Handle_Set.inl: + Added ACE_HAS_NONCONST_FD_ISSET. Is for MacOS Leopard + Thanks to Dennis Chernoivanov for reporting + this. This is part of bugzilla 2984 + + * ace/High_Res_Timer.cpp: + Const improvement + + * ace/OS_NS_stropts.cpp: + * ace/OS_NS_Thread.inl + Layout changes + + * ace/Timer_Queue_Adapters.cpp: + Const changes + +Sat Jul 14 02:26:28 UTC 2007 Abdullah Sowayan + + * apps/JAWS/clients/WebSTONE/src/webclient.c: + * apps/JAWS/stress_testing/http_tester.cpp: + * apps/mkcsregdb/mkcsregdb.cpp: + * apps/soreduce/soreduce.cpp: + + Use ACE_TMAIN instead of main. + + * apps/mkcsregdb/mkcsregdb.mpc: + + Update to explicitly have exename in the mpc file. + +Sat Jul 14 01:28:25 UTC 2007 Phil Mesnier + + * bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm: + Fix for getting the right base directory for Kokyu based TAO + examples and tests. + +Fri Jul 13 23:05:13 UTC 2007 Steve Huston + + * tests/Bug_2912_Regression_Test.cpp: Don't run this test on Linux; + it requires multiple outstanding asynch I/O ops, which Linux + can't hack at this time (at least up thru RHEL 4). + +Fri Jul 13 22:39:43 UTC 2007 Steve Huston + + * tests/run_test.lst: Add !BAD_AIO to Bug_2912_Regression_Test since + it relies on ACE_Proactor which can't work if there's BAD_AIO. + +Fri Jul 13 22:15:05 UTC 2007 Steve Huston + + * ace/WIN32_Proactor.cpp (handle_events): Don't try to dispatch a + completion if there's no OVERLAPPED pointer specified - it's just + a 'ping'. Thanks to Paxton Mason for reporting this. Fixes Bugzilla + #1526. + +Fri Jul 13 17:18:02 UTC 2007 Ossama Othman + + * NEWS: + + Added note about minor API change to ACE::daemonize(). + +Fri Jul 13 16:49:31 UTC 2007 Ossama Othman + + * ace/Svc_Conf.h (ace_yyerror): + * ace/Svc_Conf.y (ace_yyerror): + * ace/Svc_Conf_y.cpp (ace_yyerror): + + Backed out change to message parameter. It is once again a + narrow string. The generated parser doesn't support wide + strings, and passes narrow strings to ace_yyerror(). For the + moment, convert the narrow string message parameter to an + ACE_TCHAR using the ACE_CHAR_TO_TCHAR macro instead. Once the + parser (and lexer) support passing wide strings to + ace_yyerror(), the use of ACE_CHAR_TO_TCHAR can be removed. + +Fri Jul 13 16:41:31 UTC 2007 Ossama Othman + + * ace/Svc_Conf.h (ace_yyerror): + + Updated the prototype signature to match the latest + implementation signature. Thanks to Steve Huston for pointing + out the error. + +Fri Jul 13 08:13:19 UTC 2007 Vadym Ridosh + + * bin/tao_other_tests.lst: + Excluded examples/PluggableUDP/tests/Performance from corba_e_compact + and corba_e_micro builds. + +Fri Jul 13 03:02:58 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + + Enhanced regular expression for exception specification check. + + Increased level for the following checks: + check_for_lack_ACE_OS + check_for_exception_spec + check_for_NULL + check_for_improper_main_declaration + + There are way too many fuzz warnings now, I will enable those checks + again once I'm done zapping the current warnings. That way fuzz can be + useful again to folks that check code in. + +Thu Jul 13 00:04:25 UTC 2007 Ossama Othman + + * ace/ACE.cpp (daemonize): + * ace/ACE.h (daemonize): + + Changed "close_all_handles" parameter to a bool to better + reflect its purpose. + + * ace/CDR_Stream.cpp (grow_and_adjust): + + Replaced C style casts with C++ casts. + + (skip_wchar, read_wchar): + + Cleaned up local/temporary variables. + + (read_string, read_wstring): + + Fixed leak on exception. + + (skip_wstring): + + No need for a boolean comparison in a conditional. Use the + boolean value directly. + + * ace/Condition_Thread_Mutex.cpp: + * ace/Condition_Thread_Mutex.h: + + Removed const qualifier from ACE_Thread_Mutex parameter in + ACE_Condition_Thread_Mutex constructors. It is misleading since + the ACE_Thread_Mutex must be mutable, and is used in that way. + + * ace/DLL.cpp (operator=): + + Simplified the ACE_DLL assignment operator, and simultaneously + made it strongly exception safe. + + * ace/Service_Gestalt.cpp: + + Whitespace/indentation correction. + + * ace/Svc_Conf.y (yyerror): + * ace/Svc_Conf_y.cpp (ace_yyerror): + + Corrected message string parameter type. s/char/ACE_TCHAR/. + + Improved error message to make it clear the error is coming from + ACE. + +Thu Jul 12 16:29:12 UTC 2007 Johnny Willemsen + + * tests/Bug_2975_Regression.cpp: + * tests/test.mpc: + New regression test for 2975, thanks to Pavel Zaichenko + for making this test + +Thu Jul 12 12:07:27 UTC 2007 Vadym Ridosh + + * bin/tao_other_tests.lst: + * bin/tao_orb_tests.lst: + Added IPv6 tests to current DIOP tests and enabled + examples/PluggableUDP/tests/Performance test for usual and + IPv6 testing. + +Thu Jul 12 01:27:12 UTC 2007 Johnny Willemsen + + * ace/Atomic_Op.cpp: + Updated some comments + + * ace/Atomic_Op.h: + Also enable the intel assembly when using Intel C++ or when + running on EM64T. + +Thu Jul 12 01:15:12 UTC 2007 Johnny Willemsen + + * ace/Atomic_Op.{h,cpp}: + When using Intel assembly, just define ACE_HAS_INTEL_ASSEMBLY in + the header file and check this in the cpp file, much easier to + maintain then all explicit checks in the cpp file + +Wed Jul 11 20:17:07 UTC 2007 Steve Huston + + * ace/config-aix-5.x.h: For IBM compilers Visual Age C++ 6 and up, + use custom template export macros to correctly generate weak + symbols for importable templates. Allows correct reuse of templates + instantiated in a shared library - in this case, fixes failures + in Based_Pointer_Test where singletons from ACE and another shared + library did not resolve to the same pointer. + + * tests/Based_Pointer_Test.cpp: Use %@, not %x, to log pointer values. + +Wed Jul 11 17:02:12 UTC 2007 Johnny Willemsen + + * bin/fuzz.pl: + Increased level for the tab check, something to fix in + the future + +Tue Jul 10 17:06:10 UTC 2007 Steve Huston + + * ace/config-sunos5.10.h: Added correct printf() modifiers for + ACE_SIZE_T_FORMAT_SPECIFIER and ACE_SSIZE_T_FORMAT_SPECIFIER. + +Tue Jul 10 16:07:38 UTC 2007 Steve Huston + + * tests/Basic_Types_Test.cpp: + * tests/Time_Value_Test.cpp: Moved the ACE_U_LongLong checks from + Time_Value_Test, where they were artificially wedged in for Sun, + to Basic_Types_Test. The ACE_U_LongLong stuff was put in place + (Tue Aug 26 11:06:45 1997 David L. Levine ) + during what was apparantly some tumultuous platform times, then + subsequently enabled and disabled in various platforms as needed + to resolve side-affects. If it's still needed on any platforms + that don't have native long long, it'll be run. + +Tue Jul 10 14:30:50 UTC 2007 Phil Mesnier + + * ace/INET_Addr.cpp: + Reverted AIX-specific change. It didn't work. + +Tue Jul 10 13:13:12 UTC 2007 Johnny Willemsen + + * ace/config-vxworks6.2.h: + * ace/config-vxworks6.3.h: + * ace/config-vxworks6.4.h: + WindRiver has released a patch for TSR560446, so slightly changed the way + we check whether to define _C99 so that when the patch for the TSR has been + applied we don't define _C99 manually + +Tue Jul 10 06:25:48 UTC 2007 Vladimir Zykov + + * bin/PerlACE/Process_Unix.pm: + Now check_return_value will return 255 instead of 0 at the end + when it reports an error. + +Mon Jul 9 12:25:12 UTC 2007 Johnny Willemsen + + * ace/OS_NS_unistd.cpp (fork_exec): Improved free allocation memory + in the case where Windows CreateProcess() fails using + ACE_Auto_Basic_Array_Ptr. Resolves Bugzilla #2983. + + * ace/Service_Config.cpp: + * ace/CDR_Stream.h: + Layout change + + * ace/Object_Manager.cpp: + * ace/Object_Manager_Base.cpp: + * ace/Object_Manager_Base.h: + Changed dynamically_allocated to a real bool + +Sun Jul 8 22:05:12 UTC 2007 Johnny Willemsen + + * ace/OS_NS_stdio.inl (cuserid): + Only use L_cuserid when it is defined, fixes a problem on MacOS X 9. + Thanks to Dennis Chernoivanov for reporting + this. This is part of bugzilla 2984 + +Sat Jul 7 17:45:34 UTC 2007 Phil Mesnier + + * NEWS: + + Note about a minor change of behavior for ACE_INET_Addr setting + with a string on IPv6 enabled builds. + + * ace/INET_Addr.cpp: + + More tweaks to setting the address based on a hostname string + with IPv6 support compiled in. This cleans up errors on AIX. + +Fri Jul 6 21:33:47 UTC 2007 Steve Huston + + * apps/FaCE: + * contrib/FaCE: Moved the FaCE utility from apps to contrib. It's a + useful utility for testing ACE+TAO apps on WinCE, but is not an + ACE app. It's also not particularly well-maintained, but is a + useful utility to keep for WinCE developers. + + * NEWS: Noted the above move. + +Fri Jul 6 15:24:48 UTC 2007 Steve Huston + + * ace/OS_NS_unistd.cpp (fork_exec): Free allocated memory in the case + where Windows CreateProcess() fails. Thanks to Martin Kolleck for + this fix. Resolves Bugzilla #2983. + +Fri Jul 6 14:52:00 UTC 2007 Steve Huston + + * ace/OS_NS_Thread.inl: + * ace/os_include/os_semaphore.h: Reversed the default for platforms + that do have POSIX semaphores (ACE_HAS_POSIX_SEM) but do not have + native timed-wait functionality (ACE_HAS_POSIX_SEM_TIMEOUT). They + used to include the timed wait capability only if the + ACE_HAS_POSIX_SEM_TIMEOUT_EMULATION macro was set; now they will + always include the timed wait emulation unless the + ACE_DISABLE_POSIX_SEM_TIMEOUT_EMULATION macro is set. This + automatically extends the capability where it is needed but leaves + a way for it to be disabled for users who really want to save the + memory footprint and don't need timed waits. + + * ace/config-aix-5.x.h: Removed ACE_HAS_POSIX_SEM_TIMEOUT_EMULATION. + +Fri Jul 6 10:10:58 UTC 2007 Jeff Parsons + + * bin/MakeProjectCreator/config/support_ostream.mpb: + + New file, containing a feature, inherited in ace.mpc that is + turned on by modifying gen_ostream = 0 in default.features. + + * ace/ace.mpc: + + Added inheritance of the above new feature. + + * ace/CDR_Stream.h: + * ace/CDR_Stream.cpp: + + Guarded the recently added ostream operators for ACE_CDR::from_char, + from_wchar, from_octet and from_boolean with a flag that + is defined when the above new feature is turned on. + +Thu Jul 5 18:56:11 UTC 2007 Steve Huston + + * tests/SOCK_Connector_Test.cpp: Removed the AIX 4.3 condition for + not calling sethostent(1). The condition was coded incorrectly such + that it was used for AIX 5.3; since AIX 4.3 is no longer supported, + the check was removed instead of changed. Thanks to Phil Mesnier for + calling this to my attention. + +Thu Jul 5 16:03:29 UTC 2007 Steve Huston + + * tests/Semaphore_Test.cpp: Removed the platform restrictions for + avoiding the semaphore timed-acquire functionality. There should + be available support for all (or most) platforms, so we need to + shake out which have it natively and which need the emulation. + +Thu Jul 5 07:35:45 UTC 2007 Simon Massey + + * ace/Thread_Manager.cpp: + + Fixed Bugzilla 2972 - Memory leak of ACE_Thread_Adapter on spawn. + +Wed Jul 4 15:45:45 UTC 2007 Vladimir Zykov + + * bin/PerlACE/Process_Unix.pm: + + Fixed a problem that existed on SunOS when arguments of spawned + process contained any of [] and exec in that case was spawning a + new process instead of loading it in place of a process created + by fork. + +Wed Jul 4 06:02:38 UTC 2007 Abdullah Sowayan + + * protocols/ace/HTBP/HTBP_Filter.cpp: + * protocols/ace/HTBP/HTBP_Inside_Squid_Filter.cpp: + * protocols/ace/HTBP/HTBP_Outside_Squid_Filter.cpp: + * protocols/ace/RMCast/Acknowledge.cpp: + * protocols/ace/RMCast/Flow.cpp: + * protocols/ace/RMCast/Fragment.cpp: + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Reassemble.cpp: + * protocols/ace/RMCast/Retransmit.cpp: + * protocols/ace/RMCast/Simulator.cpp: + * protocols/ace/RMCast/Socket.cpp: + * protocols/ace/RMCast/Stack.cpp: + * protocols/ace/TMCast/Group.cpp: + * protocols/examples/RMCast/Send_Msg/Receiver.cpp: + * protocols/examples/RMCast/Send_Msg/Sender.cpp: + * protocols/tests/RMCast/Receiver.cpp: + * protocols/tests/RMCast/Sender.cpp: + + Fixed ACE_OS fuzz warnings. Use ACE_OS calls instead of raw OS functions + where possible. If fuzz detected a false-positive, then disable + the ACE_OS fuzz check for that section of the code. + +Tue Jul 3 21:04:59 UTC 2007 Steve Huston + + * ace/config-win32-common.h: Remove the include for CE. + It's not there for building CE using VS .NET 2005. + + * examples/Reactor/Multicast/Log_Wrapper.cpp: + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Simulator.cpp: Use ACE_OS::time() rather than + naked time(); fixes build error on WinCE. + + * examples/APG/Sockets/Basic.cpp: + * examples/APG/Sockets/Iovec.cpp: + * examples/Connection/misc/test_upipe.h: Use ACE_OS::write() rather + than naked write() and use ACE_STDOUT rather than fd 1. Fixes + WinCE build errors. + + * examples/Reactor/Misc/notification.cpp: + * examples/Reactor/Misc/test_demuxing.cpp: Avoid compile errors where + both SIGINT and SIGQUIT are stubbed to 0 (such as WinCE). + + * examples/OS/Process/OS_Process.mpc: Avoid this for WinCE. The code + uses plenty of naked Windows system calls that make no sense for CE. + + * examples/Log_Msg/Log_Msg_MFC/Log_Msg_MFC.mpc: Avoid this for WinCE. + The code sends ACE logging output to the Visual Studio debug + window, something not really possible using this code on CE. + + * examples/IPC_SAP/SOCK_SAP/sock_sap.mpc: Avoid wince for C-inserver. + It uses too much low-level system calls for CE to hack it. + + * tests/Malloc_Test.cpp: Cast the initializer for CHILD_BASE_ADDR + so the VC8 WinCE compiler can hack it. + + * apps/FaCE/CE_Screen_Output.cpp: + * apps/FaCE/FaCE.cpp: Reverted addition of ACE_OS from + Sat Jun 30 05:11:43 UTC 2007 Abdullah Sowayan + This utility doesn't make use of ACE except in very limited + situations. I disabled FUZZ checks for ACE_OS instead. + + * apps/FaCE.cpp: Use ACE_ARGV instead of ACE_CE_ARGV. The latter was + removed long ago when ACE_ARGV was improved to obviate it. See + Fri Mar 28 16:04:28 2003 Steve Huston + +Tue Jul 3 14:29:12 UTC 2007 Johnny Willemsen + + * ace/config-vxworks6.5.h: + * ace/Sock_Connect.cpp: + VxWorks 6.5 rtp doesn't have getifaddrs + +Tue Jul 3 13:08:42 UTC 2007 Jeff Parsons + + * ace/CDR_Stream.h: + + Moved ostream operator declarations out of the #else branch + of #if defined (__ACE_INLINE__), where they were mistakenly + put originally. + +Tue Jul 3 11:41:12 UTC 2007 Johnny Willemsen + + * ace/OS_Memory.h: + Use ::std instead of std to prevent problems when users + have XXX::YYY::std as namespace in their own code. This fixes + bugzilla 2976. Thanks to Pavel Zaichenko + for reporting this + +Mon Jul 2 15:59:28 UTC 2007 Adam Mitz + + * ace/Vector_T.h: + * ace/Vector_T.inl: + + Added a swap() member to Vector. Previously Vector inherited swap() + which would produce invalid results since the members declared in + Vector were not swapped. This fixes bugilla bug #2951. + + * tests/Vector_Test.cpp: + + Test for the change above. + +Mon Jul 2 14:36:25 UTC 2007 Adam Mitz + + * bin/generate_doxygen.pl: + + Fixed a logic error that resulted in manpage documentation even when + the option was not specified. + +Mon Jul 2 14:19:03 UTC 2007 Adam Mitz + + * docs/ACE-guidelines.html: + + Fixed incorrect statement about casts between pointers and longs. + +Mon Jul 2 12:03:36 UTC 2007 Jeff Parsons + + * bin/MakeProjectCreator/config/global.features: + + Added line 'gen_ostream = 0' so that the gen_ostream feature + can be inherited into tao.mpc but be turned off by default. + Thanks to Johnny Willemsen for + suggesting this approach to keeping the default footprint + of TAO from rising by default generation of ostream insertion + operators for all ORB-defined IDL types. + +Mon Jul 2 11:39:20 UTC 2007 Chad Elliott + + * ACE.mwc: + + Utilize the new 'associate' feature to decrease the amount of + hand editing required for automake generation. + + * bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm: + + Minor change to remove an extra new line. + +Mon Jul 2 09:40:12 UTC 2007 Johnny Willemsen + + * ace/os_include/sys/os_socket.h: + Defined SCM_RIGHTS when it is not defined yet + + * ace/Activation_Queue.{h,cpp}: + Changed delete_queue_ to a real bool + + * ace/Sig_Handler.h: + Doxygen improvements + +Mon Jul 2 09:01:12 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug 2936 regression + +Mon Jul 2 07:33:12 UTC 2007 Johnny Willemsen + + * bin/tao_other_tests.lst: + Added Bug 2926 regression + +Sun Jul 1 17:01:21 UTC 2007 Abdullah Sowayan + + * apps/drwho/PMC_All.cpp: + + Removed #include "ace/OS_NS_stdio.h" + + * apps/drwho/PMS_All.cpp: + + Added #include "ace/OS_NS_stdio.h" + + The include was introduced to the wrong file by mistake in + Sat Jun 30 16:19:57 UTC 2007 Abdullah Sowayan + +Sat Jun 30 16:19:57 UTC 2007 Abdullah Sowayan + + * apps/drwho/PMC_All.cpp: + * apps/drwho/PMC_Flo.cpp: + * apps/drwho/PMS_Flo.cpp: + * apps/drwho/PMS_Ruser.cpp: + * apps/drwho/PM_Server.cpp: + + Fixed compile-time error. Added missing #include "ace/OS_NS_stdio.h". + +Sat Jun 30 05:11:43 UTC 2007 Abdullah Sowayan + + * apps/FaCE/CE_Screen_Output.cpp: + * apps/FaCE/FaCE.cpp: + * apps/JAWS/clients/Caching/http_client.cpp: + * apps/JAWS/server/HTTP_Response.cpp: + * apps/JAWS/server/Parse_Headers.cpp: + * apps/JAWS/stress_testing/benchd.cpp: + * apps/JAWS/stress_testing/connection.cpp: + * apps/JAWS/stress_testing/http_tester.cpp: + * apps/JAWS/stress_testing/stats.cpp: + * apps/JAWS/stress_testing/util.cpp: + * apps/JAWS2/JAWS/Server.cpp: + * apps/JAWS3/bench/average.cpp: + * apps/JAWS3/bench/mkfiles.cpp: + * apps/JAWS3/bench/rqfiles.cpp: + * apps/JAWS3/jaws3-todo/Map_Manager_T.cpp: + * apps/JAWS3/jaws3/Cached_Allocator_T.cpp: + * apps/drwho/CM_Client.cpp: + * apps/drwho/CM_Server.cpp: + * apps/drwho/File_Manager.cpp: + * apps/drwho/Multicast_Manager.cpp: + * apps/drwho/Options.cpp: + * apps/drwho/PMC_Flo.cpp: + * apps/drwho/PMS_All.cpp: + * apps/drwho/PMS_Flo.cpp: + * apps/drwho/PMS_Ruser.cpp: + * apps/drwho/PM_Server.cpp: + * apps/gperf/src/Gen_Perf.cpp: + * apps/gperf/src/Iterator.cpp: + * apps/gperf/src/Key_List.cpp: + * apps/gperf/src/List_Node.cpp: + * apps/gperf/src/Options.h: + * apps/gperf/src/Options.cpp: + * apps/mkcsregdb/mkcsregdb.cpp: + * apps/soreduce/Library.cpp: + + Fixed ACE_OS fuzz warnings. Use ACE_OS calls instead of raw OS functions + where possible. If fuzz detected a false-positive, then disable + the ACE_OS fuzz check for that section of the code. + + * apps/gperf/src/Gen_Perf.cpp: + * apps/gperf/src/Iterator.cpp: + * apps/gperf/src/Key_List.cpp: + * apps/gperf/src/List_Node.cpp: + * apps/gperf/src/Options.h: + * apps/gperf/src/Options.cpp: + + Changed code generated by gperf for usage by the IDL compiler to use functions + in ACE_OS instead of raw OS calls. + +Sat Jun 30 04:48:34 UTC 2007 Abdullah Sowayan + + * ASNMP/asnmp/address.cpp: + * ASNMP/asnmp/ctr64.cpp: + * ASNMP/asnmp/integer.cpp: + * ASNMP/asnmp/octet.cpp: + * ASNMP/asnmp/oid.cpp: + * ASNMP/asnmp/pdu.cpp: + * ASNMP/asnmp/target.cpp: + * ASNMP/asnmp/timetick.cpp: + * ASNMP/asnmp/transaction.cpp: + * ASNMP/asnmp/wpdu.cpp: + * ASNMP/examples/get/get.cpp: + * ASNMP/examples/get/get_async.cpp: + * ASNMP/examples/next/next.cpp: + * ASNMP/examples/set/set.cpp: + * ASNMP/examples/trap/trap.cpp: + * ASNMP/examples/walk/walk.cpp: + * ASNMP/tests/Address_Test.cpp: + + Fixed ACE_OS fuzz warnings. Use ACE_OS calls instead of raw OS functions + where possible. If fuzz detected a false-positive, then disable + the ACE_OS fuzz check for that section of the code. + +Fri Jun 29 19:40:27 UTC 2007 Steve Huston + + * bin/PerlACE/Process_Unix.pm: Don't hang waiting for a failed spawn + to exit its process. + +Fri Jun 29 19:26:12 UTC 2007 Johnny Willemsen + + * performance-tests/TCP/tcp_test.cpp: + * tests/Message_Queue_Test.cpp: + Updated includes + +Fri Jun 29 18:39:46 UTC 2007 Adam Mitz + + * bin/depgen.pl: + + Load modules from $MPC_ROOT/modules since the NMake dependency + generator now uses some functions from MPC. + +Fri Jun 29 13:38:12 UTC 2007 Johnny Willemsen + + * ace/Stats.{h,cpp,inl}: + * ace/Throughput_Stats.{h,cpp}: + Moved ACE_Throughput_Stats to its own file, fixes bugzilla bug + 2969 + + * ace/ace.mpc: + * ace/Makefile.am: + Added new files + +Fri Jun 29 12:04:12 UTC 2007 Johnny Willemsen + + * ace/Message_Queue.{h,cpp,inl}: + * ace/Message_Queue_Vx.{h,cpp,inl}: + Moved ACE_Message_Queue_Vx to its own file, fixes bugzilla bug + 2970 + + * ace/ace.mpc: + * ace/Makefile.am: + Added new files + +Fri Jun 29 11:16:06 UTC 2007 Jeff Parsons + + * ace/CDR_Stream.h: + * ace/CDR_Stream.cpp: + + Reversed the order of declaration and implementation for + overloads of ostream operator for from_octet and from_wchar. + The former calls the latter, and some compilers seem to + require that the latter's full implementation be seen + before it can be called. + +Fri Jun 29 11:03:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_mingw32.GNU: + Set PLATFORM_SSL_LIBS. Thanks to Andy Wang + for reporting this + +Fri Jun 29 10:59:12 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added new Bug_2953_Regression + +Fri Jun 29 09:48:12 UTC 2007 Johnny Willemsen + + * ace/OS_NS_arpa_inet.cpp: + Fix for VxWorks 6.5 + +Thu Jun 28 16:12:18 UTC 2007 Phil Mesnier + + * ACEXML/common/URL_Addr.h: + * ACEXML/common/URL_Addr.cpp: + + * examples/Web_Crawler/URL_Addr.h: + * examples/Web_Crawler/URL_Addr.cpp: + + * protocols/ace/HTBP/HTBP_Addr.h: + * protocols/ace/HTBP/HTBP_Addr.cpp: + + Update string_to_addr interface to match previous change to + ACE_INET_Addr in order to silence some compiler warnings + +Thu Jun 28 15:18:35 UTC 2007 Steve Huston + + * bin/sandbox.cpp: Removed. There's an identical copy of this file + in the autobuild repository, autobuild/posixsandbox/sandbox.cpp. + +Thu Jun 28 14:12:12 UTC 2007 Johnny Willemsen + + * examples/ASX/Message_Queue/buffer_stream.cpp: + * examples/C++NPv1/Iterative_Logging_Server.cpp: + * examples/C++NPv1/Logging_Client.cpp: + * examples/C++NPv1/Process_Per_Connection_Logging_Server.cpp: + * examples/C++NPv1/Reactive_Logging_Server.cpp: + * examples/C++NPv1/Reactive_Logging_Server_Ex.cpp: + * examples/C++NPv1/RT_Thread_Per_Connection_Logging_Server.cpp: + * examples/C++NPv1/Thread_Per_Connection_Logging_Server.cpp: + * examples/C++NPv2/Reactor_Logging_Server.cpp: + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: + * examples/C++NPv2/TP_Reactor_Logging_Server.cpp: + * examples/C++NPv2/WFMO_Reactor_Logging_Server.cpp: + * examples/Connection/blocking/test_spipe_acceptor.cpp: + * examples/Connection/misc/test_upipe.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-server-poll.cpp: + * examples/IPC_SAP/TLI_SAP/CPP-ATM-client.cpp: + * examples/IPC_SAP/TLI_SAP/CPP-ATM-server.cpp: + * examples/IPC_SAP/TLI_SAP/CPP-server.cpp: + * examples/IPC_SAP/TLI_SAP/db-server.cpp: + * examples/IPC_SAP/TLI_SAP/ftp-server.cpp: + * examples/Reactor/Misc/notification.cpp: + * examples/Reactor/Misc/test_demuxing.cpp: + * examples/Reactor/Misc/test_reactors.cpp: + * examples/Reactor/Misc/test_time_value.cpp: + * examples/Reactor/Proactor/Aio_Platform_Test_C.cpp: + * examples/Reactor/Proactor/post_completions.cpp: + * examples/Reactor/Proactor/test_aiosig.cpp: + * examples/Reactor/Proactor/test_aiosig_ace.cpp: + * examples/Reactor/Proactor/test_end_event_loop.cpp: + * examples/Reactor/Proactor/test_multiple_loops.cpp: + * examples/Reactor/Proactor/test_timeout.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Client.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Server.cpp: + * examples/System_V_IPC/SV_Message_Queues/TMQ_Server.cpp: + * examples/System_V_IPC/SV_Semaphores/Semaphores_1.cpp: + * examples/System_V_IPC/SV_Semaphores/Semaphores_2.cpp: + * examples/Threads/task_one.cpp: + Changed main to ACE_TMAIN + +Thu Jun 28 14:07:12 UTC 2007 Johnny Willemsen + + * apps/drwho/client.cpp: + * apps/drwho/server.cpp: + * apps/Gateway/Gateway/Config_Files.cpp: + * apps/gperf/src/gperf.cpp: + * apps/JAWS2/main.cpp: + * apps/JAWS3/bench/mkfiles.cpp: + * apps/JAWS3/bench/rqfiles.cpp: + * apps/JAWS/clients/Caching/test_URL.cpp: + * apps/JAWS/server/main.cpp: + * apps/JAWS/stress_testing/benchd.cpp: + Changed main to ACE_TMAIN + +Thu Jun 28 10:08:38 UTC 2007 Jeff Parsons + + * ace/CDR_Stream.h: + + Removed 'extern' qualifier from ostream operator declarations, it's + not needed. + + * ace/CDR_Stream.cpp: + + Added explicit temporary of ACE_OutputCDR::from_wchar in the + ostream operator implementation taking ACE_OutputCDR::from_octet. + Unix compilers were apparently making some kind of promotion + of the implicit temporary before seeing it in the header file. + +Tue Jun 26 13:48:26 UTC 2007 Douglas C. Schmidt + + * apps/JAWS2/HTTPU/http_status.cpp: Added + + #include "ace/Log_Msg.h" + + so the ACE_DEBUG macro would be visible. Thanks to Venkat + Forums for reporting this. + +Thu Jun 28 07:32:12 UTC 2007 Johnny Willemsen + + * ace/Truncate.h: + CB2007 can handle this code according to Codegear support + +Wed Jun 27 20:25:06 UTC 2007 Phil Mesnier + + * ace/INET_Addr.h: + * ace/INET_Addr.inl: + * ace/INET_Addr.cpp: + + Force consistency across platforms using IPv6 and initializing + an ACE_INET_Addr with a string host. Prior to this patch, the + set method would pick the first INET or INET6 address returned + by the system. On most systems, ::getaddrinfo() returns INET6 + before INET ones, ensuring that IPv6 applications got consistent + results. However, a few platforms, such as RH Fedora 6, it + returns INET before INET6 meaning that in some contexts an + application would get one address for a host, and a different + address under other contexts. See Bugzilla entry 2952 for + greater detail. + + Since this form of set() is used internally by string_to_addr + and a string-based ctor, those methods now have an optional + parameter for explicitly specifying the address family to be + used in setting the address. + +Wed Jun 27 19:46:14 UTC 2007 Steve Huston + + * ace/config-aix-5.x.h: For AIX 5.2 and earlier, when removing + ACE_HAS_POSIX_SEM_TIMEOUT, also enable + ACE_HAS_POSIX_SEM_TIMEOUT_EMULATION. + +Wed Jun 27 16:59:06 UTC 2007 Steve Huston + + * ace/config-aix-5.x.h: Don't automatically undef + ACE_HAS_POSIX_SEM_TIMEOUT for AIX 5.3 and up - it works fine. + +Wed Jun 27 15:45:09 UTC 2007 Ciju John + + * docs/bczar/bczar.html: + Add to bczar notes. + +Wed Jun 27 15:07:37 UTC 2007 Steve Huston + + * tests/Makefile.am: Added Dynamic_Test. + +Wed Jun 27 13:54:35 UTC 2007 Steve Huston + + * ace/OS_NS_Thread.inl (sema_wait): Allow a 0 time value to indicate + "poll" semantics on the semaphore in the WinCE case, as it does in + the other Windows cases. Thanks to Shaolong Xiang for this fix. + + * ace/Malloc_T.h: Improved the documentation for ACE_Malloc_T + regarding what pools to use with it and what the requirements are + for a pool that's used with ACE_Malloc_T. + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.mpc: Removed the + Netsvcs_Dump_Restore_Lib project, which built only one file into + a DLL to link with the main program from Netsvcs_Dump_Restore. Add + that one file, Dump_Restore.cpp, to the main Netsvcs_Dump_Restore + project. Also renamed the resultant executable dump_restore. + This split was a hold-over from the pre-MPC days when it was hard + to build an exe from more than one file. + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.h: No need to + declare Dump_Restore exported any longer; it's not built into a DLL. + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp: This doesn't + need to include "ace/Service_Config.h" any longer. + + * netsvcs/clients/Naming/Client/Client.mpc: Removed the + Netsvcs_Client_Test_Lib project, which built only one file into + a DLL to link with the main program from Netsvcs_Client_Test. Add + that one file, Client_Test.cpp, to the main Netsvcs_Client_Test + project. Also renamed the resultant executable client_test. + This split was a hold-over from the pre-MPC days when it was hard + to build an exe from more than one file. + + * netsvcs/clients/Naming/Client/Client_Test.{h cpp}: + * netsvcs/clients/Naming/Client/main.cpp: + * netsvcs/clients/Naming/Client/svc.conf: + * netsvcs/clients/Naming/Client/svc2.conf: The Client_Test is no longer + dynamically loaded; it's linked in static. Also fixed some remaining + use of the deprecated method ACE_Reactor::run_event_loop(). + + * netsvcs/lib/TS_Clerk_Handler.cpp (ACE_TS_Clerk_Processor::alloc): + Always set the system_time_ pointers, even if the memory need not + be newly allocated. Avoids bad pointer dereferences. Fixes Bugzilla + #784. Thanks to James Marsh for this fix. + + * THANKS: Added James Marsh and Shaolong Xiang to the Hall of Fame. + +Wed Jun 27 13:55:39 UTC 2007 Johnny Willemsen + + * ace/CDR_Stream.h: + Fixed casing of include + +Wed Jun 27 13:48:50 UTC 2007 Steve Huston + + * ace/Dev_Poll_Reactor.cpp: When queueing notifications, correctly + handle the case where the notify is queued + (and ACE_HAS_REACTOR_NOTIFICATION_QUEUE) but the pipe can't be + written. The notify will be delivered, so don't fail the method. + + * tests/Dev_Poll_Reactor_Test.cpp: Add ECONNRESET to the errno values + which mean the peer (server) closed the connection; this is legit + and shouldn't be flagged as an error. + + * tests/Proactor_Test.cpp: If running on Linux, use half-duplex mode. + Linux kernels up to at least 2.6.9 (RHEL 4) silently convert all + socket aio to blocking synchronous, so full duplex test operation + is a crap shoot at best. + +Wed Jun 27 13:39:55 UTC 2007 Steve Huston + + * ace/OS_NS_Thread.inl (thr_sigsetmask): Removed the AIX block; AIX + has the proper features to just use the existing feature tests. + Thanks to Johnny Willemsen for noticing this. + +Wed Jun 27 09:50:00 UTC 2007 Simon Massey + + * bin/tao_other_tests.lst: + + Added TAO/orbsvcs/tests/InterfaceRepo/Bug_2962_Regression/run_test.pl + +Wed Jun 27 08:29:56 UTC 2007 Jeff Parsons + + * ace/CDR_Stream.h: + * ace/CDR_Stream.cpp: + + Added ostream insertion operators for the ambiguous ACE_CDR + basic types. They are used in the optional generation of + ostream operators for IDL declaration, which can be useful + for debugging (see Bugzilla 2937). + +Wed Jun 27 08:05:39 UTC 2007 Johnny Willemsen + + * tests/Capabilities_Test.cpp: + Const changes + + * tests/Dynamic_Test.cpp: + New test for ACE_Dynamic, this failed with x.5 but works + perfect on head, just adding it to make sure this keeps working + on all platforms. Belongs to bugzilla 2960. + + * tests/run_test.lst: + * tests/tests.mpc: + Added Dynamic_Test + + * tests/Svc_Handler_Test.cpp: + Intialise some pointers with 0 + +Wed Jun 27 06:14:39 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added new tests + +Wed Jun 27 06:09:39 UTC 2007 Johnny Willemsen + + * ace/config-vxworks5.x.h: + * ace/config-vxworks6.2.h: + * ace/config-vxworks6.3.h: + * ace/config-vxworks6.4.h: + Added ACE_HAS_SOCKADDR_IN_SIN_LEN + + * ace/config-vxworks6.5.h: + New file for VxWorks 6.5 + + * ace/config-freebsd.h: + Added ACE_LACKS_LOG2 + + * ace/config-borland-common.h: + C++ Builder 2007 delivers operator delete + + * ace/Handle_Set.{h,cpp}: + * ace/README: + * ace/OS_NS_sys_select.inl: + Don't use ACE_FD_SET_TYPE, it is not required anymore + + * ace/Log_Record.cpp (print): + Fixed problem with unicode builds. Thanks to Christoph Hofmann + for reporting this. + + * ace/os_include/os_limits.h: + * ace/os_include/os_stdio.h: + * ace/os_include/sys/os_types.h: + * ace/OS_NS_sys_mman.inl: + * ace/OS_NS_unistd.inl: + VxWorks 6.5 changes + + * ace/os_include/sys/os_select.h: + Removed ACE_FD_SET_TYPE, not needed anymore + + * ace/SOCK_Dgram.cpp: + Intialise some pointers with 0 + + * ace/Svc_Handler.{h,cpp}: + Layout changes and changed dynamic to a real bool + +Wed Jun 27 03:50:39 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + + Added the following new checks to fuzz: + + check_for_exception_spec: + This checks for the usage of exception specification in method + signitures. This check will not flag no-throw spec i.e. throw() in + methods. This check may disabled at specified section in the code. + + check_for_NULL: + 0 should be used instead of NULL. + + check_for_improper_main_declaration: + int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) should be used instead + of plain main(int argc, char** argv). + + check_for_lack_ACE_OS: + This checks for the usage of raw/naked OS calls. The functions in + ACE_OS should be used instead. This check can be disabled in sections + of code where false-positives are found. + + + Modified the following check in fuzz: + + check_for_tab: + Due to the large amount of tabs found in the source code, this check + will no longer flag every instance of tab found (until the issue is + fixed). For now, it will only flag that fact that a file contains + tabs once. + +Mon Jun 25 11:34:36 CDT 2007 Ciju John + + * ACE version 5.5.9 released. + +Mon Jun 25 16:03:37 UTC 2007 Ciju John + + * NEWS: + Adding NEWS summaries on Ossama's behalf. + +Fri Jun 22 15:56:12 UTC 2007 William R. Otte + + * bin/make_release.py: + + Updates to fix ChangeLog entry creation and superflous packaging + of extra binary files in ACE+TAO and ACE+TAO+CIAO packages. + +Fri Jun 22 14:50:14 UTC 2007 Ciju John + + * ChangeLog: + * PROBLEM-REPORT-FORM: + * VERSION: + * ace/Version.h: + Revert to x.5.8 status. + +Tue Jun 12 20:11:59 UTC 2007 Ciju John + + * NEWS: + Add note regards Fedora 7 GCC 4.1.2 fix for visibility attribute + used for singletons. + +Mon Jun 11 12:40:00 UTC 2007 Simon Massey + + * ace/MMAP_Memory_Pool.cpp: + * tests/run_test.lst: + + Fix problem in Lynxos and re-enable Test. + +Fri Jun 08 08:38:00 UTC 2007 Simon Massey + + * include/makeinclude/platform_hpux_aCC.GNU: + + Problem with Change log of "Fri May 11 07:57:55 UTC 2007" + by Johnny Willemsen for + "Improved aCC version detection check". This seems to be + incorrect as the warning disable of 361 for aCC 3.xx at + line 98 is now being ignored. Suspect spelling mistake of + aC++/ANSI at line 33 + +Sun Jun 3 20:05:36 UTC 2007 Olli Savia + + * ace/Capabilities.cpp: + * apps/Gateway/Gateway/File_Parser.cpp: + * apps/gperf/src/Key_List.cpp: + * examples/Mem_Map/IO-tests/IO_Test.cpp: + Added ACE_OS:: prefix to some plain function calls. + +Fri Jun 1 22:26:39 UTC 2007 Phil Mesnier + + * ace/INET_Addr.h: + * ace/INET_Addr.cpp: + + Added a new helper method, is_ip_equal() that compares only the + IP address of the object and the argument. This should be used + in place of comparing get_ip_address() values particularly when + IPv6 may be used. This new method is weaker than the equality + operator since that also compares port numbers. This new method + was motivated by a need to compare the address of a recieved + dgram to the interface addresses obtained via get_ip_interfaces. + + * bin/tao_other_tests.lst: + Added IPv6 RTEC federation test to list. + +Fri Jun 1 20:51:57 UTC 2007 ciju john + + * include/makeinclude/platform_hpux_aCC.GNU: + Adding on Johnny's behalf: + Disable W3397 with HP aCC 06.13 + +Thu May 31 03:16:53 UTC 2007 Abdullah Sowayan + + * ace/config-macros.h: + + Reverted changes from: + Wed May 30 00:17:35 UTC 2007 Abdullah Sowayan + It introduced around 10 new warnings for ACE/TAO/CIAO under GCC + Compilers. + + ACE_NOTREACHED macro now expands to nothing for Visual Studio + Compilers. This fixes Bugzilla 2948. + +Thu May 31 03:12:50 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + + Tabs shouldn't be used as per ACE/TAO/CIAO coding guidlines. + Extended fuzz to detect tabs in the source code. + +Wed May 30 00:17:35 UTC 2007 Abdullah Sowayan + + * ace/config-macros.h: + + ACE_NOTREACHED macro now expands to nothing (empty space). We need + to monitor the scoreboard to verify that this doesn't cause problems. + If it doesn't, we will zap ACE_NOTREACHED from the codebase. For + details, check Bigzilla# 2948. + +Tue May 29 10:19:59 UTC 2007 Abdullah Sowayan + + * netsvcs/lib/Client_Logging_Handler.cpp: + + Replaced tabs with spaces. + +Tue May 29 09:20:55 UTC 2007 Johnny Willemsen + + * ace/config-vxworks6.2.h: + * ace/config-vxworks6.3.h: + * ace/config-vxworks6.4.h: + Instead of ACE_LACKS_LOG2, define _C99, with this define log2 is + available. Reported to WindRiver as TSR560446 + +Tue May 29 08:48:55 UTC 2007 Johnny Willemsen + + * ace/OS_NS_Thread.h: + Doxygen changes + + * ace/POSIX_CB_Proactor.cpp: + Store errno in a local variable, and then check this against multiple + values, reduces number of TSS access + +Tue May 29 07:07:55 UTC 2007 Johnny Willemsen + + * ace/FILE.cpp: + Removed first line + + * ace/Log_Msg.cpp: + Declare and initialize a variable in one step + + * ace/Mem_Map.cpp: + Small simplification + + * ace/Semaphore.{h,cpp,inl}: + Made removed_ a real bool + + * ace/Shared_Memory.h: + Changed get_segment_size to return size_t + + * ace/Shared_Memory_MM.{h,cpp,inl}: + * ace/Shared_Memory_SV.{h,cpp,inl}: + Changed get_segment_size and length to size_t + + * ace/SV_Semaphore_Simple.cpp: + Const improvement + + * ace/SV_Shared_Memory.{h,inl}: + Layout changes + +Mon May 28 19:42:14 UTC 2007 Abdullah Sowayan + + * netsvcs/lib/Server_Logging_Handler_T.cpp: + + Replaced tabs with spaces. + + * tests/Upgradable_RW_Test.cpp: + + Addressed the "assignment within conditional expression" warning + on the WinXP_VC71_WarningLevel4 build. + +Mon May 28 19:35:55 UTC 2007 Johnny Willemsen + + * ace/OS_NS_unistd.cpp: + Const and layout change + + * ace/OS_NS_unistd.h: + Layout change + + * ace/ACE.{cpp,inl} (map_errno): + The full switch is only required for windows and moved to an + inline method, on linux it is just a return + +Mon May 28 18:50:55 UTC 2007 Johnny Willemsen + + * tests/Mem_Map_Test.cpp: + Fixed incorrect ACE_ERROR statement + +Mon May 28 18:06:55 UTC 2007 Johnny Willemsen + + * bin/PerlACE/Run_Test.pm: + Added is_vxworks_rtp_test method + + * tests/Mem_Map_Test.cpp: + VxWorks only allows to use mmap with a special shared memory file + +Sun May 27 14:09:54 UTC 2007 Abdullah Sowayan + + * netsvcs/clients/Naming/Client/Client_Test.cpp: + + Addressed the "assignment within conditional expression" warning + on the WinXP_VC71_WarningLevel4 build. + +Fri May 25 19:09:55 UTC 2007 Johnny Willemsen + + * ace/Mem_Map.cpp: + Removed intermediate result variable, has no need anymore + +Fri May 25 18:55:55 UTC 2007 Johnny Willemsen + + * ace/OS_NS_sys_mman.inl (shm_open, shm_unlink): + With VxWorks the filename passed to shm_open and shm_unlink may + only contain a starting /, no other slashes, if multiple slashes + do exist, replace them with _. + +Fri May 25 15:44:13 UTC 2007 Steve Huston + + * ace/config-aix-5.x.h: + * include/makeinclude/platform_aix_ibm.GNU: Changed the AIX shared + library build output from an archived shared object (shr.o in + lib.a) to a dynamic shared library (lib.so). + + * NEWS: Mention the .a->.so change above. + + * ace/OS_NS_Thread.cpp: Formatting fixes to properly line up + bracketed code blocks, making it easier to read. + +Fri May 25 15:39:59 UTC 2007 Steve Huston + + * tests/Bug_2610_Regression_Test.cpp: Rearrange order of #includes so + Visual Age C++ 6 can find what it needs. + +Fri May 25 12:54:55 UTC 2007 Johnny Willemsen + + * ace/Active_Map_Manager.h: + * ace/Priority_Reactor.h: + * ace/Signal.h: + Doxygen changes + +Thu May 24 13:37:55 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.2.GNU: + * include/makeinclude/platform_vxworks6.3.GNU: + The override of RM is only needed for windows + +Thu May 24 13:20:55 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + Added support for fast and ipo + +Thu May 24 08:16:55 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.5.GNU: + New file upcoming VxWorks 6.5 + +Thu May 24 07:54:55 UTC 2007 Johnny Willemsen + + * ace/Array_Base.h: + * ace/ATM_Addr.h: + * ace/Barrier.h: + * ace/Based_Pointer_Repository.h: + * ace/Configuration.h: + * ace/DLL_Manager.h: + * ace/FILE.h: + * ace/Free_List.h: + * ace/INET_Addr.h: + * ace/IO_SAP.h: + * ace/Local_Memory_Pool.h: + * ace/Log_Record.h: + * ace/Malloc_Base.h: + * ace/Map_Manager.h: + * ace/Mem_Map.h: + * ace/Message_Queue_T.h: + * ace/MMAP_Memory_Pool.h: + * ace/Pagefile_Memory_Pool.h: + * ace/QoS/SOCK_Dgram_Mcast_QoS.h: + * ace/Reactor_Impl.h: + * ace/Registry.h: + * ace/Remote_Tokens.h: + * ace/RW_Process_Mutex.h: + * ace/Sbrk_Memory_Pool.h: + * ace/Service_Gestalt.h: + * ace/Shared_Memory_Pool.h: + * ace/Signal.h: + * ace/SOCK_Dgram.h: + * ace/SPIPE_Connector.h: + * ace/SPIPE_Stream.h: + * ace/Timer_Heap_T.h: + * ace/Timer_Wheel_T.h: + * ace/Unbounded_Set.h: + * ace/WFMO_Reactor.h: + Doxygen improvements + +Thu May 24 05:43:03 UTC 2007 Olli Savia + + * configure.ac: + Added feature test for ACE_LACKS_LOG2. + +Thu May 24 05:13:46 UTC 2007 Abdullah Sowayan + + * ace/Pipe.cpp: + + Wed May 23 22:00:32 UTC 2007 Steve Huston + Due the changelog above, changed the type of index in the for + loop from size_t to int to eliminate compiler warnings about + signed/unsigned comparison. + +Thu May 24 04:58:14 UTC 2007 Abdullah Sowayan + + * ace/Pipe.cpp: + + ACE_Utils::truncate_cast requires including Truncate.h. Added missing + include file. + + Use preincrement instead of postincrement operator. + +Wed May 23 22:00:32 UTC 2007 Steve Huston + + * ace/Pipe.cpp (send, recv): + * ace/SOCK_IO.cpp (send, recv): Use ACE_Utils::truncate_cast properly + to get an int, not a size_t, for the iovec count. Fixes Win64 + compile warnings. + + * ace/Log_Msg_IPC.cpp (log): Truncate the payload length down to an + ACE_CDR::ULong to resolve 64-bit warnings. If we desire logging + payloads larger than 4GB, this will need to be changed. + + * ace/Local_Tokens.inl (ACE_Token_Name::name): Use size_t for a string + length, not int. + + * ace/Filecache.cpp: When doing calculations based on + ACE_Filecache::size_ use its type, ACE_OFF_T, rather than u_long. + Keeps types consistent across platforms. + +Wed May 23 19:42:50 UTC 2007 Gan Deng + + * bin/ciao_tests.lst + + Disabled CIAO tests on single_threaded setting. + +Wed May 23 15:32:55 UTC 2007 Johnny Willemsen + + * ace/Active_Map_Manager_T.h: + * ace/Asynch_IO_Impl.h: + * ace/Bound_Ptr.h: + * ace/Cache_Map_Manager_T.h: + * ace/config-lite.h: + * ace/Dump_T.h: + * ace/File_Lock.h: + * ace/Framework_Component.h: + * ace/Hash_Map_Manager_T.h: + * ace/IOStream_T.h: + * ace/Lock.h: + * ace/Malloc_Allocator.h: + * ace/Map_Manager.h: + * ace/Map_T.h: + * ace/Message_Block.h: + * ace/Message_Queue.h: + * ace/Message_Queue_T.h: + * ace/Name_Request_Reply.h: + * ace/Node.h: + * ace/Null_Condition.h: + * ace/Null_Mutex.h: + * ace/Null_Semaphore.h: + * ace/OS_Errno.h: + * ace/OS_NS_errno.h: + * ace/OS_NS_Thread.h: + * ace/POSIX_Asynch_IO.h: + * ace/Process_Mutex.h: + * ace/Process_Semaphore.h: + * ace/RB_Tree.h: + * ace/Recursive_Thread_Mutex.h: + * ace/Refcounted_Auto_Ptr.h: + * ace/Registry.h: + * ace/Remote_Tokens.h: + * ace/RW_Mutex.h: + * ace/RW_Process_Mutex.h: + * ace/RW_Thread_Mutex.h: + * ace/Semaphore.h: + * ace/Service_Types.h: + * ace/Signal.h: + * ace/SOCK.h: + * ace/SOCK_Acceptor.h: + * ace/SOCK_SEQPACK_Acceptor.h: + * ace/SOCK_SEQPACK_Association.h: + * ace/SString.h: + * ace/Stream.h: + * ace/Task.h: + * ace/Thread.h: + * ace/Thread_Adapter.h: + * ace/Thread_Exit.h: + * ace/Thread_Manager.h: + * ace/Thread_Mutex.h: + * ace/Timer_Hash_T.h: + * ace/Timer_Heap_T.h: + * ace/Timer_Queue_T.h: + * ace/Token_Collection.h: + * ace/Token_Request_Reply.h: + * ace/Unbounded_Set.h: + * ace/WIN32_Asynch_IO.h: + Fixed some doxygen warnings + +Wed May 23 13:19:55 UTC 2007 Johnny Willemsen + + * tests/Process_Manager_Test.cpp: + Added %P to all debug statements so that we can see the process id + in each line + +Wed May 23 13:00:55 UTC 2007 Johnny Willemsen + + * ace/config-vxworks6.2: + * ace/config-vxworks6.3: + * ace/config-vxworks6.4: + log2 is only not available in rtp mode with the gnu compiler. + + * ace/config-vxworks6.2: + Removed part for the ghs compiler, that is really not tested and + just a left over of the vxworks 5.5.x support + + * ace/OS_NS_unistd.cpp: + Initialize local variable with 0, layout changes + +Wed May 23 11:31:55 UTC 2007 Johnny Willemsen + + * bin/generate_rel_manpages: + * etc/*.doxygen: + Updated for the upgrade to doxygen 1.5.2-2 + +Wed May 23 09:40:55 UTC 2007 Johnny Willemsen + + * ace/Mem_Map.cpp: + Use shm_open/shm_unlink on VxWorks. This doesn't fix the failing of + the tests using mmap on our targets because they are using a NFS file + system and we have identified several problems with that which have + been reported to WindRiver. + +Wed May 23 07:17:55 UTC 2007 Johnny Willemsen + + * tests/Mem_Map_Test.cpp: + Added filenames to the mmap error messages so that we can see which + mmap failed + +Wed May 23 05:12:04 2007 Ossama Othman + + * ace/OS_NS_math.h (ace_log2_helper): + + Added comments about what the ACE_LACKS_LOG2 case actually + does. + + Store precomputed value of 1/log(2.0) to save an expensive + division and computing log(2.0) in each call. + +Tue May 22 17:41:20 UTC 2007 Olli Savia + + * ace/config-netbsd.h: + Defined ACE_LACKS_LOG2. + +Tue May 22 12:12:55 UTC 2007 Johnny Willemsen + + * tests/Log_Msg_Test.cpp: + Can't unlink on advance with VxWorks 6.4 (at least on NFS) + +Tue May 22 11:10:30 UTC 2007 Olli Savia + + * ace/OS_NS_math.h: + * ace/OS_NS_math.inl: + Added log2() emulation. + + * tests/OS_Test.cpp: + Simplified log2 test. + +Tue May 22 10:03:26 UTC 2007 Olli Savia + + * ace/config-sunos5.10.h: + It seems that Solaris 10 supports log2 so we can undefine + ACE_LACKS_LOG2. + +Tue May 22 09:56:40 UTC 2007 Olli Savia + + * ace/config-sunos5.5.h: + Defined ACE_LACKS_LOG2. + +Tue May 22 06:44:09 UTC 2007 Olli Savia + + * tests/OS_Test.cpp: + Disable log2 test if ACE_LACKS_LOG2 is defined. + +Tue May 22 06:43:55 UTC 2007 Johnny Willemsen + + * ace/config-vxworks6.2: + * ace/config-vxworks6.3: + * ace/config-vxworks6.4: + VxWorks also seems to have problems with log2, so disable it for the + moment to get the builds running again + +Tue May 22 06:11:34 UTC 2007 Olli Savia + + * ace/OS_NS_math.h: + * ace/OS_NS_math.inl: + * ace/config-win32-common.h: + Hide ACE_OS::log2 method if platform doesn't support it + natively. This is temporary fix just to keep things going + until we have made decicion what is the best solution here. + +Tue May 22 01:14:31 UTC 2007 Douglas C. Schmidt + + * THANKS: Vikram Karandikar is the 2200th + contributor to ACE+TAO+CIAO!! + +Mon May 21 22:56:26 UTC 2007 Ossama Othman + + * ace/OS_main.h: + + Fixed syntax error on VxWorks. The return value for the + ace_os_main_i() prototype was missing. + +Mon May 21 10:32:02 UTC 2007 Ossama Othman + + * ace/OS_NS_math.h (ace_log2_helper): + + Fixed compile-time errors on Windows introduced by Olli's + improvements described below. VC8 doesn't support log2(). + Generate a quiet NaN value for now. + + * ace/OS_Memory.h (ACE_align_binary, ACE_ptr_align_binary): + + Handle OpenVMS's strange multiple size pointer model. Addresses + build warnings. + +Mon May 21 13:37:55 UTC 2007 Johnny Willemsen + + * docs/Download.html: + Mention also that the full packages do contain the generated files + for GNU autoconf support. Thanks to Vikram Karandikar + for bringing this to our attention. + +Mon May 21 13:04:04 UTC 2007 Olli Savia + + * ace/ACE.h: + * ace/OS_NS_math.h: + * ace/OS_NS_math.inl: + Added support for ACE_OS::log2(double) and improved support for + ACE::log2(u_long). + + * NEWS: + Document changes above. + + * tests/OS_Test.cpp: + Added test for ACE_OS::log2(double). + +Mon May 21 06:07:59 UTC 2007 Olli Savia + + * ace/Sig_Handler.cpp: + + Reverted change: + Fri May 18 10:51:26 UTC 2007 Olli Savia + +Mon May 21 05:57:58 UTC 2007 Olli Savia + + * ace/OS_NS_stdio.h: + * ace/OS_NS_stdio.inl: + Implemented clearerr, fgetc, fputc, getc, putc and ungetc helper + functions a bit smarter way. + +Mon May 21 04:55:55 UTC 2007 Johnny Willemsen + + * ace/SString.h: + Removed ACE_INLINE from operator+ to resolve MingW warnings. + Thanks to Haibin Zhang + for providing this fix + +Sun May 20 20:03:55 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_linux.GNU: + TAO with GCC 4.0.2 on Linux with -O3 seems to cause runtime issues, + for example the PI ForwardRequest is failing, with -O2 the runtime + problems are gone, so for GCC 4.0.2 we default OCFLAGS to -O2, for + other GCC versions we default to -O3 + +Sun May 20 17:50:55 UTC 2007 Johnny Willemsen + + * ace/config-hpux-11.00.h: + Removed usage of declspec export/import for HP aCC, it only gives + problems and just doesn't work because of several bugs in the + compiler. + + * ace/FILE_Connector.cpp: + Removed first line, no need to specify twice the filename + + * ace/Handle_Ops.cpp: + Layout and const changes + +Sun May 20 17:08:51 UTC 2007 Olli Savia + + * ace/OS_NS_stdio.inl: + Added ACE_STD_NAMESPACE to fgetc and fputc calls. This hopefully + makes BCB6 happy. + +Sun May 20 09:16:26 UTC 2007 Olli Savia + + * ace/OS_NS_stdio.h: + * ace/OS_NS_stdio.inl: + * ace/os_include/os_stdio.h: + Improved support for ACE_OS::fgetc. Added support for ACE_OS::fputc, + ACE_OS::getc, ACE_OS::putc and ACE_OS::ungetc. + + * NEWS: + Document changes above. + + * ace/Read_Buffer.cpp: + Use ACE_OS::getc and ACE_OS::ungetc instead of getc and ungetc. + Thanks to Abdullah Sowayan + for motivating all changes above. This fixes Bugzilla #2919. + +Sat May 19 14:53:44 UTC 2007 Abdullah Sowayan + + * Kokyu/Dispatcher_Task.cpp: + + More fixes to eliminate "staement is uncreachable" warning. + +Fri May 18 22:43:40 UTC 2007 Ossama Othman + + * ace/CDR_Stream.inl (skip_longlong): + + Fixed typo. Call skip_ulonglong(), not skip_ulong(). + +Fri May 18 17:34:57 UTC 2007 Sumant Tambe + + * docs/svn/config: + * docs/svn/svn-prefs.reg: + + Added subversion svn:eol-style and svn:keywords + properties for [Mm]akefiles + +Fri May 18 10:51:26 UTC 2007 Olli Savia + + * ace/Sig_Handler.cpp: + Removed unnecessary LynxOS specific code. + +Fri May 18 06:15:30 UTC 2007 Olli Savia + + * tests/TkReactor_Test.cpp: + Fixed compile error with Tk 8.4. + +Fri May 18 04:38:29 UTC 2007 Abdullah Sowayan + + * ace/OS_Memory.h: + + Thu May 17 22:35:37 UTC 2007 Ossama Othman + For OS_Memory.h causes ~800 compile-time warnings for the + VxWorks6.4_PPC603_Diab_Release. Trying to eliminate the + warnings. Hopefully, this will do the trick. + +Thu May 18 05:20:17 UTC 2007 Ossama Othman + + * ace/OS_main.h (main): + + Removed newly added ACE_MAIN forward declaration for the VxWorks + case. The preprocessed code apparently has a syntax error. To + be revisited as time permits. + +Fri May 18 03:46:15 UTC 2007 Abdullah Sowayan + + * ASNMP/agent/snmp_agent.cpp: + * Kokyu/DSRT_Sched_Queue_T.cpp: + + More fixes to eliminate "staement is uncreachable" warning. + + * ASNMP/agent/snmp_agent.cpp: + + Replaced tabs with spaces. + +Fri May 18 02:12:34 UTC 2007 Abdullah Sowayan + + * examples/Connection/blocking/SPIPE-acceptor.cpp: + * examples/Connection/blocking/SPIPE-connector.cpp: + * examples/OS/Process/process.cpp: + * examples/Reactor/Misc/test_demuxing.cpp: + * examples/Web_Crawler/Mem_Map_Stream.cpp: + + It makes no sense to have code after a return statement + (such as ACE_ERROR_RETURN). It causes some builds to have + "statement is unreachable" warning. + + * examples/Connection/blocking/SPIPE-acceptor.cpp: + + Replaced tabs with spaces. + +Thu May 17 22:35:37 UTC 2007 Ossama Othman + + * ace/CDR_Stream.inl (skip_char, skip_boolean, skip_short): + (skip_long, skip_float, skip_double): + + Further simplified these methods by implementing them in terms + of their same size skip_octet(), skip_u{short,long,longlong}() + counterparts. + +Thu May 17 22:13:32 UTC 2007 Ossama Othman + + * ace/Acceptor.cpp: + + Silence Coverity error related to lack of a return value check + by explicitly casting the return value to void. We don't care + about the return value in this case. + + * ace/CDR_Stream.inl (write_octet, write_ushort, write_ulong): + (write_ulonglong, write_longdouble): + (read_ushort, read_ulong, read_ulonglong, read_longdouble): + (skip_ushort, skip_ulong, skip_ulonglong, skip_longdouble): + + Removed unnecessary assignment to a void* and reinterpret_cast<> + back to original type. + + (write_char, write_short, write_long): + + Simplified code by dropping assignment to void* and + reinterpret_cast<> to unsigned type counterpart in favor of a + direct static_cast<> to the unsigned type. + + (skip_char, skip_short, skip_long, skip_longlong, skip_float): + (skip_double): + + Replaced temporary variable and assignment to void* with + unsigned integer CDR type of same size since the value read + from the CDR stream is ignored. Simplifies the code. + + * ace/CORBA_macros.h (ACE_NEW_THROW_EX): + + Don't bother setting errno to ENOMEM if allocation fails since + the caller should be handling the exception thrown upon failure, + not checking errno. + + * ace/Configuration.cpp (get_binary_value): + + Improved exception safety. + + * ace/OS_Memory.h (ACE_align_binary, ACE_ptr_align_binary): + + Re-implemented as inlined functions instead of macros. The + new code is much easier to read. + + Corrected pointer-integer type. s/ptrdiff_t/uintptr_t/g. + + * ace/OS_NS_Thread.cpp (TSS_Cleanup_Instance): + + Replaced use of "NULL" constant with zero to comply with ACE + coding guidelines. + + * ace/Select_Reactor_T.cpp: + + Replaced boolean value assignments with true and false instead + of 1 and 0, respectively. + + Removed redundant zero pointer checks prior to operator delete() + calls. + + Various const and boolean correctness improvements. + + (handle_error): + + Assign errno to a temporary to avoid multiple TSS accesses. + + * ace/config-g++-common.h: + + Define ACE_HAS_NEW_NOTHROW for g++ >= 3.3. Older versions of + g++ had buggy operator new(nothrow)() support. + + * ace/config-irix6.x-common.h: + + IRIX lacks the suseconds_t typedef. + + * ace/config-sunos5.8.h (ACE_HAS_X86_STAT_MACROS): + + No need to define this preprocessor symbol for Solaris 8 and + onwards. + + * ace/config-win32-common.h (ACE_HAS_CUSTOM_EXPORT_MACROS): + + Define the value to 1 instead of just defining without a value. + Some preprocessor conditional tests depend on a value being + set. + + From Russell Mora: + * ace/OS_main.h: + + Fixed ACE main macro - on Tru64 this was complaining because: + + int + main (int argc, char *argv[]) + + Was becoming: + + int + namespace v4 + { + ace_os_main_i (int, char *[]) + /* ... */ + + I.e. it didn't like the 'int' appearing before the namespace. I + added a forward declaration of main() to gobble this up - the + code now expands to: + + int + main (int, char *[]); + namespace v4 + { + int ace_os_main_i (int, char *[]) + /* ... */ + +Thu May 17 19:29:30 UTC 2007 Jeff Parsons + + * contrib/minizip/minizip.mpc: + + Added vc8_warnings to the base project list, to avoid the + warning caused by vc8-deprecated use of 'fopen'. + +Thu May 17 16:35:40 UTC 2007 Chad Elliott + + * bin/MakeProjectCreator/config/automake.features: + + Setting qos=1 was not correct. It causes issues when generating + TAO related Makefile.am's. + + * bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm: + + Fix the following issues: + + 1) Relative paths for ACE related libraries when processing + TAO.mwc + 2) Fixed includedir settings for + $TAO_ROOT/orbsvcs/orbsvcs/Makefile.am + 3) Added custom rules in $TAO_ROOT/Makefile.am + +Thu May 17 14:04:51 UTC 2007 Chad Elliott + + * ACE.mwc: + + Provide an exclude for automake only of build and Kokyu. Also, + only exclude TAO for all project types. The other directories + previously listed do not need to be explicitly excluded. + + * ace/ace.mpc: + * ace/ace_for_tao.mpc: + + Removed references to config-win32-visualage.h. + + * apps/gperf/tests/gperf_test.mpb: + + Mapped the GPERF command setting to 'gperf_cmd' and then set + 'gperf_cmd' to ../src/gperf in a specific section for automake. + + * bin/MakeProjectCreator/config/ace_zzip.mpb: + + Provide a new base project to deal with the strangeness of + automake. It inherits from zzip (which in turn inherits from + zlib). For automake only, it removes everything added by those + base projects and sets flags specific for automake. + + * bin/MakeProjectCreator/config/acexml.mpb: + + Use ace_zzip instead of zzip and zlib. + + * bin/MakeProjectCreator/config/automake.features: + + Set qos to 1 so that the configure script can determine if QoS is + built. + + * netsvcs/servers/servers.mpc: + + To help the automake generator, add ace_for_tao to avoids. + +Wed May 16 06:46:55 UTC 2007 Johnny Willemsen + + * tests/run_test.lst: + Don't run 2912 when ACE_FOR_TAO is enabled + +Wed May 16 18:41:11 UTC 2007 Chad Elliott + + * tests/Unload_libACE.cpp: + + Added support for the Mac library extension. + +Wed May 16 16:14:21 UTC 2007 Steve Huston + + * ace/INET_Addr.cpp (addr_to_string): Adjust sprintf() format string to + use %ls for strings when ACE_USES_WCHAR and not on Windows. Avoids + chopping off all but the first char of the host address. + + * tests/SOCK_Dgram_Test.cpp: When 0-terminating the received data, + use the string-length index, not the byte-count index. The latter + overwrites other things on the stack. + +Wed May 16 07:30:55 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_sunos5_sunc++.GNU: + Use -z now as part of the linker flags so that symbols are resolved + at link time. Thanks to JT for sorting this out, this fixes bugzilla + 2710, as side effect it also fixes 2473. + +Tue May 15 18:43:55 UTC 2007 Johnny Willemsen + + * ace/OS_NS_Thread.cpp: + VxWorks only supports PTHREAD_SCOPE_SYSTEM + +Tue May 15 12:46:18 UTC 2007 Vadym Ridosh + + * bin/tao_other_tests.lst: + Added IPv6 test to Bug_2377_Regression test. + +Tue May 15 11:36:07 UTC 2007 Vadym Ridosh + + * bin/tao_other_tests.lst: + Added the Bug_2925_Regression test. + +Mon May 14 11:11:32 UTC 2007 Olli Savia + + * ace/config-lynxos.h: + + Reverted change: + + Fri May 11 10:20:00 UTC 2007 Simon Massey + + * ace/config-lynxos.h: + ACE_LACKS_PRAGMA_ONCE + + Setting of ACE_LACKS_PRAGMA_ONCE was already fixed by + + Thu May 10 15:20:52 UTC 2007 Steve Huston + + * ace/ace_wchar.h: Add #include "ace/config-macros.h" so the proper + setting of ACE_LACKS_PRAGMA_ONCE is known before it's needed. + +Mon May 14 03:11:13 UTC 2007 Abdullah Sowayan + + * tests/Reactor_Remove_Resume_Test.cpp: + + Added a missing include "ace/Auto_Ptr.h" + ace/Auto_Ptr.h introduces auto_ptr into the global namespace, + don't prefix reference to std:: to auto_ptr, that causes + build failures on some platforms. + +Mon May 14 02:59:28 UTC 2007 Abdullah Sowayan + + * tests/Reactor_Remove_Resume_Test.cpp: + + Fixed another compile-time error. An identifier's name was misspelled, + causing a compile-time error in some builds. + +Sun May 13 11:55:32 UTC 2007 Adam Mitz + + * bin/generate_doxygen.pl: + + Fixed a logic error in the script when $DDS_ROOT is undefined. + +Sun May 13 09:29:55 UTC 2007 Johnny Willemsen + + * tests/run_test.lst: + Don't run Dirent_Test with VxWorks rtp, it hangs the target + +Sat May 12 12:03:44 UTC 2007 Abdullah Sowayan + + * tests/Reactor_Remove_Resume_Test.cpp: + + Fixed a compile-time error. Removed an extra ";" from the end of + function definitions. + +Sat May 12 08:37:01 UTC 2007 Ossama Othman + + * tests/Reactor_Remove_Resume_Test.cpp (handle_close): + + Fixed unused argument warning. + +Fri May 11 21:18:45 UTC 2007 Steve Huston + + * examples/APG/Reactor/HAStatus.cpp (handle_output): Do the 'while' + loop as long as dequeue() returns >= 0, not == 0. Thanks to + Jules d'Entremont for reporting this. + + * THANKS: Added Jules d'Entremont. + + * tests/Makefile.am: Added Reactor_Remove_Resume_Test. + +Fri May 11 21:49:01 UTC 2007 Ossama Othman + + * ace/TP_Reactor.cpp (dispatch_i): + + Return the number of event handlers dispatched (typically 1). + Previously zero was returned regardless of whether or not + socket/IO event handlers were dispatched. + + (post_process_socket_event): + + Only remove or resume the event handler used during the upcall. + A different event handler may have been registered during the + upcall if the handle was closed and then reopened, for example. + Make sure we're removing and/or resuming the event handler + used during the upcall. + + * tests/Reactor_Remove_Resume_Test.cpp: + + New test that verifies reactors only remove and/or resume the + event handler used during the upcall. It is generally only + relevant for thread pool based reactors. + + * tests/run_test.lst: + * tests/tests.mpc: + + Added new Reactor_Remove_Resume_Test. + +Fri May 11 21:09:18 UTC 2007 Steve Huston + + * tests/Bug_2912_Regression_Test.cpp: Mask off the RT signals so the + test doesn't get immediately killed. + +Fri May 11 20:37:07 UTC 2007 Steve Huston + + * docs/ACE-configuration.txt: Removed this file. The information it + contained has migrated to ACE-INSTALL.html. + +Fri May 11 19:16:55 UTC 2007 Johnny Willemsen + + * ace/Global_Macros.h: + Removed commented out code + +Fri May 11 18:35:55 UTC 2007 Johnny Willemsen + + * ace/OS_NS_stdio.inl: + * ace/config-WinCE.h: + Introduced ACE_LACKS_PERROR and set that in the wince file. Also + refactored several methods that check for ACE_LACKS_FILELOCKS to + first check this define, then ACE_WIN32, that way we don't need an + explicit check for WinCE + +Fri May 11 18:19:08 UTC 2007 Ciju John + + * bin/tao_orb_tests.lst: + Disable test run if messaging not built. + + * tests/run_test.lst: + Create a few new flags to more granularily control automated + test runs. + +Fri May 11 17:53:46 UTC 2007 Adam Mitz + + * bin/generate_doxygen.pl: + + This script will now use $TAO_ROOT and $CIAO_ROOT to locate TAO and + CIAO. Also, DDS support has been added, config.h will only be + written if it doesn't exist, and the -dot_path argument is ignored -- + the graphviz binary 'dot' is assumed to be on the PATH. + +Fri May 11 16:12:55 UTC 2007 Johnny Willemsen + + * examples/Reactor/Multicast/Log_Wrapper.cpp: + Use ACE_OS::perror instead of perror directly to resolve compile + errors with WinCE + +Fri May 11 15:25:55 UTC 2007 Johnny Willemsen + + * tests/Bug_2609_Regression.cpp: + * tests/Bug_2610_Regression.cpp: + Renamed TRACE to TEST_TRACE to resolve msvc warnings + +Fri May 11 15:06:55 UTC 2007 Johnny Willemsen + + * tests/run_test.lst: + Added !NO_NETWORK to some tests that we know don't work when ACE + has been build without network support + +Fri May 11 14:45:43 UTC 2007 Steve Huston + + * tests/run_test.lst: Disable Bug_2368_Regression_Test. Per agreement + with Johnny, the Bugzilla entry is now labeled an enhancement and + this test is disabled until the necessary enhancement is made. For + more info, please see: + http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=2368 + +Fri May 11 10:20:00 UTC 2007 Simon Massey + + * ace/config-lynxos.h: + ACE_LACKS_PRAGMA_ONCE + +Fri May 11 08:22:55 UTC 2007 Johnny Willemsen + + * ace/config-vxworks6.2.h: + Improved VxWorks 6.2 kernel support + +Fri May 11 08:06:55 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.3.GNU: + Small improvements + +Fri May 11 07:57:55 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_hpux_aCC.GNU: + Improved aCC version detection check + +Thu May 10 16:17:55 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_hpux_aCC.GNU: + Disable W3390 with HP aCC 06.13 + + * include/makeinclude/platform_rtems.x_g++.GNU: + When HOST_ROOT is set then set the dependent variables + +Thu May 10 15:20:52 UTC 2007 Steve Huston + + * ace/ace_wchar.h: Add #include "ace/config-macros.h" so the proper + setting of ACE_LACKS_PRAGMA_ONCE is known before it's needed. + +Thu May 10 15:17:55 UTC 2007 Johnny Willemsen + + * examples/Reactor/Dgram/CODgram.cpp: + * examples/Reactor/Dgram/Dgram.cpp: + Fixed compile errors with WinCE + +Wed May 9 18:59:26 UTC 2007 James H. Hill + + * docs/ace_guidelines.vsmacros: + + Improved the macros such that it will convert tabs to 2 spaces + for all files excepts those on the exception list. Currently, + only MPC template files are on this list. + +Wed May 9 18:50:29 UTC 2007 James H. Hill + + * docs/ace_guidelines.vsmacros: + + By default, the ace_guideline macros does not convert tabs to + spaces. Instead, this has to be set under Tools | Options... + +Tue May 8 20:50:34 UTC 2007 Steve Huston + + * ace/Malloc_T.cpp (ACE_Dynamic_Cached_Allocator): + Reverted this change: + Tue May 8 07:51:55 UTC 2007 Johnny Willemsen + It broke Hash_Map_Manager_Test which checks for a failed allocation + when using a too-small pool. + +Tue May 8 20:20:22 UTC 2007 Steve Huston + + * ace/Message_Block.cpp (copy): If there's insufficient space to copy + data into the block, set errno to ENOSPC before returning -1. + Thanks to Duane Beck for this suggestion. + + * THANKS: Added Duane Beck to the Hall of Fame. + + * tests/Message_Block_Test.cpp: Added case to check for block copy of + a too-long data area. + +Tue May 8 07:51:55 UTC 2007 Johnny Willemsen + + * ace/Malloc_T.cpp (ACE_Dynamic_Cached_Allocator): + Fixed use of chunk_size, thanks to Leo Lei + for reporting this + +Mon May 7 22:18:55 UTC 2007 Steve Huston + + * ace/config-win32-msvc-7.h: + * ace/config-win32-msvc-8.h: + * ace/config-win32-msvc-9.h: + Added ACE_HAS_INTRINSIC_BYTESWAP for all except WinCE 4. + For config-win32-msvc-9.h, comment the #if block around + ACE_HAS_INTRINSIC_INTERLOCKED; if a build with this compiler and + WinCE shows it needs to be uncommented (as for previous MSVC + versions) it can be changed then. + + * ace/CDR_Base.inl: Replace complicated #if around the byteswap + usage with #if defined (ACE_HAS_INTRINSIC_BYTESWAP). + + This fixes Bugzilla #2922. Thanks to Xu Liang for reporting it. + + * THANKS: Added Xu Liang. + +Mon May 7 11:48:46 UTC 2007 Chad Elliott + + * bin/tao_orb_tests.lst: + + Added the new IORManipulation/filter test. + +Sat May 5 05:34:37 UTC 2007 Johnny Willemsen + + * ace/Svc_Handler.cpp: + Reverted last change again, with 2610 in mind this could maybe + result in leaks with TAO and I have no time to sort that out + so take the most safe solution + + * tests/run_test.lst: + Removed 2609 and 2610 for the moment + +Sat May 5 05:00:37 UTC 2007 Johnny Willemsen + + Reverted the change below, it breaks TAO, maybe TAO has coded against + this issue in acceptor or the test has wrong assumptions, not clear + at this moment, so just revert the change + + Fri May 4 18:46:37 UTC 2007 Johnny Willemsen + * ace/Acceptor.cpp: + +Fri May 4 18:46:37 UTC 2007 Johnny Willemsen + + * tests/run_test.lst: + * tests/Bug_2610_Regression_Test.cpp: + * ace/Acceptor.cpp: + * tests/tests.mpc: + Fixed bug 2610, take into account reference counted handlers. + Thanks to Milan Cvetkovic + for reporting this, providing the patch and the regression test + +Fri May 4 16:29:48 UTC 2007 Adam Mitz + + * tests/run_test.pl: + + Changed log output from "test/" to "tests/" so it's consistent. + +Fri May 4 12:39:37 UTC 2007 Johnny Willemsen + + * tests/Env_Value_Test.cpp: + Reverted accidential commit + +Fri May 4 07:50:37 UTC 2007 Johnny Willemsen + + * ace/Svc_Handler.cpp: + Applied new patch to fix bugzilla 2609. Thanks to Milan Cvetkovic + for this new patch + + * tests/run_test.lst: + * tests/tests.mpc: + Don't build and run Bug_2609_Regression when ACE_FOR_TAO is enabled + +Thu May 3 09:54:37 UTC 2007 Johnny Willemsen + + Reverted the change below, it breaks the gcc builds + + Thu May 3 08:37:37 UTC 2007 Johnny Willemsen + * ace/Svc_Handler.cpp: + +Thu May 3 08:37:37 UTC 2007 Johnny Willemsen + + * tests/run_test.lst: + * tests/Bug_2609_Regression_Test.cpp: + * ace/Svc_Handler.cpp: + * tests/tests.mpc: + Fixed bug 2609, take into account reference counted svc handlers. + Thanks to Milan Cvetkovic + for reporting this, providing the patch and the regression test + + * ace/config-hpux-11.00.h: + dllexport with template specializations doesn't work for HP aCC + 3.x which runs on PARISC. Reported this to HP and for the moment + disable dllexport usage on PARISC totally + + * ace/Dev_Poll_Reactor.cpp: + * ace/Event_Handler.cpp: + * ace/Timer_Queue_T.cpp: + * ace/WFMO_Reactor.cpp: + Use bool when possible + +Wed May 2 18:43:37 UTC 2007 Johnny Willemsen + + * docs/bczar/bczar.html: + Updated to mention the update of release.xml in the autobuild archive + for the integrated build/test scoreboard + +Wed May 2 16:04:21 UTC 2007 Chad Elliott + + * bin/depgen.pl: + + Fixed a bug where the Depgen modules wouldn't be found unless + MPC_ROOT was set. + + * docs/bczar/bczar.html: + + Changed a couple of < > to < >. + +Wed May 2 14:39:59 UTC 2007 Douglas C. Schmidt + + * ace/Dev_Poll_Reactor.cpp: Always remove the notification byte + from the pipe, avoiding an infinite loop. Thanks to Eider + Oliveira for this fix. + +Wed May 2 14:12:37 UTC 2007 Johnny Willemsen + + * examples/APG/Naming/Naming_Context.h: + Fixed memory leak, thanks to Kanghee Yoon + for reporting this. + +Wed May 2 12:49:37 UTC 2007 Johnny Willemsen + + * ace/ACE.cpp: + * ace/ARGV.cpp: + * ace/Basic_Types.cpp: + * ace/CDR_Base.cpp: + * ace/Codecs.cpp: + * ace/Configuration.cpp: + * ace/Configuration_Import_Export.cpp: + * ace/OS_NS_string.cpp: + Use prefix increment instead of postfix + + * ace/ace_wchar.cpp: + * ace/ace_wchar.h: + * ace/ace_wchar.inl: + Added support for integration with iconv, this can be enabled + by defining ACE_HAS_ICONV. This fixes bugzilla 2453, thanks to + Olivier Brunet for reporting this. + + * ace/Makefile.am: + * ace/ace.mpc: + Added new ace_wchar.cpp: + + * ace/config-hpux-11.00.h: + HP aCC 3.55 and newer do support declspec export/import + + * ace/DLL.cpp (operator=): + Check for self assignment + + * ace/Log_Msg_Backend.h: + Doxygen improvement + + * ace/NT_Service.{h,cpp} (insert): + Added DWORD argument to pass in desired access. Fixes bugzilla + 475. Thanks to Craig Perras + for reporting this. + + * ace/OS_NS_Thread.inl: + WaitForSingleObject returns a DWORD, updated type of local variable + + * ace/Select_Reactor_Base.cpp: + Fixed not reachable code warning from the HP compiler + + * ace/Svc_Handler.{h,cpp}: + Changed closing_ to a real bool + +Mon Apr 30 08:59:37 CDT 2007 Chad Elliott + + * ACE version 5.5.8 released. + +Mon Apr 30 12:24:05 UTC 2007 Chad Elliott + + * NEWS: + + Added user visible changes for 5.5.8 based on ChangeLog entries. + +Mon Apr 30 11:36:51 UTC 2007 Chad Elliott + + * tests/Bug_2912_Regression_Test.cpp: + + Fixed a wide character build issue. + +Mon Apr 30 04:03:16 UTC 2007 William R. Otte + + * bin/make_release.py + + Fixed problem causing TAO/CIAO to be included in ACE and/or + ACE+TAO only packages. + +Fri Apr 27 13:37:13 UTC 2007 Dale Wilson + + * ace/Object_Manager.cpp: + Replace ACE_NEW_RETURN with simple C++ new because + placement new is incompatable with ACE_NEW_RETURN macro. + +Fri Apr 27 12:33:31 UTC 2007 Chad Elliott + + * tests/Bug_2912_Regression_Test.cpp: + + Don't compile the bulk of the code if the proactor is not + supported. + +Fri Apr 27 08:17:12 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + * bin/tao_other_tests.lst: + Exclude several tests with CORBA/e micro enabled + +Thu Apr 26 12:19:12 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Exclude several tests with CORBA/e micro enabled + +Thu Apr 26 13:23:12 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug_2909_Regression + +Thu Apr 26 12:19:12 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Exclude several tests with CORBA/e micro enabled + +Thu Apr 26 10:53:12 UTC 2007 Johnny Willemsen + + * ace/SSL/SSL_Asynch_Stream.cpp (do_SSL_read): + Also added ERR_clear_error before doing a SSL_write, belongs to + bugzilla 2912 + +Wed Apr 25 13:11:00 UTC 2007 Simon Massey + + * ace/config-lynxos.h: + Also needs ACE_HAS_SIGTIMEDWAIT. + +Wed Apr 25 11:56:06 UTC 2007 Chad Elliott + + * docs/bczar/bczar.html: + + Modified the step to copy the packages to the previous_versions + directory to be similar to what it previously was (before I + mistakenly changed it) and updated it to include the use of a + script to avoid manually running multiple commands. + +Wed Apr 25 09:44:12 UTC 2007 Johnny Willemsen + + * bin/tao_other_tests.lst: + Added Bug_2908_Regression + +Wed Apr 25 08:45:00 UTC 2007 Simon Massey + + * ace/config-lynxos.h: + LynxOS4.2 does not seem to have thread process scoping. + +Wed Apr 25 08:16:12 UTC 2007 Johnny Willemsen + + * tests/Bug_2912_Regression_Test.cpp: + New regression for bug 2912. Thanks to Paul Daugherty + for reporting this issue and delivering + this regression test + + * ace/SSL/SSL_Asynch_Stream.cpp (do_SSL_read): + Added ERR_clear_error before doing a SSL_read + + * tests/run_test.lst: + * tests/tests.mpc: + Added Bug_2912_Regression + +Wed Apr 25 07:09:12 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug_2356_Regression + +Wed Apr 25 07:00:12 UTC 2007 Johnny Willemsen + + * ace/Global_Macros.h: + Also with msvc9 expand ACE_THROW_SPEC to throw (...) + + * ace/CDR_Stream.cpp (clone_from): + Also copy the char and wchar translators + + * ace/UUID.cpp: + Layout change + +Tue Apr 24 13:37:42 UTC 2007 Steve Huston + + * tests/SOCK_Dgram_Test.cpp: Add missing #include "ace/OS_NS_string.h" + +Tue Apr 24 11:46:12 UTC 2007 Johnny Willemsen + + * ace/Sock_Connect.cpp (get_ip_interfaces_aix): + Fixed resource leak. Thanks to Werner Buchert + for reporting this + +Tue Apr 24 10:20:58 UTC 2007 Olli Savia + + * include/makeinclude/platform_lynxos.GNU: + Fixed run-time linking error with GCC 3.2.2. + +Tue Apr 24 09:10:12 UTC 2007 Johnny Willemsen + + * tests/run_test.lst: + Enabled Dirent test again for VxWorks RTP + + * ace/Addr.cpp: + Initialise members in the constructor directly instead of + calling a seperate method + + * ace/Arg_Shifter.cpp: + Fixed typo in comment + +Mon Apr 23 15:05:31 UTC 2007 Steve Huston + + * tests/SOCK_Dgram_Test.cpp: Added additional tests to verify data + and peer addresses from recv(). Also fixed errors in use of %p. + +Mon Apr 23 13:39:12 UTC 2007 Johnny Willemsen + + * ace/CDR_Base.inl: + Fixed copy/paste bug in swap_4 and swap_8 + +Mon Apr 23 13:09:12 UTC 2007 Johnny Willemsen + + * ace/Task.cpp: + Fixed compile error with msvc9 beta + +Mon Apr 23 12:19:12 UTC 2007 Johnny Willemsen + + * ace/config-win32-msvc.h: + * ace/config-win32-msvc-9.h: + Initial files for msvc9. Microsoft released a public beta called + Orcas + +Fri Apr 20 18:20:12 UTC 2007 Johnny Willemsen + + * ace/config-win32-msvc-7.h: + msvc7 doesn't has intrin.h + +Fri Apr 20 14:31:26 UTC 2007 Adam Mitz + + * bin/MakeProjectCreator/config/htbp.mpb: + + Added a 'requires' for ace_uuid. + + * examples/APG/Naming/naming.mpc: + + Added a 'requires' for ace_other (ACE naming services are within the + ace_other MPC feature) to each project. + + * examples/Naming/Naming.mpc: + + Added a 'requires' for ace_other to each project. + + * performance-tests/Misc/Misc.mpc: + + Added a 'requires' for ace_other to the Misc_test_naming project. + + * bin/tao_orb_tests.lst: + + Only run Bug_2768_Regression when CORBA messaging is enabled. + +Fri Apr 20 12:10:12 UTC 2007 Johnny Willemsen + + * ace/config-win32-msvc-7.h: + * ace/config-win32-msvc-8.h: + * ace/config-win32-msvc.h: + Intel C++ 9.0 doesn't have the interlocked functions + +Fri Apr 20 11:44:12 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug_1330_Regression + +Fri Apr 20 11:35:12 UTC 2007 Johnny Willemsen + + * ace/CDR_Base.inl: + Added ACE_HAS_BSWAP_16, ACE_HAS_BSWAP_32, and ACE_HAS_BSWAP_64. + When one of the defines is set, we include os_byteswap.h and + then use bswap_16, bswap_32, and bswap_64. + + * ace/config-linux-common.h: + Added ACE_HAS_BYTESWAP_H, ACE_HAS_BSWAP_16, ACE_HAS_BSWAP_32, and + ACE_HAS_BSWAP_64. This fixes bugzilla bug 2901. + +Fri Apr 20 08:29:12 UTC 2007 Johnny Willemsen + + * bin/PerlACE/ProcessVX_Unix.pm: + Updated to also run automatic regression tests with VxWorks 6.x + in kernel mode. + +Thu Apr 19 18:24:12 UTC 2007 Johnny Willemsen + + * ace/os_include/os_byteswap.h: + New wrapper file for byteswap.h + +Thu Apr 19 16:47:46 UTC 2007 Adam Mitz + + * bin/tao_orb_tests.lst: + + Use the -boost option for TAO/tests/Sequence_Unit_Tests when Config + BOOST is present. + +Thu Apr 19 14:25:39 UTC 2007 Douglas C. Schmidt + + * ace/OS_NS_time.h (ace_timezone): Changed ACE_HAS_WIN32 to + ACE_WIN32 to fix a bug on Windows. Thanks to Jan Kalin for this fix. + +Thu Apr 19 14:10:18 UTC 2007 Steve Huston + + * ace/config-doxygen.h: Turn on ACE_Dev_Poll_Reactor doc generation + using ACE_HAS_DEV_POLL instead of ACE_HAS_EVENT_POLL. The latter + will be automatatically turned off on systems w/o epoll and the + docs get lost. + +Thu Apr 19 13:59:06 UTC 2007 Chad Elliott + + * ace/Obstack_T.cpp: + + Because the ACE_ALLOCATOR macro contains a return, head_ and curr_ + could technically be used without being initialized (however + unlikely). Initialize them to zero in the initializer list. + +Thu Apr 19 13:29:12 UTC 2007 Johnny Willemsen + + * ace/config-win32-msvc.h: + Don't set ACE_HAS_INTRINSIC_INTERLOCKED on WinCE + +Thu Apr 19 11:01:49 UTC 2007 Olli Savia + + * ace/SSL/SSL_SOCK_Stream.cpp: + Added static_cast to silence compiler warning on LynxOS. + + * include/makeinclude/platform_lynxos.GNU: + Added PLATFORM_X11_LIBS to PLATFORM_TK_LIBS to fix + linking error on LynxOS. + +Thu Apr 19 05:30:12 UTC 2007 Johnny Willemsen + + * ace/os_include/os_intrin.h: + Don't declare the _Interlocked methods with Intel C++ 9.0 + +Wed Apr 18 14:11:28 UTC 2007 Olli Savia + + * include/makeinclude/platform_lynxos.GNU: + LynxOS's mkdir needs -f option to prevent it returning + error if directory already exists. + +Wed Apr 18 12:11:12 UTC 2007 Johnny Willemsen + + * bin/MakeProjectCreator/config/ace_foxreactor.mpb: + Added new base project + +Wed Apr 18 11:51:12 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + The DIOP test can run in a static build + +Wed Apr 18 11:01:56 UTC 2007 Martin Corino + + * include/makeinclude/rules.lib.GNU: + Change to enable building static libs on OpenVMS. + +Wed Apr 18 10:52:00 UTC 2007 Ian Roberts + + * bin/tao_orb_tests.lst: + Added Bug_2791_Regression. + +Wed Apr 18 10:42:39 UTC 2007 Olli Savia + + * include/makeinclude/platform_lynxos.GNU: + Updated TCL/TK settings. + + * tests/TkReactor_Test.cpp: + Fixed compile error on LynxOS. + +Wed Apr 18 10:17:12 UTC 2007 Johnny Willemsen + + * bin/MakeProjectCreator/config/ace_fox.mpb: + * bin/MakeProjectCreator/config/global.features: + * ace/ace_foxreactor.mpc: + * ace/FoxReactor/*: + * include/makeinclude/platform_linux.GNU: + * include/makeinclude/wrapper_macros.GNU: + Added FoxReactor to integrate with the fox toolkit. Thanks to + Dmitriy Nikitinskiy for providing these + files. This fixes bugzilla 1400 + +Wed Apr 18 09:45:12 UTC 2007 Johnny Willemsen + + * bin/MakeProjectCreator/config/vcl.mpb: + Updated bds to bds4 + +Wed Apr 18 09:30:00 UTC 2007 Simon Massey + + * ace/SSL/SSL_Asynch_Stream.cpp: + * ace/SSL/SSL_Context.cpp: + + Change variable name and comments so that compiler warnings + don't trigger error indication on the scoreboard. + +Wed Apr 18 09:29:12 UTC 2007 Johnny Willemsen + + * ace/QtReactor/QtReactor.{h,cpp}: + Applied changes to work with Qt4. Thanks to Roland Sun + for delivering the patches. + This is part of bugzilla 2870. Also thanks to + Ian Zagorskih for his report + in bugzilla 2413. + +Wed Apr 18 09:06:12 UTC 2007 Johnny Willemsen + + * ace/config-win32-msvc-8.h: + WinCE doesn't have intrin.h + +Tue Apr 17 22:11:11 UTC 2007 Steve Huston + + * netsvcs/lib/Server_Logging_Handler_T.cpp (parse_args): When calling + ACE_LOG_MSG->open(), get the existing logging flags and pass them + to open() in order to preserve any previously set flags, such as + SYSLOG, etc. Thanks to Hubert Talbot for this fix. + +Tue Apr 17 14:36:00 UTC 2007 Chad Elliott + + * bin/tao_orb_tests.lst: + + Neither 2804 nor 2844 will run in a minimum corba or corba e + build. + +Tue Apr 17 14:25:35 UTC 2007 Adam Mitz + + * bin/generate_compile_stats.sh: + + Don't error out if the destination directory doesn't exist yet, the + script will attempt to create it before using it. + +Tue Apr 17 12:11:12 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug_2768_Regression + +Tue Apr 17 11:32:12 UTC 2007 Johnny Willemsen + + * ace/config-win32-msvc-8.h: + * ace/config-win32-msvc.h: + Only msvc8 has intrin.h + +Tue Apr 17 10:03:12 UTC 2007 Johnny Willemsen + + * ace/Atomic_Op.inl: + Added missing pragma intrinsic + +Tue Apr 17 09:55:12 UTC 2007 Johnny Willemsen + + * ace/config-icc-common.h: + Make use of the Intel C++ intrinsic interlocked functions on + IA64 Linux. Intel support has promised Intel will deliver these + functions in the near feature also for IA32/EM64T. + +Tue Apr 17 09:41:12 UTC 2007 Johnny Willemsen + + * ace/os_include/os_intrin.h: + Added ACE_HAS_IA64INTRIN_H and ACE_HAS_IA32INTRIN_H for supporting + the Intel C++ intrinsic header files + +Tue Apr 17 09:13:12 UTC 2007 Johnny Willemsen + + * ace/os_include/os_intrin.h: + New wrapper file for intrin.h + + * ace/config-win32-msvc-7.h: + * ace/config-win32-msvc-8.h: + * ace/config-win32-msvc.h: + Added ACE_HAS_INTRIN_H, moved some generic defines to the msvc.h + file + + * ace/Atomic_Op.{h,inl}: + Use the intrinsic Interlocked functions to increase the performance + on Windows with the Microsoft compiler. See also + http://msdn2.microsoft.com/en-us/library/f24ya7ct(VS.71).aspx. + This fixes bugzilla bug 2891, thanks to Aleksandar Vukajlovic + for suggesting these changes. + +Tue Apr 17 08:12:12 UTC 2007 Johnny Willemsen + + * docs/run_test.txt: + Corrected variable that is used for VxWorks target + + * docs/ACE-FMM.html: + Fixed html tag + +Tue Apr 17 06:51:12 UTC 2007 Johnny Willemsen + + * tests/CDR_File_Test.cpp: + * tests/Log_Msg_Test.cpp: + VxWorks 6.4 fixes the problem that we can't unlink in advance + on a NFS share + + * tests/Svc_Handler_Test.cpp: + Removed define for unlink in advance, not used + +Mon Apr 16 23:00:16 UTC 2007 Steve Huston + + * ace/Timeprobe.h: Add #include "ace/config-lite.h" to pick up the + config settings needed to do the right thing. + + * tests/Message_Block_Test.cpp: The text queued in the test's blocks + are ACE_TCHAR, so don't try to change them into ACE_TCHAR for + passing to ACE_OS::atoi() - just cast the char* to ACE_TCHAR*. + Also, replaced ACE_ASSERTs with if/ACE_ERROR to allow the stuff to + run on Release builds and not wipe out single-process systems on + errors. + +Mon Apr 16 17:56:42 UTC 2007 Adam Mitz + + * bin/generate_compile_stats.sh: + + Fixed usage statement to match actual argument parsing. + Assume gcc is on the PATH instead of hard-coding /usr/bin/gcc. + +Mon Apr 16 17:18:32 UTC 2007 Adam Mitz + + * docs/svn/config: + * docs/svn/svn-prefs.reg: + + Added README as a text file for the purposes of SVN end-of-line + handling and keyword subsitution. + +Mon Apr 16 15:41:39 UTC 2007 Chad Elliott + + * ace/config-sunos5.7.h: + * ace/config-sunos5.8.h: + + Moved the setting of ACE_HAS_VFWPRINTF and + ACE_SHM_OPEN_REQUIRES_ONE_SLASH to config-sunos5.7.h. They are + valid for this platform as well as SunOS 5.8. + +Mon Apr 16 14:17:12 UTC 2007 Johnny Willemsen + + * tests/run_test.lst: + Disable for the moment Dirent_Test on VxWorks RTP, it causes + a crash of the target. + +Mon Apr 16 13:01:00 UTC 2007 Simon Massey + + * ace/config-win32-msvc-7.h: + * ace/config-win32-msvc-8.h: + * ace/README: + + Add the new #define ACE_HAS_HEADER_ALLOCATED_CLASS_STATIC_CONST_INT_STOREAGE + to the known offending platforms (Microsoft VC7 and VC8). + +Mon Apr 16 11:01:12 UTC 2007 Johnny Willemsen + + * tests/Log_Msg_Test.cpp: + Made this test working for VxWorks 6.x kernel mode + + * tests/Handle_Set_Test.cpp: + * tests/Priority_Reactor_Test.cpp: + * tests/Process_Strategy_Test.cpp: + * tests/Test_Output.cpp: + Removed support for psos + + * tests/Barrier_Test.cpp: + Fixed typo in comment + +Mon Apr 16 08:41:56 UTC 2007 Martin Corino + + * tests/run_test.lst: + * bin/tao_orb_tests.lst: + + (Temporary) exclusion of some tests which tend to cause too + much trouble (spontaneous system reboots) on OpenVMS IA64 + for the moment. The cause seems to be some vulnerabilities in + the OpenVMS IA64 threading library and that will take time + to be resolved. + +Sun Apr 15 06:04:56 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added bug 2805 regression + +Sun Apr 15 06:04:56 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added bug 2844 regression + +Sat Apr 14 18:57:56 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added bug 2804 regression + +Thu Apr 12 19:14:00 UTC 2007 Chad Elliott + + * bin/tao_other_tests.lst: + + Added the Bug_1385_Regression test. + +Thu Apr 12 19:05:56 UTC 2007 Chad Elliott + + * bin/doxygen-convert-h.pl: + + Fixed a typo in a variable name. Using strict would have caught + this. + +Thu Apr 12 12:18:20 UTC 2007 Chad Elliott + + * bin/auto_run_tests.pl: + + Remove intermediate '.' directories when printing the test name to + allow the scoreboard matrix to read test output correctly. + +Thu Apr 12 12:03:29 UTC 2007 Chad Elliott + + * tests/Test_Output.cpp: + + Fixed the unused variable warning. + +Thu Apr 12 11:50:37 UTC 2007 Johnny Willemsen + + * protocols/ace/TMCast/GroupFwd.hpp: + Don't use export with a forward declaration + +Wed Apr 11 18:16:29 UTC 2007 Chad Elliott + + * ACEXML/apps/svcconf/Svcconf_Handler.cpp: + * ACEXML/common/SAXExceptions.cpp: + * ACEXML/common/StrCharStream.cpp: + + Fixed memory leaks. + + * ace/DLL.cpp: + + Delete dll_name_ before assigning to it. + + * ace/Select_Reactor_T.cpp: + * ace/TP_Reactor.cpp: + + Check the timer_queue_ pointer before using it. + + * tests/Service_Config_DLL.cpp: + + Changed from ACE::strnew to ACE_OS::strdup to be consistent with + what allocation method is expected (even though this code + shouldn't be called). + + * tests/Test_Output.cpp: + + Always retain ownership of the output_file_ pointer (instead of + giving it to ACE_Log_Msg). This removes a memory leak (in certain + situations) and simplifies things a bit. + +Wed Apr 11 17:53:07 UTC 2007 Steve Huston + + * ace/Process_Manager.{h cpp} (terminate): The terminate(pid_t) method + no longer removes the process from the process descriptor table; + the pid remains available to call wait() on. This allows the + Process_Manager_Spawn.cpp example from APG page 227 to work as + expected. Thanks to Zhenghao Shi for reporting this issue. + + Also, changed the ACE_Process_Descriptor class to be a struct + (Process_Descriptor) inside ACE_Process_Manager. It's only used + internally to that class. + + Also fixed the Doxygenization of ACE_Process_Manager quite a bit. + + * tests/Process_Manager_Test.cpp: Added a test to verify that + ACE_Process_Manager::terminate() allows the process to wait()ed for. + + * THANKS: Added Zhenghao Shi to the Hall of Fame. + +Wed Apr 11 14:02:37 UTC 2007 Johnny Willemsen + + * ace/CORBA_macros.h: + Added nothrow variant of ACE_NEW_THROW_EX. This fixes bugzilla + bug 2889. With Borland C++ this resulted in a slightly smaller + footprint + +Wed Apr 11 12:33:37 UTC 2007 Chad Elliott + + * ace/OS_NS_sys_stat.inl: + + Added a static_cast to avoid a warning from gcc. + + * ace/SOCK_Dgram.cpp: + + Fixed my RTEMS detection for checking to see if iov_len is less + than zero. + +Wed Apr 11 11:37:42 UTC 2007 Chad Elliott + + * tests/Reactor_Notify_Test.cpp: + * tests/Time_Value_Test.cpp: + + Added static_cast and changed types to time_t to avoid warnings + from gcc. + +Wed Apr 11 10:57:07 UTC 2007 Johnny Willemsen + + * ace/config-g++-common.h: + Improved gcc 4 visibility support, thanks to Max Khon + for delivering the patch. This fixes + bugzilla 2881 + + * ace/Barrier.h: + Doxygen improvements + + * ace/OS_NS_Thread.cpp: + Use prefix increment/decrement + +Tue Apr 10 20:27:07 UTC 2007 Douglas C. Schmidt + + * docs/Download.html: Updated the download page to clarify the + status of autoconf. Thanks to Eric Hughes + for clarifying this. + +Tue Apr 10 17:20:46 UTC 2007 Krishnakumar B + + * ace/CORBA_macros.h: Reverted the change to exclude + ACE_PRINT_EXCEPTION from being affected by + ACE_LACKS_DEPRECATED_MACROS. + +Sat Apr 7 12:17:45 UTC 2007 Phil Mesnier + + * ace/Asynch_IO.cpp: fixed spelling error in include. + +Fri Apr 6 19:48:20 UTC 2007 Steve Huston + + * ace/OS_NS_Thread.inl (recursive_mutex_cond_unlock): Corrected for + Windows Mobile 5, where the CRITICAL_SECTION LockCount member was + changed from 0-base to 1-base. + +Fri Apr 6 14:27:20 UTC 2007 Steve Huston + + * ace/Asynch_IO.h: Improved comments for ACE_Asynch_Read_Stream. + + * ace/Asynch_IO.cpp (read, write, cancel): If an operation is + attempted on an object that hasn't yet been opened, refuse it + with errno EFAULT. Thanks to Paul Daugherty + for reporting this. + +Thu Apr 5 22:24:03 UTC 2007 Krishnakumar B + + * ace/config-win32-msvc-8.h: Removed the redundant define of + ACE_HAS_NEW_NOTHROW. Thanks to Ossama for pointing it out. + + * bin/ciao_tests.lst: Added BasicSP to the list of tests that are + run daily. + +Thu Apr 5 15:48:12 UTC 2007 Chad Elliott + + * bin/tao_other_tests.lst: + + Added the Bug_2561_Regression test. + +Thu Apr 5 11:50:14 UTC 2007 Chad Elliott + + * bin/MakeProjectCreator/config/global.features: + + Set the link_codecfactory feature to zero. This feature + determines if the TAO_CodecFactory library is linked in if the TAO + library is linked into an executable or dynamic library. + + * bin/tao_other_tests.lst: + + Disable a couple of performance tests that crash our QNX machine. + + * tests/run_test.lst: + + Disable the Sendfile_Test. QNX doesn't support that interface. + +Thu Apr 5 11:28:55 UTC 2007 Chad Elliott + + * tests/Message_Queue_Test_Ex.cpp: + + Changed to use ACE_Auto_Basic_Ptr instead of auto_ptr. Some + implementations still don't have a reset() method. + +Thu Apr 5 08:00:00 UTC 2007 Martin Corino + + * bin/ace_tests.lst: + + Excluded RMCast tests for VxWorks. + +Wed Apr 4 23:59:18 UTC 2007 Steve Huston + + * tests/Test_Output.cpp (close): Don't delete output_file_ during + close() - it prevents the output from being reset for another + round of logging as is done with Object_Manager_Flipping_Test. + The destructor will delete it (as the constructor allocated it) + when the component framework cleanup runs at process rundown. + +Wed Apr 4 22:01:35 UTC 2007 Krishnakumar B + + * ace/CORBA_macros.h: Restored ACE_PRINT_EXCEPTION by removing + it from being undefined if ACE_LACKS_DEPRECATED_MACROS is + defined. + + * ace/config-win32-msvc-8.h: Define ACE_NEW_THROWS_EXCEPTIONS and + ACE_HAS_NEW_NOTHROW for Visual C++ 8.0. + +Wed Apr 4 19:06:52 UTC 2007 Chad Elliott + + * bin/tao_other_tests.lst: + + Added the Bug_689_Regression test. + +Wed Apr 4 16:32:03 UTC 2007 Steve Huston + + * tests/Bug_1890_Regression_Test.cpp: + * tests/Bug_2540_Regression_Test.cpp: Since these bugs are all about + ACE_Select_Reactor, always run them on ACE_Select_Reactor. The + tests rely on behavior that doesn't hold on ACE_WFMO_Reactor, so + shouldn't be tried on simply the platform's default reactor. + +Wed Apr 4 16:12:57 UTC 2007 Chad Elliott + + * bin/tao_other_tests.lst: + + Added the Bug_1107_Regression test. + +Wed Apr 4 11:57:48 UTC 2007 Chad Elliott + + * ace/Log_Msg.cpp: + + When ACE::fini() is called, all of the exit hooks registered with + the ACE_Object_Manager are called. In single threaded mode, one + of these is the cleanup adapter for the ACE_Log_Msg object + allocated into a static pointer variable in + ACE_Log_Msg::instance(). + + Calling ACE::init() after ACE::fini() would not re-initialize the + ACE_Log_Msg object and thus memory issues would arise as soon as + it is used. + + I moved the static pointer variable to the file level and made a + new cleanup adapter that would reset the static pointer variable + when the ACE_Log_Msg object is deleted. The next use of + ACE_Log_Msg::instance() would then result in the allocation of a + new ACE_Log_Msg object. + + This fixes Bug 2874. + +Wed Apr 4 11:33:57 UTC 2007 Steve Huston + + * tests/Env_Value_Test.cpp: Cast ACE_Env_Value to ACE_TCHAR to print + its value. + +Wed Apr 4 09:49:00 UTC 2007 Simon Massey + + * include/makeinclude/platform_lynxos.GNU: + Minor warning elimination changes for ACE/TAO. + +Tue Apr 3 22:29:41 UTC 2007 Steve Huston + + * ace/Default_Constants.h: Added ACE_DEFAULT_THREAD_STACKSIZE, which + defaults to 0. This can be used to change the default stack size + argument to ACE_OS::thr_create(). Useful when a platform's default + stack size is not appropriate for an ACE application. + + * ace/OS_NS_Thread.{h cpp}: + * ace/Thread.{h cpp}: + * ace/Thread_Manager.{h cpp}: Changed the spawn[_n] stacksize default + from 0 to ACE_DEFAULT_THREAD_STACKSIZE. Allows the above config + setting to propagate through all thread-spawning methods. + + * ace/config-pharlap.h: Default ACE_DEFAULT_THREAD_STACKSIZE to 1MB. + + * ace/README: Added ACE_DEFAULT_THREAD_STACKSIZE. + + * tests/CDR_File_Test.cpp: Added ACE_HAS_PHARLAP to the condition in + which the test file can't be pre-unlinked. + + * tests/Bug_2653_Regression_Test.cpp: + * tests/CDR_File_Test.cpp: + * tests/Env_Value_Test.cpp: + * tests/MT_Reactor_Upcall_Test.cpp: + * tests/Reactor_Dispatch_Order_Test.cpp: + * tests/Reactor_Registration_Test.cpp: + Replace ACE_ASSERTs with ACE_ERROR. + + * tests/Sendfile_Test.cpp: If client send fails, nothing will happen, + so close the stream and quit. + + * tests/run_test.lst: Disabled unrunnable tests for Pharlap. + +Tue Apr 3 18:14:07 UTC 2007 Chad Elliott + + * ace/Service_Gestalt.h: + + Added the missing export for the ACE_Service_Type_Dynamic_Guard + class. + +Tue Apr 3 13:07:49 UTC 2007 Chad Elliott + + * bin/tao_orb_tests.lst: + + Added the Bug_2734_Regression test. + +Mon Apr 2 15:18:29 UTC 2007 Steve Huston + + * ace/Process.cpp: Add missing #include "ace/Auto_Ptr.h". + * ace/Service_Config.cpp: Add missong #include "ace/Log_Msg.h". + Thanks to Olof Granered + for reporting these. + + * THANKS: Added Olof Granered to the Hall of Fame. + +Mon Apr 2 15:11:24 UTC 2007 Chad Elliott + + * ACEXML/apps/svcconf/Svcconf.cpp: + + As part of the fixes for Bug 2735, we must set errno to EINVAL + when a directive fails to parse. + +Mon Apr 2 15:02:26 UTC 2007 Chad Elliott + + * ace/Service_Object.cpp: + + Removed an unnecessary const_cast of the ACE_DLL data member in + one of the constructors. + + * ace/Service_Config.h: + + Added an ACE_STATIC_SERVICE_DIRECTIVE similar to + ACE_DYNAMIC_SERVICE_DIRECTIVE to ease the testing of processing + single directives with the XML service configurator. + + * ACEXML/apps/svcconf/Svcconf_Handler.cpp: + * ace/Service_Gestalt.h: + * ace/Service_Gestalt.inl: + * ace/Service_Gestalt.cpp: + + Fixed Bug 2677 by moving the ACE_Service_Type_Dynamic_Guard out of + the Service_Gestalt.cpp and into the .h. This guard is then used + in ACEXML_Svcconf_Handler::endElement before loading a shared + library which may insert an entity into the + ACE_Service_Repository. Upon unloading the shared library, + objects will be destroyed in the proper order. Thanks to Lothar + Werzinger for reporting this. + + * bin/tao_orb_tests.lst: + + Added Bug_2677_Regression to the list of tests. + +Fri Mar 30 14:51:19 UTC 2007 Chad Elliott + + * bin/svcconf-convert.pl: + + Only print out the output file if -verbose was used. + + * bin/tao_orb_tests.lst: + + Added the Bug_2735_Regression test. + +Fri Mar 30 14:24:48 UTC 2007 Chad Elliott + + * ace/Service_Gestalt.cpp: + + Added the word ERROR: on the three error messages that use + LM_ERROR. Always set the errno to EINVAL if processing a + directive fails. Also, reformatted some of the code. + +Fri Mar 30 12:10:22 UTC 2007 Johnny Willemsen + + * ace/Containers.{h,inl}: + Changed the constructor of ACE_DLList_Node to accept a void* instead + of void *&, no need for passing it by reference. Thanks to + Wim van den Boogaard + for reporting this. + + * ace/Containers_T.cpp: + ACE_DLList::insert_head/insert_tail, removed the workaround + for the dereferencing warnings because the DLList_Node has been + changed. + + * ace/Containers_T.h: + Doxygen improvements + + * ace/Containers_T.cpp: + Use prefix increment/decrement, initialize pointers with 0, + simplified some methods, const improvements + + * ace/INET_Addr.cpp: + Const improvement + +Thu Mar 29 16:15:24 UTC 2007 Steve Huston + + * ace/String_Base.h: Corrected comment. + * ace/String_Base.{cpp inl}: Corrected calls to set() which specified + 'release' as 1/0 instead of true/false. Thanks to Jeff Parsons for + pointing these out. + +Thu Mar 29 15:46:19 UTC 2007 Douglas C. Schmidt + + * examples/Misc/test_trace.cpp: Updated the documentation to + explain various techniques for adding tracing to applications. + Thanks to John McCabe and Steve + Huston for clarifying the rules. + +Thu Mar 29 12:15:22 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug_2869_Regression + +Thu Mar 29 11:23:22 UTC 2007 Johnny Willemsen + + * ace/config-doxygen.h: + Added ACE_HAS_IP_MULTICAST + +Thu Mar 29 09:11:22 UTC 2007 Johnny Willemsen + + * ace/CDR_Base.inl: + Corrected version check for Intel C++ 9.0 + +Wed Mar 28 15:34:49 UTC 2007 William R. Otte + + * examples/APG/Logging/Trace.h + + Removed usage of variadic macros, they are not really necessary + here. + +Wed Mar 28 10:45:22 UTC 2007 Johnny Willemsen + + * ace/Event.{h,cpp}: + Extende constructor with LPSECURITY_ATTRIBUTES sa argument that + can be used to pass in the security attributes that are then + passes to event_init. Also made the removed_ member a real bool. + Thanks to Michael Graf for proposing + this change + +Wed Mar 28 09:05:22 UTC 2007 Johnny Willemsen + + * ace/CDR_Base.inl: + Intel 9.0 doesn't deliver the intrinsic byte swapping operations. + This has been checked with Intel, they confirm this issue but + also indicate they will not fix this anymore for Intel 9.0, + Intel 9.1 and 10.0 don't have this issue. So, disabled the + intrinsic byte swapping operations when Intel 9.0 is used + +Tue Mar 27 13:58:22 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug_933_Regression + +Mon Mar 26 20:46:34 UTC 2007 William R. Otte + + * ASNMP/asnmp/asn1.cpp + * examples/Threads/thread_specific.cpp + + Fixes for string aliasing warnings. + +Mon Mar 26 15:56:19 UTC 2007 William R. Otte + + * tests/Config_Test.cpp + + Workaround for strict aliasing warning from GCC. + +Mon Mar 26 15:42:35 UTC 2007 William R. Otte + + * tests/TSS_Test.cpp + + Workaround for strict aliasing warning from GCC. + +Mon Mar 26 13:12:22 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + * bin/tao_other_tests.lst: + Moved DIOP test from other to orb tests + +Sun Mar 25 23:22:22 UTC 2007 William R. Otte + + * contrib/utility/Utility/ExH/System/DescriptiveException.hpp + * contrib/utility/Utility/ExH/System/DescriptiveException.ipp + * contrib/utility/Utility/ExH/Compound.tpp + * contrib/utility/Utility/ExH/Compound.hpp + * contrib/utility/Utility/ExH/Logic/Exception.hpp + * contrib/utility/Utility/ExH/Logic/DescriptiveException.hpp + * contrib/utility/Utility/ExH/Logic/DescriptiveException.ipp + * contrib/utility/Utility/ReferenceCounting/Interface.hpp + * contrib/utility/Utility/ReferenceCounting/DefaultImpl.hpp + + An attempt to deal with copious warnings eminating from this + in GCC CIDLC builds. + +Fri Mar 23 12:40:32 UTC 2007 Ossama Othman + + * ace/CDR_Base.inl (swap_2, swap_4, swap_8): + + Take advantage of MSVC++ compiler intrinsic byte swapping + functions to improve performance when demarshaling CDR streams + sent by a host with a different byte ordering. + +Fri Mar 23 15:48:42 UTC 2007 Steve Huston + + * ace/Handle_Gobbler.{h inl}: Removed left-over disabled code from + Thu Mar 22 18:33:19 UTC 2007 Steve Huston + +Fri Mar 23 15:36:48 UTC 2007 Steve Huston + + * ace/DLL_Manager.cpp (close): After + Thu Mar 22 18:33:19 UTC 2007 Steve Huston + was closing the wrong handle value; fixed. + +Fri Mar 23 15:19:18 UTC 2007 Johnny Willemsen + + * ace/CDR_Stream.cpp: + Fixed compile error when ACE_LACKS_CDR_ALIGNMENT is defined. + Thanks to Aleksandar Vukajlovic + for reporting this + +Fri Mar 23 13:11:18 UTC 2007 Phil Mesnier + + * bin/tao_other_tests.lst: + Added new SSLIOP tests to the script. + +Fri Mar 23 12:42:02 UTC 2007 Johnny Willemsen + + * ace/Makefile.am: + Removed config-win32-visualage.h + +Fri Mar 23 06:38:17 UTC 2007 William R. Otte + + * tests/Log_Msg_Backend_Test.cpp + + Unused argument warnings. + +Fri Mar 23 02:33:54 UTC 2007 Abdullah Sowayan + + * ace/ACE.cpp: + + Don't use raw "naked" calls, use the ones provided by ACE_OS. + This fixes Bugzilla 2866. + +Thu Mar 22 19:59:17 UTC 2007 William R. Otte + + * bin/MakeProjectCreator/modules/GNUAutobuildProjectCreator.pm + * bin/MakeProjectCreator/modules/GNUAutobuildWorkspaceCreator.pm + + Added logic to make this generator masquerade as the gnuace + type for the purposes of specific/verbatim clauses. + +Thu Mar 22 19:38:02 UTC 2007 Johnny Willemsen + + * ace/Basic_Types.h: + * ace/config-win32-common.h: + * ace/config-win32.h: + * ace/Global_Macros.h: + * ace/OS_NS_errno.inl: + * ace/OS_NS_sys_stat.{h,inl}: + * ace/OS_NS_Thread.cpp: + * ace/OS_NS_unistd.inl: + * ace/Task.cpp: + * ace/Timer_Heap_T.cpp: + Removed support for Visual Age on Windows + + * ace/Condition_Thread_Mutex.{h,cpp,inl}: + Changed removed_ member from int to real bool + + * ace/config-win32-visualage.h: + Removed from the repo + + * ace/OS_NS_errno.inl: + Removed workaround for BCB4 + +Thu Mar 22 19:25:02 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Abstract_Interface test + +Thu Mar 22 18:44:02 UTC 2007 Chad Elliott + + * ace/ACE.inl: + + Updated a comment about ACE::nibble2hex() working with UNICODE. + + * ace/config-qnx-rtp-62x.h: + + QNX has the getifaddrs interface. + +Thu Mar 22 18:33:19 UTC 2007 Steve Huston + + * ace/DLL_Manager.cpp (ACE_DLL_Handle::close()): When a DLL needs to + be closed, copy the handle value to a local variable and reset the + object's handle_, then release the lock_, then do the dlclose() + without holding the lock in case dlclose() causes a train of + closes to end up coming back through ACE_DLL_Handle::close(). + + * ace/Handle_Gobbler.{h inl}: Use ACE_Handle_Set instead of + ACE_Unbounded_Set to hold the gobbled-up handles. Cuts execution + time on AIX (at least my old-ish 5.2 box) from 7 minutes to a few + seconds, allowing tests that use this to complete. + +Thu Mar 22 18:25:01 UTC 2007 Steve Huston + + * ace/Log_Msg.{h cpp}: Corrected comments describing the format for + %D timestamp. Thanks to Stefan Naewe for reporting this. + + * ace/OS_NS_Thread.inl (thread_mutex_init): On Windows, guard against + InitializeCriticalSection throwing an out-of-memory exception. Thanks + to Aleksandar Vukajlovic for this. + + * ace/Log_Msg_Backend.h: Doxygenized and expanded comments. + * ace/Log_Msg_IPC.h: Moved some comments re reset() from + Log_Msg_Backend to here because they discuss resetting the IPC. + + * ace/Message_Queue_T.{h cpp}: Added an optional 'priority' argument + to ACE_Message_Queue_Ex::enqueue_prio. There was previously no way + to specify a priority for queueing; now there is. The priority + defaults to 0 (lowest priority). + Also fixed up the Doxygen stuff for ACE_Message_Queue_Ex. + + * tests/Message_Queue_Test_Ex.{h cpp}: + Added a test for priority queueing. + + * tests/Log_Msg_Backend_Test.cpp: New test to illustrate how to set + up a custom logging backend and test the hooks are called properly. + + * tests/tests.mpc: + * tests/Makefile.am: + * tests/run_test.lst: Added Log_Msg_Backend_Test. + + * tests/Auto_Event_Test.cpp: + * tests/Semaphore_Test.cpp: Replace ACE_ASSERTS with if/ACE_ERROR to + 1) make sure it runs in Release mode, 2) not wipe out embedded + systems on failures, 3) record something useful in the log. Also, + changed error notices to LM_ERROR. When logging msecs (unsigned + long) cast it to int; ACE_Log_Msg doesn't have the 'l' modifier and + without it %d and long is a mismatch. + +Thu Mar 22 16:29:16 UTC 2007 William R. Otte + + * bin/MakeProjectCreator/modules/GNUAutobuildProjectCreator.pm + * bin/MakeProjectCreator/modules/GNUAutobuildWorkspaceCreator.pm + + Added autobuild workspace creator to collate build output + on a per makefile basis. + +Thu Mar 22 14:51:46 UTC 2007 Chad Elliott + + * bin/make_release.py: + + Fixed a bug where the input file for bzip2 and gzip was not + correct and the md5sum output file was missing a period. + + * docs/bczar/bczar.html: + + Updated the documentation and fixed some spelling mistakes. + + * bin/depgen.pl: + + Modified to use the dependency generator core that was moved into + MPC. + + * bin/DependencyGenerator/DependencyEditor.pm: + * bin/DependencyGenerator/DependencyGenerator.pm: + * bin/DependencyGenerator/DependencyWriter.pm: + * bin/DependencyGenerator/DependencyWriterFactory.pm: + * bin/DependencyGenerator/MakeDependencyWriter.pm: + * bin/DependencyGenerator/MakeObjectGenerator.pm: + * bin/DependencyGenerator/NMakeDependencyWriter.pm: + * bin/DependencyGenerator/NMakeObjectGenerator.pm: + * bin/DependencyGenerator/ObjectGenerator.pm: + * bin/DependencyGenerator/ObjectGeneratorFactory.pm: + * bin/DependencyGenerator/Preprocessor.pm: + + Removed these files. + +Wed Mar 21 12:12:26 CDT 2007 Chad Elliott + + * ACE version 5.5.7 released. + +Tue Mar 20 12:42:13 UTC 2007 Chad Elliott + + * bin/diff-builds.pl: + + Sort the builds so that the output is in order and comparable + between multiple runs of the same date. + +Mon Mar 19 19:16:12 UTC 2007 Johnny Willemsen + + * bin/tao_other_tests.lst: + Disabled several tests for CORBA/e micro + +Mon Mar 19 16:37:21 UTC 2007 Douglas C. Schmidt + + * docs/Download.html: Updated the comments about commercial + support so they point to www.dre.vanderbilt.edu/support.html. + Thanks to Hans van't Hag + for motivating this. + +Mon Mar 12 16:19:49 UTC 2007 Douglas C. Schmidt + + * tests/Future_Test.cpp: Updated this example to point to the + right Active Object location. Thanks to Joe French for motivating this. + +Mon Mar 19 07:53:12 UTC 2007 Johnny Willemsen + + * bin/MakeProjectCreator/config/vc8_warnings.mpb: + Made vc8 and nmake more the same so that also with nmake the + crt warnings are suppressed + +Sun Mar 18 02:09:31 UTC 2007 Krishnakumar B + + * ace/OS_NS_stdlib.cpp: Fixed a race condition in + ACE_OS::mkstemp_emulation() where the value from + ACE_OS::gettimeofday() was truncated due to the use of + ACE_Time_Value::msec(void) as opposed to + ACE_Time_Value::msec(ACE_UINT64&) to convert it to milliseconds. + This resulted in seed value passed to ACE_OS::rand_r() returning + the same sequence of numbers when ACE_OS::mkstemp() was called + successively from the same process. As a result, the filenames + returned from ACE_OS::mkstemp() ended up being the same, if the + template passed in was the same between multiple successive + calls to ACE_OS::mkstemp(). + +Thu Mar 15 14:44:21 UTC 2007 Carlos O'Ryan + + * ace/Select_Reactor_Base.cpp: + The close() operation was trying to read from the notification + pipe event if the notification pipe was not open. I did not + notice this could happen, but the reactor constructor has a flag + for it. + +Thu Mar 15 12:06:12 UTC 2007 Johnny Willemsen + + Reverted the change below, the test stats show that after adding + the functions the Atomic_Op test does fail when these optimized + functions are enabled. + + Mon Mar 5 09:21:12 UTC 2007 Johnny Willemsen + * ace/Atomic_Op_Sparc.c: + * ace/Atomic_Op.{h,cpp}: + Added optimized functions for SunCC on x86. Thanks to + Dennis Chernoivanov for reporting this. + If you want to enable these, add atomic_ops_sparc=1 to your + platform_macros.GNU file + +Thu Mar 15 11:20:31 UTC 2007 Chad Elliott + + * tests/Reactor_Notify_Test.cpp: + + Removed the auto_ptr that deleted the Reactor instance. It is + managed by the ACE library and doesn't need to be deleted. + +Wed Mar 14 21:34:03 UTC 2007 William R. Otte + + * bin/ciao_tests.lst + + Added requirement for the RT-CCM test called RT_CAPABLE, used to + indicate systems which are able to successfully run a test + involving RT policies. + +Wed Mar 14 12:32:36 UTC 2007 Chad Elliott + + * bin/tao_orb_tests.lst: + + Silly me, I forgot the script name when I added the + CORBA_e_compact_Implicit_Activation test. + +Wed Mar 14 09:09:12 UTC 2007 Johnny Willemsen + + * ace/config-hpux-11.00.h: + Set ACE_HAS_VSWPRINTF independent of the compiler used + +Wed Mar 14 08:09:12 UTC 2007 Johnny Willemsen + + * ace/config-linux-common.h: + * ace/config-lite.h: + * include/makeinclude/platform_linux_suncc.GNU: + Changes for the Sun Studio 12 Early Access compiler on linux + +Tue Mar 13 22:04:35 UTC 2007 Steve Huston + + * tests/unload_libace.mpb: Squish the VC8 warning about deprecated + fopen(). + +Tue Mar 13 19:36:09 UTC 2007 Steve Huston + + * ace/OS_NS_stdio.cpp (snprintf): Back off use of _vsnwprintf_s() in + the wide-char version as was done in the narrow-char version (see + Mon Mar 12 17:55:18 UTC 2007 Steve Huston ). + Also, in sprintf(), correct the selection of 3 vs 4 arg call for + WinCE. + +Tue Mar 13 18:43:28 UTC 2007 Chad Elliott + + * bin/tao_orb_tests.lst: + + Added a new test that only runs when the CORBA_E_COMPACT + configuration is enabled. + +Tue Mar 13 13:21:49 UTC 2007 Olli Savia + + * include/makeinclude/platform_lynxos.GNU: + Removed unnecessary PLATFORM_SSL_* settings. + +Tue Mar 13 12:13:37 UTC 2007 Steve Huston + + * bin/MakeProjectCreator/config/vc8_warnings.mpb: For the + vc8_avoid_crt_secure_warnings feature, add /wd4996 to the nmake + case since it seems to not pay attention to _CRT_NONSTDC_NO_WARNINGS. + Also, reversed the default for VC8 SCL secure warnings - they're on + by default since Ossama implemented the checked STL iterator stuff. + +Tue Mar 13 09:57:12 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added new DynUnion_Test + +Tue Mar 13 00:24:22 UTC 2007 Ossama Othman + + * bin/MakeProjectCreator/config/vc8nmake.mpb: + + Subtract /EHsc from the compiler flags instead of /EHs. MPC now + uses /EHsc as the correct replacement for /GX. + +Mon Mar 12 23:44:25 UTC 2007 Ossama Othman + + * ace/checked_iterator.h (ACE_make_checked_array_iterator): + + Added documentation for this header. + + Changed length type from ptrdiff_t to size_t. The length refers + to the length of an array, not a pointer difference. + +Mon Mar 12 21:47:51 UTC 2007 Wallace Zhang + + * ace/OS_NS_stdio.inl: + + Fixed compilation errors on WinCE 5.0 builds. + +Mon Mar 12 22:26:08 UTC 2007 Ossama Othman + + * ace/checked_iterator.h (ACE_make_checked_array_iterator): + + New function template that returns a checked iterator if + supported by the platform (currently VC8 or better), and a + pointer otherwise. + + * ace/Array_Map.cpp (ACE_Array_Map, grow, operator==): + + Call new ACE_make_checked_array_iterator<>() iterator factory + function to generate destination iterator. Addresses VC8 + "C4996" warnings when security related warnings are enabled. + + * ace/Makefile.am: + * ace/ace.mpc: + * ace/ace_for_tao.mpc: + + Added new ace/checked_iterator.h header to the appropriate + header lists. + +Mon Mar 12 21:15:46 UTC 2007 Carlos O'Ryan + + * tests/Reactor_Notify_Test.cpp: + The test was verifying the behavior described in bug 2845. I + neglected to fix the test when we fixed the bug. Mostly because + I am stupid, but also because the test only worked as expected + in a limited number of builds. + This change should fix the test problems we are seeing on the + scoreboard, but the only thing I can say for sure is: + + I managed to reproduce the crash on my machine. + + I understand why the test was crashing. + + I believe the test was wrong and not the library. + + I fixed the test and now valgrind is happy with it. + +Mon Mar 12 17:55:18 UTC 2007 Steve Huston + + * ace/OS_NS_stdio.inl (vsnprintf): Back out the attempt to use the + new _vsnprintf_s() - it doesn't report the required string length + when it exceeds maxlen and we need this info. + +Mon Mar 12 17:38:26 UTC 2007 Steve Huston + + * bin/MakeProjectCreator/config/vc8_warnings.mpb: + * bin/MakeProjectCreator/config/vc8nmake.mpb: + Moved the _CRT_NONSTDC_NO_WARNINGS, _CRT_SECURE_NO_DEPRECATE, and + _SCL_SECURE_NO_WARNINGS defs from vc8nmake.mpb to vc8_warnings.mpb + so they're all in one place for easy maintenance and also can be + switched on and off via MPC features. + + This effectively reverts the changes to vc8nmake.mpb since: + Fri Mar 9 21:04:22 UTC 2007 Steve Huston + + * ace/config-win32-msvc-8.h: Deleted the pragma disable for warning + 4355 (this used in base member initializer list). Added it to + bin/MakeProjectCreator/config/vc8_warnings.mpb. This should both + unblock it for regular users and block it for the CIDLC build. + +Mon Mar 12 16:39:25 UTC 2007 Steve Huston + + * ACE-INSTALL.html: Note that LabVIEW RT targets may require + the user to copy Windows DLLs to the target for Debug mode. + +Mon Mar 12 14:15:12 UTC 2007 Johnny Willemsen + + * ace/INET_Addr.cpp: + Removed not needed return + +Mon Mar 12 13:54:12 UTC 2007 Johnny Willemsen + + * bin/tao_other_tests.lst: + Don't run bug 2800 regression tests in a ST configuration + +Mon Mar 12 13:12:12 UTC 2007 Johnny Willemsen + + * ace/config-vxworks6.3.h: + * ace/config-vxworks6.4.h: + Only when building a static rtp we enable aio by default. For + building shared we need an optional library, see the file below + how to enable this + + * include/makeinclude/platform_vxworks6.3.GNU: + If you build rtp with shared library and want to use aio then you + need to build the custom AioPx library first, then add aio=1 + to your platform_macros.GNU file to enable aio in ACE and link + the needed additonal library + +Mon Mar 12 12:35:12 UTC 2007 Johnny Willemsen + + * ace/config-vxworks6.3.h: + * ace/config-vxworks6.4.h: + VxWorks 6.4 does deliver strings.h in kernel mode and strcasecmp/ + strncasecmp can't be used in rtp mode, but can be used in kernel + mode + +Mon Mar 12 10:51:38 UTC 2007 Steve Huston + + * bin/MakeProjectCreator/config/vc8nmake.mpb: Added /D for + _CRT_SECURE_NO_DEPRECATE and _SCL_SECURE_NO_WARNINGS to silence + those compile warnings; added /wd4290 to silence the warnings + "C++ exception specification ignored except to indicate a function + is not __declspec(nothrow)". Note that the latter warning can also + be remedied by using ACE_THROW_SPEC; this has been done for ACE + but not in TAO. + +Mon Mar 12 01:31:16 UTC 2007 Abdullah Sowayan + + * examples/DLL/test_dll.cpp: + + This example was not working under Windows XP when compiled with + Visual Studio 2003.NET. The culprit was the following line of code: + + dll.open (ACE_TEXT("./") ACE_DLL_PREFIX ACE_TEXT("DLL_Today")); + + We don't need to supply "./" to the open method, since $ACE_ROOT/lib + is in DLL search path environment variable (PATH for Windows and + LD_LIBRARY_PATH for unix-like systems). + +Fri Mar 9 21:04:22 UTC 2007 Steve Huston + + * bin/MakeProjectCreator/config/vc8nmake.mpb: Added /wd4250 + (to disable inheritance via dominance warning) and + /D _CRT_SECURE_NO_DEPRECATE to disable the warnings about + deprecated CRT functions. + +Fri Mar 9 16:49:03 UTC 2007 Steve Huston + + * ace/OS_NS_string.inl (strncat): Disable the TR24731/2005 calls to + strncat_s() and wcsncat_s() for now. The dest length includes the + characters that were already in dest before appending src. To really + use the safer functions, the dest max length is needed from the + caller. So, we'll either need a new method or an added arg to the + current methods. + +Fri Mar 9 16:27:23 UTC 2007 Steve Huston + + * ace/OS_NS_stdio.cpp (snprintf): + * ace/OS_NS_string.inl (strncat): When using the "safe" calls from + TR24731/2005, specify the dest count as the user-specified source + length + 1 for the null. This assumes the caller knows the dest + buffer is long enough to hold what's specified. Specifying + _TRUNCATE as the src count gets the behavior we expect - the + specified number of bytes are copied with the assurance a nul + terminator is added. This avoids the CRT error handler. + +Fri Mar 9 16:10:09 UTC 2007 Steve Huston + + * ace/Log_Msg_NT_Event_Log.{h cpp}: Changed return type of log() from + int to ssize_t. Matches changes from: + Fri Mar 9 00:53:43 UTC 2007 Steve Huston + +Thu Mar 9 09:44:14 UTC 2007 Ossama Othman + + * ace/Time_Value.cpp (operator *=): + + Reverted bulk of the changes. New implementation will be + revisited as time permits. + +Fri Mar 9 09:42:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.3.GNU: + No need to explicitly link dl when building shared + +Thu Mar 9 07:44:14 UTC 2007 Ossama Othman + + * tests/Time_Value_Test.cpp (run_main): + + Simplified assertions. Rather than test equality of sec() and + usec() components separately, just test equality of the + ACE_Time_Value objects as a whole. + +Fri Mar 9 00:53:43 UTC 2007 Steve Huston + + Changes to resolve or quiet warnings from Visual Studio .NET 2005: + + * bin/MakeProjectCreator/config/acedefaults.mpb: + * bin/MakeProjectCreator/config/vc8_warnings.mpb: Removed the + default addition of _CRT_SECURE_NO_DEPRECATE from the MPC VC8 + project templates. Many of the places where the changes recommended + by Microsoft could be made have been made (see further below). There + are still a number of places where the warnings are generated, + mostly because ACE wraps "unsafe" methods such as strcpy(), printf(), + etc. These can't legitimately be changed. So most of what can (and + should) be changed in ACE has been. To keep the warnings quiet + without removing them from any user application that includes ACE + headers, the acedefaults.mpb base project now inherits from + vc8_warnings - vc8_warnings will, by default, silence the warnings + we don't really need to see, but users of ACE will still get the + warnings when building their apps, unless they take similar steps + to silence them (or if they generate projects using the acedefaults + base project with MPC). + We can still elect to enable all the warnings by setting MPC features + to 0 (see vc8_warnings.mpb for features). And this is a good thing + to do still since we can improve the security situation by reviewing + things flagged as warnings and repair what's needed (not everything + flagged will be in need of a fix). + + * ace/config-win32-msvc-8.h: Removed most of the pragmas that silenced + legit warnings from VC8. Added ACE_HAS_TR24731_2005_CRT indicating + that there's a C Run-Time implementing C99 draft TR 24731 dated + October 2005 detailing security improvements to the C run-time. + This macros indicates that the more secure versions of the calls + can be used where desireable. + Also added a macro, ACE_WIN32_VC8, to easily tell where we need to + selectively disable a warning that we can tell by inspection is + irrelevant. Such as use of 'this' in an initializer list and we can + tell by inspecting the code in question to be sure that the passed + pointer isn't used to call a method on an object that's not fully + constructed yet. + + * ace/config-macros.h: When ACE_HAS_TR24731_2005_CRT is defined, + define ACE_SECURECRTCALL to make a call and adjust the returned + error value to the ACE return value convention. + + * ace/README: Describe ACE_HAS_TR24731_2005_CRT. + + * NEWS: Described the removing of the warning preventers and that + user code may trigger warnings that weren't showing up in previous + ACE versions. + + * ace/Global_Macros.h: For VC8 with ACE_HAS_EXCEPTIONS, define + ACE_THROW_SPEC as throw(...) always. VC8 always treats any throw + spec as throw(...) and issues a warning to this effect. This change + silences the warnings. The #if intends to set this for VC8 only, + guessing that any VC9 will be _MSC_VER 1500. + + * ace/os_includes/sys/os_types.h: For non-Borland, non-Mingw ACE_WIN32 + change mode_t from u_short to int. Matches CRT docs. + + * ace/Local_Tokens.cpp: + * ace/Select_Reactor_Base.inl: + * ace/WFMO_Reactor.cpp: + * apps/Gateway/Gateway/Event_Channel.cpp: + Disable VC8's C4355 warning that 'this' is used in an initializer + list; we know, and it's ok. + + * ace/Select_Reactor_T.cpp (ctor): Rather than pass a reference to + 'this' incompletely constructed object to token_, call token_'s + reactor() method to set the reactor impl pointer. + + * ace/Registry.{h cpp}: Rearranged setting of Binding_Iterator in the + inherited Iteration_State object. Instead of passing a reference to + an object that's not yet fully constructed, call a new iterator() + method to set that pointer. + + * ace/Service_Config.cpp (ctor): Rather than set the TSS pointer in + the initializer list before it's complete, call ts_object() to set + it within the constructor body. We could also catch a setup error + here and throw an exception if ACE ever goes that way. + + * ace/OS_NS_time.h (ace_timezone): Use the GetTimeZoneInformation() + system call to get timezone bias for all Windows platforms and + compilers. Much easier and faster than going through the C run-time + and will work with new US daylight savings changes automatically. + + * ace/OS_NS_sys_stat.inl: (umask): + * ace/OS_NS_stdio.inl (vsnprintf): + * ace/OS_NS_stdio.cpp (sprintf, snprintf): + * ace/OS_NS_string.inl (strtok_r, strncat): + * ace/OS_NS_string.cpp (strerror): + Use "safer" functions when ACE_HAS_TR24731_2005_CRT. + + * ace/OS_NS_time.{inl cpp}: (asctime_r, ctime_r, gmtime_r, + localtime_r): Use new functions when ACE_HAS_TR24731_2005_CRT. + NOTE - I purposely did not substitute the secure version for the + non _r methods (asctime, ctime, etc.) since that would have to use + a local static variable. That defeats the purpose of being able to + use a caller-supplied destination. Thus, the places that can + substitute a secure function are, and those that can't don't. This + will notify users of code that's potentially unsafe and allow them to + switch to the safer _r version. We can set the + _CRT_SECURE_NO_WARNINGS macro for non-inline builds (where the unsafe + versions will be compiled in) and leave the warning in place for + inlined builds to put the user on notice that a potentially unsafe + method is being used. + + * ace/UUID.cpp (from_string_i): Use sscanf_s for VC8. + + * ace/Atomic_Op_T.{cpp inl}: + * ace/INET_Addr.cpp: + * ace/Filecache.cpp: + * ace/Future.cpp: + * ace/Map_Manager.inl: + * ace/Message_Queue_T.cpp: + * ace/Process_Mutex.cpp: + * ace/RW_Process_Mutex.cpp: + * ace/Stream.cpp: Don't use 'this' in initializer list. Quiets + VC8's warnings. + + * protocols/ace/TMCast/Group.{hpp cpp}: Change 'throw' to + ACE_THROW_SPEC to quiet the VC8 warnings. + + * tests/unload_libace.mpb: Add _CRT_SECURE_NO_WARNINGS for VC8. Else + VC8 warns about fopen() and we don't care. + + * ace/README: Added ACE_LACKS_WIN32_GETPROCESSTIMES. + + * ace/config-WinCE.h: Added ACE_LACKS_WIN32_SECURITY_DESCRIPTORS and + ACE_LACKS_WIN32_GETPROCESSTIMES. + + * ace/OS_NS_dirent.cpp (opendir_emulation): WinCE offers + GetFileAttributes() but documents a failing return value as + 0xFFFFFFFF whereas on desktop/server Windows a failed call returns + INVALID_FILE_ATTRIBUTES. So on WinCE, define INVALID_FILE_ATTRIBUTES. + + * ace/OS_NS_sys_resource.inl (getrusage): Don't try GetProcessTimes() + on Win32 if ACE_LACKS_WIN32_GETPROCESSTIMES is set. + + * ace/OS_NS_stdio.inl (cuserid): WinCE returns ENOTSUP for these. + + * ace/OS_NS_unistd.inl (chdir): If ACE_HAS_WINCE, return ENOTSUP. + + * ace/Log_Record.cpp (operator<<): Truncate the message data length + down to 32 bits (ACE_CDR::ULong) size since that's all the + CDR ops and header field can handle. + + * ace/Log_Msg_Backend.h: + * ace/Log_msg_UNIX_Syslog.{h cpp}: + * ace/Log_Msg_IPC.h: + * ace/Log_Msg_IPC.cpp (log): Changed the return type of log() from int + to ssize_t to match what it's returning (byte count or error). + Corrected the max_payload_size calculation + to match the header that operator<< (above) writes. The MAXLOGMSGLEN + isn't always enough now that ACE_Log_Record's data can be extended. + +Fri Mar 9 00:57:26 UTC 2007 Carlos O'Ryan + + * ace/Event_Handler.cpp: + Fixed bug 2845, the event handler destructor no longer calls + purge_pending_notifications. More details about the rationale + can be found in the bug report. + + * NEWS: + * docs/ACE-FMM.html: + Prominently document the change, since it may catch people + unawares. + +Thu Mar 8 21:27:54 UTC 2007 Steve Huston + + * ace/String_Base.{h cpp}: Change ACE_String_Base::release_ from int + to bool. Thanks to Kelly Hickel for this change. This changes the + signatures of the following methods: + ACE_String_Base (const CHAR *s, + ACE_Allocator *the_allocator = 0, + int release = 1); + to + ACE_String_Base (const CHAR *s, + ACE_Allocator *the_allocator = 0, + bool release = true); + + ACE_String_Base (const CHAR *s, + size_type len, + ACE_Allocator *the_allocator = 0, + int release = 1); + to + ACE_String_Base (const CHAR *s, + size_type len, + ACE_Allocator *the_allocator = 0, + bool release = true); + + void set (const CHAR * s, int release = 1); + to + void set (const CHAR * s, bool release = true); + + void set (const CHAR * s, size_type len, int release); + to + void set (const CHAR * s, size_type len, bool release); + + void clear (int release = 0); + to + void clear (bool release = false); + + * ace/Configuration.cpp: + * ACEXML/common/NamespaceSupport.cpp: + * ACEXML/parser/parser/Entity_Manager.inl: + * tests/SString_Test.cpp: Changes to string usage to + reflect the above signature changes. Changed '0' args to 'false'. + + * NEWS: Added a description of the above changed methods. + +Thu Mar 8 21:24:38 UTC 2007 Steve Huston + + * tests/Cached_Conn_Test.cpp: + * tests/Cached_Accept_Conn_Test.cpp: Replace use of ACE_ASSERT with + ACE_ERROR. ACE_ASSERTS on single-process targets do really bad + things... + +Thu Mar 8 20:29:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.3.GNU: + More changes to build with shared library support using VxWorks 6.x + +Thu Mar 8 19:06:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.3.GNU: + Only add dl to LDLIBS when building shared + +Thu Mar 8 18:06:14 UTC 2007 Ossama Othman + + * ace/Time_Value.cpp (operator *=): + + Removed vestigial time value saturation code that does not work + correctly with latest implementation. + +Thu Mar 8 14:21:12 UTC 2007 Johnny Willemsen + + * ace/config-vxworks6.2.h: + * ace/config-vxworks6.3.h: + * ace/config-vxworks6.4.h: + Don't set ACE_HAS_SVR4_DYNAMIC_LINKING when we do a static + rtp build. + +Thu Mar 8 13:04:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.3.GNU: + Added some initial support for building shared libraries + with vxworks 6.3, this is not ready yet, in progress + +Thu Mar 8 12:17:50 UTC 2007 Chad Elliott + + * bin/MakeProjectCreator/config/ace_openssl.mpb: + * include/makeinclude/wrapper_macros.GNU: + + Moved the addition of SSL related macros out of wrapper_macros.GNU + and into a specific section in ace_openssl.mpb. The result is + that the SSL related information is only added to the projects + that inherit from ace_openssl (instead of every single project). + +Thu Mar 8 02:59:02 UTC 2007 Carlos O'Ryan + + * ace/Notification_Queue.cpp: + Fixed implementation of reset() make sure the code works right + when there are null event handlers in the queue. This should + have been part of the original fixes for bug 2820. + + * tests/Notification_Queue_Unit_Test.cpp: + Add new test cases for the reset() operation, in particular + check for null event handlers in the queue. + +Wed Mar 7 19:07:58 UTC 2007 Iliyan Jeliazkov + + * ace/Message_Block.cpp: + + Fixing a problem caused by inadvertently overwriting an external + buffer passed in the constructor. It happens when + ACE_INITIALIZE_MEMORY_BEFORE_USE is set (as result of setting + ACE_HAS_VALGRIND). Thanks to Johnny Willemsen for reporting it. + +Wed Mar 7 18:44:10 UTC 2007 Chad Elliott + + * include/makeinclude/wrapper_macros.GNU: + + Fixed an issue where if ssl wasn't set to zero, it was assumed to + be set to non-zero (ignoring the case where it could be set to + empty). + +Wed Mar 7 17:32:51 UTC 2007 Ossama Othman + + * ace/Time_Value.cpp (operator*=): + + Altered implementation to avoid converting the microseconds + component of the ACE_Time_Value to a fraction of a second. In + the case were the floating point type's mantissa width is the + same as the width of the time_t (seconds) value, a maxed out + ACE_Time_Value seconds component would utilize all bits in the + mantissa, leaving no room for a fraction. The microseconds + component would end up not contributing to the multiplication. + Multiply the seconds and microseconds components separately + instead. This also saves us a floating point division, which + can be expensive. + +Wed Mar 7 16:35:04 UTC 2007 Chad Elliott + + * bin/MakeProjectCreator/config/ace_openssl.mpb: + * include/makeinclude/wrapper_macros.GNU: + + Removed the addition of $(SSL_ROOT)/include and $(SSL_ROOT)/lib + from the includes and libpaths project variables and ssl and + crypto from the lit_libs settings for gnuace (as was done for + automake). + + This functionality will now come from wrapper_macros.GNU in the + form of PLATFORM_SSL_CPPFLAGS, PLATFORM_SSL_LDFLAGS and + PLATFORM_SSL_LIBS. If these variables are not set, they will be + given defaults based on the SSL_ROOT variable, as long as SSL_ROOT + is set and is not set to /usr. + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Added support for the compile_flags and linkflags template + variables. + +Wed Mar 7 13:12:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.5.x.GNU: + * include/makeinclude/platform_vxworks6.2.GNU: + Simplified these files + + * include/makeinclude/platform_vxworks6.3.GNU: + Added support to use a windows host system for the cross build + +Wed Mar 7 12:34:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/wrapper_macros.GNU: + Removed setting of ACELIB, in the generated makefiles it is + always cleared again + + * bin/MakeProjectCreator/templates.gnu.mpb: + Removed clearing of ACELIB and setting of tao_dont_use_idl_make_rule + +Wed Mar 7 12:20:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/rules.local.GNU: + Removed check for TAO_IDL_DEP, the generated GNUmakefiles do + check for this + +Wed Mar 7 11:46:46 UTC 2007 Carlos O'Ryan + + * tests/Bug_2820_Regression_Test.cpp: + Use the standard ACE workaround for platforms with a broken + std::auto_ptr<>. + +Wed Mar 7 09:56:12 UTC 2007 Johnny Willemsen + + * ace/Atomic_Op.cpp: + Implemented the single_cpu_* methods for PPC, because of the lack + of a multi cpu ppc board we don't have these methods implemented + and we don't enable this by default. If you want to use the PPC + optimized operations for a single cpu board add + ACE_HAS_BUILTIN_ATOMIC_OP to your config.h + +Wed Mar 7 02:51:50 UTC 2007 William R. Otte + + * docs/bczar/bczar.html + + Updated bczar documentation to reflect change in release script. + + * bin/make_release + * bin/make_release.py + + Removed the old release script and added the new one. + +Tue Mar 6 23:06:15 UTC 2007 Ossama Othman + + * ace/Time_Value.cpp (operator*=): + + Use long double for internal computations if double is not large + enough to retain precision of the time_t/suseconds_t values. + This will only provide improved behavior with compilers that + support double-extended precision floating numbers, i.e. >= 79 + bits. + + Added comments to explain what is being done in the + implementation. + +Tue Mar 6 07:47:12 UTC 2007 Johnny Willemsen + + * ace/OS.inl: + Fixed compile error with VxWorks 6.x using a Windows host + +Tue Mar 6 15:27:52 UTC 2007 William R. Otte + + * NEWS: + + Noted removal of eVC3/4 projects. + +Tue Mar 6 15:00:00 UTC 2007 Ciju John + + * tests/INET_Addr_Test.cpp: + Add test for ACE_INET_Addr::is_loopback () API. This tests a + selected set of addresses to validate API's conformance with RFC + 3330. + +Tue Mar 6 13:21:24 UTC 2007 Douglas C. Schmidt + + * COPYING: Updated this file to clarify that the ACE license need + not be shipped with binary-only releases. Thanks to Michael + Kircher and Werner + Burger for motivating + this. + +Tue Mar 6 12:43:01 UTC 2007 Chad Elliott + + * tests/Date_Time_Test.cpp: + + Handle the rare case where the minute rolls over during the test. + +Tue Mar 6 04:41:36 UTC 2007 Abdullah Sowayan + + * examples/DLL/README: + + README was referring to files (dsp/dsw) used by Visual Studio C++ 6. + Updated to refer to files (sln/vcproj) used by VC++ 7.1 or later. + +Tue Mar 6 02:37:53 UTC 2007 Carlos O'Ryan + + * Merged changes from the fix_bug_2820 branch. From revision + 77533 to revision 77546. + + Tue Mar 6 02:07:43 UTC 2007 Carlos O'Ryan + + * ace/Select_Reactor_Base.cpp: + Fixed bugs in loop to extract event handlers from notification + pipe. + + * tests/Bug_2820_Regression_Test.cpp: + Fixed several problems in the test: + - The Event_Handler called on the Reactor on its destructor, but + by then the reactor was already destroyed. + - Improved debugging messages. + - Fixed memory management problems, valgrind is happy now. + + Mon Mar 5 18:01:36 UTC 2007 Carlos O'Ryan + + * ace/Notification_Queue.cpp: + When deleting the queue we must decrease the reference count on + all the event handlers stored there. + + * ace/Select_Reactor_Base.cpp: + When the notification pipe is destroyed we must read the data + stored there and release all the event handlers. Otherwise the + reference counts are broken. + + * tests/run_test.lst: + Add Bug_2820_Regression_Test to the list. + + Mon Mar 5 17:16:16 UTC 2007 Carlos O'Ryan + + * tests/Bug_2820_Regression_Test.cpp: + The test was broken, it did not delete the Reactor, so it failed + to test what we wanted. + +Tue Mar 6 00:10:36 UTC 2007 Steve Huston + + * examples/ASX/UPIPE_Event_Server/event_server.cpp: Use ACE_DEBUG + to display the message containing a time_t. Use of the standard + iostream operator<< with time_t gives the Intel90 compiler fits. + +Mon Mar 5 23:09:59 UTC 2007 Steve Huston + + * ace/Log_Msg.{h cpp}: Added new format specifiers: + %b to format ssize_t values + %B to format size_t values + %: to format time_t values + + Note that these use, when necessary, printf format specifiers such + as ACE_SIZE_T_FORMAT_SPECIFIER and ACE_INT64_FORMAT_SPECIFIER. + The printf formatters can't be used portably in ACE_Log_Msg format + strings because 1) some of them use %I, which has a different meaning + in ACE_Log_Msg already and 2) some of the new printf formats are + more complicated that ACE_Log_Msg knows how to deal with in its + existing logic to use format modifiers. The new ACE_Log_Msg format + specifiers make it easy to portably log these types that can change + sizes across platforms. + + * ace/Log_Record.cpp (dump): + * tests/Cached_Allocator_Test.cpp: + * tests/High_Res_Timer_Test.cpp: Use the new ACE_Log_Msg format + specifiers for size_t and time_t logged values. + +Mon Mar 5 22:23:01 UTC 2007 Adam Mitz + + * bin/clean_sems.sh: + + s/xargs/xargs -r/ The -r switch to xargs prevents the command from + being executed when there are no arguments. This will prevent the + extra scoreboard output on Linux (when rem_sems is used): + usage: ipcrm [ [-q msqid] [-m shmid] [-s semid] + [-Q msgkey] [-M shmkey] [-S semkey] ... ] + deprecated usage: ipcrm {shm | msg | sem} id ... + +Mon Mar 5 18:02:42 UTC 2007 Ossama Othman + + * ace/Basic_Types.h (ACE_UINT64_MAX): + + Simplified preprocessor conditionals. + + * ace/RB_Tree.h (ACE_RB_Tree_Iterator_Base): + + Made copy constructor public instead of private. The assignment + operator was already public so there was nothing to be gained by + making the copy constructor protected. Addresses Sun Studio 10 + warnings. + + * ace/Time_Value.inl (to_usec): + + Added support for ACE_LACKS_UNSIGNEDLONGLONG_T case. + + * ace/UUID.cpp (get_systemtime): + + In the ACE_LACKS_UNSIGNEDLONGLONG_T case, wrap 64-bit integer + constant with ACE_INT64_LITERAL macro. Addresses potential + problem where the constant is intepreted as a "long", instead of + "long long". + +Mon Mar 5 17:22:26 UTC 2007 Ciju John + + * ace/INET_Addr.inl: + * ace/INET_Addr.cpp: + * ace/QoS/SOCK_Dgram_Mcast_QoS.cpp: + RFC 3330 defines loopback as any address with 127.x.x.x. The + is_loopback API currently simply compares against the + INADDR_LOOPBACK macro. Doing so restricts loopback definition to + 127.0.0.1 which is inconsistent with the RFC definition. This + change will include any address with 127.x.x.x as loopback. + +Mon Mar 5 14:16:49 UTC 2007 Olli Savia + + * tests/run_test.lst: + Updated for LynxOS. + +Mon Mar 5 11:25:12 UTC 2007 Johnny Willemsen + + * ace/config-hpux-11.00.h: + Enabled ACE_HAS_VSFWPRINTF for aCC compiler + +Mon Mar 5 09:21:12 UTC 2007 Johnny Willemsen + + * ace/Atomic_Op_Sparc.c: + * ace/Atomic_Op.{h,cpp}: + Added optimized functions for SunCC on x86. Thanks to + Dennis Chernoivanov for reporting this. + If you want to enable these, add atomic_ops_sparc=1 to your + platform_macros.GNU file + +Sat Mar 3 17:35:52 UTC 2007 Ossama Othman + + * ace/Basic_Types.h (ACE_UINT64_MAX): + + Re-wrap the integer constant with the ACE_UINT64_LITERAL macro + to ensure the appropriate type specifier is used. + +Fri Mar 3 5:01:19 UTC 2007 Ossama Othman + + * ace/Basic_Types.h (ACE_UINT64_MAX): + + Reintroduced this constant for the case where 64 bit integers + are natively supported. It was inadvertently removed. + + Removed stray semi-colon in ACE_LACKS_{UNSIGNED}LONGLONG_T + case. + +Fri Mar 2 21:42:54 UTC 2007 Ossama Othman + + * ace/Basic_Types.h (ACE_UINT64_MAX): + + Corrected value for the ACE_LACKS_{UNSIGNED}LONG_LONG_T case. + + (ACE_U64_TO_U32, ACE_CU64_TO_CU32): + + Converted these macros to inlined functions. + + (ACE_LONGLONG_TO_PTR): + + Cast pointer to intptr_t instead of ptrdiff_t before casting + to the pointer type. The ptrdiff_t type is meant for pointer + differences. + + * ace/High_Res_Timer.cpp (dump): + + Drop ACE_CU64_TO_CU32 macro in favor of standard static_cast<>. + There was no real use for that macro in this case. + + * ace/Numeric_Limits.h (ACE_Numeric_Limits): + + Added a specialization for ACE_U_LongLong. + + * ace/Sample_History.cpp (dump_samples): + + Removed unnecessary cast to 32 bit value. + + Corrected Log_Msg format specifier for unsigned type. + + * ace/Time_Value.cpp (operator*=): + * tests/Time_Value_Test.cpp (run_main): + + Removed ACE_LACKS_NUMERIC_LIMITS preprocessor conditional. Use + ACE_Numeric_Limits<> instead. It is always available. + + * ace/Time_Value.h (to_usec): + * ace/Time_Value.inl (to_usec): + + Enabled support for this method when ACE_LACKS_LONGLONG_T is + defined. + + * ace/UUID.cpp (get_systemtime): + + Fixed support for ACE_U_LongLong type. + +Fri Mar 2 20:48:45 UTC 2007 Steve Huston + + * ACE-INSTALL.html: Improved the description of using Pharlap ETS and + described the ACE_PHARLAP_TESTLOG_TO_FILE config setting. + + * ace/config-pharlap.h: Add a IN_CLASSD(i) macro that always reports + false. Although Pharlap is supposed to support multicast, the + IN_CLASSD macro is only added at WinSock 2. + + * tests/Test_Output.cpp: Allow Pharlap to log to a file by setting + ACE_PHARLAP_TESTLOG_TO_FILE in config.h. The default behavior of + logging to the system console still stands. + +Fri Mar 2 18:18:25 UTC 2007 Chad Elliott + + * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm: + + Override the targets method to supply a list of targets that can + be used with Eclipse. + +Fri Mar 2 17:48:09 UTC 2007 Ossama Othman + + * ace/Truncate.h (Truncator): + + Fixed one more typo in the ACE_U_LongLong partial specialization + of this functor. Also corrected truncation logic. + +Thu Mar 1 16:30:13 UTC 2007 Douglas C. Schmidt + + * ace/Log_Msg.h (ACE_Log_Msg): Updated the document to remove the + claim that stdout can be used. Thanks to Ian C White + for reporting this. + +Thu Mar 1 13:15:12 UTC 2007 Johnny Willemsen + + * ace/config-hpux-11.00.h: + Removed ACE_HAS_VSWPRINTF, there are dependencies on this + define and no time to handle this fully. + +Thu Mar 1 12:28:12 UTC 2007 Johnny Willemsen + + * ace/Sock_Connect.cpp: + Fixed sun warning + +Thu Mar 1 12:18:12 UTC 2007 Johnny Willemsen + + * examples/Reactor/Misc/test_signals_2.cpp: + Removed HPUX disabling, compiles fine on our system + +Thu Mar 1 9:42:12 UTC 2007 Martin Corino + + * bin/PerlACE/Process_Unix.pm: + * bin/PerlACE/ProcessVX_Unix.pm: + Some fixes for running VxWorks 6.x RTP tests. + +Thu Mar 1 08:51:12 UTC 2007 Johnny Willemsen + + * ace/OS_NS_stdio.{cpp,inl}: + Introduced new ACE_HAS_VSWPRINTF that we can set when a platform + has this method + + * ace/config-hpux-11.00.h: + Added ACE_HAS_VSWPRINTF + +Wed Feb 28 21:34:45 UTC 2007 Wallace Zhang + + * bin/tao_orb_tests.lst: + + Added two new TAO tests. + +Wed Feb 28 19:16:12 UTC 2007 Martin Corino + + * ace/DLL_Manager.cpp: + * ace/Parse_Node.cpp: + Fixed pointer conversion warnings on OpenVMS. + +Wed Feb 28 17:44:20 UTC 2007 Ossama Othman + + * ace/Truncate.h (Truncator): + + Fixed typo in the ACE_LACKS_UNSIGNEDLONGLONG_T case. + s/ACE_UIN32/ACE_UINT32/. + +Wed Feb 28 13:32:12 UTC 2007 Johnny Willemsen + + * ace/config-hpux-11.00.h: + Moved ACE_HAS_SSIZE_T outside of the compiler specific part, gcc + and aCC do have ssize_t. Also moved ACE_HAS_XPG4_MULTIBYTE_CHAR + outside of the compiler part. + +Wed Feb 28 11:09:12 UTC 2007 Johnny Willemsen + + * ace/OS_NS_unistd.cpp (num_processors): + Implemented for HPUX + +Wed Feb 28 09:58:12 UTC 2007 Johnny Willemsen + + * bin/ADDIDL.DSM: + Moved to TAO + + * bin/msvc_cidlc.pl: + Moved to CIAO + + * indent_macros.perl: + * indent_macros.pl: + Renamed extension to .pl + +Wed Feb 28 09:44:12 UTC 2007 Johnny Willemsen + + * bin/corba-boolean.perl: + * bin/rm_exception_macros.pl: + * bin/subst_env.pl: + * bin/tao_env.pl: + * bin/tao_svcconf.pl: + Moved to TAO/bin, no need to ship these with ACE + +Wed Feb 28 08:14:12 UTC 2007 Johnny Willemsen + + * ace/DLL_Manager.cpp: + Fixed a deadlock that could occur when a dll is loaded which itselfs + also loads a dll in its static initialisation. This fixes bugzilla bug + 2830. + +Tue Feb 27 21:18:07 UTC 2007 Ossama Othman + + * netsvcs/lib/Time_Request_Reply.cpp: + * tests/Integer_Truncate_Test.cpp: + * tests/CDR_File_Test.cpp: + + s/ACE_Utils::Truncate/ACE_Utils::truncate_cast/g. The former is + deprecated. + + * tests/High_Res_Timer_Test.cpp: + + Improved variable types to make use of + ACE_Utils::truncate_cast<> unnecessary. + +Tue Feb 27 18:55:12 UTC 2007 Iliyan Jeliazkov + + * ace/CDR_Stream.cpp: + * ace/Message_Block.cpp: + + The intent of the change is to better detect (and be able to + recover from) a situation when memory allocation fails in + constructing or initializing an ACE_Data_Block. It fixes a + problem with the change from "Mon Feb 26 19:06:36 UTC 2007" + which wasn't accounting for the new datablock size correctly. + +Tue Feb 27 19:33:13 UTC 2007 Ossama Othman + + * ace/Truncate.h: + + Added specializations for ACE_U_LongLong. + + Added yet another const specialization for BCB6 to work around + its inability to use valid specializations with template + parameters that are not const. + + Removed ACE_Utils::Truncate<> altogether. Use + ACE_Utils::truncate_cast<> instead. + +Tue Feb 27 15:18:50 UTC 2007 Chad Elliott + + * bin/MakeProjectCreator/docs/templates/gnu.txt: + + Added documentation for template variables used by the gnuace + project type. This is used by document_template.pl found in + MPC/devtools. + +Tue Feb 27 14:59:12 UTC 2007 Johnny Willemsen + + * tests/Process_Manager_Test.cpp: + Fixed incorrect initialized variable + +Tue Feb 27 14:20:26 UTC 2007 Iliyan Jeliazkov + + * ace/CDR_Stream.cpp: + * ace/Message_Block.cpp: + + Reverting my patch from "Mon Feb 26 19:06:36 UTC 2007". It needs + more work. + +Tue Feb 27 13:57:12 UTC 2007 Johnny Willemsen + + * ace/High_Res_Timer.cpp: + * ace/DLL_Test.cpp: + Removed check for KCC, that compiler is not supported anymore + +Tue Feb 27 11:45:06 UTC 2007 Carlos O'Ryan + + * tests/Notification_Queue_Unit_Test.cpp: + Fixed compilation error in Redhat_Enterprise_Linux_3_Debug_WChar + build. Thanks to Johnny Willemsen for letting me know. + +Tue Feb 27 03:34:40 UTC 2007 Carlos O'Ryan + + * tests/Notification_Queue_Unit_Test.cpp: + Use functions instead of macros to workaround compiler warnings + in the HP-UX_11iv2_IA64_aCC_wchar build. + The warnings were harmless, but the code is more readable this + way in any case. Thanks to Johnny Willemsen for bringing the + warnings to my attention. + +Mon Feb 26 20:58:05 UTC 2007 Iliyan Jeliazkov + + * ace/Service_Gestalt.cpp (insert): + + Removed the usage of fprintf to print messages about service + descriptors, inserted using static initializers. It is the only + way if you want to see what is being inserted before ACE_Log_Msg + gets initialized but because it uses stderr directly, it may + affect some aplications' expected output. + + * ace/Service_Repository.cpp (insert): + + Fixing a defective debug statement. + +Mon Feb 26 19:06:36 UTC 2007 Iliyan Jeliazkov + + * ace/CDR_Stream.cpp (grow_and_adjust, clone_nocopy): + + For large sizes the message block constructor may fail to + allocate and/or initialize the necessary ACE_Data_Block + instances. The failure to initialize can go unnoticed and may + cause an unlimited number of recursive invocations of + grow_and_adjust. The change adds a test for the invariant of the + newly allocated ACE_Message_Block instance. + + * ace/Message_Block.cpp (clone_nocopy): + + When memory is scarce the allocation of ACE_Data_Block may + succeed while the initialization can fail. Adding a test, + before the message block is declared good. + +Mon Feb 26 17:17:08 UTC 2007 Adam Mitz + + * bin/PerlACE/Run_Test.pm: + + Set up the $PerlACE::CIAO_ROOT variable, just like $PerlACE::TAO_ROOT + except for CIAO. + + * bin/auto_run_tests.pl: + + Find CIAO tests relative to the $CIAO_ROOT directory. + +Mon Feb 26 13:56:42 UTC 2007 Johnny Willemsen + + * bin/ACETAOCIAO.style: + Updated to version 1.12 of StyleManager + +Mon Feb 26 13:03:19 UTC 2007 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + Added code to surround all libraries with a -Wl,--start-group and + -Wl,--end-group only if the compiler is g++, we're linking static + libraries, it's an executable and the 'link_groups' template + variable is set. + +Mon Feb 26 10:08:19 UTC 2007 Olli Savia + + * tests/SOCK_Dgram_Bcast_Test.cpp: + Pass correct buffer length to ACE_OS::vsnprintf(). + Thanks to Yves Alloyer for + reporting this and providing initial patch. + +Mon Feb 26 08:50:13 UTC 2007 Olli Savia + + * ace/Process.cpp (command_line): + Pass correct buffer length to ACE_OS::vsnprintf(). + Thanks to Yves Alloyer for + reporting this and providing initial patch. + +Sun Feb 25 17:26:37 UTC 2007 Jaiganesh B + + * bin/tao_orb_tests.lst: + + Added the DiffServ policy test's run_test.pl. + +Sat Feb 24 23:01:16 UTC 2007 Steve Huston + + * configure.ac: Added ACE_CHECK_LACKS_FUNCS(alphasort) + +Sat Feb 24 22:51:09 UTC 2007 Steve Huston + + * ace/config-sunos5.5.h: + * ace/config-sunos5.10.h: Add ACE_LACKS_ALPHASORT at Solaris 2.5 and + remove it at Solaris 10. Solaris 8 and 9 have an alphasort() but + only for use with the BSD cc compiler and with disclaimer that it's + not supported for use with system libraries nor with multiple + threads. Solaris 10 brings it into supported use. + +Sat Feb 24 17:03:47 UTC 2007 Steve Huston + + * examples/NT_Service/main.cpp: + * examples/NT_Service/nt_svc.{h cpp}: Don't check for disabling + macros until a config file has been included, else it never builds + anywhere. Thanks to Johnny Willemsen for pointing this out. + +Sat Feb 24 09:01:19 UTC 2007 Ossama Othman + + * ace/config-linux.h: + + AIO support pulls in the rt library, which pulls in the pthread + library. Disable AIO in single-threaded builds. + + * tests/Recursive_Mutex_Test.cpp: + + Check if ACE_Recursive_Thread_Mutex::get_nesting_level() is + supported before attempting to use it. + +Sat Feb 24 08:34:08 UTC 2007 Olli Savia + + * ace/config-openvms.h: + * ace/config-qnx-rtp-62x.h: + * ace/config-qnx-rtp-pre62x.h: + Added ACE_LACKS_ALPHASORT. + +Fri Feb 23 23:10:17 UTC 2007 Ossama Othman + + * tests/Recursive_Mutex_Test.cpp (test_recursion_depth): + + Issue error messages instead of assert()ing. VxWorks builds + will hang on a crash. Thanks to Johnny for pointing this out. + +Fri Feb 23 19:24:30 USMST 2007 Yan Dai + + * performance-tests/SCTP/SOCK_SEQPACK_srv.cpp: + + Made run_server() and other functions and structures only compiled + when ACE_HAS_SCTP is defined. This should resolve the warning that the + run_server() is defined but not used on some platforms. + +Fri Feb 23 17:47:28 UTC 2007 Carlos O'Ryan + + * tests/Bug_2815_Regression_Test.cpp: + The test should be enabled only if the notification queue is + also enabled. Basically purge_pending_notifications() is not + supported without the notification queue, and that is the + operation we want to test. + +Fri Feb 23 15:37:03 UTC 2007 Steve Huston + + * ace/OS_NS_dirent.inl (alphasort): Use a bigger hammer on the casts. + +Fri Feb 23 10:50:41 UTC 2007 Olli Savia + + * ace/OS_NS_dirent.inl: + Fixed casts again. Hopefully now I got it right. + +Fri Feb 23 08:56:15 UTC 2007 Olli Savia + + * ace/OS_NS_dirent.inl: + Added casts to fix compile errors. + + * ace/config-rtems.h: + * ace/config-vxworks5.x.h: + * ace/config-vxworks6.2.h: + * ace/config-vxworks6.3.h: + * ace/config-vxworks6.4.h: + Added ACE_LACKS_ALPHASORT. + +Thu Feb 22 18:37:00 UTC 2007 Iliyan Jeliazkov + + * ace/Service_Config.h: + * ace/Service_Config.inl: + * ace/Service_Config.cpp: + * ace/Service_Gestalt.h: + * ace/Service_Gestalt.cpp: + + Fixing build troubles caused by the different ACE_TSS interface + for single-threaded builds. Eliminated the intermediary class + (TSS_Resources) and now storing the actual service gestalt + pointer in TSS, thus reducig the memory allocation overhead. + +Thu Feb 22 16:45:30 UTC 2007 Steve Huston + + * tests/MT_SOCK_Test.cpp: Document the actual cause of what's been + observed for some time with some Windows systems exhibiting a + "delayed rejection" of connections in excess of the listener's + backlog. Thank you to Aleksandar Vukajlovic for citing the full cause with its supporting + documentation and explanation. + +Thu Feb 22 15:59:12 UTC 2007 Steve Huston + + * ace/config-win32-common.h: Change the comments around ACE_HAS_PENTIUM + to more accurately reflect its use and setting. With the switch to + QueryPerformanceCounter() for high-res timers on Windows, this + setting doesn't have any affect on timers, but it is used in + some CDR operations. This resolves Bugzilla #1410. + + * ace/OS_NS_time.inl (gethrtime): + * ace/gethrtime.cpp: Remove the comments directing the reader to a + description of using RDTSC on Windows. The comment is long gone, and + RDTSC isn't used on Windows/VC any longer anyway. + +Thu Feb 22 15:07:22 UTC 2007 Ciju John + + * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm: + * bin/MakeProjectCreator/templates/gnu.mpd: + Additions to support DDS specific build rules and versioning. + +Thu Feb 22 13:56:42 UTC 2007 Johnny Willemsen + + * ace/Makefile.am: + Added Notification_Queue.{h,cpp,inl}: + + * ace/OS_NS_dirent.inl: + Added include when ACE_LACKS_ALPHASORT is defined + +Thu Feb 22 13:03:01 UTC 2007 Carlos O'Ryan + + * Merged changes from the bug_2815 branch. From revision 77182 to + revision 77315. + + Tue Feb 20 18:17:00 UTC 2007 Carlos O'Ryan + + * ace/ace_for_tao.mpc: + Add Notification_Queue.cpp to this file too. Thanks to Johnny + Willemsen for pointing this out. + + Mon Feb 19 21:53:58 UTC 2007 Carlos O'Ryan + + * ace/Intrusive_List.inl: + I learned a minute ago that std::swap() was kosher. Use it in + favor of ACE_Swap<>. + + Mon Feb 19 21:47:48 UTC 2007 Carlos O'Ryan + + * tests/run_test.lst: + * tests/Bug_2815_Regression_Test.cpp: + Adjusted the number of iterations so the test would pass on my + G4-based laptop without optimizations or inlining. The previous + numbers were just guesses anyway and I hope the new numbers will + result in no failures for the scoreboard. + + Mon Feb 19 21:29:32 UTC 2007 Carlos O'Ryan + + * ace/Notification_Queue.cpp: + Modified the purging algorithm. The algorithm used a temporary + list to store the elements not purged, so basically all nodes + were either moved to the free list or to the temporary list. + The new algorithm only removes the nodes that needs purging. + In the vast majority of the cases this is more efficient because + most nodes are not purged. + This resulted in a factor of 2 improvement for + tests/Bug_2815_Regression_Test, keep in mind that in this + program 1/16th of the nodes are purged. So in practice I would + expect even better results. + I also changed the order in which the free nodes are re-used, I + think LIFO order has a better chance of re-using the cache, but + I have no evidence or experiments to prove this. + + * ace/Intrusive_List.h: + * ace/Intrusive_List.cpp: + Renamed the remove_i() function to unsafe_remove() and promoted + its access to "public". The function is not safe to use in + general, thus the name, but it resulted in a factor of 2 + performance improvement for ACE_Notification_Queue. + + * tests/Bug_2815_Regression_Test.cpp: + Fixed memory leaks (in the test not the library) + + Mon Feb 19 20:32:34 UTC 2007 Carlos O'Ryan + + * ace/Notification_Queue.h: + * ace/Notification_Queue.inl: + * ace/Notification_Queue.cpp: + Re-factored to use ACE_Intrusive_List in the implementation. + This eliminates memory allocations during additions and removal + of elements. Also, many of the operations cannot fail, so the + code became smaller. + + * ace/Intrusive_List.h: + * ace/Intrusive_List.inl: + Add a swap() member function. + + Mon Feb 19 04:49:35 UTC 2007 coryan + + * ace/Notification_Queue.h: + * ace/Notification_Queue.cpp: + * ace/ace.mpc: + New class to encapsulate the implementation of a user-space + based notification queue. The code was duplicated in both + Select_Reactor.{h,cpp} and Dev_Poll_Reactor.{h,cpp} + + * tests/tests.mpc: + * tests/run_test.lst: + * tests/Notification_Queue_Unit_Test.cpp: + New unit test for the notification queue class. + + * ace/Dev_Poll_Reactor.h: + * ace/Dev_Poll_Reactor.cpp: + * ace/Select_Reactor_Base.h: + * ace/Select_Reactor_Base.cpp: + Refactored notification queue code to a new class + (ACE_Notification_Queue) + + * tests/Bug_2815_Regression_Test.cpp: + Add code to help with debugging. Basically my refactoring above + had at least one bug, and this test uncovered it. But it was + hard to debug because there was no single breakpoint to detect + when the failure condition was triggered. + + * tests: + Add new files to svn:ignore property. Also added some old + files. + + * tests/SSL: + * include/makeinclude: + Add missing files to svn:ignore + + Sun Feb 18 21:13:41 UTC 2007 coryan + + * tests/tests.mpc: + * tests/Bug_2815_Regression_Test.cpp: + Add new regression test for bug 2815. I have not added the test + to the automated test suite because (1) it fails, and (2) it is + a test to reproduce performance + +Thu Feb 22 12:58:42 UTC 2007 Johnny Willemsen + + * include/makeinclude/compiler.bor: + Removed BCB4/5 support + +Thu Feb 22 11:19:59 UTC 2007 Olli Savia + + * ace/OS_NS_dirent.h: + * ace/OS_NS_dirent.inl: + Added ACE_OS::alphasort(). alphasort() is a BSD extension found + on Linux as well. + + * ace/config-lynxos.h: + Added ACE_LACKS_ALPHASORT_PROTOTYPE. + + * ace/config-win32-common.h: + Added ACE_LACKS_ALPHASORT. + + * ace/os_include/os_dirent.h: + Added alphasort prototype. + + * tests/Dirent_Test.cpp: + Chaged to use use ACE_OS::alphasort(). + +Thu Feb 22 09:24:42 UTC 2007 Johnny Willemsen + + * ace/Truncate.h (Truncate, truncate_cast): + Also renamed the Borland part + +Thu Feb 22 04:57:42 UTC 2007 Ossama Othman + + * tests/NonBlocking_Conn_Test.cpp (test_connect): + + Fixed syntax error. s/sizeof ACE_TCHAR/sizeof (ACE_TCHAR)/. + +Wed Feb 21 21:46:18 UTC 2007 Steve Huston + + * ace/config-pharlap.h: + * ace/config-WinCE.h: + * ace/OS_NS_stdio.inl: + * ace/OS_NS_unistd.inl: Changed ACE_LACKS_SETFILEPOINTEREX to + ACE_LACKS_WIN32_SETFILEPOINTEREX to be consistent with the other + ACE_*_WIN32_*things. + + * ace/config-pharlap.h: + * ace/config-WinCE.h: + * ace/NT_Service.{h cpp}: + * examples/NT_Service/nt_svc.h: + * examples/NT_Service/main.cpp: + Also added ACE_LACKS_WIN32_SERVICES for Pharlap and CE. This marks + a platform that is Windows, but doesn't have Windows services. + + * ace/Configuration.{h cpp}: + * ace/Registry.{h cpp}: Rather than exclude registry-using code using + ACE_HAS_PHARLAP, use a new setting ACE_LACKS_WIN32_REGISTRY. + + * ace/config-pharlap.h: Added ACE_LACKS_WIN32_REGISTRY. + + * protocols/ace/HTBP/HTBP_Environment.cpp: + * examples/Reactor/WFMO_Reactor/Registry_Changes.cpp: + * examples/Registry/test_registry_update.cpp: + * examples/Registry/test_registry_iterator.cpp: + * tests/Config_Test.cpp: Don't try registry stuff + if ACE_LACKS_WIN32_REGISTRY is set. + + * examples/Reactor/WFMO_Reactor/Window_Messages.cpp: Don't try this if + ACE_LACKS_MSG_WFMO is set. + + * apps/JAWS/server/IO.{h cpp}: + * apps/JAWS/server/HTTP_Handler.{h cpp}: + * apps/JAWS/server/HTTP_Server.{h cpp}: + * apps/JAWS2/JAWS/IO.{h cpp}: + * apps/JAWS2/JAWS/IO_Acceptor.{h cpp}: + * apps/JAWS2/JAWS/IO_Handler.{h cpp}: + * apps/JAWS3/jaws3/Asynch_IO.cpp: + * examples/APG/Proactor/HA_Proactive_Status.{h cpp}: + * examples/Connection/blocking/SPIPE-acceptor.{h cpp}: + * examples/Connection/blocking/test_spipe_acceptor.cpp: + * examples/Reactor/Proactor/post_completions.cpp: + * examples/Reactor/Proactor/simple_test_proactor.cpp: + * examples/Reactor/Proactor/test_cancel.cpp: + * examples/Reactor/Proactor/test_end_event_loop.cpp: + * examples/Reactor/Proactor/test_multiple_loops.cpp: + * examples/Reactor/Proactor/test_proactor.cpp: + * examples/Reactor/Proactor/test_proactor2.cpp: + * examples/Reactor/Proactor/test_proactor3.cpp: + * examples/Reactor/Proactor/test_timeout.cpp: + * examples/Reactor/Proactor/test_timeout_st.cpp: + * examples/Reactor/Proactor/test_udp_proactor.cpp: + * examples/Reactor/WFMO_Reactor/Talker.cpp: + Decide on whether or not to compile the asynch support classes + based on ACE_HAS_WIN32_OVERLAPPED_IO, not ACE_WIN32. ACE_WIN32 + is broader than that overlapped I/O-capable ones; Pharlap ETS + doesn't do overlapped I/O, for instance. + +Wed Feb 21 19:27:14 UTC 2007 Ossama Othman + + * ace/Array_Base.cpp (size): + + Simplified return value logic. + + * ace/Auto_Ptr.h (ACE_auto_ptr_reset): + + Added missing "brief" documentation. + + * ace/Caching_Strategies_T.inl: + * ace/Svc_Handler.cpp (init): + + Removed unnecessary uses of ACE_UNUSED_ARG macro. Just comment + out the parameter name instead. + + * ace/DLL_Manager.cpp (unload_all): + * ace/Functor.inl (operator()): + * ace/OS_NS_unistd.h (sbrk): + * ace/OS_NS_unistd.inl (sbrk): + * ace/Parse_Node.cpp: + * ace/Timer_Hash_T.cpp: + + Corrected type used to store pointer value. + s/ptrdiff_t/{u}intptr_t/. + + * ace/SOCK_Dgram.cpp: + + Fixed unused argument warning. + + * ace/String_Base_Const.cpp: + + Workaround npos constant run-time initialization problem in some + mixed shared/static linking conditions by making it easy for the + compiler to embed the value of the constant in the object file + at compile-time. + + * ace/Truncate.h (Truncate, truncate_cast): + + Deprecated ACE_Utils::Truncate() function name in favor of + ACE_Utils::truncate_cast(). The latter better reflects what the + function template actually does. + + * ace/Unbounded_Set.cpp: + * ace/Unbounded_Set.h: + * ace/Unbounded_Set.inl: + + Implement find() method in terms of begin/end iterators to prevent + search from looping indefinitely under some race condition + scenarios. + + Added missing const_iterator factory methods. + + Added missing const_iterator equality and inequality operators. + + * ace/OS_NS_unistd.inl: + * ace/Time_Value.inl: + * ace/Token_Request_Reply.inl: + * ace/FILE_IO.cpp: + * ace/Filecache.cpp: + * ace/High_Res_Timer.cpp: + * ace/Log_Record.cpp: + * ace/MMAP_Memory_Pool.cpp: + * ace/Mem_Map.cpp: + * ace/Message_Queue.cpp: + * ace/Message_Queue_T.cpp: + * ace/Name_Request_Reply.cpp: + * ace/Process.cpp: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_IO.cpp: + * ace/Timer_Hash_T.cpp: + + s/ACE_Utils::Truncate/ACE_Utils::truncate_cast/g. The former is + deprecated. + + From Andrew Schnable + * ace/os_include/os_unistd.h (X_OK): + + Windows has no access() test for X_OK. Use R_OK instead. + + From Russell Mora + * ace/ACE.inl (hex2byte): + * ace/Capabilities.h (is_line, is_empty): + * ace/Capabilities.cpp (parse, fillent, is_entry, is_empty, is_line): + * ace/Get_Opt.cpp (long_option): + * ace/OS_NS_ctype.inl (ace_isalnum): + + Added ACE::ace_isalnum, ACE::ace_isdigit and ACE::ace_islower + and changed to use them where appropriate. This prevents the + narrow char versions being called with wide chars. + + * ace/Asynch_IO.cpp: + + Fixed preprocessor scoping issue in builds where + ACE_HAS_AIO_CALLS is undefined and versioned namspaces are + enabled. ACE_END_VERSIONED_NAMESPACE_DECL ended up being + preprocessed when it should not have. + + * ace/Configuration_Import_Export.cpp (export_config): + + Check the return value of fclose() is required because data may + have been buffered and will be fflush()d with the fclose(). + + * ace/Log_Msg.h: + * ace/Log_Msg.cpp: + + Changed message offset to correct type, ptrdiff_t, since it + contains a pointer difference value. + + * ace/Null_Semaphore.h: + + Added include to get definition of size_t. This is required for + static single-threaded builds on Darwin. + + * ace/OS_NS_stdio.inl (cuserid): + + Check for unexpected failure of getpwuid function; don't + dereference null pointer. + + * ace/Process.cpp (spawn): + + On Windows platforms a process handle is a pointer, not an int. + Corrected format specifiers accordingly. + + * ace/RB_Tree.cpp (remove_i): + + Fixes for Coverity REVERSE_INULL issues. Check for null pointer + before dereferencing. + + * ace/Recursive_Thread_Mutex.cpp (get_nesting_level): + + Reverted change that altered implementation for IA64 Windows + builds. The returned nesting level was incorrect. Use the + implementation used by both 32-bit and AMD 64 bit builds. + + * tests/Recursive_Mutex_Test.cpp (test_recursion_depth): + + Added test cases for the above problem. + + * ace/SOCK_Connector.cpp (shared_connect_finish): + + On Windows, in order to detect when the socket that has been + bound to is in TIME_WAIT we need to do the connect (which will + always return EWOULDBLOCK) and then do an + ACE::handle_timed_complete() (with timeout==0, i.e. poll). This + will do a select() on the handle which will immediately return + with the handle in an error state. The error code is then + retrieved with getsockopt(). + + Good sockets however will return from the select() with ETIME - + in this case return EWOULDBLOCK so the wait strategy can + complete the connection. + + * ace/Service_Manager.cpp (list_services): + + Type conversion - it is unlikely the name of the service is a + string bigger than 2GB (on 32-bit systems) so a static_cast<> is + safe here. + + * ace/Svc_Conf_Lexer.cpp (scan): + + Changed the loop indexing to allow loop variable to be the same + type as variable used to initialise the loop. This avoids + conversion warnings. + + (yylex): + + Fixed unused variable warning. + + * ace/UNIX_Addr.inl (set): + + Correct wide string to narrow string conversion. + + * ace/config-cxx-common.h: + + Eliminated copious amounts of warnings. + + * ace/config-linux.h (ACE_HAS_CLOCK_GETTIME): + * ace/config-linux-common.h (ACE_HAS_CLOCK_GETTIME): + + On linux clock_gettime/clock_settime are not available for + single-threaded builds. + + * ace/os_include/os_dlfcn.h (ACE_DEFAULT_SHLIB_MODE): + + Added DYNAMIC_PATH to the default flags used to call shl_load() + on HP 11.00 (PARISC1.1/32-bit) so that RPATH and SHLIB_PATH are + searched to find the requested .sl. + + * bin/MakeProjectCreator/templates/gnu.mpd (FORCED_IDL_STUBS): + + PCH source files are also dependent on the IDL compiler + generated files. + + * include/makeinclude/platform_hpux_aCC.GNU (SONAME): + + HP platform (non-g++) was missing the appropriate LDFLAGS for + building versioned shared libraries. Copied from the hpux + section of platform_g++_common.GNU. + + Disable warnings when 64 bit file offsets are enabled in HP + 11.11 builds. + + * include/makeinclude/platform_irix6.x_sgic++.GNU (AR, ARFLAGS): + + By default IRIX uses a prelinker to instantiate templates, thus + archives need to be created via CC (using the -ar option) so + that the required templates can be instantiated. This was the + cause of the missing symbols problems reported by users of the + static libraries. + + * include/makeinclude/platform_tru64_cxx.GNU: + + It seems that the default debug level in the Compaq C++ compiler + really goes to town when a template is instantiated - it seems + to add debug information for every scrap of code that the + template instantiation ever see resulting in debug template + instantiations that are up to 1000x bigger than their release + counterparts. Dialing the level back down to -g1 (-g2 is the + default) seems to avoid this issue and we still get debug + symbols for the template instantiation itself. + + * tests/NonBlocking_Conn_Test.cpp (test_connect): + + Fixed potential buffer overrun error. + + From Duane Binder + * ace/ace_wchar.h: + + Added ACE_TEXT_ macros needed by some apps. + + * ace/Process.inl (creation_flags): + * ace/Naming_Context.cpp: + * ace/Registry_Name_Space.cpp: + * ace/Registry_Name_Space.h: + + Use ACE_USES_WCHAR not UNICODE. Whether ACE uses Windows + wchar_t APIs is controlled by ACE_USES_WCHAR and not UNICODE. + + * include/makeinclude/platform_freebsd.GNU: + + Remove pthread and semaphore references for singled threaded + FreeBSD builds. + + * include/makeinclude/platform_linux.GNU (LIBS): + + Prevent single threaded linux builds from linking libpthread + (via librt). + + * include/makeinclude/rules.lib.GNU: + + Not all static libraries have template instantiations. Test if + $(TEMPINCDIR) exists before trying to add objects in an archive + library (was a problem on Tru64 with debug builds). + +Wed Feb 21 14:23:12 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added bug 1592 regression + +Tue Feb 20 17:56:25 UTC 2007 Douglas C. Schmidt + + * COPYING: Clarified how the COPYING file need to be included with + any code released. Thanks to Scott Mark + for helping clarify this. + +Wed Feb 21 08:35:12 UTC 2007 Johnny Willemsen + + * ace/Swap.{h,cpp,inl}: + Removed, use std::swap instead of ACE_Swap + + * ace/ace.mpc: + * ace/ace_for_tao.mpc: + * ace/Makefile.am: + Removed Swap.{h,cpp,inl} + +Wed Feb 21 08:13:12 UTC 2007 Johnny Willemsen + + * examples/IPC_SAP/SSL_SAP/SSL-server-poll.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-server-simple.cpp: + * examples/IPC_SAP/SSL_SAP/SSL-server.cpp: + Fixed compile problems when wchar is enabled + +Tue Feb 20 19:15:30 UTC 2007 Iliyan Jeliazkov + + * tests/run_test.lst: + + Adding Object_Manager_Flipping_Test to the list of running + tests. + +Tue Feb 20 18:08:47 UTC 2007 Iliyan Jeliazkov + + * tests/Object_Manager_Flipping_Test.cpp: + * tests/tests.mpc: + + Adding new test verifying that after ACE::fini has been called, + the correct pointer value has been stored in TSS for the Service + Config. A subsequent call to ACE::init may SEGV + otherwise. Thanks to Bjoern Rasmussen for reporting it. + +Tue Feb 20 17:15:37 UTC 2007 Adam Mitz + + * ace/config-qnx-rtp.h: + * include/makeinclude/platform_qnx_rtp_gcc.GNU: + + Moved the version detection from the platform_macros file to the + config file. This allows us to use the QNX system-defined macro + _NTO_VERSION, which works in cross-compile environments. The old + method of reading the version number from the "uname -a" output is + not compatible with cross-compilation. + +Tue Feb 20 16:38:24 UTC 2007 William R. Otte + + * bin/MakeProjectCreator/templates/gnu.mpd + * bin/MakeProjectCreator/config/global.features + + Added logic in gnu template for new XSC custom type in CIAO, + and disabled xsc by default in global.features. + +Tue Feb 20 16:12:57 UTC 2007 Steve Huston + + * tests/Bug_2820_Regression_Test.cpp: ACEify use of auto_ptr. + +Tue Feb 20 16:06:12 UTC 2007 Johnny Willemsen + + * ace/os_include/os_stdlib.h: + Simplified the ACE_RANDR_TYPE define setting + + * ace/OS_NS_stdio.inl: + * ace/SOCK_Dgram.cpp: + * ace/WFMO_Reactor.cpp: + Simplified Borland C++ checks, no need to check for the version + number + +Tue Feb 20 15:54:20 UTC 2007 Chad Elliott + + * ace/OS_NS_Thread.cpp: + + Reverted my change to check PTHREAD_STACK_MIN. I just realized + that it may not be defined as an integral value (i.e., Solaris). + +Tue Feb 20 15:46:06 UTC 2007 Chad Elliott + + * ace/OS_NS_Thread.cpp: + + Added ACE_UNUSED_ARG(id) for RTEMS and modified code to check + that size (which is of type size_t) is less than PTHREAD_STACK_MIN + only if PTHREAD_STACK_MIN is greater than zero. + + * ace/OS_NS_stdlib.cpp: + + Fixed a compile error on VxWorks where an attempt to cast + ACE_thread_t to ACE_RANDR_TYPE failed (since ACE_thread_t is char* + on VxWorks). + + * ace/SOCK_Dgram.cpp: + + The iov_len element of the iovec struct is unsigned on RTEMS (as + it is with Linux and Borland C++), so use the same #if check to + avoid code that causes warnings. + +Tue Feb 20 15:06:04 UTC 2007 Chad Elliott + + * ace/SOCK_Dgram.cpp: + + The iov_len element of the iovec struct is unsigned on Linux (as + it is with Borland C++), so use the same #if check to avoid code + that causes warnings. + + * ace/Containers_T.cpp: + * ace/Timer_Heap_T.cpp: + * ace/UPIPE_Stream.cpp: + * ace/UUID.cpp: + + Added static_cast<> to avoid conversion warnings. + +Tue Feb 20 15:00:12 UTC 2007 Johnny Willemsen + + * m4/compiler.m4: + Fixed support for --enable-symbol-visibility. This fixes bugzilla + bug 2771, thanks to Waba for reporting + this. + +Tue Feb 20 14:43:00 UTC 2007 Chad Elliott + + * ASNMP/asnmp/pdu.cpp: + * apps/JAWS2/JAWS/Cache_Manager.cpp: + + Added a check for self assignment. + + * ace/INET_Addr.cpp: + * tests/Multicast_Test_IPV6.cpp: + * examples/Web_Crawler/Command_Processor.cpp: + + Removed redundant code to avoid "statement is unreachable" + warnings. + + * examples/APG/Naming/Temperature_Monitor.cpp: + * examples/APG/Naming/Temperature_Monitor2.cpp: + * examples/APG/Streams/Answerer.cpp: + * examples/C++NPv1/Logging_Server.cpp: + * examples/C++NPv1/Process_Per_Connection_Logging_Server.cpp: + * examples/C++NPv1/Thread_Per_Connection_Logging_Server.h: + + Added ACE_NOTREACHED around unreachable code to avoid "statement + is unreachable" warnings. + + * examples/Connection/blocking/SPIPE-acceptor.cpp: + + Reverted a bug that was introduced many years ago where threads + would be spawned and then the main thread would exit. + + * performance-tests/SCTP/SOCK_SEQPACK_clt.cpp: + * performance-tests/SCTP/SOCK_SEQPACK_srv.cpp: + * performance-tests/SCTP/SOCK_STREAM_srv.cpp: + + Modified to only compile code if ACE_HAS_SCTP is defined. + + * tests/INET_Addr_Test.cpp: + + Check addr.get_host_addr() for non-zero before passing it to + ACE_OS::strcmp(). + +Tue Feb 20 03:08:26 UTC 2007 Carlos O'Ryan + + * tests/tests.mpc: + * tests/Bug_2820_Regression_Test.cpp: + A new test to demonstrate the problems in bug 2820. + +Mon Feb 19 23:13:07 UTC 2007 Steve Huston + + * ace/WFMO_Reactor.h: Clarify description of ok_to_wait(). + + * ace/WFMO_Reactor.cpp (ok_to_wait): Since WinCE can't use the + waitAll arg to atomically wait for both the lock and ok_to_wait + event, use a 2-step process to get both individually. This avoids + entering wfmo either without the ok_to_wait event or without + the lock. Thanks to Craig Johnson for reporting this. Also see: + Mon Oct 16 14:24:25 UTC 2006 Steve Huston + +Mon Feb 19 21:02:55 UTC 2007 Steve Huston + + * ace/Atomic_Op.inl: + * ace/OS_NS_unistd.inl: Adjust code for less-than-modern Win32 systems + such as Pharlap ETS to work with 64 bit file offsets and the lack + of interlocked exchange-add. + +Mon Feb 19 18:33:12 UTC 2007 Johnny Willemsen + + * ace/SSL/SSL_Context.h: + Layout change + + * ace/SSL/SSL_Context.inl (check_context): + Set the verify mode correctly, fixes bugzilla bug 2819 + +Mon Feb 19 12:00:12 UTC 2007 Johnny Willemsen + + * bin/tao_other_tests.lst: + Added Secure_Invocation test, this tests basic functionality but + seems to fail at this moment because of some broken support in + TAO + +Fri Feb 16 23:48:55 UTC 2007 Iliyan Jeliazkov + + * ace/Service_Config.cpp: + + ACE_INLINE makes sense in .inl files (thanks Steve) + +Fri Feb 16 13:38:04 UTC 2007 Iliyan Jeliazkov + + * ace/Dynamic_Service_Base.cpp: + * ace/Dynamic_Service_Dependency.cpp: + * ace/Service_Config.h: + * ace/Service_Config.inl: + * ace/Service_Config.cpp: + * ace/Service_Gestalt.h: + * ace/Service_Gestalt.inl: + * ace/Service_Gestalt.cpp: + + Reverting my changes since "Tue Feb 13 15:35:54 UTC 2007" as it + has been causing problems, in particular with borland and + no-threads builds. + +Fri Feb 16 12:47:03 UTC 2007 Steve Huston + + * ace/Service_Config.cpp (global): Removed the ACE_INLINE qualifier + from global() - if it's in the .cpp file, it shouldn't be marked + as inline, and isn't marked thusly in the .h file. Fixes unsats. + + * ace/Service_Config.h: Fixed spelling error. + +Thu Feb 15 20:04:01 UTC 2007 Ossama Othman + + * ace/OS_NS_stdlib.cpp (mkstemp_emulation): + + Include process and thread ID in random number generator seed + value. Addresses problems where the same seed value would end + up being used for different processes and/or threads, resulting + in identical filenames being generated. + + Addressed potential race condition on platforms that do not + inline the value of ACE_Numeric_Limits<>::max(). + +Thu Feb 15 17:53:53 UTC 2007 Krishnakumar B + + * THANKS: Check-in rules 101: Check-in files that you have + modified. Don't ever forget this basic rule. + +Thu Feb 15 13:50:58 UTC 2007 Johnny Willemsen + + * ace/CDR_Stream.h: + * ace/Connector.h: + * ace/DEV_IO.h: + * ace/FIFO_Recv.h: + * ace/FIFO_Send.h: + * ace/FIFO_Send_Msg.h: + * ace/FILE_IO.h: + * ace/INET_Addr.h: + * ace/Local_Memory_Pool.h: + * ace/Malloc_Base.h: + * ace/MEM_IO.h: + * ace/Mem_Map.h: + * ace/MEM_SAP.h: + * ace/MEM_Stream.h: + * ace/Message_Block.h: + * ace/MMAP_Memory_Pool.h: + * ace/OS_NS_unistd.h: + * ace/Pipe.h: + * ace/Process_Manager.h: + * ace/QoS/SOCK_Dgram_Mcast_QoS.h: + * ace/Service_Types.h: + * ace/Shared_Memory_Pool.h: + * ace/SOCK_Dgram.h: + * ace/SOCK_Dgram_Mcast.h: + * ace/SOCK_IO.h: + * ace/SOCK_SEQPACK_Association.h: + * ace/SPIPE_Stream.h: + * ace/Stream.h: + * ace/Task.h: + * ace/Thread.h: + * ace/Thread_Manager.h: + * ace/UPIPE_Stream.h: + Doxygen improvements + +Thu Feb 15 13:38:58 UTC 2007 Johnny Willemsen + + * ace/ATM_Connector.h: + * ace/DEV_Connector.h: + * ace/DEV_IO.h: + * ace/Dev_Poll_Reactor.h: + * ace/FILE_Connector.h: + * ace/Hash_Map_Manager_T.h: + * ace/IOStream_T.h: + * ace/LOCK_SOCK_Acceptor.h: + * ace/Map_Manager.h: + * ace/MEM_IO.h: + * ace/MEM_SAP.h: + * ace/MEM_Stream.h: + * ace/Message_Block.h: + * ace/Message_Queue.h: + * ace/Message_Queue_T.h: + * ace/Module.h: + * ace/Proactor.h: + * ace/Reactor.h: + * ace/Reactor_Impl.h: + * ace/Select_Reactor_T.h: + * ace/Sig_Handler.h: + * ace/Signal.h: + * ace/SOCK.h: + * ace/SOCK_Acceptor.h: + * ace/SOCK_Dgram.h: + * ace/SOCK_IO.h: + * ace/SOCK_SEQPACK_Acceptor.h: + * ace/SOCK_SEQPACK_Association.h: + * ace/SPIPE_Connector.h: + * ace/Stream.h: + * ace/Svc_Handler.h: + * ace/Task_Ex_T.h: + * ace/Task_T.h: + * ace/Thread_Manager.h: + * ace/TLI_Acceptor.h: + * ace/TLI_Connector.h: + * ace/Token.h: + * ace/WFMO_Reactor.h: + * ace/XTI_ATM_Mcast.h: + Doxygen improvements + +Thu Feb 15 13:12:01 UTC 2007 Chad Elliott + + * examples/OS/Process/imore.cpp: + + Removed an enclosing block around code that caused issue with + SunCC 5.8. There was a comment claiming that the block was needed + so that the ACE_Process_Options could elegantly close the file + handlers that it kept, however the ACE_Process_Options object does + not close the file handlers. The ACE_Process does the handle + closing. + +Thu Feb 15 05:41:11 UTC 2007 Iliyan Jeliazkov + + * ace/Service_Gestalt.inl: + * ace/Service_Gestalt.cpp: + + Moved find off-line because it requires a full declaration of + ACE_Service_Repository, which is unavailable when the inl file + is compiled (inlining on) + +Wed Feb 14 23:05:16 UTC 2007 Iliyan Jeliazkov + + * ace/Service_Config.h: + * ace/Service_Config.inl: + * ace/Service_Config.cpp: + * ace/Service_Gestalt.h: + * ace/Service_Gestalt.cpp: + + Moved the ACE_Unmanaged_Singleton usage to the implementation + file and eliminated the unnecesary #includes, aiming to reduce + the footprint. + +Wed Feb 14 19:56:14 UTC 2007 Adam Mitz + + * ace/Service_Config.h: + s/TAO_Export/ACE_Export/ + +Wed Feb 14 19:21:58 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added bug 2809 regression + +Wed Feb 14 17:33:22 UTC 2007 Iliyan Jeliazkov + + * ace/Service_Config.h: + Fixing a compile problem with g++ and borland compiler, which + treat members of private nested classes as "hidden" even when + the enclosing type has been exported. + +Wed Feb 14 12:59:58 UTC 2007 Johnny Willemsen + + * ace/Acceptor.h: + Doxygen improvement + +Wed Feb 14 11:31:58 UTC 2007 Johnny Willemsen + + * ace/os_include/os_stdio.h: + * ace/os_include/os_unistd.h: + Move ACE_STDIN, ACE_STDOUT and ACE_STDERR from stdio to unistd + file and use STDIN_FILENO, STDOUT_FILENO and STDERROR_FILENO if + these are defined yet, this way we use the same defines and header + files as in the posix specification. This fixes bugzilla bug 2731. + Thanks to Abdul Sowayan + for reporting this. + + * ace/Truncate.h: + Added another const specialization for Borland C++ + +Wed Feb 14 11:03:58 UTC 2007 Johnny Willemsen + + * tests/Process_Manager_Test.cpp: + Added test code from bugzilla 2797, thanks to Yves Alloyer + for reporting this. + +Wed Feb 14 10:06:58 UTC 2007 Johnny Willemsen + + * bin/tao_other_tests.lst: + Added TAO/orbsvcs/tests/Bug_2800_Regression/run_test.pl + +Wed Feb 14 08:53:58 UTC 2007 Johnny Willemsen + + * ace/Active_Map_Manager_T.h: + * ace/Cache_Map_Manager_T.h: + * ace/CDR_Size.h: + * ace/CDR_Stream.h: + * ace/Configuration.h: + * ace/Dev_Poll_Reactor.h: + * ace/Future.h: + * ace/Future_Set.h: + * ace/Hash_Cache_Map_Manager_T.h: + * ace/High_Res_Timer.h: + * ace/INET_Addr.h: + * ace/IO_SAP.h: + * ace/IPC_SAP.h: + * ace/Map_T.h: + * ace/MEM_SAP.h: + * ace/Message_Block.h: + * ace/Msg_WFMO_Reactor.h: + * ace/Multihomed_INET_Addr.h: + * ace/Priority_Reactor.h: + * ace/Reactor.h: + * ace/Reactor_Impl.h: + * ace/Recursive_Thread_Mutex.h: + * ace/Registry.h: + * ace/Semaphore.h: + * ace/Shared_Memory_MM.h: + * ace/Shared_Memory_SV.h: + * ace/SOCK_SEQPACK_Association.h: + * ace/Thread_Mutex.h: + * ace/Timeprobe_T.h: + * ace/WFMO_Reactor.h: + Doxygen improvements + + * ace/Truncate.h: + Fixed compile problems with Borland C++, thanks to Ossama for + giving a solution. + +Tue Feb 13 20:33:58 UTC 2007 Krishnakumar B + + * THANKS: Added gzeleniy@gmail.com to the THANKS list. + +Tue Feb 13 15:35:54 UTC 2007 Iliyan Jeliazkov + + * ace/Service_Config.{h,inl,cpp}: + + Refactoring to simplify the TSS usage, reduce overhead and + eliminate a memory leak. + + * ace/Service_Gestalt.cpp: + + Fixed a memory leak in Service_Type_Dynamic_Guard dtor. Updated + logging. + + * ace/Dynamic_Service_Base.cpp: + * ace/Dynamic_Service_Dependency.cpp: + + Updated to use SC::instance () to better express the contract + for these classes. They simply don't need to be aware whether + they are using a global, or a TSS-local gestalt . + +Tue Feb 13 14:44:06 UTC 2007 Johnny Willemsen + + * ace/config-vxworks5.x.h: + Removed VxWorks 5.4.2 support, we haven't build for it in years + +Tue Feb 13 12:58:13 UTC 2007 Chad Elliott + + * ACEXML/common/Exception.h: + * ACEXML/common/Exception.cpp: + * ACEXML/common/SAXExceptions.h: + * ACEXML/common/SAXExceptions.inl: + * ACEXML/common/SAXExceptions.cpp: + + Changed the print() and message() methods to const. There was no + reason for thease to be non-const and it makes it possible to + catch const references of the ACEXML exception types. + +Mon Feb 12 20:24:04 UTC 2007 Steve Huston + + * examples/Logger/Acceptor-server/server_loggerd.cpp (handle_input): + * examples/Logger/simple-server/Logging_Handler.cpp (handle_input): + Log the host name of the peer, not "", as previous code + did; also make sure to put it in ACE_TCHAR form. See also + Thu Feb 8 23:09:59 UTC 2007 Douglas C. Schmidt + +Mon Feb 12 19:20:06 UTC 2007 Johnny Willemsen + + * ace/CORBA_macros.h: + Fixed several macros which where using () around the exception + to be thrown + +Mon Feb 12 18:10:42 UTC 2007 Steve Huston + + * ace/Name_Request_Reply.cpp (timeout): + * netsvcs/lib/Time_Request_Reply.cpp (timeout, decode): + Truncate 64-bit time value down to the platform's time_t size. + +Mon Feb 12 15:18:42 UTC 2007 Chad Elliott + + * bin/fuzz.pl: + + Check for the use of ACE_THROW_SPEC in TAO or CIAO code only. + It's usage within ACE is still ok in some situations. + +Mon Feb 12 14:44:06 UTC 2007 Johnny Willemsen + + * bin/fuzz.pl: + Removed old todo's, extended msvc ver check + + * ace/Codeset_IBM1047.cpp: + * ace/Functor.cpp: + * ace/Functor.inl: + * ace/Hash_Map_Manager_T.cpp: + * ace/Hash_Multi_Map_Manager_T.cpp: + * ace/Sched_Params.cpp: + * ace/Sched_Params.inl: + Converted to doxygen style documentation + + * bin/doxygen-convert-h.pl: + Only handle source files + +Mon Feb 12 14:38:06 UTC 2007 Johnny Willemsen + + * ace/CORBA_macros.h: + Use ACE_LACKS_DEPRECATED_MACROS to make it possible to build without + all the emulated exception macros. Will make sure people can't use them + anymore in core code without noticing that + + * ace/Global_Macros.h: + Just define ACE_THROW_SPEC again as about a week ago, we need a fuzz check + to make sure people don't use this anymore in TAO + + * ace/Reactor.h: + Layout change + + * tests/Thread_Manager_Test.cpp: + Layout change to debug message + +Mon Feb 12 14:35:25 UTC 2007 Chad Elliott + + * bin/doxygen-convert-h.pl: + + Allow filenames or directories. If a directory is passed, it is + recursively searched for any file. + +Mon Feb 12 13:57:06 UTC 2007 Johnny Willemsen + + * etc/*.doxygen: + Removed ACE_THROW_SPEC + +Sat Feb 10 23:13:06 UTC 2007 Steve Huston + + * ace/Svc_Conf_Lexer.cpp (ace_yy_buffer_state): Disable VC8 warning + C4351 (input_ elements will be default-initialized) for this + block. The new behavior is good and desireable, so the warning + noise can be silenced in this case. + + * ace/Timer_Hash_T.cpp (reschedule, schedule_i): When calculating the + hash value, truncate the seconds value down to size_t range because + the modulo value used to hash is a size_t. Avoids a compile warning + about losing data when time_t is larger than size_t. + +Fri Feb 9 21:40:02 UTC 2007 Krishnakumar B + + * ace/High_Res_Timer.inl: + * ace/High_Res_Timer.cpp: + + Removed ACE_WIN32 specific code in ACE_High_Res_Timer to reflect + the change in the default value of ACE_HR_SCALE_CONVERSION. + Removed uses of ACE_HRTIME_CONVERSION and use + ACE_Utils::Truncate instead. + + * ace/OS_NS_time.h: + + Changed the check for defining ACE_HRTIME_CONVERSION and + ACE_HRTIME_TO_U64 from ACE_HRTIME_T_IS_BASIC_TYPE to + ACE_LACKS_UNSIGNEDLONGLONG_T. + + * tests/High_Res_Timer_Test.cpp: + + Updated the test to use ACE_Utils::Truncate instead of + static_cast which caused 0 to be output when time_t is 64-bit. + +Fri Feb 9 12:19:57 UTC 2007 Chad Elliott + + * bin/rm_exception_macros.pl: + + Fixed a bug where the end of the ACE_THROW_SPEC would not be + recognized. + +Thu Feb 8 23:09:59 UTC 2007 Douglas C. Schmidt + + * examples/Logger/Acceptor-server/server_loggerd.cpp (handle_input): + * examples/Logger/simple-server/Logging_Handler.cpp (handle_input): + * examples/Logger/client/logging_app.cpp (ACE_TMAIN): Fixed these + programs to use the proper (new) formatting for ACE_Log_Record. + Thanks to Mouna Seri for + reporting this. + +Thu Feb 8 19:40:30 UTC 2007 Steve Huston + + * ace/Makefile.am: + * ace/ace.mpc: + * ace/Time_Request_Reply.{h cpp}: + * netsvcs/lib/Makefile.am: + * netsvcs/lib/lib.mpc: + * netsvcs/lib/Time_Request_Reply.{h cpp}: Moved Time_Request_Reply + from ace to netsvcs; it's only used from netsvcs and is only useful + as an example of some ACE usage. Real time synch needs should be + met using NTP. + + * ace/Name_Request_Reply.{h cpp}: Changed the sec_timeout_ transfer + member from ACE_UINT32 to ACE_UINT64 to accomodate 64-bit time_t. + + * netsvcs/lib/TS_Clerk_Handler.h: + * netsvcs/lib/TS_Server_Handler.h: Time_Request_Reply.h now is included + from netsvcs/lib, not ace. + + * netsvcs/lib/Time_Request_Reply.{h cpp}: Changed the time-passing + API arguments in the constructor and time() methods from ACE_UINT32 + to time_t. The on-wire protocol buffer fields that carry seconds + values between clerk and server were changed from ACE_UINT32 to + ACE_UINT64 to accomodate 64-bit time_t values. + + * NEWS: Explained the user-visible ramifications of these changes. + +Thu Feb 8 09:23:50 UTC 2007 Olli Savia + + * ace/MMAP_Memory_Pool.cpp: + Removed empty else statement. + + * include/makeinclude/platform_linux.GNU: + Fixed TCL/TK settings + +Thu Feb 8 08:03:57 UTC 2007 Olli Savia + + * ace/config-openbsd.h: + Removed ACE_LACKS_CLEARERR and added ACE_HAS_3_PARAM_READDIR_R. + +Wed Feb 7 23:04:49 UTC 2007 Wallace Zhang + + * bin/tao_other_tests.lst: + + Added two existing Notify Service examples into the autotest list. + +Wed Feb 7 21:01:39 UTC 2007 Steve Huston + + * ACE-INSTALL.html: Added a bit of info about building for National + Instruments' LabVIEW RT which uses Pharlap ETS. In particular, if + building for LabVIEW's Pharlap, add #define ACE_PHARLAP_LABVIEW_RT + to your config.h file along with #include "ace/config-pharlap.h" + to adjust for slight differences between stock Pharlap and + LabVIEW RT's variant. + + * ace/config-pharlap.h: Pharlap doesn't supply InterlockedExchangeAdd + and doesn't do SetFilePointerEx (needs ACE_LACKS_SETFILEPOINTEREX). + + * ace/OS_NS_Thread.cpp (sched_params): Don't attempt SetPriorityClass + on Pharlap - it's not defined. + + * ace/OS_NS_Thread.inl (thr_getprio): For Pharlap ETS, use + EtsGetTimeSlice() to determine the scheduling policy; if the time + slice is anything other than 0, it's multitasking ACE_SCHED_OTHER. + + * ace/OS_NS_stdio.inl (cuserid): Pharlap doesn't go GetUserName() so + make it ACE_NOTSUP_RETURN. + (adjust_flock_params): Use SetFilePointer() instead of + SetFilePointerEx(), even with 64 bit offsets, if + ACE_LACKS_SETFILEPOINTEREX is set. + + * ace/OS_NS_unistd.inl (pwrite): For Windows platforms without + overlapped I/O, don't rely on availability of SetFilePointerEx - + platforms that have it also have overlapped I/O. In this case, use + SetFilePointer with appropriate call differences for 32/64 bit + file offsets. + + * ace/Pagefile_Memory_Pool.{h inl cpp}: Pharlap doesn't do this class. + + * ace/Configuration.{h cpp}: + * ace/Registry.{h cpp}: The Windows registry is not available in + Pharlap. + +Wed Feb 7 14:44:23 UTC 2007 Chad Elliott + + * bin/rm_exception_macros.pl: + + Added the ability to remove the ACE_THROW_SPEC's completely. + +Tue Feb 6 16:44:00 UTC 2007 Johnny Willemsen + + * ace/Global_Macros.h: + For the moment expand ACE_THROW_SPEC to nothing, we want to deprecate + this in TAO and want to see the impact of this on the tests + +Tue Feb 6 15:36:00 UTC 2007 Steve Huston + + * ace/Time_Value.inl: Remove the #if around #include "ace/Truncate.h" + because ACE_Utils::Truncate is needed in a case that's not in a + ACE_HAS_TIME_T_LONG_MISMATCH block. + +Mon Feb 5 19:58:39 UTC 2007 Steve Huston + + * ace/Log_Record.cpp (operator>>): Use ACE_Utils::Truncate to truncate + the received 64-bit time seconds to time_t. + +Mon Feb 5 17:16:20 UTC 2007 Steve Huston + + * ace/config-win32-msvc-8.h: Added a new setting for Windows VC8, + ACE_HAS_TIME_T_LONG_MISMATCH, to capture the case that requires + a replacement timeval def. See the following for details: + Thu Feb 1 23:46:27 UTC 2007 Steve Huston + This change isolates just the desktop VC8 compiler for the change, + avoiding compilers that don't need it and/or can't deal with + the code. + + * ace/Time_Value.{h inl}: Change code that uses a replacement timeval + from ACE_WIN32 to ACE_HAS_TIME_T_LONG_MISMATCH. + +Fri Feb 2 14:45:00 UTC 2007 Johnny Willemsen + + * ace/Dynamic_Service_Base.cpp: + Fixed compile error + +Fri Feb 2 14:32:06 UTC 2007 Adam Mitz + + * bin/auto_run_tests.pl: + Modified default behavior (if no -a, -o, -t, -C options are given) + so that the script looks for TAO in $TAO_ROOT as well as + $ACE_ROOT/TAO and similarly for CIAO. This change supports the peer + style layout. + +Fri Feb 2 14:08:00 UTC 2007 Johnny Willemsen + + * bin/rm_exception_macros.pl: + Also zap ACE_THROW_RETURN from application code, that is also + deprecated now + +Fri Feb 2 12:03:00 UTC 2007 Johnny Willemsen + + * ace/TSS_T.cpp: + Fixed merge error + +Fri Feb 2 11:43:00 UTC 2007 Simon Massey + + * include/makeinclude/platform_hpux_aCC.GNU: + Supress 3.xx warnings about non-return from functions + (Anoyingly it doesn't seem to think that a throw + terminates the execution flow of a function.) + +Fri Feb 2 10:47:55 UTC 2007 Olli Savia + + * ace/Proactor.cpp: + Layout change. + + * ace/config-lynxos.h: + Enabled POSIX_SIG_PROACTOR and made some cleanups. + + * ace/os_include/net/os_if.h: + Removed LynxOS specific include. + + * tests/Proactor_Test.cpp: + * tests/Proactor_Test_IPV6.cpp: + Enabled these tests again even if ACE_HAS_BROKEN_SIGEVENT_STRUCT + is defined. + +Fri Feb 2 10:31:14 UTC 2007 Johnny Willemsen + + * ace/CORBA_macros.h: + Removed workaround for ACE_THROW_RETURN for HP aCC compiler. This is + only needed for the HP 3.x compiler and we can suppress just this + warning. When this has been build on the scoreboard we will + zap the usage of this macro. + + * ace/Dynamic_Service.cpp: + * ace/Dynamic_Service_Base.cpp: + * ace/Service_Config.{h,cpp}: + * ace/Service_Gestalt.cpp: + * ace/TSS_T.cpp: + Layout changes + + * ace/Thread_Manager.cpp: + Const improvement + +Fri Feb 2 06:56:14 UTC 2007 Johnny Willemsen + + * bin/ACETAOCIAO.style: + Configuration file for profactor (see www.profactor.co.uk), a + code beautifier tool that we want to use to reformat the code + in ACE/TAO/CIAO. + +Fri Feb 2 06:48:40 UTC 2007 Olli Savia + + * ace/POSIX_CB_Proactor.h: + * ace/config-aix-5.x.h: + * ace/config-freebsd.h: + * ace/config-integritySCA.h: + * ace/config-macosx-panther.h: + * ace/config-macosx-tiger.h: + * ace/config-macosx.h: + * ace/config-rtems.h: + * ace/config-sunos5.4-g++.h: + * ace/config-sunos5.4-sunc++-4.x.h: + * ace/config-sunos5.5.h: + * ace/config-vxworks5.x.h: + * ace/config-vxworks6.2.h: + * ace/config-vxworks6.3.h: + * ace/config-vxworks6.4.h: + + Removed unnecessary sigval_t typedef and feature test macro + ACE_LACKS_SIGVAL_T + +Thu Feb 1 23:46:27 UTC 2007 Steve Huston + + * NEWS: Note change to ACE_Log_Record constructor. + + * ace/Log_Record.h (constructor): The "long time_stamp" argument was + changed from long to time_t to correspond with what's expected. + + * ace/Log_Record.{h inl cpp}: The secs_ value was changed from + ACE_UINT32 to time_t and is handled as a ACE_CDR::LongLong in the + CDR insertion and extraction operators. The encode() and decode() + methods are deprecated and will be removed in a future version of + ACE. + + * ace/Message_Block.cpp (priority_status): Cast sec() value to + suseconds_t size to avoid truncation warnings. + + * ace/Time_Value.{h inl cpp}: Use a private struct to manage time + internally for Windows since Windows' struct timeval uses long + values internally instead of the standard time_t/suseconds_t + that the class API uses (and POSIX uses in timeval). When a + real OS-defined timeval is needed, build it on the fly for Windows. + + * tests/High_Res_Timer_Test.cpp: When logging ACE_Time_Value-obtained + sec/usec values, truncate them down to u_int size. Avoids passing + 64-bit values to ACE_Log_Msg when only 32 bits will be taken from + the arg vector for a %u format spec. Fixes crashing of this test + on Win/VC8. + + * examples/APG/Naming/Temperature_Monitor.cpp: + * examples/APG/Naming/Temperature_Monitor2.cpp: Treat time as an int + instead of a time_t; makes the logic easier even though it'll break + sometime in 2038. + + * examples/ASX/UPIPE_Event_Server/event_server.cpp: Unify use of time_t + to hold time values from ACE_OS::time(). + + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: When measuring messages + per second, truncate seconds down to a 'long' to avoid truncation + warnings at compile time from converting to double. + + * examples/Reactor/Misc/notification.cpp (svc): Initialize an + ACE_Time_Value with secs / 2 instead of getting the seconds, + multiplying into usecs, then dividing by 2. Avoids data truncation + issues. + + * examples/Reactor/Multicast/Log_Wrapper.cpp (log_message): Cast + result of time() to long to insert in the multicast buffer. Avoids + truncation warning. Will stop recording a legit result sometime in + 2038 but the receiver isn't looking at the time field. + + * apps/gperf/src/Gen_Perf.cpp: + * ASNMP/tests/test_config.h (randomize): + * examples/Reactor/WFMO_Reactor/Multithreading.cpp: + * protocols/ace/RMCast/Link.cpp: + * protocols/ace/RMCast/Simulator.cpp: + * protocols/examples/TMCast/Member/member.cpp: + * tests/Auto_Event_Test.cpp: + * tests/Handle_Set_Test.cpp: + * tests/Recursive_Mutex_Test.cpp: + * tests/Semaphore_Test.cpp: + * tests/Thread_Mutex_Test.cpp: + * tests/Timer_Queue_Test.cpp: Cast time_t to u_int for use as an + ACE_OS::srand() seed - we just want some bits, not to fit it back in + range with ACE_Utils::Truncate. + +Thu Feb 1 11:21:32 UTC 2007 Olli Savia + + * ace/POSIX_CB_Proactor.h: + * ace/POSIX_CB_Proactor.cpp: + * ace/Proactor.cpp: + * ace/config-freebsd.h: + * ace/config-lynxos.h: + + Introduced a new feature test macro ACE_HAS_BROKEN_SIGEVENT_STRUCT + to make POSIX_CB_Proactor compile on FreeBSD 7.0-CURRENT. + + * tests/Proactor_Test.cpp: + * tests/Proactor_Test_IPV6.cpp: + + Modified due to changes above. + +Thu Feb 1 08:05:14 UTC 2007 Johnny Willemsen + + * ace/Message_Queue.{h,cpp,inl}: + Fixed compile errors in the NT Message Queue when build without + threading under windows + + * ace/OS_NS_Thread.cpp: + Layout changes + +Wed Jan 31 23:06:42 UTC 2007 Adam Mitz + + * ace/config-qnx-rtp-62x.h: + + Replaced ACE_LACKS_CUSERID with ACE_HAS_ALT_CUSERID to get the ACE + library to provide us with a cuserid() function. + + * ASNMP/asnmp/asn1.cpp: + * apps/drwho/global.h: + * examples/IPC_SAP/SOCK_SAP/C-inclient.cpp: + * examples/IPC_SAP/SOCK_SAP/C-inserver.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver.cpp: + * examples/Logger/Acceptor-server/server_loggerd.cpp: + * examples/Logger/client/logging_app.cpp: + * examples/Logger/simple-server/Logging_Handler.cpp: + * examples/Reactor/Multicast/Log_Wrapper.cpp: + * examples/Reactor/Multicast/server.cpp: + * netsvcs/lib/Name_Handler.cpp: + + Replaced htonl, htons, ntohl, and ntohs with the appropriate + ACE_XTOYZ macro (ACE_HTONL, for example). QNX doesn't have htonl and + friends without adding extra #includes. + +Wed Jan 31 19:03:37 UTC 2007 Chad Elliott + + * ace/Basic_Types.h: + + Added constants ACE_FLT_MIN and ACE_DBL_MIN to provide consistency + with ACE_FLT_MAX AND ACE_DBL_MAX. + + * ace/CDR_Base.h: + * ace/CDR_Base.cpp: + + Enhanced the ACE_CDR::LongDouble class which is used on platforms + where the native long double is not 16 bytes. + + Provided operators to support multiplication, division, addition + and subtraction as well as conversion to the native long double. + + An assign() method is also provided to set the value of the + ACE_CDR::LongDouble. Since this class will be stored in a union + (if used as an IDL type), it can not have a non-trivial constructor + or assignment operator. The existing + ACE_CDR_LONG_DOUBLE_INITIALIZER macro is used to initialize the + LongDouble and a new macro, ACE_CDR_LONG_DOUBLE_ASSIGNMENT, is + used to assign to the LongDouble in a portable fashion. + + * bin/tao_orb_tests.lst: + + Added the new TAO LongDouble test. + +Wed Jan 31 17:30:46 UTC 2007 Steve Huston + + * ace/config-hpux-11.00.h: + * include/makeinclude/platform_hpux_aCC.GNU: If stdcpplib=0 is + selected at build time, explicitly set -AP compile option to use + old C++ libraries and no std namespace. Also set + ACE_LACKS_NUMERIC_LIMITS when -AP is set - there is a numeric_limits + but not in std. Note that ACE_Array_Map won't build with stdcpplib=0 + but pre-ACE-5.5 legacy code will still build. + + Also removed the HP-UX 10.x remnants and pre-3.0 aC++ support + from platform_hpux_aCC.GNU. Could probably safely remove more old + compiler support (anything older than 3.56 probably) but I played + it a little conservative for now. + +Wed Jan 31 17:22:11 UTC 2007 Chad Elliott + + * protocols/examples/examples.mwc: + + Removed the implicit usage. It is not necessary since each + example has a .mpc file. + + * protocols/examples/example_base.mpb: + + Removed this file. It was not needed. + +Wed Jan 31 16:55:23 UTC 2007 Adam Mitz + + * ace/config-qnx-rtp-62x.h: + + Removed #define ACE_HAS_INLINED_OSCALLS as it seems to be both rarely + used (only oddball platforms like unixware and other QNX versions + have it) and also incompatible with inline=0 builds. + Also added new config macros ACE_LACKS_STRPTIME (June 2006) and + ACE_HAS_3_PARAM_READDIR_R (December 2006). + These modifications have been tested with QNX 6.3 but from the docs + on the QNX web site I believe they apply to QNX 6.2 as well. + +Wed Jan 31 15:44:54 UTC 2007 Olli Savia + + * ace/POSIX_CB_Proactor.h: + * ace/POSIX_CB_Proactor.cpp: + Use sigval (which is SUS defined) instead of sigval_t. If this + change doesn't break on any platform I'll remove unnecessary + typedef and related stuff. + +Wed Jan 31 13:31:14 UTC 2007 Johnny Willemsen + + * bin/fuzz.pl: + Removed obsolete checks for environment macros + + * ace/Recycable.h: + Removed empty brief doxygen tag + + * ace/OS_NS_unistd.inl: + * ace/config-rtems.h: + Renamed ACE_HAS_BROKEN_SZ_PAGESIZE to ACE_HAS_NOTSUP_SC_PAGESIZE + +Wed Jan 31 13:21:14 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_hpux_gcc.GNU: + Added improvement for GCC on HPUX IA64 + +Wed Jan 31 10:17:14 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_hpux_gcc.GNU: + Improved support for GCC on HPUX IA64 + +Wed Jan 31 07:50:44 UTC 2007 Krishnakumar B + + * ace/OS_NS_Thread.cpp (ACE_OS::sched_params): Check if the + ACE_id_t id that is being passed in is equal to ACE_SELF. If + so, pass ::GetCurrentProcessId() to ::OpenProcess() instead of + id. ACE_SELF is defined to be 0 on ACE_WIN32; process id 0 is + the zero-page process, and we certainly don't want to attempt to + set it to REALTIME_PRIORITY_CLASS :-) + +Wed Jan 31 03:25:51 UTC 2007 Krishnakumar B + + * ace/High_Res_Timer.h: + + Removed the special case default definition of + ACE_HR_SCALE_CONVERSION to ACE_ONE_SECOND_IN_MSECS on Windows; + added a #ifndef around the default definition in case the user + wishes to change it. This was done to prevent useless values + like 0 showing up in calculations using ACE_Basic_Stats when the + time intervals are of the order of a few microseconds. Most of + the current machines have a QueryPerformanceCounter() + implementation that returns a value of atleast 3 MHz. So it + should be completely safe to use the definition of + ACE_ONE_SECOND_IN_USECS as the default value for + ACE_HR_SCALE_CONVERSION on contemporary x86 machines running + Windows. + + * ace/Message_Block.inl: + * ace/Message_Block.cpp: + + Moved the definition of + ACE_Dynamic_Message_Strategy::priority_status() from + Message_Block.inl to Message_Block.cpp. It was a big function + and it currently has code that causes a warning with VC8 on + Windows. + +Tue Jan 30 19:21:50 UTC 2007 Chad Elliott + + * ace/Module.h: + + Removed the trailing comma from the last element of the enum. + +Tue Jan 30 16:26:43 UTC 2007 William R. Otte + + * bin/sets-manager.py: + + Modified to pin the version of MPC at the time of branching/tagging + under modules/ACE/MPC. Note: This does not branch OR tag MPC, + it simply causes the branch/tag to check out a specific + revision of MPC. + +Tue Jan 30 13:51:32 UTC 2007 Chad Elliott + + * ace/Module.h: + * ace/Module.cpp: + + There was no way to distinguish between flags not being set and + flags to indicate that tasks should not be deleted. I have + changed the M_DELETE_NONE enum value to 4 and added a new enum + value for use in flag initialization. With this change, the + close() method can determine if it needs to use the flags passed + in or the internal flags. This fixes Bugzilla #2497. + +Tue Jan 30 11:35:14 2007 Johnny Willemsen + + * ace/Countdown_Time.{h,cpp}: + Readded destructor, missed that it updates the max_wait_time + passed to the constructor + +Tue Jan 30 10:44:14 2007 Johnny Willemsen + + * include/makeinclude/wrapper_macros.GNU: + When pipes is set to 1, also add -pipe to the CCFLAGS + + * include/makeinclude/platform_rtems.x_g++.GNU: + Set pipes to 1, set DCCFLAGS + +Tue Jan 30 10:14:14 2007 Johnny Willemsen + + * ace/Unbounded_Set.cpp: + Initialise pointer with 0. + + * ace/OS_NS_unistd.inl (getpagesize): + * ace/config-rtems.h: + RTEMS does define _SC_PAGESIZE, but using sysconf with _SC_PAGESIZE + results in -1. Added a new define ACE_HAS_BROKEN_SC_PAGESIZE to be + able to disable the usage of sysconf (_SC_PAGESIZE) for rtems 4.6, + the ::getpagesize() function returns a correct value. + +Tue Jan 30 09:46:14 2007 Johnny Willemsen + + * tests/OS_Test.cpp: + Added a test for ACE_OS::getpagesize(), it should return a value + bigger then 0 else the memory pools don't work + +Tue Jan 30 00:25:00 UTC 2007 Steve Huston + + * ace/config-hpux-11.00.h: If the user sets RWSTD_NO_NAMESPACE to + keep a lot of the standard C++ library out of the std namespace, + avoid setting ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB, and also + hoist everything else from std into the global namespace. This is + necessary because RW wasn't consistent with using their internal + _RWSTD_NO_NAMESPACE and the user-settable RWSTD_NO_NAMESPACE and + some things end up in std and some not; so get the ones that ended + up in std out to global with the rest of them. + +Mon Jan 29 19:48:14 2007 Johnny Willemsen + + * ace/Based_Pointer_Repository.cpp: + * ace/Basic_Stats.cpp: + * ace/Codeset_Registry.cpp: + * ace/FILE.cpp: + * ace/FILE_Addr.cpp: + Layout improvements + +Mon Jan 29 19:07:14 2007 Johnny Willemsen + + * etc/ciao.doxygen: + * etc/ciao_config_handlers.doxygen: + * etc/ciao_DAnCE.doxygen: + Removed CIAO_NAMESPACE + +Mon Jan 29 18:58:14 2007 Johnny Willemsen + + * ace/Argv_Type_Converter.cpp: + * ace/Asynch_Pseudo_Task.cpp: + * ace/Cached_Connect_Strategy_T.cpp: + Layout changes, result of experimenting with a code + beautifier + + * ace/config-rtems.h: + Improved rtems port, added support for building with + threads=0 + + * ace/config-sco-5.0.0.h: + Removed commented out define + + * ace/config-vxworks6.4.h: + putenv fails with VxWorks 6.4 with a pentium target + + * ace/Countdown_Time.{h,cpp}: + Use bool, removed return value from most methods, it was + meaningless, removed destructor, not needed to update members + in a destructor + + * ace/Dev_Poll_Reactor.h: + Export Token_Guard, fixes bugzilla 2786, thanks to + for reporting this + + * OS_NS_pwd.inl (getpwnam_r): + Initialize pointer with 0, simplified this a little + + * docs/ACE-guidelines.html: + Updated example with doxygen style of documentation + +Sun Jan 28 19:59:14 2007 William R. Otte + + * ACE version 5.5.6 released. + +Fri Jan 26 10:03:12 UTC 2007 Johnny Willemsen + + * ace/Cached_Connect_Strategy_T.cpp + * ace/Event_Handler_T.inl + * ace/Future.cpp + * ace/Future_Set.cpp + * examples/C++NPv2/Reactor_Logging_Server_T.cpp + Use typename + +Thu Jan 25 19:59:23 UTC 2007 Chad Elliott + + * bin/MakeProjectCreator/templates/gnu.mpd: + + The include of rules.cia.GNU must come before the include of + rules.tao.GNU in order for CIAO libraries to have the correct + version numbers. + + * bin/auto_run_tests.pl: + + Fixed the -l option to use the correct variable name and corrected + a bug where the script changed to the wrong directory if the -l + option was used. + + * bin/clean_sems.sh: + + Support the ngvipc command to clean up semaphores on MacOS X. + + * bin/rm_exception_macros.pl: + + A new script to assist users in the removal of all ACE related + exception macros. + +Thu Jan 25 19:24:12 UTC 2007 Johnny Willemsen + + * etc/*.doxygen: + Removed ACE_ENV macros + +Thu Jan 25 11:00:12 UTC 2007 Johnny Willemsen + + * ace/CDR_Stream.h: + Fixed typo, fixes part of bugzilla bug 2780, thanks to + for reporting this. + + * docs/Download.html: + Enabled links for source only packages, they are available + from x.5.5 + +Thu Jan 25 07:50:12 UTC 2007 Johnny Willemsen + + * ace/Containers_T.cpp: + Use typename + +Wed Jan 24 12:25:12 UTC 2007 Johnny Willemsen + + * ace/Acceptor.h: + * ace/Cached_Connect_Strategy_T.h: + * ace/Connector.h: + Use typename instead of ACE_TYPENAME which is now + deprecated + + * ace/Codeset_IBM1047.cpp: + Added missing includes + + * ace/config-aix-5.x.h: + * ace/config-borland-common.h: + * ace/config-cxx-common.h: + * ace/config-g++-common.h: + * ace/config-hpux-11.00.h: + * ace/config-icc-common.h: + * ace/config-irix6.x-sgic++.h: + * ace/config-linux-common.h: + * ace/config-lynxos.h: + * ace/config-netbsd.h: + * ace/config-suncc-common.h: + * ace/config-sunos5.5.h: + * ace/config-sunos5.6.h: + * ace/config-tandem-nsk-mips-v2.h: + * ace/config-tandem-nsk-mips-v3.h: + * ace/config-unixware-7.1.0.udk.h: + * ace/config-win32-dmc.h: + * ace/config-win32-ghs.h: + * ace/config-win32-interix.h: + * ace/config-win32-msvc-7.h: + * ace/config-win32-msvc-8.h: + * ace/config-win32-visualage.h: + Removed ACE_HAS_TYPENAME_KEYWORD, we do require that each + compiler supports typename + + * ace/config-cygwin32.h: + * ace/config-hpux-11.00.h: + * ace/config-lynxos.h: + * ace/config-macosx-panther.h: + * ace/config-macosx-tiger.h: + * ace/config-macosx.h: + * ace/config-netbsd.h: + * ace/config-openvms.h: + * ace/config-rtems.h: + * ace/config-sunos5.5.h: + * ace/config-tandem-nsk-mips-v3.h: + * ace/config-tru64.h: + Removed ACE_HAS_MEMCHR + + * ace/config-doxygen.h: + Enabled COIOP and Transport Current + + * ace/config-macros.h: + Deprecated ACE_TYPENAME, users can still use it, but in some builds + on the daily scoreboard it now can't be used anymore + + * ace/config-mvs.h: + Improved MVS support + + * ace/Global_Macros.h: + * ace/Malloc_T.h: + * ace/Map_T.h: + * ace/Strategies_T.h: + Use typename + + * ace/Log_Msg.cpp: + * ace/os_include/sys/os_types.h: + * ace/Task.cpp: + Added support for MVS + + * ace/OS_NS_string.{h,cpp,inl}: + Replaced ACE_HAS_MEMCHR with ACE_LACKS_MEMCHR, this way a platform that + lacks this method has to set an explicit define, maybe it now shows + that all platforms have this method and we don't need an emulation + anymore. Also removed several emulations that are not needed anymore + + * ace/OS_NS_Thread.inl: + Layout changes + + * ace/OS_NS_wchar.{h,cpp}: + Changed second argument of wcschr_emulation to wchar_t, that way we don't + need a cast anymore + + * ace/Rtems_init.c: + Improved this file + + * ace/Sock_Connect.cpp: + Initialise some pointers with 0 + + * bin/cvslog: + Removed, not needed anymore + + * bin/fuzz.pl: + Removed checks for emulated exception macros + + * examples/Export/run_test.pl: + Use ACE_ROOT + + * examples/Misc/test_read_buffer.cpp: + Initialise pointer with 0 + + * include/makeinclude/platform_mvs.GNU: + Improved support + + * netsvcs/servers/servers.mpc: + Simplified + + * performance-tests/UDP/udp_test.cpp: + * tests/Cached_Allocator_Test.cpp: + * tests/Env_Value_Test.cpp: + * tests/Handle_Set_Test.cpp: + Removed ACE_LACKS_FLOATING_POINT check + + * tests/Thread_Creation_Threshold_Test.cpp: + Added missing \n + +Mon Jan 22 23:14:56 2007 William R. Otte + + * ACE version 5.5.5 released. + + +Local Variables: +mode: change-log +add-log-time-format: (lambda () (progn (setq tz (getenv "TZ")) (set-time-zone-rule "UTC") (setq time (format-time-string "%a %b %e %H:%M:%S %Z %Y" (current-time))) (set-time-zone-rule tz) time)) +indent-tabs-mode: nil +End: diff --git a/ACE/ChangeLogs/ChangeLog-08a b/ACE/ChangeLogs/ChangeLog-08a new file mode 100644 index 00000000000..7a48c1babf4 --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-08a @@ -0,0 +1,5373 @@ +Thu Feb 21 02:34:37 CST 2008 Johnny Willemsen + + * ACE version 5.6.3 released. + +Thu Feb 21 08:09:12 UTC 2008 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.2.GNU: + Updated for a Windows host + +Mon Feb 18 19:59:12 UTC 2008 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Don't run Bug_3171_Regression when messaging is disabled + +Thu Feb 14 11:22:12 UTC 2008 Johnny Willemsen + + * examples/Semaphores/starter.cpp: + * examples/Semaphores/worker.cpp: + Fixed unicode link errors + +Wed Feb 13 20:53:00 UTC 2008 Ciju John + + * bin/tao_orb_tests.lst: + Turn off test Bug_3193_Regression. + +Wed Feb 13 19:03:12 UTC 2008 Johnny Willemsen + + * examples/Semaphores/starter.cpp: + Added missing return + +Wed Feb 13 16:19:09 UTC 2008 Adam Mitz + + * include/makeinclude/rules.local.GNU: + + This is a (partial) fix for bug #3217, addressing two problems when + using gnu make on Windows systems: + 1. make depend (invoking depgen.pl) was broken + 2. when LN_S is cp the target of the copy operation was not updated + if the actual executable was remade. + +Wed Feb 13 12:41:12 UTC 2008 Johnny Willemsen + + * examples/Semaphores/*: + Added a basic example for process semaphores + +Tue Feb 12 15:43:57 UTC 2008 James H. Hill + + * NEWS: + Updated the NEW file with my updates for to ACE. + +Tue Feb 12 12:31:34 UTC 2008 Simon McQueen + + * bin/PerlACE/Run_Test.pm: + + Amend PerlACE::add_lib_path to add path relative to $HOST_ROOT + also in the even that it is set. Should hopefully make this function + work on VXWorks. In the even that it does this will fix bug #3177. + +Tue Feb 12 10:18:14 UTC 2008 Simon McQueen + + * bin/MakeProjectCreator/config/ace_output.mpb: + + Create new base project to direct libraries into $ACE_ROOT/lib. + + * bin/MakeProjectCreator/config/acelib.mpb: + + Remove entries that direct libraries into $ACE_ROOT/lib. + + * ACEXML/apps/svcconf/svcconf.mpc: + * ACEXML/common/common.mpc: + * ACEXML/parser/parser/parser.mpc: + * ASNMP/asnmp/asnmp.mpc: + * Kokyu/Kokyu.mpc: + * ace/QoS/qos.mpc: + * ace/SSL/ssl.mpc: + * ace/SSL/ssl_for_tao.mpc: + * ace/ace_flreactor.mpc: + * ace/ace_foxreactor.mpc: + * ace/ace_qtreactor.mpc: + * ace/ace_tkreactor.mpc: + * ace/ace_xtreactor.mpc: + * apps/Gateway/Gateway/gateway.mpc: + * apps/Gateway/Peer/peer.mpc: + * apps/JAWS/server/server.mpc: + * apps/JAWS2/HTTPU/httpu.mpc: + * apps/JAWS2/JAWS/jaws2.mpc: + * apps/JAWS3/jaws3/jaws3.mpc: + * netsvcs/lib/lib.mpc: + * protocols/ace/HTBP/HTBP.mpc: + * protocols/ace/RMCast/RMCast.mpc: + * protocols/ace/TMCast/TMCast.mpc: + * websvcs/lib/lib.mpc: + + Add ace_output.mpb as base project. + + * bin/PerlACE/Run_Test.pm: + + Add '.' onto the search path for test libraries. + + * bin/tao_orb_tests.lst: + + Create new alternate entries for some overly protracted tests + enabling a quicker run through. + + * tests/SSL/acetest.mpb: + + Add $ACE_ROOT/tests onto the link path for ACE tests. + + * tests/run_test.pl: + + Add $ACE_ROOT/tests onto the load path for running ACE tests. + +Mon Feb 11 20:46:13 UTC 2008 Ciju John + + Merging in changes from branch "Bug_3193". Here are the individual + Changelog entries: + Thu Feb 7 23:01:55 UTC 2008 Ciju John + + * bin/tao_orb_tests.lst: + Turn on reactive flushing oneway send test scenario. + + Wed Feb 6 21:41:25 UTC 2008 Ciju John + + * bin/tao_orb_tests.lst: + Disable test on Windows. No viable mechanism found to fulfill + test pre-requisites on Windows. + + Wed Jan 30 23:18:35 UTC 2008 Ciju John + + * bin/tao_orb_tests.lst: + Turn on TAO/tests/Oneway_Send_Timeouts. + +Mon Feb 11 16:12:12 UTC 2008 Johnny Willemsen + + * bin/PerlACE/Run_Test.pm: + Added wait_interval_for_process_shutdown which can be used to + wait longer on slower systems + +Wed Feb 6 08:30:12 UTC 2008 Johnny Willemsen + + * ace/config-vxworks5.x.h: + Some PPC's do lack log2 + +Wed Feb 6 23:29:55 UTC 2008 Steve Huston + + * examples/APG/Proactor/HA_Proactive_Status.cpp: Pass + ACE_DEFAULT_ASYNCH_BACKLOG, not ACE_DEFAULT_BACKLOG, to the + ACE_Asynch_Acceptor contructor. Corrects a startup error on Windows. + Thanks to Sorin Voicu-Comendant for this fix. + + * THANKS: Added Sorin Voicu-Comendant to the Hall of Fame. + +Tue Feb 5 22:15:29 UTC 2008 Simon McQueen + + * bin/tao_other_tests.lst: + + Scheduled bug #3216. + +Tue Feb 5 18:51:12 UTC 2008 Johnny Willemsen + + * bin/MakeProjectCreator/config/test_files.mpb: + Use run_test*.pl as filter and automatic=0. That way we only + generate projects when there is a run_test.pl file. Thanks to + Adam Mitz for the suggestions. + + * bin/MakeProjectCreator/config/acedefaults.mpb: + Readded test_files + +Tue Feb 5 13:49:12 UTC 2008 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.5.x.GNU: + No need to set TAO_IDL, TAO_IDL_DEP, etc, just use HOST_ROOT. + Also set the values in such a way we also support a Solaris host. + +Tue Feb 5 13:30:12 UTC 2008 Johnny Willemsen + + * bin/MakeProjectCreator/config/acedefaults.mpb: + Added build_files as base project, test_files is the one that + causes some problems + +Tue Feb 5 08:07:12 UTC 2008 Johnny Willemsen + + * bin/MakeProjectCreator/config/acedefaults.mpb: + Temporarily remove test_files and build_files, it seems + to cause some errors in the windows builds + +Tue Feb 5 07:58:12 UTC 2008 Johnny Willemsen + + * ace/Select_Reactor_Base.cpp: + Revert change of yesterday, caused compile errors on non win32 + platforms + +Mon Feb 4 19:48:12 UTC 2008 Johnny Willemsen + + * ace/config-vxworks6.6.h: + Simplified this file + + * ace/Obstack_T.cpp: + Initialise a few pointers + + * ace/Select_Reactor_Base.cpp: + Removed duplicated code, made loop easier to read + + * ace/Naming_Context.{h,cpp,inl}: + Use bool and added new inline file + +Mon Feb 4 18:37:12 UTC 2008 Johnny Willemsen + + * bin/MakeProjectCreator/config/test_files.mpb: + New file to list run_test.pl as Test_Files in for example a msvc + project file. Thanks to Adam Mitz for suggesting a way to do + this. This fixes bugzilla 3212 + + * bin/MakeProjectCreator/config/acedefaults.mpb: + Added test_files and build_files as base projects so that we + get *.mpc/*.mpb/*.mwc/run_test.pl added to project files + +Mon Feb 4 12:34:06 UTC 2008 Simon McQueen + + * bin/tao_other_tests.lst: + + Schedule regression tests for bug #2777 and #3215. + +Sat Feb 2 07:08:12 UTC 2008 Johnny Willemsen + + * ace/Malloc_T.h: + * ace/Process_Semaphore.inl: + * ace/Reactor.h: + * ace/Select_Reactor_T.h: + Doxygen improvements + +Sat Feb 2 06:36:12 UTC 2008 Johnny Willemsen + + * ace/config-win32-borland.h: + Updated for CodeGear C++ Builder 2007 December Update + +Fri Feb 01 13:25:00 UTC 2008 Simon Massey + + * ace/Timer_Heap_T.cpp: + Fixed possiable race condition. + + * test/Timer_Queue_Reference_Counting_Test.cpp: + Fixed periodic test timeout problem. + +Wed Jan 30 16:00:12 UTC 2008 Johnny Willemsen + + * ace/Message_Queue.inl: + Fixed incorrect include check + +Sun Jan 27 07:32:12 UTC 2008 Johnny Willemsen + + * include/makeinclude/platform_mingw32.GNU: + With gcc4 use the shared gcc libs + + * ACE-INSTALL.html: + Document postfix for msvc71 + +Sat Jan 26 07:18:12 UTC 2008 Johnny Willemsen + + * tests/Proactor_Scatter_Gather_Test.cpp: + Fixed GCC warnings + +Sat Jan 26 06:45:12 UTC 2008 Johnny Willemsen + + * examples/QOS/Change_Receiver_FlowSpec/Receiver_QoS_Event_Handler.h + * examples/QOS/Change_Receiver_FlowSpec/Sender_QoS_Event_Handler.h + * examples/QOS/Change_Sender_TSpec/Receiver_QoS_Event_Handler.h + * examples/QOS/Change_Sender_TSpec/Sender_QoS_Event_Handler.h + * examples/QOS/Simple/Receiver_QoS_Event_Handler.h + * examples/QOS/Simple/Sender_QoS_Event_Handler.h + Fixed compile errors with MinGW GCC 4.2.1 + +Fri Jan 25 18:43:46 UTC 2008 James H. Hill + + * docs/svn/config: + * docs/svn/svn-prefs.reg: + + Added *.mwb files to the default configuration. + +Fri Jan 25 09:51:12 UTC 2008 Johnny Willemsen + + * ace/config-g++-common.h: + GCC 4 with MinGW has other export macros in config-win32-common.h that + must be used + +Thu Jan 24 09:12:12 UTC 2008 Johnny Willemsen + + * bin/MakeProjectCreator/config/acedefaults.mpb + * bin/MakeProjectCreator/config/vc8nmake.mpb + * bin/MakeProjectCreator/config/vc9nmake.mpb + Changed to use synchronous exception handling with msvc 8/9 which + is the default. Asynchrous exception handling does catch access + violations but it leads to lower performance and other problems. + Also the C+ gurus advice not to use asynchronous exception + handling. This fixes bugzilla 3169, thanks to + Adrian Tulloch + for reporting this. + + * tests/Reactor_Exceptions_Test.cpp: + Always use a C++ exception to test the reactor. This test is the + only one that fails when using synchronous exception handling with + msvc8/9 because it causes only an access violation on windows + with msvc, on other platforms it already did throw a regular + C++ exception + + * bin/MakeProjectCreator/templates/bor.mpd: + Fixed typo in this template + +Thu Jan 24 08:32:53 UTC 2008 Vladimir Zykov + + * bin/tao_orb_tests.lst: + Disabled test for bug 3154 on builds where no tao_idl present. + +Thu Jan 24 08:25:12 UTC 2008 Johnny Willemsen + + * ace/OS_main.h: + Declare ace_main as extern C for VxWorks kernel mode. With this + we can resolve ace_main using symFindByName. This fixes bugzilla + 3204 + +Wed Jan 23 23:40:32 UTC 2008 Steve Huston + + * ace/INET_Addr.cpp (set): Propagate IPv4 and 6 lookup error values + to errno. + + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: When picking a + unused listen port ends up binding an IPv6 address, use the IPv6 + "localhost" for the connect address. When unregistering a event + handler, don't deref reactor() if it's zero (happens when the + registration fails). Remove an extraneous %t spec in a log string. + +Wed Jan 23 19:21:12 UTC 2008 Johnny Willemsen + + * include/makeinclude/platform_gnuwin32_common.GNU: + With GCC 2.9x we need to use -mcpu + +Wed Jan 23 17:23:31 UTC 2008 Steve Huston + + * include/makeinclude/platform_linux.GNU: Don't add CFLAGS to CCFLAGS + because it ends up adding -pipe twice when pipe=1. Thanks to Howard + Finer for reporting this. + +Tue Jan 22 10:46:12 UTC 2008 Johnny Willemsen + + * bin/PerlACE/ProcessVX.pm: + * bin/PerlACE/ProcessVX_Unix.pm: + * bin/PerlACE/ProcessVX_Win32.pm: + Refactored these scripts so that we have less duplicated code + +Mon Jan 21 06:07:12 UTC 2008 Johnny Willemsen + + * ace/Dev_Poll_Reactor.cpp: + Fixed compile error + +Thu Jan 17 19:58:12 UTC 2008 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.3.GNU: + Override RM on a solaris host + +Thu Jan 17 19:35:12 UTC 2008 Johnny Willemsen + + * ace/config-vxworks6.6.h: + Improved VxWorks 6.6 RTP support + +Thu Jan 17 19:24:12 UTC 2008 Johnny Willemsen + + * ace/Task_Ex_T.h: + Marked can_put as deprecated like in Task_T.h + + * ace/Task_Ex_T.inl: + Replaced assert with notsup return + + * ace/Task_T.inl: + Removed not needed includes + + * ace/ACE.cpp: + Const change + + * ace/DLL.cpp: + Changed close_handle_on_destruction flag and error flag to bool. + Use ACE_OS::dl_error() to get the error message + + * ace/DLL.h: + Changed close_handle_on_destruction flag and error flag to bool + + * ace/Log_Msg.cpp: + Use bool and print the process id as hex on OpenVMS, the DCL + scripts also prints the process id as hax + + * ace/Log_Msg.h: + Only defined the ACE_DEBUG, ACE_ERROR, and other + macros when they are not defined yet + +Thu Jan 17 18:57:12 UTC 2008 Johnny Willemsen + + * ace/config-vxworks6.6.h: + Improved x86 support + + * ace/Dev_Poll_Reactor.cpp: + Layout and const changes + + * ace/Encoding_Converter_Factory.cpp: + Const changes + + * ace/FILE_Connector.h: + * ace/Handle_Ops.h: + Doxygen changes + + * ace/POSIX_Proactor.cpp: + Use prefix increment/decrement and initialise pointer to 0 + + * ace/SSL/SSL_Context.cpp: + Initialise pointer to 0 + +Wed Jan 16 19:40:08 UTC 2008 Jeff Parsons + + * THANKS: + + Added Nayeem Khan . + +Wed Jan 16 18:16:12 UTC 2008 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Turn on Bug 3198 regression test. + +Wed Jan 16 15:50:19 UTC 2008 Abdullah Sowayan + + * bin/PerlACE/ProcessVX_Unix.pm: + * bin/PerlACE/ProcessVX_Win32.pm: + + Added support for iBootBar. iBootBar is similar to iBoot, except + that it is rack mounted with 8 power outlets. The scripts above + were extended to use the iBootBar iPAL protocol. The configuration + in the autobuild xml file of iBootBar is exactly the same that of + iBoot, except that you need to define ACE_RUN_VX_IBOOT_OUTLET + environment variable to specify the power outlet number you want + to use. + +Wed Jan 16 13:05:17 UTC 2008 Abdullah Sowayan + + * bin/PerlACE/ProcessVX_Unix.pm: + * bin/PerlACE/ProcessVX_Win32.pm: + + Added ACE_RUN_VX_LOGIN and ACE_RUN_VX_PASSWORD to the scripts. + One can use those variables in the autobuild XML to specify + the login/password used to access the target from telnet. + +Tue Jan 15 19:16:56 UTC 2008 Ciju John + + * bin/tao_orb_tests.lst: + Turn on Bug 3193 regression test. + +Mon Jan 14 16:14:11 UTC 2008 James H. Hill + + * tests/STL_algorithm_Test_T.cpp: + + Changed the std::for_each functor object to an actual class + that will count the number of elements handled. It would + be nice to eventually validate that the number of elements + handled is equal to the number of elements in the container. + +Mon Jan 14 14:06:33 UTC 2008 James H. Hill + + * tests/Hash_Map_Manager_Test.cpp: + + Removed the print_value () function since it is no longer + needed in the test. + + * tests/STL_algorithm_Test_T.cpp (for_each_callback): + + Wrapped the unused argument in ACE_UNUSED_ARG () to prevent + compiler warnings. + +Mon Jan 14 05:01:19 UTC 2008 James H. Hill + + * tests/acetest.mpb: + + Added an empty template declaration to the base project to + prevent actual tests from including unnecesary template source + files. + +Mon Jan 14 04:47:50 UTC 2008 James H. Hill + + * ace/Hash_Map_Manager_T.h: + + Added the ACE style iterator declaration for the const + reverse iterator to ACE_Hash_Map_Manager_Ex. + +Mon Jan 14 04:41:29 UTC 2008 James H. Hill + + * ace/Hash_Map_Manager_T.h: + * ace/Hash_Map_Manager_T.inl: + + Implemented the ACE_Hash_Map_Const_Reverse_Iterator_Ex class, + which is the const_reverse_iterator for the + ACE_Hash_Map_Manager_Ex class. + + * tests/Hash_Map_Manager_Test.cpp: + * tests/STL_algorithm_Test_T.h: + * tests/STL_algorithm_Test_T.cpp: + + Generalized the STL algorithm test used in the hash map + manager test so that it can be used with any ACE container. + + * tests/tests.mpc: + + Added the STL_algorithm_Test_T.* files to the + Hash_Map_Manager_Test project. + +Sun Jan 13 16:40:12 UTC 2008 Johnny Willemsen + + * include/makeinclude/platform_sunos5_sunc++.GNU: + Set PLATFORM_STLPORT_CPPFLAGS independent of the Sun C++ version. + Thanks to Charles Brown + for reporting that this was causing a problem with Studio 12 + + * include/makeinclude/platform_g++_common.GNU: + Only set CXX_VERSION_FOR_TEST when it has not been set yet + +Fri Jan 11 09:01:12 UTC 2008 Martin Corino + + * bin/PerlACE/ProcessVX_Win32.pm: + Added ACE_RUN_VX_PRJ_ROOT env.var. to allow for projects + having root directory for tests different from ACE_ROOT. + +Tue Jan 8 09:02:12 UTC 2008 Johnny Willemsen + + * ace/os_include/sys/os_types.h: + Changed pid_t to be an int on windows. This fixes bugzilla + 3190, thanks to Nathan Ernst + for reporting this + +Sun Jan 6 19:55:12 UTC 2008 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Don't run bug 2936 in a static build + +Sun Jan 6 06:43:12 UTC 2008 Johnny Willemsen + + * tests/IOStream_Test.cpp: + Fixed include and removed chorus support + +Sat Jan 5 07:03:36 UTC 2008 James H. Hill + + * ChangeLog: + + Fixed incomplete entry below. + +Fri Jan 4 23:49:23 UTC 2008 James H. Hill + + * tests/Hash_Map_Manager_Test.cpp: + + Removed std::count_if sanity check since std::count_if is not + supported on Sun Studio 10. + +Fri Jan 4 18:47:56 UTC 2008 Adam Mitz + + * bin/generate_doxygen.pl: + + Added support for peer-based layout of ACE+TAO+CIAO, and also fixed + the use of TAGFILES when the -html_output option is used. + +Thu Jan 3 14:29:28 UTC 2008 James H. Hill + + * tests/Hash_Map_Manager_Test.cpp: + + Moved the Key_Equal_To struct to the top of the file. + +Thu Jan 3 14:21:40 UTC 2008 James H. Hill + + * tests/Hash_Map_Manager_Test.cpp: + + Removed ACE_HAS_STDCPP_STL_INCLUDES guard so the test can + always execute the test_STL_algorithm () function if it + compiles. + +Thu Jan 3 01:06:23 UTC 2008 James H. Hill + + * tests/Hash_Map_Manager_Test.cpp: + + Fixed compilation error on non-Windows systems. For some + reason, I used TCHAR instead of ACE_TCHAR. :/ + +Thu Jan 3 00:47:36 UTC 2008 James H. Hill + + * ace/Hash_Map_Manager_T.h: + + Increased support for using ACE_Hash_Map_*_Iterator with + functions in the STL header file. This involved + defining all the traits required by std::iterator_traits + for all the iterator types. + + * tests/Hash_Map_Manager_Test.cpp: + + Updated the test to check if the ACE_Hash_Map_*_Iterator + classes are able to compile with simple STL + cases. If the target platform does not support STL or + our iterators, this compilation will fail. + +Mon Dec 31 18:32:29 UTC 2007 Chris Cleeland + + * bin/PerlACE/Process_Unix.pm: + + Integrated a change originally made in OCITAO 1.4a to use a + non-blocking waitpid() call in a loop (max 5 seconds) to avoid + hanging the perl process in case waitpid() doesn't return. + +Sun Dec 30 18:31:12 UTC 2007 Johnny Willemsen + + Simplify the setup for VxWorks. We have GNU and config files for each + specific release, but the end user can just include the two new files + below and we will select the specific file required + + * include/makeinclude/platform_vxworks.GNU: + New file, based on the environment variable WIND_PLATFORM we + select a specific VxWorks GNU file. The WIND_PLATFORM environment + variable is set by the wrenv tool + + * ace/config-vxworks.h: + Based on ACE_VXWORKS we include a specific vxworks config file. + ACE_VXWORKS is added to the compiler flags when using the ACE + GNU makefiles. + +Fri Dec 28 18:57:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.6.GNU: + Added -fno-strict-aliasing to the CPPFLAGS as workaround to get + rid of the warnings on the VxWorks system header files. This + has been reported to WindRiver + +Fri Dec 28 18:18:12 UTC 2007 Johnny Willemsen + + * ace/config-sunos5.11.h: + New file for Solaris 11 + +Fri Dec 28 17:52:32 UTC 2007 Chris Cleeland + + * ace/config-macosx-leopard.h: + + Tweaks to get ACE tests to run properly on OS X Intel. Major + change was properly setting ACE_SIZEOF_LONG_DOUBLE. + + * include/makeinclude/platform_macosx_leopard.GNU: + + Broke this into a separate file, even though all it does right + now is include the platform_macros for tiger. Eventually I hope + to refactor the OS X support so that it's structured more like + the G++ supporting files. + +Fri Dec 28 17:44:37 UTC 2007 Chris Cleeland + + * ace/Atomic_Op.cpp: + + Folded in changes originally from OCITAO 1.5a that prevent low + probability race conditions when using ACE_Atomic_Op<> inside + static instances in libraries that link with libACE. This + addresses [Bug 3185]. + +Fri Dec 28 15:34:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_sunos5_common.GNU: + Solaris 11 also has sendfile in its own library. Thanks to + Douglas Atique for + reporting this. + +Thu Dec 27 11:23:12 UTC 2007 Johnny Willemsen + + * ace/config-linux-common.h: + Enabled event_poll reactor for 2.6 kernels + + * ace/config-openvms.h: + Cleanup + + * ace/config-vxworks6.6.h: + Removed workaround + + * ace/Dev_Poll_Reactor.h: + Removed linux kernel check, moved to config-linux-common.h + +Mon Dec 24 10:17:12 UTC 2007 Johnny Willemsen + + * ace/config-sunos5.7.h: + Added ACE_HAS_DEV_POLL, it is introduced with Solaris 7 + +Mon Dec 24 09:32:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_sunos5_common.GNU: + New file, factored out common sunos5 + + * include/makeinclude/platform_sunos5_g++.GNU: + Use new common file + + * include/makeinclude/platform_sunos5_sunc++.GNU: + Use new common file and removed SunOS4 support + +Fri Dec 21 21:22:58 UTC 2007 Friedhelm Wolf + + * ace/README: added documentation for ACE_HAS_STDCPP_STL_INCLUDES + macro. + +Fri Dec 21 14:10:48 UTC 2007 Douglas C. Schmidt + + * ace/Task_T.inl: Added #include "ace/config-all.h" to the + ACE_NOTSUP_RETURN macro would be visible. Thanks to Steve + Huston for reporting this. + +Fri Dec 21 03:05:46 UTC 2007 Douglas C. Schmidt + + * ace/Task_T.h (class ACE_Task): Updated the documentation for + can_put() to make it clear that this method is deprecated and + will go away at some point. + +Fri Dec 21 03:03:56 UTC 2007 Douglas C. Schmidt + + * ace/Task_T.inl (can_put): Removed the assert() since ACE library + methods shouldn't call assert... Changed this to + ACE_NOTSUP_RETURN. Thanks to Gautam Thaker for reporting this. + +Thu Dec 20 20:01:07 UTC 2007 J.T. Conklin + + * ace/Codecs.h: + * ace/Codes.cpp: + + Fixed fuzz warnings. + +Tue Dec 18 17:56:30 UTC 2007 Douglas C. Schmidt + + * docs/ACE-development-process.html, + * docs/ACE-bug-process.html: Updated these documents to clarify + that submitters of code, bug fixes, etc. waive claims to + copyright or ownership of the submissions. Thanks to Tom + Callaway for help with this. + +Thu Dec 20 15:39:43 UTC 2007 J.T. Conklin + + * ace/Codecs.h: + * ace/Codecs.cpp: + + Add is_chunked argument to encode() which selects whether the + encoded output is "chunked" into newline terminated 72 column + chunks. Fixed bug where "chunked" output was not terminated by + a newline if the input buffer length was an exact multiple of 3. + Thanks to Alick Nie for reporting + inconsistant encoding behavior which lead to this change. + + * THANKS: + + Add Alick Nie . + +Thu Dec 20 14:00:12 UTC 2007 Johnny Willemsen + + * ace/Sched_Params.cpp: + Use VX_TASK_PRIORITY_MAX and VX_TASK_PRIORITY_MIN when they + are defined + +Thu Dec 20 13:46:12 UTC 2007 Johnny Willemsen + + * ace/OS_NS_Thread.h: + Layout change + + * ace/OS_NS_Thread.inl: + Fixed warning with VxWorks 6.6 which uses GCC 4.1.2 + +Thu Dec 20 13:46:12 UTC 2007 Johnny Willemsen + + * ace/OS_NS_dlfcn.inl: + Fixed warning with VxWorks 6.6 which uses GCC 4.1.2 + +Thu Dec 20 13:34:12 UTC 2007 Johnny Willemsen + + * ace/OS_NS_Thread.inl: + Fixed warning with VxWorks 6.6 which uses GCC 4.1.2 + +Thu Dec 20 13:04:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_aix_ibm.GNU: + Fixed typo in this file + +Thu Dec 20 10:30:00 UTC 2007 Simon Massey + + * bin/tao_orb_tests.lst: + + Exclude TAO/tests/CSD_Collocation from LynxOS builds. They + overload/tax the LynxOS kernal resulting in random process + table corruption and filing system errors. + +Wed Dec 19 14:04:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_aix_ibm.GNU: + * ace/config-aix-5.x.h: + Deprecated Visual Age 5 and older + +Tue Dec 18 14:40:11 UTC 2007 Adam Mitz + + * bin/tao_orb_tests.lst: + + Exclude TAO/tests/CSD_Collocation from minimum CORBA builds. + +Tue Dec 18 10:47:12 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug 3171 Regression + +Mon Dec 17 16:41:44 UTC 2007 Adam Mitz + + * bin/tao_orb_tests.lst: + + Added TAO/tests/CSD_Collocation. + +Mon Dec 17 12:35:00 UTC 2007 Simon Massey + + * bin/tao_other_tests.lst: + added TAO/orbsvcs/tests/InterfaceRepo/Bug_3174_Regression/run_test.pl + for bugzilla 3174. + +Mon Dec 17 10:00:12 UTC 2007 Martin Corino + + * ace/Pipe.cpp: + Implemented fix for delays on OpenVMS when using socketpair() for Pipe. + +Sun Dec 16 19:26:12 UTC 2007 Johnny Willemsen + + * ace/Refcounted_Auto_Ptr.h: + * ace/Refcounted_Auto_Ptr.inl: + Extended this template, thanks to Hu Yi + for extending this template + + * tests/Refcounted_Auto_Ptr_Test.cpp: + Extended + + * tests/TSS_Test.cpp: + Removed pthread draft 4 code and fixed compile warnings with VxWorks 6.6 + + * ace/Pipe.cpp: + Const changes + +Sun Dec 16 07:03:12 UTC 2007 Johnny Willemsen + + * ACEXML/common/AttributesImpl.h: + Doxygen improvements + +Sun Dec 16 06:49:12 UTC 2007 Johnny Willemsen + + * ace/config-sunos5.5.h: + Added ACE_HAS_SOCK_BUF_SIZE_MAX, thanks to Adam Mitz for pointing + out this is needed for Solaris + + * ace/OS_NS_Thread.cpp: + Const changes + + * ace/OS_NS_Thread.inl: + Simplified ifdef checks in multiple methods + + * ace/Select_Reactor_Base.cpp: + Layout change + + * ace/Select_Reactor_Base.inl: + Change for msvc9 + + * ace/Select_Reactor_T.cpp: + No need to check for 0 after ACE_NEW_RETURN + + * ace/Svc_Conf.y: + * ace/Svc_Conf_y.cpp: + Changed DEBUGGING to SVC_CONF_Y_DEBUGGING and also fixed + the compile problems that exist in the code guarded by + this define + +Sat Dec 15 15:02:12 UTC 2007 Johnny Willemsen + + * apps/gperf/gperf.mpc: + * bin/PerlACE/perlace.mpc: + Use custom_only=1 for these MPC files + +Sat Dec 15 14:57:12 UTC 2007 Johnny Willemsen + + * ace/Object_Manager.cpp: + Disable the critical error boxes when ACE_DISABLE_WIN32_ERROR_WINDOWS + is defined. This fixes bugzilla 3170. Thanks to Adrian Tulloch + for suggesting this + + * ace/Svc_Conf.h: + Fixed compile error when DEBUGGING is defined + + * ace/Token.cpp: + Renamed DEBUGGING to ACE_TOKEN_DEBUGGING, DEBUGGING is used on + more places like as a member in an enum. Also const, bool changes. + + * ace/TP_Reactor.cpp: + Layout and const changes + +Sat Dec 15 14:36:12 UTC 2007 Johnny Willemsen + + * docs/bzcar/bczar.html: + Updated location of this page and improved bczar instructions + +Fri Dec 14 13:21:12 UTC 2007 Johnny Willemsen + + * etc/index.html: + * docs/Download.html: + Updated for x.6.2 + +Fri Dec 14 02:48:57 CST 2007 Johnny Willemsen + + * ACE version 5.6.2 released. + +Thu Dec 13 16:19:54 UTC 2007 Johnny Willemsen + + * ace/os_include/sys/os_socket.h: + Set ACE_HAS_SOCK_BUF_SIZE_MAX_VALUE to SSIZE_MAX when it is not + set yet + + * ace/config-tandem-nsk-mips-v2.h: + * ace/config-tandem-nsk-mips-v3.h: + No need to set ACE_HAS_SOCK_BUF_SIZE_MAX_VALUE anymore + + * ace/Pipe.h: + Doxygen changes + +Wed Dec 12 13:15:54 UTC 2007 Johnny Willemsen + + * ace/OS_NS_sys_socket.inl: + When ACE_HAS_SOCK_BUF_SIZE_MAX is defined, don't use + SSIZE_MAX but ACE_HAS_SOCK_BUF_SIZE_MAX_VALUE as value + to check. That way we can limit the size of the packets + on OpenVMS. + + * ace/config-openvms.h: + Added ACE_HAS_SOCK_BUF_SIZE_MAX and set + ACE_HAS_SOCK_BUF_SIZE_MAX_VALUE to a value of 64k. This should + increase the test results on OpenVMS to a better level + + * ace/config-tandem-nsk-mips-v2.h: + * ace/config-tandem-nsk-mips-v3.h: + Set ACE_HAS_SOCK_BUF_SIZE_MAX_VALUE to SSIZE_MAX to match + the old behaviour. + + * ace/Reactor.h: + Layout change + + * ace/Select_Reactor_T.cpp: + Layout change, initialise pointer to 0 + + * ace/SSL/SSL_SOCK_Stream.inl: + Const changes + + * ace/TP_Reactor.cpp: + Layout change + +Fri Dec 7 18:33:54 UTC 2007 Johnny Willemsen + + * ace/OS_main.h: + Make sure we initialise the resolvLib with VxWorks RTP + +Fri Dec 7 06:27:54 UTC 2007 Johnny Willemsen + + * apps/gperf/gperf.mpc: + * bin/PerlACE/perlace.mpc: + With vc9 set ConfigurationType to 10 to disable the creation + of the manifest file which fails because these projects don't + have source code + +Thu Dec 6 15:22:54 UTC 2007 Johnny Willemsen + + * ace/SSL/SSL_SOCK_Stream.cpp: + Layout and const changes + +Wed Dec 5 14:46:54 UTC 2007 Johnny Willemsen + + * ace/INET_Addr.cpp: + Use this-> to comply with coding standards + + * ace/OS_NS_dlfcn.inl: + Initialise pointer with 0 + + * ace/OS_NS_netdb.cpp: + Use C++ const_cast instead of c-style cast + +Tue Dec 4 20:20:54 UTC 2007 Johnny Willemsen + + * ace/INET_Addr.cpp: + Removed some not needed ACE_UNUSED_ARG + + * OS_NS_netdb.inl (gethostbyaddr_r): + Fixed VxWorks implementation + +Tue Dec 4 19:28:54 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Run all csd tests on VxWorks + +Tue Dec 4 18:07:59 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + + Temporarily exclude $TAO_ROOT/orbsvcs/orbsvcs/ESF from the + ACE_SYNCH_MUTEX check to eliminate fuzz warnings. + +Tue Dec 4 16:30:19 UTC 2007 Steve Huston + + * tests/Reactor_Notify_Test.cpp: Don't try to call + run_quiet_notify_test in single-threaded build. + +Tue Dec 4 15:03:54 UTC 2007 Johnny Willemsen + + * ace/CDR_Base.h: + Changed ACE_IMPLEMENT_WITH_NATIVE_LONGDOUBLE to + ACE_CDR_IMPLEMENT_WITH_NATIVE_DOUBLE which has to be defined to + 1. This makes this file easier to maintain + + * ace/config-linux-common.h: + * aceconfig-vxworks5.x.h: + Added ACE_CDR_IMPLEMENT_WITH_NATIVE_DOUBLE defined as 1. This fixes + also the LongDouble issues with VxWorks 6.x + +Tue Dec 4 13:50:54 UTC 2007 Johnny Willemsen + + * netsvcs/lib/Name_Handler.cpp (parse_args): + Fixed unicode build + +Mon Dec 3 19:41:54 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added bug 3163 regression + +Mon Dec 3 19:00:57 UTC 2007 Douglas C. Schmidt + + * netsvcs/lib/Name_Handler.cpp (naming_context): Fixed typos. + +Mon Dec 3 14:57:36 UTC 2007 Douglas C. Schmidt + + * netsvcs/lib/Name_Handler.h: Moved the inline methods to the + Name_Handler.cpp file. Also, zapped the unnecessary virtual + method for naming_context(). Thanks to Johnny for catching + this. + +Mon Dec 3 14:21:20 UTC 2007 Douglas C. Schmidt + + * netsvcs/lib/Name_Handler.{h,cpp}: Check the return value from + this->parse_args (argc, argv) and allow use all range config + options for ACE_Name_Acceptor::init. Thanks to Vladislav Zverev + vladislav at gtss dot spb dot ru> for these patches. + +Mon Dec 3 10:06:54 UTC 2007 Johnny Willemsen + + * ace/OS_NS_Thread.inl: + Removed not needed check for pthread_cancel + +Mon Dec 3 10:02:54 UTC 2007 Johnny Willemsen + + * ace/config-aix-5.x.h: + * ace/config-cray.h: + * ace/config-cygwin32.h: + * ace/config-hpux-11.00.h: + * ace/config-integritySCA.h: + * ace/config-irix6.x-common.h: + * ace/config-linux.h: + * ace/config-macosx-leopard.h: + * ace/config-macosx-panther.h: + * ace/config-macosx-tiger.h: + * ace/config-macosx.h: + * ace/config-netbsd.h: + * ace/config-openvms.h: + * ace/config-posix.h: + * ace/config-qnx-neutrino.h: + * ace/config-qnx-rtp-62x.h: + * ace/config-qnx-rtp-pre62x.h: + * ace/config-rtems.h: + * ace/config-sunos5.5.h: + * ace/config-unixware-7.1.0.h: + * ace/config-unixware-7.1.0.udk.h: + * ace/config-vxworks5.x.h: + * ace/config-vxworks6.2.h: + * ace/config-vxworks6.3.h: + * ace/config-vxworks6.4.h: + * ace/config-win32-interix.h: + Removed ACE_HAS_PTHREADS_STD, we only support the official pthread + standard, not any draft + + * ace/config-cray.h: + Removed support for Unicos 9 and earlier. So far as I can find on the web + unicos 9 is from 1997 + + * ace/config-mvs.h: + Removed draft6, according to references on the web the std + pthread is supported now + + * ace/config-tandem-nsk-mips-v2.h: + * ace/config-tandem-nsk-mips-v3.h: + Newer NSK versions to support pthread std + + * ace/config-tru64.h: + Removed support for ancient tru64 versions + + * ace/os_include/os_limits.h: + Updated for VxWorks 6.6. + + * ace/os_include/os_pthread.h: + Removed support for the draft pthread mappings + + * ace/os_include/os_time.h: + Use ACE_HAS_PTHREADS + + * ace/os_include/sys/os_msg.h: + Removed not needed workaround for osf1 + + * ace/OS_NS_pwd.inl: + * ace/OS_NS_signal.inl: + Use ACE_HAS_PTHREADS + + * ace/OS_NS_string.cpp: + Initialise pointer with 0 + + * ace/OS_NS_Thread.cpp: + * ace/OS_NS_Thread.inl: + * ace/Thread_Manager.cpp: + Removed support for pthread draft 4, 6, & 7 + + * ace/Recursive_Thread_Mutex.cpp: + get_nesting_level is only not support with VxWorks tasks + + * ace/Select_Reactor_Base.cpp: + Layout change + + * ace/Token.h: + Only with VxWorks tasks use semaphores + + * ace/WIN32_Asynch_IO.cpp + +Sun Dec 2 17:47:13 UTC 2007 J.T. Conklin + + * configure.ac: + + Remove code which defined ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA + and ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION feature test macros. + There are vestigial bits of the tests which still remain -- the + entire platform template capability tests need to be rewritten. + + * m4/config_h.m4: + + Remove templates for ACE_HAS_TEMPLATE_INSTANTATION_PRAGMA and + ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION. + +Sun Dec 2 17:43:27 UTC 2007 J.T. Conklin + + * ace/README: + + Remove description of ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION. + This feature test macro was removed some time ago. + +Sun Dec 2 17:41:01 UTC 2007 J.T. Conklin + + * ace/OS_NS_stdlib.cpp: + + Change initial program name returned by the emulated version of + ACE_OS::getprogname() to be the empty string rather than a null + pointer. + +Sun Dec 2 06:47:54 UTC 2007 Johnny Willemsen + + * tests/gperf/tests/test.cpp: + Fixed conversion warning + +Sat Dec 1 17:06:32 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + Fixed the checks of ACE_SYNCH_MUTEX and ACE_Thread_Mutex to exclude + checking for those key words in ACE. We only want to detect the usage + of those words in TAO and CIAO. + +Fri Nov 30 23:59:41 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + + Added the following checks: + + check_for_ACE_SYNCH_MUTEX: + This test checks for the use of ACE_SYNCH_MUTEX in TAO/CIAO, + TAO_SYNCH_MUTEX should be used instead for consistency. + + check_for_ACE_Thread_Mutex: + This test checks for the use of ACE_Thread_Mutex in TAO/CIAO, + TAO_SYNCH_MUTEX should be used instead to make the code buid + in single-threaded builds. + + I will fix the resulting fuzz errors over the weekend. + +Fri Nov 30 22:11:32 UTC 2007 Steve Huston + + * ace/WFMO_Reactor.h: Clarify that only the owner thread can expire + timers and wait on the notifications handle. + +Fri Nov 30 21:53:15 UTC 2007 Steve Huston + + * tests/Reactor_Notify_Test.cpp: Added a test to verify that a quiet + (e.g., no I/O occurring) event loop will be awoken by a notify(). + +Fri Nov 30 16:58:00 UTC 2007 Steve Huston + + * ace/CDR_Stream.{h cpp}: + Added replace (ACE_CDR::Short, char *), analogous to the existing + replace (ACE_CDR::Long, char *); replaces a previous place in the + stream with a short. + To make the replace() methods more convenient and easier to use + correctly, added the following methods: + char* write_long_placeholder (void); + char* write_short_placeholder (void); + These methods align the stream's write pointer properly then write + a 0-valued placeholder in the stream. The pointer to the placeholder + is returned; that pointer can later be passed to replace(). + + * tests/CDR_Test.cpp: Added tests for placeholder and replace ops. + + Thank you to Howard Finer for contributing these additions. + + * NEWS: Added note about these additions. + +Fri Nov 30 11:50:00 UTC 2007 Simon Massey + + * bin/tao_other_tests.lst: + add TAO/orbsvcs/tests/InterfaceRepo/Bug_3155_Regression/run_test.pl + +Thu Nov 29 19:49:23 UTC 2007 Douglas C. Schmidt + + * tests/Process_Manager_Test.cpp: Changed ACE_MT_SYNCH to ACE_SYNCH so + this works on single-threaded builds. Thanks to Johnny for + reporting this. + +Thu Nov 29 18:10:27 UTC 2007 J.T. Conklin + + * ace/ARGV.h: + + #include "ace/Global_Macros.h". This is included implicitly on + platforms where ACE_TEMPLATES_REQUIRE_SOURCE, but is needed for + those that don't. + +Wed Nov 28 13:37:54 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.3.GNU: + Only use pic when building rtp + +Wed Nov 28 13:27:54 UTC 2007 Johnny Willemsen + + * ace/OS_NS_unistd.inl: + Updated for VxWorks 6.6 + +Wed Nov 28 13:24:54 UTC 2007 Johnny Willemsen + + * ace/Task.cpp: + Updated for VxWorks 6.6 + +Wed Nov 28 13:18:54 UTC 2007 Johnny Willemsen + + * ace/OS_NS_arpa_inet.cpp: + Updated for VxWorks 6.6 + +Wed Nov 28 13:08:54 UTC 2007 Johnny Willemsen + + * ace/os_include/sys/os_types.h: + Updated for VxWorks 6.6 + +Wed Nov 28 10:56:29 UTC 2007 Vladimir Zykov + + * bin/tao_orb_tests.lst: + Added Bug_3154_Regression. + +Wed Nov 28 07:30:54 UTC 2007 Johnny Willemsen + + * ace/Timer_Queue_Adapters.{h,cpp}: + Updated activate method because of new argument in the base + class + +Tue Nov 27 14:16:54 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_linux.GNU: + Added support for Fedora 8 + +Tue Nov 27 14:03:17 UTC 2007 Douglas C. Schmidt + + * tests/Process_Manager_Test.cpp: Added + + #include "ace/Synch_Traits.h" + + so the ACE_MT_SYNCH macro is visible. Thanks to Johnny for + reporting this. + +Tue Nov 27 13:14:54 UTC 2007 Johnny Willemsen + + * ace/OS_NS_Thread.cpp: + Added missing const_cast for VxWorks + +Tue Nov 27 13:10:54 UTC 2007 Johnny Willemsen + + * examples/Reactor/Multicast/server.cpp + Don't use the deprecated ACE_SOCK_Dgram_Mcast methods + +Tue Nov 27 10:01:54 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_linux.GNU: + Updated for FC7 + +Tue Nov 27 08:27:54 UTC 2007 Johnny Willemsen + + * ace/OS_NS_Thread.{h,cpp,inl}: + * ace/Task.{h,cpp}: + * ace/Thread.{h,cpp,inl}: + * ace/Thread_Manager.{h,cpp}: + Added a const char* argument to all methods that create a thread + so that we can pass in an optional thread name which is used at + this moment only on VxWorks. Added ACE_OS::thr_name() to retrieve + the name of the current thread. + + * ace/SOCK_Dgram_Mcast.{h,cpp}: + Removed deprecated subscribe/unsubscribe methods + +Tue Nov 27 06:33:54 UTC 2007 Johnny Willemsen + + * examples/Reactor/Multicast/Log_Wrapper.cpp: + Don't use the deprecated ACE_SOCK_Dgram_Mcast methods + +Mon Nov 26 20:41:03 UTC 2007 Douglas C. Schmidt + + * tests/Process_Manager_Test.cpp: Changed the use of + ACE_Thread_Mutex to ACE_SYNCH_MUTEX so that the test compilees + properly on single-threaded builds. Thanks to Johnny for + reporting this. + +Mon Nov 26 19:41:54 UTC 2007 Johnny Willemsen + + * examples/Reactor/Ntalker/ntalker.cpp: + Don't use the deprecated ACE_SOCK_Dgram_Mcast methods + +Mon Nov 26 15:10:54 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.6.GNU: + * ace/config-vxworks6.6.h: + New files for VxWorks 6.6 + +Mon Nov 26 12:27:54 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.2.GNU: + * include/makeinclude/platform_vxworks6.3.GNU: + Make sure we also use -mlongcall with c files + +Mon Nov 26 11:26:54 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_linux.GNU: + With FC6 and RedHat 5.0/5.1 we have to disable visibility. Use + lsb_release info to detect these versions. Simplifies the checks + we do and at the same moment we also support RedHat 5.1 on IA65 + +Mon Nov 26 11:04:54 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Enabed several tests for VxWorks + +Mon Nov 26 03:29:21 UTC 2007 Douglas C. Schmidt + + * ace/Process_Manager.cpp: Fixed a problem where spawning a + process with ACE_Process_Manager resulted in deadlock while + waiting for the end of another process. Thanks to Oliver Spang + for these fixes. + + * tests/Process_Manager_Test.cpp: Added a regression test for + Oliver's patches. Thanks again to oliver Spang for this code. + +Sun Nov 25 09:18:54 UTC 2007 Johnny Willemsen + + * ace/OS_NS_stdio.inl (vsprintf): + Updated for msvc9 + +Sun Nov 25 09:15:54 UTC 2007 Johnny Willemsen + + * ace/config-win32-msvc9.h: + Disabled warning 4250 with this compiler + +Sat Nov 24 00:23:34 UTC 2007 Steve Huston + + * ace/Reactor.h: Clarified the workings of the optional hook function + that can be passed to event loop methods. Thanks to Andre Kostur + for this idea. + +Fri Nov 23 19:38:54 UTC 2007 Johnny Willemsen + + * bin/MakeProjectCreator/config/vc8_warnings.mpb: + * bin/MakeProjectCreator/config/vc_warnings.mpb: + Renamed vc8 to vc because this file is now also used for vc9 + + * bin/MakeProjectCreator/config/acedefaults.mpb: + Updated base project because of rename above + + * bin/MakeProjectCreator/config/vc9.features: + New file + + * bin/MakeProjectCreator/config/vc9nmake.mpb: + New file + + * contrib/minizip/minizip.mpc: + Updated for vc9 + + * examples/Service_Configurator/Misc/Timer_Service.cpp: + Layout change + + * examples/Connection/non_blocking/CPP-connector.cpp: + Just not name an argument instead of using ACE_UNUSED_ARG + + * examples/APG/Reactor/HAStatus-AC.cpp: + Initialise some pointers with 0 + + * bin/make_release.py: + Added generation for vc9 + + * ASNMP/asnmp/wpdu.cpp: + Layout change + + * ACE-install.sh: + Removed, ancient + +Fri Nov 23 19:38:54 UTC 2007 Johnny Willemsen + + * ace/SOCK_Dgram_Mcast.cpp: + Use join instead of subscribe + +Fri Nov 23 06:50:01 UTC 2007 Olli Savia + + * tests/run_test.lst: + Do not run Signal_Test on LynxOS. + +Thu Nov 22 13:47:54 UTC 2007 Johnny Willemsen + + * ace/ace_for_tao.mpc: + * ace/QoS/qos.mpc: + * bin/MakeProjectCreator/config/ace_fl.mpb: + * bin/MakeProjectCreator/config/ace_gl.mpb: + * bin/MakeProjectCreator/config/ace_qt.mpb: + * bin/MakeProjectCreator/config/ace_x11.mpb: + * bin/MakeProjectCreator/config/acedefaults.mpb: + * bin/MakeProjectCreator/config/ipv6.mpb: + Added support for vc9 + +Thu Nov 22 12:44:54 UTC 2007 Johnny Willemsen + + * ace/Vector_T.inl: + Fixed compile error + + * bin/msvc_mpc_auto_compile.pl: + * bin/msvc_static_compile.pl: + Added vc9 as option + +Wed Nov 21 21:43:54 UTC 2007 Douglas C. Schmidt + + * ace/Vector_T.inl (advance): + * ace/Vector_T.cpp: Fixed the push_back() and pop_back() methods + so they work properly after resizing. Thanks to Karl-Heinz Wind + for these fixes. This fixes bugid 3152. + +Wed Nov 21 21:36:27 UTC 2007 Douglas C. Schmidt + + * tests/Vector_Test.cpp (run_main): Updated the test so that it + checks for the buggy push_back() and pop_back(). Thanks to + Karl-Heinz Wind for providing these + enhancements. + +Wed Nov 21 19:37:29 UTC 2007 Douglas C. Schmidt + + * examples/Reactor/Ntalker/ntalker.cpp (ACE_TMAIN): + + Use ACE_SOCK_Dgram_Mcast::leave() instead of deprecated + ...::unsubscribe() to leave the multicast group. Thanks to + Stefan Naewe for + reporting this. + +Wed Nov 21 16:14:21 UTC 2007 Johnny Willemsen + + * ace/OS_NS_sys_utsname.cpp (name): + Extended VxWorks implementation + +Wed Nov 21 16:06:21 UTC 2007 Johnny Willemsen + + * bin/PerlACE/ProcessVX_Unix.pm: + * bin/PerlACE/ProcessVX_Win32.pm: + Added support for iBoot + +Sun Nov 18 06:25:21 UTC 2007 Johnny Willemsen + + * configure.ac: + Fixed ACE_HAS_POSIX_SEM_TIMEOUT check, thanks to Thomas Girard + for reporting this. + This fixes bugzilla 3153 + +Fri Nov 16 04:12:20 UTC 2007 Douglas C. Schmidt + + * examples/Service_Configurator/Misc/main.cpp (ACE_TMAIN): Added a + space between "-f" and "svc.conf". This fixes a bug. Thanks + to Kun Niu for this fix. + +Fri Nov 16 09:37:21 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_linux_common.GNU: + * ace/config-linux-common.h: + * m4/platform.m4: + Changed ACE_HAS_LINUX_NPTL to ACE_LACKS_LINUX_NPTL. All recent + linux distributions do have NPTL, only older versions lack this + support. By changing HAS to LACKS it makes it easier to use ACE + with their own makefile scheme. This fixes bugzilla 3084 + +Thu Nov 15 19:44:21 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_linux_common.GNU: + Retrieve distribution and release number using lsb_release + + * include/makeinclude/platform_g++_common.GNU: + Moved RedHat/FC checks to platform_linux.GNU, this only needs + to be done when using GCC on Linux, not when using GCC on + other platforms + + * include/makeinclude/platform_linux.GNU: + With Ubuntu 7.04 and 7.10 we can't use visibilit, we get + unresolved externals when using it. We are now using + lsb_release to detect the distribution + +Thu Nov 15 08:41:21 UTC 2007 Johnny Willemsen + + * ace/os_include/os_limits.h: + PIPE_BUF is also defined to -1 with VxWorks 6.5 + +Thu Nov 15 05:40:21 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.5.x.GNU: + * include/makeinclude/platform_vxworks6.2.GNU: + * include/makeinclude/platform_vxworks6.3.GN: + Add -mlongcall also to CFLAGS + +Wed Nov 14 19:12:21 UTC 2007 Johnny Willemsen + + * bin/MakeProjectCreator/templates/gnu.mpd: + When link_groups is defined to 1 we group the LDLIBS within + -Wl,--start-group and -Wl,--end-group. This way the user can + manually enable this through the platform_macros.GNU file and + doesn't need to regenerate all makefiles. Also removed the + check for the compiler name, with VxWorks we also can use this + and there we have different compilers (ccppc, ccpentium, etc) + + * include/makeinclude/wrapper_macros.GNU: + also can use this + and there we have different compilers (ccppc, ccpentium, etc) + + * include/makeinclude/wrapper_macros.GNU: + Set link_groups to 0 by default, the user has to explicitly enable + it + + * bin/MakeProjectCreator/docs/templates/gnu.txt: + Removed link_groups, that is now enabled through platform_macros.GNU, + not through MPC + +Wed Nov 14 16:16:49 UTC 2007 Ciju John + + * ace/Service_Config.cpp: + Check the reactor instance before using it. + +Wed Nov 14 14:34:26 UTC 2007 J.T. Conklin + + * m4/config_h.m4: + * m4/platform.m4: + + Remove autoheader template and platform support for the pSOS + platform. Support was removed from ACE some time ago. + +Wed Nov 14 11:00:21 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_linux_icc.GNU: + Added support for Intel C++ 10.1 + +Wed Nov 14 07:47:28 UTC 2007 J.T. Conklin + + * m4/config_h.m4: + + Removed PTHREAD_STACK_MAX autoheader template as this feature + test macro is not used. + +Wed Nov 14 07:46:43 UTC 2007 J.T. Conklin + + * m4/config_h.m4: + * m4/platform.m4: + + Remove autoheader template and platform support for the DG/UX + platforms. Support was removed from ACE some time ago. + +Wed Nov 14 07:23:07 UTC 2007 J.T. Conklin + + * m4/platform.m4: + + Update autoheader templates for ACE_INT64_FORMAT_SPECIFIER and + ACE_UINT64_FORMAT_SPECIFIER to clarify that they're the printf + format specifiers for the ACE_INT64 and ACE_UINT64 types. + + This can be an important distinction for platforms with + compilers that validate literal format strings (where passing + "long long" for "%ld", or "long" for "%lld" will result in an + warning/error even when both are 64 bit integers). + +Wed Nov 14 07:18:21 UTC 2007 J.T. Conklin + + * m4/platform.m4: + + Remove platform support for the "fsu" platform. Support was + removed from ACE some time ago. + +Wed Nov 14 07:12:03 UTC 2007 J.T. Conklin + + * m4/config_h.m4: + * m4/platform.m4: + + Remove autoheader templates and platform support for the "m88k" + platform. Support was removed from ACE some time ago. + +Tue Nov 13 14:34:17 UTC 2007 J.T. Conklin + + * configure.ac: + * m4/config_h.m4: + + Replace autoheader templates for ACE_HAS_ALPHA_TIMER, + ACE_HAS_POWERPC_TIMER, and ACE_HAS_PENTIUM in config_h.m4 with + a third argument to AC_DEFINE in configure.ac + +Tue Nov 13 07:45:25 UTC 2007 J.T. Conklin + + * configure.ac: + + Add ACE_HAS_INTEL_ASSEMBLY feature test. + +Tue Nov 13 06:48:16 UTC 2007 J.T. Conklin + + * ace/OS_NS_time.inl: + + Changed the inline assembly implementation of gethrtime() for + the amd64/x86_64 architecture to recognize that the timestamp is + read into the %eax and %edx registers, and thus must be combined + into a 64 bit value. Thanks to Nathan Ernst for reporting this bug. + + * THANKS: + + Add Nathan Ernst . + +Tue Nov 13 06:01:33 UTC 2007 J.T. Conklin + + * ace/OS_NS_stdio.inl: + + Change of Thu Nov 8 04:02:21 UTC 2007 was missing ACE_WIN32 + in conditional. Thanks to Johnny Willemsen for pointing out + resulting scoreboard failures. + +Mon Nov 12 20:05:21 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Enabled Smart_Proxies/Policy with VxWorks + +Mon Nov 12 14:16:21 UTC 2007 Johnny Willemsen + + * ace/Log_Msg.{h,cpp,inl}: + Use bool for several flags + +Mon Nov 12 14:12:21 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Disable Bug_2953_Regression for the moment on VxWorks, it hangs out + target + +Mon Nov 12 13:04:11 UTC 2007 J.T. Conklin + + * ace/CDR_Base.inl: + + Take advantage of bswap16, bswap32, and bswap64 macros when + ACE_HAS_BSWAPXX is defined as we do for bswap_16, bswap_32, + and bswap_64 when ACE_HAS_BSWAP_XX is defined. + + * configure.ac: + + Changed checks for bswap_16, bswap_32, and bswap_64 to use + ACE_CHECK_HAS_DEFINES. Thanks to Thomas Girard for reporting the ACE_HAS_BSWAP_XX + feature test macros were not being defined because bswap_16, + bswap_32, and bswap_64 are implemented as macros. This fixes + bugzilla 3134. + + Added check for bswap16, bswap32, and bswap64. These are the + *BSD, Darwin, etc. equivalents of the bswap_XX macros. + + * m4/ace_defines.m4: + + New file, new autoconf macros ACE_CHECK_DEFINE, + ACE_CHECK_HAS_DEFINES, and ACE_CHECK_LACKS_DEFINES. These are + used like ACE_CHECK_HAS_FUNCS and ACE_CHECK_LACKS_FUNCS, where + the tested feature is implemented as a macro and not a function. + +Mon Nov 12 10:25:00 UTC 2007 Simon Massey + + * bin/PerlACE/ConfigList.pm: + + Bugzilla 3085: Fix for "and" test for test suite control. + +Mon Nov 12 10:01:53 UTC 2007 Olli Savia + + * tests/Max_Default_Port_Test.cpp: + Changed this test to work on LynxOS. + +Mon Nov 12 06:36:21 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Disable bug 2494 regression for vxworks, it hangs our target. + When this test has been analyzed in detail we will enable + it again + +Mon Nov 12 06:31:21 UTC 2007 Johnny Willemsen + + * ace/config-linux-common.h: + The ACE_HAS_RUSAGE_WHO_ENUM and ACE_HAS_RLIMIT_RESOURCE_ENUM + are not needed anymore with glibc 2.3 and newer + Thanks to Thomas Girard + for reporting this. This fixes bugzilla 3143 + +Sun Nov 11 18:59:21 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Disable bug 1020 regression for vxworks, it hangs our target. + When this test has been analyzed in detail we will enable + it again + +Sun Nov 11 18:41:21 UTC 2007 Johnny Willemsen + + * configure.ac: + Added check for wcsnlen. + Thanks to Thomas Girard + for reporting this. This fixes bugzilla 3146 + +Sun Nov 11 18:31:21 UTC 2007 Johnny Willemsen + + * bin/PerlACE/ProcessVX_Unix.pm: + * bin/PerlACE/ProcessVX_Win32.pm: + Replaces ACE_RUN_TAO_DEBUG_LEVEL with TAO_RUN_TAO_ORB_DEBUG + +Fri Nov 9 23:45:48 UTC 2007 J.T. Conklin + + * ace/Makefile.am: + + Remove DEFAULT_INCLUDES= added on Wed Nov 7 04:33:02 UTC 2007. + Automake's nostdinc option performs the same function, but in + a documented, supported, manner. + + * configure.ac: + + Use nostdinc option to AM_INIT_AUTOMAKE. This instructs + automake not to add -I options for the current directory. + +Fri Nov 9 02:16:24 UTC 2007 Douglas C. Schmidt + + * ace/Asynch_IO.h: Disallow copying and assignment for + ACE_Handler. Thanks to Juraj Ivancic for this suggestion. + +Fri Nov 9 11:46:21 UTC 2007 Johnny Willemsen + + * ace/config-tandem-nsk-mips-v3.h: + * ace/os_include/sys/os_types.h: + * ace/Task.cpp: + * ace/Truncate.h: + Improved NSK support, thanks to Gary Maxey + for delivering the patches. This fixes bugzilla 3124 + +Fri Nov 9 11:25:21 UTC 2007 Johnny Willemsen + + * ace/OS_NS_Thread.h: + Doxygen improvements + +Fri Nov 9 11:06:21 UTC 2007 Johnny Willemsen + + * ace/config-linux-common.h: + Newer glibc versions don't need ACE_HAS_NONCONST_SETRLIMIT anymore. + Thanks to Thomas Girard + for reporting this. This fixes bugzilla 3136 + +Fri Nov 9 09:46:21 UTC 2007 Johnny Willemsen + + * ace/config-vxworks6.2.h: + * ace/config-vxworks6.3.h: + * ace/config-vxworks6.4.h: + Some PPC's don't have log2 in kernel mode + +Fri Nov 9 09:37:21 UTC 2007 Johnny Willemsen + + * ace/OS_NS_Thread.{h,cpp,inl}: + * ace/Thread_Manager.cpp: + Changed ACE_hthread_t to an int for VxWorks. This makes the core of + ACE cleaner and more stable on VxWorks. At this moment you can't give + a Task a name, but we will extend the thread creation functions + with an additional char* in a next iteration. That way you can use + task names also when using pthread on vxworks. See also bugzilla 3131 + + * tests/Conn_Test.cpp: + * tests/Thread_Manager_Test.cpp: + Disable task name setting, will be enabled again when the spawn + methods are extended + +Fri Nov 9 08:58:21 UTC 2007 Johnny Willemsen + + * ace/CDR_Base.inl: + Fixed incorrect define. This fixes bugzilla 3139. Thanks to + Thomas Girard + + * ace/Dynamic_Service_Base.{h,cpp}: + Reduced number of methods by using default argument values + + * ace/Object_Manager.{h,cpp}: + * ace/Service_Config.cpp: + The Service Configurator depends on the availability of TSS. When + TSS emulation is enabled, that emulation needs to be initialized + within the Object Manager. The Object Manager also depends on the SG, + so added a new init_tss() method that just initializes TSS + which is then called from the SG constructor. This fixes + problems with TAO VxWorks 6.x kernel mode. Thanks to Iliyan for + giving insights how SG/SC should work. + + * ace/OS_NS_Thread.h: + Changed key_create_ to bool and check the return value of taskSpawn + + * ace/Reactor.h: + * ace/Service_Config.inl: + Doxygen change + + * ace/Service_Config.cpp: + Updated some debug statements + + * bin/PerlACE/ProcessVX_Unix.pm: + * bin/PerlACE/ProcessVX_Win32.pm: + Added ACE_RUN_ACE_DEBUG and ACE_RUN_TAO_DEBUG_LEVEL, if set then + ACE_DEBUG/TAO_DEBUG_LEVEL are set as environment variabled on the + target + +Thu Nov 8 04:02:21 UTC 2007 J.T. Conklin + + * ace/OS_NS_stdio.inl: + + Changed wide character version of ACE_OS::vsnprintf()'s to match + ACE_OS::snprintf() as like prior to Sun Oct 28 21:11:57 UTC 2007. + This fixes a error reporting in buffer overflow conditions. + + At that time all the ACE_OS::*printf() functions were changed to + call ACE_OS::v*printf(). The intent was to reduce the chance of + bugs being introduced because of largly parallel implementations. + What I didn't expect was that such a bug was already present. + +Thu Nov 8 02:09:02 UTC 2007 Phil Mesnier + + * ace/Codeset_Registry_db.cpp: + Added an entry for UTF-8. + +Wed Nov 7 18:53:15 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug_2133 regression + +Wed Nov 7 04:33:02 UTC 2007 J.T. Conklin + + * ace/Makefile.am: + + Add DEFAULT_INCLUDES definition that got lost during regeneration. + Fixes autoconf builds on case-insensitive filesystems. + + * m4/platform.m4: + + Add ACE_HAS_NONCONST_FD_ISSET feature test. + + Thanks to Doug McCorkle for providing + this patch. + +Tue Nov 6 11:30:00 UTC 2007 Simon Massey + + * ace/OS_NS_Thread.cpp: + + Re-instated the change of Thu Nov 1 14:40:00 UTC 2007. + Valgrind tests prove this is not causing the memory leaks + just exposing some existing ones. The whole area of TSS use + with singletons/statics needs to be investigated. + (See Bugzilla 3128 for details.) + +Tue Nov 6 10:59:15 UTC 2007 Johnny Willemsen + + * bin/PerlACE/ProcessVX_Win32.pm: + Fixed dirname setting + +Mon Nov 5 20:00:15 UTC 2007 Johnny Willemsen + + * apps/Gateway/Gateway/Concrete_Connection_Handlers.cpp: + * apps/Gateway/Peer/Peer.cpp: + Fixed GCC 4.2.1 warnings + +Mon Nov 5 14:06:54 UTC 2007 J.T. Conklin + + * bin/PerlACE/Run_Test.pm: + + Change wait_interval_for_process_creation from 10/12 to 15 + seconds on non-VxWorks systems. + + My change of Thu Nov 1 04:36:27 UTC 2007 improved results of the + NetBSD scoreboard, but was still not enough time to ensure tests + started. I've increased the wait for all OS's instead of NetBSD + only, since this is likely to be a problem on all OS's that need + to calibrate the high res timer. This extra delay shouldn't + slow the testsuite execution on faster systems, as the existence + of the sentinal file is polled by PerlACE::waitforfile_timed() + which returns as soon as the file exists. + +Mon Nov 5 11:40:00 UTC 2007 Simon Massey + + * ace/OS_NS_Thread.cpp: + + Reverted the change of Thu Nov 1 14:40:00 UTC 2007 at the + request of Buildczar to test for memory leaks within this + area of the build. If this shows improved memory usage then + TAO is missusing keyfree and this needs to be investigated. + keyfree should NOT be responciable for the tidy-up of TSS + and it should NOT be calling destructors for the registered + keys it is being used to deactivate. (See the documentaion + for pthread_key_delete() and thr_keydelete() which our keyfree + call wraps.) + +Sat Nov 3 06:24:15 UTC 2007 Johnny Willemsen + + * ace/OS_NS_Thread.cpp: + Fixed a bug introduced by my VxWorks changes, thanks to JT + for finding this + +Fri Nov 2 22:31:36 UTC 2007 William R. Otte + + * ace/os_include/os_stdio.h: + * ace/config-macosx-leopard.h: + + Preliminary compatibility for Mac OS X 10.5 + +Fri Nov 2 07:48:15 UTC 2007 Johnny Willemsen + + * ace/Service_Config.{h,cpp}: + Removed the patch for bugzilla 2980, this results in a memory + leak of 10Kb for each thread that uses the ACE_Service_Config_Guard. + This memory leak is documented in bugzilla 3108. For bugzilla 2980 + we need to have a different patch without reintroducing the + memory leak. + + * ace/Timer_Heap_T.h: + Doxygen changes + +Thu Nov 1 19:59:15 UTC 2007 Johnny Willemsen + + Reverted the change below, it seems to cause problems with msvc 71. + + Thu Nov 1 11:11:15 UTC 2007 Johnny Willemsen + * ace/Service_Config.h: + +Thu Nov 1 16:57:11 UTC 2007 Steve Huston + + * contrib/FaCE/FaCE.mpc: + * contrib/FaCE/FaCENOACE.mpc: Added aygshell to lit_libs to fix link + errors. + +Thu Nov 1 14:40:00 UTC 2007 Simon Massey + + * ace/OS_NS_Thread.cpp: + + Systems with ACE_HAS_BROKEN_THREAD_KEYFREE requires some + cleanup within ACE_OS::thr_keyfree_native() otherwise they + can crash at thread_exit if ACE is dynamically loaded. + +Thu Nov 1 11:59:15 UTC 2007 Johnny Willemsen + + * ace/Select_Reactor_T.h: + * ace/Timer_Queue_T.h: + * ace/Timer_Wheel_T.h: + Doxygen changes + + * ace/Timer_Queue_T.cpp: + Layout change + +Thu Nov 1 11:11:15 UTC 2007 Johnny Willemsen + + * ace/Service_Config.h: + Removed the patch for bugzilla 2980, this results in a memory + leak of 10Kb for each thread that uses the ACE_Service_Config_Guard. + This memory leak is documented in bugzilla 3108. For bugzilla 2980 + we need to have a different patch without reintroducing the + memory leak. + + * ace/Service_Config.cpp: + * ace/Service_Config.h: + * ace/Service_Config.inl: + * ace/Service_Gestalt.cpp: + * ace/Service_Gestalt.h: + Bool changes + +Thu Nov 1 10:23:15 UTC 2007 Johnny Willemsen + + * tests/Malloc_Test.cpp: + Initialise some pointers with 0 to fix gcc 4.2 warnings. Thanks + to Robert Iakobashvili for reporting + this + +Thu Nov 1 09:27:15 UTC 2007 Johnny Willemsen + + * tests/Process.h: + * tests/Reactor_Impl.h: + * tests/Select_Reactor_T.h: + * tests/SOCK.h: + * tests/SOCK_Acceptor.h: + * tests/SOCK_SEQPACK_Acceptor.h: + * tests/TkReactor/TkReactor.h: + * tests/Token.h: + * tests/WFMO_Reactor.h: + * tests/WIN32_Asynch_IO.h: + * tests/WIN32_Proactor.h: + * tests/XtReactor/XtReactor.h: + Doxygen improvements + + * tests/TSS_T.cpp: + * tests/TSS_T.h: + Initialise pointers with 0 and changed once_ to a bool + +Thu Nov 1 04:36:27 UTC 2007 J.T. Conklin + + * bin/PerlACE/Run_Test.pm: + + Change wait_interval_for_process_creation from 10 to 12 seconds + on NetBSD systems. Many TAO unit tests take at least 5 seconds + to initialize on NetBSD/i386 systems as they calibrate the high + resolution timer. Often this doesn't leave enough time to + complete initialization within the timeout. + + Since there was a special case for LynxOS, I just extended it + for NetBSD. + +Wed Oct 31 13:54:15 UTC 2007 Johnny Willemsen + + * bin/PerlACE/ProcessVX_Win32.pm: + Updated to work with the new test setup for VxWorks. Thanks to + Martin Corino for updating this file + +Wed Oct 31 13:38:39 UTC 2007 J.T. Conklin + + * ace/OS_NS_unistd.cpp: + + Add ACE_UNUSED_ARG for ACE_HAS_THREADS case. + +Wed Oct 31 12:17:15 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.2.GNU: + * include/makeinclude/platform_vxworks6.3.GNU: + Improved VxWorks 6.x support + +Tue Oct 30 14:51:21 UTC 2007 J.T. Conklin + + * ace/OS_NS_unistd.cpp: + + Changed ACE_OS::fork() to not call ACE_Base_Thread_Adapter:: + sync_log_msg() if ACE_HAS_THREADS. sync_log_msg() will call + async signal unsafe functions, which results in undefined + behavior. + +Tue Oct 30 14:29:31 UTC 2007 Abdullah Sowayan + + * bin/msvc_static_order.lst: + + Project names in CIAO have been changed recently due to the effort + to break executor->servant dependency. generate_component_mpc.pl + script now also generates project names that are different than + the names that existed in the repository. As such, we needed to + modify this file accordingly. This should fix compile time + problems for WinXP_VC71_CIAOCore_Static_Debug build. + +Tue Oct 30 10:56:15 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_vxworks5.5.x.GNU: + * include/makeinclude/platform_vxworks6.2.GNU: + * include/makeinclude/platform_vxworks6.3.GNU: + Support static_libs_only=1 correctly + +Mon Oct 29 16:35:09 UTC 2007 J.T. Conklin + + * ace/OS_NS_stdio.cpp: + * ace/os_include/os_stdarg.h: + + Move workaround for the lack of va_copy() macro from + OS_NS_stdio.cpp to os_include/os_stdarg.h. + + Thanks to Johnny Willemsen for suggesting this improvement. + +Mon Oct 29 16:10:07 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + + Updated check_for_lack_ACE_OS to incorporate new wrapper facade functions + introduced in: + Sun Oct 28 21:11:57 UTC 2007 J.T. Conklin + +Mon Oct 29 15:01:28 UTC 2007 J.T. Conklin + + * ace/OS_NS_stdio.cpp: + * ace/Process.cpp: + + Fixed fuzz warnings. + +Mon Oct 29 14:44:15 UTC 2007 Johnny Willemsen + + * ace/config-openbsd.h: + Improved OpenBSD support. Thanks to Vladimir Panov + for reporting this. + + * ace/Dev_Poll_Reactor.h: + * ace/FlReactor/FlReactor.h: + * ace/FoxReactor/FoxReactor.h: + * ace/POSIX_Asynch_IO.h: + * ace/Proactor.h: + * ace/QtReactor/QtReactor.h: + * ace/Reactor.h: + * ace/Signal.h: + Doxygen improvements + + * ace/Service_Config.{h,cpp}: + Changed be_a_deamon to bool + + * ace/Service_Repository.cpp: + Initialise pointer with 0 + +Mon Oct 29 14:17:15 UTC 2007 Johnny Willemsen + + * ace/ARGV.h: + Made several constructor explicit + + * ace/OS_NS_Thread.cpp: + * ace/OS_NS_Thread.h: + * ace/OS_NS_Thread.inl: + * ace/Thread_Manager.cpp: + * ace/Thread_Manager.h: + Switched ACE_thread_t and ACE_hthread_t definitions for VxWorks + with task support. ACE_thread_t is now an int, ACE_hthread_t is + a char*. This improves speed and solves possible raise conditions + with the TP_Reactor, see bugzilla 2441. The new code can be + refactored a little bit more, but that will be a seperate iteration. + + * tests/Bound_Ptr_Test.cpp: + Initialize some pointers with 0 and replaced some ACE_ASSERT with if + checks + + * tests/Conn_Test.cpp: + * tests/Thread_Manager_Test.cpp: + Updates for ACE_thread_t/ACE_hthread_t change + + * tests/Dirent_Test.cpp: + Fixed default path which caused runtime failure on VxWorks + + * tests/Sigset_Ops_Test.cpp: + Use bool + + * tests/SOCK_Dgram_Bcast_Test.cpp: + * tests/SOCK_Dgram_Test.cpp: + * tests/Thread_Creation_Threshold_Test.cpp: + Extended error information + + * tests/Thread_Pool_Reactor_Test.cpp: + Removed chorus check + +Mon Oct 29 12:42:34 UTC 2007 J.T. Conklin + + * ace/OS_NS_stdio.cpp: + + Add workarounds for systems without va_copy() macro. Use + __va_copy() on systems that have it, otherwise memcpy(). + + Use 0 instead of NULL for portability. + + Thanks to Johnny Willemsen for pointing out these errors. + +Mon Oct 29 12:26:15 UTC 2007 Johnny Willemsen + + * tests/run_test.lst: + Don't run Signal_Test and Bug_2659_Regression_Test on VxWorks + 6.4 and 6.5. These kernels have a bug which causes these tests + to fail. According to WindRiver support the issue will be + resolved with VxWorks 6.6 + +Mon Oct 29 07:30:15 UTC 2007 Johnny Willemsen + + * ace/OS_NS_stdio.inl: + Fixed ambiguity error with BCB6 + +Sun Oct 28 21:11:57 UTC 2007 J.T. Conklin + + * configure.ac: + + Add ACE_HAS_GETPROGNAME, ACE_HAS_SETPROGNAME, ACE_HAS_VASPRINTF, + and ACE_HAS_VASWPRINTF feature tests. + + * ace/config-freebsd.h: + * ace/config-netbsd.h: + + Add ACE_HAS_GETPROGNAME, ACE_HAS_SETPROGNAME, and + ACE_HAS_VASPRINTF feature test macros. + + * ace/OS_NS_stdio.cpp: + * ace/OS_NS_stdio.h: + * ace/OS_NS_stdio.inl: + + Add new ACE_OS::asprintf(), ACE_OS::aswprintf(), + ACE_OS::vasprintf(), and ACE_OS::vaswprintf() wrapper facades. + These functions dynamically allocate the buffer used for their + output with malloc(). Add ACE_OS::vasprintf_emulation() and + ACE_OS::vaswprintf_emulation() functions for systems without + native ::vasprintf() and ::vaswprintf() implementations. + + Add missing wide character version of ACE_OS::printf() wrapper + facade. + + Add missing wide and narrow character versions of ACE_OS::vprintf() + wrapper facades. + + Add missing wide and narrow character versions of ACE_OS::vfprintf() + wrapper facades. + + Implement ACE_OS::*printf() in terms of its cooresponding + ACE_OS::v*printf() function to ensure consistant behavior. + + * ace/OS_NS_stdlib.cpp: + * ace/OS_NS_stdlib.h: + * ace/OS_NS_stdlib.inl: + + Add ACE_OS::getprogname() and ACE_OS::setprogname() wrapper + facades. These functions are used to get and set the program + name for error handling, logging, etc. On systems with native + implementations, the program name is automatically set by the + C/C++ startup code. On others, ACE_OS::setprogname() must be + used. + + Add ACE_OS::getprogname_emulation() and + ACE_OS::setprogname_emulation() for systems without native + ::getprogname() and ::setprogname() implementations. One + limitation of the emulated version is the program name is + not available from static constructors. + + * ace/Process.cpp: + + If ACE_HAS_THREADS, don't invoke ACE_ERROR() in the child + process between the fork() and exec(). ACE_ERROR() undoubtedly + calls async signal unsafe functions, which results in undefined + behavior in threaded programs. + +Fri Oct 26 11:17:15 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_vxworks6.3.GNU: + Applied patch of Thomas Lockhart + for shared library + building on VxWorks 6.3. This fixes bugzilla 3113 + +Fri Oct 26 05:18:13 UTC 2007 J.T. Conklin + + * ace/config-netbsd.h: + + Remove ACE_HAS_CPLUSPLUS_HEADERS, ACE_HAS_NEW_NOTHROW, + ACE_HAS_STDCPP_STL_INCLUDES, ACE_LACKS_PRAGMA_ONCE, + ACE_NEW_THROWS_EXCEPTIONS, and ACE_HAS_PENTIUM, as these + definitions are inherited from config-g++-common.h, and + result in redefinition warnings. + +Thu Oct 25 21:00:46 UTC 2007 Abdullah Sowayan + + * bin/msvc_static_order.lst: + + Project names in CIAO have been changed recently due to the effort + to break executor->servant dependency. generate_component_mpc.pl + script now also generates project names that are different than + the names that existed in the repository. As such, we needed to + modify this file accordingly. This should fix compile time + problems for WinXP_VC71_CIAOCore_Static_Debug build. + +Thu Oct 25 15:21:02 UTC 2007 Adam Mitz + + * include/makeinclude/platform_sunos5_sunc++.GNU: + + Fixed version detection for SunCC 5.5 (Studio 8), the change from + Wed Sep 26 08:37:15 UTC 2007 Johnny Willemsen + had an off-by-one bug. + +Thu Oct 25 14:47:15 UTC 2007 Johnny Willemsen + + * tests/Bug_2659_Regression_Test.cpp: + Do a wait on the reactor thread for 5 seconds, it should + end within that time, if not, we return -1. On VxWorks this + test doesn't succeed and hangs, with this change it just + returns -1 speeding up the test run + +Thu Oct 25 13:07:11 UTC 2007 Phil Mesnier + + * bin/tao_orb_tests.lst: + Added DII_AMI_Forward test + +Thu Oct 25 12:24:15 UTC 2007 Johnny Willemsen + + * ace/config-vxworks6.2.h: + * ace/config-vxworks6.3.h: + * ace/config-vxworks6.4.h: + Added ACE_HAS_SIGACTION_CONSTP2 + +Thu Oct 25 10:26:15 UTC 2007 Johnny Willemsen + + * tests/Bug_2659_Regression_Test.cpp: + Some layout changes and added a debug message so that we can see + a little bit more what is happening on VxWorks + +Thu Oct 25 09:51:15 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug_3108_Regression + +Thu Oct 25 09:27:15 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added Bug_3080 + + * bin/copy-script.sh: + Added copy-script which is used during the release process + +Thu Oct 25 08:36:15 UTC 2007 Johnny Willemsen + + * tests/Thread_Creation_Threshold_Test.cpp: + Limit the number of threads for VxWorks. Spawning 50 threads takes + more then a second on VxWorks, the tests wants to spawn 100000 which + would take about 30 minutes on VxWorks :-( + +Thu Oct 25 08:26:15 UTC 2007 Johnny Willemsen + + * ace/config-netbsd.h: + Include config-g++-common.h to get the needed defines for the + GCC compiler. This fixes bugzilla 3094. Thanks to Venkat Sidhabathuni + for reporting this. + + * ace/INET_Addr.cpp: + Const changes and set some sin_len fields for VxWorks + + * ace/OS_NS_netdb.inl (gethostbyname_r): + Fixed invalid check in VxWorks specific part + + * ace/OS_NS_stdlib.cpp: + Const change + + * ace/OS_NS_sys_socket.inl: + After bind of sin_addr.s_addr != INADDR_ANY VxWorks clears the sin_port + field. This leads to a failure of the SOCK_Dgram_Test but could also + affect other parts of ACE/TAO. After the bind, we use getsockname() + to retrieve the sockaddr struct again. This mimics the behaviour of + other network stacks. This fixes bugzilla 3107 + + * ace/OS_NS_sys_stat.inl (fstat): + Cleanup done to this method. Thanks to Rick Ohnemus + for reporting this. This + fixes bugzilla 3109 + + * ace/Process.cpp: + Use this-> when calling a method + + * ace/SOCK_Dgram.cpp: + Use bool + +Wed Oct 24 11:41:15 UTC 2007 Johnny Willemsen + + * ace/SOCK_Dgram_Test.cpp: + Improved this test to handle the problem on VxWorks. The change below + has been reverted, it seems we have somewhere a problem in ACE + +Tue Oct 23 19:15:15 UTC 2007 Johnny Willemsen + + * ace/SOCK_Dgram_Test.cpp: + On VxWorks binding the socket seems to clear the port number. For the + moment just reset the port number, that will fix this test failure. We + are in contact with WindRiver to sort out the real problem in the + network stack. + +Tue Oct 23 14:40:15 UTC 2007 Johnny Willemsen + + * tests/Signal_Test.cpp: + Use ACE_ERROR_RETURN instead of ACE_ASSERT which causes a VxWorks + target to hang + +Tue Oct 23 14:10:15 UTC 2007 Johnny Willemsen + + * tests/run_test.lst: + Sendfile_Test will not work on VxWorks kernel mode, we don't have + sendfile but we also lack mmap for the emulation + +Tue Oct 23 13:57:30 UTC 2007 Steve Huston + + * tests/run_test.pl: Changed handling of tests in subdirectories to + chdir to the subdirectory to run the test; allows tests to pick up + files they need (like keys and ciphers). This places the test's + log under its subdirectory (e.g. SSL/log) as well. + +Tue Oct 23 13:51:15 UTC 2007 Johnny Willemsen + + * ace/OS_NS_Thread.{h,cpp,inl}: + Use ACE_HAS_VXTHREADS, use bool, doxygen improvements and + improved ACE_OS::thr_equal to guard against an unitialized + ACE_thread_t which is a 0 pointer on VxWorks. This fixes then + the crash of the Reader_Writer_Test in our daily regression + suite + + * tests/Reader_Writer_Test.cpp: + Use prefix increment/decrement, also use a long for the counts, + these are implemented in assembly on most architectures + +Tue Oct 23 13:17:15 UTC 2007 Johnny Willemsen + + * ace/config-vxworks6.2.h: + * ace/config-vxworks6.3.h: + * ace/config-vxworks6.4.h: + VxWorks 6.x doesn't have perfect multicast filtering + + * ace/FILE_Addr.h: + * ace/FILE_IO.h: + Doxygen fixes + + * ace/Lib_Find.cpp: + Use prefix increment + +Tue Oct 23 10:41:15 UTC 2007 Johnny Willemsen + + * ace/Asynch_Connector.h: + Fixed some missing bool usage + + * ace/Asynch_Acceptor.{h,cpp}: + Use bool and remove validate_new_connection which was deprecated in + ACE 5.4 + + * ace/Log_Msg.{cpp,inl}: + The Log_Msg stores the process id a static pid so that we only have to + obtain it once. It was initialized with -1, but when the OS doesn't have + process support (like VxWorks), then -1 is returned by ACE_OS::getpid() + which reduces in a performance reduction. Changed the default value to -2 + so that on a platform like VxWorks we also just obtain once. + + * ace/Thread_Manager.{h,cpp,inl}: + Doxygen changes, const changes, use bool when possible. Also use + ACE_HAS_VXTHREADS instead of ACE_HAS_VXWORKS to check if we are using + VxWorks with task support + +Mon Oct 22 19:03:15 UTC 2007 Johnny Willemsen + + * ace/OS_TLI.h: + Removed workaround for unixware 2.0 + + * ace/Proactor.{h,cpp}: + Use bool for delete_implementation flag + + * ace/Select_Reactor_Base.cpp: + Const improvement + + * ace/config-WinCE.h: + * ace/OS_NS_time.h: + Added ACE_LACKS_STRUCT_TM which is set in the config file and used in + OS_NS_time.h + + * ace/FoxReactor/FoxReactor.cpp: + Layout and const changes + + * ace/OS_QoS.h: + Doxygen changes + + * ace/Process_Semaphore.cpp: + Use ACE_UNUSED_ARG + +Mon Oct 22 18:57:15 UTC 2007 Johnny Willemsen + + * ace/POSIX_Asynch_IO.h: + * ace/RW_Process_Mutex.h: + * ace/SOCK_Acceptor.h: + * ace/SOCK_Dgram.h: + * ace/SOCK_IO.h: + * ace/SOCK_SEQPACK_Acceptor.h: + * ace/SOCK_SEQPACK_Association.h: + * ace/SPIPE_Connector.h: + * ace/Task.h: + * ace/Thread.h: + * ace/Thread_Hook.h: + * ace/TLI_Connector.h: + * ace/UPIPE_Connector.h: + * ace/UPIPE_Stream.h: + * ace/XTI_ATM_Mcast.h: + Doxygen changes + +Mon Oct 22 18:53:15 UTC 2007 Johnny Willemsen + + * ace/Asynch_Connector.{h,cpp}: + Use bool instead of int for all the flags + + * ace/Asynch_IO_Impl.h: + * ace/Asynch_Pseudo_Task.h: + * ace/ATM_Connector.h: + * ace/Configuration.h: + * ace/ATM_Params.h: + * ace/Connection_Recycling_Strategy.h: + * ace/Connector.h: + * ace/Countdown_Time.h: + * ace/DEV_Connector.h: + * ace/FILE_Connector.h: + * ace/File_Lock.h: + * ace/Free_List.h: + * ace/Logging_Strategy.h: + * ace/MEM_IO.h: + * ace/Mem_Map.h: + * ace/MEM_SAP.h: + * ace/MEM_Stream.h: + * ace/Module.h: + Doxygen changes + + * ace/config-unixware-2.01-g++.h: + * ace/config-unixware-2.1.2-g++.h: + Deleted, we don't support unixware already for a long time + + * ace/config-vxworks5.x.h: + * ace/config-vxworks6.2.h: + * ace/config-vxworks6.3.h: + * ace/config-vxworks6.4.h: + Added ACE_HAS_VXTHREADS as new define which is used when + we use the VxWorks specific threading model instead of pthread + + * ace/config-vxworks6.4.h: + Improved VxWorks 6.4 support + +Mon Oct 22 12:25:15 UTC 2007 Johnny Willemsen + + * tests/Bug_3102_Regression_Test.cpp: + * tests/run_test.lst: + * tests/tests.mpc: + New test for bugzilla 3102 + +Sun Oct 21 03:43:13 UTC 2007 Phil Mesnier + + * THANKS: added Venkat Sidhabathuni + +Fri Oct 19 21:56:11 UTC 2007 Steve Huston + + * tests/Config_Test.cpp: Don't attempt the persistent heap-based + test if the platform doesn't have memory-mapped file capability. + + * tests/run_test.lst: Don't try UnloadLibACE on LabVIEW RT - the + platform has special needs to run tests that are taken care of by + trickery in MPC and the ACE_TMAIN setup. UnloadLibACE is a + specialized test that doesn't use the usuall facilities so doesn't + play well in the LabVIEW RT test environment. + +Fri Oct 19 21:34:01 UTC 2007 Steve Huston + + * examples/APG/Reactor/HAStatus-AC.cpp: Set accepted connections into + nonblocking mode so the checks for EWOULDBLOCK when sending data + are meaningful. Thanks to Johnny Willemsen for noticing this. + +Fri Oct 19 16:00:00 UTC 2007 Simon Massey + + * bin/tao_other_tests.lst: + * bin/tao_orb_tests.lst: + + Update for Lynxos 4.2. + +Fri Oct 19 10:28:02 UTC 2007 Douglas C. Schmidt + + * ace/Priority_Reactor.{h,cpp}: Revised the build_bucket() method + to fix some bugs when trying to remove non-existent event + handlers. Thanks to Alex Solan for reporting this. + +Thu Oct 18 22:04:28 UTC 2007 Abdullah Sowayan + + * bin/msvc_static_order.lst: + + Added a few projects to the static order, this is necessary due + to the update of CIAO tutorial I committed today. This will + avoid a build problem for WinXP_VC71_CIAOCore_Static_Debug build. + +Thu Oct 18 10:08:15 UTC 2007 Johnny Willemsen + + * ace/Thread_Exit.{h,cpp}: + Changed is_constructed_ flag to a real bool + + * ace/IPC_SAP.cpp: + Updated some defines in comments + + * ace/config-openbsd.h: + * ace/config-linux-common.h: + Removed some commented out defines + + * ace/Select_Reactor_Base.h: + Layout changes + +Wed Oct 17 16:03:19 UTC 2007 Abdullah Sowayan + + * bin/msvc_static_order.lst: + + Added a few projects to the static order list to resolve + problems on WinXP_VC71_CIAOCore_Static_Debug build. + +Wed Oct 17 14:00:00 UTC 2007 Simon Massey + + * tests/Signal_Test.cpp: + * tests/run_tests.lst: + * tests/run_tests.pl: + + Have to reduce the number of iterations of the test for LynxOS + otherwise it grossly timesout during automatic testing. + + Add correct parameter processing for tasks being run with parameters. + +Wed Oct 17 12:00:00 UTC 2007 Simon Massey + + * tests/Log_Msg_Test.cpp: + * tests/run_tests.lst: + + Update for Lynxos 4.2. + +Tue Oct 16 16:22:26 UTC 2007 Steve Huston + + * ace/OS_NS_string.cpp (strerror): Fix to pass correct error value to + strerror_s in the ACE_HAS_TR24731_2005_CRT case (VC8+ at least). + Thank you to Pavel Zaichenko for this fix. + +Mon Oct 15 14:05:00 UTC 2007 Simon Massey + + * ace/ACE.cpp: + * ace/config-lynxos.h: + * ace/os_include/sys/os_resource.h: + + Add #define ACE_LACKS_RLIMIT_NOFILE processing for Lynxos. + +Fri Oct 12 21:28:34 UTC 2007 Steve Huston + + * ace/CDR_Stream.h: Fix the replace() method's comments to be included + in Doxygen output; expanded the description and included an example + for how to use replace(). + +Fri Oct 12 20:08:02 UTC 2007 Steve Huston + + * include/makeinclude/rules.common.GNU: Mark __prebuild__ .PHONY so + users with hand-made Makefiles, or those generated with older MPC + versions, will work correctly without the MPC-inserted __prebuild__ + target. + +Fri Oct 12 09:18:06 UTC 2007 Ossama Othman + + * tests/Reactor_Timer_Test.cpp: + + Renamed global "count" variable to "the_count" to disambiguate + it from the VxWorks STL "count" function. Thanks to Johnny for + suggesting where the problem actually lied. + +Thu Oct 11 12:22:57 UTC 2007 Jeff Parsons + + * THANKS: + + Added Gr�gor Boirie + +Wed Oct 10 11:33:40 UTC 2007 Steve Huston + + * tests/Sendfile_Test.cpp: Fix compile error on AIX. + +Tue Oct 9 23:33:27 UTC 2007 Steve Huston + + * bin/ace_tests.lst: Disable WFMO tests and HTBP tests on LabVIEW_RT. + LabVIEW_RT lacks Winsock 2 stuff needed for the WMFO tests, and the + HTBP test scripts aren't converted to work on LabVIEW RT. + + * tests/MT_Reactor_Upcall_Test.cpp: + * tests/Reactor_Dispatch_Order_Test.cpp: + * tests/Reactor_Registration_Test.cpp: Test ACE_WFMO_Reactor if + ACE_HAS_WINSOCK2 != 0, not if == 0. + + * tests/Sendfile_Test.cpp: Remove ACE_ASSERTs; correct some logging. + + * tests/run_test.lst: Disable Env_Value_Test, Dirent_Test, and + Multicast_Test on LabVIEW RT. LabVIEW_RT doesn't have env variables, + the Dirent_Test expects too much of the build machine's directory + structure to be available, and LabVIEW_RT lacks Winsock 2 and mcast. + +Mon Oct 8 17:59:15 UTC 2007 Ossama Othman + + * ace/Atomic_Op_T.h: + + Untabified, and nuked trailing whitespace. + + * tests/Reactor_Timer_Test.cpp: + + Include "ace/Log_Msg.h" to pull in ACE logging macros. + +Sun Oct 7 18:52:15 UTC 2007 Johnny Willemsen + + * ace/Asynch_IO_Impl.h + * ace/CDR_Stream.h + * ace/FILE.h + * ace/FILE_IO.h + * ace/MEM_IO.h + * ace/Pipe.h + * ace/POSIX_Asynch_IO.h + * ace/Shared_Memory_Pool.h + * ace/SOCK_SEQPACK_Association.h + * ace/Svc_Handler.h + * ace/Synch_Options.h + * ace/Task.h + * ace/Thread.h + * ace/Thread_Manager.h + * ace/WIN32_Asynch_IO.h + Doxygen improvements + +Sat Oct 6 17:55:09 UTC 2007 Ossama Othman + + * examples/Reactor/TP_Reactor/ReadHandler.cpp: + * examples/Reactor/TP_Reactor/AcceptHandler.cpp: + * examples/Reactor/WFMO_Reactor/Prerun_State_Changes.cpp: + * examples/Reactor/WFMO_Reactor/APC.cpp: + * examples/Reactor/WFMO_Reactor/Registration.cpp: + * examples/Reactor/WFMO_Reactor/Console_Input.cpp: + * examples/Reactor/WFMO_Reactor/Directory_Changes.cpp: + + Include "ace/Log_Msg.h" to pull in ACE logging macros. + +Fri Oct 5 18:45:48 UTC 2007 Ossama Othman + + * ace/Atomic_Op_T.inl (ACE_Atomic_Op_Ex, operator=): + + Implement the assignment operator in terms of the copy + constructor, not the other way around. This (1) allows one less + lock to be held during copy construction, (2) allows for finer + grained locking during copy assignment, and (3) allows the + copy assignment operator to be implemented in a strongly + exception safe manner. + + (operator==, operator>=, operator>, operator<=, operator<): + (value): + + Removed casts that removed const-ness of the mutex_ member. + They aren't necessary in this case. + + * ace/Atomic_Op_T.cpp: + + Only include "ace/Log_Msg.h" if ACE_HAS_DUMP is defined. It + isn't needed otherwise. + + From Russell Mora + * ace/Atomic_Op_T.h: + * ace/Atomic_Op_T.inl: + * ace/Atomic_Op_T.cpp: + + Parameterized argument types using type traits. Avoids warnings + about references being taken of temporaries for built-in types. + +Fri Oct 5 12:20:00 UTC 2007 Simon Massey + + * ace/config-lynxos.h: + + Updated for 4.0 -> 4.2. + +Wed Oct 3 19:31:15 UTC 2007 Johnny Willemsen + + * ace/Acceptor.cpp + * ace/Acceptor.h + * ace/ATM_Connector.h + * ace/Cached_Connect_Strategy_T.h + * ace/Caching_Strategies_T.h + * ace/Caching_Strategies_T.inl + * ace/Connector.cpp + * ace/Connector.h + * ace/Countdown_Time.h + * ace/DEV_Connector.h + * ace/Dev_Poll_Reactor.cpp + * ace/Dev_Poll_Reactor.h + * ace/Dirent.h + * ace/Event_Handler.h + * ace/FILE_Connector.h + * ace/Future.h + * ace/Future_Set.cpp + * ace/Future_Set.h + * ace/Handle_Set.h + * ace/Hash_Map_Manager_T.h + * ace/Local_Name_Space.cpp + * ace/Local_Name_Space.h + * ace/Lock_Adapter_T.cpp + * ace/Lock_Adapter_T.h + * ace/Lock_Adapter_T.inl + * ace/Message_Queue_T.h + * ace/NT_Service.h + * ace/OS_NS_sys_socket.h + * ace/Proactor.cpp + * ace/Proactor.h + * ace/RB_Tree.h + * ace/Service_Repository.cpp + * ace/Service_Repository.h + * ace/SOCK_Acceptor.h + * ace/SOCK_Dgram.h + * ace/SOCK_Dgram_Mcast.h + * ace/SOCK_SEQPACK_Acceptor.h + * ace/SPIPE_Connector.h + * ace/Strategies_T.cpp + * ace/Strategies_T.h + * ace/Svc_Handler.h + * ace/Task_Ex_T.cpp + * ace/Task_Ex_T.h + * ace/Task_Ex_T.inl + * ace/Task_T.cpp + * ace/Task_T.h + * ace/Task_T.inl + * ace/Thread_Control.h + * ace/Thread_Manager.cpp + * ace/Thread_Manager.h + * ace/Thread_Mutex.h + * ace/Timeprobe_T.h + * ace/Timer_Hash_T.h + * ace/Timer_Queue_T.h + * ace/TLI_Connector.h + * ace/WFMO_Reactor.cpp + * ace/WFMO_Reactor.h + * ace/WFMO_Reactor.inl + * ace/XTI_ATM_Mcast.h + Doxygen improvements, small cleanups and bool changes + +Tue Oct 2 17:06:15 UTC 2007 Johnny Willemsen + + * ace/Asynch_IO_Impl.h + * ace/config-macosx-tiger.h + * ace/Dev_Poll_Reactor.h + * ace/Message_Queue.h + * ace/Message_Queue.inl + * ace/Message_Queue_T.cpp + * ace/Message_Queue_T.h + * ace/Message_Queue_Vx.cpp + * ace/Message_Queue_Vx.h + * ace/Msg_WFMO_Reactor.h + * ace/Notification_Strategy.h + * ace/NT_Service.h + * ace/Object_Manager.h + * ace/Object_Manager_Base.h + * ace/POSIX_Asynch_IO.h + * ace/POSIX_CB_Proactor.h + * ace/POSIX_Proactor.h + * ace/Proactor.h + * ace/Process.cpp + * ace/Process.h + * ace/Process.inl + * ace/Process_Manager.cpp + * ace/Process_Manager.h + * ace/Process_Semaphore.cpp + * ace/Process_Semaphore.h + * ace/Reactor.h + * ace/Reactor_Impl.h + * ace/SOCK_Connector.h + * ace/WFMO_Reactor.h + Doxygen improvements, small cleanups and bool changes + +Mon Oct 1 15:06:15 UTC 2007 Johnny Willemsen + + * bin/make_release.py: + Added generation of vc8 static solution files + + * ace/Argv_Type_Converter.cpp + * ace/Argv_Type_Converter.h + * ace/Argv_Type_Converter.inl + * ace/ATM_Params.h + * ace/CDR_Stream.cpp + * ace/DEV_IO.h + * ace/INET_Addr.h + * ace/LSOCK_Connector.h + * ace/Message_Block.h + * ace/Multihomed_INET_Addr.h + * ace/Reactor_Notification_Strategy.h + * ace/SOCK_Dgram_Mcast.h + * ace/Timer_Queue_Adapters.cpp + * ace/Timer_Queue_Adapters.h + * ace/TP_Reactor.h + * ace/WIN32_Proactor.cpp + * ace/WIN32_Proactor.h + Doxygen, const, and bool improvements + + * ace/Multiplexor.cpp + * ace/Multiplexor.h + * ace/Multiplexor.inl + Removed, not implemented for years now + +Mon Oct 1 13:39:29 UTC 2007 Olli Savia + + * ace/OS_NS_Thread.h: + Final fix (and code cleanup) for bug #3074. + +Fri Sep 28 06:12:15 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_linux_common.GNU: + Added nptl=0|1 to disable/enable nptl support through the + platform_macros.GNU file + +Thu Sep 27 16:29:19 UTC 2007 Steve Huston + + * bin/PerlACE/ProcessLVRT.pm: Try to clean some files off the target + on a few more failure cases. + +Thu Sep 27 13:06:29 UTC 2007 Vladimir Zykov + + * ace/Timer_Hash_T.cpp: + Fix for a warning on Win2003_VC71_Inline_MFC build. + +Wed Sep 26 17:56:02 GMT 2007 Rich Seibel + + * bin/add_rel_links.sh: + * include/makeinclude/rules.local.GNU: + * include/makeinclude/wrapper_macros.GNU: + Make the symlinks in ACE_wrappers/lib be relative rather + than absolute. + +Wed Sep 26 16:51:47 UTC 2007 Vladimir Zykov + + * ace/Timer_Hash_T.h: + * ace/Timer_Hash_T.cpp: + * tests/Timer_Queue_Reference_Counting_Test.cpp: + Another attempt to fix the memory leak in ACE_Timer_Hash_T. + Now the solution is very similar to what was done in + ACE_Timer_Queue_T for memory management of ACE_Timer_Node_T. + So, it's not worse than what is already in the code base. + Now also it's important to cancel all valid timers before the + timer queue is destroyed otherwise a memory leak will occur. + In short it means if you called schedule at the beginning then + don't forget to call cancel at the end. + +Wed Sep 26 09:34:29 UTC 2007 Vladimir Zykov + + * ace/Timer_Hash_T.h: + * ace/Timer_Hash_T.cpp: + Back out a fix for one of the leaks fixed before. The solution + was not perfect. + +Wed Sep 26 08:37:15 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_sunos5_sunc++.GNU: + Corrected incorrect Sun Studio version check + +Wed Sep 26 08:16:15 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_sunos5_sunc++.GNU: + Changes for Sun Studio 12 + +Tue Sep 25 15:55:21 UTC 2007 Vladimir Zykov + + * ace/Timer_Hash_T.h: + * ace/Timer_Hash_T.cpp: + * tests/Timer_Queue_Reference_Counting_Test.cpp: + An attempt to fix the memory leaks in tests/Timer_Queue_Test.cpp + and tests/Timer_Queue_Reference_Counting_Test.cpp. + +Tue Sep 25 15:22:15 UTC 2007 Chad Elliott + + * ace/OS_NS_ctype.h: + * ace/OS_NS_ctype.inl: + + Implement a slightly dumb version of ace_towlower when towlower is + not available from the system libraries. Previously, ace_towlower + would not be available if ACE_LACKS_TOWLOWER was defined. + + * ace/OS_NS_string.cpp: + + Replaced the ACE_OS::strtok_r_emulation() implementation, when + ACE_HAS_WCHAR and ACE_LACKS_WCSTOK are defined, with a public + domain implementation (converted to work with wide characters and + c++). It did not compile as previously implemented. + +Mon Sep 24 18:58:01 UTC 2007 Abdullah Sowayan + + * ace/ATM_Acceptor.inl: + * ace/IOStream_T.inl: + * ace/OS_NS_dlfcn.inl: + * ace/OS_NS_netdb.inl: + * ace/OS_NS_sys_mman.inl: + * ace/OS_NS_sys_stat.inl: + + Fixed ACE_OS fuzz warnings. Use ACE_OS calls instead of raw OS functions + where possible. If fuzz detected a false-positive, then disable + the ACE_OS fuzz check for that section of the code. + +Mon Sep 24 18:44:08 UTC 2007 Ossama Othman + + * ace/OS_NS_unistd.inl (swab): + + Added missing copyright notice for swab() implementation in + "ACE_LACKS_SWAB" block of code. That implementation falls under + the BSD license. + +Mon Sep 24 15:51:14 UTC 2007 Steve Huston + + * bin/PerlACE/ProcessLVRT.pm: Clarify that the Net-Telnet Perl module + is required to use this module. + +Mon Sep 24 07:47:15 UTC 2007 Johnny Willemsen + + * ace/README: + * ace/TSS_T.h: + Removed ACE_HAS_BROKEN_CONVERSIONS usage + +Sat Sep 22 13:39:35 UTC 2007 Steve Huston + + * ace/config-hpux-11.00.h: Removed ACE_HAS_BROKEN_CONVERSIONS; thanks + to Johnny for noticing this isn't needed anymore. Also cleaned up + some comments that still referred to HP C++ rather than aC++. + +Fri Sep 21 19:00:43 UTC 2007 Dale Wilson + + * ace/OS_NS_Thread.h: + Olli reports that the change to OS_NS_Thread.h causes + a test failure on LynxOS. (Bug #3074) + Since the change isn't critical -- the config-win32-common.h + change was the real fix to the problem -- I'm reverting this file. + +Fri Sep 21 18:59:15 UTC 2007 Johnny Willemsen + + * ace/config-hpux-11.00.h: + Removed defining of __HP_aCC when it is not defined yet + +Fri Sep 21 16:34:47 UTC 2007 Abdullah Sowayan + + * ace/Hash_Cache_Map_Manager_T.cpp: + * ace/Log_Msg.cpp: + * ace/OS_NS_Thread.inl: + * ace/OS_NS_stdio.inl: + * ace/OS_NS_sys_mman.inl: + * ace/OS_NS_sys_socket.inl: + * ace/OS_NS_unistd.inl: + + Fixed ACE_OS fuzz warnings. Use ACE_OS calls instead of raw OS functions + where possible. If fuzz detected a false-positive, then disable + the ACE_OS fuzz check for that section of the code. + +Fri Sep 21 17:19:52 UTC 2007 Ossama Othman + + * ace/INET_Addr.cpp (get_host_name_i): + + Removed const qualifiers. The variables in question do get + reassigned. + +Fri Sep 21 09:32:15 UTC 2007 Johnny Willemsen + + * tests/Reactor_Exceptions_Test.cpp: + Updated this test to not derive from ACE_Reactor, that is not + possible anymore. Fixes the failing of this test on our + build systems + +Fri Sep 21 09:30:15 UTC 2007 Johnny Willemsen + + * ace/Truncate.h: + Added another specialization for BCB + +Fri Sep 21 09:05:15 UTC 2007 Johnny Willemsen + + * ace/Truncate.h: + Added needed specialization for BCB + + * ace/Reactor.{h,cpp}: + Changed delete_reactor and delete_implementation flags to bool + +Fri Sep 21 05:46:15 UTC 2007 Johnny Willemsen + + * tests/Makefile.am: + * tests/run_test.lst: + * tests/tests.mpc: + Updated for UUIDTest rename + +Thu Sep 20 23:58:15 UTC 2007 Ossama Othman + + * ace/ACE.cpp: + + Simplified message block chunk length truncation code by taking + advantage of ACE_Utils::truncate_cast<>. + + * ace/Guard_T.inl (ACE_Guard): + + Removed unnecessary use of ACE_UNUSED_ARG macro. Comment out + the parameter name instead. + + * ace/Service_Config.cpp: + + Minor const-correctness and loop increment improvements. + + * ace/Service_Gestalt.cpp: + + Replaced ACE_NEW_NORETURN() followed explicit by zero pointer + check with ACE_NEW_RETURN(). + + * ace/Service_Types.cpp: + + Removed some leading whitespace. + + * ace/Time_Value.h (msec): + * ace/Time_Value.inl (msec): + + Enabled 64-bit version of this accessor method on all + platforms. + + * ace/Timer_Hash_T.cpp (reschedule, schedule_i): + * ace/Timer_Hash_T.h: + + Use a straight static_cast<> instead of + ACE_Utils::truncate_cast<> when computing the hash value. The + former will provide more unique results when the number of + seconds is greater than std::numeric_limits::max(). + + (reset_interval): + + Don't bother grabbing the lock until a class member is actually + accessed. + + (is_empty): + + Return a bool instead of an int. The former better reflects how + the return value should be interpreted. + + * ace/Timer_Heap_T.cpp (ACE_HEAP_PARENT, ACE_HEAP_LCHILD): + + Converted these macros to inline functions. Nice and clean. + + (ACE_Timer_Heap_T, grow_heap): + Replaced calls to std::numeric_limits<>::max() with + ACE_Numeric_Limits<>::max() to allow removal of "ifndef + ACE_LACKS_NUMERIC_LIMITS" block of code. + + (cancel): + + Moved zero initialized local variable out of lock scope. + + * ace/Timer_Heap_T.h (isdone, is_empty): + * ace/Timer_List_T.cpp: + * ace/Timer_List_T.h: + * ace/Timer_Queue_T.h: + * ace/Timer_Wheel_T.cpp: + * ace/Timer_Wheel_T.h: + + Return a bool instead of an int. The former better reflects how + the return value should be interpreted. + + * tests/Config_Test.cpp: + + Addressed type conversion warnings. + + From Russell Mora + * ace/INET_Addr.cpp (get_hostname_i, set_address): + * ace/README: + * ace/config-hpux-11.00.h: + * ace/config-sunos5.8.h: + * ace/config-tru64.h: + * ace/config-win32.h: + + Some platforms don't convert IPv6-mapped-IPv4 addrs to IPv4 + addrs when passed to gethostbyaddr(), even though it is in the + stardard. This code will do it for them. + + When mapping IPv4 addresses to IPv6-mapped-IPv4 addresses don't + just convert INADDR_LOOPBACK to in6addr_loopback - this won't + work (i.e. IPv4 clients will not be able to connect to it). + + The ip4 variable will be in network-byte-order (either because + we converted it or it was passed in already in + network-byte-order) so make sure we convert it back to + host-byte-order before doing any comparisons. + + * ace/OS_NS_Thread.cpp (thread_exit): + + Zero out TSS values in ACE_OS::cleanup_tss(). This avoids + getting back dangling pointers if ACE TSS is used again after + the cleanup call. + +Thu Sep 20 21:22:30 UTC 2007 Jeff Parsons + + * ace/UUID.cpp: + + Fixed typos. + +Fri Sep 14 00:36:43 UTC 2007 Douglas C. Schmidt + + * ace/UUID.cpp: Changed the case of the clock_sequence from u_char + to ACE_UINT16 to avoid duplicate UUIDs. Thanks to wim dot van + dot den dot boogaard at varianinc dot com for reporting this. + +Thu Sep 13 17:57:31 UTC 2007 Douglas C. Schmidt + + * ace/Mutex.h: Updated the document for ACE_Mutex to indicate that + ACE_Process_Mutex or ACE_Thread_Mutex is preferred. Thanks to + Nathan Glasser + +Tue Sep 11 15:24:43 UTC 2007 Douglas C. Schmidt + + * docs/ACE-bug-process.html: Clarified bug fixing policies. Thanks to + Torsten Saliwada for motivating this. + +Mon Sep 3 18:54:54 UTC 2007 Douglas C. Schmidt + + * NEWS: Updated the NEWS file to reflect the recent changes to the UUID class. + +Mon Sep 3 14:54:55 UTC 2007 Douglas C. Schmidt + + * protocols/ace/HTBP/HTBP_ID_Requestor.cpp (get_HTID): + * tests/UUID_Test.cpp (test): Updated to use the new "ACE-ified" + UUDI interface. + +Mon Sep 3 12:53:49 UTC 2007 Douglas C. Schmidt + + * ace/UUID.{h,inl,cpp}: Converted this code to use ACE programming + conventions for naming. + +Mon Sep 3 12:37:44 UTC 2007 Douglas C. Schmidt + + * ace/UUID.{h,inl,cpp}: + Implemented an accessor to obtain the timestamp and + clockSequence in an atomic manner. The clockSequence could + change between the moment the timestamp is obtained and the + moment the clockSequence is used in a multithreaded environment + and that results in duplicate UUIDs. Thanks to Wim van den + Boogaard + for contributing this. + +Thu Sep 20 18:49:27 UTC 2007 Abdullah Sowayan + + * include/makeinclude/platform_g++_common.GNU: + Enhance rules to detect FC6 explicitly. The prior rules didn't + work under my FC6 distrubtion. + +Thu Sep 20 17:12:15 UTC 2007 Johnny Willemsen + + * apps/JAWS2/JAWS/IO_Handler.cpp: + Added needed include for closesocket + +Thu Sep 20 12:56:15 UTC 2007 Johnny Willemsen + + * ace/Reactor.{cpp,inl}: + Made all non virtual single line methods inline methods to gain + performance and reduce footprint + + * ace/Dev_Poll_Reactor.h: + * ace/File_Lock.h: + * ace/FlReactor/FlReactor.h: + * ace/FoxReactor/FoxReactor.h: + * ace/OS_NS_unistd.h: + * ace/Proactor.h: + * ace/QtReactor/QtReactor.h: + * ace/Reactor.h: + * ace/Reactor_Impl.h: + * ace/Select_Reactor_T.h: + * ace/TkReactor/TkReactor.h: + * ace/WFMO_Reactor.h: + * ace/XtReactor/XtReactor.h: + Fixed doxygen warnings + +Thu Sep 20 08:58:15 UTC 2007 Johnny Willemsen + + * ace/Dynamic_Message_Strategy.{h,cpp,inl}: + * ace/Message_Block.{h,cpp,inl}: + * ace/Message_Queue_T.h: + * ace/ace.mpc: + * ace/ace_for_tao.mpc: + * ace/Makefile.am: + Moved ACE_Dynamic_Message_Strategy to its own file to reduce footprint + for applications that don't use it. Fixes bugzilla 2998 + +Thu Sep 20 08:05:15 UTC 2007 Johnny Willemsen + + * apps/JAWS2/JAWS/IO_Handler.cpp: + Use closesocket to close the socket, to prevent a leak on windows. + This fixes bugzilla 1124, thanks to Alain Totouom + for reporting this. + + * ace/OS_NS_sys_socket.h: + Doxygen improvement + +Thu Sep 20 07:56:15 UTC 2007 Johnny Willemsen + + * ace/Based_Pointer_T.{h,inl}: + Let the operator* and operator[] return a & so that we don't make a + copy. This fixes bugzilla 742, thanks to Pavel Zaichenko + for reporting this + +Thu Sep 20 07:24:15 UTC 2007 Johnny Willemsen + + * ace/Log_Msg.{h,cpp,inl}: + Added new inline file and moved several methods to that file. Fixes + bugzilla 2364 + + * ace/Makefile.am: + Added new file + +Thu Sep 20 06:59:15 UTC 2007 Johnny Willemsen + + * ace/ATM_Params.h: + * ace/Dev_Poll_Reactor.h: + * ace/Event_Handler.h: + * ace/Proactor.h: + * ace/Reactor_Impl.h: + * ace/Select_Reactor_T.h: + * ace/Timer_Hash_T.cpp: + * ace/Timer_Hash_T.h: + * ace/Timer_Heap_T.cpp: + * ace/Timer_Heap_T.h: + * ace/Timer_List_T.h: + * ace/Timer_Queue_T.h: + * ace/Timer_Wheel_T.h: + * ace/Timer_List_T.cpp: + Doxygen improvements + + * ace/CDR_Stream.cpp: + * ace/CDR_Stream.inl: + * ace/Lib_Find.cpp: + Const improvements + + * ace/config-ghs-common.h: + * ace/config-irix6.5.x-sgic++.h: + * ace/config-irix6.x-sgic++.h: + * ace/config-macosx-panther.h: + * ace/config-macosx-tiger.h: + * ace/config-macosx.h: + * ace/config-qnx-rtp-pre62x.h: + * ace/config-unixware-7.1.0.h: + * ace/config-unixware-7.1.0.udk.h: + * ace/config-win32-dmc.h: + * ace/config-win32-ghs.h: + * ace/config-win32-interix.h: + Removed ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION, we don't support that + already a long time + + * ace/config-hpux-11.00.h: + Removed support for ancient HP compilers that also required explicit template + instantiations. Fixes bugzilla 3071 + + * ace/config-sunos5.6.h: + Removed undef of ACE_HAS_STL_QUEUE_CONFLICT, it is not set anywhere + + * ace/config-sunos5.7.h: + Removed support for GCC 2.7.2 + + * ace/Malloc.cpp (name): + * ace/PI_Malloc.cpp (name): + No need for intermediate variable + + * ace/os_include/os_semaphore.h: + * ace/OS_NS_Thread.inl: + Changed new_sema_ to a real bool + + * ace/Reactor.h: + Only the methods derived from ACE_Reactor_Timer_Interface need to be virtual, + all other methods don't need to be that. Next step would be to inline these + methods. + + * ace/Sig_Handler.cpp: + * ace/Sig_Handler.h: + * ace/Timer_Hash_T.h: + * ace/Timer_Heap_T.h: + * ace/Timer_List_T.h: + * ace/Timer_Queue_T.h: + * ace/Timer_Wheel_T.h: + Removed support for ACE_HAS_BROKEN_HPUX_TEMPLATES + + * ace/Timer_Queue_Adapters.cpp: + * ace/Timer_Queue_Adapters.h: + * ace/Timer_Queue_Adapters.inl: + Changed delete_timer_queue to a real bool + + * ace/Timer_Hash.cpp: + * ace/Timer_Heap.cpp: + * ace/Timer_List.cpp: + * ace/Timer_Wheel.cpp: + * ace/Timer_Queue.cpp: + Removed from the repo, they only existed because of a broken HP compiler. + + * ace/ace.mpc: + * ace/ace_for_tao.mpc: + * ace/Makefile.am: + Updated for the removed files + + * etc/ace.doxygen: + Use shortnames, fixes bugzilla 3069 + + * bin/make_release.py: + Use vc71 name modifier for the vc71 project files. Fixes bugzilla 2987 + + * docs/bczar/bczar.html: + Updated based on the steps of x.6.1 + +Wed Sep 19 04:10:15 CDT 2007 Johnny Willemsen + + * ACE version 5.6.1 released. + +Tue Sep 18 11:05:38 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_linux_common.GNU: + * include/makeinclude/platform_linux_icc.GNU: + Intel C++ needs a special ar tool when building statically + +Mon Sep 17 15:51:38 UTC 2007 Johnny Willemsen + + * configure.ac: + When checking for ACE_LACKS_NAMED_POSIX_SEM, include errno.h when + we have detected that this file is available. Hayim Shaul + reported an autoconf log where this define + was set because the test failed to compile because errno was not + defined + +Fri Sep 14 18:53:38 UTC 2007 Johnny Willemsen + + * tests/acetest.mpb: + * tests/SSL/acetest.mpb: + Don't use ACE_ROOT, causes problems with GNU make on windows when we build + on a different drive then the autobuild system is located at + +Fri Sep 14 09:47:38 UTC 2007 Johnny Willemsen + + * ace/CDR_Base.{inl}: + The swap_8 method was incorrect, there we use an EM64T instruction, + use ACE_HAS_INTEL_ASSEMBLY in the swap_2 and swap_4 method + +Fri Sep 14 04:51:38 UTC 2007 Johnny Willemsen + + * ace/CDR_Base.{cpp.inl}: + Don't use ACE_HAS_INTEL_ASSEMBLY, but just add EM64T, fixes problems + with solaris and vxworks + + Revert this change, not needed + + Thu Sep 13 08:55:38 UTC 2007 Johnny Willemsen + * ace/config-sunos5.5.h: + Don't use ACE_HAS_INTEL_ASSEMBLY with GCC + +Thu Sep 13 15:49:45 UTC 2007 Dale Wilson + + * NEWS: + Added description of ACE_DEFAULT_THREAD_KEYS change. + +Thu Sep 13 15:34:15 UTC 2007 Dale Wilson + + * ace/OS_NS_Thread.h: + * ace/config-win32-common.h: + Base the definiton of ACE_DEFAULT_THREAD_KEYS on the + Windows version rather than using the misleading + TLS_MINIMUM_AVAILABLE + Move the check to see if _WIN32_WINNT is defined + until *after* windows.h is included (directly or indirectly) + +Thu Sep 13 15:17:28 UTC 2007 Abdullah Sowayan + + * ace/ATM_Stream.cpp: + * ace/Lib_Find.cpp: + * ace/Metrics_Cache_T.cpp: + * ace/Process_Mutex.cpp: + * ace/Service_Config.cpp: + * ace/Service_Gestalt.cpp: + * ace/Service_Manager.cpp: + * ace/Throughput_Stats.cpp: + * ace/Timeprobe_T.cpp: + + Fixed ACE_OS fuzz warnings. Use ACE_OS calls instead of raw OS functions + where possible. If fuzz detected a false-positive, then disable + the ACE_OS fuzz check for that section of the code. + +Thu Sep 13 08:55:38 UTC 2007 Johnny Willemsen + + * ace/config-sunos5.5.h: + Don't use ACE_HAS_INTEL_ASSEMBLY with GCC + +Wed Sep 12 18:02:38 UTC 2007 Johnny Willemsen + + * ace/config-win32-borland.h: + CodeGear RAD Studio 2007 doesn't seem to support inlined assembly + + * ace/config-g++-common.h: + * ace/config-icc-common.h: + When we have pentium, AMD64, or EM64T as CPU define + ACE_HAS_INTEL_ASSEMBLY + + * ace/Atomic_Op.h: + Simplified this file by using ACE_HAS_INTEL_ASSEMBLY + + * ace/CDR_Base.{cpp.inl}: + Make use of ACE_HAS_INTEL_ASSEMBLY, this fixes bugzilla + issue 3072 + + * ace/WFMO_Reactor.h: + Doxygen fixes + +Wed Sep 12 04:16:12 UTC 2007 Adam Mitz + + * ACE-INSTALL.html: + + Added notes on Microsoft Visual C++ 2005 Express Edition. + +Tue Sep 11 15:50:35 UTC 2007 Nishanth Shankaran + + * ace/Sample_History.cpp: Fixed formatting errors in the + dump_samples method. + +Tue Sep 11 11:38:38 UTC 2007 Johnny Willemsen + + * ACE-INSTALL.html: + Updated supported platforms + +Mon Sep 10 13:22:38 UTC 2007 Abdullah Sowayan + + * apps/JAWS/stress_testing/util.cpp: + * apps/drwho/Multicast_Manager.cpp: + * apps/drwho/Options.cpp: + * bin/LabVIEW_RT/labview_test_controller/labview_test_controller.cpp: + * bin/LabVIEW_RT/labview_test_controller/test.cpp: + + Fixed ACE_OS fuzz warnings. Use ACE_OS calls instead of raw OS functions + where possible. If fuzz detected a false-positive, then disable + the ACE_OS fuzz check for that section of the code. + +Mon Sep 10 12:17:24 UTC 2007 Phil Mesnier + + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + Add timeouts to recv_n and send_n calls to ensure the calling + loops always exit. + + This is necessary due to certain races that can occur between + the start up of new send/recv threads, and the shutdown of + individual thread loops. What sometimes happens is that a thread + is started to read from a socket, and then a different thread + closes down the read-side of the socket. But due to thread + startup delays, the send side never gets to the point where it + detects the close, effectively leaving a half-closed connection. + + In this case, on "weevil" a Windows 2003 server, the thread + blocked in recv on the half closed socket is not killed by the + nightly test script's shutdown signal, leaving a zombie + process. This zombie holds a lock on the libACE.dll file, which + then cannot be rebuilt, and as a result, subsequent nightly + builds fail catastrophically. + +Mon Sep 10 11:19:20 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + + Remove TAO/docs directory from the list of excluded + directories for the tabs check. + +Fri Sep 7 19:52:12 UTC 2007 Johnny Willemsen + + * etc/index.html: + Added links for older versions + +Fri Sep 7 11:45:12 UTC 2007 Johnny Willemsen + + * etc/doxygen.css: + * etc/index.html: + Put the files published online at http://www.dre.vanderbilt.edu/Doxygen/ + under version control + +Thu Sep 6 22:59:24 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + Remove TAO/utils directory from the list of excluded + directories for the tabs check. + +Thu Sep 6 18:28:12 UTC 2007 Johnny Willemsen + + * ace/config-win32-borland.h: + Make use of the new inline assembly feature of the upcoming CodeGear C++ + compiler + +Thu Sep 6 18:53:06 UTC 2007 Ossama Othman + + * tests/run_test.lst: + + Added the SSL_Asynch_Stream_Test and + Thread_Pool_Reactor_SSL_Test to the list of tests to run. The + run_test.pl script now supports log files for test binaries in + subdirectories. [Bug 2985] + +Thu Sep 6 18:41:36 UTC 2007 Ossama Othman + + * bin/fuzz.pl: + + Nuked trailing whitespace. + + * tests/run_test.pl (check_log): + + Support logs generated by tests in subdirectories, such as tests + found in the SSL subdirectory. + +Thu Sep 6 15:33:15 UTC 2007 Friedhelm Wolf + + * docs/ACE-guidelines.html + Add guidelines about doxygen comments + +Thu Sep 6 14:41:50 UTC 2007 Douglas C. Schmidt + + * ace/WIN32_Asynch_IO.cpp (open): Update the win32_proactor_ + pointer so it's in synch after a call to open(). Thanks to + Erman Balcik for + contributing this. + +Thu Sep 6 12:12:12 UTC 2007 Johnny Willemsen + + * performance-tests/Synch-Benchmarks/run_tests.pl: + Fixed typo + +Thu Sep 6 12:09:12 UTC 2007 Johnny Willemsen + + * bin/generate_rel_manpages: + Added md5sum steps + +Thu Sep 6 09:27:12 UTC 2007 Johnny Willemsen + + * ace/OS_NS_Thread.h: + Doxyen fix + +Thu Sep 6 00:13:48 UTC 2007 Ossama Othman + + * tests/run_test.lst: + + Updated location of Bug_2912_Regression test. + +Wed Sep 5 23:40:15 UTC 2007 Ossama Othman + + * tests/Bug_2912_Regression_Test.cpp: + * tests/tests.mpc: + * tests/SSL/tests.mpc: + + Moved Bug_2912_Regression test to the SSL subdirectory. It is + an SSL related test. + + * tests/Naming_Test.cpp: + * tests/Test_Output.cpp (randomize): + * tests/Timer_Queue_Test.cpp: + * tests/randomize.h (randomize): + * tests/test_config.h: + + Refactored test array element order randomization code to a + generic function template that can be leveraged by all tests. + In the process of refactoring the code, also corrected problem + where only the first half of the array elements were + randomized. + + * tests/Reactor_Remove_Resume_Test.cpp (run_main): + + Fixed typo in factory count calculation. + + * tests/Test_Output.cpp: + + Addressed some Coverity errors. + +Tue Sep 4 14:39:11 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + Remove the CIAO directory from the list of excluded + directories for the tabs check. + +Mon Sep 03 12:04:12 UTC 2007 Johnny Willemsen + + * docs/bczar/bczar.html: + Extended instructions + + * docs/Download.html: + Updated download locations for latest release which is not x.6 + +Mon Sep 03 02:50:30 CDT 2007 Johnny Willemsen + + * ACE version 5.6 released. + +Thu Aug 30 17:23:21 UTC 2007 Steve Huston + + * bin/LabVIEW_RT/labview_test_controller/stdafx.cpp: + * bin/LabVIEW_RT/labview_test_controller/stdafx.h: + * bin/LabVIEW_RT/labview_test_controller/test.cpp: + * bin/LabVIEW_RT/labview_test_controller/labview_test_controller.cpp: + Fixed Fuxx errors. + +Thu Aug 30 17:05:00 UTC 2007 Steve Huston + + * protocols/tests/HTBP/ping/client.cpp: Reverted the addition of + specific AF_INET address family. Since the server and client are + both doing specific name lookup, they'll both get the same IP + address and family, so we need not try to force one. Also added + more logging of the address and port to connect to. + + * protocols/tests/HTBP/ping/server.cpp: Log the listening IP/port. + +Thu Aug 30 16:34:06 UTC 2007 Steve Huston + + * bin/MakeProjectCreator/config/labviewrt_dll.mpb: A base that + is used with LabVIEW RT-target builds to change all the builds + for executables to build a DLL instead. This is needed for LabVIEW + RT w/ Phar Lap ETS. Please see bin/LabVIEW_RT/README for info. + + * bin/LabVIEW_RT/README: Added a note about labviewrt_dll.mpb's use. + +Thu Aug 30 07:06:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_g++_common.GNU: + Added rules to detect FC6 explicitly + +Thu Aug 30 03:41:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_g++_common.GNU: + FC6 and FC5 have exact the same GCC version, FC5 doesn't need the + workaround, FC6 does. Disabled the check for this specific RedHat + GCC version. FC6 users have to manually set + ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS to 1 + +Wed Aug 29 23:36:52 UTC 2007 Steve Huston + + * protocols/tests/HTBP/Reactor_Tests/server.cpp: + * protocols/tests/HTBP/Send_Large_Msg/server.cpp: + * protocols/tests/HTBP/ping/server.cpp: + Listen at the IP address represented by the hostname, not "any". + Matches what the client is going to do when looking up the host + to connect to. Of particular interest is getting the IP address + families to be the same for server and client on IPv6-capable + systems. Thanks to Phil Mesnier for these patches. + +Wed Aug 29 22:53:57 UTC 2007 Steve Huston + + * bin/LabVIEW_RT: A directory of information and utilities useful + for running ACE+TAO tests on LabVIEW RT / Phar Lap ETS targets. + See the README file in that directory for more information. + + * docs/svn/config: + * docs/svn/svn-prefs.reg: Add .ini as a text-type known file type. + +Wed Aug 29 18:55:33 UTC 2007 Steve Huston + + * protocols/tests/HTBP/ping/client.cpp: Explicitly set AF_INET on the + address to connect to the server on. Fixes fails on IPv6 builds. + Thanks to Phil Mesnier for diagnosing this problem. + Also fixed logging conversions where needed for 64-bit and wide-char. + +Wed Aug 29 18:21:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_aix_g++.GNU: + Another try, if this doesn't work I revert all changes from last wek + +Wed Aug 29 18:02:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_g++_common.GNU: + Detect the RedHat GCC compilers that need to have + ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS defined to 1. + If we detect that, add CE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS=1 + to the compiler flags + +Wed Aug 29 15:09:17 UTC 2007 Steve Huston + + * NEWS: Add note about LabVIEW RT/Pharlap ETS port. + +Wed Aug 29 08:33:12 UTC 2007 Johnny Willemsen + + * bin/cut_cidlc.sh: + Put this script under version control, it is used to cut the cidlc + release binaries + + * docs/bczar/bczar.html: + Added cut_cidlc.sh as last step of the release instructions + + * include/makeinclude/platform_aix_g++.GNU: + Made another few changes to resolve the new link errors + +Tue Aug 28 08:43:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_aix_g++.GNU: + Improved this file, thanks to Werner Buchert + for testing these changes + +Mon Aug 27 07:55:12 UTC 2007 Johnny Willemsen + + * ace/ace.mpc: + * ace/ace_for_tao.mpc: + * ace/Makefile.am: + Added missing Select_Reactor.h, thanks to Vikram Karandikar + for reporting this + +Sat Aug 25 12:57:30 UTC 2007 Steve Huston + + * bin/PerlACE/ProcessLVRT.pm: New class that integrates running a + test on a LabVIEW RT Pharlap ETS target. This requires the Perl + Net-Telnet. + + * bin/PerlACE/TestTarget.pm: The new TestTarget class is for test + operations that are per-target, such as creating a local file path, + deleting a file on the target, waiting for a file, creating a + process, and getting the standard error log. In the default case, + these all do the usual PerlACE functions currently in use. However, + you can derive a class from this to do things differently. For + example, on LabVIEW RT, creating a process really uses the + ProcessLVRT module described above. Deleting a file uses FTP to + delete it, etc. + In this way, it's possible to customize the behaviors to a target + without changing all the test scripts. The hitch is that the test + script has to be changed once to instantiate the TestTarget object + and then make method calls on it instead of calling PerlACE + functions directly. + + * bin/TestTarget_LVRT.pm: Customization of TestTarget for LabVIEW RT. + It requires the Net-Telnet Perl module to work. It's used when + the TestTarget::create_target method is called and LabVIEW_RT is + set in the test configuration. + + * tests/run_test.pl: Select ProcessLVRT when running a test with the + LabVIEW_RT configuration. + +Fri Aug 24 21:52:37 UTC 2007 Steve Huston + + * ace/MMAP_Memoy_Pool.cpp (map_file): Reverted the "always do + MAP_FIXED" flag on remapping a file from: + Wed Aug 22 18:10:09 UTC 2007 Steve Huston + That's an invalid thing to do, as it has the potential to remap + pages from things like the heap or the C library or ACE into the + mapped file - definitely not what we want. If the remap has to move + the area, it's best to fail it here. + + * tests/Naming_Test.cpp: Correct logging formats and wedge in a base + address for the name space's mmaped region. This avoids having to + move the mapped area as it grows, which totally screws the name + space map. RHEL4 x64 seems to be the only platform this is tested + on regularly where this condition is hit. + +Fri Aug 24 16:15:59 UTC 2007 Phil Mesnier + + * bin/ace_tests.lst: + * bin/tao_other_tests.lst: + guard against running the HTBP and HTIOP tests on systems that + do not build ACE_UUID, such as the compact builds. + +Thu Aug 23 19:39:27 UTC 2007 Abdullah Sowayan + + * bin/msvc_static_order.lst: + Added some TAO projects to the list in an attempt to fix + the WinXP_VC71_CIAOCore_Static_Debug build. + +Thu Aug 23 15:07:01 UTC 2007 Steve Huston + + * configure.ac: Allow POSIX semaphores to be used with UI Threads + (ala Solaris) if the functions are there. + +Thu Aug 23 05:35:12 UTC 2007 Johnny Willemsen + + * ace/Hash_Map_Manager_T.inl: + Don't use ACE_LIB_TEXT, but ACE_TEXT + +Wed Aug 22 22:31:00 UTC 2007 Steve Huston + + * tests/Signal_Test.cpp: When sigwait()-ing, restart the wait if + interrupted by an uncaught signal. This happens on Solaris 9, for + example, when a threading-related signals happen. Gets this test + working correctly for Solaris 9. + +Wed Aug 22 21:41:36 UTC 2007 Phil Mesnier + + * protocols/tests/HTBP/Send_Large_Msg/Send_Large_Msg.mpc: + * protocols/tests/HTBP/Send_Large_Msg/server.cpp: + * protocols/tests/HTBP/Send_Recv_Tests/server.cpp: + * protocols/tests/HTBP/ping/server.cpp: + + Add a small sleep in the server right before closing the socket. + This helps reduce the likelyhood that tests will fail on windows + if the server happens to close before the client has read the + last bit of data on the conection. + +Wed Aug 22 21:28:38 UTC 2007 Steve Huston + + * bin/ace_tests.lst: Marked RMCast tests to only run if the RMCAST + config is set. This effectively disables it everywhere pending some + requested feedack from the ACE users community on usage. + +Wed Aug 22 21:24:07 UTC 2007 Steve Huston + + * tests/Multicast_Test.cpp: Log the joined multicast groups. + + * tests/Multicast_Test_IPV6.cpp: Fixed string logging and a leak. + +Wed Aug 22 19:59:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_gnuwin32_common.GNU: + Added wall GNU make variable which is default set to 1, which then + adds -Wall to the CFLAGS. This option results in a lot of warnings + related dllimport which makes it not really usable, with GCC 4.x + we can disable that warning, but not with GCC 3.4, so the user can + set wall=0 to disable the usage of -Wall + +Wed Aug 22 18:10:09 UTC 2007 Steve Huston + + * ace/Hash_Map_Manager_T.inl (open): If open fails, include the + error reason in the logged message. + + * ace/Hash_Map_Manager_T.h: Documentation improvements. + + * ace/Local_Name_Space_T.cpp: Corrected logging of pointers to use + %@ instead of %d or %u. + + * ace/MMAP_Memory_Pool.cpp (map_file): When remapping a previous + mapping, try to use MAP_FIXED unless the memory pool option + NEVER_FIXED is also set. Resolves a problem of mapping to a + different region when remapping an existing area on RHEL 4 x64. + Also fixed logging of pointers and size_t to use %@ and %B. + +Wed Aug 22 18:09:45 UTC 2007 Steve Huston + + * m4/compiler.m4: For AIX xlC and Solaris CC 4.2, always turn on + RTTI support. ACE requires it, and for these compilers, the default + is RTTI disabled. The previous code used the rtti-enabled flag + which was removed at: + Wed Aug 22 08:49:12 UTC 2007 Johnny Willemsen + +Wed Aug 22 15:58:55 UTC 2007 Abdullah Sowayan + + * bin/msvc_static_order.lst: + + Added CIAO projects to the list. This may need further tweaking. + Hopefully this will address problems in the + WinXP_VC71_CIAOCore_Static_Debug build. + +Wed Aug 22 11:32:41 UTC 2007 Steve Huston + + * netsvcs/lib/Client_Logging_Handler.cpp: Fixed wide-char error. + +Wed Aug 22 08:52:12 UTC 2007 Johnny Willemsen + + * ACE-INSTALL.html: + Updated Remedy IT platforms + +Wed Aug 22 08:49:12 UTC 2007 Johnny Willemsen + + * ACE-INSTALL.html: + * m4/ace.m4: + Removed support for disabling rtti + +Wed Aug 22 08:46:12 UTC 2007 Johnny Willemsen + + * bin/msvc_mpc_auto_compile.pl: + * bin/msvc_static_compile.pl: + Use the word error when detecting an unknown option, this way the + autobuild scripts will tag this as error on the scoreboard + +Wed Aug 22 08:15:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_gnuwin32_common.GNU: + -Wno-attributes is only available with GCC 4.x. Removed support + for GCC 2.95 + +Wed Aug 22 06:23:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_gnuwin32_common.GNU: + The GCC compiler on windows gives a lot of warnings about attributes + that are ignored. These are not usefull, so added no_attributes + which by default is set to 1 which then disable this warning. If you + want to see these warnings, set no_attributes=0 to your + platform_macros.GNU file + +Wed Aug 22 04:53:12 UTC 2007 Johnny Willemsen + + * protocols/tests/HTBP/ping/run_test.pl: + * protocols/tests/HTBP/Reactor_Tests/run_test.pl: + * protocols/tests/HTBP/Send_Large_Msg/run_test.pl: + * protocols/tests/HTBP/Send_Recv_Tests/run_test.pl: + Fixes for VxWorks cross platform testing + +Tue Aug 21 21:07:24 UTC 2007 Steve Huston + + * netsvcs/lib/Client_Logging_Handler.cpp (ACE_Client_Logging_Acceptor): + Added an optional argument to the client logging daemon setup: + -llocal-ip[:local-port] - this allows one to specify the local + address and port number for the connection to the server logging + daemon. If the port number is not specified, it defaults to 0 (select + an unused port) and if -l is not specified, the host's defaults + are applied (as in all previous versions). + + * NEWS: Describe the above addition. + +Tue Aug 21 15:34:00 UTC 2007 Phil Mesnier + + * ace/Service_Config.cpp: + * ace/Service_Gestalt.cpp: + Service_Config::parse_args_i was improperly splitting arguments + that may contain spaces, such as explicit service directives. + This patch addresses that explicitly quoting unknown arguments + being passed on to the Service_Gestalt::parse_args_i. I removed + unparsed args from the gestalt's list of known args, and cleaned + up a bad error message. + +Tue Aug 21 15:24:47 UTC 2007 James H. Hill + + * docs/ace_guidelines.vsmacros: + Whitespaces in .mk and .mpd files are not modified. + +Tue Aug 21 07:07:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_irix6.x_common.GNU: + * include/makeinclude/platform_irix6.x_g++.GNU: + * include/makeinclude/platform_irix6.x_sgic++.GNU: + Moved some parts to the common file + + * include/makeinclude/platform_mvs.GNU: + Use ?= + + * include/makeinclude/platform_sco-nothread.GNU: + * include/makeinclude/platform_sco5.0.0-CC-fsu-pthread.GNU: + * include/makeinclude/platform_sco5.0.0-fsu-pthread.GNU: + * include/makeinclude/platform_sco5.0.0-mit-pthread.GNU: + * include/makeinclude/platform_sco5.0.0-nothread.GNU: + Removed, ancient and not maintained for years + +Tue Aug 21 05:03:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_unixware_udk.GNU: + Deleted, mentions it is for gcc 2.7.2, that compiler isn't + supported anymore for a long time + +Mon Aug 20 21:37:13 UTC 2007 Phil Mesnier + + * tests/MT_Reference_Counted_Event_Handler_Test.cpp: + Add thread ID and some additional debug output to help chase + test hangs. + +Mon Aug 20 20:02:32 UTC 2007 Phil Mesnier + + * protocols/tests/HTBP/Reactor_Tests/server.cpp: + * protocols/tests/HTBP/Send_Large_Msg/server.cpp: + * protocols/tests/HTBP/Send_Recv_Tests/server.cpp: + * protocols/tests/HTBP/ping/server.cpp: + eliminate anachronistic code warnings. + +Mon Aug 20 14:16:20 UTC 2007 Abdullah Sowayan + + * examples/C++NPv2/Select_Reactor_Logging_Server.cpp: + * examples/C++NPv2/Server_Shutdown.cpp: + * examples/C++NPv2/TP_Reactor_Logging_Server.cpp: + * examples/Web_Crawler/Command_Processor.h: + * netsvcs/lib/Log_Message_Receiver.h: + * netsvcs/lib/Name_Handler.h: + * netsvcs/lib/TS_Server_Handler.h: + + Zapped ACE_Shutup_GPlusPLus and ace_dewarn_gplusplus, they were + a reclic from the older days of ACE, it was used to silence + incorrect warning from g++ compiler. Moved the destructor to + the protected section to correctly handle such warnings + (if they still exist) without having to introduce a phony friend. + +Mon Aug 20 13:06:38 UTC 2007 Phil Mesnier + + * protocols/tests/HTBP/Reactor_Tests/run_test.pl: + * protocols/tests/HTBP/Reactor_Tests/server.cpp: + * protocols/tests/HTBP/Send_Large_Msg/run_test.pl: + * protocols/tests/HTBP/Send_Large_Msg/server.cpp: + * protocols/tests/HTBP/Send_Recv_Tests/run_test.pl: + * protocols/tests/HTBP/Send_Recv_Tests/server.cpp: + * protocols/tests/HTBP/ping/run_test.pl: + * protocols/tests/HTBP/ping/server.cpp: + + Added a synchronizing file to ensure server is running before + starting the client. + +Mon Aug 20 12:42:12 UTC 2007 Johnny Willemsen + + * tests/DLL_Test.cpp: + * tests/DLL_Test_Impl.cpp: + Removed left overs from the time that we could use ACE without rtti + +Mon Aug 20 12:33:12 UTC 2007 Johnny Willemsen + + * ace/ATM_Connector.h: + Removed commented out method + + * ace/config-cxx-common.h: + * ace/config-macros.h: + * ace/config-qnx-rtp-pre62x.h: + * ace/config-win32-interix.h: + * ace/config-win32-msvc.h: + Removed left overs from the time that we could use ACE without rtti + +Mon Aug 20 12:28:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_aix_g++.GNU: + * include/makeinclude/platform_aix_ibm.GNU: + * include/makeinclude/platform_integrity_ghs.GNU: + * include/makeinclude/platform_openvms.GNU: + * include/makeinclude/platform_rtems.x_g++.GNU: + * include/makeinclude/platform_sunos5_sunc++.GNU: + * include/makeinclude/platform_tru64_cxx.GNU: + * include/makeinclude/platform_tru64_g++.GNU: + * include/makeinclude/platform_vxworks5.5.x.GNU: + * include/makeinclude/platform_vxworks6.2.GNU: + * include/makeinclude/platform_vxworks6.3.GNU: + * include/makeinclude/platform_win32_dmc.GNU: + * include/makeinclude/wrapper_macros.GNU: + Removed rtti as make option, ACE requires rtti so we don't need an + option to disable rtti. + +Mon Aug 20 10:51:12 UTC 2007 Johnny Willemsen + + * bin/generate_rel_manpages: + Updated for new doxygen version on naboo + +Mon Aug 20 07:55:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_hpux.GNU: + Removed, old and obsolete + +Sun Aug 19 13:57:44 UTC 2007 Abdullah Sowayan + + * ACEXML/common/XML_Macros.h: + * ASNMP/agent/agent_impl.cpp: + Untabify. + + * bin/fuzz.pl: + Remove ACEXML and ASNMP directory from the list of excluded + directories for the tabs check. + +Sun Aug 19 06:20:12 UTC 2007 Johnny Willemsen + + * ace/Atomic_Op.h: + Added missing define for Sun + +Sat Aug 18 16:37:35 UTC 2007 Phil Mesnier + + * protocols/ace/HTBP/HTBP_Session.cpp: + Error reporting enhancement. + + * protocols/tests/HTBP/Reactor_Tests/client.cpp: + * protocols/tests/HTBP/Reactor_Tests/run_test.pl: + * protocols/tests/HTBP/Send_Large_Msg/client.cpp: + * protocols/tests/HTBP/Send_Large_Msg/run_test.pl: + * protocols/tests/HTBP/Send_Recv_Tests/client.cpp: + * protocols/tests/HTBP/Send_Recv_Tests/run_test.pl: + * protocols/tests/HTBP/Send_Recv_Tests/server.cpp: + * protocols/tests/HTBP/ping/client.cpp: + * protocols/tests/HTBP/ping/run_test.pl: + * protocols/tests/HTBP/ping/server.cpp: + + Fix the tests so that a random port is selected each run to + avoid problems with TCP wait states. + +Sat Aug 18 01:16:11 UTC 2007 Abdullah Sowayan + + * Kokyu/DSRT_Direct_Dispatcher_Impl_T.cpp: + * Kokyu/Dispatch_Deferrer.h: + * Kokyu/Dispatch_Deferrer.cpp: + * Kokyu/Kokyu_dsrt.h: + * examples/Threads/cancel.cpp: + * examples/Timer_Queue/Async_Timer_Queue_Test.cpp: + * examples/Timer_Queue/Reactor_Timer_Queue_Test.cpp: + * examples/Timer_Queue/main_thread.cpp: + Untabify. + + * bin/fuzz.pl: + Remove Kokyu directory from the list of excluded + directories for the tabs check. + +Fri Aug 17 22:56:54 UTC 2007 Steve Huston + + * tests/Manual_Event_Test.cpp: Added additional diagnostics; fixed + spacing; removed ACE_ASSERT. + +Fri Aug 17 21:52:37 UTC 2007 Steve Huston + + * ace/config-linux-common.h: Only include config-posix.h when + ACE_HAS_LINUX_NPTL is defined; effectively reverts: + Mon Aug 13 04:40:12 UTC 2007 Johnny Willemsen + to fix broken RHEL 3 test results. RHEL 3's NPTL is not quite up to + snuff, apparantly (NPTL version 0.60) but even simply removing + ACE_HAS_LINUX_NPTL didn't do the trick. This effectively puts things + back the way they were for RHEL 3 and lets others stay with the + newer scheme of including config-posix.h. + + * include/makeinclude/platform_linux_common.GNU: Refined the NPTL + check to only set ACE_HAS_LINUX_NPTL when the NPTL version is not + 0.x. This works with the above to allow RHEL 4 et al to go on with + the new scheme and leave RHEL 3 at the old settings. + +Fri Aug 17 18:28:12 UTC 2007 Johnny Willemsen + + * m4/platform.m4: + Set ACE_UINT64_FORMAT_SPECIFIER for linux + +Fri Aug 17 14:41:15 UTC 2007 Abdullah Sowayan + + * contrib/minizip/zip.c: + Untabify. + + * bin/fuzz.pl: + Remove contrib directory from the list of excluded + directories for the tabs check. + +Fri Aug 17 13:36:11 UTC 2007 Phil Mesnier + + * protocols/ace/HTBP/HTBP_Channel.cpp: + * protocols/ace/HTBP/HTBP_Session.cpp: + + debug output cleanup and ACE_ASSERT removal. + + * protocols/tests/HTBP/Send_Large_Msg/run_test.pl: + + removed unused code. + + * protocols/tests/HTBP/Send_Recv_Tests/client.cpp: + * protocols/tests/HTBP/Send_Recv_Tests/run_test.pl: + * protocols/tests/HTBP/Send_Recv_Tests/server.cpp: + + This test wasn't working right due to the lack of a reactor. The + debug output was also cleaned up a bit, ACE_ASSERT removed and + the run_test script tidied up as well. + + * bin/ace_tests.lst: + * bin/tao_other_tests.lst: + Added HTBP and HTIOP tests to suites. + +Fri Aug 17 13:13:12 UTC 2007 Johnny Willemsen + + * ace/Message_Queue_T.h: + Doxygen updates + +Fri Aug 17 11:44:12 UTC 2007 Johnny Willemsen + + * ace/Atomic_Op_Sparc.c: + * ace/Atomic_Op.{h,cpp}: + Added optimized functions for SunCC on x86. Thanks to + Dennis Chernoivanov for reporting this. + If you want to enable these, add atomic_ops_sparc=1 to your + platform_macros.GNU file. This resolves bugzilla 2840 + +Fri Aug 17 10:43:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_linux_common.GNU: + New common file for linux which contains settings which are the same + for all compilers on linux + + * include/makeinclude/platform_linux.GNU: + * include/makeinclude/platform_linux_icc.GNU: + * include/makeinclude/platform_linux_pgi.GNU: + * include/makeinclude/platform_linux_suncc.GNU: + Moved comment contents to platform_linux_common.GNU + + * include/makeinclude/platform_linux_cxx.GNU: + Removed, not maintained for a long time + +Thu Aug 16 23:47:47 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + Remove TAO/TAO_IDL directory from the list of excluded + directories for the tabs check. + +Thu Aug 16 21:53:36 UTC 2007 Steve Huston + + * configure.ac: When checking for pthread_attr_setstack(), don't use + the ACE_CHECK_LACKS_FUNCS macro - the underlying autoconf macros + generate code that will compile/link on HP-UX 11iv2 because there's + an entrypoint for it in libpthread, but it's not supported. So + check with a hand-crafted short code segment. Thanks to Johnny + Willemsen for this idea. + +Thu Aug 16 20:02:53 UTC 2007 Abdullah Sowayan + + * netsvcs/clients/Logger/direct_logging.cpp: + * netsvcs/clients/Logger/indirect_logging.cpp: + * netsvcs/clients/Tokens/collection/collection.cpp: + * netsvcs/clients/Tokens/collection/rw_locks.cpp: + * netsvcs/clients/Tokens/deadlock/deadlock_detection_test.cpp: + * netsvcs/clients/Tokens/invariant/invariant.cpp: + * netsvcs/clients/Tokens/mutex/test_mutex.cpp: + * netsvcs/clients/Tokens/rw_lock/rw_locks.cpp: + Untabify + + * bin/fuzz.pl: + Remove netsvcs directory from the list of excluded + directories for the tabs check. + +Thu Aug 16 19:41:23 UTC 2007 Steve Huston + + * configure.ac: Adjusted the checks for "new throws..." to grab + much larger chunks; helps it run quicker and more accurately. + +Thu Aug 16 15:28:45 UTC 2007 Phil Mesnier + + * ace/Service_Config.cpp: + + Part of fix for bug 2995. Both the Service Config and Service + Gestalt have separate open counts, but multiple calls to open_i + on the Service Config were not propogated to Service Gestalt. + This led to a problem where closing a multiply opened Service + Config would result in a premature clean up of resources in the + Gestalt, triggering a crash later on. + + * ace/Service_Types.cpp: + Make debugging output more clear. + +Thu Aug 16 00:04:21 UTC 2007 Abdullah Sowayan + + * protocols/ace/HTBP/HTBP_Environment.cpp: + * protocols/ace/TMCast/FaultDetector.hpp: + Untabify. + + * bin/fuzz.pl: + Remove protocols directory from the list of excluded + directories for the tabs check. + +Wed Aug 15 21:54:11 UTC 2007 Steve Huston + + * tests/New_Fail_Test.cpp: Allocate the hugest blocks we can instead + of many merely big ones. Helps the test run without dragging the + system to a crawl, at least on my WinXP VC7.1 box w/ 1GB memory. + YMMV. Not ready to re-enable in tests/run_test.lst until a few + other people try this out by hand. + Also, replace ACE_ASSERT with if/else and ACE_ERROR. + +Wed Aug 15 15:56:12 UTC 2007 Abdullah Sowayan + + * performance-tests/Misc/test_mutex.cpp: + * performance-tests/Misc/test_singleton.cpp: + * performance-tests/SCTP/Options_Manager.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/condb_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/conds_test.cpp: + * performance-tests/Synch-Benchmarks/Perf_Test/memory_test.cpp: + * performance-tests/Synch-Benchmarks/context.c: + * performance-tests/Synch-Benchmarks/synch_driver.cpp: + * performance-tests/TTCP/ACE-C++/wrapper-new-ttcp.cpp: + * performance-tests/TTCP/C/new-ttcp.cpp: + + Untabify. + + * bin/fuzz.pl: + + Remove performance-tests directory from the list of excluded + directories for the tabs check. + +Wed Aug 15 14:57:06 UTC 2007 Steve Huston + + * m4/platform.m4: Check for NPTL on Linux. Fixes Bugzilla 3044. + + * protocols/tests/HTBP/Send_Recv_Tests/Makefile.am: Corrected + multi-test syntax. + +Wed Aug 15 14:55:36 UTC 2007 Abdullah Sowayan + + * tests/ACE_Init_Test.h: + * tests/ACE_Init_Test_Resource.h: + * tests/ACE_Init_Test_StdAfx.h: + * tests/Map_Test.cpp: + * tests/OS_Test.cpp: + * tests/QtReactor_Test.cpp: + * tests/TP_Reactor_Test.h: + * tests/Thread_Pool_Reactor_Resume_Test.cpp: + + Untabify + + * bin/fuzz.pl: + + Remove tests directory from the list of excluded directories for + the tabs check. + +Wed Aug 15 12:15:16 UTC 2007 Phil Mesnier + + * protocols/tests/HTBP/Reactor_Tests/client.cpp: + * protocols/tests/HTBP/Reactor_Tests/server.cpp: + * protocols/tests/HTBP/Send_Large_Msg/client.cpp: + * protocols/tests/HTBP/Send_Large_Msg/server.cpp: + * protocols/tests/HTBP/Send_Recv_Tests/Makefile.am: + * protocols/tests/HTBP/Send_Recv_Tests/client.cpp: + * protocols/tests/HTBP/Send_Recv_Tests/server.cpp: + * protocols/tests/HTBP/ping/client.cpp: + * protocols/tests/HTBP/ping/server.cpp: + * protocols/tests/HTBP/htbptest.mpb: + + Fix up tests to build correctly on wchar platforms and automake. + +Wed Aug 15 11:47:12 UTC 2007 Johnny Willemsen + + * tests/Manual_Event_Test.cpp: + Check the return value of the pulse method + +Wed Aug 15 11:23:12 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + Added new 3042 test + +Wed Aug 15 11:09:12 UTC 2007 Johnny Willemsen + + * ace/CDR_Stream.cpp: + Const and layout changes + + * ace/config-linux-common.h: + Removed unneeded space + + * ace/config-posix.h: + Only test semaphare support in a multi threaded build + +Tue Aug 14 23:28:07 UTC 2007 Abdullah Sowayan + + * tests/ACE_Init_Test.h: + * tests/ACE_Init_TestDlg.h: + * tests/Based_Pointer_Test.cpp: + * tests/Basic_Types_Test.cpp: + * tests/Bug_2815_Regression_Test.cpp: + * tests/Bug_2820_Regression_Test.cpp: + * tests/Config_Test.h: + * tests/Config_Test.cpp: + * tests/Max_Default_Port_Test.cpp: + * tests/Mem_Map_Test.cpp: + * tests/Notification_Queue_Unit_Test.cpp: + * tests/QtReactor_Test.h: + * tests/QtReactor_Test.cpp: + * tests/Reactor_Notify_Test.cpp: + * tests/SOCK_Dgram_Test.cpp: + * tests/SV_Shared_Memory_Test.cpp: + * tests/Signal_Test.cpp: + * tests/Thread_Pool_Reactor_Test.cpp: + * tests/Vector_Test.cpp: + Untabify. + +Tue Aug 14 22:39:56 UTC 2007 Steve Huston + + * configure.ac: Run the epoll_create() check; don't just link it. + RHEL 3 can link it but what ACE expects generates a run-time error. + +Tue Aug 14 19:11:06 UTC 2007 Phil Mesnier + + * protocols/ace/HTBP/HTBP_Channel.cpp: + * protocols/ace/HTBP/HTBP_Environment.cpp: + * protocols/ace/HTBP/HTBP_ID_Requestor.cpp: + * protocols/ace/HTBP/HTBP_Inside_Squid_Filter.cpp: + * protocols/ace/HTBP/HTBP_Notifier.cpp: + * protocols/ace/HTBP/HTBP_Outside_Squid_Filter.cpp: + * protocols/ace/HTBP/HTBP_Stream.cpp: + + Clean up the debug output. + + * protocols/tests/HTBP/Reactor_Tests/client.cpp: + * protocols/tests/HTBP/Reactor_Tests/run_test.pl: + * protocols/tests/HTBP/Reactor_Tests/server.cpp: + + * protocols/tests/HTBP/Send_Large_Msg/client.cpp: + * protocols/tests/HTBP/Send_Large_Msg/run_test.pl: + * protocols/tests/HTBP/Send_Large_Msg/server.cpp: + + * protocols/tests/HTBP/Send_Recv_Tests/SendRecv_Test.cpp: + * protocols/tests/HTBP/Send_Recv_Tests/SendRecv_Test.mpc: + * protocols/tests/HTBP/Send_Recv_Tests/server.cpp: + * protocols/tests/HTBP/Send_Recv_Tests/client.cpp: + * protocols/tests/HTBP/Send_Recv_Tests/run_test.pl: + + * protocols/tests/HTBP/ping/client.cpp: + * protocols/tests/HTBP/ping/run_test.pl: + * protocols/tests/HTBP/ping/server.cpp: + + Fix up the tests to run cleanly in a nightly build environment + This is primarily fixing the configuration so that it does not + depend on an external proxy, but will use one if locally + configured to do so. Also fixed up the test output and command + line processing to make it more consistent with other tests. + + I've not turned on the automatic running of these tests just + yet, I'd rather wait and just make sure the build is clean. We + can turn on the automatic run at some point later now that the + tests are cleaned up. + +Tue Aug 14 18:44:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_linux.GNU: + * include/makeinclude/platform_linux_icc.GNU: + * include/makeinclude/platform_linux_pgi.GNU: + * include/makeinclude/platform_linux_suncc.GNU: + Added a check whether we run on a kernel with NPTL. If this is + the case we add ACE_HAS_LINUX_NPTL to the compiler flags + +Tue Aug 14 18:06:16 UTC 2007 Abdullah Sowayan + + * ace/Svc_Conf_y.cpp: + Removed an extra space that was causing Debian_Core build to + emit a warning. + +Tue Aug 14 17:49:04 UTC 2007 Douglas C. Schmidt + + * ace/Log_Record.h: Disallow copying and assignment of + ACE_Log_Record. Thanks to Jan Kalin for suggesting this. + +Tue Aug 14 14:32:57 UTC 2007 Abdullah Sowayan + + * ace/Assert.h: + * ace/Global_Macros.h: + * ace/Netlink_Addr.h: + * ace/Rtems_init.c: + * ace/Svc_Conf_y.cpp: + * ace/Task_Ex_T.h: + * ace/config-win32-common.h: + * ace/config-win32-interix.h: + + Untabify. + +Tue Aug 14 13:48:56 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + Enabled the Check_for_tab test. The check_for_tab test now will + only check the core of ACE/TAO for tabs. This will prevent the + introduction of new tabs to the core of ACE/TAO. When we remove + tabs from other directories we will enable checks for those + directories. + +Tue Aug 14 08:46:12 UTC 2007 Johnny Willemsen + + * ace/Log_Msg.cpp: + Use ACE_TSS_CLEANUP_NAME instead of ACE_TSS_cleanup to resolve + compile problems with versioned namespaces enabled + +Mon Aug 13 20:27:43 UTC 2007 Abdullah Sowayan + + * ace/Assert.cpp: + * ace/Connector.cpp: + * ace/Dev_Poll_Reactor.cpp: + * ace/INET_Addr.cpp: + * ace/Notification_Queue.h: + * ace/Notification_Queue.cpp: + * ace/OS_NS_Thread.cpp: + * ace/OS_NS_dirent.inl: + * ace/POSIX_Proactor.cpp: + * ace/Process_Manager.h: + * ace/Process_Manager.cpp: + * ace/QoS/QoS_Session_Impl.cpp: + * ace/Rtems_init.c: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_IO.cpp: + * ace/SPIPE_Acceptor.cpp: + * ace/Select_Reactor_Base.cpp: + * ace/Service_Config.h: + * ace/config-vxworks5.x.h: + * ace/config-vxworks6.2.h: + * ace/config-vxworks6.3.h: + * ace/os_include/sys/os_socket.h: + Untabify. + +Mon Aug 13 14:52:12 UTC 2007 Johnny Willemsen + + * ace/Truncate.h: + Changed the new signed long/signed int specialization for BCB6 + in such a way that it doesn't cause a compiler crash. + +Mon Aug 13 11:42:46 UTC 2007 Chad Elliott + + * bin/tao_other_tests.lst: + + Added the new notification service monitor functional test. + +Mon Aug 13 10:55:12 UTC 2007 Johnny Willemsen + + * ace/CDR_Stream.cpp: + Const change + + * ace/OS_QoS.h: + Instead of making all ACE_ defines dependent on winsock2, just for each + one check if the non ACE define exists or not. If it exists, use it, if + not, use a special ACE value. This makes it easier to support QoS with + MinGW. + +Mon Aug 13 07:03:12 UTC 2007 Johnny Willemsen + + * ace/Log_Msg_IPC.cpp: + Fixed wrong calculation of payload size when unicode is enabled. + Thanks to David Beck for reporting this. + This fixes bugzilla 3038 + +Mon Aug 13 04:40:12 UTC 2007 Johnny Willemsen + + * ace/config-linux-common.h: + Always include config-posix.h, not only when ACE_HAS_LINUX_NPTL is + defined. Thanks to Thomas Girard + for noticing this + +Fri Aug 10 15:52:12 UTC 2007 Johnny Willemsen + + Reverted this change, could lead to problems + + * bin/MakeProjectCreator/config/gnuace.features: + Enabled qos, the GNU makefiles will block the building of QoS + +Fri Aug 10 11:59:12 UTC 2007 Johnny Willemsen + + * bin/MakeProjectCreator/config/gnuace.features: + Enabled qos, the GNU makefiles will block the building of QoS + + * include/makeinclude/platform_mingw32.GNU: + With MinGW we can build QoS support + + * ace/QoS/qos.mpc: + Added ACE_HAS_QOS to the macros, this is already done for projects + that use qos but not for the qos library itself + + * ace/config-win32-mingw.h: + Added ACE_HAS_WINSOCK2_GQOS + +Fri Aug 10 11:39:48 UTC 2007 Chad Elliott + + * ACE.mwc: + + Associate more directories and use the new '--' key. + + * bin/MakeProjectCreator/modules/AutomakeWorkspaceHelper.pm: + + Fixed issues with generated Kokyu projects. + +Fri Aug 10 09:33:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_gnuwin32_common.GNU: + When building shared libraries default inline to 0 + +Fri Aug 10 08:57:12 UTC 2007 Johnny Willemsen + + * ace/OS_main.h: + Made the destructor of ACE_Main_Base virtual to resolve MinGW + warnings + + * include/makeinclude/platform_linux_icc.GNU: + Updated this file with changes that have been done in the gcc + file the last years + +Fri Aug 10 07:39:12 UTC 2007 Johnny Willemsen + + * tests/Atomic_Op_Test.cpp: + Test operator= + +Fri Aug 10 07:14:12 UTC 2007 Johnny Willemsen + + * tests/Atomic_Op_Test.cpp: + Test the Atomic_Op also in single threaded builds and extended + the test with unsigned long and unsigned int tests + +Thu Aug 9 13:39:12 UTC 2007 Johnny Willemsen + + * ace/Log_Msg.cpp: + Initialise local variable to resolve GCC warning + + * ace/config-linux-common.h: + Added ACE_HAS_BROKEN_THREAD_KEYFREE so that on Linux the Log_Msg + does cleanup its TSS data which resolves problems when loading + and unloading the ACE shared library from an application that + doesn't use ACE at all + +Wed Aug 8 22:30:53 UTC 2007 Steve Huston + + * configure.ac: Moved check for ACE_LACKS_PTHREAD_ATTR_SETSTACK to + near the other stack-related pthreads checks. + + * m4/compiler.m4: Add +We to WERROR setting to force compile + warnings to be errors when desired. + +Wed Aug 8 11:35:01 UTC 2007 Chad Elliott + + * bin/Makefile.am: + * examples/QOS/Change_Receiver_FlowSpec/Makefile.am: + * examples/QOS/Change_Sender_TSpec/Makefile.am: + * examples/QOS/Diffserv/Makefile.am: + * examples/QOS/Simple/Makefile.am: + + The *_LDADD sections for these had wrong paths for the libraries. + +Wed Aug 8 09:05:12 UTC 2007 Johnny Willemsen + + * ace/Truncate.h: + Added specialization for BCB + +Tue Aug 7 19:04:25 UTC 2007 Chad Elliott + + * apps/drwho/drwho.mpc: + + Added the missing exename settings for the client and server. The + main() was changed to ACE_TMAIN(). + +Tue Aug 7 12:46:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/compiler.bor: + Use ACE_TEXT instead of ACE_LIB_TEXT + +Tue Aug 7 12:15:12 UTC 2007 Johnny Willemsen + + * html/stats/simple_footprint.html: + Removed Domain added Messaging + +Mon Aug 6 18:03:12 UTC 2007 Johnny Willemsen + + * m4/compiler.m4: + With ICC use -w1 to get rid of the remarks + +Mon Aug 6 11:28:12 UTC 2007 Johnny Willemsen + + * ace/Refcounted_Auto_Ptr.inl (count): + Fixed compile error + +Mon Aug 6 08:56:12 UTC 2007 Johnny Willemsen + + * ace/Refcounted_Auto_Ptr.{h,inl}: + Changed to use Atomic_Op for the refcount and use a long instead + of int. That way we can benefit from the Atomic_Op optimizations + + * ace/Bound_Ptr.{h,inl}: + Changed refcount to long as preparation of using Atomic_Op + +Mon Aug 6 08:31:12 UTC 2007 Johnny Willemsen + + * m4/compiler.m4: + Added -wr as flag to WERROR, with this flag remarks are not + promoted to error which caused several problems + +Mon Aug 6 08:24:12 UTC 2007 Johnny Willemsen + + * ace/config-WinCE.h: + * ace/OS_NS_sys_resource.inl: + Changed ACE_LACKS_WIN32_GETPROCESSTIMES to ACE_LACKS_GETPROCESSTIMES + to make a future autoconf check easier. Removed ACE_HAS_SYSCALL_GETRUSAGE + which wasn't set in any config file + +Mon Aug 6 07:58:12 UTC 2007 Johnny Willemsen + + * configure.ac: + Added a check whether we have a 1 or 2 param mkdir method. This + fixes bugzilla 2006. The other defines mentioned in this + issue are not added because they are for VxWorks 5.5 only which + we don't actively maintain anymore + +Mon Aug 6 06:55:12 UTC 2007 Johnny Willemsen + + * m4/compiler.m4: + Added -i-dynamic to default icpc flags + +Mon Aug 6 06:00:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_openvms.GNU: + For Alpha use a different way to silence the warnings + +Sun Aug 5 19:27:12 UTC 2007 Johnny Willemsen + + * ace/SStringfwd.h: + Check if __HP_aCC is defined before checking its value, fixes + a remark in the Intel C++ autoconf build + +Sat Aug 4 22:07:05 UTC 2007 Steve Huston + + * configure.ac: Removed the pthread_cond_timedwait() check - it was + used to set ACE_HAS_POSIX_SEM_TIMEOUT and ACE_HAS_POSIX_SEM_TIMEOUT_ + EMULATION, neither of which it is related to. Added a correct check + for sem_timedwait (ACE_HAS_POSIX_SEM_TIMEOUT). + Also, used shortcut functions instead of hand-coding tests for + pthread_attr_setstackaddr and pthread_attr_setstacksize. + + * m4/ace.m4: Add --enable-posix-sem-timeout-emulation, corresponding + to ACE_DISABLE_POSIX_SEM_TIMEOUT_EMULATION. + + * m4/config_h.m4: Corrected description of ACE_HAS_POSIX_SEM_TIMEOUT + and added ACE_DISABLE_POSIX_SEM_TIMEOUT_EMULATION. Also, because + of use of shortcuts (above) can remove templates for + ACE_LACKS_PTHREAD_ATTR_SETSTACKSIZE and + ACE_LACKS_PTHREAD_ATTR_SETSTACKADDR. + + * m4/compiler.m4: For IBM Visual Age C++ and XL C++, use manual + template instances (-qnotempinc -qnotemplateregistry) because I + haven't found a way to name the template registry from the + Makefiles and without that, building multiple items in one directory + clashes. Some people have reported the need to use manual template + mechanism for building TAO successfully, so maybe this will be ok. + +Fri Aug 3 21:34:40 UTC 2007 Abdullah Sowayan + + * contrib/FaCE/CE_Screen_Output.cpp: + * contrib/minizip/crypt.h: + * contrib/minizip/unzip.c: + + Untabify. + +Fri Aug 3 20:26:36 UTC 2007 Phil Mesnier + + * ace/INET_Addr.cpp: + * THANKS: + Fix for running an IPv6 supporting build of ACE on a host + that does not have IPV6 enabled. Thanks to Premkumar P for pointing out this issue. + +Fri Aug 3 18:31:12 UTC 2007 Johnny Willemsen + + * bin/PerlACE/Run_Test.pm: + Fixed a problem introduced with the revert below + +Fri Aug 3 09:35:12 UTC 2007 Johnny Willemsen + + * bin/PerlACE/Run_Test.pm: + Reverted the change to use a sleep of 50ms, the test stats show that + some tests timeout without a real reason. Maybe the timeouts are now + less reliable. + +Fri Aug 3 01:50:05 UTC 2007 Abdullah Sowayan + + * ace/Global_Macros.h: + * examples/Reactor/TP_Reactor/client.cpp: + + Fixed fuzz check_for_exception_spec warnings. + +Thu Aug 2 22:20:28 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + + Enabled check_for_exception_spec. + +Thu Aug 2 22:02:32 UTC 2007 Steve Huston + + * tests/Dirent_Test.cpp: Fixed to allow running the test against + directories other than "../tests". Picks hardcoded TEST_DIR if + compiled in (as previously) but will otherwise try $top_srcdir/tests, + $ACE_ROOT/tests, or ../tests depending on env variables present. + Allows the test to run in autoconf builds (fixes Bugzilla 1794). + Also removed all the ACE_ASSERTs, replacing them with informative + diagnostics. + +Thu Aug 2 21:31:32 UTC 2007 Abdullah Sowayan + + * examples/ConfigViewer/MainFrame.cpp: + + ZAP the last NULL usage in the distrubtion. + +Thu Aug 2 20:43:18 UTC 2007 Abdullah Sowayan + + * apps/JAWS/clients/WebSTONE/src/bench.c: + + Zap NULL usage. + +Thu Aug 2 20:24:22 UTC 2007 Iliyan Jeliazkov + + * ace/Service_Config.h: + + No-thread builds, instances of ACE_TSS use their destructor + instead of the static cleanup() method for deleting the object + they point to. Adding a destructor specialization to enable + non-ownership ACE_TSS behavior with no-thread builds for + ACE_Service_Gestalt's. + +Thu Aug 2 19:34:17 UTC 2007 Abdullah Sowayan + + * bin/fuzz.pl: + + Enhanced NULL check. + +Thu Aug 2 14:19:46 UTC 2007 Vladimir Zykov + + * bin/tao_other_tests.lst: + Added a new test TAO/orbsvcs/tests/Simple_Naming/run_test_ipv6.pl + +Thu Aug 2 11:43:35 UTC 2007 Iliyan Jeliazkov + + * ace/Service_Config.h: + Removing extra semicolon + +Thu Aug 2 09:46:12 UTC 2007 Johnny Willemsen + + * ace/Log_Msg.cpp: + Fixed gcc4 warnings + +Thu Aug 2 09:22:12 UTC 2007 Johnny Willemsen + + * ace/Log_Msg.cpp: + Use regular reinterpret_cast, use 0 instead of NULL and + in case setspecific fails just do a printf, not an ACE_DEBUG + because that will use ACE_Log_Msg again. + +Wed Aug 1 21:39:04 UTC 2007 Dale Wilson + + * bin/tao_orb_tests.lst: + Enable TAO\tests\Bug_2935_Regression + +Wed Aug 1 18:55:12 UTC 2007 Martin Corino + + * bin/PerlACE/ConfigList.pm: + Added '-Exclude ' option to be able to finetune the actual + tests being run without having to add yet another Config option + and update the test .LST files. + + * ace/config-openvms.h: + * include/makeinclude/platform_openvms.GNU: + merged changes for OpenVMS IA64 builds. + +Wed Aug 1 18:01:12 UTC 2007 Johnny Willemsen + + * bin/fuzz.pl: + Readded throw check, thanks for Abdul to notice the wrong + deletion + +Wed Aug 1 15:55:38 UTC 2007 Iliyan Jeliazkov + + * ace/Service_Config.h: + + Added conditional compilation around template specification + since ACE_TSS declares cleanup() only in multi-threaded builds. + +Wed Aug 1 12:14:17 UTC 2007 Olli Savia + + * ace/OS_NS_dirent.h: + Oops... Once again. + +Wed Aug 1 11:58:02 UTC 2007 Olli Savia + + * ace/OS_NS_dirent.h: + Fixed macro logic error once again. + +Wed Aug 1 09:50:51 UTC 2007 Olli Savia + + * ace/OS_NS_dirent.h: + Fixed macro logic error. + +Wed Aug 1 08:08:12 UTC 2007 Johnny Willemsen + + * ace/Service_Config.h: + Removed not needed semi colon + +Wed Aug 1 08:01:12 UTC 2007 Johnny Willemsen + + * ace/Service_Config.h (cleanup): + Changed argument to ptr, fixes some problems with BCB + +Wed Aug 1 07:39:12 UTC 2007 Johnny Willemsen + + * ace/ace_wchar.h: + Deprecated ACE_LIB_TEXT. Users can still use it, but not anymore + in the code that is in the distribution + +Wed Aug 1 07:30:12 UTC 2007 Johnny Willemsen + + * apps/drwho/Multicast_Manager.cpp: + * apps/drwho/Options.cpp: + Removed not needed fuzz disable statements + +Wed Aug 1 07:29:12 UTC 2007 Johnny Willemsen + + * netsvcs/lib/Time_Request_Reply.cpp: + * protocols/tests/HTBP/Reactor_Tests/test_config.h + Replaced ACE_LIB_TEXT with ACE_TEXT + +Wed Aug 1 07:27:12 UTC 2007 Johnny Willemsen + + * ace/Service_Config.h: + Fixed argument not used warning + + * apps/JAWS/clients/Blobby/Blob_Handler.cpp: + Removed ACE_LIB_TEXT in comment + + * bin/fuzz.pl: + Removed exception fuzz check. We have deprecated ACE_THROW + + * contrib/FaCE/FaCE.cpp: + * contrib/FaCE/FaCE.h: + * examples/ASX/Event_Server/Event_Server/Options.cpp: + * examples/ASX/UPIPE_Event_Server/Options.cpp: + * tests/Bug_2609_Regression_Test.cpp: + * tests/Bug_2610_Regression_Test.cpp: + * tests/Config_Test.cpp: + * tests/Proactor_Test.cpp: + * tests/Proactor_Test_IPV6.cpp: + * tests/Svc_Handler_Test.cpp: + Replaced ACE_LIB_TEXT with ACE_TEXT + + * tests/Bug_2975_Regression_Test.cpp: + Make sure we return the correct value out of main + +Wed Aug 1 06:51:11 UTC 2007 Olli Savia + + * ace/OS_NS_dirent.h: + * ace/OS_NS_dirent.inl: + Cleanup ACE_OS::rewinddir() code. + +Tue Jul 31 21:39:37 UTC 2007 Iliyan Jeliazkov + + * ace/Auto_Functor.cpp: + + Removed errant ChangeLog-like lines at the top of the file. + +Tue Jul 31 21:27:25 UTC 2007 Iliyan Jeliazkov + + * ace/Service_Config.h: + * ace/Service_Config.cpp: + + Moved the template specialization to the header file and made it + "inline". This resolved linking problems with some compilers, + which complained about either unresolved references or + multiply-defined instances of cleanup(). Bugzilla 2980. + +Tue Jul 31 18:48:25 UTC 2007 Abdullah Sowayan + + * ace/Auto_Functor.h: + * ace/Auto_Functor.inl: + * ace/Auto_Functor.cpp: + + Zapped ACE_THROW_SPEC + + * ace/Global_Macros.h: + + Guarded ACE_THROW_SPEC with ACE_LACKS_DEPRECATED_MACROS. The + ACE_THROW_SPEC macro now has been deprecated. + + The above changes fix bugzilla 3008. + +Tue Jul 31 18:37:12 UTC 2007 Johnny Willemsen + + * ace/OS_NS_dirent.h: + Removed ACE_STD_NAMESPACE for rewinddir, it causes compile errors + and fixed compile errors with Borland C++ Unicode + +Tue Jul 31 18:14:12 UTC 2007 Johnny Willemsen + + * ace/*.{h,cpp,inl}: + Replaced all occurences of ACE_LIB_TEXT with ACE_TEXT as noted in + bugzilla 3021 + +Tue Jul 31 17:15:47 UTC 2007 Olli Savia + + * ace/OS_NS_dirent.h: + Fixed compile error on platforms that define ACE_LACKS_REWINDDIR. + +Tue Jul 31 15:02:34 UTC 2007 Steve Huston + + * tests/Multicast_Test_IPV6.cpp: Added some more diagnostic output and + changed the enable-loopback sockopt from char to int to try and avoid + some platform issues, particularly on Windows. + +Tue Jul 31 14:45:35 UTC 2007 Abdullah Sowayan + + * contrib/utility/Utility/ReferenceCounting/DefaultImpl.hpp: + + Fixed a compile-time error. + +Tue Jul 31 13:02:30 UTC 2007 Olli Savia + + * ace/OS_NS_dirent.h: + * ace/OS_NS_dirent.inl: + Fixed compile error on platforms that define rewinddir + as a macro. + +Tue Jul 31 12:52:12 UTC 2007 Johnny Willemsen + + * m4/config_h.m4: + Fixed another few macros + +Tue Jul 31 12:24:12 UTC 2007 Johnny Willemsen + + * ace/Service_Config.h: + Add attribute name to cleanup prototype, Borland C++ needs it, + don't ask why + +Tue Jul 31 12:07:12 UTC 2007 Johnny Willemsen + + * m4/compiler.m4: + Don't add -O3 with Intel C++ + +Tue Jul 31 12:02:12 UTC 2007 Johnny Willemsen + + * ace/config-sunos5.5.h: + Added ACE_LACKS_PTHREAD_ATTR_SETSTACK + + * ace/config-sunos5.10.h: + Undef ACE_LACKS_PTHREAD_ATTR_SETSTACK + +Tue Jul 31 10:38:37 UTC 2007 William Otte + + * include/makeinclude/platform_macosx_tiger.GNU + + Added support for building universal binaries by specifying + universal=1 in platform_macros or command line. + +Tue Jul 31 09:39:43 UTC 2007 Abdullah Sowayan + + * contrib/utility/Example/ExH/BadCast/bad_cast.cpp: + * contrib/utility/Example/ExH/Compound/compound.cpp: + * contrib/utility/Example/ExH/HelloWorld/hello_world.cpp: + * contrib/utility/Example/ExH/LogicToSystem/logic_to_system.cpp: + * contrib/utility/Test/ExH/Compound/compound.cpp: + * contrib/utility/Test/ExH/Converter/converter.cpp: + * contrib/utility/Test/ExH/Logic/DescriptiveException/descriptive_exception.cpp: + * contrib/utility/Test/ExH/System/DescriptiveException/descriptive_exception.cpp: + * contrib/utility/Test/ReferenceCounting/DefaultImpl/default_impl.cpp: + * contrib/utility/Test/ReferenceCounting/Interface/interface.cpp: + * contrib/utility/Test/ReferenceCounting/SmartPtr/smart_ptr.cpp: + * contrib/utility/Test/ReferenceCounting/StrictPtr/strict_ptr.cpp: + * contrib/utility/Utility/ReferenceCounting/DefaultImpl.hpp: + * contrib/utility/Utility/ReferenceCounting/DefaultImpl.ipp: + * contrib/utility/Utility/ReferenceCounting/Interface.hpp: + * contrib/utility/Utility/ReferenceCounting/Interface.tpp: + * contrib/utility/Utility/ReferenceCounting/SmartPtr.hpp: + * contrib/utility/Utility/ReferenceCounting/SmartPtr.tpp: + * contrib/utility/Utility/ReferenceCounting/StrictPtr.hpp: + * contrib/utility/Utility/ReferenceCounting/StrictPtr.tpp: + * contrib/utility/Vault/hetero/map.hpp: + + Zap the usage of exception specification. + +Tue Jul 31 07:52:25 UTC 2007 Olli Savia + + * ace/os_include/os_dirent.h: + Removed #undef rewinddir. It may have broken compilation + on some platforms so ACE_OS::rewinddir() may need tweaking. + +Tue Jul 31 06:45:12 UTC 2007 Johnny Willemsen + + * ace/config-hpux-11.00.h: + HPUX doesn't have pthread_attr_setstack + +Tue Jul 31 05:14:35 UTC 2007 Iliyan Jeliazkov + + * ace/Service_Config.h: + * ace/Service_Config.cpp: + + Adding a forward decl for the partial specialization to silence + the Borland compiler, complaining about an already defined + template specialization. + +Tue Jul 31 05:19:12 UTC 2007 Johnny Willemsen + + * m4/config_h.m4: + Updated this file + +Tue Jul 31 04:13:34 UTC 2007 Abdullah Sowayan + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.h: + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp: + + Reverted changes made in: + Mon Jul 30 12:40:57 UTC 2007 Abdullah Sowayan + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp: + + Use ACE_TCHAR instead of char to address problems in + Redhat_Enterprise_Linux_3_Debug_Wchar build. + +Tue Jul 31 00:50:49 UTC 2007 Iliyan Jeliazkov + + * ace/Service_Config.cpp: + + By introducing a partial specialization of + ACE_TSS we ensure that _if_ ACE_TSS::cleanup() + is called before ~ACE_Object_Manager(), the TSS pointer will not + clobber the ACE_Service_Config it points to. Resolves bugzilla + 2980. Thanks to Patrick Bennett and Lothar Werzinger for + their input. + +Mon Jul 30 23:51:07 UTC 2007 Steve Huston + + * ace/TP_Reactor.h: Documentation improvements, including clarification + of the synchronization needs for I/O and non-I/O callbacks. Thanks + to Hal Black for motivating this. + + * THANKS: Added Hal Black. + +Mon Jul 30 22:50:40 UTC 2007 Steve Huston + + * tests/SOCK_Connector_Test.cpp: After rummaging through the hosts + list looking for other names, do sethostent(0) before endhostent(). + Resolves the funky interaction with this and getaddrinfo() on AIX + with IPv6 support which would, on the second lookup of the local + host's name, return an AF_INET6 struct with an IPv4 address. + Thanks to Phil Mesnier for co-laboring to work this little mess out. + +Mon Jul 30 18:17:12 UTC 2007 Johnny Willemsen + + * ace/config-cray.h: + * ace/config-cygwin32.h: + * ace/config-linux.h: + * ace/config-lynxos.h: + * ace/config-mvs.h: + * ace/config-tandem-nsk-mips-v2.h: + * ace/config-tandem-nsk-mips-v3.h: + * ace/config-tru64.h: + * ace/OS_NS_Thread.cpp: + * configure.ac: + Updated ACE_LACKS_THREAD_STACK_ADDR to + ACE_LACKS_PTHREAD_SETSTACKADDR to match naming conventions + +Mon Jul 30 18:03:12 UTC 2007 Johnny Willemsen + + * ace/config-cygwin.h: + Added ACE_LACKS_PTHREAD_ATTR_SETSTACK + +Mon Jul 30 15:08:12 UTC 2007 Johnny Willemsen + + * ace/config-lynxos.h: + Added ACE_LACKS_PTHREAD_ATTR_SETSTACK for LynxOS 4.0 + +Mon Jul 30 14:57:12 UTC 2007 Johnny Willemsen + + * bin/tao_orb_tests.lst: + All POA examples are now under tests + +Mon Jul 30 14:45:00 UTC 2007 Simon Massey + + * tests/Timer_Queue_Reference_Counting_Test.cpp: + * tests/Timer_Queue_Test.cpp: + + Minor memory leak fixes. + +Mon Jul 30 13:37:12 UTC 2007 Johnny Willemsen + + * configure.ac: + Make the signal handler a static to fix detection with Intel C++ + +Mon Jul 30 13:27:12 UTC 2007 Johnny Willemsen + + * configure.ac: + Fixed problem detecting ACE_HAS_MUTEX_TIMEOUTS. Thanks to + Peter Korf for reporting this. + +Mon Jul 30 13:24:32 UTC 2007 Chad Elliott + + * ace/Hash_Map_Manager_T.h: + + Made a minor grammatic correction in the Doxygen. + + * bin/PerlACE/Run_Test.pm: + + Fixed Perl warnings. + + * bin/tao_other_tests.lst: + + Added the new Notify Service monitoring unit tests. + +Mon Jul 30 12:55:12 UTC 2007 Johnny Willemsen + + * m4/compiler.m4: + Disable warning 1419 with Intel C++ + +Mon Jul 30 12:40:57 UTC 2007 Abdullah Sowayan + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.h: + + Use ACE_TCHAR instead of char to address problems in + Redhat_Enterprise_Linux_3_Debug_Wchar build. + +Mon Jul 30 12:03:12 UTC 2007 Johnny Willemsen + + * bin/package_copy_script.sh: + Add this script to the repo, used in the release process to copy + the archives with a release number + +Mon Jul 30 11:58:12 UTC 2007 Johnny Willemsen + + * ace/Mem_Map.{h,cpp}: + * ace/OS_NS_fcntl.{h,cpp}: + * ace/OS_NS_sys_mman.{h,inl}: + Updated mode argument to use mode_t as described by the posix spec. + This fixes bugzilla 2943. + +Mon Jul 30 11:24:12 UTC 2007 Johnny Willemsen + + * ace/Parse_Node.h: + Removed commented out code and improved documentation + +Mon Jul 30 11:19:12 UTC 2007 Johnny Willemsen + + * m4/compiler.m4: + Improved support for Intel C++ on Linux + +Mon Jul 30 10:21:56 UTC 2007 Vladimir Zykov + + * include/makeinclude/platform_sunos5_g++.GNU: + Added -z now linker option to gcc builds. This fixes + TAO/orbsvcs/tests/Bug_2285_Regression/run_test.pl, + TAO/orbsvcs/tests/Bug_2285_Regression/run_test2.pl, and + TAO/orbsvcs/tests/Bug_2287_Regression/run_test.pl in + corresponding build. + +Mon Jul 30 09:51:12 UTC 2007 Johnny Willemsen + + * configure.ac: + Added check for InterLocked methods + +Mon Jul 30 09:11:12 UTC 2007 Johnny Willemsen + + * include/makeinclude/platform_sunos5_ghs.GNU: + * include/makeinclude/platform_vxworks5.x_ghs.GNU: + Removed, these are not tested anymore and outdated. + +Mon Jul 30 07:55:12 UTC 2007 Johnny Willemsen + + * bin/generate_rel_manpages: + Removed support for dot_path, not supported by the doxygen + script anymore + + * bin/PerlACE/Run_Test.pm: + When waiting for files we sleep each time a second, changed this + to 50ms so that we don't loose time for each test, given the + fact that we have about 600 tests it could safe a few minutes + for a few test run. Thanks to Chad Elliot for providing these + changes + +Mon Jul 30 07:39:12 UTC 2007 Johnny Willemsen + + * configure.ac: + Added bswap_16, bswap_32, and b_swap64 + +Mon Jul 30 07:28:12 UTC 2007 Johnny Willemsen + + * configure.ac: + * m4/config_h.m4: + Added check for pthread_cond_timedwait. Thanks to Peter Korf + for delivering the patch. This also + fixes bugzilla 2836 which was reported by Norbert Thoden + + +Mon Jul 30 07:15:12 UTC 2007 Johnny Willemsen + + * ace/os_include/os_pthread.h: + * ace/OS_NS_Thread.cpp: + * configure.ac: + Changed the check for pthread_attr_setstack and added it to the autoconf + support. This fixes bugzilla 2476. Thanks to Jonathan Sprinkle + for reporting this + +Sun Jul 29 20:56:40 UTC 2007 Abdullah Sowayan + + * netsvcs/clients/Naming/Client/Client_Test.cpp: + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp: + * netsvcs/clients/Naming/Dump_Restore/createfile.cpp: + * netsvcs/clients/Tokens/manual/manual.cpp: + + Fixed ACE_OS fuzz warnings. Use ACE_OS calls instead of raw OS functions + where possible. If fuzz detected a false-positive, then disable + the ACE_OS fuzz check for that section of the code. + + * netsvcs/clients/Tokens/manual/manual.cpp: + + Untabify. + +Sat Jul 28 23:00:44 UTC 2007 Steve Huston + + * ace/Local_Name_Space.cpp: + Resolve 64-32-bit transition warnings. + + * ace/config-sunos5.5.h: Define ACE_MALLOC_ALIGN using a sizeof cast. + Makes it fit with the other ACE_MALLOC_* calculations in Malloc.h + without triggering 32/64-bit warnings. + +Sat Jul 28 22:50:12 UTC 2007 Steve Huston + + * tests/SOCK_Connector_Test.cpp: Added some additional diagnostics + re the address info that's being tried to easier note IPv4 vs. + IPv6 addresses. Also removed an ACE_ASSERT. + +Sat Jul 28 21:58:27 UTC 2007 Steve Huston + + * tests/Process_Manual_Event_Test.cpp: Added a hack to always delete + the underlying shared memory objects on AIX, primarily due to the + inability to neatly clean these objects up after a failed test. + See Bugzilla #2662 for further background. Also, added a delay + in the child process to allow the parent to initialize the event + objects. The race between the processes while the parent is + initializing the event objects can cause the child to hang. + +Sat Jul 28 18:56:12 UTC 2007 Johnny Willemsen + + * docs/bczar/bczar.html: + Small improvements + +Sat Jul 28 18:19:12 UTC 2007 Johnny Willemsen + + * configure.ac: + Added checks for byteswap.h, intrin.h, ia32intrin.h, and + ia64intrin.h, part of bugzilla 2905. + +Fri Jul 27 06:50:14 CDT 2007 Johnny Willemsen + + * ACE version 5.5.10 released. + +Local Variables: +mode: change-log +add-log-time-format: (lambda () (progn (setq tz (getenv "TZ")) (set-time-zone-rule "UTC") (setq time (format-time-string "%a %b %e %H:%M:%S %Z %Y" (current-time))) (set-time-zone-rule tz) time)) +indent-tabs-mode: nil +End: diff --git a/ACE/ChangeLogs/ChangeLog-93 b/ACE/ChangeLogs/ChangeLog-93 new file mode 100644 index 00000000000..0beb8e6321f --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-93 @@ -0,0 +1,52 @@ +Wed Dec 15 16:47:19 1993 Douglas C. Schmidt (schmidt@net4.ics.uci.edu) + + * Added a new parameter to the constructor and open() member + functions in the SOCK_Listener and LSOCK_Listener classes. This + parameter indicates that the SO_REUSEADDR option needs to be + applied before attempting to bind an address. + +Sun Nov 21 14:46:18 1993 Douglas C. Schmidt (schmidt@net4.ics.uci.edu) + + * Added a new file called "testconfig.h" in the include directory. + This file gives defaults for the hostname and server port + numbers used in the ./tests directory. + +Wed Nov 3 18:41:14 1993 Douglas C. Schmidt (schmidt@cupid.ics.uci.edu) + + * Released version 2.12. + + * Included Olaf Kruger's fix for templates/shared libs on Sun OS + 4. This solves a bunch of weird problems. Now, most of the + tests compile and run correctly on Sun OS 4! + +Mon Nov 1 17:47:30 1993 Douglas C. Schmidt (schmidt@cupid.ics.uci.edu) + + * Split the release into two parts: (1) the documentation and + papers and (2) the library source code and test examples. + + * Renamed and lightly redesigned the IPC_SAP* hierarchy. Now the + overall C++ wrapper abstraction for local and remote IPC is + called IPC_SAP. The specific wrappers for sockets, TLI, named + pipes, and STREAM pipes are called SOCK_SAP, TLI_SAP, FIFO_SAP, + and SPIPE_SAP, respectively. This cleans up the interfaces, + shares more code, and is much easier to explain. + + In addition, the Server_Daemon framework has been renamed the + Service Configurator framework, and the Server_Daemon class has + been renamed Service_Config. The documentation is being updated + to reflect these changes, as well. + + Note, the easiest way to upgrade existing apps is simply to use + perl as follows: + + % perl -p -i -e 's/Local_IPC/LSOCK/g;' *.[Chi] % perl -p -i -e + 's/IPC_SAP_FIFO/FIFO/g;' *.[Chi] % perl -p -i -e + 's/IPC_SAP_SPIPE/SPIPE/g;' *.[Chi] % perl -p -i -e + 's/IPC_SAP/SOCK_SAP/g;' *.[Chi] % perl -p -i -e 's/SAP_//g;' + *.[Chi] % perl -p -i -e 's/Server_Daemon/Service_Config/g;' + *.[Chi] + + etc. Note that the order in which you do this is important! In + addition, you need to check out your Makefiles, to be sure that + -lIPC_SAP linker lines are changed to include the appropriate + components. diff --git a/ACE/ChangeLogs/ChangeLog-94 b/ACE/ChangeLogs/ChangeLog-94 new file mode 100644 index 00000000000..09465ce823f --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-94 @@ -0,0 +1,1027 @@ +Fri Dec 23 01:50:50 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/ASX: Changed the behavior of Map_Manager::Map_Manager() + to allocate a default-sized buffer. + + * libsrc/Reactor/Reactor.C (dispatch): Made the poll-based Reactor + smarter about detecting POLLERR error conditions. When POLLERR + is detected, the Reactor now shutdown down that fd... + +Wed Dec 21 18:29:15 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/IPC_SAP/SPIPE_SAP: Changed the name of class SPIPE_Msg to + SPIPE_IO to reflect the fact that I/O over named pipes need not + be message-oriented... + + * Changed all occurrences of {SOCK,TLI,SPIPE}_Listener to + {SOCK,TLI,SPIPE}_Acceptor. This is a more accurate name for the + function these classes perform. In addition, it is easier to + explain in the context of the Acceptor and Connector patterns. + Note that the *.h files are also changed, as well. + + * Changed the implementation of {SOCK,TLI,SPIPE}_SAP so that there + is now a *_Connector class to go along with the *_Acceptor + class. The *_Connector is a factory that produces *_Stream + objects *actively*, in a similar way to how the *_Acceptor is a + factory that produces *_Stream objects *passively*. This makes + everything much more orthogonal, though it will break existing + code... The easiest way to fix existing code is to do the + following: + + 1. Find places in the code that define objects of + type SOCK_Stream, LSOCK_Stream, TLI_Stream, + or SPIPE_Msg (now called SPIPE_IO). + + 2. Replace #include "SOCK_Stream.h" with + #include "SOCK_Connector.h" (or whatever + C++ wrapper you have). + + 3. Replace definitions of the form: + + INET_Addr addr (port, host); + SOCK_Stream foo (addr); + + with + + INET_Addr addr (port, host); + SOCK_Stream foo; + SOCK_Connector con (foo, addr); + + If you don't want to have an extra variable named "con", + you can replace this with: + + INET_Addr addr (port, host); + SOCK_Stream foo; + SOCK_Connector (foo, addr); // Calls the constructor. + +Tue Dec 20 21:34:10 1994 Douglas C. Schmidt (schmidt@tango) + + * Renamed the ./{libsrc,tests}/{Semaphores,Message_Queues} + directories to SV_Semaphores and SV_Message_Queues to better + reflect their true behavior and in order to prevent clashes with + the new ASX names. + + * libsrc/ASX: Renamed Queue to Task to better reflect its true + functionality. In addition, renamed Message_List to + Message_Queue. + +Mon Dec 19 23:04:52 1994 Douglas C. Schmidt (schmidt@tango) + + * Changed "private" to "protected" in ASX/Message_List.h at the + request of Troy Warner (tnw1@core01.osi.com). + +Mon Dec 12 23:47:01 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/IPC_SAP/SOCK_SAP: changed the name of the global utility + function "bind_port()" to ace_bind_port() to avoid polluting the + global symbol namespace. + + * Fixed a descriptor leak in SOCK_Dgram::shared_open() and + SOCK_CODgram::shared_open(). The original version didn't + automatically close down the socket descriptor if bind failed. + The new version does close the descriptor down. + +Sat Dec 10 00:53:20 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/Reactor/Reactor.C (mask_ops): Fixed a stupid bug... The + test should have been + + if (this->invalid_handle (handle) || + this->poll_handles_[handle].fd == -1) + + rather than: + + if (this->invalid_handle (handle) || + this->poll_handles_[handle].fd != -1) + + * libsrc/Reactor/Reactor: Modified the semantics of + Reactor::remove_handler() such that calling it with a value of + Event_Handler::DONT_CALL or'd into the Reactor_Mask instructs + the Reactor to remove the handler *without* calling the object's + handle_close() method! + +Fri Dec 9 12:53:31 1994 Douglas C. Schmidt (schmidt@tango) + + * include/Synch: some C++ compilers (e.g., Centerline) barf when + the see the following in an inline function: + + if (foo == bar) + { + errno = result; + return -1; + } + result result; + + I fixed this by doing the following: + + if (foo == bar) + { + errno = result; + result = -1; + } + result result; + +Wed Dec 7 22:23:47 1994 Douglas C. Schmidt (schmidt@tango) + + * include/Synch.h: Added additional methods in the Null_Mutex + class in order to be consistent with the RW_Mutex interfaces... + + * libsrc/ASX/Message_List: Added new a set of methods called + "try_enqueue_head" and "try_enqueue_tail" that will only insert + a message into the queue if it is not already full. If it is + full, return EWOULDBLOCK. + +Tue Dec 6 13:58:28 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/Reactor/Event_Handler: added default values of -1 to the + handle_input(), handle_output(), and handle_exception() methods. + +Mon Dec 5 23:30:28 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/ASX/Message_List: Added a new method called set_length to + Message_Block. This method sets the length of the "active" + portion of the message. This is defined as the offset from + RD_PTR to WR_PTR. + +Sat Dec 3 20:40:53 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/Threads/Synch: Added two new class called Write_Guard and + Read_Guard, which provide functionality a la the Guard class, + only that they acquire and release readers/writer locks. + + * libsrc/Threads/Synch: For interface uniformity with other + synchronization wrappers I added an acquire() method. This is + implemented as a write-lock to be on the safe-side... + +Fri Dec 2 13:33:39 1994 Douglas C. Schmidt (schmidt@tango) + + * include/Synch.i (Mutex::tryacquire): Modified the behavior of + Mutex::tryacquire so that it will return -1 and set errno to the + appropriate return value of tryacquire(3T) if various types of + "problems" occur (such as the Mutex already being held). + + * include/Message_List.i: Rearranged the order of the + Message_Block::get_rd_ptr and Message_Block::set_wr_ptr methods + to deal with inlining problems that some cfront-based C++ + compilers have... + + * libsrc/Reactor/Signal.[hi]: Changed set_handler/get_handler to + "handler" to avoid a collision with Rogue Wave libraries. This + new version is more consistent with other usage in ACE anyhow... + + * Modified the behavior of Service_Config::Service_Config() so + that it makes the initialize size of the Reactor be the same + size as the Service_Repository. This was done at the suggestion + of Bob Sayle and Steve Warwick at ARINC Research. + +Sun Nov 20 00:59:06 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/ASX/Message_List: Added two new methods + (is_full() and is_empty()) to the public interface + of Message_List. These methods check whether the queue is full + or empty *while holding the lock*. + + * libsrc/ASX/Queue.h: Made the svc() method a pure virtual + function. This is much cleaner than not doing it, particularly + when we've already got to define open(), close(), and put()... + + * Added a new method to the IPC_SAP/Addr inheritance hierarchy. + The method is called addr_to_string() and it converts the + address of a subclass (e.g., either UNIX domain or Internet + domain) into a string. This functionality is particularly + useful in parameterized types (such as Acceptor), which should + be oblivious of the type of communication domain they are + using... + + * Reorganized the ./apps/Logger/Service_Configurator_Logger + directory in order to reuse more code. Now, all the Acceptor + pattern classes have been moved to a new subdirectory called + ./libsrc/Acceptor. In addition, this code has been generalized + to work with the ASX framework! + +Sat Nov 19 15:19:19 1994 Douglas C. Schmidt (schmidt@tango) + + * Released version 2.15.5 (added a couple of minor fixes and some + additional software to the release. In particular, I've added + the RPC++ C++ wrappers for Sun RPC. See the README file for + more info on this. + + * apps/Synch-Benchmarks: Reorganized all the synchronization tests + so that they would be easier to understand and extend. + + * include/sysincludes.h (ACE_NONBLOCK): Fixed a stupid typo in the + ./include/makeinclude/wrapper_macros.GNU file that accidentally + used ACE_NONBLOCKING instead of ACE_NONBLOCK... Jaysus + + * Fixed up the Service_Config.[Chi] source so that it no longer + allocates statically linked services via static variables. + Stacy Mahlon (mcs@contour.mayo.edu) recommended this change to + workaround bugs in compilers that fail to initialize static + objects appropriately. + +Tue Nov 15 11:55:03 1994 Douglas C. Schmidt (schmidt@tango) + + * Fixed a portability problem in the ./libsrc/Service_Configurator + that was caused by certain compilers failing to initialize + global variables correctly. In particular, the Obstack object + ace_obstack is now a pointer that is allocated dynamically by + Service_Config.process_directive(). Thanks to Stacy Mahlon + (mcs@contour.mayo.edu) for noticing this! + +Mon Nov 14 12:16:14 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/Threads/Thread.h: added C++ wrappers for + thr_getconcurrency() and thr_setconcurrency(). + + * Fixed a dumb typo in ./tests/IPC_SAP/SOCK_SAP/CPP-nbclient.C + that failed to conditionally compile for different variants of + siginfo... + + * Added some test programs that benchmark the performance of + Solaris synchronization mechanisms. See ./apps/Synch-Benchmarks + for details... + + * Extended the methods of the Queue class to take advantage of the + new Message_List methods that perform timed waits! This + involves changing many of the existing methods in this class to + add an extra parameter of type timestruc_t *, which defaults to + 0. + + * Added some new comments in the + ./include/makeinclude/wrapper_macros.GNU file that indicate what + the various macros defined by the Makefile scheme actually mean. + This should help people who are porting to a new system... + + * Fixed a dumb bug in ./tests/Shared_Memory that directly included + system header files. Everything in ACE should include + "sysincludes.h" instead... Thanks to Stacy Mahlon + (mcs@contour.mayo.edu) for noticing this! + + * include/Memory_Pool.i (round_up): Fixed a typo where PAGESIZE + should have been ACE_PAGE_SIZE. + +Sat Nov 12 01:32:52 1994 Douglas C. Schmidt (schmidt@tango) + + * Generalized the Shared_Memory_Pool class for Malloc so that it + doesn't require the base addresses for multiple processes to all + start at the same location. + + * libsrc/Service_Configurator/Thread_Spawn.i (Thread_Spawn): + + Fixed a stupid bug in the constructor. Note that we should + be checking if this->tm_ == 0, rather than != 0... + +Fri Nov 11 00:11:41 1994 Douglas C. Schmidt (schmidt@tango) + + * Released version 2.15.4 (added a couple of minor fixes). + + * Added a new test program in the ./tests/ASX/Message_List + directory. This program illustrates how thread-safe + Message_Lists work using ASX. + + * libsrc/Threads/Thr_Manager.i: Added a new method called + insert_thr() to Thr_Manager that is used in conjunction with + Thr_Cntl::Thr_Cntl to make sure that a thread is added to the + Thr_Manager's table correctly. + +Thu Nov 10 20:14:11 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/Log_Msg/Log_Record.C (print): Fixed the following very + subtle (and very stupid) bug: + + return ::fprintf (fp, this->msg_data_); + + if this->msg_data_ contains '%', then this call will + fail since fprintf tries to treat the percent sign as + a format code. The obvious fix is: + + return ::fprintf (fp, "%s", this->msg_data_); + + * libsrc/ASX/Message_List.i (is_empty): Fixed a braino that failed + to check if there was a 0-sized buffer in the list. It is now + possible to enqueue a 0-sized buffer, which is helpful for + things like signaling end of transmission by a producer. + + * libsrc/ASX/Message_List.C: Improved the robustness of the + Message_List abstraction by detecting the case where the newly + inserted Message_Block is a NULL pointer. Before, this would + crash the program, where now it returns -1 from the + enqueue_head() or enqueue_tail() methods. + + * libsrc/Threads/Synch.h: added timedwait_signal() and timedwait() + methods to class Condition. These are wrappers around the + cond_t cond_timedwait() function. + + * Improved the documentation of the class interfaces in the + Synch.h C++ wrapper for Solaris 2.x threads mechanisms. + + * Changed the name of class Condition methods wait_signal() and + timedwait_signal() to wait_alert() and timedwait_alert() to + remove confusion with UNIX signals and the regular condition + variable signal. + +Wed Nov 9 23:49:24 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/IPC_SAP/Addr/UNIX_Addr.i (UNIX_Addr): Fixed another + couple brainos in UNIX_Addr.i (thanks for Irfan + (ip1@cs.wustl.edu) for noticing this). + + * libsrc/IPC_SAP/SOCK_SAP/SOCK.i (get_local_addr): Fixed a braino + that didn't reset the Addr size after a call to getsockname(). + +Tue Nov 8 00:25:02 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/Service_Configurator/Svc_Conf.y (create_service_type): + Fixed a bug on lines 323 and 324, and 330 and 331. The "#if + defined" needs to be INSIDE the "case" statements. Thanks to + mcs@contour.mayo.edu for finding this! + + * Improved the interfaces for all the synchronization wrappers so + that they can be given all the parameters for the underlying + SunOS 5.x *_init calls. Default values are given to keep the + normal usage concise... + +Mon Nov 7 21:41:13 1994 Douglas C. Schmidt (schmidt@tango) + + * Changed all occurrences of Mutex_Rec to Recursive_Lock. This is + much more descriptive since by using templates, the recursive + logic applies to a number of synchronization mechanisms (e.g., + Semaphores, RW_Mutex, Mutex, Null_Mutex, etc.) rather than just + the Mutex class. + + * Changed all occurrences of Mutex_Block to Guard. This is more + standard terminology and reflects Booch's terms more closely, as + well. + +Sun Nov 6 14:31:44 1994 Douglas C. Schmidt (schmidt@tango) + + * Majorly improved the modularity and structure of the Reactor + class. Much duplicate code has been coalesced and several new + features have been added. + + * Changed the name of the Reactor method set_ready() to + ready_ops(). Added a new method called mask_ops(). These + methods make it possible to manipulate the "dispatch masks" and + the "ready masks" (e.g., READ_MASK, WRITE_MASK, etc.) at a much + finer level of granularity without loss of efficiency or + correctness. + +Sat Nov 5 16:48:55 1994 Douglas C. Schmidt (schmidt@tango) + + * Changed the name of three methods in the Semaphore class to + mirror the terms used for Mutex and RW_Mutex. This will help + support the use of semaphores along with templates (e.g., + Rec_Lock) much better... The old names were "wait", "trywait", + and "signal". The new names are "acquire", "tryacquire", and + "release." + + * Added a new class called Signal_Block in Signal.[hiC] This class + operates similar to Mutex_Block, in that it holds a set of + signals over the duration of a C++ statement block. The + constructor masks out the signals and the destructor restores + the signals. + + * Changed the name of files Signal_Handler.[hiC] to Signal.[hiC] + to reflect a broadening of the functionality of the ACE wrappers + for Signals. For example, the new C++ classes wrap the sigset_t + API, as well as the struct sigaction structure. + +Fri Nov 4 00:41:48 1994 Douglas C. Schmidt (schmidt@tango) + + * Yow, got the new Shared_Malloc/Malloc class to work correctly on + SunOS 4.x, as well as SunOS 5.x. It's a bit more clunky on + SunOS 4.x since we have to use System V semaphores rather than + Solaris synchronization mechanisms. However, it now seems to + function correctly! + + * Added a new method called "tryacquire" to Semaphore_Complex and + Semaphore_Simple. This method provides the same "non-blocking" + semantics as it does in the Mutex, Semaphore, and RW_Mutex + classes. + + * Added a new method called "remove()" to all the C++ wrappers in + the Synch.[hi] file. This improves the symmetry with the System + V semaphore wrappers, and also gets around a nasty bug with + cfront 3.x and its handling of templates and explicitly called + destructors... + + * Added a new C++ wrapper class for Threads (Thread.h). The + eventual purpose of this class is to hide the differences + between POSIX pthreads and Solaris threads. + + * Added new parameters to Thr_Manager::spawn to enable the stack + and stack_size to be passed in. + + * Modified the Synch.h file so that the Null_Mutex and Mutex_Block + classes will both be compiled, even if we are building ACE on a + platform that doesn't support threads! + + * Added a timed event-loop method to the public interface of the + Service_Config class. This basically forwards the request to + the underlying Reactor->handle_events method. Thanks to Brad + Needham (bneedham@arinc.com) of ARINC research for the + suggestion! + +Wed Nov 2 14:47:25 1994 Douglas C. Schmidt (schmidt@tango) + + * Changed the interface for one of the Reactor's + {register,remove}_handler methods. These methods + had previously taken a sigset_t &, but for some reason the Sun + C++ 3.0 compiler can't seem to recognize that this is different + from an int! Therefore, I changed the interface to take a + sigset_t *. + + * Fixed some portability bugs that crept into the SunOS 4 version + of ACE, particularly with the siginfo_t extended signal handler + stuff. + +Tue Nov 1 21:46:07 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/Log_Msg/Log_Msg.C (log): Fixed a braino on line 175. + "int sig" was undefined outside the conditional (duhhh ;-)). + +Thu Oct 27 17:23:37 1994 Douglas C. Schmidt (schmidt@tango) + + * Fixed up some problems with Semaphore_Complex and + Semaphore_Simple. The new design should be more functional, + particularly for Semaphore_Complex, which now generalizes to + arrays of semaphores. + +Wed Oct 26 16:38:42 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/Shared_Malloc/: Created a .i file for Malloc and + Memory_Pool to handle inlines. + + * Fixed a fence-post error in Mem_Map::map_it(). The new version + should correctly set the length of the file *and* also do the + appropriate memory mapping. + + * bin/clone.C: Fixed the clone program so that it now compiles + with the C++ compiler rather than the C compiler. + +Tue Oct 11 20:01:16 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/Reactor/Reactor.h (Reactor): Changed the order of the + arguments to the Reactor's register_handler() method used to + register signal handler objects. The new order puts both "new" + components first, and any + (optional) old components following this. This is + a more natural set of default values... + + * libsrc/Shared_Malloc: split out the Local and Shared memory + pools for class Malloc into the Memory_Pool.[hC] files. + +Mon Oct 10 22:54:53 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/Threads/Synch.i: Reworked the Thread_Mutex and + Process_Mutex classes to inherit their interface and + implementation code from Mutex... Thanks to Irfan Payrali for + the suggestion! + +Wed Sep 28 11:26:34 1994 Douglas C. Schmidt (schmidt@tango) + + * Moved some of the tests directories around to better reflect + precisely which ACE components are being tested. In particular, + the {client,server} directories that were originally under the + ./tests/Reactor subtree are now located in the + ./tests/Service_Configurator subtree. + +Tue Sep 27 23:05:32 1994 Douglas C. Schmidt (schmidt@tango) + + * Added a bunch of constructors/destructors for + ./tests/Reactor/server to make g++ happy. + + * libsrc/Service_Configurator/Service_Object.[ih] + (Service_Object): Added a constructor and destructor to + Service_Object to make g++ happy. Also, removed the #if for + broken versions of g++ 2.5.8. + + * include/Reactor: Added a constructor and destructor for + Null_Callback to make G++ happy... + + * libsrc/Message_Queues/: Added support for G++ templates. + + * Changed the handling of _sys_siglist in the sysincludes.h file + to try and handle the weird SunOS 4 header file problems... + + * libsrc/IPC_SAP/SOCK_SAP/SOCK_Dgram_Brdcast.C (mk_broadcast): + Removed the "struct" from new struct ifnode in order to + compile... + +Tue Sep 20 11:17:23 1994 Douglas C. Schmidt (schmidt@tango) + + * Fixed a couple of minor typos in the Windows NT C++ wrappers for + sockets. + + * Released version 2.15.2 so that Mark Frutig could have access to + the latest source in order to write man pages! + +Thu Sep 15 20:47:36 1994 Douglas C. Schmidt (schmidt@tango) + + * Extended the Event_Handler interface to support the additional + siginfo_t-style parameters for extended SVR4 signal handling. + Note that for backwards compatibility, this new interface only + enabled if the -DACE_HAS_SIGINFO flag is set in the + wrapper_macros.GNU config file. Making this change affected + several of the existing ACE classes such as Service_Config and + Signal_Handler. + +Mon Sep 12 17:07:10 1994 Douglas C. Schmidt (schmidt@tango) + + * Improved the modularity of the Reactor by creating a new class + called Signal_Handler. This new class basically encapsulates + the signal handling mechanism provided by UNIX within a nice OO + abstraction. The new arrangement is particularly useful since + the Signal_Handler class may be used in applications + (e.g., the Malloc class abstraction) that do not require the + other features of the Reactor. + +Sun Sep 11 14:40:06 1994 Douglas C. Schmidt (schmidt@tango) + + * Changed the default value for Semaphore_Simple and + Semaphore_Complex from OPEN to CREATE. This is more closely + related to how SunOS thread synchronization variables work. + + * Changed the methods of the Semaphore_Simple class to be + syntactically equivalent to the Process_Mutex and Thread_Mutex + classes. This makes it easier to write code that uses + parameterized types to instantiate the appropriate type of + synchronization primitive. + + * include/makeinclude/rules.local.GNU (OBJDIRS): Fixed the + "depend" target so that it generates the correct dependencies + for remaking .so files after they are changed. + + * Added a new pair of methods to the Reactor so that it is now + possible to register/remove a sigset_t of signals in one + operation. + +Sat Sep 10 03:11:34 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/Mem_Map/Mem_Map.i (map_it): Fixed a few minor bugs with + how the Mem_Map::map() method handles lseek()'s. + + * Changed the name of the Mem_Map::open() methods to + Mem_Map::map(). This seems like a more reasonable name! Also, + removed the close() method. This is trivial to implement via + ::close (mmap.get_fd ()); + +Fri Sep 9 22:04:25 1994 Douglas C. Schmidt (schmidt@tango) + + * Provided a new implementation of a flexible memory allocation + scheme (Shared_Malloc/Malloc.[HiC]). This memory allocation can + be parameterized by the following: + + 1. The pool from which memory is allocated (e.g., + local memory vs. shared memory). + + 2. The type of synchronization used when allocating + the memory (e.g., no synchronization, thread-based + synchronization, process-based synchronization). + + * libsrc/Threads/Synch.i (Proc_Mutex): Added new classes to the + Synchronization library. These classes are wrappers around the + USYNC_PROCESS and USYNC_THREAD flags to mutex_init(). + +Wed Sep 7 20:29:00 1994 Douglas C. Schmidt (schmidt@tango) + + * include/sysincludes.h (MT): Added check to see if _REENTRANT was + already defined, and if so, avoid redefining it! + +Sun Sep 4 16:23:17 1994 Douglas C. Schmidt (schmidt@tango) + + * Released version 2.15.1 to the world... + + * Added support for the Windows NT version of SOCK_SAP. + + * Fixed a few minor bugs involved with the order of linking + libraries. + + * Fixed an oversight in ./testsReactor/server/server_test.C where + I was still including the "Server_Test.h" file (ugh). + +Wed Aug 31 13:27:10 1994 Douglas C. Schmidt (schmidt@tango) + + * libsrc/IPC_SAP/SOCK_SAP/SOCK_Stream.C (open): Fixed a bug + whereby the I/O descriptor wasn't being closed if connect() + failed. Thanks to Charles Eads + (eads@synoptics.com) for reporting this. + + + * Recompiled everything on SunOS 4.x using SunC++ 3.x and SunOS + 5.x using SunC++ 3.x and 4.x. Everything seems to compile fine + now. + + * Released version 2.15 + +Mon Aug 29 00:14:04 1994 Douglas C. Schmidt (schmidt@tango) + + * Finished up a preliminary set of tests for ASX. See the + $WRAPPER_ROOT/tests/ASX/Event_Server directory for more details. + + * wrapper_macros.GNU (CC): Removed the ARCHFLAG from the CCFLAGS + macro in the Makefile system. Henceforth, all conditional + compilation should be performed on a "per-feature" basis, rather + than a "per-platform" basis... + + * libsrc/IPC_SAP/SOCK_SAP/SOCK_Dgram_Brdcast.C (send): + Automatically convert the port number to htons format before + using it to initialize the sin_port field of the addressing + structure. This is consistent with the behavior of other parts + of IPC_SAP (particularly INET_Addr::set()). + +Sun Aug 28 00:02:53 1994 Douglas C. Schmidt (schmidt@tango) + + * Changed version number of 2.15 to reflect all the major + modifications to the structure of ACE. + + * include/sysincludes.h: Started to fix up the conditional + compilation scheme to be much smarter about the features that + are available from both the compiler and the OS environment. + + * Added a fix suggested by Leslee Xu (lxu@ics.uci.edu) to better + handle the normalization of Timer_Values. + + * Continued to make ACE coding conventions more consistent by + removing get_/set_ prefix from all the accessor/manipulator + methods. Also, added an underbar at the end of all class and + object instance variables. + +Sat Aug 27 20:28:13 1994 Douglas C. Schmidt (schmidt@tango) + + * Continued to improve error handling by replacing all uses of + perror with the Log_Msg macros. + + * include/sysincludes.h: Continued to improve the namespace + utilization in ACE by prefixing stand-along Misc functions with + ace_. + + * include/FD_Set.h: Changed the name FD_Set_Iter to + FD_Set_Iterator. + + * typedef'd int to HANDLE in Event_Handler.h in preparation for + merging in the Windows NT support along with the regular ACE + package. I need to update all the other code in the entire + release to be consist with this! + +Thu Aug 25 19:49:57 1994 Douglas C. Schmidt (schmidt@tango) + + * Fixed a bug with Thr_Manager.i that occurred if a thread created + by ::thr_create() exits prior to the acquisition of the lock and + the subsequent bookkeeping. + +Wed Aug 24 17:34:49 1994 Douglas C. Schmidt (schmidt@tango) + + * Updated SOCK_Dgram_Brdcast to return the average number of bytes + sent. This isn't necessarily the most useful info, but it + doesn't hurt either. Thanks to Mark Frutig (mfrutig@fnbc.com) + for the suggestion. + +Mon Aug 22 01:18:14 1994 Douglas C. Schmidt (schmidt@tango) + + * Added a new test for the Service Configurator framework. This + test illustrates the dynamic configuration of an entire stream + of Modules. + +Sun Aug 21 03:16:00 1994 Douglas C. Schmidt (schmidt@tango) + + * Cleaned up the ./tests/Reactor/server example to be more robust. + In particular, it doesn't really make sense to have the same + object be configured both statically and dynamically *at the + same time*! This was causing problems since each constructor + was getting called twice for the same object -- once when it was + created statically, and again when it was linked in + dynamically... Things work much better now. + +Sat Aug 20 01:07:24 1994 Douglas C. Schmidt (schmidt@tango) + + * Heavily revised the structure of the ./apps/Logger + subdirectories to test out the new Makefile scheme. Everything + is working fine on Solaris! + + * Updated all the ./apps/Logger subdirectories to use the Acceptor + name rather than the Client_Listener name. This is consistent + with recent papers... + + * Fixed all the Makefiles to utilize the new simplified build + strategy. The Makefiles are *far* more automated now! + + * Added support to all the libsrc Makefiles to produce both shared + libraries (*.so) and traditional archives + (*.a). + +Fri Aug 19 16:13:42 1994 Douglas C. Schmidt (schmidt@tango) + + * Majorly improved the Makefile support for building shared + objects that will be dynamically linked explicitly. No longer + will we have to do the horrible hack of compiling all the source + code using -pic. Instead, only that code that will be linked + dynamically must be compiled with -pic! Note that this only + works if the shared object is entirely self contained (i.e., it + does *not* reference any statically linked symbols that are not + defined in itself)! + + * Started to add changes to the source code to make its + configation driven by features rather than by OS. This should + make everything much more portable soon! + + * Fixed IPC_SAP.h so that the constructor is protected (prevents + accidental definition of an instance of this class). + +Thu Aug 11 08:31:33 1994 Douglas C. Schmidt (schmidt at valentine.ics.uci.edu) + + * Fixed Reactor::schedule_timer() so that it will unblock the + Reactor if it is currently blocked. This is necessary so that + the Reactor will recompute the amount of time that it needs to + wait before dispatching timer-based events. Thanks to Todd Hoff + for noticing this... + + * Fixed a stupid bug in the handle_input() method of + Client_Listener in both the Reactor and Service_Configurator + version of the Server Logging Daemon. This routine was not + explicitly returning 0 when it worked..., which might cause the + Reactor to deregister the listener handler! + + * Added casts to the ::select() call in the Reactor to ensure that + the FD_Set * -> fd_set * conversion operators are properly + involved. Thanks to Todd Hoff for this fix (thm@ictv.com). + Todd noticed that the DCE pthreads implementation on AIX was + confusing the compiler... + +Mon Aug 8 18:11:03 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Added a new constructor for the FD_Set class that will convert + an fd_set into an FD_Set. + + * Removed the default value for the Service_Repository constructor + since this was ambiguous with the default constructor. + +Tue Aug 2 18:25:28 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Fixed a bunch of minor "warning-causing" nits that were caused + by #endif __INLINE__ in certain header files... + + * Added a new set of interfaces to the Reactor to retrieve a + registered handler. These interfaces are also useful for + checking whether a handler is registered at a particular fd. + +Sun Jul 10 17:43:19 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Improved the implementation of the Profile_Timer and + High_Res_Timer classes. In particular, the High_Res_Timer class + now works quite nicely using SunC++ 4.0. + +Mon Jul 4 12:49:14 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Changed the order of the base class inheritance list for the + Service_Object class as a workaround for a bug in SunC++ 4.0's + handling of pointers to member functions (ugh). + +Sun Jul 3 18:07:16 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Added a bunch of changes (courtesy of + george@truffula.fp.trw.com). These changes fix minor + portability problems with the new SunC++ 4.0 compiler. + +Fri Jun 24 08:59:02 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Removed operator() from all the IPC_SAP listener classes. + Defining this operator was causing more trouble than it is worth + since C++ doesn't allow operator() to have default arguments + (ugh). The "right" thing to do is to simply use the accept() + method in those classes instead of operator(). + +Wed Jun 22 16:54:05 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Fixed some problems with TLI_Listener that involved lax scoping + of nested classes with cfront 3.x-based C++ compilers. + +Tue Jun 14 11:56:56 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Added a bunch of changes to get portions of ACE up and running + on SCO UNIX, on HP-UX, and on OSF/1. + +Tue Jun 7 14:32:50 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Added support for FLEX's <> symbol to properly cleanup when + a configuration file has been parsed by the Service + Configurator's lexer/parser. + +Sun May 22 10:37:14 1994 Douglas C. Schmidt (schmidt at valentine.ics.uci.edu) + + * Modified the semantics of explicit dynamic linking on SunOS 4.x. + Now, if there is no _init or _fini function defined in a shared + library, it isn't an error (we simply don't call the function!). + +Mon May 9 07:58:35 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Included more fixes for GNU G++ courtesy of Aniruddha Gokhale + . + +Thu May 5 16:47:25 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Reimplemented the ./apps/Logger/Reactor_Logger to provide an + illustration of how the Reactor works. + + * Added finishing touches to the new version of the Service + Configurator framework. This framework now permits completely + automated configuration and reconfiguration of Service_Objects + and Streams. The next step is to add some more complete + examples that illustrate how these features are used... + +Tue May 3 10:17:12 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Fixed a bug in the Service Repository that would cause an + extraneous dlclose on a shared library handle under some + circumstances... + +Mon May 2 11:07:52 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Modified the semantics of Service_Object_Type in the Service + Configurator framework so that it does not automagically + register the service object with the instance of the Reactor. + The original behavior involved too much "over-specification" of + the behavior of Service Objects. Moreover, I can finally omit + the crazy semantics of DONT_REGISTER_SVC and REGISTER_SVC! + + * Fixed some subtle bugs involved with pop'ing a remove'ing a + Module from a Stream. Note that we need to use Module::link + rather than Module::set_next in order to ensure that all the + necessary pointers get rearranged.... + + * Fixed a couple of minor problems with deleting const objects in + the Service_Repository.i file. These were caught by G++, but + not caught by SunC++! + +Sun May 1 11:43:52 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Fixed subtle bug in Server_Config::run_event_loop(). This bug + prevented reconfiguration from occurring under certain + circumstances. + + * Added a new feature to the Service_Manager class in the Service + Configurator framework. This new feature enables the Service + Configurator to be reconfigured remotely by clients. + + * Fixed a bug in Service_Manager that caused the Service + Configurator to crash if SIGPIPE occurred if a client closed + down ungracefully while retrieving information on active + services. + + * Added a new argument to the Reactor::register_handler() method + that is used to register signal handling Event_Handlers. This + new argument returns the current Event_Handler (if any) that is + registered for this signal. + + * Fixed a potential bug in Service_Config::process_directives that + behaved improperly when there was no svc.conf file present in a + directory. + +Wed Apr 27 12:55:46 1994 Douglas C. Schmidt (schmidt at mabillon.ics.uci.edu) + + * Changed the name of Service_Directory to Service_Manager to + reflect its intended functionality + +Mon Apr 25 10:53:01 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Updated the Service Configurator framework to use the new signal + handling facilities provided by the Reactor. This cleans up a + lot of the code in Service_Config.i and removes the need for + ugly non-reentrant static class variables. + + * Released version 2.14 + +Sat Apr 23 14:29:11 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Changed the representation of the select()-based Reactor to be + more similar with the poll()-based Reactor. In particular, + there is only one array of Event_Handlers rather than three... + +Sun Mar 13 16:49:59 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Fixed a bug with the select-based version of the Reactor. This + bug caused problems when dispatching the handle_output() member + function. + + * Fixed a bug with the select-based version of the Reactor. This + bug resulted in a failure to call the handle_close() member + function on the write_fds and except_fds. + + * Changed the interface for Event_Handler::handle_close() so that + the second parameter is a Reactor_Mask. This allows the + call-back routine to determine which side of a connection (i.e., + read-side vs. write-side or both) to close down. Be careful + since this change may break existing code that used the original + 1 argument handle_close() member function. + + * Changed the location of the Reactor_Mask. It was originally an + enum in Reactor.h. It is now a typedef in Event_Handler. This + change will break existing code but it easily spotted since the + compiler will give an error! + +Sat Mar 12 15:16:59 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Continued to modify the grammar of the svc.conf file language. + The latest version (illustrated in configuration files in the + ./tests/Reactor/server and + ./apps/Logger/Service_Configurator_Logger file) is both easier + to read and to parse automatically. + +Tue Mar 8 10:19:40 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Changed the behavior of the Get_Opt class so that it will + perform option processing starting from argv[0] rather than + argv[1] if the SKIP argument to the constructor is set to 0. + Note that the default value is 1, so the behavior is the same + for backwards compatibility. Incidentally, this new change is + necessary to support the Service Configurator stuff... + + * Changed the names of some of the Service_Record member functions + to conform to the new idiom for naming get/set-style of member + function accessors... + +Sun Mar 6 12:47:03 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Removed libGet_Opt.a and merged it in with libMisc.a + +Sat Mar 5 18:37:43 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) + + * Updated the Service_Config class to use a flex/yacc based parser + rather than an ad hoc parser and lexer. This is useful since + the new syntax for configuring a complete Stream into a Service + Configurator-based application is more complicated... + + * Made a small change to the syntax of a svc.conf file. Now any + parameters that are passed to the Service_Object::init() member + function of a dynamically linked service must be enclosed inside + of double quotes. In other words, service config entries such + as + + dynamic ./dev_adapter.so:_alloc () Device_Adapter -p 3000 + + now become + + dynamic ./dev_adapter.so:_alloc () Device_Adapter "-p 3000" + + This change makes it easier to parse the input using flex/yacc. + +Sat Feb 12 18:53:14 1994 Douglas C. Schmidt (schmidt@net4.ics.uci.edu) + + * Modified the Reactor so that it now also demultiplexes signals, + as well as timer events and I/O events. This required making a + few sections of the Reactor code signal-safe, as well as + thread-safe. + + * Changing the Reactor to handle signals also required a slight + change to its interface. For example, it is now mandatory to + give the Event_Handler::{READ_MASK,WRITE_MASK,EXCEPT_MASK} when + registering a handler... + +Sat Feb 5 12:10:53 1994 Douglas C. Schmidt (schmidt@net4.ics.uci.edu) + + * Changed the Condition and Monitor classes to use templates that + parameterize them with the appropriate type of Mutex (i.e., + either Mutex or Mutex_Rec). This greatly cleans up the code... + Made a number of changes in other files + (such as the Reactor) to account for the changes. + + * Added a new class called Mutex_Rec which implements a recursive + Mutex abstraction on SunOS 5.x. Recursive Mutexes may be + acquired multiple times from a single thread. Basically, this + supports an efficient and clean way of handling nested locking + conditions. + +Thu Feb 3 12:37:34 1994 Douglas C. Schmidt (schmidt@net4.ics.uci.edu) + + * Fixed a bug in Service_Config.i that was causing SIGHUP-driven + reconfiguration not to work correctly. + + * Added a set of new member functions to the Reactor class to + suspend() and resume() an event handler. Also added suspend() + and resume() member functions to the Server_Object class to take + advantage of these new facilities automagically... + +Mon Jan 31 09:47:06 1994 Douglas C. Schmidt (schmidt@net4.ics.uci.edu) + + * Modified the no-args constructor for the Reactor to initialize + it to the DEFAULT_SIZE. The prior behavior was *not* to + initialize it at all, which seems rather dumb in retrospect... + + * Improved the Reactor's support for multi-threading by adding a + pipe() call that is used to force the Reactor to reconfigure + itself everytime a new handler is registered or removed. + Previously, any new changes wouldn't take place until the + Reactor was triggered by some external event. This old behavior + was too non-deterministic... + +Sun Jan 2 12:35:39 1994 Douglas C. Schmidt (schmidt@net4.ics.uci.edu) + + * Modified the inheritance hierarchy for Service_Object so that it + derives from both Shared_Object and Event_Handler. + Shared_Object is a new abstract base class the provides an + interface for dynamic linking of objects. When RTTI is widely + available for C++ the Service Configurator will be much more + functional since we can automatically figure out whether an + object is a Service_Object or just a Shared_Object and do the + right thing with it! + diff --git a/ACE/ChangeLogs/ChangeLog-95 b/ACE/ChangeLogs/ChangeLog-95 new file mode 100644 index 00000000000..429e5681fdc --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-95 @@ -0,0 +1,4179 @@ +Sun Dec 31 01:02:01 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS (mmap): Added a new parameter to the argument list for + mmap(). This parameter is an ACE_HANDLE * and is used in the + Win32 implementation, which requires CreateFileMapping to open a + new HANDLE. This handle is passed back to the caller, which is + then responsible for freeing it... I'll probably need to modify + the ACE_Mem_Map class to manage this new handle for the WIN32 + version. + + * ace: Updated all the SPIPE files in preparation to porting them + to Windows NT, where they will be implemented using Win32 Named + Pipes! + + * ace/Typed_SV_Message: Fixed a mysterious braino where the method + definitions for Typed_SV_Message were actually within + Typed_SV_Message_Queue.cpp. I'm not sure why this happened, but + it's clearly been this way for eons... Also, changed the name + of the method "max" to "max_size" to avoid conflicts with macros + on Windows NT... + + * ace: Added a new config symbol: ACE_HAS_SYSV_IPC. If this is + *not* set (e.g., Win32) then don't try to compile any of the + System V IPC mechanisms (e.g., shared memory, message queues, + semaphores). + + * ace/Malloc: Reimplemented the Malloc-family to factor out common + code. Also added a new method called "trybind" which atomically + tries to bind a new void *pointer to a char *name. If there is + no name with the same value, the bind succeeds. Otherwise, the + bind "fails", but returns the existing pointer. + + * ace/Map_Manager: Reimplemented the Map_Manager to factor out + common code. Also added a new method called "trybind" which + atomically tries to bind a new int_id to an ext_id. If there is + no ext_id with the same name, the bind succeeds. Otherwise, the + bind "fails", but returns the existing int_id. + + * ace/Memory_Pool.cpp: Commented out all the diagnostic messages + in the various ACE_*_Memory_Pools. Now that we're actually + using this within ACE, they were distracting. + + * ace/CORBA_Handler.cpp (ACE_ST_CORBA_Handler): Gave iterations_ + an initial value of "5" for backwards compatibility. Thanks to + Irfan for doing this. + + * ace/Map_Manager.cpp (ACE_Map_Manager): Fixed some more braino in + the constructors of Map_Manager. During the recent changes I'd + forgotten to initialize the Map_Manager's instance variables to + 0. Thanks to Irfan for finding this out the hard way... ;-) + + * ace/OS.i (gettimeofday): Added a WIN32 implementation of + gettimeofday. This is pretty nasty, but it should centralize + all of this processing in one place in ACE! + +Sat Dec 30 00:50:20 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Timer_Queue: Removed the current_time() method from the + Timer_Queue class. All uses will be replaced with calls to + ACE_OS::gettimeofday(). Not only does this factor out more + code, but it is also reentrant! + + * ace/ACE.cpp (handle_timed_accept): Consolidated code so that + select() is always used, rather than poll(). + + * ace: Generalized the ACE file locking wrappers (both at the + Synch-level and the ACE_OS class level) to enable them to lock + arbitrary regions (aka "records") of a file. Before, they could + only lock the entire file (which remains the default behavior). + This new behavior works for both NT and UNIX. + + * ace/Synch: Removed the definition and use of the + ACE_SYNCH_ERROR_RETURN macro from all the ACE Synch* methods. + This behavior has been integrated into the ACE_OS class instead + since it cleans up lots of code that would otherwise have been + hard to write. + + * ace/INET_Addr.cpp (get_host_name): Fixed a bug that arose by + trying to use the reentrant version of gethostbyaddr all the + time. In order to fix this, I've added a new get_host_name() + method that allows the caller to supply a buffer for the + hostname. + + * ace: Cleaned up all the POSIX_TIMER junk that permeated ACE. + Now all platforms will have the POSIX timer structures (e.g., + timestruc_t and timespec), though only those that actually + support nano-second timing will be able to do anything useful + with this... As part of this cleanup, the poll, select, and + cond_timedwait method in ACE_OS now take ACE_Time_Value * rather + than int, timeval *, and timestruc_t, respectively. This + *greatly* cleans up the clutter throughout the rest of ACE. + + * ace/ACE: Added two new methods called tv2msec and msec2tv that + converts ACE_Time_Value format into millisecond format and vice + versa. This will make it easier to port code between NT and + UNIX. + + * ace/Reactor: Removed the code in the Reactor that previously + allowed it to be resized after it had been initialized. This + code no longer was used due to the recent enhancements that + ensure the Reactor is only initialized once per-process. + + * ace/Reactor: Modified the Reactor so that it now compiles on NT. + It doesn't work yet, but at least it compiles! + + * ace/Reactor: Moved the "max3" method from the Reactor to OS.h, + where it has become a template function usable throughout ACE. + + * ace/OS.cpp: Added extern "C" before the NT implementations of + readv() and writev(). + + * ace/OS.i: Fixed the declaration of ::readv() and ::writev() for + cases where the OS doesn't provide them natively. + + * ace/Event_Handler: Modified handle_signal() to take an int + rather than an ACE_HANDLE. The old way broke under NT... + + * ace: Made lots of minor changes to resolve signed int + vs. unsigned int mismatches. Thanks to the MSVC++ 4.0 compiler + for pointing these out. At least it's good for + something... ;-). + +Fri Dec 29 15:01:10 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/ACE.cpp (handle_timed_accept): Reimplemented the core + select() loop to make the code portable to Win32. + + * ace/Map_Manager.cpp (ACE_Map_Manager): Fixed a minor bug caused + by recent changes (forgot to initialize max_size_ in the + constructor...). + + * Updated all the manual pages to reflect the latest changes. + + * ace/ACE.cpp: Fixed up the ACE class so that all of the methods + should compile on both Windows NT and UNIX! + + * ace/OS: Moved the get_file_size() method from class ACE and put + it into class ACE_OS, where it's been renamed to filesize(). + This is really more of an "OS" function, e.g., it's supported on + Win32 directly. + + * ace/OS.cpp: added readv() and writev() implementations for those + platforms (e.g., Windows NT) that require them. + + * ace/Makefile: Added a new regex to the Svc_Conf_l.cpp target + that will substitute for . This should solve a + portability problem with Windows NT... + + * ace/Malloc: Modified the sync() and protect() methods to use + void * rather than char *. This is now consistent with the OS + classes. + + * ace/OS: Changed things so that all the mmap() related OS + wrappers use void * in their external interface. Any + discrepancies between platforms are now dealt with internally, + in the implementation of the methods. Thanks to Chris Lahey + (clahey@ix.netcom.com) for suggesting this. + + * ace/Local_Name_Space: Modified how ACE_NS_String is used to + instantiate ACE_Map_Manager in order to work around problems + with AIX C++. Thanks to Chris Lahey (clahey@ix.netcom.com) for + reporting this. + + * ace/Synch.i: Added a definition for ACE_RW_Mutex::acquire(). + +Fri Dec 29 00:34:16 1995 Chris Lahey (clahey@ix.netcom.com) + + * ace/OS.h: Changed the #ifdef for ACE_HAS_COMPLEX_LOCKS to + ACE_HAS_COMPLEX_LOCK. + + Changed prototypes for ACE_OS:mprotect(), msync(), and munmap() + to accept ACE_MMAP_TYPE for their first arg. The AIX versions + of these calls all expect void * for their pointer variable. + Note that madvise() takes a caddr_t for its 1st arg and + therefore does not need to be altered. (See related changes in + OS.i and Mem_Map.i) + + Changed prototype for ACE_OS::getsockname(), arg3 to int * (See + related change in OS.i) + + Changed prototype for ACE_OS::setsockopt(), arg4 to const char * + and arg 5 to int (See related change in OS.i) + + * ace/OS.i: Changed function definition for ACE_OS::mprotect(), + msync(), and munmap() to accept ACE_MMAP_TYPE as their 1st arg. + + The following changes relate to the inconsistencies in the + sockets calls on AIX. I thought it would make more sense to + leave the public interfaces alone and then handle the + differences internally. That way it won't break any exisiting + code. + + Changed function definition for ACE_OS::getsockname() to accept + arg3 as int *. Made similar changes in ACE_OS::setsockopt() - + change definition to accept const char * for arg4 and int for + arg5. Add the following code at the start of the function: + Also made changes to ACE_OS::recvfrom() - change arg 6 back so it is + int *. + + * ace/Mem_Map.i: In ACE_Mem_Map::advise(), cast 1st arg to + ACE_OS:madvise() to (caddr_t). + + * ace/Memory_Pool.cpp: In ACE_MMAP_Memory_Pool::acquire(), make + cast to char * in the return statement. In + ACE_MMAP_Memory_Pool::handle_signal(), also make same cast in + the ACE_DEBUG statement near the top of the function. + + * ace/Reactor.cpp and ace/Reactor.h: ACE_Reactor::handler_i() + doesn't return properly if *eh != 0. Remove last "else" so + function always returns 0 if handler != 0. + + In ACE_Reactor::owner(), we need to change signature since + thread_t is not an integer. This has been changed to int + ACE_Reactor::owner(thread_t *t_id); The last two lines have been + changed to: *t_id = this->owner_; return 0; + + * ace/Synch.cpp: In ACE_Condition_Mutex::wait(), the call to + cond_timedwait() does not exist, but ACE_OS::cond_timedwait() + does exist. It takes the same arguments. + + * ace/Synch.h and ace/Synch_T.h: At the end of both files, before + the #define INLINE check for this define's existence to avoid + causing compilers to choke. + + * ace/Mem_Map.i: In ACE_Mem_Map::operator(), the return statement + looked very odd. In the assignment to addr, why is the ", 0" in + the statement? + +Fri Dec 29 00:34:16 1995 Douglas C. Schmidt (schmidt@lambada.cs.wustl.edu) + + * ace: Fixed up many minor problems with the various types of + Shared_Memory wrappers. This mostly entailed changing from char + * to void * to be more consistent with the other parts of ACE. + In addition, I now only include the *.i files if __INLINE__ is + enabled. + + * ace/Memory_Pool.cpp (map_file): Fixed a minor bug by enabling + MAP_FIXED if we're trying to map a file using a fixed address. + +Thu Dec 28 18:39:16 1995 Douglas C. Schmidt (schmidt@merengue.cs.wustl.edu) + + * ace/Local_Name_Space.cpp: Finished implementing changes to the + ACE_Malloc stuff and the Local_Name_Space that Irfan had begun + last semester. + + * ace/SString.cpp: Added new optimizations to the assignment + operators of the ACE_[WCS]String classes to avoid + freeing/allocating memory if the current size is large enough. + + * ace/SString: Added copy constructors... + + * ace/Local_Name_Space.cpp: Modified the implementation of bind() + to avoid a race condition. + + * ace/Map_Manager.cpp (bind): Changed the semantics of bind() so + that callers can control whether or not INT_IDs are reassigned. + Also changed things so that callers can get back the existing + value if they choose not to reassign. + + * ace/SString.cpp: Removed the "P" (persistent) versions of all + these classes and merged them into the default versions. The + persistence is now determined by the type of allocator passed in + as a parameter to the constructor (or by using the "default" + allocator that is accessible via + ACE_Service_Config::allocator()). + + * ace/Map_Manager.cpp: Removed the "P" (persistent) versions of + all these classes and merged them into the default versions. + The persistence is now determined by the type of allocator + passed in as a parameter to the constructor (or by using the + "default" allocator that is accessible via + ACE_Service_Config::allocator()). + + * ace/Malloc_T: Modified the bind() algorithm so that it will + allow the caller to determine whether duplicates are allowed or + not... Also changed things so that callers can get back the + existing value if they choose not to allow duplicates. Irfan + questions the sanity of this... ;-) + + * ace/Synch: To be consistent, added acquire_write and + acquire_read methods to ACE_Mutex. These are useful for cases + where we are going to be parameterizing classes like ACE_Malloc + with some type of mutex wrapper (e.g., ACE_RW_Mutex, ACE_Mutex). + + * ace/Malloc_T.cpp (calloc): Added a new method called "calloc" + that will not only allocate the memory dynamically, but will + also give it an initial value (e.g., '\0'). + +Thu Dec 28 01:10:43 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS.i: Modified the implementation of the TLI methods so that + they are conditionally compiled away if the platform doesn't + support TLI... Thanks to Neil Cohen for pointing out the need + for this... + + * ace/OS.i: Modified the implementation of dlopen() and dlsym() to + account for limitations with SunOS 4.x... + + * ace/Service_Repository.cpp: Modified this class to use the + ACE_OS::dlclose method. + + * ace/Parse_Node.cpp: Modified this class to use the + ACE_OS::dlopen and ACE_OS::dlsym methods. + +Wed Dec 27 23:25:03 1995 Jesper S. M|ller (stophph@diku.dk) + + * Added appropriate flags in OS.h for successful inclusion of + several header files, such as Malloc.h and friends. Also added + mprotect to ACE_OS for Win32 to avoid linker errors. + + * Added a return value (from map_file) to + ACE_MMAP_Memory_Pool::handle_signal. The compiler was + complaining. Likewise on + ACE_MMAP_Memory_Pool::commit_backing_store (there 0 seemed like + the correct off-the-end return value). + + * Removed include of some SV semaphore file, if not needed in + Malloc.h. Worse for Memory_Pool.h, since the SV_Semaphore + wrappers consistently differ completely from the other + synchronization routines. I guess we'll need some variant of + ACE_Process_Semaphore that takes an integer as a key instead of + a string, and does not perform automatic init/destroy. + + * Also upgraded fd's from int to ACE_HANDLEs and changes -1 to + ACE_INVALID_HANDLE where appropriate. + + * By help of aggresive preprocessor conditionals, made Handle_Set + work with Win32. There is a fd_set abstraction with appropriate + FD_xxx macros for WinSock, and it requires no sync'ing. The + Handle_Set_Iterator should also work. The good looks of + Handle_Set was impaired, though. Right now, the trigger is the + ACE_WIN32 flag, although it should be something like + ACE_FD_SET_USES_BITS for the unix approach, or like + ACE_FD_SET_USES_VECTOR for the WinSock approach. + + * Reactor almost compiles now, but not quite: Handlers are + addressed by fd, this is no longer possible - what a mess - we + need to step through the handle indices somehow. This will + likely get into some nasty quadratic complexities when iterating + the handles to find the event_handler for each file + handle. Mabye we can circumvent this with a hash table lookup + for those opaque handles. + + * There was a problem with the Svc_Conf.l.cpp and the + Svc_Conf.y.cpp and the extremely lame MSVC++ 2.0. I had to + rename them to Svc_Conf_y.cpp, etc. Awful! + + * Added code to inquire the 'host' name for Win32 in the ACE_Client_Id + class. Another candidate for ACE_OS. + + * About 60 or so ACE .cpp files compile now, which reminds me that + I'll be working on some precompiled header scheme soon, since it + takes for ever and ever, even on my 32meg system with pretty + good SCSI drives. Mabye it's because I'm only running a 66MHz + i486 DX2 (yawn). + + * Dozens of other changes have been made to various files, all + pertaining to int vs. ACE_HANDLE. In Service_Manager.h, a signal + number was an ACE_HANDLE, but just close by, some fd's were + ints. Fixed that, too. + +Sat Dec 23 14:15:16 1995 Jesper S. M|ller (stophph@diku.dk) + + * I've also grouped the .i and .cpp functions by class, + and #if'ed the sbrk and SysV pools out, since + Win32 cannot support those. + + * Added 'inline' to day accessor functions in Date_Time. + + * Two things that missed me in Trace.cpp: + 1) The inclusion order was so that I couldn't + build Trace.o, since it didn't know the MALLOC_HOOK thing. + I moved the #include of Trace.h down below that of ACE.h. + 2) The declaration and definition of the ACE_Trace constructor + differed by a const, which I added. + 3) When linking, multiple symbols were found for some + OS calls like mutex_init, corresponding to the larger + OS Win32 functions. I has ACE_INLINED_OS_CALLS off, + so sometimes the OS functions were inlined, sometimes + not. + I disabled the inline hack in Trace.cpp for WIN32 for now. + This seemed to resolve matters. + + * There was a major problem in OS.i, where Synch.h was needed for + mutex support (in conjunction with TSS info linked list). I + chose to make thr_keycreate and some others non-inlined. + + * More 'is-it-a-handle-or-success' confusion in SOCK*.* Changed + ACE_SOCK_Dgram to use int status. Changed ACE_SOCK_CODgram to + use int status. Changed ACE_LSOCK to use int status. Also + changed a few derived classes + +Fri Dec 22 14:03:15 1995 Douglas C. Schmidt (schmidt@lambada.cs.wustl.edu) + + * ace/OS.h: Added a new type for rwlock_t for platforms that don't + support threading... Thanks to Neil Cohen for reporting this. + + * ace: Merged in all of Jesper's changes for NT and Chris Lahey's + changes for AIX. + + * ace: Merged tli.h into OS.h to avoid name conflicts on Win32. + + * Fixed duplicated names where case is the only difference. + ace/thread.cpp + ace/Thread.cpp + ace/TLI.h + ace/tli.h + apps/Token_Server/mutex_example/simple_token_client.cpp + apps/Token_Server/mutex_example/Simple_Token_Client.cpp + apps/Token_Server/script_example/scripting_token_client.cpp + apps/Token_Server/script_example/Scripting_Token_Client.cpp + tests/IPC_SAP/SOCK_SAP/FD-client.cpp + tests/IPC_SAP/SOCK_SAP/fd-client.cpp + tests/IPC_SAP/SOCK_SAP/FD-server.cpp + tests/IPC_SAP/SOCK_SAP/fd-server.cpp + +Wed Dec 20 22:26:24 1995 Jesper S. M|ller (stophph@diku.dk) + + * FIFO.cpp: One last comparison of 'open' return status where and + ACE_INVALID_HANDLE should be changed to -1. + + * One more last wrong comparison in FIFO_Recv_Msg.cpp. + (Never say never again!) + + * Put an appropriate conditional around the inclusion of + Handle_Set.h for ACE_WIN32 (for now). + + * Introduced a few backslashes in the macros of Dump.h that were + somehow left out... Had to add a really stupid constructor for + struct Tuple. I haven't a clue why MSVC++ wants this! Replaced + 'return ACE_ODB;' with 'return ACE_ODB::instance_;' in the + Singleton access function. + + * Added a constructor for ACE_ODB. It may be private, but it still + needs to be defined... + + * Stack and Set compiles fine for Win32 (not surprisingly) + + * If'ed out the guts of ACE_IPC_SAP enable/disable calls for + Win32, since async IO doesn't work that way on there. + + * Event_Handler now uses ACE_INVALID_HANDLE for default args. + + * SOCK compiles except for the ACE_SOCKET <> ACE_HANDLE + problem. Refer to issue #3 above. + + * We're swamping the ace directory with .mak files. I used the + winntace.mak file, which is compilable and linkable. + +Thu Dec 21 15:37:42 1995 Douglas C. Schmidt (schmidt@merengue.cs.wustl.edu) + + * ace: Greatly simplified the include files so that (1) compilers + are faster and (2) the ACE_Trace mechanism works correctly. + + * ace/Trace: Modified the ACE_Trace_TSS class so that it is no + longer a template. This was overkill since we know the type + head of time (i.e., ACE_Trace_State). + + * ace: Added a number of new changes to ACE to make things work on + AIX. Thanks to Chris Lahey for these + changes. + + * ace/Thread_Manager.cpp: Removed the get_max_thr_id() method + since it was not portable to NT or POSIX pthreads. Nothing in + ACE depended on it anyway... + + * ace/OS: Added a new static data member called NULL_thread that + is a "zero'd" out thread id. This is necessary to deal with the + POSIX pthread implementation of a thread id, which is not always + implemented as a number... By using this new approach, all the + special-case code in Synch.cpp disappears... + + * ace/OS: Added a new method to class ACE_OS called thr_equal() + that masks the differences between comparing thread ids using + the threading libraries. This simplifies the code in Synch.cpp + and Reactor.cpp. + + * ace: Updated all uses of mmap() to use the new ACE_MMAP_TYPE + typedef. This deals with the fact that different versions of + UNIX define mmap() inconsistently (e.g., some use void * and + some use char *...). + + * ace: Removed testconfig.h and merged all of those #defines into + OS.h. This centralizes changes in one place and also eliminates + the need for ./apps and ./tests to include extraneous files... + + * ace/testconfig.h: Changed all uses of 0666 to ACE_DEFAULT_PERMS. + Also, removed all PERMS enums and substituted ACE_DEFAULT_PERMS + instead. + +Wed Dec 20 17:29:55 1995 Tim H. Harrison (harrison@merengue.cs.wustl.edu) + + * Rewrote the Token deadlock detection algorithm. It now performs + "best-effort" detection of deadlock for remote acquires and + complete deadlock detection for local acquires. + +Wed Dec 20 02:37:39 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS.h: The select() system call has its own include file on + AIX: . We can wrap the #include with a variable + #if defined (ACE_HAS_SELECT_H). + + * include/makeinclude/platform_aix.GNU: Added new support for AIX. + Thanks to Chris Lahey for these changes. + Added a number of other minor changes, as well. + + * ace: Made a bunch of minor changes to get ACE to compile on + SunOS4.x, Linux, and SGI. + + * ace/config-linux.h: added ACE_HAS_MSG (thanks to Neil Cohen + for this). + + * ace/OS.h: Conditionally compile for ACE_HAS_UTIME for + . + + * Released an alpha version of ACE containing the new Windows NT + port. + + * Integrated and tested all the new Windows NT changes in class + ACE_OS, as well as the Synch* and Threads* classes. We're now + able to build Jesper's win32_test.cpp file in ./ace! A complete + NT port should be just around the corner... + +Tue Dec 19 17:59:04 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace: Move the remaining contents of sysincludes.h into ACE.h. + There is no more sysincludes.h (at long last!). + + * ace: Rearranged things so that the OS.[hi] files contain all the + OS-specific #defines and #includes that were previously in + sysincludes.h. + + * ace: Renamed the ACE_Misc class to class ACE, which is more + representative of what it does. + + * INSTALL: updated the installation instructions to explain how + the new directory structure works. Thanks to Neil Cohen for + pointing out the discrepancy beteen the source and the + documentation ;-). + + * Reorganized (by flattening) the ACE library directory structure + to make it work for both Windows NT and UNIX. Note that Windows + NT does not have symbolic links, so the old way of doing things + didn't port... The consequences of these changes is there is + now a single directory called $WRAPPER_ROOT/ace that contains + the *.[hi] and *.cpp source files. This is also where the + libACE.a and libACE.so libraries are built by default. Also, + note that the suffix used by ACE has been changed from *.C to + *.cpp to deal with the lame Visual C++ compiler... + +Tue Dec 19 01:26:54 1995 Douglas C. Schmidt (schmidt@merengue.cs.wustl.edu) + + * tests/ASX/Event_Server/Event_Server/Supplier_Router.cpp (put): + Fixed up a problem with the Event_Server. Somewhere along the + way it stopped being concurrent! The new version fixes this. + Thanks to Alex V Maclinvosky for + noticing this... + + * Added a billion new changes to class OS to integrate the Windows + NT port with the rest of ACE. We are getting very close... + +Mon Dec 18 12:45:13 1995 Jesper S. Møller (stophph@diku.dk) + + * Major problems in the IPC_SAP. First, I detected that some open + calls returned handles, some returned -1 or 0. For instance + ACE_SOCK has a constructor, that calls this->open and expects a + handle (which it even sets as the current handle + value!). Unfortunately, the return from open is either 0 or -1, + depending on how well the open went. ACE_HANDLE being + typedef'ed to a void* really reveals some problems! I have + solved the problem for the FIFO*.* family and for SOCK.* + +Mon Dec 18 12:43:46 1995 Douglas C. Schmidt (schmidt@merengue.cs.wustl.edu) + + * tests/Reactor/CODgram/CODgram.C (main): Fixed a bug in main() + caused by initializing the Reactor twice. Thanks to Aurelio + Nocerino for reporting + this. + + * libsrc/Service_Configurator/Service_Config.C Added a new + constructor to ACE_Service_Config that can be used to initialize + internal variables without performing a full configuration. + +Mon Dec 18 01:22:22 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Service_Config: renamed tokens.h to sc_tokens.h to avoid + file name collision on Win32. Thanks to Jesper S. M|ller + for reporting this. + + * tests/Mem_Map/IO_Test: renamed io_test.C to test_io.C to avoid + file name collision on Win32. Thanks to Jesper S. M|ller + for reporting this. + + * libsrc/Misc/OS: Implemented condition variables for Windows NT. + +Sun Dec 17 21:23:32 1995 Douglas C. Schmidt (schmidt@merengue.cs.wustl.edu) + + * libsrc/Misc/Trace: Fixed up the ACE_Trace class so that it + doesn't include any calls that will improperly trigger infinite + recursion! This allows the ACE library to be traced completely. + +Sat Dec 16 19:12:37 1995 Jesper S. Møller (stophph@diku.dk) + + * Changes to OS.*: + * Added conditionals to the OS.h for Win32, for the special ACE/Win32 + thr_destroy_tss(), which is automatic for Solaris. + * Changed declarations of thr_create, thr_suspend, thr_continue, + thr_join and thr_[gs]etprio to use hthread_t instead of thread_t. + * Changed return type of OS::open from int to ACE_HANDLE. + * Provided non-obtrusive handling of thr_handle in OS::thr_create + for non-Win32. + * Copied ACE::writev to OS::writev for Win32. Something similar + should happen for other systems... + + * Changes to Thread.*: + * Changed join, suspend and continue to take handles. + * Added thread handle return address to spawn. + + * Changes to Thread_Manager.*: + * Added thread handles to the Thread_Descriptor structure. + * Modified insert_thr and append_thr functions to also take + handles. + * Made ACE_Thread_Descriptor::Thread_State (a enum) public + so Thread_Manager::append_thr could use it as a formal + parameter (I suspect this is a bug in MSVC++). + * Changes the various flavours of suspend, continue, etc. to + use handles instead of id's. Keep in mind that none of this + is destructive for Unix, but vital for Win32. + * There is still a problem with ACE_Thread_Control registering + itself with the Thread_Manager - the thread does not have means + of finding it's own handle. In this particular case, we could + have the thread duplicate it's pseudohandle into a real one, + and pass that one along. I'd really, really, really rather not + have to maintain a thread id->handle mapping myself; It would + slow down thread manipulation and give some troublesome memory + overhead. + + * Changes to Log_Msg.*: + * OS::getpid instead of ::getpid. + + * Changes to Misc.*: + * Sections inappropriate for Win32 #if'd out... + * Provided naive timestamp function (No date) for Win32. + + * Changes to IPC_SAP.*: + * Uses OS::ioctl instead of ::ioctl + * Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE + + * Changes to FIFO.*, : + * Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE + + * Changes to FIFO_Send.*: + * open now returns an int insted of an ACE_HANDLE. + * Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE + + * Changes to FIFO_Send_Msg.*: + * open now returns an int insted of an ACE_HANDLE. + * Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE + * Uses OS::writev instead of ::writev + + * Changes to FIFO_Recv.*: + * open now returns an int insted of an ACE_HANDLE. + * Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE + + * Changes to FIFO_Recv_Msg.*: + * open now returns an int insted of an ACE_HANDLE. + * Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE + + * Changes to sysincludes.h: + * Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE + +Sat Dec 16 12:29:06 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/Addr/INET_Addr.C: Changed the implementation so + that the reentrant versions of the library calls are always used + (class OS sorts this all out). This reduces the amount of + clutter in the code. + + * libsrc/Threads/Synch: Added a new implementation of + "readers/writer" locks for both Windows NT and POSIX pthreads. + By default, these threads packages don't have this feature. + + * libsrc/Threads/Synch: Added a new macro called + ACE_SYNCH_ERROR_RETURN that greatly simplifies the definition of + the synchronization wrappers. + + * include/ace/sysincludes.h: Removed the pthreads_map.h file and + integrated this into sysincludes.h. + +Fri Dec 15 02:39:25 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Misc/OS.i: Finished updating class OS so that it will + compile correctly for OS platforms that don't support threads, + as well as platforms that support POSIX Pthreads vs. Solaris + threads, etc. + + * libsrc/Misc/OS: integrated Jesper S. M|ller + support for POSIX regular expressions (e.g., compile() and + step()) and sysinfo() into ACE. + + * Integrated and tested all of Irfan's changes to ACE to support + the new persistence Name_Server. This added some new classes in + various places that use the ACE_Allocator. + +Thu Dec 14 00:23:43 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * tests/ASX/Event_Server/Event_Server: Fixed an "off by 1" bug in + the declaration of char *argv[3] in the open() methods of + Supplier_Router.C and Consumer_Router.C. Thanks to the "ever + dissatisfied" Alex V Maclinvosky + for reporting this. + + * libsrc/Service_Configurator/Service_Config: Added a new + "Singleton" access point for the global ACE_Allocator. + + * libsrc/Naming/Name_Options.C (parse_args): Made it possible to + change the name of the process on the command line via the -P + option. The default is still to use argv[0] as the process + name. + + * include/ace/testconfig.h (ACE_DEFAULT_GLOBALNAME): Changed the + value from "/localnames" to "/globalnames" to avoid a conflict. + + * libsrc/Misc/SString.C: Added Irfan's new "persistent" string + mechanisms that use the ACE_Allocator_Manager. We may + eventually update the existing SS* stuff to use this. + + * Merged in Jesper S. M|ller updates for Windows + NT. + + * include/ace/Malloc.h: Added a forward declaration for + ACE_Malloc_Iterator right before ACE_Malloc. Thanks to Antonio + Tortorici for reporting it. + + * libsrc/Threads/Synch_T.h: Fixed a small typo in + ACE_Null_Condition. Thanks to Antonio Tortorici + for reporting it. + + * include: Added new config-linux.h and platform_macros.GNU config + files for Linux. Thanks to Timothy Newell + <910430n@dragon.acadiau.ca> for this stuff. + +Wed Dec 13 23:08:11 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/Addr/INET_Addr.C (set): Fixed a small typo in the + ACE_INET_Addr::set (const char port_name[], ACE_UINT32 + inet_address) method where the test should be != rather than == + 0. Thanks to Bill Lear (rael@anarchy.cybercom.net) for + reporting this. + +Sun Dec 10 12:23:54 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Service_Configurator/Service_Record.C (init): Fixed a + small problem where a NULL pointer was being returned if a user + passes a non-existent config file (using the -f option) to + ACE_Service_Config::open(). Thanks to Dieter Quehl + (quehl@erlh.siemens.de) for noticing this. + + * libsrc/Log_Msg/Log_Msg.C (log): added a new option (%T) that + causes the current timestamp to be inserted into the log msg. + Thanks to Dieter Quehl (quehl@erlh.siemens.de) for suggesting + this. + + * libsrc/Misc/Misc: Added a new timestamp() method that returns + the current timestamp in the form + "hour:minute:second:microsecond." The month, day, and year are + also stored in the beginning of the date_and_time array. + + * tests/Shared_Malloc: Added Irfan Pyarali new + test program that exercises the new features of ACE_Malloc that + are described in the following bullet. + + * libsrc/Shared_Malloc: Added Irfan Pyarali + cool new versions of ACE_Malloc and ACE_MMAP_Memory_Pool. These + new versions provide the following enhancements: + + 1. Persistence -- via the sync() method + 2. Protection -- via the prot() method + 3. Named malloc chunks -- via bind(), find(), unbind(). + 4. Named iteration -- via ACE_Malloc_Iterator + +Thu Dec 7 00:31:26 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Signal.C: Replaced ACE_Guard with ACE_TSS_Guard + to ensure that locks are correctly released even if + Event_Handler::handle_signal() callbacks invoke + ACE_Thread::exit(). Thanks to Detlef Becker + (beckerd@erlh.siemens.de) for suggesting this. + + * libsrc/Threads/Synch_T: Used inheritance to factor out the + shared code between ACE_Guard, ACE_Read_Guard, and + ACE_Write_Guard in order to reduce unnecessary duplication. + + * libsrc/Threads/Synch_T: Changed the implementation of ACE_Guard + to keep a pointer to the LOCK rather than a reference. This + makes the code more flexible and aids in factorization. + + * libsrc/Threads/Synch_T: Changed the implementation of ACE_Guard + to incorporate ACE_Try_Guard semantics. This reduces the amount + of classes and duplicate code in ACE. + +Wed Dec 6 21:36:02 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * include/ace/Trace: Changed the type of the string passed into + ACE_Trace from char * to const char *. + + * libsrc/Reactor/Reactor.C: Had forgotten to initialize the + initialized_ and requeue_position_ members appropriately in the + constructor of the ACE_Reactor if ACE_MT_SAFE is *disabled*. + Thanks to Mark Zusman for pointing + this out. + + * libsrc/Threads/Synch_T.C: changed the order of some methods so + they would be properly defined if ACE_HAS_THREADS and + ACE_HAS_THREAD_SPECIFIC are *not* enabled. This should fix + remaining problems with ACE on SunOS 4 and SGI. Thanks to + Aniruddha Gokhale for noticing this. + +Tue Dec 5 01:06:14 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Changed things around so that the Name_Server and Token_Server + client interfaces are include in libACE. + + * libsrc/Shared_Malloc: added a const char *pool_name to + ACE_Malloc::ACE_Malloc. This is passed into the constructor of + the MEMORY_POOL to make it easier to dynamically name memory + pools. + +Mon Dec 4 21:20:28 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Threads/Synch_T: Modified the place that the + ACE_Thread_Specific methods are defined so that they will be + compiled correctly for platforms without threads or + thread-specific storage. + +Sun Dec 3 23:04:41 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/ASX/Message_Block: Modified clone() so that it takes an + extra parameter that specifies which flags SHOULD NOT BE + TRANSFERED to the clone. This defaults to + ACE_Message_Block::DONT_DELETE. Thanks to Alex V Maclinvosky + for suggesting this. + +Sun Dec 3 17:43:11 1995 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * The number of files in the Token library has been reduced. As a + result, many of the files have been renamed. Also, the .i files + have been purged of relatively large methods (these have been + moved to the .C files.) Lastly, most uses of dynamic memory + allocation have been removed from the library. This was + important to reduce the amount of serialization in threaded + applications caused by the dynamic allocation. + +Sun Dec 3 17:29:54 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Threads/Synch: Modified all the synchronization classes + so that they disallow assignment and initialization! + + * libsrc/Threads/Synch: Moved the ACE_Thread_Specific class from + its own files into the Threads/Synch.[Chi] files. This should + eliminate a set of horrible interdependencies among files. + +Sat Dec 2 16:07:40 1995 Douglas C. Schmidt (schmidt@mambo.cs.wustl.edu) + + * libsrc/Misc/SString.C (ACE_CString): Added a destructor to + CString. Thanks to Tim for noticing this... + +Tue Nov 28 17:25:02 1995 Prashant Jain (pjain@tango.cs.wustl.edu) + + * apps/Name_Server/client/lib/Name_Proxy: Changed Name_Proxy to + inherit from ACE_Service_Object rather than ACE_Event_Handler. + This will allow a Name_Proxy to be dynamically linked into an + application via the svc.conf file. + + * apps/Name_Server/client/lib/Name_Proxy: Added new methods + init, fini, and info. + +Tue Nov 28 00:56:52 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * tests/Threads/test_thread_specific.C: Added code to test the new + ACE_TSS_Guard class... + + * libsrc/Threads/Synch_T: Added the new ACE_TSS_Guard class. This + class is similar to the existing ACE_Guard, except that it uses + thread-specific storage to ensure locks are released even if a + thread exits via thr_exit()! + +Mon Nov 27 20:39:58 1995 Prashant Jain (pjain@tango.cs.wustl.edu) + + * apps/Name_Server/{client,server}/tests: Added new tests to + exercise the key features of the name server. + + * apps/Name_Server/client/lib: Simplified access to the nameserver + database. For example, all the network-byte ordering code was + moved out of the Local and Remote Name_Spaces. This code is no + longer necessary since we'll be providing a different means to + get portable name service repositories via a tool that extracts + the "key/value/type" tuples and stores them in a + machine-independent format. The result of this change is that + the Name_Server code is much easier to understand and modify. + + * apps/Name_Server/client/lib: Split local and remote name spaces + into two classes to simplify usage. This approach uses the + Bridge pattern to have a baseclass called Binding and then have + subclasses called Local_Name_Space and Remote_Name_Space. The + constructor of Naming_Context then allocates the right one + (i.e., it serves as a factory). This approach remove all the + switch statements in the code and makes it much easier to use + and extend. + + * apps/Name_Server: updated all the Name_Server components to + use ACE naming conventions. + + * apps/Name_Server/client/lib: Changed ACE_Name_Options to use the + Singleton pattern rather than the global variable... + +Mon Nov 27 00:47:32 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Shared_Malloc/Malloc.h: Named the previously anonymous + struct inside of ACE_Malloc_Header to be + ACE_Malloc_Control_Block in order to keep the OSE tools working. + Thanks to Karlheinz for reporting this. + + * libsrc/Threads/Synch: Fixed a major bug in the ACE_Semaphore + wrappers. Apparently, these had slipped between the cracks and + were not correctly mapping onto the ACE return value scheme + where -1 corresponds to an error with errno set to indicate the + type of error. + + * tests: Cleaned up some files that mistakenly were defining + LSOCK* objects even for platforms (i.e., Linux) that don't + support them. Thanks to Timothy Newell + <910430n@dragon.acadiau.ca> for noticing this. + +Sun Nov 26 12:42:51 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Shared_Malloc/Malloc: Added a new accessor method + (memory_pool) that returns a reference to the MEMORY_POOL object + used to configure ACE_Malloc. + + * libsrc/Shared_Malloc/Malloc: Changed the constructor of + ACE_Malloc to take advantage of the new init_release method on + all the ACE_*_Memory_Pools. + + * libsrc/Shared_Malloc/Memory_Pool: Added a new method to all the + ACE_*_Memory_Pool classes called "init_release". This is called + when ACE_Malloc finishes initializing the dynamic memory + manager. This method is necessary in order to initialize the + ACE_MMAP_Memory_Pool correctly if there are multiple processes + that try to initialize ACE_Malloc simultaneously. In addition, + also added an ACE_SV_Semaphore_Complex to the + ACE_MMAP_Memory_Pool in order to serialize initialization + correctly. + + * libsrc/Shared_Malloc/Memory_Pool: Added sync() and protect() + methods to all of the ACE_*_Memory_Pool classes in order to + support a uniform interface for use with the "robust memory" + mechanism we're building. + + * libsrc/Mem_Map/Mem_Map: Added two new "protect" methods to + ACE_Map_Manager in order to allow clients to change the + protection of memory-mapped regions. + + * libsrc/ASX/Map_Manager: Changed Map_Manager methods to use + "const" for EXT_ID and INT_ID at request of Prashant Jain + (pjain@cs.wustl.edu). + + * libsrc/Shared_Malloc/Memory_Pool: Revised the + ACE_Shared_Memory_Pool so that it would actually work + correctly... This code hadn't been reviewed carefully before + and there were some bugs... + + * libsrc/Shared_Malloc/Malloc: added "INLINE" to the + ACE_Allocator_Adapter components. + + * libsrc/Shared_Malloc/Memory_Pool: Greatly simplified and + consolidated the mmap(2) code for ACE_MMAP_Memory_Pool. + + * libsrc/Shared_Malloc/Memory_Pool.i (release): Removed the + vestigal this->mmap_.remove() call in release(), but added the + appropriate code to close the fd and unmap the region. Thanks + to Irfan Pyarali for noticing this. + +Sat Nov 25 18:12:55 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/CORBA/CORBA_Handler.C (activate_service): + Modified activate_service so that + + if (service_name != 0 + && this->register_service (service_name, marker_name, + service_location) == -1) + return -1; + + is changed to + + if (service_name != 0 && service_location != 0 + && this->register_service (service_name, marker_name, + service_location) == -1) + return -1; + + Irfan Pyarali requested this. + +Sat Nov 25 16:41:15 1995 Douglas C. Schmidt (schmidt@lambada.cs.wustl.edu) + + * libsrc/Misc/Set: Changed all the find() and size() methods to + be const member functions. Thanks to Irfan Pyarali + (ip1@cec.wustl.edu) for requesting this. + +Fri Nov 24 02:51:59 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Reactor.C: Fixed the Reactor so that if we're + compiling with DEADLOCK_DETECTION enabled it will create a + uniquely named mutex by stringifying "this". + +Thu Nov 23 21:45:43 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP: Changed + + * libsrc/Service_Configurator/Service_Config: Added three new + methods to allow programmers to set the process-wide Singletons + for Reactor, Service_Repository, and Thread_Manager. + +Tue Nov 21 01:59:06 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Mem_Map/Mem_Map.C: Fixed a stupid typo in map_it() that + was causing problems due to unsigned arithmetic semantics... + This should make the file_reverse.C Mem_Map tests work correctly + now... Thanks to Bill Lear for + noticing the problem. + + * tests/Mem_Map/IO-tests/io_test.C (parse_args): Fixed a + classic C/C++ braino in io_test.C: + + The for loop in parse_args() + + for (int c; (c = get_opt () != -1); ) + + should be + + for (int c; ((c = get_opt ()) != -1); ) + + How embarrassing. Maybe Bertrand Meyer is right -- C++ is too + dangerous for its own good... ;-). Thanks to Bill Lear + for finding this! + + * Removed all traces of ACE_Condition from the library. + This should make life much easier for compilers (like G++) that + can't grok templates very well... + + * libsrc/Threads/Thread_Specific.C (ts_object): Added a new method + that allows you to simultaneously "test and set" thread-specific + data! This is used to support a neat new trick that ensures + locks are released even if a thr_exit() is called! + + * libsrc/Service_Configurator/Service_Repository: Removed the + Recursive_Mutex from Service_Repository and replaced it with a + regular (non-recursive) mutex. Had to rewrite the code a bit so + that it wouldn't try to call internal methods that acquired the + mutex (this leads to instant deadlock!) + +Mon Nov 20 01:05:47 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Threads/Synch: Finally gave in and accepted the fact that + GNU G++ is a horrible, horrible blight on mankind... Changed + the internals of Synch.[Chi] to completely remove any + dependencies on templates. I hope this fixes some portability + problems deep in the libraries... Added several new classes to + reflect this change: ACE_Mutex_Guard, ACE_Mutex_Condition, and + ACE_Recursive_Mutex. + + * libsrc/IPC_SAP/UPIPE_SAP/UPIPE_Acceptor.C (ACE_UPIPE_Acceptor): + Fixed a stupid typo that was causing the constructor of + UPIPE_Acceptor to become inlined!!! + + * apps/Gateway/Gateway: Fixed up the Makefile so that the gatewayd + executable would compile with G++. + + * include/ace/config-irix5.3-sgic++.h: Changed the SGI config.h + file so that it uses select() rather than poll() by default. + The select() version of the Reactor is implemented more + efficiently in ACE... + + * include: Added config files for AIX courtesy of Byron Walton + . + + * libsrc/Reactor/Signal.C: #ifdef'd out some code in Signal.[hC] + that was causing problems for the HPUX C++ compiler. What a + *horrible* compiler! + + * libsrc/Reactor/Event_Handler.h: Added two new methods to + ACE_Event_Handler: get_priority() and set_priority(). These + will be used to control the behavior of the ACE_Reactor's + dispatching. This also required added a new data member to + ACE_Event_Handler that stores the priority (which defaults to + MIN_PRIORITY). + + * libsrc/Misc/Stack.C (enqueue): Added a new class called + ACE_Unbounded_Queue. This is required for Tim's Token_Server + connection repository stuff... + + * libsrc/CORBA/CORBA_Handler.C: Added new support to both the + single-threaded and multi-threaded versions of CORBA_Handler so + that it will now suspend/resume the services associated with a + CORBA_Handler. + + * libsrc/CORBA/CORBA_Handler.C (ACE_MT_CORBA_Handler): Updated the + constructor to use the associated Thread_Manager to spawn a new + thread. This will allow the suspend() and resume() methods to + atomically resume and suspend the daemon thread and its event + handler. + + * libsrc/Threads/Synch.h: Fixed up the order of #includes to solve + problems with circular header dependencies! + + * Had to add zillions of little changes to avoid problems with + circular includes for G++... + + * tests/ASX/Event_Server/Event_Server/Peer_Router.C (bind_peer): + Fixed a typo that had been dormant for ages due to C++'s very + late binding of templates... G++ picked this right up! + +Sun Nov 19 11:55:02 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Signal: Replaced the static HANDLER_SET stuff + withing ACE_Sig_Handlers with a different implementation using + ACE_Fixed_Set. This should fix nasty problems with static + variables on HP/UX... + + * Fixed the entire library so that all occurrences of ace_log_msg + are changed to use the ACE_LOG_MSG macro. This macro has magic + properties that should greatly simplify the effort required to + compile ACE robustly on platforms with lame C++ compilers... + + * libsrc/Log_Msg/Log_Msg: Finally got my act together with respect + to thread-specific data and the ACE_Log_Msg class. The new + version can be conditionally compiled such that it won't use the + ACE_Thread_Specific smart-pointer wrapper mechanism unless the + platform supports thread-specific storage and threads. This + will make life much easier for lame C++ compilers that can't + handle static data member templates correctly... + + * apps/Name_Server/{client,server}/lib/Makefile (LIBS): Added a + reference to -lACE in the Makefiles of the ./lib directories in + order to get GCC to work correctly... + + * Added a bunch of fixes courtesy of Bill Lear + to make ACE compile more cleanly + with GNU GCC 2.7.x. + +Sat Nov 18 11:27:40 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Misc/Trace.C: Fixed up the ACE_Trace class so that it + will compile better on platforms that don't support + thread-specific storage. The trick was to make a new Singleton + called ACE_Nest_Depth and then conditionally compile it + according to whether the platform supports thread-specific data + or not! + + * include/makeinclude/platform_sunos5_g++.GNU: Added the new + config file that should allow ACE to build correctly with GCC + 2.7.x. Todd L. Montgomery deserves a big + round of applause for getting this stuff to work! If I had a + budget, I'd give him a raise ;-) + + * libsrc/Misc/Set.C (remove): Tightened up the semantics of all + the *Set::remove() methods so that they return 1 if they + succeed, 0 if the item isn't in the set, and -1 if they fail. + Thanks to Tim Harrison for noticing the inconsistencies. + +Fri Nov 17 01:34:51 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * apps/Logger/Reactor_Logger: Fixed up this example app so that it + would compile with GNU G++ correctly. There was a problem with + the order of include files! Thanks to Todd L. Montgomery + for reporting this. + + * libsrc/ASX/Module.C (writer): Fixed ACE_READER so that it is + properly qualified with ACE_Task_Flags::ACE_READER. Thanks to + Neil Cohen (nbc@metsci.com) for finding this! + + * apps/Gateway/Gateway/Routing_Entry: Replaced ACE_Fixed_Set with + ACE_Unbounded_Set to get around the seemingly endless problems + with HP/UX... + + * libsrc/Misc/Set: Fixed a braino in ACE_Unbounded_Set, where I'd + forgotten to define cur_size_. Thanks to Todd L. Montgomery + for reporting this. + + * libsrc/Connection/Acceptor.C: Change the #undefs of the + shorthand names PA_AC_1, PA_AC_2, and PA_AD in + libsrc/Connection/Acceptor.C to PR_AC_1, PR_AC_2, and PR_AD + (same as in Connector.C and Strategies.C). Thanks to + Dieter Quehl for reporting this. + +Thu Nov 16 02:14:22 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Misc/Trace: Fixed the ACE_Trace stuff by making the + "nesting_indent_" a static data member. This will undoubtedly + break some lame C++ compilers, but it's easy enough to remove + this stuff via conditional compilation using the ACE_NTRACE + #define in ./include/ace/config.h. + + * libsrc/Threads/Thread_Specific.C (cleanup): Under no + circumstances should ACE_Thread_Specific be allowed to + called ACE_Trace. Otherwise, chaos will result! + + * apps/Name_Server/{client,server}/tests/Makefile: Switched the + order of the -lACE and -lName* so that -lACE came *afterwards* + in order for the SGI linker to pick up the symbols correctly. + + * libsrc/Reactor/Signal: I'd accidentally put the "dump" methods + in the *.i file rather than the *.C file. This was causing + problems for G++. + + * libsrc/ASX/Task: Changed all "Q_" prefixes to "ACE_" prefixes in + order to work around a bug with HP/UX... + + * Recompiled everything on SunOS 4.x with SunC++ 4.0.1. It seems + to work! + +Thu Nov 16 18:05:03 1995 Tim H. Harrison (harrison@tango.cs.wustl.edu) + + * I moved around some class declarations so that g++ can properly + instantiate templates for ACE_Token_Collection and + ACE_Token_Manager. + +Wed Nov 15 00:26:40 1995 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * The token library should now compile on platforms which do not + support threads. All token components will be compiled into the + library, but use null mutexes and condition variables. The + remote mutex library shall run properly on single-threaded + platforms, so it compiles as usual. + +Wed Nov 15 01:05:38 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Fixed a bunch of minor problems with the SGI port. Things + should work now on IRIX 5.3! + + * man/man3: Completely regenerated all the manual pages to + reflect all the recent updates. + + * libsrc: Added ACE_TRACE macros to every single method in ACE! + This will help with debugging... + +Wed Nov 15 00:26:40 1995 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * The token library should now compile on platforms which do not + support threads. All token components will be compiled into the + library, but use null mutexes and condition variables. The + remote mutex library shall run properly on single-threaded + platforms, so it compiles as usual. + +Tue Nov 14 01:58:47 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * tests/CORBA: Added a new test to illustrate the + ACE_MT_CORBA_Handler. + + * libsrc/ASX/Task.C (ACE_Task_Exit): Fixed a niggling problem with + ACE_Task_Exit. Originally, if a thread exited via an implicit + ACE_Thread::exit() (i.e., "falling off the end of the + ACE_Task::svc_run function) then the ACE_Thread_Control on the + thread stack would automatically unregister the thread from the + ACE_Thread_Manager. However, this did *not* occur if a thread + explicitly called ACE_Thread::exit() since in that case the + destructor for ACE_Thread_Control never got called. The + solution to this is a trivial change to ACE_Task_Exit, which now + maintains an instance of ACE_Thread_Control internally, which + will automatically be released when the thread-specific + thread-exit-hook destructor gets called to cleanup upon thread + exit. Since this happens regardless of whether the thread + terminates implicitly or explicitly the ACE_Thread_Manager will + always be able to clean up it's internal resources (unless the + process exit()s, which is a whole different issue... ;-)). + + * Changed all occurrences of ACE_CORBA_Handler to + ACE_ST_CORBA_Handler. Now we've got two types of + CORBA_Handlers: single-threaded (ST) and multi-threaded (MT). + Take a look at ./apps/Orbix-examples/Event_Comm/{Supplier,Consumer} + for an example of how to leverage this in a portable manner! + + * libsrc/CORBA/CORBA_Handler: Totally redesigned the ACE + CORBA_Handler stuff so that it now uses the Singleton pattern + explicitly, rather than using the half-baked static method + version... Changed the test code to reflect this update! + + * libsrc/CORBA/CORBA_Handler.C (activate_service): Changed the + check so that if == 0 then we don't try to do a + putit (previously, this check used , which is less + useful...). + + * libsrc/CORBA/CORBA_Handler.C (activate_service): Removed the + flag from the constructor so that we can + make the CORBA_Handler and the MT_CORBA_Handler equivalent. + + * include/ace/sysincludes.h: Added a new macro called + ACE_THREAD_EXIT_HOOK that enables application threads + (including the main thread) to register a Task * who's + close method will automatically be called when the thread + exits, either implicitly (by falling off the end) or explicitly + (by a thread calling ACE_Thread::exit ()). + + * libsrc/ASX/Task: Moved ACE_Task_Exit into the interface part of + ACE_Task so that Irfan can maybe use this in his stuff ;-). + + * libsrc/Misc: Incorporated the ACE_Date_Time class into the + release. This is an *interface* for a system independent + representation of date and time. Implementation will follow... + + * libsrc/CORBA: Added a new MT_CORBA_Handler, which makes it + very straightforward to integrate the ACE_Reactor with + multi-threaded (MT) Orbix. + + * libsrc/Threads/Token.C: Yow, fixed a dumb problem in Tokens.C + where I was failing to include the *.i file if we weren't + compiling with inlining on!!!! + +Mon Nov 13 01:13:37 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/ASX/Message_Block: Added several new methods to + Message_Block to allow users to access and set various flags. + Thanks to Alex V Maclinvosky for + suggesting this and providing a prototype implementation. + + * include/ace/sysincludes.h: Added a new macro called ACE_NDEBUG + that can be used to toggle support for "live object dumping". + If this macro is enabled then + + * libsrc/Misc/Dump.h: Added support for "live object dumping" into + ACE. This technique is implemented with the "External + Polymorphism" pattern described in a paper available at + http://www.cs.wustl.edu/~schmidt/EuroPLoP-96.ps.Z. + + * libsrc/Threads: Added new classes called *_Process_* and + *_Thread_* for ACE_RW_Mutex, ACE_Barrier, ACE_Condition, and + ACE_Semphaore. This will allow programmers explicitly state the + scope of their locks more explicitly and will also facilitate + portability to Windows NT... + + * libsrc/Threads: Updated the constructors of all the Synch and + Synch_T classes to take an option const char * called "name." + At the moment, this doesn't do anything, but when we port to + Window NT it will be used to ensure that we can name our + process-global synchronization objects. + + * libsrc/Threads/Synch: Added a new tryacquire method to + ACE_RW_Mutex to be consistent with acquire and release... + + * libsrc/Threads/Synch.C (ACE_Mutex): Added a new "name" parameter + to an ACE_Mutex in order to support process-semantics on NT... + + * include/ace/sysincludes.h: Added a #define for EDEADLK in case + some systems don't support it (this is needed by the new + ACE_*_Token stuff). + +Sun Nov 12 14:17:01 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * apps/Name_Server: Modified the client and server test programs + so that they can both be linked statically and/or dynamically. + If svc.conf is present then dynamic linking is used, otherwise + static linking is used. This makes it much easier to test!!! + + * apps/Name_Server/client/lib/Naming_Context.C (local): Changed + things a bit so that if our server host name is "localhost" then + we assume we are local no matter what... + + * apps/Name_Server: Moved directories around a bit so that all the + tests and libs for the client/server portions of the + ACE_Name_Server build correctly... + + * apps/Name_Server/server: Replaced the ad hoc Name_Acceptor and + Name_Handler to use the official ACE_Acceptor and + ACE_Svc_Handler... This cleans up the code considerably... + + * libsrc/Threads/Synch: Added a new wrapper for the the UNIX file + locking mechanism called ACE_File_Lock. This has the same + interface as the other locking mechanisms (e.g., ACE_Mutex and + ACE_Semaphore). Therefore, it can be used in the ACE_Guard + class! + +Sat Nov 11 13:53:48 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Shared_Malloc/Memory_Pool: Improved MMAP_Memory_Pool so + that it will be smarter about remapping the file if we aren't + trying to force a fixed addr to be used for the mapping. In + particular, if we *aren't* forcing a particular address, the new + solution will be more flexible and allow the OS to determine + where to remap the memory should we need to grow the backing + store and the mapping range... + + * libsrc/Misc/Set: Implemented a simple version of the + Unbounded_Set class and its iterator. + + * libsrc/Misc/SString: Changed all the implementations of methods + in SString classes to use new/delete rather than + strdup()/free(). + + * apps/Name_Server/client/Name_Proxy: Changed rcv_reply() to + recv_reply(). + + * apps/Name_Server/client/Name_Proxy: Modified ACE_Name_Proxy so + that the constructor and open take an ACE_Synch_Options. + + * apps/Name_Server/client/Name_Options.C (ACE_Name_Options): Added + a default for the Name_Space directory called + (ACE_DEFAULT_NAMESPACE_DIR) to the testconfig.h file... + +Sat Nov 11 00:24:37 1995 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * tests/Tokens/test_token_manager/test_token_manager.C: The token + manager has a working deadlock detection algorithm. + ACE_Local_Mutex uses this to report deadlock situations. + Changes were made to ACE_Local_Mutex to fix a couple bugs which + were causing deadlock. Also, a new test application has been + added to test deadlock detection using the local mutex. + +Fri Nov 10 17:16:06 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Mem_Map/Mem_Map.h: Changed the type of from + long to size_t. + + * tests/Threads/test_thread_manager.C (main): Added a main() for + the case when there's + + * tests/ASX/UPIPE_Event_Server/event_server.C (main): Fixed a + typo that was causing problems on SunOS 4.x. + + * tests/Service_Configurator/IPC-tests/client/local_spipe_client_test.C: + added #include "ace/Log_Msg.h" (why was this working?!). + + * include/makeinclude/rules.lib.GNU: Changed the order of operations + in rules.lib.GNU from + + $(AR) $(ARFLAGS) $@ $? + -$(RANLIB) $@ + -chmod a+r $@ + + to + + $(AR) $(ARFLAGS) $@ $? + -chmod a+r $@ + -$(RANLIB) $@ + + to keep ranlib happy on SunOS 4.x. + + * apps/Time_Server: Added a Makefile + + * include/ace/sysincludes.h: Removed the include + since it was causing major problems on SunOS 4.x... + + * apps/Name_Server/Naming_Context.C: Fixed up a couple of problems + with casts. Thanks to Jack Erickson for + pointing this out. + +Thu Nov 9 15:49:40 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Threads/Synch_T: moved Atomic_Op from ./Misc to ./Threads + and merged it into the Synch_T files. This makes more sense as + a place to put it... + + * libsrc/Misc/SString.C (operator +=): Fixed a typo that would + have caused mistakes when memcpy() was used. Thanks to Prashant + Jain for noticing this. + +Wed Nov 8 22:36:51 1995 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * libsrc/Reactor/Reactor.C (TOKEN_GUARD): The reactor now uses the + TOKEN_GUARD macro. The Reactor can now be conditionally + compiled with ACE_REACTOR_HAS_DEADLOCK_DETECTION to use the new + ACE_Local_Mutex in conjunction with the ACE_Token_Manager to + detect deadlock. The deadlock detection algorithm has not yet + been implemented, but the hooks are now in place. + + * libsrc/Tokens: This subdir includes ACE's new Token library. + Check out libsrc/Tokens/README for more info. + + * tests/Tokens: There are a couple test applications for the new + Token library. See tests/Tokens/README for more info. + + * apps/Token_Server: This directory contains some new client + interfaces to the old ACE TokenServer, now Token_Server. There + are also some example use cases included in this directory. As + always, see apps/Token_Server/README for more info. + +Wed Nov 8 00:14:55 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/IO_SAP: Added the new classes for IO_SAP from + Gerhard Lenzer (lenzer@csaserv.erlh.siemens.de). This + eliminates UNIX I/O-specific features from ACE. + + * libsrc/Misc/Set: Added a new find() method to each of the + ACE_*_Set classes... + + * include/ace/sysincludes.h (ACE_ALLOC_HOOK_DECLARE): Changed + enum __Ace { __ACE } to struct __ACE {}. I think this + will cause less problems with M.I... + + * libsrc/ASX/Message_Block: Added a new "allocator" parameter to a + Message_Block. This allows the memory stored by a Message_Block + to come from someplace besides the normal heap (e.g., a shared + memory segment!). + + * libsrc/ASX/Message_Block.C (ACE_Message_Block): Yow, fixed a bug + in the destructor where ACE_BIT_ENABLED was being used in place + of ACE_BIT_DISABLED! I think this was causing a memory leak... + + * libsrc/Reactor/Reactor: added a pair of methods that allow a + thread to set/get the notion of who "owns" the event loop. Only + the owner of the loop can do a handle_events() call. Also + changed things so that the requeue_position() are available for + both threaded and non-threaded implementations (just to have a + uniform interface...). + + * libsrc/ASX/Message_Block: added a new constructor and a new + init() method that just assume ownership of a char * passed + as the parameter. Note that this does *not* set any other + fields in the Message_Block and is only used to ferry around + totally opaque data in the Message Block! + +Tue Nov 7 00:52:15 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * tests/Log_Msg/test_log_msg.C (main): Added some new tests to + make sure that op_status() and errnum() work on ace_log_msg. + Thanks to Tim Harrison for these tests. + +Mon Nov 6 12:55:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Threads/Thread_Specific: Changed a couple of places in + the Thread_Specific code so that key_ is initialized to 0 and + the ts_obj * is initialized to 0. If these *aren't* 0 then + weird bugs happen on Solaris... Thanks to Tim Harrison for + noticing this and suggesting the fix! + + * libsrc/Threads/Synch_T: Added an accessor method to obtain + the underlying mutex within ACE_Condition. + + * libsrc/Threads/Synch.C (ACE_Process_Mutex): Added a dummy + argument of type const char * to ACE_Process_Mutex. This is in + anticipation of the info required in Windows NT to support a + named process-wide Mutex. On UNIX, this argument is ignored... + +Fri Nov 3 19:02:54 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/SOCK_SAP: Back from C++ World... Fixed a couple + of typos in SOCK_Dgram_Bcast and SOCK_CODgram that included the + *.i files multiple times... Thanks to Alex V Maclinvosky + for reporting this. + +Tue Oct 31 02:12:13 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Reactor: Modifed the MT_SAFE Reactor so that the + its open() method keeps track of which thread originally created + it. This thread is then considered the "owner" of the Reactor. + If a different thread tries to run the handle_events() method + then an error is returned. + + * libsrc/ASX/Task.C: Added a "group id" field to the ACE_Task. + This can be used to suspend and resume a group of tasks + atomically. Also added default suspend() and resume() methods + that do just that! + + * libsrc/Reactor/Reactor: Made the open() method + thread-safe. Thanks to Detlef Becker (beckerd@erlh.siemens.de) + for pointing out the need for this. + +Mon Oct 30 00:02:53 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Shared_Malloc/Memory_Pool.C (ACE_MMAP_Memory_Pool): + Made it possible to configure the ACE_MMAP_Memory_Pool with a + (backing_store_) file name so that it is possible for multiple + processes to share one wellknown file, as well as to have + multiple pools per process. Check out the + ./tests/Shared_Malloc/test_malloc.C file for an example of how + this works (try the -p -e -L10000 -t3 options). + + * libsrc/Reactor/Reactor: Moved handler_i into the *.C file to + avoid problems with inline functions on HP/UX. + + * libsrc/Misc/SString: Added a new class called ACE_CString. This + class is similar to ACE_WString (which has "wide character" + size), though CString has regular "char" size. Note that both + of these classes are "true" string classes, unlike ACE_SString, + which is a very simple string class that is only to be used for + very specific purposes... + + * libsrc/Shared_Malloc/Memory_Pool.C (acquire): Fixed an + "off-by-one" error in ACE_MMAP_Memory_Pool::acquire() that was + causing an extra byte to be written to the backing store file... + This was causing the ./tests/Shared_Malloc/test_malloc.C program + to fail when -p was given. After this fix the test works + again... (thank God!). + +Sun Oct 29 22:43:25 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Shared_Malloc/Malloc: Added two new classes: + ACE_Allocator and ACE_Allocator_Adapter. ACE_Allocator uses + inheritance and dynamic binding to provide extensible mechanisms + for allocating and deallocating memory. ACE_Allocator_Adapter + implements the Adapter pattern to enable ACE_Allocator to be + used with instantiations of the ACE_Malloc<> template class. + +Sat Oct 28 13:51:07 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * tests/ASX/Event_Server: Added a new directory called + UPIPE_Event_Server, which tests a version of the Event_Server + that is instantiated with ACE_UPIPE_* IPC mechanisms, + rather than by the ACE_SOCK_* mechanisms. + + * libsrc/IPC_SAP/Addr: Created a new file called UPIPE_Addr.h. + This file contains a typedef of ACE_SPIPE_Addr to + ACE_UPIPE_Addr. The purpose of doing this is to "logically" + decouple the ACE_UPIPE* classes from the ACE_SPIPE* classes + (even though they share the same *physical* representation at + this point...). + + * libsrc/IPC_SAP: Fixed a small bug in TLI_Connector.connect() and + SOCK_Connector.connect() that failed to set the + new_stream::handle_ to ACE::INVALID_HANDLE when the connection + failed. Thanks to the ever-astute Mark Patton + (mark_patton@tx72.mot.com) for noticing this. + +Thu Oct 26 15:08:22 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * tests/Threads: created a new test program called + test_thread_manager.C that tests the new semantics for managing + groups of threads. + + * libsrc/Reactor/Signal.C (ACE_Sig_Action): Added a new method + that allows me to create a Sig_Action object that contains both + the handler and the signal to register for. This handler is + register to handle the signal in the constructor of the + object... + + * libsrc/Threads/Thread_Manager: enhanced the Thread_Manager to + add support for operations (i.e., suspend, resume, kill) on a + group of threads. + + * libsrc/Threads/Thread_Manager: Added a new method that allows + the Thread_Manager to resize itself automatically when it's + internal table gets full. + + * libsrc/Threads/Thread_Manager: Updated the return value of + Thread_Manager::spawn() and Thread_Manager::spawn_n() so that + they return -1 on failure *and the group id* on success. + Originally, they returned 0 on success, but this new return + value is more useful since it can be used to control groups of + threads atomically. + +Wed Oct 25 01:03:32 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * apps/Name_Server: Began integrating the newly donated name + server into ACE. There are a number of dependencies on + RogueWave that must be removed, but things are looking good so + far. + + * libsrc/Misc/Set: Changed the name of ACE_Unordered_Set to + ACE_Fixed_Set to be consistent with the ACE Stack classes... + + * libsrc/Misc/Set: Added new ACE classes called ACE_Unbounded_Set, + ACE_Bounded_Set, ACE_Unbounded_Set_Iterator, and + ACE_Bounded_Set_Iterator to deal with ACE name service + stuff. + + * libsrc/Misc/SString: Added a new class called ACE_WString that + gives a very simple "wide-character" string representation for + ACE. This is needed for the ACE name service stuff. + + * libsrc/Misc/SString.C (operator =): Fixed this so that ::strdup + is matched up with ::free, rather than with delete... + + * libsrc/Log_Msg/Log_Msg.C (log): Updated the ACE_Log_Msg class to + store an ostream * in thread-specific storage. This can be used + in conjunction with the dump() method on each ACE class, as well + as with the ACE_ERROR and ACE_DEBUG logging macros. + +Tue Oct 24 00:19:13 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Added a definition of the dump() method to every class in ACE in + anticipation of the changes requested for Siemens. + + * Changed all occurrences of ACE_Signal_* to ACE_Sig_* to make the + ACE naming of signal handling wrappers consistent. + + * libsrc/Threads/Thread: Fixed some obscure bugs with the way that + ACE_Thread was compiling on platforms that don't support + threads. + + * include/ace/config-irix*.h: Removed all TLI support from the SGI + platform. It seems to be totally screwed up from the tests that + I've run and there's no sense in bending over backwards to + support an IPC API that is brain-damaged to begin with... + + * apps/Logger/Service_Configurator_Logger/Thr_Server_Logger: Fixed + up the code so that the Thr_Logging_Server stuff will compile + correctly even for platforms that lack threads! + + * libsrc/Connection/Strategies: Added new strategies that provide + Singleton creation and Process concurrency policies. + + * libsrc/Connection/Connector.C (handle_close): Make sure that all + pending timer objects are removed from the Reactor's timer queue + when a Connector shuts down. In addition, make sure to remove + and delete all dynamically allocated ASTs, as well. Thanks to + Karl-Heinz Dorn (kdorn@erlh.siemens.de) for suggesting this. + + * libsrc/Threads/Thread_Manager.C (wait): Modified wait() so that + it now takes an ACE_Time_Value *, which can be used to wait + until all threads terminate or a timeout occurs... + + * libsrc/Threads/Thread_Manager: Moved Thr_Descriptor from within + the ACE_Thread_Manager class to become ACE_Thr_Descriptor at + file scope. This is in anticipation of the cool new thread + manager stuff on the way... + + * libsrc: Updated every class in ACE to include a "dump" method + with the signature "void dump (void);" This method soon will be + tied into the ACE_Dump mechanism to allow all live objects in + ACE to have their state dumped automagically on-demand. This is + useful for debugging and tracing etc. + + * libsrc: Updated every class in ACE to include a "Alloc hook." + This hook will enable all ACE classes to be allocated from a + particular memory pool. + + * include/makeinclude/rules.local.GNU: fixed the clean target to + delete the *.rpo files (else gcc -frepo can get some crazy + errors) and combines all rm-commands for the target realclean + into one command (in some cases the last two lines do not have + any files to delete, in which case rm produces an usage + message). Thanks to John Huchinson (hutchiso@epi.syr.ge.com) + for the patch. + + * libsrc/IPC_SAP/Addr/INET_Addr: Fixed all the uses of gethost* + and getserv* to use the reentrant get*_r functions if + ACE_HAS_REENTRANT_FUNCTIONS is set and ACE_MT_SAFE is set. + Thanks to Bill Tang for suggesting this. + + * libsrc/Misc/OS: Started adding support for the POSIX *_r + functions to the OS class. + + * include/ace: Added a new #define called + ACE_HAS_REENTRANT_FUNCTIONS. This indicates that the platform + supports reentrant functions (i.e., all the POSIX *_r functions + like gethostbyname_r). + +Mon Oct 23 21:15:50 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * include/makeinclude/platform_irix5.3.GNU (LIBS): Removed the + link of the nsl lib since it seems not to be present on this + platform. Thanks to Karel Zuiderveld + for noticing this. + + * libsrc/IPC_SAP/Addr/INET_Addr.i (operator ==): Enhanced the + semantics of comparison to check both the port number and IP + address. Thanks to Mark Patton (mark_patton@tx72.mot.com) for + suggesting this. + +Thu Oct 19 00:10:28 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/Addr/INET_Addr.C (set): Fixed a stupid bug that + failed to set errno appropriately if things go wrong with this + method. Thanks to Mark Patton (mark_patton@tx72.mot.com) for + noticing this! + +Sat Oct 14 12:07:16 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Threads/Thread_Manager: Modified the Thread_Manager so + that even in the case where we are compiling for non-MT systems + the Thread_Manager still has the same method interface (all of + which are no-ops). + +Wed Oct 11 00:12:57 1995 Douglas C. Schmidt (schmidt@mambo.cs.wustl.edu) + + * Finished commenting all the classes in ACE. Updated all manual + pages accordingly. + +Fri Oct 6 14:17:17 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * tests/ASX/Event_Server/Event_Server: Changed + + ACE_SOCK_Acceptor &sa = (ACE_SOCK_Acceptor &) *this->acceptor_; + + to + + ACE_SOCK_Acceptor &sa = this->acceptor_->acceptor(); + + Thanks to Dieter Quehl (quehl@erlh.siemens.de) for suggesting + this. + +Thu Oct 5 00:22:56 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/ASX/Map_Manager: Added a new find() method to the + Map_Manager. This method only checks for the existence of an + EXTERNAL_ID, and doesn't return the INTERNAL_ID. + + * Introduced the new "trait"-based *_Connector, *_Acceptor, and + *_Stream interfaces for all the IPC_SAP classes. Basically, for + each class like + {SOCK,TLI,SPIPE,etc,}_{Acceptor,Connector,Stream}, there's now a + typedef for the appropriate type of ACE_*_Addr subclass and the + appropriate type of ACE_*_Stream class. For example, here's + what's in ACE_SOCK_Acceptor (same goes for ACE_SOCK_Connector): + + class ACE_SOCK_Acceptor + { + public: + // ... + + // = Traits. + typedef ACE_INET_Addr PEER_ADDR; + typedef ACE_SOCK_Stream PEER_STREAM; + }; + + Once C++ compilers can grok template typedefs correct, this new + approach will allow much greater simplification of code, so that + template classes like + + template + class ACE_Acceptor { /* ... */ + virtual int open (const PEER_ADDR &); + }; + + that are currently used like this: + + ACE_Acceptor acc; + + can be replaced with + + template + class ACE_Acceptor { /* ... */ + virtual int open (const PEER_ACCEPTOR::PEER_ADDR &); + }; + + that are used like this: + + ACE_Acceptor acc; + + i.e., the ACE_SOCK_Acceptor maintains a "trait" that the + ACE_Acceptor uses to determine the appropriate addr. This is + more concise and less error-prone than the current scheme that + requires you to pass into the ACE_INET_Addr separately (ugh). + + Note that the trick to making all this work is to typedef the + PEER_ADDR trait into the ACE_SOCK_Acceptor class, as follows: + + class ACE_SOCK_Acceptor { + public: + typedef ACE_INET_Addr PEER_ADDR; // Trait... + }; + + Unfortunately, none of the C++ compilers (e.g., SunC++ 4.0.1, + G++ 2.7.0) support this stuff yet... Therefore, I've added + a set of macros that that will toggle back and forth between + whichever approach works, depending on the setting of + ACE_HAS_TEMPLATE_TYPEDEFS. Hopefully, over time compilers will + support this stuff correctly and life will become easier. + + * libsrc/ASX/Message_Queue: Changed all occurrences of the S_MUTEX + and S_CONDITION macros to ACE_SYNCH_MUTEX and + ACE_SYNCH_CONDITION in order to conform to the new ACE namespace + control conventions. + + * libsrc/Connection/Acceptor: Modified the Acceptor class to split + it into two classes: ACE_Acceptor (which implements a very + simple, very concise version of the Acceptor pattern, without + all the extra strategy mechanisms, etc.). These strategies have + now been factored out into a new class called + ACE_Strategy_Acceptor. The point of these changes is to "keep + simple things simple, but enable powerful extensions when + necessary." All the test programs that utilized the earlier + strategy version of the Acceptor have been updated to the the + Strategy_Acceptor instead. + + * libsrc/Connection/Connector: added two new protected methods, + connect_svc_handler() and activate_svc_handler(). These methods + allow subclasses to override the Connector's strategies for + connection establishment and concurrency. In addition, it makes + the pattern much easier to explain via the Connector pattern and + also is more similar to the Acceptor. + +Wed Oct 4 18:45:58 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * apps/Orbix-Examples/Event_Comm: Fixed the examples in this + directory so that they compile with the new ACE. + +Tue Oct 3 17:33:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * include/makeinclude/rules.nested.GNU: Added support so that + ACE can now be built in parallel using the -jN option of GNU + make. To accomplish this, just type + + % make MAKEFLAGS=-j2 + + on the command line and the "-j2" flag will be passed through to + the make hierarchy. Once the SunC++ compiler supports parallel + makes correctly (Template.DB causes problems) this will allow me + to tke advantage of my new dual-CPU SPARCstation 20!!! + +Mon Oct 2 13:34:14 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Connection: Cleaned up some of the code related to + Time_Values * by adding a new method call time_value() to the + ACE_Synch_Options class. + + * libsrc/Service_Config/Service_Record: Changed things a bit so + that we don't have to include "ace/Stream.h" in + Service_Record.h, but instead use forward decls of the + appropriate types. This breaks a circular dependency that was + causing problems for GNU C++. Thanks to John Hutchinson + (hutchiso@epi.syr.ge.com) for finding this problem. + +Sat Sep 30 13:45:08 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Changed all uses of typedef PARENT to inherited, which is less + obtrusive. + +Fri Sep 29 01:33:54 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Misc: Completed the new OS class, which will be used + shortly to remove all direct UNIX system calls in ACE. + + * libsrc: Completed redocumented the header files for almost all + of ACE. The goal was to document all the methods in all the + classes. This has most been achieved (only a few minor changes + remain). The result is *much* better manual page entires in + ./man/man3, as well as much more consistent header files and + overall documentation for ACE. + + * libsrc/Reactor/Reactor: Changed all uses of get() to + handler_i(). Also changed the check_connections() method to + check_handles(). Note that all these changes are invisible to + apps... + +Thu Sep 28 01:22:36 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/Addr/SPIPE_Addr: Changed all occurrences of + {get,set}_user_id() and {get,set}_group_id() to user_id() and + group_id() in order to be more consistent with other parts of + ACE. + + * libsrc/ASX/Task.C (module): Modified the implementation of + several Task helper methods (e.g., sibling()) so that they don't + crash if there is not Module associated with the Task. + + * libsrc/ASX/Stream: Removed the sync_ data member from the + private part of Stream since it didn't seem to be used for + anything. + + * libsrc/ASX/Map_Manager.C (bind): Changed the type of the INT_ID + to bind() from INT_ID to const INT_ID &. + + * libsrc/IPC_SAP/Addr/Addr: Moved some methods around in the *.i + file to the *.C file in order to be smarter about inlining. + + * libsrc/Misc/Auto_Ptr.h: Added a new pair of classes called + "auto_ptr" and "auto_array_ptr". These implement the ANSI/ISO + C++ standard auto_ptr mechanism, which helps to write + exception-safe code. The code is based on material from Jack + Reeves (jack@fx.com) and Dr. Harald M. Mueller + (mueller@garwein.hai.siemens.co.at). + + * libsrc/Threads/Synch_T.h (ACE_Null_Condition): Changed the + behavior of Null_Condition::{signal,broadcast} so that they + return 0 rather than setting errno = ETIME and returning -1. + +Wed Sep 27 00:16:01 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Threads/Synch: Fixed a bug with class ACE_Barrier: count_ + wasn't being set properly. + + * tests/Threads/test_barrier.C (main): Fixed a stupid bug + in the ACE_Barrier -- the main function was exiting, thereby + destroying the barrier! + + * tests/IPC_SAP/{SOCK,TLI}_SAP: Added test cases to exercise the + new reuse_addr feature of SOCK_Connector and TLI_Connector. + + * libsrc/IPC_SAP/{SOCK,TLI}_SAP/{SOCK,TLI}_Connector: Implemented + the new behavior for reusing a local address. Also fixed a few + error cases that would have lead to descriptor leaks. + + * libsrc/IPC_SAP/SOCK_SAP/SOCK.C (open): Modified a few return + values and comparisons to ease the transition to WIN32. + + * libsrc/ASX/Task.C (ACE_Task): Changed the behavior of + Task::activate() so that it uses the + ACE_Service_Config::thr_mgr() Singleton if no thread manager has + been associated with a Task when it becomes an active object. + + * libsrc/Service_Configurator/Service_Config: Added a new static + method to class Service_Config called thr_mgr(). This static + method behaves as a "Singleton" and provides a convenient + default thread manager that is available to all threads + throughout a process. + + * libsrc/IPC_SAP: Changed all the IPC_SAP/*_SAP/*_Connector.[hiC] + files and the Connection/Connector.[Chi] class in order to add + "reuse_addr" behavior consistent with the Reactor. This enables + the client to specify that the "local_addr" should be reused + (e.g., via SOCKREUSEADDR), even if its "2 minute wait" time + hasn't elapsed yet. The libsrc/Connection/Connector.[Chi] files + were also changed to support this new interface. + + * libsrc/Log_Msg/Log_Msg.C (log): Fixed a mistake in Log_Record + caused by the new thread-safe storage enhancement. The data + being logged was being rounded up incorrectly. Thanks to Daniel + Proulx (daproulx@qc.bell.ca) for reporting this. + + * libsrc/Reactor/Signal.i (operator): Made a minor change to the + definition of operator struct sigaction * to work around a bug + with the HP/UX C++ compiler (lame, lame, lame)... + + * libsrc/Service_Config: Changed all occurrences of + ACE_Service_Config::reactor (which was originally a globally + accessible public method of class ACE_Service_Config) to + ACE_Service_Config::reactor () (i.e., made the reactor a + Singleton implemented by a static method). This was long + overdue and will fix all sorts of niggling problems with order + of initialization since the reactor() method can do "lazy + creation" of Reactors now, i.e., create one the first time it is + referenced. In addition, changed the + ACE_Service_Config::svc_rep to ACE_Service_Config::svc_rep () in + the same manner. + + * Changed all occurrences of the form: + + *_Stream stream; + *_Connector con (stream, remote_addr); + + if (stream.get_handle () == ACE::INVALID_HANDLE) + ... + + To + + *_Stream stream; + *_Connector con; + + if (con.connect (stream, remote_addr) == -1) + ... + + which is cleaner and less error prone with respect to + UPIPE_Stream (which doesn't have a valid handle once it's + connected). + + * Changed all occurrences of get_handle () == -1 to get_handle () + == ACE::INVALID_HANDLE to help smooth the move to WIN32... + + * libsrc: Created a new directory called Shared_Memory and moved + the Shared_Malloc_MM and Shared_Malloc_SV classes from the + ./Shared_Malloc directory to here, where they are now called + Shared_Memory_MM and Shared_Memory_SV. This is a better + name/place for them since they never really had anything to do + with malloc in the first place! What remains the Shared_Malloc + is the Malloc.* and Memory_Pool.* classes, which are typically + used for truly shared malloc/free. + + * apps/Gateway/Gateway: added new logic to the Gateway to enable + it to specify which local port to bind() to. + +Tue Sep 26 21:17:29 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Connection/Strategies.C (open): Added a return 0; at the + end of the ACE_Thread_Strategy::open method. + + * tests/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.C: + Made CLI_Stream a template so that we don't have to worry about + multiple includes of classes... + +Mon Sep 25 01:41:27 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP: Revised the close() method of TLI_SAP and + SOCK_SAP so that they don't try to close down a handle that == + ACE::INVALID_HANDLE. + + * Changed all uses of ::free ((char *) ...) to ::free + (ACE_MALLOC_T (...)) to work around inconsistent prototype + problems with some compilers. + + * include/ace/sysincludes.h: Changed ACE_MALLOC_TYPE to + ACE_MALLOC_T which is a bit less verbose... + + * libsrc/Service_Configurator/Makefile (BUILD): Fixed the argument + to sed from -s (which is invalid) to -e (which is valid). + Thanks to Doug Ritter (dougr@guilder.datalytics.com) for + noticing this. Also used sed to do a more elegant fix on the + age-old problem of inconsistent prototypes for free() and + realloc()... + + * libsrc/IPC_SAP/UPIPE_SAP: Rewrote all the UPIPE_* classes to + remove any dependencies on class UPIPE. This class appears to + be unnecessary since it mimics the behavior of class SPIPE. To + simplify the behavior of the UPIPE_* classes, they now inherit + from the SPIPE_* classes where appropriate. + + * libsrc/IPC_SAP/UPIPE_SAP: Changed the semantics of the + UPIPE_Connector and UPIPE_Acceptor connection methods so that + they close down the SPIPE_Stream after a connection is + established successfully. This is important to conserve + descriptors. + + * libsrc/Misc: Created a new class called OS, which encapsulates + *all* of the UNIX system calls and library routines within a + single class. The rest of ACE will program only to the methods + in this interface, which will make it much easier to port to + other versions of UNIX (and WIN32!). + +Sun Sep 24 11:49:47 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/SOCK_SAP: Conditionally compile the LSOCK_* stuff + if the OS platform (e.g., Linux) doesn't support it. + + * Changed all occurrences of ACE_HAS_NO_... to ACE_LACKS_... in + all the config*.h files and the headers/source. This reads + better... + + * Changed all uses of (1) Acceptor::peer_acceptor_ to + Acceptor::acceptor(), (2) Svc_Handler::peer_ to + Svc_Handler::peer(), and (3) Connector::peer_connector_ to + Connector::connector() to make the code more abstract and + resilient to future changes. + + * include/ace/sysincludes.h: Added a new macro called + ACE_NEW_RETURN that provides a useful abstraction for + expressions involving operator new since we can change memory + allocation error handling policies (e.g., depending on whether + ANSI/ISO exception handling semantics are being used). + + * libsrc/Threads/Thread.C: Changed things a bit so that if + ACE_MT_SAFE == 0 then Thread::self() returns 1, regardless of + whether the platform supports threads. + + * Went through the entire library and (hopefully) made sure that + all calls to global system calls and library routines are + prefixed with "::". + + * libsrc/Misc/Get_Opt.C: Changed this class to use the Log_Msg + logging mechanism rather than stderr... + + * tests/Misc: Added a new test program to test the Profile_Timer. + + * tests/Reactor/misc: Added a new test program to test the + Handle_Set. + + * libsrc/Service_Configurator: Changed the error messages in + Svc_Conf.y and Svc_Conf.l to go to the ACE Log_Msg logging + mechanism rather than stderr... + + * libsrc/Connection/Acceptor: Modified the Acceptor and + Oneshot_Acceptor classes so that they take advantage of the new + ACE_Creation_Strategy, ACE_Accept_Strategy, and + ACE_Concurrency_Strategy components. This will make is easy to + define Acceptors that can be flexibly configured to use various + creation strategies (e.g., dynamic linking, singletons, dynamic + memory creation, etc.) for making Svc_Handlers. + + * libsrc/Connection/Svc_Handler: Added several new classes -- + ACE_Creation_Strategy, ACE_Accept_Strategy, and + ACE_Concurrency_Strategy -- that form the heart of the new + ACE_Acceptor implementation. These classes define the creation, + passive connection acceptance, and concurrency strategies + employed by the Acceptor factory when it receives a connection + from a client. + + * libsrc/Connection/Acceptor: Modified the implementation of the + Acceptor and the Oneshot_Acceptor. These classes are no longer + related by inheritance since they behave in fundamentally + different ways and sharing code was making it hard to write and + use these classes correctly. + + * libsrc/Misc/Misc: Moved the enum INVALID_HANDLE from IPC_SAP.h + to Misc.h since this is actually more general than just the + sockets stuff and we need to be portable to WIN32... Therefore, + any code that originally said ACE_IPC_SAP::INVALID_HANDLE should + now be ACE::INVALID_HANDLE. + + * Removed the ACE_OMIT_SERVICE_CONFIGURATOR flags. These are + annoying -- anyone who wants to subset ACE should be responsible + for doing this stuff. + +Fri Sep 22 22:36:33 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Threads/Thread_Spawn.C: Greatly simplified the + implementation of Thread_Spawn by leveraging the new class Task + semantics for activate(). Now, all the concurrency activation + mechanisms necessary to create active objects are associated + with a Task and all the Thread_Spawn needs to do is to define a + new make_svc_handler() Factory Method to create a SVC_HANDLER + and activate it! + + * libsrc/ASX/Task.C: Tightened up the semantics of Task::activate + (which turns a passive object into an active object, i.e., one + with its own thread). Now, if an object is activated more than + once it ignores the other requests, unless the force_active + parameter is enabled. Moreover, activate() now takes a + parameter that indicates the number of threads to allocate for + the Task. This makes it simple to have a "thread pool" + associated with a Task. + +Thu Sep 21 00:49:55 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * tests/Connection: Updated the CPP-acceptor and CPP-connector to + use the underlying Acceptor and Connector patterns more + robustly. Also added new hooks to include a Service_Config + component so that integrating this with the ACE dynamic linking + scheme will be a snap! + + * libsrc/Connection/Acceptor.C: Revised the Oneshot_Acceptor to be + robust in situations where it isn't given a Reactor *... + + * apps/Logger: Fixed a couple of minor problems with *.i files + being included when __INLINE__ is set. This should help G++ + compiler ACE better... + + * libsrc/Reactor/Reactor: Enhanced the Reactor::notify() method so + that it takes both an Event_Hander * and a Reactor_Mask, which + it passes to the Reactor's main event loop thread via the pipe. + The event loop thread uses this mask to determine which method + to invoke. This new feature is due to the insight of Karl-Heinz + Dorn (kdorn@erlh.siemens.de). + + * libsrc/Connection/Connector: Fixed a braino in + Connector::handle_output, which was using ::getpeername() to + check whether a connection has been established with a peer. + Naturally, this only works for sockets, and doesn't work at all + for TLI or SPIPEs... + + * libsrc/IPC_SAP/Addr/SPIPE_Addr.C (set): Changed the return type + of this method to "int" in order to conform to the types + expected by the Acceptor/Connector patterns. + + * Removed all uses of the global scope "::" for all variables and + methods that are not UNIX system calls or library calls in + preparation to change over to the new OS class (requested by + Siemens). + +Wed Sep 20 14:39:08 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/SPIPE_SAP: Renamed the SPIPE_IO classes to + SPIPE_Stream to be consistent with the other parts of the ACE + library. Updated all parts of the library to reflect this + change. + + * tests/Service_Configurator: Moved the current contents of this + directory into a new directory called IPC-tests. Created a new + directory called Connection-tests where the dynamic linking + examples for Siemens will go. + + * libsrc/Reactor/Signal: Made a bunch of minor changes to support + signal handling on SunOS 4.x platforms. Thanks to Aniruddha + Gokhale for help with this. + + * libsrc/Threads/Synch.h: Modified the #ifdefs a bit so that + Synch_T.h gets included regardless of whether ACE_HAS_THREADS. + + * libsrc/Threads/Synch_Options: Added a new set() method to make + it possible to initialize the Synch_Options from outside the + constructor. + + * libsrc/Connection/Svc_Handler.C: Added checks within the + ACE_Svc_Handler so that if we are given a NULL Reactor we don't + crash! + + * libsrc/Mem_Map: Tidied up this class and added comments to the + header so that the class2man has something to generate manual + pages from! + + * libsrc/Misc/Misc: Added a new method called "round_to_pagesize", + which was previously in Mem_Map. This is a better place for it + since other parts of ACE (e.g., Shared_Memory) use it. + + * libsrc/Misc/Misc: Added a new method called "get_file_size", + which was previously in Mem_Map. This is a better place for it + since other parts of ACE might want to use it. + +Tue Sep 19 00:24:41 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released a beta version of ACE 3.3.1 for G++ testing. + + * libsrc/IPC_SAP/SOCK_SAP/SOCK_Dgram.C: Removed a stray INLINE + that was causing problems for G++. Thanks to E. Jason Scheck + for reporting this. + + * libsrc/IPC_SAP/Addr/INET_Addr: Improved the documentation for + this class and also added new semantics to the constructor and + set() method so that a "ip_addr:port_number" tuple can be given + as a single string (e.g., "1234:tango.cs.wustl.edu" or + "1234:128.252.166.57"). This is useful since it gives a uniform + interface for addressing for Internet domain, UNIX domain, and + SPIPE domain addresses... Updated the ./tests/Connection tests + to use this form (which is nice since now they are all very + orthogonal!) + + * tests/Connection: Created a whole new suite of tests that + exercise the connection patterns for all of the relevant IPC + mechanisms (e.g., SOCK_SAP, TLI_SAP, SPIPE_SAP, and UPIPE_SAP). + + * bin/clone.C: fixed the first #include so that it uses #include + "ace/sysincludes.h". Thanks to Alex V Maclinvosky + for noticing this. + +Mon Sep 18 01:52:07 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/ASX/Message_Queue.C (close): Fixed yet another problem + with variables being defined in for loops. G++ is good for + detecting this ;-). + + * libsrc/Threads: Moved all the template classes from Synch.* into + Synch_T.* in order to make it possible to compile templates with + G++. Thanks to E. Jason Scheck for suggesting + this. + + * libsrc/IPC_SAP/UPIPE_SAP: Make a number of changes to ensure + that all the UPIPE_SAP classes conform to the same interface as + all the other ACE IPC classes. + + * Changed all occurrences of THR_FUNC to ACE_THR_FUNC to protect + the global namespace better. + +Sun Sep 17 13:36:23 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * tests/ASX/Message_Queue: Fixed a typo in these test programs + that caused a segfault since a vararg parameter was omitted on a + call to the Log_Msg::log() method. Maybe iostreams isn't so bad + after all... ;-) + + * apps/Logger/Service_Configurator_Logger/Thr_Server_Logger: fixed + a stupid error that was caused by some mods I made after ECOOP + to update the threaded logging server. When I changed the + Thr_Logging_Acceptor so that it no longer inherited from the + Logging_Acceptor I forgot to redefine the init() method... + + * man: Totally regenerated the ACE manual pages using the new + versions of the OSE tools provided by Karl-Heinz Dorn + (kdorn@erlh.siemens.de). + + * Changed all occurrences of MT_SYNCH and NULL_SYNCH to + ACE_MT_SYNCH and ACE_NULL_SYNCH, respectively. This is + consistent with the ACE naming conventions and had been an + oversight when I renamed everything earlier. + + * Fully built and tested ACE with the __INLINE__ flag enabled. + This will generate code with many small methods in the library + inlined. Had to fix a bunch of minor things to allow this to + work without compilation-order dependency problems. + + * libsrc: Made a bunch of changes to the way that header files are + included internally to ACE in order to break compilation-order + dependencies. This is necessary to support GNU G++'s lame + handling of templates. None of this stuff should affect + application code. + + * tests: Added a whole new slew of tests for the remaining parts + of ACE that weren't currently included in ./tests. This stuff + exercises ACE components like the Log_Msg logger and factors all + the #if defined (DEBUGGING) code out of the ./libsrc directory + tree and puts it in the ./tests directory tree, where it + belongs. + + * Changed all uses of the error macros LM_* to ACE_* in order to + avoid name collisions with other libraries, frameworks, and + toolkits. In addition, changed all uses of the error enumerals + LOG_ to LM_ in order to avoid a conflict with system #defines in + . + + In order to change these automatically, I used the following + UNIX command sequence: + + % find . -type f -print | xargs perl -p -i -e 's/LM_/ACE_/g' + % find . -type f -print | xargs perl -p -i -e 's/LOG_/LM_/g' + +Sat Sep 16 11:55:18 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * tests/Threads: Added a new test for Thread_Specific storage. + + * Added a new platform/compiler configuration flag called + ACE_TEMPLATES_REQUIRE_SOURCE that must be set for compilers + (e.g., GNU G++) whose template mechanism must be able to + see the source code (i.e., the *.C files). Changed *lots* of + header files to enable this... Also had to change the + corresponding *.C files so that they wouldn't get included + twice... + + * libsrc/Connection: redid the implementation of Acceptor, + Connector, and Svc_Handler to get more control over the scope of + #defines like #define SH SVC_HANDLER, etc. + + * libsrc/Threads/Thread_Spawn: Totally redid the implementation of + Thread_Spawn to use the Acceptor class template. This greatly + reduces the amount of code to implement the Thread_Spawn! + + * libsrc/Threads/Thread_Spawn: Moved the Thread_Spawn + implementation into the ./libsrc/Threads directory rather than + in the ./libsrc/Service_Configurator directory since it deals + with threading and thus belongs in the other place. + +Fri Sep 15 00:25:51 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Threads/Token.i (tryacquire): Added a cast to fix passing + a const pointer to a function that was expecting a non-const. + Thanks to E. Jason Scheck for reporting this. + + * libsrc: Added a bunch of changes to enable G++ to compile ACE. + A lot of this involves moving around info in header files so + that templates can be dealt with using the relatively lame GNU + C++ repository scheme. Thanks to E. Jason Scheck + for all his help in this. + + * libsrc/Synch: created Synch_Options.C out of Svc_Handler.C, so + that Svc_Handler.C could be "template pure"; all the other files + were already separated. Thanks to E. Jason Scheck + for recommending this. + + * Makefile (clone): Added a tiny fix that solves a weird problem + that arises with symbolic links on HP/UX. Thanks to Jam Hamidi + (jh1@osi.com) for tips on how to fix this. + +Thu Sep 14 10:55:30 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * apps/Gateway/Gateway/Channel.C (route_message): Updated the main + routing code to check for whether a channel is_active() + (i.e., is actually connected) before trying to send messages + to it. This was originally done in the Set class iterator, but + I revised that to make it more reuseable and to workaround bugs + in the HP/UX compiler so I had to update the main code... + + * libsrc/Threads/Thread_Specific: Added a new method to called + ts_object () to class ACE_Thread_Specific that get the + thread-specific object for the key associated with this object. + Returns 0 if the data has never been initialized, otherwise + returns a pointer to the data. This is useful since now you can + query a thread-specific storage mechanism to see if there's ever + been a thread-specific object created *without* having to + actually create one if one hasn't been created yet! Thanks to + Detlef Becker (beckerd@erlh.siemens.de) for pointing this out. + + * include/makeinclude/platform_sunos5_sunc++_orbix.GNU (LIBS): + Changed the default compilation strategy for SunOS 5.x machines + to use -mt. This seems to be necessary to build robust + libraries that are thread-safe. Thanks to Phil Mesnier + and Chris Cleeland + for hounding me until I changed the + existing solution. If you *don't* want this behavior you need + to remove -mt from the platform_macros.GNU file and and remove + the ACE_HAS_THREADS and ACE_MT_SAFE flags, etc. from the + config-sunos5.*.h files. + + * libsrc/Shared_Malloc/Memory_Pool.C (ACE_MMAP_Memory_Pool): Added + a new parameter to the constructor called write_each_page that + if enabled forces a write to each page to ensure that space is + allocated from the file system (otherwise, we can end up failing + due to optimisitic resource allocation...). Thanks to Phil + Brooks for detecting this issue and + implementing a solution. + + * include/ace/sysincludes.h: Added #ifdef support for HP/UX, which + fails to properly wrap with an extern "C" block. + +Mon Sep 11 01:39:35 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Connection/Connector.C (handle_input): Changed the call + to Svc_Handler::close() to accept the default value of 0 rather + than -1... Thanks to Mark Seaborn + for noticing this. + + * libsrc/Connection: Changed all uses of ADDR to PEER_ADDR to + avoid a name clash in Linux... Thanks to James Morris + for finding this. + +Sun Sep 10 03:56:18 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Threads/Synch: Added support for "barrier + synchronization" to ACE in the form of ACE_Barrier. Thanks to + Bruce Worden (bruce@betsy.gps.caltech.edu) for suggesting this + and pointing me in the right direction. + + * tests/Threads: Added a test for the new barrier synchronization + mechanism. + +Sat Sep 9 11:58:16 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Reactor: Changed Reactor::max to Reactor::max3 to + avoid problems with conflicting names of macros in Sun header + files! + +Mon Sep 4 14:34:52 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Signal: The new ACE_Signal_Handlers mechanism + appears to be working! There's a test in ./tests/Reactor/misc + called test-signal.C that illustrates how all this works. + + * libsrc/Reactor/Signal: Added several new methods to + ACE_Sig_Action to make life easier to implement the new + ACE_Signal_Handler code... + + * libsrc/Reactor/Signal.C (ACE_Sig_Action): Changed the order of + the arguments to the ACE_Sig_Action constructor. It's almost + always the case that you want to vary the SignalHandler, but + only rarely do you want to vary the mask or flags. By + reordering this, it's easier to get the correct default values + without adding extra junk... + +Mon Sep 4 01:11:29 1995 Tim Harrison (harrison@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/SOCK_SAP/SOCK_Dgram_Multicast: added support to + allow a port to be reused for multicast sockets. This is useful + if you are multicasting to multiple processes, some of which are + on the same host! + + * libsrc/ASX/Map_Manager: Fixed an odd bug that must have gone + undetected for a long time somehow. Basically, the "is_free_" + field of the ACE_Search_Structure struct was never being set to + it's correct initial value of 1. I don't know how this didn't + surface before... At any rate, it is fixed now... + + * include/ace/sysincludes.h: Changed the inline methods for + SET'ing and CLR'ing bits to be macros in order to get cheap + polymorphic behavior... Also changed them to use the prefix + "ACE_" to avoid namespace pollution. Changed all dependencies + in the source code (only a few...). + + * libsrc/Reactor/Signal: Added a new class called + ACE_Signal_Handlers, which subclasses from ACE_Signal_Handler. + This new class implements the semantics required for Siemens. + For example, this class allows multiple signal handlers to be + registered for the same signal. It also makes SA_RESTART the + default mode. Note that by default, the Reactor uses the + original ACE_Signal_Handler semantics. If you want the new + semantics, simply pass the Reactor a pointer to + ACE_Signal_Handlers. + + * include/ace/sysincludes.h: Removed the automatic inclusion of + ./libsrc/Misc/Misc.h from sysincludes.h since this was causing + problems with include file ordering. + +Sun Sep 3 00:22:11 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Signal.C (remove_handler): Moved a definition of + ACE_Sig_Action out of an inner block to avoid portability + problems. + + * libsrc/ASX/Map_Manager: Improved the documentation of this class + and fixed up a couple of problems with the scope of loop + indexes. + + * libsrc/Misc/{Stack,Set}: Added this new file that contains a set + of Stack and Unordered Set implementations. The Unordered Set + is used in various places in ACE (e.g., libsrc/Reactor/Signal + and apps/Gateway/Gateway/Routing_Entry). + + * libsrc/Log_Msg/Log_Msg: Moved the definition and declaration of + Thread_Specific ace_log_msg from this directory to + ./libsrc/Misc/Misc.h in order to cleanup the namespace and also + to help make this work on DEC platforms... + + * libsrc/Reactor/Signal: Changed ACE_Signal_Handler from a static + class to a non-static class in order to allow subclassing. This + is necessary to support the Siemens requirements. + + * libsrc/Shared_Malloc/Memory_Pool: Modified ACE_MMAP_Memory_Pool + so that it no longer stores the name of the backing store in a + static character array (which made it impossible to have more + than one of these at a time...). The new version stores the + name in each ACE_MMAP_Memory_Pool object. It also selects a + name that won't conflict with other names by using ::mktemp. + + * tests/Shared_Malloc/test_malloc.C (parse_args): Fixed two stupid + omissions of "break" when parsing command-line arguments. Isn't + C++ great?! (NOT)... + + * apps/Synch-Benchmarks: Came up with a killer solution to the + nagging problem of POSIX Pthread's lack of an integral thread id + (a la Solaris threads thr_self()). The solution leverages off + of our new ACE_Thread_Specific wrapper to provide the necessary + functionality. Thanks to Reginald S. Perry (perry@zso.dec.com) + for triggering the thoughts that lead to this solution... + +Sat Sep 2 17:00:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/TLI_SAP/TLI_Acceptor: Changed the implementation + of ACE_TLI_Acceptor so that ACE_TLI_Request is defined inside + the TLI_Acceptor.C file (this is the so-called "Cheshire Cat" + technique). This clean up the code and the global namespace a + bit. + +Fri Sep 1 00:53:47 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released new version of ACE 3.3 + + * libsrc/IPC_SAP/UPIPE_SAP/UPIPE.C: Fixed a small problem with + failing to #ifdef this file correctly if we don't have + threads... Thanks to John Morey (jmorey@hitel.com) for + reporting this. + + * tests/ASX/CCM_App/svc.conf: Fixed the svc.conf file so that it + looked in the .shobj directory rather than the .obj directory. + + * Released new version of ACE 3.2.9... + + * libsrc/Log_Msg/Log_Msg: Added a new field called "restart_" to + the thread-specific storage. This will be used to control + whether system calls are restarted when interrupted. + + * Changed inheritance syntax from + + class xxx + : public yyyy + { + }; + + to + + class xxx : public yyyy + { + }; + + so that the OSE tools would work correctly. + +Thu Aug 31 00:12:40 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/UPIPE_SAP: Changed all uses of UPIPE_Addr to + SPIPE_Addr since they were the same thing. This also allows + much reuse of code... + + * libsrc/IPC_SAP/{TLI_SAP,SOCK_SAP,SPIPE_SAP}: fixed the + "complete" method for these classes so that it uses the new + ACE::handle_timed_complete() method in libsrc/Misc. This cleans + up the code by merging common logic. + + * libsrc/IPC_SAP/{DEV_SAP,FILE_SAP,SPIPE_SAP}: fixed the "connect" + method for these classes to conform to the API used by the + SOCK_SAP and TLI_SAP wrappers. In addition, cleaned up the code + so that common logic was pushed into a new method in libsrc/Misc + called ACE::handle_timed_connect(). + +Wed Aug 30 00:20:18 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Connection/Acceptor.C (open): Fixed this method so that + it returns a value on all paths through the code... + + * libsrc/IPC_SAP/TLI_SAP/TLI.C (ACE_TLI): Moved the option + allocation code from the TLI::open() method into the TLI + constructor in order to make sure it is always called! + + * libsrc/IPC_SAP/DEV_SAP/DEV_Connector: Changed the signature of + the DEV_Connector::connect method to allow users to specify + flags, permissions, and timeouts (this is now consistent with + other parts of ACE). + + * libsrc/IPC_SAP/FILE_SAP/FILE_Connector: Changed the signature of + the FILE_Connector::connect method to allow users to specify + flags, permissions, and timeouts (this is now consistent with + other parts of ACE). + + * tests/IPC_SAP/TLI_SAP: Updated the test code to check the new + timer support for connection establishment. + + * libsrc/IPC_SAP/TLI_SAP: Updated the code to make it conform to + the interfaces provided by SOCK_SAP. This primarily affected + the TLI_Acceptor and TLI_Connector classes in order to add + support for timed connects and accepts. + + * libsrc/Reactor/Signal.C: Modified Signal_Handler::dispatch so + that it saves/restores errno to prevent it from being corrupted + by the handle_signal callback. Thanks to Detlef for suggesting + this. + + * libsrc/Shared_Malloc/Memory_Pool: Changed the name of + ACE_Local_Memory_Pool to ACE_Sbrk_Memory_Pool. Then added a new + version of ACE_Local_Memory_Pool that uses the C++ operator new + to acquire chunks of memory. This enables the ACE Malloc class + to integrate with existing programs that use new/delete. Thanks + to Karlheinz for suggesting this. + + * libsrc/IPC_SAP: Added the UPIPE mechanism donated by SIEMENS. + This provides an intra-process IPC mechanism that has the same + API as the interprocess and network mechanisms. + + * Reran catman on ./man/windex. Thanks to Dieter Quehl + (quehl@csaserv.erlh.siemens.de) for reporting the need for this. + + * Released new version of ACE 3.2.9... + + * tests: Fixed a bunch of minor problems that occurred when + building on HP/UX. Thanks to John Morey + (jmorey@hitel.com) for reporting these. + + * apps/Gateway/Gateway/Peer_Message.h: Changed the default values + of the parameters to Peer_Addr so they aren't trying to assign + negative values to unsigned chars! Thanks to John Morey + (jmorey@hitel.com) for noticing this... + +Tue Aug 29 18:52:17 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Thread/Thread_Specific: Changed the constructor so + that it will take an initial TYPE *, which will be used to + initialize the thread-specific object. This is necessary to + support the changes to ACE_Task described in the following + bullet. + + * libsrc/ASX/Task: Added a new class called ACE_Task_Exit to + Task.C. This class is used in conjunction with + ACE_Thread_Specific to keep exit information for a Task in + thread-specific storage. This ensures that the Task::close() + method will get called no matter how the thread exits (e.g., via + Thread::exit() or by "falling off the end of Task::svc_run"). + +Mon Aug 28 09:54:35 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released new version of ACE 3.2.9... + + * libsrc/Reactor/Handle_Set.C: changed the type of MSB_MASK from + u_long to ACE_UINT32 to handle problems with the Alpha's 64 bit + longs... + + * libsrc/Threads/Thread_Specific: Continued to try and get this + class to build correctly on other platforms... I think I've + just about got it working right now... + + * libsrc/IPC_SAP/IO_SAP/IO_SAP: Added installation flags that + indicate whether the platform has terminal ioctl flags like + TCGETS and TCSETS. I know that SunOS 5.x has these, but I'm not + sure about other platforms... + +Sat Aug 26 13:55:45 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released new version of ACE 3.2.9... + +Fri Aug 25 09:05:09 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Threads/Thread_Specific.h: Fixed a typo that was causing + this file to fail on HP/UX. Thanks to Neil Cohen + (nbc@metsci.com) for finding this! + + * libsrc/IPC_SAP/DEV_SAP/DEV_IO: Added conditional support for + getmsg/putmsg calls in the DEV_IO class. This will make things + work correctly for platforms that don't support SVR4 STREAM + pipes. + + * libsrc/IPC_SAP/FILE_SAP/FILE_IO: Added the same fixes to FILE_IO + that I added to DEV_IO... + + * include/ace/sysincludes.h (MAXNAMELEN): Fixed a typo in + sysincludes.h that caused problems for the G++ compiler. + + * libsrc/Connection/Acceptor.C (handle_close): Removed a + diagnostic message that was getting printed if a + Oneshot_Acceptor had already been removed from the reactor (it's + ok for this call to fail). Thanks to Irfan Pyarali + (ip1@cec.wustl.edu) for noticing this! + + * libsrc/ASX/Task.C (ACE_Task): Fixed a bug in the constructor + that prevented a Message_Queue from being allocated + automagically. + +Thu Aug 24 16:47:14 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * include/ace/sysincludes.h: added support for 64 bit machines so + that Internet addresses are 32 bits, as they must be! + + * libsrc/Shared_Malloc/Malloc: Changed things so that MALLOC_STATS + is now *off* by default... (also changed the name to + ACE_MALLOC_STATS). + +Wed Aug 23 15:21:25 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * include/ace/config-osf1.h: Added support for thread-specific + storage. Please let me know if this breaks on OSF/1! + + * libsrc/Threads/Thread: Added support for the thread-specific + storage wrappers for both Pthreads and Solaris threads. Also, + rearranged some of the code to emphasize similarities between + Pthreads and Solaris threads. + + * libsrc/Threads/Thread_Specific: Updated this to remove "static" + from all the data members in this class since those should be + specific to an *instance* rather than to an instantiation of the + particular template class. Tim claims this works... + + * libsrc/Threads/Token.C: Fixed a couple of typos that misspelled + "assert" (jaysus...). Thanks to David Trumble + (trumble@cvg.enet.dec.com) for noticing this. + + * libsrc/Threads/Token.C (release): Fixed a very stupid bug that + was causing the Token never to become "unused"... No excuses + for this, except that Pthreads is partly responsible ;-) + +Tue Aug 22 11:36:58 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/ASX/Task: Changed the behavior of task so that it doesn't + try to delete the Message_Queue or Thread_Manager if it didn't + allocate them! Thanks to Karl-Heinz Dorn + (kdorn@erlh.siemens.de) for suggesting this fix. + + * libsrc/ASX/Message_Block: Changed the semantics for + Message_Block::end() so that it returns a pointer to 1 past the + end of the data. This is more consistent with toolkits like + STL. Also changed the behavior of Message_Block::copy() so that + it checks to make sure the data will fit in its buffer. + + * tests and apps: Revised a bunch of files to add #ifdef so that + TLI tests and apps are not compiled if the platform doesn't + support it... + + * Fixed a bunch of minor problems for HP/UX (which lacks TLI and + other common OS features). Thanks to Mark Seaborn + (mseaborn@itthp1.comm.mot.com) for noticing these. + +Mon Aug 21 00:19:29 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Misc: Changed the name of the class Argument_Vector to + ACE_ARGV. This is a bit more concise... UNIX programmer will + know precisely what argv is... + + * Updated all of ACE to use the new naming scheme, which prepends + all ACE classes with "ACE_". This is an important change since + it prevents ACE from polluting the namespace of applications + (unless they also prefix "ACE_" in front of their classes, which + is not very likely!). + + Since this change basically affects every single file in the + entire release, as well as all existing user code I've written a + perl script called "rename-ace.pl" to automate all of this. + This script is in $WRAPPER_ROOT/bin. To use it, simply type: + + % find . -type f -print | egrep '[Chi]$' | xargs rename-ace.pl + + Note that you will need to change the first line of + rename-ace.pl to point it to whereever perl is located on your + system. + + I've tested this on the entire ACE source code base and it seems + to work fine. Please be careful using it on your code, however, + since it may conflict with names that you use. When in doubt, + remove the '-pi' from the first line of the rename-ace.pl perl + script and replace it with '-p' (which is non-destructive). + Then run the commands above and check the output carefully. + When you're convinced that everything is ok, add the '-pi' back + again. Let me know immediately if you find any problems with + this scheme! + + * libsrc/Connection/Acceptor.C: Added a virtual destructor to the + Oneshot_Acceptor to make sure that descriptors are closed down + correctly. Thanks to Irfan (irfan@wuerl.wustl.edu) for + suggesting this. + + * libsrc: Change all occurrences of Shared_Memory to + SV_Shared_Memory to firmly indicate the origins of this + wrapper... + +Sun Aug 20 23:12:03 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP: added the IO_SAP, DEV_SAP, and FILE_SAP + components donated by SIEMENS to the ACE release. + + * libsrc/ASX: Split the Message_Queue.* files into Message_Block.* + and Message_Queue.* in anticipation of the Windows NT port... + +Fri Aug 18 13:54:09 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Threads/Thread_Specific: Move the operator->() + method back into the *.C file in order to make HP/UX + happy... + + * apps/Gateway/Peer: Removed the Options.* files since they + weren't being used and they were causing problems on OSF/1... + + * libsrc/Misc/Profile_Timer: Factored common code together by + making a new typedef called Rusage that defaults to either + struct rusage or prusage_t, depending on installation flags. + Fixed a couple places in the code that were depending on the + prusage_t type (which is now the Profile_Timer::Rusage type...). + +Thu Aug 17 14:31:11 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Connection/Connector.h: Changed some typedefs in order to + keep the Centerline compiler from crapping out. I can't + *believe* how screwed up that compiler is when it comes to + templates... + + * Released new version of ACE 3.2.9... + + * libsrc/Threads/Synch: Fixed a bunch of typos that showed up + on OSF/1. Also tried to fix some other problems by removing + "const" from all the methods... + +Wed Aug 16 22:26:24 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Threads/Thread_Specific.h: Fixed another stupid bug + caused by a braino that failed to unconditionally include + Thread_Specific.i. Stuart Powell found this also... (thanks!). + + * libsrc/Threads/Thread_Specific.h: In Thread_Specific.h the + inlining macros were only included if threads were used. This + obviously didn't work for people without threads... I + moved the #endif for ACE_HAS_THREADS... back before the #ifdef + __INLINE__ stuff (e.g. to line 71). Thanks to Stuart Powell + (stuartp@ot.com.au) for suggesting this. + + * libsrc/Threads/Synch.h: Fixed a typo that manifested itself for + pthreads: Condition count_nonzero_ should obviously be + Condition count_nonzero_. Thanks to Rob Clairmont + (rclairmo@bnr.ca) for reporting this. + +Tue Aug 15 00:31:44 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Log_Msg/Log_Msg.C (log): Fixed a stupid typo (*format++ + should have been format++...). + + * libsrc/Misc/Trace.h: Move the class TSS_Int from within class + Trace to file scope and changed the name to ACE_TSS_Int to + handle problems with the HP/UX compiler. + + * include/ace/sysincludes.h: Added the word "struct" in front + of rusage to make things work on HP/UX. Thanks to Neil Cohen + (nbc@metsci.com) for reporting this fix. + + * apps/TokenServer/server/TokenMap.C: Fixed yet another problem + with scope of variables defined in for loops... + + * Released new version of ACE 3.2.9... + + * libsrc/Connector: Fixed a braino whereby I didn't use consistent + naming for my #defines (PA should have been PRC). Thanks to + Alex (alexey@ace.elektra.ru) for noticing this. + +Mon Aug 14 18:13:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/SPIPE_Acceptor: Modified the interface of open() + and accept() so they would conform to the SOCK_Acceptor and + TLI_Acceptor. This makes it possible to use SPIPE_Acceptor in + similar situations (e.g., Acceptor and Connector patterns). + + * libsrc/ASX/Stream: Fix a bug that occurred when trying to dump() + a linked Stream. + + * libsrc/Connection/Acceptor: Moved the body of the init() method + out of this class since it was unnecessarily dependent on the + INET_Addr domain addressing types. This required changes to the + ./apps and ./tests directory in order to add the init() method + to classes that used the default behavior. + + * libsrc/IPC_SAP/SPIPE_SAP/SPIPE_Acceptor.C: Fixed close() so that + it will call fdetach(2) *before* closing down the descriptor. I + hope this will fix a problem noticed by people at SIEMENS. + + * tests/ASX/Event_Server/Event_Server/Options: Fixed a problem + with the default port numbers (they weren't using the values + from ./include/ace/testconfig.h). + + * include/ace/sysincludes.h (MAXNAMELEN): If MAXNAMELEN is not + defined by a platform then ACE sets it to be FILENAME_MAX, + which should be defined in stdio.h. Thanks to Todd Blanchard + (tblancha@evolving.com) for this suggestion. + +Sun Aug 13 17:02:57 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Service_Configurator/Parse_Node: Changed the name of + Function_Node::symbol (const void *) so that it won't give + those annoying warnings anymore... + + * libsrc/Reactor/Handle_Set: Moved the definition of MSB_MASK from + the header file into a static const within the .C file in order + to avoid overflow problems on certain compilers. + + * libsrc/Threads/Synch: Implemented bare-bones versions of + Semaphore and RW_Mutex for the POSIX Pthreads wrappers so that + they'll be more compatible with the Solaris threads wrappers. + The semaphore implementation uses a Condition object and a + Mutex, which should be a reasonable solution. The RW_Mutex is a + cop-out for now and just uses a Mutex (i.e., no extra + parallelism for readers...). If anyone has a good + implementation of RW_Mutex that they'd like to share please let + me know. + + * libsrc/Threads/Thread_Specific: Fixed the prototypes for copy + constructor and operator=, which were broken... Thanks to Alex + (alexey@ace.elektra.ru) for noticing this. + + * libsrc/Shared_Malloc/Memory_Pool.C: Added some casts to + MAP_FAILED to handle OSF/1. Thanks to Alex + (alexey@ace.elektra.ru) for noticing this. + + * libsrc/Threads/Token: Fixed things so that threads waiting for a + token wouldn't get screwed up by signals that occur... + + * include/ace/sysincludes.h: Changed the #ifdef + ACE_SELECT_USES_LONG to ACE_SELECT_USES_INT for HP/UX since + believe it or not, it really does use int, not long! + + * libsrc/SV_Semaphores: Fixed some weird problems that the HP/UX + compiler was having when trying to inline methods in this class. + As a consequence, I've rearranged the class to avoid inlining + non-trivial methods. Thanks to John Morey (jmorey@hitel.com) + for reporting these problems. + +Wed Aug 9 01:29:16 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Threads/Token: Added a tryacquire() method to become + interface compliant with other LOCK mechanisms. + +Sat Aug 5 09:18:29 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Connection: Fixed a couple of bugs when using + the Acceptor and Svc_Handler when ACE_OMIT_SERVICE_CONFIGURATOR + is enabled. Thanks to Stuart Powell (stuartp@ot.com.au) for + bringing this to my attention. + + * include/ace/sysincludes.h: Added a #ifdef for MAXNAMELEN to + handle systems (like HP/UX) that don't support it. + +Thu Aug 3 22:59:13 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released new version of ACE 3.2.9... + + * libsrc/Reactor/Time_Value.i (normalize): Added new code to + perform normalization of Time_Values. Thanks to Hans Rohnert + (Hans.Rohnert@zfe.siemens.de) of SIEMENS for the suggestion. + +Tue Aug 1 00:19:00 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Changed all code that used Log_Msg::log() directly to use + LM_ERROR or LM_DEBUG. This will ensure that logging will work + with the new thread-specific storage implementation. + + * libsrc/Threads/Thread_Manager.i (open): Fixed this method so + that it is thread-safe when a Thread_Manager is resized. + + * libsrc/ASX/Map_Manager.i (open): Fixed this method so that it is + thread-safe when a Map_Manager is resized. + +Mon Jul 31 12:56:17 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Misc/Trace: Reimplemented the ACE Trace class to use the + new thread-specific storage wrapper. + + * libsrc/Log_Msg: Reimplemented the Log_Msg class to use the new + thread-specific storage wrapper. This shouldn't affect any + existing code that was careful to only use the LM* macros... + + * libsrc/Threads: Added a new class called Thread_Specific which + implements a C++ wrapper for SunOS 5.x thread-specific data + (this will also work for POSIX pthreads I believe). Thanks to + Tim Harrison (harrison@cs.wustl.edu) for coming up with the idea + for using C++ "smart pointers" to implement this. + + * libsrc/Reactor/Timer_Queue.h: Moved Timer_Node from within + Timer_Queue to outside Timer_Queue and renamed it to + ACE_Timer_Node. Unfortunately, some compilers still don't like + nested classes (ugh)... + + * Changed ACE_Synch_Options to be simply Synch_Options since it + is *not* an ACE private class... + +Sun Jul 30 00:07:28 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * include/makeinclude/README: Added a new #define called + ACE_HAS_THREAD_SPECIFIC_STORAGE, which does exactly what it + sounds like! So far, I know that Solaris defines this. I'm not + sure which other platforms do (perhaps OSF/1 does?). + +Fri Jul 28 14:53:45 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Fixed a bunch more problems with loop variables that were + uncovered with GCC 2.7. Thanks to Matt Stevens + (mstevens@ent.mrj.com) for noticing this. + + * apps/Logger/Service_Configurator_Logger: Added a new flag called + ACE_HAS_NO_STATIC_DATA_MEMBER_TEMPLATES which is necessary to + workaround bugs with GNU G++... Thanks to Matt Stevens + (mstevens@ent.mrj.com) for noticing this. + + * libsrc/Connection/Connector.C (cleanup_AST): Changed the + parameter list just a tad to try and fix a problem with + G++ (which doesn't seem to like unscoped typedefs in + argument lists or return values. + + * libsrc/Misc/Profile_Timer.i: Changed ::getrusage to be getrusage + to avoid problems with macros and scope operators... + + * include/ace/testconfig.h (ACE_DEFAULT_RENDEZVOUS): Changed the + value from /tmp/foo to /tmp/fifo.ace. Thanks to Neil B. Cohen + (nbc@metsci.com) for suggesting this. + +Thu Jul 27 12:30:06 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * apps/TokenServer/server/TokenHandler.C (abandon): Fixed a minor + bug that caused assert() to fail when a client abandoned a + Token. + + * libsrc/Reactor: Fixed a bug with the design of the Reactor's + Timer_Queue cancellation mechanism. The new mechanism is much + more robust since it ensures that timer_ids (used to cancel + pending timers) are unique up to values of greater than 2 + billion timers! As long as timers don't stay around longer than + this there should be no problems with accidentally deleting the + wrong timer. Thanks to Bill Sears (wsears@world.std.com) for + noticing this problem. + + One nice consequence to this change is that legacy code that + would have broken with the previous change is now 100% + compatible! + + * Provided a definition of ACE_Synch_Options::arg(const void *), + which I'd forgotten to define before (darn templates...). + Thanks to Tim Harrison (harrison@cs.wustl.edu) for finding this! + + * include/ace/sysincludes.h: Added a total hack to get HP/UX to + understand getrusage(). The trick is to use the following + undocumented syscall: + + #define getrusage(a, b) syscall(SYS_GETRUSAGE, a, b); + + What a hack (but it works...). + +Tue Jul 25 13:20:58 1995 Douglas C. Schmidt (schmidt@kavita.cs.wustl.edu) + + * libsrc/Misc/Profile_Timer: Fixed a typo in Profile_Timer.h + (ACE_HAS_RUSAGE_T should have been ACE_HAS_GETRUSAGE). Thanks + to George Reynolds (george@dvcorp.com) for noticing this. + + * Changed all uses of ::getopt() to use the ACE class Get_Opt + get_opt. Also changed all uses of optarg to get_opt.optarg. + Thanks to Bob Vistica (robertv@ims.com) for detecting and + reporting some inconsistencies in my previous changes... + +Mon Jul 24 19:03:03 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * include: I've added config and platform support for SGI IRIX5.3 + for use with the SGI C++ compiler. Thanks to Stuart Powell + (stuartp@ot.com.au) for these config files. + + * libsrc/Connection/Acceptor.C (handle_input): Added the + Event_Handler::DONT_CALL flag when removing the Oneshot_Acceptor + from the Reactor so that we don't set it's peer_acceptor_ to -1. + +Mon Jul 24 12:46:10 1995 Douglas C. Schmidt (schmidt@kavita.cs.wustl.edu) + + * libsrc/Misc/Profile_Timer: Fixed problems stemming from the fact + that HP/UX doesn't seem to support getrusage() (how odd). + + * tests/Connection: a new test directory to test out the Connector + and Acceptor pattern implementations. + +Sun Jul 23 12:26:37 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Connection/Acceptor.C: Fixed a minor bug with the + Oneshot_Acceptor constructor. Thanks to John Morey + (jmorey@hitel.com) for noticing this and the one below. + + * libsrc/Reactor/Timer_Queue: Moved the static method current_time + from the Timer_Queue.i file to the Timer_Queue.C file. This + avoids a bug with HP/UX C++. + +Sat Jul 22 15:54:27 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released beta version 3.2.9. Once this compiles on all major + platforms then it's time to move to version 3.3. + + * Added a number of miscellaneous changes for OSF/1 courtesy of + David Trumble (trumble@cvg.enet.dec.com). One of these changes + involved changing all uses of Reactor::{ADD,SET,CLR,GET} to + Reactor::{ADD,SET,CLR,GET}_MASK in order to avoid a class with + some symbols in OSF/1. + +Fri Jul 21 00:21:02 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Finally was able to test ACE on the SunOS 4.x platform (using + the SunC++ 4.0.1 compiler). The entire release compiled + correctly! This is a great relief after fighting with this + stuff for months... If you are building ACE on SunOS 4.x I'd + *strongly* recommend you get SunC++ 4.0.1 since it is the only + compiler that seems to be able to grok the weirdness of SunOS + 4.x... + + * Finished updating all the ./tests and ./apps code so that it + works correctly with the new Acceptor/Connector modifications. + To see examples of these changes check out + ./tests/IPC_SAP/SOCK_SAP/CPP-{nbclient,inserver}.C. + + * libsrc/Misc/Profile_Timer: Merged in the new Profile_Timer + implementation from David Trumble (trumble@cvg.enet.dec.com). + This will work with basically the same interface as the current + scheme even if the OS platform doesn't support the prusage_t + type... + +Thu Jul 20 01:07:23 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Connection: Added a new class called ACE_Synch_Options + which is used in both the Acceptor and Connector classes to + consolidate options related to synchronous and asynchronous + behavior. + + * libsrc/Connection: Added a new class called Oneshot_Acceptor. + This class inherits from the Acceptor but it only accepts one + connection at a time (i.e., it doesn't keep itself registered + with the Reactor). Several examples in the tests/SOCK_SAP + directory have been added to illustrate how all this works. + + * libsrc/Connection/Connector: completely redid the Connector and + Acceptor class interfaces to incorporate the new changes for + asynchronous and synchronous behavior. The new scheme should be + much more general (and correct...). Thanks to Tim and Irfan for + helping out with this. + + * libsrc/Threads/Synch: Fixed the implementation of Recursive_Lock + so that it won't have race conditions when testing the thread id + and nesting level in parallel threads. + +Wed Jul 19 13:15:05 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Timer_Queue: Added new support for cancellation + of individual Event_Handlers in the Reactor. In addition, it is + now possible to cancel all Event_Handlers with a single call to + Timer_Queue::cancel(). Note that this new scheme will break + existing code since Timer_Queue::schedule() (and + Reactor::schedule_timer()) now return ACE_Timer_Node *'s rather + than ints... + + * libsrc/Service_Configurator/Service_Config: Fixed a problem + where the "-s" option didn't work since it was parsed when + "Service_Config::open" was called + (it sets Service_Config::signum_). However, previously the + signal handler was already setup by the constructor. By moving + this registration to the open() method the problem was solved. + Thanks to Bob Vistica (robertv@ims.com) for noticing this. + + * libsrc/Service_Configurator/Service_Manager: Changed the + Service_Manager::reconfigure_services to use this->signum_ + rather than to hard code SIGHUP. Thanks to Bob Vistica + (robertv@ims.com) for this insight. + +Mon Jul 17 12:08:08 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Threads/Token.C (renew): Fixed a typo so that we compare + this->head_ == 0 rather than this->head_->next_ == 0. + + * libsrc/Reactor/Reactor.h: Changed the Reactor to use the + Reactor_Token rather than the pure Token to make sure that the + sleep_hook() is called to unblock the Reactor. + +Fri Jul 14 14:12:07 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Connection: Changed the default behavior of the Connector + and Acceptor classes such that they pass a -1 to + svc_handler_->close() when things go wrong. This is useful as a + flag to close() (e.g., if it needs to figure out what to do if + is shuts down prematurely). + + * libsrc/Connection/Svc_Handler.C: Added a default definition of + the put() method, which is defined as a pure virtual method in + class Task. + +Thu Jul 13 23:10:35 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * include/ace/sysincludes.h: Added support for the SGI IRIX 5.3 + OS. More screwy gettimeofday() hacks (what a pain...). Thanks + to Matt Stevens (mstevens@kirk.softeng.infonautics.com) for + these fixes. + + * include/makeinclude/platform_sunos5_centerline.GNU: Fixed a + vexing problem that was causing the Centerline C++ compiler to + puke when compiling ACE. Thanks to Chandra Venkatapathy + (cvenkat@develop.bsis.com) for finding a solution! + +Tue Jul 11 00:01:15 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released version 3.2.6 for use by Karl and Detlef. + +Mon Jul 10 00:28:51 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * apps/TTCP: Added support for benchmarking the performance of + Orbix, ORBeline, ACE SOCK_SAP, and C sockets. These results are + available at URL http://www.cs.wustl.edu/~schmidt/COOTS-95.ps.Z + + * libsrc/Service_Configurator/Makefile: Added new commands to the + Service Configurator Makefile so that all automatically + generated flex and yacc symbols (i.e., the "yy" stuff) is + renamed "ace_yy". The purpose is to avoid conflicts with other + uses of flex/yacc lexers/parsers with ACE. Thanks to Steve + Ritter (ritter@titan.com) for this suggestion and code. + + * libsrc/IPC_SAP/TLI: Changed the TLI files so they are + conditionally compiled only if the platform supports TLI... + + * libsrc/Connection: Changed the inlining strategy of Connector, + Acceptor, and Svc_Handler so that very short methods are always + inlined, but anything larger is never inlined... + +Sun Jul 9 14:07:02 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * include/ace/testconfig.h: Changed all occurrences of DEFAULT_* + to ACE_DEFAULT_ to prevent namespace collision. + + * libsrc/Connection/Connector: Massively improved the Connector + class so that its connect() method supports the following + behavior (tv == "timeout value" and ur == "use Reactor"): + + Parameters | Description + | + tv | ur | + -----|----------|------------------------------- + | | + NULL | yes | infinite timeout (using Reactor) + | | + time | yes | try asynch transaction for + | | the specified time (using Reactor) + | | + 0,0 | yes | poll; try, if EWOULDBLOCK, + | | then return immediately + | | (using Reactor) + | | + NULL | no | block forever (don't use Reactor) + | | + time | no | do a blocking transaction + | | for the specified time + | | (don't use Reactor) + | | + 0,0 | no | poll; but do not initiate a + | | nonblocking transaction + | | (don't use Reactor) + + * libsrc/IPC_SAP/SOCK_SAP/SOCK_Connector: Changed the behavior of + the SOCK_Connector::connect() method so that it uses Time_Values + rather than a simple flag that indicates whether or not to use + non-blocking connectors. The new scheme is an improvement since + it allows greater control over synchronous and asynchronous + timeouts for connection establishment. This behavior parallels + that of SOCK_Acceptor, as well! If this works well then I'll + update the TLI_Connector and SPIPE_Connector to match this + interface. + + * libsrc: Continued to improve ACE's use of the global name space + by prefixing all "helper" classes with "ACE_" + + * Updated SPIPE_Acceptor so that it would have the same basic + interface as the SOCK_Acceptor and TLI_Acceptor. + + * libsrc/IPC_SAP: Consolidated the handle_timed_wait() methods + used by the TLI, socket, and STREAM pipe wrappers so that they + share the new ACE::handle_timed_accept() method, which is in + libsrc/Misc. + + * libsrc/Misc: Modified the structure of Misc.[Ch]. Originally, + this file contained a bunch of stand-alone C functions with the + prefix "ace_" to keep them from conflicting with user's code. + I've modified things now so that all the miscellaneous functions + are now static methods in class ACE. This provides better scope + control... + + * libsrc/Log_Msg/Log_Msg: Replaced the use of a Mutex in class + Log_Msg with a Recursive_Lock. This is necessary to + handle signals correctly... + + * libsrc/Reactor/Reactor: Modified the behavior of + Reactor::notify() so that writers will block if the pipe is + full. This solves some nasty flow-control problems. + + * libsrc/Reactor/Handle_Set: changed all uses of fd_set to + ACE_FD_SET_TYPE * so that HP_UX would work correctly... + + * include/ace/config-hpux.h: Removed the ACE_HAS_XLI flag until I + get a better idea which HP systems this is installed on. + + * libsrc/Threads/Thread: Added a new static method called + spawn_n() that spawns "n" threads all running the same function. + +Sat Jul 8 14:14:34 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Service_Configurator: Made some miscellaneous changes to + "const" methods and parameters in order to handle the new + Reactor changes (C++ can be such a pain about this + sometimes...). + + * libsrc/Threads: Added "yield" and "sigsetmask" methods to class + Thread. How did I manage to omit these before?! + + * libsrc/Reactor: Updated the Reactor to use the new Token class + described below. This greatly simplies the structure of the + multi-thread support in the Reactor code. In addition, it + should improve performance because it cuts the number of context + switches compared with the old scheme. Many thanks to + Karl-Heinz and Detlef for encouraging me to redo the Reactor + implementation. + + * libsrc/Threads: Added a new class called Token that provides a + flexible and efficient recursive mutex scheme. Thanks to + Karl-Heinz Dorn (kdorn@erlh.siemens.de) and Detlef Becker + (beckerd@erlh.siemens.de) for sharing their original code for this. + +Thu Jul 6 10:37:45 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Event_Handler_T: Conditionally compiled this so + that it will only compile if the compiler supports template + typedefs (e.g., G++ doesn't seem to like this...). + + * Started to make changes in ACE to deal with the new ANSI C++ + semantics in the scope of variables defined within for loops. + Thanks to Aniruddha Gokhale (gokhale@cs.wustl.edu) for noticing + this in G++ 2.7... + +Wed Jul 5 21:50:39 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Connection/Svc_Handler: Fixed the behavior of the + Svc_Handler class so that it can be configured with a Reactor + other than Service_Config::reactor, just like the Acceptor and + Connector. Thanks to Karl-Heinz Dorn (kdorn@erlh.siemens.de) + for suggesting this! + +Tue Jul 4 00:21:31 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Added some new changes for Linux courtesy of Charles Rennolet + (clr@thurse.mn.org). + + * libsrc/Reactor/Reactor.C (bit_ops): Fixed a dumb error in + bit_ops that was caused by checking "else if (Reactor::SET)" + rather than "else if (ops == Reactor::SET)". Thanks to Mark + Patton (mark_patton@tx72.mot.com) for finding this bug and + reporting it along with the fix. + + * include/ace/sysincludes.h: Added new fixes for M_SYNC and + ENOTSUP on SunOS 4. + + * libsrc/Reactor: Added new support for integrating X and the + Reactor. These files are called XtReactor.* and XReactor.*. + Thanks to Eric Vaughan (evaughan@arinc.com) for providing this + stuff... + +Mon Jul 3 19:44:07 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Added support for SunOS 5.5 on i86 PC. Thanks to Bin Mu + (mubin@wfg.com) for the config files and fixes. + + * libsrc/Misc/Profile_Timer: Added new support for versions of + UNIX that don't support prusage_t. The new version of + Profile_Timer will use gettimeofday() and getrusage() of + prusage_t and /procfs isn't available... This code hasn't been + tested yet (since I don't have SunOS 4.x) so I don't know if it + works. + + * Hopefully fixed the SunOS4 prototype for gettimeofday(). Thanks + to Andrew McGowan (ajm@se09.wg2.waii.com) for the suggested fix. + + * include/makeinclude/platform_hpux.GNU (CC): Added new support + for building ACE and shared libraries on HP/UX. Thanks to Jam + Hamidi (jh1@osi.com) for this code. + + * libsrc/Reactor/Handle_Set: Fixed Handle_Set_Iterator::operator++ + to check for index to be greater or equal than NUM_WORDS instead + of just equal. This is better for sanity, although it may not be + needed. Thanks to Carlos Garcia Braschi (cgarcia@caramba.tid.es) + for suggesting this fix. + +Wed Jun 14 11:16:40 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/TLI_Acceptor: modified TLI_Acceptor so that it's + public constructor/open() and accept() methods are more similar + to the SOCK_Acceptor. In particular, added support for + "SO_REUSEADDR" in TLI_Acceptor and time values for accept(). + Thanks to John P. Hearn (jph@ccrl.nj.nec.com), TLI_SAP now does + the right thing for socket options. + + * libsrc/IPC_SAP: Fixed up the SOCK_Acceptor and TLI_Acceptor in + order to add better support for "timed accepts." The new scheme + uses Time_Values, which is more consistent with other parts of + ACE. In addition, the Time_Value was moved from the + constructor/open() to the accept() method, which allows more + fine grained control over this behavior. Thanks to Irfan + (ip1@cs.wustl.edu) for suggesting this. + + * libsrc/IPC_SAP: Cleaned up the SOCK_Acceptor::open and + TLI_Acceptor::open routine. In addition to being more compact + and robust, this routine now also let's open() determine which + local port to bind to (if you pass in Addr::sap_any as the + local_addr). Thanks to Irfan (ip1@cs.wustl.edu) for suggesting + this. + +Tue Jun 13 16:09:13 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Timer_Queue: Fixed an odd problem with the + Timer_Queue on Solaris. Apparently the select() call will + return slightly earlier than the timeout dictates due to lack of + granularity with the system clock. This was causing problems + where the Reactor wasn't correctly dispatching the + handle_timeout() method of Event_Handlers. The fix was to add a + 10 Millisec "fudge factor" when calling the + Timer_Queue::expire() method. Please let me know if this causes + any problems. Thanks to Giang Hoang Nguyen + (yang@titan.com) to noticing this problem. + + * libsrc/Connection/Acceptor: Enhanced the Acceptor class so that + it is possible to accept a new SVC_HANDLER synchronously, rather + than always driving this acceptance out of the Reactor's event + loop. Thanks to Irfan (ip1@cs.wustl.edu) for suggesting this. + + * libsrc/IPC_SAP/Addr: Changed all occurrences of ace_sap_any to + Addr::sap_any (i.e., sap_any is now a static data member in + class Addr). This is an improvement since it helps to limit the + scope of what would otherwise be global variables... + +Wed Jun 7 17:26:31 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * apps/Logger/Reactor_Logger/Client_Acceptor.i (handle_input): + Fixed a braino that omitted an important block of code! Thanks + to Ken Konecki (kenk@wfg.com) for finding this. + +Fri Jun 2 13:59:07 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/Addr/INET_Addr.i (set): Removed the special case + for INADDR_ANY. This should just fall right out... + +Thu Jun 1 19:45:21 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/SOCK_SAP/SOCK_Connector: Added support to + SOCK_Connector so that it is possible to bind the local TCP port + number prior to establishing the connection. Also fixed the + TLI_Connector to be consistent with this approach. Thanks to + Mark Patton (mark_patton@tx72.mot.com) for this idea. + + * Fixed a problem with Mem_Map that was caused by the fact that + some versions of Unix (e.g., SunOS 4.x) don't support MS_SYNC... + Thanks to Andy McGowan (mcgowan@wg2.waii.com) for noticing this. + + * Fixed a very stupid bug in ./libsrc/Synch.h that accidentally + omitted this->lock_.acquire() from the Guard class constructor. + Thanks to Bin Mu (mubin@wfg.com) for noticing this! + +Fri May 26 13:20:38 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Connection/Acceptor: Added a new method called + make_svc_handler() that generalizes the dynamic creation of a + SVC_HANDLER by the Acceptor's Template Method handle_input(). + This scheme is completely backwardly compatible with the + original approach, but now allows transparent extension too! + + * libsrc/Connection/Acceptor: cleaned up the Template Method logic + in Acceptor::handle_input. No longer do we set the listener + socket into non-blocking mode and then rely on a -1 with + EWOULDBLOCK to indicate there are no more connections to + establish. This was causing problems for singleton Svc_Handlers + since the Acceptor was setting their peer_stream_ to -1... The + new approach should complete solve this problem. + +Mon May 22 15:10:27 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released version 3.2.3 so that Bill Sears can test the new + #include "ace/" features. + + * Modified all the ACE source, tests, and apps so that all + #includes of its headers are refixed by ace/, e.g.: + + #include + + There are two reasons for have the include files be of + this form: + + First, you can tell at a glance by looking at the caller where + the library is coming from. + + Secondly, you can build an include tree of the form: + + /include/lib1 + /include/lib2 + /include/lib3 + /include/ace + + which then links to WRAPPER_ROOT. Now, all you have to do + when you build a make file is point to the include root, and + put links in the include root. This is especially helpful + if there are multiple versions. + + This means just one less thing that has to be modified in the + Makefile. Thanks to Bill Sears (wsears@world.std.com) for + recommending this change. + +Sat May 20 17:12:35 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * config-irix5.3-sgic++.h: Added new configuration support for SGI + IRIX5.3 courtesy of Stuart Powell (stuartp@ot.com.au). + +Sat May 13 20:44:06 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Generalized the SOCK_Connector::complete method so that it takes + a Time_Value timeout. This allows applications to wait upto a + certain limit before giving up on a non-blocking connection. + Updated the tests in ./tests/IPC_SAP/SOCK_SAP/CPP-inclient.C to + illustrate how this is used. + + * Added some interesting new tests to ./tests/Mem_Map that can be + used to benchmark the performance of various strategies (e.g., + stdio, read/write, mmap, etc.) for copying files. + +Fri May 12 19:09:10 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Mem_Map/Mem_Map: Added two new overloaded methods called + sync() that are wrappers around the msync(3c) system call. Also + added a new unmap() method that gives access to the full + behavior of munmap(3c). + +Wed May 10 14:16:16 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Tried yet another fix for the gettimeofday() botch that both + Centerline and SunOS 5.4 screw up in different ways. Thanks to + Medhi Tabatabai (Mehdi.Tabatabai@ed.nce.sita.int) for the latest + fixes. + +Tue May 9 19:05:58 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Handle_Set.C: Fixed some "off-by-one" errors that + were occurring in the Handle_Set::sync() and set_max() methods. + Thanks to Nigel Hooke (n.hooke@trl.oz.au) for finding and fixing + these. + +Mon May 8 02:01:54 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Reactor.C: Moved the Null_Callback class from + being nested within the Reactor class to outside the Reactor + class. This fixes a problem with the SIG compiler. + + * Released version 3.2.2. + + * libsrc/Reactor/Signal.C: Made the Signal_Handler class + thread-safe as well as signal-safe. + + * libsrc/Reactor/Reactor.C: Modified the new Reactor + implementation slightly to handle signals correctly. + + * libsrc/Threads/Synch.h: Added a new conversion operator to + Recursive_Lock that returns the underlying LOCK in case we need + it for something (e.g., to initialize a Condition object). + +Sun May 7 04:17:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Reactor.C: Finished what I hope will be the last + set of changes to make the Reactor robust in multi-threaded + programs in situations where separate threads are used to + register and remove handlers. The final solution is elegant in + that it does not significantly penalize the performance of + programs that do not use separate threads to register and remove + handlers. Moreover, if you compile without the ACE_MT_SAFE flag + the Reactor will not include additional state information + related to the multi-threaded implementation. + + * libsrc/Threads/Synch.h: Subclassed the Guard class to make a new + class Try_Guard that uses tryacquire() to obtain a LOCK. + +Fri May 5 18:43:50 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released version 3.2.1 + +Thu May 4 19:43:01 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/TLI_SAP/TLI_Connector.C (connect): Fixed a + problem whereby a t_bind() was being done twice. Since I didn't + write this code I don't know if my fix will work generically on + all platforms supporting TLI. Please let me know if there are + any problems. + +Tue May 2 17:21:53 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor: Added a new notification feature that allows + multiple threads of control to enqueue Event_Handler * to the + main Reactor thread via the pipe used to wake up the main + Reactor thread. The Reactor will call the handle_exception() + method on Event_Handler with a HANDLE == -1 to notify the + handler. This feature is very useful if you need to have + certain operations (such as handler termination) performed in + the main thread. + +Tue Apr 25 00:34:18 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor: Fixed a stupid pair of typos in the Reactor that + failed to cast arguments to the pipe to char *. + + * libsrc/Connection: Fixed a portability problem with the + Connector: we can't use RW_Mutex for synchronization since not + all platforms support threads. The quick fix is to use + Null_Mutex, but a better long term approach is on the way! + + * Released version 3.2. + + * Added richer support for the TLI_Connector to make it work + better with protocols other than TCP/IP. Thanks to Mats + Sundvall (sundvall@perrier.embnet.se) for these enhancements. + +Mon Apr 24 02:26:04 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Changed the SOCK_Dgram_Brdcast class name to SOCK_Dgram_Bcast + and the SOCK_Mcast to SOCK_Dgram_Mcast to be more consistent. + + * Massively improved the Reactor's support for multi-threading. + There was actually a major problem in previous versions of ACE + that used poll() as the underlying event demultiplexor. Poll() + produced incorrect results when the Reactor::handle_events() + method was run in one thread, but another thread came along and + registered or removed an Event_Handler. The new version fixes + this problem so that the Reactor will now work correctly in + multi-threaded programs. + + One consequence of this change is that sysincludes.h and the + SunOS 5.x configuration files have been changed so that poll() + is no longer used as the default demultiplexor. The reason is + that poll() doesn't work as efficiently when used in + multi-threaded programs (ugh). See the Reactor code for + examples of how this all works now. Basically, the trick is to + use the select()-style implementation for most of the code, and + transform to poll()-style implementation only when necessary. + +Sat Apr 22 03:35:51 1995 Douglas C. Schmidt (schmidt@lambada.cs.wustl.edu) + + * libsrc/ASX/Message_Queue: Added a new method to the + Message_Queue class called unblock(). This method allows one + thread to release all other threads that are waiting for + messages to be enqueued or dequeued on a Message_Queue. + Modified the return value of methods like enqueue_head() and + dequeue_head() so that if a thread unblocks() then these methods + return -1 with errno == ESHUTDOWN. Also changed the name of + some of the internal methods so that they would be more + consistent. + + * libsrc/Connection/Connector: Fixed a stupid bug caused by + failing to have a destructor for Connector. Thus, there are + cases where unconnected Svc_Handlers are left around in the + handler_map_. This causes problems for dynamic linking in + conjunction with the Reactor, so now the destructor iterates + through all the unconnected Svc_Handlers and removes them from + the Reactor. + +Fri Apr 21 15:28:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Signal: Changed Sig_Set::addset() and + Sig_Set::delset() to the more appropriately named sig_add() and + sig_del(). Also added '_' in the Sig_Set method names to be + more consistent... + + * Removed the ./libsrc/IPC_SAP/SOCK_SAP/misc.[hC] file and merged + the one function in that file (ace_bind_port) into + ./libsrc/Misc/Misc.[hC]. + + * Added a bunch of fixes from various people to make ACE compile + better on SGI, SunOS 4, and HP/UX. Thanks for all the fixes! + + * libsrc/IPC_SAP/Addr: Changed sap_any to ace_sap_any to avoid + problems with the namespace. + + * Added a new portability flag that only compiles the SOCK_Mcast.* + stuff if the platform supports multicast! + + * ./libsrc/Shared_Malloc: Fixed some portability bugs with + Memory_Pool.C and added new support for SunOS 4.x running SunC++ + 4.x. Thanks to Steve Warwick (swarwick@arinc.com) for this + strategic help. + +Wed Apr 19 09:05:43 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Fixed up the ./libsrc/CORBA_Handler so that it will correctly + compile on platforms that don't have Orbix... + + * libsrc/Misc: added a new "Simple String" class called SString. + This is not really meant to be used by end-user applications. + It is used by certain portions of ACE that need to have + operator== and operator!= defined on a string (e.g., the + Token_Server and the Orbix Event_Comm components that use the + Map_Manager). + +Tue Apr 18 00:09:31 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/ASX: Fixed a stupid bug in Task::activate() that didn't + spawn a thread if the Thread_Manager was NULL... + +Sat Apr 15 19:39:30 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor: Added a new class to the Reactor called + Event_Handler_T.[hi]. This class makes it easy to integrate + existing classes into the Reactor framework without requiring + them to inherit from Event_Handler directly. This technique is + a superset of the DEF_TIE approach used by IONA in Orbix as one + of the ways to combine an existing class (that doesn't know + anything about CORBA) with a CORBA interface. Thanks to Greg + Lavender + (g.lavender@isode.com) for the suggestion. + +Fri Apr 14 14:41:49 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Run catman on the ./man directory so that it now has a windex + file. This facilitates "man -k". + +Thu Apr 13 23:39:22 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor: Made the Reactor be a stand-alone component that + does not require any other ACE libraries. + + * Added two new methods to the Reactor so that you can now + register or remove a set of HANDLEs in a single call. Thanks to + Bill Sears + (wsears@world.std.com) for this suggestion. Basically, now you + can register or deregister a set of n HANDLEs with one operation + (rather than doing n register_handler () or n remove_handler + ()). + + * include/sysincludes.h: Changed the name of the macro MT to + ACE_MT and DB to ACE_DB to avoid polluting the namespace. + +Wed Apr 12 11:14:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Reactor.C (close): Added code to close down the + pipe handles when the Reactor is shut down. Thanks to Mark + Patton (mark_patton@tx72.mot.com) for this info. + +Fri Apr 7 18:33:30 1995 Douglas C. Schmidt (schmidt@siesta.cs.wustl.edu) + + * Added a new method to CORBA_Handler so that handlers don't need + to subclass from CORBA_Handler, but rather can call the + CORBA_Handler::register_service() method (which is static). + Thanks to Chris Tarr (ctarr@objectspace.co) for this suggestion. + +Mon Apr 3 13:09:45 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Added a new static method to Service_Config.[hC] called + end_event_loop(). This can be used to stop the run_event_loop() + method of the Service_Config. In addition, all the methods in + Service_Config were changed to be static to emphasize the fact + that the Service Configurator is a singleton... + + * include/Trace.h (ACE_TRACE): Changed the macro T to ACE_TRACE. + This will prevent namespace pollution. + + * Added support for the Orbix CORBA implementation. If you don't + have Orbix, you'll need to remove this flag from the + config-sunos5-sunc++.4.x.h file if you are compiling on SunOS + 5.x. + +Sun Apr 2 01:12:19 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Added new support for C++ wrappers around the IP multicasting. + There are three new files in ./libsrc/IPC_SAP/SOCK_SAP called + SOCK_Mcast.[hiC] and a new test directory in + ./tests/Reactor/multicast and ./tests/Reactor/ntalker to + illustrate how to use this stuff. Thanks to Tim Harrison + (harrison@cs.wustl.edu) for this code. + +Sat Apr 1 18:48:40 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Added support to the libsrc/Shared_Malloc/Memory_Pool.[hC] class + for System V shared memory, as well as for mmap(2) and sbrk(2) + memory. Please note that this has not been extensively tested + yet, so use with caution... + +Thu Mar 30 21:50:00 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Misc/Atomic_Op: Added the postfix versions of the ++ and + -- operators. This stops the Sun CC compiler from griping about + the "anachronistic" usage when using a++ rather than ++a. + Thanks to Bruce Worden for the + suggestion. + +Wed Mar 29 22:26:37 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Handle_Set: Fixed a weird problem where I was + using NOFILE as the max number of descriptors rather than + FD_SETSIZE. I don't know why I was doing this. + + * Also fixed up a problem with Handle_Set that was causing the + iterator to go nuts when it got a strange initial value of + fd_set in Handle_Set. Orbix triggers this kind of nonsense in + some cases... + +Tue Mar 28 21:01:36 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/Reactor/Reactor.C: swapped the order of dispatching so + that handle_exception methods are dispatched before handle_input + methods to improve response time for exceptions (e.g., OOB + data). Thanks to Detlef Becker + (beckerd@erlh.siemens.de) for suggesting this. + + * Fixed a bug in ./ASX/Stream.i that caused problems when a Module + was popped off a Stream. Thanks to Paul Stephenson for noticing + this and sending me the fix. + + * Changed the Reactor::dispatch methods so that they dispatch the + timers *before* dispatching the I/O-based event handlers. This + is helpful for systems that are time-delay sensitive. + + * libsrc/Reactor/Time_Value: Added new += and -= operators to + Time_Value. Thanks to Alex V. Maclinovsky + (garyh@teleng1.tait.co.nz) for this suggestion. + +Thu Mar 23 15:38:23 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/Addr/SPIPE_Addr.i (set): Fixed a problem that the + HP/UX compiler had with complex arithmetic expressions. + + * libsrc/Service_Configurator: fixed up the Service_Configurator + source code so that it will compile correctly on HP/UX + platforms. + +Tue Mar 21 00:28:25 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * libsrc/IPC_SAP/SOCK_SAP/LSOCK_Connector.h: Fixed an amazingly + stupid bug with LSOCK_Connector, where I was passing in a + default argument of PF_INET instead of PF_UNIX... Arrgh! + +Mon Mar 20 20:24:29 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Fixed up the $WRAPPER_ROOT/include/makeinclude/ directory to + define a new set of platform-specific configuration files. This + should greatly improve the portability of ACE to different + OS/compiler platforms. + + * Added a bunch of changes to allow ACE to build with Lucid C++ on + SunOs 4.x. This should also fix some other problems we've been + having with SunOS 4.x. Thanks to Lee Baker (baker@ctis.af.mil) + for these changes. + +Sun Mar 19 00:34:30 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Added manual pages for all of the ./libsrc libraries. These + manual pages are all generated automagically from the libsrc + header files. + +Sat Mar 18 10:48:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Finally broke down and fixed the Makefile scheme so that there + is just one shared library (libACE.so) and one archive library + (libACE.a). This should massively simplify the application + development process, though it may require a bit of fixing of + Makefiles to remove all the -lReactor -lIPC_SAP stuff that was + in there before. + + * libsrc/IPC_SAP/TLI_SAP/: Fixed a stupid bug that was causing + core dumps since the TLI option pointers weren't initialized to + 0 in the TLI::TLI constructor. Thanks to Ed Brown for noticing + this (eebrown@netcom.com). + +Wed Mar 15 00:08:19 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Added some new fixes to get ACE to run on OSF1 and Linux. + +Tue Mar 14 13:36:31 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Added several changes to the source code and config-hpux.h + configuration file based on comments from Alex Ranous + (ranous@nsa.hp.com). In particular, changed ACE_HAS_NO_FDSET to + ACE_SELECT_USES_LONG. + +Mon Mar 13 09:23:58 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Improved the Makefile scheme so that the use of PTDIRS is no + longer required. The trick was to link the appropriate template + *.C files into the WRAPPER_ROOT/include directory. This enables + the compiler to find them in one single place. + +Sun Mar 12 22:35:50 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Added a new mechanism to clean up the insane number of -D's in + the Makefile. This new mechanism requires a bit more work at + installation time, but should greatly reduce the effort during + normal software development + (once ACE is installed...). See the INSTALL file + for more details. + +Fri Mar 10 17:29:02 1995 Douglas Schmidt + + * Fixed a stupid bug in Map_Manager.i which wasn't correctly + setting default values for fields in one of the Map_Manager + constructors. + +Fri Mar 10 08:54:42 1995 Doug Schmidt + + * /libsrc/Connection/Acceptor.i: Fixed a potential memory leak in + handle_input(). + +Thu Mar 9 11:59:54 1995 Doug Schmidt + + * Changed the Map_Manager::find() method to use class Read_Guard + so that multiple finds may proceed in parallel on a multiple + threaded application. Likewise, changed the implementation of + bind() and unbind() to use class Write_Guard so that destructive + operations will be serialized correctly. One consequence of + this is that RW_Mutex must be used instead of Mutex... + + * Added a new overloaded Map_Manager::unbind() method with an + INT_ID parameter. This parameter that passes back a reference + to the internal id being unbound. This allows the caller to + clean up any dynamic memory associated with the INT_ID. + +Tue Mar 7 13:32:17 1995 Doug Schmidt + + * Changed a bunch more things to get ACE to compile with + Centerline C++. This should also make ACE more portable to + other cfront-based compilers. + + * Had to change the ASX source in ACE to work around a stupid + problem with templates in cfront-based C++ compilers. + Fortunately, it was possible to mask most of the problems using + the C++ preprocessor. + + * There seem to be some problems with cfront-based compilers (such + as centerline). They don't like the new SYNCH::MUTEX usage in + the Message_Queue. + + * Removed several unused local variables in the INET_Addr::set() + method. + +Wed Mar 1 00:35:11 1995 Douglas C. Schmidt (schmidt@tango) + + * Added a major performance boost on high-speed networks. It + turns out that send(3) and revc(3) are slower than write(2) and + read(2) (since the latter are system calls, and the former are + library calls. Therefore, I added new overloaded methods to + SOCK_IO so that write(2) and read(2) are available to the user! + +Tue Feb 28 10:13:09 1995 Douglas C. Schmidt (schmidt@tango) + + * libsrc/Reactor/Reactor.C: Fixed the implementation of the + Reactor::open and Reactor::Reactor constructor so that it is now + possible to resize the size of the Reactor *after* the + constructor has run (by calling open()) *without* having to shut + down the Reactor first. + + * Modified the Reactor::attach() method so that it will ADD the + new bits to the bitmask rather than SET them. Thanks to Mark + Patton for recommending this + (mark_patton@tx72.mot.com). + +Sat Feb 25 15:08:04 1995 Douglas C. Schmidt (schmidt@tango) + + * Released version 3.0.5. + +Fri Feb 24 17:57:01 1995 Douglas C. Schmidt (schmidt@tango) + + * Used the OSE class2man scripts to generate UNIX manual pages for + IPC_SAP, Thread, Connection, and Reactor. Other manual pages + will be forthcoming... + + * libsrc/IPC_SAP/Addr/INET_Addr.i: Fixed a bug in one of the + INET_Addr::set() methods that caused a segmentation fault if + host_name was NULL. In addition, greatly cleaned up the code so + that all the "set" methods share a common basis of code. + +Tue Feb 21 19:32:28 1995 Douglas C. Schmidt (schmidt@tango) + + * Updated the entire release to use the new SYNCH template + interface for Task, Module, Stream, and Message_Queue. This is + *much* cleaner, though it reveals some bugs with the Sun C++ + templates facility. + +Mon Feb 20 22:46:14 1995 Douglas C. Schmidt (schmidt@tango) + + * Changed the SPIPE_SAP, SOCK_SAP, and TLI_SAP *Connector class + methods from open() to connect(). This is a more accurate name + and it also fits in nicely with the Acceptor::accept() method. + + * Started integrating new versions of various header files that + include hooks to automatically generate documentation. + +Tue Feb 14 20:52:13 1995 Douglas C. Schmidt (schmidt@tango) + + * Changed the order in which the Reactor dispatches descriptors. + Originally, it dispatched the "read" descriptors *before* the + "write" descriptors. Now, it dispatches the "write" descriptors + first. This was necessary to handle weird behavior of sockets + over TCP/IP when data is piggy-backed with the final ACK on a + non-blocking connection. + +Mon Feb 13 15:49:21 1995 Douglas C. Schmidt (schmidt@tango) + + * Changed the name of Event_Handler::get_fd() to + Event_Handler::get_handle() to be more consistent with other + usage in ACE. + +Sat Feb 4 22:47:34 1995 Douglas C. Schmidt (schmidt@tango) + + * libsrc/Service_Configurator/Service_Object: changed the + destructor to be virtual (thanks to Steffen Winther Sorensen + for noticing this). + +Sat Jan 28 16:29:49 1995 Douglas C. Schmidt (schmidt@tango) + + * Changed the name of class Map_Manager's Search_Structure struct + to Map_Entry. This is more specific to what that data structure + really does. + + * Began adding support for Linux, courtesy of sts@dad.stibo.dk. + +Sun Jan 22 23:15:38 1995 Douglas C. Schmidt (schmidt@tango) + + * Changed the name of the ./libsrc/Connector-Acceptor directory to + ./libsrc/Connection. Also changed the name of libConn_Acc.so to + libConnection.so to be more consistent. + +Sat Jan 21 13:59:18 1995 Douglas C. Schmidt (schmidt@tango) + + * libsrc/IPC_SAP: Fixed the *Acceptor classes for SOCK_SAP and + SPIPE_SAP so they behave just like FIFO_SAP and contain a method + called remove(). This method closes the underlying descriptor + and also unlinks the local address from the file system. + + * libsrc/ASX/Message_Queue.i (copy): Fixed this code so that it + correctly stores starting at the wr_ptr rather than the rd_ptr. + Thanks to Chris Cleeland + (chris@milo.st-louis.mo.us) for pointing this out + to me. + +Wed Jan 11 13:07:19 1995 Douglas C. Schmidt (schmidt@tango) + + * Changed all uses of class Thr_Manager to class Thread_Manager + and class Thr_Cntl to Thread_Control. This is more readable and + is now consistent with the documentation... + +Tue Jan 10 13:49:31 1995 Douglas C. Schmidt (schmidt@tango) + + * Modified the makefile scheme so that only the *.so files are + built by default. If you want to build both *.a and *.so files, + uncomment out the lines described in + $WRAPPER_ROOT/include/makeinclude/rules.lib.GNU. Note that this + will require you to run make on the ./libsrc directories twice + in order to properly build and install both the *.a and *.so + libraries. + +Mon Jan 9 22:57:29 1995 Douglas C. Schmidt (schmidt@tango) + + * libsrc/Reactor/Signal.h: Changed the name of the Signal_Block + class to the Signal_Guard class to be more consistent with the + Guard class in Synch.h. + +Sat Jan 7 19:49:46 1995 Douglas C. Schmidt (schmidt@tango) + + * tests/ASX/Event_Server/Event_Server: Revised the Event Server + test example to use the Acceptor pattern components. + +Fri Jan 6 23:38:21 1995 Douglas C. Schmidt (schmidt@tango) + + * Added a new method to class Task that turns a task into an + active object (i.e., associates a thread of control with the + task). This is useful since it replaces all the places in + application code that original said "this->thr_mgr_.spawn + (THR_FUNC + (&this->svc_run))", etc... + +Thu Jan 5 21:05:15 1995 Douglas C. Schmidt (schmidt@tango) + + * libsrc/ASX: Changed the capitalization of class STREAM to class + Stream. This seems more reasonable since I don't see any + particular reason to shout about Streams! + + * libsrc/ASX/Task: Changed name of method qreply() to reply() to + reflect the fact that the name of the class is no longer Queue! + + * libsrc/ASX: Made both Task and Message_Queue into parameterized + types. This greatly improves the ability to parameterized + synchronization into an application. + + * Changed all occurrences of timestruc_t to use Time_Value + instead. This helps to improve portability and reduce the + "impedence mismatch" caused by mixing both C and C++ types in + the ACE interfaces. Note that one drawback of this is that we + lose nano-second timing accuracy. However, I don't know of any + real OS platforms that support that degree of precision anyway! + + * libsrc/Reactor: Moved the static "zero" data member from the + Timer_Queue class to the Time_Value class. Also added a new + static data member called "zerop," which is a pointer to "zero". + + * libsrc/Threads/Synch: Changed the interface of class Condition + so that it no longer has both wait() and a timedwait() methods. + Since C++ has default values, these two methods were redundant. + Now, there is only a single method called wait(). By default, + it's argument is 0, which defaults to the original wait() + semantics. If the argument is non-zero then the timewait + semantics apply. + + * libsrc/Threads/Synch: Added a new class called Null_Condition. + This is similar to the Null_Mutex class in the sense that it has + the same interface as class Condition, but it's methods are all + no-ops + (however, wait() and signal() both set errno = ETIME + before returning...). This class is useful for + parameterizing synchronization into an application. + diff --git a/ACE/ChangeLogs/ChangeLog-96a b/ACE/ChangeLogs/ChangeLog-96a new file mode 100644 index 00000000000..5aa3c9b69fc --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-96a @@ -0,0 +1,3889 @@ +Sun Jun 30 15:28:43 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS.i (cond_timedwait): Fixed the implementation of the + ACE_OS::cond_timedwait() wrapper such that if the + caller-specified timeout elapses without the condition variable + being signaled that errno is always set to ETIME. This fixes + some inconsistencies that occurred with POSIX pthreads and Win32 + threads. Thanks to Ross Dargahi for pointing + this out. + + * ace/SOCK.cpp: Changed SOCK::close() to use the new + ACE_OS::closesocket() call. This should fix some weird bugs + that have been lurking in the code for some time now! + + * ace/OS: Added a new method to ACE_OS called closesocket(). This + handles the differences between Win32 and UNIX in their + treatment of sockets (e.g., NT requires the use of + closesocket(), whereas UNIX requires the use of close(). Thanks + to Irfan, Prashant, and Tim for figuring this one out! + +Sat Jun 29 21:23:04 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/SPIPE_Acceptor.cpp (create_new_instance): Added the flag + (FILE_FLAG_OVERLAPPED) in call to CreateNamedPipe. + +Fri Jun 28 01:31:24 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Svc_Handler.cpp (open): Fixed a small typo that caused a + compile error if the DEBUGGING macro was enabled. Thanks to + Irfan for finding this. + +Wed Jun 26 03:19:27 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Synch_T.cpp (ts_get): The tss object allocated off the heap + should be released if setspecific fails. Thanks to John Lu + for reporting this. + + * ace/CORBA_Handler.cpp (handle_input): changed ACE_OS::send and + ACE_OS::recv to ACE::send and ACE::recv respectively in + CORBA_Handler.cpp. Thanks to Irfan for pointing this out. + + * ace/Service_Config: slightly modified the Service_Config.[h,cpp] + in order to make it possible to create an ACE_Service_Config + with an external ACE_Reactor as a parameter. On creation I was + handling this partly correct (i.e., not creating a new reactor). + However, there was no flag for remembering this for a later + deletion. Thus, on deletion I was doing a delete on the Reactor + regardless of who created it. This is now fixed. Thanks to + Karlheinz for pointing this out. + + * examples/ASX/CCM_App/CCM_App.cpp: Changed all uses of init (int, + char **) to init (int, char *[]) to work around a "feature" with + MSVC++ 4.x... Thanks to Karlheinz for pointing this out. + + * ace/OS.h: Added a new typedef of TCHAR to be compatible with + Win32 UNICODE type names... + + * ace/{Mem_Map,DEV_Addr,SPIPE_Addr,FILE_Addr}: Added UNICODE + support for Win32 to all interfaces that require filenames. + + * ace/{SPIPE_Stream,SOCK_IO,FILE_IO,DEV_IO}: Added a new pair of + send()/recv() methods that take ACE_OVERLAPPED pointers in order + to make it possible to integrate seamlessly with Win32 + overlapped I/O. Naturally, these methods are simply + "callthroughs" to the ACE_OS versions... + + * ace/OS: Added a new pair of send()/recv() methods that take + ACE_OVERLAPPED pointers in order to make it possible to + integrate seamlessly with Win32 overlapped I/O. + + * ace/SPIPE_Acceptor: Factored out common code in the Win32 + implementation of ACE SPIPES (which uses Win32 Named Pipes, of + course ;-)). + + * ace/SPIPE_Acceptor.h: Removed a vestige of the past -- + ACE_SPIPE_LISTENER_H should be ACE_SPIPE_ACCEPTOR_H... + +Wed Jun 19 19:35:12 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/SPIPE_{Acceptor,Connector}: Modified SPIPE_Acceptor and + SPIPE_Connector to implement Named Pipes on NT. The public + interface remains the same. + +Sun Jun 16 00:45:41 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Service_Config: Provided public accessor methods for the + following data memebers of the ACE_Service_Config: + + reconfig_occurred_ + end_event_loop_ + + Thanks to Steve Warwick for suggesting this. + + * ace/Synch*: Added UNICODE support for the ACE synchronization + classes (e.g., ACE_Mutex, ACE_RW_Mutex, ACE_Semaphore, etc.). + + * ace/OS: Added UNICODE support for the ACE_OS::dl_open() + function, as well as the ACE_OS synchronization functions. + + * ace/CORBA_Handler: Added Seth's changes for Orbix 2.0. + +Sat Jun 1 13:30:55 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Memory_Pool.cpp (remap): Fixed a bug in + ACE_MMAP_Memory_Pool::remap (). The test for whether or not the + addr falls within the range had a '!' (not) missing, that is, it + was failing when it should be succeeding and vice versa. + +Sun Jun 9 00:01:44 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released version 4.0.24 for testing. + + * ace: Changed all uses of ACE_Guard m (lock_) to ACE_GUARD + (LOCK, lock_), which is a macro that is defined as follows: + + ACE_Guard ace_mon (LOCK); \ + if (m.locked () == 0) return; + + The reason we need this is (1) detect locking failures, rather + than have things fail silently and (2) to automatically detect + deadlock in the Reactor. In addition, I also added + ACE_GUARD_RETURN, which is similar to ACE_GUARD, except that it + returns a "failure" status when the lock is not acquired. + Thanks to Karlheinz for suggesting this. + + * ace/Log_Msg: Added the new thr_state() accessors to Log_Msg. + + * ace/Thread_Manager.cpp: factored out some common code by having + the public interfaces (like resume() and suspend()) utilize the + protected interfaces (like resume_thr() and suspend_thr()). + + * ace/Thread_Manager.cpp: Added sanity checks for suspend(), + resume(), cancel(), etc. so that we don't blow up if someone + tries to perform an operation on an invalid thread id. + + * ace/Thread_Manager: Added a suite of new methods for + (1) cooperatively "canceling" threads and (2) testing if threads + are cancelled (also added similar checks to test if threads are + suspended or resumed). The cooperative cancellation mechanism + is based on a design fleshed out with Detlef and Karlheinz. + It's essentially a compromise between the powerful mechanisms + available via POSIX pthreads vs. the totally lame mechanisms + available in Win32. + + Here's how it all works: + + 1. Added several new methods to ACE_Thread_Manager: + + cancel(thr_id); -- cancels thr_id + cancel_all(); -- cancels all the threads in a Thread_Manager + cancel_grp(grp_id); -- cancels a group of threads in a Thread_Manager + testcancel(thr_id); -- returns "true" if thr_id has been cancelled + + 2. Updated ACE_Log_Msg to maintain the current state of a thread + in thread-specific-storage (TSS). Actually, it's more clever + than that since I really keep a *pointer* to the state of a + thread in TSS. This pointer actually points *back* to the + ACE_Thread_State field in the ACE_Thread_Manager! I use it + as a cache as follows: + + ACE_Thread_Manager::testcancel (thread_t t_id) + { + ACE_MT (ACE_Thread_Mutex_Guard m (this->lock_)); + + // Try to get the cached value out of TSS to avoid lookup. + ACE_Thread_State *thr_state = ACE_LOG_MSG->thr_state (); + + if (thr_state == 0) + { // We need to init the cache. + int i = this->find (t_id); + if (i == -1) return -1; + // Update the TSS cache. + ACE_LOG_MSG->thr_state (thr_state = &this->thr_table_[i].thr_state_); + } + return *thr_state == ACE_THR_CANCELLED; + } + + Note that this allows me to avoid searching the + Thread_Manager on every Thread_Manager::cancel() access + except the first one! + + 3. I've updated the examples/Threads/test_thread_manager.cpp + test file to exercise the new cooperative thread cancellation + scheme. It basically spawns a bunch of threads that go into + their own event loops doing + + if (thr_mgr ()->testcancel (ACE_Thread::self ()) != 0) + break; + + every so often. Naturally, the main thread cancels them by saying + + thr_mgr ()->cancel_grp (grp_id); + + when it wants to inform them to shut down. + + * ace/Thread_Manager: Moved the Thread_State enum from the + ACE_Thread_Descriptor class to OS.h and renamed it to be + ACE_Thread_State. This will make it easier to integrate the + state of a thread in thread-specific storage... + +Sat Jun 8 13:35:17 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS.i (sema_post): revised the implementation of the POSIX + Pthreads semaphore implementation just a bit in order to make it + slightly more efficient (it now releases the mutex before + signaling the condition variable). + + * ace/OS.i and config-aix.4.1.h: added a fix that separates the + decision about whether optlen is a pointer from the decision of + the type of optlen. This fixes a problem on AIX. Thanks to Bob + Olson for this fix. + + * ace/Proactor.h: Fixed a small glitch that was causing some + compilers to break due to the fact that they can't grok fully + qualified destructor syntax in the class definition. Thanks to + Alfred Keller for reporting this. + + * ace/OS.h: Added some Win32 macros (e.g., GENERIC_READ) to the + UNIX side of the house in order to compile the Proactor on Win32 + and UNIX. + +Fri Jun 7 19:36:27 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Added a new Bourne shell script called ACE-install.sh that will + automatically download and install on UNIX machines. Thanks to + Ajit Sagar for contributing this. + +Thu Jun 6 00:37:02 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released version 4.0.23 for testing. + + * ace/Local_Tokens: Updated the *.cpp and *.i files to remove + warnings and generally improve the conformance to the ACE coding + guidelines. + + * examples: Moved the Proactor directory into the Reactor + directory since the Proactor and Reactor are really two + implementations of the same basic pattern. + + * ace/Memory_Pool.cpp: Fixed an inconsistency caused by not + updating __INLINE__ to __ACE_INLINE__. Thanks to Neil Cohen for + finding this. + + * ace: Added support for the Florida State PTHREADS package. + Thanks to Gary Salsbery and + Eric Beser for helping with this. + + * ace: Added support for the m88k OS. Thanks to Gary Salsbery + and Eric Beser + for helping with this. + + * ace/OS.h: Added a default value of NULL to the sigwait() OS + wrapper method to simplify the usecase in certain cases. + + * ace/Memory_Pool.cpp (commit_backing_store): Fixed what is + hopefully the last typo related to the ACE_DEFAULT_BASE_ADDR + macro. Thanks to Neil B. Cohen for reporting + this. + +Thu Jun 6 15:31:40 1996 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * ace/CORBA_Handler.h: This version of the CORBA_Handler works + with Orbix 2.0. Most of the changes involve the use of C++ + Exception Handling (the removal of IT_X), and the location of + some CORBA system exception classes. + + * ace/Event_Handler.h: Added handle_*_complete methods for the + Proactor. The Proactor now takes Event_Handlers and calls back + the **_complete methods when overlapped I/O operations have + completed. + + * ace/Service_Config.h: Added static accessors for the Proactor to + the Service_Config object. Similar to the Reactor accessors, + applications can now use the Service_Config object as the global + access point to the Proactor event demultiplexor. + +Wed Jun 5 22:40:28 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS.i (t_free): Added a check to avoid deleting a NULL ptr. + This was causing problems for the TLI_Acceptor. Thanks to Ajit + Sagar for reporting this. + + * ace/Makefile: Changed things back so that both static and + dynamic libs are built by default... Thanks to Brad Brown + for pointing this out... + +Sat Jun 1 13:49:51 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released version 4.0.22 for testing. + + * Added Tim Harrison's latest tests for Proactor. + +Sat Jun 1 13:30:55 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Memory_Pool.cpp (remap): Fixed a bug in + ACE_MMAP_Memory_Pool::remap (). The test for whether or not the + addr falls within the range had a '!' (not) missing, that is, it + was failing when it should be succeeding and vice versa. + +Fri May 31 16:31:13 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Rereleased version 4.0.21 for testing. + + * Copied over new versions of the Proactor -- there was a small + problem with the UNIX version that caused it not to compile... + +Fri May 31 00:03:41 1996 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * examples/Proactor/test_proactor.cpp: Added a test program for + the Proactor. Check examples/Proactor/README for more details + on this test example. + + * ace/Proactor.cpp: Added first pass at the Proactor for win32. + The Proactor is a Reactor-like abstraction that uses + asynchronous I/O, rather than synchronous I/O. On Windows NT we + implement the Proactor using overlapped I/O. We'll soon be + porting the Proactor to Solaris using POSIX 4.x aio_* API for + real-time programming. + + Unfortunately, the Proactor has not yet been integrated with + Windows NT WaitForMultipleObjects since it appears that I/O + Completion ports are not "waitable" objects on Windows NT. Does + anyone know if this has been fixed in release 4.0? + +Thu May 30 05:51:23 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Synch.i: Reordered the definitions of several methods in + Synch.i to avoid warnings from G++. Thanks to Marco Sommerau + for noticing + this. + + * ace/Log_Msg.cpp: There was a problem having to do with the order + in which static objects by G++. In particular, G++ was calling + the constructor of the lock_ mutex in Log_Msg.cpp *after* it was + being used for the first time. The right solution is to make + lock_ be a pointer and allocate it once in the instance() + method. Thanks to Marco Sommerau + for finding this + problem. + + * ace/TLI_Acceptor.cpp (close): Make sure to only close down the + TLI_Request_Queue if queue_ is non-NULL! Thanks to Ajit Sagar + for spotting this. + + * ace: Changed all the enums in the various SysV wrappers from + things like CREATE and OPEN to ACE_CREATE and ACE_OPEN to avoid + name clashes with other systems. In addition, also changed + NONBLOCK to ACE_NOWAIT to avoid clashes with the existing + ACE_NONBLOCK macro! Thanks to Steve Warwick + for suggesting this. + + * ChangeLog: Changed all usages of the INLINE macro to ACE_INLINE. + This avoids name clashes with other systems. Thanks to + Chris Eich for + suggesting this. + +Mon May 27 13:03:58 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Map_Manager.cpp (trybind): The function trybind() doesn't + return a value as it should. A return was missing from the last + line of the function. Thanks to Stuart Powell + for finding this problem. + + * ace/Acceptor.cpp (dump): The debug print referred to + "scheduling_strategy_" which doesn't exist in the relevant + class. Replacing it with "concurrency_strategy_" fixes the + problem. Thanks to Stuart Powell for + finding this problem. + + * ace/Mem_Map.i: Make sure to close down the file mapping + correctly when we upmap the view! + + * ace/OS.h: Changed the default shared memory address from 16 M to + 64 M in order to work around problems with AIX. + + * ace/Memory_Pool: Moved and renamed the enums in + ACE_Shared_Memory_Pool so that they'd be in OS.h. This makes it + easier to remember to change them if they are incorrect. Thanks + to Lionel Mommeja for suggesting this. + + * ace/Stream.cpp: Removed #if defined (ACE_HAS_THREADS) + + * ace/OS.cpp (svc_run): Added a Win32 try/except block to + Spawn_Args::svc_run so that we catch all Win32 structured + exceptions in order to make sure that we clean up correctly when + the thread exits. + +Sun May 26 11:37:08 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Local_Name_Space.cpp: Used the new Win32 exception + integration in order to ensure that the Name Server will + transparently work correctly when the backing store is extended + by other processes on the same machine. + + * ace/Memory_Pool.cpp: Revised the ACE_MMAP_Memory_Pool to export + the mechanism for extending the virtual memory mapping. This + can now be called by other programs (e.g., in order to integrate + with Win32 Structure Exception Handling). + + * ace/Memory_Pool.cpp: Changed the use of ACE_OS::lseek() to + ACE_OS::filesize() in order to determine the current offset when + we're remapping the address space. + +Wed May 22 13:08:44 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/OS.h (ACE_DEFAULT_TIME_SERVER_STR): Added a new entry for + ACE_DEFAULT_TIME_SERVER_STR. + + * ace/Malloc_T.cpp (advance): Fixed two small bugs. In + ACE_Malloc::try_bind(), if we have a match we need to set + pointer to node->pointer_ and not node->name_. + Ina ACE_Malloc_Iterator::advance(), the continue in the for loop + should be for strcmp != 0 instead of == 0. + +Sun May 19 12:03:11 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released version 4.0.20 for testing. + + * ace/Service_Record.cpp (remove): Fixed a very mysterious bug + that was caused by deleteing an object and then trying to access + it's next_ pointer. This worked on UNIX, but fortunately the + MSVC++ compiler does special things to deleted memory and the + bug was revealed! At long last, MSVC++ does something right + ;-). + + * ace/Module.cpp: Revised the code a bit to use the ACE_SET_BITS + and ACE_CLR_BITS macros to improve readability. + + * ace/SV_Semaphore_Complex.cpp (open): Fixed a race condition + where we weren't correctly checking for EIDRM. Thanks to + Michael Fortinsky for reporting this. + +Sat May 18 10:49:04 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace: Added a new ace.mak and ace.mdp file for Win32. + + * ace/Service_Record.cpp: Rewrote some code to work around a bug + with MSVC++. This bug was causing problems since the + ACE_Shared_Object methods were getting called, rather than the + Test_Task methods used in the examples/ASX/CCM_App.cpp file. + Thanks to Tom Leith for pointing out this problem! + + * ace/OS.h: Added a new #define for ACE_DEFAULT_SVC_CONF to deal + with differences between NT and UNIX pathnames. + + * ace/Time_Value.h: Moved the definition of the INLINE macro from + OS.h to Time_Value.h so that it will be in scope for + Time_Value.i. Thanks to Neil Cohen for reporting this. + + * examples/Reactor/Misc/signal_tester.cpp: There was a typo in + signal_test.cpp. It had mean to use handle_input() rather than + handle_output() to exercise the asynchronous signal handling + capabilities. This is fixed now. + + * apps/Synch-Benchmarks/Benchmark.cpp (thr_id): Added a new #if + define (ACE_HAS_DCETHREADS) to make this work on AIX. Thanks to + Greg Wilson for reporting this. + + * ace/Local_Name_Space: Moved ACE_NS_String and ACE_NS_Internal + from the *.cpp file to the *.h file to work around a "feature" + of the AIX C++ compiler. Thanks to Greg Wilson + for reporting this. + + * ace/Reactor.h (ACE_Handler_Repository): Changed the type of + cur_size_ from size_t to ssize_t to avoid type mismatches. + + * ace/Name_Request_Reply.cpp (decode): Fixed some inconsistencies + between signed and unsigned loop counters... + + * ace/OS.h: Changed the typedef of pid_t on Win32 from + DWORD to long to be consistent with UNIX. + +Thu May 16 18:49:14 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released version 4.0.19 for testing. + + * build/SunOS5.4/ace/ACE.cpp (ldfind): Fixed a bug in ldfind() + that caused a segfault if we didn't resolve the filename in the + LD_SEARCH_PATH. + + * ace/Reactor and Timer_Queue: Changed the interface of cancel() + to include a const void **arg. If arg is non-NULL then it will + be set to point to the ``magic cookie'' argument passed in when + the Event_Handler was registered. This makes it possible to + free up the memory and avoid memory leaks. + + * ace/Service_Record: Removed the #ifdefs that checked if + ACE_HAS_THREADS because we ought to be able to build all of this + stuff now that we've got the ACE_OS wrappers. + + * ace/Svc_Conf.y: Removed the #ifdefs that checked if + ACE_HAS_THREADS because we ought to be able to build all of this + stuff now that we've got the ACE_OS wrappers. + + * ace/OS.h (ACE_DEFAULT_BACKING_STORE): Made a different + ACE_DEFAULT_BACKING_STORE for NT and for UNIX to handle the + differences in directory separator characters... + +Wed May 15 18:45:48 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * examples/ASX/CCM_App/CCM_App.cpp: Fixed up the test application + so that it should support dynamic linking on Win32. Thanks to + Tom Leith for reporting this. + + * ace: Added the ACE_Export macro to class ACE and the various + "helper" classes related to ACE_Malloc in order to have this + work properly when use with ACE_Malloc outside of the ACE DLL. + + * ace/Svc_Conf.l: Added support for '\' and ':' in the regular + expression for an ACE pathname in order to support Win32 + filenames (e.g., "C:\foobar\"). Thanks to Tom Leith + for reporting this. + + * ace/Malloc_T.cpp (ACE_Allocator_Adapter): Moved the constructor + from the *.i file to the *.cpp file and added a new constructor + that takes both a pool_name *and* a lock_name. This is + necessary because the ACE Malloc now has this API, as well. + + * examples/Threads/test_barrier.cpp (main): Fixed a bug that was + caused by the main() thread exiting before all the other worker + threads had finished "waiting" on their Barrier. The fix is to + use ACE_Thread_Manager to control the thread exits... + +Mon May 13 00:03:09 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * examples/Connection/non_blocking/CPP-acceptor.cpp: Modified the + implementation of the Svc_Handler::open() method so that it will + truly behave as an iterative server (as advertised...). + Currently, it behaves as a half-iterative server (i.e., the + Oneshot_Acceptor is iterative, but the Svc_Handler is + "concurrently"), which is causing problems because we're wiping + out the values of Svc_Handler each time through the main event + loop. Thanks to Gerolf Wendland for noticing this problem. + + * ace/Log_Msg: Added an alternative logging mechanism that makes + it possible to integrate variable argument lists from other + logging mechanisms into the ACE mechanism. Thanks to Chris + Lahey for proposing this. + + * ace/Synch.h: Moved ACE_Process_Mutex so that it appears *after* + ACE_Mutex (since it depends on ACE_Mutex). Thanks to Dieter + Quehl for finding this. + + * Released version 4.0.18 for testing. + + * ace/Name_Space.cpp: Added the ACE_BUILD_DLL macro at the + beginning of this file so that it will build as a DLL on NT + correctly. + + * ace/Name_Space.cpp: Added a default constructor for + ACE_Name_Binding so that it will compile when used as a template + argument for ACE_Unbounded_Set. + +Sun May 12 14:23:44 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Map_Manager: Totally reworked the Map Manager so that it can + be more flexible with respect to where the allocator comes from. + This is necessary for certain parts of ACE (e.g., + Local_Name_Space) that must be very careful about which + allocator is used to manage memory. + + * ace/Synch: Moved ACE_Process_Mutex and ACE_RW_Process_Mutex + *outside* of the ACE_HAS_THREADS #ifdef since these are now + always defined on all platforms (because the Process_Mutex stuff + uses SV Semaphores, which are portable even if we don't have + threads!). + + * ace/Naming_Context.cpp (parse_args): Removed an unnecessary call + to strdup(). This was detected by Purify! + +Sun May 12 14:26:20 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Local_Name_Space.cpp (shared_bind): Fixed a small bug. In + computing type_len in shared_bind(), we needed to add 1 to + account for the NUL character. + + * ace/Local_Name_Space.cpp: (list_types): Fixed some potential + memory leaks. In list_types() as well as list_type_entries() + calling pattern.char_rep() was allocating memory which was never + getting deleted. Similarly, in list_names() and list_values, + call to char_rep was also allocating memory that was not getting + deleted. + +Sat May 11 16:19:51 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Log_Msg.cpp (local_host): added a static member to + ACE_Log_Msg that maintains the local host name. Now, instead of + always displaying "", we can insert the actual local + name into the object and then it will be automatically printed + when VERBOSE mode is enabled. Thanks to Chris Lahey for + suggesting this. + + * ace/Local_Name_Space.cpp: Used the new ACE_Name_Binding class to + simplify the implementation of all the list_* methods in + ACE_Local_Name_Space. + + * ace/Name_Space.cpp: Made a number of changes to the + ACE_Name_Binding class in order to make it work more efficiently + and concisely (e.g., reduce the amount of copying and eliminate + the need for converting the type field back and forth to/from + ACE_WStrings). + + * examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.cpp: + Fixed a typo where #if !defined (ACE_LACKS_UNIX_DOMAIN_SOCKETS) + was *before* the #include of the header file that defines this + macro! Thanks to Nigel for pointing this out, as well. + + * ace: Added a number of fixes to make ACE compile on SCO UNIX + 3.2.4 using gcc 2.7.2. Thanks to Nigel Lowe for + helping with this. + + * netsvcs/lib/Name_Handler.cpp: operation_ needs to be declared as + just LIST_OP and not ACE_Name_Handler::LIST_OP. For some strange + reason NT complains otherwise. Thanks to Prashant for finding + this. + +Fri May 10 01:09:17 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace: Added new versions of ace.mak and ace.mdp to fix a couple + of minor typos. + + * ace/Malloc_T.cpp (ACE_Malloc): Added a new constructor that + takes both the pool_name and the lock_name explicitly. This is + more flexible. Thanks to Ramesh Nagabushnam + for suggesting this. + + * ace/Malloc_T: Modified the constructor of ACE_Malloc so that by + default the name of the memory pool (which is also used as the + name of the lock...) is ACE_DEFAULT_MUTEX. + + * Released version 4.0.17 for testing. + + * ace/Connector.cpp (create_AST): Must reset errno = EWOULDBLOCK + to avoid making caller's think that something else has gone + awry... Thanks to Steve Warwick for chasing + this down! + + * ace/ACE.cpp (handle_timed_complete): If you issue a non-blocking + connect on a socket, you will have back a failure with errno = + EINPROGRESS. Then, if for some reason, the connection could not + be established, the select (which you have to issue to know + about the completion of connection) will return you the fd set + both in the read mask and in the write mask (infact select + returns 2 in this case). The behaviour above affects the method + ACE::handle_time_complete, so I changed the last part of the + above method, this way: + + if (n <= 0) + { + ... + ... + } + else if (rd_handles.is_set(h)) + { + char dummy; + // The following recv() won't block provided that the + // ACE_NONBLOCK flag has not been turned off . + + if (ACE::recv (h, &dummy, 1, MSG_PEEK) <= 0) + return ACE_INVALID_HANDLE; + } + + // 1. The HANDLE is ready for writing or 2. recv() returned that + // there are data to be read thus the connection was successfully + // established. + return h; + + That is, I reversed the sense of the tests so that the + rd_handles() is checked first for failure along with the recv(). + Thanks to Antonio Tortorici for + suggesting this. + + * examples/Threads/test_thread_manager.cpp (main): Changed argv[1] + to argv[2]. Thanks to Andres Kruse for finding + this problem. + + * examples/Connection/non-blocking: Fixed some nasty bugs that + caused the non-blocking connector and acceptor test programs to + crash and burn. Thanks to Steve Warwick and Gerolf Wendland for + finding this problem. + + * ace/SV_Semaphore_Simple.cpp (open): Check for + ACE_INVALID_SEM_KEY and return -1 in this case. + + * ace/Synch.h: Removed the default value of 0 for the name of the + ACE_Process_Mutex and the ACE_RW_Process_Mutex and replaced it + with a new macro called ACE_DEFAULT_MUTEX. Using 0 didn't make + any sense on either NT or UNIX because process-wide Mutexes + should be named! + + * ace/SV_Semaphore_Simple.cpp (name_2_key): Added a check for name + == 0 and bail out of that's the case rather than crash! + + * ace/Reactor.cpp (wait_for_multiple_events): In the Reactor's + wait_for_multiple_events method, the do {} while () around the + select/poll system call is trying to wait until some "good" + event occurs, with handle_error() taking care of unexpected + problems. In the case of a bad file descriptor, however, + handle_error() returns 0. This was exiting the loop because the + loop exit condition was: + + do { /* ... */ } while (nfound == -1 && this->handle_error () > 0); + + which eventually causes ACE_Service_Config::run_event_loop() to + exit. Since the offending file descriptor is handled by + handle_error(), the loop should continue. Therefore, I've + changed the while to read: + + while (nfound == -1 && this->handle_error () >= 0); + + Thanks to Eric C. Newton for providing this fix. + + * ace/INET_Addr.cpp (string_to_addr): Changed the order of the + parameters so that the form is now "ip-address:port". This + should (finally) be consistent for both string_to_addr() and + addr_to_string()... + + * ace/Log_Msg: Changed the char * parameter of the log() method to + const char *. Thanks to Chris for suggesting this! + + * ace/Synch_T.cpp: Moved the #if defined (ACE_HAS_THREADS) down to + the right part of the file... Thanks to Alex Karev + for finding this. + + * ace/Malloc.h: Added a very important #else... Thanks to Alex + Karev for finding this. + + * ace/Signal.i (ACE_Sig_Guard): Changed the sense of the #ifdef + tests in the ACE_Sig_Guard constructor and destructor from #if + !defined (ACE_MT_SAFE) to #if 0 // !defined (ACE_MT_SAFE) in + order to get the right semantics for signals (which should be + blocked "process wide"). + + * ace/Synch_T.h: put the frigging copy constructor in the public + section of ACE_Atomic_Op because it was causing trouble for + NT... + +Mon May 6 00:11:37 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released version 4.0.16 for testing. + + * ace/Log_Msg.cpp: Was defining ACE_Recursive_Thread_Mutex in the + wrong place (i.e., outside of the #if defined (ACE_MT_SAFE). + This was screwing up HP/UX. Thanks to Neil Cohen for pointing + this out! + + * Incorported new versions of ace.mdp and ace.mak for Win32. + +Sun May 5 16:18:43 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * netsvcs/lib/Server_Logging_Handler.cpp (handle_input): Fixed a + bug whereby handle_input() was returning the number of bytes + read by handle_logging_record() rather than 0 or -1. This was + causing problems for the logger since it was hanging in read()! + + * ace/Synch_T.cpp: Fixed some minor problems with the use of const + in ACE_Atomic_Op that was causing warnings. + +Sat May 4 16:31:46 1996 Douglas C. Schmidt (schmidt@mambo.cs.wustl.edu) + + * ace/SOCK_Dgram_Bcast: Reimplemented most of the ACE socket + broadcast mechanism to (1) clean up the code and have it use + other parts of ACE and (2) make it work for Windows NT. Thanks + to Steve Weismuller for the basic + ideas here. + + * ace/INET_Addr: Added a new method to set the port number without + changing the host address. This is useful in the broadcast + class. + + * ace/Log_Record.cpp (print): Changed the hack of replacing the + newline with a call to flush() instead. This seems like a + better fix. Thanks to Alex for suggesting it. + + * ace/Log_Msg.cpp (log): Moved the order of the print operations + so that the ostream one goes last. This avoids a nasty problem + due to the fact that it replaces the newline (if any). Thanks + to Alex for pointing this out too! + + * ace/Log_Msg.cpp (log): Don't auto-increment bp at the end of + the log() method, instead just terminate it: + + *bp = '\0'; // Terminate bp. + + This makes the length computation correct... Thanks to the + ever-vigilent Alexandre Karev for + reporting this. + + * examples/Shared_Malloc/test_malloc.cpp: Fixed a bug where a void + * that was really an int was being cast incorrectly. Thanks to + Raj for pointing this out. + +Sat May 4 12:51:25 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Reactor.cpp (find): Modified the ACE_Handler_Repository so + that it doesn't crash when it isn't initialized properly. + Thanks to Darrin for pointing this out. + + * ace/Synch_T.cpp (wait): Changed the call wait(ACE_Time_Value *) + to wait(const ACE_Time_Value *) since wait() will not change the + time value object. + + * ace/Thread_Manager.cpp (wait): Changed the call + wait(ACE_Time_Value *) to wait(const ACE_Time_Value *) since + wait() will not change the time value object. Thanks to Chris + Lahey for suggesting this. + + * ace/Synch.h: Added a (const char * = 0) argument to + ACE_Null_Mutex so that it would work correctly with + ACE_Thread_Mutex and ACE_Process_Mutex... + +Fri May 3 17:26:07 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * netsvcs/lib/Name_Handler.cpp (lists_entries): Used '_' with + name/value/type in ACE_Name_Binding to be consistent with the + notation. + +Fri May 3 02:24:19 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Synch: Updated ACE_Process_Mutex to use SV_Semaphore_Complex + as the UNIX implementation. This seems like the only portable + and robust way to get the same semantics on UNIX and on NT! + + * ace/Malloc_T: It turned out there was a subtle bug with + ACE_Malloc on NT when used with the ACE_Process_Mutex + concurrency policy. On NT, we were storing the *HANDLE* of a + mutex in shared memory. Naturally, this didn't make any sense + since each HANDLE is relative to only one process!!! (duh ;-)). + This worked fine on UNIX because mutex_t's created with + USYNC_PROC mode can be stored in shared memory and accessed + directly... + + We fixed this by changing ACE_Malloc so that the + LOCK is allocated in non-shared memory. We then + fixed ACE_Process_Mutex so that on UNIX it is + implemented with SV_Semaphore_Complex. This is + (a) portable and (b) it gives the right semantics. + + As a result, we were able to totally eliminate the storage of + the lock in shared memory. Therefore, it doesn't matter of the + host crashes anymore! In addition, we were able to totally + remove the ugly "init_finished" lock that was previously stored + in shared memory by ACE_MMAP_Memory_Pool. This is *much* + cleaner!! + + Thanks to Karlheinz et al for pointing this problem out in the + first place! + + * ace: Removed a stray file called Svc_Conf_tokens.h. This was + causing problems on Win32 due to name clashes... Thanks to Adam + Miller for pointing this out. + + * ace/SString.cpp (strstr): there were some for (size_t j; ...) {} + if (j == x) constructs in the code that have as of recently + become non-standard. Thanks to Darrin + for reporting this. + +Tue Apr 30 00:18:46 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Thread.i (self): Commented out the ACE_Trace call in the + ACE_Thread::self() methods to avoid infinite recursion problems + on Win32. + + * ace/Token.cpp (ACE_Token): Commented out the ACE_Trace call in + the constructor of ACE_Token to avoid infinite recursion + problems on Win32. + + * ace/Log_Msg.cpp (instance): Moved the definition of the static + variable keylock_ into the static instance() method in order to + avoid "order of initialization" problems on Win32. Thanks + to Tim for figuring this out! + +Sun Apr 28 17:07:58 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * netsvcs: Rearranged and renamed the subdirectories so that they + are now called ./netsvcs/{lib,clients,servers}. In addition, + moved the Logger, Naming, and Tokens examples from ./examples + into the ./netsvcs/clients directory in order to make the + relationships more clear. + +Sat Apr 27 14:23:43 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Name_Space.cpp (operator ==): Created a new file + Name_Space.cpp and moved the definitions for + ACE_Name_Binding::operator== and ~ACE_Name_Space in it. Also + modified code to use '_' at the end of name/value/type in + ACE_Name_Binding. + +Sat Apr 27 16:00:03 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/INET_Addr.i (get_host_addr): There was an error where + sprintf(s,"%d:%s" ...) should have been %s:%d. Thanks to + Raj for pointing this out. + +Mon Apr 22 01:24:45 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Dump_T.h: #included "ace/Dump.h" so that this file will + compile on HP/UX. Thanks to Neil Cohen for reporting this + problem. + + * Released version 4.0.15 for testing. + + * ace/Synch_T: Added the appropriate "const" qualifiers to certain + operators in ACE_Atomic_Op. + +Sun Apr 21 12:54:18 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace: Fixed a problem that Dieter was having with the Name Server + when toggling between Naming_Contexts. Basically, what I've + done is + + 1. Moved the unmap() call into the ACE_Mem_Map::close() method + (this ensures that the region is correctly unmapped when the + Mem_Map is deleted). + + 2. I've removed the call to this->allocator_->remove () within + ~ACE_Local_Name_Space. This ensures that we don't remove the + backing store file. + + * ace/Mem_Map.cpp: Modified the ACE_Mem_Map::remove method to call + ACE_Mem_Map::close() in order to share code. + + * ace/Mem_Map.cpp: Modified the ACE_Mem_Map::close() method so + that it unmaps the mapped region before closing down the backing + store. This prevents "dangling mapping." + + * ace/Local_Name_Space.cpp (ACE_Local_Name_Space): Initialized all + the pointers to NULL. + + * ace/Synch_T.cpp (ACE_Atomic_Op): Enhanced the Atomic_Op + implementation by adding an assignment operator and disallowing + the copy constructor (forcing objects of ACE_Atomic_Op to be + passed by reference). + + * examples/Naming/Client/Client_Test: Reorganized the code for + Client_Test so that it will run correctly as a Win32 netsvc + (e.g., added the ACE_Svc_Export macro). + +Sun Apr 21 20:23:40 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Naming_Context.cpp (close): Added a new method to + Naming_Context called close() that deletes the instance of + name_space_. + + * ace/Local_Name_Space.cpp (ACE_Local_Name_Space): Added stuff to + the destructor of Local_Name_Space so that it calls remove on + the allocator_ to ensure we unmap the file. Also, we delete the + allocator_. + + * examples/Naming/Client/Client_Test.cpp (set_proc_local): Changed + set_proc_local (), set_node_local() and set_host() so that + before we change name space, we do a close() on + Naming_Context. The close ensures that we unmap the file as well + as delete the instance of the name space. + +Sat Apr 20 12:39:20 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace: Removed the Name_Options.* files and merged the + ACE_Name_Options class into Naming_Context.*. This simplifies + some order of include problems... + + * ace/Naming_Context.cpp (init): Switched the code so that rather + than always opening with ACE_Naming_Context::PROC_LOCAL, we use + ACE_Name_Options::context(), which can be overridden by using + the new -c command-line option (e.g., -c NODE_LOCAL). Thanks to + Dieter for suggesting this. + + * ace/OS.i: Modified the Win32 implementation of all the + ACE_OS::flock_*lock() methods so that they'd have the same + behavior as the UNIX ones with respect to a length of 0 meaning + "lock the entire length of the file." This works, of course, by + having each method check if len == 0, and if so, calling + GetFileSize() to set the size of the file. + + * ace/Synch.h: Changed the default len value for all the + File_Lock::*acquire* methods to 1 rather than 0 to work around a + problem with Win32. Thanks to Detlef for reporting this. + + * ace/ACE.cpp (ldfind): Added a strdup() of the LD_SEARCH_PATH + returned by getenv() so that we don't overwrite the environment + variable by using strtok(). Thanks very much to Prashant for + figuring this out! + +Thu Apr 18 22:13:43 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * examples/Naming/Client/Client_Test.cpp (list_value_entries): + Added check in list_name_entries and list_value_entries to see + if type actually exists before trying to print it out. + +Wed Apr 17 16:40:42 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released version 4.0.14 for testing. + + * Added Tim Harrison's new instructions for building and using ACE + as a DLL and SLL on Win32. + + * ace/Svc_Conf.h: Due to the new changes to the yacc code, I had + to move the definition of YYSTYPE into the Svc_Conf.h file + rather than have it in the Svc_Conf.y file. This solves a + variety of multiple-inclusion problems... + + * ace: Modified all the yacc token symbols so that they will be + prefixed with ACE_. This avoids namespace pollution problems. + + * Added the ACE_STATIC_SVC* macro support to a number of files so + that the static versions of all the ACE services will be + registered with the ACE Service Repository correctly. Thanks to + Jesper for pointing this out! + + * ace/OS.h: the first occurence of + + typedef thread_t tid_t; + + in the OS.h file should read + + typedef pthread_t tid_t; + + Thanks to Jan Rychter for reporting this. + + * ace/Read_Buffer.cpp: Fixed rec_read() so that it will fail + correctly when new fails! + +Wed Apr 17 19:05:42 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * netsvcs/lib/Name_Handler.cpp (type_request): Here is a brief + description of the changes made to ACE_Name_Handler to simplify + the dispatch method and make it more elegant: + + 1) I created a table called op_table_. It contains pointers to + member functions of ACE_Name_Handler. This table can be + indexed using the msg_type. However, I went one step further + to have all the list methods be grouped under two + methods. That is, requests for list_names, list_values, and + list_types are handled by one method called lists() and + similarly, requests for list_name_entries, + list_value_entries, and list_type_entries are handled by + another method called lists_entries(). A MASK is used to have + the op_table_ index to the same method for these requests. + + 2) I also created another table called list_table_. This is + primarily used by lists() to keep track of a couple of things: + + pointers to member functions of Name_Handler that + handle the actual request. + + pointers to member functions of Name_Handler that act + as factories to create the appropriate request to + send back. + + description of the message type. + + A different MASK is used to index into the list_table_ to + invoke the appropriate method or get the appropriate description. + + 3) Within the method lists_entries(), I once again make use of + the pointers to member functions technique. This time, + however, I use pointers to member functions of Naming_Context + which I assign in the switch statement. + +Tue Apr 16 13:03:49 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released version 4.0.13 for testing. + + * ace/INET_Addr.i: moved the get_port_number routine up to the top + of the file so it gets defined before it is used. Linux did not + like it where it was... Thanks to Neil Cohen for reporting + this. + + * ace: Split the Dump.* files into Dump_T.* files. This is + necessary to support the template policies of various C++ + compilers. + + * ace/Malloc_T.cpp (dump): Fixed an erroneous use of -> since + guard_ is a non-pointer... Thanks to Neil Cohen for reporting + this. + + * ace/Log_Record.cpp (print): Finally figured out how to do + extensible ostream logging so that it will seamlessly work with + ACE_Log_Msg. This required one change to ACE_Log_Record, + however. In Log_Record.cpp: + + In ACE_Log_Record::print(char *, int, ostream, size_t len), added + + char *t = this->msg_data_[len - 1]; + + if (t == '\n') + *t = '\0'; + + s << this->msg_data_ << endl; + + This is required because the virtual function overflow() in + streambuf does not get called until endl is called to flush the + buffer. Note that (at least on AIX), '\n' is treated separately + from endl and will not cause the overflow() function to be + called. Thanks to Chris Lahey for this idea. + + * ace/OS: Added a new wrapper for strrchr(). + + * ace/Token_Collection.cpp (renew): Added a cast of + (const char *) to token_name so that the conversion operator + will get called correctly. Thanks to Gonzalo Diethelm + for reporting this. + +Tue Apr 16 13:29:32 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Name_Request_Reply.cpp (decode): Fixed a small bug in encode() + and decode() of ACE_Name_Request. When doing ntohs and htons, we + only ought to do it for the name and value part of data. type + needed to be left alone since it is not a short. + +Mon Apr 15 02:31:00 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * include/makeinclude/platform_hpux_orbix.GNU: Added + David.L.Sames.1@gsfc.nasa.gov (David Sames) config*.h file and + platform_*.GNU file for HP/UX 9.x using Orbix. + + * ace/OS.i: Fixed all uses of pthread_cleanup_{pop,push} so that + they will work correctly if (1) the OS implements the as macros + and (2) if these macros must obey strict nesting rules... + Thanks to Reginald S. Perry for pointing out + how to do this effectively. + + * ace/Thread_Manager.h: Fixed a typo where the typedef + + typedef (ACE_Thread_Manager::*THR_FUNC)(int, int); + + was lacking a return value. Thanks to Reginald S. Perry + for reporting this. + + * netsvcs/bin/main.cpp (main): Fixed the main program so that it + passes the options correctly for the statically linked service + invocations. Thanks to Jesper for reporting this. + + * examples/Naming/Client/Client_Test: Updated the client test + program so that it will work on Window NT, where it's not valid + to select() on non-socket HANDLEs (ugh). Thanks to Jesper for + pointing this out... + + * Released version 4.0.11 for testing. + +Mon Apr 15 00:20:02 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Local_Name_Space.cpp (strstr): Fixed ACE_NS_String::strstr + to function properly. It was assuming that length of the pattern + as well as the string was in units of ACE_USHORT16 when in + reality the length is number of bytes. + + * ace/Local_Name_Space.cpp (value_): Modified ACE_NS_Internal so + that instead of taking an ACE_NS_String for type, it now take a + char*. It therefore keeps type around as a char*. This should + help solve some problems we were encountering with byte ordering + when sending data between NT machines and Sun. + + * netsvcs/lib/Name_Handler.cpp: Cleaned up lists_entries by making + use of pointer to member functions. A single call to the + appropriate list method takes care of everything. + +Sun Apr 14 16:21:32 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/INET_Addr.i (addr_to_string): Swapped the order that the + hostname and port number are printed to make this consistent + with the way that ACE_INET_Addr::string_to_addr works. Thanks + to Ashish Singhai for pointing + this out. + + * ace/TLI_Acceptor: Changed the methods to take an ACE_Addr rather + than an ACE_INET_Addr. This allows other address families (such + as DECnet) to be used with the TLI wrappers. Thanks to Ajit + Sagar for suggesting this. + + * ace/Local_Name_Space.cpp (list_types): Removed the use of + regular expression matching for the name and value types of the + name server and replaced these with substring matching instead. + This is necessary since we're working with wide characters here, + and it doesn't make any sense to perform regular expressions on + these puppies... + + * ace/Local_Name_Space.cpp: Added a new strstr() method on all the + ACE_NS_String class so that we can compare substrings for wide + character types. + + * ace/SString: Added a new strstr() method on all the + ACE_[WSC]String classes so that we can compare substrings, + even for wide character types! + + * apps/gperf: Incorporated the GNU gperf program from the FSF. + We're going to make some improvements to this for a subsequent + paper. + +Sun Apr 14 15:30:05 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Name_Request_Reply.h: Changed the enum values for the + Constants such as BIND, REBIND, etc. The new values allow us to + do bitwise operations using MASK to be able to dispatch the same + method for all the list operations. For use case of this, please + see Name_Handler::dispatch(). + + * netsvcs/lib/Name_Handler.cpp (dispatch): Completely changed + dispatch() so that now it uses a table of pointer to member + functions to call the appropriate method when a request + arrives. In addition, requests for LIST_NAMES, LIST_VALUES, and + LIST_ENTRIES are now handled by one method called lists() in which + I factored out a lot of common code. Similarly, requests for + LIST_NAME_ENTRIES, LIST_VALUE_ENTRIES, and LIST_TYPE_ENTRIES are + handled by lists_entries(). This has really cleaned up the code. + +Sat Apr 13 15:26:51 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Name_Request_Reply.cpp: Made changes so that all + byte-ordering computations take place in encode and decode + methods of ACE_Name_Request_Reply and ACE_Name_Reply + only. Previously some of these computations were taking place in + Get/Set methods such as name_len() which was highly error prone. + (init): Added new methods called init() to both ACE_Name_Request + and ACE_Name_Reply that initialize length to size of transfer_. This + is needed since the length gets set only once in the constructor + and after that each call to encode() switches the byte ordering + causing problems. + +Sat Apr 13 11:44:16 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released version 4.0.10 for testing. + + * ace: Removed the ACE_HAS_THREAD_T macro from various places. + This was unnecessary given the new scheme for dealing with + threading. + + * ace/config-linux-pthread.h: Fixed a typo that was preventing + compilation from working. Thanks to Jan Rychter + for finding this. + +Fri Apr 12 13:17:47 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * apps/Gateway/Gateway: The gateway application appears to + be working again! + + * ace/OS.cpp (thr_create): Based on conversations with Chris + Lahey, modified the pthreads ACE_OS::thr_create implementation + so that it doesn't try to assign the hthread_t thr_handle since + this is meaningless in pthreads... + + * apps/Gateway/Gateway/Gateway.cpp: Fixed a typo that was causing + the system to go into an infinite loop when the config file was + empty! + + * apps/Gateway/Gateway/Gateway.cpp: I was forgetting to set the + line_number to 0 before calling read_entry()... + + * ace/Parse_Node.cpp: Fixed a dumb error that arose because I + forgot that you can't call dlerror() twice and get the same + result (it returns NULL the second time). As usual, RTFM. + + * ace: Removed ACE_HAS_TLI from all the SunOS 4.x config*.h files + and platform_*.GNU files. There are just too many bugs with TLI + on SunOS 4.x to support it by default... + + * examples: Made some minor fixes to make the examples all compile + with GCC. + + * apps/Gateway/Gateway/Gateway: Reimplemented the Gateway + application as to be an ACE network service. This should make + life much easier on platforms with broken C++ templates... + + * apps/Gateway/Gateway: Revised the Config_Parser.* files so that + templates would be split from the non-templates. This avoids + bugs with some C++ compilers... + + * ChangeLog: added the ACE_TEMPLATES_REQUIRE_SPECIALIZATION flag + to the config-linux-pthreads.h file. Thanks to + Jean-Francois.Ripouteau@netsurf.org for reporting this, and also + for archiving the ACE mailing list. + +Thu Apr 11 01:37:25 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released version 4.0.9 for testing. + + * ace: regenerated all the manual pages and html pages. + + * Built ACE successfully on SGI IRIX 5.3 using GNU G++ 2.7.2. + + * ace/Thread_Manager: renamed the descriptor() accessor methods to + hthread_descriptor() and thread_descriptor() to avoid + ambiguities due to the fact that hthread_t and thread_t can now + be the same type. + + * ace/Thread_Manager: revised the hthread_t so that it is always + large enough to hold valid thread ids. + + * ace: Moved the config-osf1.h file to be named config-osf1-3.2.h + in anticipation of OSF/1 4.0... + + * ace: Changed all occurrences of wchar_t to ACE_USHORT16, which + is a more portable way of representing wchar_t's so that we can + pass them across the network... Unfortunately, wchar_t tends to + be different sizes on different machines, so we can't use the + binary form!!! + + * ace: Added many, many small changes to get ACE to compile on + OSF/1 3.2D using DEC C++ 5.3. Thanks to Tom Marrs + <0002104588@mcimail.com> for slogging through all of this stuff! + + * ace/Thread_Manager.h: Fixed a stupid oversight where I forgot to + add a -1 to the trailing argument of spawn*. Thanks to Neil + Cohen for spotting this. + + * ace: Added a new ACE config file for AIX 3.2.5 courtesy of Bob + Olson . In addition, I changed the name of the + config-aix.h file to be config-aix-4.1.x.h and called the new + file config-aix-3.2.5.h. + + * apps/Synch-Benchmarks/Benchmark.cpp: Added template + specializations for ACE_TSS and ACE_Atomic_Op. Thanks to Matt + Stevens for pointing out the need for this. + + * ace/CORBA_Handler: Added a number of fixes to get the ACE + CORBA_Handler to compile on Win32 with Orbix 2.0. Thanks to + Rich Ryan for these fixes. + + * ace/OS.cpp (thr_create): Fixed a small bug in the pthreads + thr_create() code by dereferencing p_thr before casting it + to hthread_t and assigning it to *thr_handle. + + * ace/OS.i: Backed out the previous changes of pthread_cleanup*. + It turns out that on SunOS 5.5 these macros force a certain + style of programming this is hard to integrate with the existing + implementations of other ACE wrapper methods. Fortunately, none + of this affects existing ACE code since we just use the default + solaris threads API in this case... + + * ace/OS.i: Modified the order of #ifdefs in various ACE_OS::thr_* + methods to take advantage of the pthreads features on Solaris + 2.5. + + * ace: Removed the last few typos that prevented ACE from building + on SunOS 4.x with G++... + + * ace/Thread_Manager: Changed spawn() and spawn_n() so that + they optionally take a group parameter and automatically add + this to an existing thread group. That way we don't need to + spawn the thread(s) and then reassign them after the fact. + The new API automatically assigns the thread(s) to the group + you specify. Thanks to Chris Lahey for this idea. + + * ace: Fully integrated POSIX pthreads into the ACE build for + Solaris 2.5. + + * netsvcs/lib/Server_Logging_Handler.cpp: Rearranged the Server + Logging files so that things will compile and link correctly + using stock GNU G++. + + * ace/Log_Msg.cpp (ACE_Log_Msg): Forgot to initialize the ostream + * to 0. This was causing problems for Win32... + + * ace: *Finally* got the static and dynamic ACE libraries to + compile on SunOS 4.x using stock G++! + + * ace/Synch_T.h: Added a new macro called ACE_SYNCH that will + be ACE_NULL_SYNCH if !ACE_HAS_THREADS and ACE_MT_SYNCH if + ACE_HAS_THREADS. + + * ace/Service_Record.cpp: Changed this to use ACE_SYNCH. This + will fix template problems with G++ on SunOS 4.x. + + * build/SunOS5.5/ace/OS.i (sema_wait): Changed all uses of + ::pthread_cleanup_{push,pop} to pthread_cleanup_{push,pop} since + these are implemented as macros on Solaris.... + +Thu Apr 11 19:43:33 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * examples/Naming/Dump_Restore/Dump_Restore.cpp (init): Modified + Dump_Restore in order to work correctly without having + Name_Options around as a Singleton. + + * examples/Naming/Client/Client_Test.cpp (set_host): Modified + Client_Test in order to work correctly without having + Name_Options around as a Singleton. It simply uses the accessor + provided by Naming_Context to get to Name_Options. + + * ace/Name_Options.cpp: Changed Name_Options so that it is no + longer a Singleton. As a result, now there is an instance of + Name_Options per Naming_Context. Note that for an application to + change Name_Options, it can use the accessor function provided + in Naming_Context. As a consequence of all these changes, we can + now have multiple Naming_Contexts per application. + +Wed Apr 10 20:19:50 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS.h: Incorporated a mapping for Solaris 2.5 pthreads so + that it fits in nicely with the earlier ACE pthreads support. + From now on, the pthreads API will be the default threading + scheme for ACE on Solaris 2.5... + + * ace: Added the file name to every *.cpp and *.i file in ACE. + This makes it easier to figure out what's what when looking at + the source code. Thanks to Chris Lahey for suggesting this. + + * ace/CORBA_Handler.cpp (ACE_CORBA_Handler): Added bodies for + the copy constructor and assignment operator of ACE_CORBA_Handler + (which are private) since some compilers generate link errors + for these! Thanks to Rich Ryan for + pointing this out. + + * ace/Synch_T.cpp (ts_get): at line 270 (within + ACE_TSS::ts_get (void) const) there was a keycreate() call + that did not have an instance pointer pass in with it. The + symptom has been that if the last active task has been finished + all active tasks being created afterwards won't get the close() + hook invoked. I've fixed this in order to solve a mysterious + bug with ACE_TSS. Thanks to the ever-vigilant Detlef for + reporting this bug and fix. + +Wed Apr 10 01:56:52 1996 Douglas C. Schmidt (schmidt@mambo.cs.wustl.edu) + + * ace: Added the ACE_TEMPLATES_REQUIRE_SPECIALIZATION to + config-sunos5.5-g++.h file. This should allow ACE to build + correctly. Thanks to Adam Miller for + pointing this out. + + * ace: Installed SunOS 5.5, so now we can finally test pthreads! + + * ace/OS: Modified the implementation of mutex_t for Win32 so that + it automatically selects the CRITICAL_SECTION or the HANDLE form + of Mutex depending on whether the type argument is USYNC_THREAD + or USYNC_PROCESS, respectively. This now means that all the + existing ACE code that used ACE_Condition will + continue to work correctly on Win32 and UNIX! + +Tue Apr 9 23:04:30 1996 Douglas C. Schmidt (schmidt@mambo.cs.wustl.edu) + + * ace/Synch: Somehow, the definitions for ACE_Thread_Semaphore and + ACE_Process_Semaphore were MIA. I've added the implementations. + Thanks to Bruce Worden for + noticing this... + +Tue Apr 9 02:16:02 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Service_Config.cpp: reordered the #includes in this file so + that it works correctly on Win32. Thanks to Rich Ryan + for help with this. + + * ace/Auto_Ptr.cpp (remove): added the implementations of the + auto_ptr::remove() and auto_array_ptr::remove() static methods. + Thanks to Chris Lahey for noticing their absence... + + * ace/Auto_Ptr: Added the #pragma implementation ("Auto_Ptr.cpp") + statement if defined ACE_TEMPLATES_REQUIRE_PRAGMA to work on + AIX. Thanks to Chris Lahey for this. + + * ace/Makefile: Moved Auto_Ptr from FILES to TEMPLATE_FILES to + work on AIX. Thanks to Chris Lahey for pointing this out. + + * Modified a bunch of the apps and example Makefiles so that + things will build better using G++. + + * ace/Name_Options.cpp (parse_args): Made the "database" name the + same as the process name by default... + + * ace/Reactor.h: Changed the type of current_ in + ACE_Handler_Repository_Iterator from size_t to ssize_t so that + this can handle negative numbers. Thanks to Mark Zusman + for reporting this. + +Mon Apr 8 23:33:15 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * netsvcs/lib/Name_Handler.cpp (recv_request): Fixed a small + bug. In recv_request() ntohl was being called again on length + which was causing problems since the length was already in host + byte order. The ACE Name Server should now be working on NT. + +Mon Apr 8 02:14:30 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace: Fixed a number of minor problems that caused duplicate + symbols when linking ACE with G++ (no-repo) on SunOS 5.x and + SunOS 4.x. Thanks to Andy Gokhale for help with this. + + * ace: Added Jan Rychter very nice contribution + of pthreads and DCE threads to ACE. This should make life + easier for Linux users and users of other pthreads packages. + + * ace/Service_Config.cpp (process_directives): Changed the code to + use an auto_ptr to make sure that we always release the + ace_obstack memory, regardless of how we exit. + + * ace/OS.i (strerror): Changed sys_errlist to _sys_errlist to work + around bugs with SunOS 4.x. This will undoubted break some + other twisted UNIX system. + + * ace/Local_Tokens.cpp (acquire): Added a return 0 at the very + end... Thanks to Chris Lahey for reporting this (yet + again... ;-)). + + * ace/Parse_Node: Made a bunch of small changes to deal with the + fact that there's no dlerror() equivalent on NT... + + * ace/Task.h: The static function instance() should return + ACE_Task_Exit* (or ), not + ACE_Task_Exit *. Thanks to Chris Lahey for spotting this. + + * ace/Thread_Manager.cpp: added an argument to the exit() method + that allows applications to exit without calling thr_exit. This + would allow the method to be called from within a pthread + cancellation cleanup routine, without calling thr_exit a 2nd + time. Thanks to Chris Lahey for suggesting this. + + * ace/Log_Record.cpp (operator <<): Changed the verbose option so + that it is an attribute, this will allow the ostream to print + verbose information if necessary. Thanks to Chris Lahey for + suggesting this change. + + * ace/config-win32-msvc*.h: Added the + ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES flag since it appears + that this causes problem with some versions of MSVC++ 4.0... + + * Released version 4.0.6 for testing. + + * netsvcs/lib/Server_Logging_Handler.h: #included the + Svc_Handler.h file, that absence of which was causing problems + for HP/UX. Thanks to Richard Orr + for reporting this. + + * Made a few minor changes to the source to make sure that it + compiles correctly on SunOS 5.x with G++. + + * ace/Thread_Manager.h: Added the insert() method for the non-MT + version of Thread_Manager. Thanks to Alexandre Karev + for reporting this. + + * ace/Task: Renamed the static double-check lock_ to + ace_task_lock_ to avoid a name conflict with the existing + this->lock_ instance in each class. Thanks to Prashant for + tracking this down... + +Sun Apr 7 14:40:05 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp: + Rolled back a change that replaced #defines with typedefs. It + turned out the #defines were there for a reason... Thanks Neil + B. Cohen for pointing this out... + + * ace/OS.h: Added a new check to deal with the fact that many + versions of Pthreads don't support tid_t (which seems to be an + AIXism...). + +Thu Apr 4 01:19:19 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Officially released version 4.0.5... + + * ace/OS.h (ACE_TSS_TYPE): Somehow the ACE_TSS_TYPE macros ended + up *before* the inclusion of Time_Value.h, which meant that + these macros weren't being expanded properly. This may help + explain odd behavior with ACE TSS. + + * ace/Thread_Manager.cpp (insert): Added a new method that allows + us to insert a thread into an ACE_Thread_Control after it's been + constructed. + + * ace/Message_Block: Fixed a typo in the init() method. Thanks to + Ross Dargahi for noticing this. + + * ChangeLog: Finally got all of ACE built on SunOS 5.x and SunOS + 4.x using only the stock GNU GCC compiler (i.e., no template + repository...). This should make it easier to port to other + versions of G++. + + * ace/Task: Modified the ACE_Task and ACE_Task_Exit implemenation + so that it only uses 1 TSS key per ACE_Task template + instantation, rather than 1 TSS key per ACE_Task instance. This + works around horrible limitations with Win32... + + * ace/Thread_Manager: Added new methods to set and get the + Thread_Manager used in a Thread_Control. + + * ace/Pipe.cpp (open): Fixed a bug in where ACE_Pipe::open did not + set this->handles_, thus a garbage handle gets registered. + Inserted the following two lines at line 53 of Pipe.cpp: + + this->handles_[0] = reader.get_handle (); + this->handles_[1] = writer.get_handle (); + + Thanks to Kirk Sinnard for this fix. + + * ace/OS.h: Added a couple of fixes for the SCO port. Thanks + again to Matt Newhook + + * ace/OS.cpp: Integrated Detlef's clever scheme for freeing up + thread-specific storage correctly on Win32... + + * ace/Task.cpp (ACE_Task): Made sure to initialize the + next_-pointer of ACE_TASK and Message_Queue point to NULL. + This fixes a problem on NT. Thanks to Karlheinz for + noticing this... + + * include/makeinclude/rules.lib.GNU (VLIB): Fixed up the ACE + makefiles so that we can now build on SunOS 4.x correctly + without using the template repositories... + + * ace/Service_Config.cpp: Added a bunch of template + specializations so that GNU G++ can be used to compile ACE on + SunOS 4.x *without* requiring the template repository hacks... + Thanks to Mark Zusman for helping with this. + +Wed Apr 3 00:55:12 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * examples/Reactor/Misc/test_reactors.cpp: Added a new torture + test of the ACE_Reactor and ACE_Task. Thanks to Detlef for + contributing this... + + * netsvcs/bin/Makefile: Removed a stray -lACE_svcs from the + Makefile. Thanks to Matt Stevens for reporting this. + + * ace/Synch.cpp: Fixed two mistakes related to keeping INLINE on + the get_thread_id() and get_nesting_level() when I moved them + into the *.cpp file... Thanks to Matt Stevens for finding this. + + * ace/Reactor.cpp (owner): modified owner() so that it returns + the original owner when setting a new owner. This makes it + possible to write code like this: + + thread_t t; + + reactor->owner (ACE_Thread::self (), &t); + reactor->handle_events (); + reactor->owner (t); + + * ace/SOCK_Connector.cpp (connect): Added an additional check for + errno == EWOULDBLOCK for non-blocking connects due to screwy + semantics of Win32 non-blocking sockets... + + * netsvcs/lib/Client_Logging_Handler: Fixed a very obscure bug + that arose due to the way that UNIX select() interacts with + SVR4 MSG_BAND data. It turns out that you must use the + ACE_Event_Handler::EXCEPT_MASK to get this to work properly + (gag). This stuff is much easier with SVR4 poll(). + +Tue Apr 2 13:57:05 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS.i: Fixed an error compiling the new Log_Msg.cpp because + when it inlined OS.i, there were references to + ACE_OS::thread_mutex_*() before the functions were declared + inline. The references were assumed to be external, and then + when the linkage was actually declared as inline, the compiler + choked. To fix this, in OS.i, all the thread_mutex_* calls + where moved above the first reference, which was in + ACE_OS::cond_broadcast(). Also moved the mutex*() calls since + they are referenced by the thread_mutex calls. So the order is + mutex*(), then thread_mutex*(), and then cond*(). Thanks to + Chris Lahey for reporting this. + + * netsvcs/lib/Client_Logging_Handler.cpp: Added missing return + values in some of the methods. Thanks to Tim Harrison for + spotting this... + + * ace/Map_Manager.cpp (shared_unbind): It was possible that INT_ID + could be assigned a value from a previously unbound map entry. + The shared_unbind matches the ext_id, but does not see if the + entry had previously been unbound. This causes a problem if the + INT_ID type is a pointer type, and the user of the map deletes + objects as a result of the unbind returning a 0. The correct + solution is to include a test for is_free in the shared_unbind + before checking the equality of the ext_id. Thanks to Phil + Mesnier for reporting this. + + * ace/Reactor.cpp (next): Fixed a bug that prevented the + iterator's next() method from detecting the end of the + iteration. Thanks to Mark Zusman + for reporting this. + + * ace/Reactor.cpp (advance): Fixed a bug that prevented the + iterator from advancing. Thanks to Mark Zusman + for reporting this. + + * ace/Log_Msg.cpp (open): Added a check for logger_key being NULL, + in which case we log to STDERR rather than segfault... + + * netsvcs/lib/Server_Logging_Handler.h: Fixed a typo in + the declaration of + + ACE_SVC_FACTORY_DECLARE (ACE_Server_Logging_Acceptor) + + Thanks to Neil Cohen for finding this. + +Mon Apr 1 00:17:21 1996 Douglas C. Schmidt (schmidt@mambo.cs.wustl.edu) + + * ace/Time_Value.i: Fixed two stupid bugs in the Time_Value + relational operators. Thanks to Mathew Newhook + for pointing this out. + + * ace/OS.h: Added an extern "C" block around the netdb, net/if.h, + netinet/in.h, arpa/inet.h to work around problems with SCO. + Thanks to Mathew Newhook for this. + + * ace/Reactor: Merged the ACE_Pipe into the Reactor + implementation. This cleans up some nasty OS-specific code in a + clean way. + + * ace/CORBA_Handler.cpp (ACE_MT_CORBA_Handler): Fixed some typos + that arose during the transition to the ACE_Pipe. + + * ace/Pipe: Added a new open() method that doesn't return the + handles, it just stashes them away for safe keeping. This is + useful for places like the Reactor. + + * ace/Local_Name_Space.h: Added ACE_Export to the front of + ACE_NS_String. Thanks to Detlef for suggesting this. + + * From now on, I'll be numbering each new release of ACE with a + different minor number. However, the latest version of ACE will + also always be available at + + http://www.cs.wustl.edu/~schmidt/ACE.tar.gz + + This is useful if you just want to get the latest one without + having to bother with keeping track of minor numbers. For + instance, that way you can still keep that reference in my + bookmark list and you don't have to remodify it with every + release. Thanks to the ever-vigilant Chris Lahey for suggesting + this. + + * ace: added new a ACE project file (ace.mdp) and Makefile + (ace.mak) to create ACE as a DLL on Win32. This should greatly + simplify the Win32 build process... + + * INSTALL: Added new INSTALL file explaining how to build for + Win32. + + * ace/Thread_Manager.cpp: Fixed a horrible bug with Win32. On + reasonable systems ACE_Thread::exit() should not return. + However, due to horrible semantics with Win32 thread-specific + storage this call can return (don't ask...). Therefore, we need + to reacquire the mutex so that we don't get burned when the + Guard automatically releases it when this method returns. Thanks + to Tim for helping me figure this out. + + * ace: Fixed some problems with errno in Remote_Tokens and + Local_Tokens. + + * ace/Reactor.cpp: Fixed an annoying preponderance of useless + ACE_MT_SAFE #ifdefs in the Reactor implementation. Thanks to + Gerolf Wendland for pointing this + out! + +Sun Mar 31 13:09:27 1996 Douglas C. Schmidt (schmidt@mambo.cs.wustl.edu) + + * ace/OS: Changed the implementation of cond_t and rwlock_t for + Win32 to use thread_mutex_t (i.e., CRITICAL_SECTIONS) rather + than mutex_t (i.e., Win32 Mutexes). This should improve + performance without sacrificing generality (of which there is + none at the moment since we don't have process-wide condition + variables or readers/writer locks on Win32 anyway.. + + * ace/Thread_Manager.cpp (remove_thr): Fixed bugs in the + ACE_Thread_Manager class. The wait() member grabbed the + Thread_Mutex lock_, then (if the current_count is not zero) + grabs the Condition lock zero_cond_. Doing so, however + implicitly released lock_, which meant that another thread could + get into wait(), and wait on zero_cond_. zero_cond_ was only + signaled from ACE_Thread_Manager::remove_thr() when the + current_count_ is zero, but it signaled with + ACE_Condition_Thread_Mutex::signal(), which only releases one + thread that is waiting on the Mutex. Thus, any other threads + waiting on zero_cond_ would never be resumed. The fix was to + use ACE_Condition_Thread_Mutex::broadcast() rather than + ACE_Condition_Thread_Mutex::signal() in + ACE_Thread_Manager::remove_thr(). This fix is only reliable + since remove_thr() is called only when ACE_Thread_Manager::lock_ + is held by the calling thread. Thank to Bruce Worden + for reporting problem and + suggesting this fix. + + * ace/Token: Modified this class so that it only works with + ACE_Thread_Mutex (which is more precise than what was going on + before...). + + * ace/Synch.h: Modified ACE_RW_Process_Mutex so that on Win32 it + uses ACE_Process_Mutex until we've got a working + RW_Process_Mutex for Win32... + + * ace/Synch: Removed the ACE_Process_Barrier until we get a + working implementation... + + * ace/Synch: Changed the ACE_Barrier so that it only tries to work + within a single process. + + * ace: Changed all uses of ACE_Condition_Mutex to + ACE_Condition_Thread_Mutex to reflect what's really going on + here... + + * Changed all uses of ACE_Mutex to ACE_Thread_Mutex throughout + ACE. This is *much* more meaningful and makes it possible to do + some great optimizations on Win32! + + * ace: Changed all uses of ACE_Mutex_Guard to + ACE_Thread_Mutex_Guard. This is a more accurate name for how + this is used in ACE. + + * netsvcs/lib/Client_Logging_Server: Reengineered the ACE + Client_Logging service so that fits into the ACE network service + format. This version is particularly interesting since it + illustrates a "Connector-driven" service. In contrast, all the + other ACE network services are "Acceptor-driven" services. + + * netsvcs: Merged the implementation of all the ACE network + services into a single ./netsvcs/lib directory. Each of these + is now a fully dynamically linkable service. Created a single + main.cpp program in the ./netsvcs/bin directory. This main + illustrates how to dynamically link an or all of the ACE network + services to form complete applications. Thanks to Prashant for + help with this. + + * ace/OS.cpp: Changed readv() and writev() so that they will once + again compile for Win32. Note, however, that if you try to + readv() and writev() on the same descriptor you will lose since + they are not atomic! However, this stuff is stuff useful if + you're *not* reading/writing to a common descriptor... + + * ace/Synch_T.cpp: Removed the ACE_Null_Condition<> template. + This didn't really make any sense... + + * ace/OS: Changed the test of lock_.get_nesting_level() in + ACE_TSS_Cleanup::exit () to account for the fact that a + ACE_Recursive_Thread_Mutex now starts out with a nesting level + of 1 when it is first acquired. + + * ace/Synch_T: Removed the implementation of ACE_Recursive_Lock. + It just doesn't generalize correctly to other types of + synchronization mechanisms... + + * ace/Synch: Reimplemented ACE_Recursive_Thread_Mutex using Dave + Butenhof's strategy. This fixes some + latent race conditions in the original implementation. + + * ace: Changed the name of ACE_Recursive_Mutex to + ACE_Recursive_Thread_Mutex since the current implementation + really only works for Thread_Mutexes or Thread_RW_Mutexes... + + * ace: Removed the "Assert.h" file and moved its functionality + into Log_Msg.h. This is more consistent with the rest of the + error reporting and logging in ACE and also avoids some nasty + circular include problems. + + * ace/Local_Tokens.cpp: Changed the use of ACE_RETURN so that it + passes in errno. + + * ace/Log_Msg: Changed the arguments to the ACE_RETURN macro so + that errno can be returned explicitly. + +Sun Mar 31 15:52:58 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Local_Name_Space.cpp (create_manager): Added three new + methods -- list_name_entries, list_name_values, and + list_name_types. They work similar to list_names, list_values, + and list_types (respectively) except they return the entire + tuple associated with a name binding. + +Sat Mar 30 16:46:32 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/SPIPE_Stream.i (send_handle): There was a typo -- the + parameter shouldn't be "const ACE_HANDLE handle", it should + just be ACE_HANDLE handle. + +Sat Mar 30 16:09:25 1996 Douglas C. Schmidt (schmidt@mambo.cs.wustl.edu) + + * INSTALL: Added new Win32 installation instructions to build + ACE as a DLL. + +Sat Mar 30 14:42:02 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Carefully tested ACE on SGI and SunOS 5.x using G++ and CC. + Everything seems to work now... Released version 4.0.2. + + * ace/Acceptor.cpp (ACE_Strategy_Acceptor): Added default + initializations of NULL for service_name_ and + service_description_ in the ACE_Strategy_Acceptor's default + constructor. + + * ace: Fixed a slew of warnings for HP/UX. Thanks to John Morey + for reporting these. + + * ace/FILE.h (ACE_FILE_Info): Changed the type of field size_ from + size_t to off_t to avoid warnings from C++ compilers... + + * ace/OS.cpp (ftruncate): Added a new function for platforms like + SCO that lack ftruncate(). Thanks to Matthew Newhook + for contributing this. + +Sat Mar 30 12:41:16 1996 Douglas C. Schmidt + + * ace: Removed the ACE_svcs library for the time being and merged + everything back into libACE. There were two reasons for this + change: + + 1. There is a subtle dependency between the ACE_Reactor and the + ACE_Local_Tokens* stuff when deadlock detection is enabled. + This was causing problems. + + 2. This was driving GNU G++ nuts because of the need to + do the "prelink." + + Sooo, for the time being, there's just one ACE library. If + anyone wants to take the time to split everything up so that it + works for all different platforms and send me the fixes I'll be + glad to include this in ACE. + + * ace/Thread.i: Made the ACE_Thread::thr_self() methods call + down to the ACE_OS::thr_self() methods for the case where + the platform doesn't support threads. This means that we + only have to set the default thread id in one place... + +Sat Mar 30 11:53:31 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * bin/class2info.awk: Modified the handleClass() AWK function so + that it can correctly deal with the new ACE_Export and + ACE_Svc_Export tags needed to build ACE DLLs... Here's the + trick: + + sub( "^[\t ]*class[\t ]+(ACE_[.]*Export[\t ]+)?", "", $0 ) + + completely intuitive, eh? ;-) + + * apps/Gateway: Reimplemented the Gateway prototype so that it + uses the new Reactor cancel_wakeup() and schedule_wakeup() + methods instead of mask_ops(). + + * ace/Reactor: Added new high-level "scheduling" + operations called schedule_wakeup() and cancel_wakeup(). These + methods utilize the lower-level Reactor mask_ops() methods to + schedule and cancel Event_Handlers for subsequent dispatching by + the Reactor. I added these new interfaces because they are more + intuitive than calling mask_ops(), which is a non-descriptive + name unless you understand the Reactor implementation... + + * ace/config-irix5.*.h: It turns out that on IRIX 5.x the + bi-directional SVR4 pipe semantics are *disabled* by default. + Therefore, I've changed the config-irix4.*.h files to comment + out ACE_HAS_STREAM_PIPES. + +Fri Mar 29 08:25:33 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/ACE.cpp (ldfind): Changed the character given to strtok() to + account for the differences in UNIX and Win32 described in the + follow bullet. + + * ace/OS.h: UNIX and Win32 use different characters to separate + pathnames in their runtime LD search path (':' and ';' + respectively). Therefore, I've added new macros to ACE OS to + account for this stuff portably. + + * ace/OS.i: Changed the behavior of the ACE_OS::thr_self() methods + so that they always return 1 if ACE_HAS_THREADS is *not* + enabled. This makes application code work correctly across + threaded and non-threaded platforms. + + * ace/OS.i: Changed the return value of the Win32 arm of the + ACE_OS::dlopen() and ACE_OS::dlsym() functions so that they are + now identical to the way that UNIX behaves. + + * ace/Svc_Conf.y: added a #define for ACE_BUILD_DLL to make Win32 + happy... + + * ace/Synch.i: Fixed a number of bugs in the ACE_Mutex and + ACE_Thread_Mutex tryacquire_read() and tryacquire_write() + methods. I was calling mutex_lock() rather than + mutex_trylock()! Thanks to Prashant for finding this. + + * ace/OS.cpp (exit): Fixed a bug caused by the fact that the test + for the nesting level of the recursive mutex should have been + for > 0 rather than > 1. Thanks to Kirk Sinnard + <1764@mn.lawson.lawson.com> for tracking this down! + + * ace/Log_Msg: Enhanced ACE_Log_Msg so that it automatically + caches the process id. This makes it more robust even if users + don't call open()! + + * examples/Connection/non_blocking/CPP-connector.cpp Fixed a bunch + of typos that caused templates to fail on HP/UX. Thanks to Neil + Cohen for spotting this. + + * ace/Shared_Memory_SV: Change all uses of "int id" to "key_t id" + to reflect the new use of key_t in the Memory_Pool. + + * ace/Memory_Pool.cpp (ACE_MMAP_Memory_Pool): Fixed a potential + but in the construction of an MMAP memory pool. Because NT uses + strings rather than integers to name its semaphores we were + passing in junk to the NT Process_Mutex initializer. Arrgh! I + fixed this problem by typedef'ing key_t to be char * on Win32 + and then updating the ACE_DEFAULT_SEM_KEY to be + "C:\\temp\ace.sem" rather than 1234.... Also added a new macro + called ACE_INVALID_SEM_KEY, which is NULL on NT and -1 on UNIX. + + * ace/Log_Msg.cpp (instance): Fixed a typo for HP/UX and + other non-threaded platforms! + + * ace/Synch_T.cpp (ACE_TSS_Guard): Added another small fix + to ACE_TSS_Guard to make sure we free up the key when we + go away. + +Thu Mar 28 15:28:44 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS.h: changed the names of macros ACE_DYNAMIC_SVC* to new + names that reflect their new, more general nature now that we've + got the ACE_Static_Svcs stuff... + + * ace/Service_Config.cpp (load_defaults): Added a very nice + mechanism that generalizes the configuration of statically + linked services. This makes it possible to insert statically + linked services into a program without changing any of the + existing ACE_Service_Config code. These static services can + then be enabled via the svc.conf file using the "static" + directive. Thanks to Matthew Newhook for + suggesting this and for doing the bulk of the implementation. + + * ace: Commented out the ACE_TRACE calls in ACE_Unbounded_Set, + ACE_OS, and all the ACE synchronization wrappers to work around + some horrible dependencies with Win32 and thread-specific + storage... The moral here is that you have to be careful what + you trace because circualar dependencies abound... My new + policy is that low-level routines are not automatically traced + because they can cause infinite recursion. + + * ace/Synch_T.cpp: Fixed a nasty bug with ACE_TSS_Guard. This was + causing programs that uses ACE_TSS_Guard to segfault... Thanks + to Kirk Sinnard for reporting this. + + * ace/Synch: Added "lock()" methods to all the ACE synchronization + wrappers to return the underlying C level object... This is + necessary at some points in ACE. + + * ace/Synch: Fixed a horrible bug in ACE_Recursive_Mutex and + ACE_Recursive_Lock that was causing instant deadlock because the + non-recursive Solaris/Pthread mutex was being acquired too + eagerly... + +Thu Mar 28 12:14:57 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Map_Manager.cpp (rebind): Added a new method called resize() + which increases the size of the map. Both open() and + shared_bind() make use of this method to dynamically increase + the size of the map. + + * ace/Local_Name_Space.cpp (shared_bind): Modified shared_bind() + in accordance to the changes to Map_Manager. shared_bind() no + longer has to check if the map runs out of room since + Map_Manager dynamically grows the map. + + * ace/Map_Manager.cpp (shared_bind): Changed shared_bind() so that + when the map reaches max_size_, we grow the map by DEFAULT_SIZE + by making a call to open(). + +Wed Mar 27 20:00:47 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Local_Name_Space.cpp (shared_bind): Fixed a bug which was + allocating memory for a name binding which would fail on a bind + since there already existed a binding. This was causing the + mapped-file to grow even when binds would fail. + +Tue Mar 26 13:49:24 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/INET_Addr.i (addr_to_string): Moved the order of + get_host_addr() so that it comes before addr_to_string(). + Thanks to Neil Cohen for finding this. + + * ace/Synch: Added a new implementation of ACE_Thread_Mutex that + takes advantage of the new ACE_OS::thread_mutex_* mechanisms. + + * ace/OS: Added a new set of ACE_OS::thread_mutex_* mechanisms + that map efficiently to either Win32 CRITICAL_SECTIONs or UNIX + mutex_t's with type set to USYNC_THREAD. This allows ACE to + take advantage of the lightweight Win32 synchronization + mechanisms. When Windows NT 4.0 comes out, we'll at last have a + perfect mapping since WinNT 4.0 supports + TryEnterCriticalSection! + +Tue Mar 26 17:35:31 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Map_Manager.cpp: Added two new methods -- total_size() and + current_size() which return the max_size and current_size of the + map respectively. + +Mon Mar 25 20:22:25 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Service_Config.cpp (initialize): Updated the use of ACE_ARGV + to use the new method names. + + * ace/ARGV.cpp (ACE_ARGV): Changed the name of the two main + methods of ACE_ARGC from count() and operator&() to argc() and + argv(). This seems much more consistent with UNIX and C/C++ + naming conventions. + + * ace/ARGV.cpp (ACE_ARGV): Added environment variable substitution + to the ACE_ARGV class using the new ACE::strenvdup() method. + This is transparently available to the ACE Service Configurator + now, which enables the svc.conf file to include things like + this: + + dynamic Name_Service Service_Object * + name_svc.so:make_Name_Service() "-p $PORT -h $HOST" + + * ace/ACE: Added a new function called strenvdup() that returns a + dynamically allocated duplicate of its argument, + substituting the environment variable if str[0] == '$'. + + * ace/Naming_Context: Modified this class so that it now inherits + from ACE_Service_Config. This enables application programmers + to dynamically link instances of ACE_Naming_Context into their + applications via the svc.conf file. + + * ace/OS.i (access): Added a new wrapper for the access() method. + + * ace/Local_Name_Space.cpp: Fixed an error in each list_xxx + methods. If there's an error in the for-loop we must still call + ACE_OS::free() to release resources. Thanks to the + ever-vigilant Karlheinz Dorn for spotting this. + + * ace/Strategies: added virtual methods with name dump() to + ACE_Scheduling_Strategy, ACE_Schedule_All_Reactive_Strategy, and + ACE_Schedule_All_Threaded_Strategy. These methods are + referenced in ACE_Strategy_Acceptor::dump() method + (Acceptor.cpp). Thanks to Alexandre Karev for reporting this. + + * include/makeinclude: Added a number of changes to allow ACE to + build shared libraries correctly on AIX. Thanks to Chris Lahey + for these fixes. + + * ace/Makefile: added tempinc to the list of directories to delete + for "clean". Also, between the call to the two sub make files, + added a $(RM) -rf tempinc. Since we make both libs from the + same directory, we need to delete the tempinc directory to be + sure we don't get the templates generated for libACE included in + libACE_svcs. + + * ace/OS.i: Improved the mapping between ACE Win32 GetLastError() + values and POSIX-like errnos. This is now centralized in the + ACE_FAIL_RETURN macro. + + * examples/Threads/test_thread_specific.cpp: Added many new tests + to exercise the ACE thread-specific storage mechanisms on Win32 + and UNIX. + +Mon Mar 25 4:00:01 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Name_Options.cpp (parse_args): Added a new data variable + called database_ that keeps the name of the name server + database. Also added accessor methods for this. + + * ace/Local_Name_Space.cpp (create_manager): Changed + create_manager() to use ACE_Name_Options::instance ()->database + () instead of ACE_Name_Options::instance ()->process_name(). + + * ace/ACE.cpp (ldopen): Added a new method called ldopen that + finds a file either using absolute path or using + LD_LIBRARY_PATH. If the file is found, it opens the file and + returns a pointer to the file. + + * ace/Parse_Node.cpp: used the new ACE::ldfind() method to locate + the shared object file. This makes it possible to put + "relative" names into svc.conf files and then allow ACE to + locate the appropriate shared object DLL. + + * ace/ACE: added new methods called ldopen() and ldfind() that + find the file either using absolute path or using + LD_LIBRARY_PATH. If found, ldopen() opens the file and returns + a pointer to the file. + +Sun Mar 24 10:41:12 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Compiled ACE successfully on Windows '95. + + * ace/OS: Totally redid the ACE thread-specific storage cleanup + mechanism in OS.cpp to avoid bugs with the previous + implementation. + + * ace/Synch_T: Modified ACE_TSS_Guard so that it will call + ACE_OS::thr_keyfree () when it's finished. This should help to + eliminate the unbounded use of thread-specific storage slots + within a thread. + + * ace/Thread: added a new method keyfree() that calls down to the + ACE_OS::thr_keyfree (). + + * ace/Thread_Manager.cpp: Modified the semantics of + ACE_Thread_Manager::exit () so that it "always" calls + ACE_Thread::exit () even if the user hasn't registered this + thread with the thread manager. This avoids some subtle + problems that arise typically when I forget to put an + ACE_Thread_Control around the main() function. + + * examples/Threads/test_thread_specific.cpp: Added new tests to + ensure that the Win32 TSS cleanup logic is working correctly! + + * ace/Log_Msg: Moved the definition of the ACE_FIFO_Send_Msg queue + from the Log_Msg.h file to the Log_Msg.cpp file. The MSVC++ + compiler was having problems with this when building a DLL. + Besides, this needs to be replaced with Sockets for Win32 + anyway... + + * ace/OS.cpp: Put a safe guard in the readv() and writev() + emulations so that they return ACE_NOTSUP_RETURN if + ACE_HAS_THREADS is enabled. This is necessary because the + readv() and writev() emulations are *not* atomic if multiple + threads are used. If someone can provide an atomic + implementation I'll enhance the code to remove the existing + restrictions. + + * ace/OS: Created a new macro called ACE_SYSCALL_FAILED, which is + mapped to 0xFFFFFFFF on Win32 and -1 on UNIX. + + * ace/Synch and Synch_T: cleaned up the implementation of the + Recursive_Lock and Recursive_Mutex to use the ACE_Guard classes. + This simplifies the code. + +Sat Mar 23 16:53:14 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace: Updated all ACE classes to use the new ACE_Export macro. + This will enable them to transparently be used to create a Win32 + DLL. Also added ACE_BUILD_DLL to all the *.cpp files. + + * tests/CPP-inserver.cpp (main): Modified CPP-inclient.cpp and + CPP-inserver.cpp to use non-blocking I/O. In particular, + CPP-inserver times out on select and then checks to see if any + connections have arrived. Both applications are also working on + NT. + +Sat Mar 23 15:02:47 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Local_Tokens.cpp (proxy_): Modified the print statement for + local tokens to account for the fact that thread ids can be + unsigned on some platforms. + + * ace/Log_Msg.cpp (log): Modified the output format of the %t + directive to ACE_Log_Msg::log() so that it prints values in + unsigned form rather than signed form. This fixes a bug with + Win32 on Windows '95. + + * ace/ACE: Added two new methods ACE::read_n() and ACE::write_n(). + These are now necessary since Win32 distinguishes between + operations on SOCKETs and operations on other forms of HANDLEs. + + * ace/ACE: Changed all uses of ACE::set_fl() and ACE::clr_fl() to + ACE::set_flags() and ACE::clr_flags(). + + * ace/ACE: Changed the name of ACE function handle_timed_connect() + to handle_timed_open() since this is reall what it does... + +Fri Mar 22 00:11:19 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Stack: Added a "Node of last resort" to the + ACE_Unbounded_Stack. This ensures we are graceful in the face + of memory failures. + + * ace/OS.i (sleep): Fixed a bug with the Win32 ACE_OS::sleep + mapping. This should have had an "ACE_OSCALL_RETURN" in it... + + * ace/ACE.h: Had forgotten to put "static" in front of "basename". + Thanks to Neil Cohen for reporting this... + + * ace/Name_Options.cpp (process_name): Changed char * to const + char * to avoid compile error. Thanks to Neil Cohen for this... + + * ace/IPC_SAP: Implemented the enable()/disable() methods to work + with non-blocking I/O for SOCKETs on Windows NT. + + * ace/OS.i: Modified ioctl() to support the ioctlsocket() call on + Windows NT. + + * ace/Log_Msg.cpp (log): Fixed a bug that was caused by not + NUL-terminating the logging string properly when a %a is given. + Thanks to Tim Harrison for finding this. + + * ace/OS: Added a new overloaded "ACE_OS::sleep" method that takes + an ACE_Time_Value rather than a u_int. This is much more useful + for fine-grained timers than the horrible UNIX sleep() call. + + * ace/OS.h: #included "sys\timeb.h" in the Win32 version of ACE. + +Thu Mar 21 22:18:50 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * apps: Fixed all incorrect usages of ACE_HANDLE = -1 to use + ACE_HANDLE = ACE_INVALID_HANDLE in order to work with Win32... + + * ace/OS.i (gettimeofday): Replaced the existing implementation of + gettimeofday with a new version that is shorter, more efficient, + and most importantly, correct... Thanks to Todd Montgomery. and + Mike Flinn for this stuff. + + * ace/ACE: added a new method called basename() that returns the + filename portion of a pathname. + +Thu Mar 21 21:51:48 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/OS.h (ACE_DEFAULT_GLOBALNAME): Added some new #defines for + NT: ACE_DEFAULT_NAMESPACE_DIR, ACE_DEFAULT_LOCALNAME, and + ACE_DEFAULT_GLOBALNAME. + + * ace/Local_Name_Space.cpp (ACE_Local_Name_Space): Fixed a subtle + bug. Instead of doing a new char [xxx], I was doing a new char + (xxx). Also, added some #if defined (ACE_WIN32) to support + special cases for NT (for example determining the context file + name). + +Wed Mar 20 02:03:39 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Log_Msg.cpp (log): If we're writing to stdout or to an + iostream make sure the lock is help to avoid race conditions and + scrambled output. + +Tue Mar 19 00:12:25 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Thread_Manager.h: Added new default values to spawn() and + spawn_n(). + + * ace/OS.i (sigaction): Added support for signals to the ACE NT + mapping. + + * ace/ACE: Added 4 new methods to class ACE: send(), send(), + recv(), recv(). These calls mask some differences between UNIX + and Win32 IPC mechanisms. Then, reimplemented the Reactor's + notification mechanism to use this. + + * ace/OS.i (ACE_OSCALL_RETURN): fixed zillions of warnings on + HP/UX by making a small change to line 151 of the OS.i file. + Thanks to Neil Cohen for reporting this. + + * ace/Reactor.cpp: Rewrote the Reactor::notify() mechanism to + avoid using readv() and writev(). These work fine on UNIX, but + don't work correctly on Windows NT due to race conditions. + Basically, we need to reimplement this stuff on Win32 to avoid + the problem. + + * ace/OS.h: Added SIGQUIT, SIG_BLOCK, SIG_UNBLOCK, and SIG_SETMASK + definitions to NT. + + * ace/Time_Value: added a new set() method to be consistent with + the ACE_Time_Value (long, long) constructor. + + * ace/Service_Config.cpp (open): Fixed a bug where the + ACE_Service_Repository and ACE_Reactor weren't being initialized + correctly if the ACE_Service_Config::ACE_Service_Config (const + char *) method was called. + + * ace/Service_Config.cpp: Changed the constructor for + Service_Config so that it doesn't barf if the svc.conf file + isn't found. + +Mon Mar 18 00:34:45 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Reactor.h: Hid the inclusion of the Local_Tokens.h file in + the Reactor so that by default there will be no dependency + between libACE and libACE_svcs. This should prevent compilation + problems on some platforms. + + * bin: Included the html-windex shell script from Vincent Pommier + . + + * man: Included a shell script to automatically generate an + acewindex.html file. This file is useful just after running + man2html. Thanks to Vincent Pommier + for contributing this. + + * man/html: I've just used the man2html programs to generate the + html documentation from the man3 directory. It seems to work + pretty well. + + * ace/Assert.h: Added a forward declaration for class ACE_Log_Msg + to fix problems NuMega preprocessing. Thanks to Mike Flinn + for finding this. + + * ace: Implemented about 1/3rd of the "dump" methods for the + various ACE classes. + + * ace/Acceptor.cpp (info): Fixed a bug -- should use PR_AD rather + than ACE_INET_Addr since this is used for SPIPEs as well... + + * ace/Synch_T.cpp (ACE_TSS): If ACE_Thread::keycreate () fails + then we do an fprintf() and return at the moment. It doesn't do + any good to do an ACE_Log_Msg operation since those all require + thread-specific storage and this will just cause a recursive + problem... + + * ace/OS.cpp: Removed a memory leak in ACE_OS::thr_destory_tss() + that was caused by forgetting to delete each ACE_TSS_Key_Info + object when we no longer needed it. Thanks to Mike Flinn + for finding this. + + * ace/OS.cpp: Added a new method to class ACE_OS called + thr_keyfree(). This enables us to free up a thread-specific + storage key on Win32 (it isn't implemented on the UNIX + platforms). + + * ace/ACE.cpp (timestamp): In order to get ACE_OS::timestamp to + work on Win32, the wMonth, wDay, wYear structure members were + added to the sprintf statement. Thanks to Mike Flinn + for this fix. + + * examples: Changed all uses of ACE::send_n (1, ...) to + ACE_OS::write (ACE_STDOUT, ...) to avoid problems with NT's + hacked support for sockets and HANDLEs. Thanks to Bernd Hofner + for noticing this. + +Sun Mar 17 00:43:14 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/CORBA_Handler.cpp (handle_input): Fixed the CORBA_Handler to + use send()/recv() rather than read()/write(). + + * ace/Process_Manager: put the hooks in for the forthcoming ACE + Process Manager, which will provide a service similar to the + ACE_Thread_Manager, except that it will work for processes, not + threads. + + * netsvcs: all the ACE network services appear to be working + again... + + * man: Completely regenerated all the manual pages to reflect all + the most recent changes. + + * ace/OS.h: Created a new macro called ACE_DEFAULT_REACTOR_SIZE. + This is useful for two reasons (1) it centralizes this value in + one place in ACE and (2) removes a horrible circular dependency + between the Service_Config.h and Reactor.h... + + * ace/Strategies: Added new strategies to handle "scheduling" of + Svc_Handlers launched by a Strategy_Acceptor. In this context, + scheduling refers to "suspending" and "resuming" Svc_Handlers. + There are several alternative strategies ranging from (1) + suspending/resuming a single handler, (2) suspending/resuming + all the handlers in a Reactor, and (3) suspending/resuming all + handlers controlled by a Thread_Manager. This very powerful + feature makes it simple to write ACE_Network_Services that can + control all their handlers in one fell swoop... + + * ace/Task: Added new accessors/mutators to get/set the + Thread_Manager and the Message_Queue associated with a Task. + This makes life easier and more abstract in subclasses and + elsewhere. + + * ace/Reactor: added an iterator to the ACE_Handler_Repository. + This makes it possible to implement the suspend_handlers() and + resume_handlers() very efficiently on both UNIX and Windows NT. + + * ace/Reactor: Added two new methods called suspend_handlers() and + resume_handlers(). These methods suspend and resume all the + active Event_Handlers in the Reactor in one fell swoop. + + * ace/Reactor.i (suspend_handler): Fixed a bug in the Reactor + where we were not factoring out the code for suspend_handler() + appropriately with respect to locking. + + * netsvcs/Logging/Server_Daemon/Thr_Logging_Handler: Enhanced the + threaded logging service so that all active threads can be + automatically suspended and resumed via the ACE_Service_Config + svc.conf file. + + * netsvcs/Logging/Server_Daemon/Logging_Handler.cpp: Rewrote the + ACE Logging service to use the new ACE_Strategy_Acceptor + implementation. This greatly reduced duplicate code. There's + almost nothing left in this directory save the actual service + itself! + + * netsvcs/Tokens: Rewrote the ACE Token service to use the new + ACE_Strategy_Acceptor implementation. This greatly reduced + duplicate code. There's almost nothing left in this directory + save the actual service itself! + + * netsvcs/Naming: Rewrote the ACE Naming service to use the new + ACE_Strategy_Acceptor implementation. This greatly reduced + duplicate code. There's almost nothing left in this directory + save the actual service itself! + +Sat Mar 16 20:02:08 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * netsvcs: Created a new subdirectory off of $WRAPPER_ROOT and put + all the ACE network services (e.g., Time, Logging, Naming, and + Tokens) into that directory. These services all instantiate the + new ACE_Strategy_Acceptor implementation, which greatly + simplifies their behavior and code. + + * ace/Acceptor: Made some enhancements to the + ACE_Strategy_Acceptor in order to make it more suitable for use + as a generic "Service" launcher. This class now defines common + behavior for all the ACE network services (e.g., Time, Logging, + Naming, and Tokens). + + * apps/Token_Server: Made the main Token_Server application be + dynamically linked if there's a valid svc.conf file. + + * apps/Name_Server/Name_Server: Made the Server_Test a + "well-behaved" service. Previously, it block in a private event + loop within Name_Server::run(), which was called by + Server_Test::init() when the service was linked dynamically. + This obviously doesn't work correctly since it means that we + can't dynamically link any other services after this one! The + new version is "event-loop" friendly since it uses the main + Service_Config::run_event_loop() method. + + * ACE-categories: Added a new emacs "outline" file that + illustrates how the filenames in $WRAPPER_ROOT/ace cluster into + class categories. Thanks to Chris Eich + and Alex V. Maclinovsky + for helping create this. + + * ace: Split ACE into two libraries: libACE and libACE_svcs. + libACE contains the "core" ACE components. libACE_svcs contains + the client-side layered services (e.g., naming service, token + service, etc.). There are two reasons for doing this: + + 1. It reduces the size of ACE for many common usecases (i.e., + most people aren't using the naming service or the token + service). Any future layered services in ACE will be placed + into the libACE_svcs library rather than libACE. + + 2. It works around annoying compiler bugs with lame compilers + like HP/UX C++. Now, if those compiles can't compile the + token service (which is very template intensive) it won't + affect the core ACE library components. This improves the + portability of ACE. + + * Added -lACE_svcs to the ./apps/{Token_Server,Name_Server} and + ./examples/{Tokens,Naming} Makefiles to account for the new + libraries. Note that no source code changes are required... + +Fri Mar 15 00:03:48 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * apps/Name_Server/server/Name_Handler.cpp (recv_request): Fixed + the same problem as occurred in Token_Handler (these both come + from the same source...). + + * apps/Token_Server/Token_Handler.cpp (recv_request): There was a + subtle bug in the Token_Handler that stems from my old code. + The line + + n = this->peer_.recv ((void *) (((char *) &this->token_request_) + + sizeof (ACE_UINT32)), + length); + + This should actually be: + + n = this->peer_.recv ((void *) (((char *) &this->token_request_) + + sizeof (ACE_UINT32)), + length - sizeof (ACE_UINT32)); + + since length was read already. The old way tried to read 4 + bytes too much. Thanks to Jesper for noticing this. + + * ace/Connector.cpp (connect_svc_handler): Modified the connector + so that it automatically calls the close () method of the + Svc_Handler when the connection fails abortively. This makes + the semantics the same for synchronous and asynchronous + connection invocation modes. Thanks to Irfan for insisting on + this! + + * apps/Token_Server/Token_Acceptor.cpp (handle_input): Changed + return type from int to ACE_HANDLE for NT compatibility. Thanks + to Jesper for this insight. + + * ace/OS.h: The defines for ACE_LACKS_MODE_MASKS (OS.h) were only defined + when !ACE_WIN32. This has been fixed. Thanks to Irfan for + spotting this too. + + * ace/OS.i (mmap): made a small change to ACE_OS::mmap to fix NT + portability problem (new variable added:nt_flags). Thanks to + Irfan for spotting this. + + * ace/Local_Tokens.h: Added #include "ace/Map_Manager.h" after + line 41 in Local_Tokens.h to allow ACE to compile correctly with + the horrid HP/UX compiler. Thanks to Neil Cohen for figuring + this out (what a trooper!). + + * ace/Local_Tokens.cpp (ACE_TPQ_Entry *): Replace + + return ACE_TSS::operator ACE_TPQ_Entry *(); + + with + + return (ACE_TPQ_Entry *) (*((ACE_TSS *) this)); + + to work around problems with MSVC++ 4.0 when the browse option + is enabled. Thanks to Kirk Sinnard <1764@mn.lawson.lawson.com> + for this fix. + + * ace/config-sunx86-sunc++-4.x.h: Swapped the lines + + // Compiler/platform supports SVR4 signal typedef. + //#define ACE_HAS_SVR4_SIGNAL_T + #define ACE_HAS_CONSISTENT_SIGNAL_PROTOTYPES + + to + + // Compiler/platform supports SVR4 signal typedef. + #define ACE_HAS_SVR4_SIGNAL_T + //#define ACE_HAS_CONSISTENT_SIGNAL_PROTOTYPES + + to avoid an error using ProWorks C++ 4.0.1 (w/ patches) which + blow up in the Signal.x stuff with a prototyping error. Thanks + to John P. Hearn for this recommendation. + + * ace/Shared_Memory.h: The conditional compilation wrapper was out + of date, so I renamed it. Thanks to Alex V Maclinovsky + for reporting this. + +Thu Mar 14 23:18:59 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Thread.h: There was a bug in the ACE_Thread class. I + attempted to make the class uninstantiable by making the + constructor private. However, the statement was: + + private: + Thread (void); + + which is not the definition of the ctor! The code compiled + since it thinks Thread is a member function. As a result, you + could instantiate a object of ACE_Thread class, but no longer... + Also added this to the !defined (ACE_HAS_THREADS) arm of the + conditional compilation. Thank to Sandeep Joshi + for noticing this. + + * ace/Log_Record.i (decode): Fixed a stupid typo where htonl + (this->length_) should have been htohl (this->length_)... + Thanks to Audun Tornquist for + noticing this. + +Tue Mar 12 14:51:39 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Name_Request_Reply.cpp (decode): Added ntohl and htonl calls + wherever data was being exchanged. + +Sat Mar 9 17:49:51 1996 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * ace/OS.i (cond_wait): Updated the Win32 implementation to + correspond precisely with the UNIX semantics where the mutex is + always reacquired even when errors occur. + +Mon Mar 4 23:03:37 1996 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * INSTALL: updated the win32 to describe building test + applications. + +Mon Mar 4 16:17:05 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Local_Name_Space.cpp (resolve): Fixed a small bug. The type + field in resolve was copying extraneous stuff (because of being + kept around as a wchar_t). So I added a new method to the class + ACE_NS_String called len() which simply returns len_. Using this + I can now do a strncpy of len bytes for type (instead of a + simple strcpy) and then null-terminate the string to remove the + garbage. + +Thu Feb 29 23:41:04 1996 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * ace/Token_Request_Reply.cpp: Fixed a byte-order bug which was + showing up on intel platforms. + + * ace/Remote_Tokens.cpp: Fixed a race condition in + ACE_TSS_Connection which was munging mt token server clients. + + * examples/Tokens/mutex/*: The Token Server example applications + now use ACE_Thread_Manager, which should make them portable to + Win32. + + * apps/Token_Server/Token_Server.cpp: The Token Server is now a + Service_Object which can be dynamically linked. + + * ace/OS.i: Win32 ACE_OS:: signal methods now return 0 instead of + -1. So, calls to signal code succeed, but do nothing useful. + +Thu Feb 29 20:38:32 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * apps/Logger/Server_Daemon/Server_Logger.cpp + (handle_logging_record): There was a typo where + ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES was incorrectly spelled. + This caused problems on HP/UX. Thanks to Neil Cohen for + finding this. + +Wed Feb 28 11:41:49 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Mem_Map.cpp: Fixed a nasty bug with Win32 memory mapping... + It turns out we need to be very careful when remapping a + previously mapped region if the MapViewOfFile we're trying to + establish *grows* beyond what was originally mapped with + CreateFileMapping(). The new scheme seems to work correctly + with both UNIX and Win32. + + * ace/OS.h: apparently when using MFC library functions it + is not possible to include windows.h. Instead, users + must include AFX.h. Therefore, I've modified OS.h to + include the following: + + #if !defined (__AFX_H__) + #include + #endif /* __AFX_H__ */ + + Thanks to Patty Genualdi (genualdp@agcs.com) for pointing this + out. + + * ace/Memory_Pool.cpp: Modified init_acquire() so that it calls + ACE_Mem_Map::open() rather than ACE_Mem_Map::map() the first + time. This ensures that the file is mapped correctly. + + * ace/Mem_Map: Added a new method called open() that creates/opens + a file without actually mapping it. + + * ace/SOCK_Dgram_Mcast.cpp (make_multicast_address): Added + new support for Windows NT. + + * ace/Memory_Pool: reimplemented ACE_MMAP_Memory_Pool so that uses + ACE_Mem_Map. This ensures that we can leverage all the work + that went into making ACE_Mem_Map work on Win32. + + * ace/Memory_Pool.cpp (map_file): Modified the code so that we + always unmap the file before trying to remap it. This avoids + problems with Win32... + + * ace/Mem_Map: Modified the implementation of ACE_Mem_Map so that + it takes advantage of the improved features in ACE_OS::mmap. + Also added new a method that returns the memory-mapped addr more + easily. + + * ace/OS: Modified the ACE_OS::mmap() method so that it is more + efficient for remapping files on Win32. + + * ace/OS.h: renamed the type QWORD to ACE_QWORD to avoid namespace + pollution. Thanks to Patty Genualdi (genualdp@agcs.com) for + pointing this out. + + * ace/OS.h: Changed the value of the SIGPIPE emulation for Win32 + to match the UNIX value in order to avoid problems. Thanks to + Jesper for noticing this. + + * apps/Token_Server: Fixed misuse of int for ACE_HANDLE in various + places. Thanks to Jesper for noticing this. + + * Renamed the ./tests directory to ./examples to make way for the + new ACE regression tests. These tests will go into the new + ./tests directory. + + * ace/Mem_Map.cpp: Added a destructor and a close() method that + closes down the file HANDLE if we allocated it. This is useful + to prevent descriptor leaks. Thanks to Irfan for suggesting + this. + + * ace: Made a number of changes to remove unreferenced parameters + from ACE methods. This eliminates zillions of warning from the + HP/UX compiler. Thanks to Neil Cohen for reporting this. + + * ace/Local_Name_Space.cpp (resolve): revised some code to work + around bugs with the HP/UX compiler... Thanks to Neil Cohen for + this workaround. + +Tue Feb 27 21:06:09 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS.i: The Win32 CreateFile does not handle the return you + would expect when the file exists. You would expect EEXISTS (17 + in UNIX) but the GetLastError is set to 80 + (ERROR_FILE_EXISTS). Therefore, I changed ACE_OS::open to map + ERROR_FILE_EXISTS onto EEXIST. This is only a partial solution, + however. There must be a better way to handle this! + + * ace/Mem_Map.cpp (ACE_Mem_Map): Fixed a bug with one of the + ACE_Mem_Map destructors that was causing problems due to the + fact that base_addr_ wasn't being initialized to 0. Thanks to + Karlheinz for noticing this. + + * ace/Signal.i: signals on AIX cannot use sigprocmask() in any + multithreaded programs. Instead, the call + ACE_OS::thr_sigsetmask() should be used since it is used to + update the thread signal mask. This comes up only in the + Sig_Guard constructor and destructor. Therefore, I #ifdef the + call under the ACE_MT_SAFE macro, using sigprocmask() in the + #else case. Thanks to Chris Lahey for reporting this. + + * tests: removed all uses of ACE_OS::join (0, ....) in ACE and + replaced them with ACE_Thread_Manager::wait() calls. This + ensures that the ACE code is portable to Win32 and POSIX + pthreads! + + * ace/Dynamic_Service.cpp: Added a #include of + "ace/Service_Config.h" to work around problems with HP/UX. + Thanks to John Morey for reporting this. + +Sun Feb 25 12:10:38 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * apps/Token_Server: changed the name token_server.cpp to main.cpp + to avoid a name clash on Win32... + + * man/man3: updated all the ACE manual pages to reflect the + most recent changes. + + * ace/OS.i: Implemented the cond_timedwait() method correctly in + ACE_OS. This method should now do the right thing with respect + to blocking, polling, and timewaits for Win32. + + * ace/OS.i: Modified the Win32 implementation of all the + socket-related wrappers in ACE_OS. The new implementation very + cleverly sets errno to the result of WSAGetLastError() if a + socket-related call fails. Since all of the WinSock errors are + mapped into their equivalent UNIX errno values this enables + socket applications to work portably for UNIX and Win32. + + * ace/Malloc_T.cpp (ACE_Malloc): Improved error reporting for + cases where the Memory_Pool::init_acquire() fails (e.g., if the + backing store was already created by another user and we don't + have permission to access it...). + + * ace/Task: modified Task.h so that it is no longer necessary to + write #include "ace/Synch_T.h" in order to use ACE_MT_SYNCH, + etc. + + * ace/SOCK.cpp (DllMain): Added a clever "Schwartz counter" to + make sure that the WinSock library is correctly initialized, + even if we're not using ACE as a DLL!!! + + * tests/Mem_Map/file-reverse: got the file reverse test program + working. The ACE_Mem_Map class should now be ported to Win32... + + * ace/OS.i (open): Changed how the O_CREAT flag was handled + to give it UNIX semantics... + +Sat Feb 24 12:55:27 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/UPIPE_Stream.cpp (recv): Fixed a signed/unsigned mismatch. + There should be no more mismatches in ACE... + + * ace/Name_Proxy.cpp (recv_reply): Fixed a signed/unsigned + mismatch. + + * ace/Message_Block.cpp (copy): Fixed a signed/unsigned mismatch. + + * ace/INET_Addr.cpp (get_host_name): Changed the type of the + hostnamelen parameter from int to size_t to be more "abstract." + This will also prevent a warning from the MSVC++ compiler. + + * apps/Logger/Client_Daemon/Client_Logger.i: Fixed a braino with + network byteoder that was causing Client_Logger::send() to fail + on INTEL boxes. Thanks to Bryon G. Rigg + for finding this. + +Fri Feb 23 01:59:34 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS.i: Enhanced mmap() to give the same semantics as UNIX + mmap() by using MapViewOfFileEx(). Also greatly improved the + UNIX emulation capabilities so that mmap() now has the same API + for UNIX and Win32. + + * ace/Time_Value: Added functions to constructor and conversion + from/to Win32 FILETIME. This enables us to reuse those 100ns + conversions in ACE_Profile_Timer. + + * ace/Time_Value: Fixed a problem with these: + + // True if tv1 < tv2. + + INLINE int + operator < (const ACE_Time_Value &tv1, + const ACE_Time_Value &tv2) + { + ACE_TRACE ("operator <"); + return tv2 > tv1; + } + + This should be "tv2 >= tv1". Same problem was fixed with + operator <=. + + * ace/Profile_Timer.i, fixed the following: + + this->end_time_ = ACE_OS::gettimeofday (); + this->last_time_ = this->end_time_; + this->last_usage_ = this->end_usage_; + ACE_OS::getrusage (RUSAGE_SELF, &this->end_usage_); + + This will overwrite end_time before it is saved to + last_time... + + * tests/Threads: Added Jesper's test for readers/writers locks. + The test adds a number of reader and writer threads. When + active, writers modify a shared variable and verify that only + one writer and no readers are active. When active, readers + check that no writers are active and that the shared data is + never changed. The test passes for different ratios of + readers/writers, and debug output shows that several readers are + allowed simultaneously. Or, in other words, we have an + indication that it should work. + + * ace/OS.i: Added Win32 implementations of getpid(), fork(), + lseek(), dup(), cond_timedwait (), getrusage () + + * ace/OS.i: Modified all the ACE_OS::str* routines so that they no + longer do an ACE_OSCALL_RETURN. This can lead to weird bugs... + Thanks to Jesper for noticing this. + + * ace/config-sunos4-sun4.1.4.h: Added a new config file that + should work with SunOS 4.x... Also added support for SunOS + 4.1.4. Thanks to Mick Adams (eeimas@eei.ericsson.se) for help + with this. + +Thu Feb 22 18:58:36 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * tests/Naming/Client/Name_Service.h (ACE_Service_Object): + Modified test application to make use of ACE_Dynamic_Service. + + * ace/Dynamic_Service.h: Added a new class called Dynamic_Service + which provides a general interface to add and retrieve arbitrary + things into the ACE service repository. + + * apps/Name_Server/README: Rearranged files so that Name_Server + and Name_Handler are now contained in the server directory under + apps and are no longer under /ace. Also, the Dump_Restore + directory has been moved under /tests/Naming. + +Thu Feb 22 01:56:46 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/INET_Addr.cpp (set): Fixed a byteorder bug in ACE_INET_Addr + that was causing problems when ACE was used on Win32 running on + Intel platforms... + + * ace/Mem_Map.cpp (map_it): Fixed ACE_Mem_Map so that it will work + correctly on Win32. + + * ace/SOCK_Stream.i: Changed the implementation of the Win32 + versions of send() and recv() so that they will never use the + read() and write() calls. This works around limitations with + Win32, which can't do a ReadFile() or WriteFile() + *synchronously* with a SOCKET. + + * Changed all occurrences of read (0, ...) to read (ACE_STDIN, + ...) and all occurrences of write (1, ...) to write + (ACE_STDOUT, ...) in order to be compatible across UNIX and + Win32. + + * tests/ASX/Event_Server: Fixed up all the socket I/O calls so + that they use the WinSock send()/recv() methods rather than + ReadFile and WriteFile... + + * ace/OS.i: Updated open() to correctly emulated UNIX open() + semantics on Win32. + + * ace/OS.cpp (thr_exit): Added support to the NT port so that + thr_exit() doesn't endup doing multiple deletions of the same + object. Thanks to Karlheinz for this fix. + + * ace/OS.h: Moved the location of ACE_MAXCLIENTIDLEN so that + MAXHOSTNAMELEN would be correctly visible for NT. + + * ace/Reactor.cpp: Added a temporary fix for the fact that + writev() and readv() don't work correctly yet on NT. The + solution is to replace write() with two writes() and readv() + with two reads() for the Reactor's notification scheme. A + better solution should be forthcoming. + + * ace/Reactor.cpp: Made sure to initialize the timer_queue_ to 0 + in the constructors so that the Reactor's destructor can avoid + crashing horribly if the constructor fails. Thanks to Karlheinz + for pointing out the need for this. + + * ace/SOCK.cpp: Added support for WSAStartup for using WinSock + within the ACE_SOCK class. + +Wed Feb 21 21:05:55 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/ACE.cpp (bind_port): Made a quick fix to work around the + fact that NT doesn't set errno... + + * ace/OS.i (mmap): Fixed a bug in mmap for the NT port. It should + return MAP_FAILED on error rather than 0 to be equivalent to the + UNIX version. Thanks to Irfan for spotting this. + +Mon Feb 19 00:31:42 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Typed_SV_Message.i (ACE_Typed_SV_Message): Modified the + constructor calls so that length_ and max_size_ are correctly + set when created. Thanks to Alexandre Karev + for reporting this. + + * ace/SV_Message_Queue.i (remove): fixed bug in + ACE_SV_Message_Queue::remove method where `internal_id_' member + was modified *BEFORE* it was used the last time in + ACE_SV_Message_Queue::control. Thanks to Alexandre Karev + for reporting this. + + * ace/Typed_SV_Message.i (length): Fixed a minor typo that caused + a bigger bug ;-). Thanks to Alexandre Karev + for reporting this. + + * ace/OS.h: Added new macros that allow programs to portably + access stdin, stdout, and stderr HANDLEs on Win32 and UNIX as + follows: + + #if defined (ACE_WIN32) + #define ACE_STDIN GetStdHandle (STD_INPUT_HANDLE) + #define ACE_STDOUT GetStdHandle (STD_OUTPUT_HANDLE) + #define ACE_STDERR GetStdHandle (STD_ERROR_HANDLE) + #else + #define ACE_STDIN 0 + #define ACE_STDOUT 1 + #define ACE_STDERR 2 + #endif /* ACE_WIN32 */ + + * ace/INET_Addr.i: modified the return value of get_port_number so + that it returns the value in host byte order. This has actually + been a latent bug in ACE for years, but it only surfaced + recently after porting to NT on the Intel instruction set (which + is "little-endian"). + + * tests/ASX/Event_Server: Merged in the latest changes to the + Event_Server tests, which enable it to compile on Windows NT. + Now, I just need to get it working on NT... + + * Updated all of ACE to use the new ACE_ASSERT rather than assert. + + * ace/Assert.h: Added a new file and a new macro called + ACE_ASSERT. This uses the ACE_Log_Msg Singleton to provide a + more consistent means to do assertions. Thanks to Alexandre + Karev for suggesting this. + + * ace/Log_Msg.cpp (log): added for method ACE_Log_Msg::log lines + to skip the `sprintf' part for %N - file name and %l - line + number format specifiers. Thanks to Alexandre Karev + for reporting this. + + * Remote_Name_Space: Removed an initalizer to ACE_WString that was + driving the HP/UX compiler nuts. + +Sun Feb 18 18:11:22 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Synch.h (ACE_Null_Condition_Mutex): Added a missing body to + the wait() method. Thanks to Byron Riggs for noticing this. + +Sat Feb 17 19:10:06 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * tests/Naming/README (client): Added description for new + features, including support for list_values and list_types. Also + added a small description about test programs using DLL. + + * ace/Name_Request_Reply.cpp (decode): Fixed a small bug in + ACE_Name_Request::decode. type_ was not null terminated causing + some garbage to be returned. + +Thu Feb 15 14:57:06 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Remote_Name_Space.cpp: Changed names of some parameters to + comply with ACE syntax. + +Wed Feb 14 13:36:31 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Local_Name_Space.cpp (resolve): Type support has been added + to Name_Server. A new class called ACE_NS_Internal was created to + keep value and type information. + +Fri Feb 9 17:12:00 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * "Officially" released ACE 4.0 + + * ace/OS.i (sema_post): Fixed a bug in the NT port. + + #elif defined (ACE_HAS_WTHREADS) + return ::ReleaseSemaphore (*s, 1, 0); + #endif /* ACE_HAS_STHREADS */ + + This returns 1 for success, and disturbs cond_broadcast... + This was replaced by: + + #elif defined (ACE_HAS_WTHREADS) + return ::ReleaseSemaphore (*s, 1, 0) ? 0 : -1; + #endif /* ACE_HAS_STHREADS */ + + Thanks to Jesper S. M|ller (stophph@diku.dk) for this. + + * ace/OS.i (cond_init): Fixed a bug in the NT condition synch + code, as the initial count of the semaphore was 1. This gives an + inconsistent condition: The first waiter went straight through... + Change in ACE_OS::cond_init: + + if (ACE_OS::sema_init (&cv->sema_, 0, type, name, arg) != 0) + return -1; + + Thanks to Jesper S. M|ller (stophph@diku.dk) for this. + + * ace/Singleton.cpp: Fixed a stupid bug that was caused by failure + to #include "ace/Synch_T.h"... Thanks to Neil Cohen and Byron + Riggs for giving me insights on what the problem was. ACE now + compiles on HP/UX. + +Fri Feb 9 11:07:04 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * tests/Naming/server/Server_Test.cpp (init): Modified server + tests to dynamically link Naming Services. Both client and + server tests now make use of the ACE dynamic linking mechanisms. + + * ace/Local_Name_Space.cpp: Added list_values() to Name + Server. The functionality is very similar to list_names (returns + list of values that match a pattern). + + * tests/Naming/client/Client_Test.cpp (bind): Replaced all uses of + cerr and cout with ACE_ERROR, ACE_ERROR_RETURN, and ACE_DEBUG. + Split the file Client_Test.cpp into two files -- Client_Test.cpp + and Name_Service.cpp (similarly .h file) each containing the + corresponding class. Modified svc.conf to work with the changes. + +Thu Feb 8 02:05:26 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Log_Msg.cpp (log): Enhanced the Log_Msg class so that it + supports "nested" calls via %r. If SILENT mode enabled, nested + outputs will enclosed in {..} brackets in thread-specific + storage. Thanks to Alexandre Karev for + suggesting this. + + * ace/Synch: Added a new class called ACE_Null_Condition_Mutex. + This is necessary to fix bugs with stupid compilers... Thanks + to Zusman Mark for reporting this. + + * tests/Naming/client: made a first pass implementation of a + client application that dynamically links in a Naming_Context + based on information provided by the svc.conf file. + + * ace/Name_Options: Fixed yet more problems with dynamic memory + management. The old version didn't make a copy of the strings + it was passed and this caused major problems. + + * ace: Fixed a whole slew of problems with the ACE Name Server + stuff that arose from inconsistent use of const char * vs. char + *... + +Wed Feb 7 00:58:45 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/CORBA_Handler.cpp (ACE_MT_CORBA_Handler): Added new + enhancements to ACE_MT_CORBA_Handler to make it work correctly + with Windows NT. Thanks to Irfan for making these changes. + + * ace/Connector.cpp (fini): Make another workaround for bugs with + MSVC++ 2.0... + + * ace/SPIPE_Connector.cpp (connect): Added a call to ACE_CLR_BITS + (flags, O_CREAT) to make darn sure that the O_CREAT flag is not + set. Thanks to Chris Cleeland for suggesting this. + +Tue Feb 6 01:40:29 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS.h: added a new prototype to OS.h that should help with + portability to nasty platforms with broken rand_r() definitions. + Thanks to Aurelio Nocerino + for suggesting this. + + * Local_Tokens: Changed all uses of enumerals MAXTOKENNAMELEN and + MAXCLIENTIDLEN to symbol #defines ACE_MAXTOKENNAMELEN and + ACE_MAXCLIENTIDLEN. This works around bugs with HP/UX. + Thanks to Neil Cohen for reporting this problem. + + * ChangeLog: split the ChangeLog files into 4 separate files -- + one for '96, '95, '94', and '93. Hard to believe I've been + working on this stuff for so long! + + * ace/OS: Fixed the use of ::memset to replace sizeof buffer with + sizeof (ACE_SERVENT_DATA) and sizeof (ACE_HOSTENT_DATA). This + fixes bugs that surfaced on AIX. Thanks to Chris Lahey for + finding these. + + * ace/SPIPE_Addr.cpp (ACE_SPIPE_Addr): Fixed a bug in + SPIPE_Addr::SPIPE_Addr(const SPIPE_Addr&). What happens is that + when the size is calculated it does not take into account the + required zero byte at the end of the rendezvous_ member. Thanks + to Chris Cleeland for reporting this. + + * ace/Local_Tokens: Had to move all ACE_Token_Proxy methods from + Local_Tokens.i to Local_Tokens.cpp and remove INLINE - otherwise + gcc reported them as undefined methods during linkage stage. + Thanks to Zusman Mark for + reporting this. + + * ace: Changed ACE_Name_Request_Reply::LAST to + ACE_Name_Request_Reply::MAX_ENUM to avoid problems with name + conflicts on OSF/1. Thanks to Eshel Liran + for suggesting this. + + * ace/Synch_T: Fix all definitions of ACE_Atomic_Ops so that they + compile correctly on platforms that lack threads! Thanks to + Alexandre Karev for noticing this. + + * include/makeinclude: Added a new config file from Bryon G. Rigg + , which should allow ACE to build on + Linux. + + * ace/Remote_Tokens.cpp: Moved ACE_TSS_Connection to + Remote_Tokens.h to avoid problems with AIX. Thanks to the + ever-vigilant Chris Lahey for reporting this. + +Mon Feb 5 23:34:42 1996 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * Added CORBA_Ref.h which contains the new class ACE_CORBA_Ref. + This class provides a nice wrapper for making the use of Orbix + object references more transparent. This is done by automating + the release and duplicate calls. + +Mon Feb 5 15:43:17 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace: added Prashant's latest changes to the Name_Handler*, + Naming_Context*, and Remote_Name_Space*. These changes make it + possible to retrieve lists of values based on a pattern, which + can be a regular expression. + + * Moved the apps/Name_Server/Client-Server tests into tests/Naming + and most of the apps/Token_Server/* tests into tests/Tokens to + conform to Karlheinz's testing style. + + * ace: Modified a number of files in ACE to make it compile + correctly with MSVC++ 2.0. + +Sun Feb 4 23:58:43 1996 Douglas C. Schmidt (schmidt@mambo.cs.wustl.edu) + + * ace/Reactor: Generalized ACE_Null_Callback to work correctly + with Windows NT (which lacks pipes). The new design uses the + ACE socket wrappers for NT. It requires very few changes to the + code to handle NT now! Also changed the name to + ACE_Notification_Handler, which is more descriptive. + +Sun Feb 4 14:47:50 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Remote_Tokens.cpp: Reworked ACE_Singleton to avoid + portability problems on compilers like GCC. + +Thu Feb 1 12:47:46 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Remote_Tokens.cpp: Generalized the parameters passed into + ACE_Singleton so they would compile on HP/UX and other platforms + that lack threads. Thanks to Neil Cohen for noticing the + problem. + +Wed Jan 31 22:49:13 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace: Modified a number of minor things in ACE to get it to + compile successfully with Windows NT MSVC++ 4.0. Updated the + INSTALL file to explain this process better... + +Tue Jan 30 01:12:07 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/CORBA_Handler.cpp: changed things so that no diagonistic + messages are printed. + + * Regenerated all the ACE manual pages to bring them up to date + with the recent changes. + + * ace/Malloc.h: Modified the ACE_Malloc header file so that it + works correctly when ACE_MALLOC_STATS is enabled. Thanks to + Alexandre Karev for reporting this. + + * ace/OS.cpp (mutex_lock_cleanup): removed the leading & before + p_lock. Thanks to Chris Lahey for noticing this. + + * ace: Added the new ACE_Singleton class. This class uses the + Adapter pattern to turn ordinary classes into Singletons + optimized with the Double-Check pattern. + + * Added Tim's latest Token Server changes (which include support + for local and remote mutexes and readers/writer locks) and + Prashant's latest Name Server changes (which allows the contents + of a Name Server to be dumped and restored to/from an ASCII + file). + +Mon Jan 29 02:22:23 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Handle_Set: Changed MAX_SIZE and WORD_SIZE to MAXSIZE and + WORDSIZE to avoid name collisions with HP/UX. Thanks to Byron + Rigg for suggesting this. + + * ace/Time_Value.h: Added a new config symbol ACE_HAS_SVR4_TIME to + differentiate between UNIX platforms that support "POSIX_TIME" + (i.e., timespec_t) and those that support "SVR4_TIME" (i.e., + timestruc_t). This is necessary to work around HP/UX... Thanks + to Byron Rigg for suggesting + this. + + * ace/config-hpux-10.x.h: config-hpux.h has now been renamed to + config-hpux-10.x.h and config-hpux-9.x.h. Thanks to Byron Rigg + for suggesting this. + + * ace/Synch_T: Added a new method called ts_get() and made both + the operator-> and operator TYPE * call this. I hope this will + fix a bug with HP/UX reported by Neil Cohen... + + * ace/OS.i (dlclose): Added Win32 support for dlclose(). Thanks + to Todd L. Montgomery for pointing the way + here... + + * ace: Split off the old class ACE_Dynamically_Allocated, renamed + it ACE_Dynamic, put it in a separate file called Dynamic.*. + This is necessary to solve nasty multiple definition problems + with compilers that require the source of template. + + * ace/Synch_T: moved + + template TYPE * + ACE_TSS::make_TSS_TYPE (void) const + { + return new TYPE; + } + + out from condition compilation block + + #if (defined (ACE_HAS_THREADS) && defined(ACE_HAS_THREAD_SPECIFIC_STORAGE)) + + in file Synch_T.cpp. This class member called in many other + places regardless ACE_HAS_THREADS and + ACE_HAS_THREAD_SPECIFIC_STORAGE defined or not... + + * ace/Name_Handler.cpp: Changed the use of the "inherited" typedef + to fully expand to ACE_Svc_Handler. This is necessary to workaround bugs with AIX. + Thanks to Chris Lahey for reporting this. + + * tests and apps: Fixed an odd problem that only surfaced recently + with GNU G++. Apparently, it doesn't like function-style casts + of the form ACE_SignalHandler (foo), but will accept + (ACE_SignalHandler) foo. Since both approaches are equally good + for what I'm doing, I've updated all the code in ACE to be more + portable. + +Sun Jan 28 12:24:58 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * tests/Shared_Malloc/test_malloc.cpp (spawn): when forming + argv[] for execv, moved + + argv[ ... ] = Options::instance ()->debug () ? "-d" : ""; + + to the end of the vector just before terminator. This will + allow to pass rest of arguments to exec if -d switch not + specified. Thanks to Alexandre Karev + for reporting this. + + * tests/Shared_Malloc/Malloc.cpp: To avoid conflict with + ACE_DEFAULT_SEM_KEY in OS.h changed SEMA_KEY value in + tests/Shared_Malloc/Malloc.cpp to ACE_DEFAULT_SEM_KEY + 1. + Thanks to Alexandre Karev for reporting + this. + + * ace/SV_Semaphore_Complex.i: Changed all arguments in calls like + + this->acquire( n+2 ) + and + this->tryacquire( n+2 ) + to + this->acquire( n ) + and + this->tryacquire( n ) + . + Since the semaphore number is incremented by 2 in + SV_Semaphore_Complex::acquire + and + SV_Semaphore_Complex::tryacquire + + when SV_Semaphore_Simple::(acquire/tryacquire) is called. + Thanks to Alexandre Karev for pointing + this out. + +Sat Jan 27 16:14:27 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Read_Buffer: Added a new component that efficiently reads in + an artibrarily large buffer from a file up to an including a + termination character. Also performs search/replace on single + occurrences a character in the buffer using the priniciples of + Integrated Layer Processing. + +Fri Jan 26 12:01:06 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Thread_Manager: Made a small change to workaround the use of + a struct type for thread_t and hthread_t in HP/UX. Thanks to + Bryon Rigg for noticing this. + +Thu Jan 25 19:54:01 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Svc_Handler: Added some minor changes to account for + limitations with GNU G++. I think the new implementation will + be portable across all C++ platforms. + + * ace/SV_Semaphore_*: Widened the interface of SV_Semaphore* + classes to include a flags parameter. This can be used to pass + in SEM_UNDO, which is important in many applications. Thanks to + Andrew Gilbert for suggesting this. + + * ace/Synch_T.cpp: We are forced to "cast away const" inside of of + the ACE_TSS const methods in order to make the ACE_Guard work. + The right thing to do would be to make the lock "mutable" but + that's hopelessly non-portable. + +Thu Jan 25 14:34:12 1996 Douglas C. Schmidt (schmidt@merengue.cs.wustl.edu) + + * ace/Log_Msg: Fixed a minor bug in ACE_Log_Msg that kept + resetting the restart and iostream value no matter what we'd set + it to before. Thanks to Prashant for finding this. + + * bin: Fixed up the Makefile process for the clone program. Now + it builds without having to depend on ACE. Thanks to Brad Brown + (bbrown@rdxsunhost.aud.alcatel.com) for suggesting this. + + * ace/Synch: Modified ACE_Condition*.remove so that cond_destroy() + is called in a loop if the condition variable is BUSY. This + avoids a condition where a condition is signaled and because of + some timing problem, the thread that is to be signaled has + called the cond_wait routine after the signal call. Since the + condition signal is not queued in any way, deadlock occurs + unless this loop is used. Thanks to Chris Lahey for pointing + this out. + + * ace/CORBA_Handler: Made all the methods in ACE_CORBA_Handler + private to make sure that users don't inherit from this class! + Instead, the ACE_MT_CORBA_HAndler and ACE_ST_CORBA_Handler + should be used as Singletons. + + * ace/CORBA_Handler: Added new support for Orbix on Windows + NT. This requires clever use of macros in order to handle + inherent differences between generated code. + + * ace/Svc_Handler: Added a clever idiom that transparently checks + if we were allocated dynamically. This information is used by + the method to decide if we need to delete ... + The idiom is based on a paper by Michael van Rooyen + (mrooyen@cellnet.co.uk) that appeared in the April '96 issue of + the C++ Report. We've spruced it up to work correctly in + multi-threaded programs by using our ACE_TSS class. + + * ace/config-win32-msvc4.0.h (ACE_LACKS_RECVMSG): Fixed a typo + in the MSVC++ config files. + +Thu Jan 25 02:59:22 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Finally got the frigging library built on SGI. This was a chore + due to compiler bugs, but at least it's another datapoint for + successful cross-platform building... + +Wed Jan 24 00:10:29 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Time_Value.cpp (operator-=): Changed operator += and + operator -= to use const ACE_Time_Value & rather than + ACE_Time_Value &. Thanks to Alex V Maclinvosky for noticing + this. In addition, also changed *all* ACE_Time_Value parameters + to be const ACE_Time_Value &. This should reduce the number of + excess constructors called... + + * ace/OS: Added Chris Lahey's latest changes that introduce POSIX + pthread cancellation cleanup handlers. Also added an herror() + function that is comparable to perror(). + + * ace/OS: (thr_join): Added a new version of thr_join() which + works for Windows NT. Windows NT requires a HANDLE, which is + fundamentally incompatible with other things... + + * ace/Thread_Manager: added two new methods that return the + ACE_Thread_Descriptor corresponding to either a thr_id or a + thr_handle. + + * ace/Thread_Manager: Made the spawn() interface compatible with + the other spawn() interfaces in ACE_OS and ACE_Thread by adding + the hthread_t type. + + * ace/Log_Msg.cpp (log): Fixed things up so that we can now print + out the thread id for all versions of threads! + + * ace/OS: Added a new overloaded version of ACE_OS::thr_self() + that returns the "kernel" thread id. This is necessary on + systems like NT and AIX, which separate kernel thread ids from + user thread ids. Thanks to Chris Lahey for suggesting this. + +Tue Jan 23 01:17:23 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS.i (sigwait): Changed the parameter of sigwait() from + const sigset * to sigset *. Thanks to Neil Cohen for chasing + this down on SunOS 5.5.... + + * ace/Malloc_T.cpp: Fixed a typo in bind() whereby + the test if (duplicates == 0 || this->shared_find (name) != 0) + should be if (duplicates == 0 && this->shared_find (name) != 0). + Thanks to the ever vigilant Alexandre Karev + for reporting this. + + * tests: Fixed all test programs that previously used the "execl" + family of system calls to use the "execv" family instead. + + * ace/OS: Added support for the "execv" family of exec() system + calls. Unlike the "execl" family, these calls are easy to + support since they don't require variadic arguments. I've added + the hooks for the "execl" family, as well, but haven't actually + implemented them yet. + + * ace/Memory_Pool.cpp (ACE_Shared_Memory_Pool): Fixed a bug that + was tickled when pool_name == 0. Thanks to Alexandre Karev + for reporting this. + + * ace/OS.h: removed FD_SETSIZE from the ACE_WIN32 stuff since this + is defined in winsock.h. + + * ace/OS.cpp (ACE_Spawn_Args): Added "f" to the parameter list. + + * ace/CORBA_Handler: Added a new macro called CORBA_T that masks + the incompatibilities between the version of Orbix on NT and on + Solaris. + + * ace/OS.h: Added support for compilers (like NT) that don't + support "mode masks" (these are used to give symbolic names for + file creation modes passed to open() and creat(). + + * ace/SString.cpp: Added Tim's new copy constructor code for + SString.cpp. This doesn't appear to be strictly necessary , but + it is more explicit and therefore it useful. + + * ace/Map_Manager.cpp: Fixed a bug in Map_Manager that was failing + to call the placement new operator for every element in the map + that was dynamically created by the allocator(). + + * ace/Synch_T: Added Tim's new ACE_TSS implementation. This + version is more flexible than the old one. + +Mon Jan 22 00:03:24 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Time_Value.h: changed a few minor things to get this + compiling again on NT. Thanks to Irfan for helping with this. + + * ace/Synch_Options: Changed all the "accessor" methods to be + const member functions at the request of Irfan. I just know + this is going to cause const cancer... ;-) + + * ace/Acceptor and Connector: Changed all parameters that take + ACE_Synch_Options & to take const ACE_Synch_Options & at the + request of Irfan. + + * ace/OS.i (uname): Added rudimentary support for the uname() + function for Windows NT. If anyone has suggestions on how to + fill in all these fields portably please let me know! + + * ace/Connector.h: Changed a stray -1 to ACE_INVALID_HANDLE. + Thanks to Irfan for noticing this. + + * ace/Profile_Timer.h: Added the keyword "public" to handle one + arm of the conditional compilation that is only exercised on + NT... Thanks to Irfan for noticing this. + + * ace/OS.i (mutex_init): Removed the call to + pthread_mutexattr_setkind_np() it isn't in the final POSIX + standard. + + * ace/Reactor.cpp (unbind): Removed the ACE_MAX3 template function + from OS.h and inlined its only use in the Reactor. This was + causing problems with some C++ compilers. Thanks to Mark Zusman + for reporting this. + + * ace/OS.i: Fixed a number of omitted return results in + gettimeofday() and ctime_r() that were masked by the + ACE_OSCALL_RETURN macros. Thanks to Mark Zusman + for reporting these. + + * ace/config-linux.h: Added new symbolic constants to handle the + fact that Linux seems to lack recvmsg(), sendmsg(), msync(), and + madvise(). Thanks to Neil Cohen for noticing this. + + * include/makeinclude: Fixed all the *-orbix.GNU files to use + $(ORBIX_ROOT)/lib rather than $(ORBIX_ROOT)/ace. Thanks to + Pramod Kumar Singh for reporting + this. + + * ace/config*.h: Changed all typos of the form ACE_HAS_SVSV_IPC to + ACE_HAS_SYSV_IPC. Thanks to Alexandre Karev + for reporting this! + + * ace/OS: Changed the order of parameters passed to thr_create() + to be consistent with all the spawn() and spawn_n() usages in + ACE. Thanks to Chris Lahey for pointing this out. + +Sun Jan 21 15:06:15 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace: Added a new "priority" parameter to the spawn() and + spawn_n() methods in ACE_Thread and ACE_Thread_Manager. This + allows us to pass the priority on down to thr_create(). Thanks + to Chris Lahey for pointing this out. Note that this change + required reordering the parameters so that the stack and + stack_size parameters now come last for these methods. Since + those are not likely to change much this is a good place to put + them (i.e., at the end). + + * ace/Thread.i (spawn_n): Added a new overloaded spawn_n() method + that accepts an array of thread_t's to be filled in. This is + useful if you want to know the thread IDs of any threads + created. + + * Changed ACE_OS::signal() to ACE_Sig_Action across all of ACE to + be portable to pthreads implementations. Thanks to Chris Lahey + for pointing this out. + + * ace/OS: Added a new set of OS C++ wrappers for POSIX pthread + cancellation routines. Thanks to Chris Lahey for these. + + * ace/Thread: Added a new set of ACE C++ wrappers for POSIX + pthread cancellation routines. Thanks to Chris Lahey for + these. + + * ace/Map_Manager: Revised the Map_Manager::bind method. This has + now been split into bind() and rebind() methods. The bind() + method is very simple -- if you try to bind() to something that + already exists you fail. The rebind() method allows you to + atomically update existing values in a map. It also gives you + back the existing values so that you can delete them if + necessary. The Local_Name_Space::bind() and rebind() methods + have been updated to use this new interface. + + * ace/Malloc_T.cpp (find): Fixed a typo -- find() should have set + its pointer parameter to node->pointer_, rather than + node->name_! This bug was revealed during testing of the ACE + Name Server. + + * ace/Local_Name_Space.cpp: Fixed bugs with computation of the + size of ACE_NS_Strings -- they needed to count the wchar_t's + correctly, along with several other minor fixes. These were + revealed during testing of the ACE Name Server. + + * ace/SString.cpp: Fixed several bugs that prevented the + assignment operators from working correctly. These were + revealed during testing of the ACE Name Server. + +Sat Jan 20 08:33:54 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Local_Name_Space.cpp (shared_bind): The args to to the + NS_String constructors were not in the correct order: + + wchar_t *value_rep = (wchar_t *) (ptr); + wchar_t *name_rep = (wchar_t *) (ptr + name_len); + ACE_NS_String ext_id (name.fast_rep (), name_rep, name_len); + ACE_NS_String int_id (value.fast_rep (), value_rep, value_len); + + They should be: + + ACE_NS_String ext_id (name_rep, name.fast_rep (), name_len); + ACE_NS_String int_id (value_rep, value.fast_rep (), value_len); + + Thanks to Irfan for noticing this. + + * ace/OS.h: defined the following in ACE_OS: + + #define MS_ASYNC 0 + #define MS_SYNC 0 + #define MS_INVALIDATE 0 + + under NT so that calls to mmap will port transparently. Thanks + to Irfan for suggesting this. + +Thu Jan 18 16:25:16 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace: Added a new symbol that indicates if the platform supports + the new BSD sin_len field of inet_addr. + + * ace/OS: added new support for AIX gethostbyaddr_r(), + gethostbyname_r(), and getservbyname_r(). This fixes some + problems caused by improper choice of buffer size. Also changed + the INET_Addr.cpp file to use these new changes. Thanks to + Chris Lahey for recommending these changes. + +Wed Jan 17 01:10:48 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS.i (printf): the ACE_OS::printf() function did not work. + Needed to call vprintf() internally, not printf. Thanks to + Chris Lahey for pointing this out. + + * Released version 4.0. + + * include/makeinclude: added the -lgen library to all the + platform_sunos5.*.GNU files. + + * ace/Memory_Pool.cpp: removed the INLINE macros in Memory_Pool.cpp. + Thanks to Alexandre Karev (karev@vxcern.cern.ch) for noticing + this! + + * ace/Malloc_T.cpp: moved the comment "Ce n'est pas une catst" + outside of the macro ACE_NEW_RETURN. The prepocessor truncates + the macro expansion when it encounters the comment. Thanks to + Greg Baker for pointing + this out. + + * ace/Reactor.cpp (close): added "return 0" at the end of the + close member function. The function is prototyped to return an + int and the compiler expects a return outside of the if clause. + Thanks to Greg Baker for + pointing this out. + + * ace/Stack.cpp (free_all_nodes): Removed a spurious ACE_OS that + was stuck on the front of ::delete. Thanks to Greg Baker + for pointing this out. + + * ace/OS.i: Added extern "C" to the prototype for syscall in OS.i. + Without it, you get unresolved symbols at link time. Thanks to + Greg Baker for pointing + this out. + + * ace/Message_Queue.cpp: Changed the return values for + enqueue_head(), enqueue_tail(), dequeue_head(), and + peek_dequeue_head() to return the number of messages that are + still on the queue. This helps some algorithms perform better + and avoid blocking unnecessarily. Thanks to Alex V Maclinvosky + for suggesting this... + + * ace/Synch_T.cpp (ACE_Condition): Fixed a bug in + ~ACE_Recursive_Lock and ~ACE_Recursive_Mutex that was causing + the destructor to be called twice (once implicitly and once + explicitly). Thanks to Chris Lahey for pointing this out. + +Mon Jan 15 12:44:29 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace: Created a new config symbol called ACE_HAS_ALLOCA_H. This + is required to differentiate between AIX and other versions of + UNIX. Thanks to Chris Lahey for pointing this out. + + * ace: moved config-hpux.h to config-hpux-9.x.h in anticipation of + the changes required to handle HP/UX 10.0! + +Sun Jan 14 23:38:23 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS.h (ACE_MAX3): Fixed the definition of ACE_MAX3 (it needed + a return value of template type T). Thanks to Mark Zusman + for noticing this. + + * ace: Added a new section to all the template files called + ACE_TEMPLATES_REQUIRE_SPECIALIZATION to deal with the screwy GNU + G++ semantics that are required if you *don't* have the template + repository patches. Thanks to Mark Zusman + for this. + +Fri Jan 12 00:47:57 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Time_Value.h: #included to the Time_Value.h + class so that it would be the first file included. This fixes a + problem with AIX. Thanks to Chris Lahey for reporting this and + suggesting the fix. + + * ace: Fixed a braino with the #ifdefs in SPIPE_Stream and + SPIPE_Acceptor. These were checking for ACE_WIN32 rather than + ACE_HAS_STREAM_PIPES. Naturally, that failed on versions of + UNIX (e.g., Linux) that lack STREAM pipes! Thanks to Neil Cohen + for taking time out of fighting blizzards to report this! + + * ace/Svc_Handler: Added a new method for handle_timeout, which + shuts things down by default. Thanks to Irfan for suggesting + this. + + * Fixed a minor problem caused when Tim added the Double-Check + pattern to ACE_ODB... + +Thu Jan 11 01:48:02 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Integrated AIX fixes from Chris Lahey . + These should allow ACE to build correctly using the AIX compiler + and it's screwy template mechanisms! + + * ace: Fixed some minor bugs that caused problems when compiling + with G++. + +Wed Jan 10 00:17:05 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Trace.cpp: Fixed a typo that was causing problems when using + ACE_TRACE (we were ending up with recursive tracing in the + ACE_Trace class!). Thanks to Detlef for noticing this. + + * ace/ACE.cpp: Moved methods from ACE.i to ACE.cpp and removed the + INLINE macro to deal with order of include problems with GNU + G++. + +Tue Jan 9 19:00:41 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Task.i (flush): Added a check to make sure that msg_queue_ + != 0 before trying to close() the queue. This solves a problem + if the queue has already been closed. Thanks to Alex V + Maclinvosky for reporting this... + + * tests/ASX/Event_Server/Event_Server: Fixed minor bugs in + Supplier_Router.cpp and Consumer_Router.cpp -- I was checking + for this->getq (mb) > 0 rather than this->getq (mb) >= 0. + Thanks to Alex V Maclinvosky for + noticing this... + + * ace/Synch_T.h: Commented out the ACE_ALLOC_HOOK stuff. This is + causing order-of-include problems on HP/UX. Also moved the + ACE_Null_Condition::wait() method to Synch_T.i to avoid the same + problem. Thanks to Greg Baker + for pointing this out. + +Sun Jan 7 18:57:49 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Makefile: Added the Dump file to ACE. Thanks to Tim for + fixing this up to make it ready for prime time. + + * Thanks to Craig Rodrigues for sending + me a new version of psnup that *finally* fixes the nasty + problems with "4-up" printing of postscript! This makes it much + easier to distribute ACE documentation... + +Sun Jan 7 18:31:07 1996 Tim H. Harrison (harrison@merengue.cs.wustl.edu) + + * ace: Used the "Double-Check" pattern to eliminate potential race + conditions when using Singletons in multi-threaded programs. + Classes affected included ACE_[MS]T_CORBA_Handler, Name_Options, + Trace, and ACE_ODB. + +Fri Jan 5 00:03:29 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS.i: Added the following to OS.i: + + #if defined (ACE_LACKS_SYSCALL) + int syscall (int, ACE_HANDLE, struct rusage *); + #endif /* ACE_LACKS_SYSCALL */ + + This should fix some problems with HP/UX. Thanks to Walt Akers + (akers@cebaf.gov) for pointing out the problem. + + * ace/Handle_Set: Fixed the Handle_Set conversion operator so that + it returns fd_set * rather than ACE_FD_SET_TYPE *. Thanks to + Walt Akers (akers@cebaf.gov) for pointing out the problem. + + * ace/Time_Value.h: I think I've fixed the problem with the order + of #includes with respect to POSIX and SVR4 time. The trick was + to put this test in ace/Time_Value.h and then to make sure that + the ace/config.h file was included at this point! Also changed + the symbol from ACE_HAS_POSIX_TIMERS to ACE_HAS_POSIX_TIME to be + more accurate. + +Thu Jan 4 23:16:59 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/OS.i (gettimeofday): Changed the implementation of + gettimeofday() to use the ::_ftime call rather than the more + complex ::GetSystemTime(), ::SystemTimeToFileTime() duo. + +Thu Jan 4 9:32:38 1996 Chris Lahey (clahey@ix.netcom.com) + + * ace/config-aix.h: added #define ACE_TEMPLATES_REQUIRE_SOURCE + to make ACE work with AIX C++ compiler. + + * include/makeinclude/platform_aix.GNU: + + Added -qtempinc to the CPPFLAGS + Removed the PIC= definition completely + + * ace/Task.h: ACE_Task::svc() should not be declared as a pure + virtual, removed = 0. + + * ace/Map_Manager.cpp: in trybind() member function, the line + int_id = ss.int_id_; + should be: + int_id = search_structure[index].int_id_; + +Thu Jan 4 01:23:38 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Map_Manager.cpp: Fixed a braino in Map_Manager -- didn't + need the parameter to shared_bind(). Thanks to Tim for + finding this! + + * ace/Log_Msg.cpp (instance): Tim Harrison did a noble service to + humanity by fixing a potential race condition in the instance() + Singleton of ACE_Log_Msg. + +Wed Jan 3 00:49:57 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace: Made some minor changes to fix portability problems with + SGI. Fortunately, this should also fix some other problems with + HP/UX another other non-thread platforms. + + * ace/ACE.cpp (format_hexdump): Added Todd Montgomery's amazing + "format_hexdump" method to class ACE. + +Tue Jan 2 20:47:57 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/SV_Semaphore*: updated the interface of the _Simple and + _Complex System V semaphore wrappers to include the _read() and + _write() forms of acquire() and tryacquire(). Note that I've + implemented these as calls to acquire() and tryacquire(), so + they don't add any extra behavior. This is needed for interface + conformance with other forms of ACE synchronization mechanisms. + + * ace/Time_Value.h: Changed the header to #include + in order to work around nasty "order of include" problems. + + * tests: Created a new directory called Win32. This contains test + programs that This directory contains test programs that have + been compiled and tested successfully under Windows NT. As we + get further along, we'll move this stuff into the general ACE + $WRAPPER_ROOT/tests directory (since of course all ACE programs + will run without any problems under Win32, right? ;-)). See + the ./tests/Win32/README file for instructions on how to build + these tests. + + * ace/Reactor.h: Moved the ACE_Handler_Repository out of the + ACE_MT_SAFE section of the code. This was a "typo." Thanks to + Walt Akers for reporting this. + +Mon Jan 1 01:18:12 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/ACE.i: Moved the recv_n() and send_n() methods from ACE.cpp + into ACE.i and set things so that if __INLINE__ is set then + we'll inline those too! + + * ace: Irfan and I got the first major part of the Win32 to work + finally! We made two socket programs (client and server) that + talked to each other and to UNIX. Things are really starting to + take shape! diff --git a/ACE/ChangeLogs/ChangeLog-96b b/ACE/ChangeLogs/ChangeLog-96b new file mode 100644 index 00000000000..5dd7b809a42 --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-96b @@ -0,0 +1,5878 @@ +Tue Dec 31 18:27:50 1996 Douglas C. Schmidt + + * ace/Log_Msg.cpp (log): Added a test so that if we're + (1) not printing to stderr and (2) aborting the program we still + print a message to stderr. + + * ace/Message_Block: Added synchronization support to + ACE_Message_Block. This is necessary now that we've got + reference counting to ensure that we don't have race conditions + when incrementing and decrementing the reference count in + separate threads. The approach is very clean and uses the new + ACE_Lock mechanism to conditionally acquire()/release() the + locking strategy if concurrency control is necessary. + + * ace/Synch_T: Created a new set of ACE_Lock and + ACE_Lock_Adapter<> classes which are similar in spirit to the + ACE_Allocator and ACE_Allocator_Adapter<> classes. These make + it possible to treat polymorphically synchronization mechanisms + in ACE polymorphically, *without* creating an entire new + parallel hierarchy of locking mechanisms. + + * ace/Synch: Added the full suite of acquire_{read|write}() and + tryacquire_{read|write}() methods to ACE_Semaphore and + ACE_Process_Semaphore so they will be consist with the other + synchronization APIs. + +Tue Dec 31 00:11:56 1996 Douglas C. Schmidt + + * Changed all uses of ACE_Event_Handler::RWE_MASK to + ACE_Event_Handler::ALL_EVENTS_MASK to reflect the fact that + we will soon have more than READ, WRITE, and EXCEPT events. + However, I've kept RWE_MASK around for backwards + compatibility. + + * examples/ASX/Message_Queue: Changed the tests so that they use + the new ACE_Message_Block::release() method rather than calling + delete explicitly. + + * apps/Gateway: Revised the implementation of the Gateway and Peer + applications to take advantage of the new ACE_Message_Block + reference counting scheme. + +Tue Dec 31 15:06:51 1996 David L. Levine + + * ace/Task.cpp: added comments that try to explain interaction + between ACE_Task_Base::svc_run () and ACE_Task_Exit instance + + * ace/Hi_Res_Timer.h: added comment to print_total () saying it + should only be used for incremental timings; added defaults to + a few print_ave/print_total args + + * ace/Hi_Res_Timer.{i,cpp}: inlined the constructor; trimmed output + if count is 1; rounded instead of truncated usecs portion of time + +Mon Dec 30 15:24:59 1996 Douglas C. Schmidt + + * ace/Message_Block: Added reference counting to ACE_Message_Block + so that we no longer have to clone() messages when we want to + pass them around "by reference." + + * apps/Gateway/Peer/Peer.cpp (init): The Peer_Acceptor had gotten + out of date wrt newer ACE features, so I updated it. + +Mon Dec 30 15:24:59 1996 Douglas C. Schmidt + + * ace/OS.h: Added a special case for ACE_UNUSED_ARG that works + with G++. Thanks to David Levine for this. + +Mon Dec 30 16:05:11 1996 David L. Levine + + * ace/OS.cpp (ace_thread_adapter): Updated ACE_TRACE arg + names (even though they're currently commented out). + + * ace/Task.cpp (svc_run): If TSS isn't supported, and on + Linux, for now, create the ACE_Task_Exit exit_hook instance + on the stack so that it's destructor will be called when + svc_run () completes. + +Sun Dec 29 18:38:03 1996 Douglas C. Schmidt + + * apps/Gateway/Gateway/File_Parser.h: Removed the endofline() + method declaration -- it doesn't seem to be defined anywhere. + + * ace/OS.h: Added an ACE_INT32 to complement the ACE_UINT32. + + * netsvcs/lib: Cleaned up all the ACE network services by removing + their SIGINT signal handler. This was interferring with the + main event loop's ability to shutdown... + + * apps/Gateway/Gateway: Once again changed the name of + *IO_Handler* to *Proxy_Handler* since these things are really + proxies, in the COS sense! + + * ace/Service_Record.cpp: Tidied up the implementation of + ACE_Module_Type::fini() so that it doesn't try to call fini() on + NULL pointers. Also, rather than explicitly deleting the reader + and writer Tasks, we call ACE_Module<>::close(), which knows how + to take care of all this stuff. + + * ace/Module.cpp: Added an extra parameter to close_i() so that we + can correctly pass the value of "flags" from close() in order to + prevent deleting tasks when we don't want to do this. + + * ace/Module.cpp: There was a bug in the open() method + since we were potentially deleting reader_q and writer_q twice + if memory allocation failed. + +Sat Dec 28 19:02:13 1996 Douglas C. Schmidt + + * ace/ACE.cpp: Changed the implementation of ldfind() so that it + doesn't try to add the DLL prefix (e.g., "lib") unless it + doesn't match filename. This is necessary to keep lots + of existing svc.conf files from breaking. + + * ace/Event_Handler.h: Added a new ACCEPT_MASK for use with the + new asynchronous accept() operation support for Win32. + + * ace: Added a new config file for WinNT 4.0 called + config-winnt-4.0-msvc4.x.h. This file contains #defines for new + features in WinNT 4.0 such as non-blocking acquire for + CRITICALSECTIONs (TryEnterCriticalSection()), + SignalObjectAndWait(), and CancelIO(). Oddly enough, these + functions seem to be missing from the MSVC++ 4.2 #include files, + so I added them to the config file. + + * ace: Changed the name of config-win32-msvc4.0.h to + config-win32-msvc4.x.h since this config file works for MSVC++ + 4.0, 4.1, and 4.2. + + * ace/Proactor: Added a new "cancel_io" method on the Proactor. + This makes it possible to cancel all I/O that is outstanding on + a thread. Thanks to Tim for help with this. + +Sat Dec 28 23:49:09 1996 Tim H. Harrison + + * ace/ReactorEx.h: Fixed some bugs with ACE_ReactorEx::dispatch. + For instance, the index should only be incremented when handlers + are dispatched. + + * ace/OS.i: Fixed some typos regarding the ACE_cond_t for NT. + + * examples/Reactor/Proactor/test_proactor.cpp: Dr. Schmidt and I + hacked this to be way cool. In particular, we no longer + have to know the size of the files to be transferred in + advance. This scheme uses a clever protocol that shuts down + the Peer Handler when (1) all input from the file has arrived, + (2) all output to the remote peer handler has been sent, and (3) + all input from the remote peer handler has been received. + The Peer Handler now uses calls close_writer on the stream + to notify the remote peer when its done writing. The Input + File Handler sends an mb==0 to tell the Peer Handler when + it's done reading from the file. The Peer Handle uses a + state variable to OR in all the different conditions for + exiting. It works. + +Fri Dec 27 23:39:19 1996 Douglas C. Schmidt + + * ace/Stream.cpp (pop): Modified the code so that we don't delete + the Module we are popping unless the flags request this. + + * ace/Service_Record.cpp (fini): Always make sure to first fini() + each Module, then remove() (and delete) them. + + * ace/Stream.cpp (remove): Updated the code so that we don't + delete the Module unless the flags request this. + +Thu Dec 26 18:51:22 1996 David L. Levine + + * ace/config-linux-lxpthreads.h: Has James CE Johnson's + latest adjustments to this config file. + +Tue Dec 24 10:55:20 1996 Douglas C. Schmidt + + * ace/OS.cpp (ace_thread_adapter): Changed the message that is + printed if we exit the thread. Thanks to Luca for this + suggestion. + +Tue Dec 24 15:38:43 1996 David L. Levine + + * ace/OS.i (cond_destroy): added call to event_destroy () + for waiters_done_ on WTHREADS platforms + + * ace/Future.cpp: added specialization of + template class ACE_Atomic_Op; + so that libACE is self-contained with respect to template + instantiations (with g++, for example) + + * ace/Malloc.cpp: added specialization of + template class ACE_Atomic_Op; + so that libACE is self-contained with respect to template + instantiations (with g++, for example) + + * examples/Reactor/Misc/test_reactors.cpp, + examples/Threads/future1.cpp, examples/Threads/future2.cpp, + examples/Threads/manual_event.cpp, examples/Threads/task_two.cpp, + performance-tests/Synch-Benchmarks/Benchmark.cpp, + tests/Future_Test.cpp, tests/Reactors_Test.cpp: instantiate + ACE_Atomic_Op with int instead of u_long so that it can use + the specialization in libACE + +Tue Dec 24 12:49:21 1996 David L. Levine + + * ace/OS.h (struct siginfo_t): added declaration of + siginfo_t (ACE_HANDLE *handles) to match definition in + OS.cpp. Thanks to James Johnson for pointing this out. + + * ace/OS.cpp (thr_create): fixed position of + #endif /* !ACE_LACKS_THREAD_STACK_SIZE */ directive, it + needed to be before the closing '}' of the block. Thanks to + James Johnson for pointing this out, also. + + * ace/OS.cpp: don't include ace/ARGV.h except on WIN32 because + it's only needed there, and don't compile ACE_Thread_Adapter on + VxWorks to save space + + * apps/Gateway/Peer/Gateway_Handler.h: changed #include "Event.h" + to be #include "Peer_Message.h" so that Peer_Header::ROUTING_ID + can be referenced in the class declaration. This subproject + still doesn't build, though; I think that Event.h is needed. + + * ace/OS.h (struct ACE_cond_t): declare waiters_done_ as + ACE_sema_t on VxWorks only, to avoid recursive struct + definition with ACE_event_t + + * ace/OS.i (ACE_OS::cond_*): on VxWorks only, use sema + operations on ACE_cond_t::waiters_done_ instead of event ops + +Tue Dec 24 10:55:20 1996 Douglas C. Schmidt + + * examples/Threads/task_three.cpp (main): Changed the use of + new-style C++ casts for ACE_Sig_Action to old-style C casts so + that more picky compilers like GCC won't complain. Thanks to + Sandro Doro for reporting this. + + * examples/Threads/task_two.cpp: Fixed a typo where int should be + used as the type for ACE_Atomic_Op rather than u_long. Thanks + to David Levine for noticing this. + + * ace/OS.i: Generalized the implementation of ACE_OS::cond_wait() + so that it will work with Win32 and VxWorks. Thanks to David + Levine for pointing this out. + + * ace/Synch_T.cpp: Removed ACE_Process_Condition since it isn't + really feasible to implement this as a template. At some point, + it should be reimplemnted as a non-template that is only + guaranteed to work on Solaris and some POSIX pthreads platforms. + +Sun Dec 22 21:23:57 1996 David L. Levine + + * ace/Acceptor.cpp: replaced two statements that looked like this: + "ptr && ptr->foo ()" with "if (ptr) ptr-> foo()" to prevent + compiler warnings about computed values that aren't used + + * netsvcs/clients/Tokens/manual/manual.cpp: added explicit "int" + return type to declaration of handle_exception (ACE_HANDLE) so + that compilers don't complain about no type + + * ASX/Event_Server/Event_Server/Options.cpp, + ASX/UPIPE_Event_Server/Options.cpp: rearranged initializers + in Options ctor to match declaration order + +Sun Dec 22 21:16:23 1996 Douglas C. Schmidt + + * ace/OS.cpp (thr_create): added a new ACE_HAS_PTHREADS_XAVIER to + deal with the sparam.sched_priority features of the Linux + pthreads implementation. Thanks to James Johnson for this. + + * ace/OS.i (thr_setprio): I forgot to define int policy = 0; + + * ace/SV_Semaphore_Simple.i: Removed the frigging LUSED macro and + updated the ACE_SV_Semaphore_Simple::name_2_key() method to + consider *all* the characters in the name. This will help avoid + nasty bugs when different lock names have a common prefix. + + * ace/Local_Name_Space_T.cpp (ACE_Local_Name_Space): Added a call + to "delete this->lock_" since we now allocate it dynamically. + + * apps/Gateway/Gateway/gatewayd.cpp: Changed call to + ACE_SVC_INVOKE from ACE_Gateway to Gateway. + + * ace/OS.i: In function thr_sigsetmask changed the line: + + #if defined (ACE_HAS_IRIX62_THREADS) + + to + + #if defined (ACE_HAS_IRIX62_THREADS) || defined (ACE_HAS_PTHREADS_XAVIER) + + Thanks to James CE Johnson for this. + + * ace/config-linux-[lx]pthreads.h: Added a #define for the + ACE_HAS_THREAD_SPECIFIC_STORAGE symbol. Thanks to James CE + Johnson for this. + + * ace: created a new config file called config-linux-lxpthreads.h. + This contains the ACE #defines necessary to use L. Xavier's + threading package on Linux. Thanks to James CE Johnson + for this. + + * build/gcc/ace/Synch: Moved the definition of the ACE_*Event + classes *outside* of ACE_HAS_THREADS so that the Proactor will + compile correctly even when there's no threading defined. + + * ace/config-linux-pthread.h: Added #define ACE_MT_SAFE, which + seems to have been missing. Thanks to James Johnson for + suggesting this. + + * tests/TSS_Test.cpp: Now that we've got Chris Lahey's fixes for + AIX we can run this test on AIX. + + * ace/OS.cpp (thr_create): Added a #ifdef for + pthread_attr_setstacksize() for Linux pthreads, which doesn't + seem to support this. Thanks to James CE Johnson + for this fix. + + * ace/OS.i: Added DCE pthreads fixes for OSF/1 3.2. Thanks to + Harry Gunnarsson for these. + +Sat Dec 21 13:54:45 1996 Douglas C. Schmidt + + * ace/Synch_T: Integrated a solution that will allow MVS to use + ACE_TSS. The problem is that the MVS C++ compiler requires an + extern "C" destructor function for pthread_key_delete and the + ACE_TSS stuff uses a paramatized C++ destructor function + (ACE_TSS::cleanup). To solve this, a new class + (ACE_TSS_Adapter) was created that encapsulates a thread + specific object and it's associated C++ destructor. The ACE_TSS + methods were then modified so that they provide access to the + thread specific object through the ACE_TSS_Adapter. Also added + a generic extern "C" cleanup routine that takes an + ACE_TSS_Adapter as an argument. It then calls the adapters + cleanup method passing it the saved address of the thread + specific object. Thanks to Chuck Gehr + for all of this. + + * ace/OS: Updated the code so that it will work with MFC and + AfxBeginThread(). Thanks to Detlef for these changes. + + * ace/README: Added two new #defines for ACE_LACKS_COND_T and + ACE_LACKS_RWLOCK_T to make it possible to define these in a + fine-grained manner for various platforms. + + * ace/OS.h: Restructured the ACE_HAS_THREADS section so that we + factor out the code for ACE_cond_t and ACE_rwlock_t so that it + is only defined if we don't support these features natively. + + * ace/ReactorEx: Added a new "alertable" parameter to the + handle_events() method. If alertable is true, then + WaitForMultipleObjectsEx is used as the demultiplexing call, + otherwise WaitForMultipleObjects is used. + + * ace/Signal.cpp: Had to move a few things around so that the code + would compile for HP/UX. Thanks to Neil B. Cohen + for reporting this. + + * ace/Acceptor.cpp: Updated the handle_close() method so that the + Acceptor shuts down the listen socket and prevents handle leaks. + Thanks to Irfan for reporting this. + +Thu Dec 19th 03:48:26 1996 Irfan Pyarali + + * ace/Local_Name_Space_T.cpp: Made sure that the mutexes are + getting named properly (both the mutex owned by the + Local_Name_space and the lock owned by the backing + store). For the time being I named these two to be the + extensions of the backing store file name. + + * ace/Local_Name_Space_T.cpp: Replaced the create_manager code + such that we use the double check pattern. This is simpiler + and easy to understand compared to the current code. + + * ace/Naming_Context.cpp: Gave the database name a default value. + + * ace/Malloc_T.cpp: The lock_name should never be 0. This will + cause all instances of the same pool to get different + mutexes. + +Sat Dec 21 09:43:35 1996 David L. Levine + + * ace/OS.{h,i}: fixes for VxWorks introduced in 4.1, and for + inlining: moved #include of OS.i after #defines but before + other ace #includes + +Thu Dec 19 15:58:09 1996 David L. Levine + + * ace/config-vxworks*.h, include/makeinclude/platform_vxworks*.GNU: + enable inlining on VxWorks by default + +Wed Dec 18 16:44:47 1996 Tim H. Harrison + + * ace/Proactor.cpp (dispatch): Changed this method to take an + int error parameter to set errno just before dispatching. + This allows us to better propagate overlapped I/O errors to the + handlers. + +Wed Dec 18 16:21:36 1996 David L. Levine + + * ace/OS.{h,i} and ace/INET_Addr.cpp: more VxWorks + gethostbyname () tweaks + +Wed Dec 18 15:24:13 1996 Tim H. Harrison + + * ace/Proactor.cpp (ACE_Proactor): Initialize completion_port_ to + 0. This is the only way that CreateIoCompletionPort works + first time in. ACE_INVALID_HANDLE makes it break. + + * (ACE_Proactor): Added a call to CreateIoCompletionPort in the + constructor so that GetQueuedCompletionStatus can be called + before ACE_Proactor::initiate is called. This is necessary if + an application is using the Proactor as a timer mechanism only. + +Tue Dec 18 7:58:07 1996 Tim H. Harrison + + * ace/Proactor.i (get_handle): Changed this to return + ACE_INVALID_HANDLE on non Win32 platforms. Also changed + shared_event_ from an ACE_Manual_Event to an ACE_Auto_Event. + This allows us to remove the call to reset from handle_signal. + + * examples/Reactor/Proactor/test_timeout.cpp: Added a new example + application to the Proactor example suite. Check the README for + more details. + + * examples/Reactor/ReactorEx/test_timeout.cpp: Added a new example + application to the ReactorEx example suite. Check the README for + more details. + + * ace/Service_Config.cpp: Fixed a bug in run_reactorEx_event_loop + (ACE_Time_Value &) so that it doesn't return on timeout. + +Tue Dec 18 7:06:32 1996 + + * ace/Proactor.cpp (handle_events): Once again removed the + timer_skew_ code. Changed the ACE_HANDLE global_handle_ to + ACE_Manual_Event shared_event_. Added a constructor that takes + an ACE_Timer_Queue *. Changed the implementation to use an + ACE_OS::sleep if only timers are registered. We need to figure + out a better approach than the sleep. + + * ace/Service_Config.cpp (run_proactor_event_loop): Changed this + to only return when an error occurs. If handle_events returns a + 0, then a timeout occurred, and we can continue to dispatch + events. We only return when all of the time has expired. + + * ace/Registry_Name_Space.h (ACE_Registry_Name_Space): Moved the + include statements below the ACE_WIN32 and UNICODE directives. + + * ace/OS.h (siginfo_t): Added siginfo_t (ACE_HANDLE *handle) + constructor prototype. + +Wed Dec 18 06:37:22 1996 Douglas C. Schmidt + + * ace/OS.i (cond_wait): Added the new algorithm for condition + variable emulation on Win32. (and VxWorks). This should fix the + nasty problems we had with earlier version (which weren't + "fair"). Thanks to James Mansion, Karlheinz, Detlef, and Irfan + for helping with this. + + * ace/Registry.h: Removed the "ACE_TURN_NOMINMAX_OFF" stuff + in order to simplify the code. Thanks to Irfan for this. + + * ace/OS.i (sema_post): Added a new overloaded version of + ACE_OS::sema_post(), which takes a "release count." This is the + number of times to release the semaphore. Note that Win32 + supports this natively, whereas on POSIX we need to loop... + + * ace/Proactor.cpp (handle_events): Changed the Proactor logic so + that it will correctly propagate any errors that occur to the + handle_{input,output}_complete callback. + +Tue Dec 17 20:56:56 1996 David L. Levine + + * ace/OS.{h,i}: on VxWorks: implemented ACE_OS::gethostbyname (), + and fixed inet_ntoa () to return -1 on failure + + * ace/OS.cpp: in ::spa () for VxWorks, zero out unused argv[] + slots to overwrite args from previous invocations OS.cpp + +Tue Dec 17 04:27:07 1996 Douglas C. Schmidt + + * ace/ReactorEx: Added a new feature to the ReactorEx. If we + enable the wait_all flag when calling + ACE_ReactorEx::handle_events() *and* we give an + ACE_Event_Handler (this is a new final param to the call) then + the handle_signal() call will be invoked on this + "wait_all_callback" object when all the handles become signaled. + Moreover, we pass in the array of signaled handled to through + the siginfo_t parameter (see the following ChangeLog entry for + details). If there is no wait_all_callback param, then all the + handle_signal() methods are invoked on all the handles. + + * ace/OS.h (siginfo_t): Augmented the siginfo_t interface so that + we can pass an array of signaled Win32 HANDLEs, in addition to + just a single HANDLE. This is used in the ReactorEx. + + * examples/Reactor/ReactorEx/test_reactorEx.cpp: Added a number of + enhancements to this test program based on discussions with + Irfan, Karlheinz, Dieter, and Detlef. + + * ace/Task_T.i (msg_queue): If we override the existing definition + of the Message_Queue in an ACE_Task then we need to delete the + existing Message_queue (if necessary and mark the Message_Queue + as no longer being a candidate for deletion (since we have + supplied our own definition). Irfan had added this earlier, but + it seemed to get lost... + + * examples/Reactor/Proactor/test_proactor.cpp: The class called + STDIN_HANDLEr is misnamed since we don't read from stdin, we + read from a file. Therefore, I've changed this to be + Input_File_Handler. + + * examples/Reactor/ReactorEx/test_{proactor,reactorEx}.cpp: + Changed misspellings of transfered to transferred. + + * ace/Memory_Pool.cpp (ACE_MMAP_Memory_Pool): Since NT doesn't support + SIGSEGV thre's no point in even trying to register for this + signal! + + * ace/OS.i: Reverted some lost UNICODE fixes -- thanks to Irfan + for finding these. + + * ace/Local_Name_Space_T.cpp (create_manager_i): Removed a + debug statement since it may be causing problems with printing + UNICODE. + +Mon Dec 16 11:25:55 1996 Douglas C. Schmidt + + * ace/OS.i (cuserid): Fixed the definition to ACE_OS::cuserid() so + that it uses LPTSTR. Thanks to Irfan for this fix. + + * ace/Task.cpp (activate): In ACE_Task::activate() there is a possibility to actually + "reactivate" the task using the flag. The following + illustrates that ability: + + if (this->thr_count_ > 0 && force_active == 0) + return 1; // Already active. + else + this->thr_count_ = n_threads; + + The thing is that, when the task is running and we reactivate it + (actually we add threads) the command should be: + + this->thr_count_ += n_threads; + + rather than + + this->thr_count_ = n_threads; + + That way thr_count_> holds the new number of threads currently + associated with the task. Thanks to Hamual for this fix. + + * ace/OS.i (inet_aton): Placed the return 1 within the curly + braces to make the HP/UX compiler happy. Thanks to Kenny Want + for reporting this. + +Mon Dec 16 12:56:43 1996 David L. Levine + + * ace/OS.i: removed spurious "*/" after an #endif. Thanks to + Harry Gunnarsson for reporting this. + + * ace/Svc_Conf_l.cpp: #ifdef'ed out ace_yyunput () and + ace_yy_{push,pop,top}_state () because they're not used, + and commented out a few "break"s after "return"s in switch + statements to prevent compiler warnings. + + * ace/Typed_SV_Message.i: reordered initializations in ctor to + match declaration order. + + * examples/Threads/Makefile, performance-tests/Misc/Makefile, + tests/Makefile: + Removed "LIBS += -lm" from these Makefiles because it doesn't + appear to be necessary, and not all platforms have a libm. + + * include/makeinclude/platform_sunos4_g++.GNU, platform_sunos5_g++.GNU, + platform_sunos5_x86_g++.GNU, platform_unixware_g++.GNU: + added -lm to LIBS because it was removed from the Makefiles, and + it's needed with g++. + + * netsvcs/lib/Makefile: removed /pkg/gnu/lib dependencies. Thanks + to Per Andersson for pointing + this out. + + * netsvcs/servers/svc.conf: changed _make_ACE_Logger() to + _make_ACE_Logging_Strategy() svc.conf. Thanks to Per Andersson + for reporting this. + +Sun Dec 15 13:01:17 1996 David L. Levine + + * ace/Naming_Context.cpp: reordered initializations in default ctor + to match declaration order. + + * ace/Svc_Conf_y.cpp: added parens to a couple of combined + assignments/conditionals to avoid compiler warnings. + + * include/makeinclude/platform_sunos5_sunc++*.GNU: reverted + SOLINK step back to creating real .so files, because it + seems to be necessary, sometimes, for template instantiation. + + * netsvcs/lib/Server_Logging_Handler.cpp: removed ACE_INLINE's. + + * tests/MM_Shared_Memory_Test.cpp: declare shm_key as char[] + instead of char *, so that the string gets put into the data + segment rather than the text segment. The string gets modified, + which causes a core dump with the g++/SunOS5.5 build if the string + is in the text segment. + +Sun Dec 15 10:29:20 1996 Douglas C. Schmidt + + * netsvcs/servers/svc.conf: Removed the "lib" prefix for the + netsvcs DLL. This is now added automatically by the + ACE::ldfind() operation. + + * ace/SString.cpp (ACE_CString): Removed the #pragmas for Win32. + They aren't necessary since we should replace the ACE_USHORT16 + cast with a char cast. Thanks to Amos Shapira + for reporting this. + +Sat Dec 14 14:25:38 1996 Douglas C. Schmidt + + * build/SunOS5.5/tests/UPIPE_SAP_Test.cpp (main): Fixed several + minor bugs with UPIPE_SAP_Test.cpp. + + * ace/OS.i (thr_join): Added implementations for Solaris threads + and most versions of POSIX pthreads where ACE_hthread_t and + ACE_thread_t are the same type! + + * ace/OS: Began adding hooks so that we can eventually move away + from the current split between ACE_thread_t and ACE_hthread_t + and unify them via ACE_Thread_ID. + + * ace/{OS,Thread}.h: Changed the interface of thr_getprio() so + that it takes an int & rather than an int *. + + * ace/OS.i (thr_getprio): Fixed a minor bug for Win32 where we + weren't depositing the thread priority into the return value! + + * Makefile: Changed the order in which things are built so that + netsvcs are built right after libACE, followed by the tests. + +Sat Dec 14 11:54:22 1996 Douglas C. Schmidt + + * apps/Gateway/Gateway/Consumer_Map: Change the Consumer_Map class + so that it was no longer templatized. There isn't any point in + doing this since we aren't going to be changing these types for + this application. + + * apps/Gateway/Gateway: Factored out the code for selecting the + concurrency strategy into a separate *.h file called + Concurrency_Strategy.h. + + * apps/Gateway/Gateway: Began revising the Gateway application to + use the new ACE Event Channel. + + * ace/Svc_Handler: Now that we've got put() and svc() with no-op + defaults in class ACE_Task_Base, we don't need them in + ACE_Svc_Handler anymore, so I removed them! + + * ace/Task: Finally got sick of having to provide no-op + open()/put()/close() routines in all ACE_Task subclasses, so I + changed these methods from pure virtual to virtual with default + no-op behavior. Updated all the tests, as well. + +Sat Dec 14 11:39:15 1996 David L. Levine + + * ace/{Module,Stream,Svc_Handler,Synch_T,Task_T}.cpp and Synch_T.i: + removed ACE_INLINE qualifier from functions in .cpp files; in + the case of Synch_T, moved ACE_INLINE functions from .cpp to .i file + + * apps/Gateway/Gateway/Routing_Table.cpp, + examples/ASX/Event_Server/Event_Server/Peer_Router.cpp, + examples/ASX/UPIPE_Event_Server/Peer_Router.cpp: + removed ACE_INLINEs from .cpp files + + * ace/CORBA_Handler.h and ace/Token_Collection.{h,cpp}: + changed __INLINE__ to __ACE_INLINE__ + + * ace/Svc_Conf_y.cpp: commented out unused arguments to + suppress compiler complaints + +Fri Dec 13 22:07:11 1996 David L. Levine + + * include/makeinclude/platform_sunos5_sunc++*.GNU: replaced + SOLINK step in build of shared objects for SunOS5 with SunC++ + with symlink from .so to .o file. + + * ace/config-vxworks*.h: added ACE_NEEDS_SYSTIME_H to VxWorks + configs because it's needed with inlining + + * include/makeinclude/platform_vxworks*.GNU: cleaned up VxWorks + config files + +Fri Dec 13 00:53:34 1996 Douglas C. Schmidt + + * ace: Replaced all uses of + + #if defined (.....) // .... + + with + + #if defined (.....) /* ... */ + + so that broken C++ compilers won't complain. Thanks to + John Cosby for reporting this. + + * ace/Thread.i: Updated the signature of getprio() and setprio() + so that they take ACE_hthread_t. Thanks to Wayne Vucenic + for finding this. + + * Reran all the tests on NT and Solaris. Everything seems to + work. Therefore, incremented the version number to 4.1 and put + it out for ftp and http. + +Thu Dec 12 18:51:04 1996 Douglas C. Schmidt + + * tests/Priority_Task_Test.cpp (svc): Added a new test to exercise + the new "priority" feature of ACE_OS::thr_create() + (which is also available to ACE_Task). + + * ace/Thread: Added getprio() and setprio() methods to ACE_Thread. + +Fri Dec 13 13:44:12 1996 David L. Levine + + * ace/config-vxworks*.h: added ACE_NEEDS_SYSTIME_H to VxWorks + configs because it's needed with inlining + + * include/makeinclude/platform_vxworks*.GNU: cleaned up VxWorks + config files + +Thu Dec 12 18:51:04 1996 Douglas C. Schmidt + + * ace: Added a new macro called ACE_UNUSED_ARG() to keep + the compiler from outputting warnings about unused + arguments. So far, this is mostly done for Win32, but it + should be easy to do it for other compilers. Thanks + to Matthias for these changes. + + * ace/OS.cpp: Added support so that thread priorities will + automatically be set when we spawn threads using + ACE_OS::thr_create(). + + * ace/OS.cpp: Simplified the logic for handling NULL thr_handles + and thr_ids. Now, we set all this stuff in one place at the + beginning of the function, rather than recomputing it all over + the place. + + * ace/config-aix-{3.2.5,4.1.x}.h: Added the + ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS flag. + + * ace/Thread_Manager.cpp (ACE_Thread_Control): Conditionally + compiled the logic for calling this->exit() in the destructor + for ACE_Thread_Control so that we only make this call if + ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS is *not* set. This will + prevent infinite recursion on platforms like AIX. Thanks to + Chris Lahey for reporting this. + + * apps/Gateway/Gateway/Channel.cpp (recv_peer): Added the logic + that makes sure we don't get screwed up by partial headers. + Thanks to Chris Cleeland for this. + +Thu Dec 12 20:55:02 1996 David L. Levine + + * include/makeinclude/platform_sunos5_sunc++*.GNU: removed + SOLINK step in build of shared objects for SunOS5 with SunC++: + it's not necessary. + +Thu Dec 12 03:48:26 1996 Irfan Pyarali + + * ace/Naming_Context: Modified ACE_Naming such that on Win32, you + can use ACE_Registry_Name_Space. + + * ace/Registry_Name_Space: ACE_Registry_Name_Space is a Name_Space + which uses ACE_Registry as the persistence mechanism. Win32 + clients of ACE_Naming can now start using (the more robust and + reliable) Registry persistence without any major code changes. + + * tests/Naming_Test.cpp: Added the use of Registry_Name_Space to + the test if we are on Win32 and UNICODE is turned on. + + * examples/Registry: Fixed UNICODE behavior of the tests + +Wed Dec 11 20:33:28 1996 Douglas C. Schmidt + + * ace/Synch_T.h: Added a warning that indicates why it isn't + possible to use ACE_Process_Condition on + Win32... + + * tests/TSS_Test.cpp: Moved the Errno class to a file + TSS_Test_Errno.h and replaced the Errno class with the #include + "TSS_Test_Errno.h" to work around "features" with AIX C++'s + template instantiation scheme. + + * ace/OS.i (inet_aton): Replaced the use of ((ACE_UINT32) -1) with + ((ACE_UINT32) ~0). I expect this is more portable... + + * tests/run_tests.bat: Added "Service_Config_Test" to the + run_tests.bat file. + +Tue Dec 10 22:59:26 1996 Irfan Pyarali + + * tests: Added Service_Config_Test to Win32 makefiles. + + * ace/OS.i (inet_aton): We need to cast htonl to (long) + + * tests: Added/Fixed UNICODE behavior of the following: + + MM_Shared_Memory_Test.cpp + Mem_Map_Test.cpp + Mutex_Test.cpp + Naming_Test.cpp + Process_Mutex_Test.cpp + SPIPE_Test.cpp + Time_Service_Test.cpp + Tokens_Test.cpp + UPIPE_SAP_Test.cpp + + * netsvcs/lib: Added/Fixed UNICODE behavior of the following: + ACE_TS_Clerk_Processor::poolname_ + +Tue Dec 10 00:33:08 1996 Douglas C. Schmidt + + * tests/Service_Config_Test.cpp (main): Added a new method called + run_test() to ensure that ACE_Service_Config daemon is destroyed + before we try to end the test. + + * ace/OS.i (inet_aton): We need to cast -1 to (ACE_UINT32). + + * tests/Process_Mutex_Test.cpp (main): Added a minor change to + make gcc happy by moving the definition of int i *outside* the + loop. Thanks to Thilo Kielmann + for reporting this. + + * ace/OS.h: gcc complains about memcmp, memcpy, strcmp, and strcpy + (from ACE_OS::) being used before defined inline. This is due + to the include of SString.h at the end of OS.h. So I reordered + things in accordance to the changes from Thilo Kielmann + . + + * build/SunOS5.5/examples/Shared_Malloc/test_multiple_mallocs.cpp: + Changed the definition of char *base_addr to void *base_addr. + + * ace/Memory_Pool.cpp (ACE_MMAP_Memory_Pool_Options): Changed the + definition of char *base_addr to void *base_addr. + + * Put out what is hopefully the final beta release of 4.0.33. + + * ace/Message_Queue: Added the enqueue() method again to maintain + backwards compatibility. Thanks to Karlheinz for pointing out + the need for this. + + * ace/Service_Config.h: The svc.conf factory functions were + begin defined as extern "C", but the function pointer defined in + the ACE_Static_Svc_Descriptor struct is not declared as extern + "C", therefore, there was a mismatch. Here's how to fix this: + + In Service_Config.h, before the struct ACE_Static_Svc_Descriptor + add: + + extern "C" { + typedef ACE_Service_Object *(*ACE_SERVICE_ALLOCATOR)(void); + } + + Then in the struct alloc_ field was changed as follows: + + from: ACE_Service_Object *(*alloc_)(void); + to: ACE_SERVICE_ALLOCATOR alloc_; + + Thanks to Chuck Gehr for this. + + * ace/Memory_Pool.cpp (commit_backing_store_name): Changed uses of + "counter" from int to size_t to remove warnings. + + * ace/ACE.cpp: Reimplemented the ACE::daemonize() method to + conform to the latest version in Richard Steven's new UNP book. + + * ace/INET_Addr.cpp (set): Replaced the use of ACE_OS::inet_addr() + with ACE_OS::inet_aton(). Thanks to W. Richard Stevens for this + idea ;-). + + * ace/OS: Added a new function called inet_aton(), which is based + on a new POSIX socket addressing function that is non-ambiguous + in its return value (unlike inet_addr). + + * tests: Added a new Service_Config_Test.cpp to make sure that the + timeout features mentioned below work. + + * ace/Service_Config.cpp: Changed the implementation of + run_{reactor,proactor,reactorEx}_event_loop so that it returns + if the corresponding handle_events() method times out. + Thanks to Phil Logan for reporting + this. + + * ace/LSOCK_Stream: Moved get_remote_addr() from the private part + of the class and implemented it using get_local_addr(). This + fixes problems that previously occurred when using the + ACE_Connector with ACE_LSOCK_Stream. Thanks to Stuart Powell + for this suggestion. + +Mon Dec 9 22:03:30 1996 Douglas C. Schmidt + + * examples/Threads: Updated the test.mak and test.mdp files to + reflect the new name changes. Thanks to Matthias for this. + + * ace/ACE.cpp (ldfind): Added new code that will work if the + "base" part of the filename to look for is the same on both UNIX + and NT. The library name will be made up of three parts + [ACE_DLL_PREFIX]base part[ACE_DLL_SUFFIX], where prefix is "lib" + on UNIX and nothing on NT and suffix is ".dll" on NT and ".so" + on UNIX. If either prefix or suffix are missing from the + filename you supply to ldfind they will be added + automagically. This all will work independent from the pathname, + which will be treated completely separately from the filename + and can contain either UNIX style or NT style separators. + + Examples: + Source NT UNIX + =============================================================== + netsvc netsvc.dll libnetsvc.so + (PATH will be evaluated) (LD_LIBRARY_PATH evaluated) + + libnetsvc.dll libnetsvc.dll libnetsvc.dll + warning + netsvc.so netsvc.so + warning libnetsvc.so + + ..\../libs/netsvc ..\..\libs\netsvc.dll ../../libs/libnetsvc.so + (absolute path used) (absolute path used) + + The first and the last of these 4 examples is the way the new + functionality is supposed to be used. You simple supply the + pathname and the base part of the filename and ldfind will + figure everything out. + + Thanks to Tilo Chris for this code. + + * ace/OS.h: Added a new macro called ACE_DLL_PREFIX, which is + defined to "" on Win32 and "lib" on UNIX. Thanks to Tilo for + this. + + * ace/Reactor.cpp (detach): After further thought, I + have commented out the + + eh->reactor (0); + + call since I don't think we really need it. + + * ace/Reactor.cpp (detach): There was a problem with + ACE_Reactor::detach(). + + The following lines: + + // Reinitialize the Reactor pointer to 0. + eh->reactor (0); + + should be moved before: + + eh->handle_close (handle, mask); + + This will render the reactor handle not available in the + handle_close method but at least handle_close can delete itself. + Thanks to Luca for reporting this. + + * examples/Reactor/Ntalker: Replaced the use of ACE_OS::getopt() + with the ACE_Get_Opt iterator. Thanks to Alexandre Karev + for suggesting this. + + * ace/OS.h: Moved the #endif /* ACE_HAS_DCETHREADS || + ACE_HAS_PTHREADS */ once again in order to make sure that the + right things happen when #if defined (ACE_HAS_THREADS) is + *false*. Thanks to Robert Lyng + for reporting this. + +Mon Dec 9 02:06:48 1996 Irfan Pyarali + + * ace/SString: Made accessors return const references. + + * ace/OS.h: Added macro ACE_WIDE_STRING which allows the + conversion of char* to wchar_t* when UNICODE is turned on. + + * ace: Added/Fixed UNICODE behavior of the following: + + /* Local_Name_Space */ + ACE_Local_Name_Space_T::context_file_ + + /* ACE */ + ACE::basename + + /* Token */ + ACE_Token::ACE_Token + + /* Synch */ + ACE_File_Lock::ACE_File_Lock + + /* SPIPE_Addr */ + ACE_SPIPE_Addr::addr_to_string + ACE_SPIPE_Addr::set + + /* FILE_Addr */ + ACE_FILE_Addr::addr_to_string + + /* DEV_Addr */ + ACE_DEV_Addr::addr_to_string + + /* Addr */ + ACE_Addr::addr_to_string + ACE_Addr::string_to_addr + Note: These two were removed from the base class since they are + not common to all Address classes. + + /* Malloc */ + ACE_Allocator_Adapter::ACE_Allocator_Adapter + ACE_Malloc::ACE_Malloc + + /* Process */ + ACE_Process::start + + /* Shared_Memory_MM */ + ACE_Shared_Memory_MM::ACE_Shared_Memory_MM + ACE_Shared_Memory_MM::open + + /* Proactor */ + ACE_Overlapped_File::ACE_Overlapped_File + ACE_Overlapped_File::open + + /* Log_msg */ + ACE_Log_Msg::open + + /* Naming_Context */ + ACE_Name_Options::namespace_dir + ACE_Name_Options::process_dir + ACE_Name_Options::database + + /* Registry */ + ACE_Predefined_Naming_Contexts::connect + ACE_Predefined_Naming_Contexts::is_local_host + + /* SString */ + ACE_CString::ACE_CString + + /* Mem_Map */ + ACE_Mem_Map::ACE_Mem_Map + ACE_Mem_Map::map + + /* Service_Config */ + ACE_Service_Config::logger_key_ + + /* System_Time */ + ACE_System_Time::ACE_System_Time + + /* Memory_Pool */ + ACE_Sbrk_Memory_Pool::ACE_Sbrk_Memory_Pool + ACE_Shared_Memory_Pool::ACE_Shared_Memory_Pool + ACE_Local_Memory_Pool::ACE_Local_Memory_Pool + ACE_MMAP_Memory_Pool::ACE_MMAP_Memory_Pool + ACE_Lite_MMAP_Memory_Pool::ACE_Lite_MMAP_Memory_Pool + + /* OS */ + ACE_OS::strstr + ACE_OS::strdup + ACE_OS::hostname + ACE_OS::open + ACE_OS::unlink + ACE_OS::dlopen + ACE_OS::dlsym + ACE_OS::cuserid + ACE_OS::fork_exec + ACE_OS::sprintf + ACE_OS::access + ACE_OS::fopen + ACE_OS::getenv + ACE_OS::system + ACE_OS::mkdir + ACE_OS::mktemp + +Sun Dec 8 19:00:45 1996 Tim H. Harrison + + * ace/Reactor.cpp (handle_events): Updated this method to use the + ACE_Countdown_Time::update method after the mutex has been + acquired. + + * ace/Time_Value.cpp (update): Added an ACE_Countdown_Time::update + method that calls stop and start. This is useful for methods + such as ACE_Reactor::handle_events that need to update timeout + values after acquiring locks, but before waiting on the + demultiplexing mechanism (e.g. select). + + * ace/ReactorEx.cpp (handle_events): Modularized the + implementation of handle_events. Now it uses helper functions + to significantly simplify the implementation. Also updated the + header file documentation. + + * ace/Timer_Queue: Added a timer_skew_ data member and accessor + methods to ACE_Timer_Queue. Also added an expire method that + calls gettimeofday and adds the timer_skew_ for you. These + changes will help simplify Reactor, Proactor, and ReactorEx + code. + + * ace/Reactor : Removed timer_skew_. This code now just calles + timer_queue->expire () with no parameters. Very clean. + + * ace/ReactorEx : Removed timer_skew_ code. + + * ace/Proactor : Removed timer_skew_ code. + + * examples/Proactor/test_proactor.cpp: Fixed this application so + that it exits when all the data has been sent and received. + Previously, it used a cool timeout mechanism to "guess" when all + the data had been received. Ahh, but we can't have too much + fun, or people start to get nervous. + + * ace/Service_Config.cpp (run_reactorEx_event_loop (Time_Value)): + Fixed the implementation of this method. It now handles + reactorEx events until end_reactorEx_event_loop is called, or + the specified time value expires. Also fixed the + run_proactor_event_loop (Time_Value) method. + + * examples/ReactorEx/test_timeout.cpp: Added a new example + application that shows how to use + Service_Config::run_reactorEx_event_loop with timeouts. Check + the examples/ReactorEx/README file for more details. + + * examples/Proactor/test_timeout.cpp: Added a new example + application that shows how to use + Service_Config::run_proactor_event_loop with timeouts. Yes, this + screams for common dispatcher interfaces for Reactor, Proactor, + and ReactorEx. + +Sun Dec 8 10:27:19 1996 Douglas C. Schmidt + + * ace/Service_Manager.cpp (init): Changed all uses of "int port" + to "u_short port" to be consistent with socket types. + + * ace/ACE.cpp (bind_port): Changed all uses of "int port" to + "u_short port" to be consistent with socket types. + + * ace/Remote_Name_Space.cpp: Changed all uses of "int port" to + "u_short port" to be consistent with socket types. + + * ace/SV_Semaphore_{Simple,Complex}: Changed all uses of "int n" + to "u_short n" to be consistent with the SYSV types! + + * ace/OS.h: Moved the location of the ACE_HAS_USING_KEYWORD macros + until *after* we #include "ace/Time_Value.h". Thanks to + Matthias for this. + + * ace/Signal.cpp: Finished implementing the + ace_signal_handlers_dispatching logic, which wasn't done + entirely earlier. Thanks to Alexandre Karev + for reporting this. + + * netsvcs/servers/main.cpp (main): Fixed several small bugs in the + netsvcs main test program. Thanks to Alexandre Karev + for finding this. + + * ace/Reactor: Removed the timer_skew_ data member from the + ACE_Reactor since this is now covered by the + ACE_Timer_Queue. + + * ace/Reactor.cpp (handle_events): Added the new version of the + ACE_Countdown_Time to simplify the code. + + * ace/Time_Value: Added a new class called ACE_Countdown_Time, + which is used by the Reactor, ReactorEx, and Proactor to keep + track of how much time elapsed. + + * ace/config-win32-msvc4.0.h: Added a change that forces the MSVC + compiler to reference the proper Winsock - lib during linking of + ACE. This change is necessary because a) in the release version + the link to the winsock.lib was completly missing and b) only + wsock32.lib has been included (which is wrong when WinSock2 is + used). Thanks to Matthias for this. + + * ace/Module.cpp (ACE_Module): Added code to zero-out the + q_pair_[2] pointers. Thanks to Matthias for this. + + * tests: Removed the argv name from most main() functions so that + we don't get warnings... + + * examples/Threads: Fixed some errors in the threads examples + directory, most of which are ambigious overloads. Also included + a (MSVC 4.1) makefile for all tests in this directory. Thanks + to Matthias for this. + + * examples/Threads: Renamed all the files by removing the word + "test_" at the beginning. This is redundant! + + * tests/TSS_Test.cpp: If we are running AIX (i.e., if + ACE_TEMPLATES_REQUIRE_PRAGMA), then conditionally avoid + compiling this test program because it doesn't work unless we + split off class Errno due to AIX's rules for generating + templates. This is too much work to get right... + + * ace/OS.i (thr_self): Updated the conditional compilation tests + so that we check for ACE_HAS_THREAD_SELF first. Thanks to Chris + Lahey for this. + + * ace/{config-osf1-3.2.h,config-aix-4.1.x.h}: Updated this file so + that is has the new ACE_HAS_THREAD_SELF macro, which indicates + that the platform uses thread_self() rather than pthread_self(). + + * ace/config-aix-4.1.x.h: According to Chris Lahey + , AIX 4.1.x should have ACE_HAS_PTHREADS + rather than ACE_HAS_DCETHREADS. + + * ace/Thread_Manager: Removed the thread_descriptor_i() methods + and replaced them by generalizing the find() method to become + find_thread() and find_hthread(). Thanks to Hamutal Yanay + for suggesting this. + +Sun Dec 8 14:39:53 1996 Tim H. Harrison + + * ace/Timer_Queue: Added a timer_skew_ data member and accessor + methods to ACE_Timer_Queue. Also added an expire method + that calls gettimeofday and adds the timer_skew_ for you. These + changes will help simplify Reactor, Proactor, and ReactorEx + code. + +Sat Dec 7 01:14:04 1996 Irfan Pyarali + + * tests/Process_Mutex_Test.cpp: Added new test which checks the + functionality of a ACE_Process_Mutex. Abandoned mutexes can be + created by selecting the correct command-line arguments. + + * examples/Reactor/ReactorEx/test_reactorEx.cpp: Reverted back to + old scheme which does not utilize traits. + + * ace/Task_T.h: Removed the synchronization trait in Task. This is + because template typedefs are only supported by a few + platforms. Sigh ;-) + +Sat Dec 7 16:55:37 1996 Douglas C. Schmidt + + * ace/Thread_Manager.cpp: Because thread_descriptor_i() only returns + 0 or -1 on failure the code for + ACE_Thread_Manager::thr_self(ACE_hthread_t &) should read: + + if (-1 == this->thread_descriptor_i (id, td)) + return -1; + handle = &td.thr_handle_; + + Thanks to Matthias for reporting this. + + * ace/OS: Added a new static instance of ACE_thread_key_t to work + around the pthreads implementation on MVS (which doesn't store + TSS keys as ints!). Thanks to Chuck Gehr for reporting this. + + * ace/config-mvs.h: Added #define ACE_TEMPLATES_REQUIRE_SOURCE for + MVS C++. Thanks to Chuck Gehr for reporting this. + + * ace/Signal.cpp: ace_dispatcher was being set to + ace_signal_handlers_dispatch() which calls + ACE_Sig_Handlers::dispatch (when ACE_HAS_SIC_C_FUNC is defined), + whereas it was set to ACE_SigHanlder::dispatch (no s) if not + defined. I intended to set this to ace_signal_handler_dispatch + (no s). Thanks to Chuck Gehr for reporting this. + + * ace/Makefile: Fixed a small typo where I wasn't matching char + *getenv in the sed regular expression. + + * ace/{OS,Synch}: Moved various classes around so that things will + compile correctly when ACE_WIN32 is defined but ACE_HAS_THREADS + is *not* defined. Thanks to Robert Lyng + for reporting this. + +Sat Dec 7 16:55:37 1996 Matthias Kerkhoff + + * ace/Module: Added some values to the enum so Module clients + can decide whether the reader, the writer or both should be + automatically deleted. + + * ace/{Stream,Module,Task}: Changed some function arguments + from u_long to int (because enums are represented as ints). + + * ace/Task: Added a new virtual function to ACE_Task_Base + (module_closed), which by default calls + ACE_Task_Base::close(1). Please note the changed flags + argument. This allows clients to differ between calls + originated from a Module and/or Stream from those which + result from ~ACE_Task_Exit(). ~ACE_Task_Exit() calls + ACE_Task_Base::close(0). This may be or not be a problem to + existing applications. It may (hopefully not) + be neccessary to change ACE_Task_Base::module_close back to + calling ACE_Task_Base::close(0). + +Fri Dec 06 14:44:20 1996 David L. Levine + + * ace/OS.cpp: added ::spa () function to allow command line args + to be passed to programs in VxWorks + + * ace/OS.i: (ACE_OS::gettimeofday): VxWorks returns nsec instead + of usec, so convert + +Fri Dec 6 01:21:48 1996 Irfan Pyarali + + * examples/Reactor/ReactorEx/test_reactorEx.cpp: Rewrote the + example such that the test now uses the new Notification + Strategy scheme in ACE. This allows a message queue consumer to + wait in ReactorEx without spawning a new thread, or creating + extra Win32 events. This make the example smaller and much + cleaner. + + * ace/Task_T.h: Added synchronization trait to Task. + + * ace/Task_T.i (msg_queue): Added a check to delete the old + message_queue if we had created it. + + * ace/ReactorEx.cpp (remove_handler): Removed the call to set + reactorEx of the event handler to zero becauses the event + handler may no longer be there after the handle_close() + completes. + +Thu Dec 05 21:18:49 1996 David L. Levine + + * ace/OS.cpp (thr_create): Oops, needed to add another check if + thr_id == 0 before assigning *thr_handle = *thr_id, for systems + such as Solaris 2.4 that don't have PTHREADS. + +Wed Dec 4 09:09:56 1996 David L. Levine + + * ace/Log_Msg.cpp (log): added printout to stderr before call + to exit(). Silent calls to exit() are bad :-} + + * performance-tests/Synch-Benchmarks/Options.cpp (print_results): + only use rusage if ACE_HAS_PRUSAGE_T is #defined + + * examples/IPC_SAP/SOCK_SAP/CPP-in{client,server}.cpp: + use blocking connect on VxWorks + + * ace/config-vxworks*.h: added ACE_LACKS_MPROTECT and + ACE_HAS_STRERROR + + * include/makeinclude/platform_vxworks*: removed INCLDIRS and + added indlib.o to GreenHills LIBS + + * Makefile (cleanrelease and release): changed "rm -r" of + ACE.tar.gz to "rm -f", that's probably what was meant + +Wed Dec 4 00:27:07 1996 Irfan Pyarali + + * ace/config-win32-msvc*.0.h: Added NOMINMAX. + + * ace/Registry: Removed NOMINMAX and + VC_PLUS_PLUS_NESTED_CLASS_PROBLEM flags from the header file. + The VC_PLUS_PLUS_NESTED_CLASS_PROBLEM flag is no longer needed + and NOMINMAX is defined at the project level. Thanks to + Matthias Kerkhoff for suggesting this. + +Mon Dec 2 14:13:44 1996 Douglas C. Schmidt + + * ace: Changed all occurrences of ACE_Event_Handler + reactorex() to reactorEx() to be consistent. Thanks to + Matthias for suggesting this. + + * ace/Message_Queue.cpp (close): We didn't allocate the memory for + the notification_strategy_, so we darn well can't delete it! + Thanks to Matthias for finding this. + + * ace/Log_Msg.cpp (ACE_TSS_cleanup): Made the ACE_TSS_cleanup + function extern "C" for MVS C++ and compilers like it... Thanks + to Chuck Gehr for reporting this. + + * tests/Naming_Test.cpp (main): Added delete ns_context to close + things down and free up the semaphores. Thanks to David Levine + for suggesting this. + + * examples/Reactor/Misc/test_demuxing.cpp (handle_input): Fixed a + "typo" where we were accessing mb->msg_priority() *after* + deleting it! Thanks to Matthias for finding this. + +Mon Dec 2 09:57:15 1996 David L. Levine + + * tests/run_tests.*: updated lists of tests to be run + + * tests/*.cpp: removed trailing .cpp from argument to + ACE_START_TEST because it would appear in the log file name + +Mon Dec 2 00:08:51 1996 Douglas C. Schmidt + + * ace/Log_Record.cpp (dump): There was an error on line 19 of + Log_Record.cpp: + + ACE_DEBUG ((LM_DEBUG, "\npid_ = %s\n", this->pid_)); + + should be changed to: + + ACE_DEBUG ((LM_DEBUG, "\npid_ = %d\n", this->pid_)); + + Thanks to Sandro Doro for reporting + this. + + * examples/Reactor/Misc/test_handle_set.cpp: Updated the test to + remove a warning caused by sloppy nesting of loop counters. + +Mon Dec 2 00:23:23 1996 Irfan Pyarali + + * ace/Strategies.{h,cpp}: Update the base-class and added + documentation. + + * tests/test_config.h: Added ACE_INIT_LOG, ACE_APPEND_LOG and + ACE_APPEND_LOG to facilitate the appending of log messages to a + file. Also changed Pipe_Test to use this new mechanism. + + * test/Naming_Test: Changed test to use "lite" implementation to + speed things up. + + * netsvcs/lib: Fixed multiple type mismatch warnings. + + * ace/ReactorEx: Fixed syntax errors in recently modified + ReactorEx.* files + + * ace/ace.{mdp.mak}: Added Strategies.cpp to VC++ makefile. + +Sun Dec 1 19:19:02 1996 Douglas C. Schmidt + + * ace/Service_Config: Moved the #inclusion of ace/Proactor.h and + ace/ReactorEx.h from the *.h file to the *.cpp file to avoid + problems with circular dependencies. + + * ace/Reactor: Added a new parameter to the Reactor's + initialization methods so that we can install a subclass of + ACE_Timer_Queue. This is in anticipation of Tim's new + "real-time" implementation of a timer queue. + + * ace/Reactor: Changed the internal Reactor name + ACE_Notification_Handler to ACE_Reactor_Notify to be consistent + with the ACE_ReactorEx_Notify class. + + * examples/Reactor/Misc/test_demuxing.cpp: Revised this test so + that it now illustrates the new notification mechanism of the + ACE_Message_Queue class. + + * examples/Reactor/Misc: Changed the name of the signal_tester.cpp + file to test_demuxing.cpp, which is really what this does. + + * ace/{Strategies,Message_Queue}: Created a suite of + "Notification Strategies" that are used with the new + ACE_Message_Queue notification scheme. This works as + follows: + + 1. There's a new virtual hook method on ACE_Message_Queue + called notify(). Whenever a new Message_Block is + enqueued the notify() hook is called. By default, this + does nothing. + + 2. If you want to do something with the notify() hook, you + have two choices: + + a. You can subclass from ACE_Message_Queue and + override this method. This is an example of the + "Template Method" pattern. + + b. You can configure an ACE_Notification_Strategy * + into an ACE_Message_Queue. An + ACE_Notification_Strategy is the vehicle for + extending the behavior of ACE_Message_Queue wrt + notification *without subclassing*. Thus, it's an + example of the Bridge/Strategy patterns. + + 3. ACE_Notification_Strategy is defined in + ace/Strategies.{h,cpp}. There are two pre-defined + subclasses: + + a. ACE_Reactor_Notification_Strategy -- integrates the + ACE_Message_Queue notification into the + ACE_Reactor::notify() method. + + b. ACE_ReactorEx_Notification_Strategy -- integrates + the ACE_Message_Queue notification into the + ACE_ReactorEx::notify() method. + + Both of these can be used almost identically in order to + seamlessly integrate multiple threads of control, inserting + ACE_Message_Blocks in one or more ACE_Message_Queues, with + the various ACE event demultiplexors (i.e., ACE_Reactor + and ACE_ReactorEx). + + * ace: Created a new pair of files called Strategies_T.cpp and + Strategies_T.h and move the template ACE_*Strategies classes + into those files. This was necessary since there are now new + non-template notification strategies in Strategies.{h,cpp}. + + * ace/Message_Queue: Created a new "notification hook" mechanism + that makes it possible for event demuxers (like ACE_Reactor and + ACE_ReactorEx) to be informed automatically when a Message_Block + is inserted into the Message_Queue. This is useful for + sitations where you'd like to integrate multiple threads (each + of which is pumping data into an ACE_Message_Queue) with an + ACE_Reactor or an ACE_ReactorEx. Thanks to Matthias Kerkhoff + and Luca for suggesting this. + + * ace/Synch.h: Modified the implementation of + ACE_Null_Condition_Mutex::wait() so that it always returns -1 + and sets errno to ETIME. This reflects the fact that if you'll + never be awakened if you "sleep" on a Null_Condition... + + * ace/ReactorEx: Generalized the ACE_ReactorEx so that its + notify() method now behaves like the ACE_Reactor, i.e., it can + queue up ACE_Event_Handlers that are dispatched in the ReactorEx + thread of control. + + * tests: Renamed the Shared_Memory_MM_Test.cpp to + MM_Shared_Memory_Test.cpp and remove the + Shared_Memory_SV_Test.cpp since it was redundant to the + SV_Shared_Memory_Test.cpp. + + * tests/SV_Shared_Memory_Test.cpp (main): Revised the SVSV IPC + shared memory test to be more robust. + + * ace/SV_Semaphore_Simple.cpp (open): If the char *name == 0 then + use ACE_DEFAULT_SEM_KEY instead. + + * ace/Memory_Pool: Generalized the ACE_Shared_Memory_Pool so that + there can be more than 1 shared memory pool active at a time + (similar to what we did for ACE_MMAP_Memory_Pool). + + * ace/Memory_Pool.h: There was an unnecessary + ACE_SV_Semaphore_Complex in ACE_Shared_Memory_Pool that was left + over from earlier days. I've removed this. + + * ace/Memory_Pool.cpp (ACE_Shared_Memory_Pool): Revised + the constructor so that if we get a NULL pool_name we'll + initialize the + + * examples/Makefile: Added the System_V_IPC and Shared_Memory + directories. + + * ace/Message_Queue.h: Added a virtual destructor to + ACE_Message_Queue so that it can be destroyed appropriately, + even if subclassed. + + * ace/Message_Queue.h: Renamed enqueue() to enqueue_prio() to be + consistent with the other names (e.g., enqueue_head() and + enqueue_tail(). Updated the test programs to reflect this. + +Sun Dec 1 12:06:46 1996 David L. Levine + + * ace/config-vxworks*.h: Removed #define ACE_HAS_STRBUF_T: + copy and paste error + +Sun Dec 1 00:15:45 1996 Irfan Pyarali + + * ace/OS.h: ACE_NEW_RETURN and ACE_NEW were reverted back to the + old implementation. This is temporary till the infinite loop + problem with ACE_ERROR, ACE_DEBUG and ACE_TRACE being called + from ACE_Log_Msg::instance() is fixed. + + * ace/Synch.h: Repositioned ACE_Semaphore such that there are no + problems in compiling ACE_Process_Semaphore under Win32. + + * ace/config-win32-msvc4.0.h: Changed ACE_HAS_STL to + ACE_HAS_STANDARD_CPP_LIBRARY which is more descriptive (and what + is expected by stdcpp.h). + + * ace/Registry.h: Added the setting of NOMINMAX and + VC_PLUS_PLUS_NESTED_CLASS_PROBLEM flags so that STL behaves + properly. + + * ace/Log_Msg.cpp (open): Fixed a small bug such that msg_ostream + is only set this to cerr if it hasn't already been set. + + * STL: Updated the STL directory will latest code from + http://www.rahul.net/terris/ and also added the original + readme2.stl file. Created ACE_Changes which has the list of + changes made to the STL distribution. + +Sat Nov 30 12:02:00 1996 Douglas C. Schmidt + + * ace/OS.h: Added a new pragma that disables warning #4097 in + MSVC++ (typedef-name used as synonym for class-name). This + keeps Win32 clients from getting warning on Win32. Thanks to + Matthias Kerkhoff for this. + + * ace/Log_Msg.cpp: Created a new macro called ACE_NEW_RETURN_I, + which is used withing ACE_Log_Msg::instance(). We can't afford + to call ACE_LOG_MSG->instance() from within + ACE_Log_Msg::instance() or else we will recurse infinitely! + Thanks to Irfan for finding this. + + * ace/OS.i (mprotect): Added a #if !defined (ACE_LACKS_MPROTECT) + conditional compilation directive to support the EPLX real time + OS from CDC (based on LYNX). Thanks to Alexandre Karev + for reporting this. + +Sat Nov 20 12:23:45 1996 Prashant Jain + + * tests/Naming_Test.cpp (main): Added code that creates a unique + backing store name and removes the backing store every time + the test is run. + +Fri Nov 29 12:54:12 1996 Douglas C. Schmidt + + * ace/Stream.cpp (open): Changed tail->close() and head->close() + to delete tail and delete head now that we've got our new + changes. + + * ace/Module: Moved the destructor from the private part of the + class to the public part and changed things so that close() no + longer "deletes this." This is too confusing and error-prone. + In addition, changed the Module destructor so that it will try + to call close() only if close hasn't already been called. + + * ace/Synch.h: Moved ACE_Process_Semaphore out of the + ACE_HAS_THREADS section since this is available on platforms + that don't have threads. + + * Now that Log_Msg.h is being #included in OS.h, I removed all + other #includes of Log_Msg.h throughout the rest of ACE. + + * ace/OS.h: Rearranged the definition of the ACE_NEW and + ACE_NEW_RETURN macros so that they come at the end of OS.h. + This enables us to #include "ace/Log_Msg.h" here, as well, so + that we can make use of the ACE_LOG_MSG macro in the definition + of ACE_NEW and ACE_NEW_RETURN. + + * ace/Singleton.cpp (instance): Updated the ACE_Singleton + implementation to use the new ACE_NEW and ACE_NEW_RETURN macros. + + * ace/OS.h: Revised the ACE_NEW and ACE_NEW_RETURN macros so that + they check to see if the constructor of the newly allocated + object failed (i.e., by checking the ACE_LOG_MSG->op_status() + value). + + * tests/Reactors_Test.cpp: Added an ACE_ASSERT() after each + Reactor we create in order to make sure it worked. + + * tests/Reactors_Test.cpp: Added an ACE_Service_Config daemon + instance within main() in order to ensure that the Reactor is + cleaned up appropriately. This avoids problems with NT 4.0, + where there seems to be a bug if you don't shut down sockets + explicitly when the process exits. + + * tests/Pipe_Test.cpp (main): Improved the pipe test so that it + automatically iterates multiple times in order to test whether + there are problems with rapidly opening and closing NT socket + handles... + +Thu Nov 28 03:07:48 1996 Irfan Pyarali + + * netsvcs: netsvcs.mak and netsvcs.mdp were changed such that + it becomes easier to find ace.lib while compiling netsvcs.lib. + + * tests/Pipe_Test.cpp: Add more instances of ACE_Pipes to the test + and also added an option to close down the pipe. + +Thu Nov 28 00:53:16 1996 Douglas C. Schmidt + + * ace/config-sunos4-g++.h: This config file contained two + exclusive definitions + + #define ACE_HAS_SVR4_SIGNAL_T + + and + + #define ACE_HAS_SUNOS4_SIGNAL_T + + The first one was moved out. Thanks to Alexandre Karev + for reporting this. + + * ace/OS.h: + + #elif defined (ACE_HAS_SUNOS4_SIGNAL_T) + + was changed from + + typedef void (*ACE_SignalHandler)(void); + typedef void (*ACE_SignalHandlerV)(void); + + to + + typedef void (*ACE_SignalHandler)(...); + typedef void (*ACE_SignalHandlerV)(...); + + to make gcc happy. The first one was moved out. Thanks to + Alexandre Karev for reporting this. + + * ace/Pipe.cpp (close): Arrgh! Fixed a total braino where we + weren't using ACE_OS::closesocket() to close down the Win32 + ACE_Pipe implementation, which uses sockets... Thanks to Irfan + and Tilo for helping me figure this one out! + + * tests/CPP_Test.cpp: Completely reworked this test so that it + should run correctly on Win32 and UNIX. + +Wed Nov 27 16:50:17 1996 Douglas C. Schmidt + + * Put out a new beta of ACE 4.0.33. + + * tests/Mutex_Test.cpp (test): Fixed the test() function so that + it doesn't use the ACE_Thread_Control unless we explicitly want + to use threads. + + * tests/test_config.h: Added addition information about the + process id and thread id of the main thread. + + * ace/Synch.h: Speed things up a bit by conditionally #including + "ace/SV_Semaphore_Complex.h" only if we are compiling on a + non-Win32 platform or a POSIX platform. Thanks to Matthias + Kerkhoff for this. + + * ace/SV_Semaphore_Complex.h: Incorporated the new ACE_USING + macro, which is useful if you have + + class b { + a() + }; + + class d : private b { + b::a() // still works, but depriciated + using b::a() // should be used instead + }; + + Thanks to Matthias Kerkhoff for this. + + * ace/OS.h: Added a new macro called ACE_USING, which is used to + distinguish between platforms that support namespace "using" + semantics and those that don't. Thanks to Matthias Kerkhoff + for this. + + * examples/Misc/test_XtReactor[12].cpp: Had to add the infamous + #define String XtString before including Xm/PushB.h. Also, there + were some references to XtReactor when the class is now + ACE_XtReactor. Thanks to Gonzalo Diethelm + for reporting this. + + * ace/XtReactor.cpp (ACE_XtReactor): timeout_ was not being + initialized on the constructor, and that caused a core dump. + Thanks to Gonzalo Diethelm for reporting + this. + + * ace/SOCK.h: Put the open() call in the protected part of the + class since we generally don't want clients to call this + directly. Thanks to Eric Newton for pointing + this out. + + * ace/ACE.cpp: Fixed a bug where sin.sin_family was being set + rather than sin.sin_len. Thanks to Chuck Gehr + for reporting this. + + * ace/ACE.cpp: Enhanced the ACE::{send_n,recv_n} methods so that + they check to see if errno == EWOULDBLOCK when ACE_OS::send() or + ACE_OS::recv() returns -1. If that's the case, then they keep + iterating. + + Thanks to Mehdi TABATABAI for + this suggestion. + + * ace/Log_Msg.h: Fixed ACE_RETURN so that it only has 1 parameter + if ACE_NLOGGING is enabled. Thanks to Antonio Tortorici + for reporting this. + + * ace/config-vxworks*.h: Added ACE_NTRACE macros so that + tracing doesn't magically turn on! + + * ace/Task.cpp (activate): the &ACE_Task_Base::svc_run() argument + needs a cast to ACE_THR_FUNC, because that's what + ACE_Thread_Manager::spawn_n() requires. On VxWorks, + ACE_THR_FUNC functions return an int, while svc_run() returns + void *. Thanks to David Levine for this. + + * ace/Thread_Manager.cpp (kill_thr): I was mistakenly passing in + the thr_handle_ where I should have been passing in the thr_id_. + In addition, made sure we don't set errno to the wrong value... + Thanks to Ross Dargahi for reporting this. + + * ace/{Synch_T,Synch}.h: If we don't actually own the lock + anymore, don't try to do a release. Thanks to Jonathan Biggar + for reporting this bug. + + * ace/ACE.cpp (handle_timed_complete): Added an ex_handles mask so + that non-blocking connects will work correctly on Win32. Thanks + to Antonio Tortorici for + reporting this fix. + + * ace/Message_Queue.h: Updated the documentation to stress the + fact that the timeouts are specified in *absolute* time, rather + than in relative time. Thanks to Bob Dunmire + for reporting this. + + * tests/test_config.h: Modified the ACE_END_TEST macro so that the + log file is closed. This works around a problem on VxWorks + where destructors of static objects don't get closed + automatically. Thanks to David Levine for this fix. + + * ace/OS.i (rand_r): Added a fix for Digital UNIX so that rand_r + works correctly in MT settings. Thanks to Thilo Kielmann + for this. + +Wed Nov 27 16:12:00 1996 Tim H. Harrison + + * ace/Stream.cpp: Fixed a bug in ACE_Stream::open to + allow applications to specify a tail or a head without + having to specify both. This was needed by the ACE_Pipeline + application since it only needs a Pipeline-specific tail + (not a head). + +Tue Nov 26 18:00:25 1996 Douglas C. Schmidt + + * ace: Functions should not be declared with ACE_INLINE in a + .cpp file. Fixed this problem in the following files: + + SPIPE_Acceptor.cpp:116:ACE_INLINE + TLI_Acceptor.cpp:145:ACE_INLINE int + TLI_Acceptor.cpp:192:ACE_INLINE + Task.cpp:121:ACE_INLINE int + Task.cpp:130:ACE_INLINE void + + * ace/{OS,Thread}: Added Chuck Gehr's suggested change for the + pthread_keycreate() routine, which must take extern "C" + functions on MVC C++. This fix isn't perfect, but it should + allow the ACE library to build... + + * man: Updated all of the manual pages and HTML files. + + * ace/Signal.cpp: Updated the code so that we don't try to + register a static C++ dispatch method if ACE_HAS_SIG_C_FUNC is + defined. This fixes problems with the MVS C++ compiler... + Thanks to Chuck Gehr for this suggestion. + + * ace/OS.h: Added extern "C" { } wrappers around the signal + handling mechanisms if ACE_HAS_SIG_C_FUNC is defined. This + fixes problems with the MVS C++ compiler... Thanks to Chuck + Gehr for this suggestion. + + * ace/Reactor.cpp (open): Moved the initialization of the + ACE_Timer_Queue field to *before* the handler_rep_.open() call. + We do this first in case the handler_rep_ call fails (which it + sometimes does on Win32 when we restart applications quickly due + to the use of sockets as a notification mechanism). At least + this way the timer_queue_ isn't 0, so we can still use the + Reactor as a timer... Thanks to Tilo Christ for motivating + me to fix this. + + * ace/OS.i: Apparently, DIGITAL_UNIX gethostbyname() returns + thread-specific storage, so we can use this for + gethostbyname_r(). + + * ace/OS.i: Need to add: + + #else + + after line 3268: return (size_t) ACE_OS::sysconf (_SC_THREAD_STACK_MIN); + + otherwise we get a compile error: + + line 3296.1: CBC1331(W) Return value of type "unsigned int" is expected + + This is because no code ends up getting generated. Thanks to Chuck + Gehr for this fix. + + * ace/OS.i (ACE_PTHREAD_CLEANUP_PUSH): Removed an extraneous set + of parens. Thanks to Chuck Gehr for this fix. + + * ace/OS.cpp (thr_create): Oops, needed to add a check if thr_id + == 0 before assigning *thr_handle = *thr_id! Thanks to Prashant + for finding this. + +Tue Nov 26 21:06:13 1996 Irfan Pyarali + + * ace/Pipe.cpp (open): This change relates to Win32 code only. + Removed the reuse_addr flag to acceptor.open() so that we don't + try to reuse the acceptor socket immediately. Apparently, this + causes no end of trouble on Win32 as the following connect() + call fails (randomly). Now it should be possible to create + multiple ACE_Pipes in one process and hence create multiple + Reactors also without any problems. + + * tests/Pipe_Test.cpp: Added a ACE_Pipe test to check for the + creation of multiple pipes in a process. Also changed the + relevant makefiles and scripts. + +Tue Nov 26 11:27:33 1996 David L. Levine + + * tests/{CPP_Test,Mutex_Test,Shared_Memory_MM_Test,SPIPE_Test}.cpp: + added VXWORKS support for these tests by spawning a new thread + instead of forking a new process (the same as on Win32) + + * netsvcs/clients/Naming/Client/Client_Test.cpp (open): Added a + return 0 for success. + + * ace/Singleton.h: Modified the use of the ACE_NEW_RETURN macro so + we not only check if new has failed, but also check that the + constructor has succeeded. If it hasn't, we bail out... Thanks + to Luca for this suggestion. + + * ace/Log_Msg: Added a 4th parameter to log_hexdump() in order to + print out a comment. Thanks to Luca for this. + + * ace/ACE.cpp (ldfind): Changed the implementation to look for + ACE_DLL_SUFFIX rather than '.' since '.' might exist in the + pathname already... + + * Removed all the NT-specific svc.conf files and updated the other + files to use the new "auto-dll-suffix" feature in ACE. + + * ace/Synch_T.cpp (ts_get): Fixed a nasty bug introduced by recent + changes to ACE_TSS<>::ts_get(). The ACE_Mutex should be + ACE_Thread_Mutex. This should fix lots of nasty run-time bugs + seen with recent versions of the ACE 0.33 beta... + +Tue Nov 26 14:40:00 1996 David L. Levine + + * Log_Msg.cpp: fake out TSS on VxWorks in Log_Msg::instance() + by using a spare field in the task control block + + * tests/{CPP_Test,Mutex_Test,Shared_Memory_MM_Test,SPIPE_Test}.cpp: + added VXWORKS support for these tests by spawning a new + thread instead of forking a new process (the same as on + Win32) + + * OS.h: VxWorks can't handle the ACE_THR_FUNC typedef if + it's in the extern "C" block, so I moved it back out. + Also, the horrible GreenHills hack is no longer required. + + * OS.i: there's an ACE_OS_CALL_RETURN before a ::strncpy() call, + I changed it to ACE_OS_CALL. + + * OS.i: Added call to VxWorks ::mkdir() + + * Pipe.cpp: VxWorks doesn't know about TCP_NODELAY. + + * INET_Addr.cpp: get_host_name() is missing a return + statement, on VxWorks only + + * Thread_Manager.i: in ACE_Thread_Control::thr_mgr(), there + were two consecutive return statements, removed the first + one. + + * Time_Request_Reply.{h,cpp}: GreenHills warns that "type + qualifiers are meaningless" for declaration of const + ACE_UINT32 time(), so I removed them. + + * UPIPE_Stream.cpp, line 95: warning: integer conversion + resulted in a change of sign, so we cast n to int. + + * Map_Manager.cpp: in ACE_Map_Manager::resize_i(), variable + foo is unnecessary, so we omitted it. + + * tests/CPP_Test.cpp (and a few others) have references to + argv[0]: + +Tue Nov 26 03:15:22 1996 Irfan Pyarali + + * tests: Added Map_Manager_Test and Message_Queue_Test to + makefiles (NT and UNIX) and one-button scripts. + + * tests: (Barrier_Test.cpp Buffer_Stream_Test.cpp Mutex_Test.cpp + Priority_Buffer_Test.cpp Recursive_Mutex_Test.cpp + Shared_Memory_MM_Test.cpp) Fixed typos mainly and other small + changes. Also fixed logging file problems so to make logging + of tests more accurate. + +Mon Nov 25 00:23:40 1996 Douglas C. Schmidt + + * performance-tests/Synch-Benchmarks/Options.cpp (Options): + Reordered the initialization of data members to keep G++ from + complaining. + + * performance-tests/Synch-Benchmarks/pipe_thr_test.cpp: Changed + some types so that we don't get warnings. + + * tests/Mutex_Test.cpp (test): Added a "return 0". Thanks to + David Levine for reporting this. + + * ace/TTY_IO.cpp: Rearranged some definitions so that we don't get + "unused variable" warnings from g++. + + * ace/SOCK_Dgram.cpp (recv): Rearranged some definitions so that + we don't get "unused variable" warnings from g++. + + * tests/Priority_Buffer_Test.cpp (consumer): Fixed a typo -- I was + missing a *... Thanks to David Levine for reporting this. + + * ace/OS.h (ACE_SVC_FACTORY_DECLARE): Changed the macro so that it + defines a function with `extern "C"' linkage in order to be + consistent. + + * ace/OS.cpp (thr_create): Moved the conditional compilation test + for ACE_HAS_THR_C_FUNC outside of ACE_HAS_SETKIND_NP since MVS + doesn't have this! Thanks to Chuck Gehr for this info. + + * ace/OS.i (thr_sigsetmask): Replaced the tests for + ACE_HAS_DCETHREADS and ACE_HAS_SETKIND_NP with + ACE_LACKS_PTHREAD_THR_SIGSETMASK, which is more appropriate. + + * ace/OS.cpp (ace_mutex_lock_cleanup_adapter): Changed the + signature so that it returns "void" rather than "void *". + Thanks to Chuck Gehr for this. + + * ace/OS.h: Removed #include to avoid problems on + MVS. Thanks to Chuck Gehr for this. + + * ace/config-sunos5.5-sunc++-4.1.h: It looks like SunC++ 4.1 still + doesn't fix their template typedefs bugs. So I've commented + this out in the config file. Thanks to Fred LaBar + for reporting this. + + * ace/ACE.cpp (ldfind): Added support for a new feature that will + append the default suffix (e.g., ".dll" or ".so") for a shared + library on the current platform to the name of the file if it + cannot find an suffix. It will also check that a provided + suffix will match the default suffix for that platform and if it + doesn't it will produce a log entry with a warning. This change + will allow unified svc.conf-files for both UNIX and WinNT. + Thanks to Tilo Christ for this. + + * ace/OS.cpp (thr_create): Came up with a remarkably clever scheme + that should make it possible to utilize the ACE library *without + change* on MVS, where the frigging C++ compiler requires all + functions passed to pthread_create() have an extern "C" linkage. + The trick was to generalize the thread adapter mechanism used + for Win32. + + * ace/OS: Added a new macro called ACE_PTHREAD_CLEANUP_PUSH that + selects the right mechanism (e.g., ace_spawn_adapter or not) for + passing functions to pthread_cleanup_push(). + + * ace/config-mvs.h: Added a new macro called ACE_HAS_THR_C_FUNC + which expresses the fact that the MVS C++ compiler *must* have + an extern "C" function passed to pthread_create(). + + * ace/OS.h: Modified all uses of ACE_OS::mutex_lock_cleanup() to + use the extern "C" ace_spawn_adapter() on platforms MVS like MVS + that can't deal with non-C functions to pthread_create. Thanks + to Chuck Gehr for reporting this. + + * ace/OS.cpp (thr_create): Added Chuck Gehr's patches for MVS. + +Sun Nov 24 12:30:45 1996 Douglas C. Schmidt + + * ace: Added Chuck Gehr's config-mvs.h + file! + + * ace: Began adding support for WinSock 2.0. Thanks to Luca for + this. + + * ace/UPIPE_{Acceptor,Connector,Stream}: Updated the UPIPE + components so that they keep a reference count that keeps track + of the number of "owners" (which should always be 2 -- one for + the connector-side and one for the acceptor-side). By keeping + this count, we can ensure that we don't close down the + underlying ACE_Stream until both sides have called close(). + This will remove a nasty bug that was lurking in some of the + tests. + + * ace/Message_Block.h: Added a new copy() method that assumes the + buf passed in is a NUL-terminated string. + + * tests/UPIPE_SAP_Test.cpp: Modified this test so that threads + exit in a well-defined order. This should prevent problems on + Win32. + + * ace/OS.i: Changed SIGNAL_SAFE_OS_CALLS to + ACE_HAS_SIGNAL_SAFE_OS_CALLS to be consistent... + + * ace/config-vxworks*.h: Removed the SIGNAL_SAFE_OS_CALLS #define + from the VxWorks config files. There's no need to use this by + default. + + * ace/Event_Handler: Moved all the default implementations of the + virtual methods in ACE_Event_Handler from the *.i file to the + *.cpp and made them no longer be inlines. This will fix some + problems with some compilers (e.g., MSVC++ 4.1) and is also more + reasonable since there's really no purpose for inlining these + virtual functions since they are rarely called. Thanks to James + Michael Dwyer for reporting this problem. + +Sat Nov 23 12:39:03 1996 Douglas C. Schmidt + + * ace/Svc_Conf.y: Changed the parser so that it accepts DLL + pathnames that lack *.dll or *.so suffixes. This is necessary + so that we can automatically append the correct suffix depending + on the platform. Thanks to Tilo Christ + for suggesting this. + + * ace/Makefile: Updated the Makefile so that it will automatically + insert the appropriate so that conditions for include of + ace/OS.h can be checked correctly. + +Fri Nov 22 18:12:49 1996 Douglas C. Schmidt + + * ace/OS.i (thr_sigsetmask): DCE threads (at least as implemented + by Digital) have no means for setting the signal mask on a + per-thread basis. Therefore, modified the code so that it + correctly returns ACE_NOTSUP_RETURN(-1) for DCEthreads. Thanks + to Thilo Kielmann for + chasing this down. + + * performance-tests/Synch-Benchmarks/synch_driver.cpp (run_test): + Fixed this implementation so that it will shut down correctly + when a signal occurs or a timeout occurs (whichever comes + first). + +Fri Nov 22 08:02:39 1996 Irfan Pyarali + + * ace.{mdp,mak}: Changed ace.mak so that it links with the + non-debug version of Microsoft's multithreaded dll when compiled + with the release option + +Thu Nov 21 10:37:40 1996 Douglas C. Schmidt + + * ace/Service_Config: Changed the implementation of the + Service_Config class so that it no longer inherits from + ACE_Event_Handler. This was causing problems because the new + reactor() method in the ACE_Event_Handler was conflicting with + the static reactor() method on ACE_Service_Config. + + * ace/OS.cpp (detach): Since we no longer use an + ACE_Recursive_Thread_Mutex, we can remove the line + + else if (ACE_TSS_Cleanup::lock_.get_nesting_level () > 1) + // ... + + Thanks to Matthias Kerkhoff for + reporting this. + + * ace/Thread_Manager.cpp (spawn_n): Replaced int i with size_t i + to avoid warnings between signed and unsigned values. + + * ace: There is an easy way to speed up the "Update dependencies" + in MSVC. Just keep the the compiler from complaining about + missing header by inserting a comment like below in the + #include-directives which are not used in Win32. + + Therefore, instead of + + #include + + we use + + #include /**/ + + Please let me know if this causes problems for any + pre-processors. Thanks to Matthias Kerkhoff + for this suggestion! + + * ace/OS.cpp: Added support for AfxBeginThread in + ACE_OS::thr_create() and ACE_OS::exit(). Now ACE should work + with MFC when you give the THR_USE_AFX flag to + ACE_OS::thr_create()! Thanks to Matthias Kerkhoff + for this! + + * ace/Malloc_T.cpp (avail_chunks): Changed the return value to + ssize_t so we can return -1 if we can't get the lock. Thanks to + Tilo for reporting this. + + * ace/config-sunos4-sun3.x.h: Added new #ifdefs for Sun C++ 3.0.1 + on SunOS 4.1.3. Thanks to Eric Parker + for these fixes. + + * ace/Stack.h: Added a new method called peek() to the + ACE_Unbounded_Queue classes so that the first element can be + retrieved without removing it. Thanks to Luca for this + suggestion. + + * ace/SString.cpp (ACE_CString): Changed ACE_CString so that it + uses memcpy() rather than str(n)cpy() so that we can store any + structure into it. Thanks to Luca for this suggestion. + + * ace/Acceptor: Since we moved the reactor() accessors to + ACE_Event_Handler we can omit these from the Acceptor and + Svc_Handler. + + * ace: Updated the ACE_Reactor and ACE_ReactorEx so that they + automatically sets the pointers in ACE_Event_Handlers. Thanks + to Luca for this suggestion. + + * ace/Event_Handler: Added pointers to all the ACE demultiplexors + (e.g., ACE_Reactor, ACE_ReactorEx, and ACE_Proactor) to + ACE_Event_Handler, along with set/get accessor methods. This + supports a very common use-case where an event handler keeps + track of its demultiplexor. Thanks to Luca for this suggestion. + + * ace/OS.cpp: Since we do not use the recursion count from the + Recursive Mutex any more in ACE_TSS_Cleanup::exit() we can + replace the Recursive Mutex by a regular ACE_Thread_Mutex that + is recursive on NT natively and more efficient. Thanks to + Detlef for suggesting this. + + * ace/OS.cpp: Since we do not use the recursion count from the + Recursive Mutex any more in ACE_TSS_Cleanup::exit() we can + replace the Recursive Mutex by a regular ACE_Thread_Mutex that + is recursive on NT natively and more efficient. Thanks to + Detlef for suggesting this. + + * ace: Backed out all of Detlef's changes to ACE_OS and + ACE_TSS::ts_get(). It turns out that this is unnecessary since + he reimplemented ACE_TSS_Cleanup so that it no longer needs to + hold the lock when callbacks are made. Once again, Detlef + proves that he's a macho man, not a boy ;-) + +Thu Nov 21 08:12:51 1996 David L. Levine + + * include/makeinclude/platform_sunos5_sunc++_4.1.GNU: + put back the LD definition + + * include/makeinclude/platform_osf1_4.0_g++.GNU: + added LD definition to work with latest wrapper_macros.GNU + +Wed Nov 20 10:32:52 1996 Irfan Pyarali + + * tests: Mutex_Test.cpp Priority_Buffer_Test.cpp + Reader_Writer_Test.cpp Thread_Pool_Test.cpp were changed + slightly to remove some compile time warnings. + +Wed Nov 20 21:35:28 1996 David L. Levine + + * ace/Svc_Conf_l.cpp: added #include of ace/config.h so that + conditions for include of ace/OS.h can be checked. + +Wed Nov 20 02:38:40 1996 Douglas C. Schmidt + + * ace/Service_Config.cpp: Moved the definition of logger_key_ to + OS.h and changed it to a macro (ACE_LOGGER_KEY) so that it will + be portable to Win32 and UNIX. Thanks to Tilo for reporting + this. + + * ace/OS: Changed the return value of ACE_OS::getgid() from uid_t + to gid_t to be POSIX compliant. + + * ace/OS.cpp (thr_create): Fixed a typo where we were assigning + stacksize rather than size. Thanks Thilo. + + * ace/OS.cpp (thr_create): Added a new piece of code for + ACE_NEEDS_HUGE_THREAD_STACKSIZE, which is necessary to create a + larger per-thread stack size in order to run ACE_Log_Msg::log. + Thanks to Thilo for this. + + * tests/TSS_Test.cpp: Changed the name of the static variable + "lock" to "cout_lock" to avoid a potential namespace clash on + Digital UNIX. Thanks to Thilo Kielmann for reporting this. + + * ace/SOCK_Dgram.cpp (recv): Added a cast (char *) + io_vec->iov_base so that this would work correctly on platforms + where iov_base is a void * (e.g., AIX and HP/UX). Thanks to + Alan Stewart for the change. + + * ace/OS.h: Added a few new changes for Digital UNIX 4.0a. These + should fix problems with ctime_r() and asctime_r(). Thanks to + Dave Trumble for the fixes. + + * tests/UPIPE_SAP_Test.cpp: Disabled this test if we don't have + threads and (STREAM Pipes or Win32). Thanks to Thilo Kielmann's + for this info. + +Tue Nov 19 23:09:08 1996 Tim H. Harrison + + * ace/Log_Record.cpp (print): Added a call to ACE_OS::fflush + before returning. This change was suggested by Luca in order to + help prevent messages from getting lost when applications exit. + We're unsure of the affects this will have on performance, so we + may change this back in the future. + +Tue Nov 19 00:06:57 1996 Douglas C. Schmidt + + * Released a beta version of ACE 4.0.33 for testing. + + * ace/TTY_IO.h: Added the ACE_Export macro before the ACE_TTY_IO + class to make things work correctly for Win32 DLLs. Thanks + to William L. Gerecke for fixing this. + + * ace/OS.h: Improved the support for RLIMIT_NOFILE. Thanks to + Alan Stewart for reporting this. + + * ace/OS.h: Removed the following code from OS.h because + it is causing problems on some platforms: + + #if (!defined (timespec) && !defined (m88k)) + #define timestruc_t struct timespec + #endif /* timespec */ + + Thanks to Fred LeBar for reporting this. + + * ace/OS.cpp (thr_create): Needed to create an + ACE_OS::NULL_hthread so that we can assign the "NULL thread + handle" on POSIX platforms. Thanks to Alan Stewart + for reporting this. + + * ace/OS.i: The HP/UX C++ compiler is unable to grok inline + functions with multiple returns. So I recoded the + ACE_OS::event* methods to avoid this. Thanks to Alan Stewart + for reporting this. + + * ace/OS.h: Moved the "undef" of t_errno until after the inclusion + of mman.h and dlfcn.h to prevent problems with DU4.0a. Thanks + to David Trumble for reporting + this. + + * ace/Pipe.cpp (open): Fixed a typo where + this->ACE_SOCK::set_option() was being used instead of + writer.set_option(). Thanks to Tilo Christ + for reporting this. + + * ace/Message_Queue.h: Fixed a bug where + + ACE_Message_Queue &queue_; + + should be: + + ACE_Message_Queue &queue_; + + Thanks to Rick Orr for + reporting this. + + * apps/Makefile: Updated the Makefile so that it no longer tries + to look for Synch-Benchmarks. Thanks to Amos Shapira + for reporting this. + + * ace/Activation_Queue.cpp (dequeue): Added a sanity check to make + sure that we actually deleted the first element in the queue. + Thanks to Andres Kruse for reporting + this. + + * include/makeinclude/platform_sunos5_sunc++_4.1.GNU: Added a + minor change to remove the libACE.a archive prior to creating a + new one. This works around bugs with the SunOS 4.x C++ + compiler. Thanks to Andres Kruse for + reporting this. + + * ace/Malloc_T.cpp (avail_chunks): Added Fred LeBar's code and + comments for computing the available chunks. + + * tests/Mutex_Test.cpp: Rewrote the Mutex_Test so that it behaves + correctly on UNIX and Win32. Thanks to Irfan for reporting the + problem. + + * ace/Log_Msg.cpp (sync): Somehow, the statement that updated the + pid_ after sync() is called following a fork() got removed, so I + put it back in. + + * ace/config-sunos5.*-g++.h: Added the + -D_REENTRANT flag to the config files for the G++ version of + ACE. This fixes a nasty problem that otherwise arises when + compiling on SunOS 5.x. Thanks to Hanan Herzog + for reporting this. + +Tue Nov 19 21:14:15 1996 David L. Levine + + * performance-tests/Synch-Benchmarks/Benchmark.{h,cpp}: + use thread ID class for VxWorks as well as Pthreads. + + * OS.i, config-{osf1-4.0,sunos5.[45]}-g++.h: Moved GNU + #include out of config files and into OS.i. + + * ace/Svc_Conf_l.cpp: added #include of ace/OS.h for HPUX and + VxWorks. + + * ace/Token.cpp: reordered initializations in Ace_Queue_Entry + ctor to match declaration order. + +Mon Nov 18 00:47:27 1996 Douglas C. Schmidt + + * ace/OS.h: Added a new #define called ACE_HAS_BROKEN_CONVERSIONS + to workaround problems with the HP/UX C++ compiler, which + doesn't seem to be able to grok foo->operator T *(). Thanks to + Alan Stewart for reporting this bug and the fix. + Also updated the config-hpux*.h files with this define. + + * examples/Misc: Added a new test (test_get_opt.cpp) which + exercises the ACE_Get_Opt class. + +Sun Nov 17 13:00:02 1996 Douglas C. Schmidt + + * ace/Get_Opt: Replaced the GNU-based implementation of class + ACE_Get_Opt with an implementation based on BSD UNIX. The + advantage here is that the BSD version is not encumbered by the + GNU GPL. Thus, ACE has no more dependencies on GNU GPL. Thanks + to James Hu for finding the BSD code. + +Mon Nov 18 00:13:25 1996 Tim H. Harrison + + * ace/stdcpp.h: Added this file to ACE. This file contains the + portability ugliness for the Standard C++ Library. As + implementations of the "standard" emerge, this file will need to + be updated. Although not very useful now, we are gearing up for + a support for STL on UNIX and NT. + + * ace/OS.h: Added an include "ace/stdcpp.h". + + * ace/Log_Record.h (ACE_Log_Record): Removed the iostream include + mess that got accidentally committed to the release. + +Sun Nov 17 00:13:25 1996 Tim H. Harrison + + * For some totally evil reason, MSVC++ will not allow any use of + the "allocator" symbol. It's an STL thing. As a result, I've + had to change all of the following files to rename allocator to + alloc: Local_Name_Space_T.cpp, Map_Manager.cpp, Malloc_T.cpp, + Message_Block.cpp, Read_Buffer.cpp, SString.cpp. The root + of the problem can be seen by compiling the code below: + + template + class foo {}; + + int foo; // compile error because of the foo<> class. + + int main () { return 0; } + + * Service_Config.{h,cpp}: We have to change the allocator + accessors to alloc. This is probably going to break + many things. If necessary, we can conditionally compile in the + old accessors for platforms that are not using STL and MSVC++. + + * ace/Task.h: Added ACE_Export macros to the class definitions. + +Sun Nov 17 13:00:02 1996 Douglas C. Schmidt + + * ace: Added Thilo Kielmann's + patches for OSF/1 4.0a. + + * ace/OS: Revised the implementation of ACE_OS::asctime_r() and + ACE_OS::ctime_r() to simplify common cases. However, this may + have broken some code on OSF/1 4.0a. Can someone please check + this? + + * tests/SPIPE_Test.cpp: Conditionally compiled this file so that + we only build the SPIPE test if (1) we're running on Win32 or + (2) ACE_HAS_STREAM_PIPES. Thanks to David Levine for this + suggestion. + + * ace/OS.i (ctime_r): Fixed a typo that was caused by a misplaced + #endif. Thanks to Eshel Liran for + reporting this. + + * ace/Time_Value: Disabled ACE_TRACE within these method in order + to prevent infinite recursion. + + * ace/Log_Record: Originally, when verbose mode was enabled you + can get the date and time down to the seconds. However, it is + useful for performance testings to have milliseconds displayed + in the log. To accomplish this, I changed ACE_Log_Msg and + ACE_Log_Record to they also keep track of and print the microsec + time, as well. Thanks to Luca for suggesting this. + + * ace/Map_Manager.cpp: updated all the ACE_Map_Manager methods so + their read and write Guards use the ACE_*_GUARD macros. + + * ace/Malloc_T.cpp: Updated all the ACE_Malloc methods so their + read and write Guards use the ACE_*_GUARD macros. + + * ace/OS.cpp (svc_run): Added an ACE_DEBUG announcing that an + exception has propagated beyond the outermost svc_run() + function. Thanks to Luca for this suggestion. + + * tests/test_config.h: VxWorks passes in a NULL argv (arrghhh...). + Therefore, to work around this in the ./tests directory, I changed + the ACE_START_TEST macro to take a NAME parameter, and then I + added the following local variable: + + const char *program = argv ? argv[0] : NAME; + + Thanks to David Levine for this fix. + +Sat Nov 16 12:01:08 1996 Douglas C. Schmidt + + * examples/Threads/test_tss2.cpp: Added Detlef's new test for + ACE_TSS. + + * ace/Synch_T.cpp (ts_get): Added Detlef's changes to fix deadlock + problems with ACE_TSS on NT. + +Fri Nov 15 18:01:26 1996 Douglas C. Schmidt + + * ace/ACE_SOCK_Stream.cpp: NT will signal an abortive close + to the opposite party if a socket is closed before all of its + data has been sent out. According to the NT SDK-docs, you should + do a shutdown before the closesocket() in order to prepare a + graceful close. Thus, I've placed an + ACE_SOCK_Stream::close_writer() method just before the call to + ACE_SOCK::close() in the new close() of the ACE_SOCK_Stream + class. Thanks to Tilo Christ for + this suggestion. + + * ace/INET_Addr.cpp: The function ACE_INET_Addr::addr_to_string + was a virtual function that is also inline and defined in the .i + file. Some compilers have a problem with this, so I moved it + into the *.cpp file. In addition, its sister function was also + virtual and is defined as: + + ACE_INLINE int + ACE_INET_Addr::string_to_addr (const char s[]) + + in the .cpp file. I removed the ACE_INLINE directive. Thanks + to Fred LaBar for reporting this. + +Thu Nov 14 16:20:20 1996 Douglas C. Schmidt + + * ace/Malloc_T.cpp: Added a new method to ACE_Malloc that will + return the number of chunks available on the free list. Thanks + to Fred Labar for this. + +Wed Nov 13 01:22:16 1996 Douglas C. Schmidt + + * ace/ReactorEx.cpp (handle_events): I've changed siginfo_t on + Win32 (which was previously typedef'd to int) so that it has the + following structure: + + struct siginfo_t + { + siginfo_t (ACE_HANDLE handle); + + ACE_HANDLE si_handle_; + // Win32 HANDLE that has become signaled. + }; + + Then, I've changed the ACE_ReactorEx::handle_events() method to + look like this: + + // Assign the ``signaled'' HANDLE so that callers can get + // it. + siginfo_t sig (relative_handles[relative_index]); + + if (relative_handlers[relative_index]->handle_signal + (0, &sig) == -1) + + Thus, you can refer to the signaled handle as + + si_handle_ + + within the handle_signal() call back. Thanks to Matthias + Kerkhoff for suggesting this. + + * ace/System_Time.h: Made ACE_System_Time::get_local_time() a + static member function. Thanks to Matthias Kerkhoff + for suggesting this. + + * ace/Message_Queue.h: The internal variables for counting the + bytes stored in the queue were declared as of type int (in + Message_Queue.h). But they are set (e.g. with + ACE_Message_Queue::ACE_Message_Queue) with values of size_t. + + When running tests/Priority_Buffer_Test, the high_water_mark_ is + preset with the value LONG_MAX. While assigning this value from + size_t to int, this becomes -1 and the queue is always believed + to be full :-( The fix is to change the internal data structures + in Message_Queue.h from int to size_t. Thanks to Thilo Kielmann + for reporting this. + + * tests: Fixed problems with the following three tests: + + Priority_Buffer_Test.cpp + Reader_Writer_Test.cpp + UPIPE_SAP_Test.cpp + + When these are compiled with gcc on Digital UNIX 4.0a the static + ACE_Thread_Manager thr_mgr; was never getting initialized due to + gcc compiler bugs. The fix is to replace the static thread + manager with the ACE_Service_Config::thr_mgr() singleton. + Thanks to Thilo Kielmann for + reporting this. + +Tue Nov 12 19:43:12 1996 Douglas C. Schmidt + + * ace/Thread_Manager.cpp (spawn_n): Was missing a 0 after ?. + Thanks to Thilo Kielmann for + reporting this. + + * ace/Log_Msg.h: Created a new macro call ACE_ERROR_BREAK(X) { + ACE_ERROR(X); break;} for use within switch and loop statements. + Thanks to Luca for this idea. + + * ace/Pipe.cpp: Enabled the "reuse addr" flag for accepting and + connecting the Win32 version of ACE_Pipe. Thanks to Luca for + reporting this problem. + + * ace/OS.i (thr_join): ACE_Thread::join () has a default second + parameter (the status) set to 0. This is not handled in + ACE_OS::thr_join(). To avoid getting a system error in NT we + handle this as we did with ACE_OS::thr_create() and the + thr_handle parameter. + + * ace/config-irix6.2-sgic++.h: Updated the set of patches required + for IRIX 6.2. Thanks to Amos Shapira for reporting this. + +Sun Nov 10 15:40:17 1996 Tim H. Harrison + + * ace/Token_Invariants.cpp: Moved static data + declarations out of ACE_Token_Invariant_Manager::instance and + into the header file. This is supposed to help with a g++ + problem on VxWorks. + +Sun Nov 10 13:22:03 1996 Douglas C. Schmidt + + * ace/Pipe.cpp (open): Set the loopback socket into TCP_NODELAY + mode so that we don't block for 200 ms... Thanks to Luca + Priorelli . + + * ace/Thread_Manager: Created a new version of spawn_n() that + gives parameters for stack, stack_size, and also for the + assigned ACE_hthread_t's. Thanks to Thilo Kielmann + for suggesting this. + +Sun Nov 10 13:56:38 1996 Prashant Jain + + * tests/Reactors_Test.cpp (main): Fixed the test so that the + output of the test goes to a log file instead of STDOUT. + +Sat Nov 9 11:23:13 1996 Douglas C. Schmidt + + * ace/Synch.i: Fixed a bug in ACE_Thread_Mutex_Guard. + The call: + + this->owner_ == block ? this->lock_.acquire () : this->lock_.tryacquire (); + + should be + + this->owner_ = block ? this->lock_.acquire () : this->lock_.tryacquire (); + + Thanks to Alexander Smundak for reporting + this. + +Sat Nov 9 01:44:15 1996 Irfan Pyarali + + * ace/Message_Queue: Added forward and reverse iterators to + Message_Queue. Also, added typedefs to Message_Queue for + ITERATOR, and REVERSE_ITERATOR. This makes the Queue like an STL + collection and also makes it easier to use since you don't have + to define types for the iterators. Please see + test/Message_Queue_Test.cpp for an example. + + * ace/Map_Manager: Added reverse iterator to Map_Manager. Also, + added typedefs to Map_Manager for ENTRY, ITERATOR, and + REVERSE_ITERATOR. This makes the Map more like an STL collection + and also makes it easier to use since you don't have to define + types for the iterators and the entry. Please see + test/Map_Manager_Test.cpp for an example. Note that the new + typedefs does not break existing code. + +Fri Nov 8 20:04:26 1996 Douglas C. Schmidt + + * ace/Malloc.h: Fixed a typo on line 176 that reads: + + #include "ace/Sync_T.h" + + It should read: + + #include "ace/Synch_T.h" + + Thanks to Todd Barkalow for + reporting this. + +Wed Nov 6 00:38:02 1996 Douglas C. Schmidt + + * ace/Pipe: Added the const qualifier to the following methods: + + ACE_HANDLE ACE_Pipe::read_handle (void) const; + ACE_HANDLE ACE_Pipe::write_handle (void) const; + + Thanks to Luca for reporting this. + + * ace/config-win32-msvc4.0.h: Redefined + ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES since it looks like + MSVC++ 4.0 still doesn't work. Maybe this is fixed in 4.2? + +Tue Nov 5 03:09:44 1996 Douglas C. Schmidt + + * ace/Strategies.cpp: I'd forgotten to update one of the + accept(*svc_handler) calls to use the new + accept(svc_handler->peer()) syntax. + + * netsvcs/lib/Server_Logging_Handler.cpp: Added a cast to + (COUNTER) 0 when initializing ::request_count_ to avoid problems + on Win32. Thanks to Luca for pointing this out. + + * ace/Thread_Manager: Added a new thr_self() method that return + the unique ID of the thread. This is not strictly necessary + (because a thread can always just call ). + However, we put it here to be complete. Thanks to Hamutal Yanay + for suggesting this. + + * ace/OS.cpp (thr_create): I was accidentally closing down + ::CloseHandle (thr_handle) (where thr_handle is a HANDLE *) when + I should have been doing a ::CloseHandle (handle) instead. + Thanks to Luca for finding this! + +Tue Nov 5 14:26:32 1996 David Levine + + * include/makeinclude/wrapper_macros.GNU: Changed LINK.{c,cc} + commands to use LD instead of CXX. Changed all platform macros + files (except for g++ on VxWorks) to correspond. + + * tests/run_tests.sh: changed -e test to -f for portability and + reordered tests. Thanks to Michael Michael Rueger + for originally creating run_tests.sh, and + for maintaining it, and to Alan Stewart for + suggesting fixes/enhancements. + + * tests/Time_Service_Test.cpp and Tokens_Test.cpp: changed to + return 0 on success instead of 42 + +Fri Nov 1 03:53:39 1996 Irfan Pyarali + + * STL: Added STL files to $WRAPPER_ROOT/STL. This code is a + modified version (changes for VC++ compiler) of the publicly + available implementation of STL from HP. Currently, + ACE_Registry uses these STL classes. + +Fri Nov 1 00:25:01 1996 Douglas C. Schmidt + + * ace/CORBA_Handler.cpp (process_events): There was a very subtle + race condition in the ACE_MT_CORBA_Handler. process_events() + accessed the singleton directly without taking the mutex. At + startup the process_event thread is kicked off from the + constructor and the instance_ is set. Hence the race. The + solution is to attempt to take the mutex before accessing the + instance. Thanks to David Artus for + reporting the problem and providing the fix. + + * ace/Log_Msg.cpp (log): Improved the performance of the Log_Msg + mechanism by not doing any parsing of the format string if the + user has disabled this priority. + + * ace/Reactor.cpp: Added a chance for the open() method of the + Notification_Pipe failing. Thanks to Luca for pointing this + out. + + * ace/Reactor.cpp (handle_events): Added a change to the semantics + of the ACE_Reactor so that it doesn't fall out of the event loop + when signals arrive that it handles. Thanks to Stuart Powell + for this fix. + + * ace/Service_Repository.cpp (remove): Fixed a bug with + Service_Record::remove() that was failing if there were only two + records and we are removing the first one. Thanks to Alex + Villazon for reporting this. + + * ace: Recompiled everything on Solaris with G++ and CC and it + seems to work fine. + + * ace/Module: Replaced the use of char * with const char * for + assigning the Module a name. + + * ace: Split the Task.{cpp,i.h} file into Task_T.{cpp,i,h} in + order to factor out the new non-template ACE_Task_Base and + ACE_Task_Exit classes. This is required for GCC-based compilers + that include the *.cpp files... + +Thu Oct 31 00:36:38 1996 Douglas C. Schmidt + + * ace/Malloc_T.h: Made the destructor of ACE_Allocator_Adapter + virtual. + + * ace/Thread: Reorganized the ACE_Thread so that the + ACE_HAS_THREADS #ifdef is no longer required... + + * ace/Strategies.h: Changed all the destructors to be virtual so + that G++ will stop complaining... + + * ace/Thread_Manager: Reorganized the ACE_Thread_Manager so that + the ACE_HAS_THREADS #ifdef is no longer required... + + * ace/config-win32-msvc4.0.h: Added Dieter Quehl's great hack to + get ACE to compile correctly on Win32 with MFC! + + * ace/Task: I've rearranged the implementation of ACE_Task<> + in the following way: + + 1. Defined a non-template class ACE_Task_Base from which the + ACE_Task<...> inherits (instead of inheriting from + Ace_Service_Object, which ACE_Task_Base now inherits from. + + 2. Move all methods that don't depend on the or + modifers from the ACE_Task template to + ACE_Task_Base. + + There are two motivations for making this change: + + 1. It reduces ``template bloat'' by factoring out common + code that can be shared between ACE_Task + and ACE_Task. + + 2. It makes it possible for the Thread_Manager to use + ACE_Task_Base *'s for managing groups of ACE_Tasks + in a fully polymorphic manner. + + Note that the new changes don't break any existing code that + uses ACE_Task. Thanks to Hamutal Yanay + and Ari Erev's + for suggesting these changes. + + * ace/Thread_Manager: Changed the use of ACE_Task to + ACE_Service_Object because this avoids nasty problems with + template type conflicts. The right solution is probably to + create a new non-template base class for ACE_Task called + ACE_Task_Base and move all the ACE_Task operations into there + that don't involve the Message_Queue directly. I'll need to + think more about this... + + * ace/SOCK_Stream: Added new timed send_n() and recv_n() methods, + which use the underlying timed ACE::send() and ACE::recv() + calls. + + * ace/ACE.cpp: Added new timed send_n() and recv_n() methods, + which use the underlying timed ACE::send() and ACE::recv() + calls. + +Wed Oct 30 00:27:21 1996 Douglas C. Schmidt + + * ace/OS.h: Changed MAXHOSTNAMELEN on Win32 from + (MAX_COMPUTERNAME_LENGTH+1) (which is around 16 or so) to 256. + Thanks to Tilo Christ for this + suggestion. + + * ace: Made #define STRICT a compile time option if the + ACE_HAS_STRICT flag is enabled. This prevents ACE from breaking + existing application (i.e., non-ACE) code. Thanks to Karlheinz + for pointing this out! + + * ace/Synch_T.cpp: Fixed a typo in ACE_Condition::wait + (void). + + return ACE_OS::cond_wait (&this->cond_, this->mutex_.lock_); + + should read + + return ACE_OS::cond_wait (&this->cond_, &this->mutex_.lock_); + + Thanks to Dieter Quehl for + reporting this! + + * ace/Svc_Handler.h: Removed the operator ACE_PEER_STREAM &() from + the ACE_Svc_Handler class since we don't need it anymore due to + the changes below. + + * ace/{Acceptor,Connector}.cpp: Removed the use of operator + ACE_PEER_STREAM &() in the Acceptor::accept() and + Connector::connect() code and replaced it with + svc_handler->peer(). This works much better and is more + intuitive. + +Wed Oct 30 00:30:00 1996 Irfan Pyarali + + * Registry: Added a Name Service implementation to ACE based on + Win32 Registry. The ACE_Registry interface is inspired by the + interface specified in the CORBA Naming Service Specification. + The implementation is done through Win32 Reg*() functions. + Other than providing an OO wrapper for the Win32 Reg*() + functions, ACE_Registry provides an abstraction for iteration + over the elements of the Registry. This only works on Win32 + platforms (unless you are brave enough to reimplement the + Win32 Registry API on UNIX and link it in underneath ACE!). + + * ace/Local_Name_Space_T.cpp: Moved SEH out of methods of + Name_Space_Map to the methods of Local_Name_Space. Some of + the calls to Local_Name_Space methods used the allocator to + either malloc or find or free shared memory. Adding SEH to these + methods ensured that any exception raised due to remapping would + be caught and handled appropriately. + + Also, to fool the stupid MFC compiler, we added _i methods + so that it stopped bitching about destructors not getting called + correctly. + + * Added three new tests to /examples/Naming. Thanks to Lothar for + providing these tests. + +Tue Oct 29 18:10:09 1996 Douglas C. Schmidt + + * ace/ACE.cpp (send): Integrated a new and simpler version of + timed ACE::send(). Thanks to Vital Aza for + coming up with this. + + * ace/XtReactor.cpp: When the ACE_Reactor is constructed it + creates the notify pipe and registers it with the attach() + method. The XtReactor overloads this method BUT because the + attach occurs when constructing the base class ACE_Reactor, the + ACE_Reactor attach() is called not the XtReactor attach(). This + means that the notify pipe is registered with the ACE_Reactor + event handling code not the XtReactor and so notfications don't + work. To get around this we simply close and re-opened the + notification handler in the constructor of the XtReactor. + Thanks to Rodney Skinner for this fix. + + * ace/XtReactor.cpp (schedule_timer): The ACE_Reactor returns a + timer_id from it's equivalent call but the XtReactor always + returns 0. To fix this we simply replaced the "return 0;" in + the function with "return result;" Thanks to Rodney Skinner + for reporting this. + +Tue Oct 29 00:02:44 1996 Douglas C. Schmidt + + * ace/config-win32-msvc4.0.h: Defined the STRICT symbol based on a + suggestion from Luca. STRICT type checking in WINDOWS.H + enhances type safety for Windows programs by using distinct + types to represent all the different HANDLES in Windows. So for + example, STRICT prevents you from mistakenly passing an HPEN to + a routine expecting an HBITMAP. Note that if you have STRICT + type checking enabled in one file, but not in another, the C++ + compiler will generate different external link symbols for a + single function. This will result in link-time errors If you are + mixing STRICT and non-STRICT code, you must be aware of linkage + inconsistencies. In general, all MFC programming and all C++ + should be done with STRICT. If you have legacy C code, then not + using STRICT is acceptable + + * ace/OS.cpp (thr_create): Added a special check for the situation + where we have both ACE_HAS_PTHREADS and ACE_HAS_STHREADS + defined. In this case, we are running on Solaris, where + ACE_thread_t and ACE_hthread_t are the same. Therefore, we can + copy the value of the *thr_id into the *thr_handle. This + ensures that the ACE_Thread_Manager behaves correctly with + respect to suspending and resuming threads and ACE_Tasks. + + * ace/Trace.cpp (ACE_Trace): Changed the use of LM_DEBUG to + LM_TRACE in the constructor and destructor. Thanks to Luca for + this! + + * ace/OS.i: Added a cast to of (HMODULE) handle so that the STRICT + macro would work correctly for Win32. Thanks to Luca for this. + + * ace/config-win32-msvc4.0.h: According to Luca, ACE compiles file + with ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES undefined on NT. So + I undefined it! If there are any problems with this, please let + me know. + + * ace/SOCK_Dgram: Added Luca Priorelli + implementation of recv() for SOCK Dgrams that allows clients to + read from a socket without having to provide a buffer to read. + + * examples/Threads/test_task_four.cpp: This is a new test + program to test the new interfaces. Thanks to Hamutal Yanay + & Ari Erev for this. + + * tests/test_config.h: Added a call to the new ACE_OS::mkdir() + wrapper to create the log directory if one doesn't already + exist. This should solve some nasty problems with NT reported + by Tilo Christ . + + * ace/OS.h: Added a new macro ACE_DEFAULT_DIR_PERMS and changed + the spelling of the existing ACE_DEFAULT_PERMS to + ACE_DEFAULT_FILE_PERMS, which is more accurate. + +Mon Oct 28 21:35:12 1996 Douglas C. Schmidt + + * ace/OS.h: Added a wrapper for the mkdir() system call. We need + it for some of the tests. + + * ace/Task: Changed the name of ACE_Task_Exit<>::set_this() to + ACE_Task_Exit<>::set_task(). Thanks to Hamutal Yanay & Ari Erev + for suggesting this. + + * ace/{Task,Thread_Manager}: Integrated Hamutal + Yanay & Ari Erev's + enhancements to add ACE_Task support + to the ACE_Thread_Manager. This allows the ACE_Thread_Manager to + know about ACE_Tasks directly, rather than knowing + indirectly via their lower-level thread IDs. The changes + are described below: + + - Added a parameter to the activate() method. It is used to + pass an ACE_Task* to spawn_n(). + + - Modified suspend() and resume() to call + thrMgr->suspend_task() and thrMgr->resume_task() instead of + thrMgr->suspend_grp() and thrMgr->resume_grp(). + + - Added an ACE_Task * parameter to spawn_n(). + + - Added an ACE_Task * parameter to append_thr(). + + - append_thr() uses the ACE_Task * input parameter to + initialize the thread descriptor. + + - Added the following methods: + apply_task() + suspend_task() + resume_task() + kill_task() + resume_task() + cancel_task() + find_task() + + num_tasks_in_group() + num_threads_in_tasks() + + task_list() + thread_list() + hthread_list() + + set_grp() Like the current set_grp() but gets an ACE_Task * + as input. + get_grp() Like the current set_grp() but outputs an + ACE_Task *. + + wait_task() + wait_group() + +Sun Oct 27 11:25:00 1996 Douglas C. Schmidt + + * ace/OS: modified the ACE_OSCALL_RETURN macro so that we'll + no longer have zillions of warnings about _result not + used... + + * ace/Synch_T: Changed the use of ACE_Mutex for ACE_TSS to + ACE_Thread_Mutex. + + * ace: Added the necessary template specializations to get ACE + compiled correctly with G++. + + * ace/Log_Msg.h: There were some places in the ACE_{DEBUG,ERROR} + macros that should have been using __ace_error but there still + using errno (which is wrong since this might be changed due to + side-effects of calling ACE_Log_Msg::instance()). I found this + problem due to the use of -Wall with G++! As a result of this + fix, ACE now compiles much more cleanly with gcc -Wall. + + * ace/Strategy: Improved the scheme used to define the PEER_ADDR + type of the ACE_Accept_Strategy so that it will work correctly + on platforms whose C++ compilers aren't quite up to handling all + variants of template typedefs. In particular, many platforms + don't support the use of template typedefs in parameter names... + + * ace/OS: HP/UX omitted the const in the prototype of + const_timewait(). Therefore, I added a new typedef to handle + this and updated all the HP/UX config*.h files. + + * ace: Added a new config file (config-sunos5.5-sunc++-4.1.h) + which reflects the fact that SunC++ 4.1 fixes template bugs that + prevented earlier versions from supporting template typedefs + correctly. The new config file #defines + ACE_HAS_TEMPLATE_TYPEDEFS. + +Sat Oct 26 02:22:25 1996 Douglas C. Schmidt + + * ace: On the advice of David Levine, I compiled ACE with gcc + -Wall and started to fix lots of minor warnings (e.g., + misordered data member initializations). + + * ace/Local_Tokens.h: Changed the destructors of ACE_Mutex_Token, + ACE_RW_Token, ACE_Token_Proxy, and ACE_RW_Token to be virtual. + + * ace/Synch_T.h: Changed the destructor of ACE_TSS to be virtual. + + * ace/OS: Changed the prototype of ACE_OS::select() so that it + uses const ACE_Time_Value *. + + * Updated all uses of ACE_Malloc to use the new ACE_*_MEMORY_POOL + #defines. This makes it possible to use the ACE_Malloc<> scheme + with lame C++ compilers. + + * ace/ACE: Changed the interface of the new timed send/recv calls + to use ACE_Time_Value *, which makes it easier to determine + the blocking semantics at runtime. Thanks to Bill Fulton + for suggesting this. + +Sat Oct 26 15:55:02 1996 Irfan Pyarali + + * ace/OS.h: We determined that MSVC++ is capable of supporting + template typedefs. Therefore, we can enable the + ACE_HAS_TEMPLATE_TYPEDEFS flag, which makes life much easier for + end users! + +Fri Oct 25 23:16:16 1996 Irfan Pyarali + + * examples/Shared_Malloc/test_multiple_mallocs.cpp: Added a new + test that demonstrates the new ability of ACE_Malloc<> to to + handle multiple mallocs rooted at different base addresses. + + * ace/Memory_Pool: Fixed this stuff so that it works even when C++ + compilers can't grok template typedefs. + + * ace: Put all the macros that handle the fact that many C++ + compilers have broken template implementations into one place + (OS.h), rather than having this spread out in many files. + + * In ACE_MMAP_Memory_Pool::init_acquire (), we reset errno to 0 in + the case where the file already exists (and errno == EEXIST). + + * Added an ACE_*_Memory_Pool_Options class to each Memory Pool + class. The Options class allows detailed parameters to be passed + to the constructor of the Memory Pool class. Since a typedef'd + Options class was added to every Memory Pool class, this gave us + the ability to use traits in ACE_Malloc and + ACE_Allocator_Adapter to construct generic Memory Pools that can + be initialized uniquely for each instance of ACE_Malloc. Note + that this new feature only works for C++ compilers that support + template typedefs correctly (e.g., MSVC++ 4.x, SunC++ 4.1, + and the AIX C++ compiler). + + * Added additional constructors to ACE_Malloc and + ACE_Allocator_Adapter to allow Options to be passed in to Memory + Pool. + + * Added an extra field in ACE_Name_Options which allows + specification of the base address of the memory pool. This is + now used by ACE_Local_Name_Space::create_manager() to create an + ACE_Allocator_Adapter. This now allows us to have multiple + ACE_Naming_Context simultaneously in the same process address + space. + + * Also added error checking for constructors (in + ACE_Local_Name_Space and ACE_Malloc) by checking errno + values. This is a "hack" since we currently do not use exception + handling. + +Thu Oct 24 02:43:11 1996 Douglas C. Schmidt + + * examples/Connection/misc/Makefile: The Makefile in + ACE_wrappers/examples/Connection/misc seems to have been + truncated. I replaced it. Thanks to Alan Stewart + for reporting this. + + * examples/IPC_SAP/SOCK_SAP/CPP-{inclient,inserver}.cpp: Updated + these examples to use the new timed send()/recv() operations. + + * ace/SOCK_IO: Added timed send()/recv() methods, using the base + level implementations in class ACE. + + * ace/ACE: Added timed send()/recv() methods. + +Wed Oct 23 19:56:45 1996 Douglas C. Schmidt + + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp (main): Changed the + behavior of the test program so that it doesn't take a + local_addr, but rather will use the default (this prevents a + common problem that happens when users run the test without + reading the README file). + + * ace/ACE.cpp: Added a new method (get_flags) that returns the + current setting of flags associated with handle. + + * Start of a brave new world: ACE is now under CVS version + control... Thanks to David Levine and Chris Cleeland + for making this happen. + +Sat Oct 19 12:33:56 1996 David L. Levine + + * added ACE threads mappings to VxWorks 5.2 tasks in OS.*. + NOTE: this is _untested_ at this point, but only affects + VxWorks code + + * changed name of first argument of ACE_OS::sigprocmask() and + ACE_OS::thr_sigsetmask() from "signum" to "how" to better + represent what it really is. + +Wed Oct 16 01:59:40 1996 Douglas C. Schmidt + + * ace/Log_Record.cpp (print): added Luca's suggestion for checking + if host_name == 0 for the ostream version of print(), as well. + + * Released version of ACE 4.0.32 for testing. + + * ace/Synch.h: Added many small fixes for HP/UX 10.x. Thanks to + Alan Stewart for providing these. + + * ace/OS.h: Added many new ACE_LACKS* and ACE_HAS* macros to + support the MVS port. Thanks to Chuck Gehr + for these. + +Tue Oct 15 11:56:59 1996 Douglas C. Schmidt + + * ace/OS.h: in a continuing effort to protect the ACE namespace, + I've changed ace/OS.h around lines 127-137 so that "SYNCH" and + "SYNCH_MUTEX", etc. are prefixed with "ACE_". Thanks to Alan + Stewart for suggesting this. + + * ace/Local_Tokens.h: Removed an unnecessary parameter name + that was unused. Thanks to Stuart Powell + for reporting this. + +Tue Oct 15 17:03:37 1996 Tim H. Harrison + + * ace/ReactorEx.cpp (handle_events): Fixed a bug in handle_events + so that the correct handlers get called when multiple handles + become signaled simultaneously. Thanks to Ari Erev + for pointing out this bug. I also took + this opportunity to fix a bug when handlers are removed during + handle_events. + + * examples/Reactor/ReactorEx/test_remove_handler.cpp: Added a new + application that tests how the ReactorEx services simultaneous + events and removes handlers. This example also illustrates the + use of the new ACE_Events wrapper. Check + examples/Reactor/ReactorEx/README for more details. + +Mon Oct 14 11:43:18 1996 Douglas C. Schmidt + + * tests: Added a new version of run_tests.sh, which was + contributed by Michael Rueger . + + * examples/Logger/simple-server/Logging_Handler.cpp (handle_input) + and examples/Logger/Acceptor-server/server_loggerd.cpp + (handle_input): Changed from stderr to cerr to work around bugs + with the C run-time libraries on Win32. Thanks to Tilo Christ + for suggesting this. + +Mon Oct 14 11:09:42 1996 Prashant Jain + + * ace/Local_Name_Space_T.cpp (remap): Added processor specific + stuff to remap(). The code was taken from the book "Win32 + Network Programming" by Ralph Davis (p.18) and takes care of + cases specific to the 80x86 processor. The code ensures that the + registers are set properly when we continue execution after an + exception. + +Sun Oct 13 21:18:38 1996 Douglas C. Schmidt + + * ace/Log_Record.cpp (print): Added a test to make sure that the + value returned from ctime_r != 0 (e.g., if time_stamp_ == -1) in + order to avoid crashes. + + * examples/Logger/client/logging_app.cpp (main): Moved the + construction of the ACE_Log_Record log_record object into the + loop so that it will be recreated each time through. If this + isn't done, then we'll be continually "encoding" values into + network byte order that have already been encoded and screwing + things up on little-endian machines (such as Intel). Thanks to + Irfan and Tilo Christ for pointing + me in the right direction on this. + + * ace/Log_Record.cpp: Changed the default constructor so that it + gives default initializations to the data members. + + * examples/Logger/Acceptor-server/server_loggerd.cpp (handle_input): + Fixed a couple of typos where + + Logging_Handler::handle_input (int) + + should be: + + Logging_Handler::handle_input (ACE_HANDLE) + + and + + size_t len; + + should be: + + ssize_t len; + + Thanks to Irfan for finding these. + +Sat Oct 12 08:48:23 1996 Douglas C. Schmidt + + * Released a beta version of ACE 4.0.32 for testing. + + * ace/Log_Record.cpp: rewrote the code a bit to try and avoid + problems on NT when host_name == 0. + + * ace/Log_Record.cpp: Changed the use of ACE_OS::ctime() to + ACE_OS::ctime_r() to avoid problems that might arise when + ACE_Log_Record::print() is called from multiple threads. + + * ace/Log_Record.cpp: Commented out calls to ACE_TRACE to avoid + weird problems with circular dependencies. Thanks to Luca + Priorelli for suggesting this. + + * build/SunOS5.5/examples/Makefile: Added the Logger directory to + the list of targets that are build automatically by Make. + +Fri Oct 11 17:13:03 1996 Douglas C. Schmidt + + * ace: Fixed lots of small warnings revealed when using the + Greenhills compiler on VxWorks. Thanks to David Levine for + this. + + * ace/Pipe.h: In Pipe.h, the return value of ACE_Pipe::close() + isn't explicitly declared, so some compilers gag. Thanks to + David Levine for this. + +Thu Oct 10 12:05:55 1996 Douglas C. Schmidt + + * ace/Thread.cpp: Correctly wrapped the methods in the *.cpp file + so that they are ignored if threads *aren't* supported. + + * ace/Service_Repository.cpp (remove): Added the ACE_MT in front + of all the ACE_GUARD* macros that utilize ACE_Thread* locks in + order to ensure that ACE compiles correctly on all non-MT + platforms. + + * examples/Shared_Malloc/Malloc.cpp: Removed the special purpose + class for PROCESS_MUTEX since ACE_Process_Mutex will now work + for non-MT platforms. + + * examples/Misc/test_dump.cpp: Changed all occurrences of + + cerr << "string " << this << endl; + + to + + cerr << "string " << (u_long) this << endl; + + to work around problems with IRIX 5.3. Thanks to Tilo Christ + for reporting this. + + * ace/config-linux.h: Added a // in front of a stray comment line. + Thanks to Neil Cohen for pointing this out. + + * ace/config-hpux-10.x-g++.h: Added a new config file for HP/UX + 10.x which should fix some problems with templates by using the + G++ compiler. Thanks to for + contributing this. + +Wed Oct 9 14:34:19 1996 Douglas C. Schmidt + + * ace/OS: Changed the logic of socket initialization, which has + been moved out of ACE_SOCK and into ACE_OS. This makes it + possible to program more fully at the ACE_OS API (if such a + crazy thing is really necessary ;-)). + + * examples/IPC_SAP/SOCK_SAP/C-in{client,server}.cpp: Fixed up the + client and server apps so they will work on NT + (i.e., replaced the use of int with ACE_HANDLE). Thanks to Joe + DeAngelis for suggesting this. + + * ace/Synch.h: Now that we've got support for POSIX semaphores on + Solaris, then we'll use them (when they are supported...) as the + implementation of ACE_Process_Semaphore rather than using the + slower ACE_SV_Semaphore_Complex stuff... + + * ace/OS.{h,i}: Added David Levine's support for named POSIX + semaphores. If ACE_HAS_POSIX_SEM is defined, then ACE_Semaphore + will construct a named POSIX semaphore if passed a non-null + name, or an unamed POSIX semaphore if passed a null name. This + is a great addition because POSIX semaphores are more powerful + and useful than the Solaris UI semaphores. Unfortunately, + Solaris 2.5 doesn't support them (yet). + +Tue Oct 8 16:00:00 1996 Irfan Pyarali + + * ace/OS: Integrated Irfan's encapsulation/emulation for Win32 + Events at the ACE_OS level. A new structure ACE_event_t was + created to support Events on non-WIN32 platforms. On WIN32 + platforms ACE_event_t is just a HANDLE. On non-WIN32 platforms, + ACE_event_t uses a combination of mutexes, condition variables, + and counters to emulate Events. Both auto-reset and manual-reset + events are supported. + + * ace/Synch: Integrated Irfan's encapsulation/emulation for Win32 + Events at the C++ wrappers level. There are three wrappers that + were created: ACE_Event, ACE_Auto_Event, and ACE_Manual_Event. + ACE_Event is a wrapper for the ACE_event_t structure. It + provides functionality for signal, wait, pulse, and reset on an + event. ACE_Event supports both auto-reset and manual-reset + events. However, specializations of ACE_Event were created + (ACE_Manual_Event and ACE_Auto_Event) to make it easier to use + Events. + + * examples/Threads/test_manual_event.cpp: A test for manual-reset + events. The test involves the creation and use of a barrier + which uses an ACE_Manual_Event. + + * examples/Threads/test_auto_event.cpp: A test for auto-reset + events. The test involves the use of an ACE_Auto_Event for + signaling threads. + +Tue Oct 8 15:45:01 1996 Douglas C. Schmidt + + * ace/DEV.cpp (ACE_DEV): Removed a stray call to + ACE_IO_SAP::dump(). Thanks to Brad Flood + for this fix. + + * ace/OS.i: Added ACE_HAS_CHARPTR_SOCKOPT for VxWorks. Thanks to + David Levine for this. + + * ace/Dump.cpp (instance): Added an ACE_MT() macro around the + ACE_GUARD_RETURN macro so that this will compile correctly on + non-threaded platforms. Thanks to David Levine for this. + + * ace/OS.h: the declaration of ACE_OS::msgctl needs "struct + msqid_ds" instead of just "msqid_ds" to compile with the + Greenhills C++ compiler. Thanks to David Levine for this... + + * ace/Local_Name_Space_T.h: Added #include "ace/Local_Name_Space.h" + to avoid a problem during template generation. Thanks to + Chris Lahey for this fix. + + * ace/OS.i (getprotobynumber_r): Added a pair of fixes from Chris + Lahey to get the ACE wrappers for the getprotoby*_r() methods to + compile on AIX. + + * examples/Threads: Added two new examples (test_auto_event.cpp + and test_manual_event.cpp) that exercise the new ACE_Event + mechanisms. + + * ace/Synch: Integrated Irfan's encapsulation/emulation for Win32 + Events at the C++ wrappers level. + + * ace/OS: Integrated Irfan's encapsulation/emulation for Win32 + Events at the ACE_OS level. + +Fri Oct 4 08:32:47 1996 Douglas C. Schmidt + + * ace/OS.i: Added David Levine's new ACE_OS::mktemp() implementation. + +Wed Oct 2 13:26:20 1996 Douglas C. Schmidt + + * ace/SV_Message_Queue.i: Changed the casts of (msgbuf *) to + (void *). + + * ace/OS.i: Added David Levine's implementation of inet_addr() for + VxWorks. + + * ace/OS.i: Continued to merge together various parts of Win32 and + UNIX to reduce redundancies. + +Tue Oct 1 15:03:42 1996 Douglas C. Schmidt + + * ace/OS.i: Added Chuck Gehr's new changes to ACE_OS::mutex_init() + and ACE_OS::cond_init() to handle the MVS Pthreads madness. + + * ace/OS.i: Added zillions of #ifdefs for VXWORKS. It's amazing + these guys call themselves POSIX compliant -- lots of stuff is + missing. Thanks to David Levine for doing this! + + * ace/OS.cpp: Added David Levine's implementation of mktemp() + for platforms that don't support it. + + * ace/OS.h: Added a bunch of minor changes for VXWORKS. In + addition, started to factor out common #ifdefs to make the code + easier to maintain. + + * ace/OS.h: Added a new macro for ACE_LACKS_UTSNAME, and factored + this out for both VxWorks and Win32. + + * ace/Time_Value.h: Added support for 2 VXWORKSisms: (1) we need + to #include sys/times.h rather than the standard UNIX sys/time.h + and (2) we need to change const timeval & to const struct + timeval & to keep the Greenhills compiler happy. Thanks to + David Levine for this. + + * ace/INET_Addr.cpp: Added support for the insane VXWORKS + hostGetByName() function. Yikes! Thanks to David Levine for + this. + + * ace/Memory_Pool.cpp: Added a new #define called ACE_LACKS_SBRK + and ACE_LACKS_SYSV_SHMEM, which is enabled on Win32 and VxWorks. + Thanks to David Levine for reporting this. + + * ace/OS.h: Added new macros that #define ETIME for platforms like + VxWorks that don't support it, but do support ETIMEDOUT. + + * ace/OS.h: Added placeholder #defines for USYNC_PROCESS and + USYNC_THREAD when !defined (ACE_HAS_THREADS). Thanks to Neil + Cohen for reporting this. + +Tue Oct 1 00:42:35 1996 Douglas C. Schmidt + + * ace/Message_Block.cpp (size): Member base_ of ACE_Message_Block + was being set to the new memory pointer before the old contents + are saved in method size. So the line + + this->base_ = buf; + + was moved to a place some lines below. Thanks to Marco Sommerau + for detecting this. + + * ace/Message_Queue.cpp: Changed the implementation of the + enqueue_i() method so that FIFO order is maintained when + messages of the same priority are inserted consecutively. + Thanks to Jay Denkberg for + suggesting this. + +Mon Sep 30 22:59:38 1996 Douglas C. Schmidt + + * ace/OS.i (thr_yield): Added a new macro ACE_HAS_YIELD_VOID_PTR + to make pthread_yield work on MVS. Thanks to Chuck Gehr + for this fix. + + * ace/OS: Added a new macro called ACE_HAS_TIMEZONE_GETTIMEOFDAY + that handles problems on MVS. Thanks to Chuck Gehr + for this fix. + +Mon Sep 30 13:45:10 1996 Tim H. Harrison + + * ace/Local_Tokens.h: Updated some documentation in all the Token + files. + +Mon Sep 30 18:01:12 1996 Prashant Jain + + * netsvcs/lib/: Renamed files Logger.{h,cpp} to + Logging_Strategy.{h,cpp} to avoid confusion with Server_Logging + and Client_Logging stuff. In addition, I modified the affected + files, including Makefile, README, and the config files in the + tests directory. + +Sun Sep 29 12:47:37 1996 Douglas C. Schmidt + + * ace/OS.h: Added Chuck Gehr fixes for + MVS to enable signals to work correctly. + + * ace/Time_Value.h: Added an extern "C" { } block around #include + to solve a problem with Linux. Thanks to Padhu + Ramalingam for reporting this. + + * netsvcs/lib/Server_Logging_Handler.cpp: Changed the + initialization of a static template object from ::request_count_ + (0L) to ::request_count_ = 0L. Thanks to Gonzalo Diethelm + for reporting this. + + * ace/Remote_Tokens.h: Moved the inclusion of "Singleton.h" from + Remote_Tokens.cpp to Remote_Tokens.h. This should avoid + template instantiation problems on some platforms (e.g., Irix + 6.2). + + * ace/config-irix6.2-sgic++.h: Changed ACE_HAS_SIGINFO to + ACE_HAS_SIGINFO_T and added ACE_HAS_UCONTEXT_T. Thanks to + Gonzalo Diethelm for reporting this. + + * ace/Token_Invariants.h: The ctor/dtor were private and the + compiler would not allow a template of the class to be created. + I switched them to public, but I wish there was a better way... + Thanks to Gonzalo Diethelm for reporting + this. + + * ace/Synch_T.h: #include'd "ace/Event_Handler.h". Thanks to + Gonzalo Diethelm for reporting this. + + * ace/Synch.h: The parameter name gives warnings when + instantiating templates. Thanks to Gonzalo Diethelm + for reporting this. + + * ace/Process: Changed the definition of the get_pid() method to + getpid() to avoid a conflict with Irix. Thanks to Gonzalo + Diethelm for reporting this. + + * ace/Log_Msg.cpp (log): Added another #elif !defined (ACE_WIN32) + to handle logging for OS platforms that (1) aren't Win32 and (2) + are versions of UNIX that don't support STREAM pipes. Thanks to + Gonzalo Diethelm for reporting this. + + * ace/Acceptor.cpp (handle_signal): Erased the signum parameter + name to avoid a nasty warning about arguments not used when + instantiating templates. Thanks to Gonzalo Diethelm + for reporting this. + + * ace/OS.h: Added the ACE_Export symbol to the definition of + ACE_Str_Buf. This makes it compile and link on NT. Thanks to + Prashant for noticing this (our favorite Win32ism...). + + * ace/Thread.h (ACE_Thread): Removed a default argument for one of + the ACE_Thread::join() wrappers so this won't be ambiguous with + the other join() wrapper. + + * ace/OS: Added a new wrapper for strtok_r(). + +Sun Sep 29 16:12:01 1996 Prashant Jain + + * netsvcs/lib/: Renamed the project file for Win32 from lib.mdp to + netsvcs.mdp. Also the original project file did not include some + files such as Naming_Handler.cpp and Server_Logging_Handler.cpp + and I fixed that. Finally removed two files System_Time.{h,cpp} + which are already present in ace/. + +Sat Sep 28 16:34:56 1996 Douglas C. Schmidt + + * ace/OS: Added a new overloaded select() method that takes a + const ACE_Time_Value &. This is useful for situations where you + are passing in ACE_Time_Value::zero. + +Fri Sep 27 16:20:46 1996 Douglas C. Schmidt + + * ace/ACE: Added a fix for the fact that VxWork's write() call + doesn't take a const char *. + + * ace: Started adding support for VxWorks and GreenHills compiler, + e.g., added the config-vxwork-ghs-1.8.h file. Thanks to David + Levine for getting this rolling! + +Thu Sep 26 00:15:46 1996 Douglas C. Schmidt + + * ace/Timer_Queue: Changed the public interface methods to be + virtual in order to make it possible to override them in + subclasses. This makes it feasible to implement different types + of Timers. + + * ace/OS: Added a wrapper for the strspn() string call. Thanks to + Irfan for noticing this omission. + + * ace/Synch_T.cpp (wait): Changed the line: + + return ACE_OS::cond_wait (&this->cond_, this->mutex_); + + to + + return ACE_OS::cond_wait (&this->cond_, &this->mutex_.lock_); + + Thanks to Dieter Quehl + for noticing this. + + * ace/config-sunos5.4-g++.h: Removed the #define for + ACE_HAS_BROKEN_RANDR and replaced the ACE_HAS_SVR4_SIGNAL_T with + ACE_HAS_CONSISTENT_SIGNAL_PROTOTYPES since it looks like the + latest gcc release (2.7.2) fixes this in their own header files. + +Sat Sep 21 10:45:43 1996 Douglas C. Schmidt + + * ace/OS.h: Added a new #define called ACE_HAS_BROKEN_MSG_H to the + config-osf1-3.2.h file and used it in OS.h to work around + problems with prototypes on that platform. + +Fri Sep 20 00:15:29 1996 Douglas C. Schmidt + + * Released version 4.0.31 for testing. + + * ace/Pipe.cpp: Initialize handles_ to ACE_INVALID_HANDLE in + default constructor. Thanks to Tim Harrison for pointing this + out. + + * ace: Copied in new versions of ace.{mak,mdp} for Win32. + + * ace: Added TTY_IO.cpp to the Makefile. + + * ace/config-win32-msvc[24].0.h: Updated the config file so that + it *doesn't* #define ACE_HAS_STRBUF_T since this type clearly + isn't available on Win32! + + * ace: Modified all of OS.i and config-*.h files so that they + would be consisten with respect to handling the size_t and int + differences in socket implementations. Thanks to Chuck Gehr + for helping with this for AIX. + + * ace/ACE.h (ACE): Added a new method called max_handles() that + returns the maximum number of open handles currently supported + by the process. + + * examples/Reactor/Misc/signal_tester.cpp: Revised the test to + utilize the new idioms for programming with signals. + + * ace/OS.h: added a new #define called ACE_DEV_NULL that defaults + to "/dev/null" on UNIX and "nul" on NT. Thanks to David Trumble + for reporting this fix. + + * ace/Log_Msg.cpp: Added some checks to make sure that we don't + try to strdup() if we are passed a NULL pointer. Thanks to Luca + for suggesting this. + + * ace/OS: Move ACE_Str_Buf into OS.{h,i} and remove the Str_Buf.h + file. + + * Makefile: Added the "performance-tests" directory to the list of + directories we build when making ACE. + + * ace: Moved the definition of strbuf from Str_Buf.h into OS.h. + Thanks to Irfan for recommending this. + + * ace/Makefile: Added some additional sed magic on the + Svc_Conf_y.cpp file in order to remove the very last warnings + from MSVC++! + +Thu Sep 19 00:00:17 1996 Douglas C. Schmidt + + * ace/Service_Config.cpp (open): Only initialize the logger to use + STDERR if the user hasn't already set the ACE_Log_Msg::flags(). + Thanks to Tom Leith for suggesting this. + + * ace/OS: Removed all traces of the ACE_HAS_INT_SOCKNAME and + ACE_HAS_LENPTR_SOCKOPT since Chris Lahey's new fixes for AIX + obviate the need for these. + + * ace/OS.i: Only #include if the platform has RPC! + Thanks to Chuck Gehr for suggesting + this. + + * ace: Removed all uses of ACE_HAS_SETOWN and replaced them with + explicit tests for F_SETOWN and FASYNC. This is more portable. + Thanks to Chuck Gehr for suggesting + this. + + * ace/OS: Added a new #define called ACE_HAS_SIZET_SOCKET_LEN to + handle platforms where the length parameter of bind(), + connect(), accept(), etc. uses size_t rather than int. This + helps to get ACE working on MVS. Thanks to Chuck Gehr + for suggesting this. + + * ace/OS: Added Chris Lahey's fixes that make the + getprotoby{name,number}_r() functions work for AIX. + + * ace: Changed the ACE_HAS_STRUCT_HOSTENT_DATA to + ACE_HAS_STRUCT_NETDB_DATA because we use a single symbol to + refer to all of the odd netdb.h stuff that AIX has... + + * ace: Changed all uses of: + + iovec *iovp = (iovec *) alloca (total_tuples * sizeof *iovp); + + to + + iovec *iovp = (iovec *) alloca (total_tuples * sizeof (iovec)); + + to keep the AIX compiler from complaining (falsely) about using + iovp before it is initialized. Thanks to Chris Lahey for + reporting this. + + * ace/OS.h: Added Chris Lahey's changes that handle AIX's + _XOPEN_EXTENDED_SOURCE features without polluting all the socket + implementations! + + * ace/Thread.cpp (spawn_n): Removed an unreferenced local variable + so that the Win32 compiler doesn't complain. + + * ace/OS.h: Added the definition for strbuf{} for NT. + + * ace: Removed the msg_hack.h file since it had OSF and DEC + copyright info in it. Replaced this with Antonio Tortorici's + clever use of _KERNEL and the + new ACE_LACKS_SYSV_MSQ_PROTOS. + + * ace/INET_Addr.h: Updated the documentation to indicate more + clearly the use of getservbyname(). + + * ace/OS.cpp (thr_create): Added basic hooks to support the use of + AfxBeginThread on Win32. This is necessary to allow ACE to work + seemlessly with MFC applications. Added an THR_USE_AFX flag + that can be "or'd" in with the other thread flags in calls to + ACE_OS::thr_create(). If this flag is enabled *and* if we are + compiling with ACE_HAS_MFC enabled, then AfxBeginThread() is + called rather than _beginthreadex(). + + * ace/INET_Addr.h (set): Fixed a typo in the documentation for + set() (the order of "host:port" was backwards...). Thanks to + Brad Flood for reporting this. + +Wed Sep 18 00:36:01 1996 Douglas C. Schmidt + + * ace/SOCK_IO.cpp: Added a new recv() method that allows a client + to read from a socket without having to provide a buffer to + read. This method determines how much data is in the socket, + allocates a buffer of this size, reads in the data, and returns + the number of bytes read. The caller is responsible for + deleting the memory. Thanks to Luca Priorelli + for suggesting this. + + * ace/OS.h: Added a special #ifdef for IRIX 6.2 threads so that + THR_BOUND and THR_SCOPE_SYSTEM are different. Thanks to Gonzalo + Diethelm for reporting this. + + * ace/Message_Block.i (msg_class): Added a new "class" of messages + to ACE_Message_Block: MB_USER. This is useful for writing + extensible applications a la Microslush Windows MSG stuff... + +Tue Sep 17 16:38:44 1996 Douglas C. Schmidt + + * ace/Message_Block: Changed the signature of the + ACE_Message_Block constructors (and init()) so that they take + const char * rather than char *. In addition, changed the + definition of one of the constructors (and init()) so that it + takes a size field in addition to the buffer. + + * ace/Message_Block.cpp (size): Fixed a bug in the + ACE_Message_Block::size() method -- we were failing to deal with + allocators and ownership correctly during a resize. Thanks to + Amos Shapira for reporting + this. + + * ace/Naming_Context.cpp: Removed the source of yet another + warning about "inconsistent dll linkage. dllexport assumed." + + * ace/Mem_Map.cpp (map_it): Added a cast to size_t (file_len) + because by this time we know that file_len >= 0. This avoids + yet another warning on WinNT! + + * ace/Reactor.h: Fixed the remaining warnings about + "signed/unsigned mismatch" in Win32 by changing the type of + cur_size_ from size_t to ssize_t. + + * ace/Log_Msg.cpp: Modified the code so that on NT we use + ACE_SPIPE_Msg rather than ACE_FIFO_Send_Msg. Thanks to Luca + Priorelli for suggesting this. + + * ace/OS.i: Implemented the and put[p]msg() wrappers by being + smart about allocating and copying data. + + * ace/TTY_IO.cpp (control): There was one too many end parentheses + on line 192 of TTY_IO.cpp. Thanks to Dave Trumble + for reporting this fix. + + * ace/Log_Msg.cpp (local_host): Fixed the use of program_name_ and + local_host_ so that they strdup() the values passed by the + users, rather than copying pointers. This avoids problems if + the user doesn't pass in static memory. Thanks to Luca + Priorelli for reporting this. Somehow + this change got lost and I've reapplied it... + + * ace/Log_Record.cpp (round_up): Added an extra + 1 to the length + since otherwise the final '\0' gets lots if len is a multiple of + 8. Thanks to Luca Priorelli for reporting + this. Somehow this change got lost and I've reapplied it. + + * ace/Memory_Pool.h: removed #if defined (ACE_HAS_SIGINFO_T) logic + from both handle_signal() definitions (ACE_Shared_Memory_Pool + and ACE_MMAP_Memory_Pool). Thanks to Chris Lahey for fixing + this. + + * ace/OS.h: Moved the define of SA_RESTART below the #include for + signal.h. Otherwise SA_RESTART will always be defined by OS.h, + since SA_RESTART is defined on AIX in signal.h. Thanks to Chris + Lahey for fixing this. + + * ace/OS.h: Added some new #pragmas to suppress harmless warnings + for the MSVC++ compiler. + +Tue Sep 17 13:20:53 1996 Prashant Jain + + * ace/Local_Name_Space_T.cpp: Modified ACE_Local_Name_Space:: + create_manager () so that all three naming scopes use the + database variable defined in Name Options. This allows us to + specify different names for databases for all three naming + contexts. However, it is imporant to note that this can lead to + potential problems where, for example, a process may use the + same name for PROC_LOCAL database as an already existing + NET_LOCAL database. + +Mon Sep 16 01:31:21 1996 Douglas C. Schmidt + + * examples/Logger/simple-server/Logging_Handler: get_handle(), + handle_input(), and handle_close() want the right types + (ACE_HANDLE instead of int). Thanks to Luca Priorelli + for reporting these. + + * examples/Logger/simple-server/Logging_Acceptor.cpp: Fixed a typo + (Log_Mskg.h should be Log_Msg.h of course...). In addition, + changed the use of -1 to ACE_INVALID_HANDLE. Thanks to Luca + Priorelli for reporting these. + + + * ace: Changed all uses of ACE_HAS_ACE_INLINED_OSCALLS to + ACE_HAS_INLINED_OSCALLS. This was a vestiage of a global + replace gone amok. Thanks to Alan Stweart for + reporting this! + + * ace/Log_Msg.cpp (open): Added a check for the OSTREAM flag in + the ACE logger. Thanks to Rick Orr + for noticing this. + + * Released version 4.0.30 for testing. + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp + (Dump_Restore): Deleted an extra "return 0;" within a + constructor (duh...). + + * examples/Threads/test_process_{semaphore,mutex}.cpp (main): + Fixed some annoying G++ compiler bug related problems. We need + to use old-style C casts to prevent ambiguous parsing. + + * examples/ASX/Event_Server/Transceiver/transceiver: Rewrote this + example to illustrate how to use the ACE_Connector and + ACE_Svc_Handler. + + * examples/ASX/Event_Server/Transceiver/transceiver: Finally clued + in and realized that it is just not suitable to implement the + event server transceiver with separate threads for input and + output. It is simply to non-portable to get these shut down + gracefully. I think John Ousterhout was right -- threads are + evil! + + * examples/ASX/Event_Server: Merged the Consumer/Supplier + directories into a single Transceiver directory to reflect the + fact that the Consumer and Supplier were completely symmetrical! + + * ace/Module.cpp (close): Don't delete the Tasks in a Module if + there are still threads running in them. Otherwise we'll end up + with a big mess. + +Mon Sep 16 15:50:45 1996 Prashant Jain + + * performance-tests/Misc/test_naming.cpp: Added a new test to the + performance-tests directory called test_naming which simply does + performance testing on Naming Service. The test runs both the + SYNC and the NO-SYNC version of Naming Service. + +Mon Sep 16 15:22:52 1996 Tim H. Harrison + + * ace/Proactor.cpp (initiate): Added a check for + ERROR_NETNAME_DELETED after ReadFile/WriteFile. Now the + initiating handler is immediately dispatched for EOF *and* + closed connections. Thanks to Luca Priorelli + for suggesting this change. + +Sun Sep 15 00:55:59 1996 Douglas C. Schmidt + + * Fixed all uses of ACE_Service_Config::end_event_loop() and + ACE_Service_Config::run_event_loop() to be + ACE_Service_Config::end_reactor_event_loop() and + ACE_Service_Config::run_reactor_event_loop() since we now have + to consider the other event loops (e.g., Proactor and ReactorEx) + and it doesn't seem right to relegate those to 2nd class status. + + * ace: Finally got fed up with all the #ifdefs required to deal + with extended signals and just changed the + ACE_Event_Handler::handle_signal() method to always use the + extended signal interface. Fortunately, we can use default + values to hid this from callers (though you may need to change + your class definitions if you were assuming the + handle_signal(int) interface. + + * ace/Memory_Pool.h: Changed all the methods of the various + Memory_Pool classes to be virtual so that subclasses can + selectively override them. This shouldn't affect performance + since all existing use cases work directly with the "derived" + classes themselves, so there shouldn't be any overhead since the + compiler can use direct calls rather than virtual function + calls. + + * ace/OS.cpp (thr_create): Changed the call to CreateThread() to + _beginthreadex() and the call to ExitThread() to _endthreadex() + for Win32 in order to make ACE threads work correctly with + Win32. Thanks to James Mansion for + recommending this. + + * ace/ACE: Added two new static functions: read_adapter() and + register_stdin_handler(). These are useful when writing code + that must demultiplexing ACE_STDIN on both Win32 and UNIX. This + works around Win32 limitations that don't allow us to select() + on non-sockets (such as ACE_STDIN). + + * examples/ASX/CCM_App/SC_Server.cpp: Updated this + test so that it should now work correctly on Win32, where it + isn't possible to select() on STDIN... + + * ace/Synch_T: Added a new class to ACE called "ACE_Test_and_Set." + As this name implies, this class implements an atomic ``test and + set'' abstraction. This has all sorts of useful implications, + particularly because it is a template that can be paramaterized + by the type of LOCK (e.g., ACE_Null_Mutex, ACE_Thread_Mutex, + etc.) and the type of TYPE (e.g., int, double, sig_atomic_t, + etc.). In addition, because this "is-a" ACE_Event_Handler it + instances can be registered with the Reactor and used to shut + down event hoops gracefully upon receipt of certain signals + (e.g., SIGINT). In fact, I've redone many of the example + applications (e.g., ./examples/Logger/server/server_loggerd.cpp) + to illustrate how this works. + +Sun Sep 15 20:40:17 1996 Tim H. Harrison + + * ace/ReactorEx.cpp (notify): I've redesigned this code. + Previously, ReactorEx was explicitly managing a handle that it + kept in handles_[0]. handles_[0] was used to implement + ReactorEx::notify, which allowed other threads to wake up the + thread waiting in ReactorEx::handle_events. Now ReactorEx has + an Event_Handler (ReactorEx_Notify) that is registered in the + constructor of ReactorEx. This allows us to treat events from + handles_[0] just like every other event (i.e. by dispatching to + handles_[0]->handle_signal). One of the results of this change + is that code in remove_handler() is simplified a bit. + +Sun Sep 15 17:56:52 1996 Prashant Jain + + * ace/Naming_Context.cpp: Added a new flag to the constructor and + open() method of ACE_Naming_Context that allows us to specify + which Memory_Pool to use when creating ACE_Local_Name_Space + (that is choose between ACE_MMap_Memory_Pool and + ACE_Lite_MMap_Memory_Pool). + + * ace/Memory_Pool.cpp: Added a new class called + ACE_Lite_MMap_Memory_Pool which subclasses ACE_MMap_Memory_Pool + and overrides the sync method so that it is a no-op. + + * ace/Local_Name_Space.cpp: Made some siginificant changes in + ACE_Local_Name_Space. Here is what the problem was: + ACE_Name_Space_Map (which is an ACE_Map_Manager) used an + ACE_RW_Process_Mutex for synchronization. However, since the Map + was kept in shared memory and was shared by all the processes, + it got instantiated only by the first process which came + along. Therefore, only the first process got around to creating + and initializing the lock. + + In fixing the problem, we made some other changes to + ACE_Local_Name_Space and ACE_Name_Space_Map. Both classes are + now template classes. ACE_Local_Name_Space needs to be + parameterized with a Memory_Pool (thus giving us a hook to + implement the NO-SYNC option) as well as a LOCK. + ACE_Name_Space_Map needs to be parameterized by an ALLOCATOR + which is created by ACE_Local_Name_Space. Note that the reason + we need to parameterize ACE_Name_Space_Map is so that we can + pass an ACE_Allocator_Adapter (which subclasses from + ACE_Allocator) with every method. It is not possible to pass an + ACE_Allocator since the ::remap() method relies on an + allocator() method defined on the ALLOCATOR that is passed in + (and ACE_Allocator does not define an allocator() method). + + The purpose of the class ACE_Name_Space_Map still remains the + same. It IS_A Map_Manager and provides the hook to set the + allocator to the process specific one. However, none of its + methods acquire any locks. For that reason, the Map_Manager is + parameterized with the Null_Mutex. All synchronization takes + place inside ACE_Local_Name_Space. ACE_Naming_Context + instantiates ACE_Local_Name_Space (depending upon the scope) and + by default parameterizes it with ACE_MMap_Memory_Pool and + ACE_RW_Process_Mutex. + + Also made some more fixes to ACE_Local_Name_Space. In + create_manager(), after we create the allocator, we now check to + see if the backing store was created successfully and if not, we + return -1. + +Sat Sep 14 00:00:31 1996 Douglas C. Schmidt + + * examples/Logger: Renamed the original server directory to + "simple-server" and added a new directory called + "Acceptor-server" which implements the Logger using the + ACE_Acceptor. Note that almost all of the implementation code + disappears! + + * ace/Local_Name_Server_T.cpp: Removed the name_server_map_ array + and replaced it with the ACE_NAME_SERVER_MAP #define, which is + now contained in OS.h. + + * ace/Malloc.h: Added "virtual ... = 0" to the bind() and + trybind() methods of the ACE_Allocator since they should be pure + virtual functions... + + * ace/Synch{_T}: Separated out the wait (ACE_Time_Value *) and + wait (void) methods in order to optimize the call sequence for + the common case when there is no timeout. + + * ace/Synch: Added a new wait(ACE_Thread_Mutex &) method to + ACE_Condition_Thread_Mutex so that we are consistent with the + templated ACE_Condition_Mutex. + + * include/makeinclude: Changed uses of -pic to -PIC because ACE is + now creating more than 2082 symbols. It's probably time to + split up the library... + + * ace/DEV_IO: Moved the ACE_DEV_Addr instance from ACE_DEV_IO into + ACE_DEV so that it will be available for the ACE_DEV_Connector. + This fixes a bug that prevented us from using the ACE_Connector + in conjunction with the ACE_DEV_* classes. Thanks to Karlheinz + for clarifying what had to occur. + +Fri Sep 13 00:16:32 1996 Douglas C. Schmidt + + * ace/OS.h: Changed the order of #includes so that + comes before . This fixes some bugs with the + Siemens SVR4 C++. Thanks to Antonio Tortorici + for this fix + + * ace/ACE.cpp (handle_timed_complete): Added yet another weird + hack to deal with the insanity that is TLI... + + * ace/Synch.cpp: Replaced all uses of ACE_Thread_Mutex_Guard with + ACE_GUARD macros in order to avoid problems when mutexes fail. + + * ace/OS.h: Changed the definition of the ACE_*GUARD macros so + that they are always enabled, even when we turn off ACE_MT_SAFE. + This avoids a nasty semantic problem for components that use + ACE_Process_Mutex. Thanks to Avraham Nash + for reporting this problem. + + * ace/OS: Removed ACE_OS::fork_exec() since its functionality has + been subsumed by ACE_Process. + + * ace/Thread_Manager: Added a new thread_descriptor_i() method + that *doesn't* grab the lock in order to avoid deadlocks. + + * include/makeinclude/platform_sunos5_sunc++.GNU (CXX): had to add + the -pta option so that we achieve template closure in ACE. + + * include/makeinclude: Added -lthread to the + platform_sunos5_sunc++.GNU file. I don't know how this slipped + through the cracks! + + * ace/{DEV_IO,FILE_IO,SOCK_IO,SPIPE_Stream}: Fixed a braino with + alloca where I was failing to multiply by sizeof (iovec). Isn't + C great? ... Thanks to Chuck Gehr for + reporting this. + + * ace/SOCK_Dgram_Mcast.cpp: Added two changes to the ACE multicast + code in order to get it to work on Win32. The first change is + to put the IP_ADD_MEMBERSHIP setsockopt() call *after* the + bind() (in shared_open()). The second is to convert the + ACE_INET_Addr::get_ip_address() from host byte order into + network byte order. Thanks to Todd L. Montgomery + and Steve Weismuller + for helping with this. + + * examples/Threads/test_barrier2.cpp: Incorporated Karlheinz's + new ACE_Barrier test program. + + * ace/Synch.h: Added Karlheinz's ACE_Null_Barrier class. + +Fri Sep 13 00:30:50 1996 Tim H. Harrison + + * tests/{Tokens_Test,Time_Service_Test}.cpp: Updated tests to use + ACE_Process instead of ACE_OS::fork_exec. + + * ace/Process.cpp: Added a new ACE_Process abstraction that is a + Portable encapsulation for creating new processes. It allows + assignment of STDIN, STDOUT, and STDERR of the new process. On + UNIX, ACE_Process uses fork and exec. On Win32, it uses + CreateProcess. Since we can set the standard handles, we can + mimic UNIX pipes on Win32 by building chains of processes. This + class should be used instead ACE_OS::fork_exec. + + * examples/OS/Process/process.cpp (main): Added new example + application to show how to use ACE_Process. + +Thu Sep 12 00:55:25 1996 Douglas C. Schmidt + + * ace/DEV_IO: Added methods get_local_addr() and get_remote_addr() + so that ACE_Connector will work correctly. Thanks to Brad Flood + for reporting this. + + * ace/Thread_Manager.cpp (thr_self): Added a fix to solve the + problem that Win32 GetCurrentThread() returns a pseudo-handle + rather than a real handle. Now, we just look things up using + the thread id rather than the thread handle. Thanks to Luca + Priorelli" for clarifying this. + + * ace/Proactor.cpp (initiate): Fixed an incorrect set of return + values -- they were reversed. Thanks to Brad Flood + for reporting this. + + * ace/OS.i (thr_cmp): Added a check for + !defined(ACE_HAS_SETKIND_NP) to avoid a problem with OSF/1. + Thanks to Martin Schoeckle for + reporting this. + + * examples/IPC_SAP/DEV_SAP: Updated these examples to use the new + ACE_TTY_IO classes. + + * ace: Moved the TTY_IO code from the + examples/IPC_SAP/DEV_SAP/{reader,writer} directories into the + files TTY_IO.{h,cpp} in the main part of ACE and integrated Brad + Flood's changes for Win32. + + * ace/DEV_IO.i: Changed the mapping of send_n() and recv_n() + methods to use write_n() and read_n() respectively so they will + work on NT. Thanks to Brad Flood for + reporting this. + + * ace/Thread_Manager.h: Implemented a non-synchronized version of + the lookup function for the . This version + assumes that the lock is help. We need this to avoid + intra-class method deadlock on systems (such as Solaris) that + lack recursive mutexes. + + * ace/Log_Msg.cpp (ACE_Log_Msg): made sure to initialize + ACE_Log_Msg::thr_handle_ to 0. I'm not sure how this got + changed... Thanks to Luca Priorelli for + reporting this. + + * examples/Reactor/ReactorEx/test_reactorEx.cpp + (register_thread_exit_hook): Changed hthread_t to ACE_hthread_t. + Thanks to Luca Priorelli for reporting + this. + + * apps/Gateway/Gateway/Channel.h: Due to inconsistencies between + the semantics of sockets and TLI with respect to establishing + non-blocking connections it's not a good idea to use TLI in + conjunction with select(). Therefore, I've #if 0'd out the use + of TLI in the Gateway application. + +Wed Sep 11 00:25:38 1996 Douglas C. Schmidt + + * ace/ACE.cpp (handle_timed_complete): Fixed a typo that was + failing to set n = ACE::recv(...). In addition, rethought how + we figure out if a connection completes for the nth time... + + * ace/TLI.cpp (open): Modified the implementation of open() so + that if oflag == 0 it is given an initial value of O_RDWR. + Otherwise we'll get a "badflags" t_errno. + + * ace/Connector.h (connect): Modified connect() so that the + default value of the flags parameter is O_RDWR. This is + necessary to make TLI_Connector::connect() work correctly by + default. + + * examples/Logger: Updated the example logger client and server to + illustrate more clearly how things like the Singleton Reactor + and the ACE_Reactor timer mechanism work. Thanks to Joe + DeAngelis for suggesting this. + + * ace/Pipe: Added a new constructor that makes it possible to + initialize the from the and handles. + Thanks to Stevan Warwick (sjw@aesthetic.com) for suggesting + this. + + * config-irix5.3-sgic++.h: Added #define for ACE_NEEDS_SYSTIME_H. + Thanks to Stevan Warwick (sjw@aesthetic.com) for reporting this. + + * examples/Logger/server/Client_Acceptor: Fixed some stray + mis-uses of int that should have been ACE_HANDLE. Thanks to + Luca Priorelli" for reporting this. + + * ace/{ACE,Log_Msg}.cpp: Added fixes for hexdump(). Thanks to + Luca Priorelli" for supplying these. + + * ace/Reactor.cpp (ACE_Reactor): Fixed a typo: "this->max_handlep1 + ()" should be "this->handler_rep_.max_handlep1 ()". Thanks to + Scott Shupe for reporting this. + + * apps/Orbix-Examples/Event_Comm: Added a bunch of changes to make + this application compile with Orbix 2.0. Thanks to Mike + O'Malley for the fixes. + + * ace/OS.cpp (thr_create): Added yet another fix for the IRIX 6.2 + pthreads implementation. Thanks to Gonzalo Diethelm + for reporting this. + + * ace/config-irix6.2-sgic++.h: Changed ACE_HAS_IRIX53_GETTIMEOFDAY + to ACE_HAS_IRIX_GETTIMEOFDAY because this also seems to be the + case for IRIX 6.2... Thanks to Gonzalo Diethelm + for reporting this. + + * ace/TLI_{Connector,Acceptor}.cpp: Added tests against NULL + pointers to avoid segmentation faults when the TLI + implementation doesn't allocate memory for the udata and opt + fields of netbuf structures. + + * ace/Mem_Map.i (ACE_Mem_Map): Added an accessor so that callers + can get the name of the filename that is being used as the + backing store. Thanks to the James Mansion + for recommending this. + +Tue Sep 10 00:26:52 1996 Douglas C. Schmidt + + * ace/OS.cpp (thr_create): Modified the thr_create() + implementation for Win32 so that if the caller doesn't care + about this value we can avoid a HANDLE leak. Thanks to the + James Mansion for recommending this. + + * ace/Thread.cpp (ACE_Thread): Moved both definitions of spawn_n() + into the Thread.cpp since they have loops and don't benefit from + being inlined. + + * ace/Svc_Handler.h: Moved operator delete() into the public part + of the class in order to make various compilers happy... + + * ace/OS.i (ACE_OS): Fixed the #define that selects the (union + wait *) alternative of wait(). This original was protected by + ACE_LACKS_POSIX_PROTO, but it should be ACE_HAS_UNION_WAIT. + + * performance-tests: Created a new directory that will contain all + of the ACE performance tests. Move the Synch-Benchmarks and the + TTCP tests from ./apps into here, and also moved the + test_mutex.cpp and test_singleton.cpp files from + ./examples/{Threads,Misc}, respectively. Thanks to Tim Harrison + for this suggestion. + + * ace/OS.i (ACE_OS): in WIN32 closesocket() returns 0 if call is + OK, so I changed the return value to be the other way around. + Thanks to Luca Priorelli for reporting + this. + + * ace: Changed the ACE_NO_POSIX_PROTO #define to something more + meaningful: ACE_LACKS_POSIX_PROTO. Thanks to Jonathan Biggar + for suggesting this. + + * ace/config-sunos4-g++.h: Added the #define ACE_NEEDS_SYSTIME_H. + Thanks to Alexandre Karev for reporting + this. + + * ace/OS: Fixed a bunch of pthreads portability problems that + showed up on OSF/1 4.0. Also added support for asctime_r() and + ctime_r() for OSF/1 4.0. Thanks to Dave Trumble + for reporting these fixes. + + * ace/Synch_T.cpp (ACE_TSS_Read_Guard): Removed a stray "new" that + was causing problems for the ACE_NEW macro. Thanks to Dave + Trumble for reporting this. + + * ace/Local_Tokens.h: Fixed a broken use of "friend", which was + missing the keyword "class." Thanks to Dave Trumble + for reporting this. + + * ace/config-osf1-4.0.h: Included Dave Trumble's + config file for OSF/1 4.0. + + * include/makeinclude/platform_osf1_4.0.GNU: Included Dave + Trumble's platform macros file for + OSF/1 4.0. Also renamed platform_osf1.GNU to + platform_osf1_3.2.GNU to deal with the new version. + + * ace/Proactor: There wasn't a way to destroy an + ACE_Overlapped_File object without closing the ACE_HANDLE + attached to it. Therefore, I added a flag that keeps track of + whether we have to delete this or not. Thanks to Amos Shapira + for suggesting this. + + * examples/Threads/test_future[12].cpp: Updated the tests to use + the new call() semantics in order to shut down the Scheduler's + event loop gracefully. + + * ace/Method_Object.cpp: Added a return value to the call() + routine. This can be used to indicate to the caller that it is + necessary to shut down the event loop. + +Mon Sep 9 02:07:08 1996 Douglas C. Schmidt + + * ace/Service_Config.cpp (ACE_Service_Config): #ifdef's out the + registration of signal handling to control reconfiguration on + Win32 since it doesn't really handle signals very well. Thanks + to John Morey for bringing this to my + attention. + + * ace/CORBA_Handler: Replaced CORBA_[123] with ACE_CORBA_[123]. + + * examples/CORBA: Updated the test programs to work portably + across different versions of Orbix. + + * ace/OS: Added a new wrapper for the getcwd() call. + + * examples/Threads/test_recursive_mutex.cpp: Added the use of + ACE_Guard<> to illustrate how these work with the + ACE_Recursive_Thread_Mutex. Thanks to Gonzalo Diethelm + for motivating me to do this. + + * examples/Threads/test_process_{mutex,semaphore}: Added two new + tests to illustrate how the ACE_Process_Mutex and + ACE_Process_Semaphore work, respectively. + + * ace/Synch: Replaced the implementation of ACE_Process_Semaphore + to use SV_Semaphore_Complex on UNIX platforms in order to get + the same semantics for Win32 and for UNIX. Thanks to the James + Mansion for recommending this. + + * ace/OS.h: Added some parens around the ACE BIT* macros so that + the precedence levels would be dealt with correctly and we don't + get any nasty surprises... + + * ace/{Synch_T,Synch}: Modified the implementation of all the + *acquire()/release() methods so they keep track of whether they + own the mutex. Thus, if a code path needs to give up the mutex + within the lifetime of the mutex, and it calls mutex_.release(), + then the destructor will not call it again. Thanks to the James + Mansion for recommending this. + + * ace/{Synch_T,Synch}: Changed the name of the field result_ to + owner_ for the ACE_Thread_Muetx_Guard and ACE_Guard. This is + more representative of the true purpose of this field. + + * ace/Synch: Updated ACE_Thread_Mutex_Guard so that it has the + same interface and semantics of ACE_Guard. Thanks to the + ever-vigilant James Mansion for + noticing this. + + * examples/Log_Msg/test_log_msg.cpp (main): Added a test of the + new ACE_Log_Msg::priority_mask() functionality. + + * ace/Log_Msg.cpp: Added a new method called priority_mask(), + which updates the new thread-specific priority_mask_ data member + with the new mask and returns the old mask. This is useful for + applications written using ACE_Log_Msg. Often, these have log() + calls with low priority such as LM_DEBUG that don't need to be + printed, but for which the logging code should not be removed. + The priority_mask() scheme makes it possible to selective enable + printing of certain priorities. Thanks to Rochi Febo Dommarco + for suggesting this. + + * netsvcs/clients/Logger/indirect_logging.cpp (main): Modified the + test program so that it randomly selects logging priorities that + are powers of two. + + * ace/Log_Priority.h: Renumbered the LM_* logging flags so that + they are all powers of two. This makes it easy to implement a + scheme for selectively printing only certain logging values. + +Sun Sep 8 10:46:40 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Proactor.cpp: Fixed up the error handling in ACE_Proactor so + that it returns an error both in case of "bad errors," as well + as when ACE_WIN32 isn't defined. Thanks to Amos Shapira + for reporting this. + +Sun Sep 8 14:11:08 1996 Tim H. Harrison + + * examples/Reactor/Proactor/README: Updated the test_proactor.cpp + and README files to clarify the relationship between the + Proactor and ReactorEx. This example uses the Proactor as the + main event loop (not the Reactor or ReactorEx). Thus, this + application can only do overlapped I/O and timers + asynchronously. To be able to react to other Win32 events, see + the ACE_ReactorEx and the examples/Reactor/ReactorEx/ test. + Thanks to Amos Shapira for + pointing out the ambiguity. + +Sat Sep 7 14:09:21 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Task.cpp: Enhanced the activate() method so that the caller + can set the priority and the thread group id. Thanks to + Karlheinz for this suggestion. + + * ace/OS.h: Added default values of 0 for the trailing arguments + for the {mutex,sema,cond}_init() methods. + + * examples/Threads/test_mutex.cpp: Added a new test program that + illustrates the difference between implementations of thread + mutex wrappers that use inheritance and dynamic binding vs. the + ACE approach (which doesn't use inheritance and dynamic + binding). The results I got on my SPARCstation 20 model 712 is + included in the source file. Thanks to James Mansion + for motivating me to write this. + + * examples/Misc/test_singleton.cpp: Added a new test program that + illustrates the performance of using the Double-Checked Locking + pattern compared with the standard "Mutex::acquire()/release()" + approach. Thanks to Jim Coplien + for encouraging me to get these performance numbers. + +Tue Sep 3 00:38:47 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/XtReactor: Added minor fixes to XtReactor to fix complaints + about "bool" not being defined and the destructor + ~ACE_XtReactor() has already having a body. Thanks to Andres + Kruse for these fixes. + + * ace/Mem_Map.cpp: Make sure that this->length_ is initialized to + 0 in ACE_Mem_Map::map (). Thanks to James Mansion + for pointing this out. + + * ace/Thread.i (spawn_n): In ACE_Thread::spawn_n the sense of the + following check is wrong: + + for (i = 0; i < n; i++) + // Bail out if error occurs. + if (ACE_OS::thr_create (func, arg, flags, &t_id, 0, priority, + stack == 0 ? 0 : stack[i], + stack_size == 0 ? 0 : stack_size[i]) != 0) + thread_ids[i] = t_id; + else + break; + + The '!=' should be '=='. Thanks to James Mansion + for pointing this out. + + * include/makeinclude/rules.local.GNU (MAKEFILE): Changed the + $WRAPPER_ROOT/include/makeinclude/rules.local.GNU line that + says: + + sed -e "s:$(WRAPPER_ROOT);$$(WRAPPER_ROOT);g" \ + + so that the double dollar is now "\$$" (prefixed the first + dollar sign with a backslash). If not, my shell will try to + execute WRAPPER_ROOT for some reason. With "\$$" it works as it + should. Thanks to Marius Kjeldahl for + reporting this. + + * Released version 4.0.29 for testing. + + * ace/OS.i (thr_getspecific): Added a new case for OSF/1. Thanks + to Martin Schoeckle for + reporting this. + + * ace/Thread_Manager.cpp (spawn_i): Removed an invalid + initialization of ACE_hthread_t = 0, which doesn't work on all + pthreads platforms because pthreads uses a struct in some + implementations. Thanks to Martin Schoeckle + for reporting this. + + * man: Updated all the nroff and html documentation to conform to + the latest version of ACE. + + * netsvcs/lib/{Name_Handler,TS_Server_Handler}.cpp: Fixed + some mistakes in the ACE_TEMPLATES_REQUIRE_SPECIALIZATION + code so that all the services can be linked together without + multiply defined symbols. + + * netsvcs/lib/Name_Handler.cpp: Fixed a spot where we weren't + passing in an lvalue to send_request(). Why this wasn't showing + up earlier I don't know, but GCC caught it! + +Mon Sep 2 00:47:00 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Thread_Manager.cpp: Updated all comparisons of ACE_thread_t + and ACE_hthread_t so that they use the ACE_OS::thr_equal() and + ACE_OS::thr_cmp() methods, respectively. Thanks very much to + Martin Schoeckle for identify + the need for this. + + * ace/OS: Added a new method called thr_cmp() which compares two + ACE_hthread_t values for equality. Unfortunately, we can't just + compare these directly via == because on some platforms they are + implemented as structs. Right now, I'm assuming that if + ACE_HAS_TID_T is enabled that we can compare tid_t's using ==. + If this turns out to be incorrect (e.g., if tid_t's are also + implemented as structs, please let me know). + + * ace/Future: Changed the overloaded result() method to a pair of + get()/set() methods. + + * tests/test_config.h: Fixed a bug in the reset() routine. This + was originally deleting the global static ace_file_stream. + However, this was causing segmentation faults if destructors for + objects local to main() were trying to write to the output file. + Therefore, instead of deleting the ostream, we simply flush() + it! + + In addition, also renamed the various functions in test_config.h + to make sure they don't conflict with any other names by + prefixing them with ace_test_... + + * ace: Added many small fixes for IRIX 6.2. Thanks to Gonzalo + Diethelm for reporting all of these! + + * ace/OS: Added a wrapper for the UNIX syscon() system call. + + * ace/LSOCK.cpp (recv_handle): Rearranged the casts so that things + work correctly on platforms with odd definitions ot struct + iovec. Thanks to Gonzalo Diethelm for + reporting this. + + * ace/Task.cpp (ACE_Task_Exit): Rearranged the order in which we + shut down a Task via the Task_Exit hook so that we first + decrement the count of the threads in the task and *then* call + its close() hook. This guards against cases where the close() + hook does something crazy like "delete this". + + * ace/XtReactor.h: Changed #include "X11/Intrinsic.h" to #include + . Thanks to Gonzalo Diethelm + for suggesting this. + + * ace/Future.cpp (ACE_Future): Added some strategic "consts" to + the assignment operator and copy constructor for ACE_Future and + ACE_Future_Rep. + + * examples/Threads/test_task_three.cpp (main): Revised the test so + that it will shut itself down automatically when all the threads + have finished. + + * examples/Threads/test_task_two.cpp (main): Revised this test so + that it doesn't run forever, but only runs either 1000 times or + as many times as the user specifies on the command line. Thanks + to Gonzalo Diethelm for suggesting this. + + * ace/OS.i: Added an extra #else for thr_sigsetmask(), + thr_min_stack(), and thr_kill() for weirdo platforms that don't + conform to the other threading APIs... + +Sun Sep 1 20:15:28 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * examples/ASX/Message_Queue: Changed the use of read(0, ...) and + write(1, ...) to ACE_OS::read(ACE_STDIN, ...) and + ACE_OS::write(ACE_STDOUT, ...) in buffer_stream.cpp and + bounded_buffer.cpp. + + * ace/OS.i: Fixed the errno mapping of the cond_timedwait() + functions so that they set errno to ETIME rather than EBUSY when + timeouts occur. This is necessary to support Solaris and POSIX + pthreads semantics on Win32. + + * build/SunOS5.5/examples/ASX/Message_Queue/buffer_stream.cpp: + Modified the example somewhat so that it uses the Singleton + thr_mgr() method from ACE_Service_Config. + +Sun Sep 1 17:29:58 1996 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * ace/ACE.cpp (map_errno): Added a new static method to the ACE + class. This method allows us to map troublesome win32 errno + values (e.g. WSAEWOULDBLOCK) to values that standard C strerr + function understands. Thank you Microsoft. + + * ace/Log_Msg.cpp (log): Added a call to ACE::map_errno to the %p + option. Now the ACE logger can begin to map Win32 error values + into meaningful strings. + + * netsvcs/lib/lib.mdp: Added a project file for the netsvcs + library. This builds a dll into ace/netsvcs.dll (not into the + netsvcs/lib directory). This reduces the number of paths needed + in %PATH%. + + * examples/Tokens: Renamed this directory netsvsc/clients/Tokens. + + * ace/ace.mdp: Removed wsock32.lib from the ace files listing. + The problem is that we can't assume where MSDEV is installed. I + added wsock32.lib and advapi32.lib to the + build/settings/link/library_modules line. + + * ace/config-win32-msvc4.0.h: Disabled the "C4355: 'this' : used + in base member initializer list" warning. Thanks to Amos + Shapira for figuring this out for us. Although "this" is + unneeded for win32, it is required for compilers on other + platforms (e.g., AIX). + + * ace/Message_Queue.cpp (dequeue_head_i): Andres Kruse pointed out + that we weren't doing head_->prev (0), when dequeuing! + +Tue Aug 27 21:00:25 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * include/makeinclude/platform_sunos5_sunc++_4.1.GNU (CXX): Added + Andres Kruse's changes for SunC+ 4.1. + + * ace: Fixed line # 12 of ace/config-sunos4-sun4.1.4.h, + which read: + + "#define ACE_HAS_SVSV_IPC" (ACE_HAS_ ess vee ess vee _IPC) + + to + + "#define ACE_HAS_SYSV_IPC" (ACE_HAS_ ess wye ess vee _IPC) + + Fix another problem: + + #define ACE_LACKS_THREAD_STACK_ADDR (OS.cpp) + + was inconsistently defined in: + + #define ACE_LACKS_THREAD_STACK_ADDRESS (config-aix-4.1.x.h) + + Thanks to Alan Stweart for reporting + this! + +Mon Aug 26 00:34:05 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Updated all of ACE such that the ACE_GUARD* macros now all take + the name of the ACE_*Guard* that they will use as the scoped + locking object. This is important for several reasons: + + 1. It make it more clear what is going on in the code, rather + than hiding behind the macros! + + 2. It is now possible to have multiple ACE_GUARD* macros in the + same scope by calling each scoped locking object a different + name. This is used in the Local_Tokens.cpp file. + + * ace/Synch.h (ACE_Null_Mutex_Guard): Added the locked() method so + that this signature will conform to the one expected of + ACE_Guard. + + * tests: Added a new file Test_Future.cpp, which tests the new ACE + Futures mechanism using Active Obejcts. Thanks to Andres Kruse + for contributing this test. + + * ace: Added three new files: Future.{h,cpp}, + Method_Object.{h,cpp}, and Activation_Queue.{h,cpp}, which + implement Polymorphic Futures. Thanks to Andres Kruse + for contributing these. + + * ace/Stream.cpp (dump): Replaced LM_INFO with LM_DEBUG. + +Sun Aug 25 21:57:57 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace: Rather than using operator new directly, most of ACE now + uses the ACE_NEW and ACE_NEW_RETURN macros. For instance, + rather than writing: + + if (token_manager_ == 0) + token_manager_ = new ACE_Token_Manager; + + we should write: + + if (token_manager_ == 0) + ACE_NEW_RETURN (token_manager_, ACE_Token_Manager, 0); + + The reason for this is that it makes it much easier to ensure + that all dynamic memory allocation errors are treated uniformly. + I've updated the entire ACE library code tonight to make this + usage consistent whenever possible. + +Sat Aug 24 11:51:38 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Time_Value.h: Simplified various things so that the nasty + macros necessary to build DLLs on Win32 will be simplier. In + addition, I will only #include for those platforms + that don't already do this in (i.e., if + ACE_NEEDS_SYSTIME_H is defined in config.h). Please let me know + if you run across any platforms like this. + + * ace/TLI_{Connector,Acceptor}: Added two additional parameters at + the end of the connect() and accept() methods, respectively, so + that the ACE TLI wrappers can be used with X.25. Thanks to Ajit + Sagar for suggesting this fix. + + * ace: Integrated Eric Newton's XtReactor into the Makefile. If + you want to include this into ACE, make sure to define + ACE_HAS_XT in the config.h file. + + * examples/Misc: Integrated the XtReactor tests. + + * ace/OS.i (getservbyname,gethostby*): Fixed a suble omission -- + any calls to socket function should be wrapped by the + ACE_SOCKCALL_RETURN macro in order to make the errnos work + correctly on Win32. + + * ace/OS: Added support for the getprotoby{name,number} wrappers. + Thanks to Joe DeAngelis for suggesting this. + + * ace/Connector.cpp: Fixed a subtle bug in the ACE_Connector. + The problem centered around the following line in + cleanup_AST(): + + if (this->handler_map_.find (handle, ast) == -1) + + This lookup always failed because the key, the handle of the + service handler, was always -1. The service handler's handle is + not set until a successful connection is made and connector + transfers ownership of the handle to the service handler. The + fix for this is to store the ACE_HANDLE in the ACE_Svc_Tuple + *separately* from the ACE_Svc_Handler. Thanks to Bill Gerecke + for being so persistent in tracking this + down. + + * ace/ARGV.cpp (ACE_ARGV): Added a nifty new constructor that + converts argv-style vectors of strings into a single string + (this is the reverse of what the original constructor does!). + + * ace/ACE: Added a new utility method called strecpy(), which + copies to , returning a pointer to the end of the copied + region (rather than the beginning, a la . + +Thu Aug 22 15:43:58 1996 + + * ace/OS.h: Changed the interface of ACE_OS::fork_exec (char + *const argv[]). (There is no longer a separate const char *path + parameter. Now, argv[0] must be the full path name to the + executable. + + * tests/Time_Service_Test.cpp: Updated the Time Service + one-button test to use the new ACE_OS::fork_exec. I didn't + event break it. + + * tests/Tokens_Test.cpp: Updated the Tokens one-button test to + use the new ACE_OS::fork_exec. It actually works now. + + * tests/test_config.h: Added some more #defines to help simplify + path differences between NT and UNIX. Perhaps these should be + moved into OS.h? + +Thu Aug 22 13:46:58 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Thread_Manager.cpp (ACE_Thread_Control): The status_ member + in ACE_Thread_Control() was not being initialized! This caused + Purify to complain loudly about invalid memory accesses. I have + added an initialiser to ACE_Thread_Control::ACE_Thread_Control + to set status_ to 0. Thanks to Ross Dargahi + for reporting this. + + * ChangeLog: The ACE configuration files "config-irix*.h" defined + 'ACE_HAS_SIGINFO' to indicate that IRIX supports SVR4 extended + signals. This should be 'ACE_HAS_SIGINFO_T' instead. Thanks to + Craig Johnston for reporting + this. + +Wed Aug 21 21:09:01 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Time_Value.h: Added an extra condition, #if defined + (ACE_BUILD_DLL) so that ACE_Svc_Export evaluates to + something. Previously, it was evaluating to nothing in some + files such as Naming_Context.cpp where we were doing #define + ACE_BUILD_DLL and not #define ACE_BUILD_SVC_DLL. + +Wed Aug 21 00:33:17 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/ACE.cpp (format_hexdump): Fixed a minor bug in + format_hexdump(). If the buffer to dump is a multiple of 16 it + prints an extra blank line. ALso fixed the code to use spaces + rather than tabs and put an extra space between the first 8 HEX + bytes and the second. Thanks to Luca Priorelli + for this code. + + * ace/Log_Msg.h (ACE_HEX_DUMP): Added a new logging macro: + + #define ACE_HEX_DUMP(X) \ + do { int __ace_error = errno; \ + ACE_Log_Msg *ace___ = ACE_Log_Msg::instance (); \ + ace___->set (__FILE__, __LINE__, 0, errno, ace___->restart (), + ace___->msg_ostream ()); \ ace___->log_hexdump X; \ + } while (0) + + which makes it possible to dump info in HEX. Thanks to Luca + Priorelli for suggesting this. + + * ace/config-win32-msvc4.0.h: Added + + #define _WINSOCKAPI_ + + To avoid multiple inclusions. Thanks to Luca Priorelli + for suggesting this. + + * ace/OS.h: enclosed the #define of WIN32_LEAN_AND_MEAN macro + definition between #ifndef ... #endif to avoid compiler + warnings. Thanks to Luca Priorelli for + suggesting this. + + * ace/SOCK.cpp (win32_fini): Fixed a potential problem in ACE + where any code of the form: + + ACE_DEBUG ((LM_DEBUG, "%d", GetLastError())); + + will reset errno a couple of times before GetLastError() gets + called. So the result is always 0. The fix is to say: + + int ret = GetLastError(); + ACE_DEBUG ((LM_DEBUG, "%d", ret)); + + Thanks to Luca Priorelli for noticing + this. + + * ace/Connector.cpp (create_AST): Was missing a return 0; if we + successfully register a cancellation id. Thanks to William + L. Gerecke for reporting this bug. + + * ace/Module.h: Added a non-existent friend class to get ACE + to stop complaining + + private: + friend class ACE_Shutup_GPlusPlus; // Turn off g++ warning + ~ACE_Module (void); + // *Must* use dynamic allocation. + + Thanks to Eric Newton for the suggestion. + + * ace/Svc_Conf.y (ace_create_service_type): Removed some stray + calls to ACE_ERROR that were left over from earlier + configurations of ACE. Thanks to Gonzalo Diethelm + for reporting this. + + * ace/Log_Msg.cpp (instance): Fixed the #ifdefs so that + ACE_MT_SAFE implies ACE_HAS_THREAD_SPECIFIC_STORAGE. Thanks to + Gonzalo Diethelm for reporting the need for + this. + +Tue Aug 20 13:09:55 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * INET_Addr.cpp, line 84: Irix's C++ is not able to determine + whether to use the set(u_short,ACE_UINT32,int) or the + set(u_short,const char [],int), since on Irix, INADDR_ANY is 0. + I cast the value so that the call would read set(port, + ACE_UINT32(INADDR_ANY)) and everything went fine. Thanks to + Gonzalo Diethelm for reporting this. + + * ace/Synch[_T]: Added a new wait() method that takes a first + parameter which is the mutex used to serialize access to the + condition. This is useful if you want to store the + ACE_Condition object in shared memory (in which case, the use of + a reference to mutex_t doesn't work!). Thanks to Mark Patton + for recommending this approach. + + * ace/Task.h: Added a forward template declaration for + ACE_Task_Exit so that it will compile on HP/UX. Thanks to Tim + Ottinger for pointing this out. + + * ace: changed line 19 of ace/Str_Buf.h from + + #include "OS.h" + + to: + + #include "ace/OS.h" + + Fixed similar problems with OS.h at line 1154 and Dump.h at line + 150. Thanks to Alan Stewart for reporting this. + +Tue Aug 20 20:18:49 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * tests/TSS_Test.cpp (main): Fixed a small typo. I was referencing + the wrong variable but didn't catch it since it was in the #if + !defined (ACE_HAS_THREADS) section. Fixed the typo and also + renamed the variable called big_count to iterations. Thanks to + Tim Ottinger for pointing this out. + +Mon Aug 19 19:25:50 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * {examples,apps,tests}: Removed the use of zerop from these + files, as well... + + * ace/{Acceptor.cpp,Name_Proxy.cpp,Token.i}: Removed the use of + zerop from these files, as well... + + * ace/Connector.cpp (connect_svc_handler): It looks like our good + friend ACE_Time_Value::zerop isn't getting initialized correctly + on Win32. Therefore, I've replaced it with a direct use of + &ACE_Time_Value::zero. + + * ace/Time_Value.cpp: Removed the static pointer variable "zerop" + since there was no guarantee it was getting intialized before it + is used! Instead of using ACE_Time_Value::zerop, use + &ACE_Time_Value::zero. Thanks to William L. Gerecke + for reporting this problem. + + * ace/OS: Added zillions of changes to make ACE compile with OSF/1 + and its DCE threads implementation. Thanks to Martin Schoeckle + for sending these. + + * ace/config-osf1-3.2.h: Updated this file with fixes for OSF/1 by + Martin Schoeckle . + + * ace/ACE.cpp (handle_timed_complete): Added new logic to + ACE::handle_timed_complete() so that it sets errno to + ECONNREFUSED if the connection is refused by the server. When + you issue an asynchronous connect request, to complete it, you + will use complete() with a timeout. However, complete can fail, + and then it will deallocate any resource, (i.e. close down the + socket handle), also for timeout expiration. So, a user + interested in retrying to complete a connection while the + timeout expires will not use complete(); but rather will use + handle_timed_complete(). In fact, using handle_timed_complete() + the user could detect the reason of a failure (by examining + errno) and decide how to proceed. In the old ACE version the + problem was that, if handle_timed_complete() failed because of + the recv() returning 0, errno remained unchanged and so its + value could be quite misleading with respect to the reasons of + the failure. Thanks to Antonio Tortorici + for this fix and the explanation + above. + + * ace/OS.h: Added support for Borland 5.0's uint64. Thanks to + Hani Yakan for suggesting the strategy to + accomplish this. + +Mon Aug 19 15:52:07 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * tests: Added new macros to the test_config.h file in order to + simplify the testing. + +Mon Aug 19 00:21:22 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Re-released version 4.0.28 for testing (will change the version + number after Tim gives me the new Token stuff). + + * {netsvcs/lib,tests/test_config.h}: Removed spurious dependencies + on fstream.h and iostream.h. Thanks to Alan Stewart + for reporting this. + +Sat Aug 17 17:25:49 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Reactor: Removed the use of "inline" in the Reactor.cpp + files because this was causing problems with some + compilers/linkers. Thanks to Gonzalo Diethelm + for recommending this. + + * examples/Misc/test_XtReactor1.cpp: Added a new test of the + XtReactor, courtesy of Eric Newton . + + * ace/config-hpux-10.x.h: According to Eugene K. Plaude + , HP-UX 10.01 supports user-level threads + based on the pthreads interface specified by POSIX in 1003.4a, + Draft 4 (which is basically DCE threads). Therefore, I've + enabled the ACE_HAS_DCETHREADS symbol in the config-hpux-10.x.h + configuration file. If this isn't correct, please let me know. + +Sat Aug 17 02:18:39 1996 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * examples/Tokens/manual/README: Added a new Token example + application. The manual test gives users a text-based + interactive interface to local or remote tokens. This is + extremely useful for manually testing the token server and + setting up deadlock scenarios. See the README file for more + details. + + * examples/Tokens/deadlock/README: Updated the deadlock example + application to test the new deadlock detection algorithm for + readers/writer locks. I also added the use of Token Invariants + to ensure correctness of the mutexes and readers/writer locks. + See the README file for more details. + +Fri Aug 16 22:16:05 1996 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * ace/Token_Manager.cpp: Updated all Token code to use + ACE_OS::last_error instead of errno. + +Fri Aug 16 00:03:24 1996 Douglas C. Schmidt + + * After a long hiatus, released version 4.0.28 for testing. + +Thu Aug 15 21:04:35 1996 Douglas C. Schmidt + + * man: Updated all the ACE manual pages and html pages to reflect + recent changes. + + * netsvcs/lib/Server_Logging_Handler.cpp: Fixed an omitted + "ACE_BUILD_SVC_DLL" that was causing linker errors on NT. + Thanks to Luca Priorelli for reporting + this. + + * examples/Log_Msg/test_log_msg.cpp: Added a test for the new + log_hexdump() function. + + * ace/Log_Msg.cpp (log_hexdump): Integrated the log_hexdump() code + into the ACE Log_Msg abstraction. Thanks to Luca Priorelli + for fixing this and for Todd Montgomery + for originally supplying the code. + + * ace/Signal.cpp (ACE_Sig_Handlers): Moved the #endif /* HPUX */ + down to the end of the file so that it works correctly on HPUX. + Thanks to Eric C. Newton for report this bug. + + * ace/OS.i: Updated the behavior of thr_join() so that it will do + a ::CloseHandle after getting the exit status. Thanks to the + ever vigilant James Mansion + (mansionj@lonnds.ml.com) for noticing this. + + * examples: Finally added Tim and Prashant's examles/OS directory, + which contains a test that illustrates a "portable" means to + spawn processes on NT and UNIX. + + * ace/Malloc_T.cpp (next): Added an overloaded next() method that + returns the name that is bound to the pointer in the + Malloc_Iterator. This is useful in order to differentiate + entries in the pool based on their name. Thanks to Kim Gillies + for suggesting this. + + * ace: Changed all uses of thread_t, thread_key_t, mutex_t, + rwlock_t, sema_t, cond_t, etc. to ACE_* in order to avoid + polluting the name space. Also switched from using macros to + using typedefs whereever possible. Thanks to Gonzalo Diethelm + for recommending this. + + * ace/System_Time.cpp: Added template specializations for + templates used in the ACE_System_Time class. This should solve + some nasty undefined templates problems with GCC... Thanks to + Joseph DeAngelis for pointing out the + problem. + + * ace/Name_Space.cpp: Fixed the file Name_Space.cpp as follows: + + // Name_Space.cpp + #define ACE_BUILD_DLL + //#include "Name_Space.h" + #include "ace/Name_Space.h" + + Thanks to Eugene K. Plaude for fixing this! + + * ace/config-hpux-10.x.h: Added support for TLI since according to + Eugene K. Plaude this should work. If not, + please let me know. + +Wed Aug 14 21:29:46 1996 Douglas C. Schmidt + + * examples/Reactor/Logger: rearranged the Logger directory so it + would be more clear what the client and server programs did and + how to run them. + + * examples: Merged the contents of the SVR4 examples directory + into the IPC_SAP/SOCK_SAP directory so that we can remove the + SVR4 directory altogether (it wasn't contributing much...). + + * examples: Removed the vestigal Win32 tests since ACE now runs on + Win32 and we don't need a separate test directory. + + * netsvcs/client: Renamed the file remaining file in this + directory to logging_app.cpp since I moved the other file to the + examples/Reactor/Logger directory. + + * ace/Reactor.cpp (check_handles): If eh->get_handle() returns -1 + the select() code will index the [-1] element of an array. To + fix this, I've added a check of the value returned from + eh->get_handle(). Thanks to Eric C. Newton for + reporting this. + + * ace/OS.i (sema_wait): Fixed a subtle bug in the Pthreads + wrappers that surfaced on the SGI IRIX 6.2 port. There was some + code that looked like this: + + pthread_cleanup_push(); + int result = 0; + ... + pthread_cleanup_pop(); + return result; + + However, on Irix 6.2, the push introduces a new scope that is + closed by the pop, so result goes out of scope before returning. + Thanks to Gonzalo Diethelm for pointing this + out. + + * ace/OS.h: Changed the definition of pthread_mutex_t and + pthread_cond_t to mutex_t and cond_t to be consistent with other + usage in ACE. Thanks to Gonzalo Diethelm for + pointing this out. + +Wed Aug 14 01:25:47 1996 + + * ace/SPIPE_Acceptor.cpp: Added the PIPE_TYPE_MESSAGE | + PIPE_READMODE_MESSAGE flags to CreateNamedPipe pipe options so + that data is received in messages rather than as a stream. This + is consistent with the behavior of the SPIPE_Connector. When we + have time, we need to extend the interface so that stream pipes + are also supported, as well. + + * SPIPE_Acceptor.cpp: Made the ACE SPIPE in and out buffer sizes + 10 k. The previous size was just 512 bytes. This larger buffer + size helps decrease flow control. + +Tue Aug 13 23:21:46 1996 + + * examples/Connection/blocking: Updated the blocking SPIPE example + application to use a pool of threads in the proactor to handle + incoming client messages. The SPIPE-acceptor example + illustrates how named pipes are used on NT. Once the server + establishes a connection to a single client, it spawns a thread + pool to handle incoming requests via the proactor event + loop. That is, a separate thread from the pool is used to + process each message sent by a client. The size of the thread + pool can be specified by command-line arguments. This example + leverages the queueing performed by the NT kernel to trivially + implement a thread pool architecture. See + examples/Connection/blocking/README for more details. + + * Service_Config.h: Added a parameter (with a default + size of 0) to the proactor accessor method. This allows + applications to specify the size of the thread pool that can + block on Proactor::handle_events. + +Tue Aug 13 02:30:58 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Task: Added a new public interface called thr_count(). This + returns a count of the number of threads running within a Task. + If the value returned is 0, then the Task is a Passive Object. + If the value returns is > 0 the task is an Active Object, and + the value is a count of the number of threads running within the + object at this snapshot of time. + + * ace/OS: I implemented Karlheinz's suggested optimizations for + the ACE condition variable implementation under Win32. Here's + the deal... The original implementation used an internal_mutex + to ensure that access to the count of the number of waiters was + serialized between the waiter and signaler threads. The new + implementation is designed so that only the waiter threads + access the waiter count. Therefore, we can utilize the + external_mutex to serialize access to this, thus eliminating the + need for the internal_mutex. However, this means that code + *must* be written using the standard condition variable idiom, + i.e., + + int resources () + { + external_mutex.acquire (); + + // ... + + cond.signal (); + external_mutex.release (); + } + + Rather than like this: + + int resources () + { + external_mutex.acquire (); + + // ... + + external_mutex.release (); + cond.signal (); + } + + which is what some thread programming books recommend as an + optimization. However, you should be careful not to use this + form since it can lead to "lost wakeup" bugs caused by the fact + that the implementation of ACE_OS::cond_signal will test if the + waiter count > 0 *without holding any locks*!!! + + Fortunately, ensuring this shouldn't be a problem since most ACE + code uses the following idiom: + + int resources () + { + ACE_Guard mon (external_mutex); + + // ... + + cond.signal (); + // Destructor of mon releases external_mutex. + } + + Clearly, there are subtle tradeoffs between performance and + programmability here... + + * ace/Synch: Updated all of the ACE semaphore wrappers to take the + new "max" value as their final constructor argument. + + * ace/OS: Added a new default argument to the end of the + sema_init() method. This allows us to specify the maximum value + of the semaphore (this is only important on NT). Currently, it + is hard-coded to 0x7fffffff in uses. The new approach makes it + possible to set the max to a different value. Thanks to + Karlheinz for requesting this. + + * ace/Message_Queue.cpp: Added an implementation of the dump(). + Thanks Karlheinz. + + * ace/Synch.cpp: Added an implementation of the dump() method. + Thanks Karlheinz. + + * ace: Updated all usage of ACE_Thread_Mutex_Guard so that it now + uses the ACE_GUARD* macros correctly. Thanks to Chris Eich + for pointing out the + need for this. + + * examples/Threads: Added Karlheinz's new test_barrier2.cpp test + program that makes sure that the ACE_Message_Queues are working + correctly when accessed by multiple threads. + + * netsvcs/lib/Server_Logging_Handler.cpp (handle_logging_record): + Fixed an errant use of ACE_Guard, which wasn't properly checking + of the Guard acquired the lock. Thanks to Chris Eich + for pointing this out. + + * ace/OS.h (ACE_GUARD): Added default "ace_mon" implementations of + type ACE_Null_Mutex even in cases where there's no threading + defined so that code accessing ace_mon.release() and + ace_mon.acquire() will compile correctly. + + * apps/Gateway/Gateway/Channel.h: Fixed the code so + that we don't try to use TLI if the platform doesn't support it + (instead, we'll use sockets). Thanks to Marius Kjeldahl + for reporting this problem. + + * examples/ASX/Event_Server/{Supplier,Consumer}: Fixed the code so + that we don't try to use TLI if the platform doesn't support it + (instead, we'll use sockets). Thanks to Marius Kjeldahl + for reporting this problem. + +Mon Aug 12 14:50:47 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * examples/Misc: Added Eric Newton's test case for + his XtReactor integration. + + * ace: Included Eric Newton's code that integrates + ACE with the Xt event loop. This still needs a bit of work + (e.g., making it thread-safe and incorporating signal support), so + I haven't added it to the Makefile yet. If someone can take the + time to fix it up, I'll be happy to integrate it into ACE. + + * ace/Message_Queue.cpp (dequeue_head): Fixed the mother of all + bugs in the ACE_Message_Queue implementation... The problem was + that I was trying to be too clever by optimizing the number of + Condition::signal() calls by only calling signal() when the + queue changed state from empty to non-empty (or full to + non-full). It turns out that this optimization works fine for a + single producer/consumer case, but fails when there are multiple + consumers. The fix was just to call signal() every time. This + should be ok because the underlying Condition variable + implementation will perform the optimization in the correct + fashion. Thanks to the omniscient Karlheinz for detecting this + problem and reporting it. + +Sun Aug 11 15:52:07 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * tests: Made minor changes to test_config.h, SPIPE_Test.cpp, and + UPIPE_SAP_Test.cpp to accomodate the change made to SPIPE_Addr. + SPIPE_Addr now accepts a string of the form [host:]port and then + creates the rendezvous point. Originally, SPIPE_Addr would + assume that the string being passed in was the actual rendezvous + point. + +Sat Aug 10 18:41:21 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * netsvcs/lib/Logger.cpp (init): Added a new service to netsvcs + called ACE_Logger which allows us to control the output of all + the services. The ACE_Logger service can be invoked with + different flags (such as STDERR|OSTREAM) which in turn sets + ACE_Log_Msg to direct the output of all the services to the + appropriate stream(s). Note that if a service needs to stay + unaffected from ACE_Logger, it should be invoked before + ACE_Logger gets invoked. Also note that like other services in + netsvcs, ACE_Logger can also be dynamically linked in. + +Sat Aug 10 14:23:07 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Added Steve Huston's patches to get ACE + to compile on UnixWare 2.01. This mostly involved changes to + the internal types used by the socket wrappers. Thanks Steve! + +Fri Aug 9 01:34:19 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * examples/ASX/UPIPE_Event_Server/Options.cpp (print_results): + Added a typedef to avoid problems if a platform doesn't support + prusage_t. Thanks to Marius Kjeldahl for + reporting this. + + * include/makeinclude/platform_linux_pthread.GNU. The line that + say: + + LIBS = -lpthreads -lstdc++ + + was modified to say: + + LIBS += -lpthreads -lstdc++ + + Thanks to Marius Kjeldahl for reporting + this. + +Fri Aug 9 18:26:16 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Local_Name_Space.cpp (reset): Fixed a subtle (yet very + annoying bug). In switching contexts a test program would hang + after a certain number of switches. Having gone through the code + thoroughly and with the aid of Purify, the bug was narrowed down + to an extraneous delete taking place in + ACE_Name_Space::reset(). Essentially, we do not need to delete + ACE_Name_Space_Map::instance() which is actually the + SHARED_MALLOC since it gets deleted in the destructor of + ACE_Local_Name_Space. + +Thu Aug 8 17:55:20 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/SPIPE_Addr.cpp (set): Implemented + ACE_SPIPE_Addr::string_to_addr(). Modified ACE_SPIPE_Addr::set() + using code provided by Brad Flood to create the rendezvous + point. Note that originally ACE_SPIPE_Addr constructor and set() + would take the actual rendezvous point but now they rely on + being passed a string which is of the format "[host]:port" + (where host is optional). The rendezvous point is then created + by extracting from the string the hostname (if any) and also + using the port number as the unique pipe name. Note that this + approach works on both UNIX and Win32. + +Mon Aug 5 20:15:59 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/OS.i (last_error): Fixed a typo. In the set and get methods + last_error(), there should be a check for "if defined + (ACE_WIN32)" and not "if defined (ACE_HAS_WIN32)" + +Wed Aug 7 00:21:42 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Log_Msg.h: Replaced all uses of errno *following calls to + ACE_Log_Msg::instance()* so that we first cache errno in a local + variable called __ace_errno. We need to do this because + ACE_Log_Msg::instance() can reset errno == 0. Thanks to + Tim for pointing this out. + +Mon Aug 5 20:15:59 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/OS.i (last_error): Fixed a typo. In the set and get methods + last_error(), there should be a check for + "if defined (ACE_WIN32)" and not "if defined (ACE_HAS_WIN32)" + +Sat Aug 3 14:52:32 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * examples/Win32/win32_client.cpp: Changed ACE_GUARD_RETURN to + ACE_GUARD in the method Errno::flags since the return type is + void. + + * examples/Connection/non_blocking/CPP-connector.cpp: Made some + minor changes to get things compiling on Win32. The call to + handle_close now takes zero as the first argument (which is + never used). Also the arguments to ACE_SERVER_ADDRESS are now + swapped (hostname followed by port number) to be consistent with + the change made to the macro. Thanks to Brad Flood for + suggesting these changes. + + * examples/Connection/non_blocking/CPP-acceptor.cpp: Made minor + changes to some of the methods to make sure all control paths + return a value. Also changed the default port number to + ACE_DEFAULT_SERVER_PORT_STR to match what the connector tries to + connect to. Thanks to Brad Flood for + suggesting these changes. + + * ace/OS.h (ACE_SERVER_ADDRESS): Modified the macro + ACE_SERVER_ADDRESS so that it creates a string of a server + address with a "host:port" format. Previously the order was + reversed. Thanks to Brad Flood for suggesting this change. + +Sat Aug 3 00:07:26 1996 Douglas C. Schmidt (schmidt@lambada.cs.wustl.edu) + + * ace: Fixed problems with recursive tracing of ACE_TRACE by + commenting out certain constructors in IPC_SAP.cpp, + FIFO_Send_Msg.cpp, FIFO_Send.cpp, and FIFO.cpp. Thanks to + Karlheinz for finding and reporting these fixes. + +Fri Aug 2 22:19:05 1996 Douglas C. Schmidt (schmidt@lambada.cs.wustl.edu) + + * ace/ACE.cpp (format_hexdump): Fixed an infamous "off by one" bug + that was causing this to fail on Win32 (time to switch to Java? ;-)). + Thanks to lucapri@mbox.vol.it for finding this. + +Thu Aug 1 14:08:30 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/CORBA_Handler.cpp (activate_service): Fixed a typo caused by + an omitted ENDTRY. Thanks to Garrett Conaty + for noticing this. + +Mon Jul 29 10:03:16 1996 Douglas C. Schmidt (schmidt@lambada.cs.wustl.edu) + + * examples/Win32/win32_client.cpp: There was a typo in one of the + ACE_GUARD macros. Thanks to Tim Ottinger + for pointing this out. + +Mon Jul 22 12:41:22 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Local_Name_Space.cpp (reset): Added a new method + ACE_Name_Space_Map::reset() which deletes the instance of + ACE_Name_Space_Map. This forces instance() to create a new + instance using a new context file in the case of the context + having changed. I make use of this in + ACE_Local_Name_Space::create_manager(). + +Fri Jul 19 12:28:07 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/System_Time.cpp (get_master_system_time): Modified + ACE_System_Time::get_master_system_time() so that if an entry + for the time is not found in shared memory (indicating that no + Clerk is running), then we should just return the local time of + the host. + + * netsvcs/lib/TS_Clerk_Handler.cpp (update_time): Modified + ACE_TS_Clerk_Handler::update_time() so that if the Clerk is not + connected to any servers, is sets the delta time to zero + allowing clients to then use the local time of the host. + +Wed Jul 17 22:19:53 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/UPIPE_Connector.cpp (connect): Added an #ifdef around the + check of ACE_OS::isastream (handle) in + ACE_UPIPE_Connector::connect() since the call is not supported + on NT. + +Thu Jul 11 22:22:57 1996 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * ace/OS.i (kill): Modified ACE_OS::kill so that it works on NT. + It takes a process ID, creates a handle for the associated + process, and calls TerminateProcess on the handle. This is + actually pretty dangerous according to the NT documentation. + Can majorly confuse DLLs. Does the same old thing on UNIX. + + * ace/OS.cpp (fork_exec): Added a fork_exec operation to ACE_OS. + This works on UNIX and NT. It combines the forking and exec'ing + into one call. This has to be combined since Win32 + CreateProcess only starts applications from scratch (unlike UNIX + fork). + + * examples/OS/test_os.cpp: Added a new example application to test + the new ACE_OS::fork_exec and ACE_OS::kill operations. + +Tue Jul 9 13:04:14 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Service_Manager.cpp (reconfigure_services): To improve + portability on Win32 and UNIX I replaced the use of a signal to + trigger reconfiguration to instead make a call to the new + ACE_service_Config::reconfig_occurred() method. This should + actually perform the same as the original approach, since all + the signal handler ever did was to set this flag! Thanks to + Karlheinz for pointing out the need for this. + + * ace/Service_Config.h: Added a new static public method called + reconfig_occurred(sig_atomic_t) to set if a reconfiguration + should take place the next time through the event loop. + +Mon Jul 8 14:20:01 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Time_Value.h: Added "ACE_Export" before all global operators + to allow them to be dll-exportable on NT. + +Mon Jul 8 13:12:05 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/{Message_Block,DEV_IO,SPIPE_Stream}.cpp: Fixed several more + cases of delete array that should have been delete [] array. + Thanks to Tom Leith for pointing out some of these. I can hear + the ghost of James Mansion coming closer... ;-) + + * INSTALL: Added tips on how to install ACE on a Win32 platform + that lacks a network card. + + * ChangeLog: Split ChangeLog-96 into two files (ChangeLog-96a and + ChangeLog-96b) since it was becoming quite large! Thanks to + Chris Lahey for pointing this out. + + * ace/Stream.cpp: Was missing a "return 0;" at the end of the + close() method. Thanks to Tom Leith for + finding this. + +Mon Jul 8 14:20:01 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Time_Value.h: Added "ACE_Export" before all global operators + to allow them to be exportable from Win32 DLLs. + +Sun Jul 7 10:34:48 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released version 4.0.27 for testing. + + * config-sunos5.5*.h: Removed all uses of ACE_HAS_SVR4_SIGNAL_T in + the config files since Solaris 2.5 has consistent signal and + sigaction types (at last!). + + * Installed and compiled ACE successfully with the new SunC++ 4.1 + compiler on Solaris 2.5. However, there seems to be major + problems with the interaction of the SunC++ exception handling + runtime system and the Solaris multi-threading mechanisms. This + is causing the ACE multi-threading tests to bomb with + segmentation faults inside of the _ex_unwind() library function. + If you read the /opt/SUNWspro_3.1/READMEs/c++ file you'll see + why this problem is occurring (apparently due to bugs in the + Solaris libC.so.5 C++ runtime library). + + There seem to be two fixes for this problem: + + 1. Add the following to *all* threads (including main): + + #include + + void *my_thread_entry_point (void *) { + set_terminate (abort); + set_unexpected (abort); + + // Do real work... + } + + This is the approach recommended by the README file in + SUNWspro_3.1. However, it is *clearly* a horrible hack and + very non-portable (therefore, I deem it worthy of Microsoft + ;-)). + + 2. Compile ACE (and applications?) with -noex in order to avoid + this bug. This is clearly not desirable either since it + precludes the use of exception handling with C++ and threads + on Solaris... + + Since ACE doesn't use exceptions internally on Solaris option 2 + seems like the best approach for the time being. When Sun gets + it act together and releases a bug-free library and C++ + software, I'll fix ACE accordingly. + + * tests: Integrated the latest of Prashant's "one-button" tests + into the main ACE release. These will run on both UNIX and + Win32 now. + + * ace/UPIPE_Stream.cpp (recv): Changed the semantics of the + ACE_UPIPE_Stream::recv (char *, size_t, ACE_Time_Value *) + method. Currently, the behavior is to block until *exactly* N + bytes are read. However, this is incorrect for 2 reasons: + + 1. It makes it hard to write a server that doesn't know + precisely how big the messages are from the client. In + particular, if the receiver doesn't know how big the buffer + messages are from the client it will block indefinitely! + + 2. It is redundant with respect to the + ACE_UPIPE_Stream::recv_n(), which also blocks until all N + bytes are received. + + Therefore, I've made the new UPIPE_Stream::recv() method block + only until it's received the first block of data that allows it + to fulfill its size request, or anything that is smaller than + that size. + + * ace/OS.cpp (thr_create): Since POSIX pthreads doesn't provide an + equivalent of THR_NEW_LWP in the pthreads_attr_* functions, I've + added an emulation that should work for Solaris. Basically, if + THR_NEW_LWP is set when ACE_OS::thr_create() is called, we use + the ACE_OS::thr_{get,set}concurrency methods to increase the + number of LWPs by one. + + * ace/Message_Block: Changed the default high water mark for an + ACE_Message_Queue from 4K to 16K. This is useful since it + allows applications to buffer more information before blocking. + + * ace/Log_Msg: Added a pair of operations that allow applications + to acquire and release the synchronization lock used internally + by the ACE_Log_Msg implementation. This allows applications to + hold the lock atomically over a number of calls to ACE_Log_Msg, + which is useful for composite operations like the following: + + // Make sure the following operations are run atomically! + ACE_LOG_MSG->acquire (); + + while (c != '!') + { + if (c_stream.recv (&c, 1) == -1) + ACE_DEBUG ((LM_DEBUG, + "(%t) buffer recv from supplier failed\n")); + else + ACE_DEBUG ((LM_DEBUG, "%c", c)); + } + + ACE_LOG_MSG->release (); + + * examples/IPC_SAP/UPIPE_SAP: Revised all of the UPIPE_Stream + tests to make them more consistent and correct with respect to + the new changes. + + * ace/Stream.cpp (link_i): There was a bug in the link_i() logic + because we weren't also linking the other stream back to our + stream. + + * ace/UPIPE_{Acceptor,Connector}: Modified both of these classes + so that they don't + + * ace/Stream.cpp (close): Modified close() so that it now detects + "double-closes" and ignores anything but the first one. + + * ace/UPIPE_Stream: Updated this class so that it no longer + inherits from ACE_Stream (previously ACE_UPIPE_Stream had + inherited from *both* ACE_Stream *and* ACE_SPIPE). There are + several reasons we shouldn't inherit from ACE_Stream: + + 1. There are operations on ACE_Stream that don't make any sense + on ACE_UPIPE_Stream (e.g., link(), unlink()). + + 2. ACE_Stream isn't really designed to be subclassed (e.g., + it doesn't have virtual methods). + + 3. Not inheriting makes the interface cleaner, e.g., we now use + send() and recv() methods consistently, rather than + send_msg()/put() and recv_msg()/get(). + + 4. The return values from the I/O methods are now more + consistent than they were before. + + * ace/Message_Block: The signature for the copy() method was + incorrect. It should have been copy (const char *, .....) + rather than copy (char *, ....). + + * examples/IPC_SAP/UPIPE_SAP: Together with Prashant, fixed up the + ACE_UPIPE_Stream tests so they more cleverly + (and correctly) utilize and illustrate various ACE concurrency + features. + +Sat Jul 6 18:28:55 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Stream.cpp: Fixed some obscure bugs with Stream::unlink() + and Stream::link(). These bugs were triggered by the + ACE_UPIPE_Stream tests. We need to make sure that we don't have + race conditions in the order in which ACE_UPIPE_Stream close() + down. Prashant and I fixed this problem by (1) adding a lock to + unlink() and link() and then creating unlink_i() and link_i() to + perform the work and (2) being more careful about trying to + unlink our side and the other side of a linked Stream. + + * ace/config-linux.h: According to Istvan Buki + , Linux now supports the + send_msg()/recv_msg() system calls, as well as UNIX domain + sockets. Therefore, I've updated the config-linux*.h file to + remove the existing restrictions. If this turns out not to be + the case, please let me know. + + * ace/LSOCK.cpp (recv_handle): Added a change to some casts to + make ACE compile with Linux. Thanks to Istvan Buki + for reporting this. + + * apps/Gateway/Gateway/File_Parser.cpp (readword): Removed + yet another use of: + + for (int x; foo(x); ) + { + } + + x = 10; + + Which is now a deprecated feature of C++. + + * include/makeinclude: added the -lw library to the GNU G++ + platform*.GNU file in order to pick up the wide-character string + functions. + +Fri Jul 5 18:11:44 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Re-released version 4.0.26 for testing. + + * ace/CORBA_Handler.cpp (activate_service): Revised the code to + use the Orbix macros for TRY/CATCH rather than try/catch. We + need this to make legacy code work! Thanks to Irfan for + pointing this out. + + * ace/Thread_Manager: Fixed a bunch of typos that grelims snuck + in. Thanks to Jack Erickson for reporting this. + + * examples/IPC_SAP/TLI_SAP/ftp-server.cpp: Fixed some typos that + were causing problems on AIX. Thanks to Greg Wilson + for reporting this. + + * examples/Reactor/Misc/test_time_value.cpp (operator<<): Added a + "const" in front of the ACE_Time_Value & in order to make things + work correctly on AIX. Thanks to Greg Wilson + for reporting this. + + * ace/SPIPE_Acceptor: Fixed some missing "returns" that had sprung + up in the #else arm of the SPIPE code. Thanks to Greg Wilson + for reporting this. + + * apps/Synch-Benchmarks/Benchmark: Fixed a typo that was causing + the application to fail to compile on AIX. Thanks to Greg + Wilson for reporting this. + + * Changed all uses of virtual int init (int, char **) to virtual + int init (int, char *[]) to workaround bugs with MSVC++... + + * ace/OS.h: for POSIX pthreads, changed the definition of the + THR_SCOPE_SYSTEM macro so that it has the same value as + THR_BOUND. If this isn't done, then things don't quite work + right when we implement the ACE_OS::thr_create() wrapper. + +Thu Jul 4 13:17:35 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Thread_Manager: Added a new method called thr_self() that + *does* return a real handle that can be used by + WaitForMultipleObjects, etc. Note that this new approach + cleverly caches this handle in TSS in order to cut down on + search time. Thanks to Jesper for pointing this technique out. + + * ace/OS.i (thr_self): After receiving comments from Jesper, undid + the earlier change today that was returning a duplicated handle + for ACE_OS::thr_self(). It turns out this is a bad idea because + the handle most typically doesn't get released, which leads to + handle leaks. + + * ace/Thread_Manager: Added a new private method called + check_state(). This method extends existing code to be smarter + about how we check to see what "state" (e.g., suspended, + cancelled, etc.) a thread is in. The original code + (which was a macro called ACE_CHECK_STATE) didn't behave + correctly if we asked about the state of a thread that was + different from ourselves! + + * ace/Thread: Modified the public interface to + ACE_Thread::spawn_n() so that it now takes a void *stack[] and + size_t stack_size[]. If stack != 0 it is assumed to be an array + of n pointers to the base of the stacks to use for the threads + being spawned. Likewise, if stack_size != 0 it is assumed to be + an array of n values indicating how big each of the + corresponding stacks are. This is useful since now we can spawn + a group of threads each of which has its own custom stack and/or + stack size. Thanks to Ashish Singhai + for pointing out the need for + this. + + * apps/Synch-Benchmarks: Updated the Synch benchmarks so that most + of them work again. The trick is *not* to use ACE_OS::sleep () + (which doesn't seem to be thread-friendly...) but instead to use + ACE_OS::select() as a timer. + + * man: updated the manual pages and html pages to reflect all the + recent changes. + + * ace/Malloc_T.cpp (open): Added a check to make sure that if + init_acquire() fails we don't let this go by undetected... + Thanks to Karlheinz for pointing out the need for this. + + * ace/OS.i (thr_getconcurrency): Fixed a subtle bug with the + ACE_OS::thr_getconcurrency() function. I was mistakenly using + ACE_ADAPT_RETVAL for the result of ::thr_getconcurrency(), which + is clearly wrong! + + * ace/Service_Record.cpp (remove): Fixed a typo that was causing + the removals of Modules in a dynamically configured Stream to go + into infinite loops. + + * ace/OS.i (thr_self): Modified the ACE_OS::thr_self (hthread_t &) + function so that it will return a *duplicate* of the current + thread's pseudo-handle returned by GetCurrentThread(). This + change is necessary because the pseudo-handle returned by + GetCurrentThread() is pretty useless (e.g., it can't be used by + any other thread to "wait" for this thread to exit). This new + behavior is used in the examples/Reactor/ReactorEx test program. + + * ace/Service_Config.cpp: I'd forgotten to assign the + delete_svc_rep_ flag when dynamically allocating the svc_rep_. + This is fixed now. + +Wed Jul 3 20:09:44 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Added a new subdirectory called $WRAPPER_ROOT/tests that + contains the first phase of the ACE regression tests. + + * ace/Reactor.cpp (check_handles): Fixed an earlier fix with the + ACE_Reactor::wait_for_multiple_events() method. The earlier fix + had changed the exit condition of do/while loop to be + + while (nfound == -1 && this->handle_error () >= 0); + + However, this was causing signal handling to break... + Therefore, the right fix is to keep the exit test as: + + while (nfound == -1 && this->handle_error () > 0); + + and instead fix handle_errors() so that it returns 1 if we're + able to fix a bad handle... Thanks to Prashant and Irfan for + tracking this down. + + * ace/OS: Finally broken down and added a new pair of ACE_OS + functions called "last_error()". These basically call + SetLastError/GetLastError on Win32 or they set/get errno on + UNIX. + + * ace/config-linux.h: Fixed an annoying problem with + struct msghdr in Linux by adding + + #define msg_accrights msg_control + #define msg_accrightslen msg_controllen + + to the config-linux*.h files. Thanks to Michael R"uger + for suggesting this. + + * ace/SOCK_IO.cpp (recv): Fixed a "bug" where + ACE_SOCK_IO::{send,recv} allocates with: + + iovec *iovp = new iovec[total_tuples]; + + But deletes with: + + delete iovp; + + Thanks to the ever vigilant James Mansion + (mansionj@lonnds.ml.com) for noticing this. + +Tue Jul 2 23:48:38 1996 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * ace/Service_Config.h: Added ReactorEx to the singleton resources + that the Service_Configurator holds. This includes accessors, + destruction hooks, and event loop methods. + + * examples/Reactor/ReactorEx/README: There is a new example + application for the ReactorEx. Please check out + examples/Reactor/ReactorEx/README for details. + +Tue Jul 2 18:43:12 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * Released version 4.0.25 for testing. + + * examples/ASX/Message_Queue/priority_buffer.cpp: Added a new test + program that illustrates the use of the new Message_Queue + priority scheme. + + * ace/Message_Queue: Added new support for prioritized message + enqueueing into the ACE_Message_Queue. Now, when an application + uses ACE_Message_Queue::enqueue() the new Message_Block is + inserted into the queue according to its msg_priority(). When + dequeue_head() is used the item retrieved will then be the item + of "highest priority" (priorities range from 0 to MAX_LONG). + Note that the semantics of the existing enqueue methods, + enqueue_head() and enqueue_tail(), remain unchanged. + + * ace/Message_Block: Changed the type of the priority in a message + block to u_long rather than u_char. This gives us a much + greater range of priorities! + +Mon Jul 1 01:12:08 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) + + * ace/Thread.h: Changed a couple of mistyped comments. Thanks + to the eagle eyes of Andres Kruse for noticing this. + + * ace/OS: added more comprehensive support for UNICODE to + both the Win32 and UNIX OS adaptation layer. This new + support automagically selects the appropriate implementation + (i.e., either char * or wchar_t *) for the string comparison + routines (which are used in places like ACE_Mem_Map). + + * ace/Service_Config: Split up the ACE_Service_Config::close() + method into two parts: close_svcs() and close_singletons(). + This makes it possible to remove svc.conf services without + destroying Singletons like the Proactor, Reactor, etc. Thanks + to Karlheinz for recommending this. + + * ace/Service_Config: Added flags for remembering who created the + Singleton Proactor, Allocator, Thread_Manager, and + Service_Repository (in addition to the Reactor, which I did last + week). If we created these Singletons, then we are responsible + for freeing them up. Thanks to Karlheinz for pointing out the + need for this. + +Mon Jul 1 16:26:27 1996 Prashant Jain (pjain@merengue.cs.wustl.edu) + + * ace/Connector.cpp: Added two new arguments to connect () namely, + "int flags" and "int perms". The Connector can now pass these + two arguments to its template arguments (e.g., SOCK_Connector, + SPIPE_Connector, etc.) when calling their connect() method. A + consequence of doing this was that we had to modify the + signature of the connect() method on some of the IPC_SAP classes + (e.g., TLI_Connector, SOCK_Connector, and LSOCK_Connector). + Note that these changes may break some existing code, + particularly with TLI_Connector (see below), so beware... + + * ace/TLI_Connector.cpp: Changed the order of the connect() + arguments to be more consistent with the rest of the IPC_SAP + classes used with the Connector. Please note that existing + examples which use TLI_Connector may need to be modified as a + result of this change. + + * ace/OS.i (open): Modified ACE_OS::open() to use the argument + perms to turn the flag FILE_FLAG_OVERLAPPED on and off for + Win32. + + * ace/Service_Config.cpp (end_proactor_event_loop): Added new + methods run_proactor_event_loop() and end_proactor_event_loop() + which call handle_events on the Proactor. + +Mon Jul 1 02:15:34 1996 Tim H. Harrison (harrison@lambada.cs.wustl.edu) + + * ace/Proactor.h: Made ACE_Proactor an ACE_Event_Handler so that + it can be registered with the ACE_ReactorEx. ACE_Proactor + associates the same global HANDLE with every overlapped I/O + operation. This global HANDLE can be registered with the + ACE_ReactorEx. Therefore, by using the + ACE_Proactor::handle_signal method as an adapter, we can now + dispatch overlapped I/O and other "waitable" objects from a one + ACE_ReactorEx running in a single thread of control. Thanks to + James Mansion for setting us on the + right path! + + * ace/ReactorEx.h: Added a ACE_ReactorEx to encapsulate Win32 + WaitForMultipleObjects(). The ACE_ReactorEx handle_events() + method calls ACE_Event_Handler::handle_signal when the + corresponding Win32 HANDLE becomes signaled. This gives us a + uniform abstraction for dispatching all "waitable" objects on + Win32, including events related to I/O completion ports and + events related to other forms of NT synchronization (such as + mutexes, semaphores, threads, etc.). + + * ace/Timer_Queue.h (calculate_timeout): Added a calculate_timeout + method to ACE_Timer_Queue. Also removed the same method from + ACE_Reactor. This is so Reactor, ReactorEx, and Proactor can + all reuse the calculations required by the Timer_Queue without + duplicating code. diff --git a/ACE/ChangeLogs/ChangeLog-97a b/ACE/ChangeLogs/ChangeLog-97a new file mode 100644 index 00000000000..161d4746d2d --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-97a @@ -0,0 +1,9203 @@ +Thu Jul 3 20:36:19 1997 Nanbor Wang + + * performance-tests/Misc/childbirth_time.cpp: Changed the + parameter type of "Profiler" from int to size_t to make g++ + happy. + +Thu Jul 03 20:03:18 1997 David L. Levine + + * ace/Reactor.cpp (remove_handler): added ACE_UNUSED_ARG + when NSIG != 0. + +Wed Jul 2 23:41:43 1997 Nanbor Wang + + * performance-tests/Misc/childbirth_time.cpp: Fixed some typos. + +Wed Jul 2 23:13:10 1997 Douglas C. Schmidt + + * performance-tests/Misc/childbirth_time.cpp: Revised the + code to use ACE programming style. + +Wed Jul 02 23:02:24 1997 Douglas C. Schmidt + + * ACE version 4.2.15, released Wed Jul 02 23:02:24 1997. + +Wed Jul 2 22:23:49 1997 Douglas C. Schmidt + + * ace/Service_Config.cpp: Used the new ACE_LACKS_UNIX_SIGNALS + macro to reduce the #ifdef complexity somewhat. + + * ace/config-{chorus,win32-common}.h: Added #define for + ACE_LACKS_UNIX_SIGNALS. + + * ace/OS.h: If a platform (e.g., Chorus) doesn't support signals + then #define NSIG 0. + + * ace/Reactor.cpp: Chorus does not support signals. Make the call + to register/remove_handler(sig_set, evnet_handler) return + succesfully so that some of the examples and test programs do + not need to be changed. Thanks to Wei Chiang for this. + + * ace/config-chorus.h: Added a new macro for + ACE_LACKS_NAMED_POSIX_SEM to handle Chorus. Thanks to Wei + Chiang for this. + + * ace/OS.i: Define macros ACE_PTHREAD_CLEANUP_* so that the + related code does not need to be surrounded with #ifdefs. + Thanks to Wei Chiang for this. + + * ace/OS.i: Chorus does not support named semaphores. The code + that to do with names in sema_init() and sema_destory() is + therefore disabled. Thanks to Wei Chiang for this. + + * ace/config-chorus.h: Added support for ACE_LACKS_PTHREAD_CLEANUP + and ACE_HAS_POSIX_SEM to the Chorus port. Thanks to Wei Chiang + for this. + +Wed Jul 2 17:37:09 1997 Douglas C. Schmidt + + * ace/Hash_Map_Manager.cpp: Clarified the behavior of close_i() a + bit more. + +Wed Jul 2 09:54:36 1997 Douglas C. Schmidt + + * ace/Hash_Map_Manager.cpp: Fixed a couple more size_t->u_long + conversions for ACE_Hash_Map_Manager::hash(). This didn't harm + anything but it's good to be consistent. + +Wed Jul 2 16:46:59 1997 Nanbor Wang + + * performance-tests/Misc/childbirth_time.cpp: Added this program + to measure child process/thread creation mechanisms on various + platforms. Native thread creation test only supports Solaris + and NT threads so far. But you can still use ACE_OS::thr_create + method on your platform if not supported. + +Wed Jul 2 15:59:53 1997 Darrell Brunsch + + * ace/High_Res_Timer.cpp: Created a function get_registry_scale_factor + that finds out the speed of the processor using the NT registry (in + megahertz). This means that ACE_High_Res_Timers should automatically + get the correct scale factor. + + * tests/Timer_Queue_Test.cpp: Removed the call to + get_env_global_scale_factor(). + +Wed Jul 2 15:39:33 1997 Tim H. Harrison + + * ace/Process.cpp: Modified spawn to check for the NO_EXEC + flag after forking on UNIX. If it's set, spawn returns the + child pid without exec'ing. Updated the NT version to + always return the child pid on success. + +Wed Jul 02 10:55:23 1997 David L. Levine + + * tests/SPIPE_Test.cpp,UPIPE_SAP_Test.cpp: tweaked the static + functions a bit to avoid warnings about unused statics on VxWorks. + +Wed Jul 02 00:16:07 1997 Douglas C. Schmidt + + * ACE version 4.2.14, released Wed Jul 02 00:16:07 1997. + +Tue Jul 1 22:49:58 1997 Douglas C. Schmidt + + * ace/Strategies_T.h: Changed the return value of all the hash() + methods to be u_long. + + * tests/Map_Manager_Test.cpp (hash): Changed the return value of + all the hash() methods to be u_long. + + * ace/SString.cpp: Changed the return value of all the hash() + methods to be u_long. + + * ace/Hash_Map_Manager: Changed the return value of hash() + to return a u_long in order to (1) be consistent with + the return value of hash_pjw() and (2) give the maximal + range for the hash function. Thanks to Marina Spivak + for reporting this. + +Tue Jul 01 14:47:22 1997 David L. Levine + + * ace/High_Res_Timer.{h,i} (gettime): use gettime () static function + to wrap all calls to ACE_OS::gethrtime (). On ACE_WIN32, if the + global scale factor has not been set, then gettime () uses + ACE_OS::gettimeofday () instead of ACE_OS::gethrtime (), because + gettimeofday doesn't need the scale factor. + +Mon Jun 30 17:28:53 1997 Douglas C. Schmidt + + * Makefile (RELEASE_FILES): Removed the rpc++ directory from the + main release since this doesn't seem to be widely used and the + GPL copyleft confuses people. + +Mon Jun 30 15:08:04 1997 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU: added -lgcc + to LDFLAGS. + +Mon Jun 30 12:00:02 1997 Douglas C. Schmidt + + * ACE version 4.2.13, released Mon Jun 30 12:00:02 1997. + +Sat Jun 28 08:27:27 1997 David L. Levine + + * ace/OS.h: added definitions of ACE_SHLIB_HANDLE and + ACE_DEFAULT_SHLIB_MODE on platforms other than + ACE_HAS_SVR4_DYNAMIC_LINKING and hpux. + + * ace/OS.i: split definitions of ACE_OS::cond_* member + functions into two: for ACE_WIN32/VXWORKS and all others. + That allows us to break the circular dependencies between + those functions and the ACE_OS::sema_* member functions. + + * ace/Svc_Conf_y.cpp: commented out unused args and wrapped + assignments in "if" conditionals with parenthesis to avoid + g++ warnings. + + * ace/{ACE,INET_Addr,OS}.cpp (VxWorks only): added ACE_UNUSED_ARG + calls. + + * ace/Parse_Node.cpp (ACE_Stream_Node,ACE_Dynamic_Node,ACE_Dummy_Node + constructors): reordered initializers to match declaration order. + + * ace/Profile_Timer.h (elapsed_time): commented out unused arg "et". + + * ace/Read_Buffer.cpp (rec_read): initialized local variable "c" to + make sure that it is always defined before use. + + * ace/SPIPE_Acceptor.cpp (remove): don't declare local variable + "result" if ! ACE_HAS_STREAM_PIPES, because it's not used in + that case. + + * ace/config-vxworks5.x-g++.h: added ACE_LACKS_IOSTREAM_FX, + ACE_LACKS_LINEBUFFERED_STREAMBUF, and ACE_LACKS_SIGNED_CHAR. + + * ace/IOStream_T.h (ipfx): comment out unused variable "need". + + * platform_vxworks5.2_g++.GNU: added -Wall now that the ACE library + builds cleanly with it. + + * platform_vxworks5.x_g{++,hs}.GNU: renamed 5.x instead of 5.2. + + * netsvcs/lib/Token_Handler.cpp: reordered initializers to match + declaration order. + + * tests/SV_Shared_Memory_Test.cpp: moved template specializations + so that they're not done on platforms that don't support SV IPC. + + * examples/IOStream/client/iostream_client.cpp, + examples/IOStream/server/iostream_server.cpp: + use ACE_HAS_STRING_CLASS rather than __GNUC__ to determine whether + the platform has a String class. + +Fri Jun 27 13:10:46 1997 Douglas C. Schmidt + + * ace: Changed the name of config-vxworks5.2-g++.h to + config-vxworks5.x-g++.h since it works with 5.2 and 5.3. + + * examples/Mem_Map/IO-tests/IO_Test.cpp: Fixed some bugs that were + preventing this from running correctly. + +Fri Jun 27 13:37:37 1997 Steve Huston + + * ace/Svc_Conf.y: Finished the sanity checks started below. + +Fri Jun 27 11:55:13 1997 Darrell Brunsch + + * ace/Timer_Queue_T.cpp: added a check for an empty queue in expire + +Fri Jun 27 07:53:58 1997 David L. Levine + + * tests/Message_Queue_Notifications_Test.cpp (handle_output, + handle_exception,main): added ACE_UNUSED_ARG (fd) to avoid + compilation warnings about unused arguments. + +Fri Jun 27 01:08:54 1997 Douglas C. Schmidt + + * ace/Connector.cpp (create_AST): Replaced the gratuitous #ifdef + for ACE_WIN32 and EXCEPT_MASK with the new CONNECT_MASK. This + is much cleaner! + + * ace/Event_Handler.h: Added a new CONNECT_MASK that defaults to + READ_MASK | WRITE_MASK (with | EXCEPT_MASK thrown in for Win32). + Thanks to Irfan for this suggestion. + +Thu Jun 26 19:53:11 1997 Nanbor Wang + + * ace/OS.i (strtok_r): Added check on a null string so we won't go + past the end of a string. + + * performance-tests/Misc/context_switch_time.cpp (main): Added + get_env_gloval_scale_factor() at the very beginning so that high + resolution timer can return correct time in millisecond. + +Thu Jun 26 15:29:55 1997 Darrell Brunsch + + * tests/Timer_Queue_Test.cpp: Changed the random scheduling to use + past times instead of future time. This should fix some unusual + behavior of this test. Thanks to Gonzalo A. Diethelm + for reporting this. + +Thu Jun 26 12:38:16 1997 Douglas C. Schmidt + + * ACE version 4.2.12, released Thu Jun 26 12:38:16 1997. + +Thu Jun 26 01:11:10 1997 Douglas C. Schmidt + + * ace/Svc_Conf.y: Added some sanity checks to make sure we don't + segfault when things go wrong during the svc.conf file parsing. + Thanks to Steve Huston for this suggestion. + +Thu Jun 26 08:36:37 1997 David L. Levine + + * Makefile: fix UPTODATE check (for release target) by not + running it in a sub-shell. Also, added ACE-lessons.html + to RELEASE_FILES. + + * performance-tests/Misc/context_switch_time.cpp: use same priority + values on Win32 platforms as on Solaris, because thread priority + increases with increasing priority values on both of those platforms. + +Thu Jun 26 01:34:46 1997 Nanbor Wang + + * performance-tests/Misc/misc.{mak,mdp}: Added makefile for NT. + + * ace/{FILE,DEV}.{h,i}: Added the disable(int signum) function to + prevent NT from disabling a FILE/DEV using socket calls. + +Wed Jun 25 12:59:00 1997 + + * ace/Synch_T.h (ACE_SYNCH_PROCESS_MUTEX and + ACE_SYNCH_NULL_MUTEX): Added new template typedef to the list. + + * tests/Message_Queue_Notifications_Test.cpp: New test for + demonstrating notification qualities of Message_Queue. + + * ace/Strategies.h: Added accessors to these classes to make them + more usable. + +Wed Jun 25 10:47:34 1997 Steve Huston + + * ace/Parse_Node.cpp: Insure that ACE_Object_Node::symbol(void) + returns 0 if the underlying shared library can't be loaded. + + * ace/OS.h: Added a new type, ACE_SHLIB_HANDLE to allow dynamic + linking using correct types on all platforms that support it. + Also added a const ACE_SHLIB_DEFAULT_MODE for the 'mode' argument + when doing a dlopen-like operation. + Moved the ACE_OSCALL_* macros to this file from OS.i + + * ace/OS.i: Moved ACE_OSCALL_* macros out of here and into OS.h. + Added support for dlopen/close/sym/error on HP-UX. Note - the + Service_Configurator tests do not run yet on HP - I'm working on + that. + + * ace/Service_Record.{h, i, cpp}: Use new ACE_SHLIB_HANDLE type for + dynamic loading operations. + + * ace/Parse_Node.{h, cpp}: Use new ACE_SHLIB_HANDLE where appropriate. + + * ace/Strategies_T.cpp: Use new ACE_SHLIB_HANDLE type. + +Wed Jun 25 02:36:05 1997 Nanbor Wang + + * ace/OS.i (gmtime_r): Modified the implementation of gmtime_r + when OS doesn't provide one. Notice that the implementation + only simulate the semantic and is not thread-safe. + + * ace/OS.h: Moved definition of ACE_SHLIB_HANDLE typedef and + ACE_DEFAULT_SHLIB_MODE global variable for Win32 to where it + belongs. + + * ace/OS.i: Changed the return type of dlopen() when ACE_HAS_UNICODE to + ACE_SHLIB_HANDLE. + + * ace/OS.{h,i}: Moved ACE_OSCALL and ACE_OSCALL_RETURN for WIN32 + from OS.i to OS.h. + +Wed Jun 25 01:23:58 1997 Nanbor Wang + + * ace/OS.i (strtok_r): Modified the implementation when OS does + not provide reentrant strtok_r so that our imp. comforms with + the semantic of strtok_r (). + +Wed Jun 25 00:37:56 1997 Douglas C. Schmidt + + * ACE version 4.2.11, released Wed Jun 25 00:37:56 1997. + +Tue Jun 24 21:30:53 1997 David L. Levine + + * ace/Svc_Conf_y.cpp: commented out unused args and wrapped + assignments in "if" conditionals with parenthesis to avoid + g++ warnings. + +Tue Jun 24 18:15:46 1997 Nanbor Wang + + * ace/Reactor.cpp (wait_for_multiple_events): Modified the way to + manipulate timeout value so that we can differentiate when there + are timeout events to be handle from no timer and we want to + wait indefinitely. + +Tue Jun 24 16:52:22 1997 David L. Levine + + * ace/OS.h: reverted ACE_hrtime_t to unsigned __int64 with VC++. + This might break something, but we need to know what. + +Tue Jun 24 16:38:52 1997 Darrell Brunsch + + * Added Visual C++ 5.0 specific workspace (.dsw) and project (.dsp) + files to both the ace and tests subdirectory. ACE.DSW in the root + directory contains all the project files, so a batch build should + be able to build all the project files. + +Tue Jun 24 14:27:47 1997 Darrell Brunsch + + * ace/Timer_{Hash,Heap,List,Wheel}_T.cpp: Changed cancel (type..) + to call cancellation() even if there are no timers to cancel. + This causes the correct behavior of calling handle_close () + during expire when handle_timeout() returns -1. Thanks to + Hamutal Yanay for + pointing this out. + + * tests/Timer_Queue_Test.cpp: Updated to correctly test this. + +Tue Jun 24 13:02:51 1997 David L. Levine + + * ace/SString.h (ACE_SString ctor): changed "allocator" to "alloc". + Thanks to Brian Mendel for reporting this. + +Tue Jun 24 12:58:28 1997 James C Hu + + * include/makeinclude/platform_irix6.4*: Shuts up useless warnings + about multiply defined template instances. + +Tue Jun 24 12:50:52 1997 Douglas C. Schmidt + + * ACE version 4.2.10, released Tue Jun 24 12:50:52 1997. + +Tue Jun 24 00:44:30 1997 Nanbor Wang + + * ace/SPIPE.{h,i}: Added the disable(int signum) function to + prevent NT from disabling an SPIPE using socket calls. + +Mon Jun 23 22:14:39 1997 Douglas C. Schmidt + + * ace/Svc_Conf*: Changed the name of the YYSTYPE field + ACE_Static_Node_ to static_node_ to be consistent with the other + fields. + +Mon Jun 23 18:28:55 1997 David L. Levine + + * ace/ACE.cpp: added auto_basic_array_ptr specialization. + + * ace/Service_Config.cpp, tests/Future_Test.cpp, + examples/Threads/future[12].cpp: added auto_basic_ptr + specializations. + + * include/makeinclude/platform_vxworks5.2_g++.GNU: + reworked to supported different targets, instead of only PowerPC. + +Mon Jun 23 16:06:35 1997 James C. Hu + + * ace/OS.i: Moved definition of sema_* methods to follow cond_* + methods to remove compiler warnings on SGI. + +Mon Jun 23 09:42:08 1997 Darrell Brunsch + + * tests/Timer_Queue_Test.cpp: added testing for cancellation + during expire (when of handle_timeout() in an event handler + returning -1). + +Mon Jun 23 09:18:39 1997 David L. Levine + + * Makefile: added up-to-date check for "make release" from + /project/adaptive/ACE_wrappers. Also, "make release" now + adds release entry to latest ChangeLog. + + * ace/Makefile: build shared library before static library. + This appears to fix a problem with Sun C++ 4.{1,2} possibly + related to its template instantiation scheme. If the + static library is built first, then .shobj/Reactor.so + and .shobj/Timer_Hash.so (and possibly others) fail to + build due to ACE_TimeValue::normalize () "relocations remain + against allocatable but non-writable sections". + Thanks to Steve Huston and + Satoshi Ueno for reporting this, and + to Satoshi for verifying the fix. + + * ace/ACE.cpp (terminate_process): removed used of + ACE_OSCALL_RETURN macro because its defined in OS.i, and so + not available if inlining is disabled. + + * ace/Auto_Ptr.{h,i}: made "p_" protected instead of private + so that it can be accessed with the new class arrangement. + Also, made the auto_array_ptr operator-> const. + + * ace/Sched_Params.cpp (previous_priority, VxWorks only): + removed ACE_UNUSED_ARG (policy) because policy is used in + this function. + + * netsvcs/lib/TS_Clerk_Handler.cpp (parse_args): wrapped TCHAR + argument to sizeof in parenthesis. + +Mon Jun 23 09:12:04 1997 Nanbor Wang + + * ace/Auto_Ptr.i (auto_array_ptr): Fixed a typo. + +Mon Jun 23 08:03:46 1997 Darrell Brunsch + + * ace/Auto_Ptr.h: changed inheritance of auto_basic_array_ptr in + auto_array_ptr to include the template parameter X. + + * ace/IOStream_T.i: removed default parameter in the definition + of ACE_Streambut_T::recv_n() and ACE_SOCK_Dgram_SC::recv_n() + +Mon Jun 23 01:13:15 1997 + + * ace/OS.cpp (fork_exec): Fixed the usage of ACE_WIDE_STRING. + + * test_registry_iterator.cpp (main): Fixed the usage of + ACE_WIDE_STRING. + + * netsvcs/lib/TS_Clerk_Handler.cpp (parse_args): Fixed the usage + of ACE_WIDE_STRING. + + * ace/Auto_Ptr.h: Added support for basic types by seperating the + auto_ptr classes into two. One that requires the -> operator + support and the other that does not. The former inherits from + the latter. + + * ace/{FILE,DEV,SPIPE}_Addr.h: Added support for multibyte and + wide character addr_to_string and string_to_addr functionality. + + * ace/Connector.cpp && ace/Acceptor.cpp (info): Fixed sizeof bug. + + * examples/Connection/blocking/SPIPE: Added UNICODE support for + this example. + + * ace/OS.h: Added new macro ACE_MULTIBYTE_STRING. + + * ace/ACE.cpp (terminate_process): Fixed unused args errors. + +Sun Jun 22 09:58:36 1997 Douglas C. Schmidt + + * Released version 4.2.9 for testing. + + * ace/Log_Msg.cpp (open): Changed the use of ACE_LOG_MSG-> within + the open() method to use this-> in order to avoid deadlocks. + Thanks to Per Andersson for reporting this. + + * ace/ACE.cpp: Changed the use of __SVR4 and __unix to sparc and + unix to work better with various UNIX environments. Thanks to + Michael R. MacFaden for these changes. + + * ace/Handle_Set.cpp (count_bits): Added special code to handle + the case where fdmask is typedef'd as a long rather than an int. + Thanks to Eric Newton and James Johnson for + reporting this. + + * ace/IOStream.h: Changed the name of QuotedString to + ACE_Quoted_String to be consistent with the ACE naming scheme. + Thanks to James Johnson for suggesting this. + + * ace/IOStream_T.i: Added this new file to split off the inlined + code from the header file. + + * ace/ACE.cpp (terminate_process): Remove the + ACE_UNUSED_ARG(signum) from terminate_process(). Thanks to Wei + Chiang for reporting this. + +Sun Jun 22 17:19:18 1997 David L. Levine + + * examples/Threads/process_manager.cpp (main): replaced call to + kill with terminate. + +Sat Jun 21 10:48:34 1997 Douglas C. Schmidt + + * examples/Reactor/FIFO: Added a new example that illustrates + how the Reactor and the FIFO wrappers work together. Thanks + to Johannes Gutleber for sending + this. + + * tests/Time_Service_Test.cpp (main): Replaced the kill() call + with the terminate() call since kill() isn't portable across + platforms. + + * ace/Process: The kill() method on this class was being used + incorrectly. I've created a new method called terminate() that + terminates the process. + + * ace/Process_Manager: Renamed the kill() method to terminate() + and updated the implementation to use the new + ACE::terminate_process() call. + + * ace/ACE: Moved the incorrect Win32 and Chorus implementations of + ACE_OS::kill() and put them in a new static method called + ACE::terminate_process(). + + * ace/ACE: Changed the name of the is_process_active() to the + more concise process_active(). + + * ace/OS.i: Added an implementation of ACE_OS::kill() for Chorus. + Note that this doesn't behave as UNIX does -- it kills the + process id rather than sending a signal! Thanks to Wei Chiang + for these fixes. + + * examples/Reactor/Misc/notification.cpp: Added patches to run + this example under Chorus. Thanks to Wei Chiang + for these fixes. + + * ace/Connector.cpp (create_AST): Changed the order of some + instructions in Connector::create_AST method to make it more + safer to use in multi-thread environment. Thank to Paul Han + for reporting the problem and the fix. + + * ace/Connector.cpp (create_AST): Make sure to pass in the "mask" + when calling remove_handler() so that we get the right set of + bits removed from the Reactor. + + * tests/Reactor_Timer_Test.cpp (class Time_Handler): Changed int + to long to avoid type conversion problems on 64 bit SGI. Thanks + to Fred LaBar for reporting this. + + * examples/Reactor/FIFO: Added a test program to illustrate the + interaction of the ACE Reactor with the FIFO IPC mechanism. + Thanks to Johannes Gutleber for this + test. + + * examples/Reactor/Misc/pingpong.cpp: Added support for Chorus. + Thanks to Wei Chiang for this. + + * ace: Added a number of minor changes to signal assignment + code so that ACE will compile with Tandem NonStop. Thanks + to Jan Perman for these fixes. + + * ace/config-tandem.h: Added a new config file for the + Tandem NonStop-UX 4.2MP platform. Thanks to Jan Perman + for contributing this. + + * include/makeinclude/platform_tandem.GNU: Added a new platform + file for the Tandem NonStop-UX 4.2MP platform. Thanks to + Jan Perman for contributing this. + + * ace/config-unixware-2.1.2-g++.h: Added a new config file for + UNIXWARE 2.1.2. Thanks to Ganesh Pai (gpai@voicetek.com) for + contributing this. + + * include/makeinclude/platform_unixware_g++.GNU: Updated the + UNIXWARE platform config file to work for version 2.1.2. Thanks + to Ganesh Pai (gpai@voicetek.com) for contributing this. + + * ace/Handle_Set.cpp (count_bits): Added another 0xff mask to + prevent problems with sign extension on machines with 32 bit + ints and 64 bit longs. Thanks to James Johnson for reporting + this. + + * ace/OS.h: Updated all of the ACE_DEFAULT* macros in OS.h so that + they can be overridden by #defines in the config.h file. Thanks + to Chuck Gehr for suggesting this. + +Thu Jun 19 22:20:20 1997 David L. Levine + + * ace/OS.h (VxWorks/g++ only): added horrible hack to work around + mismatch of memcmp, etc., prototypes in . + + * ace/OS.i: reordered many function definitions to avoid use + before definition. Building with g++ 2.7.2 on VxWorks 5.3.1 + revealed them. + + * ace/config-vxworks5.2-g++.h: removed ACE_HAS_STRING_CLASS and + ACE_HAS_GNU_CSTRING_H, because those aren't distributed with + Tornado 1.0.1. + +Thu Jun 19 15:31:53 1997 Darrell Brunsch + + * ace/Timer_Wheel_T.cpp: Fixed problem with expire () not + expiring timers with a timeout of the current time. This was + causing problems with Timer_Queue_Test when high profile + timers were disabled (such as Windows NT when the + environment variable ACE_SCALE_FACTOR was undefined) + +Wed Jun 18 19:43:35 1997 David L. Levine + + * ace/Signal.cpp: 'removed "const" from #define of + ACE_MAX_SIGNAL_HANDLERS because it broke Irix 6.2 build. Thanks + to Gonzalo A. Diethelm for reporting this. + + * examples/Threads/task_four.cpp (Invoker_Task::svc): fixed typo, + n_tasks instead of ntasks. + +Wed Jun 18 11:25:14 1997 Nanbor Wang + + * examples/Threads/{task_four,token}.cpp: Changed the use of + cerr/cout to ACE_DEBUG macro. Thanks to Chuck Gehr + for pointing these out. + +Tue Jun 17 15:11:09 1997 David L. Levine + + * ace/config-sunos5.5-sunc++-4.x.h, + include/makeinclude/platform_sunos5_sunc++.GNU: support enabling of + exception handling via "exceptions=1" make flag. Exception handling + does seem to work with Sun C++ 4.2, even on MP machines, if patch + 104631-02 "C++ 4.2: Jumbo Patch for C++ 4.2 on Solaris SPARC" + is applied. Please beware that enabling of exception handling can + adversely affect peformance, even if the program doesn't use it. + So, we haven't enabled it by default. Thanks to Chris Cleeland + for suggesting not to enable it by default. + + * ace/IOStream.h: added #include of "ace/config.h" so that + ACE_LACKS_ACE_IOSTREAM can be checked. Thanks to Ganesh Pai + for reporting this problem. + + * ace/ACE.cpp (get_handle): use /dev/udp instead of /dev/ip on + SVR4 machines because it has other read permission by default + (on Solaris 2.x). + + * ace/ACE.cpp (get_ip_interfaces): use auto_array_ptr instead of + auto_ptr so that the array gets deleted properly, and zero it + out to avoid unitialized memory read reports from Purify. + + * ace/Timer_Hash_T.cpp (cancel): added "[]" to delete of timer_ids + array. Purify rules. + + * Timer_Queue_Test.cppc (test_performance): added "[]" to delete of + times array. Purify rules. + +Tue Jun 17 15:31:01 1997 Steve Huston + + * ace/ACE.cpp: Fixed get_ip_interfaces (and count_interfaces) to + work properly on HP-UX (and probably other similar UNIXes). Needed + to work with non-IP interfaces present, and fixed to copy the + IP address without the fudge factor being applied. + +Tue Jun 17 14:02:01 1997 Nanbor Wang + + * ace/{Free_List.h,Free_List.cpp,Timer_Queue_T.h}: Added #include + "ace/Synch_T.h" to Free_List.h and removed related inclusion + from Free_List.cpp and Timer_Queue_T.h. Thanks to + Jack Erickson for reporting this problem. + +Tue Jun 17 09:41:48 1997 David L. Levine + + * tests/Enum_Interfaces_Test.cpp: changed name of log file to match + the program name, so that the one-button test can easily find it. + +Tue Jun 17 04:58:38 1997 Nanbor Wang + + * ace/Timer_Queue_T.h: Added include file "ace/Synch_T.h" to avoid + compilation errors in SC 4.1. We didn't notice this because + most of us have moved to SC 4.2. Don't know why this didn't + cause any problem in SC 4.2. Thanks to Jack Erickson + for reporting this bug. + +Mon Jun 16 22:25:18 1997 Steve Huston + + * ace/ACE.cpp: Fixed conditional compiles to compile the + interface counting code for HP - it reports 0 interfaces, + so it needs more debugging still. + + * include/makeinclude/platform_hpux_aCC.GNU: added -g to link + command for building shared library. + + * tests/Buffer_Stream_Test.cpp: fixes to execute correctly and only + fail assertions on real failures. + +Mon Jun 16 19:05:13 1997 Steve Huston + + * ace/Free_List.cpp: added #include ace/Synch.h, needed by + Free_List.i. Fixes compile errors on HP-UX. + +Mon Jun 16 10:59:55 1997 Darrell Brunsch + + * ace/Timer_Wheel_T.cpp: Changed expire () so it doesn't + access past the end of an array when it finds nothing to + expire. Thanks to Norbert Rapp + for catching this. + +Sun Jun 15 03:44:21 1997 Nanbor Wang + + * examples/Threads/thread_specific.cpp (worker): Changed the + output of diagnostics from using cout to using printf. Also + corrected several portability problems. Thanks for Chuck Gehr + for pointing these out. + + * ace/OS.i (thread_mutex_trylock): Corrected the code for NT. Now + this function returns 0 if lock is obtained and -1 otherwise. + Thanks to Robert V. Head for noticing this. + + * performance-tests/Synch-Benchmarks/Synch_Tests.{mdp.mak}: + Added project workspace and makefile for NT to this directory. + + * performance-tests/Synch-Benchmarks/svc.conf: + * performance-tests/Synch-Benchmarks/{Options,Benchmark}.h: + * performance-tests/Synch-Benchmarks/*.cpp: Reworked these + files to have them compiled on NT. + +Sat Jun 14 03:53:13 1997 Nanbor Wang + + * performance-tests/Synch-Benchmarks/pipe_proc_test.cpp (class + Pipe_Proc_Test): Changed the type of pipe_handles[] from int to + ACE_HANDLE. + + * performance-tests/Synch-Benchmarks/sysvsema_test.cpp: When + creating the semaphore, explicitly cast the key value to (key_t) + since NT couldn't handle the conversion. + +Fri Jun 13 19:32:03 1997 Steve Huston + + * ace/ACE.cpp: Fixed count_interfaces to compile on non-SVR4 + systems such as HP-UX. Not tested yet. + + * ace/OS.i: Fixed mis-arranged conditional compile for HP-UX in + asctime_r. + +Fri Jun 13 03:13:51 1997 Nanbor Wang + + * ace/config-win32-common.h: Added a "pragma comment" directive to + direct MSVC to link in mswsock.lib automatically. Thanks to + Bill Tang for reminding this. + + * ace/ace.{mak,mdp}: Removed explicit inclusion of mswsock.lib. + Thanks to Bill Tang for reminding this. + + * examples/OS/Process/Process.{mdp,mak}: For some reasons, I got + an "unknown link error, please refer to documentation for + appropriate technical supports" when building this example on NT + (didn't help much, did it?) Reassigning the linked library + solved the problem. + + * examples/OS/Process/process.cpp: Updated class name + ACE_ProcessEX to ACE_Process because ACE_ProcessEX no longer + exists. Also, all exec'ed programs' absolute names have been + changed and let the environment variable "path" to decide which + program(s) to exec. + +Thu Jun 12 15:48:16 1997 Chris Cleeland + + * ace/ACE.cpp (get_ip_interfaces): Corrected code in the BSDish + section so that it at least compiles on Linux. I haven't tested + this AT ALL. + + * ace/Timer_Queue_T.cpp (calculate_timeout): When this was called + with the default argument from handle_events(), max_timeout was + passed as zero, which would cause a SEGV when attempts were made + to deref it. Added protection to simply return a zero ptr in that + case. + +Thu Jun 12 13:18:03 1997 Steve Huston + + * ace/OS.{h,i,cpp}: Changes for HP-UX 10 primarily. Threads + support for DCE Draft 4 threads (bundled with HP-UX 10). + Correct usage of reentrant C library functions for HP-UX. + + * ace/OS.i: Changed timeout argument to 2nd select function to + allow the compiler to pick a conversion operator. As it was, + HP compiler would not compile it. + + * ace/Service_Object.cpp: When deleting the service memory pointed + to by a void *, use "operator delete" rather than deleting a void, + which is prohibited by the current ANSI C++ draft. + + * ace/config-hpux-10.x.h: This is now a compiler-independent header + file, and is included by config-hpux-10.x-hpc++.h. This file + contains all correct settings for HP-UX 10.x, and compiler-specific + config files should use this - see config-hpux-10.x-hpc++.h. + + * ace/config-hpux-10.x-hpc++.h: New config file for either of the HP + compilers (HP C++ or HP aC++). It figures it out internally, and + uses config-hpux-10.x.h for OS details. + + * include/makeinclude/rules.lib.GNU: Allow for doing a PRELIB step + when building a shared library, and not using .shobj/*.so files. + This allows HP aC++ to close all template instantiations for the + entire library at once, rather than separately, reducing the + size of the resultant library significantly. + + * include/makeinclude/platform_hpux-aCC.GNU: build libraries with + templates instantiated all at once. Compile with flags for using + the reentrant versions of C library functions. + +Wed Jun 11 15:20:15 1997 Nanbor Wang + + * ace/Timer_Queue_T.{h,cpp} (calculate_timeout): Changed the + second parameter the_timeout from a ref. to a ptr. to a ptr in + order to avoid compilation warning. Since the pointer itself is + not modified within the function, it's ok to change this. + + * ace/Reactor.cpp (wait_for_multiple_events): Added ACE_Time_Value + the_timeout as a place holder for timeout value when + max_wait_time is NULL. Otherwise, + Timer_Queue::calculate_timeout won't process the timer queue + even it's not empty. + +Wed Jun 11 11:14:29 1997 James C Hu + + * include/makeinclude/platform_mvs.GNU (RANLIB): Requested change + from Check Gehr (gehr@sweng.stortek.com), RANLIB = echo + +Wed Jun 11 04:47:52 1997 Nanbor Wang + + * ACE.cpp (count_interfaces): Two bugs were corrected here. Both + were typo. + + * tests/Timer_Queue_Test.cpp: Added include file ace/Timer_Queue.h + +Tue Jun 10 16:02:52 1997 Darrell Brunsch + + * ace/SString.{h,cpp}: Changed the parameters in CString::substring() + and WString::substring(). Removed const and changed length to a + ssize_t because of signed/unsigned comparison warnings. + + * ace/ACE.cpp: Changed a loop variable in get_ip_interfaces() to + a size_t because of a signed/unsigned comparison warning. + +Tue Jun 10 12:47:49 1997 + + * ace/SString.cpp (operator = and operator +=): There were two + bugs here. operator= forgot to tack on the NULL terminator + after the memcpy() and operator+= appended the second string + incorrectly. Thanks to Michael R. MacFaden for + pointing these out. + +Tue Jun 10 12:16:04 1997 Darrell Brunsch + + * ace/Makefile: Updated to reflect newly added files + + * ace/Proactor.cpp: Removed template specializations. + + * ace/Reactor.cpp: Removed some template specializations. + + * ace/Timer_Hash.h: Added an include for Timer_Heap. + + * ace/Timer_Hash_T.cpp: Changed a reference to ACE_Timer_Node + to ACE_Timer_Node_T + + * ace/Timer_{Hash,Heap,List,Wheel}_T.h: Changed #include + "ace/Timer_{...}.h" to "ace/Timer_{...}_T.h". + + * ace/Timer_Queue.cpp: Removed some template specializations. + + * ace/Timer_Queue.h: Removed the including of Timer_Queue.cpp + since there are no templates to warrant it. + + * ace/Timer_{Hash,Heap,List,Wheel}.cpp: Added these and put the + appropriate template specializations here. + +Tue Jun 10 02:08:25 1997 Nanbor Wang + + * examples/Log_Msg/README: Revised. + + * examples/Log_Msg/test_log_msg.cpp: Revised program output so + that it's clearer to explain. + +Mon Jun 09 15:46:41 1997 + + * OS.i (mutex_lock): When WaitForSingleObject returns + WAIT_ABANDONED, the lock is held by the calling thread. + Therefore we must return 0 from the method. I have added a new + mutex_lock() method that takes an extra "abandoned" parameter. + This is set wehen the mutex is abandoned. Thanks to Dieter + Quehl for pointing this out. + +Mon Jun 9 02:31:36 1997 Nanbor Wang + + * tests/Sigset_Ops_Test.cpp (main): Comment out testing of invalid + sigset checking for most platforms don't seem to support it. + Perhaps the ACE's sigset* functions should remove this check for + compatibility. + +Sun Jun 8 11:39:06 1997 Douglas C. Schmidt + + * ace/OS.i (set): There was a typo here where + + ((long) (d - (double) l)) * 1000000 + + should be + + (long) ((d - (double) l) * 1000000) + + since otherwise the values are always 0. Thanks to Jim Crossley + for reporting this. + + * tests/Enum_Interfaces_Test.cpp (main): Changed ACE_UINT32 to + size_t to be consistent with the class definition. Thanks to + Nanbor Wang for reporting this. + + * ace/Token.h: Added some no-op method for ACE_Token so that it + will still compile even if ACE_HAS_THREADS isn't defined. + +Sun Jun 8 01:37:52 1997 Nanbor Wang + + * examples/Log_Msg/README: Added a README file. + + * tests/Sigset_Ops_Test.cpp (main): bug fixed. + + +Sat Jun 7 16:40:22 1997 Douglas C. Schmidt + + * ace/SString.h (string.): Added a substring() member function to + ACE_*String classes. Thanks to Michael MacFaden + for contributing this. + + * ace/ACE: Added a new method called + + int get_ip_interfaces(count, address_array) + + which will query the OS kernel for the IP addresses for each network + interface found and return a count and array of ACE_INET_Addr objects. + The reason for adding this method is that most client apps + assume gethostbyname(uname|gethostname)) will work. If the + nameservices is misconfigured/broken or the machine is multi-homed, + the client apps have alot of coding to do to figure out if an inteface + represents a local address or not. On UNIX, this includes + the loopback addr. On NT, the loopback addr is not added + (but may change the impl if others think this useful). + Thanks to Michael MacFaden for contributing + this. + + * ace/Synch[_T]: Changed all the classes so that internal instance + variables are now protected rather than private. This allows + greater flexibility if there's a need to subclass + (which shouldn't occur very much...). Thanks to + Reza Roodsari for suggesting this. + +Fri Jun 06 21:30:57 1997 David L. Levine + + * ace/Timer_{Hash,Wheel}_T.cpp: added #includes of + ace/High_Res_Timer.h. Also, in Timer_Wheel_T.cpp (cancel), + moved the declaration of "i" out of the loop because it's + used in two different loops. + +Fri Jun 06 17:11:13 1997 + + * OS.i (sleep): If ACE_POLL_IS_BROKEN is defined, use select() to + do micro second sleeps. + + * ace/CORBA_Handler.h (ACE_CORBA_*): The new version of Orbix + (2.2C01) on NT finally supports namespaces. So now the macros + ACE_CORBA_n need to be defined using the "::" and not the "_" + for NT if the new Orbix is being used. Thanks to John Morey + (jmorey@tbi.com) for the changes. + +Fri Jun 06 02:16:08 1997 + + * Sigset_Ops_Test.cpp: Added to test correct implementation of + sigset manipulating functions. + + * run_tests.{sh,bat}, Makefile: Added Sigset_Ops_Test. + +Thu Jun 05 20:32:39 1997 David L. Levine + + * tests/Timer_Queue_Test.cpp (randomize_array): removed static + qualifier now that it's a template function. It caused a warning + with Sun C++. + +Thu Jun 05 18:28:36 1997 + + * ace/Asynch_Acceptor.cpp (open): The Proactor was beening passed + implicitly. I have made this explicit by making this a parameter + to open. Thanks to MehulM@spa-marketing.com (Mehul Mahimtura) + for this. + +Thu Jun 5 12:06:45 1997 Chris Cleeland + + * ace/Timer_Queue_T.h (ACE_Timer_Queue_T): Overloaded + calculate_timeout with a version that accepts a pointer to + storage for the ACE_Time_Value as an argument. This has a small + performance win over the other b/c it does not take a lock. + The change was made after examining Quantify output for TAO + and observing that this lock caused + Reactor::wait_for_multiple_events() to consume a substantial + percentage of processing time. + + * ace/Reactor.cpp (wait_for_multiple_events): This now uses a + different version of calculate_timeout() that doesn't require + taking a lock. + +Thu Jun 05 08:48:49 1997 David L. Levine + + * ace/Reactor.cpp: added template specializations. + + * ace/Timer_Queue_T.cpp (ACE_Timer_Queue_T ctor): rearranged + initializers to match declaration order. + +Thu Jun 5 06:08:06 1997 Nanbor Wang + + * ace/OS.i (sigaddset, sigdelset, sigismember): NSIG itself is + invalid and must be excluded. + +Wed Jun 04 21:24:35 1997 David L. Levine + + * ace/config-sunos5.5-g++.h: fixed typo: #define instead of + #defined ACE_HAS_CLOCK_GETTIME. + + * ace/config-sunos5.5-sunc++*.h: Combined + config-sunos5.5-sunc++-4.x.h and config-sunos5.5-sunc++-4.1.h, + and removed the latter. The Orbix config file now #includes + config-sunos5.5-sunc++-4.x.h and adds its differences. + + * include/makeinclude/platform_sunos5_sunc++*.GNU: Combined + platform_sunos5_sunc++.GNU and platform_sunos5_sunc++-4.1.GNU, + and removed the latter. platform_sunos5_sunc++_orbix.GNU now + includes the non-orbix file and adds its differences. Also, + added optional CC -fast support. To enable, just add "fast=1" + to your "make" invocation. + +Wed Jun 04 12:21:41 1997 + + * tests: Made the following config files consistent: + UNIXclerk.conf UNIXtokens.conf Win32clerk.conf Win32server.conf + Win32tokens.conf + + * ace/OS.h: Made sure that some #defines were guarded for + redefinition specially for the Bristol (that provides Win32 API + on AIX) headers. Thanks to Rich Christy (rchristy@cccis.com) for + suggesting these changes. + + * ace/Handle_Set.h: Changed the type of handle_index from int to + u_int on Win32. Thanks to Jack Erickson (jack@cibc.com) for + suggesting this. + + * ace/FILE.h (ACE_FILE_STREAM): Fixed this #define from + ACE_FILE_Stream to ACE_FILE_IO. + +Tue Jun 3 21:23:48 1997 Douglas C. Schmidt + + * ace/Timer_{Queue,Hash}: Fixed some uses of template typedefs + since GCC is too lame to handle them correctly. Therefore, I + had to expand TIMER_QUEUE into the ugly fully expanded name. + + * ace/Timer_Queue_T.cpp: Moved the implementation of + ACE_Event_Handler_Handle_Timeout_Upcall from Timer_Queue.* into + Timer_Queue_T.* since only template classes should go into *_T.* + files. + +Tue Jun 3 18:16:02 1997 Darrell Brunsch + + * ace/Timer_Queue.*: + + Templatized ACE_Event_Handler_Handle_Timeout_Upcall with LOCK + + Added deletion() to Upcall Functors. This gets called if there + are any nodes in a queue and the queue's destructor is called + + * ace/Timer_Queue_T.*: + + Changed iterator accessor to public + + Removed two template parameters from ACE_Timer_Node_T so only + EVENT is left. Added accessors instead of using friendships, + and deleted the constructor (use set() instead) + + Changed iterator into a general iterator (with first(), next(), + isdone() and item () methods) + + Added remove_first () method that removes and returns the + earliest timer in the queue + + Added ACE_Free_List support + + * ace/Timer_Heap*: + + Added upcall functor deletion() support + + Added remove_first () method that removes and returns the + earliest timer in the queue + + * ace/Timer_List*: + + Changed to double-linked circular list and changed the timer_id + to be a pointer to the node (like it is in Timer Wheel and Timer + Hash) + + Added upcall functor deletion() support + + Added remove_first () method that removes and returns the + earliest timer in the queue + + Added check for timer_id of -1 so we don't try to delete the + error code if it is passed into cancel + + Changed Timer_List_Iterator_T constructor parameter from list to + listParm to resolve a conflict with STL. Thanks to Todd + Barkalow for this fix + + * ace/Timer_Wheel*: + Added HighRes timer support + + Added upcall functor deletion() support + + Added earliest_pos_ variable to keep track of the list with + the earliest node + + Created an expire that is specialized for ACE_Timer_Wheel + + Added remove_first () method that removes and returns the + earliest timer in the queue + + Added check for timer_id of -1 so we don't try to delete the + error code if it is passed into cancel + + * ace/Timer_Hash*: + + Added Timer Hash Queue - This is a class that can take another + timer queue type (Timer List, Timer Heap...) as a template + parameter (BUCKET) and then do an intermediate hash of a timer + to determine which queue among a table of timer queues to put + the timer into. ACE_Timer_Hash is typedefed to the Timer List + version and ACE_Timer_Hash_Heap is typedefed to the Timer Heap + version + + Added HighRes timer support + + Added upcall functor deletion() support + + Created an expire that is specialized for ACE_Timer_Hash + + Added remove_first () method that removes and returns the + earliest timer in the queue + + Added check for timer_id of -1 so we don't try to delete the + error code if it is passed into cancel + + * ace/Free_List.* + + Added ACE_Free_List and ACE_Locked_Free_List. These + are used to maintain free lists of nodes. ACE_Free_List is a + abstract class where ACE_Locked_Free_List is a concrete one that + has a mutex parameter (LOCK). + + * ace/OS.h: + + Added ACE_DEFAULT_TIMER_HASH_TABLE_SIZE constant + + Added ACE_DEFAULT_FREE_LIST_* constants + + * ace/Proactor.*: + + Added deletion() to Upcall Functors. This gets called if there + are any nodes in a queue and the queue's destructor is called. + + * tests/Timer_Queue_Test.cpp: + + Added HighRes timer support + + Changed the array of timer queues into a list (to more easily + add/remove/comment out an entry) + + Added some more performance tests with randomization + +Tue Jun 3 00:26:06 1997 Douglas C. Schmidt + + * ace/OS.h: Changed the access protection for ACE_cond_t, + ACE_sema_t, ACE_event_t, and ACE_rwlock_t so that it is + protected rather than private. In addition, added ACE_Export to + all of these classes so that they are visible outside of a DLL. + Thanks to Ivan Murphy for these suggestions. + + * ace/OS.h: Changed the value of ACE_MAX_DEFAULT_PORT on Win32 to + 0 in order to work around a nasty NTism... Thanks to Jon Biggar + for reporting this. + +Mon Jun 2 16:29:48 1997 James C Hu + + * ace/Process.*: + - Fixed ACE_Process::spawn to close descriptors after having + been duped. + - Fixed ACE_Process::spawn to exit () after an error is + encountered in the child process, rather than returning. + - Fixed ACE_Process_Options::set_handles to duplicate handles + that are passed in, and then to close them in the destructor. + +Sun Jun 01 22:21:28 1997 David L. Levine + + * examples/Threads/tss1.cpp: made some globals non-static or + const so that tss1 will link with Sun C++ 4.2 -O3. I don't + know what the problem is; it only shows up with optimization + enabled. These fixes work around it. + +Sun Jun 01 20:29:20 1997 James CE Johnson + + * ace/IOStream*: + - removed the old 4/5/97 comments + - made operator>>, << on QuotedString a template + + This last makes QuotedString much more functional. As + templated functions, the QuotedString can now be used on + other iostream-type objects. The previous method of + defining the function only for the type of ACE_IOStream + being created was didn't provide this flexibility. + +Sat May 31 07:01:22 1997 Douglas C. Schmidt + + * ace/Log_Msg.cpp (open): To avoid handle leaks, we need to + shutdown the message_queue before trying to reopen it. Thanks + to Per Andersson for this suggestion. + + * include/makeinclude/platform_osf1_4.0.GNU: Added a new platform + config file. Thanks to James Johnson for this. + +Fri May 30 16:25:25 1997 + + * CPP-inclient.cpp (main): Properly compare to the "quit" + string. Thanks to "Andre Arpin" for + reporting this. + + * tests/UPIPE_SAP_Test.cpp (connector): Changed the eof marker in + the strings. + +Fri May 30 14:04:44 1997 James C Hu + + * include/makeinclude/platform_irix6.4_sgic++.GNU: added to make + things compile on latest SGI machines. Removed +pp and -woff... + flags from the CCFLAGS variable. Added new -woff flags to hide + other warnings. + + * ace/config-irix6.4-sgic++*.h: copied corresponding configs from + irix6.2 and removed ACE_HAS_SVR4_TIME, since this seems to be no + longer true of irix6.4. + +Fri May 30 02:39:39 1997 + + * ace/Connector.cpp + + (create_AST): On Win32, added the except mask when registering + with the Reactor to find out when asynchronous connects + complete. + + (Svc_Tuple): Made sure that the default value for the timer_id + in AST is not 0. 0 is a valid timer_id. I have changed this to + be -1. + + (handle_exception): Added this method. On + Win32, the except mask must also be set for asynchronous + connects. + +Thu May 29 21:28:25 1997 + + * Process.*: Removed the ACE_Process_Old class. + + * Local_Tokens_T.*: Removed all these files. They have not been + used by the token library for some time. They were mistakenly + put in the release. + +Thu May 29 02:00:14 1997 + + * ACE.cpp (is_process_active): Added this method which checks if a + process is still alive. Thanks to Chris (CLahey@cccis.com) for + this code. + + * ace/OS.i (kill): Changed PROCESS_ALL_ACCESS to + PROCESS_TERMINATE. + + * ace/ACE.cpp (bind_port): Changed the implementation of this + method such that a recently used port is not used again in the + next call to this method on Win32, i.e., upper limit is + decreased even in the successful case. This fixes the problem on + Win32 where binding to a recently used port works but the + following connect fails. + + * ace/Acceptor.cpp (close): Added a close method that allows us + to shutdown the Acceptor (without having to destroy it). + + * ace/Connector.cpp (close): Added a close method that allows us + to shutdown the Connector (without having to destroy it). + + * apps/Gateway/Gateway/Proxy_Handler_Connector.cpp + + (handle_close): Removed this method. This code seemed to be + duplicating the code in the handle_close of the proxies. + + (initiate_connection): Removed the code that did + rescheduling. The proxies are responsible for this. + + * apps/Gateway/Gateway/Event_Channel.cpp + + (initiate_proxy_connection): Must *always* use the correct synch + options while connecting. + + (reinitiate_proxy_connection): Always register for timeouts if + we are not disconnecting. This allows us to remove duplicated + logic in Proxy_Handler_Connector. + + The new logic of close() allows us to remove the code that use + to remove the proxy from the map to prevent double deletes. + + (close): Changed the shutdown logic to: Tell everyone that the + spaceship is here (behind the comet), close down the connector, + close down the acceptor, tell everyone that it is now time to + commit suicide. + + * apps/Gateway/Gateway/Proxy_Handler.cpp (handle_timeout): Must + return 0, or else the timer queue will cancel the handler and + *all* its timeouts. + + * apps/Gateway/Peer/svc.conf,Makefile: We now generate a Peer + shared library (instead of just an .so). The svc.conf was + changed to reflect this. + + * tests/UPIPE_SAP_Test.cpp: Fixed output message. + + * Handle_Set.i (operator): Fixed typo. + +Thu May 29 11:09:52 1997 David L. Levine + + * include/makeinclude/rules.local.GNU: check for directory + write permission before attempting to install. This helps + support shared ACE workspaces. There are two easy ways + to not install "private" libraries in the shared workspace: + 1) remove write permission from $WRAPPER_ROOT/ace, or + 2) add "INSTALL=" to invocations of "make". + +Thu May 29 06:07:18 1997 Douglas C. Schmidt + + * ace/OS.i (thr_join): Revised some code in the #ifdef'd out + version of ACE_OS::thr_join() so that it will compile correctly. + Note that this code isn't currently used, but someday it will + be. Thanks to Hamutal Yanay for reporting this. + +Wed May 28 16:37:57 1997 David L. Levine + + * ace/OS.{h,i} (ACE_Time_Value): added default constructor, + which does not call normalize (). ACE_Time_Value::normalize () + was showing up as a relatively minor, but signficant hot + spot in Event Channel latency tests. + +Wed May 28 16:02:53 1997 James C Hu + + * ace/OS.i: Changes to strdup and getpid for CHORUS, as per Wei + Chiang's suggestions. + +Tue May 27 18:26:51 1997 Douglas C. Schmidt + + * ace/config-hpux-10.x-decthreads.h: Added support for HP/UX 10.10 + with DCE threads. Thanks to Shankar Krishnamoorthy + for these fixes. + + * ace/Local_Tokens_T.h: #if def'd out all of this file since it + doesn't seem to be used anymore. Thanks to Shankar + Krishnamoorthy for reporting this. + + * ace/Makefile (TEMPLATE_FILES): Removed Local_Tokens_T since it + doesn't appear to be used anywhere. + +Tue May 27 18:47:34 1997 James C Hu + + * tests/*.cpp: Various changes for EBCIDIC compatibility. + Thanks to Chuck Gehr for pointing out the need for this! + + * tests/test_config.h: Added ACE_ALPHABET to aid a-z sending and + comparing. + +Tue May 27 15:03:25 1997 David L. Levine + + * tests/Future_Test.cpp: added ACE_Future{_Rep} template + specializations. + +Tue May 27 07:49:03 1997 Douglas C. Schmidt + + * ace/Future.cpp: Made a few minor reformatting changes to Per's + new Future enhancements. + +Tue May 27 14:19:14 1997 Per Andersson + + * ace/Future: Fixed self assignment bug in ACE_Future<>::operator=(). + Fixed bug in ACE_Future<>::set(). It is now possible to do a + ACE_Future<>::set() followed by a ACE_Future<>::get() without + hanging forever. + + Moved all handling of the ACE_Future_Rep<> reference count + into three new static ACE_Future_Rep<> member functions, + create, attach, assign and detach. + + Removed one mutex from ACE_Future_Rep<> by changing the + reference count from an ACE_Atomic_Op into a plain + int. The ACE_Future_Rep<>::value_ready_mutex_ mutex is + instead used for serializing changes to the reference count. + (ACE_Future_Rep<>::attach, ACE_Future_Rep<>::detach()) + + Removed mutex from ACE_Future<> the serialization is + performed by the ACE_Future_Rep<>::attach, + ACE_Future_Rep<>::detach() and ACE_Future_Rep<>::assign() + functions. + + Changed the ACE_Future<> default constructor to always + create a ACE_Future_Rep<> + + * tests/Future_Test.cpp: Added test case for + ACE_Future<>::set() followed by ACE_Future<>::get(). Added + test for working ACE_Future::operator=(). The test is not + fool proof but it crashes or hangs the test process with the + old ACE_Future<> implementation. + +Mon May 26 14:19:14 1997 James C Hu + + * ace/OS.{h,i}: Fixed difftime implementation for cases where + systems implement it as a macro. Fixed tempnam by adding + ACE_LACKS_TEMPNAM. + +Sun May 25 11:36:22 1997 Douglas C. Schmidt + + * examples/Reactor/Misc: Removed test_handle_set.cpp since it + is now completed subsumed by tests/Handle_Set_Test.cpp. + + * tests/Handle_Set_Test.cpp: Updated the test of + the ACE_Handle_Set so that it shows how fast the iterator works. + + * ace/Reactor.cpp: Updated the Reactor to use the new + ACE_Handle_Set_Iterator (whic no longer requires calling + operator++ to advance the iterator). + + * ace/Handle_Set: Rewrote the ACE_Handle_Set_Iterator to speed it up. + The result seems to be about 15% faster than the original. + + * ace/OS.h: Changed the MSB_MASK static constant into a macro and + moved it from Handle_Set.cpp into OS.h, changing its name to + ACE_MSB_MASK. + + * ace/Sched_Params.cpp (priority_max): Added another #ifdef for + Chorus. Thanks to Wei Chiang for reporting this. + + * include/makeinclude/platform_sunos5_sunc++_orbix.GNU: added -l + in front of orbixmt. Thanks to Wei Chiang for pointing this + out. + + * ace/ACE.cpp: Changed the default port for NT so that it starts + at 65279 rather than 65535. Hopefully, this will fix that + annoying bug that has been plaguing us on NT 4.0 for months. + Thanks to Goran Lowkrantz + for reporting this. + +Sat May 24 23:42:32 1997 David L. Levine + + * performance-tests/Misc/test_naming.cpp (do_testing): replaced + strlen () calls in character array size with constant expression. + +Sat May 24 12:07:48 1997 Douglas C. Schmidt + + * Released version 4.2.1 for testing. + + * ace/Reactor.cpp (bind): Fixed a stupid typo where I was using + the ACE_REACTOR_EVENT_HANDLER macro instead of the + ACE_REACTOR_HANDLE macro. Thanks to Detlef for reporting this. + + * ace/OS.i: Added a new macro called ACE_HAS_THR_MINSTACK to deal + with weirdo mangling of names by Tandem. Thanks to Jan Perman + for reporting this. + + * ace/OS.h: Added a new macro ACE_LACKS_PRI_T for those platforms + using STHREADS (e.g., Tandem NonStop OS) that don't have pri_t + defined. Thanks to Jan Perman for + reporting this. + + * ace/Connector.cpp (connect): Make sure to save/restore errno + since svc_handler->close() may change it. Thanks to Michael + Hartman for reporting this. + + * include/makeinclude/platform_chorus.GNU: Added a new platform + macros file for Chorus. Thanks to Wei Chang for this. + + * ace/OS.cpp (sched_params): Reordered the #ifdefs so that Chorus + comes first. + + * ace/OS.i (sleep): If the platform defines ACE_HAS_CLOCK_GETTIME + then we'll use the nanosleep() method rather than sleep(). + + * ace/OS.h: disabled THR_NEW_LWP for Chorus. Thanks to Wei Chang + for reporting this. + + * ace/Sched_Params.cpp: ACE_SCHED_OTHER and ACE_SCHED_RR have the + same value on Chorus. Thanks to Wei Chang for reporting this. + +Sat May 24 09:21:08 1997 David L. Levine + + * netsvcs/lib/Server_Logging_Handler.cpp: protected second + ACE_Svc_Handler specialization for case that ACE_HAS_THREADS, + when ACE_HAS_TLI. It had gotten lost in the last pass of + that module. Thanks to Sandro Doro + for reporting this problem. + +Sat May 24 03:19:38 1997 Nanbor Wang + + * ace/OS.i (sigaddset, sigdelset, sigemptyset, sigfillset, + sigismember): Modified the implementation of these function so + as to conform with POSIX standard. Basically all functions do + the same things they did but more conservative protections are + added. The modified semantic becomes, + + sigemptyset, sigfillset, sigaddset, sigdelset: return 0 if + succeed, -1 otherwise. + sigismember: returns 0 if signum is not in the set, 1 if signum + is in the set, and -1 if error occurs. + + If error occured, errno will be set to one of the following + value: + EFAULT: sigset is not a valid address. + EINVAL: signum is not a valid signal number. + + Notice that, so far, this is for NT only. + +Sat May 24 01:53:22 1997 James C Hu + + * performance-tests/Misc/test_naming.cpp (do_testing): Thanks to + Sandro Doro, squashed a bug where we were trying to concatenate + onto a string constant. + +Fri May 23 01:01:01 1997 Douglas C. Schmidt + + * ace/config-hpux-9.x.h: Added + + #define ACE_HAS_BROKEN_ENUMS + #define ACE_HAS_IP_MULTICAST + #define ACE_LACKS_GETPGID + + Thanks to Neil Cohen for reporting these. + + * ace/Thread_Manager.h: Made the private methods and data members + protected so that subclasses can extend it. Thanks to Hamutal + Yanay for this suggestion. + +Fri May 23 21:27:05 1997 David L. Levine + + * ace/Process.{h,cpp} (env_argv): added "const" to char * type in + return type, for argument compatibility in call to ACE_OS::execve (). + + * ace/Process.cpp (spawn): removed unreachable return statement at + end of function. + + Thanks to Dave Mayerhoefer for + reporting the above two problems. + + * ace/{IOStream*,Makefile}: Split out templates into + ace/IOStream_T.{h,cpp} files. This way, automatic template + instantiation systems that require templates to be in separate + files, such as on Irix 6.2, will be able to build IOStream_Test + and the ACE_IOStream examples without warnings. (The + ACE_IOSTREAM_BUILDING_TEMPLATE macro that did this only worked + if ACE_TEMPLATES_REQUIRE_SOURCE was defined. It's no longer + needed with the separate template files.) + + * tests/IOStream_Test.cpp, + examples/IOStream/client/iostream_client.cpp, + examples/IOStream/server/iostream_server.cpp: + swapped ACE_Streambuf and ACE_Streambuf_T class names so that + the template class has the "_T". And renamed ACE_IOStream_T + for consistency. + + * ace/{IOStream.*,README}, + tests/IOStream_Test.cpp, + examples/IOStream/client/iostream_client.cpp, + examples/IOStream/server/iostream_server.cpp, + config-hpux-9.x*.h: + Added ACE_LACKS_ACE_IOSTREAM protection + so that these can easily be built on platforms that have + trouble with ACE_IOStream. + + * Priority_Task_Test.cpp: removed close () because it didn't really + close the Task, and added printout to main () after all tasks have + been spawned to help debug non-termination. + + * ace/OS.cpp: (thr_create, with STHREADS only): *thr_handle was + used but *thr_id had been set by ::thr_create, so threads never + got activated. Fixed by using *thr_id instead of *thr_handle + in the calls to ACE_OS::thr_setprio and ACE_OS::continue. + Thanks to Jan Perman for reporting + this problem. + +Fri May 23 20:12:33 1997 James C Hu + + * tests/SV_Shared_Memory_Test.cpp: Thanks to Chuck Gehr, fixed + ASCII dependent code in the parent and child routines. + +Fri May 23 02:58:28 1997 Nanbor Wang + + * ace/OS.i (dlsym): Added ACE_USES_ASM_SYMBOL_IN_DLSYM, support + for platforms (FreeBSD) which use assembly symbols instead of C + symbols in dlsym (). + + * ace/config-freebsd[-pthread].h: Added flag ACE_HAS_CHARPTR_DL + and ACE_USES_ASM_SYMBOL_IN_DLSYM. + +Thu May 22 08:14:21 1997 David L. Levine + + * tests/Tokens_Test.cpp: added deletes to avoid memory leaks. + +Wed May 21 16:15:48 1997 David L. Levine + + * ace/{config-irix6.2*.h,README}: removed ACE_LACKS_IOSTREAM_SETGET + because tests won't build with it. Also, added + ACE_LACKS_SIGNED_CHAR. + + * ace/IOStream.h: removed "const" from PUT_PROT of + u_char * and void *. This should allow the IOStream test + and examples to build and run on Irix platforms. Thanks + to Torbjorn Lindgren and Amos Shapira + for reporting this, and to James Hu for + helping fix it. + + * ace/{OS.cpp,Sched_Params.cp} (Solaris only): use 0 min priority + again, with workaround in ACE_OS::thr_create to not use + ::pthread_attr_setschedparam () if the priority is 0. Instead, + the priority of the newly created thread is set to 0 (if it + wasn't created with 0) after the thread is created, with + ::pthread_setschedparam (). + +Wed May 21 15:23:37 1997 Chris Cleeland + + * ace/Strategies_T.* (ACE_Hash_Addr): Eliminated the ADDR_T + template parameter as a base class. It is now a wholly-contained + member of the ACE_Hash_Addr<> with conversion operators. + This caused problems on certain compilers, notably HP-UX. + +Wed May 21 14:13:36 1997 James C Hu + + * ace/OS.{h,i} (difftime): Added implementation to ACE_OS. I + don't expect any problems since it is in ANSI. + + * ace/OS.{h,i} (tempnam): Added implementation to ACE_OS. + +Wed May 21 01:17:40 1997 Douglas C. Schmidt + + * Released version 4.2. + + * ace/Acceptor.cpp (activate_svc_handler ): Removed an unnecessary + return 0. Thanks to Amos Shapira for reporting + this. + + * ace/Message_Block.cpp (release): I believe that + ACE_Message_Block::release() should return something other than + 0, i.e., it should return the result of release_i(). Thanks to + Amos Shapira for reporting this. + +Wed May 21 01:17:40 1997 Per Andersson + + * Moved most code from netsvcs/lib/Server_Logging_Handler.* to + Server_Logging_Handler_T.*. Made template out of + ACE_Server_Logging_Handler and ACE_Server_Logging_Acceptor. + Factorised out as much as possible to reduce code + duplication. The log record processing was moved from + ACE_Server_Logging_Handler it should now be handled by the + Log_Message_Receiver class. It is now possible to change + how log records processed without changing code in + Server_Logging_Handler* and it is possible to have several + Server_Logging_Handlers that processes log records + in different ways without duplicating all the server code. + All that is needed is to write a new/change + Log_Message_Receiver and instantiate a couple of templates. + + * netsvcs/lib/Server_Logging_Handler.h added lots of typedefs + for making template instantiations easier. + + * netsvcs/lib/Server_Logging_Handler.h addad lots template + instatiations, there are now 58 all together. + + * Added netsvc/lib/Log_Message_Receiver.{h,cpp}, implementstwo + simple log message receivers that prints the log record to + stderr. + +Tue May 20 13:50:17 1997 Douglas C. Schmidt + + * ace/config-hpux-9.x.h: Added a #define for ACE_HAS_BROKEN_ENUM, + ACE_HAS_IP_MULTICAST, and ACE_LACKS_GETPGID. Thanks to Neil + Cohen for reporting this. + + * include/makeinclude/platform_sunos5_sunc++_orbix.GNU: Replaced + the use of -lITsrv with -lorbixmt. Thanks to Wei Chiang for + this. + + * include/makeinclude/platform_osf1_3.2.GNU: Make sure that all + the template repositories are in the same directory to work + around problems with the C++ compiler. Also added -lrt to get + the apps and tests to run. Thanks to Tom Dobridge for this + help. + +Tue May 20 17:13:15 1997 Carlos O'Ryan + + * ace/config-hpux-10.x-nothread.h: + * ace/config-hpux-10.x-aCC.h: + * ace/Stream_Modules.cpp: + ACE_LACKS_STREAM_MODULES is no longer needed, moving the inclusion + of "ace/Task.h" to the beginning of "ace/Stream_Modules.h" solved + the problem nicely. + + * ace/config-hpux-10.x.h: + * ace/config-hpux-10.x-aCC.h: + ACE_HAS_BROKEN_HPUX_TEMPLATES is not needed on newer HP/CXX + compilers; further, old ones will not compile ACE even if the + macro is defined. + + * ace/Timer_List_T.h: + * ace/Timer_Queue_T.i: + I moved the definition of ACE_Timer_Queue_T::lock() from the .i + file to the .h file, HP/CXX gets completely confused otherwise. + I also added a number of ACE_INLINE missing in the .i file. + + * ace/Stream_Modules.h: + * ace/Stream_Modules.cpp: + I had to move the inclusion of "ace/Task.h" outside of the + protections against multiple inclusion for Stream_Modules.h. + That seems to solve the ciclyc dependancy for + Task->Module->Stream_Module->Task. + BTW, the same thing was already done in "ace/Log_Record.h". + I'll try to remove the ACE_LACKS_STREAM_MODULES macro, it seems + that the last change makes it redundant. + + * ace/Signal.cpp: + HP/CXX compiler will not close the library unless + ACE_MAX_SIGNAL_HANDLERS is defined as "const size_t". The previous + definition ("size_t") did compile tough. + + * ace/Log_Record.h: + We need to include "ace/ACE.h" before "ace/Log_Priority.h". + + * ace/Log_Priority.h: + HP/CXX compiler seems to reserve a few bits in enums, so the + ENSURE_32_BITS trick would result in a compile time error. + Since HP enums are always 32 bits we could skip the definition for + ENSURE_32_BITS altogether, but I prefer to keep a consistent + namespace across plaforms, I have found a value for ENSURE_32_BITS + that seems to work. + + * include/makeinclude/platform_hpux.GNU: + Some options to improve compile time, since we use explicit + template instantiation there is no need for a ptcomp o ptlink + phase. + +Tue May 20 09:10:18 1997 Nanbor Wang + + * ace/config-freebsd-pthread.h: + * ace/config-freebsd.h: Removed "FreeBSD" directive because gcc on + FreeBSD defines __FreeBSD__ automatically. + + * ace/OS.i (sigaddset, sigdelset, sigismember): Added range + checking to these functions in order to avoid disasters. Sig + number should be between 1 and NSIG. + (sigwait): Changed ifdef (FreeBSD) to ifdef (__FreeBSD__) since + compiler does it for us. + +Tue May 20 08:41:11 1997 David L. Levine + + * examples/Threads/tss2.cpp: added #include of ace/Thread.h + because Sun C++ 4.1 needs it. + +Mon May 19 16:04:32 1997 David L. Levine + + * bin/create_ace_build: changed startup line for compatibility + with bash. This startup line lets the script run without + hard-coding the full path to the perl executable, as long as + perl is on the user's PATH. + +Mon May 19 12:45:21 1997 Douglas C. Schmidt + + * examples/Threads/reader_writer.cpp: Changed the code so that we + don't try to treat thread ids as ints! Thanks to Chuck Gehr for + reporting this. + +Sun May 18 21:57:54 1997 David L. Levine + + * examples/Threads/tss2.cpp: added second parameter to + ACE_TSS_Singleton template specialization. + +Sun May 18 09:20:15 1997 Douglas C. Schmidt + + * examples/Threads/TSS_Data.h: Added the second parameter for + ACE_SYNCH_MUTEX since Rich and Chris updated ACE_TSS_Singleton. + + * ace/Singleton.cpp: Added the updated version of + ACE_TSS_Singleton that implements the Double-Checked Locking + pattern. Thanks to Rich Christy and Chris Lahey for this. + + * ace/Strategies_T.cpp (activate_svc_handler): Fixed the logic so + that a value is always returned. Thanks to David Levine for + noticing this. + +Sun May 18 07:25:11 1997 David L. Levine + + * netsvcs/lib/Server_Logging_Handler.cpp: removed second + ACE_Svc_Handler specialization for non-threaded, has-TLI case. + That's because it is the same as the first; the only difference + was that one specialized with ACE_SYNCH and the other with + ACE_NULL_SYNCH. Without threads, those macros expand to the + same thing. Thanks Sandro Doro for + reporting this. + + * examples/Threads/tss2.cpp: added ACE_TSS template + specialization. + +Sat May 17 23:24:34 1997 Nanbor Wang + + * ace/OS.i (sigismember): Corrected the code when + ACE_LACKS_SIGSET. + +Sat May 17 00:06:04 1997 + + * examples/ASX/Event_Server/Transceiver/transceiver.cpp + (Event_Transceiver): Corrected signal registration for Win32. + + * apps/Gateway/Gateway/Gateway.cpp (parse_args): Since the + Connector is now fixed, non-blocking is now working fine. + + * ace/Connector.cpp (handle_close,create_AST): Made sure we close + down the svc_handler on error. + + * ace/{Acceptor.cpp,Connector.cpp} (activate_svc_handler): The + if statement logic in these methods was incorrect. + + * ace/SOCK_Connector.cpp (connect): Just like in complete(), we + start out with non-blocking disabled on the . + + * ace/OS.h: When ACE_LACKS_SIGSET is defined, changed the + definition of sigset_t from void * to unsigned int. + +Sat May 17 12:25:22 1997 Douglas C. Schmidt + + * ace/{Acceptor,Connector,Strategies_T}: Make sure to either + enable or disable ACE_NONBLOCK (depending on the flags). This + ensures that we always start with the I/O mode set to a + deterministic state. Thanks to Irfan for suggesting this. + + * ace/Connector: Added a new "flags" parameter to the + ACE_Connector and ACE_Strategy_Connector which keeps track of + flags that control how Svc_Handler are initialized prior to + being activated. + + * ace/Strategies_T.cpp (activate_svc_handler): Make sure to set + the peer's handle into non-blocking mode *before* calling the + Svc_Handler's open() method. This ensures that things are set + up correctly when this hook is called. + +Sat May 17 02:19:27 1997 Nanbor Wang + + * ace/config-freebsd.h (ACE_HAS_BROKEN_TIMESPEC_MEMBERS): + + * ace/OS.i (set, timestruct_t, nanosleep): + + * ace/High_Res_Timer.cpp (elapsed_time): + + * ace/README: Added ACE_HAS_BROKEN_TIMESPEC_MEMBERS so that we can + fix that problem FreeBSD 2.1.x brings by defining timespec as { + time_t ts_sec ; long ts_nsec }. Notice: This is highly + non-portable. Please refer to ACE code and see how to write + portable. Fortunately, only older versions of FreeBSD have + this. Yesterday's hack didn't work, so, it's removed. Thanks + to Satoshi Ueno for reporting and helping + debug on his FreeBSD 2.1.7R box. + +Sat May 17 00:06:04 1997 + + * apps/Gateway/Gateway/Proxy_Handler.cpp (open): Turn on + non-blocking I/O only after the Channel is done sending the id + to the Peer. + + * apps/Gateway/Gateway/Gateway.cpp: + + - Added necessary DLL build macros. + + - Removed error checking for Reactor::remove_handler() for STDIN + as STDIN is never registered with the Reactor on Win32. + + - Fixed the registration of SIGINT. + + - blocking_semantics_ should be 1 when blocking is on and not 0. + + - Since the Connector is currently broken with respect to + non-blocking connects, I have put a temporary fix such that + only blocking connects are done. Revert this after the + Connector is fixed. + + * apps/Gateway/Gateway/Event_Channel.cpp: + + - Only if socket_queue_size > 0, do we set a new value. + + - In reinitiate_proxy_connection(), we must unbind the proxy + from the proxy_map_ as we are no longer responsible for + this. The Connector should now be responsible for this. + + * apps/Gateway/Gateway/Concrete_Proxy_Handlers.cpp: Added + necessary DLL build macros. + + * apps/Gateway/Peer/Peer.cpp: + + - Added include file and necessary DLL build macros. + + - Removed error checking for Reactor::remove_handler() for STDIN + as STDIN is never registered with the Reactor on Win32. + + - Fixed the registration of SIGINT. + + * apps/Gateway/{Peer,Gateway}: Added Win32 makefiles. + + * ace/ACE.cpp (read_adapter): Handle for the read_adapter should + always be STDIN. + +Fri May 16 18:43:17 1997 Nanbor Wang + + * ace/config-freebsd.h: Minor modification for working on FreeBSD + 2.1.x platform. Added includion of and + . Defined ACE_HAS_POSIX_TIME for 2.1.x. Redefine + timespec to timeval to hack around a bug on 2.1.x. Thanks to + Satoshi Ueno for reporting this. + +Fri May 16 12:25:32 1997 Douglas C. Schmidt + + * netsvcs/lib: Reverted back to the original Server_Logging_Handler + behavior since the new version is breaking GCC's templates. + + * ace/Log_Record.h: need to #include "ace/ACE.h" before + "ace/Log_Priority.h" so that "Log_Priority.h" sees the + configuration stuff (otherwise the following fix won't work). + + * ace/Log_Priority.h: Added a workaround for lame C++ compilers + like the one on HP/UX that can't support large enums. Thanks to + Robert Head for reporting this. + + * ace/Singleton: Added the new ACE_TSS_Singleton, which stores + Singletons in thread-specific storage. Thanks to Chris Lahey + and Rich Christy for this. + + * ace/OS.h: Removed the ACE_Singleton_Strategy since we don't need + it anymore. + + * netsvcs/lib: Added the new Server_Logging_Handler_T.* and + Log_Message_Receiver.* netsvcs. Thanks to Per Andersson for + contributing these. + + * examples/Misc/Makefile: Removed the XtReactor tests from the + Makefile until we figure out a good way to get them integrated + with the appropriate libraries. + + * ace/config-irix6.2-sgic++-nothread.h: Added the following: + + ACE_LACKS_LINEBUFFERED_STREAMBUF + ACE_HAS_SETOWN + ACE_HAS_SYSENT_H + ACE_HAS_SYSINFO + + Thanks to Torbjorn Lindgren for reporting + this. + + * ace/Proactor.cpp: Changed the use of lock() to mutex() since we + changed the name in Timer_Queue. + + * ace/Timer_Queue_T.i: Changed the name of the lock() method to + mutex() to work around compile problems with HP/UX. Thanks to + Robert Head for reporting this + workaround. + + * ace/config-irix5.3-sgic++.h: Made a few changes to get ACE to + work on IRIX 5.3. Thanks to Eugene R. Somdahl + for these fixes. + + * ace/OS: Added calloc() implementation. I don't know how + this managed to fall through the cracks! + + * include/makeinclude/platform_osf1_4.0.GNU: Added a few more + tweaks courtesy of James Johnson. + + * include/makeinclude/platform_osf1_3.2.GNU: Added a few more + tweaks courtesy of Tom Dobridge. + + * include/makeinclude/platform_osf1_4.0.GNU (DLD): Added -shared + -expect_unresolved '*' so that calls to the linker via cxx will + work correctly. Thanks to Thilo for this. + + * include/makeinclude/platform_chorus.GNU: Removed CLASSIXDIR = + /usr/home/chiang/chorus/merge/extended-i386at, added the + nostdinc flag, and removed extra whitespace. Thanks to Wei + Chiang for reporting this. + +Fri May 16 00:02:33 1997 + + * ace/ReactorEx: Even though changes to the owner field are very + well synchronized within the class code, the owner() + accessor is public and can be called from out side the + class. Therefore, I have added a owner_i() that does not do + locking. All internal calls to check the owner will use the + new accessor, whereas application code outside the class can + still use the old synchronized accessor. + +Fri May 16 11:39:51 1997 Nanbor Wang + + * ace/OS.i (sigaddset, sigdelset, sigemptyset, sigfillset, + sigismember): Added implementation when ACE_LACKS_SIGSET so that + platforms (NT?) without these functions can still manipulate + sigset_t variables. + +Thu May 15 22:19:59 1997 Douglas C. Schmidt + + * examples/ASX/Event_Server/Event_Server: Removed the THR_DETACHED + flag from options so that we can wait on the threads + correctly. + + * ace/Stream_Modules.cpp: Changed the logic for determining when + to compile the Stream_Modules.cpp code. Now, we compile it + unless ACE_LACKS_STREAM_MODULES is defined (i.e., we're on HP/UX + 10.x using aCC). + + * netsvcs/lib/Server_Logging_Handler.cpp (handle_input): Fixed + a bug in handle_input() where we need to return the result, not + just 0 or 1. Thanks to Per Andersson for reporting this. + + * ace/Log_Priority.h: Changed the values of the enums in + ACE_Log_Priority so that they can be dealt with via bitwise + operations. Thanks to Per Andersson for this. + + * include/makeinclude/platform_osf1_4.0.GNU: Added support for + templates. Thanks to Steve Huston and James Johnson for + verifying this. + + * include/makeinclude/platform_osf1_3.2.GNU: Got rid of all + unresolved symbol warnings using cxx 5.5 on DEC/OSF v3.2 by + using the linker flag "-expect_unresolved '*'." In addition, I + added -threads to the DCFLAGS macro. Thanks to Tom Dobridge + for this. + + * ace/Strategies_T: Added a minor ACE_Reactive_Strategy extension + to enable non-blocking I/O in active_svc_handler(). Thanks to + Arturo Montes for contributing this. + + * ace/config-osf1-4.0[-g++].h: Added a #define for + ACE_POLL_IS_BROKEN since DEC UNIX's poll() doesn't seem to work + correctly as a highres timer. Thanks to James Johnson and Thilo + for reporting this. + + * examples/Threads/thread_specific.cpp (worker): Changes + size_t i back to int i to avoid a signed/unsigned complaint. + Thanks to David Levine for reporting this. + + * ace/config-chorus.h: Added ACE_LACKS_MPROTECT, + ACE_HAS_IP_MULTICAST, and ACE_LACKS_SOCKETPAIR to the Chorus + port. Thanks to Wei Chiang for + reporting this. + + * ace/OS.i: Added ACE_LACKS_ACCESS to the Chorus config file + and VxWorks config file, as well as to OS.i. + +: * ace/OS.i: Added ACE_LACKS_GETSERVBYNAME to the Chorus config + file and VxWorks config file, as well as to OS.i. + + * ace/OS.i: Added ACE_LACKS_SBRK to the Chorus config file, as + well as to the definition of the ACE_OS::sbrk() function. + + * ace/OS.h: Removed #include /**/ from the Chorus-specific + part of OS.h since it's already included elsewhere. Thanks to + Wei Chiang for reporting this. + + * ace/Reactor: Added a typedef for ACE_Reactor_Token to + ACE_Null_Mutex for situations where ACE_MT_SAFE is *disabled*. + This makes the code more consistent. + + * ace/Reactor: Added an interface that makes it possible to + acquire a reference to the that is used to + serialize the internal Reactor's processing logic. This can be + useful for situations where you need to avoid deadlock + efficiently when are used in multiple + threads. Thanks to Detlef for pointing out the utility of this. + +Thu May 15 23:34:30 1997 Tim H. Harrison + + * ace/Process_Manager.cpp (spawn_n): Changed + ACE_Process_Manager::start_n to ACE_Process_Manager::spawn_n. + +Thu May 15 15:39:13 1997 Carlos O'Ryan + + * include/makeinclude/platform_hpux.GNU: + * ace/config-hpux-10.x.h: + * ace/config-hpux-10.x-nothread.h: + HP/CXX cannot achieve template closure, not even using the + dummy exec trick: apparently the repository gets a bit + corrupted. HP/CXX (version 10.24) support explicit template + instantiation, I believe this to be a superior method for + ensuring library closure (and it works). + + * ace/Task_T.cpp: + * ace/Stream_Modules.cpp: + I have changed the hack to compile under HP-UX, + "ace/Module.h" is once more included in ace/Task_T.cpp, but + "ace/Stream_Modules.cpp" is protected: it will be empty + under HP-UX unless included from the + "ace/Stream_Modules.h". I still believe that there is a + problem in the cyclic dependancy Task -> Module -> Thru_Task + -> Task; but it seems that the current hack works better. + + * ace/OS.h: + Defining ACE_UNUSED_ARG as (a) for HP/CXX does not work so I + moved it to the SGI and GCC definition. + + * ace/OS.i: + More unused args. + + * ace/Handle_Set.h: + Removed the extra qualification for ACE_Handle_Set::NBITS, + HP/CXX sends a lot of warnings with that. + + * ace/IOStream.h: + It included "IOStream.cpp" I think that "ace/IOStream.cpp" + is better. + + * ace/Local_Name_Space_T.h: + Ditto for "Local_Name_Space.h" + +Thu May 15 17:40:06 1997 + + * ace/ReactorEx.i (owner): Since changes to the owner field are + very well synchronized, we do not need to synchronize this + accessor. + + * ace/IOStream.h: Added /**/ after #include directives. + + * ace: Update Win32 makefiles to include UNICODE make option. + +Thu May 15 08:54:53 1997 David L. Levine + + * Makefile (release, cleanrelease): use -prune option to "find" + instead of filtering its output. Thanks to Chris Cleeland for + suggesting this. + +Wed May 14 21:52:22 1997 Douglas C. Schmidt + + * ace/UPIPE_Stream.cpp (control): We need to "cast away const" so + that this method can call the Stream's control() method + (which is non-const). Thanks to David Levine for locating this. + + * ace/Singleton.cpp: Finished re-implementing ACE_Singleton. + + * examples/ASX/Message_Queue/buffer_stream.cpp: Updated this + example to illustrate (1) how filters work in an ACE_Stream and + (2) to make sure that resizing buffers work. + + * ace/UPIPE_Stream.h: Changed the signature of control() + to take an int so that it will match the base class + signature. + + * ace/Singleton.h: The new ACE_SingletonEx isn't working yet. + I've #ifdef'd it out until it works. + + * examples/Threads/tss2.cpp: Updated this test program to + illustrate the use of the new ACE_SingletonEx class. + + * ace/Singleton.h: Added a new instance() method to the ACE + Singleton that can be used to set the Singleton. This is useful + for situations where the type being used as the Singleton + doesn't have a default constructor. Thanks to Arturo Montes + for this suggestion. + + * ace/Singleton: Factored out common code in the Singleton and + SingletonEx implementations so they will be cleaner and more + portable. + + * ace/Local_Name_Space_T.h, + ace/Map_Manager.h, + ace/Hash_Map_Manager.h, + ace/SString.h, + ace/Hash_Map_Manager.cpp: + + Changed all uses of the identifier "allocator" to "alloc" to + avoid conflicts with MSVC++ STL 5.0. Thanks to William + L. Gerecke for reporting this. + + * ace/config-aix-4.[12].x.h: Replaces + ACE_LACKS_PTHREAD_THR_SIGSETMASK with ACE_HAS_SIGTHREADMASK. + Thanks to Chris Lahey for this. + + * ace/OS.i (thr_sigsetmask): Added the ACE_HAS_SIGTHREADMASK + support for AIX. Thanks to Chris Lahey for this. + + * ace/Singleton: Added the new ACE_SingletonEx, which supports + both heap-based and thread-specific storage-based Singletons. + Thanks to Chris Lahey for this. + + * ace/OS.h: Added the new ACE_Singleton_Strategy to OS.h. Thanks + to Chris Lahey for this. + +Wed May 14 16:32:57 1997 David L. Levine + + * Makefile: use cpio instead of tar to allow easy filtering + of CVS files from the release. + +Wed May 14 15:00:58 1997 + + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp (main): Fixed code. + + * examples/Naming: Replaced multiple makefiles with one makefile. + + * ace/OS.h: Added UNICODE support for some #defines. + + * OS.i (vsprintf): Added support for this in ACE_OS. + + * OS.cpp (socket_init && socket_fini): It is ok to print out cout + and cerr messages from here (as the C runtime library is still + attached) but it is *not* ok to print out ACE_DEBUG + messages. God only knows the state of the thread specific LogMsg + instance when the process reaches this piece of code. + + Also added a (handy) sprintf that has the following prototype: + + sprintf (wchar_t *buf, const char *format, ...) + + * ace/Process: UNICODE fixes. + + * tests: Fixed the following such that they work with UNICODE: + + Pipe_Test.cpp + Process_Mutex_Test.cpp + Process_Strategy_Test.cpp + Time_Service_Test.cpp + Tokens_Test.cpp + + * Time_Service_Test.cpp (main): Fixed typo in the svc.conf + filename for the clerk. + +Tue May 13 18:56:27 1997 Douglas C. Schmidt + + * ace/IOStream.h: To make C++ compilers happy I added + the following changes by modifying + + ACE_IOStream & operator>>( ACE_Time_Value *& tv ); + + to be + + ACE_IOStream & operator>>( ACE_Time_Value *& tv ); + + Thanks to Chuck Gehr for this fix. + +Tue May 13 21:32:12 1997 David L. Levine + + * ace/Process.cpp (~ACE_Process_Options): delete + command_line_buf_ was missing the []. + + * examples/Threads/process_manager.cpp (main): avoid compiler + warning due to implicit creation of temporary by explicitly + creating an ACE_Process_Options instance. It gets passed to + ACE_Process_Manager::spawn (ACE_Process_Options &), which + takes a non-const reference. + +Tue May 13 18:08:32 1997 + + * examples/ASX/UPIPE_Event_Server: Made enough fixes for this to + compile on Win32 but more work need to be done for this to + work on Win32. + + * ace/OS.i (kill): The error result for ::OpenProcess() is null + and *not* invalid handle. + + * ace/Process.i (kill): Changed the implementation to remove the + ACE_OS::kill() code from ACE_Process::kill() for Win32. This + allows us to avoid calling ::OpenProcess() unnecessarily. + + * tests: For Win32, added Reactor_Exceptions_Test and + Priority_Tasks_Tests. Files changes include run_tests.bat, + tests.mak, and tests.mdp. + + * tests/Future_Test.cpp (main): Fixed memory leaks in main() and + in name_i(). + + * tests/Thread_Pool_Test.cpp (open): The loop was messed up + causing memory leaks. I fixed it. + + * ace/UPIPE_Stream.cpp (close): I am not sure why the stream was + closed with M_DELETE_NONE. This indicates that close() should + not delete any Tasks. This caused a memory leak as the Tasks in + the Tail and Head modules were not deleted. I have removed this + to fix the memory leak. + + Also added a destructor such that mb_last_ is released if it is + still around. + +Tue May 13 16:48:18 1997 James C Hu + + * ace/Process.cpp: Added implementations to new interfaces + to ACE_Process_Options::setenv (char *envp[]), and + ACE_Process_Options::command_line (char *argv[]). + + * apps/JAWS/server/HTTP_Response.cpp: Required changes so that CGI + processing will work with the new ACE_Process class. + + * apps/JAWS/stress_testing/benchd.cpp: Requried changes due to + changes in the ACE_Process interface. + +Tue May 13 15:22:01 1997 Tim H. Harrison + + * ace/Process_Manager.h: Changed ACE_Process_Manager::start to + ACE_Process_Manager::spawn. + + * ace/Process.cpp (spawn): The check for a null environment argv + was incorrect. Thanks to Nanbor for finding this. + +Mon May 12 18:59:39 1997 David L. Levine + + * ace/config-mvs.h: conditionally use ACE_HAS_UCONTEXT_T or + ACE_LACKS_UCONTEXT_H depending on __COMPILER_VER__. Thanks to + Chuck Gehr for this fix. + + * OS.h, OS.cpp (thr_create), Task.h, Thread.h, Thread_Manager.h: + use ACE_DEFAULT_THREAD_PRIORITY instead of -1, because -1 is a + valid priority on Win32. Thanks to Irfan for discovering this + problem with Priority_Task_Test. + + * ace/Thread_Manager.cpp (wait_grp,wait_task): changed type of loop + index "i" from size_t to int to avoid signed/unsigned comparison. + +Mon May 12 18:41:19 1997 Nanbor Wang + + * ace/config-freebsd-pthread.h: + * ace/config-freebsd.h: Added ACE_LACKS_RWLOCK_T to FreeBSD config + files. Thanks to Amancio Hasty for + noticing this. + +Mon May 12 17:11:50 1997 Tim H. Harrison + + * ace/Process.h: Changed ACE_Process::start to + ACE_Process::spawn. Added new argv-style methods for + ACE_Process::setenv and ACE_Process::command_line. These new + argv-style methods do not have implementations yet. + +Mon May 12 15:27:41 1997 Douglas C. Schmidt + + * ace/config-aix-4.[12].x.h: Added ACE_HAS_EXCEPTIONS to + the AIX 4.* config files. Thanks to Chris Lahey for this. + +Mon May 12 13:49:54 1997 + + * ace/Thread_Manager.cpp (wait): We have to make sure that while + we wait for these threads to exit, we do not have the + lock. Therefore we make a copy of all interesting entries and + let go of the lock. We then do the join(). + + * ace/Task.cpp (wait): Removed the extra locking in wait(). The + Thread Manager will handle this correctly. + + * ace/ACE.cpp (register_stdin_handler): Changed the options such + that the Thread Manager used for the adapter is passed along to + the method executed by the new thread. We can then notify the + thread manager when this adapter thread exits. + + * examples/ASX/Event_Server/Event_Server: Changed the way the + reference count was being kept on the context. Now, the + reference count starts with zero and every instance and every + active Task increments it. This works well as Task::close() is + called one from the module being deleted and from the active + thread going away. + +Mon May 12 11:11:51 1997 + + * ace/Process.*: Removed the old ACE_Process and replaced it with + what was ACE_ProcessEx. + + * ace/Process_Manager.{i,cpp}: Updated to use the new ACE_Process + API. + +Mon May 12 08:16:38 1997 David L. Levine + + * ace/config-freebsd*.h: added support for FreeBSD 2.1.7R. + Thanks to Satoshi Ueno for figuring + out the differences and to Nanbor Wang + for updating the config files. + +Sun May 11 17:36:59 1997 + + * tests/{Pipe_Test.cpp, Process_Mutex_Test.cpp, + Time_Service_Test.cpp, Token_Service_Test.cpp}: Updated these + files to use the new ACE_Process API. + +Sun May 11 14:40:51 1997 David L. Levine + + * ace/config-osf1-4.0.h: put back ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS. + + * ace/ACE_Process.cpp (ACE_Process_Options ctor): reordered + initializers to match declaration order. + +Sat May 10 19:44:28 1997 + + * Process.h: ACE_ProcessEx now works on Solaris and NT. There + have been some changes to the API. ACE_ProcessEx::cl_options + and ACE_ProcessEx::path have been combined into + ACE_ProcessEx::command_line. ACE_ProcessEx::command_line must + be used to specify path and command-line arguments. There is + also a second ACE_ProcessEx::setenv method that allows + applications to set environment variables in a "VAR=VALUE" + format. + +Sat May 10 10:51:11 1997 Douglas C. Schmidt + + * ace/config-osf1-3.2.h: Added three new flags to the config file + for OSF/1 3.2: + + #define ACE_LACKS_SETSCHED + #define ACE_LACKS_RWLOCK_T + #define ACE_LACKS_GETPGID + + Thanks to Tom Dobridge for reporting + this. + +Fri May 09 16:37:48 1997 David L. Levine + + * ace/config-osf1-4.0.h: added DEC_CXX. + + * ace/config-osf1-4.0-g++.h: removed commented-out + ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS. + + Thanks to Thilo Kielmann for + patches for the above two OSF config files. + + * ace/Sched_Params.cpp (priority_min): On Solaris (with STHREADS), + don't return priority of 0 because ::pthread_attr_setschedparam () + will refuse to use it (with EINVAL). So, bump priority of 0 up to 1. + + * tests/Priority_Task_Test.cpp: retry the task activation with + priority 0 if it fails with non-zero priority. This lets the + test run on platforms such as Linux that only let the superuser + set non-zero priority. + + * ace/ACE_Process.cpp (ACE_Process_Options ctor): reordered + initializers to match declaration order. + + * examples/Connection/non_blocking/test_lsock_acceptor.cpp: fixed + typo in template specializations: ACE_LSOCK_ACCEPTOR instead of + ACE_SOCK_LACCEPTOR. + +Fri May 9 13:07:20 1997 Douglas C. Schmidt + + * ace/UNIX_Addr: Changed the return values of all the set() + methods so that they conform to the signature used by the + INET_Addrs. + + * examples/Connection/non-blocking: Added two new test programs, + test_lsock_{connector,acceptor}.cpp that + + + * ace/LSOCK_Stream.cpp: Revised the get_remote_addr() method so + that it uses the underlying ACE_SOCK::get_remote_addr() method + rather than the get_local_addr() method. Hopefully, this will + fix an ACE bug with UNIX domain sockets. Thanks to Paul Han + for reporting the problem and the fix. + + * include/makeinclude/platform_aix4.2.GNU (LLIBS): Changed + + LLIBS = -lC_r -lC -lpthreads -lbsd -ltli_r -ldl -lc_r -lm -lc $(ACELIB) + + to + + LLIBS = -ltli_r -ldl $(ACELIB) + + MakeC++SharedLib_r includes all the other libs automatically in + the search. + + * apps/Gateway/Gateway/Proxy_Handler.h: Moved the handle_close() + method into the public section since the Connector now calls it. + + * ace/Containers.cpp: Updated all the operator= methods so + that they no longer try to return *this. Thanks to Chris Lahey + for reporting this. + + * ace/IOStream.h: Replaced __alpha with DIGITAL_UNIX && DEC_CXX. + Thanks to Thilo for reporting this. + + * build/gcc/tests/Simple_Message_Block_Test.cpp (main): Changed + the use of ACE_Mutex to ACE_SYNCH_MUTEX so that everything will + build correctly on non-MT platforms. + + * ace/Timer_{Heap,List}_T.cpp: To ensure backwards compatibility + with the old "int" return value of Timer_*::schedule() we must + cast the long value to int before returning it. Thanks to Thilo + Kielmann for reporting this. + + * ace/Acceptor.cpp, + ace/Connector.cpp: + If an active or passive connection times out and the Connector + or Acceptor calls the handle_timeout() method of the + Svc_Handler, we now keep track of whether the handle_timeout() + method returns -1. If so, we call handle_close() on the + Svc_Handler automatically. Thanks to Michael Hartman + for suggesting this. + + * tests/IOStream_Test.cpp: Fixed this test so that it runs on + non-MT platforms. + + * ace/Module.cpp: Changed the implementation of the close_i() + method so that it will wait for all active threads in a Task to + exit before deleting the task. + + * ace/Task: Added a wait() method on an ACE_Task that will use the + new ACE_Thread_Manager::wait_task() method to block until all + threads have shutdown in a Task. + + * ace/Thread_Manager: Finally implemented the wait_task() and + wait_grp() interfaces on ACE_Thread_Manager. + + * ace/SOCK_Dgram.cpp: Added a timed recv() operation. Thanks + to Hongbo Xu for contributing this. + + * ace/Timer_Queue_T.cpp: Added #include "ace/Synch.h" to keep the + DEC C++ compiler happy. Thanks to James CE Johnson + for this. + + * ace/Containers.i (size): Changed to so that this + compiles on the Alpha. Thanks to James CE Johnson + for this. + + * ace/IOStream.h: Include the std_macros header on the Alpha. + Thanks to James CE Johnson for this. + + * include/makeinclude/platform_osf1_4.0.GNU (SOBUILD): Removed + -lACE from the link line. Thanks to James CE Johnson + for this. + + * tests/Timer_Queue_Test.cpp: Changed all the int timer ids to + long so that the test will work on DEC ALPHAs. Thanks to Thilo + Kielmann for reporting this. + + * ace/Process: Fixed a number of compile problems for UNIX. + + * ace/Process.h: Changed the methods named stdin/stdout/stderr to + std_in/std_out/std_err to avoid name clashes with the standard C + library. + + * ace/OS: Changed the use of ACE_Unbounded_Set to + ACE_Unbounded_Stack in order to get the appropriate semantics + for TSS cleanup on NT. + + * ace/Containers: Enhanced the ACE_Unbounded_Stack class so + that it supports insert()/remove()/find() methods. These + rather unorthodox methods are useful for implementing the + TSS semantics required by OS.cpp. + + * ace/Containers: Revised all the interfaces for the various + containers so that they all have the same "look and feel." + +Fri May 9 00:00:21 1997 James C Hu + + * apps/JAWS/server/HTTP_Request.{h,cpp}: Added a uritopath + translation method, so that CGI location can be computed as it + is searched. Added methods to access the parsed headers. + + * apps/JAWS/server/HTTP_Response.{h,cpp}: Flushed out the + implementation of cgi_response () method. If all goes well, it + should be able to execute a CGI program. I don't set the IO + handles to point at the socket handle yet. + + * apps/JAWS/server/README: Updated description of JAWS behavior. + +Thu May 8 18:04:14 1997 Irfan Pyarali + + * ace/Containers: Made the return values of Container methods + more consistant with other components of ACE (i.e., 0 for + success, -1 for failure). + + * ace/Containers (ACE_Unbounded_Stack::delete_all_nodes): + Fixed subtle bug in delete_all_nodes. + + * ace/OS.cpp (ACE_TSS_Cleanup::exit): Changed because of + return value changes in ACE containers. + + * Containers: Added size methods to stack containers and + consolidated friendship between ACE_Unbounded_Stack_Iterator and + ACE_Unbounded_Stack + + * tests/Message_Block_Test.cpp: I was incorrect about each data + block having its own lock. Since *many* data blocks can share + the same lock, for the case of message block chains, we would + like to optimize locking. + + Therefore, the first guy in the chain grabs the lock and passes + it to the continuation chain. When each guy in the chain gets + it, it compares the passed lock to its own locking strategy. If + it is the same lock, no need to acquire the lock again. If our + lock is different, then we do our own locking. + + * tests/Simple_Message_Block_Test.cpp: This test program is a + torture test that illustrates how ACE_Message_Block reference + counting works, how and when locks are used, how memory is + managed, and how continuation chains of message blocks are + made. Ideally used with purify :-) + + * tests: Added new test. Following changed: + Makefile run_tests.bat run_tests.sh tests.mak tests.mdp + +Thu May 8 18:04:14 1997 James C Hu + + * include/makeinclude/platform_irix6.2_sgic++.GNU: Moved SGI C++ + options out of CPPFLAGS into CCFLAGS so that gcc won't emit + diagnostics during a make depend. + +Thu May 8 11:52:41 1997 Chris Cleeland + + * ace/{Task,Thread}.h: Added documentation describing + thread priority determination to methods where priority + is an [optional] argument. Note that if you want to inspect + the REAL documentation, you should look at the code for + ACE_OS::thr_create(). But that's convoluted and touchy. + + * ace/Strategies_T.h (ACE_Cached_Connection_Strategy): Added + documentation for this class. + +Thu May 08 00:10:00 1997 + + * ace/Process.*: This is the first pass at the new ACE_Process + class. It is now called ACE_ProcessEx. When it is completely + ported to Solaris, we'll replace the current ACE_Process with + ACE_ProcessEx. + + * examples/OS/Process/process.cpp: Added some examples for the + new ACE_ProcessEx. + +Wed May 07 21:58:29 1997 + + * ace/Message_Block.h: ACE_Data_Block calling delete on the + ACE_Message_Block was incorrect. This was a hack to simplify + the locking issues! However this optimization leaded to + incorrect code. Therefore I have taken this behavior out. The + new implementation will lock and unlock multiple times in the + case when there are message_blocks in the continuation field, + all of which point to same data block. However, this is a + strange case that can be optimized later. For now correct code + is more important. + + Also, the continuation message blocks are only deleted in the + release() method and not in the destructor. This will ensure + that if message blocks of the stack are chained together, we + will not call release on message blocks of the stack. + + Also note that release() should only be called on message blocks + that have been dynamically allocated. Message blocks of the + stack will clean up properly when the activation record of the + method completes. Dynamically allocated messages blocks should + *never* be chained with message blocks allocated of the stack. + + * examples/ASX/Event_Server/Event_Server/Peer_Router.h: Removed + empty definitions of assignment operator and copy constructor. + + * examples/ASX/Event_Server/Event_Server/event_server.cpp + (handle_input): Added code here will make sure we actually wait + for the user to type something. On platforms like Win32, + handle_input() is called prematurely (even when there is no + data). + + * examples/ASX/Event_Server/Event_Server/Peer_Router.cpp: Changed + a log message. + +Wed May 7 22:55:00 1997 James C Hu + + * JAWS/server/*: Debugging changes! GET and HEAD both work + now. As well as changes to make it compile cleanly on + VXWORKS, as reported by David. + +Wed May 07 16:05:39 1997 David L. Levine + + * ace/Makefile: added Timer_Wheel to FILES. Thanks to Thilo + Kielmann for reporting this. + + * include/makeinclude/platform_irix6.2_sgic++.GNU: enabled CPPFLAGS + to instantiate all templates so that gatewayd will build. + Thanks to Nathan N. Vuong for reporting + this problem and Eric Dean Russell + for supplying and the fix. + + * ace/Map_Manager.h: updated comments to indicate that find + functions return a non-negative integer if the item is found. + + * ace/Map_Manager.cpp (find_i (const EXT_ID &, INT_ID &)): return + index instead of 0 if the item is found, to be consistent with + find_i (const EXT_ID &). + + * ace/IOStream.cpp (ACE_Streambuf_T ctor): added initializations of + eback_saved_ and pbase_saved_ to avoid unitialized memory read + reports from Purify. + +Tue May 6 07:39:25 1997 Douglas C. Schmidt + + * ace/Service_Config.cpp (open): Make sure to perform the + daemonization logic first so that we get a new process created + before initializing reactors, etc. Thanks to Adrian Salt + for reporting this. + + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-poll.cpp (main): + Changed ACE::INVALID_HANDLE to ACE_INVALID_HANDLE. + Thanks to Dani Flexer for + reporting this. + + * tests/Conn_Test.cpp (compare_i): Changed the comparison from + a1 == a2 to a1 != a2 since this appears to be what is needed. + We need to improve the comments here! + + * tests/Conn_Test.cpp: Split the definition of the Svc_Handler + template into its own Conn_Test.h file to work around "features" + with AIX C++. Thanks to Chris Lahey for reporting this. + + * ace/Containers.cpp: Fixed a bug in the set() method for + ACE_Unbounded_Queue. Again, thank goodness for cs242! + + * ace/Containers.cpp: Fixed a bug in the enqueue_head() logic for + ACE_Unbounded_Queue. Thank goodness for cs242 ;-). + + * ace/Containers.cpp: Added a destructor for ACE_Node to keep the + compilers happy. + +Tue May 06 11:31:49 1997 David L. Levine + + * netsvcs/lib/*.cpp: removed break statements after + ACE_RETURNs to avoid unreachable statement warnings from + GHS. + + * ace/OS.cpp (mktime): added time_t cast of -1 (error) return + to avoid compiler warning. + + * ace/config-vxworks-ghs-1.8.h: added ACE_LACKS_SIGNED_CHAR. + + * ace/Containers.cpp (dequeue_head): fixed typos in variable names. + + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp: + removed #ifdef ACE_HAS_TLI around some template specializations so + that this subproject will build on platforms non-TLI platforms such + as Linux. + +Tue May 6 17:02:54 1997 James C Hu + + * ace/OS.{h,i}: Added strftime (). Also, enhanced strcasecmp + implementation to account for lexicographical ordering for + mismatches. + + * apps/JAWS/server/Parse_Headers.{h,cpp} (class Headers_Map): + Changed signature of casting operator to return a pointer + rather than a reference to a constant pointer, to fix + anachronism warning Doug found. + + * apps/JAWS/server/HTTP_Config.{h,cpp}: Added class + HTTP_Config to be a container for HTTP server options + such as locations of directories, port, etc. + + * apps/JAWS/server/HTTP_Helpers.{h,cpp}: Added code to enhance + support for CGI scripts: + - Added HTTP_decode_string to HTTP_Helper class, to deal + with percent codes. + + * apps/JAWS/server/HTTP_Request.{h,cpp}: Added code to enhance + support for CGI scripts: + - Added cgi_, cgi_env_, and cgi_args_ data members to + and corresponding accessors. + - Added nice accessors to the important data members to + simplify other parts of the code. + - Added method to parse URI to determine the name of the CGI + executable if present. + + * apps/JAWS/server/HTTP_Response.{h,cpp}: Added code to + enhance support for CGI scripts: + - Hooks are now present to make the appropriate calls + to activate a CGI program. + + * apps/JAWS/server/*.{h,cpp} + Various changes from the ACE mailing list incorporated. + Cosmetic changes for ACE coding style. + + SGI fixes. + +Tue May 6 00:00:54 1997 Chris Cleeland + + * ace/Message_Block.cpp: Added template specialization for + ACE_Guard<> that prevented ACE from compiling under Linux. + +Mon May 5 22:17:15 1997 Sumedh Mungee + + * apps/JAWS/stress_testing: Removed the usleep definition from + global.h, it was unused by the program. + +Mon May 05 21:01:42 1997 David L. Levine + + * ace/config-linux*.h: added ACE_HAS_STRING_CLASS. Thanks to + Luis Lopes for reporting this. + +Mon May 05 19:58:16 1997 + + * ace/ace.{mak,mdp}: Readded IOStream.cpp to the makefile. + + * ace/Synch_T.h: Added ACE_SYNCH_RECURSIVE_MUTEX. + + * ace/Timer_Queue: Added an extra template parameter to + Timer_Queues that specifies the type of locking to be used + inside of the timer queue. + + Also changed the functor callback routines so that they are more + descriptive compared to operator (). + +Mon May 5 21:37:01 1997 Douglas C. Schmidt + + * ace/Message_Block: Revised the release() logic for + ACE_Message_Block and ACE_Data_Block so that we will delete both + within the same block of code in order to hold the lock. This + should prevent nasty race conditions in multi-threaded programs. + Thanks to Craig Perras for + reporting this problem. + + * ace/Message_Block.cpp: Replaced an explicit acquire()/release() + of ACE_Lock::locking_strategy_ with a call to an ACE_Guard. + + * ace/Containers.cpp (set): Optimized for the common case where + we're increasing the size of the set by 1. + + * ace/Containers: Merged the ACE_Set_Node, ACE_Stack_Node, and + ACE_Set_Node into a single "ACE_Node" class. This tidies up the + code quite a bit. + + * ace: Removed the Set.* and Stack.* files and replaced them with + the Containers.* files. This file contains the ACE_*Stack, + ACE_*Queue, and ACE_*Set classes. If this revised file scheme + breaks existing code please let me know and I'll provide + backwards compatibility. + + * ace/Stack: Changed the name of ACE_Unbounded_Queue::enqueue() to + ACE_Unbounded_Queue::enqueue_tail() and also added + ACE_Unbounded_Queue::enqueue_head(). + + * ace/OS: Changed the names of the parameters of the ACE_OS::mem* + methods from ACE_OS::mem* (void *s, const void *t) to + ACE_OS::mem* (void *t, const void *s) since "t" should stand for + "target" and "s" for "source." Thanks to Andres Kruse + for pointing this out. + + * ace/Stack: Removed the peek() method from ACE_Unbounded_Queue. + This functionality is now subsumed by the get(..., 0) method. + If this breaks any existing code please let me know. + + * ace/Stack.h: Moved all the functionality from ACE_Unbounded_Set + into ACE_Unbounded_Queue. That's really where this belonged in + the first place. Thanks to David Levine for noticing this. + + * ace/Set.h: Moved ACE_Set_Node from the *.cpp file into the *.cpp + file in anticipation of AIX C++ compiler bugs ;-). + + * examples/ASX/Event_Server/Transceiver/transceiver.cpp: + Rearranged the location where we register to receive standard + input so that the socket handle will not be initialized at this + point. Thanks to craig perras for + reporting this. + + * examples/ASX/Event_Server/Transceiver/transceiver.cpp + (Event_Transceiver): Make sure to #ifdef around SIGQUIT for + WIN32 since it lacks this signal. Thanks to craig perras + for reporting this. + + * ace/config-osf1-4.0-g++.h: Removed the ACE_LACKS_SIGNED_CHAR + since this seems to be compiler specific. Thanks to Thilo for + this insight. + + * ace/Strategies_T: Added a number of fixes and enhancements to + the new Hash_Addr and ACE_Cached_Connect_Strategy classes. + + * ace/Strategies_T.h: Added #include for "Hash_Map_Manager.h". + Thanks to Amos Shapira for reporting this. + + * ace/config-hpux-10.*.h: Applied a number of patches courtesy of + Carlos O'Ryan. + + * ace/Dump.cpp: Changed a cast from + + delete (ACE_Dumpable_Ptr *) this->dumper_; + + to + + delete (ACE_Dumpable *) this->dumper_; + + This fixes a potential bug. Thanks to Carlos O'Ryan for this + bug report. + + * ace/DEV_IO.h, + * ace/SPIPE_Stream.h: Removed the = 0 default value for one send() + method to avoid ambiguity with the other send() method. Thanks + to Carlos O'Ryan for this bug report. + + * ace/Map_Manager.cpp (advance): Removed a cast to size_t since + that is always true. Thanks to David Levine for pointing this + out. + + * ace/XtReactor: Moved the remove_handler_i() and + register_handler_i() methods into the protected portion + of the class. Since these should never be called by the + client I've moved them into protected portion to ensure this + is the case. + + * ace/XtReactor: Changed the implementation of the XtReactor to + use long for dealing with timers. Thanks to Stuart Powell + for reporting this. + +Mon May 5 17:16:41 1997 Carlos O'Ryan + + * ace/config-hpux-10.x.h, config-hpux-10.x-nothread.h: + Some patches are needed to compile ACE under HP-UX (using HP/C++), + I documented those patches. + +Mon May 05 11:50:39 1997 David L. Levine + + * netsvcs/lib/Server_Logging_Handler.cpp: fixed ACE_Svc_Handler + specializations, yet again, for Linux w/LXPthreads. Thanks to + Luis Lopes for reporting this + problem with sufficient detail for us to track it down. + + * ace/Stack.* (ACE_Unbounded_Queue): + + 1) made peek () const. + 2) added another peek (u_int index = 0) function that can peek + at any queue item, not just the first. It returns a pointer + to the item (or 0 if not found), to avoid copying. + 3) changed return type of size () from int to size_t. + 4) inlined size (). + + * ace/Strategies_T.cpp (connect_svc_handler, operator==): + added return type. + + * netsvcs/lib/Server_Logging_Handler.cpp: fixed template + specializations for platforms that have neither THREADS nor + TLI. Thanks to Nanbor Wang for reporting this. + +Sun May 4 12:34:09 1997 Douglas C. Schmidt + + * ace/OS.cpp: If ACE_HAS_THREADS isn't defined then we'll just + use mktime() without the locking. + + * ace/Set: Removed the get() methods from the ACE_Fixed_Set and + ACE_Bounded_Set since they don't make much sense on these + abstractions. + + * ace/Set: Changed the new "find" method to be called "get" to + correspond to the new "set" method I'm adding. + + * ace/SString.cpp: Added a operator << for ACE_CString in + order to print it with iostreams. + + * ace/Set.cpp: Added a reset method to the ACE_Unbounded_Set to + remove all the nodes without completely destroying the set. + + * ace/SString: Added friend operator+ to both ACE_CString and + ACE_WString in order to provide a concatenation operator. + + * ace/SString: Added a compare() method to all the ACE String + classes. This behaves just like the Standard C library strcmp() + function. + + * ace/Message_Queue.i: Oddly, there were a bunch of methods + defined in this *.i file that didn't have ACE_INLINE in front of + them. I'm surprised this didn't give compile errors on some + platforms. I've fixed this by moving these methods into the + *.cpp file. + + * ace/Stream, + ace/Service_Repository, + ace/Reactor, + ace/Message_Queue, + ace/Map_Manager, + ace/Malloc_T, + ace/Hash_Map_Manager, + ace/Set: Added a done() method on all the iterators so that + we can check within the iteration itself to see if there are any + remaining elements. In addition, updated the return value of + advance() on all iterators so that it returns 1 if we're not + done and 0 if we're done. + +Sun May 04 07:22:49 1997 David L. Levine + + * ace/Timer_Heap_T.cpp: changed some more int declarations to longs. + +Sat May 3 17:38:19 1997 Douglas C. Schmidt + + * Changed all uses of Reactor::{scheduler_timer,cancel}() and + Timer_{Queue,List,Heap,Wheel}::{schedule,cancel}() to use + long rather than int. This is important since it ensures that + we can make the Timing Wheels trick of casting the + Timer_Node * to long work correctly on machines that have 64 + bit pointers, 64 bit longs, and 32 bit ints (e.g,. DEC + ALPHA). Thanks to Thilo Kielmann + for pointing this out, + even though he finds this solution distasteful ;-). + + * netsvcs/lib/TS_Clerk_Handler.cpp (initiate_connection): I + believe there was also a bug here -- if schedule_timer() returns + 0 that's not an error! + + * apps/Gateway/Gateway/Proxy_Handler_Connector.cpp + (initiate_connection): I believe there was a bug here -- if + schedule_timer() returns 0 that's not an error! + + * tests/IOStream_Test.cpp: Added some minor changes for DEC UNIX. + Thanks to James CE Johnson for reporting + this. + + * ace/IOStream: Added a number of minor changes for DEC UNIX. + Thanks to James CE Johnson for reporting + this. + + * ace/config-osf1-4.0.h: Added + ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS to the config.h file. + Thanks to James CE Johnson for reporting + this. + + * ace/SString: Made the ace_string_null_string_ a static data + member rather than an external constant. This should control + the name space a bit better. + + * ace/SString.cpp: Fixed the ACE_CString::operator += so that it + won't screw up if this->rep_ initially points to the + ACE_String_null_string_. + + * examples/Misc: Added a new test_set.cpp program that exercises + the ACE_*_Set classes. + +Sat May 03 06:56:10 1997 David L. Levine + + * ace/Map_Manager.cpp (dtor): removed void return (typo). + + * ace/Set.cpp (ACE_Fixed_Set::operator =): typo: fs instead of bs. + + * ace/Set.cpp (ACE_Fixed_Set::find): typo: index instead of i. + + * ace/IOStream.cpp: fixed typo: "#if defined" instead of just "#if". + + * tests/Conn_Test.cpp, + netsvcs/lib/{Client_Logging_Handler,TS_Clerk_Handler}.cpp, + netsvcs/clients/Tokens/manual/manual.cpp, + apps/Gateway/Gateway/Event_Channel.cpp,: + apps/JAWS/client/Blob.cpp, + examples/ASX/Event_Server/Event_Server/Peer_Router.cpp, + examples/ASX/Event_Server/Transceiver/transceiver.cpp, + examples/ASX/UPIPE_Event_Server/{Consumer,Supplier}_Router.cpp, + examples/Connection/misc/test_upipe.cpp, + examples/Connection/non_blocking/test_*_connector.cpp: added + ACE_Map_Entry template specialization. It's needed now that the + destructor is explicit. + +Fri May 2 14:57:56 1997 Douglas C. Schmidt + + * ace/Map_Manager.cpp: Added a no-op destructor to ACE_Map_Entry + just to keep some compilers happy. Thanks to Chuck Gehr for + reporting this. + + * ace/config-osf1-4.0.h: Added + + #define ACE_LACKS_IOSTREAM_FX + #define ACE_LACKS_LINEBUFFERED_STREAMBUF + #define ACE_LACKS_SIGNED_CHAR + + Thanks to James CE Johnson for reporting + this. + + * ace/Timer_{Wheel,Heap,List}_T.h: Fixed a typo in all these + classes that was failing to put the keyword "class" after + "friend." Also, replaced the use of the typedef with the + expanded name of the class to work around problems with DEC + C++. Thanks to James CE Johnson for + reporting this. + + * ace/Set: Added a find() method that will return the "ith" + element in the set. + + * ace/Set: Added copy constructors and assignment operators to all + the ACE_*_Set classes. + + * ace/Set.cpp: Changed the implementation of ACE_Unbounded_Set to + use a dummy node and a circular list. This improves performance + and also makes it possible to implement "queue" semantics for + inserting at the tail of the set. + + * ace/config-osf1-4.0.h: Added the ACE_HAS_STRING_CLASS macro. + Thanks to James CE Johnson for this. + + * ace/IOStream: Added the ACE_HAS_STRING_CLASS macro to + replace the nasty #ifdefs we had previously. Thanks to + James CE Johnson for this. + + * ace/config*.g++: Added ACE_HAS_STRING_CLASS for all the GNU + compilers and Win32. + + * ace/config-mvs.h: Added a new version that contains support for + IBM OS/390 r2. Thanks to Chuck Gehr for this. + +Fri May 02 08:14:30 1997 David L. Levine + + * examples/ASX/Event_Server/Transceiver/transceiver.cpp: removed + specializations of ACE Guards because they're in libGateway. + Thanks to Joey Zhu for reporting this problem. + + * examples/ASX/Event_Server/Transceiver/{Makefile,transceiver.cpp}: + added template specializations to transceiver.cpp so that it no + longer needs to be linked with libGateway. + + * examples/ASX/Event_Server/Event_Server/{Makefile,Peer_Router.cpp}: + added template specialization to Peer_Router.cpp so that event_server + no longer needs to be linked with libGateway. + + Thanks to Joey Zhu for reporting the above + link problems. + + * apps/Gateway/Peer/{Makefile,Peer.cpp}: added template + specialization to Peer.cpp so that peerd no longer needs to + be linked with libGateway. + + * Log_Msg.cpp (VxWorks only): fixed used of ::taskDeleteHookAdd (it + should only be called once for all Log_Msg instances) and added call + to ::taskDeleteHookDelete to clean up when the last task exits. + Thanks to Dave Mayerhoefer for + reporting this. + + * tests/Conn_Test.cpp: changed some fprintf print specifiers to avoid + g++ warnings about printing pointer values. + +Thu May 01 00:05:59 1997 + + * tests/Time_Service_Test.cpp (main): Made sure that the backing + store is not there at the start of the program. We need to make + sure because this test kills the Time Clerk and on some + platforms the Clerk is not allowed to do a graceful shutdown. By + cleaning the backing store here, we are sure that we get a fresh + start and no garbage data from a possible aborted run. + + The old code deleting the backing store at the end of the test + is still there but does not work on Win32 as unlink fails with + ERROR_ACCESS_DENIED. I am not sure why this is happening! For + now the unlink at the start of the program will do. + + Also added a wait for the clerk before deleting the backing + store. This way we are sure that we do not delete the backing + store before the clerk is done with it. + + * netsvcs/lib/TS_Clerk_Handler.cpp: Fixed an obscure bug with + ACE_TS_Clerk_Processor. ACE_TS_Clerk_Processor (which is an + ACE_Connector) and all its pending connection objects are still + registered with the Reactor when the process exits and the + Service_Object is deleted. After this the destructor of the + Reactor then calls handle_close on ACE_TS_Clerk_Processor + (which does not exist anymore), causing a seg fault. The + solution is to call ACE_Connector::fini from + ACE_TS_Clerk_Processor::fini. ACE_Connector::fini will + unregister ACE_TS_Clerk_Processor and all pending connects from + the Reactor. + +Wed Apr 30 17:47:11 1997 Douglas C. Schmidt + + * ace/OS.i (getpwnam_r): Changed the expression to check if + getpwnam_r() returns -1 for AIX. Thanks to Chris Lahey for + this. + + * ace/Timer_Wheel_T.h: changed + + // = Don't allow these operations for now. + ACE_Timer_Wheel_T (const ACE_Timer_Wheel_T &); + void operator= (const ACE_Timer_Wheel_T &); + + to: + + // = Don't allow these operations for now. + ACE_Timer_Wheel_T (const ACE_Timer_Wheel_T &); + void operator= (const ACE_Timer_Wheel_T &); + + Thanks to Chuck Gehr for reporting this. + + * ace/OS.cpp: Made mktime() thread-safe. If any platforms support + multi-thread safe versions of mktime() please let me know so we + can set the ACE_HAS_MT_SAFE_MKTIME macro for that config file. + + * ace/OS.i: Added a new special case for getpwnam_r() on AIX. + Thanks to Chris Lahey for reporting this. + +Wed Apr 30 16:01:04 1997 James C Hu + + * ace/OS.i, ace/OS.h: added mktime(). + +Wed Apr 30 14:17:34 1997 David L. Levine + + * ace/config-vxworks*.h: added ACE_LACKS_PWD_FUNCTIONS. Thanks + to Dave Mayerhoefer for reporting + this. + + * ace/OS.i: cleaned up ACE_LACKS_PWD_FUNCTIONS comments a bit. + + * ace/Array.{h,i}: added const operator []. + + * ace/Array.cpp (ctors): reordered initializers to match declaration + order. + + * netsvcs/lib/Server_Logging_Handler.cpp: protect against multiple + inclusion. Thanks to Kevin Martindale + for reporting this problem. + +Wed Apr 30 08:42:55 1997 Douglas C. Schmidt + + * ace: Added a new generic Array class, which we'll use until + STL becomes more widely portable. + + * ace: Added a new macro ACE_LACKS_GETPGID to clean up the code + in ACE_OS::getpgid(). + + * ace: Added new config*.h files and platform*.GNU files for + FreeBSD. Thanks to Nanbor Wang for these. + +Wed Apr 30 07:44:36 1997 David L. Levine + + * ace/config-osf1-4.0*.h: removed ACE_HAS_SIGWAIT. + + * ace/OS.{h,i}: applied Thilo's patch for sigwait on Digital + Unix 4.0, which defines sigwait as a macro. Thanks to + Thilo Kielmann for + this and the above config file patches. + + * ace/IOStream.{h,cpp}: James CE Johnson updated + the IOStream class; see comments in IOStream.h. + + * examples/Logger/client/logging_app.cpp (main), + performance-tests/Misc/test_naming.cpp (*): replaced sprintf + with ACE_OS::sprintf. Thanks to Thilo Kielmann + for reporting these. + +Tue Apr 29 20:03:38 1997 + + * apps/JAWS/stress_testing/http_tester.cpp : Removed usage + of pow (), and changed method of calculating throughput/latency + to use straight multiplication instead of pow (). Updated + Makefile to not link -lm. + +Tue Apr 29 19:57:52 1997 + + * config-win32-common.h (ACE_HAS_TEMPLATE_SPECIALIZATION): Win32 + supports this option. Added to config file. + + * ace: Removed tracing for the following to make things work with + tracing on: + + ACE::timestamp + ACE_FIFO_Send_Msg::send + ACE_SPIPE_Stream::send + ACE_Sig_Guard::ACE_Sig_Guard + ACE_Sig_Guard::~ACE_Sig_Guard + + * netsvcs/servers/main.cpp (main): Added special code for Win32 + such that only SIGINT is being registered with the Signal + Handler. SIGQUIT is not supported on Win32. + + * netsvcs/lib/Token_Handler.cpp (init): Removed the registration + of the Acceptor for SIGINTs. + + * netsvcs/lib/TS_Server_Handler.cpp (init): Same as above. + + * netsvcs/lib/Client_Logging_Handler.cpp (open): Removed the + registration of SIGPIPE for Win32. Win32 does not support + SIGPIPE. + + * tests/Process_Strategy_Test.cpp (server): The new thread must + become owner before it can call Reactor::handle_events. Also + fixed #define typo. + + * ace/OS.cpp (socket_fini): Remove the ACE error message as the IO + Stream objects are already gone by this point in the program. + + * examples/Registry/Registry.mak: Replaced the old makefiles with + this one. Also added _AFXDLL as a preprocessor define, forcing + the correct inclusion of header files that give a consistent + definition of HKEY. This is a hack till we have a better + solution. + + * ace/Event_Handler: Removed the old Proactor callback methods. + +Tue Apr 29 17:39:40 1997 Douglas C. Schmidt + + * ace/config-mvs.h: Added #define ACE_LACKS_LINEBUFFERED_STREAMBUF + for MVS. Thanks to Chuck Gehr for + reporting this. + + * ace: Commented out ACE_TRACE calls in constructors in + several ACE classes in order to avoid problems with circular + initialization dependencies related to mutexes that are + breaking code on WinNT when ACE_NTRACE is set to 0. Thanks + to Lothar Hermann for + reporting these. + + * ace/Reactor.cpp: It looks as if Windows NT isn't returning + the number of bytes requested by a WinSock recv() used in + the ACE_Reactor::notify() in some situations. This is + causing problems for test programs under heavy load. The + fix appears to be to add an additional ACE::recv() to obtain + the remaining bytes. Thanks to Karlheinz for reporting this + and to Irfan for helping to fix it. + + * ace/OS.i: Fixed a very subtle bug with ACE_OS::cond_wait() and + ACE_OS::cond_signal() that only manifests itself when + ACE_HAS_SIGNAL_OBJECT_AND_WAIT is enabled (which isn't the + default). The problem stemmed from the fact that we were + assuming that if we used condition variables it implied that the + external mutex had USYNC_PROCESS scope. In fact, the external + mutexes typically have USYNC_THREAD scope, so + SignalObjectAndWait() was hanging indefinitely. Fortunately, + the fix was easy -- just add a run-time check for the type of + the external mutex and take the appropriate action. Thanks to + Irfan for noticing this. + + * tests/Reader_Writer_Test.cpp: Added a parse_args() function that + allows us to override the default number of reader/writer + threads + the number of iterations. + + * ace/OS: Added patches for Digital UNIX to handle the + getpwnam_r() name. Thanks to Thilo Kielmann + for these patches. + +Tue Apr 29 14:27:19 1997 + + * OS.h: Added ACE_HAS_SVC_DLL. If you write a library and + want it to use ACE_Svc_Export, this will cause those macros + to build dlls. If you want your ACE service to be a static + library, comment out this line. As far as I know, the only + reason to have a library be an ACE "service" is to leverage + the ACE_Svc_Export macros. It's just as easy to define your + own export macros. + +Tue Apr 29 07:25:25 1997 David L. Levine + + * apps/JAWS/server/HTTP_Request.h (HTTP_Request): added destructor + declaration. + + * apps/JAWS/server/Parse_Headers.cpp (parse_header_line): assign local + "value" to value_ field of map_[header]. + + * apps/JAWS/server/HTTP_Request.cpp (HTTP_fix_path): commented this + static function out because it's not used, and g++ warns about that. + + * apps/JAWS: added CVS header to all .h, .i, and .cpp files. + +Tue Apr 29 00:33:46 1997 + + * examples/Reactor/Misc/notification.cpp: Add this test to the + Win32 makefile. + + * ace: Removed config-win32-msvc2.0.h, config-win32-msvc4.0.h + config-win32-msvc4.x.h, and config-winnt-4.0-msvc.h from the + repository. These files have been replaced by config-win32.h + and config-win32-common.h. + + * IOStream_Test.cpp (main): Added return 0 at the end of main(). + + * examples/Reactor/Proactor/test_proactor.mak: Added wsock32.lib + to the link line. I am not sure why we have to do this again + since ace.lib already includes it. Without this library in the + link line, GetAcceptExSockaddr is not defined. Go figure! + + * apps/JAWS/server/jaws.mak: Same as above. + + * ace/ace.{mak,mdp}: Fixed the generation of the release version + of ace.dll such that wsock32.lib is automatically included. + +Tue Apr 29 00:16:27 1997 James C Hu + + * JAWS: Changes to support CGI scripts + + Changed the following files -- + HTTP_Handler.cpp HTTP_Handler.h HTTP_Helpers.cpp + HTTP_Helpers.h HTTP_Request.cpp HTTP_Request.h IO.cpp IO.h + + Added the following files -- + HTTP_Response.cpp HTTP_Response.h Parse_Headers.cpp + Parse_Headers.h + + Removed the file -- + JXH_String.h + + * JAWS/stress_testing: Changed the Makefile to link in the math + library (-lm). + + * ace/OS.h and ace/OS.i: Added support for memmove(). + +Mon Apr 28 21:35:35 1997 Douglas C. Schmidt + + * ace/IOStream.h: Added a new macro called + ACE_LACKS_IOSTREAM_SETGET, which works around bugs with SGI C++ + on IRIX 6.2. Thanks to Torbjorn Lindgren for + reporting this. + + * ace/Timer_List_T.h: Replaced the use of + ITERATOR with ACE_Timer_Queue_Iterator_T to + work around problems with SGI C++. Thanks to + Torbjorn Lindgren for reporting this. + + * ace/Timer_List_T.cpp: Removed the use of NODE * and replaced it + with ACE_Timer_Node_T in order to work around + bugs with certain C++ compilers (i.e., SGI). Thanks to Torbjorn + Lindgren for reporting this. + + * tests/Conn_Test.cpp: Removed some extraneous template + specializations. Thanks to Nanbor Wang for + reporting these. + + * apps/JAWS/client/Blob.cpp: Rearranged some of the template + specializations in the hope of fixing a linker problem with + SunC++ 4.2. + + * ace/config-irix-6.2*.h. It appears that SGI IRIX 6.2 supports + pread() and pwrite() so I enabled the ACE_HAS_P_READ_WRITE macro + in the IRIX 6.2 config file. + + * ace/OS.cpp: Implemented ACE_OS::pread() and ACE_OS::pwrite() for + systems that lack this feature. The implementation uses the new + ACE_Thread_Mutex monitor lock in order to ensure atomicity + between the lseek() and the read()/write(). + + * ace/OS.cpp: Finally broke down and added a ACE_Thread_Mutex + monitor lock to the ACE_OS implementation file. This is useful + for situations where we need to serialize certain ACE_OS + emulation calls (e.g., ACE_OS::{pwrite,pread}). + +Mon Apr 28 15:42:48 1997 David L. Levine + + * apps/JAWS/client/blobby.cpp: updated template specializations. + + * apps/JAWS/stress_testing/global.h: removed #includes of system + headers because ace/OS.h takes care of them. They were causing + warnings with g++ (because they were #included before OS.h). + + * examples/ASX/UPIPE_Event_Server/Supplier_Router.cpp: fixed + typos in template specializations. + + * tests/Conn_Test.cpp,Message_{Block,Queue}_Test.cpp, + Process_Strategy_Test.cpp: fixed template specializations + for platforms without threads. Thanks to Nanbor Wang + for pointing out this problem. + + * ace/Connector.h: use ACE_SYNCH_RW_MUTEX in Map typedefs + instead of old ACE_RW_Mutex (which should have been + ACE_Thread_RW_Mutex) and ACE_Null_Mutex (depending on + whether the platform has threads). + + * ace/Service_Record.cpp: added ACE_NULL_SYNCH template + specializations with threads, because they're still needed even + with threads. This way, individual programs don't have to + specialize these. + + * ace/Task.cpp: added ACE_TSS and + ACE_TSS template specializations, if the platform + has threads and TSS. This way, individual programs don't have + to specialize them. + + * apps/Gateway/Gateway/Event_Channel.cpp, + Proxy_Handler{,_Connector}.cpp,apps/JAWS/server/HTTP_Server.cpp, + examples/ASX/Event_Server/Transceiver/transceiver.cpp, + examples/ASX/UPIPE_Event_Server/Consumer_Router.cpp, + examples/Connection/blocking/SPIPE-connector.cpp, + examples/Connection/misc/{Connection_Handler,test_upipe}.cpp, + examples/Connection/non_blocking/test_*.cpp, + examples/IOStream/server/iostream_server.cpp, + examples/Logger/Acceptor-server/server_loggerd.cpp, + examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp, + netsvcs/lib/Client_Logging_Handler.cpp, + netsvcs/lib/TS_{Clerk,Server}_Handler.cpp: + removed template instantiations that are now in + ace/Service_Record.cpp and ace/Task.cpp. This should help + on platforms without threads. + + * examples/ASX/UPIPE_Event_Server/Supplier_Router.cpp: fixed + typos in template specializations. + + * examples/ASX/Event_Server/Event_Server/Peer_Router.cpp: protected + the ACE_*Guard template instantiations with #ifdef ACE_HAS_THREADS. + + * examples/ASX/Event_Server/Transceiver/transceiver.cpp: protected + the ACE_*Guard template instantiations with #ifdef ACE_HAS_THREADS. + + * apps/JAWS/stress_testing/benchd.cpp (serve): added return -1 if + the strcmp () fails so that the function always returns a value. + +Mon Apr 28 18:53:58 1997 Darrell Brunsch + + * ace/OS.h: Added ACE_DEFAULT_TIMER_WHEEL_SIZE and + ACE_DEFAULT_TIMER_WHEEL_RESOLUTION constants. + + * ace/Timer_Wheel_T.h: switched to use these constants + + * tests/Timer_Queue_Test.cpp: switched to use these constants + + * ace/Timer_Wheel: added a new strategy for Timer Queues, one + based on a hash table of ordered lists. + + These files were added: + + - ace/Timer_Wheel.h + - ace/Timer_Wheel_T.h + - ace/Timer_Wheel_T.cpp + + These files were also changed to accomodate Timer Wheel + + - ace/Timer_Queue.cpp + - ace/Timer_Queue_T.h + - ace/Timer_Queue_T.cpp + - tests/Timer_Queue_Test.cpp + +Mon Apr 28 17:32:04 1997 Chris Cleeland + + * examples/ASX/Event_Server/Event_Server/Peer_Router.cpp: Added + template specializations. + + * examples/ASX/Event_Server/Transceiver/transceiver.cpp: Added + template specializations. + + * ace/OS.cpp (thr_create): Hopefully resolved tension + btw. priority determination algorithms for IRIX, LinuxThreads, and + DEC UNIX 4.0. Thanks to Thilo for information that lead to this. + +Mon Apr 28 00:25:17 1997 + + * apps/JAWS/client: Removed ACE_Export macro from class + declarations. Fixed buffer size bug in + ACE_Blob_Reader::receive_reply (). + +Sun Apr 27 22:22:14 1997 + + * ace/Proactor: The Proactor can now be registered with ReactorEx + and both of them can be run from ReactorEx's event loop. Added a + flag to Proactor's constructor that indicates whether the + Proactor will be used in conjunction with ReactorEx event + loop. Only if this flag is set will the event in the Proactor be + used by the Asynch IO components. This will help with + performance. + + * examples/Reactor/Proactor/test_multiple_loops.cpp: Added a new + test that shows the integration of the event loops of Proactor + and ReactorEx. + + * ace/Asynch_IO: Added an ACE_EVENT parameter to the constructors + of classes that inherit from the OVERLAPPED structure. This way + the Proactor's event_ can be set in the OVERLAPPED structure. + + Also changed the open methods on the Asynch IO classes to take a + Proactor as an extra parameter. + + Changed ACE_Handler's handle_timeout() to handle_time_out() in + ACE_Handler. This is temporary till we decide on the argument + about mixing the interface of ACE_Event_Handler and + ACE_Handler. This change allows user to inherit from ACE_Handler + and ACE_Event_Handler and use the different handle_timeout() + method, one of which returns void and the other return an int. + + * examples/Reactor/Proactor/test_timeout.cpp: This file got + affected by the above change. + +Sun Apr 27 17:44:28 1997 Douglas C. Schmidt + + * ace/OS.h: Added a new #define called ACE_DEFAULT_HTTP_SERVER_PORT. + Naturally, this defaults to 80... + + * apps/JAWS/client/blobby.cpp: Cleaned up the blobby example so + that it conforms more closely to the ACE style guide. + + * examples/IPC_SAP/SOCK_SAP/CPP-in{server,client}.cpp: Took out + the VxWorks-specific #ifdefs. I believe this is fixed in ACE_OS + now. If not, the burden of proof is on the VxWorks testers to + prove me wrong ;-). + + * ace/Synch_T.h: Added a new macro ACE_SYNCH_RW_MUTEX to + complement the existing ACE_SYNCH_MUTEX and ACE_SYNCH_CONDITION + macros. This will clean up lots of code in various test + programs. + + * ace/Synch_T.h: Added two new macros, ACE_SYNCH_MUTEX and + ACE_SYNCH_CONDITION. These default to ACE_MT_SYNCH::MUTEX and + ACE_MT_SYNCH::MUTEX if template typedefs are supported and + ACE_HAS_THREADS is enabled. If template typedefs *aren't* + supported but ACE_HAS_THREADS is enabled these macros turn into + ACE_Thread_Mutex and ACE_Thread_Condition. Finally, if + ACE_HAS_THREADS is disabled these macros turn into + ACE_Null_Mutex and ACE_Null_Condition. These macros make it + possible to write code that is more portable across platforms + and configurations. Thanks to Carlos O'Ryan for this + suggestion. + + * ace/OS.h: Replaced all uses of ACE_SYNCH_MUTEX and + ACE_SYNCH_CONDITION with ACE_SYNCH_MUTEX_T and + ACE_SYNCH_CONDITION_T since (1) this usage relates to templates + and (2) it frees up the namespace for the new ACE_SYNCH_MUTEX + and ACE_SYNCH_CONDITION macros. + + * ace/Timer_Queue.cpp: Added yet more template specializations for + the benefit of GCC (ugh). + + * ace/Timer_Wheel_T.cpp: Had to revise things just a bit to + compile with GCC and it's lame template mechanism. This + required changing NODE * to ACE_Timer_Node_T * in + several method definitions. + + * apps/JAWS/server/HTTP_Server.h: Changed the use of ACE_WIN32 to + ACE_HAS_THREAD_SAFE_ACCEPT since this is a more precise way to + determine if the platform allows multiple threads to call + accept() on the same port. If other platforms support this + feature please make sure to add it to their config*.h files. + + * ace/config-win32-common.h: Defined ACE_HAS_THREAD_SAFE_ACCEPT, + since Win32 allows multiple threads to call accept() on the same + port. + + * examples/ASX/UPIPE_Event_Server/Supplier_Router.cpp: The mutex + should be ACE_RW_Mutex, not ACE_Null_Mutex... + +Sun Apr 27 18:13:24 1997 Irfan Pyarali + + * ace/Proactor.h: Added Timer_Wheel support. + +Sun Apr 27 18:13:24 1997 Sumedh Mungee + + * apps/JAWS/client: Removed blobby.h, and replaced it with + blobby_options.{h,cpp}. + + * apps/JAWS/stress-testing: Removed unused argument warnings + etc. + +Sun Apr 27 07:41:44 1997 David L. Levine + + * ace/Timer_Queue.cpp: added #includes for template specializations, + and removed some unused specializations. + + * ace/Timer_Wheel_T.cpp: added newline at end of file. + + * ace/Timer_Wheel_T.cpp (ACE_Timer_Wheel_T ctor): reordered + initializers to match declaration order. + + * ace/Log_Msg.cpp (log): added support for indenting output according + to the current nesting level by adding a new format specifier, I, + which indents the output according to the current trace_depth_. + If a width is also specified it is taken as multiplier (so that + the indentation is n*trace_depth_). Thanks to Matthias Kerkhoff + for providing the code for this feature! + + * examples/Reactor/Misc/test_timer_queue.cpp: fixed typos in + #includes, and added #include of ace/Timer_Heap.h. + +Sat Apr 26 17:19:56 1997 Irfan Pyarali + + * ace/Timer_Queue.cpp: The correct Timer_Queue.cpp file was not + checked in. Also the necessary #include was missing. + + * ace/Proactor.h: Proactor need all three Timer include files. + + * ace/ace.{mdp,mak}: Updated for changes to Timer files. + + * ace: Updated the following files to include /**/ before an + include file directive: OS.h, config-win32-common.h, + bstring.h. Thanks to Matthias Kerkhoff + for reporting this. + +Sat Apr 26 13:41:15 1997 Douglas C. Schmidt + + * ace/config-sco-5.0.0-mit-pthread.h: Added + ACE_LACKS_PTHREAD_CANCEL. Thanks to Arturo Montes + for reporting this. + + * ace: Came up with a scheme that allowed us to remove the + ace/Timers.{h,i,cpp} files by adding + ACE_Timer_{Queue,Heap,List}_T.{h,i,cpp} files instead. Thus, no + existing code should break. + +Fri Apr 25 17:17:06 1997 Chris Cleeland + + * ace/OS.cpp (thr_create): Fixed the fix from Thilo so that it + compiled properly on Linux. Hopefully I didn't break his, and I + should have detected the problem earlier. Mea culpa. + +Fri Apr 25 12:45:23 1997 Douglas C. Schmidt + + * ace/OS.h: Added a new macro called ACE_HAS_SIG_MACROS for the + case where the frigging OS defines things like sigismember and + sigfillset as macros (ugh). + + * ace/FILE_IO.h: Removed a trailing default initializer from the + send() method since it was ambiguous. Thanks to Carlos O'Ryan + for reporting this bug. + + * ace/OS.i (select): Unfortunately the (operator timeval*) defined + for ACE_Time_Value was not used in ACE_OS::select (int width, + fd_set *rfds, fd_set *wfds, fd_set *efds, const ACE_Time_Value + *timeout) because the operator cannot be applied for a + ACE_Time_Value*. Therefore, I fixed this as follows: + + ACE_SOCKCALL_RETURN (::select (width, + (ACE_FD_SET_TYPE *) rfds, + (ACE_FD_SET_TYPE *) wfds, + (ACE_FD_SET_TYPE *) efds, + timeout == 0 ? 0 : (timeval *) *timeout) , int, -1); + + Thanks to Carlos O'Ryan for reporting this bug. + + * ace: Applied a slew of patches from Carlos O'Ryan in order to + get ACE to compile on HP/UX 10.x with the aCC compiler. + + * ace/Shared_Memory_MM: Export the filename in + ACE_Shared_Memory_MM class in order to aid debugging. Thanks to + Ashish Singhai for reporting + this. + +Fri Apr 25 14:58:38 1997 Irfan Pyarali + + * ace/Timers: Updated the following files to make it compile on + g++. The following files were updated: + + Proactor.cpp Timer_Heap.cpp Timer_List.cpp Timer_Queue.cpp + Timers.cpp + +Thu Apr 24 21:13:51 1997 + + * ace/Timer_Queue: Decoupled the Timer Queue from + ACE_Event_Handler and the callback routines in the handler + (handle_timeout and handle_close). The new Timer Queue is + parameterized by the type of data to store and a FUNCTOR on + which methods are invoked by the Timer Queue when timeouts and + cancellations occur. + + No changes occured to the algorithms of the different + implementations of the Timer Queues (Timer List and Timer + Heap). Timer Queues, Timer List, and Timer Heap were all renamed + as _T. However, typedef were added such that there is now + an ACE_Timer_Queue, ACE_Timer_Heap, and ACE_Timer_List, each + being an instantiation of the respective template classes. The + instantiation is done with ACE_Event_Handler as the type of data + to be stored in Timer Queue and + ACE_Event_Handler_Handle_Timeout_Upcall as the FUNCTOR that does + the appropriate upcall to ACE_Event_Handler. + + Due to these typedefs, 99.9% of existing code should not + break. However, the following two will cause problems: + + (a) Forward declarations of Timer_Queue will not work! This is + because Timer_Queue is now a typedef and not a class. + + (b) #include "ace/Timer_Queue.h" will not be enough to get the + ACE_Timer_Queue typedef. The new typedefs are in a new file + called Timers.h. This file also has typedefs for ACE_Timer_Heap + and ACE_Timer_List. + + Currently Proactor is the only class that uses a different + instantiation of the Timer Queue class. Proactor's Timer Queue + class is instantiated with ACE_Handler as the type of data to be + stored in Timer Queue and ACE_Proactor_Handle_Timeout_Upcall as + the FUNCTOR that does the appropriate posting to the Proactor's + completion port. + + The Upcall Strategy is not needed any more cause it is replaced + by the FUNCTORs. Thus this is removed. + + Small modifications were made to the following files + because of the changes to Timer_Queue. + + - examples/Reactor/Misc/test_timer_queue.cpp + - examples/Reactor/Proactor/test_timeout.cpp + - tests/Timer_Queue_Test.cpp + - ace/Makefile (both UNIX and Win32) + - ace/Connector.h + - ace/Reactor.h + - ace/ReactorEx.h + - ace/Proactor.h + + * ace/Proactor: Proactor now uses the new timer queues. Proactor's + Timer Queue class is instantiated with ACE_Handler as the type + of data to be stored in Timer Queue and + ACE_Proactor_Handle_Timeout_Upcall as the FUNCTOR that does the + appropriate posting to the Proactor's completion port. This will + help reduce the overhead of creating new act for each + timer. This also enables the cancellation of entire + ACE_Handlers. + + * examples/Reactor/Misc: Added Win32 makefiles. + + * ace/Shared_Memory_MM.i: Fixed typo. + + * ace/SOCK_Connector.cpp: Fixed typo. + +Thu Apr 24 13:56:28 1997 Douglas C. Schmidt + + * ace/SOCK_Dgram.cpp: Added support for FreeBSD (i.e., BSD 4.4) + features for passing file descriptors between processes. Thanks + to Nanbor Wang for reporting this. + + * ace/LSOCK_Stream.cpp: Added support for FreeBSD (i.e., BSD 4.4) + features for passing file descriptors between processes. Thanks + to Nanbor Wang for reporting this. + + * ace/LSOCK.cpp: Added support for FreeBSD (i.e., BSD 4.4) + features for passing file descriptors between processes. Thanks + to Nanbor Wang for reporting this. + + * ace/SOCK_Connector.cpp (complete): There's a bug in WinNT that + causes non-blocking connects to fail. The workaround is to + sleep for 1 millisecond. Thanks to Steve Huston + for reporting this. + + * ace/Connector.cpp (handle_output): There's a bug in WinNT that + causes non-blocking connects to fail. The workaround is to + sleep for 1 millisecond. Thanks to Steve Huston + for reporting this. + + * tests/Conn_Test.cpp: Changed from operator != to operator == to + be consistent with what is required by the ACE_Hash_Map_Manager. + + * ace/Hash_Map_Manager: Factored out the equality comparison into + an equal() method in order to facilitate template + specialization. In addition, rather than using the != operator + we now default to using the operator== operator and negating the + result. This is consistent with the behavior of the + ACE_Map_Manager. + + * ace/Map_Manager: Factored out the equality comparison into an + equal() method in order to facilitate template specialization. + + * ace/OS.i: Added a new #ifdef called ACE_LACKS_PTHREAD_CANCEL. + I'm not sure which platforms should set this, but it fixes + a bug with ACE_OS::thr_cancel(). Thanks to Eric Dean + Russell for reporting this. + + * tests/Process_Strategy_Test.cpp (handle_input): We were + comparing EOF to a char, which gets complaints on platforms + where char is unsigned by default. I added a cast of EOF to + char to fix this. Thanks to Amos Shapira for + reporting this. + + * apps/JAWS/server/HTTP_Helpers.cpp (instance): Changed the + return type from const char * to const char **. Thanks to + Amos Shapira for reporting this. + + * ace/OS.i (getpwnam_r): Added a missing #else. Thanks to + Amos Shapira for reporting this. + + * ace/Timer_Heap: Made many minor enhancements to ACE_Timer_Heap + in an effort to figure out why we're getting memory leaks. + +Thu Apr 24 09:33:53 1997 David L. Levine + + * Makefile: modified the TIMESTAMP macro to update the third + component, if there is one, of the version number in the VERSION + file. This assumes that alpha/beta releases are numbered with + three components, and that final releases are not. So, if the + version number is, e.g., 4.2, it will not be modified because it + is assumed to be for a final release. Manual switching between + alpha/beta and final release "modes" is therefore still required. + + * ace/Timer_Heap.cpp (copy): added cast of max_size_ to int to avoid + signed/unsigned comparison. + + * ace/config-sunos5.4-g++.h: removed + ACE_HAS_CONSISTENT_SIGNAL_PROTOTYPES because it caused compile + warnings about conversion from `(int)' to `(...)' at Signal.i:113. + (And the other sunos5.4 config files don't have it.) + Thanks to Joey Zhu for reporting this. + + * tests/Timer_Queue_Test.cpp (main): added delete of timer_ids array + to avoid memory leak. + +Wed Apr 23 22:56:57 1997 Sumedh Mungee + + * apps/JAWS/client/*: Fixed warnings due to size_t + * apps/JAWS/client/Blob_Handler: Fixed error by passing + pointer to base class ACE_Blob_Handler instead + of pointing to ACE_Blob_Reader, in call to connect + +Wed Apr 23 20:57:35 1997 James C Hu + + * ace/OS.i and ace/OS.h: added methods for getpwnam and + getpwnam_r, with hooks for NT. + + * ace/config-irix6.2.*: added ACE_LACKS_PWD_REENTRANT_FUNCTIONS. + +Wed Apr 23 14:27:48 1997 David L. Levine + + * ace/Timer_Queue.cpp (ACE_Timer_Queue ctor): reordered initializers + to match declaration order. + + * tests/Process_Strategy_Test.cpp: added ACE_Singleton template + specialization. In function client (), null terminated "buf" + before call to ACE_OS::strrchr () to avoid uninitialized memory + read. Also, fixed typo in test name (argument to ACE_START_TEST). + + * examples/Service_Configurator/Misc/Timer_Service.cpp (init): changed + type of loop index to int to avoid signed/unsigned comparison, and + initialized "interval" so that it has a value even if one isn't + specified on the command line. + +Wed Apr 23 10:52:45 1997 Chris Cleeland + + * ace/OS.cpp (thr_create): Removed errant preprocessor conditional + for determining the scheduling priority. Thanks to Thilo Kielmann + for reporting this. + +Wed Apr 23 09:06:52 1997 Douglas C. Schmidt + + * tests/Process_Strategy_Test.cpp: Finished updating this program + so that it is an automated test. + + * ace/Acceptor.h: Moved get_handle() into the public portion of + the Acceptor. + + * include/makeinclude/platform_irix6.2_sgic++.GNU (SOBUILD): There + was an extra @ in $@@. Thanks to Amos Shapira + for reporting this. + + * apps/JAWS/client/Blob[_Handler].cpp: Added casts for free ((void + *) filename_);. Thanks to Amos Shapira for + reporting this. + + * apps/JAWS/server/HTTP_Helpers.h (class HTTP_Status_Code): + Removed an extraneous const * from the definition of instance(). + Thanks to Amos Shapira for reporting this. + +Wed Apr 23 03:15:11 1997 James C Hu + + * apps/JAWS/server/README: Updated to add some clarity and more + useful information. + +Tue Apr 22 20:17:00 1997 Douglas C. Schmidt + + * ace/Synch.cpp: Added a new method called open() to ACE_File_Lock + so that we don't have to initialize it solely in the + constructor. + + * tests/Process_Strategy_Test.cpp: Added new test code that + exercises the ACE_Process_Strategy, ACE_Thread_Strategy, and + ACE_Reactive_Strategy classes. + + * ace/Strategies_T: Added a new class called + ACE_Reactive_Strategy, which inherits from + ACE_Concurrency_Strategy and registers new Svc_Handlers with the + Reactor. + + * ace/Strategies_T.cpp (ACE_Thread_Strategy): Added a check for + failed open() methods and call ACE_ERROR. + + * tests/Map_Manager_Test.cpp: Added a template specialization for + the ACE_Hash_Map_Manager::hash() method, which is enabled if the + compiler supports template specializations. + + * ace/Hash_Map_Manager.h (pool): Moved the ext_id.hash() call into + a separate method so that we can perform template specialization + of it more easily. + + * ace/README: Added a new #define called + ACE_HAS_TEMPLATE_SPECIALIZATION so that we can work around funky + compilers that don't support this advanced template feature. + + * ace: Added Nanbor Wang's port to FreeBSD. The port is done + at FreeBSD 3.0-current as of 2/9/97, which is the + latest stable system before Lite2 merge. Since the merge is + current under testing and changes are introduced in a daily + basis, I don't recommend using -current after the date. You + can specified the date in your "supfile", run CVSup to get the entire + source tree and do a 'make world' to update (or reverse) your + system. + + Pthread library is provided by John Birrell. There is a + bug fix at mid April so you may want to CVSup the latest libc_r + library and re-make the pthreaded library. + + A shared library must be name as lib.so. (e.g. libACE.4.1.0). I would recommend adding a + post-compile hook in the Makefile so we FreeBSDers can + rename the shared library to it's proper name with correct + major and minor version number attached. (which is a trick + BSD library makefiles use.) + + * examples/OS/Process/process.cpp (main): Replaced the use of + "/bin/cat" with "cat" since we are now using execvp(). Thanks + to Nanbor Wang for reporting this. + + * ace/Process.cpp (start): Changed the use of execv() to execvp() + in order to avoid having to pass in the full pathname. + + * ace/OS.i (sigwait): Added an #ifdef for FreeBSD so that we + return ACE_NOTSUP_RETURN(-1) for ACE_OS::sigwait(). Thanks to + Nanbor Wang for reporting this. + +Tue Apr 22 17:46:30 1997 + + * Process.cpp (start): We must pass in 0 instead of "" to + CreateProcess for the current working directory. + +Tue Apr 22 01:38:14 1997 + + * ace/Timer_Queue: Added ACE_Upcall_Strategy as a parameter to the + constructor. will call upcall> if + is not 0. Else it will call + on the . Thus ACE_Upcall_Strategy becomes a + vehicle for extending the behavior of ACE_Timer_Queue wrt the + upcall (callback) *without subclassing*. Hence, it's an example + of the Bridge/Strategy patterns. + + This also affected ACE_Timer_List and ACE_Timer_Heap + + * ace/Strategies: Added ACE_Upcall_Strategy. + + * ace/Proactor: Added timing support to the calls. + + * ace/Asynch_IO: ACE_Handler now supports handle_timeout. + + * ace/Proactor: Added timer support for the new Proactor. This + new scheme allows any of the threads in the "thread pool" + waiting on the completion port of the Proactor to execute the + callback routine of the handler. + + The implementation included adding ACE_Proactor_Timer_Handler + class that has a thread that will wait on the earliest time in a + timer queue and an event. When a timer expires, the thread will + post a completion event on the port and go back to waiting on + the timer queue and event. If the event is signaled, the thread + will refresh the time it is currently waiting on (in case the + earliest time has changed). + + The ACE_Proactor::Asynch_Timer class is posted to the completion + port when a timer expires. When the method of this + object is called, the 's handle_timeout method will be + called. + + * examples/Reactor/Proactor/test_timeout: This example illustrates + the new timer features in the Proactor + + * examples/Reactor/Proactor/test_proactor.{mdp,mak}: Added new + example. + +Mon Apr 21 18:14:32 1997 Irfan Pyarali + + * ace/config-win32-common.h: Added checks around _AFXDLL before + defining it. Thanks to Bruce Meyer for + pointing this out. + +Mon Apr 21 11:31:16 1997 Chris Cleeland + + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp: + Removed some unnecessary explicit template instantiations. + + * examples/Threads/barrier1.cpp (main): Explicitly converted + n_threads to int. + +Sun Apr 20 23:08:37 1997 Irfan Pyarali + + * ace/{Local,Remote}_Tokens.h: Added a private declarations of the + copy constructor and assignment operator for classes that + inherit from ACE_TSS. This is necessary since the compiler will + auto generate these two operations that will end up using the + non-existent copy constructor and assignment operator from the + TSS class and cause linker errors. + +Sun Apr 20 20:47:34 1997 Sumedh Mungee + + * apps/JAWS/client: Reworked the ACE_Blob* classes to work + with the new Connector behavior. Added README for this + directory. Added comments. + + * apps/JAWS/stress-testing: Added README file + +Sun Apr 20 13:11:25 1997 Douglas C. Schmidt + + * apps/Makefile: By default, we now compile JAWS along with the + rest of ACE. I've also added some README files that explain + what JAWS is all about. + + * examples/Service_Configurator/Misc/Timer_Service: Improved the + Timer_Service test so that it makes more sense and is better + documented. + +Sat Apr 19 11:56:35 1997 Douglas C. Schmidt + + * include/makeinclude: Removed the platform_irix6.2_sgiCC.GNU + from the release. Thanks to Torbjorn Lindgren + for these fixes. + + * include/makeinclude/platform_irix6.2_sgic++.GNU: Updated the SGI + C++ platform config file. Thanks to Torbjorn Lindgren + for these fixes. + + * ace/Log_Msg.cpp (log_hexdump): The char * arguments should be + const char *'s. Thanks to Matthias Kerkhoff + for reporting this. + +Sat Apr 19 18:52:44 1997 David L. Levine + + * (format_hexdump): changed type of first arg to const char * + for compatibility with Log_Msg::log_hexdump (). + +Thu Apr 17 08:25:06 1997 Douglas C. Schmidt + + * ace/Memory_Pool.h: Fixed a couple of typos in Memory_Pool + classes. Thanks to Neil B. Cohen for reporting + this. + + * netsvcs/lib/Name_Handler.h: Arrgh, there was still one more + missing #include that I forgot to move into the *.h file. + Thanks to David Levine for noticing this. + + * ace/Synch.cpp (wait): There was a bug in + ACE_Condition::wait(MUTEX& mutex, const ACE_Time_Value + *abstime.) Basically when abstime is zero, it ignores the + parameter "mutex" that has been passed to it and instead goes on + to call "ACE_Condition::wait()" which uses "this->mutex_" + as the mutex to be released and not the mutex that the caller + has given. The fix is to change the call "this->wait()" in the + if-clause to: + + return ACE_OS::cond_wait (&this->cond_, &mutex_.lock_); + + Thanks to Ashish Singhai for reporting + this. + +Thu Apr 17 16:33:21 1997 David L. Levine + + * ace/Memory_Pool.cpp: fixed typos in ACE_MMAP_Memory_Pool_Options + constructor declaration and initializer list. In init_acquire, + added cast of minimum_bytes_ to size_t to avoid signed/unsigned + comparison. + + * include/makeinclude/{platform*,wrapper_macros}.GNU: + moved -g out of wrapper_macros.GNU and into each platform + file so that -gstabs can be used on SCO. Thanks to + Ganesh Pai for reporting that problem. + + (The real change was getting rid of the CFLAGS += DCFLAGS + default. We could have left DCFLAGS=-g in wrapper_macros.GNU + and overridden for SCO. But the way I changed things, the + C/CFLAGS pieces are together in each platform file, so they're + easier to find.) + +Wed Apr 16 17:05:55 1997 Douglas C. Schmidt + + * ace/Memory_Pool.cpp (acquire): Added code to enable a minimum + bytes field with the Shared_Memory_Pool. Thanks to Fred LaBar + for these enhancements. + + * tests/Process_Strategy_Test.cpp: Only compile this test if + ACE_LACKS_EXEC is *not* defined since ACE_Process_Strategy + requires fork(). Thanks to Irfan for pointing this out! + + * netsvcs/lib: Fixed a couple o' typos that had escaped detection + last night. Thanks to David Levine for reporting this. + + * ace/Synch[_T].h: removed the use of {} rather than ; for + the private copy constructors and assignment operators. + Hopefully this won't break code on older C++ compilers. Thanks + to Berni Merkle for suggesting this. + + * Added a whole slew of minor fixes for unused variables in + the tests and examples. Thanks to Torbjorn Lindgren + for reporing these. + + * ace/Handle_Set.cpp (ACE_Handle_Set_Iterator): The order of + the clause + + this->handles_.mask_.fds_bits[this->index_] == 0 + && this->num_ < ACE_Handle_Set::MAXSIZE + + was backwards. It should be: + + this->index_ < ACE_Handle_Set::NUM_WORDS + && this->handles_.mask_.fds_bits[this->index_] == 0 + + Thanks to Michael Newton for + reporting this. + +Wed Apr 16 21:34:53 1997 David L. Levine + + * tests/Process_Strategy_Test.cpp: added template specializations. + +Wed Apr 16 15:46:58 1997 + + * tests/Process_Strategy_Test: Added test to batch files and + MSVC++ Makefiles. + + * tests/Process_Strategy_Test.cpp (open): Added UNICODE support. + + * ace/OS.h: Added SIGCHLD to Win32 section. + + * ace/config-win32-common.h: UNICODE should not be automatically + defined if ACE_HAS_UNICODE is defined. ACE_HAS_UNICODE signifies + that the OS has UNICODE support. It does not mean that your code + must be UNICODE. UNICODE must be defined at the project level. + +Wed Apr 16 16:55:47 1997 David L. Levine + + * ace/SString.{h,cpp}: Modified CString to not allocate 1 byte for + a 0 length string. Instead, set the internal representation to + the address of static class character null_string_. + +Wed Apr 16 11:47:35 1997 Chris Cleeland + + * ace/Map_Manager.cpp (free_search_structure): Added the loop + variable back in that must have been inadvertently deleted in the + previous entry. + +Wed Apr 16 09:35:39 1997 David L. Levine + + * ace/Map_Manager.cpp (free_search_structure): changed type of + loop index to size_t to avoid signed/unsigned mismatch. + +Wed Apr 16 04:07:50 1997 Douglas C. Schmidt + + * ace/Strategies_T: Widened the constructor interface for + ACE_Process_Strategy based on the feedback I got from + implementing the Process_Strategy_Test.cpp program. + + * tests/Process_Strategy_Test.cpp: Added an interesting new test + that illustrates the use of the ACE_Process_Strategy and the + ACE_File_Lock. To exercise this program, you can telnet to it + and type "read" and "inc" to query and change the count of + the numbers in the file, respectively. + + * ace/Connector.cpp (create_AST): I fixed a couple of things + in Connector.cpp: + + - In create_AST, it needs to save and restore errno, else it + gets wiped on Win32 and other platforms. + + - On Win32 when a non-blocking connect completes and handle_output is + called, it tries to get the peer address. If done too quickly, it + fails. I put in a Sleep(0) call. I think this is not a great + solution, but I don't have a better one yet. + + Thanks to Steve Huston for fixing + these bugs. + +Tue Apr 15 17:09:33 1997 Douglas C. Schmidt + + * ace/SOCK_Stream.cpp (close): Removed the call to close_writer() + on UNIX since that doesn't do the correct thing in many + cases since it causes a protocol transmission which isn't + what we want if we're using fork(). + + * ace/Strategies_T.cpp (activate_svc_handler): Added a call to + svc_handler->destroy() in the parent since we don't need it and + we're leaking descriptors and memory otherwise... Thanks to + Kevin Boyle for reporting this. + + * ace/OS.i (thr_sigsetmask): Replaced the use of + PTHREADS_1003_DOT_1C with ACE_HAS_PTHREAD_SIGMASK. Thanks to + Arturo Montes for suggesting this. + + * ace: Changed all uses of ACE_HAS_PTHREADS_XAVIER to + ACE_HAS_PTHREAD_SIGMASK, which is more descriptive. Thanks to + Arturo Montes for suggesting this. + + * ace/config-aix-4.2.x.h: Added #define ACE_LACKS_RWLOCK_T to make + things compile with AIX 4.2. Thanks to Jeremy Buch + for reporting this. + + * ace/XtReactor.cpp (register_handler_i): Added "[]" to delete + this->ids_ since it is an array. Thanks to Jean-Marc Strauss + for reporting this. + + * netsvcs/lib: Moved all the class definitions into the *.h files + to avoid complaints from the IBM C++ compiler. + + * ace/OS.h: Added a #define for WNOHANG since this is missing on + NT. Thanks to Brian Mendel for reporting + this. + + * examples/Connection/non_blocking/test_sock_connector.cpp: Added + a typedef for ACE_RW_Mutex so that the code compiles on non-MT + platforms. Thanks to Ganesh Pai for + reporting this. + + * examples/Connection/non_blocking/test_tli_connector.cpp: Added a + typedef for ACE_RW_Mutex so that the code compiles on non-MT + platforms. Thanks to Ganesh Pai for + reporting this. + + * examples/Connection/misc/test_upipe.cpp: Added a typedef for + ACE_RW_Mutex so that the code compiles on non-MT platforms. + Thanks to Ganesh Pai for reporting this. + + * performance-tests/Synch-Benchmarks/Options.cpp: Added a #ifdef + for ACE_Thread_Mutex so that the code compiles on non-MT + platforms. Thanks to Ganesh Pai for + reporting this. + + * examples/ASX/Event_Server/Transceiver/transceiver.cpp: Added a + typedef for ACE_RW_Mutex so that the code compiles on non-MT + platforms. Thanks to Ganesh Pai for + reporting this. + + * examples/ASX/UPIPE_Event_Server/Consumer_Router.cpp: Added a + typedef for ACE_RW_Mutex so that the code compiles on non-MT + platforms. Thanks to Ganesh Pai for + reporting this. + + * examples/ASX/Event_Server/Event_Server/Options.cpp + (print_results): Although rusage struct is defined on SCO, there + is no getrusage(), rusage is used only by wait() + etc. internally. Therefore, we had to move some #ifdefs around. + Thanks to Ganesh Pai for reporting this. + + * apps/Gateway/Gateway/Proxy_Handler_Connector.cpp: Added a + typedef for ACE_RW_Mutex so that the code compiles on non-MT + platforms. Thanks to Ganesh Pai for + reporting this. + + * tests/Conn_Test.cpp: Added a typedef for ACE_RW_Mutex so that + the code compiles on non-MT platforms. Thanks to Ganesh Pai + for reporting this. + + * tests/SPIPE_Test.cpp (main): Removed the VXWORKS arm of the + #ifdef, which is not correct since this stuff only works if + we're working with a version of VxWorks that has STREAM pipes. + + * include/makeinclude/platform_sco5.0.0-nothread.GNU: Changed + + LIBS = -lsocket -lnsl -ldl + + to + + LIBS += -lsocket -lnsl -ldl + + Thanks to Ganesh Pai for reporting this. + + * netsvcs/lib/Client_Logging_Handler.cpp: Added a typedef for + ACE_RW_Mutex so that the code compiles on non-MT platforms. + Thanks to Ganesh Pai for reporting this. + + * netsvcs/lib/TS_Clerk_Handler.cpp: Added a typedef for + ACE_RW_Mutex so that the code compiles on non-MT platforms. + Thanks to Ganesh Pai for reporting this. + + * examples/ASX/Event_Server/Event_Server/Peer_Router.cpp: Added a + typedef for ACE_RW_Mutex so that the code compiles on non-MT + platforms. Thanks to Ganesh Pai for + reporting this. + +Tue Apr 15 23:16:43 1997 + + * ace/[Hash_]Map_Manager.cpp: The [Hash_]Map_Manager now + explicitly calls the destructors of Map_Entry objects before + freeing up the space. Not sure why we were not doing this + before... + +Tue Apr 15 17:09:33 1997 Irfan Pyarali + + * examples/Logger: Added MSVC++ makefile to Acceptor-server + and client. + +Tue Apr 15 21:51:45 1997 James C Hu + + * apps/JAWS/server/IO.cpp: Added a template instance for + ACE_Singleton so it would link using GCC. Removed GCC + warnings. + + * apps/JAWS/server/HTTP_Server.cpp: Added template instances for + LOCK_SOCK_Acceptor, ACE_Task, ACE_Thru_Task, ACE_Message_Queue, + ACE_Module so it would link using GCC. Removed GCC warnings. + + * apps/JAWS/server/HTTP_Server_T.cpp: Removed template instance of + LOCK_SOCK_Acceptor, since it was not really being compiled. + +Tue Apr 15 21:51:45 1997 James C Hu + + * apps/JAWS/server/IO.cpp: Added a template instance for + ACE_Singleton so it would link using GCC. Removed GCC + warnings. + + * apps/JAWS/server/HTTP_Server.cpp: Added template instances for + LOCK_SOCK_Acceptor, ACE_Task, ACE_Thru_Task, + ACE_Message_Queue, ACE_Module so it would link using GCC. + Removed GCC warnings. + + * apps/JAWS/server/HTTP_Server_T.cpp: Removed template + instance of LOCK_SOCK_Acceptor, since it was not really + being compiled. + + * apps/JAWS/server/HTTP_Handler.cpp: Removed GCC warnings. + +Tue Apr 15 13:01:13 1997 David L. Levine + + * ace/Token_Request_Reply.cpp (ctor): added initialization of + transfer_.data_ to avoid unitialized memory read. + + * tests/test_config.h: removed "static" qualifier from + randomize () to avoid warning from g++ when it's not called + in a test. + + * examples/IPC_SAP/SPIPE_SAP/server.cpp (main): moved + declaration of local variable "handle" up before its first + use. + +Tue Apr 15 17:09:33 1997 Irfan Pyarali + + * examples/Connection/blocking/Makefile: Removed the Makefile + for this test. This example is only suppose to work on WIN32 + and therefore the Makefile is not necessary. I have replace + this file with a MSVC++ make file. + +Mon Apr 14 23:08:27 1997 + + * INSTALL: Updated install files for Win32. + + * ace/SPIPE_Stream: Changed the use of ACE::send_n to ACE::write_n + and ACE::recv_n to ACE::read_n. + + * ace/OS.h (WNOHANG): Added WNOHANG to OS.h for Win32. + + * ace/OS.i (getpgid): Fixed extra return. + + * examples/Connection/blocking/SPIPE-acceptor: Updated the code to + use the new Proactor and the new asynchronous IO. + +Mon Apr 14 21:32:24 1997 David L. Levine + + * examples/IPC_SAP/SOCK_SAP/FD-unserver.cpp (handle_client): + ACE_OS::sprintf instead of sprintf. + + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp + (svc): declare "t" as time_t instead of long. + + Thanks to Thilo Kielmann for + reporting both of these. + +Mon Apr 14 00:02:39 1997 Douglas C. Schmidt + + * ace/OS.i (getpgid): Removed the extraneous return in front of + ACE_NOTSUP_RETURN. Thanks to Mike Bernat for + reporting this. + + * ace/Process.cpp: Replaced the use of ACE_OS::fork(void) with + ACE_OS::fork(const char *) so that we can pass in the name of + the process we're exec'ing. + + * examples/Threads/process_manager.cpp: Added a test program that + exercises the features of the new ACE_Process_Manager. + + * ace/Process_Manager: Finished a rudimentary implementation of + ACE_Process_Manager. There's still plenty of work to be done on + this, however... + + * ace/Thread_Manager.cpp (dump): Added dump() methods for + ACE_Thread_Descriptor and ACE_Thread_Manager. + +Sun Apr 13 11:40:26 1997 Douglas C. Schmidt + + * ace/OS: Added a getpgid() call to ACE_OS. + + * ace/Thread_Manager: Changed the 'int n' of spawn_n() to size_t n + since this is more appropriate because we can't spawn a negative + number of threads... + + * ace/Thread_Manager.cpp (close): Make sure to lock the calls to + close() in case things get amiss. + + * ace/Process.cpp (start): Updated ACE_Process::start() to that it + doesn't try to exec() a program if argv == 0. This allows us to + use ACE_Process to fork() a process without exec'ing. + + * tests/Timer_Queue_Test.cpp (randomize_array): Added a new + "randomization" test that determines the performance of randomly + canceling items in the array. Thanks to Darrell Brunsch + for this enhancement. + + * tests/test_config.h: Moved the randomize() function from + Naming_Test.cpp to test_config.h so that we can use it in other + tests (e.g., the new Timer_Queue_Test.cpp that Darrell is + working on). + + * ace/OS: Added a new #define called ACE_HAS_NONCONST_MSGSND which + can be used for platforms (e.g., SCO) that don't have a const + parameter for msgsend(). Thanks to Arturo Montes + for reporting this. + + * ace/config-sco-5.0.0-mit-pthread.h: Added some fixes to make + this work on SCO. Thanks to Arturo Montes + for reporting this. + + * ace/OS.i (cond_timedwait): There is a *small* chance for a + context switch before ACE_OS::cond_timedwait() is reached. In + this case, the current time *may* advance by some milliseconds. + The code in ACE_OS::cond_timedwait() then converts the given + absolute time to a relative time. In the described situation + this will be a very, very long t ime (0xfffffffn). Therefore, I + added a check to avoid the "negative timespan" case. Thanks to + Matthias Kerkhoff for suggesting this. + + * ace/Set: Moved all the size() methods out of the *.i file and + into the *.cpp file to avoid problems with quirky compilers + (e.g., SGI) that can't handle this. Thanks to Torbjorn Lindgren + for pointing this out. + + * examples/Threads/process_semaphore.cpp (main): Removed a stray + ^M that was causing the SGI C++ compiler some grief. Thanks to + Torbjorn Lindgren for pointing this out. + + * ace/OS.i (gettimeofday): Rearranged the code a bit to return + errors correctly if they occur (which should be *very* + unlikely). Thanks to Torbjorn Lindgren for + pointing this out. + + * netsvcs/lib/Server_Logging_Handler.cpp: Replaced the use of + ACE_TLI* with LOGGING_PEER*. Thanks to Tom Wright + for reporting this. + + * ace/Connector.cpp: Made sure to initialize all of the instance + variables for the ACE_Strategy_Connector and ACE_Connector. + Thanks to David Levine for pointing this out. + + * ace/Synch.h: Changed protected: to private: so that we can + ensure that we never copy classes like ACE_File_Lock, etc. + Thanks to Berni Merkle for reporting + this. + + * examples/Shared_Malloc/test_malloc.cpp (malloc_recurse): Added + the print_stats() call back into the test since Sandro's fixes + should now support this. + + * ace/Malloc[_T]: Added patches to enable ACE_Allocator's to print + malloc statistics. Thanks to Sandro Doro + for these fixes. + +Sat Apr 12 20:42:11 1997 David L. Levine + + * tests/Priority_Task_Test.cpp (open): only use THR_SCHED_FIFO + if it is defined. (It isn't on Solaris without PTHREADS.) + + * examples/ASX/Event_Server/Event_Server/Peer_Router.cpp + (make_svc_handler): added return statement. + +Sat Apr 12 11:53:49 1997 Douglas C. Schmidt + + * examples/ASX/Event_Server/Transceiver/transceiver.cpp (main): + The first argument to connect () is now a SVC_HANDLER *&. + Therefore, we can no longer allows us to pass the address of a + SVC_HANDLER on the stack (or in the data segment). + Fortunately, the fix is easy, as shown below: + + Event_Transceiver transceiver, *tp = &transceiver; + + connector.connect (tp, ACE_INET_Addr (port_number, host_name)); + + Thanks to David Levine for reporting this problem. + +Fri Apr 11 15:14:59 1997 David L. Levine + + * tests/Conn_Test.cpp: moved declaration of "result" out of + loop because it's used after the loop. Thanks to + Thilo Kielmann for + reporting this. Also, removed a few unnecessary template + specializations. + + * apps/Gateway/Gateway/Proxy_Handler_Connector.cpp: fixed template + specializations for no-thread platforms. Thanks to Ganesh Pai + for reporting this. + + * performance-tests/Misc/context_switch_time.cpp (main): + removed call to ACE_High_Res_Timer::supported (). + +Fri Apr 11 14:31:42 1997 Chris Cleeland + + * tests/Conn_Test.cpp: Added several explicit template + instantiations. + +Fri Apr 11 13:49:04 1997 David L. Levine + + * ace/OS.h: VxWorks changes only: added taskHookLib.h. Thanks + to Dave Mayerhoefer for reporting + that. Also rearranged the VxWorks #includes and such a bit. + + * ace/Log_Msg.cpp (atexit): VxWorks changes only: added cast + of spare1 to ACE_Log_Msg *. Thanks to Dave Mayerhoefer + for reporting that. Also, + in exists () and instance (), replaced double indirection + of the ACE_Log_Msg instance with indirection through a pointer + reference. + + * ace/High_Res_Timer.{h,i}: removed supported () because + ACE_OS::gettimeofday () is used if a high-res timer isn't available. + + * ace/OS.i (thr_sigsetmask),config-sunos5.4-*.h: swapped order of + #ifdefs to that ACE_LACKS_PTHREAD_THR_SIGSETMASK is checked before + ACE_HAS_STHREADS. Added that #define to all SunOS 5.4 configs. + Thanks to Joey Zhu for reporting this. + + * ace/Token_Request_Reply.cpp (ctor): added a initializations to 0 + of requeue_position_, notify_, and arg_. With this change, all + of the ACE tests run without any Purify access anomalies! + (There are still some memory leaks, though.) + + * include/makeinclude/rules.local.GNU: added -DMAKEDEPEND to + invocation of g++dep. This allows users to get proper + dependencies if they have conditional #includes in their code. + They can added #if defined (MAKEDEPEND) as necessary to make + sure that all headers are seen by g++dep. + +Fri Apr 11 10:46:56 1997 Chris Cleeland + + * config-linux*.h: Added ACE_HAS_IP_MULTICAST as the default for + all Linux configurations. If you're a 1.x user, or you didn't + config that into your 2.x kernel, you'll have to remove this from + your version of the file. + +Thu Apr 10 00:34:10 1997 Douglas C. Schmidt + + * examples/Logger/simple-server/Logging_Acceptor.cpp + (handle_input): We need to call svc_handler->close() if accept() + or open() fails. Thanks to Ganesh Pai for + reporting this. + + * ace/Service_Config.cpp (close): Moved the call to + ACE_Service_Config::close_singletons() to outside the check for + ACE_Service_Config::svc_rep_ since the Singletons can be used + independently of the services. Thanks to Matthias Kerkhoff + for suggesting this. + +Wed Apr 9 21:11:38 1997 Douglas C. Schmidt + + * apps/Gateway/Gateway/Gateway.cpp (handle_signal): Evil demons + added bugs to my code that were causing segfaults when signals + shutdown the gateway. This is now fixed. + + * apps/Gateway/Gateway/Proxy_Handler.h: Changed ACE_Event_Channel + & to ACE_Event_Channel * to keep the compiler happy. + + * examples/Connection/non_blocking/CPP-connector.h: Added a + do-nothing default constructor to keep ACE_Connector happy. + + * examples/Connection/misc/test_upipe.cpp: Added a do-nothing + default constructor to keep ACE_Connector happy. + + * examples/Connection/blocking/SPIPE-connector.h: Added a + do-nothing default constructor to keep ACE_Connector happy. + + * apps/Gateway/Gateway/Proxy_Handler: Added a do-nothing default + constructor to keep ACE_Connector happy. + + * netsvcs/lib: Added some default arguments to + TS_Clerk_Handler.cpp and Client_Logger_Handler.cpp to keep the + compiler from complaining about the new ACE_Connector features. + Thanks to David Levine for reporting this. + + * ace/Timer_Heap.cpp (reheap_down): Fixed a *very* subtle bug in + reheap_down() where parent was starting off at 0 whereas it + should have been starting off at child_index / 2. + + * examples/Logger/simple-server/Logging_Handler: Removed the use + of the operator ACE_SOCK_Stream &() and replaced it with the + more intuitive peer() approach used in ACE_Svc_Handler et al. + Thanks to Ganesh Pai for reporting this. + + * ace: Added a bunch of changes to improve ACE support on SCO 5.0. + Thanks to Ganesh Pai for these fixes. + + * tests/Conn_Test.cpp: Completely reworked this test so that it + illustrates how to use the ACE_Strategy_Connector, which is + customized with a special Caching_Connect_Strategy that recycles + connections. + + * ace/Connector: Finished implementing the new + ACE_Strategy_Connector. This is similar in design to the + ACE_Strategy_Acceptor. + + * ace: Changed the signature of all the make_svc_handler() methods + so that they return int (rather than SVC_HANDLER *) and they + pass back a SVC_HANDLER * by reference. This makes it possible + to totally control the creation of svc handlers (which is useful + for the new ACE_Strategy_Connector). + + * ace/Connector.cpp: Factored out the active_svc_handler() call + from the connect_svc_handler() method into the connect() method + so that it would behave correctly as a Template Method and + Strategy. + + * ace/Connector: Removed the explicit use of the Reactor data + member from the ACE_Connector since it's inherited from the + ACE_Service_Object. + + * ace/Log_Msg.cpp: The MVS compiler doesn't like the call to + atexit() in ACE_Log_Msg::instance() because atexit() requires an + a function pointer of type extern "C" for its parameter. I've + fixed this via an adapter. Thanks to Chuck Gehr + for reporting this. + + * ace/Strategies_T: Added a new ACE_Connect_Strategy that + complements the ACE_Strategy_Connector in the same manner that + the ACE_Accept_Strategy complements the ACE_Strategy_Acceptor. + + * ace/Connector.h: The destructor for ACE_Connector should have + been virtual. Now it is. + + * ace/Connector: Added a new factory method called + make_svc_handler(). This behaves similiarly to the + ACE_Acceptor::make_svc_handler(). However, for the + ACE_Connector we only use this when the SVC_HANDLER * is NULL. + + * ace/Connector: Changed the signature for connect() to take a & + to a SVC_HANDLER * in anticipation of our new + ACE_Strategy_Connector. This new connector will make it easy to + implement cached connections. + + * ace/config-win32-common.h: Added a new #include for , + which contains the declarations for TransmitFile() data + structures. They are in WINSOCK.H if you do not use + ACE_HAS_WINSOCK2. Thanks to Norbert Rapp + for reporting this. + + * ace/OS.i: Fixed a typo in the new condition variable + implementation for Win32. Thanks to Norbert Rapp + for reporting this. + +Wed Apr 09 22:06:23 1997 + + * Memory_Pool.h: Modified ACE_MMAP_Memory_Pool and + ACE_MMAP_Memory_Pool_Options to include the new guess_on_fault + option. This is only for platforms that can not report which + address caused a segmentation fault (via signal or exception). + When guess_on_fault is set (via ACE_MMAP_Memory_Pool_Options), + ACE_MMAP_Memory_Pool::handle_signal calls + ACE_MMAP_Memory_Pool::remap "guessing" that the segmentation + fault was caused by an access to memory not yet mapped. + +Wed Apr 09 16:46:16 1997 David L. Levine + + * ace/OS.{h,i}: fixed readPPCTimeBase declaration and return + value (for now: it really needs to return a 64 bit quantity). + Thanks to Dave Mayerhoefer for + reporting these. + +Wed Apr 9 03:12:24 1997 Irfan Pyarali + + * ace/config-win32-common.h: Defining _WIN32_WINNT as 0x0400 + implies ACE_HAS_WINSOCK2. + + * ace/Asynch_IO: The implementation of ACE_Asynch_Transmit_File + and ACE_Asynch_Accept are only supported if ACE_HAS_WINSOCK2 is + defined or you are on WinNT 4.0 or higher. Therefore, added + appropriate #defines. Thanks to Matthias Kerkhoff + for suggesting this. + +Tue Apr 8 22:45:28 1997 Prashant Jain + + * java/src/SOCKStream.java (SOCKStream): Made two small changes to + the two send(). Instead of doing a println, I now do a + print. This was really a bug! + +Tue Apr 08 22:08:12 1997 David L. Levine + + * include/makeinclude/platform_sunos5_sunc++_4.1.GNU: removed + "rm -f $@" from AR command so that archive won't be removed + during incremental updates. Thanks to Chuck Gehr + for reporting this. + +Tue Apr 8 00:04:22 1997 Douglas C. Schmidt + + * ace/Task_T.cpp: Added a hack to work around the new weird HP/UX + aCC template semantics. Thanks to Neil B. Cohen + for reporting this. + + * ace/config-hpux-10.x[-g++].h: Added #define + ACE_HAS_CLOCK_GETTIME. Thanks to Neil B. Cohen + for reporting this. + + * ace/config-hpux-10.x[-g++].h: Added ACE_HAS_IP_MULTICAST and removed + ACE_LACKS_STRRECVFD. Thanks to Neil B. Cohen + for reporting this. + + * ace/config-hpux-10.x.h: Apparently some HP/UX 10.x C++ compilers + don't support volatile, so I #defined it away as a macro. + Thanks to Neil B. Cohen for reporting this. + + * ace/Log_Msg.cpp: Put a #if defined (ACE_MT_SAFE) around the + entire Log_Msg destructor. Thanks to Neil B. Cohen + for reporting this. + + * ace/config-hpux-10.x[-g++].h: Added #define ACE_HAS_STREAMS on + the recommendation of Neil B. Cohen . + +Mon Apr 07 12:08:21 1997 + + * ace/Set.cpp: For some reason, VC++ 5.0 doesn't like to have the + constructors X::X(X&) and X::X(X*). We can change the X::X(X*) + constructor to take in an extra argument with a default value. + This seems to have sufficiently satisfied the VC++ 5.0 for the + time being. There were no changes necessary to other Set.cpp + code (as the extra argument has a default value). + +Mon Apr 07 08:05:03 1997 David L. Levine + + * ace/config-win32.h: enabled ACE_HAS_UNICODE by default. + Thanks to Matthias Kerkhoff for + suggesting this. + + * ace/config-sunos5.4-g++.h: enabled ACE_HAS_BROKEN_RANDR and + disabled ACE_HAS_SVR4_SIGNAL_T. Thanks to Joey Zhu + for reporting these problems and testing + the fix. + + * ace/Proactor.h (ACE_Proactor): commented out unused arguments + in non-WIN32 version. + +Sun Apr 06 22:51:02 1997 + + * ace/Proactor: Complete rewrite of Proactor that pushes all the + differences in asynchronous I/O to the edges of the framework - + i.e., into the new Asynch_IO classes. This allows the Proactor + to easily support new asynchronous operations. + + Currently, the new Proactor supports minimal functionality. In + the future, we will complete this. + + The Proactor is used in conjunction with the new Asynch_IO + classes. There is a different class for each operation. Please + see Asynch_IO.h for details. + + There is also a new ACE_Asynch_Acceptor that uses AcceptEx. + + Example is in: + ACE_wrappers/examples/Reactor/Proactor/test_proactor.cpp. + + This example illustrates how the ACE_Proactor can be used to + implement an application that does various asynchronous + operations. + + * apps/JAWS/server: Complete rewrite of JAWS. The new JAWS has + support for Asynch-Thread-Pool (on WIN32), Synch-Thread-Pool, + and Thread-per-Request. Different models can be configured using + the svc.conf file. The server now supports both GET and PUT + commands. + + The HTTP_Handler class is a state based implementation of the + HTTP protocol. Therefore, it can be used synchronously and + asynchronously. It uses an abstract IO class to move between + different HTTP protocol states. It is up to the IO class to + decide on synchronous or asynchronous I/O. + + * apps/JAWS/client: This is an example of the implementation of + BlobStreaming in ACE. This version of BlobStreaming uses HTTP as + a transport protocol. + + Blobby :-) is a simple application written using the ACE_Blob + class, which is capable of doing both file uploads and + downloads. If a file is downloaded, the downloaded data is sent + to standard output, so that it can be piped as necessary. + + * ace/Mem_Map.cpp (map_it): This method now uses ACE_OS::pwrite + (if ACE_HAD_P_READ_WRITE is defined) instead of + ACE_OS::lseek/ACE_OS::write to write the end-of-file byte. The + old scheme does not work if the file is in OVERLAPPED mode. + + * ace/OS: Added pread and pwrite to the OS class (if + ACE_HAD_P_READ_WRITE is defined). On Win32, these functions use + the OVERLAPPED structure to specify the offset. This + implementation will block until the write/read completes (even + if the file is in OVERLAPPED mode). + + * ace/config: Added ACE_HAS_P_READ_WRITE to the following + platforms that support pread() and pwrite() calls: + config-sunos4-g++.h + config-sunos4-lucid3.2.h + config-sunos4-sun3.x.h + config-sunos4-sun4.1.4.h + config-sunos4-sun4.x-orbix.h + config-sunos4-sun4.x.h + config-sunos5.4-centerline-2.x.h + config-sunos5.4-g++.h + config-sunos5.4-sunc++-4.x-orbix.h + config-sunos5.4-sunc++-4.x.h + config-sunos5.5-g++.h + config-sunos5.5-sunc++-4.1.h + config-sunos5.5-sunc++-4.x-orbix.h + config-sunos5.5-sunc++-4.x.h + config-sunx86-sunc++-4.x.h + config-win32-common.h + +Sun Apr 6 14:16:18 1997 Douglas C. Schmidt + + * tests/Timer_Queue_Test.cpp: Added tests to make sure that the + new ACE_Timer_Queue::cancel() logic is working correctly. So + far, it seems to be fine. + + * ace/Timer_{Heap,List}.cpp (cancel): Changed the comparison for + dont_call_handle_close to be correct. + + * ace/OS.cpp: Deleted a useless return. Thanks to Gonzalo + A. Diethelm for reporting this. + + * ace/config-irix6.2-sgic++.h: Added the following definitions: + + + ACE_LACKS_PTHREAD_THR_SIGSETMASK + + ACE_HAS_PTHREAD_EQUAL + + ACE_HAS_PTHREAD_T + + ACE_HAS_SYSENT_H + + ACE_HAS_SYSINFO + + ACE_HAS_TEMPLATE_TYPEDEFS + + Deleted the following definitions: + + + #define ACE_HAS_SYS_SIGLIST (Irix's compiler only has a + _sys_siglist array when compiling their own internal + functions). + + Thanks to Gonzalo A. Diethelm for this. + + * ace/Process: Added new support for setting the environment + variable and the current working directory. Thanks to Gonzalo + A. Diethelm for this enhancement. + + * ace/OS.h: "sys/stat.h" was being included more than once, so I + fixed this. Thanks to Gonzalo A. Diethelm + for reporting this. + + * ace/XtReactor.cpp: Added the register_handler_i() method, which + just delegates to the one defined in the Reactor. This is + necessary to adjust to the C++ type system rules. Thanks to + Gonzalo A. Diethelm for reporting this. + + * ace/Service_Config.cpp: Added the Double-Checked Locking + Optimization pattern to all the ACE_Service_Config Singletons + (e.g., thr_mgr(), reactor(), etc.) so that they behave correctly + in multi-threaded programs. Thanks to Matthias Kerkhoff + for insisting on this. + + * ace/OS.i (nanosleep): If the nanosleep() system call isn't + supported by the OS platform we'll just use ACE_OS::sleep(const + ACE_Time_Value &) instead. + + * ace/Log_Msg.cpp: Changed the logic of + ACE_Log_Msg_Manager::remove() so that it returns the number of + remaining registered instances. When this goes to 0 we'll + cleanup. + + * ace/OS.i: Enhanced the ACE_OS::cond_[timed_]wait() methods so + that they use SignalObjectAndWait() whenever possible to avoid + potential problems with unfairness. See + http://www.cs.wustl.edu/~schmidt/editorial-15.html for more + details. Thanks to David Holmes for + pointing out this subtlety. + +Sun Apr 06 20:01:57 1997 David L. Levine + + * include/makeinclude/wrapper_macros.GNU: added "purify" and + "quantify" make command options. To build Purified versions + of all executables in the current direction, for example: + + % make clean; make purify=1 + + These options assume that purify or quantify are in your PATH. + + * ace/Task.{h,cpp}: removed ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES + from ACE_Task_Exit declaration and ACE_Task_Exit::instance (). + ACE_Task_Exit is no longer a template class, so we don't need that. + + * ace/Task_T.h: added missing "*/" at end of comment after #endif. + + * tests/IOStream.cpp (server): added check for 0 strlen of + "buf" to avoid out-of-bound array reference. + + * ace/Svc_Conf_l.cpp, Makefile: added #define ACE_BUILD_DLL. + Thanks to Matthias Kerkhoff for + reporting this. + + * ace/Set.cpp(ACE_Set_Node ctor): commented out unused arg MS_SUCKS. + +Sat Apr 5 14:21:29 1997 Prashant Jain + + * java/: Changed package name from ACE to JACE across all directories. + +Sat Apr 5 13:12:37 1997 Douglas C. Schmidt + + * tests/MM_Shared_Memory_Test.cpp: Removed the use of dynamic + memory allocation to avoid memory leaks. + + * ace/Service_Config: Changed _defaults to _static_svcs since this + more accurately reflects what they do. + + * examples/Shared_Malloc/test_malloc.cpp: Removed the + print_stats() call since it doesn't work via this API. Thanks + to Sandro Doro for reporting this. + + * ACE-install.sh: Tweeked the install script by changing the + "gunzip; tar; gzip" sequence into "gunzip -c | tar xvf -" to + speed it up a little. Thanks to Per Andersson + for this fix. + + * examples/Threads/future1.cpp: Make sure to delete the char *name + that is retrieved from the future in order to avoid a memory + leak. Thanks to Matthias Kerkhoff for + figuring this out. + + * examples/Threads/future1.cpp: Make sure to delete this->name_ in + the Scheduler destructor to avoid a memory leak. + + * examples/Threads/task_four.cpp (close): Enhanced the close() + method so that it will actually delete the memory for the + Worker_Task. + + * ace/XtReactor.cpp (register_handler_i): Added the + + if (mask & ACE_Event_Handler::ACCEPT_MASK) + ACE_SET_BITS (condition, XtInputReadMask); + + Thanks to Jean-Marc Strauss for + reporting this. + + * ace/Timer_Queue.cpp (expire): This is the only method that calls + ACE_Timer_Queue::cancel() with dont_call_handle_close set to 0. + + * ace/Reactor: Modified the cancel_timer() methods so that they + also take a dont_call_handle_close parameter and pass it on to + the Timer_Queue::cancel() method. + + * ace/Timer_{List,Heap}.cpp: Modified all the cancel() methods so + that they will not call handle_close() unless the new parameter + dont_call_handle_close is 0 (it is 1 by default). This will + avoid nasty problems with recursion. Thanks to Paul Han + for suggesting this. + + * ace/Timer_{List,Heap}.cpp (schedule): If a user tried to + schedule a NULL ACE_Event_Handler then we return -1 with errno + set to EINVAL. + + * ace/Message_Block.cpp: Somehow the file got screwed up and was + reverted back to an earlier incarnation where we didn't use + ACE_Service_Config::alloc()... Thanks to Matthias Kerkhoff + for figuring this out. + +Sat Apr 5 19:11:46 1997 Tim H. Harrison + + * ace/Signal.i (ACE_Sig_Guard): Changed the constructor of + ACE_Sig_Guard so that it doesn't call ACE_OS::sigprocmask for + Win32. This keeps errno from being set to ENOSYS at random + times. + +Sat Apr 05 17:27:02 1997 + + * Registry.cpp (resolve): Type and size of the object is only set + if RegQueryValueEx() returns success. Thanks to Alan + (Alan_Cabrera@fp.cibc.com) for reporting this. + +Sat Apr 05 13:11:04 1997 David L. Levine + + * ace/Log_Msg.cpp (instance): Added another ACE_NO_HEAP_CHECK. + Matthias provided the fix. + + * ace/config-win32.h: Disable ACE_HAS_STRICT by default, because + it will break existing application code. + + * ace/OS.{h,cpp},Log_Msg.{h,cpp}: fixes from Matthias Kerkhoff + to avoid memory-leak reports when MFC + or (the CrtHeapXXX()-functions of the Win32 runtime library) + are used. + + The problem is, that MFC (and so may other Win32 applications + do) allocates a thread specific storage slot for each running + thread which contains various control and debug informations. + Part of this information is an object, which when constructed + makes a snapshop of the heap. When this object is destroyed, + the snapshot is compared to the actual heap. All object still + existing on the heap are reported as memory leaks (which + is in most situations correct). Because the object is deleted + when the thread (or programs main) is left and this happens + before atexit is called, some leak reports are false (because, + e.g., all these ACE_Log_Msg's will be deleted in atexit). + + The fix for ACE_Log_Msg consists of three changes (two only + relevant for Win32, one relevant for all platforms.) + Description of changes: + + a) Introduced a new macro ACE_NO_HEAP_CHECK, which turns + off the built in heap checking until the current code block + is left. (defined for all platforms, but only does something + for Win32). This changes os.h and config-win32-common.h. + + b) Added a static member function to ACE_Log_Msg. The function + (exists) returns 0 if the calling thread don't have an ACE_Log_Msg + and non-null if an ACE_Log_Msg exists. This changes Log_Msg.h + and Log_Msg.cpp. + + c) Changed ACE_Thread_Adapter in a way that creating a new + thread does not automatically create an ACE_Log_Msg for the + calling thread. This happened until now, because the new + thread inherited the log settings of the calling thread. + This behaviour makes no sense, if the calling thread does + not have an ACE_Log_Msg, so i use ACE_Log_Msg::exists() (see + above) to prevent the implicit creation of an ACE_Log_Msg + for the calling thread. + + Thanks, Matthias! + + * ace/config-win32.h and config-win32-common.h: new, consolidated + Win32 config files. Thanks, again, Matthias! + + * ace/OS.h (ACE_UNUSED_ARG): determine whether we're building + on an Irix platform by looking for ACE_HAS_IRIX_GETTIMEOFDAY + instead of ACE_HAS_IRIX62_THREADS. + + * ace/Log_Msg.cpp: VxWorks (only!) change: no longer strdups + program_name and local_host to avoid memory leaks. Instead, + the addresses of these are copied by ACE_Log_Msg. So, only + strings in the text segment should be passed to its functions! + Again, this change is for VxWorks only. + + * ace/Sched_Params.cpp: moved memsets of pcinfo so that entire + pcinfo structure is zeroed out, to _really_ avoid Purify warnings. + +Fri Apr 04 12:28:40 1997 David L. Levine + + * ace/config-mvs.h: removed ACE_HAS_IP_MULTICAST because MVS + doesn't define ip_mreq. Thanks to Chuck Gehr + for reporting this. + + * ace/OS.i (mutex_init): fixed the extra braces once and for all. + Thanks to Chuck Gehr for reporting it. + + * ace/OS.i, config-sco-5.0.0*.h: fixed for SCO so that it uses + single-argument gettimeofday () prototype, but calls two-arg + (SVR4) version in ACE_OS::gettimeofday (). Thanks to Ganesh + Ganesh Pai for solving this problem. + + * ace/Log_Msg.{h,cpp}: added ACE_Log_Msg destructor. In + instance (), added call to ::atexit () (::taskDeleteHookAdd () + on VxWorks) to register cleanup handler. Each new instance + of an ACE_Log_Msg is inserted into an ACE_Unbounded_Set; the + cleanup handler iterates over the Set and deletes the + ACE_Log_Msgs at program exit. + + Also, the two strings that are allocated get cleaned up after + the last ACE_Log_Msg instance is deleted. Many thanks to + Matthias Kerkhoff for figuring this out + and cranking out the code. + + It works differently on VxWorks, because it doesn't have + ::atexit (). VxWorks has ::taskDeleteHookAdd (), which is + called when each task exits. So, the Set isn't used. Instead, + the cleanup hook is called for each task when it exits, passing + the task control block (TCB) of the exiting task. A pointer to + the ACE_Log_Msg instance is contained in one of the spare fields + of the TCB, so the cleanup handler simply deletes it. + + * ace/IOStream.h: specify template parameter (ACE_IOStream) + to ACE_OPERATOR{G,P}_SET macros. Thanks to Chuck Gehr + for providing this fix. + +Thu Apr 3 22:17:53 1997 Irfan Pyarali + + * ace/Registry.cpp: Changed STRING_SEPARATOR from Istring to + LPCTSTR. Thanks to Matthias Kerkhoff for + suggesting this. + +Thu Apr 3 21:39:45 1997 Chris Cleeland + + * ace/OS.i (mutex_init): Removed errant open-brace ('{'). Thanks + to Chuck Gehr (gehr@sweng.stortek.com) for the fix! + +Thu Apr 03 08:52:34 1997 David L. Levine + + * ace/OS.h,OS.cpp,Sched_Params.cpp: added /**/ to some #include + directives. Thanks to Matthias Kerkhoff + for reporting these. + + * ace/OS.cpp (writev, readv): changed type of local variable "i" + from size_t to int to avoid signed/unsigned mismatch. Thanks + to Matthias Kerkhoff for reporting this. + + * ace/OS.cpp (readv), SOCK_Dgram.cpp (recv): added casts of + iov_len and copyn because iov_len is int on some platforms and + size_t on others. This avoids compiler (MSVC 4.1) warnings. + Thanks to Matthias Kerkhoff for reporting + this. + + * include/makeinclude/platform_sco5.0.0-nothread.GNU: + updated CCFLAGS and added LD=$(CXX). Thanks to + Ganesh Pai for these fixes. + + * ace/OS.h: added #include of for SCO only. + Thanks to Ganesh Pai for this fix. + + * ace/config-sco-5.0.0*.h: added #define ACE_HAS_IP_MULTICAST. + Thanks to Ganesh Pai for this fix. + + * ace/config-{chorus,linux*,sco*}.h: removed #define of + ACE_HAS_INLINED_OSCALLS because it's no longer needed in the + config files: it's #defined in OS.h if needed. + +Thu Apr 3 01:48:01 1997 Tim H. Harrison + + * ace/Malloc.i (malloc): ACE_New_Allocator::malloc only calls new + if nbytes is > 0. Purify was complaining that 0 bytes were + allocated but never deleted. Go figure. + +Wed Apr 2 22:24:48 1997 Douglas C. Schmidt + + * ace/OS.cpp: Moved the ACE_OS::inet_aton() method into the *.cpp + file and made it non-inline to work around a bug with HP/UX C++. + Thanks to Neil Cohen for this fix. + +Wed Apr 02 10:09:37 1997 David L. Levine + + * ace/config-sunos5.5-sunc++-4.1.h: added template specialization + with Sun C++ 4.2. + + * include/makeinclude/platform_sunos5_sunc++_4.1.GNU: removed +w + and added comments about Sun C++ 4.2 support. + + * include/makeinclude/platform_chorus.GNU, platform_hpux_gcc.GNU, + platform_irix5.{2,3_g++}.GNU, platform_linux{_,pthread}.GNU, + platform_m88k.GNU,platform_osf1_4.0_g++.GNU, + platform_sco-nothread.GNU,platform_sco5.0.0-*.GNU, + platform_sunos{4,5}_g++.GNU, platform_sunos5_x86_g++.GNU, + platform_unixware_g++.GNU, platform_vxworks5.2_g++.GNU: + added -fno-implicit-templates to CCFLAGS. See INSTALL file + for discussion of the g++ option. Also, added -O2 because + it dramatically reduces object file sizes. + + * netsvcs/clients/Tokens/manual/manual.cpp: made + STDIN_Token::TID typedef public so that template + specialization (w/ Sun C++ 4.2) can access it. + +Wed Apr 2 10:02:47 1997 Chris Cleeland + + * ace/OS.h: Added definitions for THREAD- and PROCESS-LEVEL + priorities because some implementations define these while + others don't. These are now + ACE_{THR,PROC}_{FIFO,RR,OTHER}_{MIN,MAX,DEF}. The only really + NEW concept is the *_DEF, which is a default value assigned by + ACE_OS::thr_create() if one isn't given. Of special note is that + we don't redefine a default values if it's already been + defined, which allows individual programs to have their + own ACE-wide "default". + + * ace/OS.cpp (thr_create): Uses ACE_{THR,PROC}_* macros + rather than the PRI_* macros. + + * ace/Sched_Params.cpp (priority_min,priority_max): These now + use ACE_{THR,PROC}_* macros to ignore OS-specific priority + assignments. + + * ace/config-linux-lxpthreads.h: Removed definitions of + PRI_{FIFO,RR,OTHER}_{MIN,MAX}. + + * include/makeinclude/platform_linux*.GNU (CCFLAGS): Added + -fno-implicit-templates now that it's supported. This + eliminates messages of the sort 'ld: Warning size of + change from xx to yy' + when linking libACE.so. Thanks to David Levine for making + this possible! + +Tue Apr 1 15:27:28 1997 Douglas C. Schmidt + + * bin/g++dep: Removed the "/bin" prefix so that this won't fail on + platforms that don't have sed in /bin. Thanks to Sandro Doro + for this fix. + +Tue Apr 01 09:55:07 1997 David L. Levine + + * ace/OS.h: protected definition of struct flock on VxWorks, + because it defines that type in sys/fcntlcom.h. (It doesn't + appear to support flock (), though.) Thanks to Dave + Mayerhoefer for reporting this. + + * ace/OS.h: define ACE_hrtime_t as u_longlong_t gcc, because + its long long types are only 4 bytes long. Its longlong_t + types are 8 bytes. Also made ACE_hrtime_t unsigned for + other than gcc on Unix platforms. + + * ace/OS.* (gethrtime), config-vxworks-ghs-1.8.h: added support + for PowerPC with Green Hills compiler. Thanks to Dave + Mayerhoefer for providing the + readPPCTimeBase assembler routine. + + * ace/config-vxworks*.h: removed #include of vxWorks.h because + its no longer necessary with the TimeValue.h merged into OS.h. + + * ace/High_Res_Timer.cpp (elapsed_time): added cast to + initialization of nseconds to avoid compiler warning from + MSVC 4.1 about narrowing from unsigned __int64. + Thanks to Matthias Kerkhoff for + reporting this. + +Mon Mar 31 18:18:35 1997 Carlos O'Ryan + + * ace/config-hpux-10.x-g++.h: + It was tuned to HP-UX 10.10 (and further) using g++ 2.7.2 without + DCE/Threads. + + * ace/Task_T.cpp: + Another iteration on the Module.h file, this time it is not + included *only* under HPUX and when using HP/aCC. Still IMHO + problems will arise as template sintax checking becomes more + popular. + + * ace/Local_Name_Space_T.h: + * ace/Local_Name_Space_T.cpp: + Replaced MAXNAMELEN with MAXPATHLEN since some platforms + (e.g., HP/UX) have a very low value (e.g., 14 bytes) for + MAXNAMELEN. + + * ace/config-hpux-10.x-aCC.h: + The comment did not make clear what was compiler/platform + target. It also included some remarks that only applied to + HP/C++. + + * tests/Future_Test.cpp: + * tests/Message_Block_Test.cpp: + * tests/Thread_Pool_Test.cpp: + Will not compile if ACE_HAS_THREADS was not defined and + ACE_TEMPLATES_REQUIRE_SPECIALIZATION was: they tried to + instantiate templates that were only defined when ACE_HAS_THREADS. + + * ace/config-hpux-10.x-aCC.h: + More fine tuning: ACE_HAS_EXCEPTIONS, + ACE_LACKS_LINEBUFFERED_STREAMBUF, + ACE_HAS_STREAM_PIPES. + + * ace/TLI_Stream.h: + * ace/TLI_Acceptor.h: + No "Meta-type info" was defined (the PEER_ADDR and PEER_STREAM + typedefs). + + * ace/Signal.h: + * ace/Signal.cpp: + With HP/aCC we can enable ACE_Sig_Handlers. + +Mon Mar 31 22:36:55 1997 Douglas C. Schmidt + + * ace/Service_Config.cpp (process_directives): Return -1 if + ace_yyerrno > 0. Thanks to Alan Cabrera + for reporting this. + +Mon Mar 31 17:38:08 1997 Chris Cleeland + + * ace/OS.cpp (thr_create): Moved priority determination after + policy determination because it's possible for setting of the + priority to fail if it's not a valid priority for the [default] + policy. + +Mon Mar 31 09:00:54 1997 David L. Levine + + * performance-tests/Misc/context_switch_time.cpp: this test no + longer worked. So, reverted to revision 4.5, plus minimum + changes necessary to support build on platforms without threads. + + * examples/Threads/Makefile, performance-tests/Misc/Makefile: + moved context_switch_time.cpp from examples/Threads to + performance-tests/Misc. + + * examples/Logger/Acceptor-server/server_loggerd.cpp, + examples/Reactor/Misc/pingpong.cpp, + examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp, + examples/Shared_Malloc/Malloc.cpp: + added template specializations. + + * include/makeinclude/platform_sunos5_g++.GNU: removed dependency + of CCFLAGS on CFLAGS to avoid duplicate -g in build command. + Also, added -fno-implicit-templates in comment. + +Sun Mar 30 12:52:58 1997 Douglas C. Schmidt + + * ace/Malloc.h: The block begining with: + #if defined (ACE_MALLOC_STATS) + and ending with end of struct ACE_Malloc_Stats + must be moved (up) after line 107 + + Thanks to Sandro Doro for pointing + this out. + + * ace/Malloc_T.cpp: The line + this->malloc_stats_.dump (); + must be changed in: + this->cb_ptr_->malloc_stats_.dump (); + + Thanks to Sandro Doro for pointing + this out. + + * ace/Malloc_T.cpp: the line + this->cb_ptr_->malloc_stats_.print (); // print not exists + may be changed in: + this->cb_ptr_->malloc_stats_.dump (); + + Thanks to Sandro Doro for pointing + this out. + + * ace/Malloc_T.h: Added "virtual" to the ACE_New_Allocator methods + to reinforce the fact that they are indeed virtual. Thanks to + Sandro Doro for pointing this out. + + * ace/Malloc.h: Added "virtual" to the ACE_New_Allocator methods + to reinforce the fact that they are indeed virtual. + +Sat Mar 29 20:26:54 1997 David L. Levine + + * ace/OS.h: moved #defin of RTLD_LAZY after #include of dlfcn.h. + Thanks to Chris Lahey for this fix. + + * ace/Task_T.h: replaced #include of "ace/Module.h" because some + Task_T methods use ACE_Module methods. + + * examples/Connection/non_blocking/test_{sock,spipe,tli}_{acceptor, + connector}.cpp, + examples/System_V_IPC/SV_Semaphores/Semaphores_{1,2}.cpp: + added template specializations. + +Sat Mar 29 17:08:33 1997 Douglas C. Schmidt + + * ace/OS.cpp: Added many new ACE_UNUSED_ARGS macros to eliminate + warnings when we are compiling without threads. + +Fri Mar 28 11:34:38 1997 David L. Levine + + * ace/Task.{h,cpp},Thread_Manager.h: changed remaining + priority types to long and defaults to -1. + + * ace/Thread_Manager.cpp (spawn_i): don't clobber errno! + ACE_OS::thr_create () sets errno and returns -1. So, + its return value should not be used to set errno. + + * ace/OS.cpp (thr_create): fixed PTHREADS_1003_DOT_1C thread + priority logic. Thanks to Thilo Kielmann + for the patch. + + * ace/config-sunos5.5*.h,README,OS.cpp (thr_create): added + ACE_HAS_ONLY_SCHED_OTHER to indicate that platform (Solaris 2.5) + only supports POSIX SCHED_OTHER scheduling policy. + + * tests/Priority_Task_Test.cpp (open): added THR_SCHED_FIFO flag. + Thanks to Thilo Kielmann for + for this suggestion. + + * examples/ASX/Event_Server/Event_Server/Makefile, + Transceiver/Makefile: + added -lGateway to LIBS to pick up its template + instantiations during links. + + * examples/ASX/Event_Server/Event_Server/Peer_Router.cpp, + Transceiver/transceiver.cpp, + Connection/blocking/SPIPE-{acceptor,connector}.cpp, + misc/Connection_Handler.cpp,test_upipe.cpp, + Logger/simple-server/server_loggerd.cpp, + UPIPE_Event_Server/{Consumer,Supplier}_Router.cpp, + performance-tests/Synch-Benchmarks/Options.cpp: + added template specializations. + +Thu Mar 27 21:10:59 1997 David L. Levine + + * ace/IOStream.h: only use built-in ipfx{0,1} () with __GNUC__, + because that's the only compiler we know of that has them. + Thanks to Carlos O'Ryan for pointing this + out, and to James CE Johnson for providing the fix. + + * ace/OS.i: rearranged order of ACE_Time_Value functions (moved + set ()'s up, moved arithmetic operators down) so that they are + defined before use. + + * ace/Task_T.cpp: removed ACE_TEMPLATES_REQUIRE_SOURCE around + #include of "ace/Module.h" so that it will build with Sun C++ 4.1. + + * apps/Gateway/Peer/Makefile: added -lGateway to LIBS to + pick up its template instantiations during links. + + * apps/Gateway/Peer/Peer.cpp: added template instantations. + +Thu Mar 27 14:10:39 1997 Douglas C. Schmidt + + * ace/OS.h: Added two new accessors to ACE_Time_Value: + + operator timeval *() const; + // Returns a pointer to the object as a timeval. + + const operator timeval *() const; + // Returns a pointer to the object as a timeval. + + Thanks to Carlos O'Ryan for this suggestion. + + * ace/OS.i (ACE_Time_Value): Inlined many of the ACE_Time_Value + accessors. + + * ace/OS.h: Reimplemented ACE_Str_Buf at + + struct ACE_Export ACE_Str_Buf : public strbuf + { + // = Initialization method + ACE_Str_Buf(void* b = 0, int l = 0, int max = 0); + // Constructor. + }; + + this makes the casting from ACE_Str_Buf* to strbuf* a "safe" + cast and makes it more portable (say on platforms where the + fields in strbuf are not in the right order). Thanks to Carlos + O'Ryan for this fix. + + * ace/OS.h: Moved the definition of imr_multiaddr to just before + class ACE_OS so that it picks everything up appropriately. + Thanks to Hakan Kallberg for reporting this. + + * ace/config-aix-4.[12].x.h and config-mvs.h: Fixed the + ACE_HAS_MULTICAST macros, which should have said + ACE_HAS_IP_MULTICAST. Thanks to Daniel Montalibet + for reporting this. + +Thu Mar 27 15:54:10 1997 Chris Cleeland + + * ace/{Thread,Thread_Manager}.{h,i,cpp} (ACE_Thread): Changed + type for priority arg to spawn*() from u_int to long to + support changes in thr_create indicated below. Thanks to + Thilo Kielmann for these + changes. + + * ace/OS.cpp: Ensure that whenever either a priority of a + scheduling policy is set explicitly, with POSIX threads, the + other argument and the flag THR_EXPLICIT_SCHED is set + automatically. A range check for priority values for POSIX + 1003.1c is also included. Thanks to Thilo Kielmann + for these changes. + + * ace/OS.h: Changed type and default value of priority arg to + thr_create from u_int to long and 0 to -1. Thanks to Thilo + Kielmann for these + changes. Also added ACE_MAX and ACE_MIN macros. + +Thu Mar 27 11:25:38 1997 David L. Levine + + * netsvcs/servers/Makefile: removed SHOBJ so that main.so is not + built, because it wasn't needed. Thanks to Sandro Doro + for this fix. + + * ace/config-aix-4.[12].x.h,config-mvs.h: changed + ACE_HAS_MULTICAST to ACE_HAS_IP_MULTICAST. Thanks to Daniel + Montalibet for reporting + this. + + * include/makeinclude/platform_sunos5_g++.GNU, + platform_sunos5_x86_g++.GNU, + platform_unixware_g++.GNU: + removed "-L$(WRAPPER_ROOT)/ace -L./" from LDFLAGS because it + is added to LDFLAGS in include/makeinclude/wrapper_macros.GNU. + + * apps/Gateway/Gateway/{Event_Channel.cpp,Gateway.cpp, + Proxy_Handler.cpp,Proxy_Handler_Acceptor.cpp, + Proxy_Handler_Connector.cpp, + examples/IPC_SAP/UPIPE_SAP/ex{2,3}.cpp, + netsvcs/clients/Naming/Client/Client_Test.cpp, + netsvcs/clients/Tokens/manual/manual.cpp: + added template specializations. + +Thu Mar 27 10:05:59 1997 Prashant Jain + + * netsvcs/lib/TS_Clerk_Handler.cpp: Fixed two things: + 1) In TS_Clerk_Processor::parse_args() changed + "%n:\n[-p hostname:port] [-t timeout] [-p poolname]\n%a", 1), + to + "%n:\n[-h hostname:port] [-t timeout] [-p poolname]\n%a", 1), + + 2) In TS_Clerk_Processor::alloc() changed + void *temp = 0; + // Only create the state if it doesn't already exist. + if (this->shmem_->find (ACE_DEFAULT_TIME_SERVER_STR, temp) == -1) + { + // Allocate the space out of shared memory for the system time entry + temp = this->shmem_->malloc (sizeof (this->system_time_)); + + to: + + // Only create the state if it doesn't already exist. + if (this->shmem_->find (ACE_DEFAULT_TIME_SERVER_STR) == -1) + { + // Allocate the space out of shared memory for the system time entry + void *temp = this->shmem_->malloc (sizeof (this->system_time_)); + + Thanks to Sandro Doro (alex@aureus.sublink.org) for suggesting these changes. + +Thu Mar 27 01:00:18 1997 Douglas C. Schmidt + + * include/makeinclude/platform_irix6.2_sgiCC.GNU: Added a new + platform config file for SGI Irix 6.2 using the CC compiler (not + NCC nor the MipsProcompiler). Thanks to Eric Dean Russell + for these changes. + + * ace/OS.h: Moved the ACE_LACKS_UTSNAME_T block into the right + part of the code. Thanks to Jonathan Biggar for + this fix. + + * ace/Malloc.h: Added an enhancement so that the new alignment + features will work regardless of the size of ACE_MALLOC_ALIGN. + Thanks to Fred LaBar for this fix. + + * ace/Synch_Options.cpp: We now automatically set the USE_TIMEOUT + flag if a non-0 timeout value is supplied. Thanks to Tim + Liddelow for this suggestion. + +Wed Mar 26 08:47:24 1997 David L. Levine + + * ace/{ACE.cpp,Log_Msg.cppOS.cpp}, + tests/{Message_Queue_Test.cpp,Naming_Test.cpp}: + Changed ::sprintf calls to ACE_OS::sprintf. Thanks to + Thilo Kielmann for + reporting this. + + * netsvcs/lib/{Client_Logging_Handler.cpp,Name_Handler.cpp, + Server_Logging_Handler.cpp,TS_Service_Handler.cpp, + Token_Handler.cpp}: added template specializations. + +Tue Mar 25 06:47:14 1997 Douglas C. Schmidt + + * ace/OS.h: Moved config.h to the top of OS.h so that we don't + have to worry about not defining things in the right place. + Thanks to Matthias Kerkhoff for pointing + this out. + +Tue Mar 25 22:54:49 1997 Irfan Pyarali + + * ace/OS.i: Added UNICODE support for ACE_OS::chdir(). Thanks to + Ivan Murphy for the code. + +Tue Mar 25 21:26:10 1997 David L. Levine + + * ace/TTY_IO.{h,cpp},README, and these config files: + config-aix-*.h, config-hpux-*.h, config-irix5.*.h, + config-mvs.h, config-osf1-*.h, config-sun*.h (except for g++ + and config-sunos5.5-sunc++-4.1.h), config-win*.h: + Added ACE_NEEDS_DEV_IO_CONVERSION to conditionally compile the + ACE_DEV_IO & conversion operator for ACE_TTY_IO, which is a + subclass of ACE_DEV_IO. Thanks to Fred LaBar + and Gonzalo Diethelm + for reporting warnings without this on + Irix 6.2 with the mipsPro compiler. + + * ace/OS.cpp (thr_create): on VxWorks, always pass 0 as first arg to + ::taskSpawn () so that VxWorks will generate the task ID. + Thanks to Dave Mayerhoefer + for providing this fix, without which random task names would + be assigned. + + * ace/ACE.cpp (get_bcast_addr): added return 0 at end of non-WIN32 + code to avoid compile warning from g++. + + * tests/IOStream_Test.cpp: removed extra "(%P|%t)" from output. + I couldn't get ACE_ERROR_RETURN to work on g++: it complained + about mismatched return types when returning an int from a + function that returns a void *, and about mismatched arguments + to an ACE_Log_Msg function if I cast the int to a void *. So, + I used ACE_ERROR instead. + Added ACE_UNUNSED_ARG (arg). Removed unused variables + error_at_server and error_at_client. + + * netsvcs/lib/TS_Clerk_Handler.cpp: added another template + specialization. + + * examples/Reactor/Multicast/client.cpp: Log_Wrapper::LOG_DEBUG + instead of LM_DEBUG. + + * examples/Threads/context_switch_time.cpp: use ACE_Sched_Params + to get platform-dependent thread priorities. Also, moved #includes + so that config.h is read before testing for ACE_HAS_THREADS. + + * examples/Threads/{auto_event.cpp,barrier2.cpp,future1.cpp, + future2.cpp,reader_writer.cpp,tss1.cpp,tss2.cpp}: + added template specializations. + +Tue Mar 25 10:01:05 1997 Chris Cleeland + + * config-linux.h: Added + ACE_HAS_{SVR4_DYNAMIC_LINKING,AUTOMATIC_INIT_FINI}. Thanks to + alex@aureus.sublink.org (Sandro Doro) for the change. + + * platform_linux.GNU: Added -ldl to LIBS. Thanks to + alex@aureus.sublink.org (Sandro Doro) for the change. + +Tue Mar 25 16:01:34 1997 Carlos O'Ryan + + * ace/Svc_Handler.cpp: + I forgot to comment this: "operator delete" used to call ::delete + on a void*, on ANSI/C++ this is not allowed. Since "operator new" + calls ::new for a char[] I do a casting to char* and call + ::delete[] on the char pointer. + + * ace/config-hpux-10.x-aCC.h: + HP-UX 10.10 supports CLOCK_GETTIME, my guess is that it should + work with g++ and HP/C++, but I won't mess with those files yet. + + * ace/Connector.h: + The default address parameter for "connect" is a bit tricky, from + the comments in the file: + // + // If the compiler supports 'typename' we cannot use + // + // PEER_CONNECTOR::PEER_ADDR::sap_any + // + // because PEER_CONNECTOR::PEER_ADDR is not considered a + // type. But: + // + // typename PEER_CONNECTOR::PEER_ADDR::sap_any + // + // will not work either, because now we are declaring sap_any a + // type, further: + // + // (typename PEER_CONNECTOR::PEER_ADDR)::sap_any + // + // is considered a casting expression. All I can think of is + // using a typedef, I tried PEER_ADDR but that was a source of + // trouble on some platforms. I will try: + // + typedef ACE_PEER_CONNECTOR_ADDR ACE_PEER_ADDR_TYPEDEF; + + * ace/OS.h: + The stock HP C++ compiler (cfront based) gives lots of warnings in + . I used to define volatile to avoid this warnings. Now + I think I'll rather like to see them. + + * ace/SPIPE_Stream.h: + * ace/SPIPE_Connector.h: + There was no meta-type info (PEER_ADDR) for SPIPE_Stream and + SPIPE_Connector. + + * ace/Stream_Modules.h: + * ace/Stream_Modules.cpp: + Fixed a "bug" introduced in my last change: a couple of + ACE_ALLOC_HOOK_* were commented but shouldn't. + + * examples/Connection/non-blocking/CPP-acceptor.cpp (open): + PR_AD cannot be used in this context, it expands to + _ACE_PEER_ACCEPTOR::PEER_ADDR (via ACE_PEER_ACCEPTOR_ADDR), but + the template parameter is _ACE_PEER_STREAM (aka PR_ST_1, aka + ACE_PEER_STREAM_1). + The right macro was ACE_PEER_STREAM_ADDR. + + * ace/Connector.h: + * ace/Connector.cpp: + The typedef trick I used (PEER_ADDR) did not work on every + platform. + I also broke some examples since ACE_PEER_CONNECTOR_ADDR did not + include ACE_TYPENAME on its definition. Hopefully this new trick + will work everywhere. + + * I finally sorted out the mistery of including "ace/Module.h" + into "ace/Task_T.cpp": when compiling "ace/Stream_Modules.cpp" you + get the following include sequence: + Stream_Modules.cpp + Stream_Modules.h + Task.h + Task.i + Task_T.h + Message_Queue.h (descendants removed) + Synch_T.h (descendants removed) + Task.h (already included). + Task_T.i + Task_T.cpp + Module.h + ACE.h (descendants removed) + Task.h (already included). + Module.i + Module.cpp + + At this point Module.cpp uses ACE_Thru_Task declared on + Stream_Modules.h, but after the #include "ace/Task.h"; + in fact Module.cpp tries to #include "ace/Stream_Modules.cpp" but + that second #include expands to nothing due to the canonical + protection on Stream_Modules.h. + That explains the removal of Module.h in Task_T.cpp. + If you are wondering why so long an explanation for this change + the answer is simple: just because I was curious on now it worked. + +Mon Mar 24 14:08:48 1997 Douglas C. Schmidt + + * ace/SOCK_Dgram_Bcast.cpp (mk_broadcast): Cleaned up the code a + bit. + + * ace/ACE: Added a new method called get_bcast_addr() which will + get the broadcast address for a host. Thanks to Paul Han + for suggesting this. + + * ace/UNIX_Addr: Added another set method in UNIX_Addr class: + + void set (const ACE_UNIX_Addr &sa); + // Creates an ACE_UNIX_Addr from another . + + Thanks to Paul Han for this. + + * ace/SOCK_Dgram: Removed the #if defined (ACE_HAS_IP_MULTICAST) + since this is now handled at the ACE_OS level. + + * ace/OS.h: Added support for IP multicast macros and structs even + on platforms that don't support it so that the tests will + compile without having lots of #ifdefs. + + * tests/Future_Test.cpp: Added a check for platforms that lack + threads. Thanks to Hakan Kallberg + for reporting this. + + * netsvcs/lib/Server_Logging_Handler.cpp: Added a check for + platforms that lack threads. Thanks to Hakan Kallberg + for reporting this. + + * examples/Threads/context_switch_time.cpp: Added an #ifdef for + ACE_HAS_THREADS to this test so that it will compile on + platforms that don't have threading. Thanks to Scott Halstead + for reporting this. + + * tests/IOStream_Test.cpp: Fixed up this test so that it works + correctly on platforms that lack multi-threading. Thanks to + Scott Halstead for reporting this. + + * netsvcs/lib/Makefile: Reincluded the LIB target so that we'll + build a static library. Thanks to Scott Halstead + for reporting this. + + * ace/SOCK_Dgram.cpp (recv): Added a check to make sure that we + don't try to copy more into the recv buffer than we've really + got. Thanks to Alan_Cabrera@fp.cibc.com for this fix. + + * ace/OS.cpp (readv): Added a check to make sure that we don't try + to copy more into the recv buffer than we've really got. Thanks + to Alan_Cabrera@fp.cibc.com for this fix. + + * ace/Malloc.h: Modified the alignment strategy to define + ACE_MALLOC_ALIGN to a number of bytes. (it gets rounded to a + number of long's). This makes it easier to work with more + complex buffer alignment strategies (e.g., DMA). Thanks to Fred + LaBar for this. + + * ace/OS.cpp (readv): Added several more changes for the readv() + emulation. Thanks to Alan Cabrera + and Adam Porter for these fixes. + +Mon Mar 24 14:22:17 1997 David L. Levine + + * ace/OS.cpp (thr_create): For VxWorks, fixed call to ::taskSpawn (). + ACE's arguments are in an array, not individual arguments. + Also, set flags to VX_FP_TASK if it's 0, to match behavior + of ::sp (). Thanks to Dave Mayerhoefer + for reporting these and providing + the fix. + + * ace/High_Res_Timer.cpp (elapsed_time (struct timespec &): + fixed, using same approach as in elapsed_time + (ACE_hrtime_t &nanoseconds), to get nanosecond resolution. + + * netsvcs/lib/TS_Clerk_Handler.cpp (handle_close): added + ACE_UNUSED_ARG (mask). Also, added template specializations. + + * examples/Reactor/Multicast/server.cpp (Server_Events ctor): + rearranged initializers to match declaration order. + + * examples/IOStream/server/iostream_server.cpp, + client/iostream_client.cpp: + added template specializations. + +Mon Mar 24 13:21:31 1997 Tim H. Harrison + + * ace/High_Res_Timer.cpp (elapsed_time): Added an + ACE_High_Res_Timer::elapsed_time (ACE_hrtime_t &nanosecond) + method that returns the number of elapsed nanoseconds. This is + accomplished even with the scale factors converting to + microseconds. It also does not use floating point + calculations. + +Sun Mar 23 13:25:39 1997 Tim H. Harrison + + * ace/High_Res_Timer.h: Removed from the + constructor of High_Res_Timer. All High_Res_Timers now use + global_scale_factor_ directly. Hopefully, this will not break + any existing code! + +Sat Mar 22 12:06:22 1997 Douglas C. Schmidt + + * ace/OS.h: The include statement for config.h was too low. Some + defines for key_t, needed for NT, didn't work. Thanks to Alan + Cabrera for these fixes. + + * examples/Reactor/Multicast: Improved the multicast client and + server programs to work better. + + * ace/Connector.cpp: Modified the ACE_Connector::handle_close() + method to prevent recursive calls to itself. Thanks to Paul Han + for reporting this. + + * ace/Svc_Handler.cpp: Put the check (closing_ == 0) in the + destructor as well as in the destroy() method. This prevents a + possible core dump when the timer exists. The instruction + reactor::remove_handler in the shutdown method currently will be + called twice when ACE_Svc_Handler object is being deleted. Core + dump occurs when it tries to execute ACE_Reactor::remove_handler + method the second time because the ACE_Svc_Handler object + pointer has already been deleted by the previous instruction + ACE_Reactor::cancel_timer. Thanks to Paul Han + for reporting this. + + * ace/OS.cpp: Added new thread-safe implementations of writev() + and readv() for platforms that lack these functions. + + * ace/SOCK_Dgram.cpp: Added new implementations of + ACE_SOCK_Dgram::{send,recv} that define methods for + send(iovec[], ...) and recv(iovec[], ...) for systems that + don't have sendmsg() and recvmsg(). Thanks to Alan Cabrera + for these fixes. + + * apps/jaws/HTTP_Handler.cpp: Removed some problematic template + specializations that were left over from an earlier version of + JAWS. Thanks to Adam Porter for reporting + this. + + * examples/Logger/Acceptor-server/server_loggerd.cpp: Revised the + code to use the new ACE_Svc_Handler logic that checks to ensure + that we don't recurse infinitely in handle_close(). + Thanks to Jean-Marc Strauss for + reporting this problem. + + * examples/Logger/simple-server/Logging_Handler.cpp + (handle_close): Added a check to make sure we don't end up + recursively calling handle_close(). This will prevent + a segfault. + +Sat Mar 22 07:30:49 1997 David L. Levine + + * ace/High_Res_Timer.*: Changed scale factor to convert + platform-dependent clock units to microseconds instead of + nanoseconds. That way, it should be greater than 1 for + all supported platforms. So, it's now an unsigned long + instead of a double. + + * ace/OS.h: Changed ACE_hrtime_t to unsigned __int64 with + _MSC_VER. Also, fixed typo: "uint64" instead of "unit64" + without _MSC_VER. + +Fri Mar 21 08:37:34 1997 Carlos O'Ryan + + * makeinclude/rules.lib.GNU: + I use the macro SOEXT to support HP non-standard extension for + shared library names (.sl instead of .so). + I also changed the rule to build shared libraries: under HP-UX you + cannot pass extra libraries (-lXXX options) when building a shared + lib. Before HP-UX 10.10 it wasn't a problem because no library was + needed with ACE, but to support XLI the '-lxti' flag must be used + on binaries (but not on shared libs). + + * include/makeinclude/platform_hpux.GNU: + The PIC option (+Z) was used always, clearly not intended. + + * include/makeinclude/platform_hpux_gcc.GNU: + Added a config file for g++ under HP-UX. + + * include/makeinclude/platform_hpux_aCC.GNU: + Added a config file for HP/aCC compiler under HP-UX. + + * ace/Makefile: + * netsvcs/lib/Makefile: + Changed to support the SOEXT macro. + + * config-hpux-10.x.h: + * config-hpux-10.x-aCC.h: + * config-hpux-10.x-g++.h: + I updated the files to HP-UX 10.10, AFAIK since that version HP-UX + uses fd_set instead of int in select(2) (so ACE_SELECT_USES_INT is + not needed) and the OS supports siginfo_t and ucontext_t so + ACE_HAS_SIGINFO_T and ACE_HAS_UCONTEXT_T are defined. + I *do not* have threads at my site nor the infamous PHSS_6246 + patch so I couldn't test the threaded version nor the HP cfront + based one. + ACE compiled fine with g++ and HP/aCC though. + + * ace/OS.h: + * ace/Malloc_T.h: + HP/aCC supports the typename keyword. I added a new config macro + 'ACE_HAS_TYPENAME_KEYWORD', when it is defined ACE_TYPENAME + expands to 'typename' when not it expands to nothing. + On the cases where HP/aCC requires the usage of 'typename' I added + a 'ACE_TYPENAME'. + + * ace/OS.i: + * ace/OS.cpp: + ACE_OS::inet_aton cannot be inlined under HP-UX. + + * ace/Connector.h: + * ace/Connector.cpp: + I have decided to use a typedef (PEER_ADDR) instead of + ACE_PEER_CONNECTOR_ADDR, mainly because the second form + requires a ACE_TYPENAME before each usage. + + * ace/Event_Handler_T.i: + Much to my surprize ACE_TYPENAME is required when using a template + typedef as a return value. + + * ace/Local_Name_Space_T.h: + HP/aCC does not like the usage of a private typedef from another + class. + + * ace/Strategies_T.h: + * ace/Strategies_T.cpp: + ACE_Process_Strategy declared two defaults constructors: + ACE_Process_Strategy(void) and ACE_Process_Strategy(int = 1). + The constructor code was wrong, it called open() with parameters: + open(thr_mgr, thr_flags, n_threads) + none of which were defined, worse, open() receives just one + parameter (the number of processes) just as the constructor, I + believe that C-w programming is lurking here. + + * ace/Signal.cpp: + Though the header file does not declare ACE_Sig_Handlers under + HP-UX (and the code is not defined too) some auxiliary functions + that use ACE_Sig_Handlers were defined. I removed their + definition. + Some day I'll try to take a look at the code, trying to find out + was wrong with them. + + * ace/Stream_Modules.h: + * ace/Stream_Modules.cpp: + By mistake I commented out the ACE_ALLOC_HOOK_* macros; have to + fix it *real soon*. + + * ace/Task_T.cpp: + No need to include "ace/Module.h" since only the template + declaration is used. When ACE_TEMPLATES_REQUIRE_SOURCE is defined + you end up using ACE_Thru_Task before it gets defined. + This is no problem unless your compiler checks template sintax + before instantiation as the HP/aCC compiler do. + + * examples/Reactor/Misc/test_demuxing.cpp: + ACE_MT_SYNCH was used, but it is only defined if ACE_HAS_THREADS, + I used ACE_SYNCH instead, which is defined as ACE_MT_SYNCH if + ACE_HAS_THREADS and as ACE_NULL_SYNCH if not. + Maybe the semantics are wrong, but the thing compiles. + +Fri Mar 21 15:10:59 1997 Douglas C. Schmidt + + * ace/Makefile (FILES): Moved Log_Msg to the beginning of the + source list in the ace Makefile. This is nice because it forces + the compilation of OS.i and that, obviously, is where you get + the complaints for the port. It's nice to have it at the + beginning so you catch the errors very early on before you've + compiled 30 or 40 files. Thanks to Scott Halstead + for this suggestion. + + * ace/Memory_Pool.cpp: Added #if !defined + (ACE_LACKS_SYSV_SHMEM) to handle systems like Chorus that + lack this feature. + +Thu Mar 20 18:58:50 1997 Douglas C. Schmidt + + * ace/Svc_Handler.cpp (destroy): Added a state variable to keep + track of when we are closing down the Svc_Handler. This is + necessary to prevent endless recursive calls to handle_close() + due to the recent enhancements to ACE_Timer_{List,Heap}. Thanks + to Bert Craytor for reporting + this. + + * tests/Conn_Test.cpp: Added a new test that makes sure the + Acceptor, Connector, and Svc_Handler are working correctly. + + * ace: Added some more changes for Chorus. Thanks to Wei Chiang + for these changes. + + * ace/OS.h: Added #define for SIGSEGV for platforms that lack it + (e.g., Chorus). + + * ace: Made a bunch of minor changes to support SunOS 4.x better. + Thanks to Scott Halstead for reporting + these problems. + + * tests/Conn_Test.cpp: Added ACE_TEMPLATES_REQUIRE_SPECIALIZATION + for the various templates used in this test. Thanks to Thilo + Kielmann for reporting this. + + * ace/Connector.cpp (connector): Fixed some minor bugs that + prevented the ACE_Connector from compiling. Thanks to David + Levine for noticing this. + + * ace/OS.h: Moved the ACE_LACKS_SIGACTION block so that it will + work on Win32. Thanks to Matthias Kerkhoff + for pointing this out. + +Thu Mar 20 22:38:27 1997 David L. Levine + + * ace/Timer_Heap.cpp: added template specializations. + + * netsvcs/lib/Client_Logging_Handler.cpp, + Name_Handler.cpp + Server_Logging_Handler.cpp + TS_Clerk_Handler.cpp + TS_Server_Handler.cpp + Token_Handler.cpp: added template specializations. + There are still many missing from libnetsvcs. + + * tests/Conn_Test.cpp, + Future_Test.cpp + IOStream_Test.cpp + Map_Manager_Test.cpp + Message_Block_Test.cpp + Message_Queue_Test.cpp + Reader_Writer_Test.cpp + SV_Shared_Memory_Test.cpp + Thread_Pool_Test.cpp}: added template specializations. + Thanks to Thilo Kielmann + for providing these. + + * ace/Log_Msg.cpp: removed commented-out template specialization. + + * include/makeinclude/platform_{chorus,hpux,hpux_gcc}.GNU: + split out CFLAGS and CCFLAGS from CC and CXX. + + * ace/config-aix-4.[12].x.h: added back ACE_HAS_THREAD_SELF and + and ACE_HAS_SVR4_DYNAMIC_LINKING; removed ACE_HAS_PTHREAD_T. + Thanks to Chris Lahey for figuring these out. + +Thu Mar 20 12:25:30 1997 + + * ace/ace.{mak,mdp}: Build->Settings->Code Generation->Processor is + now set to "Pentium" instead of "Blend*" for Debug and Release + builds. + + * ace/config-win32-msvc4.x.h: + * ace/config-win32-msvc2.0.h: + * ace/config-winnt-4.0-msvc4.x.h: Only define ACE_HAS_PENTIUM when + _M_IX86 == 500. Projects must specify Pentium in + Build->Settings->Code Generation->Processor to use the RDTSC + instruction in ACE_OS::gethrtime. + + * ace/High_Res_Timer.{cpp,i}: By default, High_Res_Timer is + constructed with a scale_factor == 1. This allowed me to remove + all the checks for scale_factor == 0 in the code. + + * ace/High_Res_Timer.h (static gettimeofday): If + global_scale_factor_ is not set, and we're on a platform that + requires global_scale_factor_ (e.g., Win32), + ACE_OS::gettimeofday will be used instead of ACE_OS::gethrtime. + This allows the scale_factor of 1 to still result in correct + values. + +Wed Mar 19 15:02:09 1997 Douglas C. Schmidt + + * ace: Added zillions of minor changes so that ACE will compile on + the new aCC compiler for HPUX. Thanks to Gonzalo A. Diethelm + and Carlos O'Ryan for + help with this. + + * ace/SOCK_Dgram_Mcast.cpp (subscribe): In addition to the + SO_REUSEADDR option, Irix has a SO_REUSEPORT option that must + also be set to allow multiple sockets to bind to the same + multicast address. Thanks to Robert V. Head for + reporting this. + + * ace: Added a slew of changes to support CHORUS. Thanks to + Wei Chiang for these changes. + + * ace/config-sunos4.*.h: Added #define ACE_HAS_UNION_WAIT based + on the recommendation of Kumar Neelakantan + . + + * ace/Log_Msg.cpp (log_hexdump): Replaced the use of ::sprintf() + with ACE_OS::sprintf() so that the return value would be correct + on SunOS 4.x! + + * ace/OS: Added ACE_HAS_CHARPTR_SPRINTF and ACE_SPRINTF_ADAPTER + to ACE_OS::sprintf() for SunOS 4.x platforms. Thanks to Kumar + Neelakantan for reporting this. + + * ace/Handle_Set.cpp (ACE_Handle_Set_Iterator): If the bound was + reached in the following loop, we should set this->num_ = + this->handles_.max_handle_ + 1 rather than go into the 2nd loop. + Thanks to Michael Newton for reporting + this. + + * ace/Handle_Set.cpp (ACE_Handle_Set_Iterator): + ACE_Handle_Set_Iterator::ACE_Handle_Set_Iterator did not work + properly if called with a zero handleset, as there was no bounds + check on the first loop therein. Thanks to Michael Newton + for reporting this. + +Wed Mar 19 16:06:32 1997 David L. Levine + + * ace/OS.h,README: added ACE_HAS_AIX_BROKEN_SOCKET_HEADER to wrap + #include of sys/socket.h with #undef/#define of __cplusplus. + + * ace/config-aix-4.[12].x.h: added ACE_HAS_AIX_BROKEN_SOCKET_HEADER, + ACE_HAS_PTHREAD_T, ACE_LACKS_TCP_H, and ACE_LACKS_SETSCHED. + Removed ACE_HAS_SVR4_DYNAMIC_LINKING and ACE_HAS_THREAD_SELF. + + Thanks to Daniel Montalibet for + both of the above modifications. + + * platform_{dgux4_epc,irix5.3_g++,linux*,m88k,osf1_3.2,sco*, + sunos4_g++,sunos5_centerline*,sunos5_g++,sunos5_sunc++*, + unixware_g++,vxworks5.2_g++}.GNU: split out CFLAGS and CCFLAGS. + Also, removed -lstdc++/-lm from g++ versions, because we now set + CXX to g++ instead of gcc, so those libraries are picked up. + + * include/makeinclude/platform_osf1_4.0{,_g++}.GNU: + added -lrt to support ACE_Sched_Params. Thanks to + Thilo Kielmann for + suggesting this. Also, split out CFLAGS and CCFLAGS. + + * ace/OS.h: removed SVR4_DYNAMIC_LINKING protection around + #define of RTLD_LAZY because it's used in ace/Parse_Node.cpp. + Thanks to Matthias Kerkhoff for pointing + this out. + + * ace/OS.i (thr_setcanceltype): added ACE_UNUSED_ARGS for STHREADS + case. Thanks to Chuck Gehr for + providing this fix. + +Tue Mar 18 21:53:03 1997 Douglas C. Schmidt + + * ace/SOCK_Dgram_Bcast.cpp (mk_broadcast): Modified the + SOCK_Dgram_Bcast class by adding a const char *host_name to the + contructor, and open, and mk_broadcast methods. If the user + passes in the host_name, then only the broadcast address of an + interface that has a matching ip address with the host will be + added to the if_list_. Otherwise, nothing changes. Thanks to + Paul for this feature. + +Tue Mar 18 13:20:59 1997 Irfan Pyarali + + * ace/ace.mdp: Reverted the change for DllMain as the entry point + to ace.dll. This is causing problems in multi-threaded + applications. + + * netsvcs/lib/Client_Logging_Handler.cpp: Added a check in fini() + to make sure we have a valid handler. If the connect attempt + failed, this->handler_ will be set to 0. + + * tests/Mem_Map_Test.cpp: Added code that removes all temporary + files created by the test. + + * tests/Time_Service_Test.cpp: Made sure we remove the backing + store file left behind by a aborted clerk process. + + * examples/Reactor/Ntalker/ntalker.cpp: The ntalker now uses + ACE::register_stdin_handler to register the STDIN. This function + allows for portability. + +Tue Mar 18 08:12:22 1997 David L. Levine + + * ace/Svc_Conf_y.cpp,Makefile: replaced "y.tab.c" string with + "Svc_Conf_y.cpp" to ease debugging. Thanks to Luca Priorelli + for suggesting this. + + * ace/IOStream.cpp (close): replaced call to + ACE_SOCK_Stream::close () with one to generic STREAM::close (). + Thanks to Kumar Neelakantan for + reporting this problem. + + * ace/OS.h,README,config-*.h: removed ACE_HAS_RTLD_LAZY_V, and + replaced with #define of RTLD_LAZY macro only if it's not + already defined (and if ACE_HAS_SVR4_DYNAMIC_LINKING is defined). + Thanks to Chris Lahey for providing this fix. + + * ace/OS.i (thr_setcancelstate, thr_setcanceltype, thr_cancel): + added ACE_UNUSED_ARG calls to avoid compiler warnings. Thanks + to Chuck Gehr for suggesting them. + + * ace/Local_Name_Space_T.h: moved #include of Local_Name_Space.h up + because this file needs declaration of ACE_NS_String. There + _shouldn't_ be a circular include problem because the #includes are + protected. Thanks to Daniel Montalibet + for reporting this problem and + providing the fix. + + * ace/Local_Name_Space.h: removed #include of ace/Service_Config.h. + + * include/makeinclude/wrapper_macros.GNU: put -I. before + -I$(WRAPPER_ROOT) instead of after. + + * tests/IOStream_test.cpp: added checks for receipt of proper values. + +Tue Mar 18 01:38:14 1997 Irfan Pyarali + + * ace/ace.mdp: Add DllMain as the entry point of ace.dll. This + allows us to call WSAStartup when ace.dll is loaded in and + WSACleanup when ace.dll is unloaded. People using ace as a + static library are still out in the cold with respect of getting + WSACleanup called before the process exits. + + I am not sure of two cases: (1) What happens when an application + crashes and was not able to call WSACleanup and (2) if the + application wants to continue using sockets when ace.dll is + unloaded. I hope this solves more problems than it creates ;-) + +Tue Mar 18 01:38:14 1997 Irfan Pyarali + + * ace/Parse_Node.cpp: Added END_OF_LINE characters to some + ACE_ERRORs. + + * netsvcs/{lib,servers}: Fixed the project files to produce and + use the dll in the correct place (which is netsvcs/lib). + + * ace/Log_Record.cpp: Corrected format string for fprintf(). + + * examples/Threads/test.mdp: Added context_switch_time.cpp to the + project. + + All of the above bugs were reported by Luca Priorelli + . Thanks for the contribution. + +Mon Mar 17 12:59:56 1997 David L. Levine + + * ace/OS.{h,i}: added nanosleep (), currently supported only + on POSIX platforms (if ACE_HAS_CLOCK_GETTIME is defined). + + * examples/Mem_Map/IO-tests/{IO_Test.cpp,test_io.cpp): + LM_ERROR instead of ACE_ERROR, and fixed call to ACE::basename (). + + * ace/OS.cpp (sched_params): return -1 if not supported, + instead of ENOTSUP. + + * ace/OS.cpp (fork): added ACE_UNUSED_ARG (program_name) for WIN32 + and VxWorks. + + * ace/Sched_Params.cpp (priority_min, priority_max, next_priority, + previous_priority): not supported on MVS, via ACE_LACKS_SETSCHED. + Thanks to Chuck Gehr for figuring this + out and providing the fix. + + * tests/Timer_Queue_Test.cpp (test_performance): changed type of + local variable "i" to (signed) int to avoid signed/unsigned + comparison, and eventual seg fault because a loop would never + terminate. + +Sun Mar 16 11:31:46 1997 Douglas C. Schmidt + + * ace/Timer_{List,Queue,Heap}.h: Defined copy constructors and + assignment operators in the private part of the class so that + users won't accidentally make mistakes. + +Sat Mar 15 21:44:45 1997 Douglas C. Schmidt + + * ace/Timer_{Queue,List}.cpp (cancel): handle_close() should be + called only once (especially when handle_close() implements + "delete this;" ). Since it is possible that the EH will be + registered more than once, I changed the code to do the + following: + + if (number_of_cancellations == 1) + // Call the close hook. + curr->handler_->handle_close (ACE_INVALID_HANDLE, + ACE_Event_Handler::TIMER_MASK); + + Thanks to Hamutal Yanay for + suggesting this. + + * examples/Mem_Map/IO-tests/test_io.cpp (run_tests): Removed all + uses of ::perror and replaced them with calls to ACE_ERROR + macros. + + * ace/Mem_Map.i (unmap): The ACE_Mem_Map::close method does not + work properly if the value of file_mapping_ is equal to + ACE_INVALID_HANDLE. In this case the method calls a useless + close (-1). Therefore, I changed: + + if (this->file_mapping_ != this->handle_) + ACE_OS::close (this->file_mapping_); + + in: + + if (this->file_mapping_ != this->handle_ && + this->file_mapping_ != ACE_INVALID_HANDLE) + ACE_OS::close (this->file_mapping_); + + Thanks to Sandro Doro for reporting + this. + +Thu Mar 13 18:21:15 1997 Irfan Pyarali + + * ace/ReactorEx.h: Change protection of methods/variables of + ReactorEx from private to protected. Thanks to Matthias Kerkhoff + for suggesting this. + +Thu Mar 13 16:31:54 1997 David L. Levine + + * ace/OS.i (thr_getprio): Added missing ACE_NOTSUP_RETURN + for the case of pthreads && !defined (ACE_LACKS_SETSCHED). + Thanks to Chuck Gehr for + reporting this. + +Thu Mar 13 00:12:15 1997 Irfan Pyarali + + * ace/Local_Name_Space_T.cpp (dump): Added ACE_UNUSED_ARG around + fake_this to stop the compiler from complaining about unused + variables. + + * ace/Message_Block.cpp (ACE_Data_Block::size): Moved the copying + of the old base before freeing it up. Thanks to Dieter Quehl + (dietrich.quehl@med.siemens.de) for pointing this out. + + * ace/Local_Name_Space_T.cpp: Added code to the list methods such + that structured exceptions are handled correctly. Thanks to + Karlheinz Dorn (karlheinz.dorn@med.siemens.de) for reporting + this. + +Wed Mar 12 21:31:51 1997 Irfan Pyarali + + * examples/Reactor/Ntalker/ntalker.cpp: Made changes to the + program which allows it to run under Win32. + + * ace/SOCK_Dgram_Mcast.cpp: Made changes to the setting of the + interface address so that it works correctly under Win32. + Thanks to Todd L. Montgomery (tmont@cs.wvu.edu), Anton van + Straaten (anton@appsolutions.com), Ole O. Johnsen + (Ole.Johnsen@gpi.telemax.no), Mike Flinn + (mike.flinn@smtpgate.aws.waii.com), Steve Weismuller + (spweismu@rsoc.rockwell.com) and others who helped out. + +Wed Mar 12 17:05:52 1997 Chris Cleeland + + * ace/config-linux-lxpthreads.h: Added ACE_HAS_IP_MULTICAST. + +Wed Mar 12 16:07:07 1997 David L. Levine + + * ace/OS.i (gethrtime): Added support for VxWorks and + other platforms that support ACE_HAS_CLOCK_GETTIME. + +Tue Mar 11 21:38:42 1997 Irfan Pyarali + + * ace/OS.i (open): Improved support for passing flags through to + CreateFile (). + +Tue Mar 11 14:30:12 1997 David L. Levine + + * ace/config-vxworks-ghs-1.8.h: added ACE_LACKS_SYS_NERR. + Thanks to Dave Mayerhoefer for + reporting this. + + * ace/OS.{i,cpp} (uname, hostname): added VxWorks support. + Thanks to Dave Mayerhoefer for + providing this. (Also, uninlined ACE_OS::uname on WIN32 + and VxWorks because it contains string literals.) + + * ace/High_Res_Timer.{i,cpp}: fixed interpretation of units: + ACE_hrtime_t is in nanoseconds, so it should be divided by + 1000000000 to get seconds. Fixed divs/mods to first divide + by 1000, then div/mod. Thanks to Luca Priorelli + for identifying this problem. + + Also, removed some casts that are no longer necessary, and + added some casts of ACE_hrtime_t values to longs to avoid + compiler warnings. Thanks to Matthias Kerkhoff + for pointing this out. + + * ace/Reactor.cpp (unbind): cast "index" to int to avoid + signed/unsigned comparison. Thanks to Matthias Kerkhoff + for pointing this out. + + * ace/ReactorEx.cpp (bind): changed type of "current_size" to + size_t to avoid signed/unsigned comparison. Thanks to Matthias + Kerkhoff for pointing this out. + + * ace/Timer_Heap.cpp (ctor, grow_heap): cast unsigned value + (i + 1) to int before negating to avoid compiler warning. + Thanks to Matthias Kerkhoff for pointing + this out. + + * examples/Threads/context_switch_time.cpp (main): added + ACE_SCOPE_PROCESS param to ACE_Sched_Params instances so + that the test works on WIN32. Thanks to Luca Priorelli + for identifying this problem. + + * ace/Registry.{h,cpp},Registry_Name_Space.{h,cpp},Svc_Conf_Tokens.h, + Svc_Conf_{l,y}.cpp,Timer_{Heap,List}.cpp,config-aix-4.2.x.h, + config-dgux-4.11-epc.h,config-mvs.h,config-sco-5.0.0-fsu-pthread.h, + config-sco-5.0.0-mit-pthread.h,config-sco-5.0.0-nothread.h: + added CVS header (Id wrapped in $). + + * netsvcs/clients/Logger/indirect_logging.cpp (main): declare loop + index as signed int to avoid signed/unsigned comparison. + +Tue Mar 11 07:34:04 1997 Douglas C. Schmidt + + * tests/Timer_Queue_Test.cpp: Added some code to illustrate how + the new handle_close() hook for ACE_Timer_{Heap,List} work. + + * ace/Timer_Heap.cpp (cancel): Modified the Timer_Heap and + Timer_Queue so that it will call the handle_close() hook when + Event_Handler's are cancelled. This is necessary to reclaim + resources. Thanks to Hamutal Yanay + for suggesting this. + + * ace/Event_Handler.h (signal): Added a TIMER_MASK, which is + passed to handle_close() when a timer is cancelled. + + * ace/Log_Msg.cpp (log): Fixed a bug by setting LPTSTR lpMsgBuf = + 0 on line 524. Thanks to Mark Wright for + reporting this. + +Sun Mar 10 13:06:04 1997 Douglas C. Schmidt + + * examples/Mem_Map/IO-tests: Fixed a small bug in "IO_Test.cpp" + file. In the "int Mmap1_Test::run_test" method I inserted an + lseek to rewind the output file. With this correction the speed + go up due to IO cache. Thanks to Sandro Doro + for reporting this. + +Sun Mar 9 18:24:37 1997 Prashant Jain + + * java/src/IOCntlMsg.java (IOCntlMsg): Added two new + classes/files, namely IOCntlCmds and IOCntlMsg. + + * java/src/Task.java: Added accessors to get/set the flags of the + Task. + +Sun Mar 9 13:06:04 1997 Douglas C. Schmidt + + * ace/Reactor: Fixed an evil bug where the expression + + if (handle >= 0 || handle < this->max_handlep1_) + + should be + + if (handle >= 0 && handle < this->max_handlep1_) + + Thanks to Mark Wright for reporting this. + +Sun Mar 9 13:06:04 1997 Douglas C. Schmidt + + * apps/Gateway: Updated the Peer and Gateway applications so that + they don't try to register ACE_STDIN with the Reactor on Win32. + + * apps/Gateway: Changed a bunch of calls to + ACE_Reactor::remove_handler() so that it no longer tries to + remove descriptor 0, but instead uses ACE_STDIN. Naturally, + this doesn't work due to the way that Win32 implements select() + but at least it compiles... Thanks to Elliot Lau + for reporting this. + + * apps/Gateway/Gateway/File_Parser: Changed the enumerated type + ERROR to PARSE_ERROR to avoid a name clash with a symbol + reserved by Win32 (barf). Thanks to Elliot Lau + for reporting this. + +Sat Mar 8 12:37:44 1997 Douglas C. Schmidt + + * ace/Log_Msg.cpp: Changed the implementation of ACE_Log_Msg so + that all accesses to the lock_ are now through a Singleton. + This makes it possible to define multiple instances of + ACE_Log_Msg within the same thread. Thanks to Jeff Morgan + for helping track this down. + + * Added support for SCO 5.0. Thanks to Auturo + for these patches. + +Thu Mar 06 13:24:04 1997 David L. Levine + + * ace/OS.i (gettimeofday): moved declaration of "result" so + that it's not declared on VxWorks, where it's not needed; + (stat): added cast of file arg to char * for VxWorks; + (thr_getprio): added missing "#else" before ACE_NOTSUP_RETURN (-1). + Thanks to Dave Mayerhoefer for + reporting these. + + * ace/OS.cpp (sched_param): with STHREADS, map ACE_SCOPE_THREAD + to ACE_SCOPE_PROCESS'. + + * ace/Svc_Conf_l.cpp: commented out YY_BREAK after ace_yyterminate () + to avoid GHS compiler warning about unreachable statement. + Thanks to Dave Mayerhoefer for + reporting this. + + * ace/ace.mak: removed Thread_Priority and renamed Scheduling_Params + to Sched_Param. + + * examples/IPC_SAP/SOCK_SAP/FD-unserver.cpp (handle_client): + added "l" qualifier for sprintf of ACE_OS::getpid (). + + * tests/Priority_Task_Test.cpp, + examples/Threads/{context_switch_time.cpp,Makefile}: + adapted to new thread priority/ACE_Sched_Params. + +Wed Mar 5 14:33:04 1997 Douglas C. Schmidt + + * ace/UNIX_Addr.cpp: Enhanced the implementation of set() so + that it works correctly on MVS, which has a different definition + of struct sockaddr_un: + + struct sockaddr_un { + unsigned char sun_len; + unsigned char sun_family; + char sun_path[108]; + }; + + Thanks to Chuck Gehr for reporting + this. + +Wed Mar 05 14:47:14 1997 David L. Levine + + * ace/OS.{h,cpp},Makefile; also, renamed Scheduling_Params.* to + Sched_Params.* and removed Thread_Priority.*: + + Major change in scheduling parameters interface: + The key change is that there is no longer a special thread priority + enum. Thread_Priority was changed to int, so applications can do + whatever they want. The ACE_Sched_Params class has some static + functions to help do this portably. + + Here are the changes from the ACE 4.1.3: + + 1) ACE_Thread_Priority: removed this class. + + It contained "priority class" and "thread priority". + "Priority class" is platform-specific and doesn't + need to be visible in ACE; it is subsumed by scheduling policy, + see below. "Thread priority" is replaced by the global + ACE_Sched_Priority typedef in ace/OS.h, see next change. + + 2) ace/OS.h: added ACE_Sched_Priority typedef (to int) + and ACE_SCOPE_THREAD. + + 3) ace/OS.h: added scheduling policy #defines: ACE_SCHED_OTHER, + ACE_SCHED_FIFO, and ACE_SCHED_RR. There's an ACE_Sched_Params:: + Policy typedef that can take one of these values. + + 4) ACE_Sched_Params: added priority_min (), priority_max (), + next_priority (), and previous_priority () functions. All + require an ACE_Sched_Params::Policy argument and take an + optional scope argument (to support the distinct thread + and process priorities on DEC UNIX). + + min_priority () and max_priority () have platform-specific + and policy-specific values, and direction (the min value may + be higher than the max value). The increment and decrement + operations allow applications to iterate over them, etc., + without explicitly specifying the direction of the priority + (0 for high or low priority). + + 5) The only way to apply ACE_Sched_Params is through + ACE_OS::sched_params (const ACE_Sched_Params &). + (This is not really a change, except for the name change from + ACE_OS::set_sched_params (). + + It sets both policy and priority of current thread or + process (depending on the scope in ACE_Sched_Params). + Not all combinations of policy, priority, and scope are + legal on all platforms. Unfortunately, I see no way around + this, because the intersection of legal ranges + on our supported platforms is empty. If an illegal request + is made, ACE_OS::sched_params () sets errno to EINVAL and + returns -1. + + 6) added ACE_OS::thr_setprio (const ACE_Sched_Priority prio) + to set the current thread's priority, only. + + Many thanks to Thilo Kielmann + for his careful review of this class design, thoughtful comments, + and assistance with implementation, especially for PTHREADS + platforms. + +Wed Mar 5 14:36:59 1997 Irfan Pyarali + + * SString.cpp: Fixed ACE*String initialization bugs. Thanks to + jmorey@tbi.com (John Morey) for reporting this. + +Wed Mar 5 14:33:04 1997 Douglas C. Schmidt + + * ace/OS.i: Fixed a bug in gethrtime + + const ACE_Time_Value now = ACE_OS::gettimeofday (void); + + which should be + + const ACE_Time_Value now = ACE_OS::gettimeofday (); + + Thanks to Chuck Gehr for reporting + this. + +Tue Mar 4 16:37:26 1997 Douglas C. Schmidt + + * examples/IPC_SAP/SOCK_SAP/CPP-unserver.cpp (main): Make life + easier by doing an unlink(rendezvous) before reopening the + UNIX-domain socket. Thanks to Jeff Morgan + for suggesting this. + +Sun Mar 02 19:58:00 1997 David L. Levine + + * ace/config*.h: removed #define of ACE_HAS_INLINED_OSCALLS + because it's no longer needed in the config files: it's + #defined in OS.h if needed. + +Sun Mar 2 17:14:29 1997 Douglas C. Schmidt + + * include/makeinclude: Updated all the platform-*g++.GNU files so + that they no longer -D__ACE_INLINE__ (since this is handled in + the the config-*g++.h files). + + * ace: Updated all the config-*g++.h files so that they now + #define __ACE_INLINE__ rather than having this set in the + platform_*.GNU file. This makes ACE easier to build and + integrate with other software packages. + +Fri Feb 28 02:22:33 1997 Douglas C. Schmidt + + * ace/SOCK_*: There were problems starting UDP broadcast servers + (all using the same well known port number) multiple times on + one machine (this is very useful test distributed applications + on one single machine). Setting the SO_REUSEADDR option for the + broadcast socket allows binding of a socket that is already in + use and thus allows us to start more than one broadcast servers + in parallel on one machine. Thanks to Dieter Quehl + for this fix. + + Therefore, I patched ACE_SOCK_Dgram_Bcast, ACE_SOCK_Dgram and + ACE_SOCK to include this feature. In addition, I also changed + ACE_SOCK_Connector/ACE_SOCK_Acceptor to use this feature instead + of calling setsockopt() there explicitly. + + * examples/IPC_SAP/SOCK_SAP/FD-unserver.cpp (main): Fixed up the + use of ACE_OS::fork() here to use the new "named" version. + + * ace/OS.h: Added a clever new wrapper function called fork (const + char *program_name), which calls fork() and then automatically + calls ACE_LOG_MSG->sync (program_name) to sync up the program + name. This eliminates a common source of error when forking + children and using ACE_Log_Msg::log(). + + * examples/IPC_SAP/SOCK_SAP/FD-un{client,server}.cpp: Updated the + FD client and FD server programs so that it is now a concurrent + server. + + * ace/config-mvs.h: Added #define ACE_LACKS_TCP_H for MVS. Thanks + to Chuck Gehr for pointing this out. + + * ace/OS.h: Added a new #define ACE_LACKS_TCP_H that skips the + inclusion of the netinet/tcp.h file if it isn't on the platform. + + * ace/OS.i (thr_cancel): Changed the line + + ACE_UNUSED_ARG (t_id); + + to + + ACE_UNUSED_ARG (thr_id); + + Thanks to Chuck Gehr for reporting + this. + + * ace/SString.cpp: Fixed up all the ACE_[CSW]String code so that + always allocates a rep_ even in the null constructor. This + saves us from having to handle odd special cases later on... + Thanks to John Morey for reporting this. + + * ace/Service_Repository.cpp (close): Changed the order in which + services are destroyed when the Service Configurator is closed. + Currently, services are destroyed in the order in which they are + created according to the svc.conf file. Now, we shut them down + in reverse order. This makes more sense when services are + related, i.e., one service has to be started before another. + Thanks to Karlheinz for this suggestion. + +Fri Feb 28 12:13:09 1997 David L. Levine + + * ace/OS.h: fixed definition of ACE_TIMER_SKEW. Thanks + to Chuck Gehr for pointing this out. + +Thu Feb 27 21:36:28 1997 David L. Levine + + * ace/OS.{i,cpp} (gethrtime): support on all platforms by + using ACE_OS::gettimeofday () if there is no native high + resolution timer. Moved ACE_OS::getimeofday () definition + toward top of OS.i so that it is always defined before + being called. Finally, expanded gethrtime () support from + linux to __GNUC__ with ACE_HAS_PENTIUM; it should work on + platforms such as VxWorks with gcc on Pentiums. + + * ace/config-osf1-4.0-{,g++}.h: added ACE_HAS_CLOCK_GETTIME. + Thanks to Thilo Kielmann + for pointing this out. + +Thu Feb 27 17:06:12 1997 + + * ace/High_Res_Timer.h (get_env_global_scale_factor): This static + method will set the global_scale_factor to the value in an + environment variable (ACE_SCALE_FACTOR by default). + + * ace/High_Res_Timer.*: Changed all calculations to divide by + scale_factor before doing / and %. This must be done before the + mod for correctness. + + * ace/Profile_Timer.i (start): Changed start and stop methods to + call ACE_High_Res_Timer::gettimeofday. This should allow + greater timing accurracy. + + * ace/High_Res_Timer.h (global_scale_factor): Added a static + global_scale_factor that allows applications to set one scale + factor for all high res timers. This is important for platforms + like intel where the scale factor will vary based on the + processor clock speed. + + * ace/High_Res_Timer.i (gettimeofday): This static method calls + ACE_OS::gethrtime and converts to an ACE_Time_Value based on the + global_static_factor. + +Wed Feb 26 18:28:35 1997 Douglas C. Schmidt + + * ACE-install.sh: Added some fixes for the ACE-install.sh script. + Thanks to Eugene R. Somdahl for reporting these. + + * ace/Connector.cpp (handle_close): Added a test to see if the + reactor_ is NULL and if it is, don't bother trying to use it to + clean up. Thanks to Paul Han for this + suggestion. + +Tue Feb 25 21:19:57 1997 David L. Levine + + * ace/OS.h,config-sunos*.h: default ACE_TIMER_SKEW to 0, + and override to 10 ms in all Solaris config files. + + * ace/Svc_Conf_l.cpp,Makefile: #undef ACE_HAS_TERM_IOCTLS + so that /usr/include/sys/termios.h won't be included; it + #defines ECHO, and Svc_Conf_l.cpp has an ECHO symbol. + + * ace/ACE.cpp (sock_error): added ACE_UNUSED_ARG (error);. + + * ace/Timer_Queue.cpp (ctor): rearranged initializers to + match declaration order. + +Tue Feb 25 19:57:54 1997 + + * ace/Timer_Queue.cpp (gettimeofday): Added gettimeofday accessors + on the Timer_Queue. The default implementation calls + ACE_OS::gettimeofday. Applications can specify, via pointers to + functions, that a timer queue use an alternate gettimeofday + implementation (e.g., a high resolution timer). + + * ace/Reactor.cpp (schedule_timer): The Reactor no longer calls + ACE_OS::gettimeofday. Instead, it calls + Timer_Queue::gettimeofday. + + * ace/ReactorEx.cpp (schedule_timer): The ReactorEx no longer calls + ACE_OS::gettimeofday. Instead, it calls + Timer_Queue::gettimeofday. + +Tue Feb 25 17:40:57 1997 Douglas C. Schmidt + + * ace/Log_Msg.cpp: Updated the 'p' option of the log() method to + use the new ACE::sock_error() method for cases where + FormatMessage() fails. + + * ace/ACE: Added a new sock_error() method to class ACE which + returns the appropriate message for each WinSock error code. + This makes up for an apparent oversight in Win32. Thanks to + Michael R. MacFaden" for this. + +Tue Feb 25 01:33:06 1997 Douglas C. Schmidt + + * ace/OS.h: Moved outside of the VXWORKS #ifdef + since it seems to be available on other platforms (e.g., + Solaris). If people find this not to be the case on all + platforms please let me know and I'll #ifdef it. Thanks to + Sumedh Mungee for reporting this. + +Tue Feb 25 16:20:29 1997 Irfan Pyarali + + * examples/Connection/non_blocking/CPP-acceptor.cpp: Added a + specific checl for timeouts. Also, changed + ACE_PEER_ACCEPTOR_ADDR to ACE_PEER_STREAM_ADDR + + * examples/Connection/non_blocking/non-blocking.{mak,mdp}: New + project files for Win32. + + * ace/Log_Msg.cpp: Minor changes. + +Mon Feb 24 17:16:06 1997 Douglas C. Schmidt + + * ace/Log_Msg.cpp (ACE_Log_Msg): Enable the thread-specific + tracing flag by default. This ensures that tracing will work + "out of the box." + + * ace/config-sunos5.[45]-g++.h: Added a #define for + ACE_HAS_TERM_IOCTLS. Thanks to Joey Zhu for + reporting this. + + * ace/Synch.cpp (acquire): Simplified the recursive mutex logic + for acquire(). Thanks to Arthur J. Lewis" + for reporting this. + + * examples/Connection/non_blocking/CPP-acceptor.cpp (init): Added + a #ifdef for ACE_WIN32 so that we don't register the signal + handler for SIGPIPE since it's not supported on Win32. Thanks + to Ivan Murphy for reporting this + problem. + + * examples/Connection/non_blocking: The SPIPE examples in + (test_spipe_{acceptor,connector}.cpp) aren't ported to Win32 + yet. They currently don't work because ACE_SPIPE*'s can't be + registered with the ACE_Reactor (which only works with sockets). + I've #ifdef'd these examples so that they don't get compiled on + Win32. Thanks to Ivan Murphy for + reporting this problem. + +Mon Feb 24 20:28:10 1997 David L. Levine + + * ace/OS.h: use signed __int64 for ACE_hrtime_t because VC++ + won't convert unsigned __int64 to double. Thanks to Irfan + for reporting this. + + * include/makeinclude/platform_{irix5.3_g++,linux*,m88k, + osf1_4.0_g++,sco-nothread,sunos*g++,unixware_g++}.GNU: + changed C++ compiler (CXX) from gcc to g++ so that libg++ + will be linked in. Thanks to James CE Johnson + for suggesting this. + + * examples/IOStream/{client,server}/Makefile,tests/Makefile: + removed -lg++, when gcc is the compiler, because it's no + longer needed with g++ as the compiler. + +Sat Feb 22 23:03:45 1997 David L. Levine + + * ace/OS.i: restored version 4.89 and 4.90 changes that + were lost in version 4.91. + + * ace/OS.{i,cpp},config-linux*.h: added ACE_OS::gethrtime () + support for Linux on Pentiums. + + * ace/High_Res_Timer.*: changed scale_factor type from + u_long to double so that it can be less than 1. + + * ace/Thread_Priority.cpp: "linux" instead of "LINUX". + + * tests/Priority_Task_Test.cpp (open): set this->priority_ because + an assertion uses it. Also, use ACE_NORMAL_PRIORITY_CLASS so that + root doesn't have to run the test on Solaris. + +Sat Feb 22 22:07:35 1997 Chris Cleeland + + * tests/Priority_Task_Test.cpp (open): Now use + ACE_Thread_Priority while setting the priority of the new + thread. + + * ace/Thread_Priority.cpp (convert_to_os_priority): Changed + return type for this to 'int' from 'long' on Linux. Thanks + to James CE Johnson for pointing this + out! + + * ace/OS.i (thr_cancel): Corrected erroneous macro argument. + Thanks to James CE Johnson for pointing + this out! + +Sat Feb 22 17:00:59 1997 + + * ace/OS.i (gethrtime): Added support for intel's RDTSC + instruction for pentium architectures. + +Sat Feb 22 10:57:47 1997 Douglas C. Schmidt + + * ace/Stream.cpp (open): Make sure that if we allocate the Tasks + in the Stream head and the Stream tail that we set the M_DELETE + flag so that the close() method will clean up the memory. + Thanks to David Levine and Purify for noticing this problem. + +Fri Feb 21 08:06:41 1997 Douglas C. Schmidt + + * ace/OS.i: Yikes, it looks like the Solaris and the POSIX version + of sigwait() are different! The Solaris version returns the + signal number, whereas the POSIX version returns 0 on success, + errno on failure, and sets a parameter with the signal on + success. I've fixed the ACE_OS C++ wrapper so that the right + thing happens, i.e., errno is always set to the error (if + sigwait() returns -1) and the signum is always returned as the + argument and the return value on success ... Thanks to Harry + Gunnarsson for reporting this. + +Fri Feb 21 11:01:22 1997 David L. Levine + + * ace/Thread_Priority.cpp: fixed return type of + convert_to_os_priority () for Linux. Thanks to + James CE Johnson for pointing this out. + + * examples/Shared_Malloc/test_malloc.cpp, + examples/System_V_IPC/SV_Message_Queues/{T,}MQ_Server.cpp (main): + added ACE_UNUSED_ARG (sa);. + +Fri Feb 21 04:12:31 1997 + + * ace/OS.h: Added ACE_SEH_FINALLY. + + * ace/ReactorEx.h: Added ACE_ReactorEx_Test as a friend class. I + think we should have one such friend class for all classes in + ACE. + + * examples/Reactor/ReactorEx/test_exceptions.cpp: New test which + checks how ReactorEx deals with structured exceptions thrown by + user code + + * ace/ReactorEx.cpp (safe_dispatch): Added protection against + structured exceptions caused by user code when dispatching + handles + +Thu Feb 20 17:32:54 1997 Douglas C. Schmidt + + * apps/Gateway: Added a new -v flag to the peerd and gatewayd + applications so that they will print out the strings that are + passed to them. This makes it easier to debug and see what's + happening. + +Wed Feb 19 19:39:06 1997 Douglas C. Schmidt + + * apps/Gateway/Gateway/Concrete_Proxy_Handlers.cpp (recv): Removed + the VERBOSE #ifdefs since they weren't used and were causing + compile errors. Thanks to Bert Craytor + for reporting this. + +Wed Feb 19 00:39:50 1997 Douglas C. Schmidt + + * examples/ASX/Event_Server: Updated the README file a bit to + clarify some loose ends. The documentation now explains + precisely how to start up the transceivers correctly. Thanks to + Patty Genuald for suggesting this. + + * include/makeinclude: Removed the default symlink for + platform_macros.GNU since it is "Solaris-biased" ;-). Thanks to + Amos Shapira for reporting this. + +Wed Feb 19 14:41:18 1997 Tim H. Harrison + + * ace/Reactor.cpp: Modified to use timer_queue_->gettimeofday(). + + * ace/Proactor.cpp: Modified to use timer_queue_->gettimeofday(). + + * ace/ReactorEx.cpp: Modified to use + timer_queue_->gettimeofday(). Also had to modify the + ReactorEx_Notify mechanism to use the ReactorEx's timer queue to + call gettimeofday. + + * ace/Timer_Queue.h: Added a gettimeofday method. This allows + applications to replace the timer mechanism used by the + Reactors. The default implementation returns + ACE_OS::gettimeofday. However, a real-time application can + inherit from Timer_Queue and override gettimeofday to return a + value from a high resolution timer. + + * STL/bool.h: Changed the defines for type bool. First, bool is no + longer defined for WIN32 since yvals.h typedefs it already. + Also, I moved the defines out the namespace. I'm not sure if + that's the right thing to do. + +Tue Feb 18 16:41:02 1997 Douglas C. Schmidt + + * include/makeinclude: Added minor enhancements to rules.local.GNU + and wrapper_macros.GNU so that it works with MVS. Thanks to + Chuck Gehr for this. + + * include/makeinclude: Added a new platform_mvs.GNU file that + supports builds on MVS! Thanks to Chuck Gehr + for this. + + * tests/TSS_Test.cpp (worker): To get TSS_Test.cpp to compile on + MVS we changed line 69 from: + + ACE_thread_key_t key = 0; + + to: + + ACE_thread_key_t key = ACE_OS::NULL_key; + + and line 122 from: + + key = 0; + + to: + + key = ACE_OS::NULL_key; + + Thanks to Chuck Gehr for reporting + this. + + * ace/Reactor.cpp (dispatch): Fixed the dispatching logic so that + we bail out as soon as we discover that our state has changed. + Thus, we'll recompute the fd_sets used for select(). + +Tue Feb 18 19:02:53 1997 + + * ace/ReactorEx: + + (a) Made wakeup_all_threads() public. Thanks to Hamutal Yanay + for suggesting this. + + (b) Change closed_for_business_ to open_for_business_. Also made + sure that open and close can potentially be called multiple + times from multiple threads. + + (c) Changed unbind and unbind_all such that they iterate through + all the handles. + + (d) Added a check to see if the handle has been scheduled for + deletion before dispatching it. + +Tue Feb 18 21:24:57 1997 David L. Levine + + * ace/IOStream.h,README: replaced ACE_WIN32 conditional with + ACE_LACKS_IOSTREAM_FX. + + * ace/config-{mvs,win*}.h: added #define ACE_LACKS_IOSTREAM_FX. + Thanks to Chuck Gehr for pointing + out the need for this support for MVS. + + * examples/Reactor/Misc/test_demuxing.cpp: removed unused + variable "done". + + * examples/Reactor/Misc/test_signals_1.cpp (main), + examples/Reactor/Ntalker/ntalker.cpp (main): + added ACE_UNUSED_ARG (sig);. + +Tue Feb 18 17:15:24 1997 Tim H. Harrison + + * ace/ace.mdp, ace/mak: Modified release configuration to build + acer.dll. + +Tue Feb 18 11:43:04 1997 David L. Levine + + * ace/Log_Msg.cpp: removed destructor because it's not declared + and it's empty. + + * ace/OS.i (thr_setprio): added another case (that is NOTSUP) + for platforms with Pthreads and with LACK_SETSCHED. Thanks to + Chuck Gehr for pointing this out. + + * tests/Reactor_Notify_Test.cpp (main): added shutdown flag so + that normal termination reaches ACE_END_TEST. + + * tests/Reactors_Test.cpp (worker): changed "timeout" message to + "Reactor shutdown" because that indicates normal termination, + and won't fool the one-button test. + + * examples/Mem_Map/IO-tests/test_io.cpp (main): added + ACE_UNUSED_ARG (sa);. + + * examples/Misc/test_trace.cpp (main): added ACE_UNUSED_ARG + for sig1 and sig2. + +Tue Feb 18 03:50:10 1997 Irfan Pyarali + + * ace/ReactorEx: + + (a) Added a closed_for_business_ flag so that handle_events() + cannot be called after the ReactorEx has been closed down. + + (b) Transfer of ownership of the ReactorEx to a new owner has + changed. The transfer will not complete until all threads + are ready for it (just like the handle set). + ReactorEx->update_state() now looks out for changes in + ownership. + + * examples/Reactor/ReactorEx/test_MT.cpp: + + (a) The test now terminates and number of iterations can be + specified on the command line. + + (b) Graceful shutdown of ReactorEx is now exercised in the + test. This is a change for the earlier infinite loop. This + also shows how to gracefully close ReactorEx which is being + shared by multiple threads. + + (c) Timers were added to the test. + + * ace/config{win32}: Added flag ACE_LACKS_LINEBUFFERED_STREAMBUF. + +Mon Feb 17 22:37:35 1997 Tim H. Harrison + + * ace/Log_Msg.h (ACE_RETURN): Modified all ACE_RETURN macros to + use ACE_OS::last_error instead of errno. This makes these more + portable to Win32. + + * ace/Log_Msg.cpp (log): Modified Win32 version to use + FormatMessage if errnum is greater than sys_nerr. + + * ace/OS.i (last_error): Modified Win32 version to return + GetLastError if errno == 0. + +Mon Feb 17 18:32:29 1997 Douglas C. Schmidt + + * ace/OS.h: Protected the #ifdef for CLOCK_REALTIME so that it + won't conflict with an existing macro in AIX. Thanks to Chris + Lahey for this. + + * ace/Local_Name_Space_T.h: Added Local_Name_Space.h to + Local_Name_Space_T.h so that templates will work correctly on + AIX. Thanks to Chris Lahey for this. + + * tests: Added a new test, Reactor_Notify_Test.cpp, which tests + out the new max_notify_iterations() method on the Reactor. + + * ace/Reactor: Finished rewriting and testing the new dispatching + logic of the Reactor. The new implementation guards against + pathological cases where ACE_Event_Handler::handle_*() methods + remove registered ACE_Event_Handler objects whose handles are + pending in the dispatch_set. Previously there was no good way + to guard against this. Now, it should be handled automatically. + + * ace: Added many minor fixes to remove warnings with the SGI C++ + compiler. Thanks to Gonzalo Diethelm for + suggesting this. + + * include/makeinclude/platform_irix6.2_sgic++.GNU: Turned on all + the warnings for the SGI C++ compiler. Thanks to Gonzalo + Diethelm for suggesting this. + +Mon Feb 17 20:59:47 1997 David L. Levine + + * ace/IOStream.h: added null ipfx (), etc., methods for ACE_WIN32 + because its iostream class doesn't have them. + + * ace/OS.h: added #include of on VxWorks. + + * ace/Pipe.cpp (open): enabled TCP_NODELAY on VxWorks now that + OS.h #includes . + + * ace/ReactorEx.h: made ACE_ReactorEx_Handler_Repository destructor + virtual because the class has other virtual functions. + + * tests/IOStream_Test.cpp: removed ACE_WIN32 #ifndef, and + removed q_char bool conversion operator because it shouldn't + be needed. + + * examples/Reactor/Misc/pingpong.cpp (handle_input): cast buf_len + to ssize_t to avoid signed/unsigned comparison. + + * examples/Service_Configurator/IPC-tests/client/\ + remote_dgram_client_test.cpp (main): cast mmap.size () to + ssize_t to avoid signed/unsigned comparison. + +Mon Feb 17 09:25:08 1997 Chris Cleeland + + * ace/config-linux-lxpthreads.h: Bumped the Linux kernel version + number assigned to the symbol LINUX. Also added conditional + defines for PTHREAD_{MAX,MIN}_PRIORITY when using Xavier Leroy's + LinuxThreads. + + * ace/Thread_Priority.cpp: Added convert_to_os_priority() for Linux. + +Mon Feb 17 03:15:48 1997 Irfan Pyarali + + * tests/SOCK_Test.cpp (server): Changed recv_n() to recv(). + + * tests/tests.{mak,mdp}: Added two new tests: IOStream and + Reactor_Notify. + + * ace/Reactor: Removed all special checks for setting + ACE_Reactor::max_notify_iterations_ on WIN32 to be 1. This was + made possible after we figured out that the errno was being + reset after the recv() call in handle_input(). This allows + ACE_Reactor_Notify::handle_input() to serve upto + ACE_Reactor::max_notify_iterations_ notifications in one shot + rather than just 1 on WIN32. This should speed up the Reactor on + WIN32 platforms. + +Sun Feb 16 12:23:23 1997 Douglas C. Schmidt + + * ace/Reactor.cpp: Totally rewrote the ACE_Reactor's dispatching + mechanism so that it now keeps track of whether the state of the + wait_set_ has changed during a dispatch (i.e., whenever + register_handler_i() or remove_handler_i() is called). If the + wait_set_ state *has* changed, then we bail out and rerun + select() in order to get the latest changes. + + * ace/Reactor.cpp: Changed the implementation of the + ACE_Reactor_Notify class so that (1) it short-circuits a trip + through the ACE_Reactor::notify_handle() method (after all, it's + just going to call its own handle_input() method back) and (2) + the ACE_Reactor_Notify::handle_input() method now returns a + count of the number of handlers that it dispatched. + + * ace/Log_Msg.h: Added a (%P|%t) so that we now print out the + process id and thread number for failed ACE_ASSERT() calls. + + * tests: Removed the unnecessary template specializations of + ACE_Atomic_Op since this is already done + in libACE. + + * ace/Reactor.cpp: Removed the #ifdef preventing the enabling of + non-blocking mode for the recv() side of the Reactor's + notification pipe (socket) for Win32. I believe that with the + new max_notify_iterations scheme we should be all set. + + * ace/ReactorEx.cpp: Added an identical API for bounding the + max_notify_iterations() for ReactorEx. + + * ace/Reactor.cpp: Enhanced the Reactor's notify() mechanism so + that it is now possible to set the max_notify_iterations(), + which limits the number of times that the + ACE_Reactor_Notify::handle_input() method will iterate and + dispatch the ACE_Event_Handlers that are passed in via the + notify pipe before breaking out of its recv() loop. This is + necessary to keep from starving out other Event_Handlers. + Thanks to Rod Skinner for pointing out the + need for this. + + * ace/Reactor.cpp: Fixed a bug in the WIN32 + ACE_Reactor_Notify::handle_input() logic. We were calling + requeue_position(0) when we should have been calling renew(). + +Sat Feb 15 11:46:39 1997 Douglas C. Schmidt + + * ace/ACE.cpp: It appears that VxWorks doesn't support fcntl(). + However, it does seem to support ioctl(). Therefore, that's how + we'll set the descriptors into non-blocking mode. Thanks to + Dave Mayerhoefer for reporting this. + + * ace/SOCK_Stream.h: Corrected the documentation for + ACE_SOCK_Stream::recv_n (void *buf, size_t len, int flags, const + ACE_Time_Value *timeout). Thanks to Paul Roman + for reporting this. + + * ace/SOCK_Stream.i (recv_n): Fixed a minor bug in the + SOCK_Stream.i line 38: + + ACE_TRACE ("ACE_SOCK_Stream::send_n"); + + should be + + ACE_TRACE ("ACE_SOCK_Stream::recv_n"); + + Thanks to Paul Roman for reporting this. + +Fri Feb 14 00:40:14 1997 Douglas C. Schmidt + + * ace/TTY_IO.cpp (control): Moved the drop out timer value from + the ACE struct to the WinNT struct. Thanks to Brad Flood + for this fix. + +Thu Feb 13 21:24:17 1997 + + * ace/OS.i (event_wait): Fixed the missing check for success. + + * ace/Synch: Fixed problems with multiple removal of + resources. Thanks to Bert (Bcraytor@aol.com) for pointing this + out. + + * examples/Threads/test.{mdp,mak}: Reorganized project so that it + is easier to use. + + * examples/Threads: Small changes to make tests run faster. + +Thu Feb 13 01:49:38 1997 Irfan Pyarali + + * ace/OS.i (stat): Added stat() to ACE_OS. + + * apps/jaws: The ACE web server has now been ported to Win32. + + * ace/ReactorEx: Add a new version of remove_handler(). + + * examples/Reactor/ReactorEx/test_MT.cpp: Fixed stuff so that only + are activated. + +Wed Feb 12 22:58:15 1997 Douglas C. Schmidt + + * ace/ReactorEx: Made minor changes to the ReactorEx. + + * examples/Reactor/ReactorEx/test_MT.cpp: Updated Irfan's new + ReactorEx test to use ACE_Tasks. + +Wed Feb 12 00:08:42 1997 Irfan Pyarali + + * ace/ReactorEx: Finished a complete rewrite of + ReactorEx. The new version allows multiple threads of + control to wait simultaneously in + ::WaitForMultipleObjects(). This was difficult because the + set of ACE_HANDLEs used in ReactorEx->handle_events() is + shared between all threads. We devised a clever protocol + that ensures all changes to the handle set are + serialized. This serialization was achieved by using + multiple (auto and manual) events and mutexes and by taking + advantage of the "waitAll" semantics of + WaitForMultipleObjects(). + + Concept of "owner" thread is introduced in ReactorEx. We + need to keep track of the "owner" because we don't want + multiple threads to try to expire timers. Therefore the + "owner" thread is the only one allowed to expire + timers. Also, the owner thread is the only thread which + waits on the internal notify handle (which is used to + dispatch explicit calls to + ACE_ReactorEx::notify(). Initially, the creator thread of + ReactorEx becomes the "owner" thread. Ownership can later be + transferred among threads, just as with the standard + ACE_Reactor. + + We also updated the Handler Repository since it now + keeps track of tuples to be added + and deleted from the current handle set at the appropriate + time (i.e., when all threads are out of + WaitForMultipleObjects() and have completed all necessary + dispatching). The Handler_Repository implements the update + protocol that is used to serialize changes to its internal + state. + + Two slots were added to the parameter in the + constructor and open methods of ReactorEx that will store + handles used for internal management. Therefore, users can add + upto MAXIMUM_WAIT_OBJECTS - 2 handles into ReactorEx. On + current WinNT platforms (e.g., 3.51 and 4.0) + MAXIMUM_WAIT_OBJECTS is 64. + + Note that the interface to ReactorEx did not change in this + process. Your existing code should work without changes. + Moreover, we've optimized the implementation so that if only + 1 thread calls ACE_ReactorEx::handle_events() the code is + very efficient. Moreover, you can dynamically add or remove + threads without having to register them with the ReactorEx. + + * examples/Reactor/ReactorEx/test_MT.cpp: This application tests + multiple threads simultaneously calling + ReactorEx->handle_events(). It also shows how different threads + can update the state of ReactorEx. + +Wed Feb 12 00:08:42 1997 Douglas C. Schmidt + + * ace/Synch: Added a remove() call to ~ACE_Thread_Mutex so that it + will be removed (and resources cleaned up) automatically when an + ACE_Thread_Mutex object goes out of scope. Thanks to Jay + Denkberg for reporting this. + + * ace: Added a new config file (config-irix6.2-sgic++-nothreads.h) + that works for non-Pthread versions of SGI 6.2. Thanks to Fred + LaBar for this. + + * ace/XtReactor: Fixed a bunch of minor bugs that crept into the + ACE_XtReactor. Thanks to Fred LaBar + for reporting this. + + * ace/OS.i (thr_getprio): Fixed a typo in the #ifdefs so that we + return ACE_NOTSUP_RETURN(-1) if threading isn't enabled. Thanks + to Fred LaBar for reporting this. + +Tue Feb 11 11:26:03 1997 David L. Levine + + * ace/OS.{h,i},config-vxworks*.h,README: added ACE_HAS_CLOCK_GETTIME, + and only support ACE_OS::clock_gettime if that's defined. + It can be supported on Solaris 2.5, but -lposix4 is then required. + + * ace/Thread_Priority.*: added increment () and decrement () + operations. + + * include/makeinclude/platform_sunos5_sunc++_4.1.GNU: + added -pta back to avoid link problems with template classes + that have virtual functions that are all inline, if inlining + is disabled. Though we don't see the problem, other 4.1 users do. + Thanks to mscallinan@CCGATE.HAC.COM for reporting this. + + * examples/Logger/simple-server/Logging_Handler.cpp (handle_input): + cast "len" to ssize_t to prevent mixed signed/unsigned comparison. + + * examples/Logger/simple-server/server_loggerd.cpp (main): + added ACE_UNUSED_ARG (sa);. + + * examples/Reactor/Misc/notification.cpp (Thread_Handler ctor): + changed type of n_threads argument from int to size_t to avoid + signed/unsigned comparison. + +Mon Feb 10 15:27:02 1997 Douglas C. Schmidt + + * ace/Timer_Queue: Added a virtual destructor so that subclasses + deleted via ACE_Timer_Queue *'s will call the right destructor. + Thanks to Stuart Powell for reporting + this. + + * ace/Timer_Heap.cpp: Added support for automatically growing + ACE_Timer_Heaps. This allows heaps to grow automatically as new + ACE_Event_Handlers are added dynamically. Thanks to Stuart + Powell for this enhancement. + + * ace/Memory_Pool: Added support that allows flags to be passed in + to the MMAP_Memory_Pool. This can be used to set the + appropriate type of backing store semantics (e.g., MAP_PRIVATE + and MAP_SHARED). Thanks to Fred LaBar + for providing this. + +Sun Feb 9 11:56:37 1997 Douglas C. Schmidt + + * ace/Map_Manager.cpp (bind_i): A recent change to Map_Manager + broke the Connector since errno was getting set to ENOENT rather + than EWOULDBLOCK. Thanks to Mark Rabotnikov + for finding this. + +Sun Feb 09 21:44:34 1997 David L. Levine + + * ace/ACE.{h,cpp}: added static u_long is_prime (). + + * ace/{OS.cpp,Thread_Priority.cpp}: added comment about thread + priorities only being tested for 1003.1C version of Pthreads. + Thanks to Thilo Kielmann + for suggesting this. + + * ace/OS.{h,i}: added ACE_OS::clock_gettime (). It allows + applications to get high-resolution time on POSIX systems. + + * ace/Future.cpp (dump): cast ref_count_ to an int because + g++ doesn't figure it out (it's an ACE_Atomic_Op, which does have an int conversion operator). + + * ace/Timer_List.cpp (constructor): added initializer for + timer_id_ to prevent unitialized memory read report from Purify. + + * tests/IOStream_Test.cpp,Makefile: added IOStream_Test, + complements of James CE Johnson . Very cool! + + * tests/Future_Test.cpp: replaced call to ::sin () + with one to ACE::is_prime () to remove dependency on libm. + + * examples/IPC_SAP/UPIPE_SAP/ex1.cpp (peer1, peer2): removed + unused variables c_addr and serv_addr: they were replaced by + a global. + + * examples/Threads/future{1,2}.cpp: replaced call to ::sin () + with one to ACE::is_prime () to remove dependency on libm. + + * netsvcs/clients/Naming/Dump_Restore/createfile.cpp: removed + #include of math.h, it wasn't needed. + +Sat Feb 08 15:19:50 1997 David L. Levine + + * ace/ReactorEx.h: commented out ACE_ReactorEx_Notify::message_queue_ + declaration if not ACE_WIN32 because Sun C++ chokes on it. + + * examples/IPC_SAP/{FILE,SPIPE}_SAP/client.cpp: declare "len" as + ssize_t to avoid signed/unsigned comparison. + +Fri Feb 7 01:13:05 1997 Douglas C. Schmidt + + * ace/OS.i (select): Simplified Chris' fixes for the weird + Linux select() semantics. + + * ace/OS: Added a new accessor method called waiters() in + ACE_cond_t that returns the number of waiters on the condition + variable. Thanks to Karlheinz for suggesting this. + + * ace/OS: Changed all the ACE_cont_t, ACE_rwlock_t, etc. so that + their fields are private, but made class ACE_OS a friend. + Applications should not be mucking with these fields since they + may change. + + * ace/OS.h: Fixed a minor typo where friend class ACE_rwlock_t + should be friend class ACE_OS. Thanks to Thilo Kielmann + for reporting this. + + * ace/Log_Msg.cpp: Added a destructor to ACE_Log_Msg and changed + ACE_TSS_cleanup so that it calls delete (ACE_Log_Msg *) ptr. + Thanks to Per Anderson for + reporting this. + + * tests/Map_Manager_Test.cpp: Create a file Map_Manager_Test_Key.h + and move the class Key into the include file. Include this *.h + file in Map_Manager_Test.cpp. This is needed for template + generation on AIX. Thanks to Chris Lahey for + pointing this out. + +Fri Feb 7 17:29:40 1997 Chris Cleeland + + * ace/OS.cpp (set_sched_params): added support for POSIX + threads. Thanks to Thilo Kielmann + for figuring it out and + for providing the code. + + * tests/Naming_Test.cpp (test_find): Changed final delete[] to + not try to delete a static buffer. :-( + + * tests/SOCK_Test.cpp (server): Added assertion test for + modified select timeval. + +Fri Feb 07 13:56:24 1997 David L. Levine + + * ace/{OS.cpp,Thread_Priority.cpp}: added ACE_Thread_Priority + support for Digital Unix. Thanks to Thilo Kielmann + for figuring the priorities + and priority classes out and for providing the code. + + * ace/High_Res_Timer.{h,cpp},config-linux*.h,README: + use struct timespec instead of timespec_t, because not all + platforms have the timespec_t typedef. Thanks to + Marius Kjeldahl for reporting this on Linux + and Chris Lahey for reporting it on AIX. + + * ace/IOStream.h: use "ssize_t send (...)", etc., instead of exact + function prototypes. + + * examples/IPC_SAP/TLI_SAP/db-server.cpp: declare struct member as + const char * instead of const char [] because it's not static and + the struct doesn't have constructors. + + * examples/Reactor/Multicast/server.cpp (Server_Events ctor): + reordered initializers to match declaration order. + +Fri Feb 07 05:08:51 1997 + + * ace/Synch.cpp (dump): Fixed access error. + + * ace/OS.h: Fixed ACE_rwlock_t friend declaration. + + * ace/OS.i: Moved ACE_cond_t::waiters() such that it is now + visiable to NT. Also fixed ACE_OS::cond_timed_wait by returning + the correct return value on a TIMEOUT. Also fixed typo in + ACE_OS::sema_wait. + +Thu Feb 6 20:25:13 1997 Chris Cleeland + + * ace/OS.i (select): Adapted ACE_OS::select methods for use on + platforms (such as Linux) that allow select(2) to modify its + struct timeval arg. New behavior is triggered by the define + ACE_HAS_NONCONST_SELECT_TIMEVAL. Thanks to Jorn Jensen + for reporting this! + +Thu Feb 06 09:48:43 1997 David L. Levine + + * ace/config-sunos-sun*.h,README: added + ACE_LACKS_LINEBUFFERED_STREAMBUF and ACE_LACKS_SIGNED_CHAR. + + * ace/IOStream.{h,cpp}: support + ACE_LACKS_LINEBUFFERED_STREAMBUF and ACE_LACKS_SIGNED_CHAR + so that this builds with SunC++. + + * examples/IOStream/client/iostream_client.cpp: + reordered args and fixed argv indexes. + + * examples/IOStream/server/iostream_server.cpp: + use ACE_DEFAULT_SERVER_PORT for default port. + + * tests/Naming_Test.cpp (randomize): changed type of "size" arg to + size_t to avoid compiler warnings about signed/unsigned comparison. + +Thu Feb 06 09:40:47 1997 Chris Cleeland + + * ace/config-linux*.h: added typedef of timespec_t. + +Wed Feb 5 01:45:03 1997 Douglas C. Schmidt + + * ace/OS.i: Changed the Win32 implementation of all methods that call + WaitForMultipleObjects() so that errno is set to + WAIT_ABANDONED if the mutex is abandoned. This makes it + possible for users to understand why ACE_OS methods that use + synchronization operations fail. Thanks to Ivan Murphy + for reporting this problem. + + * ace/IOStream.cpp (ACE_Streambuf): Moved the const initialization + from the header file to the constructor since this is the only + portable way to do this. Thanks to Michael Maxie + for reporting this. + + * ace/OS.i: Updated the call to thr_setprio() for pthreads so that + it first determines the existing scheduling parameters and then + updates the priority. Thanks to Thilo Kielmann + for help with this. + + * ace/config-osf1-4.0*.h: Updated ACE_NEEDS_HUGE_THREAD_STACKSIZE + to be 1 mega to minimize porting surprises. Thanks to Thilo + Kielmann for help with this. + + * tests/Naming_Test.cpp: Cleaned up a few minor things related to + int i = 0 vs. size_t i = 0. + + * ace/SOCK_Dgram.cpp: Added a new macro called + ACE_HAS_SOCKADDR_MSG_NAME, which is used on platforms (e.g., + DG/UX) that require a cast to (struct sockaddr *) for the + msg_name field of struct msghdr. + +Wed Feb 05 10:45:41 1997 David L. Levine + + * ace/IOStream.h: replaced __*manip with expanded types, because + Sun C++ doesn't have those typedefs; and added complete prototypes + for send, recv, send_n, and recv_n. + + * ace/IOStream.cpp: fixed "#define ACE_IOSTREAM_C" to keep g++ sane. + + * ace/Hash_Map_Manager.{h,cpp},Map_Manager.{h,cpp}: replaced + DEFAULT_SIZE with ACE_DEFAULT_MAP_SIZE so that Naming_Test runs + on SunC++ 4.1. + + * ace/High_Res_Timer.*: added optional scale factor. + + * examples/IOStream/{client,server}/Makefile: addd -g++ if building + with gcc. + + * tests/Naming_Test.cpp: moved declaration of "i" out of for loop + because it is used after the loop. + + * examples/ASX/UPIPE_Event_server/{Consumer,Supplier}_Router.cpp + (open): return 1 if init () succeeds. There's a commented-out + call to activate the objects that would (should?) return a value. + + * examples/IPC_SAP/FIFO_SAP/FIFO-client.cpp (main): declare n + as ssize_t instead of size_t to avoid compiler warning about + signed/unsigned comparison. + +Tue Feb 4 19:06:52 1997 Douglas C. Schmidt + + * ace/Signal.cpp: Fixed all the ACE_Sig_Handler[s] methods so that + they now use ACE_Guard, rather than ACE_TSS_Guard, *unless* they + are actually performing callbacks to user-code. Not only is + this faster, but it also avoids thread-specific storage key + leaks on platforms like Solaris! + + * ace/OS.cpp (thr_keyfree): Added a new #ifdef for + ACE_HAS_THR_KEYDELETE, which is defined for UNIXWARE. This + fixes a nasty problem with leaking thread-specific keys. Thanks + to Nigel Owen for reporting this. + + * ace/Message_Block.cpp: Added a #include for + "ace/Service_Config.h". + + * ace/Malloc.i: Fixed a few warnings by removing the names of + unused parameters. + + * ace: Added many minor changes to ACE so that it will work on + DG/UX. Thanks to Michael Maxie for all these. + + * ace/LSOCK_Stream.cpp: Applied the same fix as to LSOCK.cpp. + + * ace/LSOCK.cpp: Removed the cast of 0 to (char *) for msg_name + since some platforms use (struct sockaddr *). By omitting the + cast the compiler will figure it out correctly. Thanks to + Michael Maxie for this. + + * ace/IOStream: Added a new template adapter for creating an + iostream-like object using an ACE IPC Stream for the actual I/O. + Thanks to James CE Johnson for this. + + * examples/Misc/test_iostreams.cpp: Added a test that illustrates + how the new ACE_iostreams mechanism works. Thanks to James CE + Johnson for this. + + * ace/Message_Block: Updated the ACE_Message_Block implementation + to use ACE_Service_Config::alloc() if the user doesn't supply a + customize version. This also means that we never delete the + allocator_strategy_, so we can remove this flag and reduce the + amount of storage by 4 bytes. Thanks to Irfan for noticing that + we can do this. + + * ace/platform_dgux4_epc.h: Added a new platform config file + for DG/UX. Thanks to Michael Maxie for + this. + + * ace/config-dgux-4.11-epc.h: Added a new config file for DG/UX. + Thanks to Michael Maxie for this. + +Tue Feb 04 18:26:01 1997 + + * ace/Service_Config.cpp (alloc): The implementation now creates a + ACE_New_Allocator rather than a ACE_Allocator_Adaptor. If + you still want the old behavior, simply provide your own + custom allocator singleton for ACE_Service_Config. + + * ace/OS.i (mktemp): Added the missing ACE_INLINE directive. + + * ace/OS.h: ACE_HAS_INLINED_OSCALLS is now automatically defined + when __ACE_INLINE__ is defined. This avoids mysterious linking + problems that occur otherwise. + + * ace/Malloc: Added a virtual destructor to ACE_Allocator. Also + added a new class ACE_New_Allocator which is a sub-class of + ACE_Allocator. This class uses the new/delete operators to + allocate and free up memory. Please note that the only methods + that are supported are malloc() and free(). All other + methods are no-ops. If you require more functionality, please use: + ACE_Allocator_Adapter > This will allow you to use the added functionality of + bind/find/etc. while using the new/delete operators. + +Mon Feb 3 15:35:24 1997 Douglas C. Schmidt + + * ace/config-aix-*.h: Added a (char *) cast to + ACE_DEFAULT_BASE_ADDR. Thanks to John Cosby + for reporting this. + + * ace/OS.cpp: Added a new set() method that sets the Time_Value + from a double. Thanks to Brad Flood for this suggestion. + + * ace/OS: Changed ACE_OS::flock_t to ACE_OS::ace_flock_t to avoid + a name clash on DG/UX. Thanks to Michael Maxie + for reporting this. + +Tue Feb 4 03:02:52 1997 Irfan Pyarali + + * tests/Naming_Test.cpp: Added timing and made debug print outs + optional. Also added randomization of the test data. + + * ace/OS.h: Fixed prototype for gethrtime () + +Mon Feb 03 21:00:56 1997 David L. Levine + + * ace/OS.h: define ACE_SCOPE_PROCESS and ACE_SCOPE_THREAD + even if ACE_HAS_THREADS is not defined. Thanks to + Michael Maxie for pointing this out. + + * examples/Threads/{process_mutex.cpp,process_semaphore.cpp, + task_three.cpp,thread_manager.cpp,thread_specific.cpp} (main): + added ACE_UNUSED_ARG (sa);. + + * examples/Threads/reader_writer.cpp: fixed declaration of + "shared_data" to be "static volatile" instead of "volatile + static", and removed unused variable "n". + + * examples/Threads/thread_pool.cpp: removed unused variable "result". + +Sun Feb 02 21:24:02 1997 David L. Levine + + * ace/OS.h: changed hrtime_t to ACE_hrtime_t. + + * ace/{config-win*.h,README}: added #define ACE_HAS_PENTIUM to + enable gethrtime () support. + + * ace/High_Res_Time.{h,i,cpp}: removed platform-specific #ifdef's, + instead added "unsupported ()" static member function; changed + changed signature of elapsed_time to take time reference as + argument instead of return value; added elapsed_time + (ACE_Time_Value &) and elapsed_time_incr (ACE_Time_Value &). + + * examples/Thread/context_switch.cpp: use ACE_High_Res_Timer + instead of the old Timer adapter. + + * ace/config-aix-4.1.x.h: fixed typo: #defind ACE_HAS_LONGLONG_T. + + * ace/config-aix-4.2.x.h: added #define ACE_HAS_LONGLONG_T. + + * ace/Thread_Priority.{h,cpp}: moved #include of OS.h from .cpp + to .h file. + +Sun Feb 02 10:30:29 1997 David L. Levine + + * ace/Local_Name_Space.cpp: removed ACE_Map_Manager, ACE_Map_Iterator, + and ACE_Map_Entry: they don't appear to be used and, without + including their headers, this file won't compile. + + * ace/Hash_Map_Manager.cpp (Hash_Map_Manager (ACE_Allocator *)): + reordered initializers to match declaration order. + +Sat Feb 1 15:11:28 1997 Douglas C. Schmidt + + * include/makeinclude/platform_aix4.2.GNU (LD): Removed the -qnoro + flag since it is no longer needed. Thanks to Rob Jordan + for reporting this. + +Sat Feb 1 03:25:21 1997 Irfan Pyarali + + * ace/SString.cpp: Added two methods to the wide string + implementation for high-performance. Even though these methods + are somewhat ugly and not the "OO" way of doing things, + performance was at stake here. + + * ace/Registry_Name_Space.cpp (resolve): Fixed the implementation + by correctly figuring out the size of the value in the + Registry. This allows us to dynamically allocated the correct + amount of memory. + + * ace/Registry: Fixed the constant MAX_CONTEXT_NAME_SIZE to be the + maximum path length. + + * ace/Naming_Context.cpp: Fixed various memory leaks. + + * ace/Local_Name_Space_T.h: Replaced the simple-minded Map_Manager + with the new (improved) Hash_Map_Manager. + + * ace/Local_Name_Space.cpp: Added new methods operator!= and hash + required by the map. + + * ace/Hash_Map_Manager.cpp (ACE_Hash_Map_Manager): Added an extra + constructor. + + * tests/Naming_Test.cpp: Removed memory leaks. + +Fri Jan 31 19:39:48 1997 David L. Levine + + * ace/Hash_Map_Manager.cpp (ctor): reordered initializers + to match declaration order. + + * tests/Time_Value_Test.cpp: cast double argument to long + because there no longer is a constructor that takes a double. + + * ace/Hash_Map_Manager.{h,cpp}: removed #include of + ace/Hash_Map_Manager.i because it doesn't exist. + Protected .cpp file against multiple includes. Moved + #include of "ace/Malloc.h" from .h to .cpp file. + + * ace/Map_Manager.cpp (current_size, total_size): cast -1 to + size_t to avoid warning about signed-to-unsigned conversion. + + * ace/OS.h: moved hrtime_t typedef for ACE_WIN32 so it doesn't + get defined twice. + + * ace/OS.i (getservbyname): one last ACE_HAS_NONCONST_GETBY change: + missed "lproto" to "proto". + + * bin/create_ace_build: added checks for existing symlinks, so + now the script can be re-run safely at any time on a build + tree to update it. + +Fri Jan 31 02:16:30 1997 Douglas C. Schmidt + + * ace/config-aix-*.h: Made the default value for + ACE_DEFAULT_BASE_ADDR 0x80000000 to work around restrictions + with AIX. Thanks to Rob Jordan for + this. + + * examples/Map_Manager: Added a new example of the + Hash_Map_Manager. + + * tests/Map_Manager: Integrated the Hash_Map_Manager into the + Map_Manager test and greatly improved the test (e.g., by adding + timing). + + * ace: Added a new implementation of the Map_Manager called + Hash_Map_Manager. This, of course, uses hashing rather than + linear search. The result should be a much faster + implementation for many types of applications. + +Thu Jan 30 13:55:08 1997 Douglas C. Schmidt + + * ace/Map_Manager: Changed the return type of total_size() and + current_size() to size_t. + + * ace/OS: Had to remove the ACE_Time_Value (double) constructor + since it caused ambiguities with ACE_Time_Value (long). Thanks + to Per Andersson for figuring this out. + + * include/makeinclude/platform_linux_lxpthread.GNU (CXX): Added + -D_REENTRANT to make things work correctly in MT programs. + Thanks to Marius for this fix. + + * ace/OS.h: Added several extra constructors for ACE_Time_Value so + that it won't cause problems with the new ACE_Time_Value + (double) constructor. + + * ace/Log_Record.cpp (ACE_Log_Record): Added an "L" to the 0 + initial value used for time_stamp_. Thanks to Marius for + reporting this. + + * ace: Added the new config-aix-4.2.x.h file, which supports the + AIX4.2 platform. Thanks to Rob Jordan + for this. + + * include/makeinclude/platform_aix4.2.GNU: Added support for the + new AIX4.2 platform. Thanks to Rob Jordan + for this. + + * ace/OS.h: It's now possible to override ACE_DEFAULT_BASE_ADDR in + a config.h file. This is important for platforms that need to + put shared memory segments at particular address ranges. Thanks + to Rob Jordan for suggesting this. + +Thu Jan 30 16:01:37 1997 David L. Levine + + * ace/{config-aix-4.1.x.h,README}: added ACE_HAS_AIX_HIRES_TIMER, + see change to gettimeofday in OS.i below; and ACE_HAS_LONGLONG_T. + + * ace/OS.i (gettimeofday, gethrtime): use read_real_time () if + ACE_HAS_AIX_HIRES_TIMER. Thanks to Bob Olson + for this suggestion. + + * ace/OS.h: define hrtime_t as long long if ACE_HAS_AIX_HIRES_TIMER. + + * ace/OS.{i,cpp}: uninlined ACE_OS::gethostbyname (), + and ACE_OS::inet_ntoa () on VxWorks, because they have + static char arrays. + + * ace/OS.i (gethostbyaddr, getservbyname, gethostbyaddr, + gethostbyname, getservbyname_r): with ACE_HAS_NONCONST_GETBY, + instead of copying the const argument, just cast it to (char *). + Thanks to Michael Maxie for pointing out the + problem with the nonstatic char arrays with sizes determined at + runtime. + + * ace/High_Res_Timer.*: added ACE_HAS_AIX_HIRES_TIMER support. + Also, renamed get_time () to elapsed_microseconds (). + + * examples/Threads/{Timer.h,context_switch_time.cpp}: + ACE_High_Res_Timer::elapsed_microseconds () instead of + ACE_High_Res_Timer::get_time (). + + * bin/create_ace_build: added this script: it creates an ACE build + tree in directory "build/" below the current + directory, which must be a ACE "top level" directory (such as + $WRAPPER_ROOT). The build tree directory structure mirrors that + of the ACE top level directory structure, except that instead of + containing any plain files, it contains only symlinks to the files + in the ACE top level structure. + +Thu Jan 30 06:57:50 1997 David L. Levine + + * ace/Thread_Priority.cpp (convert_to_os_priority): changed + switch (priority_class) to switch (priority_class_). + Thanks to Chris Lahey for pointing this out. + Also, return -1 on other than Solaris, Win32, and VxWorks. + +Wed Jan 29 22:05:01 1997 Douglas C. Schmidt + + * tests/Naming_Test.cpp: Added the prefix "test_" to the bind(), + find(), rebind(), and unbind() functions. This avoids name + clashes with the bind() call from the socket API. Thanks to + Marius for this info. + + * ace/OS.cpp (ACE_Time_Value): Added a new constructor that makes + it possible to construct an ACE_Time_Value from a double. + Thanks to Brad Flood for this. + + * ace/OS.i (thr_join): If ACE_HAS_THREADS is defined, but none of + the threading APIs match (e.g., AIX) then we'll return + ACE_NOTSUP_RETURN(-1). Thanks to Chris Lahey for help with + this. + + * include/makeinclude/platform_aix.GNU: Made some changes to the + type of dynamic linker and libraries used by AIX 4.1. Thanks to + Chris Lahey for help with this. + + * ace/config-aix-4.1.x.h: Changed from BSD 4.3 to 4.4. Thanks + to Chris Lahey for help with this. + +Wed Jan 29 09:03:48 1997 David L. Levine + + * ace/OS.h: moved ACE_id_t and ACE_pri_t typedefs out of the + ACE_HAS_THREADS section. + + * ace/OS.cpp: fixed ACE_OS::set_sched_params on Win32 and VxWorks. + + * ace/Scheduling_Parameters.*, ace/Thread_Priority.*: updated + comments. + + * examples/Threads/{context_switch_time.cpp,Timer.h,Makefile}: + added context switch timing test. Currently only works on + Suns because that's the only platform for which ACE has a + high-resolution timer. + + * Makefile: added chmod of VERSION file in TIMESTAMP macro. + +Wed Jan 29 00:59:12 1997 Douglas C. Schmidt + + * include/makeinclude/platform_linux_lxpthread.GNU (CXX): Removed + the -D_MIT_POSIX_PTHREADS symbol since we're using Xavier's + threads instead. Thanks to Marius Kjeldahl for reporting this. + + * ace/config-linux-lxpthreads.h: Removed the _MIT_POSIX_PTHREADS + symbol since we're using Xavier's threads instead. Thanks to + Marius Kjeldahl for reporting + this. + +Tue Jan 28 23:32:58 1997 Douglas C. Schmidt + + * ace/SString: Added hash() methods to each ACE String class so + that we can use this with the new ACE_Hash_Set implementation of + ACE_Map_Manager. + + * ace/ACE.h (ACE): Added a UNICODE version of hash_pjw() so that + we can use it to hash ACE_WString. + + * ace/OS.i (thr_setprio): Fixed a typo that was left over from a + previous change. Thanks to Fred LaBar + for reporting this. + + * apps/Gateway/Gateway/{proxy_config,consumer_config}: Added + comments to these config files so they are easier to understand. + Thanks to Chuck Gehr for motivating this. + + * apps/Gateway/Peer/Peer.cpp: Changed the name from connection_id_ + to proxy_id_, which is more accurate. + + * apps/Gateway/Peer/Peer.cpp: Added a destructor to Peer_Handler + so that it can clean itself up properly when shutdown with a + signal. This fixes a nasty bug. + + * ace/config-win32-msvc4.x.h (ACE_HAS_MFC): By default, ACE now + enables ACE_HAS_MFC. This makes it possible to use + AfxBeginThread() with the ACE_THR_AFX flag. + + * ace/OS.cpp: Fixed a typo in the call to ::AfxBeginThread() + function. Thanks to Karlheinz for reporting this. + + * apps/Gateway/Peer/Peer.cpp: Removed all uses of the Map_Manager + from the Peer. There's only ever one connection from a Gateway + per-Peer, so what was this doing here anyway?! It was causing + problems due to multiple deletions, so removing it improves + robustness of the tests. + + * ace/OS.i: Commented out the "extern char **_sys_siglist" + definition since this was conflicting with the definition in + Solaris. If some platforms needs this, we'll need to add a + specific #ifdef. + +Tue Jan 28 21:57:45 1997 David L. Levine + + * ace/OS.{h,cpp}: added ACE_OS::set_sched_params (). It permits + platform-independent setting of thread priorities and + priority classes. It is currently supported on Solaris, + Win32, and VxWorks. + + * ace/Scheduling_Parameters.{h,i,cpp}, + ace/Thread_Priority.{h,i,cpp}, ace/Makefile: + Added these two classes to support ACE_OS::set_sched_params (). + +Tue Jan 28 12:42:39 1997 Irfan Pyarali + + * ace/ace.mdp: Added the "Using MFC in a Shared DLL" flags. + + * tests/test_config.h (ACE_INIT_LOG): Made this UNICODE safe. + + * tests/Pipe_Test.cpp (main): Added an iteration count to control + the number of children created by the main process. + + * ace/Memory_Pool.cpp (init_acquire): cast this->minimum_bytes_ to + size_t to avoid compiler warning if size_t is unsigned. + + * ace/OS.h: Added strncat to the OS class. + +Tue Jan 28 09:13:00 1997 David L. Levine + + * ace/ACE.cpp (ACE::ldfind), + ace/Local_Name_Space_T.cpp, + ace/Local_Token.cpp (ACE_TPQ_Entry::ACE_TPQ_Entry), + ace/Log_Msg.cpp (ACE_Log_Msg::msg, ACE_Log_Msg::find), + Memory_Pool.cpp (ACE_MMAP_Memory_Pool::ACE_MMAP_Memory_Pool), + ace/Naming_Context.cpp (ACE_Naming_Context::open), + ace/Parse_Node.cpp (ACE_Location_Node::open_handle), + ace/Registry.cpp (ACE_Predefined_Naming_Contexts::is_local_host, + ACE_Registry::Binding_Iterator::Object_Iteration::next_n, + ACE_Registry::Binding_Iterator::Context_Iteration::next_n), + tests/UPIPE_SAP_Test.cpp: + changed "sizeof char" to "sizeof (char)" because g++ and Sun C++ + (properly) choked on it. + + * ace/Local_Name_Space_T.cpp (create_manager_i): + -- ::strncat () instead of ACE_OS::strcat () + -- "lock_name_for_backing_store" instead of + "lock_name_for_local_name_space" + + * ace/Naming_Context.cpp (both constructors): reordered + initializers to match declaration order. + + * include/makeinclude/platform_sunos5_g++.GNU: removed + -fno-strict-prototypes because it's not needed with SunOS 5.5.1. + +Mon Jan 27 21:33:00 1997 Irfan Pyarali + + * tests/Naming_Test.cpp (main): Made modifications to the test to + make it more dynamic. Also made it work with UNICODE and + ACE_Naming_Context. + + * ace/Local_Name_Space_T.cpp (create_manager_i): Added a better + naming scheme for the locks. + + * ace: Changed the calculations of string lengths such that the + size of the character type is carefully considered. + + The following were affected: + + ACE.cpp (ACE::ldfind) + Local_Token.cpp (ACE_TPQ_Entry::ACE_TPQ_Entry) + Log_Msg.cpp (ACE_Log_Msg::msg, ACE_Log_Msg::find) + Memory_Pool.cpp (ACE_MMAP_Memory_Pool::ACE_MMAP_Memory_Pool) + Naming_Context.cpp (ACE_Naming_Context::open) + Parse_Node.cpp (ACE_Location_Node::open_handle) + Registry.cpp (ACE_Predefined_Naming_Contexts::is_local_host, + ACE_Registry::Binding_Iterator::Object_Iteration::next_n, + ACE_Registry::Binding_Iterator::Context_Iteration::next_n) + + * ace/OS.h: Added UNICODE support for ACE_DEFAULT_LOCALNAME. + + * ace/Proactor.cpp: Redid "lost" changes to add UNICODE support to: + + /* Proactor */ + ACE_Overlapped_File::ACE_Overlapped_File + ACE_Overlapped_File::open + + * ace/Registry_Name_Space.h: Changed the order of #include and + #define as that the correct set of MACROS are defined for the + include files. + + * tests/MM_Shared_Memory_Test.cpp: Added UNICODE support. + +Mon Jan 27 09:16:03 1997 David L. Levine + + * include/makeinclude/platform_sunos5_sunc++.GNU, + include/makeinclude/platform_sunos5_sunc++_orbix.GNU, + ace/config-sunos5.5-sunc++-4.x-orbix.h + ace/config-sunos5.5-sunc++-4.x.h: + disabled exception handling by commenting out ACE_HAS_EXCEPTIONS + in the config files and adding -noex to the platform files, + because it causes trouble, at least on MP machines. + +Mon Jan 27 14:54:31 1997 Douglas C. Schmidt + + * ace/Memory_Pool.h: Added code to ACE_MMAP_Memory_Pool_Options to + take a minimum_bytes parameter. This is needed to prevent mmap + remapping when a large segment is requested. Thanks to Fred + LaBar for this. + +Sun Jan 26 13:39:13 1997 Douglas C. Schmidt + + * ace/OS.i: Changed the typo sis_siglist to sys_siglist. Also, + changed the logic from #if !defined (ACE_HAS_SYS_SIGLIST) to + #if defined (ACE_HAS_SYS_SIGLIST) since this makes more sense... + Thanks to Nanbor Wang for noticing this. + +Sat Jan 25 20:30:23 1997 David L. Levine + + * ace/config-sunos5.5-sunc++-4.1.h: commented out ACE_HAS_EXCEPTIONS + #define because -noex is required with it, and that causes core + dump during thread exit on multiprocessor UltraSparcs. + + * include/makeinclude/platform_sunos5_sunc++_4.1.GNU: added -noex + back because of core dump during thread exit on + multiprocessor UltraSparcs. + + * examples/ASX/Event_Server/Event_Server/Event_Analyzer.cpp, + examples/ASX/UPIPE_Event_Server/Event_Analyzer.cpp (control): + added "default" case to switch statement to eliminate compiler + warnings about enumeration values not being handled in switch. + + * examples/ASX/UPIPE_Event_Server/event_server.cpp (consumer): + removed unused variable "iter". + +Sat Jan 25 12:50:24 1997 Douglas C. Schmidt + + * ace/OS.i: Updated all the cond_timedwait() and cond_wait() + methods so that they decrement the count of waiters by one even + when errors occur. Thanks to Irfan for finding this. + + * ace/Map_Manager.cpp: Updated the ACE_Map_Iterator code so that + it no longer crashes if the Map has been closed. Thanks to + Slawomir Kuzniar for reporting this. + +Sat Jan 25 11:34:56 1997 Irfan Pyarali + + * ace/SOCK_Connector.cpp (complete): Added a sleep of zero seconds + which allows non-blocking connects to work properly on NT. + + * ace/config-winnt-4.0-msvc4.x.h and config-win32-msvc4.x.h: + Added ACE_HAS_BROKEN_NON_BLOCKING_CONNECTS. + + * ace/OS.i: Moved out all code for Time_Value from #if region. It + is common to all. + + * ace/Reactor: Added helper routines to stop the VC++ compiler from + bitching about destructors in exception handling code. + + * ace/ace.{mak,mdp}: Removed Time_Value.cpp from project. + + * tests/tests.{mak,mdp}: Corrected the creation of SOCK_Test and + Message_Blob_Test executables and temporary files. + +Fri Jan 24 09:01:50 1997 David L. Levine + + * examples/Connection/misc/Connection_Handler.cpp: added + specialization of ACE_Svc_Handler + so that subproject will build with g++ without optimization. + + * apps/Gateway/Gateway/Proxy_Handler.cpp: added specializations + of ACE_Svc_Handler and + ACE_Svc_Handler + so that subproject will build with g++ without optimization. + + * tests/Reactor_Exceptions_Test.cpp (main): added ACE_UNUSED_ARG + for argc and argv when ACE_HAS_EXCEPTIONS is not defined. + + * performance-tests/Misc/test_mutex.cpp: made destructor of + Thread_Mutex_Derived virtual because the class has other virtual + functions. + +Thu Jan 23 11:51:45 1997 David L. Levine + + * ace/config-sunos5.5-g++.h: commented out ACE_HAS_EXCEPTIONS because + -fhandle-exceptions is broken in g++ 2.7.2 (and is required in order + to use exception handling); also, added ACE_HAS_INLINED_OSCALLS, if + __ACE_INLINE__ is #defined. + + * ace/config-sunos5.5-sunc++-4.1.h: added ACE_HAS_INLINED_OSCALLS, + if __ACE_INLINE__ is #defined. + +Wed Jan 22 15:04:47 1997 Douglas C. Schmidt + + * ace/OS.h: Moved the ACE_TIMER_SKEW macro to below the #inclusion + of config.h and updated it so that it can be overridden in the + config.h file if necessary. Thanks to Bob Olson + for motivating this. + + * ace/OS.cpp: Fixed the implementation of + ACE_Thread_ID::operator== so that it works correctly when thread + ids and thread handles aren't ints. Thanks to Chuck Gehr for + reporting this. + + * ace/OS.i (thr_getprio): Moved a stray #else into the right + place. Thanks to Chuck Gehr for reporting this. + + * ace/OS.i (sema_post): this->count_++ should have been + s->count_++. Thanks to Chuck Gehr for reporting this. + + * ace/Synch_T.cpp: Added an extern "C" definition for + ACE_TSS_C_cleanup(). Thanks to Chuck Gehr for reporting this. + + * ace: Added a new #define called ACE_LACKS_SYS_NERR to the + config files for MVS and VxWorks. This is used in OS.cpp + as follows: + + #if defined (ACE_LACKS_SYS_NERR) + int sys_nerr = ERRMAX + 1; + #endif /* ACE_LACKS_SYS_NERR */ + + Thanks to Chuck Gehr for reporting this. + + * Removed all #inclusions of "ace/Time_Value.h." This file + no longer contains anything besides a #include "ace/OS.h" + and is only kept around due to backwards compatibility. + + * ace: Moved the contents of Time_Value.h into OS.h to reduce the + confusion that arises from the #inclusion of "config.h" in + Time_Value.h. Also merged the contents of Time_Value.{i,cpp} + into OS.{i,cpp}. Thanks to the MDA guys for motivating this. + + * tests/Reactor_Exceptions_Test.cpp: Added a new test that + exercises the Reactor with C++ exceptions. Thanks to Luca for + the test. + + * ace/Reactor.cpp (handle_events): Added Win32 structured + exception handling support to the ACE_Reactor::handle_events() + method so that it correctly releases the token lock when Win32 + SEH occur in callback routines. Thanks to Luca for reporting + this problem. + + * ace: Added a new macro called ACE_HAS_EXCEPTIONS, which + indicates that the compiler supports C++ exception handling. + + * include/makeinclude/platform_sunos5_sunc++*.GNU: Commented out + the -noex flag for now. Hopefully, things will work correctly + now. + + * ace/Thread_Manager.cpp (exit): Removed the final acquire() on + ace_mon, which is no longer necessary since the Guard classes + now keep track of whether they are "owned". Thanks to Karlheinz + and Detlef for this fix. + +Wed Jan 22 09:05:31 1997 David L. Levine + + * Makefile,VERSION: modified top-level Makefile (and VERSION) + to add a timestamp to the VERSION file if creating a release + from the /project/adaptive/ACE_wrappers directory. If it + causes problems, this will disable it: + % make TIMESTAMP= release. + + * ace/Local_Tokens.cpp (dump): replaced "ACE_TSS" + with "ACE_TPQ_ENTRY" so that ACE_NO_TSS_TOKENS is supported. + + * ace/Synch.h: fixed typo in comment header for ACE_Thread_Semaphore + + * ace/config-vxworks-ghs-1.8.h,config-vxworks5.2-g++.h, + config-unixware-2.01-g++.h: + protect ACE_HAS_INLINED_OSCALLS #defined with + #if defined (__ACE_INLINE__). + + * apps/Gateway/Gateway/Event_Channel.cpp (open): added + ACE_UNUSED_ARG (sig);. + + * examples/ASX/Event_Server/Event_Server/Peer_Router.h: + declared a friend of class Peer_Router_Context because it + has a private destructor, to eliminate compiler warning + about not having any friends. + + * examples/ASX/Event_Server/Event_Server/Supplier_Router.cpp + (open): added return 0 in "true" branch of if statement so + that the function always returns a value. + +Tue Jan 21 09:19:44 1997 David L. Levine + + * tests/Reader_Writer_Test.cpp (reader): commented out unused + variable "n"; also, commented out unused function + print_usage_and_die. + + * tests/TSS_Test.cpp, Thread_Manager_Test.cpp (main): added + ACE_UNUSED_ARG (sa);. + + * tests/Thread_Pool_Test.cpp (open): added return 0 at end. + +Tue Jan 21 11:00:12 1997 Douglas C. Schmidt + + * apps/Gateway/Gateway/Gateway.cpp (parse_args): There was a small + bug in parse_args (latest beta), it mixed proxy and consumer + conf files. Thanks to Per Andersson + for reporting this. + +Mon Jan 20 13:29:28 1997 David L. Levine + + * ace/OS.i, ace/Task.h, and ace/Thread_Manager.h: changed a few + occurrences of NULL to 0 (for other than Win32 platforms), + primarily to avoid compiler warnings on VxWorks if ACE.h isn't + #included before stddef.h. + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp + (handle_input): replaced %d format with %hu for u_short arg. + + * netsvcs/clients/Tokens/deadlock/deadlock_detection_test.cpp + (run_writer): initialized variable "t" to avoid compiler warning. + + * examples/Connection/misc/Connection_Handler.cpp (handle_timeout): + added ACE_UNUSED_ARG (tv); also, added explicit int return type + to definition of Connection_Handler::close (u_long). + + * examples/Threads/task_four.cpp (Invoker_Task::svc): + moved declaration of "task" out of for loop because it is + also used after the for loop. + + * netsvcs/lib/Name_Handler.cpp, Server_Logging_Handler.cpp, + TS_Clerk_Handler.cpp, TS_Server_Handler.cpp, Token_Handler.cpp: + added ACE_UNUSED_ARG (sig);. + +Sun Jan 19 11:10:49 1997 David L. Levine + + * include/makeinclude/platform_sunos5_sunc++.GNU, + platform_sunos5_sunc++_4.1.GNU: + added comment about compiler warnings with +w option. + Also, added +w to platform_sunos5_sunc++_4.1.GNU. With the + other changes in this ChangeLog entry, there no longer should + be significant warnings from Sun C++ when building ACE. + + * examples/ASX/Event_Server/Event_Server/Peer_Router.cpp + (Peer_Handler::put): added ACE_UNUSED_ARG (tv);. + + * examples/IPC_SAP/SPIPE_SAP/NPServer.cpp (main), + netsvcs/clients/Tokens/invariant/invariant.cpp (main): + commented out argc and argv. + + * examples/Mem_Map/file-reverse/file-reverse.cpp (main): + removed unused variable "cp". + + * netsvcs/clients/Tokens/manual/manual.cpp (handle_input, + handle_exception): added ACE_UNUSED_ARG (fd); and + (create_proxy): added return statement at end: even + though it should never be reached, it eliminates a + compiler warning. + + * examples/OS/Process/process.cpp, + examples/Reactor/Misc/test_reactors.cpp, + netsvcs/clients/Tokens/deadlock/deadlock_detection_test.cpp, + netsvcs/clients/Tokens/mutex/test_mutex.cpp, + netsvcs/clients/Tokens/rw_lock/rw_locks.cpp, + performance-tests/TTCP/ORBeline/ttcp_i.cpp, + performance-tests/TTCP/Orbix/ttcp_i.cpp (main): + return 0 instead of 42. + +Sat Jan 18 10:54:25 1997 Prashant Jain + + * java/src/README: Updated the README file to indicate how + documentation for Java ACE cab be automatically generated. + +Fri Jan 17 11:47:10 1997 Douglas C. Schmidt + + * ace/OS.h: Added an equivalent set of + ACE_LSOCK_{STREAM,ACCEPTOR,CONNECTOR} macros to complement the + ones for ACE_SOCK_*. Thanks to Gonzalo Diethelm + for suggesting this. + + * ace/OS.cpp (ACE_Thread_Adapter): Added a new feature that allows + logging features to be inherited by threads. It works with + those OSs (e.g., Win32) that use ACE_Thread_Adapter class. At + some point, we might do this for all the OSs. Thanks to Luca + for this. + + * examples/Connection/misc/Connection_Handler.cpp: Added a + new example that illustrates how to use the Acceptor pattern + to create multiple threads, each running its own Reactor. + + * ace/Log_Msg.cpp (dump): Some of the variables in the dump() + method have the wrong format specification type. These are: + restart_ (%d), flags_ (%x), priority_mask_ (%d). They are now + fixed, thanks to Luca. + + * tests/Priority_Task_Test.cpp (open): Add an ACE_ASSERT to make + sure that the tasks activate() correctly. Thanks to David for + finding this. + + * ace/config-linux-lxpthreads.h: Added #defines for + ACE_HAS_AUTOMATIC_INIT_FINI and ACE_HAS_SVR4_DYNAMIC_LINKING. + Thanks to Marius for this. + + * ace/Malloc.h: Changed the typedef of ACE_Malloc_Align to a macro + called ACE_MALLOC_ALIGN to allow users to override this value in + their config.h file. This is necessary for platforms that don't + have "long" word alignments. Thanks to Fred LaBar + for this suggestion. + + * ace/OS.h: Added an #ifdef check for ACE_HAS_IRIX62_THREADS and + if so, we'll use the if (&a) /* null */; } form of the + ACE_UNUSED_ARG macro to avoid unnecessary warnings. Thanks to + Fred LaBar for testing this out. + +Fri Jan 17 16:33:25 1997 David L. Levine + + * ace/High_Res_Timer.*: added elapsed_time () and get_time (). + + * netsvcs/clients/Tokens/collection/collection.cpp, rw_locks.cpp: + commented out unused variables to avoid compiler warnings; and + return 0 from main (). + + * include/makeinclude/rules.local.GNU, + netsvcs/lib/Makefile, + examples/Service_Configurator/IPC-tests/server/Makefile: + fixed ESOBUILD mechanism to work on all platforms, not just Linux. + Thanks to Marius Kjeldahl for this fix. + + * ace/OS.i and OS.cpp: uninlined functions that use varargs, because + they usually won't get inlined anyways. + + * ace/OS.cpp (thr_create): added #else clause to be sure that + always sparam.sched_priority always get set to the priority argument. + + * netsvcs/clients/Naming/Client/Client_Test.cpp: commented out + unused parameters and wrapped combined assignments/conditional + values to avoid compiler (g++) warnings. + + * tests/Priority_Task_Test.cpp: added check for successful thread + spawn, and ACE_NEW_THREAD to svc () so that messages get logged. + +Thu Jan 16 17:03:47 1997 Douglas C. Schmidt + + * include/makeinclude: Added support for shared object files + on Linux. Thanks to Marius Kjeldahl for his help with this. + + * ace: Merged in the IRIX support, mainly the missing netdb + reentrant functions. Thanks to Gonzalo Diethelm + and Carlos O'Ryan for + their help. + + * ace/Timer_{List,Heap,Queue}: Changed iterator() to iter() to + avoid name clashes with STL (ugh). + + * ace/Timer_{Heap,List}.cpp: Added ACE_BUILD_DLL so that things + will link. Thanks to John Morey for reporting this. + + * ace/Synch_T.h: Fixed: class ACE_Write_Guard: method: + tryacquire_write so that it will call + ...->lock_->tryacquire_write() and not + ...->lock_->acquire_write(). Thanks to Alexandre Karev + for this fix. + +Thu Jan 16 15:51:16 1997 David L. Levine + + * Dump.cpp (register_object): initialized "slot" so that g++ doesn't + complain about uninitialized use. + + * Reactor.cpp (initialized): use ACE_GUARD_RETURN instead of + ACE_GUARD because the function returns a value; + (find): initialize "i" if handle is out of range so that g++ + doesn't complain about uninitialized use. + + * Service_Repository.cpp (remove): removed unused variable "handle". + + * Thread_Manager.h: made destructor virtual now that spawn_i () is + virtual. + + * Timer_Heap.cpp: changed some int loop indicies to size_t to + make sure that comparisons are consistently signed or unsigned. + + * OS.h, config-vxworks*.h: removed ACE_HAS_GREENHILLS_SOCKETS + ACE macro because the code it wrapped applies to all VxWorks + compilers, not just GreenHills. + +Wed Jan 15 02:06:21 1997 Douglas C. Schmidt + + * ace/ACE.cpp (round_to_pagesize): If _SC_PAGESIZE is enabled then + we set the ACE::pagesize_ variable using sysconf(2). Thanks to + James Mansion for this suggestion. + +Wed Jan 15 02:06:21 1997 Douglas C. Schmidt + + * ace/Timer_Queue.cpp (expire): Changed a line of code from + + ACE_Timer_Queue_Iterator &iterator (this->iterator ()); + + to + + ACE_Timer_Queue_Iterator &iterator = this->iterator (); + + so that the Visual C++ compiler can grok it. Thanks to John + Morey for reporting this. + + * ace/Reactor.cpp: Modified the close() method so that it can be + called multiple times with no bad side-effects. + + * ace/Pipe.cpp: Modified the close() method so that it can be + called multiple times with no bad side-effects. + + * ace/Reactor: Added an initialized() method that indicates + whether the Reactor was successfully initialized. Also + rearranged the code in ACE_Reactor::open() so that initialized_ + is only set at the end of the method when everything succeeds. + If things *don't* succeed, we call close() on the way out. + Thanks to Luca for these suggestions. + + * ace/Reactor.cpp (close): When closing down the ACE_Reactor, we + now set initialized_ back to 0 so that it can be reopened again + later. + + * tests/Reader_Writer_Test.cpp: There were some problems with this + test due to the fact that on many pthreads platforms pthread_t + isn't an int (it's a struct). Thanks to Chuck Gehr + for the fix. + + * ace/OS.i (exit): In WIN32 when the process exits through an + ExitProcess() call, some process resources (e.g., file handles) + are freed before the static variable destructors are + called. This results in an application error when tracing is + enabled. Removing the ACE_TRACE call in ~ACE_Event_Handler + seems to fix this. Thanks to Luca for this fix. + + * ace/OS: Fixed the implementation of semaphores for the POSIX + port (POSIX lacks semaphores). The trick was to add a "waiters" + field, along with the semaphore count. Thanks to John Bossom + for reporting this. + + * examples/Threads/wfmo.cpp: Added a new test program that seems + to indicate that the Win32 WaitForMultipleObjects() function can + be called in multiple threads, all of which wait on the same set + of HANDLEs. Note that the dispatching of the threads is + relatively "fair" (i.e., everyone gets a chance to process the + various HANDLEs as they become active). Thanks to Ari Erev + for suggesting this and providing the + initial code. + + * ace/Thread_Manager.h: Made the spawn_i() method virtual and + moved it into the protected section of the class so that it can + be over-ridden by subclasses. Thanks to Tim Harrison for + suggesting this. + +Tue Jan 14 15:57:55 1997 Douglas C. Schmidt + + * ace/OS.h: Changed the default size of ACE_DEFAULT_TIMERS to + _SC_TIMER_MAX (which is typically around 40 or so). + Thanks to Stuart Powell for + suggesting this. + + * tests/Timer_Queue_Test.cpp (main): Added some additional logic + so that we can test the performance of the preallocated and + non-preallocated ACE_Timer_Heap. + + * ace/Timer_Heap: Added a new "preallocate nodes" mechanism to the + ACE_Timer_Heap. If this is enabled by the constructor, then we + preallocate as many ACE_Timer_Nodes as there are slots in the + heap. This allows us to completely remove the need for dynamic + memory allocation, which is important for real-time systems. + + * ace/Thread_Manager.cpp (remove_thr): Optimized the code just a + tad by decrementing the current_count_ *first*. Thanks to Per + Andersson for suggesting this. + + * ace/ReactorEx: Updated the implementation so that the + handle_events() method now in fact *does* return the number of + event handler's dispatched (i.e., the implementation matches the + documentation...). Thanks to Hamutal Yanay + for reporting this. + + * ace/Service_Repository.cpp (remove): Removed an extra call to + ACE_OS::dlclose(). This is already being called in the + destructor of ACE_Service_Record. Thanks to Karlheinz for + reporting this. + + * man: Updated all the nroff and html documentation. + + * ace/Timer_Heap: Implemented the spiffy new timer cancellation + algorithm that requires only O(log N) time to remove a timer + from the ACE_Timer_Heap. This is about 50 to 100 times faster + than using the ACE_Timer_List implementation. + +Tue Jan 14 21:01:36 1997 David L. Levine + + * ace/OS.h: Replace "Linux" preprocessor symbol with "linux". + +Mon Jan 13 17:57:50 1997 Douglas C. Schmidt + + * ace/Synch: Added lock() accessor methods to both + ACE_Process_Semaphore and ACE_Process_Mutex. Thanks to Hamutal + Yanay for suggesting this. + + * ace/config-mvs.h: Added a #define for ACE_HAS_GETPAGESIZE. + Thanks to Chuck Gehr for this information. + + * ace/LSOCK_Stream.h: Added a new typedef for PEER_ADDR that is + associated with ACE_UNIX_Addr. Thanks to Mark Rabotnikov + for suggesting this. + +Mon Jan 13 22:24:09 1997 David L. Levine + + * ace/OS.h: Added #undefs of sigemptyset and sigfillset on Linux + when __OPTIMIZE__ is enabled. Yes, the system header on Linux + really #defines them when optimizing! Thanks to an anonymous + ACE user for pointing this out. + + * tests/tests_config.h: Dropped ACE_MAX_ITERATIONS back to 10. + +Sun Jan 12 16:59:52 1997 Douglas C. Schmidt + + * ace/Timer_List.cpp (schedule): Cleanup the code so that (1) + timer_id never == -1 (in order to distinguish it from error + return values and (2) so that we avoid an unnecessary check for + operator new failure. + + * ace/OS.h: Added a new #define called ACE_DEFAULT_MAX_TIMERS, + which specifies the maximum number of ACE_Event_Handlers + supported by ACE_Timer_Heap. + + * ace/Proactor.cpp (ACE_Proactor): Updated the allocation of + ACE_Timer_Queue so that it really points to an ACE_Timer_List by + default. Naturally, this can be overridden by users. + + * ace/ReactorEx.cpp (open): Updated the allocation of + ACE_Timer_Queue so that it really points to an ACE_Timer_List by + default. Naturally, this can be overridden by users. + + * ace/Reactor.cpp (open): Updated the allocation of + ACE_Timer_Queue so that it really points to an ACE_Timer_List by + default. Naturally, this can be overridden by users. + + * ace: Added two new classes called ACE_Timer_List and + ACE_Timer_Heap, which derive from ACE_Timer_Queue. + ACE_Timer_List is essentially the old behavior of + ACE_Timer_Queue, i.e., it uses an implementation of a linked + list of ACE_Timer_Nodes. ACE_Timer_Heap, on the other hand, + uses a heap-based callout queue, which is more appropriate for + certain real-time applications. + + * ace/Timer_Queue: Revised the ACE_Timer_Queue implementation so + that it's now an abstract base class with most of the + implementation details pushed into the ACE_Timer_List and + ACE_Timer_Heap subclasses. + + * ace/Timer_Queue.h: Made all the ACE_Timer_Queue methods public + so that we can override them in a subclass (e.g., the new + ACE_Timer_Heap). + + * examples/Logger/Acceptor-server/server_loggerd.cpp: Fixed this + example application so that it only uses a single Reactor (the + REACTOR::instance()) rather than two Reactors. Thanks to Sandro + Doro for reporting this. + + * netsvcs/lib/Logging_Strategy.cpp: Fixed the #include of + fstream.h and iostream.h to use the '<' '>' notation rather than + the '"' and '"' notation. This avoids problems with running + "make depend". Thanks to Rino Simioni for + reporting this fix. + +Sun Jan 12 18:20:49 1997 David L. Levine + + * ace/ACE.cpp (round_to_pagesize): fixed typo in reference to + ACE::pagesize_. + + * ace/ACE.cpp: initialize ACE::pagesize_ to 0. + + * ace/config-irix*.h and config-win*.h: removed ACE_PAGE_SIZE + definition because these platforms no longer use it. + + * tests/UNIX*.conf and Win32server.conf: replaced net_svcs + with netsvcs. + +Sat Jan 11 15:11:28 1997 Douglas C. Schmidt + + * ace/OS.i (thr_setprio): The POSIX implementation of + ACE_OS:thr_setprio did not set the priority. It calls: + + pthread_setschedparam( thr_id, &policy, ¶m ) + + and then does + + prio = param.sched_priority. + + instead of + + param.sched_priority = prio; + + This is now fixed. Thanks to John Bossom + for reporting this. + + * ace/config-irix*.h: Modified all the IRIX config files to + use the new ACE_HAS_GETPAGESIZE feature since this is necessary + to differentiate between IRIX and IRIX64. + Thanks to Fred LaBar for + reporting this. + + * ace/ACE.cpp: Modified the round_to_pagesize() so that if + a config.h file enables ACE_HAS_GETPAGESIZE then we use + that function in preference to the value in config.h. + Thanks to Fred LaBar for + suggesting this. + + * ace/ACE.cpp: Modified the round_to_pagesize() so that on + platforms that allow the page size to be obtained dynamically + we'll get that rather than replying on what it set in the + config.h file. We'll cache this value in a static variable + to speedup searches. Thanks to James Mansion for suggesting + this. + + * apps/Gateway/Gateway: Finished adding support for thread-safe + reference counting to the uses of ACE_Message_Block. + + * examples/ASX/Event_Server/Event_Server/Peer_Router.cpp: Replaced + the use of ACE_MT_SYNCH with ACE_SYNCH so that this will compile + correctly on non-MT platforms. + +Fri Jan 10 12:38:42 1997 Douglas C. Schmidt + + * Added a COPYING file that explicitly states the copyright status + of ACE. + + * ace/config-win32-msvc4.x.h and ace/config-winnt-4.0-msvc4.x.h: + By default, we'll revert to *not* enabling + ACE_HAS_TEMPLATE_TYPEDEFS for MSVC++ 4.2, even though this is + well-support by the compiler since it breaks some application + code that expects to use 3 template parameters for + ACE_Svc_Handler<>. The "fix" is to use the ACE_SOCK_STREAM + macros (rather than using the "ACE_SOCK_Stream, ACE_INET_Addr" + tuple) in order to achieve portability in either case. Thanks + to Karlheinz for pointing out the need for backwards + compatibility. + +Wed Jan 8 01:00:05 1997 Douglas C. Schmidt + + * tests/Message_Block_Test.cpp: Enhanced the torture test of the + ACE_Message_Block so that it stresses the reference counting + implementation in a multi-threaded environment. + +Wed Jan 08 10:26:45 1997 David L. Levine + + * ace/Message_Block.cpp (~ACE_Data_Block): assigned 0 to + allocator_strategry_ after deleting it; fixed template + specializations (for g++) by using macros instead of class names; + commented out template specializations because Service_Record.cpp + already has them, and they should only appear once in the library + in order to avoid link clashes + + * ace/Service_Object.cpp (ACE_Service_Object): reordered + initializations in constructor + + * ace/Service_Record.cpp (ACE_Service_Record): reordered + initializations in constructor + + * ace/config-linux-lxpthreads.h: added + ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS, thanks to + James CE Johnson for tracking down this + problem and testing the fix. + +Tue Jan 7 13:03:25 1997 Douglas C. Schmidt + + * ace/Message_Block: Continued to improve the + ACE_Message_Block/ACE_Data_Block implementation. + + * ace/Message_Block: Added a new constructor to ACE_Message_Block + that takes an ACE_Data_Block * and "owns" it. Thanks to Tim for + this idea. + + * ace/Log_Msg.cpp: Now that we've prevented signal handlers from + occurring within critical sections of ACE_Log_Msg::log() we + don't need to use the ACE_Recursive_Thread_Mutex anymore. + Instead, we just need ACE_Thread_Mutex. + + * ace/Log_Msg.cpp (log): Added an ACE_Sig_Guard to the block in + ACE_Log_Msg::log() that acquires the mutex that serializes + output. This prevents nasty problems with recursive to + ACE_Log_Msg::log() from within signal handlers. + + * ace/Service_Config.cpp (end_reactor_event_loop): Added a timeout + of ACE_Time_Value::zero to the ACE_Reactor::notify() method when + called in the ACE_Service_Config::end_reactor_event_loop(). + This prevents the Reactor from blocking indefinitely if there's + no longer a thread to receive from the notification pipe. + + * netsvcs/clients/Naming/Dump_Restore: Removed the vestigal + nametest.cpp and nametest.h files. I'm not sure why they were + still there, but they shouldn't have been! + + * ace/Synch.i (remove): this->owner_ should be set to -1 before + calling this->release(). Thanks to Per Andersson + for suggesting this. + + * ace/Thread_Manager.cpp (exit): Added a flag called "do_thr_exit" + to the ACE_Thread_Control::exit() method. This controls whether + we call ACE_OS::thr_exit() after removing the thread from the + Thread Manager's internal table. This is necessary to work + around pthread bugs on certain platforms (e.g., AIX and Linux). + + * ace/Synch.h: Removed the + ACE_Recursive_Thread_Mutex::set_nesting() method since this + isn't being used and is potentially dangerous. Thanks to Per + Andersson for suggesting this. + + * ace/XtReactor: Updated the XtReactor so that it uses the next + internal Reactor implementation. Thanks to Mark Rabotnikov + for reporting this. + + * ace/Task.i: Updated the grp_id(int) method to cache the group id + in the task and then set it in the Thread_Manager, if there is + one. Thanks to Hamutal Yanay + for suggesting this. + + * ace/Log_Record.h: Updated the ACE_Log_Record class to use the + new ACE_MAXLOGMSGLEN macro. + + * ace/OS.h: Added a new #define called ACE_MAXLOGMSGLEN. By + default this is 4k. However, you can reset it in the config.h + file if you'd like to increase or decrease the size. Thanks to + Anthony McConnell for suggesting this. + + * examples/Threads/tss[12].cpp: Tidied up the tss1.cpp and + tss2.cpp examples and improved the comments. Thanks to Luca for + suggesting this. + + * ace/Service_Object.cpp (fini): Added the "virtual" keyword to + the new destructor of ACE_Service_Type. Thanks to David for + reporting this. + + * ace/Message_Block.i: Rearranged the order of the ACE_Data_Block + and ACE_Message_Block locking_strategy() methods so that they'd + be defined as inline before being used. Thanks to David for + reporting this. + +Mon Jan 6 16:46:06 1997 Douglas C. Schmidt + + * ace/Service_Manager.cpp (fini): Only try to remove the + ACE_Service_Manager from the Reactor if it's actually been + registered in the first place (i.e., if it's get_handle() method + does not return ACE_INVALID_HANDLE). + + * netsvcs/servers/svc.conf: Changed the name of the net services + .so file from libnet_svcs to netsvcs so that it will work + correctly with our new "cross-platform" svc.conf ACE::ldfind() + strategy. Thanks to Marius Kjeldahl for + reporting this. + + * ace/Reactor.cpp (find): Added a strategic break and a check for + handle_in_range(). Thanks to Tim for this help! + + * netsvcs/clients/Naming/Client/svc.conf: Removed the "lib" part + from the executable shared object file names in the svc.conf + file so that it will work with the new "cross-platform" svc.conf + ACE::ldfind() strategy. Thanks to Marius Kjeldahl + for reporting this. + + * ace/Service_Record.cpp (fini): Added an extra assignment to a + temporary const void *obj to avoid problems with MSVC++ and it's + cast mechanism. + + * ace/ReactorEx.h: Added a default parameter to + ACE_ReactorEx::notify(). Thanks to Tim for noticing this. + +Sun Jan 5 10:48:23 1997 Douglas C. Schmidt + + * tests: Added a new test for ACE_Message_Block, which is called + Message_Block_Test.cpp (no surprise there ;-)). This test + exercises the reference counting mechanisms. + + * ace/Message_Block.h: Made the destructors for ACE_Message_Block + and ACE_Data_Block virtual, so that these classes can be + subclassed and ACE_Message_Blocks can delete these + subclasses (either via release() or delete). Thanks to Tilo + Christ for suggesting this. + + * ace/Message_Block.cpp: Modified the implementation + of ACE_Message_Block/ACE_Data_Block so that we always create + an allocator_strategy_. By default, this strategy will be + ACE_Allocator_Adapter >; + This greatly simplifies the code. + + * ace/Message_Block.h: It's now possible to assign a + Message_Block's priority when you create it. + + * ace/Reactor: Sped things up some more by merging the Reactor's + any_ready() and fill_in_ready() methods together. This reduces + redundant computations. + + * ace/Reactor: Changed the name of ACE_Reactor::detach() to + ACE_Reactor::remove_handler_i() and changed the name of + ACE_Reactor::attach() to ACE_Reactor::register_handler_i(). + This is more consistent with the other naming schemes. + + * ace/Reactor.cpp: Reworked the implementation of the Handler + Repository's unbind() method in order to simplfy the logic. + Also merged in all the Reactor's detach() functionality into the + unbind() method in order to localize all the handler removal + processing. + + * ace/Reactor[Ex].cpp: Added more descriptive errno entries for + failed operations in the handler repository. + + * ace/Reactor.cpp: Modified the implementation of the Handler + Repository's bind() method so that it reports an error if you + try to register an Event_Handler for an invalid HANDLE. + + * ace/Reactor.cpp: Reimplemented the internals of the Reactor to + prepare for the upcoming merge of the Reactor and ReactorEx to + use a single code base. + + * ace/Timer_Queue.cpp: Modified the behavior of the expire() + methods so that they return the number of ACE_Event_Handlers + whose handle_timeout() method was called. + +Sat Jan 4 11:47:05 1997 Douglas C. Schmidt + + * ace/Reactor.h: Removed the #ifdefs for ACE_HAS_POLL. This will + be recast as a strategy in subsequent implementations. + + * ace/Reactor.cpp: Added a new call, + ACE_Handler_Repository::handle_in_range(), which checks to make + sure that the HANDLE is within the range of 0 .. max_handlep1_. + This factors out some redundant code. + + * ace/Reactor.cpp: Sped up the performance of the Reactor by + removing redundant calls to + ACE_Handler_Repository::invalid_handle() and + ACE_Handler_Repository::find(). + + * tests/Reactors_Test.cpp: Added a test for + the new Reactor::notify() method with timeouts. + + * examples/Reactor/Misc/notification.cpp (svc): Added a test for + the new Reactor::notify() method with timeouts. + + * ace/Reactor[Ex]: Modified the Reactor and ReactorEx so that they + use timed send() operations for their notify() methods. This + makes it possible for users to bound the amount of time they're + willing to wait to try and notify the Reactor. This is mostly + useful to avoid infinite blocking if there is congestion in the + Reactor's notification mechanism. + + * ace/ACE.cpp: Added a new timed send() method that uses the + write() system call on UNIX and the socket send() call on Win32. + This new method is used in the new ACE_Reactor::notify() method, + which now supported timed notifications. + + * ace/Reactor.cpp (ACE_Handler_Repository): To simplify the code + and reduce unnecessary #ifdefs, I've merged the max_handlep1_ + and cur_size_ fields (which are now called max_handlep1_). + +Fri Jan 3 10:47:15 1997 Douglas C. Schmidt + + * ace: Replaced all uses of "delete mb" with mb->release (); + + * ace/Stream_Modules.cpp: Replaced the use of explicit bit + twiddling with the ACE_BIT* macros. + + * ace/Message_Block.cpp: Make sure that we use the + allocator_strategy_ to create the memory for the reference count + since this may need to go into shared memory if that's the + memory pool where the Message_Block allocations are coming from. + + * ace/OS.h: Added two new macros, ACE_ALLOCATOR_RETURN and + ACE_ALLOCATOR, which are similar to ACE_NEW_RETURN and ACE_NEW, + except that these + + * ace/Message_Block.cpp (release): Make sure to "delete this" + outside the scope of the locking_strategy_. + + * ace/Service_Object.cpp: Added a destructor to ACE_Service_Type. + Thanks to Per.Andersson@hfera.ericsson.se (Per Andersson) for + suggesting this. + + * ace/Service_Object.i: Be smarter about how we reassign the name_ + pointer, i.e., delete the old one and make a copy. Thanks to + Per.Andersson@hfera.ericsson.se (Per Andersson) for reporting + this. + + * ace/Module.cpp (open): Rearranged the assignments to + reader_q->mod_ and writer_q->mod_ so that we don't try to + initialize through NULL pointers. Thanks to + Per.Andersson@hfera.ericsson.se (Per Andersson) for reporting + this. + + * ace/Service_Record.cpp (ACE_Service_Record): Initialized name_ + to NULL so that the following change works correctly now. + Thanks to Per.Andersson@hfera.ericsson.se (Per Andersson) for + reporting this. + + * ace/Service_Record.i (name): Make sure to delete [] (char *) + this->name_ before allocating a new one. Thanks to + Per.Andersson@hfera.ericsson.se (Per Andersson) for reporting + this. + + * ace/Message_Block: Reworked the reference counting implemention + so that reference counts are shared correctly amongst their + various owners. This requires making a deep copy the "header" + portion, but a shallow copy of the "data." + + * ace/Message_Block.cpp (ACE_Message_Block): Updated all three + ACE_Message_Block constructors so that they all call the init() + method. This centralizes all the initialization logic in one + place. + +Thu Jan 2 00:42:21 1997 Douglas C. Schmidt + + * ace/Message_Block.cpp (ACE_Message_Block): Make sure to set the + cont_ field to 0 after "releasing" it so that we don't + mistakenly think it's still around later on. This problem arose + in the ACE_Message_Queue::close() method, which was trying to + count the number of bytes being freed. + + * ace/Message_Queue.cpp (close): Fixed a subtle bug where we + weren't actually deleting messages from the + ACE_Message_Queue::close() routine. This should work now... + + * ace/Message_Queue.cpp (close): Replaced the use of "delete mb" + with "mb->release()" since the Message_Blocks are now reference + counted. + + * ace/Message_Block: Enhanced the reference counting scheme so + that you can increment and decrement the count by an arbitrary + amount. This is particular useful when you know you'll be + sending the same Message_Block to N consumers. + + * ace/Singleton: The dump() must be used same as instance() + (without supplying an object) so it must be declarated *static*, + i.e., + + static void dump (void); + + Thanks to Sandro Doro for reporting + this. + + * examples/ASX/Event_Server: Completely rewrote and retested the + ACE Event Server example. The new code is *much* easier to + understand, has many more comments, is more robust, and compiles + much faster since I removed many of the templates. + + * examples/ASX/Event_Server/Tranceiver/tranceiver.cpp: Fixed the + tranceiver so that it shuts down correctly when the Event_Server + exits. + + * examples/Connection/non_blocking/CPP-connector.cpp: Fixed a + problem where we were trying to select() on ACE_STDIN on Win32. + Naturally, this doesn't work, so we used the + ACE::register_stdin_handler() to fix this. Thanks to + Samuel_Bercovici + for reporting this. + + * examples/ASX/Event_Server/Event_Server/Options: Changed the + Options class to be a Singleton... + + * ace/Task.h: Added "const" method qualifier to accessor methods + like is_reader() and is_writer(). + +Wed Jan 1 00:10:47 1997 Douglas C. Schmidt + + * ace/Message_Block: Added a new static release() method that + behaves like the non-static method release(), except that it + checks if is 0. This is similar to CORBA::release(), which + is useful if you want to eliminate lots of checks for NULL + pointers before calling release() on them. + + * Updated all places in ACE where we use + ACE_Event_Handler::READ_MASK when we should be using + ACE_Event_Handler::ACCEPT_MASK. + + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp: + Changed the name of the acceptor class from Handle_Thr_Stream to + Handle_Thr_Acceptor, which is more accurate. + + * ace/Reactor: Since we've now got an + ACE_Event_Handler::ACCEPT_MASK (intended primarily to accept + connections asynchronously using Win32 overlapped I/O) we can + now use this with the ACE_Reactor, as well. In particular, any + time that we are registering a "passive-mode" socket acceptor we + can now specify ACE_Event_Handler::ACCEPT_MASK. This is much + more intuitive than using the READ_MASK (which never made any + sense...). The ACE_Reactor now treats the ACCEPT_MASK as a + READ_MASK internally, so you can still use READ_MASK if you'd + like (i.e., this change doesn't break any existing code). + + * ace/Event_Handler: Changed "get_priority" and "set_priority" to + simply "priority(void)" and "priority(int)" to be more + consistent with other parts of ACE. + + * apps/Gateway/Gateway: Updated the Gateway so that the + concurrency strategies can now be specified on the + command-line (or in the svc.conf file), rather than being + determined at compile-time. This is much more flexible. + See the ./apps/Gateway/Gateway/README file for details. + + * apps/Gateway/Gateway: Verified that all the multi-threading + strategies still work. + + * ace/Message_Block.cpp (ACE_Message_Block): Make sure that we + "release" the continuation field, rather than delete it, since + its reference count may be > 1. + + * ace/Log_Msg.cpp (log): Change the abort_prog logic a bit so that + we always print a message to stderr if we're exiting, + regardless... Thanks to David Levine for pointing this out. + + * apps/Gateway/Gateway: Moved all of the configuration file + parsing logic *outside* of the Event_Channel into the Gateway + class so that we wouldn't have unnecessary dependencies. + + * apps/Gateway/Gateway: Redesigned the Gateway so that the + Proxy_Handlers (i.e., the Consumer_Proxy and Supplier_Proxy) + most of their work to the Event_Channel. This "lightweight + proxy" design is an improvement since it is now possible to + emulate the COS Event Channel semantics within the Event_Channel + "kernel." + + * Happy new year! Let's start a new ChangeLog to celebrate the + new year. diff --git a/ACE/ChangeLogs/ChangeLog-97b b/ACE/ChangeLogs/ChangeLog-97b new file mode 100644 index 00000000000..da7e8bf2f84 --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-97b @@ -0,0 +1,9182 @@ +Tue Nov 25 16:18:49 1997 David L. Levine + + * ACE version 4.4, released Tue Nov 25 16:18:49 1997. + +Tue Nov 25 16:03:09 1997 David L. Levine + + * Makefile: fixed Version.h generation to work properly when + $$beta is undefined. + +Mon Nov 24 10:33:34 1997 Douglas C. Schmidt + + * ACE version 4.3.56, released Mon Nov 24 10:33:34 1997. + +Sun Nov 23 13:32:02 1997 David L. Levine + + * ace/IOStream.h: removed DIGITAL_UNIX from #include decision, + so now it just depends on DEC_CXX and its version. Thanks to + Dani Flexer for this fix. + + * netsvcs/lib/Server_Logging_Handler.cpp: updated template + instantiations to match recent change to Server_Logging_Handler_T.h. + +Sat Nov 22 19:16:35 1997 + + * tests/Process_Strategy_Test.cpp: + + main: Removed signal handling code. It is unnecessary since we + do not use kill() anymore. + + Process_Strategy: This subclass of ACE_Process_Strategy + overwrites the process creation method to include connection + counting. + + connection_completed: Made sure that the Reactor is woken up + after all the connections have completed. + + * ace/Priority_Reactor.cpp (init_bucket): Removed extra code. + + * ace/Acceptor.cpp (activate_svc_handler): open svc_handler only + if result is 0. Also removed extra tracing code. + + * ace/Handle_Set.i (reset): Purify is reporting a UMR + (uninitialized memory copy) when copying a Handle_Set. This + comes from the mask fd_set not being memset to 0 by FD_ZERO. + This is therefore a harmless error. + + * tests/Priority_Reactor_Test.cpp (main): The ordering of + auto_ptrs is very subtle.... "auto_ptr reactor" + should come before "auto_ptr impl", i.e., + the implementation should be destroyed *before* the forwarding + class. This is apparent when the implementation class is + removing registered event handlers that hold a pointer to the + forwarding class. + +Sat Nov 22 16:04:07 1997 Carlos O'Ryan + + * ace/Message_Queue.cpp: + Fixed some formating problems in the ACE_Message_Queue::dump + method, thanks to Arturo Montes for + finding this one. + +Sat Nov 22 14:38:22 1997 Steve Huston + + * ace/config-aix-4.2.x.h: Added ACE_TLI_TCP_DEVICE "/dev/xti/tcp". + This fixes Riverace problem ID P32; AIX now joins HP-UX in + supporting XTI/TLI, but not everything (problem P27). + + * ace/UPIPE_Connector.h: + * ace/TLI_Connector.h: Added meta-type information PEER_ADDR and + PEER_STREAM. Fixes Riverace problem ID P37. + + * apps/JAWS/server/HTTP_Server.cpp: Added 'const' to "char *prog". + Fixes Riverace problem P36. + + * examples/Connection/misc/test_upipe.cpp: + * examples/Connection/non_blocking/CPP-connector.cpp: + * examples/Threads/process_mutex.cpp: + * examples/Threads/process_semaphore.cpp: + Added 'const' to "char *" - can't initialize a char * with + a const string. Fixes Riverace problem ID P38, P40. + + * examples/Threads/thread_specific.cpp, tss1.cpp: Moved the Errno + class out to a new file, thread_specific.h. AIX xlC needs to have + the class in a .h file for template generation. Fixes Riverace + problem P42. + * examples/Threads/Makefile: Make sure that, on AIX, the tempinc + directory is cleared before building each new program. + + * performance-tests/Synch-Benchmarks/Makefile: Changed SHLIB to use + $(SOEXT) rather than .so. Fixes Riverace problem ID P41. + + * tests/Thread_Pool_Test.cpp: Moved 'this->getq(mb)' out of an + ACE_ASSERT. Thanks to Arturo Montes + for finding this. + +Sat Nov 22 05:44:10 1997 Nanbor Wang + + * tests/Process_Strategy_Test.cpp (main): Shuffled things around + in fork() block. This is fun. + + * ace/Strategies_T.cpp (activate_svc_handler): Added an + ACE_UNUSED_ARG macro to muffle g++. + + * tests/Process_Strategy_Test.cpp (handle_close): Added a return + type specifier. Without it, g++ laments. + + * ace/Acceptor.cpp (activate_svc_handler): Should be if (open (...) == + -1) then error, not if (open (...) != -1) then error. + + * ace/ACE.cpp (set_handle_limit): Removed a duplicated ACE_TRACE + macro. + +Sat Nov 22 00:26:11 1997 Nanbor Wang + + * ace/Thread_Manager.cpp (close): Activated automatic wait on + close functionality. I think I get it right this time. + +Fri Nov 21 19:59:37 1997 Carlos O'Ryan + + * ace/IPC_SAP.cpp: + Added a couple of ACE_NOTREACHED protections. Thanks to Brian + Mendel for reporting this. + +Fri Nov 21 17:12:48 1997 + + * ace/Thread_Manager.cpp (close): Deactivated automatic wait on + close for now. It doesn't seem to work on Solaris. + + * ace/Thread_Manager.{h,cpp} (wait): Added codes to remove detached + threads. This function can be activated selectively. I added + this so we can ignore detached threads when closing down the + default thread manager. + + (close): Activated the code to wait (join) all threads managed + by the thread manager. It will ask wait function to remove all + detached thread first (and so they won't be counted into threads + we are waiting for.) + +Fri Nov 21 13:22:25 1997 Douglas C. Schmidt + + * ACE version 4.3.55, released Fri Nov 21 13:22:25 1997. + +Fri Nov 21 12:18:28 1997 Douglas C. Schmidt + + * ace/Acceptor.cpp,Strategy_T.cpp: Removed the use of gotos. See + Dijkstra '67 for motivation... + + * tests/Process_Strategy_Test.cpp (open): Make sure that we set + the Reactor of the Svc_Handler to 0 if we're running the + threading test. + + * tests/Reactor_Notify_Test.cpp: Added back THR_BOUND to + make things work on Solaris. + +Fri Nov 21 02:23:47 1997 + + * tests/Process_Strategy_Test.cpp: + + - The event loop execution was based on a fragile timeout + mechanism. This was changed to a more robust mechanism that + counts the connections. + + - The unlinking of the file was moved from the server to the + client. This is necessary since there maybe multiple server + processes that cannot really coordinate when the file should + be removed. + + * ace/Strategies_T.cpp (ACE_Concurrency_Strategy): + ACE_Concurrency_Strategy and all three of the subclasses + (ACE_Reactive_Strategy, ACE_Process_Strategy, and + ACE_Thread_Strategy) were messed up. Only ACE_Reactive_Strategy + was (trying) to set the correct blocking mode of the socket. + Therefore, moved the socket mode setting code to the base class, + ACE_Concurrency_Strategy, so that all the classes can share it. + + This did create one problem though. If the implementation of + the reactor uses event associations (i.e., WFMO_Reactor), we + cannot try to set the socket mode since the registration of the + svc_handler caused an event association to be created for the + socket and by default (thanks Microslush) the socket is set to + non-blocking mode. If the user is excepting to have a socket in + blocking mode, he is in for a surprise. Maybe we should return + a failure if the user is expecting a socket in blocking mode. + This is probably too harsh for now. + + * tests/Future_Test.cpp (open): Added THR_DETACHED since we don't + wait for this thread. + + * tests/Reactor_Notify_Test.cpp (open): Changed THR_BOUND to + THR_DETACHED since we don't wait for this thread. + + * tests/IOStream_Test.cpp (server): Make sure to close the socket + in ACE_SOCK_Acceptor and ACE_SOCK_IOStream. + + * ace/WFMO_Reactor.cpp (open): When I changed open() last, I + ignored the order of the registeration of notify_handler_ and + wakeup_all_threads_handler_. Unfortunately, the order of the + two registrations is very important since the optimization for + owner thread takes advantage of this ordering. Therefore, + revert the order of registertion to notify_handler_ followed by + wakeup_all_threads_handler_. + + * tests/version_tests/run_all_tests.bat: Added new bat file to + make the running of all the different configurations easier. + + * tests/version_tests/version_tests.{mak,mdp}: Added a mammoth + testing scheme that is used to test all 8 configurations of the + tests under Win32. These 8 configurations are: + + DLL Debug + DLL Release + DLL Unicode Debug + DLL Unicode Release + static Debug + static Release + static Unicode Debug + static Unicode Release + + run_tests.bat from the test directory can then be used to run + these various configurations. run_tests.bat was also extended + to allow the user to purify the tests. Simply execute + run_tests.bat with the purify command line option. + +Thu Nov 20 17:43:15 1997 + + * ace/Thread_Manager.cpp (kill_thr): Changed to prevent thread + manager from "discard" a thread when a certain operation is not + supported by the operation system. Removed the mechanism that + preserves errno during "thread removal." We no longer remove + thread right after an error occured. + +Thu Nov 20 17:53:35 1997 Douglas C. Schmidt + + * examples/Shared_Malloc/test_multiple_mallocs.cpp (main): Make + sure make sure that the semaphores created by the program are + released as well as the storage files deleted. Thanks to Tom + Arbuckle for reporting + this. + + * ace: Added a new version of config-osf1-3.2.h. Thanks to Dani + Flexer for updating this. + +Thu Nov 20 18:22:24 1997 Steve Huston + + * ace/README + ace/TLI.h + ace/TLI_Acceptor.h + ace/TLI_Connector.h + Changed from using hardcoded "/dev/tcp" as the XTI device name to + a new config-related define, ACE_TLI_TCP_DEVICE. If the config + doesn't set one, it defaults to "/dev/tcp". Thanks to Steve Coy + for zeroing in on this problem in HP-UX. + + ace/config-hpux-10.x.h: ACE_TLI_TCP_DEVICE is "/dev/inet_cots". + Note that XTI won't work 100% well on HP still - this is Riverace + problem ID P27. + + * netsvcs/lib/Server_Logging_Handler_T.h: Hardcoded to always use + ACE_SOCK_Stream (and friends) rather than ACE_TLI_Stream and friends. + XTI doesn't work real well on some platforms (particularly HP-UX + and AIX). When they're fixed, this can be undone (Riverace problem + ID P28). + + * examples/IPC_SAP/TLI_SAP/CPP-client.cpp: Changed 'char *host' to + 'const char *host' so it can be initialized from a const char string. + +Thu Nov 20 14:19:57 1997 Carlos O'Ryan + + * tests/Priority_Reactor_Test.h: + * tests/Priority_Reactor_Test.cpp: + The test has a limited execution time now, and only reports a + warning if runs out of time. This may be due to some failed + connections, but it is hard to avoid that. On the other hand + the default time should be large enough, in our machines the + test only takes 14 seconds, so 60 seconds should be enough. + NOTE: this problem reveals a problem *only* in the test itself + not in ACE_Priority_Reactor. + +Thu Nov 20 11:29:51 1997 David L. Levine + + * ace/Timer_{Heap,List}_T.{h,cpp}: added + ACE_Timer_{Heap,List}::get_first () accessors. Thanks to + Stephen Henry for this suggestion. + +Thu Nov 20 11:27:44 1997 Douglas C. Schmidt + + * ACE version 4.3.54, released Thu Nov 20 11:27:44 1997. + +Thu Nov 20 10:45:08 1997 + + * tests/MT_SOCK_Test.cpp: Uncommented socket close call. + + * ace/WFMO_Reactor.cpp (open): Open the notification handler + *after* the timer queue has been created. + + * ace/ACE.cpp (get_ip_interfaces): Changed rep() to fast_rep() to + prevent memory leak. + + * ace/Reactor.cpp (ACE_Reactor): Fixed error of not creating any + Reactors on UNIX. + +Thu Nov 20 08:36:54 1997 Nanbor Wang + + * ace/Thread_Manager.{h,cpp}: Added a dummy argument to internal + thread functions. Without them, MSVC wrongly optimizes codes + and the stack were all clobbered when entering these functions. + +Wed Nov 19 23:24:03 1997 + + * ace/Reactor.cpp: Rearragned macros so we use Select_Reactor as + default if we don't have Winsock2. Irfan did it, not me. + +Wed Nov 19 22:11:20 1997 Douglas C. Schmidt + + * ACE version 4.3.53, released Wed Nov 19 22:11:20 1997. + +Wed Nov 19 15:55:52 1997 Sumedh Mungee + + * config-netbsd.h: NetBSD 1.3alpha has a better MSYNC. Commented out + ACE_HAS_BROKEN_NETBSD_MSYNC + +Wed Nov 19 14:26:36 1997 Nanbor Wang + + * stdcpp.h, OS.h: Changed ACE_CONFIG_H to ACE_USER_CONFIG_H. It + conflicts with the macro in various configuration files. + +Wed Nov 19 15:55:45 1997 Douglas C. Schmidt + + * ace/config-sunos5.*.h: Replaced all uses of ACE_HAS_UNICODE with + ACE_HAS_XPG4_MULTIBYTE_CHAR. At this point, I think only NT has + the UNICODE macro now. Thanks to Steve Huston for validating + this. + + * STL/bstring.h: Added a special-case for BorlandC++. However, I + think this can be generalized for all compilers. Thanks to + Valik Solorzano Barboza for reporting this. + + * ace/OS: Fixed strpbrk() to handle the const char * and char * + cases of ANSI C++. Thanks to Valik Solorzano Barboza + for reporting this. + + * ace/OS.h: Added a special case for _MSC_VER since BC++ doesn't + have wchar.h! Thanks to Valik Solorzano Barboza + for reporting this. + +Wed Nov 19 13:43:33 1997 Darrell Brunsch + + * Merged the purify testing into run_tests. Just use + + "run_tests purify ..." + + to purify instead of running the tests. If you thought this + batch file looked bad before.... + +Wed Nov 19 12:17:50 1997 Nanbor Wang + + * ace/{OS,stdcpp}.h (ACE_CONFIG_H): Added this macro to protect + config.h from getting included multiple times. + + * ace/stdcpp.h: Reverted include OS.h back to config.h. + +Wed Nov 19 09:20:05 1997 Douglas C. Schmidt + + * ACE version 4.3.52, released Wed Nov 19 09:20:05 1997. + +Wed Nov 19 07:54:44 1997 Douglas C. Schmidt + + * ace/ACE.cpp (crc32): Reverted the COMPUTE macro back to its + original value. For some reason, the version given by Valik was + failing. + + * ace/SV_Semaphore_Complex.cpp (open): Make sure initialize the + sem_number_ data member, though this isn't actually used for + anything. + + * ace/ACE.cpp: Added a #ifdef for __unix since this is the only + case where we'll actually have the ifreq autoptr. Thanks to + Valik Solorzano Barboza for reporting this. + + * ace/Log_Record.cpp (print): Added a work around for a really + lame bug with BORLANDC. Thanks to Valik Solorzano Barboza + for reporting this. + +Wed Nov 19 04:22:38 1997 Douglas C. Schmidt + + * ACE version 4.3.51, released Wed Nov 19 04:22:38 1997. + +Wed Nov 19 04:02:09 1997 Douglas C. Schmidt + + * include/makeinclude/rules.local.GNU (show_uninit): It seems + there was a missing '@' at the beginning of the line. Thanks to + Hans Rohnert for reporting this. + + * tests/Process_Strategy_Test.cpp (handle_input): Fixed Irfan's + code, which keeps breaking ACE ;-). + +Wed Nov 19 01:55:06 1997 + + * ace/WFMO_Reactor.cpp (resume_handler_i, suspend_handler_i, + unbind_i): Since things don't happen immediately in the + WFMO_Reactor world, we must make sure that this request is not a + duplicate. If so we must ignore it. + + * ace/Asynch_Acceptor.cpp (open): Fixed addr type mismatch problem. + + * tests/UPIPE_SAP_Test.cpp (main): Make sure to close the socket + in ACE_UPIPE_Acceptor. + + * tests/SPIPE_Test.cpp (server): Make sure to close the socket in + ACE_SPIPE_Acceptor. + + * tests/SOCK_Test.cpp (spawn): Make sure to close the socket in + ACE_SOCK_Acceptor. + + * tests/Reactor_Notify_Test.cpp (Supplier_Task): Make sure to + close the pipe down. + + * tests/Process_Strategy_Test.cpp (handle_input): Fixed ACE_DEBUG + statement to pass the correct number of arguments. + + * tests/MT_SOCK_Test.cpp (spawn): Make sure to close the socket in + ACE_SOCK_Acceptor. + + * tests/Reactor_Exceptions_Test.cpp (main): Make sure to close the + socket in ACE_SOCK_Dgram. + + * tests/run_purify_tests.bat: Added "mkdir purify_results". + + * tests/run_tests.bat, run_purify_tests.bat: Changed explicit name + of bat file (e.g., run_tests, run_purify_tests) to %0. This + will allow the bat file to be used from other directories. + + * ace/config-win32-common.h: Removed extraneous define of + ACE_HAS_TEMPLATE_INSTANTIATION. + +Wed Nov 19 00:37:22 1997 + + * ace/stdcpp.h: Changed to use "ace/OS.h" instead of using + "ace/config.h" directly to avoid redefinition of user defined + macros. + + * ace/Log_Msg.cpp (close): Disable Win32 to delete + ACE_Log_Msg::instance (). On Win32, this should be done by + ACE_TSS_Cleanup. + + * ace/OS.cpp (cleanup_tss): Enabled Win32 to call + ACE_Log_Msg::close. This is required to properly release + resourses held by ACE_Log_Msg_Manager. + +Tue Nov 18 19:28:36 1997 Douglas C. Schmidt + + * ace/Select_Reactor.cpp (unbind), + ace/WFMO_Reactor.cpp (handle_signal): Fixed a large number of + bugs with non-portable "scope of the for loop counter"... + Thanks to Valik Solorzano Barboza for + reporting this. + + * ace/Thread_Manager: Added == and != operators for + ACE_Thread_Descriptor to fix things with BORLANDC's template + mechanism. Thanks to Valik Solorzano Barboza + for reporting this. + + * ace/Select_Reactor: Added == and != operators for + ACE_Event_Tuple to fix things with BORLANDC's template + mechanism. Thanks to Valik Solorzano Barboza + for reporting this. + + * ace/OS.i (tempnam): Fixed a typo -- WIN32 should be ACE_WIN32. + Thanks to Valik Solorzano Barboza for + reporting this. + + * ace/OS.h: Reordered the ACE_SEH_* macros so they work correctly + with BORLANDC. Thanks to Valik Solorzano Barboza + for reporting this. + + * ace/OS: Added operator== and operator!= for ACE_Cleanup_Info so + that it will work correctly with BORLANDC's template mechanism. + Thanks to Valik Solorzano Barboza for + reporting this. + + * ace/config-win32-common.h: Added + ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION for BORLANDC. Thanks to + Valik Solorzano Barboza for reporting this. + + * ace/Filecache.cpp: Fixed a bug with BORLANDC. Thanks to Valik + Solorzano Barboza for reporting this. + + * ace/ACE.cpp (crc32): Added some parens to the COMPUTE macro to + make it easier to grok. Thanks to Valik Solorzano Barboza + for reporting this. + +Tue Nov 18 16:27:32 1997 + + * ace/Log_Msg.cpp (log): Added a %D option to Log_Msg for + "month/day/year hour:minute:second:microsecond". Thanks to John + Mulhern <9107@MN3.LAWSON.lawson.com> for suggesting this. + + * ace/config-win32-common.h: If __ACE_INLINE__ is defined to be 0, + we will undefine it. + +Tue Nov 18 15:59:37 1997 Steve Huston + + * ace/IOStream.cpp: In underflow() and overflow(), use base() to + check for buffer in use in every case - not just without + ACE_HAS_STANDARD_CPP_LIBRARY==1. Thanks to James CE Johnson + (jcej@lads.com) for this fix. + + * tests/MT_SOCK_Test.cpp: Allow the test to run even if not all of + the proceses can be forked. + +Tue Nov 18 15:27:37 1997 Nanbor Wang + + * ace/Timer_Queue_Adapters.cpp: Reordered include files. Thanks + to Torbjorn Lindgren for noticing the problem. + +Tue Nov 18 11:40:18 1997 Steve Huston + + * ace/IOStream.(cpp h): Added: &&(ACE_HAS_STANDARD_CPP_LIBRARY != 0) + to the #if defined (ACE_HAS_STANDARD_CPP_LIBRARY) lines to only use + the new iostreams things if that's been selected by the config file. + In ACE_Streambuf::overflow(), changed: + if (!eback()) to if (!pbase()) + +Tue Nov 18 08:23:53 1997 Douglas C. Schmidt + + * tests/Thread_Pool_Test.cpp (open): Moved the activate() method + from the Thread_Pool constructor to the open() hook since the + Thread_Pool class invoked ACE_Task::activate, indirectly invokes + Thread_Pool::svc. There existed a miniscule probability this + code would have crashed since on extremely broken C++ compilers + the virtual member function Thread_Pool::svc may not correctly + initialized in Thread_Pool constructor (i.e., it might point to + ACE_Task_Base::svc() at this point). The chance of this + happening is incredibly remote, but it's still a good ideal to + put the call in the open() method so we can check the return + value in the application. Thanks to Arturo for pointing this + out. + +Tue Nov 18 05:40:53 1997 David L. Levine + + * ace/OS.cpp (inet_aton): on Chorus only, use the native + ::inet_aton (). Thanks to Wei for pointing this out. + + * ace/OS.cpp (gethostby{addr,name}): on VxWorks only, don't htonl + the input address because it already should be in network byte + order. Store the output address in network byte order. Thanks + to Wei for noticing this error. + + * include/makeinclude/wrapper_macros.GNU: add -DACE_PURIFY to + CFLAGS if purify make flag is set, and -DACE_QUANTIFY if + quantify is set. Thanks to Chris Cleeland for this suggestion. + + * ace/Memory_Pool.cpp (ACE_Shared_Memory_Pool): reordered + initializers to match declaration order. + + * etc/purify.solaris2: added suppression of pthread_setcanceltype + BSW. + +Tue Nov 18 00:11:26 1997 Douglas C. Schmidt + + * ACE version 4.3.50, released Tue Nov 18 00:11:26 1997. + +Mon Nov 17 22:35:22 1997 Douglas C. Schmidt + + * examples/Shared_Malloc/test_malloc.cpp: Added some additional + calls to Malloc::instance ()->remove () to cleanup all the + semaphore locks. Thanks to Tom Arbuckle + for reporting this. + + * ace/Memory_Pool.cpp (init_acquire): Fixed a problem caused by + failing to initialize the minimum_bytes_ field in the + ACE_Shared_Memory_Pool class. Thanks to Tom Arbuckle + for reporting this. + + * examples/Shared_Malloc/test_malloc.cpp: Updated the Shared + Malloc test program to use the Singleton Thread Manager. + +Mon Nov 17 18:09:06 1997 + + * All eight different configurations of ACE passed all tests on + our Alpha/NT. + +Mon Nov 17 15:37:52 1997 David L. Levine + + * ace/INET_Addr.cpp (get_host_name): on VxWorks only, moved + ::hostGetByAddr code block to _after_ the check for the + address being INADDR_ANY. Without that check, get_host_name () + never returns the caller's own hostname. + + * netsvcs/lib/Makefile: the first line of the Local Target + (Server_Logging_Handler.*) override mysteriously disappeared. + +Mon Nov 17 02:09:57 1997 Douglas C. Schmidt + + * ACE version 4.3.49, released Mon Nov 17 02:09:57 1997. + +Mon Nov 17 02:03:21 1997 Douglas C. Schmidt + + * ace/IOStream_T.cpp: Added a few more fixes for KCC C++ and its + standard C++ library support. + +Mon Nov 17 01:34:34 1997 + + * netsvcs/servers/main.cpp (main): Removed daemon and changed to + use the singleton service configurator. Thanks to John Mulhern + and Stephen Coy for tracing this down and Irfan for coming out + with the fix. + +Sun Nov 16 21:58:51 1997 Darrell Brunsch + + * tests/*.dsp, ace/*.dsp: Added Release, Unicode Debug, and + Unicode Release versions for each of the tests. + + Also found out that precompiled headers take up insane + amounts of disk space when used with ACE and also slows + the compilation down. I turned it off for the tests and + for the ace libraries + +Sun Nov 16 13:34:29 1997 Douglas C. Schmidt + + * tests/SOCK_Connector_Test.cpp (fail_no_listener_nonblocking): + Changed the line + + status = con.complete (sock); + + to + + if (sock.get_handle () != ACE_INVALID_HANDLE) + status = con.complete (sock); + + The change worksaround a core dump due the the following + conditions: + + - the find_another_host function in SOCK_Connector_Test comes + up with the entry for an NT machine. + + - the ACE_OS::connect call at line 64 of SOCK_Connector.cpp + "successfully" fails returning -1 but in this case + errno is set to ECONNREFUSED. + + - Since errno is not EINPROGRESS or EWOULDBLOCK the + ACE_SOCK_Stream 'new_stream' close member function is called + which, besides closing the "handle", also sets it to + ACE_INVALID_HANDLE. + + - Since the errno was ECONNREFUSED the 'if' test at line 97 of + SOCK_Connector_Test.cpp is true and the next statement + + status = con.complete (sock); + + is called causing a core dump since sock.get_handle() is + ACE_INVALID_HANDLE (-1 on Solaris). + + Thanks to Jack Erickson for reporting this. + + * ace/OS: Cast away the constness of the parameters to _tempnam() + for Borland C++. Thanks to Valik Solrzano Barboza + for this. + + * ace/config-unixware-2.1.2-g++.h: Changed + ACE_HAS_OSF1_GETTIMEOFDAY to ACE_HAS_SVR4_GETTIMEOFDAY. Thanks + to John Connett for reporting this. + + * ace/SPIPE_Addr.cpp (set): Fixed a problem where we were + potentially writing into character constants. Thanks to Darrell + Brunsch for finding this. + + * ace/Get_Opt.cpp (operator): We need to make sure that all uses + of ACE_OS::strchr() are consistent with respect to const + correctness. Thanks to Darrell Brunsch for finding this. + + * ace/config-win32-common.h: Added a few minor changes for Borland + C++. Thanks to Valik Solrzano Barboza for + this. + + * ace/Log_Record.cpp (print): Changed the formal parameter from + "const char host_name[]" to "const char *hostname" so that we + can assign this in the function if necessary. Thanks to Valik + Solrzano Barboza for this. + + * ace/OS.cpp: Moved the constructor for ACE_Cleanup_Info into the + OS.cpp since it doesn't really need to be inline. + + * ace/WFMO_Reactor.cpp (notify): Replaced a "sizeof + ACE_Notification_Buffer" with "sizeof + (ACE_Notification_Buffer)". It's odd that the first approach + (which is incorrect) isn't flagged by MSVC++... Thanks to Valik + Solrzano Barboza for this. + + * ace/OS.i (sema_init): Added an ACE_ALLOCATOR_RETURN in the + appropriate spot. + + * ace/ACE.cpp: Moved the implementation of strsplit_r() into the + ACE.cpp file since it's rather long... + + * ace/OS: To be more conformant to the standard C++ library, + I've added a pair of methods for strstr(), strchr(), strrchr(), + etc. e.g., the function signature strstr(const char*, const + char*) is replaced by the two declarations: + + const char *strstr (const char* s1, const char* s2); + char *strstr (char* s1, const char* s2);" + + Thanks to Valik Solrzano Barboza for this. + + * ace: Added "ace.idl", which is a config file for Borland C++ + 5.x. Thanks to Valik Solrzano Barboza for + this. + + * include/makeinclude/platform_linux_kcc.GNU (SOFLAGS): Improved + this file a bit to work better with NULL pointers. Thanks to + Ben Eng for reporting this. + + * examples/System_V_IPC/SV_Semaphores/Semaphores_1.cpp (main): + Changed allocator to alloc to avoid conflicts with STL. Thanks + to Ben Eng for reporting this. + + * ace/config-linux-kcc.h: Added some fixes for the KCC compiler. + Thanks to Ben Eng for reporting this. + + * ace/IOStream: Added fixes for the standard C++ library. Thanks + to Ben Eng for reporting this. + +Sat Nov 15 17:31:58 1997 Douglas C. Schmidt + + * Ran "make depend" on all of ACE. + +Sat Nov 15 15:55:52 1997 Steve Huston + + * tests/Priority_Reactor_Test.cpp: Removed the writer->peer().close() + call from client() that I added yesterday. ACE_Svc_Handler::destroy + will end up doing the close - thanks to Irfan for pointing this out. + +Sat Nov 15 01:31:58 1997 Douglas C. Schmidt + + * ACE version 4.3.48, released Sat Nov 15 01:31:58 1997. + +Fri Nov 14 23:36:12 1997 Chris Cleeland + + * ace/{OS,ACE}.{h,i} (strsplit_r): Moved strsplit_r from ACE_OS to + ACE, which is where it should go. + + * ace/ACE.cpp (ldfind): Changed uses of strsplit_r to be scoped + under ACE rather than ACE_OS. + +Fri Nov 14 22:57:04 1997 David L. Levine + + * ace/config-vxworks*.h: added ACE_LACKS_NETDB_REENTRANT_FUNCTIONS. + This is necessary for the gethostby{addr,name}_r support added + yesterday. + +Fri Nov 14 18:42:23 1997 Steve Huston + + * tests/Priority_Reactor_Test.cpp: Fixed client to close its socket + before exiting from the thread/process. + +Fri Nov 14 17:41:40 1997 Douglas C. Schmidt + + * ace/OS.i: Fixed some typos in strsplit_r(). + + * ace/OS.h: Moved the ACE_ALLOCATOR* stuff from Malloc_T.h to + OS.h, which is where it belongs. + + * examples/Reactor/Dgram: Reformatted some of the example + code to make it more readable. + +Fri Nov 14 17:08:00 1997 Chris Cleeland + + * ace/OS.i (strsplit_r): Added fixes so that this properly returns + the last piece. Thanks to Scott Herscher for + submitting this! Also beefed up the comments. + + * ace/OS.h: Added definitions to work around VxWorks' lack of + proper ANSI C/C++ prototypes for the functions found in + . The definitions were taken from Solaris 2.5.1, but + appear to work just fine. For now this is only in effect when + compiling with the Green Hills (ghs) environment, but it should + probably be used for others (such as g++) as well. + +Fri Nov 14 01:10:33 1997 Douglas C. Schmidt + + * ACE version 4.3.47, released Fri Nov 14 01:10:33 1997. + +Fri Nov 14 00:14:21 1997 David L. Levine + + * ace/OS.* (gethostbyaddr_r,gethostbyname_r): added VxWorks + support. + +Thu Nov 13 20:29:18 1997 Douglas C. Schmidt + + * ACE version 4.3.46, released Thu Nov 13 20:29:18 1997. + +Thu Nov 13 19:11:36 1997 Douglas C. Schmidt + + * ace/config-sunos5.4.*: Solaris 2.4 doesn't support the ualarm() + call unless you use the (broken) /usr/ucb/cc compiler. Here's a + patch for $ACE_ROOT/ace/config-sunos5.4-sunc++-4.x.h to fix the + problem. Thanks to Caleb Epstein + for reporting this. + +Thu Nov 13 19:25:50 1997 Carlos O'Ryan + + * include/makeinclude/platform_irix6.x-sgic++.GNU: + Updated comment on when should the user disable the use of + -lpthread + +Thu Nov 13 18:18:16 1997 Steve Huston + + * ace/Containers.h, Containers.cpp, Hash_Map_Manager.cpp, Malloc_T.h: + Removed the conditional code for the macro + ACE_HAS_HPUX_ACC_BROKEN_TEMPLATE_DESTRUCTOR. The workaround for + this compiler bug is to remove "this->" from the object pointer + used in the ACE_DES_FREE_TEMPLATE macro invocation. This compiler + bug is HP case SR5003396259 for future reference. + + * ace/config-hpux-10.x-hpc++.h: Added ACE_HAS_ANSI_CASTS; removed + ACE_HAS_HPUX_ACC_BROKEN_TEMPLATE_DESTRUCTOR (both for aC++ only). + + * ace/README: Removed ACE_HAS_HPUX_ACC_BROKEN_TEMPLATE_DESTRUCTOR, as + it is no longer used. + +Thu Nov 13 16:51:40 1997 + + * ace/OS.h: Added two new macros ACE_FACTORY_DECLARE and + ACE_FACTORY_DEFINE. Changed definitions of + ACE_SVC_FACTORY_DECLARE AND ACE_SVC_FACTORY_DEFINE to use these + two macros. Refer to changes of the ACE_Export related macros + below, you can now declare/define your service factories as, + + ACE_FACTORY_DECLARE (FOOBAR, fac_class); + ACE_FACTORY_DEFINE (FOOBAR, fac_class); + + This will ensure they get define properly and proper decoration + will be added. + +Thu Nov 13 16:52:31 1997 Nanbor Wang + + * ace/Thread_Manager.cpp: Removed all ! defined + (ACE_HAS_FSU_PTHREAD). Thanks to ARTURO MONTES + for reporting this. + + * ace/config-gcc-2.7.2.h: Added ACE_HAS_TEMPLATE_SPECIALIZATION. + Thanks to ARTURO MONTES for reporting + this. + + * ace/config-fsu-pthread.h: added ACE_LACKS_THREAD_PROCESS_SCOPING. + Thanks to ARTURO MONTES for reporting + this. + + * ace/OS.h: Separate definition of proper export flag for + platforms from setting these flags for building/not building + DLL. I keep ACE_Export and ACE_Svc_Export to remain backward + compatibality but now, they are defined using the new "common" + definition. This changes is made in hope that it will simplify + codes generated by TAO_IDL compiler. + + Several new directives are added to these file. These common + directives will be set to proper values (macros) according to + the platform we use. They are: + + ACE_Proper_Export_Flag + ACE_Proper_Import_Flag + ACE_EXPORT_SINGLETON_DECLATATION(T) + ACE_IMPORT_SINGLETON_DECLARATION(T) + ACE_PROPER_SINGLETON_INSTANTIATION(T) + + I use them to define ACE_Export and ACE_Svc_Export. I hope it + is easier to define your own export decoration flag now. Here + is an example. Say you want to define an export flag for your + DLL file : foobar.dll. First, you need to add the following to + a common header file: + + // Here are definition for FOO_BAR library. + #if defined (FOOBAR_HAS_DLL) && (FOOBAR_HAS_DLL == 1) + # if defined (FOOBAR_BUILD_DLL) + # define FOOBAR_Export ACE_Proper_Export_Flag + # define FOOBAR_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) + # define FOOBAR_SINGLETON_INSTANTIATION(T) ACE_PROPER_SINGLETON_INSTANTIATION (T) + # else + # define FOOBAR_Export ACE_Proper_Import_Flag + # define FOOBAR_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) + # define FOOBAR_SINGLETON_INSTANTIATION(T) + # endif /* FOOBAR_BUILD_DLL */ + #else /* ! FOOBAR_HAS_DLL */ + # define FOOBAR_Export + # define FOOBAR_SINGLETON_DECLARATION(T) + # define FOOBAR_SINGLETON_INSTANTIATION(T) + #endif /* FOOBAR_HAS_DLL */ + + Be sure to include "ace/OS.h" before these definitions so that + the macros they use will be properly initialized. After you've + done this, on Win32, define "FOOBAR_HAS_DLL=1" if you want to + build DLL, define it as "FOOBAR_HAS_DLL=0" if you want to build + static library. In your library project file, you must define + the directives FOOBAR_BUILD_DLL and decorate classes/objects you + want to export with FOOBAR_Export so that they can be declared + automatically according whether you are building/linking with + static library or dynamic library. + +Thu Nov 13 05:47:42 1997 David L. Levine + + * ace/Thread_Manager.cpp: added ACE_TSS_Singleton instantiation, for the recent Svc_Handler + change. + + * ace/Object_Manager.h (default_mask): moved out of ACE_MT_SAFE + protection. + + * ace/OS.{h,i},config-vxworks-ghs-1.8.h,README (strlen,strcpy): + protect declarations of wchar versions with + ACE_HAS_WCHAR_TYPEDEFS_CHAR. GreenHills typedefs wchar to char. + + * ace/Singleton.cpp: register ACE_TSS_Singletons for cleanup with + Object_Manager. + + * ace/OS.{i,cpp} (gethostbyaddr): added VxWorks support. + +Thu Nov 13 02:06:58 1997 Chris Cleeland + + * ace/Signal.i: Changed to use new Object Manager member. + + * ace/Object_Manager.cpp: Added a new member to the Object + Manager--default_mask. This is the default signal mask employed + by ACE_Sig_Set. Moving the object into the OM saves cycles b/c we + only construct it once and just re-use every time. + + * ace/Handle_Set.cpp: Added two new macros--ACE_DIV_BY_WORDSIZE and + ACE_MULT_BY_WORDSIZE--which either divide or multiply the argument + by ACE_Handle_Set::WORDSIZE. The manner in which this is + accomplished is governed by the #define + ACE_USE_SHIFT_FOR_EFFICIENCY--when defined, ACE tries to use + shifts to implement multiplication and division rather than actual + multiply and divide operations. Currently this is disabled. + +Wed Nov 12 19:13:05 1997 + + * ace/Svc_Handler: Changed hand written tss singleton to + ACE_TSS_Singleton. Lot of (unnecessary) code disappeared. + Thanks to David Levine for suggesting this. + + * ace/Object_Manager: Removed ACE_SVC_HANDLER_LOCK. + +Wed Nov 12 16:29:15 1997 Sumedh Mungee + + * platform_netbsd.GNU: added /usr/lib/c++rtO.o to SOBUILD to + insure that static objects' ctors are called. + +Wed Nov 12 00:20:38 1997 David L. Levine + + * ace/OS.{i,cpp} (inet_ntoa): use VxWorks' native inet_ntoa. It's + not documented but it works. + + * ace/OS.cpp (gethostbyname): on VxWorks, load static first_addr on + every call, not just the first. + + * include/makeinclude/rules.local.GNU: removed extra "fi" in + install operation. + + * include/makeinclude/platform_sunos5_sunc++.GNU: removed +w from + CFLAGS because it generates too many spurious warnings. + + * ace/TTY_IO.cpp (control): commented out unused local variable + c_line. Thanks to Amos Shapira for + reporting this. + + * ace/OS.{h,i} (hostname): added Chorus support. Thanks to Wei + for the patches. + +Tue Nov 11 23:44:17 1997 Douglas C. Schmidt + + * ACE version 4.3.45, released Tue Nov 11 23:44:17 1997. + +Tue Nov 11 21:26:36 1997 Douglas C. Schmidt + + * platform_sunos5_sunc++.GNU, platform_irix6.x-sgic++.GNU, rules.local.GNU: + Added some minor fixes. + +Tue Nov 11 20:18:27 1997 Douglas C. Schmidt + + * Makefile: Added the tests and netsvcs directory to + RELEASE_LIB_FILES since this is pretty important to determine + whether ACE works. Thanks to Chuck Gehr and Steve Coy for this + suggestion. + + * tests/UNIXclerk.conf: Changed "merengue" to "localhost." + Thanks to Steve Coy for this suggestion. + + * ace/config-lynxos.h (getopt): Missing 't' from const => see + getopt prototype parameter list. Thanks to Manojkumar Acharya + . + +Tue Nov 11 08:09:16 1997 David L. Levine + + * ace/OS.cpp (inet_aton): declare local ip_addr as an ACE_UINT32 + instead of a long. Real programmers have 64-bit longs. + + * ace/INET_Addr.cpp (get_host_name): added ACE_UNUSED_ARG (len); + for VxWorks only. + +Tue Nov 11 13:19:46 1997 Torbjorn Lindgren + + * include/makeinclude/rules.local.GNU: Fixed so that the ACE + makefiles doesn't create circular symlinks (happens if + something fails when building libACE.* with "make -k", or when + doing parallel builds). It's now possible to do parallel + builds of libACE.* without having to clean up a mess afterwards. + + * include/makeinclude/platform_irix6.x-sgic++.GNU: Removed + .so build with links instead (ace/apps/examples/tests and my own + programs all work well with this, and the manual seems to suggest + that it hasn't ever been necessary on this platform) + + * ace/config-irix6.x-sgic++-nothreads.h: Added + ACE_HAS_XPG4_MULTIBYTE_CHAR for SGI IRIX 6.[2-5]. + +Tue Nov 11 04:50:06 1997 Nanbor Wang + + * examples/Reactor/Multicast/server.cpp (handle_timeout): Fixed a + typo. Thanks to Sandro Doro for + reporting this. + +Tue Nov 11 04:20:09 1997 Douglas C. Schmidt + + * ACE version 4.3.44, released Tue Nov 11 04:20:09 1997. + +Tue Nov 11 01:44:39 1997 + + * examples/Naming/test_open.cpp (main): Added a new naming test + that binds to the net_local server and tries to bind entries to + it. + + * netsvcs/lib/Name_Handler.cpp: Added a new class called + Naming_Context. This helper class adds the correct default + constructor to the ACE_Naming_Context class so that we can use + it in ACE_Singleton. + + Previously, each Name_Handler was getting its own + Naming_Context. This is obviously incorrect as the mapping + address in already occupied by the first Name_Handler. + Therefore, the Naming_Context was changed into a Singleton + accessable by all Name_Handlers. + + * ace/WFMO_Reactor.cpp (handle_additions && handle_deletions): + Changed code to make sure that we should not make the upcall + until all the internal data structures have been updated. This + is to protect against upcalls that try to deregister again. + +Tue Nov 11 01:28:50 1997 Douglas C. Schmidt + + * ACE version 4.3.43, released Tue Nov 11 01:28:50 1997. + +Mon Nov 10 21:30:04 1997 Aniruddha Gokhale + + * INET_Addr.cpp: In the ACE_INET_Addr::get_host_name (char + hostname[], size_t len) method, an unnecessary local variable + called "name" was being used and the actual parameter "hostname" + was never getting updated. The local variable is now removed and + we use the actual parameter everywhere. + +Mon Nov 10 20:44:43 1997 James C Hu + + * etc/ACE-guidelines.html: Added a section for ACE Design Rules, + and added a design rule about sentinels. + +Mon Nov 10 18:11:05 1997 Sumedh Mungee + + * ace/Singleton.h (ACE_TSS_Singleton): Changed ACE_TSS to + ACE_TSS_TYPE (TYPE), so that the ACE_TSS_TYPE macro (defined in + OS.h) gets used. (Irfan's suggestion.) + +Mon Nov 10 17:02:40 1997 Douglas C. Schmidt + + * ace/OS.h: Reformatted the #ifdef structure of the + ACE_HAS_XPG4_MULTIBYTE_CHAR to conform to ACE usage. + + * ace/Service_Repository.cpp: The close() method needed a '\n' in + one of the debug messages. Thanks to Steve Coy for reporting + this. + +Mon Nov 10 14:09:24 1997 Steve Huston + + * ace/OS.h, OS.i, README: Added new macro, ACE_HAS_XPG4_MULTIBYTE_CHAR + for platforms which supply wchar.h and wide character functions. + Added the use if it in OS.h, and use the functions in OS.i, + strlen and strcpy with wchar_t arguments. + + * ace/config-hpux-10.x.h, config-aix-4.2.x.h, config-mvs.h, + config-sunos5.5-sunc++-4.x.h: Added ACE_HAS_XPG4_MULTIBYTE_CHAR. + +Mon Nov 10 13:33:02 1997 + + * ace/OS.h (ACE_WRITE_GUARD): Added macros for ACE_WRITE_GUARD and + ACE_READ_GUARD. Thanks to Brian Raven + for suggesting this. + + * tests/Thread_Mutex_Test.cpp: Modified version of Mutex_Test that + exclusively works on a Thread_Mutex. + + * tests/Mutex_Test.cpp: Removed this test. It have been + superseded by Thread_Mutex_Test and Process_Mutex_Test. + + * ace/OS.i (thread_mutex_trylock): Fixed the return value and + errno for this system call such that it is consistent with other + trylock calls. + +Mon Nov 10 10:21:55 1997 David L. Levine + + * ace/INET_Addr.cpp: updated gethostbyname/addr support for + Chorus. Thanks to Wei Chiang for + the patches for this fix. + + * ace/config-chorus.h: disabled ACE_LACKS_SOCKETPAIR. Thanks + to Wei for this fix, also. + + * tests/Thread_Mutex_Test.cpp (test): don't compile this function + if ACE_HAS_THREADS is not defined. + + * tests/IOStream_Test.cpp (main): removed extra % at end of + ACE_ERROR_RETURN message. + + * etc/ace_ld,include/makeinclude/platform_vxworks5.x_g++.GNU: + added ace_ld, a drop-in replacement for ld that supports munching. + We need to munch for VxWorks/g++. + + * ACE-INSTALL.html: updated VxWorks info to mention requirement + for perl with VxWorks/g++. And, LD_LIBRARY_PATH must be set + to find the ACE libraries on the host if using TAO. + +Sun Nov 09 23:29:43 1997 Douglas C. Schmidt + + * ACE version 4.3.42, released Sun Nov 09 23:29:43 1997. + +Sun Nov 09 22:18:30 1997 + + * ace/config-win32-common.h (ACE_HAS_ANSI_CASTS): VC++ compilers + support ANSI style casts. + + * ace/OS.h (ACE_static_cast): Added ANSI style cast macros to ACE. + Thanks to Stephen Coy for suggesting this. + +Sun Nov 9 21:34:16 1997 Douglas C. Schmidt + + * ace/OS: Enhanced ACE_OS so that it *always* defines + implementations for the wchar_t versions of strlen() and + strcpy(), even if the platform doesn't explicitly support + UNICODE. This is necessary since TAO needs these functions. + + * ace/OS.h: Added a typedef for wchar_t to handle the case where + the OS doesn't support UNICODE. + + * ace/ACE.cpp: Added hex character routines from TAO since they + are generally useful. + + * ace/OS.h: Moved the TAO-specific #defines into TAO, where they + belong. Thanks to David Levine and Chris Cleeland for insisting + on this... + +Sun Nov 09 17:55:50 1997 + + * examples/ASX/Event_Server/Event_Server/Peer_Router.cpp (open): + Removed codes that reset a socket's non-blocking flag. This has + been taken care of by ACE_Acceptor::activate_svc_handler now and + resetting this flag twice on NT caused us grief. Thanks to + Georges Ata for reporting + the bug. + + * ace/ACE.i (hex2byte,nibble2hex): Replaced ACE_INLINE to inline + for these two functions. Functions in this file are always + inlined. + + * ace/config-win32-common.h (ACE_LACKS_RLIMIT): Added this flags + so we don't need to treat ACE_WIN32 specially. + + * ace/OS.i (getrlimit,setrlimit): Removed unnecessary conditional + flag ACE_WIN32. + + * ace/Thread_Manager.cpp (wait): Merged the two blocks within this + function so that we can avoid relase/acquire lock + unnecessarily. Thanks to Doug for his careful scrutiny. + +Sun Nov 09 09:27:24 1997 David L. Levine + + * ace/Thread_manager.cpp (wait): removed unused local, + threads_waited_on. + +Sat Nov 08 23:20:50 1997 Douglas C. Schmidt + + * ACE version 4.3.41, released Sat Nov 08 23:20:50 1997. + +Sat Nov 8 15:46:30 1997 Douglas C. Schmidt + + * ace/INET_Addr.cpp: Enhanced the get_host_name() functions so + that if the sin_addr.s_addr == INADDR_ANY we assume that we're a + server, and we return our "hostname". + + * Added a number of minor fixes for UNIXWARE with G++. Thanks to + Michael Rueger for reporting these. + + * ace/Thread_Manager.h: Both Irix5 and VxWorks have problems with + local typedefs with GCC. Thanks to Laura Paterno + for reporting this. + + * ace/Timer_Queue_Adapters.cpp: Changed some errant uses of lock_ + to mutex_. Thanks to David Levine for reporting this. + + * ace/ACE.cpp: set_handle_limit() was buggy because it never + increased the handle limit. With this change we do not need + special code in ACE_Select_Reactor with ACE_LACKS_RLIMIT because + this is managed in ACE::set_handle_limit. Thanks to Arturo for + this fix. + + * ace/Select_Reactor.cpp (open): We no longer need to + conditionally compile for ACE::set_handle_limit(). Thanks to + Arturo for this fix. + +Fri Nov 7 18:53:13 1997 Sumedh Mungee + + * ace/config-netbsd.h: Added file for NetBSD 1.2G. + + * tests/SOCK_Connector_Test.cpp (fail_no_listener_nonblocking): + Added ECONNREFUSED as a "valid failure", alongwith EWOULDBLOCK. + + * ace/OS.i (msync): msync on NetBSD takes only two parameters as + opposed to the usual three. (It doesnt have the "flags" + parameter.) The ACE_HAS_BROKEN_NETBSD_MSYNC flag works around + that. + +Fri Nov 7 16:04:35 1997 Douglas C. Schmidt + + * ace/Thread_Manager.cpp: Added a missing '>' for one of the + template specializations. Thanks to Torbjorn Lindgren + for reporting this. + + * ace/OS.cpp: ACE_OS::ACE_OS is defined in OS.cpp, which causes + the compiler to complain about multiple definitions. Other + ACE_CLASS_IS_NAMESPACE doesn't have constructors, which is why + they work. Thanks to Torbjorn Lindgren for + reporting this. + +Fri Nov 07 15:14:51 1997 David L. Levine + + * examples/Threads/tss1.cpp: replaced ACE_SYNCH_1 and _2 with + _DECL and _USE. + + * ace/config-linux{,-common}.h: created config-linux-common.h + and moved alpha-specific defines to it. + + * ace/FILE_Addr.cpp (set): explicitly declare int return type. + + * performance-tests/Misc/preempt.cpp (get_options): DEC CXX didn't + like conversion of -1 to u_int, so changed return type to int and + all ACE_ERROR_RETURNs to return -1. + +Fri Nov 07 10:05:12 1997 Douglas C. Schmidt + + * ACE version 4.3.40, released Fri Nov 07 10:05:12 1997. + +Fri Nov 7 09:58:09 1997 Douglas C. Schmidt + + * ace/Connector.cpp (fini): Added a call to + ACE_Map_Manager::close() in fini() since the destructor may not + be called. Thanks to Eric C. Newton for + reporting this. + + * ace/{FILE,SPIPE}_Addr.cpp (set): Added a return value. Thanks + to Marios Zikos for reporting this. + +Fri Nov 07 02:45:55 1997 Douglas C. Schmidt + + * ACE version 4.3.39, released Fri Nov 07 02:45:55 1997. + +Fri Nov 7 01:06:08 1997 Douglas C. Schmidt + + * ace/Message_Queue: Added a new method called deactivated(), + which returns true if the queue has been deactivated. Thanks to + Wei Chiang for reporting this. + + * ace/{config-chorus.h,OS.cpp}: Added a new macro called + ACE_CHORUS_DEFAULT_MIN_STACK_SIZE. Thanks to Wei Chiang + for reporting this. + + * ace/DEV_Addr.cpp, + ace/FILE_Addr.cpp, + ace/SPIPE_Addr.cpp, + ace/INET_Addr.cpp, + ace/UNIX_Addr.cpp: Fixed the set(const Foo &) method so that + it correctly detects cases where we're passed in a + ACE_Addr::sap_any. This is a total hack... + + * ace/{OS.h,Addr.cpp}: Added a new AF_ANY flag, which is set to -1. + +Thu Nov 6 23:05:14 1997 Douglas C. Schmidt + + * Changed the obtusely named ACE_SYNCH_1 and ACE_SYNCH_2 macros to + ACE_SYNCH_DECL and ACE_SYNCH_USE, respectively. Thanks to Mike + Kamrad for suggesting this. + + * ace/Select_Reactor.cpp, ace/ACE.cpp: Broaded the comparison so + that we only try to use {set|get}rlimit() if ACE_LACKS_RLIMIT is + *false*. Thanks to Arturo Montes for + reporting this. + + * ace/Object_Manager: Added support for + get_singleton_lock(ACE_Mutex *). Thanks to Arturo Montes + for reporting this. + + * ace/Connector.cpp: If connect_n() fails make sure to return -1. + Thanks to Stephen Coy for pointing out the + problem. + + * ace/config-sco-5.0.0.h: Removed the ACE_LACKS_RLIMIT flag. + Thanks to Arturo Montes for reporting + this. + + * tests: Changed all uses of "localhost" to + ACE_DEFAULT_SERVER_HOST. This solves some problems with MVS. + Thanks to Chuck Gehr for reporting + this. + + * examples/Timer_Queue: Changed COMMAND to CMD so it won't + conflict with the HP/YUX compiler. Thanks to Sandro Doro + for reporting this. + +Thu Nov 06 22:13:01 1997 + + * examples/Connection/blocking/SPIPE-connector.cpp (init): Fixed + odd looking typecast. + + * ace: Changed the comparison &local_sap == &ACE_Addr::sap_any to + local_sap == ACE_Addr::sap_any. Thanks to Steve Coy + for pointing out that the default + parameter const ACE_Addr &local_sap = ACE_Addr::sap_any will + cause a copy of sap_any to be made and passed to the method, + invalidating the memory address comparison. + + The following files were effected: + + Asynch_Acceptor.cpp + SOCK_Acceptor.cpp + SOCK_CODgram.cpp + SOCK_Dgram.cpp + TLI_Acceptor.cpp + TLI_Connector.cpp + + * ace/Addr.cpp: Made sure that the type and size of + ACE_Addr::sap_any does not match the type and size of any other + Addr type. This is necessary for local_addr==ACE_Addr::sap_any + to return 0 when local_addr is anything other than + ACE_Addr::sap_any. + + * ace/Synch_T.h: Fixed all the ACE_SYNCH_* defines. Thanks to + Matthias Kerkhoff for pointing the + problems. + +Thu Nov 06 18:30:42 1997 Steve Huston + + * ace/Addr.(h i), DEV_Addr.(h i), FILE_Addr.(h i), INET_Addr.(h + cpp), SPIPE_Addr.(h i), UNIX_Addr.(h i): Changed the operators + == and != to be non-virtual, and to accept the 'sap' argument as + its own type (not ACE_Addr for all of them). The + implementations of the operators compare type-specific data + without having to check the inherited type member. Thanks to + Steve Coy and Irfan and Nanbor for a huge + amount of work on these changes. *** NOTE - there is still some + SOCK_Connector problems related to these changes on HP-UX. The + hunt continues. + + * ace/Connector.cpp (connect_n): return -1 if any of the connect + attempts fail. + + * tests/Reactor_Performance_Test.cpp: Don't crash if any of the + client's connect attempts fail. + + * ace/Reactor.h: Added #include "ace/Handle_Set.h" - AIX needs the + class definition when generating templates in programs. + + * tests/Map_Manager_Test.cpp: Don't even try if the compiler doesn't + have template specialization working correctly. + + * tests/Priority_Reactor_Test.h: Added #include "ace/SOCK_Stream.h" + so AIX could generate template code correctly. + + * tests/Reactor_Performance_Test.cpp: Moved class definitions out to + Reactor_Performance_Test.h (new file) to allow AIX to generate + templates. + + * tests/SOCK_Connector_Test.cpp: Added a couple more checks to make + sure the local host is not the test target, and changed from using + port 4242 to 42000 (there is actually a program on AIX which listens + at port 4242). + + * tests/Thread_Manager_Test.cpp: Moved a class definition out to + Thread_Manager_Test.h (new file) to allow AIX to use it in template + generation. + + * tests/Timer_Queue_Test.cpp: Limit the number of iterations to 2000. + +Thu Nov 6 16:51:36 1997 Sumedh Mungee + + * tests/SOCK_Connector_Test.cpp (find_another_host): Added + ACE_NETBSD to the #if define around gethostent. + +Thu Nov 06 00:08:01 1997 Douglas C. Schmidt + + * ACE version 4.3.38, released Thu Nov 06 00:08:01 1997. + +Wed Nov 5 21:32:36 1997 Douglas C. Schmidt + + * ace/Service_Repository.cpp (close): Looking in the + Service_Repository while shutting it down does really bad + things. Some careful changes to the loop in + Service_Repository::close() fixed this. Thanks to Eric + C. Newton for reporting this. + + * Added new support for SCO UNIX with no threads. Thanks to + Arturo Montes for reporting this. + +Wed Nov 05 20:31:36 1997 + + * ace/Connector.cpp (close): Added an explicit close() method for + the Strategy_Connector. This closes down all Strategy_Connector + specific things and then calls close() on the base class. Also + modified the destructor to call this routine. + +Wed Nov 5 17:09:05 1997 Nanbor Wang + + * ace/OS.cpp (cleanup_tss): Rearranged how TSS'es get cleanup on + Win32. This was causing a tiny memory leak on NT. + +Wed Nov 5 15:03:31 1997 Nanbor Wang + + * ace/Thread_Manager.{h,cpp}: Changed the data type of + terminated_thr_queue_ back to + ACE_Unbounded_Queue. + +Wed Nov 05 14:16:27 1997 Steve Huston + + * ace/OS.i (mutex_trylock): Fixed code for ACE_HAS_DCE_DRAFT4_THREADS + (HP-UX) to process the returned status correctly. Thanks to + Robert Head for reporting this. + +Wed Nov 05 13:01:49 1997 David L. Levine + + * ace/ACE.cpp (daemonize): added ACE_UNUSED_ARG (close_all_handles) + if ACE_LACKS_FORK. + +Wed Nov 05 01:06:53 1997 Douglas C. Schmidt + + * ACE version 4.3.37, released Wed Nov 05 01:06:53 1997. + +Tue Nov 04 23:11:41 1997 + + * ace/Thread_Manager.h: Added an ACE_Unbounded_Queue to + collect threads that need to be removed. We can no longer + remove thread descriptors directly from because that + would clobber the integrity of the double-linked list. Changed + the data type of from + ACE_Unbounded_Queue to + ACE_Unbounded_Queue to reduce the codes + generated. + + * ace/Thread_Manager.cpp: Reordered several thread operations so they + won't remove thread descriptor directly while traversing the + . Removed #ifdef from template + instantiation section because now VxWorks needs it too. + + * ace/Container.{h,cpp}: Added more check on validities of passed in + node to ACE_Double_Linked_List::remove_element. Also changed + the function to reset a node's and to prevent + double removal of a node, which messes up the list structure. + + * ace/ace_{dll,lib}.dsp: Excluded Acceptor.cpp from make + explicitly. Moving this file to "template file folder" was not + enough. + +Tue Nov 4 18:03:51 1997 Douglas C. Schmidt + + * ace/config-sco*.h: Added #define ACE_DEFAULT_CLOSE_ALL_FILES 0 + to the SCO Unix config files. + + * ace/ACE.cpp: Added a new macro called + ACE_DEFAULT_CLOSE_ALL_FILES to workaround a bug with SCO Unix. + Thanks to Arturo Montes for reporting + this. + + * The ACE developer's drinking song: + + 100 little bugs in the code, + 100 bugs in the code, + fix one bug, compile it again, + 101 little bugs in the code. + 101 little bugs in the code..... + + Thanks to Steve Huston for appreciating the humor in this ;-). + + * ace/Containers.cpp (insert_head): Added some minor stylistic + fixes. + + * apps/Gateway/Gateway/Event_Channel.cpp (initiate_acceptor): + Changed + + if (ACE_Reactor::instance ()->register_handler + (&this->acceptor_, ACE_Event_Handler::ACCEPT_MASK) == -1) + + to: + + if (this->acceptor_.open(this->options ().acceptor_port_, + ACE_Reactor::instance (), this->options ().blocking_semantics_) == -1) + + Thanks to Ganesh Pai for reporting this. + + * apps/Gateway/Gateway/Gateway.cpp (parse_args): Changed + + ACE_Get_Opt get_opt (argc, argv, "abC:cdP:pq:t:vw:", 0); + + to: + + ACE_Get_Opt get_opt (argc, argv, "abC:cdP:p:q:t:vw:", 0); + + Thanks to Ganesh Pai for reporting this. + +Tue Nov 4 18:13:52 1997 Sergio Flores + + * examples/Timer_Queue/Async_Timer_Queue_Test.cpp (cancel): + Initialized act pointer variable to 0, which was causing + core dump in linux. In general, all pointers should be + initialized. This should have been warned by the compiler. + Thanks to Sandro Doro for + pointing this out. + +Tue Nov 4 11:14:35 1997 Nanbor Wang + + * ace/Containers.cpp: Fixed some stylistic ambiguities. + +Tue Nov 04 10:12:21 1997 David L. Levine + + * include/makeinclude/platform_hpux.GNU: added +a1 to CFLAGS + to select ANSI C, instead of the default K+R C. This is + required with the current ace/Object_Manager.cpp, because + it initialized autos using aggregates (via the + ACE_STATIC_SVC_DEFINE macro). Thanks to Neil B. Cohen + for helping to sort this out. + + * examples/Timer_Queue/Thread_Timer_Queue_Test.cpp: changed + another lock () to mutex (). + + * tests/run_tests.vxworks: added MT_SOCK_Test. + +Tue Nov 04 04:13:23 1997 Douglas C. Schmidt + + * ACE version 4.3.36, released Tue Nov 04 04:13:23 1997. + +Tue Nov 04 03:50:57 1997 + + * ace/Addr.i (operator == && operator !=): Comparison of + sap.addr_type_ should be with this->addr_type_ and not with 0. + +Mon Nov 3 23:18:33 1997 Sergio Flores + + * ace/Synch_T.cpp (dump): change the field lock_ to mutex_. + +Mon Nov 3 22:37:58 1997 Nanbor Wang + + * ace/Timer_Wheel_T.cpp: + * ace/Timer_List_T.cpp: + * ace/Timer_Hash_T.cpp: Changed the use of lock_ to mutex_. + + * ace/OS.cpp (cleanup_tss): Added TSS cleanup codes for Win32 when + non-main threads are exiting. Without them, Thread_Manager won't + cleanup its thread table correctly. + + * ace/SV_Semaphore_Complex.cpp (close): Changed to return 0 + only when this->key_ == -1 instead of <= -1. This was causing + semaphore leaks on Solaris. + + * ace/UNIX_Addr.i (operator ==): + * ace/SPIPE_Addr.i (operator ==): + * ace/FILE_Addr.i (operator ==): + * ace/DEV_Addr.i (operator ==): + * ace/INET_Addr.cpp (operator ==): Added checking for the same + Addr types for addresses under comparison. Thanks to Stephen + Coy for pointing out the problem. + +Mon Nov 03 18:32:42 1997 Carlos O'Ryan + + * ace/Proactor.cpp: + * ace/Timer_Queue_T.h: + * ace/Timer_Queue_T.cpp: + * ace/Timer_Heap_T.cpp: + * ace/Synch_T.h: + * ace/Synch_T.cpp: + * ace/Atomic_Op.i: + Changed the method name from lock() to mutex(), otherwise the + lame HP/C++ compiler gets completely confused. Also changed the + field from lock_ to mutex_ + +Mon Nov 3 17:15:17 1997 Steve Huston + + * ace/OS.h: Removed "class ace_dewarn_gplusplus;" from the + ACE_CLASS_IS_NAMESPACE macro. Produces warnings on AIX and + shouldn't be needed. + +Mon Nov 3 15:49:18 1997 Chris Cleeland + + * ace/Connector.cpp (connect): "Fixed" so that the service handler + pointer passed in by the caller doesn't change until the connect + completes without errors. + +Mon Nov 03 08:15:21 1997 David L. Levine + + * ace/Managed_Object.[hi] (get_preallocated_{object,array}): + inlined function definitions into the class header so that + it compiles on AIX 4.1 w/ xlC 3.01. Thanks to Bob Lyng + for reporting this problem, + at to Steve H. for testing the fix. + + * include/makeinclude/{platform_linux*.GNU,wrapper_macros.GNU}, + netsvcs/lib/Makefile: suppress -g when compiling ace/Timer_Hash.cpp + and netsvcs/lib/Server_Logging_Handler.cpp on Linux only. + (It really only needs to be suppressed on Linux/Alpha.) + + * apps/Gateway/Gateway: protect instantiation of + ACE_Svc_Handler + with ACE_HAS_THREADS. + + * ace/{Naming_Context.cpp,Service_Config.cpp,Object_Manager.cpp}: + moved ACE_Naming_Service and ACE_Service_Manager static service + objects to ACE_Object_Manager. + + With this change, the ACE library no longer has any static + objects that require destruction. + + * ace/Object_Manager.h: added documenation of + ACE_HAS_NONSTATIC_OBJECT_MANAGER config #define. + + * performance-tests/Misc/preempt.cpp: cleaned up cleanup so that + it compiles cleanly. + +Sun Nov 02 18:09:14 1997 Douglas C. Schmidt + + * ACE version 4.3.35, released Sun Nov 02 18:09:14 1997. + +Sun Nov 2 15:31:45 1997 Douglas C. Schmidt + + * ace/Select_Reactor.i (cancel_timer): Make sure that we don't try + to call cancel() through a NULL this->timer_queue_. Thanks to + Stephen Coy for reporting this. + + * ace/ACE.cpp (set_handle_limit): Fixed a subtle bug that occurs + if the OS doesn't like non-initialized rlimit structs. Thanks + to Stephen Coy for reporting this. + + * examples/System_V_IPC/SV_Semaphores/Semaphores_2.cpp (main): + Renamed allocator to my_alloc to work around wonderful STL and + GCC problems... Thanks to Ben Eng for + reporting this. + + * examples/System_V_IPC/SV_Semaphores/Semaphores_1.cpp: Removed + unused constant SHMSZ. Thanks to Ben Eng for + reporting this. + + * examples/Reactor/Misc/test_time_value.cpp (operator<<): Removed + the "dec" stream manipulator since it isn't portable. Thanks to + Ben Eng for reporting this. + + * performance-tests/Misc/preempt.cpp (main): Cleaned up this test + so it compiles on non-threaded platforms. Thanks to Ben Eng + for reporting this. + + * examples/Timer_Queue/main_*.cpp (main): std::auto_ptr does not + have an operator= that accepts a raw pointer. Therefore, we + must assign raw pointers to an auto_ptr via the constructor. + Thanks to Ben Eng for reporting this. + + * apps/Gateway/Gateway/Proxy_Handler.cpp: Make sure we distinguish + between ACE_NULL_SYNCH and ACE_MT_SYNCH since these will be + different on all platforms, whereas ACE_SYNCH will be the same + as ACE_NULL_SYNCH on platforms without threads. Thanks to Ben + Eng for reporting this. + + * ace: Removed lots of uses of NULL and replaced them with 0. + This works around bugs with lame C++ compilers that treat NULL + as (void *). Thanks to Ben Eng for reporting + this. + + * ace/Thread.i (spawn): Replaced "stack" with "thr_stack" to work + around bugs with lame C++ compilers and STL. Thanks to Evgeny + Beskrovny for reporting this. + +Sat Nov 1 11:55:05 1997 Douglas C. Schmidt + + * ace/config-irix5.3-g++.h, + ace/config-irix5.3-sgic++.h: Removed the ACE_HAS_SYS_SIGLIST + macro since it doesn't seem to be working. Thanks to Laura + Paterno for reporting this. + + * include/makeinclude/platform_chorus.GNU: Tidied up + platform_chorus.GNU a bit. Thanks to Wei Chiang + for this. + +Fri Oct 31 14:35:37 1997 David L. Levine + + * ace/OS.cpp (thr_create): on Chorus, double the stack size to + avoid bad problems. Thanks to Wei Chang + for diagnosting this. + + * ace/Hash_Map_Manager.cpp (unbind_i): set the int_id + reference argument instead of ignoring it. Thanks to + Wei Chang for providing the patch. + + * ace/OS.h,README: wrapped #include of dlfcn.h with + ACE_HAS_DLFCN_H_BROKEN_EXTERN_C to support RedHat 4.2 + Linux 2.0.30/Alpha. + + * ace/OS.i,README: added ACE_HAS_GETRUSAGE_PROTO support, for + platforms that have a getrusage () prototype that is + different from the one in OS.i. + + * ace/config-linux.h: added added some #defines to enable + builds on RedHat 4.2/Linux 2.0.30/Alpha. + + * include/makeinclude/platform-linux.GNU: added -pipe and + bumped optimization level up to -O3. + + * ace/Thread_Manager.cpp (wait_task): no-op if thr_list_ + size is 0. wait_task () can be called under that condition + (after Thread_Manager::wait () has returned) from an + ACE_Stream destructor, through ACE_Module::close () and + ACE_Task_Base.wait (). Without this change, wait_task () + allocated a copy_table array of size 0. Sun C++ leaked + that array, according to Purify. + + * ace/Service_Config.*,Object_Manager.cpp: moved static + ACE_Service_Config::signal_handler_ to Object_Manager. + + * include/makeinclude/rules.local.GNU (show_statics,show_uninit): + added $(TOOLENV) to allow specification of full path to nm. + Thanks to Wei Chiang for this suggestion. + + * include/makeinclude/platform_chorus.GNU: added trailing "/" + to TOOLENV definition, so that it can be empty when not used. + + * ACE-INSTALL.html,include/makeinclude/wrapper_macros.GNU: + added documentation for ACE show_statics and show_uninit targets. + These are only supported with g++. + +Fri Oct 31 00:53:52 1997 + + * The following five changes were suggested by Stephen Coy + . Thanks Stephen. + + * ace/OS.h (ACE_CLASS_IS_NAMESPACE): Changed friend + ace_dewarn_gplusplus to friend class ace_dewarn_gplusplus. + + * ace/Malloc_T.h: Move the #include files to just after the + declaration of the macros, otherwise Containers.cpp will be + #included before the definition of the various allocator macros + (such as ACE_ALLOCATOR_RETURN) have been seen (when + ACE_TEMPLATES_REQUIRE_SOURCE is defined). + + * ace/Hash_Map_Manager.cpp (close_i): Changed &table[i] to + &table_[i]. + + * ace/Containers.h: The ACE_Node destructor needs to be publicly + accessible in order to support the + ACE_HAS_HPUX_ACC_BROKEN_TEMPLATE_DESTRUCTOR fix. Unfortunately, + making the template function + ACE_Destructor_Template_For_HPUX_aCC_Only a friend does not seem + to work (although it should). + + * ace/ACE.cpp (ldfind): Changed path_entry from char* to + const char*. + + * tests/Priority_Reactor_Test.cpp (main): Fixed auto_ptr usage. + Thanks to Jack Erickson (jack@pinion.com) for pointing this out. + + * ace/OS.h (ACE_CLASS_IS_NAMESPACE): Changed the macro to not + include the destructor. This causes undefined destructor + problems on Win32. Also added ACE_UNIMPLEMENTED_FUNC macros + around the remain functions. + +Thu Oct 30 21:22:47 1997 David L. Levine + + * ace/Makefile: added auto Svc_Conf_[ly].cpp patches. + + * etc/Svc_Conf_[ly].cpp.diff,README: the ace/Svc_Conf_[ly].cpp + patches, and instructions for updating them. + +Thu Oct 30 19:54:50 1997 Douglas C. Schmidt + + * ACE version 4.3.34, released Thu Oct 30 19:54:50 1997. + +Thu Oct 30 17:49:56 1997 Douglas C. Schmidt + + * tests/Priority_Task_Test.cpp (main): Moved "int status" out of + the #if defined (ACE_HAS_THREADS) so that it will compile when + the platform *doesn't* have threads. + + * ace/Synch_T.i (ACE_TSS): Added a missing ':' that was causing + problems on platforms that lack threads. Thanks to Laura + Paterno for helping to track this + down. + + * ace/Signal.cpp (register_handler): Make sure not to use + SA_SIGINFO if we're running on LynxOS. At some point, we'll + want to generalize this, once enough OS platforms support POSIX + real-time signals. Thanks to Kirill.Rybaltchenko + for reporting this. + + * include/makeinclude/platform_chorus.GNU (CXX): Replaced + DCFLAGS += -g with DCFLAGS += -gstabs+. Thanks to + Wei Chiang for this. + + * ace/OS.cpp: It's not valid to set the NULL_key to anything other + than implicit initialization. In particular, if we set it to -1 + it breaks on pthreads systems... Thanks to Check Gehr for + reporting this. + + * ace/config-irix5.3*++.h: Added ACE_NEEDS_SYSTIME_H. Thanks to + Laura Paterno for reporting the + problem. + + * ace/OS.h: Moved the unistd.h files back down to where + they originally were defined since this was unnecessary. + + * include/makeinclude/platform_chorus.GNU (CXX): Replaced + DCFLAGS += -g with DCFLAGS += -gstabs+. Thanks to + Wei Chiang for this. + +Thu Oct 30 17:41:19 1997 James C Hu + + * ace/OS.h: Stray semi-colon removed from ACE_CLASS_IS_NAMESPACE + macro. + +Thu Oct 30 17:04:52 1997 + + * ace/OS.h (ACE_CLASS_IS_NAMESPACE): Changed the macro to not + include the destructor. This causes undefined destructor + problems on Win32. Also added ACE_UNIMPLEMENTED_FUNC macros + around the remain functions. + +Thu Oct 30 10:50:21 1997 Chris Cleeland + + * ace/OS.h: Added new macro--ACE_CLASS_IS_NAMESPACE ()--to + designate that a class is being used as a pseudo-namespace. It + declares private CTOR, Copy CTOR, and DTOR, as well as a friend + declaration in order to de-warn on g++. Typical usage would be + something like: + + class FooBarNamespace + { + ACE_CLASS_IS_NAMESPACE (FooBarNamespace); + + public: + static ... + }; + + The ACE_OS class has been updated to use this. + + * ace/ACE.h: Updated class ACE to use the new + ACE_CLASS_IS_NAMESPACE (). + + * ace/OS.i (getopt): Changed ACE_LACKS_SOME_POSIX_PROTOTYPES back + to ACE_LACKS_POSIX_PROTOTYPES so that a clean build on Linux is + achievable now. + (msgsnd): Corrected errant spelling from + ACE_LACKS_POSIX_SOME_PROTOTYPES to + ACE_LACKS_SOME_POSIX_PROTOTYPES. + +Thu Oct 30 06:14:58 1997 David L. Levine + + * Makefile,ACE-INSTALL: removed ACE-INSTALL from CVS control. + It will only be created when a release is made in + /project/adaptive/ACE_wrappers, and not put under CVS control. + + * ace/Manager_Object.h: added ACE_INLINE specifier to + get_preallocated_object/array declarations. Thanks to + Torbjorn Lindgren for reporting this. + + * ace/Synch.cpp: removed duplicate + ACE_Write_Guard instantiation. Thanks to + Torbjorn Lindgren for reporting this. + + * tests/Conn_Test.cpp: fixed template instantiation pragmas. + Thanks to Torbjorn Lindgren , again. + + * tests/SPIPE_Test.cpp: replaced ACE_UNUSED_ARG of client and server + with conditional compilation of those functions. Thanks to + Torbjorn Lindgren for snagging this. + + * ace/OS.{h,cpp},Object_Manager.cpp (tss_open,tss_close): removed + tss_open () dynamic allocation option because it wasn't used. + Removed tss_close() because it was a no-op without tss_open () + dynamic allocation. + + * ace/OS.cpp (tss_open): On VxWorks, don't check for 0 tss_base (). + It's not always 0 on program startup, especially if a program + has been previously run by the shell directly, without spawning + a new task to run it. + + * ace/OS.*: added ACE_TSS_EMULATION support for non-scalar + ACE_thread_key_t. Thanks to Chuck Gehr + for motivating this. + + * ace/config-mvs.h: added ACE_HAS_NONSCALAR_THREAD_KEY_T. It + is only used with ACE_HAS_TSS_EMULATION, which currently is + not supported on MVS. + + * ace/OS.cpp (ACE_Thread_Adapter::invoke): cleaned up this function. + +Thu Oct 30 03:25:13 1997 Nanbor Wang + + * ace/Hash_Map_Manager.cpp (close_i): Can't use ACE_DES* + template. Have I been here before? + +Thu Oct 30 03:03:41 1997 Nanbor Wang + + * ace/Hash_Map_Manager.cpp (close_i): Changed to use ACE_DES* macros. + + * ace/OS.h: Moved ACE_Allocator related macros to Malloc_T.h + + * ace/Malloc_T.h: Moved ACE_Allocator related macros from OS.h. + Added two macros ACE_DES_NOFREE and ACE_DES_NOFREE_TEMPLATE to + call objects' destructors explicitly. This is required to + take care of some "broken" compilers. Thanks to Stephen Coy + for providing the fix for HP-UX aCC. + + * ace/README: + * ace/config-hpux-10.x-hpc++.h: Added flag + ACE_HAS_HPUX_ACC_BROKEN_TEMPLATE_DESTRUCTOR. + +Thu Oct 30 02:56:25 1997 Douglas C. Schmidt + + * ACE version 4.3.33, released Thu Oct 30 02:56:25 1997. + +Thu Oct 30 01:03:21 1997 Douglas C. Schmidt + + * ace/LOCK_SOCK_Acceptor.cpp: Added a #include of "ace/Synch.h" so + that the Conn_Test.cpp will compile on HP/UX. Thanks to Stephen + Coy for reporting this. + +Wed Oct 29 22:55:15 1997 Nanbor Wang + + * ace/config-vxworks5.x-g++.h: + * ace/config-unixware-2.1.2-g++.h: + * ace/config-unixware-2.01-g++.h: + * ace/config-sunos5.5-g++.h: + * ace/config-sunos5.4-g++.h: + * ace/config-sunos4-g++.h: + * ace/config-osf1-4.0.h: + * ace/config-osf1-4.0-g++.h: + * ace/config-linux.h: + * ace/config-linux-pthread.h: + * ace/config-linux-lxpthreads.h: + * ace/config-irix6.x-g++.h: + * ace/config-irix5.3-g++.h: + * ace/config-hpux-10.x-g++.h: + * ace/config-gcc-2.7.2.h: + * ace/config-freebsd.h: + * ace/config-freebsd-pthread.h: + * ace/config-chorus.h: + * ace/config-aix-4.1.x.h: + * ace/README: Removed ACE_HAS_BROKEN_EXPLICIT_TEMPLATE_DESTRUCTOR. + It is no longer in use. + +Wed Oct 29 21:12:55 1997 Douglas C. Schmidt + + * ace/README: Added a new macro called ACE_LACKS_SOCKET_BUFSIZ, + which is enabled on VxWorks. + + * ace/OS.h: Added a new macro called + ACE_DEFAULT_MAX_SOCKET_BUFSIZ, which is set to 65536. + + * ace/OS: Changed the tolower() method to to_lower() so that it + won't conflict if there's a macro with the same name. + + * ace/OS.h: #include before ACE_Time_Value as long as + ACE_LACKS_UNISTD_H is false. Added this flag to the VxWorks and + Win32 config.h files. + + * ace/OS.h: Added a special #define for IRIX5, which seems to put + timeval in a strange file... Also, moved this #include to + *before* ACE_Time_Value. Thanks to Carlos O'Ryan for suggesting + this and to Laura Paterno for + reporting the problem in the first place. + + * ace: Changes all uses of the overly long + ACE_LACKS_POSIX_PROTOTYPES_FOR_SOME_FUNCS to + ACE_LACKS_SOME_POSIX_PROTOTYPES. However, I'm not really sure + how this relates to the ACE_LACKS_POSIX_PROTOTYPES macro. I + suspect we probably only need one of these... + + * ace/OS.h: Added a new ACE_HAS_STDARG_THR_DEST to handle + weirdness with LynxOS. Thanks to Kirill.Rybaltchenko + for reporting this. + + * ace: OS.h,config-lynxos.h: Added a new ACE_LACKS_GETOPT_PROTO + for LynxOS. Thanks to Kirill.Rybaltchenko + for reporting this. + + * ace/config-lynxos.h: Replaced + ACE_LACKS_POSIX_PROTO_FOR_SOME_FUNCS with + ACE_LACKS_POSIX_PROTOTYPES_FOR_SOME_FUNCTIONS. Thanks to + Kirill.Rybaltchenko for reporting + this. + +Wed Oct 29 22:17:03 1997 Nanbor Wang + + * ace/config-hpux-10.x-hpc++.h (ACE_HAS_TEMPLATE_SPECIALIZATION): + Moved to C++ section. Restored ACE_TEMPLATE_REQUIRE_SOURCE in + C++ section. Thanks to Stephen Coy for + providing the fix (patiently.) + +Wed Oct 29 20:30:55 1997 James C Hu + + * ace/OS.i (strlen): Moved it earlier so that it would be declared + inline before use. + + * ace/OS.i (strcasecmp): Removed spurious semi-colons (how did + they get in there?). + +Wed Oct 29 18:51:12 1997 Darrell Brunsch + + * ace/OS.{h,i}: Added strcasecmp functionality for NT + +Wed Oct 29 15:56:01 1997 David L. Levine + + * ace/OS.cpp: replaced ACE_TSS_REF_TABLE with a reference count to + remove dynamic allocation from ACE_TSS_Info. Also, enabled call + of ACE_Task close hook before calling TSS destructors. + + * ace/OS.cpp: changed a few TSS 0 keys to ACE_OS::NULL_key. + + * ace/Thread_Manager.cpp (ace_thread_manager_adapter): with + TSS_EMULATION, moved the call of tss_close () from here to + ACE_Thread_Adapter::invoke () so that it can be called after + the task's close hook, if any. + + * ace/{OS.h,Log_Msg.h,Object_Manager.cpp} (cleanup_tss): added + an argument to indicate whether the main thread is calling or not. + + * ace/OS.i (ACE_TSS_Emulation::next_key): start key values at + 0 instead of 1, because it's easier to deal with arrays of + keys then. That also corresponds with the starting key value + on Windows NT. + + * ace/IOStream.h: DEC_CXX #includes now depend on compiler version. + Thanks to James Johnson for providing the fix. + +Wed Oct 29 10:32:16 1997 David L. Levine + + * ace/config-lynxos.h: fixed ACE_LACKS_POSIX_PROTOTYPES_FOR_SOME_FUNCS + and added getopt () declaration. + + * include/makeinclude/platform_lynxos.GNU: updated LIBS. + + Thanks to Kirill Rybaltchenko for + the above fixes. + + * etc/purify.solaris2: added another _thrp_exit UMR. + + * include/makeinclude/wrapper_macros.GNU: added login (LOGNAME) + and compiler (CXX) to Purify/Quantify cache names. + +Wed Oct 29 08:40:38 1997 Douglas C. Schmidt + + * ACE version 4.3.32, released Wed Oct 29 08:40:38 1997. + +Wed Oct 29 07:39:38 1997 Douglas C. Schmidt + + * ace/Synch.cpp: Added an explicit template instantiations for + ACE_Guard. + + * ace/LOCK_SOCK_Acceptor.h: Removed the typedef of + ACE_SOCK_Acceptor with a full expansion of the name to fix a G++ + bug. + + * tests/Conn_Test.cpp: Fixed a template instantiation problem. + + * ACE-INSTALL.html: Pointed out that ACE is ported to LynxOS and + Chorus. + + * ACE-INSTALL.html: Added information about cloning that explains + how you must to build a config.h and platform_macros.GNU in + cloned directory. Thanks to Arturo for this. + + * bin/Makefile: Added + $(ACE_ROOT)/include/makeinclude/platform_macros.GNU to Makefile + so we can compile clone on any ACE platform. Thanks to Arturo + for this. + + * include/makefiles: Added new platform file for SCO UNIX with + nothreads. Thanks to Arturo for this. + + * ace: Added new config files for SCO UNIX with nothreads. + Thanks to Arturo for this. + + * apps/JAWS/server/HTTP_Server.cpp: Fixed the typedef for + ACE_LOCK_SOCK_Acceptor. Thanks to Hans Rohnert for reporting + this. + + * tests/Conn_Test.cpp: Changed template instantiations from + SOCK_ACCEPTOR to LOCK_SOCK_ACCEPTOR. Thanks to Han Rohnert for + reporting this. + +Wed Oct 29 02:10:37 1997 Douglas C. Schmidt + + * ACE version 4.3.31, released Wed Oct 29 02:10:37 1997. + +Wed Oct 29 01:25:54 1997 Douglas C. Schmidt + + * tests/Conn_Test.cpp: Modified Conn_Test to fully integrate + Irfan's new LOCK_SOCK_Acceptor. This new implementation is + truly the "mother of all Conn_Tests" ;-). + + * ace/LOCK_SOCK_Acceptor.cpp (lock): Added a lock() accessor + method to the new ACE_LOCK_SOCK_Acceptor so that we can remove + the lock (somehow). + +Wed Oct 29 00:29:52 1997 + + * apps/JAWS/server: Fixed Win32 related compilation errors. + + * ace/OS.h (SIGUSR1 and SIGUSR2): Added new defines for these two + signals. + + * ace/LOCK_SOCK_Acceptor: New class added to ACE (it was + originally a class in JAWS). It specialize ACE_SOCK_Acceptor to + lock around . This class is particular useful if you + want to have multiple threads accepting on the same endpoint and + the system does not support have thread safe accept. Thanks to + James Hu who initially wrote this class for JAWS. Thanks also + to Johannes Gutleber who decided to + use this in the Conn_Test. + + * tests/Conn_Test.cpp: Updated to use the new LOCK_SOCK_Acceptor. + + * apps/JAWS/server/HTTP_Server.h: Updated to use the new + LOCK_SOCK_Acceptor. + + * apps/JAWS/server/HTTP_Server_T.*: These files are no longer + necessary since this class has been absorbed into ACE. + + * tests: Fixed auto_ptr use in: + + Notify_Performance_Test.cpp + Priority_Reactor_Test.cpp + Reactor_Performance_Test.cpp + + Thanks to Jack Erickson (jack@pinion.com) for pointing this out. + +Tue Oct 28 11:26:39 1997 Nanbor Wang + + * ace/ace_{dll,lib}.dsp: Moved Acceptor.cpp from Source file + folders to Template file folders. Thanks to Satheesh Kumar + for pointing this out. + +Tue Oct 28 05:44:56 1997 David L. Levine + + * ace/OS.cpp (thr_create): use pthread_attr_setprio instead of + *_setsched with DCETHREADS, and check return values of + ACE_OS::thr_[gs]etconcurrency (). Thanks to Stephen Coy + for tracking these problems down. + + * tests/Priority_Task_Test.cpp (svc): removed ACE_ASSERT and + replaced with setting of error flag. This allows the test + to continue and gather more possibly useful information. + + * tests/Conn_Test.cpp: 1) Added template instantiations. + 2) Re-enabled with DEC_CXX. 3) Removed THR_DETACHED flags. + + * include/makeinclude/platform_osf1_4.0.GNU: suppress warnings + about unreachable statments. + + * ACE-INSTALL.html: Conn_Test now runs with DEC_CXX 6.0. + +Tue Oct 28 00:38:58 1997 + + * ace/Strategies_T: + + ACE_Recycling_Strategy - Added new class ACE_Recycling_Strategy. + It defines the interface (and default implementation) for + specifying a recycling strategy for a SVC_HANDLER. This + strategy acts as a consular to the Svc_Handler, preparing it for + the tough times ahead when the Svc_Handler will be recycled. + + ACE_NOOP_Concurrency_Strategy - Added new class + ACE_NOOP_Concurrency_Strategy. It implements a no-op activation + strategy in order to avoid calling open on a recycled + svc_handler multiple times. + + ACE_Cached_Connect_Strategy - Added a ACE_Creation_Strategy, + ACE_Concurrency_Strategy, and ACE_Recycling_Strategy to the + cached connector. This gives it more flexibility than by simply + providing template methods. This is similar to the Strategy + Connector. + + ACE_Cached_Connect_Strategy - Added new template methods for + certain key occasions in the cached connector: make_svc_handler, + activate_svc_handler, assign_recycler, and + prepare_for_recycling. + + * tests/Conn_Test.cpp (client): Updated the tests such that it + uses a null activation strategy. + +Mon Oct 27 22:17:54 1997 Aniruddha Gokhale + + * OS.h: Added the ACE_NESTED_CLASS macro to deal with those + compilers that do not allow a fully scoped type name appearing + inside a scope in which it was defined. + +Mon Oct 27 22:17:32 1997 David L. Levine + + * ace/Thread_Manager.cpp (exit): don't use the cache when finding + the thread ID. The cache is in the ACE_Log_Msg instance, and + it might have been deleted already. + +Mon Oct 27 20:33:07 1997 Douglas C. Schmidt + + * ACE version 4.3.30, released Mon Oct 27 20:33:07 1997. + +Mon Oct 27 18:03:06 1997 Nanbor Wang + + * ACE-INSTALL.html (HREF): Added NT/Alpha to supporting platforms + list. Added hyperlink to ACE newsgroup. Added hyperlink to + FreeBSD homepage. Minor changes to Win32 intstallation guide. + +Mon Oct 27 17:50:16 1997 Douglas C. Schmidt + + * include/makeinclude/platform_sco5.0.0-fsu-pthread.GNU (PRELIB): + Changed PRELIB in platform_sco5.0.0-mit-pthread.GNU, + platform_sco5.0.0-fsu-pthread.GNU to @true, so we can generate + the TAO_IDL compiler. Thanks to Arturo Montes + for reporting this. + +Mon Oct 27 14:26:10 1997 + + * ace/Synch_T (ACE_TSS): When ACE does not have thread specific + storage, ACE_TSS will be a simple pointer holder. Previously, it + had a instance as a member, now it has a pointer to an instance. + + * ace/WFMO_Reactor.cpp (update_state): Fixed a bug in the + WFMO_Reactor. wakeup_all_threads() used to be an internal + method that was called when changes were made to the state of + the reactor. When wakeup_all_threads() became public, there was + no code in place to handle explicit user wakeups. In + particular, the wakeup_all_threads event was never reset. + Thanks to Evgeny Beskrovny for + pointing out this bug. + + * ace/OS.i (ACE_FAIL_RETURN): Added mapping from + ERROR_PATH_NOT_FOUND to ENOENT. Thanks to David Brackman + for suggesting this. + +Mon Oct 27 11:36:39 1997 David L. Levine + + * ace/OS.cpp (exit_cleanup_i): removed protection against recursive + calls. This protection no longer is necessary, because + ACE_TSS_Cleanup () is only called by ACE_Thread_Adapter::invoke (). + It was problematic because it used the ACE_Allocator instance. + + * ace/config-vxworks*.h,README: added ACE_LACKS_FCNTL. + + * ace/OS.i,ACE.cpp: replaced #ifdef VXWORKS with #ifdef + ACE_LACKS_FCNTL. + + * ace/ACE.i (get_flags): return 0 if ACE_LACKS_FCNTL. It would + be better to store ACE's notion of the flags associated with + the handle so that they could be returned, but this works for now. + + * tests/run_tests.vxworks: re-enabled Reactors_Test, because it + works with the ACE_LACKS_FCNTL mods. + + * include/makeinclude/platform_osf1_4.0.GNU: -pthread instead of + -lpthread in LIBS. Thanks to James Johnson for + pointing this out. + + * ACE-INSTALL.html: added info on bin/create_ace_build. + +Mon Oct 27 11:11:33 1997 Nanbor Wang + + * netsvcs/servers/servers.dsp + * netsvcs/lib/netsvcs.dsp: + * tests/*.dsp: + * ace/ace_{dll,lib}.dsp: Added project configurations for Alpha + machines. Configurations are named by adding "Alpha" in front + of the original config names, e.g., "Win32 Alpha Unicode Debug. + +Mon Oct 27 06:40:18 1997 Douglas C. Schmidt + + * include/makeinclude/rules.local.GNU (show_uninit): Added a + missing semi-colon for one of the install rules. Thanks to + Manojkumar Acharya for reporting this. + + * ace/Synch_T.h: Make sure that ACE_Guard::remove() calls + this->lock_->remove() rather than this->lock_->release(). + Thanks to Johannes Gutleber for + reporting this. + +Mon Oct 27 00:20:13 1997 Nanbor Wang + + * ace/config-hpux-10.x-hpc++.h: Added directive + ACE_HAS_TEMPLATE_SPECIALIZATION. Thanks to Stephen Coy + for reporting this. + +Sun Oct 26 22:17:57 1997 Douglas C. Schmidt + + * ACE version 4.3.29, released Sun Oct 26 22:17:57 1997. + +Sun Oct 26 20:03:57 1997 Douglas C. Schmidt + + * ace/IPC_SAP.cpp, + ace/IO_SAP.cpp: Make sure that we don't use fcntl() when + we're compiling on VXWORKS since it's not defined... + + * examples/Connection/non_blocking/CPP-connector.cpp: Changed the + method named idle() to uninitialized() since idle() is now + defined on ACE_Svc_Handler. + + * ace/OS.h: Added the TAO_DEFAULT_SERVER_PORT to OS.h. + + * tests/Conn_Test.cpp (cached_connect): Added a new variable + called "n_client_iterations" to control how many times each + client thread tries to connect with the Cached_Connector. + +Sun Oct 26 16:56:32 1997 Chris Cleeland + + * include/makeinclude/platform_linux_lxpthread.GNU (CFLAGS): Added + -pipe to the compile options. + +Sun Oct 26 11:04:21 1997 David L. Levine + + * ace/Hash_Map_Manager.cpp (unbind): added ACE_UNUSED_ARG (int_id). + + * tests/Conn_Test.cpp (server): added ACE_UNUSED_ARG (options). + And, added template instantations. + + * tests/Conn_Test.cpp (cached_connect): changed type of loop index i + to int to avoid signed/unsigned comparison. + + * ace/Strategies_T.h: added #include of ace/Strategies.h. Thanks to + James Johnson for reporting this. + +Sun Oct 26 10:01:01 1997 Nanbor Wang + + * ace/Connector.cpp (open): The original fix failed to replace + strategies under some circumstances. + + * ace/OS.{h,cpp} (sprintf): Removed ACE_OS::sprintf (wchat_t, char). + It didn't ever work. + + * ace/Connector.cpp (open): Added check if we had previously + allocated various strategies and deleted these objects before + allocating new objects. The original codes caused memory leaks + and possible segmentation faults if it got called twice. We + probably need a do-nothing constructor (the current constructor + calls open.) However, this may break other codes. + +Sun Oct 26 01:00:07 1997 Douglas C. Schmidt + + * ACE version 4.3.28, released Sun Oct 26 01:00:07 1997. + +Sun Oct 26 00:50:00 1997 Douglas C. Schmidt + + * tests/Conn_Test.cpp (close): Since the connect() method on + ACE_Connector closes the svc_handler if failure occurs, we + shouldn't do that again unless we succeed in connecting. + + * ace/OS.h: Moved the CORBA portability macros from + CORBA_Handler.h into OS.h so they will be accessible from TAO. + + * ace/Filecache.cpp (finish): Replaced filename_ with filename() + so that "const correctness" would work with template + specialization. Go figure! + + * TAO/tests/IDL_Cubit/Makefile: Enhanced the "realclean" target to + remove the generated IDL stubs and skeletons. + + * ace/OS.cpp (ace_sysconf_dump): Made a minor change to OS.cpp + to fix some typos. Thanks to Wei Chiang + for reporting this. + +Sun Oct 26 00:06:17 1997 + + * ace/Strategies_T.cpp (~ACE_Cached_Connect_Strategy): Must set + recycler to 0 before calling close, else the svc_handler will + try to purge itself from the cache. + + * tests/Conn_Test.cpp (client): Updated to use the new connection + recycling scheme. + + * ace/Hash_Map_Manager: + + - ACE_Hash_Map_Reverse_Iterator: Added reverse iterator. + + - ACE_Hash_Map_Entry: Added a prev pointer to the entry. Thus + changing the bucket chains into doubly linked lists. Because of + this, it was necessary to change the way the list was being + managed. Sentinels were created for each bucket. + + This also changed (a) the way the iterators worked, (b) made it + easy to delete entries when you have one (this scheme allows the + entries to be easily used as ACTs). + + - New methods (bind, trybind, rebind, find): These methods allow + the users to get access to ACE_Hash_Map_Entry of the node in + question. This allows the user to treat the entry as an ACT and + get access to the key (in case the user is interested in + changing the key). These methods are only valid since the + implementation of Hash_Map_Manager uses linked lists where nodes + are never copied. These methods cannot be added to Map_Manager + since it uses an array of nodes, where the your data may get + copied to another node when the size of the Map_Manager changes. + + * ace/Strategies (ACE_Connection_Recycling_Strategy): Added a new + abstract strategy for recycling connections. + + * ace/Strategies_T: + + - ACE_Cached_Connect_Strategy: ACE_Cached_Connect_Strategy now + implements the ACE_Connection_Recycling_Strategy interface. + This allows Svc_Handlers to cache themselves with + ACE_Cached_Connect_Strategy when they become idle. It also + allows them to purge themselves from the connection cache when + the Svc_Handlers close down. + + Also added ~ACE_Cached_Connect_Strategy that will cleanup up the + connection cache. + + - ACE_Hash_Addr: ACE_Hash_Addr is the key for the hash map used by + ACE_Cached_Connect_Strategy. Previously it kept the Svc_Handler + pointer in the key in order to find out if it was busy or not. + Now the flag has been moved from the Svc_Handler into + the key. The also saves the Hash_Addr from requiring + Svc_Handler as a template parameter. + + Also updated ACE_Hash_Addr::operator== such that if the + Svc_Handler is busy, it does not bother to check compare the + addresses but simply returns false. + + * ace/Svc_Handler.cpp: Added the ability for a Svc_Handler to + recycle itself. idle() can be called when the Svc_Handler is + done serving a particular connection and can how be recycled. + The Svc_Handler now also has a pointer to a recycler that is + responsible for managing the connections. The recycler is + usually a Cached_Connector. + + * ace/Filecache.cpp (ACE_Hash_Map_Entry): Added a new constructor + specialization as the ACE_Hash_Map_Entry now has two + constructors. + + * tests/Hash_Map_Manager_Test.cpp (ACE_Hash_Map_Entry): Added a + new constructor specialization as the ACE_Hash_Map_Entry now has + two constructors. + + * tests/Reactor_Exceptions_Test.cpp (class My_Reactor): Added the + other handle_events method. Thanks to Stephen Coy + (coys@mail.ns.wsa.com.au) for pointing this out. + + * ace/Strategies_T.cpp (hash_i): This default routine is no good. + It uses a complicated scheme that calculate a hash value. + Unfortunately, there is no guarantee that this hash algorithm + will produce the same hash value for the same address. + Therefore, it is better just to return a consistent hash value + rather than an erroneous one. I have choosen 0 of the return + value. Even though this will cause all the entries to be hashed + to the 0 bucket, atleast they will be found. Users should + override this to provide better hashing. + + (compare_i): Memcmp is not the correct default action. + !(b1==b2) is the correct comparison, though this will assume + that the addresses will have a comparison operation. + + * ace/Mem_Map.cpp (close and close_handle): close() is doing too + much. It is closing the handle and unmapping the file. + Changing this method might effect code that depends on this + behavior. Therefore, we create a seperated method + close_handle() that only closes down the handle, and does not + unmap the file. Thanks to Jeff Richards (jrichard@OhioEE.com) + for pointing this out. + + * ace/Strategies_T.cpp (connect_svc_handler): If connect() failed + because of timeouts, we have to reject the connection entirely. + This is necessary since currently there is no way for the + non-blocking connects to complete and for the to + notify the cache of the completion of connect(). Therefore if + errno is EWOULDBLOCK, it is changed to ENOTSUP and -1 is + returned. + +Sat Oct 25 17:41:57 1997 Sergio Flores + + * examples/Timer_Queue/Thread_Timer_Queue_Test.cpp: + * examples/Timer_Queue/Async_Timer_Queue_Test.cpp: + * examples/Timer_Queue/Reactor_Timer_Queue_Test.cpp: + * examples/Timer_Queue/main_async.cpp: + * examples/Timer_Queue/main_reactor.cpp: + * examples/Timer_Queue/main_thread.cpp: + Added "#pragma instantiate" for template instantiations on + platforms that use pragmas instead, like SGI. + +Sat Oct 25 4:44:00 1997 Carlos O'Ryan + + * Today at 06:44 hours (Santiago, 04:44 St. Louis) Fernanda O'Ryan + has joined the ACE family. She was born 3040 gr in weight and + 50 cm length. She has absolutely no experience in CORBA, C++ or + programming in general. Therefore, she is the ultimate Java + programmer. + +Sat Oct 25 10:13:56 1997 David L. Levine + + * ace/Singleton.h: added comment about best ACE_LOCK types to use. + + * Makefile (TIMESTAMP): replace tab with spaces in ChangeLog entry. + + * tests/Conn_Test.cpp (main): fixed typo, spawn_threads instead of + spawn_thread. Also, protected definitions of spawn_processes () + and spawn_threads () to avoid compiler warnings about unused static + functions. + +Sat Oct 25 01:02:34 1997 Douglas C. Schmidt + + * ACE version 4.3.27, released Sat Oct 25 01:02:34 1997. + +Fri Oct 24 17:39:08 1997 Douglas C. Schmidt + + * ace/ACE.cpp: Changed all the ACE_BIT_ENABLED () == 0 macros to + ACE_BIT_DISABLED() since the logic is clearer. + + * ace/SOCK_Acceptor.cpp (shared_accept): Improved the handling of + timed accepts. The original implementation was prone to race + conditions if there were multiple processes all doing timed + connects on the *same acceptor socket*! That's because select() + and accept() are not performed atomically. Now, we're smarted + about handling this... + + * tests/Conn_Test.cpp: Simplified the shutdown logic, which + appeared to have race conditions. + + * tests/Conn_Test.cpp: Modified this test to spawn off a number of + server processes, all of which will listen for connections on + the same acceptor port. This demonstrates a useful idiom for + writing connection-oriented concurrent server pools. + + * netsvcs/lib/Server_Logging_Handler_T: Fixed this code so that if + we're on an HP/UX that has broken templates we don't use the + Base_Optimizer. Thanks to Per Andersson for providing this fix. + + * ace/Thread_Manager: Added a destructor for ACE_Thread_Descriptor + to keep some compilers happy. Thanks to Chuck Gehr + for reporting this. + + * ace/Task.cpp (ACE_Task_Base_cleanup): Changed + ACE_Task_Base::cleanup (object); + + to: + + ACE_Task_Base::cleanup (object, 0); + + Thanks to Chuck Gehr for reporting + this. + + * ace/Thread_Manager.cpp (find_thread): Fixed another problem with + == being used to compare threads rather than + ACE_OS::thr_equal(). Thanks to Chuck Gehr + for reporting this. + +Fri Oct 24 17:11:14 1997 Sergio Flores + + * Thread_Timer_Queue_Test.cpp (shutdown_timer): added logic to + cancel preemptively or voluntarily, the dispatching thread, + depending on whether the platoform supports pthread_cancel(). + + * Timer_Queue_Adapters.cpp (ACE_Thread_Timer_Queue_Adapter): Added + initialization of flag to 1, active mode. We assume + we start in active mode. Added an internal variable + that stores the thread id of the currently running thread. The + motivation behind this is to be able to cancel this thread + whenever we are shutting down. It is initialized to + ACE_OS::NULL_thread. + + * Timer_Queue_Adapters.cpp (svc): Assign the with the + current running thread ID, using ACE_Thread::self (). + + * Timer_Queue_Adapters.h (ACE_Thread_Timer_Queue_Adapter): Added + default to be + ACE_Thread_Manager::instance() + + * Timer_Queue_Adapters.h (activate): Override the default + method to be able to enforce one thread of execution + per timer queue. Does make much sense to have more than one + managing the timer queue, and like Doug said too many weird + things can happen... + + * Timer_Queue_Adapters.i (thr_id): Added this method to access the + thread ID of this task. + + * Timer_Queue_Adapters.i (activate): Call + ACE_Task_Base::activate() with n_threads = 1 to ensure that a + single thread is spawned. + +Fri Oct 24 10:00:02 1997 Nanbor Wang + + * ace/Thread_Manager.cpp (wait_grp): Fixed a bug. Should wait on + threads with same grp_id, not task. + +Fri Oct 24 09:24:14 1997 David L. Levine + + * ace/Select_Reactor.cpp (open): cast return value of + ACE_::max_handles () to size_t to avoid signed/unsigned comparison. + + * ace/Singleton.cpp,Object_Manager.{h,cpp}: (get_singleton_lock): + dynamically allocate ACE_Thread_Mutex and ACE_RW_Thread_Mutex locks, + so we end up with one lock per ACE_Singleton instantiation. + + * ace/OS.cpp (ACE_TSS_Info, Win32 and VxWorks only): changed type + of ACE_TSS_TABLE from ACE_Unbounded_Stack to fixed-size ACE_Array. + With this change, we avoid some use of ACE_Allocator when + destroying TSS objects. There are two more changes required to + completely remove the ACE_Allocator use. + + * tests/TSS_Test.cpp (worker): added printout of iteration count. + +Fri Oct 24 01:53:58 1997 Douglas C. Schmidt + + * ACE version 4.3.26, released Fri Oct 24 01:53:58 1997. + +Thu Oct 23 19:05:08 1997 Douglas C. Schmidt + + * netsvcs/clients/Naming/Client/Makefile + netsvcs/clients/Naming/Dump_Restore/Makefile + + The lines: + + SHLIB = libClient_Test.so + SHLIB = libDump_Restore.so + + need to be + + SHLIB = libClient_Test.$(SOEXT) + SHLIB = libDump_Restore.$(SOEXT) + + Thanks to Stephen Coy for reporting this. + + * ace/Thread_Manager.cpp (find_hthread): Replaced the call + + if (iter.next ()->thr_handle_ == h_id) + + to + + if (ACE_OS::thr_equal (iter.next ()->thr_handle_, h_id)) + + since the other one isn't portable to Pthreads. Thanks to + Stephen Coy for reporting this. + + * ace/Hash_Map_Manager.cpp: Removed the sentinel in the + Hash_Map_Manager. Sentinels are evil since they require us to + hold write locks, even when we're doing finds! + + * ace/ACE.cpp (max_handles): By default, we now try to use the + getrlimit() function before sysconf() since sysconf() doesn't + work "correctly" for NO _SC_OPEN_MAX (i.e., it just returns the + original value, which might have been changed by setrlimit(). + What a pain... + + * ace/ACE.cpp (max_handles): If FD_SETSIZE is enabled return + this as the number of handles. This isn't perfect, but it's + probably better than returning -1. + + * ace/Select_Reactor.cpp (open): Added a call to + ACE::set_handle_limit() if the requested size for the Reactor is + greater than the current max number of descriptors in the + process. Also check to make sure that the user isn't ask for + more than the FD_SETSIZE. Thanks to Neil Lavelle + for motivating this. + + * ace/Thread_Manager: Changed the name THR_FUNC to + ACE_THR_MEMBER_FUNC since it's now a global typedef on VxWorks + and we don't have to have clashes with other names. + + * ace/Thread_Manager.h: There are mutually incompatible bugs with + VxWorks and MVS. Therefore, we have to conditionally compile + the THR_FUNC differently for these two platforms. Thanks to + Chuck Gehr for reporting this. + + * ace/OS.cpp (thr_create): Added a fix to set the Chorus stack + size correctly. Thanks to Wei Chiang for + reporting this. + + * ace/OS.cpp: Added a new method ace_sysconf_dump() to dump the + state of the configuration. Thanks to Wei Chiang + for reporting this. + + * ace/Singleton.cpp (dump): There was a typo in the dump() method + for ACE_TSS_Singleton, it should be + ACE_TSS_Singleton::instance_i(). I've fixed this. + +Thu Oct 23 23:19:24 1997 James C Hu + + * ace/Filecache.cpp: Removed template method specialization of + shared_find. No longer needed since Hash_Map_Manager has been + changed to no longer rely on sentinel_. + + * ace/Thread_Manager.cpp (various): + Hacked 'til it compiled. (Chased down syntax errors.) + +Thu Oct 23 22:52:17 1997 Sergio Flores + + * examples/Timer_Queue/Thread_Timer_Queue_Test.cpp (shutdown_timer): + Added a line to call the cancel method on the timer queue task + when we are shutting down; this is wrapped around #if's to only + include this only when the platformm supports pthread_cancel(). + + * ace/Timer_Queue_Adapters.cpp (svc): Added some POSIX thread + cancellation points to make sure the mutex that the condition + variable uses is unlocked before the thread is cancelled. + + * examples/Timer_Queue/Thread_Timer_Queue_Test.cpp (list_timer): + Deleted unnecessary cancellation points. Since we are not + blocking on a condition variable, we don't need to guard the + code. + +Thu Oct 23 22:07:03 1997 Nanbor Wang + + * ace/Thread_Manager.cpp (wait_task,wait_grp): We should also + check for thread creation flags when collection information for + threads belong to this group and don't try to join those threads + created with THR_DETACHED or THR_DAEMON. + +Thu Oct 23 21:22:16 1997 Darrell Brunsch + + * ACE-INSTALL.html: Copied some documentation about makefile flags + from include/makeinclude/wrapper_macros.GNU and added a section + for this. + +Thu Oct 23 20:37:44 1997 David L. Levine + + * ace/Array.*: added ACE_Array_Iterator. + +Thu Oct 23 17:28:11 1997 Chris Cleeland + + * ace/Mem_Map.i (close_filemapping_handle): Moved this above its + uses in the file so that g++ would de-warn. + +Thu Oct 23 15:30:17 1997 Steve Huston + + * ace/Timer_Hash_T.h, Timer_Hash.cpp, Timer_Heap_T.h, Timer_Heap.cpp, + Timer_List_T.h, Timer_List.cpp, Timer_Queue_T.h, Timer_Queue.cpp, + Timer_Wheel_T.h, Timer_Wheel.cpp: Replaced all occurences of + ACE_HPUX_BROKEN_TEMPLATES with ACE_HAS_BROKEN_HPUX_TEMPLATES. + +Wed Oct 22 23:23:29 1997 Nanbor Wang + + * ace/ACE_Library.*, ace_lib.dsp: Made naming convention uniform + for some less used ACE library. They are called: aced.dll, + ace.dll, aceud.dll, aceu.dll, acesd.lib, aces.lib, aceusd.lib + and aceus.lib. If you are using ACE on NT, you know what they + mean. ;-) + +Wed Oct 22 21:22:35 1997 David L. Levine + + * ace/Object_Manager.{h,cpp}: Added support for ACE_RW_Thread_Mutex + ACE_Singleton lock type. Thanks to Nanbor for suggesting this, + because TAO needs it. + + Also, removed at_exit registration of dynamically allocated + ACE_Static_Object_Lock because Object_Manager instance isn't + available for registration when it's created. Instead, handle + this lock as a special case in the Object_Manager destructor. + + * ace/Singleton.cpp,Object_Manager.cpp: check for shutting_down () + as well as starting_up () when deciding whether to use a + preallocated lock. Preallocated locks are not available at those + times. + + * tests/Reactor_Performance_Test.cpp (client): removed declaration + of loop index "i" because it shadowed a local. Also, the loop + index declaration caused a signed/unsigned comparison. + + * ace/Singleton.cpp: temporarily disabled ACE_Guards until + the lock acquistion is fixed. + +Wed Oct 22 17:53:26 1997 Steve Huston + + * ace/SOCK_Connector.cpp: In connect(), changed the + (local != ACE_Addr::sap_any) to be value comparison, + not pointer comparison. Works on compilers which construct + temporaries when a const reference is passed (like HP aC++), and + also when a user passes an ACE_Addr which they construct to look + just like an ACE_Addr::sap_any. Thanks to Stephen Coy + for finding this. + +Wed Oct 22 16:43:25 1997 Chris Cleeland + + * tests/Reactor_Performance_Test.cpp (client): Corrected some code + that wasn't logical (but compiled!) in the connect_n() test. + +Wed Oct 22 13:27:47 1997 Douglas C. Schmidt + + * tests/Reactor_Performance_Test.cpp (client): Revised the + connection portion of this test to use the newly revised + connect_n() method on Connector. + + * ace/Connector.cpp (connect_n): Revised the connect_n() method so + that it keeps track of which connections succeeded and which + failed. + +Wed Oct 22 07:23:21 1997 David L. Levine + + * ace/OS.i (getpgid): fixed (commented) ACE_TRACE identifer. + Thanks to Eric Newton for reporting this. + + * ace/Singleton.{h,cpp},Object_Manager.{h,cpp}: moved + ace_singleton_lock_ to Object_Manager. ace_singleton_lock_ + was a static data member: in addition to the usual troubles + associated with being a static, it was a static member of a + template class. g++ can't handle those, so we used a local + static; initialization of that static was not thread safe. + + The fix relies on knowledge from the Object_Manager about + whether the program is in static construction phase or not. + A critical assumption is that construction of static objects + does not spawn threads. With that assumption, we know that + there is only one (main) thread in the program prior to the + Object_Manager instance being constructed. At that time, + locking is not needed. The ACE_{TSS_}Singleton::instance () + methods rely on the state of the Object_Manager: if it has + not been constructed yet, then they don't guard allocation + of their singleton instance. + + The Object_Manager constructs four locks (of types ACE_Null_Mutex, + ACE_Thread_Mutex, ACE_Recursive_Thread_Mutex, and + ACE_RW_Thread_Mutex) for use only by ACE_Singleton classes. + After the Object_Manager has been constructed, ACE_{TSS_}Singleton + instantiations use one of those locks to guard their allocation of + a new instance, via double-checked locking. + + This change has one impact, then: + ACE_{TSS_}Singleton users are limited to the following types + for their ACE_LOCK instantiation parameters: ACE_Null_Mutex, + ACE_Thread_Mutex, ACE_Recursive_Thread_Mutex, and + ACE_RW_Thread_Mutex. If another type is needed, it can be + easily added to the ACE_Object_Manager: another overloaded + get_singleton_lock () function and preallocated lock would + have to be added. + + As noted in Singleton.h, the best types of ACE_LOCKs to use + for instantiating ACE_Singleton are ACE_Recursive_Thread_Mutex + and ACE_Null_Mutex. + + In addition to the above change, I made these two other + changes: + 1) ACE_Static_Object_Lock::instance (): dynamically allocate + a lock if the Object_Manager has not been constructed yet. + This approach replaces the static lock that was necessary + to allow the static services to be constructed. + + 2) Consolidated the singleton_ access in ACE_TSS_Singleton + via a singleton_i () internal accessor function. Now, + ACE_TSS_Singleton looks just like ACE_Singleton. + + * ACE-INSTALL.html: updated DEC CXX 6.0 build/test status. + + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.i + (handle_timeout): convert arg to long if ACE_HAS_64BIT_LONGS. + + * examples/Shared_Malloc/test_malloc.cpp (worker): convert arg to + long if ACE_HAS_64BIT_LONGS. + + * examples/Timer_Queue/Driver.cpp (run_test,parse_commands): + added ACE_NOTREACHED. + + * examples/Logger/simple-server/Logging_Handler.cpp (handle_close): + removed declaration of unused arg "mask". + + * include/makeinclude/rules.local.GNU: added show_statics and + show_uninit targets. They show the statics (that have static + destructor calls) and uninitialized data in the object files + in the current directory. They work best (or at all) on object + files compiled by g++. + +Wed Oct 22 05:04:07 1997 Douglas C. Schmidt + + * ACE version 4.3.25, released Wed Oct 22 05:04:07 1997. + +Tue Oct 21 22:55:36 1997 + + * ace/WFMO_Reactor: Removed ACE_Event_Handler::CLOSE_MASK and the + explicit registration for the closing of sockets from + WFMO_Reactor. This is essentially for compatibility with UNIX + programs. UNIX does not have a CLOSE_MASK and the notification + of the closing of a socket is implicit in the socket becoming + read ready. Therefore when you register for + ACE_Event_Handler::READ_MASK with WFMO_Reactor, you will + register for FD_READ and FD_CLOSE. When FD_CLOSE is triggered, + handle_input() will be called on the Event_Handler. As on UNIX, + read() will return 0 and the programmer will be able to tell + that the socket has actually closed down. + + Arguably, this is lame for Win32 programmers as they have the + explicit close notification, but portability and existing code + base wins in this case. + + One other change. When an event_handler returns -1 from the + callback, unbind() is called with ALL_EVENTS_MASK rather than + the NULL_MASK. + + The upcall routine still needs to threat the two masks + separately. (FD_CLOSE | FD_READ) will not work as both maybe + simultaneously enabled. Therefore handle_input() maybe be called + twice (once for FD_READ and once for FD_CLOSE) unless the user + returns -1 from the first callback. + + * ace/Event_Handler: Removed the CLOSE_MASK. + + * examples/Logger/simple-server/Logging_Handler.cpp: Minor fixes. + + * examples/Logger/Acceptor-server/server_loggerd.cpp: Minor + changes. No need to register the acceptor with the + Reactor. Acceptor::open() does that. + + * examples/Reactor/ReactorEx/test_network_events: Removed the use + of CLOSE_MASK. + + * tests/Reactor_Performance_Test: Removed the use of CLOSE_MASK. + +Tue Oct 21 21:48:54 1997 David L. Levine + + * ace/OS.[hi]: moved ACE_PTHREAD_CLEANUP_PUSH/POP definitions from + OS.i to OS.h. Also, added #ifdef ACE_HAS_PTHREADS protection + before ! defined ACE_LACKS_PTHREAD_CLEANUP so that only PThreads + platforms need add ACE_LACS_PTHREAD_CLEANUP. + + * tests/Notify_Performance_Test.cpp: added #include of + ace/Thread_Manager.h. It's needed on OSF-1. + +Tue Oct 21 21:09:35 1997 Nanbor Wang + + * ace/Memory_Pool.cpp (ACE_MMAP_Memory_Pool): Oops. Souldn't + access options when it is 0. + +Tue Oct 21 12:58:30 1997 Nanbor Wang + + * ace/Log_Msg.{h,cpp}: (thr_desc): Modified the method so it take + an extra argument of type ACE_Thread_Manager* and uses it to + block execution until thread manager release its lock. + + * ace/Thread_Manager.{h,cpp} (acquire_release): Added this new + method whose only function is to grab the thread manager's + lock. This function ensure that a newly spawned thread won't + try to access its thread descriptor before it is fully built. + + * ace/OS.cpp (inherit_log_msg): Modified to cache the thread + descriptor of spawned thread in TSS Log_Msg after it has been + created and block the execution of new thread until thread + manager releases the lock (i.e., fills in all the information.) + + * ace/OS.h (ACE_Thread_Adapter): Added one more argument of type + ACE_Thread_Descriptor* to the constructor with default value 0. + + * ace/OS.cpp (invoke): If the thread descriptor ptr is not zero + in thread arguemnt, then, we'll wait till the thread manger + fills in the formation and cache the value in TSS Log_Meg. + + * ace/Thread_Manager (spawn_i): Changed to pass in the thread + descriptor of the newly spawned thread to thread adapter so it + can cache it in TSS Log_Msg. This must be created before + spawning the thread. If all goes well, we'll need to append the + thread descriptor into the double-linked list in the thread + manager. + (append_thr): Added a new argument of type Thread_Descriptor* + with default value 0. If we pass in a thread descriptor, + append_thr won't try to create on itself. + +Tue Oct 21 21:34:35 1997 Douglas C. Schmidt + + * ACE version 4.3.24, released Tue Oct 21 21:34:35 1997. + +Tue Oct 21 14:14:33 1997 Carlos O'Ryan + + * examples/Timer_Queue/Thread_Timer_Queue_Test.h: + * examples/Timer_Queue/Thread_Timer_Queue_Test.cpp: + Use the typedef for Upcall to define the base Timer_Queue. + Input_Task inherits from ACE_Task_Base, no need for ACE_Task<> + here. + +Tue Oct 21 13:45:53 1997 Douglas C. Schmidt + + * ace/config-irix6.x-sgic++-nothreads.h: Added ACE_HAS_TERM_IOCTLS + for SGI. Thanks to Jeffrey Peterson + for reporting htis. + + * TAO/tests/Thruput_test/server.cpp (main): Changed BOA_init() + to POA_init(). + +Tue Oct 21 12:58:30 1997 + + * ace/OS.h (ACE_SINGLETON_DECLARATION): + (ACE_SINGLETON_INSTANTIATION): + (ACE_SVC_SINGLETON_DECLARATION): + (ACE_SVC_SINGLETON_INSTANTIATION): Added these new macros. Each + of them takes one argument which is the ACE_Singleton class. + All these craps are needed because MSVCs very kindly instantiate + the template codes for you. This ends up producing two + ACE_Singleton objects, one in DLL and one in user program. What + these macros do is to supress the template code instantiation in + user program and force compilers to instantiate these codes in + DLL. On other platforms, these macros simply expand to empty + strings. Here is a simple use case. Say we have a class + called which we want to make it a singleton using + ACE_Singleton template in our own DLL. In file , add + a line like this, + + ACE_SVC_SINGLETON_DECLARATION (ACE_Singleton); + + and it will be expanded to suitabe code to export the class or + supress another template instantiation outside DLL depending on + whether ACE_BUILD_SVC_DLL is defined or not. In file + , add a line, + + ACE_SVC_SINGLETON_INSTANTIATION (ACE_Singleton); + + at the end of the file to instantiate the template object in + DLL. Notice that there is a bug in MSVC 4.2 and you'll have to + write up a DEF file to export the template interface + explicitly. + + These macros should be integrated with the case when + ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION but because of the VC + 4.2's bug, it will cause too much trouble to export all these + symbols for external access. Therefore, I'll leave them as they + are now. + + BTW, these is no templatized singleton object within ACE that + needs to be exported at this moment. + +Tue Oct 21 07:14:24 1997 David L. Levine + + * ace/Svc_Conf_l.cpp: fixed compile warnings on g++. + + * ace/Timer_{Heap,List,Wheel}_T.cpp: replaced NULL with 0 because + some compilers, such as GHS, define NULL as (void *) 0. So, it + sometimes needs to be cast to be used. Thanks to Brian Mendel + for reporting this. + + * ace/Thread_Manager.cpp (wait): removed thr_yield () hack because + it's not needed with Nanbor's Thread_Manager fix. + + * tests/test_config.h (ACE_END_TEST): removed sleep hack with + threading because it's not needed with Nanbor's Thread_Manager fix. + + * include/makeinclude/platform_vxworks*.GNU: added VXWORKS=1 macro, + for use by individual Makefiles to suppress VxWorks builds. + + * examples/System_V_IPC: suppress VxWorks builds because the builds + fail, and the examples wouldn't run anyways. + + * netsvcs/lib/TS_Server_Handler.cpp: only instantiate + ACE_Svc_Handler if ! ACE_HAS_TLI + because without TLI, the instantiation is in + Client_Logging_Handler.cpp. + + * examples/Shared_Malloc/test_persistence.cpp: added #include of + iostream.h with ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION. + + * examples/ASX/UPIPE_Event_Server/Supplier_Router.cpp: removed + instantiation of ACE_TSS because it is in + ace/Thread_Manager.cpp. + +Tue Oct 21 02:23:26 1997 Douglas C. Schmidt + + * ACE version 4.3.23, released Tue Oct 21 02:23:26 1997. + +Tue Oct 21 02:18:56 1997 Douglas C. Schmidt + + * examples/Makefile: Things are happier now, so we've added back + the Timer_Queue directory to the Makefile. + + * examples/Timer_Queue: Added lots of annoying template + specializations so that the timer queue tests now work with GCC. + + * ace/Svc_Conf.l: Changed the regular expression for a + {string} so that it maches the null string (i.e., ""). + +Tue Oct 21 01:07:58 1997 Sergio Flores + + * examples/Timer_Queue: + Added documentation and fixed some warnings from the unused + arguments in some member functions. Cleaned up some .h files of + unnecessary template instantiations. + +Tue Oct 21 01:01:12 1997 Nanbor Wang + + * ace/Thread_Manager.h: Added more comments. + + * ace/Thread_Manager.{h,cpp}: Added a parameter to + Thread_Manager's constructor with default value 0. This + parameter is currently unused and put in for backward + compatibility. + (open): Putting back this method for backward compatibility. + This is currently a no-op. Thanks to David for reporting this. + Also modify some mis-inform comments. + +Mon Oct 20 22:34:46 1997 + + * ace/OS.i (open): Moved Win32 specific errno mappings from open() + to ACE_FAIL_RETURN. Also updated the wide-character version of + open(). + +Mon Oct 20 14:07:37 1997 Douglas C. Schmidt + + * ace/config-hpux-10.x.h: Added #define ACE_DEFAULT_BASE_ADDR + ((char *) 0x80000000) so that the various mmap() tests + will work on HP/UX. Thanks to Stephen Coy + for reporting this. + + * ace/OS.i: Fixed the implementation of ACE_OS::cond_timedwait() + so that it will work on VxWorks. Thanks to David Levine for + chasing this down and doing most of the changes. + + * ace/OS.h: Added a new special case for _KCC so that its + ACE_UNUSED_ARG will work properly. Thanks to Torbjorn Lindgren + for reporting this. + +Mon Oct 20 22:23:42 1997 Nanbor Wang + + * tests/Sigset_Ops_Test.cpp (main): It is not legal too for + sigismember to return 0 if we pass an invalid signal to it. + Thanks to Stephen Coy for fixing this. + + * Thread_Manager.*: Replace the thr_table_ with a double-linked + list thr_list_. With this change, we can cache the thread + descriptor entries in TSS area. Then, when accessing thread + descriptor from a spawned thread's context, we don't have to + search thru the whole list in order to find the corresponding + thread descriptor. Double-linked list and caching also make + adding/removing thread descriptor entries very fast. At this + moment, we need to do a linear search when we try to access the + cached pointer the first time. This overhead is expected to + removed shortly. The will be some memory leaks at this moment + because I haven't implemented the code to clean up the list when + a thread manager gets deleted. Will fix it soon. + + * Log_Msg.{h,cpp}: Removed thr_state methods, variable, and thr_id + methods and variable and replace them with thr_desc which cache + the pointer to the thread descriptor structure. + + * Containers.*: Added two new template classes + ACE_Double_Linked_List and ACE_Double_Linked_List_Iterator. + These two classes implement the very fundamental data structure + of double-linked list. Although this is not actually a + container class, I couldn't find a better place to put these + classes. + + * ace/Filecache.* + * ace/FIFO.* + * ace/FIFO_Send.* + * ace/FIFO_Recv.* + * ace/FIFO_Send_Msg.* + * ace/FIFO_Recv_Msg.* + * ace/Memory_Pool.* (ACE_MMAP_Memory_Pool_Options, + ACE_MMAP_Memory_Pool): Added one member variable to these class + so users can specify the LPSECURITY_ATTRIBUTES object they want + to use with them. + (map_file, init_inquire): Pass the security attribute to + underlying memory map object. + + * ace/Mem_Map.* (ACE_Mem_Map, map, open, map_it): Added a new + function parameter LPSECURITY_ATTRIBUTES. It will be passed + down to ACE_OS::mmap or ACE_OS::open. This is only used on + Win32. + +Mon Oct 20 08:48:28 1997 Steve Huston + + * ace/OS.h, config-hpux-10.x.h: Added a new definition, + ACE_HAS_TIUSER_H_BROKEN_EXTERN_C - HP-UX's tiuser.h has + def for t_errno/_terrno() outside of an extern "C" block, + so in this case, wrap #include in our own + extern "C" block. HP support call W3711856. + +Mon Oct 20 07:49:54 1997 David L. Levine + + * Makefile (TIMESTAMP): moved chmod after cvs commit. + + * include/makeinclude/platform_sunos{4,5}_sunc++*.GNU: don't + create Templates.DB/Modules.DB, because that should have been + Module.DB, and it's not needed anyways. + + * ace/config-vxworks-ghs-1.8.h: removed ACE_HAS_VERBOSE_NOTSUP. + + * tests/run_tests.vxworks: re-enabled Buffer_Stream_Test now that + ACE_OS::cond_timedwait () is supported on VxWorks. + + * examples/IPC_SAP/TLI_SAP/ftp-server.cpp (main): removed call + to ACE_Thread_Manager::open () because it no longer is available. + +Mon Oct 20 02:04:19 1997 Douglas C. Schmidt + + * ACE version 4.3.22, released Mon Oct 20 02:04:19 1997. + +Mon Oct 20 02:01:43 1997 Douglas C. Schmidt + + * examples/Makefile: Removed the Timer_Queue directory from the + Makefile until Sergio has fixed all the examples for GCC. + +Sun Oct 19 21:15:10 1997 Sergio Flores + + * examples/Timer_Queue: Added a new testing framework for + various types of ACE_Time_Queue usecases, e.g., threaded, + reactive, and asynchronous. + The new classes are: + which factors out the common code for + different type of Timer queue implementations, for example the parsing, + the input reading, and leaves the implementation of display_menu() for + example, to subclasses. + the asynchronous version of the timer + queue, uses signals. + implements the reactive timer queue + test driver using + the threaded implementation of the + timer queue. + this class is used to specify operations on the timer queue + independently of their implementation. Thsi allows different + implementations of the timer queue to have different ways of + doing the operations without the base class having to know that. + See the Command pattern. + Added some helper functions into the class. + + +Sun Oct 19 18:07:31 1997 Douglas C. Schmidt + + * ace: Added new config files for SCO OpenServer with a new initial scheme + to make config files: + + - The config to SCO OpenServer has been changed to separate OS + specific flags, threads and compiler flags. + + - For SCO OpenServer the base config file is config-sco-5.0.0.h + + - Pthreads base files are config-fsu-pthread.h and + config-mit-pthread for FSU and MIT pthreads. + + - The compiler file has been named config-gcc-2.7.2.h, this is + base config file for GNU gcc 2.7.2 + + To build a config file for SCO using GNU gcc 2.7.2 would be: + + #include "ace/config-gcc-2.7.2.h" + #include "ace/config-sco-5.0.0.h" + + We would obtain ACE config file for SCO OpenServer with GNU gcc + 2.7.2 with no threads. To build a config file for SCO using GNU + gcc 2.7.2 with FSU pthread would be: + + #include "ace/config-gcc-2.7.2.h" + #include "ace/config-sco-5.0.0.h" + #include "ace/config-fsu-pthread.h" + + Thanks to Arturo Montes for these + changes. + + * ace/OS.i (open): Modified ACE_OS::open() so that it sets errno + to EACCES when the requested file is in use. Thanks to Edan + Ayal for reporting this. + +Sun Oct 19 17:55:34 1997 David L. Levine + + * etc/purify.solaris2: the contents of my ~/.purify file + for Solaris 2.x. The ACE tests purify cleanly with it. + +Sun Oct 19 13:49:17 1997 Carlos O'Ryan + + * ace/Proactor.cpp: + The mutex vs lock name change strikes back, this time under NT. + + * tests/Conn_Test.h: + * tests/Conn_Test.cpp: + The Svc_Handler was cached, but it had the default + handle_close() method, which destroys the object. The new + version leaks a bit of memory, but it seems that it never + crashes. + +Sat Oct 18 09:13:29 1997 Douglas C. Schmidt + + * ace/Synch_T.cpp (lock): Moved the frigging lock method of + Atomic_Op into the *.cpp file to work around bugs with earlier + versions of the horribleHP/UX C++ compiler. Thanks to Neil + Cohen for reporting this. + +Sat Oct 18 07:43:29 1997 David L. Levine + + * Makefile (release): oops, removed "echo" that was used to + disable CVS commit, for testing. + + * ace/Thread_Manager.{h,cpp},Object_Manager.{h,cpp}: moved + ace_thread_exit_lock_ to Object_Manager. + + * include/makeinclude/rules.local.GNU: added $(TEMPLATE_REPOSITORY) + to OBJDIRS, so that individual platforms can add template + repository directories for creation. + + * include/makeinclude/platform_sunos{4,5}_sunc++*.GNU: added + TEMPLATE_REPOSITORY with Templates.DB and Templates.DB/Modules.DB. + We can build without any warnings with Sun C++ now. + +Sat Oct 18 00:17:26 1997 Douglas C. Schmidt + + * ACE version 4.3.21, released Sat Oct 18 00:17:26 1997. + +Fri Oct 17 22:51:46 1997 Carlos O'Ryan + + * ace/Timer_Queue_Adapters.h: + * ace/Timer_Queue_Adapters.i: + * ace/Timer_Queue_Adapters.cpp: + * ace/Timer_Queue_T.h: + * ace/Timer_Queue_T.i: + * ace/Timer_Queue_T.cpp: + * ace/Timer_List_T.cpp: + * ace/Timer_Wheel_T.cpp: + * ace/Timer_Hash_T.cpp: + Changed the accessor name for the lock_ field from mutex() to + lock(), we know this can cause trouble on HP-UX, but only if the + function is inline; so it was moved to the .cpp file. + + * ace/Timer_Queue_Adapters.h: + * ace/Timer_Queue_Adapters.i: + Changed the method name from lock() to mutex(), this should + workaround a bug in the HP/C++ compiler. + + * ace/Timer_Hash.cpp: + * ace/Timer_Hash_T.h: + * ace/Timer_Heap.cpp: + * ace/Timer_Heap_T.h: + * ace/Timer_List.cpp: + * ace/Timer_List_T.h: + * ace/Timer_Queue.cpp: + * ace/Timer_Queue_T.h: + * ace/Timer_Wheel.cpp: + * ace/Timer_Wheel_T.h: + Workaround HP/C++ compiler bug, we cannot include the .cpp file + from the header file, but it must be included in the point of + instantiation. + +Fri Oct 17 18:34:00 1997 Douglas C. Schmidt + + * ace/Atomic_Op.i (lock): Added an accessor to ACE_Atomic_Op to + return a reference to the underlying lock. Thanks to Janusz + Stopa for suggesting this. + +Fri Oct 17 15:36:26 1997 + + * ACE/config-win32-common.h: Added a directive to disable warning + of using Microsoft template instantiation control extension. + +Fri Oct 17 06:31:20 1997 David L. Levine + + * ace/Atomic_Op.i (operator=): rsh.value () instead of just rhs. + + * Makefile (release): added ACE_VERSION string to ace/Version.h. + The MS Resource-Compiler doesn't implement the preprocessor + # operator, so ACE_VERSION supplies the concatenated version + string. Thanks to Matthias for suggesting this. + + * ace/Svc_Handler.{h,cpp},Object_Manager.{h,cpp}: moved + ace_svc_handler_lock_ to Object_Manager. This lock was + created once per Svc_Handler instantiation. It has been + replaced by a single lock for all instantiations. That + shouldn't be a problem because there are so few Svc_Handler + instantiations, and the lock is only used for singleton + creation using double-checked locking. + +Fri Oct 17 01:19:35 1997 Douglas C. Schmidt + + * ACE version 4.3.20, released Fri Oct 17 01:19:35 1997. + +Fri Oct 17 00:05:55 1997 + + * ace/OS: Added ACE_Export to declarations to: + ace_mutex_lock_cleanup_adapter, ftruncate, ace_thread_adapter + + * ace/OS.cpp (readv, writev): Moved ACE_Export directive from + OS.cpp to OS.i. + + * ace/Atomic_Op (operator TYPE): operator TYPE() of Atomic_Op has + been deprecated and removed. Because both user-defined + conversions and user-defined operators were defined on + Atomic_Op, it was possible to get ambiguities between the + user-defined operators and the built-in operators. Therefore, + operator TYPE() has been removed and explicit accessor value() + has been added. Thanks to Stephen Coy for + suggesting this. + + * ace/Atomic_Op (operator!=): Add new operator. + + * tests/Atomic_Op_Test.cpp: Previously we had foo.operator== (5). + It was necessary to resolve the ambiguities between the + user-defined operators and the built-in operators. Since we have + removed the automagic type conversion, we can go back to writing + foo == 5. + + * ACE: Atomic Op related minor changes: + + ace/Malloc.cpp (dump): + tests/Future_Test.cpp (main): + tests/Reactors_Test.cpp (handle_input): + example/Threads/{future1.cpp future2.cpp manual_event.cpp task_two.cpp tss2.cpp}: + examples/Reactor/Misc/test_reactors.cpp: + + * tests/Notify_Performance_Test.cpp: + * tests/Reactor_Performance_Test.cpp: + + Moved explicit template instantiation code to ACE_HAS_THREADS + part for the test. Thanks to Stephen Coy + for pointing this out. + +Thu Oct 16 20:44:40 1997 James C Hu + + * ace/Message_Block.cpp: Changed how continuations are released in + the Message_Block::release_i() method to use an iteration rather + than recursion. This is to avoid a stack overflow problem + encountered by Janusz Stopa. + + * ace/OS.cpp: Added ACE_Export to the declarations of ::writev and + ::readv. These are emulation implementations for systems that + don't support them natively. Was not being resolved correctly + on NT. Hopefully this will fix it. Fix suggested by Rob Head + (rhead@virtc.com). + +Thu Oct 16 14:21:34 1997 Nanbor Wang + + * ace/Proactor.cpp: Replaced #include "ace/Servie_Config.h" with + #include "ace/Object_Manager.h" for declaration of + ACE_Static_Object_Lock. + +Thu Oct 16 10:22:48 1997 Carlos O'Ryan + + * ace/Timer_Heap_T.h: + Fixed comment on the Heap_Iterator, it said "Iterates over an + "). + +Thu Oct 16 08:43:50 1997 David L. Levine + + * ace/OS.i (sema_trywait): on VxWorks only, fixed to set errno to + EBUSY if the semaphore couldn't be taken. Thanks to Doug for + suggesting this fix. + + * performance-tests/Misc/preempt.cpp (main): fixed program name. + + * include/makeinclude/platform_osf1_4.0.GNU: OCFLAGS instead of OFLAGS. + + * tests/test_config.h (VxWorks): restored the removal of the log + file, because it again appears to be necessary. + + * tests/run_tests.vxworks: updated VxWorks tests status. + + * ace/OS.cpp,Token_Invariants.{h,cpp},Object_Manager.{h,cpp}: + moved ace_os_monitor_lock and ACE_Token_Invariants_Creation_Lock + to Object_Manager. + +Thu Oct 16 02:26:12 1997 Douglas C. Schmidt + + * ACE version 4.3.19, released Thu Oct 16 02:26:12 1997. + +Thu Oct 16 02:07:54 1997 Douglas C. Schmidt + + * tests/Priority_Reactor_Test.cpp: Added a "max_retries" flag to + keep the test from hanging forever... Thanks to Stephen Coy + for motivating this. + + * tests/Priority_Reactor_Test.h: Changed + + class Read_Handler : public ACE_Svc_Handler< + + to + + class Read_Handler : public ACE_Svc_Handler< + + and the same for the Write_Handler. Thanks to the ever vigilant + Stephen Coy for reporting this. + +Thu Oct 16 01:18:48 1997 Nanbor Wang + + * ace/OS.cpp (socket_init): Changed to use ACE_UNUSED_ARG. + + * ace/SV_Semaphore_Simple.cpp (name_2_key): Explicitly cast the + return value to (key_t). It was causing problem on Win32. + +Wed Oct 15 22:47:30 1997 Carlos O'Ryan + + * ace/ACE.h: + * ace/ACE.cpp: + Added an implementation of the ISO 8802-3 standard 32 bits CRC, + but for strings only. The implementation was taken from the + FreeBSD code. + + * ace/SV_Semaphore_Simple.cpp: Improved the hashing algorithm to + assign a "unique" key for semaphore keys using an string. This + solves a problem detected by Mark L. Boriack + (Mark.L.Boriack@cpmx.saic.com): under OSF/1 the were too many + collitions with the default arguments for ACE_Process_Mutex. + Note that this is only a problem if no name is given to it. + + * ace/Log_Msg.cpp: ACE_Log_Msg_message_queue_ was not initialized + in platforms without threads. + + * ace/Containers.h: Added a duplicate ACE_Ubounded_Stack_Iterator + to the NANBOR_EXP_CHANGES block. + + * ace/OS.h (ACE_DES_FREE_TEMPLATE): Removed unneeded concatenation + that was getting the HP/aCC compiler a bit confused. Thanks to + Stephen Coy for pointing out the problem + and then reminding me of actually adding the solution to ACE. + +Wed Oct 15 11:07:47 1997 Douglas C. Schmidt + + * ace/OS.i: Fixed the flock_trywrlock() and flock_tryrdlock() so + that they both set errno = EBUSY if they lock is already held. + + * ace/OS.i (mutex_trylock): Make the VxWorks version consistent + with the other versions by returning -1 and setting errno to + EBUSY. Thanks to David Levine for reporting this. + + * ace/Synch.h: Updated the documentation to clarify what the + return value is from the tryacquire() methods. + + * ace/OS.i (mutex_trylock): On NT, if we try to acquire a mutex + that's already locked we'll return -1 and set errno to EBUSY + rather than ETIME to be consistent with Pthreads. Please see + the following entry to understand why this doesn't break + existing code ;-). + + * ace/OS.h: Added a #define for EBUSY on NT. We'll make it the + same as ETIME to avoid breaking existing code! + + * tests/Process_Strategy_Test.cpp (main): Ignore SIGCHLD in the + child. + +Wed Oct 15 14:59:41 1997 + + * tests/run_tests.bat: Added Reactor_Performance_Test and + Notify_Performance_Test to one button test script. + + * tests/tests.dsw: Added Reactor_Performance_Test.dsp and + Notify_Performance_Test.dsp. + +Wed Oct 15 07:21:05 1997 David L. Levine + + * ace/ACE.{h,i},Version.h: added ACE version macros, and static + functions to access them in class ACE. + + * Makefile (release): updates ace/Version.h based on contents of + VERSION. + + * tests/Time_Value_Test.cpp: added test of ACE version accessors. + + * ace/OS.cpp,Object_Manager.cpp: changed ACE_TSS_CLEANUP_LOCK + from an ACE_Thread_Mutex to an ACE_Recursive_Thread_Mutex. + + * ace/OS.h: define ACE_NOTREACHED as empty on DEC_CXX (and + on ghs instead of VXWORKS). + + * tests/TSS_Test.cpp (worker): convert void *c to long if + ACE_HAS_64BIT_LONGS to avoid DEC cxx compiler warning. + + * examples/Threads/thread_specific.cpp (worker): convert void *c + to long if ACE_HAS_64BIT_LONGS. Changed name of "lock" to + "printf_lock" to avoid collision with lock () in DEC cxx + iostream.hxx. + + * examples/threads/tss1.cpp: removed unused static "lock". + + * examples/IPC_SAP/TLI_SAP/ftp-server.cpp (read_file): convert + void *fd to long if ACE_HAS_64BIT_LONGS. And, put "n" in + ACE_UNUSED_ARG. (main): put "return 0" in ACE_NOTREACHED. + + * include/makeinclude/platform_osf1_4.0.GNU: minor cleanup, incl. + addition of -use_ld_input to SOFLAGS. + + * include/makeinclude/platform_osf1_4.0_g++.GNU: added "c" to + ARFLAGS. + + * tests/Future_Test.cpp,examples/Threads/future[12].cpp + (Method_Object_Name): removed extraneous ";" after function + definition. + + * netsvcs/lib/Base_Optimizer.h: adding missing, default "public" + access specifier. + + * apps/JAWS/Server/HTTP_Config.h: added "class" to friend HTTP_Config + declaration in HTTP_Config_Info. + + * examples/IPC_SAP/TLI_SAP/ftp-client.cpp: removed unused variable + "MAXLINE". + + * examples/IPC_SAP/TLI_SAP/db-server.cpp (main): wrapped "return 0" + with ACE_NOTREACHED. + + * examples/Reactor/Misc/test_timer_queue.cpp (handle_timeout): + convert void *arg to long if ACE_HAS_64BIT_LONGS. + + * examples/Service_Configurator/IPC-tests/client/ + local_fifo_client_test.cpp: removed unused variable BUF_LEN. + + * examples/Shared_Malloc/test_persistence.cpp: + removed unused Employee ostream << operator. + + * tests/Conn_Test.cpp: neutered Conn_Test on DEC_CXX. It + doesn't build on DEC cxx 5.5 due to apparent template + instantiation problems. Thanks to James Johnson for + reporting that. And it doesn't terminate when built with + DEC cxx (beta) 6.0. + + * ace/Thread_Manager.h: removed parens from (???) because + g++ got upset about encountering a trigraph. + + * tests/{Notify,Reactor}_Performance_Test.cpp: added + ACE_UNUSED_ARG (handle). + + * tests/Makefile,run_tests.sh: added Reactor_Performance_Test and + Notify_Performance_Test. + + * tests/run_tests.vxworks: added test status of + Reactor_Performance_Test (doesn't appear to do anything, + but doesn't return) and Notify_Performance_Test (fcntl + not supported). + +Wed Oct 15 01:48:36 1997 Nanbor Wang + + * ace/Containers.{h,i,cpp}: + * ace/Thread_Manager.{h,i,cpp}: Start modifying these files. + Will work on them for a day or two. You guys shouldn't worry + about these changes affecting anything because I surround my + changes with #ifdef (NANBOR_EXP_CHANGES) my changes #else + original codes #endif. More details change log will be added + once I get them all working. + +Tue Oct 14 23:54:21 1997 Douglas C. Schmidt + + * ACE version 4.3.18, released Tue Oct 14 23:54:21 1997. + +Tue Oct 14 20:27:28 1997 Carlos O'Ryan + + * tests/Priority_Reactor_Test.cpp: + Added a debug message to find out who terminates the reactor + thread. + + * tests/Priority_Reactor_Test.cpp: + The children could not connect sometimes, this will cause the + test to hang, waiting for those failed connections. + I added a simple exponential backoff strategy to retry + connections until they succeed. + +Tue Oct 14 17:48:28 1997 Steve Huston + + * ace/config-hpux-10.x-hpc++.h: Set ACE_LACKS_SIGNED_CHAR for + both C++ and aC++, not just C++. Thanks to Stephen Coy and + David Levine for finding this. + +Tue Oct 14 03:26:17 1997 Douglas C. Schmidt + + * ace/OS.h: Moved to earlier in the file so that + u_int will be defined. Thanks to Neil B. Cohen + for reporting this. + + * ace/OS.cpp (uname): Added a workaround for the fact that + Chorus doesn't support uname(). Thanks to Wei Chiang for + this fix. + +Tue Oct 14 08:02:20 1997 David L. Levine + + * ace/Managed_Object.{h,cpp} (ACE_Cleanup_Adapter): added virtual + destructor, needed by some compilers for vtable placement. + Thanks to Stephen Coy for this patch. + + * ace/Svc_Conf_y.cpp: commented out unused args and wrapped + assignments in "if" conditionals to avoid g++ warnings. + + * ace/Object_Manager.{h,cpp},Synch.{h,cpp}: moved + ACE_Static_Object_Lock from Synch.{h,cpp} to Object_Manager.{h,cpp}. + This allows it to be absorbed into the ACE_Object_Manager's + preallocated locks. The ACE_Static_Object_Lock interface + isn't really needed any more, but has been kept for backward + compatibility. + + * ace/Object_Manager.cpp: use a static ACE_Static_Object_Lock, + temporarily, because the ACE static services needs it. + + * ace/Malloc.cpp,Reactor.cpp,Service_Repository.cpp: added + #include "ace/Object_Manager.h" for ACE_Static_Object_Lock. + + * ace/Thread_Manager.h: moved ACE_Thread_Manager::THR_FUNC typedef + outside the class declaration to avoid compilation problems on + g++/VxWorks/i960 with -g. THR_FUNC is only used by protected + ACE_Thread_Manager methods so this doesn't widen the public + interface. Thanks to Aaron Valdivia for + reporting this and verifying the fix. + + * tests/IOStream_Test.cpp (client): multiply floats by 1.0 instead + of 1 to avoid bad code generation on g++/VxWorks/i960. Thanks to + Aaron Valdivia for reporting this. + + * tests/Buffer_Stream_Test.cpp: removed unused static thread_manager. + It caused core dump during destruction of static objects with + ACE_HAS_NONSTATIC_OBJECT_MANAGER. + + * examples/Timer_Queue/Reactor_Timer_Queue_Test.cpp (handle_timeout): + removed declaration of unused arg "tv". + + * examples/Timer_Queue/Thread_Timer_Queue_Test.cpp (main): + removed declarations of unused args "argc" and "argv". And, + updated template instantiations. + + * ace/OS.h: use "complex" ACE_UNUSED_ARG for DEC_CXX. + + * ace/Reactor.i (implementation): moved definition to top of + file to prevent use before definition. + + * ace/ARGV.cpp (ACE_ARGV): removed extraneous ; function definition. + + * ace/config-osf1-4.0.h: removed ACE_NEEDS_DEV_IO_CONVERSION. + + * tests/Time_Value_Test.cpp: ACE_HAS_64BIT_LONGS instead of + ACE_HAS_64BIT_LONG. + +Tue Oct 14 03:13:38 1997 Douglas C. Schmidt + + * ACE version 4.3.17, released Tue Oct 14 03:13:38 1997. + +Tue Oct 14 03:10:00 1997 Douglas C. Schmidt + + * ace/Service_Types.cpp (fini): Backed out the following change + until we figure out how to keep existing Svc_Handler code from + dying... Thanks to Nanbor for reporting this. + + * ace/Service_Types.cpp: Changed the implementation so that we + bypass the default cleanup originally done in + ACE_Service_Type_Impl::fini() and instead perform the cleanup in + ACE_Service_Object_Type::fini (void). Thanks to Alex Chan + for reporting this. + + * ace/Svc_Conf.y: Make sure that the Module has the same name as + the Module_Type object from the svc.conf file. We need to do + this because the Stream_Type::fini() method removes each module + by the name given in the configuration file (stored in the + Module_Type object). But the Stream::remove() method compares + this name against the name stored in the Module. So the object + is deleted, but never removed from the list. Another traversal + of the list causes a crash... Thanks to Eric Newton for + suggesting this fix. + + * ace/OS.cpp (invoke): Added call to AfxEndThread insides + ACE_TSS_Cleanup::exit() such that the same cleanup would not be + executed again when threads exit in ace_thread_adapter() in + OS.cpp. Thanks to Alex Chan for + reporting this. + + * ace/Service_Config.cpp (process_directives): Avoid reporting + lex/yacc leakage since there is nothing we could do about it. + Thanks to Alex Chan for reporting this. + + * ace/Svc_Conf.y: Removed duplicate call to symbol() to avoid the + problem that dynamic service objects are created twice. Thanks + to Alex Chan for reporting this. + + * examples/Reactor/FIFO/client.cpp (main): Fixed the call to + fifo_sender.send () so that it passes msg rather than &msg. + Thanks to Sandro Doro for reporting this. + +Tue Oct 14 02:49:02 1997 + + * 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. + +Mon Oct 13 23:07:15 1997 Douglas C. Schmidt + + * tests/Process_Strategy_Test.cpp (handle_signal): Removed the + ACE_DEBUG calls in the child reader signal handler. This was + causing all sorts of random problems due to the asynchronous + nature of signals. Thanks to David Levine for pointing this + out. + +Mon Oct 13 16:27:46 1997 Carlos O'Ryan + + * tests/Priority_Reactor_Test.h: + * tests/Priority_Reactor_Test.cpp: + Fixed wrong header file, thanks to Irfan (irfan@cs.wustl.edu) + + * examples/Shared_Malloc/test_persistence.cpp: + * examples/Timer_Queue/Thread_Timer_Queue_Test.cpp: + Added a couple of ACE_NOTREACHED, thanks to Torbjorn Lindgren + for pointing out this one. + + * ace/Priority_Reactor.cpp: + Added some more template specializations. + + * tests/Priority_Reactor_Test.cpp: + Fixed a number of bugs: hostname not initialized when creating + the server address. + The Svc_Handler base class should be instantiated using the + ACE_*_STREAM macros. + The code for non-threaded platforms was broken. + Thanks to Irfan + + * tests/Priority_Task_Test.cpp: + We use the new ACE_Sched_Priority_Iterator. + + * include/makeinclude/platform_irix6.x-32_sgic++.GNU: + * include/makeinclude/platform_irix6.x-n32_sgic++.GNU: + Removed this old config files, they have been superseeded by + platform_irix6.x_sgic++.GNU. + +Mon Oct 13 15:41:32 1997 Steve Huston + + * ace/Select_Reactor.i, Priority_Reactor.i: Moved code for the + ACE_Event_Tuple struct from Priority_Reactor.i to Select_Reactor.i. + + * ace/Priority_Reactor.cpp: added #include Malloc_T.h to build on AIX. + + * ace/Synch_T.h, Timer_Queue_Adapters.h - added a template argument + to the non-ACE_HAS_TEMPLATE_TYPEDEFS, multi-threaded version of + the ACE_SYNCH_CONDITION macro - of the 3 possibilities for its + definition, this is the only case which requires a template + argument. Timer_Queue_Adapters.h is the only user of the definition, + and it was changed to not supply the template argument. + + * tests/Conn_Test.h: + * tests/Process_Strategy_Test.h: Added #include "ace/SOCK_Stream.h" + +Mon Oct 13 13:42:05 1997 Nanbor Wang + + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp (svc): + Added a macro to define L_cuserid on Win32. + +Mon Oct 13 13:44:40 1997 + + * ace/Priority_Reactor: Fixed a gross violation of ACE coding + standard. Changed bucket to bucket_. + +Mon Oct 13 12:58:01 1997 David L. Levine + + * ace/OS.i: moved ACE_OS::strcasecmp () definition after + ACE_OS::strlen () to prevent use before definition. + + * ace/Priority_Reactor.i: reordered initializers to match + declaration order. + + * ace/Sched_Params.i: reordered function definitions to prevent + uses before definitions. + + * ace/Thread_Manager.cpp (ACE_Thread_Descriptor ctor): reordered + initializers to match declaration order. (spawn_i): added + ACE_UNUSED_ARG (t_handle) without WTHREADS. + + * ace/Thread_Manager.cpp (wait): moved all of the "join" block + inside the #ifndef VXWORKS so that it compiles on VxWorks. + + * ace/Strategies_T.cpp (ACE_NOOP_Creation_Strategy:: + make_svc_handler): removed unused arg declaration to avoid + compiler warning. + + * ace/Svc_Conf_y.cpp: commented out unused args and wrapped + assignments in "if" conditionals to avoid g++ warnings. + + * tests/Priority_Reactor_Test.cpp (handle_input): added + ACE_UNUSED_ARG (h). + + * examples/Connection/non_blocking/CPP-connector.cpp (handle_signal): + added ACE_UNUSED_ARG (signum). + +Mon Oct 13 03:25:45 1997 Douglas C. Schmidt + + * ACE version 4.3.16, released Mon Oct 13 03:25:45 1997. + +Mon Oct 13 03:18:33 1997 Douglas C. Schmidt + + * ace/Thread_Manager.h: Removed the following code from + ACE_Thread_Control: + + #if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) + static ACE_Thread_Mutex ace_thread_lock_; + // Lock the creation of the Singleton. + #endif /* defined (ACE_MT_SAFE) */ + + What on earth was this doing here?! Thanks to Stephen Coy + for reporting this. + +Mon Oct 13 00:10:00 1997 + + * tests/Atomic_Op_Test.cpp (main): Changed "foo == 5L" to + "foo.operator== (5L)" because the former was breaking some + compilers (e.g., HP/UX aCC). + + * ace/Connector.h (open): Removed the defaults arguments since + some compilers complain about the two open()s being + indistinguishable. + +Sun Oct 12 23:51:57 1997 Douglas C. Schmidt + + * ace/{Synch_T,Atomic_Op}: All the relational operators should + return int (really return bool) rather than TYPE. + +Sun Oct 12 18:41:01 1997 Carlos O'Ryan + + * tests/Priority_Reactor_Test.cpp: + Added several missing template specializations. + + * ace/Priority_Reactor.cpp: + Fixed typo (#pragme for #pragma). + Added several missing template instantiation. + + * ace/Timer_Queue_Adapters.cpp: + The includes were missing and there was a minor syntax error. + +Sun Oct 12 16:16:15 1997 Nanbor Wang + + * ace/ace_{dll,lib}.dsp: Added Timer_Queue_Adapters.cpp into + project files. + + * tests: Added a new test Priority_Reactor_Test. + + * ace/Timer_Queue_Adapters.{h,i}: Added or moved the line that + instructs edit mode to use on emace to the first line. Also + added ACE_Export to classes in this file. + + * ace/Timer_Queue_Adapters.cpp: Added proper inclusion of the + header file. Corrected a syntax error. + + * examples/Timer_Queue/Timer_Queue.dsw: Added a new project + Thread_Timer_Queue_Test.dsp. + + * tests/run_tests.{bat,sh}: Added MT_SOCK_Test and + Priority_Reactor_Test into one-buttoned test set. + +Sun Oct 12 16:53:32 1997 Douglas C. Schmidt + + * ace/examples/Service_Configurator/IPC-tests/server: Reformatted + and recommented the code a bit. + + * ace/OS: Added 3 new ACE #defines: + + #define ACE_ONE_SECOND_IN_MSECS 1000L + #define ACE_ONE_SECOND_IN_USECS 1000000L + #define ACE_ONE_SECOND_IN_NSECS 1000000000L + + This is much easier to read than trying to keep track of the + 000s! Then, replaced all uses of the original values with the + new symbolic constants. + + * ace/Timer_List.cpp: Removed an explicit template instantiation + of ACE_Async_Timer_Queue_Adapter<>. Why was it here in the + first place? + + * ace: Created a new group of Timer_Queue_Adapters files and moved + the Async and Thread adapters into this file. This reduces the + amount of coupling in the ACE library and removes problems with + circular includes. + + * ace/Timer_Queue_T: Added a new ACE_Thread_Timer_Queue_Adapter, + which makes it possible to use a timer queue in a thread + automagically. Thanks to Carlos O'Ryan for writing this. + + * examples/Timer_Queue: Began to integrate Carlo's new thread + timer queue test. + + * examples/Timer_Queue/Async_Timer_Queue_Test.cpp: Changed the + timer queue from a Timer_List to a Timer_Heap. + + * examples/Makefile (DIRS): Added Timer_Queue to the list of DIRS + to build. + +Sun Oct 12 16:45:47 1997 Carlos O'Ryan + + * ace/Sched_Params.h: + Added some comments. + + * examples/Timer_Queue/Thread_Timer_Queue_Test.cpp: + Added some comments and template specializations. + + * examples/Naming/Makefile: + There is no need to set LDLIBS to add local object files + anymore, using FILES is enough. + +Sun Oct 12 03:35:37 1997 Nanbor Wang + + * examples/Timer_Queue: Added a new directory for testing of + various usages of timer queue. + + * tests/Async_Timer_Queue_Test: Moved to examples/Timer_Queue. + It doesn't really belong to tests/ directory. + + * ace/ACE.cpp (register_stdin_handler): Must register the reactor + we are using to the event handler. + (read_adapter): Must notify the reactor when we are done with + handling stdin event. + +Sun Oct 12 00:26:56 1997 Carlos O'Ryan + + * ace/Makefile: + * ace/Priority_Reactor.h: + * ace/Priority_Reactor.i: + * ace/Priority_Reactor.cpp: + Augmentes Select_Reactor, adding priority based dispatching for + the I/O Event_Handlers, the only feature supported is + dispatching in the order defined by the priorities. + Each Event_Handler defines its priority, if the priority is out + of range the culprit is "punished" by dispatching at the lowest + priority. + Care has been exercised to avoid dynamic memory allocation. + + * tests/Makefile: + * tests/Priority_Reactor_Test.h: + * tests/Priority_Reactor_Test.cpp: + Added small tests of the Priority_Reactor, the test runs an + Acceptor on the main thread and creates several threads (or + processes if the plaform does not support threads) that connect + to this Acceptor. The writing threads send several short + messages, the main thread receives them using one Svc_Handler + per writer, dispatched at different priorities. + The test itself is interesting, it shows how to write very + simple Svc_Handler, Connectors and Acceptors. + + * ace/Select_Reactor.h: + * ace/Select_Reactor.cpp: + The dispatching of all the handles in a "group" (READ, WRITE or + EXCEPT) was encapsulated in a single routine. + + * ace/Malloc_T.cpp: + In the Cached_Allocator memory was allocated as an arrays of + char, it must be released the same way. + + * ace/Sched_Params.h: + * ace/Sched_Params.i: + Added a new class (ACE_Sched_Priority_Iterator) to iterate over + the priorities. + + * tests/Priority_Task_Test.cpp: + Added some comments. + +Sat Oct 10 16:23:49 1997 Steve Huston + + * tests/SOCK_Connector_Test.cpp: Passes the test if the should-fail + non-blocking test fails for any reason - not limited to ECONNREFUSED + or ENOTCONN. + +Sat Oct 11 16:02:33 1997 Douglas C. Schmidt + + * ACE version 4.3.15, released Sat Oct 11 16:02:33 1997. + +Sat Oct 11 14:38:16 1997 Douglas C. Schmidt + + * ace/SOCK_Connector.cpp (complete): Fixed a typo with + ACE_NON_BLOCKING_BUG_DELAY. Thanks to John Zeb Dhom" + for reporting this. + + * tests/MT_SOCK_Test.cpp (client): Slightly revised the client + function so that it doesn't try to use non-blocking connects if + it's on a Win32 platform that has bugs with non-blocking + connects. + + * ace/SOCK_Connector.cpp: It appears that connect() can set the + ETIMEDOUT errno if the connection times out (whatever that + means). Therefore, I need to check for that errno, rather than + ETIME after calling connect(). + + * tests/SOCK_Connector_Test.cpp: Added a check for ETIMEDOUT + since this appears to be set by some platforms (e.g., + SGI). + +Sat Oct 11 02:52:10 1997 Douglas C. Schmidt + + * ACE version 4.3.14, released Sat Oct 11 02:52:10 1997. + +Sat Oct 11 02:10:29 1997 Carlos O'Ryan + + * examples/Logger/simple-server/Makefile: + * examples/Mem_Map/IO-tests/Makefile: + * examples/Reactor/Multicast/Makefile: + * examples/Service_Configurator/Misc/Makefile: + Fixed some more problems with the Makefiles for binaries; I took + the chance and added RCS ids on the Makefiles + +Fri Oct 10 18:39:39 1997 Douglas C. Schmidt + + * tests/Service_Config_Test.cpp: Moved the static member function + called cleanup() out into a stand-alone extern "C" function + called test_singleton_cleanup() to workaround MVS C++ compiler + bugs. Thanks to Chuck Gehr for reporting this. + + * ace/Task.cpp: Solved the age old MVS C++ problem where we can't + register C++ static member functions as C callback functions. + The solution here was to create a C wrapper to do the callback. + Thanks to Chuck Gehr for reporting this. + + * tests/Service_Config_Test.cpp: Made the destructor of + Test_Singleton public to work around bugs with the MVS C++ + compiler. Thanks to Chuck Gehr for reporting this. + + * ace/ACE, + ace/Proactor, + ace/SOCK_Connector, + ace/SPIPE_Connector, + ace/Acceptor, + tests/Conn_Test: Changed ETIMEDOUT errno to ETIME errno to be + consistent throughout ACE. There should be no uses of + ETIMEDOUT in ACE or the test apps and examples. + + * ace/ACE.cpp (handle_timed_complete): Only assume that we've + timed out if the return value from select() == 0 *and* the + timeout value isn't NULL... + + * ace/Object_Manager.h: Replaced the use of ACE_MT() in the header + file with a #ifdef. This solves problems that arise when ACE_MT + is defined as "nothing" when MT_SAFE is not defined. As a code + which has "ACE_MT();" becomes just ";" and fail to compile. + Thanks to Avraham Nash for reporting + this. + +Fri Oct 10 19:55:50 1997 Carlos O'Ryan + + * examples/ASX/CCM_App/Makefile: + * include/makeinclude/rules.bin.GNU: + I have re-applied Steve Huston changes from Oct 01, the change + was (IMHO) useful and made compilation cleaner. + + * examples/ASX/Event_Server/Event_Server/Makefile: + Fixed problem that made compilation fail. + +Fri Oct 10 19:52:44 1997 + + * ace/OS.h: + * ace/Connector.cpp: + * ace/SOCK_Connector.cpp: Added new #define + ACE_NON_BLOCKING_BUG_DELAY and replace their uses from some + magic numbers to this constant. + +Fri Oct 10 19:27:28 1997 Steve Huston + + * include/makeinclude/rules.bin.GNU + examples/ASX/CCM_App/Makefile + Removed the changes to these files added Oct 01. + +Fri Oct 10 15:21:07 1997 + + * examples/Connection/non_blocking/CPP-connector.cpp + (disconnecting): Remove this method. It was not being used. Also + rewrote some parts of handle_close to make the code simple. + + * ace/Connector.cpp (create_AST): The register_handler() method + now needs to explicitly be given the handle to wait on. This is + because the get_handle() method of Connector has been + depricated. + + * examples/Connection/non_blocking/test_sock_connector.cpp (main): + Since this test waits on the STDIN handle to become ready, we + have to make sure that the WFMO_Reactor is used on Win32. This + is necessary since select() on NT does not support waiting on + STDIN. + + * examples/Connection/non_blocking/CPP-connector.cpp (open): On + Win32, the std handle must be registered directly (and not as a + socket). On non-Win32, the std handle must be registered as a + normal handle with the READ mask. Since on Win32, STDIN is used + directly as an waitable handle, handle_signal will be called + instead of handle_input. Therefore, we had to add handle_signal + to the event_handler. + +Fri Oct 10 15:16:47 1997 Nanbor Wang + + * ace/WFMO_Reactor.{h,cpp}: + * ace/Select_Reactor.{h,cpp}: + * ace/Reactor_Impl.h: + * ace/Reactor.h: Added 2 new functions in ACE_Reactor class so we + can replace the signal handler and timer queue the reactor is + using. Notice that you should do this before you start the + reactor, otherwise, you may loose your scheduled timed events. + +Fri Oct 10 14:49:40 1997 Douglas C. Schmidt + + * bin/man2html: Added a new set rul -e 's/^$/

    /g', which + correctly preserves paragraph boundaries. Regenerated all of + the ACE html documentation so that it is much better formatted. + +Fri Oct 10 11:08:02 1997 Carlos O'Ryan + + * tests/run_tests.sh: + We remove the log file before running a test, we also check for + the log file existance before running run_test.check on + it. Thanks to Dean Clamons for + helping us with this. + + * tests/run_tests.check: + IRIX egrep does not support -q, we redirect the output the + /dev/null instead. + +Fri Oct 10 01:46:07 1997 Douglas C. Schmidt + + * ACE version 4.3.13, released Fri Oct 10 01:46:07 1997. + +Thu Oct 9 22:23:56 1997 Douglas C. Schmidt + + * ace/Thread_Manager.cpp: Moved the explicit template + instantiations for ACE_Unbounded_Queue out of the complicated + #ifdef since we also want this to compile even if we don't have + threads. + + * tests/MT_SOCK_Test.cpp: Revised the code so that it uses + processes on UNIX rather than threads. + + * tests/SOCK_Test.cpp (spawn): Cleaned up the code to make it + correct. + + * ace/Get_Opt.cpp (ACE_Get_Opt): Changed the third argument to the + ACE_Get_Opt constructor be changed from `char *' to `const char + *'. Thanks to Eric Newton for suggesting this. + +Thu Oct 09 18:43:14 1997 + + * ace/Strategies_T.cpp (connect_svc_handler): Added + synchronization to the method as the setting of the in_use bit + in the service handler must be done atomically with the finding + and binding of the service handler in the cache. + + * tests/Conn_Test.cpp (client_connections): Added multithreading + to the test in order to test out the new MT features of the + Connector. + + * ace/OS.cpp (invoke): Somehow there was a bug introduced in + ACE_Thread_Adapter::invoke where the user entry point was being + called twice! + +Thu Oct 09 17:54:31 1997 Douglas C. Schmidt + + * ACE version 4.3.12, released Thu Oct 09 17:54:31 1997. + +Thu Oct 9 17:46:59 1997 Carlos O'Ryan + + * ace/Thread_Manager.cpp: + Added explicit instantiation of + ACE_Unbounded_Queue_Iterator, it seems to + be needed on Linux and other platforms; thanks to Huiying Shen + for pointing out this one. + + * ace/OS.h: + * ace/OS.i: + Reverted the change that added support for + pthread_setconcurrency on IRIX, the function was supposed to be + undocumented, but present on the libraries, I could not find it + in any of the SGI machines we have access to. + + * ace/Thread_Manager.cpp: + On IRIX/SGIC++ we need to instantiate ACE_Node too. + + * ace/SOCK.h: + Moved the open() method to the public interface, it is used by + ACE_SOCK_Connector. + +Wed Oct 8 20:01:35 1997 Douglas C. Schmidt + + * ace/SOCK_Connector: Modified the ACE_SOCK_Connector so that it + doesn't maintain state and doesn't inherit from ACE_SOCK. + Therefore, we can have multiple threads using the same + ACE_SOCK_Connector simultaneously without any reentrancy + problems. + + * ace/SOCK.h: Moved the open() method into the public part of the + class so it can be used in ACE_SOCK_Connector::connect(). + + * ace/Connector.h: Removed the this->connector_ from the + ACE_Connector class in order to make this pattern work correctly + with multi-threaded programs. Also removed the connector() + accessor (which was never useful anyway). + + * ace/SOCK.cpp (open): Explicitly test setsockopt() for -1 in case + of failure. + + * tests/SOCK_Test.cpp (server): Revised this test to reflect the + fact that it doesn't iterate, but only runs one client and one + server. + + * tests: Added a new test for multi-threaded sockets called + MT_SOCK_Test.cpp. Thanks to Bob Laferriere + for motivating this test. + +Wed Oct 8 12:09:46 1997 Nanbor Wang + + * ace/OS.i (strcasecmp): Oops, we forgot to compare the strlen + first. Thanks to Murphy Ivan for + fixing the bug. + + * ace/OS.h: Added THR_DAEMON macro definition for Win32 (et. al.?) + to avoid compilation error. + Removed ACE_HAS_BROKEN_TEMPLATE_DESTRUCTOR and related macros. + +Wed Oct 8 09:52:20 1997 Carlos O'Ryan + + * ace/Parse_Node.cpp: + Fixed the minor syntax error *again*. + +Tue Oct 7 17:10:51 1997 Carlos O'Ryan + + * ace/Token_Manager.cpp: + Added a defined(ACE_MT_SAFE) protection around the lock creation + on ACE_Token_Manager::instance(), otherwise it would not work on + platforms without threads. Thanks to "Neil B. Cohen" + for pointing this one out. + +Tue Oct 7 07:07:45 1997 Douglas C. Schmidt + + * ace/Parse_Node.cpp (symbol): Added an ACE_ERROR_RETURN instead + of an ACE_RETURN to bail out if an error occurs. Thanks to Eric + Newton for reporting this. + +Tue Oct 7 10:57:48 1997 Carlos O'Ryan + + * ace/OS.h: + Added a prototype for pthread_setconcurrency when + ACE_HAS_IRIX62_THREADS is defined. This function is undocumented + but was needed by some users. + + * ace/Parse_Node.cpp: + Fixed a minor syntax error. + +Tue Oct 07 06:58:40 1997 Douglas C. Schmidt + + * ACE version 4.3.11, released Tue Oct 07 06:58:40 1997. + +Tue Oct 7 02:51:55 1997 Nanbor Wang + + * tests/TSS_Test.cpp (main): + * tests/Task_Test.cpp (main): + * tests/Barrier_Test.cpp (main): Removed thread_handles[] since we + don't need to join the thread explicitly anymore. + + * ace/Thread_Manager.{h,cpp}: Added an ACE_Unbounded_Quque to + collect terminated threads so that we can later join the threads + automatically by issuing a ACE_Thread_Manager::wait(). Some + typos are also fixed. Next step will be to replace current + thr_table_ with a hash table and store an index to this table + in TSS. + +Mon Oct 6 22:16:45 1997 Douglas C. Schmidt + + * ace/Thread_Manager: Added a new task() method to + ACE_Thread_Manager that returns a pointer to the current + ACE_Task_Base we're executing in if this thread is indeed + running in an ACE_Task_Base, else return 0. Thanks to Ari Erev + and John Neystadt for suggesting this. + + * ace/Thread_Manager: Moved the task_ pointer from the public part + of the ACE_Thread_Descriptor class into the private part of the + class and added an inline accessor instead. + + * ace/{Parse_Node.{h,cpp},Svc_Conf.y}: Added support to enable + dynamically allocate objects from factory functions that have + been pre-registered with the Service Configurator instead of + relying on dynamic loading. The new config file syntax would be + (note the colons): + + dynamic joe Service_Object * : make_queue() active + dynamic bob Service_Object * : make_queue() active + + Functions are found in the list of statically defined functions + for static services. Thanks to Eric C. Newton + for this fix. + +Mon Oct 6 13:00:19 1997 Carlos O'Ryan + + * ace/CORBA_Handler.cpp: Removed the use of reactor_ in the .cpp + file too; we are using the ACE_Event_Handler reactor_ (which is + a base class). + +Sat Oct 04 17:40:30 1997 Douglas C. Schmidt + + * ACE version 4.3.10, released Sat Oct 04 17:40:30 1997. + +Sat Oct 4 11:57:25 1997 Douglas C. Schmidt + + * apps/Orbix-Examples/Event_Comm/{Supplier,Consumer}/Makefile: + Changed a typo where /src/ was being used instead of /libsrc/. + Thanks to Jean-Marc STRAUSS for reporting + this. + + * examples/Connection/non_blocking/CPP-connector.cpp (init): + Removed the initialization of the local address. This is + error-prone and confusing to use. Thanks to Huiying Shen + for reporting this. + + * ace/SV_Semaphore_Simple: Added support for IPC_EXCL in order to + determine, upon creating the semaphore, if it already exists + (which means a bad key was selected), another daemon is still + running or the previous daemon didn't remove its resources. I + have this implemented now by first opening the semaphore and if + that fails then creating it. To support this, added another + enum, ACE_EXCL = IPC_EXCL, to the class header. + Also, changed the ACE_SV_Semaphore_Simple::open( key_t, ... ) + method to use + + if (ACE_BIT_ENABLED (flags, IPC_CREAT)) + + rather than + + if (flags == IPC_CREAT) + + Thanks to Michael McKnight for + reporting this. + + * ace: Replaced all uses of the template param LOCK with ACE_LOCK + to avoid conflicts with some systems that have a macro named + LOCK. + + * ace/IOStream_T.h: Added ACE_LACKS_ACE_IOSTREAM to the + IOStream_T.* files. Thanks to Torbjorn Lindgren + for reporting this. + + * ace/{Proactor,Service_Config,ACE_Sig_Handler}: Removed the use + of sig_atomic_t as a return type. Thanks to Torbjorn Lindgren + for reporting this. + +Sat Oct 04 03:14:46 1997 + + * ace/WFMO_Reactor.cpp (add_network_events_i): While looking + through all entries in the current (and suspended) handles for a + matching handle, we need to skip those that have been scheduled + for deletion). Also changed ACE_BIT_STRICTLY_ENABLED to + ACE_BIT_ENABLED. + + * ace/Select_Reactor.cpp (bit_ops): Since CONNECT is no longer a + logical OR of READ and WRITE, we have to explicitly make sure + that enable the handle in the correct wait sets. + + * ace/Event_Handler.h: Changed the values of the event + masks. CONNECT is no longer a logical OR of READ and WRITE. It + was its own unique value. + + * ace/OS.h: Removed ACE_BIT_STRICTLY_ENABLED. It did not do what I + thought it would do. + + * ace/Connector.cpp (handle_output): Added code that tries to find + out if the reactor uses event associations for the handles it + waits on. If so we need to reset it. This is necessary for + asynchronous connects. + + * ace/SOCK_Connector.i (reset_new_handle): Added new method on all + connectors to reset event associations of handles. + +Fri Oct 03 21:20:26 1997 David L. Levine + + * ace/Makefile: disable INSTALL in $(ACE_ROOT)/ace Makefile, + because it's not needed and it creates circular symlinks when + the library build fails. + +Fri Oct 3 11:39:45 1997 Douglas C. Schmidt + + * ace/Thread_Manager: Added a new flags_ field to + ACE_Thread_Descriptor and changed the insert_thr() and + append_thr() methods to update this flag so that we can keep + track of whether the thread was created "detached" or not. + + * ace/Reactor.cpp (event_loop_done): Replaced the use of + sig_atomic_t with int to workaround bugs with KAI C++. Thanks + to Torbjorn Lindgren for reporting this. + + * ace/CORBA_Handler: Removed the reactor() accessors since they + are subsumed by the methods in ACE_Event_Handler. Thanks to + Jean-Marc STRAUSS for reporting this. + +Thu Oct 02 15:38:34 1997 + + * Reactor: Renamed reset_new_handle to uses_event_associations. + + * ace/FIFO_Recv.cpp (ACE_FIFO_Recv): aux_handle_ must correctly be + initialized to ACE_INVALID_HANDLE. Thanks to Sandro Doro + for reporting this. + +Thu Oct 02 11:21:37 1997 Steve Huston + + * include/makeinclude/platform_{aix aix4.2}.GNU: added the + shared_libs_only = 0 and static_libs = 1 settings since C Set++ + builds the shared libs from the static. + + * ace/OS.h: Removed spaces around '##' in ACE_DES_FREE_TEMPLATE macro. + + * ace/Strategies_T.cpp: added #include "ace/Thread_Manager.h" + + * ace/Managed_Object.h: Added template arg in the "unimplemented + function" section. + +Thu Oct 02 10:46:18 1997 Steve Huston + + * ace/Malloc.h: added some comments on rationale and use of + ACE_MALLOC_ALIGN. + +Wed Oct 01 19:08:26 1997 Steve Huston + + * include/makeinclude/rules.bin.GNU: correctly builds programs + with multiple object modules. + + * examples/ASX/CCM_App/Makefile: needed some adjustment to work with + new rules.bin.GNU, above. + +Wed Oct 01 14:11:03 1997 + + * ace/Remote_Name_Space.cpp (resolve): We need to allocate one more + space than what strlen reports. + +Wed Oct 01 12:45:51 1997 David L. Levine + + * ace/ACE.cpp (count_interfaces, get_handle): changed "unix" to + "__unix" because DEC CXX doesn't #define "unix". Thanks to + Billy Quinn for reporting this. + + * ace/High_Res_Timer.h: added comment from Gabe + about ACE_OS::gethrtime () drift on MP + machines. + + * ace/OS.i (gethrtime, Solaris only): removed ACE_OSCALL_RETURN + wrapper around ::gethrtime () because it was broken (the type + was int) and not necessary (::gethrtime () should never fail), + so we can remove its overhead. + + * tests/Time_Value_Test.cpp: undef ACE_NO_INLINE in the + ACE_U_LongLong test hacks. + + * tests/SV_Shared_Memory_Test.cpp: delay construction of allocator + until first needed because it needs something that the + ACE_Object_Manager constructs. + + * tests/run_tests.vxworks: added console printout before each test. + +Tue Sep 30 21:42:58 1997 Douglas C. Schmidt + + * ACE version 4.3.9, released Tue Sep 30 21:42:58 1997. + +Tue Sep 30 17:15:14 1997 James C Hu + + * ace/Filecache.{h,cpp}: I removed the static locks in the + Filecache and made them local member objects. Since Filecache + is usually a singleton, no more memory is required this way. + + * tests/Hash_Map_Manager_Test.cpp: Added some code to test the + Hash_Map_Manager_Iterator. This is to show Bob Laferriere that + it works. + +Tue Sep 30 13:41:14 1997 Nanbor Wang + + * examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.i + (handle_input): + * examples/Reactor/ReactorEx/test_network_events.cpp (handle_input): + * examples/Logger/simple-server/Logging_Acceptor.cpp + (handle_input): Changed to use reset_new_handle () for querying + whether we need to reset handles or not. + +Tue Sep 30 08:35:15 1997 David L. Levine + + * ace/Atomic_Op.i: added CVS header. + + * ace/Object_Manager.{h,cpp}: removed Filecache arrays, because + Filecache no longer needs them. + + * ace/Filecache.{h,cpp}: removed unused static Filecache::lock_. + + * tests/test_config.h: Added 1 second sleep to ACE_END_TEST to + allow all threads to terminate gracefully. + VxWorks only: removed the hack removal of the log file, because + it no longer appears to be necessary. + + * tests/TSS_Test_Errno.h,TSS_Test.cpp: dynamically allocate + Errno::lock_ to try to avoid problem with cleanup of statics + on VxWorks. It doesn't solve the problem, all of the time. + There are still statics in the ACE library, which could be + causing it. + +Tue Sep 30 01:35:28 1997 Nanbor Wang + + * ace/Naming_Context.cpp (close, close_down): Separated these two + functions calls. Close now only release the name_space_ + resource and close_down release all resources. Close should be + use when changing the name_space. + +Mon Sep 29 22:29:46 1997 Nanbor Wang + + * ace/Strategies_T.cpp (accept_svc_handler ): + * ace/Service_Manager.cpp (handle_input): + * ace/Acceptor.cpp (handle_input, accept_svc_handler): Changed to + use reset_new_handle () for querying whether we need to reset + handles or not. + + * ace/Reactor.{h,i} (reset_new_handle): + * ace/Reactor_Impl.h (reset_new_handle): + * ace/Select_Reactor.{h,i} (reset_new_handle): + * ace/WFMO_Reactor.{h,i} (reset_new_handle): Added this new method + so we can determine whether the implementation of the reactor + requires us to decouple the event a handle inherit from accept. + This scheme doesn't depend on the RTTI support of compilers. + Thanks to Irfan for the tips. + +Mon Sep 29 21:28:02 1997 + + * ace/Synch (ACE_Recursive_Thread_Mutex): Methods were added to + ACE_Recursive_Thread_Mutex so that it has a consistent interface + with other locking mechanisms. Thanks to Phil Logan + for submitting these changes. + +Mon Sep 29 13:28:05 1997 David L. Levine + + * ace/OS.i (thr_setconcurrency): added support on Irix 6.x, using + its ::pthread_setconcurrency (). Thanks to Felix Popp + for letting us know + about this Irix 6.2/3 system function, and for testing it out. + + * ace/ACE.cpp (handle_timed_complete) force recv check on VxWorks + because its read handle is always not set. Thanks to Steve for + helping track down the problem. We might want to consider doing + it this way on Unix platforms, as well, according to Steve. + + * apps/JAWS/server/HTTP_Server_T.cpp (accept): fixed typo, + "remote_address" instead of "remote_adrress". + + * tests/Time_Value_Test.cpp (test_ace_u_longlong): replaced + ACE_ASSERTs with calls to a static function that prints out + why the test failed. Also, disabled test of ACE_U_LongLong + if ACE_HAS_64BIT_LONG. + + * ace/OS.h: 1) Use u_long for ACE_hrtime_t if ACE_HAS_64BIT_LONGS. + 2) Added ACE_NO_INLINE support to allow wrapper_macros.GNU to + disable inlining from the command line. 3) Added + ACE_HAS_VERBOSE_NOTSUP support. + + * include/makeinclude/wrapper_macros.GNU: added "inline" flag to + allow enabling/disabling of inlining from the command line or + platform_macros.GNU. + + * ace/config-vxworks*.h: added ACE_HAS_VERBOSE_NOTSUP. + +Mon Sep 29 11:15:10 1997 Nanbor Wang + + * ace/OS.h (ace_cleanup_destroyer): Made this an export function. + +Sat Sep 27 17:04:48 1997 + + * ace/Reactor: Added new methods to be able to set and get the + implementation class being used by the reactor. The set method + is protected and should be used with care, specially while + changing the implementation class midway through an + application. Also both the methods are virtual, and user can + subclass to change their behavior. The internal code of the + reactor also changed to now use these methods exclusively rather + than the the raw data variables. + + * ace/Acceptor.cpp (handle_input): When using the WFMO_Reactor, we + need to reset the event association for the newly created + handle. This is because the newly created handle will inherit + the properties of the listen handle, including its event + associations. Therefore two changes were made: + + - A new directive (flag) was added to all the acceptors + (LSOCK_Acceptor, SOCK_Acceptor, SPIPE_Acceptor, TLI_Acceptor, + and UPIPE_Acceptor) to reset the event associations of the + newly created handle. Currently only the SOCK_Acceptor pays + attentions to this directive, others just ignore it. This flag + had to be added to all the acceptors for interface + compatibility and also to make sure that the Acceptor template + code works correctly. + + - A dynamic_cast was necessary to determine at run-time which + implementation of the Reactor we are using. But because this + code is limited to Win32, there should be no problems doing + the dynamic_cast. + + The same thing as above needed to be done to: + + - ACE_Accept_Strategy::accept_svc_handler (ace/Strategies_T.cpp) + + - ACE_Service_Manager::handle_input (ace/Service_Manager.cpp) + + - LOCK_SOCK_Acceptor::accept (apps/JAWS/server/HTTP_Server_T.h) + + - Logging_Acceptor.cpp::handle_input (examples/Logger/simple-server/Logging_Acceptor.cpp) + + - Network_Listener::handle_input (examples/Reactor/ReactorEx/test_network_events.cpp) + + - Handle_R_Stream::handle_input (examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.i) + +Sat Sep 27 20:03:29 1997 Carlos O'Ryan + + * include/makeinclude/platform_sunos5_sunc++_orbix.GNU: + Activated exceptions by default too, since they are used by + Orbix anyway. + + * include/makeinclude/platform_sunos5_sunc++.GNU: + Some libraries were missing and the locations were not + completely accurate. + + * ace/config-sunos5.5-sunc++-4.x-orbix.h: + I let the MT Orbix as the default, since that is the + configuration here and that was implicit in the platform*.GNU + files. + + * include/makeinclude/wrapper_macros.GNU: + Added flags to the IDL compiler to emit support for both + CORBA::Any (-A) and the BOAImpl (-B) approach for the server + side implementations. + + * ace/CORBA_Handler.cpp: + The full definition for Thread_Manager was missing, I added an + include for it. + +Sat Sep 27 07:59:18 1997 David L. Levine + + * include/makeinclude/wrapper_macros.GNU, + platform_{chorus,lynxos,vxworks*}.GNU: + default to building shared libs only, except on Chorus, + LynxOS, and VxWorks. While the "shared_libs_only=1" make + flag is still supported, it is no longer necessary because + it is the default. + + To revert to the prior behavior of building both shared and + static libraries, add "static_libs=1" to either your make + command invocation or your include/makeinclude/platform_macros.GNU. + +Sat Sep 27 00:45:10 1997 Nanbor Wang + + * examples/OS/Process/README (imore): + * examples/OS/Process/Makefile: + * examples/OS/Process/imore.cpp: Added a new example: imore. + + * ace/SOCK_Stream.cpp (close, close_reader, close_writer): Moved + invalid handlers checking from close to close_reader and + close_writer. + +Fri Sep 26 14:28:36 1997 Nanbor Wang + + * tests/SPIPE_Test.cpp: + * tests/Process_Strategy_Test: Changed the macro "ACE_LACKS_EXEC" + to "ACE_LACKS_FORK". + + * ace/SOCK_Stream.cpp (close): Added checking for invalid handle + before shutting down the write end. + +Fri Sep 26 11:55:27 1997 Steve Huston + + * ace/Malloc.h: Use signed math in the preprocessor calculations + for ACE_CONTROL_BLOCK_ALIGN_LONGS (and all of its contributing + factors). + + * ace/ACE.cpp: Fixed the TLI/BSD checks in handle_timed_complete. + + * tests/SOCK_Connector_Test.cpp: Added ENOTCONN as a valid fail + condition (in addition to ECONNREFUSED). + +Fri Sep 26 05:11:40 1997 Nanbor Wang + + * ace/SOCK_Acceptor.cpp (shared_accept): Made the newly added + WSAEventSelect code unreachable. It caused several test program + hung when performing socket recieving. Don't know why this is + happening. According to the online manual, this should be the + right thing to do. Some more Access Violations to be fix + tomorrow. Oh, I mean, today. + +Fri Sep 26 01:22:28 1997 Douglas C. Schmidt + + * ace/OS: Made a few changes to OS.h and OS.i to stop compiler + warnings. Thanks to Wei Chiang for + reporting this. + + * ace/config-chorus.h: Added ACE_LACKS_RLIMIT and removed + ACE_LACKS_SIGACTION. Thanks to Wei Chiang + for reporting this. + + * ace/TLI_Connector.cpp (complete): Changed the call to + ACE::handle_timed_complete() to use the new parameter. + + * ace/ACE: Added an extra parameter to the call to + ACE::handle_timed_complete() to indicate (at run-time) that this + is being called via a TLI interface. Thanks to the + ever-vigilant Steve Huston for suggesting this. + + * tests/SOCK_Connector_Test.cpp: "ACEified" the new test program. + +Thu Sep 25 23:27:38 1997 + + * ace/config-win32.h: Error in directives: it should be "Define + ACE_HAS_WINSOCK2 to 0 in your config.h file if you do *not* want + to compile with WinSock 2.0.". The typo was a 1 instead of the + 0. Thanks to Gonzalo A. Diethelm for pointing + this out. + +Thu Sep 25 20:33:09 1997 Douglas C. Schmidt + + * ace/Message_Queue.h: Changed the *_i() methods to be virtual so + that we can change the queueing mechanism by subclassing from + ACE_Message_Queue. Thanks to Eric Newton for + this suggestion. + + * ace/Timer_List_T.cpp (ACE_Timer_List_Iterator_T): Changed + listParam to timer_list to keep programming style consistent... + +Thu Sep 25 17:06:42 1997 Steve Huston + + * ace/OS.i - ACE_OS::cond_timedwait - HP's threads return + EAGAIN on timeout from pthread_cond_timedwait, so adjust that + to ETIME. + + * tests/SOCK_Connector_Test.cpp - will now try to find another + host to run the connect to. Won't try on Win32 or VxWorks + though. + +Thu Sep 25 15:25:53 1997 David L. Levine + + * ace/Object_Manager.cpp,OS.cpp: moved socket_init to Object_Manager + ctor and socket_fini to Object_Manager dtor, to be sure that + WinSock gets initialized early and closed late. + + * ace/SOCK.{h,cpp}: removed dummy_ static now that the + Object_Manager initializes WinSock. + + No, I'm not a Win32 wizard all of the sudden. Thanks to + Irfan and Nanbor for directing these changes. + + * tests/run_tests.vxworks: commented out tests that don't run + productively on VxWorks: SV_Shared_Memory_Test, + Reactor_Exceptions_Test, SPIPE_Test, and UPIPE_SAP_Test. + +Thu Sep 25 03:50:27 1997 + + * ace/OS.i (thr_getspecific): Must restore errno if no errors have + occured. + + * ace/Log_Msg.cpp (close): Must close the message queue *before* + destruction since there is no destructor for the queue. + + * netsvcs/lib/Client_Logging_Handler.cpp (fini): fini must close + and unregister the acceptor. Closing the socket is simply not + enough. + +Thu Sep 25 01:39:47 1997 Nanbor Wang + + * ace/Containers.{i,cpp}: Commented out all ACE_TRACE macros in + ACE_Unbounded_Queue so that they won't cause SIGSEGV when we + turn the tracing on. Unbounded_Queue is used in Object_Manager + which must be initialize before most of other objects. + +Wed Sep 24 23:37:19 1997 Nanbor Wang + + * ace/OS.i (thr_getspecific): On NT, added check whether + ::GetLastError() is NO_ERROR when ::TlsGetValue() return 0. + +Wed Sep 24 13:37:02 1997 + + * ace/config-win32-common.h (ACE_LACKS_FORK): Added in macro to + distinguish between ACE_LACKS_FORK and ACE_LACKS_EXEC. Also + updated config-chorus.h, config-vxworks-ghs-1.8.h, and + config-vxworks5.x-g++.h. + + * ace/OS.h (ACE_WIN32CALL_RETURN && ACE_WIN32CALL): Added new + macros to distinguish between Win32 calls that set GetLastError + and those that set errno. Also updated ACE_OSCALL_RETURN and + ACE_OSCALL such that they do not set errno to GetLastError. This + is because these calls automatically set errno. + + Updates OS.* files to reflect these changes. + + * ace/SOCK_Acceptor.cpp (shared_accept): Make sure to reset the + event association inherited by the new handle. + + * ace/WFMO_Reactor.i (unbind): Added a check for invalid handles + being passed in for removals. + +Wed Sep 24 10:34:29 1997 Carlos O'Ryan + + * ace/OS.h: + Under HP-UX and g++ must be included for dynamic loading, + not ; thanks to Warren Thompson (wthompson@altaira.com) + for helping us with this one. + +Wed Sep 24 09:36:21 1997 David L. Levine + + * ace/Managed_Object.{h,i},Object_Manager.{h,cpp}: removed + ACE_Managed_Object get_object () interface. It wasn't + used anywhere; it was originally intended to support preallocated + objects but turned out to not be necessary. I think that it would + be more useful to make it possible to instantiate + ACE_Managed_Object instead, and have it implicitly register + with the ACE_Object_Manager. + + * ace/Timer_List_T.cpp (ACE_Timer_List_Iterator_T): + changed name of "list" argument ot "listParam" to resolve name + conflict with STL. Thanks to Brian Mendel for reporting this. + + * tests/run_tests.check: print out filename with error messages. + +Tue Sep 23 17:11:44 1997 Carlos O'Ryan + + * ace/config-hpux-10.x-g++.h: + Added A ACE_LACKS_TIMESPEC_T, thanks to Warren Thompson + (wthompson@altaira.com) for this one. + + * include/makeinclude/platform_hpux_gcc.GNU: + Added a -D_REENTRANT define, to enable reentrant methods, thanks + to Warren Thompson (wthompson@altaira.com) and Steve Huston + (shuston@riverace.com) for pointing out this. + + * ace/config-hpux-10.x.h: + Added an small comment to clarify that DCE/threads must be + installed if threading is wanted, they are an optional product + for HP-UX. + +Tue Sep 23 10:13:57 1997 David L. Levine + + * ace/Select_Reactor.cpp: added #include of ace/Thread.h. + Thanks to Vladimir Schipunov for + reporting this. + + * ace/Object_Manager.cpp: added #include of ace/Malloc.h. + Thanks to Vladimir Schipunov for + reporting this. + + * ace/config-aix-4.1.x.h: added ACE_HAS_PTHREAD_T and + ACE_HAS_BROKEN_EXPLICIT_TEMPLATE_DESTRUCTOR #defines. + Thanks to Vladimir Schipunov for + reporting the build problem on AIX 4.1, and to + Torbjorn Lindgren for providing these fixes. + + * ace/Token_Manager.{h,cpp},Object_Manager.{h,cpp}: + preallocate ACE_Token_Manager creation lock. + + * ace/Object_Manager.cpp: use ACE_Cleanup_Adapter + for preallocated arrays. + +Mon Sep 22 16:51:44 1997 + + * ace/OS.i (open): Changed code so that (_O_CREAT | _O_TRUNC) + means CREATE_ALWAYS. Thanks to Dave Brackman + (dbrackma@OhioEE.com) for pointing this out. + +Mon Sep 22 11:01:28 1997 Steve Huston + + * tests/SOCK_Connector_Test.cpp, Makefile, run_tests.sh - added new + test to exercise ACE_SOCK_Connector focusing on fail conditions. + +Mon Sep 22 07:11:21 1997 David L. Levine + + * ace/Message_Block.cpp (clone): check this block's cont () + instead of the new block's cont_ when cloning the continuation + messages. Thanks to Eric Newton for tracking + down this problem with failing to clone continuation blocks, + and for providing the fix. + + * ace/OS.{h,i} (ACE_U_LongLong): added operator!=, and made args + const to ctor, operator/, hi, and lo member functions. + + * ace/Managed_Object.[hi]: renamed ACE_Managed_Cleanup to + ACE_Cleanup_Adapter because it doesn't implicitly register + itself with the ACE_Object_Manager. + + * ace/ACE.cpp: moved ACE_Object_Manager_Destroyer to + Object_Manager.cpp because the ACE_Object_Manager should + always be linked into executables now, even if libACE is + statically linked. + + * ace/Filecache.{h,cpp},Signal.{h,cpp} preallocate locks for + Filecache and Signal in ACE_Object_Manager. + + * ace/Object_Manager.{h,cpp}: 1) renamed ACE_Managed_Cleanup to + ACE_Cleanup_Adapter. 2) Moved ACE_Object_Manager_Destroyer from + ACE.cpp to Object_Manager.cpp. 3) Added Filecache and Signal locks. + + * ace/Singleton.*: removed instance (TYPE *) member function because + it wasn't being used. And, it allows us to store the contained + instance_ as an object instead of a pointer, saving a dynamic + memory allocation on construction. + + * include/makeinclude/platform_vxworks5.x_g++.GNU: added $(MUNCHED) + to PRELINK, to allow applications to add libraries or object + files to be munched. + + * ace/stdcpp.h: stdarg.h must be #included before stdio.h on LynxOS. + +Sat Sep 20 17:32:23 1997 David L. Levine + + * ace/Object_Manager.{h,cpp},Managed_Object.*, + CORBA_Handler.{h,cpp},Dump.{h,cpp},Log_Msg.cpp,OS.cpp + revised ACE_Object_Manager interface for preallocated objects. + + Also, added documentation of ACE_Object_Manager interface to + Object_Manager.h and Managed_Object.h. + + * ace/CORBA_Handler.cpp,Dump.cpp,OS.cpp: use ACE_MT with + preallocated locks. + + * include/makeinclude/platform_*.GNU,wrapper_macros.GNU: + moved -O out of wrapper_macros.GNU and into each platform + file's OC[C]FLAGS to support "optimize" make flag. + + I moved -O and similar compile flags out of CFLAGS and/or + CCFLAGS and into OCFLAGS and/or OCCFLAGS. This allows the + ACE make system to support the "optimize" flag. It operates + similar to the "debug" flag, i.e., you can set "optimize=1" + or "optimize=0" in your platform_macros.GNU file to enable + or disable optimization. You can use the same syntax to + get the same effect from the "make" command line, e.g., + "make optimize=1 debug=0". + + I added optimize=1 to platform_*.GNU files that had -O, etc., + in their C[C]FLAGS. Therefore, there should be no net effect + from this change on any platform. + + * include/makeinclude/wrapper_macros.GNU: + I _removed_ the disabling of "debug" when "optimize=1" is + enabled. This _will_ have a net effect: if you were relying + on "debug" to be disabled when you enabled "optimize=1", + you'll be surprised. The change supports platforms that + allow "debug" and "optimize" simultaneously. + + Because I had added the disabling of "debug" recently, + and because "optimize=1" wasn't supported well, if at all, + I'd be suprised if any is actually affected by this change. + +Sat Sep 20 11:47:14 1997 Carlos O'Ryan + + * ace/Timer_Queue_T.cpp: + Changed the return type to , to match its declaration. The + intent was to error error values, which are declared as + throughout ACE. + +Sat Sep 20 08:07:36 1997 David L. Levine + + * ace/OS.i (gethrtime): on Linux only, removed "volatile" qualifier + from declaration of local variable "now". I don't think that + it's necessary. It causes compilation failure with g++ because + the ACE_U_LongLong copy constructor won't take a volatile + argument. Thanks to Sandro Doro for + tracking down this problem. + + * tests/Time_Value_Test.cpp: reverted to test ACE_U_LongLong on + all platforms except WIN32. It works properly on Linux with + the removal of volatile from ACE_OS::gethrtime's "now". Thanks + to Sandro Doro for figuring this one + out. + +Fri Sep 19 18:49:50 1997 Carlos O'Ryan + + * ace/config-irix6.x-g++.h: + * include/makeinclude/platform_irix6.x_g++.GNU: + Added support for IRIX 6.x w/gcc, thanks to Celeste E. Copeland + (celeste@altaira.com) for this. + +Thu Sep 18 19:33:02 1997 Carlos O'Ryan + + * Douglas added the following changes while going through the + Async_Timer_Queue. + + * ace/Timer_Queue_T.h: Factored out the code for handling + ualarm(). + + * ace/Timer_Queue_T.cpp (handle_signal): Cleanedup the logic + for rescheduling a ualarm() after expiring a timer. + + * tests/Async_Timer_Queue_Test.cpp (signal_handler): Changed the + use of ACE_DEBUG to ACE_ERROR to ensure that the call doesn't + magically disappear if ACE_NDEBUG is enabled. + +Fri Sep 19 18:05:48 1997 Douglas C. Schmidt + + * ace/Log_Msg.cpp (log): Changed the send() to a send_n() so that + all the data gets written... + +Fri Sep 19 14:52:53 1997 Nanbor Wang + + * netsvcs/lib/Client_Logging_Handler.cpp (get_handle): Can't use + ACE_ERROR_RETURN here because ACE_HANDLE is a void* on NT, not + int. + + * examples/Reactor/Misc: Added reactors.dsp signals_1.dsp + signals_2.dsp. + + * ace/OS.cpp (thr_exit): Commented out the call to + ACE_TSS_Cleanup::exit () because ACE_OS::thr_exit is actually + called from ACE_TSS_Cleanup::exit (). + +Fri Sep 19 12:50:37 1997 David L. Levine + + * ACE-INSTALL*,ace/README: added more documentation of requirement + for explicit main (int, char *[]) arguments and int return type + with ACE_HAS_NONSTATIC_OBJECT_MANAGER (on VxWorks). + +Thu Sep 18 22:45:09 1997 Douglas C. Schmidt + + * netsvcs/lib/Client_Logging_Handler.cpp (close): Fixed a + typo: it's output_ not outout_. Thanks to David for + pointing this out. + + * netsvcs/lib/Client_Logging_Handler.cpp: Make sure to clean up + all our resources (e.g., acceptor-mode and data-mode sockets) + when we close down. + + * netsvcs/servers/main.cpp (main): Restored the entire contents of + main(). + + * tests/Semaphore_Test.cpp: Updated the test to use a temporary + ACE_Time_Value variable that is passed to + ACE_Semaphore::acquire() so that we don't have problems with + reference anachronisms... Thanks to David Levine for reporting + this. + + * ace/Log_Msg.cpp: Changed over to using ACE_SPIPEs for the + logging mechanism rather than ACE_FIFOs to conform to the + changes to Client_Logging_Handler. + + * netsvcs/lib/Client_Logging_Handler.cpp: + Completely rewrote the Client Logging Daemon so that it uses + ACE_SPIPEs by default, rather than ACE_FIFOs. This is more + portable and makes it easier to write a generic client logging + daemon... If a platform doesn't support ACE_SPIPEs, then we + revert to using sockets. + +Thu Sep 18 21:56:33 1997 Nanbor Wang + + * ace/OS.cpp (ACE_TSS_Cleanup::exit): Masked out codes that relate + to freeing TSS keys and remove key entries from TSS cleanup + table. I removed it here to avoid race condition. + (ACE_TSS_Cleanup::free_all_key_left): Added this function to + free all left over TSS keys and remove them from TSS cleanup + table when the program exits. It is only called from + ACE_OS::cleanup_tss. + (ACE_OS::cleanup_tss): Added call to + ACE_TSS_Cleanup::free_all_key_left when ACE_WIN32 or + ACE_HAS_TSS_EMULATION are defined. + +Thu Sep 18 16:30:24 1997 David L. Levine + + * ace/Semaphore_Test: protected declarations of test_timeout_count + and timeouts because they're not used on Solaris. + + * netsvcs/lib/Client_Logging_Handler.cpp: added template + instantiations. + +Thu Sep 18 09:04:40 1997 + + * ace/Dynamic: Changed the way ACE_Dynamic worked. Instead of + keeping the "this" pointer of the object in question, we are now + simply keeping a flag that indicates whether the object was + dynamically created. The trick to this approach is to make sure + to reset the flag in the constructor. The "this" pointer + approach was broken when used with multiple inheritance, because + of "shearing" of the "this" pointer to get to the base + Svc_Handler class. + +Thu Sep 18 01:12:36 1997 Douglas C. Schmidt + + * ACE version 4.3.8, released Thu Sep 18 01:12:36 1997. + +Wed Sep 17 22:47:20 1997 Douglas C. Schmidt + + * ace/ACE: Added two new varargs methods for send() and recv(). + These are modeled after the ones that are in, e.g., ACE_SOCK_IO. + + * ace/Log_Msg.cpp (open): In the UNICODE version the compiler + complains about mixed wchar/char usage in Log_Msg.cpp: + + Log_Msg.cpp(468) : error C2665: 'ACE_INET_Addr::ACE_INET_Addr' : + none of the 8 overloads can convert parameter 1 + from type 'const unsigned short *' + + I fixed it modifing the connect() call from + + status = con.connect (*ACE_Log_Msg_message_queue, + ACE_INET_Addr (logger_key)); + + to + + status = con.connect (*ACE_Log_Msg_message_queue, + ACE_INET_Addr + (ACE_MULTIBYTE_STRING(logger_key))); + + Thanks to Dieter Quehl for + reporting this. + + * ace/SV_Semaphore_Simple.h: By default, we want the flags to + perform a SEM_UNDO. Thanks to Sandro Doro + for reporting this. + + * tests/Makefile (BIN): Added Semaphore_Test.cpp to the Makefile. + Thanks to Sandro Doro for reporting + this. + + * tests/Async_Timer_Queue_Test.cpp: If you want to print a '\', + you need to make it a \\... Thanks to David for noticing this. + + * apps/JAWS/clients/Blobby/Blob_Handler.h: There was a missing + #include for "ace/SOCK_Stream.h". + + * netsvcs/lib/Client_Logging_Handler: Reimplemented this service + so that it uses sockets on Win32 to receive logging messages + from clients. + + * ace/Log_Msg.cpp: Enhanced ACE_Log_Msg::log() so that it now uses + sockets on Win32 platforms to work around the lack of FIFOs. + + * ace/Log_Record.h: Revised the field layout of the ACE_Log_Record + so that the length field comes first. This is necessary for the + framing mechanisms used throughout ACE in various + configurations. + +Wed Sep 17 15:17:38 1997 James C Hu + + * ace/Filecache.cpp: ACE_Filecache::finish should check to see if + the file passed in is NULL before attempting to grab the + associated hash lock. Reported by Samuel Melamed + . + +Wed Sep 17 13:51:25 1997 Carlos O'Ryan + + * bin/auto_compile: + I setup autoflush on the logfile, it makes debugging and non + crontab usage a bit easier. + +Wed Sep 17 12:59:34 1997 + + * ace/Local_Name_Space_T.cpp: Fixed warnings caused by SEH macros. + +Wed Sep 17 01:07:40 1997 Douglas C. Schmidt + + * ACE version 4.3.7, released Wed Sep 17 01:07:40 1997. + +Tue Sep 16 23:34:36 1997 Douglas C. Schmidt + + * netsvcs/servers/main.cpp (main): The use of braces was incorrect + so that some services were being prematurely closed... + + * ace: Added a new flag called ACE_LACKS_FIFO to distinguish the + (lack of) features on Win32... + + * ace/Timer_Queue_T: Added an expire() wrapper for the + Async_Timer_Queue_Adapter. + + * ace/OS: Added a wrapper for strpbrk() and wcspbrk(). Thanks to + Bob Olson and Irfan for pointing out + the need for this. + +Tue Sep 16 18:03:58 1997 Carlos O'Ryan + + * bin/auto_compile: + It wouldn't report an error when run_tests.sh scream "FAILED", + now it does. + +Tue Sep 16 08:30:28 1997 Steve Huston + + * ace/OS.i: Changed a couple of ACE_UNUSED(arg) to ACE_UNUSED_ARG(arg) + +Mon Sep 15 12:08:38 1997 + + * ace/Reactor (register_handler): Originally this interface was + available for all platforms, but because ACE_HANDLE is an int on + non-Win32 platforms, compilers are not able to tell the + difference between + register_handler(ACE_Event_Handler*,ACE_Reactor_Mask) and + register_handler(ACE_Event_Handler*,ACE_HANDLE). Therefore, we + have restricted this method to Win32 only. + + * ace/WFMO_Reactor.h: Removed non-Win32 version of the + WFMO_Reactor. This is no longer required in the new scheme. + + * ace/XtReactor: + + Added remove_handler_i(const ACE_Handle_Set &,ACE_Reactor_Mask) + to make the compiler happy. + + Also changed ACE_Reactor_Handle_Set to ACE_Select_Reactor_Handle_Set. + + * ace/Select_Reactor.cpp (ACE_Select_Reactor_Token): Added set/get + select_reactor methods. + + * ace/OS.h (ACE_SEH_TRY): Changed ACE_SEH_TRY from nothing to + "if(1)" on non-Win32 platforms. This should stop some compilers + from complaining about unreachable code. + +Mon Sep 15 11:37:49 1997 Carlos O'Ryan + + * include/makeinclude/platform_hpux.GNU: + Added -D_REENTRANT to enable the _r functions. + +Mon Sep 15 09:40:57 1997 Carlos O'Ryan + + * bin/auto_compile: + Enabled the shared_libs_only flags to speed up compilations (and + reduce disk space usage). + +Sun Sep 14 22:36:17 1997 + + * ace/Select_Reactor.h: Added a no-op constructor for + ACE_Select_Reactor_Token to make the compiler happy. + +Sun Sep 14 21:02:31 1997 David L. Levine + + * all Makefiles: ran "make depend" to update all ACE Makefiles. + + * include/makeinclude/platform_irix6.x-32_sgic++.GNU, + platform_tandem.GNU: added debug = 1, to disable ACE_NDEBUG. + + * ace/Acceptor.cpp: added #include of ace/Handle_Set.h so that + it will compile on g++/Solaris. + + * ace/Managed_Object.h: added #include of ace/OS.h because + ACE_Cleanup class is used. + + * ace/Managed_Object.cpp: only #include ace/Synch.h if + ACE_TEMPLATES_REQUIRE_SOURCE is not defined. The #include + appears to be necessary with Digital Unix. But, it causes + inline functions warnings with g++, both with inlining + enabled and disabled. Circular #includes are evil :-) + + * ace/Select_Reactor.h: removed "," at end of DEFAULT_SIZE + enum definition. + + * ace/Select_Reactor.i (register_handler): added ACE_UNUSED_ARGS. + + * ace/Select_Reactor.i: moved ACE_Select_Reactor::size () after + ACE_Select_Reactor_Handler_Repository::size () to prevent use + before definition. + + * ace/Select_Reactor.cpp: added template instantiation. + + * ace/Svc_Conf_y.cpp: commented out unused args and wrapped + assignments in "if" conditionals to avoid g++ warnings. + + * ace/Token_Manager.h: inserting missing "public" access control + specifier for ACE_Cleanup. + + * ace/OS.{h,cpp} (gethrtime, Linux only): inlined and added Alpha + support. + + * ace/config-linux*.h: only define ACE_HAS_PENTIUM if i386 is defined. + +Sun Sep 14 10:35:57 1997 + + * ace/Reactor: The Reactor classes (ACE_Reactor and ACE_ReactorEx) + have changed. The motivation for this change was to allow users + to program abstractly and use the most efficient implementation + available on their platform. At the same time, we wanted to + make the changes required by the users kept to a minimal. + + Here is a layout of the new Reactor hierarchy in ACE (an example + of the GOF Bridge Pattern). Thanks to Thomas Jordan + (Thomas_Jordan@deluxedata.com) for suggesting this new design. + + + Reactor -----> Reactor_Impl + ^ + | + -------------------- + ^ ^ + | | + Select_Reactor WFMO_Reactor + + Reactor: + + The Reactor class now becomes an interface class that contains + a pointer to an implementation class. All methods of the + Reactor class forward all calls to the appropriate + implementation class. Users can pass in their own + implementation class. If an implementation class is not + supplied at creation time, the following default rules apply: + + On non-Win32 platforms: An instance of the Select_Reactor + class will be created and used as the implementation. + + On Win32 platforms: An instance of the WFMO_Reactor class will + be created and used as the implementation. This default + behavior can be overwritten at compile-time by setting the + ACE_USE_SELECT_REACTOR_FOR_REACTOR_IMPL flag. In this case, an + instance of the Select_Reactor class will be created and used + as the implementation. + + Reactor_Impl: + + Reactor_Impl is an abstract class (i.e., the Bridge). + Select_Reactor and WFMO_Reactor inherit from this class. + + Select_Reactor: + + Previously known as the Reactor class. This class implements + the Reactor_Impl interface by using the select() system + call. This implementation is available on all platforms + (including Win32). + + WFMO_Reactor: + + WFMO (Wait For Multiple Objects) Reactor, previously known as + the ReactorEx class. This class implements the Reactor_Impl + interface by using the WaitForMultipleObjects() system call. + This implementation is currently only available on Win32 + platforms. + + Code changes for users: + + The higher authorities of ACE have decided that ReactorEx was + a "goofy" name and made little sense in the new hierarchy. + Therefore users using the old ReactorEx will have to change + over to start using the Reactor class (and make sure that the + implementation class being used is WFMO_Reactor). + + Also users that have extended Reactor or ReactorEx must + now subclass from Select_Reactor or WFMO_Reactor, + respectively. + + * ace/ReactorEx: + + The ReactorEx interface has been extended to be identical to the + Reactor interface. Some of these new operations will not be + supported in this version. However, we will have interface + compatability at this point. This allows the creation of the new + Reactor hierarchy in ACE. + + Removed all static (singleton) methods from ReactorEx. These are + not necessary anymore since ReactorEx will become an + implementation class. Reactor will take over this functionality. + + Changed methods names from resume_all to resume_handlers and + suspend_all to suspend_handlers. This increases the similarity + between ReactorEx and Reactor. + + Add a lock_adapter so that we can return an ACE_Lock form of our + internal lock. + + Added signal handling capabilities to ReactorEx. + + Added handler, requeue_position, mask_ops, and ready_ops + operations. However, they are not supported in this + version. They are mostly here for interface compatibility with + Reactor. + + Added a size() accessor that returns the current size of the + ReactorEx's internal descriptor table. + + Added an initialized() accessor that returns true if ReactorEx + has been successfully initialized, else false. + + * ace/Reactor: + + The Reactor interface has been extended to be identical to the + ReactorEx interface. Some of these new operations will not be + supported in this version. However, we will have interface + compatability at this point. This allows the creation of the new + Reactor hierarchy in ACE. + + Added resume_handler(ACE_Handle_Set &) and + suspend_handler(ACE_Handle_Set &) to the Reactor. This + increases the similarity between ReactorEx and Reactor. + + Add a lock_adapter so that we can return an ACE_Lock form of our + internal lock. This changes the signature of the return type + from ACE_Reactor_Lock to ACE_Lock. + + Added a size() accessor that returns the current size of the + Reactor's internal descriptor table. + + Added wakeup_all_thread() operation. Currently it just does a + notify. + + Added alertable_handle_events() operation. Currently it just + calls handle_events(). + + Added register_handler (that take event handles) operations. + However, they are not supported in this version. They are mostly + here for interface compatibility with ReactorEx. + + * ace/XtReactor: Now inherits from Select_Reactor instead of + Reactor. + + * ace/Timer_Queue_T.h: Removed the inclusion of Time_Value.h. This + file does not exist anymore + + * ace/Synch_T (ACE_Lock_Adapter): Changed the implementation of + the adapter such that the user is allowed to (optionally) pass + in the locking mechanism. + + * ace/Strategies: Removed ACE_ReactorEx_Notification_Strategy. + + * ace/Service_Config: Updated Service_Config so that all ReactorEx + and Proactor methods are removed. ReactorEx does not exist any + longer and Proactor methods are available as statics methods on + the Proactor class. + + * ace/OS.h (ACE_DEFAULT_SELECT_REACTOR_SIZE): Changed + ACE_DEFAULT_REACTOR_SIZE to ACE_DEFAULT_SELECT_REACTOR_SIZE. + There is no default size dictated by the Reactor class anymore. + + * ace/Local_Tokens,Token: Added new methods: acquire_read, + acquire_write, tryacquire_read, tryacquire_write. These methods + allow the Tokens to be used by the ACE_Lock_Adapter class. + + * ace/Handle_Set.h (MAXSIZE): Changed ACE_DEFAULT_REACTOR_SIZE to + ACE_DEFAULT_SELECT_REACTOR_SIZE. There is no default size + dictated by the Reactor class anymore. + + * ace/Event_Handler: Removed the Proactor and ReactorEx pointers + from Event_Handler. The Proactor has its own event handler + (ACE_Handler), and the ReactorEx does not exist anymore. + + * ace/Proactor: + + Changed Proactor to work with the new Reactor. + + Updated Proactor to bring it upto date with the recent changes + to the Timer_Queue. + + * tests: + + Removed the ACE_NEW_THREAD macro. With the new thread adapter, + the log stream for the new thread will automatically be set to + the creator thread's stream. Therefore, this macro is not + needed. + + Removed the inclusion of Service_Config.h. All tests are now + accessing the singletons that are supported by the class directly. + + * examples/Reactor/Proactor: Updated examples to use and access + the new Reactor class instead of the old ReactorEx. + + * examples/Reactor/ReactorEx: Updated examples to use and access + the new Reactor class instead of the old ReactorEx. + +Sun Sep 14 09:50:22 1997 Douglas C. Schmidt + + * ace/Singleton.i (ACE_Singleton): Moved the definition of the + ACE_Singleton default constructor into the *.i file. In + general, it's not a good idea to put definitions in *.h files. + + * tests/test_config.h: Improved the #undef scheme for ACE_NDEBUG. + +Sat Sep 13 23:51:55 1997 Nanbor Wang + + * ace/ACE_Library.{mak,mdp}: Removed Service_Record.cpp and added + Service_Type.cpp in project file. + + * ace/: Removed ace.{mak,mdp} and replaced them with + ACE_Library.{mak,mdp}. MSVC 4.2 insists to change the release + version DLL from our original setting "ace.{dll,lib}" to "ACE + dynamic Library.{dll,lib}". This is so far the only known + method to get around this. + + * netsvcs/servers/servers.{dsw,dsp}: Changed the output filenames + of debug version from maind.exe to main.exe. + + * netsvcs/lib/netsvcs.{dsw,dsp}: Changed the output filenames of + debug version from netsvcsd.{dll,lib} to netsvcs.{dll,lib}. + + * ace/ace.dsw: + * ace/ace_{dll,lib}.dsp: Removed Service_Record.cpp and added + Service_Type.cpp. + + * ace/Log_Msg.cpp (open): Fixed a typo. + + * ace/Reactor.cpp: Fixed a typo. + +Sat Sep 13 17:23:22 1997 Douglas C. Schmidt + + * ACE version 4.3.6, released Sat Sep 13 17:23:22 1997. + +Sat Sep 13 12:11:50 1997 Douglas C. Schmidt + + * tests: #include "test_config.h" before all the other files so + that we always have the ACE_ASSERT enabled... Thanks to Carlos + for noticing this. + + * ace/Reactor.cpp: Added Arturo's improvements for suspending and + resuming Event_Handlers. + + * tests/Reactors_Test.cpp: As a result of the new changes to + ACE_Thread_Manager, the Reactors_Test now seems to be working + fine. + + * ace/Thread_Manager.cpp (append_thr): When we append a new + Thr_Descriptor make sure to zero-out the cleanup_info_ fields + since otherwise horrible things will happen... + + * ace/Reactor: Added a new ACE_Reactor_Handle_Set called + suspend_set_ and updated the suspend_i() and resume_i() method + to use this set to store the ready bits that are enabled when we + suspend and resume and Event_Handler, respectively. Thanks to + Arturo for this suggestion. + + * tests/TSS_Test.cpp (main): Had to move the allocation and + deletion of TSS_Error into the ACE_HAS_THREADS section since + otherwise this test doesn't work when threading is disabled. + + * tests/Thread_Manager_Test.cpp: Move the template specialization + inside of the ACE_HAS_THREADS macro since otherwise this test + doesn't work when threading is disabled. + + * ace/Thread_Manager.cpp: Arrgh! Must initialize the cleanup_info + fields to 0 in the constructor for ACE_Thread_Descriptor! This + should fix a nasty bug... + + * tests/Async_Timer_Queue_Test.cpp: Continued to improve the + documentation in the test of the ACE_Async_Timer_Queue_Adapter. + + * ace/Timer_Queue_T.cpp (schedule): Oops, must pass &this->mask_ + to ACE_Sig_Set rather than this->mask_. + + * ace/Object_Manager.cpp: Changed #include + "ace/Service_Repository.h" to #include "ace/Service_Config.h" + since we now call ACE_Service_Config::close(). + + * ace/Service_Types: Removed a nasty circular dependency by simply + having each of the ACE_Service_Type_Impl subclasses take const + void *'s rather than their specific type (i.e., ACE_Stream or + ACE_Module, etc.). This turns out not to be a problem since we + treated them as const void *'s internally anyhow... + + * ace/Strategies_T.cpp: Fixed a bug in ACE_DLL_Strategy: + + ACE_Service_Type_Impl stp = new ACE_Service_Object_Type (svc_handler, this->svc_name_); + + should be + + ACE_Service_Type_Impl *stp = new ACE_Service_Object_Type (svc_handler, this->svc_name_) + + I wonder how this ever compiled?! + +Fri Sep 12 13:26:50 1997 Douglas C. Schmidt + + * ace/Mem_Map.cpp (close): Removed the following code in the + close() method that appears to be redundant with the code in + unmap(): + + if (this->file_mapping_ != this->handle_ + && this->file_mapping_ != ACE_INVALID_HANDLE) + ACE_OS::close (this->file_mapping_); + + Also cleaned up the close() code so that it doesn't try to close + the handle multiple times, even if close() is called more than + once. Thanks to Beged-Dov for reporting + this. + + * tests/Async_Timer_Queue_Test.cpp: Improved the structure of the + program and finished implementing the new feature that makes it + possible to avoid blocking SIGQUIT. + + * ace/Timer_Queue_T: Added support for an ACE_Sig_Set that can be + passed into the constructor of ACE_Async_Timer_Queue_Adapter. + This will enable us to selectively block only certain signals. + + * ace/Signal: Added a new constructor for ACE_Sig_Set that takes + ACE_Sig_Set * and also improved the documentation of the + constructor interfaces. + +Fri Sep 12 13:46:04 1997 David L. Levine + + * ace/OS.[hi],Log_Msg.h,config-lynxos.h, + include/makeinclude/platform_lynxos.GNU: added LynxOS port, + provided by Dave Mayerhoefer . Note how few + files were affected. What's even more amazing is the very small + number, 8, of very minor code changes to OS.[hi] and Log_Msg.h. + This is a tribute to the maturity of + + + * ace/Service_Object.h: Moved the ACE_Service_Type class into the + Service_Object.h file since this is "publically" visible to + applications. + + * ace/Service_Types.h: Improved the documentation of the + ACE_Service_Type subclass implementations. + + * ace/Service_Types: Changed the name next_ to link_ to be + consistent with the accessor name. + + * ace: Renamed Service_Record.{h,i,cpp} to Service_Types.{h,i,cpp} + to reflect the recent change in names. + + * ace/Service_Object.h: Renamed ACE_Service_Type to + ACE_Service_Type_Impl and ACE_Service_Record to ACE_Service_Type + in order to emphasize the use of the Bridge pattern. Thanks to + Eric Newton for motivating this. + + * ace/Svc_Conf.y: Removed the warning about Service name being + different from Module name. I'm not sure why this was + complaining in the first place. Thanks to Eric Newton for + pointing this out. + + * netsvcs/lib/README: The entry point for the time service client + is _make_ACE_TS_Clerk_Processor and not + _make_ACE_TS_Clerk_Connector. Thanks to Ivan for pointing this + out. + +Thu Sep 11 10:59:12 1997 + + * ace/Connector.cpp (handle_output): Increased the idle time + before we check the status of a non-blocking connection from 1 + ms to 35 ms when ACE_HAS_BROKEN_NON_BLOCKING_CONNECTS is + defined (i.e., Win32.) This is very odd but wait a whole lot + longer seems to solve the problem. + + * ace/Log_Msg.cpp (close): On Win32, ACE_Log_Msg_Manager needs to + delete main thread's ACE_Log_Msg instance also. + +Thu Sep 11 10:37:00 1997 Carlos O'Ryan + + * ace/ACE.cpp: + * ace/INET_Addr.cpp: + * ace/Log_Msg.h: + * ace/Memory_Pool.h: + * ace/OS.h: + * ace/OS.i: + * ace/Parse_Node.cpp: + * ace/Strategies_T.h: + * bin/clone.cpp: + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.h: + I checked the use of MAXNAMELEN vs. MAXPATHLEN; all buffers + intended to keep full filenames should have at least + MAXPATHLEN+1 chars. + Only buffers that will keep basenames (without any directories) + should have MAXNAMELEN+1 bytes. + I also added a new macro ACE_MAX_FULLY_QUALIFIED_NAME_LEN which + is the maximum number of characters for a fully qualified + internet hostname. + There remain one obscure usage of these macros in ace/Malloc.h + and Local_Naming_Space_T.{h,cpp}, but a quick fix broke + something, I will try again soon. + +Thu Sep 11 08:52:36 1997 David L. Levine + + * ace/OS.cpp (thr_key_detach): check to see if the + ACE_TSS_Cleanup lock has been constructed, and not + destructed, before attempting to use it. Statics are evil. + + * ace/Log_Msg.cpp (~ACE_Log_Msg): release guard before calling + ACE_Log_Msg_Manager::close (), because that deletes the lock. + + * ace/Managed_Object.{h,cpp} (get_object): changed type of "id" + to int because it will often be passed an enum. Pass "id" by + value to get_object (int id), for preallocated objects. + + * ace/Object_Manager.{h,cpp}: added ACE_LOG_MSG_INSTANCE_LOCK, + and ACE_PREALLOCATE_OBJECT macro. + + * include/makeinclude/wrapper_macros.GNU: ignore shared_libs_only + in modules that only build a static lib. Fixed shared_libs_only + by removing OBJDIRS, unless BIN is undefined, and VDIR. Removed + SHOBJ from both shared_libs_only and static_libs_only because + they're unused. + + * include/makeinclude/rules.local.GNU: added lib*.*_pure* to + clean.local target, to remove Purified libraries. + + * examples/Connection/non_blocking/Makefile, + examples/Service_Configurator/IPC-tests/server/Makefile: + removed -L./ from LDFLAGS because it's redundant: + wrapper_macros.GNU adds it. + +Wed Sep 10 22:58:10 1997 Douglas C. Schmidt + + * ace/Thread_Manager.cpp (exit): Reordered the code so that it + will keep the lock held long enough to copy out the thread exit + hook but will release the lock before calling this hook. + +Wed Sep 10 11:04:08 1997 David L. Levine + + * ace/config-sunos5.5-g++.h: added + ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS. + + * include/makeinclude/wrapper_macros.GNU: added PIC= with + static_libs_only, and added list of supported make flags. + + * include/makeinclude/wrapper_macros.GNU: added support for + debug=0, etc. Also, made debug, optimize, and profile + flags independent instead of exclusive. Thanks to Per + Andersson for suggesting this. + + * include/makeinclude/platform_*.GNU: replaced "CFLAGS += + $(DCFLAGS) with debug=1 so that debugging can easily be + disabled. Thanks to Per Andersson and James CE Johnson + for noticing this deficiency. + + * include/makeinclude/platform_vxworks5.x_g++.GNU: removed + "-I. -I$(ACE_ROOT)" from CFLAGS because it duplicates the + INCLDIRS set in wrapper_root.GNU. + +Wed Sep 10 10:35:06 1997 David L. Levine + + * ACE version 4.3.5, released Wed Sep 10 10:35:06 1997. + +Wed Sep 10 10:25:41 1997 David L. Levine + + * ace/Thread_Manager.cpp (exit): copy the thread exit hook before + releasing the guard, and call it after releasing the guard. + + * examples/Shared_Malloc/test_malloc.cpp (spawn): added (char *) + cast of slave_name () to avoid compilation warnings on Solaris. + +Wed Sep 10 00:43:04 1997 Nanbor Wang + + * ace/Makefile: Added Managed_Object to template sources. + + * ace/Object_Manager.{h,cpp}: * ace/Managed_Object.{h,cpp}: + Separate ACE_Managed_Object to a new set of file. + +Tue Sep 9 23:41:56 1997 Douglas C. Schmidt + + * tests/Reactors_Test.cpp (main): Check to see if wait() returns + -1 and then test to see what's gone wrong! + + * ace/OS.h: Added a "fake" #define for SIGALRM so that programs + will *compile* on platforms like Chorus. Thanks to Wei Chiang + for reporting this. + + * examples/Shared_Malloc/test_malloc.cpp (spawn): HP/UX doesn't + seem to like const char *const argv[] being given an initializer + list. I've fixed this to be just plain ol' char *argv[]. + Thanks to Sandro Doro for reporting this. + + * ace/Handle_Set.i (clr_bit): Replaced SOCKET with ACE_SOCKET so + this will compile on UNIX. + +Tue Sep 09 17:16:21 1997 + + * ace/Proactor: Updated Proactor to bring it upto date with the + recent changes to the Timer_Queue. + + * ace/Handle_Set.i (clr_bit and set_bit): These methods now change + the size_ member of the class on Win32. This is necessary since + the ACE_Handle_Set::operator fd_set *() accessor has been + optimized for size_ == 0. + +Tue Sep 09 09:14:07 1997 David L. Levine + + * ace/OS.cpp (cleanup_tss): On WIN32 and with ACE_HAS_TSS_EMULATION, + delete the ACE_TSS_Cleanup instance instead of registering it for + cleanup via the ACE_Object_Manager's at_exit (). This should allow + applications to use ACE_Log_Msg in their at_exit () hooks. Thanks + to Wei Chiang for reporting this problem. + + * ace/Object_Manager.{h,cpp}: added guard of internal structures. + (dtor): call at_exit hooks before calling cleanup_tss, now that + the ACE_TSS_Cleanup instance is no longer registered for an at_exit + call. (at_exit): set errno instead of returning different values + on error. Added ACE_Managed_Object template class, intended for + use in replacing static instances. + + * ace/Thread_Manager.cpp (exit): release guard before running the + thread exit hooks. This should help avoid deadlocks, in case + one of those hooks needs to operate on the Thread_Manager. + + * ace/CORBA_Handler.{h,cpp},Dump.{h,cpp},Object_Manager.{h,cpp}: + preallocate locks for CORBA_Handler and Dump in ACE_Object_Manager. + Statics are evil. + + * ace/Synch.{h,cpp},OS.cpp,Object_Manager.{h,cpp}: removed + ACE_TSS_Cleanup_Lock and replaced it with a preallocated mutex + in OS.cpp. Thanks to Nanbor for reporting problems at shutdown + with the old ACE_TSS_Cleanup_Lock static instance. + + * include/makeinclude/platform_sunos5_sunc++.GNU: when building + libraries only, don't use CC to create individual .shobj/*.so + files. The .so files are not needed to build libraries, because + libraries are built with -G. (They are needed to avoid upsetting + the ACE make rules, so they're created as links to their + corresponding .o files.) The .so files are still needed when + building executables in order to get all template instantiations. + + * include/makeinclude/platform_sunos5_g++.GNU: removed unused + SOLINK definitions. + +Mon Sep 8 18:38:22 1997 Douglas C. Schmidt + + * tests/Handle_Set_Test.cpp: It is possible for the order to get + the handles (using the iterator) will not agree with insert + order in ACE_Unbounded_Queue. It's best to use + ACE_Unbounded_Set. Thanks to Arturo for this fix. + +Mon Sep 8 17:43:43 1997 Darrell Brunsch + + * ace/Timer_{List,Wheel,Hash,Heap}_T.cpp: The iter() method now + returns a pointer to an iterator that is in a reset state + instead of an unknown one. + +Mon Sep 8 14:05:15 1997 Nanbor Wang + + * ace/ACE.cpp (read_adapter): Removed ACE_Thread_Control object in + this function. This is now taken care of by ACE_Thread_Manager. + (register_stdin_handler): This function no longer uses + ACE_Stdin_Args to pass in thread manager into read_adapter. + + * ace/ACE.h (ACE): Removed class ACE_Stdin_Args, because it is no + longer needed. + +Mon Sep 08 11:49:02 1997 David L. Levine + + * tests/run_tests.sh: moved log file checks out to separate file, + run_tests.check. + + * tests/run_tests.vxworks: added one-button test for VxWorks. + Check it out, Darrell. + + * ace/Filecache.cpp: commented out unused constants [RW]COPY_FLAGS. + +Mon Sep 08 08:26:52 1997 David L. Levine + + * ACE version 4.3.4, released Mon Sep 08 08:26:52 1997. + +Sat Sep 6 10:41:17 1997 Carlos O'Ryan + + * ace/Malloc.h: + sizeof() must be casted to int in ACE_CONTROL_BLOCK_ALIGN_LONGS + otherwise unsigned int arithmetic is used, thus obtaining + unexpected results. + +Sat Sep 06 09:07:02 1997 David L. Levine + + * OS.{h,cpp}: added ACE_Cleanup base class and + ace_cleanup_destroyer adapter. + + * Object_Manager.*: added at_exit () interface for ACE_Cleanup objects. + + * Singleton.{h,cpp},Token_Invariants.{h,cpp},Token_Manager.{h,cpp}: + base on ACE_Cleanup, so that simpler ACE_Object_Manager::at_exit () + can be used. + + * performance-tests/Misc/Makefile: moved $(BIN) files from FILES + to SRC so that they don't get put into libPerf. + +Sat Sep 6 02:36:31 1997 Nanbor Wang + + * tests/test_config.h (set_output): Added openning flag ios::trunc + explicitly if we are not appending to the opening ofstream. + This is required by standard CPP iostream libraries on NT (i.e., + we can't use ios::out alone when ofstream.open a file.) + +Sat Sep 6 00:21:33 1997 Douglas C. Schmidt + + * ace/Synch_T.h: Added new constructors: + + ACE_Guard(ACE_LOCK& l) : lock_(&l) + { this->owner_ = this->acquire(); } + + ACE_Read_Guard(ACE_LOCK& m) : ACE_Guard(&m) + { this->owner_ = this->acquire_read(); } + + ACE_Write_Guard(ACE_LOCK& m) : ACE_Guard(&m) + { this->owner_ = this->acquire_write(); } + + Remove default argument to current Guard classes. + + ACE_Guard(ACE_LOCK&l, int block) + ACE_Read_Guard(ACE_LOCK& m, int block) + ACE_Write_Guard(ACE_LOCK&m, int block) + with the current semantic. + + This change allows OS platforms with + ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION or ACE_HAS ??? PRAGMA + ???, to> invoke common case constructor in a more efficient + way. Thanks to Arturo for this. + + * ace/Synch_T.h: ACE_Guard's destructor should be: + + ~ACE_Guard() { this->release(); } + + and not + + ~ACE_Guard() { if (this->owner_ != -1) this->release(); } + + because ACE_Guard::release has this test. Thanks to Arturo for + reporting this. + + * ace/ARGV.cpp: Declared the char* parameters for the ACE_ARGV + class constructors as const. Since they are copied in the + constructors, this is a safe thing to do. This makes it easier + to pass the result of string::c_str() to it. Thanks to Stephen + Coy for this suggestion. + + * ace/Thread_Manager.cpp: We were missing a Guard in the + ACE_Thread_Manager::at_exit() method. + + * ace/config-sunos5.5-sunc++-4.x.h: It appears that we need to set + ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS for Solaris 2.5 since otherwise + wierd things happen randomly. This is based on the following man + page entry for pthread_exit(): + + Do not call pthread_exit() from a cancellation cleanup handler + or destructor function that will be invoked as a result of + either an implicit or explicit call to pthread_exit(). + + * ace/Thread_Manager.cpp (run_thread_exit_hooks): Once the cleanup + hook(s) are called we set the value of the cleanup hook variable + to 0 to avoid false matches later on. + +Fri Sep 5 21:57:44 1997 Nanbor Wang + + * ace/Containers.i (is_empty): + * ace/Malloc.cpp (instance): Commented out ACE_TRACE in these + routines. They were causing recursive call if we used TRACE. + Thanks to Craig Perras for solving + this. + + * ace/Handle_Set.i (fd_set *): Added conditional compilation code + for Win32 platforms. This is because we don't maintain + on Win32 and, therefore, can't depend on it. + +Fri Sep 5 19:05:02 1997 Douglas C. Schmidt + + * tests/Thread_Manager_Test.cpp (main): moved delete + signal_catcher into the ACE_HAS_THREADS part of the main() + function. + + * ace/Reactor.cpp (check_handles): When handle_error was optimized + with fstat we put NULL value to second argument. It requires a + value to SCO OpenServer to work. Therefore, I added struct stat + temp and changed ACE_OS::fstat(handle, NULL) by + ACE_OS::fstat(handle, &temp); Thanks to Arturo for fixing this. + + * examples/Threads/process_manager.cpp (sig_handler): Fixed a bug + where the thread was exiting if no more children existed. + Thanks to Avraham Nash for reporting + this. + + * ace/Handle_Set: Added the following performance enhancements: + + . Assignment operator to optimize size == 0. + + . min_handle to manage the case when the Handle_Set start in + handle different of zero. + + . A new iterator algorithm tuned for select function calls. + + Thank to Arturo for these enhancements. + + * ace/config-aix-4.1.x.h: Added ACE_LACKS_TIMESPEC_T. Thanks to + Rob Head (rhead@virtc.com) for reporting this. + + * ace/OS.cpp (fork_exec): Changed the logic so that we don't + create a new console window on Win32. This isn't done on UNIX, + so there's no point in doing it here. Thanks to Jeff Richard + for pointing this out. + + * ace/Reactor.cpp: The call to + ACE_Reactor_Handler_Repository::open() in the constructor of + ACE_Reactor should check for == -1! Thanks to Brian Mendel for + reporting this. + + * ace/Reactor.cpp (remove_handler): Fixed a braino where the + conditional compile for NSIG should have been > 0 rather than == + 0. Thanks to fixing this codeKaren Amestoy + for reporting this fix. + +Fri Sep 05 16:17:50 1997 David L. Levine + + * performance-tests/Misc/preempt.cpp: added command line options, + and explanation on how to interpret the results. + +Thu Sep 04 10:26:11 1997 David L. Levine + + * ace/OS.cpp: (tss_open): removed paren from around type in "new" + statement, because GHS (and ANSI C++) compilers will choke on it. + Thanks to Brian Mendel for reporting + this. + + * ace/Thread_Manager.cpp: (ACE_Thread_Descriptor ctor): zero out + cleanup_hook_ in cleanup_info_ because we read it later on. + (dump): added guard because thr_table_ is accessed. (wait): + hacked in thr_yield () to give waited threads a chance to clean + up before continuing. + + * ace/OS.h (ACE_Cleanup_Info): added default ctor. + + * ace/Log_Msg.cpp (close): delete main thread's Log_Msg instance, + on Solaris if ACE_HAS_EXCEPTIONS is not defined, because main + thread TSS dtors apparently don't get called. + + * ace/Token_Manager.{h,cpp}: register ACE_Token_Manager singleton + for deletion with ACE_Object_Manager. + + * ace/Token_Invariants.{h,cpp}: register ACE_Token_Invariant_Manager + singleton for deletion with ACE_Object_Manager. + + * ace/Naming_Context.cpp (close) moved deletion of "name_options_" + from dtor to close (), because when Service_Repository is closed, + it calls close () instead of deleting the service. + + * ace/Process_Strategy.cpp (handle_signal): suppress printouts during + shutdown, to prevent using ACE_Log_Msg while it's being deleted. + + * ace/Timer_List.cpp: replace ACE_Recursive_Thread_Mutex with + ACE_SYNCH_RECURSIVE_MUTEX, for non-threaded platforms. + + * tests/Reactors_Test (~Test_Task): moved ASSERT after the printout, + so we can see why it failed. (svc): added printout with thread ID. + (main): deleted reactor at end of test to prevent leak. + + * tests/SPIPE_Test (client): increased sleep time to 10 sec, + because a long delay is needed with Purify. + + * tests/UPIPE_Test (connector): added 5 second sleep to give + acceptor a chance to start up. + + * include/makeinclude/wrapper_macros.GNU: added -max_threads=100 to + Quantify options. + + * include/makeinclude/rules.local.GNU: added *.sym to clean target. + +Thu Sep 04 09:39:08 1997 David L. Levine + + * ACE version 4.3.3, released Thu Sep 04 09:39:08 1997. + +Thu Sep 04 08:48:13 1997 David L. Levine + + * include/makeinclude/wrapper_macros.GNU: added shared_libs_only + and static_libs_only build options. Only static_libs_only + has been tested successfully. + + * include/makeinclude/rules.lib.GNU: added INSTALL support for + shared_libs_only and static_libs_only. + + * include/makeinclude/platform_vxworks*.GNU: use static_libs_only. + + * ace/OS.cpp: moved tss_open ()/tss_close () calls from invoke () + to ace_thread_adapter. + + * examples/Threads/auto_event.cpp,manual_event.cpp, + process_manager.cpp,reader_writer.cpp,tss2.cpp: + cast spawn entry point to ACE_THR_FUNC. + + * examples/Threads/task_four.cpp (Invoker_Task): rearranged + initializers to match declaration order. + + * examples/Threads/thread_specific.cpp (worker): use + ACE_OS::printf () instead of printf (), and print out the + ACE_hthread_t instead of the ACE_thread_t. + + * examples/IPC_SAP/SPIPE_SAP/client.cpp,consumer_msg.cpp, + consumer_read.cpp,producer_msg.cpp,producer_read.cpp,server.cpp: + moved #include of shared.h inside ACE_HAS_STREAM_PIPES protection + to avoid compilation warnings on unsupported platforms. + + * examples/Reactor/Ntalker/ntalker.cpp (main): removed unused "argc". + + * examples/*/*.cpp,netsvcs/clients/Tokens/mutex/test_mutex.cpp: + added args to main (). + +Wed Sep 3 21:38:18 1997 Carlos O'Ryan + + * ace/config-irix6.x-sgic++.h: + IRIX uses pthread_sigmask to manage per-thread signal mask, + thanks to Gonzalo Diethelm (gonzo@ing.puc.cl) for pointing out + this one. + + * ace/OS.h: + Removed an initial '#' for a comment line, thanks to Gonzalo + Diethelm (gonzo@ing.puc.cl) for pointing out this one. + + * ace/Timer_Hash_T.cpp: + * ace/Timer_Hash_T.h: + * ace/Timer_Heap_T.cpp: + * ace/Timer_Heap_T.h: + * ace/Timer_List.cpp: + * ace/Timer_List_T.cpp: + * ace/Timer_List_T.h: + * ace/Timer_Queue_T.cpp: + * ace/Timer_Queue_T.h: + * ace/Timer_Wheel_T.cpp: + * ace/Timer_Wheel_T.h: + In the word of its author: Modified the iterators kept in + each of these classes so that they are constructed + dynamically on the heap after the Queue has been properly + initialized. Otherwise, the iterators try to iterate over a + non-initialized queue, and fail miserably (usually dumping + core). Once more thanks to Gonzalo Diethelm + (gonzo@ing.puc.cl) for this changes. + + * tests/UPIPE_SAP_Test.cpp: + Gonzalo improved the error message. + + * ace/README: + Gonzalo updated the documentation for some macros. + +Wed Sep 03 15:21:46 1997 David L. Levine + + * ace/OS.h: define ACE_TSS macros with ACE_HAS_TSS_EMULATION, + and renamed some ACE_TSS_Emulation methods. + + * ace/OS.i: allow TSS_Emulation storage to be on thread stack, + instead of always dynamically allocating it. + + * ace/OS.cpp (ACE_Thread_Adapter::invoke): allocate TSS_Emulation + storage on thread stack. (ACE_TSS_Cleanup::exit): only call + a TSS destructor if the thread's value is non-zero. + + * ace/Thread_Manager.cpp: support TSS_Emulation. + + * ace/Thread_Manager.cpp (resize): zero out unused cleanup_hooks + in thr_table_; (run_thread_exit_hooks): check for zero cleanup + hook before calling. + + * ace/Synch_T.*: allow ACE_HAS_TSS_EMULATION _or_ + ACE_HAS_THREAD_SPECIFIC_STORAGE. + + * ace/Object_Manager.{h,cpp}: allocate main thread's TSS_Emulation + storage in the ACE_Object_Manager instance. + + * ace/Log_Msg.h: befriend ACE_OS::cleanup_tss () instead of + ACE_Object_Manager, because the cleanup path is now indirect + from the ACE_Object_Manager. + + * ace/Log_Msg.cpp: use TSS_Emulation on VxWorks, so + VxWorks-specific code was removed. + + * ace/Task.cpp: removed unused #include of ace/Dynamic.h. (It had + been used for template instantiations, but they were moved.) + Also, removed unused #include of ace/Object_Manager.h. + + * ace/Svc_Handler.{h,cpp}: register Svc_Handler singleton for + deletion with the ACE_Object_Manager. + + * tests/Process_Strategy_Test (Options): added a destructor so that + the dynamically allocated concurrency_strategy_ can be deleted. + +Wed Sep 3 08:05:26 1997 Steve Huston + + * ace/Message_Block.h: Corrected comment on release(void) - the + underlying ACE_Data_Block's refcount is decremented; the + ACE_Message_Block is always deleted. + +Tue Sep 2 18:26:22 1997 Douglas C. Schmidt + + * ace/Task: Revised the ACE_Task_Base::svc_run() method to + register a thread exit hook (ACE_Task_Base::cleanup()) + + * ace/Task: Added a static method called cleanup() that can serve + as a thread exit hook to ensure that close() is always called + when a task exits a thread. + + * ace/Thread_Manager: Added the first-cut implementation of the + thread exit hooks. This one is butt-simple -- just allowing a + single hook per-thread, but that should be enough to get us over + the hump... + + * ace/OS.h: Moved the object_info_t type from Object_Manager.h and + renamed it to ACE_Cleanup_Info since we will use it with the + Thread_Manager and the Object_Manager. + + * ChangeLog-97b: Emptied out the ChangeLog-97b file until + we move the ChangeLog to this file... + + * ace/OS.h: Moved the typedef from the + ACE_Object_Manager into global scope so that it can also be used + by the ACE_Thread_Manager. + + * ace/DEV_IO: Moved the get_remote_addr() and get_local_addr() + from the DEV class to the DEV_IO class, which seems to be more + consistent with how they should be used. + + * ace/FILE_IO: Added the get_remote_addr() and get_local_addr() + methods to FILE_IO. Now we should be able to use this with the + Connector pattern. Thanks to Stephen Coy + for reporting this. + + * ace/DEV_Connector*h, ace/FILE*.h: Added "traits" for PEER_ADDR + and PEER_STREAM. Now we should be able to use this with the + Connector pattern. Thanks to Stephen Coy + for reporting this. + + * tests/Async_Timer_Queue_Test.cpp (main): Replaced the use of + fputs() with read() so that it will be signal-safe. Thanks to + Carlos for pointing out the need for this. + + * ace/Task: All the complex ACE_Task_Exit logic has been moved out + of the Task file and into the Thread_Manager file. This will + both simplify and generalize the behavior of cleanups on thread + exit. + +Tue Sep 2 14:42:52 1997 Nanbor Wang + + * ace/config-chorus.h (ACE_HAS_BROKEN_EXPLICIT_TEMPLATE_DESTRUCTOR): + Added this directive for Chorus uses g++. Thanks to David + Levine for pointing this out. + +Mon Sep 01 21:31:25 1997 David L. Levine + + * ChangeLog-97b,Makefile,bin/create_ace_build: ChangeLog is no longer + a symbolic link, but instead is the most recent ChangeLog file. + ChangeLog-97b was moved to ChangeLog. + + * ace/Timer_Queue_T.cpp (schedule): added ACE_UNUSED_ARGs for act + and interval. + + * ace/OS.h: changed ACE_SEH_EXCEPT and ACE_SEH_FINALLY from null + to "while (0)" on all platforms except ACE_WIN32. Thanks to + Nanbor for this bit of macro wizardry. + + * ace/OS.i (tss_base): cast VxWorks TCB spare field to a void **& + instead of a void **, because the function returns a reference + to it. + + * ace/OS.cpp: protected definition of + ACE_TSS_Emulation::tss_collection_ on VxWorks, where it's not used. + + * ace/OS.cpp (ACE_Thread_Adapter::invoke) don't exit the thread + with TSS_EMULATION, except on WIN32. (thr_create) On VxWorks, + use thread adapter as entry point instead of func (via macros). + + * ace/config-vxworks*.h: added ACE_HAS_TSS_EMULATION, with + ACE_DEFAULT_THREAD_KEYS set to 16, and ACE_LACKS_UNIX_SIGNALS. + + * tests/Async_Timer_Queue_Test.cpp: added template instantiations. + + * tests/IOStream_Test.cpp: no longer need to dynamically allocate + the ACE_SOCK_IOStreams with the recent ACE_Thread_Manager changes. + That was causing occasional problems with unsafe deletion of the + underlying ostreams. Thanks to James Johnson for consulting on + this intermittent (nasty) problem. + + * tests/SPIPE_Test.cpp: (main) added ACE_UNUSED_ARG of client + and server. + + * tests/Thread_Manager_Test (worker): added ACE_UNUSED_ARG (thr_mgr) + if ACE_LACKS_UNIX_SIGNALS, and added template instantiations. + + * tests/Thread_Manager_Test.cpp: dynamically allocate the + signal_catcher so that we can destroy it before the main + thread's TSS is cleaned up. + + * tests/TSS_Test.cpp: dynamically allocate TSS_Error so that we + can ensure its deletion before that of ACE_Object_Manager. + Also, makde the code a little easier to change the number of threads. + + * include/makeinclude/wrapper_macros.GNU: added Purify options to + ignore SIGINT and set max threads to 100. + +Mon Sep 1 10:53:39 1997 Douglas C. Schmidt + + * ace/Handle_Set: Added an assignment operator that is optimized + for the case when the right-hand side is 0. + + * ace/OS: The ACE_THR_C_FUNC macro was confusing for Win32. We've + replaced this with the original UNIX typedef and will just use + LPTHREAD_START_ROUTINE for Win32. + + * tests/Thread_Manager_Test.cpp (main): Revised this test so that + we don't have race conditions for suspend() and resume(). + + * tests/Tokens_Test.cpp (run_test): Removed the use of + THR_SUSPENDED and resume_all() since this is broken due to race + conditions and other hazards implicit in using suspend() and + resume() on threads. + + * ace/Handle_Set.cpp: There were several ACE_INLINE methods in the + Handle_Set.cpp file. I've removed the ACE_INLINE flag. + + * tests/SPIPE_Test.cpp: If ACE doesn't have STREAM pipes on a + platform (or we aren't on NT) then don't try to run this test. + Thanks to James CE Johnson for reporting + this. + + * ace/config-sunos5.[45]-g++.h: ACE defines _REENTRANT in + config.h. Application using classes of ACE can conflict by + using compilation option as -D_REENTRANT. I fixed this by + surrounding the define as: + + #if !defined (_REENTRANT) + #define _REENTRANT + #endif /* _REENTRANT */ + + Thanks to Jean-Marc Strauss for + reporting this. + + * ace/Timer_Queue_T.h: We need to #include "ace/Signal.h" since + our Async_Timer_Queue_Adapter needs it. Thanks to Neil Cohen + for reporting this. + + * ace/Reactor.cpp (check_handles): Optimized the check for invalid + handles by using fstat() rather than select() on non-Win32 + platforms. Thanks to Arturo for suggesting this optimization. + +Mon Sep 1 17:52:10 1997 Darrell Brunsch + + * ace/Timer_Heap_T.cpp: Changed cancel (id ...) to check for + previously expired/cancelled timers + +Mon Sep 01 08:43:37 1997 David L. Levine + + * ace/Synch.cpp: added #include of Object_Manager.h. + Thanks to Edan Ayal for reporting this. + +Mon Sep 1 00:46:05 1997 Nanbor Wang + + * ace/README: Added explanation for ACE_HAS_STL_MAP_CONFILICT. + + * ace/OS.h: Added conditional compilation directive + ACE_HAS_STL_MAP_CONFLICT. This is used when users want to + compile ACE with STL library and the STL map class conflicts + with map structure in . + + * ace/config-unixware-2.1.2-g++.h: + * ace/config-unixware-2.01-g++.h: + * ace/config-osf1-4.0-g++.h: + * ace/config-irix5.3-g++.h: + * ace/config-hpux-10.x-g++.h: + * ace/config-linux-pthread.h: + * ace/config-linux-lxpthreads.h: + * ace/config-linux.h: + * ace/config-freebsd.h: + * ace/config-freebsd-pthread.h: + Added ACE_HAS_BROKEN_EXPLICIT_TEMPLATE_DESTRUCTOR flag for all + config files which apparently use g++. + + * ace/config-vxworks-g++.h: + * ace/config-vxworks5.x-g++.h: + * ace/config-sunos4-g++.h: + * ace/config-sunos5.4-g++.h: + * ace/config-sunos5.5-g++.h: + Moved ACE_HAS_BROKEN_EXPLICIT_TEMPLATE_DESTRUCTOR closer to + other template-related directives. + +Sun Aug 31 22:56:30 1997 Douglas C. Schmidt + + * ACE version 4.3.2, released Sun Aug 31 22:56:30 1997. + +Sun Aug 31 22:36:08 1997 Douglas C. Schmidt + + * tests/Async_Timer_Queue_Test.cpp: Need to #include "Timer_List.h" + rather than "Timer_Queue.h". + + * ace: Added ACE_HAS_HANDLE_SET_OPTIMIZED_FOR_SELECT for all + config.h files. + + * ace/Handle_Set.cpp (count_bits): Continued to optimize this + method. Now, if ACE_HAS_HANDLE_SET_OPTIMIZED_FOR_SELECT enabled + it will use a very fast loop that only runs for as many bits + that are enabled in the bitset. This approach also doesn't have + to access the Global Offset Table in shared libraries, which is + a win. Thanks to Arturo for contributing this. + + * tests/Async_Timer_Queue_Test.cpp: Generalized this test to use + the new ACE_Async_Timer_Queue_Adapter. + + * ace/Timer_Queue_T: Added the new ACE_Async_Timer_Queue_Adapter, + which makes it possible to encapsulate any of the ACE Timer + Queue mechanisms into a asynchronous signal-handling context. + + * ace/OS.i: If the platform doesn't support ualarm() (and it + doesn't lack UNIX signals) then we'll use alarm() rather + than ualarm(). Clearly, this isn't as good as ualarm(), + but it's better than nothing. + + * ace/OS.i: I'd missed replacing + + ACE_LACKS_POSIX_PROTO_FOR_SOME_FUNCS + + with + + ACE_LACKS_POSIX_PROTOTYPES_FOR_SOME_FUNCS + + in OS.i. Thanks to James CE Johnson for + pointing this out. + +Sun Aug 31 09:58:35 1997 Douglas C. Schmidt + + * Princess Diana was killed today in a senseless auto accident in + Paris, France. This is a very tragic ending to a very promising + life ahead of her. + +Sun Aug 31 15:08:00 1997 David L. Levine + + * tests/Async_Timer_Queue_Test.cpp: fixed and added some + ACE_UNUSED_ARG's. + + * netsvcs/clients/Tokens/invariant/invariant.cpp (run_mutex, + run_reader_writer), + netsvcs/clients/Tokens/mutex/test_mutex.cpp (run_test), + netsvcs/clients/Tokens/rw_lock/rw_locks.cpp (run_thread): + removed unused argument "vp". + + * ace/ACE.i (log2): moved "log" declaration outside of the + for loop because its used after the loop. + + * ace/Task.cpp (instance) only register for destruction with + ACE_Object_Manager when creating a new instance_. + + * ace/Thread_Manager.cpp (ACE_Thread_Control::exit) with TSS + emulation, don't exit the thread. Instead, + ACE_Thread_Adpater::invoke () will do it after cleaning up TSS. + + * ace/Synch{h,cpp}: (ACE_TSS_Cleanup_Lock) register for + destruction with ACE_Object_Manager. + + * ace/OS.*: major cleanup of ACE_TSS_Emulation, esp. how it + interacts with ACE_TSS_Cleanup::exit (). + +Sat Aug 30 17:30:24 1997 Steve Huston + + * Removed these config files: + config-hpux-10.x-aCC.h + config-hpux-10.x-decthreads.h + config-hpux-10.x-nothread.h + config-hpux-10.x-hpc++.h should be used with HP compilers on + HP-UX 10.x. + +Sat Aug 30 14:58:42 1997 Douglas C. Schmidt + + * ace/Signal.cpp (ACE_Sig_Action): Added a new constructor that + also takes an ACE_Sig_Set & *and* registers the handler... + + * ace/Handle_Set.cpp (count_bits): Added a newly optimized + algorithm for cases where + ACE_HAS_HANDLE_SET_OPTIMIZED_FOR_SELECT. Thanks to Arturo for + this suggestion. + + * ace/config-sco-5.0.0*.h: Added ACE_HAS_LONG_FDMASK for all the + SCO files. Thanks to Arturo for suggesting this. + + * ace/Signal: Added a new mutator method to reassign an + ACE_Sig_Set to an ACE_Sig_Action. + + * ace/Handle_Set.i: If the size of the fd_set is 0 then operator + fd_set *() just returns 0. This will help to optimize the + performance of the Reactor. Thanks to Arturo for suggesting + this. + + * ace/Handle_Set.cpp (count_bits): Added yet another improvement + to remove the "i" iterator. Thanks to Arturo for this! + + * ace/Log_Msg.cpp (log): Used the new ACE_Log_Record::priority() + method in place of the type() method so that the priorities are + handled correctly. + + * ace/Log_Record: Added two new methods that get/set the + "priority" of an ACE_Log_Record. This value computed as the + base 2 log of the value of the corresponding ACE_Log_Priority + enumeral (which are all powers of two). We need this mapping + function so that we can use the priorities as parameters to the + putpmsg() function (which can only map between 0-255). Thanks + to Per Andersson for finding this stuff! + + * ace/ACE: Added a new method to compute the base2 logarithm of a + number. + + * Replaced all uses of ACE_Thread_Control since this is now + handled by the ACE_Thread_Manager. + + * ace/Thread_Manager.cpp (spawn_i): Make sure to pass "this" to + the ACE_Thread_Adapter if we're constructing it in the + ACE_Thread_Manager::spawn_i() method. + + * ace/OS.i (cond_timedwait): Added a special check to see if + timeout != 0, in which case we just call ACE_OS::cond_wait(). + Therefore, VxWorks can now use ACE_OS::cond_timedwait(), as long + as the timeout == 0! This simplifies certain internal ACE code. + Thanks to David Levine for pointing this out. + + * ace/Handle_Set.cpp (count_bits): Changed the code from + + for (int i = 0; i < sizeof (u_long); i++) + { + rval += ACE_Handle_Set::nbits_[n & 0xff]; + n >>= 8; + } + + to + + for (int i = 0; n != 0; i++) + { + rval += ACE_Handle_Set::nbits_[n & 0xff]; + n >>= 8; + } + + in order to speed it up in the "best case." Thanks to Arturo + Montes for reporting this. + + * ace/Thread.cpp (spawn_n): Added a test to make sure that the + thread_ids is != 0 before we assign into this. + +Fri Aug 29 22:45:21 1997 Nanbor Wang + + * ace/config-vxworks-g++.h: + * ace/config-vxworks5.x-g++.h: + * ace/config-sunos4-g++.h: + * ace/config-sunos5.4-g++.h: + * ace/config-sunos5.5-g++.h: + Added flag ACE_HAS_BROKEN_EXPLICIT_TEMPLATE_DESTRUCTOR to these + config files. + + * ace/README: Added explanation of flag + "ACE_HAS_BROKEN_EXPLICIT_TEMPLATE_DESTRUCTOR." + When calling a template class'es destructor explicitly, if you + must use "ptr->FOO::~FOO ();" but not + "ptr->FOO::~FOO ();" then, you must add this flag to + your config file. + + * ace/OS.h (ACE_DES_FREE_TEMPLATE): Added this new macro to cope + with the fact that compilers require different syntax when + calling destructor of template classes explicitly. This macro + takes four arguments, POINTER, DEALLOCATOR, CLASS, and + TEMPLATE_PARAMETER. To deallocate a pointer allocated by + ACE_NEW_MALLOC and you need to call FOO class'es + destructor, you'll write: + + ACE_DES_FREE_TEMPLATE (ptr, alloc->free, FOO, ); + + * ace/Containers.cpp: Changed to use ACE_DES_FREE_TEMPLATE to iron + out differences among compilers. + +Fri Aug 29 15:31:50 1997 David L. Levine + + * ace/OS.*,Synch.{h,cpp},Object_Manager.cpp: started adding + support for TSS emulation. + + * ace/OS.h: declare class ostream if + ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION. + + * tests/Async_Timer_Queue_Test.cpp (parse_commands): fixed + sscanf format specifiers to match argument types; (main): + fixed ACE_ERROR_RETURN parens; protected bulk of code with + ACE_HAS_UALARM so that the test will build cleanly on + platforms without it. + +Fri Aug 29 00:43:27 1997 Douglas C. Schmidt + + * ace/Synch.cpp (wait): Simpified the call to + ACE_OS::cond_timedwait() to avoid an extra test. Thanks to + Arturo for pointing this out. + + * ace/TTY_IO: Added native support for TSETA. Thanks to Arturo for + this. + + * ace/Strategies_T.cpp: Finished integrating the ACE_DLL_Strategy + implementation, which is used in TAO. Thanks to Satheesh Kumar + MG for motivating this. + + * ace/Synch_T.h: Clarified the constructor for ACE_TSS that takes + a TYPE * as an argument. Note that this only initializes the + TSS value in the *calling* thread, but not any other threads + that may come along later on. Thanks to Bob Laferriere + for helping to clarify this. + + * ace/Synch_T.h: Removed stray semi-colons from some of the + ACE_SYNCH_* macros. Thanks for Wei Chiang for reporting this. + +Fri Aug 29 11:40:10 1997 Darrell Brunsch + + * ace/OS.cpp: Added cast for ace_thread_adapter. + + * ace/OS.h: Changed name of ACE_Thread_Adapter's constructor's + fourth parameter from tm to tmgr since tm conflicted with + another tm. + + * ace/Thread_Manager.cpp: In spawn_i, changed the last parameter + given to spawn to thread_args. Also had to add a cast for + ace_thread_adapter. + +Fri Aug 29 06:44:05 1997 Nanbor Wang + + * ace/OS.h (ACE_DES_FREE): Added this macro which will call + designate destructor before freeing the memory. This is a + matching macro that should go with ACE_NEW_MALLOC and + ACE_NEW_MALLOC_RETURN which allocate memory using designate + allocator then call the user specified constructor explicitly. + + * ace/Containers.cpp: Many memory deallocations of container's + nodes were changed to use the new macro which deletes objects + correctly. + + Thanks very, very much to Ivan Murphy for torturing various + test programs and reporting those tests which fail the + excruciation. + +Fri Aug 29 01:26:38 1997 + + * ace/ReactorEx.cpp: Added two new methods to ReactorEx - + schedule_wakeup() and cancel_wakeup(). Also fixed some bugs + related to our local copy of network_events_ not getting updated + properly. Thanks to Edan Ayal for pointing out + the two missing functions. + +Thu Aug 28 20:12:23 1997 Douglas C. Schmidt + + * ace/Thread_Manager.cpp: Added a new ace_thread_manager_adapter() + function, which is similar to the ace_thread_adapter function + used in ACE_OS::thr_create(). However, the new function ensures + that threads spawned by an ACE_Thread_Manager are automatically + registered and deregistered from the Thread Manager. + + * ace/ACE.h (inherit_log_msg): Factored out the functionality to + inherit the logging features if the parent thread has an + ACE_Log_Msg instance in thread-specific storage. This function + is called in several places (e.g., OS.cpp and + Thread_Manager.cpp), so it pays to factor it out. + + * ace/OS.h (ACE_Thread_Adapter): Added a new data member that + keeps track of which thread entry point function we will pass to + the underlying OS thread creation routine. The default value is + ace_thread_adapter, but this can be overridden to do different + things... + + * ace/OS, + ace/Thread: Extended thr_create() so that if an + ACE_Thread_Adapter is passed to it this is used in lieu of the + func and arg parameters. This reduces the amount of dynamic + allocation and indirection required with the new + ACE_Thread_Manager. + + * ace/Task.h: Removed the ACE_Thread_Control data member from the + ACE_Task_Exit class since it now belongs to the + ACE_Thread_Manager instead... + + * ace/OS.cpp: Move the ACE_Thread_Adapter out of the OS.cpp file + and made it a first-class citizen of ACE. We can put this + to good use in the new ACE_Thread_Manager. + + * ace/OS.cpp: The ACE_Thread_Adapter is now the default behavior + in ACE. If you don't want to use it for whatever reason, + you'll need to set the ACE_NO_THREAD_ADAPTER macro. + + * ace/config-sco-5.0.0-fsu-pthread.h: Added + ACE_LACKS_CONST_TIMESPEC_PTR. Thanks to Arturo for this. + + * ace/Synch.cpp (wait): Removed the reference assignment and just + take the address of this->mutex_.lock_. Also, removed the + additional check for abstime == 0 in order to speed up the + common case. Thanks to Arturo for these suggestions. + +Thu Aug 28 20:02:03 1997 Douglas C. Schmidt + + * ACE version 4.3.1, released Thu Aug 28 20:02:03 1997. + +Thu Aug 28 00:21:09 1997 Douglas C. Schmidt + + * ace/Strategies_T.cpp (ACE_Thread_Strategy): Added reasonable + values to the default constructor. Thanks to Stephen Coy + for reporting this. + + * ace/config-irix6.x-sgic++-*.h: Added ACE_HAS_UALARM. Thanks to + Amos Shapira for reporting this. + + * ace/config-aix-4.*.h: Added ACE_HAS_UALARM. Thanks to Cary + Clark for reporting this. + + * ace/config-hpux-10.x*.h: Added ACE_HAS_UALARM. Thanks to Cary + Clark for reporting this. + + * ace/config-osf1*.h: Added ACE_HAS_UALARM. Thanks to Thilo + for reporting this. + + * ace/config-mvs.h: Added ACE_HAS_UALARM. Thanks to Chuck Gehr + for reporting this. + + * tests/Async_Timer_Queue_Test.cpp: Added a new test that will + illustrate how to implement an asynchronously invoked + Timer_Queue using UNIX SIGALRM signals. + +Thu Aug 28 19:32:07 1997 + + * examples/Reactor/ReactorEx: Added two new applications + (test_registry_changes.cpp and test_console_input.cpp) to show + some more features of ReactorEx. test_registry_changes.cpp shows + how to monitor the Registry using ReactorEx. + test_console_input.cpp shows how to use ReactorEx to get + notified when input shows up on the console. + +Thu Aug 28 18:07:37 1997 Darrell Brunsch + + * ace/Timer_{List,Heap,Wheel,Hash}_T.cpp: Changed the behavior + of the iterator to automatically initialize when the iterator + is constructed. + +Thu Aug 28 10:43:35 1997 David L. Levine + + * ace/Task.{h,cpp} (ACE_Task_Exit::instance) added call to + ACE_Object_Manager::at_exit () to clean up the singleton at + program termination. + +Thu Aug 28 03:25:52 1997 Nanbor Wang + + * tests/Task_Test.cpp (Barrier_Task): + * tests/TSS_Test.cpp (main): Added an array to collect thread + handles in order to clean them up. Thanks to Ivan Murphy + for pointing this out. + + * ace/Thread_Manager.{h,cpp} (spawn_n): + * ace/Task.{h,cpp} (activate): + Added an extra argument ACE_hthread_t thread_handles[] with + default value 0. We need this argument to collect handles of + spwaned/activated threads. On NT, we have to join terminated + threads explicitly to prevent handles leak. Thanks to Ivan + Murphy for digging this out. + +Wed Aug 27 10:48:25 1997 Douglas C. Schmidt + + * ace: Changed all occurrences of ACE_LACKS_RLIMIT_PROTO to + ACE_LACKS_RLIMIT_PROTOTYPE, ACE_LACKS_POSIX_PROTO to + ACE_LACKS_POSIX_PROTOTYPES, and ACE_LACKS_SYSV_MSQ_PROTOS to + ACE_LACKS_SYSV_MSQ_PROTOTYPES to be more consistent. + + * ace/config-sunos5.x*.h: Added ACE_HAS_UALARM to all the Solaris + config files. However, also had to add ACE_LACKS_UALARM_PROTOTYPE + since Solaris strangely doesn't provide this prototype. + + * ace/OS.h: Added an ACE_Time_Value version of ACE_OS::ualarm(). + + * ace/Signal: Added a new constructor for ACE_Sig_Action that + takes an ACE_Sig_Set parameter. + + * ace/Signal: Added a sigset() accessor method. + + * ace/config-unixware-2.1.2-g++.h: Added ACE_HAS_UALARM. Thanks + to Ganesh Pai for reporting this. + + * ace/OS.h: Added a default value of 0 to ACE_OS::time(). + + * ace/Synch.i (ACE_Thread_Mutex_Guard): Rearranged the code so + that we can inline the acquire(), tryacquire(), and release() + methods properly. Thanks to David Levine for pointing this out. + + * ace/OS.h: Added ACE_OS support for the ualarm() method. If your + platform supports ualarm() please send me email so I can set the + ACE_HAS_UALARM flag in your config.h file. + + * tests/Makefile: Added an asynchronous timer queue test. + + * examples/IOStream/server/iostream_server.cpp: Added a new macro + to work around the fact that some C++ compiles don't grok + template typedefs. Thanks to Oleg Krivosheev + for pointing this out. + + * ace/OS, + ace/Task.cpp: + Installed a bunch of patches for FSU pthreads. Thanks to Arturo + Montes for sending this. + + * Makefile: Added a line to the release script that will + automatically generate an ACE-INSTALL text file from the + ACE-INSTALL.html file. Thanks to Oleg Krivosheev + for suggesting this. + + * performance-tests/Misc/Makefile: Added $(BIN) to the FILE target + so that "make depend" will work. Thanks to David Levine for + pointing this out. + + * ace/Synch.i: Eliminated unnecessary assignment to this->owner_. + Thanks to Chris for pointing this out. + + * ace/OS.i (msgctl): Added a "struct" to the definition of + msqid_ds. Thanks to Steve Hickman for + reporting this. + +Thu Aug 28 01:07:21 1997 + + * examples/Reactor/ReactorEx/test_directory_changes.cpp: Added a + new example application. This application tests the working of + ReactorEx when users are interested in changes in the + filesystem. + +Wed Aug 27 22:06:23 1997 Nanbor Wang + + * *.{mak,mdp,dsw,dsp}: Updated ACE's library names on Win32 as + below. Only Microsoft's Win95 and Windows NT are effected. + + Version Dynamic Library Static Livrary + ------------------ -------------------- ----------------- + Debug aced.lib, aced.dll acesd.lib + Release ace.lib, ace.dll aces.lib + Debug w/ UNICODE aceud.lib, aceud.dll acesud.lib + Release w/ UNICODE aceu.lib, aceu.dll acesu.lib + + Thanks to John Morey for suggesting this and + Darrell for updating VC 5.0's makefiles. + + * ace/config-freebsd[-pthread].h (ACE_HAS_UALARM): FreeBSD does has + ualarm. + +Wed Aug 27 10:52:59 1997 Chris Cleeland + + * ace/Synch_T.h (CTOR): Eliminated unnecessary assignment to + this->owner_. + +Wed Aug 27 09:32:57 1997 David L. Levine + + * ace/Singleton.cpp (instance): removed full qualification of + "instance_" in ACE_NEW_RETURN macro, because it confused + the Sun C++ 4.2 preprocessor. + + * ace/Singleton.cpp: added support for ACE_HAS_SIG_C_FUNC platforms, + e.g., on MVS. At least I tried to. The cleanup function, + on ACE_HAS_SIG_C_FUNC platforms only, doesn't call the object's + destructor. It just deallocates the storage. That should be + good enough; I don't think it's worth trying to do more than that. + + * ace/Synch.cpp (close_singleton): removed call to + ACE_Allocator::close_singleton (), because this method is + only called if ACE_HAS_THREADS. + + * ace/Object_Manager.cpp (dtor): added call to + ACE_Allocater::close_singleton (), and protected call to + ACE_Static_Object_Lock::close_singleton () with ACE_HAS_THREADS. + + * tests/Time_Value_Test.cpp: disabled ACE_U_LongLong test + on ACE_WIN32 platforms, because that class is never used + there. Thanks to Nanbor for finding this. + + * performance-tests/Misc/preempt.cpp,Makefile: added preempt + test, which tests for thread preemption. + +Tue Aug 26 13:59:01 1997 Douglas C. Schmidt + + * netsvcs/lib/Server_Logging_Handler_T.cpp: Changed the symbol + "SS" to "SST" to avoid a namespace collision with UnixWare. + Thanks to Ganesh Pai for pointing this out. + + * ace: Added a new config file to sco using FSU pthreads. Thanks + to Arturo Montes for sending this. + + * include/makeinclude: Added a new platform macros file to sco + using FSU pthreads. Thanks to Arturo Montes + for sending this. + +Tue Aug 26 22:06:14 1997 + + * examples/Reactor/ReactorEx: Added two new applications for + testing some of the new features of ReactorEx. Added + documentation and renamed some of the older test files to make + it easier to comprehend the examples. + +Tue Aug 26 11:47:29 1997 + + * ace/OS.i (mutex_trylock): Changed this method to make it deal + correctly with abandoned mutexes. Also added a new mutex_trylock + method that allows the user to know if the mutex was abandoned + (through an extra out parameter). Also fixed + ACE_OS::cond_timedwait(), ACE_OS::cond_wait(), + ACE_OS::event_wait(), ACE_OS::event_timedwait() and + ACE_OS::sema_wait() to remove extra checks for WAIT_ABANDONED, + since we are not dealing with mutexes in these methods. Thanks + to Ivan Murphy for pointing this + out. + +Tue Aug 26 11:06:45 1997 David L. Levine + + * ace/OS.h,config-vxworks5.x-g++.h: + split ACE_HAS_RENAMED_MAIN into ACE_MAIN and + ACE_HAS_NONSTATIC_OBJECT_MANAGER. + + * ace/ACE.cpp: only create the ACE_Object_Manager_Destroyer + if not ACE_HAS_NONSTATIC_OBJECT_MANAGER. + + * ace/Object_Manager.{h,cpp}: dynamically allocated the + contained ACE_Unbounded_Queue to so that it can be deallocated + before the ACE_Allocator is destroyed. + + * ace/Singleton.{h,cpp}: register all ACE_Singletons for + cleanup with the ACE_Object_Manager. + + * ace/Synch.{h,cpp}: renamed ACE_Static_Object_Lock::atexit () to + close_singleton (), and removed the unused atexit hook. + + * ace/Log_Msg.cpp (ACE_Log_Msg_Manager::close): delete the + main thread's Log_Msg. + + * ace/config-vxworks-ghs-1.8.h: added ACE_HAS_NONSTATIC_OBJECT_MANAGER. + + * tests/Time_Value_Test.cpp: added tests of ACE_U_LongLong. + + * tests/Atomic_Op_Test.cpp (main): added arguments to main (). + + * tests/Barrier_Test.cpp (main): delete thread_handles array + to prevent memory leak. + + * examples/Reactor/Misc/test_signals_2.cpp (main): changed + type of second arg from "char *" to "char *[]". + +Mon Aug 25 14:13:57 1997 Carlos O'Ryan + + * ace/OS.h: + Changed the return type of sendmsg_timedwait from sszie_t to + ssize_t, this should only affect platforms where + ACE_LACKS_TIMEDWAIT_PROTOTYPES, further it was definitely wrong + before. + Thanks to ARTURO MONTES for pointing + out this one. + +Mon Aug 25 10:15:06 1997 David L. Levine + + * ace/Message_Queue.cpp (notify): fixed ACE_TRACE message. + + * examples/ASX/UPIPE_Event_Server/event_server.cpp, + examples/Connection/misc/test_upipe.cpp, + examples/Connection/non_blocking/test_*.cpp, + examples/IPC_SAP/SOCK_SAP/CPP-inserver-poll.cpp, + examples/IPC_SAP/SOCK_SAP/FD-unserver.cpp, + examples/Misc/test_dump.cpp, + examples/Reactor/FIFO/client.cpp, + examples/Reactor/Misc/test_*.cpp, + examples/Reactor/Proactor/test_multiple_loops.cpp, + examples/Reactor/Proactor/test_timeout.cpp, + examples/Reactor/ReactorEx/test_timeout.cpp, + examples/Reactor/ReactorEx/test_exceptions.cpp, + examples/Service_Configurator/IPC-tests/client/local_spipe_client_test.cpp, + examples/Service_Configurator/IPC-tests/client/remote_thr_stream_client_test.cpp, + examples/Shared_Malloc/test_multiple_mallocs.cpp, + examples/System_V_IPC/SV_Message_Queues/*MQ_*.cpp, + examples/System_V_IPC/SV_Semaphores/Semaphores_?.cpp, + examples/Threads/process_mutex.cpp, + examples/Threads/recursive_mutex.cpp, + examples/Threads/tss1.cpp, + examples/Threads/thread_specific.cpp, + examples/Threads/token.cpp, + examples/Threads/wfmo.cpp, + tests/Simple_Message_Block_Test.cpp, + tests/Hash_Map_Manager_Test.cpp: + added arguments to main () to support redeclaring it on VxWorks. + + From now on, we should always declare main () with arguments, e.g., + int + main (int, char *[]) + +Sun Aug 24 10:27:33 1997 Douglas C. Schmidt + + * tests/Future_Test.cpp (Scheduler): Removed the non-existent + friend class Method_ObjectWork. Thanks to Sandro Doro + for reporting this problem. + + * ace/Message_Block.h: Clarified in the comments that the length() + of a Message_Block is 0 until the wr_ptr() is explicitly set. + Thanks to Amos Shapira for pointing out + the need for this. + +Sat Aug 23 14:43:27 1997 Douglas C. Schmidt + + * ACE version 4.3, released Sat Aug 23 14:43:27 1997. + +Sat Aug 23 14:40:32 1997 Douglas C. Schmidt + + * Released the long-awaited ACE 4.3. Good night sweet prince: + And flights of angels sing thee to thy rest. + +Sat Aug 23 00:44:09 1997 Douglas C. Schmidt + + * netsvcs/lib/Server_Logging_Handler.cpp: Make sure that we + explicitly instantiate ACE_Svc_Handler whether or not we're building with threads + since otherwise we get link errors. + +Fri Aug 22 20:58:49 1997 Nanbor Wang + + * ace/OS.cpp (ACE_TSS_Cleanup): Changed the lock for + ACE_TSS_Cleanup from a static object to a singleton to avoid the + nasty detruction order problem. This only effects Win32. + + * ace/Synch.{h,cpp}: Added a new singleton lock + "ACE_TSS_Cleanup_Lock" for Win32 platform. This object is + expect to be put under ACE_Object_Manager's control and will + probably gone/changed in the near future. + +Fri Aug 22 18:48:17 1997 Carlos O'Ryan + + * ACE-install.sh: + I updated the information on IRIX. Now we know for a fact it + compiles on IRIX 6.x, but we are not certain on IRIX 5.X. + + * bin/auto_compile_wrapper: + I have tried to make it clear that auto_compile_wrapper must be + tailored on each site. The email address is invalid and the + script should just crash the + + * ace/OS.i (cond_timedwait): + It used to always dereference the timeout parameter, which could + be 0 (heading for a + Sthreads use timestruc_t instead of timespec_t, thanks to + Ganesh Pai for pointing out this one and to + Steve Huston for explaining to us what + was going on. + +Fri Aug 22 08:46:39 1997 David L. Levine + + * include/makeinclude/platform_vxworks*.GNU: + unset SHLIB to fix builds without PRELIB. + + * netsvcs/lib/Logging_Strategy.cpp, + examples/Threads/task_three.cpp: include fstream.h and + iostream.h if ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION. + + * examples/ASX/UPIPE_Event_Server/event_server.cpp, + examples/Log_Msg/test_log_msg.cpp, + examples/Reactor/Misc/test_time_value.cpp, + examples/Logger/Accepter-server/server_loggerd.cpp: + #include iostream.h if ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION. + + * examples/ASX/UPIPE_Event_Server/Peer_Router.cpp (svc): + replaced an iostream printout with an ACE_DEBUG call. + + * examples/Misc/test_read_buffer.cpp, + test_dump.cpp, + Mem_Map/IO-tests/test_io.cpp: + replaced bare OS calls with ACE_OS calls. + + * examples/Reactor/Misc/notification.cpp (Thread_Handler): + added cast of svc_run to ACE_THR_FUNC. + +Thu Aug 21 22:38:19 1997 Carlos O'Ryan + + * bin/auto_compile: + This tool will checkout ACE_wrapper from CVS, use + bin/create_ace_build to update a clone directory, compile ace + and tests in that clone directory and then run run_tests.sh. + If there is any problem it will report it to email. + + * bin/auto_compile_wrapper: + The former needs some configuration information and a proper + enviroment, hence it may not be invoked directly from your + crontab. This tool is used for that purpose. + + * apps/Gateway/Gateway/Makefile: + * apps/JAWS/server/Makefile: + * examples/Connection/non_blocking/Makefile: + * examples/IPC_SAP/DEV_SAP/reader/Makefile: + * examples/IPC_SAP/DEV_SAP/writer/Makefile: + * examples/Service_Configurator/IPC-tests/server/Makefile: + * netsvcs/clients/Naming/Client/Makefile: + * netsvcs/clients/Naming/Dump_Restore/Makefile: + * performance-tests/Synch-Benchmarks/Makefile: + No need to defines LIBS=-lACE here, it is already done in + wrapper_macros.GNU. Thanks to Cary Clark for + pointing out this one. + + * bin/create_ace_build: + New flag -a to create all symlinks using absolute paths, it + helps when the build directory is a symlink too. + + * include/makeinclude/platform_irix6.x-sgic++.GNU: + ACE now compiles with little or no warnings, I kept the linker + warnings deactivated though. + -ptall does not work any more. I added a comment on that. + + * ace/OS.h: + * apps/Gateway/Gateway/Concrete_Proxy_Handlers.cpp: + * apps/JAWS/clients/Blobby/Blob_Handler.cpp: + * apps/JAWS/server/HTTP_Server.cpp: + * examples/ASX/UPIPE_Event_Server/Peer_Router.cpp: + * examples/IPC_SAP/SPIPE_SAP/NPServer.cpp: + * examples/IPC_SAP/SPIPE_SAP/producer_read.cpp: + * examples/Reactor/Dgram/CODgram.cpp: + * examples/Reactor/Dgram/Dgram.cpp: + * examples/Reactor/Misc/test_demuxing.cpp: + * examples/Reactor/Misc/test_reactors.cpp: + * examples/Reactor/Misc/test_signals_2.cpp: + * examples/Threads/barrier2.cpp: + * examples/Threads/process_manager.cpp: + * examples/Threads/task_three.cpp: + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp: + * netsvcs/clients/Tokens/collection/collection.cpp: + * netsvcs/clients/Tokens/mutex/test_mutex.cpp: + * performance-tests/Misc/childbirth_time.cpp: + * tests/Reactor_Exceptions_Test.cpp: + * tests/Reactors_Test.cpp: + * tests/SOCK_Test.cpp: + New macro ACE_NOTREACHED. Some compilers will issue warnings on + unreached statements with things like: + int foo() + { + if (bar) { + return 0; + } else { + return 1; + } + return 0; // warning here + } + but if we remove the last return some other compiler will issue + warnings on leaving the function with no return value. + This macro tries to deal with that, all we have to do is to + write the last line like: + int foo() + { + if (bar) { + return 0; + } else { + return 1; + } + ACE_NOTREACHED(return 0); // No warning now!!! + } + IMHO it also serves as a form of documentation. + +Thu Aug 21 21:00:35 1997 + + * ace/Auto_Ptr: Changed auto_ptr implementation to be as close + to the C++ specification as possible. Things that are still + missing are: + (a) std namespace + (b) member templates implementations + (c) making the constructors explicit + + * ace/OS.h (ACE_BIT_STRICTLY_ENABLED): Added new macro to check if + a bit is strictly enabled in a word. This is necessary when the + bit would be a combination of bits, and therefore, just + comparing against != 0 (like ACE_BIT_ENABLED does) is not enough + and comparing == BIT is necessary. + +Thu Aug 21 19:28:28 1997 James C Hu + + * include/makeinclude/rules.local.GNU (depend.local): If TAO_ROOT + is not set, don't try using it in sed. + + * bin/g++dep: Check the existence of the TAO_ROOT environment + variable before adding it to the relative pathname replacement + strategy. + +Thu Aug 21 16:29:02 1997 David L. Levine + + * ace/OS.h: added THR_JOINABLE and THR_SCHED_FIFO/RR/DEFAULT + to STHREADS, WTHREADS, and non-threaded platforms. On VxWorks + only, set NSIG to _NSIGS + 1. + + * ace/config-vxworks*.h: removed ACE_HAS_POSIX_SEM now that we + emulate it for VxWorks. + + * tests/Priority_Task_Test.cpp: use THR_SCHED_FIFO unconditionally + now that it's defined on all platforms. + + * include/makeinclude/platform_chorus.GNU, + platform_hpux_gcc.GNU, + platform_linux*.GNU, + platform_m88k.GNU, + platform_osf1_4.0_g++.GNU, + platform_sco*.GNU, + platform_sunos*_g++.GNU, + platform_unixware_g++.GNU, + g++ only: replaced PRELIB with "true" because it's not + needed for template instantiation. The old PRELIB no longer + worked without -lACE being added to LIBS in individual Makfiles. + The only reason to leave PRELIB defined to something is so that + the shared object definitions will be correct in rules.lib.GNU. + That should be fixed after 4.3 is released. + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: + PRELIB no longer needed with explicit template instantiation. + +Thu Aug 21 12:38:26 1997 Steve Huston + + * ace/config-hpux-10.x.h: Removed extraneous #endif + +Thu Aug 21 12:21:16 1997 Nanbor Wang + + * ace/OS.h (THR_JOINABLE): Defined this macro for Win32 as 0. + +Wed Aug 20 22:36:52 1997 Douglas C. Schmidt + + * ACE version 4.2.44, released Wed Aug 20 22:36:52 1997. + +Wed Aug 20 18:28:28 1997 Steve Huston + + * ace/config-hpux-10.x.h: Made some definitions dependent on the + HP-UX version that is compiling the code. + + * ace/Filecache.(cpp h): Moved the definition of ACE_Filecache_Object + from .cpp to .h to help AIX xlC's template instantiator along. + + * apps/Gateway/Peer/Peer.(cpp h): Moved the definition of Peer_Handler + from .cpp to .h to help AIX xlC's template instantiator along. + + * include/makeinclude/platform_(hpux hpux_aCC hpux_gcc).GNU: Added + a compiler option to define HPUX_VERS with the current OS version. + Used in the config-hpux-10.x.h file. + +Wed Aug 20 13:44:16 1997 Carlos O'Ryan + + * ace/config-unixware-2.1.2-g++.h: + Unixware does not define timespec_t. Thanks to Ganesh Pai + for pointing out this one. + +Wed Aug 20 11:37:44 1997 David L. Levine + + * include/makeinclude/rules.bin.GNU,platform_vxworks5.x_g++.GNU: + added POSTLINK to build symbol table. + +Wed Aug 20 07:43:14 1997 Douglas C. Schmidt + + * ACE version 4.2.43, released Wed Aug 20 07:43:14 1997. + +Tue Aug 19 08:25:28 1997 Steve Huston + + * tests/Barrier_Test.cpp: Added THR_JOINABLE to the flags for + creating threads - allows join to work on platforms that create + threads detached by default (i.e. AIX). + + * tests/Process_Strategy_Test.cpp: If the final ACE_OS::kill() fails, + don't ACE_OS::wait() for the process. + + * ace/config-aix-4.2.x.h: Added ACE_HAS_BROKEN_POSIX_TIME. Commented + out ACE_HAS_AIX_BROKEN_SOCKET_HEADER. Added ACE_HAS_PTHREAD_T, + and will now not use tid_t for any ACE types. Rearranged things + to start clarifying items. + + * ace/config-hpux-10.x.h: Removed ACE_HAS_SETKIND_NP and adjusted + other, more meaningful, threads-related definitions to match what + HP 10.10 and 10.20 have for threads. This matches changes to OS.* + + * ace/OS.(h i cpp): Removed use of ACE_SETKIND_NP in an effort to + simplify the variety of threads-capability definitions. The only + platforms which used ACE_HAS_SETKIND_NP were HP-UX (see above) and + OSF/1 V3.2 (which has the same threads package as HP-UX). OSF/1 + V3.2 may require some adjustments per this change - it probably + should be changed to match HP-UX. OSF/1 V4 (aka Digital UNIX) + is not affected by this change. + + * ace/Log_Msg.cpp: Changed the 't' format (thread ID) to call + thread_self() directly on AIX. + +Mon Aug 18 21:39:33 1997 Douglas C. Schmidt + + * ACE version 4.2.42, released Mon Aug 18 21:39:33 1997. + +Mon Aug 18 20:22:14 1997 Carlos O'Ryan + + * apps/Gateway/Peer/Makefile: + No need to define LIBS=-lACE here, its already done in + wrapper_macros.GNU. Thanks to Cary Clark + for helping in this effort. + +Mon Aug 18 19:54:36 1997 Nanbor Wang + + * ace/OS.{h,i} (open, mutex_init, sema_init, event_init, mmap): + Added an extra argument LPSECURITY_ATTRIBUTE with default value + 0 to all these methods so that we can modify objects' security + attributes when needed. Thanks to Ivan Murphy for pointing this + out. + +Mon Aug 18 19:50:13 1997 Carlos O'Ryan + + * examples/Service_Configurator/Makefile: + * examples/Service_Configurator/IPC-tests/server/Makefile: + * apps/Gateway/Gateway/Makefile: + * examples/Connection/non_blocking/Makefile: + $(SOEXT) must be used instead of just .so, the former does not + work on all platforms, notably HP-UX. Thanks to Cary Clark + for helping in this effort. + +Mon Aug 18 19:46:27 1997 Carlos O'Ryan + + * ace/OS.i: + Added support for the missing netdb reentrant functions, even + under IRIX 6.2 with no threads. Thanks Paul Roman + for reporting this. + +Mon Aug 18 12:53:16 1997 David Levine + + * tests/Barrier_Test.cpp (tester): VxWorks doesn't support + thr_join(). Therefore, we need to work around it for now. + Maybe Wind River will fix it at some point. + +Mon Aug 18 12:38:52 1997 Steve Huston + + * ace/config-aix-4.2.x.h: Removed ACE_HAS_SVR4_TIME, added + ACE_LACKS_TIMESPEC_T. + +Mon Aug 18 12:00:31 1997 Carlos O'Ryan + + * ace/config-mvs.h: + MVS does not define timespec_t either. Thanks to Chuck + Gehr for reporting this. + +Mon Aug 18 10:41:05 1997 Carlos O'Ryan + + * ace/OS.h: + * ace/README: + On some platforms timespec_t is not defined. We added a new + config macro (ACE_LACKS_TIMESPEC_T) to handle that and we do a + typedef to solve the problem. + + * ace/config-freebsd-pthread.h: + * ace/config-freebsd.h: + * ace/config-linux-lxpthreads.h: + * ace/config-linux-pthread.h: + * ace/config-linux.h: + These are *some* config files that needed changes due to the new + timespec_t stuff. + +Mon Aug 18 09:34:11 1997 David L. Levine + + * ace/OS.cpp (ACE_Thread_Adapter): rearranged initializers to + match declaration order. + + * ace/Log_Record.h: declare "class ostream" if + ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION Log_Record.h. + + * ace/IOStream.h,Log_Msg.cpp,Log_Record.cpp, + tests/test_config.h: include iostream.h instead of ace/stdcpp.h + if ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION. + + * ace/config-vxworks*.h: added ACE_LACKS_TIMESPEC_T. + +Sun Aug 17 20:58:56 1997 Douglas C. Schmidt + + * ACE version 4.2.41, released Sun Aug 17 20:58:56 1997. + +Sun Aug 17 17:02:53 1997 Carlos O'Ryan + + * ace/config-irix6.x-sgic++-nothreads.h: + * ace/config-irix6.x-sgic++.h: + * include/makeinclude/platform_irix6.x-sgic++.GNU: + Finally a single config.h and platform_macros.GNU file can be use + for all the IRIX 6.X versions. + On SGI machines we need a higher value for + ACE_DEFAULT_BASE_ADDR, we used 1024*1024*1024, which works on + our site, but your mileage may vary. + + * include/makeinclude/platform_irix6.2_sgic++.GNU: + * include/makeinclude/platform_irix6.4_sgic++.GNU: + * ace/config-irix6.2-sgic++-nothreads.h: + * ace/config-irix6.2-sgic++.h: + * ace/config-irix6.4-sgic++-nothreads.h: + * ace/config-irix6.4-sgic++.h: + These files are no longer needed, see above. + + * ace/README: + * ace/ACE.cpp: + * ace/OS.h: + * ace/OS.i: + * ace/Profile_Timer.cpp: + * ace/Profile_Timer.h: + We no longer use timestruct_t in ACE, it is a SYSVism; we use + timespec_t instead. Hence we have no need for the config + macro ACE_HAS_SVR4_TIME, but we keep it there for future + reference. + + * tests/Reader_Writer_Test.cpp: + On IRIX using ACE_Thread::yield() degraded performance for + multiprocessor machines, but worse, the test will not behave as + expected: instead of interleaving read/write locks over the + RW_Mutex it will make all the write locks first and then the read + locks. The test uses ACE_OS::sleep() for yielding the CPU, + and it uses different pauses for each thread (see code for + details). Further, it yields the CPU *before* taking the + lock, to give other threads a chance. + +Sat Aug 16 18:17:10 1997 Douglas C. Schmidt + + * ACE version 4.2.40, released Sat Aug 16 18:17:10 1997. + +Sat Aug 16 18:13:22 1997 Douglas C. Schmidt + + * ace/ReactorEx.cpp (add_network_events_i): Revised the code to + use the ACE_BIT_CMP_MASK and ACE_SET_BITS macros to simplify the + code. + + * ace/OS.h: Added a new macro called ACE_BIT_CMP_MASK which checks + if a "bit-wise" & with a word == a particular mask. + + * ace/OS.cpp (thr_create): If we're in the Pthreads implementation + then we assume that ACE_thread_t and ACE_hthread_t are the same. + If this *isn't* correct on some platform, please let us know. + Thanks to Carlos O'Ryan . + + * ace/Auto_Ptr.cpp: Reverted the changes of ACE_Auto_Ptr to + auto_ptr since we want to be Standard C++ Library compliant. + However, we only define auto_ptr if ACE_HAS_STANDARD_CPP_LIBRARY + is *not* enabled. + + * Removed the INSTALL file since this is redundant with the HTML + version of this file (ACE-INSTALL.html). Thanks to David Levine + for doing the legwork to merge this. + +Sat Aug 16 15:11:24 1997 Darrell Brunsch + + * ace/Auto_Ptr.h: Put in an #include (for auto_ptr) if + the standard C++ library is being used. + + * ace/Auto_Ptr.*: Changed the checks for ACE_HAS_STANDARD_CPP_LIBRARY + to also check to see if it is defined to 0 (which means the same + as it not being defined). + + * ace/ReactorEx.cpp: Changed the use of auto_ptr to work with + the one in the Standard C++ library. + + * ace/config-win32-common.h: Added ACE_HAS_BROKEN_NESTED_TEMPLATES + and ACE_LACKS_STL_DEFAULT_TEMPLATE_PARAMETER for the MSVC versions + that need them. + + * ace/Registry.cpp: changed some variable names from iterator to + iter to prevent conflicts with another variable + + * ace/Registry.cpp: + STL/bstring.h: + + Changed references of NPOS to Istring::npos + +Sat Aug 16 14:17:07 1997 Carlos O'Ryan + + * ace/Auto_Ptr.i: + * ace/Auto_Ptr.cpp: + Some code was only included if ACE_HAS_STANDARD_CPP_LIBRARY was + defined; but the intention was exactly the opposite. + +Sat Aug 16 14:33:26 1997 David L. Levine + + * README,FAQ,Makefile: changed references from INSTALL file + to ACE-INSTALL.html. + +Fri Aug 15 19:51:52 1997 + + * ace/Auto_Ptr.h: A rarely used piece of ACE code has changed + names because of name conflicts with the Microsoft Standard C++ + Library. The change is from auto_ptr to ACE_Auto_Ptr. A perl + script ($ACE_ROOT/bin/auto_ptr.perl) is provided for users to + change their code accordingly. + + The following files were effected: + + ace: ACE.cpp Auto_Ptr.cpp Auto_Ptr.h Auto_Ptr.i OS.h + ReactorEx.cpp Service_Config.cpp Service_Object.h + + examples/Threads: future1.cpp future2.cpp test_future1.cpp + test_future2.cpp + + tests: Future_Test.cpp + +Fri Aug 15 17:41:28 1997 Douglas C. Schmidt + + * ACE version 4.2.39, released Fri Aug 15 17:41:28 1997. + +Fri Aug 15 13:33:04 1997 Nanbor Wang + + * ace/OS.h (ACE_DEFAULT_GLOBALNAME_W): Moved pathname delimiter + from ACE_DEFAULT_{LOCAL|GLOBAL}NAME_* to + ACE_DEFUALT_NAMESPACE_DIR on NT. We need to append local/global + name to get a unique mutex name for naming service. NT won't + let us put a backslash in lock name. ;( + +Fri Aug 15 14:50:26 1997 Steve Huston + + * ace/Makefile: Moved ARGV from the TEMPLATES section to the FILES + section; now builds on AIX. + + * ace/config-hpux-10.x.h: Don't redefine _HPUX_SOURCE. Move the + ACE_HAS_REENTRANT_FUNCTIONS and ACE_CTIME_R_RETURNS_INT to the + build-with-threads section. Thanks to Neil Cohen + for helping to flush these problems out. + + * tests/Makefile: If building on AIX, wipe out the tempinc directory + before each compilation to keep the driver from compiling all + prior programs' template instantiations in every link step. + +Fri Aug 15 13:07:26 1997 Douglas C. Schmidt + + * ace/Signal.cpp (remove_handler): Added some additional + parameters to ACE_Sig_Action usages in order to get this stuff + to compile with G++ on SunOS 4.1.4. Thanks to Kumar Neelakantan + for reporting this. + + * ACE version 4.2.38, released Thu Aug 14 23:07:26 1997. + +Fri Aug 15 13:33:04 1997 Nanbor Wang + + * ace/Naming_Context.cpp (ACE_Naming_Context): Moved the deletion + of name_options_ from close to dtor of this class so that we can + reconfigure the naming context. + +Fri Aug 15 10:28:14 1997 Darrell Brunsch + + * ace/OS.cpp: Changed uname() for Win32 so it returns information + for Windows 95 and NT. + +Thu Aug 14 18:06:37 1997 Chris Cleeland + + * ace/OS.[hi] (strsplit_r): Added a new method which splits a + string separated by tokens, similar to the way that perl's + split() works. This is different from the strtok() family b/c + for the string ":/foo:/bar::boo", strtok() would return "/foo", + "/bar", "boo", while strsplit_r() returns "", "/foo", "/bar", + "", "boo". This method is also properly re-entrant, and thus + safe to use among multiple threads. + + * ace/ACE.cpp (ldfind): Fixed this so that it now properly deals + with paths containing empty components intended to indicate + 'current directory'. + +Thu Aug 14 17:30:36 1997 Steve Huston + + * ace/config-hpux-10.x.h - Add ACE_LACKS_CONST_STRBUF_PTR, remove + ACE_HAS_POSIX_SEM, clarify comments regarding setting of + _CMA_NOWRAPPERS_ - thanks to Cary Clark for + helping in this effort. + +Thu Aug 14 16:14:47 1997 David L. Levine + + * ace/High_Res_Timer.cpp (print_ave,print_total): fixed format + specification for total_secs to be lu instead of lld. + +Thu Aug 14 14:06:37 1997 Chris Cleeland + + * ace/ARGV.cpp: Completed the explicit template instantiations for + this component. + +Thu Aug 14 11:27:03 1997 Edward Everett Anderson + + * ace/ARGV.* (argv): + + * Added another behavior to ACE_ARGV -- a user can iteratively + build the parameter set with add(). Made the class more + consistent so that accessors work no matter which constructor is + used. + +Thu Aug 14 10:14:37 1997 Darrell Brunsch + + * Made several changes to allow ACE to work with the new standard + C++ header files, such as and the built in STL. Thanks + to Matthias Kerkhoff for these changes. + The default is to use the old headers, unless the + ACE_HAS_STANDARD_CPP_LIBRARY is defined as 1. + + * ace/config-win32-common.h: + ace/config-win32.h: + + - Added ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB flag to + distinguish compilers who have the standard C++ library + declared in the namespace std and those who use the global + namespace for it + + - Enabled ACE_HAS_SIG_ATOMIC_T and ACE_HAS_TYPENAME_KEYWORD for + MSVC 5 + + - Changed the semantics of ACE_HAS_STANDARD_CPP_LIBRARY from + [defined/undefined] to [(undefined or defined as 0)/defined != 0] + to allow the choice between the old iostream and standard C++ + library for those platforms that support both + + - Don't define the ACE_LACKS_IOSTREAM_FX when building with MSVC + 5.0 and the standard C++ library. + + - If __ACE_INLINE__ is defined as 0, config-win32-common.h + undefines __ACE_INLINE__ to decrease the size of libraries and + executables. + + * ace/IOStream.cpp: Moved the #ifdef ACE_LACKS_ACE_IOSTREAM up to the + proper place + + * ace/IOStream.h: + ace/IOStream_T.h: + ace/Log_Msg.cpp: + ace/Log_Msg.h: + ace/Log_Record.cpp: + ace/Log_Record.h: + examples/ASX/Message_Queue/*.dsp: + examples/OS/Process/*.dsp: + examples/Threads/*.dsp: + examples/Threads/barrier2.cpp: + examples/Threads/task_three.cpp: + netsvcs/lib/Logging_Strategy.cpp: + + Updated to including stdcpp.h instead of , + , , etc. + + * ace/OS.h: Updated to use stdcpp.h instead of including the + normal C headers. Moved the includes into stdcpp.h to allow + switching between the old and new versions + + * ace/Registry.h: Changed to use the standard C++ headers for STL + and added a typedef Name_Component and Binding to + ACE_Registry::* to help some unresolved problems. + + * tests/Hash_Map_Manager_Test.cpp: + tests/test_config.h: + + Updated to #include ace/stdcpp.h instead of and + + + * ace/stdcpp.h: Updated to include more of the new standard C++ + header files, and also promote some of the iostream classes to + the global namespace. + + * ace/ace.dsp: + + - Added some folders like Templates and Documentation + - Added some files that were missing to the project + - Enabled function level linking for debug projects + - Set it to "Not using MFC" + - Removed wsock32.lib from the project settings (since + config-win32-common.h will tell the linker to use the correct + winsock library) + - Removed some other unnecessary libraries (OLE) from the + project. + +Wed Aug 13 23:02:45 1997 Douglas C. Schmidt + + * ACE version 4.2.37, released Wed Aug 13 23:02:45 1997. + +Wed Aug 13 13:26:27 1997 Douglas C. Schmidt + + * tests/Barrier_Test.cpp (main): Fixed the test of the ACE_Barrier + class so that it doesn't leak handles. This also illustrates + the use of the ACE_Thread::join() and + ACE_Thread_Manager::spawn_n() methods. Thanks to Ivan Murphy + for pointing this out. + + * ace/Thread_Manager.cpp (spawn_n): Note that if we get a null + thread_ids parameter we shouldn't try to index into it! + + * include/makeinclude/rules.local.GNU (OBJDIRS): Added + so_locations to the list of directories cleaned up during a make + clean/realclean. Thanks to Amos Shapira for reporting this. + + * ACE version 4.2.36, released Wed Aug 13 07:30:10 1997. + + * include/makeinclude/platform_irix6.[x-]32_sgic++.GNU: Added a + -Wl,-woff,133 to LDFLAGS to make the linker shutup about branch + instructions that might degrade performance + (what does this mean?). Thanks to Amos for this. + + * tests/test_config.h: Fixed a typo (ourput_file() should be + output_file()). How on earth did this ever work?! Thanks to + Amos Shapira for reporting this. + + * ace/Message_Queue.cpp: Added a couple of new ACE_UNUSED_ARGs + Thanks to Amos Shapira for reporting this. + + * ace/OS.cpp (gethrtime): ACE_OS::gethrtime should cast its return + value to ACE_hrtime_t instead of (u_long long). Thanks to + Amos Shapira for reporting this. + +Wed Aug 13 14:51:47 1997 Darrell Brunsch + + * ace/SString.[i,cpp]: moved some inline methods from the .i into + the .cpp so the Win32 Unicode Release compiles with inlining. + +Wed Aug 13 01:14:08 1997 Nanbor Wang + + * tests/test_config.h (ACE_NEW_THREAD): Removed + ACE_Log_Msg::set_flags/clr_flags from this macro because + ACE_Log_Msg::flags is a static variable. We really don't need + to reset them when creating new threads. Once VxWorks can also + inherit ACE_Log_Msg's properties, we no longer need this macro. + + * ace/Log_Msg.h: Added trace_depth() functions. They are required + for inheriting ACE_Log_Msg's properties. + + * ace/OS.cpp: Changed ACE_Thread_Adapter implementation so that + newly created threads will inherit properties from their parent + threads. This is the default behavior and is valid on all + platform except VxWorks. If you don't want it and would like to + arrange the properties propagation yourself, you must define + ACE_THREADS_DONT_INHERIT_LOG_MSG in your ace/config.h file. Now, + creating a new thread will go thru ace_thread_adapter on all + platform except VxWorks. If ACE_THREADS_DONT_INHERIT_LOG_MSG is + defined but your platform defines ACE_HAS_THR_C_FUNC or + ACE_WIN32, creating new threads still need to use + ace_thread_adapter. This change also fixes a previous problem + which let threads access another thread's TSS. + +Tue Aug 12 21:57:30 1997 David L. Levine + + * etc/ACE-guidelines.html: added. + +Tue Aug 12 16:54:33 1997 Douglas C. Schmidt + + * Added Chuck Gehr's explanation of how to build ACE for MVS to + the ACE-INSTALL.html file at http://www.cs.wustl.edu/~schmidt/. + + * ace/OS.i: changed the name of ACE_U_LongLong::dump() to + ACE_U_LongLong::output(). Also moved some of the code that was + inlined in the class definition into the *.i file. + + * netsvcs/lib/Server_Logging_Handler.cpp: Added a template + specialization for ACE_Atomic_Op to + make things link with SGI and other systems that have long + different than int. Thanks to Amos Shapira for reporting this. + + * ace/Reactor.cpp (close): Removed the #ifdefs around + notify_handler_.open () and notify_handler_.close() since this + is now supposed to be available on all build configurations. + Thansk to Stefan Ericsson for reporting this. + + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp: + Removed a static variable that seemed to be causing problems for + SGI C++. Also, removed the now unnecessary "inherited" from + Handle_Thr_Acceptor. + + * examples/ASX/UPIPE_Event_Server/Peer_Router.h, + * netsvcs/lib/Log_Message_Receiver.h: Added an + ACE_UNIMPLEMENTED_FUNC macro for the assignment operator to work + around silly "features" of SGI C++... + + * include/makeinclude/platform_irix6.[x-]32_sgic++.GNU: Added some + additional patches to suppress warning code. Thanks to Torbjorn + Lindgren for this fix. + + * include/makeinclude/platform_mvs.GNU: Changed all occurrences of + "MVSLIB" to "ACELIB". Thanks to Chuck Gehr for reporting this. + +Tue Aug 12 15:03:42 1997 Steve Huston + + * ace/Timer_Hash_T.cpp, Timer_Wheel_T.cpp: Replaced references to + ACE_High_Res_Timer::gettimeofday with ACE_OS::gettimeofday. + The High Res version is deprecated, and doesn't work + correctly on HP-UX. + +Tue Aug 12 07:51:02 1997 Douglas C. Schmidt + + * ACE version 4.2.35, released Tue Aug 12 07:51:02 1997. + +Mon Aug 11 22:30:39 1997 David L. Levine + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: disabled + automatic template instantiation, because we use explicit + template instantiation, via a #pragma, with Green Hills. + Thanks to Brian Mendel for + finding the compiler options. + +Mon Aug 11 17:45:44 1997 Nanbor Wang + + * ace/OS.cpp (ace_thread_adapter): Changed the code so that TSS + ACE_Log_Msg will get created and put into cleanup stack first no + matter there is other ACE_Log_Msg instances or not. This fixed + the "order of destruction" problem on Win32 platform. Thanks to + Irfan for digging this out and helping solving it. + +Mon Aug 11 07:25:29 1997 + + * examples/Reactor/ReactorEx/test_reactorEx.cpp: Updated this + example to use the new Proactor and Asynch IO interfaces. + + * ace/Connector.cpp (activate_svc_handler): Fixed the "leak" of + svc_handler in case of error. Thanks to Wei Chiang + for reporting this. + +Mon Aug 11 01:11:26 1997 Douglas C. Schmidt + + * ACE version 4.2.34, released Mon Aug 11 01:11:26 1997. + +Mon Aug 11 01:06:02 1997 Douglas C. Schmidt + + * ace/Message_Queue.cpp (enqueue_tail_i): Inadvertantly + added "signal_dequeue_waiters()" where I meant + "signal_enqueue_waiters()." + + * include/makeinclude/wrapper_macros.GNU: Fixed a typo in the + wrapper_macros.GNU file that was causing link errors. + +Sun Aug 10 11:35:06 1997 Douglas C. Schmidt + + * ace/Message_Queue.cpp: To make sure that we have correctly + signaled waiters the signal_enqueue_waiters() and + signal_dequeue_waiters() methods now check the return value from + the semaphore release if ACE_HAS_OPTIMIZED_MESSAGE_QUEUE is + enabled. + + * include/makeinclude/wrapper_macros.GNU (VLDLIBS): Added a + new macro called ACELIB that can be used to make it easier + to enable static linking for ACE, i.e.: + + ACELIB = -Bstatic -lACE -Bdynamic + + or + + ACELIB = $(ACE_ROOT)/ace/libACE.a + + Can be added to the individual platform_macros.GNU file. This + allowed us to remove special code for MVS in wrapper_macros.GNU. + Thanks to Chuck Gehr for this fix. + + * netsvcs/lib: Added some comments after the #endifs. + + * ace/Filecache.cpp (insert_i): Updated the code so that we use + ACE_NEW_RETURN rather than operator new. This macro will + protect against failed allocations. + +Sat Aug 9 22:08:50 1997 Douglas C. Schmidt + + * ace: Added two new config files: + + config-irix6.x-sgic++.h + config-irix6.x-sgic++-nothreads.h + + This should hopefully consolidate the SGI platform + configuration. Thanks to Torbjorn Lindgren for + this fix. + + * include/makeinclude: Added two new platform macro files: + + platform_irix6.x-n32_sgic++.GNU: + platform_irix6.x-32_sgic++.GNU + + This should hopefully consolidate the SGI platform macros. + Thanks to Torbjorn Lindgren for this fix. + + * ace/Filecache.cpp: Fixed the syntax of the SGI pragma stuff. + Thanks to Torbjorn Lindgren for reporting this. + + * ace/Name_Request_Reply.h: Changed MAX_NAME_LEN to MAX_NAME_LENGTH + to avoid problems with Solaris 2.6. Thanks to Thanh Ma + for reporting this. + +Sat Aug 9 12:10:35 1997 Nanbor Wang + + * ace/config-win32-common.h (ACE_HAS_WINSOCK2): + * ace/config-win32.h (ACE_HAS_WINSOCK2): Rearranged definition of + this so that users can overwrite the default setting and choose + older Winsock if they want. No action needed for most NT + useres. Thanks to jmorey@tbi.com (John Morey) for pointing this + out. + +Sat Aug 09 11:28:36 1997 Steve Huston + + * ace/Profile_Timer.i: ACE_HAS_GETRUSAGE and !ACE_HAS_PRUSAGE + platforms now use ACE_OS::gettimeofday rather than + ACE_High_Res_Timer::gettimeofday in start() and stop() methods. + + * tests/Sigset_Ops_Test.cpp: adjusted test for sigismember() with + out-of-range signum to separately test return value and errno. + Also, returns non-zero from program on failed test. + +Fri Aug 08 17:39:43 1997 Douglas C. Schmidt + + * ACE version 4.2.33, released Fri Aug 08 17:39:43 1997. + +Fri Aug 08 02:50:31 1997 Douglas C. Schmidt + + * ace/Message_Queue: Factored out the code that differs depending + on whether we are using the optimized ACE_Message_Queue + implementation (i.e., VxWorks and NT). This change makes it + easier to maintain the code. Thanks to Darrell for helping with + this. + + * ace/Log_Msg.cpp (close): Fixed a couple of typos in this code, + in particular, we need to make sure that we don't call + ACE_Log_Msg_Manager::close() if we aren't multi-threaded. + + * ACE version 4.2.32, released Fri Aug 08 02:50:31 1997. + +Fri Aug 8 13:17:21 1997 Chris Cleeland + + * ace/OS.* (strtoul): Added the OS function strtoul() to turn + strings into unsigned longs. + +Fri Aug 8 12:26:54 1997 Steve Huston + + * ace/Log_Msg.cpp: Fixed some comments and removed unused code + I erroneously added August 6. + + * ace/config-hpux-10.x.h: Fixed to not always compile tracing code. + + * tests/test_config.h: ACE_END_TEST and ACE_END_LOG macros direct + log output back to stderr when shutting off the file output. + + * tests/TSS_Test.cpp: Removed ACE_Thread_Control object from the main + thread - it served no purpose and didn't work on HP-UX (due to + a documented pthread_exit restriction). Also changed a 'delete + ptr' to a call on operator delete (void *). + +Fri Aug 8 09:17:21 1997 Chris Cleeland + + * ace/Service_Repository.h (operations.): Improved documentation + on find(). + +Fri Aug 8 00:01:43 1997 Nanbor Wang + + * ace/Log_Msg.cpp (close): Moved ACE_Log_Msg::close() out of + ACE_MT_SAFE block so it always exists. This function only takes + care of non-VxWorks platforms. + + (instance): Removed at_exit() call since the instances will be + taken of by TSS_Cleanup. + + * ace/Object_Manager.cpp (~ACE_Object_Manager): Removed condition + compilation so it always calls ACE_Log_Msg::close(). + +Thu Aug 7 23:36:26 1997 Douglas C. Schmidt + + * ace/Reactor.h: Added the renew() method and the notify_handler_ + data member to all compilation cases, not just for + multi-threading. + + * ace/Service_Config.h: Clarified the fact that argv[0] is the + program name. Thanks to Chris Cleeland for pointing this out. + + * ace/config-mvs.h: Added the ACE_HAS_TEMPLATE_SPECIALIZATION flag + thanks to Chuck Gehr. + + * include/makeinclude/platform_irix6.2_sgic++.GNU: Turned on + exceptions and turned off implicit template instantiation. + Thanks to Amos Shapira for reporting the + former. + + * ace/config-irix6.2-sgic++.h: Also added the + ACE_HAS_TEMPLATE_SPECIALIZATION flag and changed the + platform_irix6.2.GNU file to not implicitly initialize + templates. If this breaks something, please let me know. + + * ace/config-irix6.2-sgic++.h: Added the ACE_HAS_EXCEPTIONS flag. + Thanks to Amos Shapira for reporting this. + However, there is some question as to whether this will work. + If it doesn't, please let me know. + + * ace/Reactor: Moved the ACE_Reactory_Notify class out from the + ACE_MT_SAFE section into the main code since this should work + for non-threaded builds, as well. Thanks to Stefan Ericsson + for reporting this. + + * ace/config-chorus.h: Added the ACE_HAS_TEMPLATE_SPECIALIZATION + flag. Thanks to Wei Chiang for this. + +Thu Aug 7 19:09:35 1997 Steve Huston + + * tests/Hash_Map_Manager_Test.cpp - split definition of Dumb_String + class to a new header, Hash_Map_Manager_Test.h. This makes AIX + C Set ++ happy. + + * tests/Process_Strategy_Test.cpp - split definitions of Options + and Counting_Service classes to Process_Strategy_Test.h for AIX + C Set ++'s benefit. + +Thu Aug 7 15:27:28 1997 Darrell Brunsch + + * ace/OS.h: Fixed typo in the definition of ACE_SYNCH_1 and + ACE_SYNCH_2 for ACE_HAS_OPTIMIZED_MESSAGE_QUEUE + +Thu Aug 7 13:05:20 1997 Chris Cleeland + + * ace/Strategies_T.h: Changed the argument to ACE_DLL_Strategy + from ACE_Service_Config to ACE_Service_Repository, which is more + concrete. + + * bin/g++dep (REL): Added sed rule so that TAO's dependencies are + set relative to $TAO_ROOT as well as $ACE_ROOT when the '-r' + option is utilized. + + * include/makeinclude/platform_linux_lxpthread.GNU (CCFLAGS): The + -Wall option can now be used. It only generates two warnings + throughout all of ACE! + + * include/makeinclude/rules.local.GNU (depend.local): Modified + this target so that TAO's dependencies are set relative to + $TAO_ROOT as well as $ACE_ROOT. + +Thu Aug 7 12:03:48 1997 James C Hu + + * ace/Filecache.{h,cpp}: Fixed unused variable found by Amos + Shapira. Fixed TEMPLATE_SPECIALIZATION dependency, sort of. Do + not attempt to use Filecache if you do not support + TEMPLATE_SPECIALIZATION. + +Thu Aug 07 00:19:12 1997 Douglas C. Schmidt + + * ACE version 4.2.31, released Thu Aug 07 00:19:12 1997. + +Wed Aug 6 22:20:54 1997 Douglas C. Schmidt + + * ace/Synch_T.h: Replaced all uses of ACE_Null_Condition_Mutex + with ACE_Null_Condition, which is much more straightforward... + + * ASNMP: Added Mike MacFaden's changes for IRIX. + +Wed Aug 6 16:37:51 1997 James C Hu + + * ace/Hash_Map_Manager.cpp: Changed implementation back to use a + single sentinel_ rather than an array of them. + + * ace/Filecache.{h,cpp}: Total re-implementations. Fewer locks + acquired and released when there is a cache hit. + +Wed Aug 06 12:55:26 1997 Steve Huston + + * ace/Log_Msg.(h cpp): + (ACE_Log_Msg_Manager) - Removed most of the non-VxWorks + pieces - there's just a lock left; the instances_ was removed + (ACE_Log_Msg) - Use ACE_Object_Manager to remove per-thread + instances of ACE_Log_Msg rather than using ACE_Log_Msg_Manager. + The use of an ACE_Unbounded_Set to hold the ACE_Log_Msg pointers + in previous versions caused some non-tail recursion problems when + tracing was enabled. + Uses an instance count to know when it's safe to free the dynamically + allocated class-static memory. + + * ace/Trace.(h cpp): Added new static member function: + int is_tracing(void) - returns 1 if tracing is enabled, else 0. + + * ace/Object_Manager.(h cpp): Added a flag to indicate the object is + being destroyed - during destruction, ACE_Object_Manager now refuses + to register any new memory pointers. Also turns tracing off during + destruction - ACE_Log_Msg makes use of ACE_Object_Manager, so we + don't want ACE_Log_Msg instance being deleted, then created for a + ACE_TRACE, then deleted, then created,... + +Wed Aug 06 03:35:41 1997 Douglas C. Schmidt + + * ACE version 4.2.30, released Wed Aug 06 03:35:41 1997. + +Wed Aug 6 00:13:27 1997 Nanbor Wang + + * netsvcs/lib/Server_Logging_Handler.cpp: We only need to + instantiate ACE_Svc_Handler when + ACE_HAS_THREADS. Otherwise, we'll have duplicate symbols + defined on platforms that do not support threads. + +Tue Aug 5 19:52:36 1997 Douglas C. Schmidt + + * ace/Containers: Added a new reset method for ACE_Unbounded_Set. + Thanks to Arturo Montes for + reporting this. + + * ace: Changed most uses of ACE_LACKS_COND_T to + ACE_HAS_OPTIMIZED_MESSAGE_QUEUE to make it possible to toggle + between the emulated condition variable implementation of + ACE_Message_Queue and the semaphore implementation. We need + this until we fully test out the semaphore implementation of + ACE_Message_Queue. + + * ace/Object_Manager.cpp (ACE_Object_Manager): Only call the + ACE_Log_Msg::close() method if ACE_MT_SAFE is enabled! Thanks + to Satoshi Ueno for reporting this. + + * ace/Malloc.h: Added a fix for misalignment of data in the + ACE_CONTROL_BLOCK_ALIGN_LONGS macro. Thanks to Fred LaBar + for this fix. + + * ace/ACE.cpp: (enter_recv_timedwait,enter_send_timedwait): Always + give val a default value of 0 to make Purify happy. Thanks to + David Levine for reporting this. + + * netsvcs/clients/Tokens/rw_lock/rw_locks.cpp, + netsvcs/clients/Tokens/manual/manual.cpp, + netsvcs/clients/Tokens/deadlock/deadlock_detection_test.cpp: + Removed unreachable statements. Thanks to Cherif Sleiman + for reporting this deficiency and + testing the fix. + +Tue Aug 5 16:41:06 1997 Darrell Brunsch + + * ace/Synch_T.h: Added some more ACE_LACKS_COND_T changes for compilers + without template typdefs. + +Tue Aug 5 11:50:43 1997 Nanbor Wang + + * ace/Message_Queue.h: Fixed typos for the case when + ACE_LACKS_COND_T. + +Tue Aug 05 11:02:11 1997 + + * tests/Atomic_Op_Test.cpp (main): Made sure that on platforms + without threads, we don't try to run this test. + +Tue Aug 05 09:15:40 1997 David L. Levine + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: removed + -no_prelink from LDFLAGS because ghs 1.8.8 doesn't support it. + Thanks to Cherif Sleiman for + reporting this. + + * ace/Service_Record.cpp: added #include "ace/Stream_Modules.h" + to support template instantiation on GreenHills, at least. + Thanks to Cherif Sleiman for + reporting this deficiency and testing the fix. + + * ace/config-vxworks-ghs-1.8.h: added + ACE_LACKS_LINEBUFFERED_STREAMBUF. Thanks to Cherif Sleiman + for reporting this. + +Mon Aug 4 22:47:54 1997 Douglas C. Schmidt + + * ace/Message_Queue: Fixed consistency problems in naming notfull + vs. not_full. Thanks to David Levine for finding this. + + * ace/Message_Queue: Added specialized support for cases where + ACE_LACKS_COND_T (e.g., VxWorks and NT). This scheme uses + ACE_Thread_Semaphores in this case, which should be more + efficient). + + * ace/Synch_T.h: Added a new set of macros and typedefs for + ACE_SYNCH_SEMAPHORE. + + * examples/ASX/Message_Queue: Cleaned up all the Message_Queue + examples. + + * examples/ASX/Message_Queue/buffer_stream.cpp: Added a + NUL-terminator to the program so that it won't break. Thanks to + Darrell for finding this. + + * ace/Reactor.cpp (wait_for_multiple_events): Fixed some + stylistic problems in the Reactor. + + * ace/Synch.cpp (ace_static_object_lock_atexit): Changed from: + + extern "C" static void + + to: + + extern "C" void + + Thanks to Chuck Gehr for this. + +Mon Aug 4 14:03:22 1997 Steve Huston + + * tests/Enum_Interfaces_Test.cpp: return non-zero if test fails. + +Mon Aug 4 12:03:29 1997 Darrell Brunsch + + * tests/Semaphore_Test: Redid to test timed waits in a more + reasonably fashion. + +Mon Aug 4 11:43:09 1997 Douglas C. Schmidt + + * ace/OS: Continued to cleanup the problems with inconsistent + variants of sendmsg() and writev() on VxWorks. Thanks to Cherif + Sleiman for reporting this. + + * ace/OS.i (sema_wait): Fixed the implementation on NT so that + errno = ETIME. + + * tests/Semaphore_Test.cpp: Cleaned up the programming style a + bit. + + * ace/OS (writev): Removed the ACE_WRITEV_TYPE from the + ACE_OS::writev() method and instead put this as a cast on the + internal call to ::writev(). This is much cleaner and should + fix a bug introduced last night. Thanks Cherif Sleiman + for reporting this. + + * ace/Synch: Added a new release() method to ACE_Semaphore that + enables a caller to release multiple waiters. Thanks to Darrell + Brunsch for noticing this. + +Mon Aug 4 12:03:29 1997 Darrell Brunsch + + * tests/Semaphore_Test: Redid to test timed waits in a more + reasonably fashion. + +Sun Aug 03 23:47:13 1997 Douglas C. Schmidt + + * ACE version 4.2.29, released Sun Aug 03 23:47:13 1997. + +Sun Aug 3 22:18:33 1997 Douglas C. Schmidt + + * tests/Atomic_Op_Test.cpp: Added template specialization so that + David won't have to ;-) + + * ace/ACE: Added a new, complete set of send/recv operations with + timeouts. These implement the following methods: + + read, readv, write, writev, recv, recvfrom, recvmsg, send, sendto, sendmsg. + + The implementation provides two flavors: MIT pthread support, an + ACE portable support. To use MIT pthread support, you must to + define ACE_HAS_READ_TIMEDWAIT, ACE_HAS_READV_TIMEDWAIT, + ACE_HAS_WRITE_TIMEDWAIT, ACE_HAS_RECV_TIMEDWAIT, + ACE_HAS_RECVFROM_TIMEDWAIT, ACE_HAS_RECVMSG_TIMEDWAIT, + ACE_HAS_SEND_TIMEDWAIT, ACE_HAS_SENDTO_TIMEDWAIT and + ACE_HAS_SENDMSG_TIMEDWAIT respectively. See the config.h file + for SCO UNIX for an example. + + This new approach is not only more powerful (since it takes + advantage of OS-level mechanisms when they exist), but it also + greatly improves the modularity of the code and provides a + wider range of supported functionality. Thanks to Arturo + Montes for this new feature. + + * ace/ACE.cpp: Added comments to the ACE_Object_Manager_Destroyer + class. + + * ace/OS.h: Redid all the function prototypes for class ACE_OS so + that it's easier to read the arguments. + + * ace/config-sco-5.0.0-mit-pthread.h: Added the new macros that + enable timed reads and writes. Thanks to Arturo Montes + for this new feature. + + * ace: Added a corresponding #endif /* FOO */ for all #if defined + (FOO) in ACE. + + * ace: Changed all uses of ACE_IOStream_T to ACE_IOStream to + be more consistent with other uses of templates in ACE. + Thanks to Thilo for reporting this (and thanks to David + for not being offended ;-)). + + * ace/OS.i (operator/): Removed "const" from both the OS.h and + OS.i files for ACE_U_LongLong::operator/. It is redundant, + potentially confusing, and gives warnings on some compilers! + +Sun Aug 03 21:20:12 1997 + + * tests/Atomic_Op_Test.cpp: Added new test to test the Atomic + Operations Class in ACE. On platforms like Win32, ACE uses + template specialization to use native implementations provided + by the OS to accelarate these operations. + + * ace/config-win32-common.h (ACE_HAS_INTERLOCKED_EXCHANGEADD): + Added macro to config file. This macro is automatically set true + for NT4.0 systems or greater. + + * ace/Atomic_Op.i: On Win32 platforms, this code will be included + as template source code and will not be inlined. Therefore, we + first turn off ACE_INLINE, set it to be nothing, include this + code, and then turn ACE_INLINE back to its original setting. All + this nonsense is necessary since the generic template code that + needs to be specialized cannot be inlined, else the compiler + will ignore the specialization code. Also, the specialization + code *must* be inlined or the compiler will ignore the + specializations. + + The creation of this new file is necessary for non-Win32 + platforms to continue to inline the code as before. + + * ace/Synch_T.cpp: This file must include Atomic_Op.i if + ACE_INLINE has not be turned on. If it is, this file must be + included by Synch_T.h. + + * ace/Synch.cpp: Moved the specialization code from Synch.cpp to + Atomic_Op.i. This is necessary, otherwise the compiler will + ignore the specialization. + +Sun Aug 03 10:51:34 1997 David L. Levine + + * ace/config-osf1-4.0*.h: added #define ACE_HAS_LONGLONG_T. + Thanks to Thilo for reporting that OSF1-4.0 does. + +Sat Aug 02 23:51:19 1997 Douglas C. Schmidt + + * ACE version 4.2.28, released Sat Aug 02 23:51:19 1997. + + * ace/TTY_IO.cpp (control): Fixed a bug when using 8 bits for + character due to ISTRIP flag setting for device. Thanks to + Arturo Montes for reporting this bug. + + * ACE-categories: Updated the list of ACE classes to reflect + recent changes. + + * ASNMP: Added the new ACE+SNMP release courtesy of Mike + MacFaden . This builds cleanly on Solaris, + but it looks like there are a bunch of non-portable features + that won't compile cleanly on all the other platforms. + Therefore, until Mike or others get this stuff fully portable, + it won't be build by default in the top-level ACE Makefile. + + * ace/OS.h (class ACE_U_LongLong): Reformatted this a bit. + + * ace/SV_Semaphore_Simple.i: Removed the #include of + SV_Semaphore_Simple.h since it seems unnecessary and is causing + problems for TAO. + + * ace/IOStream_T.h (ACE_IOStream_T): Removed the unneeded ';' at + the end of the ACE_UNIMPLEMENTED_FUNC macros since this was + causing compiler errors. + +Sat Aug 02 13:11:22 1997 David L. Levine + + * ace/Synch.cpp (ACE_Static_Object_Lock::instance): commented + out call to ::atexit () because it causes shutdown problems + on DEC CXX, HP/UX, and AIX. Many thanks to James Johnson + for tenaciously tracking this one down, to Thilo and Steve + for assisting, and to all who reported the problem. + + * ace/Log_Msg.cpp (ACE_Log_Msg_Manager::open,close): neutered + on VxWorks, only, so that it will compile. + +Fri Aug 1 21:33:18 1997 Nanbor Wang + + * netsvcs/lib/netsvcs.mak: Added post compilation command that + copies DLL to ace/ directory because netsvcs/main.exe must have + this file in search path. + + * ace/Read_Buffer.cpp (ACE_Read_Buffer): Used ACE_OS::fdopen + instead of ::fdopen because it caused compilation error on NT. + +Fri Aug 1 17:25:04 1997 Chris Cleeland + + * include/makeinclude/platform_irix6.4_sgic++.GNU (CCFLAGS): Used + -ptnone and -no_prelink in order to get SGI to compile properly. + + * ace/config-irix6.4-sgic++.h (ACE_HAS_EXCEPTIONS): Added + ACE_HAS_EXCEPTIONS to this config. + + * ace/IOStream_T.h (ACE_IOStream_T): Wrapped send, recv, send_n, + and recv_n with the ACE_UNIMPLEMENTED_FUNC macro. + +Fri Aug 1 17:08:32 1997 Nanbor Wang + + * ace/ace.mak: Put OS.cpp back into the makefile. + + * ace/config-win32-common.h: Commented out checking of + ACE_HAS_WINSOCK2 when we are using NT 4.0 and above. The + original check prevented us from using winsock2. + + * ace/Thread_Manager.cpp: + * ace/Service_Repository.cpp: + * ace/ReactorEx.cpp: + * ace/Reactor.cpp: + * ace/Proactor.cpp: + * ace/Malloc.cpp: + * ace/Synch.{h,cpp}: Changed the lock held by + ACE_Static_Object_Lock from ACE_Thread_Mutex to + ACE_Recurssive_Thread_Mutex. + + * ace/Timer_Heap_T.cpp (ACE_Timer_Heap_T): Something was missing + here..... + +Fri Aug 1 13:39:13 1997 Douglas C. Schmidt + + * ace/TTY_IO.cpp (control): Removed the special M_UNIX code for + SCO_OpenServer. Thanks to Arturo Montes + for reporting this. + + * ace/Read_Buffer.cpp (ACE_Read_Buffer): Mistakenly used int + rather than ACE_HANDLE for one of the constructors in + ACE_Read_Buffer. + + * ace/OS.cpp (readv): Fixed a braino that manifests itself on + Chorus because I put the ACE_READV_TYPE in the wrong place. + Thanks to Wei Chiang for reporting this. + +Fri Aug 1 14:31:22 1997 Darrell Brunsch + + * tests/Timer_Queue_Test.cpp: removed casts from pointers to ints + (when a act was compared with a number) and instead used a cast + on the integer values. This gets rid of warnings on platforms + where the sizeof a pointer is larger than the sizeof an int. + +Fri Aug 01 12:10:28 1997 + + * ace/Synch_T: Changed parameter passing for ACE_Atomic_Op from + const TYPE to const TYPE &. + + * ace/Synch.cpp: These specializations have been added to + ACE_Atomic_Op to make the implementation faster on Win32 that + has OS support for doing this quickly through methods like + InterlockedIncrement and InterlockedDecrement. + + * ace/SV_Semaphore_Complex.cpp (open): Fixed more compiler + warnings: + + IOStream.cpp Naming_Context.cpp Read_Buffer.cpp + SV_Semaphore_Complex.cpp SV_Semaphore_Complex.i + +Fri Aug 1 11:57:45 1997 Chris Cleeland + + * ace/Containers.h (ACE_Fixed_Set): Eliminated declaration for + unnecessary ACE_Fixed_Set(size_t) CTOR. + + * ace/OS.h: Simplified the typedef of ACE_hrtime_t so that it's an + unsigned long long whenever ACE_HAS_LONG_LONG_T is defined. + +Fri Aug 01 10:12:26 1997 David L. Levine + + * ace/config-osf1-4.0.h: added ACE_HAS_TEMPLATE_SPECIALIZATION. + Thanks to Thilo for verifying that this is supported with DEC CXX. + + * ace/config-irix6.4-sgic++*.h: added ACE_TEMPLATES_REQUIRE_SOURCE + and ACE_REQUIRES_FUNC_DEFINITIONS. + + * ace/OS.h,README: added ACE_REQUIRES_FUNC_DEFINITIONS support. + + * ace/{Free_List.h,Remote_Tokens.h,Synch_T.h,Timer_*_T.h}: + wrapped unimplemented template class copy constructors and + assignment operators with ACE_UNIMPLEMENTED_FUNC. + + * tests/Service_Config_Test.cpp: removed templates to avoid + problems with finicky compilers, and added check of destruction + ordering. + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: added + -no_prelink to LDFLAGS. + +Fri Aug 01 00:14:46 1997 Douglas C. Schmidt + + * ACE version 4.2.27, released Fri Aug 01 00:14:46 1997. + +Thu Jul 31 21:51:01 1997 David L. Levine + + * ace/Log_Msg.cpp (open): fixed memory leak. + +Thu Jul 31 21:41:10 1997 Douglas C. Schmidt + + * tests/Service_Config_Test.cpp (run_test): You won't shout as I... + + * ace/Object_Manager.cpp (instance): ... fiddle about ;-) + +Thu Jul 31 17:39:56 1997 + + * ace: The following files were modified to avoid the + "unreferenced formal parameter" and other warnings from the + compiler: + + ACE.cpp Asynch_IO.cpp Asynch_IO.h INET_Addr.cpp OS.cpp OS.h OS.i + Proactor.cpp Reactor.cpp ReactorEx.cpp ReactorEx.i + SOCK_Dgram_Bcast.cpp Service_Config.cpp + +Thu Jul 31 16:46:44 1997 David L. Levine + + * ace/config*.h: replaced "ACE_REQUIRES_TEMPLATE_SPECIALIZATION" + with "ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION". + + * ace/config-vxworks-ghs-1.8.h,config-irix6.4-sgic++*.h: added + ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA. + + * all .cpp files that had "ACE_REQUIRES_TEMPLATE_SPECIALIZATION": + replaced with "ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION" and + added #pragma instantiate for Edision Design Group compilers, + e.g., SGI and Green Hills. + +Thu Jul 31 16:25:33 1997 Douglas C. Schmidt + + * ace/Synch.i (acquire): Added the timed acquire() interface to + ACE_Semaphore. + +Thu Jul 31 11:10:17 1997 Darrell Brunsch + + * tests/run_tests.bat: Redid this file completely making it + much smarter about running tests. Instead of just blindly + executing the tests, it checks the return values to see if + an error occured and also outputs relevant errors from the + log file if the test was unsuccessful. + + It's a remarkable example of batch programming wizardry. + +Thu Jul 31 10:39:04 1997 Darrell Brunsch + + * ace/INET_Addr.cpp: initialized error variable in + gethostname to stop warnings when inlining is on. + +Thu Jul 31 09:46:50 1997 Darrell Brunsch + + * ace/Timer_Heap_T.cpp: changed cancel(id) to check the timer + id to make sure it is in range (not negative and not larger + than the current size of the heap) + +Thu Jul 31 07:32:26 1997 David L. Levine + + * Malloc_T.{i,cpp},Timer_Queue_T.i: replaced LOCK with ACE_LOCK. + Thanks to Thilo for supplying patches. + + * ace/config-sunos5.5-g++.h: #define ACE_MALLOC_ALIGN to be 8. + + * ace/Object_Manager.*: renamed cleanup () to at_exit (). + + * Log_Msg.{h,cpp},Object_Manager.cpp: let ACE_Object_Manager + clean up the global ACE_Log_Msg_Manager. + + * Service_Config_Test.cpp: added test of + ACE_Object_Manager::at_exit (). + +Wed Jul 30 20:30:25 1997 Douglas C. Schmidt + + * ace/SOCK_Dgram.h: Added an = 0 to the flags parameter to recv(). + Thanks to Michael MacFaden for pointing out the inconsistency. + + * ace/OS.cpp (thr_create): Added support for the SCHED_IO policy, + which is supported by MIT Pthreads. Thanks to Arturo Montes + for this fix. + + * ace/SOCK_Dgram.h: Added a comment to clarify how to delete the + elements of the iovec array. Thanks to Mike MacFaden for + clarifying this. + + * ace/Reactor.h: Changed the comment for schedule_timer() to use + delta_timer rather than delay. + + * ace/Connector: Updated the timer cancellation id to be long + rather than int. + + * examples/Reactor/Misc/notification.cpp: Timers are now working + happily on Chorus, so we can revert the Chorus-specific patches. + Thanks to Wei Chiang for reporting this. + + * ace/SOCK_Dgram.cpp (recv): The timed recv() method must return + -1 on a timeout to meet its documented specification. Thanks to + Joseph Cross for reporting this + problem. + + * ace/OS.i (readv): Added a fix for Chorus, which has a different + readv() prototype than normal operating systems. Thanks to Wei + Chiang for reporting this. + +Wed Jul 30 20:02:21 1997 James C Hu + + * ace/Hash_Map_Manager.{h,cpp}: changed the *_i methods to use + shared_find() method to ease template specialization efforts. + Also, added a new shared_find() method. Added a parameter to + each to allow the passing in of the calculated hash value. + +Wed Jul 30 16:43:34 1997 + + * ace/config-win32-common.h: If _DEBUG is not set (that is, we are + building the Release version), we will turn on __ACE_INLINE__. + Thanks to Matthias Kerkhoff for + suggesting this. + +Wed Jul 30 06:53:30 1997 Matthias Kerkhoff + + * The use of the following configuration #defines in the entire + ACE distribution has been changed: + + - ACE_HAS_WINNT4 + - ACE_HAS_MFC + - ACE_HAS_STRICT + - ACE_MT_SAFE + - ACE_HAS_DLL + - ACE_HAS_SVC_DLL + - ACE_HAS_WINSOCK2 + - ACE_HAS_ORBIX + - ACE_HAS_MT_ORBIX + + In previous ACE-versions, code blocks depending on one of these + defines have been guarded by an #if defined(ACE_XXX_OPTION). + Therefore it has been necessary to define the default + configuration unconditionally in config-win32.h. + + The #if statements in the source files have been changed to + + #if defined(ACE_XXX_OPTION) && (ACE_XXX_OPTION != 0) + + while the default configuration in config-win32.h will only be used, + if it has not been overridden from the compilers command line (i.e.) : + + #if !defined(ACE_XXX_OPTION) + #define ACE_XXX_OPTION 1 + #endif + +Wed Jul 30 14:46:33 1997 Nanbor Wang + + * ace/Malloc.cpp: + * ace/Proactor.cpp: + * ace/ReactorEx.cpp: + * ace/Reactor.cpp: + * ace/Service_Repository.cpp: + * ace/Thread_Manager.cpp: + * ace/Synch.{h,cpp}: Changed ACE_Static_Object_Lock::get_lock () + to instance () to emphasize that it's a singleton. + + * ace/Containers.cpp: Fixed the problem caused by + ACE_Unbounded_Stacknotkeeping its size currectly. Thanks for + Matthias Kerkhoff for sending us the + patch. + + * ace/OS.cpp (exit): Corrected a bug in ACE_TSS_Cleanup::exit (). + It innocently uses default ctor to copy info_arr. And things + get out of hand when info_arr[] gets destructed. Thanks very + much for Matthias Kerkhoff for digging + this out and sending us the patch. + +Wed Jul 30 13:36:55 1997 David L. Levine + + * ace/config-vxworks-ghs-1.8.h: added #ifdef ppc wrapper around + #define of ACE_HAS_POWERPC, because GreenHills #defines that. + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: replaced + indlib.o LIBS with newer ghsbltin.o and ghsmath.o. + + * ace/OS.h: use the same ACE_UNUSED_ARG definition with ghs as + with other compilers. + + * ace/Object_Manager.*: revised interface, but still in flux. + cleanup () should work for process-wide registration, but is + untested. + +Wed Jul 30 11:13:57 1997 Chris Cleeland + + * ace/config-linux*.h (ACE_HAS_LONGLONG_T): These configs + file incorrectly had ACE_HAS_LONGLONG rather than + ACE_HAS_LONGLONG_T. + + * ace/OS.cpp (gethrtime): Added 'volatile' keyword to insure that + the automatic variables 'most' and 'least' don't get put into + registers. Putting this in stopped the SIGSEGV that was occurring + in Linux. + +Wed Jul 30 06:53:30 1997 Douglas C. Schmidt + + * ACE version 4.2.26, released Wed Jul 30 06:53:30 1997. + +Wed Jul 30 04:36:39 1997 Nanbor Wang + + * ace/Containers.{h,cpp}: Added back new parameterized allocation + strategy version. Finally. + + * ace/Synch.cpp (atexit): Moved ACE_Allocator here because only + here, we can be sure that no other user defined memory + activities are going on. This is becoming even more + interesting now.... Perhaps we should move all + close_singleton's here? + + * ace/Service_Config.cpp (close_singletons): Removed + ACE_Allocator::close_singleton () from this function because we + still need ACE_Allocator to "free" static objects' memory. + + * ace/Synch.{h,cpp}: Added a new class ACE_Static_Object_Lock + which provides a lock when instantiating static objects. + + * ace/Thread_Manager.cpp: Removed ace_thread_manager_lock_, + * ace/Service_Repository.cpp: Removed ace_service_repository_lock_, + * ace/ReactorEx.cpp: Removed ace_reactorex_lock_, + * ace/Reactor.cpp: Removed ace_reactor_lock_, + * ace/Proactor.cpp: Removed ace_proactor_lock_, + * ace/Malloc.cpp: Removed ace_malloc_lock_, + and replace them with a global single lock + ACE_Static_Object_Lock::get_lock (). + +Tue Jul 29 16:25:48 1997 Chris Cleeland + + * ace/OS.cpp (thr_create): Explicitly flagged 'stack' and 'size' + as unused arguments. + + * ace/Memory_Pool.cpp (handle_signal): Explicitly flagged siginfo + as an unused argument, and moved the decl of offset into the + conditional block in which it's used. + + * ace/OS.i (dlerror): Added explicit cast of the return value to + (char*) because on Linux dlerror() returns const char*, while on + Solaris it's char*. + + * ace/config-linux-lxpthreads.h: Created new flag + ACE_LACKS_POSIX_PROTO_FOR_SOME_FUNCS that can be used when only + certain functions are missing POSIX prototypes. This eliminates + more warnings with -Wall + + * ace/ACE.cpp (max_handles): Added return statement for the + RLIMIT_NOFILE case. + (count_interfaces): Removed unused variables. + +Tue Jul 29 15:10:35 1997 Darrell Brunsch + + * ace/OS.i: Changed sema_wait to take in a const ACE_Time_Value + +Tue Jul 29 12:41:27 1997 Douglas C. Schmidt + + * ace/config-sco-5.0.0-mit-pthread.h: Added the + ACE_LACKS_PWD_FUNCTIONS macro. Thanks to Arturo Montes + for reporting this. + +Tue Jul 29 13:10:00 1997 Nanbor Wang + + * ace/Signal.h: Moved inclusion of "Containers.h" to the bottom of + this file so everything is defined properly before use. + +Tue Jul 29 12:36:24 1997 + + * tests/Message_Queue_Test.cpp (main): Removed dynamic allocation + of the string array. + +Tue Jul 29 12:15:49 1997 Darrell Brunsch + + * ace/Proactor.cpp + * ace/Reactor.cpp: + * ace/ReactorEx.cpp: Changed the default Timer Queue to + Timer Heap instead of Timer List. + +Tue Jul 29 07:59:04 1997 David L. Levine + + * Makefile,TAO/Makefile: change mode of updated ChangeLog-* + file to 644 after updating it, when building a release + with TIMESTAMP enabled. + + * ace/OS.cpp (sched_params): added some more initializations + to 0 to avoid Purify warnings about unitialized memory reads. + + * ace/Object_Manager.cpp (~ACE_Object_Manager): removed unused + variable "i". Thanks to Amos Shapira + for reporting this. + + * ace/Service_Record.{h,i} Parse_Node.{h,cpp} (handle,open_handle): + removed "const" from ACE_SHLIB_HANDLE return value. Thanks + to the several people who noted compiler warnings from this. + + * ace/Naming_Context.cpp: added delete of this->name_options_; + (dtor,fini): call this->close (). + + * tests/IOStream_Test.cpp (client,server): use ACE_NEW_RETURN + instead of new. + +Tue Jul 29 01:53:18 1997 Nanbor Wang + + * ace/OS.h: Added two new macros ACE_NEW_MALLOC_RETURN and + ACE_NEW_MALLOC. Theses are similiar to ACE_ALLOCATOR_RETURN and + ACE_ALLOCATOR that allow memory allocation using user defined + functions. However, these two macros will call specified + constructor after memory is being allocated. + + * ace/Containers.{h,cpp}: Decoupled memory allocation strategy for + ACE_Unbounded_Stack, ACE_Unbounded_Set, ACE_Unbounded_Queue. + Users can now specified their own memory allocation strategies + if needed. If not specified, the default ACE_Allocator will be + used. + +Tue Jul 29 00:56:54 1997 Douglas C. Schmidt + + * ACE version 4.2.25, released Tue Jul 29 00:56:54 1997. + +Mon Jul 28 16:23:26 1997 David L. Levine + + * include/makeinclude/rules.nested.GNU: added missing + semicolon at end of last statement. Thanks to Amos + Shapira for providing this fix. + + * ace/OS.h (VxWorks only): only #include before + for GreenHills. Thanks to Dave Moore + for reporting a problem without this + fix with g++/VxWorks 5.3.1 for PowerPC target. + Also, commented out g++ string.h hack. It no longer appears + to be necessary. + + * tests/README: added VxWorks 5.3.1 test status. + + * tests/SPIPE_Test.cpp (main): fixed #ifdefs so that it compiles. + + * ace/OS.i: (strtok_r): replaced NULL with 0. NULL is #defined + as (void *) 0 on VxWorks, so it causes compile warnings. + Thanks to Dave Mayerhoefer for reporting + this problem. + + * ace/Object_Manager.{h,cpp},Makefile: added this class to + shutdown ACE library services, and reclaim their storage, + at program termination. + + * ace/ACE.cpp: added hook to call ACE_Object_Manager destructor + in this file. It's in this file so that it's sure to be + linked in to executables that statically link libACE.a. + + * ace/Service_Config.{h,cpp}: (close): delete ACE_STATIC_SVCS + instance, which is now saved in static_svcs_. Also, removed + LM_SHUTDOWN call, because the logger apparently gets shutdown + now with everything else (with ACE_Object_Manager). + + * ace/Object_Manager.* (delete_at_exit,delete_array_at_exit): + made these (inline) static functions, with return values. + + * tests/IOStream_Test.cpp (client,server): explicitly destroy + (and create) ACE_SOCK_IOStream instances, because they don't + get destroyed on Solaris. They're on the stack of separate + threads, so maybe the problem is related to not cleaning up + TSS on Solaris. Thanks to James CE Johnson + for some efficient debugging work, and for verifying that the + original code works properly on Linux. + +Mon Jul 28 21:59:09 1997 Nanbor Wang + + * ace/ace.mak: Added file Object_Manager.cpp. + + * ace/OS.h: Added #define RTLD_LAZY when + ACE_HAS_SVR4_DYNAMIC_LINKING and RTLD_LAZY is not defined. + FreeBSD 2.2.1 "forgot" to put in this definition. Thanks to + Satoshi Ueno for reporting this. + +Mon Jul 28 13:27:21 1997 Douglas C. Schmidt + + * ace/Object_Manager: Made a few minor stylistic updates. + + * netsvcs/servers/main.cpp (main): Updated this test program to + utilize the new ACE_Service_Object_Ptr class. + + * ace/Service_Object.h: Added a new smart pointer call + ACE_Service_Object_Ptr, which generalizes functionality that was + previously in the ./netsvcs/server/main.cpp file. Thanks to Wei + Chiang for this suggestion. + + * examples/Threads/process_manager.cpp (parse_args): Removed the + unused n_processes global variable. Thanks to Amos Shapira for + reporting this. + + * tests/SPIPE_Test.cpp (main): Cleaned up the #ifdef structure + to remove compiler warnings. Thanks to Amos Shapira for + this. + + * tests/Handle_Set_Test.cpp (test_performance): Removed an unused + ACE_HANDLE handle definition. Thanks to Amos Shapira for + reporting this. + + * ace/OS.i (sema_init): Swapped else and #endif to avoid + a compile error when ACE_LACKS_NAMED_POSIX_SEM is false. + Thanks to Wei Chiang for reporting this. + + * ace/OS.cpp (rwlock_init): Added a cast to (const void *) to keep + certain compilers from complaining. Thanks to Thilo and + Amos Shapira for reporting this. + + * ace/OS.i (sema_wait): *tv should have been &tv. Thanks to Thilo + for reporting this. + +Mon Jul 28 13:57:21 1997 James C Hu + + * ace/config-irix6.4-sgic++.h: Added template specialization #def. + +Sun Jul 27 20:47:01 1997 David L. Levine + + * tests/Handle_Set_Test.cpp: Instantiate templates with + ACE_HANDLE instead of int. + + * examples/IPC_SAP/SPIPE_SAP/NPServer.cpp (main): use + ACE_OS::fprintf () instead of cerr. + +Sun Jul 27 20:10:26 1997 Douglas C. Schmidt + + * ACE version 4.2.24, released Sun Jul 27 20:10:26 1997. + +Sun Jul 27 16:03:30 1997 Nanbor Wang + + * tests/Handle_Set_Test.cpp (test_boundaries): Changed class of + queue from ACE_Unbounded_Queue to + ACE_Unbounded_Queue so it declares the right data + type. + + * ace/Synch.cpp (ACE_Process_Mutex): + * ace/OS.cpp (rwlock_init): + * ace/ACE.cpp (unique_name): Memories for placing unique_name are + now declared using ACE_UNIQUE_NAME_LEN. When calling + ACE::unique_name, the length is also specified using + ACE_UNIQUE_NAME_LEN because using "sizeof (buffer)" also caused + problem if we are using UNICODE. + + * ace/OS.h: Added a new directive ACE_UNIQUE_NAME_LEN to specified + the maximum length of an "unique name." + +Sun Jul 27 15:32:08 1997 David L. Levine + + * tests/Handle_Set_Test.cpp (main): uncommented + test_duplicates () and test_performance () calls, and added + ACE_Unbounded_Queue_Iterator specialization. + +Sun Jul 27 14:25:33 1997 Douglas C. Schmidt + + * tests/Handle_Set_Test.cpp (test_boundaries): Added a better test + to ensure that the ACE_Handle_Set_Iterators are working + correctly. This works by inserting the handles in a queue and + then making sure that they are the same values we receive from + the iterator. + + * ace/Handle_Set.i (operator): Fixed a subtle bug in the + ACE_Handle_Set_Iterator implementation. We need to make + sure that we increment the handle_index_ to the beginning + of the next word whenever we've examined all the bits in + the current word. Thanks to David Levine for noticing this + problem. + +Sun Jul 27 09:06:29 1997 David L. Levine + + * include/makeinclude/rules.lib.GNU: replaced hard-coded ".so" + with "$(SOEXT)". + + * include/makeinclude/rules.local.GNU: added/completed support + for "$(SOEXT)", and "$(VSHDIR)" instead of always hard-coding + them as ".so" and ".shobj/". + + * include/makeinclude/wrapper_macros.GNU: added support for + override of "$(VSHDIR)" in platform_macros.GNU. + + * apps/JAWS/clients/{Blobby,Caching}/Makefile, + apps/JAWS/stress_testing/Makefile, + apps/Orbix-Examples/Event_Comm/{Consumer,Supplier}/Makefile, + examples/ASX/Event_Server/Event_Server/Makefile, + examples/ASX/UPIPE_Event_Server/Makefile, + examples/Logger/simple-server/Makefile, + examples/Mem_Map/IO-tests/Makefile, + examples/Naming/Makefile, + examples/Reactor/Multicast/Makefile, + examples/Service_Configurator/Misc/Makefile, + examples/Shared_Malloc/Makefile: + replaced hard-coded ".shobj" with "$(VSHDIR)" in LDLIBS definitions. + + * include/makeinclude/platform_vxworks5.x_{g++,ghs}.GNU: + added overrides of .so build rules to change them .o builds. + + The above changes allow builds of modules that specify .shobj/*.so + on VxWorks, by mapping those objects to .obj/*.o. + +Sun Jul 27 03:07:35 1997 Nanbor Wang + + * ace/ACE.cpp (unique_name): Added __TEXT macro to the format + string in sprintf to avoid a nasty problem when using UNICODE on + NT. + +Sat Jul 26 21:12:07 1997 David L. Levine + + * ace/ReactorEx.cpp: added a couple of ACE_UNUSED_ARG's. + + * examples/Logger/simple-server/Logging_Handler.cpp (handle_input): + replace use of cerr with stderr (by using default arg of + ACE_Log_Record::print ()). + + * examples/Shared_Malloc/test_multiple_mallocs.cpp (main): use + ACE_OS::printf () instead of cout. + + * examples/Shared_Malloc/test_persistence.cpp: added #include + of iostream.h with ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION. + +Sat Jul 26 15:55:43 1997 + + * ace/Malloc_T.cpp (ACE_Cached_Allocator): Changed (T *) to + (T*). VC++ did not like the former. + + * The entire ACE distribution was updated to use the new singleton + methods. The old singleton methods in Service_Config have been + deprecated and users are encouraged not to use these methods + anymore. It may not be supported in future releases. The + replacement is the instance() methods in the individual classes. + For example, ACE_Service_Config::reactor() is replaced by + ACE_Reactor::instance(). A perl script has been added + (ACE_wrappers/bin/Service_Config.perl) to allow users to change + their code over to the new methods. + + These changes will hopefully help in reducing the compile-time + dependencies in ACE source files and allow smaller custom ACE + libraries to be compiled. + + Thanks to Matthias Kerkhoff for making + these changes. + +Sat Jul 26 15:44:45 1997 Douglas C. Schmidt + + * ace/Malloc_T.cpp (ACE_Cached_Allocator): I think we want to + say "sizeof (T)" rather than "sizeof (T *)". + + * ace/FILE_IO.i (recv_n): There is a minor bug fix to be made in + FILE_IO.i. The method ACE_FILE_IO::recv_n() should call + ACE::read_n(), not ACE::recv_n(). Similarly, the method + ACE_FILE_IO::send_n() should call ACE::write_n(), not + ACE::send_n(). The functions ::recv() and ::send() are intended + only for *socket* I/O, and return failure conditions when + applied to *file* I/O. Thanks to David Brackman + for reporting this. + + * ace: Changed all LOCK names to ACE_LOCK to avoid clashes + with macros in the KAI C++ compiler. Thanks to Jeff + R. Hayes for pointing this out. + + * ace/Malloc_T.i: Added ACE_INLINE to some methods that weren't + getting inlined. + + * ace/OS.i: Added an implementation of timed semaphores for the + POSIX threading APIs. Also cleaned up the return values from + sema_wait() so that it always returns -1 if an error occurs + (originally, it was returning -2, which is confusing). Also + cleaned up the rd_lock() and wr_lock() methods in the same way. + +Sat Jul 26 16:00:05 1997 David L. Levine + + * Malloc_T.cpp (ACE_Cached_Allocator): fixed typo, sizeof (T*) + instead of sizeof (*T). + + * Proactor.cpp (instance): fixed signature in non-WIN32 + version. (run_event_loop): added ACE_UNUSED_ARG (tv). + +Fri Jul 25 12:08:47 1997 David L. Levine + + * ace/OS.[hi]: finished VxWorks (non-POSIX) semaphore implementation. + + * ace/Process.cpp (spawn): with GreenHills compiler only (for + VxWorks), call ACE_NOTSUP_RETURN instead of spawning via execve. + GreenHills 1.8.8 loses its lunch on the ACE_OS::execve () call. + Thanks to Dave Mayerhoefer for reporting + this problem. + + * tests/Mem_Map_Test.cpp (create_test_file): delete array "mybuf" + to prevent memory leak. + + * tests/Message_Queue_Test.cpp (main): delete "buffer" + elements at end of test to prevent memory leaks. + + * performance-tests/Misc/context_switch_time.cpp: use + ACE_Sched_Params for platform-independent thread priority + assignment. Also, modified Yield_Test so that only one thread + writes the test's timer. + + * examples/ASX/UPIPE_Event_Server/Peer_Router.cpp (svc): + replaced an iostream printout with an ACE_DEBUG call. + + * examples/ASX/UPIPE_Event_Server/event_server.cpp: added + #include of iostream.h with ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION. + + * examples/IPC_SAP/FILE_SAP/client.cpp: require 2 args instead + of 1; mask file mode with 0777 (octal); and use + ACE_OS::printf () instead of cout. + +Fri Jul 25 00:46:22 1997 + + * ace/Synch: Added documentation for Condition variables. Thanks + to Jeff for pointing out the lack of + documentation. + +Thu Jul 24 11:48:05 1997 David L. Levine + + * Makefile,TAO/Makefile: added a filter to exclude backup and + [.]#* files from releases. Thanks to Carlos O'Ryan + for reporting this problem. + + * include/makeinclude/platform_*.GNU: inserted CVS/RCS + keyword string. + + * performance-tests/Misc/basic_perf.cpp (per_iteration): + added support for ACE_U_LongLong. + + * performance-tests/Misc/childbirth_time.cpp: + (prof_fork,prof_native_thread): added ACE_UNUSED_ARGs + for unsupported platforms. (prof_ace_os_thread): added + (ACE_THR_FUNC) cast of first arg to ACE_OS::thr_create () call. + + * performance-tests/Misc/test_naming.cpp (find): replaced cerr + statement with an ACE_DEBUG. + + * examples/Misc/test_read_buffer.cpp: replaced bare OS calls + with ACE_OS calls. + +Thu Jul 24 11:35:37 1997 Darrell Brunsch + + * ace/Timer_Heap_T.cpp: Fixed a problem with reschedule() + corrupting the free list in Timer Heap. Thanks to + James Crawford , Silvano Peruzzi + , and Stuart Powell + for the fix. + +Wed Jul 23 23:29:15 1997 + + * ace/Message_Block.cpp (size): Changed the comparison from + (length < this->max_size_) to (length <= this->max_size_). + Thanks to Paul for suggesting this change. + +Wed Jul 23 21:54:23 1997 David L. Levine + + * examples/Shared_Malloc/test_malloc.cpp (spawn): cast argv + argument to (char *const *) for call to ACE_OS::execv (). + +Wed Jul 23 16:40:39 1997 Nanbor Wang + + * ace/ACE.cpp (get_ip_interfaces): ACE'ified codes for NT. UNIX + part will come later. + + * ace/Malloc_T.cpp (ACE_Cached_Allocator): Changed to use raw + memory allocation method for memory pool. + + * ace/OS.h (ACE_TEXT_STRING): Added this #define macro to switch + between ACE_WString and ACE_CString according to the usage of + UNICODE. + +Wed Jul 23 14:43:11 1997 David L. Levine + + * tests/Timer_Queue_Test.cpp(main): delete timer_id array at + the end of the test to avoid a memory leak. + +Wed Jul 23 13:40:39 1997 Nanbor Wang + + * ace/Process.cpp (ACE_Tokenizer::next): Moved checking of string + termination after checking delimiter and preserve_designator so + that we can use this class to tokenize multiple null terminated + strings cascaded together (using \0 as delimitor.) Notice tne + combined strings must be terminated with two null chars. I need + to use this class in ACE::get_ip_interfaces. + + * ace/Malloc_T.{h,i}: Changed the implementation of + ACE_Cached_Mem_Pool_Node from using union to a plain pointer. + This is because some C++ compilers don't allow union member to + have copy constructor. Thanks to Tim to dig this out. + +Wed Jul 23 12:58:04 1997 Steve Huston + + * ace/CORBA_Ref.cpp: Added #include "ace/Log_Msg.h" to catch the + ACE_DEBUG macro. diff --git a/ACE/ChangeLogs/ChangeLog-98a b/ACE/ChangeLogs/ChangeLog-98a new file mode 100644 index 00000000000..c5daa4d7ee1 --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-98a @@ -0,0 +1,6588 @@ +Wed Apr 29 18:55:13 1998 David L. Levine + + * ACE version 4.5 released. + +Wed Apr 29 12:25:05 1998 David L. Levine + + * ace/config-lynxos.h: added ACE_POLL_IS_BROKEN so that + ACE_OS::sleep () uses select () instead of poll (). + + * tests/Map_Manager_Test.cpp: added a ssize_t loop index that's + used to avoid signed/unsigned comparisons. + +Tue Apr 28 23:08:10 1998 Nanbor Wang + + * ace/Hash_Map_Manager.cpp: Bugs fixed. + + * tests/Map_Manager_Test.cpp: Added assertion tests on the number + of iterations to ensure the test does run correctly. + + * tests/Map_Manager_Test.cpp (main): Disabled the VERBOSE_LITE + Log_Msg flag before starting the real test and reenabled it + after the tests. + +Tue Apr 28 06:49:50 1998 David L. Levine + + * ACE-INSTALL.html,os-patches/linux-patches.html: updated + Linux glibc-2 info. ACE works with glib-2.0.7-7, unmodified. + + * ace/config-g++-common.h: added + ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES with egcs. egcs 1.0.2 + won't compile netsvcs/lib without it. + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: fixed location + of parenthesis in ppc check. Thanks to Brian Mendel + for reporting this. + + * ace/High_Res_Timer.cpp: initialize global_scale_factor_ to 1000 + on Linux. + +Mon Apr 27 07:18:54 1998 Nanbor Wang + + * ace/Service_Types.cpp: Changes to use typedef + ACE_Service_Object_Exterminator to define . Thanks to + Chuck Gehr for reminding this. + + * ace/Service_Object.h (ACE_Service_Object_Ptr): + * netsvcs/servers/main.cpp (main): Added more comments on how to + use ACE_Service_Object_Ptr with ACE_SVC_INVOKE correctly. + + * ace/OS.h (ACE_Service_Object_Exterminator): Define the type as + extern "C" function pointer to make MVS happy. Thanks to Chuck + Gehr for pointing this out. + + * ace/Service_Object.i (ACE_Service_Object_Ptr): Delete the + underlying Service_Object after calling its fini() method. + Thanks to Tom Arbuckle + for pointing this out. + +Sun Apr 26 21:50:07 1998 David L. Levine + + * ace/Svc_Conf_l.cpp,etc/Svc_Conf_[ly].cpp.diff,etc/README: + updated the patch files. Thanks to J. Russell Noseworthy + for reporting problems with + them. + +Sun Apr 26 01:05:20 1998 Douglas C. Schmidt + + * ACE version 4.4.43 released. + +Sat Apr 25 17:47:31 1998 Nanbor Wang + + * ace/OS.h (ACE_FACTORY_DECLARE): Added explicit casting for + gobbler to prevent some weird compiler from complaining too + much. + + * netsvcs/lib/Server_Logging_Handler_T.cpp + (ACE_Server_Logging_Acceptor_T): We can't initialize the + with a temporary object. Its content gets deleted + right after the constructor exits. + +Sat Apr 25 11:55:01 1998 Alexander Babu Arulanthu + + * ace/Containers.h (class ACE_Double_Linked_List): Added + comments.(, the parameter for this class should have + T* next_ and T* prev_ fields in it. + + * ace/Containers.h (class ACE_Double_Linked_List): Corrected the + documentation for the insert_head and insert_tail functions. + +Fri Apr 24 22:36:37 1998 David L. Levine + + * ace/Service_Config.cpp (process_directive): added + ACE_UNUSED_ARG (directive). + +Fri Apr 24 18:40:08 1998 Irfan Pyarali + + * ace/Asynch_Acceptor.cpp (handle_accept): Fixed this method so + that it has better flexibility and error checking. Also, added + hooks so that users can do validation of remote connections. + Also, a flag is checked before accept is reissued. Thanks to + Jason Katz for reporting these upgrades. + +Fri Apr 24 16:33:14 1998 Steve Huston + + * ace/OS.h: ACE_FACTORY_DEFINE - in the generated gobble function, + use the indicated object type to do the delete so 1) the aC++ + compiler won't complain, and 2) so the service object is + destructed properly. + + * tests/Env_Value_Test.cpp: Made it compile on Solaris. + +Fri Apr 24 15:45:38 1998 David L. Levine + + * ace/config-sunos5.5-*.h: set ACE_THR_PRI_FIFO_DEF to 30, because + sched_get_priority_min is not implemented on Solaris 2.5.x. + +Fri Apr 24 09:12:39 1998 Nanbor Wang + + * tests/Env_Value_Test.cpp: Made it UNICODE safe. + + * tests/version_tests/version_tests.dsw: + * tests/version_tests/OrdMultiSet_Test.dsp: Added new project + file. + +Fri Apr 24 09:09:49 1998 David L. Levine + + * ace/config-linux-common.h: added ACE_HAS_4_4BSD_SENDMSG_RECVMSG. + Thanks to Sandro Doro for recommending + this. + +Fri Apr 24 04:12:39 1998 Nanbor Wang + + * tests/version_tests/version_tests.dsw: + * tests/version_tests/OrdMultiSet_Test.dsp: Added new project + file. + +Thu Apr 23 22:52:20 1998 Nanbor Wang + + * tests/tests.dsw: Somehow, Thread_Mutex_Test.dsp got removed from + the workspace. + + * tests/Thread_Mutex_Test.dsp: Update include/lib path. + +Fri Apr 24 00:12:32 1998 Douglas C. Schmidt + + * ACE version 4.4.42 released. + +Thu Apr 23 22:28:02 1998 Douglas C. Schmidt + + * ace/Service_Config: Began adding support for the new service + configurator feature that will make it possible to dynamically + configure services that are read in from the command-line. + Thanks to Karlheinz for requesting this. + + * ace/Parse_Node.cpp (open_handle), + ace/Svc_Conf.l: The line for the service object for the service + configurator contains the DLL specifications. Previously, it + was possible to specify either the absolute path name of the DLL + or only the name of the DLL itself. For the latter, the service + configurator is searching for the DLL using the PATH environment + variable. If we used the absolute path name it was not + possible to use environment variables in the string. It is now + possible to do this for Win32 using their %foo% notation. + Thanks to Andreas Schuelke for + providing these fixes. + + * etc/Svc_Conf_y.cpp.diff, + etc/Svc_Conf_l.cpp.diff, + ace/Makefile: Change the YY* symbols to ACE_YY* symbols to + avoid clashes if we link with other flex/yacc generated code. + + * apps/Gateway/Gateway/gatewayd.cpp, + apps/Gateway/Peer/peerd.cpp: Added a check to see if the + svc.conf file exists before trying to parse the arguments. + Thanks to Dani Flexer for reporting this. + + * apps/Gateway/Peer/Options.cpp (parse_args): Added the "C:" + qualifier to the get_opt string. Thanks to Dani Flexer + for reporting this. + + * ace/Activation_Queue.h: Extended ACE_Activation_Queue so that it + can be a proper base class by making the destructor virtual and + putting the methods into the protected section. Thanks to Garry + Brother for this. + + * ace/XtReactor.cpp: Commented out most of the logic if we're + running on Win32 because (1) it doesn't work correctly since + HANDLEs are not ints and (2) there's no X windows on Win32 + anyhow... + + * ace/XtReactor.h: Made ACE_XtReactor be ACE_Export'd. Thanks to + Kirill Rybaltchenko for reporting + this. + +Thu Apr 23 13:54:33 1998 David L. Levine + + * ace/Malloc.i (free): added ACE_UNUSED_ARG (ptr) if ACE_NDEBUG. + + * include/makeinclude/platform_chorus.GNU: include dtool/htgt-cf.rf + from $(MERGEDIR) instead of $(CLASSIXDIR). Thanks to + Wei Chiang for this update. + +Wed Apr 22 22:13:57 1998 Douglas C. Schmidt + + * ace/ace_bcc.ide: Added a new IDE for the Borland C++ compiler. + Thanks to Valik Solorzano Barboza for + this. + + * ace/Msg_WFMO_Reactor.cpp (wait_for_multiple_events): Fixed a + missing semi-colon. Thanks to Jorn Jensen + for reporting this. + +Wed Apr 22 21:53:12 1998 David L. Levine + + * config-linux-kcc.h: added #define ACE_SIZEOF_LONG_DOUBLE + to 12 on i386. Thanks to Ben Eng for + reporting this. + +Tue Apr 21 18:38:22 1998 Nanbor Wang + + * ace/ace_ce_dll.dsp: Removing a deprecated /windowsce:noconvert + linker flag. + +Mon Apr 20 15:39:42 1998 Steve Huston + + * ace/Handle_Set.cpp: Access fds_bits elements using an fd_mask + pointer rather than array indexing of the fds_bits array itself. + HP-UX 11 plays some games with the fd_mask type - fd_mask is defined + as an int32_t, but the fds_bits is an array of longs. This makes + plainly indexing through the array by hand tricky, since the FD_* + macros treat the array as int32_t. So the bits are in the right + place for int32_t, even though the array is long. This, they say, + is to preserve the same in-memory layout for 32-bit and 64-bit + processes. So, we play the same game as the FD_* macros to get + the bits right. See /usr/include/sys/_fd_macros.h. + On all other systems, this amounts to practically a NOP, since this + is what would have been done anyway, without all this type jazz. + +Sat Apr 18 13:59:55 1998 David L. Levine + + * ace/Naming_Context.h: removed trailing ';' at end of + ACE_FACTORY_DECLARE. + + * ace/OS.*,Sched_Params.{h,cpp}: added support on Solaris + for setting the LWP priority. It is necessary to set the + LWP priority for bound threads in the Real-Time scheduing + class. Thread priority is essentially ignored. See the + pthread_setschedparam man page for more info. Thanks to + Fred Kuhns for helping track this problem + down. + + There is one drawback: to set the LWP priority, in ACE, + a thread must set its own priority. There are examples + in performance-tests/Misc/preempt.cpp: + + High_Priority_Task::svc (void) + { + // On Solaris 2.5.x, the LWP priority needs to be set. + // This is the ACE way to do that . . . + ACE_OS::thr_setprio (priority_); + + I don't know of a way to set the LWP priority for another + thread. The problem is that there is no way that I know of + to find the LWP ID of another (bound) thread. A thread can + find the ID of its own LWP using _lwp_self (). + + * ace/config-sunos5*,README: added ACE_HAS_PRIOCNTL and + ACE_NEEDS_LWP_PRIO_SET. + + * ace/config-osf1-4.0.h: added ACE_HAS_PRIOCNTL and + ACE_LACKS_PRI_T. + + * performance-tests/Misc/preempt.cpp (svc): set LWP priority + (on Solaris) by having the thread set its own priority. + This test now passes on Solaris 2.5.1! + + * ace/High_Res_Timer.cpp (reset): initialize by assignment with + 0 instead of using memset. Thanks to Carlos for noticing this. + + * ace/Object_Manager.cpp (ACE_Object_Manager ctor): allocate + registered_objects_ after the allocation of ACE_STATIC_OBJECT_LOCK, + just to be safe. + +Sat Apr 18 01:28:36 1998 Irfan Pyarali + + * ace/Timeprobe.h (class ACE_Timeprobe): Changed ACE_Timeprobe to + use ACE_OS::gethrtime(). + +Sat Apr 18 01:14:30 1998 Irfan Pyarali + + * ace/OS.cpp (start and stop): start and stop should only be done + when ACE_Countdown_Time::max_wait_time_ is non-zero. + + * ace/Acceptor.cpp (open): Only set the reactor if calls to open() + and register_handler() succeeds. + +Fri Apr 17 21:00:21 1998 Steve Huston + + * ace/config-hpux11.h: Changes and comments around the + ACE_DEFAULT_BASE_ADDR definition for 64-bit HP-UX 11. + + * ace/Naming_Context.cpp + * ace/Malloc_T.cpp + * ace/Memory_Pool.cpp: Hacks to work around bugs in HP-UX aC++ in + 64-bit mode on HP-UX 11. + + * ace/OS.i: Addition of a facility that allows config.h to specify + additional flags for ACE_OS::mmap, above what's set by the caller. + It's done using a new definition, ACE_OS_EXTRA_MMAP_FLAGS. + This was added primarily to allow setting of the MAP_ADDR32 flag + on HP-UX 11 if the ACE_DEFAULT_BASE_ADDR is set in the 32-bit range + to allow 32-bit and 64-bit programs to map the same region. + +Fri Apr 17 11:40:38 1998 Nanbor Wang + + * ace/OS.cpp (invoke): Should check against null thr_desc, not + thr_desc->flag (). Thanks to "Erickson, Jack (CICG - NY GFX)" + for reporting this. + + * ace/OS.h (ACE_Service_Object_Exterminator): Typedef of ACE + factory cleanup funciton. + (ACE_FACTORY_{DECLARE,DEFINE}): Added an extra argument to pass + back destructor for the object created by the factory. Changed + the ACE_FACTORY_DEFINE to generate this destructor function to + pair with factory function so that we can deallocate the object + in the same heap it was created. + (ACE_SVC_INVOKE): This will now pass in 0, which means we don't + want to use the destructor function. + + * ace/Parse_Node.{h,cpp} (symbol): Added an extra argument to get + back the destructor function from ACE_FACTORY. Only + Function_Node actually uses it. + (ACE_Function_Node::symbol): Initialize the Service_Object with + added destructor function ptr so it will get destructed in the + "right place". + + * ace/Service_Config.{h,cpp} (load_static_svcs): Invoke the + factory method with added argument to get back the destructor + function and then, pass it in to ace_create_service_type + function. + (ACE_Service_Manager): Changed to use the more generic + ACE_FACTORY_DEFINE than using ACE_SVC_FACTORY_DEFINE. + (ACE_SERVICE_ALLOCATOR): Must match with signature of the + new factory method. + + * ace/Service_Type.{h,cpp} + (ACE_Service_Object_Type,ACE_Service_Type_Impl): Keep the + destruction function in these object, if use provides one, then + use it to destruct the object, otherwise, just use delete. + + * ace/Naming_Context.{h,cpp}: Changed to use + ACE_FACTORY_{DEFINE,DECLARE}. + + * ace/Object_Manager.cpp: Changed the signature of + Service_Manager. + + * ace/Svc_Conf.h: Changed the signature of + ace_create_service_type. + + * ace/Svc_Conf_y.cpp: + * ace/Svc_Conf.y: Try to get the destruction function from + factories in svc_location. + (ace_create_service_type): Pass in the destruction function if + provided one. + +Fri Apr 17 08:31:38 1998 Douglas C. Schmidt + + * ace/Signal.cpp (dispatch): Fixed a typo. Thanks for David + Levine's help pointing this out. + +Thu Apr 16 21:12:48 1998 Douglas C. Schmidt + + * ace/Signal.cpp: There was a major portability violation in the + ACE_Sig_Handler::dispatch() method, which was previously + acquiring a mutex lock. This is NOT permitted in the POSIX + signal handler spec. In addition, the implementation had other + nasty consequences related to dynamic allocation of memory in + the signal handler, which has a bad habit of breaking + non-reentrant uses of "new". The consequence of all this is + that you really shouldn't be modifying signal handlers via the + Reactor in multiple threads of control. In general, threads and + signals are just plain evil, so they are best addressed via + sigwait() anyhow... + + Thanks to Sumedh and Naga for first tracking this down. + +Thu Apr 16 20:51:42 1998 David L. Levine + + * ace/config-linux-pthread.h: added ACE_HAS_THREADS. + ace/config-irix6.x-g++.h: added ACE_HAS_THREADS and ACE_MT_SAFE. + Thanks to Dave Tallman for reporting these. + +Thu Apr 16 04:14:53 1998 Irfan Pyarali + + * ace/Timeprobe: + + This class is used to instrument code. This is accomplished by + inserting time probes at different location in the code. + ACE_Timeprobe then measures the time difference between two time + probes. + + This class provides a lightweight implementation for measuring + the time required to execute code between two time probes. When + a time probe executes, it records the time, the id of the + calling thread, and an event description. The event description + can either be an unsigned long or a string (char *). If string + are used, care must be taken cause only pointer copies are done + and the string data is *not* copied. + + The recorded time probes can then be printed by calling + print_times(). If you have used unsigned longs as event + descriptions in any of your time probes, you must provide an + event description table that maps the unsigned longs to readable + strings. This map is a simple array of strings, and the event + number is used as the index into the array when looking for the + event description. If you have only used strings for the event + description, this map is not necessary. + +Wed Apr 15 23:01:08 1998 Nanbor Wang + + * ace/Thread_Manager.cpp (exit): Don't delete the ACE_Thread_Exit + object of the thread here. ACE_Thread_Manager::exit will be + called back again when performing TSS cleanup. Thanks to Dave + Tallman for the bug report. + +Wed Apr 15 17:12:14 1998 Steve Huston + + * ace/config-hpux-11.x-hpc++.h: Explicitly set ACE_SIZEOF_LONG based + on compiler switch for processor/memory model. + +Wed Apr 15 16:25:38 1998 Irfan Pyarali + + * ace/WFMO_Reactor.cpp (handle_signal): Changed break to return 0. + + * ace/OS.cpp (uname): We have to make sure that the size of + (processor + subtype) is not greater than the size of + name->machine. So we give half the space to the processor and + half the space to subtype. The -1 is necessary for because of + the space between processor and subtype in the machine name. + + Thanks to Andrew Marchewka + (Andrew_Marchewka@SRT.CCMAIL.compuserve.com) for suggesting + these changes. + +Wed Apr 15 08:52:52 1998 David L. Levine + + * tests/Reactor_Exceptions_Test (handle_input): removed + ACE_NOTREACHED wrapper around return statement at end. + Now that the previous statement is a function call, the + compiler (cxx) doesn't detect that the statement can't + be reached. + +Wed Apr 15 01:03:42 1998 Douglas C. Schmidt + + * ace/OS.i (ACE_SOCKCALL_RETURN): Added a work-around for a + Borland 5.02 compiler bug. The key turns out to be the + throw-away intermediate assignment statement to correctly keep + the value of WSAGetLastError(). Thanks to Dave Tallman + for reporting this. + +Tue Apr 14 23:35:19 1998 Nanbor Wang + + * ace/Profile_Timer.cpp (elapsed_rusage): The differences of user + time and system time for GETRUSAGE were not calculated. + + * performance-tests/Synch-Benchmarks/Options.cpp (print_results): + Added dump code for ACE_HAS_GETRUSAGE. + + * ace/ace_{dll,lib}.dsp: Removed Service_Main.cpp from the + projects. We don't really need them in ACE DLL. + + * ace/Service_Main.cpp: Removed the file from CVS. Lots of + Service_Config examples can be found all round ACE directories + so we really don't need it here anymore. + +Tue Apr 14 20:30:53 1998 Steve Huston + + * ace/OS.i (mutex_init, cond_init): Added sections to properly + handle error conditions on platforms which claim + ACE_HAS_PTHREADS_1003_DOT_1C. + +Tue Apr 14 16:39:42 1998 Nanbor Wang + + * ace/ACE.cpp (ldfind): Fixed a miscalculated string size. + Thanks to Jason Katz for reporting the + bug. + +Tue Apr 14 14:33:33 1998 David L. Levine + + * tests/Thread_Manager_Test.cpp (main): don't try to suspend/resume + DCE threads, because they don't support it. Added a start barrier, + to ensure that worker threads set up their signal handlers before + the main thread tries to signal them. Drop DEFAULT_ITERATIONS from + 100000 to 10000 because 100000 takes a long time on a 200 MHz + Pentium. + +Tue Apr 14 12:59:04 1998 Douglas C. Schmidt + + * tests/Hash_Map_Manager_Test.cpp: Changed the consts to + size_t, as well... + +Tue Apr 14 11:40:23 1998 David L. Levine + + * tests/Hash_Map_Manager.cpp: made type, size_t, of String_Table_size + explicit, instead of using the default type of int. + +Tue Apr 14 10:10:46 1998 Douglas C. Schmidt + + * ACE version 4.4.41 released. + +Tue Apr 14 07:19:25 1998 David L. Levine + + * bin/make_release (create_kit): ACE+TAO instead of ACE_TAO. + Thanks to Doug for reporting this. + + * ace/OS.h (ACE_Thread_Adapter): added friend class declaration + to avoid g++ warning: only defines a private destructor and + has no friends. + + * ace/OS.cpp (ACE_Thread_Adapter::invoke): only declare local + thr_desc if ACE_HAS_WIN32 and ACE_HAS_MFC. + +Tue Apr 14 00:46:05 1998 Douglas C. Schmidt + + * ACE version 4.4.40 released. + +Mon Apr 13 19:19:13 1998 Douglas C. Schmidt + + * ace/OS: Made the destructor of ACE_Thread_Adapter private to + keep people like Russ from abusing this class... ;-) + + * ace/OS.cpp (invoke): We were incorrectly deleting this and then + using one of its fields! Thanks to the ever-vigilant Russ + Noseworthy for reporting this. + + * ace/Log_Record.cpp (print): Added VERBOSE_LITE support to the + code so we don't spew out quite so much information. + + * ace/Log_Msg.cpp (log): Replaced all calls to + ACE_Log_Record::print() so that they pass the + ACE_Log_Msg::flags_ parameter. + + * ace/Log_Record.h: Changed the 'int verbose' parameter to 'u_long + verbose_flag' parameter so that we can pass in the + ACE_Log_Msg::flags_ and check to see what they are enabled with! + + * tests/test_config.h: Changed VERBOSE to VERBOSE_LITE so we don't + have quite so much junk printed out for the tests! + + * ace/Log_{Priority,Record}: Added a new flag called VERBOSE_LITE + that isn't quite as verbose as VERBOSE (it only prints things + that can change between calls to the ACE_Log_Msg::log() method). + In addition, also changed the ACE_Log_Record::print() method so + it prints the string format for the ACE_Log_Priority types. + This is a lot more legible than printing the numbers. + + * ace: Removed all uses of ACE_HAS_WILDCARD_BIND. This is now the + default behavior. If there's some weird platform that DOESN'T + have this behavior, we'll deal with that by setting the + ACE_LACKS_WILDCARD_BIND flag. + + * ace/OS.cpp (invoke): Removed the (void *) cast on delete this. + It wasn't necessary. Thanks to Steve Huston and David Levine + for reporting this. + +Mon Apr 13 19:12:49 1998 Nanbor Wang + + * ace/DEV_Connector.i (ACE_DEV_Connector): + * ace/Asynch_IO.cpp (accept,addresses): UNICODE changes. + +Mon Apr 13 18:05:26 1998 Steve Huston + + * tests/Thread_Manager_Test.cpp: Disabled the suspend/resume action + for Pthreads platforms. + +Mon Apr 13 10:18:59 1998 David L. Levine + + * ace/High_Res_Timer.i (hrtime_to_tv): in tv.usec calculation, + moved the cast to long to after the division by global_scale_factor_. + This is necessary for compatibility with ACE_U_LongLong. + + * bin/make_release (get_versions): use $KIT instead of hard-coded + ACE, so that it works with TAO. (tag): translate dots to + underscores, because CVS doesn't allow dots in tags. Thanks to + Doug and Hans Rohnert for reporting these. + +Sun Apr 12 21:11:53 1998 Nanbor Wang + + * ace/OS.h: Prevent using ACE_HAS_MOSTLY_UNICODE_APIS without UNICODE. + + * ace/OS.cpp (thr_create): + * ace/Thread_Manager.cpp (spawn_i): Removed directive + ACE_NO_THREAD_ADAPTER and its related code. + +Sat Apr 11 22:20:51 1998 Nanbor Wang + + * tests/Thread_Manager_Test.cpp (main): Don't check execute result + of kill_grp statement if we are running on Win32 platforms. + thr_kill is not supported there. + +Sat Apr 11 20:00:12 1998 Douglas C. Schmidt + + * ACE version 4.4.39, released Sat Apr 11 20:00:12 1998. + +Sat Apr 11 19:58:56 1998 Douglas C. Schmidt + + * Nanbor removed a bunch of *.MAK files, which were quite large + and taking up lots of space. + +Sat Apr 11 18:58:24 1998 Steve Huston + + * ace/INET_Addr.cpp: Fixed missing paren. + + * netsvcs/servers/servers4.mdp: Added ..\lib to include directories + for Release build. + +Sat Apr 11 13:28:19 1998 Douglas C. Schmidt + + * ACE version 4.4.38, released Sat Apr 11 13:28:19 1998. + +Sat Apr 11 12:46:08 1998 Douglas C. Schmidt + + * ace/config-mvs.h: Added some ACE_SIZEOF_* macros for MVS. + Thanks to Chuck Gehr for reporting + this. + + * ace/INET_Addr.cpp: Added a newline and a better explanation of + what went wrong if an error occurs. Thanks to Luca for + reporting this. + +Fri Apr 10 02:42:35 1998 Nanbor Wang + + * ace/Log_Msg.{h,cpp} (log_hexdump): + * ace/ACE.{h,cpp} (format_hexdump): The buffer to be hex-dumped should + always be of type (const char *) no matter we have UNICODE + system strings or not. + + * ace/OS.{h,cpp} (ACE_CE_Bridge): This new class bridges + a text-based ACE programs with a default window that prints out + the default ACE_Log_Msg output. + + CE always uses non-static object manager and we replace the + original main function with a well know entry that the main + window program can call back from to invoke the ACE program in a + separate thread. + + * ace/Log_Record.{h,cpp}: Added support for passing strings as + windows messages. + + * ace/Log_Msg.cpp (log): Specialized CE support. + + * windoezCE: The template windows program that receives ACE + messages. See CE-Status or README file for more info. + +Fri Apr 10 00:41:23 1998 Douglas C. Schmidt + + * tests/Reactor_Exception_Test: Tidied the test up a bit. Thanks + to Bob Laferriere for suggesting + this. + + * tests/test_config.h: Enabled ACE_Log_Msg::VERBOSE since it gives + more information that can be useful for debugging. + +Fri Apr 10 00:04:03 1998 Irfan Pyarali + + * ace/Proactor.cpp (post_completion): Added a new method to the + Proactor. It can be used to post a result to the completion port + of the Proactor. If errors occur, the result will be deleted by + this method. If successful, the result will be deleted by the + Proactor when the result is removed from the completion port. + Therefore, the result should have been dynamically allocated and + should be orphaned by the user once this method is called. + + Changed the timer mechanism to use this new method rather than + posting to the completion port directly. + + Thanks to Jason Katz for the + improvements. + +Thu Apr 9 17:31:47 1998 Douglas C. Schmidt + + * Updated all the Makefile dependencies and also added the + appropriate CVS strings to all Makefiles. + + * examples/IPC_SAP/SOCK_SAP: Improved both the CPP-unserver.cpp + and CPP-inserver.cpp programs so they work identically wrt + concurrency and logic. + + * ace/LSOCK_Stream.cpp: Fixed the get_remote_addr() and + get_local_addr() methods to work correctly. Apparently, + getpeername() doesn't work appropriately for UNIX domain + sockets, so we simply have both methods call getsockname(). + Thanks to Chuck Gehr for pointing out this problem. + + * ace/FILE_IO.cpp (get_local_addr): The RHS has an additional + field that is the FILE name, which did not get copied. Added an + ACE_dynamic_cast() to do the right thing here. Thanks to Ganesh + Pai for reporting this. + + * ace/Malloc*: Factored out all the code in ACE_Static_Allocator + into a new non-templatized base class called + ACE_Static_Base_Allocator so that we don't trigger multiply + defined symbols when we use this in TAO. Thanks to Carlos for + this very insightful trick! + + * tests/Thread_Manager_Test.cpp (main): Added ACE_ASSERT + statements so that we bailout if things go awry. Thanks to + Robert J. Laferriere for reporting + this. + +Thu Apr 09 18:06:53 1998 Nanbor Wang + + * ace/High_Res_Timer.i (hrtime_to_tv): Cast the parameter for usec + to long. It can be fixed because of Darrell's vigilance. + +Thu Apr 09 17:55:21 1998 Steve Huston + + * ace/config-hpux-10.x.h, config-hpux11.h, config-aix-4.2.x.h: + Added ACE_HAS_WILDCARD_BIND. + +Thu Apr 09 16:43:26 1998 Irfan Pyarali + + * ace/ACE.*: Changed *_version() functions to be non-inlined. + After this change, inclusion of ace/Version.h can be moved into + ACE.cpp. This change helps as all of ACE doesn't have to be + compiled after Version.h changes (Version.h changes every time a + new beta is produced). + +Thu Apr 9 12:27:23 1998 Carlos O'Ryan + + * tests/Hash_Map_Manager_Test.cpp: POOL_SIZE was simple "const + POOL_SIZE" I changed that to "const int POOL_SIZE". Added + missing template instantiation for Static_Allocator. + +Thu Apr 09 10:50:18 1998 Nanbor Wang + + * ace/WFMO_Reactor.cpp (dump): Fixed signed/unsigned mismatched + warnings on NT. Thanks to Darrell for noticing the bug. + +Thu Apr 9 09:37:08 1998 Douglas C. Schmidt + + * ace/Malloc_T: Moved the ACE_Static_Allocator::dump() method into + the Malloc_T.cpp file so we'd get a vtable... Thanks to David + Levine for reporting this. + + * tests/Hash_Map_Manager_Test.cpp (run_test): Added a return + value to make G++ and David Levine happy ;-). + +Thu Apr 09 10:50:18 1998 Nanbor Wang + + * ace/WFMO_Reactor.cpp (dump): Fixed signed/unsigned mismatched + warnings on NT. Thanks to Darrell for noticing the bug. + +Wed Apr 08 17:29:01 1998 Irfan Pyarali + + * ace/SOCK_Acceptor.cpp (open): There was a boo-boo in open() as + we were only calling bind_port() and ignoring the port supplied + by the user. Call bind_port only if port == 0. + +Wed Apr 8 01:09:52 1998 Douglas C. Schmidt + + * ace/Malloc_T: Added a new ACE_Static_Allocator class, which is + highly optimized for allocations where (1) all the memory size + is known in advance and (2) no deletions are done. This class + will ultimately be used in TAO to improve it's startup + performance for operation tables initialization. + + * tests/Hash_Map_Manager_Test.cpp: Enhanced the test so that it + uses the new ACE_Static_Allocator feature. + + * ace/OS: Added support for the rename() method. Thanks to Ganesh + Pai for suggesting this. + + * ace/config-win32-common.h, + config-sunos*.h: + config-irix-6*.h: + Enable the ACE_HAS_WILDCARD_BIND macro. + + * ace/ACE.cpp: Modified the bind_port() method so that it is more + efficient on platforms that interpret a 0 port to bind() as a + request for the kernel to select the port. Thanks to Chris + Cleeland for pointing this out. + + * ace/Hash_Map_Manager: Made a bunch of minor changes to fix some + subtle deadlocks with intra-class locking. + + * tests/Map_Manager_Test.cpp: Restructured the tests so that we + don't keep recomputing end() and rend() of the map in each loop + iteration! + +Wed Apr 08 10:02:16 1998 David L. Levine + + * bin/make_release: added this script that creates ACE and/or + TAO releases. + + * Makefile: added support for make_release. See comments at + the top of the Makefile. The old release mechanism has + been retained; to use it: make release-old or + make releaseall-old. + +Wed Apr 08 00:37:33 1998 Irfan Pyarali + + * ace/ACE.cpp (bind_port): This call was not flexible enough as it + always assumed that the user wanted INADDR_ANY. Added an extra + parameter to this function where the user can pass in the addr + that she is interested in. This extra parameter defaults to + INADDR_ANY, so no existing should break. + + * ace/SOCK_Acceptor.cpp (open): Not enough information was being + passed to the new ACE::bind_port() call. Changed open() so that + the sin_addr part of the address is passed along to + ACE::bind_port(). + +Tue Apr 07 15:25:08 1998 David L. Levine + + * ace/config-irix*.h: fixed determination of ACE_SIZEOF_LONG_DOUBLE, + depending on system release and ABI. Thanks to Robert J. + Laferriere for figuring it all out. + +Mon Apr 06 01:29:35 1998 Nanbor Wang + + * ace/ace_ce_dll.dsp: Update project files. Rearrange dll filenames a + bit so that it's eaier to have various ACE libraries for various + CE supported CPUs. Files for every supported CPU are generated + under CPU specific directory as follow: + + CPU Directory Name + Sh3 series ace/WCE/SH aced.{lib,dll} ace.{lib,dll} + MIPS series ace/WCE/MIPS aced.{lib,dll} ace.{lib,dll} + x86 emulation ace/WCE/x86em aced.{lib,dll} ace.{lib,dll} + + * ace/config-win32-common.h: Prevent CE from using wsock32.lib. + +Sun Apr 05 16:44:31 1998 Nanbor Wang + + * ace/OS.h (ASYS_ONLY_MULTIBYTE_STRING): New macro. Used to + activate wchar string to char string conversion only under CE, + under other cases, the argument to this macro is treated as + a regular char string. + + * ace/INET_Addr.cpp (set): Changed to use + ASYS_ONLY_MULTIBYTE_STRING. This has gotten out of control + now. I need to think of a better name for these macros. + +Tue Apr 07 09:30:28 1998 David L. Levine + + * include/makeinclude/platform_lynxos.GNU: set up PATH when + cross-compiling. With this change, users don't need to + do anything special to their platform_macros.GNU or + environment to cross-compile for LynxOS (assuming that + the default platform_lynxos.GNU configuration is suitable). + +Mon Apr 06 16:28:32 1998 Steve Huston + + * examples/Service_Configurator/IPC-tests/server/svc.conf: Corrected + library name to load tests from. Thanks to Sandro Doro + for noticing there was a problem here. + +Sun Apr 05 10:20:26 1998 David L. Levine + + * include/makeinclude/platform_lynxos.GNU: only define + CROSS-COMPILE if not building on LynxOS. + + * ace/OS.h: fixed ACE_CAST_CONST definition with Sun CC. + +Sun Apr 05 00:20:52 1998 Nanbor Wang + + * ace/ACE.h: Moved "#include "ace/OS.h" out of _ACE_H_ block to + resolve the circular inclusion that occured when building ACE + Unicode Release version. + +Sat Apr 04 21:19:32 1998 Douglas C. Schmidt + + * ACE version 4.4.37, released Sat Apr 04 21:19:32 1998. + +Sat Apr 04 19:41:03 1998 Nanbor Wang + + * ace/OS.cpp (thr_exit): Forgot to access creation flags thru + the access function. + +Sat Apr 04 14:01:53 1998 Steve Huston + + * performance-tests/Makefile: Put UDP back in dir list. + +Sat Apr 04 07:45:33 1998 David L. Levine + + * ace/Basic_Types.h,config-sunos4*.h,README: don't use + u_longlong_t on Suns if ACE_LACKS_U_LONGLONG_T is defined. + Define ACE_LACKS_U_LONGLONG_T in all SunOS4 config files. + Thanks to John Lindal for reporting + this. + +Sat Apr 4 02:06:57 1998 Nanbor Wang + + * ace/OS.cpp (invoke,thr_exit): (*Win32*) We also need to consider + threads that are not spawned by ACE_Thread_Manager by checking + the validity of cached ACE_Thread_Descriptor. In any rate, + please avoid using thread functions in ACE_Thread::* and + ACE_OS::thr_* directly. + +Sat Apr 4 01:03:17 1998 Alexander Babu Arulanthu + + * ace/Map_Manager.cpp (map): Added map method for the iterator interface. + +Sat Apr 4 00:55:30 1998 Douglas C. Schmidt + + * netsvcs/clients/Naming/{Client,Dump_Restore}/Makefile: + Moved all program source names to PSRC, not SRC, for + 'make depend'. + +Fri Apr 3 21:18:51 1998 Douglas C. Schmidt + + * ace/OS.cpp (cleanup): Moved ACE_Cleanup::cleanup() back into the + *.cpp file so that we have at least one non-inline virtual + function. + + * ace/OS (cleanup): Created a dummy ACE_Cleanup constructor since + the lack of this may be causing a bug with CC and the linker for + TAO's IDL compiler. Also moved the constructor and destructor of + ACE_Cleanup into the OS.i file and made them inline. We'll fix + this bug yet!!!! + +Fri Apr 03 18:45:35 1998 Steve Huston + + * apps/JAWS/clients/Blobby/Makefile + * apps/JAWS/clients/Caching/Makefile + * examples/ASX/Event_Server/Event_Server/Makefile + * examples/ASX/UPIPE_Event_Server/Makefile + * examples/Logger/simple-server/Makefile + * examples/Mem_Map/IO-tests/Makefile + * examples/Reactor/Multicast/Makefile + * examples/Service_Configurator/Misc/Makefile + * examples/Shared_Malloc/Makefile + * performance-tests/Synch-Benchmarks/Makefile + Adjusted for corresponding changes to rules.bin.GNU and/or + rules.lib.GNU, below. + + * examples/Connection/non_blocking/Makefile + * examples/Service_Configurator/IPC-tests/server/Makefile + * examples/Timer_Queue/Makefile + * performance-tests/Misc/Makefile + Moved all program source names to PSRC, not SRC, for + 'make depend'. + + * performance-tests/Makefile: Removed UDP from list of dirs to build. + + * include/makeinclude/rules.bin.GNU: Set OBJEXT and VOBJS from the + SRC files in the Makefile (LSRC sets VLOBJS in rules.lib.GNU; + SRC sets VOBJS in rules.bin.GNU). + + * include/makeinclude/rules.local.GNU: depend rule will also operate + on $(PSRC) in addition to $(SRC). PSRC is new - if you have more + than one program to build in a makefile, set PSRC to the source + files for make depend. + + * include/makeinclude/rules.lib.GNU: Use VLOBJS for archive lib object + files; using VOBJS gets it confused with VOBJS in rules.bin.GNU and + makes it very difficult to build lib and exe from same Makefile. + +Fri Apr 3 10:40:10 1998 Nanbor Wang + + * ace/OS.cpp (invoke): We were using AfxGetThread to determine + whether a thread was created with AfxBeginThread or + _beginthreadex. This seemed to cause some subtle problem with + MSVC 4.2. Since we always cached the Thread_Descriptor in TSS + now, we can just check how a thread was created and use the + appropriate thread exiting method. Thanks to Detlef Becker + for tracing down this obscure + bug. + + * ace/Thread_Manager.{h,i} (flags): Added this new access function + into ACE_Thread_Descriptor to get the creation flags for a + thread. + +Fri Apr 03 10:01:32 1998 Steve Huston + + * ace/ACE.cpp (handle_timed_complete): On AIX, always check a + completed non-blocking connect() because AIX sets only the write + handle from select regardless of whether the connect succeeded + or not. + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp: Removed + the #include - this is taken care of via ace/OS.h. + Having the #include in Dump_Restore.cpp caused some very weird + compile errors on DG/UX. + + * netsvcs/lib/Server_Logging_Handler.cpp: Fixed template instantiations + for Base_Optimizer, non-static logging cases. + +Fri Apr 03 09:16:24 1998 David L. Levine + + * ace/OS.cpp (ACE_TSS_Info::key_in_use): return true if + thread_count_ > 0, not if it is != -1. Thanks to Chris + Lahey for finding and reporting this. + + * ace/OS.i (thr_yield): on VxWorks, changed argument of + ::taskDelay () from 0 to 1. With an argument of 0, + ::taskDelay () doesn't appear to yield the current thread. + + * tests/run_tests.vxworks: Reactor_Notify_Test is OK on + VxWorks now. + + * ace/OS.h,config-sunos5.5-sunc++-4.x.h: added ACE_CAST_CONST, + so that we can work around broken cast constness requirements + with Sun CC 4.2. It requires, for example, that a reinterpret + cast to a local pointer variable in a const member function be + const. Wrong. + + * ace/Basic_Types.i (operator/ and %): fixed comments: former + instead of latter. + +Thu Apr 02 16:23:12 1998 Irfan Pyarali + + * ace/WFMO_Reactor.i (dump): Also changed the method from HANDLE + to ACE_HANDLE. + +Thu Apr 2 15:36:20 1998 Douglas C. Schmidt + + * ace: Added + + #define ACE_HAS_STL_QUEUE_CONFLICT + + to the config files which had ACE_HAS_STL_MAP_CONFLICT defined, + i.e., + config-sunos5.5-g++.h + config-sunos5.5-sunc++-4.x.h + + Thanks to Russ Noseworthy for + reporting this. + +Thu Apr 2 15:14:35 1998 Sumedh Mungee + + * ace/WFMO_Reactor.h (dump): Renamed HANDLE to ACE_HANDLE. + +Thu Apr 02 14:23:11 1998 David L. Levine + + * tests/Reactor_Notify_Test.cpp (Supplier_Task::handle_output): + added a thr_yield () so that the Supplier_Task always gets a + chance to run. + + * tests/run_tests.sh: Reactor_Notify_Test is OK on Chorus now. + +Wed Apr 01 18:59:42 1998 Irfan Pyarali + + * ace/WFMO_Reactor.cpp (dump): Added dump() methods. + + * ace/Msg_WFMO_Reactor.cpp (wait_for_multiple_events): Reverted + Nanbor's change. The flag is properly set in + ACE_Msg_WFMO_Reactor::alertable_handle_events(). + +Wed Apr 1 15:40:01 1998 Douglas C. Schmidt + + * ace: Made the WMFO_Reactor and Select_Reactor's dump() methods + virtual to underscore the fact that the Reactor_Impl's new + dump() method is also virtual. + + * ace/OS.h: Changed ACE_HAS_STL_MAP_CONFLICT to + ACE_HAS_STL_QUEUE_CONFLICT for the appropriate cases in ACE. + Thanks to Russ Noseworthy for + reporting this. + + * ace/CORBA_Handler.cpp (ACE_CORBA_Handler): The reference_count_ + data member wasn't being initialized correctly. Thanks to + Mahesh Chandwani for reporting this. + + * ace: Renamed config-sunos5.5-sunc++-4.x-orbix.h to + config-sunos5.x-sunc++-4.x-orbix.h since this config file works + with SunOS 5.5 and 5.6. Thanks to Mahesh Chandwani + for reporting this. + +Wed Apr 01 16:28:30 1998 David L. Levine + + * ace/Reactor.{h,cpp},Reactor_Impl.h (dump): added dump () + method, which calls the (existing) dump () in the reactor + implementation. + + * ace/High_Res_Timer.* (hrtime_to_tv): fixed conversion of + ACE_hrtime_t to ACE_Time_Value to be compatible with + ACE_U_LongLong. + +Wed Apr 01 09:32:27 1998 Nanbor Wang + + * ace/Msg_WFMO_Reactor.cpp (wait_for_multiple_events): Should not + wait for all objects in this function. + +Tue Mar 31 15:27:25 1998 Steve Huston + + * apps/JAWS/server/JAWS_Pipeline_Handler.cpp: Defined 'status' in + the put() function. + + * ace/config-dgux-4.x-ghs.h: Removed settings for ACE_SIZEOF_LONG_LONG + since the compiler doesn't really support a long long that ACE + is looking for (64-bit). Use the ACE-supplied ACE_ULongLong type. + +Tue Mar 31 10:46:23 1998 Nanbor Wang + + * ace/Msg_WFMO_Reactor.cpp: Changed to use + MsgWaitForMultipleObjects if we are not under NT. Also in + MsgWaitForMultipleObjectsEx, we should use NT defined flags + instead of the boolean "alertable" directly. + +Tue Mar 31 07:22:09 1998 David L. Levine + + * ace/OS.i (cond_timedwait): restored ACE_HAS_DCE_DRAFT4_THREADS + behavior to use absolute time. Special-case only on LynxOS, + which requires a relative time. Thanks to Steve Coy + for reporting this on HP-UX. + + * tests/Thread_Manager_Test.cpp (worker): cache the thread's + Signal_Catcher on entry. That way, we don't have to + dereference it in the worker's loop. It seems that a worker + thread can continue to run after main exits (and cleans up + TSS). That shouldn't happen, but it looks like it does on + Linux, LynxOS, and Digital Unix. Thanks to James CE Johnson + for verifying that the fix works on Linux/ + Intel and DU 4.0. + + * examples/Threads/task_five.cpp (main): wrapped return statement + at end with ACE_NOTREACHED. This will prevent compiler warnings + from Green Hills and DEC CXX, and maybe SGI cc. + +Fri Mar 27 23:04:08 1998 David L. Levine + + * ace/config-linux-common.h: added ACE_DEFAULT_MAX_SOCKET_BUFSIZ + 65535, because some Linux 2.1.x kernels fail setsockopts if + bigger than that. Thanks to Ravi Nagabhyru + for reporting that. Also changed hard-code ACE_PAGESIZE to + ACE_HAS_GETPAGESIZE, even though getpagesize () doesn't get + used. ACE_OS::getpagesize () uses sysconf on Linux. + + * performance-tests/UDP/udp_test.cpp (main): getopt.optarg instead + of optarg, for -f option. + + * ace/IPC_SAP.cpp (enable,disable): removed the ACE_NOTREACHED + wrappers around the return statements. Seems that some versions + of Green Hills complain about an unreachable statement, but + we'll live with it. This change is only visible with SGI, + DEC CXX, and Green Hills. + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: added missing + close paren after ppc conditional. Thanks to Brian Mendel for + reporting this. + +Fri Mar 27 16:47:26 1998 Steve Huston + + * tests/tests.mdp: Made settings for Env_Value_Test consistent with + other tests, so that run_tests.bat can find it. + + * netsvcs/servers/servers4.mdp: Added ..\lib to Include directories + when building in Release mode. + +Fri Mar 27 13:55:13 1998 Nanbor Wang + + * ace/High_Res_Timer.i (gettime): ACE_OS::gettimeofday doesn't + take any argument. + +Fri Mar 27 09:50:52 1998 Steve Huston + + * ace/Strategies_T.cpp: Added #include "ace/Service_Repository.h" for + compile on HP. Thanks to Steve Coy for this. + +Fri Mar 27 09:21:21 1998 David L. Levine + + * tests/test_config.h: with Green Hills on VxWorks, rename + main to ace_main for compatibility with run_tests.vxworks. + + * ace/OS.{h,i},High_Res_Timer.* (gethrtime): added an optional + argument to allow specifying start/increment/stop to a timer. + It is currently only used on Chorus. On Chorus, using + the default ACE_HRTIMER_GETTIME will use clock_gettime () + instead of sysBench (). sysBench () disables interrupts, + so it must be used with care. + +Thu Mar 26 21:18:57 1998 David L. Levine + + * ace/Basic_Types.h,config-g++-common.h,config-freebsd*.h, + config-netbsd.h: moved setting of ACE_SIZEOF_LONG_DOUBLE to 12 + from Basic_Types.h to config-g++-common.h and the FreeBSD/NetBSD + config files. + +Thu Mar 26 20:53:30 1998 Nanbor Wang + + * ace/Containers.{h,i,cpp}: Changed the template parameter name + to to avoid namespace polution. Thank to John + Mulhern <9107@MN3.LAWSON.lawson.com> for suggestion this. + +Thu Mar 26 17:23:38 1998 Douglas C. Schmidt + + * ACE version 4.4.36, released Thu Mar 26 17:23:38 1998. + +Thu Mar 26 12:54:57 1998 David L. Levine + + * ace/IPC_SAP.cpp (enable,disable): wrapped return statement + at end with ACE_NOTREACHED. + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: added support + for x86 targets. + + * ace/Basic_Types.h: sizeof (long double) is 8 on ghs/VxWorks/i386, + not 12. + +Wed Mar 25 10:10:04 1998 David L. Levine + + * include/makeinclude/platform_{chorus,vxworks5.x}_ghs.GNU: + change OFLAGS to OCFLAGS. + + * include/makeinclude/platform_chorus_ghs.GNU: if debug is enabled, + link with crth_d.s.o instead of crth.s.o. + + * ace/config-g++common.h: don't #define + ACE_HAS_TEMPLATE_SPECIALIZATION with egcs 2.91. Thanks to + Sudish Joseph and + Loren Rittle for reporting this + apparent bug with egcs 2.91. (egcs 2.90 builds ACE cleanly + with ACE_HAS_TEMPLATE_SPECIALIZATION.) + + * include/makeinclude/platform_vxworks5.x_g++.GNU: add VxWorks + host bin directory to PATH if its not already there. + +Tue Mar 24 19:48:44 1998 Irfan Pyarali + + * ace/Proactor.cpp (timeout): Changed comparison from || to + &&. Thanks to Jason Katz for reporting + this. + +Tue Mar 24 18:14:18 1998 Steve Huston + + * ace/Env_Value_T.h: added #include "ace/OS.h" to get the definition + for ACE_static_cast - AIX xlC needs it for auto template generation. + +Tue Mar 24 09:00:36 1998 Carlos O'Ryan + + * bin/auto_compile: + Missing newline after the "DISABLED" message. + +Tue Mar 24 07:38:44 1998 David L. Levine + + * ace/config-sunos5.5-g++.h: replaced ACE_PAGE_SIZE with + ACE_HAS_GETPAGESIZE, and added ACE_HAS_STL_MAP_CONFLICT. + Thanks to Loren Rittle for reporting + these. + +Mon Mar 23 12:06:30 1998 David L. Levine + + * performance_tests/UDP/udp_test.cpp: made use of the Reactor + optional. With this change, the performance is comparable + to the original C version. + + * ace/OS.{h,i} (wslen,wscpy): added these, and WChar typedef, + for TAO. + + * include/makeinclude/platform_chorus_ghs.GNU: moved directories + to /project/doc/mvme/. + + * ace/config-vxworks5.x.h: protected #define of ACE_MAIN so that + it can be #defined on the command line. + +Mon Mar 23 11:38:43 1998 Nanbor Wang + + * ace/OS.h (MAXPATHLEN): Guard the MAXPATHLEN definition with + #ifndef in case if has already been defined. Thanks to "Patrick + J. McNerthney" for reporting this. + +Mon Mar 23 03:18:50 1998 Douglas C. Schmidt + + * ACE version 4.4.35, released Mon Mar 23 03:18:50 1998. + +Mon Mar 23 00:03:37 1998 Irfan Pyarali + + * examples/Reactor/ReactorEx/test_abandoned.cpp: Tests the + WFMO_Reactor's ability to handle abandoned mutexes. + + * examples/Reactor/ReactorEx/test_apc.cpp: Tests the + WFMO_Reactor's ability to handle regular APC notifications. + +Sun Mar 22 23:47:00 1998 Irfan Pyarali + + * ace/WFMO_Reactor.cpp: Added code to the Reactor to make it more + resilient when the wait() function returns WAIT_IO_COMPLETION + and WAIT_ABANDONED. + + ok_to_wait: Keep waiting if wait() returns WAIT_IO_COMPLETION. + + dispatch: Return if wait() returns + WAIT_IO_COMPLETION. + + dispatch_handles: Added code to correctly handle WAIT_ABANDONED + and to correctly figure out the index of the handler to be + dispatched. + + Thanks to Beskrovny Evgeny (evgeny_beskrovny@icomverse.com) of + Comverse Network Systems for pointing out the problem with + WAIT_IO_COMPLETION. + + * ace/Reactor.cpp (run_alertable_event_loop): Added new function + that runs the Reactor using alertable_handle_events() instead of + handle_events(). + +Sat Mar 21 19:58:42 1998 Nanbor Wang + + * ace/OS.i (flock_destroy): lock->lockname_ should be cast to + LPTSTR instead of char*. Thanks to Goran Lowkrantz + for reporting this. + + * examples/Threads/task_five.cpp: Allow users to set thread stack + size from command lines. If a user doesn't give one, it will be + set to 8k on non-Windows platforms. + +Fri Mar 20 22:07:15 1998 Nanbor Wang + + * ace/ACE_Library.{mak,mdp}: Added Msg_WFMO_Reactor. + + * ace/Asynch_IO.cpp (cancel): Added version check because MSVC 4.2 + doesn't support CancelIo. + +Fri Mar 20 21:46:16 1998 Douglas C. Schmidt + + * ACE version 4.4.34, released Fri Mar 20 21:46:16 1998. + +Fri Mar 20 20:53:27 1998 Nanbor Wang + + * ace/Parse_Node.cpp: Fixed typos. + +Fri Mar 20 14:18:53 1998 Douglas C. Schmidt + + * performance-tests/UDP/udp_test.cpp: Completed the ACE'ification + of this test. + +Fri Mar 20 09:31:22 1998 David L. Levine + + * ace/OS.h: with ACE_LACKS_WCHAR_T, changed wchar_t typedef + from long to ACE_UINT32 to ensure that it is 4 bytes on + any platform. + + * performance-tests/UDP/udp_test.cpp: added this test, which + provides UDP performance statistics. Thanks to Fred Kuhns + for contributing the test. + +Thu Mar 19 10:15:27 1998 Steve Huston + + * ace/OS.i: Changed the dynamic library load/unload code so that + on HP-UX, g++ does the same thing as aC++ (not like HP C++), using + and shl_(un)load. Thanks to Kirill Rybaltchenko + for this change. + +Thu Mar 19 10:13:35 1998 David L. Levine + + * performance-tests/Misc/preempt.cpp: 1) Added -f option to fork + instead of spawning new threads. 2) Added -l option for + specifying number of iterations of low priority thread/process. + 3) On Solaris, print LWP ID. + +Thu Mar 19 02:47:42 1998 Nanbor Wang + + * ace/ace_dll.dsp: Link against user32.lib for all configurations + for we now use Msg_WFMO and related APIs in ACE. (We should do + the same to ace_lib.dsp.) + + * ace/config-WinCE.h: Added dummy definition of stdin and stdout. + They don't have any real effect. + + * ace/ACE.{h,cpp} (ldopen,ldfind): Made these functions visible + under CE. Modified them to work under CE. + + * ace/OS.cpp: Added scope name to day_of_week_name and + month_name. They are used only on CE. + + * ace/OS.{h,i}: Added some dummy C methods for CE. Yacc and Lex + generated codes use these functions, although we don't really + use them in ACE. + + * ace/OS.i (exit): Added implementation of ACE_OS::exit under CE. Since + there's no ExitProcess available, I use TerminateProcess, which + is not exactly the same as using ExitProcess but that's the + closest thing I can think of. + (open): Made the char version unsupported under CE. + (fread,fwrite,...): Added dummy C methods definition for CE. + + * ace/Parse_Node.cpp: Regular CE stuff. There's a boundary + of char/wchar functions somewhere in this file. Most Svc_Conf + stuff uses char functions but the information gets converted to + wchar later. + + * ace/Service_Config.{h,i}: Added char version function for + Service_Type under CE. Service_Type (and its subclasses) are + the boundary of char/wchar functions. + + * ace/Service_Object.{h,i}: Added the chname method which always + returns char value of a Service_Object under all platforms. + + * ace/Svc_Conf.y: + * ace/Svc_Conf_y.cpp: + * ace/Object_Manager.{cpp}: Regular CE stuff. + + * ace/Svc_Conf_l.cpp: Regular CE stuff. Haven't figure out a way + to modify this from Svc_Conf.l yet. + + * ace/Service_Config.cpp + * ace/Object_Manager.{cpp}: Ifdef'ed inclusion of Naming Context + related header files out. Naming context uses Registry which + uses iostream and STL, both are not available on CE (yet?). + + * ace/WFMO_Reactor.{h,cpp}: + * ace/Proactor.{h,i,cpp}: + * ace/Asynch_IO.{h,cpp}: Ifdef'ed the body so they are not visible + under CE. CE doesn't have asynchronous IO. + +Wed Mar 18 21:30:39 1998 Douglas C. Schmidt + + * ACE version 4.4.33, released Wed Mar 18 21:30:39 1998. + +Wed Mar 18 16:36:17 1998 Douglas C. Schmidt + + * Makefile (releaseall): There is no more TAO.tar.gz. There are + now two tar files, ACE.tar.gz and ACE+TAO.tar.gz. + ACE+TAO.tar.gz contains ALL of ACE. In particular, it will + always have the same version number and same ACE contents as + ACE.tar.gz. The intent here is that people who just want to use + ACE will use ACE.tar.gz and people who want to use ACE and TAO + will use ACE+TAO.tar.gz. Thanks to David Levine and Irfan for + helping with this. + +Wed Mar 18 15:50:30 1998 Nanbor Wang + + * ace/Log_Msg.cpp (ACE_Log_Msg): Added codes to grab + ACE_Log_Msg_Manager's lock while updating the instance_count_. + There was a race condition without the change. Thanks to Detlef + Becker's thread creation stress + test to reveal the bug. + +Tue Mar 17 17:20:00 1998 Nanbor Wang + + * examples/Threads/test.dsw: + * examples/Threads/task_five.cpp: + * examples/Threads/task_five.dsp: + * examples/Threads/Makefile: Added a new ACE_Task testing + program. Thanks to Detlef Becker + for providing the source. + +Wed Mar 18 11:00:11 1998 Alexander Babu Arulanthu + + * ace/Hash_Map_Manager.cpp (map): This method has been added to + the ACE_Hash_Map_Iterator_Base class. + +Wed Mar 18 09:25:30 1998 Chris Gill + + * ace/ace.dsw: added user32.lib to link for dynamic library on NT + for all builds. + +Wed Mar 18 09:22:13 1998 David L. Levine + + * ace/Containers.cpp,Hash_Map_Manager.cpp,Map_Manager.cpp + (operator *): initialize retv to 0 to avoid warning about + using it before setting its value. + + * tests/Thread_Mutex_Test.cpp (test): added no-op statement to + suppress GHS warning about unused local variable "mutex". + + * tests/Priority_Buffer_Test.cpp (consumer): added no-op statement + to suppress GHS warning about unused local variable "cur_priority". + + * ace/README: removed ACE_HAS_BOOL. It was unused. + + * performance-tests/Misc/basic_func.{h,cpp},basic_perf.cpp: + With MSVC 5.0, do something in the empty iteration because + otherwise it gets completely optimized away. Thanks to + Alexander Ovsiankin for providing + this fix. + +Tue Mar 17 23:53:56 1998 Douglas C. Schmidt + + * examples/Threads/task_five.cpp (main): Reformatted Detlef's new + torture test so that it conforms to ACE programming conventions. + +Tue Mar 17 23:22:20 1998 Irfan Pyarali + + * ace/Reactor.cpp (ACE_Reactor): If + ACE_USE_MSG_WFMO_REACTOR_FOR_REACTOR_IMPL is defined, use + ACE_Msg_WFMO_Reactor for ACE_Reactor::instance(). + + * examples/Reactor/ReactorEx/test_window_messages.cpp: Tests + Msg_WFMO_Reactor's ability to handle regular events and window + messages. + +Tue Mar 17 21:41:57 1998 David L. Levine + + * examples/Threads/task_five.cpp (svc): use ACE_OS::sleepq + instead of ::Sleep. (main): declare "ii" outside of the + first loop because it is used in other loops. + +Tue Mar 17 16:02:26 1998 Irfan Pyarali + + * ace/WFMO_Reactor: Changes were made to WFMO_Reactor to make it + easier to extend it to handle window messages: + + - dispatch_handler() checks if there are window messages that + need to be dispatched if the matches . + If there are, they are dispatched by calling + dispatch_window_messages(). + + - dispatch_window_messages() is a noop for WFMO_Reactor. + + - Checking the return values from Wait*() functions was changed + as (WAIT_OBJECT_0 + nCount) is now a valid index. + + - Checking for remaining handles was abstracted into + poll_remaining_handles(). + + - Expiring of timer was abstracted out into expire_timers(). + Only the owner thread expires the timers. + + - calculate_timeout() was removed from + wait_for_multiple_events(). + + * ace/Msg_WFMO_Reactor: A new Reactor that specializes the + WFMO_Reactor. WFMO_Reactor uses WaitForMultipleObjects while + Msg_WFMO_Reactor uses MsgWaitForMultipleObjects. This allows + the Msg_WFMO_Reactor to react to Windows and COM/DCOM messages + in addition to the regular WFMO_Reactor events. + + Thanks to Beskrovny Evgeny (evgeny_beskrovny@icomverse.com) of + Comverse Network Systems for contributing this to ACE. + +Tue Mar 17 13:15:11 1998 Douglas C. Schmidt + + * ace/Future.cpp: Added missing ACE_MT macros so that we now + compile correctly if we don't have threads. Thanks to Laura + Paterno for reporting this. + +Tue Mar 17 15:13:17 1998 David L. Levine + + * ace/High_Res_Timer.cpp (dump): fleshed out the implementation. + + * ace/Profile_Timer.{h,cpp} (dump): implemented for platforms + w/o ACE_HAS_PRUSAGE_T and ACE_HAS_GETRUSAGE. + + * ace/OS.i (gethrtime): with ACE_HAS_CLOCK_GETTIME, carefully + construct return value to avoid arithmetic overflow if + ACE_LACKS_LONGLONG_T. + +Mon Mar 16 22:18:07 1998 Douglas C. Schmidt + + * ace/IPC_SAP.cpp: Moved return values outside of the #ifdefs to + quiet warning messages with KAI C++. Thanks to Laura Paterno + for reporting this. + +Tue Mar 17 00:04:53 1998 Nanbor Wang + + * ace/Svc_Conf.y: + * ace/Svc_Conf_y.cpp: Applied "Regular CE Tricks [TM]". + +Mon Mar 16 23:34:39 1998 Nanbor Wang + + * ace/README: + * ace/config-WinCE.h: Added ACE_LACKS_STRRCHR. + + * ace/OS.i: Added implementation of ACE_OS::strrchr () when + platforms don't provide one. + +Mon Mar 16 16:08:45 1998 David L. Levine + + * ace/High_Res_Timer.cpp: set global_scale_factor_ to 1000 with + ACE_HAS_CLOCK_GETTIME, because clock_gettime has nanosecond + resolution, and with PSOS. + + * ace/Profile_Timer.{h,cpp},tests/Handle_Set_Test.cpp: use units + of microseconds instead of seconds if ACE_LACKS_FLOATING_POINT. + + * ace/OS.i (hostname): on Chorus, try the HOST environment variable + if ::gethostname () returns an empty string. + +Mon Mar 16 13:04:58 1998 Seth Benjamin Widoff + + * ace/OS.h: + Extended the ACE_HAS_STL_MAP_CONFLICT to include 'queue' as well + as 'map.' 'queue' is defined in sys/stream.h, which is included in + OS.h by netinet/in.h and sys/timod.h. + +Mon Mar 16 00:22:40 1998 Nanbor Wang + + * CE-status: Updated CE port status. + + * ace/config-WinCE.h: Added macro definitions for EOF and BUFSIZ. + + * ace/OS.{h,i} (ace_isspace): Added both char and wchar version + functions. Notice that this can't be called isspace because + most compilers implement isspace as a macro. + (dlerror,dlsym): Added wchar version of these functions under CE. + + * ace/OS.cpp (fork_exec): Modified parameters passed to + CreateProcess under CE. + + * ace/ARGV.{h,i,cpp}: Unicodize this class under CE. Notice that + under CE, you won't be able to use environment variable + substitution since there's no environment variable at all. + + * ace/Reactor.cpp: Don't include Service_Config.h and + WFMO_Reactor.h under CE for now. Prevent Reactor from + reconfigure the service configurator. + + * ace/Task.cpp: Don't include Service_Config.h under CE for now. + Prevent Task_Base from reconfigure the service configurator. + + * ace/SString.cpp: Don't include Service_Config.h under CE for + now. + + * ace/Svc_Conf.h: + * ace/Shared_Object.{h,cpp}: + * ace/Service_Type.{h,i,cpp}: + * ace/Service_Repository.{h,cpp}: + * ace/Service_Object.{h,i,cpp}: + * ace/Service_Manager.{h,cpp}: + * ace/Service_Config.{h,i,cpp}: Unicodize service configurator + related classes. I still need to find a point which breaks the + usage of char functions that flex and yacc use and wchar + functions that most CE functions use. + + * ace/Get_Opt.{h,cpp}: + * ace/Local_Token.{h,i,cpp}: + * ace/Map_Manager.cpp: + * ace/Message_Queue.cpp: + * ace/Module.{h,i,cpp}: + * ace/Parse_Node.cpp: + * ace/Pipe.cpp: + * ace/Stream.{h,cpp}: + * ace/Stream_Module.{h,cpp}: + * ace/Token_Manager.{h,cpp}: + * ace/Activation_Queue.cpp: Unicodize classes. Regular CE stuff. + +Sat Mar 14 06:43:32 1998 David L. Levine + + * ace/Basic_Types.h,config-win32-common.h,config-irix*.h: + moved WIN32 and SGI-specific code out of Basic_Types.h and + into their respective config files. + + * ace/Object_Manager.h: changed ACE_HAS_NON_STATIC_OBJECT_MANAGER + to ACE_HAS_NONSTATIC_OBJECT_MANAGER in comments. Thanks to + Kirill Rybaltchenko for reporting + this. + + * include/makeinclude/platform_chorus_ghs.GNU: set PATH, and + remove /tmp/gh_*.[os] files that GreenHills leaves. + + * ace/INET_ADDR.cpp (get_host_name): on Chorus, save errno in + error so that it gets propagated back to the caller. + +Sat Mar 14 00:13:22 1998 Douglas C. Schmidt + + * ace/Task.h (ACE_Task_Base): Give a default value of 0 for the + Thread Manager so we can use this as a base class. + + * tests/Future_Test.cpp: Since the Scheduler provides its own + activation queue it doesn't make sense to inherit from ACE_Task + (which provides its own queue) but instead ACE_Task_Base + (which doesn't define its own queue). Thanks to Loren Rittle + for reporting this. + + * examples/Threads/future[12].cpp: Since the Scheduler provides + its own activation queue it doesn't make sense to inherit from + ACE_Task (which provides its own queue) but instead + ACE_Task_Base (which doesn't define its own queue). Thanks to + Loren Rittle for reporting this. + + * examples/Threads/future[12].cpp: Removed the explicit call to + scheduler_->close() to avoid closing the scheduler down twice. + Thanks to Loren Rittle for reporting this. + +Fri Mar 13 23:41:44 1998 Nanbor Wang + + * ace/Process.cpp (ACE_Process_Options): Moved column out of + ifdef'ed area. + +Fri Mar 13 21:17:51 1998 David L. Levine + + * ace/Process.cpp (ACE_Process_Options): reordered initializers + to match declaration order. + +Fri Mar 13 17:30:16 1998 Nanbor Wang + + * ace/Process.{h,i,cpp}: As CE's CreateProcess is basically + broken, you can only start a new process using ACE_Process. You + cannot set any of environment, process attributes, thread + attributes, current directory, stratup info, and security + attributes. I have modified these files so that most attribute + access functions just do nothing. Some of "do nothing" + functions were defined as ACE_INLINE on CE. + + * ace/Memory_Pool.cpp: Regular CE stuff. + +Fri Mar 13 17:42:17 1998 Irfan Pyarali + + * ace/WFMO_Reactor.cpp (handle_signal): If there are still + notification in the queue, we need to wake up again. + +Fri Mar 13 09:09:08 1998 David L. Levine + + * ace/Profile_Timer.*,config-chorus.GNU,README, + tests/Handle_Set_Test.cpp (test_performance): added + ACE_LACKS_FLOATING_POINT support. + + * include/makeinclude/platform_chorus_ghs.GNU: removed + -X445 from CFLAGS. I don't know what it does. + +Fri Mar 13 01:10:36 1998 Irfan Pyarali + + * ace/WFMO_Reactor: The following changes were made to make the + registration and removal of event_handlers from WFMO_Reactor + more robust. Thanks to Jonathan Biggar for + helping out. + + - ACE_WFMO_Reactor_Handler_Repository::Common_Info now contains + the delete_entry_ and close_masks_ fields as these were now + common to all three structures. + + - handle_additions() and handle_deletions() were changed to + make_changes_in_current_infos(), + make_changes_in_suspension_infos(), and + make_changes_in_to_be_added_infos() + + - Correct range for suspend_handlers() is 0 to max_handlep1_ + rather than (max_handlep1_ - 1) + + - suspend_handlers(), + resume_handlers(), + add_network_events_i(), + unbind_i(), + suspend_handler_i(), + resume_handler_i(), + unbind_all(), + + now go through the to_be_add_info_ array when making changes. + + * examples/Reactor/ReactorEx/test_prerun_state_changes.cpp: New + test added to check the Reactor's ability to handle state + changes before getting a chance to run. + + * examples/Reactor/ReactorEx/test_talker.cpp (main): Remove the + Procator from the Reactor so that the Proactor is not called + after it has been destroyed. + +Thu Mar 12 19:36:43 1998 Douglas C. Schmidt + + * ACE-INSTALL.html: Tidied up a bunch of things in this file. + Also, created a new $ACE_ROOT/os-patches/ directory and moved + the patches for Linux and LynxOS into this in order to + consolidate the patches into one location. + + * ace/WFMO_Reactor.cpp (upcall): Cleaned up a bunch of code to (1) + avoid a nasty "dangling else" bug and (2) simplify a bunch of + if/if statements. Thanks to Jonathan Biggar + for pointing this out. + +Thu Mar 12 18:21:15 1998 James C Hu + + * ace/config-linux-common.h: Incorporated changes that were + suggested by Robert Hanzlik to get ACE to + compile on Linux using glibc 2.1 and libg++/gcc 2.8. + +Thu Mar 12 17:25:28 1998 James C Hu + + * ACE-INSTALL.html: Added a table to Supported Platforms and + Compilers. + +Thu Mar 12 16:28:32 1998 Nanbor Wang + + * Apply regular string manipulation for CE to following files: + ACE.cpp ARGV.cpp Acceptor.cpp Activation_Queue.cpp + Asynch_Acceptor.cpp Asynch_IO.cpp CORBA_Handler.cpp + Connector.cpp Containers.cpp DEV_Addr.cpp Dynamic_Service.cpp + FIFO.cpp FIFO_Recv.cpp FIFO_Recv_Msg.cpp FIFO_Send.cpp + FIFO_Send_Msg.cpp FILE_Addr.cpp FILE_Connector.cpp Filecache.cpp + Future.cpp Get_Opt.cpp Hash_Map_Manager.cpp LSOCK.cpp + LSOCK_CODgram.cpp LSOCK_Connector.cpp LSOCK_Dgram.cpp + Local_Name_Space_T.cpp Local_Tokens.cpp Local_Tokens.i + Malloc_T.cpp Map_Manager.cpp Mem_Map.cpp Memory_Pool.cpp + Message_Queue.cpp Module.cpp Name_Proxy.cpp + Name_Request_Reply.cpp Naming_Context.cpp Obstack.cpp + Parse_Node.cpp Pipe.cpp Priority_Reactor.cpp Proactor.cpp + Process_Manager.cpp Read_Buffer.cpp Registry_Name_Space.cpp + Remote_Name_Space.cpp Remote_Tokens.cpp SPIPE_Acceptor.cpp + SV_Semaphore_Complex.cpp SV_Semaphore_Simple.cpp + Select_Reactor.cpp Service_Config.cpp Service_Main.cpp + Service_Manager.cpp Service_Repository.cpp Service_Types.cpp + Singleton.cpp Strategies_T.cpp Stream.cpp Svc_Handler.cpp + TLI.cpp TLI_Acceptor.cpp TLI_Connector.i Task_T.cpp + Time_Request_Reply.cpp Timer_Queue_Adapters.cpp + Token_Collection.cpp Token_Invariants.cpp Token_Manager.cpp + Token_Request_Reply.cpp WFMO_Reactor.cpp WFMO_Reactor.i + XtReactor.cpp. + +Thu Mar 12 15:37:14 1998 David L. Levine + + * ace/Read_Buffer.* (read): null terminate the result buffer. + Also, changed "inline" to "ACE_INLINE" and updated #includes + so that ACE inlining works. + +Thu Mar 12 02:19:53 1998 Irfan Pyarali + + * ace/WFMO_Reactor.cpp (upcall): In the Select_Reactor, when it + upcalls to an event_handler which returns a -1, the + Select_Reactor only clears the specific mask bit for the + handler. For example, for a call to + Event_Handler::handle_input() which returns -1, the + Select_Reactor clears the READ_MASK bit. + + In the WFMO_Reactor, if any handler returns a -1, then it clears + ALL of the mask bits for the event handler. + + So, fixed WFMO_Reactor so that it works like Select_Reactor in + this regard. + + Thanks to Jonathan Biggar for pointing this + discrepancy out. + + * ace/WFMO_Reactor.cpp (dispatch_handles): The correct range check is + {WAIT_OBJECT_0,WAIT_OBJECT_0 + this->handler_rep_.max_handlep1 () - index} + and not + {WAIT_OBJECT_0,WAIT_OBJECT_0 + this->handler_rep_.max_handlep1 ()} + + Thanks to Evgeny Beskrovny evgeny_beskrovny@icomverse.com for + pointing this out. + +Wed Mar 11 15:20:09 1998 Douglas C. Schmidt + + * ace/OS.i (thr_getspecific): Added comments to the code to + explain the unusual step of saving errno across calls to + TlsGetValue() on Win32. Thanks to Tim Harrison for clarifying + this. + +Wed Mar 11 00:39:29 1998 Nanbor Wang + + * CE-status: A temporary file to trace the progress of the CE + port. + + * ace/ace_ce_dll.dsp: Added more .cpp files. + + * ace/High_Res_Timer.{h,cpp}: Undefined functions print_ave and + print_total. These two function use STDOUT which is not + supported on CE. We should probably modify the functions so + they write results to Log_Msg. + (get_register_scale_factor): This function always returns 1 on + CE to prevent the use of High_Res_Timer. + (get_env_global_scale_factor): Always returns -1 on CE because + environment variables are not supported. + + * ace/Thread_Manager.cpp (spawn_i): WinCE doesn't support + DuplicateHandle, therefore the best we can do now is just pass + back the handle to the spawned thread. Notice that you *can't* + close the handle by yourself under CE. Perhaps we shouldn't + even try to pass this info back. ??? + Applied regular CE porting tricks. + + * ace/SOCK_Dgram_Mcast.{h,cpp}: + * ace/SOCK_Dgram_Bcast.{h,cpp}: Changed some function signatures + to use wchar on CE. Applied regular CE porting tricks. + + * ace/IO_SAP.cpp: + * ace/SOCK_CODgram.cpp: + * ace/SOCK_Dgram.cpp: + * ace/Select_Reactor.cpp: + * ace/Timer_{Hash,Heap,List,Queue,Wheel}_T.cpp: Applied regular CE + porting tricks. Erm, I'm running out of tricks. + +Tue Mar 10 20:27:57 1998 Nanbor Wang + + * ace/Reactor.h (reset_event_loop): Made the signature match with + its definition in .cpp file. + +Tue Mar 10 15:07:00 1998 Douglas C. Schmidt + + * ace/Svc_Handler.cpp, + ace/Module.cpp: + Fixed some problems where Svc_Handlers in Modules were being + deleted prematurely. Thanks to Steve Coy + for reporting this. + + * ace/Reactor.h (ACE_Reactor): Added a "reset_event_loop" method + so that it's possible to reset the loop again once the + end_event_loop() method is called. Thanks to Eric Hopper + for reporting this. + + * ace/IOStream_T.cpp (ACE_IOStream): Moved some code to work + around some bugs with MSVC++ 5.0. Thanks to James CE Johnson + for reporting this. + +Tue Mar 10 15:57:54 1998 Nanbor Wang + + * ace/Handle_Set.cpp (dump): Cast mask_.fd_count to size_t. + Depend on whether you are using standard C++ library, the type + of fd_count count be size_t or ssize_t. Thanks to Darrell for + discovering this. + +Tue Mar 10 13:22:24 1998 Irfan Pyarali + + * ace/Asynch_IO.cpp (cancel): CancelIo is not supported on Win95. + + * ace/SString.cpp (set): Use ACE_WString::wstrlen(). + +Tue Mar 10 06:59:42 1998 David L. Levine + + * ace/SString.cpp (WString::set): added support for platforms + that don't have wchar_t, or that treat wchar_t and ACE_USHORT16 + as different types. + + * ace/OS.h,Basic_Types.h: moved ACE_USHORT16 typedef from OS.h to + Basic_Types.h. + + * ace/High_Res_Timer.h: fixed comment: timer.start () instead of + timer.stop () (twice). + +Mon Mar 09 22:15:43 1998 Irfan Pyarali + + * ace/SString.cpp (ACE_CString::operator=): Special cases have to + considered carefully so that memory is managed properly. This + is specially true when the ACE_CString::NULL_CString_ is used. + + * ace/SString.h (ACE_CString and ACE_WString): Added set methods + that allows the user to set the strings without having to use + the assignment operator. + +Mon Mar 09 16:11:16 1998 David L. Levine + + * examples/Map_Manager/test_hash_map_manager.cpp: added #include + of ace/SString.h and template instantiations. Replaced gets + with ACE_OS::fgets. + + * examples/Makefile,examples/Map_Manager/Makefile: added + Map_Manager to examples DIRS and added RCS keyword string. + +Mon Mar 9 14:59:20 1998 Carlos O'Ryan + + * include/makeinclude/platform_irix6.x-sgic++.GNU: + Added the definition for MATHLIB. + +Mon Mar 09 01:23:49 1998 Nanbor Wang + + * ace/ace_ce.dsw: + * ace/ace_ce_dll.dsp: New project/workspace files for WinCE. This + is a temporary workspace only and should be merged into ACE mail + Win32 project/workspace when the port is stable enough. + + * ace/config-WinCE.h: Added ACE_LACKS_GETS. + + * ace/Synch.i (get_nesting_level): Defined it as not supported on + CE. CE's CriticalSections don't have RecursionCount defined. + We should be able to simulate this, however. + + * ace/Process.{h,cpp}: + * ace/SString.{h,cpp}: Moved class ACE_Tokenizer from Process.* to + SString.*. Although ACE_Tokenizer is used in + ACE_Process[_Options], it really is a more general utility + class. + (operator<<): Conditionally compile these functions only when we + are not running ACE on CE. + + * ace/OS.i (atoi): Added inline implementation for wchar version. + (gets): Remove condition !defined (ACE_HAS_WINCE). This should + be taken care of by ACE_LACKS_GETS. + + * ace/OS.h (atoi): Added wchar version of this function. + (ASYS_WIDE_STRING): This macro converts char strings to + wchar strings when ACE_HAS_MOSTLY_UNICODE_APIS is defined. + (ASYS_MULTIBYTE_STRING): This macro converts wchar strings back + to char strings *only* when ACE_HAS_MOSTLY_UNICODE_APIS is + defined. + + * ace/INET_Addr.{h,cpp}: Redefined interface signatures on WinCE + using ASYS_* macros. The principle here is to pass wide char + strings in and get char strings out. That's because we will use + mostly wchar strings in CE but most winsock APIs return (or uses + char strings.) Doing so should reduce conversion between them + to minimum. + Converting debug messages with ASYS_TEXT. + + * ace/Log_Msg.cpp (open): + * ace/ACE.cpp (get_ip_interfaces): Only convert the wide character + string to a char string when ACE_HAS_MOSTLY_UNICODE_APIS flag is + not set using the ASYS_MULTIBYTE_STRING macro. + + * ace/SOCK.cpp: + * ace/SOCK_Acceptor.cpp: + * ace/Malloc.cpp: + * ace/Malloc_T.cpp: + * ace/Synch.cpp: + * ace/Message_Block.cpp: + * ace/IPC_SAP.cpp: + * ace/Handle_Set.cpp: + * ace/Addr.cpp: Converting debugging messages to wchar strings for + CE using the ASYS_TEXT macro. + +Sun Mar 08 14:29:30 1998 David L. Levine + + * apps/Gateway/Gateway/Event_Channel.cpp (initiate_acceptors): + changed SUPPLIER_CONNECTOR to SUPPLIER_ACCEPTOR. Thanks + to Dani Flexer for reporting this. + + * ace/OS.i (cond_timedwait): removed "struct" from declaration + of local timespec_t relative_time, because timespec_t can + be a typedef. Thanks to Steve Coy for + reporting this. + + * Makefile: tag from ACE_wrappers, not its parent directory, + to avoid confusing CVS. + +Sat Mar 07 16:46:58 1998 David L. Levine + + * ACE version 4.4.32, released Sat Mar 07 16:46:58 1998. + +Fri Mar 06 08:37:44 1998 David L. Levine + + * bin/ace_ld: made perl4-compatible. Thanks to + Jerry Bickle for reporting this. + + * ace/os.i: (sigwait): removed "::" from before sigwait () call + with ACE_HAS_ONEARG_SIGWAIT, in case it's a macro. Thanks + to Kirill Rybaltchenko for + reporting this. + + * bin/create_ace_build: made perl4-compatible. Thanks to + Carlos for noticing this. + + * include/makeinclude/platform_vxworks5.x_g++.GNU: added + WIN32 host support. Thanks to Paul von Behren + for providing the patches. + + * ACE-INSTALL.html: added information from Paul von Behren + on building on NT hosts for + VxWorks targets. + + * tests/Recursive_Mutex_Test.cpp: 50 iterations instead of 100 + on Chorus. + + * include/makeinclude/platform_chorus_ghs.GNU: added -G to + LDFLAGS. + + * tests/run_tests.sh: added capability for executing the tests + on a remote (Chorus) target. + + * examples/System_V_IPC/Makefile: added clean and realclean targets + for VXWORKS. + + * Makefile: cd .. before tagging. + +Thu Mar 05 12:36:52 1998 Nanbor Wang + + * ace/OS.h (ACE_TRACE): Added a missing right paren. + +Thu Mar 05 10:04:06 1998 David L. Levine + + * include/makeinclude/platform_chorus_ghs.GNU: this works, + though it may not be optimum. + +Thu Mar 05 01:33:08 1998 Nanbor Wang + + * ace/config-WinCE.h: Added more CE stuff. Ostream is now + redefined as FILE on CE. + + * ace/OS.{i,cpp}: + * ace/Synch_T.cpp + * ace/Message_Queue.cpp: + * ace/SOCK_Connector.i: Added ASYS_TEXT to numerous + ACE_DEBUG/ACE_ERROR macros. We must use wide char strings in + CE. + + * ace/ACE.{h,cpp}: Redefined sock_error to return wchar string on + CE. Added ASYS_TEXT to debugging messages. + + * ace/Trace.{h,cpp}: + * ace/Log_Msg.{h,cpp}: Made it UNICODE compatible. + + * ace/Log_Record.cpp: Changed how ostream is used on CE. Although + the code here become some how platform dependent, fortunately, + it can be shielded out from the users thru various macros. + Added ASYS_TEXT. + + * ace/SString.h: Undefined friend relations of ACE_?String with + ostream on CE. CE doesn't support . + + * ace/OS.h: Changed the definition of ASYS_TEXT to use _TEXT. + This macro can be used with other compiler defined macros + (e.g. __FILE__.) Added ASYS_TEXT to adorn parameters of + ACE_TRACE so we don't need to modify our codes to make it + portable to CE. + + * ace/Log_Msg.cpp: Removed macro definition of ACE_WSPRINTF. It + didn't appear to be used anywhere. + +Wed Mar 04 09:32:32 1998 David L. Levine + + * ace/OS.cpp (readv,writev): added static cast of iov_len to int, + to avoid unsigned comparison < 0. + + * ace/Containers.cpp (ACE_Fixed_Set_Iterator::done), + ace/Map_Manager.cpp (ACE_Map_Iterator_Base::done): + removed const from static cast to avoid warnings about + meaningless type qualifier from GreenHills. + + * ace/Basic_Types.i (ACE_U_LongLong): added missing ACE_INLINE's. + + * ace/Svc_Conf.y,Svc_Conf_y.cpp, etc/Svc_Conf_y.cpp.diff + (svc_location): delete svc_initializer after initializing + svc_location. Thanks to Tom Arbuckle + for reporting this. + + * include/makeinclude/platform_linux_lxpthreads.GNU: separated + SOBUILD into compile and link steps because the + Service_Configurator/server/* examples are unable to + use files compiled with -fPIC and just labeled as .so as shared + ELF objects. Thanks to Tom Arbuckle + for reporting this. + + * include/makeinclude/platform_chorus_ghs.GNU: explicitly link + in ioassign.o to resolve _cerr. + + * tests//SOCK_Connector_Test.cpp, + ace/config-{chorus,lynxos,netbsd,psosim-g++,vxworks5.x, + win32-common}.h: + added ACE_LACKS_GETHOSTENT, so that SOCK_Connector_Test doesn't + have to enumerate the platforms that don't have ::gethostent (). + + * tests/Basic_Types_Test.cpp (main): if ACE_LACKS_LONGLONG_T, use + ACE_U_LongLong instead of long long. + +Tue Mar 03 22:15:16 1998 Nanbor Wang + + * ace/Remote_Name_Space.cpp: Replaced a bunch of usages of + ACE_WString::rep (). They were passed to ACE_Name_Request which + creates another copy for itself and nobody ever cleans up these + memories. Thanks to John Mulhern <9107@MN3.LAWSON.lawson.com> + for reporting this. + + * ace/OS.h (THR_DETACHED): Defined this macro so that we can + simulate detached threads on NT (Hi Irfan! ;-). Thanks to Andre + Arpin for prividing the use case of + detached threads. + + * ace/Thread_Manager.cpp (exit): Added detached threads + manipulating codes here. We now can simulate behaviros of UNIX + detached threads on NT (no one cares about their return status.) + +Tue Mar 03 15:05:42 1998 David L. Levine + + * ace/Basic_Types.{h,i} (ACE_U_LongLong::operator *=): updated + with James Hu's implementation. Now it's fast :-) + + * tests/Time_Value_Test.cpp (test_ace_u_longlong): added another + test of operator *=. + +Mon Mar 2 19:21:36 1998 Douglas C. Schmidt + + * ace/OS.h: Changed all uses of "/localname" and "/globalname" to + "localname" and "globalname" to avoid problems on UNIX. Thanks + to John Mulhern <9107@MN3.LAWSON.lawson.com> for reporting this. + + * ace/OS.h: Changed "C:\\temp\\" to "C:\\temp" to avoid some minor + problems on NT. Thanks to John Mulhern + <9107@MN3.LAWSON.lawson.com> for reporting this. + + * netsvcs/lib/Log_Message_Receiver.cpp + (Log_Message_Receiver_Impl): Removed some stray inline keywords. + Thanks to Russ Noseworthy for + reporting this. + + * ace/OS.i (sigwait): Added support for POSIX sigwait(). Thanks + to Russ Noseworthy for reporting + this. + + * ace/Containers.cpp (done): + ace/Map_Manager.cpp (done): Corrected some misplaced "consts" in + the ACE_static_cast macro. Thanks to Russ Noseworthy + for reporting this. + + * include/makeinclude/platform_sunos5_sunc++.GNU (CXX): Commented + out the -pta option since it might not be necessary. If this + breaks code then we'll need to reevaluate this change. Thanks + to Russ Noseworthy for suggesting + this. + +Mon Mar 02 17:06:46 1998 Nanbor Wang + + * ace/Thread_Manager.cpp (exit): Added Win32 thread exit + functionality. When a thread function falls out of scope, this + functions is called by ACE_Thread_Control::exit and it will not + call ACE_OS::thr_exit from here. Under this scenario, the + ACE_Thread_Manager::exit simply falls thru the end. If a user + call this function directly, this function will delete + ACE_Thread_Exit::instance() first, which simulate the cleanup + routine executed when a thread fall out of end by calling + ACE_Thread_Manager::exit recursively. After this is done + (returned from the second call,) this function will then call + ACE_OS::exit, which clean up the TSS objects and then really + exit the thread. Thanks to Gordon Watts for + pointing this out. + + * ace/OS.cpp (thr_exit): Added Win32 thread exit functionality. + ACE_OS::thr_exit now will try to clean up TSS objects by calling + ACE_OS::cleanup_tss. You really should _not_ calling this + function directly. Esp. from the main thread because I don't + know how to tell if you are calling it from main thread thread + or not and thus memory leak might occur. + +Mon Mar 02 09:13:26 1998 David L. Levine + + * ace/config-sunos5.5-sunc++-4.x.h: replaced ACE_PAGE_SIZE with + ACE_HAS_GETPAGESIZE, and added ACE_HAS_STL_MAP_CONFLICT. + Thanks to J. Russell Noseworthy + for these recommendations. + + * ace/config-sunos5.6-sunc++-4.x.h: just #include + config-sunos5.5-sunc++-4.x.h. There's no difference between + the two at this point. + + * include/makeinclude/platform_sunos5_sunc++.GNU: added -R./ and + -mt to LDFLAGS. Added -fast to LDFLAGS if "fast" flag is + enabled. Thanks to J. Russell Noseworthy + for these recommendations. + + * include/makeinclude/platform_sunos5.6_sparc_sunc++.GNU: just + include platform_sunos5_sunc++.GNU. There's no difference between + the two at this point. There is one significant net change to + the 5.6 platform: -s is no longer included in LDFLAGS. + + * ace/config-chorus.h: added ACE_LACKS_ACE_IOSTREAM with ghs, because + its iostream doesn't have separate operators for signed/unsigned + char. + +Sun Mar 1 13:54:02 1998 Nanbor Wang + + * Makefile: Added cvs commands to automatically tag the CVS + repository with version number 'ACE_9_9_99' tag and 'Current' + tag. + +Sun Mar 1 12:26:13 1998 Alexander Babu Arulanthu + + * ace/Hash_Map_Manager.cpp (reset_i): + * ace/Hash_Map_Manager.h: + Added reset () method for the Hash_Map_Iterator. + +Sun Mar 01 10:59:27 1998 Irfan Pyarali + + * ace/Asynch_IO.cpp (cancel): Changed CancelIO to CancelIo. + + * ace/Synch.h (ACE_Lock): Added a virtual destructor to ACE_Lock. + +Sun Mar 01 08:38:00 1998 David L. Levine + + * ace/OS.h: use the new ACE_DEFAULT_SYNCH_TYPE for the default + mutex, etc., type, so that it can be set VxWorks. The ACE default + type on VxWorks is SEM_Q_FIFO, the same as VxWorks' default. + The ACE default can be easily overridden in config.h by + defining ACE_DEFAULT_SYNCH_TYPE. + + * ace/OS.i (sema_init): on VxWorks, use the type argument for the + sema type, instead of hard-coding to SEM_Q_FIFO. + + * ACE-INSTALL.html: updated Linux/alpha "as" patch. + +Sat Feb 28 12:20:57 1998 Douglas C. Schmidt + + * ace/Message_Queue.cpp: Fixed the implementation of + wait_not_{full,empty}_cond() so that they utilize the + ACE_Time_Value it's passed. In addition, revised the + implementation of peek_dequeue_head() so that it uses the new + wait_not_empty_cond() implementation. Thanks to Tom Venturella + for reporting this. + +Fri Feb 27 15:47:15 1998 David L. Levine + + * ACE-INSTALL.html: added very useful information from + Chris Ryan about build ACE with + NT/Tornado for VxWorks. + + * ace/config-chorus.h: use ACE_NEEDS_READV/WRITEV with GHS as well + as with g++. + + * ace/Basic_Types.{h,i} (ACE_U_LongLong): added a bunch of arithmetic + operators for Carlos :-) The operator *= is _very_ slow, until we + come up with the right way to do it. + + * tests/Time_Value_Test.cpp (test_ace_u_longlong): added some tests + of the new operators. + +Fri Feb 27 13:42:09 1998 Douglas C. Schmidt + + * ace/ACE.cpp (recv_n): Removed the MSG_PEEK flag since it didn't + seem to work correctly. + +Fri Feb 27 11:18:28 1998 Chris Cleeland + + * ace/Log_Msg.cpp: Added three new conversion operators: "%{" + calls inc() to increase the trace_depth, "%}" calls dec() to + decrease the trace_depth, and "%$" is used in place of "\n" to + insert a newline followed by appropriate current indentation. + +Thu Feb 26 21:36:27 1998 Douglas C. Schmidt + + * ACE version 4.4.31, released Thu Feb 26 21:36:27 1998. + +Thu Feb 26 16:48:53 1998 Douglas C. Schmidt + + * ace/OS.h: Added new macros for ACE_FILE_STREAM and + ACE_FILE_CONNECTOR to be consistent with the ACE_SOCK_* stuff, + etc. Thanks to Ganesh Pai for reporting + this. + +Thu Feb 26 11:14:21 1998 David L. Levine + + * ace/Parse_Node.cpp (ACE_Location_Node): reordered initializers + to match declaration order. + +Thu Feb 26 02:42:57 1998 Nanbor Wang + + * ace/Service_Config.cpp (load_static_svcs): Removed explicit + constness cast from the allocation function. + +Wed Feb 25 23:08:44 1998 Douglas C. Schmidt + + * tests/MT_Reactor_Timer_Test.cpp: Made this test compile on + platforms that lack threads and also updated the programming + style to be consistent with other parts of ACE. + + * tests/Priority_Task_Test.cpp: Made this test compile on + platforms that lack threads. + + * ace/Svc_Conf.h: Fixed the prototype for + ace_create_service_type() to reflect the elimination of "const + void *". + + * ace/Parse_Node: Eliminated more uses of "const void *" and + changed them to plain ol' "void *". + + * ace/Service_Types.cpp (fini): Changed the "const void *" to be + simply "void *" since it didn't seem to make any sense they way + it was! Thanks to Stephen Coy for + insisting on this... + + * ace/config-sunos5.*.h: Moved the ACE_HAS_REENTRANT_FUNCTIONS + into the section of #defines that should be commented out if + we're not building a multi-threaded library. + + * ace/Service_Config.cpp (open): Tightened up the comparison of + the key with the ACE_DEFAULT_LOGGER_KEY to use string equality + rather than pointer equality. Thanks to Stephen Coy + for reporting this. + +Wed Feb 25 10:50:17 1998 David L. Levine + + * include/makeinclude/platform_osf1_4.0.GNU: added suppression of + "no corresponding delete" warning, until that is fixed in libTAO. + Added -lm to LIBS for MT_Cubit client. + + * include/makeinclude/platform_chorus_ghs.GNU: we can link now. + + * ACE-INSTALL.html: added information on Linux v. 2.0.x + getsockname () bug. + +Tue Feb 24 15:07:50 1998 Nanbor Wang + + * tests/test.{mdp,mak}: Added Env_Value_Test and OrdMultiSet_Test + into the workspace. + + Removed all odbc libraries from all projects. We don't really + need them to run ACE. Thanks to gonzo@ing.puc.cl (Gonzalo + A. Diethelm) for pointing this out. + +Tue Feb 24 07:14:16 1998 Douglas C. Schmidt + + * ace/Asynch_Acceptor.cpp (handle_accept): Update the + event_handler's proactor pointer once it is accepted. Thanks to + Jason Katz for reporting this. + + * apps/Gateway/Gateway/Event.h (class Subscription): Moved the + htonl of total_consumers_ to *after* the loop that uses it! + Thanks to Jorn Jensen for reporting this. + +Tue Feb 24 05:08:31 1998 Nanbor Wang + + * ace/Asynch_Acceptor.i: Filled in some missing keywords. + + * ace/Log_Record.h (ACE_Log_Record): Hacked it to work for CE. + Undefined the ostream version of print (). I'm planning to drop + iostream support on WinCE. (Then, I don't have to write my + own. ;-) + + * ace/ACE.{h,i} (timestamp, format_hexdump): Removed UNICODE_ONLY version. + Changed to use ASYS_TCHAR to differentiate this condition. + + * ace/OS.h (ACE_OS): Undefined shm_{open,unlink} if + ACE_HAS_MOSTLY_UNICODE_APIS. + + * ace/OS.cpp (ctime,ctime_r): Added CE implementation. + + * ace/streams.h: Added /**/ between #include and <..> in several + places. + + * ace/*: Changed ACE_HAS_UNICODE_ONLY to + ACE_HAS_MOSTLY_UNICODE_APIS. + +Mon Feb 23 19:41:53 1998 Douglas C. Schmidt + + * ace/Asynch_Acceptor.i (bytes_to_read): Added an inline accessor + for the bytes_to_read_ field. Thanks to Jason Katz + for suggesting this. + +Mon Feb 23 12:26:06 1998 David L. Levine + + * ace/OS.cpp (sched_params): removed ACE_ADAPT_RETVAL from PTHREADS + ::sched_setscheduler () call, because it returns the old scheduling + policy, not 0, on success. + + * ace/config-osf1-4.0.h: removed ACE_HAS_EXCEPTIONS because that is + enabled by platform_osf1_4.0{,_rcc}.GNU. + + * include/makeinclude/platform_osf1_4.0.GNU: added suppression of + warning 835 because /usr/include/cxx/memory, line 505, triggers + a warning about an unreferenced parameter. + + * include/makeinclude/platform_osf1_4.0{,_rcc}.GNU: added + "exceptions = 1" so that ACE exception handling can be + disabled on the make command line. + +Mon Feb 23 11:27:10 1998 David L. Levine + + * ACE version 4.4.30, released Mon Feb 23 11:27:10 1998. + +Mon Feb 23 11:11:18 1998 Nanbor Wang + + * ace/Process.h: Define ACE_Process_Options::NO_EXEC as 0 on + Win32. It has no effect on NT anyway. + +Sun Feb 22 21:37:43 1998 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU: updated + comments to reflect that WIND_BASE and WIND_HOST_TYPE + environment variables must be set. Thanks to Nanbor for + reporting that. Also, set CROSS-COMPILE flag. + + * include/makeinclude/rules.lib.GNU: updated VOBJS so that it + will build the fancy new TAO/orbsvcs hierarchy. + + * include/makeinclude/platform_{chorus*,lynxos,vxworks5.x_g*}.GNU: + set CROSS-COMPILE flag. It's only used by TAO at this point. + + * ace/Svc_Conf_y.cpp: updated based on new Svc_Conf.y. + + * etc/Svc_Conf_y.cpp.diff: regenerated for latest Svc_Conf_y.cpp. + + * ACE-INSTALL.html,include/makeinclude/platform_lynxos.GNU: moved + LynxOS installation info from its platform file to ACE-INSTALL.html. + +Sun Feb 22 21:26:19 1998 James CE Johnson + + * tests/IOStream_Test.cpp (server): break out of while loop if + read from client_handler fails. + +Sun Feb 22 13:06:20 1998 Douglas C. Schmidt + + * ace/Asynch_Acceptor.h (class ACE_Asynch_Acceptor): Made the + accept method virtual so that users can override it and do + things like enforce limits on the maximum number of simultaneous + connections. Thanks to Jason Katz for + suggesting this. + +Sun Feb 22 13:22:30 1998 Nanbor Wang + + * ace/OS.h: Moved definition of ACE_MAP_{PRIVATE,SHARED,FIXED} + down to where every platform can see. + +Sun Feb 22 13:06:20 1998 Douglas C. Schmidt + + * ace/Svc_Conf.y: Fixed a couple of places where we were + potentially dereferencing NULL pointers when services failed to + load. Thanks to Eric C. Newton for reporting + this. + +Sat Feb 21 12:44:51 1998 David L. Levine + + * ACE version 4.4.29, released Sat Feb 21 12:44:51 1998. + +Sat Feb 21 11:53:45 1998 Nanbor Wang + + * ace/Hash_Map_Manager.cpp (close_i): Remember to reset the + current size to 0 after deallocating all entries in the map. + Thanks to Alex for noticing this. + +Fri Feb 20 06:36:04 1998 David L. Levine + + * ace/Timer_Queue_Adapters (activate): added thread_names argument. + + * ace/OS.{h,i} (cond_timedwait): fixed on LynxOS (DCE_DRAFT4_THREADS), + where pthread_cond_timedwait () expects a relative instead of + absolute time. + + * tests/Buffer_Stream_Test (Consumer::svc): removed thr_yield for + LynxOS, now that ACE_OS::cond_timedwait () is fixed. + + * ace/OS.i (mmap): use ACE_DEFAULT_FILE_PERMS on LynxOS for the + shared memory object. + + * ace/Mem_Map.* (unmap): on LynxOS, write back the shared object to + the plain file, if the mmap () protection included PROT_WRITE. + + * ace/README: added ACE_HAS_BOOL, which can be used by TAO. + +Thu Feb 19 17:59:53 1998 Nanbor Wang + + * apps/JAWS/clients/Caching/*: Reworked and cleaned up these files a + bit. Added a test_URL.cpp file. Notice that these file will + finally be moved to other directory. + +Thu Feb 19 15:52:50 1998 Stanley D Leeson + + * ace/Task.{h,cpp} (activate): added optional thread_names array + argument. + +Thu Feb 19 12:55:00 1998 Nanbor Wang + + * ace/OS.h: Added /**/ between #include and '<', Thanks to + gonzo@ing.puc.cl (Gonzalo A. Diethelm) for providing the + patches. + +Thu Feb 19 11:18:08 1998 David L. Levine + + * ace/OS.h: added ACE_MAP_{PRIVATE,SHARED,FIXED}, and + ACE_OS::shm_{open,unlink}. + + * ace/OS.i: added ACE_OS::shm_{open,unlink}, and mmap support on + LynxOS. + + * ace/Mem_Map.*,Shared_Memory_MM.h,Filecache.cpp: default share + value to ACE_MAP_PRIVATE instead of MAP_PRIVATE, to allow easy + overriding in config files. + + * ace/config-lynxos.h: added ACE_HAS_SHM_OPEN, and map + ACE_MAP_PRIVATE to ACE_MAP_SHARED because MAP_PRIVATE is + not supported on LynxOS 2.5.0. + + * tests/Mem_Map_Test.cpp: replace file_size with line_length because + that's more accurate. + + * tests/SOCK_Connector_Test.cpp: use ACE_DEFAULT_SERVER_HOST on + LynxOS, and removed #include of sys/utsname.h because it's in OS.h. + + * include/makeinclude/platform_lynxos.GNU: added LYNXOS so that + other Makefiles can easily know if where building for LynxOS. + + * ace/ACE.cpp (recv_n): commented out the MSG_PEEK flag check because + it caused IOStream_Test to not terminate. + + * ace/Env_Value_T.{h,i}: moved ACE_Convert specializations from .i + file to .h file, because the resulted in multiple instantiations + with ACE_INLINE disabled, and missing specializations without + ACE_HAS_TEMPLATES_REQUIRE_SOURCE and inlining enabled. + + * tests/TSS_Test.cpp: weakened to work with LynxOS. It has a very + limited number of keys, maybe 16, and can't free them. And, the + test always core dumps if we try to request more keys than it has + available. + + * tests/run_tests.sh: disabled some tests on LynxOS. + +Thu Feb 19 10:41:05 1998 Douglas C. Schmidt + + * ace/SOCK.cpp (open): It appears that we don't need to do + SO_REUSEADDR if protocol_family != PF_UNIX. Thanks to Chuck + Gehr for reporting this. + +Wed Feb 18 22:34:40 1998 Nanbor Wang + + * examples/Reactor/Dgram/Dgram.dsw: + * examples/Reactor/Dgram/Dgram.dsp: + * examples/Reactor/Dgram/CODgram.dsp: Newly added files for NT. + + * examples/Reactor/Dgram/Dgram.cpp: + * examples/Reactor/Dgram/CODgram.cpp: Made them runnable on NT. + + * ace/Process.h (ACE_Process_Options): Changed the definition of + ACE_Process_Options::NO_EXEC to 0 for Win32 because it doesn't + mean anything on NT (you must exec a new program on NT, no fork + syntax available.) With this, we can simulate the fork effect + more or less (still not portable thou. See + examples/Reactor/Dgram/ for some examples.) + +Wed Feb 18 16:07:14 1998 Douglas C. Schmidt + + * netsvcs/lib/Log_Message_Receiver.cpp (log_output): There was a + problem where "outputfile" can be NULL, which causes problems + when it is dereferenced. Thanks to Stephen Coy + for reporting this. + + * ace/ACE.cpp (ldfind): modified the code to allow it to + consistently return a status indicating whether or not a + potential shared library file was found. Thanks to Patrick + J. McNerthney for reporting this. + +Wed Feb 18 15:30:48 1998 Carlos O'Ryan + + * include/makeinclude/rules.lib.GNU: + Now we can create libraries with some files in + subdirectories. Though the Makefile still needs to set VPATH. + +Wed Feb 18 12:22:48 1998 David L. Levine + + * tests/Buffer_Stream_Test.cpp (Consumer::svc): added a + thr_yield so that the test magically works on LynxOS. + ACE_OS::cond_timedwait is busted on LynxOS, we're investigating it. + +Wed Feb 18 11:53:00 1998 Carlos O'Ryan + + * bin/auto_compile: + Added netsvcs to auto_compile list. + +Tue Feb 17 18:27:15 1998 Douglas C. Schmidt + + * ACE version 4.4.28, released Tue Feb 17 18:27:15 1998. + +Tue Feb 17 17:59:32 1998 Nanbor Wang + + * examples/Reactor/Multicast/Multicast.dsw: + * examples/Reactor/Multicast/client.dsp: + * examples/reactor/multicast/server.dsp: New project files. + +Tue Feb 17 15:53:41 1998 Douglas C. Schmidt + + * ace/ACE.cpp (recv_n): Added a check to drop out if the MSG_PEEK + flag is set! Thanks to Keith Brown for + reporting this. + +Tue Feb 17 12:56:24 1998 Chris Cleeland + + * include/makeinclude/wrapper_macros.GNU: Broke the "purify" + command out of PRELINK into its own variable: PURELINK. This was + done to quiet purify when building shared libraries. It wasn't + possible simply to remove the PRELINK reference from SOLINK.cc + because PRELINK is also used for specifying quantify. + + Also added two new variables: PURE_CACHE_DIR and + PURE_CACHE_BASE_DIR. PURE_CACHE_DIR is the value of the + purify/quantify '-cache-dir=' option, and PURE_CACHE_BASE_DIR is + used as the base directory to build a user/compiler-specific cache + directory. In general, you probably want to use them like this: + "make PURE_CACHE_BASE_DIR=~/mypurecache", which will end up + creating the directory ~/mypurecache--. + +Tue Feb 17 09:23:05 1998 David L. Levine + + * ace/OS.h: there were two SIGCHLD #defines, if it was not + already #defined. I changed the second one to be SIGCLD instead. + + * ace/config-linux-common.h: removed ACE_LACKS_TCP_H on alpha because + it's not necessary with glibc-2.0.6. + +Tue Feb 17 08:41:06 1998 Douglas C. Schmidt + + * ace/OS.h (ACE_PROPER_SINGLETON_INSTANTIATION): Changed spelling + of SINGLETONE to SINGLETON. Thanks to Mark Maris + for reporting this. + +Tue Feb 17 07:41:32 1998 Douglas C. Schmidt + + * ACE version 4.4.27, released Tue Feb 17 07:41:32 1998. + +Tue Feb 17 03:32:30 1998 Nanbor Wang + + * ace/ACE.*: Changes for Windows CE just keeps going and going and + going... All following functions are member functions of class + ACE. + + This member funcion has wchar version _only_ when + ACE_HAS_UNICODE_ONLY is defined: + + timestamp + + I've added wchar version of the following member functions: + + strecpy + strsplit_r + strrepl + basename + execname + format_hexdump + + These functions are not defined on CE because they make no sense + on CE. + + strenvdup + daemonize + + There is no stdin defined on CE. Before we implement a stdin + for CE, these functions don't make any sense. + + read_adapter + register_stdin_handler + remove_stdin_handler + + Changing these functions to UNICODE will need to change the + svc.conf parser. Therefore, I'll leave them to a later point. + + ldopen + ldfind + + * ace/README: Added a new directive ACE_HAS_UNICODE_ONLY which + indicates that most APIs must use wchar instead of char. (Note + that on WinCE, only WinSock functions use the traditional char + interfaces. Most other functions only support wchar + interfaces, include str* functions.) + +Mon Feb 16 14:57:26 1998 David L. Levine + + * tests/Priority_Task_Test.cpp (open): fallback to minimum + ACE_SCHED_OTHER priority instead of 0. + + * tests/Priority_Task_Test.cpp (open): suppress warning message + about retrying task activation with fallback priority unless -d + option is specified. + + * ace/High_Res_Timer.cpp: initialize global_scale_factor_ to 1 if + ACE_HAS_{,AIX_}HI_RES_TIMER and ACE_WIN32 are not defined. + Thanks to Robert Olson for reporting a + problem with bad hires time values on Irix. + +Mon Feb 16 10:51:28 1998 Oliver Kellogg + + * include/makeinclude/platform_osf1_4.0_rcc.GNU: added this + new platform file for Rational rcc (2.4.1) on DU 4.0. + + * ace/config-osf1-4.0.h: added ACE_LACKS_SIGNED_CHAR to + RATIONAL section. + + * ace/OS.h: added __rational__ to list of users of long + ACE_UNUSED_ARG. + + * ace/OS.i (gethostbyname_r): added some ACE_UNUSED_ARGs for + Digital Unix. + +Sun Feb 15 16:32:52 1998 Nanbor Wang + + * netsvcs/clients/Naming/Client/svc.conf: Removed "-s" flag, which + set the database name for local namespce. This was causing + grief if users forgot to set this environment variable. Thanks + to Johannes Gutleber for reporting + this. + +Sun Feb 15 15:55:47 1998 Darrell Brunsch + + * ace/Timer_Hash_T.{cpp,h}: Timer Hash wasn't keeping the earliest + node pointer up to date with cancels. + +Sat Feb 14 21:12:52 1998 Douglas C. Schmidt + + * ace/Synch_T.h (class ACE_Guard): this->acquire() already sets + the owner, so we don't need to do it in the constructor. + +Sat Feb 14 20:57:59 1998 Nanbor Wang + + * netsvcs/lib/Log_Message_Receiver.{h,cpp} (log_output): Added this to + all receiver classes. It allows writing messages to a user + specified ostream. + + * netsvcs/lib/Server_Logging_Handler_T.cpp + (handle_logging_record): * netsvcs/lib/Client_Logging_Handler.cpp + (send): Use the above change to avoid missing data on NT. Thanks + to Greg White for providing the fix. + +Sat Feb 14 18:34:37 1998 Darrell Brunsch + + * ace/Timer_{Wheel,Hash}_T.cpp: Fixed a bug with earliest time + pointers not being set correctly. Thanks to Mark Evans + for reporting this. + + * tests/Timer_Queue_Test.cpp: Added a quick test to check to + make sure the earliest time is reported correctly. + +Sat Feb 14 18:28:19 1998 Douglas C. Schmidt + + * ace/SOCK_Dgram_Mcast.cpp (subscribe): Fixed a problem with the + ACE_SOCK_Dgram_Mcast subscription method. Originally, each time + the ACE_SOCK_Dgram_Mcast subscribe() method was invoked, it + created a new socket, did appropriate setsockopt calls + (e.g. SO_USEPORT), did a bind() to that socket, and then did the + setsockopt call that actually joins the mcast group. The + problem with this was that is wasn't possible to a single socket + to subscribe to more than one multicast group. Multiple calls + to ACE_SOCK_Dgram_Mcast.subscribe() didn't work because the new + socket descriptor that was issued didn't listen to the old + multicast group(s). The fix was to change the subscribe() + method to only create, set up, and bind the socket if + get_handle() == ACE_INVALID_HANDLE. Thanks to Dave Meyer + for reporting this. + +Sat Feb 14 03:29:50 1998 Sergio Flores + + * ace/ACE.cpp (set_handle_limit): Fixed a couple of bugs + setting the maximum number of file descriptors. If we use + setrlimit, we should first get the hard limit before calling + it, or we get an EINVAL for trying to set a hard limit of 0 + and a soft limit greater than that. Also, for -1 the call + was not setting the limit to the maximum allowable. + + * ace/OS.h (ACE_MAX_DGRAM_SIZE): Moved the #define + ACE_MAX_DGRAM_SIZE from the PSOS specific part of OS.h. + +Fri Feb 13 19:25:55 1998 Douglas C. Schmidt + + * ace/Log_Record.cpp (ACE_Log_Record): Changed the "set" method + for priority() so that it doesn't convert the priority into the + base two logarithm of the parameter. Instead, this is handled + by the "get" method of priority(). Thanks to Eric C. Newton + for reporting this. + + * ace/OS.h: Added a new #define called ACE_MAX_DGRAM_SIZE, which + is set to 8k by default. Naturally, this can be overwritten in + platform-specific config.h files. + +Fri Feb 13 10:40:36 1998 David L. Levine + + * ACE version 4.4.26, released Fri Feb 13 10:40:36 1998. + +Thu Feb 12 14:33:12 1998 Nanbor Wang + + * ace/OS.i (mktemp): I missed this one in Win32 section. + +Fri Feb 13 09:04:13 1998 Oliver Kellogg + + * ace/config-osf1-4.0.h: added Rational RCC support. + +Wed Feb 11 09:50:27 1998 Steve Huston + + * ace/config-dgux-4.x-ghs.h + * include/makeinclude/platform_dgux4_ghs.GNU: Configs for ACE on + DG/UX 4 using Green Hills Multi C++ compiler, and draft 10 pthreads. + + * ace/README + * ace/OS.h: New macro ACE_NEEDS_SCHED_H for platforms which needs to + #include to get complete defs for thread scheduling. + + * ace/OS.cpp: Added a DG/UX-specific pthread_wait function for use with + draft 10 pthreads on DG/UX. + +Wed Feb 11 09:32:10 1998 David L. Levine + + * ACE-INSTALL.html: updated DU CXX and Linux info. + + * ace/Makefile: moved INSTALL= to before include of rules.local.GNU, + so that the (unused) install command doesn't show up with make -n. + + * include/makeinclude/platform_chorus_ghs.GNU: put posix -I before + stdc -I. + + * ace/OS.h: removed include of stdfileio.h on ghs/Chorus. It's not + necessary with the above change to platform_chorus_ghs.GNU. + +Wed Feb 11 09:24:51 1998 David L. Levine + + * ACE version 4.4.25, released Wed Feb 11 09:24:51 1998. + +Tue Feb 10 14:58:00 1998 Chris Gill + + * ace/Containers.cpp : removed unreachable break; + +Tue Feb 10 09:34:27 1998 David L. Levine + + * ace/INET_Addr.cpp (get_host_name): moved declaration of local + "hentry" so that it's not seen on Chorus. + + * ace/OS.i (getprotoby{name,number}{,_r}): not supported on Chorus. + + * ace/Makefile: build Select_Reactor.o without -g on ghs/Chorus, + because it causes GreenHills 1.8.8 to core dump. + + * ace/config-chorus.h: adjusted to work with GreenHills 1.8.8. + + * include/makeinclude/platform_chorus_ghs.GNU: use Gnu ar instead + of ax, because we don't have a license for ax. + + * Timer_Queue_Adapters.{h,i} (activate): added stack and stack_size + parameters to match declaration in ACE_Task_Base. + + * include/platform_linux{,_lxpthread}.GNU: removed + -fno-strict-prototypes from CFLAGS because it is no longer needed. + + * include/makeinclude/platform_sunos5_g++.GNU: added -lposix4, to + be consistent with the Sun C++ platform file. Some of the TAO + tests need it. + +Mon Feb 09 18:10:37 1998 Chris Gill + + * ace/Containers.{cpp,h} : made next () a const member function in + ACE_Ordered_MultiSet_Iterator + +Mon Feb 09 14:52:25 1998 David L. Levine + + * include/makeinclude/platform_chorus_ghs.GNU: added include path. + + * ace/config-chorus.h: with GreenHills, removed + ACE_HAS_WCHAR_TYPEDEFS_CHAR and ACE_LACKS_UNISTD_H. We'll + see if --multibyte_chars --wchar_t_keyword work. + + * ace/OS.h: added #include with GreenHills/Chorus. + + * netsvcs/clients/Naming/Client/Client_Test.cpp (handle_input): + get input from stdin, not ACE_STDIN. Thanks to Jack Erickson + for reporting this. + +Sun Feb 8 15:33:33 1998 Nanbor Wang + + * include/makeinclude/wrapper_macros.GNU: + * include/makeinclude/rules.lib.GNU: + * include/makeinclude/rules.local.GNU: Rename + ACE_LDSO_Major_Minor_Version_Number to ACE_LDSO_Version_Number. + + * include/makeinclude/rules.local.GNU: Put back checking of + current directory into library installation rules but with an + extra check for null ACE_LDSO_Version_Number. + +Sun Feb 08 12:06:30 1998 David L. Levine + + * ACE-INSTALL.html: added Scott Snyder's egcs 1.0.1 patch, which + allows netsvcs/lib/Server_Logging_Handler.cpp to build on + Linux/RedHat 5.0. + + * include/makeinclude/wrapper_macros.GNU: protected ACE_ROOT... + additions to INCLDIRS and LDFLAGS so they're only added once. + Thanks to James CE Johnson for this addition. + + * ace/config-linux-common.h: added ACE_HAS_TERM_IOCTLS. Thanks + to James CE Johnson for this addition. + + * examples/Naming/test_multiple_contexts.cpp,test_non_existent.cpp, + test_writers.cpp: + replaced uses of cout with ACE_DEBUG. + + * examples/performance-tests/Misc/basic_perf.cpp, + context_switch_time.cpp,preempt.cpp: + divide ACE_hrtime_t by ACE_UINT32, to prevent ambiguity with + ACE_U_LongLong operator / overloading. + +Sun Feb 8 01:45:59 1998 Nanbor Wang + + * include/makeinclude/wrapper_macros.GNU (versioned_so): Added + a new directive to allow automatic installing of so libraries + with version number. This flag is default to 0. Put this line, + + versioned_so = 1 + + in your platform_*.GNU file to enable this feature. + + (ACE_LDSO_Major_Minor_Version_Number): Define the version number + to be appended to versioned so libraries (Notice: it include a + dot at the beginning.) If versioned_so == 0, this macro expand + to nothing. + + * include/makeinclude/rules.lib.GNU (INSTALL): + * include/makeinclude/rules.local.GNU (INSTALL rules): Modified + installation rules to allow installing so libraries with version + numbers. + + * include/makeinclude/platform_netbsd.GNU: + * include/makeinclude/platform_freebsd[_pthread].GNU: Enabled + new versioned_so feature. + +Sat Feb 07 05:51:15 1998 Nanbor Wang + + * ace/Synch_T.cpp (ACE_TSS): Changed to use MessageBox on WinCE. + Because there's no console in WinCE, we can't output warning + messages to stderr. + + * ace/README (ACE_HAS_UNICODE_ONLY): This new directive is used to + removed some char version function definitions because it + doesn't make too much sense to support these function when most, + if not all, strings in the system are wchar strings. + + * ace/OS.{h,i} (ACE_DEFAULT_LOGGER_KEY): Added wchar definition if + we are using UNICODE. + (ACE_SHE_{TRY,FINALLY,EXCEPT}): WinCE doesn't support Win32 + structual exception, so these macros should be defined as on + UNIX platforms. + (mktime): Removed this function from WinCE. Don't even think + about using them. + (ACE_HAS_UNICODE_ONLY): If this directive is defined, the char + version of the following functions are not defined in ACE_OS: + + chdir + mkdir + mkfifo + mktemp + getcwd + unlink + tempnam + + Some of them has wchar version. + + (chdir,mkdir,getcwd): Added wchar version. Unfortunately, getcwd + still doesn't work for WinCE. + + * ace/OS.cpp (mktemp): Added wchar version of this function. + Other changes added. Please refer to the entry above. If + platform/compiler supports this function, then both char and + wchar versions are defined as inline functions in OS.i. + (socket_{init,fini}): Removed leading :: from WSAStartup and + WSACleanup because these two are implemented as macros on + WinCE. Changed to use MessageBox instead of cerr for outputing + error messages. + + * ace/config-win32-common.h: Don't defined ACE_HAD_P_READ_WRITE on + WinCE. + + * ace/config-WinCE.h: Defined directive ACE_HAS_UNICODE_ONLY. + + * ace/ace_dll.dsp: Adjusted CE project settings. + +Fri Feb 06 15:28:11 1998 David L. Levine + + * ace/config-sunos5.5-sunc++-4.x.h: disable explicit template + instantiations with CC 4.2, because it still does implicit + instantiation. We need to figure out how to disable that. + Then, we can enable -instances=global to get the real + benefits of explicit template instantiation with CC. + + * tests/Barrier_Test.cpp: updated a comment re. the VxWorks + task names test. + +Fri Feb 06 10:42:22 1998 David L. Levine + + * ACE version 4.4.24, released Fri Feb 06 10:42:22 1998. + +Fri Feb 06 10:30:00 1998 Chris Gill + + * ace/Containers.cpp: fixed error in + ACE_Doubly_Linked_List_Iterator::first (void); + +Fri Feb 06 08:27:32 1998 Chris Gill + + * ace/Containers.{cpp,h} : added "first" methods to all container + iterators: each positions the iterator at the first element + in the container and returns 1, or if the container is empty + positions the iterator at a well defined "null" position for + that container and returns 0: + + template int + ACE_Unbounded_Set_Iterator::first (void); + + template int + ACE_Unbounded_Queue_Iterator::first (void); + + template int + ACE_Unbounded_Stack_Iterator::first (void); + + template int + ACE_Bounded_Set_Iterator::first (void); + + template int + ACE_Fixed_Set_Iterator::first (void); + + template int + ACE_Doubly_Linked_List_Iterator::first (void); + +Wed Feb 04 22:23:24 1998 David L. Levine + + * include/makeinclude/platform_linux*.GNU: commented out or + removed SUPPRESS_DASH_G, because it's not needed with hacked + gas on Linux/Alpha. + + * ACE-INSTALL.html: added some comments on Linux/RedHat 5.0, + for both Intel and Alpha. Thanks to James CE Johnson + , Torbjorn Lindgren , + and Oleg Krivosheev for this information. + + * ace/config-linux-common.h: replaced #define of ACE_HAS_EXCEPTIONS + with a compile time check for egcs, which supports exceptions. + Exceptions can now be enabled on the make command line. Also, + moved some comments on Linux system configuration up to + ACE-INSTALL.html. + + * ace/config-linux-common.h,config-g++-common.h: moved + ACE_HAS_EXCEPTIONS #define from config-linux-common.h to + config-g++-common.h. + + * include/makeinclude/wrapper_macros.GNU: disabled exception handling, + the default, on g++ >= 2.8.0. On both Linux/alpha and + Solaris 2.5.1/sparc, exception handling increased the size of + libACE.so by about 25 percent. Exception handling can easily + be enabled on the make command line or by editing your + include/makeinclude/platform_macros.GNU. + + * netsvcs/lib/TS_Server_Handler.cpp: instantiate + ACE_Svc_Handler if + ACE_HAS_STREAM_PIPES, not if ACE_HAS_TLI. Thanks to Oliver + Kellogg for reporting this problem. + + * Makefile: made ACE-INSTALL a dependency of release and + cleanrelease so that it is only updated when necessary. + + * ace/OS.{h,i},README (gets): wrapped with !ACE_LACKS_GETS. + + * ace/config-g++-common.h: added ACE_LACKS_GETS for egcs. It + supports ::gets (), but warns about it at link time on Linux. + The Solaris gets () man pages recommends using fgets () instead. + + * netsvcs/clients/Naming/Client/Client_Test.cpp: replaced use of + ACE_OS::gets () with ACE_OS::fgets (). + +Wed Feb 04 11:07:46 1998 Chris Gill + + * ace/Containers.cpp : fixed my "fix" to new_position pointer in + ACE_Ordered_MultiSet::find_from () - now checks the pointer + before assigning something to it. + +Tue Feb 03 15:11:00 1998 Chris Gill + + * ace/Containers.cpp : fixed order of member initialization list + in ACE_DNode ctor, added update of new_position pointer in + ACE_Ordered_MultiSet::find_from () + +Mon Feb 02 21:26:30 1998 David L. Levine + + * tests/Map_Manager_Test.cpp (test_map_manager): print out + item.int_id_ instead of local i so that item gets used (CXX + warned that it wasn't). + + * include/makeinclude/platform_osf1_4.0.GNU: added suppression of + warning 610, nonoverriding_function_decl. + + * ace/config-chorus.h,config-freebsd*.h,,config-hpux-10.x-g++.h, + config-irix{5.3,6.x}-g++.h,config-osf1-4.0.h,config-m88k.h, + config-netbsd.h,config-psosim-g++.h,config-sco-4.2-nothread.h, + config-sco-5.0.0-mit-pthread.h,config-sunos4-g++.h, + config-sunos5.4-g++.h,config-unixware-2.*.h: + migrated to config-g++-common.h. + + * ace/config-sunos5.5-egcs*.h: removed. config-sunos5.5-g++.h + now supports egcs, via config-g++-common.h. + + * ace/config-sco-5.0.0*.h: added RCS keyword string. + + * include/makeinclude/wrapper_macros.GNU: support "exceptions" + make flag on all platform. If enabled, it adds + -DACE_HAS_EXCEPTIONS to CCFLAGS. Not all platforms support + exception handling, of course, and that is noted in the + description of the "exceptions" make flag. + + * include/makeinclude/platform_sunos5_sunc++.GNU, + platform_sunos5.6_sparc_sunc++_4.2.GNU: + removed -DACE_HAS_EXCEPTIONS, because it's now done in + wrapper_macros.GNU. + + * examples/Reactor/Misc/test_event_handler_t.cpp: renamed + ACE_Sig_Handler to ACE_Test_Sig_Handler to avoid collision + with ACE_Sig_Handler in ACE library. + + * tests/Env_Value_Test.cpp (main): print out signed instead of + unsigned values. + +Mon Feb 02 14:40:00 1998 Chris Gill + + * tests/OrdMultiSet_Test.cpp: added explicit template instantiation + for ACE_DNode + + * tests/OrdMultiSet_Test.dsp: new MSVC++ project for the test + + * tests/tests.dsw: added OrdMultiSet_Test.dsp project to workspace + + * tests/run_tests.{bat,sh,psosim,vxworks} : added OrdMultiSet_Test + + * tests/Makefile : added OrdMultiSet_Test + +Mon Feb 02 02:42:30 1998 Nanbor Wang + + * ace/OS.h (ACE_NOTSUP_RETURN): Moved its definition to the end of + this file where __TEXT has already been defined. WinCE needs to + use wchar. + + (struct utsname): Moved this definition after all datatypes are + filled in. Reverted my previous changed on it. + + Win32 only: Added wchar version of ACE_OS::{perror,fprintf, + vsprintf,sprintf}. + + Windows CE only: Undefined some char version function in class + ACE_OS. They are of no use on CE anyway. + + * ace/OS.i (fdopen): Added wchar version of ACE_OS::fdopen, it is + only available on Win32. + + Windows CE only: Added implementation for c-styled file + functions. Type FILE * is mapped to Win32 HANLDE under the hood + and Win32 API's are used to emulate these functions. + + * ace/OS.cpp: Removed some char version functions and added some + wchar functions. + +Sun Feb 01 15:12:49 1998 Chris Gill + + * tests/OrdMultiSet_Test.cpp: added an ACE test for the + ACE_Ordered_MultiSet and ACE_Ordered_MultiSet_Iterator + class templates. + + * ace/Containers.i (ACE_Ordered_MultiSet::is_empty ()): + changed to return 1 rather than cause a SEGV when the + container is in fact empty (the above test discovered the bug). + +1998-02-01 Nanbor Wang + + * ace/OS.h (struct utsname): Separated WCE's definition from + ACE_LACKS_UTSNAME_T bacause VxWorks doesn't have TCHAR type. + +Sun Feb 01 12:09:11 1998 David L. Levine + + * ace/Containers.cpp (ACE_Ordered_MultiSet::insert and find): + expanded ITERATOR type of second argument, because g++ couldn't + deal with it. It can in the class declaration in Containers.h, + so I didn't change that. + + * ace/config-sunos5.5-g++.h,config-lynxos.h,config-vxworks5.x.h: + migrated to config-g++-common.h. + + * tests/run_tests.vxworks: disabled Message_Queue_Test because + it sometimes page faults or hangs the target. + +Fri Jan 30 15:35:30 1998 Chris Gill + + * ace/Containers.{cpp,h,i} : added class templates + ACE_Ordered_MultiSet and ACE_Ordered_MultiSet_Iterator + which respectively implement abstractions for containment + of and iteration over an ordered set that allows multiple + identical instances of a given item. + +Fri Jan 30 02:42:30 1998 Nanbor Wang + + * ace/OS.cpp (uname): Made it comform with Unicode. + + * ace/OS.h (struct utsname): Changed the internal string type to + TCHAR. + + * ace/OS.i (gettimeofday): Added Windows CE implementation. + +Thu Jan 29 21:02:24 1998 David L. Levine + + * ace/config-sunos5.5-g++.h: revert so that ACE_HAS_STRING_CLASS + is #defined, regardless of g++ version. + + * ace/config-g++-common.h,config-gcc-2.7.2.h: replaced + config-gcc-2.7.2.h with config-g++-common.h, which will support + all g++ versions, including egcs. + + * ace/config-linux-common.h,config-sco-5.0.0-{fsu-pthread,nothread}.h: + migrated to config-g++-common.h. + +Thu Jan 29 20:28:30 1998 Douglas C. Schmidt + + * ACE version 4.4.23, released Thu Jan 29 20:28:30 1998. + +Thu Jan 29 16:17:28 1998 Nanbor Wang + + * ace/Log_Msg.cpp (open): Always close down the logger connection + before changing the setting. Added codes to allow resetting + logging endpoint back to STDERR from LOGGER. + + * ace/OS.h (ACE_DEFAULT_LOGGER_KEY): Changed to localhost:10012 + so it can be used in both netsvcs/lib/ and netsvcs/client/. + + * netsvcs/client/Logger/indirect_logger.cpp: Added code to reset + logging endpoint back to stderr. + + * netsvcs/lib/Client_Logging_Handler.cpp + (ACE_Client_Logging_Acceptor): Changed to initialize + logger_key_ with ACE_DEFAULT_LOGGER_KEY. + + * netsvcs/lib/Client_Logging_Handler.h: Removed DEFAULT_LOGGER_KEY + definition. + +Thu Jan 29 12:32:32 1998 Carlos O'Ryan + + * include/makeinclude/platform_irix6.x-sgic++.GNU: + Added support for debugging, somehow the DCCFLAGS were missing. + +Thu Jan 29 10:52:34 1998 David L. Levine + + * ace/config-lynxos.h: added putenv () declaration. + + * include/makeinclude/platform_sunos5_g++.GNU: added comment + about disabling optimization with g++ 2.8.0. + + * ace/config-sunos5.5-g++.h: don't #define ACE_HAS_STRING_CLASS + with g++ 2.8.0. + + * include/makeinclude/platform_sunos5_egcs.GNU: include + the g++ platform file, it works just fine. The net effect + on egcs is these three changes: + + 1) -fno-implicit-templates is included in CPPFLAGS. That + option is necessary with the egcs (egcs-2.90.23 980102 + (egcs-1.0.1 release)) that we use to save _much_ text + space. + + 2) Use -G instead of -shared in SOFLAGS. That way, + libstc++.so, etc., need not be built. + + 3) The compiler is called g++ instead of c++. I don't + think this hurts anything. And Purify knows about g++, + but not g++. + + These (and any other) options can be overridden in + platform_sunos5_egcs.GNU if necessary. See the commented + example there. + + * ace/config-sunos5.5-egcs.h: added + ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION to match + -fno-implicit-templates in the platform_sunos5_egcs.GNU. + + * tests/Env_Value_Test.cpp: updated comment to explain why we + can't use spawn with ACE_HAS_NONSTATIC_OBJECT_MANAGER. We + can, in general, but we can't on VxWorks because it doesn't + have fork (). + +Thu Jan 29 10:32:28 1998 Carlos O'Ryan + + * include/makeinclude/platform_sunos5_sunc++.GNU: + The posix4 library is needed in some TAO examples. + + * ace/Module.h: + * ace/Message_Queue.h: + Workaround HP/C++ compiler bug, it does not support enums inside + templates so we move them into base classes. Thanks to Sundar + T.J for reporting this problem. + +Thu Jan 29 10:14:03 1998 Douglas C. Schmidt + + * ace/FIFO.h: Revised the comment at the beginning of ACE_FIFO to + clearly indicate that it doesn't work portably to Win32. Thanks + to Thomas Hampson for suggesting this. + +Wed Jan 28 15:36:55 1998 Carlos O'Ryan + + * bin/auto_compile: + We can use the top level Makefile on TAO now. + +Wed Jan 28 11:59:41 1998 Nanbor Wang + + * ace/OS.i (isatty): Added conversion from a Win32 HANDLE to a C + file handle. It works correctly now. Thanks to Chuck R. Gehr + for noticing the problem. + +Tue Jan 27 20:32:07 1998 Douglas C. Schmidt + + * ace/Message_Block: Added an accessor to retrieve the reference + count on an ACE_Data_Block. Thanks to Dave Meyer + for contributing this. + +Tue Jan 27 15:09:08 1998 Douglas C. Schmidt + + * ace/OS.i, + * ace/Timer_Queue_Adapters.cpp: + When using ACE_CLEANUP_???_POP macros, it was being called with + argument 1, which should be 0 (don't execute the cleanup). + Thanks to Arturo Montes for reporting + argument 1, which should be 0 (don't execute the cleanup).this. + +Tue Jan 27 14:56:49 1998 David L. Levine + + * ace/Basic_Types.*: more cleanup: got rid of ACE_USES_ACE_U_LONGLONG, + replaced VXWORKS && ghs with ACE_HAS_WCHAR_TYPEDEFS_CHAR, and + factored out some common #defines. Rearranged ACE_SIZEOF_LONG_LONG + and ACE_UINT64 logic so that it works on NT. + +Tue Jan 27 08:28:34 1998 Steve Huston + + * ace/Basic_Types.h: Simplified and changed so that the config.h file + can pre-specify the ACE_SIZEOF_* macros in case the preprocessor + has trouble calculating them. + +Tue Jan 27 06:45:07 1998 David L. Levine + + * examples/IOStream/server/iostream_server.cpp: for egcs, use + ACE_SOCK_IOSTREAM instead of its expansion in the ACE_Svc_Handler + template instantiation. + + * ace/Event_Handler_T.h,examples/Reactor/Misc/test_event_handler_t.cpp: + removed special-case support for ACE_HAS_SIGNFO_T, because ace/OS.h + declares a siginfo_t without it. + + * tests/run_tests.vxworks: enabled Priority_Reactor_Test and + Message_Queue_Test, because they appear to run successfully now. + Most of the time, anyways. Message_Queue_Test occasionally + pages faults; there appears to be a memory management problem. + +Tue Jan 27 02:38:16 1998 Nanbor Wang + + * ace/OS.{i,cpp}: + * ace/config-WinCE.h: More Windows CE insanities. + +Mon Jan 26 13:20:58 1998 David L. Levine + + * include/makeinclude/platform_osf1_4.0_g++.GNU: added $(ACELIB) + to SOFLAGS. Thanks to Oliver Kellogg + for reporting the problem with building shared libraries on + g++/DU 4.0. + + * ace/config-linux-common.h: moved ACE_LACKS_TCP_H so that it is + only seen on alphas (with glibc2). Thanks to Edgar Villanueva + for reporting this. + + * performance-tests/Misc/childbirth_time.cpp (prof_native_thread, + prof_ace_os_thread): changed type of local j to int to avoid + signed/unsigned comparison. + + * tests/Reactors_Test (Test_Task): changed type of member + handled_ from int to size_t to avoid signed/unsigned comparison + in Test_Task::handle_input (). + +Mon Jan 26 11:35:54 1998 Carlos O'Ryan + + * bin/auto_compile: + Added TAO_ROOT to the environment. + +Mon Jan 26 10:28:57 1998 Douglas C. Schmidt + + * ACE version 4.4.22, released Mon Jan 26 10:28:57 1998. + +Mon Jan 26 02:53:10 1998 Nanbor Wang + + * ace/OS.h: Namespace related macros are now ifdef'ed by + ACE_HAS_BROKEN_NAMESPACES instead of ACE_ORBIX_HAS_NAMESPACES. + + * ace/README + * ace/config-win32-common.h: Added a new flag + ACE_HAS_BROKEN_NAMESPACES to deal with MSVC's broken namespace + support. + + * ace/config-win32.h: Re-enable defining ACE_ORBIX_HAS_NAMESPACES + for Win32. + + * ace/config-WinCE.h: Temporary file to hold WinCE specific + configurations. It will probably be merged with + config-win32-common.h in some point. + + * ace/ace_dll.dsp: Added WinCE x86 emulation mode project + definition. + + * ace/OS.{h.i} (ACE_OS): Added Windows CE macros madness. + + * ace/config-win32-common.h: Ifdef'ed out ACE_HAS_SIG_ATOMIC_T for + WinCE. Prevent repeat definition of STRICT. + +Sun Jan 25 17:31:49 1998 Nanbor Wang + + * ace/config-win32.h: Disabled setting ACE_ORBIX_HAS_NAMESPACES by + default on NT. MSVC's namespace support is buggy. + +1998-01-25 Nanbor Wang + + * tests/Conn_Test.cpp: Rearranged explicit template instantiations + order to avoid errors from egcs. Thanks to Gonzo for reporting + the bug. + +Fri Jan 23 12:24:05 1998 Douglas C. Schmidt + + * ace/OS.i (sleep): Fixed a typo where tv_sec was being set rather + than tv_usec. Thanks to Gonzo for pointing this out. + +Fri Jan 23 06:27:51 1998 David L. Levine + + * ace/IOStream.h: use std::string if + ACE_USES_STD_NAMESPACE_FORSTDCPP_LIB IOStream.h. Thanks + to Gonzo for the patch. Also, changed + DEC_CXX to __DECCXX_VER because that's more accurate. + + * tests/Barrier_Test.cpp: specify thread name and stack size + on VxWorks. Thanks to Stan Leeson + for suggesting this. + + * tests/Env_Value_Test.cpp (TEST_THIS): cast val to (type) + before casting to (u_int), to try to avoid DEC CXX compiler + warning about integer overflow. Thanks to Frederic Andres + for reporting this. + + * ace/config-osf1-4.0.h: added ACE_HAS_EXCEPTIONS, etc., with + CXX 6.0. Thanks to Torbjorn Lindgren for + the patch. + + * ace/OS.i (thr_kill): removed ACE_ADAPT_RETVAL because + ::taskNameToID returns the task ID, not success/fail. + Thanks to Richard Keizer for + diagnosing the problem and providing the fix. + + * tests/run_tests.vxworks: enabled Thread_Manager_Test and + Message_Block_Test now that they succeed. Thanks to Richard Keizer + for the ACE_OS::thr_kill fix. + + * ace/OS.cpp (thr_create), ace/Thread_Manager.cpp (kill_thr): + on VxWorks, use strncmp instead of strcmp to check for allocated + thread ID. + +Thu Jan 22 16:34:18 1998 Douglas C. Schmidt + + * examples/Connection/misc/Connection_Handler.cpp (svc): Fixed a + bug in the example where the global Singleton Reactor was being + used rather than the object's Reactor. Thanks to Peter Gross + for reporting this. + +Thu Jan 22 09:04:13 1998 David L. Levine <@cs.wustl.edu> + + * ace/Hash_Map_Manager.cpp (ACE_Hash_Map_Iterator_Base ctor): + added a cast of mm.total_size_ to ssize_t, to try to avoid + a compiler warning. Thanks to Brian Mendel + for reporting this. + + * ace/config-osf1-4.0.h: updated g++ support. Thanks to + Oliver Kellogg for the patch. + + Thanks to Tom Venturella and Dave Mayerhoefer + (!) for requesting the following three changes: + + * ace/Thread_Manager.cpp: added support for a user-supplied + thread (VxWorks task) name. By itself, that means just passing + the ACE_thread_t along to ACE_OS::thr_create (). The tricky + part was then handling the case where the user doesn't supply + a name. It would be cleaner if the ACE_thread_t and ACE_hthread_t + typedefs were swapped on VxWorks, because the ACE_Thread_Manager + keys off of the ACE_thread_t. And in addition to being cleaner, + it would be safer because ACE_thread_t's currently aren't + guaranteed to be unique on VxWorks. + + * ace/OS.cpp (thr_create): on VxWorks only, use the t_id (task + name) and stack_size if supplied. Also added support for setting + the stack, but commented it out because it doesn't seem to work. + + * tests/Conn_Test.cpp: on VxWorks, assign thread (VxWorks task) + names to server and client threads, to test that feature. + + * ace/OS.cpp (spa [VxWorks only]): use ::taskSpawn () instead + of ::sp () so that the task name, ace_main, can be specified. + + * ACE-INSTALL.html: added note about not linked the ACE library + into every VxWorks executable. It should work when running + multiple ACE executables on a target, though I haven't tried it. + + * include/makeinclude/rules.local.GNU: set SOEXT if it was not set, + so that it's always non-null for make depend. + + * ace/OS.h: #define ACE_THR_PRI_FIFO_DEF on all threaded platforms, + if not already defined in OS.h or in the individual platform config + file. It should be used by applications for a default real-time + thread priority. + + * ace/config-chorus.GNU: added GreenHills support. + + * include/makeinclude/platform_chorus_ghs.GNU: added platform file. + +Wed Jan 21 21:37:03 1998 Nanbor Wang + + * ace/Hash_Map_Manager.cpp (close_i): Removed the HPUX_11 + destructor madness by saving the location to be destructed in a + temporary reference instead of calling the destructor from the + array directly. Thanks to Istvan Buki for + providing the patch. + +Wed Jan 21 20:36:43 1998 Chris Cleeland + + * ACE version 4.4.21, released Wed Jan 21 20:36:43 1998. + +Wed Jan 21 10:39:12 1998 David L. Levine + + * ace/Task.cpp (activate): for builds without threads only, + added ACE_UNUSED_ARG of stack and stack_size. + + * ace/High_Res_Timer.cpp: used unsigned constants instead of + signed, to allow resolution of overloaded + ACE_U_LongLong::operator/ (). + +Tue Jan 20 21:15:01 1998 Douglas C. Schmidt + + * ACE version 4.4.20, released Tue Jan 20 21:15:01 1998. + +Tue Jan 20 20:31:27 1998 Carlos O'Ryan + + * tests/test_config.h: + Changed several buffer sizes from BUFSIZ to MAXPATHLEN, they + were used for storing pathnames, so the later is a proper size + for them. + +Tue Jan 20 15:54:44 1998 Darrell Brunsch + + * ace/Timer_Heap_T.cpp: Fixed a bug that was introduced on + Sunday because of the non-use of position 0 (we have to + grow the heap one node early). + + * ace/Timer_Queue_T.{h,cpp}: Added a return_node () method + which is used to return a ACE_Timer_Node back into the + control of the Timer Queue after it leaves via + remove_first (). + +Tue Jan 20 15:52:31 1998 Douglas C. Schmidt + + * ACE version 4.4.19, released Tue Jan 20 15:52:31 1998. + +Tue Jan 20 12:49:05 1998 Nanbor Wang + + * ace/Hash_Map_Manager.cpp (ACE_Hash_Map_Manager): Member table_ + needs to be initialized to prevent deleting invalid memories. + +Tue Jan 20 11:57:24 1998 Carlos O'Ryan + + * bin/auto_compile: + Added several TAO components to the compile list. + The regular expression for make errors was missing several of + them. + +Tue Jan 20 03:36:54 1998 Nanbor Wang + + * ace/Hash_Map_Manager.cpp (open): We should call close_i () to + ensure previously allocated memory gets release before we + allocate new one. + +Mon Jan 19 22:21:34 1998 Nanbor Wang + + * tests/Env_Value_Test.cpp (main): Added test codes for unsigned + short. + + * ace/Env_Value_T.i (ACE_Convert): Added conversion function for + unsigned short. + +Mon Jan 19 15:13:47 1998 Douglas C. Schmidt + + * bin/Makefile: Fixed a problem with the CCFLAGS definition that + was causing circular macro expansion. Thanks to Philippe + O'Reilly for reporting this. + +Sun Jan 18 14:32:42 1998 Darrell Brunsch + + * ace/Timer_Heap_T.cpp: Problems were arising because of the + use of negative numbers in the timer_id array of the timer + heap for the free list. When the 0th index is in the free + list, pointers to it will show up as 0 (because 0 == -0). + This will look the same as a timer_id for the top of the + heap, and if cancel () was attempted on this invalid + timer_id, bad things would happen. To prevent this, index + 0 is now ignored so it doesn't show up in the free list. + +Sun Jan 18 18:12:52 1998 Nanbor Wang + + * examples/Service_Configurator/Misc/*.ds?: Added new project + files for this example. + +Sun Jan 18 17:27:52 1998 Darrell Brunsch + + * ace/Timer_Wheel_T.cpp: Fixed a problem with Timer Wheel's + expire(). The problem occured when the handle_timeout() method + of the event handler used would return a 0. This causes the + Timer Queue to cancel all timers using that event handler. + Because Timer Wheel's expire caches the position of some timers + that will be expired, it was trying to expire timers that were + already cancelled. Now it checks the timer before it expires. + +Sun Jan 18 16:08:36 1998 Douglas C. Schmidt + + * ace/Thread_Manager: Modified the signature to the spawn_n() + method so that it's possible to pass in an array of stack + pointers and stack sizes. Thanks to Thomas Venturella + for requesting this. + + * ace/Task: Modified the signature to the activate() method so + that it's possible to pass in an array of stack pointers and + stack sizes. Thanks to Thomas Venturella + for requesting this. + +Sun Jan 18 15:54:16 1998 Darrell Brunsch + + * ace/Timer_Wheel_T.h: + ace/Timer_Hash_T.h: + ace/Timer_Queue_T.h: + ace/Timer_Wheel_T.cpp: + ace/Timer_Hash_T.cpp: Added pure virtual get_first() method to + Timer_Queue_T. Added implementations to Timer_Wheel and Timer_Hash. + Timer_Heap and Timer_List already had implementations. + +Sat Jan 17 23:40:02 1998 Nanbor Wang + + * netsvcs/VCAUTO.MAK: + * netsvcs/lib/VCAUTO.MAK: Added directory information for easier + debugging. + +Sat Jan 17 16:10:04 1998 Douglas C. Schmidt + + * examples/Service_Configurator/Misc/main.cpp (main): Replaced the + buggy use of ACE_Service_Config daemon; with + ACE_Service_Config::open(). We'll have to fix this properly + some day, but for now this is the best solution. Thanks to + Pawel Roman for reporting this. + +Sat Jan 17 00:42:13 1998 Irfan Pyarali + + * ace/SString.cpp (substring): Fixed bug. count should be + initialized to length and not len_. + +Fri Jan 16 15:52:34 1998 Nanbor Wang + + * ace/IOStream.h (ACE_Streambuf): + * ace/config-win32-common.h: + * ace/iosfwd.h: + * ace/streams.h: Applied IOStream patches from James CE Johnson + . + +Fri Jan 16 01:42:52 1998 Irfan Pyarali + + * ace/OS.h: Changed the definition of ACE_CORBA_* macros so that + on non-Win32 platforms, they will be expand to the nested + classes. Thanks to Jonathan Reis + for reporting this. + + * ace/SString.h: Added the correct export macros. + +Thu Jan 15 15:45:48 1998 Douglas C. Schmidt + + * etc/ACE-guidelines.html: Reformatted this page a bit. + + * ace/Message_Queue.cpp (open): The fix from Slawomir Kuzniar was + incorrect. I reverted the change. + +Thu Jan 15 12:43:23 1998 Nanbor Wang + + * /: Added a bunch of makefiles (*.MAK) for one button + make-and-test on NT. + + * Makefile (FILTER): Added filter to remove VC one button related + makefile from ACE release. + + * ace/ACE_Library.{mdp,mak}: Added Shared_Memory.cpp file into the + project makefile. + +Thu Jan 15 09:12:26 1998 David L. Levine + + * tests/Barrier_Test.cpp,Message_Block_Test.cpp,Priority_Task_Test.cpp, + Reactor_Exceptions_Test.cpp,Reactors_Test.cpp,Thread_Mutex_Test.cpp: + (main): changed some local variables from int to size_t to avoid + signed/unsigned comparison. + + * ace/OS.i,config-linux-common.h,README: aded ACE_HAS_SOCKLEN_T + support for Linux/glibc2, which has a socklen_t type. + + * include/makeinclude/rules.local.GNU (depend.local): produce all 4 + combinations of .obj, .shobj, .o, and .so dependency targets. This + should take care of the problem of not rebuilding when a dependency + has changed, after we regenerate all the Makefiles. + + * include/makeinclude/rules.local.GNU (depend.local): removed the sed + rule that wiped out each Makefile line ending with :. I don't know + why that rule was there. With it, if a Makefile had a target such + as clean:, it got deleted. Not any more. + + * many Makefiles: updated dependences with revised depend.local. + + * bin/g++dep: added lib/g++-include path to gcc -MM invocation, so + that gcc can find all of its headers. (It didn't help to replace + gcc with g++, though I would have expected that to solve the + problem.) + + * ace/Timer_Heap_T.cpp (get_first): fixed ACE_TRACE id string. + + * apps/Gateway/Gateway/Concrete_Connection_Handlers.cpp, + * apps/Gateway/Peer/Peer.cpp (recv): + changed type of HEADER_SIZE to size_t to avoid signed/unsigned + comparison. + +Wed Jan 14 20:41:35 1998 Carlos O'Ryan + + * ace/Signal.i (is_member): + Fixed typo in new cast, the type is sigset_t not sigset. + +Wed Jan 14 20:27:44 1998 + + * ace/OS.h: + The new location for AF_ANY and AF_FILE was in the middle of a + big #if !ACE_WIN32, hence it was not working for NT, I moved it + further down and now NT is happy. + +Wed Jan 14 19:01:59 1998 Douglas C. Schmidt + + * ace/Message_Queue.cpp (open): In Message_Queue::open + deactivated_ flag is being set to 0 instead of + WAS_INACTIVE. This is causing incorrect return value from + first-time call to activate(). Thanks to Slawomir Kuzniar + for reporting this. + + * ace/Signal.i (is_member): Added an ACE_const_cast(). Thanks to + Oleg Krivosheev for reporting this. + +Wed Jan 14 06:45:52 1998 David L. Levine + + * ace/OS.i: Fixed typo in ACE_Time_Value::operator const timeval * + definition. (select's): cast the ACE_Time_Value to a + const timeval * and then to a timeval * so that they will + compile. + + * tests/Time_Value_Test.cpp (test_ace_u_longlong): made divisors of + operator/ tests explicitly unsigned, to avoid overloading problems + now that there are two division operators. + +Tue Jan 13 16:31:48 1998 Douglas C. Schmidt + + * ace/OS.i: Changed the signature of ACE_Time_Value::operator + timeval *() to return operator const timeval *(). Thanks to + Oleg Krivosheev for reporting this. Changed + several other unsafe casts to use the ACE_const_cast() macro. + +Tue Jan 13 13:30:23 1998 David L. Levine + + * ace/Profile_Timer.cpp (elapsed_time): use floating point + arithmetic for real_time calculation, in case delta_t is + less than ACE_ONE_SECOND_IN_NSECS (and for more precision + otherwise). Thanks to Brian Mendel for tripping over this. + + * ace/Basic_Types.{h,i} (ACE_U_LongLong): added + operator/ (const double). + + * ace/OS.h: moved definition of AF_FILE, etc., to _after_ the + #include of sys/socket.h. That way, the #ifndef AF_FILE + protection will work properly on Linux/glib2. Thanks to + Amos Shapira for breaking silence and + reporting this. + +Mon Jan 12 20:19:54 1998 Douglas C. Schmidt + + * ace/SString.i: Replaced all uses of NULL with 0 since NULL + causes problems with some lame C++ compilers. + + * ace/SString.i: Moved one of the inline find() methods down + so that GCC doesn't complain anymore. + + * tests/Reactor_Timer_Test.cpp (main): Changed long i to size_t i + to be consistent. + + * ace/Select_Reactor.h: Updated the explanation of how the + ACE_Select_Reactor_Token works. Thanks to Detlef Becker for + explaining this in great detail. + + * tests/test_config.h: Changed the type of all the consts to + size_t rather than int. This may cause a bit of upheaval at + first since we'll need to fix some other types. But it's the + "Right Thing"[TM] to do. + +Mon Jan 12 18:31:23 1998 Nanbor Wang + + * Start renaming MSVC 4.2 workspace/makefile names. + + * apps/Gateway/Peer/Peer4.{mdp,mak}: + * apps/Gateway/Gateway/Gateway4.{mdp,mak}: Made them in synch with + VC 5.0's status. + +Mon Jan 12 12:30:34 1998 David L. Levine + + * ace/config-linux-common.h: moved + ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES so that it isn't used + with egcs. Thanks to Gonzo for testing this. + + * tests/Service_Config.test: changed type of VARIETIES to u_int to + avoid signed/unsigned comparison in main. Thanks to Gonzo for + reporting this. + + * ace/config-linux-common.h: added ACE_HAS_TEMPLATE_TYPEDEFS and + ACE_HAS_TYPENAME_KEYWORD. Thanks to Oleg Krivosheev + for reporting these. + + * ace/config-vxworks5.x.h: merged the two VxWorks configs (g++ and + ghs) into this new config for easier maintenance. Added + ACE_THR_PRI_FIFO_DEF, set to 6. + + * tests/Reactor_Timer_Test.cpp (main): cast i to u_long to avoid + signed/unsigned comparison. + +Sun Jan 11 23:02:07 1998 Irfan Pyarali + + * tests/SString_Test.cpp (main): Removed the "silly" strings from + the tests. They are annoying and cause memory leaks. + +Sun Jan 11 22:16:28 1998 Nanbor Wang + + * apps/Gateway/Peer/Peer.{h,cpp} (transmit): Changed the function + to return the result of transmission. + (transmit_stdin): Make sure the function returns proper results + of transmission. + +Sun Jan 11 16:18:15 1998 Douglas C. Schmidt + + * ACE version 4.4.18, released Sun Jan 11 16:18:15 1998. + +Sun Jan 11 00:00:26 1998 Douglas C. Schmidt + + * apps/Gateway/Gateway/Gateway.cpp (parse_connection_config_file): + Fixed a typo, == should be =. Thanks to David Levine for + reporting this. + + * apps/Gateway/Peer/Peer.cpp (recv), + apps/Gateway/Gateway/Concrete_Connection_Handlers.cpp (recv): + Added a cast to remove a GCC warning about signed/unsigned + comparisons. Thanks to David Levine for reporting this. + + * ace/Log_Msg.cpp (log): Made a minor change to move where the + message is copied from thread-specific storage into the transfer + buffer. Thanks to Patrick J. McNerthney + for reporting this. + + * apps/Gateway/Peer/Peer: Added new logic to transmit subscription + requests to the Gateway. + + * apps/Gateway/Gateway/Event.h (class Event_Header): Make sure + that we correctly encode/decode the connection_id. + +Sat Jan 10 18:17:06 1998 Douglas C. Schmidt + + * apps/Gateway/Gateway/Event.h: Added the event priority_ field to + the Event_Key. We don't currently use this, but we may some + day. + + * apps/Gateway/Gateway/Concrete_Connection_Handlers.cpp (put): + Changed the forward() method to process() since our new scheme + will need to do more than just forward, e.g., it will need to + handle subscriptions. + + * apps/Gateway/Gateway/Connection_Handler: Made the accessors + const member functions and also added accessors for the + Event_Channel * so this can be set by the + Connection_Handler_Acceptor::accept_svc_handler() method. + + * apps/Gateway/Gateway/Connection_Handler: Added mutators so that + we can set the local and remote addresses outside of the + constructor. + + * apps/Gateway/Gateway/Options: Added a connection_id() accessor + to set/get the connection id. This makes it possible to allow + Peers to connection with the Gateway. + + * apps/Gateway/Gateway/Gateway.cpp (parse_connection_config_file): + Added a sanity check to ensure that the connection ids start at + 1 and increment by 1. + +Sat Jan 10 22:37:37 1998 David L. Levine + + * ace/SString.i (find): changed type of local i to size_t to + avoid signed/unsigned comparison. + +Sat Jan 10 14:57:01 1998 + + * ace/Env_Value_T.h: + The return value for the assignment operator had no template + parameter, ditto for the arguments of the copy constructor and + the already mentioned operator. + +Sat Jan 10 13:20:08 1998 Nanbor Wang + + * tests/Conn_Test.cpp: Moved template instantiation codes around + to avoid warnings. + +Sat Jan 10 01:36:08 1998 Irfan Pyarali + + * ace/SString: Made the following changes to make the ACE string + class look more like the STL string class: + + - Added npos to all classes. + + - Added non-const reference operator[]. + + - Changed operator= and operator+= to return *this. + + - Added STL like find and rfind routines + + - Made the three classes be a similar as possible. + + - Changed the implementation of strstr to use the C library + strstr function. + + - Added constructors from single characters. + + - Made substring a const method. + +Fri Jan 9 19:11:39 1998 Nanbor Wang + + * tests/Map_Manager_Test.cpp (test_hash_map_manager): Added + ACE_UNUSED_ARG to eliminate warnings. + + * ace/Hash_Map_Manager.cpp (rbegin): Added more static cast to + eliminate warning messages. + +Fri Jan 9 11:35:53 1998 Douglas C. Schmidt + + * examples/Service_Configurator/IPC-tests/server/server_test.cpp: + Fixed a syntax error. Thanks to John Mulhern + <9107@MN3.LAWSON.lawson.com> for reporting this. + + * ace/Log_Msg.cpp (log): Changed abort_prog == 0 to abort_prog so + that STDERR would be printed correctly. + + * ACE-categories: Added all the ACE files into the ACE-categories + listing. Thanks to Andres Kruse for motivating this. + + * include/makeinclude/platform_sunos5_egcs.GNU (CXX): Removed + -pipe from CC and CXX. It was already in CCFLAGS. + +Fri Jan 09 11:56:44 1998 Irfan Pyarali + + * ace/config-win32.h (ACE_ORBIX_HAS_NAMESPACES): By default, you + will get the proper namespace usage for Orbix. If you don't + like this, comment out the #define ACE_ORBIX_HAS_NAMESPACES line + or #undef ACE_ORBIX_HAS_NAMESPACES in your config.h file after + including this config-win32.h. + +Fri Jan 09 07:04:47 1998 David L. Levine + + * include/makeinclude/platform_sunos5_g++.GNU: removed + -pipe from CC and CXX. It was already in CCFLAGS. + + * include/makeinclude/platform_vxworks5.x_g++.GNU: added + target-dependent support for symbol table extractor, and + disabled symbol table extraction (POSTLINK) by default. + Thanks to Keith Nicewarner for + reporting problems with this on PPC604 targets. + + * ace/config-linux-common.h: added ACE_HAS_STDCPP_STL_INCLUDES + and removed ACE_LACKS_ACE_IOSTREAM. Thanks to James CE Johnson + for reporting these. + + * tests/run_tests.vxworks: added Env_Value_Test. + +Fri Jan 09 00:14:20 1998 Nanbor Wang + + * apps/Gateway/Gateway/Connection_Handler_Acceptor.cpp: + * apps/Gateway/Gateway/Config_Files.cpp: Defined + ACE_BUILD_SVC_DLL flag. All declarations of an exported class + must be declared with the same exporting flag. + + * apps/Gateway/Peer/Options.h: Updated the path of include file + Event.h. + +Thu Jan 08 22:11:57 1998 Nanbor Wang + + * ace/Env_Value_T.i (ACE_Convert): Added static cast for int and + short conversion funcions. + +Thu Jan 08 21:37:30 1998 Douglas C. Schmidt + + * ACE version 4.4.17, released Thu Jan 08 21:37:30 1998. + +Thu Jan 8 19:50:43 1998 Douglas C. Schmidt + + * ace/Task: Added a virtual destructor for ~ACE_Task_Base. Thanks + to Oleg Krivosheev for suggesting this. + + * ace: Added a new config-sunos5.5-egcs.h for the EGCS compiler. + Thanks to Oleg Krivosheev for contributing + this. + + * include/makeinclude: Added a new platform macros file for the + EGCS compiler on Solaris 2.x. Thanks to Oleg Krivosheev + for contributing this. + + * include/makeinclude/platform_sunos5_g++.GNU (CXX): Added the + -pipe flag. + + * man: Updated all the manual pages. + + * ace/Log_Msg: Added changes to allow the logging of custom built + log records. The main reason for these changes is to allow code + to handle the logging of out of memory conditions without + allocating any additional memory. Thanks to Patrick + J. McNerthney for this feature. + + * ace/Log_Msg: Added a new method called log_priority_enabled(), + which returns true if the priority is enabled (gee, is *that* + what it does? ;-)). Thanks to Patrick J. McNerthney + for this feature. + + * examples/Service_Configurator/IPC-tests/server/server_test.cpp + (main): Revised the driver program so that it doesn't create an + explicit ACE_Service_Config object. Thanks to John Mulhern + <9107@MN3.LAWSON.lawson.com> for reporting this. + + * apps/Gateway/{Gateway,Peer}/Options.cpp: Oops, ACE_BUILD_DLL + should be ACE_BUILD_SVC_DLL, yikes! Thanks to Jeff Hellzen + for reporting this. + + * apps/Gateway/{Peer,Gateway}/Options.{h,cpp}: Added a missing + #define ACE_BUILD_DLL and a missing ACE_Svc_Export. Thanks to + Jeff Hellzen for reporting this. + + * ace/Select_Reactor.cpp (suspend_i): The clr_bit call was + mistakenly made on the write mask, rather than the read mask. + Thanks to Billy Quinn for reporting this. + +Thu Jan 08 16:02:33 1998 Nanbor Wang + + * ace/Hash_Map_Manager.{h,cpp}: Added STL-styled iterator + functions. + + * tests/Map_Manager_Test.cpp: + * tests/Hash_Map_Manager_Test.cpp: + * tests/Conn_Test.cpp: + * ace/Local_Name_Space.cpp: + * ace/Filecache.cpp: Added missing template instantiation codes. + +Thu Jan 08 11:05:15 1998 + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Added the new Shared_Memory.cpp file to the project. + +Wed Jan 07 20:40:45 1998 David L. Levine + + * ace/OS.h: protect #define of AF_FILE, because Linux/RedHat 5.0 + #defines it in /usr/include/socketbits.h. Thanks to James CE + Johnson for reporting this. + + * tests/test_config.h (set_output): "if (! test_dir)" instead of + "if (test_dir)" so the output filename ends up non-null. + + * ace/Shared_Memory.{h,cpp},Makefile (~ACE_Shared_Memory): made + virtual and non-line. Added file Shared_Memory.cpp to contain + the definition. + +Wed Jan 07 17:59:57 1998 Nanbor Wang + + * ace/Free_List.i (add): Only delete freeed item when we hit the + high water mark, not the other way around. Thanks to Stuart + Myles for pointing this out. + +Wed Jan 7 17:46:09 1998 James C Hu + + * examples/Timer_Queue/Thread_Timer_Queue_Test.h: + * examples/Timer_Queue/Thread_Timer_Queue_Test.cpp: + * examples/Timer_Queue/Reactor_Timer_Queue_Test.h: + * examples/Timer_Queue/Reactor_Timer_Queue_Test.cpp: + * examples/Timer_Queue/Driver.h: + * examples/Timer_Queue/Driver.cpp: + Added virtual destructors to classes that needed them. + +Wed Jan 7 16:28:16 1998 Douglas C. Schmidt + + * ace/Event_Handler_T.cpp: Reordered the initializers in the + ACE_Event_Handler_T constructor so G++ doesn't complain. Thanks + to Oleg Krivosheev for reporting this. + + * ace/Shared_Memory.h: Added a virtual destructor to the + ACE_Shared_Memory abstract base class so that EGCS won't + complain. Thanks to Oleg Krivosheev for + reporting this. + + * ace/Event_Handler_T.h: Had to include the *.cpp file into .h + when ACE_TEMPLATES_REQUIRE_SOURCE is defined. Thanks to Oleg + Krivosheev for reporting this. + +Wed Jan 07 14:31:34 1998 Douglas C. Schmidt + + * ACE version 4.4.16, released Wed Jan 07 14:31:34 1998. + +Wed Jan 7 13:38:28 1998 Douglas C. Schmidt + + * tests/test_config.h (set_output): Added an environment variable + to specify where to put the log directory: ACE_TEST_DIR. Thanks + to Keith Nicewarner for reporting this. + + * ace/Service_Repository.cpp (close): Removed a fragment of + redundant code. Thanks to Eric Newton and Alex + Chan for reporting this. + +Tue Jan 06 17:19:13 1998 Nanbor Wang + + * ace/Containers.{h,cpp} (ACE_Unbounded_Set[_Iterator]): Added + STL-styled iterator functions. Changed the internal + representation of ACE_Unbounded_Set within iterators from a + reference to a pointer. We need this to compare if two + iterators are refering to the same set or not. + +Tue Jan 6 14:11:54 1998 Carlos O'Ryan + + * tests/Reader_Writer_Test.cpp: + Reverted to revision 4.21 since the latest one (4.23) fails; + thanks to Irfan for this solution. + +Tue Jan 06 10:37:49 1998 David L. Levine + + * ace/OS.i (rw_trywrlock_upgrade): moved the #if 0 up a bit so + that it builds on Linux/non-glibc. For some reason, its + preprocessor was getting confused. + + * ace/OS.i (nanosleep): convert nanoseconds to microseconds + by dividing by 1000, not multiplying. Thanks to + Mitch Kuninsky for reporting this. + + * ace/config-mvs.h: added ACE_LACKS_LONGLONG_T because MVS doesn't + support it. Thanks to Chuck Gehr for + confirming that. + +Mon Jan 5 01:20:51 1998 Nanbor Wang + + * ace/Map_Manager.{h,cpp}: Made operator == and != and their + arguments const. + +Sun Jan 04 19:45:47 1998 David L. Levine + + * ace/IPC_SAP.cpp (enable,disable): moved return 0 at end + to inside the #endif, to avoid warning about unreachable + return statement on ghs/VxWorks. Thanks to Brian Mendel + for reporting this. + + * ace/OS.i (rw_trywrlock_upgrade): moved return 0 inside the + #if 0 block to avoid warning about unreachable return statement + on ghs/VxWorks. Thanks to Brian Mendel for reporting this. + + * ace/OS.i (rw_trywrlock_upgrade): added ACE_UNUSED_ARG (rw) + to temporary code. + + * ace/Basic_Types.{h,i},README: replaced ACE_HAS_LONGLONG_T with + ACE_LACKS_LONGLONG_T. ACE_HAS_LONGLONG_T was no longer + being used on many platforms with the scheme in Basic_Types.h. + From now on, we'll assume that a platform has long long + (unless ACE_LACKS_LONGLONG_T is #defined), which should help + porting to new platforms. + + * ace/config-aix-4.{1,2}.x.h,config-dgux-4.11-epc.h, + config-linux-{common,kcc}.h,config-lynxos.h,config-m88k.h, + config-osf1-*.h,config-sunos5.*.h,config-tandem.h: + removed ACE_HAS_LONGLONG_T. + + * ace/config-chorus.h,config-psosim-g++.h,config-vxworks*.h: + added ACE_LACKS_LONGLONG_T. + + * ace/Basic_Types.{h,i} (ACE_U_LongLong): fixed operator/, and + added operator% and operator--. + + * ace/High_Res_Timer.*: changed type of global_scale_factor_ from + u_long to ACE_UINT32. Removed some hacks now that ACE_U_LongLong + has operator%. + + * tests/Time_Value_Test.cpp: added tests of ACE_U_LongLong + operator/ and operator%. + + * ACE-INSTALL.html: added link to Cygus repo patches. Thanks + to Achint Sandhu for providing the URL. + + * ace/OS.{h,i}: added ACE_OS::putenv (). + + * tests/Env_Value_Test.cpp: use ACE_OS::putenv (). + + * tests/Env_Value_Test.cpp: expect (unsigned long) -10 for + TEST_VALUE_NEGATIVE converted to an unsigned long. + Thanks to Jack Erickson for + verifying that it _should_ return (unsigned long) -10. + + * ace/OS.i (strtoul): on Linux with glibc, use ::strtol instead of + ::strtoul and cast the result to an unsigned long. Its ::strtoul + always seems to return 0 for a negative number, at least on + RedHat 4.2/Linux 2.0.30/Alpha with glibc 2.0 (0.961212-5). + + * ace/config-linux-common.h: factored out + ACE_LACKS_SOME_POSIX_PROTOTYPES from glibc and non-glibc + sections to common section. + + * etc/purify.solaris2: added suppression of MIU from putenv. + +Sun Jan 04 17:19:31 1998 Douglas C. Schmidt + + * ACE version 4.4.15, released Sun Jan 04 17:19:31 1998. + +Sun Jan 4 10:11:53 1998 Douglas C. Schmidt + + * ace/OS.i (rw_trywrlock_upgrade): Temporarily comments out this + method since we need to finish implementing it correctly. + + * ace/OS.i (rw_trywrlock_upgrade): Fixed a minor bug where we + weren't releasing the lock correctly if there were competing + readers. + + * apps/Gateway/Gateway/Event_Channel.cpp (put): Uncommented the + code that sets the appropriate locking strategy for the Message + Blocks. + + * apps/Gateway/Gateway/Connection_Handler.h: Made the + remote_addr() and local_addr() accessor methods return + const-correct values. + + * build/SunOS5.5/ace/OS: Revised a bunch of #ifdefs so that we can + selectively enable the ACE rwlock emulation, even if we're + compiling with ACE_HAS_STHREADS in order to get the native + Solaris semaphores. + + * apps/Gateway/Peer/Makefile: Tweaked the Makefile rules to fix + some minor problems. Thanks to David Levine for showing the + way... + +Sun Jan 04 12:37:02 1998 David L. Levine + + * tests/Env_Value_Test.cpp: hacked to work with + ACE_HAS_NONSTATIC_OBJECT_MANAGER. With that, it uses ::putenv (), + which we should wrap in ACE_OS. Also, expanded TEST_THIS to + provide a more helpful log message than just the ASSERT output. + + * ace/config-vxworks5.x-g++.h: removed + ACE_HAS_TEMPLATE_SPECIALIZATION. + + * tests/Hash_Map_Manager_Test.cpp (main): added casts of i->ext_id_ + and i->int_id_ to (char *) to force g++/VxWorks to apply the + conversion from Dumb_String to char *. + +Sun Jan 04 09:51:59 1998 Nanbor Wang + + * apps/Gateway/Gateway/Options.{h,cpp}: Removed macros to export + this class out of DLL. They are no longer needed. + + * apps/Gateway/Gateway/Gateway.dsp: Updated source file listings. + +Sat Jan 3 22:25:15 1998 Douglas C. Schmidt + + * apps/Gateway/Gateway: Changed the name of the ACE_Event_Channel + class to Event_Channel since this class wasn't a part of the ACE + library. + + * apps/Gateway/Gateway/Event_Channel.h: Updated the inheritance + relationship for Event_Channel so that it inherits from + ACE_Event_Handler rather than ACE_Task. ACE_Task was + overkill... + + * apps/Gateway/Gateway: Removed the supplier_id from all the + files. We didn't use this anyway and it was just confusing. + Also, renamed Proxy_* to Connection_* to underscore the fact + that the Supplier_Handler and Consumer_Handler work atop + *connections*. The previous naming scheme was too abstract for + its own good. + +Sat Jan 03 14:16:40 1998 Nanbor Wang + + * ace/Map_Manager.cpp (ACE_Map[_Reverse]_Iterator): Fixed the + initial iterator position. + +Fri Jan 02 18:43:14 1998 Douglas C. Schmidt + + * ACE version 4.4.14, released Fri Jan 02 18:43:14 1998. + +Fri Jan 2 17:39:04 1998 Douglas C. Schmidt + + * apps/Gateway/Peer/Options.cpp (Options): Rearranged the order of + the parameters in the base/member initialization section to make + GCC happy. Thanks to David Levine for getting on me about this. + + * apps/Gateway/Gateway/Options.h: Changed DEFAULT_TIMEOUT + to MAX_TIMEOUT to be consistent. Thanks to David + Levine for reporting this. + +Fri Jan 2 17:25:05 1998 Nanbor Wang + + * tests/Map_Manager_Test.cpp: Added codes to test STL-styled + functions in ACE_Map_Manager. + + * apps/Gateway/Gateway/Proxy_Handler.cpp: + * apps/Gateway/Gateway/Proxy_Handler_Connector.cpp: + * apps/Gateway/Gateway/Event_Channel.cpp: + * apps/Gateway/Peer/Peer.cpp: + * ace/Local_Name_Space.cpp: + * examples/ASX/Event_Server/Event_Server/Peer_Router.cpp: + * examples/ASX/Event_Server/Transceiver/transceiver.cpp: + * examples/ASX/UPIPE_Event_Server/Supplier_Router.cpp: + * examples/ASX/UPIPE_Event_Server/Consumer_Router.cpp: + * examples/Connection/blocking/SPIPE-connector.cpp: + * examples/Connection/misc/test_upipe.cpp: + * examples/Connection/non_blocking/test_sock_connector.cpp: + * examples/Connection/non_blocking/test_spipe_connector.cpp: + * examples/Connection/non_blocking/test_tli_connector.cpp: + * examples/Connection/non_blocking/test_lsock_connector.cpp: + * netsvcs/clients/Tokens/manual/manual.cpp: + * netsvcs/lib/TS_Clerk_Handler.cpp: + * apps/Gateway/Gateway/Proxy_Handler_Connector.cpp: Added some + more explicit template instantiations. + + * ace/Map_Manager.{h,cpp}: Added back comparison operators for + ACE_Map_Iterator and ACE_Map_Reverse_Iterator. + + * ace/Token_Invariants.cpp: + * ace/Token_Collection.cpp: + * ace/Token_Manager.cpp: Added missing ACE_Map_Reverse_Iterator. + + * ace/Map_Manager.h: Remove unnecessary method declarations from + ACE_Map_Iterator adn ACE_Map_Reverse_Iterator. + + * examples/Connection/non_blocking/test_tli_connector.cpp: + * examples/Connection/non_blocking/test_sock_connector.cpp: + * examples/Connection/non_blocking/test_lsock_connector.cpp: + * examples/Connection/non_blocking/test_spipe_connector.cpp: + * examples/Connection/misc/test_upipe.cpp: + * examples/Connection/blocking/SPIPE-connector.cpp: + * examples/ASX/UPIPE_Event_Server/Supplier_Router.cpp: + * examples/ASX/UPIPE_Event_Server/Consumer_Router.cpp: + * examples/ASX/Event_Server/Transceiver/transceiver.cpp: + * examples/ASX/Event_Server/Event_Server/Peer_Router.cpp: + * apps/JAWS/clients/Caching/http_handler.cpp: + * apps/JAWS/clients/Blobby/Blob.cpp: + * apps/Gateway/Peer/Peer.cpp: + * apps/Gateway/Gateway/Event_Channel.cpp: + * apps/Gateway/Gateway/Proxy_Handler.cpp: + * apps/Gateway/Gateway/Proxy_Handler_Connector.cpp: + * tests/Reactor_Performance_Test.cpp: + * tests/Priority_Reactor_Test.cpp: + * tests/Map_Manager_Test.cpp: + * tests/Conn_Test.cpp: + * netsvcs/lib/TS_Clerk_Handler.cpp: + * ace/Token_Manager.cpp: + * ace/Token_Invariants.cpp: + * ace/Token_Collection.cpp: + * ace/Local_Name_Space.cpp: Added explicit template instantiation + for ACE_Map_Iterator_Base. + + * ace/Map_Manager.{h,cpp}: Added a new class ACE_Map_Iterator_Base + to abstract out most common functionalities from + ACE_Map_Iterator and ACE_Map_Reverse_Iterator. Added some + missing functions to both iterator classes. + +Fri Jan 2 12:39:45 1998 Carlos O'Ryan + + * ace/Map_Manager.h: + Another declaration removed from ACE_Map_Reverse_Iterator, + operator* is defined in the base class. + + * tests/Conn_Test.cpp: + * tests/Priority_Reactor_Test.cpp: + * tests/Reactor_Performance_Test.cpp: + The instantiation of ACE_Map_Manager *requires* instantiating + ACE_Map_Reverse_Iterator. + + * ace/OS.i: + Cannot use ACE_ASSERT in OS.i, at least it make SGI compiler + unhappy. + + * ace/Map_Manager.cpp: + Several methods for ACE_Map_Manager were not given their fully + qualified name. + + * ace/OS.i: + The error code should be stored in errno, not in "error". + +Fri Jan 2 17:02:36 1998 Chris Cleeland + + * tests/run_tests.sh: Added Env_Value_Test to the list of tests to + run. + + * tests/Env_Value_Test.cpp (main): Fixed wrong test for negative + values with unsigned longs. Thanks to David Levine and + Linux/Alpha for finding this. + + * tests/Env_Value_Test.cpp (main): Changed the definition of the + TEST_THIS macro to be all on one line. While ugly, this helps in + locating the line when ACE_ASSERT fails, since allowing the macro + to have multiple lines skews the line # reported by ACE_ASSERT. + + * ace/Env_Value_T.*: Fixed lots of little bugs that got past both + g++ and Solaris compilers, but were caught by the ever-skeptical + SGI compiler. This included providing a definition for the missing + 'varname(void)' method. + +Fri Jan 02 10:12:28 1998 Steve Huston + + * ace/config-hpux-10.x-g++.h: Added #define HPUX_10 to catch OS + version-dependent code correctly. + +Fri Jan 02 07:06:44 1998 David L. Levine + + * apps/Gateway/Gateway/Makefile: restored the .obj/*.o targets. + They don't affect the build of the shared lib and are used if + the unshared lib is built. + + * apps/Gateway/Gateway/Options.h: added missing , in enum definition. + + * apps/Gateway/Gateway/Options.cpp (Options ctor): reordered + initializers to match declaration order. + + * apps/Gateway/Gateway/Config_Files.cpp (read_entry): fixed syntax + error, missing "if" after "else". Added #include of Options.h. + + * ace/OS.i (rw_trywrlock_upgrade): added ACE_UNUSED_ARG (rw) with + STHREADS. + + * ace/Synch.i (tryacquire_write_upgrade): only define if + ACE_HAS_THREADS. + + * tests/test_config.h: hacked ACE_INIT_LOG to work on VxWorks. + VxWorks gets upset if its asked to unlink a nonexistant file. + + * ace/Basic_Types.*: if using ACE_U_LongLong, #define + ACE_USES_ACE_U_LONGLONG and use that in the .i and .cpp files + instead of repeating all of the complex preprocessor tests + in Basic_Types.h. Thanks to Carlos for suggesting this. + + * ace/Env_Value_T.cpp: added protection against multiple inclusion. + + * tests/Env_Value_Test.cpp: added ACE_Env_Value instantiation. + +Fri Jan 02 00:47:33 1998 Douglas C. Schmidt + + * ACE version 4.4.13, released Fri Jan 02 00:47:33 1998. + +Fri Jan 2 00:17:04 1998 Douglas C. Schmidt + + * Reader_Writer_Test.cpp: Changed from an ACE_RW_Mutex to an + ACE_RW_Thread_Mutex so that we can use the new + tryacquire_write_upgrade() method. + + * ace/Env_Value_T.h: Reformatted the file a bit to conform to + ACE coding conventions. + +Thu Jan 1 12:04:29 1998 Douglas C. Schmidt + + * apps/Gateway/Peer/Options.cpp (parse_args): Changed the option + to set the passive acceptor port from -p to -a. This is now + consistent with the option for active connector port number, + which is -c. + + * apps/Gateway/Gateway/Gateway.cpp (fini): Added a call to + ACE::remove_stdin_handler(), which removes the handler for + ACE_STDIN so the gatewayd will shutdown cleanly. + + * ace/ACE: Added a new method, remove_stdin_handler(), which is + the inverse of the register_stdin_handler() method. However, + I'm not sure how to make this work on NT! + + * examples/Reactor/Misc/notification.cpp: Removed some + CHORUS-specific, which should be a no-op with our new signal() + and sigaction() scheme. + + * ace/OS.i: Enhanced the signal() and sigaction() wrappers so that + they simply ignore signums of 0. This means that we don't need + to special case all this stuff throughout ACE anymore. + + * ace/OS.h: Changed all the #defines for various SIG* so that they + are all 0. This way, we can ensure that the signal() functions + in ACE_OS can correctly ignore these signals. This should clean + up a ton of platform-dependent code throughout ACE. + + * apps/Gateway/Gateway/File_Parser.cpp (getint): Added a new + special-case check for the '*' character, which indicates "use + the default value for this field." + + * apps/Gateway/Gateway/Options: Added a new option to provide a + default max retry timeout. + + * tests/Reader_Writer_Test.cpp: Enhanced the test so that it + exercises the new "upgrade" feature of RW_Thread_Mutexes. + + * ace/{OS,Synch}: Added new methods, + ACE_OS::rw_trywrlock_upgrade() and + ACE_RW_Thread_Mutex::tryacquire_write_upgrade() that + conditionally upgrade a read lock to a write lock. This only + works if there are no other readers present, in which case the + method returns 0. Otherwise, the method returns -1 and sets + errno to EBUSY. Note that the caller of this method *must* + already possess this lock as a read lock. + + * apps/Gateway/{Gateway,Peer}/Makefile: Removed the $(VLIB) macro + so that we don't try to build the lib*.a files by default. + Thanks to David Levine for explaining this. + + * apps/Gateway/Gateway: Added new Options.{h,cpp} files and + rearranged the program to centralize all options processing in + an Options Singleton. + + * apps/Gateway/Peer/Options.cpp (parse_args): Changed the + connector and acceptor options to use a more generalizable + format. Now we can set the Consumer and Supplier port numbers + independently. + + * apps/Gateway/Gateway/Event.h: This is currently where the macros + from the following bullets have been moved, so they can be + shared by the Peer and Gateway components. + + * ace/OS.h: Moved the ACE_DEFAULT_{GATEWAY,PEER}_SERVER_PORT + macros into the Gateway application, where they belong. + + * apps/Gateway/Peer/Options.cpp (parse_args): Changed the option + to set the passive acceptor port from -p to -a. This is now + consistent with the option for active connector port number, + which is -c. + + * apps/Gateway/Gateway/Gateway.cpp (fini): Added a call to + ACE::remove_stdin_handler(), which removes the handler for + ACE_STDIN so the gatewayd will shutdown cleanly. + + * ace/ACE: Added a new method, remove_stdin_handler(), which is + the inverse of the register_stdin_handler() method. However, + I'm not sure how to make this work on NT! + + * examples/Reactor/Misc/notification.cpp: Removed some CHORUS-specific + code, which should be a no-op with our new signal() and sigaction() + scheme. + + * ace/OS.i: Enhanced the signal() and sigaction() wrappers so that + they simply ignore signums of 0. This means that we don't need + to special case all this stuff throughout ACE anymore. + + * ace/OS.h: Changed all the #defines for various SIG* so that they + are all 0. This way, we can ensure that the signal() functions + in ACE_OS can correctly ignore these signals. This should clean + up a ton of platform-dependent code throughout ACE. + + * apps/Gateway/Gateway/Gateway.cpp (init): Revised the code a bit + to factor out platform-dependent signal handling stuff in the + right place. + + * apps/Gateway/Gateway/gatewayd.cpp: Cleaned up the gatewayd main + program so that it reuses more ACE components and so that it is + more portable. + +Thu Jan 01 18:24:56 1998 Nanbor Wang + + * apps/Gateway/Gateway/Gateway.dsp: Added new file Options.cpp. + + * apps/Gateway/Gateway/Options.cpp (ACE_BUILD_SVC_DLL): Added + #define ACE_BUILD_SVC_DLL. + + * netsvcs/lib/Base_Optimizer.i: Removed this file. + + * netsvcs/lib/Base_Optimizer.h: Added codes to include in the + source file conditionally if needed. + + * netsvcs/lib/Base_Optimizer.cpp: Moved template implementation + from .i file. Removed ACE_INLINE keyword. + + * netsvcs/lib/Server_Logging_Handler.cpp: Added explicit template + instantiation macros. + +Thu Jan 01 17:13:06 1998 David L. Levine + + * apps/Gateway/Peer/Peer.cpp (Peer_Connector::open): added + return 0 statement at end. + + * apps/Gateway/Gateway/Options.cpp (Options ctor): reordered + initializers to match declaration order. + + * apps/Gateway/Gateway/Makefile: removed LOBJ and SHOBJ macros + because they're not needed. And, restored BUILD so that static + lib will be built if requested. + + * include/makeinclude/rules.lib.GNU: added OBJEXT macro, defaulted + to "o", and use it in VOBJS definition. + + * include/makeinclude/wrapper_macros.GNU: if building shared libs + only, set OBJEXT to "so" and VDIR to .shobj/, so that only shared + objects will be built. + + * apps/Gateway/Peer/Peer.cpp: added template instantiations. + + * netsvcs/lib/Base_Optimizer.*,Makefile: moved inline functions + to .i file and changed inline to ACE_INLINE. + + * netsvcs/lib/Server_Logging_Handler_T.{h,cpp}: don't use + Base_Optimizer with g++. Some versions of g++ 2.7.x have + trouble with its inline template member functions, especially + if __ACE_INLINE__ is disabled. + +Thu Jan 01 07:56:17 1998 Douglas C. Schmidt + + * ACE version 4.4.12, released Thu Jan 01 07:56:17 1998. + +Thu Jan 01 00:28:46 1998 Nanbor Wang + + * apps/Gateway/Peer/Peer.dsp: Added a new file "Options.cpp" into + this project. + + * tests/Env_Value_Test.cpp (main): Changed variable name: 'environ' + to 'envp'. Real OSes don't understand what the word means + and Access Violations will occur. + + * tests/run_tests.bat: Added Env_Value_Test. + + * tests/version_tests/version_tests.dsw: + * tests/tests.dsw: Added Env_Value_Test.dsp. + + * tests/version_tests/Env_Value_Test.dsp: + * tests/Env_Value_Test.dsp: New file. + +Thu Jan 1 00:00:00 1998 Douglas C. Schmidt + + * Happy New Year! Here's a thought for the new year, courtesy of + Sumedh: + + Nothing in the world is permanent, + and we're foolish when we ask anything to last; + but surely we're still more foolish + not to take delight in it while we have it. + + - W.Somerset Maugham (Razor's Edge) + +Wed Dec 31 19:10:59 1997 Douglas C. Schmidt + + * apps/Gateway/Peer/Peer: Added the hooks for making the Peer a + Connector, as well as an Acceptor. Now it's time to have some + fun. + + * apps/Gateway/Peer/peerd.cpp: Cleaned up the peerd main program + so that it reuses more ACE components and so that it is more + portable. + + * netsvcs/servers/main.cpp (main): Revised the code a bit to + factor out platform-dependent signal handling stuff in the right + place. + + * apps/Gateway/Peer: Factored out some common initialization code + to create an Options Singleton. Yowza! + + * apps/Gateway/README: Improved the documentation so that its + easier to tell what's supposed to happen and how to configure + the system. + + * apps/Gateway/Peer/Peer: Moved the Peer_Acceptor into the Peer.h + file and updated the documentation to clarify what's going on + better. + + * examples/Reactor/Dgram/: Enhanced the examples to make sure they + close() the dgram endpoint when the object is removed from the + Reactor. Thanks to Evgeny Beskrovny + for reporting this. + + * ace/Obstack.cpp: Fixed a stupid bug in the ACE_Obstack + constructor. Thanks to David Levine for reporting this. + + * ace/Local_Name_Space_T.h: Updated the documentation for class + ACE_Name_Space_Map to make it more clear. + +Wed Dec 31 21:21:50 1997 David L. Levine + + * examples/Reactor/Dgram/{CO,Dgram.cpp} (handle_close): added + ACE_UNUSED_ARG (handle). + + * tests/Env_Value_Test.cpp (main): removed unused arg argv and + local envargv. undef'ed ACE_HAS_NONSTATIC_OBJECT_MANAGER because + it can't deal with the three arguments to main (). + +Wed Dec 31 16:25:16 1997 Chris Cleeland + + * ace/Env_Value_T.*: Added a new template (ACE_Env_Value) which is + a typesafe encapsulation of environment variables with the + ability to provide a value to be used as a default if the + variable isn't set. An example of its use can be seen in the + corresponding test, tests/Env_Value_Test.cpp. Thanks to Carlos + O'Ryan for giving me the seed that started this. + + * tests/Env_Value_Test.cpp: Added test for the new template added + above. + + * tests/Makefile: Added new Env_Value_Test test to the Makefile. + + * ace/OS.{h,i} (strtod): Added new function for converting strings + to doubles. + +Tue Dec 30 22:07:44 1997 David L. Levine + + * ace/High_Res_Timer.cpp (elapsed_time): added a cast in + calculation of useconds to avoid MSVC++ warning about narrowing. + Thanks to Nanbor for reporting this. + + * ace/OS.i (gethrtime): commented out high-res tick counter on Linux + because it doesn't seem to work properly. Use ::gettimeofday () + instead. + + * tests/Basic_Types_Test.cpp (main): replaced #ifdef VXWORKS && ghs + with !ifdef ACE_HAS_WCHAR_TYPEDEFS_CHAR. + + * ace/Map_Manager.cpp (operator*): fixed typo in "ACE_Map_Entry". + + * ace/OS.h: added ACE_NSIG. In addition, I removed this: + + // Why is this defined? It must be a std C library symbol. + #if !defined (NSIG) + #define NSIG 0 + #endif /* NSIG */ + + We #define NSIG elsewhere on platforms (VxWorks, MVS) that need it. + #defining it to be 0 isn't good; it's better to catch the lack of + NSIG at compile time than at run time. + + * ace/{Log_Msg.cpp,OS.i,Select_Reactor.cpp,Signal.*,WFMO_Reactor.i}, + tests/Sigset_Ops_Test.cpp: replace NSIG with ACE_NSIG. + + * ace/Basic_Types.{h,i}: only use u_longlong_t on sun. Added + operator++ to ACE_U_LongLong, and tweaked calculation in operator/. + + * tests/Time_Value_Test.cpp (test_ace_u_longlong_): added test of + operator+, and one simple test of operator/. + + * ace/Filecache.h: removed extra , in enum ACE_Filecache_Flag definition. + +Tue Dec 30 20:32:03 1997 Nanbor Wang + + * ace/Map_Manager.{h,cpp}: Added STL-styled iterator function. + Changed the references to ACE_Map_Manager within interator + classes to pointers so we can check errors. + +Tue Dec 30 14:56:18 1997 Douglas C. Schmidt + + * ace/Obstack: Enhanced ACE_Obstack so that it can be given a + pointer to an allocator strategy. This allows users to take + complete control of where the memory comes from for the Obstack. + + * ace/Obstack: Changed the default value of "size" so that it is + (4096 - sizeof (ACE_Obstack)). + + * ace/Obstack: Added a new ACE_Obchunk constructor to simplify + some of the code. + +Mon Dec 29 20:21:32 1997 Steve Huston + + * include/makeinclude/rules.lib.GNU: Adjusted dependencies on building + a shared library to be on the object modules it will link in, not + necessarily $(VSJOBJ). + +Mon Dec 29 18:53:35 1997 James C Hu + + * ace/Filecache.h: Added an enum type, ACE_Filecache_Flag, which + gets passed into the ACE_Filecache_Handle constuctor to help + determine whether or not to use memory mapping (on Windows NT, + we sometimes do not want to memory map). + + * ace/Filecache.cpp: Required modifications to accomodate the + ACE_Filecache_Flag parameter. + +Mon Dec 29 15:37:24 1997 Nanbor Wang + + * ace/OS.i (event_timedwait): Added codes to guard against + negative wait time since we are passing an absolute time value + here, we may way past the target time when it gets called. + Thanks to Norbert Rapp for pointing + this. + +Mon Dec 29 13:57:43 1997 Carlos O'Ryan + + * ace/XtReactor.cpp: + Fixed syntax error, apparently some kind of typo. + + * ace/OS.h: + The ACE_*_cast() macros had (IMHO) surprizing priority, added + some parenthesis to make them behave as the new cast operators + are supposed to do. + +Mon Dec 29 08:59:28 1997 David L. Levine + + * ace/Basic_Types.h: Linux w/o glibc 2.0 doesn't have u_longlong_t, + so use "unsigned long long" for it. + + * ace/Task.cpp (activate): added ACE_UNUSED_ARG (thread_handles) on + non-threaded platforms. + + * ace/Thread_Manager.cpp (wait): added ACE_UNUSED_ARG + (abandon_detached_threads) on non-threaded platforms. + + * performance-tests/Misc/childbirth_time.cpp (prof_ace_os_thread): + added ACE_UNUSED_ARG (iteration) on non-threaded platforms. + + * performance-tests/Misc/preempt.cpp (main): added ACE_UNUSED_ARG + for argc and argv on non-threaded platforms. + + * include/makeinclude/platform_linux.GNU: enabled compiler warnings + by replacing -w with -Wall -Wpointer-arith in CFLAGS. + + * ace/ACE.cpp (count_interface,get_handle,get_ip_interfaces): use + same code for LynxOS as for __unix. + + * ace/OS.h: on LynxOS, redefine NSIG to be one greater than the + highest-numbered signal. LynxOS' signal.h #defines it to be + equal to the highest-numbered signal, 64. + +Mon Dec 29 08:35:17 1997 Steve Huston + + * include/makeinclude/platform_hpux_aCC.GNU: Removed the PRELIB + and PRELIB_USES_OBJ_ONLY stuff; merged in macros for building + on HP-UX 11.00. + * include/makeinclude/platform_hpux11_aCC.GNU - Removed this file. + The 10.x and 11.x builds are now both controlled by + platform_hpux_aCC.GNU. + +Sun Dec 28 10:50:54 1997 Douglas C. Schmidt + + * ACE version 4.4.11, released Sun Dec 28 10:50:54 1997. + +Sat Dec 27 18:03:52 1997 Nanbor Wang + + * ace/Log_Msg.cpp (dump): Sould test if we have a valid thr_desc + before dumping the information of it. Thanks to Luca Priorelli + for pointing this out. + +Sat Dec 27 16:13:59 1997 David L. Levine + + * ace/{OS.i,config-linux-common.h,README} (getrusage,{get,set}rlimit): + added ACE_HAS_RUSAGE_WHO_ENUM and ACE_HAS_RLIMIT_RESOURCE_ENUM + support. glibc 2.0 for Linux uses enums for the first arguments + to ::getrusage and ::{get,set}rlimit. + +Fri Dec 26 18:04:06 1997 + + * ace/Containers.h: Added iterator traits for following classes. + ACE_Unbounded_Set + ACE_Unbounded_Queue + ACE_Unbounded_Stack + ACE_Double_Linked_List + ACE_Fixed_Set + ACE_Bounded_Set + Thanks to for recommending this. + +Fri Dec 26 12:03:05 1997 David L. Levine + + * ace/config-osf1-4.0.h: added support for DCE threads, and merged in + config-osf1-4.0-g++.h. Thanks to Frederic Andres + for the DCE threads support #defines. + + * ace/config-osf1-4.0-g++.h: removed. All Digital Unix 4.0 configs + are now supported by config-osf1-4.0.h. + + * ace/platform_osf1_4.0.GNU: added comment on how to use DCE threads + instead of POSIX threads. + + * ace/OS.i (thr_{get,set}prio): don't apply the + !defined(ACE_LACKS_SETSCHED) test if ACE_HAS_DCETHREADS. + + * ace/OS.cpp (thr_create): added || ACE_HAS_DCETHREADS to + #ifndef ACE_LACKS_SETSCHED, so that priority is set with DCETHREADS. + + * ace/OS.cpp (sched_params): moved paren so that DCETHREADS block + will be executed even if ACE_LACKS_SETSCHED. + + * ace/Sched_Params.cpp ({next,previous)_priority): added + ACE_HAS_DCETHREADS check before !defined(ACE_LACKS_SETSCHED). + + * ace/OS.i (cond_timedwait): wrapped first arg to ACE_OSCALL in + parens because it confused cxx. + + * examples/System_V_IPC/SV_Message_Queues/{,T}MQ_Server.cpp: renamed + variable msgque because it conflicted with a symbol in the DEC cxx + w/DCE threads headers. + + * ACE-INSTALL.html: expanded discussion of gcc config.status file. + Thanks to Hans Rohnert for figuring + out the role of the config.status file. + +Fri Dec 26 06:44:25 1997 + + * ace/OS.h (ACE_OS::ace_flock_t): Added a new field "lockname_" to + remember the lock filename. + + * ace/OS.i (flock_init,flock_destroy): We need to remember the + name of the lock file when initializing the lock and unlink the + file when destroying the lock. + +Thu Dec 25 18:08:42 1997 Douglas C. Schmidt + + * ace/XtReactor.cpp: Removed g++ warning about initialization + order, enabled read/write masks for + ACE_Event_Handler::CONNECT_MASK; fixed typo that checks a write + mask, but sets a read mask; removed unused variable "zero." + Thanks to Eric Newton for these fixes. + +Thu Dec 25 17:17:16 1997 + + * ace/config-win32.h: * ace/config-win32-common.h: Added macro + definitions not to use C++-styled castings on Win32 by default + so that we don't depend on the RTTI support. + +Thu Dec 25 16:18:03 1997 + + * ace/SString.h (ACE_CString and ACE_WString): Added c_str() to + make it similar to STL's string class. + +Wed Dec 24 19:59:15 1997 David L. Levine + + * tests/IOStream_Test.cpp (client): changed stream error message + from "timeout" to "timed out", so that run_tests.check won't + complain about it. + +Wed Dec 24 18:37:49 1997 + + * ace/Synch.i (get_thread_id,get_nesting_level): Added ACE_INLINE. + +Wed Dec 24 18:31:31 1997 Douglas C. Schmidt + + * ACE version 4.4.10, released Wed Dec 24 18:31:31 1997. + +Wed Dec 24 14:27:33 1997 + + * ace/Synch.{h,i,cpp} (ACE_Recursive_Thread_Mutex): Changed + ACE_Recursive_Thread_Mutex to inherit from ACE_Thread_Mutex on + Win32 because ACE_Thread_Mutex is already recusive on Win32. + +Wed Dec 24 08:14:32 1997 David L. Levine + + * ace/Log_Msg.cpp (instance): without threads, dynamically create + the ACE_Log_Msg instance instead of using a static. Now, without + threads, the ACE library has no statics that require destruction + (at least on Solaris/g++ and Linux). And, all of the ACE tests + Purify cleanly. + + * ace/OS.cpp (ACE_Thread_Adapter::invoke): wrapped + rethrow_w32_structural_exception () call with #ifdef ACE_WIN32. + It was eliminated by the ACE_SEH_EXCEPT macro on non-WIN32 + platforms, but some compilers (cxx) warned about the + unreachable code. This call is only supported on WIN32 anyways. + + * ace/OS.h: LynxOS has ACE_HAS_PTHREADS_1003_DOT_1C, but not + ACE_HAS_PTHREAD_SIGMASK. + + * tests/Time_Value_Test.cpp: only test ACE_U_LongLong on Solaris, + and other platforms with STHREADS. + +Wed Dec 24 04:25:49 1997 + + * ace/OS.i (sema_init): Added checking for initial semaphore + counts and set the semaphore to non-signaled state if the + initial count is zero. Changed the internal variable lock from + a mutex to a thread_mutex (Critical Section.) + +Tue Dec 23 21:06:14 1997 David L. Levine + + * ace/TLI_Stream.cpp (get_remote_addr): added ACE_UNUSED_ARG + for the arg if ! ACE_HAS_SVR4_TLI. + + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-poll.cpp (main): declare + local "i" outside the for loop because it is used after the loop. + +Tue Dec 23 19:34:10 1997 + + * ace/OS.i: Added comments for semaphore simulation. + +Tue Dec 23 19:33:59 1997 Douglas C. Schmidt + + * ACE version 4.4.9, released Tue Dec 23 19:33:59 1997. + +Tue Dec 23 19:05:32 1997 Douglas C. Schmidt + + * tests/IOStream_Test.cpp (server): Changed sleep(30) to + sleep(5). This seems more reasonable. Thanks to + James Johnson for this suggestion. + +Tue Dec 23 16:43:14 1997 Steve Huston + + * ace/README: Added descriptions for ACE_HAS_PTHREADS_1003_DOT_1C (this + was in use previously but not documented), ACE_HAS_XTI (new; XTI is + the POSIX superset of TLI - this implies ACE_HAS_TLI), + ACE_NEW_THROWS_EXCEPTIONS (new; the compiler throws bad_alloc if + a 'new' memory allocation fails). + + * ace/Hash_Map_Manager.cpp - Workaround for an aC++ bug in the HP-UX 11 + version of the compiler. + + * ace/INET_Addr.cpp: Note the failing host name in the error message + from ACE_INET_Addr::ACE_INET_Addr(u_short, const char []). + + * ace/OS.h: Changes made while porting to HP-UX 11: + - If ACE_HAS_PTHREADS_1003_DOT_1C (POSIX.1C), it implies (by + way of POSIX.1C) that these also be set: + ACE_HAS_PTHREAD_SIGMASK + ACE_HAS_2_PARAM_ASCTIME_R_AND_CTIME_R + This is intended to make the process of configuring a new + new platform easier. + - If the new config macro ACE_NEW_THROWS_EXCEPTIONS is set, include + the file . The "proper" thing to do is to include + ; however, at least on HP-UX 11, this will cause + other things to get brought in, like , which will + screw up auto_ptr. The day that all this standard library and + STL stuff is finally straight, there will be dancing in the + streets... + - Support including the proper header file for XTI when it's + supposed to use rather than (POSIX specifies + XTI, a superset of TLI, to have ) + - If ACE_NEW_THROWS_EXCEPTIONS is set, the ACE_NEW and + ACE_NEW_RETURN macros handle the exception. + + * ace/OS.i: Fixed check for failure in ACE_OS::sema_init. + + * ace/config-hpux11.h: + * ace/config-hpux11-hpc++.h: New configs for HP-UX 11.00 + + * include/makeinclude/platform_hpux11_aCC.GNU: Platform macros for + HP-UX 11. It is set up for 32-bit build with comments for how to + do a 64-bit build. + + * examples/Makefile: Added Naming to the directory list to build. + + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-poll.cpp: Changed test from + ACE_HAS_SVR4_POLL to ACE_HAS_POLL. + + * examples/IPC_SAP/SOCK_SAP/C-inclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-unclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-unserver.cpp: + * examples/IPC_SAP/SOCK_SAP/FD-unserver.cpp: Fixed a char * being + initialized by a string literal. + + * examples/Map_Manager/test_hash_map_manager.cpp: Added #include + "ace/SString.h" + + * examples/Mem_Map/IO-tests/test_io.cpp: Fixed a char * being + initialized by a string literal. Fixed diagnostic statements. + + * examples/Naming/test_multiple_contexts.cpp: + * examples/Naming/test_non_existent.cpp: + * examples/Naming/test_writers.cpp: Added Id line for CVS. + + * tests/Time_Value_Test.cpp: Added #include "test_config.h" + +Tue Dec 23 16:12:28 1997 + + * ace/OS.i: Must use ACE_OS::sema_wait instead of waiting on the + singling event when using simulated semaphores. + +Tue Dec 23 08:32:00 1997 Chris Gill + + * include/makeinclude/platform_sunos5_g++.GNU + Removed trailing spaces from CC and CXX macros + (the trailing space behind CXX was giving the TAO_IDL + make fits) + +Tue Dec 23 07:26:28 1997 David L. Levine + + * ace/TLI.cpp (get_local_addr): return -1, instead of 0, and + set errno (with ACE_NOTSUP_RETURN) if ! ACE_HAS_SVR4_TLI. + ({set,get}_option): added ACE_UNUSED_ARfor all + arguments if ! ACE_HAS_SVR4_TLI. + + * ace/TLI_Stream.cpp (get_remote_addr): return -1, instead of 0, + and set errno (with ACE_NOTSUP_RETURN) if ! ACE_HAS_SVR4_TLI. + Declare and set local "name" only if ACE_HAS_SVR4_TLI. + + * ace/TLI_Acceptor.cpp (handle_asynch_event): initialize local + "event" instead of defining it in the switch condition, to + avoid compiler warning about not using it. + + * examples/IPC_SAP/TLI_SAP/db-server.cpp (lookup_name): removed + unused local variable "len". + + * include/makeinclude/platform_osf1_4.0.GNU: removed some warning + suppressions that are no longer needed. + + * ace/Log_Msg.cpp (~ACE_Log_Msg): clean up the message queue and + allocated strings on non-threaded platforms. + + * tests/test_config.h (ACE_APPEND_LOG): added a close () of the + ace_file_stream before opening it. Forked children inherit the + opened file stream, and fail on their attempt to open it if it + is not explicitly closed. + +Mon Dec 22 22:42:57 1997 Douglas C. Schmidt + + * ace/OS: Added a few minor changes to Nanbor's Semaphore + emulation for WinCE. + +Mon Dec 22 11:39:19 1997 + + * OS.i (event_timedwait): Added code to handle timeouts. Thanks + to Luca Priorelli for reporting this. + +Mon Dec 22 07:03:13 1997 David L. Levine + + * ace/IOStream_Test.cpp (spawn): changed printout from + "Process_Mutex_Test-children" to "IOStream_Test-children". + +Mon Dec 22 03:08:22 1997 + + * ace/OS.i: Modified ACE_OS::cond_* for WinCE. + + * ace/config-win32-common.h: Prevent ACE from using NT specific + API on Win CE. + +Sun Dec 21 16:19:40 1997 Nanbor Wang + + * ace/OS.{h,i} (ACE_OS::sema_*): Added semaphore simulation code + for WinCE. This code is currently protected + ACE_USES_WINCE_SEMA_SIMULATION for debugging the code on NT. + This flag should soon be obsolete and changed to ACE_HAS_WINCE. + + Moved ACE_event_t macro definition for Win32 before ACE_sema_t + definition for NT. I need to use it in semaphore simulation. + + * ace/OS.h (class ACE_Cleanup_Info::operator ==, !=): Removed + keyword struct. ACE_Cleanup_Info is a class now. + + * ace/Containers.h (class ACE_Double_Linked_List): Removed + unused function declarations. + + * ace/Containers.h (class ACE_DNode): Removed ACE_DNode class. + +Sun Dec 21 18:47:09 1997 Douglas C. Schmidt + + * ACE version 4.4.8, released Sun Dec 21 18:47:09 1997. + +Sun Dec 21 12:39:38 1997 Douglas C. Schmidt + + * ace/OS.h (ACE_OS): Made the netdb_{acquire()/release()} methods + public to help ACE users stuck on weird OS platforms. Thanks to + Arturo Montes for this suggestion. + + * ace: Changed all ACE class documentation so that it puts the + =TITLE and =DESCRIPTION comments *after* the opening '{' rather + than before. I did this since (1) it makes emacs C++ mode + happier and (2) it makes Rational Rose reverse-engineering tool + happier too. Thanks to Thomas Jordan + for suggesting this. + + * ace/LOCK_SOCK_Acceptor.h: The accept() method of class + ACE_LOCK_SOCK_Acceptor is no longer a virtual. I don't know why + this was made virtual in the first place, but it was a mistake. + +Sun Dec 21 15:24:42 1997 Nanbor Wang + + * ace/OS.h (class ACE_Cleanup_Info::operator ==, !=): Removed + keyword struct. ACE_Cleanup_Info is a class now. + + * ace/Containers.h (class ACE_Double_Linked_List): Removed + unused function declarations. + + * ace/Containers.h (class ACE_DNode): Removed ACE_DNode class. + +Sat Dec 20 11:05:45 1997 Douglas C. Schmidt + + * tests/test_config.h (ACE_INIT_LOG): Added (%P|%t) to an + ACE_DEBUG statement to make it consistent. + + * tests/IOStream_Test.cpp (spawn): Revised the test so that it + prints data correctly to the child processes. + + * examples/Shared_Malloc/test_multiple_mallocs.cpp (main): Moved + the final print statement inside one of the if blocks so that it + appears only every second invocation to remind people to rerun + the program to remove the leaks. Thanks to Tom Arbuckle + for suggesting this. + + * ace/Malloc*: Changed ACE_MALLOC_STATS to ACE_HAS_MALLOC_STATS + since this is more consistent with ACE conventions. Also, + added ACE_HAS_MALLOC_STATS to the ace/README file. Thanks + to Tom Arbuckle for + suggesting this. + + * ace/Memory_Pool.cpp (ACE_Shared_Memory_Pool): Fixed the logic + for naming the backing store if the sscanf() call fails. Thanks + to Tom Arbuckle for + suggesting this. + +Sat Dec 20 15:39:00 1997 Nanbor Wang + + * tests/IOStream_Test.cpp (spawn): Changed ACE_LACKS_EXEC to + ACE_LACKS_FORK. + +Sat Dec 20 09:42:06 1997 David L. Levine + + * ace/OS.h: changed ACE_SEH_FINALLY to be if (1) on Unix, not + just pSOS. + +Fri Dec 19 23:20:42 1997 Nanbor Wang + + * tests/IOStream_Test.cpp (client): Removed an extra read. + + * ace/OS.h: ACE_SEH_FINALLY should always be executed on UNIX + platforms. + +Fri Dec 19 18:49:26 1997 Douglas C. Schmidt + + * ace/IOStream_T.i: Enhanced ACE_IOStream and its companions as + follows: + + - ACE_Streambuf_T<> now distinguishes recv() timeout failure from + a "real" stream failure + + - ACE_IOStream::eof() honors the streambuf's recv_timeout() value + and returns FALSE if the eof() check fails on timeout. + + - IOStream_Test.cpp tests the streambuf timeout via the stream eof() + and retrys if possible. + + Thanks to James Johnson for these fixes. + + * ace/Log_Record.i: Removed a no-op assignment to Time_Value + in the encode() method. Thanks to Patrick J. McNerthney + for reporting this. + + * ace/Log_Record.i: The time stamp put into the ACE_Log_Record + gets all messed up when the ACE_Log_Record is transmitted to the + Server_Logging_Handler and the client is run on a little-endian + architecture. This is because the ACE_Log_Record::encode method + does: + + this->time_stamp_ = ACE_Time_Value + + htonl (this->time_stamp_.sec ()), + htonl (this->time_stamp_.usec ())); + + When the ACE_Time_Value is passed in the resulting values from + "htonl", it calls "normalize" which totally messes with the + values passed. Thanks to Patrick J. McNerthney + for reporting this. + + * ace/OS.i: Fixed ctime_r() so that it doesn't crash if a NULL is + returned from ctime_r(). Thanks to Patrick J. McNerthney + for reporting this. + +Fri Dec 19 09:44:28 1997 David L. Levine + + * ace/OS.{h,i}: fixed sigwait for DEC cxx, yet again for cxx + V6.0-010. cxx #defines sigwait, and was getting confused + with ACE_OS::sigwait. I replaced Thilo's #undef sigwait, + and updated the ::sigwait declaration to what cxx uses internally. + + * examples/IPC_SAP/SOCK_SAP/CPP-inserver.cpp (server): cast arg + to long before casting to ACE_HANDLE, and removed function-style + cast. + +Fri Dec 19 00:39:40 1997 Douglas C. Schmidt + + * ACE version 4.4.7, released Fri Dec 19 00:39:40 1997. + +Thu Dec 18 19:47:47 1997 Douglas C. Schmidt + + * examples/IPC_SAP/SOCK_SAP: Stripped the CPP-in{server,client}.cpp + tests down to their bare essence to only test the core features + of sockets. Thanks to Bryan and Brian for suggesting this. + + * ace/Message_Queue.cpp (ACE_Message_Queue_Iterator): Changed + queue to q to avoid clashes with STL. Thanks to Brian Mendel + for reporting this. + + * ace/OS.h: The server logging daemon is implemented using TCP/IP + under Win32. Therefore, we can simplify the creation of the + ACE_DEFAULT_LOGGER_KEY. Thanks to Patrick J. McNerthney + for reporting this problem. + +Thu Dec 18 22:35:45 1997 David L. Levine + + * ace/OS.h: fixed typo in end-of-comment marker. + + * ace/OS.h: on Digital Unix 4.0, only declare sigwait () with cxx, + not with g++. Thanks to Erik Margraf + for verifying this. + + * examples/IPC_SAP/SOCK_SAP/CPP-in{client,server}.cpp: tweaked + so that they build on VxWorks (spawn needs the (ACE_THR_FUNC) + cast), and without threads. + + * tests/run_tests.vxworks: updated VxWorks test status. + + * ace/Basic_Types.h: look for ULONGLONG_MAX, which Irix 6.x uses. + And, hard-code ACE_SIZEOF_LONG_DOUBLE to be 16 on __sgi, because + its float.h doesn't always allow us to distinguish them. + Thanks to Carlos for reporting these. + + * ace/High_Res_Timer.cpp,Profile_Timer.cpp: removed dependence + on ACE_U_LongLong. Thanks to Carlos for reporting this. + + * tests/Time_Value_Test.cpp: fixed #ifdefs so that ACE_ULongLong + isn't tested on Irix 6.x, etc. Thanks to Carlos for tripping + over this. + + * ace/IOStream_T.i (eof): made the return type, int, explicit. + + * ace/config-linux-common.h: started adding support for threads on + alpha (glibc). + +Thu Dec 18 21:17:46 1997 + + * ace/ace_dll.dsp: Added project files for Windows CE on SH3 + series CPU and x86 emulator. + + * ace/streams.h: + * ace/OS.h: Added Windows CE flags. + + * ace/OS.cpp (invoke): Added a dummy return to shut gcc up. + + * ace/OS.cpp (invoke): Added a dummy return to shut gcc up. + + * ace/OS.{h,cpp} (rethrow_w32_structural_exception): Added this + function, which prints out an error message to indicate the + occurance of structural exception and rethrow it again. + (ACE_Thread_Adapter::invoke): Rearranged try and except block + for Win32 and added a finally block so when a structural + exception occurs, a thread can clean it up properly, print out + an error message, and rethrow the exception again. + +Thu Dec 18 15:40:50 1997 James C Hu + + * ace/Filecache.{cpp,h}: + - debugged writing a file. + - can select if mapping is desired. + + * ace/OS.h: Added new #defines to facilitate forward declarations + of ACE_Export classes. + +Thu Dec 18 00:15:02 1997 Douglas C. Schmidt + + * ACE version 4.4.6, released Thu Dec 18 00:15:02 1997. + +Wed Dec 17 19:42:38 1997 Douglas C. Schmidt + + * examples/IPC_SAP/SOCK_SAP: Enhanced the + CPP-{inserver,inclient}.cpp tests so that they will spawn + multiple client and server threads to perform the data transfer. + Thanks to Brian Mendel and Bryan Doerr for suggesting this. + + * ace/OS.i: Fixed some very subtle bugs with cond_signal() and + cond_broadcast(). Thanks to Patrick J. McNerthney + for reporting these and sending the fixes. + +Wed Dec 17 19:27:06 1997 Nanbor Wang + + * ACE-INSTALL.html (HREF): Added an advise not to use VC5.0 SP3. + + * examples/OS/Process/Makefile: Removed inclusion of + rules.lib.GNU. Thanks to Avi Nash for + noticing this. + +Tue Dec 16 22:09:42 1997 David L. Levine + + * tests/Time_Value_Test.cpp: restored #include test_config.h, + and changed #include ace/config.h to ace/inc_user_config.h. + + * examples/IPC_SAP/TLI_SAP/ftp-server.cpp, + examples/Reactor/Misc/test_timer_queue.cpp, + examples/Service_Configurator/IPC-tests/server/Handle_Timeout.i, + examples/Shared_Malloc/test_malloc.cpp, + examples/Threads/thread_specific.cpp: replaced ACE_HAS_64BIT_LONGS + preprocessor logic with a cast through a long to an int. + A void * is the same size as a long on all currently supported + ACE platforms. The int cast is also there, to avoid compiler + warnings about narrowing. As a side effect, the function-style + casts were removed. + + * ace/config-osf1*.h,README: added comment stating that + ACE_HAS_64BIT_LONGS is deprecated. + + * ace/config-tandem.h: removed commented-out line that mentioned + ACE_HAS_64BIT_LONGS. + + * ace/OS.{h,i} (sigwait): removed DEC cxx version dependence. The + standard two-arg POSIX ::sigwait () seems to work just fine even + on older releases of Digital Unix 4.0, with the sigwait declaration + that we have in OS.h. Thanks to Erik Margraf + and Thilo + for helping to sort this out. + + I did change the ACE_OS::sigwait () return value determination + in OS.i. It now depends on whether or not POSIX ::sigwait () + returns 0, to agree with the documenation for POSIX sigwait. + Before, the code checked for a -1 return value from ::sigwait (). + +Tue Dec 16 21:00:49 1997 Chris Gill + + Single Threaded port of ACE to pSOSim - first checkin + + * psosim/Makefile: (new) make file for new psosim directory - + builds the configured simulator components + + * psosim/drv_conf.c: (new) board driver configuration code for + simulator + + * ace/sys_conf.h: (new) configuration settings for simulator, ACE + + * ace/config-psosim-g++.h: (new) config file for psosim w/ g++ + + * ace/OS.cpp: + * ace/OS.h: + * ace/OS.i: Added psos and psosim specific code + + * ace/Mem_Map.cpp: Removed function style casts which were killing + g++ + + * ace/Message_Block.cpp: Removed function style casts which were + killing g++ + + * ace/Containers.cpp: Removed function style casts which were + killing g++ + + * ace/Map_Manager.cpp: Removed function style casts which were + killing g++ + + * tests/Handle_Set_Test.cpp: Added PSOS #defines, alongside those + for VXWORKS + + * tests/SOCK_Connector_Test.cpp: Added PSOS #defines, alongside + those for VXWORKS + + * tests/Priority_Reactor_Test.cpp: Added PSOS #defines, alongside + those for VXWORKS + + * tests/MM_Shared_Memory_Test.cpp: Added PSOS #defines, alongside + those for VXWORKS + + * tests/Conn_Test.cpp: Added PSOS #defines, alongside those for + VXWORKS + + * tests/run_tests.psosim: (new) script to run only those tests + that are relevant to pSOSim, in its current single threaded + state + + * include/makeinclude/platform_psosim_g++.GNU (new) make macros + for pSOSim using g++ + + +Tue Dec 16 17:23:49 1997 Nanbor Wang + + * tests/Time_Value_Test.cpp: Removed inclusion of "ace/config.h". + + * ace/inc_user_config.h: Added this file to prevent multiple + inclusions of config.h file. Replace `#include "ace/config.h"' + with `#include "ace/inc_user_config.h"'. + + * ace/Log_Msg.cpp: + * ace/OS.h: + * ace/Trace.cpp: + * ace/streams.h: + * ace/iosfwd.h: Replace "config.h" with "inc_user_config.h". + +Tue Dec 16 08:30:41 1997 Douglas C. Schmidt + + * examples/IPC_SAP/FILE_SAP/client.cpp (main): Fixed "lines" to + "links." Thanks to Istvan Buki for reporting + this. + +Tue Dec 16 14:15:48 1997 + + * ace/OS.i (fstat): Fixed Dr. Schmidt's typo. + +Tue Dec 16 09:17:53 1997 David L. Levine + + * ace/Singleton.cpp (cleanup): set instance pointer to 0 after + deleting it. Thanks to Luca Priorelli + for suggesting this. + + * ace/Basic_Types.{h,i}: (ACE_U_LongLong): use ACE_UIN32 instead + of u_long for data members, to ensure that its sizeof is 8 bytes. + + * ace/OS.h: except on WIN32 and Solaris (ACE_HAS_HI_RES_TIMER), + always typedef ACE_hrtime_t to ACE_UINT64. This changes removes + the dependence on ACE_HAS_64BIT_LONGS. + + * ace/OS.cpp (ACE_TSS_Keys): replaced ACE_HAS_64BIT_LONGS + dependence with ACE_SIZEOF_LONG == 8, and similarly for + determination of 4-byte longs. + + * tests/TSS_Test.cpp (worker): replaced ACE_HAS_64BIT_LONGS + preprocessor logic with a cast of the void * argument to a long. + A void * is the same size as a long on all currently supported + ACE platforms. The int cast is also there, to avoid compiler + warnings about narrowing. + + * tests/Time_Value_Test.cpp: replaced use of ! ACE_HAS_64BIT_LONGS + with ACE_SIZEOF_LONG == 4. + +Mon Dec 15 22:47:24 1997 Douglas C. Schmidt + + * ACE version 4.4.5, released Mon Dec 15 22:47:24 1997. + +Mon Dec 15 20:17:10 1997 Douglas C. Schmidt + + * ace/OS.cpp: Fixed pread() and pwrite() so that they work + correctly even if we don't support threads. Thanks to Irfan for + finding this. + + * ace/OS.i: Tried to fix the fstat() wrapper on Win32 so that + it does the right think for HANDLES. Thanks to Lori Anderson + for pointing this out. + +Mon Dec 15 15:36:07 1997 Nanbor Wang + + * ace/Thread_Manager.cpp (exit,wait): Changed these two functions + more for Chorus. Thanks again to Wei Chian + for providing the patch. + +Mon Dec 15 06:42:42 1997 David L. Levine + + * ace/Log_Msg.cpp (instance): on non-threaded platforms, only + allocate a new ACE_Log_Msg_message_queue if the (static) pointer + is 0. Thanks to Stephen Coy for + reporting this. + + * ace/config-linux-common.h: updated header comments about + autosensing the platform capabilities. + + * tests/Process_Strategy_Test.cpp: (parse_args): added DEBUG + message if an unsupported concurreny strategy is provided with + a -c option. + +Mon Dec 15 01:12:33 1997 + + * ace/Synch_T.h (ACE_Atmoic_Op::value_i): Explicitly return + (by reference). This gives the user full, unrestricted + access to the underlying value. This method will usually be + used in conjunction with explicit access to the lock. Use with + care ;-) + +Sun Dec 14 21:37:08 1997 Douglas C. Schmidt + + * ace/OS.i (cond_wait,cond_timedwait): Fixed a missing return to + handle the case where we're using USYNC_PROCESS for the external + mutexes. + + * ace/OS: Made the use of the waiters_lock_ mutex consistent in + the ACE_cond_t implementation. This was broken since we used + the external_mutex to serialize access to the waiters_ count + inconsistently. Thanks to Patrick J. McNerthney + for reporting this very subtle bug. + +Sun Dec 14 12:29:26 1997 Nanbor Wang + + * ace/Thread_Manager.cpp (exit,wait): Disabled thread join + functionality in Chorus. Thanks to Wei Chiang + for providing the fix. + +Fri Dec 12 21:48:38 1997 Torbjorn Lindgren + + * ace/config-linux*.h: All Linux platform files except the + Linux-KCC modified to use the upgraded common Linux + configuration file. Linux-KCC looks reasonably easy to do, + if no-one that actually have KCC takes care of it I can do + this one later. + + * ace/config-linux-common.h: Modernized and updated the common + Linux configuration file to handle more of the common + configuration stuff. Also added the beginning of proper + glibc and egcs support for Linux. + +Sat Dec 13 14:22:28 1997 + + * ace/Basic_Types.h: Changed _M_IX386 to _M_IX86. + +Fri Dec 12 19:41:42 1997 + + * ace, tests, version_tests: Updated Win32 makefiles (VC4.2 and + VC5.0) to include new Basic_Types_Tests. + + * tests/Basic_Types_Test.cpp (main): Updated to use + ACE_OS::getpagesize(). + + * ace/ACE.cpp (round_to_pagesize): Updated to use + ACE_OS::getpagesize(). + + * ace/OS.i (getpagesize): Added this to ACE_OS. + +Fri Dec 12 07:49:01 1997 David L. Levine + + * ace/OS.i (inet_addr): changed type of "valid" from bool to u_int. + This code is only seen on VxWorks. + + * ace/IOStream.h (ACE_Quoted_String::operator <): changed return + type from bool to int. + + * ace/config-vxworks*.h,README: removed ACE_LACKS_SOCKET_BUFSIZ; + added ACE_DEFAULT_MAX_SOCKET_BUFSIZ of 32768. + + * examples/IPC_SAP/SOCK_SAP/C-in{client,server}.cpp: added + support to optionally set socket buffer sizes. + + * examples/System_V_IPC/SV_Semaphores/Semaphores_2.cpp: + removed unused constant SHMSZ. + + * examples/Timer_Queue/Reactor_Timer_Queue_Test.cpp: removed + unused constant NO_OF_IO_HANDLERS. + + * ace/IOStream_T.h (ipfx,ipfx1): don't call setstate () on WIN32, + because MS VC++ 5.0 doesn't declare it. Thanks to Irfan for + reporting this. This "fix" is temporary, maybe, until we + figure out the proper fix. + + * ace/OS.h: cast the 1 in ACE_MSB_MASK to an fd_mask, to support + 64-bit fd_masks. I suspect that with this change, the + ACE_HAS_BROKEN_BITSHIFT used in config-tandem.h is no longer + necessary. + + Added Basic_Types: + * ace/Basic_Types.*,Makefile: Basic_Types defines the + following preprocessor macros: + + Sizes of built-in types: + ACE_SIZEOF_CHAR + ACE_SIZEOF_WCHAR + ACE_SIZEOF_SHORT + ACE_SIZEOF_INT + ACE_SIZEOF_LONG + ACE_SIZEOF_LONG_LONG + ACE_SIZEOF_VOID_P + ACE_SIZEOF_FLOAT + ACE_SIZEOF_DOUBLE + ACE_SIZEOF_LONG_DOUBLE + + Wrappers for built-in types of specific sizes: + ACE_INT16 + ACE_UINT16 + ACE_INT32 + ACE_UINT32 + ACE_UINT64 + (Note: ACE_INT64 is not defined, because there is no ACE_LongLong for + platforms that don't have a native 8-byte integer type.) + + Byte-order (endian-ness) determination: + ACE_BYTE_ORDER, to either ACE_BIG_ENDIAN or ACE_LITTLE_ENDIAN + ACE_BIG_ENDIAN or ACE_LITTLE_ENDIAN + + * ace/OS.*: moved ACE_U_LongLong to Basic_Types.*. + + * ace/OS.h: added #include . + + * ace/config-linux-common.h,README: added ACE_HAS_BYTESEX_H. + + * tests/Basic_Types_Test.cpp,run_tests.{bat,sh,vxworks),Makefile: + added new Basic_Types_Test. + + * tests/Time_Value_Test.cpp: removed ACE Version printout because + it is now in Basic_Types_Test. + +Fri Dec 12 03:00:21 1997 James C Hu + + * ace/config-sunos5.5-egcs-1.0.h: Fundamemntally identical to g++ + version, except added ACE_HAS_STDCPP_STL_INCLUDES, which is + taken to mean that the Standard C++ STL include files are + supported. + + * IOStream.h: Added #if's to handle the case where + ACE_HAS_STRING_CLASS, but if ACE_HAS_STDCPP_STL_INCLUDES, then + the string class is found in . Otherwise, it looks for + it in . + + * ace/OS.i: Re-implemented strcasecmp methods. Thought bad + implementations were related to a JAWS bug, but the hand + implementations are not used on Solaris. + +Thu Dec 11 23:20:57 1997 + + * ace/Strategies_T.cpp (activate_svc_handler): Changed the + parameter that was been passed into the open routine of + Svc_Handler. The that was passed to us is passed through + to open, rather than passing . Thanks to Mats Nilsson + for pointing this out. + + * ace/Connector.cpp (activate_svc_handler): Made sure that we pass + the connector pointer as the void* parameter to the svc_handler. + +Thu Dec 11 23:35:04 1997 Douglas C. Schmidt + + * ace/OS.i. The code was always calling dlsum for the _init() + hook, even if dlopen() failed. In addition to fixing this, I + also removed a potential handle leak. Thanks to Patrick + J. McNerthney for reporting this. + +Thu Dec 11 13:13:17 1997 David L. Levine + + * ace/LSOCK.cpp (recv_handle): fixed to remove compile errors and + warnings on platforms with both ACE_HAS_4_4BSD_SENDMSG_RECVMSG + and ACE_HAS_THREADS. The delta from version 4.3 of this file + is very small. Thanks to Kirill Rybaltchenko + for reporting this problem and + verifying the fix on LynxOS, the only affected platform. + + * ace/config-linux-kcc.h,include/makeinclude/platform_linux_kcc.GNU: + added linuxthreads support with the linux KAI C++ config. + Thanks to Ben Eng for the patches. + + * ace/IOStream_T.h: iostream fx emulation now skips whitespaces and + flushes when tied. Thanks to Ben Eng for the patch. + + * tests/IOStream_Test.cpp (server): check for double-quote instead + of newline as end-of-string character. Thanks to Ben Eng + for the patch. + + * tests/SV_Shared_Memory_Test.cpp: renamed "allocator" to + "myallocator" to avoid conflict with STL. Thanks to Ben Eng + for the patch. + + * include/makeinclude/platform_linux_lxpthread.GNU: protect + PRELIB definition with ifndef PRELIB, to allow overriding + without modifying the platform_macros.GNU file. Thanks to + James Johnson for this suggestion. + + * ace/IOStream_T.cpp: restored ACE_HAS_IOSTREAMH_INCLUSION + protection around the old g++ munch hack. There's no need + to trouble all (g++) platforms with its (4 byte) space penalty. + + * examples/IOStream/server/iostream_server.cpp (handle_input): + removed unused local "addr". + + * examples/Reactor/Dgram/{CODgram,Dgram}.cpp (run_test): added + return 0 at end so that the function always returns a value. + + * include/makeinclude/platform_lynxos.GNU: added comment indicator + to comment describing POSTLINK. + + * ACE-INSTALL.html: updated DEC CXX 6.0 test status: all tests pass + with the version of DIGITAL UNIX 4.0 and cxx 6.0 that we use. + +Wed Dec 10 23:57:00 1997 Chris Cleeland + + * ACE version 4.4.4, released Wed Dec 10 23:57:00 1997. + +Wed Dec 10 16:24:09 1997 + + * ace/Auto_Ptr.i: Apparently, the standard states that in order to + access members of a templated superclass from a templated + subclass, then the member name must be fully qualified. + Therefore, changed access to p_ to ACE_Auto_Basic_Ptr::p_. + Thanks to Stephen Coy for reporting this. + +Tue Dec 09 13:05:00 1997 + + * ace/Containers.cpp (copy_all_nodes): Added a temporary + ACE_Node pointer to get around the macro side effects. + +Sun Dec 7 10:20:46 1997 Douglas C. Schmidt + + * ace/Service_Config.cpp (parse_args): Added an appropriate macro + to switch from char * to UNICODE. Thanks to Timothy A. Brown + for reporting this. + + * ace/config-linux-*.h: Added ACE_HAS_GETRUSAGE_PROTO to all + the linux config files. Hopefully, this will help ACE to work + better with glibc. Thanks to Ernie Makris + and Torbjorn Lindgren for their help. + +Sat Dec 06 13:30:11 1997 Douglas C. Schmidt + + * ACE version 4.4.3, released Sat Dec 06 13:30:11 1997. + +Sat Dec 6 12:02:09 1997 Douglas C. Schmidt + + * examples/IOStream: Revised both the client and server to + demonstrate the ACE_IOStream functionality correctly. Also + added a README file explaining how to run the examples. Thanks + to James Johnson and Dustin Laurence + for suggesting this. + + * ace/IOStream_T: Added a new method eof() to the ACE_IOStream_T<> + class. This returns 1 if we've reached the end of the socket + stream, else 0. + +Fri Dec 5 16:58:29 1997 Douglas C. Schmidt + + * ace/Addr.h: Added a const ACE_Addr & instead of const ACE_Addr. + This will avoid an extra copy. Thanks to Irfan for noticing + this. + + * examples/Reactor/Dgram/CODgram.cpp: Also updated the CODgram + test to be just like the Dgram test. + + * examples/Reactor/Dgram/Dgram.cpp (main): Fixed a bug where it + was sending a huge buffer instead of just the string size. + Also, exit once we've finished the send. Finally, revised the + test so that it is easier to understand and so that it exits + properly. Thanks to Michael Hoffman + for reporting + this. + +Fri Dec 05 13:20:09 1997 David L. Levine + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: added OFLAGS. + Thanks to Brian Mendel for suggesting these. + + * tests/IOStream_Test.cpp: updated to work with the standard C++ + library version of iostreams. That primarily involved not + using operator>>(char& c) and operator>>(char* c) for C strings. + Thanks to Ben Eng for the patch. + + * ace/OS.{h,i},config-osf1-4.0.h: fixed sigwait on DEC CXX 6.0/ + recent DEC UNIX 4.0. The fix keys off the compiler version, + though it probably should depend on the OS. It adds a + sigwait declaration, which is a current signal.h deficiency. + With this change, ACE builds and tests cleanly on DEC UNIX. + + * ace/config-vxworks5.x-g++.h: restored comment that explains + ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION. + + * netsvcs/lib/Makefile: the first line of the Local Target + (Server_Logging_Handler.*) override mysteriously disappeared, again. + +Fri Dec 5 12:15:49 1997 Chris Cleeland + + * ace/Select_Reactor.cpp: Made error messages on open failure more + verbose. Having these in place straightaway would have helped + track down some problems at Boeing much more effectively. + +Fri Dec 5 11:15:17 1997 Nanbor Wang + + * ace/Log_Msg.h (callers.): Added documentation for %I and %D + flags. Thanks to John Morey for reosting + this. + + * ace/Dynamic.h: + * ace/CORBA_Ref.h: + * ace/Token_Invariants.h: + * ace/Token_Collection.h: + * ace/Local_Tokens.h: + * ace/Remote_Name_Space.h: + * ace/Registry_Name_Space.h: + * ace/Strategies.h: + * ace/Name_Space.h: + * ace/Name_Request_Reply.h: + * ace/Naming_Context.h: + * ace/Name_Proxy.h: + * ace/Local_Name_Space.h: + * ace/Local_Name_Space_T.h: Corrected erroneous comments. These + files all contain incorrect filename info in the preambles which + make erroneous auto-generated man pages. + +Fri Dec 05 00:00:53 1997 + + * ace/OS.h: If the user wants minimum IOStream inclusion, i.e., + they have defined ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION, we will + just include the forward declarations, i.e., ace/iosfwd.h. Else + they will get all the stream header files, i.e., ace/streams.h. + The positive thing about this change is that if your code was + using stream classes and you were depending on OS.h to provide + you the stream header files, you will not have to change your + code, unless you have defined + ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION. Thanks to Dr. Schmidt for + suggesting this and thanks to David Levine for suggesting it to + Dr. Schmidt ;-). + + * ace/config-vxworks5.x-g++.h: Restored + ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION. + + * ace/Asynch_IO.cpp (open): Fixed typo. + +Thu Dec 04 21:20:47 1997 Douglas C. Schmidt + + * ACE version 4.4.2, released Thu Dec 04 21:20:47 1997. + +Thu Dec 4 19:45:04 1997 Douglas C. Schmidt + + * ace/Object_Manager.cpp (ACE_Object_Manager_Destroyer): Fixed a + bug in the + ACE_Object_Manager_Destroyer::~ACE_Object_Manager_Destroyer + thread comparison routine. Thanks to Steven Coy for this. Also + renamed _saved_main_thread_id to saved_main_thread_id_, which is + proper ACE style. + + * Updated the ACE-INSTALL.html file to explain why you don't need + to build everything all the time. Thanks to Dustin Laurence + for suggesting this. + + * tests/SOCK_Connector_Test.cpp (fail_no_listener_nonblocking): + Added a check for ENETUNREACH. Thanks to Dustin Laurence + for reporting this. + + * ace/Asynch_Acceptor.cpp (open): Changed the local variable named + sap_any to sa to avoid conflicts with the new sap_any macro. + + * ace/Asynch_IO: Made the ACE_Service_Hanlder::open() method + non-virtual to work around bugs with Borland C++. Thanks to + Valik Solorzano Barboza for suggesting this. + + * ace/ACE.cpp (COMPUTE): Put parens around elements the COMPUTE + macros so that it will work on Borland C++. Thanks to Valik + Solorzano Barboza for suggesting this. + + * ace/config-win32-common.h: Added ACE_HAS_BROKEN_SAP_ANY to deal + with Borland C++ bugs. Thanks to Valik Solorzano Barboza + for suggesting this. + + * ace/Addr: Added a workaround for the Borland C++ problems. This + introduces a new global macro called sap_any. However, this is + only used for Borland, so it should be ok. Thanks to Valik + Solorzano Barboza for suggesting this. + + * ace/LSOCK.cpp (recv_handle): Make the code smarter if we've got + both STREAMS and 4_4BSD_SENDMSG_RECVMSG. + + * Reran "make depend" over all of ACE. + + * netsvcs/clients/Logger/indirect_logging.cpp (main): Changed + LOGGING to LOGGER. Thanks to Irfan for noticing this. + + * netsvcs/lib/Client_Logging_Handler: Changed "rendezvous" to + "logger." + + * netsvcs/clients/Logger/indirect_logging.cpp, + netsvcs/lib/Client_Logging_Handler: Changed DEFAULT_RENDEZVOUS + to DEFAULT_LOGGER_KEY. Thanks to Steven Coy for pointing out + this inconsistency. + + * ace/OS.h: Renamed ACE_LOGGER_KEY to ACE_DEFAULT_LOGGER_KEY to + make it consistent with other ACE_DEFAULT_* names. + + * ace/OS.h: Changed the definition for ACE_LOGGER_KEY so that it + defaults to "localhost:10015" on platforms that don't support + ACE STREAM Pipes. Thanks to Steven Coy for suggesting this. + + * ace/Service_Config.cpp: Added the -k option to parse_args() so + that the user can set the logger key. Thanks to Steven Coy for + suggesting this. + + * ace/Service_Config: Added the logger_key as a parameter to the + other open() method, as well. Thanks to Steve Coy for being + picky ;-). + + * netsvcs/clients/Logger/direct_logging.cpp (main): Modified the + code to use the new framing scheme. + + * netsvcs/lib/Server_Logging_Handler_T.cpp + (handle_logging_record): Updated the code to take advantage of + our new framing scheme. + + * netsvcs/lib/Client_Logging_Handler.cpp (send): We can be smarter + now about sending the ACE_Log_Record across the network since + the length field is now fixed and it's guaranteed to be in the + first 4 bytes. Thanks to Steve Coy for suggesting this. + + * ace/Log_Record.h (ACE_Log_Record): Replaced the horribly + non-portable "long length_" field with the "ACE_INT32 length_" + field, which is nice because it is portable across platforms + with different long-word sizes. + +Thu Dec 04 09:57:40 1997 David L. Levine + + * include/makeinclude/platform_osf1_4.GNU: allow enabling of + WARNING_FLAGS by setting CXX_VER to POST_5X. Thanks to + James Johnson for this suggestion. + + * ace/Svc_Conf_l.cpp: rebuilt with Doug's flex. + +Thu Dec 04 03:46:04 1997 + + * ace/Makefile (Svc_Conf_l.cpp): Changed the sed macros to produce + OS.h include instead of stdcpp.h. + + * ace/Svc_Conf_l.cpp: Updated after code was regenerated using the + new sed changes in the Makefiles. Currently there are two + inclusions of OS.h in this file and an extra stdlib.h. Maybe + someone more experienced in sed can take these out by updating + the Makefile. + + * ace/IOStream_T.h (stdcpp.h): Removed inclusion of stdcpp.h. It + is redundant because IOStream.h includes it. + + * ace/streams.h: New file. This files tries to reduce the + differences between the old and new stream libraries for the + user. This is done by automatically selecting the correct + includes depending on the ACE_HAS_STANDARD_CPP_LIBRARY variable. + This file also helps out by making commonly used classes (e.g., + ios, ostream, iostream, cin, cout, etc) available in the global + name space when used with the Standard C++ Library. Use this + file where you would usually include or . + + * ace/iosfwd.h: New file. This files deals with forward + declaration for the stream classes. Remember that since the new + Standard C++ Library uses templates for the implementation of + the streams, simple forward declaration will not work. Classes + forward declared by this class include: + + ios + streambuf + istream + ostream + iostream + filebuf + ifstream + ofstream + fstream + + Use this file where you would usually forward declare the + classes listed above. + + * ace/stdcpp.h: Removed this file from the repository. This file + was trying to do too much. All the inclusion of the C Library + headers were unnecessary. This is because the new C++ standard + preserves the old C library include files. The functions from + those files will still be in the global namescape. The new + header files (e.g., cstdio), provides the same prototypes as the + old files (e.g., stdio.h), except that all prototypes are in the + std namespace. Since we want the old behavior and global + prototypes (for backward compatibility), inclusion of the new + header files was incorrect. + + stdcpp.h was included by OS.h. This caused almost all files to + force the inclusion of the stream header files. This was + changed so that OS.h only includes the ace/iosfwd.h file. This + means that if your code was using stream classes and you were + depending on OS.h to provide you the stream header files, you + will have to change your code to either include iostream.h or + iostream, or more portably ace/streams.h. + + * ace/OS.h: Removed stdcpp.h. Moved the standard C library + includes from stdcpp.h to OS.h. Also added ace/iosfwd.h to give + forward declaration for the stream classes. + + * ACE: Added explicit inclusion of ace/streams.h to the following + files: + + ace/IOStream.cpp + ace/Log_Record.cpp + ace/OS.cpp + ace/SString.cpp + ace/Log_Msg.cpp + tests/test_config.h + examples/Log_Msg/test_log_msg.cpp + examples/Reactor/Misc/test_time_value.cpp + examples/Threads/task_three.cpp + netsvcs/lib/Logging_Strategy.cpp + examples/Logger/Acceptor-server/server_loggerd.cpp + examples/ASX/UPIPE_Event_Server/event_server.cpp + examples/Reactor/Ntalker/ntalker.cpp + examples/Shared_Malloc/test_persistence.cpp + examples/System_V_IPC/SV_Message_Queues/MQ_Server.cpp + examples/System_V_IPC/SV_Message_Queues/MQ_Client.cpp + examples/System_V_IPC/SV_Message_Queues/TMQ_Server.cpp + examples/System_V_IPC/SV_Message_Queues/TMQ_Client.cpp + + * Updated makefile dependencies throughout ACE to reflect the + removal of stdcpp.h and the addition of streams.h. + + * examples/Threads/barrier2.cpp: Removed inclusion of stdcpp.h. + + * ace/IOStream_T.cpp: Reorganized include files so that inclusion + of config.h is not necessary. + + * ace/IOStream.cpp: Changed inclusion of config.h to OS.h. + + * ace: Removed config.h from the following files. It was + redundant. + + Timer_Hash.cpp + Timer_Heap.cpp + Timer_List.cpp + Timer_Queue.cpp + Timer_Wheel.cpp + + * ace: Added code to protect against multiple inclusions of + config.h. Following files were effected: + + Trace.cpp + Log_Msg.cpp + + * ace/config-win32-common.h: Removed redundant definitions of + ACE_HAS_TYPENAME_KEYWORD and ACE_HAS_SIG_ATOMIC_T. Thanks to + Matthias Kerkhoff for pointing this out. + +Wed Dec 3 21:37:47 1997 Douglas C. Schmidt + + * Added the new ACE-inheritance.ps and pdf files, which show the + class structure of ACE. Thanks to John Lindal + for generating this. + + * ace/Service_Config: Removed the static logger_key_ member and + replaced it with a (defaulted) parameter to open(). This is + more flexible. Thanks to Steve Coy for the suggestion. + + * ace/Service_Config.h: Addressed all the "@@" questions. + + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp (main): Fixed a + subtle bug in the "quit" logic. Thanks to Michael Hoffman + for reporting + this. + + * netsvcs/lib/Server_Logging_Handler_T.cpp (handle_logging_record), + netsvcs/lib/Client_Logging_Handler.cpp (send): + Changed the code so that we now always send ACE_UINT32 bytes + worth of data for the length field. This ensures we're portable + across platforms. Thanks to Steven Coy for noticing this. + +Wed Dec 03 18:02:09 1997 + + * performance-tests/Synch-Benchmarks/Benchmark.cpp: Added template + instantiations for Atomic_Op. + +Wed Dec 3 10:29:58 1997 Carlos O'Ryan + + * ace/ACE.cpp: + Use ACE_UINT32 to compute the 32-bit CRC, on Alphas (and + probably other 64 bit machines) u_long seems to be longer than + that. + +Wed Dec 03 07:39:15 1997 Steve Huston + + * include/makeinclude/platform_hpux.GNU: + * include/makeinclude/platform_hpux_gcc.GNU: Moved some compile options + from the DCFLAGS to the CCFLAGS to compile correctly with or without + debugging. + +Wed Dec 03 06:26:14 1997 David L. Levine + + * ace/Future.cpp, + tests/{Future_Test,Reactors_Test,Reader_Writer_Test.cpp, + examples/Threads/manual_event.cpp: + moved ACE_Atomic_Op instantiation from + ace/Future.cpp to where it is used. + + * ace/OS.cpp (inet_aton): return 0 if addr argument is 0. Thanks + to Wei for reporting this. + + * ace/config-linux.common.h: set an ACE_DEFAULT_BASE_ADDR, on Alpha + for now. This might be necessary on Intel as well. + + * ace/OS.{h,i}, config-osf1-4.0.h: fixed use of ::sigwait with + DIGITAL_UNIX's cxx 6.0, which now uses ACE_HAS_ONEARG_SIGWAIT. + Also, added an ACE_DEFAULT_BASE_ADDR to the config file. + + * tests/{Priority_Reactor_Test,Reactor_Performance_Test}.cpp: + instantiate ACE_Map_*, for use by ACE_Connector, with ACE_HANDLE + instead of int. That's the way it's declared in ace/Connector.h. + +Wed Dec 03 00:17:50 1997 + + * tests/test_config.h: Removed code for + ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION, as this option is no longer + necessary. + + * ace/stdcpp.h: Removed code for + ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION, as this option is no longer + necessary. + + * ace/config-vxworks5.x-g++.h: Removed + ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION. This flag is no longer + required. + + * ace/IOStream_T.cpp: Removed ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION + from #if defined. + + * ACE: Removed the explicit iostream.h inclusion from these: + + examples/ASX/UPIPE_Event_Server/event_server.cpp + examples/Log_Msg/test_log_msg.cpp + examples/Logger/Acceptor-server/server_loggerd.cpp + examples/Reactor/Misc/test_time_value.cpp + examples/Shared_Malloc/test_persistence.cpp + examples/Threads/task_three.cpp + netsvcs/lib/Logging_Strategy.cpp + + * ace/IOStream.h: Darrell missed removing this explicit iostream.h + inclusion. + + * ace/Future.cpp: Removed template instantiation of Atomic_Op + since Atomic_Op is not used by Future. + +Fri Dec 02 11:46:17 1997 + + * ace/Proactor.cpp (ACE_Proactor): Reenabled Proactor's thread + manager to wait on its Timer_Handler thread. + + * ace/Thread_Manager.cpp (close_singleton): Removed Win32 specific + codes. This is no longer necessary with above changes. + (wait): Close down thread handles when removing detached + threads. Avoid performing wait when the program is shutting + down. + (remove_thr_all): Extracted out this protected member function. + (close): Changed to use the new remove_thr_all function. + + * ace/Proactor.cpp (handle_events): Changed the magic number 258 + to WAIT_TIMEOUT. Thanks to Mark Rabotnikov + for pointing this out. + +Tue Dec 02 14:13:15 1997 Steve Huston + + * include/makeinclude/platform_hpux_aCC.GNU: Moved some compile options + from the DCFLAGS to the CCFLAGS to compile correctly with or without + debugging. Thanks to Istvan Buki for reporting + the problem. + +Tue Dec 02 06:16:39 1997 David L. Levine + + * ace/Object_Manager.cpp (~ACE_Object_Manager_Destroyer): don't + delete the ACE_Object_Manager if not destroyed by the main + thread. That can cause problems, at least on WIN32. And + it should only happen under exceptional conditions, at least + on WIN32. Thanks to Ari Erev and + John Neystadt for suggesting this. + + * ace/IOStream.cpp (underflow,overflow): moved get_mode_ and + put_mode_ accesses so that it now works on KAI C++. + Thanks to Ben Eng for the patch. + + * ace/config-linux-kcc.h: commented out ACE_TEMPLATES_REQUIRE_SOURCE. + Thanks to Ben Eng for this update. + + * ace/Profile_Timer.cpp (elapsed_time): changed + ACE_ONE_SECOND_IN_USECS to ACE_ONE_SECOND_IN_NSECS. Thanks + to Wei for noticing this. + + * ace/OS.cpp (inet_aton): removed CHORUS specialization. + Thanks to Wei for reporting this. + + * include/makeinclude/platform_chorus.GNU: added CHORUS = 1, + for use by individual Makefiles. + + * examples/Shared_Malloc/test_persistence.cpp: removed + ACE_Malloc + instantiation because it's in ace/System_Time.cpp. + + * ace/config-lynxos.h: removed ACE_HAS_UALARM, because LynxOS + apparently doesn't. + + * include/makeinclude/platform_lynxos.GNU: added -Winline and + removed -fno-strict-prototypes. + + * tests/Message_Queue_Test.cpp (main): increased queue size from + default of 16Kb to 32Kb, so that it runs on machines with 8Kb + pagesizes. And, added a check to see if the queue is full + before enqueuing. + + * ace/OS.i, config-osf1-4.0.h: DECXX 6009006 has SIGWAIT. + + * ACE-INSTALL.html: updated DEC_UNIX test status. Message_Queue_Test + and all of the Mutex_Tests now pass. Conn_Test no longer does. + +Tue Dec 02 00:18:04 1997 + + * ace/Memory_Pool.cpp (handle_signal): If guess_on_fault_ is true, + then we cannot call remap(0). This will always put the address + out of range. Therefore, we will shoot in the dark (user has + instructed us to do so as guess_on_fault_ is true) and try to + remap the file. If the user does not want this behavior, the + guess_on_fault_ flag should be turned off. Thanks to Jon + Prettyman for pointing this out. + +Mon Dec 01 16:13:06 1997 + + * ace/config-win32-common.h: Added back ACE_LACKS_ACE_IOSTREAM to + the config file. The test is not compiling. + + * tests/run_tests.bat: Look for "Win32 structured exception" in + the log files. + +Mon Dec 1 14:01:02 1997 Darrell Brunsch + + * ace/Log_Msg.cpp, ace/Log_Msg.h, ace/Log_Record.cpp, + ace/Log_Record.h ace/OS.h, ace/stdcpp.h, tests/test_config.h: + + Changed use of ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION in stdcpp.h + to include iostream when the above is #defined. Made + changes to other files to accommodate this change. + +Mon Dec 01 12:15:00 1997 + + * ace/config-win32-common.h (ACE_LACKS_ACE_IOSTREAM): James CE + Johnson claims that ACE_LACKS_ACE_IOSTREAM is no longer not + necessary when using the ACE_HAS_STANDARD_CPP_LIBRARY. + + * ace/OS.h: Changed the definition of ACE_UNIMPLEMENTED_FUNC so + that it just evaporates on platform that have + ACE_REQUIRES_FUNC_DEFINITIONS defined. + + ACE_UNIMPLEMENTED_FUNC is only required for template classes and + not for a normal class. When the template is explicitly + instantiated, it causes some compilers to look for the + definition of all the declared methods. + + On platforms that have this behavior, we have decided to take + out the declaration of this function. This is necessary since + an empty definition of {} usually does not work with some + constructors. And by providing a explicit definition of this + function, will cause all platforms to suffer. + + Therefore, platforms with ACE_REQUIRES_FUNC_DEFINITIONS defined + must be specially careful when using this. + +Mon Dec 01 07:56:02 1997 David L. Levine + + * include/makeinclude/platform_sunos5_sunc++.GNU: added + -xildoff to LDFLAGS, to avoid occasional problems with + the incremental linker. Thanks to Hans Rohnert + for this suggestion. + + * include/makeinclude/platform_vxworks5.x_g++.GNU, + etc/ace_ld, bin/ace_ld, ACE-INSTALL.html: + moved ace_ld from etc/ to bin/. + + * Makefile: added etc/ to CLONE and RELEASE_FILES. + + * include/makeinclude/platform_lynxos.GNU: added -Wall to CFLAGS. + + * ace/ACE.cpp (set_handle_limit): only call setrlimit if + RLIMIT_NOFILE is #defined. + + * ace/OS.h: removed ACE_HAS_STDARG_THR_DEST dependence for + ACE_THR_DEST definition. + + * ace/OS.cpp (thr_keycreate): with ACE_HAS_DCETHREADS only, cast + dest argument to ::pthread_keycreate if ACE_HAS_STDARG_THR_DEST. + + * ace/OS.i (get{host,proto,serv}by{addr,name}_r): with + ACE_HAS_NONCONST_GETBY only, added some ACE_UNUSED_ARGS. + + * examples/Shared_Malloc/Malloc.cpp: removed + ACE_Guard instantiation because it's in + ace/Synch.cpp. + + * ace/config-lynxos.h: added ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS. + Without it, the Thread_Manager went recursively ballistic. + + * performance-tests/Misc/preempt.cpp (main): fixed printout if + ACE_OS::sched_params () call failed. + +Sun Nov 30 22:44:50 1997 Douglas C. Schmidt + + * ACE version 4.4.1, released Sun Nov 30 22:44:50 1997. + +Sun Nov 30 20:32:50 1997 David L. Levine + + * include/makeinclude/platform_osf1_3.2.GNU: removed -ptr option + from CCFLAGS, so the default template repository will be used. + Thanks to Dani Flexer for reporting this. + + * ace/Svc_Conf_l.cpp,Makefile: + 1) #include ace/stdcpp.h instead of stdio.h so that anything + that needs to be #included with/before stdio.h can be. + 2) Changed ECHO to ACE_SVC_CONF_ECHO to avoid compiler warning if + ECHO was #defined to be a constant. + + * ace/Makefile: set ACELIB to null so that it can be used to build + shared libs, including libACE.$(SOEXT). + + * include/makeinclude/platform_osf1_4.0.GNU: added $(ACELIB) to + SOFLAGS to avoid shared lib build warnings about undefined ACE + symbols. + + * ace/Thread_Manager.h: declare ACE_THR_MEMBER_FUNC outside of + ACE_Thread_Manager class with __GNUG__ instead of with + VXWORKS || IRIX5. The problem is with older versions of g++, + not with the OS. + +Sun Nov 30 14:13:09 1997 Douglas C. Schmidt + + * netsvcs/servers/README: Clarified a bit more about how to + configure the client and server logging processes. Thanks to + Neil Cohen for motivating this. + +Sun Nov 30 17:36:35 1997 Sergio Flores + + * ace/Synch.cpp (ACE_File_Lock): Fixed order of parameters in the + call to this->open() and too many arguments in call to + ACE_File_Lock::open(). + +Sun Nov 30 16:31:41 1997 Carlos O'Ryan + + * ace/Synch.h: + * ace/Synch.cpp: + ACE_File_Lock should create the file if it does not exist, to do + so the constructor takes the parameter to ACE_OS::open() + and defaults to O_CREAT|O_RDWR. + +Sat Nov 29 21:31:07 1997 Nanbor Wang + + * ace/Proactor.cpp (~ACE_Proactor_Timer_Handler): Removed explicit + call to thr_mgr_.close(). + (ACE_Proactor): Be sure to ask Thread_Manager not to wait for + the timer_handler_ thread. + + * ace/Thread_Manager.cpp (close_singleton): Only reset + exit_on_wait status if we are responsible for deleting the + global thread manager. + +Sat Nov 29 15:15:04 1997 Carlos O'Ryan + + * ace/IPC_SAP.cpp: + Removed warning for functions not returning a value on SGI, it + seems that the flow changed and the last return was reached + sometimes, hence the ACE_NOTREACHED macro is no longer needed. + +Sat Nov 29 13:12:47 1997 Douglas C. Schmidt + + * ace/Synch: Conditionally inlined all the ACE_Process_Mutex + wrapper calls and moved them into the Synch.i file. I'm not + sure why there weren't here before. + + * ace/Synch: Reimplemented ACE_RW_Process_Mutex to use + ACE_File_Lock, which provides the proper readers/writer + semantics that had been lacking in the previous implementation. + +Fri Nov 28 04:25:23 1997 Nanbor Wang + + * ace: Removed redundant trailing commas from + ACE_UNIMPLEMENTED_FUNC. + + * ace/Thread_Manager.{h,i,cpp}: Delete declaration of + remove_thr_self. It is no longer in use. + (wait_on_exit): Added this function to let users specify whether + they want their Thread_Manager wait for spawned threads on exit + or not. + (wait): On Win32, handles should be closed if we decide to let + the thread go wild. + (remove_thr): Added another parameter to control whether + remove_thr should close the handle or not. It is only used on + Win32. + (close): Removed the parameter for it has been + incoporated as a member. + (close_singleton): Reset on Win32. We'll never + need to wait for unfinished threads on NT. + (ACE_Thread_Manager): Added initialization of member + . It is default to 1 (wait on exit.) + + * ace/Containers.h: Corrected erroneous comments. + +Wed Nov 26 10:33:22 1997 + + * ace/Log_Msg (msg): Changed the parameters from char * to const + char *. + + * ace: Added unimplemented copy constructors and assignment + operators to the following classes: + + ACE_Map_Manager + ACE_Message_Block + ACE_Data_Block + ACE_Log_Msg + ACE_Message_Queue + ACE_Task + ACE_Task_Base + + Added ACE_UNIMPLEMENTED_FUNC macros to these classes: + + ACE_Mem_Map + ACE_Priority_Reactor + ACE_Select_Reactor + ACE_WFMO_Reactor + ACE_XtReactor + ACE_Reactor + ACE_Read_Buffer + ACE_CORBA_Handler + ACE_TSS_TPQ_Entry + ACE_Object_Manager + ACE_File_Lock + ACE_Semaphore + ACE_RW_Mutex + ACE_Mutex + ACE_Null_Barrier + ACE_Null_Condition + ACE_Null_Mutex_Guard + ACE_Event + ACE_Thread_Mutex + ACE_Thread_Mutex_Guard + ACE_Condition_Thread_Mutex + ACE_Recursive_Thread_Mutex + ACE_Barrier + ACE_Condition + + Thanks to Stanley D Leeson for these + suggestions. + +Sat Dec 20 14:57:30 1997 + + * All MSVC 5.0 project files: Removed unnecessary library + inclusions. Most of them are not necessary. Thanks to + Patrick J. McNerthney for suggesting + this. + +Wed Nov 26 15:49:14 1997 David L. Levine + + * ace/IOStream_T.i (recv) affects WIN32 only: fixed typo, + ACE_BIT_ENABLED instead of ACE_BIT_ENTABLED IOStream_T.i. + Thanks to James CE Johnson for reporting this. + + * include/makeinclude/platform_lynxos.GNU: added information + on necessary OS patches. + +Wed Nov 26 09:45:43 1997 Chris Cleeland + + * ace/OS.h (ACE_PROPER_SINGLETON_INSTANTIATION): Corrected + misspelling in the "! defined (MSC_VER)" branch. I just happened + to notice this, so I don't know if anybody ever tried it and it + failed. + +Tue Nov 25 12:07:07 1997 David L. Levine + + * include/makeinclude/platform_osf1_3.2.GNU: updated for + OSF/1 3.2g/CXX 5.7. Thanks to Dani Flexer + for the updates. + +Tue Nov 25 01:07:39 1997 + + * examples/Reactor/Proactor/test_multiple_loops.cpp (main): Made + sure that the Proactor was removed from reactor. + + * ace/WFMO_Reactor.cpp (remove_handler_i, + remove_suspended_handler_i): Make sure to preserve DONT_CALL + with normal event entries. + + * ace/Proactor.cpp: + + - A flag used to indicate when we are shutting down. + + - Made sure to signal the timer event when we are closing down. + + - Thread Manager: don't bother to wait (since the thread may have + already gone). But make sure to close up the descriptor. This + may not be necessary in the future when THR_DETACHED is + correctly implemented. + + * ace/Asynch_IO.h: Changed some code from protected to public. + Even though these functions are really protected, sometimes it + simplifies user code to be able to "fake" a result. Users + should use these with care. + + * examples/Reactor/Proactor/test_proactor.cpp + (handle_write_stream): Added code for partial write to socket. + However it ever seems to do a short write ;-). Also made sure + that the initial data coming from the AcceptEx call is also + dumped to the file. Thanks to Mark Rabotnikov + (mark@netmanage.co.il) for pointing this out. diff --git a/ACE/ChangeLogs/ChangeLog-98b b/ACE/ChangeLogs/ChangeLog-98b new file mode 100644 index 00000000000..d9de5949d12 --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-98b @@ -0,0 +1,12943 @@ +Thu Dec 31 13:25:53 1998 James CE Johnson + + * docs/tutorials/019/server[2].cpp: + Test that the segment was created. If it already existed, the + malloc() will return 0 and we'll crash. + +Thu Dec 31 12:10:46 1998 Carlos O'Ryan + + * tests/RB_Tree_Test.cpp: + Added missing template instantiation, actually it seems that the + IRIX MIPSPro compiler was not doing recursive instantiation. + + * ace/ACE.cpp: + Use ACE_NOTREACHED in ACE::set_handle_limit(), the IRIX compiler + was complaining again. + +Thu Dec 31 10:58:11 1998 David L. Levine + + * ace/Containers_T.cpp (ACE_Fixed_Set::insert): removed + blank line between function header and body. + +Thu Dec 31 09:40:09 1998 Douglas C. Schmidt + + * ace/SOCK_Stream: Added a new ACE_SOCK_Stream constructor that + initializes the underlying ACE_HANDLE automagically. + +Wed Dec 30 17:07:21 1998 Douglas C. Schmidt + + * ace/Containers_T.h: Clarified that the insert() method on + ACE_Unbounded_Stack doesn't allow duplicates. Thanks to Susan + Liebeskind for reporting + this. + +Wed Dec 30 14:41:56 1998 Carlos O'Ryan + + * ace/ACE.cpp: + Sometimes the get_ip_interfaces routine was returning 0.0.0.0 as + a valid address, we explicitly avoid that now. + +Wed Dec 30 14:34:44 1998 Nanbor Wang + + * bin/GenExportH.BAT: Added '\$\I\d\$' string in generated file. + Also in generated file, make XXX_HAS_DLL defined to 1 if it + isn't defined already. + +Wed Dec 30 13:22:50 1998 Chris Gill + + * ace/Functor.{cpp, h, i} + ace/Functor_T.{cpp, h, i} + ace/Hash_Map_Manager.{h, i} + ace/Hash_Map_Manager_T.{h, i}: Moved ACE_Hash and ACE_Equal_To + STL-style functors from the Hash_Map_Manager files into the + Functor files (so other containers can use these from a central + place). Added ACE_Less_Than STL-style functor. Thanks to Doug + Schmidt, Carlos O'Ryan, and Irfan Pyarali for comments on the + distinctions between GOF command pattern functors and STL-style + functors. + + * ace/RB_Tree.{cpp, h, i}: Reworked templates so RB_Tree can take + advantage of template specialization for strcmp semantics without + the overhead of a virtual function call. Thanks to Carlos O'Ryan + for his suggestions on how to achieve this. + + * ace/OS.h + ace/config-psos-diab.h + include/makeinclude/platform_psos_diab.GNU + tests/Handle_Set_Test.cpp + tests/Process_Strategy_Test.cpp + tests/RB_Tree_Test.cpp + tests/Reactor_Performance_Test.cpp + tests/TSS_Test.cpp: A number of fixes to allow ACE pSOS tests to + compile and link successfully. + +Wed Dec 30 10:36:36 1998 David L. Levine + + * tests/Env_Value_Test.cpp: protected tests of doubles with + #ifndef ACE_LACKS_FLOATING_POINT, so that the test will + build for our Chorus platform. + +Tue Dec 29 16:24:24 1998 David L. Levine + + * bin/Service_Config.perl,auto_ptr.perl,corba-boolean.perl, + rename-ace.pl: use perl from user's path, so we don't have + to hard-code its location. + + * tests/Time_Value_Test.cpp: don't test ACE_U_LongLong if + the platform defines ACE_LACKS_LONGLONG_T, e.g., GreenHills, + because it makes a big mess. + + * bin/Hash_Map_Manager.pl,Hash_Map_Manager_Helper.csh: + translated Hash_Map_Manager_Helper.csh from csh to sh. + Renamed Hash_Map_Manager_Helper.csh to Hash_Map_Manager_Helper. + + * docs/ACE-guidelines.html: specifically disallow csh scripts. + +Tue Dec 29 15:09:15 1998 Douglas C. Schmidt + + * ACE version 4.6.10 released. + +Tue Dec 29 14:57:24 1998 Douglas C. Schmidt + + * docs/tutorials/{019,020}: Checked out the two new tutorials + from James Johnson. + +Tue Dec 29 14:37:57 1998 Douglas C. Schmidt + + * ACE version 4.6.9 released. + +Tue Dec 29 13:32:50 1998 Nanbor Wang + + * ace/OS.h (ACE_SELF): Changed it's definition from -1 to 0 on NT + to avoid warings from Intel C++. ACE_SELF is not used on NT. + Thanks to Karel Zuiderveld for + reporting this. + +Tue Dec 29 10:29:03 1998 Douglas C. Schmidt + + * ace: Fixed a bunch of warnings produced by Intel's C++ 4.0 + compiler. Thanks to Karel Zuidrveld + for reporting these. + +Tue Dec 29 09:47:48 1998 David L. Levine + + * ace/config-sunos*.h,README: + restored ACE_TIMER_SKEW, with explanatory comment. + +Mon Dec 28 23:12:59 1998 Douglas C. Schmidt + + * ace/DLL.h, + ace/Mem_Map.h, + ace/Read_Buffer.h: + Added ACE_UNIMPLEMENTED_FUNC() macros to these headers. + +Wed Dec 28 22:55:55 1998 Kirthika Parameswaran + + * ace/DLL.h: Prevent copying and assignment by putting these + methods in the private part of the class. + +Mon Dec 28 17:57:25 1998 James CE Johnson + + * docs/tutorials/020/*: + Sooner than expected... A brief and basic intro to using + ACE_Shared_Memory_MM. + + * docs/tutorials/online-tutorials.html: + Linked in 019 and 020 + +Mon Dec 28 16:32:42 1998 James CE Johnson + + * docs/tutorials/019/*: + At long last, a basic Tutorial on ACE_Shared_Memory_SV. With + luck, 020 will be added soon to cover ACE_Shared_Memory_MM + +Mon Dec 28 11:21:40 1998 Douglas C. Schmidt + + * ace/Strategies.h: Put the "virtual" keyword in from of the + ~ACE_Reactor_Notification_Strategy to make it clear + that this destructor is virtual. Thanks to Greg Gallant + for pointing this out. + +Mon Dec 28 11:12:08 1998 David L. Levine + + * ACE-INSTALL.html: added SunOS 5.7 (Solaris 7) info. + +Mon Dec 28 10:52:20 1998 Carlos O'Ryan + + * */Makefile: + Updated dependencies. + +Mon Dec 28 02:34:59 1998 Nanbor Wang + + * examples/Service_Configurator/IPC-tests/server/server_test.cpp + (main): Allow loading in static services in this application. + Thanks to Peter J. Mason for reporting this. + + * ace/Service_Config.{h,i,cpp} (ACE_Service_Config): Changed the + default value of to 1. Otherwise, it is + not consistent with the initial value of + ACE_Service_Config::no_static_svcs_ and that's very confusing. + (open): Added one more argument with + default value of 1. This allow us to turn off this behavior + when opening Service_Config. Otherwise, the only other way is + to create a fake ACE_Service_Config and use that to change the + static variable . + +Sun Dec 27 21:51:10 1998 David L. Levine + + * etc/purify.solaris2: added a couple of MIU suppressions for + SunOS 5.7's thread library. + +Fri Dec 25 08:23:51 1998 Douglas C. Schmidt + + * ACE-INSTALL.html: Fixed a broken link to the ACE FAQ. Thanks to + Barry Hoggard for reporting this. + +Fri Dec 25 01:55:32 1998 Irfan Pyarali + + * ace/Hash_Map_Manager: There are two problems with the current + implementation of Hash_Map_Manager: + + (a) It requires a hash() method on the key type. If it is not + possible for the key type to have a hash() function (e.g., + the key is a primitive type such as an int, or is a pointer + type, or a three party class), the usual solution is to do + partial template specialization. + + This is usually not a very good option since some compilers + do not support partial template specialization. + + (b) The second problem is with comparing two keys. + Hash_Map_Manager assumes that keys can be compared using + operator==. This assumption causes problems in some cases, + e.g., when using char * as the key. Usually with char *, + you want to use strcmp and not compare pointers. + + Solution to these two problems is the new Hash_Map_Manager_Ex + class. Problem (a) is addressed by using a function object - the + type of which is specified by the user as an additional template + parameter. Problem (b) is addressed by using another function + object - the type of which is specified by the user as an + additional template parameter. So the new Hash_Map_Manager_Ex + takes five template parameters: + + + + Backward compatibility: Hash_Map_Manager now inherits from + Hash_Map_Manager_Ex, fixing the hash_key function object (which + simply calls key.hash()) and fixing compare_keys (which simply + uses operator== on the keys). + + There will be one problem: Users of compilers that do not + implicitly instantiate templates will have to update their list + of template instantiations. To help with this, please see + $ACE_ROOT/bin/Hash_Map_Manager_Helper.csh + + Other miscellaneous changes: Added two new classes: ACE_Hash + and ACE_Equal_To. ACE_Hash assumes a hash() method on T. + ACE_Equal_To compares by using operator==. However, the + ACE_Hash class has been specialized to work with: + + char, signed char, unsigned char, + short, unsigned short, + int, unsigned int, + long, unsigned long, + const char *, char *, + const wchar_t *, wchar_t *, + const ACE_USHORT16 *, ACE_USHORT16 *, + + Also, ACE_Equal_To has been specialized to work with: + + const char *, char *, + const wchar_t *, wchar_t *, + const ACE_USHORT16 *, ACE_USHORT16 *, + + Remember, you don't have to use these specialization. You can + always create your own. + + If we had default template parameters, we could default hash_key + to ACE_Hash and compare_keys could default to + ACE_Equal_To. + + BTW, note that the specialization with ACE_Hash and ACE_Equal_To + is not partial template specialization. It is complete template + specialization, and we don't know of compilers that cannot + handle complete template specialization. + + Since we now have template specialization, Hash_Map_Manager_T.* + files were created. I also took this opportunity to inline most + of the Hash_Map_Manager functions. + + Also, update the makefiles and project files. + + BTW, these changes grossly simplified + tests/Hash_Map_Manager_Test.cpp and tests/Map_Manager_Test.cpp. + These tests will now work with compilers that do not support + partial template specialization. Maybe James can change + Filecache to take advantage of these changes. + + Updated the following files with the new template instantiations: + + ace/Filecache.cpp + ace/Local_Name_Space.cpp + ace/Template_Instantiations.cpp + tests/Conn_Test.cpp + tests/Hash_Map_Manager_Test.cpp + tests/Map_Manager_Test.cpp + TAO/examples/Callback_Quoter/Notifier_i.cpp + TAO/examples/POA/On_Demand_Loading/Servant_Manager.cpp + TAO/examples/Simple/bank/AccountManager_i.cpp + TAO/orbsvcs/orbsvcs/AV/AVStreams_i.cpp + TAO/orbsvcs/orbsvcs/Event/EC_Gateway_UDP.cpp + TAO/orbsvcs/orbsvcs/Log/Logger_i.cpp + TAO/orbsvcs/orbsvcs/Property/CosPropertyService_i.cpp + TAO/orbsvcs/orbsvcs/Naming/CosNaming_i.cpp + TAO/orbsvcs/orbsvcs/Trader/Service_Type_Repository.cpp + TAO/orbsvcs/orbsvcs/Trader/Trader.cpp + TAO/orbsvcs/orbsvcs/Trader/Trader_Utils.cpp + TAO/tao/ORB.cpp + TAO/tao/ORB_Core.cpp + TAO/tao/Object_Table.cpp + TAO/tao/Operation_Table.cpp + TAO/tao/POA.cpp + examples/Map_Manager/test_hash_map_manager.cpp + + Thanks to Carlos for suggesting these changes. Most of these + were inspired by SGI's STL. + + If these changes are successful (i.e., nobody is hunting me down + for breaking their code ;-)), we should add a similar comparison + function object to Map_Manager, Collections in Containers_T that + require an operator==() (typically for remove() and find()) and + the RB_Tree. + + * ace/ACE (hash_pjw): hash_pjw is now available for char *, + wchar_t *, and ACE_UINT16 *. + + * ace/OS (strlen, strcpy, strcmp): These functions are now + available for char *, wchar_t *, and ACE_UINT16 *. + + * ace/SString.cpp (ACE_WString::strlen): Simply calls + ACE_OS::strlen. + + * ace/config-win32-common.h (ACE_HAS_WCHAR_TYPEDEFS_USHORT): Since + Win32 typedefs wchar_t as a 16 bit unsigned short, this can + potentially cause problems with function overloading. + Therefore, I added ACE_HAS_WCHAR_TYPEDEFS_USHORT to the Win32 + config file. This is very similar to + ACE_HAS_WCHAR_TYPEDEFS_CHAR. Thanks to David Levine for helping + with this. + +Thu Dec 24 09:37:32 1998 Douglas C. Schmidt + + * ACE version 4.6.8 released. + +Thu Dec 24 00:59:46 1998 Nanbor Wang + + * ace/Thread_Manager.h (ACE_Thread_Manager): Added a more complete + documentation of the deprecated method. Thanks to + Keith Brown for reporting this. + +Wed Dec 23 16:37:52 1998 David L. Levine + + * ace/config-sunos5.5.h,include/makeinclude/platform_sunos5_ghs.GNU: + updated so that links succeed. + +Wed Dec 23 15:58:53 1998 Nanbor Wang + + * ace/ACE.cpp (ldfind): Supress changing the 'dll' name if a + customized dll extension is used. + +Tue Dec 22 22:34:32 1998 David L. Levine + + * ace/config-sunos5.5.h,include/makeinclude/platform_sunos5_ghs.GNU: + added GreenHills compiler support. + + * ace/OS.h: don't use hrtime_t for ACE_hrtime_t if + ACE_LACKS_LONGLONG_T. + +Mon Dec 21 16:06:07 1998 Douglas C. Schmidt + + * ace/Shared_Memory_MM.i: Changed the remove() method to call + ACE_Mem_Map::remove() rather than ACE_Mem_Map::unmap() so the + code is consistent with the documentation. Thanks to James + Johnson for reporting this. + +Mon Dec 21 13:55:33 1998 David L. Levine + + * ace/Containers_T.{i,cpp} (ACE_Bounded_Set::is_full): On LynxOS + only, uninlined this function to avoid Internal Compiler Error + with native (3.0.0) compiler. Thanks to Carlos for this fix, + it had us stumped for quite a while. + +Sat Dec 19 18:27:07 1998 Douglas C. Schmidt + + * ace/Timer_Queue_Adapters.cpp (handle_signal): Cleaned up an + unused variable. Thanks to David Levine for reporting this. + +Fri Dec 18 09:30:57 1998 David L. Levine + + * ace/High_Res_Timer.h (elapsed_time_incr): added missing + const to member function declaration. + + * ace/config-sunos5.5.h: removed redundant + ACE_HAS_XPG4_MULTIBYTE_CHAR #define. + + * ace/config-sunos5.7.h: added this config, for Solaris 7. + + * apps/Gateway/Gateway/Gateway.cpp, + examples/ASX/Event_Server/Transceiver/transceiver.cpp + (handle_signal): added ACE_UNUSED_ARG (signum). + +Fri Dec 18 06:08:47 1998 Douglas C. Schmidt + + * ace/High_Res_Timer: Made several methods const. Thanks to Ulf + Jaehrig for reporting this. + + * ace/Thread.h (ACE_Thread): Removed a stray join(ACE_Thread_ID) + method. Thanks to Jody Hagins for reporting + this. + +Thu Dec 17 21:06:30 EST 1998 James CE Johnson + + * docs/tutorials/000: + Removed. This is redundant with the Chap* directories. + +Thu Dec 17 17:18:21 1998 Douglas C. Schmidt + + * include/makeinclude/platform_sco5.0.0-{nothread,fsu-pthread}.GNU: + This file was been modified to get rid of thread related stuff + until we can obtain the FSU threads library. Thanks to Michael + Preobrazhensky for this. + +Thu Dec 17 16:56:28 1998 David L. Levine + + * bin/create_ace_build: try /bin/find if /usr/bin/find doesn't exist. + + * ace/High_Res_Timer.cpp (elapsed_time): rearranged terms in + nanoseconds calculation to avoid overflow on machines that don't + have native 64-bit ints. Thanks to Greg Holtmeyer + for helping to track this problem down. + +Thu Dec 17 12:43:11 1998 Douglas C. Schmidt + + * ace: Removed the use of ACE_DEBUG within handle_signal() methods + to avoid portability problems. Thanks to Susan Liebeskind + for reporting this. + +Tue Dec 15 14:45:49 1998 David L. Levine + + * *.h: removed () from #pragma implementation argument. + Thanks to Christian v. Mueffling for reporting + this. + + * docs/ACE-guidelines.html: added Doug's warning about side effects + in ACE_DEBUG statements. + +Tue Dec 15 14:43:47 1998 Ossama Othman + + * ace/OS.{h,i},README: added lstat() and readlink() methods. + Use ACE_LACKS_LSTAT and ACE_LACKS_READLINK if lstat() and readlink() + aren't supported. + +Tue Dec 15 11:55:51 1998 Steve Huston + + * ace/ACE_Library.(mak mdp): Added Message_Queue.cpp to the files list. + + * examples/NT_Service/NT_Service.(mak mdp): MSVC 4.2 project file for + the NT_Service example. + +Tue Dec 15 11:27:24 1998 David L. Levine + + * ace/config-chorus.h: added ACE_LACKS_READLINK. + + * ace/config-psos*.h,config-vxworks-5.x.h: added ACE_LACKS_READLINK + and ACE_LACKS_LSTAT. + +Tue Dec 15 08:44:18 1998 Steve Huston + + * examples/NT_Service: New example program, shows how to create, + manipulate, and run an NT Service using the ACE_NT_Service class. + Muchas gracias to Gonzalo Diethelm for smashing this code into a + good example - useful enough to show how things work, but simple + enough to show all the useful functionality in one concise program. + +Tue Dec 15 07:32:49 EST 1998 Aniruddha Gokhale + + * OS.h: + + Moved the definition of IOV_MAX after we have included the + limits.h file. Before make ing this change, we were getting lots + of warnings on SunOS 5.6 about redefinition of IOV_MAX. + +Mon Dec 14 15:39:39 1998 Carlos O'Ryan + + * tests/Makefile: + Updated dependencies. + +Mon Dec 14 10:49:29 1998 Nanbor Wang + + * Static_Performance.dsw: Quick and dirty workspace to build + several static version's performance tests. + + * ace/ace_lib.dsp: Removed "__ACE_INLINE__=0" from the default + static release build settings. + + * performance-tests/Misc/basic_perf.dsp: + * performance-tests/Misc/context_switch_time.dsp: Added static + build configurations. + + * tests/RB_Tree_Test.dsp: Redid the project file. A VC 6 only + compiler option somehow got into the file. Thanks to Ulf + Jaehrig for reporting this. + +Mon Dec 14 10:24:59 1998 Fred Kuhns + + * ace/OS.h: Added #define for IOV_MAX 16 + +Mon Dec 14 08:35:11 1998 David L. Levine + + * BUG-REPORT-FORM: added a few FMMs. + +Mon Dec 14 08:27:11 1998 Steve Huston + + * tests/run_tests.sh: Enabled MT_Reactor_Timer_Test. + +Sun Dec 13 16:40:18 1998 Nanbor Wang + + * tests/MT_Reactor_Timer_Test.dsp: + * tests/tests.dsw: Added the new project file - + MT_Reactor_Timer_Test. + + * tests/run_tests.bat: Added MT_Reactor_Timer_Test into + one-button test for NT. + + * tests/MT_Reactor_Timer_Test.cpp: Changed the use of + ACE_OS::{read,write} to ACE::{recv,send}. + +Sat Dec 12 17:19:17 1998 Irfan Pyarali + + * ace/ACE.cpp (ldfind): If we specified a suffix which is not the + default suffix on the platform, the ldfind() operation should + not try to add the default platform suffix but use ours. + +Sat Dec 12 07:44:02 1998 John Lindal + + * ace/config-mklinux.h: added. + +Fri Dec 11 23:26:20 1998 Nanbor Wang + + * tests/Message_Queue_Test.cpp: Generalize the test to perform + "platform specific" message queue tests when applicable. + Currently, this only applies to VxWorks and Windows NT 4.0 or + above. + + * tests/DLL_Test.cpp (main): STL's implementation of auto_ptr + doesn't define an assignment operator that takes a pointer of T. + Changed to use constructor to initialize the auto_ptr my_hello. + +Fri Dec 11 16:30:44 1998 Ossama Othman + + * tests/Time_Value_Test.cpp: Removed the ACE_DISABLE_AUTOCONF_LONGLONG + macro. It broke ACE+autoconf on non-sun platforms. + +1998-12-11 Nanbor Wang + + * test/DLL_Test.dsp: Fixed configuration settings. Most of the + time, it's easier to add new projects by using the + bin/dsp2dsp.pl. + + * ace/Message_Queue.{h,cpp} (enqueue): Made sure all bytes in a message + block chain are accounted for. + (enqueue_tail,dequeue_head): Added two more methods into + ACE_Message_Queue_Base. They are the prefered methods to use. + +Fri Dec 11 15:09:43 1998 Ossama Othman + + * tests/Time_Value_Test.cpp: define ACE_DISABLE_AUTOCONF_LONGLONG + before including ace/inc_user_config.h. This will prevent + an automatically generated ACE Configuration Project config.h + header from defining ACE_UINT64, and thus allowing + Time_Value_Test.cpp to compile on platforms that define + ACE_HAS_STHREADS. Please read the comment in Time_Value_Test.cpp. + ACE_DISABLE_AUTOCONF_LONGLONG is not meant for general use! + +Fri Dec 11 14:05:11 1998 Steve Huston + + * tests/MT_Reactor_Timer_Test.(cpp h): Replaced the multithread + timer set/cancel test with sensible tests. + +Fri Dec 11 08:51:07 1998 David L. Levine + + * ACE-INSTALL.html: updated egcs version information. + + * VERSION: added ace-users/comp.soft-sys.ace info. + + * include/makeinclude/platform_osf1_4.0.GNU: added suppression + of warning 1136, conversion to integral type of smaller size + could lose data. cxx V6.1-029 spews out a bunch of them, + otherwise. + + * tests/Time_Value_Test.cpp: protected definition of __ACE_INLINE__. + Thanks to Ossama for reporting this. + +1998-12-11 Nanbor Wang + + * ace/Message_Queue.{h,i,cpp} (ACE_Message_Queue_Base): Added a + bunch of pure virture functions in the class to define the + common interface functions of a message queue. This allows up + to experiment different message queue implementations easily. + Most significantly, all queueing operations are simplified into + and method in ACE_Message_Queue_Base as + "standard" queueing operations. Inherited class, of course, can + add fancier queueing operations (as in ACE_Message_Queue.) + + (ACE_Message_Queue_NT): A new adapter class inherited from + ACE_Message_Queue_Base that implement a message queue using NT's + IO completion ports. As it's name implies, this is a + specialized version for NT. It is not as versatile as ACE's + general MQ implementation. However, this implementation + consumes less NT handles which in some circumstances may be a + big win (because ACE_Message_Queue uses cv and on NT, cv is + simulated and consumes 4 handles per cv. ACE_Message_Queue_NT + only uses one handle and one critical section.) + + Several features inherited from IO completion port are, the + waiting threads are release in LIFO order, and you can control + (at initialization time,) the max number of threads that can be + release by the message queue to run concurrently. + + Notice that the constructor and the method have different + signature compared with those of ACE_Message_Queue. You should + use ACE_Message_Queue_Factory to create a message queue on the + fly if so desired. + + Thanks to Mark Lucovsky and Karlheinz Dorn + for providing the idea. + + * ace/Message_Queue_T.h (dequeue): Added the new method to match + with the changes in ACE_Message_Queue_Base. + (create_NT_message_queue): A wrapper function to manufacture an + ACE_Message_Queue_NT. + + +Thu Dec 10 09:08:26 1998 David L. Levine + + * ace/config-chorus.h: added ACE_LACKS_FSYNC. + + * ACE-INSTALL.html: ACE/TAO build on Linux RedHat 5.2 + as well as 5.1. + + * ace/config-osf1-3.2.h: added getpgid () prototype, because + an old comment said that it was missing from the system headers. + + * ace/config-linux-common.h: replaced ACE_LACKS_GETPGID with + a getpgid () prototype. + + Thanks to Ivan Pascal for motivating the + above two getpgid () updates. + + * ace/config-sunos5.5.h: updated comment on why explicit + instantiation isn't used with Sun CC. Thanks to + William A. Hoffman for introducing + us to -instances=explicit. + +Wed Dec 09 22:59:38 1998 David L. Levine + + * ACE version 4.6.7 released. + +Wed Dec 09 18:03:58 1998 Irfan Pyarali + + * examples/Reactor/WFMO_Reactor/test_network_events.cpp (main): + Removed global variables and cleaned up some minor things. + +Wed Dec 09 07:02:06 1998 David L. Levine + + * README, VERSION: expanded mention of BUG-REPORT-FORM. + + * docs/ACE-guidelines.html: strengthened mention of ACE_ASSERT danger. + Thanks to Irfan for the example. + + * tests/run_tests.vxworks: re-enabled Timeprobe_Test, now that + ACE_ASSERTs have been fixed in ACE's Containers. + + * ace/config-linux-common.h,config-osf1-{3.2,4.0}.h: + removed ACE_LACKS_GETPGID. Thanks to + Ivan Pascal for reporting that + getpid () is supported on those platforms. + + * ace/config-linux-common.h: restored ACE_LACKS_GETPGID, + because ::getpgid () isn't found on Alpha with glibc 2.0.7. + + * tests/Timeprobe_Test.cpp: disabled ACE_ENABLE_TIMEPROBES, + because the ACE lib is built by default without them. + + * performance-tests/Misc/context_switch_time.cpp: disabled + Yield_Test on VxWorks, because it doesn't run properly there. + + * ace/config-tandem.h,README: removed ACE_HAS_STRUCT_PROTOENT_DATA, + because it is no longer used. Thanks to Ossama for reporting this. + + * tests/Collection_Test.cpp, + examples/Reactor/Misc/test_early_timeouts.cpp: + removed unused parameter names argc and argv. + + * tests/DLL_Test.cpp: added ACE_Auto_Basic_Ptr template + instantiation. + +1998-12-09 Irfan Pyarali + + * tests/Collection_Test.cpp: Added new test for ACE collections. + + * ace/Map_Manager.cpp (operator*): + * ace/Containers_T.cpp (operator*): + * ace/SPIPE_Acceptor.cpp (create_new_instance): + + Fixed ACE_ASSERT usage. + + * ace/config-vxworks5.x.h: Added ACE_LACKS_FSYNC. + + * ace/OS.i (fsync): Added ACE_NOTSUP_RETURN (-1). + +Tue Dec 08 21:39:16 1998 David L. Levine + + * include/makeinclude/platform_osf1_4.0.GNU,ACE-INSTALL.html: + enable DU 4.0 cxx 6.x warnings by default. To disable, if + you're using cxx 5.x, set CXX_VER to CXX_5 either on the + make command line, or in your environment. Thanks to + Gary York for being that last + cxx 6.x user to trip over this :-) + + * include/makeinclude/platform_lynxos.GNU: override + ACE_HAS_GNUG_PRE_2_8 to allow builds of all TAO tests + on LynxOS 3.0.0. Its g++ can handled nested classes, even though + it's in the 2.7 family. Thanks to Patty Hair + for suggesting that we try to build the tests on LynxOS. + +Tue Dec 8 19:50:49 1998 Douglas C. Schmidt + + * ace/Shared_Object.cpp: Changed the various default + implementations of init()/fini()/info() to return 0 rather than + -1 so that users won't have to subclass Service_Object just to + change the return value. Thanks to Eric Newton for motivating + this. + +Tue Dec 8 16:52:57 1998 Ossama Othman + + * ace/OS.{h,i}, ace/README: Added a fsync() method. Define + ACE_LACKS_FSYNC if ::fsync() isn't supported. + +Tue Dec 08 15:03:25 1998 Steve Huston + + * ace/NT_Service.{h cpp i}: Added a number of methods which can be + used to register, remove, and control an NT service. Also, + another macro, ACE_NT_SERVICE_RUN, which simplifies the setting up + and running the most common case, a single service. Huge thanks + to Gonzalo Diethelm for contributing + the bulk of this code! + +Tue Dec 08 11:22:56 1998 Chris Gill + + * ACE version 4.6.6 released. + +Tue Dec 08 10:45:56 1998 Nanbor Wang + + * ace/System_Time.h: Removed redundant ACE_Time_Date definition. + Thanks to Martin Krumpolec for reporting this. + +Mon Dec 07 22:58:53 1998 Irfan Pyarali + + * examples/Reactor/Misc/test_early_timeouts.cpp: On some + platforms, select() returns before the time value specified. + This tests counts the number of times this happens and the max + early timeout. + + * ace/DLL.cpp (open): Added a call to ACE::ldopen() before calling + ACE_OS::dlopen(). The allows us to find the library is + predefined places and also expand the file name to the correct + syntax (prefix and suffix) according to the platform. + + Also, fixed a bug where the flag has not + being consulted on a reopen. + + * ace/ACE.cpp (ldfind): Moved the code that calls + ExpandEnvironmentStringsA() from + ACE_Location_Node::open_handle() to ACE::ldfind(). This code is + more general and therefore belongs in ACE::ldfind(). + + * ace/Parse_Node.cpp and ace/Svc_Conf_y.cpp: Fixed the incorrect + use of ASYS_WIDE_STRING. Remember that the string returned from + ASYS_WIDE_STRING is only valid for that line of code ;) + +Mon Dec 7 19:10:24 EST 1998 James CE Johnson + + * docs/tutorials/ + * docs/tutorials/001/001.dsp + * docs/tutorials/002/002.dsp + * docs/tutorials/003/003.dsp + * docs/tutorials/004/004.dsp + * docs/tutorials/005/005.dsp + * docs/tutorials/006/006.dsp + * docs/tutorials/007/007.dsp + * docs/tutorials/008/008.dsp + * docs/tutorials/008/008-server/008-server.dsp + * docs/tutorials/008/008-direct/008-direct.dsp + * docs/tutorials/008/008-broadcast/008-broadcast.dsp + * docs/tutorials/009/009-directed/009-directed.dsp + * docs/tutorials/009/009-server/009-server.dsp + * docs/tutorials/009/009-broadcast/009-broadcast.dsp + * docs/tutorials/010/010.dsp + * docs/tutorials/011/011.dsp + * docs/tutorials/012/012.dsp + * docs/tutorials/013/013.dsp + * docs/tutorials/014/014.dsp + * docs/tutorials/018/018.dsp + * docs/tutorials/015/015-client/015-client.dsp + * docs/tutorials/015/015-server/015-server.dsp + * docs/tutorials/016/016.dsp + * docs/tutorials/017/017.dsp + * docs/tutorials/tutorials.dsw + Contributed by: + Stefan Ericsson + +Mon Dec 07 14:11:00 1998 Chris Gill + + * ace/README: added entries for ACE_LACKS_IOSTREAMS_TOTALLY + and ACE_HAS_BROKEN_CONDITIONAL_STRING_CASTS. Thanks to + Ossama Othman for reminding + me to do this. + +Mon Dec 07 09:27:04 1998 David L. Levine + + * ace/Stats.cpp (std_dev): added comments to not reformat + some code. It compiles with the Diab compiler for pSoS + the way it is. + +Sun Dec 06 23:59:29 1998 Irfan Pyarali + + * config-sunos5.5.h: Added back ACE_HAS_TIMER_SKEW. It is really + required. See me for an example that illustrates this need. + +Sun Dec 06 16:05:00 1998 Chris Gill + + Changes for pSOS port: ACE now compiles for pSOSystem 68k targets using + the Diab D-C++ 4.2a compiler release, and links with all but the + following ACE tests: Conn_Test, Handle_Set_Test, OrdMultiSet_Test, + Priority_Reactor_Test, Process_Strategy_Test, Reactor_Performance_Test, + and TSS_Test. + + * ace/Log_Msg.cpp + ace/Log_Record.{cpp, h} + ace/streams.h + ace/SString.cpp + ace/config-WinCE.h + ace/config-psos-diab.h + tests/test_config.h: Rearranged log print methods so that logging + can still be done on platforms where iostreams are not sufficiently + supported. Added ACE_LACKS_IOSTREAMS_TOTALLY to select this + behavior, and defined it in pSOS Diab config header (also added to + Windows CE config header, to simplify factoring out Win CE specific + logging methods). + + * include/makeinclude/platform_psos_diab.GNU + ace/OS.{cpp, h, i}: Removed Diab supplied library calls so ACE now + links directly to pSOSystem libraries. + + * ace/Parse_Node.cpp + ace/Stats.cpp: Modifications to circumvent bugs in the Diab 4.2a + compiler's handling of conditional operators. + +Sun Dec 06 08:32:36 1998 David L. Levine + + * ace/Containers_T.cpp,Local_Name_Space_T.cpp, + Name_Request_Reply.cpp,Service_Config.cpp,Service_Manager.cpp, + Svc_Conf.y,Svc_Conf_Tokens.h,Svc_Conf_y.cpp, + Time_Request_Reply.cpp,Trace.cpp: + use ACE_NLOGGING instead of ACE_NDEBUG. + +Sat Dec 05 21:45:00 1998 David L. Levine + + * ace/Containers_T.cpp,Local_Name_Space_T.cpp, + Name_Request_Reply.cpp,Service_Config.cpp,Service_Manager.cpp, + Svc_Conf.y,Svc_Conf_Tokens.h,Svc_Conf_y.cpp, + Time_Request_Reply.cpp,Trace.cpp: + added if NDEBUG protection to some local variables and + ACE_UNUSED_ARG to some parameters to avoid compiler warnings + when ACE_DEBUG is disabled. Thanks to Faron Dutton + for reporting this. + + * ace/Makefile (Svc_Conf_Tokens.h): escaped $\I\d$ string so + that it doesn't get expanded in the Makefile itself. + +Sat Dec 5 16:06:27 1998 Darrell Brunsch + + * ace/Local_Name_Space_T.cpp: Protected some of the ACE_DEBUG + statements with a ACE::debug () check. + +Fri Dec 04 13:46:12 1998 David L. Levine + + * ace/Stats.cpp (std_dev): fixed difference calculation so + that it always calculates a non-negative value. + + * performance-tests/Misc/context_switch_time.cpp + (High_Priority_Synchronized_Task::svc): check if nsec is >= + mutex_acquire_release_time, to avoid adding in negative + context_switch_times. + + * ace/config-vxworks5.x.h, + include/makeinclude/platform_vxworks5.x_g++.GNU, + include/makeinclude/platform_vxworks5.x_ghs.GNU: moved -DVXWORKS + from platform_vxworks5.x_* files to config-vxworks5.x.h, to reduce + command-line clutter a bit. + +Fri Dec 4 12:45:04 1998 James CE Johnson + + * docs/tutorials/linify: + * docs/tutorials/combine: + * docs/tutorials/fixMakefile: + Ensure that perms are 755 and that #!/.../perl is not used + +Wed Dec 02 14:21:34 1998 Nanbor Wang + + * ace/OS.i (fstat): This function needs to close down the c handle + opened by _open_osfhandle to avoid resource leaks on Win32. + Thanks to Christian Korn for reporting + this. + +Tue Dec 01 13:48:51 1998 Nanbor Wang + + * ace/config-freebsd-pthread.h: Added ACE_HAS_SIGWAIT. Also added + ifdef section to prevent threaded ACE from compiling on FreeBSD + under 3.0 (excluded.) + +Tue Dec 1 22:22:42 1998 Douglas C. Schmidt + + * ace/Synch.h: Added a comment to clarify the semantics of + ACE_RW_Process_Mutex. Thanks to Stanislav Meduna + for reporting this. + +Tue Dec 01 17:22:00 1998 Kirthika Parameswaran + + * tests/DLL_Test: Added the .dsp and tests.dsw to the + repository. + + * tests/run_tests.bat: Added an entry for DLL_Test. + +Tue Dec 01 13:54:35 1998 David L. Levine + + * ace/OS.h: added ESUCCESS definition (to 0), if not #defined. + +Tue Dec 01 13:48:51 1998 Nanbor Wang + + * ace/config-freebsd-pthread.h: Added ACE_HAS_SIGWAIT. Also added + ifdef section to prevent threaded ACE from compiling on FreeBSD + under 3.0 (excluded.) + + * ace/OS.i (sigwait): FreeBSD 3.0 supports sigwait. Changed the + ifdef condition to support sigwait for 3.0 or above. Thanks to + Bob McWhirter and Russell L. Carter + for helping to track this down. + +Tue Dec 01 12:59:57 1998 James CE Johnson + + * ace/IOStream_T.i (recv,recv_n): set errno to ESUCCESS + because it was never being set to ETIME when the read timed + out. (Before entering the peer_->recv/recv_n, errno was + ENOENT from previous activities and was the same after in + both positive & negative tests until I did the reset.) + (eof): cleaned up a bit. + + I tested against IOStream_Test for both positive and + negative. For the positive test, I changed the sleep() at + line 363 to a much larger value. The client worked fine. + For the negative test, I replaced the spleep() with a + close() & return() pair. The client saw the closure and + exited as expected. + +Tue Dec 1 08:55:48 PST 1998 James Hu + + * ace/Memory_Pool.cpp: Since type key_t might be something + other than int (e.g., a long), some additional code was needed + to support the sscanf. + +Tue Dec 01 10:49:00 1998 Chris Gill + + * tests/Win32clerk.conf + tests/Win32server.conf + tests/Win32tokens.conf: removed explicit path for netsvcs dll, as + this dll is now being moved to ACE_wrappers/bin after it is built + and the explicit path was causing dlopen to fail rather than + searching the path on NT, which caused Time_Service_Test to fail. + +Tue Dec 01 10:07:48 1998 David L. Levine + + * ACE version 4.6.5 released. + +Tue Dec 1 00:07:05 PST 1998 James Hu + + * ace/Containers_T.h: + * ace/Containers_T.i: + Fixed a bug introduced when someone genericized the creation + strategy for ACE_DLList. The removal routing had not been + similarly genericized. Thanks goes to Martin Krumpolec + for spotting the problem. + + +Mon Nov 30 19:10:23 1998 Kirthika Parameswaran + + * examples/DLL/Makefile: + * examples/DLL/Makefile.Today: + * examples/DLL/Makefile.Newsweek: + + Added the above makefiles. Makefile internally uses + Makefile.Today and Makefile.Newsweek to build the libraries + seperately. + +Mon Nov 30 13:54:04 1998 Douglas C. Schmidt + + * netsvcs/lib/Server_Logging_Handler_T.cpp (handle_input): There + was a friggin' bug in this code that is a violation of Reactor + framework design rule #2, i.e., we were returning a non-0 value + from handle_input(), which is a no-no... Thanks to Steve Huston + for reporting this. + +Mon Nov 29 13:16:53 EST 1998 James CE Johnson + + * docs/tutorials/001/logger.h: + * docs/tutorials/001/page04.html: + * docs/tutorials/003/client.cpp: + * docs/tutorials/003/page01.html: + Added a blurb about the additional parameters to the recv(), + recv_n(), send() and send_n() method calls of ACE_SOCK_Stream. + +Sun Nov 29 22:14:32 1998 David L. Levine + + * ace/OS.i,cpp (exit): with ACE_HAS_NON_STATIC_OBJECT_MANAGER, + call ACE_Object_Manager::fini (). Uninlined to avoid circular + include problems with Object_Manager.h. The ACE_Object_Manager + instantiation on main's stack is not destroyed by ::exit (), + so this addition causes the ACE_Object_Manager to be + properly shutdown. Thanks to Jeff Greif + for pointing out that automatic objects are not destroyed + by ::exit (). + + * ace/Object_Manager.h: added Jeff Greif's ACE_OS::exit () + recommendations in comments. + +Sun Nov 29 20:13:15 1998 Kirthika Parameswaran + + * examples/DLL/Today.cpp: + * examples/DLL/Newsweek.cpp: + + Added ACE_BUILD_SVC_DLL and ACE_Svc_Export directives needed for the + extern "C" create_magazine function. + +Sun Nov 29 18:22:52 1998 Nanbor Wang + + * tests/Thread_Pool_Reactor_Test.cpp: Removed the use of + "main_reactor". The "main_reactor" was added to handle incoming + connections because this test was not working correctly without + moving out the acceptor to another reactor. However, I recently + found that the problem was actually due to the deadlocked + notify_handler which I fixed a while back. + + * ace/OS.h: Added forward declarations of ACE_Time_Value's + operator{+,-} so VC 6.0 won't get confused with the + operator{+,-} in namespace std. Thanks to Victor Yu + for reporting this. + +1998-11-29 James CE Johnson + + * docs/tutorials/007/page09.html: + Added warnings about a possible core dump when an event handler + exists in the thread pool's message queue after the handler has + been destroyed. Jeff Donner's work with + Tutorial 007 on Win32 lead to this discovery. + +Sat NOv 28 20:02:08 1998 Kirthika Parameswaran + + * examples/DLL/Today.cpp: + * examples/DLL/Newsweek.cpp: + + Added the #ifdef directive needed to seperate out the + functionality on NT and UNIX platforms. + +Sat NOv 28 20:02:08 1998 Kirthika Parameswaran + + * examples/DLL/Dll.dsw: + * examples/DLL/Test_dll.dsp: + * examples/DLL/Today.dsp: + * examples/DLL/Newsweek.dsp: + + Added to the repository. The test successfully executes on NT. + + * examples/DLL/README: Modified to add information on how to + execute this test example on NT. + +Fri Nov 27 13:32:38 1998 Kirthika Parameswaran + + * examples/DLL/test_dll.cpp (main): Added right arguments to the + ACE_ERROR_RETURN macro. + +Thu Nov 26 21:04:05 1998 Kirthika Parameswaran + + * examples/DLL/Makefile: + * examples/DLL/Today.{h,cpp}: + * examples/DLL/Newsweek.{h,cpp}: + * examples/DLL/Magazine.h: + + Placed the comments at the right place and added an descriptive + header wherever missing in the .h files. + + * examples/DLL/test_dll.cpp (main): Added auto_ptr for the + Magazine class object pointer. + + * examples/DLL/README: Added to the repository. + +Wed Nov 25 02:02:32 1998 Kirthika Parameswaran + + * examples/DLL/Makefile: + * examples/DLL/Today.{h,cpp}: + * examples/DLL/Newsweek.{h,cpp}: + * examples/DLL/Magazine.h: + * examples/DLL/test_dll.cpp: + + Added these files. This test example shows how dynamically linked + library objects can be loaded on demand and their methods accessed + on getting an pointer to these objects. + +Wed Nov 25 22:28:44 1998 Carlos O'Ryan + + * ace/INET_Addr.cpp: + Reverted the behavior to version 4.35, we don't use the first + alias as the hostname, but the value returned in the h_name + field. + This change was to support TAO in our local site, but it caused + many problems for other configurations of /etc/hosts and DNS. We + found another workaround for our local site which makes more + sense to the rest of the world. + +Wed Nov 25 20:34:12 1998 Kirthika Parameswaran + + * tests/DLL_Test.cpp (main): Removed ACE_OS::strcat which was + concatenating a string literal with a defined string. + +Wed Nov 25 12:01:20 1998 Ossama Othman + + * apps/gperf/gperf.texi: + * apps/gperf/gperf.info: + * apps/gperf/texinfo.tex: + * apps/gperf/version.texi: + + updated gperf.texi to work with recent versions of makeinfo (e.g. 1.68, + available in GNU texinfo-3.12). Regenerated gperf.info with latest + makeinfo (1.68). Added texinfo.tex to make available certain TeX + macros for texinfo to TeX converters. Added version.texi to centralize + gperf update dates and versions (gets included by gperf.texi). + +Wed Nov 25 12:01:20 1998 David L. Levine + + * performance-tests/Misc/context_switch_time.cpp (main): fixed + printouts by performing floating point division, instead of + converted integer division to double. Added checks of + activate () return values. + + * ace/OS.cpp (sched_params,lwp_getparams,lwpsetparams): set + LWP priority on Suns, even if only using the ACE_HAS_PTHREADS + interface. Though, we still don't get preemption if only using + that interface. performance-tests/Misc/preempt.cpp demonstrates + that. + + * ace/config-osf1-4.0.h: removed ACE_LACKS_THREAD_PROCESS_SCOPING. + DU 4.0 seems to have process scoping, though I think only + the superuser can use it. + +Wed Nov 25 10:48:42 1998 Douglas C. Schmidt + + * ace/Task.cpp: Fixed a bug whereby we weren't inheriting the + group id correctly when joining a group of existing threads. + Thanks to Valery Arkhangorodsky for + pointing this out. + +Tue Nov 24 03:50:09 1998 Kirthika Parameswaran + + * tests/DLL_Test.cpp: Renamed DLL_Wrapper_Test.cpp to + DLL_Test.cpp. Also, added ACE_OBJ_SUFFIX which takes care of the + object code convention on NT and UNIX platforms. Changed the + messages in ACE_ERROR to come from ACE_DLL::error(). + This is a running version tested using CC compiler too. + +Tue Nov 24 17:45:26 1998 Steve Huston + + * netsvcs/clients/Naming/Dump_Restore/Makefile: Added a LIBS += + $(ACELIB) to help this build on AIX. Thanks to Jon Lindgren + for reporting this problem. + + * README: Added Jon Lindgren to the contributor's list. Welcome, Jon! + +Tue Nov 24 09:34:58 1998 David L. Levine + + * include/makeinclude/platform_chorus.GNU: added support for + exceptions=0/1 make option. Thanks to Wei Chiang for + requesting this. + + * include/makeinclude/platform_chorus_ghs.GNU: removed + trailing / from MVME_DIR definition. + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: added + optimize=1, to enable optimization by default. + + * performance-tests/Misc/context_switch_time.cpp (main): + don't print suspend-resume results if the suspend-resume + test isn't run (because thr_suspend isn't supported). + Process command line options before calulating hi-res timer + scale factor. + + * ace/OS.h: replaced ENOTSUP with EDEADLK in a comment, + to fix a copy-and-paste error. + + * ace/Stats.* (mean): removed caching. It didn't account for + the fact that it could be called with different scale + factors. (std_dev): fixed sum_of_squares calculation to + always use 64-bit arithmetic. (print_summary): if the + std dev calculation overflows, retry with smaller scale + factor, until 0 is reached. + + * tests/Conn_Test.cpp: replaced #include of ace/Auto_Ptr.h, + because ACE_Auto_Basic_Array_Ptr is used. + +Mon Nov 24 03:30:36 1998 Kirthika Parameswaran + + * tests/DLL_Wrapper_Test.cpp: Added a test example for the DLL + wrapper class. + + * tests/Makefile: Added an entry for DLL_Wrapper_Test example. + +Mon Nov 23 23:49:36 1998 Kirthika Parameswaran + + * ace/DLL.h: Made the default value of the close_on_destruction + equal to 1. + + * ace/DLL.cpp (~ACE_DLL): Checked whether the member variable, + close_on_destruction_ is non-zero instead of comparing it to 1. + +Mon Nov 23 21:14:22 1998 Kirthika Parameswaran + + * ace/DLL.h (ACE_DLL): Set the default of close_on_destruction to + 1 instead of 0. + + * ace/DLL.cpp (~ACE_DLL): In the close operation, made a check for + whether the close_on_destruction_ flag was equal to 1 instead of + 0. + + * ace/DLL.cpp (get_handle): Made the close_on_destruction_ flag + equal to 0 when it gets orphaned as now the new owner has to + explicitly close the library. + +Mon Nov 23 20:29:52 1998 Douglas C. Schmidt + + * ace/DLL: Cleaned up the comments and also fixed an unnecessary + check to see if dll_name == 0. + +Mon Nov 23 10:20:22 1998 Kirthika Parameswaran + + * ace/DLL.h: Added a comment which specified that by default the + library would be closed before the ACE_DLL object gets + destroyed. + + * ace/DLL.cpp (get_handle): Changed the value for the member + variable, close_on_destruction_ to 1 on orphaning the handle + and giving it to the new owner. + +Mon Nov 23 17:14:40 1998 Alexander Babu Arulanthu + + * examples/Reactor/Proactor/test_proactor.cpp (open): It is even + more neat to do this for faking the result. + // for Accept would have already moved the + // forward. Update it to the beginning position. + duplicate.wr_ptr (duplicate.wr_ptr () - bytes_transferred); + +Mon Nov 23 17:16:46 1998 Irfan Pyarali + + * ace/OS.h: Set the value of ACE_SHLIB_INVALID_HANDLE to 0 for HP. + Thanks to Steve Huston for providing this + information. + +Mon Nov 23 16:16:26 1998 Alexander Babu Arulanthu + + * examples/Reactor/Proactor/test_proactor.cpp: Updated the code to + show that adjusting wr_ptr () to the place of rd_ptr () is the + better way to fake results properly. Thanks to "James A. Risinger" + for reporting this problem. + +Mon Nov 23 12:58:47 1998 Douglas C. Schmidt + + * examples/ASX/Message_Queue, + tests: + Replaced the improper (though technically correct) use of the + rd_ptr() with wr_ptr(). Thanks to Susan Liebeskind + for reporting this. + +Mon Nov 23 10:47:38 1998 David L. Levine + + * bin/generate_man_pages: added this script, which generates + the ACE man and html pages. + + * Makefile (release): added call to bin/generate_man_pages. + +Sun Nov 22 22:58:39 1998 Douglas C. Schmidt + + * ace/SPIPE_Addr.h: Replaced the use of an anonymous struct so + that class2man will be happy. Thanks to David Levine for + reporting this. + +Sun Nov 22 22:07:04 1998 David L. Levine + + * ace/Functor*: removed trailing // EOF because class2man choked + on it. + +Sun Nov 22 14:36:26 1998 Alexander Babu Arulanthu + + * examples/Reactor/Proactor/test_proactor.cpp (open): Updated the + test to show the correct way to 'fake' call. + +Sun Nov 22 13:57:28 1998 Douglas C. Schmidt + + * ace/Makefile: Added Env_Value_T to the TEMPLATE_FILES macro in + the Makefile. Thanks to Ossama for reporting this. + +Sat Nov 21 14:32:53 1998 Douglas C. Schmidt + + * ace/DLL: Cleaned up the DLL logic to handle "close on + destruction" properly. + +Sat Nov 21 08:34:44 1998 David L. Levine + + * ace/OS.h: added ACE_LACKS_IP_ADD_MEMBERSHIP, for internal + use only. If IP_ADD_MEMBERSHIP isn't defined, ACE defines + ACE_LACKS_IP_ADD_MEMBERSHIP for subsequent use in + determining whether to define ip_mreq. + + * bin/html-windex: updated to match Doug's ~/bin version. + +Fri Nov 20 00:58:35 1998 Kirthika Parameswaran + + * ace/DLL.h (ACE_DLL): Added a new constructor which allows auto + opening of the dynamically linked library. + + * ace/DLL.h (get_handle): Added a method which returns teh handle + to the user. + + * ace/DLL.cpp (ACE_DLL): Added the auto-open feature taking care + of more than one open calls. + + * ace/DLL.cpp (get_handle): The orphan flag decides whether the + handle is orphaned or given to the user temporarily. + + * ace/DLL.cpp (open): Added a check so that a already existing + handle is closed before the next open is done. + +Fri Nov 20 23:40:12 1998 James CE Johnson + + * docs/tutorials/00[567]/client_handler.cpp : + * docs/tutorials/00[56]/page0[45].html + * docs/tutorials/007/page0[56].html + Rework the interaction of handle_input(), handle_close() and + close(). I had this all wrong by making handle_close() invoke + remove_handler() when it was unnecessary. + +Fri Nov 20 22:12:03 1998 Kirthika Parameswaran + + * ace/Makefile: Added an entry for DLL.{h,cpp}. + +Fri Nov 20 15:49:04 1998 Irfan Pyarali + + * ace/OS.h: Added ACE_SHLIB_INVALID_HANDLE which is used to + indicate a invalid shared library handle. + + * examples/Reactor/WFMO_Reactor/test_handle_close.cpp: This + application tests whether handle_close() gets called and if the + correct masks are passed along. The handler should get + handle_close() called for all three masks (READ, WRITE, and + EXCEPT). + + * ace/WFMO_Reactor.cpp (remove_handler_i, + remove_suspended_handler_i, and remove_to_be_added_handler_i): + There was a bug in WFMO_Reactor where handle_close() was not + called when it is not a complete removal. Added a call to + handle_close() for all the masks that were removed. Note that + partial removals do not change the state of the internal tables + of the reactor. + + * ace/OS.i (recvfrom): There is a bug in the Win32 implementation + of this function. It reports an error (with errno=WSAEMSGSIZE), + even MSG_PEEK is specified, when the message was too large to + fit into the specified buffer and was truncated. So we fixed it + by returning the length of the recv request when + errno=WSAEMSGSIZE and the MSG_PEEK flag was specified. + +Fri Nov 20 11:15:40 1998 David L. Levine + + * ace/config-sunos5.5.h: changed comment to use + -D_POSIX_PTHREAD_SEMANTICS to specify POSIX threads only. + Just commenting out ACE_HAS_STHREADS in insufficient. + See the Intro (3) man page for information on + -D_POSIX_PTHREAD_SEMANTICS; it's the Sun-recommended + way to specify use of POSIX threads. Thanks to + Rich Christy for pointing out that + removal of ACE_HAS_STHREADS doesn't work. + + * ACE-INSTALL.html: added notes on thread flavors on Solaris. + + * include/makeinclude/platform_sunos5_g++.GNU: added support + for threads=0. + + * ace/OS.cpp (thr_create): added static cast of PTHREAD_STACK_MIN + to size_t, to avoid signed/unsigned comparison on + g++ 2.7.2.3/Solaris86 2.6. + +Thu Nov 19 23:04:37 1998 Irfan Pyarali + + * ace/Functor.h (ACE_Command_Base): Added missing ACE_Export. + +Thu Nov 19 18:01:00 1998 Kirthika Parameswaran + + * ace/DLL.cpp (ACE_DLL): Made base-member initialisation change + to member variable close_mode_. + +Thu Nov 19 10:28:11 1998 David L. Levine + + * performance-tests/Misc/context_switch_time.cpp: fixed 64-to-32 + bit casts to work with unsigned 64 bit ACE_hrtime_t on NT. + +Wed Nov 18 20:56:38 1998 Kirthika Parameswaran + + * ace/DLL.{cpp,h} (ACE_DLL): Added the close-on-destruction + feature in the constructor of the ACE_DLL class. + +Thu Nov 19 00:18:26 1998 Irfan Pyarali + + * ace/OS.i (strnstr): Added a check to see if the substring is + longer than the string being searched. Fixed both the char and + wchar_t versions in OS.i and the ACE_USHORT16 version in + SString.cpp. Thanks to Knut Johannessen for + pointing out the bug and providing a fix. + + * ace/SString.i (find): The argument to strnstr() should be the + length of instead of len_ - pos>. + + * tests/SString_Test.cpp (main): Added tests to make sure that + find() and strstr() work even when the substring is longer that + the original string. + + * ace/Timeprobe_T.h (ACE_Timeprobe): Added accessors to the class + so that the user can get to the internals. This allows the + users to format the output of collecting the timeprobes + according to their liking. + +Wed Nov 18 15:51:42 1998 David L. Levine + + * ace/Basic_Types.h (ACE_UINT64_DBLCAST_ADAPTER): on other + than Win32 and without ACE_LACKS_LONGLONG_T, wrapped the + "n" macro definition with parenthesis, to avoid insidious + errors in equations due to removing the grouping. g++ 2.7.2.3 + noticed this on the latest context_switch_time.cpp. + + * ace/Svc_Handler.cpp (cleanup_hint): fixed ACE_TRACE string. + + * *.cpp: changed include protection from #if !defined to ifndef. + Added #pragma once, if possible, i.e., after #include of + an ace/ header. It can only be done after ace/config.h + is included, because some platforms don't allow #pragma once. + +Wed Nov 18 15:54:09 EST 1998 James CE Johnson + + * docs/tutorials/007/client_handler.cpp + * docs/tutorials/007/page06.html + + Jeff Donner (jdonner@schedsys.com) points out that Susan Liebskind's + fix to Tutorial 6 should also be applied to this one. + + The fix is: + Don't call baseclass close() from Client_handler::close(). Doing + so will result in double-delete of the handler object. + +Wed Nov 18 00:25:08 1998 Kirthika Parameswaran + + * ace/DLL.{h,cpp} (ACE_DLL): + Wrapper for dynamically linked library operations. + +Tue Nov 17 11:15:00 1998 Chris Gill + + * tests/version_tests/RB_Tree_Test.dsp + tests/version_tests/version_tests.dsw : created RB_Tree_Test project + for NT version tests and added it to version tests workspace. + +Tue Nov 17 10:15:10 1998 Nanbor Wang + + * ace/Map_Manager.cpp (resize_i): Made sure the new elements in + resize_i get constructed properly so we can use more complex + classes with it. Thanks to Knut Johannessen + for providing the patch. Also changed to use copy constructor + to move data across rather than construct/assign pair. + +Tue Nov 17 09:37:32 1998 David L. Levine + + * ace/config-linux-common.h: removed + ACE_HAS_BROKEN_EXPLICIT_DESTRUCTOR because it caused compilation + failure with egcs 1.0.2. + + * ace/config-g++-common.h: added ACE_HAS_BROKEN_EXPLICIT_DESTRUCTOR, + with egcs >= 1.1 only. Thanks to James Johnson for helping + to sort this out. + + * ace/config-osf1-4.0.h: moved ACE_HAS_BROKEN_EXPLICIT_DESTRUCTOR + from common area to DEC CXX area, because config-g++-common.h now + handles g++. + + * ace/IOStream_T.i (eof): fixed return value calculation + logic. Thanks to Arturo and James Johnson for providing + and verifying the fix. + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: + added -DVXWORKS to CFLAGS, because GHS 1.8.9 needs it. + (GHS 1.8.8 had a built-in processor define for it. Adding + -DVXWORKS doesn't seem to bother 1.8.8.) Thanks to Steve + Kay for reporting this. + + * ace/OS.h: even if ACE_HAS_IP_MULTICAST is not defined, if + IP_ADD_MEMBERSHIP is defined, assume that the ip_mreq struct + is also defined (presumably in netinet/in.h). This allows + compilation to succeed on GHS 1.8.9/VxWorks. Thanks to + Steve Kay for reporting it. + +Tue Nov 17 09:12:00 1998 Chris Gill + + * ace/SString.{h, i}: added < , > operators to string classes + + * apps/JAWS/PROTOTYPE/HTTPU/http_headers.cpp + tests/RB_Tree_Test.cpp: added missing template instantiations + + * tests/Makefile + tests/run_tests.sh : added RB_Tree test to UNIX makefile, test script + +Mon Nov 16 17:55:00 1998 Chris Gill + + * ace/Functor_T.{h, i} + ace/RB_Tree.{cpp, h, i} : added less-than comparison functor + (aka function object aka GOF Command Pattern) to allow ACE_RB_Tree + to be used with key types that do not support a < operator. + Thanks to Mark De Jong for reporting the less-than + problem and suggesting part of the solution. Also cleaned up class + naming and comments to conform to ACE coding standards, fixed an + access violation that occurred when deleting items from a tree. + + * tests/RB_Tree_Test.{cpp, dsp} + tests/run_tests.bat + tests.dsw: Added a test to verify correct tree + behavior under insertion and deletion for different key and item + types and insertion orders. + + * apps/JAWS/PROTOTYPE/HTTPU/http_headers.{cpp, h}: Changed type names + for ACE_RB_Tree and associated classes. + +Sun Nov 15 16:34:11 1998 David L. Levine + + * ace/config-osf1-4.0.h,config-linux-common.h: added + ACE_HAS_BROKEN_EXPLICIT_DESTRUCTOR #define. Thanks to + James Johnson for reporting that it is necessary. + + * ace/config-kcc-common.h: removed commented-out + ACE_HAS_BROKEN_EXPLICIT_TEMPLATE_DESTRUCTOR #define. + +Sun Nov 15 12:40:35 1998 James CE Johnson + + * docs/tutorials/018/* + * docs/tutorials/online-tutorials.html + A new tutorial on ACE_Token. + +Sun Nov 15 12:10:39 1998 James CE Johnson + + * docs/tutorials/013/* + + A few more tweeks now that the sun is up. Mostly simple + documentation changes but a couple of cleanups on the code as well. + +Sat Nov 14 23:15:58 EST 1998 James CE Johnson + + * docs/tutorials/013/message_queue.cpp + docs/tutorials/013/block.cpp + docs/tutorials/013/block.h + docs/tutorials/013/combine.shar + docs/tutorials/013/*.html + + Something changed between 4.5.x and 4.6 with the calling + order for ACE_Lock_Adapter<>::release() and ::destroy(). + + Specifically: In the older release, the data block's + lock was being held across its destruction. That required + some odd things to prevent the lock's deletion until it + was released. + + In the new version, it appears that release() is called + on the lock before the data block's destructor is called. + Data_Block::Lock::destroy() can now simply 'delete this' + The funky destroy_ flag is no longer necessary. + + Thanks to Bob McWhirter for causing me + to look back on this and get it fixed. + + I've also taken this opportunity to convert the tutorial + to the new style colorized HTML. + +Sat Nov 14 22:01:52 1998 David L. Levine + + * bin/make_release (diff): fixed logic that determines + when to use ../diffs/ instead of diffs/. Thanks to + Doug for reporting this. + +Sat Nov 14 14:21:49 1998 Douglas C. Schmidt + + * ACE version 4.6.4 released. + +Fri Nov 13 12:03:18 1998 Carlos O'Ryan + + * ace/config-irix6.x-sgic++.h: + * ace/config-irix6.x-sgic++-nothreads.h: + Under some versions of IRIX 6.X the readdir_r() prototype does + not show up unless threads support (actually POSIX1c support) is + enabled. I've change the config file to only use readdir_r() if + threads are enabled. Thanks to Bob Olson for + reporting this problem. + +Fri Nov 13 08:55:18 1998 David L. Levine + + * tests/Pipe_Test,Process_Mutex_Test.cpp: wrapped some variables + and functions with #ifndef ACE_LACKS_FORK, to avoid warnings + on g++/VxWorks. + +Thu Nov 12 09:07:28 1998 David L. Levine + + * bin/make_release: use ../diffs if building ace+tao kit, so + we no longer need a ../diffs symlink in TAO directory. Thanks + to Hans Rohnert for motivating this. + + * ace/README: removed ACE_LACKS_STREAM_MODULES. Thanks to + Ossama for reporting that it's no longer used. + +Wed Nov 11 23:11:15 1998 Darrell Brunsch + + * bin/ACEutils.pm: Updated to include $EXEPREFIX, which is used + in front of executables in the run_test.pl's. + +Wed Nov 11 01:08:32 1998 Nanbor Wang + + * ACE-INSTALL.html: Added a link to Ossama's ACE Configuration + Project. + +Tue Nov 10 22:29:00 1998 Douglas C. Schmidt + + * ACE version 4.6.3 released. + +Tue Nov 10 22:24:59 1998 Douglas C. Schmidt + + * docs/tutorials: Integrated Umar's code examples from + the ACE programmers manual. + +Tue Nov 10 21:53:01 1998 David L. Levine + + * ace/Process.cpp: added const to loop index, in CHORUS code. + +Tue Nov 10 19:27:32 1998 Darrell Brunsch + + * ace/OS.[i,cpp]: + Added checks for ACE_HAS_WINNT4 != 0 when checking for + ACE_HAS_WINNT4 like we do elsewhere. Thanks to Valery + Arkhangorodsky for pointing this out. + +Tue Nov 10 14:56:38 EST 1998 James CE Johnson + + * docs/tutorials/index.html + Including #17 now + + * docs/tutorials/017/*.html + docs/tutorials/017/combine.shar + Completed! Commented and converted into standared Tutorial format. + +Tue Nov 10 10:09:06 1998 David L. Levine + + * tests/Env_Value_Test.cpp (main): replaced hard-coded "/" with + ACE_DIRECTORY_SEPARATOR_STR. + + * ace/config-vxworks5.x.h: removed ACE_HAS_VERBOSE_NOTSUP #define. + Thanks to Margherita Vittone Wiersma and + Ramiro Penataro Blanco for complaining + about it. + +Mon Nov 9 23:27:59 1998 Douglas C. Schmidt + + * examples/ASX/Message_Queue/buffer_stream.cpp (main): Fixed an + off-by-one bug. Thanks to Rainer Blome + for reporting this. + +Mon Nov 09 21:31:56 1998 David L. Levine + + * tests/Env_Value_Test.cpp (main): prepended "./" to name of + file to spawn. With the last round of changes to + ace/Process.cpp, that's necessary if "." isn't in the user's + PATH. That's because we're now using only execvp, and no + longer using execve. + + * tests/Atomic_Op_Test.cpp,Barrier_Test.cpp,Buffer_Stream_Test.cpp, + Future_Test.cpp,IOStream_Test.cpp,MT_Reactor_Timer_Test.cpp, + Map_Manager_Test.cpp,Message_Block_Test.cpp, + Message_Queue_Notifications_Test.cpp,Notify_Performance_Test.cpp, + Pipe_Test.cpp,Priority_Buffer_Test.cpp,Priority_Task_Test.cpp, + Process_Mutex_Test.cpp,Reactor_Exceptions_Test.cpp, + Reactor_Notify_Test.cpp,Reactor_Performance_Test.cpp, + Reactors_Test.cpp,Reader_Writer_Test.cpp,SPIPE_Test.cpp, + SV_Shared_Memory_Test.cpp,Semaphore_Test.cpp,TSS_Test.cpp, + Task_Test.cpp,Thread_Manager_Test.cpp,Thread_Mutex_Test.cpp, + Thread_Pool_Reactor_Test.cpp,Thread_Pool_Test.cpp, + Tokens_Test.cpp,UPIPE_SAP_Test.cpp,Upgradable_RW_Test.cpp, + XtReactor_Test.cpp: + changed Log_Priority of "not supported" messages to LM_INFO. + Hopefully, it will help avoid confusion, especially among + new ACE users. Thanks to Gonzo for suggesting this. + + * tests/run_tests.sh: added ACE version number printouts. + + * BUG-REPORT-FORM: added phase (compilation/linking/execution/other), + and ACE+TAO/application/both. + +Mon Nov 9 02:52:11 1998 Douglas C. Schmidt + + * ace/Signal.cpp: handle_close() wasn't being called when + handle_signal() returns -1. It is now... Thanks to Vicentini + Emanuele for reporting this. + + * ace/Event_Handler.h (ACE_Event_Handler): Added a SIGNAL_MASK so + that we can pass this to handle_close() when handle_signal() + returns -1. + + * README: Fixed a typo where ACE-install.html was misspelled as + ACE-Install. Thanks to Michael Thomas + for reporting this. + +Sun Nov 08 22:00:22 1998 David L. Levine + + * ace/Message_Block.h: changed ACE_Message_Type to int, to + avoid overload ambiguity when it's unsigned. + +Sun Nov 8 10:42:38 1998 Douglas C. Schmidt + + * ace/Message_Block.h: Changed the ACE_Message_Type from being an + enum to being an ACE_UINT32 so that it's easier for users to add + their own message types to an ACE_Message_Queue. Thanks to + Martin Krumpolec for this suggestion and to + David Levine for catching that it should be an ACE_UINT32. + +Fri Nov 6 23:08:16 1998 Douglas C. Schmidt + + * ace/Process.cpp (spawn): Set result correctly when execvp() is + called. Also, make sure to check for putenv() failing. Thanks + to David Levine for pointing this out. + + * tests/Env_Value_Test.cpp: Reformatted the test a bit. + +Fri Nov 06 22:41:21 1998 David L. Levine + + * ace/Process.cpp (spawn): initialized local "result" to 0 + to avoid egcs warning about possible unitialized use. Added + const to loop index to avoid egcs warning about discarding + const. + + * ace/OS.h,Basic_Types.h: moved ACE_UINT64_FORMAT_SPECIFIER from + OS.h to Basic_Types.h, because other 64-bit int support is + there. Changed default ACE_UINT64_FORMAT_SPECIFIER to + "%llu", because that's what Solaris 2.x uses. + + * ace/config-win32-common.h,ace/config-linux-common.h: added + ACE_UINT64_FORMAT_SPECIFIER overrides. + + * ace/Log_Msg.cpp (log): added ACE_U_LongLong support. + +Fri Nov 6 13:29:11 1998 Douglas C. Schmidt + + * ace/OS.h (ACE_UINT64_FORMAT_SPECIFIER): Changed + #define ACE_UINT64_FORMAT_SPECIFIER "%I64d" + + to: + + #define ACE_UINT64_FORMAT_SPECIFIER "%I64u" + + to handle the signed/unsigned stuff correctly. Thanks Zoran! + + * ace/Process.cpp (spawn): Replaced the use of execve() with + execvp() by copying the environment variables manually first. + Thanks to Avi Nash for this fix. + + * ace/Log_Msg.cpp (log): Added support for a `%Q' format specifier + to the log() method. This prints out quad words, i.e., + ACE_UINT64's. Thanks to Zoran Ivanovic for + contributing this. + + * Updated the "site map" for ACE so that it doesn't use absolute + links. Thanks to Rainer Blome for + contributing this. + + * ace/Process.h: Clarified the behavior of ACE_Process and + ACE_Process_Options on UNIX because of the use of execve(), + which doesn't search the path. Thanks to Avi Nash for reporting + this. + +Fri Nov 06 15:01:20 1998 Rainer Blome + + * tests/run_tests.sh: augmented to make, run, and discard + each test for which it doesn't find an executable. + + Thus, if you first say make to build the executables, all tests + will just run (or not ;-), nothing is changed. + + If you start run_tests.sh without having built the executables, + it will make, run and discard the tests one by one instead. + Any compiler output goes to log/compilation.log. + +Fri Nov 06 12:58:24 1998 Nanbor Wang + + * ace/Thread_Manager.cpp: Removed several superfluous parens so + the code looks clearer and less error-prone. + +1998-11-06 James CE Johnson + + * docs/tutorials/013/block.cpp + * docs/tutorials/013/page05.html + * docs/tutorials/015/Compressor.cpp + * docs/tutorials/015/Crypt.cpp + * docs/tutorials/015/Recv.cpp + * docs/tutorials/015/Xmit.cpp + * docs/tutorials/015/*.html + Susan Liebeskind (susan.liebeskind@gtri.gatech.edu) discovered + that you can't use the 'inherited' typedef to initialize a + baseclass if you use the AIX C++ compiler. + +Fri Nov 06 08:57:49 1998 David L. Levine + + * tests/Mem_Map_Test.cpp (reverse_file): put the volatile + qualifier back in. LynxOS 3.0.0/PowerPC needs it with -O2 + and without ACE_HAS_INLINE. + + * VERSION: added reference to BUG-REPORT-FORM. Thanks to + Peter Nordlund for providing the new + text. + + * ace/SOCK_Dgram_Mcast.cpp (unsubscribe): fixed ACE_TRACE + string. + + * ACE-INSTALL.html: added note on possibly having to change + -G to -shared in platform_macro.GNU's SOFLAGS with GNU linker. + Thanks to Andy Gokhale and James Megquier for + reporting this. If anyone knows of an automagic fix, that would + be appreciated. + + * ACE-INSTALL.html: added note on how to enable IP multicast on + LynxOS. + +Thu Nov 5 23:10:46 1998 Nanbor Wang + + * ace/Thread_Manager.cpp (wait_task): Fixed a wrong parenthesis + pair. Thanks to Bob McWhirter for figuring + this out. + +Thu Nov 5 21:41:26 1998 James CE Johnson + + * docs/tutorials/017 + Began the ACE_Barrier tutorial. So far, it's just code but I'll + add the usual heavy comments & commentary in the next few days or + so. I'll update the docs/tutorials/index.html after that. + +Thu Nov 5 14:42:59 1998 Douglas C. Schmidt + + * ACE-INSTALL.html: Cleaned up a typo in the ACE-INSTALL.html + file. Thanks to James Megquier for reporting + this. + + * ace/config-sunos5.5.h: Cleaned up the comments a bit to make it + more clear how to enable/disable threads. Thanks to Russ + Noseworthy for reporting this. + + * ace/Stream.h: Clarified some subtleties with subclassing from + ACE_Stream. Thanks to Stephen Coy for reminding me of this. + + * include/makeinclude: Updated the platform_linux_kcc.GNU file. + Thanks to Joseph Weihs for reporting + this. + + * ACE.FAQ.html: Pointed out that ACE is Y2K compliant. Thanks to + Fredrik Lindahl for suggesting this. + +Thu Nov 05 13:23:29 1998 David L. Levine + + * include/makeinclude/platform_lynxos.GNU: default VERSION + to 3.0.0. We no longer build/test for LynxOS 2.5.0. Added + usage comments. + + * ACE-INSTALL.html: for LynxOS, added link to platform_lynxos.GNU + file, for usage information. Replaced some absolute paths in + URLs with relative paths. + +Wed Nov 4 23:28:55 1998 Douglas C. Schmidt + + * ace/Stream.h: Made all the methods of ACE_Stream virtual to + enable subclasses. Thanks to Bob McWhirter's for this + suggestion. + +Tue Nov 3 16:06:23 1998 Douglas C. Schmidt + + * examples/Logger/simple-server: Fixed the server so that it shuts + down cleanly when ^C is given. Thanks to Avi Nash + for reporting this. + +Tue Nov 03 13:17:49 1998 Nanbor Wang + + * ace/Thread_Manager.{h,i,cpp} (thread_desc_self): Changed this + method to an inline function. Removed outdated comments and + instead of searching thru the list when the current thread's + descriptor is not found in TSS cache, place an assertion there + for this should never happen. Thanks to Terry Rosenbaum + for motivating the change. + +Mon Nov 2 22:54:08 1998 Darrell Brunsch + + * ace/config-win32.h: + * ace/config-win32-common.h: + Only define ACE_LACKS_RECVMSG/SENDMSG for non-WinSock2 systems. + Before, it was being defined for all non-NT configurations. + Thanks to Irfan for suggesting this change. + +Mon Nov 2 18:18:04 1998 Douglas C. Schmidt + + * examples/Reactor/Dgram/CODgram.cpp, + examples/Reactor/Dgram/Dgram.cpp: + Fixed these programs so that they will work across + processes/machines, as well as within the same process. Thanks + to Larry for reporting this. + + * Added a "site map" for ACE. Thanks to Rainer Blome + for contributing this. + +Mon Nov 2 18:13:29 EST 1998 James CE Johnson + + * docs/ACE-FMM.html + Updated from Bob's latest. + +Mon Nov 02 11:22:30 1998 Nanbor Wang + + * tests/Thread_Pool_Reactor_Test.{h,cpp}: Renamed Acceptor_Handler to + Request_Handler to better reflect what the class actually does. + + * docs/ACE-categories.html: Fixed erroneous html tags. Thanks to + Rainer Blome for reporting this. + +Mon Nov 02 00:26:59 1998 Irfan Pyarali + + * ace: Since connectors really don't have any state, they don't + need to inherit from the SAP classes. Therefore, modified the + following to be simpler: + + TLI_Connector + DEV_Connector + SPIPE_Connector + UPIPE_Connector + +Sun Nov 01 21:18:24 1998 Irfan Pyarali + + * ace/WFMO_Reactor.cpp (upcall): Before handle_input is called + because of FD_CLOSE, we check the return value of handle_input + because of FD_READ. If the user had returned -1, we won't call + handle_input again. Thanks to Gonzalo Diethelm + for suggesting this change. + + * examples/Reactor/WFMO_Reactor/test_network_events.cpp + (handle_input): Changed this method to keep reading from the + socket until EWOULDBLOCK occurs. + +Sun Nov 1 17:32:50 1998 Douglas C. Schmidt + + * tests/Hash_Map_Manager_Test.cpp (run_test): Oops, we need to + account for compilers that lack template specialization! Thanks + to David Levine for reporting this. + +Sun Nov 01 17:24:56 1998 David L. Levine + + * ace/config-win32-borland.h,config-win32-common.h,README: + removed ACE_LACKS_STL_DEFAULT_TEMPLATE_PARAMETER because + it's no longer used. Thanks to Ossama for reporting this. + +Sun Nov 01 08:54:08 1998 Douglas C. Schmidt + + * ACE version 4.6.2 released. + +Sat Oct 31 18:12:36 1998 Douglas C. Schmidt + + * tests/Hash_Map_Manager_Test.cpp (run_test): updated the test to + validate that the trybind() operation works correctly. Thanks + to Bill Fulton for this + fix. + + * ace/Hash_Map_Manager.cpp: trybind() was doing the "Wrong + Thing"[TM] by overwritting the INT_ID even if the entry was + already in the map! It's fixed now... Thanks to Bill Fulton + for reporting this. + +Sat Oct 31 17:15:42 1998 Douglas C. Schmidt + + * ACE version 4.6.1 released. + +1998-10-31 Nagarajan Surendran + + * ace/Select_Reactor_T.cpp (dispatch): Added signal_occurred at + the right return to indicate that a handle_signal () has been + dispatched. + +Fri Oct 30 20:31:27 1998 Darrell Brunsch + + * tests/Semaphore_Test.cpp: Cleaned up the #if's to make it easier + to understand, and fixed a related problem. Thanks to + Ossama for finding this. + +Fri Oct 30 15:47:39 1998 Douglas C. Schmidt + + * ace/Select_Reactor_T.cpp (dispatch): Make sure to include a + count of 1 if the Reactor dispatched a handle_signal() method. + This ensures we don't return 0 from handle_events() in cases + where we didn't timeout... Thanks to Naga for chasing this + down! + +Fri Oct 30 11:53:16 1998 David L. Levine + + * ace/config-sunos5.6.h: removed ACE_HAS_POSIX_SEM #define because + it caused a seg fault in Reactor_Notify_Test on + g++ 2.7.2.3/Solaris86 (with -D_POSIX_C_SOURCE=199506L + -D_POSIX_PTHREAD_SEMANTICS -D__EXTENSIONS__). The seg fault is + at the end of the test: + + #0 0xdfd5a809 in realfree () + #1 0xdfd5ad16 in cleanfree () + #2 0xdfd5a43a in _malloc_unlocked () + #3 0xdfd5a2e9 in malloc () + #4 0xdfd61a25 in _strdup () + #5 0xdfeffcd5 in ACE_Log_Msg::log (this=0x8052ec0, + format_str=0x804f0af "(%P|%t) Ending %s test at %D\n", + log_priority=, + argp=0x80476ac "\nð\004\bÔÀÿß\177\023\004\bÔv\004\b§¹\004\b\001") + at /export/home/conga/levine/ACE_wrappers/ace/OS.i:1399 + #6 0xdfeffbfa in ACE_Log_Msg::log (this=0x8052ec0, + log_priority=, + format_str=0x804f0ac "d\n") at Log_Msg.cpp:601 + #7 0x804c935 in main () at Reactor_Notify_Test.cpp:297 + + It's hard to imagine how ACE_HAS_POSIX_SEM could cause that. + But, it's perfectly repeatable. And, we can live without + ACE_HAS_POSIX_SEM. + + * tests/run_tests.sh: really commented out Thread_Pool_Reactor_Test. + It _wasn't_ commented out in the 4.6 release. + + * tests/Mem_Map_Test.cpp (reverse_file): removed volatile + qualifier because it no longer seems to be necessary for LynxOS + 3.0.0/PowerPC. + +Fri Oct 30 09:23:55 1998 Douglas C. Schmidt + + * ace/SString.h: Cleaned up the ACE_SString comments to be more + helpful. Thanks to Ivan Murphy for + motivating this. + +Thu Oct 29 22:19:19 1998 James CE Johnson + + * docs/ACE-FMM.html: + Updated from Bob's latest version. Thanks Bob! + +Thu Oct 29 21:13:41 1998 James CE Johnson + + * docs/tutorials/016/Condition_i.cpp: + Fixed messed-up the signature on + Condition::operator Condition::value_t(void) + +Thu Oct 29 18:51:19 1998 Steve Huston + + * ace/ACE.cpp: Added "|| defined (_AIX)" to decision to do + template instantiations at end of file. Thanks to Ian + Wright for this fix. + + * ace/config-aix-4.1.x.h: Added ability to use g++ in addition to xlC. + Thanks again to Ian Wright for this addition. + + * include/makeinclude/platform_aix_g++.GNU: New platform_macros file + for building on AIX with g++. And, once again, thanks to Ian Wright + for this contribution. + + * ace/NT_Service.i: Added ACE_INLINE to the methods in this file. + Thanks to Goran Lowkrantz + for this fix. + +Thu Oct 29 17:36:29 1998 Darrell Brunsch + + * tests/Semaphore_Test: Removed the timed acquire stuff from + the worker thread and the display at the end of the test. + Now it shouldn't output the confusing "100% of threads + timed out" message on platforms without timed acquire. + +Thu Oct 29 15:25:19 1998 Nanbor Wang + + * ace/Svc_Handler.cpp (open): Added a trailing newline to the + error message. + +Thu Oct 29 15:13:07 EST 1998 James CE Johnson + + * docs/tutorials/index.html + * docs/tutorials/016/* + Added Tutorial 016. This discusses ACE_Condition<> and ways + to make it more manageable in an application. + +Thu Oct 29 11:44:21 1998 David L. Levine + + * ace/config-sunos5.6.h: changed ACE_THREAD_POSIX_SEM to + ACE_HAS_POSIX_SEM. It looked like a typo. + Only #define ACE_HAS_POSIX_SEM if _POSIX_PTHREAD_SEMANTICS is + #defined. Thanks to Ossama for help with this. + + Also, removed ACE_HAS_PTHREADS_STD because it's + #defined in config-sunos5.5.h. + +Wed Oct 28 14:30:01 1998 Rainer Blome + + * ace/Makefile: added AIX_TEMPLATE_HACK support. + This patch helps using Rob Jordan's trick described in the + ACE-INSTALL file. The existing description in the ACE-INSTALL + is a little misleading. Creating a ACE_All_Tmp.h will not + really help, because the Makefile will look for a ACE_All_Tmp.cpp. + + Here's how to use the patch: + + Use `make ACE_All' to create 0_ACE_All_Src.h, 0_ACE_All_Src.cpp and + 0_ACE_All_Tmp.cpp. These files contain include directives for each + of the files mentioned in the makefile variables FILES and + TEMPLATE_FILES. Then `make AIX_TEMPLATE_HACK=1' to compile the + library in one go. Compilation is fast then, but `ar' will still + take a long time. + +Wed Oct 28 09:13:10 1998 David L. Levine + + * ACE-INSTALL.html: expanded discussion of non-static + ACE_Object_Manager, including the fact that it's the + default config on Win32 and VxWorks. And that not + declaring main () with two arguments will lead to + link failure due to unresolved ace_main_i. + + * tests/Time_Service_Test.cpp,Tokens_Test.cpp: display + filename if ACE_Process::spawn () fails. + + * tests/run_tests.sh: only run Time_Service_Test if + ../netsvcs/server/main exists. Also, exit if a command + line argument is provided to run_tests.sh, and the argument + is not a Chorus hostname. + + * ace/Object_Manager.h: declare the ACE_Object_Manager_Base + methods to be public, instead of protected, for DEC CXX 5.6 + (in addition to Diab for PSoS). Thanks to Doug Anderson + for suggesting this. + + * ace/config-sunos5.5.h: removed ACE_HAS_TIMER_SKEW. Thanks + to Russ Noseworthy for verifying + that it no longer seems to be necessary. + + * ace/config-linux-common.h: added ACE_HAS_PROCFS. + +Tue Oct 27 22:14:18 1998 David L. Levine + + * ACE version 4.6 released. + +Tue Oct 27 21:54:17 1998 Douglas C. Schmidt + + * man: Added the ACE_Service_Repository_Iterator.{html,3} files. + Thanks to Erik Koerber for reporting + this. + + * Updated the manual pages to reflect the latest APIs in + the new release. + +Tue Oct 27 14:16:27 1998 James CE Johnson + + * docs/tutorials/015/Recv.cpp : Changed atoi() to ACE_OS::atoi() + * docs/tutorials/015/page22.html: Ensure that the correct cpp + and header files are HREF'd + + Thanks to Susan Leibeskind for catching these. + +Tue Oct 27 12:31:28 1998 Nanbor Wang + + * ace/OS.i (cond_timedwait): Made sure the broadcaster always gets + signaled no matter what the "wait" function return if this is + the last waiter for this cv. In any case, the calling thread is + no longer waiting on the cv any more. + +Tue Oct 27 08:22:41 1998 David L. Levine + + * ace/config-win32.h: fixed typo in comment: + ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER instead of + ACE_DONT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER. Thanks to + Olivier Lau for reporting this. + + * tests/Semaphore_Test.cpp (test_timeout_count,test_timeout): + put these in #ifndef STHREADS && #ifndef POSIX_SEM protection + to avoid compiler warnings about unused variable/function. + + * ace/config-sunos5.5.h: added comment to comment out + ACE_HAS_REGEX if there are link problems with g++ or egcs on + SunOS 5.5. Thanks to Hakan Kallberg for + reporting this. + + * ACE-INSTALL.html: added Sun C++ version/patchlevel information, + including a link to Sun's tech patches home patch. Thanks to + Susan for recommending this, and for providing the URL. + + * ACE-INSTALL.html: added note about segfault when attempting to + register a signal handler on LynxOS 3.0.0/PowerPC. + + * ace/Object_Manager.cpp (fini): added check of + instance_->shutting_down_ on entry. This will avoid + reentrance if fini () is called before the Object_Manager + is (explicitly) destroyed. Thanks to Gonzo for reporting it. + +Tue Oct 27 05:47:21 1998 Douglas C. Schmidt + + * ACE version 4.5.65 released. + +Tue Oct 27 03:24:36 1998 Nanbor Wang + + * ace/TP_Reactor.h: Added an description for TP_Reactor. + + * ace/OS.i (cond_timedwait): When emulating cv, there're chances + that the "wait for being signaled" function times out and return + an error. In this rare case, we must also signal the + broadcasting thread to bail out of cond_broadcast to avoid + deadlock since we are no longer waiting on the cv anymore. + Thanks to Detlef Becker for + noticing the problem and providing the patch. + +Mon Oct 26 20:59:15 1998 David L. Levine + + * ace/Synch_T.{i,cpp} (ACE_Lock_Adapter): uninlined the + ACE_Lock_Adapter default constructor. SunPRO C++ 4.2 + patch + 104631-07 has trouble compiling TAO with it inline. + Thanks to Terry Rosenbaum + for tracking this problem down and providing the fix. + +Mon Oct 26 18:33:28 1998 Carlos O'Ryan + + * Updated the dependencies in all the Makefiles, this was required + after the new Message_Block_T.{h,i,cpp} files. + +Mon Oct 26 19:16:27 1998 James CE Johnson + + * docs/tutorials/000/index.html: This index is has a layout + similar to Umar's ACE Tutorial document. As time progresses, we + will be merging the examples in his document into the online + tutorials. The current free-form tutorials will not go away but + will be supplimented with Umar's more structured approach. + +Mon Oct 26 17:37:55 1998 Carlos O'Ryan + + * ace/OS.h: + * ace/config-sunos5.4-sunc++-4.x.h: + * ace/config-sunos5.5.h: + Sun/CC throws the ::xalloc exception when operator new cannot + allocate the memory, thanks to Terry Rosenbaum + for reporting this and + providing a patch. + + * ace/Makefile: + Updated dependencies. + +Mon Oct 26 17:02:48 1998 Nanbor Wang + + * tests/Thread_Pool_Reactor_Test.cpp: Reduced the number of + connector threads _ONLY_ on platforms that couldn't handle too + many simultaneous connection. + + Changed to use dotted-decimal format to specify connection + endpoint for some platforms don't have a decent DNS support. + +Mon Oct 26 12:04:10 1998 Nanbor Wang + + * ace/ace_lib.dsp: Added TP_Reactor into the project. + +Mon Oct 26 11:29:55 1998 Darrell E. Brunsch + + * tests/Semaphore_Test.cpp: Changed behavior for ACE_HAS_STHREADS + and ACE_HAS_POSIX_SEM so it still tests everything but doesn't + test the timed waits. + +Mon Oct 26 08:22:18 1998 David L. Levine + + * docs/ACE-guidelines.html: added recommendation and + explanation re. use of #pragma once. + + * docs/ACE-guidelines.html: recommend avoiding g++ 2.8.1. + + * tests/SV_Shared_Memory_Test.cpp: don't try to run this + test if ACE_LACKS_FORK, because it uses ACE_OS::fork (). + It allocates the shared memory segment before the fork, + of course, so that was leaked if the fork was attempted + but failed. + + * tests/Pipe_Test.cpp,Process_Mutex_Test.cpp: don't try + to run these tests if ACE_LACKS_FORK, either. + + * tests/Mem_Map_Test.cpp (reverse_file): use a local, volatile + variable for the array index. Without it, the test core dumps + on LynxOS 3.0.0/PowerPC with -O2. + + * tests/run_tests.sh: run Timer_Queue_Test and Upgradeable_RW_Test + on LynxOS. + + * tests/run_tests.vxworks: changed + Message_Queue_Notifications_Test.cpp to + Message_Queue_Notifications_Test. + +Mon Oct 26 01:49:44 1998 Nanbor Wang + + * tests/Env_Value_Test.cpp (main): Changed argv and envp to type + LPTSTR[]. + +Sun Oct 25 23:52:40 1998 Douglas C. Schmidt + + * ACE version 4.5.64 released. + +Sun Oct 25 22:18:26 1998 Douglas C. Schmidt + + * ace/Select_Reactor_T.cpp (dispatch): Be more careful in how we + handle dispatching when signals occur. In general, if we're + interrupted by a non-Reactor-aware signal handler we need to + bail out... Thanks to Naga for reporting this. + + * examples/Reactor/Misc/test_signals_1.cpp: Cleaned up this test + so that it'll show off the signal handling capabilities of the + ACE Reactor better. + +Sun Oct 25 14:13:31 1998 Darrell Brunsch + + * ace/OS.i: Changed ACE_OS::sigaction to work with a null value + for on Windows. Thanks to Jim Buck for + reporting this. + + * examples/Reactor/Misc/reactors.dsp: + * examples/Reactor/Misc/signals_1.dsp: + * examples/Reactor/Misc/signals_2.dsp: + Corrected the include and library paths. Thanks to + Zoran Ivanovic for reporting this. + + * ChangeLog: Removed all the trailing spaces and tab characters so + CVS's commit-check will be happy. + +Sun Oct 25 10:59:21 1998 Douglas C. Schmidt + + * ace/config-sunos5.5.h: Added + + #if defined (i386) + #define ACE_HAS_X86_STAT_MACROS + #endif /* i386 */ + + to check for the [f]stat macros on Solaris for Intel. Thanks to + Daniel Nieten for reporting this. + +Sun Oct 25 00:15:03 1998 Nanbor Wang + + * ace/Service_Config.cpp (process_directives): We should use + ASYS_WIDE_STRING to convert a to a UNICODE string. + +Sat Oct 24 18:39:11 1998 Steve Huston + + * ace/ACE.cpp (get_ip_interfaces, get_handle): Add _AIX to the list + of macros which enable the proper code for these to work. + ACE::get_ip_interfaces still doesn't work right on AIX, though - + it reports one link-level interface. May need to get IBM's help + with this. + +Sat Oct 24 18:07:00 1998 Nanbor Wang + + * ace/OS.h (ACE_TEXT): Consolidated various ACE_TEXT definitions + into one and place it near the beginning of the file. + Re-indented macros. + +Sat Oct 24 17:47:15 1998 Arturo Montes + + * ace/OS.i (sigwait): Sigwait is little different with FSU + pthreads, sigwait take two arguments and return -1 if error, 0 + in otherwise. + +Sat Oct 24 17:26:41 1998 Darrell Brunsch + + * ace/OS.h (ACE_TEXT): Moved Nanbor's changes outside of + ACE_PSOS block. + + * ace/config-win32.h: Defined ACE_HAS_TEXT_MACRO_CONFLICT, + seeing that MSVC already defines __TEXT. + +Sat Oct 24 15:21:32 1998 Nanbor Wang + + * ace/OS.h (ACE_TEXT): Changed the macro __TEXT to ACE_TEXT to + avoid conflicting with OS/390. __TEXT is still available for + backward compatibility unless ACE_HAS_TEXT_MACRO_CONFLICT is + defined. However, using ACE_TEXT is prefered for obvious + reason. Thanks to Paul K. Fisher for + reporting this. + + * ace/README: Added documentation for ACE_HAS_TEXT_MACRO_CONFLICT. + + * *.cpp: Replaced a bunch of __TEXT to ACE_TEXT. + +Sat Oct 24 08:34:08 1998 Douglas C. Schmidt + + * ace/OS.i: Updated the fstat() and stat() calls to work properly + on the Solaris for Intel platform, which does weird things to + the fstat() and stat() functions to handle 32 and 64 bit file + offsets. Thanks to Daniel Nieten for + reporting this. + +Sat Oct 24 02:13:11 1998 Detlef Backer + + * ace/OS.cpp (invoke): ACE_Thread_Adapter::invoke() swapped the + nesting level of __except() and __finally() because if the + selector returns EXCEPTION_EXECUTE_HANDLER a global unwind takes + place, activating nested __finally blocks and in this case + terminating the thread before having a chance to execute the + handler. After reversing the logic, now the exception handler + gets called first before the termination handler is invoked. + + Furthermore I added the call to GetExceptionInformation(), + passing the result as a void* into the selector function. This + allows a case sensitive handling startegy of the exception in + the selector function. + + (inherit_log_msg): In ACE_Thread_Adapter::inherit_log_msg() I + moved the copy operation from the selector and handler + attributes outside of the "if (this->ostream_)" condition, + because I don't think this condition is related to the SEH. + + (thr_create): In ACE_OS::thr_create() I "inherit" the current + selector handler into the newly created ACE_Thread_Adapter in + case that the caller did not specify one at invocation. + + * ace/Thread_Manager.cpp (spawn_i): In + ACE_Thread_Manager::spawn_i() I added the initialization of + selector and handler at the creation time of + ACE_Thread_Adapter. + +Fri Oct 23 21:11:03 1998 Douglas C. Schmidt + + * ace/OS.h: Changed a comment to be consistent. Thanks to Serge + Kolgan for reporting this. + +Fri Oct 23 20:39:00 1998 Chris Gill + + * Paul Christopher Gill was born Friday October 23, 1998, at + 20:39 CDT, weighing 6 lbs. 7 oz., at 19 3/4 inches in length. + A true hacker in the making, Paul decided to work through the + evening even though it was a Friday night. ;-) + +Fri Oct 23 11:37:38 1998 Steve Huston + + * include/makeinclude/platform_aix4.2.GNU: Removed -qinitauto=5F from + DCFLAGS - with it, Process_Strategy_Test was going CPU bound in an + ostream operation. + +Fri Oct 23 00:27:11 1998 Douglas C. Schmidt + + * ACE version 4.5.63 released. + +Thu Oct 22 21:32:14 1998 Darrell Brunsch + + * ACE-INSTALL.html: Since we've been successfully using MSVC 6.0 + for a while, might as well mention it here in the documentation. + +Thu Oct 22 19:48:20 1998 James CE Johnson + + * docs/index.html + Reformatted it via emacs to make it more readable when editing. + Added a comment pointing to Bob McWhirter's original FMM document + to make it easier to update the repository in the future. + + * docs/tutorials/015/Client.h + * docs/tutorials/015/Client.cpp + * docs/tutorials/015/Server.h + * docs/tutorials/015/Server.cpp + + Since Windows just *pretends* to have mixed-case names the cpp + files conflict with client.cpp and server.cpp. I renamed these + files to: + + * docs/tutorials/015/Client_i.h + * docs/tutorials/015/Client_i.cpp + * docs/tutorials/015/Server_i.h + * docs/tutorials/015/Server_i.cpp + + Which necessitated changes to + * docs/tutorials/015/client.cpp + * docs/tutorials/015/server.cpp + * docs/tutorials/015/Makefile.client + * docs/tutorials/015/Makefile.server + * docs/tutorials/015/Makefile + * docs/tutorials/015/combine.shar + * docs/tutorials/015/*.html + + Thanks to Darrell Brunsch for catching this. + + +Thu Oct 22 16:52:21 1998 Steve Huston + + * tests/Thread_Pool_Reactor_Test.(cpp h): Adjusted debug output to + learn more about what's happening; added a check to be sure that + the correct number of messages are processed by each Svc_Handler. + +Thu Oct 22 15:46:42 1998 David L. Levine + + * ace/OS.cpp (ACE_TSS_Emulation::tss_base): if storage for + the TSS data must be allocated off the heap, zero all of it. + This avoids problems after fork in the child process on + LynxOS. + +Wed Oct 21 22:23:06 1998 Douglas C. Schmidt + + * ACE version 4.5.62 released. + +Wed Oct 21 21:19:53 1998 Douglas C. Schmidt + + * ace/Service_Config.cpp (process_directives): Replaced a + return -1 with a result = -1 and a break to avoid a + memory leak. Thanks to David for pointing this out. + +Wed Oct 21 20:00:51 1998 Nagarajan Surendran + + * tests/Timer_Queue_Test.cpp : + * tests/Map_Manager_Test.cpp: + * tests/Dynamic_Priority_Test.cpp: + Replaced double with ACE_timer_t everywhere so that it works on + platforms like Chorus. + +Wed Oct 21 18:44:26 1998 Nagarajan Surendran + + * tests/run_tests.sh: Changed egrep Chorus to CHORUS to identify a + Chorus vme board. + +Wed Oct 21 17:51:52 1998 Steve Huston + + * ace/ACE.cpp (get_ip_interfaces): If compiling on Win32 w/ Winsock 2, + use WSAIoctl(SIO_GET_INTERFACE_LIST) to get the interfaces from the + kernel rather than trying to fish through the registry. This should + help TAO's naming service be somewhat more reliable on Win32, as + well as solve some other nasties that plagued this thing. + + * ace/ws2tcpip.h: Filled out necessary pieces for the above change. + +Wed Oct 21 14:19:11 EDT 1998 James CE Johnson + + * docs/tutorials/007/thread_pool.cpp + * docs/tutorials/007/thread_pool.h + Alison Greig's question caused me to look back at these and + I find that an older g++ is unhappy about the close() methods. + It seems to confuse the baseclass 'close(u_long flags=0)' with + my derived 'close(void)' even though I also have 'close(u_long)'. + Anyway, I removed my 'close(void)' and now do all of my work in + the other method. + + * docs/tutorials/007/client_handler.cpp:handle_input() + Now using ACE_OS::thr_equal() instead of operator==() + This fixes Alison's problem. (Thanks for the solution David!) + +Wed Oct 21 07:12:32 1998 David L. Levine + + * tests/Thread_Pool_Reactor_Test.cpp: moved #include of + tests/Thread_Pool_Reactor_Test.h inside of ACE_HAS_THREADS + protection, so that it will compile without thread support. + Thanks to Jan Perman for + reporting this. + + * tests/MT_Reactor_Timer_Test.cpp: moved "the_reactor" declaration + outside of ACE_HAS_THREADS protection, so that it will compile + without thread support. Thanks to Jan Perman + for reporting this. + + * bin/g++dep: added -DACE_LACKS_PRAGMA_ONCE to keep it + quiet when the config.h doesn't #define it. Thanks to + Naga for reporting this. + + * ace/config-g++-common.h: protected #define of ACE_LACKS_PRAGMA_ONCE, + because g++dep now defines it with a -D. + + * ACE-INSTALL.html: updated Linux and LynxOS version status, + and egcs --enable-shared discussion. + + * ace/Hash_Map_Manager.cpp (operator *): only declare local "result" + without ACE_NDEBUG, to avoid compile warning with debug=0. + + * ace/Synch.cpp (ACE_Recursive_Thread_Mutex::release): only + declare local "t_id" without ACE_NDEBUG, to avoid compile warning + with debug=0. + + * ace/Timer_Heap_T.cpp (reschedule): only declare local "timerID" + without ACE_NDEBUG, to avoid compile warning with debug=0. + + * ace/SV_Message_Queue.h: fixed #ifndef protection to use + ACE_SV_MESSAGE_QUEUE_H instead of ACE_MESSAGE_QUEUE_H, to + prevent collision with the Message_Queue.h's protection. + Thanks to Rainer Blome for + reporting this. + + * ace/Object_Manager.cpp: removed some old, unused printouts. + +Tue Oct 20 19:40:41 1998 Steve Huston + + * include/makeinclude/platform_hpux_aCC.GNU: Added + -DACE_LACKS_PRAGMA_ONCE - aCC on both 10.20 and 11.00 complain about + #pragma once. Added it here rather than in config.h because (1) it + can be set in one file, not two, (2) in case a #pragma gets in before + config.h is included somehow. + + * include/makeinclude/platform_aix4.2.GNU: Revised flags passed to + xlC_r - remove -qextchk because it's the cause of the mismatched + type errors building netsvcs/lib (IBM reports this is fixed in + compiler version 3.6.4). Removed -M - it's not needed and wastes + disk space. Moved -qcheck to DCFLAGS and added -qinitauto=5F to + DCFLAGS. + + * include/makeinclude/rules.local.GNU: Added SHLIBA to the files that + get 'realclean'ed - this covers libACEshr.a on AIX. + + * netsvcs/lib/Makefile: + * netsvcs/clients/Naming/Client/Makefile: Added ACELIB to LIBS to + insure libACE is linked in. + +Tue Oct 20 19:37:42 1998 James CE Johnson + + * docs/tutorials/014/*.html: + * docs/tutorials/014/Makefile: + * docs/tutorials/014/combine.shar: + Colorized using the new and improved 'combine' script. Also + modified the Makefile so that the HTML sources won't get destroyed + if the shar operation failed. + + * docs/tutorials/015/Makefile: + Added the same Makefile modification to prevent loss of HTML sources + +Tue Oct 20 16:28:12 1998 David L. Levine + + * ACE-INSTALL.html: added recommended DU CXX version info. + Thanks to Susan Liebeskind + for suggesting this. + + * ACE-INSTALL.html: added AIX 4.2.1 xlC V3.1 patch info. + Thanks to Susan Liebeskind + for supplying it, in ready-to-use form. + + * tests/Thread_Manager._Test.cpp (main): changed debug messages + for suspend_grp/resume_grp with Pthreads, which fail due to + ENOTSUP. The resume_grp message was wrong (copy and paste + error). In addition, I reworded the messages to that + run_tests.check won't catch them. They don't indicate a + problem, just that Pthreads doesn't support those operations; + see Steve's Thu Oct 15 16:40:41 1998 entry. + +Tue Oct 20 14:31:37 EDT 1998 James CE Johnson + + * docs/tutorials/001/Makefile + * docs/tutorials/002/Makefile + * docs/tutorials/003/Makefile + * docs/tutorials/005/Makefile + * docs/tutorials/006/Makefile + * docs/tutorials/007/Makefile + * docs/tutorials/008/Makefile + * docs/tutorials/009/Makefile + * docs/tutorials/010/Makefile + * docs/tutorials/011/Makefile + * docs/tutorials/012/Makefile + * docs/tutorials/013/Makefile + * docs/tutorials/012a/Makefile + * docs/tutorials/Makefile + + Updated these makefiles to remove rules.lib.GNU + Added the "top-level" makefile to allow building + of all tutorials in one step. + +Tue Oct 20 12:54:39 1998 David L. Levine + + * ACE version 4.5.61 released. + +Tue Oct 20 07:43:56 1998 David L. Levine + + * include/makeinclude/platform_irix6.x_g++.GNU: added + LIBS += -lpthread. Thanks to Peter Nordlund + for reporting that it is needed. + + * ace/config-irix6.x-sgic++-nothreads.h,config-irix6.x-common.h: + moved ACE_HAS_GPERF from SGI C++ config to common SGI C++/g++ + config. Thanks to Peter Nordlund for + recommending this. + + * ace/config-aix-4.1.x.h,config-dgux-4.11-epc.h,config-dgux-4.x-ghs.h, + config-irix5.2.h,config-irix5.3-g++.h,config-irix5.3-sgic++.h, + config-m88k.h,config-tandem.h,config-osf1-3.2.h, + config-sunos5.4-centerline-2.x.h,config-sunos5.4-g++.h, + config-sunos5.4-sunc++-4.x-orbix.h,config-sunos5.4-sunc++-4.x.h, + config-sunos5.5.h,config-unixware-2.01-g++.h, + config-unixware-2.1.2-g++.h,config-irix6.x-common.h,README: + removed ACE_HAS_SVR4_TIME because it is no longer used. + Thanks to Peter Nordlund for + reporting this. + + * tests/MT_Reactor_Timer_Test.cpp (handle_exception, + handle_timeout): added ACE_UNUSED_ARG's. + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp: + added #include of ace/streams.h, because the dump () + method uses ofstream. + + * examples/Connection/non_blocking/CPP-acceptor.cpp (handle_close): + added ACE_UNUSED_ARG's. + + * ace/config-sunos5.5-sunc++-4.x.h,config-sunos5.5-g++.h: + removed, because config-sunos5.5.h should be used instead. + + * performance-tests/Misc/basic_perf.cpp (iteration_time): + added static cast 0 to ACE_hrtime_t to please g++ + on VxWorks (which uses ACE_U_LongLong for ACE_hrtime_t). + + * ace/config-cygwin32-common.h: removed msg_accrights{,len} + defines, because they were commented out. + + * OS.h,config-aix-4.1.x.h,config-linux-common.h,README: + added ACE_LACKS_MSG_ACCRIGHTS support. This consolidates + code that was in both of the config files. Thanks to + Ossama for suggesting it. + + * include/makeinclude/platform_vxworks*.GNU: moved our + wind installation from /project/doc/wind to /project/doc/pkg/wind. + +Tue Oct 20 07:09:31 1998 Steve Huston + + * ace/config-aix-4.2.x.h: Added ACE_HAS_GPERF. + + * tests/tests.(mak mdp): Fixed to build clean; Added: + DLList_Test, High_Res_Timer_Test, Dynamic_Priority_Test, + Thread_Pool_Reactor_Test, Upgradable_RW_Test, MT_Reactor_Timer_Test. + +Mon Oct 19 21:40:56 1998 David L. Levine + + * *.h: changed include protection from #if !defined to ifndef. + Added #pragma once, if possible, i.e., after #include of + an ace/ header. It can only be done after ace/config.h + is included, because some platforms don't allow #pragma once. + + * include/makeinclude/wrapper_macros.GNU: removed -DACE_LACKS_PRAGMA + for g++ because it's now in config-g++-common.h. + +Mon Oct 19 20:44:33 1998 James CE Johnson + + * docs/tutorials/015: + Once again I've modified just about every file. Finally though + Tutorial 015: Protocol Stream is done! + + * docs/tutorials/combine + Get rid of that silly "links" file and add "bodies". The new file + is an ordered list of files to use when assembling the HTML + pages. This makes it easier to stuff source code into the pages. + + * docs/tutorials/index.html + I could have sworn that I linked in 014 many moons ago. + Appologies to Bob McWhirter for leaving this out for so long! + +Mon Oct 19 17:00:52 EDT 1998 James CE Johnson + + * docs/tutorials/015: + Just about everything in this directory has been touched. I'm + in the middle of documenting it and need a checkpoint so nothing + gets lost! ETA for completion is later tonight or sometime tomorrow. + +Mon Oct 19 11:47:20 1998 David L. Levine + + * ace/OS.cpp (readPPCTimeBase): wrapped each line in "". + Otherwise, the C++ compiler on MVS complains unterminated + strings. Even though it isn't supposed to see this code :-/ + Thanks to Chuck Gehr for + reporting this. + + * ace/config-g++-common.h: added ACE_LACKS_PRAGMA_ONCE. + g++ doesn't need it, because it optimizes includes if the #ifndef + header protection convention is followed. And, it + complains about #pragma once. + + * ace/config-win32-common.h: added ACE_LACKS_PRAGMA_ONCE, + unless _MSC_VER < 1000. + +Mon Oct 19 11:13:00 1998 Chris Gill + + * ace/Message_Block.h: Added title and description comments to + deadline and laxity message priority strategy classes. + +Sun Oct 18 17:22:00 1998 James CE Johnson + + * docs/tutorials/014/combine.shar: + * docs/tutorials/015/combine.shar: + The additional input files to the combine script. A shell archive + seems to be the most economical way to keep their history. + Individual files just create clutter and a tar.gz wouldn't be + diff-able in the repository. + + * docs/tutorials/014/Makefile: + * docs/tutorials/015/Makefile: + Adjusted to create the HTML and combine.shar files. + +Sun Oct 18 16:51:43 1998 James CE Johnson + + * docs/tutorials/combine: A perl script for combining several + "source" files into an HTML. It was designed to combine comment + files with .cpp and .h files in the creation of tutorials. The + HTML output is commited to the repository, I haven't decided yet + if it's worth saving the input. + + * docs/tutorials/fix.Makefile: This was pulled out of one of the + old tutorials and made a bit more useful. It's purpose is to pull + dependency information out of a Makefile and create a .depend file + instead. This keeps makfiles cleaner and less confusing. + + * docs/tutorials/014/Makefile + * docs/tutorials/014/Task.cpp + Minor changes. I attempted to add THR_JOINABLE to the activate() + call but that resulted in a permanent hangup on Linux when trying + to exit the application + + * docs/tutorials/015/Client.cpp + * docs/tutorials/015/Client.h + * docs/tutorials/015/Compressor.cpp + * docs/tutorials/015/Compressor.h + * docs/tutorials/015/Crypt.cpp + * docs/tutorials/015/Crypt.h + * docs/tutorials/015/Handler.cpp + * docs/tutorials/015/Handler.h + * docs/tutorials/015/Makefile + * docs/tutorials/015/Makefile.client + * docs/tutorials/015/Makefile.server + * docs/tutorials/015/Protocol_Stream.cpp + * docs/tutorials/015/Protocol_Stream.h + * docs/tutorials/015/Protocol_Task.cpp + * docs/tutorials/015/Protocol_Task.h + * docs/tutorials/015/Recv.cpp + * docs/tutorials/015/Recv.h + * docs/tutorials/015/Server.cpp + * docs/tutorials/015/Server.h + * docs/tutorials/015/Xmit.cpp + * docs/tutorials/015/Xmit.h + * docs/tutorials/015/client.cpp + * docs/tutorials/015/page01.html + * docs/tutorials/015/page02.html + * docs/tutorials/015/page03.html + * docs/tutorials/015/page04.html + * docs/tutorials/015/page05.html + * docs/tutorials/015/page06.html + * docs/tutorials/015/server.cpp + The beginnings of a protocol stream tutorial. The code is done but + the tutorializing (eg -- HTML and comments) isn't complete. + +Sat Oct 17 21:20:44 1998 David L. Levine + + * ace/OS.i (gethrtime): updated comments on Alpha rpcc + instruction. Only 32 bits of high-res tick count are + available, even the 64 bits are read by the rpcc instruction. + The high 32 bits are for implementation-specific use, such + as a virtual tick counter. + +Sat Oct 17 13:41:57 1998 Douglas C. Schmidt + + * test/Future_Test.cpp: Added more comments so that the structure + and participants in the Active Object pattern would be more + obvious. + + * ace/Message_Block: Added a priority parameter, which defaults to + 0, to one of the constructor for ACE_Message_Block so that it + simplifies the new Method_Request semantics. + + * ace/Method_Request.h: Added priority() accessor/mutator methods + so that we can control where a Method_Request is placed in the + Activation_Queue, which is just a Facade for an + ACE_Message_Queue. + + * ace: Renamed ACE_Method_Object to ACE_Method_Request to + correspond to the new version of the Active Object pattern at + http://www.cs.wustl.edu/~schmidt/Act-Obj.ps.gz. This change + involved renaming the Method_Object.h and Method_Object.cpp + files to Method_Request.h and Method_Request.cpp, respectively. + For backwards compatibility, I kept the Method_Object.h file, + which now just includes Method_Request.h and adds a typedef of + ACE_Method_Request to ACE_Method_Object so no applications + should break. New applications should use the new names, + however. + + * ace/Acceptor.h: Moved the + ACE_Oneshot_Acceptor::register_handler() method into the private + part of the class so that users won't be tempted to call it! + Thanks to Larry for reporting this. + + * examples/Connection/non_blocking/CPP-acceptor: Fixed a bug that + occurred when timers were used in conjunction with the + ACE_Oneshot_Acceptor and handle_close(). + + * ace/Acceptor: Cleaned up the ACE_Oneshot_Acceptor comments. + Boy, this was confusing ;-). Thanks to Larry + for reporting this. + +Sat Oct 17 12:54:17 1998 Douglas C. Schmidt + + * ACE version 4.5.60 released. + +Sat Oct 17 12:50:44 1998 Douglas C. Schmidt + + * Fixed a number of warnings that crept into the release + yesterday. Thanks to David Levine and DEC C++ for + reporting these. + +Sat Oct 17 00:35:21 1998 Douglas C. Schmidt + + * ACE version 4.5.59 released. + +Sat Oct 17 00:29:37 1998 Douglas C. Schmidt + + * ace/Service_Config.cpp (process_directives): Only warn about a + missing svc.conf file if we're debugging. + +Fri Oct 16 23:16:30 1998 David L. Levine + + * docs/ACE-guidelines.html: 1) use complete sentences for + comments and 2) use prefix operators where possible, such + as on an iteration loop index. + +Fri Oct 16 15:45:08 1998 Douglas C. Schmidt + + * ace/Service_Config: Added a new method called + init_svc_conf_file_queue() that will properly initialize the new + queue containing the list of svc.conf files. + + * ace/Service_Config: Added a return value to parse_args() to make + sure we do a sanity check... + + * ace: Replaced all #if !defined (ACE_FOO_H) with #ifndef + ACE_FOO_H since many C++ preprocessors can recognize this idiom + and optimize for it. + + * ace/Service_Config.cpp (parse_args): Modified the -S option to + enqueue the directives in FIFO order rather than in LIFO order. + It's more intuitive to process them in the order they are + received! + + * ace/Service_Config: It's now possible to give multiple -f + options to the Service Configurator and it will open multiple + files and process each one in the order specified in argv. This + is useful if svc.conf are generated by automatic tools, e.g., + Wizards, that are operating independently. Thanks to David + O'Farrell for suggesting this. + + * tests/Upgradable_RW_Test.cpp: Revised the programming style ;-). + + * tests/Map_Manager_Test.cpp: Replaced all uses of postfix ++ + operators with prefix ++ operators because they are faster when + iterating over the various Maps. + + * ace/[Hash_]Map_Manager: Today we decided to remove the use of + locking for the ACE[_Hash]_Map_Manager Iterators. The original + scheme acquired the mutex of the [Hash_]Map_Manager on every + ++operator++/--operator-- call. Not only was this very + inefficient, but it was also essentially useless since it + doesn't protect against arbitrary insertions/deletions in the + underlying map during the iteration. + + Our first thought was to put an ACE_Read_Guard into the iterator + itself and acquire this for the duration of the iteration. + However, this approach is totally broken when using STL-style + iterators since the postfix ++ and -- operators return a copy of + the iterator, which easily causes deadlocks if non-recursive + mutexes are used. + + After much discussion, we decided it's better to let users + figure out their own locking usecase, rather than have the + iterators guess wrong and either screw up their code or yield + substantial inefficiencies. Therefore, the right approach is to + do something like this: + + typedef ACE_Map_Manager MAP_MANAGER; + typedef ACE_Map_Iterator ITERATOR; + typedef ACE_Map_Entry ENTRY; + + void + foo (MAP_MANAGER &map) + { + // ... + { + // Explicitly grab the lock and hold it for the duration of + // the iteration. + ACE_READ_GUARD (ACE_Thread_Mutex, ace_mon, map.mutex ()); + + ITERATOR end = map.end (); + + for (ITERATOR iter = map.begin (); + iter != end; + ++iter) + { + ENTRY &entry = *iter; + ++i; + } + // ... + } + + Note that as a general rule, it's better to use ++i rather than + i++ to avoid unnecessary copies. + +Fri Oct 16 14:57:58 1998 Irfan Pyarali + + * ace/Hash_Map_Manager and Map_Manager: Fixed the operator++ and + operator--. Also, moved the guard from the individual methods + to the iterator. Now, the read guard is held for the life time + of the iterator. + +Fri Oct 16 14:51:57 1998 Nanbor Wang + + * ace/OS.cpp (thr_create): Made sure if users don't specify + whether to spawn threads detached or joinable, we'd change the + creation flag for them so that they are always joinable (not + detached.) This is important for unify the thread behavior on + different platforms that have various default thread creation + policies. Thanks to Susan Liebeskind + for motivating the change. + +Fri Oct 16 01:28:17 1998 Douglas C. Schmidt + + * ACE version 4.5.58 released. + +Thu Oct 15 23:50:41 1998 Douglas C. Schmidt + + * ACE version 4.5.57 released. + +Thu Oct 15 22:05:02 1998 Douglas C. Schmidt + + * ace/ACE.cpp (unique_name): Moved the arguments around in the + sprintf() in order to generate a better "unique name". Thanks + to Bob McWhirter for suggesting this. + +Thu Oct 15 21:20:36 1998 Irfan Pyarali + + * ace/Hash_Map_Manager.cpp (operator-- and operator++): + * ace/Map_Manager.cpp (operator-- and operator++): + + Fixed by value and by reference return values. + +Thu Oct 15 20:16:46 1998 James CE Johnson + + * docs/ACE-FMM.html: Updated with Bob McWhirter's latest changes. + Discussion of race conditions when spawning threads from within a constructor. + +Thu Oct 15 18:30:58 1998 Douglas C. Schmidt + + * ace/OS.h: Added ACE_HTONS(x) macros to complement ACE_HTONL(x) + macros. Thanks to Balaji Srinivasan + for reporting this. + + * ace/[Hash_]Map_Manager.cpp: Postfix and prefix were inverted. + They are correct now. Thanks to Balaji Srinivasan + for reporting this. + +Thu Oct 15 18:02:51 1998 Darrell Brunsch + + * ace/config-win32.h: For non-winnt systems, define + ACE_LACKS_RECVMSG and ACE_LACKS_SENDMSG. Thanks to Bill Hall + for pointing this out. + + [BTW, Bill was the 400th individual to contribute an ACE/TAO + bug report, thanks to everyone for all their help over the years!] + +Thu Oct 15 16:50:09 1998 Nanbor Wang + + * ace/SOCK_Dgram_Mcast.i (set_option): Need to convert the + from char to int for Win32 because the shortest length + of must be at least sizeof (int) on Win32. Thanks + to Johan Lundin for reporting this. + +Thu Oct 15 16:40:41 1998 Steve Huston + + * tests/Thread_Manager_Test.cpp: Allow suspend/resume to be tried on + pthreads, but don't allow any error other than ENOTSUP. This + catches a bug in Thread_Manager that lost the error values on an + error. + + * ace/Thread_Manager.cpp (ACE_THR_OP macro): Don't remove a thread + from the active threads list if an operation fails with ENOTSUP. + This was causing calls to suspend_grp/resume_grp to erase the list + of threads in a group on pthreads, then wait_grp didn't wait because + it thought there weren't any more threads. + +Thu Oct 15 12:43:46 1998 Nanbor Wang + + * ace/Task.cpp (activate): Changed to activate new active objects + using the same grp_id if this task has been activated before and + no new grp_id is specified in activate method. Also, the task's + grp_id will only get updated if it has never been updated even + if is set. This prevent the original + get lost but the consequence if that if users select to + force_activate new tasks with a different grp_id, the new grp_id + will get lost and the only way to wait for these threads is to + either perform a wait for all threads, or wait for each + individual thread by waiting on the thread handles returned by + the activate method. Thanks to Bob McWhirter + for motivating this change. + (ACE_Task_Base): Changed to initialize to -1. + +Thu Oct 15 10:07:13 1998 David L. Levine + + * ACE version 4.5.56 released. + +Thu Oct 15 09:54:07 1998 David L. Levine + + * tests/run_tests.sh: commented out MT_Reactor_Timer_Test because + it doesn't halt on g++/Solaris or DU 4.0. + + * include/makeinclude/wrapper_macros.GNU: for g++, added + -DACE_LACKS_PRAGMA_ONCE to CCFLAGS. Thanks to Kirk Ellet + for pointing out that is has to be done + in CCFLAGS rather than as a #define in OS.h, because + ace/Synch_T.h uses the pragma before config.h is #included. + +Wed Oct 14 23:20:45 1998 Douglas C. Schmidt + + * ACE version 4.5.55 released. + +Wed Oct 14 22:17:31 1998 David L. Levine + + * docs/ACE-guidelines.html: added guideline for protection of + header files against multiple inclusion. Thanks to + Eric C. Newton for pointing out the construct + used by gcc/g++ to minimize unnecessary file inclusion. + Fortunately, other compilers use the same method. And, + thanks to Susan Liebeskind for being + the last ACE user to suggest something like this, and to + Pat McNerthney for spurring the search for + such an optimization. + +Wed Oct 14 12:36:00 1998 Douglas C. Schmidt + + * tests/run_tests.sh: Added the MT_Reactor_Timer_Test. + + * tests/MT_Reactor_Timer_Test.cpp: Fixed a number of bugs with + this test. It seems to work fine on Solaris now. + + * tests/MT_Reactor_Timer_Test.cpp (main): Added a test to make + sure that the ACE_Reactor::handle_events() method properly + counts the number of expired timers. + + * ace/Select_Reactor_T: Updated the various methods so that + handle_events() now works as advertised, i.e., it actually + returns the number of event handlers it dispatched. + + * ace: Added + + #if !defined (ACE_LACKS_PRAGMA_ONCE) + #pragma once + #endif /* ACE_LACKS_PRAGMA_ONCE */ + + To all the header files in ACE. This should speed up + compilation time on platforms whose C++ compilers support + #pragma once. Thanks to Patrick J. McNerthney + for suggesting this. + + * ace/Functor.h: Moved the definitions of the constructor and + destructor of ACE_Command_Base into the *.i file. + + * ace/Select_Reactor_T: Enhanced dispatch_timer_handlers() so that + it passes the number of timers dispatched as an out parameter to + avoid any ambiguity. + +Wed Oct 14 15:30:42 1998 Steve Huston + + * ace/Message_Block_T.h: Removed ACE_Export from definition of template + class ACE_Locked_Data_Block. + +Wed Oct 14 12:36:00 1998 Douglas C. Schmidt + + * ace/config-cygwin32-common.h, + ace/config-cygwin32.h, + ace/OS.h: + Added support for Cygwin32. Thanks to Phil Feairheller + for contributing this. + + * ace/config-vxworks5.x.h, + ace/config-chorus.h, + ace/config-psos*.h, + ace/config-cygwin32-common.h, + ace/OS.i: + Added and used the new ACE_LACKS_MKFIFO macro. Thanks to Phil + Feairheller for reporting this. + +Wed Oct 14 11:03:45 1998 Douglas C. Schmidt + + * ACE version 4.5.54 released. + +Wed Oct 14 00:28:10 1998 Douglas C. Schmidt + + * ACE version 4.5.53 released. + +1998-10-14 Nagarajan Surendran + + * ace/Synch_T.cpp : Changed ACE_mutex_t to ACE_cond_t for CHORUS + in ACE_Condition constructor. + +1998-10-13 Nagarajan Surendran + + * ace/Synch.i (ACE_Mutex::remove): Added a #else for non-chorus + cases instead of #endif to call ACE_OS::mutex_destroy. + + * ace/OS.cpp : Added static member definition + KnCap ACE_OS::actorcaps_[ACE_CHORUS_MAX_ACTORS] + for CHORUS. + + * ace/config-chorus.h: Added ACE_HAS_TSS_EMULATION. + +Tue Oct 13 22:40:40 1998 Carlos O'Ryan + + * ace/Makefile: + * ace/Message_Block.h: + * ace/Message_Block.i: + * ace/Message_Block.cpp: + * ace/Message_Block_T.h: + * ace/Message_Block_T.i: + * ace/Message_Block_T.cpp: + Added a new variant of the ACE_Data_Block class that holds an + instance of its locking strategy, this is useful because in some + cases the lifetime of the lock is tied to the lifetime of the + Data_Block itself. The Message_Block class was carefullly + modified to support this new feature, i.e. it does not hold a + lock while removing the data block because the hold may be part + of the data block itself. Still all the features in the + Message_Blocks are supported, for instance, a complete + Message_Block chain ca be destroyed while holding a single lock, + shared by all the Data_Blocks in the chain. + +Tue Oct 13 22:39:42 1998 David L. Levine + + * tests/MM_Shared_Memory_Test.cpp (client): added an + ACE_ASSERT to check that shm is non-zero. + + * ace/OS.h,config-chorus.h,README: added + ACE_HAS_PTHREAD_PROCESS_ENUM support. Thanks to + Alberto Villarica and Naga + for tracking the problem with Semaphore_Test hanging. + + * ace/OS.h: changed default PTHREAD_PROCESS_SHARED from 0 to 1. + That way, it's different than PHTREAD_PROCESS_PRIVATE. + +Tue Oct 13 22:09:12 1998 Irfan Pyarali + + * ace/Mem_Map.cpp (map_it): One more try to get this right ;) + Thanks to Jonathan Reis for the bug + reports, suggested fixes, and test program. + +Tue Oct 13 21:17:37 1998 Alexander Babu Arulanthu + + * ace/Asynch_IO.cpp: + * ace/Proactor.cpp: Fixed the problem with POSIX4 implementation + of Asynch_Transmit_File. Thanks to James Hu and Irfan for + reporting this problem and helped me on the fixes. + +Tue Oct 13 18:07:21 1998 Steve Huston + + * ace/config-aix-4.2.x.h: Set up so it should work with gcc as well + as xlC. Rearranged defs and removed some duplicates. + Enabled ACE_HAS_4_4BSD_SENDMSG_RECVMSG and removed the redefs + of msgbuf fields. + + * tests/Thread_Pool_Reactor_Test.cpp: Moved the definition of + Acceptor_Handler to a new file, Thread_Pool_Reactor_Test.h to + satisfy AIX xlC's template instantiation. + +Tue Oct 13 15:56:09 1998 Nagarajan Surendran + + * ace/OS.i: Fixed a few errors on CHORUS. + +Tue Oct 13 08:48:36 EDT 1998 James CE Johnson + + * docs/ACE-tutorials.html + * docs/ACE-FMM.html + Added Bob McWhirter's "Frequently Made + Mistakes" list. + +Tue Oct 13 07:28:38 1998 David L. Levine + + * ace/High_Res_Timer.cpp (dump): replaced ACE_static_casts with + ACE_CU64_TO_CU32, because the method is const. Thanks to Doug + for reporting this. + + * ace/Thread_Manager.cpp (join): replaced __xlC__ test with + _AIX. That way, g++ and xlC will both use the three-arg + join call on AIX. Thanks to Ian Wright + for reporting this. + + * ace/Makefile,examples/Bounded_Packet_Relay/Makefile: + updated dependencies. + + * ace/OS.[hi],config-fsu-pthread.h,config-aix-4.[12].x.h, + config-mit-pthread.h,config-hpux-10.x.h,config-hpux11.h, + config-irix6.x-{g++,sgic++}.h,config-mvs.h,config-tandem.h, + config-osf1-3.2.h,config-osf1-4.0.h,config-sco-5.0.0-mit-pthread.h, + config-irix6.x-common.h,README: + removed ACE_HAS_TID_T and ACE_HAS_PTHREAD_T support. ACE_hthread_t + is now a simple typedef of pthread_t. It was before, also, but not + so simple :-) Before, it was a typedef of tid_t on platforms + that had ACE_HAS_TID_T but not ACE_HAS_PTHREAD_T. There were + no such platforms; so, it was pthread_t on all PTHREADS platforms. + Thanks to Ossama, Arturo, and Steve for sorting all this out. + We ended up with just a single typedef, so it was worth it. + + * ace/OS.i (thr_cmp): use pthread_equal with PTHREADS, same as + in ACE_OS::thr_equal (). Thanks to Ossama for pointing out that + they were different, but shouldn't have been. + + * ace/config-aix-4.2.x.h,config-fsu-pthread.h,config-hpux-10.x.h, + config-hpux11.h,config-irix6.x-{g++,sgic++}.h,config-mit-pthread.h, + config-mvs.h,config-osf1-3.2.h,config-osf1-4.0.h, + config-sco-5.0.0-mit-pthread.hconfig-tandem.h,README: + removed ACE_HAS_PTHREAD_EQUAL because it's no longer used. Thanks + to Ossama for motivating the above change to thr_cmp, which had + been the only use of ACE_HAS_PTHREAD_EQUAL. + + * ace/Log_Record.h,OS.h: changed C++-style comments to C-style + comments in preprocessor directives. Thanks to + Fernando D. Mato Mira for reporting these. + +Tue Oct 13 00:19:42 1998 Douglas C. Schmidt + + * ace/OS.i (sema_destroy): I believe I've fixed the rats nest of + #ifdefs to get semaphores to work correctly on Chorus again. + Thanks to Naga for tracking this down! + + * ace/High_Res_Timer.cpp: Temporarily commented out the + ACE_static_casts so that this will compile with CC. + + * ace/Hash_Map_Manager, + ace/Map_Manager: + Added a public mutex() accessor that allows us to return a + reference to the lock_. This is useful for cases where we're + using ACE_Process_Mutex and need to call remove(). Thanks to + Bob McWhirter for this suggestion. + +Mon Oct 12 23:03:26 1998 Douglas C. Schmidt + + * ace/Mem_Map.cpp (map_it): Added a minor fix to handle the fact + that Chorus doesn't support filesize() on a shared memory + segment. Thanks to Alberto Villarica + for reporting this. + +Mon Oct 12 22:18:03 1998 David L. Levine + + * ace/High_Res_Timer.cpp (dump): cleaned up output so that it + works and is consistent across all platforms. (long long + printing is not portable: some platforms use %llu and + others use %Lu). + +Mon Oct 12 18:39:09 1998 Irfan Pyarali + + * ace/Mem_Map.cpp: Revised the code to take the offset into + account when deciding whether to grow the backing store. + + Also, ACE_Mem_Map was trying to be too clever when it tries to + make sure that your offset is a multiple of the allocation + granularity. It ends up messing up user offset and length + calculations. Therefore, I have taken this out of ACE_Mem_Map + code. Users is still welcome to use + ACE_OS::allocation_granularity and + ACE::round_to_allocation_granularity by themselves. + +Mon Oct 12 14:39:15 1998 Douglas C. Schmidt + + * ace/Parse_Node.cpp: Added some ACE_const_casts to cleanup the + casting going on here. + + * examples/ASX/CCM_App/CCM_App.cpp: We need to make sure and use + the ACE_SVC_FACTORY_* macros so that the gobbler will be set + correctly. Purify rules! + + * ace/Makefile: Make sure to add the // $ Id: $ CVS string when + recreating Svc_Conf_Tokens.h. + + * ace/Svc_Conf.y: Just to be paranoid, make sure to set the + gobbler function to 0. At least this way we'll get crashes + rather than bizarre errors if users don't use the ACE_*FACTORY* + macros. + +Mon Oct 12 19:19:27 1998 James CE Johnson + + * docs/ACE-tutorials.html: + Added a link to Bob McWhirter's Frequently Made Mistakes page. + + * docs/tutorials/014/Makefile + * docs/tutorials/014/Task.{cpp|h} + * docs/tutorials/014/EndTask.h + * docs/tutorials/014/stream.cpp + * docs/tutorials/014/page0[123456].html + A slightly modified version of Bob McWhirter's ACE_Stream tutorial. + +Mon Oct 12 15:59:00 1998 David L. Levine + + * ace/Message_Block.cpp (size): removed unused local "old_base". + +Mon Oct 12 11:24:45 PDT 1998 James Hu + + * Asynch_IO.cpp: Minor changes to deal with FMR error. + + * Message_Block.{cpp,i,h}: Changed rd_ptr_ and wr_ptr_ to be + byte offsets from base (). This allows one to resize a + duplicate without trashing other Message_Blocks that may be + referring to the same data block. + + * Proactor.cpp: Made the message block 64 bytes bigger to make + purify happier. + +Mon Oct 12 12:14:45 1998 Douglas C. Schmidt + + * ace/Parse_Node.cpp (ACE_Stream_Node): In error cases, the strops + parameter can be NULL. Therefore, we need to protect against + this case. Thanks to David O'Farrell + for reporting this. + +Mon Oct 12 10:43:09 1998 Alexander Babu Arulanthu + + * ace/Asynch_IO.cpp (ACE_Asynch_Result): Fixed a double deletion + problem. Thanks to James Hu for reporting this. + +Mon Oct 12 09:43:07 1998 Carlos O'Ryan + + * ace/Containers_T.h: + * ace/Containers_T.cpp: + Added a new method to modify the size of an ACE_Array. + +Mon Oct 12 09:23:49 1998 David L. Levine + + * netsvcs/lib/Name_Handler.cpp (lists_entries): one more try + to fix the egcs 1.1b bug: removed the ptmf temporary entirely. + +Sun Oct 11 17:33:22 1998 Douglas C. Schmidt + + * ace/Synch.cpp: Fixed a typo, s/lock_/process_lock_/. Thanks to + Naga for noticing this. + +Sun Oct 11 08:19:33 1998 David L. Levine + + * ace/config-linux-common.h: re-enabled msg_* undefs and defines, + but for libc5 (non-glibc) only. Thanks to JM Strauss + for verifying that they're needed. + + * netsvcs/lib/Name_Handler.cpp (lists_entries): replaced + switch statement with a multi-branch if statement, to + avoid Internal compiler error 980331 with egcs 1.1b (2.91.57) + (on Linux/alpha). + +Sat Oct 10 18:30:02 1998 Douglas C. Schmidt + + * ace/Synch_T: Added a process condition abstraction for Chorus + that is based on a condition variable stored in shared memory. + Thanks Alberto Villarica for + this. + + * ace/Synch: Added a process mutex abstraction for Chorus that is + based on a mutex stored in shared memory. Thanks Alberto + Villarica for this. + + * ace/config-chorus.h: Updated the config file for Chorus. Thanks + Alberto Villarica for this. + + * ace/OS.i: Added rudimentary flock support for Chorus. Thanks + Alberto Villarica for this. + + * ace/OS.i: Added exec*() support for Chorus. Thanks Alberto + Villarica for this. + + * ace/config-chorus.h: Added #include of file . + + * ace/Local_Name_Space_T.cpp (create_manager_i): Added a special + case for CHORUS so that we use a base address of 0. Thanks to + Alberto Villarica for reporting + this. + + * ace/Local_Name_Space_T.cpp (create_manager_i): Don't use + ACE_OS::access() if the platform lacks it. Thanks to Alberto + Villarica for reporting this. + +Sat Oct 10 18:33:06 1998 Alexander Babu Arulanthu + + * tests/Aio_Platform_Test.cpp: Comments. + +Sat Oct 10 17:42:18 1998 Douglas C. Schmidt + + * ACE version 4.5.52 released. + +Sat Oct 10 16:44:24 1998 Douglas C. Schmidt + + * ace/Service_Repository.cpp: Improved the documentation and added + some new ACE_const_casts. Thanks to Eric Palantir + for motivating this. + + * ace/Service_Config.cpp (open): The logger key should be set to + the static logger key only if the key supplied is EQUAL with the + default logger key. Thanks to Eric Palantir + for reporting this. + +Sat Oct 10 16:28:00 1998 Carlos O'Ryan + + * ace/Synch.h: + * ace/Synch.i: + * ace/Synch.cpp: + The ACE_Process_Mutex class was allocating one of its members + from the heap, thus it could not be placed in shared memory. + The problem was that the member required the creation of a + unique name if the user did not provide one; making the buffer + for this unique name a member of ACE_Process_Mutex allowed us to + initialize the lock_ member while still allocating it as a + member of the class. Thanks to Bob McWhirter + for helping to track this down. + +Sat Oct 10 12:45:31 1998 Douglas C. Schmidt + + * ace/Malloc_T.h: Added a documentation entry for class + ACE_Cached_Allocator. Thanks to Erik Koerber + for reporting this. + +Sat Oct 10 00:40:05 1998 Douglas C. Schmidt + + * ACE version 4.5.51 released. + +Fri Oct 09 23:47:42 1998 Irfan Pyarali + + * ace/Mem_Map.cpp (map_it): Fixed the setting of length_ again. + Hopefully, it will be right this time. + +Fri Oct 9 15:37:26 PDT 1998 James Hu + + * ace/Mem_Map.cpp: Protect against assigning 0 to length_. This + was causing JAWS to fail. + +Fri Oct 9 16:59:26 1998 Nagarajan Surendran + + * examples/IPC_SAP/SOCK_SAP/run_test: + * examples/IPC_SAP/SOCK_SAP/summarize: + Fixed the scripts to print the results correctly.Fixed + comments and usage. + +Fri Oct 09 16:35:00 1998 Chris Gill + + * ace/Timer_Queue_Adapters.cpp + ace/ace_dll.dsp + examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.{cpp, h}: + Fixes for deferred callbacks in the BPR example on NT. + +Fri Oct 09 11:59:26 1998 David L. Levine + + * include/makeinclude/wrapper_macros.GNU: removed RM override + because it's not necessary. Thanks to + Tres Seaver for this suggestion. + + * include/makeinclude/platform_chorus_ghs.GNU, + platform_irix6.x-sgic++.GNU,platform_osf1_3.2.GNU, + platform_osf1_4.0.GNU,platform_osf1_4.0_rcc.GNU, + platform_sunos5_sunc++.GNU: + replaced hard-coded /bin/rm -f with $(RM). Thanks to + Tres Seaver for this suggestion. + + * ace/Containers_T.{h,cpp}: removed unecessary (and impolite) + argument name. + +Fri Oct 09 00:44:21 1998 Irfan Pyarali + + * ace/OS.i (mmap): CreateFileMapping must be created with a length + of 0 (which will get translated to the size of the file). This + must not be since only deals with the mapping of the + view and not with the file mapping object. It is ok to use 0 + since we are trying to emulate UNIX's mmap. + + * ace/ACE.cpp (round_to_allocation_granularity): + ace/OS.i (allocation_granularity): + + New methods. We need allocation granularity when rounding off + the offset in mmap and not the page size. Only on Win32, + allocation granularity is different from pagesize. + + * ace/High_Res_Timer.cpp: Added the inclusion of Object_Manager.h. + Otherwise, NT was picking up the definition of + ACE_Static_Object_Lock. + + * ace/Mem_Map.cpp (map_it): Fixed the problem where a requested + length of less than the filesize was being ignored. Also, + changed round_to_pagesize() to round_to_allocation_granularity(). + Thanks to Jonathan Reis for + pointing this bug out. + +Fri Oct 09 00:02:01 1998 Alexander Babu Arulanthu + + * ace/Asynch_IO.cpp: The YET another problem with doing multiple + Asynch_Accepts have been fixed. Thanks very much James Hu for + reporting this. I was calling reactor's resume_handlers and + suspend_handlers instead of only for one handle. Thanks very + much Irfan! for pointing this out. + +Thu Oct 08 23:06:20 1998 David L. Levine + + * config-linux-common.h: on Alpha only, added ACE_POLL_IS_BROKEN. + High_Res_Timer_Test revealed that it's necessary with + glibc 2.0.7-13. I don't think that its necessary on + Pentiums, but maybe it depends on glibc version. + + * OS.i (gethrtime),High_Res_Timer.cpp OS.i,README: + added ACE_HAS_ALPHA_TIMER support. See the comment + in ACE_OS::gethrtime about it being limited to 32 bits. + I don't know why, but that severely limits the range + of high res times. Therefore, it's not enabled by default + in any config files. + +Thu Oct 08 15:22:22 1998 Arturo Montes + + * ace/OS.{i,cpp}: Reverted FSU thread changes for now. + +Thu Oct 08 15:11:34 1998 Nanbor Wang + + * ACE-INSTALL.html: Updated document about spawning new thread + when ACE_HAS_MFC is defined. CWinBeginThread is not used + automatically. Users have to explicitly ask for this. + +Thu Oct 8 12:11:08 1998 Nagarajan Surendran + + * examples/IPC_SAP/SOCK_SAP/run_test: + * examples/IPC_SAP/SOCK_SAP/summarize: + + Added these scripts to run the test and summarize the + results. These scripts are modelled similar to the + $TAO_ROOT/performance-tests/Cubit/TAO/MT_Cubit scripts. + Thanks to David for the scripts. + +Thu Oct 08 08:23:09 1998 David L. Levine + + * ace/High_Res_Timer.cpp (get_registry_scale_factor): + default global_scale_factor to 1000 instead of 1, + because ACE_OS::gethrtime () defaults to nanoseconds. + Thanks to Peter Nordlund for + reporting that High_Res_Timer_Test failed on Irix without + this fix. + + * ace/Makefile (Svc_Conf_l.cpp): use Doug's flex to generate + this file, if running on a DOC group machine, instead of + using whatever flex is first on the users path. + + * etc/README: fixed typo. + + * ace/Svc_Conf_l.cpp,etc/Svc_Conf_l.cpp.diff (ACE_YY_DECL): + initialize ace_yy_cp and ace_yy_bp to 0 to avoid egcs 1.1 + warning about possible use before initialization. + +Wed Oct 7 23:47:29 1998 Alexander Babu Arulanthu + * ace/Asynch_IO.cpp: + * ace/Proactor.cpp : Fixed the problem with doing multiple + Asynch_Accepts. Thanks to James Hu for reporting this + problem. Thanks very much Irfan!!!, for helping me a lot in fixing + this one. + +Wed Oct 07 23:14:36 1998 Douglas C. Schmidt + + * ACE version 4.5.50 released. + +Wed Oct 7 21:44:20 1998 Douglas C. Schmidt + + * ace/Stream.h: Added a default value of 0 for both put() and + get(), which is more consistent with the underlying putq() and + getq() methods on ACE_Task. Thanks to Bob McWhirter + for this suggestion. + +Wed Oct 7 18:18:14 1998 Carlos O'Ryan + + * README: + * ace/config-irix6.x-g++.h: + * ace/config-irix6.x-common.h: + * ace/config-irix6.x-sgic++-nothreads.h: + Peter Nordlund kindly submitted a common + configuration file for IRIX 6.X that works with both g++ and SGI + MIPSPro 7.X + +Wed Oct 7 17:21:17 1998 Arturo Montes + + * ace/OS.{i,cpp}: FSU pthreads is draft6, but FSU in SCO is an + special port. The API is draft6 but return values is DRAFT7 + (really I am moving to STD). + +Wed Oct 07 09:30:00 CDT 1998 Chris Gill + + * ace/Functor.{cpp, h, i} + ace/Functor_T.{cpp, h, i} + ace/Makefile: + + Added ACE_Command_Base abstract base class and derived class + template ACE_Command_Callback to ACE to support the GOF Command + design pattern. + + * ace/Timer_Queue_Adapters.{cpp, h}: + + Added registration and deferred executiton of ACE_Command_Base + objects to ACE_Thread_Timer_Queue_Adapter. This is conditionally + compiled if the ACE_HAS_DEFERRED_TIMER_COMMANDS symbol is defined. + + * examples/Bounded_Packet_Relay/BPR_Drivers.{cpp, h} + examples/Bounded_Packet_Relay/BPR_Drivers_T.{cpp, h} + examples/Bounded_Packet_Relay/Makefile + examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.{cpp, h} + examples/Bounded_Packet_Relay/bpr_thread.cpp: + + Changed example to use ACE_Command_Callback objects, modified event + handlers to register ACE_Command_Callback objects for deferred + excecution of timer cancellations and registrations. + +Wed Oct 07 02:37:58 1998 Douglas C. Schmidt + + * ACE version 4.5.49 released. + +Wed Oct 7 00:11:33 1998 Nanbor Wang + + * ACE-INSTALL.html: Added more information on using MFC with ACE, + some explanations about using run-time libraries and information + about VC6. + + * tests/version_tests/version_tests.dsw: Removed + MsgQueue_Notifications_Test.dsp and added + Message_Queue_Notifications_Test. + + * tests/*.dsp: Changed to use DLL version of run-time libraries + for static builds. Notice that user libraries are still linked + in statically. Only the run-time libraries are effected. + + * ace/README: Added information for ACE_USES_STATIC_MFC. + + * ace/config-win32-common.h: Re-structured MFC related macros + (_AFXDLL and _WINDLL) so that it allows us to use MFC in static + ACE libraries and the setting of MFC can propagate to + applications. By default, ACE uses MFC DLL if ACE_HAS_MFC=1. + If you want to use MFC as a static library, besides + ACE_HAS_MFC=1, also define ACE_USES_STATIC_MFC. Thanks to Jason + Milley for noticing the problem + of compiling static ACE library with MFC. + +Tue Oct 6 15:06:21 1998 Steve Huston + + * ace/Asynch_IO.cpp (ACE_Asynch_Accept_Handler): Removed the + version of the ctor with no args - it's equivalent to the one + with all defaulted args, and HP aCC complained. + + * ace/NT_Service.{h cpp i}: New class, ACE_NT_Service. This provides + a class and supporting macros to integrate NT Services into the + ACE framework at run-time. I'll work on getting an example into + the kit soon. + + * ace/ACE_Library.{mak mdp}: + ace/ace_dll.dsp, ace_lib.dsp: Added NT_Service files. + +Tue Oct 6 12:49:37 EDT 1998 James CE Johnson + + * docs/tutorials/006/client_handler.cpp + * docs/tutorials/006/page05.html + Susan Liebeskind discovered that invoking the baseclass + close() after handle_close() in Client_Handler::close() + causes the object to be destructed twice. I've removed + the call to the baseclass close(). She reports success + on Solaris, Dec and AIX. I've verified that Linux also + works fine with this fix. + +Tue Oct 06 09:53:22 1998 David L. Levine + + * ace/config-fsu-pthread.h,config-mit-pthread.h,config-mvs.h, + config-sco-5.0.0-mit-pthread.h,config-tandem.h,README: + removed ACE_HAS_YIELD_VOID_PTR because it's no longer used. + Thanks to Ossama for reporting this. + + * config-dgux-4.x-ghs.h,config-hpux-10.x.h,config-mit-pthread.h, + config-mvs.h,config-sco-5.0.0-mit-pthread.h,config-tandem.h,README: + removed ACE_LACKS_KEYDELETE because it's no longer used. Thanks to + Ossama for reporting this. + +Tue Oct 06 03:36:22 1998 Douglas C. Schmidt + + * ACE version 4.5.48 released. + +Tue Oct 06 02:53:28 1998 Douglas C. Schmidt + + * ACE version 4.5.47 released. + +Tue Oct 6 02:16:01 1998 Alexander Babu Arulanthu + + * ace/Asynch_Acceptor.cpp: + * ace/Asynch_IO.cpp (handle_input): + * ace/Proactor.cpp: + In POSIX implementation of Asynch_Accept, We dont have to read + initial data to read on to the Message Block given to the + Asynch_Accept. So we dont use it at all. We get local and peer + address from using socket and pass back to the application. + +Mon Oct 05 23:58:16 1998 Douglas C. Schmidt + + * ACE version 4.5.46 released. + +Mon Oct 5 23:19:30 1998 Nanbor Wang + + * ace/OS.cpp (fork): Changed to use fork1 when ACE_HAS_STHREAD is + defined. Otherwise, file descriptors get messed up and socket + connections get lost after exec'ing a new program. Generally + speaking, you should not simply fork a multi-threaded program + without calling exec (). On pthread compliant platform, fork + does what fork1 does on solaris thread. + +Mon Oct 05 21:21:42 1998 Douglas C. Schmidt + + * ACE version 4.5.45 released. + +Mon Oct 05 15:59:55 1998 David L. Levine + + * ACE version 4.5.44 released. + +Mon Oct 05 15:23:04 1998 Douglas C. Schmidt + + * ACE version 4.5.43 released. + +Mon Oct 5 15:34:41 1998 James CE Johnson + + * docs/tutorials/002/handler.h: Added includes for INET_Addr.h, + SOCK_Stream.h and Reactor.h. Susan Liebeskind pointed out that + AIX gets confused in processing templates if these aren't present. + +Mon Oct 05 10:02:37 1998 David L. Levine + + * ace/config-chorus.h: added ACE_LACKS_TRUNCATE. Thanks + to Steve Kay for reporting this. + + * tests/Semaphore_Test.cpp: added some ifdefs so that it + builds cleanly with ACE_HAS_POSIX_SEM. + +Sun Oct 05 03:49:09 PDT 1998 James Hu + + * ace/Asynch_Accept.* + * ace/Asynch_IO.* + Made some small modifications to support passing in and + retrieving an ACT when performing asynchronous accept. + +Sun Oct 04 22:07:09 1998 David L. Levine + + * ace/config-fsu-pthread.h,config-hpux-10.x.h,config-lynxos.h, + config-mit-pthread.h,config-mvs.h,config-osf1-3.2.h, + config-osf1-4.0.h,config-sco-5.0.0-mit-pthread.h,config-tandem.h, + README: removed ACE_HAS_PTHREAD_GETSPECIFIC_DATAPTR, because it's + no longer used. Thanks to Ossama for reporting this. + + * ace/config-tandem.h,README: removed ACE_HAS_PTHREAD_YIELD_VOIDPTR, + because it's no longer used. It was commented out in + config-tandem.h, anyways. Thanks to Ossama for reporting this. + +Sun Oct 4 20:00:44 1998 Carlos O'Ryan + + * bin/auto_compile: + Fixed the regular expression to detect compile errors. + The user can pass extra arguments to GNU make, the arguments are + given as the script is invoked. + +Sun Oct 4 14:30:03 1998 Nanbor Wang + + * ace/TP_Reactor.cpp (handle_events): Made sure we never suspend + the without holding the . Otherwise, + depend on how an OS schedules ready threads, we may have a + Reactor that could never be woken up. This leads to a very + delicate race condition when other threads which need to modify + Reactor's state get block on the token (because they couldn't + wake up the reactor). These threads later block the + nofify_handler thread when it's ready to resume + + (notify_handle): Since we don't suspend the , + there's no need to resume it here. + +Sat Oct 3 13:11:48 1998 Carlos O'Ryan + + * bin/auto_compile: + Removed some of the tests, they were crashing more often than + not. + +Sat Oct 3 09:36:09 1998 Alexander Babu Arulanthu + + * examples/Reactor/Proactor/test_proactor.cpp: Comments. + +Sat Oct 03 09:24:45 1998 Susan Liebeskind + + * ace/Task.h,Thread.h,Thread_Manager.h,Timer_Queue_Adapters.h + (activate,spawn,spawn_n): added THR_JOINABLE to THR_NEW_LWP + default flags. + + On the boxes which implement POSIX 1003.1.b (Solaris, Digital Unix) + threads spawned using default flags provided by those methods were, + and still are, created *joinable*. + + On the box which implements Draft 7 (AIX), the spawned threads were + *detached*. With this change, they'll be created *joinable*, + instead. + + This change ensures consistent behavior across all platforms. + +Sat Oct 03 09:04:44 1998 David L. Levine + + * ace/ACE.cpp (set_handle_limit): wrapped the final + return statement with #ifdef __sgi. Irix complains without + this return statement. DEC cxx (correctly) says that it's not + reachable. ACE_NOTREACHED won't work here, because it handles + both platforms the same. + + * include/makeinclude/wrapper_macros.GNU: with quantify=1 + on sparcs, add -record-register-window-traps to $(PRELINK). + Thanks to Andy for discovering this Quantify option, for sparcs. + +Fri Oct 2 23:43:51 1998 Carlos O'Ryan + + * ace/config-irix6.x-g++.h: + * ace/config-irix6.x-sgic++-nothreads.h: + * ace/OS.h: + IRIX puts in header of IRIX, it is only + relevant for the autoconf project. + + * ace/ACE.cpp: + Added an extra return to make IRIX compiler happy. + +Fri Oct 2 21:48:18 1998 Nanbor Wang + + * tests/Thread_Pool_Reactor_Test.cpp: Send the message length + before each message so we don't need to use time delay to + separate consecutive requests. + +Fri Oct 02 16:27:07 1998 Nanbor Wang + + * ace/Thread_Manager.cpp: ACEified some code. + (terminate): Do not register a thread as being terminated if it + is being joined by another thread. Just remove it from + Thread_Manager's thr_list_. + +Fri Oct 2 00:19:04 1998 Nanbor Wang + + * tests/Thread_Pool_Reactor_Test.cpp: Fixed explicit template + instantiation. + + * ace/Strategies_T.{h,i,cpp}: Removed classes + ACE_Thread_Pool_Strategy and ACE_Svc_Handler_Pool_Strategy. + + * tests/run_tests.{sh,bat}: Added Thread_Pool_Reactor_Test into + one-buttoned test scripts. + +Thu Oct 01 12:04:30 1998 Nanbor Wang + + * tests/Thread_Pool_Reactor_Test.cpp: Added a command line argument + parser. + +Thu Oct 1 08:51:00 1998 Douglas C. Schmidt + + * tests/Thread_Pool_Reactor_Test.cpp: Reformatted the + code a bit. + + * ace/ACE.cpp (max_handles): Added yet another fix for AIX. + Thanks to Chris Lahey for this. + +Thu Oct 01 01:05:49 1998 Nanbor Wang + + * tests/tests.dsw: + * tests/version_tests/version_tests.dsw: + * tests/Thread_Pool_Reactor_Test.{cpp,dsp}: Added a new test that + torture tests the new ACE_TP_Reactor. + +Thu Oct 01 00:09:35 1998 Irfan Pyarali + + * ace/ACE.cpp: Fixed max_handles(). + + * tests/Conn_Test: Removed template specialization for + INET_Addr.hash(). + + * ace/Addr.i (hash): + * ace/INET_Addr.i (hash): + + Finally gave up with template specialization hell and freak'in + broken compilers and simply added a hash() method to ACE_Addr + and ACE_INET_Addr. ACE_Addr::hash() simply return 0 and should + be overwritten by subclasses that can provide better hashing. + +Wed Sep 30 10:16:56 1998 Douglas C. Schmidt + + * ace/ACE.cpp: Modified max_handles() so that it goes the right + thing on platforms like AIX that don't have any predefined limit + on the number of handles. Thanks to Chris Lahey + for reporting this. + +Wed Sep 30 01:56:54 1998 Irfan Pyarali + + * ace/Strategies_T: + + - ACE_Refcounted_Hash_Recyclable::operator==(const T &rhs): + Added new method to prevent implicit type conversions. + + - Changed ACE_Hash_Addr::hash_i to return u_long instead of + size_t. This makes it similar to the return value from + hash(). + + - Added hash caching ability to ACE_Hashable. + + - Removed the use of ACE_Hash_Addr inside the + ACE_Cached_Connect_Strategy. This allows us to reduce + implicit type conversions inside connect_svc_handler(). + + Users are now required to specialize + ACE_Refcounted_Hash_Recyclable::hash_i (void) instead + of ACE_Hash_Addr::hash_i(const ACE_INET_Addr&addr) + + * tests/Conn_Test.cpp: Changed template specialization of + ACE_Hash_Addr::hash_i(const ACE_INET_Addr&addr) + to ACE_Refcounted_Hash_Recyclable::hash_i (void). + + * ace/OS.cpp (open): Fixed a couple of things that were broken + with respect to when the SetFilePointer was called and when lock + was released. Also fixed the UNICODE version of open(). BTW, + these functions had to be moved from OS.i to OS.cpp since the + ACE_Managed_Object is not visible from OS.i. + +Wed Sep 30 02:29:48 1998 Carlos O'Ryan + + * performance-tests/TTCP/ACE-C++/Makefile: + * performance-tests/TTCP/ACE-C++/wrapper-new-ttcp.cpp: + Hacked so it would compile, don't know anything further than + that. + +Tue Sep 29 21:55:52 1998 Irfan Pyarali + + * ace/ace.dsw: Removed Connector.cpp from the compile list since + it is a files with template classes only. + +Tue Sep 29 21:14:02 1998 Nanbor Wang + + * ace/OS.i (open): Grab a lock from the Object_Manager when + O_APPEND is defined to simulate atomic behavior on most UNIX + platforms. Thanks to Irfan. + +Tue Sep 29 19:16:57 1998 James CE Johnson + + * docs/tutorials/007/thread_pool.h + * docs/tutorials/007/thread_pool.cpp + Added virtual methods for open() and close() that match the + baseclass. This will keep some compilers from complaining about a + partial-overload attempt. Thanks to Bob McWhirter for catching this. + +Tue Sep 29 16:13:10 1998 Irfan Pyarali + + * ace/Strategies_T: + * ace/Connector: + + Added accessors for the strategy. + +Tue Sep 29 14:04:49 EDT 1998 James CE Johnson + + * docs/tutorials/013/page08.html: Removed link to message_queue. + Thanks to Jeff Hellzen for pointing this out. + +Tue Sep 29 11:05:04 1998 David L. Levine + + * ace/README: removed ACE_HAS_ONLY_TWO_PARAMS_FOR_ASCTIME_R_AND_CTIME_R + because it is no longer used. Thanks to Ossama for reporting this. + + * ace/config-fsu-pthread.h,config-mit-pthread.h,config-mvs.h, + config-sco-5.0.0-mit-pthread.h,config-tandem.h,README: + removed ACE_HAS_PTHREAD_DSTATE_PTR because it is no longer used. + Thanks to Ossama for reporting this. + +Mon Sep 28 20:35:49 1998 Sergio Flores + + * ace/Containers_T.h: + * ace/Containers_T.cpp: Added begin () and end () to + ACE_Unbounded_Queue. + +Mon Sep 28 16:06:05 1998 David L. Levine + + * ace/OS.*,Object_Manager.{h,cpp}: removed ACE_HAS_TSS_EMULATION's + support for ACE_HAS_NATIVE_KEYS. Now, if ACE_HAS_TSS_EMULATION + is used and ACE_HAS_THREAD_SPECIFIC_STORAGE is #defined, then + the ACE TSS emulation will use one native TSS key. + + ACE_TSS_EMULATION may be useful even on platforms that + have native thread specific storage. It offers these + advantages: + + 1) ACE's TSS emulation offers a configurable number of TSS + keys, via ACE_DEFAULT_THREAD_KEYS. Most (all?) native TSS + implementations have a fixed number of keys. LynxOS 3.0.0, + for example, only has three keys available to applications. + + ACE_DEFAULT_THREAD_KEYS defaults to 64, to match the + number of native keys on Windows NT. + + 2) ACE's TSS emulation recycles deleted keys. Some native TSS + implementations, such as POSIX Draft 4, POSIX Draft 6, and + Solaris, do not allow deletion of TSS keys. Therefore, + unused keys cannot be recycled. + + 3) ACE's TSS emulation calls destructors on TSS objects in the + main thread. Solaris' native TSS, for example, does not. + + There is one known drawback to using ACE's TSS emulation: it is + slower than using native TSS. The performance penalty is + probably negligible for most applications, however. It involves + just an additional function call, an array index, and three numeric + comparisons beyond the native TSS call. The function call is + _not_ a virtual function call. (On MVS, there's an additional + memcpy of the TSS key with TSS emulation.) + + TSS emulation is enabled by default in the ACE configurations + for VxWorks, pSOS, and LynxOS. + + Many thanks to Arturo Montes for + expanding TSS emulation to platform that have native TSS. + +Sun Sep 27 20:12:13 EDT 1998 James CE Johnson + + * docs/tutorials/index.html: Linked in Tutorial 13 + +Sun Sep 27 18:53:25 1998 Carlos O'Ryan + + * tests/Map_Manager_Test.cpp: + Instead of clearing the capacity and size in the + free_search_structure() method we do it on the close() + method. The first method is also used in other places... + +Sun Sep 27 18:25:57 1998 David L. Levine + + * ace/OS.i (readdir_r): added __USE_POSIX test for three-arg + ::readdir_r (). Thanks to james@tsunami.com for providing + the patch. + +Sun Sep 27 09:35:04 1998 James CE Johnson + + * docs/tutorials/013/* + Completed Tutorial 013! The code is up to date and compilable on + RedHat Linux with egcs 1.1. It may need some template help on other + platforms. The HTML is done and in synch with the code. + +Sun Sep 27 01:52:36 1998 Carlos O'Ryan + + * ace/INET_Addr.cpp: + The get_host_name() method was returning the first name, and not + looking up in the alias list for the right match with the + address. + +Sun Sep 27 00:18:48 1998 Nanbor Wang + + * ace/Makefile: Updated dependency. + + * ace/OS.cpp (invoke): + * ace/Thread_Manager.cpp (ace_thread_manager_adapter): + (ACE_Thread_Exit::instance): Removed conditional macro + ACE_HAS_PTHREAD_SIGMASK so the Thread_Exit instance can be place + in TSS. This was guarded by ACE_HAS_PTHERAD_1003_DOT_3 which + later merged with ACE_HAS_PTHERAD_SIGMASK. However, the + origianl intension of this condition was to fix a bug in Xavier + pthread implementation. The effect of merging the two macros + forces ACE_Thread_Exit be allocated from stacks which, in turn, + prevent threads from exiting properly when pthread_cancel is + used. + + Linux is the only platform that I know which uses Xavier thread + library. The bug has apparently been fixed. If your platform + segfaults while spawning threads, please let me know. Thanks to + Chris Gill for noticing the abnormal behavior when calling + ACE_Thread::thr_cancel. + +Sat Sep 26 23:20:52 1998 Alexander Babu Arulanthu + + * ace/Proactor.cpp: Fixed the g++ warnings. + +Fri Sep 25 23:19:52 1998 David L. Levine + + * ace/Sched_Params.cpp: use both ACE_HAS_STHREADS and + ACE_HAS_PRIOCNTL. With just ACE_HAS_PRIOCNTL, the + min/max priority values weren't right on DU 4.0. With + this change, we're back to the strict POSIX interface + on DU 4.0, and SunOS if ACE_HAS_STHREADS is not #defined. + +Fri Sep 25 21:58:35 1998 Irfan Pyarali + + * ace/ACE.cpp (set_handle_limit): Added appropriate return value. + +Fri Sep 25 22:10:38 1998 Carlos O'Ryan + + * ace/Map_Manager.cpp: + Map_Manager::close() did not reset the capacity or current size + of the map. + +Fri Sep 25 18:24:17 1998 Darrell Brunsch + + * ace/Proactor.{h,cpp}: Had to allow the definition of + POSIX_COMPLETION_STRATEGY for the do-nothing constructor on + NT. + +Fri Sep 25 18:07:19 EDT 1998 James CE Johnson + + * A few more minor changes to docs/tutorials/013. With luck, the + HTML part will be done this weekend! + +Fri Sep 25 14:51:54 1998 Alexander Babu Arulanthu + + * ace/Asynch_IO.h: + * ace/Asynch_IO.cpp: + * ace/Proactor.h: + * ace/Proactor.cpp: + Implemented Asynch_Accept to work for AIO_CONTROL_BLOCKS strategy of + completion notification. + + Defined an auxillary Accept_Handler called ACE_AIO_Accept_Handler in + addition to the ACE_Asynch_Accept_Handler. ACE_AIO_Accept_Handler + holds the notification pipe and does a read on it to handle the + coming from Asynch_Accept_handler. + + THANKS to Doug and Irfan for suggesting this 'notification pipe' based + implementation for AIO_CONTROL_BLOCKS strategy, so that Proactor will + work on platforms where POSIX4 RT_Signals are broken (Solaris 2.6 !) + + Note : Proactor uses AIO_CONTROL_BLOACKS strategy by default on + POSIX4 platforms. Call the constructor with RT_SIGNALS to enable + Real Time singal implementation. + + This should become very easier when we finish organizing these + files according to the Bridge pattern. + +Fri Sep 25 12:40:45 1998 David L. Levine + + * ace/config-sunos5.{5,6}.h: removed #define/#undef of + ACE_THR_PRI_FIFO_DEF. They're no longer needed with the + hard-coded ACE_THR_PRI_* values for Solaris in ace/OS.h. + + * ace/OS.i: removed carriage returns. Thanks to Darrell + for noticing it. + + * tests/Handle_Set_Test.cpp: removed ACE_Node + template instantiation because it conflicted with the + ACE_Node instantiation in ace/Stats.cpp. + + * docs/ACE-porting.html: updated "auto configure" link. Thanks + to Ossama for reporting this. + + * ace/ACE.cpp (set_handle_limit): on platforms with + ACE_LACKS_RLIMIT or ! RLIMIT_NOFILE, don't use + ACE_NOTSUP_RETURN if the new_limit is <= the cur_limit. + On those platforms, the limit can't be changed anyways, + and the request was _not_ to increase the limit. So, + it's a no-op; just return 0. + +Fri Sep 25 12:15:00 1998 Irfan Pyarali + + * ace: The following ACE_TRACE calls being made during the + creation of the ACE_Log_Msg instance. The ACE_TRACE calls then + try to create the ACE_Log_Msg instance which then ends up + executing the ACE_TRACE's. Etc, etc, etc... + + Here are the methods with the ACE_TRACEs that I commented out to + get ACE to run: + + ACE_IPC_SAP::~ACE_IPC_SAP + ACE_SOCK::ACE_SOCK + ACE_SOCK::~ACE_SOCK + ACE_SOCK_IO::ACE_SOCK_IO + ACE_SOCK_IO::~ACE_SOCK_IO + ACE_SOCK_Stream::ACE_SOCK_Stream + ACE_SOCK_Stream::~ACE_SOCK_Stream + ACE_Thread::keycreate + ACE_Thread::setspecific + ACE_Thread::getspecific + + Thanks to "Patrick J. McNerthney" for this bug + report. + +Fri Sep 25 10:10:12 1998 Steve Huston + + * ace/OS.i (cond_timedwait): Add EINTR to the list of errno values + that get changed to ETIME on wait timeout. EINTR is from LynxOS. + Thanks to David Levine for this fix. + + * tests/Semaphore_Test.cpp: Remove the assertion that a timed out + semaphore will return EINTR for ACE_HAS_PTHREADS_DRAFT4. All + platforms expect ETIME, which is normalized in + ACE_OS::cond_timedwait. + +Thu Sep 24 22:31:30 1998 David L. Levine + + * ace/OS.h: hard-coded the ACE_THR_PRI_* values on suns. + SunOS 5.6 could use sched_get_priority_min/max () for FIFO + and RR. But for OTHER, it returns negative values, which + can't be used. And, sched_get_priority_min/max () aren't + supported in SunOS 5.5.1. It would really be helpful + if SunOS defined PRI_FIFO_MIN, etc., in sched.h, but + it doesn't, probably because its process scheduling is + so flexible. Thanks to Russ Noseworthy + for helping to figure this + out. + +Thu Sep 24 17:54:26 1998 Carlos O'Ryan + + * ace/Asynch_IO.cpp: + Removed duplicate instantiation of a template, IRIX does not + like this. Thanks to Ossama Othman + because his configure script + detected the Asynch I/O calls on IRIX and enabled this ACE + code. + +Thu Sep 24 16:28:32 1998 Irfan Pyarali + + * ace/config-win32-common.h: ACE_HAS_TEMPLATE_TYPEDEFS was defined + for VC4.1 and VC4.2. Template typedefs in Strategies_T.cpp + broke the VC4.2 compiler. Therefore, ACE_HAS_TEMPLATE_TYPEDEFS + was deprecated for VC4.1 and VC4.2. I also checked VC5.0 and it + didn't work. Therefore, for the time being, none of the VC + compilers support ACE_HAS_TEMPLATE_TYPEDEFS. I didn't try + VC6.0. + + * ace/Strategies_T.cpp (check_hint_i ): Changed the signature so + that it is identical to find_or_create_svc_handler_i(). For + some strange freakin reason, the VC4.2 could not gork + check_hint_i() but was able to gork + find_or_create_svc_handler_i. + + * ace/ACE_Library.mdp: Added Select_Reactor_Base.cpp and + Container.cpp to make ACE build with VC4.2. + +Thu Sep 24 13:30:00 CDT 1998 Chris Gill + + * examples/Bounded_Packet_Relay/README + examples/Bounded_Packet_Relay/Bounded_Packet_Relay.{dsp,dsw} + + Updated README, added in MSVC++ project, workspace files. + +Thu Sep 24 12:48:58 1998 David L. Levine + + * ace/Containers_T.cpp (ACE_{Bounded,Fixed}_Set_Iterator::done), + ace/Map_Manager.cpp (ACE_Map_Iterator_Base::done): + added ACE_CAST_CONST to the static cast. Thanks to Ossama for + reporting a compilation failure on Sun C++ 4.2/Solaris 2.6 + without it. + + * ace/High_Res_Timer.cpp (global_scale_factor): on Linux, + only use BogoMips if the CPU is an alpha. It would also + work directly on Pentium Pro, but not other Pentiums. With + a little effort, it could be made to work there, see the + BogoMips mini-HOWTO. Thanks to Ossama for enlightening me + on this corner of Linux. + + * tests/Upgradable_RW_Test.cpp (main): delete dynamically + allocated reader_tasks and writer_tasks, and arrays, at end of test. + +Thu Sep 24 09:17:32 1998 Steve Huston + + * ace/Containers_T.h: Added #include "ace/Containers.h" - AIX xlC + needs this when instantiating templates. + + * ace/Dirent.cpp: Do the HP check using only compiler-defined + preprocessor macros since config.h isn't included. + + * ace/OS.i: Fixed comments that referenced DCE threads. + Changed readdir_r #ifdefs to handle pthreads drafts 4 and 6 + the same, and split HP-UX 10.x off as a non-conformant player. + Thanks to David Levine for sorting this out with LynxOS. + + * ace/Thread_Manager.cpp: Changed occurrences of + ACE_HAS_DCE_DRAFT4_THREADS to ACE_HAS_PTHREADS_DRAFT4. Corrected + a call to pthread_detach. Changed a couple of calls to + pthread_detach on HP-UX 10.x to duplicate the thread handle before + the call because pthread_detach on HP-UX 10.x clears the handle + and it was still needed. + On AIX, xlC doesn't match the call to + ACE_Thread::join(ACE_hthread_t, void ** = 0) correctly when the + second arg is specified. So call the 3-arg variety on AIX, knowing + that the second arg is ignored underneath on pthreads. + +Wed Sep 23 22:13:04 1998 James CE Johnson + + * docs/tutorials/006/server.cpp: + Wrapped !defined(ACE_HAS_GNU_REPO) around the explicit template + instantiation. + + * docs/tutorials/005/client_handler.cpp (handle_input): + * docs/tutorials/006/client_handler.cpp (svc): + * docs/tutorials/006/client_handler.cpp (handle_input): + * docs/tutorials/007/client_handler.cpp (svc): + * docs/tutorials/007/client_handler.cpp (handle_input): + Use ACE_OS::memset() instead of direct call to memset() + + * docs/tutorials/005/Makefile: + * docs/tutorials/007/Makefile: + Touch .depend if it does not exist. + +Wed Sep 23 22:03:19 1998 Arturo Montes + + * ace/config-sco-5.0.0.h: added ACE_LACKS_READDIR_R. + +Wed Sep 23 14:26:44 EDT 1998 James CE Johnson + + * docs/tutorials/005/server.cpp + docs/tutorials/006/server.cpp + docs/tutorials/007/server.cpp + docs/tutorials/008/Makefile + docs/tutorials/009/Makefile + docs/tutorials/013/Makefile + docs/tutorials/013/block.cpp + docs/tutorials/013/block.h + docs/tutorials/013/data.h + docs/tutorials/013/message_queue.cpp + docs/tutorials/013/mld.cpp + docs/tutorials/013/mld.h + docs/tutorials/013/page01.html + docs/tutorials/013/page02.html + docs/tutorials/013/page03.html + docs/tutorials/013/page04.html + docs/tutorials/013/task.cpp + docs/tutorials/013/task.h + docs/tutorials/013/work.cpp + docs/tutorials/013/work.h + + Fixed explicit template instantiaions in + tutorials 5, 6, 7. + + Fixed a nasty bug in 9's Makefile (and removed + similar comment in 8's Makefile) + + Preliminary version of 013 committed. The code + worked before I began "optimizing" and should work + again in a couple of days. The HTML is not yet + done but will be by the weekend (I hope). + +Wed Sep 23 12:15:21 1998 David L. Levine + + * ace/Stats.*: modified standard deviation calculation to + help avoid overflow. Instead of keep running totals of + the sum and sum of squares, it stores each sample in an + dynamic structure. Then, to calculate the standard + deviation, each sample is compared with the mean. + + * ace/Sched_Params.cpp: replace ACE_HAS_STHREADS with + ACE_HAS_PRIOCNTL. Thanks to Ossama for pointing this out. + + * ace/Synch.h: replaced #endif /* ACE_HAS_STHREADS */ with + #endif /* 0 */. + + * performance-tests/TTCP/{ACE-C++,C,Orbix}/Makefile: removed + old Quantify LINK_COMMANDs. They don't look like they're used + anywhere. + + * include/makeinclude/wrapper_macros.GNU: removed -DACE_QUANTIFY + and -Dquantify, with quantify=1, because they're no longer used. + + * ace/OS.h,README: added ACE_LACKS_CMSG_DATA_{MACRO/MEMBER} support. + It will be used by autoconf, for Linux libc5 (pre-libc). Thanks + to Ossama for supplying it. + + * ace/config-g++-common.h: disable ACE_HAS_TEMPLATE_SPECIALIZATION + with g++ 2.9. Thanks to Andrew G. Harvey for a + problem with compiling ace/Filecache.cpp with g++ 2.9 on SunOS 5.5.1. + + * tests/Upgradeable_RW_Test.h: replaced ACE_Thread_Mutex with + ACE_SYNCH_MUTEX. Thanks to Ossama for reporting this. + + * ace/config-linux-common.h: commented out the msg_accrights(len) + #defines. Thanks to Ossama for noticing that they just don't + look right. They no longer appear to be necessary on Linux. + +Wed Sep 23 11:30:00 CDT 1998 Chris Gill + + * examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.{h,cpp} + examples/Bounded_Packet_Relay/BPR_Drivers.{h,cpp} + examples/Bounded_Packet_Relay/BPR_Drivers_T.{h,cpp} + + Fixed memory leaks uncovered by Purify, added large high water mark + for packet relay's underlying message queue. + +Wed Sep 23 11:28:13 1998 Carlos O'Ryan + + * bin/Process_Unix.pm: + If the exec() call fails we report the name and the arguments of + the program. + +Wed Sep 23 09:27:21 1998 Steve Huston + + * ace/Dirent.cpp: Fixed aCC workaround from 22-Sep so that only + non-g++ compilers on HP-UX see it. + +Wed Sep 23 02:21:24 1998 Douglas C. Schmidt + + * ACE version 4.5.42 released. + +Tue Sep 22 21:34:31 1998 Steve Huston + + * ace/Dirent.cpp: Make aCC quit yacking about an empty translation + unit. + + * ace/OS.i: Fix up the conditions for readdir_r on differing pthreads + drafts. + + * ace/config-aix-4.2.x.h: Added ACE_HAS_DIRENT. + +Tue Sep 22 21:00:00 CDT 1998 Chris Gill + + * examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.{h,cpp} + examples/Bounded_Packet_Relay/BPR_Drivers.{h,cpp} + examples/Bounded_Packet_Relay/BPR_Drivers_T.{h,cpp} + examples/Bounded_Packet_Relay/bpr_thread.cpp: + + More fixes from testing on NT, added more logging features. + +Tue Sep 22 17:07:17 1998 Nanbor Wang + + * tests/Message_Queue_Notifications_Test.cpp (Watermark_Test): + Repositioned a comma so it compiles on non-threaded platforms. + Thankd to Ossama for noticing this. + +Tue Sep 22 17:20:53 1998 James Hu + + * ace/Containers_T.{h,i}: + Added a remove method to the ACE_DLList_Iterator. This is + needed since ACE_DLList is actually an abstraction over + ACE_Double_Linked_List, so the user of ACE_DLList does not hold + the address of the "real" node that ACE_Double_Linked_List is + managing. + +Tue Sep 22 16:07:53 1998 Steve Huston + + * bin/Makefile: Will now only build envinfo if make is invoked + with "envinfo=1". The difference is needed to allow clone to be + built before ACE has been built. + +Tue Sep 22 13:58:06 1998 Carlos O'Ryan + + * ace/config-irix6.x-g++.h: + Added some missing defines, thanks to JM Strauss + for pointing them out. Also fixed a + test for the N32 ABI, it said _NABI32 and should be _ABIN32. + +Tue Sep 22 11:42:17 1998 David L. Levine + + * ace/config-lynxos.h: added ACE_HAS_POWERPC_TIMER with + __powerpc__, but commented it out because it requires an OS patch. + + * ace/OS.i (fstat): put a :: in front of the call to the + system fstat if it's not defined as a macro. Thanks to + Ossama for reporting that MM_Shared_Memory_Test failed + otherwise. + +Tue Sep 22 10:58:04 1998 Ossama Othman + + * ace/OS.i (ACE_cond_t::waiters): only define this function if + ACE_HAS_THREADS. + + Testing the autoconf integration on a Linux libc5 system w/o + threads caused me problems since ACE_LACKS_COND_T gets + defined by the configure script automatically since no + condition variable support was found. The ACE_cond_t class + appears to only get defined if ACE_HAS_THREADS is defined, + otherwise ACE_cond_t is typedefed to an int. For + this reason, I thought that it would be a good idea to make + the above modification to prevent compile time errors on + platforms without threads and when ACE_LACKS_COND_T is + defined on those platforms. + +Tue Sep 22 03:09:07 1998 Douglas C. Schmidt + + * ACE version 4.5.41 released. + +Tue Sep 22 00:31:26 1998 Douglas C. Schmidt + + * ace/Log_Record.cpp (print): Make sure that the process id and + timestamp are fixed width. Thanks to Valery Arkhangorodsky + for this fix. + +Mon Sep 21 22:54:44 1998 Douglas C. Schmidt + + * examples/Bounded_Packet_Relay: Removed a gratuitous + parameterized type which was causing problems for SunC++. + +Mon Sep 21 21:47:12 1998 David L. Levine + + * ace/README: added ACE_HAS_PURIFY and ACE_HAS_QUANTIFY. + + * include/makeinclude/wrapper_macros.GNU: added ACE_HAS_PURIFY + and ACE_HAS_QUANTIFY support. We should use these consistently. + In addition, added -I support for Purify and Quantify. + This support should no longer appear in individual Makefiles. + + * ACE-INSTALL.html: added paragraph on Purify/Quantify support + details, i.e., they must be on your PATH, and ACE puts the + instrumented libraries below /tmp by default. + +Mon Sep 21 20:46:00 1998 Nanbor Wang + + * ace/Containers_T.cpp (ACE_Double_Linked_List): Changed + dynamic_cast to static_cast. + +Mon Sep 21 18:35:00 CDT 1998 Chris Gill + + * examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.{h,cpp} + examples/Bounded_Packet_Relay/BPR_Drivers.{h,cpp} + examples/Bounded_Packet_Relay/BPR_Drivers_T.{h,cpp} (new) + examples/Bounded_Packet_Relay/bpr_thread.cpp: + + Factored out templates into separate files, fixed initialization, + concurrency, and deadlock problems found in NT testing. + +Mon Sep 21 18:27:19 1998 Irfan Pyarali + + * tests/Conn_Test.cpp: g++ cannot gork templates typedefs. + +Mon Sep 21 15:48:34 1998 Douglas C. Schmidt + + * ace/Acceptor: It's now possible to select if you want to reuse + the PEER_ACCEPTOR addr. Thanks to Chuck Gehr for suggesting + this. + +Mon Sep 21 15:00:34 1998 Nanbor Wang + + * ace/Thread_Manager.{h,cpp} (join): Allow passing back of thread's + exit status of the thread being joined. + +Mon Sep 21 11:24:33 1998 Douglas C. Schmidt + + * docs/ACE-categories.html (HREF): Updated the links to ace/ and + man/ since we moved the file around. Thanks to Byron Harris for + reporting this. + +Mon Sep 21 10:22:17 1998 Steve Huston + + * ace/Select_Reactor_T.cpp (handle_error): Check handles for all + errors (not just EBADF) on Win32, in addition to MVS. Thanks + to Xu Yifeng for this fix. + +Mon Sep 21 01:27:19 1998 Irfan Pyarali + + * ace/Strategies_T.cpp (find_or_create_svc_handler_i): g++ cannot + gork templates... + + * tests/Conn_Test.cpp: Fixed template instantiations. + + * ace/Strategies_T.cpp (ACE_Cached_Connect_Strategy): New methods + find_or_create_svc_handler_i and check_hint_i to simplify + connect_svc_handler. Also added _i methods to implement + non-locking versions. + + * ace/Strategies.h (ACE_Connection_Recycling_Strategy): + New methods: mark_as_close and cleanup_hint. + + * ace/Strategies: Added three new classes: ACE_Recyclable, + ACE_Hashable, and ACE_Refcountable. Also added + ACE_Refcounted_Hash_Recyclable. Deprecated ACE_Recyclable and + ACE_Hash_Recyclable + + * ace/Svc_Handler.h (cleanup_hint): Added new method. This can be + used by users when they are through with using the svc_handler + as a hint. + +Mon Sep 21 00:40:00 CDT 1998 Chris Gill + + * examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.{h,cpp} + examples/Bounded_Packet_Relay/BPR_Drivers.{h,cpp} + examples/Bounded_Packet_Relay/bpr_thread.cpp + examples/Bounded_Packet_Relay/README: + + Reorganized construction of input and output device objects + and the relay object, cleaned up readme file. + +Sun Sep 20 22:01:00 CDT 1998 Chris Gill + + * examples/Bounded_Packet_Relay/BPR_Drivers.h: + + Made Bounded_Packet_Relay_Driver::display_menu (void) pure virtual: + now it all compiles *and* links. + +Sun Sep 20 21:49:00 CDT 1998 Chris Gill + + * examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.{h,cpp} + examples/Bounded_Packet_Relay/BPR_Drivers.{h,cpp} + + Fourth checkin of bounded packet relay example: compiles. + +Sun Sep 20 20:41:29 1998 Nanbor Wang + + * ace/Acceptor.{h,cpp}: Added an extra argument to constructors of + ACE_Strategy_Acceptor and open method so that we can accept only + one connection request every time handle_input is called. + +Sun Sep 20 20:30:36 1998 Marina Igorevna Spivak + + * ace/OS.h : added ACE_GUARD_THROW, ACE_GUARD_THROW_RETURN, + ACE_NEW_TRY_THROW, ACE_NEW_TRY_THROW_RETURN macros to utilize + new exceptions macros. + +Sun Sep 20 19:18:00 CDT 1998 Chris Gill + + * examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.{h,cpp} + examples/Bounded_Packet_Relay/BPR_Drivers.{h,cpp} + examples/Bounded_Packet_Relay/README + + Third checkin of bounded packet relay example, + addressed remaining coding style issues. + (very rough, still does not compile) + +Sun Sep 20 16:38:17 1998 Nanbor Wang + + * ace/Thread_Manager.i (get_next): Changed to use static_cast. + + * ace/Thread_Manager.cpp: Shielded off terminated_thr_list_ from + compilation on VxWorks. Thanks to David for noticing this. + +Sun Sep 20 12:17:00 CDT 1998 Chris Gill + + * examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.{h,cpp} + examples/Bounded_Packet_Relay/BPR_Drivers.{h,cpp} + + Second checkin of bounded packet relay example, + addressed several coding style issues. + (very rough, still does not compile) + +Sun Sep 20 11:25:52 1998 David L. Levine + + * ace/OS.h: with ACE_HAS_TSS_EMULATION, use u_long instead of + u_int for ACE_thread_key_t. This avoids overload ambiguity + on platforms that typedef pthread_key_t to u_int. We'll be + in trouble if we try on one that uses u_long. In that case, + we could try u_short, or added an ACE_HAS. + + * ace/Thread_Manager.i (register_as_terminated): neutered on VxWorks, + so that it will compiled. + + * tests/SOCK_Connector_Test.cpp (host_is_up): don't define + this function ifdef ACE_LACKS_GETHOSTENT, because it isn't + used in that case. + +Sat Sep 19 14:29:56 1998 Douglas C. Schmidt + + * ace/OS.i (fstat): Removed the "::" in front of the fstat() call + since it's implemented as a macro on some platforms. Thanks to + Frank Adcock for reporting this. + + * examples/Bounded_Packet_Relay: Updated the coding style. + +Sat Sep 19 14:06:52 1998 Darrell Brunsch + + * apps/JAWS/PROTOTYPE/JAWS/IO.cpp: Fixed typo. + + * apps/JAWS/PROTOTYPE/JAWS/jaws.dsp: + * apps/gperf/src/gperf.dsp: + * ace/ace_dll.dsp: + * netsvcs/clients/Naming/Client/Client_Test.dsp: + * netsvcs/lib/netsvcs.dsp: + Changed behavior of all DLL projects and utilities (like + gperf) to put the dll and executables in $ACE_ROOT/bin. + + * ace/config-win32.h: ACE_HAS_GPERF is back. + + * ACE-INSTALL.html: On NT, $ACE_ROOT/bin should now be in + your path instead of $ACE_ROOT/ace. + +Sat Sep 19 12:27:31 1998 Irfan Pyarali + + * ace/Asynch_IO.cpp: thread_function() is only for UNIX. + +Sat Sep 19 10:43:41 1998 Alexander Babu Arulanthu + + * ace/Asynch_IO.cpp (open): Fixed the build errors with WIN32. + +Sat Sep 19 09:02:00 CDT 1998 Chris Gill + + * examples/Bounded_Packet_Relay/Thread_Bounded_Packet_Relay.{h,cpp} + examples/Bounded_Packet_Relay/BPR_Drivers.{h,cpp} + examples/Bounded_Packet_Relay/bpr_thread.cpp + examples/Bounded_Packet_Relay/Makefile + examples/Bounded_Packet_Relay/README: + + First checkin of bounded packet relay example + (very rough, does not even compile yet) + +Sat Sep 19 00:42:53 1998 Alexander Babu Arulanthu + + * ace/Asynch_IO.cpp: Fixed NT warnings (hopefully :-) + +Fri Sep 18 22:50:21 1998 Nanbor Wang + + * ace/Thread_Manager.{h,i,cpp}: Added a join method to reclaim + OS/ACE resources that are used to managed thread object. I + encourage all ACE programmers to use ACE_Thread_Manager::join to + wait for threads spawned by ACE_Thread_Manager. It is more + portable than ACE_Thread (most significantly, wrt resource + management.) + (wait_grp,wait_task): Improved and corrected the + implementations. These two methods now also clean up resources + used by threads that has already terminated when the calls get + invoked. + + Changed the terminated_thr_queue_ to terminated_thr_list_ which + is now a double-linked list. This change allows us to + gather/cleanup infomation of threads belong to same group/task + in one pass. + + ACE_Thread_Manager::exit now tests the thread status to see if + ACE_THR_JOINING is set or not. If set, it means the thread is + being joined by join/wait_grp/wait_task and avoid double + removing the thread resources from OS. + + * ace/OS.h (ACE_Thread_State): Added ACE_THR_JOINING to identify + threads that are being joined by the Thread Manager. + + * ace/Container_T.{h,cpp} (ACE_Double_Linked_List): Added several + dynamic_cast in several places so we can generate code for both + base class and derived class. + (ACE_Double_Linked_List_Iterator): Added a method + "advance_and_delete" to allow removing double-linked list + element while iterating thru the list. The design is very + intrusive and you should know what you are doing before using + the method. Notice that ACE_Double_Linked_List is _not_ a + general purpose Container class. + + * tests/run_tests.bat: Added DLList_Test. + +Fri Sep 18 18:06:19 1998 Alexander Babu Arulanthu + + * ace/Asynch_IO.h: + * ace/Asynch_IO.cpp: + * examples/Reactor/Proactor/test_proactor.cpp: + Implemented Asynch_Accept for POSIX4 systems, by having only one + thread doing . Asynch_Accept_Handler has been + changed to act as Event Handler now. No problem of having threads + blocking on the now. Thanks to Irfan for this idea. + +Fri Sep 18 13:26:50 1998 David L. Levine + + * tests/High_Res_Timer_Test.cpp (check): raised success + threshold from 10 to 25 percent. Ossama saw just over + 10 percent on an Linux box, not surprising. Thanks to + him for reporting it. + + * ace/SOCK_Dgram_Mcast.cpp (unsubscribe): on other than ACE_WIN32, + added ACE_UNUSED_ARGs for protocol_family and protocol. Thanks + to Peter Liqun Na for reporting this. + + * ace/OS.cpp (ACE_TSS_Emulation_cleanup): added ACE_UNUSED_ARG (ptr). + + * bin/make-release: enter version number(s) into BUG-REPORT-FORM. + Thanks to Steve for this suggestion. + +Fri Sep 18 01:53:38 1998 Douglas C. Schmidt + + * ACE version 4.5.40 released. + +Fri Sep 18 01:51:46 1998 Douglas C. Schmidt + + * ace/ACE (open_temp_file): Changed the signature of this method + to take a const char * rather than a char *. + +Fri Sep 18 00:07:31 1998 Alexander Babu Arulanthu + + * ace/ACE.h (ACE): + * ace/ACE.cpp (open_temp_file): Added this method to do open for + the temp files, so that they will get deleted when they are + closed. + Thanks to Nanbor and Carlos. + +Thu Sep 17 23:01:50 1998 David L. Levine + + * ace/Containers.i: resurrected the file properly. + + * ace/Containers.i (~ACE_DLList_Node): removed extraneous ; + following function definition. + +Thu Sep 17 22:44:17 1998 Douglas C. Schmidt + + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: If the client + doesn't connect to the server, make sure to shut down the test + gracefully, rather than getting a segfault. Thanks to + Margherita Vittone Wiersma for + reporting this. + +Thu Sep 17 22:33:00 1998 James CE Johnson + + * docs/tutorials/index.html + docs/tutorials/templates.html + + Added templates.html to discuss issues surrounding manual vs + automatic template instantiation. + +Thu Sep 17 20:01:33 1998 Nanbor Wang + + * tests/tests.dsw: + * tests/version_tests.dsw: + * tests/[version_tests/]High_Res_Timer_Test.dsp: + * tests/[version_tests/]DLList_Test.dsp: Added new project files. + +Thu Sep 17 19:27:11 1998 David L. Levine + + * ace/OS.cpp (TSS_base,some ACE_PSOS_Time_t functions): + removed ACE_INLINE. + + * examples/Shared_Malloc/test_malloc.cpp (gen_size): cast + &seed to unsigned long first, to avoid warning about + narrowing on Alphas (cxx/DU 4.0). + +Thu Sep 17 18:51:08 1998 Carlos O'Ryan + + * examples/Reactor/Multicast/server.cpp: + * examples/Reactor/Multicast/Log_Wrapper.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_stream_client_test.cpp: + Revert back to iovec instead of ACE_IO_Vector. + +Thu Sep 17 18:33:19 EDT 1998 James CE Johnson + + * docs/tutorials/002/server.pp + + Added necessary templates for explicit instantiation. + Thanks to Krishna Padmasola for providing the proper code + and to Clinton Carr for reminding me to do it! + +Thu Sep 17 16:30:00 1998 Carlos O'Ryan + + * This comments were lost in a previous commit. + + * ace/OS.h: + * ace/OS.i: + * ace/ACE.cpp: + * ace/ACE.h: + * ace/DEV_IO.cpp: + * ace/DEV_IO.h: + * ace/DEV_IO.i: + * ace/FIFO_Send_Msg.cpp: + * ace/FILE_IO.cpp: + * ace/FILE_IO.h: + * ace/FILE_IO.i: + * ace/LSOCK.cpp: + * ace/LSOCK_Stream.cpp: + * ace/LSOCK_Stream.h: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_Dgram.h: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/SOCK_Dgram_Bcast.h: + * ace/SOCK_Dgram_Mcast.h: + * ace/SOCK_Dgram_Mcast.i: + * ace/SOCK_IO.cpp: + * ace/SOCK_IO.h: + * ace/SOCK_IO.i: + * ace/SPIPE_Stream.cpp: + * ace/SPIPE_Stream.h: + * ace/SPIPE_Stream.i: + Moved back to iovec instead of ACE_IO_Vector. Since this + structure is defined by ACE we can make it binary compatible + with the WSABUF structure (yet preserve the names of the UNIX + iovec struct). This allow us to simply pass arrays of iovec to + routines expecting WSABUF*. + But Win32 does not provide any functions to go scatter-gather + over files, so this is only used for sockets, new methods: + ACE_OS::sendv() and ACE_OS::recvv() were added for this + purpose, the old emulation is used for the other classes. Users + writing to higher-level components (such as ACE_SOCK or + ACE_SOCK_Dgram) will benefit from this without any changes to + their code. + + * ace/SOCK_Dgram.cpp: + * ace/SOCK_Dgram.h: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/SOCK_Dgram_Bcast.h: + * ace/SOCK_Dgram_Mcast.h: + * ace/SOCK_Dgram_Mcast.i: + Added the implementation for some send() variants that were + declared but not implemented. + + * ace/OS.h: + * ace/OS.i: + * ace/config-win32-common.h: + Added support for sendmsg() and recvmsg() on NT, emulated over + WSASendTo() and WSARecvFrom(), do data copies are made. + + * ace/Containers.cpp: + * ace/Containers.h: + * ace/Containers_T.h: + * ace/Containers_T.i: + Moved the non-templated code back to Containers.{h,i,cpp}, added + the infamous ACE_Export macro. + + * ace/ace_dll.dsp: + Added Containers.cpp to the project. + +Thu Sep 17 11:23:49 1998 Douglas C. Schmidt + + * ace/OS: Modified ACE_THR_FUNC so that its signature is always + void *(*)(void *). We now have a new type called + ACE_THR_FUNC_INTERNAL that is defined for each different OS + platform, e.g., VxWorks, pSoS, et al. + + * examples/IPC_SAP/SOCK_SAP/CPP-inserver.cpp (run_server): Oops, + we can't use ACE_THR_FUNC here since that has a different + signature on VxWorks. So we'll just expand this a bit. Thanks + to Raja Ati for reporting this. + +Thu Sep 17 09:54:56 1998 David L. Levine + + * ace/Svc_Handler.cpp (new): cleaned up the ACE_ASSERT check + for ACE_Dynamic::instance () not being null. + + * docs/ACE-guidelines.html: added guideline to define ACE_ + typedefs to reduce the number of #ifdefs. Thanks to + Carlos and Doug for this suggestion, and Chris for the + example :-). + + * examples/IPC_SAP/SOCK_SAP/CPP-inserver.cpp (run_event_loop): + added casts to ACE_THR_FUNC to please VxWorks. Thanks to + Raja Ati for reporting this problem. + + It would probably be better to change the definition of + ACE_THR_FUNC on VxWorks (and PSOS) to be the same as on + other platforms. That will require other changes, though. + + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp: + removed trailing ; from instantiation #pragma. + + * ace/config-lynxos.h: added ACE_HAS_TSS_EMULATION. + +Thu Sep 17 09:23:01 1998 Carlos O'Ryan + + * ace/FIFO_Send_Msg.cpp: + Fixed variable declaration, "struct ACE_IO_Vector_Base" is not + the same as "ACE_IO_Vector_Base". + + * ace/OS.i: + Fixed the ACE_OS::rand_r() signature for Win32. + + * ace/SOCK_Dgram_Mcast.cpp: + Fixed some problems with the Win32 implementation of + unsubscribe(). + +Thu Sep 17 08:41:14 1998 Carlos O'Ryan + + * examples/Shared_Malloc/test_malloc.cpp: + Fixed some problems with my changes to rand_r() + + * ace/Containers.i: + Resurrected this file to avoid problems with dependencies in + TAO. + +Thu Sep 17 08:41:24 1998 Steve Huston + + * include/makeinclude/platform_hpux_gcc.GNU: Added -L. to LDFLAGS. + Thanks to Anne Blankert for this fix. + +Thu Sep 17 07:31:13 1998 David L. Levine + + * ace/OS.i (truncate): added ACE_UNUSED_ARGs for NOTSUP case. + +Thu Sep 17 02:45:53 PDT 1998 James Hu + + * ace/Containers_T.h: + * ace/Containers_T.i: + * ace/Containers_T.cpp: + Added these files so that I could include some explicit + template instantiations inside Containers.cpp. Removed + #if guards around ACE_DLList since it no longer relies + on the feature that was being guarded against. + + * ace/Containers.h: + Simply #includes Containers_T.h. + + * ace/Containers.cpp: + Only contains some explicit template instantiations. + + * ace/Containers.i: + Removed, since it was no longer needed. + +Thu Sep 17 01:20:53 1998 Irfan Pyarali + + * ace/Msg_WFMO_Reactor.cpp (dispatch_window_messages): There was a + slight problem in Msg_WFMO_Reactor.cpp when ACE coexists with + MFC. Basically the dispatch_window_messages routine simply + returns -1 when the WM_QUIT message is received. However, if + the WFMO_Reactor and the MFC application run on the different + threads the main thread would never shut down since it just keep + waiting forever for the Quit message from other threads. The + easiest way to fix the above problem to call PostQuiteMessage + when WM_QUIT is received by WFMO_Reactor. + + Thanks to Hongbo Xu for fixing this. + + * ace/OS.i (open): No need to find the file size since + SetFilePointer supports FILE_END. Also fixed the UNICODE + version of ACE_OS::open(). + +Wed Sep 16 22:52:44 1998 Carlos O'Ryan + + * examples/Reactor/Multicast/server.cpp: + * examples/Reactor/Multicast/Log_Wrapper.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_stream_client_test.cpp: + Use ACE_IO_Vector instead of iovec because it is more portable. + +Wed Sep 16 22:17:54 1998 Carlos O'Ryan + + * ace/OS.h: + * ace/DEV_IO.cpp: + * ace/DEV_IO.h: + * ace/DEV_IO.i: + * ace/FIFO_Send_Msg.cpp: + * ace/FILE_IO.cpp: + * ace/FILE_IO.h: + * ace/FILE_IO.i: + * ace/LSOCK.cpp: + * ace/LSOCK_Stream.cpp: + * ace/LSOCK_Stream.h: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_Dgram.h: + * ace/SOCK_Dgram_Bcast.h: + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_Dgram_Mcast.h: + * ace/SOCK_Dgram_Mcast.i: + * ace/SOCK_IO.cpp: + * ace/SOCK_IO.h: + * ace/SOCK_IO.i: + * ace/SPIPE_Stream.cpp: + * ace/SPIPE_Stream.h: + * ace/SPIPE_Stream.i: + More iovec to ACE_IO_Vector_Base conversion. + + * ace/Containers.i: + The ACE_DLList_Node and ACE_DLList_Iterator class are protected + by a !defined (ACE_LACKS_TEMPLATE_AS_TEMPLATE_PARAMETER), so + should be their inline methods. + + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_Dgram_Mcast.h: + * ace/SOCK_Dgram_Mcast.i: + Added a generic unsubscribe() method. + +Wed Sep 16 21:45:48 1998 Darrell Brunsch + + * ace/ACE.{h.cpp}: Changed some iovecs to ACE_IO_Vector_Base. + + * ace/config-win32.h: Commented out ACE_HAS_GPERF until we get + everything working with it. + +Wed Sep 16 21:43:07 1998 Nanbor Wang + + * ace/OS.i (open): Added SetFilePointer to move the file pointer + of the opened file to end of file if _O_APPEND is specified on + Win32. + +Wed Sep 16 20:42:16 1998 Douglas C. Schmidt + + * ace/OS: Added a typedef for ACE_IO_Vector_Base so that it will + shield the differences between Win32 and UNIX. + +Wed Sep 16 20:09:01 1998 Carlos O'Ryan + + * ace/OS.h: + * ace/OS.i: + ACE_OS::rand_r() is easier to use now. Just define a variable of + that type and invoke ACE_OS::rand_r() with it, it even works on + broken platforms that define it as a non-pointer. + This is a brief example on how to use it: + ACE_RANDR_TYPE seed; + int r1 = ACE_OS::rand_r (seed); + int r2 = ACE_OS::rand_r (seed); + +Wed Sep 16 17:46:23 PDT 1998 James Hu + + * ace/Containers.{h,i}: Added comments to DLList as per Doug's + request. + +Wed Sep 16 19:23:21 1998 Steve Huston + + * ace/config-hpux-11.x-hpc++.h: Moved ACE_HAS_DIRENT to config-hpux11.h + +Wed Sep 16 18:21:45 1998 Douglas C. Schmidt + + * ace/Containers.h: Reformatted the ACE_DLList* classes to conform + to ACE programming conventions. + + * ace/config-hpux-11.x-hpc++.h: Added ACE_HAS_DIRENT and + ACE_HAS_GPERF to appease John Mulhern. + + * ace/Asynch_Acceptor.cpp: Added ACE_reinterpret_cast()s to the + sockaddr *'s to appease aCC on HP/UX 11. Thanks to John Mulhern + for reporting this. + +Wed Sep 16 17:16:51 EDT 1998 James CE Johnson + + * docs/tutorials/012/Makefile + docs/tutorials/012/data.h + docs/tutorials/012/message_queue.cpp + docs/tutorials/012/page01.html + docs/tutorials/012/page02.html + docs/tutorials/012/page03.html + docs/tutorials/012/page04.html + docs/tutorials/012/page05.html + docs/tutorials/012/page06.html + docs/tutorials/012/task.cpp + docs/tutorials/012/task.h + docs/tutorials/index.html + + Tutorial 12. This corrects some of the nastyness + in number 11 by specializing the ACE_Message_Block + to carry around the data. + +Wed Sep 16 16:01:53 1998 Nanbor Wang + + * ace/Select_Reactor_T.{h,i,cpp}: Disable inlining in + Select_Reactor_T.i and always include them in .cpp file. The + latest version of SunCC can't grok this particular file and we + just turn it off here. We shall turn it back on once the + problem gets fixed. Thanks to Keith Brown + for providing this temporary fix. + +Wed Sep 16 13:41:50 1998 Douglas C. Schmidt + + * ace/OS.h: Added more protection for the semun definition, i.e., + (defined (__GLIBC__) && defined (_SEM_SEMUN_UNDEFINED)). This + fixes problems with Linux, GLIBC 2.1, and PGCC. Thanks to + Marc Lehmann for reporting this. + +Wed Sep 16 11:41:57 1998 David L. Levine + + * ace/High_Res_Timer.cpp: added ACE_HAS_POWERPC_TIMER support. + + * tests/High_Res_Timer_Test.cpp: added this new test. + + * tests/Makefile,run_tests.{bat,psosim,sh,vxworks}: + added High_Res_Timer_Test. + + * ace/OS.* (readPPCTimer): unlined readPPCTimer for + PowerPC. If it was called more than once in a + compilation unit, when inlined, the assembler complained + about multiple definitions of the aclock symbol. + + * ace/Malloc_T.cpp (dump): fixed typo, cb_ptr instead of + cp_ptr. Thanks to Umar Syyid for reporting this. + + * tests/TSS_Test.cpp (worker): allow second group of TSS keys to + be allocated, with TSS emulation. + + * ace/Svc_Handler.cpp (new): added check that + ACE_Dynamic::instance () is non-null before dereferencing it. + ACE_ASSERT/return 0 if it is null. + +Wed Sep 16 11:28:47 1998 Irfan Pyarali + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp: In + general, using iostreams in ACE causes more problems for us than + it is worth since some systems do not support iostreams. I have + rewritten this file to not use iostreams but use + ACE_DEBUG/ACE_ERROR instead. + +Wed Sep 16 10:49:34 1998 Carlos O'Ryan + + * bin/auto_compile: Updated to the new directory hierarchy in TAO. + +Wed Sep 16 09:46:31 1998 Steve Huston + + * ace/config-hpux-10.x.h: Added ACE_HAS_DIRENT. + +Tue Sep 15 20:25:23 1998 Douglas C. Schmidt + + * tests/test_config.h: Always #undef ACE_NLOGGING so the tests + will produce output! Thanks to Chuck Gehr for reporting this. + + * ace/OS.i: Added a new ACE_LACKS_TRUNCATE flag to work around + platforms that lack the truncate() call. Thanks to + Sergio for reporting this. + +Tue Sep 15 17:57:26 1998 Sergio Flores + + * ace/config-vxworks5.x.h: Added ACE_LACKS_TRUNCATE to VxWorks + configuration. + +Tue Sep 15 16:58:18 1998 Nagarajan Surendran + + * include/makeinclude/platform_chorus_ghs.GNU: Changed the + MVME_DIR to /project/doc/mvme/mvme177. + + * ace/ARGV.cpp (ACE_ARGV::argv_to_string): Fixed the problem where + we were allocating space only for the length of the string whereas + strecpy was inserting the extra '\0' leading to Array bounds write. + +Tue Sep 15 16:34:47 1998 David L. Levine + + * ace/OS.i (gethrtime): added high-res timer support with + g++ and ACE_HAS_POWERPC_TIMER. + + * ace/OS.{h,cpp},config-vxworks5.x.h,README: changed ACE_HAS_POWERPC + to ACE_HAS_POWERPC_TIMER. + + * ace/config-lynxos.h: added ACE_HAS_PENTIUM, to provide + high-res timer support on LynxOS. + +Tue Sep 15 13:33:26 1998 Nanbor Wang + + * ace/config-{WinCE,g++-common}.h: + * ace/OS.{h,i,cpp}: Deprecated ACE_LACKS_GETS and ACE_OS::gets (void). + + * apps/gperf/src/gperf_lib.dsp: Enabled c++ exception handling to + avoid warning when compiling with standard c++ libraries. + +Tue Sep 15 11:22:53 1998 Aniruddha Gokhale + + * ace/OS.{h, i}: + + Added definition for the "stat" data structure. Also added the + definition for the "truncate" function. + +Mon Sep 14 23:28:24 1998 Douglas C. Schmidt + + * ACE version 4.5.39 released. + +Mon Sep 14 21:46:36 1998 David L. Levine + + * ace/Containers.h: added "class" to several ACE_DLList friend + declarations. + +Mon Sep 14 21:02:30 1998 Irfan Pyarali + + * ace/Mem_Map.cpp (map_it): Removed the code for + !ACE_HAS_P_READ_WRITE since we cover it in ACE_OS::pwrite. + + * ace/Filecache.cpp (ACE_Filecache_Object): Changed the + lseek/write combo to pwrite. + +Mon Sep 14 17:09:04 1998 Douglas C. Schmidt + + * ace/config-win32-common.h,OS.h,README: Removed all mention of + ACE_LACKS_FIFO, which was no longer necessary. Thanks to Ossama + Othman for suggesting this. + + * ace/ACE.cpp (bind_port): Renamed sin to sock_addr to make the + autoconf script happier. Thanks to Ossama Othman + for suggesting this. + + * include/makeinclude/platform_mvs.GNU: Updated the MVS platform + configuration as follows: + + changed: + debug = 1 + to: + debug = 0 + + added: + static_libs = 1 + + and deleted the line: + CCFLAGS += $(CFLAGS) + + Thanks to Chuck Gehr for these + changes. + +Mon Sep 14 14:34:32 1998 Darrell Brunsch + + * apps/gperf/src/gperf.dsp: + * apps/gperf/src/gperf_lib.dsp: + Fixed the project by removing new.cpp (which disappeared a + while back) and changed the code generation to DLL. Now + seems to work on NT. + + * ace/config-win32.h: ACE_HAS_GPERF now on NT. + +Mon Sep 14 13:41:26 1998 Douglas C. Schmidt + + * ace/OS: Fixed qsort() and bsearch() so they work correctly for + MVS. Thanks to Chuck Gehr for reporting this. + + * ace/config-mvs.h: Added + + #define ACE_HAS_DIRENT + #define ACE_LACKS_READDIR_R + + so that things will work correctly for MVS. Thanks to Chuck + Gehr for reporting this. + +Mon Sep 14 10:11:18 1998 Nanbor Wang + + * ace/ace_ce_dll.dsp: Added Select_Reactor_Base.cpp and removed + Array.cpp from the project. Thanks to Paul Sexton + for noticing this. + + * ace/config-WinCE.h: Added ACE_LACKS_BSEARCH. + + * ace/OS.h: Added /**/ between #include and in + pSOS section to prevent a MSVC warning. + + * ace/OS.i (bsearch): If the function is not supported by the + platform, return NULL instead of -1 so it behaves compatibly + with most common implementation. + +Mon Sep 14 09:37:09 1998 Douglas C. Schmidt + + * ace/Synch_T.h: Fixed a deadlock condition caused by acquiring + the internal lock in multiple places during the same call. + Thanks to Jorn Jensen for reporting this. + +Mon Sep 14 01:59:51 1998 Nanbor Wang + + * ace/Strategies_T.{h,i,cpp}: Added two new classes + ACE_Thread_Pool_Strategy and ACE_Svc_Handler_Pool_Strategy for + activating and creating Svc_Handler. They should be used with + the new TP_Reactor. More to come... + +Sun Sep 13 22:31:23 1998 Douglas C. Schmidt + + * ACE version 4.5.38 released. + +Sun Sep 13 18:36:11 EDT 1998 James CE Johnson + + * docs/tutorials/006/notify.cpp + No longer applicable. This used spawn() to create the + thread but the new version uses an ACE_Task<> derivative. + + * docs/tutorials/006/Makefile + Removed dependency info. + + * docs/tutorials/007/thread_pool.cpp + Removed THR_DETACHED from activate() call. I need a + better understanding of when to include this flag... + + * docs/tutorials/index.html + Setting up new Message_Queue entry points. + + * docs/tutorials/010/Makefile + docs/tutorials/010/block.h + docs/tutorials/010/message_queue.cpp + docs/tutorials/010/page01.html + docs/tutorials/010/page02.html + docs/tutorials/010/page03.html + docs/tutorials/010/page04.html + docs/tutorials/010/page05.html + docs/tutorials/010/page06.html + docs/tutorials/010/page07.html + docs/tutorials/010/task.cpp + docs/tutorials/010/task.h + + A tutorial showing a simple use of the ACE_Message_Queue. + + * docs/tutorials/011/Makefile + docs/tutorials/011/block.h + docs/tutorials/011/data.h + docs/tutorials/011/message_queue.cpp + docs/tutorials/011/page01.html + docs/tutorials/011/page02.html + docs/tutorials/011/page03.html + docs/tutorials/011/page04.html + docs/tutorials/011/page05.html + docs/tutorials/011/page06.html + docs/tutorials/011/task.cpp + docs/tutorials/011/task.h + + Extension of 010 adds queue-ing of non-trivial data. + + +Sun Sep 13 16:29:27 1998 Carlos O'Ryan + + * ace/Select_Reactor_T.h: + Use the ACE_UNIMPLETED_FUNC to make the code work on older + versions of IRIX + +Sat Sep 12 22:39:47 1998 Douglas C. Schmidt + + * ace/ACE.i: There was a bug with strecpy() -- it should return a + pointer to 1 byte PAST the '\0'... + +Sat Sep 12 21:43:07 1998 Nanbor Wang + + * ace/Timer_Hash.cpp: Removed the #pragma template instantiation + for ACE_Timer_Node_T because it is already + instantiated in Timer_Queue.cpp. Thanks to Sergio for noticing + this. + +Sat Sep 12 16:30:39 1998 Douglas C. Schmidt + + * ace/Dirent.cpp: Renamed the methods to be more "abstract" by + removing the "dir" suffixes. + + * ACE-INSTALL.html: Fixed a broken link. Thanks to Tom Shields + for reporting this. + + * ace/OS.h (ACE_OS): Added wrappers for the passwd iterator. + + * ace/OS.h (ACE_OS): Added wrappers for qsort() and bsearch(). + + * ace/README: Reformatted this file and also changed + ACE_REQUIRES_FUNC_DEFINITIONS + ACE_NEEDS_READV + ACE_NEEDS_SCHED_H + ACE_NEEDS_SYSTIME_H + ACE_NEEDS_WRITEV + + to + + ACE_NEEDS_FUNC_DEFINITIONS + ACE_LACKS_READV + ACE_LACKS_SCHED_H + ACE_LACKS_SYSTIME_H + ACE_LACKS_WRITEV + + respectively. + +Sat Sep 12 19:18:18 1998 Nanbor Wang + + * ace/OS.i (qsort): Fixed a typo. And removed "return" for this + is a void function. + +Sat Sep 12 13:13:39 EDT 1998 James CE Johnson + + docs/tutorials/003/Makefile + Removed dependency stuff since installations may vary + + docs/tutorials/003/client.cpp + docs/tutorials/003/page01.html + docs/tutorials/004/Makefile + docs/tutorials/004/client.cpp + docs/tutorials/004/page01.html + + Converted to new style with embedded comments instead of + line-numbered comments. + +Fri Sep 11 22:46:54 EDT 1998 James CE Johnson + + docs/tutorials/001/Source.tgz + docs/tutorials/001/acceptor.h + docs/tutorials/001/logger.h + docs/tutorials/001/page02.html + docs/tutorials/001/page03.html + docs/tutorials/001/page04.html + docs/tutorials/001/page05.html + docs/tutorials/001/server.cpp + docs/tutorials/002/Makefile + docs/tutorials/002/handler.h + docs/tutorials/002/page01.html + docs/tutorials/002/page02.html + docs/tutorials/002/page03.html + docs/tutorials/002/page04.html + docs/tutorials/002/server.cpp + + Updated to "new style". Corrected issues with Reactor + based on recent mailing list discussions. + +Fri Sep 11 12:30:37 1998 Nagarajan Surendran + + * ace/config-chorus.h: Uncommented ACE_LACKS_SYSV_SHMEM as ace + didn't compile on Chorus with that commented out. + +Fri Sep 11 09:02:00 CDT 1998 Chris Gill + + * ace/OS.{h,i} + ace/Containers.{cpp,h} + ace/config-psos-diab.h + include/makeinclude/platform_psos_diab.GNU: + Fixes to compile pSOS - added #if ! defined around new templates + as template parameters stuff in Config.* (Diab compiler can't + grok these), played with library linkage order platform macros. + +Fri Sep 11 08:54:41 EDT 1998 James CE Johnson + + * docs/tutorials/001/logger.h + Logging_Handler::open() should return 0 on success. + + * docs/tutorials/002/server.cpp + docs/tutorials/002/page02.html + Provide 'g_reactor' to the acceptor's open(). If you + don't do this, the app will core dump on ^C + + Thanks to Krishna Padmasola for + helping me see these. + +Thu Sep 10 16:53:21 1998 Carlos O'Ryan + + * tests/Upgradable_RW_Test.cpp: + Some templates were instantiated twice if threads were enabled. + +Thu Sep 10 13:41:53 1998 David L. Levine + + * config-sunos4-sun3.x.h,config-tandem.h,README: removed + ACE_HAS_SYSV_SPRINTF because it's no longer used. Thanks + to Ossama for reporting this. + +Thu Sep 10 10:18:29 1998 Nanbor Wang + + * examples/IPC_SAP/SOCK_SAP/CPP-inserver.cpp (run_event_loop): + Changed to use ACE_Handle_Set instead of FD_SET. It is more + portable this way. Thanks to Andre Folkers + for noticing this. + +Wed Sep 09 16:29:36 1998 David L. Levine + + * BUG-REPORT-FORM,Makefile: added BUG-REPORT-FORM. Thanks + to Susan Liebeskind for the form. + +Wed Sep 9 13:22:11 1998 James Hu + + * ace/Containers.h: + * ace/Containers.cpp: Added a new container class ACE_DLList. + +Tue Sep 8 23:17:11 1998 Nanbor Wang + + * tests/Thread_Mutex_Test.cpp (test): + * tests/Priority_Buffer_Test.cpp (consumer): Changed the + do-nothing if statements to ACE_UNUSED_ARG because NT doesn't + like that. Thanks to David for clarifying this. + +Tue Sep 8 21:45:32 1998 Nanbor Wang + + * *.{dsp,dsw}: Updated for VC 6. + +Tue Sep 8 21:31:32 1998 Carlos O'Ryan + + * ace/config-irix6.x-sgic++-nothreads.h: + Added ACE_HAS_DIRENT and support for the envinfo tool. + +Tue Sep 08 18:54:28 1998 Steve Huston + + * ace/OS.h: Removed definitions of PTHREAD_DETACHED, PTHREAD_FLOAT, + PTHREAD_INHERIT_SCHED from the ACE_HAS_PTHREADS_DRAFT6 section of + mapping draft 6 names into the pthreads standard names. The first + two aren't used anywhere and the third is already defined on the + known draft 6 platforms. Thanks to Chuck Gehr and Arturo Montes for + helping to straighten this out. + +Tue Sep 8 15:10:42 1998 Carlos O'Ryan + + * tests/Makefile: + Updated dependencies. + +Tue Sep 8 13:16:37 1998 Douglas C. Schmidt + + * ace/config-sco-5.0.0.h: Added ACE_HAS_GPERF at the bequest + of Arturo. + +Tue Sep 08 10:25:48 1998 Nanbor Wang + + * ace_{dll,lib}.dsp: Changed the process type to "Blend*" which + make the project to work on any type of intel processors. + However, this disable the bug-fix to get around the infamous + Pentium floating point problem. + + * netsvcs/lib/netsvcs.dsp: + * netsvcs/servers/servers.dsp: Perform VC 6 modification. + +Tue Sep 08 07:28:05 1998 David L. Levine + + * ace/OS.i (readdir_r): don't use the POSIX.1c ::readdir_r on + suns without _POSIX_PTHREAD_SEMANTICS. + + * include/makeinclude/wrapper_macros.GNU: added + ACE_HAS_GNUG_PRE_2_8 macro. Use it for determining + exceptions-related flags with g++. It can also be used to + suppress builds with old (pre-2.8) versions of g++; see + TAO/tests/POA/TIE/Makefile for an example. + + * apps/Gateway/Gateway/File_Parser.cpp (getint): + egcs 1.1b can't handle the FP_RETURN_TYPE typedef. So, + use FP::Return_Type with __GNUG__. + + * ace/config-chorus.h: added ACE_HAS_DIRENT and + ACE_LACKS_READDIR_R. + + * ace/config-lynxos.h: don't use ACE_HAS_STRING_CLASS with + LynxOS >= 3.0.0. It requires that libg++ be linked in + to the IOStream tests. + + * docs/ACE-guidelines.html: notify via email if a particular + individual's attention is needed to address a comment in the code. + + * ace/Basic_Types.h: corrected comment: the dump method + is named output, because it takes an argument. + +Mon Sep 7 22:12:02 1998 Nanbor Wang + + * ace/config-freebsd.h: Added ACE_HAS_SIGINFO_T, + ACE_LACKS_SIGINFO_H, ACE_LACKS_UCONTEXT_H, ACE_LACKS_SI_ADDR and + ACE_HAS_DIRENT. + + * ace/config-freebsd-pthread.h: + * ace/config-linux-common.h: Added ACE_HAS_DIRENT. + +Mon Sep 7 12:39:10 EDT 1998 James CE Johnson + + docs/tutorials/008/page01.html + docs/tutorials/008/page02.html + docs/tutorials/008/page03.html + docs/tutorials/008/page04.html + docs/tutorials/008/page05.html + docs/tutorials/009/Makefile + docs/tutorials/009/broadcast_client.cpp + docs/tutorials/009/directed_client.cpp + docs/tutorials/009/page01.html + docs/tutorials/009/page02.html + docs/tutorials/009/page03.html + docs/tutorials/009/page04.html + docs/tutorials/009/page05.html + docs/tutorials/009/server.cpp + + Cleanup on Tutorial 008 and creation of Tutorial 009 which expands + 008 by making the server more selective in who it responds to. + +Mon Sep 7 10:06:54 1998 Douglas C. Schmidt + + * ace/ACE.h (ACE): Moved strnew (wchar_t *) into an ACE_WIN32 + section to protect it properly. Thanks to David Levine for + reporting this. + + * ace:config-sco-*.h: Added ACE_HAS_DIRENT on the advice of Arturo + Montes . + +Mon Sep 07 09:52:12 1998 David L. Levine + + * docs/ACE-guidelines.html: added general rule to put system + call wrappers in ACE_OS, extensions in ACE. + + * ace/config-osf1-4.0.h: added ACE_HAS_DIRENT and + _POSIX_PTHREAD_SEMANTICS. The latter was necessary + to tell ACE_OS::readdir_r () to use the three-arg + ::readdir_r (). + + * ace/config-lynxos.h: added ACE_HAS_DIRENT. + + * ace/Log_Msg.cpp (log): initialized local "c" to '\0' so that + egcs 1.1b won't complain that it might be used without + initialization. + + * ace/OS.i,ace/config-osf1-4.0.h (readdir_r): use + ACE_HAS_PTHREADS_STD instead of _POSIX_PTHREAD_SEMANTICS to + select the three-arg ::readdir_r (). + + * ace/config-vxworks.h: added ACE_HAS_DIRENT. + + * ace/OS.i,config-vxworks5.x.h (readdir_r,rewinddir,seekdir,telldir), + README: + added support for ACE_LACKS_READDIR_R, ACE_LACKS_SEEKDIR, and + ACE_LACKS_TELLDIR. + + * ace/OS.i (opendir): added const_cast to remove constness + from the argument, because VxWorks' header doesn't declare + it const. This shouldn't cause a problem on other platforms. + +Mon Sep 7 01:02:58 1998 Darrell Brunsch + + * ace/ACE.i: Changed ACE_INLINE to ASYS_INLINE. + + * ace/OS.h: Added a no-op type define for DIR and struct + dirent so compilation can continue on NT. + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Added new dirent.* files and removed Array.{cpp,i} files. + +Sun Sep 6 15:49:46 1998 Douglas C. Schmidt + + * ace/ACE: Added several new helper string functions, which were + mined from the drwho program. + + * ace/OS: Moved strnew() into class ACE, which is where it + belongs... + + * ace/Containers: Merged the ACE_Array class entirely into the + Containers files, which is more consistent with the general + design of ACE. Also, removed ace/Array.i and Array.cpp since + they are no longer needed. We'll keep Array.h around for a + while for backwards compatibility, but it just #includes + "ace/Containers.h" now... + + * ace/config-sunos5*.h: Added ACE_HAS_DIRENT. We'll need help + figuring this out on the other platforms... + + * ace/OS: Began adding "Dirent" support to ACE_OS. This will + provide the UNIX/POSIX directory iterator routines when the + ACE_HAS_DIRENT macro is enabled. + + * ace/OS: Added fputs() to ACE_OS. I'm not sure why this was + missing... + + * ace/Makefile (FILES): Moved Priority_Reactor to earlier in + the Makefile to maintain alphabetical order. + +Sun Sep 6 14:06:43 1998 Douglas C. Schmidt + + * ace/OS.h: Moved the ACE_NEW_THROW macros that Matt Braun wrote + into ACE so that we can use these in all applications. + +Sun Sep 06 12:28:40 1998 Fred Kuhns + + * Added a simple reactor/acceptor figure to the first tutorial + docs/tutorial/001/simple.* + +Sun Sep 06 08:34:57 1998 David L. Levine + + * ace/config-g++-common.h,ace/README,tests/Conn_Test.cpp: + renamed ACE_HAS_OLD_GNUG to ACE_HAS_GNUG_PRE_2_8. + +Sat Sep 5 15:31:33 1998 Douglas C. Schmidt + + * ace: Removed ACE_HAS_IRIX_GETTIMEOFDAY and all of its uses + throughout ACE. It was no longer necessary. Thanks to Ossama + for reporting this. + + * ace/Synch.h: Added a "no-op" ACE_Barrier for cases where we + don't have ACE_HAS_THREADS enabled. + +Sat Sep 5 15:25:33 EDT 1998 James CE Johnson + + docs/tutorials/index.html + docs/tutorials/008/Makefile + docs/tutorials/008/server.cpp + docs/tutorials/008/broadcast_client.cpp + docs/tutorials/008/directed_client.cpp + docs/tutorials/008/page01.html + docs/tutorials/008/page02.html + docs/tutorials/008/page03.html + docs/tutorials/008/page04.html + docs/tutorials/008/page05.html + docs/tutorials/008/CVS/Root + docs/tutorials/008/CVS/Repository + docs/tutorials/008/CVS/Entries + docs/tutorials/009/Makefile + docs/tutorials/009/broadcast_client.cpp + docs/tutorials/009/directed_client.cpp + docs/tutorials/009/server.cpp + docs/tutorials/009/CVS/Root + docs/tutorials/009/CVS/Repository + docs/tutorials/009/CVS/Entries + + Began the next set of tutorials on the topic of Datagrams. + Thanks to Jeff Hellzen for this suggestion. + +Fri Sep 4 18:56:36 1998 Carlos O'Ryan + + * ace/Name_Proxy.cpp: + Fixed spurious double assignment (int foo = foo = bar;), thanks + to thanks to John Mulhern <9107@mn3.lawson.lawson.com> for + reporting this. + +Fri Sep 04 18:54:32 1998 Irfan Pyarali + + * ace/Select_Reactor_T.cpp (ACE_Select_Reactor_T): Made sure that + all references to Select_Reactor have the template argument in + them. Thanks to Chuck Gehr for + sending the patches. + +Fri Sep 4 18:29:29 1998 Alexander Babu Arulanthu + + * examples/Reactor/Proactor/test_proactor.cpp: Changed to use + "test_proactor.cpp" as input file. + +Fri Sep 4 17:51:17 1998 Alexander Babu Arulanthu + + * ace/Proactor.cpp: + * ace/Asynch_Acceptor.cpp: + * ace/Asynch_Acceptor.h: + * ace/Asynch_IO.cpp: + * examples/Reactor/Proactor/test_proactor.cpp: + First round of changes for ACE_Asynch_Accept. Makes use of + separate thread for each accept call, each thread blocking on the + ACE_OS::accept. Thanks to Irfan, a better implementation using + TP_Reactor is currently being done. + +Fri Sep 4 16:45:36 1998 Douglas C. Schmidt + + * ace: Removed all traces of ACE_HAS_MT_SAFE_SOCKETS -- this was a + vestige from Solaris 2.2! Thanks to Ossama Othman + for suggesting this. + + * ace/Service_Config: Changed the default value of + ACE_Service_Config::debug_ from 1 to 0. Thus, debugging is + DISABLED by default. If you want to enable debugging, pass the + -d option to the constructor of ACE_Service_Config. + + * ace/Naming_Context.cpp, + ace/Service_Config.cpp, + ace/Service_Types.cpp, + ace/Service_Repository.cpp: Now we only print out service config + information if we're ACE::debug() is non-0. This is more + consistent with other parts of ACE. Thanks to XuYifeng + for reporting this. + + * ace/Service_Config: Moved the debug() stuff from here and put it + into class ACE so that it will be more globally visible. + +Fri Sep 04 15:24:44 1998 Nanbor Wang + + * ace/ACE.i: Here, we should use ASYS_INLINE which is always + defined as inline on most platforms. + + * ace/Log_Msg.h (ACE_Log_Msg): Added a new ACE_DEBUG format + character 'A' which prints out an ACE_timer_t value. This is + most useful when you want to print out the timers in + ACE_Profile_Timer::ACE_Elapse_Time. Thanks to Naga for + providing the brilliant idea. + + * tests/XtReactor_Test.cpp (main): Removed '.cpp' from + ACE_START_TEST title string. Thanks to Ossama for reporting + this. + + * Makefile (CONTROLLED_FILES): Removed some documents from the + list because they are in docs/ now. + + * tests/run_tests.bat: Removed trailing '.cpp' from + Message_Queue_Notifications_Test. Thanks to Jack Erickson + for reporting this. + + * ace/OS.i (signal): Added check for ACE_WIN32 to defeat the + effect of !defined (ACE_LACKS_UNIX_SIGNALS). Although Win32 + does has ACE_LACKS_UNIX_SIGNALS defined, it also has limited + support for signals. Thanks to XuYifeng + for reporting this. + +Fri Sep 04 07:26:57 1998 David L. Levine + + * include/makeinclude/rules.bin.GNU,wrapper_macros.GNU: + moved VBIN definition from rules.bin.GNU to wrapper_macros.GNU. + With this change, individual Makefiles need not define VBIN. + + * tests/run_tests.sh: removed -f so that temp file removal + works properly. Don't printout ipcs output unless it + changes, for resources owned by the user. + +Fri Sep 04 01:01:58 1998 Irfan Pyarali + + * ace/Timeprobe.h: Disable warning of using Microsoft Extensions. + +Fri Sep 04 02:12:03 1998 Douglas C. Schmidt + + * ACE version 4.5.37 released. + +Fri Sep 4 00:07:18 1998 Douglas C. Schmidt + + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp (open): Added + template instantiations to make GCC happy. Thanks to David + Levine for reporting this. + +Thu Sep 03 19:15:52 1998 Fred Kuhns + + * docs/tutorial/006/client_acceptor.cpp: added + typedef ACE_Svc_Handler inherited; + +Thu Sep 03 17:03:46 1998 Irfan Pyarali + + * ace/Dynamic.cpp (instance): Removed the typedef in the header + file because some compiler was having problems with it. Thanks + to baksoo@dbserver.kaist.ac.kr for reporting this. + +Thu Sep 03 16:43:34 1998 David L. Levine + + * ace/OS.cpp (thr_create): play the zero thread priority game + on Solaris if defined (sun), not if defined (ACE_HAS_STHREADS). + This allows POSIX threads to be created with a thread priority + of 0 if _POSIX_C_SOURCE=199506L and _POSIX_PTHREAD_SEMANTICS + are defined. Thanks to Russ Noseworthy + for reporting this problem. + + * examples/Threads/tss2.cpp: added explicit ACE_Guard + instantiation. + + * tests/Dynamic_Priority_Test.cpp (main): changed "not supported" + to "not available" in printout that indicates that the + test will be run in time-sharing class, instead of + a real-time class. The test can still run in time-sharing + class. Thanks to Ossama for reporting this. + +Thu Sep 03 16:14:16 1998 Nanbor Wang + + * ace/Synch.i (ACE_Process_Mutex::remove): Reset this->lock_ to 0 + after removing the lock so we can avoid destroying the same + kernel object twice. Thanks to Detlef Becker + for reporting this. + +Thu Sep 03 15:43:22 1998 Irfan Pyarali + + * tests/Upgradable_RW_Test.cpp: Fixed this file so that it works + with egcs. + +Thu Sep 3 14:51:06 1998 Douglas C. Schmidt + + * docs: Moved ACE-{tutorials,guidelines,subsets,porting}.html + into the docs directory from the etc directory. This is + a more "fitting" location... + +Thu Sep 3 13:23:39 1998 Nanbor Wang + + * Makefile (CONTROLLED_FILES): Added docs/ into CONTROLLED_FILES. + +Thu Sep 03 09:24:20 1998 David L. Levine + + * ace/Message_Block.cpp: added ACE_Guard instantiation. + + * ace/SPIPE_Stream.i (recv_handle): replaced "recvfd = recvfd" with + ACE_UNUSED_ARG (recvfd) to avoid egcs 1.1 warning about a + statement with no effect. + +Thu Sep 03 00:26:23 1998 Nanbor Wang + + * ace/Time_Request_Reply.cpp (ACE_Time_Request): The second + parameter should be of type ACE_UINT32. + +Wed Sep 2 22:52:32 1998 Douglas C. Schmidt + + * netsvcs/lib/Name_Handler.cpp, + * ace/Time_Request_Reply.cpp: Fixed up yet another + minor mismatch caused by the ACE_SUCCESS/ACE_FAILURE fixes... + Thanks to David Levine for tracking these down. + +Wed Sep 02 20:55:18 1998 Douglas C. Schmidt + + * ACE version 4.5.36 released. + +Wed Sep 2 19:21:25 1998 Douglas C. Schmidt + + * ace/Name_Request_Reply.cpp: Continued to cleanup the residue of + the ACE_SUCCESS and ACE_FAILURE changes. Thanks to David Levine + for reporting this. + +Wed Sep 02 19:08:29 1998 David L. Levine + + * ace/Template_Instatiations.cpp: commented text following + an #endif. + +Wed Sep 02 16:46:45 1998 Douglas C. Schmidt + + * ACE version 4.5.35 released. BTW, these releases were aborted + due to CVS hiccups. We've got to figure out a better way to + roll this stuff back... + +Wed Sep 02 16:33:25 1998 Douglas C. Schmidt + + * ACE version 4.5.34 released. + +Wed Sep 02 16:31:22 1998 Nanbor Wang + + * ace/OS.h: Make sure ACE_NO_INLINE is not defined before defining + it to avoid double defining the macro. Thanks to Ossama Othman + for suggesting this. + +Wed Sep 2 11:10:08 1998 Douglas C. Schmidt + + * ace/Task.cpp (activate): Remmber to decrement the thr_count_ if + spawn_n() fails. Thanks to Russ Noseworthy + for reporting this fix. + + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: Fixed another + void * -> char * problem. Now this stuff all seems to build + fine. + +Wed Sep 02 10:07:15 1998 David L. Levine + + * ace/Name_Request_Reply.{h,cpp}: reverted ACE_SUCCESS to SUCCESS + because other ACE code depended on it. + + * ace/Object_Manager.cpp (~ACE_Object_Manager_Base): moved + internal_lock_ deletion inside ACE_MT_SAFE protection. Thanks + to Dongwook Kim for reporting this. + + * include/makeinclude/platform_sunos5_sunc++.GNU: updated comments + to recommend not using Sun C++ 4.1. + +Wed Sep 02 09:34:32 1998 Oliver M. Kellogg + + * ace/OS.i (sigwait): use __sigwaitd10 with g++ on DU 4.0. + +Tue Sep 1 20:44:15 PDT 1998 James C. Hu + + * ace/Filecache.cpp: + * ace/UPIPE_Stream.cpp: I guess nobody uses GCC anymore. Fixed + some template instantiation problems in Filecache.cpp and + UPIPE_Stream.cpp. I guess, eventually all of this will be moved + into the Template_Instantiations.cpp file, but until then... + +Tue Sep 01 20:59:11 1998 David L. Levine + + * ace/OS.i (ts_object): commented test appearing after the #endif. + + * ace/OS.i (rw_trywrlock_upgrade): expanded/added comment to + clarify the with/without ACE_LACKS_RWLOCK_T distinction. + + * ace/OS.i (sigwait): fixed indentation. + + * ace/ACE.cpp (get_ip_interfaces): removed trailing } after comment + following #endif. + + * etc/ACE-guidelines.html: added section on scripts. Added rule + to prefix constants and enum values with ACE_ or TAO_. + +Tue Sep 1 19:05:05 1998 Douglas C. Schmidt + + * tests/XtReactor_Test.cpp: Added a new version that should work + on Linux. Thanks to Eric Newton for this fix. + +Tue Sep 1 19:40:03 1998 Carlos O'Ryan + + * tests/XtReactor_Test.cpp: + If ACE_LACKS_MOTIF is defined the test can use Athena + Widgets. Thanks to Eric C. Newton for + contributing this example. + +Tue Sep 1 19:05:05 1998 Douglas C. Schmidt + + * examples/Shared_Malloc/test_malloc.cpp (spawn): Fixed a minor + problem with conversions from const char * literals to char *'s. + Thanks to John Mulhern for reporting this problem. + + * examples/IPC_SAP/SOCK_SAP/CPP-in{server,client}.cpp: Fixed all + uses of void *request with char *request to stop ANSI C++ + compilers from complaining. Thanks to John Mulhern for + reporting this problem. + +Tue Sep 01 16:22:06 1998 Irfan Pyarali + + * ace/Filecache.cpp (init and ~ACE_Filecache_Object): Changed + SUCCESS to ACE_SUCCESS. + +Tue Sep 1 13:54:10 PDT 1998 James C. Hu + + * ace/Message_Block.h: + * ace/Message_Block.i: Added a space () method that reports + the amount of space remaining in the message block. + +Tue Sep 1 3:50:39 US/Central 1998 James CE Johnson + + * etc/tutorials/006/client_handler.cpp + etc/tutorials/006/client_handler.h + etc/tutorials/006/page04.html + etc/tutorials/006/page05.html + + Added a close() method to Client_Handler so that it will be closed + properly when the svc() method exits. + + * etc/tutorials/007/client_handler.cpp + etc/tutorials/007/client_handler.h + etc/tutorials/007/page05.html + etc/tutorials/007/page06.html + etc/tutorials/007/page09.html + + Added Client_Handler::close() that will be called when + Client_Handler::svc() exits in the thread-per-connection model. + Thread_Pool::svc() now calls the handler's handle_close() method + to properly shut down the handler if handle_input() fails. + +Tue Sep 01 12:58:02 1998 Chris Gill + + * ace/ACE.cpp + ace/Basic_Types.cp + ace/Containers.{cpp, h} + ace/Filecache.{cpp, h} + ace/Hash_Map_Manager.{cpp, h} + ace/INET_Addr.cpp + ace/Local_Tokens.cpp + ace/Log_Record.cpp + ace/Map_Manager.{cpp, h} + ace/Message_Block.cpp + ace/Name_Request_Reply.{cpp, h} + ace/OS.{cpp, h, i} + ace/Object_Manager.h + ace/Process.cpp + ace/Remote_Name_Space.cpp + ace/SOCK_Dgram_Mcast.{cpp, h} + ace/Service_Types.cpp + ace/Signal.cpp + ace/Synch_T.{cpp, h, i} + ace/Time_Hash.cpp + ace/Token_Request_Reply.h + ace/UPIPE_Stream.cpp + ace/config-psos-diab.h + ace/config-psos-tm.h: + + pSOS port of ACE for the Diab 4.2 and Trimedia cross compilers. + Thanks to Jin Lu of Philips Research for completing the ACE pSOS + port on the Trimedia cross compiler and contributing the changes + back to the ACE distribution. + +Tue Sep 1 10:43:24 1998 Douglas C. Schmidt + + * ace/config-linux-common.h, + ace/config-sco-5.0.0-mit-pthread.h, + ace/config-sco-5.0.0.h, + ace/README: + ACE_HAS_LONG_FDMASK macro has been changed to + ACE_HAS_BIG_FD_SET. Therefore, I updated these files. Thanks + to Ossama Othman for reporting + this. + +Tue Sep 01 10:21:49 1998 David L. Levine + + * tests/TSS_Test.cpp (cleanup, worker): with ACE_HAS_PTHREADS_DRAFT4, + delete the tss instances in cleanup instead of worker. This gets + rid of the memory leaks on those platforms. + + * include/makeinclude/platform_osf1_4.0.GNU: added + -hidden [...] -non_hidden magic. See comments in the file; + this solves a problem with mutiply defined symbols between + shared libraries and DEC's libcxxstd.a. It only affected + tests/IO_Stream_Test. + +Tue Sep 01 10:03:55 1998 Douglas C. Schmidt + + * ACE version 4.5.33 released. + +Tue Sep 01 03:46:21 1998 Steve Huston + + * ace/Asynch_Acceptor.{h cpp}: Enable the contents for platforms + with ACE_HAS_AIO_CALLS, not just ACE_WIN32. Thanks to John + Mulhern for these fixes. + + * examples/Reactor/Proactor/Makefile: Removed include of + platform_macros.GNU. Thanks to John Mulhern for this one too. + +Mon Aug 31 16:38:03 1998 Douglas C. Schmidt + + * ace/config-kcc-common.h: Added ACE_HAS_CPLUSPLUS_HEADERS to + prevent warnings/errors. Thanks to Ben Eng and + Todd Pack for reporting this. + + * Added a bunch of patches so that ACE compiles and passes its + tests on Chorus with gcc. Thanks to Alberto Villarica" + for reporting this. + +Mon Aug 31 14:02:34 1998 Darrell Brunsch + + * ace/ace.dsw: + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Updated to MSVC 6, which consisted of changing the + version number insde to 6.00. This change gets it + to work in both 5 and 6, without any trouble. + +Mon Aug 31 12:25:15 1998 David L. Levine + + * ace/Object_Manager.*: reorganized to provide the + ACE_Object_Manager_Base class. This class contains + the data structures used to support Singleton + registration for destruction. + + * ace/ACE.{h,cpp}: added init () and fini (). These + currently just call the ACE_Object_Manager's init () + and fini (). The might be useful for applications + that use ACE_HAS_NONSTATIC_OBJECT_MANAGER and + ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER, and + therefore need to explicitly initialize and finalize + the ACE_Object_Manager singleton. + + * tests/Semaphore_Test.cpp (test_timeout): a timed + semaphore acquire fails on ACE_HAS_PTHREADS_DRAFT4 + with EINTR instead of ETIME if it times out. That's + the way it's documented, as well as the way it behaves on LynxOS. + + * tests/TSS_Test.cpp (cleanup): with DRAFT4 threads, + don't do anything in the cleanup function. + The intended use of this function doesn't apply. + With Draft 4 threads, this function is called implicitly + by pthread_setspecific whenever an old value is replaced. + This function is intended to be used with Draft 6 and later + threads, where it is called on thread termination with the + thread-specific value. + + * tests/test_config.cpp: set ACE_MAX_PROCESSES to 4 on LynxOS, + so that Process_Mutex_Test will succeed. + +Sun Aug 30 23:05:34 1998 Nanbor Wang + + * ace/Select_Reactor_T.cpp: Should include ace/Thread.h also. + Thanks to J. Russell Noseworthy + for reporting this. + + * ace/Select_Reactor.cpp: Added explicit template instantiation + for ACE_Lock_Adapter>. + Thanks to Eric C. Newton for reporting this. + +Sun Aug 30 07:44:54 1998 David L. Levine + + * ace/config-sunos5.5.h,ace/README, + include/makeinclude/platform_sunos5_sunc++.GNU: + use ACE_LACKS_RTTI instead of ACE_HAS_RTTI without rtti, + with Sun CC on SunOS 5.5. That removes all use of ACE_HAS_RTTI + from ACE. + + * netsvcs/lib/Name_Handler.h: added #include of ace/Singleton.h. + + * tests/run_tests.vxworks: commented out Dynamic_Priority_Test. + It now causes VxWorks to go to never-never land. + + * ace/config-g++-common.h,ace/README,tests/Conn_Test.cpp: + added ACE_HAS_OLD_GNUG. Thanks to Doug for this suggestion. + + * ace/Token.cpp (ACE_Token_Queue_Entry ctor): added + ACE_UNUSED_ARG (m) ifdef ACE_TOKEN_USES_SEMAPHORE. + +Sun Aug 30 00:14:29 1998 Irfan Pyarali + + * ace/Service_Object.cpp (fini): Make sure to check the + flag before proceeding. Also + ~ACE_Service_Type() now calls this->fini(). + + * ace/Svc_Handler: + * ace/Dynamic: + + Patrick J. McNerthney described this problem: + ________________________________________ + + ACE_Svc_Handler creates an + ACE_TSS_Singleton singleton + object to determine if the ACE_Svc_Handler is a dynamically + created object or not. ACE_TSS_Singleton declares the internal + single instance of the ACE_Dynamic object as a + ACE_TSS data type. + + The first time this object is "referenced", + ACE_TSS::ts_init() is called, which in turn calls + ACE_Thread::keycreate and registers + ACE_TSS::cleanup with it. Since ACE_TSS is a + template class, the vtable and the code of this object resides + in the dynamically loaded service DLL. + + During termination, the Object Manager closes down the Service + Configurator, causing all services to be shutdown, and their + DLLs are unloaded. + + The Object Manager then calls ACE_OS::cleanup_tss which attempts + to call the above registered ACE_TSS::cleanup + method. Since the DLL has already been unloaded, the + application faults trying to access the vtable. + ________________________________________ + + My earlier solution addressed this problem but only in + ~Object_Manager(), i.e., at the end of the application, by + carefully ordering the cleanup of singletons, tss, and the + unlinking of libraries. To solve this more generically and to + address this problem when DLLs are unlinked arbitrarily (and not + only at the end of applications), I moved the typedef of + ACE_TSS_Singleton from Svc_Handler.h to + Dynamic.h. Then the access to this singleton was changed from + DYNAMIC::instance() to ACE_Dynamic::instance(). + + This will force the generation of the code for this class to be + in the ACE library rather than in a user's DLL. Hence when TSS + cleanup hooks and Object Manager are trying to clean this object + up from ~Object_Manager, it won't crash as the code for this + class is in ACE and not in the unlinked DLL. + + This issue raised a couple of interesting observations about + ACE_Singleton and ACE_TSS_Singleton and DLLs: + + It is ok to use ACE_Singleton and ACE_TSS_Singleton in DLLs that + are going to be unlinked at the end of the program. For DLLs + that may get unlinked *before* the end of the program, they must + not use ACE_Singleton or ACE_TSS_Singleton. ACE_Singleton + registers with the Object_Manager for deletion and therefore is + accessed at the end of the application. ACE_TSS_Singleton is + very similar to ACE_Singleton. Moreover, it uses tss cleanup + hooks to clean up the thread specific storage. Therefore, if + the DLL lives shorter than the thread and/or the application, it + must *not* use ACE_Singleton and ACE_TSS_Singleton. + + This motivates the need for ACE_DLL_Singleton. As usual, + contributions to ACE are always welcome ;-) Many, many thanks to + Patrick J. McNerthney for all his help! + +Sat Aug 29 19:22:22 1998 Douglas C. Schmidt + + * examples/Service_Configurator/Misc/main.cpp (main): Fixed a stray + l_argv[3] = 0; I'm not sure why this was here... + +Sat Aug 29 17:31:06 1998 Douglas C. Schmidt + + * examples/IPC_SAP/SOCK_SAP/CPP-in{client,server,server-fancy}.cpp: + Updated these tests to be more robust and better designed. + + * examples/IPC_SAP/SOCK_SAP/Makefile: Added the + CPP-inserver-fancy.cpp file. I'm not sure why I'd omitted it + for so long... + + * examples/IPC_SAP/SOCK_SAP/CPP-in{client,server}.cpp: Cleaned up + the code a bit to avoid warnings. Thanks to David Levine for + reporting these. + +Sat Aug 29 14:11:25 1998 David L. Levine + + * etc/ACE-guidelines.html: added rule to not for a pointer + being 0 before deleting it. It's always safe to delete a + 0 pointer. Thanks to James CE Johnson for + pointing this out. + +Fri Aug 28 23:29:51 1998 Douglas C. Schmidt + + * examples/IPC_SAP/SOCK_SAP/CPP-in{client,server}.cpp: Enhanced + the client and server test so that it'll be a good benchmark for + the "best case" to compare TAO against. + +Fri Aug 28 21:53:13 1998 Steve Huston + + * ace/OS.h: Conditionalize setting of ACE_INFINITE on non-Win32 + to allow the platform config to define a value. + + * ace/config-hpux11.h: Define ACE_INFINITE as 10000000. This value + was empirically determined by John Mulhern. Until we know why + this had to be done, you may need to set a different value in + your own config.h file. + +Fri Aug 28 13:14:34 1998 Nanbor Wang + + * examples/Service_Configurator/Misc/main.cpp: Made the file CE + friendly. Added "-y" to service configurator so we can still + test static services. + +Fri Aug 28 13:45:28 1998 David L. Levine + + * include/makeinclude/platform_lynxos.GNU: added HOST_OS + support for PowerPC target. It has a slightly different + name (sunos-xcoff-ppc) than for x86 target (sunos-coff-x86). + + * ace/config-lynxos.h: there doesn't seem to be an + alloca () for PowerPC target. So, only enable + ACE_HAS_ALLOCA and ACE_HAS_ALLOCA_H ifdef __x86__. + +Fri Aug 28 12:30:57 1998 Carlos O'Ryan + + * bin/create_ace_build: + Now it will cleanup dead links on the build directory. + +Fri Aug 28 09:45:53 1998 Douglas C. Schmidt + + * ace/Synch: Fixed the constructor of ACE_Null_Condition so that + it's consistent with ACE_Condition_Thread_Mutex. Thanks to + Mats Nilsson for reporting this. + +Fri Aug 28 08:33:20 1998 Alexander Babu Arulanthu + + * ace/OS.h (FILE_FLAG_SEQUENTIAL_SCAN): Given null definitions for + FILE_FLAG_SEQUENTIAL_SCAN for Non Win32 platforms. + +Thu Aug 27 19:40:32 1998 Steve Huston + + * ace/OS.i: Changed an erroneous ACE_HAS_PTHREAD_DRAFT6 to + ACE_HAS_PTHREADS_DRAFT6. Thanks to Chuck Gehr for catching this. + +Thu Aug 27 15:47:34 1998 Irfan Pyarali + + * ace/Proactor.cpp (handle_signal): Fixed code for looping around + handle_events(). Thanks to Marc Penner + for pointing out the problem. + + * ace/OS.cpp (ACE_Countdown_Time::stop): Removed the setting of + errno to ETIME when we have used all of timeout. This was + necessary since this errno was interfering with errno being set + by other parts of ACE. + +Thu Aug 27 13:45:31 1998 Nanbor Wang + + * ace/OS.h: Added /**/ between "#include" and + "". Otherwise, MSVC spits out warnings, tons of + them. + + * ace/Profile_Timer.h (ACE_Profile_Timer): Remove the Win32 + section. Win32 (except CE) actually uses the code in + ACE_HAS_GETRUSAGE. + +Thu Aug 27 13:12:04 1998 Alexander Babu Arulanthu + + * examples/Reactor/Proactor/test_proactor.cpp : + test_proactor_with_aio.cpp is removed. + test_proactor.cpp should do well on Win as well as other + POSIX4 compliant platforms (with some known bugs in Solaris2.6). + +Thu Aug 27 11:35:11 1998 David L. Levine + + * etc/ACE-guidelines.html: added rule to declare a loop index + before the loop, if it's used after the loop. + + * ace/OS.h,README: added ACE_LACKS_RTTI support, for use with + ACE_HAS_ANSI_CASTS without dynamic_cast. + + * ace/config-sunos5.5.h (Sun CC only), config-osf1-4.0.h: + added conditional ACE_LACKS_RTTI. + + * include/makeinclude/platform_osf1_4.0.GNU: added rtti=0 + support. + + * ACE-INSTALL.html,include/makeinclude/wrapper_macros.GNU: + updated comments to reflect that rtti=0 is now supported on + OSF1-4.0. (It's not only supported on Sun CC/SunOS 5.) + + * tests/SOCK_Connector_Test.cpp (host_is_up): broke out + the code to test whether a host exists, is reachable, and + is up into host_is_up (). Consider the host up if the + blocking connection attempt succeeds, or down if it doesn't. + +Wed Aug 26 23:43:42 1998 Douglas C. Schmidt + + * ACE version 4.5.32 released. + +Wed Aug 26 19:11:07 1998 Carlos O'Ryan + + * bin/count_lines: + A nice Perl script to count lines of code. + +Wed Aug 26 17:35:43 1998 Douglas C. Schmidt + + * tests/Reactors_Test.cpp (close): Oops, the ACE_ASSERT() was + incorrect. It should be + + ACE_ASSERT (Test_Task::task_count_ >= 0); + + Thanks to David Levine for reporting this. + +Wed Aug 26 07:47:57 1998 Nanbor Wang + + * ace/Select_Reactor.h: Added template specialization for + ACE_Guard> to speed + thing up when using lock-freed Select_Reactor. + + * ace/Select_Reactor.cpp: Removed template instantiation for + ACE_Guard> because + it's been specialized in .h file. + +Wed Aug 26 08:51:23 1998 Steve Huston + + * ace/OS.cpp (thr_keycreate): On pthreads draft 6, the call is + pthread_key_create, not pthread_keycreate. Thanks to Arturo + Montes for this fix. + +Wed Aug 26 08:32:18 1998 David L. Levine + + * tests/Reactor_Performance_Test.cpp (create_reactor): + wrapped block in "if" statement with {} to prevent syntax + error. Yet another example of why we should always use + {} in "if" statements :-) + +Wed Aug 26 07:54:49 1998 J. Russell Noseworthy + + * ace/OS.{i,cpp} (rwlock_init): use native ::rwlock_init on Solaris, + even if ACE_HAS_STHREADS isn't defined. This avoids a nasty + bug on startup with only ACE_HAS_PTHREADS defined on Solaris. + The ACE_Object_Manager fails to initialize its first + preallocated object, and core dumps when trying to use + the ACE_Log_Msg lock, which hasn't been initialized yet. + +Tue Aug 25 21:26:29 1998 James CE Johnson + + * include/makeinclude/platform_linux_lxpthread.GNU: + added NO_IMPLICIT_TEMPLATES support. To disable + -fno-implicit-templates, set NO_IMPLICIT_TEMPLATES + to anything in either your environment or on the + make command line. + +Tue Aug 25 20:04:09 1998 Douglas C. Schmidt + + * ace/config-hpux11.h: Added ACE_HAS_AIO_CALLS. Thanks to John + Mulhern for verifying this. + + * etc: Began to add the ACE tutorials. Thanks to James CE Johnson + for contributing this stuff. + + * tests/Reactor*.cpp: Fixed all the Reactor tests so that they'd + abide by the appropriate design rules. Thanks to Hans Rohnert + for reporting this. + +Tue Aug 25 19:31:37 1998 David L. Levine + + * ace/Memory_Pool.i (~ACE_Lite_MMAP_Memory_Pool,~ACE_MMAP_Memory_Pool): + swapped to avoid use of ~ACE_MMAP_Memory_Pool before its linline + definition. + +Tue Aug 25 18:48:50 1998 Irfan Pyarali + + * ace/Service_Config.cpp (parse_args): Changed the default for + ACE_Service_Config::no_static_svcs_ to be 1. This means that by + default static services (ACE_Naming_Context and + ACE_Service_Manager) will *not* be loaded into the Service + Repository. The -n option remains the same for backward + compatibility, i.e., it sets ACE_Service_Config::no_static_svcs_ + to 1. -y is a new option that sets + ACE_Service_Config::no_static_svcs_ to 0. + + The motivation for this change was to minimize the ACE + footprint, i.e., only load them if the program requires it. + +Tue Aug 25 18:28:11 1998 Nanbor Wang + + * ace/OS.i (strdup): Changed ::strlen to ACE_OS::strlen so we can + get the actual length for UNICODE strings. Thanks to Dana + Hackman for reporting this. + + Also, the size of the allocated memory should be + (strlen(s)+1)*sizeof(wchar_t), not strlen(s)*sizeof(wchar_t)+1. + +Tue Aug 25 14:33:46 1998 Carlos O'Ryan + + * ace/XtReactor.cpp: + The lock type for the ACE_XtReactor was wrong. + +Tue Aug 25 13:36:10 1998 Alexander Babu Arulanthu + + * tests/Aio_Platform_Test.cpp (do_sysconf): Fixed the VxWorks + warnings. + +Tue Aug 25 13:04:00 1998 Irfan Pyarali + + * ace/Memory_Pool: Added virtual destructors. + +Tue Aug 25 10:38:52 1998 Carlos O'Ryan + + * bin/auto_compile: + Added orbsvcs/test/Property/run_test.pl. + The Simple test was moved to Simple/time. + +Tue Aug 25 10:45:50 1998 Alexander Babu Arulanthu + + * tests/Aio_Platform_Test.cpp: Fixed the SunCC errors about + missing function prototypes. Also put the various + routines under "#if defined " + statements. + +Tue Aug 25 07:42:40 1998 David L. Levine + + * ace/Memory_Pool.cpp: changed ACE_Auto_Basic_Array_Ptr + template instantiation to ACE_Auto_Basic_Array_Ptr. + + * examples/IPC_SAP/UPIPE_SAP/ex3.cpp (consumer): changed + ACE_Auto_Basic_Ptr to ACE_Auto_Basic_Array_Ptr . + + * tests/Reactor_Performance_Test.cpp, + examples/IPC_SAP/UPIPE_SAP/ex{2,3}.cpp: + removed explicit ACE_Auto_Basic_Array_Ptr instantiation + because it's now in libACE. + + * include/makeinclude/wrapper_macros.GNU: added BUILD + definition when building static libs only. This was necessary + to allow the TAO/orbsvcs/tests/Simulator/{EventSup,DOVEMIB} + makes to work properly on both Solaris and VxWorks. + It also means that BUILD is no longer necessary in most Makefiles. + + * tests/Message_Queue_Notification_Test.cpp (main): removed + trailing ".cpp" from log file name. + + * ace/config-sunx86-sunc++-4.x.h: removed because it wasn't being + maintained, because config-sunos5.{5,6}.h are supported on Solaris86. + + * include/makeinclude/wrapper_macros.GNU: fixed determination + of whether the g++ version supports exception handling. Assume + that it doesn't on VxWorks. Thanks to Margherita Vittone Wiersma + for reporting this. + + * include/makeinclude/platform_vxworks5.x_g++.GNU: use := instead + of += to set PATH, because += seems to insert a space. + +Tue Aug 25 05:23:11 1998 Nanbor Wang + + * tests/Message_Queue_Notifications_Test.dsp: Fixed something.... + + * tests/tests.dsw: Fixed a typo. + + * ace/ace_{dll,lib}.dsp: + * ace/Makefile: Added Select_Reactor_T and Select_Reactor_Base. + Rebuilt file dependencies. + + * ace/Select_Reactor[_Base,_T].{h,i,cpp}: Templatized + ACE_Select_Reactor and gangs. The original Select_Reactor files + are splited into three sets of files. Select_Reactor_Base + defines common components used by Select_Reactor and defines + Select_Reactor_Base class. Select_Reactor_T defines the + template classes. Select_Reactor instantiates necessary + template classes. Next step is to add template specialization + for ACE_Guard< ACE_Select_Reactor_Token_T >. + + * ace/Synch.{h,i}: Added a new class ACE_Noop_Token which is a + subclass of ACE_Null_Mutex. It supports a null renew method. + This class should be called ACE_Null_Token but the name is + already used. + +Tue Aug 25 01:38:40 1998 Douglas C. Schmidt + + * examples/Threads/task_three.cpp (main): Fixed this example so + that it works portably with signals. Thanks to Susan Liebeskind + for reporting this. + + * tests/Aio_Platform_Test.cpp: Removed the forward decls + so that don't conflict with the use of "static" later on. + Thanks to David Levine for reporting this. + +Mon Aug 24 22:23:33 1998 David L. Levine + + * examples/IPC_SAP/UPIPE_SAP/ex{2,3}.cpp: removed unnecessary + includes of fstream.h. + +Mon Aug 24 18:11:39 1998 Irfan Pyarali + + * ace/Memory_Pool.cpp (ACE_Local_Memory_Pool::release): This + memory pool uses "new" to create memory chunks for the Malloc + class. However, since it did not keep track of this memory, + these chunks were leaked. + + The solution was to keep tarck of the chunks allocated and + delete them in release(). + + * ace/Object_Manager.cpp (~ACE_Object_Manager): Moved TSS cleanup + *before* Service_Config::close(). We need this to happen since + DLL related TSS objects need to get cleaned up *before* the DLL + is unlinked. The only downside to this order of things is that + Log_Msg will also get cleaned up by TSS cleanup, and we need to + make sure that we do not access Log_Msg after TSS cleanup. + + For this to work, we need to make sure of two things: user code + is not called and ACE does not use Log_Msg after this after TSS + resources have been cleaned up. The only major code that is + called is Service_Config::close(). Since + Service_Config::fini_svcs() has already been called, + Service_Config::close() only unlinks the DLLs and does not call + into user code. + + * ace/Service_Repository.cpp (close): Don't access Log_Msg since + it has already been deleted by the time this code runs. + + * ace/Service_Config.cpp (close): Don't access Log_Msg since it + has already been deleted by the time this code runs. + +Mon Aug 24 18:13:58 1998 Douglas C. Schmidt + + * tests/Aio_Platform_Test.cpp: Fixed a few problems due + to the fact that we weren't carefully guarding against platforms + that don't support AIO macros. Thanks to Dana Hackman + for reporting this. + +Mon Aug 24 15:18:46 1998 David L. Levine + + * tests/run_tests.sh: run Message_Queue_Notifications_Test + instead of Message_Queue_Notifications_Test.cpp. + +Mon Aug 24 13:05:03 1998 Douglas C. Schmidt + + * ace/config-{chorus,WinCE,vxworks5.x}.h: Added + ACE_HAS_STRDUP_EMULATION. Thanks to Chuck Gehr for this + suggestion. + + * ace/OS.i (strdup): Removed complicated #ifdef and replaced it + with ACE_HAS_STRDUP_EMULATION. + +Mon Aug 24 10:41:07 1998 Alexander Babu Arulanthu + + * ace/OS.h: Provided null defitions for all the wait + status macros for ACE_WIN32 platform. + +Mon Aug 24 00:11:00 1998 Douglas C. Schmidt + + * examples/Reactor/Misc/pingpong.cpp (run_svc): Fixed a subtle + potential "order of destruction" bug with this test. Thanks to + Hans Rohnert for reporting this. + +Sun Aug 23 21:09:55 1998 Arturo Montes + + * ace/OS.i (thr_testcancel): with ACE_HAS_PTHREAD_DRAFT6, + use ::pthread_testintr () instead of pthread_testcancel (). + Thats what FSU pthreads uses. Hopefully, MVS does also. + +Sun Aug 23 16:28:10 1998 Douglas C. Schmidt + + * ace/Process.cpp (spawn): Removed the ACE_DEBUG messages on exec + failure, etc. If apps want to know what has failed, they need + to check the return from spawn() or wait(). ACE shouldn't be + generating debugging information gratuitiously... + +Sun Aug 23 15:42:48 1998 Alexander Babu Arulanthu + + * ace/Process.cpp: Put the warning on failure on exec + ("ACE_Process::spawn (); exec failed: exiting!!!!\n") under + condition (ACE_Service_Config::debug_). + +Sun Aug 23 11:12:46 1998 Carlos O'Ryan + + * tests/Makefile: + * tests/Message_Queue_Notifications_Test.cpp: + Fixed typos. + +Sat Aug 22 21:52:23 1998 Douglas C. Schmidt + + * examples/IPC_SAP/UPIPE_SAP/ex[23].cpp: Changed the + Auto_Basic_Ptr to the Auto_Basic_Array_Ptr to avoid compilation + problems. Thanks to David Levine for reporting this. + +Sat Aug 22 20:13:37 1998 Darrell Brunsch + + * ACE-INSTALL.html: Added instructions for adding Alpha + configurations to MSVC 5 project files. + +Sat Aug 22 13:24:00 1998 Douglas C. Schmidt + + * tests/Message_Queue_Notifications_Test.cpp: Surrounded the + ACE_Barrier with conditional compilations for ACE_HAS_THREADS. + Thanks to Ganesh Pai for reporting this. + + * tests/Message_Queue_Notifications_Test.cpp: Cleaned up the + formatting a bit. + + * tests: Renamed MsgQueue_Notifications_Test.{cpp,bpr,dsp} to + Message_Queue_Notifications_Test.{cpp,bpr,dsp} to be more + consistent with spelling. + + * ace/OS.h: Moved the ACE_timer_t down a bit in the file so that + ACE_UINT is defined. Thanks to Naga for reporting this. + + * ace/OS.h: Added a "no-op" typedef for ACE_Rusage for platforms + that don't support it. Thanks to David Levine for reporting + this. + +Sat Aug 22 07:59:28 1998 David L. Levine + + * tests/UPIPE_SAP_Test.cpp (main): removed unused local + variables thr_handle_acceptor and thr_handle_connector. + + * tests/UPIPE_SAP_Test.cpp (connector): removed leading newline + in printout at end of thread execution. + + * ACE-INSTALL.html: added egcs section. Thanks to + Ganesh Pai for a portion of it. + + * examples/IPC_SAP/UPIPE_SAP/ex1.cpp (peer1); removed spurious + "new" in ACE_NEW_RETURN involcation. + + * examples/IPC_SAP/UPIPE_SAP/ex{2,3}.cpp: untabified. + + * examples/IPC_SAP/UPIPE_SAP/Makefile: updated dependencies + so that the module will build, now that auto_builtin_ptr.h + has been removed. + +Sat Aug 22 00:27:06 1998 Irfan Pyarali + + * ace/Read_Buffer.i (alloc): Added new method to get to + Read_Buffer's allocator. This is necessary because we need to + free up the memory that it allocates for us. + + * ace/Service_Object.cpp (fini): New method calls fini() on + and sets the flag. This flag is + tested in the destructor so that the is not fini'ed + twice. + + * ace/Service_Repository.cpp (fini): New method to finalize (call + fini() and possibly delete) all the services. + + * ace/Service_Config.cpp (fini_svcs): New method calls + ACE_Service_Repository::instance ()->fini (). + + * ace/Object_Manager.cpp (~ACE_Object_Manager): Added a call + to close and possibly delete all service instances in the + Service Repository by calling ACE_Service_Config::fini_svcs. + This call is made *before* the library singletons (such as + the Reactor, Proactor, Thread_Manager, and Allocator) are + destroyed since the service instances maybe accessing these + singletons in the fini() and destructor methods. Note that + user singletons are destroyed before the services are + fini'ed or closed. + + * ace/Service_Config.cpp (fini_svcs): Disable log messages when + appropriate. + +Fri Aug 21 22:26:54 1998 Steve Huston + + * ace/OS.i (ACE_OS::gettimeofday): On Win32, instead of _ftime, + use GetSystemTimeAsFileTime. _ftime has a bug crossing from + daylight time to standard time in the US. + +Fri Aug 21 22:13:51 1998 David L. Levine + + * ace/OS.i (thr_cancel, thr_setcancelstate, thr_setcanceltype, + thr_testcancel): added #else + case, with ACE_NOTSUP (-1), to the various threads + types. It catches + ACE_HAS_PTHREADS && ACE_LACKS_PTHREAD_CANCEL. Thanks + to Naga for reporting this. + + * ace/OS.i (thr_setcanceltype): don't support if + ACE_LACKS_PTHREAD_CANCEL. Thanks to Naga for reporting this. + + * ace/config-chorus.h: added ACE_LACKS_PTHREAD_CANCEL. + Thanks to Naga, again. + +Fri Aug 21 20:23:44 1998 Douglas C. Schmidt + + * examples/IPC_SAP/UPIPE_SAP/ex[123].cpp: Updated these programs + to use the ACE_Auto_Basic_Ptr instead of the bizarre + auto_builtin_ptr.h file, which has been removed... Also + replaced the global thr_mgr with the ACE_Thread_Manager + Singleton and moved the include file until AFTER the + ACE includes to avoid problems with HP/UX 11's C++ compiler. + Thanks to John Mulhern for motivating these fixes. + + * ace/config-hpux-10.x.h: Added a check so that if threading is + disabled, then timespec_t does not get defined. This seems to + work around a bug with HP/UX 10.x. Thanks to Ganesh M. Pai + for reporting this. + +Fri Aug 21 19:54:26 1998 Carlos O'Ryan + + * include/makeinclude/wrapper_macros.GNU: + The ACE_HAS_EXCEPTIONS macro definition goes into CPPFLAGS now, + so make depend can use it too. + +Fri Aug 21 18:47:40 1998 Nanbor Wang + + * ace/Process.cpp (wait): Need to check if status is non-null + before accessing the exit status on NT. Thanks to Carlos for + pointing this out. + +Fri Aug 21 16:40:39 1998 Carlos O'Ryan + + * ace/config-irix6.x-sgic++.h: + * ace/OS.i: + Some platforms (notable IRIX 6.x) do not update the timer in + pthread_cond_timedwait(), this made the Semaphore test fail for + those platforms. + I modified the ACE_OS::sema_wait() function to obtain the + desired behavior. + +Fri Aug 21 15:50:05 1998 Douglas C. Schmidt + + * etc/ACE-porting.html: Updated some discussion on selecting + versions of STL that work with ACE and TAO. Thanks to Bob + Laferriere for reporting + this. + +Fri Aug 21 14:49:31 1998 Steve Huston + + * include/makeinclude/platform_hpux_gcc.GNU: Changed the default + from build without threads to build with threads. Thanks to Ganesh + Pai for this change. + +Fri Aug 21 09:25:21 1998 Douglas C. Schmidt + + * ace/OS.h: Moved several #ifdefs from Profile_Timer.h into OS.h + to clean up the code. + + * ace/Profile_Timer.h: Cleaned up the class definition to make the + OSE tool happy. Thanks to Doug Anderson for + reporting this. + + * etc: Moved the ACE-subsets.html file into $ACE_ROOT/etc. + + * ace/Synch_Options.h: Fixed a typo that was giving the OSE tool + fits! Thanks to Doug Anderson for reporting + this. + +Fri Aug 21 03:41:01 1998 Nanbor Wang + + * examples/OS/Process/process.cpp: + * examples/OS/Process/imore.cpp: Minor bug fixes. Print out of + child processes' exit status. + +Thu Aug 20 23:33:15 1998 Nanbor Wang + + * ace/Process.cpp (wait): Allow passing back the exit status of + the child process on NT. + +Thu Aug 20 19:52:21 1998 Nagarajan Surendran + + * ace/OS.i: + ACE_INLINE int + ACE_OS::thr_getspecific (ACE_thread_key_t key, void **data) + ... + #else /* this is Draft 7 or STD */ + *data = pthread_getspecific (key); + + changed the ::pthread_getspecific to pthread_getspecific as it + is a macro in Chorus. Thanks to David Levine for finding this. + +Thu Aug 20 17:05:28 1998 Douglas C. Schmidt + + * examples/Service_Configurator/Misc/Timer_Service.cpp: Added some + ACE_SVC_FACTORY_* macros for Timer_Service_1 so that it'll + compile and link properly. Thanks to David Levine for reporting + this. + +Thu Aug 20 14:39:53 1998 Nanbor Wang + + * ace/Process.{h,cpp} (ACE_Process::wait): Added a parameter of int* to + get back the exit status of a child process. + +Thu Aug 20 14:33:59 1998 Douglas C. Schmidt + + * etc/ACE-porting.html: Generalized the discussion to cover + porting TAO, as well as to explain what C++ features must/can be + supported to port ACE/TAO to a new platform. + +Thu Aug 20 05:12:24 1998 Douglas C. Schmidt + + * ACE version 4.5.31 released. + +Thu Aug 20 03:10:48 1998 Nanbor Wang + + * tests/UPIPE_SAP_Test.cpp (main): Reverted back to use + ACE_Thread. Although it's considered the "Right Thing" to spawn + threads using ACE_Thread_Manager, I'll keep this file to use + ACE_Thread to serve as an example that you can also use + ACE_Thread to do any tricks you like, and, a sanity check. + + * ace/OS.cpp (ACE_Thread_Adapter::invoke): Don't create the + ACE_Thread_Exit object if we are not spawning the thread using + ACE_Thread_Manager. Otherwise, when a non-thread manager + spawned thread exits, the TSS clean up routing gets into an + infinite loop calling ~ACE_Thread_Exit recursively and + eventually the stack gets overflowed and the thread then + "appears" to exit normally. But in fact, TSS cleanup does not + complete at all. + + * ace/Thread_Manager.i: + * ace/Thread_Manager.cpp (at_exit,thr_self): Moved all at_exit + methods into the .i file. All at_exit methods and thr_self + don't really need to hold Thread_Manager's lock. + + Notice that after the newly spawned thread enters the + ACE_Thread_Adapter::invoke routine, we can safely manipulate its + Thread_Deacriptor because it has been registered properly. This + change should further reduce the times a thread gets started. + +Wed Aug 19 20:34:25 1998 Nanbor Wang + + * ace/README: + * ace/OS.h: Added a new macro directive + "ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER". By defining + this macro, it implicitly forces ACE to use non-static object + manager and _NOT_ instantiating ACE_Object_Manager for you and + assumes you will take the responsibility of instantiating + ACE_Object_Manager at the proper place in your programs. This + is usually used when using ACE with MFC/Windows programs. + Because the main function is defined by MFC/Windows libraries, + ACE has no way to instantiate object manager in these programs. + For programs using MFC, a good place to instantiate Object + Manger will be to define ACE_Object_Manager a member of + CApplication derived classes so it gets instantiated/destructed + properly. + + * ace/config-win32.h: Revised the comment about + ACE_HAS_NONSTATIC_OBJECT_MANAGER + +Wed Aug 19 17:15:00 1998 Douglas C. Schmidt + + * ace/Service_Config.cpp: Moved the registration of the SIGHUP + signal from the constructor to the open() method since otherwise + it'll never get called in the typical usecase... Thanks to + Susan Liebeskind for + reporting this. + +Wed Aug 19 14:11:22 1998 David L. Levine + + * ACE version 4.5.30 released. + +Wed Aug 19 13:38:40 1998 David L. Levine + + * ace/OS.cpp (ACE_TSS_Cleanup::detach): only declare local + temp_key ifdef ACE_WIN32, because it's only used there. + +Wed Aug 19 10:13:36 1998 Nanbor Wang + + * ace/OS.cpp (ACE_Thread_Cleanup::remove): Don't bother to check + the status when the object manager is shutting down. + Otherwise, we are creating another fresh ACE_TSS object all over + again. + (ACE_Thread_Cleanup::detach): When cleaning up a thread key, we + must first remove it from the internal table before actually + freeing the key to avoid race condition (the OS may reassigned + the key to other the_keycreate requests.) + + * ace/Log_Msg.cpp (close): Removed the ACE_Thread::key_free + statement. This should be handled by TSS cleanup mechanism. + + * ace/Thread_Manager.cpp (at_exit): Moved the return statement + after #endif macros to avoid the no return compiler warning. + + * tests/UPIPE_SAP_Test.cpp (main): Changed to use + ACE_Thread_Manager to spawn and wait for threads so the TSS + object gets cleanup correctly. Using plain vanilla + ACE_Thread::spawn and/or ACE_OS::thr_create no longer works. + +Wed Aug 19 10:06:25 1998 David L. Levine + + * etc/ACE-guidelines.html: @added guidelines to check for + success of an attempted open of an existing file, and to not + release copyrighted, etc., material with ACE/TAO. + + * tests/SOCK_Connector_Test.cpp (find_another_host): check to see + if the other host is up, by attempting a blocking connection with + it. Only return another host if the connection succeeds. + Also, cache the other host so that multiple calls will not + have to repeat the connection attempt. + +Wed Aug 19 08:25:20 1998 Douglas C. Schmidt + + * examples/Service_Configurator/Misc/Timer_Service.cpp: Changed + Timer_Service_2 to Timer_Service_1 since it was a typo. Thanks + to Irfan for reporting this. + +Tue Aug 18 22:10:43 1998 David L. Levine + + * ace/config-fsu-pthread.h,config-hpux-10.x.h,config-mit-pthread.h, + config-mvs.h,config-osf1-{3.2,4.0}.h,config-sco-5.0.0-mit-pthread.h, + config-sunos5.{5,6}.h,config-tandem.h: + removed ACE_HAS_ONEARG_SIGWAIT. It's no longer used. + +Tue Aug 18 16:50:28 1998 Irfan Pyarali + + * ace/Thread.i (sigsetmask): Renamed parameter name since it + conflicts with STL class name. Thanks to Kent Watsen + for pointing this out. + + * examples/Reactor/Proactor/test_proactor.cpp (handle_write_stream): + Fixed incorrect unary minus operator application. + +Tue Aug 18 16:43:00 1998 David L. Levine + + * ACE version 4.5.29 released. + +Tue Aug 18 14:15:23 1998 Steve Huston + + * include/makeinclude/platform_aix4.2.GNU: Don't link programs + against libACE.a - just against libACEshr.a (the shared lib). + + * include/makeinclude/platform_hpux_aCC.GNU: + * include/makeinclude/platform_hpux_gcc.GNU: Switch support for threads + on and off using "make threads=0" or "make threads=1". The default + for aCC is to use threads, and for gcc is to not. I deduced the + defaults from the old lib settings. Sorry if the gcc one is wrong. + + * ace/config-hpux-10.x.h: Added ACE_HAS_SIGISMEMBER_BUG, plus... + * ace/config-hpux11.h: Set threads things based on the setting + of ACE_HAS_THREADS, which gets set in platform_macros.GNU (see above) + to build with threads support. + +Tue Aug 18 10:57:32 1998 Carlos O'Ryan + + * include/makeinclude/rules.nested.GNU: + Removed extra enter/leave messages at each directory, GNUmake + does it for you. + +Tue Aug 18 08:15:30 1998 David L. Levine + + * tests/Aio_Platform_Test.cpp (do_sysconf): on VxWorks, don't + call ACE_OS::sysconf () because it's not supported. + + * bin/make_release: added -P to cvs checkout command, to ignore + empty diretories. + +Mon Aug 17 22:56:17 1998 Nanbor Wang + + * tests/version_tests/version_tests.dsw: + * tests/version_tests/Dynamic_Priority_Test.dsp: Added a new + project (as shown) into the workspace. + +Mon Aug 17 17:17:52 1998 Steve Huston + + * ace/Makefile: Removed IO_Cntl_Msg from files to build. It's empty. + + * include/makeinclude/platform_hpux_aCC.GNU: Added '302' to warnings + to suppress; changed LIBS from '=' to '+=' to work better with TAO + builds. Thanks to John Mulhern for these fixes. + +Mon Aug 17 17:04:31 1998 Nanbor Wang + + * tests/Env_Value_Test.cpp (main): Changed to use ASYS_TCHAR* for + arguments in main. + +Mon Aug 17 15:51:30 1998 David L. Levine + + * ace/OS.i (thr_sigsetmask): with ACE_HAS_PTHREADS_DRAFT4 or + ACE_HAS_PTHREADS_DRAFT6, added :: in front of sigprocmask () + call. Without it, g++ on LynxOS was warning about use of + sigprocmask () before definition. + +Mon Aug 17 14:59:13 1998 Douglas C. Schmidt + + * etc: Added a new file, ACE-porting.html, which explains how to + port ACE to new OS platforms. Thanks to Gabriel Lima + for submitting this. + + * ace/FILE_Connector.h: Changed ACE_FILE_Connector so that it no + longer inherits from ACE_FILE. This relationship is unnecessary + and was not used. Thanks to Byron Harris for reporting this. + +Mon Aug 17 12:14:13 1998 Steve Huston + + Large number of small changes (all listed below) to begin aligning + the large number of Pthreads-related definitions around the 4 supported + drafts: 4, 6, 7, as well as the standard (also known as draft 10). + The notation for "DCE threads" is gone. DCE threads are primarily + draft 4, plus platform-specific modifications. Now all code must + declare the pthreads draft, and handle any platform/implementation + oddities as such. + As time goes on, I will remove more of the ACE_HAS_... and ACE_LACKS... + things that are actually changes with the pthreads drafts. + I tested these on Solaris 2.5.1 (CC), HP-UX 10.20 and 11.00, AIX 4.2.1, + and sanity-tested on NT/MSVC (though no changes affected the WTHREADS + parts). + + * ace/README: Clarified use of Pthreads macros. + + * ace/config-hpux-10.x.h: + * ace/config-lynxos.h: + * ace/config-osf1-3.2.h: + * ace/config-osf1-4.0.h: + Changed from DCE threads to ACE_HAS_PTHREADS_DRAFT4. + + * ace/config-fsu-pthread.h: + * ace/config-m88k.h: + * ace/config-mvs.h: Added ACE_HAS_PTHREADS_DRAFT6. + + * ace/config-aix-4.1.x.h: + * ace/config-aix-4.2.x.h: Added ACE_HAS_PTHREADS_DRAFT7. + + * ace/config-chorus.h: + * ace/config-dgux-4.x-ghs.h: + * ace/config-hpux11.h: + * ace/config-irix6.x-g++.h: + * ace/config-irix6.x-sgic++.h: + * ace/config-linux-lxpthreads.h: + * ace/config-linux-pthread.h: + * ace/config-mit-pthread.h: + * ace/config-osf1-4.0.h: + * ace/config-sco-5.0.0-mit-pthread.h: + * ace/config-sunos-5.5.h: (also remove ACE_HAS_STHREADS if + _POSIX_PTHREAD_SEMANTICS is defined by user). + * ace/config-sunos5.6.h: + + Changed to / added ACE_HAS_PTHREADS_STD. + + * ace/config-hpux-10.x-g++.h: Changed over to use the base file + config-hpux-10.x.h. + + * ace/OS.h: + * ace/OS.i: + * ace/OS.cpp: + Unified the compile ifdefs for pthreads around ACE_HAS_PTHREADS, + ACE_HAS_PTHREADS_DRAFT{4, 6, 7} and ACE_HAS_PTHREADS_STD. + Removed all use of ACE_HAS_DCETHREADS; put in platform-specific + settings where needed. + + * ace/Sched_Params.cpp: + * ace/Synch.cpp: Removed the use of ACE_HAS_DCETHREADS. + +Mon Aug 17 12:10:54 1998 Nanbor Wang + + * ace/ace_{dll,lib}.dsp: Removed Message_Queue_T.cpp from and included + Message_Queue.cpp into source files that get build. Hmm, I + thought I made this change long ago. + + * ace/ace_ce_dll.dsp: Changed the DLL output directories for some + configurations. + +Mon Aug 17 11:25:18 1998 Carlos O'Ryan + + * ace/Strategies_T.h: + In some platforms we need to include "ace/Thread_Manager.h" + because its definition is used in the inline methods of some + templates, and a few platform actually check the syntax of + template code, even if the template is not used. + +Mon Aug 17 10:06:01 1998 David L. Levine + + * netsvcs/lib/Server_Logging_Handler_T.cpp: replaced + #include with #include "ace/OS.h", so that + _REENTRANT gets defined with g++. + + * apps/Gateway/Peer/Peer.{h,cpp} (Peer_Connector::open): added + (unused) arguments to this function. They are only provided to + avoid a compiler warning about hiding the virtual function + ACE_Connector::open (ACE_Reactor *, + int). + + * tests/Dynamic_Priority_Test.cpp (run_performance_test): + added delete of time_offsets array. The test Purifies + cleanly now. + +Mon Aug 17 00:05:02 1998 Irfan Pyarali + + * examples/Reactor/ReactorEx/test_removals.cpp (main): Fixed + signed/unsigned mismatch. + + * examples/Reactor/ReactorEx/test_talker.cpp (handle_read_stream): + Fixed incorrect unary minus operator application. + +Sun Aug 16 20:57:12 1998 Nanbor Wang + + * ace/OS.i (dlerror): Fixed a typo. Thanks to Ossama Othman + for reporting this. + +Fri Aug 14 18:58:29 1998 Alexander Babu Arulanthu + + * tests/Aio_Platform_Test.cpp : Changed 's to + ACE_OS::sysconf's. + +Fri Aug 14 11:41:23 1998 Steve Huston + + * ace/OS.i (ACE_OS::dlclose): On HP-UX 10.x and 32-bit 11.00, do + not actually call shl_unload if the library's ref count is more than + 1. If shl_unload is called, it unloads the library, regardless of + the reference count. This has the affect of never unloading a + library that's been loaded more than once, until the OS unloads it + at process run-down. Better than invalidating references to it, + though. The wonder of wrappers at work for you... + +Fri Aug 14 10:01:05 1998 David L. Levine + + * ace/Basic_Types.h (ACE_UINT64_DBLCAST_ADAPTER): with + ACE_LACKS_LONGLONG_T, only use low 32 bits. We could devise + a conversion from ACE_U_LongLong to double that uses all + 64 bits; but, it's probably easier for users to upgrade + their hardware and/or compilers to ones that support 64 + bit ints :-) + +Thu Aug 13 19:29:33 1998 Douglas C. Schmidt + + * ace/Message_Queue_T.i: Changed the is_empty_i() method to check + if this->tail_ == 0 rather than this->cur_bytes_ <= 0 && + this->cur_count_ <= 0. Thanks to Dirk Broer + for suggesting this. + +Thu Aug 13 17:45:00 1998 Chris Gill + + * ace/Basic_Types.h: added ACE_UINT64_DBLCAST_ADAPTER macro + to patch unimplemented UINT64 to double casts + +Thu Aug 13 13:34:52 1998 David L. Levine + + * os-patches/linux-patches.html: the af_inet.c patch is only + needed through Linux kernel version 2.0.34. + + * tests/Conn_Test.cpp: disabled ACE_Hash_Addr template + specialization on non-egcs g++. + + * tests/Process_Strategy_Test.{h,cpp} (~Process_Strategy): + added an explicit destructor. g++ 2.7.2.3 got very + confused ("Internal compiler error") without it, apparently + when generating it implicitly. + + * tests/ MsgQueue_Notifications_Test.cpp (producer): removed + unused local "result". + +Wed Aug 12 22:45:50 1998 Nanbor Wang + + * tests/MsgQueue_Notifications_Test.cpp: Added an explicit + template instantiation. + +Wed Aug 12 21:32:05 1998 Carlos O'Ryan + + * ace/Message_Block.h: + * ace/Message_Block.i: + * ace/Message_Block.cpp: + Enabled the base() method, it replaces the internal buffer and + resets the Message_Block. There were other ways to do this (like + calling data_block->base()), but some users find it convenient. + I also modified the Data_Block::base() method to release any + memory held by the class before the method is called. Thanks to + Peter.Gorgia@libnet.com for pointing this out. + +Wed Aug 12 17:43:33 1998 Nanbor Wang + + * tests/MsgQueue_Notifications_Test.cpp: The watermark test which + uses cv's signaling to notify other threads is also merged into + this file. + + * tests/MsgQueue_Water_Mark_Test.{dsp,cpp}: Removed. + +Wed Aug 12 17:12:57 1998 Darrell Brunsch + + * APC.DSP: + * Abondoned.dsp: + * Console_Input.dsp: + * Directory_Changes.dsp: + * Exceptions.dsp: + * Multithreading.dsp: + * Network_Events.dsp: + * Prerun_State_Changes.dsp: + * Registration.dsp: + * Registry_Changes.dsp: + * Removals.dsp: + * Talker.dsp: + * Timeouts.dsp: + * Window_Messages.dsp: + * test_abandoned.cpp: + * test_apc.cpp: + * test_window_messages.cpp: + Added updated versions of project files (with correct include + directories). Also changed the

    's to take in argc and + argv. Thanks to Jeff Hellzen + for submitting these changes. + +Wed Aug 12 16:16:38 1998 Nanbor Wang + + * tests/MsgQueue_Notifications_Test.cpp: Since this test doesn't + use threads at all, I removed the #if ACE_HAS_THREADS macro. + +Wed Aug 12 14:57:51 1998 Jonathan Biggar + + * ace/config-sunos5.5.h: wrapped thread-related defines with + "#ifdef _REENTRANT". + + * include/makeinclude/platform_sunos5_sunc++.GNU,wrapper_macros.GNU, + ACE-INSTALL.html: added support for "threads" make option. + +Wed Aug 12 02:06:02 1998 Nanbor Wang + + * tests/test_config.h (ACE_Test_Output): It seemed like redirecting + the Log_Msg output back to stderr in close was a bit too early + and some messages popped out after some tests ran successfully. + Moved the redirecting code into the destructor. + +Tue Aug 11 22:47:49 1998 David L. Levine + + * ace/TP_Reactor.cpp (dispatch_io_set): added + ACE_UNUSED_ARG (ready_mask). + + * tests/test_config.h: added + ACE_Singleton template + instantiation. This shouldn't be done in a header, and + I wouldn't be surprised if it breaks somewhere. But, we + don't have any other need for a .cpp file to link into all tests. + +Tue Aug 11 17:30:32 1998 Steve Huston + + * tests/test_config.h: Fixed ACE_Test_Output to get torn down clean + in all cases by changing it from a static to an ACE_Singleton. + Re-enabled it for Win32, non-WinCE. + +Tue Aug 11 15:51:47 1998 Irfan Pyarali + + * ace/XtReactor.h (ACE_XtReactor): Changed the constructor so that + the XtAppContext can be passed later. This scheme allows for a + default constructor. Thanks to J-M Strauss + for suggesting this. + +Tue Aug 11 12:35:10 1998 Nanbor Wang + + * ace/OS.i (fopen): On WinCE, reset the handle to 0 if CreateFile + fails so we can detect errors when using the emulated FILE + pointer on CE. + + * tests/test_config.h (~ACE_Test_Output): Changed !defined + (ACE_HAS_WINCE) to !defined (ACE_WIN32). When using non-static + object manager, the singleton ACE_Log_Msg may no longer exist + here and the reseting here just causes access violations. Other + platforms which use non-static might suffer the same sympton. + +Tue Aug 11 12:29:03 1998 David L. Levine + + * os-patches/linux-patches.html: the gas patch on alphas + isn't necessary with binutils-2.9.1. + +Tue Aug 11 12:23:09 1998 Nanbor Wang + + * ace/ARGV.{h,cpp}: Made a series of changes to make the file CE + friendly. + + * ace/Message_Queue_T.cpp: Adjusted the indentation. + +Tue Aug 11 02:06:55 1998 Irfan Pyarali + + * ace/WFMO_Reactor.cpp (dispatch_handles): Because dispatch_index + is absolute, nCount should be set to + (max_handlep1 - dispatch_index) instead of (nCount - + dispatch_index). Thanks to Alberto Villarica + for pointing this out. + +Mon Aug 10 20:12:21 1998 Steve Huston + + * ace/Log_Msg.cpp: On HP-UX 10.x, display thread's readable number + rather than an int represenation of a pointer. + + * tests/test_config.h (ACE_Test_Output): When destroying + ACE_Test_Output, make sure to remove all traces of it from + ACE_Log_Msg instance. + + * tests/Dynamic_Priority_Test.cpp: Don't try to set process-wide + scheduling if it's not supported on the platform. + + * tests/Thread_Manager_Test.cpp: Don't do a kill on pthreads draft + 4 platforms. This is a NOP for now - it will make a difference when + I check in more threads-related changes later. + +Mon Aug 10 10:35:26 1998 Douglas C. Schmidt + + * Added the ACE-subsets.html file to the ACE directory so that + we can all modify it. + +Mon Aug 10 10:29:29 1998 Nanbor Wang + + * ace/OS.i (shm_open): There's no need to mess with the security + attribute here. + +Mon Aug 10 01:09:05 1998 Nanbor Wang + + * ace/OS.{h,i}: Added a new function + "default_win32_security_attributes" to return the defualt + security setting of kernel objects. By default, this function + is a no-op. You must define + ACE_DEFINES_DEFAULT_WIN32_SECURITY_ATTRIBUTES for this function + to return a SECURITY_ATTRIBUTES object that has no access + restriction. + + Modified all functions that use Win32 kernel objects to invoke + this new function to get the appropriate security attributes. + Thanks to Ivan Murphy for + suggesting this. + + +Sun Aug 09 23:26:39 1998 Douglas C. Schmidt + + * ACE version 4.5.28 released. + +Sun Aug 9 23:08:51 1998 Douglas C. Schmidt + + * Checked in a bunch of files/directories that I'd neglected + to check in before. + +Sun Aug 09 23:02:24 1998 Douglas C. Schmidt + + * ACE version 4.5.27 released. + +Sun Aug 9 15:04:41 1998 Darrell Brunsch + + * netsvcs/clients/Tokens/manual/manual.cpp: Changed all instances + of "#if (ACE_WIN32)" to "#if defined (ACE_WIN32)" + + * netsvcs/netsvcs.dsw: Added this workspace which contains all the + netsvcs projects. + + * netsvcs/clients/Tokens/collection/collection.dsp: + * netsvcs/clients/Tokens/collection/collection.dsw: + * netsvcs/clients/Tokens/deadlock/deadlock.dsp: + * netsvcs/clients/Tokens/deadlock/deadlock.dsw: + * netsvcs/clients/Tokens/invariant/invariant.dsp: + * netsvcs/clients/Tokens/invariant/invariant.dsw: + * netsvcs/clients/Tokens/manual/manual.dsp: + * netsvcs/clients/Tokens/manual/manual.dsw: + * netsvcs/clients/Tokens/mutex/mutex.dsp: + * netsvcs/clients/Tokens/mutex/mutex.dsw: + * netsvcs/clients/Tokens/rw_lock/rw_lock.dsp: + * netsvcs/clients/Tokens/rw_lock/rw_lock.dsw: + Added these MSVC projects and workspaces. Thanks to Jeff + Hellzen for submitting these. + + * netsvcs/clients/Logger/direct_logging.dsp: + * netsvcs/clients/Logger/indirect_logging.dsp: + * netsvcs/clients/Naming/Client/Client_Test.dsp: + * netsvcs/clients/Naming/Client/main.dsp: + * netsvcs/lib/netsvcs.dsp: + * netsvcs/servers/servers.dsp: + Mainly just updated all of these and made sure that they worked. + +Sun Aug 9 09:17:16 1998 Douglas C. Schmidt + + * ace/Strategies_T.cpp (connect_svc_handler): Changed the call to + this->CONNECT_STRATEGIES::connect_svc_handler() to avoid compile + problems with GCC on LynxOS. Thanks to Sergio for reporting + this. + +Sat Aug 8 09:37:27 1998 Carlos O'Ryan + + * ace/INET_Addr.cpp: + Reverted the operator== optimization, it turns out that the + definition of struct in_addr is not portable after all. Maybe + there is a set of macros to make it portable? + + * ace/ACE.h: + * ace/ACE.cpp: + Returning is unnecesary; and gives no more + guarantees that , plus it gives warnings in + IRIX/MIPSPro compilers. + + * ace/Synch.cpp: + Removed explicit instantiations of ACE_Guard, + the class is specialized so no instantiation is necessary. Same + thing for ACE_Write_Guard and ACE_Read_Guard. + +Fri Aug 7 23:18:53 1998 Carlos O'Ryan + + * ace/config-sunos5.5.h: + Updated the new ACE_CC_NAME macros (and friends) so they work + with egcs (and hopefully g++). + + * tests/MT_SOCK_Test.cpp: + Removed double comma in function call. + +Fri Aug 7 21:39:26 1998 Carlos O'Ryan + + * ace/INET_Addr.cpp: + Compare the fields of in_addr instead of calling memcmp. + + * ace/Message_Block.cpp: + * ace/Message_Block.h: + * ace/Message_Block.i: + The Message_Block can receive an allocator for the data block, + so instead of creating them on the heap they can be allocated + from a TSS allocator or other memory pool. By default we use + ACE_New_Allocator. + + * apps/gperf/Makefile: + The Id was wrong. + + * bin/auto_compile: + Added gperf to the default list of directories. + +Fri Aug 7 13:58:58 1998 Gonzalo Diethelm + + * bin/envinfo.cpp: + Added this program, which will print the version information for + ACE, the OS and C++ compiler. The idea is to use this when posting + to the ACE mailing list. + + * ace/ACE.h: + * ace/ACE.cpp: + Added static methods to retrieve compiler information (name, major + version, minro version, beta version). + + * ace/config-sunos5.5.h: + Defined the compiler information macros for this platform. + + * bin/Makefile: + Modified the Makefile to support multiple binaries in the + directory (according to tests/Makefile). + + * bin/clone.cpp: + Added RCS Id. + +Fri Aug 7 12:46:42 1998 Douglas C. Schmidt + + * ace/Activation_Queue.h: Updated the documentation to indicate + the need for absolute rather than relative time values. Thanks + to Johannes Gutleber for reporting + this. + +Fri Aug 07 02:06:54 1998 Nanbor Wang + + * tests/MsgQueue_Water_Mark_Test.{dsp,cpp}: Added a new test to + make sure the water mark stuff works. It still needs to be + clean up to compile with g++. + +Fri Aug 07 01:00:55 1998 Irfan Pyarali + + * ace/Strategies_T.i (operator==): Added a method to compare a + ACE_Hash_Recyclable and a ACE_Recyclable. Also inlined a shit + load of small methods. + + * ace/Strategies_T.cpp (connect_svc_handler): If is not + connected to the correct address or is busy, we will not use it. + Therefore we need to set it to zero. + + * ace/Synch: Added template specializations for + ACE_Guard, ACE_Write_Guard, and + ACE_Read_Guard. + +Thu Aug 06 14:59:22 1998 Douglas C. Schmidt + + * ace/Thread_Manager.cpp: Updated all uses of cancel_thr for the + various apply*() methods so that they pass along the + async_cancel flag. + + * ace/Thread_Manager.cpp: Added a new ARG to the ACE_EXECUTE_OP + macro. Believe it or not, this change actually reduced the + amount of special-case code because we can now treat kill_thr() + just like the other *_thr() methods. Irfan was amazed ;-). + + * ace/Thread_Manager: Added a new flag called "async_cancel" to + all the Thread Manager cancel*() methods. This flag is disabled + by default (hence, there are no changes to the ACE Thread + Manager semantics). If it is enabled, however, it will attempt + to perform an asychronous thread cancellation on the + corresponding thread id(s). + +Thu Aug 6 17:44:50 1998 Douglas C. Schmidt + + * tests/Priority_Task_Test.cpp: Enhanced this test so that it runs + correctly on platforms where you must be root to muck around + with thread priorities. Thanks to John Mulhern + <9107@mn3.lawson.lawson.com> for reporting this. + + * tests/MT_SOCK_Test.cpp: Reformatted the code to make it more + readable and also to remove a C-style cast. + + * ace/Message_Queue_T.h: Improved the documentation of the low + water mark and high water marks. Thanks to Umar for encouraging + this. + +Thu Aug 6 20:41:44 1998 James C Hu + + * ace/Filecache.cpp: Avoided a deadlock detected by Tom Dobridge + (thanks!). + +Thu Aug 06 14:59:22 1998 Irfan Pyarali + + * ace/Strategies_T.cpp (connect_svc_handler): If is not + connected to the correct address or is busy, we will not use it. + Therefore we need to set it to zero. + + * ace/Synch: Added template specializations for + ACE_Guard, ACE_Write_Guard, and + ACE_Read_Guard. + +Thu Aug 6 14:30:11 1998 Carlos O'Ryan + + * ace/config-irix6.x-sgic++-nothreads.h: + Use template specializations instead of pragmas if the compiler + is 7.2 or better. + + * ace/config-irix6.x-sgic++.h: + The is not necessary in IRIX 6.4 + +Thu Aug 06 14:11:15 1998 Nanbor Wang + + * ace/Message_Queue_T.cpp: Make sure to check if the cur_bytes_ is + <= to the low_water_mark before signaling threads trying to + enqueue a Message_Block. + + * ace/Message_Queue_T.cpp: Fixed a bunch of code to use the + ACE_NEW_RETURN macro to ensure that errno is set correctly. + + * ace/Message_Queue.h: Changed the DEFAULT_LWM to be the same as + the DEFAULT_HWM since that's the "Right Way"[TM] to handle + this... Thanks to Umar Syyid for helping to + track this down. + + * ace/Message_Queue_T.i (is_empty_i): Removed the low water mark + logic entirely because this isn't the right place to put it. + Also reverted back to using && rather than || since we need + to handle "0-sized" messages. + +Thu Aug 6 09:41:22 1998 Nagarajan Surendran + + * ace/ARGV.{h,cpp} : Added a new + ACE_ARGV(ASYS_TCHAR *first_argv,ASYS_TCHAR *second_argv,int) + which creates a new ARGV which is the concatenation of the 2 argvs. + + Also added a new private method argv_to_string + which converts an argv to a string. + +Thu Aug 6 08:56:02 1998 Douglas C. Schmidt + + * ace/Module.h: Pointed out that ACE_Module should't be subclassed + -- ACE_Task should be subclasses. Thanks to Barney Dalton + for pointing this out. + +Wed Aug 05 23:57:16 1998 Irfan Pyarali + + * ace/Reactor.cpp (end_event_loop): Changed the code so that *all* + threads are woken up. Thanks to Olivier Lau + for pointing this bug out. + + * examples/Reactor/ReactorEx/test_multithreading.cpp (main): + Changed Reactor->close() to Reactor::end_event_loop(). + +Wed Aug 5 23:12:54 1998 Douglas C. Schmidt + + * include/makeinclude/wrapper_macros.GNU: Changed + PURE_CACHE_DIR = $(PURE_CACHE_BASE_DIR)-$(LOGNAME)-$(CXX) + + to + + PURE_CACHE_DIR = $(PURE_CACHE_BASE_DIR)-$(LOGNAME)-$(notdir $(CXX) ) + + Thanks to John Mulhern <9107@mn3.lawson.lawson.com> for this. + +Wed Aug 05 14:53:18 1998 Irfan Pyarali + + * ace/Strategies_T.cpp (connect_svc_handler): When using this + method, the user was required to pass us a zero for the + svc_handler. We would either find them a non-busy one, or will + create a new one. + + Unfortunately, the svc_handler lookup was taking too long. + Therefore, the following change was made to the + connect_svc_handler algorithm: the user is now allowed to pass + in the svc_handler that they used last as a "hint". The + algorithm first checks to see if the "hint" svc_handler is + connected to the correct address and is recyclable. If it is, + then it recycles the "hint" svc_handler and gives it back to the + user. This should improve the lookups in most cases. + + * ace/Svc_Handler.cpp (recycling_act): Added accessor to get the + . + + * tests/Conn_Test.cpp (idle): Added method so that we can tell + when a Svc_Handler is being set to idle. Also changed the test + so that it can use the new "hint" mechanism in the cached + connector. + +Wed Aug 5 16:12:34 1998 Nanbor Wang + + * ace/Log_Msg.cpp: Replaced usage of ACE_OS::thr_* with + ACE_Thread::*. Thanks to Arturo Montes + for sending the patches. + +Wed Aug 5 11:07:12 1998 Douglas C. Schmidt + + * ace/Service_Manager: Cleaned up the documentation and formatting + a bit. + + * ace/Message_Queue_T.i: Changed the computation of is_empty_i() + so that it's + + return this->cur_bytes_ <= this->low_water_mark_ || this->cur_count_ <= 0; + + i.e., we use an || rather than a &&. Thanks to Umar for + reporting this. + + * ace/Message_Queue_T.i: Changed the computation of is_empty_i() so + that it doesn't consider the queue to be empty unless the + cur_bytes_ <= the low_water_mark_ (which defaults to 0 so that + no existing code is affected). This change makes it possible + for producer/consumer threading applications to avoid the "silly + window syndrome." Thanks to Umar Syyid for + suggesting this. + +Wed Aug 05 00:10:27 1998 Irfan Pyarali + + * ace/OS.i (strnstr (both Unicode and Multibyte versions)): + * ace/SString.cpp (strstr): + Fixed "off by one error" in searching algorithm. Thanks to + Byron Harris for pointing this out. + + * tests/SString_Test.cpp (main): Added new test cases. + +Tue Aug 4 21:56:16 1998 Nanbor Wang + + * tests/TSS_Test.cpp: + * examples/Thread/thread_specific.cpp: Replaced ACE_OS::thr_* with + ACE_Thread::*. Thanks to Arturo Montes + for sending the patches. + +Tue Aug 4 18:44:54 1998 Gonzalo Diethelm + + * ACE-INSTALL.html: + Updated the file to recommend the creation of config.h as a + regular file that includes the appropriate platform config file, + instead of setting it to be a symlink. This is more flexible and + allows the user to redefine some of the ACE configuration + parameters. + + * ace/config-linux-common.h: + As an example of the above, now the user can #define + ACE_HAS_IP_MULTICAST in his config.h file to 0, and he won't be + using multicast under linux. This is clearer than having to edit + the config-linux-common.h file, which will now respect the user's + settings (if any).. + +Tue Aug 4 17:39:12 1998 Steve Huston + + * ace/ACE_Library.{mak mdp}: Added TP_Reactor.cpp to the project. + + * tests/Aio_Platform_Test.cpp: Don't try to sysconf() for the AIO + values if there's no chance of AIO on the system (_POSIX_ASYNC_IO + not defined at compile time). + + * examples/OS/Process/Process.dsp: Link against ace.lib for Release, + aced.lib for Debug (these were reversed). + +Tue Aug 4 12:09:51 1998 Douglas C. Schmidt + + * ace/OS.h: Clarified the fact that the ACE_DEFAULT_MUITCAST_ADDR + must be within the range for host group addresses: 224.0.0.0 to + 239.255.255.255. Thanks to Christa Schwanninger + for reporting this. + +Tue Aug 04 11:01:18 1998 Nanbor Wang + + * bin/GenExportH.BAT: Moved from TAO/TAO_IDL/. + + * ace/Token.{h,cpp} (signal_all_threads): Added this method which + changes the return values of all acquire method to 2. The last + thread waiting for the token will reset the signal state + (therefore, there's NO cancel_signal_all_threads method.) + (shared_acquire): Return 2 if the token is signaled after + acquiring the token successfully. + (release): If the token is signaled and there's no other thread + waiting to acquire the token, reset the signal state. + + * ace/TP_Reactor.{h,i,cpp} (wakeup_all_threads): Added + implementation for this virtual function. It "signals" the + token threads are waiting on and wake them up by notifying the + reactor. + (handle_events): Check to see if the reactor token is signaled + after acquiring it. If the the token is signaled, it will not + proceed to handle events (by calling select) but instead return + successfully. This allow the thread the chance to check if it's + time to shut down the event loop. + +Mon Aug 3 17:53:48 1998 Gonzalo Diethelm + + * performance-tests/Makefile: + * performance-tests/Misc/basic_func.cpp: + * performance-tests/Misc/basic_perf.cpp: + * performance-tests/Misc/childbirth_time.cpp: + * performance-tests/Misc/context_switch_time.cpp: + * performance-tests/Misc/preempt.cpp: + * performance-tests/Misc/test_mutex.cpp: + * performance-tests/Misc/test_naming.cpp: + * performance-tests/Misc/test_singleton.cpp: + * performance-tests/Synch-Benchmarks/Benchmark_Base.cpp: + * performance-tests/Synch-Benchmarks/Benchmark_Performance.cpp: + * performance-tests/Synch-Benchmarks/Options.cpp: + * performance-tests/Synch-Benchmarks/Performance_Test.cpp: + * performance-tests/Synch-Benchmarks/condb_test.cpp: + * performance-tests/Synch-Benchmarks/conds_test.cpp: + * performance-tests/Synch-Benchmarks/context_test.cpp: + * performance-tests/Synch-Benchmarks/memory_test.cpp: + * performance-tests/Synch-Benchmarks/mutex_test.cpp: + * performance-tests/Synch-Benchmarks/pipe_proc_test.cpp: + * performance-tests/Synch-Benchmarks/pipe_thr_test.cpp: + * performance-tests/Synch-Benchmarks/recursive_lock_test.cpp: + * performance-tests/Synch-Benchmarks/rwrd_test.cpp: + * performance-tests/Synch-Benchmarks/rwwr_test.cpp: + * performance-tests/Synch-Benchmarks/sema_test.cpp: + * performance-tests/Synch-Benchmarks/synch_driver.cpp: + * performance-tests/Synch-Benchmarks/sysvsema_test.cpp: + * performance-tests/Synch-Benchmarks/token_test.cpp: + * performance-tests/TTCP/ACE-C++/wrapper-new-ttcp.cpp: + * performance-tests/TTCP/C/new-ttcp.cpp: + * performance-tests/TTCP/ORBeline/ttcp_i.cpp: + * performance-tests/TTCP/Orbix/ttcpC.cpp: + * performance-tests/TTCP/Orbix/ttcpS.cpp: + * performance-tests/TTCP/Orbix/ttcp_i.cpp: + * performance-tests/UDP/udp_test.cpp: + Added ACE_RCSID to these files. + +Sun Aug 2 19:43:04 1998 Darrell Brunsch + + * tests/Reactor_Performance_Test.cpp: Made a change suggested by + Irfan to allow this test to work in Windows 95. + +Sat Aug 1 20:35:32 1998 Douglas C. Schmidt + + * ace: + include/makeinclude: + Added new config/platform files for SCO. These files enable the + following: + + - TAO_IDL work newly in SCO OpenServer. + - Fixed a compilation problem with EventService in TAO. + - Fixed a problem with ACE and TAO shared libraries. + - Some test with TSS_Emulation and recent changes in Thread_Manager. + + Thanks to Arturo for these changes. + +Sat Aug 01 13:34:12 1998 Irfan Pyarali + + * ace/OS.i (flock_wrlock): LockFileEx() and UnLockFileEx() are not + implemented on Win32. Therefore, the flock methods were changed + to use the non-Ex versions on Win95. Thanks to XuYifeng + for pointing this out. + + While making the changes, I found that there were a couple bugs + in the code: (a) the parameter was being ignored and + (b) the adjustment for == 0 was incorrect. I think I have + fixed both of these also in ACE_OS::adjust_flock_params(). + + One last thing: I changed flock_unlock() to use UnLockFile() + instead of UnLockFileEx(). UnLockFileEx() is also not supported + on Win95. Hopefully, it is ok to lock with LockFileEx() and + unlock with UnLockFile() instead of UnLockFileEx(). + + * ace/OS.cpp (pread): Changed bytes_written to bytes_read. + +Fri Jul 31 23:47:50 1998 Carlos O'Ryan + + * bin/auto_compile: + We now run several on-button tests in TAO, though it is still + hard to detect any errors. + +Fri Jul 31 21:33:22 1998 Douglas C. Schmidt + + * ace/Select_Reactor.cpp (open): Changed the code to ignore the + return value from ACE::set_handle_limit(). Thanks to Zheng Han + for reporting this and to Arturo for + suggesting the fix. + + * ace/ARGV.cpp: Enhanced the implemenation of string_to_array() so + that it should always work correctly even if there are a large + number of bytes in the original buf string. + + * ace/ARGV.cpp: Renamed string_to_array() to string_to_argv(), + which is more intuitive. + + * ace/OS.h: Added a new macro called ACE_DEFAULT_ARGV_BUFSIZ, + which is used as the default size of all the "argv" contents in + ACE_ARGV. This defaults to 4 kbytes. + +Fri Jul 31 19:55:10 1998 Gonzalo Diethelm + + * netsvcs/clients/Logger/direct_logging.cpp: + * netsvcs/clients/Logger/indirect_logging.cpp: + * netsvcs/clients/Naming/Client/Client_Test.cpp: + * netsvcs/clients/Naming/Client/main.cpp: + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp: + * netsvcs/clients/Naming/Dump_Restore/createfile.cpp: + * netsvcs/clients/Naming/Dump_Restore/main.cpp: + * netsvcs/clients/Tokens/collection/collection.cpp: + * netsvcs/clients/Tokens/collection/rw_locks.cpp: + * netsvcs/clients/Tokens/deadlock/deadlock_detection_test.cpp: + * netsvcs/clients/Tokens/invariant/invariant.cpp: + * netsvcs/clients/Tokens/manual/manual.cpp: + * netsvcs/clients/Tokens/mutex/test_mutex.cpp: + * netsvcs/clients/Tokens/rw_lock/rw_locks.cpp: + * netsvcs/lib/Base_Optimizer.cpp: + * netsvcs/lib/Client_Logging_Handler.cpp: + * netsvcs/lib/Log_Message_Receiver.cpp: + * netsvcs/lib/Logging_Strategy.cpp: + * netsvcs/lib/Name_Handler.cpp: + * netsvcs/lib/Server_Logging_Handler.cpp: + * netsvcs/lib/Server_Logging_Handler_T.cpp: + * netsvcs/lib/TS_Clerk_Handler.cpp: + * netsvcs/lib/TS_Server_Handler.cpp: + * netsvcs/lib/Token_Handler.cpp: + * netsvcs/servers/main.cpp: + Added ACE_RCSID to these files. + +Fri Jul 31 19:15:58 1998 Irfan Pyarali + + * ace/OS.cpp (pwrite and pread): There were many bugs in these two + methods. + + - It was assumed that it is ok to call WriteFile/ReadFile with + an OVERLAPPED structure. This is not true on Windows95. + Therefore, code had to be added to make sure that on + Windows95, WriteFile and ReadFile were called without an + OVERLAPPED struct. + + - We were assuming that if we used the OVERLAPPED struct, the + file pointer would not move. It turns out that the OVERLAPPED + struct has nothing with whether the file pointer moves or not. + It has to do with whether the file was opened with + FILE_FLAG_OVERLAPPED or not. Since it is not possible to + figure whether the file handle we got was opened with this + flag or not, we have to program defensively and reset the file + pointer in any case. + + - Also the !ACE_HAS_P_READ_WRITE implementation was not + restoring the file pointer to its original position. This was + also fixed. + +Fri Jul 31 18:33:39 1998 Gonzalo Diethelm + + * apps/Gateway/Gateway/Concrete_Connection_Handlers.cpp: + * apps/Gateway/Gateway/Config_Files.cpp: + * apps/Gateway/Gateway/Connection_Handler.cpp: + * apps/Gateway/Gateway/Connection_Handler_Acceptor.cpp: + * apps/Gateway/Gateway/Connection_Handler_Connector.cpp: + * apps/Gateway/Gateway/Event_Channel.cpp: + * apps/Gateway/Gateway/Event_Forwarding_Discriminator.cpp: + * apps/Gateway/Gateway/File_Parser.cpp: + * apps/Gateway/Gateway/Gateway.cpp: + * apps/Gateway/Gateway/Options.cpp: + * apps/Gateway/Gateway/gatewayd.cpp: + * apps/Gateway/Peer/Options.cpp: + * apps/Gateway/Peer/Peer.cpp: + * apps/Gateway/Peer/peerd.cpp: + * apps/Orbix-Examples/Event_Comm/Consumer/Input_Handler.cpp: + * apps/Orbix-Examples/Event_Comm/Consumer/Notification_Receiver_Handler.cpp: + * apps/Orbix-Examples/Event_Comm/Consumer/consumer.cpp: + * apps/Orbix-Examples/Event_Comm/Supplier/Input_Handler.cpp: + * apps/Orbix-Examples/Event_Comm/Supplier/Notifier_Handler.cpp: + * apps/Orbix-Examples/Event_Comm/Supplier/supplier.cpp: + * apps/Orbix-Examples/Event_Comm/libsrc/Event_CommC.cpp: + * apps/Orbix-Examples/Event_Comm/libsrc/Event_CommS.cpp: + * apps/Orbix-Examples/Event_Comm/libsrc/Notification_Receiver_i.cpp: + * apps/Orbix-Examples/Event_Comm/libsrc/Notifier_i.cpp: + * apps/Orbix-Examples/Logger/Logger.cpp: + * apps/Orbix-Examples/Logger/client.cpp: + * apps/Orbix-Examples/Logger/loggerS.cpp: + * apps/Orbix-Examples/Logger/logger_i.cpp: + * apps/Orbix-Examples/Logger/server.cpp: + Added ACE_RCSID to these files. + +Fri Jul 31 17:50:01 1998 Gonzalo Diethelm + + * ace/TP_Reactor.cpp: + Added ACE_RCSID to this file, and all the .cpp files in examples, + listed below. + + * examples/ASX/CCM_App/CCM_App.cpp: + * examples/ASX/CCM_App/SC_Client.cpp: + * examples/ASX/CCM_App/SC_Server.cpp: + * examples/ASX/Event_Server/Event_Server/Consumer_Router.cpp: + * examples/ASX/Event_Server/Event_Server/Event_Analyzer.cpp: + * examples/ASX/Event_Server/Event_Server/Options.cpp: + * examples/ASX/Event_Server/Event_Server/Peer_Router.cpp: + * examples/ASX/Event_Server/Event_Server/Supplier_Router.cpp: + * examples/ASX/Event_Server/Event_Server/event_server.cpp: + * examples/ASX/Event_Server/Transceiver/transceiver.cpp: + * examples/ASX/Message_Queue/bounded_buffer.cpp: + * examples/ASX/Message_Queue/buffer_stream.cpp: + * examples/ASX/Message_Queue/priority_buffer.cpp: + * examples/ASX/UPIPE_Event_Server/Consumer_Router.cpp: + * examples/ASX/UPIPE_Event_Server/Event_Analyzer.cpp: + * examples/ASX/UPIPE_Event_Server/Options.cpp: + * examples/ASX/UPIPE_Event_Server/Peer_Router.cpp: + * examples/ASX/UPIPE_Event_Server/Supplier_Router.cpp: + * examples/ASX/UPIPE_Event_Server/event_server.cpp: + * examples/CORBA/Test_i.cpp: + * examples/CORBA/client.cpp: + * examples/CORBA/server.cpp: + * examples/Connection/blocking/SPIPE-acceptor.cpp: + * examples/Connection/blocking/SPIPE-connector.cpp: + * examples/Connection/blocking/test_spipe_acceptor.cpp: + * examples/Connection/blocking/test_spipe_connector.cpp: + * examples/Connection/misc/Connection_Handler.cpp: + * examples/Connection/misc/test_upipe.cpp: + * examples/Connection/non_blocking/CPP-acceptor.cpp: + * examples/Connection/non_blocking/CPP-connector.cpp: + * examples/Connection/non_blocking/test_lsock_acceptor.cpp: + * examples/Connection/non_blocking/test_lsock_connector.cpp: + * examples/Connection/non_blocking/test_sock_acceptor.cpp: + * examples/Connection/non_blocking/test_sock_connector.cpp: + * examples/Connection/non_blocking/test_spipe_acceptor.cpp: + * examples/Connection/non_blocking/test_spipe_connector.cpp: + * examples/Connection/non_blocking/test_tli_acceptor.cpp: + * examples/Connection/non_blocking/test_tli_connector.cpp: + * examples/IOStream/client/iostream_client.cpp: + * examples/IOStream/server/iostream_server.cpp: + * examples/IPC_SAP/DEV_SAP/reader/reader.cpp: + * examples/IPC_SAP/DEV_SAP/writer/writer.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-Msg-client.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-Msg-server.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-client.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-server.cpp: + * examples/IPC_SAP/FIFO_SAP/FIFO-test.cpp: + * examples/IPC_SAP/FILE_SAP/client.cpp: + * examples/IPC_SAP/SOCK_SAP/C-inclient.cpp: + * examples/IPC_SAP/SOCK_SAP/C-inserver.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-poll.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-unclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-unserver.cpp: + * examples/IPC_SAP/SOCK_SAP/FD-unclient.cpp: + * examples/IPC_SAP/SOCK_SAP/FD-unserver.cpp: + * examples/IPC_SAP/SPIPE_SAP/NPClient.cpp: + * examples/IPC_SAP/SPIPE_SAP/NPServer.cpp: + * examples/IPC_SAP/SPIPE_SAP/client.cpp: + * examples/IPC_SAP/SPIPE_SAP/consumer_msg.cpp: + * examples/IPC_SAP/SPIPE_SAP/consumer_read.cpp: + * examples/IPC_SAP/SPIPE_SAP/producer_msg.cpp: + * examples/IPC_SAP/SPIPE_SAP/producer_read.cpp: + * examples/IPC_SAP/SPIPE_SAP/server.cpp: + * examples/IPC_SAP/TLI_SAP/CPP-client.cpp: + * examples/IPC_SAP/TLI_SAP/CPP-server.cpp: + * examples/IPC_SAP/TLI_SAP/db-client.cpp: + * examples/IPC_SAP/TLI_SAP/db-server.cpp: + * examples/IPC_SAP/TLI_SAP/ftp-client.cpp: + * examples/IPC_SAP/TLI_SAP/ftp-server.cpp: + * examples/IPC_SAP/UPIPE_SAP/ex1.cpp: + * examples/IPC_SAP/UPIPE_SAP/ex2.cpp: + * examples/IPC_SAP/UPIPE_SAP/ex3.cpp: + * examples/Log_Msg/test_log_msg.cpp: + * examples/Logger/Acceptor-server/server_loggerd.cpp: + * examples/Logger/client/logging_app.cpp: + * examples/Logger/simple-server/Logging_Acceptor.cpp: + * examples/Logger/simple-server/Logging_Handler.cpp: + * examples/Logger/simple-server/server_loggerd.cpp: + * examples/Map_Manager/test_hash_map_manager.cpp: + * examples/Mem_Map/IO-tests/IO_Test.cpp: + * examples/Mem_Map/IO-tests/test_io.cpp: + * examples/Mem_Map/file-reverse/file-reverse.cpp: + * examples/Misc/test_XtReactor1.cpp: + * examples/Misc/test_XtReactor2.cpp: + * examples/Misc/test_dump.cpp: + * examples/Misc/test_get_opt.cpp: + * examples/Misc/test_profile_timer.cpp: + * examples/Misc/test_read_buffer.cpp: + * examples/Misc/test_set.cpp: + * examples/Misc/test_sstring.cpp: + * examples/Misc/test_trace.cpp: + * examples/Naming/test_multiple_contexts.cpp: + * examples/Naming/test_non_existent.cpp: + * examples/Naming/test_open.cpp: + * examples/Naming/test_writers.cpp: + * examples/OS/Process/imore.cpp: + * examples/OS/Process/process.cpp: + * examples/Reactor/Dgram/CODgram.cpp: + * examples/Reactor/Dgram/Dgram.cpp: + * examples/Reactor/FIFO/client.cpp: + * examples/Reactor/FIFO/server.cpp: + * examples/Reactor/Misc/notification.cpp: + * examples/Reactor/Misc/pingpong.cpp: + * examples/Reactor/Misc/test_demuxing.cpp: + * examples/Reactor/Misc/test_event_handler_t.cpp: + * examples/Reactor/Misc/test_reactors.cpp: + * examples/Reactor/Misc/test_signals_1.cpp: + * examples/Reactor/Misc/test_signals_2.cpp: + * examples/Reactor/Misc/test_time_value.cpp: + * examples/Reactor/Misc/test_timer_queue.cpp: + * examples/Reactor/Multicast/Log_Wrapper.cpp: + * examples/Reactor/Multicast/client.cpp: + * examples/Reactor/Multicast/server.cpp: + * examples/Reactor/Ntalker/ntalker.cpp: + * examples/Reactor/Proactor/test_multiple_loops.cpp: + * examples/Reactor/Proactor/test_proactor.cpp: + * examples/Reactor/Proactor/test_proactor_with_aio.cpp: + * examples/Reactor/Proactor/test_timeout.cpp: + * examples/Reactor/ReactorEx/test_abandoned.cpp: + * examples/Reactor/ReactorEx/test_apc.cpp: + * examples/Reactor/ReactorEx/test_console_input.cpp: + * examples/Reactor/ReactorEx/test_directory_changes.cpp: + * examples/Reactor/ReactorEx/test_exceptions.cpp: + * examples/Reactor/ReactorEx/test_multithreading.cpp: + * examples/Reactor/ReactorEx/test_network_events.cpp: + * examples/Reactor/ReactorEx/test_prerun_state_changes.cpp: + * examples/Reactor/ReactorEx/test_registration.cpp: + * examples/Reactor/ReactorEx/test_registry_changes.cpp: + * examples/Reactor/ReactorEx/test_removals.cpp: + * examples/Reactor/ReactorEx/test_talker.cpp: + * examples/Reactor/ReactorEx/test_timeouts.cpp: + * examples/Reactor/ReactorEx/test_window_messages.cpp: + * examples/Registry/test_registry_iterator.cpp: + * examples/Registry/test_registry_update.cpp: + * examples/Service_Configurator/IPC-tests/client/broadcast_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_dgram_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_fifo_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_pipe_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_spipe_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/local_stream_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_dgram_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_service_directory_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_stream_client_test.cpp: + * examples/Service_Configurator/IPC-tests/client/remote_thr_stream_client_test.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_L_FIFO.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_L_SPIPE.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Dgram.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp: + * examples/Service_Configurator/IPC-tests/server/Handle_Timeout.cpp: + * examples/Service_Configurator/IPC-tests/server/server_test.cpp: + * examples/Service_Configurator/Misc/Timer_Service.cpp: + * examples/Service_Configurator/Misc/main.cpp: + * examples/Shared_Malloc/Malloc.cpp: + * examples/Shared_Malloc/Options.cpp: + * examples/Shared_Malloc/test_malloc.cpp: + * examples/Shared_Malloc/test_multiple_mallocs.cpp: + * examples/Shared_Malloc/test_persistence.cpp: + * examples/Shared_Memory/test_MM.cpp: + * examples/Shared_Memory/test_SV.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Client.cpp: + * examples/System_V_IPC/SV_Message_Queues/MQ_Server.cpp: + * examples/System_V_IPC/SV_Message_Queues/TMQ_Client.cpp: + * examples/System_V_IPC/SV_Message_Queues/TMQ_Server.cpp: + * examples/System_V_IPC/SV_Semaphores/Semaphores_1.cpp: + * examples/System_V_IPC/SV_Semaphores/Semaphores_2.cpp: + * examples/System_V_IPC/SV_Shared_Memory/SV_Shared_Memory_Test.cpp: + * examples/Threads/auto_event.cpp: + * examples/Threads/barrier1.cpp: + * examples/Threads/barrier2.cpp: + * examples/Threads/cancel.cpp: + * examples/Threads/future1.cpp: + * examples/Threads/future2.cpp: + * examples/Threads/manual_event.cpp: + * examples/Threads/process_manager.cpp: + * examples/Threads/process_mutex.cpp: + * examples/Threads/process_semaphore.cpp: + * examples/Threads/reader_writer.cpp: + * examples/Threads/recursive_mutex.cpp: + * examples/Threads/task_five.cpp: + * examples/Threads/task_four.cpp: + * examples/Threads/task_one.cpp: + * examples/Threads/task_three.cpp: + * examples/Threads/task_two.cpp: + * examples/Threads/thread_manager.cpp: + * examples/Threads/thread_pool.cpp: + * examples/Threads/thread_specific.cpp: + * examples/Threads/token.cpp: + * examples/Threads/tss1.cpp: + * examples/Threads/tss2.cpp: + * examples/Threads/wfmo.cpp: + * examples/Timer_Queue/Async_Timer_Queue_Test.cpp: + * examples/Timer_Queue/Driver.cpp: + * examples/Timer_Queue/Reactor_Timer_Queue_Test.cpp: + * examples/Timer_Queue/Thread_Timer_Queue_Test.cpp: + * examples/Timer_Queue/main_async.cpp: + * examples/Timer_Queue/main_reactor.cpp: + * examples/Timer_Queue/main_thread.cpp: + +Fri Jul 31 12:07:16 1998 Irfan Pyarali + + * ace/XtReactor.cpp (XtWaitForMultipleEvents): The first select() + is made with the correct width. In XtAppProcessEvent(), the + descriptor set may change, so the underlying handle_max may also + have changed. The second select() is made with an incorrect + value for the width. The solution is to reinitialize width + before calling select() again. Thanks to J-M Strauss + for suggesting this change. + +Fri Jul 31 11:18:24 1998 Steve Huston + + * ACE-INSTALL.html: Removed the direction to set global include/library + paths in MSVC 4.2. + +Fri Jul 31 08:23:14 1998 Douglas C. Schmidt + + * examples/Misc/test_XtReactor[12].cpp: Updated these files so + they will work correctly with the "new" Reactor structure. Boy, + it's been a long time since anyone actually tried to use this + stuff... ;-) Thanks to J-M Strauss for + reporting this. + +Thu Jul 30 21:25:31 1998 Nanbor Wang + + * ace/Svc_Conf_y.cpp: This file didn't get patched with our + routine patch. Applied $ACE_ROOT/Svc_Conf_y.cpp.diff manually. + This change eliminates some warnings from g++. + +Thu Jul 30 19:03:12 1998 Douglas C. Schmidt + + * examples/Timer_Queue/Thread_Timer_Queue_Test.h: Changed the type + to class Thread_Timer_Queue_Test_Driver from + Timer_Queue_Test_Driver to work around a bug with MSVC++. Thanks to + Gonzo for pointing this out. + + * examples/Connection/blocking/SPIPE-{connector,acceptor}.cpp: + Added #include "ace/Proactor.h". Thanks to Gonzo for reporting + this. + +Thu Jul 30 17:54:14 1998 Nanbor Wang + + * tests/test_config.h: Added /**/ between #include and + to avoid MSVC warnings. + + * tests/WinCE/ce_tests.dsw: Renamed project + Message_Queue_Notifications_Test to MsgQueue_Notifications_Test. + + * tests/WinCE/Reactor_Performance_Test.dsp: This project file was + somehow missing. + + * tests/TSS_Test.cpp: + * tests/Reader_Writer_Test.cpp: + * tests/Message_Queue_Test.cpp: Added numerous ASYS_TEXT macros to + make sure we use the right strings on CE. + +Thu Jul 30 14:56:59 1998 Gonzalo A. Diethelm + + * ace/ACE.h: + * ace/ACE.cpp: + * ace/Event_Handler.h: + * ace/Event_Handler.cpp: + Moved the following static functions: + + register_stdin_handler + remove_stdin_handler + read_adapter + + from class ACE to class ACE_Event_Handler. That breaks a + dependency from ACE to higher-level classes. + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp: + * netsvcs/clients/Naming/Client/Client_Test.cpp: + * examples/Timer_Queue/Reactor_Timer_Queue_Test.cpp: + * examples/Timer_Queue/Async_Timer_Queue_Test.dsp: + * examples/Timer_Queue/Reactor_Timer_Queue_Test.dsp: + * examples/Timer_Queue/Thread_Timer_Queue_Test.dsp: + * examples/Reactor/Ntalker/ntalker.cpp: + * examples/Reactor/Misc/test_demuxing.cpp: + * examples/Reactor/Misc/notification.cpp: + * examples/Connection/blocking/SPIPE-connector.cpp: + * examples/ASX/UPIPE_Event_Server/event_server.cpp: + * examples/ASX/Event_Server/Transceiver/transceiver.cpp: + * examples/ASX/Event_Server/Event_Server/event_server.cpp: + * apps/Gateway/Peer/Peer.cpp: + * apps/Gateway/Gateway/Gateway.cpp: + All these were modified by the above change. + + * ace/OS.h: + * ace/OS.i: + Added a strnew function that works as strdup but uses new instead + of malloc to allocate memory. + +Thu Jul 30 16:54:20 1998 Douglas C. Schmidt + + * ACE version 4.5.26 released. + +Thu Jul 30 13:01:12 1998 Douglas C. Schmidt + + * ace/Task.h (ACE_Task_Base): Changed the spelling of + ACE_Task_Exit to ACE_Thread_Exit, which is correct. + Thanks to Daniel Winder for + reporting this. + +Thu Jul 30 08:43:41 1998 Steve Huston + + * tests/tests.(mdp mak): Made include and library paths relative. + +Thu Jul 30 02:22:49 1998 Nanbor Wang + + * ace/Synch_T.cpp (ts_init): Casted away constness of key_. + Changed to cast away constness of the pointer to once_. + +Thu Jul 30 01:12:30 1998 Douglas C. Schmidt + + * ace/TP_Reactor.i (notify_handle): Added an ASYS_TEXT where it + was missing. Thanks to Dieter Quehl for reporting this. + + * ace/Synch_T.cpp: It wasn't possible to call ts_object() to set + an initial zero pointer value. The solution is to give + ts_object() the same ability to initialize the key as ts_get(). + I also factored out some common code into a new method called + ts_init(). Thanks to Bob McWhirter for + reporting this. + +Wed Jul 29 23:58:04 1998 Douglas C. Schmidt + + * examples/Reactor/Ntalker: Added a README file and made some + stylistic changes to the ntalker.cpp example. + +Wed Jul 29 18:38:17 1998 Douglas C. Schmidt + + * ACE version 4.5.25 released. + +Wed Jul 29 17:46:21 1998 Douglas C. Schmidt + + * ace/Task_T.h: Updated documentation to explain that + ACE_Time_Values are ABSOLUTE rather than relative. Thanks to + James Johnson for reporting this. + +Wed Jul 29 16:05:16 1998 Carlos O'Ryan + + * bin/Process_Unix.pm: + Use SIGTERM instead of SIGHUP to kill a process, it is the Right + Thing and SIGHUP will not work in some cases because it is usual + to catch this signal. + +Wed Jul 29 14:04:49 1998 Irfan Pyarali + + * ace/Asynch_Acceptor.cpp (open): Added + as an extra parameter to + open(). is the number of + asynchronous accepts that are started at the end of . If + is -1, then + is set to and hence + number of asynchronous accepts are started. + + (get_handle): New method to get the underlying handle. + + (set_handle): New method to set the underlying listen handle. It + is the user's responsibility to make sure that the old listen + handle has been appropriately closed and the all outstanding + asynchronous operations have either completed or have been + canceled on the old listen handle. + +Wed Jul 29 12:49:09 1998 Nanbor Wang + + * ace/Makefile (FILES): Added TP_Reactor to the build list. + Updated dependency. + + * ace/TP_Reactor.{h,i} (handle_events,notify_handler): Added two + dummy methods to avoid warnings from SunCC. Thanks to Carlos + for noticing this. + +Wed Jul 29 09:41:23 1998 David L. Levine + + * ace/config-linux-common.h: added #define + ACE_DEFAULT_SELECT_REACTOR_SIZE 256 so that the + ACE_Select_Reactor works with this fix: + + if (size > (size_t) ACE::max_handles ()) + return ACE::set_handle_limit (size); + + On Linux (2.0.34), only root can set RLIMIT_NOFILE above 256. + +Wed Jul 29 04:19:05 1998 Nanbor Wang + + * Integrate TP_Reactor into ACE. Major framwork designed by + Irfan. Here's his changelog: + + * ace/TP_Reactor.h (ACE_TP_Reactor): One of the short comings of + the Select_Reactor in ACE was that it did not support a thread + pool based event dispatching model, similar to the one in + WFMO_Reactor. In Select_Reactor, only thread can be blocked + in handle_events() at any given time. + + A new Reactor has been added to ACE that removes this + short-coming. TP_Reactor is a specialization of Select + Reactor to support thread-pool based event dispatching. This + Reactor takes advantage of the fact that events reported by + select() are persistent if not acted upon immediately. It + works by remembering the event handler that just got + activated, releasing the internal lock (so that some other + thread can start waiting in the event loop) and then + dispatching the event handler outside the context of the + Reactor lock. + + This Reactor is best suited for situations when the callbacks + to event handlers can take arbitrarily long and/or a number of + threads are available to run the event loops. + + Note that callback code in Event Handlers + (e.g. Event_Handler::handle_input) does not have to be + modified or made thread-safe for this Reactor. This is + because an activated Event Handler is suspended in the Reactor + before the upcall is made and resumed after the upcall + completes. Therefore, one Event Handler cannot be called by + multiple threads simultaneously. + + * ace/Reactor.cpp (ACE_Reactor): + ACE_USE_TP_REACTOR_FOR_REACTOR_IMPL can be used to make the + TP_Reactor the default Reactor implementation that will be + used by ACE_Reactor. + + I still need to add the reliable shutdown method and a + TP_Reactor_Test. + + * ace/Select_Reactor.{h,i,cpp} (renew): Moved decision of renew + supression from ACE_Select_Reactor_Notify::handle_input to this + method, which is a more appropriate place. + + * ace/Token.h (ACE_Token): Added more comprehensive comments about + the recent changes of reader/writer semantic. + +Tue Jul 28 12:36:18 1998 Irfan Pyarali + + * ace/Service_Config.cpp (~ACE_Service_Config): Removed the call + to ACE_Service_Config::close () from the destructor. This will + be called by the Object Manager upon destruction. + +Tue Jul 28 11:34:15 1998 Nanbor Wang + + * ace/OS.{h,i} (strpbrk): Added a const wchar_t version of this + function. Thanks to Ivan Murphy + for providing the fix. + +Tue Jul 28 09:52:08 1998 David L. Levine + + * ace/Thread_Manager.cpp (exit): only declare local close_handle + if ACE_USE_ONE_SHOT_AT_THREAD_EXIT. (ACE_Thread_Descriptor): + reordered initializers to match declaration order. + + * ace/Dynamic.cpp,Thread_Manager.cpp: moved + ACE_TSS_Singleton instantiation + from Thread_Manager.cpp to Dynamic.cpp. + +Mon Jul 27 16:31:27 1998 Arturo Montes + + * ace/Thread_Manager.{h,i,cpp}: + * ace/Log_Msg.cpp: The Thread_Manager::at_exit method now provides a + list of at_exit functions to be invoked to at thread termination + code. If you want to maintain previous compatibility use + ACE_USE_ONE_SHOT_AT_THREAD_EXIT. The new code maintaing + compatibility with the old code, ACE_Task::svc_run has not been + altered. + + We resolve a problem with ACE_TSS_cleanup, some platform + using Thread_Manager could be experimenting memory corruption because + of ACE_TSS_cleanup was being invoked before Thread_Manager exit + code. Now, if ACE_TSS_cleanup is called before of Thread_Manager + exit code, ACE_TSS_cleanup delegate ACE_Log_Msg delete instance + to Thread_Descriptor. + + Really, at_exit code is implemented in ACE_Thread_Descriptor, I + strongly recommend use at_exit code from Thread_Descriptor, + however in ACE_Thread_Manager we provide at_exit hook. + + Use of at_exit(void* object,ACE_CLEANUP_FUNC cleanup_hook,void* + param) is deprecated. We maitain it for compatibility and it + will be forever, however if you want implement new at_exit hook, + look into Thread_Manager.h and specialize ACE_At_Thread_Exit + class for your needs. + + If you want to allocate an ACE_At_Thread_Exit hook in stack, you + can do it. The at_exit code use at_exit overloading to take care + of this. Equally dynamic creation of at_exit hook is supported + too. + +Mon Jul 27 14:25:15 1998 Chris Gill + + * tests/Dynamic_Priority_Test.cpp: Changed C-Style casts to + ACE_static_casts, documented argument structure members + +Mon Jul 27 12:23:55 1998 Douglas C. Schmidt + + * ace/Select_Reactor.cpp (open): Changed a erroneous comparison + to + + if (size > (size_t) ACE::max_handles ()) + return ACE::set_handle_limit (size); + + Thanks to Avi Nash for reporting this. + +Sat Jul 25 20:26:21 1998 Steve Huston + + * ace/SPIPE_Acceptor.(h cpp): Modified Win32 part to start the + ConnectNamedPipe at open() time, in overlapped mode. Now also + processes the timeout in accept(), if specified. + +Sat Jul 25 16:18:30 1998 Carlos O'Ryan + + * ace/Malloc_T.i (addr): + Sun/CC does not like a reinterpret cast here, but only when T is + a char[20]. Use a couple of static casts and added a comment. + +Sat Jul 25 11:34:25 1998 Douglas C. Schmidt + + * ace/Typed_SV_Message_Queue.i (send): Fixed this call to use a + const cast AND a reinterpret cast. Thanks to David Levine for + reporting this. + +Fri Jul 24 23:14:09 1998 Douglas C. Schmidt + + * examples/Threads/thread_specific.cpp (cleanup): Added an + ACE_reinterpret_cast(). Thanks to John Mulhern + <9107@mn3.lawson.lawson.com> for this. + + * ace/Typed_SV_Message_Queue.i: Added some necessary + ACE_reinterpret_cast()s. Thanks to John Mulhern + <9107@mn3.lawson.lawson.com> for this. + + * ace/Malloc_T.i (addr): Changed (T *) cast to + ACE_reinterpret_cast(). Thanks to John Mulhern + <9107@mn3.lawson.lawson.com> for this. + + * ace/SOCK_Dgram_Bcast.cpp: Added an ACE_reinterpret_cast() macro + to make the HP/UX 11 C++ compiler happy. Thanks to John Mulhern + <9107@mn3.lawson.lawson.com> for this. + + * ace/config-hpux11.h: Added ACE_HAS_BROKEN_XTI_MACROS and + ACE_HAS_SIGISMEMBER_BUG. + + * ace/OS.i (sigismember): Sigismember works correctly in most + respects but the Sigset_Ops_Test tests the sigismember function + with an out-of-range signal number expecting it to fail with a + minus one result. On HPUX 11.0 it doesn't fail; it correctly + reports that the signal is not in the sigset. This happens + because HP, bless their hearts, thought that it should only + return out of range when the signal value was greater than the + capacity of the sigset; if ACE_NSIG is forced to 257 then the + test works as expected. But the real maximum signal is 45. + Added a fix for this courtesy of John Mulhern + <9107@mn3.lawson.lawson.com>. + + * ace/OS.h: Added a workaround for broken XTI header files on + HP/UX. Thanks to John Mulhern <9107@mn3.lawson.lawson.com> for + reporting this. + + * tests/Dynamic_Priority_Test.cpp: Reformatted this just a bit. + +Fri Jul 24 21:42:39 1998 David L. Levine + + * ace/OS.{h,cpp},Message_Block.{h,cpp}: renamed ACE_Time_Value::max + to ACE_Time_Value::max_time, because VxWorks #defines max. + + * tests/Message_Queue_Test.cpp: rearranged declarations so + that the test will build on non-threaded platforms. + + * tests/Dynamic_Priority_Test.cpp: changed ACE_MT_SYNCH to + ACE_SYNCH, so that we have a chance of building on non-threaded + platforms. + +Fri Jul 24 15:15:28 1998 Douglas C. Schmidt + + * Updated the manual pages to reflect recent changes. + + * ace/Svc_Conf.h: Change from yyerror (char *) to yyerror (const + char *). + +Fri Jul 24 14:36:30 1998 Chris Gill + + * ace/OS.{cpp, h} (ACE_Time_Value): Added ACE_Time_Value::max, + for the value at the other end of the time spectrum that can + be represented as a normalized ACE_Time_Value (LONG_MAX seconds, + ACE_ONE_SEC_IN_USECS - 1 microseconds). + + * ace/Message_Block.{cpp, h} (ACE_Message_Block): Changed default + parameters so message deadlines default to ACE_Time_Value::max + instead of ACE_Time_Value::zero - this ensures the assigned + static priority order is preserved in a dynamic message queue + if deadlines are not set. + + * ace/Message_Queue_T.{cpp, h} (ACE_Dynamic_Message_Queue): Changed + enqueue_tail and enqueue_head to call overloaded enqueue_prio + instead of static message queue base class methods (fixes bug + EC_Multiple_Test uncovered where a tail-enqueued zero length + message is still seen in the queue by the base class, but the + derived dynamic message queue class thinks the queue is empty) + + * DOC-way.html: added one on chess and sleep + +Fri Jul 24 12:35:12 1998 Nanbor Wang + + * ace/Token.{h,cpp}: Fixed warnings from gcc and SunCC. + +Fri Jul 24 09:05:24 1998 David L. Levine + + * ace/OS.cpp (thr_create): with ACE_HAS_DCE_DRAFT4_THREADS and + ACE_LACKS_SETDETACH (LynxOS and HP/UX 10.x), call + ::pthread_detach () on the newly spawned thread. Only do + it if the THR_DETACHED flag is enabled. + + * ace/Thread_Manager.cpp (join_thr,wait,wait_grp,wait_task): + with ACE_HAS_DCE_DRAFT4_THREADS and ACE_LACKS_SETDETACH + (LynxOS and HP/UX 10.x), call ::pthread_detach () on joined + threads. Only do it if the THR_DETACHED flag is not enabled. + + Thanks to Dave Mayerhoefer for diagnosing the + lack of ::pthread_detach () calls in ACE. + +Fri Jul 24 00:39:47 1998 Nanbor Wang + + * ace/ace_dll.dsp (Message_Queue_T.cpp): This file contains + template definitions and should not be included while building + ACE library. + + * ace/config-win32.h (ACE_HAS_NONSTATIC_OBJECT_MANAGER): Use + non-static object manager by default on Win32 (except CE.) This + at least fixed the problem of WSACleanup getting called too late. + + To disable this, define ACE_HAS_NONSTATIC_OBJECT_MANAGER to 0. + +Thu Jul 23 22:17:41 1998 Arturo Montes + + * ace/OS.cpp,Task.cpp,Thread_Manager.cpp: unify the Thread + Adapter use between general ACE threads and threads spawned + with a Thread_Manager. + + With this patch we add a new flag: ACE_USE_THREAD_MANAGER_ADAPTER. + If you set this flag in your config file, ACE will use the + ace_thread_manager_adapter in Thread_Manager, matching the current + behaviour. If you omit this flag, ACE will use ace_thread_adapter. + This change save a lot of source code and will let in the future + incorporate ACE_Thread at_exit. + +Thu Jul 23 15:30:41 1998 Nanbor Wang + + * ace/Token.{h,i,cpp}: On platforms that support timed acquire + semaphores, changed to use semaphores for signaling mechanism + for better performance. + (shared_acquire,renew): Give priority to acquire_write over + acquire_read. + +Thu Jul 23 14:05:20 1998 David L. Levine + + * performance-tests/Misc/context_switch_test.cpp: + helped yield test on VxWorks by timing each yield. + Added half-second delay between outer interations to give + LynxOS (w/ ACE_LACKS_SETDETACH) a chance to cleanup exited threads. + + * ace/config-sunos5.5.h: added support for _POSIX_PTHREAD_SEMANTICS. + If it is #defined, then #define ACE_HAS_PTHREADS_1003_DOT_1C + instead of ACE_HAS_STHREADS. Thanks to Doug Anderson + for investigating this and providing the + update. + + * ace/High_Res_Timer.cpp (elapsed_time (ACE_hrtime_t &nanoseconds)): + simplified the calculation. Thanks to Tom Dobridge + for the fix. + +Wed Jul 22 19:20:43 1998 Irfan Pyarali + + * ace/Proactor.h (ACE_Proactor): Since is a + valid constructor parameter for all platforms, + POSIX_COMPLETION_STRATEGY should be defined for all platforms. + + * ace/Proactor.cpp (ACE_Proactor): Only use the + completion_strategy when ACE_HAS_AIO_CALLS is defined. + + * ace/Asynch_IO.cpp (ACE_Asynch_Result): Only delete + this->aiocb_ptr_ when ACE_HAS_AIO_CALLS is defined. + +Wed Jul 22 17:58:27 1998 Alexander Babu Arulanthu + + * ace/OS.h: Updated the comments. + +Wed Jul 22 17:55:46 1998 Nanbor Wang + + * performance-tests/Synch-Benchmarks/token_test.cpp: A new test. + +Wed Jul 22 17:50:58 1998 Alexander Babu Arulanthu + + * ace/OS.h: Defiend ACE_SIG_AIO to be SIGRTMIN. This is the only + signal used for all the s. + +Wed Jul 22 17:46:45 1998 Alexander Babu Arulanthu + + * ace/Asynch_IO.h,Asynch_IO.cpp Proactor.h Proactor.cpp : + + First round of changes for sigtimedwait () based approach + of completion querying. + + Added one more parameter to the Proactor contructor to + decide the completion strategy for the POSIX implementation, + either control blocks or the RT signals. The default is RT + signals. + + Fixed Transmit file. Proactor's handle_events () is done + with in the ACE_Asynch_Transmit_Handler so that control does not + return to the user's application before the whole file is + transmitted. Otherwise the user's application might start writing + to the same socket and this might change the order of the file + that is being transmitted. + +Wed Jul 22 15:51:48 1998 Nanbor Wang + + * performance-tests/Synch-Benchmarks/Benchmark_Base.h + (Benchmark_Method_Base): Passing the test item into pre_run_test + so the thread can be setup correctly. Duh! + + * performance-tests/Synch-Benchmarks/Performance_Test.{h,cpp} + (pre_run_test): Added code so that it iterates thru test items + in svc.conf properly. Duh**2! + +Wed Jul 22 15:48:25 1998 David L. Levine + + * ACE version 4.5.24 released. + +Wed Jul 22 11:45:44 1998 Alexander Babu Arulanthu + + * tests/Aio_Platform_Test.cpp: Added calls test for + platforms with ACE_HAS_AIO_CALLS defined. + +Wed Jul 22 11:32:33 1998 David L. Levine + + * tests/Dynamic_Priority_Test.cpp: VxWorks only, fixed a few + minor things so that it builds now. + + * ace/config-linux-common.h: added ACE_HAS_GPERF. + +Tue Jul 21 23:09:31 1998 Nanbor Wang + + * performance-tests/Synch-Benchmarks/{Synch_Tests,synch_driver}.dsp: + Updated proejct source files and renamed debug version dll. + + * performance-tests/Synch-Benchmarks/Performance_Test.cpp: Added + ACE_Svc_Export directive. + +Tue Jul 21 20:17:31 1998 Steve Huston + + * ace/ACE_Library.{mdp mak}: Removed ..\STL from include directories. + +Tue Jul 21 12:34:11 1998 Alexander Babu Arulanthu + + * ace/config-lynxos.h: Defined ACE_HAS_AIO_CALLS. + +Mon Jul 20 19:35:21 1998 Steve Huston + + * ace/config-aix-4.1.x.h: Added ACE_LACKS_RLIMIT. Thanks to Zheng + Han for finding this problem. + + * ace/ACE_Library.{mdp mak}: Set up ".." as an include file directory + so that $ACE_ROOT doesn't have to be added to MSVC's global options. + Allows working on more than one ACE version. + + * netsvcs/lib/netsvcs4.{mdp mak}: Made paths to ACE components relative + and made Debug build netsvcsd.dll - this will work with Nanbor's new + DLL search method (from 19-July). + + * netsvcs/servers/servers4.{mdp mak}: + * netsvcs/clients/Logger/Logger.{mdp mak}: + Made paths to ACE components relative. + +Mon Jul 20 11:12:44 1998 David L. Levine + + * ace/Object_Manager.{h,cpp}: added ACE_TSS_BASE_LOCK, to + support ACE_HAS_TSS_EMULATION with ACE_USE_NATIVE_KEYS. + + * include/makeinclude/rules.lib.GNU: (INSTALL): use += to + define INSTALL instead of =, so that applications' INSTALL + won't be overwritten. + + * ace/config-osf1-4.0.h,config-linux-common.h: added + ACE_HAS_GPERF. + +Mon Jul 20 11:06:44 1998 Arturo Montes + + * ace/OS.*: added support for TSS emulation with Pthreads. + It uses one native TSS key for its internal implementation. + All other TSS keys, both within the ACE library and in + applications, use keys managed by ACE. + To enable, add these #defines to your config.h: + #define ACE_HAS_TSS_EMULATION + #define ACE_USE_NATIVE_KEYS + +Sun Jul 19 22:21:17 1998 David L. Levine + + * ace/OS.h: added ACE_THROW_SPEC definition. + +Sun Jul 19 00:48:42 1998 Nanbor Wang + + * ace/ACE.cpp (ldfind): Re-enabled searching for *d.dll before + *.dll for debug version of ACE. There was a premature return + error in the logic. This is now the default behavior and has to + be disabled explicitly by defining ACE_DISABLE_DEBUG_DLL_CHECK. + +Sat Jul 18 22:51:59 1998 Douglas C. Schmidt + + * ACE version 4.5.23 released. + +Sat Jul 18 22:48:52 1998 Douglas C. Schmidt + + * There was a typo in the Makefile where CE-status should have + been CE-status.txt. Thanks to Nanbor for fixing this. + +Sat Jul 18 22:14:07 1998 Douglas C. Schmidt + + * ACE version 4.5.22 released. + +Sat Jul 18 21:11:52 1998 Steve Huston + + * include/makeinclude/platform_hpux_aCC.GNU: Added +W829 to suppress + "string literal to char * is deprecated". I was going to fix these + in ACE, but TAO just wore me down... ;-) + +Sat Jul 18 Michael Kircher + + * tests/Upgradable_RW_Test.cpp: Changed the time measurement + completely. Before we meassured end-to-end. Now we meassure + only the time spend in actual doing things. At the end + all the time spend is summarized. + + * tests/Upgradable_RW_Test.h: Added this file, which contains + definitions for the test. + +Sat Jul 18 19:47:45 1998 Darrell Brunsch + + * ace/ACE.cpp: Looks like we are having some trouble with the + loading of *d.dll before *.dll on NT, so it is now disabled + by default (until the problem is solved). To enable use: + ACE_USE_DEBUG_DLL_CHECK. + +Sat Jul 18 13:51:49 1998 Douglas C. Schmidt + + * apps/Makefile: Always compile the gperf directory by default + now. + + * ace/config-sunos5.5.h: Added a new flag called ACE_HAS_GPERF, + which should be enabled if the OS/compiler platform can compile + GPERF. This will determine if we can use perfect hashing in + TAO! + +Sat Jul 18 10:52:49 1998 Gonzalo Diethelm + + * ace/Svc_Conf_l.cpp: + * ace/Svc_Conf_y.cpp: + Move the Id and added ACE_RCSID. + The #line commands changed their line numbers. + + * ace/Svc_Conf.l: + * ace/Svc_Conf.y: + Added an ACE_RCSID, and erased a few white spaces at the end. + + * etc/Svc_Conf_l.cpp.diff: + * etc/Svc_Conf_y.cpp.diff: + Got rid of a couple of RCS Ids that were being "replaced" by the + patches. These were probably a maintenance problem and didn't + really add much. I also cleaned up the patches: there were a + couple of useless replacements (lines with white spaces at the + ends, etc.), and some of the line offsets were wrong (but patch + could still catch them with its fuzz factors). Now the patches + apply cleanly. + +Sat Jul 18 9:00:00 1998 Douglas C. Schmidt + + * DCS: Born 36 years ago, at this moment. Yow, I've now become + a "perfect square" ;-) + +Fri Jul 17 18:30:10 1998 Irfan Pyarali + + * ace/Strategies_T.cpp (connect_svc_handler): The activation of + the newly created handler is moved outside the scope of the lock + of the cached connector. This is necessary to avoid subtle + deadlock conditions with this lock and the Reactor lock. Thanks + to Micheal for finding this race condition. + +Fri Jul 17 13:53:54 1998 Douglas C. Schmidt + + * examples/Threads/barrier2.cpp (ACE_MT_SYNCH>): Cleaned up the + coding style in this example. + + * ace/TTY_IO.cpp (control): Added entries for 300 baud. Thanks to + the ever vigilant Arturo Montes for + reporting this. + +Fri Jul 17 14:51:55 1998 Nanbor Wang + + * Makefile (CONTROLLED_FILES): Added CE-status to distribution. + Thanks to David for reminding this. + +Fri Jul 17 12:48:26 1998 Steve Huston + + * tests/Semaphore_Test.cpp: Removed unused variable, and disabled the + test for platforms with POSIX semaphores since POSIX semaphores + don't do timeouts (which this test stresses). + +Fri Jul 17 07:32:26 1998 David L. Levine + + * Makefile (CONTROLLED_FILES): added ACE-inheritance.{pdf,ps}.gz + to distribution. Thanks to Gabriel Lima for + reporting their absence. Also, added COPYING to distribution. + + * ace/IO_SAP.cpp (enable): removed unreachable break statement. + + * ace/OS.i (sema_wait w/time): on VxWorks and pSoS, subtract + the current time from the time argument to get the relative + time that the systems calls expect. Thanks to Steve Huston + for recommending this change. Also, removed ACE_ADAPT_RETVAL + wrap so that errno isn't disturbed. On VxWorks, convert + S_objLib_OBJ_TIMEOUT errno to ETIME. + + * tests/run_tests.{sh,vxworks}: added Semaphore_Test. + + * ACE-INSTALL.html: updated multicast on Linux discussion. + +Thu Jul 16 18:28:31 1998 Steve Huston + + * ace/OS.i (ACE_OS::sema_wait(ACE_sema_t*, ACE_Time_Value&)): + Changed WinCE version to use time as absolute and update it if + the semaphore is acquired. Changed Win32 version to update the + time if semaphore is acquired. + + * tests/Semaphore_Test.cpp: Added sanity checks for time that the + semaphore waits take and for the updated time values on acquiring + a semaphore. + +Thu Jul 16 15:41:08 1998 Douglas C. Schmidt + + * examples/IPC_SAP/UPIPE_SAP/ex2.cpp, + examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.i, + examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.i, + examples/Service_Configurator/IPC-tests/server/Handle_Broadcast.i, + examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.i, + examples/Service_Configurator/IPC-tests/server/Handle_L_Stream.i, + examples/Service_Configurator/IPC-tests/server/Handle_R_Dgram.i, + examples/Service_Configurator/IPC-tests/server/Handle_R_Stream.i: + Changed all uses of SIGIO to ACE_SIGIO. + + + * ace/IPC_SAP: Cleaned up the enable() and disable() methods and + documentation so they correctly use the new ACE_* macros + described in the following bullet. + + * ace/OS.h: Added new ACE_SIGIO, ACE_SIGURG, and ACE_CLOEXEC flags + that should be used instead of the SIGIO or SIGURG, etc., in + order to ensure uniqueness. However, legacy code will continue + to work. + + * ace/IO_SAP.cpp: Added new ACE_SIGIO, ACE_SIGURG, and ACE_CLOEXEC + flags that should be used instead of the SIGIO or SIGURG, etc., + in order to ensure uniqueness. However, legacy code will + continue to work. + +Thu Jul 16 15:02:55 1998 Carlos O'Ryan + + * ace/Synch_T.h: Use ACE_Condition_Thread_Mutex instead of + ACE_Condition as the default condition + variable (ACE_SYNCH_CONDITION), this removes some headaches wrt + template instantiation. + + * ace/IPC_SAP.cpp: Added support for the close-on-exec flag. We + use the new ACE_CLOEXEC macro for this. + +Thu Jul 16 12:50:42 1998 Nanbor Wang + + * netsvcs/lib/netsvcs.dsp: + * netsvcs/servers/servers.dsp: Updated DLL names. + + * ace/ACE.cpp (ldfind): Conventionallly, Win32 platforms + distinguish debug version DLL from release version DLLs by + suffixing debug version DLL names with 'd'. (E.g., aced.dll + v.s. ace.dll.) This was causing some problem in managing the + svc.conf files because we need to link the matching DLL with the + executables regarding of how they get compiled. + + I modified the ldfind so that when a debug version ACE is + searching for a DLL file, it will first try to find the debug + version of that DLL by suffixing the name with 'd'. If it can't + be found, it then searches for the name specified. The release + version doesn't try to do this. Now, we can specify only the + "normal" dll names in svc.conf files and ACE can pick up the + right dlls for you without changing svc.conf files. However, + you need to follow the Win32 DLL naming convention as described + above. + + I don't expect this feature to cause any backward compatibility + problem. However, if in the rare event, it does cause you + problem, you can disable it by defining + ACE_DISABLE_DEBUG_DLL_CHECK in your config.h file. Notice that + this change only affects Win32 platforms. + +Thu Jul 16 08:55:48 1998 David L. Levine + + * ace/Dynamic_Service.cpp (instance): removed const-ness + from local void * obj, because the function return value + isn't const. Sun C++ caught this. + + * STL,Makefile: removed STL from ACE, for good this time. There + are no more STL dependencies in TAO's AVStreams. However, if + you still want to use the version of STL that was in ACE, you + can obtain it at www.cs.wustl.edu/~schmidt/ACE_wrappers/STL. + + * ACE-INSTALL.html: added note on enabling multicast on Linux for + TAO's NameService. And, added note on adding a routing table + entry to enable multicast on Linux. Thanks to Nanbor for + discovering that. + +Wed Jul 15 19:00:33 1998 Douglas C. Schmidt + + * ace/Dynamic_Service.cpp (instance): Made the error reporting + less verbose. Thanks to Darrell for suggesting this. In + addition, changed the use of (SERVICE *) to + ACE_reinterpret_cast(). + +Wed Jul 15 16:16:40 1998 Chris Gill + + * ace/Message_Queue_T.cpp: Fixed message/byte counting bugs. + +Wed Jul 15 15:42:44 1998 James C Hu + + * ace/OS.h: Added a copy constructor for ACE_Thread_ID. + +Wed Jul 15 14:33:15 1998 Steve Huston + + * ace/Select_Reactor.cpp: Added some MVS-specific behavior in the + error checking/recovery code so that bad handles are properly + located and removed on MVS Open Edition. Thanks to Chuck Gehr + for his hard work in tracking these down. + +Tue Jul 14 14:00:00 1998 Michael Kircher + + * ace/Select_Reactor.cpp: Changed the handling + of the state_changed flag. Now, it is set to "changed" (=1) + after each run of the event loop. This fixed a nested + upcalls bug, which was caused by overwriting this + flag each time entering the event loop. So that, + when poping one level of the handle_events call + stack information was lost about changes. Now, we + assume that information has changed and + propagate this knowlegde down in the call + stack. No performance overhead is caused by that. + +Tue Jul 14 12:02:15 1998 Carlos O'Ryan + + * examples/IPC_SAP/SOCK_SAP/C-inserver.cpp: + * examples/IPC_SAP/SOCK_SAP/C-inclient.cpp: + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_Acceptor.cpp: + * ace/ACE.cpp: + Use ACE_reinterpret_cast in several conversions address type + conversions (like from sockaddr* to sockaddr_in*). + Some compilers (HP/aCC) give a warning if the old C-style cast + operators are used; using the proper cast operator removes the + warning. Thanks to John Mulhern <9107@mn3.lawson.lawson.com> for + pointing out this problem. + +Tue Jul 14 11:26:40 1998 David L. Levine + + * Makefile: added STL back in, because TAO's AVStreams still uses it. + Thanks to Hans Rohnert for + reporting this. + + * ace/Message_Queue_T.cpp (refresh_{late,pending}_queue): removed some + breaks following ACE_ERROR_RETURNs, to avoid compiler warnings about + unreachable statements. + + * tests/Dynamic_Priority_Test.cpp: commented out unused global + FIFO_receipt_order. + + * ace/Basic_Types.h: added ACE_UINT64_LITERAL macro. Thanks to + Nanbor for suggesting it. + + * ace/Stats.cpp: use ACE_UINT64_LITERAL to replace platform-specific + code. + +Mon Jul 13 22:29:20 1998 David L. Levine + + * tests/Dynamic_Priority_Test.cpp: swapped "const" and "static" + qualifiers so that "static" appears first. + (run_performance_test): initialized random_int to 0 to avoid + g++ warning. + + * ace/Message_Queue_T.h: on VxWorks, added forward declaration + of class ACE_Message_Queue_Vx. + + * ace/Message_Queue_T.cpp (create_Vx_message_queue): added + template . + +Mon Jul 13 16:37:07 1998 Chris D. Gill + + * Message_Queue_T.cpp: + refined dynamic queues based on performance test results + +Mon Jul 13 16:35:50 1998 Chris Gill + + * ace/Message_Block.{cpp, h, i} + ace/Message_Queue_T.{cpp, h}: + + Removed automatic deletion of beyond messages, replaced this + with a remove_messages method to be called by an external + "reaper" if at all. Reorganized dynamic message queues + to remove sources of overhead, especially in checking + message status while refreshing the queue: added separate + head and tail pointers for pending, late, and beyond late + protions of queue: only move these pointers, not messages + (except at enqueue). + + * tests/Dynamic_Priority_Test.cpp: + + Added performance tests for static and dynamic queues + which do best case, worst case, and randomized ordering + of messages, presenting each ordering to all queues + and clocking enqueue and dequeue performance. + +Mon Jul 13 11:11:56 1998 Nanbor Wang + + * ace/Svc_Handler.h (ACE_SYNCH_USE>): Changed type of member + to int. Thanks to Zoran Ivanovic + for pointing this out. + +Sun Jul 12 13:25:04 1998 David L. Levine + + * ACE-INSTALL.html: Separated the Linux RedHat 5.1 and 5.0 + discussions into different paragraphs. + +Sat Jul 11 14:25:58 1998 David L. Levine + + * ace/Timer_Queue_Adapter.cpp: moved the ACE_RCSID inside the + ifndef ACE_TIMER_QUEUE_ADAPTERS_C protection, because this + file gets multiply included with g++. + + * ace/config-lynxos.h: added #define ACE_USE_RCS_ID 0. + +Sat Jul 11 03:44:00 1998 Gonzalo Diethelm + + * ace/inc_user_config.h: + Defined an ACE_RCSID macro to add RCS Id keywords to .cpp + files. Also defined an ACE_USE_RCSID macro that allows turning + this feature on and off. + + * ace/config-chorus.h: + * ace/config-psosim-g++.h: + * ace/config-vxworks5.x.h: + These files have the RCS Id keywords off by default. + I hope these are all (and the only) real-time OSs that could be + impacted by the extra 40K or so of space. + + * ace/ACE.cpp: + * ace/ACED.cpp: + * ace/ACER.cpp: + * ace/ARGV.cpp: + * ace/Acceptor.cpp: + * ace/Activation_Queue.cpp: + * ace/Addr.cpp: + * ace/Arg_Shifter.cpp: + * ace/Array.cpp: + * ace/Asynch_Acceptor.cpp: + * ace/Asynch_IO.cpp: + * ace/Auto_Ptr.cpp: + * ace/Basic_Types.cpp: + * ace/CORBA_Handler.cpp: + * ace/CORBA_Ref.cpp: + * ace/Connector.cpp: + * ace/Containers.cpp: + * ace/DEV.cpp: + * ace/DEV_Addr.cpp: + * ace/DEV_Connector.cpp: + * ace/DEV_IO.cpp: + * ace/Date_Time.cpp: + * ace/Dump.cpp: + * ace/Dump_T.cpp: + * ace/Dynamic.cpp: + * ace/Dynamic_Service.cpp: + * ace/Env_Value_T.cpp: + * ace/Event_Handler.cpp: + * ace/Event_Handler_T.cpp: + * ace/FIFO.cpp: + * ace/FIFO_Recv.cpp: + * ace/FIFO_Recv_Msg.cpp: + * ace/FIFO_Send.cpp: + * ace/FIFO_Send_Msg.cpp: + * ace/FILE.cpp: + * ace/FILE_Addr.cpp: + * ace/FILE_Connector.cpp: + * ace/FILE_IO.cpp: + * ace/Filecache.cpp: + * ace/Free_List.cpp: + * ace/Future.cpp: + * ace/Get_Opt.cpp: + * ace/Handle_Set.cpp: + * ace/Hash_Map_Manager.cpp: + * ace/High_Res_Timer.cpp: + * ace/INET_Addr.cpp: + * ace/IOStream.cpp: + * ace/IOStream_T.cpp: + * ace/IO_Cntl_Msg.cpp: + * ace/IO_SAP.cpp: + * ace/IPC_SAP.cpp: + * ace/LOCK_SOCK_Acceptor.cpp: + * ace/LSOCK.cpp: + * ace/LSOCK_Acceptor.cpp: + * ace/LSOCK_CODgram.cpp: + * ace/LSOCK_Connector.cpp: + * ace/LSOCK_Dgram.cpp: + * ace/LSOCK_Stream.cpp: + * ace/Local_Name_Space.cpp: + * ace/Local_Name_Space_T.cpp: + * ace/Local_Tokens.cpp: + * ace/Log_Msg.cpp: + * ace/Log_Record.cpp: + * ace/Malloc.cpp: + * ace/Malloc_T.cpp: + * ace/Managed_Object.cpp: + * ace/Map_Manager.cpp: + * ace/Mem_Map.cpp: + * ace/Memory_Pool.cpp: + * ace/Message_Block.cpp: + * ace/Message_Queue.cpp: + * ace/Message_Queue_T.cpp: + * ace/Method_Object.cpp: + * ace/Module.cpp: + * ace/Msg_WFMO_Reactor.cpp: + * ace/Multiplexor.cpp: + * ace/Name_Proxy.cpp: + * ace/Name_Request_Reply.cpp: + * ace/Name_Space.cpp: + * ace/Naming_Context.cpp: + * ace/OS.cpp: + * ace/Object_Manager.cpp: + * ace/Obstack.cpp: + * ace/Parse_Node.cpp: + * ace/Pipe.cpp: + * ace/Priority_Reactor.cpp: + * ace/Proactor.cpp: + * ace/Process.cpp: + * ace/Process_Manager.cpp: + * ace/Profile_Timer.cpp: + * ace/RB_Tree.cpp: + * ace/Reactor.cpp: + * ace/Read_Buffer.cpp: + * ace/Registry.cpp: + * ace/Registry_Name_Space.cpp: + * ace/Remote_Name_Space.cpp: + * ace/Remote_Tokens.cpp: + * ace/SOCK.cpp: + * ace/SOCK_Acceptor.cpp: + * ace/SOCK_CODgram.cpp: + * ace/SOCK_Connector.cpp: + * ace/SOCK_Dgram.cpp: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SOCK_IO.cpp: + * ace/SOCK_Stream.cpp: + * ace/SPIPE.cpp: + * ace/SPIPE_Acceptor.cpp: + * ace/SPIPE_Addr.cpp: + * ace/SPIPE_Connector.cpp: + * ace/SPIPE_Stream.cpp: + * ace/SString.cpp: + * ace/SV_Message.cpp: + * ace/SV_Message_Queue.cpp: + * ace/SV_Semaphore_Complex.cpp: + * ace/SV_Semaphore_Simple.cpp: + * ace/SV_Shared_Memory.cpp: + * ace/Sched_Params.cpp: + * ace/Select_Reactor.cpp: + * ace/Service_Config.cpp: + * ace/Service_Manager.cpp: + * ace/Service_Object.cpp: + * ace/Service_Repository.cpp: + * ace/Service_Types.cpp: + * ace/Shared_Memory.cpp: + * ace/Shared_Memory_MM.cpp: + * ace/Shared_Memory_SV.cpp: + * ace/Shared_Object.cpp: + * ace/Signal.cpp: + * ace/Singleton.cpp: + * ace/Stats.cpp: + * ace/Strategies.cpp: + * ace/Strategies_T.cpp: + * ace/Stream.cpp: + * ace/Stream_Modules.cpp: + * ace/Svc_Handler.cpp: + * ace/Synch.cpp: + * ace/Synch_Options.cpp: + * ace/Synch_T.cpp: + * ace/System_Time.cpp: + * ace/TLI.cpp: + * ace/TLI_Acceptor.cpp: + * ace/TLI_Connector.cpp: + * ace/TLI_Stream.cpp: + * ace/TTY_IO.cpp: + * ace/Task.cpp: + * ace/Task_T.cpp: + * ace/Thread.cpp: + * ace/Thread_Manager.cpp: + * ace/Time_Request_Reply.cpp: + * ace/Timeprobe.cpp: + * ace/Timeprobe_T.cpp: + * ace/Timer_Hash.cpp: + * ace/Timer_Hash_T.cpp: + * ace/Timer_Heap.cpp: + * ace/Timer_Heap_T.cpp: + * ace/Timer_List.cpp: + * ace/Timer_List_T.cpp: + * ace/Timer_Queue.cpp: + * ace/Timer_Queue_Adapters.cpp: + * ace/Timer_Queue_T.cpp: + * ace/Timer_Wheel.cpp: + * ace/Timer_Wheel_T.cpp: + * ace/Token.cpp: + * ace/Token_Collection.cpp: + * ace/Token_Invariants.cpp: + * ace/Token_Manager.cpp: + * ace/Token_Request_Reply.cpp: + * ace/Trace.cpp: + * ace/Typed_SV_Message.cpp: + * ace/Typed_SV_Message_Queue.cpp: + * ace/UNIX_Addr.cpp: + * ace/UPIPE_Acceptor.cpp: + * ace/UPIPE_Connector.cpp: + * ace/UPIPE_Stream.cpp: + * ace/WFMO_Reactor.cpp: + * ace/XtReactor.cpp: + * ace/gethrtime.cpp: + * tests/Aio_Platform_Test.cpp: + * tests/Atomic_Op_Test.cpp: + * tests/Barrier_Test.cpp: + * tests/Basic_Types_Test.cpp: + * tests/Buffer_Stream_Test.cpp: + * tests/Conn_Test.cpp: + * tests/Dynamic_Priority_Test.cpp: + * tests/Enum_Interfaces_Test.cpp: + * tests/Env_Value_Test.cpp: + * tests/Future_Test.cpp: + * tests/Handle_Set_Test.cpp: + * tests/Hash_Map_Manager_Test.cpp: + * tests/IOStream_Test.cpp: + * tests/MM_Shared_Memory_Test.cpp: + * tests/MT_Reactor_Timer_Test.cpp: + * tests/MT_SOCK_Test.cpp: + * tests/Map_Manager_Test.cpp: + * tests/Mem_Map_Test.cpp: + * tests/Message_Block_Test.cpp: + * tests/Message_Queue_Test.cpp: + * tests/MsgQueue_Notifications_Test.cpp: + * tests/Naming_Test.cpp: + * tests/Notify_Performance_Test.cpp: + * tests/OrdMultiSet_Test.cpp: + * tests/Pipe_Test.cpp: + * tests/Priority_Buffer_Test.cpp: + * tests/Priority_Reactor_Test.cpp: + * tests/Priority_Task_Test.cpp: + * tests/Process_Mutex_Test.cpp: + * tests/Process_Strategy_Test.cpp: + * tests/Reactor_Exceptions_Test.cpp: + * tests/Reactor_Notify_Test.cpp: + * tests/Reactor_Performance_Test.cpp: + * tests/Reactor_Timer_Test.cpp: + * tests/Reactors_Test.cpp: + * tests/Reader_Writer_Test.cpp: + * tests/Recursive_Mutex_Test.cpp: + * tests/SOCK_Connector_Test.cpp: + * tests/SOCK_Test.cpp: + * tests/SPIPE_Test.cpp: + * tests/SString_Test.cpp: + * tests/SV_Shared_Memory_Test.cpp: + * tests/Semaphore_Test.cpp: + * tests/Service_Config_Test.cpp: + * tests/Sigset_Ops_Test.cpp: + * tests/Simple_Message_Block_Test.cpp: + * tests/TSS_Test.cpp: + * tests/Task_Test.cpp: + * tests/Thread_Manager_Test.cpp: + * tests/Thread_Mutex_Test.cpp: + * tests/Thread_Pool_Test.cpp: + * tests/Time_Service_Test.cpp: + * tests/Time_Value_Test.cpp: + * tests/Timeprobe_Test.cpp: + * tests/Timer_Queue_Test.cpp: + * tests/Tokens_Test.cpp: + * tests/UPIPE_SAP_Test.cpp: + * tests/Upgradable_RW_Test.cpp: + * tests/XtReactor_Test.cpp: + * tests/tests_bcc.ide: + Added RCS Id keywords to all these files. + + * ace/ace_bcc.ide: + Don't really know what changed here... + +Fri Jul 10 23:11:36 1998 David L. Levine + + * bin/make_release: redirect rdiff error messages to /dev/null. + +Fri Jul 10 22:15:04 1998 David L. Levine + + * ACE version 4.5.21 released. + +Fri Jul 10 10:29:58 1998 David L. Levine + + * ace/SString.h: added ACE_INLINE specifiers to operator+ + declarations, to please Sun C++. Will AIX be able to cope? + +Thu Jul 09 23:27:26 1998 Gonzalo Diethelm + + * ace/OS.h: + Corrected definitions for ACE_Export under Borland compilers. + + * ace/SString.h: + Got rid of the friend operators. + + * ace/Containers.cpp: + * ace/Message_Queue_T.cpp: + * ace/Stream.cpp: + * ace/Timer_Heap_T.cpp: + * tests/Buffer_Stream_Test.cpp: + * tests/Dynamic_Priority_Test.cpp: + * tests/Future_Test.cpp: + * tests/Naming_Test.cpp: + * tests/Priority_Buffer_Test.cpp: + * tests/Thread_Pool_Test.cpp: + Got rid of a few assignments to zero that cause warnings with + the Borland compiler. + + * ace/ace_bcc.ide: + * tests/tests_bcc.ide: + Now Borland C++ 5.x supports building ACE as a DLL, and the tests + are linked against the Debug DLL. + + * tests/tests.bpg: + * tests/Dynamic_Priority_Test.bpr: + * tests/Timeprobe_Test.bpr: + * tests/Upgradable_RW_Test.bpr: + * tests/XtReactor_Test.bpr: + Added four new tests to the project group. + + * tests/Aio_Platform_Test.bpr: + * tests/Atomic_Op_Test.bpr: + * tests/Barrier_Test.bpr: + * tests/Basic_Types_Test.bpr: + * tests/Buffer_Stream_Test.bpr: + * tests/Conn_Test.bpr: + * tests/Dynamic_Priority_Test.bpr: + * tests/Enum_Interfaces_Test.bpr: + * tests/Env_Value_Test.bpr: + * tests/Future_Test.bpr: + * tests/Handle_Set_Test.bpr: + * tests/Hash_Map_Manager_Test.bpr: + * tests/IOStream_Test.bpr: + * tests/MM_Shared_Memory_Test.bpr: + * tests/MT_Reactor_Timer_Test.bpr: + * tests/MT_SOCK_Test.bpr: + * tests/Map_Manager_Test.bpr: + * tests/Mem_Map_Test.bpr: + * tests/Message_Block_Test.bpr: + * tests/Message_Queue_Test.bpr: + * tests/MsgQueue_Notifications_Test.bpr: + * tests/Naming_Test.bpr: + * tests/Notify_Performance_Test.bpr: + * tests/OrdMultiSet_Test.bpr: + * tests/Pipe_Test.bpr: + * tests/Priority_Buffer_Test.bpr: + * tests/Priority_Reactor_Test.bpr: + * tests/Priority_Task_Test.bpr: + * tests/Process_Mutex_Test.bpr: + * tests/Process_Strategy_Test.bpr: + * tests/Reactor_Exceptions_Test.bpr: + * tests/Reactor_Notify_Test.bpr: + * tests/Reactor_Performance_Test.bpr: + * tests/Reactor_Timer_Test.bpr: + * tests/Reactors_Test.bpr: + * tests/Reader_Writer_Test.bpr: + * tests/Recursive_Mutex_Test.bpr: + * tests/SOCK_Connector_Test.bpr: + * tests/SOCK_Test.bpr: + * tests/SPIPE_Test.bpr: + * tests/SString_Test.bpr: + * tests/SV_Shared_Memory_Test.bpr: + * tests/Semaphore_Test.bpr: + * tests/Service_Config_Test.bpr: + * tests/Sigset_Ops_Test.bpr: + * tests/Simple_Message_Block_Test.bpr: + * tests/TSS_Test.bpr: + * tests/Task_Test.bpr: + * tests/Thread_Manager_Test.bpr: + * tests/Thread_Mutex_Test.bpr: + * tests/Thread_Pool_Test.bpr: + * tests/Time_Service_Test.bpr: + * tests/Time_Value_Test.bpr: + * tests/Timeprobe_Test.bpr: + * tests/Timer_Queue_Test.bpr: + * tests/Tokens_Test.bpr: + * tests/UPIPE_SAP_Test.bpr: + * tests/Upgradable_RW_Test.bpr: + * tests/XtReactor_Test.bpr: + Uniform options for Borland C++ and C++ Builder. + +Thu Jul 09 16:23:34 1998 Irfan Pyarali + + * ace/Registry.h (ACE_Registry): Changed the Registry class so + that it does not use STL containers and the string classes + anymore. It now uses ACE containers and string classes. There + should be no dependency on STL in ACE anymore. + + * STL: Removed this directory since ACE is no longer dependent on + STL. If you still need these STL files, please refer to: + http://www.rahul.net/terris/. + + * examples/Registry/test_registry_{update,iterator}.cpp (main): + Updated files to work with modified Registry. + + * ace/SString.cpp (ACE_WString::operator<<): Added new operator. + + * Makefile: Updated Makefile so that STL is no longer released + with ACE. + +Thu Jul 09 09:37:43 1998 David L. Levine + + * ace/Basic_Types: for LONG_LONG size determination, don't use + ULONGLONG_MAX ifdef __GNUG__. This change should fix a build + problem on g++/Irix 6.4. Thanks to Johan Lundin + for reporting the problem. + +Wed Jul 08 17:47:48 1998 Irfan Pyarali + + * ace/Strategies_T (ACE_Scheduling_Strategy, + ACE_Schedule_All_Reactive_Strategy, and + ACE_Schedule_All_Threaded_Strategy): The code in these classes + was screwed up. The base class (ACE_Scheduling_Strategy) was + keeping a pointer to the SVC_HANDLER in order to enable the + derived classes to get to the Reactor and Thread Manager. Also, + if the user did not pass in an instance of SVC_HANDLER, one was + created dynamically ;-( Another problem was that the Reactor + field was set on the SVC_HANDLER, but the SVC_HANDLER was never + registered with the Reactor. So when the SVC_HANDLER was + deleted, it tried to remove itself from a potentially + non-existent Reactor. + + Solution: Removed scheduler_ as protected member of the base + class. Added thr_mgr_ to ACE_Schedule_All_Threaded_Strategy and + reactor_ to ACE_Schedule_All_Reactive_Strategy. Now these + classes do not need the scheduler_ member anymore. + +Wed Jul 8 13:47:02 1998 David L. Levine + + * ace/config-sunx86-sunc++-4.x.h: inserted note to not use this + config, but to use config-sunos5.5.h instead. After we + have installed and tested Sun C++ on Solaris86, we should + remove this config. + + * ACE-INSTALL.html: added note about increasing NUM_FILES to + 1000 in VxWorks kernel configuration. Thanks to + Jeff Franks for reminding me about + this change from the default VxWorks kernel configuration. + +Tue Jul 07 14:36:56 1998 Nanbor Wang + + * ace/ace_ce_dll.dsp: Added Stats.cpp into project. + + * ace/README: Added a new directive + ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS and its documentation. + + * ace/config-win32-common.h: Defined + ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS for Win32 except CE. + + * ace/Log_Msg.{h,cpp}: + * ace/OS.{h,i,cpp}: Changed to use ifdef + ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS for structural exception + code. + + * ace/Token.cpp: + * ace/Stats.cpp: + * ace/High_Res_Timer.cpp: Made them CE friendly. + +Tue Jul 07 09:26:22 1998 David L. Levine + + * ace/Thread_Manager.h: updated comments that describe + ACE_thread_t * argument to spawn () family. + + * ace/OS.{h,cpp},Thread_Manager.cpp: on VxWorks only, instead + of using a string to mark an ACE_thread_t as being allocated + by the ACE_Thread_Manager, use a single character (ASCII DC2). + + * tests/run_tests.vxworks: added Dynamic_Priority_Test. + + * apps/gperf/src/Makefile: added trailing $ to Id string. + +Tue Jul 7 10:48:42 EET DST 1998 Wei Chiang + + * tests/CLASSIX/CLASSIX_Con_Acc_Test.cpp: + Use a counter, max. number of unread messages, instead of wait + to work around the blocking problem in ipcSend() + +Mon Jul 6 22:32:19 1998 Gonzalo Diethelm + + * ace/ace_bcc.ide: + Updates for Borland C++ 5.x. + + * ace/config-win32.h: + Made sure ACE_HAS_WINNT4 and _WIN32_WINNT are always defined if + they were not explicitly defined. + + * ace/config-win32-borland.h: + * ace/config-win32-common.h: + Moved all the Borland definitions to a config-win32-borland.h + file. + + * ace/OS.h (ACE_SEH_TRY): + Added correct support for Borland C++ 5.x. + + * ace/OS.cpp: + Replaced the ugly hack to access wProcessorArchitecture under + Borland compilers for an even uglier hack, but that will work on + every Borland compiler, as long as the members of SYSTEM_INFO are + consistent. See the code and get sick! + + * ace/LOCK_SOCK_Acceptor.h: + * ace/Array.cpp: + * ace/Arg_Shifter.cpp: + Were missing an "ace/" in some includes. + + * tests/tests_bcc.ide: + Added all (well, most) of the tests to the project file. + + * tests/Makefile: + * tests/Message_Queue_Notifications_Test.cpp: + * tests/Message_Queue_Notifications_Test.bpr: + * tests/Message_Queue_Notifications_Test.dsp: + * tests/MsgQueue_Notifications_Test.cpp: + * tests/MsgQueue_Notifications_Test.bpr: + * tests/MsgQueue_Notifications_Test.dsp: + * tests/run_tests.bat: + * tests/run_tests.psosim: + * tests/run_tests.sh: + * tests/run_tests.vxworks: + * tests/tests.bpg: + * tests/tests.dsw: + * tests/tests.mak: + * tests/WinCE/Message_Queue_Notifications_Test.dsp: + * tests/WinCE/MsgQueue_Notifications_Test.dsp: + * tests/version_tests/Message_Queue_Notification_Test.dsp: + * tests/version_tests/MsgQueue_Notifications_Test.dsp : + Changed name of Message_Queue_Notifications_Test to + MsgQueue_Notifications_Test, to avoid problems with Borland + compilers. + + * tests/Enum_Interfaces_Test.cpp: + Added some output to test ACE_OS::uname(). + + * tests/Basic_Types_Test.cpp: + Changed a couple of debug lines to contain only one \n. + +Mon Jul 6 14:24:11 EET DST 1998 Wei Chiang + + * tests/CLASSIX/CLASSIX_Con_Acc_Test.cpp: + Add a pause after each send_n()(i.e. ipcSend()) as a temporary + work around over the block problem in ipcSend() when the resources are + exhaused. + + +Mon Jul 6 03:56:49 1998 Nanbor Wang + + * ace/Thread_Manager.h (ACE_Thread_Manager::thr_self): Instead of + refering to ACE_Thread::thr_self, it should mention + ACE_Thread::self. + +Fri Jul 03 17:02:49 1998 David L. Levine + + * bin/make_release (create_kit): remove any existing .zip + files before trying to create new ones, because they get + in the way. Thanks to J. Russell Noseworthy + for reporting the problem + with new ACE+TAO.tar.gz's not being created. + +Fri Jul 3 14:24:59 1998 Darrell Brunsch + + * apps/gperf/src/gperf.dsw: + * apps/gperf/src/gperf.dsp: + * apps/gperf/src/gperf_lib.dsp: + Added MSVC5 Project files + + * apps/gperf/src/Key_List.cpp: + * apps/gperf/src/Options.h: + * apps/gperf/src/Options.cpp: + There was a enumeration CONST, and MSVC5 didn't like it. I + renamed it to CONSTANT. + + * apps/gperf/src/new.cpp + Changed a variable from int to size_t to get rid of a MSVC + warning. + + NOTE: I tried out some tests and even though gperf compiles + on NT, it doesn't seem to work correctly yet. That + will come later. + +Fri Jul 03 13:47:19 1998 David L. Levine + + * ACE version 4.5.20 released. + +Fri Jul 03 08:52:13 1998 Steve Huston + + * netsvcs/lib/Name_Handler.{cpp h}: Moved class Naming_Context from + .cpp to .h so that AIX xlC can find it when instantiating templates. + +Thu Jul 2 11:49:16 1998 Alexander Babu Arulanthu + + * ace/OS.h: + * ace/OS.i: Added ACE_OS::fseek (). NT supports this too. Just + defined SEEK_SET, SEEK_CUR etc, in case they are not defined. This + is similar to what has been done for lseek. + +Thu Jul 02 10:58:00 1998 Michael Kircher + + * tests/Upgradable_RW_Test.cpp: Totally new version, + now we use linked lists on which we search to + spend some time. + + * tests/Upgradable_RW_Test.dsp: Project file for this test. + + * tests/tests.dsw: Integrated this project. + + * tests/version_tests.dsw: Integrated this project. + + * tests/Upgradable_RW_Test.dsp: Project file for this test. + +Thu Jul 02 09:14:20 1998 David L. Levine + + * examples/Reactor/Misc/test_timer_queue.cpp (test_functionality): + use timer_id outside of an assert, so that we don't get compile + warnings with ACE_NDEBUG about it being unused. + + * ace/OS.cpp (thr_create): on VxWorks only, check if thr_id + points to a zero char *. If so, assign the VxWorks task + name pointer to it (*thr_id). Thanks to Bill Backstrom + for this suggestion. + + * ace/Thread_Manager.cpp (spawn_i): on VxWorks only, augmented + comment to explain the various cases for t_id and *t_id values. + + * ace/Thread_Manager.h (spawn*): on VxWorks only, added comment + explaining use of ACE_thread_t * argument. + + * tests/Barrier_Test.cpp: on VxWorks only, added test of + an ACE_thread_t that points to a 0 char *. + + * tests/Barrier_Test.cpp,Thread_Manager_Test.cpp: moved + VxWorks task name and stack size tests from Barrier_Test + to Thread_Manager_Test. + + * tests/run_tests.vxworks: on VxWorks only, enabled + Message_Queue_Test. It's OK to run it on VxWorks, now + that the iterator_test () is disabled in the test. + + * tests/SOCK_Connector_Test.cpp (succeed_nonblocking): + if the connection completion fails, reset the status + _before_ doing the printout. The printout causes the + errno to be overwritten on LynxOS 2.5.0, for example. + + * Makefile (releaseall): use $(MAKE) instead of make for + recursive make. + +Wed Jul 01 21:31:40 1998 Arturo Montes + + * ace/IOStream_T.i (recv_n, eof): fixed calculation of + timeout_ and return value. + +Wed Jul 01 08:51:33 1998 Chris Gill + + * ace/Service_Types.cpp + tests/Dynamic_Priority_Test.cpp: Moved explicit template + instantiations for ACE_Dynamic_Message_Queue and + ACE_Message_Queue_Factory from the test into the ACE library + (next to where the ACE_Message_Queue instantiations resided). + +Wed Jul 01 07:08:40 1998 David L. Levine + + * ace/Message_Queue.i,cpp (VxWorks only): removed args from a + couple of unsupported functions, and added ACE_UNUSED_ARGS + to others, to avoid compiler warnings. + + * tests/Message_Queue_Test.cpp (performance_test): allocate + the send blocks in the main thread instead of in the sender. + That way, the main thread can delete them after the + receiver has finished. Before this change, the sender would + sometimes delete them before the reciever finished. Thanks to + Carlos and his friend Mr. SIGSEGV for helping to track this down. + +Tue Jun 30 23:48:39 1998 Nanbor Wang + + * ace/Message_Queue.h: Added /**/ between #include and <> to + prevent warnings from MSVC. + +Tue Jun 30 22:05:01 1998 David L. Levine + + * tests/Dynamic_Priority_Test.cpp: added template + instantiations. + +Tue Jun 30 18:55:45 1998 Chris Gill + + * ace/Message_Queue_T.{cpp, h} + + Added methods to ACE_Message_Queue_Factory to + create an ACE_Dynamic_Message_Queue with the + deadline and laxity with cleanup strategies. + + * tests/Dynamic_Priority_Test.cpp + + Added tests for the new cleanup strategy factory methods + +Tue Jun 30 18:03:15 1998 Chris Gill + + * ace/Message_Queue_T.{cpp, h} + ace/Message_Block.{cpp, h, i} + + Reorganized ACE_Dynamic_Message_Queue and related classes, + fixed bugs that turned up in testing: it's ready to put + on the road and see how it runs ;-) + + * tests/Dynamic_Priority_Test.{cpp, dsp} + tests/tests.dsw + tests/Makefile + tests/run_tests.{bat, sh} + + Added a test for the static and dynamic (both deadline and laxity + based) message queues, which assigns various message attributes, + pushes messages into the queue, and makes sure the resulting + dequeue order is correct for the given kind of queue. + +Tue Jun 30 14:04:42 1998 Steve Huston + + * ace/Message_Queue_T.cpp: Fixed references to an undeclared + priority_eval_func_ptr_ - I think I figured out what it was + supposed to be doing, but I'm not quite sure. It compiles ;-) + + * ace/Synch.h (ACE_Adaptive_Lock): Removed "= 0" (pure virtual) from + destructor decl. The function is defined in Synch.cpp. + +Tue Jun 30 13:13:21 1998 Irfan Pyarali + + * ace/WFMO_Reactor.cpp (open): Made sure that size does not exceed + MAXIMUM_WAIT_OBJECTS. Thanks to Dr. Schmidt for pointing this + out. + +Tue Jun 30 11:45:12 1998 Steve Huston + + * ace/Message_Queue_T.cpp: Added explicit class names where needed + for ANSI C++. Fixed some compile errors. Still needs more work to + compile correctly on HP-UX aCC. + +Tue Jun 30 09:27:25 1998 David L. Levine + + * etc/ACE-guidelines.html: added a guideline about using ACE_Export. + + * ace/Message_Queue.cpp (ACE_Message_Queue_Vx::dtor; VxWorks only): + added close () call to destructor, because the one in the parent + class will never get called because head_ is always 0 in the derived + class. + + * ace/Message_Queue.i (VxWorks only): finished implementing the + ACE_Message_Queue_Vx inline member functions. + + * tests/Message_Queue_Test.cpp: added performance tests and + tests of ACE_Message_Queue_Vx. + +Tue Jun 30 03:39:15 1998 Nanbor Wang + + * ace/Synch.h (ACE_RW_Process_Mutex): This class no longer needs + to inherit from ACE_Process_Mutex. + + * ace/Synch.cpp (ACE_RW_Process_Mutex): On non-Win32 platforms, + the underlying ACE_File_Lock needs to be created with owner's + read/write permission. Otherwise, other process won't be able + to access the lock. + + * Makefile (CONTROLLED_FILES): Added ChangeLog-98a and + ChangeLog-97b into release. Thanks to Ivan Murphy + for pointing this out. + +Tue Jun 30 00:51:32 1998 Douglas C. Schmidt + + * ACE version 4.5.19 released. + +Tue Jun 30 00:07:39 1998 Nanbor Wang + + * examples/Service_Configurator/Misc/main.dsp: Added macro + definition ACE_SVC_HAS_DLL=0 in this project. DLL linkage is + not used in this example (yet.) Thanks to Joe Covalesky + for noticing this. + +Mon Jun 29 21:16:39 1998 David L. Levine + + * ace/OS.cpp (invoke): wrapped final return with ACE_NOTREACHED. + "It's the right thing to do." + +Mon Jun 29 19:42:12 1998 Irfan Pyarali + + * ace/Timeprobe_T.cpp (ACE_Timeprobe): Changed __TEXT to ASYS_TEXT. + +Mon Jun 29 14:48:58 1998 Nanbor Wang + + * ace/OS.h: Added UNICODE macros for non-Win32 platforms. Thanks + to Jeff Greif for pointing this out. + + * ace/OS.cpp (invoke): Added a return at the end to keep AIX + happy. Thanks to CLahey@cccis.com for reporting this. + +Mon Jun 29 11:37:28 1998 Steve Huston + + * ace/ACE.cpp: Added a 'const' to initialized ASYS_TCHAR * - string + literal conversion to char * is deprecated in C++. + +Sun Jun 28 22:16:51 1998 David L. Levine + + * examples/Service_Configurator/Misc/main.cpp (main): removed + argc declaration because it was unused. + + * examples/Threads/task_five.cpp (work): added + ACE_UNUSED_ARG (stack_size). + + * ace/Message_Queue_T.h: fully qualify the DEFAULT_[HL]WM + references so that it will compile with aCC 1.07 on HPUX 10.20. + Thanks to Avi Nash for reporting this + problem. + + * acer/Message_Queue.{h,cpp} (ACE_Message_Queue_Vx:enqueue_head/tail): + implement these for VxWorks. enqueue_head_i just calls + enqueue_tail_i. + +Sat Jun 27 18:13:05 1998 Irfan Pyarali + + * ace/Timeprobe_T.cpp (ACE_Timeprobe - copy constructor): Stupid + MSVC is forcing me to define this and make it public; it should + really be protected; please don't use it. + + * ace/Timeprobe.h: Added ACE_SINGLETON_DECLARATION; otherwise all + compilation units would get a different instantiation of the + time probe class. Also, changed ACE_TIMEPROBE_SINGLETON to a + #define instead of a typedef; otherwise the compiler bitched + when it was use in ACE_SINGLETON_DECLARATION. + + * SINGLETON_INSTANTIATION: Removed this flag from all files in + ACE. It is causing duplicate declaration errors. + +Sat Jun 27 11:29:50 1998 Douglas C. Schmidt + + * ACE version 4.5.18 released. + +Sat Jun 27 11:27:28 1998 David L. Levine + + * ace/Basic_Types.h: use ACE_CAST_CONST instead of const in + ACE_CU64_TO_CU32. + +Sat Jun 27 11:03:52 1998 Douglas C. Schmidt + + * README: Updated the list of people who have contributed to TAO. + +Sat Jun 27 07:07:43 1998 Douglas C. Schmidt + + * ACE version 4.5.17 released. + +Sat Jun 27 00:27:29 1998 Irfan Pyarali + + * ace/Timeprobe: + + - Added back ACE_COMPILE_TIMEPROBES. David pointed out that + without this flag, size of ACE increases even when time probes + are not being used. Therefore, users must compile ACE with + this flag defined if they want to use time probes. This can + be achieved by doing one of the following: + + . Use make probe = 1, if you are using the make utility. + + . Define ACE_COMPILE_TIMEPROBES in config.h + + . Define ACE_COMPILE_TIMEPROBES in the VC project file. + + . Other regular methods will also work. + + It is not necessary to define ACE_COMPILE_TIMEPROBES when + using time probes, you simply need ACE_ENABLE_TIMEPROBES. You + can use the ACE_TIMEPROBE_* macros to program the time probes, + and use the ACE_ENABLE_TIMEPROBE to enable the time probes. + If you define ACE_ENABLE_TIMEPROBE in your code, but forget to + compile ACE with ACE_COMPILE_TIMEPROBES, you will end up with + linker errors. + + Remember that ACE_COMPILE_TIMEPROBES means that the ACE + library will contain code for time probes. This is only + useful when compiling ACE. ACE_ENABLE_TIMEPROBES means that + the ACE_TIMEPROBE_* macros should spring to life. + + - Added inclusion of OS.h. This way the ACE_COMPILE_TIMEPROBES + can be specified in the config file. + + * include/makeinclude/wrapper_macros.GNU: probe = 1 no longer + means ACE_ENABLE_TIMEPROBE. It only means + ACE_COMPILE_TIMEPROBES. This was changed because defining + ACE_ENABLE_TIMEPROBE here is too broad. ACE_ENABLE_TIMEPROBE is + cleverly designed so that it allows only some time probes to be + enabled (where ACE_ENABLE_TIMEPROBE is defined), while others to + be disabled (where ACE_ENABLE_TIMEPROBE is not defined). + + Example: IDL_Cubit time probes can be enabled without enabling + TAO time probes. Or TAO time probes can be enabled without + enabling IDL_Cubit time probes. TAO time probes are controlled + through TAO/tao/Timeprobes.h. + + * tests/Timeprobe_Test.cpp: + + - Defining ACE_ENABLE_TIMEPROBES is not forced. Users can + uncomment this at the top of the file. This relieves us from + trying to include the symbols of ACE_Timeprobes from ACE if + ACE was compiled without using ACE_COMPILE_TIMEPROBES (the + #include ace/Timeprobe.cpp trick did not work on all 8 + different ways of compiling ACE on NT). + + - Made the registration of the description arrays similar to the + real use cases (in TAO). + + - Introduced enums and took the magic numbers out. + +Fri Jun 26 20:37:06 1998 Matthew J Braun + * tests/Logger/clnt.h + * tests/Logger/clnt.cpp + * tests/Logger/svr.cpp + * orbsvcs/orbsvcs/Log/Logger_i.h + * orbsvcs/orbsvcs/Log/Logger_i.cpp + * orbsvcs/orbsvcs/Logger.idl + + The current status of this is incomplete. The svr* test is guaranteed + to be nonfunctional (I cannot yet speak for the rest). + + +Fri Jun 26 14:52:33 1998 Nanbor Wang + + * tests/test_config.h: Don't close the ofstream before opening the + log stream in ACE_APPEND_LOG on Win32. It it not necessary + because Win32 doesn't have fork anyway and it somehow confuses + Win32 (becuase no file was openen at that point.) + + * performance-tests/Makefile: Temporarily removed Synch-Benchmark + from the targets. It should be added back once the work is + done. + +Fri Jun 26 11:50:03 1998 David L. Levine + + * ace/OS.h: map ACE_dynamic_cast to static_cast with Sun C++, + without RTTI, to avoid warning about using dynamic_cast + without RTTI. Thanks to J. Russell Noseworthy + for reporting this. + + * include/makeinclude/wrapper_macros.GNU,ACE-INSTALL.html: + added rtti make option. + + * ace/Message_Queue.*: on VxWorks, added ACE_Message_Queue_Vx, + which wraps native VxWorks messages queues. See the header + file for limitations. + + * ace/Message_Queue_T.*,Makefile: split Message_Queue into + template and non-template files. + + * ace/Basic_Types.h: added ACE_CU64_TO_CU32 conversion macro, + for converting const ACE_UINT64 to const ACE_UINT32. The old + ACE_U64_TO_U32 wouldn't work with Sun C++'s ANSI casts. + + * performance-tests/Misc/basic_perf.cpp (per_iteration): use + ACE_CU64_TO_CU32 for narrowing the const ACE_UIN64 argument. + + * ace/config-sunos5.5.h: added ACE_HAS_ANSI_CASTS with Sun C++ 4.2. + + * include/makeinclude/platform_sunos5_sunc++.GNU: added + -features=castop to CCFLAGS, to enable use of ANSI casts. + + Thanks to J. Russell Noseworthy + for recommending the above two changes. + + * include/makeinclude/platform_sunos5_sunc++.GNU: Added + support for rtti=1 option to make, to optionally enable RTTI. + +Fri Jun 26 11:39:49 1998 Nanbor Wang + + * ACE-INSTALL.html: Added more infomation in {Free,Net}BSD. + +Fri Jun 26 10:51:07 1998 Carlos O'Ryan + + * ace/OS.h: + Fixed problem in ACE_DES_* macros, some preprocessors were + tokenizing ::~CLASS as ":: ~CLASS" and we wanted ":: ~ CLASS" + (were class in a macro argument). + +Fri Jun 26 09:48:55 1998 Douglas C. Schmidt + + * VERSION: Updated this file to direct bug reports to + the ACE mailing list. + +Fri Jun 26 10:43:02 EET DST 1998 Wei Chiang + + * ace/CLASSIX/CLASSIX_OS.cpp: + ACE_CLASSIX_OS::ACE_CLASSIX_OS() + After created an CLASSIX reactor as an actor-wide singleton + reactor, delete the original reator singleton, if any. + +Fri Jun 26 02:18:05 1998 Nanbor Wang + + * performance-tests/Synch-Benchmarks/Benchmark[_Base].{h,cpp}: + * performance-tests/Synch_Benchmarks/Makefile: Added a new class + Benchmark_Base so we can not only load the test items + but also the test methods dynamically. + +Wed Jun 24 21:37:22 1998 David L. Levine + + * ace/Message_Queue.cpp (refresh_queue): fixed syntax + error: extraneous ;. + +Wed Jun 24 19:52:30 1998 Irfan Pyarali + + * ace/IPC_SAP.cpp (enable,disable): Fixed #define nesting. + +Wed Jun 24 15:36:18 1998 Nanbor Wang + + * examples/ASX/Event_Server/Event_Server/Peer_Router.cpp + (Peer_Router_Context): For some reason, MSVC can't grop the + temporary objects. Therefore, I changed the ACE_INET_Addr object + in the constructor to a local variable. + +Wed Jun 24 17:10:06 1998 Irfan Pyarali + + * ace/Timeprobe: Removed ACE_COMPILE_TIMEPROBE. ACE library will + always contain ACE_Timeprobe code. + +Wed Jun 24 16:20:02 1998 James CE Johnson + + * ace/IOStream.cpp (underflow,overflow): added protection against + errors, when get/put buffers can be set to 0. + +Wed Jun 24 14:42:50 1998 Chris Gill + + * ace/Message_Queue.{cpp,h}: added =TITLE/=DESCRIPTION + and method comments to ACE_Message_Queue_Factory + + * ace/Message_Block.h: fixed comment in ACE_Laxity_Message_Strategy + +Wed Jun 24 13:35:15 1998 Chris Gill + + * ace/Message_Queue.{cpp,h,i} + ace/Message_Block.{cpp,h,i}: Fixed ACE_UNIMPLEMENTED_FUNC + declarations in ACE_Dynamic_Message_Queue, moved the + ACE_Dynamic_Message_Strategy, ACE_Laxity_Message_Strategy, + and ACE_Deadline_Message_Strategy classes from the + Message_Queue.* files into the respective Message_Block.* + files (fixes link errors on platforms such as NT which + require template source). + +Wed Jun 24 11:38:00 1998 Chris Gill + + * ace/Message_Block.{cpp,h,i}: Added worst case execution time and + deadline absolute time ACE_Time_Value members to ACE_Message_Block. + These default to ACE_Time_Value::zero in the constructors and + initialization methods. + + * ace/Message_Queue.{cpp,h,i}: Added ACE_Dynamic_Message_Queue, + ACE_Dynamic_Message_Strategy, ACE_Deadline_Message_Strategy, + ACE_Laxity_Message_Strategy, and ACE_Message_Queue_Factory + classes to facilitate adaptive use of statically or dynamically + prioritized message queues. + +Wed Jun 24 10:23:27 1998 David L. Levine + + * bin/make_release: 1) inserted /pkg/gnu/bin at head of + PATH, if it exists. That way, cvs diff will use GNU diff. + Thanks to Doug for tripping over that. + 2) changed grep -E to egrep. + + * ace/OS.i,gethrtime.cpp (gethrtime): with Pentium and g++ or ghs, + only; fixed load of 64-bit tick count into two 4-byte ints. + + * performance-tests/Misc/basic_perf.cpp (iteration_time): check + for elapsed_time_ less than empty_iteration_time_, and return 0 + if so. + +Wed Jun 24 10:02:14 1998 Douglas C. Schmidt + + * examples/ASX/Event_Server/Transceiver/transceiver.cpp + (parse_args): Fixed a warning about control reaching the end of + a method. Thanks to David Levine for reporting this. + + * .cvsignore: Added "build" to make CVS happy. Thanks to + David for this info. + + * ace/CLASSIX: Reran "make depend." + + +Wed Jun 24 13:34:32 EET DST 1998 Wei Chiang + + * tests/CLASSIX/* + Attached "CLASSIX_" to all the file names in this directory + Added Imakefile + + * ace/CLASSIX/CLASSIX_Select_Reactor.* + test/CLASSIX/CLD_Connector_Test.cpp + get_current_info() is now renamed to current_info() in compliant + with ACE_Reactor_Impl class. + +Wed Jun 24 08:17:25 EET DST 1998 Wei Chiang + + * Renamed ace/CLASSIX/CLASSIX_Reactor.* to + ace/CLASSIX/CLASSIX_Select_Reactor.* and adujsted other files + accordingly. + + * ace/CLASSIX/CLASSIX_Reactor.* + make naming reference consistenet: all the references to + ACE_CLASSIX_Reactor are now to ACE_CLASSIX_Select_Reactor + +Wed Jun 24 02:39:35 1998 Douglas C. Schmidt + + * ACE version 4.5.16 released. + +Wed Jun 24 00:00:44 1998 Douglas C. Schmidt + + * examples/ASX/Event_Server/Transceiver/transceiver.cpp: Cleaned + up the Event_Transceiver code a bit. + + * examples/ASX/Event_Server/Event_Server/event_server.cpp (main): + Cleaned up the code a bit. + + +Wed Jun 24 06:54:00 EET DST 1998 Wei Chiang + + * Attached "CLASSIX_" to all the file names in ace/CLASSIX. + + * Modified include statments in ace/CLASSIX/* to reflect the + name changes. + + * Added Makefile in ace/CLASSIX + + * ace/CLASSIX/CLASSIX_Reactor.h: + ACE_CLASSIX_Reactor_Notify is now derived from ACE_Reactor_Notify + The private data member, select_reactor_, is now an + ACE_CLASSIX_Reactor class instead of an ACE_Select_Reactor class. + + * ace/CLASSIX/CLASSIX_Reactor.cpp: + in open() + uses ACE_dynamic_cast() to cast + parameter from ACE_Reactor_Impl to ACE_CLASSIX_Reactor + +Tue Jun 23 22:18:42 1998 Douglas C. Schmidt + + * examples/Mem_Map/file-reverse/file-reverse.cpp: Fixed a minor + bug where the program would ungraciously core dump if the file + given on the command-line doesn't exist. Thanks to William + S. Lear for reporting this. + +Tue Jun 23 20:33:30 1998 Irfan Pyarali + + * ace/Synch.h (ACE_Adaptive_Lock): Added ACE_Export. + +Tue Jun 23 18:59:31 1998 Steve Huston + + * ace/Acceptor.cpp (ACE_Strategy_Acceptor<>::resume()): Don't + suspend() the object; resume() it - looked like a cut/paste error. + +Tue Jun 23 16:41:35 1998 Nanbor Wang + + * ace/Synch.{h,cpp} (class ACE_Adaptive_Lock): Added the new Lock + class which allows its subclass to determine the actual locking + mechanism it uses at run time. Notice that all subclasses must + provide their own contructor/destructor implementation. + +Tue Jun 23 06:40:35 1998 David L. Levine + + * examples/Map_Manager/test_hash_map_manager.cpp (main): + replaced use of cerr with and ACE_ERROR_RETURN. Thanks + to Philippe Klein for reporting + this. + + * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp: + added #include of ace/streams.h. Thanks to Philippe Klein + for reporting this. + + * tests/TSS_Test.cpp (worker): declare "u" globally so that + we don't quickly run out of TSS keys. + +Mon Jun 22 09:25:32 1998 Carlos O'Ryan + + * ace/XtReactor.cpp: + The notify_handler_ is a pointer now, it was still deferenced as + an object. + +Mon Jun 22 09:04:21 1998 David L. Levine + + * include/makeinclude/platform_osf1_4.0.GNU: removed suppression + of warning 340, used reference to copied (temporary) value, + because it's no longer needed. + + * ace/Message_Queue.cpp (ACE_Message_Queue_Iterator ctor): + replaced "queue" with "q" to avoid problems with STL or on + platforms that #define queue. Thanks to Dave Meyer + for reporting this. + + * ace/Synch_T.h: added adapter class ACE_TSS_Type_Adapter. + It adapts built-in types for use with ACE_TSS. + + * tests/TSS_Test.cpp: demonstrate/test use of ACE_TSS_Type_Adapter. + + * ace/Timeprobe.h: added semicolon to end of + ACE_TIMEPROBE_EVENT_DESCRIPTIONS definition, when it's non-null. + + * tests/Timeprobe_Test.cpp (main): removed trailing semicolon + from ACE_TIMEPROBE_EVENT_DESCRIPTIONS, and added ACE_UNUSED_ARGs + to avoid compilation warnings about unused variables. + +Mon Jun 22 04:49:29 1998 Douglas C. Schmidt + + * man/windex: Removed ACE_Service_Record from all the + documentation since it is no longer relevant. Thanks + to Ivan Murphy for reporting this. + +Mon Jun 22 02:59:42 1998 Nanbor Wang + + * ace/Process.cpp (setenv_i): Nedd to adjust the memory size to + the actual string size. + +Mon Jun 22 02:32:56 1998 Gonzalo Diethelm + + * ace/Thread_Manager.h: + * ace/Thread_Manager.cpp: + * ace/Thread_Manager.i: + * ace/OS.cpp (uname): + Moved a few things (comparison operators) from + ACE_Thread_Descriptor to ACE_Thread_Descriptor_Base, to satisfy + Borland compilers. + Enabled a conditional compilation for all Borland compilers. + Thanks to Valik Solorzano Barboza for pointing + these things out. + +Mon Jun 22 01:14:36 1998 Gonzalo Diethelm + + * ace/ACE.bpg: + * ace/ACED.bpr: + * ace/ACER.bpr: + Contained ^M characters. + I also made sure there were no absolute paths pointing to "gonzo" + directories... + + * ace/ACED.cpp: + * ace/ACER.cpp: + Added Stats.cpp as a module in the right place. + + * ace/OS.h: + Added a ACE_NOOP macro to avoid compilation warnings when "if" is + used as a noop in certain macros. + + * ace/Hash_Map_Manager.cpp: + * ace/Map_Manager.cpp: + Replaced the use of "if" as a noop with ACE_NOOP. + + * ace/Signal.cpp: + For some obscure reason, Borland needs a blank line between the + #if and the extern "C" void ace_sig_handler_dispatch() + definition. Don't ask... + + * ace/Asynch_IO.h: + Changed (again) inheritance for ACE_Asynch_Result from protected + to public. + + * tests/Aio_Platform_Test.bpr: + * tests/Atomic_Op_Test.bpr: + * tests/Barrier_Test.bpr: + * tests/Basic_Types_Test.bpr: + * tests/Buffer_Stream_Test.bpr: + * tests/Conn_Test.bpr: + * tests/Enum_Interfaces_Test.bpr: + * tests/Env_Value_Test.bpr: + * tests/Future_Test.bpr: + * tests/Handle_Set_Test.bpr: + * tests/Hash_Map_Manager_Test.bpr: + * tests/IOStream_Test.bpr: + * tests/MM_Shared_Memory_Test.bpr: + * tests/MT_Reactor_Timer_Test.bpr: + * tests/MT_SOCK_Test.bpr: + * tests/Map_Manager_Test.bpr: + * tests/Mem_Map_Test.bpr: + * tests/Message_Block_Test.bpr: + * tests/Message_Queue_Notifications_Test.bpr: + * tests/Message_Queue_Test.bpr: + * tests/Naming_Test.bpr: + * tests/Notify_Performance_Test.bpr: + * tests/OrdMultiSet_Test.bpr: + * tests/Pipe_Test.bpr: + * tests/Priority_Buffer_Test.bpr: + * tests/Priority_Reactor_Test.bpr: + * tests/Priority_Task_Test.bpr: + * tests/Process_Mutex_Test.bpr: + * tests/Process_Strategy_Test.bpr: + * tests/Reactor_Exceptions_Test.bpr: + * tests/Reactor_Notify_Test.bpr: + * tests/Reactor_Performance_Test.bpr: + * tests/Reactor_Timer_Test.bpr: + * tests/Reactors_Test.bpr: + * tests/Reader_Writer_Test.bpr: + * tests/Recursive_Mutex_Test.bpr: + * tests/SOCK_Connector_Test.bpr: + * tests/SOCK_Test.bpr: + * tests/SPIPE_Test.bpr: + * tests/SString_Test.bpr: + * tests/SV_Shared_Memory_Test.bpr: + * tests/Semaphore_Test.bpr: + * tests/Service_Config_Test.bpr: + * tests/Sigset_Ops_Test.bpr: + * tests/Simple_Message_Block_Test.bpr: + * tests/TSS_Test.bpr: + * tests/Task_Test.bpr: + * tests/Thread_Manager_Test.bpr: + * tests/Thread_Mutex_Test.bpr: + * tests/Thread_Pool_Test.bpr: + * tests/Time_Service_Test.bpr: + * tests/Time_Value_Test.bpr: + * tests/Timer_Queue_Test.bpr: + * tests/Tokens_Test.bpr: + * tests/UPIPE_SAP_Test.bpr: + * tests/tests.bpg: + Contained ^M characters. + I also made sure there were no absolute paths pointing to "gonzo" + directories... + +Mon Jun 22 01:33:12 1998 Nanbor Wang + + * ace/OS.h (ACE_SYNCH_{1,2}): These two macros were added back for + backward compatibility. + +Mon Jun 22 01:12:53 1998 Irfan Pyarali + + * ace/OS.i (dlerror): Just use FormatMessageA instead of + FormatMessage. The you don't have to worry about UNICODE being + turned on. + +Mon Jun 22 00:01:02 1998 Douglas C. Schmidt + + * ACE version 4.5.15 released. + +Sun Jun 21 23:54:28 1998 Nanbor Wang + + * ace/config-freebsd-pthread.h: Defined + ACE_LACKS_MUTEXATTR_PSHARED and ACE_LACKS_CONDATTR_PSHARED. + +Sun Jun 21 10:14:32 1998 Douglas C. Schmidt + + * examples/IPC_SAP/SOCK_SAP/CPP-unserver.cpp (server): Fixed + another ambiguity caused by the recent SOCK_IO changes. Thanks + to David for pointing this out. + +Sun Jun 21 00:16:56 1998 Nanbor Wang + + * ace/OS.i (dlerror): Have to treat UNICODE differently because + FormatMessage takes wchar when UNICODE is defined. + + * ace/WFMO_Reactor.{h,i,cpp}: Changed the parent class of + ACE_WFMO_Reactor_Notify from ACE_Event_Handler to + ACE_Reactor_Notify. + (dump): Added this virtual function implementation for + ACE_WFMO_Reactor_Notify. + + * Ace/Proactor.cpp (timeout): Fixed a typo. + +Sat Jun 20 16:51:39 1998 Douglas C. Schmidt + + * ace/Reactor*: Made a slew of changes to the Reactor and it's + associated implementations so that we can integrate it + seamlessly with Chorus ClassiX IPC. Thanks to Wei Chiang for + these changes. + + * ace/Acceptor.cpp: Added a flag that keeps track of whether we should + use select() in the Acceptor. This makes it easier to integrate + this stuff with Chorus IPC. Thanks to Wei Chiang for this. + + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: Removed the trailing + 0 to the send() operation to (1) avoid overload ambiguity and + (2) to use write() rather than send()! Thanks to Chris Healey + for reporting this. + + * ace/ACE: The default condition in the select switch in the + enter_*_timed_wait functions assumed that all values returned + from select if not 0 or 1 will be -1. This is true in those + functions due to only 1 file descriptor flag being set. Thanks + to Chris Healey for generalizing this a bit... + + * ace/SOCK_IO: Added the wrappers for the "non-flags" version of + timed send()/recv(). Thanks to Chris Healey for this. + + * ace/FILE_Addr.cpp: Cleaned up the code a bit to be more + consistent. Thanks to Chris Healey for suggesting this. + + * ace/FILE_Addr.cpp (ACE_FILE_Addr): Removed the memset() in the + constructor since this is overkill... + + * ace/ACE.cpp (send_n): Fixed a dump cut&paste bug in the timed + version of send_n(). Thanks to Chris Healey + for reporting this. + +Sat Jun 20 14:58:21 1998 Nanbor Wang + + * bin/indent_macros.perl: Instead of hardcoding perl's location in + the script, it now invokes perl according to user's environment + setting. Thanks to David for providing the improvement. + +Sat Jun 20 01:24:28 1998 Nanbor Wang + + * include/makeinclude/platform_freebsd_pthread.GNU: Changed to use + -Wall to report all warnings. + + * ace/OS.cpp (thr_create): Specify as an unused + argument when ACE_LACKS_SETSCHED. + + * ace/OS.{h,i,cpp}: Rearrange macro indentations. + + * bin/indent_macros.perl: This little perl script rearrange the + indentation of macros so they are a bit easier to debug. + + * ace/config-freebsd-pthread.h: Defined ACE_LACKS_PTHREAD_CANCEL. + +Sat Jun 20 00:14:07 1998 Alexander Babu Arulanthu + + * examples/Reactor/Proactor/test_proactor_with_aio.cpp: Test + program for the Asynch_Transmit_File, Asynch_Read_File, + Asynch_Read_Stream, Asynch_Write_File and Asynch_Write_Stream. + +Fri Jun 19 23:58:35 1998 Alexander Babu Arulanthu + * ace/Proactor.h : + * ace/Proactor.cpp : + * ace/Asynch_IO.h : + * ace/Asynch_IO.cpp : + - Implemented Asynch_Transmit_File for POSIX4 systems. + - Added a new class "ACE_Asynch_Transmit_Handler", which is + an auxillary handler class for Asynch_Transmit_File. This + does the actual transmission doing file read and stream + write asynchronously and finally calling the + transmit_handler in the application. + - Aiocb list is now of size RTSIG_MAX, the maximum number + of RT signals that can be queued in a process at a time. + +Fri Jun 19 22:17:35 1998 David L. Levine + + * bin/make_release (check_workspace): use cvs checkout instead + of update, to notice any new directories that have been added + to the repository but not to the workspace. + + There are .cvsignore files in /project/adaptive/ACE_wrappers + and /project/adaptive/ACE_wrappers/java. They can be used + to suppress tripping over any new, uncontrolled files, such + as releases, that are added to these directories. + + Filter ^U from checkout output, so that release need not be + based on the latest repository versions. Instead, the release + is based on the contents of the /project/adapative/ACE_wrappers + workspace. It need not be brought up-to-date with the repository, + though it cannot contain any modified files. This change allows + other users to continue to check in files prior to or during the + release. + + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp (read): added + ACE_UNUSED_ARG (len). + + * Makefile: fixed build of .obj/gethrtime.o with ghs/VxWorks/i86. + + * tests/run_tests.vxworks: added Timeprobe_Test, but commented + out. That test page faults when built with ghs for Pentium. + It appears that the STL-style iterator usage in ACE_Timeprobe + isn't handled properly by the compiler. + +Fri Jun 19 16:51:05 1998 Nanbor Wang + + * ace/config-freebsd-pthread.h (ACE_HAS_NONCONST_MSGSND): Macro + definition added. + + * ace/OS.i (sigwait): Suppress compiler warnings on FreeBSD. + (msgsnd): Separated the case ACE_HAS_NONCONST_MSGSND out. + + Thanks to Russell L. Carter for reporting + the above fix. + +Fri Jun 19 11:22:27 1998 David L. Levine + + * ACE version 4.5.13 released. + +Thu Jun 18 21:14:25 1998 David L. Levine + + * examples/Threads/task_five.cpp: renamed global stack_size + to default_stack_size, to avoid shadowing by stack_size in + main (). + + * ace/OS.i (dlopen): added support for ACE_HAS_SGIDLADD. + (dlerror): on WIN32, return a formatted message instead of 0. + Thanks to Kent Watsen for the diffs. + + * ace/config-irix6.x-sgic++-nothreads.h: added ACE_HAS_SGIDLADD. + Thanks to Kent Watsen for this addition. + + * Makefile: ACE-INSTALL is not a .PHONY target. + + * ace/Makefile: only regenerate Svc_Conf_[ly].cpp if at Wash. U. + +Thu Jun 18 20:46:46 1998 Nanbor Wang + + * performance_tests/Misc/childbirth_time.cpp: Changed to use the + variable MULTIPLY_FACTOR in statistic calculation. + + * ace/config-freebsd-pthread.h: Added the following definition: + #define ACE_HAS_SIGINFO_T + #define ACE_LACKS_SIGINFO_H + #define ACE_LACKS_UCONTEXT_H + #define ACE_LACKS_SI_ADDR + + * include/makeinclude/platform_freebsd_pthread.GNU: Changed to + invoke linker directly using g++. Added -pthread flag for + linker. This implies programs will link against libc_r + automatically now. Removed -lc_r. Other minor changes. + + Thanks very much for lots of help from FreeBSD team esp. Amancio + Hasty and John Birrell + . + +Thu Jun 18 19:32:30 1998 David L. Levine + + * ace/Token.cpp (dump): commented out print of owner_. Is + there a portable way to print an ACE_thread_t via ACE_DEBUG? + +Thu Jun 18 18:46:00 1998 Carlos O'Ryan + + * ace/Timeprobe.h: + * ace/Timeprobe_T.h: + * ace/Timeprobe_T.cpp: + Added methods to print the absolute values, this can be used to + mix the results of several processes: por example on Sparcs the + high-res timer is a CPU register so the value is consistent + across processes, there are some potential problems with + multiple CPUs, but that's not our case. + +Thu Jun 18 16:25:28 1998 Nanbor Wang + + * examples/Threads/task_five.cpp (main): Extracted out the body of + the test loop so that the delete[] gets called everytime the + body gets executed. + + * ace/Thread_Manager.cpp (ACE_EXECUTE_OP,kill): We need to guard + against non-existing target thread after searching the thread + table. Thanks to Savas Parastatidis + for noticing the problem. + +Thu Jun 18 09:23:39 1998 Irfan Pyarali + + * ace/config-win32-common.h: Fixed the inclusion of winsock + related files. Thanks to Ernesto Guisado + for suggesting this. + +Wed Jun 17 22:47:50 1998 David L. Levine + + * ace/OS.i (rw_trywrlock_upgrade): moved declaration of + local "result" before the ACE_PTHREAD_CLEANUP_PUSH. + PTHREAD_CLEANUP_PUSH/POP are macros that contain open/ + close braces on some platforms. So, any declarations + between them are not visible after the POP. + +Wed Jun 17 19:01:53 1998 Nanbor Wang + + The following changes provide an interface for ACE programmers + of more finer control over how Win32 structured exceptions are + handled. Thanks to Detlef Becker + for contemplating the idea and passing it to us. + + * ace/Log_Msg.{h,cpp} (seh_except_{selector,handler}): Added + new methods to retrieve/set structured exception handling + behavior. is used to determine the "proper" action a + thread should take upon a structured exception and + performs the actual exception handling routine. They are + structured as below in ace_thread_adapter: + + __except (ACE_LOG_MSG->seh_except_selector () (0)) + { + ACE_LOG_MSG->seh_except_handler () (0); + } + + * ace/OS.{h,cpp} (ACE_SEH_EXCEPT_HANDLER): New typedef used to + define user win32 structured exception handler. + + (ACE_SEH_Exception_{Selector,Handler}): Default structured + exception handler. Two handlers ACE_Log_Msg are initialized to + them by default. + + (ACE_Thread_Adapter,inherit_log_msg): Added initializing and + inheriting code to pass the spawning thread's structured + exception handling behaviors. + + * ace/config-win32-common.h + (ACE_SEH_DEFAULT_EXCEPTION_HANDLING_ACTION): This macro defines + the default action taken by ACE when a win32 structured + exception occurs. It is by default defined to + EXCEPTION_CONTINUE_SEARCH, which does not handle the exception + but simply pass the exception out. Users can overwrite the + default behavior by defining the macro in their config.h files. + +Wed Jun 17 17:30:11 1998 Michael Kircher + + * ace/OS.h: Added a condition variable and a flag to + the definition of reader/writer locks. + + * ace/OS.i: Implemented ACE_OS::rw_trywrlock_upgrade properly + using one condition variable and a flag. The condition + variable is used to get in front of all the possible + waiting writers and to wait on still working readers + on the rw_lock. The flag is used to indicate, that + a reader is upgrading its lock. rw_unlock obeys one more + case now. + + * ace/OS.cpp: The constructor for the Reader/writer locks + has changed slightly to initialize and destroy the + new members. + + * tests/Reader_Writer_Test.cpp: Added the use of the + rw_mutex.tryacquire_write_upgrade () method to the test. + +Wed Jun 17 07:34:11 1998 David L. Levine + + * tests/IOStream_Test.cpp (server): fixed sign of constant + used to check for valid double. Thanks to Mark Kettner + for reporting this. + + * performance-tests/UDP/udp_test.cpp: added a few + ACE_U64_TO_U32 explicit conversions. + + * tests/Priority_Buffer_Test.cpp (consumer): re-enabled the + statement to suppress the ghs warning about unused variable + cur_priority. + +Tue Jun 16 20:29:32 1998 Steve Huston + + * ACE-INSTALL.html: Added some comments concerning MSVC 5.0 and SP3. + Thanks to Bill Fulton for the excellent detective work. + +Tue Jun 16 16:08:23 1998 Irfan Pyarali + + * ace/Timeprobe_T.h (class ACE_Timeprobe): Fixed copy constructor + signature. Thanks to Chuck R. Gehr + (GehrCR@LOUISVILLE.STORTEK.COM) for pointing this out. + +Tue Jun 16 16:18:08 1998 Douglas C. Schmidt + + * ace/FILE_Addr.cpp (operator=): Check to make sure we + NUL-terminate the memcpy'd filename correctly. Thanks to Istvan + Buki for reporting this. + +Tue Jun 16 15:43:55 1998 Nanbor Wang + + * ACE-INSTALL.html: Changed to instruct users to #include + "ace/config-win32.h" instead of "config-win32.h" directly. + Thanks to Gonzo for noticing this. + +Tue Jun 16 10:33:20 1998 David L. Levine + + * os-patches/linux-patches.html: added RedHat 5.1 success + report from Chanaka Liyanaarachchi . + + * ace/Basic_Types.h,High_Res_Timer.cpp, + performance-tests/Misc/basic_perf.cpp: + added explicit ACE_U64_TO_U32 conversion macro. WIN32's __int64 + and ACE_U_LongLong need an explicit narrowing to 32 bits. This + macro provides a consistent way to do that on all platforms. + + * ace/Asynch_IO.*: added trailing $ to CVS keyword string. + + * ace/Asynch_IO.cpp: fixed so that it will compile with Sun CC + on Solaris 2.6. Thanks to Frederic ANDRES + for reporting this. + + * ACE-INSTALL.html: updated Linux RedHat info. + +Mon Jun 15 23:17:27 1998 David L. Levine + + * Makefile: added os-patches/ to distribution. + +Mon Jun 15 23:07:45 1998 David L. Levine + + * ACE version 4.5.12 released. + +Mon Jun 15 13:58:17 1998 David L. Levine + + * ace/config-chorus.h: replaced comment that said that the + config is for CHORUS using MIT threads with comment that says + that it uses the CHORUS POSIX threads interface. Thanks to + Leo Modica for questioning this, and Wei + Chiang for confirming it. + + * os-patches/linux-patches.html: updated glibc info. Thanks + to Bob Scott for pointing out the + glibc-2.0.7-7 is not available from sunsite. + +Sat Jun 13 13:10:05 1998 David L. Levine + + * tests/XtReactor_Test.cpp: moved explicit template instantiations + inside ACE_HAS_XT, because the #includes are all inside + ACE_HAS_XT also. + + * tests/XtReactor_Test.cpp: without ACE_HAS_XT, replaced + ACE_ERROR_RETURN with ACE_ERROR. This makes it consistent + with other tests, and allows the following ACE_END_TEST + statement to be reached. + + * tests/Process_Mutex_Test.cpp (main): specify full path to + spawned children. Removed Solaris/i386-specific code because + it should no longer be needed now that the test is fixed by + specifying the full path. (acquire_release): removed printout + at top. + + * ACE+TAO.tgz,ACE.tgz,ACE-lib.tgz,FSU-threads.tgz: added these + symlinks to their corresponding .tar.gz files. Thanks to + Gonzo and Darrell for suggesting this. + + * ace/RB_Tree.i (clear): removed extraneous ";" following the + function definition. + + * ace/Process.cpp (spawn): added an ACE_DEBUG printout before each + call to ACE_OS::exit (). + + * ace/Synch_T.cpp: removed the #pragma define_template for + ACE_Condition on __osf__ with cxx. It's no longer + needed, and was causing multiply defined instantiations with + cxx 6.1. + +Fri Jun 12 17:04:14 1998 Alexander Babu Arulanthu + + * ace/OS.h: Moved the #define's and typedef's (related to Proactor + stuff, things like TRANSMIT_BUFFERS etc) under '#if defined + (WIN32)' before OS.i. They were at the end of the file. + +Fri Jun 12 16:31:13 1998 Aniruddha Gokhale + + * ace/OS.h: (ACE_NTOHL, ACE_HTONL): Added macros for conversion + between network and host byte order. Thanks to James Hu for + contributing these. + +Fri Jun 12 14:29:40 1998 Douglas C. Schmidt + + * ace/OS.i (sema_wait): Changed the code so that it always treats + the time value argument in absolute time, even for Win32. + Thanks to Chuck Gehr for reporting this. + +Fri Jun 12 14:12:25 1998 Carlos O'Ryan + + * include/makeinclude/wrapper_macros.GNU: + The inclusion of the XtReactor is controlled on the + platform_macros file (or the command line). + Users simply type make xt_reactor=1 to enable this feature, or + set xt_reactor to 1 in the platform_macros.GNU file. + Some extra macros were added for platforms that require special + CPP, LD or libraries when linking against X/Windows. The macros + are described in this file. + The platforms that already had XtReactor compiled by default + still do. + + * ace/config-irix6.x-sgic++-nothreads.h: + * include/makeinclude/platform_irix6.x-sgic++.GNU: + Now the XtReactor configuration is controlled on the platform + file. + + * ACE-INSTALL.html: + Updated documentation for make flags. + + * tests/XtReactor_Test.cpp: + Fixed a few typos. + + * tests/Conn_Test.cpp: + Fixed some template instantiation pragmas. + +Thu Jun 11 22:05:31 1998 David L. Levine + + * tests/Process_Mutex_Test.cpp (main): kill children on + Solaris/i386 instead of waiting for them. (acquire_release): + added printout at top. It never appears, at least on + g++/Solaris/i386. + + * ace/Malloc.cpp (instance): wrap declaration of local "assertion" + with ifndef ACE_NDEBUG, to avoid warning about unused variable + with debug=0. + +1998-06-11 Alexander Babu Arulanthu + + * ace/Proactor.h (ACE_Proactor): Put insert_aiocb_list () under + ACE_HAS_AIO_CALLS so that it doesnt break in NT. + +Thu Jun 11 1998 Alexander Babu Arulanthu + + * ace/OS.h: Added typedef's, #define's and #include's under the + definition ACE_HAS_AIO_CALLS for the proactor porting. + + * ace/config-sunos5.6.h: Defined ACE_HAS_AIO_CALLS for + solaris2.6. + + * ace/Asynch_IO.h: + * ace/Asynch_IO.cpp: Added aio call support for Asynch_Read_File. See + the code under #if defined (ACE_HAS_AIO_CALLS) + + * ace/Proactor.h: + * ace/Proactor.cpp: Added support for AIO calls in Proactor. See + the code under #if defined (ACE_HAS_AIO_CALLS) + + * examples/Reactor/Proactor/test_proactor_with_aio.cpp: The test + program for Proactor doing aio stuff. + +Thu Jun 11 13:34:26 1998 Darrell Brunsch + + * ace/OS.cpp: Made change to uname to use a different structure + if certain Borland compilers are being used. Thanks to + Valik Solorzano for this fix. + + * bin/make_release: create .zip files in addition to .tar.gz files. + +Thu Jun 11 11:15:26 1998 Carlos O'Ryan + + * ace/XtReactor.cpp: + The notify_handler_ open method requires an extra argument. + +Wed Jun 10 14:31:55 1998 David L. Levine + + * ace/Strategies_T.cpp (ACE_Recyclable ctors): reordered + initializers to match declaration order. + + * tests/Conn_Test.cpp: fixed template instantiations: + ACE_SYNCH_MUTEX instead of ACE_SYNCH_RW_MUTEX. + + * tests/XtReactor_Test.cpp (main): added ACE_UNUSED_ARGS for + argc and argv without ACE_HAS_XT. + +Wed Jun 10 12:34:25 1998 Irfan Pyarali + + * ace/Strategies_T: Added two new template classes: ACE_Recyclable + and ACE_Hash_Recyclable. ACE_Recyclable adds a recyclable flag + to the class it is instantiated with. ACE_Hash_Recyclable + inherits from ACE_Recyclable and forces the class it is + instantiated with to have a hash() method. + + Also, the Hash_Addr was fixed so that it does not have the + recyclable flag anymore, since the Hash_Addr can be used even + when there is no recycling. + + Also updated the ACE_Cached_Connect_Strategy to reflect these + changes. + + * tests/Conn_Test.cpp: Fixed the template instantiations in lieu + of the changes to Hash_Addr. + +Wed Jun 10 11:05:39 1998 David L. Levine + + * bin/make_release: replaced ACE_wrappers-repository/ with + ACE_wrappers/ in diffs. Thanks to James Risinger + for reporting this. + +Wed Jun 10 01:31:46 1998 Gonzalo Diethelm + + * tests/Tokens_Test.cpp: + Changed how the Borland template instantiations are protected. + + * tests/XtReactor_Test.cpp: + test_config.h must be included before asking for ACE_HAS_XT. + Was missing the Borland non-sense. + + * tests/UPIPE_SAP_Test.cpp: + Protected the Borland template instantiations. + + * tests/Timeprobe_Test.cpp: + * tests/Time_Value_Test.cpp: + Added the Borland non-sense. + + * tests/Reactor_Timer_Test.cpp: + Added a couple of casts to avoid warnings. + + * tests/Priority_Buffer_Test.cpp: + Got rid of a (seemingly) useless piece of code. + + * tests/Naming_Test.cpp: + Modified a test so that it won't give warnings. + + * tests/Conn_Test.cpp: + Was missing the Borland non-sense. + Modified an #if-protected section to get rid of a warning. + Added a few extra Borland template instantiations. + + * ace/WFMO_Reactor.cpp: + * ace/SOCK_Dgram.cpp: + Under Borland, a couple of comparisons were always true (with a + warning) because of unsignedness. + + * ace/Malloc.cpp: + Assigned the consition of an assertion to a temporary variable to + avoid a misleading warning. + + * ace/Get_Opt.cpp: + Added an explicit comparison against 0 to avoid a warning. + + * ace/ACED.cpp: + * ace/ACER.cpp: + These files had been commited with ^M at the end of lines. + + * ace/ACE.cpp: + Changed a couple of run time checks for + ACE_DIRECTORY_SEPARATOR_CHAR into compile time tests; that got rid + of a couple of warnings under BCB3 (Borland C++ Builder 3.0). + + * ace/ACE.cpp: + * tests/Conn_Test.cpp: + Used ACE_NOTREACHED to avoid further warnings. + + * ace/OS.h: + Added Borland to the empty definition of ACE_NOTREACHED. + The definition of ACE_SEH_FINALLY for the case of Borland C++ + Builder 3.0 now uses __finally. This allowed most of the tests + that were hanging to complete ok. Thanks to David Tallman + for pointing this out. + +Tue Jun 9 19:35:26 1998 Douglas C. Schmidt + + * ace/XtReactor: Integrated the new XtReactor, which should now + work for Windows NT! Thanks to Kirill Rybaltchenko + for this. + + * tests: Added the new XtReactor_Test.cpp to test the features of + the XtReactor. Thanks to Kirill Rybaltchenko + for this test. + +Tue Jun 09 16:18:54 1998 David L. Levine + + * Makefile: removed old release targets. They're no longer + used, or maintained. + + * include/makeinclude/platform_sunos5_x86_g++.GNU: removed. + Use platform_sunos5_g++.GNU instead, on both sparcs and x86. + +Tue Jun 09 15:25:13 1998 David L. Levine + + * ACE version 4.5.11 released. + +Tue Jun 9 14:59:15 1998 Darrell Brunsch + + * ace/OS.cpp: Made it so both Borland and Microsoft use the + x.wProcessorArchitecture structure for system info. + +Tue Jun 09 14:35:28 1998 David L. Levine + + * tests/Tokens_Test.cpp,UPIPE_SAP_Test.cpp: only need the + template instantiations with Borland C++. + + * bin/make_release: create version diffs, in background, + when creating releases. + +Tue Jun 09 12:50:49 1998 Nanbor Wang + + * ace/ACE_Library.mak: Added Stats.cpp. + +Tue Jun 09 11:51:17 1998 Chris Gill + + * tests/MM_Shared_Memory_Test: added a null pointer check so + test complains rather than crashing when shared allocator fails. + +Mon Jun 8 21:03:23 1998 Douglas C. Schmidt + + * ace/Select_Reactor.cpp (any_ready): Fixed a more unrighteous bug + where we were assigning the values in the wait_set_ rather than + the ready_set_. Thanks to Stefan Ericsson + for reporting this bug. + +Mon Jun 8 19:15:38 1998 Nanbor Wang + + * ace/Malloc.h: + * ace/Malloc_Base.h (ACE_Allocator): Moved the definition of + abstract class ACE_Allocator from Malloc.h to a new file called + Malloc_Base.h to resolve a circular dependency among a bunch of + header files when compiling with UNICODE and inline enabled. + + * ace/SString.i: Changed to include "ace/Malloc_Base.h" to avoid + circular inclusion. + +Mon Jun 08 18:35:23 1998 Steve Huston + + * ACE-INSTALL.html: Added some updated HP-UX info (and a pointer to + Riverace's HP-UX hints page) and removed the warning to not use + MSVC 5.0 SP3 - per results from ace-users discussions last week, + SP3 is getting used successfully. + +Mon Jun 08 13:22:47 1998 David L. Levine + + * ace/Basic_Types.h: set ACE_SIZEOF_LONG_DOUBLE to 12 if + LDBL_MAX_EXP is 16384 and LDBL_DIG is 18. Thanks to + Sree Oggu for reporting this, on + SolarisX86 with Sun C++. + + * ace/Malloc.cpp (instance): cleaned up comments. + +Mon Jun 8 12:12:39 1998 Carlos O'Ryan + + * tests/UPIPE_SAP_Test.cpp: + Template instantiation was not using the ACE_SYNCH macros. + +Mon Jun 8 02:17:54 1998 Gonzalo Diethelm + + * ACE-INSTALL.html: + Added a comment regarding the new port to Borland C++ Builder. + + * ace/ACE.bpg: + * ace/ACED.bpr: + * ace/ACED.cpp: + * ace/ACER.bpr: + * ace/ACER.cpp: + + + * ace/ACE.cpp: + Got rid of unused const int MAX_STRING_SZ = 4096. + + * ace/Asynch_Acceptor.cpp: + * ace/Asynch_IO.cpp: + * ace/Msg_WFMO_Reactor.cpp: + * ace/config-win32-common.h: + Replaced the use of _WIN32_WINNT with ACE_HAS_WINNT4. Borland C++ + Builder doesn't handle _WIN32_WINNT very well when building under + Win95. + + * ace/Asynch_IO.h: + Now ACE_Asynch_Result inherits publicly from OVERLAPPED; + otherwise, Borland C++ Builder refuses to access OVERLAPPED + members. I'm not sure who's right or wrong here. + + * ace/CORBA_Ref.h: + Added an #include "ace/ACE.h". + + * ace/Future.h: + Two cosmetic changes. + + * ace/LOCK_SOCK_Acceptor.cpp: + Added an #include /**/ "ace/LOCK_SOCK_Acceptor.h". + + * ace/Log_Msg.cpp: + Borland C++ Builder doesn't like extern int sys_nerr, so I + protected against it. + + * ace/OS.cpp: + A couple of hacks to handle FILETIMEs and SYSTEM_INFO structs, + which are defined a little different under Borland C++ Builder. + + * ace/OS.h: + Added support for Borland C++ Builder. + + * ace/OS.i: + Borland C++ Builder handles a few functions differently: close, + SetFilePointer, wfdopen. + + * ace/Synch_T.h: + A comment on an #else spanned several lines and mixed // and /**/ + styles; hard to read. + + * ace/TTY_IO.cpp: + A switch was not properly indented and, as a result, had an extra + break that made Borland C++ Builder complain. + + * ace/WFMO_Reactor.cpp: + Got rid of a couple of unused local variables called result. + + * ace/config-win32-common.h: + Added a few defines for Borland C++ Builder. Don't know if + this is the proper way to do it, but there it is. + + * tests/Aio_Platform_Test.bpr: + * tests/Atomic_Op_Test.bpr: + * tests/Barrier_Test.bpr: + * tests/Basic_Types_Test.bpr: + * tests/Buffer_Stream_Test.bpr: + * tests/Conn_Test.bpr: + * tests/Enum_Interfaces_Test.bpr: + * tests/Env_Value_Test.bpr: + * tests/Future_Test.bpr: + * tests/Handle_Set_Test.bpr: + * tests/Hash_Map_Manager_Test.bpr: + * tests/IOStream_Test.bpr: + * tests/MM_Shared_Memory_Test.bpr: + * tests/MT_Reactor_Timer_Test.bpr: + * tests/MT_SOCK_Test.bpr: + * tests/Map_Manager_Test.bpr: + * tests/Mem_Map_Test.bpr: + * tests/Message_Block_Test.bpr: + * tests/Message_Queue_Notifications_Test.bpr: + * tests/Message_Queue_Test.bpr: + * tests/Naming_Test.bpr: + * tests/Notify_Performance_Test.bpr: + * tests/OrdMultiSet_Test.bpr: + * tests/Pipe_Test.bpr: + * tests/Priority_Buffer_Test.bpr: + * tests/Priority_Reactor_Test.bpr: + * tests/Priority_Task_Test.bpr: + * tests/Process_Mutex_Test.bpr: + * tests/Process_Strategy_Test.bpr: + * tests/Reactor_Exceptions_Test.bpr: + * tests/Reactor_Notify_Test.bpr: + * tests/Reactor_Performance_Test.bpr: + * tests/Reactor_Timer_Test.bpr: + * tests/Reactors_Test.bpr: + * tests/Reader_Writer_Test.bpr: + * tests/Recursive_Mutex_Test.bpr: + * tests/SOCK_Connector_Test.bpr: + * tests/SOCK_Test.bpr: + * tests/SPIPE_Test.bpr: + * tests/SString_Test.bpr: + * tests/SV_Shared_Memory_Test.bpr: + * tests/Semaphore_Test.bpr: + * tests/Service_Config_Test.bpr: + * tests/Sigset_Ops_Test.bpr: + * tests/Simple_Message_Block_Test.bpr: + * tests/TSS_Test.bpr: + * tests/Task_Test.bpr: + * tests/Thread_Manager_Test.bpr: + * tests/Thread_Mutex_Test.bpr: + * tests/Thread_Pool_Test.bpr: + * tests/Time_Service_Test.bpr: + * tests/Time_Value_Test.bpr: + * tests/Timer_Queue_Test.bpr: + * tests/Tokens_Test.bpr: + * tests/UPIPE_SAP_Test.bpr: + * tests/tests.bpg: + Added these Borland C++ Builder project files. + + * tests/Aio_Platform_Test.cpp: + * tests/Atomic_Op_Test.cpp: + * tests/Barrier_Test.cpp: + * tests/Basic_Types_Test.cpp: + * tests/Buffer_Stream_Test.cpp: + * tests/Enum_Interfaces_Test.cpp: + * tests/Env_Value_Test.cpp: + * tests/Future_Test.cpp: + * tests/Handle_Set_Test.cpp: + * tests/Hash_Map_Manager_Test.cpp: + * tests/IOStream_Test.cpp: + * tests/MM_Shared_Memory_Test.cpp: + * tests/MT_Reactor_Timer_Test.cpp: + * tests/MT_SOCK_Test.cpp: + * tests/Map_Manager_Test.cpp: + * tests/Mem_Map_Test.cpp: + * tests/Message_Block_Test.cpp: + * tests/Message_Queue_Notifications_Test.cpp: + * tests/Message_Queue_Test.cpp: + * tests/Naming_Test.cpp: + * tests/Notify_Performance_Test.cpp: + * tests/OrdMultiSet_Test.cpp: + * tests/Pipe_Test.cpp: + * tests/Priority_Buffer_Test.cpp: + * tests/Priority_Reactor_Test.cpp: + * tests/Priority_Task_Test.cpp: + * tests/Process_Mutex_Test.cpp: + * tests/Process_Strategy_Test.cpp: + * tests/Reactor_Exceptions_Test.cpp: + * tests/Reactor_Notify_Test.cpp: + * tests/Reactor_Performance_Test.cpp: + * tests/Reactor_Timer_Test.cpp: + * tests/Reactors_Test.cpp: + * tests/Reader_Writer_Test.cpp: + * tests/Recursive_Mutex_Test.cpp: + * tests/SOCK_Connector_Test.cpp: + * tests/SOCK_Test.cpp: + * tests/SPIPE_Test.cpp: + * tests/SString_Test.cpp: + * tests/SV_Shared_Memory_Test.cpp: + * tests/Semaphore_Test.cpp: + * tests/Service_Config_Test.cpp: + * tests/Sigset_Ops_Test.cpp: + * tests/Simple_Message_Block_Test.cpp: + * tests/TSS_Test.cpp: + * tests/Task_Test.cpp: + * tests/Thread_Manager_Test.cpp: + * tests/Thread_Mutex_Test.cpp: + * tests/Thread_Pool_Test.cpp: + * tests/Time_Service_Test.cpp: + * tests/Time_Value_Test.cpp: + * tests/Timer_Queue_Test.cpp: + * tests/Tokens_Test.cpp: + * tests/UPIPE_SAP_Test.cpp: + Added the Borland non-sense to allow the tests to link against the + ACE library under Borland C++ Builder. Major pain in the rear + end... + + * tests/test_config.h: + Added a couple of includes for the case of Borland C++ Builder. + + * tests/Hash_Map_Manager_Test.cpp: + Changed variable name allocator to alloc, to avoid conflicts with + STL allocators under Borland C++ Builder. + + * tests/Reactors_Test.cpp: + Changed variable name tm to thr_mgr, to avoid conflicts with + std::tm under Borland C++ Builder. + + * tests/Tokens_Test.cpp: + * tests/UPIPE_SAP_Test.cpp: + Added a few explicit template instantiations. + +Sun Jun 07 09:51:02 1998 David L. Levine + + * ace/Timeprobe_T.cpp: added #include of ace/Timeprobe.h. + It wouldn't compile on GreenHills without it. + + * STL/bool.h: only #define bool, etc., if _MSC_VER is #defined. + Thanks to Stanley Leeson for + reporting this. + + * tests/Timeprobe_Test.cpp: added #include of ace/Timeprobe.cpp + to pick up template instantiations, if ACE_COMPILE_TIMEPROBES + was not defined. This allows the test to build on platforms + that have explicit template instantiation when libACE was + built without timeprobes enabled. + +Sun Jun 7 01:06:12 1998 Douglas C. Schmidt + + * ace/config-freebsd-pthread.h: Added the + ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS flag to work around problems + with pthreads on FreeBSD. Thanks to Amancio Hasty + for reporting this. + +Sat Jun 6 22:00:54 1998 Douglas C. Schmidt + + * ace/Message_Queue.cpp: Added code so that advance() is more + thread-safe. + + * apps/gperf/src/Options.cpp (operator): Changed ACE_OS::exit() + to ACE_OS::_exit() so we'll leave no trace... + + * apps/gperf/src/Key_List.cpp (output_switch): Fixed another bug + where strcmp() should be generated instead of strncmp(). + + * apps/gperf/src: We no longer call the inline option "GNU" but + now call it "INLINE". + + * apps/gperf/src/{Options.h,Key_List.cpp,Gen_Perf.cpp}: Revised + the LARGE_STACK_ARRAY code so that it only gets compiled if + we're using GCC. + + * apps/gperf/src/Key_List.cpp (output_switch): Fixed a bug where + strcmp() was being used instead of strncmp(). Thanks to C++ + for finding this! + + * apps/gperf/src/Key_List.cpp: Removed all uses of "register" + since C++ compilers can do this automagically... + + * apps/gperf/tests/test.cpp (main): Modified the test program to + use C++ rather than C (ugh!). + + * ace: Added two new files: Timeprobe_T.h and Timeprobe_T.cpp in + order to solve problems with multiply defined symbols. Thanks + to Brian Mendel, David Levine, and Irfan for tracing this down. + +Sat Jun 6 19:10:54 1998 Sergio Flores + + * ace/config-vxworks5.x.h: changes the default thread priority + from 6 to 101. + +Sat Jun 06 16:43:01 1998 David L. Levine + + * ace/Timeprobe.cpp (dtor): inserted missing "[]" in delete of + array. + +Fri Jun 5 11:53:18 1998 Darrell Brunsch + + * ace/Log_Msg.{h,cpp}: Added enable_debug_messages() to do + the opposite of disable_debug_messages(). + + * ace/Parse_Node.cpp: Got rid of all the checks of the + Service Configurator's debug flag. Instead, the checking + will occur in the Service Configurator. + + * ace/Service_Config.cpp: Added to Stephen Coy's changes so + that debug messages are turned back on after the Service + Configurator is done. That way, other code can still use + debug messages. + +Thu Jun 4 12:25:48 1998 Rajiv C. Gandhi + + * apps/gperf/src/Options.h: removing the option to stack + allocate some large arrays as CC does not seem to like it. + + * apps/gperf/src/Key_List.cpp (output_lookup_array): removing + the option to stack allocate some large arrays as CC does + not seem to like it. + + * apps/gperf/src/Gen_Perf.cpp: removing the option to stack + allocate some large arrays as CC does not seem to like it. + +Thu Jun 04 05:03:09 1998 Douglas C. Schmidt + + * ACE version 4.5.10 released. + +Wed Jun 3 02:24:47 1998 Nanbor Wang + + * ace/config-win32-common.h: Instead of defining _MT for users if + it's not defined, spit out an error message and stop the + compilation. Thanks to Barney Dalton + for suggesting this. + +Tue Jun 02 20:03:51 1998 Steve Huston + + * ace/config-hpux-1[01].x-hpc++.h: Added ACE_HAS_USING_KEYWORD for + aC++ on both platforms. + +Tue Jun 02 12:19:29 1998 Nanbor Wang + + * ace/Thread_Manager.cpp (wait_grp,wait_task): These two were + still copying thread_descriptors and deleting the copies + directly. This corrupted the cached thread_descriptor. + Changing them to use Thread_Descriptor_Base solved the problem. + Thanks to Zoran Ivanovic for finding + this. + +Tue Jun 02 08:29:20 1998 David L. Levine + + * include/makeinclude/wrapper_macros.GNU,ACE-INSTALL.html: + moved probe=1 support from individual Makefiles to + wrapper_macros.GNU. + +Tue Jun 02 08:09:41 1998 Steve Huston + + * ace/config-aix-4.1.x.h: Removed ACE_HAS_THREAD_SELF. It was + causing compile failure. Thanks to Lee Nash + for helping to work this out. + +Mon Jun 01 16:19:52 1998 Steve Huston + + * examples/Reactor/Dgram/Dgram.mdp, Dgram.mak: Added these files + to build the examples with MSVC 4.2. + +Mon Jun 01 13:01:14 1998 Irfan Pyarali + + * examples/Reactor/Dgram/Dgram.cpp (run_test): Because of the + delayed de-registration in WFMO_Reactor, WFMO_Reactor was trying + to call handle_close on the Event Handler after it was + destroyed. Solution: dynamically created the Event Handler and + call "delete this" in handle_close. The other alternative was + to call remove_handler with the DONT_CALL flag and to close the + socket in the Event Handler's destructor. + + * ace/Timeprobe: The vxworks compiler is lame as it cannot handle + operator placement new for arrays. Therefore, ACE_Allocator was + removed in favor of regular new and delete. + +Mon Jun 01 09:54:51 1998 David L. Levine + + * tests/Timeprobe_Test.cpp: removed trailing ; from template + instantation pragmas. + + * tests/Conn_Test.cpp,MM_Shared_Memory_Test.cpp, + Priority_Reactor_Test.cpp,SOCK_Test.cpp: replaced + !defined (ACE_WIN32) && !defined (VXWORKS) with + !defined (ACE_LACKS_FORK). + +Sun May 31 23:05:10 1998 David L. Levine + + * ACE-INSTALL.html,include/makeinclude/wrapper_macros.GNU: + added repo=1 make option support. It only helps when + building ACE applications. ACE and TAO still use explicit + instantiation when building their libraries, because it's + easiest to avoid link collisions that way. And it already + works. + +Sun May 31 18:31:24 1998 James C Hu + + * ace/RB_Tree.i: + * ace/RB_Tree.cpp: Changes suggested by Sergio to make it work + with older version of GCC. Referred to RB_Tree_Node_Color + through the parent class RB_Tree_Node_Base. + +Sat May 30 13:14:18 1998 James C Hu + + * ace/RB_Tree.h: Try to put enum into a class again. This time, + created a dummy base class to hold the RED and BLACK enums. + +Sat May 30 08:01:31 1998 David L. Levine + + * ace/RB_Tree.h (RB_Tree_Iterator::operator =): Added explicit + return type to the declaration. Wrapped with + ACE_UNIMPLEMENTED_FUNC. + +Fri May 29 23:06:02 1998 David L. Levine + + * ace/RB_Tree.{h,i}: moved enum RB_Tree_Node_Color out of the + (template) class declaration because g++ 2.7.2.3 couldn't + find it there. + + * ace/Thread_Manager.cpp (remove_thr, VxWorks only): added [] to + delete of tid array. Thanks to Arturo Montes + for reporting this. + + * ace/RB_Tree.h (RB_Tree_Iterator::operator =): added explicit + return type to the declaration. Wrapped with + ACE_UNIMPLEMENTED_FUNC. + +Fri May 29 21:59:01 1998 James C Hu + + * RB_Tree.h: + * RB_Tree.i: + * RB_Tree.cpp: Debugged some minor typo errors, and changes + related to internalizing the RED and BLACK enums. + +Fri May 29 21:55:11 1998 David L. Levine + + * ace/High_Res_Timer.cpp: don't use ACE_HAS_PENTIUM code on + Solaris (ACE_HAS_HI_RES_TIMER) because it uses ::gethrtime (). + (dump): on Solaris, print 64-bit ints with %llu format. Other + platforms may need that, also. + + * ace/Makefile: replaced .o with $(OBJEXT) in gethrtime.o target, + so that make depend doesn't munge it. + + * ace/OS.h: only use the null versions of the + ACE_DES_FREE_TEMPLATE* macros with LynxOS 3.0.0. + + * include/makeinclude/platform_lynxos.GNU: commented out -Winline, + because it complains too much with -O2, and that's now the default. + +Fri May 29 17:52:37 1998 Douglas C. Schmidt + + * ACE version 4.5.9 released. + +Fri May 29 16:19:34 1998 Douglas C. Schmidt + + * ace/Synch_T.h (class ACE_Guard): ACE_Guard's destructor was + changing the errno value. Fixed this to avoid doing so... + Thanks to Arturo Montes for reporting + this. + +Fri May 29 15:33:41 1998 David L. Levine + + * performance-tests/Misc/context_switch_time.cpp: + added Synchronized Suspend-Resume Test. + +Fri May 29 14:46:49 1998 James C Hu + + * ace/Makefile + * ace/RB_Tree.h + * ace/RB_Tree.cpp: Added changes to RB_Tree to enable overloading + of the comparison method. Added class RB_Tree to the UNIX + Makefile. + + * ace/OS.cpp: Added some minor fixes to the difftime implementation. + + * ace/OS.cpp: + * ace/OS.i: + * ace/README: + * ace/config-sunos4*: + Added ACE_LACKS_DIFFTIME macro because SunOS4 does not support + the Standard C difftime function. Added a difftime + implementation for when such is the case. + +Fri May 29 08:22:36 1998 Steve Huston + + * ace/Log_Msg.cpp, Trace.cpp: Changed decision for + order-of-include/inline from ACE_WIN32 to + ACE_HAS_ONE_DEFINITION_RULE. This completes the changes needed + to be able to use the newer versions of HP aC++. + + * ace/config-win32.h: Set ACE_HAS_ONE_DEFINITION_RULE. + +Thu May 28 16:17:41 1998 Steve Huston + + * ace/README: Added ACE_HAS_ONE_DEFINITION_RULE. + * ace/config-hpux-10.x-hpc++.h: + * ace/config-hpux-11.x-hpc++.h: Added ACE_HAS_ONE_DEFINITION_RULE + for aC++. This is part of a set of changes to make ACE work + with HP aC++ A.01.09 (10.20) and A.03.05 (11.00). The other + changes are being tested still. Thanks _very_ much to Steve Coy + for digging through this with HP and working out a solution! + +Thu May 28 15:55:48 1998 Douglas C. Schmidt + + * Added new configuration files for SCO. Thanks to Arturo for + this. + +Thu May 28 13:57:50 1998 David L. Levine + + * ace/Filecache.cpp: removed redundant template instantiations. + + * ace/config-lynxos.cpp: added undef ACE_HAS_TEMPLATE_SPECIALIZATION + for LynxOS 3.0.0. + + * ace/Hash_Map_Manager.cpp,Map_Manager.cpp: replaced bare explicit + destructor calls with ACE_DES_FREE_TEMPLATE{,2} macro invocations. + + * ace/OS.h: #define ACE_DES_FREE_TEMPLATE to be null on LynxOS. + Without it, the g++ that's distributed with LynxOS 3.0.0 hopelessly + chokes on explicit calls to template class destructors. This + hack could cause memory leaks, though currently ACE_DES_FREE_TEMPLATE + is only used to call empty, non-virtual destructors (in + Containers.cpp, Hash_Map_Manager.cpp, and Map_Manager.cpp). + Also, added ACE_DES_FREE_TEMPLATE2 macro for use with two + template arguments. There's got to be a better way. + + * include/makeinclude/platform_lynxos.GNU: added LynxOS Version 3.0.0 + support. It's optional at this point: add VERSION=3.0.0 to your + make invocation to enable. Disabled -Wall with LynxOS 3.0.0. + Enabled optimization. + +Thu May 28 07:47:41 1998 Steve Huston + + * tests/SOCK_Connector_Test.cpp: Changed the "should succeed" test + from port 25 (smtp) to 7 (echo) to try and get a higher success + rate. Thanks to David Levine for this suggestion. + +Wed May 27 13:45:24 1998 Steve Huston + + * ace/ACE.cpp (handle_timed_complete): Fixed problem where + successful connect was being reported as a failure (P90). + + * tests/SOCK_Connector_Test.cpp: Added a test for a successful + non-blocking connect (tests fix from above). + +Wed May 27 07:04:42 1998 David L. Levine + + * ace/Service_Config.cpp: default debug_ to 1 instead + of 0. And the -d option now disables debug messages, + instead of enabling them. Thanks to Irfan for reporting + that LM_DEBUG messages were lost without this fix. + + * ace/High_Res_Timer (calibrate): added calibrate () method + to calculate the global scale factor on Pentiums. It's + called by the constructor for the first instantiation + in a process. (On WIN32, get_registry_scale_factor () is + called instead of calibrate ().) + + * ace/Stats.cpp (sample): continue aggregating data even + if there is overflow. This allows, e.g., a mean to be + calculated even if the standard deviation calculation overflow. + + * performance-tests/Misc/context_switch_time.cpp: don't run the + Yield_Test on VxWorks because it takes too long. + + * ace/High_Res_Timer.*: moved calibration from constructor to + global_scale_factor () accessor. + + * ace/Timeprobe.cpp: no longer need to explicitly calibrate the + High_Res_Timer. + +Tue May 26 22:25:18 1998 Stephen Coy + + * ace/Log_Msg.{h,cpp},Service_Config.cpp: added support for + -d in Service_Config files to enable/disable LM_DEBUG messages. + +Tue May 26 14:53:21 1998 Steve Huston + + * ace/SOCK_Dgram_Mcast.cpp (subscribe): Fixed use of uninitialized + variable, nr_subscribed. Thanks to Nanbor for finding this. + +Tue May 26 13:39:21 1998 Carlos O'Ryan + + * ace/Timeprobe.cpp: + * tests/Timeprobe_Test.cpp: + Now egcs and Sun/CC are happy with this files. + +Tue May 26 00:35:49 1998 Irfan Pyarali + + * tests/Timeprobe_Test.cpp: Added new test. + + * ace/Timeprobe: Added the ability to have multiple event tables + for time probes. Multiple maps can be used to chunk up the time + probes. Each one can be added by calling event_descriptions(). + Different tables are used internally by consulting the + minimum_id for each table. It is up to the user to make sure + that multiple tables do not share the same event id range. + +Sat May 23 21:52:49 1998 Carlos O'Ryan + + * ace/Message_Block.h: + * ace/Message_Block.i: + The rd_ptr() and wr_ptr() are const methods now. + +Sat May 23 00:18:58 1998 Nanbor Wang + + * ace/ace_ce_dll.dsp: Updated settings for MIPS CPU. + + * tests/WinCE/*.dsp: Updated settings for MIPS CPU. + +Fri May 22 16:00:03 1998 Douglas C. Schmidt + + * tests/MT_SOCK_Test.cpp (spawn): We must check for !defined + (ACE_LACKS_FORK) rather test for VxWorks or Win32. Thanks to + Steven Coy for reporting this. + +Fri May 22 20:01:40 1998 David L. Levine + + * ace/OS.h: moved ACE_IO_Vector declaration ahead of OS.i #include. + + * ace/OS.i (ACE_IO_Vector::buffer): added static cast of new_buffer + to char *. + + * ace/OS.i (writev): changed return type from int to ssize_t to + match declaration in OS.h. + +Fri May 22 12:20:11 1998 Irfan Pyarali + + * ace: Other parts of ACE were modified to use the new + ACE_IO_Vector class. + + * ace/OS.h (ACE_IO_Vector): Added a new class that inherits from + the correct IO_Vector class provided by the platform. + + writev() and readv() were being emulated on Win32 in ACE. A new + ACE_OS::writev() and ACE_OS::readv() has been added to ACE + that uses WSASend() and WSARecv() respectively. However, in + order for you to exploit these new functions, you must use + ACE_IO_Vector instead of iovec. The ideal situation would have + been to totally replace iovec with ACE_IO_Vector but that would + break too much code. So, if you keep using iovec, you will use + the expenses and slow emulations. If you want to use WSASend() + and WSARecv(), switch over to ACE_IO_Vector. It will work on + both Win32 and non-Win32 platforms. + +Fri May 22 07:53:03 1998 David L. Levine + + * ace/config-linux-pthread.h: removed two + ACE_LACKS_CONDATTR_PSHARED #defines. That leaves just + one, that's commented out. + + * performance-tests/Misc/context_switch_time.cpp: create all + threads as detached so they don't have to be joined. They + test was using up resources on LynxOS, if a high -c option + was used, without this change. + + * ace/config-sunos5.5-{g++,sunc++-4.x}.h,config-sunos5.5.h: + merged config-sunos5.5-g++.h and config-sunos5.5-sunc++-4.x.h + into config-sunos5.5.h. That new file should be maintained + for both compilers from now on. The old files have been + retained for backward compatibility. The just #include + config-sunos5.5.h. + + * ace/config-sunos5.6.h: #include config-sunos5.5.h instead + of the separate Sun C++ and g++ configs. + + * include/makeinclude/platform_sunos5_sunc++.GNU: + updated comment to reflect change to config-sunos5.5.h. + +Fri May 22 07:30:23 1998 David L. Levine + + * ACE version 4.5.8 released. + +Fri May 22 07:26:06 1998 David L. Levine + + * ace/Stats.cpp: added some casts to avoid MSVC++ warnings + about narrowing. + + * ace/config-osf1-4.0.h: removed commented-out + ACE_LACKS_{COND,MUTEX}ATTR_PSHARED. + +Fri May 22 00:09:15 1998 Nanbor Wang + + * ace/Local_Tokens.{h,cpp} (ACE_Null_Token): Only defined default + ctor/dtor explicitly when ACE_LACKS_INLINE_FUNCTIONS. + + * ace/Stats.cpp: Defined ACE_BUILD_DLL at the beginning. + Win32 needs to define ULONGLONG literals as 999ui64. + This is the only place that uses i64 literals. + +Thu May 21 21:55:09 1998 David L. Levine + + * ACE version 4.5.7 released. + +Thu May 21 17:36:37 1998 David L. Levine + + * ace/config-sunos5.6.h: added support for POSIX 199506 + extensions. Thanks to J. Russell Noseworthy + for providing this support. + + * ace/Local_Tokens.{h,i}: inlined ACE_Null_Token ctor and dtor + in class header because the clone () method needs the ctor + inlined, and it's too difficult to get it right with macros. + + * tests/SString_Test.cpp (main): added ACE_ASSERT with s4 in + it, because it was unused otherwise. + + * performance-tests/Synch-Benchmarks/Options.cpp (print_results): + changed #else to #elif, because it has a condition after it. + +Thu May 21 15:28:07 1998 Nanbor Wang + + * tests/test_config.h: Modified to write output from tests into + log file. Notice that log files on CE have extension name + ".txt" instead of ".log". + + * ace/OS.i (strrchr): Added UNICODE version of this function. + + * ace/Log_Record.{h,cpp}: Generalized message formatting on CE by + adding a new method format_msg(). + + * ace/Reactor_Impl.h: Removed an extra comma. + + * ace/XtReactor.cpp: Include "ace/Reactor.h" + + * tests/Recursive_Mutex_Test.cpp: + * tests/Future.cpp: Removed iteration restriction on CE. + +Thu May 21 12:13:36 1998 Nanbor Wang + + * ace/ace_{dll,lib}.dsp: Added Stats.cpp into projects. + +Wed May 20 23:02:41 1998 Steve Huston + + * ace/SOCK_Dgram_Mcast.cpp (subscribe): On Win32, if + ACE::get_ip_interfaces finds less than 2 interfaces, call + subscribe with "0.0.0.0". This is sort of a hack and is meant + only to help get things working again until ACE::get_ip_interfaces + can be made to work correctly in all cases. + +Wed May 20 10:42:12 1998 David L. Levine + + * ace/config-mvs.h: enabled ACE_LACKS_CONDATTR_PSHARED and + ACE_LACKS_MUTEXATTR_PSHARED. Thanks to Chuck Gehr + for advising on this. + + * ace/config-linux-lxpthreads.h,config-lynxos.h: removed + commented-out ACE_LACKS_{COND,MUTEX}ATTR_PSHARED #defines. + + * ace/config-sunos5.5-{sunc++-4.x,g++}.h: removed + commented-out ACE_LACKS_{COND,MUTEX}ATTR_PSHARED. Enabled + ACE_HAS_CLOCK_GETTIME, because we always link with -lposix4. + Thanks to J. Russell Noseworthy + for inspiring the ACE_HAS_CLOCK_GETTIME enable. + + * ace/config-osf1-4.0.h: removed uncommented + ACE_LACKS_CONDATTR_PSHARED, so that we can test whether + it's necessary. + + * ace/Stats.*,Makefile: added ACE_Stats class. + + * performance-tests/Misc/context_switch_time.cpp: use + ACE_Stats to calculate standard deviations. + +Tue May 19 21:24:50 1998 Nanbor Wang + + * tests/Future_Test.cpp: Reduced the number of iterations on CE. + + * ace/Synch.i: Added #ifdef (ACE_HAS_THREADS) to make it compile + on non-threaded platforms. + +Tue May 19 10:05:07 1998 Irfan Pyarali + + * ace/SString.cpp (strlen): Renamed ACE_WString::wstrlen to + ACE_WString::strlen. + + * ace/SString.i: Reordered functions to make g++ happy. + + * ace/ACE.cpp (hash_pjw): Changed ACE_OS::strlen to + ACE_WString::strlen. + +Tue May 19 09:52:08 1998 Carlos O'Ryan + + * ace/config-irix6.x-g++.h: + * ace/config-irix6.x-sgic++-nothreads.h: + * ace/config-irix6.x-sgic++.h: + Added ACE_LACKS_MUTEXATTR_PSHARED + +Mon May 18 16:37:36 1998 Irfan Pyarali + + * ace/SString.h (ACE_CString): Added the ability to hold on to + user supplied character strings without having to make a copy. + + * ace/OS.h (ACE_OS): Added implementations for strrchr, strnchr, + strnstr, and strstr. + + * ace/ACE.cpp (hash_pjw): Added new versions of these that work + with user specified string length. + +Mon May 18 12:24:40 1998 Douglas C. Schmidt + + * ace/config-*.h: Commented out most of the + ACE_LACKS_CONDATTR_PSHARED so we can see what platforms really + DON'T support this... + + * ace/OS.i (mutex_init): Added support for + pthread_mutexattr_setpshared() so we can initialize POSIX + pthreads process-wide mutexes. Thanks to Ki-hyun Yoon + for suggesting this. + + * ace/config-sunos5.6.h: Added an #define for + ACE_THREAD_POSIX_SEM. Thanks to Ki-hyun Yoon + for reporting this. + + * ace/config-sunos5*.h: Removed the ACE_LACKS_RWLOCK_T stuff since + it's unnecessary. Thanks to Chris Lahey for reminding me of + this... + +Mon May 18 13:48:14 1998 Nanbor Wang + + * ace/Synch.i: Added #ifdef (ACE_HAS_THREADS) to make it compile + on non-threaded platforms. + +Mon May 18 12:31:32 1998 Darrell Brunsch + + * ace/Service_Config.{h,i,cpp}: Added an accessor debug() for + external access to the variable. More debug messages + check this before displaying. + + * ace/Parse_Node.cpp: Checks Service_Config's debug flag before + outputting debug messages. + +Sun May 17 23:14:32 1998 Nanbor Wang + + * tests/Wince/*.dsp: Disabled precompiled headers. They ate up + all my disk space. + + * ace/Service_Config.cpp: takes a string of + type ASYS_TCHAR. Use ACE_WIDE_STRING to do the conversion. + + * ace/Log_Msg.{h,cpp} (ACE_ASSERT): Use unicode in ACE_ASSERT. + (log): Don't exit the program for now. Exiting program here + destroys all debugging message in the window. + + * tests/Reader_Writer_Test.cpp: Reduced the number of iterations + on WinCE. + + * ace/OS.i: Added ACE_OS::time () implementation for CE. + +Sun May 17 21:45:07 1998 David L. Levine + + * performance-tests/Misc/childbirth_time.cpp: changed type of + MULTIPLY_FACTOR from int to size_t to avoid signed/unsigned + comparison. + + * tests/Tokens_Test.cpp: synchronize start of thread svc () + routines. Occasionally, the first thread would finish before + any others had started. The TSS objects would get cleaned + up. Then, the remaining threads would start up and make a big + mess. + +Sat May 16 15:10:46 1998 Douglas C. Schmidt + + * ace/Service_Config.h (ACE_Service_Config): Moved the + process_directive() into the public part of the class so this + can be called by applications one the Service Configurator is + open. Thanks to Tom Arbuckle + for suggesting this. + +Sat May 16 14:12:09 1998 Nanbor Wang + + * ace/Thread_Manager.{h,i,cpp} (class ACE_Thread_Descriptor_Base): + Extract thread handle and thread creation flags out from + Thread_Descriptor into this new class. This is necessary + because after my last round of changes to improve + ACE_Thread_Manager, I changed the from + holding Thread_Descriptor's to holding pointers to descriptor. + This was a bad move because the address of these pointers had + already been "freed." The now holds + ACE_Thread_Descriptor_Base which contains only the information + needed for manipulating . Thanks to Arturo + for noticing this. + +Sat May 16 03:23:35 1998 Nanbor Wang + + * performance-tests/Misc/childbirth_time.cpp (main): Added a new + function to test the performance of ACE_Thread_Mutex in single + thread _without_ any contention. + +Fri May 15 22:55:51 1998 Nanbor Wang + + * tests/Recursive_Mutex_Test.cpp: Only iterate the test 50 times + on CE as on Chorus. Otherwise, as I'm using a CEdit to hold the + test output, CEdit would overflow. + + * ace/OS.i (thr_getspecific): Don't check for return value of + TlsGetValue on CE because CE doesn't seem to set the LastError + correspondingly. + (strchr): Added implementation on CE. + + * Added Activation_Queue.i and Strategies.i. + + * Combed thru all these files and added difinitions for ctor/dtor + for a bunch of classes explicitly. CE needs them. + + Activation_Queue.cpp Activation_Queue.h Dynamic.h Dynamic.i + Event_Handler.h Event_Handler.i Get_Opt.h Get_Opt.i Handle_Set.h + Handle_Set.i High_Res_Timer.h High_Res_Timer.i INET_Addr.h + INET_Addr.i IO_SAP.h IO_SAP.i IPC_SAP.h IPC_SAP.i Local_Tokens.h + Local_Tokens.i Log_Record.h Log_Record.i Malloc.h Malloc.i OS.h + OS.i Obstack.cpp Obstack.h Obstack.i Parse_Node.h Parse_Node.i + Pipe.h Pipe.i Process_Manager.h Process_Manager.i SOCK.h SOCK.i + SOCK_Acceptor.cpp SOCK_Acceptor.h SOCK_Acceptor.i SOCK_CODgram.h + SOCK_CODgram.i SOCK_Connector.h SOCK_Connector.i SOCK_Dgram.h + SOCK_Dgram.i SOCK_Dgram_Bcast.h SOCK_Dgram_Bcast.i + SOCK_Dgram_Mcast.h SOCK_Dgram_Mcast.i SOCK_IO.h SOCK_IO.i + SOCK_Stream.h SOCK_Stream.i SString.h SString.i Sched_Params.h + Sched_Params.i Select_Reactor.h Select_Reactor.i + Service_Manager.h Service_Manager.i Service_Repository.h + Service_Repository.i Service_Types.h Service_Types.i + Shared_Object.h Shared_Object.i Signal.h Signal.i Strategies.cpp + Strategies.h Strategies.i Strategies_T.cpp Strategies_T.h + Synch.cpp Synch.h Synch.i Synch_Options.cpp Synch_Options.h + Synch_Options.i Timer_Heap_T.cpp Timer_Heap_T.h Timer_List_T.cpp + Timer_List_T.h Timer_Queue_T.cpp Timer_Queue_T.h + Timer_Wheel_T.cpp Timer_Wheel_T.h. + +Fri May 15 16:55:34 1998 Douglas C. Schmidt + + * ace/config-sunos5*.h: Automatically enable ACE_LACKS_RWLOCK_T if + we're NOT using Solaris threads (since pthreads doesn't support + readers/writer locks). + + * ace/Service_Config.cpp: Removed a duplicate template + instantiation of template class + ACE_Unbounded_Queue_Iterator. Thanks to Ben Eng + for reporting this. + + * ace/OS: Fixed a number of problems that occurred when trying to + use the PTHREAD implementation on Solaris without using + ACE_HAS_STHREADS. The problems related primarily to the + ACE_OS::rw*() functions. To fix the problems, the following + changes were made. + + Remove the #if defined (ACE_HAS_STHREADS) from the case where we + have the native rw*() functions. We just use the + ACE_LACKS_RWLOCK_T compile flag to determine whether we have the + native functions. + + Without the ACE_HAS_STHREAD flag, ACE_rwlock_t comes up + undefined. To fix this, moved the definition at approx. line + 1868 above the #else at approx. line 1865 as the following: + + #if ! defined (ACE_LACKS_RWLOCK_T) + #include + typedef rwlock_t ACE_rwlock_t; + #endif // ! ACE_LACKS_RWLOCK_T + + Finally, the ACE_idtype_t type was also undefined. To fix this, + moved the typedef from within the #if defined (ACE_HAS_STHREADS) || + defined (DIGITAL_UNIX) block and create a new ifdef block: + + #if defined (ACE_HAS_IDTYPE_T) + typedef idtype_t ACE_idtype_t; + #else + typedef int ACE_idtype_t; + #endif + + Thanks to Chris Lahey for his through help at + recognizing and fixing these problems. + +Fri May 15 09:38:37 1998 David L. Levine + + * bin/make_release: redirect cvs tag output to /dev/null. + + * performance-tests/Misc/context_switch_time (main): fixed + printout of yield test time for other than the default + number of iterations. + +Fri May 15 09:29:57 1998 David L. Levine + + * ACE version 4.5.6 released. + +Fri May 15 08:25:19 1998 David L. Levine + + * ace/Service_Config.cpp: fixed and added template instantations. + + * ace/Svc_Conf_y.cpp,etc/Svc_Conf_y.cpp.diff: removed compile + warnings. + + * include/makeinclude/platform_sunos5_g++.GNU: use PIC instead of pic, + because the TAO orbsvcs lib needs it. + + * Makefile: added .PHONY for phony targets. + +Fri May 15 02:47:35 1998 Douglas C. Schmidt + + * ACE version 4.5.5 released. + +Fri May 15 02:42:06 1998 Douglas C. Schmidt + + * ACE version 4.5.4 released. + +Thu May 14 15:28:42 1998 Douglas C. Schmidt + + * ace/config-kcc-common.h: Added the ACE_HAS_USING_KEYWORD to the + config file. Thanks to Ben Eng for reporting + this. + + * examples/Service_Configurator/Misc: Updated the Timer_Service + test to demonstrate the new service configurator feature. It's + AWESOME! + + * ace/Svc_Conf.h, + ace/Svc_Conf.l: + Added a super-cool new feature that allows us to parse service + configurator directives from a string rather than from a + svc.conf file. + + * ace/Svc_Conf.l (yywrap): Free up ace_yy_current_buffer in yywrap + to prevent a memory leak. Thanks to Paul Motuzenko + for reporting this. + + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-poll.cpp: Enhanced the + implementation to make it easier to follow and to support the + latest features of CPP-inclient.cpp. + + * ace/OS.h (ACE_OS): Added a wrapper for strcspn(3s). + + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp: Added more + cool changes to the CPP-inserver.cpp example and renamed it. + +Thu May 14 14:46:02 1998 Irfan Pyarali + + * ace/OS.h: Moved the definition of ACE_Export before it is used. + +Thu May 14 13:22:46 1998 Carlos O'Ryan + + * ace/Message_Block.h: + * ace/Message_Block.cpp: + The static duplicate() method can take pointer to a const + Message_Block. + +Wed May 13 18:46:28 1998 Douglas C. Schmidt + + * examples/IPC_SAP/SOCK_SAP/CPP-{inserver,inclient}.cpp: Added + profile timing to the server so we can compute socket + performance metrics. Also generalized the tests so we can + experiment with both oneway and twoway calls. + +Wed May 13 19:20:27 1998 James C Hu + + * ace/OS.h: + * ace/OS.i: + * ace/OS.cpp: Added a substitute gets implementation for when + ACE_LACKS_GETS. The substitute is actually safer than gets, so + I may end up making gets call the new routine instead of + Standard C's. + + * ace/config-g++-common.h: Changed the g++ common file so that + 2.8.1 acts like EGCS does. This worked on Solaris 2.5.1. We'll + see how other's fare. + +Wed May 13 18:13:12 1998 Douglas C. Schmidt + + * ACE version 4.5.3 released. + +Wed May 13 11:29:56 1998 Nanbor Wang + + * performance-tests/Synch-Benchmarks/Options.cpp (print_results): + My previous change to add print_results functionality when + ACE_HAS_GETRUSAGE broke this on Win32. + + * ace/config-g++-common.h (ACE_HAS_GNUC_BROKEN_TEMPLATE_INLINE_FUNCTIONS): + Made this macro defined for all versions of g++. + +Wed May 13 09:26:48 1998 David L. Levine + + * many *.{h,i,cpp,idl} files: inserted RCS keyword string. + +Wed May 13 00:35:25 1998 Irfan Pyarali + + * ace: Added ACE_Export to a bunch of class in ACE. Thanks to + Gonzalo A. Diethelm (gonzo@ing.puc.cl) for pointing this out. + +Tue May 12 15:16:04 1998 Nanbor Wang + + * ace/config-WinCE.h: + * ace/OS.h: Stopped using non-static object manager for CE. This + is causing some problem at process shutdown. + + * ace/Acceptor.cpp: Made CE friendly. + + * ace/Process.cpp ([~]ACE_Process_Options): Moved things around to + avoid compilation errors on CE. Secret: CE doesn't have + environment variables. + +Tue May 12 13:28:05 1998 Carlos O'Ryan + + * ace/OS.h: + The ACE_INLINE_FOR_GNUC macro must be defined (as the null + token) if ACE_HAS_GNUC_BROKEN_TEMPLATE_INLINE_FUNCTION is not + defined. + +Tue May 12 12:30:55 1998 Nanbor Wang + + * ace/README: + * ace/config-g++-common.h (ACE_HAS_GNUC_BROKEN_TEMPLATE_INLINE_FUNCTIONS): + Added this new macro to get around a bug which only happens in + GNUC 2.7.xx. It mistakenly refers to the template definition as + the place where a function is used. + + * ace/OS.h (ACE_INLINE_FOR_GNUC): Added the macro to fix the GNUC + bug. + + * ace/Thread_Manager.h: Added above macro to set_next and + get_next. + +Tue May 12 12:11:36 1998 Bob Laferriere + + * ace/Process.{h,cpp}: modifications to make the environment buffer + and number of environment variables tunable in the constructor. + I also fixed a logic error which previously attempted to write + beyond an array bounds of the array of pointers into the + environment buffer. I made the environment_argv_ buffer tunable + as well. The new constructor takes the old hardcoded static sizes + as the default dynamic sizes for backwards compatiblity. + The behavior is to return -1 if the maximum buffer size or + maximum number of environment arguments has been reached in + following with the prior behavior. I opted not to make the members + grow as needed so the class would still follow it's prior behavior. + This would be simple to add, however. + +Tue May 12 08:29:50 1998 David L. Levine + + * ace/Malloc.cpp (ACE_Allocator::instance): replaced dynamic + allocation of the default ACE_Allocator with allocation from + the data segment. Thanks to Ben Eng for + providing the stack trace that revealed the problem. + + * ace/Malloc.h: added comments to not add data members to + ACE_Allocator or ACE_New_Allocator. + + * bin/g++dep: changed PATH to pick up /project/doc/pkg/gnu/bin/g++, + and removed GNUG_INCLUDE. Thanks to Ganesh Pai + for reporting problems with the old version on Linux. + +Tue May 12 02:59:27 1998 Nanbor Wang + + * performance-tests/Misc/childbirth_time.cpp: Added ACE_OS::sleep + (0) before all timing sections start. This ensures we own a + fresh time slice when the timing begin and reduce the chances of + getting preempted + +Tue May 12 00:42:05 1998 Nanbor Wang + + * bin/dsp2dsp.pl: This file clones a new MSVC 5.0 dsp file based + on setting from another dsp file. It is most useful in adding + new project files into tests/. + + * tests/WinCE/*: New project files. Updated the workspace. + Please see CE-status for the current progress. + + * tests/Buffer_Stream_Test.cpp: + * tests/Conn_Test.cpp: + * tests/Enum_Interfaces_Test.cpp: + * tests/Handle_Set_Test.cpp: + * tests/Hash_Map_Manager_Test.cpp: + * tests/Message_Block_Test.cpp: + * tests/Reactors_Test.cpp: + * tests/Thread_Manager_Test.cpp: + * tests/Thread_Mutex_Test.cpp: Made CE friendly. + + * tests/test_config.h: Moved some common definitions shared among + CE and other platforms out. + + * ace/Acceptor.cpp: + * ace/Acceptor.h: + * ace/Connector.cpp: + * ace/Connector.h: + * ace/Stream.cpp: + * ace/Svc_Handler.cpp: + * ace/Svc_Handler.h: + * ace/Synch.h: + * ace/Synch.i: CE stuff. + + * ace/config-WinCE.h: Defined ACE_DEFAULT_SERVER_HOST in UNICODE + here to overwrite the default setting. + + * ace/Synch.i (ACE_Lock): CE needs a default ctor here. + +Mon May 11 15:43:01 1998 Nanbor Wang + + * tests/WinCE/ce_tests.dsw: + * tests/WinCE/Atomic_Op_Test.dsp: + * tests/WinCE/Barrier_Test.dsp: + * tests/WinCE/Basic_Types_Test.dsp: + * tests/WinCE/Map_Manager_Test.dsp: Added/Updated project files. + + * tests/Atomic_Op_Test.cpp: + * tests/Barrier_Test.cpp: + * tests/Basic_Types_Test.cpp: Made them CE friendly. + + * ace/config-WinCE.h: Only define ACE_LACKS_INLINE_FUNCTIONS when + building debug version of ACE for SH series CPU. + + * WindozeCE/WindozeCEDlg.cpp: Updated the initial message after the + display window but before ACE console progrm started. + + +Mon May 11 15:43:01 1998 Nanbor Wang + + * ace/OS.{i,cpp}: Moved CE's impelmentation of ACE_OS::fprintf to + cpp file. + +Mon May 11 15:15:24 1998 Carlos O'Ryan + + * ace/Thread_Manager.h: + Removed bogus ACE_INLINE macros in class declaration, they were + making the SGI compiler *very* unhappy. + +Mon May 11 15:11:11 1998 Nanbor Wang + + * ace/OS.cpp (ctime_r): Renamed the fmtstr to + ACE_OS_CTIME_R_FMTSTR for we may need to use similar scheme to + fix other bugs in the future. + +Mon May 11 14:50:47 CDT 1998 Everett Anderson + + * ace/Name_Proxy.cpp: Changed one last recv to recv_n. + +Mon May 11 13:14:22 1998 Chris Gill + + * ace/RB_Tree.{cpp,h,i}: (new) Red-Black Tree data structure + implementation. A Red-Black Tree is an efficient + self-balancing binary tree that uses recoloring to + minimize rotations while rebalancing on insertion or + deletion of a tree node. Items in the tree are stored + according to a key provided at insertion. This + implementation is an OO rendition of the ADT described + in Cormen, Leiserson, Rivest, "Introduction to Algorithms" + (c) 1990, MIT. + +Mon May 11 12:31:41 1998 Steve Huston + + * ace/OS.h: Made ACE_LD_SEARCH_PATH, ACE_LD_SEARCH_PATH_SEPARATOR_STR, + ACE_DLL_PREFIX, ACE_DLL_SUFFIX settable via config.h. + + * ace/config-hpux-10.x.h: + ace/config-hpux11.h: Set ACE_LD_SEARCH_PATH, ACE_DLL_SUFFIX. + Thanks to Kirill Rybaltchenko and David Levine for identifying + this problem. + +Mon May 11 12:27:05 1998 David L. Levine + + * ace/ACE.cpp (send_n): retry if ACE::send () fails due to + EWOULDBLOCK. Thanks to Dave Brackman + for reporting this. + + * tests/Env_Value_Test.cpp (main): check return values of + options.setenv () calls. Thanks to Bob Laferriere + for recommending this. + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: instead of + using GNU ranlib386 after using GHS ax for i386 targets, just + use GNU ar386. + + * ace/gethrtime.cpp: added some comments about GHS asm support. + + * java/netsvcs/{Logger,Time}/Makefile, + java/tests/netsvcs/Logger/Makefile: + replaced WRAPPER_ROOT with ACE_ROOT. + +Mon May 11 05:14:18 1998 Nanbor Wang + + * ace/config-WinCE.h: Added ACE_HAS_NON_STATIC_OBJECT_MANAGER. CE + console programs have to set this flag because the main + functions is actually renamed and running in a threads. + + * tests/test_config.h: Excluded class and macros to redirect + debugging messages to files under CE. This make debugging a bit + easier but we should eventually put them back under CE. + + * tests/Map_Manager_Test.cpp: Made CE friendly. + + * ace/Hash_Map_Manager.cpp: Some ACE_ERROR were not CE friendly. + + * ace/Profile_Timer.{h,i}: + * ace/Synch.{h,i}: Moved inline function definitions to Synch.i + file. Windows CE can't grok any inline at all. + +Mon May 11 02:43:45 1998 Nanbor Wang + + * performance-tests/Misc/childbirth_time.cpp (main): Added + a new method for benchmarking ACE_Thread_Manager::spawn_n. + Added other cosmetic changes. + +Sun May 10 23:20:36 1998 Irfan Pyarali + + * ace/Token.cpp: Adding more debugging statements. + + * ace/Asynch_Acceptor.cpp (should_reissue_accept): Added template + method that decides whether a new asynchronous accept should be + issued. + +Sun May 10 23:28:57 1998 Nanbor Wang + + * ace/OS.cpp(inherit_log_msg): + * ace/Log_Msg.cpp (thr_desc): Wait on Thread_Descriptor's lock + instead of the "global" Thread_Manager lock. + + * ace/Thread_Manager.cpp: Moved acquire_release() from + ACE_Thread_Manager to ACE_Thread_Descriptor. This method is + called from ACE_Log_Msg::thr_desc to prevent a thread from using + its thread descriptor before it is fully built. The change + relieve spwaned threads from waiting for other threads created + in the same spwan_n call to be created before it can start + running. + + (insert): Added an extra argument to control whether we want to + insert the newly created thread into ACE_Thread_Manager's thread + table or not. Notice that it is default to 1 to remain the + original behavior in case anyone is using this class/function + directly in their code. However, in ACE_Thread_Manager, we + always prevent it from inserting because we always register + thread descriptors from spawn_i. + +Sun May 10 01:51:29 1998 Nanbor Wang + + * ace/OS.h: Renamed ACE_OS::Time_To_The_Beginning to + ACE_OS::FILETIME_to_timval_skew. + + * ace/OS.cpp: Found the problem in ACE_OS::ctime_r. An internal + compiler bug (?) caused the bug. The solution: move the format + string out as a const string instead of putting it in sprintf + directly. Weird. + + * ace/Log_Record.{h,cpp}: Made priority_name_ and its access + function CE friendly. + +Sat May 9 20:09:13 1998 Nanbor Wang + + * ace/Thread_Manager.h: Changed the type of lock used by + to ACE_SYNCH_MUTEX. Or else, it won't + compile on platforms that doesn't support thread. Thanks to + Woody Zenfell for reporting this. + +Fri May 08 22:29:01 1998 Nanbor Wang + + * ace/SOCK_Dgram_Mcast.cpp (subscribe): CE UNICODE related fix. + +Fri May 8 14:18:46 1998 Nanbor Wang + + * ace/Thread_Manager.h (ACE_Thread_Descriptor): Added ACE_INLINE + to declarations of set_next and get_next to get around a bug in + a version of g++. + +Fri May 8 11:57:23 1998 Douglas C. Schmidt + + * ace/Map_Manager.cpp: Fixed a bug where we weren't calling + close_i() when resizing the buffer. + + * ace/Thread_Manager.cpp (set_grp): In + ACE_Thread_Manager::{get,set}_grp we must check to see that we + have a valid pointer after the ACE_FIND. Otherwise a seg fault + occurs. Thanks to Chris Lahey for reporting + this. + +Fri May 08 09:47:50 1998 David L. Levine + + * ace/config-linux-common.h: only use ACE_HAS_POLL with glibc2. + Thanks to Saneyasu for reporting + this. + + * ace/OS.i (sleep): On Linux without ::poll () (prior to glibc), + copy the ACE_Time_Value argument because the system modifies it. + + * include/makeinclude/platform_osf1_4.0.GNU: moved -lm from LIBS + to MATHLIB. + + * performance-tests/UDP/Makefile: added $(MATHLIB) to LDLIBS. + + * tests/Aio_Platform_Test.cpp (have_asynchio): use + _SC_LISTIO_AIO_MAX instead of _SC_AIO_LISTIO_MAX if it's + #defined. It is on DU 4.0. + +Fri May 08 08:43:42 1998 Steve Huston + + * include/makeinclude/platform_hpux_gcc.GNU: Added $(PIC) to + definition of SOFLAGS. Thanks to Kirill Rybaltchenko + for this fix. + + * ace/SOCK_Dgram_Mcast.cpp (subscribe): Added code for Win32 so that + if a subscribe is done without specifying an interface, the mcast + address is subscribed to on each non-loopback interface. This works + around a bug in NT's winsock in the presence of multiple IP + interfaces. Won't hurt 95 - will just run a bit slower than it + otherwise would. + + * examples/Reactor/Multicast/Multicast.{mdp,mak}: Added MSVC 4.2 + workspace for this example. + +Fri May 8 03:43:25 1998 Nanbor Wang + + * ace/Thread_Manager.{h,cpp}: Added yet one more member variable + into Thread_Descriptor to keep track of registration of + Thread_Descriptors. By adding this variable, we can avoid an + extra locking in remove_thr for most cases (normal cases ;-). + Thanks to the inspiration from Arturo Montes + . + +Thu May 07 22:06:13 1998 Ben Eng + + * ace/config-kcc-common.h,config-linux-{common,kcc}.h: updated + KCC/Linux support, and integrated into config-linux-common.h. + +Thu May 7 20:32:20 1998 Douglas C. Schmidt + + * examples/Service_Configurator/IPC-tests/client/local_dgram_client_test.cpp + (main): Oops, we need to move the unlink() AFTER we create the + file... Thanks to Sandro Doro for + reporting this. + +Thu May 07 19:08:22 1998 Douglas C. Schmidt + + * ACE version 4.5.2 released. + +Thu May 7 14:10:41 1998 Carlos O'Ryan + + * ace/Timer_Hash_T.h: + * ace/Timer_Hash_T.cpp: + * ace/Timer_Heap_T.cpp: + * ace/Timer_Wheel_T.cpp: + The classes had a INHERITED typedef for the base class, but + Solaris defines a macro by the same name. This causes very weird + problems with EGCS (and probably other g++ versions). + +Thu May 07 04:15:23 1998 Nanbor Wang + + * ace/Profile_Timer.cpp (elapsed_time): Treat Win32 differently + so I can use this function with WinCE Emulation build. The + problem is that Win32 can't convert __int64 to double. + + * ace/OS.{h,cpp} (ACE_Time_Value): (Win32 only) Added a new static + const member (Time_To_The_Beginning) of type DWORDLONG (unsigned + _int64) to adjust the time skew between FILETIME and POSIX time. + Changed the type of _100ns to ULARGE_INTEGER to eliminate + unnecessary computation. + +Wed May 6 23:58:40 1998 Carlos O'Ryan + + * ace/XtReactor.cpp: + The signature for the open() method of the notify pipe has been + modified. + +Wed May 6 23:28:47 1998 Douglas C. Schmidt + + * examples/Service_Configurator/IPC-tests/client/local_dgram_client_test.cpp: + Fixed a couple of mistakes that were causing the UNIX domain + sockets not to work. Thanks to Sandro Doro + for recommending this. + + * performance-tests/Misc/context_switch_time.cpp (svc): An 'i' + was being defined twice, gorp! It's fixed now! + +Wed May 06 22:00:14 1998 David L. Levine + + * ace/config-linux-common.h: only #define + ACE_HAS_4_4BSD_SENDMSG_RECVMSG with __GLIBC__. Thanks + to Chanaka Liyanaarachchi for + reporting the lack of CMSG_DATA support on RedHat 4.2. + +Wed May 06 18:35:21 1998 Steve Huston + + * ace/ACE.cpp (get_ip_interfaces): Reset buf_len before each call to + get_reg_key to get registry value for device's IP address. It gets + overwritten on each call to get_reg_key. + + * include/makeinclude/platform_mvs.GNU: Added definition for PIC. + Though not related to position-independent-code, it is a switch that + makes shared lib builds work right. Removed the old SOBUILD def. + Thanks to Chuck Gehr for helping with this strategy. + +Wed May 06 16:32:53 1998 Nanbor Wang + + * ace/Filecache.h (ACE_Filecache_Handle): Removed + ACE_EXPORT_DECLARE and specified ACE_Export directly for + ACE_Filecache_Handle and ACE_Filecache in calss declarations. + + * ace/Thread_Manager.{h,i,cpp}: A bug was found by Arturo Montes + who noticed that when a thread was + spawned and then exited immediately, its thread descriptor might + get freed before even get registered into the thread table kept + by the Thread_Manager. Although it doesn't make any sense to + spawn a thread just to let it return immediately, a middleware + shouldn't restrict the way how users want to use it. + + I got around this problem by adding a lock into + Thread_Descriptor. Before spawning a thread, the Thread Manager + will first grab the lock. It won't release the lock until + calling append thread, at which point, the Thread_Descriptor of + the thread has been stashed into the table. Removing the + Thread_Descriptor also requires to hold this lock and release + the lock before the Thread_Descriptor is "freed." Therefore, + if a thread exit before its Thread_Manager ever gets a chance to + register it, it will block and waiting. + + The type of the lock is defined by ACE_DEFAULT_THREAD_MANAGER_LOCK + which, by default, is ACE_Thread_Mutex. User can change the + definition by defining in their config.h file. For example, if + you can be sure that all your threads will run for an extended + long time (which, in most case, should be true,) you can disable + this feature by defining this as a ACE_Null_Mutex to speed up + spawning and termination of threads. + + (thread_desc_freelist_): Added a free list to Thread_Manager to + recycle Thread_Descriptor. By default, this free list + pre-allocate 0 Thread_Descriptor and has low-water-mark of 1, + increment count 1 and a huge (25000) high water mark. That is, + if you use a Thread_Manager for an extended period of time, you + won't have to dynamically allocate memory for Thread_Descriptor + for every thread after your system is stable (the thread count + fluctuates between some certain values.) + + There are two ways to change the settings. First, by defining + ACE_DEFAULT_THREAD_MANAGER_LWM, ACE_DEFAULT_THREAD_MANAGER_HWM, + ACE_DEFAULT_THREAD_MANAGER_INC, and + ACE_DEFAULT_THREAD_MANAGER_PREALLOC in your file. + This changes the default setting of your ACE. (The global + Thread_Manager use this setting.) Or, you can specify these + values when creating a Thread_Manager. + + * ace/Free_List.cpp (alloc,dealloc): Don't grab the lock in these + two functions. They only get called from add() and remove() + which hold the lock before making the call. Actually, they also + gets called from the constructor and destructor. But that + shouldn't be a problem. + + * tests/Reactor_Notify_Test.cpp (run_test): Moved the #endif of + ACE_HAS_THREADS down to avoid compilation error on non-threaded + platforms. + +Tue May 5 14:12:08 1998 Douglas C. Schmidt + + * include/makeinclude/platform_sco5.0.0-fsu-pthread.GNU: Added a + platform config file courtesy of Arturo Montes + . + +Tue May 05 08:35:18 1998 David L. Levine + + * ace/config-irix6.x-sgic++-nothreads.h: updated the determination + of ACE_SIZEOF_LONG_DOUBLE. Thanks to Bob Laferriere + for providing the fix. + + * include/makeinclude/platform_sunos5_g++.GNU: use -gstabs+ instead + of -g on Solaris86. + + * etc/Svc_Conf_l.cpp.diff: updated. It's magic, Nanbor :-) + The problem seems to be due to an old version left in + /tmp/Svc_Conf_l.cpp, which confuses flex. + + * ace/config-linux-common.h,config-g++-common.h: moved + ACE_HAS_PENTIUM (with i386) from config-linux-common.h + to config-g++-common.h. + + * ace/config-linux-common.h: added ACE_HAS_POLL, so we + don't use ::select () in ACE_OS::sleep (). Linux's + ::select () modifies its timeout argument! + + * ace/OS.i (gethrtime): added RDTSC support for all g++ + _and_ ACE_HAS_PENTIUM platforms. + + * ace/config-vxworks5.x.h: added ACE_HAS_PENTIUM with GHS + on Intel platforms. + + * ace/Makefile: for GHS on Intel 8086, build gethrtime.cpp. + It's used to provide a high-resolution time using the + Pentium RDTSC instruction. I don't know how to get + GHS' asm to do it, so it uses g++. + + * ACE-INSTALL.html: added note about carefully installing + egcs on Linux. Thanks to Kurt Sussman for + tracking down the cause of mysterious link failures. + +Tue May 05 02:15:49 1998 Nanbor Wang + + * ace/Svc_Conf_l.cpp: I know, I know. I shouldn't mess with this + file directly. But I couldn't manufacture this file even with + the stock Svc_Conf.l using Doug's flex. So, I reckon I'll just + check this in now and fix the Svc_Conf_l.diff later. + + * ace/Service_Config.{h,cpp} (process_directive): Standard CE + stuff. + + * WindozeCE/WinAdapter*.*: + * WindozeCE/WindozeCE*.*: Replaced the old adapter for CE with a + new one. The new version allows uses to scroll thru the + "console" output. + +Mon May 04 17:09:39 1998 David L. Levine + + * performance-tests/Misc/context_switch_time.cpp: lots of + cleanup. The main changes were the use of ACE_THR_PRI_FIFO_DEF + for the default therad priority, and removal of some + unnecessary thr_yield () calls. + + * tests/Aio_Platform_Test.cpp: added arguments to main (), + removed #includes that are already in ace/OS.h, and added + ACE_START_TEST/ACE_END_TEST calls. + +Mon May 4 13:08:18 1998 Douglas C. Schmidt + + * ace/config-sunos5.6.h: Removed a mysterious "30" at the end of + an #undef. Thanks to J. Russell Noseworthy + for reporting this problem. + +Mon May 04 08:49:09 1998 David L. Levine + + * ace/OS.cpp (ACE_Thread_Adapter::invoke): with ACE_NEEDS_LWP_PRIO_SET, + added the call to ACE_OS::thr_setprio () so that the LWP priority + will be set if running in the RT class. Applications no longer + have to be concerned with this. + + * performance-tests/Misc/preempt.cpp (svc): removed + ACE_OS::thr_setprio () calls to set LWP priority, now that ACE + handles that internally. + + * include/makeinclude/platform_*linux.GNU: added "s" to + ARFLAGS, so that ranlib is no longer necessary. + +Sun May 03 22:37:38 1998 Nanbor Wang + + * ace/Parse_Node.cpp (open_handle): WinCE doesn't support + ExpandEnvironmentStringA. + + * ace/config-win32-common.h: Only define ACE_HAS_GETRUSAGE when + ACE_HAS_WINNT4 != 0. Thanks to Paul Motuzenko + for reporting this. + +Sun May 03 01:58:47 1998 Douglas C. Schmidt + + * ACE version 4.5.1 released. + +Sat May 2 14:35:04 1998 Douglas C. Schmidt + + * tests/Reactor_Notify_Test.cpp: Factored out some common code to + make the test more concise. + + * tests/Reactor_Notify_Test.cpp: Modified the test to check + whether our new mechanism for disabling the notify pipe works + correctly. + + * ace/{WFMO,Select}_Reactor[_Impl]: Added the + "disable_notify_pipe" flag in the constructor in order to + disable this feature and save on descriptors if they aren't + required. Thanks to Tom Venturella for + motivating this. + +Sat May 02 Alexander Babu Arulanthu + + * tests/Aio_Platform_Test.cpp: Included this test program for + testing a platform for Asynchronous I/O options. + * tests/Makefile (BIN): Added Aio_Platform_Test. + +Fri May 01 17:52:32 1998 Nanbor Wang + + * ace/Arg_Shifter.{h,cpp}: Added macros ACE_Export and + ACE_BUILD_DLL respectively. + + * ace/ACE_Library.mak: + * ace/ace_{dll,lib}.dsp: Added Arg_Shifter.cpp into project. + +Fri May 1 13:52:32 1998 Douglas C. Schmidt + + * ace/Addr: Made the destructor for ACE_Addr virtual so that + subclasses can be deleted correctly. Thanks to Wei Chiang + for reporting this. + + * ace: Added Arg_Shifter from TAO and renamed it to + ACE_Arg_Shifter. + + * ace/IOStream_T.i (recv_n): ACE_IOStream::eof (void) had + a subtle bug if it is called when a get operation (>>) has not + failed. Thanks to James CE Johnson for + reporting this bug. + + * examples/Connection/misc/Connection_Handler.cpp: Make sure to + activate() each active object using THR_DETACHED so we don't run + out of threading resources. Thanks to Brad Walton + for reporting this. + + * ace/Timer_Queue_Adapters.cpp: Rather than returning the result + of schedule_ualarm(), the + ACE_Async_Timer_Queue_Adapter::schedule() method should + return the timer id. Thanks to James Garrison + for reporting this. + + * examples/System_V_IPC/SV_Message_Queues: Renamed the so-called + "ACE_Message_Block" to "Message_Block" so it wouldn't be as + confusing. Thanks to Ganapathi for this + suggestion. + +Fri May 01 17:52:32 1998 Nanbor Wang + + * ace/ACE_Library.mak: + * ace/ace_{dll,lib}.dsp: Added Arg_Shifter.cpp into project. + +Fri May 01 14:09:21 1998 Steve Huston + + * ace/OS.h: Changed ACE_hrtime_t from signed to unsigned on Win32 + to insure correct results from ACE_High_Res_Timer::elapsed_time + calculations. Fixes bug P87. + +Fri May 01 11:52:47 1998 Nanbor Wang + + * ace/OS.h: Forgot to redefine ASYS_INLINE after #undef it. + + * ace/OS.i (last_error): On Win32, this should also update errno + after calling SetLastError (). Thanks to Steve for pointing + this out. Fixes bug P88. + +Fri May 01 10:01:09 1998 David L. Levine + + * ace/config-sunos5.6.h: replaced config-sunos5.6-sunc++-4.x.h + with this config file, which supports both Sun C++ and g++. + + * ace/OS.i (gethrtime): for the default (::gettimeofday) case, + use 64-bit instead of 32-bit arithmetic by casting to ACE_hrtime_t. + + * ace/Basic_Types.{h,i}: added ACE_U_LongLong::operator *. + + * ace/Env_Value_T.cpp: added #include of Env_Value_T.h. + +Fri May 1 00:35:40 1998 Nanbor Wang + + * include/makeinclude/wrapper_macros.GNU + (ACE_LDSO_Version_Number): Fixed the problem of not able to + parse a formal release number from ace/VERSION. + +Thu Apr 30 15:53:58 1998 Nanbor Wang + + * ACE.{h,i,cpp}: + * DEV.{h,i,cpp}: + * DEV_Connector.{h,i,cpp}: + * DEV_IO.{h,i,cpp}: + * Date_Time.{h,i,cpp}: + * FIFO_Recv.{h,i,cpp}: + * FIFO_Recv_Msg.{h,i,cpp}: + * FIFO_Send.{h,i,cpp}: + * FIFO_Send_Msg.{h,i,cpp}: + * FILE.{h,i,cpp}: + * FILE_Connector.{h,i,cpp}: + * FILE_IO.{h,i,cpp}: + * IO_SAP.{h,i,cpp}: + * IPC_SAP.{h,i,cpp}: + * LSOCK.{h,i,cpp}: + * LSOCK_CODgram.{h,i,cpp}: + * LSOCK_Connector.{h,i,cpp}: + * LSOCK_Dgram.{h,i,cpp}: + * LSOCK_Stream.{h,i,cpp}: + * Log_Record.{h,i,cpp}: + * Pipe.{h,i,cpp}: + * SOCK.{h,i,cpp}: + * SOCK_CODgram.{h,i,cpp}: + * SOCK_Connector.{h,i,cpp}: + * SOCK_Dgram.{h,i,cpp}: + * SOCK_Dgram_Bcast.{h,i,cpp}: + * SOCK_Dgram_Mcast.{h,i,cpp}: + * SOCK_IO.{h,i,cpp}: + * SOCK_Stream.{h,i,cpp}: + * SPIPE.{h,i,cpp}: + * SPIPE_Connector.{h,i,cpp}: + * SPIPE_Stream.{h,i,cpp}: + * SV_Message_Queue.{h,i,cpp}: + * SV_Semaphore_Complex.{h,i,cpp}: + * SV_Semaphore_Simple.{h,i,cpp}: + * UPIPE_Acceptor.{h,i,cpp}: + * UPIPE_Connector.{h,i,cpp}: Added inline control for these + supposedly default inline functions. + + * ace/config-WinCE.h: Added ACE_LACKS_INLINE_FUNCTIONS. + + * ace/OS.h: Added a new macro ASYS_INLINE for platforms that don't + support inline properly. This is controlled by the macro + ACE_LACKS_INLINE_FUNCTIONS. + + Walked thru all macros and indented them properly. + + * ace/README: Added documentation for ACE_LACKS_INLINE_FUNCTIONS. diff --git a/ACE/ChangeLogs/ChangeLog-99a b/ACE/ChangeLogs/ChangeLog-99a new file mode 100644 index 00000000000..5399b215825 --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-99a @@ -0,0 +1,13411 @@ +Sat Jul 31 20:29:17 1999 Nanbor Wang + + * ace/OS.cpp: Moved the comment regarding *printf to where it + belongs. + + * ace/OS.h: Removed an extra trailing semicolon following + IPPROTO_TCP. + +Sat Jul 31 19:27:50 1999 Douglas C. Schmidt + + * examples/Shared_Malloc/test_position_independent_malloc.cpp: + Now that position-independent malloc works, I finished + integrating all the features in this test. + +Sat Jul 31 19:06:05 1999 Carlos O'Ryan + + * ace/Pipe.cpp: + The third argument to ACE_OS::setsockopt() is a "const char*" no + sense in casting it to void*! + +Sat Jul 31 18:55:34 1999 Kirthika Parameswaran + + * ace/Asynch_IO_Impl.{h, cpp}: + Fixed compiler errors: redefinition of destructors of the + classes in this file. Removed inline declaration of destructors + and defined those which hadnt been defined. + +Sat Jul 31 17:54:32 1999 Carlos O'Ryan + + * etc/enforce_ace_try.diff: + Apply this patch file and then compile to enforce the correct + use of ACE_TRY macros. It renames the exception(), clear() and + print_exception() methods in the CORBA::Environment class. + +Sat Jul 31 17:39:42 1999 Carlos O'Ryan + + * ace/Timeprobe_T.cpp: + Print timeprobe results with higher precision (3 decimal + digits), this is useful for extremely fine grained analysis + where just microseconds won't cut it. + +Sat Jul 31 12:07:48 1999 Douglas C. Schmidt + + * ace: Updated comments in all the header files so that references + to method names like ACE_Event_Handler::handle_input() were + changed to . This change + enables the class2man scripts to use the appropriate "code" font + for these names in the auto-generated documentation. + + * ace/Asynch_IO_Impl: Moved the + virtual destructors for all the ACE_Asynch_*_Impl classes into + the *.cpp file, which is where they belong. + + * ace/Functor_T.h: Moved the destructor of ACE_Command_Callback + out of the header file and into the *.cpp file. + + * ace/Sched_Params.h: Updated the documentation a bit to mention + the ACE_SCHED_{FIFO,RR,OTHER} policies explicitly. Thanks to + Peter Mueller for motivating this. + + * ace/Synch_T: Moved the implementations of ACE_Read_Guard and + ACE_Write_Guard out of the class header and into the *.i file, + which is where they belong. + + * ace/Based_Pointer_T.i (operator *): In order to distinquish a + "NULL" pointer we keep a value of -1 in target. + + * ace/Based_Pointer_T.i: I was forgetting to check if + rhs == 0 for the ACE_Based_Pointer<> class. This leads to weird + behavior when assigning a "NULL" pointer. + + * examples/Reactor/Misc/notification.cpp: Cleaned up the program so + that it looks better and doesn't crash and burn when signals occur. + + * ace/Pipe.cpp (open): We now set the default size of the + ACE_Pipes that are implemented as Internet or UNIX-domain + sockets to ACE_DEFAULT_MAX_SOCKET_BUFSIZ. This will speed up + the Reactor's notify() method and prevent it from deadlocking as + quickly. Thanks to Detlef Becker + for testing this out. + + * ace/OS.h: Added a new macro called ACE_IPPROTO_TCP that factors + out the differences between PHARLAPs and "normal" systems. + + * ace/Strategies_T.{i,cpp}: Added some additional ACE_ERROR printouts + if open() methods fail in constructors. + + * ace/Strategies_T: The logic for creating a new Singleton wasn't + dynamic enough. It's now intelligent enough to create a new + SVC_HANDLER if it's not given one. Thanks to Hao Ruan + for reporting this. + +Sat Jul 31 15:57:16 1999 Carlos O'Ryan + + * ACE version 5.0 released. Party on Wayne. + +Sat Jul 31 12:20:59 1999 Nanbor Wang + + * tests/version_tests/version_tests.dsw: + * tests/version_tests/Hash_Map_Bucket_Iterator_Test.dsp: + * tests/version_tests/Cached_Conn_Test.dsp: + * tests/version_tests/Cached_Accept_Conn_Test.dsp: Added three + missing version_tests project files. + +Sat Jul 31 00:22:46 1999 Nanbor Wang + + * tests/Basic_Types_Test.dsp: + * tests/Collection_Test.dsp: + * tests/Dynamic_Priority_Test.dsp: + * tests/New_Fail_Test.dsp: + * tests/Reverse_Lock_Test.dsp: + * tests/SOCK_Connector_Test.dsp: + * tests/SOCK_Send_Recv_Test.dsp: + * tests/Thread_Mutex_Test.dsp: + * tests/Timeprobe_Test.dsp: + * tests/Upgradable_RW_Test.dsp: Rebuilt. ACE_Init_Test.dsp is + still broken. + +Fri Jul 30 10:27:31 1999 Steve Huston + + * ace/config-hpux-10.x.h: Allow building w/o threads - set _REENTRANT + if not set, to pick up _r functions; move + ACE_HAS_NONCONST_SELECT_ TIMEVAL out of the threads-only + section. + +Fri Jul 30 08:36:43 1999 Douglas C. Schmidt + + * ace/OS.i: Commented out the ACE_TRACE calls in ACE_OS::mutex_lock() + and ACE_OS::thread_mutex_lock() to avoid infinite recursion. Thanks + to Ulf Jaehrig for reporting this. + +Fri Jul 30 03:33:14 1999 Carlos O'Ryan + + * bin/auto_compile: + * bin/auto_compile_wrapper: + * bin/run_all_list.pm: + Added options to run only the tests that do not require threads + (-single_threaded) and that do not require the full corba + profile (-minimum_corba). Also added options to disable the cvs + update, to execute realclean before compiling and to print some + debugging info. + +Thu Jul 29 20:44:56 1999 Ossama Othman + + * include/makeinclude/wrapper_macros.GNU: + + Override minimum_corba variable if it isn't set to 1 (i.e. if + minimum_corba is not enabled). This change was needed to make + it easier to disable some TAO ORB services, examples and tests + that rely on CORBA features that aren't supported in the minimum + CORBA specification. + +Thu Jul 29 19:04:12 1999 Ossama Othman + + * ace/Atomic_Op.i: + * ace/Filecache.cpp: + + Replaced raw ACE_*_Guards with their corresponding + ACE_GUARD_RETURN macros. This corrects "unused variable" + warnings when building ACE without thread support. See David's + ChangeLog entry from Fri May 14 16:10:29 1999 for a better + description of why this was necessary. + +Thu Jul 29 18:29:46 1999 Nanbor Wang + + * bin/run_all_list.pm: Moved the RUN_LIST definition from + auto_compile to this file to reduce the work to maintain the + list and allow auto_compile and run_all_win32.pl to synchronize + the tests being run. + + * bin/auto_compile: + * bin/run_all_win32.pl: Removed definition of RUN_LIST and use the + run_all_list module. + +Thu Jul 29 17:30:14 1999 Douglas C. Schmidt + + * ace/Makefile[.am] (pkginclude_HEADERS): Removed Future_Node.* + Thanks to John Tucker and Michael Garvin + for reporting this. + +Thu Jul 29 14:47:10 1999 Ossama Othman + + * ace/Select_Reactor_T.cpp (dispatch_notification_handlers): + + This code is used for picking up updates from non-owner threads. + However, it is also useful for picking up notifications from the + notify pipe (even though the notify is part of the I/O handle + set in the Select_Reactor). Therefore, we have enabled this + code for the single-threaded case also. Thanks to Irfan for + this fix. + +Thu Jul 29 14:32:28 1999 Carlos O'Ryan + + * ace/ACE.cpp: + Linux without returns a different errno (EOPNOTSUPP) if the + connector or acceptor runs out of file descriptors. + + * ace/OS.i: + The Errno_Guard constructor was not using an argument in + platforms without exceptions. + +Thu Jul 29 13:59:15 1999 Douglas C. Schmidt + + * ACE version 4.6.47 released. + +Thu Jul 29 12:32:01 1999 Nanbor Wang + + * ace/WFMO_Reactor.cpp (ACE_WFMO_Reactor): + * ace/Select_Reactor_T.cpp (ACE_Select_Reactor_T): I forgot to + initialize flag in one of the two ctors. Thanks + to Ruediger Franke for catching + this one. + +Thu Jul 29 01:04:03 1999 Carlos O'Ryan + + * bin/auto_compile: + * bin/auto_compile_wrapper: + Updated to include the latest round of changes, new tests and + several improvements to send email and stuff. + +Wed Jul 28 18:29:46 1999 Jeff Parsons + + * ace/config-win32.h: + Removed ACE_HAS_STD_TEMPLATE_SPECIALIZATION + definition. See below. + + * ace/config-win32-common.h: + Added ACE_HAS_STD_TEMPLATE_SPECIALIZATION + definition, since there is a place for MSVC 6.0 stuff like this. + Also added ACE_HAS_BROKEN_IMPLICIT_CONST_CAST + definition for a generated code bug fix that just didn't have one version + that would satisfy both SunCC and MSVC. + +Wed Jul 28 18:26:53 1999 Carlos O'Ryan + + * ace/CDR_Stream.cpp: + * ace/Message_Block.h: + * ace/Message_Block.cpp: + * ace/Message_Block_T.h: + * ace/Message_Block_T.cpp: + Re-implemented the clone() method without data copies in a + backwards compatible way, a new clone_nocopy() method was added + so classes that inherit from Data_Block and only override + clone() will work correctly. + Also fixed the implementation of Locked_Data_Blocked because it + is used in TAO and we need zero-copy clone() operations in that + case. + +Wed Jul 28 16:16:27 1999 Nanbor Wang + + * ace/OS.cpp (set): Fixed a unsigned/signed conversion problem + that caused negative usec value in ACE_Time_Value. Thanks to + Jerry D. De Master for reporting the bug. + (FILETIME): Removed some unused macros for dealing with older + Borland C++ compilers. Thanks to Jody and Gonzo for confirming + this. + +Wed Jul 28 13:44:15 1999 Nanbor Wang + + * ACE-INSTALL.html: Remind users to pick the right configurations + when building from MSVC project files. Thanks to Jerry D. De + Master for suggesting this. + +Wed Jul 28 13:26:36 1999 David L. Levine + + * ACE-INSTALL.html: for VxWorks (thru Tornado 1.0.1), + -fno-implicit-templates is broken for x86 targets, + not all targets. + +Wed Jul 28 13:09:26 1999 David L. Levine + + * docs/ACE-subsets.html: updated libACE size breakdown. + +Wed Jul 28 12:08:56 1999 Ossama Othman + + * ace/CDR_Stream.cpp (reset_contents): + + Modified call to clone() so that it uses the newly added + zero-copy semantics. A data copy was already being made in + ACE_InputCDR::steal_from(), which also calls + ACE_InputCDR::reset_contents(). Two data copies were being + performed. This change reduces the number of data copies to + one. Thanks to Carlos for this change. + +Wed Jul 28 11:23:36 1999 Ossama Othman + + * ace/Message_Block.h: + * ace/Message_Block.cpp (clone): + + Added argument that allows the characteristics of an + ACE_Data_Block to be copied without copying the data that the + ACE_Data_Block holds. This modification is part of a zero-copy + optimization for TAO. Thanks to Carlos for implementing this + change. + +Wed Jul 28 09:48:37 1999 David L. Levine + + * docs/ACE-guidelines.html: added guideline about testing + for definition of a macro before using it. Thanks to + Susan Liebeskind for + providing this guideline. + +Wed Jul 28 00:06:32 1999 Douglas C. Schmidt + + * ace: Added a new Makefile.bor file for BCB4. Thanks to Christopher + Kohlhoff for contributing this. + +Tue Jul 27 23:25:18 1999 Douglas C. Schmidt + + * netsvcs/lib/Server_Logging_Handler_T.cpp (open): Updated a + comment to point out that we use a thread-per-connection + concurrency model. Thanks to Raghu Nambiath + for reporting this. + +Tue Jul 27 21:05:23 1999 David L. Levine + + * include/makeinclude/platform_tru64_cxx.GNU (ACE_DU_SUBVERSION): + fixed typo: -v instead of v-. Thanks to + Doug Anderson for reporting this. + +Tue Jul 27 16:58:54 1999 Kirthika Parameswaran + + * ace/ACE.cpp (out_of_handles): Added bug-fixes for RedHat5.2 and + FreeBSD. Thanks to James Megquier for discovering + and testing out the bug-fix on RedHat5.2 and Russell.L.Carter + for sending in a patch for FreeBSD. These + bug fixes are for: $ACE_ROOT/tests/ + Cached_Conn_Test and Cached_Accept_Conn_Test. + +Tue Jul 27 16:55:44 1999 Nanbor Wang + + * include/makeinclude/platform_sunos5_kcc.GNU (MATHLIB): KCC needs + to have this defined. + +Tue Jul 27 16:18:21 1999 David L. Levine + + * ACE-INSTALL.html: updated note about shared libraries + on VxWorks. In particular, they don't provide copies + of global (static) variables in the library. So, "programs" + that share a library will also share the static variables in + the library. [Bug 86] + +Tue Jul 27 14:26:37 1999 Douglas C. Schmidt + + * ace/SOCK_Dgram: Removed the QoS_Params from open() and + ACE_SOCK_Dgram since they don't appear to be useful. Thanks to + Vidya Narayanan for suggesting + this. + +Tue Jul 27 14:41:26 1999 Steve Huston + + * ace/Codeset_IBM1047.cpp: Added a static variable only for HP aC++ + to make it stop warning of an empty translation unit. + +Tue Jul 27 14:16:55 1999 Nanbor Wang + + * ace/Thread_Manager.cpp (cancel_thr): This method should return + the result of thread cancel operation if async_cancel is used. + Thanks to Peter Mueller for suggesting + the fix. + +Mon Jul 26 20:50:37 1999 Douglas C. Schmidt + + * ace/OS: Addded a new pair of priority() fields as place + holders for the forthcoming DiffServ QoS features. Thanks to + Vidya Narayanan for suggesting + this. + +Tue Jul 27 13:28:48 1999 David L. Levine + + * ace/OS.i (getuid): removed extra ACE_TRACE with + ACE_WIN32 or CHORUS. Thanks to Jerry D. De Master + for reporting this. + +Tue Jul 27 11:10:39 1999 David L. Levine + + * examples/System_V_IPC/Makefile: on VxWorks only, fixed + so that make all, etc., work properly (by just printing + the message that these examples aren't used on VxWorks). + +Tue Jul 27 10:25:41 1999 Steve Huston + + * ACE-INSTALL.html: Added a note about required HP-UX 10.20 + patch. Updated aC++ versions. + + * ace/Process.{h cpp} (ACE_Process_Options::command_line): Added + 'const' to make the entire array and contents const. Restores + ability for users of pre-5.0 to still pass char **. Thanks to + Bill Tovrea for reporting this. + + * examples/Connection/non_blocking/Makefile: Re-added LIBS += $(ACELIB) + (see ChangeLog, 23-Jul-1999) but did it in the section for AIX + C Set++ and IBM C/C++ only (ifdef TEMPINCDIR). This is needed to + generate the shared library (libConn) using those compilers. + +Mon Jul 26 20:50:37 1999 Douglas C. Schmidt + + * ace/Future.h: Moved the static methods until the bottom + of the ACE_Future_Rep class (again) to workaround a bug with + Borland's C++ Builder. Thanks to Christopher Kohlhoff + for reporting this (again). + +Mon Jul 26 20:59:23 1999 Carlos O'Ryan + + * websvcs/README: + Added a brief description of the directory and its current + contents. Thanks to Will Skunk + for motivating this. + +Mon Jul 26 20:50:37 1999 Douglas C. Schmidt + + * ace/Log_Msg.cpp: Added support for the 'W' (UNICODE) option for + Win32. Thanks to Valery Arkhangorodsky + for contributing this. + +Mon Jul 26 20:58:35 1999 Alexander Babu Arulanthu + + * ace/POSIX_Asynch_IO.cpp: + * ace/WIN32_Asynch_IO.cpp: Fixed the double deletion problem of + the result classes. Thanks to David Digby + and Timothy Schimke + for reporting this. + +Mon Jul 26 18:09:09 1999 Irfan Pyarali + + * tests/run_tests.sh (Cached_Conn_Test and + Cached_Accept_Conn_Test): These two tests are known to leak + memory when compiled with old gcc (g++). Therefore, we skip + these tests when using purify and old gcc (g++). A -p option + was added to the script to indicate that we want to run with + purify. + +Mon Jul 26 17:09:09 1999 David L. Levine + + * ace/Object_Manager.{h,cpp},Makefile: don't create the + ACE_TOKEN_MANAGER_CREATION_LOCK and + ACE_TOKEN_INVARIANTS_CREATION_LOCK preallocated objects + if the Token component isn't build. This gets rid of + unresolved references to the ACE_Token_Proxy compoents + on VxWorks/g++ when Token isn't built. Thanks to + Stephane Chatre for reporting this. + +Mon Jul 26 17:02:08 1999 David L. Levine + + * include/makeinclude/wrapper_macros.GNU: don't override + OBJDIRS on VxWorks with shared libs. This allows + make realclean to work properly on VxWorks, when shared + lib builds are enabled. + +Mon Jul 26 15:06:23 1999 Jeff Parsons + + * ace/CDR_Stream.i: + * ace/Map_Manager.i: + Had to cast some return values to avoid MSVC signed/unsigned + mismatch type warnings (level 4). + + * ace/config-win32.h: + Added ACE_HAS_STD_TEMPLATE_SPECIALIZATION define, so that + ACE_TEMPLATE_SPECIALIZATION macro adds the necessart + 'template <>' for MSVC, and so averts many many level 4 + warnings. + +Mon Jul 26 14:10:56 1999 Kirthika Parameswaran + + * ace/DLL.cpp (get_handle): Changed the check of + flag to now reset only if the + is set. Thanks to Bob McWhirter + for pointing this out. + +Mon Jul 26 12:32:41 1999 Douglas C. Schmidt + + * ACE version 4.6.46 released. + +Fri Jul 23 18:20:11 1999 Carlos O'Ryan + + * ace/config-irix6.x-sgic++-nothreads.h: + Enabled namespaces with MIPSPro 7.2 or higher. + +Fri Jul 23 16:40:15 1999 Carlos O'Ryan + + * ace/ACE.cpp: + Fixed typos in error return values for ACE::execname() + +Fri Jul 23 14:51:48 1999 Douglas C. Schmidt + + * examples/Service_Configurator/IPC-tests/Handle_L_CODgram, + examples/Service_Configurator/IPC-tests/Handle_L_Dgram, + examples/Service_Configurator/IPC-tests/Handle_L_Pipe: + Cleaned this stuff up so that it builds correctly when + ACE_LACKS_UNIX_DOMAIN_SOCKETS is enabled. Thanks to + David for reporting this. + + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe: + Made upper_case() a method in the Handle_L_Pipe class. + + * examples/Service_Configurator/IPC-tests/server/Handle_L_Pipe.cpp, + examples/Service_Configurator/IPC-tests/server/Handle_L_CODgram.cpp: + Removed the bizarre hacks for SunOS4. This stuff probably + hasn't been tested since 1992! + +Fri Jul 23 14:16:22 1999 Steve Huston + + * ace/OS.i (ACE_OS::read): (only non-Win32), if call fails and + errno is EAGAIN, change it to EWOULDBLOCK. Improve portability for + platforms where EAGAIN and EWOULDBLOCK are different values and + both used, like HP-UX. + + * ace/Malloc_T.cpp (ACE_Malloc<> ctor): Added missing newline in error + message. + +Fri Jul 23 12:09:18 1999 Nanbor Wang + + * ace/OS.i: Fixed some mismatched ifdef/endif comments. + + * ace/ACE.cpp (execname): Fixed some misuses of ACE_HAS_WIN32 + macros where they should have been ACE_WIN32. Thanks to Andy + for noticing this. + +Fri Jul 23 11:28:17 1999 Douglas C. Schmidt + + * ace/Memory_Pool.cpp (init_acquire): shmat() returns -1 on + failure, not 0. Thanks to Kevin Liu + for reporting this. + +Fri Jul 23 11:35:31 1999 David L. Levine + + * examples/Connection/non_blocking/tests_lsock_{acceptor, + connector.cpp}: disabled if ACE_LACKS_UNIX_DOMAIN_SOCKETS. + Thanks to Alain Magloire for reporting this. + + * examples/Connection/non_blocking/Makefile: removed unneeded + LIBS (=$(ACELIB)) and BUILD macro definitions. + +Fri Jul 23 10:07:05 1999 David L. Levine + + * include/makeinclude/platform_qnx_neutrino.GNU: added + CROSS-COMPILE macro definition. Thanks to + Alain Magloire for reporting this. + +Fri Jul 23 08:58:56 1999 Douglas C. Schmidt + + * ace/Service_Config.h: Clarified the fact that the + ACE_Service_Config uses the Monostate pattern, so there can only + be one of them per-process. Thanks to Ralf Kluthe + for reporting this. + +Fri Jul 23 07:49:31 1999 David L. Levine + + * include/makeinclude/platform_sunos5_sunc++.GNU: added + comment about options for producing 64-bit binaries. + Thanks to Jeff Franks for + raising this issue. + +Fri Jul 23 03:10:31 1999 Irfan Pyarali + + * ace/Strategies_T.cpp (find_or_create_svc_handler_i): + * ace/Cached_Connect_Strategy_T.cpp (cached_connect): + + I had added the new_connection() method that lets go of the lock + for the duration of the connect(), but forgot to use it in the + above functions ;) It should be fine now. + + * tests/Cached_Conn_Test.cpp (cached_connect): + * tests/Cached_Accept_Conn_Test.cpp (cached_connect): + + Host of the remote address should be ACE_LOCALHOST instead of + ACE_DEFAULT_SERVER_HOST. + +Thu Jul 22 23:23:26 1999 Irfan Pyarali + + * ace/Handle_Gobbler.h (class ACE_Handle_Gobbler): Inlined + declaration of the functions. + +Thu Jul 22 20:03:54 1999 Douglas C. Schmidt + + * ace/Acceptor.cpp: For sanity's sake, initialize all the data + members to 0 in the ACE_Strategy_Acceptor constructor. Thanks + to Jody Hagins for reporting this. + + * ace/Acceptor.cpp: The service_port_ data member in the + ACE_Strategy_Acceptor wasn't being initialized to 0. Thanks to + Jody Hagins for reporting this. + + * ace/Acceptor.cpp: Modified the dump() and info() methods so that + don't do bad things if service_name_ and service_description_ + are NULL. Thanks to Jody Hagins for this + suggestion. + + * ace/Message_Queue_T.h: Clarified what the errnos get set to when + timeouts occur or queues are deactivated. Thanks to + John Forest for suggesting this. + +Thu Jul 22 16:55:14 1999 Carlos O'Ryan + + * ace/Stats.cpp: + Fixed message that had a %s but no argument! + +Thu Jul 22 15:12:18 1999 David L. Levine + + * ace/Codeset_IBM1047.{h,cpp}: wrapped with #ifdef ACE_MVS + so that the code doesn't occupy any space on platforms + other than MVS. + +Thu Jul 22 14:22:41 1999 David L. Levine + + * examples/Shared_Malloc/Malloc.cpp: fixed explicit + template instantiations so that there are no duplications + with ACE_LACKS_SBRK and ACE_LACKS_SYSV_SHMEM. + +Thu Jul 22 12:17:26 1999 David L. Levine + + * ace/config-lynxos.h: removed ACE_LACKS_FORK on PowerPC. + All of the ACE tests that fork now succeed. + +Thu Jul 22 11:54:58 1999 David L. Levine + + * tests/SV_Shared_Memory_Test.cpp (child): added a one + second sleep to give the parent a chance to create the + semaphore. This allows the test to succeed on LynxOS/PPC + (with fork ()). + + * tests/Process_Mutex_Test.cpp,Process_Strategy_Test.cpp (main): + added a one second sleep after spawning each server, to give it + a chance to start. Also, wrapped some string literals with + ASYS_TEXT. Again, success on LynxOS/PPC with fork (). + +Thu Jul 22 10:42:06 1999 Clarence M. Weaver + + * ACE-INSTALL.html: added steps for running the ACE tests + on VxWorks platforms that lack NFS. + +Thu Jul 22 10:25:31 1999 David L. Levine + + * ace/Log_Record.cpp,SString.cpp: wrapped #include of + ace/streams.h with #ifndef ACE_LACKS_IOSTREAMS_TOTALLY. + [Bug 84] + +Thu Jul 22 09:55:10 1999 David L. Levine + + * docs/ACE-guidelines.html: updated commit message guideline + to show ChangeLogTag example. + +Thu Jul 22 02:15:46 1999 Irfan Pyarali + + * ace/Handle_Gobbler (class ACE_Handle_Gobbler): New class that + gobbles up handles :) This class is useful when we need to + control the number of handles available for a process. Mostly + used for testing purposes. + + Note that even though the new files are in the ace directory, + they are not part of the ace library. The files only contain + inline functions and Handle_Gobbler.h is only included where + needed. + + * tests/Cached_Conn_Test.cpp: + * tests/Cached_Accept_Conn_Test.cpp: + + Added Handle_Gobbler to the test to reduce the iterations + required before handles run out and purging starts. + +Wed Jul 21 21:45:22 1999 Nanbor Wang + + * ace/Reactor.cpp: Applied ACE_NOTREACHED to several + run_*_event_loop methods. + + * docs/ACE-guidelines.html: Updated ASYS_TEXT usage. + + * ace/RB_Tree.cpp: + * tests/Cache_Map_Manager_Test.cpp: Applied ASYS_TEXT liberally. + +Wed Jul 21 21:19:36 1999 David L. Levine + + * ACE-INSTALL.html: added note about ACE support for + shared libraries on VxWorks. It's still under + development. + +Wed Jul 21 18:38:00 1999 Irfan Pyarali + + * ace/Strategies_T.h (ACE_Cached_Connect_Strategy): Renamed + to . + + * ace/Hash_Cache_Map_Manager_T.cpp (find): Finding and updating + the attributes is faster through the find() that uses an entry. + Therefore, for find (key, value) and find (key) we go to + find (key, entry) instead of going to the base class. + + * ace/Cached_Connect_Strategy_T.cpp: + + - ACE_Cached_Connect_Strategy_Ex::check_hint_i + - ACE_Cached_Connect_Strategy_Ex::find + + Update the caching attributes directly since we don't do a + find() on the cache map. + +Wed Jul 21 15:54:25 1999 Nanbor Wang + + * ace/DLL.cpp: ACE_HAS_MOSTLY_UNICODE_APIS fixes. + + * ace/OS.i (ctime): + * ace/OS.cpp (ctime): One copy should only be available when + ACE_HAS_MOSTLY_UNICODE_APIS is defined. Thanks to Steve for + reporting this. + +Wed Jul 21 15:21:32 1999 David L. Levine + + * tests/Env_Value_Test.cpp (main): use the single-process + version if ACE_LACKS_FORK, in addition to if + ACE_HAS_NONSTATIC_OBJECT_MANAGER. + + * tests/Time_Service_Test.cpp (main): neuter if ACE_LACKS_FORK, + because the test uses ACE_Process::spawn (). + + Thanks to Riaz Syed for reporting these. + +Wed Jul 21 11:48:53 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + use full path to $(CC) in egcs version check, to avoid + warning if it is not on the user's PATH. + +Wed Jul 21 11:44:19 1999 Carlos O'Ryan + + * ace/OS.h: + Simplified the definition of the ACE_THR_PRI_*_DEF macros from + (MIN+(MAX-MIN)/2) to ((MIN+MAX)/2), the new definition is not + only easier to read, makes less operations (and function calls) + but it is also safer when the the priorities are "backwards" and + PRI_MAX < PRI_MIN + +Wed Jul 21 11:40:31 1999 Steve Huston + + * include/makeinclude/platform_aix4_cset++.GNU: + * include/makeinclude/platform_hpux_aCC.GNU: Replaced lines like + "debug=1" with ifeq (,$(debug)) debug=1 endif. + + * include/makeinclude/platform_aix4_g++.GNU: + Above change for variables, also added -Wl,-bbigtoc when linking + TAO_IDL, else it runs out of toc space. Don't do it for all links + because bigtoc introduces a run-time performance penalty. + +Wed Jul 21 10:25:07 1999 David L. Levine + + * ace/OS.{h,cpp} (tss_base,tss_open): with TSS emulation, + no longer return indication of whether tss_base allocated + the ts_storage array. Instead, added an (optional) + argument that tss_open can use for that purpose. This + allows threads that haven't been spawned by ACE to use + ACE's TSS emulation. Thanks to David Hauck + for reporting this and testing + the fix on NT. And, thanks to Terry Rosenbaum + for originally reporting it. + +Wed Jul 21 09:34:09 1999 David L. Levine + + * examples/Shared_Malloc/test_position_independent_malloc.cpp (main): + removed declarations of unused argc and argv. + +Wed Jul 21 04:32:20 1999 Nanbor Wang + + * ace/Reactor.cpp: + * ace/Reactor.h: + * ace/Reactor.i: + * ace/Reactor_Impl.h: + * ace/Select_Reactor_T.cpp: + * ace/Select_Reactor_T.h: + * ace/Select_Reactor_T.i: + * ace/TP_Reactor.cpp: + * ace/WFMO_Reactor.cpp: + * ace/WFMO_Reactor.h: + * ace/WFMO_Reactor.i: The change was motivated by removing a race + condition in TP_Reactor during shutdown. There was a small time + gap between a thread running TP_Reactor event loop checking its + end_event_loop flag to the thread actually grabing the token in + TP_Reactor. Since the token return to its "normal" state after + broadcasting, this thread has no chance to notice that the + reactor has already been shutdowned and thus a deadlock occured. + In order to fix the problem, we must keep a state indicating + whether the reactor has been shutdowned or not in the reactor. + + An added benefit of adding this state is that every reactor now + has its own run_reactor_event_loop which mimic the behavior of + the static ACE_Reactor::run_event_loop but instead of working on + the singleton reactor, the added function work on an instance of + reactor object. In fact, all event_loop control functions have + been added. They are named *_reactor_event_loop to + differentiate their behavior. These newly added function use + the added state in the reactor to control the looping of event + handling. All run_reactor_event_loop methods take an extra + argument of a function pointer. The function will be called in + every iteration if it is set. + + Notice that the singleton event loop control functions are still + available. Although these function merely forward the call to + the singleton reactor's *_reactor_event_loop functions, you can + still use them to control the "main" event loop. In fact, it is + required that you use these functions to run the main event loop + because it facilitates Service_Configurator's "reconfigure" + feature. + + All reactors now also have two extra functions namely + "deactivated" which is used to query whether the reactor will + handle more incoming event or not, and "deactivate" which is + used to control this new feature. + + An side effect of the change is that, once a reactor get + deactivated, calls to handle_events will return -1 immediately. + You can use the "deactivated" method to check if there's + actually an error in the handle_events method or it simply + returned because the reactor has been deactivated. This is also + how the various "run_reactor_event_loop" handle the situation. + Notice that this should not cause any backward compatibility + problem becuase if a user is using his own end_event_loop flag, + he will not (and should not) invoke any more handle_events after + the flag has been set. Also, if he is using the global + run_event_loop methods (for controling singleton reactor,) they + should still behave the same. + + To summarize the change: + + 1. The run_event_loop control logic has been "pushed" down into + each individual reactor. The methods supporting the logic are + defined in ACE_Reactor and are: + + run_reactor_event_loop () + run_alertable_reactor_event_loop () + end_reactor_event_loop () + reactor_event_loop_done () + reset_reactor_event_loop () + + 2. The origianl run_event_loop methods in ACE_Reactor are still + working but they now use the run_reactor_event_loop methods in + the implementation of the reactor. + + 3. Reactors now keep a state to indicate handle_events should be + called or not. They can be controlled thru: + + deactivated () + deactivate () + + methods. + +Tue Jul 20 21:31:50 1999 Jim Rogers jrogers@viasoft.com + + * ace/config-mvs.h: added ACE_HAS_EXCEPTIONS. + +Tue Jul 20 21:23:19 1999 David L. Levine + + * ace/OS.* (next_key,total_keys): with TSS_EMULATION, + added guard (using preallocated ACE_TSS_KEY_LOCK) + to access of next_key_. Uninlined both of these + functions because they now have the guards. Thanks + to Jake Hamby for reporting this. + +Tue Jul 20 21:11:02 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + fixed test of g++ for whether it's egcs. Thanks to + Erik Johannes for reporting this. + (The symptom was that TAO's IORManipulation.cpp wouldn't + compile due to an internal compiler error. Adding + -fno-exceptions works around that.) + +Tue Jul 20 18:30:22 1999 Irfan Pyarali + + * ace/Cached_Connect_Strategy_T.h: All functions in + ACE_Cached_Connect_Strategy_Ex and ACE_Cached_Connect_Strategy + that contain specific information about the map used by the + class should not be virtual. + + * ace/Future_Set.cpp (next_readable): Removed extra code that was + left behind from a debugging stage. Thanks to author John + Tucker for helping with this. + +Tue Jul 20 12:02:47 1999 David L. Levine + + * examples/Threads/task_five.cpp (main): removed + ACE_NOTREACHED wrapper around the final return statement. + It's reachable now. + +Tue Jul 20 11:46:09 1999 Douglas C. Schmidt + + * examples/Shared_Malloc/test_position_independent_malloc.cpp: + Completely #ifdef'd this example out until we get it working. + Thanks to David Levine for reporting this. + +Tue Jul 20 11:15:23 1999 David L. Levine + + * ACE-INSTALL.html: updated memory requirements discussions. + +Tue Jul 20 09:43:36 1999 Ossama Othman + + * ace/Future_Set.cpp (next_readable): + + Fixed unused variable warnings. + +Tue Jul 20 09:33:02 1999 David L. Levine + + * ace/OS.{h,i} (sigwait): only use the DIGITAL_UNIX sigwait + massaging with cxx, not with any other compiler. Thanks to + Doug Anderson for suggesting this, because + egcs issued warnings with it. + +Tue Jul 20 07:06:28 1999 David L. Levine + + * include/makeinclude/platform_osf1_4.0.GNU: + removed -ptr ptrepository. Let the compiler use its + default template repository. + + * include/makeinclude/rules.local.GNU (realclean): added + cxx_repository, for DU cxx. + +Tue Jul 20 07:01:57 1999 Doug Anderson + + * ace/OS.i (sigwait,thr_sigsetmask): added support for + Cray UNICOS 9. + +Mon Jul 19 22:46:54 1999 Irfan Pyarali + + * ace/Strategies_T.cpp + (ACE_Cached_Connect_Strategy::new_connection):: We use a reverse + lock to let go of the lock for the duration of the actual + connect. This will allow other threads to hack on the + connection cache while this thread creates the new connection. + Thanks to James Whitledge for + suggesting this. + + * tests/Cached_Accept_Conn_Test.cpp + * tests/Cached_Conn_Test.cpp + * tests/Conn_Test.cpp + + Added reverse lock template instantiations. + + * ace/Synch_T: Since the reverse lock constructor that created the + regular lock was removed, there was no need for the + variable, and could be changed into a + reference (instead of pointer). + +Mon Jul 19 23:04:15 1999 Douglas C. Schmidt + + * netsvcs/lib/Logging_Strategy.cpp (init): The ACE_LOG_MSG->open() + call at the end of the ACE_Logging_Strategy::init() method + *must* specify the flags and logger key or an application will + not connect to the client logger daemon automatically when the + ACE_Log_Msg::LOGGER flag is set in a svc.conf file. Thanks to + Jerry De Master for reporting this. + +Mon Jul 19 22:11:13 1999 David L. Levine + + * ACE-INSTALL.html: cleaned up instructions for building + on NT for VxWorks target. Thanks to Stephane Chatre + for reporting that the instructions + were out of date. + +Mon Jul 19 21:38:16 1999 Carlos O'Ryan + + * tests/run_tests.vxworks: + Re-enable the Cached_Conn_Test and Cached_Accept_Conn_Test, it + works on Linux, NT, Solaris, IRIX and HP-UX so we should be + pretty close. Thanks to Irfan for fixing the problems with this + test. + +Mon Jul 19 21:26:57 1999 David L. Levine + + * ace/OS.{h,i}: reverted sigwait () changes on Digital + Unix. They cause examples/Threads/process_manager.cpp + to not compile on DU 5.0 with cxx 6.2-021. See + Mon Jul 19 21:13:16 1999 Doug Anderson . + +Mon Jul 19 21:13:16 1999 Doug Anderson + + * ace/ACE.cpp,ace/Basic_Types.h,ace/CDR_Stream.{h,cpp}, + ace/SOCK_Dgram_Bcast.cpp,ace/config-cray.h, + tests/Basic_Types_Test.cpp,tests/Handle_Set_Test.cpp, + include/makeinclude/platform_cray.GNU + + I finally managed to get the latest and greatest to work on + the Cray. Still no CDR support, but that will be post 5.0. + + * ace/OS.{h,i}: added support for egcs on Digital Unix (4.0d & e). + Fixe problem with legacy workarounds in OS.* for sigwait() and + cxx/GNU that don't appear to be necessary on 4.0d/e/f with + neither cxx nor GNU. + + * include/makeinclude/platform_tru64_g++.GNU: added. Works + with ace/config-tru64.h. + +Mon Jul 19 19:46:50 1999 Irfan Pyarali + + * ace/OS.h: Added ACE_*_cast_*_ptr and ACE_*_cast_*_ref for const, + static, and reinterpret casts. + + * ace/Strategies_T.cpp (find): + * ace/Cached_Connect_Strategy_T.cpp (find): + + The comparison should be between ACE_PEER_CONNECTOR_ADDR and not + REFCOUNTED_HASH_RECYCLABLE_ADDRESS. + + * ace/Svc_Handler: Changed to . + was too generic and in some cases a method was already + present in classes deriving from Svc_Handler. + + Also, added a accessor. + + The following files were effected: + + - ace/Cached_Connect_Strategy_T.cpp + - ace/Cached_Connect_Strategy_T.h + - ace/Caching_Utility_T.cpp + - ace/Strategies.h + - ace/Strategies.i + - ace/Strategies_T.cpp + - ace/Strategies_T.h + - ace/Strategies_T.i + - tests/Cached_Accept_Conn_Test.cpp + - tests/Cached_Conn_Test.cpp + +Mon Jul 19 20:08:15 1999 Carlos O'Ryan + + * ace/Strategies_T.cpp: + Fixed lookup of connections in the Cached_Connect_Strategy, + thanks to Irfan for providing this fix. + +Mon Jul 19 12:26:20 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU, + ace/config-g++-common.h: + don't #define ACE_HAS_GNUG_PRE_2_8 with Tornado II's + g++. It's egcs, though it's version identifier says + it's 2.7. Thanks to Thomas Lockhart + for reporting this. [Bug 80] + +Mon Jul 19 09:50:31 1999 Steve Huston + + * ace/Future.cpp: Added ACE_TYPENAME to template-qualified types. + * ace/Future.cpp: Added #include "ace/Containers.h" to be sure the + types necessary for this class is available at template link + time. + + * apps/gperf/src/Options.h: If on PharLap ETS, clear out its definition + of EOS to avoid compile errors. Thanks to David Hauck + for this fix. + +Mon Jul 19 08:12:30 1999 David L. Levine + + * include/makeinclude/platform_tru64_cxx.GNU: added support + for DU 4.0E and D. + +Mon Jul 19 08:08:25 1999 Steve Huston + + * ace/config-hpux-(10 11).x-hpc++.h: In the aC++ section, if __HP_aCC + is not set, set it. Some parts of TAO rely on it, but it's not set + until the most recent versions of the compiler. Thanks to Brian + Wallis for helping figure this out. + +Mon Jul 19 07:53:59 1999 David L. Levine + + * ace/SOCK_Dgram_Mcast.cpp (open): added unnecessary const_cast + of mcast_addr to ACE_Addr &, so that Sun C++ 4.2 will compile + without error. Thanks to Andy for this fix. + +Sun Jul 18 21:36:04 1999 David L. Levine + + * OS.cpp (sched_params): wrapped DIGITAL_UNIX preprocessor + symbol in parenthesis. + +Sun Jul 18 14:30:54 1999 Douglas C. Schmidt + + * tests/run_tests.sh: Reenabled the Future_Set_Test. Hopefully, + this will work on Solaris and the other platforms now! + + * ace/Future*: Added some fixes for Future_Set that should prevent + it from hanging indefinitely on certain platforms. Also, + removed the Future_Node.h and Future_Node.cpp files since they + are no longer used. Thanks to John Tucker + for contributing these fixes. + + * ace/SOCK_Dgram_Mcast: Finished implementing the QoS-enabled APIs for + socket datagram multicast. This required refactoring quite a + bit of code and adding some new methods that take the + ACE_QoS_Params. + + * ace/SOCK_Dgram.cpp: Finished integrating the QoS support + for SOCK dgrams. + + * ace/SOCK_Dgram.cpp: Factored out common code in the + ACE_SOCK_Dgram constructors. + + * ace/SOCK_Connector: Finished implementing the QoS-enabled + connect() methods. To make this cleaner, I've created a new + "shared_open()" method that factors out the common code. + + * ace/SOCK_Acceptor: Finished implementing the QoS-enabled open() + method. To make this cleaner, I've created a new + "shared_open()" method that factors out the common code. + +Sat Jul 17 13:36:03 1999 Ossama Othman + + * ace/High_Res_Timer.cpp (get_cpuinfo): + + Removed extra `FILE *cpuinfo' declaration. + +Sat Jul 17 12:20:25 1999 Douglas C. Schmidt + + * ace/High_Res_Timer: Added integrated support for Alpha and + Pentium that will eliminate the 5sec startup delay for Linux/PII + clients using the ACE high resolution timer. Thanks to Thomas + Lockhart for these fixes. + + * netsvcs/servers/main.cpp (main): Fixed a typo caused by recent + integration of Jerry De Master's fixes. + +Fri Jul 16 19:41:05 1999 Irfan Pyarali + + * ace/ACE.cpp (out_of_handles): Added a function to check if a + process is out of handles (file descriptors). This is required + to avoid repeating this code in many places. Also, note that + all platform specific quirks can be captured in this function. + + * ace/Cached_Connect_Strategy_T.cpp (cached_connect): + * tests/Cached_Conn_Test.cpp (out_of_sockets_handler): + * tests/Cached_Accept_Conn_Test.cpp (out_of_sockets_handler): + + Changed the above to use the new ACE::out_of_handles() function. + + * ace/OS.h (ENFILE): Added ENFILE if missing on platform. In that + case, ENFILE will equal to EMFILE. + +Fri Jul 16 13:55:34 1999 Douglas C. Schmidt + + * include/makeinclude/{build_dll.bor,build_exe.bor,compiler.bor}, + ace/{Makefile.bor,ace.rc}: + Updated these files to add version information to the DLLs so + when you right click them in windows explorer you can see what + version the file is (e.g., "4.6.45"). Thanks to Christopher + Kohlhoff for contributing this. + + * netsvcs/servers/main.cpp (main): Disable debugging messages + if the -d option isn't given to ACE_Service_Config. Thanks to + Jerry De Master for reporting this. + + * ace/config-win32-borland.h: Updated this file to enable some + necessary macros. Thanks to Christopher Kohlhoff + for reporting this. + + * tests/DLL_Test.cpp, + tests/run_test.bat: Updated these to handle the appropriate + directory where the Borland tests are built. Thanks to + Christopher Kohlhoff for reporting this. + + * netsvcs/lib/Logging_Strategy.cpp (init): When the application + program is started, none of the log output is sent to the + Client_Logging_Service. Further investigation shows that the + ACE_Log_Msg::open() method is responsible for connecting to the + client logger if the ACE_Log_Msg::LOGGER flag is set. However, + the connections never attempted because the ACE_Log_Msg::open() + method is called before the Logging_Strategy flags have been + parsed. This problem was fixed by rearranging the point at + which the ACE_LOG_MSG->open() method was called. Thanks to + Jerry De Master for contributing this. + + * netsvcs/lib/Client_Logging_Handler.cpp (send), + netsvcs/lib/Log_Message_Receiver.cpp (log_output): + All log message output in ACE is done through one of the + ACE_Log_Record::print() methods. Each of the overloaded methods + has a argument as the second argument. However, all + uses of the ACE_Log_Record::print() method in + Log_Message_Receiver.cpp and Client_Logging_Handler.cpp pass + zero for the flags argument. To fix this, simply pass + ACE_Log_Msg::instance()->flags() instead of 0. Thanks to Jerry + De Master for contributing this. + + * ace/Log_Record.cpp (format_msg): Added code for the new + ACE_Log_Record::format_msg() method that adds the date/time + stamp to the ACE_Log_Msg::VERBOSE_LITE output. Thanks to Jerry + De Master for contributing this. + + * netsvcs/lib/Logging_Strategy.cpp (init): Make sure the + ACE_Log_Msg::VERBOSE_LITE flag is OR'd into the clr_flags() + call. Thanks to Jerry De Master for + reporting this. + + * netsvcs/lib/Logging_Strategy.cpp (tokenize): Make sure that + the ACE_Log_Msg::VERBOSE_LITE flag is correctly parsed. Thanks + to Jerry De Master for reporting this. + + * ace/Memory_Pool.h: Added a way to set the segment_size in + ACE_Shared_Memory_Pool_Options and ACE_Shared_Memory_Pool. + Thanks to Serge Kolgan for this fix. [This + feature was actually added a couple of beta releases ago, but + somehow the ChangeLog entry got lost.] + +Fri Jul 16 16:41:22 1999 Ossama Othman + + * ace/Stats.cpp (print_summary): + + Fixed format specifier that was expecting an integer argument. + It needed an additional percent specifier. + +Fri Jul 16 09:20:42 1999 Arturo Montes + + * ace/OS.i: Patch the dl* family to keep ACE + compatible in SCO OpenServer 5.0.0, 5.0.2, 5.0.4 with 5.0.5 + + * ace/config-sco-5.0.0.h: Bring OpenServer up to date. + + * include/makeinclude/platform_sco5.0.0-fsu-pthread.GNU: + Use gcc-2.95. + +Fri Jul 16 11:50:24 1999 Nanbor Wang + + * ace/Log_Msg.cpp (log): + * tests/Basic_Types_Test.cpp (main): Reverted my previous + change. It was not a safe assumption. + +Fri Jul 16 02:28:10 1999 Nanbor Wang + + * ace/Log_Msg.cpp (log): Changed (*va_arg (argp,PTF))(), which + extracts a function pointer from va_list and makes a call using + the pointer pointer to ACE_reinterpret_cast (PTF, va_arg (argp, + long))(). This assumes the sizeof (long) is exactly equal to + the size of a function pointer. + + * tests/Basic_Types_Test.cpp (main): Narrow down the check to + ensure sizeof(long) == sizeof (a function pointer) (which is + true for all the platforms that ACE runs on.) + +Fri Jul 16 00:07:23 1999 Irfan Pyarali + + * tests/Cached_Accept_Conn_Test.cpp (test_connection_management): + Changed the test to allow for both one listen endpoint or + multiple listen endpoints. + +Thu Jul 15 22:42:36 1999 Nanbor Wang + + * ace/Message_Queue.h: (ACE_MESSAGE_QUEUE_DEFAULT_TYPE): + * ace/Future_Set.{h,cpp} (ACE_Future_Set): Typedef'ed the + ACE_Message_Queue to ACE_MESSAGE_QUEUE_DEFAULT_TYPE and use the + typedef'ed name in ACE_Future_Set's contstructor to get around a + bug in vxworks' g++ compiler. + +Thu Jul 15 22:14:18 1999 Irfan Pyarali + + * ace/Cached_Connect_Strategy_T.cpp + * ace/Cached_Connect_Strategy_T.h + * ace/Strategies_T.cpp + * ace/Strategies_T.h + + Changed find()'s signature to help g++. + + * tests/Cached_Accept_Conn_Test.cpp + * tests/Conn_Test.cpp + + Added template instantiations. + +Thu Jul 15 21:32:26 1999 David L. Levine + + * bin/create_ace_build: removed # -*- perl -*- on first + line so that t/csh users don't trip over it. Thanks + to Irfan for reporting this. + +Thu Jul 15 20:23:39 1999 Irfan Pyarali + + * tests/Cached_Conn_Test.cpp (test_connection_management): Changed + the test to allow for both one listen endpoint or multiple + listen endpoints. + + * ace/Cached_Connect_Strategy_T.cpp: + * ace/Strategies_T.cpp + + - find: Since the comparison of + REFCOUNTED_HASH_RECYCLABLE_ADDRESS doesn't work very well when + trying to find an idle connection (because there are many idle + states), we now use the new backet iterator to find a idle + connection. + + - check_hint_i: Explicitly checks for idleness; previously it + was simple checking !closed. + + * ace/Strategies.h (ACE_Recyclable): Changed ACE_Recyclable::State + to ACE_Recyclable_State. + + * ace/Strategies_T.h (ACE_Refcounted_Hash_Recyclable): + + - Added operator!=(ACE_Refcounted_Hash_Recyclable) + - Removed operator==(T) + - Added T &subject() + - Change operator==(ACE_Refcounted_Hash_Recyclable) to check + for equality in state and subject. + + * ace/Caching_Utility_T.cpp (minimum): Entries marked + ACE_RECYCLABLE_PURGABLE_BUT_NOT_IDLE should also be considered + for purging. + + * ace/Cleanup_Strategies_T.cpp (cleanup): The hash map of the + connection cache may contain duplicates. Therefore, we are not + exactly sure which map entry will be removed when calling + unbind(). Therefore, we use the other unbind() which gives us + back the value of the entry that was removed. This way will + close the correct handler. + + * ace/Svc_Handler.cpp (state): Added a new method that allows the + user to explcitly set the state of the Svc_Handler. If the + Svc_Handler does not have a recycler, this method will have no + effect. + +Thu Jul 15 16:39:06 1999 Ossama Othman + + * Makefile: + * NEWS: + + The NEWS file is no longer a generated file so it was added to + the list of controlled files. + +Thu Jul 15 16:20:43 1999 Nanbor Wang + + * ace/Service_Manager.cpp (init): Check to see the acceptor handle + is ACE_INVALID_HANDLE before the actual initialization to + prevent this service from being initialized twice. + (fini): Must call remove_handler with + ACE_Event_Handler::DONT_CALL since the service manager won't be + around when the reactor is being destroyed. Thanks to Gheorghe + Aprotosoaie for reporting this. + +Thu Jul 15 16:26:28 1999 David L. Levine + + * ace/OS.cpp (spa): use ACE_NEEDS_HUGE_THREAD_STACKSIZE + instead of hard-coded value. + + * ace/config-vxworks5.x.h: added default + ACE_NEEDS_HUGE_THREAD_STACKSIZE of 64000. + +Thu Jul 15 16:08:48 1999 Nanbor Wang + + * ace/config-win32-common.h: Moved ACE_HAS_IP_MULTICAST down + *after* ACE_HAS_WINSOCK2 is defined. Thanks to Marina for + reporting this. + +Thu Jul 15 16:11:04 1999 David L. Levine + + * ace/Basic_Types.h (ACE_U_LongLong): removed user-defined + conversion to ptr_arith_t. Replaced with new macro, + ACE_LONGLONG_TO_PTR. + +Thu Jul 15 15:31:49 1999 Ossama Othman + + * ace/ACE.cpp (timestamp): + * ace/High_Res_Timer.cpp (print_ave): + * ace/Local_Tokens.cpp (open): + * ace/Log_Msg.cpp (log): + * ace/Log_Record.cpp (format_msg): + * ace/Naming_Context.cpp (parse_args): + * ace/OS.cpp (unique_name): + + Fixed warnings and generated by gcc 2.95; mostly due to format + specifier mismatches and inefficient conversion operator usage. + +Thu Jul 15 14:21:32 1999 David L. Levine + + * docs/ACE-guidelines.html: reverted to the original + perl magic that goes at the top of every script. The + fix that was supposed to work on HP/UX doesn't. See + Thu Jul 08 22:15:50 1999 David L. Levine + +Thu Jul 15 12:19:44 1999 David L. Levine + + * bin/make_release: added -u option, to allow updating the + version stamps from any directory. Also, added suppression + of cvs checkout warning about empty ("New") directories. + + * Makefile: added -u to make_release invocations. + +Thu Jul 15 11:39:44 1999 David L. Levine + + * ACE version 4.6.45 released. + +Thu Jul 15 11:26:43 1999 David L. Levine + + * Makefile: made NEWS a dependency of release. + +Thu Jul 15 10:05:40 1999 David L. Levine + + * docs/ACE-guidelines.html: removed reference to + ACE_OS::scanf (). No such thing. + +Thu Jul 15 10:01:31 1999 Steve Huston + + * ace/OS.h: TRANSMIT_FILE_BUFFERS are not defined on PharLap ETS - + it's a Microsoft-specific extension to Winsock 1.1. + + * ace/config-win32-common.h: ACE_HAS_IP_MULTICAST is only set for + Winsock 2. + + Thanks to David Hauck for these fixes. + +Thu Jul 15 09:28:32 1999 David L. Levine + + * include/makeinclude/platform_tru64_cxx.GNU: changed + 4.0f to 4.0F, because that's what sizer -v returns + on DU 4.0F. Thanks to Doug Anderson + for reporting this. + + * ace/config-tru64.h: only #define _LIBC_POLLUTION_H_ + with DU >= 5.0. Thanks to Doug Anderson + for reporting that it's not necessary on DU 4.0F. + +Thu Jul 15 09:15:11 1999 Steve Huston + + * ace/config-aix-4.x.h: Corrected template settings for IBM C/C++ + 3.6 compiler. It does not get ACE_HAS_STD_TEMPLATE_SPECIALIZATION. + + * include/makeinclude/platform_aix4_cset++.GNU: Delete the + testAIXCompilerVersion.cpp file after getting the compiler version. + +Thu Jul 15 07:33:30 1999 David L. Levine + + * ace/config-tru64.h,config-osf1.h,config-osf1-4.0.h, + include/makeinclude/platform_tru64_cxx.GNU,platform_osf1_cxx.GNU, + ACE-INSTALL.html: moved config-osf1.h to config-tru64.h, + and platform_osf1_cxx.GNU to platform_tru64_cxx.GNU. + Thanks to Doug Anderson for this suggestion. + +Wed Jul 14 22:23:10 1999 David L. Levine + + * ace/config-cray.h: replaced ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA + with ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION. The standard + "template class" explicit instantiations work with version + 3.2.0.1 of the compiler. Thanks to Doug Anderson + for reporting this. + + * ace/config-ghs-common.h: use + ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION with Green Hills 1.8.9 + and later. Thanks to Carlos for suggesting that we give it + whirl. It worked :-) + +Wed Jul 14 22:03:08 1999 David L. Levine + + * ace/config-osf1-4.0.h: enable pragma message disable declbutnotref + with Digital Unix 4.0f, as well as 5.0. Thanks to + Doug Anderson for reporting that + it's necessary. + + * ACE-INSTALL.html: updated config/platform info for + Digital UNIX 4.0f (and 5.0). + + [Bug 65] + +Wed Jul 14 19:44:21 1999 Steve Huston + + * ace/Thread_Manager.cpp (spawn_i): Defer acquiring the thread + descriptor's lock until just before attempting to start the thread + to avoid places where the thread descriptor could be destroyed + while holding the lock (doing that is an undefined operation in + pthreads, and has particularly bad results on HP-UX 11). If the + thread creation does fail, release the lock before returning + the error indication (taking care to guard errno). Removed an + unreachable block of code which put the thread descriptor on the + wrong list anyway. + Removed the #if 1, #else, #endif around the auto_ptr for + new_thr_desc - if it's still working this close the ACE 5 release, + it wins. Besides, the use of the auto_ptr was ingrained in the + rest of the function, without the #if checks. + +Wed Jul 14 19:03:57 1999 David L. Levine + + * etc/purify.solaris2: added another UMR suppression for + __sigprocmask in the Solaris 2.6 threads library. Thanks + to Andy for reporting this. + +Wed Jul 14 16:30:48 1999 Irfan Pyarali + + * ace/Hash_Map_Manager_T.h (class ACE_Hash_Map_Bucket_Iterator): + Added a new class that allows the iteration over the entries of + a of a particular bucket in a hash map. + + * tests/Hash_Map_Bucket_Iterator_Test.cpp: A test for the new + ACE_Hash_Map_Bucket_Iterator class. + +Wed Jul 14 16:37:33 1999 Ossama Othman + + * Makefile: + + Added Makefile.am and NEWS to the list of controlled files. The + file `NEWS' will get generated when a release is made. + + * TODO: + * acconfig.h: + * configure.in: + * configure: + + Minor ACE Configuration Project related updates and fixes. + +Wed Jul 14 13:38:12 1999 Steve Huston + + * tests/Cached_Accept_Conn_Test.cpp: Moved defs of Client_Svc_Handler + and Server_Svc_Handler classes to new file, Cached_Accept_Conn_Test.h + to make AIX xlC happy. + + * tests/Cached_Conn_Test.cpp: Moved definition of Svc_Handler class + new file, Cached_Conn_Test.h to make AIX xlC happy. + + * tests/Cached_Accept_Conn_Test.cpp, Cached_Conn_Test.cpp: Don't + even try to build these on AIX C Set++ 3.1. It can't hack the + auto template instantiation - overwrites a template generator + file and tosses its cookies. ACE is still the best C++ compiler + test on the planet. + +Wed Jul 14 16:24:38 1999 Carlos O'Ryan + + * ace/CDR_Stream.h: + * ace/CDR_Stream.cpp: + Added new method to efficiently steal the contents of a CDR + stream and store them in another. + +Wed Jul 14 12:05:13 1999 David L. Levine + + * include/makeinclude/rules.local.GNU (LN_S): on WIN32 + hosts, use cp -p instead of ln -s, because symbolic + links aren't supported. + +Wed Jul 14 11:22:31 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU, + ACE_INSTALL.html: with egcs (Tornado II) and without + exception handling, add -Wno-uninitialized to CCFLAGS. + The version of egcs that is provided with Tornado II + produces some spurious warnings about uninitialized + variables (including "this" :-). This was a problem + in older versions of egcs, but has since been fixed. + To avoid the warning, we always disable the warning + with VxWorks' egcs. + +Wed Jul 14 11:20:31 1999 Steve Huston + + * ace/config-aix-4.x.h: Add ACE_LACKS_SETSCHED for pre-4.3 AIX. + +Wed Jul 14 11:15:24 1999 David L. Levine + + * examples/Shared_Malloc/Malloc.cpp: only explicitly + instantiate ACE_Read_Guard and + ACE_Write_Guard ifndef ACE_HAS_THREADS. + With threads, they're explicitly instantiated in + ace/Synch.cpp. + +Wed Jul 14 10:58:30 1999 Carlos O'Ryan + + * ace/CDR_Stream.h: + * ace/CDR_Stream.cpp: + Clarified the relationship between this implementation and the + original SunSoft version. + +Wed Jul 14 10:47:45 1999 David L. Levine + + * include/makeinclude/platform_qnx_neutrino.GNU: + added ACE_HAS_GNUG_PRE_2_8 := 0, so that exception + handling will be disabled by default. + +Wed Jul 14 10:34:37 1999 David L. Levine + + * examples/IPC_SAP/SOCK_SAP/FD-unclient.cpp: fixed typo, + ACE_LACKS_UNIX_DOMAIN_SOCKETS instead of + ACE_HAS_UNIX_DOMAIN_SOCKETS. + +Wed Jul 14 10:22:29 1999 David L. Levine + + * ace/Singleton.*: added ACE_Unmanaged_Singleton and + ACE_Unmanaged_TSS_Singleton template class. They're + identical to ACE_Singleton and ACE_TSS_Singleton, + respectively, except that they don't register for + cleanup with the ACE_Object_Manager. Therefore, + the application is responsible for explicitly destroying + the instance after it is no longer needed (if it wants to + avoid memory leaks, at least). The close () static member + function must be used to explicitly destroy the Singleton. + Thanks to Valery Arkhangorodsky + for suggesting this and providing the code. + +Wed Jul 14 10:01:47 1999 David L. Levine + + * ace/OS.h (ACE_{,U_}ONE_SECOND_IN*): made the trailing + L or U upper case, for readability. Thanks to Chris + for noticing this. + +Wed Jul 14 09:40:37 1999 David L. Levine + + * include/makeinclude/wrapper_macros.GNU: when setting + ACE_HAS_GNUG_PRE_2_8, if not g++: don't override + the value to null if it was non-null. Also, clarified + use of ACE_HAS_GNUG_PRE_2_8: 1 for g++ < 2.8.0, + 0 for g++ >= 2.8.0, undefined for non-g++. + +Wed Jul 14 09:29:57 1999 David L. Levine + + * tests/Makefile (realclean): remove log/compilations.log*. + +Tue Jul 13 22:25:18 1999 Carlos O'Ryan + + * include/makeinclude/wrapper_macros.GNU: + Disable the "unitialized" warnings with EGCS+exceptions, it + gives too many bogus warnings to take care of them. + +Tue Jul 13 22:16:17 1999 Carlos O'Ryan + + * bin/ACEutils.pm: + Wait for non empty files, sometimes the process creates the + files but does not have enough time to fill its contents. + +Tue Jul 13 21:32:44 1999 Ossama Othman + + * acconfig.h: + * ltconfig: + * ltmain.sh: + * ace/Makefile.am: + * tests/Makefile.am: + + ACE Configuration Project updates. Synchronized with current + version of ACE in CVS repository. + +Tue Jul 13 15:22:51 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + set ACE_HAS_GNUG_PRE_2_8 to 0 with egcs (Tornado II). + +Tue Jul 13 15:15:43 1999 Steve Huston + + * ace/ace-dll.icc, ace-lib.icc: Corrected source file set; now builds + (still with some warnings) on AIX, Visual Age C++ 4. + +Tue Jul 13 15:11:28 1999 Nanbor Wang + + * bin/run_all_win32.pl: Fixed program output redirection problem. + Unfortunately, the fix requires one to have either 'sh' or '4nt' + to redirect output from another perl script correctly. + +Tue Jul 13 15:04:35 1999 David L. Levine + + * include/makeinclude/platform_qnx_neutrino.GNU: + removed full paths from commands, because they're + prefixed with i386-nto-. + + * ace/config-qnx-neutrino.h: updated to build with egcs. + +Tue Jul 13 15:03:01 1999 David L. Levine + + * ace/Pipe.cpp (open): moved declaration of local variable + "one" inside the ACE_LACKS_TCP_NODELAY #ifndef block. + +Tue Jul 13 14:57:56 1999 David L. Levine + + * ace/SV_Semaphore_Simple.{h,cpp} (init,open,name_2_key): + added static cast of ACE_INVALID_SEM_KEY to key_t. key_t + is unsigned on QNX Neutrino, but we want to keep + ACE_INVALID_SEM_KEY as -1. + +Tue Jul 13 11:57:53 1999 Nanbor Wang + + * ace/config-win32.h: Changed CApplication to CWinApp. Thanks to + John Morey for pointing this out. + +Tue Jul 13 11:13:52 1999 Steve Huston + + * ACE_INSTALL.html: Added some info for building on AIX with + Visual Age C++. + + * ace/config-aix-4.3.x.h: New file - these version-specific configs + are particularly useful with Visual Age C++, which has its own + funky make system that doesn't use the platform_macros.GNU files, + and so doesn't pick up the ACE_AIX_MAJOR/MINOR_VERS settings which + are used in config-aix-4.x.h. + + * ace/config-aix-4.x.h: Corrected template settings for Visual Age C++ + and added ACE_HAS_TYPENAME for VAC++ also. + +Tue Jul 13 10:40:31 1999 Irfan Pyarali + + * ace/Cached_Connect_Strategy_T.cpp (purge_connections): There is + no need to set the purge percentage again. + +Tue Jul 13 10:39:57 1999 Matthew J Braun + + * ace/Containers_T.h,i: Altered private member list_ of + DLList_Iterator to be a pointer rather than a reference. This + allows the reset method to work because it was overwriting the + contents of list_ rather than iterating over a different list + +Tue Jul 13 09:14:31 1999 Steve Huston + + * ace/Cached_Connect_Strategy_T.cpp (dtor): Added ACE_TYPENAME + to 'iter' declaration since its type depends on template parameters. + +Tue Jul 13 09:11:24 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: + moved LIBS setting for Green Hills 1.8.9 from + x86-only to all targets. Thanks to Dale Wood + for confirming that this + is necessary for PowerPC targets. + +Tue Jul 13 08:18:56 1999 David L. Levine + + * ace/config-osf1.h,config-osf1-4.0.h, + include/makeinclude/platform_osf1_cxx.GNU: + added another significant figure to the version identifer, + e.g., 0x40F and 0x500. [Bug 65] + +Tue Jul 13 06:45:53 1999 Steve Huston + + * examples/Shared_Malloc/test_position_independent_malloc.cpp: Moved + definition of Dummy_Data to test_position_independent_malloc.h, a + new file, to satisfy AIX IBM C++ template instantiation. + + * include/makeinclude/platform_aix4_cset++.GNU: Turn on/off warnings + based on compiler version, not OS version. Thanks to Craig + Rodrigues for sending the code in! + + * THANKS: Added Craig Rodrigues to the hall of fame. + + * ace/config-aix-4.1.x.h, config-aix-4.2.x.h: Added setting for + ACE_AIX_MAJOR_VERS and ACE_AIX_MINOR_VERS if they weren't set + already. Eases backwards compatibility for those who don't use + the ACE build macros (horrors! :-). Thanks to Jeff Donner + for this suggestion. + +Mon Jul 12 18:24:34 1999 Kirthika Parameswaran + + * tests/Cached_Accept_Conn_Test.cpp: + This tests explicit purging from the server's point of view. + When the acceptor in either its accept_svc_handler () or open () + runs out of descriptors, purging of unused svc_handlers from the + connecton cache is requested. + + * tests/Cached_Conn_Test.cpp: + Defined ACE_HAS_BROKEN_EXTENDED_TEMPLATES for the + Caching_Strategy_Adapter. If this condition is true, then only + Least Recently Used Caching Strategy is available. This was + necessary for compilers which dont accept long template lists, + for example GNUC version < 8.0. Total credit for this hack + to get through the old GNUC compiler goes to Irfan + of the DOC group. + + * tests/Makefile: + Added Cached_Accept_Conn_Test.cpp. + + * tests/Makefile: + * tests/run_tests.sh: + * tests/run_pharlap_tests.bat: + * tests/run_tests.bat: + * tests/run_tests.psosim: + * tests/run_tests.vxworks: + Added Cached_Conn_Test, Map_Manager_Test and + Cache_Map_Manager_Test to the above. + +Mon Jul 12 17:31:28 1999 Nanbor Wang + + * bin/run_all_win32.pl: Fixed the missing execution output problem + and simplified how the script gets invoked. See comments for + more details. + + * ace/config-win32.h: + * ace/Object_Manager.h: Updated some unclear comments regarding + the use and instantiation of non-static object manager. Thanks + to John Morey and David for pointing this out. + + * ace/ace_dll.dsp: Merged additional MFC configuration. Thanks to + John Morey for submitting the patch. + +Mon Jul 12 15:27:37 1999 David L. Levine + + * ace/config-osf1.h,config-osf1-4.0.h, + include/makeinclude/platform_osf1_cxx.GNU, + ACE-INSTALL.html: added support for DU 4.0f. It needs the + same #defines that we use on DU 5.0. [Bug 65] + +Mon Jul 12 14:41:14 1999 David L. Levine + + * ace/config-win32.h,Object_Manager.h: cleaned up comments + about the non-static ACE_Object_Manager. Thanks to + John Morey for reporting this. + +Mon Jul 12 13:54:34 1999 Kirthika Parameswaran + + * ace/Cache_Map_Manager_T.{h,i,cpp}: + Defined ACE_T1 and ACE_T2 which contain the template parameter + list and added ACE_HAS_BROKEN_EXTENDED_TEMPLATES macro where + needed. This takes care of the template list for compilers which + cant accept a long template list, for example: GCC 2.7.2. + Also changed the purge() to now call the for + purging entries form the cache. + + * ace/Hash_Cache_Map_Manager_T.h: + Added ACE_HAS_BROKEN_EXTENDED_TEMPLATES to complement the + Cache_Map_Manager class changes. + + * ace/Cached_Connect_Strategy_T.cpp: + Changed dtor to take care of the + ACE_HAS_BROKEN_EXTENDED_TEMPLATES definition. + + * ace/Cached_Connect_Strategy_T.h: + Removed CONNECTION_CACHE_ITERATOR typedef. + + * ace/Caching_Strategies_T.{h,i,cpp}: + Changed template parameter list and removed dependency on the + CONTAINER. Removed clear_cache() method. + + * ace/Caching_Utility_T.{h,i,cpp}: + Added default cleanup strategies to every kind of + caching_utiltity. ACE_Recyclable_Hanlder_Caching_Utility no + longer derives form ACE_Pair_Caching_Utility. + + * ace/Cleanup_Strategies_T.{h,i,cpp}: + Changed ACE_Svc_Cleanup_Strategy to + ACE_Recyclable_Handler_Cleanup_Strategy. + + * tests/Cache_Map_Manager_Test.cpp: + * tests/Map_Manager_Test.cpp: + Made changes to template instantiations. + + * tests/Cached_Conn_Test.cpp: + Added out_of_sockets_handler() which will do the purging. + Added a check for ENOBUFS which arose on NT and ENOENT which + arose on Linux + Solaris. Defined + ACE_HAS_BROKEN_EXTENDED_TEMPLATES for GCC versions < GCC 2.8. + +Mon Jul 12 12:14:45 1999 David L. Levine + + * docs/ACE-development-process.html: added this page, as + a start towards a less chaotic development process. + +Mon Jul 12 10:05:31 1999 Steve Huston + + * ace/Event_Handler_T.i: Added ACE_TYPENAME on template-dependent types + in function signatures. Quiets HP-UX aC++. + + * ace/Based_Pointer_Repository.h: + * ace/Based_Pointer_T.h: Added #include "ace/OS.h" to pick up def. of + ACE_Export when instantiating templates with AIX IBM C++. + + * include/makeinclude/platform_hpux_aCC.GNU: Removed definition for + CPP_LOCATION - use aCC - cpp has too many problems, and a fix for + the pragma warnings was checked into TAO_IDL. + +Mon Jul 12 09:26:29 1999 David L. Levine + + * testsr/Makefile: don't build libDLL_Test.so if not building + shared libraries. This simplifies the build on static-libs + only platforms, and can be used by run_tests.sh, below. + [Bug 62] + + * tests/run_tests.sh: don't run DLL_Test if libDLL_Test.so + was not built. + +Mon Jul 12 07:48:04 1999 David L. Levine + + * docs/ACE-guidelines.html: updated guideline under CVS + section to match the other one about always testing + on egcs. + +Sun Jul 11 23:59:52 1999 nanbor + + * ACE version 4.6.44 released. + +Sat Jul 10 18:05:41 1999 Nanbor Wang + + * ace/config-kcc-common.h: Added ACE_NEW_THROWS_EXCEPTIONS. + Thanks to David for pointing this out. + +Sat Jul 10 16:22:00 1999 Chris Gill + + * ace/config-win32-common.h: wrapped ACE_HAS_TYPENAME_KEYWORD so it is + only set for MSVC++ 6.0 or higher. This is to work around a compiler + bug in MSVC++ 5.0 when trying to compile certain forms with the + typename keyword in a template method argument list. + +Sat Jul 10 13:16:50 1999 Douglas C. Schmidt + + * ace/Malloc: Changed the type of pointer used by ACE_Name_Node + from void * to char * so that we can integrate this cleanly with + ACE_Based_Pointer<>, which will fail if we use void since we + can't return from a "void" function! + + * tests/Thread_Pool_Test.cpp (open): Fixed another somewhat bogus + warning from EGCS related to initialization of loop variables. + + * tests/New_Fail_Test.cpp (main): Make sure to initialize pointers + so that EGCS doesn't complain. + + * tests/MT_Reactor_Timer_Test.cpp (main): Fixed a signed/unsigned + mismatch. + + * tests: Added appropriate header comments for all the *.h files. + + * tests/Cache_Map_Manager_Test.cpp: Capitlized the hash_key + class to be Hash_Key, which is standard ACE programming style. + + * ace/Service_Config.cpp: Added yet another set of + changes to open_i() so that the -d option is handled + appropriately. Thanks to Jonathan Reis + for this fix. + + * ace/SOCK_Acceptor.h: Clarified the parameters for + ACE_SOCK_Acceptor's constructor and open() methods. Thanks to + Ron MacKenzie for motivating this. + +Sat Jul 10 13:56:30 1999 Nanbor Wang + + * tests/MT_Reactor_Timer_Test.cpp (main): Fixed signed/unsigned + comparison. + +Sat Jul 10 08:01:36 1999 David L. Levine + + * docs/ACE-guidelines.html: THANKS instead of README. + +Fri Jul 9 20:54:30 1999 Ossama Othman + + * ace/UNIX_Addr.{h,i} (hash): + + Implemented a hash function for ACE_UNIX_Addr instead of relying + on the base class no-op hash function. Thanks to Irfan for + explaining the best way to do this. + +Fri Jul 9 20:39:47 1999 Kirthika Parameswaran + + * tests/Cached_Conn_Test.cpp: Added an Svc_Handler class which + helped in verifying the course of the program execution. + + * ace/Caching_Utility_T.cpp (minimum): Cleaned up code by removing + redundant else if statement. + + * tests/Cache_Map_Manager_Test.cpp: Resolved some template typos + which surfaced on compiling with VxWorks. + +Fri Jul 09 20:14:13 1999 Irfan Pyarali + + * tests/MT_Reactor_Timer_Test.cpp (main): Added fixes so that test + can work with WFMO_Reactor (WFMO_Reactor needs an extra + handle_events() to get started). + + * tests/Conn_Test.cpp (spawn_processes): Only printing reaping + message when result is not -1. + + * ace/Strategies_T.i (ACE_Refcounted_Hash_Recyclable::operator==): + The check should be for "and", not "or". + + * tests/Conn_Test.cpp: Since timed accept is implemented using + select(), and we use timed accepts with threads, we need a real + lock when using timed accepts even if the OS has thread-safe + accept. + + Also changed the default number of clients to 5. Hopefully, + this won't overrun the backlog on the listen socket. + + * ace/Svc_Handler.cpp (shutdown): Remove self from Reactor only + when we have a valid handle. Otherwise, we lose our current + errno, since the failed remove_handler will set the errno to + EINVAL. + +Fri Jul 9 14:02:52 1999 Steve Huston + + * ace/config-aix-4.x.h: Re-enabled ACE_LACKS_SETSCHED for AIX 4.3. + The OS defs are not aligned/matched correctly with what they mean + in this area, but will need to wait til after ACE 5.0 is done + before straightening it out. + + * ace/WFMO_Reactor.cpp (ACE_WFMO_Reactor_Handler_Repository::bind_i): + Set errno to EMFILE if the max number of handles is registered, + instead of leaving a stale errno for the user to figure out. + + * tests/MT_Reactor_Timer_Test.h (Dispatch_Count_Handler): Changed + type of timers_fired_ from int to size_t so it matches type of + ACE_MAX_TIMERS. + +Fri Jul 9 14:27:10 1999 Douglas C. Schmidt + + * ace/Service_Config.cpp (open_i): Be default, disable debugging + messages. Only reenable them if the -d option is given. Thanks + to Jerry De Master for reporting this. + + * ace/Based_Pointer_T: Factored out all but the operator-> into + a new class called ACE_Based_Pointer_Basic so that we can use + this for "basic types" like char *. Thanks to Irfan for + pointing this out. + + * ace/Based_Pointer_Repository.cpp (unbind): Fixed a + bug in the unbind() loop. Thanks to David Levine and DEC UNIX + C++ for noticing this! + + * ace/Reactor.i (schedule_wakeup): Fixed a misplaced assignment + of Event_Handler->reator (). Thanks to Carlos for reporting + this. + +Fri Jul 09 13:11:33 1999 Nanbor Wang + + * tests/Conn_Test.cpp (spawn_threads): ACE_OS::perror takes a + wchar_t string on CE. + + * tests/test_config.h (set_output): We should use non-unicode + version of ACE_OS::getenv to initialize test_dir on "regular" + UNICODE compilation. Thanks to Steve for reporting this. + + Added more WinCE/UNICODE fixes. + +Fri Jul 9 12:16:00 1999 Kirthika Parameswaran + + * ace/Caching_Utility_T.cpp (minimum): + Modified minimum () of ACE_Recyclable_Handler_Utility class so + that the minimum value is also an entry which is purgable. + + * tests/Cache_Map_Manager_Test.cpp: + SunC++4.0 compiler doesnt accept typedefs with templates and + having ::, for example: HASH_MAP::iterator. One has to typedef + HASH_MAP::iterator and use it to typedef something else. Fixed + this problem in the above test. + +Fri Jul 9 11:39:40 1999 Douglas C. Schmidt + + * ace/Dirent.i: Added a pair of checks to open() and close() + to avoid double deletes. Thanks to Tom Arbuckle + for pointing this out. + + * ace/Reactor.i: For schedule_timer() and schedule_wakeup(), + make sure that the Event_Handler is assigned "this" Reactor + upon successful completion of the operation. Thanks to + Dirk Broer for suggesting this. + +Fri Jul 9 11:10:23 1999 Steve Huston + + * include/makeinclude/platform_hpux_aCC.GNU: Re-suppress warning + 829 on 10.x because there's an offending system header file. + + * tests/test_config.h (ACE_Test_Output::set_output): Change test_dir + to be const because it's initialized with a string literal. + +Fri Jul 9 10:52:45 1999 Kirthika Parameswaran + + * ace/Caching_Utility_T.cpp (minimum): Checked the state of the + Refcounted_Hash_Address with ACE_Recyclable::IDLE_AND_PURGABLE. + +Fri Jul 09 10:49:40 1999 David L. Levine + + * tests/Message_Queue_Test.cpp (main): changed success + message from timed dequeue test to not contain "timedout", + because that trips run_tests.check. + +Fri Jul 09 10:25:42 1999 Irfan Pyarali + + * ace/Shared_Memory_MM.h (ACE_Shared_Memory_MM): Changed the + filename parameter from a non-const string to a const string. + Thanks to Ulf Jaehrig for pointing out this + problem. + +Fri Jul 09 03:31:34 1999 David L. Levine + + * ace/Basic_Types.i: added const to each of the static casts. + +Fri Jul 09 01:45:25 1999 Nanbor Wang + + * bin/auto_compile_win32.pl: A lot of projects changed names + recently and thus the file was not working properly. + +Thu Jul 8 23:15:06 1999 Alexander Babu Arulanthu + + * Merging the "ami_phase3" branch on to the main branch. Change + was done to the CDR_Stream{h,i} files to add the method + to the CDR class. Other than that, no change was + done to ACE. + +Thu Jul 08 22:15:50 1999 David L. Levine + + * docs/ACE-guidelines.html: changed the perl magic that + goes at the top of every perl script, to pick up perl + from the users path. This new version works on HP/UX. + Thanks to Carlos for divining it. + +Thu Jul 08 22:05:31 1999 David L. Levine + + * ace/config-linux-common.h: added #define of + ACE_DEFAULT_BASE_ADDR to 0x40000000 on __powerpc__ + only. + + * ace/config-linuxppcr5.h: removed. LinuxPPC can + now use config-linux-lxpthreads.h. + + * ACE-INSTALL.html: added LinuxPPC info. + + Thanks to Andreas Tobler for helping + to factor out the code from config-linuxppcr5.h. + +Thu Jul 8 21:57:17 1999 Carlos O'Ryan + + * ace/Malloc_T.h: + * ace/Malloc_T.cpp: + Changed the Cached_Allocator class to use a char* as the memory + source. + It was allocated as char* and deallocated as a char*, but casted + to T* to use placement new; this was actually unneeded and + actually an error: the memory does not become a T* until + placement new is invoked on it. [BUGID:40] + +Thu Jul 08 21:34:42 1999 David L. Levine + + * ace/config-lynxos.h: on PowerPC, set + ACE_NEEDS_HUGE_THREAD_STACKSIZE to 32000, instead of + its apparent default of 15000. On both x86 and ppc, + #define ACE_MAP_FIXED to 0 and ACE_DEFAULT_BASE_ADDR to + 0 to try to get the OS to always pick shared memory addresses. + + Thanks to Dan Butler for + suggesting the use of ACE_NEEDS_HUGE_THREAD_STACKSIZE here. + + * tests/Recursive_Mutex_Test.cpp (main): removed explicit + stack size setting, now that we're using + ACE_NEEDS_HUGE_THREAD_STACKSIZE on LynxOS/PPC. + +Thu Jul 08 18:47:23 1999 Kirthika Parameswaran + + * ace/Cached_Connect_Strategy_T.cpp: + Changed: + entry->ext_id_.state (ACE_Recyclable::IDLE); + to + entry->ext_id_.state (ACE_Recyclable::IDLE_AND_PURGABLE); + + * ace/Caching_Utility_T.{h,cpp}: + Added ACE_Recyclable_Handler_Caching_Utility which takes care + that the svc_handler to be purged is in the IDLE_AND_PURGABLE + state. + Made method minimum () virtual. + + * ace/Strategies.h: + Added IDLE_AND_PURGABLE and IDLE_BUT_NOT_PURGABLE states and + removed IDLE state from the enum. This change was necessary to + take care of AMI using the Mux Strategy. + + * ace/Strategies_T.cpp (cache_i): + Made entry state ACE_Recyclable::IDLE_AND_PURGABLE. + + * ace/Startegies_T.i (operator==): + Added checks for the ACE_Recyclable::IDLE_AND_PURGABLE and + ACE_Recyclable::IDLE_BUT_NOT_PURGABLE states. + + Thanks to Irfan of the DOC group for + helping with this. + +Thu Jul 08 18:47:23 1999 Irfan Pyarali + + * tests/Cache_Map_Manager_Test.cpp: Simplified code and output. + +Thu Jul 08 14:56:22 1999 David L. Levine + + * ace/Basic_Types.{h,i} (ACE_U_LongLong): added operators + that take ACE_UINT32 arguments corresponding to each of + the operators that take ACE_U_LongLong & arguments. This + solves some more overload resolution ambiguities. + + * ace/Stats.cpp: changed comparisons of ACE_U_LongLong with + ints to unsigned ints, to avoid overload resolution ambiguity. + +Thu Jul 08 14:29:42 1999 David L. Levine + + * ace/OS.i (gethrtime): cast ts.tv_nsec explicitly to + ACE_hrtime_t, instead of ACE_UINT32, to avoid overload + resolution ambiguity now that we have that ACE_U_LongLong + implicit conversion to ptr_arith_t. + +Thu Jul 8 13:50:14 1999 Steve Huston + + * ace/Reactor_Impl.h (dispatch_notifications): Changed ACE_Handle_Set + arg from const to non-const. Fix in ACE_Select_Reactor_Notify + requires the ability to change the handle set. + + * ace/WFMO_Reactor.{h cpp}: Corresponding removal of 'const' from + ACE_WFMO_Reactor_Notify::dispatch_notifications. Signature change + only - the function is a no-op in this class. + + * ace/Select_Reactor_Base.{h cpp}: In ACE_Select_Reactor_Notify, + dispatch_notifications(), remove the notify pipe's handle from the + dispatch handle set when handling a notification. Else it remained + set and dispatchng I/O handlers came back and ran through it + again, which artificially increased the count of dispatched + handlers, and left some input unhandled when it was ready. + + * tests/MT_Reactor_Timer_Test.cpp: Added some verification checks to + be sure that timer, notify, and input events all are handled at the + right time. + +Thu Jul 08 12:35:23 1999 Nanbor Wang + + * tests/test_config.h: Reorganized WinCE's macros and fix some + minor unicode problems. + +Thu Jul 8 11:33:50 1999 Douglas C. Schmidt + + * Rebuilt the ACE+TAO.tar.gz file. For some reason, there + was a ^M at the end of each line! Thanks to Bruce Edge + for reporting this. + + * ace/Based_Pointer_Repository.cpp (unbind): Rearranged the + iterator code a bit to see if that'll make DEC C++ happy. + + * ace/OS.h: Moved the ACE_MALLOC_ALIGN macro into OS.h. + + * config-aix-4.x.h, + config-lynxos.h, + config-psos-diab-mips.h, + config-psos-diab-ppc.h, + config-psos-diab.h, + config-psos-tm.h, + config-psosim-g++.h, + config-sunos5.5.h: + Added the ACE_MALLOC_ALIGN macro back since it's used in + an ACE test program. + + * ace/Malloc.cpp: Removed the trailing ';' on the #pragma + instantiate. Thanks to David Levine for reporting this. + +Thu Jul 08 11:35:53 1999 David L. Levine + + * ACE-INSTALL.html: added note about IP multicast support + with Tornado II/VxWorks 5.4. It's not enabled by default + in ACE. + +Thu Jul 8 11:31:13 1999 Steve Huston + + * tests/Message_Queue_Test.cpp: Added a test to see the correct errno + is set for a timed-out dequeue operation. + +Thu Jul 08 11:30:43 1999 David L. Levine + + * ACE-INSTALL.html: added note about the uninitialized + variable warnings from (the old) egcs that is + distributed with Wind River's Tornado II. + +Thu Jul 08 10:40:02 1999 David L. Levine + + * ace/config-linuxppcr5.h: use config-linux-lxpthreads.h + because thread support works. + + * ace/config-linuxppcr5.h, config-linux-common.h: use an + ACE_DEFAULT_BASE_ADDR of 0x40000000, because that allows + Naming_Test to work. + + With these two changes, all ACE tests pass on LinuxPPC. + Thanks to Andreas Tobler for the + fixes and testing. + +Thu Jul 08 10:25:55 1999 David L. Levine + + * ace/OS.h,Basic_Types.h: added ACE_U_LongLong conversion operator + to ptr_arith_t. Moved ptr_arith_t typedef from OS.h to + Basic_Types.h, so that it can be used by ACE_U_LongLong. + Thanks to Chris for helping to figure this out. + +Thu Jul 8 08:34:22 1999 Steve Huston + + * ace/Log_Msg.cpp (log): Don't special-case the %t handling on AIX + 4.3 - just 4.2 and earlier. + +Thu Jul 8 00:23:02 1999 Douglas C. Schmidt + + * ace/Malloc_T.cpp: Updated all the methods that check + cp_ptr_ to return immediately if it's 0. Thanks to Dieter for + suggesting this. + + * ace/Malloc.cpp (dump): Added a cast to trigger operator void + * for freep_ (which may be a smart pointer in some + configurations). + + * ace/Based_Pointer_Repository: Revised the implementation of + this class to use the "Cheshire-Cat" technique to hide the + implementation to avoid circular #include dependencies. + + * ace/Token.h (ACE_Token): Clarified that the timeouts are in + "absolute" time, not relative time. Thanks to Everett Anderson + for reporting this. + + * ace/config-win32-borland.h: Only enable + ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION if we're running on + older versions of Borland. Thanks to Christopher Kohlhoff + for reporting this. + +Wed Jul 07 22:44:22 1999 David L. Levine + + * tests/Recursive_Mutex_Test.cpp (main): added comment + explaining why the stack size is now set. + + * tests/test_config.h: removed special ACE_MAX_PROCESSES + and ACE_MAX_THREADS values for LynxOS, because most + tests don't need them. + + * tests/Process_Mutex_Test.cpp: use only 4 processes + instead of ACE_MAX_PROCESSES, on LynxOS only. Otherwise, + the test's ACE_LOG_MSG->op_status assertion fails. + + * ACE-INSTALL.html: removed statements about some tests + failing on LynxOS/PPC. Just Naming_Test and + MM_Shared_Memory_Test fail now. + +Wed Jul 07 19:51:00 1999 Chris Gill + + * ace/config-ghs-common.h: removed use of native auto_ptrs, as they + implement an older specification which lacks the reset method. + +Wed Jul 7 17:17:10 1999 Ossama Othman + + * ace/ARGV.cpp (ACE_ARGV): + * ace/OS.cpp (ACE_OS_Recursive_Thread_Mutex_Guard): + * ace/Sched_Params.i (ACE_Sched_Priority_Iterator): + + Added some class members to the member initializer lists to fix + some "Effective C++" warnings from EGCS. + +Wed Jul 7 16:33:29 1999 Kirthika Parameswaran + + * tests/Cached_Conn_Test.cpp (main): Added default testing of LRU, + LFU, FIFO caching strategies. + + * tests/Cached_Conn_Test.cpp (parse_args): + * tests/Cache_Map_Manager_Test (parse_args): + Runtime selection of different caching strategies + (lru/lfu/fifo/null) made possible. + + * Caching_Strategies_T.{i,cpp}: + Removed typos and also definied the virtual destructor for + ACE_Caching_Strategy. + + * tests/Map_Manager_Test.cpp (test_cache_map_manager): + Added to the construction of + and objects to make + it in sync with the changes made below. + +Wed Jul 07 16:06:45 1999 David L. Levine + + * tests/Recursive_Mutex_Test.cpp: explicitly set the + stack size. This solves the problem on LynxOS/PPC, below, so + the 65-iteration workaround was removed. Thanks to Doug for + this suggestion. + +Wed Jul 7 13:27:53 1999 Douglas C. Schmidt + + * ace/config-win32-borland.h, + ace/config-win32.h: Added support for the ACE::major_versions(), etc. + for PC versions of ACE, as well as UNIX. Thanks to + Jeff Hellzen for suggesting this. + + * ace: Added a new Based_Pointer_T.i file that inlines the + small methods. + + * ace/Malloc[_T]: Cleaned up the code so that we can use the + ACE_Based_Pointer<> consistently when + ACE_HAS_POSITION_INDEPENDENT_MALLOC is enabled and disable. + + * ace/Malloc.h: By default, ACE_MALLOC_PADDING is set to 1 so that + we don't get "divide by zero" errors. However, it's only used + in the computation of the ACE_Malloc_Header if it's > 1. + + * config-aix-4.x.h, + config-lynxos.h, + config-psos-diab-mips.h, + config-psos-diab-ppc.h, + config-psos-diab.h, + config-psos-tm.h, + config-psosim-g++.h, + config-sunos5.5.h: + Removed the ACE_MALLOC_ALIGN macro since it should no longer + be necessary. + + * ace/Malloc.h: Changed the use of macro ACE_MALLOC_ALIGN to + ACE_MALLOC_PADDING, which is more descriptive. + + * Fixed a typo in the TAO-mail.html program where ace-* + should have been tao-*. Thanks to Pedro Alves Ferreira + for reporting this. + + * Fixed all vestiages of "BUG-REPORT-FORM" to say + "PROBLEM-REPORT-FORM." Thanks to Neil B. Cohen + for reporting this. + +Wed Jul 07 12:27:32 1999 David L. Levine + + * ace/config-lynxos.h: added ACE_LACKS_FORK for PowerPC + only. This cleans up most of the remaining test problems + on LynxOS/PPC. + +Wed Jul 07 11:26:06 1999 Nanbor Wang + + * ace/Malloc_T.cpp: Added ASYS_TEXT macros. + +Wed Jul 7 09:05:32 1999 Steve Huston + + * ace/Caching_Strategies_T.i (ACE_Caching_Strategy_Adapter<>::purge_ + percent): Don't return a value from a void function. + +Wed Jul 07 08:35:24 1999 Irfan Pyarali + + * examples/Threads/future1.cpp + * examples/Threads/future2.cpp + * tests/Future_Set_Test.cpp + * tests/Future_Test.cpp + + Fixed some template instantiations. + +Wed Jul 7 03:27:16 1999 Douglas C. Schmidt + + * examples/Shared_Malloc: Added a new file called + test_position_independent_malloc.cpp that exercises the new + "position-independent" features of the ACE_Malloc< class. + + * ace/Malloc_T.cpp: All the ACE_Malloc constructors were calling + open() without checking the results. Now, if failure occurs we + print a message. In addition, we weren't checking in + shared_malloc() to make sure that we'd been properly initialized + by the constructor. Now, if we aren't initialized correctly we + return 0. Thanks to Dietrich Quehl + for reporting these problems. + + * ace/Memory_Pool: Added a new feature to ACE_Shared_Memory_Pool + and ACE_Shared_Memory_Pool_Options that makes it possible to + tailor the size of System V shared memory segments without + breaking any existing ACE code. Thanks to Serge Kolgan + for contributing this enhancement. + + * ace/Makefile.bor (OBJFILES): Updated this file to include + the new Based_Pointer_Repository.obj entry. + + * ace/Makefile: Reran make depend. + + * ace/Makefile: Added the Based_Pointer_Repository.{h,cpp} and + Based_Pointer_T.{h,cpp} files to the Makefile. + + * ace/Malloc.h: Added the first support for the new "Based Pointer + Malloc" feature that's described below. + + * ace: Added the Based_Pointer_Repository.{h,cpp} and + Based_Pointer_T.{h,cpp} files to the release. These classes + make it possible to transparently use "pointers" in shared + memory without having to ensure that the base addresses of all + the pointers are mapped into separate processes at the same + absolute memory base address. Thanks to Dietrich Quehl + for contributing this software. + +Wed Jul 07 01:28:40 1999 Nanbor Wang + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Added the Based_Pointer_Repository.{h,cpp} and + Based_Pointer_T.{h,cpp} files to the project files. + + * ace/Based_Pointer_Repository.cpp: Added define ACE_BUILD_DLL. + +Tue Jul 06 22:47:04 1999 David L. Levine + + * bin/check_build_logs: filter out Purify warning about + non-pic R_SPARC_*. + + * ace/config-linuxppcr5.h: commented out #define __USE_XOPEN + because it's not necessary with glibc 2.1.1. Thanks to + Andreas Tobler for reporting this. + + * ace/OS.i (thr_kill, thr_setprio, sema_destroy, sema_wait, chdir, + unlink, sema_post, thr_continue, thr_getprio, thr_suspend, + ioctl): on VxWorks only, removed ACE_ADAPT_RETVAL wrapper from + system call, because it returns OK/ERROR (except for ioctl, + which returns driver number/ERROR). Thanks to Elias Sreih + for reporting this. + + * tests/SOCK_Send_Recv_Test.cpp (server): added 5 second + sleep so that the code agrees with the comments :-) It now + passes on LynxOS. Thanks to Steve Huston for the fix. Also, + changed an exit () call to ACE_OS::exit (), and changed a few + C-style casts to ANSI-style casts. + +Tue Jul 6 19:20:16 1999 Steve Huston + + * ace/Cache_Map_Manager_T.h: Removed extra "ace/" from #pragma + implementation directive. + + * tests/Cache_Map_Manager_Test.cpp: Changed typedefs for KEY and + VALUE from size_t to ACE_UINT32 to they always pick up the + specializations for ACE_Hash, etc. On HP-UX and AIX, size_t is + not the same as ACE_UINT32, and this caused build errors. + + * tests/Conn_Test.cpp: Restrict range of the test on PharLap ETS, + else it runs out of resources with default configuration. + +Tue Jul 6 18:21:37 1999 Everett Anderson + + * ace/Token_Request_Reply.{h,i,cpp}: Added + ACE_TOKEN_REQUEST_HEADER_SIZE for the fixed-length portion of + ACE_Token_Request's Transfer struct, changing length + calculations accordingly. Added two bytes to the buffer to + accomodate '\0' values after the token name and client ID. + + * ace/Remote_Tokens.cpp: Changed the check for failure when + receiving a reply in request_reply. + +Tue Jul 6 18:21:36 1999 Douglas C. Schmidt + + * ace/Map_Manager.cpp: Made this file conform to the ACE programming + guidelines. + +Tue Jul 6 18:31:34 1999 Carlos O'Ryan + + * include/makeinclude/platform_irix6.x_sgic++.GNU: + Removed pesky warnings about functions to big to optimize + because it would be slow. + +Tue Jul 6 18:15:31 1999 Steve Huston + + * ACE_INSTALL.html: Added a further note re PharLap ETS builds. + + * ace/config-pharlap.h: Added ACE_TIMER_SKEW of 10ms. + + * tests/Atomic_Op_Test.dsp: + * tests/Barrier_Test.dsp: + * tests/Cache_Map_Manager_Test.dsp: + * tests/Future_Set_Test.dsp: + Changed PharLap ETS configurations to put intermediate files in + ETS_LIB\Debug (like all the others), not in ETS_DLL\Debug. + + * tests/test_config.h: Set ACE_MAX_CLIENTS to 4 for PharLap ETS. + + * tests/run_pharlap_tests.bat: Disabled some tests of unsupported + facilities. + + * tests/SOCK_Test.cpp: Replaced "localhost" with ACE_LOCALHOST. + +Tue Jul 6 17:54:52 1999 Kirthika Parameswaran member. + + * ace/Cache_Map_Manager_T.{h, cpp}: + * ace/Hash_Cache_Map_Manager_T.{h,cpp}: + Changed the signature of the constructor.This was needed to be + able to use the External Polymorphism pattern. + + * tests/Cache_Map_Manager_Test.cpp: + * tests/Cached_Conn_Test.cpp: + Made necessary changes to reflect the changes above. + Thanks to Irfan of the DOC group for helping with this. + +Tue Jul 6 17:34:52 1999 Steve Huston + + * ace/config-aix-4.x.h: Enabled ACE_HAS_PTHREADS_UNIX98_EXT and + removed ACE_LACKS_RWLOCK_T for AIX 4.3. Moved some other + ACE_LACKS settings to the pre-4.3 threads section to allow + taking advantage of more capability on AIX 4.3. + +Tue Jul 06 16:29:32 1999 Nanbor Wang + + * ace/OS.h: Moved the string conversion macros before including + OS.i because we also use them in the file. Thanks to Carlos for + reporting this. + + * OS.{h,i,cpp}: + * Parse_Node.cpp: Windows CE fixes. + +Tue Jul 06 15:56:19 1999 David L. Levine + + * ace/ACE.h,Object_Manager.{h,cpp},OS.{h,cpp} + (ACE_Object_Manager*::init () and fini ()): return 1 instead + of -1 after the first call, per program invocation. Thanks + to Jody Hagins for this suggestion. + +Tue Jul 6 15:04:49 1999 Douglas C. Schmidt + + * ace/OS.i (sigwait): Fixed a problem with macro-itis and GCC. The + following macro + + # if (__FreeBSD__ < 3) || defined (CHORUS) || defined (ACE_PSOS) + + was always evaluating to true, even when we're not on FreeBSD!. + The following macro works around this: + + # if (defined (__FreeBSD__) && (__FreeBSD__ < 3)) || + defined (CHORUS) || defined (ACE_PSOS) + + Thanks to Elias Sreih for + reporting this and Carlos for suggesting the workaround. + +Tue Jul 6 11:39:59 1999 Douglas C. Schmidt + + * ace/OS.i: Updated the comment for ACE_ADAPT_RETVAL to + clarify why it is needed. Thanks to Elias Sreih + for motivating this clarification. + +Tue Jul 6 10:42:02 1999 Nanbor Wang + + * tests/test_config.h (ACE_INIT_LOG): Fixed a typo in VxWorks' + definition of ACE_INIT_LOG. Thanks to David for reporting + this. + +Tue Jul 6 10:17:19 1999 Douglas C. Schmidt + + * include/makeinclude/ace_flags.bor: Removed an extraneous + "\orbsvcs". Thanks to Eugene Surovegin (surovegin@softlab.ru) + for reporting this. + +Tue Jul 06 10:17:12 1999 David L. Levine + + * bin/check_build_logs: use mhmail instead of mailx on Suns. + mailx loses the subject, when run from my cron job. Thanks + to Naga for reporting this. + +Mon Jul 5 20:45:21 1999 Steve Huston + + * ace/OS.(h i): Added code for support of pthread suspend/resume and + pthreads reader-writer locks. These features are enabled by setting + the ACE_HAS_PTHREADS_UNIX98_EXT and removing ACE_LACKS_RWLOCK_T. + + * ace/config-hpux11.h: Added ACE_HAS_PTHREADS_UNIX98_EXT and removed + ACE_LACKS_RWLOCK_T - this enables native reader/writer locks as well + as thread suspend and reusme. + + * ace/README: Added ACE_HAS_PTHREADS_UNIX98_EXT. + + * apps/JAWS/server/HTTP_Config.(h cpp): + * apps/JAWS/server/HTTP_Response.( h cpp): const-corrected char *. + +Mon Jul 5 16:39:50 1999 Douglas C. Schmidt + + * ACE-INSTALL.html: Updated the discussion to point out + our support for KAI C++ 3.3, Borland C++ Builder 4.0, and the + IBM VisualAge C++ compiler. + + * ace/Future.h: Moved the static methods until the bottom + of the ACE_Future_Rep class to workaround a bug with Borland's + C++ Builder. Thanks to Christopher Kohlhoff + for testing this fix. + + * ace/Timer_Heap_T.cpp (grow_heap): Removed an extra memory + allocation that snuck in whilst integrating the IBM VisualAge + C++ compiler patches. Thanks to David Levine for reporting + this. + + * Added new Borland Makefiles. Thanks to Christopher Kohlhoff + for these. + + * include/makeinclude: Added several new platform configuration + files for Borland C++ Builder. Thanks to Christopher Kohlhoff + for these. + +Mon Jul 5 13:08:36 1999 Kirthika Parameswaran + + * tests/Cache_Map_Manager_Test.cpp: Added ACE_UNUSED_ARG macros + for to ward off warnings. + +Mon Jul 05 13:00:19 1999 Irfan Pyarali + + * ace/Malloc.i (free): Fixed unused arg warning for . + + * examples/Threads/future1.cpp: + * examples/Threads/future2.cpp: + + Fixed template instantiations. + +Mon Jul 5 12:25:11 1999 Carlos O'Ryan + + * ace/OS.i (strspn): + This function cannot return -1 to indicate errors, the function + returns an unsigned integral type. + +Mon Jul 05 12:14:56 1999 Nanbor Wang + + * ace/OS.i: Wchat_t version of strenvdup should only be available + on Win32. Thanks to Bala, Carlos, and David for noticing this. + (strspn): Ditto to this function. + +Mon Jul 05 09:58:07 1999 David L. Levine + + * ACE-INSTALL.html: in example config.h for VxWorks on NT, + use "" style #includes instead of <>. <> should only be + used for system headers. + +Mon Jul 05 04:11:05 1999 Nanbor Wang + + * tests/version_tests/Future_Set_Test.dsp: + * tests/version_tests/version_tests.dsw: Added Future_Set_Test + into version tests workspace. + + * ace/ACE.cpp: + * ace/ACE.h: + * ace/DLL.cpp: + * ace/DLL.h: + * ace/Env_Value_T.h: + * ace/Env_Value_T.i: + * ace/FIFO.cpp: + * ace/FIFO.h: + * ace/FIFO.i: + * ace/FIFO_Recv.cpp: + * ace/FIFO_Recv.h: + * ace/FIFO_Recv_Msg.cpp: + * ace/FIFO_Recv_Msg.h: + * ace/FIFO_Send.cpp: + * ace/FIFO_Send.h: + * ace/FIFO_Send_Msg.cpp: + * ace/FIFO_Send_Msg.h: + * ace/FILE_Connector.i: + * ace/Filecache.cpp: + * ace/Get_Opt.cpp: + * ace/INET_Addr.cpp: + * ace/Local_Name_Space_T.cpp: + * ace/Log_Record.cpp: + * ace/Message_Queue_T.cpp: + * ace/Name_Proxy.cpp: + * ace/Naming_Context.cpp: + * ace/Naming_Context.h: + * ace/OS.cpp: + * ace/OS.h: + * ace/OS.i: + * ace/Parse_Node.cpp: + * ace/Parse_Node.h: + * ace/Proactor.cpp: + * ace/Process.cpp: + * ace/RB_Tree.cpp: + * ace/Registry_Name_Space.cpp: + * ace/Remote_Name_Space.cpp: + * ace/Remote_Name_Space.h: + * ace/Remote_Tokens.cpp: + * ace/Remote_Tokens.h: + * ace/Remote_Tokens.i: + * ace/SOCK_Dgram_Mcast.cpp: + * ace/SPIPE_Connector.cpp: + * ace/SV_Message_Queue.cpp: + * ace/SV_Semaphore_Simple.cpp: + * ace/SV_Shared_Memory.cpp: + * ace/Stats.cpp: + * ace/Stats.h: + * ace/Strategies_T.cpp: + * ace/Strategies_T.i: + * ace/Svc_Conf.h: + * ace/Svc_Conf.y: + * ace/Svc_Conf_y.cpp: + * ace/Token_Collection.cpp: + * ace/Token_Collection.h: + * ace/Token_Collection.i: + * ace/Token_Invariants.cpp: + * ace/Token_Invariants.h: + * ace/UPIPE_Acceptor.cpp: + * ace/UPIPE_Connector.cpp: + * ace/UPIPE_Connector.i: + * ace/WFMO_Reactor.cpp: + * ace/WIN32_Asynch_IO.cpp: + * ace/WIN32_Proactor.cpp: + * ace/config-win32-common.h: + * tests/CDR_Test.cpp: + * tests/Cache_Map_Manager_Test.cpp: + * tests/Collection_Test.cpp: + * tests/DLL_Test.cpp: + * tests/DLL_Test.h: + * tests/DLList_Test.cpp: + * tests/Dynamic_Priority_Test.cpp: + * tests/Env_Value_Test.cpp: + * tests/Handle_Set_Test.cpp: + * tests/High_Res_Timer_Test.cpp: + * tests/IOStream_Test.cpp: + * tests/MT_Reactor_Timer_Test.cpp: + * tests/Map_Manager_Test.cpp: + * tests/Map_Test.cpp: + * tests/Message_Queue_Test.cpp: + * tests/Naming_Test.cpp: + * tests/New_Fail_Test.cpp: + * tests/Pipe_Test.cpp: + * tests/Priority_Reactor_Test.cpp: + * tests/Process_Mutex_Test.cpp: + * tests/Process_Strategy_Test.cpp: + * tests/Process_Strategy_Test.h: + * tests/Reactor_Performance_Test.cpp: + * tests/SOCK_Connector_Test.cpp: + * tests/SPIPE_Test.cpp: + * tests/SV_Shared_Memory_Test.cpp: + * tests/Service_Config_Test.cpp: + * tests/Thread_Manager_Test.cpp: + * tests/Time_Service_Test.cpp: + * tests/Tokens_Test.cpp: + * tests/UPIPE_SAP_Test.cpp: + * tests/Upgradable_RW_Test.cpp: + * tests/test_config.h: Changes to make it possible to write pure + UNICODE programs on NT. Now it is possible to compile ACE on NT + with ACE_HAS_MOSTLY_UNICODE_APIS defined. Most tests passed + without trouble. However, Future_Set_Test is not yet included + in the version_tests and Dynamic_Priority_Test also + failed. Thanks to Valery Arkhangorodsky + for providing a preliminary patch for + ACE to motivate the change. + +Sun Jul 04 18:57:13 1999 David L. Levine + + * ACE-INSTALL.html: when building tao_idl on NT to be + used for generating code for VxWorks, build without + ACE_HAS_EXCEPTIONS. Otherwise, TAO_IDLFLAGS must + be overridden to be null instead of -Ge 1. Thanks to + Carlos for this suggestion. + +Sun Jul 4 17:06:17 1999 Douglas C. Schmidt + + * tests/Notify_Performance_Test.cpp, + tests/Message_Block_Test.cpp, + tests/Priority_Task_Test.cpp, + tests/Thread_Pool_Reactor_Test.cpp: Fixed a couple of + warnings related to initializing char *'s with const char *'s. + Thanks to SunC++ 5.0 for reporting this. + +Sun Jul 04 16:07:33 1999 David L. Levine + + * ACE-INSTALL.html: updated instructions for building on + NT host for VxWorks. + +Sun Jul 04 15:41:34 1999 David L. Levine + + * many Makefiles: call ace_components via sh, instead of + directly in the make $(shell) command. This allows it + to work on platforms that don't have /bin/sh, such as NT. + +Sun Jul 4 12:34:24 1999 Douglas C. Schmidt + + * ace/Timer_Hash_T.cpp (cancel): Reversed a comparison from + <= to > to make the ACE_ASSERT replacement work properly. + Thanks to David Levine for reporting this. + + * tests/Thread_Pool_Test.cpp (open): We need to define 'int i' + outside of the for loop to keep EGCS from complaining for some + reason. + + * ace/Timer_Heap_T.cpp: Reformatted this code to conform to + the ACE programming guidelines. + + * ace/Timer_Heap_T.cpp (schedule): Replaced an ad hoc check for + allocator failure with the ACE_ALLOCATOR_RETURN macro. + + * ace/RB_Tree.cpp: Modified Carlo's change so that we add an + extra set of parens in a special way, rather than using a new + macro. This is more consistent with how we deal with this + problem in other parts of ACE. + + * ace/RB_Tree.cpp (insert_i): Removed an unreachable statement. + Thanks to David Levine for reporting this. + +Sat Jul 3 22:12:07 1999 Carlos O'Ryan + + * ace/Object_Manager.cpp (get_singleton_lock): + Fixed one of the ACE_Thread_Mutex version of this method. One of + the braces after an if() statement got "accidentaly" removed; + binding the "else" part of the statement to the previous if() + instead. + +Sat Jul 3 18:54:18 1999 Carlos O'Ryan + + * ace/RB_Tree.cpp: + If the "constructor" parameter in an ACE_NEW_RETURN macro has a + comma in it (such as Foo(x,y,z)) we need to replace it with a + macro, so it is seen as a single token by the pre-processor. + Otherwise it (the pre-processor) gets confused and uses + the comma as separator. Thanks to David for detecting this one. + +Sat Jul 3 15:57:40 1999 Carlos O'Ryan + + * ace/SOCK_Dgram_Mcast.cpp: + Fixed error code return, it should be -1 not ACE_INVALID_HANDLE + + * ace/SOCK_Connector.cpp: + Fixed stray comment characters. + +Sat Jul 03 14:04:10 1999 David L. Levine + + * ace/Makefile: call ace_components via sh, and use single + instead of double quotes, so that it works with Cygwin + on NT host. + +Sat Jul 3 12:05:46 1999 Douglas C. Schmidt + + * ace/SOCK_Dgram_Mcast: Modified the subscribe() method to return + 0 or -1 rather than ACE_HANDLE. Thanks to Vidya Narayanan + for suggesting this. + + * ace/SOCK_Acceptor, + ace/SOCK_Connector, + ace/SOCK: Added the ACE_Protocol_Info *, ACE_SOCK_GROUP, and + flags parameters to these classes so we can pass down the GQoS + information. Thanks to Vidya Narayanan + for suggesting this. + + * ace/SOCK.h: Added the reuse_addr parameter to open() and the + ACE_SOCK constructor. + + * tests/Future_Set_Test.cpp (main): We were casting a + const ASYS_TCHAR * to u_int, yikes! + + * ace/RB_Tree.cpp: Cleaned up the code so it's conformant with the + ACE programming style, particularly for dynamic memory + allocation (which wasn't using ACE_NEW). + + * ace/ACE.cpp (get_ip_interfaces): Cleaned up the code so it conforms + to the ACE programming guidelines. + + * ace/Timer_Hash_T.cpp: Fixed a number mistakes where the return + value of new wasn't being checked. + + * ace/Timer_Heap_T.cpp, + ace/Timer_Wheel_T.cpp: Removed the apparently extraneous parens + used in the ACE_NEW* macros in order to keep EGCS 2.95 happy. + Thanks to Jody Hagins and Arturo Montes + for reporting this. BTW, if this + causes problems on any compilers please let me know. + + * ace: Reformatted all the ACE_NEW* macros so they conform to + ACE programming style. + + * ace/Priority_Reactor.cpp: Cleaned up the code to conform to + the ACE programming style. + + * ace/OS.cpp (tss_base): Cleaned up a loop a bit so it conforms + to the ACE programming style. + +Sat Jul 3 11:09:51 1999 Alexander Babu Arulanthu + + * ace/WIN32_Asynch_IO.cpp + * ace/WIN32_Proactor.cpp + Addressed Doug's @@ Alex comments. It was simply making some + debug statements conditional upon ACE::debug () flag. + +Fri Jul 2 19:50:29 1999 Douglas C. Schmidt + + * ace/OS.h: There was a typo in the ACE_WIN32CALL_RETURN() macro + for Borland C++. Thanks to Jody Hagins for + reporting this. + + * ace/config-win32-borland.h: Clarified the fact that this file + shouldn't be #included directly. Thanks to Thaddeus Olczyk + for motivating this. + +Fri Jul 02 22:22:12 1999 Steve Huston + + * ace/config-hpux-11.x-hpc++.h: Added + ACE_HAS_STD_TEMPLATE_METHOD_SPECIALIZATION for aC++. + + * include/makeinclude/platform_hpux_aCC.GNU: Removed the suppression + of warning 829 (auto convert of string literal to char * deprecated). + With the exception of some JAWS code, all of ACE has been rid of the + offenders. + + * websvcs/tests/Makefile: Replace VLDLIBS with correct LDLIBS. Now + works on AIX. + +Fri Jul 2 19:37:16 1999 Carlos O'Ryan + + * tests/Future_Test.cpp: + The timeout variable was declared in one scope but used in + another one. Added another timeout variable to keep it happy. + + * tests/Message_Queue_Test.cpp: + A pointer was initialize using "0x" i think it was a typo and + should be "0". + +Fri Jul 02 18:28:31 1999 Steve Huston + + * ace/config-hpux11.h: Added ACE_HAS_BROKEN_T_ERROR. + Enable threads by default, unless site config explicitly turns it + off by setting ACE_HAS_THREADS to 0. Thanks to Brian Wallis + for motivating this change. + + * ace/config-hpux-11.x-hpc++.h: Added + ACE_HAS_STD_TEMPLATE_SPECIALIZATION. + + * include/makeinclude/platform_hpux_aCC.GNU: If on 11.00 and the + user requests a build w/o threads, set ACE_HAS_THREADS to 0 to + override the config default (see config-hpux11.h, above). + +Fri Jul 2 11:49:12 1999 Kirthika Parameswaran + + * tests/Cached_Conn_Test.cpp: This is a test which shows how the + Strategy Connector can automagically as well as explicitly cache + and purge connection from its connection cache using different + caching strategies. + + * ace/Cached_Connect_Strategy_T.{h, cpp}: Added a method + "purge_connections ()" which allows explicit purging of + connnections from the connection cache. + +Fri Jul 2 13:54:14 1999 Douglas C. Schmidt + + * ace/Future_Set.cpp, + ace/Future.cpp: Added ACE_TYPENAME at a couple of places + to make HP/UX aCC happy. Thanks to Eric Mitchell + for reporting this. + + * ace/SOCK_Dgram: Added send() and recv() methods that take + ACE_OVERLAPPED structures. Thanks to Vidya Narayanan + for suggesting this. + + * ace/OS.h: Added an ACE_OVERLAPPED_FLAG that's used to abstract + away from the WSA_FLAG_OVERLAPPED macro on Win32. Thanks to + Vidya Narayanan for suggesting + this. + + * ace/OS.cpp: Removed unnecessary ';' after ACE_BEGINTHREADEX() and + ACE_ENDTHREADEX(). Thanks to Kris Johnson + for reporting this. + + * ace/Service_Config.cpp (open_i): It appears that + + if (ACE::debug ()) + ACE_Log_Msg::disable_debug_messages (); + + should really be + + if (ACE::debug () == 0) + ACE_Log_Msg::disable_debug_messages (); + + Thanks to Jonathan Reis for + reporting this. + + * tests/Future_Test.cpp (main): Make sure to use absolute time + rather than relative time for the timeouts. Thanks to Peter + Brandstrom for reporting this. + +Fri Jul 02 13:44:17 1999 Irfan Pyarali + + * tests/Thread_Pool_Reactor_Test.cpp (worker): Added const fix to + and . + + * tests/Priority_Task_Test.cpp: Added const fix to . + + * tests/Notify_Performance_Test.cpp (print_results): Added const + fix to . + + * tests/Message_Block_Test.cpp: Added const fix to . + +Fri Jul 2 11:49:12 1999 Irfan Pyarali + + * Initialized some variables to zero to avoid some silly warnings + from egcs (with exceptions): + + - ace/Free_List.cpp + - ace/Malloc.i + - tests/DLL_Test.cpp + - tests/Mem_Map_Test.cpp + - tests/Message_Queue_Test.cpp + - tests/Reactor_Notify_Test.cpp + +Fri Jul 2 11:49:12 1999 Kirthika Parameswaran + + * ace/Strategies_T.h (ACE_Cached_Connect_Strategy): Made "virtual" + methods which were getting overriden in the derived + Cached_Connect_Strategy_Ex class. + + * ace/Cached_Connect_Strategy_T.{h, cpp}: Added a method + "purge_connections ()" which allows explicit purging of + connnections from the connection cache. + + * tests/Cached_Conn_Test.cpp: This is a test which shows how the + Strategy Connector can automagically as well as explicitly cache + and purge connection from its connection cache using different + caching strategies. + +Fri Jul 2 11:49:12 1999 Kirthika Parameswaran + + * tests/Cached_Conn_Test.cpp: This is a test which shows how the + Strategy Connector can automagically as well as explicitly cache + and purge connection from its connection cache using different + caching strategies. + + * ace/Cached_Connect_Strategy_T.{h, cpp}: Added a method + "purge_connections ()" which allows explicit purging of + connnections from the connection cache. + +Fri Jul 02 11:50:21 1999 Steve Huston + + * ace/ace_lib.dsp: Added Pharlap ETS configurations for Debug and + Release. + + * ace/config-pharlap.h: Added ACE_LACKS_* definitions to avoid some + unimplemented memory mapped things. Added a definition for + ACE_PAGE_SIZE because it's not obvious how to get it at run time. + Include because some of the OS functions call ETS + kernel functions for low-level system info gathering. + Set ACE_HAS_TSS_EMULATION. The PharLap TSS leaves some to be + desired, according to TSS_Test. + + * ace/config-win32-common.h: In building for PharLap, don't bring in + the OS-supplied wsock32.lib - need to use the PharLap one. + + * ace/ACE.cpp: PharLap ETS changes: + ACE::ldfind: PharLap doesn't have expand environment strings. + ACE::get_ip_interfaces: Use PharLap kernel functions to find + interfaces and learn their addresses. + ACE::terminate_process: Unsupported on PharLap. + ACE::handle_timed_open: If the open times out, set errno to + ETIMEDOUT, not ETIME. + ACE::handle_timed_accept: If the select times out, set errno to + ETIMEDOUT, not ETIME. + ACE::sock_error: If not a known error, format a message with the + error number in it - this is the only chance for a PharLap + system error to indicate the error number. + + * ace/OS.h: Changed def of ACE_DEFAULT_SERVER_HOST to ACE_LOCALHOST. + + * ace/OS.cpp (ACE_OS::uname): PharLap: Use ETS kernel functions to get + target processor class. PharLap doesn't do GetSystemInfo. + + * ace/OS.i (ACE_OS::hostname): PharLap: Attempt gethostname if using + RT version, though this isn't too reliable (requires ethernet and + BOOTP). + (ACE_OS::dlerror): PharLap doesn't support FormatMessage, + so format the error number. + (ACE_OS::mmap, ACE_OS::mprotect, ACE_OS::msync): PharLap doesn't + do memory-mapped files. + (ACE_OS::getpagesize): PharLap - use page size set from config.h. + Don't know a way to get this info at run time. + (ACE_OS::hostname (whar_t *, size_t)): PharLap - no wide chars. + + * ace/Log_Msg.cpp (log): PharLap doesn't do FormatMessage, so print + = %d for %p. + + * ace/Pipe.cpp (open): The protocol level for TCP_NODELAY on PharLap + is SOL_SOCKET, as opposed to Win32, where it's IPPROTO_TCP. + + * ace/SPIPE_Connector.cpp (connect): PharLap doesn't have the + SetNamedPipeHandleState function. + + * ace/WFMO_Reactor.cpp: PharLap ETS changes, because PharLap doesn't + implement async I/O, or WaitForMultipleObjectsEx. + register_handler_i: (This is a general Winsock 1.1 change) Creating + an event handle for a socket is not supported. + ok_to_wait, wait_for_multiple_events: Use WaitForMultipleObjects, + not WaitForMultipleObjectsEx. Should be fine since the big + difference is alertable, and that's not supported on ETS anyway. + + * tests/test_config.h: On PharLap, direct all logging to host console. + + * tests/tests_pharlap_msvc.lnk: Cleaned things up; extended stack size + from 8K to 32K. Change the starting load offset to + 0x100000 - the tests don't all fit in the default range. + Disabled the target screen driver to make all the test output from + all threads go to the host, thereby getting saved in the log files. + + * tests/run_pharlap_tests.bat: Fixed names of the executables. + + * tests/Atomic_Op_Test.dsp: + * tests/Barrier_Test.dsp: + * tests/Basic_Types_Test.dsp: + * tests/Buffer_Stream_Test.dsp: + * tests/CDR_Test_Test.dsp: + * tests/Collection_Test.dsp: + * tests/Conn_Test.dsp: + * tests/DLList_Test.dsp: + * tests/Dynamic_Priority_Test.dsp: + * tests/Enum_Interfaces_Test.dsp: + * tests/Env_Value_Test.dsp: + * tests/Future_Test.dsp: + * tests/Handle_Set_Test.dsp: + * tests/Hash_Map_Manager_Test.dsp: + * tests/High_Res_Timer_Test.dsp: + * tests/IOStream_Test.dsp: + * tests/Map_Manager_Test.dsp: + * tests/Map_Test.dsp: + * tests/Mem_Map_Test.dsp: + * tests/Message_Block_Test.dsp: + * tests/Message_Queue_Notifications_Test.dsp: + * tests/Message_Queue_Test.dsp: + * tests/MM_Shared_Memory_Test.dsp: + * tests/MT_Reactor_Timer_Test.dsp: + * tests/MT_SOCK_Test.dsp: + * tests/Naming_Test.dsp: + * tests/New_Fail_Test.dsp: + * tests/Notify_Performance_Test.dsp: + * tests/OrdMultiSet_Test.dsp: + * tests/Pipe_Test.dsp: + * tests/Priority_Buffer_Test.dsp: + * tests/Priority_Reactor_Test.dsp: + * tests/Priority_Task_Test.dsp: + * tests/Process_Mutex_Test.dsp: + * tests/Process_Strategy_Test.dsp: + * tests/RB_Tree_Test.dsp: + * tests/Reactor_Exceptions_Test.dsp: + * tests/Reactor_Notify_Test.dsp: + * tests/Reactor_Performance_Test.dsp: + * tests/Reactor_Timer_Test.dsp: + * tests/Reactors_Test.dsp: + * tests/Reader_Writer_Test.dsp: + * tests/Recursive_Mutex_Test.dsp: + * tests/Reverse_Lock_Test.dsp: + * tests/Semaphore_Test.dsp: + * tests/Service_Config_Test.dsp: + * tests/Sigset_Ops_Test.dsp: + * tests/Simple_Message_Block_Test.dsp: + * tests/SOCK_Connector_Test.dsp: + * tests/SOCK_Send_Recv_Test.dsp: + * tests/SOCK_Test.dsp: + * tests/SPIPE_Test.dsp: + * tests/SString_Test.dsp: + * tests/SV_Shared_Memory_Test.dsp: + * tests/Svc_Handler_Test.dsp: + * tests/Task_Test.dsp: + * tests/Thread_Manager_Test.dsp: + * tests/Thread_Mutex_Test.dsp: + * tests/Thread_Pool_Reactor_Test.dsp: + * tests/Thread_Pool_Test.dsp: + * tests/Time_Service_Test.dsp: + * tests/Time_Value_Test.dsp: + * tests/Timeprobe_Test.dsp: + * tests/Timer_Queue_Test.dsp: + * tests/Tokens_Test.dsp: + * tests/TSS_Test.dsp: + * tests/Upgradeable_RW_Test.dsp: + * tests/UPIPE_SAP_Test.dsp: + Fixed settings for PharLap ETS configurations. + + * tests/Conn_Test.cpp (server): If the acceptor fails, do not try to + close the svc_handler - the failed ACE_Oneshot_Acceptor already + closed it. + + * tests/SOCK_Send_Recv_Test.cpp: Use ACE_LOCALHOST, not "localhost". + +Thu Jul 1 21:49:39 1999 Matthew J Braun + + * ace/Containers_T.i,h,cpp + Added reset () methods to the derived classes of + ACE_Double_Linked_List_Iterator because the behavior of the base + class's version was not sufficient (and would cause way fun + segfaults when used). + + * tests/Map_Manager_Test.cpp + * tests/DLList_Test.cpp + ACE_const_cast'ed some string literals to char *'s to appease + the evil monstrosity that is SC 5.0. + +Wed Jun 30 18:11:41 1999 Ossama Othman + + * ace/OS.i (strncasecmp): + + Corrected ACE_TRACE statement to contain "strncasecmp" instead + of "strcasecmp." + +Thu Jul 01 21:07:22 1999 Douglas C. Schmidt + + * ACE version 4.6.43 released. + +Thu Jul 01 10:53:33 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: + set INCLDIRS, so that wrapper_macros.GNU doesn't insert -I. + Otherwise, with GHS on NT host, ACE's Signal.h gets #included + instead of VxWorks' signal.h by target/h/private/sigLibP.h. + Thanks to Dale Wood and + Dave Steele for helping to figure + this out. + + * include/makeinclude/platform_vxworks5.x_g++.GNU, + bin/ace_ld: changed -c option to -C [...] --, so + that its arguments don't need to be quoted. I + couldn't figure out a way to quote on NT host. Thanks + to Dale Wood for enlightening me + on some of the intricacies of NT. + +Thu Jul 01 10:47:41 1999 David L. Levine + + * bin/libsize.pl: always use `pwd`, because the PWD environment + variable doesn't appear to get updated by recursive makes. + +Thu Jul 01 08:46:10 1999 David L. Levine + + * bin/check_build_logs: filter out lines from IDL_Cubit + that contain "0 errors". + +Thu Jul 01 00:24:52 1999 Nanbor Wang + + * docs/ACE-guidelines.html: Added a table explaining how to use + all the different ACE_*_STRING macros. + + * tests/DLList_Test.cpp: + * tests/Hash_Map_Manager_Test.cpp: + * tests/Map_Manager_Test.cpp: + * tests/Message_Block_Test.cpp: + * tests/Notify_Performance_Test.cpp: + * tests/Priority_Task_Test.cpp: + * tests/Thread_Pool_Reactor_Test.cpp: + * tests/test_config.h: UNICODE fixes. The usage of ASYS_TCHAR and + LPCTSTR were mistaken in many places. + +Wed Jun 30 16:13:58 1999 Irfan Pyarali + + * tests/Future_Set_Test.cpp: Added missing template instantiation + for ACE_Hash_Map_Reverse_Iterator_Ex. Also, added some fixes + from John Tucker . + +Wed Jun 30 12:09:22 1999 Nanbor Wang + + * ace/ace_bcc.ide: + * tests/tests_bcc.ide: + * *.{bpr,bpg}: Removed unused BCB project files. + +Tue Jun 29 23:12:58 1999 Carlos O'Ryan + + * ace/OS.i: + Use ACE_CAST_CONST to keep the silly Sun/CC 4.2 from + complaining. + +Tue Jun 29 22:48:43 1999 Irfan Pyarali + + * ace/OS.i (strncasecmp): Changed to . + +Tue Jun 29 22:33:55 1999 Carlos O'Ryan + + * ace/OS.i: + Fixed warnings in green hills and possibly othre EDG-based + compilers. + + * tests/run_tests.sh: + * tests/run_tests.vxworks: + Take Future_Set_Test out, it does not work in too many + platforms. + +Tue Jun 29 21:24:13 1999 Douglas C. Schmidt + + * ace/SOCK.cpp (open): Removed an unused variable. Thanks + to Carlos for reporting this. + +Tue Jun 29 20:53:41 1999 Carlos O'Ryan + + * ace/config-irix5.3-g++.h: + IRIX 5.3 (!) has a DIRENT structure, thanks to Isaac Stoddard + for providing this fix. + +Tue Jun 28 20:19:11 1999 Darrell Brunsch + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Manually cleaned up these projects and fixed them so they should + work on NT Alpha again. + +Tue Jun 29 18:48:22 1999 Irfan Pyarali + + * ace/Functor_T.h (class ACE_Pointer_Hash): Added new class for + hashing pointers on their values. + + * ace/Future_Set: Restored future map to be a + ACE_Hash_Map_Manager_Ex. + +Tue Jun 29 14:45:38 1999 Irfan Pyarali + + * tests/run_tests.bat: Removed New_Fail_Test from the + run_tests.bat (the script for NT). This tests takes too long to + run and swaps out the entire machine making is impossible to do + useful things while the test is running. Note that the test is + still there and can be run by hand (i.e., on its own, without + the run_tests.bat script). + + * ace/Future: Changed the observer collection to be an unbounded + set and changed the future map to map manager. These are + temporary changes to get things compiling again. Once we figure + out the correct hashing functions, we can restore the original + code. + +Tue Jun 29 13:38:52 1999 Ossama Othman + + * AUTHORS: + + Added an AUTHORS file to bring ACE closer to recent software + distribution conventions. + + * Makefile: + + Added Carlos' websvcs directory to the release, in addition to + the missing top-level ACE Configuration project files and + directories. + + * config.guess: + * config.sub: + * ltconfig: + * ltmain.sh: + * missing: + * mkinstalldirs: + + Updated from latest GNU libtool and GNU automake. + +Tue Jun 29 12:07:08 1999 Ossama Othman + + * README: + * THANKS: + + Moved list of contributors to the file `THANKS' to bring the + distribution closer to conventional distribution standards. + + * Makefile: + + Added the THANKS file to the list of controlled files so that it + gets distributed with ACE. + +Tue Jun 29 11:27:23 1999 Matthew J Braun + + * ace/Containers_T.i: Modified next method in ACE_DLList_Iterator + to avoid segfaults (a bad thing). + +Tue Jun 29 10:54:15 1999 Carlos O'Ryan + + * ace/OS.i: + Sun/CC was not pleased with a cast from "void* const" to "const + char*", and rightly so. + +Tue Jun 29 09:21:06 1999 Carlos O'Ryan + + * ace/OS.h: + * ace/OS.i: + * ace/SOCK_Dgram.h: + * ace/SOCK_Dgram.i: + Fixed the unix version ACE_OS::sendto() call. + Also fixed the Win32 version and the Win32 version of + ACE_OS::recvfrom, had to change the signatures to make them safe + and fit the WinSock2 interfaces. + +Tue Jun 29 07:07:30 1999 David L. Levine + + * bin/check_build_logs: allow _ with -l and -m options, and + @ and . with -m option. + +Mon Jun 28 21:31:58 1999 Douglas C. Schmidt + + * ace/OS: Added a constructor to ACE_Flow_Spec to initialize + its various fields wholesale. Thanks to Kumar Surender + for this suggestion. + + * ace/SOCK: Added a new constructor and a new open() method + that pass through the QoS information required by WSASocket(). + + * ace/{OS,SOCK_Connector,SOCK_Dgram,SOCK_Dgram_Mcast}: Renamed + ACE_Connect_QoS_Params to ACE_QoS_Params since (1) it's used in + ACE_OS::connect() *and* ACE_OS::join_leaf() and (2) it's used + for Dgrams, which aren't connection oriented. Thanks to Kumar + Surender for this suggestion. + + * ace/OS: Added set/get methods for time-to-live on the + ACE_Flow_Spec classes. This is necessary since RAPI defines + this. + + * ace/OS: Added a new ACE_OS::recvfrom() method that's a wrapper + for the WSARecvFrom() on Win32 and (will be) an "emulation" on + non-Win32 platforms. + + * ace/OS: Added a new ACE_OS::sendto() method that's a wrapper + for the WSASendTo() on Win32 and an "emulation" on non-Win32 + platforms. + + * ace/OS.h: Updated the QoS documentation to clarify that these + features are appropriate for IntServ (RSVP) *and* DiffServ. + Thanks to Kumar Surender , Vidya + Narayanan and Pradeep Avasthi + suggesting this. + + * ace/SOCK_Dgram.h: Added send() and recv() methods for + ACE_SOCK_Dgram that take overlapped I/O parameters. This is + needed for the GQoS WinSock API. + +Mon Jun 28 21:53:06 1999 David L. Levine + + * bin/libsize.pl: added support for liborbsvcs, and + for shared libs (with -s option). + + * bin/check_build_logs: fixed command-line argument processing. + +Mon Jun 28 17:30:08 1999 Nanbor Wang + + * ace/OS.i (recvv): We must not passed a null pointer to + but a pointer pointing to a real flag. This fixed the + SOCK_Send_Recv_Test failing on NT problem. Thanks to Jody + Hagins for reporting this. + +Mon Jun 28 15:10:50 1999 Irfan Pyarali + + * ace/Strategies_T: Removed ACE_Hash_Addr which was no longer used + in ACE and is not necessary given the new + ACE_Hash_Map_Manager_Ex class. + +Mon Jun 28 15:00:01 1999 Carlos O'Ryan + + * ace/CDR_Stream.h: + * ace/CDR_Stream.cpp: + Added new method to reset the state of a CDR stream without need + for any memory allocations. + +Mon Jun 28 12:48:35 1999 David L. Levine + + * bin/check_build_logs: added this script, which checks build + logs named *.log, of current day. + +Mon Jun 28 09:32:59 1999 Douglas C. Schmidt + + * ace/{Future_Set,Future}: Integrated new enhancements to use + the ACE_Hash_Map_Manager rather than the ACE_DLL_Linked_List to + speed up notifications for the Future Set. Thanks to John + Tucker for this enhancement. + + * tests: Integrated the Future_Set_Test into this directory and the + various batch files. Thanks to John Tucker + for this test. + + * ace/Map_Manager.i: Added an ACE_const_cast to the lock_ used + in the newly const total_size() and current_size() methods. + + * ace/Map_T, + * ace/Map_Manager, + * ace/Cache_Map_Manager_T, + * ace/Active_Map_Manager_T, + * ace/Hash_Map_Manager_T: The current_size() and total_size() methods + must be const. + + * ace/OS.i: Fixed a type inconsistency where wchar_t should have been + char and added a missing ';'. + + * ace/OS.i: Fixed a typo where last_error should have been + lerror. Thanks to Chris Gill for reporting this. + + * ace/OS.cpp (ACE_BEGINTHREADEX): Oops, mistyped "_beginthreadex()" + as "_beingthreadex()". I must be going through an existential + phase ;-). Thanks to Chris Gill for reporting this. + + * ace/OS.i: Fixed a typo where last_error should have been + lerror. Thanks to Chris Gill for reporting this. + + * ace/OS.cpp (ACE_BEGINTHREADEX): Oops, mistyped "_beginthreadex()" + as "_beingthreadex()". I must be going through an existential + phase ;-). Thanks to Chris Gill for reporting this. + +Sun Jun 27 18:03:24 1999 Douglas C. Schmidt + + * ACE-INSTALL.html: Updated the discussion for Borland C++ + Building 4.0 and IBM's VisualAge C++ compiler to reference the + appropriate maintainers. + + * ace/WIN32_Proactor.cpp, ace/WIN32_Asynch_IO.cpp: Added back some + initializers to keep EGCS happy. + + * ace/config-g++-common.h: Added ACE_LACKS_AUTO_PTR to work around + an omission within the EGCS standard library. + + * ace/Auto_Ptr.h: If ACE_LACKS_AUTO_PTR is enabled then use our + version of auto_ptr. This is necessary to work around problems + with EGCS. + + * ace/config-g++-common.h: Define ACE_HAS_STANDARD_CPP_LIBRARY so + that #include will work properly. However, this + required that we also set ACE_USES_OLD_IOSTREAMS, as well. + Thanks to Carlos for help with this. + + * ace/config-g++-common.h: The EGCS 1.1.1 compiler supports the + template<> syntax. If this breaks older EGCS or GCC compilers + we'll have to handle each of those cases. + + * ace/config-win32-borland.h: + Added ACE_HAS_STD_TEMPLATE_METHOD_SPECIALIZATION. + + * ace/OS.h: Replaced the const's for ACE_DEFAULT_SHLIB_MODE and + ACE_SHLIB_INVALID_HANDLE with #defines since it's more portable. + + * ace/OS.i: All the strcasecmp() and strncasecmp() methods were + broken. Thanks to David Levine for reporting this. + + * ace/WFMO_Reactor.cpp: Updated the programming style a bit to + conform to the ACE guidelines. + +Sun Jun 27 20:50:02 1999 Douglas C. Schmidt + + Added support for IBM's VisualAge C++ compiler. + + * ace: Added a new config-visualage.h file that automatically + includes the proper configurations for IBM's VisualAge C++ + compiler on Win32 and AIX. + + * ace/OS.i: The IBM VisualAge C++ compiler's prototypes for _chdir(), + _mkdir(), and _tempnam() are broken, so we must add a cast to + char *. + + * ace/OS.cpp: Added new macros ACE_ENDTHREADEX and + ACE_BEGINTHREADEX to work around a bugs with _endthreadex() and + _beginthreadex() on IBM's VisualAge C++ compiler. + + * ace/OS.cpp (ACE_Time_Value::set): Replaced this expression: + + this->tv_.tv_usec = long ((_100ns.QuadPart % (10000 * 1000)) / 10); + + with this expression: + + this->tv_.tv_usec = long ((long (_100ns.QuadPart) % long (10000 * 1000)) / 10); + + to work around a bug with IBM's VisualAge C++ compiler. + + * ace/OS.cpp: Replaced a hard-coded MSVC++'ism for signed long long + with a use of the ACE_UINT64_LITERAL macro, which works for all + Win32 C++ compilers. + + * ace/config-win32-visualage.h, + ace/config-aix-4.x.h: Added a workaround for an IBM VisualAge + C++ bug with the WIFEXITED and WEXITSTATUS macro. + + * ace/OS.h: Added workarounds for bugs with IBM's VisualAge C++ compiler + as it pertains to the ACE_DES_FREE_TEMPLATE and + ACE_DES_FREE_TEMPLATE2 macros. + + * ace/Map_T.h: Added a workaround for a bug with IBM's VisualAge C++ + compiler. I think this workaround should help with other C++ + compilers, as well. Also reformated the code to make it + consistent with the ACE programming guidelines. + + * ace/Hash_Purgable_Map_Manager_T.cpp: Added a workaround for a + VisualAge C++ bug. + + * ace/config-aix-4.x.h: Added VisualAge C++ compiler support. + + * ace/Timer_Heap_T.cpp: We must hard code numbers like + 1024 for an array size to workaround bugs with the IBM VisualAge + C++ compiler. + + * ace/Basic_Types.h: Added #defines for ACE_INT64_LITERAL. + + * ace/config-win32-common.h: #include the + config-win32-visualage.h file. + + * ace: Added the following files for the IBM VisualAge C++ compiler: + + ace-lib.icc - WinNT configuration file to create a static library + ace-dll.icc - WinNT configuration file to create a dynamic library + config-win32-visualage.h - VisualAge C++ defines + + * tests: Added the icc.bat and makeicc.pl files, which build the + tests for the IBM VisualAge C++ compiler. + + * tests: Added the *.icc project files for the IBM VisualAge C++ compiler. + +Sun Jun 27 18:17:43 1999 Carlos O'Ryan + + * ace/CORBA_macros.h: + On platforms with native C++ exceptions we use ACE_UNUSED_ARG() + in the throw macros to avoid warnings about the unused + ACE_TRY_ENV variable. + +Sun Jun 27 14:56:16 1999 Nanbor Wang + + * tests/run_tests.bat: Added the patch for running tests compiled + with Borland C++. Thanks to Jody Hagins for + the patch. + + * tests/Cache_Map_Manager_Test.dsp: The project file was + mis-configured. + + * tests/version_tests/version_tests.dsw: + * tests/version_tests/Cache_Map_Manager_Test.dsp: Added this new + project file. + +Sun Jun 27 12:36:00 1999 Chris Gill + + * ace/RB_Tree.{h, i}: Moved non-deprecated iterator base class + method next (RB_Tree_Node<...>) down into derived forward and + reverse iterator classes due to method resolution conflict + with deprecated next (void) method in forward iterator class. + When the deprecated next method is removed, these will be + moved out of the derived classes and into the base class. + Thanks to Matt Braun and Carlos O'Ryan for pointing out + this problem. + +Sat Jun 26 16:22:07 1999 Marina Spivak + + * ace/ace_lib.dsp + * ace/ace_dll.dsp: + Updated to include Hash_Map_With_Allocator_T.* files. + +Sat Jun 26 16:05:29 1999 Ossama Othman + + * acconfig.h: + * configure.in: + + Added support/test for ACE_HAS_MEMCHR macro. + + * ace/Makefile.am: + * tests/Makefile.am: + + Synchronized with latest version of ACE. + + * m4/features.m4: + + Updated asynchronous IO tests. + +Sat Jun 26 14:41:31 1999 Marina Spivak + + * ace/Event_Handler_T.h + Removed "ACE_Export" - it is not necessary for a template class. + + * ace/Hash_Map_With_Allocator.{h,i,cpp}: + Added these files to ACE. These files contain a thin wrapper + around ACE_Hash_Map_Manager, which is useful when + ACE_Hash_Map_Manager is used with a shared memory (or memory + mapped file) allocator (e.g., ACE Naming Service, and TAO Naming + Service are example use cases). Please see header file for more + details. + +Sat Jun 26 12:45:26 1999 Douglas C. Schmidt + + * tests/Cache_Map_Manager_Test.cpp: Fixed this test so that it + compiles with SunC++ 4.2 and its broken C++ templates... Thanks + to David Levine for reporting this. + + * ace/Malloc_T.i: Make sure to put ACE_INLINE on all the methods + in the .i files. Thank to Marina for reporting this. + + * ace/Hash_Map_Manager_T.h: Fixed the programming style a bit. + + * ace/Arg_Shifter.cpp (ACE_Arg_Shifter): Reformatted this + stuff a bit. + +Sat Jun 26 12:45:26 1999 Jody Hagins + + This is a change log for the modifications made to support + Borland C++Builder 4.0, Patch 1. Thanks to + Christopher Kohlhoff and Chris Uzdavinis + for helping with this. + + First, I did not get integrate the makefiles to the BCB environment + as it requires alot of tools and more time. I hope to fet to this + in the somewhat near future. However, each directory that has stuff + that I built and tested has a Makefile.bor, which will make whatever + is there with BCB4. Note that the makefiles do not, at present, + have a clean or anything except the default make. + + To build, make sure config.h points to, or simply includes + ace/config-win32.h. + + Finally, not all the programs and exampales have BCB makefiles. + However, it should not be too difficult to adapt the ones that are + there. In addition, the .bpr files should NOT be used to build + the libraries, or any examples. If you want to build examples, + you will need to start with a fresh project in BCB. + + At present (4.6.42) all tests, except SOCK_Send_Recv_Test run + successfully, and some of my own tests run. Also, the TAO services + and programs seem to be operating as well. + + * ace/Asynch_Acceptor.cpp: Need CancelIO for BCB as well + + * ace/Atomic_Op.i: Need ACE_TEMPLATE_SPECIALIZE on specializations. + + * ace/CDR_Stream.h: Need LongLong for BCB as well + + * ace/Functor.i: Need ACE_TEMPLATE_SPECIALIZE on specializations. + + * ace/Future.h: Work around a BCB4 bug which causes the create() + method from being seen. + + * ace/IOStream.h: Only want CString stuff for MSC. + + * ace/IOStream_T.cpp: Only want CString stuff for MSC. + + * ace/OS.cpp: _fdopen, in BCB, takes a non-const pointer + + * ace/OS.h: Differentiate between mode masks and user mode masks. + + BCB doesn't like initialized data in precompiled header files so + define certain constants instead. A bug in BCB prevents calling + a destructor explicitly on a typedef declared inside a class. + So, TEMPLATE3 and TEMPLATE4 versions of ACE_DES_FREE are + necessary for destruction of templates with more parameters. + + BCB4 has a bug in the RTL that resets the GetLastError() value + to zero when errno is accessed. Thus, setting errno to + ::GetLastError requires a copy. To keep from having the code + everywhere, I added ACE_OS::set_errno_to_last_error () and + ACE_OS::set_errno_to_wsa_last_error (), and used it everywhere + errno was being set to GetLastError() or WSAGetLastError(). + + BCB4 has a bug in the optimizer that screws up the return from + certain expressions when a variable is set on both sides of an + assignment. Thus, the definition of ACE_WIN32CALL_RETURN needed + to change. + + * ace/OS.i: Use ACE_set_errno_to_last_error where appropriate. + BCB4 bug requires splitting FILETIME dummy_1, dummy_2; into + separate declarations. + + * ace/Select_Reactor.h: Need ACE_TEMPLATE_SPECIALIZE on + specializations. + + * ace/WFMO_Reactor.cpp: Use ACE_set_errno_to_last_error where + appropriate. Likewise, fix the use of auto_ptr copy ctor, which + can not take a const ref. + + * ace/WIN32_Asynch_IO.cpp: Use ACE_set_errno_to_last_error + where appropriate. Need CancelIo for BCB as well. + + * ace/WIN32_Proactor.cpp: Use ACE_set_errno_to_last_error + where appropriate. + + * ace/config-win32-borland.h: Specific build stuff for BCB + + * ace/config-win32-common.h: Differences between BCB and MSC + + * apps/JAWS/PROTOTYPE/JAWS/Cache_Hash_T.cpp: BCB4 bug prevents + using typedef inside class for explicit dextructor. + + * apps/JAWS/PROTOTYPE/JAWS/Cache_List_T.cpp: + BCB4 bug prevents using typedef inside class for explicit + dextructor. + + * apps/JAWS/PROTOTYPE/JAWS/Cache_Manager_T.cpp: BCB4 bug prevents + using typedef inside class for explicit dextructor. + + * apps/JAWS/PROTOTYPE/JAWS/IO.cpp: Get rid of const warning + + * tests/DLL_Test.cpp: The get_hello function has calling + convention __cdecl (by default since the calling convention is + not mentioned). However, BCB decorates __cdecl with a leading + underscore (and doesn't decorate __stdcall). Thus, we needed to + add some decoration to find the function. Also, added prefix to + find the executable. + + * tests/Message_Queue_Test.cpp: BCB4 defines a "messages" and by + default sucks that namespace into the global namespace, so a new + variable name was needed. + + * tests/Reactor_Exceptions_Test.cpp: The test throws a structured + exception. The ISO does not require non C++ exceptions to be + caught by catch (...). MSVC catches it but BCB4 does not. So, + the code needed to be changed to catch a structured exception as + well. + + * tests/run_tests.bat: Changed to allow running the BCB tests, + when in another directory. + +Sat Jun 26 08:40:01 1999 David L. Levine + + * ace/Proactor.cpp: fixed template instantiation pragmas + (to match explicit template instantiation directives). + +Sat Jun 26 08:21:52 1999 David L. Levine + + * ace/Signal.h: reordered #includes to avoid warning about + #pragma once. + +Fri Jun 25 22:30:24 1999 David L. Levine + + * docs/ACE-guidelines.html: always test on egcs before + commiting. It catches real problems that are missed + by some of the other compilers we (well, some of us :-) + use. + +Fri Jun 25 22:20:16 1999 David L. Levine + + * ace/Future.cpp (detach): changed equality comparison of + curr_observer from itself to the observer argument. + Thanks to egcs -W for snagging this. + +Fri Jun 25 21:46:46 1999 David L. Levine + + * ace/OS.h,ace/Signal.h,ace/config-psos-tm.h + (ACE_DONT_INCLUDE_ACE_SIGNAL_H): added this interlock + diagnostic to inform the user when ace/Signal.h gets #included + instead of signal.h. Thanks to Dale Wood + and Timothy Canham for tripping + over it, on the same day, and reporting it. + +Fri Jun 25 17:22:02 1999 Nanbor Wang + + * ace/Select_Reactor_T.cpp (close): Don't call close() on the + if there isn't one. + + * ace/SOCK_Acceptor.cpp (open): The error status was not set + correctly if listen() failed. + + Thanks to Irfan for helping with this. + +Fri Jun 25 16:48:17 1999 David L. Levine + + * ace/OS.h: don't #include directly on VxWorks. + When cross-compiling on NT host, the GreenHills compiler + #includes ace's Signal.h instead of VxWorks' signal.h. + No comment. OS.h doesn't need to #include signal.h directly, + because it gets indirectly #included through sigLib.h. Thanks + to Dale Wood for reporting this. + +Fri Jun 25 16:03:59 1999 Douglas C. Schmidt + + * ace/Future.cpp: Fixed a couple of places where the set() method + didn't have the new *this parameter added. + + * ace: Added Future_Set.{h,cpp} and Future_Node.{h,cpp}, as well + as the new Future.{h,cpp} files to the ACE release. Thanks to + John Tucker for contributing these. + + * ace/Synch.h: Added a comment pointing out that Solaris + threads do not support timed acquire(). Thanks to Darren + DeRidder for reporting + this. + +Fri Jun 25 15:07:00 1999 John Tucker + + The following describes the changes to ACE_Future_Set: + + * I followed the Observer Pattern where the ACE_Future_Set is the + "Observer" and the ACE_Future_Rep is the "Subject". + + * I created an abstract base class called ACE_Future_Observer + which contains a single pure virtual member function "update()". + + * The ACE_Future_Rep is modified so that it contains a list of + ACE_Future_Observer pointers and an interface for attaching + and detaching ACE_Future_Observer Observer objects. The + "attach(...)" member function allows objects which implement the + ACE_Future_Observer interface to attach themselves to + ACE_Future_Rep objects so that they will be notified of + changes to the ACE_Future_Rep Subject. The "detach(...)" + member function allows objects which implement the + ACE_Future_Observer interface to detach themselves from + ACE_Future_Rep objects so that they will no longer be + notified of changes to the ACE_Future_Rep Subject. + + * The ACE_Future_Rep::set() method is modified so that it invokes the + "update()" method of each ACE_Future_Observer object stored + in its list of attached ACE_Future_Observer Observer + objects. It also removes each ACE_Future_Observer Observer + object from its list. + + * The ACE_Future_Set class derives from the ACE_Future_Observer + class. + + * The ACE_Future_Set class contains its own ACE_Message_Queue + attribute which will be used by writer threads to notify reader + threads that an ACE_Future is readable. + + * The ACE_Future_Set class contains a list of ACE_Future + Subject objects which clients in the reader threads insert into + it. When an ACE_Future is inserted into an + ACE_Future_Set, the ACE_Future_Set attaches itself to the + specified ACE_Future, keeping in mind the ACE_Future_Set + implements the ACE_Future_Observer interface, and also + inserts the specified ACE_Future object into its list of + ACE_Future objects. + + * The ACE_Future_Set class implements its "update()" method to + just enqueue an ACE_Message_Block with Null data onto its + ACE_Message_Queue. Since this "ACE_Future_Set::update()" + method will be invoked by the ACE_Future_Rep::set() method in + the writer thread, it will allow the ACE_Future_Set in the + writer thread to signal itself that an ACE_Future has become + readable. + + * The "int ACE_Future_Set::next_readable(ACE_Future &future, + ACE_Time_Value *)" method in the reader thread will block via a + call to "dequeue()" on its ACE_Message_Queue until is awakened + by a call to "ACE_Future_Set::update()" in the writer thread. + Once awakened, the ACE_Future_Set object iterates through its + list of ACE_Future objects until it encounters a readable + one. This readable ACE_Future will be removed from its list + and assigned to the specified "future" parameter". + + * The ACE_Future_Set destructor detaches itself from all + ACE_Future objects remaining in its list. + + * I did not use the ACE_Reactor since I could foresee the + ACE_Future_Set being used by applications which did not run,or + want to run, the event loop. + +Fri Jun 25 14:28:05 1999 Ossama Othman + + * ace/UNIX_Addr.cpp (ACE_UNIX_Addr): Moved base_set() call in + constructor to member initializer list. This is cleaner coding + style. The original code, before a bug fix was made, was like + that. I just forgot to put it back in the member initializer + list after the fix. + +Fri Jun 25 15:15:32 1999 Steve Huston + + * performance-tests/Misc/Makefile: set static_libs_only so the library + selection gets done right on AIX. Clean out the tempinc dir + between binaries on AIX. + + * performance-tests/Misc/test_singleton.cpp: Moved def of DC_Singleton + to new file, test_singleton.h so it works on AIX w/ xlC. + + * ace/Hash_Cache_Map_Manager_T.h: Removed the "ace/" from the + #pragma implementation line. The compiler remembers the directory + it came from. + + * examples/ASX/UPIPE_Event_Server/Peer_Router.h: + * examples/Connection/non_blocking/CPP-connector.h: + * examples/Connection/non_blocking/CPP-acceptor.h: + Added #pragma implementation, for AIX IBM C++. + + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp: + Split the Options class to a new file, CPP-inclient.h, to make + IBM C++ (xlC) like it. + + * examples/IOStream/server/iostream_server.cpp: Split the Handler + class off to new iostream_server.h file, to make IBM C++ (xlC) + like it. + + * examples/Logger/Acceptor-server/server_loggerd.cpp: Moved the + Options and handler classes' definitions to new server_loggerd.h + file to build with AIX IBM C++. + + * examples/Misc/testr_dump.cpp: Moved the program's classes' + definitions to new server_loggerd.h file to build with AIX IBM + C++. + + * examples/IPC_SAP/SOCK_SAP/Makefile: + * examples/Connection/non_blocking/Makefile: + * examples/Misc/Makefile: + On AIX w/ IBM C++, delete the tempinc directory before compiling + each new program. Keeps the template instantiations from one + program from conflicting with the others. + + * include/makeinclude/rules.lib.GNU: On AIX using IBM C++ only, don't + try to link in the auto-instantiated template object modules if + there aren't any. + + * include/platform_aix4_cset++.GNU: Removed TMPL_OBJS - not needed now. + * examples/Misc/Makefile: On AIX w/ IBM C++, delete the tempinc + directory before compiling each new program. Keeps the template + instantiations from one program from conflicting with the + others. + +Fri Jun 25 12:40:29 1999 David L. Levine + + * ACE-INSTALL.html: added/expanded/moved discussions of + enabling/increasing virtual memory on Linux and LynxOS. Thanks + to Fabrice Podlyski for providing + detailed information for LynxOS. + +Fri Jun 25 11:16:32 1999 Kirthika Parameswaran + + * tests/Makefile: Updated dependencies for Cache_Map_Manager_Test + and Map_Manager_Test. + +Fri Jun 25 07:41:05 1999 David L. Levine + + * docs/ACE-guidelines.html: added guideline to include + directories containing files with template definitions in a -I. + +Thu Jun 24 22:42:44 1999 David L. Levine + + * ace/SOCK_Dgram_Mcast.cpp (subscribe): fixed UNICOS + preprocessor usage so that it's not in the middle of the + ACE_reintepret_cast. + +Thu Jun 24 22:18:52 1999 Doug Anderson + + * ace/CDR_Stream.*,ace/SOCK_Dgram_Mcast.cpp,ace/config-cray.h: + updates for Cray UNICOS port. + +Thu Jun 24 21:33:11 1999 Kirthika Parameswaran + + * ace/Caching_Strategies_T.{h, cpp} (class ACE_FIFO_Caching_Strategy): + * ace/Caching_Strategies_T.{h, cpp} (class ACE_LRU_Caching_Strategy): + * ace/Caching_Strategies_T.{h, cpp} (class ACE_LFU_Caching_Strategy): + Removed the overloaded clear_cache () method with entries as an + formal argument. + + * ace/Caching_Strategy_Utility_T.{h,i,cpp}: Renamed as + Caching_Utiltity.{h, i, cpp}. Also, removed formal + argument from the clear_cache() method, and made purge_percent + of type double instead of unsigned int. + + * tests/Cache_Map_Manager_Test.cpp: Changed the purge_test and + added a test for the Cache_Map_Manager using the Map_Manager. + + * tests/Map_Manager_Test.cpp: Changed the template instantiation + in vein with the changes to the names of the Caching_Utility + classes. + + * tests/Cache_Map_Manager_test.dsp: + * tests/tests.dsw: + Made NT project for the test and added it to the tests workspace. + +Thu Jun 24 20:43:54 1999 Irfan Pyarali + + * examples/Reactor/WFMO_Reactor/test_multithreading.cpp + (Task_Handler): Change loop to go from 1 to number_of_handles + instead of 0 to number_of_handles - 1. + +Thu Jun 24 18:36:22 1999 Douglas C. Schmidt + + * ace/Signal.h: Removed the still-born + ACE_Sig_Action (struct sigaction *) method. Thanks to Umar + Syyid for reporting this. + +Thu Jun 24 15:47:32 1999 Steve Huston + + * tests/run_pharlap_tests.bat: One-button script for running the tests + built for PharLap ETS. + + * tests/tests_pharlap_msvc.lnk: PharLap ETS LinkLoc input file for + building test for ETS. Very possible that local sites will need to + adjust this for the target environment. + + * tests/Atomic_Op_Test.dsp: + * tests/Barrier_Test.dsp: + * tests/Basic_Types_Test.dsp: + * tests/Buffer_Stream_Test.dsp: + * tests/CDR_Test_Test.dsp: + * tests/Collection_Test.dsp: + * tests/Conn_Test.dsp: + * tests/DLList_Test.dsp: + * tests/Dynamic_Priority_Test.dsp: + * tests/Enum_Interfaces_Test.dsp: + * tests/Env_Value_Test.dsp: + * tests/Future_Test.dsp: + * tests/Handle_Set_Test.dsp: + * tests/Hash_Map_Manager_Test.dsp: + * tests/High_Res_Timer_Test.dsp: + * tests/IOStream_Test.dsp: + * tests/Map_Manager_Test.dsp: + * tests/Map_Test.dsp: + * tests/Mem_Map_Test.dsp: + * tests/Message_Block_Test.dsp: + * tests/Message_Queue_Notifications_Test.dsp: + * tests/Message_Queue_Test.dsp: + * tests/MM_Shared_Memory_Test.dsp: + * tests/MT_Reactor_Timer_Test.dsp: + * tests/MT_SOCK_Test.dsp: + * tests/Naming_Test.dsp: + * tests/New_Fail_Test.dsp: + * tests/Notify_Performance_Test.dsp: + * tests/OrdMultiSet_Test.dsp: + * tests/Pipe_Test.dsp: + * tests/Priority_Buffer_Test.dsp: + * tests/Priority_Reactor_Test.dsp: + * tests/Priority_Task_Test.dsp: + * tests/Process_Mutex_Test.dsp: + * tests/Process_Strategy_Test.dsp: + * tests/RB_Tree_Test.dsp: + * tests/Reactor_Exceptions_Test.dsp: + * tests/Reactor_Notify_Test.dsp: + * tests/Reactor_Performance_Test.dsp: + * tests/Reactor_Timer_Test.dsp: + * tests/Reactors_Test.dsp: + * tests/Reader_Writer_Test.dsp: + * tests/Recursive_Mutex_Test.dsp: + * tests/Reverse_Lock_Test.dsp: + * tests/Semaphore_Test.dsp: + * tests/Service_Config_Test.dsp: + * tests/Sigset_Ops_Test.dsp: + * tests/Simple_Message_Block_Test.dsp: + * tests/SOCK_Connector_Test.dsp: + * tests/SOCK_Send_Recv_Test.dsp: + * tests/SOCK_Test.dsp: + * tests/SPIPE_Test.dsp: + * tests/SString_Test.dsp: + * tests/SV_Shared_Memory_Test.dsp: + * tests/Svc_Handler_Test.dsp: + * tests/Task_Test.dsp: + * tests/Thread_Manager_Test.dsp: + * tests/Thread_Mutex_Test.dsp: + * tests/Thread_Pool_Reactor_Test.dsp: + * tests/Thread_Pool_Test.dsp: + * tests/Time_Service_Test.dsp: + * tests/Time_Value_Test.dsp: + * tests/Timeprobe_Test.dsp: + * tests/Timer_Queue_Test.dsp: + * tests/Tokens_Test.dsp: + * tests/TSS_Test.dsp: + * tests/Upgradeable_RW_Test.dsp: + * tests/UPIPE_SAP_Test.dsp: + Added "PharLap ETS Debug" configurations. + + * ACE-INSTALL.html: Added some info about the PharLap TNT ETS port. + +Thu Jun 24 14:10:20 1999 David L. Levine + + * bin/libsize.pl: use appropriate size command for all of + our cross-compile platforms. + +Thu Jun 24 14:00:27 1999 David L. Levine + + * ace/config-sunos5.7.h: with ghs only, undef ACE_HAS_PROC_FS + and ACE_HAS_PRUSAGE_T because the Sun's sys/procfs_isa + requires 64-bit ints. + +Thu Jun 24 13:53:53 1999 David L. Levine + + * ace/Proactor.cpp: added missing backslash to one of + the instantiation pragmas. + +Thu Jun 24 12:53:22 1999 Steve Huston + + * ace/OS.(h i): Added check for ACE_HAS_WINSOCK2 != 0 wherever + the check was only for ifdef ACE_HAS_WINSOCK2. Allows building on + Winsock 1.1. + + * ace/config-pharlap.h: New config file for use with PharLap TNT + Embedded ToolSuite. This is not really tested yet - that activity + continues. + +Thu Jun 24 07:05:17 1999 David L. Levine + + * ace/config-osf1-4.0.h,include/makeinclude/platform_osf1_4.0.GNU, + include/makeinclude/platform_osf1_cxx.GNU: use pragmas instead of + command line arguments to disable specific warning messages. + This cleans up the command line, and makes it easier to control + warning message suppression (because the compiler version is + available in __DECCXX_VER to the preprocessor.) + +Wed Jun 23 21:27:45 1999 David L. Levine + + * ACE-INSTALL.html: removed space from "resource requirements" + tag to avoid problems with web browers. + +Wed Jun 23 20:18:42 1999 Douglas C. Schmidt + + * ace/WFMO_Reactor: Added a no-op work_pending() + implementation until we figure out how to implement this. + + * ace/Reactor_Impl.h, + * ace/Reactor.{cpp,h}, + * ace/Select_Reactor_T.{h,cpp}: Added a work_pending() method + that just checks if there are I/O events "ready" for + dispatching, but doesn't actually dispatch event handlers. This + is needed for TAO's work_pending() API. Thanks to Irfan for + suggesting this. + +Wed Jun 23 15:27:48 1999 David L. Levine + + * bin/libsize.pl: added this script, which provide a size + breakdown of either the ACE or TAO libraries. + +Wed Jun 23 14:34:27 1999 David L. Levine + + * ACE-INSTALL.html: added link to ACE Library Size Breakdown + in System Resource Requirements discussion. + +Wed Jun 23 14:09:27 1999 Kirthika Parameswaran + + * ace/Caching_Strategies_T.cpp (ACE_LRU_Caching_Strategy): + Checked and modified the creation and deletion logic of the + caching utility object. + * ace/Cache_Map_Manager_T.cpp (~Cache_Map_Manager): + Added the close method call to avoid memory leaks. + * tests/run_test.pl: + * tests/run_test.bat: + Added Cache_Map_Manager_Test. + * tests/Cache_Map_Manager_Test: Removed extra comma. + * ace/Caching_Strategies_T.{h, i, cpp} + * ace/Cache_Map_Manager_T.{i,h,cpp} + * ace/Caching_Strategy_Utility_T.{h,i,cpp} + * ace/Cleanup_Strategies_T.{h, i,cpp} + * ace/Hash_Cache_Map_Manager_T.{h, i,cpp} + * ace/ace_dll.dsp: + Added above caching related files into the NT ace workspace. + +Wed Jun 23 10:09:06 1999 David L. Levine + + * ACE-INSTALL.html: updated System Resource requirements discussion. + All of ACE+TAO requires well over 1 Gb of disk now :-/. + +Wed Jun 23 00:03:31 1999 Douglas C. Schmidt + + * ace/SOCK_Dgram.cpp (ACE_SOCK_Dgram): Fixed an unused args + warning. Thanks to David for reporting this. + + * ace/Service_Config.h (ACE_Service_Config): Moved the + documentation for the open() method's "argv" parameters *to* the + open() method. Also clarified that by default we don't install + the "statically configured services" (such as ACE_Svc_Manager). + Thanks to Ian MacDonald for motivating this. + + * ace/OS.i (accept): Added a new workaround for platforms + like VxWorks that can't handle NULL addrs to accept(). Thanks + to James Hu and John Weald + for this fix. + + * ace/config-vxworks5.x.h: Added a new macro + ACE_HAS_BROKEN_ACCEPT_ADDR to work around VxWorks problems + with NULL addrs to accept(). + +Tue Jun 22 21:17:49 1999 Kirthika Parameswaran + + * tests/Cache_Map_Manager_Test.cpp: Tests the Cache_Map_Manager + as well as the Hash_Cache_Map_Manager which has additional + features of caching and purging of entries along with the map + properties. + * tests/Makefile: Added Cache_Map_Manager_Test.cpp + +Tue Jun 22 15:20:53 1999 David L. Levine + + * tests/Thread_Manager_Test.cpp (main): removed THR_DETACHED. + That seems to solve the libthread panic problem on Solaris, + even with group signalling enabled. Thanks to Carlos for + suggesting this. + +Tue Jun 22 15:11:34 1999 Matthew J Braun + + * ace/Containers_T.h,i + Added new next(T *&) methods to the ACE_DLList_Iterator + classes and marked the old versions as DEPRECATED. + +Tue Jun 22 13:40:22 1999 David L. Levine + + * docs/tutorials/*/Makefile: replace rm -f with $(RM). + +Tue Jun 22 13:07:19 1999 Carlos O'Ryan + + * tests/Message_Block_Test.cpp: + * websvcs/lib/URL_Addr.i: + * websvcs/lib/URL_Addr.cpp: + Removed more g++ -W warnings + +Tue Jun 22 11:12:42 1999 David L. Levine + + * ACE-INSTALL.html: added System Resource Requirements + section. Thanks to Hakan Kallberg + and Eric Mitchell for the + Linux swap space and -pipe removal suggestions. + +Tue Jun 22 07:45:59 1999 David L. Levine + + * ace/Event_Handler_T.i: fixed some occurrences of + ACE_INLINE that were after the function return type. + +Tue Jun 22 07:30:12 1999 David L. Levine + + * ace/Stats.cpp: fixed for ACE_LACKS_LONGLONG_T platforms. + (sample): replace return statement with an else branch, to + make it easier to see what the code is doing. + +Mon Jun 21 23:36:02 1999 Carlos O'Ryan + + * websvcs/lib/URL_Addr.cpp: + Fixed warnings about unused variables. + +Mon Jun 21 23:27:01 1999 Darrell Brunsch + + * ace/SString.h: Added ACE_TString typdef that is either a + ACE_CString or ACE_WString, depending on whether UNICODE + is defined. + +Mon Jun 21 23:22:46 1999 Douglas C. Schmidt + + * examples/Misc/test_trace.cpp: Improved this test so it will + work more effectively on single-threaded *and* multi-threaded + platforms. Thanks to Hao Ruan for reporting + this. Also fixed a warnng in this test caused by failure to + return a value on every return path. Thanks to David Levine for + reporting this. + +Mon Jun 21 14:17:22 1999 Carlos O'Ryan + + * ace/Stats.h: + * ace/Stats.cpp: + Added new class to keep latency and throughput statistics. + +Mon Jun 21 13:24:41 1999 David L. Levine + + * include/makeinclude/platform_freebsd.GNU,platform_linux.GNU, + platform_linux_lxpthread.GNU,platform_psosim_g++.GNU, + platform_qnx_neutrino.GNU,platform_sunos5_g++.GNU, + platform_vxworks5.x_g++.GNU: added -W to CFLAGS. -Wall + doesn't include the -W checks, at least with egcs 1.1.2. + +Mon Jun 21 10:18:01 1999 David L. Levine + + * ace/Makefile: moved FlReactor, Msg_WFMO_Reactor, TkReactor, + and XtReactor from OTHER to DEMUX_FILES because TAO uses + them in some configurations. They add negligible size + overhead when not used. Thanks to Nanbor for pointing this + out. + +Mon Jun 21 10:11:15 1999 Carlos O'Ryan + + * ace/Makefile: + The TP_Reactor is used by TAO, but was listed in the OTHER + component. Moved to the DEMUX component to make it always + available. Thanks to David Levine for pointing this out. + +Mon Jun 21 09:58:42 1999 Joe Hoffert + + * ace/QoS.{h,cpp}: Removed these files from ACE since they have a + lot of problems. Will add back later when they compile and are + tested. + +Mon Jun 21 08:40:14 1999 Steve Huston + + * examples/Connection/misc/Connection_Handler.cpp (handle_input): + Corrected signed/unsigned mismatch I accidentally put in last week. + + * ace/CORBA_macros.h: Added __HP_aCC to the compilers that need + special handling for throwing an exception from a value-returning + function. + + * include/makeinclude/platform_hpux_aCC.GNU: Added +DAportable + to CCFLAGS if no architecture specified. Added -z to LDFLAGS + to force SEGV on dereference 0 pointer. Added definition for + CPP_LOCATION to not use aCC - it displays warnings for unrecognized + #pragmas and this dirties the TAO builds. Thanks to Brian Wallis + for these ideas. + +Sat Jun 19 22:28:35 1999 Carlos O'Ryan + + * bin/auto_compile: + Updated the list of tests run every night. + +Sat Jun 19 18:15:48 1999 Carlos O'Ryan + + * ace/OS.h: + * ace/CORBA_macros.h: + The ACE_GUARD macros needed some blanks to work with a template + as the lock type parameter. + +Sat Jun 19 10:34:55 1999 Douglas C. Schmidt + + * ace/Acceptor.cpp, + ace/Connector.cpp: Modified the make_svc_handler() hook method + in these classes to set the Reactor of the newly created + SVC_HANDLER to the same reactor that the Acceptor or Connector + is using. Thanks to John Aughey for + this suggestion. + + * man/{html,man3}: Zapped the Ace_Export.* files since + they don't belong here. Thanks to Zoran Ivanovic + for reporting this. + +Fri Jun 18 20:49:09 1999 Irfan Pyarali + + * ace/Synch.cpp: Added template instantiations for + ACE_Write_Guard. + +Fri Jun 18 19:30:09 1999 Douglas C. Schmidt + + * ACE version 4.6.42 released. + +Fri Jun 18 18:49:39 1999 Carlos O'Ryan + + * tests/Makefile: + * tests/run_tests.psosim: + * tests/run_tests.sh: + * tests/run_tests.vxworks: + Disabled Map_Manager_Test, it does not work with too many + platforms and the features it tests are not used (yet). + +Fri Jun 18 16:54:43 1999 Irfan Pyarali + + * tests/Message_Queue_Test.cpp: + * tests/Message_Block_Test.cpp: + Removed template instantiations for ACE_Message_Queue_Iterator + and ACE_Message_Queue_Reverse_Iterator. They are already + available in the ace library. + + * ace/Service_Types.cpp: Added explicit instantiations for + ACE_Message_Queue_Reverse_Iterator. ACE_Message_Queue and + ACE_Message_Queue_Iterator were already there. This addition + will complete the set. + +Fri Jun 18 12:12:59 1999 Douglas C. Schmidt + + * ace/SOCK_Dgram: Added the first set of hooks to support + QoS-enabled data grams for Win2K GQoS. + +Fri Jun 18 11:37:31 1999 Nanbor Wang + + * *.{mdp,mak}: Removed all MSVC++ 4.x workspaces and makefiles. + We are no longer supporting this version of MSVC++. If you need + support for MSVC++ 4.x please contact Steve Huston + of Riverace to arrange a support + contract. + +Fri Jun 18 12:19:42 1999 Matthew J Braun + + * tests/DLList_Test.cpp: Removeed unnecessary explicit template + instantiation that mirrored ones in ace/Containers.cpp to fix + compile errors on VxWorks. Why this _ever_ worked, I don't + know... + +Fri Jun 18 11:37:31 1999 Nanbor Wang + + * ace/Service_Config.h (class ACE_Static_Svc_Descriptor): Changed + the type of from LPTCSTR to 'const ASYS_TCHAR*'. + +Thu Jun 17 12:46:30 1999 Douglas C. Schmidt + + * tests/Conn_Test.cpp: Fixed a problem with explicit template + instantiations so that this test will compile even if ACE isn't + built with threads. + + * netsvcs/lib/Server_Logging_Handler.cpp: Fixed the explicit + template instantiations so hopefully they'll work when ACE is + compiled without threads. Thanks to Carlos for reporting this. + + * ace/SOCK_Dgram_Mcast.cpp: We needed to modify the return values + of subscribe_i() so that we'd have the ability to differentiate + a "short-circuit" return on NT. Thanks to Marina for reporting + this. + + * ace/OS.h: Added an automatic test to check if we're running on + an EBCDIC character set, and if so, set + ACE_STANDARD_CHARACTER_SET_SIZE to 256 rather than 128. Thanks + to Jim Rogers for this suggestion. + + * performance-tests/TTCP/Makefile: Zapped the Orbix and ORBeline + directories from the Makefile. These are *way* out of date and + have been superceeded by the versions in + $TAO_ROOT/performance-tests/Thruput/. Thanks to Youzhong Liu + for reporting this. + +Thu Jun 17 12:59:24 1999 Carlos O'Ryan + + * ace/CDR_Stream.h: + * ace/CDR_Stream.i: + Added accessors for the codeset translators. + +Thu Jun 17 00:33:57 1999 Nanbor Wang + + * include/makeinclude/platform_freebsd.GNU (VERSION): Applied the + patch to automatically detect FreeBSD version. Thanks to + Goldshtain Dmitry for providing the + patch. + + * bin/Process_Win32.pm (TimedWait): + Get and return the exit status from the waited process. + +Wed Jun 16 22:03:29 1999 Irfan Pyarali + + * ace/OS.h (ACE_OS): Removed ACE_WIDE_DL_TYPE and the wide char + versions of dlopen(), dlsym(), and dlerror(). Even Win32 + doesn't support them. + + Also changed the argument type of ACE_OS::dlopen(), + ACE_OS::dlsym(), ACE_DLL::ACE_DLL(), ACE_DLL::open(), and + ACE_DLL::symbol() from ACE_DL_TYPE to const char *. Now the + ACE_OS wrappers do the correct const cast before calling the OS + function. Note that since this change is only adding constness + to the argument, the change is backward compatible. + +Wed Jun 16 20:47:27 1999 Carlos O'Ryan + + * bin/Process_Win32.pm: + The wait time for a process seems to be in milliseconds. + +Wed Jun 16 20:03:41 1999 Steve Huston + + * ace/Containers_T.cpp: Qualify dllist_ with 'this->' to get the + template types looked up correctly. This is what fixes the pesky + future error 641 on HP-UX aC++. + + * ace/RB_Tree.i: Qualify node_ and tree_ with 'this->' to get the + template types looked up correctly. aC++ is really happy now, + and so is Steve :-) + +Wed Jun 16 18:50:38 1999 Carlos O'Ryan + + * ace/OS.i: + Fixed typos in single threaded code. + +Wed Jun 16 18:14:45 1999 Kirthika Parameswaran + + * ace/Cached_Connect_Strategy_T.{h, cpp}: Added ATTRIBUTES to + the template list for the Cached_Connect_Strategy_Ex class to + ward off g++ compiler errors. + +Wed Jun 16 15:54:08 1999 Carlos O'Ryan + + * ace/OS.h: + * ace/OS.i: + * ace/config-win32.h: + Auto-detect if we are using MSVC5.0 or MSVC6.0 and define the + ACE_HAS_WINSOCK_GQOS macro in that case. This macro is used in + the places where the QoS data structure of both compilers are + different. + +Mon Jun 14 22:52:48 1999 Kirthika Parameswaran + + * tests/Map_Manager_Test.cpp: Removed template instantiation + regarding ACE_Read_Mutex. Added template + instantiations for ACE_Pair and + ACE_Reference_Pair to make sunc++5.0 happy. + + * ace/Caching_Strategy_Utility_T.{h.cpp}: Removed math.h from the + include list since it caused problems when native exceptions were + enabled. + +Mon Jun 14 21:41:40 1999 Douglas C. Schmidt + + * ace/Connector.h: Added a comment to clarify that if + Connector::connect() fails the close() hook of the Svc_Handler + is called to prevent resource leaks. Thanks to V. Lakshmanan + for motivating this. + +Mon Jun 14 20:54:09 1999 Kirthika Parameswaran + + * ace/Synch.cpp: Declared template definitions for + ACE_Read_Mutex to get around compiler errors + while building $ACE_ROOT/tests. Thanks to Dr.Schmidt for + suggesting this. + +Mon Jun 14 19:33:04 1999 Douglas C. Schmidt + + * ace/SOCK_Acceptor.cpp (accept): Fixed a bizarre problem with + Win32 where it's imperative that the third parameter to + must be a NULL pointer if we want to ignore the client address. + + * ace/OS.i: Cleaned up warnings in join_leaf() and ioctl() due to + unused args. Thanks to Marina for reporting this. + +Mon Jun 14 15:56:27 1999 David L. Levine + + * ace/config-qnx-neutrino.h, + include/makeinclude/platform_qnx_neutrino.GNU: added config + files for QNX Neutrino. They support cross-compiling on a + QNX4 host for Neutrino target. Builds are almost (but not + completely) clean. + + * include/makeinclude/platform_qnx_neutrino.GNU: only + build static libs, because they seem to work better. Many + of the ACE tests pass with this configuration! (Some of + the usual suspects, such as Conn_Test, don't.) + + * ace/config-qnx-neutrino.h: don't need ACE_HAS_PENTIUM here, + because it's in config-g++-common.h. Removed + ACE_HAS_USING_KEYWORD, because g++ 2.8.1 doesn't support + namespaces. + +Mon Jun 14 14:33:29 1999 David L. Levine + + * tests/Reactor_Performance_Test.cpp (handle_input): removed + printout when result == 0. It happens when the client finishes + first, which I think is OK. + +Mon Jun 14 11:55:31 1999 Steve Huston + + * include/makeinclude/platform_aix4_g++.GNU: New platform file for AIX + 4.x using GNU compiler. Been tested w/ egcs 1.1.2. + + * include/makeinclude/platform_aix4_cset++.GNU: Make shared libs + correctly and without building the static one first. + Also, for cset++, disable warnings on AIX 4.3 to shut up the + 0-valued preprocessor warnings. This is not a great + long-term general solution, but it'll do the job. + + * include/makeinclude/wrapper_macros.GNU: + * include/makeinclude/rules.lib.GNU: On AIX, build shared lib w/o + requiring static one first. When building shared libs, also link + against them and install the proper files when done. The correct + files built for libfoo are: + libfoo.a: archive/static library + libfoo.so: shared library, but not set up for run-time linker. + This is the one loaded by ACE dynamic loading. + libfooshr.a: an archive library with libfoo.so as its only + member. This is what to link against when building + a program/library that uses libfoo. + + Silly? Uh-huh. But that's life in AIX land. I tried to get things + building/running clean using the run-time linker (-brtl) but had + no end of trouble. And, since no other libs in /usr/lib want to + do it that way either, it's like this. + +Mon Jun 14 09:58:02 1999 Douglas C. Schmidt + + * ace/OS.i: Added ACE_UNUSED_ARG() macros for all the non-WINSOCK2 + cases in the ACE_Flow_Spec and ACE_QoS methods. Thanks to David + for reporting this. + + * ace/OS.i: Moved the definition of ACE_Errno_Guard's methods to + earlier in the file to avoid problems with inline ordering. + Thanks to David for reporting this. + + * ACE-INSTALL.html: Updated Barry Hoggard's CORBA page URL. + +Mon Jun 14 07:17:23 1999 David L. Levine + + * docs/ACE-guidelines.html: fixed typo: exceptions. + +Sun Jun 13 14:22:54 1999 Douglas C. Schmidt + + * ace/LSOCK_Acceptor.cpp: Rewrote the accept() method to use the + same new technique that's used in ACE_SOCK_Acceptor::accept(). + This is necessary since there's no longer a shared_accept(). + + * ace/SOCK_Acceptor: Removed shared_accept() since it's been split + into two parts to make the QoS features easier to maintain. + + * ace/SOCK_Acceptor: Added the new ACE_Accept_QoS_Params parameter + to the ACE_SOCK_Acceptor::accept(). Also created two new + private methods, shared_accept_start() and + shared_accept_finish(), that factor out common code. + + * ace/SOCK_Connector: Added the new ACE_Connect_QoS_Params + parameter to ACE_SOCK_Connector::connect(). Also created two + new private methods, shared_connect_start() and + shared_connect_finish(), that factor out common code. + + * ace/SOCK_Connector.cpp: Cleaned up the logic that checks for + various types of errors and updated the code to use the new + ACE_Errno_Guard features. + + * ace/OS.h: Added an equality and in-equality operator for + ACE_Errno_Guard and moved all the methods into OS.i rather than + OS.h. Also added an ACE_Export to the ACE_Errno_Guard class so + that it can be used outside of the ACE library. + + * ace/OS.h: For Win32, added support for the WinSock2 QoS + functions WSAAccept(), WSAConnect(), WSAJoinLeaf(), and + WSAIoctl(). + + * ace/OS.h: For Win32, added thin wrappers ACE_Flow_Spec and + ACE_QoS that encapsulate the WinSock2 FLOWSPEC and QOS structs, + respectively. + + * ace/OS.h: For Win32, added an implicit conversion operator from + iovec to WSABUF since they are structurally equivalent. + +Sun Jun 13 14:22:54 1999 Douglas C. Schmidt + + * bin/README.html: Updated the information about the ACE + documentation tools to be more helpful. + +Fri Jun 11 20:04:37 1999 Carlos O'Ryan + + * bin/Process_Unix.pm: + Fixed problems on TimedWait(). + +Fri Jun 11 15:28:44 1999 Douglas C. Schmidt + + * ace/OS.h: Need to add #include before + since pthread.h doesn't include signal.h on SunOS 5.7. Thanks + to Rick Weisner for reporting this. + + * ace/OS: ACE_OS::memchr() should return a const void * rather + than a void *. Thanks to Rick Weisner + for reporting this. + + * ace/Dirent.i: Don't call closedir() on a NULL dirp because some + platforms (such as SunOS 5.7) will segfault! Thanks to Tom + Arbuckle for pointing + this out. + +Fri Jun 11 14:47:47 1999 Carlos O'Ryan + + * bin/auto_compile: Does not compile all the directories in TAO, + because it takes too much space (and time). Run several more + tests in TAO that are stable. Improve output. + + * ace/Log_Msg.cpp: Use ACE_HAS_THR_C_DEST for TSS "destructors", + not ACE_HAS_THR_C_FUNC. + + * bin/ACEutils.pm: + * bin/Process_Unix.pm: + * bin/Process_Win32.pm: Added new routines to wait for a process + with a timeout, ditto for the ACE::waitforfile() routine. They + can be used to write more reliable test drivers. + +Fri Jun 11 14:40:49 1999 David L. Levine + + * bin/create_ace_build: run the directory mode value through eval, + to convert it from octal to decimal, if necessary. Thanks to + Russ Noseworthy for providing the patch. + + * include/makeinclude/platform_sunos5_sunc++.GNU: only set + TEMPLATE_REPOSITORY for Sun C++ 4.2. 5.0 doesn't need it. + Thanks to Dennis C. De Mars for + reporting this. + + * tests/Reactor_Performance_Test.cpp (main): return error status + from run_event_loop () call. And, added a few ACE_ERROR + printouts. Thanks to Steve for mentioned this. + + * ace/config-sunos5.5.h: properly reverted all the changes of + today. The comments are more helpful this way. + + * include/makeinclude/platform_linux_lxpthread.GNU: changed + PLATFORM_AIO_SUPPORT to use := instead of =, so that it only + invokes the shell once. Thanks to Lothar Werzinger + for suggesting this. + +Fri Jun 11 12:10:00 1999 Chris Gill + + * tests/RB_Tree_Test.{cpp, h (new)}: factored out class template + declaration into a .h file to make AIX C++ happy. + +Thu Jun 10 23:11:36 1999 Kirthika Parameswaran + + * ace/Cache_Map_Manager_T.{h, i, cpp}: Added Iterator + implementations to the template parameters to be able to build + using the g++ compiler. Also removed unnecessary HASH_KEY and + COMPARE_KEYS from the template list. + + * ace/Hash_Cache_Map_Manager_T.{h, i, cpp}: Made appropriate + changes to support changes made to Cache_Map_Manager. + + * ace/Caching_Strategies_T.{h, i, cpp}: Added an overloaded + clear_cache method which allows the user to specify the total + number of entries in the cache. Also added the + Caching_Strategy_Utility parameter which decouples the actual + purging from the caching strategy. + + * ace/Caching_Strategy_Utility.{h,i,cpp}: Added a Null version of + the utility to be used with the Null strategy. + + * ace/Cleanup_Strategies_T.{h,i,cpp}: Added the ACE_UNSED_ARGS + macro to ward of g++ warnings. + + * tests/Map_Manager_Test.cpp: Added performance tests for the + Cache_Map_Manager and the Hash_Cache_Map_Manager. + +Thu Jun 10 20:29:00 1999 Chris Gill + + * ace/RB_Tree.h: Made constructors for iterator base class + protected instead of protected, so the the base class can only + be constructed by the derived forward and reverse iterator + classes. Thanks to Matt Braun for pointing this out. + + * tests/RB_Tree_Test.cpp: Major overhaul of the test to use a test + class template that encapsulates the test details and makes the + code much more readable. Then, the main program merely + instantiates a test for each of the four possible combinations + of key/item type parameterization over int and const char *, and + calls the run_test () method of each test instance. + +Thu Jun 10 12:44:22 1999 Steve Huston + + * tests/UPIPE_SAP_Test.cpp: Disable for Win32 if !ACE_HAS_WINNT4. + The test relies on ACE_SPIPE_Acceptor which requires NT4 to + work. + +Thu Jun 10 12:47:52 1999 David L. Levine + + * ace/config-linux-lxpthreads.h: removed ACE_HAS_AIO_CALLS. It's + now enabled in the platform_macros.GNU file: + + * include/makeinclude/platform_linux_lxpthread.GNU: added + automatic detection of AIO support, based on existence of + /usr/lib/librt.so. + + * include/makeinclude/platform_linux_lxpthread.GNU: add -lrt to + LIBS only if $(PLATFORM_AIO_SUPPORT) is equal to + -DACE_HAS_AIO_CALLS. + + Thanks to Jake Hamby for reporting that not + all Linux platforms have AIO support. + +Thu Jun 10 10:17:08 1999 David L. Levine + + * ace/config-sunos5.5.h: with Sun C++ 5.0, #define + _RWSTD_NO_EXCEPTIONS 1 if exceptions are not enabled. This + avoids a warning about throw expressions being ignored with + -noex. See /opt/SUNWspro_5.0/SC5.0/include/CC/stdcomp.h for + more information. + + * ace/os-patches/vxworks-5.1.txt,ACE-INSTALL.html: added these + notes for using ACE with VxWorks 5.1. + + * docs/ACE-guidelines.html: avoid source code filenames that + include "Error". Avoid #include . + +Wed Jun 9 21:45:24 1999 Douglas C. Schmidt + + * tests/Svc_Handler_Test.cpp (main): Revised the test a bit to + make it more clear what's going on. + + * ace/Svc_Handler.cpp: Fixed a typo in flush() -- we need to + update the temp pointer with temp->cont() *not* entry->cont(). + + * ace/Svc_Handler.cpp (dump): Fixed a typo -- I wasn't comparing + the pointer to 0, I was comparing the ACE_Time_Value! + +Wed Jun 9 21:10:00 1999 Chris Gill + + * ace/config-psos-diab-ppc.h: added + ACE_HAS_NONCONST_SELECT_TIMEVAL + + * tests/RB_Tree_Test.cpp: fixed constness issues revealed by + SunC++ 5.0, added return value assertions for insert calls, + added typedefs. + +Wed Jun 9 20:40:50 1999 Carlos O'Ryan + + * ace/CDR_Stream.h: + * ace/CDR_Stream.cpp: Added new methods to support message + reassembly in GIOP 1.1 + +Wed Jun 9 15:32:37 1999 Douglas C. Schmidt + + * ace/Message_Queue_T: Added a lock() accessor method so that + other components can access the lock used by a Message Queue. + + * ace/Svc_Handler.cpp: Added better support for timeout handling + for the ACE_Buffered_Svc_Handler. + + * ace/Svc_Handler: Split the buffering portion of ACE_Svc_Handler + off into a separate class called ACE_Buffered_Svc_Handler to + avoid adding extra space and complexity to the existing + ACE_Svc_Handler. Thanks to Irfan for suggesting this, as well + as also suggesting ways to improve the performance by caching + the current size of the buffer. + + * ace/OS.h: Added a patch to work around some problems with macros + for USYNCH_THREAD. Thanks to David Levine and Russ Noseworthy + for this. + + * examples/Threads/task_five.cpp (main): Improved the form and + content of this example a bit. + + * include/makeinclude/platform_sunos5_sunc++.GNU, + * include/makeinclude/platform_sunos5_g++.GNU, + * include/makeinclude/platform_irix6.x_g++.GNU, + * include/makeinclude/platform_linux_lxpthread.GNU, + * include/makeinclude/platform_irix6.x_sgic++.GNU: + Added support to make it easier to override various settings + in platform_macros files. Thanks to Dave Meyer + for contributing this. + + * ace/SPIPE_Stream: Added sendv(), sendv_n(), and recvv_n() + methods to SPIPE_Stream. Thank to Carlos for pointing this out. + + * ace/config-mvs.h: Changed the size of the ACE_SIZEOF_DOUBLE and + ACE_SIZEOF_LONG_DOUBLE from 4 and to 8 and 16, respectively. + Thanks to Jim Rogers for reporting this. + + * ace/config-mvs.h: Added ACE_HAS_NONCONST_SELECT_TIMEVAL on the + advice of Jim Rogers . + + * ace/OS.h (class ACE_Errno_Guard): Propagate the return value of + the assignment operator to allow chaining. Thanks to Jeff for + reporting this. + + * ace/OS.i: Fixed a bizzarre problem with lower-case ace_os::. + Thanks to Andy for pointing this out. + + * ace/Svc_Conf.y: Don't enable YYDEBUG by default so that we can + save some space in the generated code. + + * ace/OS: Added several more uses of ACE_Errno_Guard, which has + been enhanced to support assignment. Thanks to Irfan for + suggesting this. + + * tests/Svc_Handler_Test.cpp: Added a simple test for the new + buffering feature in ACE_Svc_Handler. + + * ace/Strategies.cpp: Added an explicit template instantiation for + ACE_Message_Queue_Iterator since this is now + used in ACE_Svc_Handler. + + * ace/Svc_Handler: Added a "buffering" feature to the + ACE_Svc_Handler. This feature makes it possible to queue up + ACE_Message_Blocks in an ACE_Message_Queue until (1) the queue + is "full" or (2) a period of time elapses, at which point the + queue is "flushed" via sendv_n() to the peer. + +Wed Jun 9 12:23:30 1999 Jeff Parsons + + * tests/version_tests/version_tests.dsw: + * tests/run_tests.bat: + * tests/run_tests.psosim: + * tests/run_tests.vxworks: + Added Svc_Handler_Test to these. + + * tests/tests.dsw: + Added Svc_Handler_Test.dsp (created and checked in by + Nanbor) to the workspace. + +Wed Jun 9 10:46:07 1999 Carlos O'Ryan + + * ace/Strategies.cpp: + Moved template instantiations to ace/Service_Types.cpp + + * ace/Service_Types.cpp: + Added missing template instantiations for + ACE_Message_Queue_Iterator<> + + * ace/Svc_Handler.cpp (flush): + Removed extra characters and the end of a #endif + Fixed warning about unused variable + Use right iterator for the Message_Queue + +Wed Jun 09 10:11:29 1999 David L. Levine + + * ace/config-g++-common.h: added #define of + ACE_NEW_THROWS_EXCEPTIONS, with egcs if ACE_HAS_EXCEPTIONS is + #defined. That allows ACE's New_Fail_Test to pass. Thanks + to Jake Hamby for providing the fix. + +Tue Jun 8 22:44:18 1999 Douglas C. Schmidt + + * Hacked BYACC to generate a parser that doesn't have any + incorrect const char *'s. This clears the last major const + issue in libACE. + +Tue Jun 8 20:46:05 1999 Matthew J Braun + + * ace/Functor.i,h: Migrated ACE_Hash template specializations + from native types to ACE types (ACE_UINT16, etc). This was + necessary since native types are not portable. + +Tue Jun 8 15:47:06 1999 Douglas C. Schmidt + + * ace: Updated most of the places in ACE that can benefit from the + new ACE_Errno_Guard class. + + * ace/OS.h: Added a new ACE_Errno_Guard class that improves + performance when thread-specific errno must be saved/restored in + a block of code. Thanks to Serge Kolgan for + motivating this and to Rick Weisner + for explaining the technique to Serge. + + * ace/Env_Value_T.h: Added a new ACE_Convert() function that works + for const char *'s. Thanks to David for reporting this. + +Tue Jun 08 18:08:41 1999 Steve Huston + + * ace/OS.h: Added new overridable macro, ACE_LOCALHOST. This allows + overriding of the string used to do a loopback IP socket to the + local host. Some systems (e.g. PharLap ETS) don't have a host table + out of the box, and require an IP address string. + + * ace/Pipe.cpp: Use the new ACE_LOCALHOST macro instead of a hard + "localhost" when using a socket to emulate a pipe. Thanks to + Bruce Trask for working to get this + ironed out for PharLap ETS. + + * README: Added Bruce Trask to the Hall of Fame ;-) + + * tests/SOCK_Connector_Test.cpp: Check for failed host lookup + before trying to connect. Changed the way sethostent is done on + AIX 4.3 to work around an apparent bug in AIX 4.3. + +Tue Jun 08 13:46:38 1999 Nanbor Wang + + * ace/OS.h (wmain): Added a new macro to tweak the wchat_t version + of main program entry point to create the non-static + Object_Manager. This is only enabled if UNICODE and ACE_WIN32 + is defined (although you can also use wmain under non-UNICODE + environment). + +Mon Jun 07 14:34:53 1999 Nanbor Wang + + * ace/CORBA_macros.h: The member function for dumping + TAO_Exception is changed to _tao_print_exception. + +Tue Jun 08 14:44:07 1999 David L. Levine + + * tests/Thread_Manager_Test.cpp (main): on Sun only, added 5 + second sleep before the "main thread finished" printout. It + might help (but certainly doesn't prevent) avoid an occasional + thread lib panic on SunOS 5.5 through 5.7. + +Tue Jun 08 14:01:51 1999 David L. Levine + + * ACE version 4.6.41 released. + +Tue Jun 8 12:42:56 1999 Douglas C. Schmidt + + * Fixed lots of brokens URL links. Thanks to Eric S Rosenthal + for reporting these. + +Mon Jun 7 17:09:56 1999 Douglas C. Schmidt + + * examples/Naming/test_multiple_contexts.cpp (main): Added a cast + to resolve const problems. Thanks to David for reporting this. + + * examples/Naming/test_writers.cpp (main): Fixed a typo. Thanks + to David for reporting this. + +Mon Jun 7 14:21:48 1999 Kirthika Parameswaran + + * tests/DLL_Test.cpp (main): ANSI C++ spec doesnt allow void * to + be typecasted to a function_pointer. Hence made changes to + remove the warning due to this. Thanks to Nanbor + for pointing it out. + +Mon Jun 7 14:12:02 1999 Nanbor Wang + + * ACE-INSTALL.html: Added a general section explaining the order + of user defined macros and platform config file. Thanks to + Stephen E Blake for pointing + this out. + +Mon Jun 07 10:55:12 1999 David L. Levine + + * ace/config-osf1-4.0.h: added #define ACE_HAS_BROKEN_T_ERROR + to permit building again. Thanks to Doug for this fix. + +Mon Jun 7 12:35:17 1999 Douglas C. Schmidt + + * examples/Service_Configurator/IPC-tests/client: Fixed some more + warnings related to const-correctness. I believe that ACE is + now just about completely const-correct. + + * examples/Service_Configurator/Misc/main.cpp (main): Cast to + (ASYS_TCHAR **) rather than (ASYS_THCAR *[]). Thanks to David + for reporting this. + + * examples/IPC_SAP/DEV_SAP/writer/writer.cpp (main): Fixed a stray + comma. Thanks to David for reporting this. + + * tests/Hash_Map_Manager_Test.cpp: Changed the use of ASYS_TCHAR * + to LPCTSTR to ensure const-correctness. + + * netsvcs/lib: Reformatted all the *.h files to conform to the ACE + programming guidelines. + +Sun Jun 6 22:02:43 1999 Douglas C. Schmidt + + * ace/OS.i (t_error): Fixed the broken t_error() usage on SunOS + 5.5 and 5.6... + + * ace/README: Added a new macro called ACE_HAS_BROKEN_T_ERROR to + workaround the frigging broken prototype for t_error() on + Solaris 2.5. Note that this macro is required for SunOS 2.5 and + 2.6, but not SunOS 2.7 (thank goodness). + + * Fixed gazillions of incorrect usages of char * (which should + have been const char *) throughout ACE. + + * netsvcs/clients/Tokens: Fixed some const char * inconsistencies. + + * netsvcs/lib/Name_Handler.h: Fixed another inconsistent use of + char * that should have been const char *. + + * ace/Service_Config.h: Fixed a const incorrectness in the + ACE_Static_Svc_Descriptor. + + * ace/Process.h (ACE_Process_Options): The parameter type of + command_line() should be LPCTSTR argv[] *not* LPTSTR argv[]. + This fix should be ok as a further extension to what Carlos did + below. + +Sun Jun 06 20:33:00 1999 Carlos O'Ryan + + * ace/SString.h: + Added missing ACE_Export macro + +Sun Jun 6 20:34:40 1999 Carlos O'Ryan + + * ace/Synch.h: + * ace/Timer_Queue_T.h: + * ace/Timer_Queue.cpp: + * ace/Select_Reactor.cpp: + Moved explicit template instantiations around, now ACE compiles + and links with Sun/CC and inlining enabled. TAO does not. + +Sun Jun 6 18:05:48 1999 Carlos O'Ryan + + * ace/Process.h: + * ace/Process.cpp: + Added const-correct version of the command_line() method, in the + future we should remove the non-const version, but I don't feel + like breaking an interface today. + + +Sun Jun 06 09:08:48 1999 David L. Levine + + * PROBLEM-REPORT-FORM: added requests to not send + as attachment, or tar'red, compressed, and/or + uuencoded, or with line lengths >= 80 characters. + +Sun Jun 06 08:08:11 1999 David L. Levine + + * ace/Functor.{h,i} (ACE_Hash::operator ()): + conditionally compile only if ACE_SIZEOF_LONG is not 8, + to avoid conflict with ACE_HASH on 64-bit + platforms (alphas). + +Sat Jun 5 23:34:21 1999 Douglas C. Schmidt + + * ace/Containers_T: Changed all uses of "index" to "slot" to avoid + conflicts with broken C++ compilers that define macros named + "index." + +Sat Jun 5 22:57:31 1999 Carlos O'Ryan + + * ace/OS.h: + Added new macro (ACE_TEMPLATE_SPECIALIZATION) to handle the + differences between compilers supporting the standard way to + specialize a template (i.e. template<> class Foo) vs. the + old style (just saying class Foo). + Also added new macro ACE_HAS_STD_TEMPLATE_SPECIALIZATION that + platforms must define if they want the new style. + + * ace/Filecache.cpp: + * ace/Functor.h: + Use the new ACE_TEMPLATE_SPECIALIZATION macro + + * ace/config-sunos5.5.h: + Define the new ACE_HAS_STD_TEMPLATE_SPECIALIZATION for Sun/CC + 5.0 + + * ACE-INSTALL.html: + Added some notes about our success with Sun/CC 5.0 + +Sat Jun 5 16:48:47 1999 Carlos O'Ryan + + * ace/config-irix6.x-common.h + * ace/config-irix6.x-sgic++-nothreads.h + * ace/config-irix6.x-sgic++.h + * include/makeinclude/platform_irix6.x-sgic++.GNU + * include/makeinclude/platform_irix6.x_common.GNU + * include/makeinclude/platform_irix6.x_g++.GNU + * include/makeinclude/platform_irix6.x_kcc.GNU + * include/makeinclude/platform_irix6.x_sgic++.GNU: On IRIX 6.5 we + must not define ACE_LACKS_NETDB_REENTRANT_FUNCTIONS, thanks to + Bob Laferriere for pointing this out. + Created a new platform_*.GNU file that auto detects the IRIX + version (couldn't find a pre-processor macro to do it); also + renamed the platform_irix6.x-sgic++.GNU file to use underscore + instead of '-'; that way it is more consistent with the other + files. + +Sat Jun 5 13:29:07 1999 Douglas C. Schmidt + + * ace/Codeset_IBM1047: Minor reformatting to conform to ACE + programming guidelines. + +Sat Jun 5 13:00:46 1999 Carlos O'Ryan + + * ace/CDR_Stream.h: + * ace/CDR_Stream.i: + * ace/CDR_Stream.cpp: + New methods added to the InputCDR class to simplify the process + of reading a buffer from a socket or file. + +Fri Jun 4 23:52:19 1999 Carlos O'Ryan + + * ace/CDR_Stream.h: + * ace/CDR_Stream.i: + * ace/CDR_Stream.cpp: + Added support for codeset translators. + Many thanks to Jim Rogers for providing + these fixes. + + * ace/Makefile: + * ace/Codeset_IBM1047.h: + * ace/Codeset_IBM1047.cpp: + A pair of codeset translators between IBM1047 (aka EBCDIC) and + ISO8859-1 (aka ISO-Latin-1) + + * ace/config-mvs.h: + Define an ACE_MVS macro + +Fri Jun 4 15:23:18 1999 Kirthika Parameswaran + + * ace/Cached_Connect_Strategy_T.{h,i,cpp}: Removed common code by + making Cached_Connect_Strategy_Ex derive from + Cached_Connect_Strategy class. + +Fri Jun 04 09:59:58 1999 Irfan Pyarali + + * docs/tutorials/tutorials.dsw: Fixed "_" to "-". Thanks to Tom + Bradley for pointing + out this problem. + +Fri Jun 4 09:02:35 1999 Aniruddha Gokhale + + * ace/POSIX_Asynch_IO.cpp: Fixed a syntax error. There were two + consecutive commas in the ACE_DEBUG statement which were causing + syntax errors while compiling. + +Fri Jun 4 00:28:07 1999 Alexander Babu Arulanthu + + * ace/POSIX_Asynch_IO.cpp: Fixed the Linux egcs warning. + +Thu Jun 3 17:05:36 1999 Kirthika Parameswaran + + * ace/Cached_Connect_Strategy_T.h + * ace/Cached_Connect_Strategy_T.i + * ace/Cached_Connect_Strategy_T.cpp + + Caching connection strategy used by the Strategy Connector. + + * ace/Cache_Map_Manager_T.h + * ace/Cache_Map_Manager_T.i + * ace/Cache_Map_Manager_T.cpp + + Map Manager which performs caching depending on the caching + strategy used. + + * ace/Hash_Cache_Map_Manager_T.h + * ace/Hash_Cache_Map_Manager_T.i + * ace/Hash_Cache_Map_Manager_T.cpp + + Hash_Map used as a specialised form of the Cache Map. + + * ace/Caching_Strategies_T.h + * ace/Caching_Strategies_T.i + * ace/Caching_Strategies_T.cpp + + Strategies used for caching purposes, example: Least Recently + Used. + + * ace/Caching_Strategy_Utility_T.h + * ace/Caching_Strategy_Utility_T.i + * ace/Caching_Strategy_Utility_T.cpp + + Helper class for the caching strategy classes which does the + purging of entries. + + * ace/Cleanup_Strategies_T.h + * ace/Cleanup_Strategies_T.i + * ace/Cleanup_Strategies_T.cpp + + Strategy which deals with destruction and cleanup in general. + + * ace/Makefile + + Added the above under the TEMPLATE_FILES. + + * examples/Web_Crawler/Optimal_Cache_Map_Manager_T.h + * examples/Web_Crawler/Optimal_Cache_Map_Manager_T.i + * examples/Web_Crawler/Optimal_Cache_Map_Manager_T.cpp + * examples/Web_Crawler/Cached_Connect_Strategy_T.h + * examples/Web_Crawler/Cached_Connect_Strategy_T.i + * examples/Web_Crawler/Cached_Connect_Strategy_T.cpp + * examples/Web_Crawler/Caching_Strategies_T.h + * examples/Web_Crawler/Caching_Strategies_T.i + * examples/Web_Crawler/Caching_Strategies_T.cpp + + Removed these files and added them to the ace library itself. + + * examples/Web_Crawler/Command_Processor.cpp + * examples/Web_Crawler/Command_Processor.h + * examples/Web_Crawler/HTTP_URL.cpp + * examples/Web_Crawler/HTTP_URL.h + * examples/Web_Crawler/Iterators.h + * examples/Web_Crawler/Makefile + * examples/Web_Crawler/Mem_Map_Stream.cpp + * examples/Web_Crawler/Mem_Map_Stream.h + * examples/Web_Crawler/Options.h + * examples/Web_Crawler/URL.h + * examples/Web_Crawler/URL_Addr.h + * examples/Web_Crawler/URL_Status.h + * examples/Web_Crawler/URL_Visitor.cpp + * examples/Web_Crawler/URL_Visitor.h + * examples/Web_Crawler/URL_Visitor_Factory.h + * examples/Web_Crawler/Web_Crawler.h + * examples/Web_Crawler/main.cpp + + Changed to include files pertaining to Caching and Connection + management from ace library. + +Thu Jun 03 15:57:43 1999 Irfan Pyarali + + * ace/Strategies_T (ACE_Cached_Connect_Strategy): Allowed the user + to pass in a mutex. This allows the user to pass in a + preconfigured mutex of his/her liking. Since the parameters + default appropriately, no existing code should break. + + * ace/Functor: Changed ACE_Hash specialization + to ACE_Hash. + +Thu Jun 3 10:36:35 Matthew J Braun + + * ace/Functor.i + * ace/Functor.h: + Added ACE_Hash . It truncates the ULongLong + to a ULong and returns it. Nothing major... + +Wed Jun 2 17:50:23 1999 Carlos O'Ryan + + * include/makeinclude/platform_mvs.GNU: + Debugging info was not generated on the C++ files. + The -+ flag should be added to CPPFLAGS using += + Thanks to Jim Rogers for these fixes. + +Wed Jun 02 16:11:34 1999 Nanbor Wang + + * ace/TTY_IO.cpp (control): Commented out odd baud rates (56000, + 128000, 256000) which don't seem to be supported on FreeBSD. + +Wed Jun 02 00:07:44 1999 + + * tao/test_cancel.dsp + * tao/post_completions. + * tao/test_end_event_lo + * tao/test_multiple_loo + * tao/test_proactor.dsp + * tao/test_proactor.dsw + * tao/test_timeout.dsp + + * examples/Reactor/Proactor/test_cancel.cpp: + * examples/Reactor/Proactor/README: + * examples/Reactor/Proactor/Makefile: + + Related to ChangeLog : Tue Jun 1 16:48:58 1999 Alexander Babu + Arulanthu + +Tue Jun 1 21:44:05 1999 Carlos O'Ryan + + * include/makeinclude/platform_linux_lxpthread.GNU: + Added the rt library to the command line, ACE uses aynchronous + I/O by default on linux. + +Tue Jun 1 16:48:58 1999 Alexander Babu Arulanthu + + Ported to POSIX platforms based + on API. Made the return values consistent in both + WIN32 and POSIX platforms as follows. + + All completion notifications for the I/O operations will occur + normally. + + = Return Values: + + -1 : Operation failed. (can get only in POSIX). + 0 : All the operations were cancelled. + 1 : All the operations were already finished in this + handle. Unable to cancel them. + 2 : Atleast one of the requested operations cannot be + cancelled. + + * ace/Asynch_IO.cpp + * ace/Asynch_IO.h + * ace/POSIX_Asynch_IO.cpp + * ace/POSIX_Asynch_IO.h + * ace/POSIX_Proactor.h + * ace/WIN32_Asynch_IO.cpp: + * ace/POSIX_Proactor.cpp: + + * ace/config-linux-lxpthreads.h: Enabled the ACE_HAS_AIO_CALLS + flag for this platform. + + +Tue Jun 1 15:02:34 1999 Carlos O'Ryan + + * ace/Connector.h: + Documented the new connect() method + +Tue Jun 01 11:18:03 1999 + + * examples/Reactor/Proactor/test_end_event_loop.cpp: + * tao/post_completions.cpp + * tao/test_end_event_loop.cpp + * tao/test_end_event_loop.dsp + * tao/test_proactor.dsw + Fixed the link problems. + +Tue Jun 1 09:57:42 1999 Douglas C. Schmidt + + * ace/TTY_IO.cpp (control), + * ace/config-freebsd.h, + ace/config-freebsd-pthread.h: Attached is a patch that will + allow the ACE_TTY_IO class to work with FreeBSD tty devices. + Thanks to John Aughey for contributing these. + + * ACE-INSTALL.html: Updated the list of platforms that ACE is + supported on. + +Tue Jun 01 10:00:29 1999 David L. Levine + + * ACE-INSTALL.html: updated Sun C++ and DU versions in fully + supported platforms list. + +Mon May 31 22:45:18 1999 David L. Levine + + * ace/config-lynxos.h: added ACE_HAS_GPERF. + +Mon May 31 16:28:27 1999 Jeff Parsons + + * ace/CDR_Stream.h: + Added and updated some comments. + +Mon May 31 16:13:21 1999 David L. Levine + + * ace/Makefile: if ACE_COMPONENTS is equal to FOR_TAO, + override it with the proper component values. The + override allows it to be set on the command line, e.g., + make ACE_COMPONENTS=FOR_TAO. Thanks to Carlos for + reporting this. + +Mon May 31 14:00:21 1999 Steve Huston + + * ace/RB_Tree.i: Reverted changes from May 21. It broke the LynxOS + build of tests/RB_Tree_Test. + +Mon May 31 11:51:03 1999 Douglas C. Schmidt + + * ace/CORBA_Handler.h: Updated the comments to clarify how to use + this class. Thanks to Ram Vishnuvajjala + for motivating this. + + * ace/Service_Config: Added a static variable called is_initialized + that keeps track of whether the is already + initialized. If it is, we can't allow to be called + since it's not reentrant... + +Sun May 30 14:08:48 1999 Ossama Othman + + * ace/Makefile: + * ace/Vector.{h,i,cpp}: + * tests/Makefile: + * tests/Vector_Test.cpp: Removed the ACE_Vector implementation + from the distribution. + +Sat May 29 14:14:37 1999 Ossama Othman + + * ace/Vector.{h,i,cpp}: Added STL Vector-style insert() and + erase() methods. Also added a new constructor that creates an + ACE_Vector from a specified range of iterators. ACE_Vector + class is now Purify clean (i.e. fixed any and all memory leaks). + + * tests/Vector_Test.cpp: Added tests for the newly added + ACE_Vector::insert() and ACE_Vector::erase() methods. + +Fri May 28 20:19:50 1999 Ossama Othman + + * ace/Vector.{h,i,cpp}, + tests/Vector_Test.cpp: Implemented an ACE_Vector class based on + the ACE_Array class. It is not derived from it, however. The + ACE_Vector class provides an STL Vector-like interface. The + Vector_Test tests the important features of the ACE_Vector class + and sends output to `logs/Vector_Test.log'. + + * ace/Makefile, + tests/Makefile: Added ACE_Vector related files to the makefiles + and updated the dependencies. + +Thu May 27 15:50:17 1999 Ossama Othman + + * ace/UNIX_Addr.cpp (set), Explicitly set the sun_family to + AF_UNIX, otherwise it will be zero by a previous call to + memset(). AF_UNSPEC, which is zero, is what the call to + memset() cause the sun_family to be. + +Wed May 26 01:46:27 1999 Nanbor Wang + + * include/makeinclude/platform_freebsd.GNU: + * include/makeinclude/platform_freebsd_pthread.GNU: Consolidated + platform macro files for FreeBSD. + + * ace/config-freebsd-pthread.h: + * ace/config-freebsd.h: Added ACE_HAS_NONCONST_SELECT_TIMEVAL. + +Tue May 25 21:38:40 1999 Carlos O'Ryan + + * ace/UNIX_Addr.cpp: The default constructor was not setting the + address family to AF_UNIX. Now that we do so we can let the OS + select a ephemeral UNIX domain endpoint for us. + +Tue May 25 19:20:15 1999 Steve Huston + + * tests/run_tests.(sh bat): Added SOCK_Send_Recv_Test. + +Tue May 25 16:54:41 1999 Jeff Parsons + + * tests/SOCK_Send_Recv_Test.cpp: + Fixed a signed/unsigned mismatch warning and + changed several uses of static_cast to + reinterpret_cast. This is a belated entry, I put it + first in TAO/ChangeLog by mistake. + +Tue May 25 15:19:06 1999 David L. Levine + + * include/makeinclude/platform_sunos5_ghs.GNU: added + -Xleaveg7 to CFLAGS with threads=1. It's necessary + to avoid execution problems in multithreaded programs. + Thanks to Stefaan Kiebooms for providing + this fix. + +Tue May 25 13:40:10 1999 Ossama Othman + + * ace/LSOCK_Acceptor.cpp (get_local_addr): + + Only the base class members of ACE_UNIX_Addr were being copied + since the assignment lacked a dynamic cast. Thanks to Carlos and + Irfan for clarifying this. + +Tue May 25 11:41:28 1999 Irfan Pyarali + + * ace/Timeprobe_T.h (class ACE_Timeprobe): Moved the default size + from Timeprobe_T.h to OS.h, where it can easily be redefined by + the user. + +Tue May 25 07:37:47 1999 David L. Levine + + * include/makeinclude/platform_osf1_4.0.GNU: removed suppression + of warning 839: no_corresponding_delete. + +Mon May 24 14:04:11 1999 Steve Huston + + * tests/SOCK_Send_Recv_Test.cpp: New test to exercise ACE_SOCK send + and receive variations. It concentrates on recvv/sendv-like things + now in order to shake out Winsock 1.1 issues. To be complete, it + should be added to over time. + + * tests/Makefile: + * tests/version_tests/{SOCK_Send_Recv_Test.dsp, version_tests.dsw}: + * tests/{SOCK_Send_Recv_Test.dsp, tests.dsw}: Add new test. + +Mon May 24 12:11:03 1999 Irfan Pyarali + + * ace/OS.i (ACE_SOCKCALL_RETURN): Fixed macro by comparing against + FAILVALUE rather than SOCKET_ERROR. Some winsock calls don't + return SOCKET_ERROR. Thanks to Christopher Kohlhoff + for reporting this problem. + +Sun May 23 11:33:07 1999 Alexander Babu Arulanthu + + Changes for the following enhancement in the Proactor + implementation. Enhanced the semantics of the , + so that when it is called, it wakes up all the threads blocked on + waiting for completions and end the event loop. Thanks to Edwin + D. Windes for reporting the issue. + + * ace/Proactor.h: + * ace/Proactor.cpp: Added static helper methods and states to post + the wakeup completions to the CompletionPort. + + * ace/Asynch_IO.h: + * ace/Asynch_IO.cpp: Added a method to the + ACE_Handler. + + * ace/Object_Manager.cpp + * ace/Object_Manager.h: Added a new Thread_Mutex called + to protect the thread count in + the event loop. + + * ace/POSIX_Asynch_IO.cpp + * ace/POSIX_Proactor.cpp + * ace/POSIX_Proactor.h + * ace/Proactor.cpp + * ace/Proactor.h + * ace/Proactor_Impl.h + * ace/WIN32_Proactor.cpp + * ace/WIN32_Proactor.h: + Changes for posting wakeup completions. + + * examples/Reactor/Proactor/test_end_event_loop.cpp: + * examples/Reactor/Proactor/test_end_event_loop.dsp: + * examples/Reactor/Proactor/post_completions.dsp: + * examples/Reactor/Proactor/Makefile: Test file the + enhancement. + +Sat May 22 16:57:38 1999 Carlos O'Ryan + + * ace/FlReactor.cpp: Sun/CC doesn't like reinterpret cast when + converting from an int into an int; this is silly, but I cannot + use static_cast because on NT reinterpret_cast is the right + thing. Use old-style casts for the moment. + + * tests/FlReactor_Test.cpp: Minor cosmetic fixes. + +Sat May 22 16:36:14 1999 Chris Gill + + * ACE version 4.6.40 released. + +Sat May 22 14:53:47 1999 David L. Levine + + * ace/Filecache.cpp: snagged another "template <>". Thanks to + Bala for reporting it. + +Sat May 22 07:30:44 1999 David L. Levine + + * ace/config-chorus.h,ace/config-lynxos.h: added + ACE_HAS_NONCONST_SELECT_TIMEVAL. + + * ace/Filecache.cpp: commented out "template<>" for now. Not all + compilers can cope with it. + +Fri May 21 21:12:37 1999 Irfan Pyarali + + * ace/Map_Manager.i (operator==): Since is a pointer + now, we must compare by value, rather than by address. + +Fri May 21 12:56:38 1999 David L. Levine + + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp: fixed to + build without threads: #ifdef ACE_MT_SAFE is insufficient. + Must also check if it is 0. + +Fri May 21 12:45:32 1999 Carlos O'Ryan + + * ace/Map_Manager.i: + Fixed minor error in previous commit. Thanks to Irfan for + helping out with this. + +Fri May 21 11:18:21 1999 Steve Huston + + * ace/config-hpux11.h: Added ACE_HAS_NONCONST_SELECT_TIMEVAL. + + * ace/RB_Tree.i: Fully template-qualified references to node_ and + tree_ in iterators; makes HP aC++ happy. + +Fri May 21 11:27:44 1999 Irfan Pyarali + + * ace/Map_Manager.h (class ACE_Map_Iterator_Base): Changed the + ACE_Map_Manager reference to a pointer. This way there is no + problem in reinitializing , and hence the compiler + will not have a problem in providing us a default assignment + operator. Thanks to Knut Johannessen for + pointing out this problem. + + * ace/Process: A nifty ACE::fork was added several months ago + which offers the option to avoid zombies, but it is not used in + ACE_Process::spawn. + + Mark L. Boriack provided patches which + adds an data member to ACE_Process_Options, + appropriate accessor functions, and changes the ACE_OS::fork + call to ACE::fork in ACE_Process::spawn, making use of the + option. The default behavior is left unchanged, i.e., you get + zombies. Thanks Mark. + +Fri May 21 10:34:10 1999 David L. Levine + + * ace/gethrtime.cpp,Makefile (gethrtime on Green + Hills/VxWorks): reverted to building gethrtime.cpp with g++, because + the ghs assembly code didn't work properly. + +Fri May 21 10:10:13 1999 Ossama Othman + + * ACE-INSTALL.html: Updated information about building egcs' C++ + shared libraries with an example, and emphasized the fact that + the `--enable-shared' configuration option is not an egcs + run-time option. Thanks to Wallace Owen for + motivating this. + +Fri May 21 09:15:08 1999 Carlos O'Ryan + + * ace/config-sunos5.5.h: + Added ACE_HAS_NONCONST_SELECT_TIMEVAL here too + +Fri May 21 07:53:58 1999 Steve Huston + + * ace/config-vxworks5.x.h, config-osf1-4.0.h: Added + ACE_HAS_NONCONST_SELECT_TIMEVAL. + +Thu May 20 18:01:24 1999 Steve Huston + + * ace/Filecache.cpp: Added "template<>" to specializations. + + * ace/OS.i (ACE_OS::select, ACE_OS::sleep): Removed implicit + dependency on binary object layout with regard to using an + ACE_Time_Value object as a struct timeval; use the timeval* + operator instead. On platforms with ACE_HAS_NONCONST_SELECT_TIMEVAL + don't just cast away const-ness of the ACE_Time_Value - modification + of the timeval by select() is not consistent, and Linux is not the + only one that modifies it (Solaris 7 does also, as well as AIX and + possibly HP; Solaris 2.5/6 don't specify). So, play it safe. + Inlining and optimization should prevent this from having any + affect on performance. + + * ace/config-sunos5.5.h, config-hpux-10.x.h, config-aix-4.x.h: + Added #define ACE_HAS_NONCONST_SELECT_TIMEVAL. + +Thu May 20 17:47:35 1999 Irfan Pyarali + + * ace/OS.h (ACE_DES_ARRAY_FREE_*): Added new macros to facilitate + proper destruction of arrays. + + * ace/Containers_T.cpp (ACE_Array_Base): Changed ACE_Array_Base to + use the new ACE_DES_ARRAY_FREE_* macros in order to prevent the + memory leaks. + +Thu May 20 17:46:02 1999 Nanbor Wang + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Fixed Alpha configurations. Thanks to + Christian Schuderer for + reporting this. + +Thu May 20 15:35:23 1999 Carlos O'Ryan + + * tests/TkReactor_Test.cpp: + It was not compiling if ACE_HAS_TK was not defined. + +Thu May 20 15:33:21 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: + added (and default to) LIBS for Green Hills 1.8.9. + +Thu May 20 14:34:59 1999 David L. Levine + + * ace/config-sunos5.5.h: with Green Hills only, added + ACE_LACKS_ACE_IOSTREAM. ACE's IOStream_Test never halts + when built with Green Hills 1.8.9. + +Thu May 20 14:21:44 1999 David L. Levine + + * ace/OS.i: (t_getname): fixed comment after #endif, to + agree with the #ifdef. + +Thu May 20 13:51:20 1999 Nanbor Wang + + * ace/config-win32-common.h: I forgot to put '/**/' between + #include and which caused MSVC to generate warnings + when checking file dependencies. Thanks to Christian Schuderer + for reporting this. + +Thu May 20 13:52:04 1999 David L. Levine + + * ace/config-sunos5.5.h: build with threads if + _POSIX_C_SOURCE >= 199506L or #ifdef _POSIX_PTHREAD_SEMANTICS. + Added #define ACE_LACKS_RWLOCK_T if _POSIX_PTHREAD_SEMANTICS + is #defined (and therefore ACE_HAS_STHREADS is not #defined). + The rwlock functions are a Solaris threads interface, and + are not POSIX. + + * include/makeinclude/platform_sunos5_ghs.GNU: default to + building without threads support, because Green Hills 1.8.9 + is incompatible with the SunOS threads libraries. + +Thu May 20 12:12:01 1999 David L. Levine + + * ace/OS.{h,cpp},Sched_Params.cpp: with ACE_HAS_PRIOCNTL, + moved #include of sys/{rt,ts}priocntl.h from OS.cpp and + Sched_Params.cpp to OS.h, so that USYNC_THREAD and USYNC_PROCESS + #defines can be protected effectively. + +Thu May 20 11:19:45 1999 Joe Hoffert + + * ace/ATM_Addr.cpp: Added ACE_UNUSED_ARG for selector parameter + when appropriate. + +Thu May 20 09:57:57 1999 Bill Rizzi + + * ace/Log_Msg.{h,cpp},examples/Log_Msg/test_log_msg.cpp + (priority_mask): added optional support for process priority + mask, in addition to the (now default) thread priority mask. + +Thu May 20 09:42:54 1999 David L. Levine + + * ace/OS.h (fcntl): changed type of last argument from int to + long, to permit safer casting from pointer types. + + * ace/OS.i (flock_*): use ACE_OS::fcntl instead of ::fcntl. + + * ace/OS.cpp (ftruncate): use ACE_OS::fcntl instead of ::fcntl. + + Thanks to an anonymous ACE user for reporting that + these functions weren't using ACE_OS::fcntl. + +Wed May 19 23:50:18 1999 Nagarajan Surendran + + * ace/TkReactor.{h,cpp}: + * ace/Makefile: + Added a new reactor implementation based on the Tcl/Tk Event + loop and event handling mechanism. + + * ace/tests/TkReactor_Test.{cpp,tcl}: + * ace/tests/Makefile: + The Tk Reactor test and the tcl script for the GUI. This is + similar to the XtReactor_Test. + + * ace/include/makeinclude/wrapper_macros.GNU: + * ace/include/makeinclude/platform_sunos5_sunc++.GNU + Added changes to Makefile flags for XtReactor. + +Wed May 19 21:56:49 1999 David L. Levine + + * ace/Message_Queue.h: fixed typo in comment: interrupt. + +Wed May 19 21:34:29 1999 David L. Levine + + * include/makeinclude/platform_osf1_4.0.GNU: removed these + warning suppressions: + 174: expr_has_no_effect + 610: nonoverriding_function_decl + They're certainly not needed with cxx 6.2-020, and + hopefully not needed with earlier versions. + +Wed May 19 10:52:15 1999 Irfan Pyarali + + * examples/DLL/test_dll.cpp (main): Fixed auto pointer use. It + was causing "Temporary used for non-const reference" warnings. + +Wed May 19 10:04:54 1999 Jeff Parsons + + * ace/SString.i: + Changed the default constructor to set rep_ to the + empty string instead of the null string. Thanks to + Knut Johannessen for pointing + this out. + +Wed May 19 06:34:58 1999 David L. Levine + + * ace/config-minimal.h: added #define ACE_USE_THREAD_MANAGER_ADAPTER, + so that ACE_Thread_Exit isn't needed in the ACE_OS layer. + +Tue May 18 22:03:49 1999 David L. Levine + + * include/makeinclude/platform_osf1_4.0.GNU,platform_osf1_cxx.GNU: + removed suppression of warning 9 (nested comment not allowed) on + Digital Unix 5.0 and later. + +Tue May 18 15:01:39 1999 Steve Huston + + * ace/ACE.cpp: Added #include "ace/SString.h" to catch def for + ACE_Tokenizer in Winsock 1.1 mode. + +Tue May 18 13:30:55 1999 Nanbor Wang + + * include/makeinclude/rules.nested.GNU: FOR is not an excutable on + Win32, therefore, we must bring in the command processor in to + use FOR. Thanks to David Hooker for + reporting the bug. + +Tue May 18 11:46:55 1999 Douglas C. Schmidt + + * ace/FILE_Connector.h: Changed the default perms from 0 to + ACE_DEFAULT_FILE_PERMS. + +Tue May 18 11:28:32 1999 Joe Hoffert + + * examples/IPC_SAP/TLI_SAP/CPP-ATM-server.cpp: forced + ACE_TLI_Stream's recv method to call ACE_OS::t_rcv rather than + ACE_OS::read to be compatible with XTI. + +Tue May 18 11:00:15 1999 Douglas C. Schmidt + + * ace/Task_T: Moved the ACE_Buffered_Task logic out of the Task + abstraction since it doesn't belong there. + + * ace/Makefile: Regenerated the dependencies. + + * ace/FlReactor.cpp: We should be including rather than + "FL/Fl.h". + +Tue May 18 10:42:47 1999 David L. Levine + + * include/makeinclude/platform_osf1_4.0.GNU: removed + suppression of warning 1180, statement causes unreachable + return, because it's no longer necessary. + +Tue May 18 10:38:53 1999 David L. Levine + + * tests/Thread_Manager_Test.cpp: replaced Hash_Map_Manager + with a simple array. This avoids dynamic allocation in + the signal handler. And, it avoids having to specialize + ACE_Hash on platforms that have a pthread_t + struct. + +Tue May 18 09:33:46 1999 Douglas C. Schmidt + + * ace/FILE_IO: Added new sendv()/recvv() and sendv_n()/recvv_n() + methods to be consistent with SOCK_IO and SOCK_Stream. + + * ace/SOCK_IO.cpp (recvv): Make sure to 0-out the iov_base so that + it's always ok to delete it, even if any of the internal + operations fail! + +Tue May 18 10:14:47 1999 Carlos O'Ryan + + * ace/Makefile: + * ace/FlReactor.h: + * ace/FlReactor.i: + * ace/FlReactor.cpp: + * include/makeinclude/platform_linux_lxpthread.GNU: + * include/makeinclude/wrapper_macros.GNU: + * tests/Makefile: + * tests/FlReactor_Test.cpp: + Added new reactor implementation based on the event loop of the + Fast-Light toolkit, similar to the XtReactor. + FLTK is a GUI toolkit that works on UNIX/X-Windows and on Win32, + it is integrated to OpenGL and is pure C++. + Check http://fltk.easysw.org for more details. + +Tue May 18 09:35:00 1999 David L. Levine + + * tests/Thread_Manager_Test.{h,cpp},Makefile: + removed Thread_Manager_Test.h. + +Mon May 17 22:39:06 1999 David L. Levine + + * tests/Thread_Manager_Test.cpp: added a couple more + explicit template instantiations. Thanks to Carlos + for reporting that they're needed on Irix. And, + added an ACE_Hash specialization to + keep DU cxx happy. + +Mon May 17 16:31:16 1999 Douglas C. Schmidt + + * ace/Task_T.cpp, + ace/OS.h: Removed ACE_DEFAULT_WRITEV_MAX and replaced it + with IOV_MAX. + +Mon May 17 15:49:48 1999 David L. Levine + + * config-dgux-4.x-ghs.h,config-vxworks5.x.h,config-ghs-common.h: + factored ACE_LACKS_SIGNED_CHAR to config-ghs-common.h. + + * config-dgux-4.x-ghs.h: removed ACE_LACKS_ACE_IOSTREAM. + It should work now, though we don't have that platform + to verify it. + +Mon May 17 15:08:45 1999 Carlos O'Ryan + + * ace/CORBA_macros.h: + Fixed implementation of the ACE_READ_GUARD_THROW_EX and + ACE_WRITE_GUARD_THROW_EX macros. + +Mon May 17 15:12:54 1999 David L. Levine + + * test/Thread_Manager_Test.cpp: use a hash map, instead of + TSS, to store each thread's indication of whether it has + been signalled. That way, the signal handler doesn't have + to access TSS. Increased the delay from 1 to 2 seconds after + the signal test, which also seems to help avoid thread lib + panics on Solaris. + +Mon May 17 14:02:01 1999 David L. Levine + + * tests/Conn_Test.cpp (handler): added comment saying that even + the ACE_OS::exit () call isn't safe. + +Mon May 17 10:31:04 1999 Nanbor Wang + + * ace/Service_Repository.cpp (find_i): A missing pointer check was + causing the remove method to segfault. Thanks to Tom Arbuckle + for pointing this out. + +Mon May 17 10:21:29 1999 David L. Levine + + * tests/TSS_Test.cpp: removed the signal handler. It + wasn't used for the test, and contained an ACE_DEBUG. + +Mon May 17 10:12:45 1999 David L. Levine + + * ace/config-chorus.h,config-dgux-4.x-ghs.h,config-sunos5.5.h, + config-vxworks5.x.h,config-ghs-common.h: + factored out Green Hill-specific #defines to config-ghs-common.h. + +Mon May 17 09:07:41 1999 David L. Levine + + * tests/Conn_Test.cpp (handler): commented out unused arg + "signum". + +Sun May 16 20:38:58 1999 Nanbor Wang + + * ace/CDR_Stream.{h,i} (current): Added this accesor function for + Flick IDL compiler. Thanks to Tim Stack for + recommending this. + +Sun May 16 20:08:41 1999 David L. Levine + + * tests/Thread_Manager_Test.cpp (handler,worker): + moved ACE_DEBUG out of signal handler. It was + causing occasional lockups on SunOS. Signal + handlers must never do anything that could cause + a lock to be acquired. + + * tests/Conn_Test.cpp (handler): removed ACE_DEBUG. + +Sun May 16 20:04:09 1999 David L. Levine + + * ace/OS.h: moved #include of ace/Trace.h to before #include of + ace/OS.i. + + * ace/OS.{i,cpp}: enabled ACE_TRACE for most functions (except + those that are used by ACE_TRACE). + +Sun May 16 19:54:10 1999 Alexander Babu Arulanthu + + * ace/config-sunos5.7.h: Comments + * ace/config-sunos5.6.h: Comments + + * ace/POSIX_Asynch_IO.cpp: + * ace/POSIX_Proactor.h: + * ace/POSIX_Proactor.cpp: - Using ACE_dynamic_cast to get + from gives build errors on + egcs. is not the correct solution for + this. Solved this problem by having one more list of + so that we dont have to do any + casting. + * ace/Proactor.cpp (ACE_Proactor): Indentation. + * examples/Reactor/Proactor/post_completions.cpp: Added template + pragma's. + +Sun May 16 18:35:59 1999 Douglas C. Schmidt + + * ACE version 4.6.39 released. + +Sun May 16 12:34:48 1999 David L. Levine + + * ace/Log_Msg.cpp (ACE_Log_Msg_Manager::lock_): changed + the lock type from ACE_Thread_Mutex to + ACE_Recursive_Thread_Mutex. This allows ACE_Log_Msg's + methods to be called after calling ACE_Log_Msg::acquire (), + without deadlock. Thanks to Bill Rizzi + for suggesting this. + +Sat May 15 08:30:43 1999 David L. Levine + + * ace/Containers.h: added #include of ace/Malloc_Base.h. + It's needed for the definition of ACE_Allocator when + instantiating container classes. + +Sat May 15 03:32:02 1999 Nanbor Wang + + * ace/CDR_Stream.h: Added #include of ace/SString.h. + +Fri May 14 23:05:32 1999 David L. Levine + + * ace/Log_Record.h: removed unnecessary #include of ace/SString.h. + +Fri May 14 21:11:46 1999 Carlos O'Ryan + + * ace/Task_T.h: + * ace/Task_T.cpp: + Fixed syntax errors in ACE_Buffered_Task + +Fri May 14 21:03:30 1999 Carlos O'Ryan + + * netsvcs/lib/Log_Message_Receiver.cpp: + Changed ACE_Guard instantiations with ACE_GUARD() macros to + avoid some warnings with egcs, similar to the problem that David + had with Message_Queue_T.cpp + +Fri May 14 19:31:04 1999 Ossama Othman + + * ace/Message_Block.cpp (total_size): + + Corrected warning caused by assignment to non-const from const. + + * ace/Message_Queue_T.cpp (close): + + Temporary variable wasn't declared. + + * ace/Message_Queue_T.cpp (remove_messages): + + Removed unused variable. + +Fri May 14 19:16:06 1999 Ossama Othman + + * ace/Task_T.cpp (put, flush): + + Corrected syntax errors where return type was placed before + template keyword. + +Fri May 14 16:46:42 1999 Douglas C. Schmidt + + * ace/Task_T: Added a new class called ACE_Buffered_Task that + buffers up its ACE_Message_Blocks until (1) the buffer is full + or (2) a timeout elapses, at which point the buffers are written + out using some type of writev()-like mechanism. + + * ace/OS.h: Added a new macro called ACE_DEFAULT_WRITEV_MAX, which + defaults to the maximum value that writev() can have. + + * ace/Message_Block.cpp: Added a new method called total_size() + that returns the total number of bytes in a composite + Message_Block (i.e., a Message_Block that has a chain of + Message_Blocks). + + * ace/Message_Queue_T.cpp: Reimplemented all the hand-coded loops + to use the new ACE_Message_Block::total_size() method. + +Fri May 14 16:17:27 1999 Nanbor Wang + + * ace/Synch.h (ACE_Null_Mutex>): Conditionally compiles ~ACE_Guard() + destructor. Win32 needs this definition. + +Fri May 14 16:10:29 1999 David L. Levine + + * ace/Message_Queue_T.cpp: replaced raw ACE_Read_Guards + with ACE_READ_GUARD_RETURN macros. That avoids a compiler + warning (egcs 1.1.1/SunOS 5.7) now that the ACE_Guard + destructor has been removed. Thanks to Irfan and Carlos + for suggesting this fix. + +Fri May 14 15:35:50 1999 Irfan Pyarali + + * ace/ACE.cpp (clr_flags and set_flags): We should use ioctl() + calls to implement on vxworks this rather than fcntl(). Thanks + to Joseph A. Condlin for reporting this. + +Fri May 14 13:15:02 1999 Joe Hoffert + + * examples/IPC_SAP/TLI_SAP/Makefile: Took out FORE specific + information. Somehow my local changes got checked in - this is + to undo that. + +Fri May 14 12:58:02 1999 Joe Hoffert + + * ace/ATM_Addr.h: + * ace/ATM_Addr.i: + * ace/ATM_Addr.cpp: Added accessor methods for the selector byte + of an ATM address. + + * examples/IPC_SAP/TLI_SAP/CPP-ATM-client.cpp: + * examples/IPC_SAP/TLI_SAP/CPP-ATM-server.cpp: Modify example code + to have the user optionally specify the selector byte. + +Fri May 14 12:47:38 1999 David L. Levine + + * ace/Addr.cpp,ace/Synch_Options.cpp: added comments about + the static objects. + +Fri May 14 11:36:05 1999 Carlos O'Ryan + + * ace/SString.h: + * ace/SString.i: Added new class to auto destroy dynamically + allocated strings, sort of a mixing between auto_ptr and + CString. Auto_Ptr_Array was not useful because we need to free + using ACE_OS::free() (and in the future allocators). + +Fri May 14 10:37:49 1999 Douglas C. Schmidt + + * ace/OS.i: Fixed a deadlock in cond_timedwait()/cond_broadcast(). + Thanks to Brian C. Olson for reporting + this. + + * ace/Synch.h (ACE_Null_Mutex>): Commented out the ~ACE_Guard() + destructor to prevent segfaults on certain versions of SunC++. + Thanks to Russ Noseworthy for reporting this bizarre bug! + +Fri May 14 09:51:55 1999 Carlos O'Ryan + + * ace/Message_Block.h: + * ace/Message_Block.cpp: + Modified default constructor and constructor taking a Data_Block + to also take an Allocator. + +Fri May 14 09:14:55 1999 David L. Levine + + * include/makeinclude/platform_osf1_cxx.GNU: + added $(ACELIB) to SOFLAGS for DU 5.x. It should + have been there all along. + +Thu May 13 17:27:14 1999 Nanbor Wang + + * netsvcs/servers/svc.conf: + * netsvcs/clients/Naming/Client/svc2.conf: + * netsvcs/clients/Naming/Client/svc2.conf: Removed relative paths + from all DLL's. They were hard-coded which was not portable. + ACE should figure out the correct path automatically. + + * netsvcs/lib/Name_Handler.cpp: Replaced several calls to + ACE_WString::rep with ACE_WString::fast_rep to avoid memory + leaks. Thanks to Valery Arkhangorodsky + for reporting this. + + * ace/Registry.cpp (close): Only close when we do own a + key. + + * netsvcs/lib/Name_Handler.cpp (resolve): The atype string needs + to be delete[]'ed once we are done with it. Thanks to Valery + Arkhangorodsky for pointing this out. + +Thu May 13 09:39:17 1999 David L. Levine + + * tests/Makefile: added Tokens_Test to BIN2 if Tokens component + is not configured in. This ensures that Tokens_Test gets + cleaned up, even if the ace directory was realcleaned first + (and ACE_BUILD_COMPONENTS is therefore empty). + +Thu May 13 07:24:41 1999 David L. Levine + + * ace/POSIX_Proactor.cpp (handle_events): replaced + incorrect dynamic_cast with a reinterpret cast. + +Wed May 12 17:42:09 1999 Carlos O'Ryan + + * ace/Message_Block.h: + * ace/Message_Block.cpp: + The message blocks can be obtained from an allocator now. Thanks + to John Aughey for this cool feature. + +Wed May 12 16:24:17 1999 Alexander Babu Arulanthu + + * examples/Reactor/Proactor/Makefile: + * examples/Reactor/Proactor/test_proactor.cpp: + * ace/POSIX_Proactor.cpp: + * ace/POSIX_Proactor.h: + * ace/Proactor.cpp : + * ace/POSIX_Asynch_IO.cpp: Fixed the problem with terminating the + Timer thread. Also, fixed the places where conversion between + void * and ACE_POSIX_Asynch_Result. Used ACE_reinterpret_cast at + these places. + +Wed May 12 12:14:09 1999 Ossama Othman + + * COPYING: Additional updates/clarifications suggested by Richard + Stallman. + +Wed May 12 00:25:57 1999 Nanbor Wang + + * ace/Thread_Manager.h (ACE_Thread_Manager): Added clarification + for the semantics differences among wait(), wait_grp() and + wait_task(). + +Tue May 11 18:11:51 1999 James C. Hu + + * ace/config-sunos5.7.h: SunOS 5.7 (aka Solaris 7) does not have a + limited select. + +Tue May 11 17:11:51 1999 David L. Levine + + * tests/Conn_Test.cpp (spawn_threads): changed some ACE_NEW + statements to ACE_NEW_RETURN. + +Tue May 11 15:43:30 1999 David L. Levine + + * ace/OS.h: added ACE_THR_PRI_OTHER_DEF for NT, because MT_Cubit + uses it. + +Tue May 11 14:45:08 1999 David L. Levine + + * tests/Conn_Test.cpp: fixed use of status on platforms that lack + fork. + +Tue May 11 14:10:29 1999 David L. Levine + + * ace/config-osf-4.0.h: added #define of + ACE_NEW_THROWS_EXCEPTIONS, if exception handling is enabled. + + * tests/New_Fail_Test.cpp: removed workaround for DEC cxx, and + modified error message to mention ACE_NEW_THROWS_EXCEPTIONS. + +Tue May 11 12:02:03 1999 David L. Levine + + * ace/config-win32-common.h: set __ACE_INLINE__ to 1 if not + #defined. It's scary when I trip over syntax errors on Win32 + :-) + +Tue May 11 10:00:00 1999 Chris Gill + + * ace/OS.i: fixed name of unused argument for pSOS + + * ace/RB_Tree.{cpp, h}: moved enumerated type from template to + non-templatized base class to make old g++ happy. + +Mon May 10 22:59:46 1999 David L. Levine + + * include/makeinclude/wrapper_macros.GNU: don't set VDIR to + .shobj/ for VxWorks, because it uses the same .o files for + static and shared libs. + + * include/makeinclude/platform_vxworks5.x_g++.GNU: disable RTTI + for egcs, because the Tornado 1.0.x libs don't support it. No + harm in disabling for old g++. + +Mon May 10 15:33:56 1999 Douglas C. Schmidt + + * ace/INET_Addr.cpp (string_to_addr): Fixed a mistake that + occurred when integrating Jerry D. De Master + fix. Thanks to Zoran and Jerry for + reporting this. + +Mon May 10 15:00:31 1999 Nanbor Wang + + * ACE-INSTALL.html: Changed to use ACE_NO_INLINE to supress + inlining to match with the recent dsp file changes. Added a + link to Barry Hoggard's CORBA page which contains ACE related + MSVC setting hints. + + * ace/Select_Reactor_Base.cpp (unbind): We need to make sure the + reactor's suspend_set_ also gets cleaned up when unbinding a + handler. Thanks to Casey Lucas for pointing + this out. + +Mon May 10 17:08:29 1999 James C. Hu + + * ace/ACE.cpp: + * ace/config-sunos5.6.h: + * ace/README: Added support to enter_recv_timedwait, + enter_send_timedwait, handle_timed_complete, and + handle_timed_accept to use poll() instead of select() if poll() + is available and select() is known to have problems. Created + ACE_HAS_LIMITED_SELECT macro. Certain versions of SunOS 5.6 do + not correctly select on file descriptors that are larger than + 1023. + +Mon May 10 13:32:11 1999 David L. Levine + + * tests/Conn_Test.cpp (spawn_threads): wait a maximum of 200 + seconds. Carlos reported that the test sometimes hangs on Irix. + +Mon May 10 12:14:00 1999 Chris Gill + + * ace/RB_Tree.cpp: fixed a dangling pointer bug in + RB_Tree::delete_fixup. Added pointer tests to all dereferences + in this piece of code. + +Mon May 10 11:35:18 1999 Ossama Othman + + * COPYING: Made some updates suggested by Richard Stallman + of the Free Software Foundation + (http://www.fsf.org/). + +Mon May 10 11:01:58 1999 David L. Levine + + * tests/New_Fail_Test.cpp: DEC cxx catches its default, + NoNamedException. OK, I guess. + + * tests/Upgradable_RW_Test.cpp: added -f option, which enables + FIFO thread scheduling. Some platforms require superuser + privilege to use it. Also, wait a maximum of 1 second per + iteration. And, replaced some u_longs with u_ints. + + * tests/Thread_Manager_Test.cpp (main): wait a maximum of 60 + seconds, because the test sometimes hangs on SunOS 5.5.1 and + SunOS 5.7. + +Mon May 10 08:26:44 1999 David L. Levine + + * bin/g++dep: added support for our Solaris 7 machines. + +Sun May 9 18:07:24 1999 Ossama Othman + + * acconfig.h: + * configure.in: Added support/tests for + ACE_LACKS_CHAR_RIGHT_SHIFTS and + ACE_LACKS_CHAR_STAR_RIGHT_SHIFTS. + + * ace/README: Fixed typo. ACE_LACKS_LINEBUFFERED_STREAMBUF was + used twice. Corrected the appropriate one to + ACE_LACKS_UNBUFFERED_STREAMBUF. + +Sun May 09 11:45:00 1999 Chris Gill + + * ace/RB_Tree.cpp added explicit scoping to RB_SearchResult + parameter in RB_Tree<...>::find_node (). + +Sun May 09 11:30:00 1999 Chris Gill + + * ace/Makefile + examples/Connection/non_blocking/Makefile + examples/IPC_SAP/SPIPE_SAP/Makefile + examples/IPC_SAP/TLI_SAP/Makefile + examples/Reactor/Misc/Makefile + examples/Service_Configurator/IPC-tests/client/Makefile + examples/Service_Configurator/IPC-tests/server/Makefile + netsvcs/lib/Makefile + netsvcs/servers/Makefile + tests/Makefile: ran make depend after adding new RB_Tree + interface. + +Sat May 08 19:30:00 1999 Chris Gill + + * ace/RB_Tree.{cpp, h, i} + tests/RB_Tree_Test.cpp: finished implementing all methods for + the ACE_Hash_Map_Manager_Ex compliant interface, fixed a bug in + the internal tree search method (thanks to David Levine for + pointing this out), and added a new section to the test that + exercises the new bind and unbind methods. + +Sat May 08 17:09:10 1999 David L. Levine + + * apps/Gateway/Gateway/Event_Channel.cpp (bind_proxy,subscribe): + wrapped final return statement with ACE_NOTREACHED, to please DU + cxx 6.2. + +Sat May 08 08:49:44 1999 David L. Levine + + * ace/CDR_Stream.h: only use unsigned long for Boolean with Green + Hills 1.8.8 on Chorus, not 1.8.9. + + * ace/IOStream.h,README: added ACE_LACKS_CHAR_STAR_RIGHT_SHIFTS + and ACE_LACKS_CHAR_RIGHT_SHIFTS support. + + * ace/config-chorus.h: added ACE_LACKS_CHAR_STAR_RIGHT_SHIFTS + #define for g++. + + * ace/config-vxworks5.x.h: added ACE_LACKS_CHAR_RIGHT_SHIFTS + #define for Green Hills 1.8.9. + +Sat May 08 08:44:00 1999 Chris Gill + + * ace/RB_Tree.{cpp, h, i} + tests/RB_Tree_Test.cpp + apps/JAWS/PROTOTYPE/HTTPU/http_headers.cpp: Added more + implementation code and necessary template instantiations for + migration of RB_Tree class templates to conform to the + ACE_Hash_Map_Manager API. + +Sat May 08 03:59:52 1999 Nanbor Wang + + * ace/config-win32-common.h: Re-ordered __ACE_INLINE__ macro check + and definition so users can turn of inlining correctly. + However, the right thing to do is to define ACE_NO_INLINE macro. + + * ace/ace_{dll,lib}.dsp: Moved RB_Tree.cpp to template folder and + excluded it from being built. + + * ace/ace_lib.dsp: + * performance-tests/Misc/basic_perf.dsp: + * performance-tests/Misc/context_switch_time.dsp: + * tests/version_tests/*.dsp: We should have used ACE_NO_INLINE + instead of defining __ACE_INLINE__=0 to supress the use of + inlining. Thanks to Nick Sawadsky + for reporting this. + +Fri May 07 23:05:24 1999 David L. Levine + + * ace/config-vxworks5.x.h: added ACE_LACKS_LINEBUFFERED_STREAMBUF + for Green Hills 1.8.9. + + * ace/README: added ACE_LACKS_LINEBUFFERED_STREAMBUF. + +Fri May 7 19:39:43 1999 Carlos O'Ryan + + * ace/Message_Block_T.i: Found little bug in + ACE_Locked_Data_Block<> default constructor. + +Fri May 07 16:54:00 1999 Chris Gill + + * ace/RB_Tree.{cpp, h, i}: Reorganized and optimized internal + methods, added read and write guards, implemented all public + find and unbind methods for the interface comparable to + ACE_Hash_Map_Manager_Ex. + +Fri May 07 14:40:12 1999 David L. Levine + + * include/makeinclude/platform_osf1_cxx.GNU: added, to support + uniform use of cxx across different OS versions. + + * ace/config-osf1-4.0.h: conditionally #define DIGITAL_UNIX, to + support definition in CFLAGS. + + * ace/config-osf1.h: added, to support easy migration to DU 5.0. + +Fri May 07 11:00:52 1999 David L. Levine + + * ACE-INSTALL.html: OK on RedHat 6.0 Linux. + +Fri May 07 08:58:47 1999 David L. Levine + + * ace/OS.{h,i}: added some QNX support. In OS.i, this mostly + consisted of adding a !defined (ACE_LACKS_MUTEXATTR_PSHARED) + check to _POSIX_THREAD_PROCESS_SHARED. Thanks to Alain Magloire + for providing this support. + +Thu May 6 21:48:26 1999 Ossama Othman + + * acconfig.h: + * configure.in: + * ace/OS.h: + * ace/README: + * ace/config-hpux11.h: + * ace/config-irix6.x-g++.h: + * ace/config-irix6.x-kcc.h: + * ace/config-irix6.x-sgic++.h: + * ace/config-linux-lxpthreads.h: + * ace/config-osf1-4.0.h: + * ace/config-sco-5.0.0-mit-pthread.h: + * ace/config-sunos5.5.h: Removed all references to + ACE_HAS_PTHREAD_SIGMASK. This macro has been deprecated. + +Thu May 6 20:12:57 1999 Ossama Othman + + * acconfig.h: + * configure.in: Added tests/support for ACE_LACKS_PTHREAD_SIGMASK, + ACE_LACKS_TCP_NODELAY and ACE_LACKS_NULL_PTHREAD_STATUS. Thanks + to David for providing a test for ACE_LACKS_NULL_PTHREAD_STATUS. + +Thu May 06 14:26:54 1999 David L. Levine + + * ace/README,ace/Pipe.cpp (open): added support for + ACE_LACKS_TCP_NODELAY. Thanks to Alain Magloire + for providing the patch. + +Thu May 6 14:23:14 1999 Carlos O'Ryan + + * ace/Synch_T.cpp: Removed ACE_ALLOC_HOOK_DEFINE macros for the + Guard<> objects, they don't need them (because they are + allocated on the stack) and the HOOK_DECLARE macros where not + used in the header file. + + * bin/count_lines: Several new file types, fixed computations when + multiple modules are used. + +Thu May 06 12:28:54 1999 David L. Levine + + * docs/ACE-FMM.html: replaced a > with > and added RCS Id + string. + + * ACE-INSTALL.html: added link to docs/ACE-FMM.html. + +Thu May 06 12:23:51 1999 Steve Huston + + * ace/OS.i (recvv, sendv): Added code to make these functions work + on Win32 w/ Winsock 1.1. + +Wed May 05 15:10:37 1999 David L. Levine + + * ace/OS.h: added ACE_U_ONE_SECOND_IN_*SECS. They're typed and + unsigned. The old ACE_ONE_SECOND_IN_*SECS macros are retained + for backward compatibility. + +Wed May 5 13:58:25 1999 Carlos O'Ryan + + * ace/OS.i: Don't use poll() for the implementation of + ACE_OS::sleep(), it has bad resolution and it gives wrong + results on Linux. + + * tests/High_Res_Timer_Test.cpp: Added new option to run several + iterations of each interval. + +Wed May 05 13:14:52 1999 Steve Huston + + * ace/ACE.cpp: Removed DllMain - Win32 does not have the gusto to + handle the initialization/finalization in this way. It causes + DLL dependency problems which result in early detachment of + winsock, and possible network data loss in some cases. + + * ace/OS.cpp, Object_Manager.cpp: Clarified some comments + regarding multiple ACE_OS_Object_Manager and ACE_Object_Manager + objects in existence and how they're handled. + + * tests/ACE_Init_Test.cpp: Always does ACE::init and ACE::fini + now. This is one example of how to handle a non-console program + in Win32. + +Wed May 05 13:07:49 1999 David L. Levine + + * bin/Makefile: replaced /bin/rm with $(RM) and removed clean + pseudotarget. + +Tue May 04 20:38:00 1999 Chris Gill + + * tests/RB_Tree_Test.cpp: Added missing explicit template + instantiations for ACE_RB_Tree_Iterator_Base. Thanks to Carlos + O'Ryan for reporting this. + + * include/makeinclude/platform_psos_diab_ppc.GNU: added -g flag + back into debug flags since it can easily be deactivated via + make debug=0. + +1999-05-04 Seth Widoff + + * ace/Containers_T.cpp (ACE_Array_Base::max_size): When + resizing the array to be larger, the max_size method was copying + in the contents of the older, smaller array, but not + initializing the new elements. + +Tue May 4 17:37:30 1999 Kirthika Parameswaran + + * examples/Web_Crawler/Options.cpp (parse_args): Change the + default options from "www.cs.wustl.edu" to "tao.cs.wustl.edu". + +Tue May 04 16:24:00 1999 Chris Gill + + * ace/RB_Tree.{cpp, h, i}: Added deprecation comments to methods + that are going to be replaced by the new Hash_Map_Manager + compliant interface. Factored out iterator base class, added + reverse iterator. Interim checkin since it all compiles and + RB_Tree_Test runs clean. + +Tue May 04 15:56:41 1999 Steve Huston + + * ace/ACE.cpp: Re-enabled DllMain (see Mon May 3 entry from Chris + Gill). + + * ace/OS.cpp, Object_Manager.cpp: In ACE_OS_Object_Manager and + ACE_Object_Manager, differentiate between The singleton instance + and other instances when allocating and freeing per-process + information. + + * tests/run_tests.bat: Added ACE_Init_Test. + +Mon May 3 18:04:32 1999 Alexander Babu Arulanthu + + * examples/Reactor/Proactor/test_aiocb_ace.cpp: Added this + file. If this test is sucessful, ACE_POSIX_AIOCB_PROACTOR could + be defined for a platform. + +Mon May 03 09:35:00 1999 Chris Gill + + * ace/RB_Tree.cpp: fixed bug in ACE_RB_Tree::RB_delete_fixup in + which a null pointer was dereferenced while trying to determine + the color of the node that was being pointed to. Per the RB + Tree discussion in Cormen Lieserson and Rivest's "Introduction + to Algorithms", after which this implementation is modeled, a + nil node is implicity treated as having been colored BLACK. + Thanks to Long Hoang for reporting + the problem and providing a test program that showed the bug. + +Mon May 03 15:53:15 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU, + tests/run_tests.vxworks,ACE-INSTALL.html: added support for + shared lib builds. Thanks to Ramiro Penataro Blanco + and James D. Rucker + for figuring this out, and + providing detailed instructions for others to follow. + +Mon May 03 15:20:00 1999 Kirthika Parameswaran + + * examples/Web_Crawler/main.cpp: + * examples/Web_Crawler/Web_Crawler.{h,cpp}: + * examples/Web_Crawler/Cached_Connect_Strategy_T.{h,i,cpp}: + * examples/Web_Crawler/Caching_Strategies_T.{h,i,cpp}: + * examples/Web_Crawler/Command_Processor.{h,cpp}: + * examples/Web_Crawler/HTTP_URL.{h,cpp}: + * examples/Web_Crawler/Iterators.{h,cpp}: + * examples/Web_Crawler/Mem_Map_Stream.{h,cpp}: + * examples/Web_Crawler/Optimal_Cache_Map_Manager_T.{h,i,cpp}: + * examples/Web_Crawler/Options.{h,cpp}: + * examples/Web_Crawler/URL.{h,cpp}: + * examples/Web_Crawler/URL_Addr.{h,cpp}: + * examples/Web_Crawler/URL_Status.{h,cpp}: + * examples/Web_Crawler/URL_visitor.{h,cpp}: + * examples/Web_Crawler/URL_Visitor_Factory.{h,cpp}: + * examples/Web_Crawler/Makefile + * examples/Web_Crawler/README + + This example is a HTTP client which crawls over the link provided + and checks whether the links recusively are valid or not. + This example was used to test teh auto-purging feature where the + connections are removed from the connection cache when the process + runs out of file descriptors. + +Mon May 03 14:46:28 1999 Steve Huston + + * tests/ACE_Init_Test.dsp: Fixed to build on all configurations (for + Intel anyway). + +Mon May 03 10:30:37 1999 David L. Levine + + * ACE version 4.6.38 released. + +Mon May 3 09:56:06 1999 Douglas C. Schmidt + + * ace/INET_Addr.cpp (get_host_name): Make sure to check if + get_host_name() fails and do something useful in this case. + Thanks to Frank O'Dwyer for reporting this. + +Mon May 03 09:35:00 1999 Chris Gill + + * ace/ACE.cpp: disabled BOOL APIENTRY DllMain(HANDLE hModule, + DWORD ul_reason_for_call, LPVOID lpReserved) by having it + just return TRUE. This function is used only on NT. This + is a temporary workaround for the problem of tao_idl + crashing on NT, and will be replaced ASAP with a more + complete fix to Object Manager initialization/cleanup at + DLL load/unload time on NT. Thanks to David Levine for + suggesting this fix. + +Mon May 03 09:27:54 1999 David L. Levine + + * docs/ACE-guidelines.html: added guideline to put + spaces around comment delimiters. Thanks to Chris + Gill for suggesting this. + +Sun May 02 14:36:43 1999 David L. Levine + + * ace/OS.h: Added ghs back to the list of compilers for which + ACE_NOTREACHED disappears. It was causing warnings for + many ACE and TAO files. + +Sun May 02 08:21:13 1999 David L. Levine + + * ace/OS.i (pthread_sigmask): added ACE_UNUSED_ARGs to + NOTSUP case. + + * ace/OS.i (pthread_sigmask),ace/config-chorus.h,ace/README: + added ACE_LACKS_PTHREAD_SIGMASK. + +Sat May 01 17:33:04 1999 David L. Levine + + * ace/OS.cpp,Object_Manager.cpp: reverted this change because + it causes a seg fault on NT: + + Thu Apr 29 13:41:52 1999 Steve Huston + + * ace/{OS.cpp Object_Manager.cpp}: Fixed leaking ACE_Object_Manager + when config has #define ACE_HAS_NONSTATIC_OBJECT_MANAGER 0. + +Sat May 01 12:06:57 1999 Nanbor Wang + + * ace/ACE.cpp: + * ace/config-win32.h: Reverted my previous change. I didn't + notice David had already fixed it. Thanks David. + +Sat May 01 01:48:29 1999 Nanbor Wang + + * ace/ACE.cpp (DllMain): Only use DllMain to control + Object_Manager's lifecycle when + ACE_USES_DLL_TO_MANAGE_THE_LIFECYCLE_OF_OBJECT_MANAGER is + defined and we are building ACE as a DLL. + + * ace/config-win32.h: Defining + ACE_USES_DLL_TO_MANAGE_THE_LIFECYCLE_OF_OBJECT_MANAGER =1, when + compiling DLL version of ACE will cause then ACE::init/fini be + called automatically for you in DllMain when ACE gets linked + in/unlinked. + + Defining ACE_USES_DLL_TO_MANAGE_THE_LIFECYCLE_OF_OBJECT_MANAGER + =1 automatically define ACE_HAS_NONSTATIC_OBJECT_MANAGER to 1 + and define ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER. + +Fri Apr 30 22:53:01 1999 David L. Levine + + * ace/OS.h: put Object_Manager back on the stack of main, + instead of using ACE::init () and ACE::fini (). It + should be functionally equivalent, and then some: if + the user's main () returns, the Object_Manager will get + properly destroyed if it's on the stack. And, it's better + for subset support if we avoid class ACE calls from OS.h. + + * include/makeinclude/rules.lib.GNU: cleaned up a bit. + +Fri Apr 30 17:42:11 1999 Alexander Babu Arulanthu + + * ace/OS.i (pthread_sigmask): + * ace/OS.h (ACE_OS): Added wrapper for to get + the Proactor code compile on LynxOS. + + * ace/config-lynxos.h (ACE_HAS_AIO_CALLS): + Enabled ACE_HAS_AIO_CALLS for LynxOS. Also enabled + ACE_HAS_AIOCB_PROACTOR since LynxOS 3.0.0 has not got + yet, so signal proactor cannot work correctly. + + * ace/POSIX_Proactor.cpp: + * examples/Reactor/Proactor/test_aiosig_ace.cpp + (setup_signal_delivery): Added ACE_OS:: scope to pthread_sigmask + so that it works (fails!!) correctly on LynxOS. + + * examples/Reactor/Proactor/post_completions.cpp: + * examples/Reactor/Proactor/test_timeout.cpp: Added 'main' + function for platforms where only AIOCB_Proactor is enabled so + that the test prints out a message. + + * examples/Reactor/Proactor/Makefile: + +Fri Apr 30 14:44:12 1999 Darrell Brunsch + + * ACE-INSTALL.html: Added a note about manually cleaning out the + ACE_wrappers directories on Win32, which could be required for a + true start from scratch build. Thanks to David Hooker + for this insight. + +Fri Apr 30 14:06:41 1999 Douglas C. Schmidt + + * COPYING: Updated the COPYING file to reflect the use new of + ACE(TM) and TAO(TM). + +Fri Apr 30 13:23:22 1999 Steve Huston + + * docs/tutorials/017/Barrier_i.cpp: + * docs/tutorials/018/token.cpp: Added explicit template + instantiations. + +Fri Apr 30 12:11:36 1999 Ossama Othman + + * ace/OS.i (gethostbyname2): + + Added an IPv4-only implementation. If ACE_HAS_IP6 is not defined, + the IPv4-only implementation will be used. + +Fri Apr 30 12:11:50 1999 Nanbor Wang + + * tests/Basic_Types_Test.cpp: Added checks for sizeof(long) == + sizeof(void*) and sizeof(long) >= sizeof (a_function_pointer). + Certain code in ACE depends on the assumptions. + +Fri Apr 30 11:24:26 1999 Steve Huston + + * tests/ACE_Init_Test.cpp: Added compile-time change to adapt to + build w/ static ACE lib and ACE_HAS_NONSTATIC_OBJECT_MANAGER. + * tests/version_tests/ACE_Init_Test.dsp: Changes to build clean on + all configurations. + +Fri Apr 30 02:06:53 1999 Nanbor Wang + + * ace/Parse_Node.cpp (symbol): According to the new ANSI C++ + specification, casting a void* pointer to a function pointer is + not allowed. However, casting a void* pointer to an integer + type that is large enough to hold the pointer value is legal. I + chose to cast the return value to long since it should be large + enough to hold the void* pointer's value on most platforms. I am + not sure if casting a long value to a function pointer is legal + or not (can't find a good explanation in spec) but it prevent + SunC++ 5.0 compilers from complaining about illegal pointer + conversion. + + * ace/OS.h: Removed ACE_non_function_ptr_to_function_ptr_cast, + it is no longer needed. + +Fri Apr 30 00:36:23 1999 Ossama Othman + + + * ace/Get_Opt.cpp: + * ace/TLI_Acceptor.cpp: + * ace/TLI_Connector.cpp: + + Cast away const from string literals using ACE_const_cast to make + Sun C++ 5.0 happier. + +Thu Apr 29 18:32:43 1999 Irfan Pyarali + + * ace/OS.h: Removed ghs from the list of compilers for which + ACE_NOTREACHED disappears. It was causing warnings for + TAO/orbsvcs/orbsvcs/Naming/Persistent_Context_Index_T.cpp. + +Thu Apr 29 19:48:25 1999 Ossama Othman + + * ace/OS.{h,i} (ACE_OS): + + More IPv6 support. Added support for the new IPv4/IPv6 + inet_ntop() and inet_pton() calls. If ACE_HAS_IP6 is not + defined, these calls will use IPv4 implementations (see + Stevens' book "UNIX Network Programming - Volume I") and + return an error if a family other than AF_INET is passed to + them. + + * ace/OS.h: + + Define INET_ADDRSTRLEN and INET6_ADDRSTRLEN if they don't + get defined after including . + +Thu Apr 29 18:32:43 1999 Ossama Othman + + * ace/README: + * ace/OS.h (ACE_OS): + * ace/OS.i (gethostbyname2): + + Added support for the gethostbyname2() system call. It is only + enabled if ACE_HAS_IP6 is defined. When I have time, I'll add + more IPv6 support. + +Thu Apr 29 15:30:04 1999 Douglas C. Schmidt + + * ace/INET_Addr.cpp (string_to_addr): Added support to check for + both "port numbers" and "port names". Thanks to Jerry D. De + Master for suggesting this. + + * ace/Select_Reactor_T.h, + ace/Reactor.h, + ace/Select_Reactor_T.h, + ace/TP_Reactor.h (ACE_TP_Reactor): Updated the documentation to + clarify the purpose of the flag. Thanks to Susan + Liebeskind for reporting this. + +Thu Apr 29 13:41:52 1999 Steve Huston + + * ace/{OS.cpp Object_Manager.cpp}: Fixed leaking ACE_Object_Manager + when config has #define ACE_HAS_NONSTATIC_OBJECT_MANAGER 0. Now + both ACE_OS_Object_Manager and ACE_Object_Manager remember if they + were dynamically allocated whether the above #define is used or not + and correctly clean up and track the singleton properly. + Thanks to David and Irfan for identifying this and helping with the + solution. + +Wed Apr 28 20:21:12 1999 Irfan Pyarali + + * ace/Synch_T.h (class ACE_Anti_*_Guard): I had accidentally + checked in the anti guard classes. These are not needed since + we decided to stick with the reverse lock class rather than the + anti guard classes. + +Wed Apr 28 18:02:36 1999 Nanbor Wang + + * ace/OS.h: Added a new macro called + ACE_non_function_ptr_to_function_ptr_cast to get around some + compiler constrain. In face, ANSI C++ standard prevents casting + from a non-function pointer (e.g., void *) to a function + pointer. Currently, only egcs check for this condition. + + * ace/Parse_Node.cpp (symbol): Changed to use the new + ACE_non_function_ptr_to_function_ptr_cast. + +Wed Apr 28 16:53:16 1999 Alexander Babu Arulanthu + + * examples/Reactor/Proactor/Aio_Platform_Test_C.cpp: Added this + file, a simple C version of the + $ACE_ROOT/tests/Aio_Platforms_Test.cpp. Useful for submitting bug + reports etc. + + * ace/Proactor.cpp: + * ace/POSIX_Asynch_IO.cpp: Fixed old g++ warnings + +Wed Apr 28 15:39:14 1999 Nanbor Wang + + * ace/Parse_Node.cpp (symbol): Use reinterpret_cast to cast + dlsym's return value. + +Wed Apr 28 12:40:26 1999 David L. Levine + + * ace/Synch_T.{i,cpp} (~ACE_Reverse_Lock): uninlined destructor. + See docs/ACE-guidelines.html for an explanation of why a + class should have at least one non-inline, non-pure virtual + function if it has any virtual functions. egcs 1.1.1b + needed this one. + +Wed Apr 28 09:02:26 1999 Douglas C. Schmidt + + * ace/config-sunos5.5.h: It appears that SunC++ 5.0 wants + ACE_HAS_THR_C_DEST to be defined. + + * ace/SString: Clarified the comments a bit to avoid confusion. + Also, moved the definition of ACE_SString to AFTER ACE_CString + and ACE_WString since they are more general. Thanks to Kevin + Lyda for reporting this. + +Tue Apr 27 20:59:52 1999 Douglas C. Schmidt + + * netsvcs/clients/Naming: Moved the README file into the Client/ + directory since that's what it described. + + * netsvcs/clients/Naming/Client/Client_Test.cpp: Reformatted some + code to conform to ACE programming guidelines. + + * ace/Naming_Context.cpp (parse_args): Oops, fixed a braino + related to strcmp(). Thanks to Valery Arkhangorodsky + for reporting this. + +Tue Apr 27 18:00:31 1999 Steve Huston + + * ace/OS.cpp (ACE_OS_CString, ACE_OS_WString): Fixed one-off error + in allocating new string's memory. + +Tue Apr 27 17:36:28 1999 Ossama Othman + + * m4/threads.m4: + + Restructured thread detection test so that it properly detects + threads on platforms that provide PTHREADS backward compatibility + macros, such as Digital Unix 4.0 and 5.0. + +Tue Apr 27 18:56:00 1999 Chris Gill + + * ace/Containers_T.{cpp, h} + tests/OrdMultiSet_Test.cpp: added a workaround for a problem with + implicit template instantiation and a do-nothing destructor + definition. Thanks to Sarmeesha Reddy and + Steven Tine for reporting this. + + * include/makeinclude/platform_psos_diab_ppc.GNU: changes to use + the board support package linker file. Thanks to Sarmeesha + Reddy and Steven Tine + for contributing this change. + +Tue Apr 27 16:30:57 1999 Ossama Othman + + * ace/UNIX_Addr.h (ACE_UNIX_Addr): + + Corrected typographical error in comment. + +Tue Apr 27 12:57:06 1999 Ossama Othman + + * configure.in: + + Removed `tests/log/Makefile' from the list of files to + generate (i.e. removed from AC_OUTPUT macro call). + + * tests/Makefile.am: + + Corrected a typo. I neglected to add "_SOURCES" to the end + of the Collection_Test source variable variable. Also added + more missing tests to the list of test programs. Commented out + Cache_Manager_Test. It appears to need a header that doesn't + exist. + + * ace/Makefile.am (pkginclude_HEADERS): + + Removed `Timer_Queue.i' from the list of headers. + + * bin/autogen: + * bin/bootstrap: + + Renamed the `autogen' script to `bootstrap'. + +Tue Apr 27 11:54:53 1999 Ossama Othman + + * configure.in: + + Temorarily removed my experimental C++ libtool support so that + I can get a semi-working test distribution out on the net. + + * ltconfig: + * ltmain.sh: + + Reverted to more stable version, i.e. w/o my C++ support. + + * m4/threads.m4: + + Added KAI C++ thread flag check. + +Tue Apr 27 11:45:40 1999 Irfan Pyarali + + * tests/Collection_Test.cpp (main): Added some additional array + tests and fixed template instantiation errors. Thanks to David + Levine for pointing them out. + + * ace/OS.h (ACE_DES_FREE): Changed all the ACE_DES* macros to + check for zero pointers. Thanks to Torsten Kuepper + for pointing this bug out. + +Tue Apr 27 11:08:35 1999 Nanbor Wang + + * ace/Basic_Types.h: Forced KAI compiler to use ACE_U_LongLong if + ACE_LACKS_LONGLONG_T is defined. + + * ace/DLL.cpp: + * ace/Service_Config.i: + * ace/Service_Object.i: + * ace/INET_Addr.cpp: Some CE related changes. + +Tue Apr 27 00:03:16 1999 Irfan Pyarali + + * tests/Collection_Test.cpp (main): Added test code for ACE_Array. + +Mon Apr 26 23:55:43 1999 Irfan Pyarali + + * ace/Synch_T.h (class ACE_Reverse_Lock): Removed constructor that + created the lock. There were two reasons for this: (a) it was + unrealistic that the reverse lock would own and create the + regular lock and (b) this constructor made it impossible that + ACE_Reverse_Lock can be used with ACE_Lock (the abstract + class). Thanks to Carlos for pointing this out. + +Mon Apr 26 21:43:23 1999 Ossama Othman + + * ace/Makefile.am (pkginclude_HEADERS, libACE_IPC_la_SOURCES): + + Added ATM_Addr sources to these variables. + + * ace/Makefile.am (EXTRA_libACE_la_SOURCES): + + Accidentally removed this variable. It is needed for + conditionally built sources, such as `gethrtime.cpp'. + + * tests/Makefile.am: + + Added newly added tests to the list of test programs to be built. + Changed "noinst_PROGRAMS" variable to "check_PROGRAMS" so that + tests only get built when a `make check' is issued by the user. + +Mon Apr 26 19:29:25 1999 Ossama Othman + + * tests/Reverse_Lock_Test.cpp (main): + + ACE_START_TEST macro had "Thread_Mutex_Test" instead of + "Reverse_Lock_Test." + +Mon Apr 26 17:01:22 1999 Steve Huston + + * ace/ACE.cpp (DllMain): Re-enabled this for use on Win32. + + * ace/OS.h (main): On non-pSoS, use ACE::init, ACE::fini rather than + creating object manager instances on the stack. Allows a single + instance regardless of program type; especially helpful on Win32. + + * ace/OS.cpp (ACE_OS_Object_Manager ctor): + * ace/Object_Manager.cpp (ACE_Object_Manager ctor): + Don't set instance_ if it was already set. So if two + ACE_Object_Manager instances end up getting created, the first one + stays The Instance, and the second gets used privately by its + creator. Previously, the original was forgotten. Thanks to David + Levine for working out this and the above details with me to get the + Win32 crowd in business without platform-specific hacks. + +Mon Apr 26 16:43:32 1999 Nanbor Wang + + * ace/Asynch_IO_Impl.h (ACE_Asynch_[Read|Write]_File_Impl): + Declared the read/write pure virtual methods of + ACE_Asynch_[Read|Write]_Stream_Impl again in these class to + avoid KAI compiler's overwriting pure virtual function + warnings. + +Mon Apr 26 10:54:23 1999 Carlos O'Ryan + + * ace/High_Res_Timer.h: + Moved the static method hrtime_to_tv to the public section. It + is useful outside this class. + + * ace/Synch_T.cpp: + The default constructor for ACE_Reverse_Lock should not allocate + the locking mechanism, otherwise it cannot work with ACE_Lock. + +Mon Apr 26 07:30:51 1999 Nanbor Wang + + * ace/OS.i (fstat): Changed to use CE's implementation and added + some features that're supported on other Win32 platforms. The + original implementation for Win32 closed down the file handle + accidentally which is not a "Good Thing[TM]". Thanks to Dominic + Williams for pointing this out. + +Sun Apr 25 21:35:37 1999 David L. Levine + + * ace/ACE.{h,cpp},OS.{h,cpp},Object_Manager.{h,cpp} (init,fini): + moved init_fini_count_ from ACE Object_Managers to ACE, so that + it is only used via ACE::init () and ACE::fini (). Thanks + to Steve Huston for pointing out that the old way didin't work + if an Object_Manager was created prior to starting main (), + and there were ACE::init ()/ACE::fini () calls in main (). + +Sun Apr 25 16:59:21 1999 Nanbor Wang + + * include/makeinclude/platform_sunos5_kcc.GNU: Fixed incorrect + compiler flags. + + * ace/config-sunos5.7.h: Added definition of uint64_t on KAI. + + * ace/config-kcc-common.h: Changed to use non-static object + manager. + Defined ACE_SIZEOF_LONGLONG. KAI compiler has type long long. + + * ace/OS.h: ACE_NOTREACHED should expand to nothing on KAI + compiler. + + * ace/CDR_Stream.h (ACE_CDR): KAI compiler doesn't have + longlong_t. + + * ace/Basic_Types.h: KAI compiler should define ACE_UINT64 as + unsigned long long. + +Sun Apr 25 14:52:18 1999 Douglas C. Schmidt + + * COPYING, + TAO/COPYING: Updated the ACE+TAO COPYING information to + emphasize the relationship to open source. Thanks to Malcolm + Spence for suggesting the wording. + +Sat Apr 24 23:03:31 1999 Alexander Babu Arulanthu + + * ACE_wrappers/ace/POSIX_Asynch_IO.cpp + * ACE_wrappers/ace/POSIX_Asynch_IO.h + * ACE_wrappers/ace/POSIX_Proactor.cpp + * ACE_wrappers/ace/POSIX_Proactor.h + * ACE_wrappers/ace/Proactor.cpp + * ACE_wrappers/ace/Proactor.h + * ACE_wrappers/ace/Proactor_Impl.h + + * ACE_wrappers/examples/Reactor/Proactor/Makefile + * ACE_wrappers/examples/Reactor/Proactor/README + * ACE_wrappers/examples/Reactor/Proactor/test_aiocb.cpp + * ACE_wrappers/examples/Reactor/Proactor/test_aiosig.cpp + * ACE_wrappers/examples/Reactor/Proactor/test_aiosig_ace.cpp + * ACE_wrappers/examples/Reactor/Proactor/test_proactor.cpp + * ACE_wrappers/examples/Reactor/Proactor/test_timeout.cpp + + - Completed Multithreading of POSIX_SIG_Proactor. + + - Introduced another constructor for ACE_POSIX_SIG_Proactor for taking + signal mask to be used with the Proactor. + + - Thanks to Dave Butenhof for helping a lot to + understand the various things in the POSIX4 standard. + + - Thanks to Dave suggestion of keeping null_handler for the sigaction + to real-time signals. With this and a couple of other correct POSIX + things SIG proactor is now working with in Solaris 2.7. + + - Lynx OS doesnt support , so it couldnt be + multithreaded. Enabled AIOCB_Proactor for this platform. + + - Added an example to make use of the real-time signal numbers for the + asynchronous I/O calls. + + * examples/Reactor/Proactor/test_posix_sig_proactor.cpp: This + program demonstrates how to post fake completions to The + Proactor. It also shows the how to specify the particular + real-time signals to post completions. + + * ace/config-lynxos.h: Enabled ACE_POSIX_AIOCB_PROACTOR for this + platform, since was not available. Without + , SIG_Proactor can not work correctly. + + * ace/config-linux-lxpthreads.h: Removed ACE_HAS_AIO_CALLS. Even + simple aio calls test is hanging. + +Sat Apr 24 13:09:27 1999 Douglas C. Schmidt + + * ace/Containers_T.h: Added allocator support to ACE_Array. + Thakns to Paul Francis for contributing this. + + * ace/Future.h (class ACE_Future): Make sure to mention that + get()'s ACE_Time_Value must be in absolute, not relative, time. + Thanks to Ian MacDonald for reporting this. + +Sat Apr 24 07:24:51 1999 David L. Levine + + * tests/Reverse_Lock_Test.cpp: removed ACE_Guard + instantiation because it's in ace/Synch.cpp. + + * ace/config-vxworks5.x.h: added ACE_THR_PRI_OTHER_DEF + #define, for use by MT_Cubit. + + * ace/Object_Manager.cpp, OS.cpp (fini): unconditionally set + instance_ to 0 at the end. This allows init () to + work properly if called after fini (), such as for + repeated test on VxWorks. Thanks to Todd Mullanix + for reporting this. + +Fri Apr 23 17:53:24 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + for PPC860, changed -m=860 to -mcpu=860. Thanks to + Todd Mullanix for reporting this. + +Fri Apr 23 15:48:31 1999 James Hu + + * ace/OS.h: + * ace/OS.i: + * ace/README: + * ace/config-sunos5.5.h: added support for the memchr + library call, and created ACE_HAS_MEMCHR macro. + +Fri Apr 23 10:48:31 1999 David L. Levine + + * tests/New_Fail_Test.cpp (main): added uses of the + two static functions when they're not otherwise used, + to prevent g++ warnings. + +Fri Apr 23 09:11:24 1999 Carlos O'Ryan + + * tests/Reverse_Lock_Test.cpp: + Fixed template instantiation problems. + +Thu Apr 22 21:39:44 1999 Ossama Othman + + * tests/Makefile.am: + + Added support to create the `tests/log' directory after + the tests have been built. + + * tests/log/Makefile.am + + The above change deprecates this Makefile.am file. Thanks to + Nanbor for motivating this change. + +Thu Apr 22 20:50:30 1999 Jeff Parsons + + * ace/CDR_Stream.i: Modified reset() to reset all the message + blocks, instead of just the first one as it had previously done. + Thanks to Jerry D. De Master for pointing + out the problem and suggesting a fix. + +Thu Apr 22 19:40:52 1999 Steve Huston + + * ace/OS.h: Adjust exception thrown at out-of-memory for HP-UX, aC++. + + * ace/config-hpux-10.x-hpc++.h: Add ACE_NEW_THROWS_EXCEPTIONS. + +Thu Apr 22 19:30:01 1999 Irfan Pyarali + + * ace/Synch_T.h (class ACE_Reverse_Lock): Added an interesting + adapter class that changes a lock into a reverse lock, i.e., + acquire() on this class calls release() on the lock, and + release() on this class calls acquire() on the lock. + + One motivation for this class is when we temporarily want to + release a lock (which we have already acquired) but then + reaquire it soon after. An alternative design would be to add a + Anti_Guard or Reverse_Guard class which would release() on + construction and acquire() destruction. However, there are + *many* varieties of the Guard class and this design choice would + lead to at least 6 new classes. One new ACE_Reverse_Lock class + seemed more reasonable. + + * tests/Reverse_Lock_Test.cpp: Test for the new ACE_Reverse_Lock + class. + + * tests/Env_Value_Test.cpp (main): Fixed UNICODE string + concatenation problem. + + * tests/version_tests: Added a bunch of missing project files. + + * ace/ace_lib.dsp: Added missing files. + +Thu Apr 22 19:10:52 1999 Steve Huston + + * ace/ATM_Addr.cpp: Put in class's consts for non-FORE platforms. + +Thu Apr 22 17:05:36 1999 Nanbor Wang + + * bin/auto_compile_win32.pl: Added version_tests. + + * include/makeinclude/platform_sunos5_kcc.GNU: Makefile macros for + KAI C++ compiler. + + * ace/config-sunos5.5.h: Added KAI C++ compiler support. + + * docs/exceptions.html: Explicitly state that ACE try macros will + replace TAO try macros and advise users to take action if they + are still using TAO try macros. Thanks to Don Busch + for pointing this out. + +Thu Apr 22 15:07:10 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + added PPC860 support. Thanks to Todd Mullanix + figuring out how to + support it, with help from Thomas Mehrkam + and Hai Vu . + +Thu Apr 22 13:26:26 1999 Irfan Pyarali + + * ace/XtReactor.cpp (remove_handler_i): In the registration phase, + we registered first with ACE_Select_Reactor and then with X. + Now we are now doing things in reverse order. Thanks to JM + Strauss for contributing these changes. + +Thu Apr 22 13:23:00 1999 Chris Gill + + * include/makeinclude/platform_psos_diab_ppc.GNU: commented out -g + switch which was triggering a bug in the Diab 4.2b compiler when + compiling in debug information. This is supposed to be fixed in + the 4.3a release of the Diab compiler. The ACE tests all compile + now for pSOS/PPC. Thanks to Sarmeesha Reddy + for reporting the bug to Diab and obtaining the workaround. + +Thu Apr 22 10:46:17 1999 Steve Huston + + * apps/JAWS/server: Added $(ACELIB) to LDLIBS to build libJAWS on AIX + with xlC. + + * tests/New_Fail_Test.cpp: Added __GNUG__ to the platforms which do not + actually perform the test; added some more explanation and a better + log message for when it doesn't actually run. + +Thu Apr 22 10:28:39 1999 David L. Levine + + * ace/config-minimal.h: removed suppression of ACE_TSS_EMULATION + and enable of ACE_USE_THREAD_MANAGER_ADAPTER. They're no + longer necessary with the clean OS.cpp. + +Thu Apr 22 08:52:48 1999 Steve Huston + + * tests/New_Fail_Test.cpp: Fixed to compile clean without exceptions. + + * tests/run_tests.{sh bat}: Added New_Fail_Test. + +Wed Apr 21 16:41:08 1999 David L. Levine + + * tests/Reactor_Performance_Test.cpp (main): added 10 second + time limit to run_event_loop () call. That prevents the + test from hanging forever if some of the connections + are lost. + + * tests/Priority_Reactor_Test.cpp: default to 5 children + instead of 10 on LynxOS. Beyond 8, the test seems to + take forever on LynxOS 3.0.0. + + * tests/run_tests.sh: enabled Reactor_Performance_Test, + Priority_Reactor_Test, Time_Service_Test, and Tokens_Test + on LynxOS. + +Wed Apr 21 16:35:21 1999 Steve Huston + + * tests/New_Fail_Test.cpp: Test to be sure that the ACE_NEW[_RETURN] + stuff works correctly when heap is exhausted. + * tests/Makefile: Added New_Fail_Test. + * tests/tests.dsw, New_Fail_Test.dsp: Add new test to MSVC. + +Wed Apr 21 15:35:44 1999 Steve Huston + + * ace/ACE.cpp: On Win32, with ACE_HAS_NONSTATIC_OBJECT_MANAGER, use + DllMain to do ACE::init() and ACE::fini(). + + * tests/ACE_Init_Test.dsp, + * tests/ACE_Init_Test.{cpp h}, + * tests/ACE_Init_TestDlg.{cpp h}, + * tests/ACE_Init_Test.(ico rc rc2 res}, + * tests/ACE_Init_Test_(Resource StdAfx}.h: New test to be sure that + ACE DLL is initialized properly from an MFC app. + + * tests/tests.dsw: Added ACE_Init_Test.dsp project. + +Wed Apr 21 14:59:04 1999 David L. Levine + + * ace/OS.cpp (ACE_OS_Object_Manager::fini): on LynxOS only, + disabled ACE_{recursive/thread}_mutex_destroy () calls, because + they failed on LynxOS in forked children. The prevents + the failure message from being printed, with no apparent + ill effect. + +Wed Apr 21 10:06:11 1999 Steve Huston + + * include/makeinclude/platform_sunos5_sunc++.GNU: Moved -lthread from + the all-Orbix section to the MT-Orbix section for LIBS. + +Wed Apr 21 09:25:16 1999 David L. Levine + + * tests/Upgradable_RW_Test.cpp (main): replaced ACE_SCHED_FIFO + with THR_SCHED_FIFO in activate call. Thanks to Carlos for + finding this subtle error. + +Wed Apr 21 03:34:18 1999 Douglas C. Schmidt + + * ACE version 4.6.37 released. + +Tue Apr 20 22:55:18 1999 David L. Levine + + * ace/OS.i (thr_join): ifdef ACE_LACKS_PTHREAD_NULL_STATUS, + provide the address of a temporary variable for the status + argument of ::pthread_join (), if the caller passed 0. + + * ace/config-lynxos.h,README: added ACE_LACKS_PTHREAD_NULL_STATUS. + LynxOS 3.0.0 fails ::pthread_join () calls with EFAULT + if the second (status) argument is 0. + +Tue Apr 20 21:53:32 1999 Joe Hoffert + + * examples/IPC_SAP/TLI_SAP/Makefile: Had inadvertently checked in + local changes. Now undoing these changes. + +Tue Apr 20 18:25:45 1999 Douglas C. Schmidt + + * ace/{SOCK,TLI,LSOCK,Asynch}_Acceptor.h: Replaced the use of the + hard-coded backlog value of 5 with ACE_DEFAULT_BACKLOG. Thanks + to Irfan for motivating this. + + * ace/OS.h: Added a new (overriddable) macro called + ACE_DEFAULT_BACKLOG that's used to control the default number of + connections that can be accepted by an OS. The default value is + 5. + +Tue Apr 20 18:22:00 1999 Chris Gill + + * ace/Map_T.i + ace/config-psos-diab-mips.h + ace/config-psos-diab-ppc.h + ace/config-psos-diab.h + include/makeinclude/platform_psos_diab_ppc.GNU + tests/Handle_Set_Test.cpp + tests/Process_Strategy_Test.cpp: fixed the remaining tests + for which compiler bug workarounds were available for pSOS + PPC with the Diab 4.2b compiler. + +Tue Apr 20 16:41:39 1999 Nanbor Wang + + * ace/Thread_Manager.cpp (num_tasks_in_group): Make sure we are + not searching for a null task. Thanks to Umar Syyid + for pointing this out. + +Tue Apr 20 15:10:33 1999 Irfan Pyarali + + * tests/Reactor_Performance_Test.cpp: Changed the default number + of connections () from 20 to 5 for NT. This + seems reasonable since the default backlog is 5. Once we have + the ability to set the backlog from the ACE_Acceptor class, we + can increase this number. + +Tue Apr 20 13:55:34 1999 Joe Hoffert + + * ace/OS.i: Fixed ACE_OS::t_free to free memory if pointer is not + null. + + * ace/TLI.h: Added default ACE_XTI_ATM_DEVICE. + + * ace/TLI_Connector.cpp: Disabled non-blocking connects for XTI/ATM + since FORE's drivers have problems with this. Also, fixed t_alloc + memory leaks. + + * ace/ATM_Addr.cpp: Added code formatting change. + + * examples/IPC_SAP/TLI_SAP/CPP-ATM-{server,client}.cpp: Added + the use of ACE_XTI_ATM_DEVICE + +Tue Apr 20 13:30:51 1999 Douglas C. Schmidt + + * ace/ace.icc: Added a configuration file for creating a shared + library with Visual Age C++. + +Mon Apr 19 23:50:25 1999 Irfan Pyarali + + * tests/Time_Service_Test.cpp (main): Fixed error message. + + * ace/Connector.cpp (handle_close): Removed unused argument + . + +Mon Apr 19 17:17:47 1999 Steve Huston + + * docs/tutorials/tutorials.dsw: Fixed project file name for 019-021. + +Mon Apr 19 17:02:42 1999 Irfan Pyarali + + * ace/Connector.cpp (handle_close): There is no need to call + cancel_timer() or remove_handler() from handle_close(). Removal + of all svc tuples from the is done by . + +Mon Apr 19 16:45:54 1999 David L. Levine + + * ace/OS.{h,cpp},Object_Manager.{h,cpp} (ACE_OS_Object_Manager, + ACE_Object_Manager: added static counter to match init ()/fini () + calls. Don't destroy Object_Managers until final fini () call. + Thanks to Ian MacDonald for tracking down + the problem with multiple DLLs in a process. This change + delays destruction of the ACE_Object_Manager until the final + fini () call. + +Mon Apr 19 15:24:55 1999 Douglas C. Schmidt + + * ace/TLI_Stream.cpp (ACE_TLI_Stream): Make sure to set the value + of rwflag_ to 0 so that purify is happy. Thanks to Joe Hoffert + for reporting this. + +Mon Apr 19 14:35:42 1999 Irfan Pyarali + + * examples/IPC_SAP/UPIPE_SAP/ex2.cpp (supplier): + * examples/IPC_SAP/UPIPE_SAP/ex3.cpp (consumer): + + Avoided annoying g++ warning about by explicitly + making a temporary. Thanks to David for pointing this out. + +Sun Apr 18 21:52:43 1999 David L. Levine + + * ace/config-linux-common.h: moved ACE_LACKS_MADVISE to + non-glibc section. Thanks to JM Strauss + for reporting that it wasn't on a Linux system with a + 2.0.35 kernel. + +Sun Apr 18 16:36:30 1999 Ossama Othman + + * ace/config-linux-common.h (ACE_LACKS_MADVISE): + + Re-enabled #define ACE_LACKS_MADVISE. Linux doesn't appear + to have an madvise() system call. + + * configure.in: + * tests/Makefile.am: + + Added libtool support for modules (dlopened libraries). + +Sun Apr 18 08:48:37 1999 David L. Levine + + * ace/Auto_Ptr.i: reordered inline methods to avoid use before + definition. Fixed a few ACE_TRACE comments. + +Sun Apr 18 00:26:28 1999 Irfan Pyarali + + * tests/Notify_Performance_Test.cpp (main): + * tests/Reactor_Performance_Test.cpp (main): + * tests/Priority_Reactor_Test.cpp (main): + + Avoided annoying g++ warning about by explicitly + making a temporary. Thanks to David for pointing this out. + +Sat Apr 17 18:52:38 1999 Irfan Pyarali + + * ace/Memory_Pool.cpp (acquire): Changed use of auto_ptr. + + * ace/Auto_Ptr.i (operator=): Changed to . Thanks to + David Levine and Jean-Marc Strauss + for reporting this. + +Sat Apr 17 08:34:22 1999 David L. Levine + + * examples/Naming/Makefile,performance-tests/Misc/Makefile, + tests/Makefile,all netsvcs Makefiles: + updated for proper support of ACE subsets, with BIN2/LIB2/SHLIB2. + +Fri Apr 16 22:14:36 1999 Irfan Pyarali + + * ace/Auto_Ptr: Made several changes to bring the implementation + up to the specification: + + - Made the constructors take non-const parameters. + - Made release() non-const. + - Added reset(). + + Thanks to Simeon Simeonov , Rainer Blome + , Jody Hagins , and John + Mulhern for helping. + + * tests/Reactor_Performance_Test.cpp: Updated to work with new + auto pointer implementation. + +Fri Apr 16 19:36:35 1999 Alexander Babu Arulanthu + + * ace/Proactor.h (ACE_Proactor): Switched the order of TIMER_QUEUE + and delete_implementation in the constructor. + + * examples/Reactor/Proactor/test_multiple_loops.cpp: Fixed to work + on the WIN32 correctly. This can work only on WIN32 (combining + Proactor with Reactor's event loop). So I have put a #if defined + around the file. + +Fri Apr 16 18:09:44 1999 Irfan Pyarali + + * tests/Conn_Test.cpp (server): If we timeout on accept(), it is + not an error, and should not be reported as one. Thanks to + Thomas Mehrkam for pointing this out. + +Fri Apr 16 13:08:49 1999 David L. Levine + + * ace/OS.{h,cpp},ACE.{h,cpp}: (read_n,send_n,write_n): moved + from ACE to ACE_OS, so that the uses in OS.cpp could be localized. + The ACE versions are now just wrappers over the ACE_OS + versions, for backward compatibility. Thanks to + Erik Ivanenko for reporting + that OS.cpp used a couple of the ACE static member functions. + +Fri Apr 16 10:13:14 1999 David L. Levine + + * include/makeinclude/rules.nested.GNU,ACE-INSTALL.html: added + support for recursive make invocations with Windows NT's shell. + Thanks to Dave Steele for diagnosing the + problem, and Tres Seaver for providing + the wild NT FOR command. Check it out, Darrell. + +Fri Apr 16 07:52:11 1999 Darrell Brunsch + + * ace/High_Res_Timer.cpp: Fixed my previous fix with + calibrate being called on Windows NT when a high-res + timer of 1 Mhz was being found. Calibrate should not + be called on NT now. Thanks to Zoran Ivanovic + for noticing this. + + * ace/Profile_Timer.cpp: Integrated the patch from Andy + Marchewka for returning rusage information + from elapsed_time. + +Thu Apr 15 16:50:21 1999 David L. Levine + + * ACE-INSTALL.html: updated discussion of "dir unexpected" + error when building for VxWorks on NT. Thanks to + Dave Steele for providing the + insight. + +Thu Apr 15 14:04:36 1999 David L. Levine + + * include/makeinclude/rules.lib.GNU: don't call $(RANLIB) + if it is null. + + * include/makeinclude/platform_vxworks5.x_{g++,ghs}.GNU: removed + RANLIB definition, so that it will be null. This prevents + calling "true" on NT hosts. + + Thanks to Thomas Mehrkam for reporting + that his NT host doesn't have "true". + +Thu Apr 15 14:00:00 1999 Chris Gill + + * ace/OS.{h, i}: simplified the conditional compilation logic + for a couple of the pSOS-specific ACE_OS methods, removed a + handful of marker comments, added a conditional compilation + branch for pid_t declaration. + +Wed Apr 14 22:40:08 1999 David L. Levine + + * tests/run_tests.sh: call run_tests.check via sh, to support + platforms that don't have /bin/sh. Thanks to Thomas Mehrkam + for reporting that his NT host doesn't + have /bin/sh. + +Wed Apr 14 18:56:00 1999 Chris Gill + + * ace/OS.{h, i} + ace/config-psos-diab-ppc.h + include/makeinclude/platform_psos_diab_ppc.GNU: changes to adapt + the pSOS Diab 68k/MIPS port to PPC. Many thanks to Sarmeesha + Reddy and Steven Tine + for contributing these changes. + +Wed Apr 14 17:06:22 1999 David L. Levine + + * ace/config-vxworks5.x.h: added #define ACE_HAS_DLL 0. + Thanks to Thomas Mehrkam for + reporting that it's necessary on NT hosts. + +Wed Apr 14 13:10:48 1999 Alexander Babu Arulanthu + + * ace/config-sunos5.7.h: + Enabled ACE_HAS_AIO_CALLS for Solaris + 7. ACE_POSIX_AIOCB_PROACTOR works now on this. + * examples/Reactor/Proactor/test_aiocb.cpp: Updated comments. + * ace/config-sunos5.6.h: Removed the ACE_AIORETURN/ERROR macros. + * ace/Proactor.cpp (ACE_Proactor): Removed debug print statments. + * ace/config-lynxos.h: Removed the ACE_AIORETURN/ERROR macros. + * ace/POSIX_Proactor.cpp: + * ace/WIN32_Asynch_IO.h: + * ace/WIN32_Asynch_IO.cpp: + * ace/WIN32_Proactor.h: + * ace/WIN32_Proactor.cpp: + * ace/Proactor_Impl.h: + Completed committing changes related to the + additions done earlier. + +Wed Apr 14 09:07:38 EDT 1999 Aniruddha Gokhale + + * ace/POSIX_Proactor.cpp: + + Several methods were missing the "int signal_number" parameter + that was added as mentioned in the log entry below. In addition, + an undefined ACE_SIG_AIO flag was used. I found a log entry in + ChangeLog-98b which says that ACE_SIG_AIO is ACE_SIGRTMIN. So I + replaced the 5 occurrences of ACE_SIG_AIO with ACE_SIGRTMIN. + +Wed Apr 14 02:34:13 1999 Alexander Babu Arulanthu + + Added additional parameter to all the Asynchronos + Operation method so that we can specify which real-time signal should + be used for each of the Asynchronous Operation. This only makes sense + in the ACE_SIG_Proactor configuration. + + * ace/Asynch_IO_Impl.h: + * ace/Asynch_IO.h: + * ace/Asynch_IO.cpp: + * ace/POSIX_Asynch_IO.h: + * ace/POSIX_Asynch_IO.cpp: + * ace/POSIX_Proactor.h: + + - For each asynchronous call issued, the real-time signal is + registered with the Proactor so that it can wait for the completions + using that signal. Previously, the signal number for all the + operations was the same signal and it was hard coded. + + - method which earlier existed only for + has been added to + also. just takes the from the result + object and registers the signal number. Registering involves, + masking the signal, setting the signal delivery for that RT signal + etc. + + - Allowing to specify signal number for each operation can be useful, + since the order in which the completions are delivered from the + completion queue, is based on the signal numbers in addition to the + priority. Applications might want to leverage this. + + * ace/OS.h: + OS.h has been defined with ACE_SIGRTMIN and ACE_SIGRTMAX, which are + defined to SIGRTMIN and SIGRTMAX respectively, for POSIX4 + platforms. For others, they are 0. + +Tue Apr 13 15:29:37 1999 David L. Levine + + * ace/Object_Manager.cpp: moved ACE_Service_Config signal + handler allocation from constructor to init (). Tidy, + tidy, tidy. + +Tue Apr 13 14:52:15 1999 Joe Hoffert + + * ace/ATM_Addr.cpp: Fixed g++ warnings of unused parameters. + +Tue Apr 13 14:47:18 1999 David L. Levine + + * tests/Basic_Types_Test.cpp (main): replaced call to sysconf () + with ACE_OS::sysconf (). Thanks to Erik Ivanenko + for noticing this. + +Tue Apr 13 14:17:48 1999 David L. Levine + + * ace/OS.cpp: replaced use of ACE_TSS with ACE_WIN32 or + ACE_HAS_TSS_EMULATION with native use of ACE_OS TSS, to remove + dependency on ace/Synch.h. Also, changed ACE_OS::NULL_key to + be -1 instead of 0 with ACE_HAS_TSS_EMULATION. + +Tue Apr 13 09:05:25 1999 David L. Levine + + * ace/Sched_Params.i (ACE_Sched_Priority_Iterator): removed + ACE_TRACE's, because Sched_Param is in the ACE_OS (lowest) + component. Thanks to Erik Ivanenko + for reporting this. + +Tue Apr 13 08:21:41 1999 Steve Huston + + * include/makeinclude/platform_sunos5_sunc++.GNU + * include/makeinclude/platform_sunos5_sunc++_orbix.GNU: Added a make + option, mt_orbix, to control whether the MT or non-MT variant of + Orbix is used. Default is MT; to use non-MT, "make mt_orbix=0". + + * ace/config-sunos5.x-sunc++-4.x-orbix.h: Include correct config-sunos5 + file based on OS version at compile time. Allow site config to + specify ACE_HAS_MT_ORBIX 0. + +Mon Apr 12 14:24:28 1999 David L. Levine + + * include/makeinclude/rules.local.GNU (realclean.local): + added BIN2, LIB2, SHLIB2, and SHLIBA2 to support + subsetting. It allows realclean to remove old BIN, + LIB, SHLIB, and SHLIBA targets after remove the + ace_components information file. Also, removed explicit + -f following $(RM). -f should be included in the RM macro + if appropriate for the platform. + +Mon Apr 12 13:01:32 1999 David L. Levine + + * ace/gethrtime.cpp (ACE_gethrtime),Makefile: added support for + rdtsc instruction with GHS on Intel targets. Thanks to + Andy Alvarez for providing the assembly + instructions to do this! + +Mon Apr 12 12:04:20 1999 Joe Hoffert + + * ace/Makefile,ATM_Addr.cpp: + Added ACE_ATM_Addr class back into Makefile since it's working + now. Fixed address initialization problem in ACE_ATM_Addr. + NOTE: This code currently only works with Solaris 2.5/2.6. Will + need to update the code for FORE's implementation on Solaris 2.7. + NOTE: To use FORE's XTI/ATM implementation the following #defines + need to be included (typically in ace/config.h): + #define ACE_HAS_FORE_ATM_XTI + #define ACE_HAS_TIUSER_H_BROKEN_EXTERN_C + #define ACE_TLI_TCP_DEVICE "/dev/xtisvc*" //(e.g., /dev/xtisvc0) + AND the following flags are needed to build the ace library + (typically in include/makeinclude/platform_macros.GNU): + CPPFLAGS += -I$(FORE_ROOT)/include + +Mon Apr 12 10:04:31 1999 Carlos O'Ryan + + * include/makeinclude/rules.local.GNU: + The default rule to compile .idl files is only enabled if + TAO_ROOT is not defined, otherwise we should use the rule in + $TAO_ROOT/rules.tao.GNU + +Mon Apr 12 00:18:23 1999 Douglas C. Schmidt + + * ACE version 4.6.36 released. + +Sun Apr 11 17:06:53 1999 Alexander Babu Arulanthu + + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp (run_client): Fixed + the warnings on Linux (config-linux.h). + +Sun Apr 11 16:09:16 1999 Douglas C. Schmidt + + * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp (run_client): Made + some fixes if ACE_MT_SAFE is false... Thanks to Alex for + reporting these. + +Sun Apr 11 16:02:49 1999 Alexander Babu Arulanthu + + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp (create_handler): + Fixed the warnings (control reaching end of block) and error (passing + u_long to close) which showed up on Linux(with config-linux.h) + + * performance-tests/Misc/preempt.cpp, + * examples/Threads/task_five.cpp: Replaced ACE_MT_SYNCH by + ACE_SYNCH to get it compile on Linux. + +Sun Apr 11 14:38:22 1999 Ossama Othman + + * configure.in: Added test for ACE_NEEDS_FUNC_DEFINITIONS. + Corrected bug in ACE_TEMPLATES_REQUIRE_SOURCE test. + +Sat Apr 10 14:02:11 1999 Douglas C. Schmidt + + * ace/Malloc[_Base]: Added a new no-op constructor for + ACE_Allocator to hopefully work around a problem with DEC UNIX + C++. + +Fri Apr 09 10:08:49 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + enable -fno-implicit-templates for targets other than + Intel. It appears to work for PPC targets, and is necessary + to avoid compiler warnings about different symbol sizes + in object files. Thanks to Thomas Mehrkam + for tracking down the source of the warnings, and verifying + that -fno-implicit-templates works for PPC targets. + +Fri Apr 09 08:14:55 1999 David L. Levine + + * include/makeinclude/rules.local.GNU: replaced "ln -s" with + $(LN_S), and set that to "ln -s" by default. Thanks to + Rainer Blome for suggesting this. + +Fri Apr 9 00:38:03 1999 Douglas C. Schmidt + + * ace/SOCK_Acceptor.cpp (shared_accept): Make sure to disable + ACE_NONBLOCK on the newly accepted socket since otherwise + applications can have weird behavior. Thanks to Margaret Reitz + and Irfan for helping to track this down. + +Thu Apr 08 13:47:03 1999 David L. Levine + + * BUG-REPORT-FORM,PROBLEM-REPORT-FORM, + README,VERSION,Makefile,Makefile.am,bin/make_release, + docs/ACE-bug-process.html: moved BUG-REPORT-FORM + to PROBLEM-REPORT-FORM. Thanks to Thomas Lockhart + for suggesting this. + + * docs/ACE-guidelines.html: added checklist for ACE/TAO changes, + including commit with a meaningful message, update a + ChangeLog, and ack and respond to the requestor. + +Thu Apr 8 13:18:22 1999 Alexander Babu Arulanthu + + * ace/SString.h: Updated the documentation to show that "Memory is + _not_ allocated/freed if is 0". + +Wed Apr 7 20:24:48 1999 Nanbor Wang + + * ace/CORBA_macros.h (ACE_DECLARE_NEW_CORBA_ENV): Removed the + trailing semi-column. Thanks to Marina for the reminder. + +Wed Apr 7 19:09:05 1999 Douglas C. Schmidt + + * ace/Containers_T: Replaced all Foo &Foo::operator=() with void + Foo::operator=() to avoid nasty problems with propagation of + errors. Thanks to Chris Schleicher for + reporting this. + +Wed Apr 07 17:25:07 1999 Nanbor Wang + + * apps/Gateway/Gateway/connection_config: Changed the connection 1 + and 2 to use localhost since it would probably be the most + common test case. + + * apps/Gateway/README: Replaced all references of proxy_config + to connection_config. Also change the example port number to + 10011 and 10012 which are the default port number used by the + gatewayd. + + Thanks to Sam Rhine for reporting + this. + +Wed Apr 7 16:36:41 1999 Darrell Brunsch + + * ACE-INSTALL.html: Put a note in saying to rebuild all + when upgrading releases. + +Wed Apr 07 14:25:47 1999 Joe Hoffert + + * ace/ATM_Addr.{h,cpp}: modified files to compile for + machines without FORE XTI/ATM support. + + * examples/IPC_SAP/TLI_SAP/CPP-{server,client}.cpp: + modified files to take out XTI/ATM code. + + * examples/IPC_SAP/TLI_SAP/Makefile,CPP-ATM-{server,client}.cpp: + added separate test files for XTI/ATM + +Wed Apr 7 14:20:59 1999 Jeff Parsons + + * ace/Basic_Types.h: + Added a signed companion to David's + ACE_UINT64_LITERAL, to avoid MSVC warnings. If + the platform has no 8-byte integer, this is + useless, but we must keep all compilers happy. + Also modified ACE_INT64_MAX tp use this, and + added a signed companion to + ACE_UINT64_FORMAT_SPECIFIER. + +Wed Apr 07 13:57:33 1999 David L. Levine + + * ACE-INSTALL.html: updated egcs shared library discussion + with information from Tim Rose + that egcs 1.1.1 statics libs work fine on Solaris 2.6. + +Wed Apr 07 13:14:34 1999 Nanbor Wang + + * ace/Service_Object.{h,i} (fini_called): Accessor to the + underlying fini_already_called_ flag. + + * ace/Service_Repository.cpp (find_i): Disallowed returning a + service which fini() has been called upon. + +Wed Apr 7 11:30:09 1999 Carlos O'Ryan + + * bin/auto_compile: + Added more tests to the script. + +Wed Apr 07 09:54:28 1999 David L. Levine + + * include/makeinclude/rules.local.GNU: instead of trying to + overwrite an existing symlink with ln -f, remove it first. + Thanks to Keith Rohrer for reporting that + Solaris' ln -f doesn't work. + + * ace/config-vxworks_5.x.h: added ACE_HAS_RECURSIVE_MUTEXES. + Thanks to Tom Venturella + for suggesting this, because the VxWorks semaphores that + ACE uses for mutexes are recursive. + + * ace/Synch.i (set_thread_id): added ACE_UNUSED_ARG (t), with + ACE_HAS_RECURSIVE_MUTEXES. + +Wed Apr 07 09:37:34 1999 David L. Levine + + * include/makeinclude/platform_osf1_4.0.GNU: disable warning + 1016 when optimization is enabled. That gets rid of the + "D:incint" warning about bzero in sys/select.h. + + * docs/ACE-guidelines.html: always use $(RM) instead of rm or + rm -f in Makefiles. + +Wed Apr 07 02:42:50 1999 Douglas C. Schmidt + + * ACE version 4.6.35 released. + +Wed Apr 07 02:04:30 1999 Douglas C. Schmidt + + * ACE version 4.6.34 released. + +Tue Apr 6 21:09:32 1999 Douglas C. Schmidt + + * ace/ATM_Addr: Added the ATM_Addr.* files into the CVS + respository. However, we're not going to enable this in the + Makefile or project files until they are tested. + +Tue Apr 6 20:48:16 1999 Jeff Parsons + + * ace/Basic_Types.h: + Added max and min #defines for various ACE data types. Now, + when using the ACE or ACE_CDR data types, we need not + depend on the vagaries of limits.h and float. + +Tue Apr 6 20:39:01 1999 Ossama Othman + + * ace/Log_Record.cpp (format_msg): + * ace/Log_Record.cpp (print): + + Changed host_name[] to *host_name since null pointers were being + passed into the host_name array. Strictly speaking, host_name + should thus be a pointer, not an array. Also cleaned up + ternary operator in format_msg() by parenthesizing some + expressions. + +Tue Apr 6 20:19:23 1999 Douglas C. Schmidt + + * ace/Makefile: Removed the ATM_Addr files until Joe can + get them checked in. + +Tue Apr 06 19:36:24 1999 Irfan Pyarali + + * ace/Active_Map_Manager.h (ACE_Active_Map_Manager_Key): Added a + separate structure that holds the fields of the key. This + separate structure makes it easier to manage copying the index + and the generation to and from the user buffer. + +Tue Apr 6 16:07:29 1999 Douglas C. Schmidt + + * ace/Synch.cpp (get_thread_id): If we have recursive mutexes then + it's not possible to get the id of the thread that's currently + holding the mutex. Thanks to David for reporting this. + +Tue Apr 6 15:50:14 1999 Balachandran Natarajan + + * docs/exceptions.html: + Updated the documentation. + +Tue Apr 6 15:25:56 1999 Darrell Brunsch + + * ace/High_Res_Timer.{h,i,cpp}: On Win32, don't call calibrate if + we cannot get the scale factor. Instead, just automatically + fall back on ACE_OS::gettimeofday (). + + Also added another static variable to represent the conditions + where the global scale factor is not set yet or high resolution + timers are not supported. + +Tue Apr 06 15:14:29 1999 David L. Levine + + * ace/Basic_Types.h: added ACE_UINT64_LITERAL for platforms + with ACE_LACKS_U_LONGLONG_T. + + * tests/Basic_Types_Test.cpp: added test of ACE_UINT64_LITERAL. + +Tue Apr 06 14:54:56 1999 Nanbor Wang + + * tests/Message_Queue_Test.cpp (performance_test): + * tests/Message_Queue_Notifications_Test.cpp (producer): Unicode + related change. + + * ace/ace_ce_dll.dsp: Added Active_Map_Manager.cpp. + + * ace/OS.h: + * ace/config-WinCE.h: CE now uses non-static object manager. + + * WindozeCE/WindozeCE.h: Instantiate the non-static object manager + within the class. + + * WindozeCE/WindozeCEDlg.cpp: We should register the bridge window + using its HANDLE so it would work no matter we build ACE with or + without MFC support. + +Tue Apr 6 14:17:06 1999 Joe Hoffert + + * ace/OS.h: Added support for the FORE ATM XTI interface. + + * ace/TLI_{Acceptor,Connector}: Added support for the FORE ATM XTI + interface. + + * ace/ATM_Addr: Added support for ATM address for the XTI ATM + driver. Eventually, this class will be generalized to work on + WinSock 2 ATM support, as well. + +Tue Apr 06 13:56:18 1999 Thomas Lockhart + + * include/makeinclude/rules.local.GNU: added -f to ln -s commands, + to force overwrite of old symlink. This eases moving of + installed ACE code trees. + +Tue Apr 6 00:17:59 1999 Kirthika Parameswaran + + * ace/DLL {.h, .cpp} (set_handle): Added the set_handle () method + which allows the user to set the ACE_SHLIB_HANDLE for the DLL. + Thanks to Bob McWhirter for bringing up this point. + +Mon Apr 5 22:27:02 1999 Douglas C. Schmidt + + * ace/config-irix6.x-sgic++-nothreads.h: Added + + #if !defined (ACE_HAS_NETDB_REENTRANT_FUNCTIONS) + #define ACE_LACKS_NETDB_REENTRANT_FUNCTIONS + #endif /* ACE_HAS_NETDB_REENTRANT_FUNCTIONS */ + + to fix a problem with SGI 6.5. Thanks to Bob Laferrie + for reporting this. + +Mon Apr 5 19:42:11 1999 Ossama Othman + + * configure.in: + * m4/acinclude.m4: + + Created the macro ACE_CHECK_FOR_CVS_DIR to prevent the configure + script from continuing the configuration if the current + configuration directory is in a CVS controlled directory. The + idea is to prevent automatically generated files from being + checked into the repository. This will prevent accidental + overwrites of ACE's current Makefiles by the automatically + generated ones, for example. + + In addition, this should ease the transition from the current + Makefile scheme to the new Auto{conf,make}/libtool scheme since + the current Makefiles can remain under CVS control without + the generate Makefiles interfering with them. + +Mon Apr 05 17:02:46 1999 David L. Levine + + * ace/High_Res_Timer.cpp (global_scale_factor ()): removed + comment that said we use BogoMIPS on Linux/Intel. We + only use it on Linux/alpha. Thanks to + Thomas Lockhart for + reporting this. + +Mon Apr 5 15:54:57 1999 Darrell Brunsch + + * ace/Profile_Timer.i: Removed ACE_OS::gettimeofday () + calls from start and stop. + +Mon Apr 05 15:09:49 1999 David L. Levine + + * ace/OS.h: removed second #include of netdb.h. Thanks to + John H Aughey for reporting this. + +Mon Apr 05 14:17:31 1999 David L. Levine + + * ace/Trace.cpp: removed unnecessary (and complicated) + #include of ace/ACE.h. + +Mon Apr 5 13:21:49 1999 Alexander Babu Arulanthu + + * ace/Proactor.cpp: + (svc): + * ace/POSIX_Proactor.cpp: + * ace/POSIX_Proactor.h: + * ace/Proactor.h: + * ace/Proactor_Impl.h: + * ace/WIN32_Proactor.cpp: + * ace/WIN32_Proactor.h: + * examples/Reactor/Proactor/test_timeout.cpp: + Completed Timers implementation for POSIX platforms. Timers + implementation is now common for POSIX and WIN32. Portable + ACE_Auto_Event is used in the auxillary thread to wait for the + Timer events. + The Timer's code in WIN32 has been removed and the common code exists + in Proactor.{h,cpp} only. + A new factory method called create_asynch_timer has been created to + create the Timer Result class. This is used internally by the Proactor + to post timer completions to the Proactor completion + queue. Application may want to use this directly to fake + completions. + +Mon Apr 05 12:05:01 1999 David L. Levine + + * ace/OS.*,Thread_Manager.{h,cpp}: moved flags members from + ACE_Thread_Descriptor to a new ACE_OS_Thread_Descriptor base + class, to remove dependency of OS.cpp on Thread_Manager.h. + +Sun Apr 4 18:19:05 1999 Ossama Othman + + * configure.in: + + Changed ANSI C++ cast test to fail on warnings. Currently, + only g++ and Sun C++ warning/error conversion is supported. + + Moved the ACE_SET_COMPILER_FLAGS macro after the AC_ARG_ENABLE + and AC_ARG_WITH calls so that user settings can influence what + compiler flags get set. + + Removed some M4 comments (`dnl') that were inside of the + template specialization test header block. The test was failing + since `dnl' was being quoted by M4 and actually placed inside + the test program source during test source compilation. Also + corrected a typo in the same test. + + Changed test for ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION so + that it attempts to link instead of just compile. Hopefully + this will make the test "tougher." + + * m4/compiler.m4: + + Added `-features=castop' compiler flag and completed support for + `-features=rtti' via `--enable-rtti'. These flags only work for + Sun C++ 4.2. Added support for the `-noex' Sun C++ compiler flag + when the user disables exception handling. + + * m4/platform.m4: Minor comment updates. + +Sat Apr 3 19:41:36 1999 Nanbor Wang + + * ace/TTY_IO.cpp (control): Disabled support for higher baudrate + for non-NT platforms. + +Sat Apr 3 19:37:07 1999 Douglas C. Schmidt + + * ace/TTY_IO.cpp (control): Added support for more modem speeds. + Thanks to Valery Arkhangorodsky for + reporting this. + +Sat Apr 3 17:02:48 1999 James CE Johnson + + * docs/tutorials/*: Regenerated all the HTML to get the hyperlinks + into the various headers. I'm sure somebody will let me know if I + munged it all. + + * docs/tutorials/(019|020|021) : Finally made myself sit down and + add Kirthika's last abstracts. + +Sat Apr 3 15:27:07 1999 Ossama Othman + + * Makefile.am + * ace/Makefile.am + * netsvcs/clients/Naming/Client/Makefile.am + * netsvcs/clients/Tokens/manual/Makefile.am + * netsvcs/lib/Makefile.am + * tests/Makefile.am + + Added targets to clean up files and directories created during + compilation. Automake will setup the `clean-local' targets to + run automatically whenever a `make clean' is done. + +Fri Apr 02 23:25:11 1999 David L. Levine + + * bin/make_release: added TAO/tao/Version.h. Thanks to + Nanbor for suggesting this. + + * ace/OS.cpp: removed use of ACE_Array with WIN32 and + TSS_EMULATION. In doing this, fixed an off-by-one error: + ACE_TSS_Cleanup::remove () would try to remove key value + "n" from an ACE_Array of size "n". + +Fri Apr 2 19:19:09 1999 Ossama Othman + + * bin/autogen: Update NEWS file by copying VERSION. Temporary + hack to make Automake happy when doing a `make dist'. + +Fri Apr 2 18:37:29 1999 Ossama Othman + + * configure.in: Placed the asynchronous IO checks right after + the thread library checks. This was done to make sure the + library with AIO support gets added to the link list before + the rest of the tests start, and to make sure that it doesn't + get added if AIO isn't supported or isn't working. + + * Makefile.am (ACE_EXTRA_DIST): Changed directory names to use + `$(top_srcdir)' instead of the current directory `.'. This + allows a distribution to be made from a directory other than + ACE's top level source directory. + + * m4/compiler.m4: Explicitly add the `-xildoff' flag to Sun CC's + LDFLAGS. This is just a precautionary measure. It shouldn't + be needed. + +Fri Apr 2 12:41:09 1999 Ossama Othman + + * ace/Containers_T.h (all of the classes listed below): + * ace/Containers_T.i (ACE_Array): + * ace/Containers_T.i (ACE_DLList): + * ace/Containers_T.cpp (ACE_Bounded_Stack): + * ace/Containers_T.cpp (ACE_Fixed_Stack): + * ace/Containers_T.cpp (ACE_Unbounded_Stack): + * ace/Containers_T.cpp (ACE_Unbounded_Queue): + * ace/Containers_T.cpp (ACE_Double_Linked_List): + * ace/Containers_T.cpp (ACE_Fixed_Set): + * ace/Containers_T.cpp (ACE_Bounded_Set): + * ace/Containers_T.cpp (ACE_Unbounded_Set): + * ace/Containers_T.cpp (ACE_Ordered_MultiSet): + * ace/Handle_Set.h (ACE_Handle_Set): + * ace/Handle_Set.i (ACE_Handle_Set): + + Changed assignment operators (operator=) to return a reference + to `*this' so that assignments may be chained. + +Thu Apr 1 23:41:56 1999 Jeff Parsons + + * ace/CDR_Stream.cpp: + Fixed write_array() to memcpy if doing a byte-swap + and size = 1. Previously, it was falling through + without writing anything. Thanks to Jerry De Master + for pointing this out. + +Thu Apr 01 22:38:25 1999 Douglas C. Schmidt + + * ACE version 4.6.33 released. + +Thu Apr 01 21:09:00 1999 Irfan Pyarali + + * Sequence.h (TAO_Base_Sequence): Made the copy constructor and + the assignment operator public since making them protected was + breaking some compilers. + + * ace/Filecache.cpp (ACE_Filecache_Object): Fixed typo: + should be . + +Thu Apr 1 19:41:26 1999 Ossama Othman + + * ace/IPC_SAP.h (ACE_IPC_SAP): + * ace/SOCK.h (ACE_SOCK): + * ace/SOCK_IO.h (ACE_SOCK_IO): + * ace/SV_Semaphore_Simple.h (ACE_SV_Semaphore_Simple): + * ace/Synch.h (ACE_Barrier): + * ace/Synch.h (ACE_Event): + * ace/Synch.h (ACE_Guard): + * ace/Synch.h (ACE_Null_Mutex): + * ace/Synch.h (ACE_RW_Mutex): + * ace/Synch.h (ACE_Semaphore): + Reverted the changes that made these base class destructors + virtual. They don't need to be virtual for the way they are + being used. + +Thu Apr 01 19:01:20 1999 Irfan Pyarali + + * ace/Containers.h (ACE_DLList_Node): + * ace/Containers_T.h (ACE_Double_Linked_List_Iterator): + * ace/Containers_T.h (ACE_Unbounded_Set_Iterator): + * ace/Event_Handler.h (ACE_Event_Handler): + * ace/Event_Handler.h (ACE_Notification_Buffer): + * ace/Filecache.h (ACE_Filecache_Handle): + * ace/Filecache.h (ACE_Filecache_Object): + * ace/Local_Tokens.h (ACE_TPQ_Iterator): + * ace/Local_Tokens.h (ACE_Token_Proxy): + * ace/Local_Tokens.h (ACE_Token_Proxy_Queue): + * ace/Malloc.h (ACE_Name_Node): + * ace/Malloc.h (ACE_Static_Allocator_Base): + * ace/Memory_Pool.h (ACE_MMAP_Memory_Pool): + * ace/Memory_Pool.h (ACE_MMAP_Memory_Pool_Options): + * ace/Memory_Pool.h (ACE_Shared_Memory_Pool): + * ace/Memory_Pool.h (ACE_Shared_Memory_Pool_Options): + * ace/OS.h (ACE_Countdown_Time): + * ace/OS.h (ACE_Thread_Adapter): + * ace/OS.h (ACE_Thread_Control): + * ace/OS.h (ACE_Thread_Exit): + * ace/Service_Object.h (ACE_Service_Type): + * ace/Signal.h (ACE_Sig_Adapter): + * ace/Synch.h (ACE_Adaptive_Lock): + * ace/Synch.h (ACE_TSS_Adapter): + + In some cases, classes with pointers *can* use the default copy + constructor and the assignment operator. A more careful + screening of the egcs -Weffc++ flag need to be done before a + copy constructor and assignment operator can be considered + harmful/dangerous. For now, the changes Ossama made have been + reverted. + + * ace/Filecache.cpp (ACE_Filecache_Object): + * ace/Signal.i (ACE_Sig_Action): + * ace/OS.i (ACE_Time_Value): + + Removed default contruction of structs. Old g++ is broken. + + * ace/Filecache.cpp (ACE_Filecache_Object): Fixed incorrect + initialization of . + +Thu Apr 1 16:22:18 1999 Ossama Othman + + * ace/Containers_T.h (ACE_Unbounded_Set_Iterator): + * ace/Containers_T.cpp (ACE_Unbounded_Set_Iterator): + The signatures for the prefix and postfix operators were + switched. Prefix operators take a void and return a + a reference and postfix operators take an int and returns a + copy. + + * ace/Containers.h (ACE_DLList_Node): + * ace/Containers_T.h (ACE_Double_Linked_List_Iterator): + * ace/Containers_T.h (ACE_Unbounded_Set_Iterator): + * ace/Event_Handler.h (ACE_Event_Handler): + * ace/Event_Handler.h (ACE_Notification_Buffer): + * ace/Filecache.h (ACE_Filecache_Handle): + * ace/Filecache.h (ACE_Filecache_Object): + * ace/Local_Tokens.h (ACE_TPQ_Iterator): + * ace/Local_Tokens.h (ACE_Token_Proxy): + * ace/Local_Tokens.h (ACE_Token_Proxy_Queue): + * ace/Malloc.h (ACE_Name_Node): + * ace/Malloc.h (ACE_Static_Allocator_Base): + * ace/Memory_Pool.h (ACE_MMAP_Memory_Pool): + * ace/Memory_Pool.h (ACE_MMAP_Memory_Pool_Options): + * ace/Memory_Pool.h (ACE_Shared_Memory_Pool): + * ace/Memory_Pool.h (ACE_Shared_Memory_Pool_Options): + * ace/OS.h (ACE_Countdown_Time): + * ace/OS.h (ACE_Thread_Adapter): + * ace/OS.h (ACE_Thread_Control): + * ace/OS.h (ACE_Thread_Exit): + * ace/Service_Object.h (ACE_Service_Type): + * ace/Signal.h (ACE_Sig_Adapter): + * ace/Synch.h (ACE_Adaptive_Lock): + * ace/Synch.h (ACE_TSS_Adapter): + Explicitly disallow use of implicitly generated copy + constructor and assignment operator to prevent inadvertent + memory leaks. + + * ace/Filecache.cpp (ACE_Filecache_Object): + * ace/OS.i (ACE_Time_Value): + * ace/Signal.i (ACE_Sig_Action): + * ace/Signal.i (ACE_Sig_Guard): + * ace/Signal.i (ACE_Sig_Set): + * ace/Synch_T.i (ACE_Guard): + Added base member initializers for class members that weren't + initialized. Better style and helps avoid some warnings. + + * ace/IPC_SAP.h (ACE_IPC_SAP): + * ace/SOCK.h (ACE_SOCK): + * ace/SOCK_IO.h (ACE_SOCK_IO): + * ace/SV_Semaphore_Simple.h (ACE_SV_Semaphore_Simple): + * ace/Synch.h (ACE_Barrier): + * ace/Synch.h (ACE_Event): + * ace/Synch.h (ACE_Guard): + * ace/Synch.h (ACE_Null_Mutex): + * ace/Synch.h (ACE_RW_Mutex): + * ace/Synch.h (ACE_Semaphore): + Made base class destructor virtual to ensure that it gets + called by derived class destructor. + +Thu Apr 1 13:31:56 1999 Jeff Parsons + + * ace/CDR_Stream.{i,cpp}: + Moved the destructors and a couple of short output CDR + functions from .cpp to .i. + +Thu Apr 1 03:30:19 1999 Nanbor Wang + + * bin/tao_svcconf.pl: New perl script to help converting TAO's + svc.conf file to use static services. + +Wed Mar 31 14:30:28 1999 Nanbor Wang + + * ace/OS.h: Fixed mis-matched #endif comments. Thanks to Eric + Eide for pointing this out. + +Thu Mar 31 14:30:20 Douglas C. Schmidt + + * tests/Message_Block_Test.cpp: updated some printouts. + +Wed Mar 31 10:46:31 1999 Steve Huston + + * ace/Message_Block_T.h: Add template arg to operator = definition for + ACE_Locked_Data_Block<>. + + * ace/config-aix-4.x.h: Don't set _BSD for AIX 4.2 (or 4.3). Setting + it works ok on AIX 4.2, but breaks TAO builds. Not setting it has + caused no regressions on 4.2, and allows TAO to build more. + +Tue Mar 30 23:28:41 1999 Irfan Pyarali + + * ace/Message_Block.cpp (init_i): This function was not releasing + the old data block (if was non-zero). Fixed this + problem and avoided the memory leak. Thanks to Sangwoo Jin + for reporting this leak. + + Also changed the constructors to set to zero. + + * tests/Message_Queue_Test.cpp (receiver): Fixed hacked use of + init() to prevent memory leak. The new init_i() fixes the leak. + +Tue Mar 30 23:24:02 1999 Ossama Othman + + * configure.in: + * m4/features.m4: + * m4/threads.m4: + Updated several library checks to use a single call of my + re/implementation of the new autoconf AC_SEARCH_LIBS test instead + of having several AC_CHECK_LIB calls in a row. Nice! + + The thread detection tests were overhauled. They are now + simpler but retain the same functionality as the previous + tests. They were greatly reduced in size so debugging, updating + and enhancing should be much easier now. + + * m4/acinclude.m4: + Reimplemented Autoconf's AC_SEARCH_LIBS into ACE_SEARCH_LIBS. + The functionality is the same but the ACE reimplementation + actually works when C++ is the test language. For some reason + Autoconf's test isn't being generated properly by GNU M4. + +Tue Mar 30 22:04:49 1999 Nanbor Wang + + * ace/config-win32-common.h: Added definition of + ACE_DEFAULT_THREAD_PRIORITY as 0. Thanks to John Morey + for reporting this. + +Tue Mar 30 21:31:01 1999 David L. Levine + + * Makefile (RELEASE_LIB_FILES): added bin/ and etc/. + Thanks to John Lindal + for reporting that the ACE library Makefile needs + bin/ace_components. + +Tue Mar 30 18:49:58 1999 Darrell Brunsch + + * bin/make_release: Added .ico to binary file types. + +Tue Mar 30 12:23:23 1999 Douglas C. Schmidt + + * ACE version 4.6.32 released. + +Tue Mar 30 11:03:31 1999 Douglas C. Schmidt + + * ace/Synch.h (ACE_Adaptive_Lock): Clarified a comment about how + to define a constructor in a subclass that initializes the + lock_. Thanks to Michael Kircher for reporting this. + +Tue Mar 30 10:37:43 1999 Ossama Othman + + * ace/OS.i (getpwnam_r): Added patch contributed by Roland Gigler + for getpwnam_r on SCO UnixWare 7. + +Mon Mar 29 20:22:44 1999 Ossama Othman + + * configure.in: + * m4/features.m4: + Added new M4 macro include file, and moved asynchronous IO tests + to `m4/features.m4'. The asynchronous IO tests were improved by + making them run-time tests. Cross-compiled platforms will fall + back to a compile-time test. Thanks to Alex for providing + run-time tests. The tests are based on his AIO tests found in + the examples/Reactor/Proactor directory. + +Sun Mar 28 18:02:54 1999 Ossama Othman + + * configure.in: + Enabled the C++ libtool support mentioned below. Removed all + references to CXXCPPFLAGS since the CPPFLAGS variable is used + by autoconf for both C and C++. + + * ltconfig: + Added my experimental libtool C++ support. The hacks I made + allow it to build C++ shared libraries. + + * m4/acinclude.m4: + * m4/threads.m4: + Renamed some variables. Namespace pollution was breaking most + of the tests. + +Sun Mar 28 12:20:44 1999 Nanbor Wang + + * ace/OS.h: + * ace/CORBA_macros.h: Moved ACE_NEW_THROW* and ACE_GUARD_THROW* + macros from OS.h to CORBA_macros.h. Also added + ACE_*GUARD_THROW_EX which has the new ACE try macros semantics. + CORBA_macros.h needs to include "OS.h" to source in the correct + platform configuration macros. + +Sun Mar 28 13:27:15 1999 Balachandran Natarajan + + * docs/exceptions.html: + Added a new example + +Fri Mar 26 23:35:28 1999 Nanbor Wang + + * ace/config-freebsd-pthread.h: Added ACE_NEEDS_SCHED_H. + + * ace/config-irix6.x-g++.h: + * ace/config-irix6.x-kcc.h: + * ace/config-irix6.x-sgic++.h: + * ace/OS.h: Reverted changes about ACE_LASKS_SCHED_H. + + * ace/config-dgux-4.x-ghs.h: + * ace/config-irix6.x-sgic++.h: + * ace/README: + * ace/OS.h: Renamed ACE_LACKS_SCHED_H with ACE_NEEDS_SCHED_H to + refect what it really means. The original name was quite + confusing. + +Fri Mar 26 18:16:25 1999 Carlos O'Ryan + + * ace/config-irix6.x-g++.h: + * ace/config-irix6.x-kcc.h: + * ace/config-irix6.x-sgic++.h: + There is no need to explicitly include or to define + ACE_LACKS_SCHED_H the file is present in IRIX 6.4. + +Fri Mar 26 17:57:25 1999 Nanbor Wang + + * ace/config-freebsd-pthread.h: Defined cuserid as an extern "C" + function. + + * ace/OS.h: should only be included when !defined + (ACE_LACKS_SCHED_H). + + Thanks to Eric Eide for sending the patch. + +Fri Mar 26 17:12:21 1999 Darrell Brunsch + + * ace/Profile_Timer.{h,i,cpp}: On Win32 platforms that + support RUsage, Profile_Timer will use both that and + High Resolution Timers for measurements. Depending + on the method, one or the other will be used. + +Fri Mar 26 17:02:00 1999 Ossama Othman + + * configure.in: + Improved ACE_HAS_USING_KEYWORD test so that it works for platforms + that support the `using' keyword but don't have the `std' namespace. + + Updated ACE_HAS_TEMPLATE_SPECIALIZATION test so that it works for + compilers that require the "template<>" syntax for specialization. + + Improved ACE_HAS_ONLY_SCHED_OTHER by checking for run time errors + when a thread scheduling policy other than SCHED_OTHER is set. + Thanks to David for suggesting this modification. + + * m4/acinclude.m4: + Added support for converting warnings to errors for Sun C++. + + * m4/threads.m4: + Added test to check if `-Kthread' compiler flag enables thread + support. SCO UnixWare 7 uses this flag. + +Fri Mar 26 07:21:33 1999 David L. Levine + + * tests/Reactor_Performance_Test.cpp (handle_input): wrapped + final return statement with ACE_NOTREACHED. + +Thu Mar 25 20:16:49 1999 Darrell Brunsch + + * bin/make_release: I wasn't using $bin_files for the + ACE+TAO.zip creation, so now that is fixed. Thanks to + Greg Ross for pointing this out. + +Thu Mar 25 16:31:27 1999 Carlos O'Ryan + + * ace/OS.h: + Added new macros for byte swapping, this are rather evil. They + add the correct padding to use a single long to represent a + short or char, but in such a way that the first bytes of the + long contain the required data. + Nobody should need that, but the IDL compiler does. + +Thu Mar 25 16:25:46 1999 Ossama Othman + + * configure.in: Added test for ACE_HAS_BROKEN_MAP_FAILED. + + * ace/OS.h: Added __USLC__ to list of macros in the conditional that + keeps the compiler from complaining about parameters which are not + used. This is needed for the C++ compiler on SCO UnixWare 7. + Thanks to Roland for letting me know about this. + +Thu Mar 25 14:55:37 1999 David L. Levine + + * tests/Basic_Types_Test.cpp: print out ACE version + information even with ACE_HAS_MINIMAL_ACE_OS. + +Thu Mar 25 13:52:57 1999 Irfan Pyarali + + * tests/Reactor_Performance_Test.cpp (handle_input): This code + wasn't entirely correct. Well actually, I think where was some + change in the semantics of Windows. Previously, once the handle + was close, it seems that the application still got notified if + there was data on the socket. With WinNT SP4, it seems that + once the handle was closed, no additional FD_READs were issued + by the OS, even if data was available on the socket. + + In ACE, both FD_READ and FD_CLOSE get mapped to handle_input(). + The way to know when the connection was closed is to do a recv() + in handle_input() and check for a zero return. When told of new + data, the old code in handle_input() only did one recv() of + BUFSIZ bytes. If there was more than BUFSIZ bytes of data on the + socket, there would be some data left on the socket. Hence, + when notified of FD_CLOSE, it did another recv() which + succeeded, and handle_input() never returned -1, making the test + hang. + + The change made was to make handle_input() call recv() until + EWOULDBLOCK occurs (note that the socket is in non-blocking + mode). Hence, when FD_CLOSE occurred, the socket did not have + any data left, recv() returned 0 and handle_input() returned -1, + which finally closed the test down correctly. + +Thu Mar 25 13:13:51 1999 Ossama Othman + + * Makefile.am (ACE.ifnames): + Placed rule generation of ACE.ifnames within a MAINTAINER_MODE + automake conditional. If a `--enable-maintainer-mode' option + isn't given on the configure script command line then don't + generate a new `ACE.ifnames' file. + + * configure.in: + Added AM_MAINTAINER_MODE so that maintainer level Makefile + features are disabled by default. + + * acconfig.h: + * ace/OS.h: + * ace/README: + Added ACE_HAS_BROKEN_MAP_FAILED macro for platforms that do not + cast MAP_FAILED to a (void *). Defining this macro prevents + compilers on those platforms from complaining about assigning + an int to a (void *). Thanks to Roland Gigler + for providing feedback about this. + +Thu Mar 25 11:30:44 1999 Balachandran Natarajan + + * docs/exceptions.html: + Corrected a couple of links... + +Thu Mar 25 01:04:00 1999 Alexander Babu Arulanthu + + * ace/OS.h (ACE_OS): Added ACE_DEFAULT_TEMP_DIR_ENV to be "TEMP" + for WIN32 and "TMP" for Unix. + +Wed Mar 24 18:30:18 1999 Douglas C. Schmidt + + * performance-tests/TTCP/ACE-C++/wrapper-new-ttcp.cpp: Added a new + version of this program that fixes a number of bugs with the old + one. Thanks to Hao Ruan for these fixes. + +Wed Mar 24 15:31:27 1999 Darrell Brunsch + + * High_Res_Timer.cpp: + * High_Res_Timer.h: + * OS.i: + + Changed the implementation of the High Resolution Timer on + Win32 to use QueryPerformanceCounter instead of assembly code. + The docs also say that this is MP-safe. Thanks to Gregory D. + Fee for suggesting this. + + * Profile_Timer.cpp: + * Profile_Timer.h: + * Profile_Timer.i: + + Now uses the High Res Timer on Win32 instead of rusage. + +Wed Mar 24 14:36:12 1999 Ossama Othman + + * ace/OS.cpp (ACE_OS_PREALLOCATE_OBJECT): Initialized obj_p to zero + to make egcs happy. + +Wed Mar 24 13:23:36 1999 David L. Levine + + * ACE-INSTALL.html: removed note about building netsvcs before + running the one-button test on WIN32. Thanks to Nanbor for + hacking run_tests.bat :-) + +Wed Mar 24 13:16:17 1999 Nanbor Wang + + * ace/WFMO_Reactor.i (handler): + * ace/Select_Reactor_T.cpp (handler_i): Made sure we can safely + pass out the event handler before we do so. Thanks to Michael + Preobrazhensky for reporting this. + + * tests/run_tests.bat: Do not run Time_Service_Test if + netsvcs/servers/main.exe doesn't exist. Thanks to + Jeffrey_Franks@i-o.com for reporting the problem and David for + suggesting the fix. + +Wed Mar 24 12:47:56 1999 David L. Levine + + * ACE-INSTALL.html: added note to build netsvcs on Win32 + before running run_tests.bat. Thanks to Jeff Franks + for suggesting this. + +Wed Mar 24 06:53:57 1999 David L. Levine + + * ace/OS.cpp (thr_create): SunOS 5.7 allows thread priority of 0, + so we no longer need to work around that. + +Tue Mar 23 22:49:15 1999 Ossama Othman + + * configure.in: Added a test for ACE_NEEDS_DEV_IO_CONVERSION. + +Tue Mar 23 22:29:20 1999 David L. Levine + + * ace/config-sunos5.7.h: undef ACE_HAS_ONLY_SCHED_OTHER, because + other scheduling policies are supported by SunOS 5.7. Thanks + to Ossama and autoconf for noticing this. + +Tue Mar 23 20:42:44 1999 Ossama Othman + + * tests/Cache_Manager_Test.cpp (main): Added missing ACE_START_TEST + and ACE_END_TEST macros. + + * m4/threads.m4: Modified UNIX International threads check to include + check for rwlock_destroy() in -lthread since thr_create() was + found without explicitly linking to -lthread on Solaris 2.5.1. + rwlock_destroy() should be found only by linking to -lthread which + will cause the configure script to add -lthread to the library link + list. + +Tue Mar 23 16:25:39 1999 David L. Levine + + * docs/ACE-subsets.html: added FOR_TAO subset sizes. + +Tue Mar 23 15:15:20 1999 Nanbor Wang + + * ace/Map_Manager.{i,cpp} (ACE_Map_Iterator_Base::operator*): + Moved this function to .cpp file to avoid compilation problem on + SunOS 5.6 with SunCC 4.2. Once we know a patch that will fix + the problem, we should move it back to .i file again. Thanks to + James Megquier for reporting the problem. + +Tue Mar 23 14:56:58 1999 Ossama Othman + + * acconfig.h: + * configure.in: + * ace/OS.h: + * ace/TLI.cpp: + * ace/config-osf1-4.0.h: Removed all references to + ACE_HAS_BROKEN_T_ERRNO and removed the definition of the _terrno() + function from TLI.cpp since it isn't a standard TLI function (at + least not the Steven's books that I've read). This also fixes a + problem on Solaris that was causing an autoconfigured build of + TLI.cpp to fail. + + * ace/Makefile.am: Make sure template source files get installed for + all cases. Previously, they only got installed if the template + source is required by the compiler. However, they are still needed + by compilers that don't explicitly require template sources to + be included in a file that references them. + + * configure.in: Fixed the test for ACE_TEMPLATES_REQUIRE_SOURCE. + Thanks to Carlos for his help on this. Removed the test for + ACE_HAS_BROKEN_T_ERRNO since it is no longer needed due to the + above change. + + * README: Added Konstantinos Margaritis to the + ACE contributor list. + +Tue Mar 23 12:57:40 1999 Douglas C. Schmidt + + * netsvcs/lib/Client_Logging_Handler.cpp: Split off the logging to + an ostream from the logging for STDERR. Thanks to Bill Rizzi + (rizzi@softserv.com) for pointing out this problem. + + * netsvcs/lib/Client_Logging_Handler.cpp: Changed the default from + ACE_STDOUT to ACE_STDERR to be consistent. Thanks to Bill Rizzi + (rizzi@softserv.com) for pointing out the problem. + +Tue Mar 23 12:06:04 1999 Nanbor Wang + + * ace/OS.h (ACE_THROW_SPEC): Added prgama to disable reporting + warning 4290 on MSVC. MSVC "supports" the exception + specification but doesn't provide an implementation for it. + Instead, it warns you the specification is ignored. + +Mon Mar 22 21:34:06 1999 David L. Levine + + * include/makeinclude/platform_sunos5_g++.GNU: use -m uname + option instead of -i, because GNU uname doesn't support -i. + +Mon Mar 22 18:59:55 1999 Steve Huston + + * ace/NT_Service.cpp (state): Changed the (DWORD *, ACE_Time_Value *) + version to reliably return -1 on any error. Thanks to Martin + Krumpolec for keeping me honest here, and for + sending in better code. + +Mon Mar 22 14:16:04 1999 David L. Levine + + * ace/OS.{h,cpp} (cleanup_tss): added tss_close (), to enable + deleting the native key on program termination. That's not + implemented yet, because it requires a separate + ACE_OS::thr_keyfree (ACE_OS_thread_key_t). + + * ace/OS.cpp (fini), README, ace/config-linux-lxpthreads.h: + removed ACE_FINI_HOOK support. It wasn't helping. + +Mon Mar 22 11:14:16 1999 Ossama Othman + + * Makefile.am: + Various minor updates. + + * configure.in: + * m4/platform.m4 + Moved known platform specific macro checks from `configure.in' + to `platform.m4'. + + * tests/Makefile.am: + Updated to build the DLL_Test shared library. Support for the + test is still broken (my fault :). + + * aclocal.m4: + * configure: + These are automatically generated so they shouldn't be under + CVS control. I Removed them from the CVS repository. + +Mon Mar 22 09:42:26 1999 David L. Levine + + * docs/ACE-subsets.html: added current status section. + +Mon Mar 22 01:04:23 1999 Nanbor Wang + + * ace/OS.cpp (free_all_keys_left): Changed to remove left-over + keys using TlsFree on Win32. We can't use ACE_OS::thr_keyfree + here because it tries to update the TSS in_use_ information + which has already been deleted at this point. + (cleanup_tss): Uncommented free_all_keys_left. + +Sun Mar 21 21:26:46 1999 David L. Levine + + * bin/make_release: fixed error status when building ACE+TAO. + Thanks to Doug for reporting this. + +Sun Mar 21 21:16:02 1999 Douglas C. Schmidt + + * ACE version 4.6.31 released. + +Sun Mar 21 20:45:57 1999 Douglas C. Schmidt + + * ACE version 4.6.30 released. + +Sun Mar 21 18:39:16 1999 Ossama Othman + + * ACE.ifnames: + + Updated with new macro list. + + * Makefile.am: + + Added the m4 directory to the distribution list and made some + minor updates. + + * ace/Makefile.am: + * m4/subsets.m4: + + Subsetting updates/corrections. + + * configure.in: + + Added work around for buggy glibc2.1 when including both + and . Added check for auto_ptr class + declaration since some platforms have but may not + declare the auto_ptr class. Shortened some of the "checking" + messages. + + * ace-config.1.in: ace-config script man page template + * aceConf.sh.in: ace-config "unknown" library script + + Added these files to the CVS repository. + + * config.guess: + * config.sub: + * ltconfig: + * ltmain.sh: + + Updated these files to the ones in the latest libtool. + + * libtool: + + Removed this since it is automatically generated for each platform. + It shouldn't be under CVS control. + +Sun Mar 21 17:59:22 1999 Carlos O'Ryan + + * ace/CDR_Stream.cpp: + Fixed a problem with ACE_OutputCDR::write_octet_array_mb, thanks + to Dave Meyer for isolating and reporting + this bug again [it was fixed in TAO and somehow it crept to the + ACE version of the CDR classes]. + +Sun Mar 21 17:42:08 1999 Ossama Othman + + * netsvcs/lib/Server_Logging_Handler_T.cpp (handle_logging_record): + Use ACE_NTOHL macro instead of system ntohl() to get around bug + in egcs-2.91.6x. + +Sun Mar 21 16:07:24 1999 Ossama Othman + + * ace/config-g++-common.h (ACE_HAS_USING_KEYWORD): + Define ACE_HAS_USING_KEYWORD for egcs 1.1.x. + +Sun Mar 21 09:44:30 1999 David L. Levine + + * tests/Timeprobe_Test.cpp: don't test ACE_Singleton + creation during static construction if ACE_HAS_PURIFY + is enabled, because it notices the memory-in-use. + + * examples/Naming/Makefile: changed SRC to PSRC. + + * examples/Naming/Makefile,performance-tests/Misc/Makefile, + tests/Makefile: + Use ace_components instead of the current ACE_COMPONENTS + setting to determine what should be built. + +Sat Mar 20 19:10:37 1999 Carlos O'Ryan + + * ace/Connector.h: + * ace/Connector.cpp: + * ace/Strategies_T.h: + * ace/Strategies_T.cpp: + Added new methods to the ACE_Connector, ACE_Strategy_Connector, + ACE_Connect_Strategy and ACE_Cached_Connect_Strategy. + The motivation for this new method is a bit convoluted: + In TAO we store the Svc_Handler returned from connect() as a + hint for later Cached_Connector lookups. But the location + where we store it could be shared between multiple threads. + To minimize the number of locks this hint is only modified and + examined by the Cached_Connector, while the lock in the + connection map is beign held. + + The problem arises when the hint is returned: another thread + could try to use the same hint location, detect that the hint + is in use and replace it before the thread that just requested + the object has a chance to read the hint value. + The solution is to use two variables: one is the hint + location, carefully protected by the Cached_Connector lock, + the other is a variable in the thread stack, they return the + same thing, but the second variable is not affected by changes + done by other threads. + + In short: we addeda connect() method that takes two arguments, + the first is just intented to update the cached connector + hint, the second is where the real connection gets returned. + + * tests/Makefile: + David discovered that using SRC to list the sources does not + work under some platforms. But using PSRC does. + +Sat Mar 20 15:51:14 1999 Ossama Othman + + * configure.in: + Added tests for: ACE_HAS_BROKEN_NAMESPACES + ACE_HAS_BROKEN_CONVERSIONS + ACE_HAS_BROKEN_CONDITIONAL_STRING_CASTS + ACE_HAS_PTHREAD_CONDATTR_SETKIND_NP + ACE_HAS_PTHREAD_MUTEXATTR_SETKIND_NP + ACE_HAS_PTHREAD_PROCESS_ENUM + + Added some minor updates and corrections. + +Sat Mar 20 09:06:10 1999 David L. Levine + + * tests/Map_Manager_Test.cpp: changed index () to slot_index () + and generation () to slot_generation (), to correspond to + Active_Map_Manager interface change. + + * examples/ASX/Message_Queue/Makefile: changed LSRC to PSRC. + + * ace/Object_Manager.{h,cpp}: removed complex support from + ACE_Object_Manager for cleanup of some ACE_Singleton locks + during static construction/destruction, only. The affected + lock types are ACE_Thread_Mutex, ACE_Mutex, and + ACE_RW_Thread_Mutex. ACE_Recursive_Thread_Mutex and + ACE_Null_Mutex will still be cleaned up if used to create + ACE_Singletons during static construction/destruction. As + noted in ace/Singleton.h, those are the best type of locks + to use with ACE_Singleton, anyways. + + This support was tricky to get right, and increased the size of + the Object_Manager object file by 46 to 59 percent. Now, if + ACE_Singletons are created during static construction or + destruction, with either an ACE_Thread_Mutex, ACE_Mutex, or + ACE_RW_Thread_Mutex lock, those locks will be dynamically + allocated and leaked. + +Sat Mar 20 02:03:53 1999 Ossama Othman + + * acinclude.m4: + + Split acinclude.m4 into several M4 macro files and moved those + files into the new `m4' subdirectory, includind acinclude.m4. + + * m4/acinclude.m4: + * m4/compiler.m4: + * m4/subsets.m4: + * m4/threads.m4: + + Added these M4 files. + + * bin/autogen: + + Script to regenerate auto{conf,make} and libtool related files. + Additional functionality may be added to this script in the + future. + + * Makefile.am: + * ace/Makefile.am: + * apps/gperf/src/Makefile.am: + * apps/gperf/tests/Makefile.am: + * apps/gperf/Makefile.am: + * apps/Makefile.am: + * netsvcs/clients/Logger/Makefile.am: + * netsvcs/clients/Naming/Client/Makefile.am: + * netsvcs/clients/Naming/Dump_Restore/Makefile.am: + * netsvcs/clients/Naming/Makefile.am: + * netsvcs/clients/Tokens/collection/Makefile.am: + * netsvcs/clients/Tokens/deadlock/Makefile.am: + * netsvcs/clients/Tokens/invariant/Makefile.am: + * netsvcs/clients/Tokens/manual/Makefile.am: + * netsvcs/clients/Tokens/mutex/Makefile.am: + * netsvcs/clients/Tokens/rw_lock/Makefile.am: + * netsvcs/clients/Tokens/Makefile.am: + * netsvcs/clients/Makefile.am: + * netsvcs/lib/Makefile.am: + * netsvcs/servers/Makefile.am: + * netsvcs/Makefile.am: + * man/man3/Makefile.am: ( NOT ADDED YET ) + * man/Makefile.am: ( NOT ADDED YET ) + * tests/log/Makefile.am: + * tests/Makefile.am: + + Added Automake makefile templates for ACE. + + * configure.in: + * m4/subsets.m4: + * ace/Makefile.am: + + Added support for David's ACE subsetting work. + +Fri Mar 19 23:36:37 1999 Irfan Pyarali + + * ace/Active_Map_Manager.h (ACE_Active_Map_Manager_Key): Changed + method index() to slot_index() and generation() to + slot_generation(). These changes were motivated by the + OpenEdition platform/compiler, which defines a macro called + index(). Also, changed the type of and + from u_long to ACE_UINT32 to get consistent size across + platforms. + +Fri Mar 19 22:50:19 1999 David L. Levine + + * bin/ace_ld: inserted ^['"]? at beginning of patterns that check + for -l and -L, to make sure they're at the beginning of arguments. + Thanks to Henric Jungheim for + suggesting this. + + * tests/Makefile: removed SRC, because it caused link problems + on DU 4.0. + +Fri Mar 19 18:56:26 1999 Carlos O'Ryan + + * Fixed several makefiles that did not have a SRC or LSRC variable + defined. + + * Re-generated the dependencies for both ACE and TAO, this time on + a platform that includes the template code. + + * include/makeinclude/rules.local.GNU: + Now we can run make depend inside a build directory. + Removed any $(ACE_ROOT)/ace/config*.h files from the dependency + list, those are not used. + +Fri Mar 19 18:05:27 1999 Ossama Othman + + * netsvcs/lib/Server_Logging_Handler_T.cpp (handle_logging_record): + Reverted change that was thought to work around egcs compiler bug. + The call to ntohl() within the templates still causes the compiler + to complain. + +Fri Mar 19 17:31:57 1999 Carlos O'Ryan + + * ace/CDR_Stream.cpp: + Fixed silly error in the InputCDR constructor taking an + ACE_Message_Block. + +Fri Mar 19 15:41:30 1999 Irfan Pyarali + + * ace/config-win32-common.h: Added CE fix. + +Fri Mar 19 15:03:54 1999 Carlos O'Ryan + + * ace/CDR_Stream.h: + * ace/CDR_Stream.i: + * ace/CDR_Stream.cpp: + Changed CDR to ACE_CDR. + Fixed ACE_InputCDR constructor when receiving a linked list of + Message_Blocks. + + * tests/CDR_Test.cpp: + Added a test for the constructor above. + +Fri Mar 19 10:29:17 1999 David L. Levine + + * ace/Singleton.cpp (instance): removed at_exit () calls + from both ACE_Singleton and ACE_TSS_Singleton, only + when the ACE_Object_Manager hasn't started or has already + shutdown. In those cases, the singletons will leak. + + * ace/Object_Manager.cpp (ACE_Object_Manager ctor), + ace/OS.cpp (ACE_OS_Object_Manager ctor): allow + newer instances to overwrite older ones, in case an application + #defines ACE_HAS_NONSTATIC_OBJECT_MANAGER and uses the + Object_Manager during construction of static objects. + + * tests/Timeprobe_Test.cpp: added test of ACE_Singleton + creation during construction of static objects. Timeprobes + can do that, when they're enabled. + + * ace/OS.cpp (fini), README: added ACE_FINI_HOOK support. + Applications can #define ACE_FINI_HOOK to any executable code, + and it will be executed on program termination. + + * ace/config-linux-lxpthreads.h: with ACE_HAS_TSS_EMULATION, + #define ACE_FINI_HOOK to insert a one-second sleep at + program termination. It's necessary to avoid occasional + segfaults of unknown origin, but they appear to be in the + LinuxThreads library. + + * bin/ace_components: added. It is used to record/access + which components were built into the ACE library. See next + entry for files that have been updated to use it. + + * ace/Makefile,tests/Makefile,tests/run_tests.sh: use + ace_components to record which components are in the ACE library. + Suppress build/run of tests that use Token and Other. + + * netsvcs/{clients,servers}/Makefile: use ace_components instead of + the current ACE_COMPONENTS setting to determine what should be built. + +Fri Mar 19 03:24:34 1999 Irfan Pyarali + + * ace/Singleton.cpp (instance): Commented out the call to + ACE_Object_Manager::at_exit(). Currently, this is causing + multiple instances of ACE_Object_Manager to get created, and + hence causing all sorts of problems. + + * ace/OS.cpp (cleanup_tss): Removed the call to + free_all_keys_left() (WIN32 only), because it causes + segmentation faults at shutdown. + +Fri Mar 19 00:15:21 1999 Nanbor Wang + + The following changes are specific to WindowsCE. They are + required to remove MFC dependency from CE port. Thanks to Eric + Covington for motivating this. + + * ace/config-WinCE.h: We no longer enfoce the use of MFC with ACE + CE port anymore. + + * ace/config-win32-common.h: When not using MFC, CE needs to + include and explicitly. + + * ace/Log_Record.cpp (print): + * ace/OS.{h,cpp} (ACE_CE_Bridge): Changed to use HWND to record + target window handle instead of CWnd. Also, we stop passing + output string in a CString anymore. The string is now created + using ACE_OS::strdup and must be released by the target window + using ACE_OS::free.. A small smart pointer class will be added + later. Notice that if you used ACE CE port before, the wParam + can no longer be casted to a CString*, it should be casted to + LPTSTR now. + + * WindozeCE/WindozeCEDlg.cpp: should be casted to LPTSTR + and it should be freed using ACE_OS::free. + + * ace/ace_ce_dll.dsp: CE programs (or DLL only?) not using MFC + must specify all libraries used by the program, even msvcrt. + +Thu Mar 18 22:21:39 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU: changed + ACE_QUOTE to '"', instead of "", on win32 hosts. "" just + evaporates to nothing; we really need one double quote. + Thanks to Hans Rohnert for verifying this. + +Thu Mar 18 18:49:32 1999 Marina Spivak + + * ace/SString.i (compare): fixed the function to work properly in + case strings have different lenghts. + + * ace/SString.cpp: fixed code to gracefully handle failed memory + allocations. + + * ace/SString.h: added comments about strings with release=0, not + necessarily being null terminated. + +Thu Mar 18 14:31:29 1999 Steve Huston + + * tests/DLL_Test.cpp: Use the new DLL_Test.h file that contains the + class defs - needed for AIX xlC. This should have been done + with the Mar 15 changes but slipped through the cracks. + + * include/makeinclude/platform_hpux_aCC.GNU: Added support for + building HP-UX 11 distributions with both 32 and 64 bits. + + * docs/tutorials/006/client_handler.cpp (Client_Handler::open): Changed + arg name to void_acceptor to avoid redefining it inside the function. + + * docs/tutorials/007/client_acceptor.cpp (Client_Acceptor(Thread_Pool&) + Fixed initialization of concurrency_. + + * docs/tutorials/018/Test_T.cpp (open): Fix ACE_UNUSED_ARG(arg). + + * ace/Message_Queue.h (ACE_Message_Queue_Base): Removed "= 0" from + ~ACE_Message_Queue_Base. AIX xlC warns that pure virtual dtor + needs an out-of-line definition to be a base of another class. + There is already a definition for the dtor in Message_Queue.i. + +Thu Mar 18 14:30:04 1999 Nanbor Wang + + * ace/OS.i (timezone): Removed the leading '::' to cope with VC + 5. Thanks to Lan Yaolong for reporting + this. + +Wed Mar 17 17:23:43 1999 Vishal Kachroo + + * ace/OS.i (timezone): Added support for timezone () on CHORUS + +Wed Mar 17 14:06:24 1999 Ossama Othman + + * acconfig.h: Some characters got removed so I put them back. + +Wed Mar 17 13:59:42 1999 Ossama Othman + + * configure.in: + * acconfig.h: + Added autoconf check for rename() system call. + +Wed Mar 17 07:55:38 1999 Nanbor Wang + + * include/makeinclude/platform_freebsd_pthread.GNU: Made some + adjustment for building ELF executables which are the default on + FreeBSD 3 and above. I'll incoporate Russell's LinuxThread + change later. + +Wed Mar 17 13:36:32 1999 David L. Levine + + * bin/make_release: return non-zero exit status on failure. + +Wed Mar 17 12:47:04 1999 Nanbor Wang + + * ace/Service_Config.cpp (open_i): Also delete the parse buffer + before exiting the function for it is no longer needed. We + still need to deallocate the buffer at close method to prevent + the case when uses manipulate Service_Config directly using + process_directives. + +Wed Mar 17 12:33:35 1999 Douglas C. Schmidt + + * ace/OS.i: Reenabed ACE_OS::rename() and we'll see which + platforms need to have ACE_LACKS_RENAME. Thanks to Susan + Liebeskind for reporting this. + +Wed Mar 17 10:46:26 1999 Ossama Othman + + * ace/Message_Block.i (space): Moved ACE_Message_Block::space() + after inline declarations of ACE_Message_Block::end() and + ACE_Message_Block::wr_ptr() to prevent "used before it was + declared inline" warnings on end() and wr_ptr(). + +Wed Mar 17 10:24:26 1999 David L. Levine + + * ace/OS.cpp (argv_to_string): initialized temp to 0 to avoid warnings + from VxWorks g++. + ace/OS.i (strenvdup): initialized temp to 0 to avoid warnings from + VxWorks g++. Thanks to Hans Rohnert for reporting these. + + * include/makeinclude/platform_vxworks5.x_g++.GNU (RANLIB): + replaced /bin/true with @true, to avoid build warning on + NT hosts. Thanks to Hans Rohnert for reporting this. + +Wed Mar 17 09:58:43 1999 Douglas C. Schmidt + + * ace/Svc_Conf.l (yy_delete_parse_buffer): Added a check for NULL + to avoid freeing buffers multiple times. Thanks to Tom Arbuckle + for this fix and to + Nanbor for noticing the problem in the first place! + +Wed Mar 17 08:30:58 1999 David L. Levine + + * ACE version 4.6.29 released. + +Wed Mar 17 03:12:43 1999 James C. Hu + + * ace/Message_Block.i: Changed the definition of space () to be + something more useful than it was. Thanks to Bill Rizzi + (rizzi@softserv.com) for pointing out the problem. + + * ace/Cache_*: Removed by popular decree. Can be found in + JAWS/PROTOTYPE. + +Wed Mar 17 03:06:20 1999 Nanbor Wang + + * ace/Service_Config.cpp (close): Re-enabled cleaning up the lex + buffer. + + * ace/Svc_Conf_l.cpp (ace_yy_delete_parse_buffer): We should not + remove uninitialize buffer. + +Tue Mar 16 19:48:57 1999 Irfan Pyarali + + * ace/Makefile and tests/Makefile: Reverted these files to the + pre-Cache_Manager state. The Cache_Manager files don't compile + on g++ and vxworks and we need to make a release now. + + * ace/Map_T.h (class ACE_Noop_Key_Generator): Added new class. + This class makes it easy to use the map adapters when you don't + care about generating new keys. + +Tue Mar 16 11:36:41 1999 Nanbor Wang + + * ace/config-freebsd-pthread.h: FreeBSD 2.2 and above also support + threads, but siginfo_t is only supported on FreeBSD 3.0 and + above. Thanks to Goldshtain Dmitry + for pointing these out. + +Tue Mar 16 16:46:04 1999 David L. Levine + + * ace/Hash_Bucket_T.h: added class to friend + ACE_Hash_Bucket_DLCStack_Iterator declaration. + +Tue Mar 16 16:35:39 1999 David L. Levine + + * docs/ACE-guidelines.html: never use TRUE, true, FALSE, false, etc. + +Tue Mar 16 15:58:07 1999 Nanbor Wang + + * ace/Service_Config.cpp (close): Don't call the + ace_yy_delete_parse_buffer for now. It is causing access + violation. + +Tue Mar 16 15:15:00 1999 Chris Gill + + * ace/ACE.{cpp, i} + ace/OS.{cpp, h, i} + ace/FIFO.cpp + ace/Log_Record.cpp + ace/SOCK_Dgram_Mcast.cpp + ace/SPIPE_Connector.cpp + ace/TLI_Acceptor.cpp + ace/config-psos-diab-mips.h (new) + ace/config-psos-diab.h + ace/config-psos-tm.h + ace/streams.h: integrated pSOS/MIPS changes into ACE. Thanks to + Jaepil Kim (jpkim@lgsoft.com) for completing the ACE pSOS port + for the MIPS platform, and for sending these modifications. + +Tue Mar 16 14:25:03 1999 Steve Huston + + * ace/ACE.cpp (get_ip_interfaces, count_interfaces, get_bcast_addr): + On AIX, use CSIOCGIFCONF instead of SIOCGIFCONF to retrieve + interface information. Thanks to Eric Newton for + figuring this out. + +Tue Mar 16 12:20:53 1999 Balachandran Natarajan + + * ace/Service_Config.h (ACE_Service_Config): + Added documentation for the parse_args () method. This was in + request to Bill Rizzi . + +Tue Mar 16 10:57:46 1999 Douglas C. Schmidt + + * ace/Svc_Conf.l: Added a new method ace_yy_delete_parse_buffer() + that frees up FLEX buffers when the program is done. Thanks to + Tom Arbuckle for + this fix. + + * examples/ASX/Message_Queue/buffer_stream.cpp (main): Changed pm + to cm and vice versa to be consistent. Thanks to Rainer Blome + for reporting this. + +Tue Mar 16 10:50:42 1999 Steve Huston + + * include/makeinclude/platform_aix4_cset++.GNU: New file to cover + all AIX 4.x versions with the C Set++ (xlC) compiler. + + * include/makeinclude/platform_aix.GNU, platform_aix4.2.GNU: These + files are deprecated; they simply include the new file above, + platform_aix4_cset++.GNU. + +Tue Mar 16 10:38:35 1999 Carlos O'Ryan + + * ace/Hash_Bucket_T.cpp: + Removed default parameter declaration from the constructor for + ACE_Hash_Bucket_Manager definition. Default parameter + declarations can only show up in the function declaration. + +Tue Mar 16 10:25:53 1999 Steve Huston + + * ace/config-aix-4.1.x.h, config-aix-4.2.x.h: These now simply + include config-aix-4.x.h. All further changes for any AIX 4.x + version should go in config-aix-4.x.h. + +Tue Mar 16 08:12:54 1999 Steve Huston + + * ace/Thread_Manager.cpp: In thread_within(ACE_thread_t), replaced use + of '==' with ACE_OS::thr_equal. In hthread_within (ACE_hthread_t), + replaced use of '==' with ACE_OS::thr_cmp. Thanks very much to + Peter Windle for pointing this out. + + * README: Added Peter Windle to the list of distinguished contributors. + +Tue Mar 16 03:05:22 1999 James Hu + + * ace/Cache_Hash_T.{cpp,h}: + * ace/Cache_Heap_T.{cpp,h}: + * ace/Cache_List_T.{cpp,h}: + * ace/Cache_Manager.{cpp,h}: + * ace/Cache_Manager_T.{cpp,h}: + * ace/Cache_Object.{cpp,h}: + * ace/Hash_Bucket_T.{cpp,h}: + Incorporated fixes from purify and benchmarking sessions at Entera. + Cosmetic changes coming soon (documentation strings and removal + of magic numbers). + + * ace/Makefile: Added above files to Makefile. + + * ace/OS.i: FreeBSD does not support the timezone() function as + documented by Vishal below. Using Chris Gill's implementation + for LynxOS. + + * tests/Makefile: + * tests/Cache_Manager_Test.cpp: Added this test to illustrate + Cache_Manager. Still needs changes to use ACE_DEBUG instead of + cerr. + +Mon Mar 15 19:05:22 1999 Steve Huston + + * ace/config-aix-4.x.h: New config file that covers all of the AIX 4.x + versions with C Set++ (xlC) and g++. Many thanks to Susan + Liebeskind for doing to port to AIX 4.3 and + testing, providing needed changes! + + * ace/OS.i (wait): Fixed to handle ACE_HAS_UNION_WAIT case correctly, + without depending on AIX - thanks to Susan Liebeskind for this too! + + * ace/ACE.cpp (fork, with zombie avoidance): Fixed to work right + with ACE_HAS_UNION_WAIT (ala AIX 4.2). + + * include/makeinclude/rules.lib.GNU: New template instantiation + scheme for AIX with C Set++ (xlC); goes with... + * etc/xlc_dummy.cpp: New file, purpose of which is to help with AIX + xlC template instantiation. This is the new, improved method from + IBM suport. It still generates a zillion duplicate definition + warnings, but IBM doesn't have any better solution. + + * include/makeinclude/platform_aix4.2.GNU: This will work with both + AIX 4.2 and 4.3 now. I'll take care of the naming soon. + + * tests/Map_Test.(cpp h): Moved template defs to new file, Map_Test.h + to satisfy AIX xlC. Thanks to Susan for this too. + + * tests/DLL_Test.(cpp h): Moved template defs to new file, DLL_Test.h + to satisfy AIX xlC. + + * tests/Makefile, Makefile.DLL: Fixed to build libDLL_Test correctly + on AIX w/ xlC. + + * tests/run_tests.sh: Sets LIBPATH correctly for AIX (4.2 at least). + +Mon Mar 15 00:26:31 1999 Douglas C. Schmidt + + * netsvcs/ACE-netsvcs.html: Updated this to document the current + version. Thanks to Bill Rizzi for + reporting this. + + * netsvcs/lib/Client_Logging_Handler.cpp: Make sure that debug + messages go to stderr and log messages go to stdout. Thanks to + Bill Rizzi for reporting this. + + * netsvcs/lib/Client_Logging_Handler.cpp (fini): Oops, fixed a + minor buglet with return values. Thanks to David for reporting + this. + + * netsvcs/lib/Client_Logging_Handler.cpp (send): Added a check to + make sure we don't crash if the ostream is NULL. Thanks to Bill + Rizzi for reporting this. + +Sun Mar 14 22:54:41 1999 Douglas C. Schmidt + + * netsvcs/lib/Client_Logging_Handler.cpp (init): Added an + ACE_OS::unlink() to prevent STREAM pipes from getting confused + if this application doesn't shutdown gracefully. Thanks to Bill + Rizzi for reporting this. + +Sun Mar 14 19:51:25 1999 Ossama Othman + + * configure.in: Added real-time support library `-lrt' check to + asynchronous IO functions/libraries checks. + + GNU glibc 2.1 adds support for the POSIX 1b real-time + specification in the library `librt'. The POSIX asynchronous IO + functions may be found in that library. Currently, `-lpthread' + must also be linked to in addition to `-lrt'. + +Sun Mar 14 17:20:09 1999 Douglas C. Schmidt + + * ace/Log_Msg: Generalized the enable_debug_messages() and + disable_debug_messages() methods so they can be used to enable + or disable arbitrary priorities. Thanks to Susan Liebeskind + for suggesting this. + +Sun Mar 14 14:46:00 1999 Chris Gill + + * ace/OS.i (tzset,timezone): pSOS doesn't support these two + functions. + + * ace/OS.{cpp, h}: added comments clarifying usage for + ACE_Time_Value::max_time, use of ACE_PSOS_TM in ACE_OS::signal (). + +Sun Mar 14 01:30:43 1999 Nanbor Wang + + * ace/OS.i (tzset,timezone): WinCE doesn't support these two + functions. + +Sat Mar 13 12:14:34 1999 Douglas C. Schmidt + + * ace/Thread_Manager: Changed the following methods: + + int task_list (..) + int thread_list (...) + int hthread_list (..) + int thread_grp_list (...) + int hthread_grp_list (...) + + to return actual number of fetched values. + + * ace/Thread_Manager: Added two new methods, task_all_list() and + thread_all_list(), which return lists of all the tasks and + threads in a Thread_Manager, respectively. Thanks to Zoran + Ivanovic for contributing this. + + * ace/Shared_Memory_{MM,SV}.h: Clarified the relationship of + these classes to the more powerful ACE_Malloc<> abstraction. + Thanks to Ti Z for suggesting this. + +Sat Mar 13 13:27:55 1999 David L. Levine + + * ace/OS.i (timezone,tzset): not supported on VxWorks. + + * include/makeinclude/ platform_osf1_4.0.GNU: added suppression + of msg 1180, statement causes unreachble return, with cxx 6.2 + and later. It doesn't like ACE_OSCALL_RETURN and + ACE_NOTSUP_RETURN, though it seems to be going overboard. + The warnings appeared with cxx 6.2-009. If someone uses + 6.2-007, they might have to manually remove the 1180 suppression. + + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-fancy.cpp (handle_events), + C-inserver.cpp (main), + netsvcs/lib/Server_Logging_Handler_T.cpp (handle_logging_record), + apps/Gateway/Gateway/Concrete_Connection_Handlers.cpp (svc): + replaced NOTREACHED comment with ACE_NOTREACHED macro. DU cxx + started complaining about the unreached return statement. + +Sat Mar 13 16:16:13 1999 James CE Johnson + + * docs/tutorials/021: Added some comments to page04 about the + template parameters and the use of the ACE_LOCK parameter in + particular. (Thanks to Bala for the suggestion.) + +Sat Mar 13 00:37:17 1999 Douglas C. Schmidt + + * ACE version 4.6.28 released. + +Fri Mar 12 20:17:47 1999 Irfan Pyarali + + * ace/Select_Reactor_Base.cpp (handle_input): + * ace/WFMO_Reactor.cpp (handle_signal): Added support for + dispatching QOS_MASK and GROUP_QOS_MASK. + +Fri Mar 12 19:13:11 1999 Carlos O'Ryan + + * ace/OS.i: + Implemented ACE_OS::timezone() for LynxOS. + +Fri Mar 12 16:31:19 1999 Ossama Othman + + * ACE-INSTALL.html (Linux): added note about non-thread safe + glibc 2.0 dynamic loader. The dynamic loader in glibc 2.1 is + thread safe. + +Fri Mar 12 13:44:54 1999 Kirthika Parameswaran + + * tests/DLL_Test.cpp (main): Fixed the errors on VxWorks and + LynxOS by shifting the START_TEST before the #ifdefs began. + +Fri Mar 12 12:53:17 1999 David L. Levine + + * ace/config-sunos5.5.h: with CC 5.0, replaced ACE_LACKS_ACE_IOSTREAMS + with ACE_USES_OLD_IOSTREAMS. + + * include/makeinclude/platform_sunos5.5_sunc++.GNU: with CC 5.0, + added -library=iostream,no%Cstd to CCFLAGS. + + Thanks to Diethard Ohrt for the + above two updates to support CC 5.0. + +Fri Mar 12 12:09:14 1999 David L. Levine + + * ace/OS.h: fixed comment after #endif to match its #ifdef. + +Fri Mar 12 11:46:55 1999 Vishal Kachroo + + Added two new functions tzset () and timezone (). The former sets the + timezone information based on an environment variable TZ which is + set when the user logs on. (For St. Louis TZ=US/Central and + timezone = 360 minutes or 6 hrs. from GMT.). timezone () retrieves + the timezone value in seconds. + + * ace/OS.h (ACE_OS): Added a wrapper for timezone () and tzset (). + * ace/OS.i (ACE_OS): Added Implementation for the above functions. + + The timezone information is being used in the Time Service. + +Thu Mar 11 20:11:13 1999 Douglas C. Schmidt + + * ace/Get_Opt.cpp (operator): Reverted the following change since + it will break documented behavior. Thanks to Jon Biggar for + reporting this. + + * ace/Get_Opt.cpp (operator): When the getopt encountered an + unknown option or an option with a missing required argument, it + returned '?' and continues to allow processing with the next + argument (no problem so far). However, if it encountered an + argument that is not an option (i.e. no '-' in front) or if it + encounters a double dash (i.e. '--') it returns EOF which + disallows further processing. Now, it returns a '?' after + advancing optind to allow further processing. Thanks to Mark + Laffoon for reporting this. + +Thu Mar 11 15:34:24 1999 David L. Levine + + * ace/ACE.cpp: removed unnecessary #includes of ace/IPC_SAP.h, + ace/Process.h, and ace/SString.h. Thanks to Elias Sreih + and Liang Chen + for suggesting this. + + * ace/OS.cpp (ACE_OS::thr_setspecific): on ACE_WIN32 with + ACE_HAS_TSS_EMULATION, don't register the one native key + with ACE_TSS_Cleanup::instance (). There's no need, because + it doesn't have a destructor. And, it prevents startup + because the ACE_TSS_Cleanup structures haven't been set up + completely when it is called. Thanks to Terry Rosenbaum + for reporting this. + + Thu Mar 11 14:04:15 1999 David L. Levine + + * include/makeinclude/platform_chorus_ghs.GNU: added protection + to not reset exceptions flag if it was defined. + +Thu Mar 11 12:53:41 1999 Carlos O'Ryan + + * ace/Thread_Manager.i: + The method to return the number of threads was using thr_lists_ + as a pointer, but it isn't. + +Thu Mar 11 10:12:51 1999 Douglas C. Schmidt + + * ace/Thread_Manager: Added a method to return the current number + of threads in the ACE_Thread_Manager. Thanks to Zoran Ivanovic + for suggesting this. + +Thu Mar 11 10:27:51 1999 Kirthika Parameswaran + + * tests/DLL_Test.cpp (main): Allowed the main to be accessible on + all platforms by shifting the #ifdefs inside the main. The + problem arose due to the main being declared an undefined + reference on LynxOS. + +Wed Mar 10 13:31:37 1999 Ossama Othman + + * ace/config-linux-common.h: + Commented out ACE_HAS_DLFCN_H_BROKEN_EXTERN_C, ACE_LACKS_MSYNC and + ACE_LACKS_MADVISE. They are no longer needed for recent revisions + of glibc 2.x. Thanks to for pointing this out. + +Wed Mar 10 11:05:39 1999 David L. Levine + + * ace/Thread.h,ace/Thread_Manager.h (exit): added comment + that exit () should not be called by main thread. + + * ace/OS.h: added an ACE_OS_thread_key_t typedef on WIN32 + with ACE_HAS_TSS_EMULATION. Thanks to Terry Rosenbaum + for reporting that + it was missing. + + * include/makeinclude/platform_osf1_4.0.GNU: disable msg 1136 with + cxx 6.1-029. Thanks to Doug Anderson for + reporting this. + +Wed Mar 10 10:57:16 1999 Carlos O'Ryan + + * ace/Basic_Types.h: + Fixed minor problem that would show up if sizeof(int)==2; thanks + to Cristian Ferretti for reporting this + problem. + +Wed Mar 10 10:13:52 1999 Nanbor Wang + + * ace/Message_Block.i (reference_count): Made sure the inline + function is defined before used. Thanks to David for noticing + this. + +Wed Mar 10 08:52:59 1999 David L. Levine + + * include/makeinclude/platform_chorus.GNU: fixed + exceptions=1 support. Thanks to Wei Chiang for + reporting this. + + * include/makeinclude/wrapper_macros.GNU: added exceptions=1 + support for pre-2.8 g++. It's not recommended, because pre-2.8 + g++ doesn't support exceptions well. It's provided for + completeness. + + * include/makeinclude/platform_chorus.GNU: removed + exceptions=1 support, because now it's in wrapper_macros.GNU. + +Tue Mar 09 21:54:39 1999 David L. Levine + + * netsvcs/Makefile,netsvcs/clients/Makefile: updated + ACE_COMPONENTS check to allow everything to be built + in the default case, when ACE_COMPONENTS isn't set. + Thanks to Carlos for noticing this. + + * netsvcs/Makefile,netsvcs/servers/Makefile: moved + netsvcs/server build suppression, when ACE_COMPONENTS + lacks Other, from netsvcs/Makefile to netsvcs/servers/Makefile. + + * examples/Naming/Makefile: suppress build if ACE_COMPONENTS + is defined and doesn't contain Other. + + * performance-tests/Misc/Makefile: don't build test_naming + if ACE_COMPONENTS is defined and doesn't contain Other. + + * ace/Log_Record.i (length): cast the long argument to ACE_UINT32, + to avoid warning message if long is greater than 4 bytes. + Thanks to Hao Ruan for reporting this. + +Tue Mar 9 20:56:35 1999 Carlos O'Ryan + + * include/makeinclude/rules.nested.GNU: + If the DIRS macro is not set we simply do not recurse. Before + this change we got an error from the shell. + + * bin/auto_compile: + If there are no errors then send a message when a warning was + detected during compilation. + +Tue Mar 09 15:15:19 1999 David L. Levine + + * bin/create_ace_build: check for ace/ and include/ directories + in top level directory, instead of ace/, examples/ and netsvcs/. + This allows use with trimmed-down workspaces. Thanks to Jeff + for suggesting this. + + * include/makeinclude/platform_chorus_ghs.GNU: added exceptions + make option support. Thanks to Wei Chiang for reporting that + it wasn't supported. + +Tue Mar 9 12:59:09 1999 Douglas C. Schmidt + + * docs/ACE-subsets.html: Updated the subsets to reflect what's + actually in the ACE Makefile. + + * ace/Message_Block.h: Changed the private section in both + ACE_Message_Block and ACE_Data_Block to protected allowing + derived classes to access data members of the parent class; + Thanks to Alexander Davidovich for suggesting + this. + + * ace/Message_Block: Added new reference counting accessor methods + to Message_Block and Data_Block. Thanks to Alexander Davidovich + for suggesting this. + +Tue Mar 09 11:21:49 1999 Nanbor Wang + + * ace/Message_Block.h: For some reason, default ctor and operator= + must be declared private instead of protected if they are not to + be accessable. Otherwise, VC complains. + +Tue Mar 09 01:06:44 1999 Douglas C. Schmidt + + * ACE version 4.6.27 released. + +Tue Mar 09 00:39:23 1999 Douglas C. Schmidt + + * ACE version 4.6.26 released. + +Mon Mar 08 23:23:35 1999 Nanbor Wang + + * ace/Thread_Manager.{h,cpp} (thread_within,hthread_within, + thread_grp_list,hthread_grp_list): Added new functions to + check if a thread is managed by the thread manager and collect + the thread ids/handles in a thread group. Thanks to XuYifeng + for motivating the addition. + +Mon Mar 08 22:23:33 1999 David L. Levine + + * ace/Makefile: added FOR_TAO short-cut to ACE_COMPONENTS. + If the ACE_COMPONENTS variable is set to FOR_TAO, then + only the components necessary to support TAO will be + built into libACE. + + * netsvcs/clients/Makefile: suppress build if Other + ACE_COMPONENT isn't built. + + * netsvcs/Makefile: suppress server build if Other and Token + ACE_COMPONENT aren't built. + +Mon Mar 8 17:35:04 1999 Gonzalo Diethelm + + * ace/NT_Service.cpp: + * ace/NT_Service.h: + Now the handle_control method calls separate protected virtual + methods to do its work. That way, it is easier to override what + must be done on each case, just by overriding one of the new + methods. + +Mon Mar 08 15:41:08 1999 Steve Huston + + * include/makeinclude/platform_hpux.GNU: Added -DACE_LACKS_PRAGMA_ONCE. + Thanks to Hao Ruan for reporting this. + + * README: Added Hao Ruan to the list of contributors. + +Mon Mar 08 12:27:54 1999 David L. Levine + + * ace/Service_Config.cpp (handle_signal): added ACE_UNUSED_ARG (sig) + if ACE_NDEBUG is defined, to avoid compilation warning about + unused argument with debug=0. + + * docs/ACE-subsets.html: added subset characterizations on + several platforms. + + * include/makeinclude/platform_sunos5_ghs.GNU: fixed AR and + ARFLAGS to use CC to build static libs. It looks like GreenHills + no longer supplies a separate archiver with 1.8.9. + +Mon Mar 08 11:58:03 1999 Nanbor Wang + + * ace/Task.cpp (activate): Made sure we don't mess with the passed + in grp_id if the task was not previously actived. Thanks to + XuYifeng for noticing this. + +Fri Mar 05 14:15:46 1999 David L. Levine + + * ace/OS.cpp (ACE_TSS_Cleanup (),free_all_keys_left ()): + with ACE_TSS_Emulation only, don't free the TSS key that + ACE_TSS_Cleanup uses internally for its in_use_ member. + The key doesn't get freed in ACE_OS::thr_key_detach (), + because that gets called during shutdown. So, + free_all_keys_left () would attempt to free it. But, + the dynamic memory associated with it had already been + deleted by ACE_TSS_Cleanup::exit (). And, there + aren't any other resources associated with it. So, + free_all_keys_left () can just skip over it. + + * ace/OS.cpp (cleanup_tss): disabled call to + free_all_keys_left () with ACE_HAS_TSS_EMULATION, because + we can't safely access the TSS values that were created by + the main thread. They were destroyed when the ACE_TSS_Cleanup + instance exit () function was called. There don't seem to + be any leaks if free_all_keys_left () isn't called, anyways. + +Fri Mar 5 11:05:04 1999 Nanbor Wang + + * examples/Log_Msg/Log_Msg.dsw: Fixed the path to Callback.dsp. + Thanks to Zoran Ivanovic for reporting + this. + + * performance-tests/Misc/Makefile: Removed test_guard from the + Makefile. This test requires having + ACE_USES_OBSOLETE_GUARD_CLASSES defined in order to compare + ACE_Guard to ACE_Thread_Mutex_Guard (obsolete). + + * ace/OS.h: Removed ACE_THREAD_GUARD*. + + * ace/config-psos-{diab,tm}.h: Removed + ACE_LACKS_METHOD_DEFINITIONS_IN_CLASS_TEMPLATE. It is no longer + needed. + + * ace/Synch_T.{h,i}: One would assume compilers are smart enough + to treat _all_ in-class functions as inline. Not for template + member functions. This is true at least for SunCC, egcs, gcc, + and MSVC. These functions seems to impose extra overhead. + After removing the in-class definitions for ACE_Guard, the cost + of using ACE_Guard is now as good as using + ACE_Thread_Mutex_Guard (which, by the way, is depricated.) So, + there's no need for a ACE_THREAD_MUTEX_GUARD class. Afterall, + the "ACE Way[TM]" of defining inline functions is the "Right + Way[TM]". The motto of the change is, always put inline + functions in .i files (even for template specialization) + otherwise, they'll become regular functions. If you really need + to put function definitions within class definitions, mark + inline function explicitly. + + Thanks to Andy Marchewka for noticing the + performance differences between ACE_Thread_Mutex_Guard and (old) + ACE_Guard. + +Fri Mar 5 11:06:12 1999 Douglas C. Schmidt + + * ace/Svc_Conf.y: Always print out an error message when we + increment yyerror. Thanks to Ulf Jaehrig + for reporting this. + +Thu Mar 4 12:26:47 1999 Nanbor Wang + + * tests/Message_Queue_Notifications_Test.cpp (svc): Made increment + of thread-safe. + +Thu Mar 04 07:00:20 1999 David L. Levine + + * ace/config-aix-4.2.x.h: added ACE_LACKS_PRAGMA_ONCE + to xlC section. Thanks to Rainer Blome + for reporting this. + + * ace/config-osf1-4.0.h: added ACE_LACKS_PRAGMA_ONCE to + cxx section, with __DECCXX_VER < 60090010. This should + help avoid compilation warnings from cxx 5.x. Thanks + to Oliver M. Kellogg for + reporting this. + + * ACE-INSTALL.html: corrected name of ace/config-linux-lxpthreads.h. + Thanks to Barry Hoggard for reporting this. + + * tests/Makefile,Makefile.DLL: instead of always running a + recursive make to build libDLL_Test.so, only do that if it + needs to be built. And, added dependencies to Makefile.DLL. + + * ace/Makefile: commented out use of TEMPLATE_FILES. I don't + believe that it's needed. + + * ace/CLASSIX/Makefile: removed unused TEMPLATE_FILES and + LSRC2 macros, and gethrtime build rule. + + * docs/ACE-subsets.html: updated, and added documentation for + ACE_COMPONENTS and the ACE_OS adapation layer. + +Wed Mar 3 22:30:02 1999 James CE Johnson + + * ace/IOStream_T.{cpp|h|i}: Those last changes break (at least) + examples/IOStream/server. I'm backing them out and restoring + the 4.6.25 versions of these files until Chris can get back to + me about what's going on. + +Wed Mar 03 21:49:58 1999 David L. Levine + + * ace/OS.cpp (socket_init,socket_fini): replaced use of + cerr with ACE_OS::fprintf. + + * ace/OS.h: conditionally #include Object_Manager.h, only + if ACE_HAS_MINIMAL_ACE_OS is not defined. Merged main () + #defines for Unix/NT and WinCE, to ease maintenance. + + * ace/config-minimal.h: removed undef of + ACE_HAS_NONSTATIC_OBJECT_MANAGER, because OS.h now conditionally + #includes Object_Manager.h. Added ACE_MAIN_OBJECT_MANAGER #define, + to only instantiate the ACE_OS_Object_Manager. + + * ace/config-WinCE.h: added ACE_MAIN and ACE_MAIN_OBJECT_MANAGER + #defines, to support merging of the main () #defines in OS.h. + + * ace/OS.{h,cpp}: added ACE_OS_Object_Manager::starting_up () + and shutting_down (). (ACE_TSS_Cleanup::remove): replaced + use of ACE_Object_Manager::shutting_down () with + ACE_OS_Object_Manager::shutting_down (). Thanks to Irfan + for reporting that, otherwise, ace/Object_Manager.h had + to be #included by OS.cpp on NT, if ACE_NONSTATIC_OBJECT_MANAGER + wasn't #defined. + + * tests/Basic_Types_Test.cpp: hacked a bit to support building, + and running, with ACE_HAS_MINIMAL_ACE_OS. Don't look, + unless you want to forever ruin all of your good coding habits. + +Wed Mar 03 19:08:52 1999 Irfan Pyarali + + * ace/Map_T.h (ACE_Map): Further degraded my code to make it + compile with lame compilers ;-) This time it was the lame pSOS + diab compiler that could not recongnize a typedef in the base + template class. + +Wed Mar 03 11:31:00 1999 David L. Levine + + * docs/ACE-guidelines.html: added guideline to try to limit + the length of source code lines to less than 80 characters. + And, reverted to the previous version of the file. The + last version was apparently committed by mistake. + + * include/makeinclude/wrapper_macros.GNU (ACE_HAS_GNUG_PRE_2_8): + added support for eg++. Assume that it's egcs, and therefore + ACE_HAS_GNUG_PRE_2_8 is set to 0. Thanks to Russell L. Carter + for supplying a patch. + +Wed Mar 3 09:35:20 1999 Ossama Othman + + * ace/Memory_Pool.cpp (handle_signal): Added a check to see if the + current mapping is up to date so that faults caused by other + mappings will be passed on. Thanks to + Joseph Weihs for reporting this and for + providing a fix. + +Wed Mar 3 05:48:24 1999 Douglas C. Schmidt + + * ace/ACE.cpp (fork): Added an extra pair of parens within the + WIFE*() macros to work around GCC bugs. Thanks to Alexandre + Karev and Andre Folkers + for reporting this. + +Tue Mar 2 22:50:18 1999 Alexander Babu Arulanthu + + * ace/POSIX_Asynch_IO.h: + * ace/POSIX_Proactor.cpp: + Added forward declaration for ACE_Proactor_Impl. Using static cast + to down cast from to + . Thanks to John.Mulhern@lawson.com for + reporting the warnings in HP UX. + +Tue Mar 02 21:17:19 1999 David L. Levine + + * ace/OS.{h,cpp},Object_Manager.{h,cpp}: changed Object_Manager + state to be per-instance, instead of global. This makes + it easier to enforce startup and shutdown ordering, + regardless of whether the Object_Managers are static, + created on the stack of main (), or dynamically allocated. + + * ace/IOStream_T.h: fixed a couple more line breaks. + + * Makefile: added support for suppressing man page regeneration + on make release command line. + + * include/makeinclude/platform_osf1_4.0.GNU: added automated + support for warning 1136. It's only supported by cxx 6.2. + Thanks to James CE Johnson for reporting + this, and to Andrew Hobson for + diagnosing the problem. + + * ace/OS.i (thr_getspecific): added #else clause w/ACE_NOTSUP_RETURN + to support ACE_HAS_MINIMAL_ACE_OS. + + * ace/config-minimal.h: added #undef of + ACE_HAS_NONSTATIC_OBJECT_MANAGER, to avoid #include of + Object_Manager.h. And, added #define ACE_USE_THREAD_MANAGER_ADAPTER + so that ACE_Thread_Adapter::invoke () won't use any + ACE_Thread_Exit functions. + + * ace/OS.cpp (ACE_Thread_Adapter::invoke): removed + ACE_HAS_MINIMAL_ACE_OS conditional compilation, because + config-minimal.h now #defines ACE_USE_THREAD_MANAGER_ADAPTER. + And, added #else clauses to three TSS-related functions. + +Tue Mar 02 14:43:29 1999 Steve Huston + + * ace/Map_T.(h i): Qualified types inherited from template base + classes; qualified with ACE_TYPENAME where needed. Now aC++ + is happy. + + * ace/config-hpux-10.x-hpc++.h: Added ACE_HAS_TYPENAME_KEYWORD for + aC++. + + * tests/DLL_Test.cpp: Enable on HP-UX. Generalize the library + prefix/suffix with the platform definitions from OS.h. + +Tue Mar 2 12:41:00 1999 Chris Gill + + * ace/IOStream_T.{cpp, h}: Fixed some line breaks that were + inadvertently introduced when these files were last checked in. + +Tue Mar 2 10:54:16 1999 Nanbor Wang + + * Cache_{Hash,Heap}_T.{h,cpp}: + * Cache_Manager[_T].{h,cpp}: + * Cache_Object.cpp: + * Hash_Bucket_T.{h,cpp}: Fixed erroneous include directives. + Thanks to Christian.Destor@alcatel.fr for reporting this. + +Tue Mar 2 10:33:47 1999 James CE Johnson + + * ace/IOStream_T.{cpp|h|i}: Christopher Healey + noticed occasional core dumps from + ~ACE_IOStream on heavily loaded systems. It turns out that + streambuf_ was being deleted out from under the object. These + three files include his patches for this problem. + +Tue Mar 2 02:28:54 1999 Nanbor Wang + + * ace/CDR_Stream.h (do_byte_swap): This accessor function should + be public accessible. Otherwise it's useless. Reorder class + declaration so the protected members appear before private + members/functions. + +Mon Mar 1 23:26:41 1999 Kirthika Parameswaran + + * tests/DLL_Test.cpp (ACE_HAS_SVR4_DYNAMIC_LINKING): + Added this check to prevent this test from being run + separately. + +Mon Mar 01 17:02:48 1999 David L. Levine + + * ACE version 4.6.25 released. + +Mon Mar 01 16:54:02 1999 David L. Levine + + * ace/OS.cpp,Object_Manager.cpp: fixed ObjMan state logic to + ensure that the ACE_Object_Manager is fini'd before the + ACE_OS_Object_Manager, even when both are static objects. + Thanks to Carlos for reporting this problem. + +Mon Mar 01 14:05:46 1999 David L. Levine + + * ACE version 4.6.24 released. + +Mon Mar 01 13:04:53 1999 David L. Levine + + * ace/OS.*,Object_Manager.{h,cpp},ACE.cpp: added class + ACE_OS_Object_Manager. It manages the three preallocated + locks that ACE_OS uses. Many thanks to Nanbor for + suggesting the scheme to avoid dependency on Synch_T.h + for the ACE_Guard instantiations: OS.cpp now has a + couple of lightweight guards for its internal use. + + * ace/ACE.{i,cpp},OS.*: moved ACE::strecpy () and + ACE::unique_name () from class ACE to ACE_OS. That + allows ACE_OS to be self-contained. The ACE versions + were left for backward compatibility; they now just + wrap the ACE_OS versions. + + With these changes, a stand-alone ACE OS adaptation layer + can now be built. The ace/config-minimal.h config file + should be included in ace/config.h if you want to build + the ACE OS adaptation layer. + + Two deficiencies remain with the ACE OS adaptation layer: + the dependencies on ACE_Log_Msg have been conditionally + compiled out by config-minimal.h. Similarly, there is + a conditional dependency of ACE_Thread_Adapter::invoke () + on ACE_Thread_Exit. It would probably be best to move + that to ACE Thread_Manager, if possible. + + * ace/config-minimal.h: suppress ACE_HAS_TSS_EMUATION, because + it requires other ACE headers to be #included. + + * ace/Synch.{i,cpp} (~ACE_Recursive_Thread_Mutex): added + a call to this->remove (). Without it, the mutex wasn't + being destroyed. Uninlined both the destructor to avoid + code bloat if there are multiple returns in a function + that instantiates an ACE_Recursive_Thread_Mutex locally. + And, uninlined the remove () function, to save code space, + because it's non-trivial and not expected to be time critical. + +Sun Feb 28 20:21:05 1999 Kirthika Parameswaran + + * tests/Makefile.DLL (realclean): Added the realclean target to + the makefile. + + * tests/run_tests.sh (ace_version): Disabled DLL_Test for chorus, + LynxOS, Unicos platforms as they dont support shared libraries. + +Sun Feb 28 20:08:54 1999 Alexander Babu Arulanthu + + * ace/POSIX_Proactor.cpp: + * ace/POSIX_Asynch_IO.h: + * ace/POSIX_Asynch_IO.cpp: + Fixed to pass wherever is being + passed, since it is ok to pass the derived class pointer in place of + base class pointer. + Defined the fields and in + so that they can be used instead of + and . Because and + fields are not supported on HP yet. + +Sun Feb 28 14:22:38 1999 David L. Levine + + * include/makeinclude/platform_linux_kcc.GNU: added + -D_GNU_SOURCE to CFLAGS, because it's needed with + glibc 2.1. It can't go into the config file, because + it needs to be #defined before the #include of + features.h. But, features.h #defines the glibc version. + Thanks to Ben Eng for reporting this. + + * ace/config-minimal.h: disable ACE_ASSERT, ACE_DEBUG, and ACE_ERROR. + +Sun Feb 28 12:57:53 1999 Nanbor Wang + + * ace/Thread_Manager.cpp (terminate): The condition for handling + joining thread was wrong. Thanks to Terry Rosenbaum + for reporting the bug. + +Sun Feb 28 08:37:44 1999 David L. Levine + + * ace/OS.cpp (ACE_Thread_Adapter::invoke): replaced call + to ACE_Thread::self () with call to ACE_OS::thr_self (), + so that we don't need to #include ace/Thread.h. Thanks + to Russ Noseworthy for reporting this. + +Sat Feb 27 17:25:52 1999 David L. Levine + + * ace/Makefile: updated dependencies. They didn't have + any .shobj dependencies, just .obj. + + * tests/Makefile: ran make depend. It didn't have any + dependencies. + + * include/makeinclude/platform_linux_kcc.GNU: added note that + evaluation copies of KCC might come with libraries that were + built with exception handling support. To use them, ACE must be + built with exception handling support + (exceptions=1). Thanks to John Lindal + for reporting this. + + Also, added support for the exceptions make flag. + +Sat Feb 27 13:31:17 1999 Douglas C. Schmidt + + * ace/OS.i: Fixed the remaining problems with ACE_OSCALL_RETURN + macro usage for sem_wait(), sem_post(), and sem_trywait(). + Thanks to David Levine for reporting this. + + * ace/OS.h: Added a set of ACE_THREAD_GUARD macros that use + ACE_Thread_Mutex_Guard. These seem to be faster on many + platforms than the ACE_Guard. Thanks to + Andy Marchewka for reporting this. + + * ace/Dump.cpp: Moved the explicit template instantiation of + ACE_Guard out of dump and put it into + Synch.cpp, where it's with the other instantiations. + +Fri Feb 26 23:58:46 1999 Jeff Parsons + + * ace/CDR_Stream.{h,i,cpp}: + Added some read- and write-pointer alignment + functions, as proposed by Carlos. Also deleted some + ACE_OutputCDR members that weren't being used. + Checked the build on NT and suncc. Must come up with + some kind of test for these new functions. + +Fri Feb 26 21:56:05 1999 David L. Levine + + * ace/Makefile: moved ACE_COMPONENTS to after include + of wrapper_macros.GNU, so that users can set it in + their platform_macros.GNU. Also, added ACE_LACKS_ACE_OTHER + to CFLAGS if Other ACE_COMPONENT is not built. + +Fri Feb 26 17:48:32 1999 Steve Huston + + * include/makeinclude/platform_hpux_aCC.GNU: Added OCFLAGS + value for optimize=1 builds; added support for distrib=1 + builds to build for off-site distribution. + +Fri Feb 26 12:38:00 1999 David L. Levine + + * ace/OS.cpp: added #include "ace/Thread_Manager.h" on + WIN32, for ACE_Thread_Descriptor declaration. Thanks + to Barry Hoggard for reporting this. + + * ace/Managed_Object.h: fixed comments in description. + +Fri Feb 26 11:56:08 1999 Ossama Othman + + * ace/Log_Priority.h (ACE_Log_Priority): Removed all references to + ACE_HAS_BROKEN_ENUMS since it has been deprecated (see David's + ChangeLog entries from Feb 5). + +Fri Feb 26 11:09:47 1999 Ossama Othman + + * ace/OS.i (sema_destroy): ACE_OSCALL and ACE_OSCALL_RETURN macro + calls for sem_destroy, sem_unlink and sem_close had too few + arguments. Added the missing arguments for the macros. + +Fri Feb 26 10:59:45 1999 Alexander Babu Arulanthu + + * examples/Reactor/WFMO_Reactor/test_talker.cpp (main): Fixed to + use the new proactor interface. + +Thu Feb 25 22:17:58 1999 David L. Levine + + * ace/OS.cpp (spa, for VxWorks only): updated comment about + ::sp () default values, and added comments for each argument + to ::taskSpawn (). Thanks to Tad Jarosinski + for asking about spa (). + +Thu Feb 25 20:10:06 1999 Ossama Othman + + * ace/Synch.h: + * ace/Synch.i: + * ace/Synch_T.h: + + Added an ACE_Null_Semaphore class. Thanks to Irfan for his guidance + on this. Also fixed ACE_SYNCH_SEMAPHORE to be ACE_Null_Semaphore + when ACE is built without thread support. + +Thu Feb 25 18:37:27 1999 Irfan Pyarali + + * ace/WFMO_Reactor (cancel_wakeup and masks_ops): Fixed the + cancel_wakeup() method. It was doing too much, i.e., if the + masks were reduced to null, it was removing the event handler + entry. The new version behaves more like the Select Reactor in + that it simply plays with the masks without removing the event + handler. + + Also, implemented the mask_ops() operation. + + Thanks to Douglas C. Schmidt and Zoran + Ivanovic for helping in pinpointing the + problem. + + * ace/Service_Config.cpp (fini_svcs and close): Since the reactor + and proactor singletons potentially call user code (in + handle_close()), we must shut them down *before* the log msg is + destroyed. Therefore, moved the close_singletons() call from + close() to fini_svcs(). + + * ace/Select_Reactor_Base.cpp (bit_ops): Since we return the old + masks everytime, find the old reactor masks at the start of the + method. This automatically does the work of the GET_MASK + operation. + + * ace/Proactor.cpp: Added #include "ace/Object_Manager.h" + + * examples/Reactor/WFMO_Reactor/test_prerun_state_changes.cpp: + handle_close() was getting called twice; changed code to prevent + double deletion. + + * examples/Reactor/WFMO_Reactor/test_handle_close.cpp: Added the + ability to cancel reads, change masks, and check for existing + reactor masks. + +Thu Feb 25 17:35:10 1999 Kirthika Parameswaran + + * tests/DLL_Test.cpp: + Changed the OBJ_SUFFIX to ".so" as on Linux the .o file cannot + be a shared object. Also the OBJ_PREFIX is now "./lib" for + non-Win32 platforms. + * tests/Makefile: + Additional option DLL_TEST added so that a .so can be produced + for DLL_Test. + * tests/Makefile.DLL: + This is the makefile which produces libDLL_Test.so for DLL_Test. + +Wed Feb 24 23:47:22 1999 Alexander Babu Arulanthu + + * examples/Reactor/Proactor/test_proactor.cpp: + * ace/WIN32_Asynch_IO.h: + * ace/Proactor.cpp: + * ace/WIN32_Proactor.cpp: + * ace/Proactor.h: + * ace/Proactor_Impl.h: + * ace/POSIX_Proactor.h: + Changed the return values of the API to + return -1 on error, 0 on timeout, 1 on success. This has been done so + that it looks like the . Previously + was returning -1 on error, 0 on success + and 0 on timeout also. + + Fixed the and + to do indefinite blocking when + ACE_INFINITE is passed. is used instead of + . + + Renamed the class to more appropriate + . + +Wed Feb 24 22:08:50 1999 Douglas C. Schmidt + + * ace/OS.i: Fixed all the sem_* calls so that they no longer use + the ACE_ADAPT_RETVAL() macro, which was broken since these calls + all return -1 on failure. Thanks to John E. Bossom + for reporting this. + +Wed Feb 24 17:40:49 1999 James CE Johnson + + * docs/tutorials/combine: + * docs/tutorials/colorize: + A few enhancements to make the colorization better. Also, when + #include "ace/something.h" is seen by the colorizer, it will + create a link to ../../../ace/something.h. That should give + direct links from the tutorial pages to the ACE headers. + +Wed Feb 24 16:56:51 1999 James CE Johnson + + * docs/tutorials/017/barrier2.cpp: Added this to show how you can + change the thread count while threads are still active. + + * docs/tutorials/017/*.html: Regenerated due to the new file. + + * docs/tutorials/018/*.html: Added Kirthika's abstract & + regenerated. + + * docs/tutorials/018/token.cpp: Typo in the comments... + +Wed Feb 24 14:57:10 1999 Nanbor Wang + + * ace/OS.h (ASYS_ONLY_WIDE_STRING): New UNICODE macros to convert + char* to wchar* when UNICODE is defined but not on CE. + + * ace/Service_Config.cpp (parse_args): Convert getopt.optarg using + ASYS_ONLY_WIDE_STRING. + +Wed Feb 24 13:54:15 1999 David L. Levine + + * ace/config-minimal.h: changed #include protection to + ACE_CONFIG_MINIMAL_H, so that this config can be #included + by others. + + * ace/OS.{h,cpp},Thread_Manager.h: moved ACE_Thread_Control and + ACE_Thread_Exit class definitions from Thread_Manager.h to OS.h, + so that Task.h no longer needs to be #included by OS.cpp. + + * ace/OS.cpp: protected #include of Containers_T.h with + defined (ACE_WIN32) || defined (ACE_HAS_TSS_EMULATION). + +Wed Feb 24 05:30:59 1999 Douglas C. Schmidt + + * ace/Message_Queue_T.i (dequeue): Replaced the improper + self-recursive call to dequeue() with dequeue_head(). Thanks to + Marc Engel for reporting this. + +Tue Feb 23 20:58:17 1999 Douglas C. Schmidt + + * ace/OS.i: Make sure to do the right thang if we're compiling the + ACE recursive thread mutexes on platforms that lack threading. + + * ace/Service_Object: Added a new ACE_Service_Object constructor + that takes an ACE_Reactor * and passes this down to the + ACE_Event_Handler base class. + + * ace/Event_Handler: Added a new ACE_Event_Handler constructor + that takes an ACE_Reactor * and an int priority that default to + the right values. + +Tue Feb 23 21:53:32 1999 David L. Levine + + * ace/OS.h,README: added ACE_HAS_MINIMAL_ACE_OS support. + + * ace/config-minimal.h: added this config file. It defines + ACE_HAS_MINIMAL_ACE_OS. It is designed to build only + the minimal ACE_OS adaptation layer. + +Tue Feb 23 20:28:45 1999 Marina Spivak + + * ace/SString.{h,i,cpp}: Added a private member to the + ACE_CString class to keep track of the size of data buffer, and + avoid unnecessary memory reallocations. Updated class methods + to use buf_len_. + +Tue Feb 23 19:54:55 1999 Alexander Babu Arulanthu + + * ace/POSIX_Asynch_IO.h: + * ace/POSIX_Asynch_IO.cpp: + Fixed the potential dominance warnings in POSIX + implementation. Updated the documentation. + +Tue Feb 23 18:11:11 1999 Kirthika Parameswaran + + * examples/DLL/DLL.dsw: + examples/DLL/Main.dsp: + examples/DLL/Newsweek.dsp: + examples/DLL/Today.dsp: + Added extra include and linker options to the projects. + + * tests/DLL_Test: + Added OBJ_PREFIX to cater to the problem which arose due to the fact + that the .o is produced under the .obj directory on SunOS. + + * tests/run_tests.sh: + tests/run_tests.bat: + Made an entry for DLL_Test. + +Tue Feb 23 16:54:33 1999 Irfan Pyarali + + * ace/OS.i (recursive_mutex_trylock and recursive_mutex_lock): + Removed the "abandoned" versions of these routines. Abandoned + mutexes are only supported for process mutexes, but not for + thread mutexes. + +Tue Feb 23 15:50:40 1999 Alexander Babu Arulanthu + + * ace/Proactor.cpp: + * ace/Proactor.h: + * ace/Proactor_Impl.h: + * ace/POSIX_Proactor.h: + * ace/POSIX_Proactor.cpp: + * ace/POSIX_Asynch_IO.h: + * ace/POSIX_Asynch_IO.cpp: + * ace/WIN32_Proactor.cpp: + Implemented for POSIX platforms. Thanks to Irfan + for the cool design. This API has been changed a little bit for + portability. API now exists at + class. To post completions, users will have + to get hold of an class (either get it from + the predefined factory methods at the Proactor or derive from + or , then call + on it passing in the which can + be got through method in the . + The need for RTTI has been avioded in this design. + +Tue Feb 23 15:19:33 1999 Steve Huston + + * ace/NT_Service.(h cpp): Added two new methods: + state (DWORD *, ACE_Time_Value * = 0) as an alternate way to get the + service's state, with definite indication of error. Also changed + comments on the other state() method to clarify the return value. + test_access (DWORD) tests caller's access to the service. + Thanks to Martin Krumpolec for these ideas and + suggestions! + +Tue Feb 23 14:12:52 1999 Irfan Pyarali + + * ace/Active_Map_Manager_T.h (npos): Added a new static member + function that returns a key that cannot be found in the map. + Thanks to Fernando D. Mato Mira for + suggesting this. + +Tue Feb 23 12:15:09 1999 Nanbor Wang + + * ace/Svc_Conf.y: + * ace/Svc_Conf_y.cpp: + * ace/Parse_Node.cpp (symbol): + * ace/OS.cpp (fork_exec): + * ace/INET_Addr.cpp (ACE_INET_Addr): More Unicode fixes. + +Tue Feb 23 12:00:21 1999 Steve Huston + + * examples/NT_Service/main.cpp: Allow -i option without a value, and + default to AUTO_START. Also, added a README file to explain how to + use the program. Thanks to Zoran Ivanovic for + the change and the README file! + +Mon Feb 22 22:03:47 1999 Nanbor Wang + + * bin/auto_compile_win32.pl: Perl script for compiling all the + million different config. combination on Win32. Hey, it also + works on Alpha. Thanks to Darrell Brunsch for testing it on + Alpha/NT. + + * ace/ace_{dll,lib}.dsp: Fixed broken project settings. + +Mon Feb 22 21:56:27 1999 David L. Levine + + * ace/Sched_Params.cpp: removed #include of ACE.h because it's + not necessary. + + * ace/Makefile: added ACE_COMPONENTS default definition. + Moved Sched_Params from THREADS_FILES to OS_FILES because + OS.cpp needs it. It only contributes 172 bytes to libACE + on VxWorks and 248 on LynxOS. + +Sun Feb 21 18:52:17 1999 Douglas C. Schmidt + + * ACE version 4.6.23 released. + +Sun Feb 21 08:46:09 1999 David L. Levine + + * ace/OS.i (recursive_mutex_{init,lock,trylock}: added some + ACE_UNUSED_ARGS. + + * ace/OS.{i,cpp} (cond_*): uninlined the ACE_OS:cond_* function + versions with ACE_LACKS_COND_T. Most are too big to be + good candidates for inlining. And the others cause use-before- + definition problems in OS.i. + +Sun Feb 21 00:17:58 1999 Darrell Brunsch + + * websvcs/lib/URL_Addr.i: Can now copy null Addrs. Also added + hash function implementation. + + * websvcs/lib URL_Addr.h: Added hash function. + + * websvcs/lib/URL_Addr.cpp: Fixed a bug with + ACE_HTTP_Addr::create_relative_address and urls beginning with + "/". It used to copy the first '/', which wasn't needed. + +Sat Feb 20 15:39:16 1999 David L. Levine + + * ace/OS.{h,cpp},Object_Manager.{h,cpp}: changed ACE_OS::exit () + to call an exit hook that is registered by the ACE_Object_Manager, + instead of directly calling ACE_Object_Manager::fini (). + + * ace/OS.i (thr_self): moved definitions to before first use. + +Sat Feb 20 11:50:30 1999 Nanbor Wang + + * ace/OS.i (thr_equal): Moved the body of ACE_OS::thr_equal before + recursive_mutex methods to avoid "function redefined as inline" + problem. Thanks to David Levine for reporting this. + +Sat Feb 20 09:05:20 1999 Douglas C. Schmidt + + * ace/OS.cpp: Changed the ACE_static_cast() in ACE_OS_Wstring to + first use an ACE_const_cast(). Thanks to Andy Gokhale for + reporting this. + +Sat Feb 20 02:53:38 1999 Nanbor Wang + + * ace/OS.cpp (ACE_OS_WString): Need to add a statis cast when + converting from wchar to char to eliminate a warning from Win98. + + * ace/config-win32-common.h: Do not check for library type on CE. + + * ace/config-WinCE.h: Defined ACE_HAS_WINCE as 1. + +Fri Feb 19 22:54:18 1999 Carlos O'Ryan + + * ace/OS.h: + Fixed the return types for ACE_OS_WString and ACE_OS_CString + assignment operators, even though they are not defined they + should be declared to return something, otherwise egcs give us a + ton of warnings. + +Fri Feb 19 21:02:49 1999 Douglas C. Schmidt + + * ace/config-win32-common.h: #define'd ACE_HAS_RECURSIVE_MUTEXES + for Win32. + + * ace/OS.cpp: Removed the SString.h dependency in OS.cpp! + +Fri Feb 19 21:44:31 1999 Darrell Brunsch + + * ace/OS.i: Was using two many arguments to thread_mutex_lock () + and ACE_OS::thread_mutex_trylock (). + + * ace/Synch.i: Typo in comment + +Fri Feb 19 18:18:13 1999 Nanbor Wang + + * ace/OS.{h,i,cpp}: Added ACE_OS_WString and ACE_OS_CString which + should only be used within ACE_OS to perform conversion between + wchar strings and char string. + Changed the wide/multibyte conversion macros to use + ACE_OS_?String classes and removed dependencies to Auto_Ptr.h + and SString.h. + + * ace/config-win32-common.h: Removed checked for (_DLL) if + ACE_HAS_DLL = 0. Otherwise, the static build won't compile. + + * ace/Token_Manager.cpp (release_token): + * ace/Service_Manager.cpp (list_services): Changed + ASYS_MULTIBYTE_STRING to ASYS_ONLY_MULTIBYTE_STRING. Because + the new conversion classes have stronger type checking, these + errors weren't found until now. + +Fri Feb 19 17:01:08 1999 David L. Levine + + * ace/Makefile: moved ACE from OS_FILES to UTILS_FILES. + +Fri Feb 19 15:44:23 1999 Douglas C. Schmidt + + * ace/OS, + ace/Synch: Moved the implementation of the + ACE_Recursive_Thread_Mutex from the Synch.* files to + the OS.* files in order to reduce coupling in OS.* and + other parts of ACE. + +Fri Feb 19 12:36:43 1999 Carlos O'Ryan + + * ace/OS.i: + Fixed missing ACE_INLINE for ACE_OS::strenvdup() + +Fri Feb 19 11:35:57 1999 Steve Huston + + * include/makeinclude/platform_sunos5_sunc++.GNU: Added new option + "distrib". If you do a "make distrib=1" the -R options won't be + given when linking, which produces dynamic load records requiring + objects/libraries in standard places, or use of LD_LIBRARY_PATH. + The default is distrib=0, which is the existing behavior. + +Fri Feb 19 11:22:48 1999 Nanbor Wang + + * ace/OS.cpp (open): Don't call CreateFileA with FILE_SHARE_DELETE + when compiled on Win95 because it doesn't support the flag. The + implication of this change is that unlink before close will not + work on Win95. So programs that are targeted to both NT and + Win95 cannot depend on it. Thanks to Rod Joseph + for reporting the bug. + +Thu Feb 18 21:10:45 1999 Douglas C. Schmidt + + * ace/OS.cpp (string_to_argv): We no longer have to special case + for WinCE since this logic has been moved into + ACE_OS::strenvdup(). + + * ace/ACE.cpp: Implemented ACE::strenvdup() using + ACE_OS::strenvdup(). + + * ace/OS: Move the implementation of strenvdup() from ACE to + ACE_OS to remove another dependency from the OS wrappers. + + * ace/ARGV.cpp: Rewrote the ACE_ARGV::string_to_argv() and + ACE_ARGV::argv_to_string() methods to use the new + ACE_OS::string_to_argv() and ACE_OS::argv_to_string(). + + * ace/OS.h: Added string_to_argv() and argv_to_string() methods to + ACE_OS to remove the dependency on ACE_ARGV. + +Thu Feb 18 19:21:03 1999 James CE Johnson + + * docs/tutorials/005/client_handler.cpp: Replaced the leading '_' + in the open() method so that we can cast _acceptor to acceptor. + +Thu Feb 18 14:12:28 1999 Nanbor Wang + + * netsvcs/clients/Naming/Client/svc.conf: Changed to start up + ACE_Naming_Context as dynamic service. Thanks to Darren + Whobrey for reporting this problem. + + * ace/Name_Proxy.cpp (open): The timeout value was set upp + ACE_Time_Value::zero accidentally when we want blocking + connect. Thanks to Darren Whobrey for + reporting the bug. + + * ace/CDR_Stream.{h,i} (ACE_InputCDR::do_byte_swap): Added + accessor function for Flick. + + * ace/CORBA_macros.h (ACE_THROW_INT): This should return a new + instance of the exception. Thanks to Andy for pointing this + out. + +Wed Feb 17 16:40:56 1999 Nanbor Wang + + * ace/OS.h (ACE_NEW_THROW_EX): A new ACE_NEW_THROW macro which + makes ACE_NEW_THROW_EX behave like a exception-throwing + function. I.e., you need to follow ACE_NEW_THOW_EX with + appropriate ACE_CHECK* macros. The use of ACE_NEW_THROW, + ACE_NEW_THROW_RETURN, ACE_NEW_TRY_THROW are deprecated. + + * docs/exceptions.html: Added documentation for + ACE_DECLARE_NEW_CORBA_ENV. + + * ace/config-WinCE.h: Automatically define ACE_HAS_WINCE if it is + not already defined. + + * ace/Synch.cpp: I had to shuffle the location of .i file around + to avoid a warning from SH compiler for CE. + + * ace/config-win32-common.h: Disabled checking for DLL run-time, + WIN32, and multi-threaded run-time on Windows CE. + + * ace/CORBA_macros.h (ACE_DECLARE_NEW_CORBA_ENV): Added this macro + for declaring a new CORBA_Environment called ACE_TRY_ENV. + ACE_TRY_NEW_ENV should now be avoided because it won't work if + multiple try blocks are needed in the top-most functions. + Instead, you can use the new macro to define the environment + variable and use ACE_TRY/ACE_TRY_EX as usually. This is even + more intuitive than ACE_TRY_NEW_ENV. ;) Thanks to Andy for + reporting the problem. + +Wed Feb 17 10:44:29 1999 Alexander Babu Arulanthu + + * examples/Reactor/Proactor/test_proactor.dsp: + * examples/Reactor/Proactor/test_proactor.cpp: + * examples/Reactor/Proactor/Makefile: + rtagged these files with "new_proactor" + +Tue Feb 16 17:08:53 1999 Steve Huston + + * examples/ASX/Event_Server/Transceiver: Moved Event_Transceiver + class definition to new file, transceiver.h, to build ok on AIX (P15) + and fixed core dump if ctor fails to connect. + + * examples/Connection/misc: Moved some class definitions from + test_upipe.cpp to new file test_upipe.h to build ok on AIX (P17). + Same thing with Connection_Handler - new file Connection_Handler.h. + + * examples/Connection/misc/Makefile: Clean out tempinc directory + between program compiles so AIX xlC doesn't freak out. + +Tue Feb 16 16:42:23 1999 Nanbor Wang + + * ace/CORBA_macros.h (ACE_PRINT_EXCEPTION): A new macro that deal + with printing out the exception for debugging. Thanks to Lothar + Werzinger for suggesting this. + + * docs/exceptions.html: Added documentation for the new macro + ACE_PRINT_EXCEPTION. Since there's no portable way to print out + the content of a CORBA_Exception, we use this macro to deal with + differences among various ORB implementations. This macro is + user definable. + + Thanks to Eric Covington for figuring out the + following. + + * ace/ace_ce_dll.dsp: Added Functor.cpp and Message_Queue.cpp. + + * ace/High_Res_Timer.cpp (dump): Fixed Unicode problem. + + * ace/OS.i (truncate): WinCE does not have char* version of + truncate. + +Tue Feb 16 00:39:35 1999 Alexander Babu Arulanthu + * ace/ace_dll.dsp: + * examples/Reactor/Proactor/test_proactor.dsp: + * examples/Reactor/Proactor/test_proactor.cpp: + Updated the files. + * ace/WIN32_Asynch_IO.h: + * ace/WIN32_Asynch_IO.cpp: + * ace/WIN32_Asynch_IO.i: + Added the files + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Updated these files + * examples/Reactor/Proactor/Makefile: + New make file which also compiles the test_aiosig_ace.cpp + program. + * ace/POSIX_Asynch_IO.i: + Added the file. + + + rTagged the ACE_wrappers repository with + After the following changes rtagged the repository with + + + * ace/ + Proactor.h + Asynch_IO.cpp + Asynch_IO.h + Makefile + Proactor.cpp + Proactor.h + config-lynxos.h + config-sunos5.6.h + config-sunos5.7.h + POSIX_Asynch_IO.{h,CPP} + POSIX_Proactor.{h,cpp} + WIN32_Asynch_IO.{h,cpp} + Asynch_IO_Impl.{h,cpp,i} + Proactor_Impl.h + Applied Bridge pattern to the POSIX implementation of the Proactor + code. ACE_POSIX_AIOCB_Proactor works fine on Solaris + 2.6. ACE_POSIX_SIG_Proactor works on LynxOS. Take a look at the tests + at the $(ACE_ROOT)/examples/Reactor/Proactor/ and the README. + + * tests/ + Aio_Platform_Test.cpp + *examples/Reactor/Proactor/: + test_proactor.cpp + test_aiocb.cpp + test_aiosig.cpp + test_aiosig_ace.cpp + README + Test files for testing out the platforms. + +Mon Feb 15 13:17:15 1999 Douglas C. Schmidt + + * ACE version 4.6.22 released. + +Sun Feb 14 15:25:27 1999 Ossama Othman + + * ACE-configuration.txt: + * ACE.ifnames: + * acconfig.h: + * ace-config.in: + * ace-diff-config.in: + * acinclude.m4: + * aclocal.m4: + * config.guess: + * config.sub: + * configure: + * configure.in: + * install-sh: + * libtool: + * ltconfig: + * ltmain.sh: + * missing: + * mkinstalldirs: + * ace/config.h.in: + + Started to introduce the work done by the ACE Configuration + Project into the official ACE distribution. + + To help speed development, the work being done by the ACE + Configuration Project is being slowly introduced into the official + ACE distribution. Some of the functionality in the work created by + the ACE Configuration Project has been removed so that ACE may be + built in the usual fashion. Once the ACE Configuration Project + work stabilizes on more platforms that removed functionality may be + added to ACE. + + Currently the configure script contains most of the tests that are + necessary to properly configure ACE on most platforms. However, + there are still some autoconf tests that are missing. As such, you + may encounter and most likely will have compilation problems. + + The `configure' script that is currently being used has been + modified from the ACE Configuration Project's `configure' script to + prevent makefiles from being automatically generated since there are + still some issues that must be addressed before automatically + generated makefiles are incorporated into the official ACE + distribution. + +Sun Feb 14 14:09:11 1999 James CE Johnson + + * docs/tutorials/015/server.cpp (main): Force the singleton to use + the Select Reactor instead of the OS-default. This should fix the + problem this tutorial has on Win32 due to blocking vs non-blocking + socket configuration. + + * docs/tutorials/015/Protocol_Task.h : Removed the ability to + activate this task. The code is now a little simpler and less + likely to behave in unpredicatable ways. + + * docs/tutorials/015/* : A few typos fixed but mostly fallout from + removing the ability to activate the Protocol_Task. + + * docs/tutorials/016/page01.html : Added Kirthika's abstract. + + * docs/tutorials/016/condition.cpp : Made max_threads_ a + non-static member variable that is set by open(). + + * docs/tutorials/017/page01.html : Added Kirthika's abstract. + +Sun Feb 14 12:47:03 1999 Carlos O'Ryan + + * ace/CDR_Stream.h: + * ace/CDR_Stream.i: + * ace/CDR_Stream.cpp: + Minor cosmetic changes, mostly trailing spaces. + +Sat Feb 13 22:06:17 1999 Nanbor Wang + + The following changes are based on the patch Eric Covington + submitted. Thanks very much to Eric for + bringing ACE/CE up-to-date. + + * ace/ace_ce_dll.dsp: Updated. + + * ace/OS.cpp: (open): CE doesn't support opening files with + attribute FILE_SHARE_DELETE. + + * ace/OS.i (abort): CE doesn't support abort. + + * ace/Stats.cpp (print_summary): CE doesn't support strerror. + + * ace/Stats.i (dump): Changed to use ACE_DEBUG. + + * tests/Thread_Manager_Test.cpp (main): + * ace/tests/SOCK_Connector_Test.cpp (find_another_host): + * ace/Log_Msg.cpp (log): + * ace/INET_Addr.cpp (addr_to_string): Fixed Unicode problems. + +Fri Feb 12 16:14:47 1999 Douglas C. Schmidt + + * ace/Remote_Tokens.cpp: Replaced the typedef for + ACE_TSS_CONNECTION_MUTEX with #define ACE_TSS_CONNECTION_MUTEX. + Thanks to Arturo for reporting this. + +Fri Feb 12 18:41:22 1999 Steve Huston + + * ace/SString.cpp: Added "ace/" to #include "Auto_Ptr.h" to conform + to conding guidelines. + +Fri Feb 12 17:16:17 1999 David L. Levine + + * tests/run_tests.vxworks: commented out Message_Queue_Test and + Timeprobe_Test, because they lockup the machine. And, + fixed string length of DLL_Test printout. + +Fri Feb 12 17:06:30 1999 Arturo Montes + + * ace/config-sco-5.0.0-CC-fsu-pthread.h: removed this config + file, because it's not used. + +Fri Feb 12 16:36:55 1999 Nanbor Wang + + * ace/SOCK_IO.{h,i,cpp} (send,recv): Added back the iovec version + of send/recv back to maintain backward compatibility. Thanks to + Steve for pointing this out. + +Fri Feb 12 15:37:10 1999 David L. Levine + + * ace/Makefile: split FILES up into subsets. See + docs/ACE-subsets.html for more information. + +Fri Feb 12 12:31:29 1999 Ossama Othman + + * ace/Makefile: Removed blank line that was added when troubleshooting + the cvs log problem. The extra line cause Digital Unix's make to + complain about a missing separator. + +Fri Feb 12 09:19:21 1999 David L. Levine + + * ace/config-sunos5.5.h: added ACE_HAS_STANDARD_CPP_LIBRARY and + ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB #defines with Sun CC 5.0. + Thanks to Diethard Ohrt for + providing these. + +Thu Feb 11 15:05:42 1999 Darrell Brunsch + + * ACE-INSTALL.html: Reworded the first step of the Windows + NT installation to be a bit clearer. + +Thu Feb 11 14:30:35 1999 Darrell Brunsch + + * ace/ace_dll.dsp: Fixed Alpha Configuration. + +Thu Feb 11 03:48:50 1999 Nanbor Wang + + * ace/CORBA_macros.h: Added #pragma once and ACE_CORBA_MACROS_H to + prevent duplicate inclusion of this file. + + Added a new macro ACE_ANY_EXCEPTION to denote the name of the + CORBA exception caught by the ACE_CATCHANY. Thanks to Lothar + Werzinger for suggesting this. + +Wed Feb 10 23:01:16 1999 Darrell Brunsch + + * ace/config-win32-common.h: Made a better effort at finding out + if the files are compiled against the correct run-time + libraries. Now _DLL is checked to see if it is defined for + ACE_HAS_DLL != 0 builds, and if it is not defined for static + builds. + + This should help diagnose the problem of not using (Debug) + Multithreaded DLL run-time libraries in clients that use DLL + versions of ace (one symptom of this mistake is errno not + working correctly because of one copy being defined in the DLL + and one in the program itself). + +Wed Feb 10 22:19:33 1999 James CE Johnson + + * docs/tutorials/014/stream.cpp : Removed the __LINE__ displays. + * docs/tutorials/014/page01.html : Added Kirthika's abstract + + * docs/tutorials/015/page01.html : Added Kirthika's abstract + * docs/tutorials/015/page12.html : Oops... Wrong intro text. + * docs/tutorials/015/Protocol_Stream.cpp : Typos fixed + * docs/tutorials/015/Protocol_Task.cpp : Typos fixed + +Wed Feb 10 15:04:26 1999 Ossama Othman + + * ace/Makefile: added Pair_T.cpp and Template_Instantiations.cpp + to the TEMPLATE_FILES list/variable. They were missing. + * tests/Conn_Test.cpp (spawn_processes): initialized + pid_t *children_ptr to zero to prevent "uninitialized" + warnings from egcs 1.1.1. + +Wed Feb 10 14:16:25 1999 Ossama Othman + + * tests/Message_Queue_Test.cpp (performance_test): initialized + ACE_Message_Block **send_block to zero to prevent "uninitialized" + warnings from egcs 1.1.1. + +Wed Feb 10 14:02:46 1999 Ossama Othman + + * ace/ACE.cpp (get_ip_interfaces): initialized struct ifreq * ifs + to zero to prevent "uninitialized" warnings from egcs 1.1.1. + +Wed Feb 10 10:53:59 1999 Carlos O'Ryan + + * examples/IPC_SAP/TLI_SAP/ftp-server.cpp: + Fixed several minor syntax errors. + +Tue Feb 09 16:54:10 1999 Jeff Parsons + + * ace/CDR_Stream.cpp: + Put the 'XXX_DISABLE_SWAP_ON_READ' code back into the + ACE_INputCDR methods read_array(), read_2(), read_4(), + read_8() and read_16(). I didn't realize at first how + crucial that is to the Boeing folks. Thanks to Carlos + for bringing this to my attention. + +Tue Feb 09 16:07:32 1999 Nanbor Wang + + * ace/Synch.{h,i,cpp}: Removed classes ACE_Null_Mutex_Guard and + ACE_Thread_Mutex_Guard since there doesn't seem any need for + them any more. They should be replaced by + ACE_Guard and ACE_Guard. If + by any chance you still need to use them, add + ACE_USES_OBSOLETE_GUARD_CLASSES into your config.h file. + + * ace/Local_Tokens.h: Replaced ACE_Null_Mutex_Guard and + ACE_Thread_Mutex_Guard with ACE_Guard and + ACE_Guard. + +Tue Feb 9 16:12:42 1999 James CE Johnson + + * docs/tutorials/{010|011}/task.{h|cpp} : barrier_ doesn't need to be a + pointer since Doug moved n_threads to the ctor. Minor typos + corrected also. + + * docs/tutorials/010/message_queue.cpp : Typos... + + * docs/tutorials/002/server.cpp: Added call to notify() in the + signal handler so that ^C will exit as expected. + +Tue Feb 09 13:57:23 1999 Nanbor Wang + + * tests/DLList_Test.cpp (main): The test should log the result to + DLList_Test.log, not ACE_DLList_Test.log. + + * tests/run_tests.{sh,vxworks,psosim}: Added DLList_Test. + + * tests/run_tests.bat: Removed DLL_Test. + + * ace/ACE.cpp (ldfind): Win32 only. Made sure we always look for + the DLL at the current directory first on Win32 which is the + default behavior on Win32. + + * ace/ace_{dll,lib}.dsp: Removed entries of Service_Record.{h,i}. + Thanks to David for noticing this. + +Tue Feb 09 10:21:33 1999 David L. Levine + + * ace/Service_Types.{i,cpp},README: removed obsolete references to + Service_Record. + + * tests/MT_Reactor_Timer_Test.cpp (main): added printout with numbers + of expected and actual events, if result is not ACE_MAX_TIMERS + 2 + + * include/makeinclude/wrapper_macros.GNU: added BUILD line with both + shared_libs and static_libs enabled, so that individual Makefiles + don't need a BUILD line. + + * docs/ACE-subsets.html: updated to reflect current ACE status. + +Mon Feb 08 14:32:43 1999 Nanbor Wang + + * docs/exceptions.html: Added guidelines of switching from TAO try + macros to ACE try macros. Other cosmetic changes. + +Mon Feb 8 13:54:32 1999 Yamuna Krishnamurthy + + * docs/tutorials/011/task.cpp : + In the open return this->activate (THR_NEW_LWP, + this->n_threads_); was taking an udefined variable threads. + + * docs/tutorials/011/message_queue.cpp: + Corrected Compilation error due to a typo (static misspelt as + statuc!!!) + +Mon Feb 8 09:21:10 1999 Douglas C. Schmidt + + * ace/Map_T.h, + ace/Pair_T.h: Aded parens around the #pragma implementation file + names so the AIX compiler would be happy. Thanks to Martin + Krumpolec for reporting this. + +Mon Feb 08 00:39:49 1999 Douglas C. Schmidt + + * ACE version 4.6.21 released. + +Sun Feb 7 22:48:01 1999 Nanbor Wang + + * ace/CORBA_macros.h (ACE_THROW_RETURN): The second macro argument + was missing. + +Sun Feb 7 22:32:21 1999 Douglas C. Schmidt + + * ace/CORBA_macros.h: It wasn't clear why the ACE_THROW_RETURN + macro for non-NT platforms wasn't taking a second RETV + parameter. I've fixed this, however. + +Sun Feb 07 13:55:15 1999 David L. Levine + + * include/makeinclude/platform_sunos5_sunc++.GNU: added + comment about possibly needing -compat=4 with Sun CC 5.0. + Thanks to Sush Bankapura for + reporting success with it. + +Sun Feb 7 00:43:32 1999 Jeff Parsons + + * ace/CDR_Stream.cpp: + Turns out that read_boolean_array was declared, but + the body was missing (?). + +Sat Feb 6 22:38:40 1999 Jeff Parsons + + * ACE_wrappers/tests/CDR_Test.cpp: + Changed #include file name to ace/CDR_Stream.h (the new + source file name). + +Sat Feb 6 22:21:14 1999 Carlos O'Ryan + + * ace/CDR_Stream.h: + * ace/CDR_Stream.cpp: + Fixed the write_boolean_array() method; it only needs a const + array of booleans. + +Sat Feb 6 22:07:45 1999 Jeff Parsons + + * ace/CDR.{h,i,cpp}: Renamed these as... + * ace/CDR_Stream.{h,i,cpp}: Mustn't have files with the + same name (the TAO files) for the sake of some compilers. + * Makefile: + * ace_dll.dsp: + Changed to reflect the renaming above. + +Sat Feb 6 20:30:51 1999 Carlos O'Ryan + + * ace/CDR.h: + * ace/CDR.i: + * ace/CDR.cpp: + Fixed some indentation and style problems. + +Sat Feb 06 07:47:20 1999 David L. Levine + + * tests/test_config.h (~ACE_Test_Output): wrapped use of + cerr with #ifndef ACE_LACKS_IOSTREAM_TOTALLY. + +Sat Feb 06 02:41:07 1999 Irfan Pyarali + + * tests/Map_Test.cpp: The hell of explicit template instantiation. + Someone please save me from these stupid compilers. + + * ace/Map: Broken g++ (2.7) has deformed my beautiful code based + on typedefs and forced me to use their basic form. However, + users should continue to use the typedefs provided as I do in + the Map_Test. + +Fri Feb 05 21:57:24 1999 Irfan Pyarali + + * ace/Map_T: Added a new Map mini framework to ACE. The classes + in this mini framework allows the Map interface to be used + without caring about the specific Map implementation being used. + There is the class hierarchy of the framework: + + forwards + ACE_Iterator --------> ACE_Iterator_Impl (abstract) + + ACE_Iterator_Impl is subclassed by: + + - ACE_Map_Impl_Iterator_Adapter + - ACE_Active_Map_Manager_Iterator_Adapter + - ACE_Hash_Map_Manager_Ex_Iterator_Adapter + - ACE_Map_Manager_Iterator_Adapter + + forwards + ACE_Reverse_Iterator --------> ACE_Reverse_Iterator_Impl (abstract) + + ACE_Reverse_Iterator_Impl is subclassed by: + + - ACE_Map_Impl_Reverse_Iterator_Adapter + - ACE_Active_Map_Manager_Reverse_Iterator_Adapter + - ACE_Hash_Map_Manager_Ex_Reverse_Iterator_Adapter + - ACE_Map_Manager_Reverse_Iterator_Adapter + + ACE_Map is subclassed by: + + - ACE_Map_Impl + - ACE_Active_Map_Manager_Adapter + - ACE_Hash_Map_Manager_Ex_Adapter + - ACE_Map_Manager_Adapter + + Also included in the framework is a Key Generator class and a + Key Adapter class. The Key Generator class is used by some map + adapters to generate keys since the maps they adapt do not + generate keys. The Key Adapter class is used by the active map + adapter to allow encoding and decoding of active keys into user + keys. + + Note that the iterators use the bridge pattern while the map + class uses an abstract base class based inheritance approach. + The reason for this is that STL containers return the iterators + by value. An abstract base class cannot be returned by value. + + An alternative design would be to add an abstract base class + that the ACE maps would derive from. Unfortunately, this would + break many things including the ability to add these maps to + shared memory and explicit template instantiations. + + This mini framework would have been idle to apply the external + polymorphism pattern. However, the ACE map classes are + different enough that adaption was necessary. This turned out + to be a blessing in disguise since I was able to add extra + common functionality such as the key generator and key adapter + to the map adapters. I did add the external polymorphic + subclasses to the framework for future use. + + The classes in this framework are as close STL containers as I + would dare to make them ;) Thanks to Carlos for helping design + them. + + * tests/Map_Test: New test to illustrate and test the workings of + the new ACE Map classes. There are two aspect to this test: + (a) functionality testing includes testing the iterators and + various operations, and (b) performance testing to compare the + relative performance of the maps. + + * ace/Pair: Added new Pair class to ACE that holds instances of + the template arguments. Also, added a Reference_Pair class that + only hold references of the template arguments. + + * ace/Hash_Map_Manager_T.* (ACE_Hash_Map_Manager_Ex): + * ace/Map_Manager.* (Map_Manager): + Added new rebind() methods to make interface compatible with + other maps. Also, fixed the constness of some functions. + + * ace/Hash_Map_Manager.h: Fixed order of inclusion of template + code. + + * ace/Active_Map_Manager_T.h (ACE_Active_Map_Manager): Added new + versions of bind, find, and unbind to reduce the number of data + copies. + + * ace/Active_Map_Manager.h (ACE_Active_Map_Manager_Key): Added the + ability for the active key to encode and decode into and out of + a data stream. This relieves the developer from concerning + herself about the internal structure of the active key. + + * ace/config-win32-common.h: Define WIN32 if not already defined. + + * tests/SString_Test.cpp: Added testing for substring creation and + comparisons. + + * ace/OS.h (ACE_dynamic_cast_*_ptr and ACE_dynamic_cast_*_ref): + Added new macros to handle casting of template class. + + * tests/test_config.h: Removed global KEY class that was not being + used anymore anyway. + +Fri Feb 05 21:12:56 1999 Douglas C. Schmidt + + * ACE version 4.6.20 released. + +Fri Feb 05 12:02:31 1999 Steve Huston + + * tests/run_tests.sh: Added SHLIB_PATH support for HP-UX. Fixed + the LD_LIBRARY_PATH setting to work if there was no path set + on entry to the script. + + * ace/config-hpux-9.x.h, config-hpux-(10,11).x-hpc++.h: + Removed ACE_HAS_BROKEN_ENUMS. This affects the HP C++ compiler, not + aC++. I made this change based on David's experience with the + enums and Green Hills, below. If it causes any problems, let me + know and I'll reset it. + +Fri Feb 05 10:11:18 1999 David L. Levine + + * ace/Log_Priority.h: changed ENSURE_32_BITS to LM_ENSURE_32_BITS, + and its value from 0xffffffff to 0x7fffffff. Green Hills 1.8.9 + properly complained that 0xffffffff doesn't fit into an int. + + * ace/config-sco-5.0.0-CC-fsu-pthread.h,config-sunos5.5.h, + config-vxworks5.x.h: removed ACE_HAS_BROKEN_ENUMS, because + it's not necessary with 0x7fffffff. + +Thu Feb 4 23:11:26 1999 Carlos O'Ryan + + * websvcs/lib/URL_Addr.h: + * websvcs/lib/URL_Addr.i: + Added operator= to the ACE_URL_Addr classes. + + * websvcs/lib/URL_Addr.cpp: + Fixed minor memory allocation problem for invalid HTTP + addresses. + It removes './' when creating relative addresses. + +Wed Feb 03 21:50:09 1999 David L. Levine + + * ace/config-vxworks5.x.h: added ACE_HAS_BROKEN_ENUMS with + Green Hills, because it's needed with 1.8.9. And, added + ACE_HAS_STANDARD_CPP_LIBRARY #define to 1, for Green Hills 1.8.9 + (with __STANDARD_CXX #defined) only, because it doesn't work with + 1.8.8. Thanks to Jacob Jones for + reporting these. + + * ace/config-sunos5.5.h: with Green Hills 1.8.9 (with + __STANDARD_CXX #defined), added ACE_HAS_STANDARD_CPP_LIBRARY + #define to 1. + +Wed Feb 03 14:57:21 1999 Nanbor Wang + + * ace/Thread_Manager.h (ACE_At_Thread_Exit[_Func]): Added + ACE_Export keywords. Thanks to Terry Rosenbaum + for pointing this out. + + * ace/Service_Config.{h,i,cpp}: Added one more argument to open + methods that allows ignoring the default svc.conf file. You can + still open svc.conf files using the -f option. + +Wed Feb 03 10:12:14 1999 David L. Levine + + * bin/make_release: fixed release_filter so that it doesn't put + CVS files into the release. + + * ace/Object_Manager.h: updated comments to reflect that + ACE_HAS_NONSTATIC_OBJECT_MANAGER is now #defined in + several ace/config files, including that for Win32. + Thanks to Dave Meyer for pointing + that out. + +Wed Feb 3 09:30:11 1999 Carlos O'Ryan + + * websvcs/lib/URL_Addr.cpp: + Fixed some memory leaks. + HTTP_Addr::create_relative_address supports the #label syntax. + +Wed Feb 03 07:02:49 1999 David L. Levine + + * tests/CDR_Test.cpp: commented out ACE_Auto_Basic_Array_Ptr + explicit instantiation, because it's in ace/Memory_Pool.cpp. + +Tue Feb 2 21:35:21 1999 James CE Johnson + + * docs/tutorials/007/client_handler.h: + * docs/tutorials/007/thread_pool.h: + A couple of syntax goofs. I'm surprised it compiled for anyone! + + * docs/tutorials/007/thread_pool.h: + Changed ACE_Time_Value(0.25) to ACE_Time_Value(0,250000) + + * docs/tutorials/*/Makefile: + Added '.depend' to the list of files removed by the CLEAN + target. I shoulda' done this the other day. + +Tue Feb 2 20:02:22 1999 Darrell Brunsch + + * bin/make_release: Added .gz to the list of binary file extensions. + +Tue Feb 2 19:28:46 1999 Douglas C. Schmidt + + * docs/tutorials: ACE-ified the first 11 tutorials. I hope + James still recognizes this stuff now ;-) + +Tue Feb 2 19:12:50 1999 James CE Johnson + + * docs/tutorials/001/logger.h (class Logging_Handler): + Incorporated Pradeep's suggestion to get rid of the memset() and + use the recv() return value to drop in the null-termination. + +Tue Feb 2 14:19:30 1999 Darrell Brunsch + + * websvcs/websvcs.dsw: + * websvcs/lib/websvcs.dsw: + * websvcs/lib/websvcs.dsp: + * websvcs/tests/tests.dsw: + * websvcs/tests/Test_URL_Addr.dsp: + Added MSVC project files for the websvcs library. + + * websvcs/lib/URL_addr.cpp: + Now correctly exports classes in DLLs. + +Tue Feb 2 12:48:34 1999 Jeff Parsons + + * tests/CDR_Test.cpp: + Changed the template type of the auto_ptr for char. We were + getting a Purify FMR message on Unix. + +Tue Feb 2 12:27:13 1999 Douglas C. Schmidt + + * ace/ACE.cpp: Added an ACE_UNUSED_ARG for program_name for + ACE::daemonize(). Thanks to David Levine for reporting this. + + * ace/OS.h: Generalized the WIF* macros so that they will be + defined on any platform that lacks them, not just NT. Thanks to + David Levine for reporting this. + +Tue Feb 02 08:58:32 1999 Steve Huston + + * tests/MT_Reactor_Timer_Test.cpp: Moved definition of status outside + of ACE_HAS_THREADS condition since it's used in either case. Thanks + to Frederic Andres for this fix. + +Mon Feb 01 23:16:34 1999 Douglas C. Schmidt + + * ACE version 4.6.19 released. + +Mon Feb 01 22:06:40 1999 David L. Levine + + * bin/make_release (create_kit): fixed typo, bin_files + instead of binfiles. + +Mon Feb 01 21:24:45 1999 Douglas C. Schmidt + + * ACE version 4.6.18 released. + +Mon Feb 1 21:02:26 1999 Darrell Brunsch + + * ace/ace_dll.dsp: Some template files were being compiled + in the Release/Unicode/Alpha configs. This is now not the + case. + +Mon Feb 1 13:49:11 1999 Carlos O'Ryan + + * ace/config-linux-common.h: + Added a definition for ACE_TIMER_SKEW, apparently it is only + needed in multiple CPU machines (with SMP enabled); but it did + solve the problems with MT_Reactor_Timer_Test. + +Mon Feb 01 13:08:11 1999 Jeff Parsons + + * tests/CDR_Test.cpp: + Used an auto_ptr to manage a string sent to string_read(). I + had included the .h file for auto ptrs (Carlos corrected my + typo, see below), but had never checked in the code using + auto_ptr. + +Mon Feb 01 12:54:11 1999 Steve Huston + + * ace/NT_Service.(h i): Some fixes provided by Martin Krumpolec + - thanks to Martin for these! + - Supplied missing ctor for name/desc variant. + - svc() method is not pure virtual any longer to prevent SCP-type + applications from having to override it and never use it. + +Mon Feb 1 12:04:35 1999 Darrell Brunsch + + * bin/make_release: Added zip and gif to the binary files in + zips. + +Mon Feb 01 12:00:55 1999 David L. Levine + + * ace/config-sunos5.5.h: With CC 5.0, enabled explicit template + instantiation and added ACE_LACKS_ACE_IOSTREAM. Early versions + of CC 5.0 seem to have problems with automatic template + instantiation and ACE_IOStream. + + * include/makeinclude/platform_sunos5_sunc++.GNU: added CC 5.0 + support to enable explicit template instantiation, and disable + inlining by default. + + Thanks to Diethard Ohrt for confirming + that above fixes allow ACE and TAO to build with CC 5.0. + + * include/makeinclude/platform_sunos5_{g++,ghs}.GNU: removed -lw + from libs. It's not necessary, and apparently causes problems + on Solaris 2.6, because libc now includes the code that was + formerly in libw. Thanks to Steve Coleman + for reporting this. + +Mon Feb 1 10:41:09 1999 Carlos O'Ryan + + * tests/CDR_Test.cpp: + There was a typo in a included filename. + +Mon Feb 1 08:39:15 1999 Douglas C. Schmidt + + * ace/Synch.h: Clarified that the ACE_Semaphore::acquire() is in + absolute, rather than relative, time. Thanks to Jacques + Salerian for reporting this. + +Sun Jan 31 20:10:23 1999 Jeff Parsons + + * ace/OS.h: + Just renamed the CDR byte order macros to something more + reasonable. + +Sun Jan 31 18:19:45 1999 Douglas C. Schmidt + + * docs/tutorials/Makefile: Now we can build the UNSHAR SHAR HTML + right from the top-level. Thanks James! + + * tests/Process_Strategy_Test: Updated the test to use ACE::fork() + and the new "avoid zombies" feature of ACE_Process_Strategy. + + * ace/ACE: Added a new version of fork() that can avoid creating + zombies. Thanks to Garry Brother for + this code. + + * ace/Strategies_T: Changed the ACE_Process_Strategy so that + programmers can designate to not create zombies. Thanks to + Garry Brother for this suggestion. + + * ace/ACE.cpp (daemonize): Only do a chdir if pathname != 0. + + * ace/ACE: Added a "program_name" argument to daemonize() so that + we can set the program name. + + * docs/tutorials: Reformatted all the header files to conform + to the ACE programming style. + +Sun Jan 31 16:09:55 1999 Jeff Parswons >parsons@cs.wustl.edu> + + * ACE_wrappers/tests/CDR_Test.cpp: + Plugged a memory leak in a string read from the CDR stream. + Thanks to Sangwoo Jin for pointing this out. + + * ace/CDR.{h,i,cpp}: + Changed the name of the "base" class holding the constants to + 'CDR' from 'ACE_CDR'. In leveraging this code in the TAO cdr + classes, I've discovered that there are many files that + use these constants, so probably best to keep the original + name. Also made minor changes to read_string, read_wstring, + append_string and append_wstring to prevent a memeory leak + if the operation fails. + +Sun Jan 31 11:58:32 1999 James CE Johnson + + * docs/tutorials/{010|011|012|013|017}: + In all of these, I'd overridden open() as open(int) to specify + the number of threads in a thread-pool. Steve Huston pointed + out that this causes grief with some compilers. I've changed + all of these open(int) overrides to start(int) instead. + + * docs/tutorials/017/Barrier_i.cpp (threads): + The thr_equal() call was changed to !thr_equal(). + + * docs/tutorials/010/taks.cpp: + Vishal recommended some extra commentation to make things a bit + more clear WRT barrier synch. + + * docs/tutorials/013/page01.html: + Added Kirthika's abstract. + +Sat Jan 30 16:03:23 1999 Carlos O'Ryan + + * websvcs/lib/URL_Addr.h: + * websvcs/lib/URL_Addr.cpp: + The HTTP address class can create an URL_Addr from a path + relative to it. This is useful when interpreting an address + inside an HTML document. + +Sat Jan 30 13:34:00 1999 Nanbor Wang + + * examples/Connection/non_blocking/test_sock_connector.cpp (main): + Prevent the program from executing if compiled on non-NT Win32 + platform without Winsock2 installed. Thanks to Greg Harrison + for reporting ths problem. + +1999-01-29 Irfan Pyarali + + * ace/Mem_Map.cpp (map_it): NT makes no claims about replacing + previous mapping at the specified address. Therefore, I have + added a new macro ACE_LACKS_AUTO_MMAP_REPLACEMENT which is + defined if there is no system support for replacing any previous + mappings. In this case, we unmap() before (potentially) mapping + to the same location. ACE_LACKS_AUTO_MMAP_REPLACEMENT is + defined on NT. + +Fri Jan 29 17:40:34 1999 Carlos O'Ryan + + * websvcs/lib/URL_Addr.h: + * websvcs/lib/URL_Addr.cpp: + We were not checking against nil strings in several places, also + fixed some uninitialized members in the HTTP_Addr constructors. + + * bin/auto_compile: + Added protection against simultaneous executions of the script; + it checks for .disable file on the $LOGDIR directory, if present + it does not execute; if not present it creates one; the file is + deleted at program termination. + +Fri Jan 29 16:25:22 1999 Steve Huston + + * ace/config-hpux-10.x-hpc++.h: Added ACE_HAS_GPERF. + * apps/gperf/src/List_Node.cpp (ctor): Added ACE_const_cast to + a char * initializer. + * apps/gperf/src/Options.cpp: Fixed -j processing (typo). + + * docs/tutorials/017/barrier.cpp: Can't init a long with a thread ID. + On HP-UX 10.20, it's a struct. + * docs/tutorials/017/Barrier_i.cpp: Use ACE_OS::thr_equal to check + equality of thread IDs. + + * docs/tutorials/019/server/cpp: Removed redefinition of char *s from + 'for' loop. Works around a compiler issue, but isn't needed anyway. + + * include/makeinclude/platform_hpux_aCC.GNU: On HP-UX 10.20, suppress + (future)error 667 and warning 495 to stop hearing about the problems + with the system-supplied header files. The compiler still says + there was 1 future error, but at least it's easy to scan the output + for real errors now. + +Fri Jan 29 14:49:37 1999 Carlos O'Ryan + + * ace/ACE.cpp: + * ace/Basic_Types.h: + * ace/INET_Addr.cpp: + * ace/Memory_Pool.cpp: + * ace/OS.cpp: + * ace/OS.h: + * ace/OS.i: + * ace/SOCK_Dgram_Bcast.cpp: + * ace/config-cray.h: + * examples/IPC_SAP/SOCK_SAP/C-inserver.cpp: + * examples/System_V_IPC/SV_Semaphores/Semaphores_1.cpp: + * examples/System_V_IPC/SV_Semaphores/Semaphores_2.cpp: + * include/makeinclude/platform_cray.GNU: + * tests/Basic_Types_Test.cpp: + * tests/Handle_Set_Test.cpp: + * tests/Message_Queue_Test.cpp: + * tests/SV_Shared_Memory_Test.cpp: + * tests/run_tests.sh: + Thanks to Doug Anderson for this port of ACE to + Cray machines. + +Fri Jan 29 13:51:40 1999 Nanbor Wang + + * ace/OS.h: Removed definition of ACE_Thread_State. + + * ace/Thread_Manager.*: Changed the ACE_Thread_State as a bunch of + bit-masks so we don't overwrite the thread states accidentally. + Thanks to Tom Dobridge for reporting + the bug. + +1999-01-28 Irfan Pyarali + + * ace/Hash_Map_Manager_T.cpp (open): this->close_i() must be + called *before* the allocators are changed. + + * ace/Map_Manager.cpp (open): Close the old map (if any) before + creating the new map. This also make open() reentrant. Thanks + to Zoran Ivanovic for reporting this bug. + +Thu Jan 28 19:08:25 1999 Carlos O'Ryan + + * ace/Active_Map_Manager_T.h: + Steve's change didn't make it, so I changed BASE to + ACE_AMM_BASE, I don't know about the pragma. + +Thu Jan 28 16:43:17 1999 Steve Huston + + * ace/Active_Map_Manager_T.(h i): Renamed BASE to ACE_AMM_BASE - BASE + conflicted with something in AIX xlC. Also fixed #pragma + implementatation to work on xlC. + +Thu Jan 28 10:04:39 1999 Carlos O'Ryan + + * ace/Hash_Map_Manager_T.cpp: + Reverted to version 4.2, thanks to Kirthika for helping find + this one. + +Thu Jan 28 09:11:29 1999 Andreas Tobler + + * ace/config-linuxppcr5.h: added this config file, for + LinuxPPC R5 platforms. + +Thu Jan 28 08:55:21 1999 David L. Levine + + * ace/config-mklinux.h: replaced ACE_HAS_SOCKLEN_T, removed + __USE_XOPEN. Thanks to Andreas Tobler for + these clarifying this. + +Wed Jan 27 19:12:48 1999 James CE Johnson + + * docs/tutorials/008/*: + * docs/tutorials/009/*: + * docs/tutorials/011/*: + * docs/tutorials/012/*: + Updates from the reviewers. + +Wed Jan 27 17:06:38 1999 David L. Levine + + * ace/Makefile: removed some unprintable characters. + +Wed Jan 27 16:31:01 1999 Ossama Othman + + * ace/Makefile: Added LOCK_SOCK_Acceptor to TEMPLATE_FILES list. + +Wed Jan 27 14:50:13 1999 Nanbor Wang + + * examples/Service_Configurator/Misc/main.cpp: Changed to open the + Service_Config object with ignore_static_svc set to 0. That + allows this example to use static service. (By default, static + services are not loaded.) Thanks to Arturo Montes + for reporting this. + +Wed Jan 27 13:47:00 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU: use + double double quotes around COMPILE argument to ace_ld, + but only on WIN32 hosts. Thanks to Peter Weat + for figuring this out. + +Wed Jan 27 13:04:55 1999 David L. Levine + + * ACE version 4.6.17 released. + +Wed Jan 27 12:32:22 1999 David L. Levine + + * ACE-INSTALL.html,include/makeinclude/platform_vxworks5.x_g++.GNU: + default PERL_PATH to "perl", and added notes to set it to the full + perl path if perl is not on your path. + +Wed Jan 27 10:16:06 1999 Carlos O'Ryan + + * docs/ACE-guidelines.html: + Added an entry for the creation of files containing template + code. + +Tue Jan 26 20:44:36 1999 Nanbor Wang + + * ace/SOCK_IO.cpp (send,recv): Changed to use sendv/recvv to + handle variable arguments send/recv. + + * ACE-INSTALL.html: Fixed the dead link to CE-status. Thanks to + Mike Preradovic for reporting + this. + +Tue Jan 26 14:38:11 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU: expanded + the information on the PERL_PATH environment variable for + NT hosts. Thanks to Peter Weat for + reporting this. + +Tue Jan 26 13:40:51 1999 Nanbor Wang + + * ace/High_Res_Timer.cpp (elapsed_time_incr): Rearranged the + formula to avoid compilation errors for platforms without + ULONGLONG. Thanks to David for the tip. + +Tue Jan 26 12:01:19 1999 Jeff Parsons + + * ACE_wrappers/tests/CDR_Test.dsp: + * ACE_wrappers/tests/CDR_Test.cpp: + Added lines to the test code to send the output to + the log file, and deleted the unnecessary Header + Files folder in the project. + * ace/CDR.{i,cpp}: + Relocated the longdouble comparison operators' + definitions, and moved a misplaced '}', which + were causing build errors. + +Tue Jan 26 10:55:02 1999 Carlos O'Ryan + + * ace/Active_Map_Manager.h: + The _T.h file has to be included *after* the inclusion of the .i + file, otherwise the template may not see the inline functions; + the problem only showed up on IRIX. + +Mon Jan 25 22:11:36 1999 Jeff Parsons + + * ACE_wrappers/tests/CDR_Test.dsp: + * ACE_wrappers/tests/tests.dsw: + * ACE_wrappers/tests/versions_tests/CDR_Test.dsp: + * ACE_wrappers/tests/versions_tests/version_tests.dsw: + * ACE_wrappers/tests/run_tests.sh: + * ACE_wrappers/tests/run_tests.psosim: + * ACE_wrappers/tests/run_tests.bat: + * ACE_wrappers/tests/run_tests.vxworks: + Fixed the project files (they had incorrrect project + settings, I think) and updated the workspace files. + Also, on a tip from Nanbor, added CDR_Test to the + various run_tests files. + +Mon Jan 25 20:22:01 1999 Jeff Parsons + + * ace/CDR.{h,i,cpp}: + * ace/Basic_Types.h: + * ACE_Wrappers/tests/CDR_Test.cpp: + Better design of ACE CDR, compiles and runs on NT, g++ + and CC. + +Mon Jan 25 09:35:42 1999 Steve Huston + + * ace/ACE.cpp (handle_timed_complete): If connect times out, set + errno to ETIMEDOUT, not ETIME. Matches what will happen if a + simple blocking connect times out. + + * ace/OS.i (ACE_OS::accept, ACE_OS::recv): (only non-Win32), if + call fails and errno is EAGAIN, change it to EWOULDBLOCK. + + * tests/MT_SOCK_Test.cpp: Remove EAGAIN hacks; above changes fix + this for all programs. + +Sun Jan 24 22:04:42 1999 David L. Levine + + * docs/ACE-guidelines.html: added operator==/!= guideline. + +Sun Jan 24 20:25:44 1999 Irfan Pyarali + + * ace: When a class provides operator==, it must also provide + operator!=. Also, both these operators should be const. + + Fixed the above violations in: + + ACE_TSS_Ref + ACE_Thread_ID + ACE_Registry::Binding + ACE_Registry::Name_Component + ACE_Active_Map_Manager_Key + + * ace/Map_Manager: Renamed methods that may become identical if + INT_ID is the same as size_t. Thanks to Ossama for helping with + this. + +Sun Jan 24 19:46:55 1999 Jeff Parsons + + * ace/CDR.{h,i,cpp}: + * ace/Basic_Types.h: + Made some fixes to make DEC cxx happy, but I'm going to + undo many of the typedefs and change the design. These + changes will hopefully lead to a clean build with cxx, + but the CDR classes are not yet in finished form. + +Sun Jan 24 19:26:34 1999 Irfan Pyarali + + * ace/SString.cpp (set): Fixed usage case of when the incoming + string is not zero but the length specified is zero. + + * tests/SString_Test.cpp (main): Added zero sized strings and + single character strings to the test. + +Sun Jan 24 19:09:45 1999 Nanbor Wang + + * ace/config-win32-common.h + (ACE_HAS_WORKING_EXPLICIT_TEMPLATE_DESTRUCTOR): VC apparently + does it right. + +Sun Jan 24 17:22:02 1999 Ossama Othman + + * ace/SString.cpp (substring): the variable "length" was misspelled + on one of the lines in the method. + +Sun Jan 24 16:17:58 1999 Nanbor Wang + + * ace/README: + * ace/OS.h: + * ace/config-g++-common.h: + * ace/config-osf1-4.0.h: + * ace/config-psos-diab.h: + * ace/config-psos-tm.h: Replace ACE_HAS_BROKEN_EXPLICIT_DESTRUCTOR + with ACE_HAS_WORKING_EXPLITCIT_TEMPLATE_DESTRUCTOR to reflect + the true problem. Thanks to Ossama for suggesting the name. + +Sun Jan 24 16:20:17 1999 James CE Johnson + + * docs/ACE-FMM: + Added an entry about the DONT_CALL flag to remove_handler(). + + * docs/tutorials/00[45789]: + * docs/tutorials/01[012]: + Many changes from Yamuna, Pradeep, Kirthika and Ossama. In all, + there were 62 files changed. Mostly the .html's due to + recombination and colorization. + +Sun Jan 24 14:23:07 1999 Douglas C. Schmidt + + * ace/SString.cpp: The substring() method did not check for zero + length. Thanks to Mike Goldman for this fix. + +Sun Jan 24 02:08:57 1999 Carlos O'Ryan + + * websvcs/lib/URL_Addr.cpp: + * websvcs/lib/URL_Addr.h: + * websvcs/lib/URL_Addr.i: + * websvcs/tests/Test_URL_Addr.cpp: + Added support for mailto: URLs + +Sat Jan 23 23:53:29 1999 Carlos O'Ryan + + * websvcs/Makefile: + * websvcs/lib/Makefile: + * websvcs/lib/URL_Addr.h: + * websvcs/lib/URL_Addr.i: + * websvcs/lib/URL_Addr.cpp: + * websvcs/tests/Makefile: + * websvcs/tests/Test_URL_Addr.cpp: + Added a small library to keep basic Web related wrappers. The + first set is a small collection of URL address classes, + including HTTP and FTP representations. + +Sat Jan 23 23:26:17 1999 Nanbor Wang + + * ace/High_Res_Timer.{h,cpp} (elapsed_time_incr): Added a new + function to access the incremental timer in nanosecond. + +Sat Jan 23 23:08:27 1999 Jeff Parsons + + * ace/CDR.{h,i,cpp}: + Caught numerous inline ordering errors and mistakes in + long double functions (not defined on NT) with g++. + +Sat Jan 23 21:13:47 1999 Jeff Parsons + + * tests/tests.dsw: + * tests/CDR_Test.dsp: + * tests/Makefile: + * tests/CDR_Test.cpp: + New test in the suite for the new ACE CDR classes (see below). + + * TAO/TAOACE.dsw: + * TAO/TAOACE_static.dsw: + * ace/Makefile: + * ace/CDR.{h,i,cpp}: + * ace/OS.h: + * ace/Basic_Types.h: + CDR stuff modified from TAO library. Typedefs, default + constants and macros added to OS.h and Basic_Types.h. + There is now complete CDR functionality in ACE, except + for the interpreter, and thus also no handling of Any + or TypeCode types. + +Sat Jan 23 17:50:22 1999 Steve Huston + + * tests/MT_SOCK_Test.cpp: 1. Check for EAGAIN as well as EWOULDBLOCK + after an accept fail (this change will probably be removed at some + point when we figure out how to handle EAGAIN/EWOULDBLOCK). + 2. Close the ACE_SOCK_Acceptor in the server before going into + the "reap children" loop so any half-connected clients will get + closed. + +Sat Jan 23 17:25:48 1999 Kirthika Parameswaran + + * ace/Hash_Map_Manager_T.{h,cpp}: Reverted changes made since the + ACE_Hash_Map_Manager_Ex was getting used in shared memory and + hence could not have "virtual" methods. + +Sat Jan 23 04:53:12 1999 Irfan Pyarali + + * ace/Active_Map_Manager: Added a new associative container (map + abstraction) that associates system generated keys with user + specified values. Since the key is system generated, searches + are very fast and take a constant amount of time. This map uses + a key that keeps information of the index and the generation + count of the slot it represents. Since the index information is + part of the key, lookups are super fast and predictable. + + This performance of this map is truely awesome: + + - inserts O(1) worse case + - lookups O(1) worse case + - deletes O(1) worse case + + * ace/Map_Manager: Completely reworked the internals of the + Map_Manager. A number of problems were addressed: + + (a) Finding an empty slot took O(n). New code takes O(1). + + (b) Resizing was lame as it increased by ACE_DEFAULT_MAP_SIZE + everytime. The new scheme is cool since it grows + exponentially up to 64K and after that grow in chunks of + 32K. + + (c) Old scheme used a simple but inefficient flag. + The new scheme uses two doubly linked list to track used and + free slots. Note that this scheme still uses an array to + manage the search structure but manages the two linked list + on top of the array. Thanks to Carlos for this cool idea. + + (d) current_size() was broken. This is fixed in the new code. + + (e) Inlined a bunch of small functions. + + * tests/SString_Test.cpp: Added empty string test. + + * ace/Containers_T.h (operator=): ACE_Array_Base must be fully + qualified: ACE_Array_Base. Thanks to Susan Liebeskind + for pointing this out. + + * tests/Map_Manager_Test.cpp (test_map_manager): Added + Active_Map_Manager to the test. + +Fri Jan 22 21:27:14 1999 Kirthika Parameswaran + + * ace/Hash_Map_Manager_T.h + (class ACE_Hash_Map_Entry): Modified the destructor to be + "virtual" so that it gets invoked on the destruction of its + derived class objects. + (class ACE_Hash_Map_Manager_Ex): Modified the destructor to be + "virtual" so that it gets invoked on the destruction of its + derived class objects. + Modified shared_find () to be "virtual" so that it can be + defined in its derived classes. + Declared a virtual method for creating new entries for the map + called create_entry (). + + * ace/Hash_Map_Manager_T.cpp + (create_entry): Added this virtual method which creates a new + map entry. This is necessary to allow the map to contain various + types of map entries. + (bind_i): + (trybind_i): + (unbind_i): + Used create_entry () to obtain a new entry object. + + * ace/Hash_Purgable_Map_Manager_T.{h,i,cpp}: + The ACE_Hash_Purgable_Map_Manager_Ex derives from + ACE_Hash_Map_Manager_Ex and provides the feature of purging + K entries from the map. The default purging algorithm is Least + Recently Used, which has been implemented using a virtual timer + that increments whenever an entry is looked up or used. Each + entry has a purge_tag which is the timestamp updated by the + timer value whenever it is referenced. The entry is an object of + ACE_Hash_Purgable_Map_Entry class which is derived from + ACE_Hash_Map_Entry. + (purge): This is the method which flushes K entries from the + map. Locks are held. + (purge_i): This method also flushes K entries but w.o. locks + being held. + (create_entry): Creates an ACE_Hash_Purgable_Map_Entry object. + (shared_find): This method is used to lookup and verify whether + an entry is present in the map. Also, the purge_tag of the entry + is updated with the current timer value. + + * tests/Purgable_Map_Manager.cpp: Added this test which + illustrates the use of the Hash_Purgable_Map_Manager to maintain + a cache map. Also displays the change in the map size on + purging. + +Fri Jan 22 16:10:35 1999 Steve Huston + + * ace/Select_Reactor_Base.cpp (ACE_Select_Reactor_Notify::handle_input) + EAGAIN is also a legit errno value (not only EWOULDBLOCK) for end + of data on pipe. Makes count of dispatches returned from + ACE_Select_Reactor's handle_events correct in the presence of + notifications. + + * ace/OS.i (ACE_OS::sema_init): Always init s->name_ to 0, else it + might be non-zero (and junk) when deleted. + + * ace/config-hpux11.h: Added an overrideable ACE_TIMER_SKEW of 10 msec. + +Fri Jan 22 15:07:08 1999 Douglas C. Schmidt + + * ace/Containers_T.cpp: Yikes, don't delete the fixed stack since + it wasn't allocated dynamically! Thanks to Mike Goldman + for this fix! + +Fri Jan 22 13:08:00 1999 Chris Gill + + * ace/ACE.{cpp, h}: added static methods ACE::gcd, which computes the + greatest common divisor of two u_longs using Euclid's algorithm, and + ACE::minimum_frame size, which computes the minimum enclosing frame + size for two u_longs. + +Thu Jan 21 20:45:09 1999 James CE Johnson + + * docs/tutorials/006/client_acceptor.h + * docs/tutorials/006/client_handler.cpp + * docs/tutorials/006/client_handler.h + * docs/tutorials/006/page01.html + * docs/tutorials/006/page02.html + * docs/tutorials/006/page03.html + * docs/tutorials/006/page04.html + * docs/tutorials/006/page05.html + Integrated changes from Vishal and Kirthika + + * docs/tutorials/008/combine.shar + * docs/tutorials/008/page02.html + * docs/tutorials/008/page03.html + * docs/tutorials/008/page04.html + * docs/tutorials/009/combine.shar + * docs/tutorials/009/directed_client.cpp + * docs/tutorials/009/page01.html + * docs/tutorials/009/page02.html + * docs/tutorials/009/page03.html + * docs/tutorials/009/page04.html + * docs/tutorials/009/page05.html + * docs/tutorials/009/server.cpp + Changes from Kirthika plus colorization. + + +Thu Jan 21 16:01:50 1999 James CE Johnson + + * docs/tutorials/007/Makefile: + * docs/tutorials/007/combine.shar: + * docs/tutorials/007/page01.html: + * docs/tutorials/007/page02.html: + * docs/tutorials/007/page03.html: + * docs/tutorials/007/page04.html: + * docs/tutorials/007/page05.html: + * docs/tutorials/007/page06.html: + * docs/tutorials/007/page07.html: + * docs/tutorials/007/page08.html: + * docs/tutorials/007/page09.html: + * docs/tutorials/007/thread_pool.cpp: + * docs/tutorials/008/Makefile: + * docs/tutorials/008/combine.shar: + * docs/tutorials/008/directed_client.cpp: + * docs/tutorials/008/page01.html: + * docs/tutorials/008/page02.html: + * docs/tutorials/008/page03.html: + * docs/tutorials/008/page04.html: + * docs/tutorials/008/page05.html: + * docs/tutorials/008/server.cpp: + * docs/tutorials/009/Makefile: + Included Kirthika's abstract. + Colorized both tutorials & convereted to new format. + +Thu Jan 21 14:25:58 1999 David L. Levine + + * ace/SString.h: changed !ACE_HAS_WINCE wrap of ostream + operators to !ACE_LACKS_IOSTREAM_TOTALLY. + + * ace/OS.i (getuid): added static cast of -1 to uid_t on + Chorus, to avoid compiler warning about change in sign. + + * ace/OS.h: moved (protected) MAXHOSTNAMELEN #define from + pSOS and NT-only code to where its visible on all platforms. + When we removed the #include of rpc.h, we lost the + #define of MAXHOSTNAMELEN on Chorus. + +Thu Jan 21 15:19:26 1999 James CE Johnson + + * docs/tutorials/001/Makefile: + * docs/tutorials/001/page01.html: + * docs/tutorials/001/page02.html: + * docs/tutorials/001/page03.html: + * docs/tutorials/001/page04.html: + * docs/tutorials/001/page05.html: + * docs/tutorials/005/client_handler.cpp: + * docs/tutorials/005/page02.html: + * docs/tutorials/005/page03.html: + * docs/tutorials/005/page04.html: + * docs/tutorials/005/page05.html: + * docs/tutorials/005/page06.html: + * docs/tutorials/006/client_handler.cpp: + * docs/tutorials/006/page01.html: + * docs/tutorials/006/page02.html: + * docs/tutorials/006/page03.html: + * docs/tutorials/006/page04.html: + * docs/tutorials/006/page05.html: + Incorporated new comments from Vishal, Yamuna and Pradeep. + +Thu Jan 21 13:05:31 1999 Steve Huston + + * docs/tutorials/Makefile: Removed include .depend to allow the + whole set of tutorials to be built from the top. Thanks to James + Johnson for guiding this fix. + +Wed Jan 20 19:47:16 1999 Nanbor Wang + + * ace/OS.{h,i,cpp} (fopen): Reimplement fopen using Win32 APIs so + ACE_OS::unlink behaves the same as it does on UNIX platforms. + Both ACE_OS::open and ACE_OS::fopen have been corrected. + There's also a ACE::open_temp_file which should be the prefered + method to open temp files when ACE_HANDLE is used. That's + because Win32 tries to map the file opened by + ACE::open_temp_file to memory. + + * ace/Parse_Node.cpp (symbol): need to be initialized. + Thanks to David for reporting the bug. + +Wed Jan 20 17:37:21 1999 Steve Huston + + * ace/Log_Msg.h: Added "do {} while (0)" as defs for ACE_HEX_DUMP, + ACE_ERROR, ACE_DEBUG when ACE_NLOGGING is defined. Having null defs + for these caused MSVC some problems. Thanks to Doug Schmidt for + giving (and explaining) the correct definitions. + +Wed Jan 20 13:38:03 1999 David L. Levine + + * ace/OS.i (readdir_r): added ACE_UNUSED_ARG (entry) + without ACE_HAS_REENTRANT_FUNCTIONS. + + * docs/ACE-guidelines.html: added guideline for calling + ACE_OS::unlink () immediately after opening a temporary file. + + * *.h: replaced () around #pragma implementation argument. Thanks + to Susan Liebeskind and + Steve Huston for reporting and confirming that it's necessary + on AIX. + +Wed Jan 20 01:48:21 1999 Nanbor Wang + + * ace/Parse_Node.cpp (symbol): Remembered to pass down the + "gobbler" in a Static_Function_Node. Thanks to Eric C. Newton + for reporting and providing the fix. + +Tue Jan 19 17:52:49 1999 Douglas C. Schmidt + + * ace/SString.h: Clarified the role of the argument for + the method. Thanks to Sudhanshu Garg + for suggesting this. + +Tue Jan 19 16:15:26 1999 David L. Levine + + * OS.i,README,config-cygwin32-common.h,config-linux-common.h, + config-psos-diab.h,config-psos-tm.h,config-psosim-g++.h, + config-sco-5.0.0-mit-pthread.h,config-sco-5.0.0.h, + config-tandem.h: removed removed include of rpc/rpc.h, and + ACE_LACKS_RPC_H. Thanks to Susan Liebeskind + for initially suggesting this, + and to Russ Noseworthy for reporting another problem (on + SunOS 5.6 w/o threads) with it. ACE doesn't need it. + + * bin/g++dep: removed /project/doc/pkg/gnu/bin from PATH so that + I can run make depend on Linux. + +Tue Jan 19 12:14:09 1999 Douglas C. Schmidt + + * Makefile (CONTROLLED_FILES): Added ChangeLog-98b to the + CONTROLLED_FILES macro. Thanks to Susan Liebeskind + for suggesting this. + +Tue Jan 19 10:24:00 1999 Chris Gill + + * apps/JAWS/PROTOTYPE/HTTPU/HTTPU.{dsp, dsw}: converted to MSVC++ 6.0 + (and backward compatible) format. + + * apps/JAWS/PROTOTYPE/HTTPU/http_headers.{cpp, h}: fixed ACE_RB_Tree + templates, template instantiations. Thanks to Sridhar Sabella + (ssabbella@cemax.com) for pointing this out. + +Tue Jan 19 00:42:44 1999 Irfan Pyarali + + * examples/Log_Msg/test_callback.cpp (log): Removed the use of + cerr and used ACE_OS::printf() instead. + + * ace/Log_Record.cpp (print): Fixed comparison between signed and + unsigned. Thanks to David Levine for pointing this out. + +Mon Jan 18 23:55:03 1999 Darrell Brunsch + + * ACE-INSTALL.html: Added more info on Alpha configuration + problems and fixes. + +Mon Jan 18 23:07:38 1999 Nanbor Wang + + * ace/OS.cpp (open): Files opened with CreateFileA (on Win32 of + course,) are now opened with FILE_SHARE_DELETE flag set. This + allows ACE_OS::unlink to work as it should. However, I haven't + figured out how to make unlink work with file opened with fopen + yet. Apparently, fopen does not open file with + FILE_SHARE_DELETE. + +Mon Jan 18 22:54:18 1999 Darrell Brunsch + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Updated NT Alpha configurations. + + * apps/gperf/src/gperf.dsp: + * apps/gperf/src/gperf_lib.dsp: + Added NT Alpha configurations. + +Mon Jan 18 22:14:00 1999 James CE Johnson + + * docs/tutorials/011/message_queue.cpp: + * docs/tutorials/011/page02.html: + ACE_Message_Block::copy() will advance the wr_ptr() for us. + Previously, I was doing that myself in run_test(). The test only + worked because I never wrote data to the block after that. If I + had, things would have broken horribly. + +Mon Jan 18 20:41:48 1999 Douglas C. Schmidt + + * ace/Message_Block.h: Clarified that the wr_ptr() is incremented + by n as a result of the copy operation. Thanks to Zoran + Ivanovic for suggesting this. + + * ace/INET_Addr.h (ACE_INET_Addr): Changed the default for + ipaddr_format to 1 (which is what it had been originally) rather + than 0 since the original way is faster since it doesn't use + DNS. Thanks to Zoran Ivanovic for finding + this. + +Mon Jan 18 20:31:47 1999 James CE Johnson + + * docs/tutorials/006/client_handler.cpp: + Typo... + + * docs/tutorials/006/*.html: + * docs/tutorials/006/combine.shar: + Colorized, added Kirthika's abstract. + +Mon Jan 18 16:19:56 1999 Nanbor Wang + + * ace/OS.cpp (open): If a file is open with _O_TEMPORARY flag set + on Win32, we also set the FILE_ATTRIBUTE_TEMPORARY so OS will + try to cache it in memory to speed up access. + + * ace/ACE.cpp (open_temp_file): On Win32, temporary file should be + opened with _O_TEMPORARY flag set, not FILE_DELETE_ON_CLOSE. + + * include/makeinclude/wrapper_macros.GNU: My previous fix of + avoiding multiple definition of ACE_NDEBUG was not correct. Now + the macro check where should the definition go to. Thanks to + David for showing me the right way to do this. + +Mon Jan 18 11:23:06 1999 Carlos O'Ryan + + * include/makeinclude/platform_irix6.x-sgic++.GNU: + Added the -multigot flag when building shared libraries, + otherwise TAO/orbsvcs is too big. + +Mon Jan 18 09:54:54 1999 David L. Levine + + * ace/config-sunos5.5.h: moved ACE_HAS_PRIOCNTL #define so + that it's defined even without threads. Thanks to + Russ Noseworthy for reporting this. + + * ace/OS.cpp (lwp_getparams): removed ACE_MT_SAFE check + that Doug added Saturday. It's not necessary with the + above fix to config-sunos5.5.h. + + * examples/Log_Msg/test_ostream.cpp: don't try to create the + ofstream if ACE_LACKS_IOSTREAM_TOTALLY. Also, removed + declarations of unused argc/argv arguments because some + g++ versions complain about them. + +Mon Jan 18 08:17:49 1999 Douglas C. Schmidt + + * ace/SOCK_IO.cpp, + ace/SOCK_Dgram.cpp: Added + + ACE_UNUSED_ARG (timeout); + + to the #else part of the recv (iovec *) methods. Thanks to Mike + Goldman for reporting this. + +Mon Jan 18 01:13:57 1999 Nanbor Wang + + * ace/CORBA_macros.h: ACE_TRY_NEW_ENV also needs to define a new + CORBA::Environment even with native exceptions. Mark exception + caught by ACE_CATCH as unused arg to avoid compilation warnings. + +Mon Jan 18 00:12:13 1999 Douglas C. Schmidt + + * ACE version 4.6.16 released. + +Sun Jan 17 16:40:22 1999 Douglas C. Schmidt + + * tests/Reactor_Exceptions_Test.cpp (main): Changed the LM_INFO + message to indicate that C++ exception support isn't ENABLED on + a platform, rather than saying that it's not supported at all... + +Sun Jan 17 15:16:35 1999 Nanbor Wang + + * ace/SString.cpp (operator<<): The operator<< used to print out + ACE_WString caused an infinite loop on platform without UNICODE + defined because we didn't convert the wide string on these + platform. However, since an ACE_WString always contains a wide + string, the conversion from wide string to char string should + always be done here. Thanks to Scott Snyder + for noticing this bug. + + (operator<<): Changed the ACE_SString and ACE_CString version to + check against the case when the internal contains 0. + The ACE_CString version was printing out the string one char a + time. Can't see any reason why this is done like this. Changed + to print out the underlying directly. + +Sun Jan 17 14:42:39 1999 James CE Johnson + + * docs/tutorials/001/*: + * docs/tutorials/002/*: + * docs/tutorials/003/*: + * docs/tutorials/004/*: + * docs/tutorials/005/*: + Converted to the new (colorized) format used by T13 and beyond. + I will convert the remaining tutorials (6-12) as each is reviewed. + + * docs/tutorials/005/fix.Makefile: + * docs/tutorials/006/fix.Makefile: + * docs/tutorials/007/fix.Makefile: Replaced by ../fix.Makefile. + + * docs/tutorials/010/Makefile: + * docs/tutorials/011/Makefile: + * docs/tutorials/012/Makefile: + * docs/tutorials/013/Makefile: + * docs/tutorials/014/Makefile: + * docs/tutorials/016/Makefile: + * docs/tutorials/017/Makefile: + These all referenced ../007/fix.Makefile. They now reference + ../fix.Makefile instead. + +Sun Jan 17 13:50:16 1999 James CE Johnson + + * docs/tutorials/002/handler.h: + * docs/tutorials/002/handler.h: + * docs/tutorials/002/page03.html: + * docs/tutorials/003/client.cpp: + * docs/tutorials/003/page01.html: + * docs/tutorials/004/page01.html: + * docs/tutorials/005/client_handler.h: + * docs/tutorials/005/page02.html: + * docs/tutorials/005/page04.html: + * docs/tutorials/005/page05.html: + * docs/tutorials/005/server.cpp: + + More improvements from Doug's class (and Ossama). Each "page2" + includes an abstract by Kirthika. + + Reviewers to date: + Yamuna Krishnamurthy + Kirthika Parameswaran + Balachandran Natarajan + Pradeep Gore + Ossama Othman + +Sat Jan 16 19:08:12 1999 Douglas C. Schmidt + + * ace/High_Res_Timer.cpp: Added #ifdef so high-res timers work + correctly on KCC. Thanks to Scott Snyder + for contributing this. + + * tests/test_config.h: Updated randomize() so that it uses a + "fixed" seed, so that it will produce "reusable" random numbers. + + * include/makeinclude/platform_linux_kcc.GNU (LD): Added the -lm + flag. Thanks to Scott Snyder for + contributing this. + + * tests/run_tests.sh: Added an + LD_LIBRARY_PATH=../netsvcs/lib:$LD_LIBRARY_PATH so that we can + use a relative name for the svc.conf files used in the + Time_Service_Test and Tokens_Test. + + * ace/config-irix6.x-common.h: Added support for long double for + KCC. Thanks to Scott Snyder for + contributing this. + + * ace/config-irix6.x-kcc.h: Added KCC support. Thanks to Scott + Snyder for contributing this. + + * ace/config-osf1-4.0.h: Added KCC support. Thanks to Scott + Snyder for contributing this. + + * ace/IOStream.h: Fixed up the PUT_CODE and GET_CODE macros so + that they work with KCC. Thanks to Scott Snyder + for contributing this. + + * ace/Env_Value_T.h (ACE_Convert): Added a new ACE_Convert + constructor for u_int so that TAO compiles correctly with KCC. + Thanks to Scott Snyder for contributing + this. + + * include/makeinclude/platform_osf1_4.0_kcc.GNU: Added a new + platform config file for KCC. Thanks to Scott Snyder + for contributing this. + +Sat Jan 16 18:13:29 1999 Nanbor Wang + + * include/makeinclude/wrapper_macros.GNU: Commented out adding + ACE_NDEBUG to CCFLAGS to avoid defining it twice. Most (if not + all) platforms include CFLAGS into CCFLAGS. So, if "make + debug=0" no longer work on your platform, then, you may need to + add "CCFLAGS += $(CFLAGS)" into your platform_xxx.GNU. + +Sat Jan 16 13:40:40 1999 Douglas C. Schmidt + + * ace/Proactor.cpp (schedule_timer): Had to add an + ACE_SYNCH_RECURSIVE_THREAD_MUTEX in place of + ACE_Recursive_Thread_Mutex to avoid problems when threads=0. + + * ace/OS.cpp (lwp_getparams): For some reason we had to + add + + # if defined (ACE_HAS_STHREADS) || (defined (sun) && (ACE_MT_SAFE != 0)) + + instead of + + # if defined (ACE_HAS_STHREADS) || defined (sun) + + to avoid problems when threads=0. + + * ace/Asynch_IO.cpp: Replaced some ACE_Thread_Mutex decls with + ACE_SYNCH_MUTEX to avoid problems with threads=0. + + * ace/config-sunos5.6.h: If defined(_POSIX_C_SOURCE) && + _POSIX_C_SOURCE >= 199506L) || defined (__EXTENSIONS__) then + #define ACE_HAS_SIGWAIT to avoid compilation errors. Thanks to + Russ Noseworthy for reporting this. + + * ace/OS.i: Fixed the ACE_OS::readdir_r() so that it doesn't fail + if threads are disabled via "make threads=0". Thanks to Russ + Noseworthy for reporting this. + + * ace/FILE_Connector.h (ACE_FILE_Connector): Added the O_CREAT + flag to the list of flags passed to connect(). This ensures + that the file is created if it doesn't already exist. Thanks to + Pradeep Gore for reporting this. + +Fri Jan 15 21:28:04 1999 Irfan Pyarali + + * ace/Log_Msg (ACE_Log_Msg_Callback): Added an interface class + used for getting logging callbacks. Users who are interested in + getting the logging messages directly, can subclass this + interface and override the log() method. They must then register + their subclass with the Log_Msg class and make sure that they + turn on the ACE_Log_Msg::MSG_CALLBACK flag. + + Your log() routine is called with an instance of + ACE_Log_Record. From this class, you can get the log + message, the verbose log message, message type, message + priority, and so on. + + Remember that there is one Log_Msg object per thread. + Therefore, you may need to register your callback object with + many Log_Msg objects (and have the correct synchronization in + the log() method) or have a separate callback object per + Log_Msg object. + + Thanks to Chris Lahey for suggesting this + and send patches. + + * examples/Log_Msg/test_callback.cpp: Added new example for + Log_Msg. This program tests the Log_Msg abstraction wrt writing + to user defined callback objects. + +Fri Jan 15 21:10:25 1999 Nanbor Wang + + * ace/CORBA_macros.h: Made sure ACE_CORBA_HAS_EXCEPTIONS always + gets set properly. Added ACE_ADPOT_CORBA_ENV to reuse a + existing CORBA::Environment variable. + +Fri Jan 15 17:05:12 1999 Irfan Pyarali + + * ace/Log_Record: Factored out the redundant formatting code. The + new scheme also allows the end user to get to verbose formatted + string. Thanks to Nanbor for helping out with this. + +Fri Jan 15 17:15:18 EST 1999 James CE Johnson + + * docs/tutorials/templates.html + docs/tutorials/001/acceptor.h + docs/tutorials/001/logger.h + docs/tutorials/001/page01.html + docs/tutorials/001/page02.html + docs/tutorials/001/page03.html + docs/tutorials/001/page04.html + docs/tutorials/001/page05.html + docs/tutorials/001/server.cpp + docs/tutorials/003/page01.html + + Many changes from Ossama plus a new abstract (for T3) from + Kirthika. + +Fri Jan 15 14:40:26 1999 Douglas C. Schmidt + + * ace/SOCK_IO, + ace/SOCK_Dgram: Modified the recv(iovec *) and recvv(iovec *) + methods so that they use select() to avoid spinning if no data + is available. Thanks to Mike Goldman for this + fix. + +Fri Jan 15 10:47:26 1999 Douglas C. Schmidt + + * ace/Service_Repository.cpp: If a service being removed from the + Service_Repository used the Service_Repository while being + removed it could access objects that had already been deleted. + Fix this by decrementing the current_size_ member in + "real-time". Thanks to Eric Newton for reporting this. + +Fri Jan 15 08:08:31 1999 Douglas C. Schmidt + + * ACE version 4.6.15 released. + +Fri Jan 15 07:20:46 1999 Chris Gill + + * ace/OS.i: Fixed variable names in isatty () on NT + +Fri Jan 15 03:45:46 1999 Nanbor Wang + + * docs/exceptions.html: Rewrote the exception handling guildlines + based on ACE's try macros. + +Fri Jan 15 01:32:55 1999 Douglas C. Schmidt + + * ACE version 4.6.14 released. + +Fri Jan 15 00:03:32 1999 Irfan Pyarali + + * examples/Log_Msg/test_ostream.cpp: Added new example for + Log_Msg. This program tests the Log_Msg abstraction wrt writing + to stderr and to a file. + +Thu Jan 14 21:50:22 1999 Nanbor Wang + + * ace/CORBA_macros.h: Added a new set of try macros which help + application developers write portable code that handles + CORBA::Exception portably. The macros will work with any ORB. + + The total number of macros has reduces significantly and they + should be much easier to use because the rules all follow the + same style. + + The new try macros should be prefered over the original try + macro in $TAO_ROOT/TAO/try_macros.h because those macros will + soon be *DEPRICATED* once we finished convert TAO to use the new + macros. + + Please see ACE_wrappers/docs/exceptions.html for guidelines and + rules of using ACE's try macros. + +Thu Jan 14 20:41:33 1999 Douglas C. Schmidt + + * ace/OS: Moved some code around to consolidate the getuid() and + isatty() functions. + + * ace/OS: Added support for the setuid() call. Thanks to Susan + Liebeskind for suggesting + this. + +Thu Jan 14 16:18:37 EST 1999 James CE Johnson + + * docs/tutorials/001/page02.html: + docs/tutorials/001/page03.html: + + Included Kirthika Parameswaran's + abstract and analogy. Thanks Kirthika! + + * docs/tutorials/001/Source.tgz: + docs/tutorials/001/acceptor.h: + docs/tutorials/001/logger.h: + docs/tutorials/001/server.cpp: + docs/tutorials/001/page[345].html: + * docs/tutorials/002/page0[23].html: + docs/tutorials/002/handler.h: + + Added improvements from Kirthika, Pradeep and Yamuna + +Thu Jan 14 11:46:25 1999 Douglas C. Schmidt + + * ace/Synch_T.h: Pointed out that we can only parameterize + ACE_Condition<> with ACE_Thread_Mutex and ACE_...Null_Mutex. + Thanks to Knut-Havard Aksnes for reporting + this. + +Thu Jan 14 02:33:37 1999 Douglas C. Schmidt + + * ACE version 4.6.13 released. + +Thu Jan 14 00:07:34 1999 Irfan Pyarali + + * docs/tutorials/014/stream.cpp: Added #include "ace/streams.h". + +Wed Jan 13 23:18:03 1999 Nanbor Wang + + * ace/OS.h: + * config-g++-common.h: + * config-osf1-4.0.h: + * config-psos-diab.h: + * config-psos-tm.h: Revert my previous change. Removed the + ChangeLog entry about the change. + +Wed Jan 13 22:30:49 1999 David L. Levine + + * include/makeinclude/platform_chorus_ghs.GNU: removed + explicit link with libedgnoe.a, because GreenHills adds + that implicitly. + + * ace/OS.h: added quick hack to ACE_HAS_BROKEN_EXPLICIT_DESTRUCTOR + logic to allow compilation with g++. + +Wed Jan 13 18:48:30 EST 1999 James CE Johnson + + * docs/tutorials/004/client.cpp: + docs/tutorials/010/message_queue.cp: + docs/tutorials/011/message_queue.cpp: + docs/tutorials/012/message_queue.cpp: + docs/tutorials/013/message_queue.cpp: + docs/tutorials/014/EndTask.h: + docs/tutorials/019/client.cpp: + docs/tutorials/019/client2.cpp: + docs/tutorials/019/server.cpp: + docs/tutorials/019/server2.cpp: + docs/tutorials/019/shmem.cpp: + docs/tutorials/020/client.cpp: + docs/tutorials/020/server.cpp: + docs/tutorials/021/client.cpp: + docs/tutorials/021/mpool.cpp: + docs/tutorials/021/mpool.h: + docs/tutorials/021/server.cpp: + Fixed many NT issues found by Irfan. Most are related to the + fact that NT doesn't have SysV shared memory. + +Wed Jan 13 04:45:59 1999 James C Hu + + * ace/Cache_Object.{h,cpp}: + * ace/Cache_Manager.{h,cpp}: + * ace/Cache_Manager_T.{h,cpp}: + * ace/Cache_Hash_T.{h,cpp}: + * ace/Cache_Heap_T.{h,cpp}: + * ace/Hash_Bucket_T.{h,cpp}: + Supporting infrastructure for the new Filecache. These classes + form the basis of a generic in memory cache engine. + +Wed Jan 13 02:17:57 1999 Irfan Pyarali + + * ace/OS.cpp (writev): This function should use ACE::write_n + instead of ACE::send_n. Similarly, readv() should use + ACE::read_n instead of ACE::recv_n. + + * ace/ACE.cpp (send): This function should use ACE_OS::sendv + instead of ACE_OS::writev. Similarly, recv() should use + ACE_OS::recvv instead of ACE_OS::readv. + + * docs/tutorials: Fixed all the NT project files. + +Tue Jan 12 22:41:05 1999 Nanbor Wang + + * ace/config-freebsd.h: Uncommented ACE_HAS_SIGWAIT. This is + required for FreeBSD 2.2.8. Thanks to John Aughey + for reporting this. + + * ace/SOCK_IO.{h,i}: + * ace/SOCK_Stream.{h,i} (sendv_n/recvv_n): Moved these functions + from SOCK_IO to SOCK_Stream where it makes more sense to have + the semantic of sending/receiving bytes. + +Tue Jan 12 19:52:26 1999 Nanbor Wang + + * ACE-INSTALL.html: Added more info on dynamically linking + run-time libraries. + + * ace/SOCK_IO.{h,i,cpp} (sendv,recvv,sendv_n,recvv_n): Renamed + vector send_n/recv_n. There were name clashing since these + methods have similar signatures to some send_n/recv_n in + ACE_SOCK_Stream, they got hidden by the derived methods. + Renaming them solve the problem. + +Tue Jan 12 10:59:58 1999 David L. Levine + + * include/makeinclude/platform_chorus_ghs.GNU: fixed location of + libedgenoe.a, so that a symlink in $(GHS_DIR) is no longer necessary. + Thanks to Steve Kay for reporting this. + + * ace/config-mklinux.h: removed ACE_HAS_SOCKLEN_T, added __USE_XOPEN. + Thanks to Andreas Tobler for these updates. + +Tue Jan 12 08:44:11 EST 1999 Aniruddha Gokhale + + * ace/Acceptor.cpp (handle_close): + + Since the reactor_ data member is made private, we need to use + its accessor method to retrieve it. + +Tue Jan 12 02:12:38 1999 Nanbor Wang + + * ace/OS.h (ACE_DES_NO_FREE,ACE_DES_FREE): These two macros + shouldn't be treated differently no matter + ACE_HAS_BROKEN_EXPLICIT_DESTRUCTOR is defined or not. + Otherwise, virtual destructor won't work in one of the original + definitions. + + There shouldn't be different different definitions for calling + template destructor explicitly either. However, we need to find + that out. The meaning of ACE_HAS_BROKEN_EXPLICIT_DESTRUCTOR + seems to be reversed. That needs to be fixed also. + +Tue Jan 12 00:18:15 1999 Douglas C. Schmidt + + * ace/Event_Handler.h: Moved the priority_ and reactor_ data + members into the private section of the class since these can + always be accessed via their accessor methods. Thanks to Mike + Goldman for reporting this. + +Mon Jan 11 15:30:26 1999 Nanbor Wang + + * ace/Process.{h,i} (get_process_attributes,get_thread_attributes): + Removed the constness from the return value to avoid Intel C++ + warnings. Thanks to Karel Zuiderveld + for reporting this. + + * bin/ADDIDL.DSM: A VB script to add new IDL files into DevStudio + projects. Thanks to Peter for contributing + this nice tool. + +Mon Jan 11 12:54:26 1999 Douglas C. Schmidt + + * ace/SOCK_IO: Added const qualifiers to all the send*() and + recv*() methods that take ACE_Time_Value values. Thanks to Jody + Hagins for reporting this. + + * ace/SOCK_IO: Added a new send_n() method that uses the new + ACE::sendv_n() method! + + * ace/ACE: Added a new sendv_n() and writev_n() method that sends + all the bytes in the iovec! + + * ace/ACE.h (ACE): Added default values of 0 for ACE::writev() and + ACE::readv(). + + * examples/NT_Service: Tidied up the formatting to conform to the + ACE programming guidelines. + +Mon Jan 11 10:23:06 1999 Nanbor Wang + + * ace/config-freebsd-pthread.h: Added ACE_LACKS_READDIR_R. + * ace/config-freebsd.h: Added ACE_LACKS_READDIR_R, + ACE_HAS_NONCONST_MSGSND, ACE_LACKS_MALLOC_H. ACE_HAS_SIGINFO_T + only applies to 3.0 and above. Thanks to Ivan Pascal + for reporting the change. + +Sun Jan 10 21:52:57 1999 David L. Levine + + * tests/Message_Queue_Notifications_Test.cpp (iterator_test): + added comment explaining why a message queue size of 32 Kb + is used, instead of the default of 16 Kb. + + * docs/ACE-guidelines.html: added guidelines for boolean types + and function return values. + +Sun Jan 10 17:33:29 1999 Douglas C. Schmidt + + * tests/Message_Queue_Notifications_Test.cpp: Replaced delete mb + with mb->release(). Thanks to Susan Liebeskind + for reporting this + inconsistency. + + * ace/Task_T.h, + ace/Message_Queue_T.h: Clarified the fact that the + ACE_Time_Value arguments to the Message_Queue methods + use absolute, rather than relative, time. Thanks to + Stanford S. Guillory for pointing out + the need for this clarification. + +Sun Jan 10 09:18:41 1999 Martin Krumpolec + + * ace/Log_Msg.cpp (log): only re-enable tracing if it had + not been explicitly disabled. + +Sun Jan 10 01:06:18 1999 Irfan Pyarali + + * ace/Log_Msg.cpp (log): Change call from exit() to abort(). + + * ace/OS.i (abort): Added new function. + +Sat Jan 9 22:05:07 1999 Nanbor Wang + + * bin/tao_env.pl: A new perl script that help you translate _env + to TAO_IN_ENV. + +Sat Jan 09 10:53:37 1999 David L. Levine + + * ace/Name_Proxy.cpp (open): swapped branches of conditional + so that options.time_value () is used if USE_TIMEOUT is enabled. + Thanks to Mike Goldman for reporting this. + +Fri Jan 08 19:19:17 1999 Nanbor Wang + + * ace/OS.h: Applied ACE_TEXT to the definition of + ACE_DEFAULT_TEMP_FILE on Win32. Thanks to + for reporting this. + +Fri Jan 08 13:24:12 1999 David L. Levine + + * ace/Synch.h (ACE_Process_Mutex): made data members + private instead of public. Thanks to Peter Gross + for reporting this. + + * examples/Threads/reader_writer.cpp: removed volatile + qualifier from declaration of "shared_thr_id", so that + the file will compile on DU 4.0 with DCE threads. The + volatile qualifier caused a type mismatch with + ACE_thread_t. And, it's not necessary, because all + access of the shared_thr_id is guarded. + + * include/makeinclude/platform_chorus_ghs.GNU: added gnuch68 + to -alttools, and removed bin from AR; use libedgnoe.a instead + of libedg.a with GHS 1.8.9.1. + + * ace/config-sunos5.5.h: don't define ACE_HAS_XPG4_MULTIBYTE_CHAR + with ghs, because its version 1.8.9 doesn't seem to support it. + Also, with ghs, replaced the __ctype [] declaration with an + #include of , because that's cleaner. Finally, + added ACE_HAS_BROKEN_ENUMS for ghs (1.8.9). + +Thu Jan 07 09:05:27 1999 David L. Levine + + * ace/config-sunos5.5.h: added ACE_HAS_SIG_C_FUNC with + Sun CC >= 4.2. Sun CC 5.0 needs it; Sun CC 4.2 doesn't + object to it on SunOS 5.5.1, 5.6, and 5.7. Thanks to + Neil Cohen for figuring out how to + compile ACE with Sun CC 5.0. + + * include/makeinclude/platform_sunos5_sunc++.GNU: only + use -features=castop and -rtti with Sun CC 4.2. CC 5.0 + doesn't support them; I assume that it enables RTTI by + default. Thanks to Neil Cohen for + reporting this. + + * ACE-INSTALL.html: added ACE_HAS_REGEX #undef suggestion for + shared lib link problems with egcs 1.1.x on Solaris 2.5.x. + Thanks to Bob McWhirter for reporting this + problem. + +Thu Jan 07 04:45:36 1999 Douglas C. Schmidt + + * ACE version 4.6.12 released. + +Thu Jan 07 04:01:08 1999 Irfan Pyarali + + * ace/Containers_T.cpp (max_size): No need to reallocate if the + new size is the same. Thanks to Mike Goldman for + pointing this out. + + * ace/Strategies_T.cpp (check_hint_i and cleanup_hint_i): + purge_i() should be called after the entry is closed. + + * Select_Reactor_Base.cpp (unbind): The next + should be calculated not only based on the but also + the . + + Thanks to Mark L. Boriack for providing + a description of this bug. + +Wed Jan 06 21:42:11 1999 David L. Levine + + * ace/OS.cpp (thr_create): moved #endif /* ACE_LACKS_SETDETACH */ + outside of }, to allow compilation on DU 4.0/cxx with DCE threads. + + * ace/config-osf1-4.0.h: with DCE threads only, added + ACE_LACKS_THREAD_PROCESS_SCOPING. + +Wed Jan 06 16:36:21 1999 David L. Levine + + * ACE version 4.6.11 released. + +Wed Jan 06 15:15:37 1999 Nanbor Wang + + * ace/Service_Config.cpp (process_directive,close): Moved the + deletion of into close method. + Otherwise, there's no way to reconfigure the service + configuration once it get started. Thanks to Mike Goldman + for reporting the problem. + +Wed Jan 6 14:27:24 EST 1999 James CE Johnson tutorial. It could be a lot better + than it is but I'm still new to ACE_Malloc... + + * docs/tutorials/021/online-tutorials.html: + Added the link for #21 + +Tue Jan 05 22:55:07 1999 Irfan Pyarali + + * ace/Strategies_T.cpp (cleanup_hint_i and check_hint_i): Since we + are holding the connection cache lock in these methods, the + Svc_Handler should not call purge(). If it does, a deadlock + will occur (unless we have recursive locks) since we are already + holding the connection cache lock. Therefore, we zero out the + recycler before calling svc_handler->close() and purge out the + svc_handler entry ourself (through purge_i()). + + Thanks to Mark L. Boriack for providing + a precise example illustrating this bug. + +Tue Jan 5 18:48:47 James CE Johnson + + * docs/tutorials/templates.html: Fixed a number of problems here. + Thanks to Amos Shapira for pointing + them out. + + * docs/tutorials/colorize: I pulled out the colorization code from + combine into this standalone script. One of these days I'll fix + combine so that the code isn't duplicated... + +Tue Jan 5 16:14:00 1999 Carlos O'Ryan + + * ace/config-irix6.x-common.h: + Added ACE_TIMER_SKEW definition. + + * ace/FILE.cpp: + Fixed the seek() prototype, is was declared as taking a "off_t" + argument, but is was defined with a "long" argument, + unfortunately in most platforms this was not a problem. + +Tue Jan 05 13:15:35 1999 Nanbor Wang + + * ace/Service_Config.i (open): Be sure to pass down the + argument down to the real open method. + +Tue Jan 05 08:08:06 1999 David L. Levine + + * tests/MM_Shared_Memory_Test.cpp (spawn): fixed syntax error + by moving ) to end of ACE_ERROR invocation. + + * ace/config-osf1-4.0.h: added 10 ms ACE_TIMER_SKEW, so that + MT_Reactor_Timer_Test passes. + + * ace/config-lynxos.h: added 10 ms ACE_TIMER_SKEW, so that + MT_Reactor_Timer_Test comes closer to passing. It now + chokes on the wait () near the end. + + * ace/OS.i (thr_getspecific): moved return 0 statement inside + the Draft 7/STD #else block, to avoid warning about unreachable + statement with Draft 4/6. + + * ace/config-osf1-4.0.h: with Draft 4 pthreads, added + ACE_LACKS_READDIR_R. + + * tests/MT_Reactor_Timer_Test.cpp (main): added printout if + wait () fails. + +Tue Jan 5 00:59:04 1999 Douglas C. Schmidt + + * ace/Synch: Changed the remove() method of ACE_Thread_Mutex, + ACE_Mutex, ACE_Semaphore, ACE_RW_Mutex, ACE_Event, + ACE_Thread_Condition_Mutex, ACE_File_Lock, and + ACE_Recursive_Thread_Mutex so that they check a flag to see if + remove() has already been called. If it has, then the remove() + call does nothing. This avoids nasty problems on platforms like + Win95 that fail mysteriously if locks are destroyed multiple + times. Note that our solution isn't perfect since it won't + protect against race conditions if multiple threads call + remove() simultaneously. However, if this happens it's a sign + that the application was designed incorrectly... Thanks to Paul + Felix and Irfan for tracking this down.... + + * ace/FILE: Added new methods, seek() and tell(), that are more + intuitively named than the existing position() methods. The + position() methods have been retained for backwards + compatiblity, but are now marked as deprecated. + + * ace/OS.h: Added a macro for ACE_DEFAULT_HTTP_PORT, which + is 80 of course... + + * ace/INET_Addr.cpp: Make sure that addr_to_string() correctly + checks the length of its buffer before doing a sprintf(). In + addition, added an option to print the results in either ip-addr + format or ip-name format. + + * ace/Mem_Map.cpp (map): where ace/Mem_Map.cpp mmap() will succeed + if the length of the file mapping is 0, which will be the case + if we've just created the file. This was the wrong place to + make this check. + + * tests/MM_Shared_Memory_Test.cpp: Cleaned up a few things + in this test so that it'll be easier to maintain. + +Mon Jan 04 08:45:45 1999 David L. Levine + + * ace/config-sunos5.7.h: only use the g++ hacks if the + g++ version is prior to 2.8. Assume that later versions + were built on SunOS 5.7 host, and/or don't have header + files that are incompatible with the system headers. + + * bin/create_ace_build: changed symlink creation failure from + error (with termination) to warning create_ace_build. + +Mon Jan 4 03:15:57 1999 Douglas C. Schmidt + + * ace/Mem_Map: If we're remapping an already-mapped file + (i.e., the base_addr_ != 0) && the addr parameter IS 0 (i.e., + the user isn't trying to respecify where to map this file), then + we'll try to map over top of the existing region, which implies + "MAP_FIXED". + +Sun Jan 03 23:21:46 1999 Nanbor Wang + + * ace/Service_Config.cpp (initialize): Both initialize methods now + remove the service object from the repository if its init() + method failed. + +Sun Jan 3 14:39:49 1999 Douglas C. Schmidt + + * ace/ACE: Added a simple dirname() wrapper method. + + * ace/SString: The set(const char *, size_t, int = 1) and + set(const char *, int) methods were inherently ambiguous. + I've fixed this by changing removing the default parameters. + Thanks to Irfan for suggesting this fix. + + * ace/Mem_Map.cpp: mmap() will fail if the length of the file + mapping is 0, which will be the case if we've just created the + file. Therefore, don't even bother trying to mmap() in this + case and return a successful result. + + * ace/FILE: Moved the get_remote_addr() and get_local_addr() + methods from the FILE_IO class to the FILE class since that's + more properly where they belong. Also added a new remove() + method that unlinks the file. + + * tests/Priority_Reactor_Test.cpp, + tests/Conn_Test.cpp, + tests/Notify_Performance_Test.cpp, + Priority_Reactor_Test.cpp, + Reactor_Performance_Test.cpp: Since the default is to skip argv0 + there's no sense explicitly saying this in the constructor of + ACE_Get_Opt. + + * ace/FILE_Connector.h: Updated the comments to reflect recent + changes. + + * ace/FILE.h: Added a new get_info() method that takes a reference + to an ACE_FILE_Info rather than a pointer. This is a cleaner + API, IMHO. + + * ace/FILE_Connector.cpp (connect): When the argument + is ACE_Addr::sap_any, then connect will select a temporary + filename using the new feature of ACE_FILE_Addr described below. + + * ace/FILE_Addr.cpp (set): When the address is ACE_Addr::sap_any, + then we'll select a new temporary filename using the new + ACE_DEFAULT_TEMP_FILE macro and ACE_OS::mktemp(). + + * ace/OS.h: Added a new ACE_DEFAULT_TEMP_FILE macro that defaults + to "/tmp/ace-file-XXXXXX" and is used by the ACE_FILE_Connector + to create a temporary file when it's given an ACE_Addr::sap_any. + + * ace/FILE_Addr.h: The accessor should return an int to be + consistent. + + * ace/OS.h: Added a new ACE_sap_any_cast macro, which makes it + much easier to cast the ACE_Addr::sap_any to the right subclass. + + * tests/Reactor_Performance_Test.cpp, + tests/Reactor_Exceptions_Test.cpp, + tests/Process_Strategy_Test.cpp, + tests/Priority_Reactor_Test.cpp, + tests/IOStream_Test.cpp, + tests/Conn_Test.cpp: Replaced all the C-style casts for + ACE_Addr::sap_any with the new ACE_sap_any_cast macro. + +Sun Jan 03 21:48:37 1999 Irfan Pyarali + + * ace/Asynch_Acceptor.cpp: Since this is a template file, I + removed it from the ace library build on NT. + + * ace/Asynch_Acceptor.cpp (open): Changed C-style cast to use the + new ACE_sap_any_cast macro from Dr. Schmidt. + +Sun Jan 03 09:12:23 1999 David L. Levine + + * ace/config-sunos5.5.h: with GreenHills, added + ACE_LACKS_LINEBUFFERED_STREAMBUF and ACE_LACKS_SIGNED_CHAR. + + * ace/Basic_Types.* (ACE_U_LongLong): unioned the data members + with a double, to ensure alignment on 8-byte boundaries. It + could matter when an ACE_U_LongLong is used as a true 8-byte + quantity, such as in a call to Solaris ::gethrtime (). + + * tests/Time_Value_Test.cpp: replaced remaining #ifdef + ACE_HAS_STHREADS with #ifdef sun. + +Sat Jan 2 23:48:44 1999 James CE Johnson + + * docs/ACE-tutorials.html + * docs/tutorials/guide-tutorials.html + * docs/tutorials/new-tutorials.html + * docs/tutorials/online-tutorials.html + Converted some of the absolute URLs to relative. I only have the + docs/tutorials tree here at home so I couldn't do any more than + these. + + * docs/tutorials/021/* + New tutorial on ACE_Malloc<>. I haven't begun the documentation + yet but wanted to get the code commited so it doesn't get lost. + +Sat Jan 02 08:34:27 1999 David L. Levine + + * examples/ASX/Event_Server/Event_Server/event_server.cpp + (handle_input), + examples/Reactor/Misc/test_early_timeouts.cpp (main): + added ACE_UNUSED_ARG (n), to avoid compile warning with ACE_NDEBUG. + + * performance-tests/Misc/test_naming.cpp (find): moved function + call w/side effect out of ACE_ASSERT. Thanks to DU 4.0 cxx + for noticiing it, with ACE_NDEBUG. + +Fri Jan 01 18:57:22 1999 David L. Levine + + * ace/Containers_T.i (ACE_Array,ACE_Array::operator=): + added missing ACE_INLINE's. + + * ace/OS.{h,cpp} (ACE_TSS_Info::operator{==,!=}): added + constness. It's necessary with the ACE_Array changes, + with ACE_HAS_TSS_EMULATION. + +Fri Jan 1 12:22:14 1999 Carlos O'Ryan + + * ace/Containers_T.h: + * ace/Containers_T.i: + * ace/Containers_T.cpp: + * bin/Array_Helper: + * bin/Array.pl: + Moved most of the implementation of ACE_Array into + ACE_Array_Base this class does not require == or != operators + defined for the template parameter. + I also added methods to access and manipulate the capacity of + the array (max_size) as opposed to always changing its size (the + portion actually used). + + * ace/Object_Manager.cpp: + * ace/Template_Instantiations.cpp: + * ace/OS.cpp: + * apps/JAWS/clients/Caching/URL_Properties.cpp: + Fixed ACE_Array instantiations. diff --git a/ACE/ChangeLogs/ChangeLog-99b b/ACE/ChangeLogs/ChangeLog-99b new file mode 100644 index 00000000000..2bdeb97ccd3 --- /dev/null +++ b/ACE/ChangeLogs/ChangeLog-99b @@ -0,0 +1,7290 @@ +Fri Dec 31 08:07:18 1999 David L. Levine + + * all Makefiles: updated dependencies. + +Thu Dec 30 11:17:27 1999 David L. Levine + + * etc/ACE-development-process.html: fixed some typos. + +Wed Dec 29 15:42:21 1999 David L. Levine + + * ace/OS.h: added null definition of ACE_ENDLESS_LOOP, + if not already #defined. + + * ace/config-cxx-common.h: added definition of ACE_ENDLESS_LOOP + to avoid compiler warning about unreachable statement following + the loop. + + * examples/IPC_SAP/SOCK_SAP/CPP-inserver-poll.cpp (main): + inserted ACE_ENDLESS_LOOP. + +Wed Dec 29 13:21:48 1999 David L. Levine + + * include/makeinclude/platform_linux_cxx.GNU: added + MATHLIB and test -f cxx_repository/*.o. + +Wed Dec 29 09:11:46 1999 David L. Levine + + * ace/config-cxx-common.h: enable ACE_USES_OLD_IOSTREAMS + without __USE_STD_IOSTREAM. Removed ACE_HAS_STRING_CLASS + on Linux, because IOStream_Test won't compile with it. + + * include/makeinclude/platform_linux_cxx.GNU: removed + -D__USE_STD_IOSTREAM test, because IOStream_Test failed + with it. + + * include/makeinclude/platform_linux_cxx.GNU: Removed + -use_ld_input because it has no effect on Linux. Thanks + to Ken Block for pointing + that out. + +Tue Dec 28 18:32:02 1999 Vishal Kachroo + + * ace/QoS_Session_Impl.cpp: Added a comment for get qos(). + + * examples/QOS/Receiver_QOS_Event_Handler.cpp: + * examples/QOS/Receiver_QOS_Event_Handler.h: + * examples/QOS/server.cpp: + + Changed the server of the GQoS example to use the newly added + QoS classes of ACE. The program structure has changed to reflect + the abstractness of the ACE QoS API. The final goal is to remove + all the GQoSisms from the applications, even if this means + constraining it by the granularity provided by RAPI. + +Tue Dec 28 15:50:46 1999 David L. Levine + + * tests/test_config.h (set_output): removed the flags + local variable, with its conditionally compiled type + determination. The absorbed code is much cleaner. + +Tue Dec 28 15:37:11 1999 Chris Gill + + * ace/Log_Msg.cpp + ace/Malloc.cpp + ace/OS.{cpp, h, i} + ace/Process_Manager.cpp + ace/SOCK_Dgram_Mcast.cpp + ace/Service_Config.{cpp, h} + ace/Task.cpp + ace/Thread.i + ace/Thread_Manager.{cpp, h} + + ace/config-psos-diab-ppc.h: merged in changes for pSOS (Diab PPC) + to support additional pHILE+ file system capabilities, and to deal + with the limitations on sharing file and socket handles across pSOS + tasks. Thanks to Sarmeesha Reddy and Steve Tine of Motorola for + contributing these changes to ACE. + +Tue Dec 28 15:32:55 1999 David L. Levine + + * tests/Makefile: build libDLL_Test.so before building + any executables, so that it doesn't see the template + instantiations from all of the tests (after a make + realclean, anyways). + +Tue Dec 28 08:55:23 1999 David L. Levine + + * include/makeinclude/platform_linux_cxx.GNU: + added -D__USE_STD_IOSTREAM. + + * ace/config-cxx-common.h,ace/config-linux-common.h: + added support for __USE_STD_IOSTREAM. + +Tue Dec 28 02:03:11 1999 Nanbor Wang + + * ace/Container_T.i (remove): Changed to call the method + using the in ACE_DLList[_Reverse]_Iterator, otherwise, + the in the ACE_Double_Linked_List got called which + incurred memory leaks. Thanks to Lorin Hochstein + for reporting the bug. + +Mon Dec 27 21:29:25 1999 David L. Levine + + * tests/Log_Msg_Test.cpp (test_ostream): removed local + variable flags, because cxx X6.3/Linux doesn't like + it as an int. + +Mon Dec 27 19:17:46 1999 Vishal Kachroo + + * ace/SOCK.cpp: Added #pragma template instantiations for g++. + +Mon Dec 27 16:24:09 1999 David L. Levine + + * ace/IOStream.h (setb): commented out declaration of + unused arg a. + +Mon Dec 27 15:51:39 1999 David L. Levine + + * tests/test_config.h (set_output): with __USE_STD_OSTREAM + (with Compaq cxx X6.3 on Linux), declare variable flags + as std::ios_base::openmode instead of int. Otherwise, + it complained about a type mismatch. Other compilers + may need this eventually, as well. egcs didn't like it, + so let's wait to see how best to generalize it. + +Mon Dec 27 13:03:50 1999 Vishal Kachroo + + * ace/QoS_Session_Impl.cpp: fixed the "pragma once is obsolete" + warning thrown by Sung++. + +Mon Dec 27 12:27:33 1999 Nanbor Wang + + * tests/run_tests.bat: Changed to allow _Borland 4_ users to set + the PATH environment variable to include the path to the + appropriate ACE dll if necessary, and it sets the PATH + environment variable to the correct directory depending on the + "build options". Thanks to Charles Frasch + for contributing this fix. + +Mon Dec 27 11:29:20 1999 David L. Levine + + * include/makeinclude/platform_linux_cxx.GNU: removed + -I/usr/include/g++. (It's not needed with\end{verbatim} + ACE_HAS_CPLUSPLUS_HEADERS.) Thanks to Judy Ward + for pointing out that cxx should + not be using the g++ headers. + + * ace/config-cxx-common.h: on Linux, #define + ACE_HAS_CPLUSPLUS_HEADERS instead of ACE_LACKS_ACE_IOSTREAM. + +Mon Dec 27 09:28:40 1999 Balachandran Natarajan + + * QoS_Session_Impl.h: Fixed a warning in g++. + +Sun Dec 26 23:45:44 1999 Vishal Kachroo + + * QoS_Session.h: Provided a definition for the virtual destructor + of ACE_QoS_Session. + + * QoS_Session_Impl.{cpp,h}: Replaced the + ACE_LACKS_INLINE_FUNCTIONS macro with __ACE_INLINE__. + + * ace/ace_dll.dsp: Added the new QoS files to the NT DLL project. + +Sun Dec 26 21:50:46 1999 Vishal Kachroo + + The following existing files were changed for the ACE QoS API. + + * SOCK.h: + * SOCK.cpp: + Added a QoS session set to the ACE_SOCK. Also methods to join + a new QoS session. + + * SOCK_Dgram_Mcast.h: + * SOCK_Dgram_Mcast.cpp: + The QoS subscribe method was changed to accommodate QoS. + + The following new files were added. + + * QoS_Session.h: Has the abstract base class for concrete QoS + implementations. + + * QoS_Session_Factory.{h,cpp}: Concrete Factory for QoS + implementations. Currently two implementations are + supported, RAPI and GQoS. + + * QoS_Session_Impl.{h,cpp,i}: Has the QoS implementation classes. + RAPI and GQoS are supported. + + * ace/Makefile: Added the new QoS classes. + + * include/makeinclude/wrapper_macros.GNU (): Added the + ACE_HAS_RAPI flag. For ACE to have RAPI support it should be + built with "make rapi=1". The platform_macros.GNU should have + + PLATFORM_RAPI_CPPFLAGS= + PLATFORM_RAPI_LIBS=-lrsvp + PLATFORM_RAPI_LDFLAGS= + +Sun Dec 26 16:43:16 1999 Yamuna Krishnamurthy + + * ace/OS.i: + Replaced malloc with ACE_NEW_RETURN + +Fri Dec 24 16:33:48 1999 Ossama Othman + + * acconfig.h: + + Added ACE_HAS_RECURSIVE_MUTEXES to list of macros. + + * configure.in: + + Fixed ACE_LACKS_SETSCHED test. It previously didn't check that + sched_setscheduler() existed. Both sched_setscheduler() and + either pthread_attr_setschedpolicy() or pthread_attr_setsched() + must be defined. This was an AIX related fix. + + Initialized variables in all compile-time tests. This fixes + compile-time test warnings on AIX. + +Fri Dec 24 13:06:59 1999 Ossama Othman + + The following fixes were motivated by problems discovered in a + configure script log file (config.log) that was generated on AIX, + and sent in by Mike Winter . + + * THANKS: + + Added my Mike Winter to the THANKS list. + + * acconfig.h: + + Removed an extraneous comment. + + * configure.in: + + Added tests for ACE_HAS_BROKEN_XTI_MACROS and + ACE_HAS_BROKEN_T_ERROR. + + Updated TLI/XTI preprocessor directives in TLI/XTI related + tests. + + Fixed pthread_rwlock_t and pthread_rwlockattr_t structure + tests. Previously the tests were missing the header files to + search in. + + AIX defines _THREAD_SAFE in . Check if it is defined + after including . + + * ltcf-cxx.sh: + + Added Digital/Compaq C++ libtool support. + + Minor Sun C++ updates. + + * ace/OS.h: + + AIX defines TCP_NODELAY and TCP_MAXSEG in tiuser.h so undefine + them if ACE_HAS_BROKEN_XTI_MACROS is defined before including + tiuser.h. + + Simplified TLI/XTI related macros. + +Fri Dec 24 08:04:58 1999 Douglas C. Schmidt + + * ace: + tests: Moved ace/Auto_IncDec_T.cpp to + tests/Auto_IncDec_Test.cpp, which is where it belongs. Thanks + to David for reporting this. + +Thu Dec 23 13:57:04 1999 David L. Levine + + * include/makeinclude/rules.local.GNU: uncommented the + rules for building .o files from .C and .cc files. + They've been commented out since this file was put + under CVS control, so it's not obvious why they can't + be used. Thanks to Wei.Chiang@nokia.com for suggesting + this. + +Thu Dec 23 12:16:38 1999 Christopher Kohlhoff + + * ace: Added missing files Capabilities.cpp and Configuration.cpp + to $ACE_ROOT/ace/Makefile.bor. + + * ACE/tests: Added new tests Auto_IncDec_Test and + Capabilities_test to Makefile.bor. + + * ACE/tests: Fixed syntax error in a Borland C++Builder specific + section of Auto_IncDec_Test.cpp. + + * ACE/tests: Fixed Malloc_Test so that it does not fail with + Borland C++Builder. + + * ACE/tests/ Changed run_tests.bat so that it does not invoke + ACE_Init_Test when run with the "bor" command line + argument. This test uses MFC and need not be built or run. + +Thu Dec 23 11:46:38 1999 Douglas C. Schmidt + + * ace/OS.h: Moved + + #if defined (ACE_HAS_SYS_FILIO_H) + # include /**/ + #endif /* ACE_HAS_SYS_FILIO_H */ + + from OS.i to OS.h so that the FIONREAD macro will be defined for + the ACE_SOCK_Dgram::recv() method even if inline = 0. Thanks to + Alain Sauron for reporting this. + +Wed Dec 22 11:29:43 1999 Nanbor Wang + + * bin/auto_compile_win32.pl: Renamed ImplRepo.dsw to + ImplRepo_Service.dsw. Thanks to Derek Dominish + for reporting this. + +Wed Dec 22 08:44:56 1999 Douglas C. Schmidt + + * tests/Log_Msg_Test.cpp: Conditionally compiled the iostream + print statements so that the test builds correctly if + ACE_LACKS_IOSTREAM_TOTALLY is defined. Thanks to David Levine + for reporting this. + +Wed Dec 22 08:22:24 1999 David L. Levine + + * tests/CDR_File_Test.cpp: disabled with + ACE_LACKS_IOSTREAM_TOTALLY. + +Tue Dec 21 21:27:48 1999 David L. Levine + + * ace/config-cxx-common.h: enable ACE_LACKS_ACE_IOSTREAM + on Linux. cxx 6.3 generates unresolved streambuf symbols, + otherwise. + + * include/makeinclude/platform_linux_cxx.GNU: added. + + * include/makeinclude/platform_osf1_4.0.GNU: changed comment + now that cxx code is in ace/config-cxx-common.h. + +Tue Dec 21 08:02:43 1999 Douglas C. Schmidt + + * ace/Log_Msg.h (ACE_Log_Msg): Clarified that the + ACE_Log_Msg_Callbacks are not inherited when a new thread is + spawned. Thanks to Airat A. Sadreev + for reporting this. + +Tue Dec 21 11:31:18 1999 bala + + * ACE version 5.0.10 released. + +Tue Dec 21 01:04:55 1999 Ossama Othman + + * ACE-configuration.txt: + + Updated information about using ACE+autoconf. + + * configure.in: + + Moved AC_{EXE,OBJ}EXT tests before C++ linker flags since these + tests require C linker flags. + + * Makefile (release, releaseall): + + ACE-INSTALL should be a dependency of these targets in order for + it to be generated. This fixes a "no such file or directory" + error that occurs when making an ACE beta/release. Note that + this fix is unrelated to the ACE+autoconf bootstrapping support + that was recently added. + + * bin/bootstrap: + + Output message that lets the user know that bootstrapping is + done. + +Mon Dec 20 23:55:18 1999 Ossama Othman + + * Makefile (release, releaseall): + + Removed ACE+autoconf bootstrapping commands. Bootstrapping must + be done later in the process (i.e. in bin/make_release). + + * bin/make_release: + + Fixed MD5 checksum generation. + + Added temporary hacks to bootstrap ACE+autoconf support into the + release. + +Mon Dec 20 22:15:45 1999 Ossama Othman + + * Makefile: + + Added ACE-configuration.txt, ltcf-c.sh, ltcf-cxx.sh and + Makefile.in to the list of CONTROLLED_FILES. + + Added ACE+autoconf bootstrapping commands the release and + releaseall targets. This allows a bootstrapped ACE+autoconf + setup to be shipped with ACE, thus allowing the configure script + to work "out of the box." + + * bin/bootstrap: + + Added bootstrapping options that enable or disable certain types + of workspaces. By default, automatic dependency tracking is + disabled by default. + + * bin/make_release: + + If path to additional GNU tools is broken, default to existing + PATH and hope for the best. + + Fixed MD5 checksum generation. + +Mon Dec 20 21:14:41 1999 Ossama Othman + + * configure.in: + + Disabled maintainer mode check that prevented users from running + the configure script. + + Added experimental libtool C++ support. + + Replaced CVS directory check with top-level source directory + check to prevent stock ACE makefiles from being overwritten + during configuration. + + * ltcf-c.sh: + * ltcf-cxx.sh: + + Adding these files to the CVS repository. They will soon be + merged into the upstream libtool package. Local copies will no + longer be necessary. + + * m4/acinclude.m4: + + Alot of M4 quoting fixes/improvements. + + Reduced size ACE_CONVERT_WARNINGS_TO_ERRORS Autoconf macro. It + still needs to be refined a bit (e.g. AC_REQUIREing compiler + flag setups). + + (ACE_CHECK_SETRLIMIT_ENUM, ACE_CHECK_GETRUSAGE_ENUM): + + Added regex for one or more spaces before function name to + prevent functions such as "__getrusage" from matching the + regex. This fixes a problem on platforms that have both + "getrusage," and "__getrusage," for example. + + (ACE_CHECK_TOP_SRCDIR): + + Added this autoconf macro. It prevents ACE from being + configured in the top-level source directory. Configuring ACE + in the top-level source directory would cause the stock ACE + makefiles to be overwritten. Since autoconf support in ACE is + still in the testing stages, we need to make sure that users can + fall back on the stock ACE build procedure. This "feature" can + be overridden by using the "--enable-maintainer-mode" configure + script option. + + * m4/compiler.m4: + + Set variable "WERROR" that contains the compiler flags to + convert warnings to errors. Eventually, this support should be + moved to its own macro that is AC_REQUIREd by + ACE_CONVERT_WARNINGS_TO_ERRORS. + + * m4/features.m4 (ACE_CHECK_ASYNCH_IO): + + Minor M4 quoting fixes/improvements. + +Sun Dec 19 09:34:49 1999 David L. Levine + + * bin/g++dep: set TAO_ROOT to $ACE_ROOT/TAO if it was + unset. Thanks to Darrell for reporting that TAO_ROOT + wasn't being substituted if it wasn't set. + +Sat Dec 18 01:16:20 1999 Irfan Pyarali + + * ace/ACE.cpp (recv_i and send_i): The selection of the next + message block to send/recv was incorrect. The correct way is to + chase the continuation chain and then go to the next + continuation chain. + +Fri Dec 17 22:25:56 1999 David L. Levine + + * ace/config-cxx-common.h: added, to factor out common + configuration for Compaq cxx. + + * ace/config-osf1-4.0.h,config-linux-common.h: updated to + use config-cxx-common.h. + +Fri Dec 17 21:32:48 1999 David L. Levine + + * ace/config-linux-common.h: added support for Compaq + (Digital) cxx. Currently, that just means allowing + compilation to succeed. + +Fri Dec 17 21:29:19 1999 David L. Levine + + * ace/OS.h: use __DECCXX instead of DEC_CXX to detect that + the compiler is Compaq (Digital) cxx. DEC_CXX is + #defined in ACE config files for cxx, but __DECCXX is + #defined by the compiler. Only the latter should be used. + +Fri Dec 17 21:20:48 1999 David L. Levine + + * ace/TTY_IO.cpp (control): added static cast of TCSETS to + int to avoid cxx 6.3 warning about conversion of unsigned + int to int. Also added the cast to TCGETS. + +Fri Dec 17 14:40:02 1999 Nanbor Wang + + * ace/Local_Tokens.h (ACE_TSS_TPQ_Entry): Made the destructor + virtual to avoid warnings from egcs. + +Fri Dec 17 13:27:24 1999 Steve Huston + + * ace/config-pharlap.h: Added ACE_LACKS_TCP_NODELAY. Thanks to David + Hauck for this. Fixes bugzilla #270. + +Fri Dec 17 11:38:09 1999 Douglas C. Schmidt + + * We just reached our 800th external contributor: Andrey + Nechypurenko . Andrey gets a free copy of + ACE+TAO as a prize! + + * ace/config-linux-common.h: Wrapped the #define + ACE_DEFAULT_SELECT_REACTOR_SIZE with a #if !defined() so that + users can override this. Thanks to Charlie Duke + for suggesting this. + +Thu Dec 16 12:26:36 1999 Nanbor Wang + + * bin/auto_compile_win32.pl: Took out Concurrency Service from the + build list. + +Wed Dec 15 21:24:05 1999 Irfan Pyarali + + * ace/config-win32-common.h (ACE_DEFAULT_MAX_SOCKET_BUFSIZ): + Windows doesn't like 65536 ;-) If 65536 is specified, it is + listenly ignored by the OS, i.e., setsockopt does not fail, and + you get stuck with the default size of 8k. + +Tue Dec 14 08:57:03 1999 Vishal Kachroo + + * ace/OS.h: Added a #ifdef for WINSOCK2_GQOS for removing the + errors on NT due to the previous change in ACE_Flow_Spec class. + +Tue Dec 14 07:49:58 1999 Vishal Kachroo + + * ace/OS.i: + * ace/OS.h: Extended the ACE_Flow_Spec and ACE_QoS classes to + accommodate the use of such classes for non-Win32 + platforms. These changes are motivated by the new ACE QoS + classes that will soon be included with ACE. + +Mon Dec 13 16:23:22 1999 Nanbor Wang + + * ace/Malloc.{h,cpp}: Made print_alignment_info available for all + configuration. + +Mon Dec 13 02:49:04 1999 Nanbor Wang + + * ace/Memory_Pool.cpp (remap): Commented out the printout of remap + message in MMAP_Memory_Pool as this function is called from the + signal handler. (It didn't really cause any problem but we + shouldn't use ACE_DEBUG from signal handlers anyway.) + +Mon Dec 13 01:12:00 1999 Irfan Pyarali + + * ace/WFMO_Reactor.cpp (update_state): make_changes() calls into + user code which can request other changes. So keep looping + until all requested changes are completed. Thanks to Edan Ayal + for reporting this problem! + +Sun Dec 12 20:10:23 1999 Nanbor Wang + + * ace/config-hpux-10.x.h: Tweaked ACE_MALLOC_PADDING, + ACE_MALLOC_ALIGN, and ACE_CONTROL_BLOCK_ALIGN_LONGS manually for + HPUX. + + * tests/Malloc_Test.cpp: Added an ACE_TEST_REMAP_ON_FAULT macro + which is not defined on linux only. Linux seems to have problem + calling mmap from within the signal handler. + +Sat Dec 11 15:00:43 1999 Nanbor Wang + + * tests/Malloc_Test.cpp (main): Alignment information should only + be printed when ACE_NDEBUG is not defined. + +Sat Dec 11 14:27:27 1999 Ossama Othman + + * ace/Makefile.am (pkginclude_HEADERS): + + Split header file list into `.h' files (HEADER_FILES) and `.i' + (INLINE_FILES). This gets around a limitation on Solaris. + +Sat Dec 11 10:40:38 1999 Nanbor Wang + + * ace/config-lynxos.h: Added ACE_HAS_TYPENAME_KEYWORD. + +Fri Dec 11 11:13:54 1999 James Hu + + * ace/Dirent.i: + Constructor with a path passed in was not initializing dirp_. + +Fri Dec 10 17:29:54 1999 Nanbor Wang + + * ace/Malloc.h: + * ace/Malloc.cpp: Added methods for both + control block. They are only available for debug version. + + * tests/Malloc_Test.cpp: Removed temporary debug print out and + changed to use . + + This test no longer forces the mmap to remap. Linux doesn't + handle the case correctly. + +Fri Dec 10 15:37:09 1999 Douglas C. Schmidt + + * ACE-INSTALL.html: Clarified how the clone procedure should + work. Thank to Jerry D. De Master + for suggesting this. + + * ace/OS.h: Changed the value of O_NDELAY from 0 to 1 on + Windows NT. Thanks to Craig Perras for + reporting this. + +Fri Dec 10 15:55:53 1999 Ossama Othman + + * ace/Configuration.cpp: + + Added a comment stating that ACE_SYNCH_MUTEX should not be used + in the template instantiations because the resulting template + instantiation for the single-threaded case already exists in + ACE. Thanks to Doug for letting me know about this. + + * m4/compiler.m4 (CXXFLAGS): + + Added missing flags that fix Sun C++ 5.0 weirdness on Solaris. + +Fri Dec 10 14:35:26 1999 Ossama Othman + + * acconfig.h (_RWSTD_NO_EXCEPTIONS): + + Sun CC 5.0 without exception support needs this macro to be + defined to prevent warnings from occurring due to its broken + header. + + * configure.in: + + Added a few "checkpoints" where the cache is saved to aid in + debugging. + + (ACE_HAS_THREAD_SPECIFIC_STORAGE): + + Added check for pthread_keycreate(). Old POSIX threads + implementations used pthread_keycreate() instead of + pthread_key_create(). + + (ACE_HAS_SIG_C_FUNC): + (ACE_HAS_THR_C_FUNC): + (ACE_HAS_THR_C_DEST): + + Added tests that check if signal handlers, thread start + routines, and thread destructors should be declared `extern + "C"'. These changes allow clean builds on Solaris 7 with Sun CC + 5.0. + + (ACE_HAS_STDARG_THR_DEST): + + Check if thread destructor argument to pthread_key_create (or + pthread_keycreate) should be of type `void(*)(...)'. + + * m4/compiler.m4 (_RWSTD_NO_EXCEPTIONS): + + Define _RWSTD_NO_EXCEPTIONS when compiling on Solaris with Sun + CC 5.0 without exceptions. + +Fri Dec 10 11:43:50 1999 Douglas C. Schmidt + + * tests/run_tests.lst: Disabled the MT_Reactor_Timer_Test + until Darrell can fix the timer queue. + +Fri Dec 10 07:24:12 1999 David L. Levine + + * ACE-INSTALL.html: on VxWorks, automatic + construction/destruction of static objects should be enabled. + Thanks to Erik Johannes for reminding + me of this. + +Thu Dec 9 17:18:57 1999 Douglas C. Schmidt + + * ace/Acceptor.cpp (handle_input): Only printout a diagnostic + message if ACE::debug () > 0. Thanks to Chris Uzdavinis + for reporting this. + +Thu Dec 9 19:55:58 1999 Ossama Othman + + * acconfig.h: + * configure.in: + + Added checks/support for the ACE_HAS_PTHREADS_UNIX98_EXT macro. + + * ace/OS.h (ACE_rwlock_t): + * ace/OS.i (rw_tryrdlock, rw_trywrlock, rw_rdlock, rw_wrlock, + rw_unlock): + + ACE_LACKS_RWLOCK_T should not imply !ACE_HAS_PTHREADS_UNIX98_EXT + because the pthread_rwlock_t type exist despite the fact that + rwlock_t doesn't. + +Thu Dec 09 15:53:20 1999 Nanbor Wang + + * ace/Malloc.cpp: + * ace/Malloc.h: + * ace/Malloc.i: Separated the control block implementation into + "position independent control block" and "lean and mean control + block." Each control block implementation has its own + definitions of Malloc_Header and Name_Node as inner classes. + ACE_Control_Block implements the "old, lean and mean" control + structure for ACE_Malloc_T and ACE_PI_Control_Block implements + the "new, position independent" control structure for + ACE_Malloc_T. + + Added several macros to finer control the padding and alignment + because calculating the padding requires using some operations + that can not be evaluated during the compile time and the + original padding length calculation don't always work. Usually, + you don't have to worry about the padding. But if you are + interested in tweaking these parameters, here are some hints. + + - (ACE_MALLOC_PADDING): defines the minimum size of a Malloc_Header. + The actual size of Malloc_Header should always be the a multiple + of ACE_MALLOC_ALIGN and may be larger then ACE_MALLOC_PADDING. + + - (ACE_MALLOC_PADDING_SIZE): define the actual size of the array + of long used to pad the ACE_Control_Block::ACE_Malloc_Header. + If it is not defined by the user, ACE will try to calculate it + for you. If it is defined as 0, there'll be no padding at all. + This macro is compiler/platform dependent. + + - (ACE_CONTROL_BLOCK_ALIGN_LONGS): define the actual size of the + array of long used to pad the ACE_Control_Block so that the + first Malloc_Header always starts from the alignment boundary. + If it is not defined by the user, ACE will try to calculate it + for you. If it is defined as 0, there'll be no padding at all. + This macro is compiler/platform dependent. + + - (ACE_PI_MALLOC_PADDING_SIZE): similar to ACE_MALLOC_PADDING_SIZE + but applied to ACE_PI_Control_Block::ACE_Malloc_Header. + + - (ACE_PI_CONTROL_BLOCK_ALIGN_LONGS): similar to + ACE_CONTROL_BLOCK_ALIGN_LONGS but applied to + ACE_PI_Control_Block. + + * ace/Malloc_T.cpp: + * ace/Malloc_T.h: + * ace/Malloc_T.i: Parameterized the type of control block used in + ACE_Malloc, which is now renamed to ACE_Malloc_T, as a template + parameter so that we can control tradeoff between efficiency and + flexibility. + + Another ACE_Malloc template class was added which simply use + ACE_Malloc_T with ACE_Control_Block as its internal control + structure so that we don't have to change the existing programs + using ACE_Malloc. However, for platforms/compilers using + explicit template instantiation, you still need to add the + instantiations for the based template class. For example, if + you instantiated "ACE_Malloc", you'll need to add + "ACE_Malloc_T". Likewise for + ACE_Malloc_LIFO_Iterator and ACE_Malloc_FIFO_Iterator. + + * ace/Based_Pointer_T.h: Renamed arguments "overload" to "o". KCC + complained about using "overload" as variable names + + * ace/Configuration.cpp: + * ace/Naming_Context.cpp: + * ace/Service_Config.cpp: + * ace/System_Time.cpp: + * ace/Template_Instantiations.cpp: + * docs/tutorials/021/client.cpp: + * docs/tutorials/021/server.cpp: + * examples/Reactor/Misc/demuxing.dsp: + * examples/Shared_Malloc/Malloc.cpp: + * examples/Shared_Malloc/test_persistence.cpp: + * examples/System_V_IPC/SV_Semaphores/Semaphores.cpp: + * examples/System_V_IPC/SV_Semaphores/Semaphores_1.cpp: + * examples/System_V_IPC/SV_Semaphores/Semaphores_2.cpp: + * performance-tests/TCP/TCP.dsp: + * tests/Malloc_Test.cpp: + * tests/SV_Shared_Memory_Test.cpp: Added explicit template + instantiations for base malloc class in corresponding with the + above change. + +Thu Dec 09 15:40:03 1999 David L. Levine + + * ace/OS.i (mmap): on LynxOS, fixed use of file_mapping + argument. It it was 0, set it equal to the address of + an int on the stack. Thanks to Chad Elliott + for reporting a problem with + ACE_OS::mmap on LynxOS. And thanks to Chad for an + explanation of why Malloc_Test and TAO's Naming_Service -f + don't work: it's because they require that the mapped + object be changed. LynxOS 3.0.x and earlier don't support + that. + +Thu Dec 09 07:30:12 1999 David L. Levine + + * Makefile (CONTROLLED_FILES): added ChangeLog-99a. Thanks + to Pierre Oberson for reporting + that it was missing. + +Wed Dec 8 13:36:59 1999 Ossama Othman + + * configure.in (ACE_SYS_RESTARTABLE_SYSCALLS): + + Disabled ACE_SYS_RESTARTABLE_SYSCALLS test. On platforms where + it detects restartable system calls, it defines + ACE_HAS_SIGNAL_SAFE_OS_CALLS. This causes the ACE_OSCALL* + macros in OS.h to use "ACE_LOG_MSG->restart()" before + ace/Log_Msg.h is included, ending up in ACE_LOG_MSG being an + unknown macro. Currently, none of ACE's supported platforms + actually define ACE_HAS_SIGNAL_SAFE_OS_CALLS so disabling this + test okay for now. + + * ace/OS.i (ioctl): + + Commented out ACE_DEBUG call. ACE_OS should not depend on + ACE_Log_Msg in any way. + +Wed Dec 8 10:15:20 1999 Douglas C. Schmidt + + * bin/clone.cpp: The definition of mk_symbolic_link() was + missing the third argument 'int level'. Thanks to Jerry De + Master for reporting this. + + * ace/Synch.h: Added comments to ACE_Thread_Mutex_Guard and + ACE_Null_Mutex_Guard explaining that they were obsolete and + should be replaced by ACE_Guard and + ACE_Guard, respectively. Thanks to Pierre + Oberson for reporting this. + +Tue Dec 7 22:53:01 1999 Douglas C. Schmidt + + * netsvcs/lib/Client_Logging_Handler.cpp (send): Clarified that + *someday* we'll improve the implementation to queue data when a + connection is lost and automagically reinitiate the connection. + Thanks to David X Callaway for + motivating this. + +Tue Dec 07 22:14:15 1999 David L. Levine + + * docs/ACE-guidelines.html: added a guideline about signal + handlers. + +Tue Dec 7 21:39:42 1999 Douglas C. Schmidt + + * ace/OS.i: Fixed the definition of ACE_NETDBCALL_RETURN so that + + memcpy (TARGET,ace_result_,SIZE); + + is changed to + + memcpy (TARGET,ace_result_, + SIZE < sizeof(TYPE) ? SIZE : sizeof(TYPE)); + + This fixes a bug with UnixWare. Thanks to Phil Mesnier + for reporting this. + +Tue Dec 07 21:20:37 1999 Nanbor Wang + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Added ace.rc to project files. One can use + GetFileVersionInfo on Win32 to get the ACE library version info + now. Thanks to David Hauck for + suggesting this. + +Tue Dec 07 15:27:24 1999 David L. Levine + + * docs/ACE-guidelines.html: added guideline to use THR_BOUND + for time-critical threads. Thanks to Marina for reminding + me about this, and for running some experiments on Solaris + that demonstrate that it's necessary (and really works :-). + +Tue Dec 07 13:25:53 1999 Nanbor Wang + + * ace/Based_Pointer_T.{h,cpp}: Added two constructors that take a + base pointer for base_offset_ calculation. They can be used + when we already know the base address of the pointer to avoid an + extra lookup from the Based_Pointer_Repository. + + * ace/Malloc_T.i (init_malloc_header_ptr): Changed to initialize + the pointer using the address of control block. Notice that + the address of the control block should never change during the + lifetime of ACE_Malloc. + + Thanks to Irfan for noticing the performance issue. + +Mon Dec 06 21:16:53 1999 Irfan Pyarali + + * ace/SOCK_Dgram.cpp (send): Added missing timed send. + Thanks to Yuval Yosef for motivating this. + + * ace/SOCK_IO.h (ACE_SOCK_IO): Most methods now support an + optional timeout parameter. + + * ace/SOCK_Stream.h (ACE_SOCK_Stream): All methods now support an + optional timeout parameter. Also fixed the parameter type + in recv_urg and send_urg to be size_t instead of int. + + * ace/ACE: + + - All the I/O function were made consistent in ACE. This + included matching send and recv functions, all of which now + support timeouts. + + - Many of the timed functions, e.g., ACE::readv() and + ACE::sendto(), were changed such that the case + was made common between the code that expected OS provided timed + functions and the other where the timed function was simulated + by ACE. + + - Certain file I/O operation were made simple by removing the + extra parameter. Timeouts are not supported in file + I/O. In some cases, e.g., the timed writev and readv functions, + the function was removed since it was not necessary as taking + the parameter made it redundant with the function in + ACE_OS. + + - The "_n" methods were given a performance boost when they are + used with timeouts. We only set the handle into non-blocking + mode only once rather than for every iteration in the loop. + + - Added send/recv/send_n/recv/recv_n methods that take a message + block as the data container. + + - Here is the description of the updated functions from the + documentation: + ________________________________________ + + The parameter in the following methods indicates how + long to blocking trying to transfer data. If == 0, + then the call behaves as a normal send/recv call, i.e., for + blocking sockets, the call will block until action is possible; + for non-blocking sockets, EWOULDBLOCK will be returned if no + action is immediately possible. + + If != 0, the call will wait until the relative time + specified in * elapses. + + Errors are reported by -1 and 0 return values. If the operation + times out, -1 is returned with . If it succeeds + the number of bytes transferred is returned. + + The "_n" I/O methods keep looping until all the data has been + transferred. These methods also work for sockets in + non-blocking mode i.e., they keep looping on EWOULDBLOCK. + is used to make sure we keep making progress, i.e., + the same timeout value is used for every I/O operation in the + loop and the timeout is not counted down. If the transfer times + out, the number of bytes transferred so far are returned. + + Methods with parameter are I/O vector variants of the + I/O operations. + ________________________________________ + + * ace/config-win32-common.h: Set IOV_MAX on Win32 to be 1024. It + seems like Win32 does not have a limit on the number of buffers + that can be transferred by the scatter/gather type of I/O + functions, e.g., WSASend and WSARecv. We are arbitrarily + setting this to be 1k for now. The typically use case is to + create an I/O vector array of size IOV_MAX on the stack and then + filled in. Note that we probably don't want too big a value for + IOV_MAX since it may mostly go to waste or the size of the + activation record may become excessively large. + + * ace/OS: + + The "faked" readv() in ACE for operating systems without it was + calling read_n(). This was changed to call read() since readv() + makes no guarantee that everything requested will be read. Same + changes applied for writev(). + + send_n() does not belong in the OS class. It belongs in the ACE + class. Therefore, it was moved. + + read_n() is only called for file handles (and not for socket + handles). Therefore, there is no point in checking for + EWOULDBLOCK. Same change was made to write_n(). + + * ace/Handle_Set.h (ACE_Handle_Set): Added an explicit fdset() + function to get to the fd_set *. This eliminates the need for + the stupid cast operator. + +Mon Dec 6 21:13:08 1999 Douglas C. Schmidt + + * ace/Configuration.cpp (set_string_value): When setting a value + in the registry, the specified length must include the NUL + terminating character. Thanks to Chris Hafey + for reporting this. + +Mon Dec 6 11:06:43 1999 Ossama Othman + + * m4/acinclude.m4 (ACE_TRY_COMPILE): + + Make choice of compiler flags to use dependent on the current + autoconf test language. This fixes a problem with C++ compiler + flags potentially passed as C flags to libtool. + + (ACE_USE_TEMP_FILE): + + Added checks for existing files that should be directories and + vice versa. + + If the file passed as argument is in a directory and the + directory doesn't exist then create the directory. In order to + be as general as possible a script fragment was implemented with + the same functionality as "mkdir -p" because "mkdir -p" may not + be portable. + + * m4/threads.m4 (ACE_SEARCH_THREAD_FLAGS): + + Make choice of compiler flags to use dependent on the current + autoconf test language. This fixes a problem with C++ compiler + flags potentially passed as C flags to libtool. + +Mon Dec 06 08:25:22 1999 David L. Levine + + * include/makeinclude/platform_sunos5_sunc++.GNU: added more + comments about support of 64-bit binaries with Sun CC 5.0. + Thanks to Dani Flexer for + providing them. + +Mon Dec 6 07:55:05 1999 Douglas C. Schmidt + + * ace/config-sunos5.7.h: Added several new #defines needed to + port ACE to 64 bit Solaris. Thanks to Dani Flexer + for these. + + * ace/ACE.cpp: Changed the implementation of count_interfaces() + to handle the fact that size_t is a 64 bit type but the + parameter to ioctl needs to be an int, which according to LP64 + is 32 bits. Thanks to Dani Flexer + for reporting this. + + * netsvcs/lib/Client_Logging_Handler.cpp (handle_signal): + If SIGPIPE occurs, ACE_Client_Logging_Handler::handle_signal() + returns -1, thus removing svc handler from reactor. Since svc + handler is implemented as a singleton here, all next incoming + SPIPE connections operate on object that is already destroyed -> + SIGSEGV/SIGBUS. Therefore, we now return 0 in handle_signal(). + Thanks to Alexander Dergatch for reporting + this. + + * netsvcs/lib/Server_Logging_Handler_T.cpp (svc): The following + loop + + while ((result = this->handle_input ()) > 0) + continue; + + causes server thread to leave its execution loop, because + handle_input() always returns 0 or -1. This should be replaced + with + + while ((result = this->handle_input ()) == 0) + + Thanks to Alexander Dergatch for reporting + this. + +Sun Dec 05 21:54:47 1999 David L. Levine + + * ace/Dump.cpp (ACE_ODB ctor): initialize current_size_ + data member, so that examples/misc/test_dump will pass + on MSVC 6.0/NT 4.0, at least. Thanks to Soren Ilsoe + for reporting this. + +Sun Dec 5 16:50:37 1999 Ossama Othman + + * ace/OS.h: + + Some compilers were picky about the circular dependency fix. + Moved inclusion of ace/Log_Msg.h after ace/OS.i yet again. + +Sat Dec 04 21:14:37 1999 Nanbor Wang + + * tests/Malloc_Test.cpp (init_test): Need to call init_acquire to + make sure the old mapfile does get removed. + + Added more printout items in the normally disabled debug + section. + +Sat Dec 04 19:45:49 1999 Nanbor Wang + + * ace/Memory_Pool.cpp: Conditionally bind/unbind the + Pagefile_Memory_Pool with the Based_Pointer_Repository depends + on whether position independent pointers are used or not. + +Sat Dec 4 16:59:08 1999 Ossama Othman + + Circular dependency fixes/updates: + + * ace/OS.h: + + Include "ace/Log_Msg.h" before "ace/OS.i" because the methods in + ACE_OS depend on ACE_Log_Msg for output and error reporting. + + * ace/Log_Record.h: + + Include "ace/OS.h" instead of "ace/ACE.h." OS.h is needed to + pull in the definition of ACE_Export. ACE.h was overkill. This + change is at the core of the circular dependency fix. + + * ace/Log_Record.cpp: + + Include "ace/ACE.cpp" to pull in definition of ACE::log2(). + + The above changes made the following changes necessary. They also + corrected an annoying circular dependency problem that was + occurring when using an automatically generated ace/config.h. The + below changes are actually legitimate fixes since the source files + in question unnecessarily relied on other headers to pull in ACE + class definitions. + + * ace/DLL.cpp: + + Include "ace/ACE.h" because ACE_DLL::open() uses ACE::ldfind(). + + * ace/Functor.h: + + Include "ace/ACE.h" instead of "ace/OS.h" because + "ace/Functor.i" needs the hash functions in the ACE class. + + All of the above changes nicely reduced the number of source files + that depend on ace/ACE.{h,i}! + + * ace/Makefile: + * apps/gperf/src/Makefile: + + Updated dependencies. + +Fri Dec 3 21:51:38 1999 Nanbor Wang + + * ace/Malloc_T.cpp (shared_malloc): Changed the for loop to + while(1) so the compilers can identify the control will never + fall off the end of the loop and apply ACE_NOTREACHED to the + final return statement. + +Fri Dec 03 12:14:31 1999 Nanbor Wang + + * ace/Malloc_T.i (init_malloc_header_ptr): Applied ACE_UNUSED_ARG + when we are not using position independent pointers. + + * ace/Malloc_T.cpp (shared_malloc): Split the structural exception + try block into two to avoid warnings from the OSF compiler. + Thanks to David for reporting this. + +Thu Dec 2 22:42:53 1999 James Hu + + * ace/TP_Reactor.cpp: + Instead of setting suspend_set_ and wait_set_ both all the time, + try to determine whether or not the handler is suspended and + choose one of the sets to do the bit_ops on. + +Thu Dec 2 22:41:53 1999 Yamuna Krishnamurthy + + * ace/OS.i: + Added the bug fix to the SIO_GET_QOS call in ACE::ioctl () for + RC2 release. This involved removing explicit buffer allocation + for the provider specific buffer and just allocating one + contiguos buffer for the QOS structure. + +Thu Dec 02 18:16:27 1999 James Hu + + * ace/Filecache.cpp: Make it possible to remove something from + the Filecache. + +Thu Dec 02 18:03:27 1999 Nanbor Wang + + * tests/Malloc_Test.cpp (parent): Before binding the name "bar", + do a series of small malloc and a huge malloc to make sure the + child process will segfault and the remapping is tested on the + child process. + + * ace/Memory_Pool.h: + * ace/Memory_Pool.cpp: Added a no-op method to + Local_Memory_Pool because we might call remap from ACE_Malloc on + Win32. + + (Win32 only) Added a new function that takes a + pointer to an EXCEPTION_POINTERS and is responsible to determine + if remapping of the memory map file is required or not. + + * ace/Malloc_T.h: + * ace/Malloc_T.i (init_malloc_header_ptr): Added a new inline + function which simply initializes a (position independent) + pointer pointing to a Malloc_Header. This is required because + the placement new in this function makes MSVC think we are + creating a new object and disallow the use of ACE_SEH_TRY in + functions that use placement new. + + * ace/Malloc_T.cpp: Added the use of ACE_SEH_TRY in several + ACE_Malloc::shared_* methods so we can catch the potential + access violations and force remapping of memory maps. On UNIX, + this is done thru in Memory_Pool. + +Thu Dec 2 09:17:02 1999 Douglas C. Schmidt + + * ace/config-win32-borland.h: Apparently, the Borland BC4 compiler + lacks operator placement delete, so I added #define + ACE_LACKS_PLACEMENT_OPERATOR_DELETE to handle this case. Thanks + to Mike Gingell . + +Wed Dec 1 22:26:06 1999 Douglas C. Schmidt + + * tests/MM_Shared_Memory_Test.cpp: Make sure to force the test + to use System V Semaphores if the OS platform supports POSIX + semaphores natively (since these don't have the right semantics + for this test). Thanks to Steve Huston for reporting this bug. + This fix should clear BUG ID 382. + +Wed Dec 01 06:16:34 1999 Nanbor Wang + + * ace/Malloc.h (ACE_MALLOC_PADDING): Restored default value to 1. + Added a new macro ACE_MALLOC_HEADER_SIZE which serves the same + function as ACE_MALLOC_PADDING (both specify the minimum malloc + header size) but ACE_MALLOC_HEADER_SIZE is normalized to be + multiple of ACE_MALLOC_ALIGN. + + (ACE_CONTROL_BLOCK_ALIGN_LONGS): Changed back to use + ACE_MALLOC_ALIGN to calculate the starting malloc header + alignment. + + * tests/Malloc_Test.cpp: Expanded the memory offset between parent + and child mmap base address so there'll be no overlap even when + we use a larger ACE_MALLOC_PADDING. + +Wed Dec 1 02:10:51 1999 Douglas C. Schmidt + + * tests/Auto_IncDec_Test.cpp: The main() function was missing + a return type. Also, don't run the test with output logged to + stderr. Thanks to David Levine for reporting this. + +Tue Nov 30 16:11:52 1999 Steve Huston + + * tests/run_tests.sh: Made the check for libDLL_Test use a + configurable suffix rather than hardcoded .so so it works on + platforms like HP-UX (which uses .sl). + +Tue Nov 30 14:24:31 1999 Ossama Othman + + * acconfig.h: + + Minor cosmetic updates. + + * configure.in: + + Only enable POSIX semaphore support if process shared semaphores + are supported. Presumably process shared semaphores are only + available if the _POSIX_THREAD_PROCESS_SHARED macro is defined + by the platform. [Bug 304] + +Tue Nov 30 00:22:48 1999 Nanbor Wang + + * tests/Malloc_Test.cpp: Changed to store the mmap allocator in an + auto_ptr instead of as a static object so we can be absolutely + sure about the creation order. + + Added an init_test method which creates a mmap memory pool and + releases it immediately to make sure the test won't + crash/deadlock due to previous crashes. + +Mon Nov 29 16:36:06 1999 Nanbor Wang + + * ace/Malloc.h (ACE_MALLOC_PADDING): Changed the default value of + ACE_MALLOC_PADDING to 16 to avoid some some alignment problem. + + Fixed the padding size calculation in ACE_Malloc_Header. + + * tests/Malloc_Test.cpp (main): Added some debug printout which is + commented out for now (they are not used for regular test.) + +Mon Nov 29 14:34:16 1999 Ossama Othman + + * ace/config-win32-borland.h: + * ace/config-win32-common.h: + + The ACE_HAS_BROKEN_IMPLICIT_CONST_CAST macro I previously + removed is used in TAO's IDL_Test. Thanks to Jeff for pointing + this out. + + * ace/OS.i (sema_init): + + The call to sem_init() for the process shared case incorrectly + used USYNC_THREAD for the second argument. For the + USYNC_PROCESS case, the second argument to ::sem_init() should + be "type == USYNC_PROCESS" since it will evaluate to "1" in this + case. A conditional is used since some platforms may not define + USYNC_PROCESS to be a non-zero value. + +Mon Nov 29 12:15:56 1999 Douglas C. Schmidt + + * tests/Auto_IncDec_Test.cpp: Updated this test to use multiple + threads, if available. Thanks to Edan Ayal for + this. + +Mon Nov 29 11:47:55 1999 Ossama Othman + + * ace/OS.h: + + Backed out the inline related changes I made. Some compilers + have a problem with them. + +Sun Nov 28 20:03:03 1999 Ossama Othman + + * ace/OS.i (sema_init): + + According UNIX Network Programming V2 by Stevens, sem_init() is + currently not required to return zero on success, but it *does* + return -1 upon failure. For this reason, check for failure by + comparing to -1, instead of checking for success by comparing to + zero. + +Sun Nov 28 19:05:31 1999 Nanbor Wang + + * ace/Process_Manager.cpp (open): Fixed an ASYS_TEXT usage. + ASYS_TEXT can not enclose several string literals. + +Sun Nov 28 18:09:49 1999 Ossama Othman + + * m4/acinclude.m4 (ACE_USE_TEMP_FILE): + + Check that the source directory is not the current directory + before moving a file in the current directory out of the way. + Previously an attempt to move the same file out of the way was + performed to twice. + +Sun Nov 28 17:06:00 1999 Ossama Othman + + * acconfig.h: + + Added ACE_HAS_POSITION_INDEPENDENT_MALLOC macro. + + * configure.in: + + Dropped AC_ISC_POSIX macro in favor of an AC_CHECK_LIB strerror + test. + + Disabled exception handling support by default. + + Added "--enable-pi-malloc" configure script option to + enable/disable ACE's position independent malloc feature. By + default, this feature will be enabled. + + Added a run-time test for sem_open(). glibc() apparently + defines a stub for this function in the pthread library but + there is no entry in for it. As such, the + configure script assumed that it is a working function. It + turns out it is not (on Linux with glibc <= 2.1.2). + + Generalized/improved setrlimit and getrusage tests that check if + the first argument is an enum. The tests now determine exactly + what the enum type is. Previously, the test was specific to + Linux/glibc platforms. + + Fixed some tests that didn't initialize a const variable before + it was used. + + Added a test that checks the integrity of the generated + configuration. The test attempts to compile ace/OS.cpp. If it + fails then the rest of ACE won't compile, indicating that the + automatic configuration wasn't successful. Upon failure, some + diagnostic information is output, and a request to submit a bug + report is made. + + Flush the cached configuration test results to the cache file. + This is mainly useful for configure script debugging purposes. + + * ace/Log_Msg.h (ACE_Log_Msg): + + Added additional spaces before comments describing each format + specifier since the single quote "'" at the beginning of each + description was interpreted as a troff comment. Thanks to Kevin + Dalley for pointing this out and suggesting a fix. + + * ace/OS.h: + + Consolidated some ACE_INLINE macro preprocessor conditionals. + + Moved inclusion of Log_Msg.h and OS.i to the end of the file in + case some declarations or definitions found earlier in OS.h are + ever needed in the future by these two files. + + * ace/Trace.h: + * ace/Trace.cpp: + + Removed inclusion of Log_Msg.h from Trace.cpp and included OS.h + in Trace.h. OS.h is needed for the definition of ACE_Export. + + * ace/config-win32-borland.h: + * ace/config-win32-common.h: + + Removed ACE_HAS_BROKEN_IMPLICIT_CONST_CAST macro. This macro + isn't used anywhere in ACE or TAO. + + * ace/Makefile: + + Updated dependencies. + + * bin/am_edit: + + This script is generates IDL source file targets and + dependencies in Makefile.in files. It is essentially the same + script that the KDE developers use for their IDL sources except + that it is has been customised for TAO_IDL generated sources. + Thanks to Stephan Kulow for pointing out the + availability of this script. + + * bin/make_release: + + Archive list should be concatenated instead replaced. This list + is currently only used by the MD5 checksum generation support. + + * bin/generate_html_windex: + + Created this script to generate the acewindex.html file. It + generates the acewindex.html directly from the man pages instead + of an intermediate windex file. Some platforms don't have a + "catman -w" equivalent command since the man database is + generated automatically by the OS (e.g. Debian GNU/Linux). This + script allows the acewindex.html file to be generated on such + platforms. The windex file (not acewindex.html) isn't generated + but this typically isn't a problem since it is not the ACE + install system's responsibility to (re)generate a windex file at + install time. It is up to the sysadmin to do so. Thanks to + Kevin Dalley for motivating the creation of + this script. + + * bin/bootstrap: + + The list of ROFF and HTML man pages is now automatically + generated and inserted into the appropriate Makefile.am file in + this script. This allows the removal of the non-portable + "$(shell ...)" expression from the Makefile.am files. It also + improves build performance in the man directories since the list + is only evaluate at bootstrap time instead of each time the + directory is built. + + * man/Makefile.am (acewindex.html): + + Use the newly created `generate_html_windex' script to create + the acewindex.html file since not all platforms support "catman + -w" windex file generation. + + * man/html/Makefile.am (html_DATA): + * man/man3/Makefile.am (man_MANS): + + Removed the commands that generate the man pages lists. The + `bootstrap' script now takes care of substituting what each of + the Makefile.am variables should contain. + + * m4/acinclude.m4: + + Improved ACE_USE_TEMP_FILE macro. It now checks for the + existence of a file with the same name as the temporary file in + the current directory, in addition to the top-level source + directory. + + Moved the setrlimit and getrusage enum tests into Autoconf + macros in this file. The macros are ACE_CHECK_SETRLIMIT_ENUM + and ACE_CHECK_GETRUSAGE_ENUM. + + Fixed AC_SYS_RESTARTABLE_SYSCALLS and added it to this file. + The patched version compiles and runs, whereas the existing/old + version doesn't even compile on some platforms. The + AC_SYS_RESTARTABLE_SYSCALLS test is broken in GNU Autoconf + 2.13. I use this test to determine if the + ACE_HAS_SIGNAL_SAFE_OS_CALLS macro should be defined for ACE. I + patched it so that it works, at least platforms that expect a + signal handler that expects an int argument. + + * m4/subsets.m4: + + Disable building of all subset libraries by default. + +Sun Nov 28 09:45:36 1999 Darrell Brunsch + + * netsvcs/lib/Logging_Strategy.cpp: ACE_Logging_Strategy::fini () + now returns a value. + +Sun Nov 28 02:41:02 1999 Nanbor Wang + + * tests/Reactor_Notify_Test.cpp (run_test): Only print out the + error message when the notification pipe is not disable. + Otherwise, when the notification pipe gets disabled, the event + loop depends purely on the OS scheduling policy to determine how + many times to gets to run. Since the Supplier_Task removes + itself from the reactor, there could be no active event handler + available in the reactor when the gets called if + the task finishes before the event loop + has a chance to finish its iterations. Another way to solve + this is to add a thr_yield after every notification but that + seems to defeat the intention of the test. Thanks to Ivan + Murphy for reporting the false error output. + +Sat Nov 27 22:06:26 1999 Nanbor Wang + + * ace/OS.cpp: Defined ACE_ENDTHREADEX and ACE_BEGINTHREADEX to use + ExitThread and BeginThread for WinCE 2.11 and above. Thanks to + Peter C. Chien for the tip. + + * ace/ace_ce_dll.dsp: Reworked for WinCE 2.11. More + configurations are added and the distributed token related files + are removed from the project. + + * ace/OS.{h,cpp}: WinCE 2.11 and above does implement exit method + so we don't need to provide our own for them. + + * ace/config-WinCE.h: Updated configuration settings for WinCE + 2.11. + + * ace/Memory_Pool.{h,i}: Added the method for + accessing the base address information of the memory pool. + +Sat Nov 27 18:36:48 1999 Douglas C. Schmidt + + * tests/Priority_Buffer_Test.cpp (consumer): Revised the test + so that it doesn't bother to check the priority in the + ACE_ASSERT macro if we're sending a shutdown message. Thanks to + Ivan Murphy and Darrell Brunsch for narrowing this down. + +Thu Nov 25 13:32:00 1999 Douglas C. Schmidt + + * netsvcs/lib/Client_Logging_Handler.cpp (parse_args): Make sure + to free() the host or logger key before calling strdup()! + + * netsvcs/lib/Logging_Strategy.cpp (parse_args): Fixed up this + code so that we correctly allocated and deallocate filename_ + using strdup()/free() to prevent weird memory problems. Thanks + to Alexander Dergatch for reporting this. + +Sat Nov 27 15:01:44 1999 Carlos O'Ryan + + * ACE version 5.0.9 released. + +Sat Nov 27 14:59:27 1999 Carlos O'Ryan + + * bin/make_release: + There was a non-scoped variable. + +Thu Nov 25 13:24:37 1999 Darrell Brunsch + + * tests/Capabilities_Test.cpp: Changed a variable from + int to ACE_HANDLE. + +Thu Nov 25 02:17:34 1999 Nanbor Wang + + * ace/Malloc.h: Added back some apparent bug fixes during the + alignment change. + +Thu Nov 25 01:41:33 1999 Nanbor Wang + + * ace/Malloc.h: Removed the alignment change for now. + +Wed Nov 24 14:41:14 1999 Nanbor Wang + + * ace/Process.i (wait): Changed to use the process handle to wait + for process termination. + + * ace/OS.h: + * ace/OS.i (wait,waitpid): Added an extra argument that takes the + process handle of the waited process. On Win32, is + ignored if the is not equal to 0. Passing the process + is prefer on Win32 because using to wait on the + project doesn't always work correctly if the waited process has + already terminated. + +Wed Nov 24 08:30:52 1999 Douglas C. Schmidt + + * examples/Shared_Malloc/test_malloc.cpp (malloc_recurse): Fixed + the AMS macro to be ACE_MALLOC_STATS. Thanks to David Levine + for reporting this. + +Tue Nov 23 12:47:39 1999 Douglas C. Schmidt + + * ace/Malloc.h: Modified the definition and use of + ACE_MALLOC_PADDING_SIZE so that it works correctly and the code + that uses it compiles... Thanks to Alexander Belopolsky + for reporting this. + + * ace/Malloc: Replaced the AMS macro, which polluted the global + namespace, with ACE_MALLOC_STATS, which doesn't... Thanks to + Alexander Belopolsky for reporting + this. + + * ace/OS.h: Modified ACE_MIN macro so that it uses the > operator to + be consistent with the ACE_MAX macro. Thanks to Derek Dominish + for reporting this. + + * tests/Malloc_Test: Updated the Malloc_Test so that it'll + allocate and test doubles to make sure they work correctly. + + * ace/Malloc.h: Modified the alignment logic to make things + work properly for datatypes like doubles. Thanks to Alexander + Belopolsky for working this out. + +Tue Nov 23 12:02:53 1999 Douglas C. Schmidt + + * ace/OS.i: Moved the inline methods for sec()/usec()/msec() so + that are defined *before* they are used... + +Tue Nov 23 11:34:40 1999 Nanbor Wang + + * tests/Malloc_Test.cpp (myallocator): Applied ACE_TEXT to several + malloc argument. Thanks to Ivan Murphy for reporting this. + +Tue Nov 23 11:06:13 1999 Nanbor Wang + + * tests/CDR_File_Test.cpp (run_test): Changed to + LPCTSTR so the test compile with UNICODE. Thanks to Ivan Murphy + for reporting this. + +Mon Nov 22 18:02:19 1999 Irfan Pyarali + + * ace/Strategies_T.cpp: + * ace/Cached_Connect_Strategy_T.cpp: + + There was a strange interaction in + find_or_create_svc_handler_i() because of these two changes: + + Fri Nov 12 00:30:41 1999 Irfan Pyarali + + and + + Mon Jul 19 22:46:54 1999 Irfan Pyarali + + Basically, was assigned to the newly created svc_handler. + It had, however, not been added to the connection map nor had it + been assigned a hint or recycler, i.e., it was partially + initialized. + + However, we let go of the connector lock during the OS level + connect call, hence exposing the partially initialized + svc_handler to other threads. + + The solution is to use a temporary variable until the + svc_handler is completely initialized. After this we can assign + to . Note that making a new svc_handler, + connecting remotely, binding to the map, and assigning of the + hint and recycler should be atomic to the outside world. + +Mon Nov 22 17:06:34 1999 Darrell Brunsch + + * bin/auto_compile_win32.pl: Changed the project file for + ImplRepo_Service. Thanks to Derek Dominish + for pointing this out. + +Mon Nov 22 14:15:23 1999 Douglas C. Schmidt + + * examples/Configuration/config_test.cpp: ACE-ified this example. + + * ace/OS.i: Replaced all the uses of ACE_Time_Value private methods + within the overloaded global relational operator to use inline + methods. This change should work around bugs with MSVC++. + Thanks to Alok Gupta for reporting + this. + + * ace/Service_Config.cpp (parse_args): Reverted the behavior + of parse_args() so that it doesn't return an error when it runs + across an option that it doesn't recognize. This is necessary + to support certain use-cases where the Service Configurator is + part of an application-specific configuration process. We do, + however, print a warning message if ACE::debug() > 0. Thanks to + Ivan Murphy for reporting this and + suggesting a fix. + +Sat Nov 20 10:16:07 1999 Douglas C. Schmidt + + * ace/Configuration.cpp: Moved DEFBUFSIZE into the Win32-specific + part of the code and changed the name to ACE_DEFAULT_BUFSIZE so + that it won't conflict with any global names. Thanks to David + Levine for reporting this. + +Fri Nov 19 17:25:13 1999 Douglas C. Schmidt + + * ace: Double checked that ACE builds correctly when threads are + disabled. + + * ace/Local_Tokens.cpp (client_id): Had to futz with the code + a bit to get it to work for both the threaded and non-threaded + case. + + * ace/Activation_Queue.h: Added a #define of ACE_Activation_List + to ACE_Activation_Queue to be compatible with the terminology + used in the POSA2 book! + + * ace/Message_Queue_T: Moved message_bytes(size_t) and + message_length(size_t) from the *.i file to the *.cpp file to + workaround bugs with SunC++ 5.0. Thanks to Rick Weisner + and John Tucker + for reporting this problem and providing + the fix. + + * ace/Configuration.cpp: There were inconsistencies in the explicit + template instantiations where ACE_Thread_Mutex should have been + ACE_SYNCH_MUTEX so that the code will work when threading is + disabled. In addition, we must be careful to conditionally + compile certain ACE_Allocator<> and ACE_Malloc<> template + instantiations since they are only valid when ACE_HAS_THREADS is + defined. + + * include/makeinclude/platform_irix6.x_sgic++.GNU, + * ace/Local_Tokens, + * ace/Synch_T.i: + Made a number of minor changes so that ACE will compile/work + when threading is not enabled. Thanks to Extern Chatterji + for reporting this. + + * ace/Message_Block.h: Clarified the comment for space(). + Thanks to Eric Newton for reporting this. + +Fri Nov 19 02:21:11 1999 Darrell Brunsch + + * ace/Configuration.h: + * ace/Configuration.cpp: + Altered the Unicode macros used so it compiles in the two + Unicode configurations. Thanks to Ruibiao Qiu + for noticing this. + +Thu Nov 18 22:49:09 1999 David L. Levine + + * tests/run_tests.lst: DISABLED Process_Manager_Test + because it fails on Solaris and HPUX_aCC. + +Thu Nov 18 20:47:49 1999 Krishnakumar Elakkara Pathayapura + + * THANKS: added Marcelo Matus + +Thu Nov 18 19:44:04 1999 David L. Levine + + * ace/OS.i (ACE_TSS_Emulation::tss_base,ts_object): on VxWorks, + if ACE_VXWORKS_SPARE is 0, allocate a TSS array (and + zero it out) in tss_object () instead of tss_base (). + This allow tss_base () to still be used on the left-hand + side. The only way that tss_base () should be called + on VxWorks with 0 ACE_VXWORKS_SPARE is through ts_object (). + Thanks to Dave Steele and + Dale Wood for further discussion and + insight. + +Thu Nov 18 19:20:16 1999 Ossama Othman + + * ace/OS.h (SEM_FAILED): + + Changed SEM_FAILED from ((sem_t *) 0) to ((sem_t *) -1). + Although it makes more sense to have a zero fail value, it + appears that many OSes are still brain damaged enough to use -1 + instead. This change is consistent with what ACE expected as + the sem_open() fail value prior to my updates. + +Thu Nov 18 16:37:55 1999 Ossama Othman + + * ace/OS.h: + + If a platform has named POSIX semaphores, define SEM_FAILED if + it isn't already defined. + + * ace/OS.i (sema_init): + + Cast MAP_FAILED to (sem_t *) when comparing to sem_t pointer. + + Check sem_open() failure against SEM_FAILED macro instead of + ((sem_t *) -1) since sem_open() in some named POSIX semaphore + implementations returns ((sem_t *) 0) on failure (e.g. glibc + 2.1.x on Linux). + +Thu Nov 18 08:19:39 1999 Douglas C. Schmidt + + * ace/SOCK_Dgram_Bcast.cpp: Some systems seem to generate 0 + (AF_UNDEF) for the sa_family, even when there are no errors! + Thus, we only print an error if this is not the case, or if + we're in "debugging" mode. Thanks to Extern Chatterji + for reporting this. + +Thu Nov 18 12:08:20 1999 Balachandran Natarajan + + * ace/Configuration.cpp: Added missing template instantiations for + SunCC5.0 + +Thu Nov 18 11:49:39 1999 Ossama Othman + + * bin/make_release: + + Added MD5 checksum generation support. Each ACE/TAO archive + will now have an associated file that contains its MD5 + checksum. [Bug 48] + +Thu Nov 18 08:19:39 1999 Douglas C. Schmidt + + * ace/Log_Msg.cpp: Added a new flag to win32 FormatMessage call, + which removes unneccessary newlines in resulting message. So + whole logged message fits on one line and logs are then nicer + and easier to parse. Thanks to Martin Krumpolec + for contributing this. + +Wed Nov 17 22:45:01 1999 David L. Levine + + * ace/OS.i (ACE_TSS_Emulation::tss_base): on VxWorks, + if ACE_VXWORKS_SPARE is 0, allocate a TSS array. This + can happen if the task wasn't spawned through ACE, + but then tries to use ACE's TSS emulation. Thanks + to Dave Steele for the + excellent detective work and patch. + + * ace/config-vxworks5.x.h: added ACE_VXWORKS_SPARE, + defaulted to spare4. + +Wed Nov 17 17:36:25 1999 Steve Huston + + * ace/config-hpux-11.x-hpc++.h: Added + ACE_LACKS_PLACEMENT_OPERATOR_DELETE for aC++. This is a known bug by + HP, at least at aC++ A.03.10. + +Wed Nov 17 16:33:40 1999 Ossama Othman + + * ace/Makefile.am: + + Added Auto_IncDec_T.*, Capabilities.* and Configuration.* to + list of sources. + + * tests/Makefile.am: + + Added Auto_IncDec_Test, Capabilities_Test and + Process_Manager_Test to list of tests. + + * tests/Capabilities_Test.cpp: + + Create the config file within the test itself instead of having + a seperate config file. This makes the test self-contained, and + also allows the test to be run in a build environment where the + sources are in a different directory from the binaries (e.g. a + "VPATH" build). This change was motivated by a problem that + occurred in an ACE+autoconf VPATH build. + + * tests/Capabilities_Test.cfg: + + Removed this file. It is now created at run-time by the + Capablities_Test itself. + +Wed Nov 17 13:45:25 1999 Ossama Othman + + * acconfig.h: + * configure.in: + * ace/OS.h: + * ace/OS.i: + + Added support for two additional macros, namely ACE_HAS_LSEEK64 + and ACE_LACKS_LLSEEK_PROTOTYPE. This make it easier to + customize llseek support for a given platform. + + * ace/config-linux-common.h: + + Define ACE_HAS_LSEEK64 and ACE_LACKS_LSEEK64_PROTOTYPE for glibc + 2.1.x, and define ACE_HAS_LLSEEK and ACE_LACKS_LLSEEK_PROTOTYPE + for glibc 2.0.x. [Bug 375] + +Wed Nov 17 07:36:04 1999 Douglas C. Schmidt + + * tests: Removed the Cache_Manager_Test.cpp since Cache_Manager.* + is no longer in ACE. Thanks to Airat A. Sadreev + for reporting this. + + * netsvcs/lib/Client_Logging_Handler.cpp (fini): Added a void * + cast to the arguments to ACE_OS::free(). Thanks to David Levine + for reporting this. + +Tue Nov 16 07:58:11 1999 Douglas C. Schmidt + + * netsvcs/lib/Client_Logging_Handler.cpp (fini): + Make sure to dynamically allocate the logger_key_ and + server_host_ so that we don't end up with weird memory problems. + Thanks to Alexander Dergatch for reporting this. + + * ace/config-irix6.x-common.h: Added + ACE_LACKS_PLACEMENT_OPERATOR_DELETE to keep Irix compilers from + complaining! Thanks to David for reporting this. + +Mon Nov 15 20:44:04 1999 Douglas C. Schmidt + + * ace/OS.cpp (inherit_log_msg): Added a comment explaining why + we don't inherit the callback when a new thread is created - + since all hell would break loose otherwise if it came off the + stack! Thanks to Sangwoo Jin for + motivating this clarification. + +Mon Nov 15 19:54:36 1999 Ossama Othman + + * ace-config.in: + + Added missing "-lACE" to the library list. Thanks to Benedikt + Eric Heinen for pointing this out. + +Mon Nov 15 13:28:03 1999 Luther J Baker + + * ace/Log_Msg.cpp (priority_mask_): + Added delete_ostream_(0) to ctor. + +Mon Nov 15 09:33:49 1999 Douglas C. Schmidt + + * ace/Synch.h (ACE_Mutex): changed protected: to public: in + ACE_Mutex so that certain compilers would be happy. Thanks to + Ivan Murphy for reporting this. + + * ace/Configuration.h (ACE_Configuration_Section_Key): The + reserved word "operator" has a typo and is typed as "Operator". + Thanks to Andy Gokhale for reporting this. + +Sun Nov 14 20:20:13 1999 Douglas C. Schmidt + + * ace/Configuration.h: Improved the ACE-ification of this file. + +Sun Nov 14 18:13:37 1999 Ossama Othman + + * ACE-configuration.txt: + + Updated with information about bootstrapping autoconf support in + ACE since it is currently not enabled by default in ACE. + + * configure.in: + + User must now specify the "--enable-maintainer-mode" configure + script option in order to be able to use the configure script. + If an attempt is made to run the configure script with this + option, the configure script will immediately exit with a + summary that states that ACE stock build procedure should be + used until autoconf support is fully integrated into ACE. + + Once autoconf support is fully integrated into ACE, this + requirement will be removed. + +Sun Nov 14 15:22:29 1999 Darrell Brunsch + + * ace/Configuration.cpp: Fixed a statement unreachable in + expand_path (). + +Sat Nov 13 19:55:17 1999 Luther J Baker + + * ace/SString.cpp (next): + Removed a buggy line for Tokenizer. + Thanks to Sangwoo Jin for reporting this. + +Sat Nov 13 18:38:21 1999 Darrell Brunsch + + * ace/Configuration.cpp: Fixed some compiler problems with the + ACE_Malloc template instantiations and pointer casting. + +Sat Nov 13 11:29:20 1999 Douglas C. Schmidt + + * tests/run_tests.lst: Re-enabled the Process_Manager_Test + to see if it Dave Madden's fixes worked. + +Fri Nov 12 21:26:58 1999 David L. Levine + + * ace/OS.h: without threads, added #ifndef protection for + all of the THR_* macros that didn't already have it. + And, with ACE_HAS_PRIOCNTL on sun, #include + before #including sys/rtpriocntl.h. That ensures that + the THR_* macros are defined first by the system header + file. Thanks to Timothy Canham + for reporting this. + + Also, changed a couple of #includes + to "ace/sys_conf.h", because that file is not a system + header. + +Fri Nov 12 00:30:41 1999 Irfan Pyarali + + * ace/Connector.cpp (connect_i): Since we should change only + in the confines on the connector lock, it is not proper to use + the copy of and assign it to when the connect + succeeds. The removal of should not change the + algorithm (famous last words ;) since not really be + considered in the case of failures. + + * ace/Strategies_T.cpp (ACE_Cached_Connect_Strategy): + * ace/Cached_Connect_Strategy_T.cpp: + + If the new connection fails, close out the svc_handler and set + it to zero. + + Also in cleanup_hint_i(), reset the <*act_holder> in the + confines and protection of the lock. + + * ace/Svc_Handler.cpp (cleanup_hint): Expanded the interface to + allow the resetting of the in an atomic manner wrt + the lock of the connector. + + The above changes should fix BUG 310. Thanks to Eric Mitchell + for reporting it. + +Fri Nov 12 12:13:29 1999 Steve Huston + + * ace/config-aix-4.x.h: Made _BSD_INCLUDES and ACE_HAS_CHARPTR_DL + be defined only for pre-AIX 4.3. Thanks to Greg Siebers + for these changes. + Set ACE_LACKS_PLACEMENT_OPERATOR_DELETE for IBM C++ 3.6 and prior. + +Fri Nov 12 11:50:19 1999 Nanbor Wang + + * ACE-INSTALL.html: Added ACE lib/dll naming rules. + +Fri Nov 12 10:02:10 1999 Douglas C. Schmidt + + * ace/config-win32-common.h, + * ace/config-win32.h: Fixed inconsistent use of <> and + "" for ACE-specific #includes. Thanks to Dave Delano + for reporting this. + +Fri Nov 12 08:25:25 1999 David L. Levine + + * ace/Log_Msg.cpp (open,log,dump): ensure that there + is a message_queue_ by calling get_lock () in multithreaded + applications. This solves the problem where the first + thread that uses a Log_Msg terminates before any other + threads create a Log_Msg instance. Thanks to + Mike Mazurek for reporting this. + +Thu Nov 11 20:46:29 1999 Ossama Othman + + * examples/Configuration/Makefile: + + Added a Makefile for this example. + + * examples/Configuration/config_test.cpp: + + ACEified this example, and corrected several errors and + warnings. + +Thu Nov 11 20:28:44 1999 Carlos O'Ryan + + * ace/Local_Tokens.cpp: + * ace/OS.cpp: + Removed gcc-2.95 warnings about mismatch format and arguments, + the warning only shows up under gcc-2.95 for alphas. + We use to print the addresses which produces correct + results in all the platforms we have access to. + Thanks to Cristian Ferretti for pointing this + out. + +Thu Nov 11 19:55:52 1999 Darrell Brunsch + + * ace/Configuration.h: + * ace/Configuration.cpp: + * examples/Configuration/config_test.cpp: + MSVC doesn't like _export and _import so changed them to + export_config and import_config. + +Thu Nov 11 18:41:24 1999 Ossama Othman + + * ace/Configuration.h: + * ace/Configuration.cpp: + + "path_" variable was allocated with strdup(), but deallocated + with delete(). free() should be used instead. + + Added missing class members to member initializer lists. + + Changed name of export() to _export(). "export" is a C++ + keyword, and shouldn't be used as function name. The import() + method was changed to _import() for sake of being consistent. + + Removed duplicate template instantiations. + +Thu Nov 11 17:09:19 1999 Darrell Brunsch + + * ace/Configuration.h: + * ace/Configuration.cpp: + ACE-ified the code. Also fixed miscellaneous compiler warnings + and put in template specialization code. + +Thu Nov 11 12:10:40 1999 Douglas C. Schmidt + + * ace/Process_Manager.cpp, + ace/Process.cpp: It looks like the thread that's going to use + the Process_Manager object must do a setpgid (0, 0) in order to + establish a process group for its children. Apparently, when + you run the test program from the command line, the shell sets + the process up in a group of its own, but when you run it from + the test script, it's a member of the script's group. In the + latter case, when you spawn a child process, you can't add it to + your own group (because your group doesn't exist!). Thanks to + Dave Madden for contributing this fix. + +Thu Nov 11 01:54:55 1999 Luther J Baker + + * ace/Log_Msg.h (msg_ostream): + * ace/Log_Msg.cpp (msg_ostream): + * ace/Log_Msg.cpp (~ACE_Log_Msg): + + Added a member to flag whether or not Log_Msg object + assumes responsibility for destroying its ostream_*. + +Wed Nov 10 23:29:25 1999 Darrell Brunsch + + * ace/Configuration.cpp: + * ace/Configuration.h: + * ace/Configuration.i: + * examples/Configuration/Configuration.dsw: + * examples/Configuration/Test.dsp: + * examples/Configuration/config_test.cpp: + Added the ACE Configuration class files. Thanks to Chris + Hafey for submitting them. + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + * ace/Makefile: + * examples/Configuration/Makefile: + Added the Configuration files to the projects and Makefiles. + + * ace/config-win32.h: + MSVC only supports operator placement delete as of version 6. + +Wed Nov 10 22:12:32 1999 Ossama Othman + + * configure.in: + + Enabled the CVS directory check so that ACE's stock Makefiles + won't get inadvertently clobbered by developers who want to + experiment with the configure script. + + * m4/acinclude.m4: + + Made CVS directory check more verbose. It now provides an + example of how to avoid the error it detects, i.e. it provides + an example that demonstrates to do a build without affecting the + source. + + * Makefile.in: + * ace/Makefile.in: + * ace/config.h.in: + * apps/gperf/src/Makefile.in: + * apps/gperf/Makefile.in: + * apps/Makefile.in: + * netsvcs/clients/Logger/Makefile.in: + * netsvcs/clients/Naming/Client/Makefile.in: + * netsvcs/clients/Naming/Dump_Restore/Makefile.in: + * netsvcs/clients/Naming/Makefile.in: + * netsvcs/clients/Tokens/collection/Makefile.in: + * netsvcs/clients/Tokens/deadlock/Makefile.in: + * netsvcs/clients/Tokens/invariant/Makefile.in: + * netsvcs/clients/Tokens/manual/Makefile.in: + * netsvcs/clients/Tokens/mutex/Makefile.in: + * netsvcs/clients/Tokens/rw_lock/Makefile.in: + * netsvcs/clients/Tokens/Makefile.in: + * netsvcs/clients/Makefile.in: + * netsvcs/lib/Makefile.in: + * netsvcs/servers/Makefile.in: + * netsvcs/Makefile.in: + * man/html/Makefile.in: + * man/man3/Makefile.in: + * man/Makefile.in: + * tests/Makefile.in: + + Added these files so that developers who don't have GNU + Autoconf, Automake and Libtool can run the configure script and + attempt builds to provide feedback to us. + +Wed Nov 10 21:35:47 1999 Ossama Othman + + * m4/compiler.m4: + + Added some default flags for compilers on IRIX. + + * m4/threads.m4: + + Added more thread library checks in an effort to figure out if a + thread library really is needed, in the case that the initial + check for pthread_create succeeds without the need of a thread + library. Such a problem occurred on IRIX. This modification + should correct the problem. + +Wed Nov 10 10:55:34 1999 Ossama Othman + + * ace/OS.i (memset, thr_self, thr_getspecific): + + Commented the ACE_TRACE statements. On some compiler/platform + combinations these methods get called before the Object Manager + is initialized, which causes the ACE_TRACE call to seg fault + when tracing is enabled in ACE. + +Tue Nov 9 17:50:01 1999 Darrell Brunsch + + * ace/config-hpux-10.x-hpc++.h: + Added ACE_LACKS_PLACEMENT_OPERATOR_DELETE since it doesn't seem + to be supported on aCC. + +Tue Nov 9 15:47:10 1999 Ossama Othman + + * ace/XtReactor.cpp (TimerCallbackProc): + + Fixed "unused argument" warning. + +Tue Nov 9 14:57:51 1999 Ossama Othman + + * configure.in: + + Minor comment updates. + + * m4/features.m4: + + Fixed asynchronous IO tests. The tests now properly detect + working asynchronous IO on Linux, for example. + + Force asynchronous IO tests to be performed after the thread + detection tests in case the real time functions depend on the + thread library. + +Tue Nov 9 10:11:22 1999 Douglas C. Schmidt + + * ace/config-g++-common.h: Added ACE_LACKS_PLACEMENT_OPERATOR_DELETE + for the GCC 2.8 and earlier family of compilers since they don't + seem to support this feature. + +Mon Nov 8 09:41:34 1999 Douglas C. Schmidt + + * ace/Svc_Handler.cpp: Removed the unused parameter `n'. Thanks + to David Levine for reporting this. + +Mon Nov 8 16:34:27 1999 Ossama Othman + + * acconfig.h: + * configure.in: + + Added autoconf support/tests for the following ACE macros: + + ACE_HAS_STRPTIME + ACE_LACKS_NATIVE_STRPTIME + ACE_LACKS_PLACEMENT_OPERATOR_NEW + ACE_LACKS_PLACEMENT_OPERATOR_DELETE + +Mon Nov 8 09:41:34 1999 Douglas C. Schmidt + + * ace/config-g++-common.h: Added ACE_LACKS_PLACEMENT_OPERATOR_NEW + for older versions of G++. Thanks to David Levine for reporting + this. + + * ace/config-sunos5.5.h: Added a #define for + ACE_LACKS_PLACEMENT_OPERATOR_DELETE to handle problems with + SunC++ 4.2. + + * ace/Svc_Handler: Not all C++ compilers support placement + operator delete, so we need to #ifdef for it. Thanks to Andy + Gokhale for reporting this. + +Sun Nov 07 23:36:51 1999 Nanbor Wang + + * tests/run_tests.bat: + * tests/tests.dsw: + * tests/Auto_IncDec.dsp: + * tests/version_tests/version_tests.dsw: + * tests/version_tests/Auto_IncDec_Test.dsp: Added Auto_IncDec_Test + for MSVC workspaces. + +Sun Nov 7 12:03:31 1999 Douglas C. Schmidt + + * ace/Svc_Handler: Added two new placement operator new() and + delete() operations so that it is possible to allocate an + ACE_Svc_Handler from a custom allocator. Thanks to Edan Ayal + for contributing this. + + * tests/run_tests.lst: Added Auto_IncDec_Test to the tests. + + * ace/Makefile, + tests/Makefile: Added the new Auto_IncDec* stuff to the + makefiles. + + * ace: Added Auto_IncDec_T.{h,i,cpp} to the ACE release. This class + automatically increments and decrements a parameterized counter. + Thanks to Edan Ayal for contributing this. + + * tests/Auto_IncDec_Test.cpp: Added a test for the ACE_Auto_IncDec + class. Thanks to Edan Ayal for contributing + this. + +Fri Nov 05 14:26:38 1999 Jim Buck + + * ace/OS.cpp (ACE_Time_Value::set): fixed calculation of + microsecond part. This change restores the correct pre-ACE 5.0 + behavior. + +Fri Nov 5 07:58:14 1999 Douglas C. Schmidt + + * ace/Memory_Pool.i: Fixed stupid typos in Memory_Pool.i. + Thanks to Jeff Parsons for reporting this. + + * ace/Memory_Pool.i: Default arguments shouldn't be in the + *.i signatures. Thanks to Andy Gokhale for reporting this. + +Thu Nov 4 08:36:34 1999 Douglas C. Schmidt + + * ace/Memory_Pool: Moved the sync() and protect() methods + from ACE_Pagefile_Memory_Pool into the *.i file and made their + parameter names anonymous since these methods are no-ops. + Thanks to Martin Krumpolec for suggesting + this. + + * include/makeinclude/compiler.bor: Changed MISC_CFLAGS + to -a8 -b- -Ve -Vx. Thanks to Jody Hagins for this suggestion. + +Thu Nov 04 15:19:54 1999 David L. Levine + + * ACE version 5.0.8 released. + +Thu Nov 04 08:16:25 1999 David L. Levine + + * config-linux-common.h: only enabled ACE_HAS_SIGTIMEDWAIT + with glibc. RedHat 5.2 doesn't have sigtimedwait. + +Mon Nov 01 14:29:04 1999 David L. Levine + + * ace/Filecache.cpp,Capabilities.cpp,Makefile: moved + ACE_Hash and ACE_Equal_To + explicit instantiations from Filecache.cpp to Capabilities.cpp, + because it needs them and is used with FOR_TAO. + +Mon Nov 01 15:05:44 1999 Steve Huston + + * THANKS: Added Greg Siebers + +Mon Nov 01 15:02:31 1999 Steve Huston + + * ace/config-aix-4.x.h: Added definition of ACE_LD_SEARCH_PATH. + Thanks to Greg Siebers for this fix. + +Mon Nov 01 10:11:36 1999 David L. Levine + + * ace/Capabilities.{i,cpp}: unlined definition of + ~ACE_CapEntry. It caused an internal compiler error + with g++ 2.7.2.3, and it is a good idea to not inline + it because it's virtual. Also, prepended ACE_ to + enum values. + +Sun Oct 31 22:46:17 1999 David L. Levine + + * tests/Capabilities_Test.cpp (main): removed declarations + of unused argc and argv arguments. + +Sun Oct 31 16:39:53 1999 Darrell Brunsch + + * ace/Capabilities.cpp: + Added ACE_BUILD_DLL so the class is properly exported on NT. + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: + Added Capabilities files to MSVC projects. + + * tests/Capabilities_Test.cpp: + Was loading the wrong file, changed to loading + Capabilites_Test.cfg instead of captest.cfg. + + * tests/Capabilities_Test.dsp: + * tests/version_tests/Capabilities_Test.dsp: + * tests/tests.dsw: + Added Capabilities_Test project files. + + * tests/run_tests.bat: + Added Capabilities_Test to the list of tests. + +Sun Oct 31 15:29:08 1999 Douglas C. Schmidt + + * ace/Capabilities.cpp: Cleaned up some of the explicit template + instantiations so they will work on all platforms. Thanks to + Bala for pointing this out. + + * ace/Makefile, + * tests/run_tests.lst, + tests/Makefile (BIN): Added an entry for the new ACE_Capabilities + classes. + +Fri Oct 29 21:09:49 1999 Ossama Othman + + * man/html/Makefile.am: + + For some reason Automake couldn't automatically copy the HTML + man pages to the distribution directory when doing a `make dist' + so do it manually. + +Fri Oct 29 19:53:59 1999 Ossama Othman + + * Makefile.am (EXTRA_DIST): + + Removed ACE.DSW from the distribution list. + + * configure.in: + + Removed test for necessity of _GNU_SOURCE macro. All uses and + need of that feature test macro have been removed from ACE. + + If a thread library was detected, define _REENTRANT in the + command line, not the generated config.h header. The user can + use the ace-config script to determine what other flags are + needed to compile ACE. + + Check for sched_yield in the librt library, if it exists, in + addition to the others listed. Solaris 7 moves sched_yield from + the libposix4 library to librt. + + Added libsocket to list of libraries to search for + getservbyname(). + + If check for socket() results in unresolved symbols, add `-lnsl' + to library search. + + Improved ACE_HAS_PTHREAD_PROCESS_ENUM test. + + Added checks for getpgid, strtok_r, strptime and lseek64 + prototypes. The old getpgid test is superceded by a new one. A + prototype is declared if the checks determine that certain + feature test macros are needed to enable them. + + Added man directory Makefiles to list of files to generate. + + * ace-config.in: + + Minor updates. Modified so that "ace" is the default library if + one isn't specified. + + * ace-config.1.in: + + Minor updates. + + * ace/config-linux-common.h: + * ace/OS.h: + + Moved all prototypes to OS.h. Only macros should be defined + config headers. Each of the moved prototypes are enabled by + using the following newly added macros: + + ACE_LACKS_GETPGID_PROTOTYPE + ACE_LACKS_STRPTIME_PROTOTYPE + ACE_LACKS_STRTOK_R_PROTOTYPE + ACE_LACKS_LSEEK64_PROTOTYPE + + All prototypes in ace/OS.h should come after the inclusion of + ace/Basic_Types.h since the prototypes may need types that are + only available after that inclusion. Also added a + ACE_LACKS_PREAD_PROTOTYPE that is used to enable make both + pread() and pwrite() protypes. + + Recent glibc libraries have pread() and pwrite() but only enable + the prototypes if _XOPEN_SOURCE=500 is defined (Single Unix + specification). Now define ACE_HAS_P_READ_WRITE and + ACE_LACKS_PREAD_PROTOTYPE on Linux. + + * bin/bootstrap: + + Added ACE man page generation. Generating the man pages during + the bootstrapping process allows the man page list in + man/man3/Makefile.am to be generated by a shell command instead + of having to explicitly specify each man page in that Makefile. + The man pages will only be generated if the ACE.3 man page + doesn't exist. That man page should be representative of the + existence of the rest of the man pages. + + * man/Makefile.am: + * man/html/Makefile.am: + * man/man3/Makefile.am: + + Added Automake input files for the ACE man pages. The man pages + will now be installed during a `make install'. This is an + ACE Configuration Project specific enhancement. ACE's current + man page scheme is unchanged, and doesn't support this feature. + + * m4/features.m4: + + Delete test_aio.log when the test is done. + +Fri Oct 29 17:01:58 1999 Kirthika Parameswaran + + * ace/OS.h: Added ACE_DEFAULT_SHLIB_MODE for KCC. Since this mode + wasnt right the DLL_Test failed when compiled using the KAI + compiler. This change fixes this problem too. Thanks to Nanbor + and Michael Kircher + for helping me on this task. + +Fri Oct 29 07:08:16 1999 David L. Levine + + * include/makeinclude/rules.local.GNU, + include/makeinclude/wrapper_macros.GNU + include/makeinclude/platform_vxworks5.x_g++.GNU: + fixed typo: COMSPEC instead of COMPSPEC. + +Thu Oct 28 11:15:43 1999 Nanbor Wang + + * docs/ACE-guidelines.html: Added a new guideline on avoiding + multicharacter format specifiers in ACE_DEBUG/ACE_ERROR. + +Thu Oct 28 10:54:42 1999 Nanbor Wang + + * ace/Message_Block.cpp: + * ace/Name_Request_Reply.cpp: + * ace/Time_Request_Reply.cpp: + * ace/Token_Request_Reply.cpp: + Replaced the use of %ld or %lu with %d or %u in + ACE_DEBUG/ACE_ERROR. + + * ace/config-kcc-common.h: Undefined + ACE_HAS_NONSTATIC_OBJECT_MANAGER. Thanks to Russ Noseworthy for + noticing this. + +Thu Oct 28 10:49:51 1999 Darrell Brunsch + + * ACE.dsw: This is an internal file that I last updated + in 1997 (I don't think it ever got included in the + releases). Being out of date and not used, I removed it. + +Thu Oct 28 09:31:19 1999 David L. Levine + + * tests/SOCK_Send_Recv_Test.cpp (client): if len is not 255, + print out its value. + +Thu Oct 28 09:27:47 1999 David L. Levine + + * include/makeinclude/rules.local.GNU, + include/makeinclude/wrapper_macros.GNU + include/makeinclude/platform_vxworks5.x_g++.GNU: + support ComSpec as well as COMSPEC environment variable + (on Windows). Thanks to Tom Venturella for reporting that + ComSpec was defined on the system that he was using. + +Wed Oct 27 20:31:22 1999 Luther J Baker + + * ace/Arg_Shifter.h (ACE_Arg_Shifter): Spelling errors. + +Wed Oct 27 16:45:56 1999 David L. Levine + + * ace/OS.cpp (ACE_Thread_Adapter::invoke): use an + ACE_reinterpret_cast instead of an ACE_static_cast to + cast func (of type ACE_THR_FUNC_INTERNAL) to ACE_THR_FUNC. + Thanks to Tom Venturella for reporting that the static_cast + didn't compile on Tornado II. + +Wed Oct 27 16:40:07 1999 David L. Levine + + * ace/OS.h,ACE.h: added newline before ACE_CLASS_IS_NAMESPACE. + This might solve the problem with the ACE_OS man page + generation failure. Thanks to Samuel Stickland + for reporting this problem. + +Wed Oct 27 12:53:15 1999 Nanbor Wang + + * ace/Object_Manager.h: + * ace/config-win32.h: The instructions on how to disable the use + of nonstatic object manager were not consistent for NT and other + platforms. Thanks to Russ Noseworthy for reporting this. + +Wed Oct 27 09:48:41 1999 David L. Levine + + * include/makeinclude/wrapper_macros.GNU: changed check + for whether exceptions are enabled from ifndef exceptions + to ifeq ($(exceptions),). That allows use of + exceptions=0. Thanks to Phil Mesnier + for reporting this. + +Wed Oct 27 09:46:05 1999 David L. Levine + + * include/makeinclude/platform_qnx_neutrino.GNU: removed + -Winline, because it was complaining about operator<< + in generated code. + +Wed Oct 27 08:32:47 1999 Douglas C. Schmidt + + * ace/OS.i (timezone): Added an ACE_UNUSED_ARG to please KCC. + Thanks to Dave Madden for reporting this. + +Tue Oct 26 14:56:15 1999 Balachandran Natarajan + + * ace/FlReactor.cpp (reset_timer_interval): Fixed a compile error + with Sun_Egcs. Thanks to Thomas Groth + for reporting this problem & also for giving a fix. + +Sat Oct 23 19:11:51 1999 Nanbor Wang + + * ACE version 5.0.7 released. + +Fri Oct 22 16:58:44 1999 Darrell Brunsch + + * ace/Dynamic_Service.h: Added an include for OS.h so the + Dynamic_Service.cpp will always get included on platforms + that need it (ie. win32). + + Thanks to Paulo Breda Vieira for spotting + this problem in the AV Streaming code on NT. + +Thu Oct 21 20:21:13 1999 Douglas C. Schmidt + + * ace/Memory_Pool.cpp (map_file): Make sure to update the + base_addr_ with the new mem_map_.addr() before the call to + update the ACE based pointer. Thanks to Damien Dufour + for reporting this. + +Thu Oct 21 17:10:17 1999 Vishal Kachroo + + * ace/OS.i (ioctl): Corrected the implementation of + ACE_OS::ioctl () call with ACE_SIO_GET_QOS io control + code. Thanks to Vidya Narayanan + for reporting this. + + * ACE_wrappers/examples/QOS/server.cpp: + * ACE_wrappers/examples/QOS/client.cpp: + * ACE_wrappers/examples/QOS/Sender_QOS_Event_Handler.cpp: + * ACE_wrappers/examples/QOS/Receiver_QOS_Event_Handler.cpp: + Changed the QOS example to GET-QOS only on receipt of a QoS + event. Also tested the changes made to the ioctl (GET_QOS) in + OS.i. + +Thu Oct 21 15:46:08 1999 David L. Levine + + * tests/run_tests.lst: disabled Process_Manager_Test, for now, + because it asserts on Solaris, Irix, Linux, and HP/UX. + +Wed Oct 21 14:05:00 1999 Ruibiao Qiu + + * ace/examples/IPC_SAP/ATM_SAP/CPP_{client,server}.dsp: Added + configurations for building static executables on NT. + +Wed Oct 20 00:05:34 1999 Douglas C. Schmidt + + * ace/OS.i: Replaced 0666 wit ACE_DEFAULT_FILE_PERMS. Thanks + to Dave Delano for reporting this. + +Tue Oct 19 13:31:15 1999 Joe Hoffert + + * ace/ATM_Params.h, ATM_QoS.{h,i}: + Cleaned up comments, removed ACE_ATM_QoS::get_options_params + method (since it's not used), and made changes for UNIX build. + +Tue Oct 19 12:55:16 1999 Ossama Othman + + * ace/Codeset_IBM1047.h: + + Include `ace/inc_user_config.h' before check for definition of + ACE_MVS macro since otherwise ACE_MVS may not get defined. + + * ace/Codeset_IBM1047.cpp: + + Moved inclusion of `ace/Codeset_IBM1047.h' ahead of ACE_MVS + macro definition check, and removed inclusing of + `ace/inc_user_config.h' + + * ace/OS.i (llseek): + + Reenabled lseek64() on Linux. If _LARGEFILE64_SOURCE is not + defined then an external declaration for lseek64() is made in + the config-linux-common.h header. + + * ace/config-linux-common.h: + + Minor comment update. + + Added extern declaration of lseek64() if _LARGEFILE64_SOURCE is + not defined. + + * ace/Handle_Set.cpp: + + Check if _XOPEN_SOURCE is #defined instead of _GNU_SOURCE to + determine if the fd_set structure has an fds_bits member. + + * ace/Makefile: + + Updated dependencies. + + * ace/Makefile.am: + + Added ATM files to source lists. + + * acconfig.h: + + Added entries for some additional "feature test" macros, such as + _XOPEN_SOURCE. + + * bin/g++dep: + * include/makeinclude/rules.local.GNU: + + Incorporated Jody Hagins patches that get + around a trailing backslash problem in generated Makefile + dependencies. Thanks Jody! + +Tue Oct 19 12:30:00 1999 Kirthika Parameswaran + + * examples/Web_Crawler.dsp: Changed the settings to make the + executable name as main.exe. + * examples/Web_Crawler/URL_Visitor.cpp (~URL_Validation_Visitor): + Removed double deletion of the which is the + Strategy Connector. + +Tue Oct 19 11:24:16 1999 Nanbor Wang + + * include/makeinclude/wrapper_macros.GNU: Commented out an + out-dated OBJEXT definition. If a rule requires to generated + *.so, then it should specify the extension using SOEXT. Thanks + to Aniruddha Gokhale for + reporting this. + +Tue Oct 19 10:27:37 1999 Carlos O'Ryan + + * bin/run_all_list.pm: + Added TAO/tests/DSI_Gateway to the list of tests + +Tue Oct 19 00:43:34 1999 Nanbor Wang + + * ace/config-win32-common.h: Undefined ACE_HAS_EXCEPTIONS under + WinCE. + + The following changes are contributions from James Buck + and Peter C. Chien . + + * ace/config-WinCE.h (ACE_LACKS_SOCKET_BUFSIZ): We cannot change + the socket buffer size on WinCE. + + * ace/OS.h: + * ace/OS.i: + * ace/OS.cpp: Added a customized TSS errno implementation for + WinCE version 2.10 and above based on James and Peter's patch. + ACE_Errno_Guard also had to be changed when using this + implementation. However, this code is not active by default + because I don't know how to detect CE's OS and platform + configuration automatically. To use the code, define + ACE_HAS_WINCE_BROKEN_ERRNO. + + * ace/OS.i(cond_wait,cond_timedwait): On WinCE, we must tweak the + returning result from the semaphore if timeout occurred. + Because CE uses the simulated semaphore, the returning value is + not the same as that returned by a native semaphore. + +Tue Oct 19 00:03:57 1999 Nanbor Wang + + * include/makeinclude/wrapper_macros.GNU: + * include/makeinclude/rules.bin.GNU: + * include/makeinclude/rules.lib.GNU: + * include/makeinclude/rules.local.GNU: Chaged the following + settings to be platform configurable: + + OBJDIRS: Names of directories to keep obj files. Default is + '.obj' and '.shobj'. + OBJEXT: Extension name for obj files. Default is 'o'. + SOEXT: Extension name for so files. Default is 'so'. + LIBEXT: Extension name for lib files. Default is 'a'. + CC_OUTPUT_FLAG: + LINK_OUTPUT_FLAG: + SO_OUTPUT_FLAG: Flags to specify output file name for cc, linker + and so_linker. Defaults are '-o'. + +Mon Oct 18 23:46:00 1999 Nanbor Wang + + * ace/config-freebsd-pthread.h: Undefined ACE_HAS_PENTIUM for + freebsd. The high resolution timer doesn't seem to work on this + platfrom. + + * ace/OS.i (cuserid): Added missing ACE_UNUSED_ARG (maxlen) + statement. + + * ace/Log_Msg.cpp (log): FreeBSD defines sys_nerr as a const int. + +Mon Oct 18 23:13:55 1999 Kirthika Parameswaran + + * examples/Web_Crawler/URL_Visitor.cpp: Updated some broken + template instantiations. Thanks to Bruce Alderson + for reporting this. + +Mon Oct 18 21:32:29 1999 Ossama Othman + + Updates that remove need to use _GNU_SOURCE macro on Linux/glibc + systems [Bug 167]: + + * ace/OS.i: + + Return ACE_static_cast (off_t, -1), instead of just -1 in + ACE_OS::lseek(). (not related to _GNU_SOURCE updates) + + Only enable lseek64() on Linux/glibc systems if + _LARGEFILE64_SOURCE is defined. + + Don't use cuserid() on Linux/glibc systems. It was dropped + from POSIX.1 back in 1990. Instead, extract the user name from + getpwuid(geteuid()), as suggested by the glibc cuserid() man + pages and Stevens' Advanced programming in the UNIX + Environment. + + * ace/Handle_Set.cpp: + + XPG4.2 declares an fds_bit member in the fd_set structure. + Since _GNU_SOURCE is being disabled in ACE, use the __fds_bits + member. It's not pretty, but it works. + + * ace/config-linux-common.h: + + strptime() is an XOPEN function. It is only enabled if + _XOPEN_SOURCE or _GNU_SOURCE is defined (_GNU_SOURCE causes + _XOPEN_SOURCE to be defined on Linux/glibc systems). If + _XOPEN_SOURCE is not defined, create an external declaration for + it. + +Mon Oct 18 18:41:38 1999 Steve Huston + + * ace/OS.h: Add #include for HP-UX 10.x, and... + * ace/OS.i (ACE_OS::sigwait): On HP-UX 10.x, call cma_sigwait + directly. Fixes bug #66. + +Mon Oct 18 15:45:08 1999 Irfan Pyarali + + * ace/OS.i (event_wait): The following changes are incorrect and + have been reverted: + + http://ace.cs.wustl.edu/cvsweb/ace-cvs.cgi/ACE_wrappers/ace/OS.i?r1=4.796&r2=4.797. + + Remember that is only turned on to remember + state, i.e., when == 0. In the case when + there are waiters, i.e., != 0, + is not turned on, and therefore breaks the wait function since + + while (event->is_signaled_ == 0) + + never becomes false. We need a better way to protect against to + guard against spurious wakeups. + +Mon Oct 18 13:42:37 1999 Nanbor Wang + + * ace/OS.h: Added extra parentheses to avoid operator precedence + mix-up. Thanks to JM Strauss + for reporting this. + +Mon Oct 18 13:30:08 1999 Nanbor Wang + + * ace/OS.h: Removed a whole bunch of extra blank in ACE_DES_*FREE* + macro definitions. Thanks to JM Strauss + for pointing this out. + +Sun Oct 17 19:08:51 1999 Balachandran Natarajan + + * ace/QtReactor.cpp: Fixed a bug in remove_handle_i () method. I + found this when I was testing the test for the QtReactor. + +Sun Oct 17 11:00:46 1999 Douglas C. Schmidt + + * include/makeinclude/platform_sunos5_sunc++.GNU (LD): Added + a fix so that SunC++ 5.0 will work correctly when it's used in + "compat" mode with SunC++ 4.2. Thanks to Susan Liebeskind + for reporting this fix. + + * ace/Malloc_T.cpp (remove): Need to call the destructor of + ACE_Malloc_Stats explicitly in remove(). Thanks to Jean-Marc + Strauss for reporting this. + + * ace/Containers_T.i (get): ACE_DLList::get() didn't check + the return value from ACE_Double_Linked_List::get() so it was + possible for the node variable to be NULL. Now it checks for + the error case explicitly. Thanks to Boris Sukholitko + for reporting this bug. + + * ace/Containers_T.cpp (get): The ACE_Double_Linked_List::get() + method should return -1 on error but it was returning 1. Now, + the implementation matches the documentation. Thanks to Boris + Sukholitko for reporting this bug. + +Sat Oct 16 17:10:23 1999 Douglas C. Schmidt + + * ace/Makefile: + * ace/Svc_Conf_l.cpp: Replace exit(1) with ACE_OS::exit(1) + so that CodeWarrior doesn't get confused. Thanks to David + Delano for reporting this. + + * ace/OS.cpp: Removed the '&' in front of thread_args to make + CodeWarrior happier. Thanks to David Delano + for reporting this. + + * ace/OS.cpp: Removed the table_() "initialization" for + ACE_TSS_Cleanup since this breaks the CodeWarrior C++ compiler. + Thanks to David Delano for reporting this. + + * ace/OS.i: There was a bug with the ACE_OS::truncate() + emulation for Win32. We need to check for ACE_INVALID_HANDLE + and NOT < 0! Thanks to David Delano for + reporting this. + +Sat Oct 16 11:17:10 1999 Irfan Pyarali + + * TAO/tao/Sync_Strategies.cpp (buffering_constraints_reached): + Changed the signature of + TAO_Flush_Sync_Strategy::buffering_constraints_reached() to + match the base class. + +Fri Oct 15 17:28:05 1999 Irfan Pyarali + + * ace/Connector.cpp (connect_i): Only close if we have a + valid . Thanks to Yury Kuznesov for + reporting this problem. + +Fri Oct 15 17:26:08 1999 Balachandran Natarajan + + * include/makeinclude/wrapper_macros.GNU: Added a new flag that + would help conditional compilation compilation of the + QtReactor. + + * ace/QtReactor.cpp: + * ace/QtReactor.h: Files for the QtReactor. Thanks to Hamish + Friedlander for donating this to ACE. For + the sake of record, Qt is a multiplatform C++ GUI toolkit. + + * ace/Makefile: Added the above files to Makefile. Changes were + also made to generate files from moc (Meta Object Compiler, + that comes with Qt libraries) and include them with the build. + +Fri Oct 15 01:03:13 1999 Douglas C. Schmidt + + * ace/Activation_Queue: ACE_Activation_Queue has no methods for + inspecting the size of the queue. The solution was to add the + methods: method_count(), is_empty(), and is_full(). Thanks to + Travis Shirk for contributing this. + +Fri Oct 15 00:36:35 1999 Douglas C. Schmidt + + * tests/Process_Manager_Test.cpp (main): Replaced + ACE_OS::exit(secs) with return secs so that Purify will be + happy. + +Thu Oct 14 14:30:06 1999 David L. Levine + + * tests/Process_Manager_Test.cpp: use u_int instead of + bool. Make ~Exit_Handler () public so that g++ doesn't + complain about a private destructor with no friends. + Commented out unused local variable child7. + +Thu Oct 14 14:25:44 1999 Dave Madden + + * tests/Process_Manager_Test.cpp: fixed the memory leaks, and + most of the "unused variable" warnings should be gone. + I've added, but left commented out, ASSERTs for the child + process' exit codes. The reason is that, on Unix, the exit + code contains extra information (exited, traced, stopped, + signaled, etc.) that causes the exit code from wait() to be + different from what the child's main() returned. + +Wed Oct 13 20:23:58 1999 Nanbor Wang + + * ace/config-WinCE.h: Added ACE_LACKS_ACE_TOKEN and + ACE_LACKS_ACE_OTHER to reduce CE dll's footprint. + + * ace/Memory_Pool.cpp (ACE_Pagefile_Memory_Pool::map): The + SECURITY_DESCRIPTOR and its management routines are only + supported on NT. Changed to pass a NULL security attribute on + non-NT platforms (95, 98, CE.) + +Wed Oct 13 10:50:39 1999 David L. Levine + + * tests/run_tests.sh: use uname -s without checking to + see if /bin/uname, etc., exist. Redirect stderr to + the sysname string. It works. + +Wed Oct 13 10:39:50 1999 David L. Levine + + * ace/OS.h: ensure that ACE_THR_PRI_FIFO_DEF and + ACE_THR_PRI_OTHER_DEF are defined on non-threaded platforms, + to support application source code compatibility. + +Wed Oct 13 10:11:47 1999 David L. Levine + + * tests/Malloc_Test.cpp: fixed preprocessor logic so that + the test is neutered on LynxOS. [Bug 224] + +Wed Oct 13 01:15:45 1999 Nanbor Wang + + * ace/Parse_Node.cpp: Made sure we don't try to duplicate a null + string. This was causing problem when the initialization string + was missing from a service entry. Thanks to Chris Hafey + for reporting this. + +Tue Oct 12 15:05:12 1999 Douglas C. Schmidt + + * tests/run_tests.lst: Reenabed Dave Madden's new + Process_Manager_Test so that we can see if it works on various + platforms. + + * tests/Process_Manager_Test.cpp (main): Added a new one-button + test for the ACE_Process_Manager. Thanks to Dave Madden + for contributing this test. + + * ace/Process_Manager.cpp (wait): Fixed a bug triggered by + a process-specific wait. Thanks to Dave Madden + for contributing this fix. + + * ace/ACE.cpp (format_hexdump): Replaced + + textver[i] = (c < 0x20 || c > 0x7e) ? '.' : c; + + with + + textver[i] = isprint (c) ? c : '.'; + + since this is more portable. Thanks to Jim Rogers + for reporting this. + + * ace/Memory_Pool.i: Changed implementation to + round_to_chunk_size() to ACE::round_to_pagesize(), which appears + to be the "Right Thing"[TM] on NT. + +Tue Oct 12 14:49:00 1999 Ruibiao Qiu + + * ace/ATM_Stream.h + * ace/ATM_Acceptor.h: Moved #pragma after ACE include + so that g++ would not give warning messages. Thanks to + Dr. David L. Levine for pointing this out. + +Tue Oct 12 14:26:15 1999 David L. Levine + + * ace/config-qnx-neutrino.h: added #define of + ACE_THR_PRI_FIFO_DEF. This allows us to easily set a thread + priority (10) that's lower the the TCP service threads (17) in + tests. Thanks to Sean Boudreau for suggesting + that. + +Tue Oct 12 14:16:18 1999 David L. Levine + + * etc/purify.solaris2: added some more UMR suppressions + for SunOS 5.7 (with Sun CC 4.2). + +Tue Oct 12 13:22:22 1999 David L. Levine + + * include/makeinclude/platform_sunos5.6_sparc_sunc++_4.2.GNU: + removed to avoid confusion. It just included + platform_sunos5_sunc++.GNU; that should be used directly, + instead. Thanks to Dan Butler + for reporting this. + +Tue Oct 12 12:40:41 1999 Jeff Parsons + + * ace/Memory_Pool.i: + * ace/Memory_Pool.cpp: + Fixed some errors in Win32 specific code. + +Tue Oct 12 12:20:08 1999 David L. Levine + + * docs/ACE-subsets.html: updated status, and added some + missing motivation sections. Thanks to Wei Chiang + for reporting that the document + was out-of-date. + +Tue Oct 12 11:57:21 1999 David L. Levine + + * ace/config-sunos5.6-sunc++-4.x.h: removed because it + #included a header that no longer exists in the + distribution. ace/config-sunos5.6.h should be used + instead. Thanks to Dan Butler + for reporting this. + +Tue Oct 12 11:48:00 1999 Ruibiao Qiu + + * ace/ATM_Addr.{h,cpp,i}: + * ace/ATM_Stream.{h,cpp,i}: + * ace/ATM_Connector.{h,cpp,i}: + * ace/ATM_Acceptor.{h,cpp,i}: + * ace/ATM_QoS.{h,cpp,i}: + * ace/ATM_Params.{h,cpp,i}: Added support for Fore ATM on Windows + platform. Enabled when ACE_HAS_ATM and ACE_HAS_FORE_ATM_WS2 + are defined. + + * ace/config-win32-common.h: Added needed header include when + ACE_HAS_FORE_ATM_WS2 is defined. + + * ace/ace_dll.dsp: + * ace/ace_lib.dsp: Included ATM_* classes files in the porject files. + + * examples/IPC_SAP/ATM_SAP/CPP-client.cpp + * examples/IPC_SAP/ATM_SAP/CPP-server.cpp: Changed example codes + so that they can be run on Windows. They are now non-interactive, + and show data rates at each end. + + * examples/IPC_SAP/ATM_SAP/CPP_client.dsp + * examples/IPC_SAP/ATM_SAP/CPP_server.dsp + * examples/IPC_SAP/ATM_SAP/ATM_SAP.dsw: Created MSVC project files + and workspace file for these examples. + +Tue Oct 12 11:37:56 1999 David L. Levine + + * tests/run_tests.sh: export ACE_ROOT if setting it. + +Tue Oct 12 11:32:23 1999 David L. Levine + + * tests/run_tests.pl,run_tests.sh: don't print "Skipping test + on this platform" message for DISABLED tests. Set + ACE_ROOT to .. if it wasn't set. + + * tests/run_tests.sh: don't invoke uname command on + Neutrino, because it's not supported. + +Tue Oct 12 08:53:52 1999 Irfan Pyarali + + * ace/Message_Queue.cpp (enqueue): and + should increase by total_size() and total_length() respectively. + And in dequeue(), should decrease by + total_length(). Thanks to Christopher Kohlhoff + for pointing this out. + +Tue Oct 12 10:00:52 1999 Douglas C. Schmidt + + * ace/Memory_Pool (ACE_Pagefile_Memory_Pool):Added a new memory + pool that uses the Win32 page file. Thanks to Dieter Quehl for + contributing this. + +Mon Oct 11 17:07:46 1999 Douglas C. Schmidt + + * ace/Message_Queue.cpp (enqueue): ACE fails to compile because of + a for-loop scoping problem in the method + ACE_Message_Queue_NT::enqueue. Thanks to Christopher Kohlhoff + for reporting this. + + * ace/Activation_Queue.cpp (enqueue): Changed the + creation of the ACE_Message_Block so that it uses the sizeof + (ACE_Method_Request) to ensure the queue's flow control + mechanism works properly. Thanks to Dan Gilboa + for reporting this. + +Mon Oct 11 17:36:15 1999 Nanbor Wang + + Thanks to Wei Chiang for the following + patches. + + * ace/Thread_Manager.cpp (kill_thr): Chorus only supports + SIGTHREADKILL here. Made sure we remove the killed thread from + the managed thread list. + + * tests/Thread_Manager_Test.cpp: Changed the test to check for + cooperative cancellation even if the platform doesn't support + sending signaling to a specific thread. On Chorus, this signal + has to be SIGTHREADKILL. + +Mon Oct 11 17:35:51 1999 Nanbor Wang + + * ace/config-kcc-common.h: Added + ACE_HAS_STD_TEMPLATE_SPECIALIZATION for KCC. + +Mon Oct 11 12:05:31 1999 Wei Chiang + + * ace/Signal.cpp (ACE_Sig_Action ctors), + ace/Select_Reactor_T.cpp (register_handler,remove_handler): + disabled signal-related operations on Chorus. + +Mon Oct 11 10:15:28 1999 David L. Levine + + * bin/check_build_logs: suppress some Purify warnings. Purify + says that it's ignoring the problem; so will we. + +Mon Oct 11 10:09:56 1999 David L. Levine + + * ACE version 5.0.6 released. + +Mon Oct 11 07:34:34 1999 Douglas C. Schmidt + + * ace/OS.h: Removed a stray '>' that was causing OS.h not to + compile. Thanks to Marvin Allen Wolfthal + for reporting this. + +Fri Oct 8 07:47:08 1999 Douglas C. Schmidt + + * ace/OS.h: Removed the word "defined" since that was breaking + SunCC 4.2. Thanks to Andy Gokhale for reporting this. + +Thu Oct 07 18:47:03 1999 Irfan Pyarali + + * ace/OS.h (ACE_NOTSUP): Added new macro. This one is similar to + ACE_NOTSUP_RETURN, except that there is no return value (similar + to ACE_GUARD and ACE_GUARD_RETURN). + + * ace/Message_Queue (message_length): Returns the total length on + the queue, i.e., sum of the message block lengths. + + Since manual changes to these stats might be necessary, + specially when queued message blocks change size or lengths + (without dequeuing the messages from the queue), we also provide + methods for setting these stats. + + * ace/Message_Block.i (total_length): This new method is similar + to except that it deals with the length of the + message blocks and not the size of the message blocks. It + returns the length of the message blocks, including chained + message blocks. + +Thu Oct 7 13:17:29 1999 Douglas C. Schmidt + + * ACE-INSTALL.html: Changed the word "compiler" to + "linker". Thanks to George Ball + for reporting this. + +Thu Oct 07 11:35:13 1999 Steve Huston + + * ace/streams.h: Added #include in the non-Win32 + section of the !ACE_HAS_STANDARD_CPP_LIBRARY section, for systems + like Solaris w/ SC4.2. + +Wed Oct 6 21:36:18 1999 Douglas C. Schmidt + + * ace/Log_Msg.cpp (log): Forgot to remove a stray %s. + Thanks to Kitty Krishnakumar for + reporting this. + +Wed Oct 06 16:42:56 1999 Nanbor Wang + + * examples/Reactor/Misc/Misc.dsw: + * examples/Reactor/Misc/demuxing.dsp: Added the demuxing test + project file. + + * examples/Reactor/Misc/test_demuxing.cpp: MS Windows only + supports a limited set of signals. Made sure we use them in the + examples. + +Wed Oct 06 16:20:28 1999 David L. Levine + + * tests/CDR_File_Test.cpp (run_test): when reading, ensure + that the message block has sufficient space to properly + align the 64-bit double on LynxOS and Neutrino. Thanks + to Jeff for helping to track this down, and for Carlos + for providing the fix. + +Wed Oct 6 15:40:11 1999 Vishal Kachroo + + * ace/OS.i : Initialised the qos_len variable to sizeof (QOS) + within the ioctl () method for ACE_SIO_GET_QOS. + + * ACE_wrappers/examples/QOS/client.cpp: + * ACE_wrappers/examples/QOS/server.cpp: Added a test for the + ACE_SIO_GET_QOS io control code. The Sending and Receiving + QOS flowspec parameters are extracted and printed for both the + sender and receiver using this control code. + +Wed Oct 6 08:36:17 1999 Douglas C. Schmidt + + * ace/OS.h: Changed + + # if defined (__SUNPRO_CC < 0x500) + + to this + + # if defined (__SUNPRO_CC < 0x500) || ((__SUNPRO_CC == 0x500 && > __SUNPRO_CC_COMPAT == 4)) + + to work around compilation problems with Sun CC 5.0 when used in + Sun CC 4 compatibilty mode. Thanks to Erik Koerber + for this fix. + + * ace/Log_Msg.cpp (log): Added support for a %m option that + behaves like strerror() rather than perror(). Thanks to Kitty + Krishnakumar for this feature. + + * ace/OS.i (event_wait): We need to put the call to + ACE_OS::cond_wait() in a loop to guard against spurious wakeups. + Thanks to Sergey Nemanov and Vladimir + Kondratiev for reporting this + and suggesting a fix. + + * tests/Malloc_Test.cpp: Don't run the Malloc_Test on LynxOS. + + * tests/MM_Shared_Memory_Test.cpp: Fixed the code so that it'll + compile correctly on platforms that lack fork(), such as + VxWorks. Thanks to David Levine for reporting this. + +Tue Oct 5 16:17:57 1999 Douglas C. Schmidt + + * tests/MM_Shared_Memory_Test.cpp (spawn): Make sure to + delete the synchronizer in both the parent and the child + processes since otherwise we get a memory leak! Thanks to David + Levine for pointing this out. + + * tests/Task_Test.cpp (main): Make sure to delete the thread hook + before exiting the process to avoid a memory leak. Thanks to + David Levine for pointing this out. + +Tue Oct 5 15:04:03 1999 Douglas C. Schmidt + + * ace/[Active_|Hash_]Map_Manager: Modified these classes so that the + find() methods are all "const". Thanks to Jody Hagins + for reporting this. + +Tue Oct 05 21:58:06 1999 Nanbor Wang + + * ace/config-WinCE.h: Reenabled ACE_HAS_MFC. This should be the + most portable configuration. If you insist not to use MFC at + all, define ACE_HAS_MFC=0 in your config.h file. + + * ace/OS.h: + * ace/OS.cpp (set_window): Removed the MFC specific set_window + method so we can use ACE in both MFC and non-MFC applications. + + * ace/INET_Addr.h: Applied ASYS_TEXT to several default + string literals. + + * ace/DLL.h: + * ace/DLL.cpp: Changed the type of in ctor and the open + method to ASYS_TCHAR to minimize string conversion. + + * tests/DLL_Test.cpp: Applied ASYS_TEXT to the name of the DLL + file. + +Tue Oct 5 19:01:43 1999 Jeff Parsons + + * ace/CDR_Stream.i: + Changed << for bounded (w)strings to marshal only 'length' + bytes, instead of 'bound' bytes. The previous method could + cause an access violation if the string fits near the end + of a system page, but the 'bound' extends beyond it. Thanks + to Brian Wright for reporting this + bug. + +Mon Oct 4 08:31:58 1999 Douglas C. Schmidt + + * examples/Shared_Malloc/test_persistence.cpp: Enhanced the + list_employees() method so that it'll print the contents of + ACE_Malloc<> in FIFO and LIFO order. + + * ace/Malloc[_T].{h,cpp}: Added a new iterator for ACE_Malloc<> + called ACE_Malloc_FIFO_Iterator, which prints out the + ACE_Name_Node entries in FIFO order. In addition, renamed + ACE_Malloc_Iterator to be ACE_Malloc_LIFO_Iterator because it + prints the ACE_Name_Node entries in LIFO order. Also added a + #define of ACE_Malloc_Iterator to ACE_Malloc_LIFO_Iterator to + ensure backwards compatibility. Thanks to Wenli Bai + for this enhancements. + + * tests/MM_Shared_Memory_Test.cpp: Fixed the test so that it should + work correctly for platforms that use either processes or + threads. Also, make sure to call remove() on the + ACE_Process_Semaphore so that stray semaphores aren't left + around. Thanks to David Levine for helping to track this down. + + * ace/Synch.h: Updated the documentation for the + ACE_Process_Semaphore destructor to indicate that it doesn't + remove the semaphore. Instead, you must call remove() + explicitly. Thanks to David Levine for helping to track this + down. + + * ace/Malloc_T.cpp (print_stats): Added a cast for the ACE_LOCK to + work around the fact that the print_stats() method is const. + Thanks to Jean-Marc Strauss for + reporting this. + + * ace/INET_Addr.cpp (set): Added ACE_UNUSED_ARG + so the compiler won't complain about the protocol paraemter in + parts of the code where it's not used. + + * tests/MM_Shared_Memory_Test.cpp (spawn): Added ACE_UNUSED_ARG + so the compiler won't complain about process_synchronizer in + parts of the code where it's not used. + +Sun Oct 3 12:47:35 1999 Douglas C. Schmidt + + * tests/Process_Mutex_Test.cpp (main): Renamed the confusing "server" stuff + to "parent" where appropriate. + + * tests/MM_Shared_Memory_Test.cpp: Don't call ACE_OS::exit() + in the child since this won't clean up the Object_Manager + correctly. Thanks to David Levine for reporting this. However, + we'll still have two "end" statements, but only one begin + statement, which is confusing. I'm not sure how to solve this, + but it won't break anything. + + * tests/MM_Shared_Memory_Test.cpp: Oops, only do the + acquire()/release() of the Process_Semaphore if we have fork()! + + * tests/MM_Shared_Memory_Test.cpp: Added an ACE_Process_Semaphore + so we no longer need to sleep in order to wait for the server to + be initialized. + + * tests/Process_Strategy_Test.cpp (main): Switched the processes + in which the client and server are run so that the server is now + run in the parent and the client is run in the child. This made + it possible to remove the ACE_OS::sleep(1) call because the + acceptor is created before the fork, so the client should always + be able to connect to the server, even if the server isn't + scheduled to run again before the client. + + * tests/Process_Mutex_Test.cpp, + * tests/SV_Shared_Memory_Test.cpp: + Fixed some improper style problems with these tests. + +Sun Oct 03 10:34:19 1999 David L. Levine + + * tests/SV_Shared_Memory_Test.cpp (main): only delete + parent_mutex and parent_synch in the parent, to prevent + double deletion by the child. [Bug 91] + +Sun Oct 03 10:21:15 1999 David L. Levine + + * tests/SV_Shared_Memory_Test.cpp: create parent_mutex and + parent_synch before forking, to avoid race condition between + their creation in the parent and use in the child. This + allowed us to remove the sleep (1) in the child. [Bug 91] + +Sun Oct 03 10:17:21 1999 David L. Levine + + * ace/OS.cpp (ACE_Thread_Adapter::invoke): added casts of + func (to ACE_THR_FUNC) and its return value (to void *) + so that this function will compile for VxWorks and pSOS. + +Sat Oct 2 18:54:38 1999 Vishal Kachroo + + * ace/SOCK_Dgram_Mcast.{cpp,h}: Added ACE_Protocol_info as a + parameter to the QoS enabled private method subscribe_ifs. This + allows the use of ACE_Protocol_Info->iAddressFamily in the call + to join_leaf (). Thanks to Vidya Narayanan + for pointing this out. + +Sat Oct 2 16:20:33 1999 Nanbor Wang + + * ace/config-kcc-common.h: The macro __KCC_VERSION was not + available in 3.3e so we switched to check the existence of this + macro to decide the availability of auto_ptr::reset(). Thanks + to Ossama for noticing this bug. + +Sat Oct 2 16:10:26 1999 Ossama Othman + + * ace/config-linux-common.h: + + Linux (glibc 2.x) has lseek64() so define ACE_HAS_LLSEEK. + + * ace/OS.i (llseek): + + Removed external declaration for llseek() on Linux. Linux uses + lseek64(), not llseek(). Updated macro checks to use lseek64() + for Linux. [Bug 276] + +Sat Oct 2 16:01:50 1999 Douglas C. Schmidt + + * ace/INET_Addr.h (ACE_INET_Addr): Removed an unnecessary "protocol" + string. Thanks to Jeff and Ossama for reporting this. + +Sat Oct 2 12:50:43 1999 Douglas C. Schmidt + + * ace/INET_Addr: Previous, it was not possible to specify the + proto argument in the ACE_INET_Addr constructor because it was + hard-coded to "tcp". Now, this can be passed as a parameter. + Thanks to Jaymes Galvin for this suggestion. + +Fri Oct 1 14:44:12 1999 Vishal Kachroo + + * ace/OS.h : Added the Winsock2 GQOS related #defines to this + file. The #defines are limited to the ones used in the ACE QOS + example. + + * ACE_wrappers/examples/QOS/server.cpp: + * ACE_wrappers/examples/QOS/client.cpp: + * ACE_wrappers/examples/QOS/QosEvent.h: + Changed the QOS example to use the ACE flags instead of Windows + flags. Removed the #defines from the example and moved them to + OS.h + +Fri Oct 1 13:14:17 1999 Douglas C. Schmidt + + * ChangeLog: Added more Borland support. Thanks to + Christopher Kohlhoff for this. + +Fri Oct 01 13:05:24 1999 David L. Levine + + * Makefile: move instructions for creating kits down in + the file, and added note that they're intended for + ACE+TAO developers and maintainers, only. Thanks to + Rick Hess for pointing out that + that wasn't clear. + +Fri Oct 1 08:23:36 1999 Joe Hoffert + + * ace/ATM_Connector.{h,i}: Added add_leaf method and functionality. + +Thu Sep 30 16:55:41 1999 Douglas C. Schmidt + + * tests/Task_Test.cpp (main): Added a short example illustrating + how the new ACE_Thread_Hook mechanism works. + + * ace/OS.cpp: Added new support for the thread_hook to + ACE_OS_Object_Manager. + + * ace/OS.cpp (invoke): Added support for a virtual "start_hook()" + method in a new ACE_Thread_Hook class. This makes it possible + for users to subclass ACE_Thread_Hook perform initialization + operations before the thread entry point method is called back. + Thanks to Chris Hafey for this + suggestion. + +Thu Sep 30 20:40:42 1999 Marina Spivak + + * bin/run_all_list.pm: + Added TAO/examples/Load_Balancing demo to the list of daily + executed tests. + +Thu Sep 30 11:36:20 1999 Charles Frasch + + * include/makeinclude/wrapper_macros.GNU: in checks for + ACE_HAS_GNUG_PRE_2_8, use $(notdir $(CXX)) to properly + handle case where CXX has a directory part. + +Thu Sep 30 11:13:14 1999 Douglas C. Schmidt + + * ace/Pipe.cpp (open): Don't use socketpair() for pipes on LynxOS + since this doesn't work for some reason. Instead, use the + socket emulation. Thanks to David Levine for reporting this. + +Thu Sep 30 10:30:00 1999 Kirthika Parameswraan + + * ace/README: Added documentation for: + ACE_HAS_BROEN_EXTENDED_TEMPLATES Thanks to Fritz Bosch + for suggesting this. + +Thu Sep 30 10:07:38 1999 Douglas C. Schmidt + + * ace/Strategies_T.h: Added + + #define ACE_Refcounted_Hash_Recyclable ARHR + + to work around broken linkers that can't handle long + symbol names. Thanks to Fritz Bosch + for this suggestion. + +Wed Sep 29 20:58:45 1999 Darrell Brunsch + + * ace/config-win32.h: + * ace/config-win32-common.h: + Winsock2.h wasn't being included before my checks of the + winsock version, so I moved it to -common.h instead. + +Wed Sep 29 16:40:45 1999 Nanbor Wang + + The following changes fix the Service_Configurator on Windows + CE. Thanks very much to Kirthika for her help on making this + work. + + * tests/WinCE/DLL_Test.dsp: + * tests/WinCE/ce_tests.dsw: Added the DLL_Test project. + + * ace/ace_ce_dll.dsp: Added DLL.cpp into the project. + + * ace/Service_Types.i (name): + * ace/Service_Object.i (name): Changed to use ACE::strnew to + duplicate the name string. + + * ace/Parse_Node.cpp: Changed all the ACE_*_Node classes to make + copies of all string variables and release when they get + destructed. This is necessary because on Windows CE, the + strings passed into these classes are very short-lived (we use + ASCII to UNICODE conversion macros which make temporary copies + only.) The change shouldn't affect the performance of ACE since + parsing the svc.conf entries should never be in the critical + path. + + * ace/Parse_Node.h: The comments for in + ACE_Location_Node is completely outdated. It now specifies + whether the Service_Object generated by this Location_Node + should be removed or not when it is no longer in use, not the + . + + * ace/OS.i (access): Added a temporary implementation for CE here. + ACE::ldfind check the file accessibility using this function. + Currently, we hard-code the method to check for read-access only + (i.e., the argument is not used) which needs to be + fixed. + + * ace/OS.cpp (fopen): Check for invalid handle and return NULL if + handle is invalid on CE. Otherwise, CE programs get totally + confused. + + * ace/Malloc.cpp (dump): I added some more operations in the dump + methods but forgot to make them UNICODE friendly. + + * ace/config-WinCE.h: Added the macro definition for + ACE_DEFAULT_LD_SEARCH_PATH since CE doesn't support environment + variables at all and we need to hard-code the search path on + CE. + + * ace/README: Added documentation for ACE_DEFAULT_LD_SEARCH_PATH. + + * ace/ACE.cpp (ldfind): When the macro ACE_DEFAULT_LD_SEARCH_PATH is + defined, we should use the hard-coded search path instead of + trying to use getenv to acquire the search path. + + * examples/Service_Configurator/Misc/Timer_Service.cpp: + * examples/Service_Configurator/Misc/Timer_Service.h: Made the + services UNICODE and CE friendly by applying ASYS_TEXT and using + ASYS_TCHAR liberally. + + * examples/Service_Configurator/Misc/README: Added instructions on + how to run the example on Windows CE. + +Tue Sep 28 15:46:23 1999 Darrell Brunsch + + * ace/OS.i: Fixed some GQOS stuff for the older versions of + WinSock 2. + + * ace/config-win32.h: Uses a better detection technique to + figure out whether we are compiling with WinSock 2's newer + headers or not. + +Tue Sep 28 14:48:26 1999 Irfan Pyarali + + * ace/WFMO_Reactor.cpp (handler): Implemented previously + unimplemented function. + +Tue Sep 28 15:02:33 1999 Vishal Kachroo + + * ace/OS.i (ioctl): Added the #if def ACE_HAS_WINSOCK2_GQOS for + the extra fields in struct _flowspec. + +Mon Sep 27 19:16:34 1999 Douglas C. Schmidt + + * ace/OS.i (timezone): SunOS 4 needs to use gettimeofday() to find + the current timezone. Thanks to Kamen Penev + for reporting this fix. + +Mon Sep 27 19:30:54 1999 Carlos O'Ryan + + * THANKS: + Added Dennis to the hall of fame list. + +Mon Sep 27 17:12:51 1999 Vishal Kachroo + + * ace/OS.i: + * ace/OS.h: + Added an overloaded ioctl () that is used when the io control + code is one of SIO_SET_QOS or SIO_GET_QOS. Thanks to Vidya + Narayanan for help with this + feature. + + * ACE_wrappers/examples/QOS/server.cpp: + * ACE_wrappers/examples/QOS/client.cpp: + Made changes to the usage of ioctl () in the above files to + reflect the corresponding changes in ACE. + +Mon Sep 27 13:11:02 1999 Douglas C. Schmidt + + * ace/config-sunos5.5.h: Wrap the define statement in a + conditional that prevents declaration of #define + ACE_HAS_STL_QUEUE_CONFLICT for gcc 2.95. We don't know if this + is a problem in newer versions of Solaris but this will get rid + of it for 5.5.1. Thanks to Siegurd Weber + for this fix. + +Mon Sep 27 16:56:10 1999 Carlos O'Ryan + + * ace/OS.cpp: + ACE_OS::cond_init() has two completely separate versions, i + forgot to fix the NT version too, thanks to Vishal for pointing + this out. + +Mon Sep 27 16:05:35 1999 Darrell Brunsch + + * tests/Object_Manager_Test.dsp: + * tests/run_tests.bat: + * tests/tests.dsw: + * tests/version_tests/Object_Manager_Test.dsp: + * tests/version_tests/version_tests.dsw: + Added Object_Manager_Test support on Win32 and MSVC. + +Mon Sep 27 15:23:47 1999 Carlos O'Ryan + + * ace/OS.h: + * ace/OS.i: + Fixed overloading problems for cond_init() under LynxOS and + Chorus, thanks to John K. Black + for reporting the problem and providing a fix. + This fixes [BUGID:342] + +Mon Sep 27 13:11:02 1999 Douglas C. Schmidt + + * ace/SString.h: Added the default value for the ACE_CString + method set (const char *, int = 1). We had removed the default + values from both the set() methods in order to remove an + ambiguity. However, it appears that it's ok to give just this + method a default value. Moreover, this prevents existing code + from breaking. Thanks to Giga Giguashvili + and Ivan Murthy + for reporting this. + +Sat Sep 25 17:09:57 1999 Carlos O'Ryan + + * ACE version 5.0.5 released. + +Fri Sep 24 17:20:41 1999 Nanbor Wang + + * ace/config-kcc-common.h: KCC does support auto_ptr::reset + after 3.4. Made sure we don't define ACE_AUTO_PTR_LACKS_RESET + for newer version of KCC. Thanks to Ossama for reporting the + problem. + +Fri Sep 24 08:59:13 1999 Douglas C. Schmidt + + * ace/config-sunos4-g++.h: Added ACE_HAS_DIRENT. + Thanks to Kamen Penev for reporting this. + + * tests/Handle_Set_Test.cpp (test_boundaries): Added some casts + and parens so that the code will compile with MSVC++ 5.0. + Thanks to Carlos O'Ryan for reporting this. + + * examples/Connection/blocking/SPIPE-{acceptor,connector}.cpp: + Reformatted some of the code. + +Fri Sep 24 08:27:28 1999 David L. Levine + + * ace/OS.*,Synch.cpp: reverted changes of: + + Thu Sep 23 11:13:38 1999 Wei Chiang + + because Bug 342 proposes a more general fix. + +Thu Sep 23 19:02:47 1999 Vishal Kachroo + + * examples/QOS/server.cpp (main): + * examples/QOS/server.cpp (main): + + Removed the instantiation of ACE_OS_Object_Manager from + the above files. This is done automagically in ACE. + + * examples/QOS/Sender_QOS_Event_Handler.h: + Fixed a warning regarding the #def of MY_DEFPORT. + +Thu Sep 23 14:12:58 1999 Carlos O'Ryan + + * bin/auto_compile: + It was reporting success even when things failed. + +Thu Sep 23 11:13:38 1999 Wei Chiang + + * ace/OS.*,Synch.cpp: Chorus compiler (g++) seems to be + confused by "int" and "int&" in overloaded operations. + A dummy variables to full Chorus compiler is added to + cond_init (ACE_cond_t*, ACE_condattr_t&, LPCTSTR void*). + + * include/makeinclude/rules.bin.GNU,platform_chorus.GNU: + updated to support linking of TAO executables for Chorus. + +Wed Sep 22 19:30:49 1999 Randall Sharo + + * ace/OS.i (sema_wait): on VxWorks, update tv to return + the wait time. [Bug 339] + + * ace/Synch.h (ACE_Semaphore::acquire): updated comment + to show that the absolute acquisition time is returned, + not the elapsed time while waiting. + +Wed Sep 22 16:59:19 1999 Nanbor Wang + + * ace/config-win32-common.h: Added definition of + ACE_AUTO_PTR_LACKS_RESET when ACE_HAS_STANDARD_CPP_LIBRARY is + defined. Thanks to Ossama for the quick hint. + +Wed Sep 22 13:05:55 1999 Jim Rogers + + * ace/Codeset_IBM1047.cpp: added #include "ace/inc_user_config.h" + at the beginning, to properly pick up the ACE_MVS #define + on MVS. + +Wed Sep 22 11:20:39 1999 David L. Levine + + * ace/Basic_Types.h: use u_long for ptr_arith_t, even + with 64-bit ints, with Sun CC. For unknown reasons, + Sun CC 5.0 won't allow a reintepret cast of a 64-bit + pointer to a 64-bit int (with -xtarget=ultra -xarch=v9a). + Thanks to Giga Giguashvili for + reporting this. + +1999-09-21 James CE Johnson + + * docs/tutorials/Makefile + * docs/tutorials/???/* + Added a number of notes about proper usage of THR_NEW_LWP and + THR_DETACHED. Rebuilt all of the .html and .shar files. Probably + touched too many along the way but better safe than sorry. + +Tue Sep 21 21:56:10 1999 David L. Levine + + * docs/ACE-subsets.html: replaced absolute link to + ../ACE-INSTALL.html#repo with a relative link. And, + added "typically" to the 25 percent size reduction figure. + +Tue Sep 21 16:49:36 1999 Douglas C. Schmidt + + * docs/ACE-subsets.html,ACE-INSTALL.html: Updated the document + to point to the -frepo discussion. Thanks to Timothy Canham + for motivating this. + +Tue Sep 21 16:07:26 1999 David L. Levine + + * docs/ACE-subsets.html: fixed size comparison chart; the + For TAO entry was missing for SunOS 5.7/egcs 2.91.60. + Thanks to Timothy Canham + for reporting this. + +Tue Sep 21 15:34:16 1999 Douglas C. Schmidt + + * ace/Service_Config.cpp (process_directives_i): Added a fix + so that the Service_Config allows one level of reentrancy. + Thanks to Jonathan Reis for + suggesting this. + +Tue Sep 21 11:35:57 1999 Douglas C. Schmidt + + * examples/Threads/tss1.cpp (main): Need to rearrange where the + explicit template instantiations are to make certain compilers + happy. Thanks to Jeffrey Franks for + reporting the problem. + + * tests/Makefile.bor: Updated ACE tests makefile to build (almost) + all of the tests. Thanks to Christopher Kohlhoff + for this fix. + + * examples/Reactor/Misc/test_signals_2.cpp (main), + * examples/Reactor/WFMO_Reactor/test_talker.cpp (STDIN_Handler): + Preemptively fixed a couple more potential problems that might + trigger the type of problem reported in the next entry below. + +Tue Sep 21 11:41:33 1999 Ossama Othman + + * apps/Gateway/Gateway/Event_Channel.cpp (open): + Changed cast style to make gcc 2.95.1 happy. Thanks to Jeffrey + Franks for reporting the problems. + +Tue Sep 21 11:25:32 1999 Carlos O'Ryan + + * bin/auto_compile: + Print the most recent ChangeLog entries in the log file. + Report successful builds by default. + Reformat email to make Darrell happier, btw, he made most of + these suggestions. + +Tue Sep 21 11:13:21 1999 Steve Huston + + * ace/streams.h: Added includes/using to pick up strstream for + istrstream, ostrstream classes when ACE_HAS_STD_CPP_LIBRARY is set. + +Tue Sep 21 09:38:20 1999 David L. Levine + + * tests/run_tests.lst: disabled Signal_Test. [Bug 309] + +Tue Sep 21 08:33:21 1999 David L. Levine + + * ACE-INSTALL.html: use shared_libs=1, not shared_libs_only=1, + to build shared libs on VxWorks. That avoids missing libACE.a, + for example, when linking other libraries. Thanks to + Uwe Landrock for reporting this. + +Mon Sep 20 10:52:37 1999 Douglas C. Schmidt + + * ACE-INSTALL.html: Clarified that the --unix flag must be given for + Cygwin tools on Vxworks and NT. Thanks to Uwe Landrock + for reporting this. + +Mon Sep 20 10:34:51 1999 Steve Huston + + * ACE-INSTALL.html: Fixed broken link to Riverace's HP-UX info. + Thanks to Doug for finding this. + +Sun Sep 19 12:48:31 1999 Douglas C. Schmidt + + * tests/Signal_Test.cpp: Only send outselves a signal if we're + running the signal handler in a separate thread. + +Sun Sep 19 10:39:30 1999 Douglas C. Schmidt + + * tests/Signal_Test.cpp: Changed the type of shut_down indicator from + ACE_Atomic_Op<> to sig_atomic_t. This prevents some nasty + deadlocks. + + * tests/run_tests.lst: Reenabled Signal_Test so we can see if it's + still working. + + * tests/Signal_Test.cpp: Changed the worker_child() function so that + just before its thread exits, it will sent its process a signal + to the signal handling thread to dislodge it if it hasn't + shutdown on its own accord yet. Thanks to David Levine for + reporting this. This fixes [BUGID:309]. + + * ACE/Handle_Set.h: Updated the documentation to point out that it's + the *caller's* responsibility to ensure handles aren't + added/cleared from the set if their values are larger than + ACE_DEFAULT_SELECT_REACTOR_SIZE. This behavior is necessary to + ensure efficiency. + + * tests/Handle_Set_Test.cpp (test_boundaries): Fixed the test so + that it will correctly ignore any handle values >= + ACE_DEFAULT_SELECT_REACTOR_SIZE. Thanks to David Levine for + reporting this. This fixes [BUGID:315]. + +Sat Sep 18 18:49:31 1999 Jeff Parsons + + * ace/config-win32-borland.h: + Undefined ACE_HAS_BROKEN_IMPLICIT_CONST_CAST as + suggested by Christopher Kohlhoff . + +Sat Sep 18 17:31:52 1999 Douglas C. Schmidt + + * examples/QOS: Improved the conformance to ACE programming + guidelines a bit. + + * ace/Message_Block.cpp: Whenever a ACE_Message_Block accepts a + ACE_Data_Block that was produced by someone else, it should + verify that the allocator is non-NULL and if it is, then it + should allocate the ACE_ALLOCATOR_RETURN on it. Thanks to + Pierre Grondin for reporting + this. + + * docs/tutorials/006: Fixed the activate() method so that it uses + THR_DETACHED. Thanks to Shafiek Savahl + for reporting this. + +Sat Sep 18 16:17:34 1999 Carlos O'Ryan + + * bin/auto_compile: + The messages include the build name in the subject line. Thanks + to Darrell for suggesting this idea. + +Sat Sep 18 12:00:28 1999 Douglas C. Schmidt + + * ace/Message_Block.h: Changed all the ACE_Message_Block constructors + so that the priority parameter defaults to + ACE_DEFAULT_MESSAGE_BLOCK_PRIORITY, rather than 0. Thanks to + Detlef Becker for this suggestion. + + * ace/OS.h: Added a new macro called + ACE_DEFAULT_MESSAGE_BLOCK_PRIORITY, which defaults to 0 but + which can be overridden in a config.h file to a different value + so it's possible to transparently choose default priorities that + are > 0. Thanks to Detlef Becker + for this suggestion. + +Fri Sep 17 19:49:15 1999 Kirthika Parameswaran + + * tests/Hash_Map_Manager_Test.cpp: Repositioned template + instantiations and static variables to make the debug=0 build + happy with SunCC5.0. + +Fri Sep 17 15:34:46 1999 Nanbor Wang + + * ace/Malloc.cpp (dump): + * ace/Malloc_T.cpp (dump): Enriched various dump methods a bit. + +Thu Sep 16 17:53:57 CDT 1999 Loren Rittle + + * bin/update-ace+tao.sh: Added force option. + +Thu Sep 16 17:43:02 CDT 1999 Loren Rittle + + * bin/update-ace+tao.sh: Improve portability. + +Thu Sep 16 11:08:45 1999 Ossama Othman + + * ace/Makefile: + * tests/Makefile: + + Updated dependencies. + +Wed Sep 15 21:42:08 1999 Carlos O'Ryan + + * ace/OS.h: + Removed extra "typedef" in the declaration of the + ACE_Protocol_Info structure, it was causing a large number of + warnings in several platforms. + +Wed Sep 15 15:08:33 1999 Ossama Othman + + * bin/run_all_list.pm: + + Run the newly added TAO/tests/ORB_init/run_test.pl script when + executing the ORB_init test. + +Wed Sep 15 14:49:50 1999 Balachandran Natarajan + + * ace/Hash_Map_With_Allocator_T.h: + * ace/Hash_Map_With_Allocator_T.i: Added a method unbind () which + unbinds an entry by only taking a key. + +Wed Sep 15 13:19:36 1999 Nanbor Wang + + * ace/Service_Config.cpp (process_directive): Added ace_yyrestart + to make sure the service config parser has a valid buffer to + work on. Thanks to Lothar Werzinger + for reporting this. + +Wed Sep 15 10:50:21 1999 James Hu + + * ace/TP_Reactor.{cpp,h,i} (mask_ops): Fixed a problem where + cancel_wakeup would fail. Since an event handler is suspended + for the duration of the up-call, the wait_mask_ was being + over-written by the suspend_mask_ when the event handler was + resumed. This fixes the problem by extending TP_Reactor with + its own implementations of mask_ops that operate on both + wait_mask_ and suspend_mask_. + +Wed Sep 15 10:14:21 1999 Ossama Othman + + * docs/exceptions.html: + + Corrected some ACE_TRY_THROW examples. The exception being + thrown must have a parameter list, even if it is empty + (e.g.: ACE_TRY_THROW (CORBA::BAD_PARAM ());) + +Tue Sep 14 22:10:24 1999 Kristopher Johnson + + * ace/Process_Manager.cpp (wait): changed array index from + i to idx. Thanks to Dave Madden for confirming this fix. + + Reverted this change: + Tue Sep 14 16:01:04 1999 Christopher Kohlhoff + because it's no longer necessary. + +Tue Sep 14 21:00:45 1999 Vishal Kachroo + + * ace/OS.h: Added a typedef for ACE_Protocol_Info for non-Win32 + platforms. Defined it as a struct (with limited fields) instead + of u_long because applications using ACE_Protocol_Info on + non-Win32 platforms expect this to be a structure instead of a + u_long. + + * ACE_wrappers/examples/QOS/Makefile: Added this for the test to + compile on non-Win32 platforms. + + * ACE_wrappers/examples/QOS/server.cpp: + * ACE_wrappers/examples/QOS/client.cpp: + * ACE_wrappers/examples/QOS/QosEvent.h: + * ACE_wrappers/examples/QOS/Sender_QOS_Event_Handler.cpp: + + Removed the last remains of win32isms from the test. The QoS + test now compiles clean on non-Win32 platforms. + +Tue Sep 14 17:49:33 1999 Luther J Baker + + * ace/Arg_Shifter.cpp (get_the_parameter): removed an errant + return 0; + +Tue Sep 14 16:01:04 1999 Christopher Kohlhoff + + * ace/Process_Manager.cpp (wait): moved declaration of + loop index i out of the loop, because it is used outside + the scope of the loop. + +Tue Sep 14 15:03:21 1999 Ossama Othman + + * bin/run_all_list.pm: + + Added ORB_init test to the list of tests to run. + + * configure.in: + * configure: + + Do not define ACE_USE_POLL, even if system poll() works. + +Tue Sep 14 11:02:06 1999 Balachandran Natarajan + + * ace/Hash_Map_With_Allocator_T.h: + * ace/Hash_Map_With_Allocator_T.cpp:Added a find () method that + would lookup at the underlying Hash_Map_Manager_Ex to do the + find. + +Sat Sep 11 12:18:22 1999 Douglas C. Schmidt + + * ace/Pipe.cpp: Make sure to use SOCK_STREAM rather than SOCK_DGRAM + when creating a socketpair. Thanks to Dave Madden for reporting + this. + +Mon Sep 13 13:31:23 1999 Luther J Baker + + * ace/Arg_Shifter.cpp (get_the_parameter): continued -ORB parsing + fixes. Allows one simple method to return a parameter value for + defined flag is it exists. + +Mon Sep 13 11:01:24 1999 Nanbor Wang + + * examples/Shared_Malloc/test_persistence.cpp: Added comments on + the use of scanf. Thanks to Wenli Bai for + reporting the problem. + +Sun Sep 12 19:23:51 1999 Nanbor Wang + + * ACE version 5.0.4 released. + +Sat Sep 11 12:18:22 1999 Douglas C. Schmidt + + * ace/Process_Manager.cpp: Reverted the following change so that we + just add a fake "friend" to keep G++ happy... Also, fixed a + typo where we should have allocated an ACE_Managed_Process + rather than an ACE_Process. Thanks to Dave Madden for reporting + this. + + * ace/Process_Manager.cpp: Added the ACE_CLASS_IS_NAMESPACE method + to ACE_Managed_Process to make G++ happy. Also, removed the + trailing '_' since we don't need this because we've prefixed + "ACE_" already. + +Fri Sep 10 16:58:34 1999 Nanbor Wang + + * ace/Malloc_T.cpp (open,shared_malloc): Added several placement + new's if position independent malloc is enabled to avoid reading + uninitialized memory. + +Fri Sep 10 16:39:13 1999 Vishal Kachroo + + * examples/QOS/README: + * examples/QOS/server.cpp: + * examples/QOS/client.cpp: + * examples/QOS/Sender_QOS_Event_Handler.h: + * examples/QOS/Sender_QOS_Event_Handler.cpp: + + Removed the Win32-isms from the above files and used cleaner ACE + interfaces. Added a README file that describes the test. + +Fri Sep 10 16:38:51 1999 Nanbor Wang + + * tests/WinCE/*.dsp: VC 6 changed all the dsp files format. + +Fri Sep 10 11:20:47 1999 Douglas C. Schmidt + + * ace/SOCK_Acceptor.h, + ace/SOCK_Connector.h: Updated the documentation to clarify what + happens wrt blocking vs. non-blocking connects and accepts. + Thanks to Jose Rubio for motivating + this change. + +Thu Sep 9 16:27:56 1999 Douglas C. Schmidt + + * ace/Process_Manager, + ace/Process: Added some new patches from Dave Madden to obtain + greater control over the spawn() behavior. + +Fri Sep 10 14:30:17 1999 Vishal Kachroo + + * ace/SOCK_Dgram_Mcast.i: + * ace/SOCK_Dgram_Mcast.h: + + Added two send () functions using overlapped I/O to the + ACE_SOCK_Dgram_Mcast class. These simply call the parent + class functions with the same signature. The recv () functions + need not be added as there is currently no recv () function + within SOCK_Dgram_Mcast class to hide any parent class recv () + functions. + +Fri Sep 10 12:24:17 1999 Carlos O'Ryan + + * THANKS: + Added Joerg Pommnitz to the list of contributors. + +Thu Sep 9 22:48:56 1999 Darrell Brunsch + + * ace/config-hpux-10.x-hpc++.h: + * ace/config-hpux-11.x-hpc++.h: + Fixed spelling of ACE_PREPROCESSOR_ARGS to + ACE_CC_PREPROCESSOR_ARGS. + +Thu Sep 9 18:22:21 CDT 1999 Carlos O'Ryan + + * ace/Future.cpp: + HP/aCC was giving bogus warning about function without a return + statement (the function only has a throw). + +Thu Sep 09 14:56:29 1999 David L. Levine + + * ACE-INSTALL.html: we now fully support QNX Neutrino 2.0. + + * ACE-INSTALL.html: expanded repo=1 discussion. [Bug 248] + +Thu Sep 09 13:21:03 1999 Nanbor Wang + + * ace/ace_ce.dsw: + * ace/ace_ce_dll.dsp: Changed to use the project file format for + CE Toolkit for VC 6. + + * ace/config-WinCE.h: Added some macros definitons for POSIX error + codes. They are removed for Palm-size CE v2.01. This + configuration is still not working because its compilers don't + support placement new, which I don't know how to work around. + + * ace/Process_Manager.cpp (wait): Applied ASYS_TEXT macros. + + * ace/OS.cpp (init,fini): Applied ACE_TEXT macros around error + message print out. + (print_error_message): Added a WinCE specialized + implementation. + +Thu Sep 09 12:45:06 1999 David L. Levine + + * ace/config-qnx-neutrino.h: added ACE_HAS_SIGISMEMBER_BUG. + Sigset_Ops_Test passes with that. + +Thu Sep 09 12:31:51 1999 David L. Levine + + * tests/Handle_Set_Test (handle_vector[]): + limit the maximum handle in handle_vector to 31, 63, 127, and + 254 if ACE_DEFAULT_REACTOR_SIZE is less than or equal to + 32, 64, 128, and 256, respectively. [Bug 315] + +Thu Sep 9 09:39:46 1999 Kirthika Parameswaran + + * etc/purify.solaris2: Added suppression for MLK due to OS accept + call. [Bug 227] + +Thu Sep 09 09:24:29 1999 David L. Levine + + * tests/run_tests.lst: disabled Signal_Test. [Bug 309] + +Thu Sep 9 08:46:58 1999 Douglas C. Schmidt + + * tests/Lazy_Map_Manager_Test.cpp (main): ACEified this a bit + and fixed a typo for the argv argument in main(). + + * Updated the ACE-mail.html file to put the *-request addresses + first. Thanks to Lorin Hochstein for this + suggestion. + +Wed Sep 08 23:01:22 1999 Nanbor Wang + + * examples/Service_Configurator/Misc/Timer_Service.h: Added + ACE_Svc_Export specifiers. + + * examples/Service_Configurator/Misc/Misc.dsw: + * examples/Service_Configurator/Misc/Timer.dsp: Added a new + project file for the dll file. + +Wed Sep 08 22:19:47 1999 David L. Levine + + * ace/config-qnx-neutrino.h: added some magic to allow + compilation to succeed when optimization is enabled, + for x86 targets. The egcs 1.1.2 string.h #includes + x86/string.h, which has anti-social #defines for + memcmp, memcpy, and memset. Therefore, they can't be + used as C++ member functions, such as in ACE_OS. The + hack is to disable optimization just when #including + string.h. + + * include/makeinclude/platform_qnx_neutrino.GNU: default + both optimize and repo to 1. + +Wed Sep 8 17:25:07 1999 Douglas C. Schmidt + + * ace/OS.h (ACE_FACTORY_DEFINE): It shouldn't be necessary + to use ACE_dynamic_cast() or ACE_static_cast() for the + ACE_FACTORY_DEFINE macro because ACE_Service_Object's destructor + is virtual. Thanks to Carlos for pointing this out. + +Wed Sep 8 16:51:45 1999 Kirthika Parameswaran + + * ace/Acceptor.cpp (handle_close): Removed a unnecessary check + for which was causing UMR to occur. + +Wed Sep 08 16:48:55 1999 David L. Levine + + * include/makeinclude/wrapper_macros.gnu (purify): moved + -ignore-signals option to tests/Makefile, because that's + where it's needed. + + * tests/Makefile (purify): added SIGHUP and SIGTERM to + -ignore-signals, to prevent warnings from Signal_Test. + [Bug 309] + +Wed Sep 8 15:58:07 1999 Douglas C. Schmidt + + * tests/Log_Msg_Test.cpp (test_ostream): Make sure to add 1 + to the buffer we allocate dynamically so we can put a NUL at the + end of it! Thanks to David Levine for reporting this. [Bug 312] + + * examples/Service_Configurator/Misc/main.cpp (main): Changed the + test of the -f Service Configurator option so that it links two + different svc.conf files to avoid reentrancy problems. + + * examples/Service_Configurator/Misc/svc.conf: Revised this + svc.conf file (and the application) to illustrate the use of + both static *and* dynamic service. Thanks to Amir Bahmanyari + for motivating this. + +Wed Sep 8 14:05:00 1999 Kirthika Parameswaran + + * ace/Log_Msg.cpp: Shifted the instantiations to the top to keep + SunCC5.0 debug=0 build happy. + + * tests/Cached_Accept_Conn_Test.cpp: Repositioned global + declarations to ward off compilation errors on HP-UX. + +Wed Sep 8 13:13:18 1999 Douglas C. Schmidt + + * ace/Process.h (ACE_Process): Made the spawn() method virtual + so code can be executed just before and/or after the actual + fork(). Thanks to Dave Madden for this fix. + +Tue Sep 07 19:55:52 1999 Irfan Pyarali + + * ace/Map_Manager.h (ACE_Map_Manager): The old map manager (the + one before the changes made to support the active map manager) + used to allow deletion of entries from the map during iteration + (note that this feature was accidental since typically changes + to container invalidates the iterators). The new design did not + support this "feature". However, some users had come to depend + on this feature. + + The solution was to delay the movement of freed slots from the + occupied list to the free list until we run out of free slots in + the free list when binding new entries into the map. However, + this change requires additional state in each entry that keeps + track of whether this entry has been freed. Also, the time + required for binding new entries is less predictable since the + bind may require moving of freed slots from the occupied list to + the free list because of the initial lazy unbind. + + Changes were also required to the Active_Map_Manager since it + directly depends on the internals of the Map_Manager. + + Since this lazy feature is not required in the majority of cases + and results in increased memory consumption, this feature is + only support if ACE_HAS_LAZY_MAP_MANAGER is defined. + + A new test Lazy_Map_Manager_Test.cpp was added to check the new + changes. + + Thanks for Dr. Schmidt for helping with this solution and to + Murphy Ivan for pointing out this + problem. + + Bug fixed: id 228. + +Tue Sep 7 15:19:33 1999 Douglas C. Schmidt + + * tests/Log_Msg_Test.cpp (test_ostream): NUL-terminated the buffer + to avoid an array bounds overflow! Thanks to David Levine for + reporting this. + +Tue Sep 7 12:38:37 1999 Darrell Brunsch + + * tests/Reactor_Timer_Test.cpp: Purify was showing an UMR in + test_registering_one_handler(). This was because Time_Handler + didn't have a constructor that initialized its timer_id_ member + and it wasn't being set in this method (like the others). I + added a default constructor to Time_Handler. [Bug 249] + +Tue Sep 7 08:04:41 1999 Douglas C. Schmidt + + * ace/OS.i (isatty): Fixed this code so that it doesn't use + osf_handle() anymore on NT, but instead just casts the + ACE_HANDLE to an int. Thanks to Mark Winrock + for suggesting this fix and + testing it out. + + * tests/run_tests.lst: Added Signal_Test. + +1999-09-07 Douglas C. Schmidt + + * tests/Signal_Test.cpp (main): Fixed the test so that it won't + try to run the "synchronous signal handler in a separate thread" + on Linux because Linux threads are non-standard wrt signals. + +Mon Sep 6 21:19:27 1999 Douglas C. Schmidt + + * tests/Signal_Test.cpp (run_test): Added an ACE_UNUSED_ARG + for the synchronous_signal_handler pointer-to-function for the + case where ACE_HAS_THREADS is disabled. Otherwise, we get a + warning. + +Mon Sep 6 18:47:18 1999 Darrell Brunsch + + * ace/Process_Manager.h: Moved handle_signal outside of a !defined + ACE_WIN32 block and moved handle_input inside of it, and this + fixes some errors on MSVC. + +Mon Sep 6 14:19:14 1999 Douglas C. Schmidt + + * tests/Reactor_Notify_Test.cpp (main): Added a hyphen to + the ACE_DEBUG printout "with timeout =" so that it says "with + time-out =" to avoid confusing the run_tests.sh script! Thanks + to David Levine for reporting this. + + * ace/Process_Manager.cpp: Integrated more patches from + Dave Madden so that the correct + register_handler() method is used on Win32. + +Mon Sep 06 15:05:17 1999 David L. Levine + + * ace/Makefile: moved ACELIB setting (to null) to before include + of rules.lib.GNU. That way, rules.lib.GNU can use the value of + $(ACELIB) to determine whether the ACE library object files + should be linked into the library, with repo=1. [Bug 248] + + * include/makeinclude/rules.lib.GNU: with repo=1 when building + static libs, except for libACE, include all of the ACE lib's + object files. The prevents multiple instantiations, by GNU + repo, of templates that are used in the ACE library. See the + gcc info pages, Template Instantiation node, for more information. + [Bug 248] + +Mon Sep 6 08:45:31 1999 Douglas C. Schmidt + + * examples/Reactor/WFMO_Reactor: Cleaned up some of the coding in + the examples. + + * ace/Profile_Timer.cpp: Reformatted the code a bit. + + * examples/Threads/process_manager.cpp (main): Fixed some warnings + and errors. Thanks to David for reporting this. + + * ace/OS.i: Fixed ACE_UNUSED_ARG(options) to be + ACE_UNUSED_ARG(wait_options). Thanks to David's build logs for + reporting this. + + * tests/Signal_Test.cpp: Changed the types of parameters passed + to run_test() from int to long so that we can safely cast them + to and from void *'s. Thanks to David Levine for pointing this + out. + + * ace/Process_Manager.cpp (notify_proc_handler): Removed + the now unused parameter h. Thanks to David for pointing this + out. + +Mon Sep 06 07:25:01 1999 David L. Levine + + * ace/OS.h: added ACE_Export to ACE_OS_Exit_Info class + declaration. It shouldn't be necessary, but + Dmitry Goldshtain reports that + Builder 4 needs it. + +Mon Sep 06 03:31:34 1999 Nanbor Wang + + * tests/Signal_Test.cpp (run_test): Removed a redundant use of + ACE_UNUSED_ARG (synchronous_signal_handler). Thanks to KCC 3.3e + for pointing this out. + +Mon Sep 6 01:03:03 1999 Douglas C. Schmidt + + * examples/Threads/Makefile (BIN): Added process_manager.cpp + back into the list of programs that get built automagically. + + * ace/Process_Manager: Added some new patches from Dave Madden + that continue to improve the + ACE_Process_Manager and make it portable between NT and UNIX. + + * examples/Threads: Readded process_manager.cpp now that + Dave Madden has updated it. + +Sun Sep 05 23:52:16 1999 Nanbor Wang + + * ace/OS.h (WIFEXITED,WEXITSTATUS): On platforms that do not + define these macros, we should always assume the child process + exit properly because the return status does not tell us how the + process exited. Likewise, the WEXITSTATUS macro should simply + return the status we got from ACE_OS::wait because it only + contains the exit status of child process. + +Sun Sep 5 23:40:25 1999 Douglas C. Schmidt + + * examples/QOS: Continued to improve the coding style so it'll + look like normal "ACE" code. + +Sun Sep 05 21:32:40 1999 David L. Levine + + * ace/Synch.cpp: removed unnecessary #include of ace/Object_Manager.h. + +1999-09-05 Vishal Kachroo + + Made the receiver of QOS test portable by removing + Win32-isms from it. Files modified : + + * examples/QOS/QosEvent.h: + * examples/QOS/server.cpp: + +Sun Sep 5 13:40:18 1999 Michael Kircher + + * ace/ACE.cpp: Made the status code to be of type + ACE_exitcode instead of int. This is necessary + because of the change on waitpid (). + +Sun Sep 5 10:59:18 1999 Douglas C. Schmidt + + * ace/Process.i (wait): Removed the ACE_static_cast() Michael + had added recently because the change below makes it + unnecessary. + + * ace/OS.h (ACE_OS): Modified the 3-arg wait() and the waitpid() + methods to take an ACE_exitcode* rather than int* so this will + work on Win32. + + * ace/Log_Msg.cpp: Added a new explicit template instantiation + for template class + + ACE_Guard >; + + to fix compiler errors that showed up with EGCS. + + * tests/Signal_Test.cpp (run_test): Added ACE_UNUSED_ARG macros + for several symbols that aren't used when the test is compiled + single threaded. + +Sat Sep 05 02:05:00 1999 Michael Kircher + + * ace/OS.cpp: Fixed a missing "#else". + + * ace/Process.i, + ace/Process_Manager.h, + ace/Process_Manager.cpp: + Fixed an "int" versus "ACE_exitcode" conversion + problem. + +Sat Sep 4 23:37:29 1999 Douglas C. Schmidt + + * ace/config-win32-common.h: Missing a '&&' that was causing + problems on Win32. Thanks to Michael Kircher + for reporting this. + +Sat Sep 04 20:24:32 1999 David L. Levine + + * ace/Handle_Gobbler.i (close_remaining_handles,free_handles): + moved the function definitions ahead of their first use in + the file. + +Sat Sep 04 20:17:49 1999 David L. Levine + + * ace/Pipe.cpp (open): added ACE_UNUSED_ARG (buffer_size) + for all platforms that #define ACE_LACKS_SOCKET_BUFSIZ. + +Sat Sep 4 14:43:36 1999 Douglas C. Schmidt + + * tests/Signal_Test.cpp: Finished off the test so that it now + works for all the various combinations of synchronous and + asynchronous tests. Now, to make it work on Linux... + + * ace/OS.h: The use of ACE_static_cast in the ACE_FACTORY_DEFINE macro + didn't make any sense, so I've replaced it with + ACE_dynamic_cast. + + * ace/Process_Manager.*, + * ace/Process.*, + * ace/OS.h: + Created a new typedef called ACE_exitcode that factors out the + difference between Win32 and UNIX exit codes from wait() + operations. Thanks to Dave Madden for + suggesting this. + +Sat Sep 04 12:22:38 1999 David L. Levine + + * ace/OS.i (shm_open,close,filesize,ftruncate,mmap): moved + these functions up in the file so that they're defined before + being used by ACE_OS::sema_init (). + +Fri Sep 3 11:57:24 1999 Douglas C. Schmidt + + * ace/Event_Handler.h (ACE_Event_Handler): Added the new + handle_exit() method, which is called by the ACE_Process_Manager + when a process exits. Thanks to Dave Madden + for contributing this. + + * ace/Process.*, + ace/Process_Manager.*: Integrated a new round of changes from + Dave Madden that factor out most of the + remaining differences between Win32 and UNIX. + + * ace/OS.h, + * ace/config-win32-common.h: Added a #ifndef for __IBMCPP__ to + make things work for Visual Age C++. Thanks to Boris Kaminer + for reporting this. + + * ace/{ACE,OS}: Added ACE_HAS_UNICODE to conditionally compile the + strnew() definition. Thanks to Boris Kaminer + for reporting this. + + * ace: Added a new optimized ace-dll.icc file so that ACE will + build better with IBM's Visual Age C++. Thanks to Boris Kaminer + for contributing this. + + * ace/OS.h, + * ace/config-win32-common.h: Added a #ifndef for __IBMCPP__ to + make things work for Visual Age C++. Thanks to Boris Kaminer + for reporting this. + + * ace/{ACE,OS}: Added ACE_HAS_UNICODE to conditionally compile the + strnew() definition. Thanks to Boris Kaminer + for reporting this. + + * ace: Added a new optimized ace-dll.icc file so that ACE will + build better with IBM's Visual Age C++. Thanks to Boris Kaminer + for contributing this. + +1999-09-03 Vishal Kachroo + + * ace/OS.i: + * ace/OS.h: Added a new overloaded ACE_OS::ioctl () function that + takes in ACE_QoS as one of the parameters, constructs a windows + QOS from it and passes it to WSAIoctl (). This function can be + used when the I/O control code is SIO_SET_QOS. + +Fri Sep 3 14:58:51 1999 Darrell Brunsch + + * config-aix-4.x.h: + * config-hpux-10.x-hpc++.h: + * config-hpux-11.x-hpc++.h: + * config-mvs.h: + * config-win32-borland.h: + * config-win32.h: + Moved many of the preprocessor information for various + platforms from TAO_IDL to here (in ACE_CC_PREPROCESSOR and + ACE_CC_PREPROCESSOR_ARGS). + +Fri Sep 3 13:52:43 1999 Carlos O'Ryan + + * bin/auto_compile: + Fixed the implementation of the -dont_run option. + +Fri Sep 3 09:05:20 1999 Kirthika Parameswaran + + * ace/Containers_T.cpp (delete_nodes): Removed the redundant check + which was verifying that was always > 0. But + itself is unsigned so thsi check was redundant + causing warnings with egcs. + +Thu Sep 2 23:54:49 1999 Nanbor Wang + + * ace/Containers_T.h (class ACE_Double_Linked_List): Added more + comments to stress that this is not a general purpose container + class. Thanks to Rusty Conover for + suggesting this. + +Thu Sep 2 18:39:23 1999 Douglas C. Schmidt + + * ace/Process_Manager.cpp (handle_close): Did a better job of + fixing the use of ACE_UNUSED_ARG to make EGCS happy. + +Thu Sep 2 12:21:41 1999 Douglas C. Schmidt + + * ace/Select_Reactor_Base: Renamed the notify_set_, alloc_set_, + and free_set_ to *_queue_ since that's what they really are! + +Thu Sep 2 17:42:22 1999 Carlos O'Ryan + + * ace/Malloc_T.cpp: + Eliminated UMR problem with the position independent malloc + support. Thanks to Doug for figuring this stuff out. + +Thu Sep 2 12:21:41 1999 Douglas C. Schmidt + + * tests/Log_Msg_Test.cpp (test_log_msg_features): Changed the + use of %p to prevent an error message from being printed that'll + confuse the run_tests script. + + * Just added the 700th non-DOC group individual who has contributed + to ACE+TAO over the years. In the last year, we've gone from + 400 to 700 contributors, which is great! + + * tests/CDR_File_Test.cpp (main): Fixed a signed/unsigned warning + and removed the unreferenced argc/argv parameters. + + * tests{run_tests.lst,Makefile}: Added the new ACE_Log_Msg.cpp + test. + + * tests: Added a new test called Log_Msg_Test.cpp. This exercises + the many features of the ACE_Log_Msg class. + + * tests/Object_Manager_Test.cpp (main): Just reformatted some + stuff. + +Thu Sep 2 14:42:31 1999 Kirthika Parameswaran + + * tests/Cached_Accept_Conn_Test.cpp: Repositioned + ACE_HAS_BROKEN_EXTENDED_TEMPLATES macro before the inclusion of + the header since thats where the typedefs had been shifted. + Also, to keep both gcc2.7.3 and sunCC5.0 w.o debugging symbols + happy it was necessary to move the definitions of + methods before the instantiations. + +Thu Sep 2 12:21:41 1999 Douglas C. Schmidt + + * ace/OS.h: Added an ACE_static_cast in the ACE_FACTORY_DEFINE macro + to let the compiler catch "bad casts," i.e., when X isn't allow + to be cast from an ACE_Service_Object. Thanks to Jody Hagins + for suggesting this. + + * ace/config-win32-common.h: Deleted + + #define ACE_LACKS_STRPTIME + + and added + + #define ACE_HAS_STRPTIME + #define ACE_LACKS_NATIVE_STRPTIME + + In addition, I removed the wday and yday stuff in + ACE_OS::strptime(). Thanks to Kevin Lyda + for suggesting this. + + * ace/OS.h: Make sure to add a cast to ACE_Service_Object * in the + ACE_FACTORY_DEFINE macro so that the offset will be corrected + automagically. Thanks to Eric C. Newton for + reporting this and suggesting a fix. + + * ace/Log_Msg: Modified the msg_callback(ACE_Log_Msg_Callback *) + method to return the existing ACE_Log_Msg_Callback * so we can + support "chaining". + + * ace/Log_Msg.cpp: Added explicit template instantiations for + ACE_Reverse_Lock. + + * ace/Log_Msg.cpp: Changed the implementation described below to + use an ACE_Reverse_Lock, which is cool ;-). Thanks to Carlos + for explaining how this worked. + + * ace/Log_Msg.cpp: Don't hold the lock during a msg_callback() to + avoid deadlock. Thanks to Matthew Davis + for reporting this. + + * tests/Cached_Accept_Conn_Test.cpp: Removed a "static" from + int debug so that the friggin' SunC++ compiler will link... + +Thu Sep 02 11:04:18 1999 David L. Levine + + * bin/check_build_logs: added /dev/null to egrep invocation + so that it always shows the file name. Thanks to Doug for + reporting this. + +Thu Sep 02 11:02:25 1999 David L. Levine + + * ace/config-qnx-neutrino.h: added ACE_LACKS_SOCKET_BUFSIZ. + +Thu Sep 2 08:56:39 1999 Jeff Parsons + + * ace/CDR_Stream.h: + * ace/CDR_Stream.i: + Added << and >> operators for ACE_CDR::Char. These are not + to be used by TAO or the IDL compiler, they are solely for + use with the ACE library, so that 1-byte values can be + streamed without using the CORBAisms to_char and from_char. + Otherwise, if a 1-byte value were on the rhs of a CDR operator, + the compiler will probably promote the operator to the one + using ACE_CDR::Short, which is not at all what we want. + +Wed Sep 1 21:37:59 1999 Douglas C. Schmidt + + * tests/Makefile (BIN): Added the new CDR_File_Test.cpp to + the list of files that are automatically built. Also, added + this to run_tests.lst. + + * tests: Added a new test called CDR_File_Test, which + exercises the ACE_CDR_Stream features in conjunction with file + I/O. Thanks to Giga Giguashvili . + + * tests/CDR_Test.cpp: Moved the main() function to the end + of the file. + + * ace/OS.i: Moved the new ACE_OS::filesize() method down in + this file until *after* the ACE_OS::close() method to prevent a + "used before being inlined" error on DU. Thanks to David for + reporting this. + +Wed Sep 1 20:41:03 1999 Carlos O'Ryan + + * tests/run_tests.lst: + Disabled the Time_Service_Test, it was crashing the parent + process. + +Wed Sep 01 19:46:30 1999 David L. Levine + + * bin/check_build_logs: allow log directory (-l option argument) + to start with anything except -. + +Wed Sep 1 17:15:25 1999 Kirthika Parameswaran + + * ace/Arg_Shifter.cpp (get_current_parameter): Removed egcs + warnings by making int and also cleaned up the + code. + +Wed Sep 1 15:51:41 1999 Douglas C. Schmidt + + * examples/Timer_Queue/Thread_Timer_Queue_Test.cpp: Fixed a typo + where ACE_reinterpret_cast() was misspelled. Thanks to + David for reporting this. + + * examples/QOS/server.cpp: "ACE"-ified this example. + + * ace/OS: Added a new method called ACE_OS::filesize() that + takes a LPCTSTR so that we can pass a file name to this. + + * ace/config-win32-borland.h: Changed ACE_CC_COMPILER to + CPP32.EXE on the recommendation of Christopher Kohlhoff + . + + * ace/Synch.h: Updated the documentation of ACE_Semaphore::remove() + to clarify that it should only be called by one thread to avoid + race conditions. Thanks to Clarence Bishop + for mentioning this. + +1999-09-01 Vishal Kachroo + + * ACE_wrappers/ace/OS.h: + * ACE_wrappers/ace/OS.i: + Added a wrapper ACE_OS::enum_protocols () for WSAEnumProtocols(). + Tested this function with the ACE QOS test. + + * examples/QOS/client.cpp: + * examples/QOS/server.cpp: + Replaced the occurences of WSAEnumProtocols with + ACE_OS::enum_protocols () and successfully ran the QOS test. + +Wed Sep 1 15:51:41 1999 Douglas C. Schmidt + + * ace/OS.i: Ensure that ACE_OS::localtime_r() does the "Right + Thing"[TM], i.e., returns the pointer in the buffer provided by + the user, even if there's no native support for localtime_r() on + the OS platform. In addition, added an ACE_OS_GUARD for this + use-case so that we don't have race conditions in MT programs. + This necessitated moving the localtime_r() wrapper facade into + the OS.cpp file. Thanks to Jody Hagins for + these suggestions. + + * ace/SV_Semaphore_Complex: Improved the documentation a bit + based on comments from Herbert . + +Wed Sep 1 15:15:00 1999 Luther Baker + + * ace/Arg_Shifter.h: Added function (get_current_parameter(offset) + to return parameters that may be mangled with flags. + + * ace/Arg_Shifter.cpp: Implemented function above. + +Wed Sep 1 14:50:48 1999 Nanbor Wang + + * ace/OS.h: Added definitions for _O_BINARY, _O_TEXT, and _O_RAW + if they are not defined. Thanks to Kevin Lyda + for pointing this out. + +Wed Sep 1 14:30:58 1999 Darrell Brunsch + + * ace/Process_Manager.cpp: Typo fixed. + +Wed Sep 1 11:18:26 1999 Douglas C. Schmidt + + * tests/Reactor_Notify_Test.cpp: Fixed an erroneous use of = + rather than != and added another pair of explicit template + instantiations for ACE_Auto_Basic_Ptr<>. Thanks to Carlos for + reporting this. + + * ace/Process_Manager.cpp (handle_close): Removed a warning + about unused parameter. Thanks to David for reporting this. + + * tests/Reactor_Notify_Test.cpp: I needed to add + + #elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) + + rather than + + #else + +Wed Sep 01 11:55:31 1999 Steve Huston + + * ace/CORBA_Handler.{h cpp} (ACE_ST_CORBA_Handler): Made the + ACE_ST_CORBA_Handler instance get cleaned up via object manager + at rundown, giving it a chance to clean up it's reactor + registrations and reset its Orbix callbacks. Also added a new + capability of allowing the ACE_ST_CORBA_Handler to daisy-chain + the Orbix callbacks - this is only enabled if + ACE_TAKEOVER_ORBIX_CALLBACKS is set in the config.h file, and + its use is highly discouraged unless you really know what you're + doing and can account for all of the callbacks. + +Wed Sep 1 11:18:26 1999 Douglas C. Schmidt + + Thanks to David for reporting this. + + * tests/run_tests.lst: Disabled the Process_Manager_Test + until it's stable. Thanks to David for reporting this. + +Wed Sep 1 00:05:04 1999 Douglas C. Schmidt + + * ace/config-win32-borland.h: Added a #define for ACE_CC_COMPILER + so that things will work properly on Borland. Thanks to + Goldshtain Dmitry and Adrian + Mercieca for reporting this. + +Wed Sep 01 10:45:15 1999 David L. Levine + + * ace/OS.{h,cpp} (ACE_OS_Object_Manager::init,fini): replaced + use of ACE_ERROR with a new, private method (print_error_message). + If one of the operations in init () fails, then the Log_Msg + instance might not work properly. Thanks to Alain Magloire + for noting this. + + print_error_message also consolidates the common const char + strings into one place. This entire changes reduces the size + of OS.o by about 900 bytes. + +Wed Sep 1 00:05:04 1999 Douglas C. Schmidt + + * tests/Reactor_Notify_Test.cpp: Only run the iterations in + this test for 2000 times, not 10000 times. + +Wed Sep 1 07:41:58 1999 Jeff Parsons + + * ace/Process_Manager.cpp (wait): + An ACE_NEW_RETURN needed ACE_INVALID_PID for the return + value instead of ACE_INVALID_HANDLE. + +Wed Sep 1 00:05:04 1999 Douglas C. Schmidt + + * tests/Process_Manager_Test.cpp: Made some minor changes in + this test so that it'll compile. We still need to update it so + it'll run correctly with the new version of ACE_Process_Manager, + however. + + * ace/Process_Manager: Integrated the latest and greatest + ACE_Process_Manager from Dave Madden . This + should now work relatively transparently on all OS platforms + that support processes. We'll be adding a new + Process_Manager_Test.cpp shortly... + + * tests/Reactor_Notify_Test.cpp: Modified this test to exercise + the new user-level notification queueing in the ACE_Reactor. + +Tue Aug 31 16:05:14 1999 Douglas C. Schmidt + + * ace/Process_Manager.cpp (handle_close): Added an ACE_UNUSED_ARG + to keep the compiler from warning that the "handle" parameter + isn't used. + + * ace/OS.h: Added a new #defined called + ACE_REACTOR_NOTIFICATION_ARRAY_SIZE that designates the size of + the array of ACE_Notification_Buffers used by the new Reactor + user-level notification queue feature. + + * ace/Select_Reactor_Base: Added support for a user-level + notification queue that can buffer very large amounts of pending + notifications, i.e., well beyond the 64 kbyte limit imposed by + the use of a socket. This feature is only enabled if + ACE_HAS_REACTOR_NOTIFICATION_QUEUE is enabled in a config.h + file. Thanks to Detlef Becker + for suggesting this and contributing a prototype implementation. + +Tue Aug 31 20:10:49 1999 Yamuna Krishnamurthy + + * ace/OS.h: Added the ACE_HAS_NO_THROW_SPEC check in order to + suppress the generation of throw specs to placate some compilers + and make it easier for CORBA developers to by lazy wrt C++ + exception throw specs ;-). Thank to Andreas Geisler + for suggesting this addition + +1999-08-31 Vishal Kachroo + + Modified the ACE GQoS test to use a single handler registered + for QOS_MASK|READ_MASK instead of two separate handlers. Had to + remove the following files and add other files. + + * ACE_wrappers/examples/QOS/QOS_Event_Handler.cpp + * ACE_wrappers/examples/QOS/Read_Handler.h + * ACE_wrappers/examples/QOS/QOS_Event_Handler.h + * ACE_wrappers/examples/QOS/Read_Handler.cpp + + Added the following files : + + The Sender event handler is only registered for QOS events. It + uses the ACE_OS::sendto () as soon as it receives a QOS event. + + * ACE_wrappers/examples/QOS/Sender_QOS_Event_Handler.cpp + * ACE_wrappers/examples/QOS/Sender_QOS_Event_Handler.h + + The Receiver event handler is registered for both QOS as well as + READ events since it has to initially wait for a PATH RSVP + message from the sender (QOS event, finally!!) and then read + from the same QOS enabled socket. + + * ACE_wrappers/examples/QOS/Receiver_QOS_Event_Handler.cpp + * ACE_wrappers/examples/QOS/Receiver_QOS_Event_Handler.cpp + + The client and server have been modified to subscribe to the + same multicast session. The RSVP SP on the receiver side sends + RESV messages at the earliest indication of QOS parameters AND + existence of a matching PATH state. This state is found only if + a multicast socket has been created (by the sender) with a + matching "multicast session" address. + + * ACE_wrappers/examples/QOS/server.cpp: + * ACE_wrappers/examples/QOS/client.cpp: + + Modified the following to incorporate the removal and addition + of files listed above. + + * ACE_wrappers/examples/QOS/QOS.dsw + * ACE_wrappers/examples/QOS/client.dsp + * ACE_wrappers/examples/QOS/server.dsp + +Tue Aug 31 16:05:14 1999 Douglas C. Schmidt + + * ace/Malloc_T, + * ace/Malloc: For historical reasons, we'd had a nested class + called ACE_Malloc_Control_Block within ACE_Malloc_Header. This + was redundant and confusing, so I merged the fields of + ACE_Malloc_Control_Block into ACE_Malloc_Header. In addition, I + also added a constructor that initialized the fields to 0 so + that we won't have problems with Purify complaining about + uninitialized memory reads. Thanks to Carlos for reporting + this. + +Tue Aug 31 15:54:56 1999 Douglas C. Schmidt + + * ace/Process_Manager.h: There was a bizarre default value + for the pid parameter, which was helping to cause ambiguity + warnings from the C++ compiler. I've removed this. + +Tue Aug 31 00:16:34 1999 Douglas C. Schmidt + + * build/egcs/tests/Cached_Accept_Conn_Test.h: Moved the template + class into the header file so that IBM C++ will be happy. + + * tests/Cached_*_Test.h: Updated these files to include the proper + descriptive information. + + * tests/Upgradable_RW_Test.h: Cleaned up the formatting for this + test. + + * tests/Cached_Accept_Conn_Test.cpp, + * tests/Cached_Conn_Test.cpp, + * tests/Conn_Test.cpp, + * tests/DLList_Test.cpp, + * tests/Hash_Map_Manager_Test.cpp: + Fixed some "order of definition" problems caused by the + workarounds for SunC++ 5.0 -g bugs. Also replaced the use of + ADDR and STRING with ACE_ADDR and ACE_STRING to avoid potential + clashes with symbols in the global name space. Thanks to David + for reporting this. + +1999-08-31 Vishal Kachroo + + * ACE_wrappers/examples/QOS/server.cpp + * ACE_wrappers/examples/QOS/client.cpp + * ACE_wrappers/examples/QOS/QOS_Event_Handler.cpp + * ACE_wrappers/examples/QOS/QosEvent.h + * ACE_wrappers/examples/QOS/Read_Handler.h + * ACE_wrappers/examples/QOS/QOS_Event_Handler.h + * ACE_wrappers/examples/QOS/Read_Handler.cpp + * ACE_wrappers/examples/QOS/QOS.dsw + * ACE_wrappers/examples/QOS/client.dsp + * ACE_wrappers/examples/QOS/server.dsp: + These files test the new ACE GQoS features, which + implement IntServ features over WinNT 2000. + +Tue Aug 31 14:47:54 1999 Kirthika Parameswaran + + * ACE-INSTALL.html: Added a note on building egcs with the + -fsquangle option contributed by Skye Sweeney + . + +Tue Aug 31 00:16:34 1999 Douglas C. Schmidt + + * bin/clone.cpp: Modified this program so that it'll work more + flexibly with symbolic links. In particular, clone can now + generate symbolic links with relative pathnames to the source. + Thus, you can now call it like this: + + % clone -s ../../foo . + + and all of the cloned links will properly refer to ../../foo + (adding the appropriate number of extra '..'s to handle + directory nesting). Thanks to Jonathan Biggar + for these fixes. + + * ace/Process.cpp: Need to #include "ace/Signal.h". + + * Added a series of fixes that allow ACE to build and + run cleanly with SunC++ 5.0 and Solaris 7 even when debugging is + NOT enabled. These changes require moving the explicit template + instantiations from the BOTTOM of the *.cpp files to near the + top. Thanks to Robert Shewan for reporting + this. + + * ace/Process_Manager.cpp: Fixed some warnings. Thanks to + Carlos for reporting this. + +Mon Aug 30 21:14:46 1999 Douglas C. Schmidt + + * ace/Process_Manager.cpp: Added the destructor for + ACE_Process_Descriptor. Thanks to David for reporting this. + +Mon Aug 30 17:20:56 1999 David L. Levine + + * ace/config-qnx-neutrino.h: added ACE_LACKS_MUTEXATTR_PSHARED. + + * ace/OS.i (mutex_init): enable the ACE_UNUSED_ARG (type) + statement with ACE_LACKS_MUTEXATTR_PSHARED. + +Mon Aug 30 17:10:00 1999 Kirthika Parameswaran + + * ACE-INSTALL.html: Added a note about the "-fsquangle" option + to be used with egcs to shorten long symbol names. + +Mon Aug 30 16:12:36 1999 Douglas C. Schmidt + + * ace/Process.i: Oops, the implementation of gethandle() was + in a Win32-specific part of the code... + + * ace/Msg_WFMO_Reactor.h: Fixed a problem that was causing + ACE_Msg_WFMO_Reactor from being included in the documentation + windex files. Thanks to Jody Hagins for reporting this. + +Mon Aug 30 16:16:46 1999 Ossama Othman + + * PROBLEM-REPORT-FORM: + + Updated to point to refer reports ace-bugs mailing list. + +Mon Aug 30 14:27:26 1999 David L. Levine + + * tests/Cached_Accept_Conn_Test.cpp,Cached_Conn_Test.cpp, + Map_Manager.cpp: + use the explicit template instantiations even with + ACE_HAS_GNU_REPO. g++ 2.91.66 misses some of them with -frepo. + +Mon Aug 30 15:23:12 1999 Douglas C. Schmidt + + * ace/Process_Manager: Integrated the new features that make it + possible to notify a Reactor when a process exits. Thanks to + Dave Madden for contributing this. + + * ace/Process: Added a more portable timed wait() operation for + UNIX platforms. However, this method has the following two + limitations: (1) on UNIX platforms this function uses , + i.e., it overwrites any existing alarm and (2) it steals all + SIGCHLDs during the timeout period, which will break another + ACE_Process_Manager in the same process that's expecting SIGCHLD + to kick off process reaping. If you know a good solution to + this please let us know. Thanks to Dave Madden + for contributing this. + + * ace/Process: Added setgroup() and getgroup() methods to + ACE_Process_Options so that we can manage groups of processes. + Thanks to Dave Madden for contributing this. + + * examples/OS/Process/process.cpp: Added a new version that + tests the various wait() methods on ACE_Process. Thanks to Dave + Madden for contributing this. + + * config-chorus.h, + config-cray.h, + config-cygwin32-common.h, + config-freebsd-pthread.h, + config-freebsd.h, + config-hpux-9.x.h, + config-hpux-9.x.h, + config-lynxos.h, + config-netbsd.h, + config-sunos4-g++.h, + config-sunos4-lucid3.2.h, + config-sunos4-sun3.x.h, + config-sunos4-sun4.1.4.h, + config-sunos4-sun4.x-orbix.h, + config-sunos4-sun4.x.h, + config-win32-common.h: + Added ACE_LACKS_SETPGID on the assumption that platforms lacking + getpgid() won't have setpgid() either. If this turns out to be + incorrect, please let me know. + + * ace/OS: Added a new wrapper facade method for setpgid(). Thanks to + Dave Madden for contributing this. + + * ace/OS.h: Added a new macro called ACE_INVALID_PID. Thanks to + Dave Madden for contributing this. + + * ace/Local_Tokens.h: Added a comment explaining that these locking + classes aren't intended as general-purpose synchronization + mechanisms. Thanks to Brian Wright + + * examples/Misc/test_trace.cpp (main): Added a call to + ACE_OS::atexit() to make sure we test this someplace. + +Mon Aug 30 12:11:06 1999 Carlos O'Ryan + + * ace/Strategies.i: + Once a Recyclable object reaches the ACE_RECYCLABLE_CLOSED state + its state cannot change. This eliminates a nasty race condition + where one thread detects that the connection is closed (and sets + the state accordingly), but another thread changes the state to + IDLE, based on old information. + Thanks to Mark L Boriack for reporting + this problem and helping us debug it. + +Mon Aug 30 10:43:08 1999 Carlos O'Ryan + + * ace/config-irix6.x-common.h: + Added ACE_HAS_SIGSUSPEND and ACE_HAS_TIMEDWAIT + +Mon Aug 30 10:18:52 1999 Ossama Othman + + * PROBLEM-REPORT-FORM: + + Fixed typo. + + * acconfig.h: + * configure.in: + + Removed ACE_LACKS_ATEXIT test since the macro no longer exists. + + Added test for ACE_HAS_SIGSUSPEND. + +Mon Aug 30 07:38:11 1999 David L. Levine + + * tests/Message_Block_Test.cpp, + examples/Reactor/Misc/test_event_handler_t.cpp: + use the explicit template instantiations even with + ACE_HAS_GNU_REPO. g++ 2.91.66 misses some of them with -frepo. + +Sun Aug 29 22:57:26 1999 Douglas C. Schmidt + + * tests/Signal_Test.cpp (worker_parent): Revised the test + so that we transmit the parent process ID in argv so that the + child doesn't have to "guess." This solves the annoying + problems with Linux threads... + +Sun Aug 29 21:35:17 1999 David L. Levine + + * ace/config-g++-common.h: + 1) Don't #define ACE_HAS_EXPLICIT_INSTANTIATION with + ACE_HAS_GNU_REPO, so that -frepo can do its thing. [Bug 248] + 2) #undef ACE_HAS_STRING_CLASS with ACE_HAS_GNU_REPO, because + egcs 2.91.66 can't build IOStream test (due to an unresolved + basic_string method instantiation) otherwise. + + * ace/config-aix-4.x.h,ace/config-cygwin32-common.h, + ace/config-hpux-10.x-g++.h,ace/config-irix5.3-g++.h, + ace/config-irix6.x-g++.h,ace/config-linux-common.h, + ace/config-lynxos.h,ace/config-osf1-4.0.h,ace/config-sunos4-g++.h, + ace/config-sunos5.4-g++.h,ace/config-sunos5.5.h, + ace/config-unixware-2.*-g++.h: + moved ACE_HAS_STRING_CLASS #define before #include of + config-g++common.h, so that config-g++-common.h can #undef + it with ACE_HAS_GNU_REPO. + + * include/makeinclude/rules.lib.GNU: when ace_lib_prelink is + enabled, add a link step before building a library. This is + used, for example, to insert template instantiations into + object files. [Bug 248] + + * include/makeinclude/wrapper_macros.GNU: set ace_lib_prelink + to 1 when repo is enabled. Added ACE_NUL and ACE_NUL_STDERR + macros, for internal use to support the prelink step. [Bug 248] + +Sun Aug 29 07:53:33 1999 Douglas C. Schmidt + + * tests/Signal_Test.cpp: Linux threads are problematic because + getppid() isn't the process id of your parent PROCESS, it's the + "process" id of your parent THREAD. Yikes! Therefore, I had to + rearrange this test so that it'll work on Linux. + + * ace/config-qnx-neutrino.h, + * ace/config-vxworks5.x.h, + * ace/config-osf1-4.0.h, + * ace/config-sunos5.5.h, + * ace/config-linux-common.h: Added support for + the ACE_HAS_SIGTIMEDWAIT and ACE_HAS_SIGSUSPEND macros. + + * ace/OS: Added a new sigsuspend() wrapper to class ACE_OS. This + implementation is "smarter" than the default behavior of + sigsuspend(2) because it'll handle NULL sigset_t *'s gracefully. + + * ace/Signal: Make the use of ACE_Sig_Set & parameters + const-correct. + + * ace/Signal: Added a new method for ACE_Sig_Action that'll register + an ACE_Sig_Set's worth of signals simultaneously. + + * ace/Signal: Updated the documentation to explain what the various + constructors do. + + * ace/Process.h: Updated the documentation for ACE_Process::spawn() + to explain what the return values are. + + * tests/Makefile: Added Signal_Test to the list of tests that are + built automatically. + + * tests: Added a new test, Signal_Test.cpp, that exercises the + various signal handling capabilities supported by ACE on various + OS platforms. + + * ace/OS.h, + * ace/README, + * ace/config-vxworks5.x.h: + Removed all mention of the ACE_LACKS_ATEXIT feature. This is + now the default behavior because we ACE_OS_Object_Manager::at_exit() + to get consistent semantics, as described below. Thanks to David + for pointing this out. + + * ace/OS.i: Changed the implementation of ACE_OS::atexit() to always + use the ACE_OS_Object_Manager::instance ()->at_exit() method so + that we get consistent semantics across platforms. + +Sun Aug 29 18:27:38 1999 Ossama Othman + + * ACE.ifnames: + * ace-diff-config.in: + + Removed ace-diff-config.in and ACE.ifnames from the repository. + They are only used for internal ACE Configuration Project + testing. + + * Makefile.am: + * configure.in: + + Removed references to ace-diff-config.in and ACE.ifnames. + + * acconfig.h: + * configure.in: + + Added entries and tests for the following macros: + + ACE_AUTO_PTR_LACKS_RESET + ACE_HAS_LLSEEK + ACE_HAS_EXPLICIT_KEYWORD + ACE_HAS_MUTABLE_KEYWORD + ACE_HAS_STD_TEMPLATE_SPECIALIZATION + ACE_HAS_STD_TEMPLATE_METHOD_SPECIALIZATION + ACE_HAS_SIGTIMEDWAIT + ACE_LACKS_ATEXIT + ACE_LACKS_GETPPID + + * configure.in: + + Fixed auto_ptr test. auto_ptr was being used incorrectly. + +Sun Aug 29 07:53:33 1999 Douglas C. Schmidt + + * tests/Process_Manager_Test.cpp: Changed the names of the signal + handlers to one_child_synchronous_signal_handler() and + multiple_children_synchronous_signal_handler() to reflect how + they are used. + + * ace/OS.[hi]: Added a new wrapper for sigtimedwait() so that + we can encapsulate this. To make programming more consistent, + the encapsulation uses an ACE_Time_Value, rather than a struct + timespec. + + * ace/config-linux-pthread.h, + * ace/config-linux-lxpthreads.h: Removed the + + #define ACE_HAS_SIGWAIT + + macro since this was already defined in config-linux-common.h. + + * tests/Malloc_Test.cpp: Improved the test by printing out + additional diagnostic information. Also validated that it works + when ACE_DEFAULT_BASE_ADDR == 0 on Solaris using SunCC (with + purify) and EGCS. + + * ace/Malloc: Added a dump() method to ACE_Malloc_Header. + + * ace/Process_Manager.cpp (ACE_Process_Descriptor): Changed + a -1 to a 0 to prevent a compiler warning. Thanks to + David Levine and DEC UNIX for reporting this. + +Sun Aug 29 00:14:09 1999 Luther Baker + + * ace/Arg_Shifter.h (cur_arg_strncasecmp): Removed and replaced earlier + method 'is_or_contains_ignore_case' with 'cur_arg_strncasecmp.' + This method does less and it is more self-contained, adding protection + and greater flexibility for the program program using it. + + * ace/Arg_Shifter.cpp (cur_arg_strncasecmp): Implementation + corresponding with changes in ACE_Arg_Shifter class. + +Sun Aug 29 00:13:35 1999 Douglas C. Schmidt + + * ace/Process_Manager.i: Moved the destructor for + ACE_Process_Descriptor out of the *.i file since it's always + called by vector delete and therefore inlining it is pointless. + +Sat Aug 28 23:46:55 1999 Douglas C. Schmidt + + * ace/Process_Manager.cpp (resize): The loop should run + from 0 < this->current_count_ rather than 0 < + this->max_process_table_size_. + +Sat Aug 28 16:28:33 1999 David L. Levine + + * ace/Synch_T.i: reordered some methods to avoid + use before definition. + +Fri Aug 27 18:52:00 1999 Luther Baker + + * ace/Arg_Shifter.h (is_or_contains_ignore_case): added method + to facilitate CORBA spec in ORB_init. + + * ace/Arg_Shifter.cpp (is_or_contains_ignore_case): implemented + the method added. Part of a larger project to implement CORBA + spec regarding -ORB parsing in ORB_init. + +Fri Aug 27 18:58:50 1999 Douglas C. Schmidt + + * tests/run_tests.lst: Reenabled the Process_Manager_Test since + it now seems to work fine with EGCS after the fix noted below. + +Fri Aug 27 18:39:14 1999 Douglas C. Schmidt + + * ace/Process_Manager.cpp (wait): Fixed a mistake in the coding + logic whereby we were returning from the function in a loop even + when there was no error. Thanks to David Levine and DEC UNIX + for pointing this out. + +Fri Aug 27 16:05:49 1999 David L. Levine + + * ace/OS.*,Log_Msg.cpp,Synch_T.i: reverted changes of + Fri Aug 27 11:29:21 1999 David L. Levine + to see if they caused problems on NT. Thanks to Michael + and Jeff for reporting this. + +Fri Aug 27 12:01:37 1999 David L. Levine + + * ace/OS.cpp (mktime): added static cast of -1 return value + to time_t to avoid warnings on VxWorks. + +Fri Aug 27 11:38:36 1999 Nanbor Wang + + * ace/Service_Config.cpp (process_directives): Remember to close + down the svc.conf file pointers once they are processed. Thanks + to Lothar Werzinger for pointing + this out. + +Fri Aug 27 11:29:21 1999 David L. Levine + + * ace/OS.*: moved ACE_OS_Recursive_Thread_Mutex_Guard from + OS.cpp to OS.h so that Log_Msg.cpp can use it. + + * ace/Log_Msg.cpp: replaced use of ACE_Guards with + ACE_OS_Thread_Recursive_Mutex. [Bug 262] + + * ace/OS.h (ACE_OS_Recursive_Thread_Mutex_Guard::lock): + added this method. + + * ace/OS.cpp (ACE_OS_GUARD,ACE_TSS_CLEANUP_GUARD, + ACE_TSS_BASE_GUARD): fixed to use + ACE_OS_Recursive_Thread_Mutex_Guard::lock. Added + _RETURN versions. + + * ace/Synch_T.i: reordered some methods to avoid + use before definition. + +Fri Aug 27 09:53:09 1999 Joe Hoffert + + * ace/ATM_Stream.{h,cpp}: added get_vpi_vci method. + * examples/IPC_SAP/ATM_SAP/CPP-{client,server}.cpp: Changed tests to + print out VPI and VCI after connected. + +Fri Aug 27 10:50:10 1999 David L. Levine + + * ACE version 5.0.3 released. + +Fri Aug 27 09:32:26 1999 David L. Levine + + * bin/make_release: added some diagnostics to see why + diffs aren't being created. + +Fri Aug 27 07:17:58 1999 Toshio Hori + + * ACE-INSTALL.html: fixed a typo, missing ; after + < and >. + +Thu Aug 26 21:01:02 1999 Jim Rucker + + * ace/Thread_Manager.cpp (spawn_i): on VxWorks, if t_handle + is non-0, set it with thr_handle. + +Thu Aug 26 16:33:42 1999 David L. Levine + + * ace/Log_Msg.cpp: removed unnecessary #include "ace/Synch_T.h". + [Bug 262] + +Thu Aug 26 13:49:00 1999 David L. Levine + + * examples/Threads/Makefile: removed process_manager from BIN. + See Sat Aug 21 12:36:40 1999 Douglas C. Schmidt. + +Thu Aug 26 12:22:55 1999 David L. Levine + + * ace/config-ghs-common.h: on Sun, added + ACE_HAS_NONSTATIC_OBJECT_MANAGER. It's necessary + to prevent seg fault on startup. Thanks to + David Sunwall for + reporting this problem. + +Thu Aug 26 12:11:09 1999 David L. Levine + + * docs/ACE-guidelines.html: added guidelines to avoid + default arguments, and favor narrow interfaces. + +Thu Aug 26 11:44:26 1999 David L. Levine + + * tests/Time_Value_Test.cpp (main): added static casts + of the doubles to longs. g++ 2.7.2.3 warned about + passing a double to a long :-) + +Thu Aug 26 11:20:55 1999 David L. Levine + + * tests/Time_Value_Test.cpp (main): added a test showing + that ACE_Time_Value (2.5) == ACE_Time_Value (2). + The 2.5 gets coerced to a long with value 2. Beware . . . + +Thu Aug 26 10:43:04 1999 Carlos O'Ryan + + * ace/config-sunos5.6.h: + egcs-2.95 under Solaris 5.6 does not need + ACE_HAS_STL_QUEUE_CONFLICT, thanks to Krishnakumar + B. for reporting this problem. + This fixes [BUGID:264] + +Thu Aug 26 07:29:42 1999 David L. Levine + + * ace/OS.{h,i} (ACE_Time_Value): reverted + Wed Aug 25 22:05:54 1999 David L. Levine + change. It caused overload ambiguity when the types of + sec and usec didn't match, and on Sun CC 4.2/SunOS 5.6. + Thanks to Andy for reporting that. + +Wed Aug 25 22:05:54 1999 David L. Levine + + * ace/OS.{h,i} (ACE_Time_Value): added four new + constructors. One takes a double, to avoid surprises + (truncation) when constructing an ACE_Time_Value from + a double. The other three constructors take two + unsigned longs, ints, and unsigned ints. They avoid + the ambiguity introduced by the new double constructor. + Thanks to Dave Meyer for starting this :-) + + The double constructor is wrapped with + #ifndef ACE_LACKS_FLOATING_POINT. + + * tests/Time_Value_Test.cpp (main): removed cast of + 2.0 to long. + +Wed Aug 25 16:15:07 1999 David L. Levine + + * docs/ACE-subsets.html: removed spurious LOGGING_FILES + text. + +Wed Aug 25 15:55:05 1999 David L. Levine + + * ace/OS.{h,cpp},Object_Manager.*,Signal.i (default_mask): moved + the default_mask () static method from ACE_Object_Manager + to ACE_OS_Object_Manager, so that it can be used by + Log_Msg.cpp without layer inversion. (Left a deprecated, + inline ACE_Object_Manager::default_mask (), for backward + compatibility.) default_mask () now returns a sigset_t * + instead of an ACE_Sig_Set *, again to avoid layer inversion. + + * ace/Log_Msg.cpp (log): replaced use of ACE_Sig_Guard + with a bare-bones ACE_Log_Msg_Sig_Guard. [Bug 262] + +Wed Aug 25 14:53:58 1999 Carlos O'Ryan + + * bin/run_all.pl: + * bin/auto_compile: + The script did not start with the canonical trick to run perl + from [t]csh, [ba]sh or perl itself. + +Wed Aug 25 14:45:06 1999 Ossama Othman + + * tests/Process_Manager_Test.cpp: + + Explicitly include "ace/Signal.h" to make declaration of + ACE_Sig_Set class visible. + + return statement at end of multiple_children_sig_handler() + function is never reached. It was commented out to prevent + compiler warnings. + +Wed Aug 25 13:34:07 1999 Narendra Ravi + + * ACE-INSTALL.html: added information about -j GNU make option. + +Wed Aug 25 12:26:49 1999 Carlos O'Ryan + + * ace/OS.h: + On Borland C++ (and other platforms) we should use + std::bad_alloc instead of bad_alloc for the ACE_bad_alloc + exception. We use the ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB + macro to detect this. Thanks to Jody Hagins + for this fix. + + * tests/run_tests.lst: + Disabled the Token test, it is more trouble that it is worth. It + hangs and tends to freeze the complete testsuite. + +Wed Aug 25 12:09:32 1999 Carlos O'Ryan + + * Makefile: + Include (conditionally) the $TAO_ROOT/tao/tao_targets.GNU file, + that defines the targets required to compile just TAO. + +Tue Aug 24 21:47:44 1999 David L. Levine + + * ace/Synch_Options.{h,cpp} (timeout): added const to + ACE_Time_Value & argument, because it's not modified. + Thanks to John Lindal for suggesting this. + +Tue Aug 24 10:02:51 1999 Douglas C. Schmidt + + * tests/Process_Manager_Test.cpp: Fixed a number of warnings + caused by unused args and signed/unsigned mismatches. Thanks to + David Levine for reporting this. + + * ace/Service_Repository.h, + ace/Service_Config.h, + ace/OS.h: + Changed the default number of entries in the + ACE_Service_Repository from ACE_DEFAULT_SELECT_REACTOR_SIZE + to ACE_DEFAULT_SERVICE_REPOSITORY_SIZE, which defaults to + 1024. Thanks to Ivan Murthy for + suggesting this. + + +Tue Aug 24 16:23:07 1999 Carlos O'Ryan + + * bin/make_release: + Use an explicit temporary file to create the ChangeLog, i had + some problems with the previous scheme, but it could be my + shell. + When tagging TAO we have to change directories. + +Tue Aug 24 12:19:29 1999 Carlos O'Ryan + + * tests/Makefile: + Updated dependencies + + * performance-tests/TCP/tcp_test.cpp: + Fixed argument parsing. + +Tue Aug 24 10:37:02 1999 David L. Levine + + * bin/cvslog (find_changelogs): one more time: append /$file + to `pwd`, so that we can find ChangeLogs in child directories. + Always call basename (), again. + +Tue Aug 24 09:10:58 1999 David L. Levine + + * bin/cvslog (find_changelogs): don't call basename () immediately + after calling `pwd`, so that ChangeLogs in current directory + will be found. + +Tue Aug 24 07:11:52 1999 David L. Levine + + * ace/OS.*,Object_Manager.{h,cpp},README: with ACE_LACKS_ATEXIT, + use ACE_OS_Object_Manager::at_exit () to emulate atexit (). + [Bug 246] + + * tests/Object_Manager_Test.cpp,tests/Makefile, + tests/run_pharlap_tests.bat,tests/run_tests.bat, + tests/run_tests.lst,tests/run_tests.psosim, + tests/run_tests.vxworks,tests/t.icc,tests/icc.bat: + added Object_Manager_Test. + +Mon Aug 23 22:03:24 1999 Carlos O'Ryan + + * include/makeinclude/rules.lib.GNU: + * include/makeinclude/rules.local.GNU: + When compiling both shared and static libraries only one of them + was installed. Thanks to Paul Calabrese + for providing this fix. + +Mon Aug 23 21:41:43 1999 Carlos O'Ryan + + * tests/run_tests.pl: + We search for "Starting" instead of "starting" because that's + what the tests print out now. + +Mon Aug 23 21:20:28 1999 Carlos O'Ryan + + * docs/ACE-guidelines.html: + Added new guidelines relevant to ACE+TAO. + +Mon Aug 23 16:57:13 1999 Carlos O'Ryan + + * performance-tests/RPC/README: + * performance-tests/RPC/client.cpp: + Changed the options to make it more consistent with other tests + like this one. + Added a README file + +Mon Aug 23 16:53:00 1999 Carlos O'Ryan + + * performance-tests/Makefile: + * performance-tests/TCP/README: + Added a README file for the test + + * performance-tests/TCP/tcp_test.cpp: + Added options to pace the events and to control the message size + on the server side. + + * performance-tests/RPC/Makefile: + * performance-tests/RPC/client.cpp: + * performance-tests/RPC/ping.x: + * performance-tests/RPC/server.c: + Added a simple RPC test to compare sockets (ACE), RPC and TAO. + +Mon Aug 23 13:30:32 1999 Nanbor Wang + + * include/makeinclude/platform_sunos5_kcc.GNU: The optimization + flag for KCC should be +K3, not -K2. + +Mon Aug 23 10:56:40 1999 David L. Levine + + * bin/cvslog: added this wrapper around cvs log. It + expands ChangeLogTags to their ChangeLog entries. + Thanks to Luther for helping greatly with it. + +Mon Aug 23 08:46:37 1999 David L. Levine + + * ace/Object_Manager.{h,cpp}: replaced the use of + ACE_Unbounded_Queue with a new + ACE_Cleanup_Info_Node private helper class. The reduces + the size of libACE by over 4 Kb, and is the first step + towards moving the Object_Manager's atexit () support to + OS. [Bug 246] + +Mon Aug 23 07:28:02 1999 David L. Levine + + * tests/run_tests.check: changed "starting" to "Starting", + to match a recent change to test_config.h. + + * tests/test_config.h: changed one remaining "starting" to + "Starting", to be consistent. + +Mon Aug 23 07:08:17 1999 David L. Levine + + * tests/run_tests.lst: disabled Process_Manager_Test, + because it never terminates when built with egcs + on both Solaris 7 and Linux. + +Sun Aug 22 21:15:13 1999 David L. Levine + + * ace/Makefile: with Green Hills for x86 target, use + $(MAKE) instead of make to build .obj/gethrtime.o. + Thanks to Cliff_H_Campbell + for reporting this. + +Sun Aug 22 21:02:26 1999 David L. Levine + + * ace/config-vxworks5.x.h: added ACE_LACKS_ATEXIT. + +Sun Aug 22 21:01:18 1999 David L. Levine + + * ace/README: added ACE_LACKS_ATEXIT. + +Sun Aug 22 14:51:56 1999 Vishal Kachroo + + * ace/OS.i (join_leaf): Constructed a winsock2 QOS structure + within ACE_OS::join_leaf () from the corresponding ACE QOS + classes. Passed this QOS structure to WSAJoinLeaf (). + +Sun Aug 22 12:18:42 1999 Nanbor Wang + + * ace/Process.i (wait): Fixed a typo. + + * ace/Process.cpp (ACE_Process): Removed an extra underscore. + + * ace/OS.i (getppid): Removed undefined variable . + +Sat Aug 21 12:36:40 1999 Douglas C. Schmidt + + * ace/OS.h: Moved the ACE_OS::set_exit_hook() static method + into the OS.i file so be more consistent with the other ACE_OS + methods. Also, changed the signature of extern "C" void + ACE_OS_Object_Manager_Internal_Exit_Hook () to void + ACE_OS_Object_Manager_Internal_Exit_Hook (void) so that this + will match the type declaration for ACE_EXIT_HOOK. + [NOTE: that's not really a signature change. g++ needs the + "void", however, to avoid a bug without -pedantic.] + + * ace/Process_Manager.cpp: Use the new ACE_OS::wait() method, + which is portable to Win32, rather than ACE_OS::waitpid(). + + * tests/Process_Manager_Test.cpp: Completed the first major + enhancement to the test that exercises the new + ACE_Process_Manager features. This test builds and runs cleanly + on Solaris using CC and should run on other versions of UNIX + that support threads and processes. It would be great if + someone could improve it to run on Win32, as well. + + * ace/Process_Manager: Added support for the spawn_n() method, + which creates N new processes. + + * tests: Cleaned up the use of ACE_INIT_LOG/ACE_APPEND_LOG in + Process_Manager_Test.cpp and Malloc_Test.cpp so we don't lose + information. Both these tests now write their child processes' + output to "-child.log". + + * ace/Thread_Manager.h: Added a default value of 0 to the + exit() method since this is a common return status. + + * ace/config-win32-common.h: Added ACE_LACKS_GETPPID. + + * ace: Added a new wrapper for getppid(). For platforms that + don't support this system call, please add ACE_LACKS_GETPPID. + + * tests: Moved the $ACE_ROOT/examples/Threads/process_manager.cpp + example into the $ACE_ROOT/tests directory, renamed it to + Process_Manager_Test.cpp, and revised the test to illustrate the + new ACE_Process_Manager features. + + * tests/run_tests.lst: Added the Process_Manager_Test to the + list of tests to run. + + * tests/Malloc_Test.cpp (main): Added some necessary ASYS_TEXT + macros. + + * ace/Process.i: Rather than replicate the #ifdef logic in + ACE_OS::kill() within ACE_Process:kill(), we just forward to + ACE_OS::kill() and let it sort this out! + + * ace/Process: Moved several of the short wait() methods from the + *.cpp file to the *.i file and inlined them. + + * ace/Process_Manager.cpp: The logic for the implementation of + terminate() was incorrect, i.e., the process table entry should + be removed *if* ACE::terminate_process() succeeds but *not* if + it fails! + + * ace/OS.h: Added a new method called wait() that works portably + on Win32 and UNIX/POSIX platforms. + + * ace/Process: Added an optional "options" parameter to the former + "blocking" wait() method on ACE_Process. This allows clients to + use the WNOHANG option to avoid blocking if the child process + hasn't exited yet. Also changed the type of the return value to + pid_t rather than int. Finally, added an optional status + pointer to the "timed" wait() method (which only works on + Win32). + + * ace/OS.h: On platforms that do not define WNOHANG natively, + changed #ifdef of WNOHANG to 0100 (which can be used in bitmask + comparisons) rather than Douglas Adams favorite constant: 42. + +Sat Aug 21 14:13:46 1999 Carlos O'Ryan + + * ACE version 5.0.2 released. + +Sat Aug 21 11:52:51 1999 Carlos O'Ryan + + * Makefile: + Fixed small problem in the releaseall target. + + * bin/make_release: + The shell did not like the embedded script to print the + ChangeLog entry. + +Fri Aug 20 15:40:58 1999 Douglas C. Schmidt + + * ace/Process_Manager: Added a new method called wait() that's + just syntactic sugar for ACE_Process_Manager::reap(). Thanks to + Dave Madden for suggesting this. + + * ace/OS: Added support for ACE_OS::atexit(), which necessitated + changing the extern "C" signature for ACE_EXIT_HOOK to typedef + void (*ACE_EXIT_HOOK) (void) so that this will be consistent + with the signature expected by the ISO/ANSI C atexit() call. At + the moment, ACE_OS::atexit just calls ::atexit() (unless a + platform's config.h file #defines ACE_LACKS_ATEXIT). + Ultimately, we might want to have this hook into the + ACE_OS_Object_Manager's at_exit() support, which may be more + portable and reliable. + + * ace/ACE_Process_Manager.h: Made the destructor virtual so it's + possible to subclass from this class. + + * ace/Process_Manager.h: Updated the comments on the wait() + method to indicate that a signal handler must be used to keep + track of the number of remaining child processes. Thanks to + Dave Binder for motivating this. + +Thu Aug 19 18:45:00 1999 Chris Gill + + * ace/Auto_Ptr.h: modified ACE_AUTO_PTR_RESET macro, to pass the + type of the pointer. This is needed for the case where + ACE_AUTO_PTR_LACKS_RESET is defined, in order to explicitly + convert the pointer into an auto_ptr for assignment. + +Thu Aug 19 17:26:50 1999 John Heitmann + + * docs/ACE-SSL.html: Cleaned up the auto generated errors. + +Thu Aug 19 16:47:21 1999 Douglas C. Schmidt + + * ACE-INSTALL.html: Added a reference to $ACE_ROOT/docs/ACE-SLL.html. + + * docs: Added a new ACE-SSL.html file that explains how to participate in the + ACE SSL project. Thanks to John Heitmann + for adding this. + +Thu Aug 19 15:31:58 1999 Nanbor Wang + + * ace/OS.h (ACE_OSTREAM_TYPE): Removed the redundant trailing * + for the defintion when ACE_LACKS_IOSTREAM_TOTALLY is defined. + +Thu Aug 19 14:16:37 1999 David L. Levine + + * include/makeinclude/rules.nested.GNU: added ACE_NESTED_COMMAND + hook. Users can set it to whatever they like (preferably in + include/makeinclude/platform_macros.GNU). One example is + to set it to: + + ACE_NESTED_COMMAND := || break $? + + to terminate building if a build in one subdirectory fails. + Thanks to Lothar Werzinger for + suggesting this addition. + +Thu Aug 19 13:06:00 1999 Michael Kircher + + * ace/Read_Buffer.cpp: Fixed a bug in rec_read () method + which prohibited reading more than 1024 bytes at once. + +Thu Aug 19 13:03:07 1999 Douglas C. Schmidt + + * ace/ACE.h (ACE): Fixed a "cut & paste" error in the comment -- + basename should have been dirname. Thanks to Mark Hyett + for reporting this. + + * ace/ACE.cpp: Fixed a bug in ACE::dirname() that was causing problems + if the pathname didn't have a delim character. Thanks to Russ + Noseworthy for reporting this and providing a fix. + +Thu Aug 19 12:59:56 1999 Carlos O'Ryan + + * ace/Message_Block.i: + Moved ACE_Message_Block::replace_data_block() down in the file + because it was using inline functions that were defined after it + was. Thanks to David for pointing this out. + +Thu Aug 19 10:53:50 1999 David L. Levine + + * ace/OS.i (setuid): added ACE_UNUSED_ARG (uid) for VxWorks, + pSOS, WIN32, and Chorus. Thanks to Garry Brother + for reporting this. + +Thu Aug 19 10:04:12 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU: added + trap to cause builds to fail if the exceptions flag is + enabled. The VxWorks libraries don't support exceptions. + And, exceptions give the (Tornado II) compiler fits, e.g., + with ACE_wrappers/TAO/tao/IORManipulation.cpp. Thanks to + Erik Johannes for this nifty preemptive + solution, and to Nick Sawadsky + for motivating its implementation. + +Thu Aug 19 09:34:41 1999 Douglas C. Schmidt + + * ace/WFMO_Reactor.h, + * ace/WFMO_Reactor.cpp, + * ace/Select_Reactor_T.h, + * ace/Select_Reactor_T.cpp, + * ace/Reactor_Impl.h, + * ace/Reactor.h, + * ace/Reactor.cpp: + Added a pair of restart() methods that can be used to set/get + the restart_ flag, which controls whether the handle_events() + event loop is restarted automatically when select() is + interrpted. Thanks to Erik Koerber + for suggesting this. + + * ace/Service_Config: Updated the failure result comment for + open() and cleaned up the return value and errno propagation for + open_i() when process_commandline_directives() fails. Thanks to + Jerry D. De Master for reporting the bug + and suggesting a fix. + + * ace/Service_Config.h: Moved the process_directives() method + used to parse the svc.conf files out of the protected part of + the class to the public part so that application programmers can + call this directly to reconfigure services from the svc.conf + files. Thanks to John Mink for + suggesting this. + +Wed Aug 18 22:45:24 1999 Douglas C. Schmidt + + * ace/WFMO_Reactor.h, + * ace/WFMO_Reactor.cpp, + * ace/XtReactor.h, + * ace/XtReactor.cpp, + * ace/TkReactor.h, + * ace/TkReactor.cpp, + * ace/FlReactor.h, + * ace/FlReactor.cpp, + * ace/Select_Reactor_T.h, + * ace/Select_Reactor_T.cpp, + * ace/Reactor_Impl.h, + * ace/Reactor.h, + * ace/Reactor.cpp: + * ace/Timer_Hash_T.h: + * ace/Timer_Heap_T.h: + * ace/Timer_List_T.h: + * ace/Timer_Queue_T.h: + * ace/Timer_Wheel_T.h: + * ace/Timer_Hash_T.cpp: + * ace/Timer_Heap_T.cpp: + * ace/Timer_List_T.cpp: + * ace/Timer_Wheel_T.cpp: + Changed all uses of const long to long... + +Wed Aug 18 22:15:58 1999 Carlos O'Ryan + + * tests/run_tests.sh: + It was running the DISABLED tests, thanks to David for pointing + this out. + +Wed Aug 18 21:48:52 1999 David L. Levine + + * ACE-INSTALL.html: added Toshio Hori + suggestions (in a new section) on building just what's + needed for TAO, and his tips for reducing disk space + usage on Unix platforms. + +Wed Aug 18 21:32:56 1999 Ossama Othman + + * docs/usage-bugzilla.html: + + Added a simple document explaining basic usage of our + installation of bugzilla. + + * ACE-INSTALL.html: + * PROBLEM-REPORT-FORM: + + Updated with information about the bugzilla usage + documentation. + +Wed Aug 18 20:28:23 1999 David L. Levine + + * bin/check_build_logs: check for just Stop, not [Ss]top, + to avoid snagging top output. Gnu make says "Stop" when + it can't find a dependency. + +Wed Aug 18 19:08:08 1999 David L. Levine + + * ace/OS.{h,cpp},Object_Manager.{h,cpp},Log_Msg.cpp: + moved ACE_LOG_MSG_INSTANCE_LOCK from ACE_Object_Manager + to ACE_OS_Object_Manager, so that Log_Msg.cpp needn't + to depend on Object_Manager for it. + +Wed Aug 18 18:20:11 1999 Carlos O'Ryan + + * tests/SOCK_Send_Recv_Test.cpp: + Fixed typo. + +Wed Aug 18 17:58:06 1999 Carlos O'Ryan + + * THANKS: + * ace/README: + * ace/config-irix6.x-common.h: + Added new macro (ACE_HAS_BROKEN_DGRAM_SENDV) to handle platforms + where using sendmsg with exactly IOV_MAX elements in the iovec + fails (normally the number of elements can be up to and + including IOV_MAX). Thanks to Tobin Bergen-Hill + for tracking this down. + +Wed Aug 18 16:08:46 1999 Douglas C. Schmidt + + * tests/SOCK_Send_Recv_Test.cpp: Reformatted this test so + that it conforms to ACE programming guidelines. + +Wed Aug 18 13:49:30 1999 David L. Levine + + * ace/Makefile: if ACE_COMPONENTS = FOR_TAO, don't include + Filecache in UTILS_FILES. TAO doesn't need Filecache. + And, its ACE_Hash and ACE_Equal_To + explicit template instantiations collide with those in + ACE_wrappers/TAO/tao/POA.cpp. That precludes building + a shared libTAO for VxWorks, for example. And, it costs 14 Kb. + Thanks to Erik Johannes for helping + to find this solution. And reminding me to implement it :-) + +Wed Aug 18 13:16:09 1999 David L. Levine + + * ACE-INSTALL.html: clarify that PERL_PATH must include + the full path, including the perl.exe filename. Thanks + to Walter Welzel for + reporting this. + +Wed Aug 18 13:11:30 1999 Carlos O'Ryan + + * ace/OS.h: + * ace/OS.i: + The new methods to manipulate condition variable attributes + were not compiling on single threaded platforms. + +Wed Aug 18 13:09:36 1999 David L. Levine + + * tests/Makefile: don't add libDLL_Test.$(SOEXT) to BUILD + on VxWorks. Thanks to Walter Welzel + for reporting that it did get build for VxWorks with + shared libs enabled, but not successfully (or usefully). + +Wed Aug 18 10:36:16 1999 Nanbor Wang + + * ACE-INSTALL.html: Updated all references to MSVC 4.x. We no + longer support the compiler. Thanks to Welzel Walter + for pointing this out. + +Wed Aug 18 10:42:13 1999 Douglas C. Schmidt + + * ace/Timer_List_T.cpp (reset_interval): Added a constcast to + make SunC++ 4.2 happy. Thanks to Andy for reporting this. + + * ace/WFMO_Reactor.i (reset_timer_interval): The return type + was incorrect... Thanks to Andy and Jeff for reporting this. + +Wed Aug 18 09:47:51 1999 Carlos O'Ryan + + * tests/run_tests.pl: + The disabled tests were executed anyway, thanks to David for + pointing this out. + +Wed Aug 18 09:34:46 1999 Carlos O'Ryan + + * ace/FlReactor.cpp: + * ace/XtReactor.cpp: + Fixed typos in the code, this is only used in a few platforms, + that's why it didn't show up before. + +Tue Aug 17 20:02:55 1999 Douglas C. Schmidt + + * tests/Reactor_Timer_Test.cpp: Enhanced this test to exercise + the new reset_timer_interval() feature that Darrell added. It + appears to work quite well. Also, make the test easier to + understand by adding more structure. + + * ace/WFMO_Reactor.h, + * ace/WFMO_Reactor.cpp, + * ace/XtReactor.h, + * ace/XtReactor.cpp, + * ace/TkReactor.h, + * ace/TkReactor.cpp, + * ace/FlReactor.h, + * ace/FlReactor.cpp, + * ace/Select_Reactor_T.h, + * ace/Select_Reactor_T.cpp, + * ace/Reactor_Impl.h, + * ace/Reactor.h, + * ace/Reactor.cpp: + Exposed the new reset_interval() method Darrell added to all the + Timer mechanisms via a method in each of these Reactor's called + reset_timer_interval(). + + * ace/Timer_Hash_T.h: + * ace/Timer_Heap_T.h: + * ace/Timer_List_T.h: + * ace/Timer_Queue_T.h: + * ace/Timer_Wheel_T.h: + * ace/Timer_Hash_T.cpp: + * ace/Timer_Heap_T.cpp: + * ace/Timer_List_T.cpp: + * ace/Timer_Wheel_T.cpp: + Changed the return values of to be (1) + consistent (i.e., to return a value through all paths in the + method) and (2) to return -1 on failure and 0 on success. + Also replaced a number of C-style casts with + ACE_reinterpret_casts. + +Tue Aug 17 20:51:35 1999 Carlos O'Ryan + + * ace/TP_Reactor.h: + * ace/TP_Reactor.cpp: + The TP Reactor also experiences a performance hit if signal + masking is enabled. Therefore, we can now make this optional. + +Tue Aug 17 19:10:00 1999 Darrell Brunsch + + * ace/OS.cpp: Fixed typo. + + * ace/Stats.cpp: Removed some warnings showing up in MSVC when + assigning ACE_UINT64 values to ACE_UINT32 variables. Used + ACE_U64_TO_U32 to remove these warnings. + + * ace/Timer_Hash_T.h: + * ace/Timer_Heap_T.h: + * ace/Timer_List_T.h: + * ace/Timer_Queue_T.h: + * ace/Timer_Wheel_T.h: + * ace/Timer_Hash_T.cpp: + * ace/Timer_Heap_T.cpp: + * ace/Timer_List_T.cpp: + * ace/Timer_Wheel_T.cpp: + Added a new method, which can be used to + change the interval of a timer represented by a timer_id. + +Tue Aug 17 18:43:53 1999 Jeff Parsons + + * ace/OS.h: + * ace/OS.i: + Added wscmp and wsncmp functions to go with the existing + wslen and wscpy functions. These all use WChar*, so arg + size is independent of platform. These are to be used for + all manipulations of CORBA::WString. The two that were + added were needed for wstring tests in Param_Test. WChar* + versions of the other string manipulation functions will + be added as needed. + +Tue Aug 17 17:49:33 1999 Douglas C. Schmidt + + * ace/config-sunos5.5.h: If (_LARGEFILE_SOURCE) || (_FILE_OFFSET_BITS==64) + are enabled then #undef ACE_HAS_PROC_FS and ACE_HAS_PRUSAGE_T to + work around problems with Solaris 7. Thanks to Sridhara Rao + Dasu for reporting this. + + * ace/OS.i: Updated the readdir_r() conditional compilation so that + it'll work when _FILE_OFFSET_BITS == 64. Thanks to Sridhara Rao + Dasu for reporting this. + +Tue Aug 17 17:17:13 1999 Carlos O'Ryan + + * ace/OS.h: + * ace/OS.i: + * ace/OS.cpp: + Added new data type to handle condition variable attributes + (ACE_condattr_t). New methods to manipulate that data type + (ACE_OS::cond_attr_init and destroy) Add new method to create a + condition variable from a pre-initialized attribute. + + * ace/Synch.h: + * ace/Synch.i: + * ace/Synch.cpp: + Added new wrapper for the ACE_condattr_t structure. + + * ace/Token.h: + * ace/Token.cpp: + Use ACE_Condition_Attributes to minimize the number of memory + allocations and locks in the critical path of the TP_Reactor. + +Tue Aug 17 15:55:17 1999 Nanbor Wang + + * performance-tests/TCP/TCP.{dsw,dsp}: + * performance-tests/TCP/Makefile: + * performance-tests/TCP/tcp_test.cpp: Added the new test modified + by Carlos and a bit further by me. The test measures TCP + performance of a platform. We can also use it to test the + performance of various reactors. + +Tue Aug 17 14:52:40 1999 Darrell Brunsch + + * ace/config-win32.h: Added ACE_CC_COMPILER definition for MSVC. + ACE_CC_COMPILER is a string containing the compiler program. + +Tue Aug 17 13:48:27 CDT 1999 Loren Rittle + + * bin/update-ace+tao.sh: Use authoritative name list instead of + ad hoc list to update file. + +Tue Aug 17 06:33:05 1999 Douglas C. Schmidt + + * ace/Task.h: Clarified the comment regarding + open() and close() on ACE_Task_Base. Thanks to Jeff Franks + for suggesting this. + +Tue Aug 17 11:56:33 1999 Carlos O'Ryan + + * ace/Select_Reactor_T.h: + * ace/Select_Reactor_T.cpp: + Added option in the constructor to disable the signal handling + features in the select reactor. This eliminates a couple of + kernel level locks that are not needed in all applications. + + * ace/Stats.h: + * ace/Stats.cpp: + Now we keep track of the iteration where the minimum and maximum + latencies were achieved. + +Tue Aug 17 06:33:05 1999 Douglas C. Schmidt + + * bin: Added a new shell script called update-ace+tao.sh + that updates the ACE/TAO source tree to the latest + numeric-assigned version. Thanks to Loren Rittle + for contributing this. + +Mon Aug 16 20:09:12 1999 Carlos O'Ryan + + * ace/CDR_Stream.h: + * ace/CDR_Stream.i: + * ace/CDR_Stream.cpp: + Added new method to transfer the contents of one CDR stream into + another. This is used in the implementation of the ORB to + minimize the number of data copies, memory allocations and + locks. + + * ace/Message_Block.h: + * ace/Message_Block.i: + Added new method to replace the Data_Block, this method returns + the old one, letting the user decide how to deallocated the Data + block, possibly transfering it to another Message_Block. + +Mon Aug 16 15:58:12 1999 Steve Huston + + * ace/config-sunos5.5.h: + * include/makeinclude/platform_sunos5_sunc++.GNU: Added support + for using "compat=4" mode for Sun CC 5. To use this, do + "make compat4=1", or equivalent. Compat 4 uses -compat=4 with + its old iostreams, but the newer Sun CC 5 scheme of explicit + template instantiation. + +Mon Aug 16 11:59:18 1999 Vishal Kachroo + + * ace/SOCK_Dgram_Mcast.cpp (subscribe): Constructed and passed a + complete sockaddr_in to the ACE_OS::join_leaf () call. This was + just being passed sockaddr_in.sin_addr.s_addr. + +Sat Aug 14 18:01:27 1999 Carlos O'Ryan + + * tests/run_tests.pl: + Fixed some output messages that were going to stdout. + +Sat Aug 14 15:20:27 1999 Douglas C. Schmidt + + * ace/SOCK_Dgram_Mcast.cpp (subscribe): It looks like there + was a bug where we were passing an s_addr to ACE_OS::join_leaf() + rather than a sockaddr *. Fixing this also cleaned up some code + that was #ifdef'd for UNICOS. Thanks to Vishal for reporting + this. + + * ace/Process.h: Added a virtual to ~ACE_Process so that it + can be used for subclassing more readily. Thanks to Zoran + Ivanovic for suggesting this. + +Sat Aug 14 14:11:25 1999 Everett Anderson + + * ace/Remote_Tokens.cpp (tryacquire): Fixed so that it uses + ACE_Token_Request::TRY_ACQUIRE instead of RELEASE. + +Fri Aug 13 18:55:51 1999 Douglas C. Schmidt + + * ace/Handle_Set.h (ACE_Handle_Set): Clarified the meaning of the + nbits_ array. Thanks to Hao Ruan for + motivating this. + +Fri Aug 13 21:18:40 1999 David L. Levine + + * ace/OS.i (llseek): on Linux, moved extern "C" llseek () + declaration out of the function. Thanks to Tal Lev-Ami + for this fix. + +Fri Aug 13 20:50:02 1999 Nanbor Wang + + * ace/Select_Reactor_T.cpp (handle_events): Added a deactivation + check for non-threaded case. The original check was mixed with + thread owner check and thus got disabled under single-threaded + configurations. Thanks to Kirthika for reporting the problem. + +Fri Aug 13 13:11:16 1999 David L. Levine + + * bin/make_release: moved ACE_wrappers/TAO addition to + $release_files so that it's only done for the ACE+TAO kit. + +Fri Aug 13 12:44:08 1999 David L. Levine + + * Makefile,bin/make_release: added support (and documentation) + for creating kits with or without new tags, or using an old + tag; generated man pages; installation to the public ftp/http + site on ace; and zip files. + +Fri Aug 13 07:58:12 1999 David L. Levine + + * ace/OS.{h,i},README,config-osf1-4.0.h (llseek): added + ACE_HAS_LLSEEK support. Thanks to Tal Lev-Ami + for providing this. + +Thu Aug 12 22:05:37 1999 Douglas C. Schmidt + + * ace/OS.i (sema_wait, rw_tryrdlock, rw_trywrlock): + Replaced more ad hoc uses of the + + int error = 0; + ... + error = errno; + ... + errno = error; + + idiom with the ACE_Errno_Guard. + + * ace/Synch.h: Updated the comment to remind folks who would + like to have a working ACE_Process_Condition to contact us if + they know how to do this. Thanks to Craig Anderson + for motivating this. + + * tests/Process_Strategy_Test.cpp (open): Clarified the behavior + of the code that's run when fork() is used. Thanks to Umar + Syyid for motivating this. + +Thu Aug 12 21:30:09 1999 Alexander Babu Arulanthu + + * include/makeinclude/platform_vxworks5.x_g++.GNU: + added SIMNT support. + +Thu Aug 12 20:54:40 1999 David L. Levine + + * ace/config-osf1-4.0.h: added ACE_HAS_USING_KEYWORD + for cxx and Rational compilers. [Bug 163] + +Thu Aug 12 20:47:13 1999 Carlos O'Ryan + + * tests/Cached_Accept_Conn_Test.cpp: + Made the and variables global + instead of static, because otherwise Sun/CC automatic template + instantiation cannot find them at link time. The variables are + used in template code that is defined and used in the same file, + but Sun/CC does not seem to understand that. + +Thu Aug 12 17:14:35 1999 Jeff Parsons + + * ace/OS.h: + Changed typedef of WChar to ACE_UINT16. The CDR operations + are already using write_2, read_2 and SHORT_SIZE, and + in the process of implementing wchars and wstrings in + IDL, it's going to be important to optimize for the + Unicode common case. + +Thu Aug 12 16:24:16 1999 David L. Levine + + * bin/make_release: chdir up a level before removing the + staging directory. Thanks to Carlos for pointing out + that it's necessary, because we had chdir'd into it. + And for noticing that $build_commands got clobbered in + create_kit (). Obey $generate_man_pages setting. + +Thu Aug 12 16:03:03 1999 David L. Levine + + * ACE version 5.0.1 released. + +Thu Aug 12 15:49:00 1999 David L. Levine + + * Makefile,bin/make_release: build kits in /tmp staging + area, and copy to ace's ftp pub/ACE directory. + +Thu Aug 12 11:36:46 1999 Carlos O'Ryan + + * ace/OS.h: + * ace/Svc_Handler.cpp: + * ace/Future.cpp: + Some platforms require arguments in the exception thrown from + operator new. The standard (std::bad_alloc) does not require + any. + Added a new macro (ACE_throw_bad_alloc) that takes care of these + differences, including platforms that don't throw exceptions but + return something. + +Wed Aug 11 17:00:00 1999 Kirthika Parameswaran + + * tests/Cached_Accept_Conn_Test.cpp: + Removed run_event_loop and end_event_loop and put in + handle_events with a flag to stop the loop. This is a bug fix + for Bug183. + +Wed Aug 11 15:49:37 1999 David L. Levine + + * docs/ACE-guidelines.html: cleaned up ACE doc tool discussion. + Added Carlos' inlining heuristics. + +Wed Aug 11 13:53:20 1999 David L. Levine + + * ace/config-win32.h,config-win32-borland.h: added + ACE_HAS_MUTABLE_KEYWORD. Thanks to Jody for this request. + +Wed Aug 11 13:15:26 1999 David L. Levine + + * ace/config-g++-common.h,config-win32.h,config-win32-borland.h: + added ACE_HAS_EXPLICIT_KEYWORD + (for egcs only, in config-g++-common.h). Thanks to Jody Hagins + for this update. + + * ace/config-g++-common.h: added ACE_HAS_MUTABLE_KEYWORD. + +Wed Aug 11 13:10:32 1999 David L. Levine + + * ace/OS.h,README: added ACE_HAS_MUTABLE_KEYWORD support. + Thanks to Jody Hagins for providing it. + +Wed Aug 11 12:55:23 1999 Carlos O'Ryan + + * ace/Svc_Handler.cpp: + * ace/Future.cpp: + The throw expressions require a constructor, not just the type, + thanks to David for pointing this out. + +Wed Aug 11 10:12:11 1999 David L. Levine + + * ace/OS.h,Auto_Ptr.h,SString.h,README: added support for + ACE_HAS_EXPLICIT_KEYWORD. Thanks to Jody Hagins + for suggesting this. + +Wed Aug 11 10:07:36 1999 Carlos O'Ryan + + * ace/Future.cpp: + * ace/Local_Tokens.cpp: + * ace/Log_Msg.cpp: + * ace/Log_Record.cpp: + * ace/Svc_Handler.cpp: + * netsvcs/lib/Token_Handler.cpp: + Fixed several warnings and errors with gcc-2.95 + + * include/makeinclude/wrapper_macros.GNU: + Add -fcheck-new to the command-line of g++ when compiling with + exceptions disabled. In that case new operators could return 0 + and without this option the constructor will surely be invoked + on invalid data. + + * bin/auto_compile: + Use LOGNAME instead of USER to get the username because it is + more portable. + +Tue Aug 10 23:47:32 1999 Kirthika Parameswaran + + * ace/Cached_Connect_Strategy_T.h: + * ace/Caching_Utility_T.h: + * ace/Caching_Strategies_T.h: + * ace/Cleanup_Strategies_T.h: + * ace/Cache_Map_Manager_T.h: + * ace/Hash_Cache_Map_Manager_T.h: + + Defined macros to shorten lengthy class names for linkers which + couldnt grok long names (example: Sun Linker). Thanks to + Dr.Schmidt for this cool idea. + +Tue Aug 10 19:07:32 1999 Carlos O'Ryan + + * tests/run_tests.sh: + * tests/run_tests.pl: + * tests/run_tests.lst: + Move the list of tests to a separate file. This file is used to + drive both a perl version of the script and the old shell + version. + The new perl version is able to terminate programs that hang, + but still has problem with processes that fork children who then + hang for some reason. The perl script has to be ported to Win32 + too. + + * bin/run_all_list.pm: + Use the new tests/run_tests.pl script on Unix. + + * bin/run_all.pl: + Run all the test scripts in ACE and TAO, much like run_all_win32 + but for unix systems. + + * bin/auto_compile: + Remember to remove the disable file in case of errors. + +Tue Aug 10 18:08:30 1999 Jeff Parsons + + * ace/CDR_Stream.h: + * ace/CDR_STream.i: + Added all the necessary stuff for wstrings. + +Tue Aug 10 15:36:02 1999 David L. Levine + + * tests/Malloc_Test.cpp (main): removed unused argc + declaration, with ACE_LACKS_FORK && ! ACE_HAS_WIN32. + +Tue Aug 10 15:26:43 1999 David L. Levine + + * ace/OS.cpp (strptime): removed unreachable break after + return statement, in default case of switch statement. + +Tue Aug 10 14:46:12 1999 David L. Levine + + * ace/OS.{h,cpp},README: Changed support for ACE_OS::strptime () + to be configurable. VxWorks, LynxOS, and Chorus, for example, + don't have a native ::strptime (). The current emulation cost + 2 Kb, which will be objectionable to some embedded systems + developers. + + Replaced ACE_LACKS_STRPTIME with a combination + ACE_HAS_STRPTIME/ACE_LACKS_NATIVE_STRPTIME. ACE_HAS_STRPTIME + enables ACE_OS::strptime () support. ACE_LACKS_NATIVE_STRPTIME + lets ACE know that there's no native ::strptime (), so it then + uses its emulation. + + This has two advantages: it minimizes footprint in the default + case, and doesn't break builds on platforms that don't have + ::strptime (). It easily allows developers to configure ACE + identically, with respect to strptime, on their Unix, NT, and + embedded platforms. [Bug 219] + + * ace/config-sunos5.5.h,config-linux-common.h,config-osf1-4.0.h, + config-irix6.x-common.h: + added #define ACE_HAS_STRPTIME. [Bug 219] + +Tue Aug 10 12:28:54 1999 Jeff Parsons + + * bin/run_all_list.pm: + Added IDL test to the list. + +Mon Aug 09 16:49:45 1999 Nanbor Wang + + * ace/Process.{h,cpp} (wait): Re-visited the implementation so it + behaves the same on both UNIX and Win32. Thanks to Doug for + suggesting this. + +Mon Aug 09 16:30:24 1999 David L. Levine + + * docs/ACE-guidelines.html: added note to follow the + ACE documentation tools guidelines and restrictions. + Thanks to Doug for pointing this out. + +Mon Aug 09 16:06:01 1999 Nanbor Wang + + * include/makeinclude/wrapper_macros.GNU: Applied smart eg++ + recognizer. Thanks to Craig Anderson for + providing the patch. + +Mon Aug 9 11:29:36 1999 Douglas C. Schmidt + + * bin: Fixed html-windex so that it works when class names contain + the digit '3' in them, e.g., ACE_WIN32_Asynch_Accept, etc. + Thanks to Jody Hagins for reporting this + problem. + +Mon Aug 09 15:10:27 1999 Nanbor Wang + + * ace/Process.h (wait): Rewrote comments. + + * ace/Service_Config.h (open): Revised the comments for several + service_config flags. Thanks to Doug for pointing this out. + +Mon Aug 9 11:29:36 1999 Douglas C. Schmidt + + * examples/Reactor/Misc/test_demuxing.cpp: Added a destructor + to ~STDIN_Handler that will remove the event handler for STDIN + and the registered timer. + +Mon Aug 9 10:45:24 1999 Douglas C. Schmidt + + * ace/Memory_Pool.cpp (handle_signal): When working with an MMAP + memory pool, a "real" segmentation fault (not related to + updating the memory mapping) will cause the process to fail but + not write a core file. This is because that on linux (and + possibly other flavours of UNIX) core file writing is a default + behaviour which is disabled once you register a signal handler. + Even if the signal handler returns a bad return value which + crashes the program, a core file will not be written. + + The fix for this is to modify the mmap() signal handler so that + it de-registers the signal handler when detecting a segfault + with the mapping up to date and return an "ok" answer. the + program will attempt to access the illegal address again and + dump core. Thanks to Joseph Weihs for + contributing this fix. + + * ace/Signal: Changed the new handle_i() and register_handler_i() + methods to be static member functions so they can be called from + the static dispatch() member function. Thanks to Andreas + Geisler for reporting this. + +Mon Aug 9 10:33:50 1999 Douglas C. Schmidt + + * examples/ASX/CCM_App/SC_Server.cpp: Make sure to enable + the appropriate parameter for ACE_Service_Config::open() so that + static services will be enabled. Thanks to Michael Roth + for reporting this. + +Mon Aug 09 10:21:37 1999 David L. Levine + + * include/makeinclude/wrapper_macros.GNU (INCLDIRS): + removed "-I.". It's not necessary, because the preprocessor + will first look for headers in the current directory, when + appropriate. It causes trouble, for example, on NT for + VxWorks with Green Hills. Instead of including the system's + Signal.h, ACE's signal.h gets #included with "-I.". Thanks + to Dale Wood for helping to track + this down. [Bug 35] + + * include/makeinclude/platform_vxworks5.x_ghs.GNU: no longer + need to override INCLDIRS, now that it doesn't contain "-I.". + [Bug 35] + +Mon Aug 09 10:09:57 1999 David L. Levine + + * ace/OS.h,streams.h: moved ACE_OSTREAM_TYPE #define from + streams.h to OS.h, so that it is seen with + ACE_LACKS_IOSTREAM_TOTALLY. And, provide default value + for ACE_DEFAULT_LOG_STREAM. [Bug 208] + + * ace/Log_Msg.cpp: changed a couple remaining ostream occurrences + to ACE_OSTREAM_TYPE. Replaced conditional use of + ACE_DEFAULT_LOG_STREAM/&cerr with ACE_DEFAULT_LOG_STREAM, + now that it's always defined. [Bug 208] + +Mon Aug 09 09:47:06 1999 David L. Levine + + * ace/Log_Msg.{h,cpp}: replaced the ACE_Log_Msg_key_created_ + and ACE_Log_Msg_key_ file static variables with static + class members ACE_Log_Msg::key_created_ and + ACE_Log_Msg::log_msg_tss_key_, respectively. Only declare + ACE_Log_Msg::log_msg_tss_key_ if the platform supports TSS + (native or emulated). Replaced the ACE_Log_Msg_message_queue + file static variable with ACE_Log_Msg_Manager::message_queue_. + Cleaned up Log_Msg.cpp. [Bug 86] + + Thanks to Umar Syyid for suggesting that + we remove the file static variables. + +Mon Aug 09 09:33:43 1999 David L. Levine + + * ace/OS.h: #define ECOMM (to ECONNABORTED) if it's not + already #defined. This allows support on NT. Thanks to + Andy for reporting this. + +Mon Aug 9 07:45:19 1999 Douglas C. Schmidt + + * ace/Signal.h: Modified the behavior of the + ACE_Sig_Handler::dispatch() method so that on Win32 it'll + automagically re-register the signal handler after the + handler_signal() method returns with a non -1 value. Thanks to + Andreas Geisler for suggesting + this. + + * tests/Malloc_Test.cpp: Win32 didn't seem to like a 32k + offset for the virtual address. Let's try 64k instead. Thanks + to Nanbor for reporting this. + + * tests/Malloc_Test.cpp: Changed the sense of the conditional + compilation test from && !defined (ACE_WIN32) to || defined + (ACE_WIN32) so that this will run on Win32. Thanks to + Nanbor for reporting this. + + * ace/OS.i: Cleaned up the coding style for the sigset* + wrapper functions. + +Sun Aug 08 21:19:42 1999 David L. Levine + + * ace/config-osf1-4.0.h: removed unreferenced_function_param + warning suppression. It's no longer needed with the fixes + to avoid unreferenced function parameters. [Bug 217] + +Fri Aug 06 15:20:00 1999 Kirthika Parameswaran + + * ACE-INSTALL.html: added information about compilation on + SunOS5.6 using egcs1.1.2. + +Fri Aug 06 13:47:51 1999 David L. Levine + + * ACE-INSTALL.html: added note about disabling optimization + for some files with Tornado II. + +Fri Aug 06 13:39:48 1999 David L. Levine + + * ACE-INSTALL.html: updated VxWorks build information, + specifically, the instructions for building on NT host. + And, added information about linking libACE.so and libTAO.so + into the VxWorks kernel. Thanks to + Erik Johannes and Stephane Chatre + for helping to clarify and verify. + +Fri Aug 06 12:10:19 1999 Nanbor Wang + + * ace/config-win32-common.h: Added + ACE_HAS_POSITION_INDEPENDENT_MALLOC. + + * ace/OS.cpp (strptime_getnum): getnum should be strptim_getnum. + + * ace/config-win32-common.h: Added ACE_LACKS_STRPTIME. Thanks to + Andy for pointing this out. + +Fri Aug 06 11:13:27 1999 David L. Levine + + * ace/streams.h,OS.h,Log_Msg.h: with ACE_LACKS_IOSTREAM_TOTALLY, + removed the hack that re-#defined ostream. Replaced that + with an ACE_OSTREAM_TYPE macro. [Bug 208] + +Fri Aug 06 10:49:34 1999 David L. Levine + + * ACE-INSTALL.html: updated egcs versions that we use + (1.1.1 and 1.1.2). + +Fri Aug 6 08:43:22 1999 Douglas C. Schmidt + + * examples/Log_Msg/test_log_msg.cpp (main): Changed this + test so that it no longer abort()s, but instead calls + ACE_OS::_exit(). This should help avoid confusion when it's + run. Thanks to Kevin Lyda for + reporting this. This fixes [BUGID:211]. + + * ace/SOCK_Dgram_Mcast: The QoS-enabled subscribe() call must + call the QoS-enabled open() call, rather than the "regular" + open() call because otherwise QoS information isn't initialized! + Thanks to Vishal for pointing this out. + +Fri Aug 06 08:22:00 1999 David L. Levine + + * ace/Object_Manager.cpp: with ACE_SHOULD_MALLOC_STATIC_OBJECT_LOCK, + made the ACE_Static_Object_Lock_lock instance static, to + match the non-ACE_SHOULD_MALLOC_STATIC_OBJECT_LOCK behavior. + Thanks to Jody for this change. + + Also, consolidated the code to alway use the + ACE_Static_Object_Lock_Type typedef. + +Fri Aug 06 06:55:49 1999 Jody Hagins + + * include/makeinclude/rules.local.GNU (depend.local): added + ACE_DEPEND_SED_CMD hook, so that users can add sed scripts. + An example is to use relative instead of absolute paths + in dependencies. I put this into it to get the desired + (site-specific) functionality: + + USER_DEPEND_SED_CMD=-e "s;$(PRISM_ROOT);\$$(PRISM_ROOT);g" + +Thu Aug 5 22:26:18 1999 Douglas C. Schmidt + + * ace/OS.h (ACE_OS): Added support for strptime() for platforms that + lack it. Thanks to Kevin Lyda for + contributing this. Note that if a platform fails to compile + because it doesn't support this function, please enable + ACE_LACKS_STRPTIME in the config.h file and send us email. + +Thu Aug 05 21:37:05 1999 David L. Levine + + * ace/Object_Manager.cpp (ACE_Static_Object_Lock_lock, + ACE_Static_Object_Lock::instance, cleanup_lock): + added support for ACE_SHOULD_MALLOC_STATIC_OBJECT_LOCK. + It's not (currently) used by ACE. But, applications may + find it useful for avoiding recursive calls if they have + overridden operator new. Thanks to Jody Hagins + for contributing it. + +Thu Aug 05 21:04:20 1999 David L. Levine + + * ace/streams.h: removed #includes of istream.h and ostream.h + with ACE_HAS_STD_CPP_LIBRARY and ACE_USES_OLD_IOSTREAMS. + Those headers aren't available with Sun CC. I think that + they might be unnecessary with egcs for Tornado II. Thanks + to Doug for reporting this. Ref. + Thu Aug 05 14:31:48 1999 David L. Levine . + +Thu Aug 5 16:43:29 1999 Douglas C. Schmidt + + * tests/Malloc_Test.cpp: Rearranged the #ifdefs so that + we don't do much of anything if the platform doesn't support + processes. Thanks to David Levine for reporting this. + +Thu Aug 5 16:27:15 1999 Carlos O'Ryan + + * include/makeinclude/rules.lib.GNU: + * include/makeinclude/wrapper_macros.GNU: + Added new macro (ACE_SHLIBS) to control the final link line of + shared libraries. Use this macro to list the -l options + required by your shared library that are *not* included in the + system LIBS macro, for example "-lTAO -lACE"; the system will + automagically change that to be "-lTAOshr -lACEshr" on AIX. + This also decouples the shared library link line from the + binaries, which use LDLIBS and ACELIB, allowing the application + developers to easily mix shared libraries and binaries in the + same directory, even if the binaries depend on the generated + shared library. + +Thu Aug 05 15:44:39 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_g++.GNU: on + WIN32 host, assume that $(CC) is on the user's path (or is a + full pathname). That way, we don't need to determine ACE_CC + dynamically, which causes trouble with the WIN32 shell. Thanks + to Erik Johannes for reporting this. + [NOTE: this had been committed on a branch, but never on the + main line.] + +Thu Aug 05 15:35:21 1999 Nanbor Wang + + * apps/gperf/src/gperf.dsp: + * apps/gperf/src/gperf_lib.dsp: + * ace/ace_lib.dsp: + * ace/ace_dll.dsp: Changed the default configuration to Win32 + Debug so if anyone doesn't know what he is doing, he'll most + likely to success. + +Thu Aug 05 15:30:32 1999 David L. Levine + + * ace/streams.h: with ACE_LACKS_IOSTREAMS_TOTALLY, always + #define ostream FILE *. [Bug 208] + +Thu Aug 05 15:13:01 1999 David L. Levine + + * ace/config-lynxos.h: added note on why we don't #define + ACE_HAS_POSIX_SEM for LynxOS. [Bug 164] + +Thu Aug 05 14:53:44 1999 David L. Levine + + * ace/config-vxworks5.x.h: added support for the Diab + compiler, version 4.2a or later. Compilation succeeds but links + still have unresolved symbols related to new and delete. [Bug + 207] + + * ace/OS.h,README: added support for ACE_LACKS_NEW_H. [Bug 207] + + * ace/OS.h: for VxWorks, use the ANSI prototypes for + inet_ntoa.h, etc., for all VxWorks compilers, not just Green + Hills. This allows compilation to succeed with Diab 4.2a. [Bug + 207] + + Thanks to Erik Johannes for helping with + this quick port to Diab 4.2a for VxWorks. + +Thu Aug 05 14:31:48 1999 David L. Levine + + * ace/iosfwd.h: #include iosfwd with + ACE_HAS_MINIMUM_IOSTREAMH_INCLUSION as well as without + ACE_HAS_OLD_IOSTREAMS. This allows builds to succeed for + Tornado II with its egcs. [Bug 206] + + * ace/streams.h: added #includes of istream.h, ostream.h, + and iomanip.h with ACE_HAS_STD_CPP_LIBRARY and + ACE_USES_OLD_IOSTREAMS. It's necessary for builds for Tornado + II, but should be harmless and helpful on other platforms. [Bug + 206] + + Thanks to Matthias Schumann for + first reporting the solution to the build problem for Tornado II. + +Thu Aug 5 13:03:28 1999 Douglas C. Schmidt + + * ace/Malloc_T.cpp (shared_free): Looks like ACE_reinterpret_cast + isn't the right thing to do... Let's just use good ol' + fashioned C-style casts instead. Thanks to Bala for reporting + this. + +Thu Aug 05 12:05:42 1999 David L. Levine + + * include/makeinclude/wrapper_macros.GNU: moved minimum_corba + make flag support from wrapper_macros.GNU to TAO/rules.tao.GNU. + Thanks to Bala for noticing this. [Bug 204] + +Thu Aug 05 12:01:14 1999 Nanbor Wang + + * ace/Malloc_T.cpp (shared_free): Applied + ACE_reinterpret_cast (ACE_Malloc_Header*, yadda) to serveral + pointer comparisons. MSVC was complaining because the pointers are + of different types. + +Thu Aug 5 11:57:23 1999 Balachandran Natarajan + + * include/makeinclude/wrapper_macros.GNU (YACC): Removed the + definition of interface_repo a command line option with 'make' + to $TAO_ROOT/rules.tao.GNU as per Dr.Levine's suggestions. + +Thu Aug 05 08:43:27 1999 David L. Levine + + * include/makeinclude/platform_vxworks5.x_diab.GNU: added. + Thanks to Erik Johannes for + helping to figure out its contents. Note that compiles + succeed with Diab 4.2a for VxWorks, but links do not, yet. + +Thu Aug 05 08:37:09 1999 David L. Levine + + * ACE-INSTALL.html: added Kirk Davies' notes for running + the ACE tests on Tornado II, without NFS installed. + +Thu Aug 5 00:15:45 1999 Douglas C. Schmidt + + * ace/Based_Pointer_T: Changed the type of index for operator[] + and operator+= to be int instead of long so that it'll work + correctly when constant values are used. Thanks to + Nanbor and KCC for pointing this out! + +Wed Aug 4 19:46:33 1999 Carlos O'Ryan + + * tests/run_tests.sh: + Disabled the New_Fail_Test because it breaks other + compilations. + +Wed Aug 4 15:56:51 1999 Douglas C. Schmidt + + * tests/Malloc_Test.cpp: Make this test work even if + ACE_HAS_POSITION_INDEPENDENT_MALLOC isn't set for a particular + platform. + + * tests/Malloc_Test.h: Added a #include for + "ace/Based_Pointer_T.h". Thanks to Carlos for pointing out the + need for this. + +Wed Aug 4 17:07:12 1999 Balachandran Natarajan + + * include/makeinclude/wrapper_macros.GNU : Made the interface + repository files to be compiled by default. If the user does not + want these files to be compiled he can turn it off by issuing + interface_repo=1 with the 'make' command. + +Wed Aug 4 15:56:51 1999 Douglas C. Schmidt + + * ace/Task.h (ACE_Task_Base): Changed the parameter name + to , which is more descriptive. + Thanks to John Forest for + motivating this. + +Wed Aug 4 15:54:51 1999 Carlos O'Ryan + + * netsvcs/clients/Naming/Client/Makefile: + * netsvcs/clients/Naming/Dump_Restore/Makefile: + If the libraries are specified as dependencies then they don't + need to be listed in LDLIBS + +Wed Aug 4 13:20:54 1999 Douglas C. Schmidt + + * ace/Malloc.h: Ok, let's try this again ;-). Removed the + forward declarations and typedefs and replaced them with + #defines. Hopefully, this will make all the compilers happy! + +Wed Aug 04 12:58:53 1999 Nanbor Wang + + * tests/*.dsp: Fixed Alpha configurations. + +Wed Aug 4 12:26:53 1999 Carlos O'Ryan + + * ace/Malloc.h: + Added more forward declarations for the compilations that + enabled PIM. + +Wed Aug 4 11:59:57 1999 Carlos O'Ryan + + * ace/Malloc.h: + The previous fix did not work, i used forward declarations to + make it work. + +Wed Aug 4 09:28:35 1999 Douglas C. Schmidt + + * ace/Malloc.h: Replaced the use of typedefs for macros + to define ACE_MALLOC_HEADER_PTR ACE, ACE_NAME_NODE_PTR, + ACE_CHAR_PTR to try to avoid "incomplete type" messages from + certain versions of G++. Macros are "later binding" than + typedefs for this situation. + + * ace/Asynch_Acceptor.cpp (handle_accept): Fixed an expression + that had incorrect parentheses. Thanks to David Digby + for reporting this. + +Wed Aug 04 02:40:45 1999 Nanbor Wang + + * tests/run_tests.bat: * tests/tests.dsw: + * tests/Malloc_Test.dsp: + * tests/version_tests/Malloc_Test.dsp: Added project files for the + Malloc_Test and added the test in run_test.bat. + +Tue Aug 3 22:39:34 1999 Douglas C. Schmidt + + * tests/{Makefile,run_tests.sh}: Added support for the new + Malloc_Test. + + * tests/Malloc_Test.cpp: Added a new test that exercises the new + position-independent ACE_Malloc with ACE_MMAP_Memory_Pool and + ACE_Process_Mutex. + + * ace/Malloc_T: Added an accessor called mutex() to allow + applications to acquire()/release() the lock used to provide + mutual exclusion to an allocator. + + * tests/SV_Shared_Memory_Test.cpp: Reformatted this test to + conform to ACE programming guidelines. + + * ace/Memory_Pool: The void * and char * arguments to the various + ACE_*_Memory_Pool_Options constructors should be const; now they + are! + + * examples/Shared_Malloc/test_position_independent_malloc.cpp (main): + Added auto_ptr support to this test, as well. + + * examples/Shared_Malloc/test_multiple_mallocs.cpp: Enhanced + this test so that it uses auto pointers and also now takes + advantage of position-independent malloc, when possible. + + * examples/Shared_Malloc/test_position_independent_malloc.cpp: + Finished integrating all the features of this test. It's pretty + cool now! + + * examples/Shared_Malloc/Makefile: Updated the LSRC target so + 'make depend' works correctly... + + * ace/Select_Reactor_Base.cpp (find): Don't set errno = ENOENT + if we find a valid mapping of handle to Event_Handler. Thanks + to Hao Ruan for reporting this. + + * ace/Based_Pointer_T: Added support for operator= (const + ACE_Based_Pointer_Basic &). + + * ace/Based_Pointer_T: Added definitions for + ACE_Based_Pointer::operator= and + ACE_Based_Pointer_Basic::operator= to make EGCS happy. + + * ace/Malloc.h: Factored out the common code for + ACE_Based_Pointer<> and the underlying types, thereby reducing + the number of #ifdef's. + + * ace/Based_Pointer_T: Added an operator CONCRETE *() method + + * ace/Based_Pointer_Repository.cpp: The original implementation + of this classes stored a pointer to the size of each mapped + address, rather than just the value. This was causing problems + when used for shared memory because the memory was allocated in + one process and freed in another. This is now fixed by not + storing a pointer, but by storing the value instead. Thanks to + Nanbor for reporting this. + +Tue Aug 3 23:43:47 1999 Carlos O'Ryan + + * netsvcs/clients/Naming/Client/Makefile: + * netsvcs/clients/Naming/Dump_Restore/Makefile: + Fixed dependencies so parallel compilations (using the -j + option) will work correctly. This fixes [BUGID:187] + +Tue Aug 3 23:23:18 1999 Kirthika Parameswaran + + * ace/Cached_Connect_Strategy_T.{h,cpp} (cleanup): + Added a specialised method to prevent memory leaks with old + versions of g++. This method calls the underlying iterator + and does the cleanup. + + * ace/run_tests.sh: + Removed purify check over Cached_Accept_Conn_Test and + Cached_Conn_Test since they no longer leak memory when built + using old version of g++. + +Tue Aug 3 22:23:18 1999 Balachandran Natarajan + + * include/makeinclude/wrapper_macros.GNU: Added an ifeq flag for + the interface repository. Compiling with interface_repo=1 will + compile the files for interface repository. + +Tue Aug 03 21:17:00 1999 Nanbor Wang + + * tests/SOCK_Connector_Test.cpp (host_is_up): Added a time out + value of 5 second to spped up the test. Thanks to Jody Hagins + for submitting the patch. + +Tue Aug 03 18:30:47 1999 Kirthika Parameswaran + + * ace/Strategies.h (ACE_Connection_Recycling_Strategy): + Added a new pure virtual method which will + provide a non-locking implementation of the + method. + + * ace/Strategies_T.h (ACE_Cached_Connect_Strategy): + * ace/Cached_Connect_Strategy_T.h (ACE_Cached_Connect_Strategy_Ex): + Made public. + + * ace/Caching_Utility_T.{h,cpp} + (ACE_Refcounted_Recyclable_Caching_Utility): Added this class + which caters to purging of refcounted and recyclable handlers. + + * ace/Cleanup_Strategy_T.{h,cpp}: + (ACE_Refcounted_Recyclable_Cleanup_Strategy): Added this class + which caters to the cleanup of handlers which are refcounted and + recyclable. Heres where the necessity of making the non-locking + version of public arose in the first place. + + * ace/OS.h (ACE_Recyclable_State): + Removed hardcoded values and left the enum values to the + discretion of the compiler. + +Tue Aug 03 16:58:08 1999 Joe Hoffert + + * ace/ATM_Acceptor.{h,cpp}: + * ace/ATM_Connector.{h,cpp}: + * ace/ATM_Stream.{h,i,cpp}: + * ace/ATM_Params.cpp: + * ace/ATM_QoS.cpp: + * ace/XTI_ATM_Mcast.{h,i,cpp}: + Fixed inlining errors. + +Tue Aug 03 16:15:00 1999 Chris Gill + + * ace/Auto_Ptr.h: created ACE_AUTO_PTR_RESET macros, which depend on + whether or not ACE_AUTO_PTR_LACKS_RESET is defined. + + * ace/config-kcc-common.h: defined ACE_AUTO_PTR_LACKS_RESET, because + KCC native auto_ptr support is difficult to disable, and implements + an older version of auto_ptr (without the reset method). + +Tue Aug 03 13:26:47 1999 Nanbor Wang + + * ace/Service_Repository.cpp (instance): Check to see if + the ACE_Object_Manager is being shutting down before creating a + new instance of Service_Repository. Otherwise, we may be + creating a new service repository just for shutting it down. + Thanks to Doug for noticing this. + + * ace/Service_Config.cpp (fini_svcs): Since it is now possible for + ACE_Service_Repository::instance to return 0 during program + shutdown, we must check its value before using it. + + Notice that the change assumes people don't do stupid things + like initializing the Service_Config during program shutdown. + +Mon Aug 2 23:21:01 1999 Carlos O'Ryan + + * bin/auto_compile: + Added several flags to: disable test execution, specify the list + of build directories on the command line, send email on + successful compilation, keep a more detailed history, etc. + +Mon Aug 02 18:38:37 1999 Joe Hoffert + + * ace/ATM_Acceptor.{h,i,cpp} : + * ace/ATM_Connector.{h,i,cpp} : + * ace/ATM_Params.{h,i,cpp} : + * ace/ATM_QoS.{h,i,cpp} : + * ace/ATM_Stream.{h,i,cpp} : + * ace/XTI_ATM_Mcast.{h,i,cpp} : + * ace/ATM_Addr.{h,cpp}: + * ace/Makefile: + * ace/TLI_Connector.i: + Added new ATM wrapper files to make the mechanism of sockets or + XTI transparent when using the ATM protocol. Modified existing + files to take advantage of these wrapper classes. + + * examples/IPC_SAP/ATM_SAP : + * examples/IPC_SAP/ATM_SAP/CPP-client.cpp : + * examples/IPC_SAP/ATM_SAP/CPP-server.cpp : + * examples/IPC_SAP/ATM_SAP/Makefile : + Added new test directory and programs to test ATM wrapper classes. + + * examples/IPC_SAP/TLI_SAP/CPP-ATM-client.cpp: + Modified existing test program to utilize new ATM_QoS class. + +Mon Aug 02 17:24:05 1999 Nanbor Wang + + * ace/OS.h (ACE_DL_TYPE): Only WinCE uses wchar_t DL type, we'll + just deal with this in ACE_OS::dlsym instead of defining + different types here. + + * ace/OS.i (dlsym): GetProcAddress is defined differently on + Windows CE and other Win32 platforms so we need to treat them + differently. + + * ace/Malloc.h (ACE_Malloc_Header): Added a dummy member function + to prevent egcs from complaining "all member functions are + private." + + * ace/Based_Pointer_Repository.cpp: Fixed the use of map + iterators. + + * examples/Shared_Malloc/test_position_independent_malloc.cpp + (main): Delete the allocator before exiting from main. + + * ace/Malloc.h (ACE_Malloc_Header,ACE_Name_Node,ACE_Control_Block): + Added an unimplemented assignment operator for this class. + Otherwise, some compilers will try to use + ACE_Based_Pointer_Base::operator= which is not implemented. + +Mon Aug 2 09:58:20 1999 Ossama Othman + + * netsvcs/lib/Name_Handler.cpp (init): + * netsvcs/lib/Server_Logging_Handler_T.cpp (init): + * netsvcs/lib/TS_Clerk_Handler.cpp (init): + + Changed cast to ACE_SignalHandler to allow it to compile under + gcc 2.95. Thanks to Jeffrey Franks for + reporting the problem. + +Sun Aug 1 15:58:39 1999 James CE Johnson + + * docs/tutorials/colorize: + Added
     wrapper around generated output.
    +
    +        * docs/tutorials/Chap_03/Makefile:
    +        * docs/tutorials/Chap_03/README:
    +        * docs/tutorials/Chap_03/mm.cpp:
    +        * docs/tutorials/Chap_03/ex03.html: mm.cpp (and ex03.html) are a
    +          slightly modified version of ex02.html that uses a memory mapped
    +          file instead of SYSV SHMEM.  To work around the lack of fork()
    +          in Win32, the app must be executed once in server mode
    +          (argv[1] == 's') and again in client mode.
    +
    +Sun Aug  1 15:58:39 1999  Douglas C. Schmidt  
    +
    +        * ace/Memory_Pool.cpp: If the base_addr is 0 for the
    +          ACE_MMAP_Memory_Pool_Options, then we will disable the
    +          "use_fixed_addr" option since it's going to cause big trouble to
    +          mmap() at location 0!  Plus, when 0 is used it's intended as an
    +          indication that the application wants the OS to choose the
    +          appropriate mapping.  This minor change in semantics works
    +          particularly well with the new
    +          ACE_HAS_POSITION_INDEPENDENT_MALLOC feature, because we can now
    +          let the OS choose the mapping location with out fear of begin
    +          mapped to a different location!
    +
    +        * ace  /Memory_Pool.cpp: Conditionally include
    +          ace/Based_Pointer_Repository.h when
    +          ACE_HAS_POSITION_INDEPENDENT_MALLOC is defined.
    +
    +        * ace/config-sunos5.5.h: Enabled the
    +          ACE_HAS_POSITION_INDEPENDENT_MALLOC macro by default.  Let's see
    +          whether this breaks lots of stuff ;-).
    +
    +        * ace/OS.h: Moved the definition of ACE_IPPROTO_TCP down
    +          further in this file so that the IPPROTO_TCP macro would be
    +          defined.
    +
    +        * ace/Based_Pointer_T.cpp: Removed an inappropriate use of
    +          ACE_INLINE in the *.cpp file.  Thanks to DEC UNIX C++ for
    +          reporting this!
    +
    +Sun Aug 01 02:41:44 1999  Nanbor Wang  
    +
    +        * examples/Shared_Malloc/Shared_Malloc.dsw
    +        * examples/Shared_Malloc/position_independent_malloc.dsp: Added
    +          this new project file for position independent malloc test.
    diff --git a/ACE/FAQ b/ACE/FAQ
    new file mode 100644
    index 00000000000..c184fbde84c
    --- /dev/null
    +++ b/ACE/FAQ
    @@ -0,0 +1,1847 @@
    +There are many changes and improvements in the new version of ACE.
    +The ChangeLog file contains complete details about all of them.
    +
    +I've tested ACE thoroughly on Solaris 2.3 and 2.4 with the SunC++ 4.x
    +compiler and Centerline 2.x.  I've also tested it with the SunC++ 3.x
    +compiler on the SunOS 4.x platform.  However, I've not been able to
    +test it on other platforms.  If anyone has time to do that, and can
    +report the results back to me I'd appreciate that.
    +
    +Please let me know if you have any questions or comments.
    +
    +	Doug
    +
    +----------------------------------------
    +
    +1. SIGHUP
    +
    +> 1) Where the heck does the HUP signal get registered for the 
    +> $ACE_ROOT/tests/Service_Configurator/server stuff? I looked there and
    +> in $ACE_ROOT/libsrc/Service_Configurator. No luck. I guess I am
    +> just blind from reading.
    +
    +	Take a look in ./libsrc/Service_Configurator/Service_Config.h.
    +The constructor for Service_Config is where it happens:
    +
    +  Service_Config (int ignore_defaults = 0, 
    +		  size_t size = Service_Config::MAX_SERVICES, 
    +		  int signum = SIGHUP);
    +
    +----------------------------------------
    +2. Multi-threaded Signal_Handler support
    +
    +> It appears Signal_Handler is
    +> not setup for multi-threaded apps.  How do you handle signals
    +> in different threads? Do I have to put in the hooks in my app or should
    +> it go in the Threads arena?
    +
    +	Ah, good question...  My design follows the approach espoused
    +by Sun.  Basically, they suggest that you implement per-thread signal
    +handling atop of the basic UNIX signal handlers (or in the case of
    +ACE, the handle_signal() callbacks on Event_Handler subclasses) by
    +using the thread id returned by thr_self() to index into a search
    +structure containing the handlers.  This should be pretty straight
    +forward to layer atop the existing ACE Signal_Handler mechanisms.
    +However, you might ask yourself whether you really want (1) separate
    +signal handler *functionality* in different threads or (2) different
    +threads that mask out certain signals.  The latter might be easier to
    +implement and reason about!
    +
    +----------------------------------------
    +3. Problems compiling ACE with G++
    +
    +> I substituted -lg++ for -lC in macro_wrappers.GNU and ran make.
    +> 
    +> Most stuff seemed to build.  Continually got messages like the following:
    +> ld: /usr2/tss/jvm/ACE_wrappers/lib/libASX.a: warning: archive has no table of c
    +> ontents; add one using ranlib(1)
    +> ld: /usr2/tss/jvm/ACE_wrappers/lib/libThreads.a: warning: archive has no table 
    +> of contents; add one using ranlib(1)
    +> ld: /usr2/tss/jvm/ACE_wrappers/lib/libSPIPE.a: warning: archive has no table of
    +>  contents; add one using ranlib(1)
    +> ld: /usr2/tss/jvm/ACE_wrappers/lib/libASX.a: warning: archive has no table of c
    +> ontents; add one using ranlib(1)
    +> ld: /usr2/tss/jvm/ACE_wrappers/lib/libThreads.a: warning: archive has no table 
    +> of contents; add one using ranlib(1)
    +> ld: /usr2/tss/jvm/ACE_wrappers/lib/libSPIPE.a: warning: archive has no table of
    +>  contents; add one using ranlib(1)
    +
    +> no matter how many times I used ranlib or removed the libraries and re-compiled
    +> or whatever.  Perhaps these are System V specific and will not work on 4.1.3?
    +
    +	Yes, that's exactly right.  If you look at the files, they all
    +contain ifdef's for features that aren't included in the
    +./include/makeinclude/wrapper_macros.GNU file.  To make this more
    +obvious, I've enclosed the following message in the ACE-INSTALL.html file:
    +
    +	* Sun OS 4.1.x
    +
    +		  Note that on SunOS 4.x you may get warnings from the 
    +		  linker that "archive has no table of contents; add
    +		  one using ranlib(1)" for certain libraries (e.g.,
    +		  libASX.a, libThreads.a, and libSPIPE.a).  This 
    +		  occurs since SunOS 4.x does not support these features.
    +
    +> never able to get .so -- assume these are shared libraries that gcc can not
    +> deal with.
    +
    +	Yes, if you use the stock gcc/gas/gnu ld
    +compiler/assembler/linker, you won't get shared libraries to work.  It
    +is possible to hack this by using the "collect" version of g++.
    +However, as usual, I strongly advise people to stay away from g++ if
    +you want to use shared libraries or templates.
    +
    +> got some linker errors as follows:
    +> 
    +> g++ -g  -DACE_NTRACE  -DACE_HAS_MT_SAFE_SOCKETS -DACE_HAS_NO_T_ERRNO -DACE_HAS_
    +> OLD_MALLOC -DACE_HAS_POLL -DACE_HAS_SEMUN -DACE_HAS_SETOWN -DACE_HAS_STRBUF_T -
    +> DACE_HAS_STREAMS -DACE_HAS_SVR4_DYNAMIC_LINKING -DACE_HAS_TIUSER_H -DACE_HAS_SY
    +> S_FILIO_H -DACE_PAGE_SIZE=4096 -DACE_HAS_ALLOCA -DACE_HAS_CPLUSPLUS_HEADERS -DA
    +> CE_HAS_SVR4_SIGNAL_T -DACE_HAS_STRERROR -DMALLOC_STATS -I/usr2/tss/jvm/ACE_wrap
    +> pers/include  -I/usr2/tss/jvm/ACE_wrappers/libsrc/Shared_Malloc  -o test_malloc
    +>  .obj/test_malloc.o -L/usr2/tss/jvm/ACE_wrappers/lib  -Bstatic -lSemaphores -lS
    +> hared_Malloc -lShared_Memory -lReactor -lThreads -lMem_Map -lLog_Msg -lFIFO -lI
    +> PC_SAP -lMisc -lnsl -lg++
    +> ld: /usr2/tss/jvm/ACE_wrappers/lib/libThreads.a: warning: archive has no table 
    +> of contents; add one using ranlib(1)
    +> ld: Undefined symbol 
    +>    _free__t6Malloc2Z18Shared_Memory_PoolZ13PROCESS_MUTEXPv 
    +>    _free__t6Malloc2Z17Local_Memory_PoolZ10Null_MutexPv 
    +>    _malloc__t6Malloc2Z18Shared_Memory_PoolZ13PROCESS_MUTEXUl 
    +>    _malloc__t6Malloc2Z17Local_Memory_PoolZ10Null_MutexUl 
    +>    _remove__t6Malloc2Z17Local_Memory_PoolZ10Null_Mutex 
    +>    ___t6Malloc2Z17Local_Memory_PoolZ10Null_Mutex 
    +>    _print_stats__t6Malloc2Z17Local_Memory_PoolZ10Null_Mutex 
    +>    _remove__t6Malloc2Z18Shared_Memory_PoolZ13PROCESS_MUTEX 
    +>    ___t6Malloc2Z18Shared_Memory_PoolZ13PROCESS_MUTEX 
    +>    _print_stats__t6Malloc2Z18Shared_Memory_PoolZ13PROCESS_MUTEX 
    +> collect2: ld returned 2 exit status
    +> gcc: file path prefix `static' never used
    +> make[2]: *** [test_malloc] Error 1
    +> make[2]: Leaving directory `/usr2/tss/jvm/ACE_wrappers/tests/Shared_Malloc'
    +> <========     End all: /usr2/tss/jvm/ACE_wrappers/tests/Shared_Malloc
    +
    +	That looks like a problem that G++ has with templates.  I
    +don't know of any reasonable solution to this problem using g++.
    +
    +> Finally decided there was enough stuff that it looked like I might have some
    +> thing so I tried to run some tests and could not find so much as one piece
    +> of documentation that might give me some clue about running tests.
    +
    +You should take a look at ./tests/Service_Configurator/server/README
    +file.  That explains how to run the more complicated tests.  As for
    +the other tests, it is pretty straight forward if you look at the
    +./tests/IPC_SAP/SOCK_SAP and ./tests/Reactor/* directory code to
    +figure out how to run the tests.  I don't have a Q/A department, so
    +any documentation has to come from volunteers.
    +
    +----------------------------------------
    +4. Is there any docs or man pages on the Log_Record class?
    +
    +There is a paper in the C++_wrappers_doc.tar.Z file on ics.uci.edu
    +called reactor2.ps that has some examples of using Log_Record.  The
    +./apps/Logger directories show several examples using Log_Record.  
    +Finally, the source code for Log_Record is pretty short (though it
    +clearly could be commented better ;-)).
    +
    +----------------------------------------
    +5. Signal handling prototypes
    +
    +> According to the man page on sigaction on our system, that line
    +> should look something like the following:
    +> 
    +>       sa.sa_handler = SIG_DFL;
    +
    +	The problem is that most versions of UNIX I've come across
    +don't have a correct prototype for this field of struct sigaction.
    +That's why I define two variants of signal handler typedefs: one that
    +is a typedef of the "correct version" (which I call SignalHandler) and
    +one of which is a typedef of the "incorrect version" (which I call
    +SignalHandlerV).  You might check out the sysincludes.h file to see
    +how it is defining SignalHandlerV and make sure this matches what your
    +OS/Compiler defines in 
    +
    +----------------------------------------
    +6. Omitting shared libraries
    +
    +> Can anyone tell me a way to turn off the creation of the shared libraries
    +> in the ACE build.
    +
    +You can simply comment out the LIB target in the $ACE_ROOT/ace/Makefile
    +or change the BUILD target from
    +
    +BUILD	= $(VLIB) $(VSHLIB) $(SHLIBA)
    +
    +to
    +
    +BUILD	= $(VSHLIB) $(SHLIBA)
    +
    +----------------------------------------
    +7. DCE threading and signal handling
    +
    +>Reading the DCE docs leaves me confused as to how to make everyone
    +>work together in a happy hormonious whole. May basic need is to catch
    +>asynchronous signals so i can release some global resources before
    +>the process exits.
    +
    +You need to spawn a separate thread to handle signals.  As part of
    +your init, do this:
    +	pthread_create(&tid, thread_attr, signal_catcher, NULL);
    +	pthread_detach(&tid);
    +
    +Where signal_catcher is like this:
    +static void *
    +signal_catcher(void *arg)
    +{
    +    static int		catch_sigs[] = {
    +	SIGHUP, SIGINT, SIGQUIT, SIGTERM, SIGCHLD
    +    };
    +    sigset_t		catch_these;
    +    int			i;
    +    error_status_t	st;
    +
    +    for ( ; ; ) {
    +	sigemptyset(&catch_these);
    +	for (i = 0; i < sizeof catch_sigs / sizeof catch_sigs[0]; i++)
    +	    sigaddset(&catch_these, catch_sigs[i]);
    +	i = sigwait(&catch_these);
    +	/* Note continue below, to re-do the loop. */
    +	switch (i) {
    +	default:
    +	    fprintf(stderr, "Caught signal %d.  Exiting.\n", i);
    +	    CLEANUP_AND_EXIT();
    +	    /* NOTREACHED */
    +#if	defined(SIGCHLD)
    +	case SIGCHLD:
    +	    srvrexec__reap();
    +	    continue;
    +#endif	/* defined(SIGCHLD) */
    +	}
    +    }
    +    return NULL;
    +}
    +----------------------------------------
    +8.
    +
    +> I have installed ACE2.15.5 on SunOS 4.1.3 with gcc2.6.0. I run the test program
    +> ---server_test. The static is OK, but error found when I commented out the first
    +> one and uncommented out the second one in the svc.conf file: 
    +> 
    +> #static Svc_Manager "-d -p 3912"
    +> dynamic Remote_Brdcast Service_Object * .shobj/Handle_Broadcast.so:remote_broad
    +> cast "-p 10001"
    +> 
    +> The error goes like this:
    +> 
    +> -----------
    +> jupiter[12] %server_test -d
    +> starting up daemon server_test
    +> opening static service Svc_Manager
    +> did static on Svc_Manager, error = 0
    +> signal signal 1 occurred
    +> beginning reconfiguration at Sat Feb 25 13:40:29 1995
    +> Segmentation fault (core dumped)
    +> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    +
    +My guess is that the code generated by GCC on SunOS 4.x does not
    +correctly initialize static variables from shared libraries.  The
    +SunC++ 4.0.x compiler does this correctly on Solaris 2.x (though I
    +believe that on SunOS 4.x it doesn't work without some extra coaxing).
    +
    +In general, I try to avoid using ACE's explicit dynamic linking
    +mechanisms on SunOS 4.x and GCC.  You can write plenty of interesting
    +and useful code with ACE without using those features.  Those tests
    +are mostly there to illustrate the "proof of concept."
    +----------------------------------------
    +9. 
    +
    +> a) I noticed the default constructor for the reactor does an open w/ defaults.
    +>    Does this mean I need to close it if I wish to re-open it with different
    +>    size and restart values?
    +
    +	No.  With the latest versions of ACE, you can now just call
    +open() with a new size and it will correctly resize the internal
    +tables to fit.
    +
    +> b) What is the usage difference between the normal FD_Set objects 
    +>    (rd/wr/ex_handle_mask_) and the ready FD_Set objects 
    +>    (rd/wr/ex_handle_mask_ready)?
    +
    +	The normal FD_Sets (now called Handle_Set in ACE 3.0.5) holds
    +the "waitable" descriptors (these are the descriptors given to
    +select() or poll()).  In contrast, the ready FD_Sets may be set by
    +Event_Handler subclasses (by called the set_ready() API) to indicate
    +to the Reactor that they want to be redispatched on the next go-round
    +*without* blocking.  If you look at the Reactor code, you'll see that
    +the wait_for() method checks the ready sets first and doesn't block if
    +there are any bits set in those masks.  This features makes it
    +possible for Event_Handlers to control subsequent dispatching policies
    +of the Reactor.
    +
    +> c) What does the positive return value do from an event handler callback:
    +>   -1 detaches the event handler for that mask
    +>    0 does nothing - keeps the event handler registered for that mask
    +>   >0 resets a bit in the current dispatching mask (I think) - does this mean 
    +>    this event will be called again before the current dispatch cycle is done?
    +
    +Almost...  (it's tied in with my description of the ready sets above).
    +It means that once the Reactor finishes cycling through the set of
    +descriptors it got back from select() or poll(), it will redispatch
    +the ready set descriptors before sleeping.
    +
    +>    Without direct access to the bit masks in X, I'm not sure I could emulate
    +>    this activity - what do you think?
    +
    +I'm not sure.  I'm not enough of an X guru.  Maybe someone else on the
    +list knows the answer to this?
    +
    +> d) If I let X do the select blocking, will that have any affect on 
    +>    the Reactor performing signal handling? 
    +
    +	Yes, I think that will cause problems since the Reactor relies
    +on a "handshake" between its Signal_Handler component and its
    +handle_events loop to properly handle signals.
    +
    +> e) Is the Poll method preferred over Select if it is available - why?
    +
    +For systems that implement select() in terms of poll() (e.g., Solaris
    +2.x) then it may be somewhat faster.  Otherwise, it doesn't really
    +matter since (1) they (should) do the same thing and (2) the end user
    +shouldn't notice any change in behavior.
    +
    +----------------------------------------
    +10. 
    +
    +> I would very much like to evaluate/use the ACE Toolkit,
    +> but am limited as to disk space on our system.
    +> What is the total disk space required for a compiled,
    +> usable toolkit?
    +
    +The source code itself is around 2 Meg, uncompressed.  
    +
    +The compiled version of ACE is around 90 Meg compiled with the SunC++
    +4.x compiler (naturally, this will differ with other compilers).
    +However, of this amount, about 40 meg are for the libraries, and
    +another 50 meg are for the test programs.  Naturally, you don't need
    +to keep the test programs compiled.
    +
    +The postscript documentation is around 5 Meg, compressed.
    +
    +----------------------------------------
    +11.
    +
    +> This is regarding the newer release of ACE and pertaining to the library
    +> archive file. My question is, if all the ".o" files are archived into one
    +> single "libACE.a", does it increase the size of the executable program?
    +
    +No.  The use of a *.a file allows the linker to extract out only those
    +*.o files that are actually used by the program.
    +
    +> If it does, then does a large executable program mean possibility of it being 
    +> slower?
    +
    +	No.
    +
    +----------------------------------------
    +12.
    +
    +> What happens if I have several reactors in a process (e.g. in different 
    +> threads)?
    +> 
    +> Programmer 1 decides to register at reactor 1 in his thread 1 a signal handler 
    +> for SIGUSR.
    +> Programmer 2 decides to register at reactor 2 in his thread 2 a signal handler
    +> for SIGUSR.
    +
    +	Naturally, the behavior of this all depends on the semantics
    +of the threads package...  In Solaris 2.x, signal handlers are shared
    +by all threads.  Moreover, the Reactor uses a static table to hold the
    +thread handlers.  Thus, only one of the handler's would be registered
    +(i.e., whichever one was registered second).
    +
    +> Programmer 3 designs the process and decides to have thread 1 and thread 2
    +> running in the same process and also makes use of a third party software library
    +> that internally has also registered a signal handler (not at the reactor) for
    +> SIGUSR.
    +
    +	Now you've got big problems!  This is an example of a
    +limitation with UNIX signal handlers...  In general, it's a bad idea
    +to use signal handlers if you can avoid it.  This is yet another
    +reason why.
    +
    +> When looking into Ace/ACE_wrappers/tests/Reactor/misc/signal_tester.C you
    +> have shown a way to do this by marking the dummy file_descriptor of the
    +> Sig_Handler object ready for reading asynchronously. The handle_input()
    +> routine of Sig_Handler object will then be dispatched synchronously.
    +> But what happens if I have several reactors. 
    +> The asynchronously dispatched
    +> handle_signal() routine does not know via which reactor it has been registered
    +> so in which reactor to modify the dummy file_descriptor.
    +> Is your suggestion to have just one process global reactor in such a case?
    +
    +	Yes, precisely.  I would *strongly* recommend against using
    +several reactors within separate threads within the same process if
    +you are going to be having them handle signals.  Can you use 1
    +reactor and/or have one reactor handle signals within a process?
    +
    +> One thing we want to do is the priorization of Event_Handlers. I.e. in case
    +> of concurrent events the sequence in which the Event_Handler methods will be
    +> activated depends on their priority relative to each other. 
    +> We have two choices:
    +> - complete priorization, which means a high priority Input Event_Handler may
    +>   be activated prior to a lower prioritized Output Event_Handler (and doing
    +>   so violating the 'hardcoded rule' that output must be done prior to input).
    +> - priorization only in categories, which means all Output Event_handler are
    +>   ordered by their priority regardless of priorities for the category of Input
    +>   Event_Handlers. The priority is fixed between the categories, i.e. first
    +>   output then input then out-of-band.
    +> 
    +> Right now I would think that we have to use the second choice if we want to
    +> use the feature of asynchronous output with automatical re-queueing. Am I right
    +> ?
    +
    +	Hum, that's an interesting problem.  It might be better to
    +subclass the Reactor to form a new class called Priority_Reactor.
    +This subclass would override the Reactor's dispatch method and
    +dispatch the event handlers in "priority" order.  I've never done
    +that, but I don't think it would be all that difficult.
    +
    +----------------------------------------
    +13. 
    +
    +> 	Is the Orbix (aka CORBA) version still around?
    +
    +Nope, IONA does not support Orbix-2.X nor Orbix-3.0 anymore (the
    +versions of Orbix that the ACE code was based upon).  Plus we didn't
    +maintain this code for ages, so it probably was broken too.
    +
    +----------------------------------------
    +14. 
    +> We are using your ACE software and ran into a problem which may or may not
    +> be related to the mutex locks.  The question may have more to do with how 
    +> mutex locks should be used.  We had a class which was using your mutex 
    +> lock wrapper.  Each member function of the class acquired the lock before 
    +> processing and released on exiting the function.  Some member functions may 
    +> call other member functions.  The following is an example:
    +> 
    +> class foo {
    +> 
    +> void a()
    +> {
    +>   MT( Mutex_Block m( this->lock_ ));
    +> 
    +>   if( cond )
    +>     b();
    +> }
    +> 
    +> void b()
    +> {
    +>   MT( Mutex_Block m( this->lock_ ));
    +> 
    +>   if( cond )
    +>     a();
    +> }
    +> 
    +> };
    +> 
    +> Is this valid ?  My assumtpion is that the mutex lock is recursive and 
    +> the same thread can acquire the lock multiple times in different member
    +> functions.
    +
    +	Ah, that's a great question since there are subtle and
    +pernicious problems lurking in the approach you are trying above.
    +Basically, Solaris mutex locks are *not* recursive (don't ask why...)
    +Thus, if you want to design an application like the one above you'll
    +need to use one or more of the following patterns:
    +
    +----------------------------------------
    +A. Use recursive mutexes.  Although these are not available in
    +   Solaris directly they are supported in the later versions
    +   of ACE.  You might want to take a look at the latest
    +   version (./gnu/ACE-3.1.9.tar.Z).  It's got lots of new
    +   support for threading and synchronization.  In that case,
    +   you simply do the following:
    +
    +	class Foo 
    +	{
    +	  public:
    +	  void a()
    +	  {
    +	    MT( Guard > m( this->lock_ ));
    +	    b ();
    +	  }
    +
    +	  void b()
    +	  {
    +	    MT( Guard > m( this->lock_ ));
    +	    b_i ();
    +	  }
    +
    +	};
    +
    +   The advantage with this is that it requires almost no
    +   changes to existing code.  The disadvantage is that
    +   recursive locks are just slightly more expensive.
    +
    +B. Have two layers of methods (a) which are public and acquire
    +   the Mutex and then call down to methods in layer (b), which
    +   are private and do all the work.  Methods in layer b assume
    +   that the locks are held.  This avoids the deadlock problem
    +   caused by non-recursive mutexes.  Here's what this approach
    +   looks like (using the more recent ACE class names):
    +
    +	class Foo 
    +	{
    +	  public:
    +	  void b()
    +	  {
    +	    MT( Guard m( this->lock_ ));
    +	    b_i ();
    +	  }
    +
    +	  void b_i()
    +	  {
    +	    if( cond )
    +	      a_i();
    +	  }
    +
    +	  void a_i()
    +	  {
    +	    if( cond )
    +	      b_i();
    +	  }
    +
    +	  void a()
    +	  {
    +	    MT( Guard m( this->lock_ ));
    +	    a_i ();
    +	  }
    +
    +	};
    +
    +    The advantage here is that inline functions can basically
    +    remove all performance overhead.  The disadvantage is that
    +    you need to maintain two sets of interfaces.
    +
    +C. Yet another approach is to release locks when calling
    +   other methods, like this:
    +
    +	class Foo 
    +	{
    +	  public:
    +	  void b()
    +	  {
    +	    MT( Guard m( this->lock_ ));
    +	    m.release ();
    +	    a ();
    +	    m.acquire ();
    +	  }
    +
    +	  void a()
    +	  {
    +	    MT( Guard m( this->lock_ ));
    +	    m.release ();
    +	    b ();
    +	    m.acquire ();
    +	  }
    +
    +	};
    +
    +   The disadvantage with this, of course, is that you
    +   greatly increase your locking overhead.  In addition,
    +   you need to be very careful about introducing race
    +   conditions into the code.  The primary reason for
    +   using this approach is if you need to call back to
    +   code that you don't have any control over (such as
    +   OS I/O routines) and you don't want to hold the 
    +   lock for an indefinite period of time.
    +----------------------------------------
    +	   
    +	BTW, all three of these patterns are used in the ACE Reactor
    +class category.  The Reactor has a number of fairly complex
    +concurrency control and callback issues it must deal with and I've
    +found it useful to use all three of these patterns jointly.
    +
    +	I'd be interested to hear any comments on these approaches.
    +	
    +	Doug
    +----------------------------------------
    +15. 
    +
    +> I am working on Solaris 2.3 and trying to understand how to get around
    +> the problem of trying to open a Socket connection to a remote host that
    +> is "dead".  Of course you get a nice long process block if the socket
    +> is in Blocking mode (TCP lets you know when you can continue - how polite). 
    +>
    +> So how does a non-blocking connect work with respect to using
    +> the Reactor and a SOCK_Stream object to coordinate the opening
    +> of the connection? Do I wait on the OUTPUT event for the FD?
    +> How do I know if the connect worked or possibly timed-out?  Is
    +> this a reliable approach (I read somewhere that this will only
    +> work if the STREAMS module is at the top of the protocol stack
    +> - MAN page I think)?
    +
    +An example of implementing this is in the Gateway sample application
    +in the new ACE.  It's also encapsulated in the Connector<> pattern of
    +the Connection class category in ./libsrc/Connection.  You may want to
    +take a look at those two things for concrete usage examples.
    +
    +However, the basics of getting non-blocking to work are:
    +- set socket to non-blocking
    +- initiate connect() request
    +- if connect() returned 0 you're connected
    +- if connect() returned -1 and errno is EWOULDBLOCK (or EAGAIN, depending  
    +on where you are), then register an event handler for read and write events  
    +on the socket
    +- any other errno value is fatal
    +
    +When an event is returned
    +- no matter which event you get back (read or write), you may have gotten  
    +the event out of error.  Thus, re-attempt the connect() and check to see if  
    +errno is EISCONN (if it's not there's a problem!)
    +- if errno was EISCONN, the connection is ready to go, otherwise you must  
    +handle an error condition
    +
    +If you want to "time out" after a certain period of time, consider  
    +registering for a timer event with Reactor.  If the timer goes off before  
    +the connection succeeds, close down the appropriate socket.
    +
    +> Is using a separate thread to make the connection a better way to avoid
    +> the potentialy long block in the main thread during the connect call?
    +
    +You could do that, but it can all be accomplised in a single process using  
    +the facilities available.
    +----------------------------------------
    +16. 
    +
    +> I was wondering, does the Reactor class have the ability to prioritize 
    +> activity on the registered event handlers?
    +
    +	The default strategy for the Reactor's dispatch routine
    +(Reactor::dispatch) does not prioritize dispatching other than to
    +dispatch callbacks in ascending order from 0 -> maxhandlep1.
    +
    +> We have a requirment to be able to process both real-time, as well as, stored
    +> telemetry and ERMs concurrently.  Real-time needs to be processed at a higher
    +> priority than stored data.  Our design is based on both real-time and stored 
    +> data coming into our process via separate sockets.  
    +
    +	I can think of several ways to do this:
    +	
    +	1. Use dup() or dup2() to organize your sockets such that the
    +	   higher priority sockets come first in the Handle_Sets that
    +	   the Reactor uses to dispatch sockets.  This is pretty easy
    +	   if you don't want to muck with the Reactor code at all.
    +
    +	2. You could subclass Reactor::dispatch() and revise it so
    +	   that it dispatches according to some other criteria that
    +	   you define in order to ensure your prioritization of
    +	   sockets.
    +
    +BTW, I'm not sure what you mean by "real-time" but I assume that you
    +are aware that there is no true "real-time" scheduling for network I/O
    +in Solaris.  However, if by "real-time" you mean "higher priority"
    +then either of the above strategies should work fine.  
    +----------------------------------------
    +17. 
    +
    +> 	I compiled the new ACE 3.2.0 's apps/Gateway. The compiling went
    +> through without any errors. But I could not get it running,  neither single
    +> threaded nor multi-threaded. The cc_config and rt_config files entries are given
    +> below. Also the machine configurations are given below. Does it need some more 
    +> settings or some patch !!??
    +
    +	I believe you are seeing the effects of the dreaded Sun MP bug
    +with non-blocking connects.  The easy work around for now is simply to
    +give the "-b" option to the Gateway::init() routine via the svc.conf
    +file:
    +
    +dynamic Gateway Service_Object *.shobj/Gateway.so:_alloc_gatewayd() active 
    +				"-b -d -c cc_config -f rt_config"
    +
    +If you check line 137 of the Gateway::parse_args() method you'll see
    +what this does.
    +----------------------------------------
    +18.
    +
    +How to get ACE to work with GCC C++ templates.
    +
    +The first and foremost thing to do is to get the latest version of GCC
    +(2.7.2) and also get the template repository patches from
    +
    +ftp://ftp.cygnus.com/pub/g++/gcc-2.7.1-repo.gz
    +
    +This will get the ball rolling...
    +
    +Here is some more info on G++ templates courtesy of Medhi TABATABAI
    +:
    +
    +Where's the Template?
    +=====================
    +
    +   C++ templates are the first language feature to require more
    +intelligence from the environment than one usually finds on a UNIX
    +system.  Somehow the compiler and linker have to make sure that each
    +template instance occurs exactly once in the executable if it is
    +needed, and not at all otherwise.  There are two basic approaches to
    +this problem, which I will refer to as the Borland model and the
    +Cfront model.
    +
    +Borland model
    +     Borland C++ solved the template instantiation problem by adding
    +     the code equivalent of common blocks to their linker; template
    +     instances are emitted in each translation unit that uses them, and
    +     they are collapsed together at run time.  The advantage of this
    +     model is that the linker only has to consider the object files
    +     themselves; there is no external complexity to worry about.  This
    +     disadvantage is that compilation time is increased because the
    +     template code is being compiled repeatedly.  Code written for this
    +     model tends to include definitions of all member templates in the
    +     header file, since they must be seen to be compiled.
    +
    +Cfront model
    +     The AT&T C++ translator, Cfront, solved the template instantiation
    +     problem by creating the notion of a template repository, an
    +     automatically maintained place where template instances are
    +     stored.  As individual object files are built, notes are placed in
    +     the repository to record where templates and potential type
    +     arguments were seen so that the subsequent instantiation step
    +     knows where to find them.  At link time, any needed instances are
    +     generated and linked in.  The advantages of this model are more
    +     optimal compilation speed and the ability to use the system
    +     linker; to implement the Borland model a compiler vendor also
    +     needs to replace the linker.  The disadvantages are vastly
    +     increased complexity, and thus potential for error; theoretically,
    +     this should be just as transparent, but in practice it has been
    +     very difficult to build multiple programs in one directory and one
    +     program in multiple directories using Cfront.  Code written for
    +     this model tends to separate definitions of non-inline member
    +     templates into a separate file, which is magically found by the
    +     link preprocessor when a template needs to be instantiated.
    +
    +   Currently, g++ implements neither automatic model.  The g++ team
    +hopes to have a repository working for 2.7.0.  In the mean time, you
    +have three options for dealing with template instantiations:
    +
    +  1. Do nothing.  Pretend g++ does implement automatic instantiation
    +     management.  Code written for the Borland model will work fine, but
    +     each translation unit will contain instances of each of the
    +     templates it uses.  In a large program, this can lead to an
    +     unacceptable amount of code duplication.
    +
    +  2. Add `#pragma interface' to all files containing template
    +     definitions.  For each of these files, add `#pragma implementation
    +     "FILENAME"' to the top of some `.C' file which `#include's it.
    +     Then compile everything with -fexternal-templates.  The templates
    +     will then only be expanded in the translation unit which
    +     implements them (i.e. has a `#pragma implementation' line for the
    +     file where they live); all other files will use external
    +     references.  If you're lucky, everything should work properly.  If
    +     you get undefined symbol errors, you need to make sure that each
    +     template instance which is used in the program is used in the file
    +     which implements that template.  If you don't have any use for a
    +     particular instance in that file, you can just instantiate it
    +     explicitly, using the syntax from the latest C++ working paper:
    +
    +          template class A;
    +          template ostream& operator << (ostream&, const A&);
    +
    +     This strategy will work with code written for either model.  If
    +     you are using code written for the Cfront model, the file
    +     containing a class template and the file containing its member
    +     templates should be implemented in the same translation unit.
    +
    +     A slight variation on this approach is to use the flag
    +     -falt-external-templates instead; this flag causes template
    +     instances to be emitted in the translation unit that implements
    +     the header where they are first instantiated, rather than the one
    +     which implements the file where the templates are defined.  This
    +     header must be the same in all translation units, or things are
    +     likely to break.
    +
    +     *See Declarations and Definitions in One Header: C++ Interface,
    +     for more discussion of these pragmas.
    +
    +  3. Explicitly instantiate all the template instances you use, and
    +     compile with -fno-implicit-templates.  This is probably your best
    +     bet; it may require more knowledge of exactly which templates you
    +     are using, but it's less mysterious than the previous approach,
    +     and it doesn't require any `#pragma's or other g++-specific code.
    +     You can scatter the instantiations throughout your program, you
    +     can create one big file to do all the instantiations, or you can
    +     create tiny files like
    +
    +          #include "Foo.h"
    +          #include "Foo.cc"
    +          
    +          template class Foo;
    +
    +     for each instance you need, and create a template instantiation
    +     library from those.  I'm partial to the last, but your mileage may
    +     vary.  If you are using Cfront-model code, you can probably get
    +     away with not using -fno-implicit-templates when compiling files
    +     that don't `#include' the member template definitions.
    +
    +4. Placing a function that looks like this near the top of a .C file
    +   that uses any inline template member functions permits proper inlining:
    +
    +   // #ifdef __GNUG__
    +   // This function works around the g++ problem with inline template member
    +   // calls not being inlined ONLY in the first block (in a compilation
    +   // unit) from which they are called.
    +   // This function is inline and is never called, so it does not produce
    +   // any executable code.  The "if" statements avoid compiler warnings about
    +   // unused variables.
    +   inline
    +   void
    +   gcc_inline_template_member_function_instantiator()
    +   {
    +       if ( (List *) 0 );
    +   }
    +   // #endif  // __GNUG__
    +
    +   other prerequisites:
    +   -- All inline template member functions should be defined in
    +      the template class header.  Otherwise, g++ will not inline
    +      nested inline template member function calls.
    +   -- Template .h and .C files should NOT include iostream.h
    +      (and therefore debugging.h).
    +      This is because iostream.h indirectly includes other
    +      GNU headers that have unprotected #pragma interface,
    +      which is incompatible with -fno-implicit-templates and optimal
    +      space savings.
    +   -- inline virtual destructors will not be inlined, unless necessary,
    +      if you want to save every last byte
    +   -- be sure that -Winline is enabled
    +
    +----------------------------------------
    +19.
    +
    +> 	1. when are dynamically loaded objects removed from the Service_Config.
    +
    +The Service Configurator calls dlclose() when a "remove Service_Name"
    +directive is encountered in the svc.conf file (or programmatically
    +when the Service_Config::remove() method is invoked).  Check out the
    +code in ./libsrc/Service_Config/Service_Repository.i and
    +./libsrc/Service_Config/Service_Config.i to see exactly what happens.
    +
    +> 	2. In the Service Configurator, when an item is entered in the svc.conf
    +> 		how dow you know which items will be invoked as threads and 
    +> 		which items are forked. I know that static items are executed 
    +> 		internally. 
    +
    +	No!  It's totally up to the subclass of Service_Object to
    +decide whetehr threading/forking/single-threading is used.  Check out
    +the ./apps/Logger/Service_Configurator_Logger for examples of
    +single-threaded and multi-threaded configuration.
    +----------------------------------------
    +20. 
    +
    +> I have been reading the Service Configurator Logger. I was wondering about 
    +> cleanup of new objects. In the handle_input method for the Acceptor a new
    +> svc_handler is allocated for each new input request and deleted in the 
    +> handle_close. I was wondering how handle close was called when a client who
    +> has created a socket terminates the connection (i.e., when is handle_close
    +> called).
    +
    +handle_close() is automatically called by the Reactor when a
    +handle_input()/handle_output()/etc. method returns -1.  This is the
    +"hook" that instructs the Reactor to call handle_**() and then remove
    +the Event_Handler object from its internal tables.
    +
    +----------------------------------------
    +21. 
    +
    +> How does the Logger know to remove the client socket and the svc_handler object.
    +> Does he recieve an exception. 
    +
    +	No.  when the client terminates the underlying TCP/IP
    +implementation sends a RESET message to the logger host.  This is
    +delivered to the logger process as a 0-sized read().  It then knows to
    +close down.
    +
    +> What I am worried about is a leak. Where by alot of clients connect and 
    +> disconnect and the server does not cleanup correctly. Such as a core dump
    +> from the client where he cannot close correctly.
    +
    +	That's handled by the underlying TCP (assuming it is
    +implemented correctly...).
    +
    +> What I am doing is attempting to convert the logger example into an alarm
    +> manager for remote nodes. In this application a node may be powered down
    +> there by terminating a Logger/Alarm server connection abnormally, this could
    +> leave the Logger with many dangling sockets and allocated svc_handler objects.
    +
    +	If the TCP implementation doesn't handle this correctly then
    +the standard way of dealing with it is to have an Event_Handler use a
    +watchdog timer to periodically "poll" the client to make sure it is
    +still connected.  BTW, PCs tend to have more problems with this than
    +UNIX boxes since when they are turned off the TCP implementation may
    +not be able to send a RESET...
    +----------------------------------------
    +22. 
    +
    +Using templates with Centerline.
    +
    +Centerline uses ptlink to process the C++ templates. ptlink expect the
    +template declarations and definitions (app.h and app.C) to reside in
    +the same directory. This works fine for the ACE hierarchy since
    +everything is a link to the appropriate src directory (include/*.[hi]
    +--> ../src/). When a users of the ACE distribution attempts to include
    +the ACE classes in an existing application hierarchy this problem will
    +arise if ptlink is used.
    +
    +The solution is to create a link to the declaration file from the
    +definition file directory and use the "-I" to point to the definition
    +directory.
    +
    +----------------------------------------
    +
    +23. 
    +
    +> When I try to compile $ACE_ROOT/src/Message_Queue.C on a Solaris
    +> 5.3 system using SUNPro CC 4.0, the compiler aborts with a Signal 10
    +> (Bus Error).  Our copy of CC 4.0 is over a year old and I do not
    +> know if any patches or upgrades exist for it.  If they do, then we
    +> have not applied them to our compiler.
    +
    +	Several other people have run across this as well.  It turns
    +out that there is a bug in the Sun 4.0.0 C++ compiler that will get a
    +bus error when -g is used.  If you compilg Message_Queue.C *without*
    +-g then it works fine.  The later versions of SunC++ don't have this
    +bug.  I'd recommend that you upgrade as soon as possible.
    +
    +----------------------------------------
    +
    +24. 
    +
    +> I have added a dynamic service to the Service Configurator. This new service
    +> fails on the load because it uses application libraries that are not shared 
    +> object libraries (i.e., objects in libApp.a). I am assuming from the error
    +> message that the problem is the mix match of shared and non-shared objects.
    +
    +	Right, exactly.
    +
    +> I was wondering if there is an easy way to add static services to the 
    +> Service Configurator. The example directory listing static service is
    +> very tightly coupled with the Service_Config object. Is there another
    +> way of adding static services.
    +
    +	Sure, that's easy.  The best way to do this is to use the
    +interfaces of the Service_Respository class to configure static
    +services into the Service_Config.  A good example of how to do this is
    +in Service_Config.[Chi]:
    +
    +int
    +Service_Config::load_defaults (void)
    +{
    +  for (Static_Svc_Descriptor *sl = Service_Config::service_list_; sl->name_ != 0; sl++)
    +    {
    +      Service_Type *stp = ace_create_service_type (sl->name_, sl->type_, 
    +						   (const void *) (*sl->alloc_)(),
    +						   sl->flags_);
    +      if (stp == 0)
    +	continue;
    +
    +      const Service_Record *sr = new Service_Record (sl->name_, stp, 0, sl->active_);
    +
    +      if (Service_Config::svc_rep->insert (sr) == -1)
    +	return -1;
    +    }
    +  return 0;
    +}
    +
    +----------------------------------------
    +25. 
    +
    +> 8. Do you have examples of the SYNC/ASYNC pattern?
    +
    +	Yes.  Check out the following:
    +	
    +	1. The latest version of ./apps/Gateway/Gateway has
    +	   an example of this when you compile with the USE_OUTPUT_MT 
    +	   flag.  In this case, the Reactor performs the "Async"
    +	   processing, which multiplexes all incoming messages from peers
    +	   arriving on Input_Channels.  These messages are then queued
    +	   up at the appropriate Output_Channels.  Each Output_Channel
    +	   runs in a separate thread, performing the "Sync"
    +	   processing.
    +	   
    +	2. Also, the latest version of the OOCP-tutorial4.ps.gz
    +	   file available from wuarchive.wustl.edu in the
    +	   directory /languages/c++/ACE/ACE-documentation shows
    +	   an example of using the Half-Sync/Half-Async pattern
    +	   to build an Image Server.  I'm using this as an
    +	   example in my tutorials these days.
    +
    +----------------------------------------
    +26.
    +
    +> We had a discussion about something we saw in the new ACE code.
    +> I thing there was a member function of a class that was doing a 
    +> "delete this".  Is this safe?
    +
    +In general it is safe as long as (1) the object has been allocated
    +dynamically off the heap and (2) you don't try to access the object
    +after it has been deleted.  You'll note that I tend to use this idiom
    +in places where an object is registered with the Reactor, which must
    +then must ensure the object cleans itself up when handle_close() is
    +called.  Note that to ensure (1) I try to declare the destructor
    +"private" or "protected" so that the object must be allocated off the
    +heap (some compilers have a problem with this, so I may not be as
    +consistent as I ought to...).
    +
    +----------------------------------------
    +27. 
    +
    +> 5. What is the correct way for building a modified ACE library?
    +> 	Changing in "libsrc" or in "include" directory?
    +> 	When I make a complete new directory, how can I get introduced
    +> 	the dependencies within my new makefile, can you give a short hint?
    +
    +Sure, no problem.  For instance, here's what I did tonight when I
    +added the new Thread_Specific.[hiC] files to ACE:
    +
    +	1. Created three new files Thread_Specific.[hiC] in
    +	   ./libsrc/Threads. 
    +
    +	2. cd'd to ../../include/ace and did a
    +	
    +	   % ln -s ../../libsrc/Threads/Thread_Specific.[hi] .
    +	   
    +	3. cd'd to ../../src and did a 	   
    +
    +	   % ln -s ../../libsrc/Threads/Thread_Specific.C .
    +
    +	4. then I did
    +	
    +	   % make depend
    +
    +	   on the ./src directory, which updated the dependencies. 
    +
    +----------------------------------------
    +28. The following is from Neil B. Cohen (nbc@metsci.com), who is
    +    writing about how to work around problems he's found with HP/UX.
    +
    +I've been trying to compile the latest beta (3.2.9) on an HP running
    +HPUX9.05 for the past week or so. I've had problems with templates up
    +and down the line. I finally discovered (after some discussions with
    +the HP support people) that they have made numerous changes to their
    +C++ compiler recently to fix problems with templates and
    +exceptions. If you are trying to compile ACE under HPUX with anything
    +less than version 3.70 of the HP compiler, you may have serious
    +problems (we were using v3.50 which came with the machine when we
    +bought it a few months ago).
    +
    +Also, unlike earlier ACE versions, I was forced to add the following
    +line to the rules.lib.GNU file to "close" the library - ie. force the
    +various template files to be instantiated and linked to the ACE
    +library itself. I don't know if this is necessary, or the only way to
    +make things work, but it seems to do the job for my system.
    +
    +in rules.lib.GNU...
    +
    +$(VLIB): $(VOBJS)
    +    - CC -pts -pth -ptb -ptv -I$(ACE_ROOT)/include $(VOBJS)
    +    $(AR) $(ARFLAGS) $@ $? ./ptrepository/*.o
    +    -$(RANLIB) $@
    +    -chmod a+r $@
    +
    +I added the CC line, and added the "./ptrepository/*.o" to the $(AR)
    +cmd.  Sun has an -xar option, I believe that does something similar to
    +this.  Also - note that I'm not sure that the "-ptb" option is
    +necessary. I added that before we upgraded the compiler, so it may not
    +be needed now...
    +
    +----------------------------------------
    +29. 
    +
    +> I just ran my program with Purify, and it is telling me that there
    +> is at least one large (~4k) memory leak in
    +> ACE_Thread_Specific.  This may or may not be serious,
    +> but it is probably worth looking into.
    +
    +Right, that's ok.  This is data that's allocated on a "per-thread"
    +basis the first time a thread makes a call using the LM_ERROR or
    +LM_DEBUG macros.  The data isn't freed-up until the thread exits.
    +
    +----------------------------------------
    +
    +30. 
    +
    +>     In my trying to use the Reactor pattern for my application I
    +> noticed that I had to couple my eventHandler derived objects with a
    +> specific IPC_SAP mechanism. To use some of your own examples your
    +> Client_Stream object contains a TLI_Stream object to use in data
    +> transfer. My application calls for determining the communication
    +> mechanism at run time. To do this my eventHandler must be able to
    +> create the appropriate IPC_Stream object at run time and use its
    +> methods through a super class casting. The problem is that there is no
    +> super class with the virtual methods for send, recv, etc. To solve my
    +> problem I will create that super class and have the TLI ( as well as
    +> other wrapper objects) inherit from it instead of IPC_SAP. My question
    +> is I am suspicious of why ACE wasn't designed with that in mind? Is my
    +> application that unique ? or is there a better way to do this that I
    +> am not aware of ?  Your help in this matter will be much appreciated.
    +
    +ACE was developed using static binding for IPC_SAP in order to
    +emphasize speed of execution over dynamic flexibility *in the core
    +infrastructure*.  To do otherwise would have penalized the performance
    +of *all* applications in order to handle the relatively infrequent
    +case where you want to be able to swap mechanisms at run-time.
    +
    +Since it is straightforward to create an abstract class like the one
    +you describe above I decided to make this a "layered" service rather
    +than use this mechanism in the core of ACE.
    +
    +BTW, I would not modify TLI_SAP and SOCK_SAP to inherit from a new
    +class. Instead, I would use the Bridge and Adapter patterns from the
    +"Gang of Four" patterns catalog and do something like this:
    +
    +----------------------------------------
    +// Abstract base class
    +class ACE_IPC_Stream
    +{
    +public:
    +	virtual ssize_t recv (void *buf, size_t bytes) = 0;
    +	virtual ssize_t send (const void *buf, size_t bytes) = 0;
    +	virtual ACE_HANDLE get_handle (void) const = 0;
    +	// ...
    +};
    +----------------------------------------
    +
    +and then create new classes like 
    +
    +----------------------------------------
    +template 
    +class ACE_IPC_Stream_T : public ACE_IPC_Stream
    +{
    +public:
    +	virtual ssize_t recv (void *buf, size_t bytes)
    +	{
    +		return this->ipc_.recv (buf, bytes);
    +	}
    +
    +	virtual ssize_t send (const void *buf, size_t bytes)
    +	{
    +		return this->ipc_.send (buf, bytes);
    +	}
    +
    +	virtual ACE_HANDLE get_handle (void)
    +	{
    +		return this->ipc_.get_handle ();
    +	}
    +	// ...
    +
    +private:
    +	IPC ipc_;
    +	// Target of delegation 
    +	// (e.g., ACE_SOCK_Stream or ACE_TLI_Stream).
    +}
    +----------------------------------------
    +
    +Then you could write code that operated on ACE_SAP *'s to get a
    +generic interface, but that reused existing code like SOCK_SAP and
    +TLI_SAP, e.g.,
    +
    +----------------------------------------
    +class My_Event_Handler : public ACE_Event_Handler
    +{
    +public:
    +	My_Event_Handler (void) {
    +		// Figure out which IPC mechanism to use somehow:
    +		
    +		if (use_tli)
    +			this->my_ipc_ = new ACE_SAP_IPC;
    +		else if (use_sockets)
    +			this->my_ipc_ = new ACE_SAP_IPC;
    +		else
    +			...
    +	}
    +
    +private:
    +	ACE_IPC_Stream *my_ipc_;
    +};
    +----------------------------------------
    +
    +There are obviously details left out here, but this is the general idea.
    +
    +----------------------------------------
    +31. 
    +
    +> I was trying to view your 'Writting example applications in CORBA' article
    +> /tutorial using ghostview but the .ps file seems to be corrupted ( I tried to
    +> ftp it more than once). Any help would be much appreciated.
    +
    +There are two solutions to this problem (which seems to be caused by a
    +weird interaction between ghostview and the "psnup" program I use to
    +generate the slides 4-up on a page):
    +
    +	1. If you want to print them or view them 1-up on a page you
    +	   can edit the postscript file and remove the first 551
    +	   lines or so (which are generated by the psnup script).
    +	   This will cause the document to be printed 1-up rather than
    +	   4-up.
    +
    +	2. You can try to print the 4-up file on a postscript printer. 
    +	   Believe it or not, this typically works, even though ghostview
    +	   can't handle it!
    +
    +----------------------------------------
    +32.
    +
    +> We would like to use the Reactor class as a static member on some of
    +> our classes (one per process) so that we can see and use the Reactor
    +> witnin each process on a global level.  We are using it to set
    +> timers several levels down in our class trees and don't want to pass
    +> a pointer to it through all of our constructors.  My question is:
    +> are there any static initialization dependencies that you know of
    +> when using the default "do nothing" constructor of the Reactor that
    +> could prevent use from using it as a static member variable?  Thanks
    +> for any advice on this issue.
    +
    +The only problems you'll have are the typical ones about "order of
    +initialization" of statics in separate files.  You'll also have to
    +live with the default size of the I/O handler table, which probably
    +isn't a problem since the max is something like 1024 or so.
    +
    +BTW, I solve this problem in ACE via the Service_Config::reactor,
    +which is a static *pointer* to a Reactor.  If you really wanted to
    +make this work nicely, you could use the Singleton pattern from the
    +"Gang of Four" patterns catalog.  That should solve your problem even
    +more elegantly!
    +
    +----------------------------------------
    +33. 
    +> I just got the ACE-3.3 version and am trying it on the HP-UX.
    +> I run into a small problem while cloning the directories that
    +> might be worth fixing.
    +> 
    +> I made a directory called ACE_WRAPPERS/HP-UXA.09.05-g1, cd to it
    +> and run "make -f ../Makefile clone".  when I look in src, I have:
    +> Acceptor.C@ -> ../libsrc/Connection/Acceptor.C
    +> 
    +> However, ../libsrc does not exist.  It is not one of the CLONE
    +> variables in ACE_WRAPPERS/Makefile.  I don't think you'd want to
    +> clone libsrc too, since its files don't change.
    +
    +I think you can solve this problem as follows:
    +
    +% cd ACE_WRAPPERS
    +% setenv ACE_ROOT $cwd
    +% cd HP-UXA.09.05-g1
    +% make -f ../Makefile clone
    +% setenv ACE_ROOT $cwd
    +% make
    +
    +That should build the links correctly since they'll point to the
    +absolute, rather than relative, pathnames!
    +
    +----------------------------------------
    +34.
    +
    +> Our quality personal has asked me the following questions for which
    +> I think you are the right guy for answering that:
    +
    +> o How long is ACE used in industrial products?
    +
    +It was first used at Ericsson starting in the fall of 1992, so that
    +makes it about 3 years now.
    +
    +> o What are reference projects comparable to ours that use ACE?
    +
    +The ones I have directly worked with include:
    +
    +Motorola -- satellite communication control
    +Kodak Health Imaging Systems -- enterprise medical imaging
    +Siemens -- enterprise medical imaging
    +Ericsson/GE Mobile Communications -- telecommunication switch management
    +Bellcore -- ATM switch signal software
    +
    +In addition, there are probably about 100 or more other companies that
    +have used ACE in commercial products.  The current mailing list has
    +about 300 people from about 230 different companies and universities.
    +If you'd like additional info, please let me know.
    +
    +> o How many persons have contributed on testing and writing error
    +> reports for ACE?
    +
    +Around 60 or so.  All the contributors are listed by name and email
    +address at the end of the README file distributed with the ACE release.
    +
    +> o How many bug fixes have been made since ACE was public domain?
    +
    +All information related to bug fixes is available in the ChangeLog
    +file distributed with the ACE release (I could count these for you if
    +you need that level of detail).
    +
    +> o How many literature is there on ACE?
    +
    +All articles published about ACE are referenced in the BIBLIOGRAPHY
    +file in the top-level directory of ACE.
    +
    +----------------------------------------
    +
    +35.
    +
    +> We are currently evaluating ACE for use on a new telecom switch.
    +> Many of us like ACE but are having trouble convincing some team
    +> members that wrappers are better than using the direct Unix
    +> system calls.
    +
    +> I have read your papers that came with ACE, but was wondering if there
    +> are other papers that address the benefits (or problems) of wrappers?
    +
    +This topic has been discussed in other places, most notably the book
    +by Erich Gamma and Richard Helm and Ralph Johnson and John Vlissides
    +called "Design Patterns: Elements of Reusable Object-Oriented
    +Software" (Addison-Wesley, 1994), where it is described in terms of
    +the "Adapter" pattern.
    +
    +Very briefly, there are several key reasons why you should *not* use
    +UNIX system calls directly (regardless of whether you use ACE or not).
    +
    +1. Portability -- 
    +
    +   	Unless you plan to develop code on only 1 UNIX platform (and
    +   	you never plan to upgrade from that platform as it goes
    +   	through new releases of the OS) you'll run across many, many
    +   	non-portable features.   It's beyond the scope of this
    +        FAQ to name them all, but just take a look at ACE sometime
    +        and you'll see all the #ifdefs I've had to add to deal with
    +	non-compatible OSs and compilers.  Most of these are centralized
    +	in one place in ACE (in the ace/OS.*files), but it took a lot
    +	of work to factor this out.  By using wrappers, you can avoid
    +	most of this problem in the bulk of your application code
    +	and avoid revisiting all of these issues yourself.
    +
    +        In addition, ACE is now ported to other platforms (e.g.,
    +        Windows NT and Windows 95).  If you want to write code that
    +        is portable across platforms, wrappers are a good way to
    +        accomplish this. 
    +
    +2. Ease of programming --
    +
    +	I'd go as far as to say that anyone who wants to program
    +   	applications using C-level APIs like sockets or TLI is not
    +   	serious about developing industrial strength, robust, and easy
    +   	to maintain software.  Sockets and TLI are *incredibly*
    +   	error-prone and tedious to use, in addition to being
    +   	non-portable.  I've got a paper that discusses this in detail
    +	at URL http://www.cs.wustl.edu/~schmidt/PDF/COOTS-95.pdf
    +	
    +3. Incorporation with higher-level patterns and programming methods -- 
    +
    +	Here's where the Adapter pattern stuff really pays
    +	off.  For example, by making all the UNIX network
    +	programming interfaces and synchronization mechanisms
    +	have the same API I can write very powerful higher-level
    +	patterns (e.g., Connector and Acceptor) that generalize
    +	over these mechanisms.  For proof of this, take a look
    +	at the ./tests/Connection/non_blocking directory
    +	in the latest ACE-beta.tar.gz at wuarchive.wustl.edu
    +	in the /languages/c++/ACE directory.  It implements
    +	the same exact program that can be parameterized
    +	with sockets, TLI, and STREAM pipes *without*
    +	modifying any application source code.  It is 
    +	literally impossible to do this without wrappers.
    +
    +----------------------------------------
    +36.
    +
    +> How can I use a kind of "Reactor" in such a way that a reading
    +> thread can notice the arrival of new data on several shared memory
    +> areas ?
    +
    +Ah, that is a tricky issue!  The underlying problem is that UNIX is
    +inconsistent with respect to the ability to "wait" on different
    +sources of events.  In this case, Windows NT is much more consistent
    +(but it has its own set of problems...).
    +
    +> Poll, Select and Reactor (so far I read) assume that file
    +> descriptors are present, which is not the case with shared memory.
    +
    +That's correct (though to be more precise, the Reactor can also deal
    +with signals, as I discuss below).  
    +
    +> Is there a common and efficient way to deal with that kind of
    +> situation, or do I have to insert extra ipc mechanisms (based on
    +> descriptors) ?
    +
    +There are several solutions:
    +
    +1. Use the Reactor's signal handling capability (see the
    +   ./tests/Reactor/misc/signal_tester.C for an example)
    +   and have the process/thread that writes to shared 
    +   data send a signal to the reader process(es).  The
    +   disadvantage of this is that your code needs to 
    +   be signal-safe now...
    +
    +2. Use a combination of SPIPE_Streams and the Reactor
    +   to implement a simple "notification protocol," e.g.,
    +   the receiver process has an Event_Handler with a
    +   SPIPE_Stream in it that can be notified when the
    +   sender process writes data to shared memory.
    +   The disadvantage here is that there's an extra
    +   trip through the kernel, though the overhead
    +   is very small since you only need to send 1 byte.
    +
    +3. Use threads and either bypass the Reactor altogether
    +   or integrate the threads with the Reactor using its
    +   Reactor::notify() mechanism (see the 
    +   ./tests/Reactor/misc/notification.C file for an
    +   example of how Reactor::notify() works).  The
    +   disadvantage of this approach is that it won't
    +   work for platforms that lack threads.
    +
    +----------------------------------------
    +37.
    +
    +> What do you think about wrapping communication methodologies in C++ streams?
    +> What I mean is having defining a stream and extractor/insertor functions
    +> which the underlying implementation reads/writes on comm mechanisms instead of
    +> files.  I would think this to be a very general interface for all comms
    +> implementations.  All user code would look the same, but the underlying stream
    +> implementations would be different.  Whether the stream functionality would
    +> be defined by the stream itself (eg tcpstream) or with manipulators
    +> (eg commstream cs; cs << tcp;) is up for grabs in my mind.
    +> 
    +> Anyhow, I was wondering your input...
    +
    +That technique has been used for a long time.  In fact, there are
    +several freely available versions of iostreams that do this and
    +RogueWave also sells a new product (Net.h++) that does this.  I think
    +this approach is fine for simple applications.
    +
    +However, it doesn't really work well if you need to write
    +sophisticated distributed applications that must use features like
    +non-blocking I/O, concurrency, or that must be highly robust against
    +the types of errors that occur in a distributed system.
    +
    +For these kinds of systems you either need some type of ORB, or you
    +need to write the apps with lower-level C++ wrappers like the ones
    +provided by ACE.
    +
    +----------------------------------------
    +
    +38.
    +
    +> What is the difference between cont() and next() in an ACE_Message_Block?
    +
    +Ah, good question.  cont() gives you a pointer to the next
    +Message_Block in a chain of Message_Block fragments that all belong to
    +the same logical message.  In contrast, next() (and prev()) return
    +pointers to the next (and previous) Message_Block in the doubly linked
    +list of Message_Blocks on a Message_Queue.  
    +
    +BTW, this is *exactly* the same structure as in System V Streams...
    +
    +> Which would I use if I wanted to add a header and a trailer, each stored in
    +> ACE_Message_Blocks of their own, to another ACE_Message_Block?
    +
    +You should use cont() for that.  Does that make sense?
    +----------------------------------------
    +
    +39.
    +
    +> I think that your site is cool, but it's being a terrible tease in
    +> that I really want to read the contents, but don't know anything
    +> about x-gzip formatting.  I'm running Netscape 2.0 under MS Windows
    +> NT.
    +
    +To view PostScript files under Win32 you will need a PostScript 
    +viewer such as GSview.  You can find GSview and Ghostscript (which is
    +needed to run GSview) at http://www.cs.wisc.edu/~ghost/.  
    +
    +It seems that both Netscape and Internet Explorer mangles the names 
    +of downloaded files to reflect their content type, so *.ps.gz files 
    +are saved as *_ps.ps instead.  Fortunately, GSview as of version 2.2
    +supports gzip compressed postscript.  When set up as a viewer for
    +Postscript files, files with mangled names can be viewed by GSview 
    +without any preprocessing.
    +
    +----------------------------------------
    +
    +40. 
    +
    +> What I am doing is
    +> 1. Making an ACE_SOCK_Dgram and let it choose the next available port number.
    +> 2. Making a message that will be broadcasted to X number of servers. This
    +>    message has a port number which the server will use to send its reply.
    +> 3. Broadcast the message to a fixed port number.
    +> 4. Wait for replies from the servers.
    +> 
    +> 
    +> It looks like I need "ACE::bind_port" to return the port number that
    +> it picked and "ACE_SOCK_Dgram::shared_open" will need it store the
    +> port number so I could call some function like
    +> ACE_SOCK_Dgram::get_port_number or it would need to return the port
    +> number instead of the handle(I could always call
    +> ACE_SOCK_Dgram::get_handle if I needed the handle).
    +> 
    +> Is there I way to get the port number that I have missed?
    +
    +Sure, can't you just do this:
    +
    +// Defaults to all "zeros", so bind will pick port.
    +ACE_INET_Addr dg_addr;
    +
    +ACE_SOCK_Dgram dg;
    +
    +dg.open (dg_addr);
    +
    +dg.get_local_addr (dg_addr);
    +
    +dg_addr.get_port_number ();
    +
    +----------------------------------------
    +
    +41. How can you rename a core file?
    +
    +new_disposition.sa_handler = &Handle_Coredump_Signal;
    +sigemptyset(&new_disposition.sa_mask);
    +sigaddset(&new_disposition.sa_mask,SIGCHLD);
    +new_disposition.sa_flags = 0;
    +sigaction(SIGSEGV,&new_disposition,&old_disposition);
    +
    +*****************
    +
    +void
    +Handle_Coredump_Signal(void)
    +{
    +    int   status;
    +    pid_t child;
    +    char  new_core_name[64];
    +    
    +    if(0 == (child = fork()))
    +    {
    +	abort();
    +    }
    +    else
    +    {
    +	if(-1 == waitpid(child,&status,NULL))
    +	{
    +	    exit(-1);
    +	}
    +	sprintf(new_core_name,"core_%d",getpid());
    +	rename("core",new_core_name);
    +	exit(0);
    +    }
    +}
    +
    +----------------------------------------
    +
    +42. 
    +
    +> I have seen 2 different inlining policies in ACE
    +> 
    +> 1) The .i file is included unconditionally by both the .h and .C file
    +>    and all functions in the .i file carry the "inline" keyword.
    +
    +Right.  Those are for cases where I *always* want to inline those
    +methods.  I do this mostly for very short wrapper methods (e.g.,
    +read() or write()) that are likely to be on the "fast path" of an
    +application.
    +
    +> 2) The .i file is included by the .h file ONLY if __INLINE__ is defined
    +>    for the compile.  This causes the functions in the .i file to be
    +>    compiled as inline functions (INLINE translates to inline in this case).
    +>    If __INLINE__ is not defined, the .i file is only included by the .C
    +>    file and the functions do NOT carry the "inline" keyword.
    +
    +I do this for cases where it's really not essential to have those
    +methods inline, but some users might want to compile ACE that was if
    +they want to eliminate all the wrapper function-call overhead.  For
    +instance, I'll typically do this when I'm running benchmarks.
    +
    +----------------------------------------
    +
    +43. Integrating ACE and CORBA
    +
    +> Our goal is to implement a CORBA-II compliant application.  I am
    +> trying to conceptually visualize the applicability to ACE to this
    +> attempt (which we're pretty excited about), and I was hoping you'd
    +> offer any opinions / observations that you might have.
    +
    +We've successfully integrated ACE with several implementations of
    +CORBA (in particular Orbix 1.3 and 2.0) and used it in a number of
    +commercial applications.  In these systems, we use ACE for a number of
    +tasks, including the following:
    +
    +1. Intra-application concurrency control, threading, and
    +   synchronization via the ACE_Thread_Manager and Synch* classes. 
    +   
    +2. Dynamic linking of services via the ACE_Service_Config.
    +
    +3. Integration of event loops via the ACE_Reactor.
    +
    +4. Management of shared memory via ACE_Malloc.
    +
    +5. High-performance network I/O via the ACE_SOCK* wrappers.
    +
    +plus many more.
    +
    +You can find out more info about the ACE/CORBA integration and the
    +performance issues associated with it in the following paper:
    +
    +http://www.cs.wustl.edu/~schmidt/PDF/COOTS-96.pdf
    +
    +----------------------------------------
    +
    +44. 
    +
    +> Can the Reactor's event loop be called recursively?
    +
    +This is not advisable.  The Reactor's dispatch() method is not
    +reentrant (though it is thread-safe) since it maintains state about
    +the active descriptors it is iterating over.  Therefore, depending on
    +the descriptors you're selecting on, you could end up with spurious
    +handle_*() callbacks if you make nested calls to the
    +Reactor::handle_events() method.
    +
    +> For example, if I have a program that sets up some event handlers
    +> and then calls, in an infinite loop, ACE_Reactor::handle_events().
    +> Can one of the event handlers call handle_events() again if it needs
    +> to block, while allowing other event handlers a chance to run?
    +
    +I'm not sure if this is really a good idea, even if the Reactor were
    +reentrant.  In particular, what good does it do for one Event_Handler
    +to "block" by calling handle_events() again?  The event the handler is
    +waiting for will likely be dispatched by the nested handle_events()
    +call!  So when you returned back from the nested call to
    +handle_events() it will be tricky to know what state you were in and
    +how to proceed.
    +
    +Here's how I design my single-threaded systems that have to deal with
    +this:
    +
    +  	1. I use a single event loop based on the Reactor, which acts
    +	   a cooperative multi-tasking scheduler/dispatcher.
    +	   
    +	2. I then program all Event_Handler's as non-blocking I/O
    +	   objects.  This is straightforward to do for both input and
    +	   output using the ACE_Reactor::schedule_wakeup() and
    +	   ACE_Reactor::cancel_wakeup() methods (available with the
    +	   latest version of ACE).  
    +	   
    +	3. Then, whenever an Event_Handler must block on I/O, it 
    +	   queues up its state on an ACE_Message_Queue, calls
    +	   ACE_Reactor::schedule_wakeup(), and returns to the 
    +	   main event loop so that other Event_Handlers can be
    +	   dispatched.  When the I/O is ready, the Reactor will
    +	   call back to the appropriate handle_* method, which
    +	   can pick up the state it left in the Message_Queue and
    +	   continue. 
    +
    +There are a number of places to find more information on this sort of
    +design:
    +
    +	1. $ACE_ROOT/apps/Gateway/Gateway/Channel.cpp --
    +	   This Gateway application example shows the C++ code.
    +
    +	2. http://www.cs.wustl.edu/~schmidt/PDF/TAPOS-00.pdf --
    +	   This paper describes the underlying patterns.
    +
    +	3. http://www.cs.wustl.edu/~schmidt/PDF/OONP-tutorial4.pdf
    +	   -- This tutorial explains the source code and 
    +	   the patterns.
    +
    +BTW, I'll be describing patterns for this type of design challenge in
    +my tutorial at USENIX COOTS in June.  Please check out
    +http://www.cs.wustl.edu/~schmidt/COOTS-96.html for more info.
    +
    +----------------------------------------
    +
    +45. 
    +
    +>   In one of my programs, a process needs to receive input from
    +> multiple input sources. One of the input sources is a file
    +> descriptor while another is a message queue. Is there a clean way to
    +> integrate this a message queue source into the Reactor class so that
    +> both inputs are handled uniformly?
    +
    +Do you have multiple threads on your platform?  If not, then life will
    +be *very* tough and you'll basically have to use multiple processes to
    +do what you're trying to do.  There is *no* portable way to combine
    +System V message queues and file descriptors on UNIX, unfortunately.
    +
    +If you do have threads, the easiest thing to do is to have a thread
    +reading the message queue and redirecting the messages into the
    +Reactor via its notify() method.  
    +
    +Please take a look at the program called
    +
    +examples/Reactor/Misc/notification.cpp
    +
    +for an example.
    +
    +----------------------------------------
    +
    +46. 
    +
    +> I'm writing a program to find out the address for a socket.  The
    +> idea is that we open an ACE_Acceptor (and will eventually perform
    +> accept() on it.)  Before we can do that we need to find out the
    +> address of the ACE_Acceptor so that we can publish it (for others to
    +> be able to connect to it.)  The trouble is that the call
    +> ACE_INET_Addr::get_host_name () prints "localhost" as the host name
    +> while I would like to principal host name to be printed instead.
    +
    +All ACE_INET_Addr::get_host_name() is doing is calling
    +ACE_OS::gethostbyaddr(), which in turn will call the socket
    +gethostbyaddr() function.  I suspect that what you should do is
    +something like the following:
    +
    +ACE_Acceptor listener (ACE_Addr::sap_any);
    +
    +ACE_INET_Addr addr;
    +
    +listener.get_local_addr (addr);
    +
    +char *host = addr.get_host_name ();
    +
    +if (::strcmp (host, "localhost") == 0)
    +{
    +  char name[MAXHOSTNAMELEN];
    +  ACE_OS::hostname (name, sizeof name);
    +  cerr << name << endl;
    +}
    +else
    +  cerr << host << endl;
    +
    +----------------------------------------
    +
    +47. 
    +
    +> Could you please point me to stuff dealing with asynchronous cross
    +> platform socket calls. I want to use non blocking socket calls on
    +> both UNIX and NT.
    +
    +Sure, no problem.  Take a look at the
    +
    +./examples/Connection/non_blocking/
    +
    +directory.  There are a number of examples there.  In addition, there
    +are examples of non-blocking connections in 
    +
    +./examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp
    +
    +The code that actually enables the non-blocking socket I/O is in
    +ace/IPC_SAP.cpp
    +
    +----------------------------------------
    +
    +48.
    +
    +> Is ACE exception-safe?  If I throw an exception out of event 
    +> handler, will the Reactor code clean itself?
    +
    +Yes, that should be ok.  In general, the two things to watch out for
    +with exceptions are:
    +
    +	1. Memory leaks -- There shouldn't be any memory leaks internally
    +	   to the Reactor since it doesn't allocate any memory when 
    +	   dispatching event handlers.
    +	  
    +	2. Locks -- In the MT_SAFE version of ACE, the Reactor acquires
    +	   an internal lock before dispatching Event_Handler callbacks.
    +	   However, this lock is controlled by an ACE_Guard, whose
    +	   destructor will release the lock if exceptions are thrown
    +	   from an Event_Handler.
    +
    +----------------------------------------
    +
    +49.
    +
    +>   I am building a Shared memory manager object using MMAP and MALLOC
    +> basically as:
    +> 
    +> typedef ACE_Malloc SHMALLOC;
    +> 
    +> I noticed that the ACE_MMAP_Memory_Pool class provides for the users
    +> to specify a Semaphore key. However, once I use it via the
    +> ACE_Malloc<..>::ACE_Malloc(const char* poolname) constructor, I lose
    +> this option. 
    +
    +Yes, that is correct.  That design decision was made to keep a clean
    +interface that will work for all the various types of memory pools.
    +
    +> Is there any recommended way to specialize ACE classes to allow this
    +> key to be overridden?
    +
    +Yes indeed, you just create a new subclass (e.g., class
    +My_Memory_Pool) that inherits from ACE_MMAP_Memory_Pool and then you
    +pass in the appropriate key to the constructor of ACE_MMAP_Memory_Pool
    +in the constructor of My_Memory_Pool.  Then you just say:
    +
    +typedef ACE_Malloc SHMALLOC;
    +
    +Please check out the file:
    +
    +examples/Shared_Malloc/Malloc.cpp 
    +
    +which illustrates more or less how to do this.
    +
    +----------------------------------------
    +
    +50.
    +
    +> What is the best way to turn on TRACE output in ACE.  I commented
    +> out the #define ACE_NTRACE 1 in config.h and rebuilt ACE and the
    +> examples.
    +
    +The best way to do this is to say
    +
    +#define ACE_NTRACE 0
    +
    +in config.h.
    +
    +> When I run the CPP-inserver example in examples/IPC_SAP/SOCK_SAP, I
    +> get some trace output but not everything I would expect to see.
    +
    +Can you please let me know what you'd expect to see that you're not
    +seeing?  Some of the ACE_TRACE macros for the lower-level ACE methods
    +are commented out to avoid problems with infinite recursion (i.e.,
    +tracing the ACE_Trace calls...).  I haven't had a chance to go over
    +all of these indepth, but I know that it should be possible to turn
    +many of them back on.
    +
    +> It would be nice to have a runtime option for turning trace on and
    +> off.
    +
    +There already is.  In fact, there are two ways to do it.
    +If you want to control tracing for the entire process, please check
    +out ACE_Trace::start_tracing() and ACE_Trace::stop_tracing().  
    +
    +If you want to control tracing on a per-thread basis please take a
    +look at the ACE_Log_Msg class.  There are methods called
    +stop_tracing() and start_tracing() that do what you want.
    +
    +----------------------------------------
    +
    +51. 
    +
    +> I've been using an acceptor and a connector in one (OS-) process.
    +> What does happen, if a signal is sent to this process? Is the signal
    +> processed by every ACE_Event_Handler (or its descendants) that is
    +> around?  The manual page simply states that handle signal is called
    +> as soon as a signal is triggered by the OS.
    +
    +How this signal is handled depends on several factors:
    +
    +1. Whether your using ACE_Sig_Handler or ACE_Sig_Handlers to register
    +   the signal handlers.
    +
    +2. If you're using ACE_Sig_Handler, then the ACE_Event_Handler * that
    +   you've most recently registered to handle the signal will
    +   have it's handle_signal() method called back by the Reactor.
    +
    +3. If you're using ACE_Sig_Handlers, then all of the ACE_Event_Handler *
    +   that you've register will be called back.
    +
    +For examples of how this works, please check out
    +
    +$ACE_ROOT/examples/Reactor/Misc/test_signals.cpp
    +
    +This contains a long comment that explains precisely how everything
    +works!
    diff --git a/ACE/Kokyu/DSRT_CV_Dispatcher_Impl_T.cpp b/ACE/Kokyu/DSRT_CV_Dispatcher_Impl_T.cpp
    new file mode 100644
    index 00000000000..a5d28115fac
    --- /dev/null
    +++ b/ACE/Kokyu/DSRT_CV_Dispatcher_Impl_T.cpp
    @@ -0,0 +1,286 @@
    +// $Id$
    +
    +#ifndef DSRT_CV_DISPATCHER_IMPL_T_CPP
    +#define DSRT_CV_DISPATCHER_IMPL_T_CPP
    +
    +#include "DSRT_CV_Dispatcher_Impl_T.h"
    +
    +#if !defined (__ACE_INLINE__)
    +//#include "DSRT_CV_Dispatcher_Impl_T.i"
    +#endif /* __ACE_INLINE__ */
    +
    +ACE_RCSID(Kokyu, DSRT_CV_Dispatcher_Impl_T, "$Id$")
    +
    +namespace Kokyu
    +{
    +  
    +/*
    +//@@VS: This is somehow not being recognized by MSVC, which results
    +//in a link error. For now, the definition has been moved to the .h
    +//file. Needs further investigation.
    +
    +template 
    +int Comparator_Adapter_Generator::MoreEligible::
    +operator ()(const DSRT_Dispatch_Item_var& item1,
    +            const DSRT_Dispatch_Item_var& item2)
    +{
    +  int rc = qos_comparator_ (item1->qos (), item2->qos ());
    +
    +  //more eligible
    +  if (rc == 1)
    +    return 1;
    +
    +  //if equally eligible, then resolve tie with the creation time of
    +  //the item
    +  if (rc == 0 && item1->insertion_time () < item2->insertion_time ())
    +    return 1;
    +
    +  return 0;
    +}
    +*/
    +
    +template 
    +DSRT_CV_Dispatcher_Impl::
    +DSRT_CV_Dispatcher_Impl (ACE_Sched_Params::Policy sched_policy, 
    +                         int sched_scope)
    +  :DSRT_Dispatcher_Impl (sched_policy, sched_scope),
    +   run_cond_ (run_cond_lock_)
    +{
    +}
    +
    +template  int
    +DSRT_CV_Dispatcher_Impl::
    +init_i (const DSRT_ConfigInfo&)
    +{
    +  return 0;
    +}
    +
    +template 
    +int DSRT_CV_Dispatcher_Impl::
    +schedule_i (Guid_t id, const DSRT_QoSDescriptor& qos)
    +{
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  ACE_DEBUG ((LM_DEBUG, 
    +              "(%t|%T):schedule_i enter\n")); 
    +#endif
    +
    +  DSRT_Dispatch_Item* item;
    +  ACE_hthread_t thr_handle;
    +  ACE_Thread::self (thr_handle);
    +
    +  if (ACE_OS::thr_setprio (thr_handle, 
    +                           this->blocked_prio_, 
    +                           this->sched_policy_) == -1)
    +    {
    +      ACE_ERROR_RETURN ((LM_ERROR,
    +                  ACE_TEXT ("%p\n"),
    +                  ACE_TEXT ("thr_setprio failed")), -1);
    +    }
    +
    +  ACE_NEW_RETURN (item,
    +                  DSRT_Dispatch_Item (id, qos),
    +                  -1);
    +  item->thread_handle (thr_handle);
    +
    +  ACE_GUARD_RETURN (ACE_SYNCH_RECURSIVE_MUTEX, guard, this->synch_lock_, -1);
    +  if (this->ready_queue_.insert (item) == -1)
    +    return -1;
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  this->ready_queue_.dump ();
    +
    +  ACE_DEBUG ((LM_DEBUG, 
    +              "(%t|%T):schedule_i after ready_q.insert\n")); 
    +#endif
    +  
    +  DSRT_Dispatch_Item_var item_var;
    +
    +  ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, cond_guard, run_cond_lock_, -1);
    +  this->ready_queue_.most_eligible (item_var);
    +
    +  guard.release ();
    +
    +  ACE_hthread_t most_eligible_thr_handle = item_var->thread_handle ();
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +      ACE_DEBUG ((LM_DEBUG, 
    +                  "(%t|%T):curr thr handle = %d\n", 
    +                  thr_handle)); 
    +      ACE_DEBUG ((LM_DEBUG, 
    +                  "(%t|%T):curr scheduled thr handle = %d\n", 
    +                  this->curr_scheduled_thr_handle_)); 
    +      ACE_DEBUG ((LM_DEBUG, 
    +                  "(%t|%T):most eligible thr handle = %d \n",
    +                  most_eligible_thr_handle)); 
    +#endif
    +
    +  if (this->curr_scheduled_thr_handle_ == thr_handle &&
    +      most_eligible_thr_handle != thr_handle)
    +    {
    +#ifdef KOKYU_DSRT_LOGGING
    +      ACE_DEBUG ((LM_DEBUG, 
    +                  "(%t|%T):curr sched thr handle = thr_handle & "
    +                  "most eligible thr handle != curr thr handle. "
    +                  "about to do a broadcast on CV to wake up most eligible\n")); 
    +#endif
    +      this->curr_scheduled_thr_handle_ = most_eligible_thr_handle;
    +      //wake up the most eligible thread
    +      this->run_cond_.broadcast ();
    +    }
    +
    +  //if the current thread is not the most eligible, then wait.
    +  //if the current thread is most eligible, but some thread is
    +  //scheduled currently, then wait.
    +  while (most_eligible_thr_handle != thr_handle ||
    +         (most_eligible_thr_handle == thr_handle && 
    +          this->curr_scheduled_thr_handle_ != thr_handle &&
    +          this->curr_scheduled_thr_handle_ != 0))
    +    {
    +      ACE_Time_Value tv (60,0);
    +      tv += ACE_OS::gettimeofday ();
    +      //wait a maximum of 1 min. This is an escape latch against lockups. 
    +#ifdef KOKYU_DSRT_LOGGING
    +      ACE_DEBUG ((LM_DEBUG, 
    +                  "(%t|%T): About to block on cv\n"));
    +#endif
    +      if (this->run_cond_.wait (&tv) == -1) 
    +        {
    +          ACE_ERROR ((LM_ERROR, 
    +                      "(%t|%T): run_cond.wait timed out -- Possible Lockup\n"));
    +        }
    +      this->ready_queue_.most_eligible (item_var);
    +      most_eligible_thr_handle = item_var->thread_handle ();
    +    }
    +  this->curr_scheduled_guid_ = item_var->guid ();
    +  this->curr_scheduled_thr_handle_ = most_eligible_thr_handle;
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +      ACE_DEBUG ((LM_DEBUG, 
    +                  "(%t|%T): %d is currently running\n",
    +                  thr_handle));
    +#endif
    +
    +  if (ACE_OS::thr_setprio (thr_handle, 
    +                           this->active_prio_, 
    +                           this->sched_policy_) == -1)
    +    {
    +      ACE_ERROR ((LM_ERROR,
    +                  ACE_TEXT ("%p\n"),
    +                  ACE_TEXT ("thr_setprio failed")));
    +    }
    +    
    +#ifdef KOKYU_DSRT_LOGGING
    +  ACE_DEBUG ((LM_DEBUG, 
    +              "(%t|%T):schedule_i exit\n")); 
    +#endif
    +
    +  return 0;
    +}
    +
    +template 
    +int DSRT_CV_Dispatcher_Impl::
    +update_schedule_i (Guid_t guid, const DSRT_QoSDescriptor& qos)
    +{ 
    +  return this->schedule_i (guid, qos);
    +}
    +
    +template 
    +int DSRT_CV_Dispatcher_Impl::
    +update_schedule_i (Guid_t guid, Block_Flag_t flag)
    +{
    +  ACE_GUARD_RETURN (ACE_SYNCH_RECURSIVE_MUTEX, guard, this->synch_lock_, -1);
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  ACE_DEBUG ((LM_DEBUG, "(%t): update schedule for block entered\n"));
    +#endif
    +
    +  DSRT_Dispatch_Item_var dispatch_item;
    +  ACE_hthread_t thr_handle;
    +  ACE_Thread::self (thr_handle);
    +
    +  int found = this->ready_queue_.find (guid, dispatch_item);
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  if (found == 0)
    +      ACE_DEBUG ((LM_DEBUG, "(%t|%T): %d found in ready queue\n", thr_handle));
    +  else
    +      ACE_DEBUG ((LM_DEBUG, "(%t|%T): %d not found in ready queue\n", 
    +                  thr_handle));    
    +#endif
    +
    +  if (found == 0 && flag == BLOCK)
    +    {
    +      thr_handle = dispatch_item->thread_handle ();
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +      ACE_DEBUG ((LM_DEBUG, "(%t|%T): update schedule: %d found\n", thr_handle));
    +#endif
    +
    +      if (ACE_OS::thr_setprio (thr_handle, 
    +                               this->blocked_prio_, 
    +                               this->sched_policy_) == -1)
    +        {
    +          ACE_ERROR ((LM_ERROR,
    +                      ACE_TEXT ("%p\n"),
    +                      ACE_TEXT ("thr_setprio failed")));
    +        }
    +
    +      int rc = this->cancel_schedule (guid);
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +      ACE_DEBUG ((LM_DEBUG, "(%t): update schedule for block done\n"));
    +#endif
    +
    +      return rc;
    +    }
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  ACE_DEBUG ((LM_DEBUG, "(%t): update schedule for block done\n"));
    +#endif
    +
    +  return -1;
    +}
    +
    +template  int
    +DSRT_CV_Dispatcher_Impl::
    +cancel_schedule_i (Guid_t guid)
    +{
    +  ACE_GUARD_RETURN (ACE_SYNCH_RECURSIVE_MUTEX, guard, this->synch_lock_, -1);
    +
    +  ACE_hthread_t thr_handle;
    +  ACE_Thread::self (thr_handle);
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  ACE_DEBUG ((LM_DEBUG, "(%t|%T): about to remove guid\n"));
    +#endif
    +
    +  this->ready_queue_.remove (guid);
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  this->ready_queue_.dump ();
    +#endif
    +
    +  if (this->curr_scheduled_thr_handle_ == thr_handle)
    +    {
    +      this->curr_scheduled_guid_ = 0;
    +      this->curr_scheduled_thr_handle_ = 0;
    +    }
    +
    +  ACE_GUARD_RETURN (cond_lock_t,
    +                    mon, this->run_cond_lock_, 0);
    +  this->run_cond_.broadcast ();
    +  return 0;
    +}
    +
    +template  int
    +DSRT_CV_Dispatcher_Impl::
    +shutdown_i ()
    +{
    +  this->shutdown_flagged_ = 1;
    +  return 0;
    +}
    +
    +}
    +
    +#endif /* DSRT_CV_DISPATCHER_IMPL_T_CPP */
    diff --git a/ACE/Kokyu/DSRT_CV_Dispatcher_Impl_T.h b/ACE/Kokyu/DSRT_CV_Dispatcher_Impl_T.h
    new file mode 100644
    index 00000000000..305afb55ccc
    --- /dev/null
    +++ b/ACE/Kokyu/DSRT_CV_Dispatcher_Impl_T.h
    @@ -0,0 +1,86 @@
    +/* -*- C++ -*- */
    +/**
    + *  @file  DSRT_CV_Dispatcher_Impl_T.h
    + *
    + *  $Id$
    + *
    + *  @author Venkita Subramonian (venkita@cs.wustl.edu)
    + *
    + */
    +
    +#ifndef DSRT_CV_DISPATCHER_IMPL_T_H
    +#define DSRT_CV_DISPATCHER_IMPL_T_H
    +#include /**/ "ace/pre.h"
    +#include "ace/Task.h"
    +#include "ace/Copy_Disabled.h"
    +
    +#if !defined (ACE_LACKS_PRAGMA_ONCE)
    +# pragma once
    +#endif /* ACE_LACKS_PRAGMA_ONCE */
    +
    +#include "Kokyu_dsrt.h"
    +#include "DSRT_Sched_Queue_T.h"
    +#include "DSRT_Dispatcher_Impl_T.h"
    +
    +namespace Kokyu
    +{
    +  template
    +  class DSRT_CV_Dispatcher_Impl :
    +    public DSRT_Dispatcher_Impl,
    +    public ACE_Copy_Disabled
    +  {
    +  public:
    +    typedef typename
    +    DSRT_Scheduler_Traits::Guid_t Guid_t;
    +
    +    typedef typename
    +    DSRT_Scheduler_Traits::QoSDescriptor_t DSRT_QoSDescriptor;
    +
    +    DSRT_CV_Dispatcher_Impl (ACE_Sched_Params::Policy sched_policy,
    +                             int sched_scope);
    +
    +    int init_i (const DSRT_ConfigInfo&);
    +
    +    /// Schedule a thread dynamically based on the qos info supplied.
    +    int schedule_i (Guid_t, const DSRT_QoSDescriptor&);
    +
    +    /// Update the schedule for a thread. This could alter the current
    +    /// schedule.
    +    int update_schedule_i (Guid_t, const DSRT_QoSDescriptor&);
    +
    +    /// Inform the scheduler that the caller thread is about to
    +    /// block. This could alter the current schedule.
    +    int update_schedule_i (Guid_t, Block_Flag_t);
    +
    +    /// Cancel the schedule for a thread. This could alter the current
    +    /// schedule.
    +    int cancel_schedule_i (Guid_t);
    +
    +    /// Shut down the dispatcher. The dispatcher will stop processing
    +    /// requests.
    +    int shutdown_i ();
    +
    +  private:
    +    typedef ACE_SYNCH_MUTEX cond_lock_t;
    +    typedef ACE_SYNCH_CONDITION cond_t;
    +
    +    cond_lock_t run_cond_lock_;
    +    cond_t run_cond_;
    +  };
    +
    +}
    +
    +#if !defined (__ACE_INLINE__)
    +//#include "DSRT_CV_Dispatcher_Impl_T.i"
    +#endif /* __ACE_INLINE__ */
    +
    +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
    +#include "DSRT_CV_Dispatcher_Impl_T.cpp"
    +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
    +
    +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
    +#pragma implementation ("DSRT_CV_Dispatcher_Impl_T.cpp")
    +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
    +
    +#include /**/ "ace/post.h"
    +#endif /* DSRT_DIRECT_DISPATCHER_IMPL_T_H */
    diff --git a/ACE/Kokyu/DSRT_Direct_Dispatcher_Impl_T.cpp b/ACE/Kokyu/DSRT_Direct_Dispatcher_Impl_T.cpp
    new file mode 100644
    index 00000000000..ebbea987c50
    --- /dev/null
    +++ b/ACE/Kokyu/DSRT_Direct_Dispatcher_Impl_T.cpp
    @@ -0,0 +1,380 @@
    +// $Id$
    +
    +#ifndef DSRT_DIRECT_DISPATCHER_IMPL_T_CPP
    +#define DSRT_DIRECT_DISPATCHER_IMPL_T_CPP
    +
    +#include "DSRT_Direct_Dispatcher_Impl_T.h"
    +
    +#if !defined (__ACE_INLINE__)
    +//#include "DSRT_Direct_Dispatcher_Impl_T.i"
    +#endif /* __ACE_INLINE__ */
    +
    +ACE_RCSID(Kokyu, DSRT_Direct_Dispatcher_Impl_T, "$Id$")
    +
    +namespace Kokyu
    +{
    +
    +/*
    +//@@VS: This is somehow not being recognized by MSVC, which results
    +//in a link error. For now, the definition has been moved to the .h
    +//file. Needs further investigation.
    +
    +template 
    +int Comparator_Adapter_Generator::MoreEligible::
    +operator ()(const DSRT_Dispatch_Item_var& item1,
    +            const DSRT_Dispatch_Item_var& item2)
    +{
    +  int rc = qos_comparator_ (item1->qos (), item2->qos ());
    +
    +  //more eligible
    +  if (rc == 1)
    +    return 1;
    +
    +  //if equally eligible, then resolve tie with the creation time of
    +  //the item
    +  if (rc == 0 && item1->insertion_time () < item2->insertion_time ())
    +    return 1;
    +
    +  return 0;
    +}
    +*/
    +template 
    +DSRT_Direct_Dispatcher_Impl::
    +DSRT_Direct_Dispatcher_Impl (ACE_Sched_Params::Policy sched_policy,
    +                         int sched_scope)
    +  :DSRT_Dispatcher_Impl(sched_policy, sched_scope),
    +   sched_queue_modified_ (0),
    +   sched_queue_modified_cond_ (sched_queue_modified_cond_lock_)
    +{
    +  //Run scheduler thread at highest priority
    +  if (this->activate (this->rt_thr_flags_, 1, 0, this->executive_prio_) == -1)
    +    {
    +      ACE_ERROR ((LM_ERROR,
    +                  "(%t|%T) cannot activate scheduler thread in RT mode."
    +                  "Trying in non RT mode\n"));
    +      if (this->activate (this->non_rt_thr_flags_) == -1)
    +        ACE_ERROR ((LM_ERROR,
    +                    "(%t|%T) cannot activate scheduler thread\n"));
    +    }
    +}
    +
    +template  int
    +DSRT_Direct_Dispatcher_Impl::
    +init_i (const DSRT_ConfigInfo&)
    +{
    +  return 0;
    +}
    +
    +template  int
    +DSRT_Direct_Dispatcher_Impl::svc (void)
    +{
    +  ACE_hthread_t scheduler_thr_handle;
    +  ACE_Thread::self (scheduler_thr_handle);
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  int prio;
    +  ACE_DEBUG ((LM_DEBUG,
    +              ACE_TEXT ("max prio=%d\n")
    +              ACE_TEXT ("min prio=%d\n")
    +              ACE_TEXT ("active prio=%d\n")
    +              ACE_TEXT ("inactive prio=%d\n"),
    +              max_prio_,
    +              min_prio_,
    +              active_prio_,
    +              inactive_prio_));
    +
    +  if (ACE_OS::thr_getprio (scheduler_thr_handle, prio) == -1)
    +    {
    +      if (errno == ENOTSUP)
    +        {
    +          ACE_ERROR((LM_ERROR,
    +                     ACE_TEXT ("getprio not supported\n")
    +                     ));
    +        }
    +      else
    +        {
    +          ACE_ERROR ((LM_ERROR,
    +                      ACE_TEXT ("%p\n")
    +                      ACE_TEXT ("thr_getprio failed")));
    +        }
    +    }
    +
    +  ACE_DEBUG ((LM_DEBUG, "(%t): Scheduler thread prio is %d\n", prio));
    +#endif /*DSRT_LOGGING*/
    +
    +  while(1)
    +    {
    +      ACE_GUARD_RETURN (cond_lock_t,
    +                        mon,
    +                        sched_queue_modified_cond_lock_,
    +                        0);
    +
    +      if (this->shutdown_flagged_)
    +        break;
    +
    +      while (!sched_queue_modified_)
    +        {
    +#ifdef KOKYU_DSRT_LOGGING
    +          ACE_DEBUG ((LM_DEBUG,
    +                      "(%t|%T): sched thread about to wait on cv\n"));
    +#endif
    +          sched_queue_modified_cond_.wait ();
    +        }
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +      ACE_DEBUG ((LM_DEBUG, "(%t|%T): sched thread done waiting on cv\n"));
    +#endif
    +
    +      sched_queue_modified_ = 0;
    +
    +      ACE_GUARD_RETURN (ACE_SYNCH_RECURSIVE_MUTEX,
    +                        synch_lock_mon,
    +                        this->synch_lock_,
    +                        0);
    +
    +      if (this->ready_queue_.current_size () <= 0)
    +        continue;
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +      ACE_DEBUG ((LM_DEBUG, "(%t|%T):Sched Queue contents===>\n"));
    +      this->ready_queue_.dump ();
    +#endif
    +      DSRT_Dispatch_Item_var item_var;
    +      this->ready_queue_.most_eligible (item_var);
    +
    +      ACE_hthread_t most_eligible_thr_handle = item_var->thread_handle ();
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +      ACE_DEBUG ((LM_DEBUG,
    +                  "(%t|%T):curr scheduled thr handle = %d\n",
    +                  this->curr_scheduled_thr_handle_));
    +      ACE_DEBUG ((LM_DEBUG,
    +                  "(%t|%T):most eligible thr handle = %d \n",
    +                  most_eligible_thr_handle));
    +#endif
    +
    +      if (this->curr_scheduled_thr_handle_ != most_eligible_thr_handle)
    +        {
    +          if (this->curr_scheduled_thr_handle_ != 0)
    +            {
    +              if (ACE_OS::thr_setprio (this->curr_scheduled_thr_handle_,
    +                                       this->inactive_prio_,
    +                                       this->sched_policy_) == -1)
    +                {
    +                  ACE_ERROR ((LM_ERROR,
    +                              ACE_TEXT ("%p\n"),
    +                              ACE_TEXT ("thr_setprio on curr_scheduled_thr_handle_ failed.")));
    +                  ACE_DEBUG ((LM_DEBUG, "thr_handle = %d, prio = %d\n",
    +                              this->curr_scheduled_thr_handle_,
    +                              this->inactive_prio_));
    +                }
    +            }
    +
    +          if (ACE_OS::thr_setprio (most_eligible_thr_handle,
    +                                   this->active_prio_, this->sched_policy_) == -1)
    +            {
    +              ACE_ERROR ((LM_ERROR,
    +                          ACE_TEXT ("%p\n"),
    +                          ACE_TEXT ("thr_setprio on most_eligible_thr_handle failed")));
    +            }
    +
    +          this->curr_scheduled_thr_handle_ = most_eligible_thr_handle;
    +          this->curr_scheduled_guid_ = item_var->guid ();
    +        }
    +          /*change all threads in blocked_prio_ to inactive_prio_*/
    +          this->ready_queue_.change_prio(this->blocked_prio_, this->inactive_prio_,this->sched_policy_);
    +    }
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  ACE_DEBUG ((LM_DEBUG, "(%t): sched thread exiting\n"));
    +#endif
    +
    +  return 0;
    +}
    +
    +template 
    +int DSRT_Direct_Dispatcher_Impl::
    +schedule_i (Guid_t id, const DSRT_QoSDescriptor& qos)
    +{
    +  ACE_GUARD_RETURN (ACE_SYNCH_RECURSIVE_MUTEX, guard, this->synch_lock_, -1);
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  ACE_DEBUG ((LM_DEBUG,
    +              "(%t|%T):schedule_i enter\n"));
    +#endif
    +
    +  DSRT_Dispatch_Item* item;
    +  ACE_hthread_t thr_handle;
    +  ACE_Thread::self (thr_handle);
    +
    +  ACE_NEW_RETURN (item,
    +                  DSRT_Dispatch_Item (id, qos),
    +                  -1);
    +  item->thread_handle (thr_handle);
    +
    +  if (this->ready_queue_.insert (item) == -1)
    +    return -1;
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  ACE_DEBUG ((LM_DEBUG,
    +              "(%t|%T):schedule_i after ready_q.insert\n"));
    +#endif
    +
    +  if (ACE_OS::thr_setprio (thr_handle,
    +                           this->blocked_prio_,
    +                           this->sched_policy_) == -1)
    +    {
    +      ACE_ERROR_RETURN ((LM_ERROR,
    +                  ACE_TEXT ("%p\n"),
    +                  ACE_TEXT ("thr_setprio failed")), -1);
    +    }
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  ACE_DEBUG ((LM_DEBUG,
    +              "(%t|%T):schedule_i after thr_setprio\n"));
    +#endif
    +
    +  //ready_queue_.dump ();
    +
    +  /*first release ready_queue_ lock. Otherwise if the scheduler gets the
    +  sched_queue_modified_cond_lock first, then try to get the ready_queue_ lock
    +  just when one thread who gets the ready_queue_ lock first, then try to get
    +  sched_queue_modified_cond_lock. Deadlock happens.
    +  */
    +  guard.release ();
    +
    +  //@@ Perhaps the lock could be moved further down just before
    +  //setting the condition variable?
    +  ACE_GUARD_RETURN (cond_lock_t,
    +                    mon, this->sched_queue_modified_cond_lock_, 0);
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  ACE_DEBUG ((LM_DEBUG,
    +              "(%t|%T):schedule_i after acquiring cond lock\n"));
    +#endif
    +
    +  this->sched_queue_modified_ = 1;
    +  this->sched_queue_modified_cond_.signal ();
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  ACE_DEBUG ((LM_DEBUG,
    +              "(%t|%T):schedule_i exit\n"));
    +#endif
    +
    +  return 0;
    +}
    +
    +template 
    +int DSRT_Direct_Dispatcher_Impl::
    +update_schedule_i (Guid_t guid, const DSRT_QoSDescriptor& qos)
    +{
    +  return this->schedule (guid, qos);
    +}
    +
    +template 
    +int DSRT_Direct_Dispatcher_Impl::
    +update_schedule_i (Guid_t guid, Block_Flag_t flag)
    +{
    +  ACE_GUARD_RETURN (ACE_SYNCH_RECURSIVE_MUTEX, guard, this->synch_lock_, -1);
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  ACE_DEBUG ((LM_DEBUG, "(%t): update schedule for block entered\n"));
    +#endif
    +
    +  DSRT_Dispatch_Item_var dispatch_item;
    +  ACE_hthread_t thr_handle;
    +  //@@ Perhaps the lock could be got rid of. It looks like the state
    +  //of this object is not getting modified here. It makes calls to
    +  //other methods, which already are thread-safe.
    +  //ACE_Guard mon(sched_queue_modified_cond_lock_);
    +
    +  int found = this->ready_queue_.find (guid, dispatch_item);
    +  if (found == 0 && flag == BLOCK)
    +    {
    +      thr_handle = dispatch_item->thread_handle ();
    +      if (ACE_OS::thr_setprio (thr_handle,
    +                               this->blocked_prio_,
    +                               this->sched_policy_) == -1)
    +        {
    +          ACE_ERROR ((LM_ERROR,
    +                      ACE_TEXT ("%p\n"),
    +                      ACE_TEXT ("thr_setprio failed")));
    +        }
    +
    +      //monitor released because cancel_schedule would acquire the
    +      //lock. Using recursive mutex creates lock up.
    +      //
    +      //@@ Need to investigate this further. Also we can consider
    +      //using the Thread-Safe interface pattern.
    +      //mon.release ();
    +      int rc = this->cancel_schedule (guid);
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +      ACE_DEBUG ((LM_DEBUG, "(%t): update schedule for block done\n"));
    +#endif
    +
    +      return rc;
    +    }
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  ACE_DEBUG ((LM_DEBUG, "(%t): update schedule for block done\n"));
    +#endif
    +
    +  return -1;
    +}
    +
    +template  int
    +DSRT_Direct_Dispatcher_Impl::
    +cancel_schedule_i (Guid_t guid)
    +{
    +  ACE_GUARD_RETURN (ACE_SYNCH_RECURSIVE_MUTEX, guard, this->synch_lock_, -1);
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  ACE_DEBUG ((LM_DEBUG, "(%t): about to remove guid\n"));
    +#endif
    +
    +  this->ready_queue_.remove (guid);
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  this->ready_queue_.dump ();
    +#endif
    +
    +  if (this->curr_scheduled_guid_ == guid)
    +    {
    +      this->curr_scheduled_guid_ = 0;
    +      this->curr_scheduled_thr_handle_ = 0;
    +    }
    +
    +  //release ready_queue_ lock first before getting another lock
    +  guard.release ();
    +
    +  ACE_GUARD_RETURN (cond_lock_t,
    +                    mon, this->sched_queue_modified_cond_lock_, 0);
    +  this->sched_queue_modified_ = 1;
    +  this->sched_queue_modified_cond_.signal ();
    +  return 0;
    +}
    +
    +template  int
    +DSRT_Direct_Dispatcher_Impl::
    +shutdown_i ()
    +{
    +  this->shutdown_flagged_ = 1;
    +
    +  ACE_Guard mon(this->sched_queue_modified_cond_lock_);
    +  this->sched_queue_modified_ = 1;
    +  this->sched_queue_modified_cond_.signal ();
    +  // We have to wait until the scheduler executive thread shuts
    +  // down. But we have acquired the lock and if we wait without
    +  // releasing it, the scheduler thread will try to acquire it after
    +  // it gets woken up by the above signal and it fails to acquire the
    +  // lock. This will lead to a deadlock. So release the lock before we
    +  // wait.
    +  mon.release ();
    +  this->wait ();
    +  return 0;
    +}
    +
    +}
    +
    +#endif /* DSRT_DIRECT_DISPATCHER_IMPL_T_CPP */
    diff --git a/ACE/Kokyu/DSRT_Direct_Dispatcher_Impl_T.h b/ACE/Kokyu/DSRT_Direct_Dispatcher_Impl_T.h
    new file mode 100644
    index 00000000000..1e5dddfaecd
    --- /dev/null
    +++ b/ACE/Kokyu/DSRT_Direct_Dispatcher_Impl_T.h
    @@ -0,0 +1,92 @@
    +/* -*- C++ -*- */
    +/**
    + *  @file  DSRT_Direct_Dispatcher_Impl_T.h
    + *
    + *  $Id$
    + *
    + *  @author Venkita Subramonian (venkita@cs.wustl.edu)
    + *
    + */
    +
    +#ifndef DSRT_DIRECT_DISPATCHER_IMPL_T_H
    +#define DSRT_DIRECT_DISPATCHER_IMPL_T_H
    +#include /**/ "ace/pre.h"
    +
    +#include "ace/Task.h"
    +
    +
    +#if !defined (ACE_LACKS_PRAGMA_ONCE)
    +# pragma once
    +#endif /* ACE_LACKS_PRAGMA_ONCE */
    +#include "ace/Copy_Disabled.h"
    +#include "Kokyu_dsrt.h"
    +#include "DSRT_Sched_Queue_T.h"
    +#include "DSRT_Dispatcher_Impl_T.h"
    +
    +namespace Kokyu
    +{
    +  template
    +  class DSRT_Direct_Dispatcher_Impl :
    +    public ACE_Task_Base,
    +    public DSRT_Dispatcher_Impl,
    +    public ACE_Copy_Disabled
    +  {
    +  public:
    +    typedef typename
    +    DSRT_Scheduler_Traits::Guid_t Guid_t;
    +
    +    typedef typename
    +    DSRT_Scheduler_Traits::QoSDescriptor_t DSRT_QoSDescriptor;
    +
    +    DSRT_Direct_Dispatcher_Impl (ACE_Sched_Params::Policy sched_policy, 
    +                                 int sched_scope);
    +
    +    int init_i (const DSRT_ConfigInfo&);
    +
    +    /// Schedule a thread dynamically based on the qos info supplied.
    +    int schedule_i (Guid_t, const DSRT_QoSDescriptor&);
    +
    +    /// Update the schedule for a thread. This could alter the current
    +    /// schedule.
    +    int update_schedule_i (Guid_t, const DSRT_QoSDescriptor&);
    +
    +    /// Inform the scheduler that the caller thread is about to
    +    /// block. This could alter the current schedule.
    +    int update_schedule_i (Guid_t, Block_Flag_t);
    +
    +    /// Cancel the schedule for a thread. This could alter the current
    +    /// schedule.
    +    int cancel_schedule_i (Guid_t);
    +
    +    /// Shut down the dispatcher. The dispatcher will stop processing
    +    /// requests.
    +    int shutdown_i ();
    +
    +  private:
    +    typedef ACE_SYNCH_MUTEX cond_lock_t;
    +    typedef ACE_SYNCH_CONDITION cond_t;
    +
    +    u_int sched_queue_modified_;
    +    cond_lock_t sched_queue_modified_cond_lock_;
    +    cond_t sched_queue_modified_cond_;
    +
    +  private:
    +    int svc (void);
    +  };
    +
    +}
    +
    +#if !defined (__ACE_INLINE__)
    +//#include "DSRT_Direct_Dispatcher_Impl_T.i"
    +#endif /* __ACE_INLINE__ */
    +
    +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
    +#include "DSRT_Direct_Dispatcher_Impl_T.cpp"
    +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
    +
    +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
    +#pragma implementation ("DSRT_Direct_Dispatcher_Impl_T.cpp")
    +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
    +
    +#include /**/ "ace/post.h"
    +#endif /* DSRT_DIRECT_DISPATCHER_IMPL_T_H */
    diff --git a/ACE/Kokyu/DSRT_Dispatch_Item_T.cpp b/ACE/Kokyu/DSRT_Dispatch_Item_T.cpp
    new file mode 100644
    index 00000000000..123b4a47e2c
    --- /dev/null
    +++ b/ACE/Kokyu/DSRT_Dispatch_Item_T.cpp
    @@ -0,0 +1,35 @@
    +// $Id$
    +
    +#ifndef DSRT_DISPATCH_ITEM_T_CPP
    +#define DSRT_DISPATCH_ITEM_T_CPP
    +
    +#include "DSRT_Dispatch_Item_T.h"
    +
    +#if ! defined (__ACE_INLINE__)
    +#include "DSRT_Dispatch_Item_T.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +ACE_RCSID(Kokyu, DSRT_Dispatch_Item, "$Id$")
    +
    +namespace Kokyu
    +{
    +
    +template 
    +DSRT_Dispatch_Item_var::
    +DSRT_Dispatch_Item_var (DSRT_Dispatch_Item *p)
    +  :ACE_Strong_Bound_Ptr,
    +                        ACE_SYNCH_MUTEX> (p)
    +{
    +}
    +
    +template 
    +DSRT_Dispatch_Item_var::
    +DSRT_Dispatch_Item_var (const DSRT_Dispatch_Item_var &r)
    +  :ACE_Strong_Bound_Ptr,
    +                        ACE_SYNCH_MUTEX> (r)
    +{
    +}
    +
    +}
    +
    +#endif /* DSRT_DISPATCH_ITEM_T_CPP */
    diff --git a/ACE/Kokyu/DSRT_Dispatch_Item_T.h b/ACE/Kokyu/DSRT_Dispatch_Item_T.h
    new file mode 100644
    index 00000000000..0c76de53483
    --- /dev/null
    +++ b/ACE/Kokyu/DSRT_Dispatch_Item_T.h
    @@ -0,0 +1,103 @@
    +/* -*- C++ -*- */
    +/**
    + *  @file  DSRT_Dispatch_Item_T.h
    + *
    + *  $Id$
    + *
    + *  @author Venkita Subramonian (venkita@cs.wustl.edu)
    + *
    + */
    +
    +#ifndef DSRT_DISPATCH_ITEM_H
    +#define DSRT_DISPATCH_ITEM_H
    +#include /**/ "ace/pre.h"
    +#include "ace/Bound_Ptr.h"
    +#include "ace/Copy_Disabled.h"
    +
    +#if !defined (ACE_LACKS_PRAGMA_ONCE)
    +# pragma once
    +#endif /* ACE_LACKS_PRAGMA_ONCE */
    +
    +#include "Kokyu_dsrt.h"
    +
    +namespace Kokyu
    +{
    +  /**
    +   * @class DSRT_Dispatch_Item
    +   *
    +   * @brief This stores information about a schedulable thread.
    +   */
    +
    +  template 
    +  class DSRT_Dispatch_Item : private ACE_Copy_Disabled
    +  {
    +    typedef typename
    +    DSRT_Scheduler_Traits::Guid_t Guid_t;
    +
    +    typedef typename
    +    DSRT_Scheduler_Traits::QoSDescriptor_t DSRT_QoSDescriptor;
    +
    +  protected:
    +    ACE_hthread_t thr_handle_;
    +    Guid_t guid_;
    +    DSRT_QoSDescriptor qos_;
    +    ACE_Time_Value insertion_time_;
    +
    +  public:
    +    DSRT_Dispatch_Item (Guid_t guid, const DSRT_QoSDescriptor&);
    +
    +    /// Get the guid.
    +    Guid_t guid ();
    +
    +    /// Get the associated qos value.
    +    DSRT_QoSDescriptor qos ();
    +
    +    /// Get the thread handle.
    +    ACE_hthread_t thread_handle ();
    +
    +    /// Set the thread handle.
    +    void thread_handle (ACE_hthread_t &handle);
    +
    +    /// Get the insertion time.
    +    ACE_Time_Value insertion_time ();
    +
    +    /// Set the insertion time.
    +    void insertion_time (const ACE_Time_Value&);
    +  };
    +
    +  /**
    +   * @class DSRT_Dispatch_Item_var
    +   *
    +   * @brief Smart pointer to dynamically allocated 
    +   * DSRT_Dispatch_Item  objects.
    +   */
    +  template 
    +  class DSRT_Dispatch_Item_var :
    +    public ACE_Strong_Bound_Ptr<
    +                              DSRT_Dispatch_Item,
    +                              ACE_SYNCH_MUTEX>
    +  {
    +  public:
    +    explicit
    +    DSRT_Dispatch_Item_var (DSRT_Dispatch_Item
    +                            *p = 0);
    +
    +    DSRT_Dispatch_Item_var (
    +         const DSRT_Dispatch_Item_var &r);
    +  };
    +}
    +
    +#if defined (__ACE_INLINE__)
    +#include "DSRT_Dispatch_Item_T.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
    +#include "DSRT_Dispatch_Item_T.cpp"
    +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
    +
    +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
    +#pragma implementation ("DSRT_Dispatch_Item_T.cpp")
    +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
    +
    +#include /**/ "ace/post.h"
    +#endif /* DSRT_DISPATCH_ITEM_H */
    diff --git a/ACE/Kokyu/DSRT_Dispatch_Item_T.inl b/ACE/Kokyu/DSRT_Dispatch_Item_T.inl
    new file mode 100644
    index 00000000000..79532b79c10
    --- /dev/null
    +++ b/ACE/Kokyu/DSRT_Dispatch_Item_T.inl
    @@ -0,0 +1,70 @@
    +/* -*- C++ -*- */
    +/**
    + *  @file  DSRT_Dispatch_Item_T.inl
    + *
    + *  $Id$
    + *
    + *  @author Venkita Subramonian (venkita@cs.wustl.edu)
    + *
    + */
    +
    +namespace Kokyu
    +{
    +
    +template 
    +ACE_INLINE
    +DSRT_Dispatch_Item::
    +DSRT_Dispatch_Item (Guid_t guid, const DSRT_QoSDescriptor& qos)
    +  :guid_ (guid), qos_ (qos)
    +{
    +}
    +
    +template 
    +ACE_INLINE typename DSRT_Dispatch_Item::Guid_t
    +DSRT_Dispatch_Item::
    +guid ()
    +{
    +  return guid_;
    +}
    +
    +template 
    +ACE_INLINE typename DSRT_Dispatch_Item::DSRT_QoSDescriptor
    +DSRT_Dispatch_Item::
    +qos ()
    +{
    +  return qos_;
    +}
    +
    +template 
    +ACE_INLINE ACE_hthread_t
    +DSRT_Dispatch_Item::
    +thread_handle ()
    +{
    +  return thr_handle_;
    +}
    +
    +template 
    +ACE_INLINE void
    +DSRT_Dispatch_Item::
    +thread_handle (ACE_hthread_t &handle)
    +{
    +  thr_handle_ = handle;
    +}
    +
    +template 
    +ACE_INLINE void
    +DSRT_Dispatch_Item::
    +insertion_time (const ACE_Time_Value& tv)
    +{
    +  this->insertion_time_ = tv;
    +}
    +
    +template 
    +ACE_INLINE ACE_Time_Value
    +DSRT_Dispatch_Item::
    +insertion_time ()
    +{
    +  return this->insertion_time_;
    +}
    +
    +}
    diff --git a/ACE/Kokyu/DSRT_Dispatcher_Impl_T.cpp b/ACE/Kokyu/DSRT_Dispatcher_Impl_T.cpp
    new file mode 100644
    index 00000000000..3d3ac5ed8f2
    --- /dev/null
    +++ b/ACE/Kokyu/DSRT_Dispatcher_Impl_T.cpp
    @@ -0,0 +1,56 @@
    +// $Id$
    +
    +#ifndef DSRT_DISPATCHER_IMPL_T_CPP
    +#define DSRT_DISPATCHER_IMPL_T_CPP
    +
    +#include "DSRT_Dispatcher_Impl_T.h"
    +
    +#if ! defined (__ACE_INLINE__)
    +#include "DSRT_Dispatcher_Impl_T.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +ACE_RCSID(Kokyu, DSRT_Dispatcher_Impl, "$Id$")
    +
    +namespace Kokyu
    +{
    +
    +template 
    +DSRT_Dispatcher_Impl::
    +DSRT_Dispatcher_Impl (ACE_Sched_Params::Policy sched_policy, 
    +                          int sched_scope)
    +  : sched_policy_ (sched_policy),
    +    sched_scope_ (sched_scope),
    +    min_prio_ (ACE_Sched_Params::priority_min
    +               (sched_policy_,
    +                sched_scope)),
    +    max_prio_ (ACE_Sched_Params::priority_max
    +               (sched_policy_,
    +                sched_scope)),
    +    executive_prio_ (max_prio_),
    +    blocked_prio_ (ACE_Sched_Params::previous_priority
    +                   (sched_policy_,
    +                    max_prio_,
    +                    sched_scope)),
    +    inactive_prio_ (min_prio_),
    +    active_prio_ (ACE_Sched_Params::next_priority
    +                  (sched_policy_,
    +                   min_prio_)),
    +    shutdown_flagged_ (0),
    +    non_rt_thr_flags_ (THR_NEW_LWP | THR_JOINABLE | THR_BOUND),
    +    curr_scheduled_thr_handle_ (0)
    +{
    +  if (sched_policy_ == ACE_SCHED_FIFO)
    +    rt_thr_flags_ = non_rt_thr_flags_ | THR_SCHED_FIFO;
    +  else if (sched_policy_ == ACE_SCHED_RR)
    +    rt_thr_flags_ = non_rt_thr_flags_ | THR_SCHED_RR;
    +}
    +
    +//virtual - so don't inline
    +template 
    +DSRT_Dispatcher_Impl::~DSRT_Dispatcher_Impl ()
    +{
    +}
    +
    +}
    +
    +#endif /* DSRT_DISPATCHER_IMPL_T_CPP */
    diff --git a/ACE/Kokyu/DSRT_Dispatcher_Impl_T.h b/ACE/Kokyu/DSRT_Dispatcher_Impl_T.h
    new file mode 100644
    index 00000000000..18fd07695cb
    --- /dev/null
    +++ b/ACE/Kokyu/DSRT_Dispatcher_Impl_T.h
    @@ -0,0 +1,210 @@
    +/* -*- C++ -*- */
    +/**
    + *  @file   DSRT_Dispatcher_Impl_T.h
    + *
    + *  $Id$
    + *
    + */
    +
    +#ifndef DSRT_DISPATCHER_IMPL_H
    +#define DSRT_DISPATCHER_IMPL_H
    +#include /**/ "ace/pre.h"
    +
    +#include "ace/Synch_Traits.h"
    +#if defined (ACE_HAS_THREADS)
    +#  include "ace/Recursive_Thread_Mutex.h"
    +#else
    +#  include "ace/Null_Mutex.h"
    +#endif /* ACE_HAS_THREADS */
    +
    +#include "Kokyu_dsrt.h"
    +
    +#if !defined (ACE_LACKS_PRAGMA_ONCE)
    +# pragma once
    +#endif /* ACE_LACKS_PRAGMA_ONCE */
    +
    +
    +
    +namespace Kokyu
    +{
    +  /**
    +   * @class Comparator_Adapter_Generator
    +   *
    +   * @brief Generates function object adapter that adapts the
    +   * QoSComparator function object to compare between two schedulable
    +   * items instead of QoSDescriptors.
    +   *
    +   * The QoSComparator function object that gets passed through the
    +   *  DSRT_Scheduler_Traits  takes two qos values and
    +   * determines the more eligible one. Since the INT_ID (key) for
    +   * RB_Tree needs to be of type  DSRT_Dispatch_Item_var
    +   * , the QoSComparator needs to be adapted using an adapter
    +   * to compare two schedulable items. This adapter compares the two
    +   * using their qos values. Ties are resolved by giving preference to
    +   * items which arrived earlier. Note that this class serves the
    +   * purpose of a generator class, since it generates the adapter
    +   * class for a given qos comparator function object.
    +   */
    +
    +  template 
    +  class Comparator_Adapter_Generator
    +  {
    +  public:
    +    typedef typename
    +    DSRT_Scheduler_Traits::QoSComparator_t QoSComparator_t;
    +
    +    /**
    +     * @class More_Eligible
    +     *
    +     * @brief Actual function object that gets generated.
    +     */
    +    class MoreEligible
    +    {
    +    public:
    +      /**
    +       * Function call operator to do comparison between two
    +       * schedulable items. Returns 1 if item1 is more eligible than
    +       * item2, otherwise 0.
    +       */
    +      int operator ()
    +        (const DSRT_Dispatch_Item_var& item1,
    +         const DSRT_Dispatch_Item_var& item2)
    +      {
    +        int rc = qos_comparator_ (item1->qos (), item2->qos ());
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +        ACE_DEBUG ((LM_DEBUG, 
    +                    "(%t|%T): MoreEligible:: qos_comparator returned %d\n", 
    +                    rc));
    +#endif
    +        
    +        //more eligible
    +        if (rc == 1)
    +          return rc;
    +
    +        //if equally eligible, then resolve tie with the creation time of
    +        //the item
    +        if (rc == 0 && item1->insertion_time () < item2->insertion_time ())
    +          return 1;
    +
    +        return 0;
    +      }
    +
    +    private:
    +      QoSComparator_t qos_comparator_;
    +    };
    +
    +    /**
    +     * Facilitates return of the generated function object adapter.
    +     */
    +    typedef MoreEligible RET;
    +  };
    +
    +  /**
    +   * @class DSRT_Dispatcher
    +   *
    +   * @brief Base class for DSRT dispatcher implementations
    +   *
    +   * The responsibility of this class is to act as a common base class
    +   * for different DSRT dispatcher implementations. This is an
    +   * abstract base class and cannot be instantiated.
    +   */
    +  template 
    +  class DSRT_Dispatcher_Impl
    +  {
    +  public:
    +    typedef typename DSRT_Scheduler_Traits::Guid_t Guid_t;
    +    typedef typename DSRT_Scheduler_Traits::QoSDescriptor_t DSRT_QoSDescriptor;
    +
    +    DSRT_Dispatcher_Impl (ACE_Sched_Params::Policy sched_policy, 
    +                          int sched_scope);
    +
    +    /// Configure the DSRT dispatcher.
    +    int init (const DSRT_ConfigInfo&);
    +
    +    /// Schedule a thread dynamically based on the qos info supplied.
    +    int schedule (Guid_t guid,
    +                  const DSRT_QoSDescriptor&);
    +
    +    /// Update the schedule for a thread. This could alter the current
    +    /// schedule.
    +    int update_schedule (Guid_t guid,
    +                         const DSRT_QoSDescriptor&);
    +
    +    /// Inform the scheduler that the caller thread is about to
    +    /// block. This could alter the current schedule.
    +    int update_schedule (Guid_t guid, Block_Flag_t flag);
    +
    +    /// Cancel the schedule for a thread. This could alter the current
    +    /// schedule.
    +    int cancel_schedule (Guid_t guid);
    +
    +    /// Shut down the dispatcher. The dispatcher will stop processing
    +    /// requests.
    +    int shutdown ();
    +
    +    virtual ~DSRT_Dispatcher_Impl ();
    +
    +  private:
    +
    +    //following an idiom to avoid public virtual functions.
    +    //instead make them private and use the template method
    +    //pattern - "Virtually Yours" article in CUJ Experts Forum
    +
    +    virtual int init_i (const DSRT_ConfigInfo&)=0;
    +    virtual int schedule_i (Guid_t guid,
    +                    const DSRT_QoSDescriptor&)=0;
    +    virtual int update_schedule_i (Guid_t guid,
    +                           const DSRT_QoSDescriptor&)=0;
    +    virtual int update_schedule_i (Guid_t guid, Block_Flag_t flag)=0;
    +    virtual int cancel_schedule_i (Guid_t guid)=0;
    +    virtual int shutdown_i ()=0;
    +
    +  protected:
    +    /// Generate the QoSComparator adapter.
    +    typedef typename
    +    Comparator_Adapter_Generator::RET
    +    Queue_Item_Comparator_t;
    +
    +    typedef Sched_Ready_Queue
    +    DSRT_Sched_Queue_t;
    +
    +    ACE_Sched_Params::Policy sched_policy_;
    +    int sched_scope_;
    +
    +    Priority_t min_prio_;
    +    Priority_t max_prio_;
    +    Priority_t executive_prio_;
    +    Priority_t blocked_prio_;
    +    Priority_t inactive_prio_;
    +    Priority_t active_prio_;
    +
    +    DSRT_Sched_Queue_t ready_queue_;
    +    int shutdown_flagged_;
    +    long non_rt_thr_flags_;
    +    long rt_thr_flags_;
    +
    +    ACE_SYNCH_RECURSIVE_MUTEX synch_lock_;
    +
    +    ACE_hthread_t curr_scheduled_thr_handle_;
    +    Guid_t curr_scheduled_guid_;    
    +  };
    +
    +} //end of namespace
    +
    +#if defined (__ACE_INLINE__)
    +#include "DSRT_Dispatcher_Impl_T.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
    +#include "DSRT_Dispatcher_Impl_T.cpp"
    +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
    +
    +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
    +#pragma implementation ("DSRT_Dispatcher_Impl_T.cpp")
    +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
    +
    +#include /**/ "ace/post.h"
    +#endif /* DSRT_DISPATCHER_IMPL_H */
    diff --git a/ACE/Kokyu/DSRT_Dispatcher_Impl_T.inl b/ACE/Kokyu/DSRT_Dispatcher_Impl_T.inl
    new file mode 100644
    index 00000000000..e4983a17ba3
    --- /dev/null
    +++ b/ACE/Kokyu/DSRT_Dispatcher_Impl_T.inl
    @@ -0,0 +1,57 @@
    +// $Id$
    +
    +namespace Kokyu
    +{
    +
    +template 
    +ACE_INLINE int
    +DSRT_Dispatcher_Impl::
    +init (const DSRT_ConfigInfo& config_info)
    +{
    +  return this->init_i (config_info);
    +}
    +
    +template 
    +ACE_INLINE int
    +DSRT_Dispatcher_Impl::
    +schedule (Guid_t guid,
    +          const DSRT_QoSDescriptor& qos)
    +{
    +  return this->schedule_i (guid, qos);
    +}
    +
    +template 
    +ACE_INLINE int
    +DSRT_Dispatcher_Impl::
    +update_schedule (Guid_t guid,
    +                 const DSRT_QoSDescriptor& qos)
    +{
    +  return this->update_schedule_i (guid, qos);
    +}
    +
    +template 
    +ACE_INLINE int
    +DSRT_Dispatcher_Impl::
    +update_schedule (Guid_t guid,
    +                 Block_Flag_t flag)
    +{
    +  return this->update_schedule_i (guid, flag);
    +}
    +
    +template 
    +ACE_INLINE int
    +DSRT_Dispatcher_Impl::
    +cancel_schedule (Guid_t guid)
    +{
    +  return this->cancel_schedule_i (guid);
    +}
    +
    +template 
    +ACE_INLINE int
    +DSRT_Dispatcher_Impl::shutdown ()
    +
    +{
    +  return this->shutdown_i ();
    +}
    +
    +}
    diff --git a/ACE/Kokyu/DSRT_Sched_Queue_T.cpp b/ACE/Kokyu/DSRT_Sched_Queue_T.cpp
    new file mode 100644
    index 00000000000..ad6593e885d
    --- /dev/null
    +++ b/ACE/Kokyu/DSRT_Sched_Queue_T.cpp
    @@ -0,0 +1,281 @@
    +/* -*- C++ -*- */
    +/**
    + *  @file  DSRT_Sched_Queue_T.cpp
    + *
    + *  $Id$
    + *
    + *  @author Venkita Subramonian (venkita@cs.wustl.edu)
    + *
    + */
    +#ifndef DSRT_SCHED_QUEUE_T_CPP
    +#define DSRT_SCHED_QUEUE_T_CPP
    +
    +#include "DSRT_Sched_Queue_T.h"
    +#if !defined (ACE_LACKS_PRAGMA_ONCE)
    +# pragma once
    +#endif /* ACE_LACKS_PRAGMA_ONCE */
    +
    +#if !defined (__ACE_INLINE__)
    +//#include "DSRT_Sched_Queue_T.i"
    +#endif /* __ACE_INLINE__ */
    +
    +ACE_RCSID(Kokyu,
    +          DSRT_Sched_Queue_T,
    +          "$Id$")
    +
    +namespace Kokyu
    +{
    +/*
    +//@@VS: This is somehow not being recognized by MSVC, which results
    +//in a link error. For now, the definition has been moved to the .h
    +//file. Needs further investigation.
    +
    +template 
    +u_long
    +Sched_Ready_Queue::
    +Guid_Hash::operator () (const Guid_t& id)
    +{
    +  typename DSRT_Scheduler_Traits::Guid_Hash guid_hash;
    +  return guid_hash(id);
    +}
    +*/
    +template 
    +int Sched_Ready_Queue::
    +current_size ()
    +{
    +  return dispatch_items_prio_queue_.current_size ();
    +}
    +
    +template 
    +int Sched_Ready_Queue::
    +most_eligible (DSRT_Dispatch_Item_var& item)
    +{
    +  if (dispatch_items_prio_queue_.current_size () == 0)
    +      return -1;
    +
    +  PRIO_QUEUE_ITERATOR start = dispatch_items_prio_queue_.begin ();
    +  PRIO_QUEUE_ENTRY &ent = (*start);
    +  item = ent.item ();
    +  return 0;
    +}
    +
    +template 
    +int Sched_Ready_Queue::
    +find (Guid_t guid,
    +      DSRT_Dispatch_Item_var& found_item)
    +{
    +  ACE_GUARD_RETURN (ACE_LOCK, mon, lock_, -1);
    +  RB_Tree_Dispatch_Item_Node* rb_tree_node;
    +
    +  if (dispatch_items_hash_map_.find(guid, rb_tree_node) == -1)
    +    {
    +      return -1;
    +    }
    +
    +  found_item = rb_tree_node->item ();
    +  return 0;
    +}
    +
    +template 
    +int Sched_Ready_Queue::
    +insert (DSRT_Dispatch_Item* item)
    +{
    +  item->insertion_time (ACE_OS::gettimeofday ());
    +  DSRT_Dispatch_Item_var item_var(item);
    +
    +  ACE_GUARD_RETURN (ACE_LOCK, mon, lock_, -1);
    +
    +  RB_Tree_Dispatch_Item_Node* rb_tree_node;
    +  Guid_t guid = item->guid ();
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +  ACE_hthread_t thr_handle = item->thread_handle ();
    +
    +  ACE_DEBUG ((LM_DEBUG, 
    +              "(%t|%T) about to insert %d in sched queue\n", 
    +              thr_handle));
    +#endif
    +
    +  if (dispatch_items_hash_map_.find (guid, rb_tree_node) == -1)
    +    {
    +#ifdef KOKYU_DSRT_LOGGING
    +      ACE_DEBUG ((LM_DEBUG, 
    +                  "(%t|%T) %d not found in hashmap\n", thr_handle));
    +#endif
    +      if (dispatch_items_prio_queue_.bind (item_var,
    +                                           item_var,
    +                                           rb_tree_node) == 0)
    +        {
    +#ifdef KOKYU_DSRT_LOGGING
    +          ACE_DEBUG ((LM_DEBUG, "(%t|%T): item bound in rbtree\n"));
    +#endif
    +          if (dispatch_items_hash_map_.bind (guid, rb_tree_node) == 0)
    +            {
    +#ifdef KOKYU_DSRT_LOGGING
    +              ACE_DEBUG ((LM_DEBUG, "(%t|%T): item bound in hashmap\n"));
    +              ACE_DEBUG ((LM_DEBUG,
    +                          "<===Hash Table contents Begin===>\n"));
    +              dispatch_items_hash_map_.dump ();
    +              ACE_DEBUG ((LM_DEBUG,
    +                          "<===Hash Table contents End=====>\n"));
    +#endif              
    +              return 0;
    +            }
    +        }
    +    }
    +  else
    +    {
    +#ifdef KOKYU_DSRT_LOGGING
    +      ACE_DEBUG ((LM_DEBUG, 
    +                  "(%t|%T) %d found in hashmap\n", thr_handle));
    +#endif
    +      dispatch_items_hash_map_.unbind (guid);
    +      dispatch_items_prio_queue_.unbind (rb_tree_node);
    +
    +#ifdef KOKYU_DSRT_LOGGING
    +      ACE_DEBUG ((LM_DEBUG, 
    +                  "(%t|%T) %d removed from hashmap and rbtree\n", thr_handle));      
    +#endif
    +      if (dispatch_items_prio_queue_.bind (item_var,
    +                                           item_var,
    +                                           rb_tree_node) == 0)
    +        {
    +#ifdef KOKYU_DSRT_LOGGING
    +          ACE_DEBUG ((LM_DEBUG, 
    +                      "(%t|%T) %d bound to rbtree\n", thr_handle));      
    +#endif
    +          if (dispatch_items_hash_map_.bind (guid, rb_tree_node) == 0)
    +            {
    +#ifdef KOKYU_DSRT_LOGGING
    +              ACE_DEBUG ((LM_DEBUG, 
    +                          "(%t|%T) %d bound to hashmap\n", thr_handle));      
    +              ACE_DEBUG ((LM_DEBUG,
    +                          "<===Hash Table contents Begin===>\n"));
    +              dispatch_items_hash_map_.dump ();
    +              ACE_DEBUG ((LM_DEBUG,
    +                          "<===Hash Table contents End===>\n"));
    +#endif              
    +              return 0;
    +            }
    +        }
    +    }
    +
    +  return -1;
    +}
    +
    +template 
    +int Sched_Ready_Queue::
    +remove (Guid_t guid)
    +{
    +  ACE_GUARD_RETURN (ACE_LOCK, mon, lock_, -1);
    +  RB_Tree_Dispatch_Item_Node* rb_tree_node;
    +
    +  if (dispatch_items_hash_map_.find(guid, rb_tree_node) == 0)
    +    {
    +      dispatch_items_hash_map_.unbind (guid);
    +      dispatch_items_prio_queue_.unbind (rb_tree_node);
    +#ifdef KOKYU_DSRT_LOGGING
    +      ACE_DEBUG ((LM_DEBUG,
    +                  "<===Hash Table contents Begin===>\n"));
    +      dispatch_items_hash_map_.dump ();
    +      ACE_DEBUG ((LM_DEBUG,
    +                  "<===Hash Table contents End===>\n"));
    +#endif
    +      
    +      return 0;
    +    }
    +
    +  return -1;
    +}
    +
    +template 
    +void Sched_Ready_Queue::
    +dump ()
    +{
    +  ACE_GUARD (ACE_LOCK, mon, lock_);
    +  ACE_DEBUG ((LM_DEBUG, "(%t|%T):##########################\n"));
    +  if (dispatch_items_prio_queue_.current_size ())
    +    {
    +      PRIO_QUEUE_ITERATOR end_iter = dispatch_items_prio_queue_.end ();
    +      PRIO_QUEUE_ITERATOR iter;
    +
    +      iter = dispatch_items_prio_queue_.begin ();
    +      while( iter != end_iter )
    +        {
    +          PRIO_QUEUE_ENTRY &ent = (*iter);
    +          DSRT_Dispatch_Item_var
    +            item_var = ent.item ();
    +          /*          
    +          int guid;
    +          ACE_OS::memcpy (&guid,
    +                  item_var->guid ().get_buffer (),
    +                  item_var->guid ().length ());
    +
    +          ACE_DEBUG ((LM_DEBUG, "(%t|%T):guid %d, thr_handle = %d\n", 
    +                      guid, item_var->thread_handle ()));
    +          */
    +          ++iter;
    +        }
    +    }
    +  ACE_DEBUG ((LM_DEBUG, "(%t|%T):##########################\n"));
    +}
    +
    +template 
    +int Sched_Ready_Queue::
    +change_prio(int old_prio, int new_prio, int policy)
    +{
    +  if (dispatch_items_prio_queue_.current_size ())
    +    {
    +      PRIO_QUEUE_ITERATOR end_iter = dispatch_items_prio_queue_.end ();
    +      PRIO_QUEUE_ITERATOR iter;
    +      int prio;
    +
    +      iter = dispatch_items_prio_queue_.begin ();
    +      while( iter != end_iter )
    +        {
    +          PRIO_QUEUE_ENTRY &ent = (*iter);
    +          DSRT_Dispatch_Item_var
    +            item_var = ent.item ();
    +          ACE_OS::thr_getprio (item_var->thread_handle (), prio);
    +          if (prio==old_prio) {
    +            ACE_OS::thr_setprio(item_var->thread_handle (), new_prio, policy);
    +          }
    +          ++iter;
    +        }
    +    }
    +    return(0);
    +}
    +
    +}
    +
    +#endif /* DSRT_SCHED_QUEUE_T_CPP */
    diff --git a/ACE/Kokyu/DSRT_Sched_Queue_T.h b/ACE/Kokyu/DSRT_Sched_Queue_T.h
    new file mode 100644
    index 00000000000..68ad4be8e69
    --- /dev/null
    +++ b/ACE/Kokyu/DSRT_Sched_Queue_T.h
    @@ -0,0 +1,230 @@
    +/* -*- C++ -*- */
    +/**
    + *  @file  DSRT_Sched_Queue_T.h
    + *
    + *  $Id$
    + *
    + *  @author Venkita Subramonian (venkita@cs.wustl.edu)
    + *
    + */
    +
    +#ifndef DSRT_SCHED_QUEUE_T_H
    +#define DSRT_SCHED_QUEUE_T_H
    +#include /**/ "ace/pre.h"
    +
    +#include "DSRT_Dispatch_Item_T.h"
    +#include "ace/RB_Tree.h"
    +#include "ace/Hash_Map_Manager_T.h"
    +#include "ace/Null_Mutex.h"
    +
    +#if !defined (ACE_LACKS_PRAGMA_ONCE)
    +# pragma once
    +#endif /* ACE_LACKS_PRAGMA_ONCE */
    +
    +#include "Kokyu_dsrt.h"
    +
    +namespace Kokyu
    +{
    +
    +  /**
    +   * @class Sched_Ready_Queue
    +   *
    +   * @brief RB_Tree based template class for implementation of
    +   * reordering queue.
    +   *
    +   * This queue is used as a priority queue to store schedulable
    +   * entities. The item at the top of the RB_Tree is the most eligible
    +   * item. The comparator used to determine the most eligible item is
    +   * passed as a template parameter  More_Eligible_Comparator
    +   * . This is expected to be a functor which compares two
    +   * schedulable items. The mutex type template parameter for RB_Tree
    +   * is chosen to be a null mutex since all the methods in the
    +   * enclosing  Sched_Ready_Queue  class are thread
    +   * safe. Since QoS is used for comparison between two schedulable
    +   * items, QoSDescriptor is the ideal candidate to be used as the key
    +   * or the EXT_ID for RB_Tree instantiation. But two qos descriptors
    +   * could be the same. The existing implementation of RB_Tree does
    +   * not allow duplicate keys. In order to facilitate insertion of
    +   * duplicate qos descriptors, the qos descriptors are contained in a
    +   *  DSRT_Dispatch_Item  and this is used as the basis
    +   * of comparison. To resolve tie between equal qos values, an
    +   * insertion time stamp is maintained in each item and an item with
    +   * an earlier time stamp is more eligible than an item with an
    +   * identical qos value. Another requirement is that it should be
    +   * possible to remove an item from the RB_Tree based on guid. Since
    +   * we have already used up the qos descriptor for the key, we need a
    +   * separate index into the list of schedulable items. The second
    +   * index should be based on guid. This is achieved by using a hash
    +   * map to store  pairs. This makes the deletion
    +   * of nodes from RB_Tree more efficient.
    +   *
    +   */
    +  template 
    +  class Sched_Ready_Queue
    +  {
    +    /// Extract the necessary types from the traits class
    +    typedef typename DSRT_Scheduler_Traits::Guid_t Guid_t;
    +
    +    typedef typename
    +    DSRT_Scheduler_Traits::QoSDescriptor_t DSRT_QoSDescriptor_t;
    +
    +  public:
    +
    +    /**
    +     * Given a guid, find an item in the priority queue.
    +     *
    +     * @param guid Guid of item
    +     *
    +     * @param found_item Reference to DSRT_Dispatch_Item_var
    +     *                   to hold the found item.
    +     * @return  -1 if no item found and 0 otherwise.
    +     */
    +    int find(Guid_t guid,
    +             DSRT_Dispatch_Item_var&
    +             found_item);
    +
    +
    +    /**
    +     * Insert an item in the priority queue. If item with same guid is
    +     * already in the queue, the existing one is deleted and the new
    +     * one inserted. A deletion and insertion has to happen instead of
    +     * update since the rebalancing of the RB_Tree should take place.
    +     *
    +     * @param item  DSRT_Dispatch_Item  object containing guid and qos.
    +     *
    +     * @return -1 if insertion failed and 0 otherwise.
    +     */
    +    int insert(DSRT_Dispatch_Item* item);
    +
    +    /**
    +     * Remove an item from the priority queue.
    +     *
    +     * @param guid Guid of item.
    +     *
    +     * @param qos QoS associated with item.
    +     *
    +     * @return -1 if removal failed and 0 otherwise.
    +     */
    +    int remove(Guid_t guid);
    +
    +    /**
    +     * Returns current size of the priority queue.
    +     */
    +    int current_size ();
    +
    +    /**
    +     * Get the most eligible item from the priority queue.
    +     *
    +     * @param item Item which is most eligible, i.e. one at the
    +     *             "top" of the priority queue.
    +     *
    +     * @return -1 if there are no items in the priority queue.
    +     */
    +    int most_eligible (DSRT_Dispatch_Item_var&
    +                       item);
    +
    +    /**
    +     * change blocked_prio_ item to inactive_prio_
    +     */
    +    int change_prio (int old_prio, int new_prio, int policy);
    +
    +    void dump();
    +
    +  private:
    +
    +    /**
    +     * @class Guid_Hash
    +     *
    +     * @brief Internal class to generate hash for guid.
    +     *
    +     * This acts just as a wrapper functor to the Hash functor passed
    +     * as part of the traits class  DSRT_Scheduler_Traits
    +     * .
    +     *
    +     */
    +    class Guid_Hash
    +    {
    +    public:
    +      /// Returns hash value.
    +      u_long operator () (const typename DSRT_Scheduler_Traits::Guid_t &id)
    +      {
    +        typename DSRT_Scheduler_Traits::Guid_Hash guid_hash;
    +        return guid_hash(id);
    +      }
    +    };
    +
    +    // RB_Tree related typedefs
    +    typedef ACE_RB_Tree ,
    +                         DSRT_Dispatch_Item_var,
    +                         More_Eligible_Comparator,
    +                         ACE_SYNCH_NULL_MUTEX> Dispatch_Items_Priority_Queue;
    +
    +
    +    typedef
    +    ACE_RB_Tree_Node,
    +                     DSRT_Dispatch_Item_var >
    +    RB_Tree_Dispatch_Item_Node;
    +
    +    typedef typename
    +    Dispatch_Items_Priority_Queue::ITERATOR PRIO_QUEUE_ITERATOR;
    +
    +    typedef typename
    +    Dispatch_Items_Priority_Queue::ENTRY PRIO_QUEUE_ENTRY;
    +
    +    // Hash map related typedefs
    +    typedef ACE_Hash_Map_Manager_Ex,
    +                                    ACE_SYNCH_NULL_MUTEX>
    +    Dispatch_Items_Hash_Map;
    +
    +    typedef ACE_Hash_Map_Iterator_Ex,
    +                                     ACE_SYNCH_NULL_MUTEX>
    +    Dispatch_Items_Hash_Map_Iterator;
    +
    +    typedef ACE_Hash_Map_Entry 
    +    Dispatch_Items_Hash_Map_Entry;
    +
    +    /**
    +     * Lock used to protect the state of the scheduler queue. A
    +     * separate lock is not used for the internal RB_Tree and hashmap.
    +     */
    +    ACE_LOCK lock_;
    +
    +    /**
    +     * Hash table to maintain a second index into the list of
    +     * schedulable items. This is for efficient removal of items from
    +     * the RB_Tree based on guid. The guid is used as the key for the
    +     * hash map, whereas the qos value is used as the key for the
    +     * RB_Tree.
    +     */
    +    Dispatch_Items_Hash_Map dispatch_items_hash_map_;
    +
    +    /**
    +     * RB_Tree implementation of priority queue of schedulable items.
    +     */
    +    Dispatch_Items_Priority_Queue dispatch_items_prio_queue_;
    +  };
    +}
    +
    +#if !defined (__ACE_INLINE__)
    +//#include "DSRT_Sched_Queue_T.i"
    +#endif /* __ACE_INLINE__ */
    +
    +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
    +#include "DSRT_Sched_Queue_T.cpp"
    +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
    +
    +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
    +#pragma implementation ("DSRT_Sched_Queue_T.cpp")
    +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
    +
    +#include /**/ "ace/post.h"
    +#endif /* DSRT_SCHED_QUEUE_T_H */
    diff --git a/ACE/Kokyu/Default_Dispatcher_Impl.cpp b/ACE/Kokyu/Default_Dispatcher_Impl.cpp
    new file mode 100644
    index 00000000000..4fdb0fa8164
    --- /dev/null
    +++ b/ACE/Kokyu/Default_Dispatcher_Impl.cpp
    @@ -0,0 +1,170 @@
    +// $Id$
    +
    +#include "Default_Dispatcher_Impl.h"
    +#include "ace/Sched_Params.h"
    +
    +#if ! defined (__ACE_INLINE__)
    +#include "Default_Dispatcher_Impl.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +ACE_RCSID(Kokyu, Default_Dispatcher_Impl, "$Id$")
    +
    +namespace Kokyu
    +{
    +
    +Default_Dispatcher_Impl::Default_Dispatcher_Impl ()
    +  : activated_ (0)
    +{
    +}
    +
    +int
    +Default_Dispatcher_Impl::init_i (const Dispatcher_Attributes& attrs)
    +{
    +  //create and init the dispatcher tasks here
    +
    +  ACE_DEBUG ((LM_DEBUG, "entering init_t\n" ));
    +  int size;
    +  size = attrs.config_info_set_.size ();
    +
    +  if (size == 0)
    +    return -1;
    +
    +  this->ntasks_ = size;
    +
    +  Dispatcher_Task_Auto_Ptr * tasks_array=0;
    +  ACE_NEW_RETURN (tasks_array, Dispatcher_Task_Auto_Ptr[ntasks_], -1);
    +
    +  //ACE_DEBUG ((LM_DEBUG, "after new on task array\n" ));
    +  tasks_.reset(tasks_array);
    +
    +  //ACE_DEBUG ((LM_DEBUG, "task array auto_ptr set\n" ));
    +
    +  ConfigInfoSet& config_set = 
    +    const_cast (attrs.config_info_set_);
    +  ConfigInfoSet::ITERATOR iter(config_set);
    +  int i=0;
    +
    +  ConfigInfo* config;
    +  for (;i tmp_task_auto_ptr (task);
    +      tasks_[i++] = tmp_task_auto_ptr;
    +      //I couldn't use reset because MSVC6 auto_ptr does not have reset method.
    +      //So in configurations where the auto_ptr maps to the std::auto_ptr instead
    +      //of ACE auto_ptr, this would be a problem.
    +      //tasks_[i++].reset (task);
    +    }
    +
    +  this->thr_creation_flags_ = attrs.thread_creation_flags ();
    +
    +  if (attrs.immediate_activation_ && !this->activated_)
    +    {
    +      this->activate_i ();
    +    }
    +
    +  curr_config_info_ = attrs.config_info_set_;
    +  return 0;
    +}
    +
    +int
    +Default_Dispatcher_Impl::activate_i ()
    +{
    +  int i;
    +
    +  if (this->activated_)
    +    return 0;
    +
    +  for(i=0; iget_curr_config_info ().thread_priority_;
    +
    +      if (this->tasks_[i]->activate (this->thr_creation_flags_, 
    +                                     1, 1, priority) == -1)
    +        {
    +          ACE_ERROR_RETURN ((LM_ERROR,
    +             ACE_TEXT ("EC (%P|%t) cannot activate queue.")
    +             ACE_TEXT ("Need superuser privilege to run in RT class\n")),  
    +             -1);
    +        }
    +    }
    +
    +  this->activated_ = 1;
    +  return 0;
    +}
    +
    +Dispatcher_Task*
    +Default_Dispatcher_Impl::find_task_with_preemption_prio (Priority_t prio)
    +{
    +  int i;
    +
    +  if (prio >=0)
    +  {
    +    for( i=0; ipreemption_priority () == prio)
    +        return  tasks_[i].get();
    +    }
    +  }
    +
    +  return 0;
    +}
    +
    +int
    +Default_Dispatcher_Impl::dispatch_i (const Dispatch_Command* cmd,
    +                  const QoSDescriptor& qos_info)
    +{
    +  //delegate to the appropriate task
    +  if (qos_info.preemption_priority_ < 0)
    +    return -1;
    +
    +  Dispatcher_Task* task =
    +    find_task_with_preemption_prio (qos_info.preemption_priority_);
    +
    +  //@@VS - We should insert this into the lowest prio queue. 
    +  //How do we know that the last queue is the lowest prio queue.
    +  if (task == 0)
    +    task = tasks_[ntasks_-1].get ();
    +
    +  return task->enqueue (cmd, qos_info);
    +}
    +
    +int
    +Default_Dispatcher_Impl::shutdown_i ()
    +{
    +  //This needs to be revisited based on mode transition and 
    +  //consistent cut through the queues
    +
    +  //post shutdown command to all tasks
    +  int i;
    +
    +  for(i=0; ienqueue (shutdown_cmd, qos_info);
    +    }
    +
    +  //wait for all tasks to exit
    +  for (i=0; iwait ();
    +    }
    +
    +  return 0;
    +}
    +
    +int
    +Shutdown_Task_Command::execute ()
    +{
    +  return -1;
    +}
    +
    +}
    diff --git a/ACE/Kokyu/Default_Dispatcher_Impl.h b/ACE/Kokyu/Default_Dispatcher_Impl.h
    new file mode 100644
    index 00000000000..196b0ca3775
    --- /dev/null
    +++ b/ACE/Kokyu/Default_Dispatcher_Impl.h
    @@ -0,0 +1,77 @@
    +/* -*- C++ -*- */
    +/**
    + *  @file   Default_Dispatcher_Impl.h
    + *
    + *  $Id$
    + *
    + *  @author Venkita Subramonian (venkita@cs.wustl.edu)
    + *
    + * Based on previous work by Tim Harrison (harrison@cs.wustl.edu),
    + * Chris Gill, Carlos O'Ryan and other members of the DOC group.
    + */
    +
    +#ifndef DEFAULT_DISPATCHER_IMPL_H
    +#define DEFAULT_DISPATCHER_IMPL_H
    +#include /**/ "ace/pre.h"
    +
    +#include "ace/Task.h"
    +
    +
    +#if !defined (ACE_LACKS_PRAGMA_ONCE)
    +# pragma once
    +#endif /* ACE_LACKS_PRAGMA_ONCE */
    +
    +#include "ace/Auto_Ptr.h"
    +#include "kokyu_export.h"
    +#include "Kokyu_defs.h"
    +#include "Dispatcher_Impl.h"
    +#include "Dispatcher_Task.h"
    +
    +namespace Kokyu
    +{
    +  /**
    +   * @class Default_Dispatcher_Impl
    +   *
    +   * @brief Default implementation class for EC dispatcher
    +   * implementations
    +   *
    +   */
    +  class Default_Dispatcher_Impl : public Dispatcher_Impl
    +  {
    +  public:
    +    Default_Dispatcher_Impl ();
    +
    +  private:
    +    int activate_i ();
    +    int init_i (const Dispatcher_Attributes&);
    +    int dispatch_i (const Dispatch_Command*,
    +                  const QoSDescriptor&);
    +    int shutdown_i ();
    +    Dispatcher_Task* find_task_with_preemption_prio (Priority_t);
    +
    +  private:
    +    typedef auto_ptr Dispatcher_Task_Auto_Ptr;
    +    ACE_Auto_Array_Ptr tasks_;
    +    int ntasks_;
    +    ConfigInfoSet curr_config_info_;
    +    int activated_;
    +  };
    +
    +  class Shutdown_Task_Command : public Dispatch_Command
    +  {
    +  public:
    +    /// Constructor
    +    Shutdown_Task_Command (ACE_Allocator *mb_allocator = 0);
    +
    +    /// Command callback
    +    int execute ();
    +  };
    +
    +} //end of namespace
    +
    +#if defined (__ACE_INLINE__)
    +#include "Default_Dispatcher_Impl.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +#include /**/ "ace/post.h"
    +#endif /* DEFAULT_DISPATCHER_IMPL_H */
    diff --git a/ACE/Kokyu/Default_Dispatcher_Impl.inl b/ACE/Kokyu/Default_Dispatcher_Impl.inl
    new file mode 100644
    index 00000000000..bf1e76c3ce7
    --- /dev/null
    +++ b/ACE/Kokyu/Default_Dispatcher_Impl.inl
    @@ -0,0 +1,11 @@
    +// $Id$
    +
    +namespace Kokyu
    +{
    +ACE_INLINE
    +Shutdown_Task_Command::Shutdown_Task_Command (ACE_Allocator *mb_allocator)
    +   :Dispatch_Command(0,mb_allocator)
    +{
    +}
    +
    +}
    diff --git a/ACE/Kokyu/Dispatch_Deferrer.cpp b/ACE/Kokyu/Dispatch_Deferrer.cpp
    new file mode 100644
    index 00000000000..6db734c8205
    --- /dev/null
    +++ b/ACE/Kokyu/Dispatch_Deferrer.cpp
    @@ -0,0 +1,112 @@
    +// $Id$
    +
    +#include "ace/Sched_Params.h"
    +#include "Dispatch_Deferrer.h"
    +#include "Dispatcher_Task.h"
    +
    +#if ! defined (__ACE_INLINE__)
    +#include "Dispatch_Deferrer.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +#include "kokyu_config.h"
    +#include "kokyu_dsui_families.h"
    +#include 
    +ACE_RCSID(Kokyu, Dispatch_Deferrer, "$Id$")
    +
    +namespace Kokyu
    +{
    +
    +int
    +Dispatch_Deferrer::init(const Dispatch_Deferrer_Attributes& attr)
    +{
    +  //set up reactor for timeouts
    +  this->react_.open(0);
    +  //Don't need any handles, since we're only using it for timeouts
    +
    +  this->timers_.open();
    +
    +  this->task_ = attr.task_;
    +
    +  return 0;
    +}
    +
    +int
    +Dispatch_Deferrer::dispatch (Dispatch_Queue_Item *qitem)
    +{
    +  ACE_ASSERT(qitem != 0);
    +
    +  //setup timout
    +  //For now, assume period = deadline
    +  ACE_Time_Value tv;
    +  tv = ACE_OS::gettimeofday() + qitem->qos_info().deadline_;
    +  long timer_id = this->react_.schedule_timer(this,
    +                                              0, //NULL arg
    +                                              tv);
    +  if (timer_id < 0)
    +    {
    +      ACE_ERROR_RETURN ((LM_ERROR,
    +                  ACE_TEXT ("EC (%P|%t) cannot schedule Release Guard timer.")
    +                  ACE_TEXT ("ACE_Reactor.schedule_timer() returned -1\n")),
    +                  -1);
    +    }
    +  //else valid timer_id
    +  this->timers_.bind(qitem,timer_id);
    +
    +  //@BT INSTRUMENT with event ID: EVENT_DEFERRED_ENQUEUE Measure time
    +  //between release and enqueue into dispatch queue because of RG
    +  DSUI_EVENT_LOG(DISP_DEFERRER_FAM, EVENT_DEFERRED_ENQUEUE, timer_id, 0, 0);
    +
    +  //buffer until timer expires
    +  return this->rgq_.enqueue_deadline(qitem,&tv);
    +}
    +
    +
    +int
    +Dispatch_Deferrer::handle_timeout (const ACE_Time_Value &,
    +                                   const void *)
    +{
    +  //get all expired Dispatch_Queue_Items
    +  ACE_Message_Block *begin,*end;
    +  this->rgq_.remove_messages(begin,end,
    +                             (u_int) (ACE_Dynamic_Message_Strategy::LATE | 
    +                                      ACE_Dynamic_Message_Strategy::BEYOND_LATE));
    +
    +  //dispatch them back to Dispatcher_Impl
    +  while (begin <= end)
    +    {
    +      Dispatch_Queue_Item *qitem =
    +        dynamic_cast (begin);
    +
    +      if (qitem == 0)
    +        {
    +          ACE_Message_Block::release (begin);
    +          continue;
    +        }
    +
    +
    +      //remove timer for each enqueued qitem from reactor
    +      long timer_id;
    +      if (this->timers_.find(qitem,timer_id) < 0)
    +        {
    +            ACE_ERROR_RETURN ((LM_ERROR,
    +             ACE_TEXT ("Could not cancel Release Guard timer.")
    +             ACE_TEXT ("Unknown timer ID\n")),
    +             -1);
    +        }
    +      //else got timer_id
    +      this->react_.cancel_timer(timer_id);
    +
    +      //@BT INSTRUMENT with event ID: EVENT_DEFERRED_DEQUEUE Measure
    +      //time between release and enqueue into dispatch queue because
    +      //of RG
    +      DSUI_EVENT_LOG (DISP_DEFERRER_FAM, EVENT_DEFERRED_DEQUEUE, timer_id, 0, 0);
    +
    +      this->task_->enqueue(qitem);
    +
    +      ++begin;
    +    }
    +
    +  return 0;
    +}
    +
    +} //namespace Kokyu
    diff --git a/ACE/Kokyu/Dispatch_Deferrer.h b/ACE/Kokyu/Dispatch_Deferrer.h
    new file mode 100644
    index 00000000000..6375ed1b865
    --- /dev/null
    +++ b/ACE/Kokyu/Dispatch_Deferrer.h
    @@ -0,0 +1,95 @@
    +/* -*- C++ -*- */
    +/**
    + *  @file   Dispatch_Deferrer.h
    + *
    + *  $Id$
    + *
    + *  @author Bryan Thrall (thrall@cse.wustl.edu)
    + *
    + */
    +
    +#ifndef DISPATCH_DEFERRER_H
    +#define DISPATCH_DEFERRER_H
    +#include /**/ "ace/pre.h"
    +
    +#if !defined (ACE_LACKS_PRAGMA_ONCE)
    +# pragma once
    +#endif /* ACE_LACKS_PRAGMA_ONCE */
    +
    +#include "kokyu_export.h"
    +#include "Kokyu_defs.h"
    +#include "ace/Event_Handler.h"
    +#include "ace/Thread_Mutex.h"
    +#include "ace/Synch_T.h"
    +#include "ace/Message_Block.h"
    +#include "ace/Message_Queue.h"
    +#include "ace/Reactor.h"
    +#include "ace/Map.h"
    +
    +namespace Kokyu
    +{
    +
    +class Dispatch_Task; //forward decl
    +class Dispatch_Queue_Item; //forward decl
    +
    +/**
    + * @class Dispatch_Deferrer
    + *
    + * @brief Part of the Release Guard protocol. When a Dispatch_Command
    + * needs to be dispatched later rather than when dispatch_i() is
    + * called on the Default_Dispatcher_Impl, it is passed to this
    + * object. When the appropriate time to dispatch the Dispatch_Command
    + * comes (last release time + period), this object calls enqueue() on
    + * the Dispatcher_Task.
    + */
    +class Dispatch_Deferrer : public ACE_Event_Handler
    +{
    + public:
    +  Dispatch_Deferrer();
    +  //Default constructor
    +
    +  ~Dispatch_Deferrer();
    +  //Destructor
    +
    +  int init(const Dispatch_Deferrer_Attributes& attr);
    +
    +  int dispatch (Dispatch_Queue_Item *qitem);
    +
    +  virtual int handle_timeout (const ACE_Time_Value ¤t_time,
    +                              const void *act = 0);
    +  //TODO: what if need higher resolution timers?
    +
    + private:
    +  ACE_Deadline_Message_Strategy msg_strat_;
    +
    +  ///Stores the Dispatch_Commands in earliest-release-time order,
    +  ///until they are dispatched. I decided to use an
    +  ///ACE_Dynamic_Message_Queue because it supports deadline
    +  ///ordering. This decision is also good because we can simply store
    +  ///the Dispatch_Queue_Item given to us by the
    +  ///Default_Dispatcher_Impl rather than allocate some structure to
    +  ///hold the Dispatch_Command and QoSDescriptor.
    +  ACE_Dynamic_Message_Queue rgq_;
    +
    +  //Stores timer_ids from the Reactor (longs) using the
    +  //Dispatch_Queue_Item the timer is for as the key. Used to
    +  //cancel timers if they expire and are enqueued before the
    +  //callback happens.
    +  typedef ACE_Map_Manager Timer_Map;
    +
    +  Timer_Map timers_;
    +
    +  ///Manages timers for the Dispatch_Commands
    +  ACE_Reactor react_;
    +
    +  Dispatcher_Task* task_;
    +};
    +
    +} //namespace Kokyu
    +
    +#if defined (__ACE_INLINE__)
    +#include "Dispatch_Deferrer.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +#include /**/ "ace/post.h"
    +#endif //DISPATCH_DEFERRER_H
    diff --git a/ACE/Kokyu/Dispatch_Deferrer.inl b/ACE/Kokyu/Dispatch_Deferrer.inl
    new file mode 100644
    index 00000000000..315afce5598
    --- /dev/null
    +++ b/ACE/Kokyu/Dispatch_Deferrer.inl
    @@ -0,0 +1,29 @@
    +// $Id$
    +
    +namespace Kokyu
    +{
    +
    +ACE_INLINE
    +Dispatch_Deferrer_Attributes::Dispatch_Deferrer_Attributes()
    +{
    +}
    +
    +ACE_INLINE
    +Dispatch_Deferrer::Dispatch_Deferrer()
    +  : msg_strat_()
    +  , rgq_(this->msg_strat_)
    +  , timers_()
    +  , react_()
    +  , task_(0)
    +{
    +}
    +
    +ACE_INLINE
    +Dispatch_Deferrer::~Dispatch_Deferrer()
    +{
    +  this->react_.close();
    +
    +  this->timers_.close();
    +}
    +
    +} //namespace Kokyu
    diff --git a/ACE/Kokyu/Dispatcher_Impl.cpp b/ACE/Kokyu/Dispatcher_Impl.cpp
    new file mode 100644
    index 00000000000..884cf2dceb2
    --- /dev/null
    +++ b/ACE/Kokyu/Dispatcher_Impl.cpp
    @@ -0,0 +1,19 @@
    +// $Id$
    +
    +#include "Dispatcher_Impl.h"
    +
    +#if ! defined (__ACE_INLINE__)
    +#include "Dispatcher_Impl.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +ACE_RCSID(Kokyu, Dispatcher_Impl, "$Id$")
    +
    +namespace Kokyu
    +{
    +
    +//virtual - so don't inline
    +Dispatcher_Impl::~Dispatcher_Impl()
    +{
    +}
    +
    +}
    diff --git a/ACE/Kokyu/Dispatcher_Impl.h b/ACE/Kokyu/Dispatcher_Impl.h
    new file mode 100644
    index 00000000000..668271f042a
    --- /dev/null
    +++ b/ACE/Kokyu/Dispatcher_Impl.h
    @@ -0,0 +1,74 @@
    +/* -*- C++ -*- */
    +/**
    + *  @file   Dispatcher_Impl.h
    + *
    + *  $Id$
    + *
    + *  @author Venkita Subramonian (venkita@cs.wustl.edu)
    + *
    + * Based on previous work by Tim Harrison (harrison@cs.wustl.edu),
    + * Chris Gill, Carlos O'Ryan and other members of the DOC group.
    + */
    +
    +#ifndef DISPATCHER_IMPL_H
    +#define DISPATCHER_IMPL_H
    +#include /**/ "ace/pre.h"
    +
    +#include "Kokyu_defs.h"
    +
    +#if !defined (ACE_LACKS_PRAGMA_ONCE)
    +# pragma once
    +#endif /* ACE_LACKS_PRAGMA_ONCE */
    +
    +#include "kokyu_export.h"
    +
    +namespace Kokyu
    +{
    +  /**
    +   * @class Dispatcher
    +   *
    +   * @brief Base class for EC dispatcher implementations
    +   *
    +   * The responsibility of this class is to act as a common base class
    +   * for different EC dispatcher implementations. This is an
    +   * abstract base class and cannot be instantiated.
    +   */
    +  class Kokyu_Export Dispatcher_Impl
    +  {
    +  public:
    +    /// Configure the dispatcher.
    +    int init (const Dispatcher_Attributes&);
    +
    +    int activate ();
    +
    +    /// dispatch a command (eg. event) based on the QoS supplied.
    +    int dispatch (const Dispatch_Command*,
    +                  const QoSDescriptor&);
    +
    +    /// shutdown the dispatcher.
    +    int shutdown ();
    +
    +    virtual ~Dispatcher_Impl();
    +
    +  private:
    +    //following an idiom to avoid public virtual functions.
    +    //instead make them private and use the template method
    +    //pattern - "Virtually Yours" article in CUJ Experts Forum
    +
    +    virtual int init_i (const Dispatcher_Attributes&) =0;
    +    virtual int dispatch_i (const Dispatch_Command*,
    +                            const QoSDescriptor&) =0;
    +    virtual int shutdown_i () =0;
    +    virtual int activate_i () =0;
    +
    +  protected:
    +    int thr_creation_flags_;
    +  };
    +} //end of namespace
    +
    +#if defined (__ACE_INLINE__)
    +#include "Dispatcher_Impl.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +#include /**/ "ace/post.h"
    +#endif /* DISPATCHER_IMPL_H */
    diff --git a/ACE/Kokyu/Dispatcher_Impl.inl b/ACE/Kokyu/Dispatcher_Impl.inl
    new file mode 100644
    index 00000000000..a1c31d16212
    --- /dev/null
    +++ b/ACE/Kokyu/Dispatcher_Impl.inl
    @@ -0,0 +1,31 @@
    +// $Id$
    +
    +namespace Kokyu
    +{
    +
    +ACE_INLINE
    +int Dispatcher_Impl::init (const Dispatcher_Attributes& attr)
    +{
    +  return init_i (attr);
    +}
    +
    +ACE_INLINE
    +int Dispatcher_Impl::dispatch (const Dispatch_Command* cmd,
    +                               const QoSDescriptor& qos_info)
    +{
    +  return dispatch_i (cmd, qos_info);
    +}
    +
    +ACE_INLINE
    +int Dispatcher_Impl::shutdown ()
    +{
    +  return shutdown_i ();
    +}
    +
    +ACE_INLINE
    +int Dispatcher_Impl::activate ()
    +{
    +  return activate_i ();
    +}
    +
    +}
    diff --git a/ACE/Kokyu/Dispatcher_Task.cpp b/ACE/Kokyu/Dispatcher_Task.cpp
    new file mode 100644
    index 00000000000..8cbb9cd97ac
    --- /dev/null
    +++ b/ACE/Kokyu/Dispatcher_Task.cpp
    @@ -0,0 +1,188 @@
    +// $Id$
    +
    +#include "Dispatcher_Task.h"
    +
    +#include "ace/Malloc_T.h"
    +#include "ace/OS_NS_errno.h"
    +
    +#if ! defined (__ACE_INLINE__)
    +#include "Dispatcher_Task.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +ACE_RCSID(Kokyu, Dispatcher_Task, "$Id$")
    +
    +namespace
    +//anonymous namespace - use this to avoid polluting the global namespace
    +{
    +  const int ALLOC_POOL_CHUNKS = 200;
    +}
    +
    +namespace Kokyu
    +{
    +
    +typedef ACE_Cached_Allocator
    +Dispatch_Queue_Item_Allocator;
    +
    +int
    +Dispatcher_Task::initialize ()
    +{
    +  switch(curr_config_info_.dispatching_type_)
    +    {
    +    case FIFO_DISPATCHING:
    +      ACE_NEW_RETURN (
    +          this->the_queue_,
    +          ACE_Message_Queue,
    +          -1);
    +      break;
    +
    +    case DEADLINE_DISPATCHING:
    +      ACE_NEW_RETURN (
    +          this->the_queue_,
    +          ACE_Dynamic_Message_Queue (deadline_msg_strategy_),
    +          -1);
    +      break;
    +
    +    case LAXITY_DISPATCHING:
    +      ACE_NEW_RETURN (
    +           this->the_queue_,
    +           ACE_Dynamic_Message_Queue (laxity_msg_strategy_),
    +           -1);
    +      break;
    +
    +    default:
    +      return -1;
    +    }
    +
    +  if (this->the_queue_ != 0)
    +    {
    +      this->msg_queue(this->the_queue_);
    +    }
    +
    +  if (this->allocator_ == 0)
    +    {
    +      ACE_NEW_RETURN (this->allocator_,
    +                      Dispatch_Queue_Item_Allocator(ALLOC_POOL_CHUNKS),
    +                      -1);
    +      own_allocator_ = 1;
    +    }
    +
    +  return 0;
    +}
    +
    +int
    +Dispatcher_Task::svc (void)
    +{
    +  int done = 0;
    +
    +    ACE_hthread_t thr_handle;
    +    ACE_Thread::self (thr_handle);
    +    int prio;
    +
    +    if (ACE_Thread::getprio (thr_handle, prio) == -1)
    +      {
    +        if (errno == ENOTSUP)
    +          {
    +            ACE_DEBUG((LM_DEBUG,
    +                       ACE_TEXT ("getprio not supported on this platform\n")
    +                       ));
    +            return 0;
    +          }
    +        ACE_ERROR_RETURN ((LM_ERROR,
    +                           ACE_TEXT ("%p\n"),
    +                           ACE_TEXT ("getprio failed")),
    +                          -1);
    +      }
    +
    +    //ACE_DEBUG ((LM_DEBUG, "(%t) Dispatcher Thread started prio=%d\n", prio));
    +
    +  while (!done)
    +    {
    +      ACE_Message_Block *mb;
    +      if (this->getq (mb) == -1)
    +        if (ACE_OS::last_error () == ESHUTDOWN)
    +          return 0;
    +        else
    +          ACE_ERROR ((LM_ERROR,
    +                      "EC (%P|%t) getq error in Dispatching Queue\n"));
    +
    +      //ACE_DEBUG ((LM_DEBUG, "(%t) : next command got from queue\n"));
    +
    +      Dispatch_Queue_Item *qitem =
    +        dynamic_cast (mb);
    +
    +      if (qitem == 0)
    +        {
    +          ACE_Message_Block::release (mb);
    +          continue;
    +        }
    +
    +      Dispatch_Command* command = qitem->command ();
    +
    +      ACE_ASSERT(command != 0);
    +      int result = command->execute ();
    +
    +      if (command->can_be_deleted ())
    +        command->destroy ();
    +
    +      ACE_Message_Block::release (mb);
    +
    +      if (result == -1)
    +        done = 1;
    +    }
    +  return 0;
    +}
    +
    +int
    +Dispatcher_Task::enqueue (const Dispatch_Command* cmd,
    +                          const QoSDescriptor& qos_info)
    +{
    +  void* buf = this->allocator_->malloc (sizeof (Dispatch_Queue_Item));
    +
    +  if (buf == 0)
    +    return -1;
    +
    +  ACE_Message_Block *mb =
    +    new (buf) Dispatch_Queue_Item (cmd,
    +                                   qos_info,
    +                                   &(this->data_block_),
    +                                   ACE_Message_Block::DONT_DELETE,
    +                                   this->allocator_);
    +
    +  this->putq (mb);
    +
    +  return 0;
    +}
    +
    +int Dispatcher_Task::get_native_prio ()
    +{
    +  ACE_hthread_t thr_handle;
    +  ACE_Thread::self (thr_handle);
    +  int prio;
    +
    +  if (ACE_Thread::getprio (thr_handle, prio) == -1)
    +  {
    +    if (errno == ENOTSUP)
    +    {
    +      ACE_DEBUG((LM_DEBUG,
    +                 ACE_TEXT ("getprior not supported on this platform\n")
    +               ));
    +      return 0;
    +    }
    +    ACE_ERROR_RETURN ((LM_ERROR,
    +                       ACE_TEXT ("%p\n"),
    +                       ACE_TEXT ("getprio failed")),
    +                      -1);
    +  }
    +
    +  return prio;
    +}
    +
    +void Dispatch_Queue_Item::init_i (const QoSDescriptor& qos_info)
    +{
    +  this->msg_priority (qos_info.preemption_priority_);
    +  this->msg_execution_time (qos_info.execution_time_);
    +  this->msg_deadline_time (qos_info.deadline_);
    +}
    +
    +}
    +
    diff --git a/ACE/Kokyu/Dispatcher_Task.h b/ACE/Kokyu/Dispatcher_Task.h
    new file mode 100644
    index 00000000000..32424d5cf62
    --- /dev/null
    +++ b/ACE/Kokyu/Dispatcher_Task.h
    @@ -0,0 +1,106 @@
    +/* -*- C++ -*- */
    +/**
    + *  @file   Dispatcher_Task.h
    + *
    + *  $Id$
    + *
    + *  @author Venkita Subramonian (venkita@cs.wustl.edu)
    + *
    + * Based on previous work by Tim Harrison (harrison@cs.wustl.edu),
    + * Chris Gill, Carlos O'Ryan and other members of the DOC group.
    + */
    +
    +#ifndef DISPATCHER_TASK_H
    +#define DISPATCHER_TASK_H
    +#include /**/ "ace/pre.h"
    +#include "ace/Task.h"
    +#include "ace/Lock_Adapter_T.h"
    +
    +#if !defined (ACE_LACKS_PRAGMA_ONCE)
    +# pragma once
    +#endif /* ACE_LACKS_PRAGMA_ONCE */
    +
    +#include "Kokyu_defs.h"
    +
    +namespace Kokyu
    +{
    +
    +class Dispatch_Queue_Item : public ACE_Message_Block
    +{
    +public:
    +  Dispatch_Queue_Item (
    +        const Dispatch_Command* cmd,
    +        const QoSDescriptor& qos_info,
    +        ACE_Allocator* mb_allocator =0);
    +
    +  Dispatch_Queue_Item (
    +        const Dispatch_Command* cmd,
    +        const QoSDescriptor& qos_info,
    +        ACE_Data_Block* data_block,
    +        int flags,
    +        ACE_Allocator* mb_allocator =0);
    +
    +  Dispatch_Command* command ();
    +
    +private:
    +  void init_i(const QoSDescriptor&);
    +
    +private:
    +  const Dispatch_Command* command_;
    +  QoSDescriptor qos_info_;
    +};
    +
    +/**
    + * @class Dispatcher_Task
    + *
    + * @brief Implement the dispatching queues for FIFO and Priority
    + * dispatching.
    + *
    + */
    +class Dispatcher_Task : public ACE_Task
    +{
    +public:
    +  /// Constructor
    +  Dispatcher_Task (const ConfigInfo& config_info,
    +                   ACE_Thread_Manager* thr_manager = 0);
    +
    +
    +  ~Dispatcher_Task ();
    +  int initialize();
    +
    +  int enqueue (const Dispatch_Command* cmd,
    +           const QoSDescriptor& qos_info);
    +
    +  /// Process the events in the queue.
    +  int svc (void);
    +
    +  const ConfigInfo& get_curr_config_info() const;
    +  Priority_t preemption_priority() const;
    +
    +private:
    +  static int get_native_prio();
    +
    +private:
    +  ConfigInfo curr_config_info_;
    +
    +  ACE_Allocator *allocator_;
    +  int own_allocator_;
    +
    +  /// Helper data structure to minimize memory allocations...
    +  ACE_Locked_Data_Block > data_block_;
    +
    +  /// The queue
    +  ACE_Message_Queue* the_queue_;
    +
    +  ACE_Deadline_Message_Strategy deadline_msg_strategy_;
    +  ACE_Laxity_Message_Strategy laxity_msg_strategy_;
    +};
    +
    +} //end of namespace
    +
    +#if defined (__ACE_INLINE__)
    +#include "Dispatcher_Task.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +#include /**/ "ace/post.h"
    +#endif /* DISPATCHER_TASK_H */
    diff --git a/ACE/Kokyu/Dispatcher_Task.inl b/ACE/Kokyu/Dispatcher_Task.inl
    new file mode 100644
    index 00000000000..e663509d86b
    --- /dev/null
    +++ b/ACE/Kokyu/Dispatcher_Task.inl
    @@ -0,0 +1,81 @@
    +// $Id$
    +
    +namespace Kokyu
    +{
    +ACE_INLINE
    +Dispatcher_Task::Dispatcher_Task (const ConfigInfo& config_info,
    +                                  ACE_Thread_Manager* thr_manager)
    +  :  ACE_Task (thr_manager),
    +     curr_config_info_ (config_info),
    +     allocator_ (config_info.allocator_),
    +     own_allocator_ (0),
    +     deadline_msg_strategy_ (config_info.reordering_flags_.static_bit_field_mask_,
    +                             config_info.reordering_flags_.static_bit_field_shift_,
    +                             config_info.reordering_flags_.dynamic_priority_max_,
    +                             config_info.reordering_flags_.dynamic_priority_offset_),
    +     laxity_msg_strategy_ (config_info.reordering_flags_.static_bit_field_mask_,
    +                           config_info.reordering_flags_.static_bit_field_shift_,
    +                           config_info.reordering_flags_.dynamic_priority_max_,
    +                           config_info.reordering_flags_.dynamic_priority_offset_)
    +{
    +   this->initialize();
    +}
    +
    +ACE_INLINE
    +Dispatcher_Task::~Dispatcher_Task ()
    +{
    +   if (own_allocator_)
    +   {
    +      delete allocator_;
    +   }
    +}
    +
    +ACE_INLINE
    +Priority_t
    +Dispatcher_Task::preemption_priority() const
    +{
    +    return curr_config_info_.preemption_priority_;
    +}
    +
    +
    +ACE_INLINE
    +const ConfigInfo&
    +Dispatcher_Task::get_curr_config_info() const
    +{
    +    return curr_config_info_;
    +}
    +
    +ACE_INLINE
    +Dispatch_Queue_Item::Dispatch_Queue_Item (
    +        const Dispatch_Command* cmd,
    +        const QoSDescriptor& qos_info,
    +        ACE_Data_Block *data_block,
    +        int flags,
    +        ACE_Allocator* mb_allocator)
    + : ACE_Message_Block (data_block, 
    +                      flags, 
    +                      mb_allocator),
    +   command_ (cmd), qos_info_ (qos_info)
    +
    +{
    +   this->init_i (qos_info);
    +}
    +
    +ACE_INLINE
    +Dispatch_Queue_Item::Dispatch_Queue_Item (
    +        const Dispatch_Command* cmd,
    +        const QoSDescriptor& qos_info,
    +        ACE_Allocator* mb_allocator)
    + : ACE_Message_Block (mb_allocator),
    +   command_ (cmd), qos_info_ (qos_info)
    +{
    +   this->init_i (qos_info);
    +}
    +
    +ACE_INLINE
    +Dispatch_Command*
    +Dispatch_Queue_Item::command()
    +{
    +  return const_cast (command_);
    +}
    +}
    diff --git a/ACE/Kokyu/Kokyu.cpp b/ACE/Kokyu/Kokyu.cpp
    new file mode 100644
    index 00000000000..1146f1ee315
    --- /dev/null
    +++ b/ACE/Kokyu/Kokyu.cpp
    @@ -0,0 +1,55 @@
    +// $Id$
    +
    +#include "Kokyu.h"
    +
    +#include "Default_Dispatcher_Impl.h"
    +
    +#if ! defined (__ACE_INLINE__)
    +#include "Kokyu.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +ACE_RCSID(Kokyu, Kokyu, "$Id$")
    +
    +namespace Kokyu
    +{
    +
    +int Dispatcher::dispatch (const Dispatch_Command* cmd, const QoSDescriptor& qos)
    +{
    +  return dispatcher_impl_->dispatch (cmd, qos);
    +}
    +
    +int Dispatcher::shutdown ()
    +{
    +  return dispatcher_impl_->shutdown ();
    +}
    +
    +int Dispatcher::activate ()
    +{
    +  return dispatcher_impl_->activate ();
    +}
    +
    +void Dispatcher::implementation (Dispatcher_Impl* impl)
    +{
    +  auto_ptr tmp_impl (impl);
    +  dispatcher_impl_ = tmp_impl;
    +
    +  //I couldn't use reset because MSVC++ auto_ptr does not have reset method.
    +  //So in configurations where the auto_ptr maps to the std::auto_ptr instead
    +  //of ACE auto_ptr, this would be a problem.
    +  //dispatcher_impl_.reset (impl);
    +}
    +
    +Dispatcher*
    +Dispatcher_Factory::
    +create_dispatcher(const Dispatcher_Attributes& attrs)
    +{
    +  Dispatcher* disp;
    +  Dispatcher_Impl* tmp;
    +  ACE_NEW_RETURN (tmp, Default_Dispatcher_Impl, 0);
    +  ACE_NEW_RETURN (disp, Dispatcher, 0);
    +  disp->implementation (tmp);
    +  tmp->init (attrs);
    +  return disp;
    +}
    +
    +}
    diff --git a/ACE/Kokyu/Kokyu.dsui b/ACE/Kokyu/Kokyu.dsui
    new file mode 100644
    index 00000000000..ab1e86740a1
    --- /dev/null
    +++ b/ACE/Kokyu/Kokyu.dsui
    @@ -0,0 +1,37 @@
    +# DSRT Dispatcher Impl (DSRT_Dispatcher_Impl.cpp)
    +DSTRM_EVENT	DSRT_DISPATCH_IMPL	10	INIT2	0	"Initialize Dispatcher object"	print_string
    +
    +# Dispatcher Task (Dispatcher_Task.cpp)
    +DSTRM_EVENT     DISP_TASK       9       EVENT_DEFERRED  3       "Time event is deferred"        print_string
    +DSTRM_EVENT     DISP_TASK       9       EVENT_FINISHED_DISPATCHING      2       "End time of dispatching event"    print_string
    +DSTRM_EVENT     DISP_TASK       9       EVENT_START_DISPATCHING 1       "Start time of actually dispatching event"    print_string
    +DSTRM_EVENT     DISP_TASK       9       EVENT_DEQUEUED  0       "Time of event duqueue" print_string
    +
    +# Dispatch Deferrer  (Dispatch_Deferrer.cpp)
    +DSTRM_EVENT     DISP_DEFERRER   8       EVENT_DEFERRED_DEQUEUE  1       "Enqueue event in dispatch queue"       print_string
    +DSTRM_EVENT     DISP_DEFERRER   8       EVENT_DEFERRED_ENQUEUE  0       "Buffer event until timer expires"    print_string
    +
    +# DSRT DIRECT Dispatcher (DSRT_DIRECT_Dispatcher_Impl_T.cpp)
    +DSTRM_EVENT     DSRT_DIRECT_DISPATCH        7       SCHEDULE_EXIT   1       "Exit Schedule_i"      print_string
    +DSTRM_EVENT     DSRT_DIRECT_DISPATCH        7       SCHEDULE_ENTER  0       "Enter Schedule_i"      print_string
    +
    +# DSRT CV Dispatcher (DSRT_CV_Dispatcher_Impl_T.cpp)
    +DSTRM_EVENT	DSRT_CV_DISPATCH	6	INIT	13	"Enter DSRT_Dispatcher_Impl init"	print_string
    +DSTRM_EVENT     DSRT_CV_DISPATCH        6       SHUTDOWN     12       "Enter shutdown_i function"  print_string
    +DSTRM_EVENT     DSRT_CV_DISPATCH        6       CANCEL_SCHEDULE_END     11       "Exit cancel_schedule_i function"  print_string
    +DSTRM_EVENT     DSRT_CV_DISPATCH        6       CANCEL_SCHEDULE_START     10       "Enter cancel_schedule_i function"  print_string
    +DSTRM_EVENT     DSRT_CV_DISPATCH        6       UPDATE_SCHEDULE_END     9       "Exit update_schedule_i function"  print_string
    +DSTRM_EVENT     DSRT_CV_DISPATCH        6       UPDATE_SCHEDULE_START     8       "Enter update_schedule_i function"  print_string
    +DSTRM_EVENT     DSRT_CV_DISPATCH        6       RELEASE_GUARD_END     7       "Exit release_guard_i function"  print_string
    +DSTRM_EVENT     DSRT_CV_DISPATCH        6       RELEASE_GUARD_START     6       "Enter release_guard_i function"  print_string
    +DSTRM_EVENT     DSRT_CV_DISPATCH        6       INIT_I    5       "Initialization"        print_string
    +DSTRM_EVENT     DSRT_CV_DISPATCH        6       NONRG_EVENT_RELEASED  4 "Event release time on the server side" print_string
    +DSTRM_EVENT     DSRT_CV_DISPATCH        6       RG_DELAYED_EVENT_RELEASED  3       "Event delayed by release guard release time on the server side" print_string
    +DSTRM_EVENT     DSRT_CV_DISPATCH        6       RG_EVENT_RELEASED  2       "Release guard Event release time on the server side" print_string
    +DSTRM_EVENT     DSRT_CV_DISPATCH        6       SCHEDULE_EXIT   1       "Exit Schedule_i"      print_string
    +DSTRM_EVENT     DSRT_CV_DISPATCH        6       SCHEDULE_ENTER  0       "Enter Schedule_i"      print_string
    +
    +# DSRT_Dispatcher (Kokyu_dsrt.cpp)
    +DSTRM_EVENT	DSRT_DISPATCH	5	CREATE_DSRT_DISPATCH_SCHED_END	2	"Done creating appropriate Scheduler"	print_string
    +DSTRM_EVENT	DSRT_DISPATCH	5	CREATE_DSRT_DISPATCH_SCHED_START	1	"Create appropriate Scheduler"	print_string
    +DSTRM_EVENT	DSRT_DISPATCH	5	SCHEDULE	0	"Schedule task"	print_string
    diff --git a/ACE/Kokyu/Kokyu.h b/ACE/Kokyu/Kokyu.h
    new file mode 100644
    index 00000000000..67cd6329c01
    --- /dev/null
    +++ b/ACE/Kokyu/Kokyu.h
    @@ -0,0 +1,115 @@
    +/* -*- C++ -*- */
    +/**
    + *  @file   Kokyu.h
    + *
    + *  $Id$
    + *
    + *  @author Venkita Subramonian (venkita@cs.wustl.edu)
    + *
    + * Based on previous work by Tim Harrison Chris Gill,
    + * Carlos O'Ryan and other members of the DOC group.
    + */
    +
    +#ifndef KOKYU_H
    +#define KOKYU_H
    +#include /**/ "ace/pre.h"
    +#include "ace/Copy_Disabled.h"
    +
    +#if !defined (ACE_LACKS_PRAGMA_ONCE)
    +# pragma once
    +#endif /* ACE_LACKS_PRAGMA_ONCE */
    +
    +#include "kokyu_export.h"
    +#include "Kokyu_defs.h"
    +
    +//Currently I am not seeing a way to avoid including these here. The
    +//whole purpose of the pImpl idiom is to avoid this dependency. But
    +//using the auto_ptr<> to store the implementation causes a compile
    +//error (in the destructor) that the implementation definition is not
    +//found. Note that the auto-ptr::~auto_ptr() calls delete on the
    +//internal pointer and at this point the class definition needs to be
    +//visible. Need to revisit this and see whether there is a work
    +//around.
    +#include "Dispatcher_Impl.h"
    +
    +//#################################################################
    +//Beware that this interface will be subject to change in the future
    +//since this is the very initial release. We will be working on
    +//trying to merge the DSRT and EC mechanisms in the future. If you 
    +//are a user of this interface, kindly let us know so that we can
    +//coordinate with you when we refactor this interface.
    +//##################################################################
    +
    +namespace Kokyu
    +{
    +  //class Dispatcher_Impl;
    +
    +  /**
    +   * @class Dispatcher
    +   *
    +   * @brief Interface class for dynamic scheduling of events
    +   *
    +   * The responsibility of this class is to forward all methods to
    +   * its delegation/implementation class, e.g.,
    +   * @c Default_Dispatcher_Impl. This class follows the pImpl idiom
    +   * or the bridge pattern to separate the implementation from the interface.
    +   * Dispatcher is the class that users will be using to achieve
    +   * dynamic dispatching of events in an event channel.
    +   */
    +  class Kokyu_Export Dispatcher : private ACE_Copy_Disabled
    +  {
    +  public:
    +    /// Dispatch a command object based on the qos info supplied.
    +    int dispatch (const Dispatch_Command*, const QoSDescriptor&);
    +
    +    /// Shut down the dispatcher. The dispatcher will stop processing requests.
    +    int shutdown ();
    +
    +    /// Supply this interface with an appripriate implementation.
    +    void implementation (Dispatcher_Impl*);
    +
    +    int activate ();
    +
    +    /// Non virtual destructor. Read as this class not available
    +    /// for inheritance.
    +    ~Dispatcher ();
    +  private:
    +    /// Auto ptr to the implementation. Implementation will be created on the
    +    /// heap and deleted automatically when the dispatcher object is destructed.
    +    auto_ptr dispatcher_impl_;
    +  };
    +
    +  typedef auto_ptr Dispatcher_Auto_Ptr;
    +
    +  /**
    +   * @class Dispatcher_Factory
    +   *
    +   * @brief Factory class to create one of the dispatcher interface
    +   * objects - for events.
    +   *
    +   * Factory class creates a dispatcher for EC and configures the
    +   * interface object with the appropriate implementation.
    +   */
    +  class Kokyu_Export Dispatcher_Factory : private ACE_Copy_Disabled
    +    {
    +    public:
    +      /**
    +       * Create a dispatcher for dynamic dispatching of commands
    +       * (eg. events). The caller is responsible for freeing the
    +       * returned dynamically allocated memory.
    +       *
    +       * @param config Configuration information for the dispatcher.
    +       *
    +       * @return pointer to the dispatcher.
    +       */
    +      static Dispatcher*
    +      create_dispatcher (const Dispatcher_Attributes& attr);
    +    };
    +} //end of namespace
    +
    +#if defined (__ACE_INLINE__)
    +#include "Kokyu.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +#include /**/ "ace/post.h"
    +#endif /* KOKYU_H */
    diff --git a/ACE/Kokyu/Kokyu.inl b/ACE/Kokyu/Kokyu.inl
    new file mode 100644
    index 00000000000..0de9481c16d
    --- /dev/null
    +++ b/ACE/Kokyu/Kokyu.inl
    @@ -0,0 +1,10 @@
    +// $Id$
    +
    +namespace Kokyu
    +{
    +ACE_INLINE
    +Dispatcher::~Dispatcher()
    +{
    +}
    +
    +}
    diff --git a/ACE/Kokyu/Kokyu.mpc b/ACE/Kokyu/Kokyu.mpc
    new file mode 100644
    index 00000000000..592f7acd14b
    --- /dev/null
    +++ b/ACE/Kokyu/Kokyu.mpc
    @@ -0,0 +1,27 @@
    +//  -*- MPC -*- now wouldn't this be cool...
    +// $Id$
    +
    +project(Kokyu) : acelib, ace_output, install {
    +  sharedname  = Kokyu
    +  dynamicflags = KOKYU_BUILD_DLL
    +
    +  Source_Files {
    +    Dispatcher_Impl.cpp
    +    Kokyu.cpp
    +    Default_Dispatcher_Impl.cpp
    +    Dispatcher_Task.cpp
    +    Kokyu_defs.cpp
    +  }
    +
    +  Template_Files {
    +    Kokyu_dsrt.cpp
    +    DSRT_Direct_Dispatcher_Impl_T.cpp
    +    DSRT_Dispatcher_Impl_T.cpp
    +    DSRT_Dispatch_Item_T.cpp
    +    DSRT_Sched_Queue_T.cpp
    +  }
    +
    +  Pkgconfig_Files {
    +    Kokyu.pc.in
    +  }
    +}
    diff --git a/ACE/Kokyu/Kokyu.mwc b/ACE/Kokyu/Kokyu.mwc
    new file mode 100644
    index 00000000000..dd297256b34
    --- /dev/null
    +++ b/ACE/Kokyu/Kokyu.mwc
    @@ -0,0 +1,5 @@
    +// -*- MPC -*-
    +// $Id$
    +
    +workspace {
    +}
    diff --git a/ACE/Kokyu/Kokyu.pc.in b/ACE/Kokyu/Kokyu.pc.in
    new file mode 100644
    index 00000000000..f0130540d25
    --- /dev/null
    +++ b/ACE/Kokyu/Kokyu.pc.in
    @@ -0,0 +1,11 @@
    +prefix=@prefix@
    +exec_prefix=@exec_prefix@
    +libdir=@libdir@
    +includedir=@includedir@
    +
    +Name: Kokyu
    +Description: Kokyu Scheduling Framework
    +Requires: ACE
    +Version: @VERSION@
    +Libs: -L${libdir} -lKokyu
    +Cflags: -I${includedir}
    diff --git a/ACE/Kokyu/Kokyu_defs.cpp b/ACE/Kokyu/Kokyu_defs.cpp
    new file mode 100644
    index 00000000000..8ba5c907429
    --- /dev/null
    +++ b/ACE/Kokyu/Kokyu_defs.cpp
    @@ -0,0 +1,66 @@
    +// $Id$
    +
    +#include "Kokyu_defs.h"
    +
    +#if ! defined (__ACE_INLINE__)
    +#include "Kokyu_defs.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +ACE_RCSID(Kokyu, Kokyu_defs, "$Id$")
    +
    +namespace Kokyu
    +{
    +   Dispatch_Command::~Dispatch_Command (void)
    +   {
    +   }
    +
    +  DSRT_ConfigInfo::DSRT_ConfigInfo ()
    +    :sched_policy_ (ACE_SCHED_RR),
    +     sched_scope_ (ACE_SCOPE_THREAD)
    +  {
    +  }
    +
    +Dispatcher_Attributes::Dispatcher_Attributes()
    +    :immediate_activation_ (0),
    +     sched_policy_ (ACE_SCHED_FIFO),
    +     sched_scope_ (ACE_SCOPE_THREAD),
    +     base_thread_creation_flags_ (THR_NEW_LWP | THR_BOUND | THR_JOINABLE)
    +{
    +}
    +
    +int Dispatcher_Attributes::thread_creation_flags () const
    +{
    +   int thread_creation_flags = base_thread_creation_flags_;
    +
    +   switch (sched_policy_)
    +   {
    +      case ACE_SCHED_FIFO:
    +         thread_creation_flags |= THR_SCHED_FIFO;
    +         break;
    +
    +      case ACE_SCHED_OTHER:
    +         thread_creation_flags |= THR_SCHED_DEFAULT;
    +         break;
    +
    +      case ACE_SCHED_RR:
    +         thread_creation_flags |= THR_SCHED_RR;
    +         break;
    +   }
    +
    +   switch (sched_scope_)
    +   {
    +      case ACE_SCOPE_PROCESS:
    +      case ACE_SCOPE_LWP:
    +         thread_creation_flags |= THR_SCOPE_PROCESS;
    +         break;
    +
    +      case ACE_SCOPE_THREAD:
    +      default:
    +         thread_creation_flags |= THR_SCOPE_SYSTEM;
    +         break;
    +   }
    +   return thread_creation_flags;
    +}
    +
    +}
    +
    diff --git a/ACE/Kokyu/Kokyu_defs.h b/ACE/Kokyu/Kokyu_defs.h
    new file mode 100644
    index 00000000000..721b87e522f
    --- /dev/null
    +++ b/ACE/Kokyu/Kokyu_defs.h
    @@ -0,0 +1,191 @@
    +/* -*- C++ -*- */
    +/**
    + *  @file   Kokyu_defs.h
    + *
    + *  $Id$
    + *
    + *  @author Venkita Subramonian (venkita@cs.wustl.edu)
    + *
    + */
    +
    +#ifndef KOKYU_DEFS_H
    +#define KOKYU_DEFS_H
    +#include /**/ "ace/pre.h"
    +#include "ace/Array.h"
    +#include "ace/Time_Value.h"
    +#include "ace/Auto_Ptr.h"
    +#include "ace/Message_Block.h"
    +#include "ace/Sched_Params.h"
    +#include "ace/Malloc_Allocator.h"
    +
    +#if !defined (ACE_LACKS_PRAGMA_ONCE)
    +# pragma once
    +#endif /* ACE_LACKS_PRAGMA_ONCE */
    +
    +#include "kokyu_export.h"
    +
    +namespace Kokyu
    +{
    +  typedef long Priority_t;
    +  typedef ACE_Time_Value Deadline_t; //absolute deadline
    +  typedef ACE_Time_Value Execution_Time_t; //execution time
    +  //typedef int Guid_t;
    +
    +  enum Dispatching_Type_t
    +    // Defines the type of prioritization strategy
    +    // to be used by a dispatching queue
    +    {
    +      FIFO_DISPATCHING,
    +      DEADLINE_DISPATCHING,
    +      LAXITY_DISPATCHING
    +    };
    +
    +  enum Criticality_t
    +    // Defines the criticality of the operation.
    +    // For use with Dynamic Scheduler.
    +    {
    +      VERY_LOW_CRITICALITY,
    +      LOW_CRITICALITY,
    +      MEDIUM_CRITICALITY,
    +      HIGH_CRITICALITY,
    +      VERY_HIGH_CRITICALITY
    +    };
    +
    +  enum Importance_t
    +    // Defines the importance of the operation,
    +    // which can be used by the RtecScheduler as a
    +    // "tie-breaker" when other scheduling
    +    // parameters are equal.
    +    {
    +      VERY_LOW_IMPORTANCE,
    +      LOW_IMPORTANCE,
    +      MEDIUM_IMPORTANCE,
    +      HIGH_IMPORTANCE,
    +      VERY_HIGH_IMPORTANCE
    +    };
    +
    +  struct Kokyu_Export Reordering_Queue_Attributes
    +  {
    +    Reordering_Queue_Attributes ();
    +    unsigned long static_bit_field_mask_;
    +    unsigned long static_bit_field_shift_;
    +    unsigned long dynamic_priority_max_;
    +    unsigned long dynamic_priority_offset_;
    +  };
    +
    +  struct Kokyu_Export ConfigInfo
    +  {
    +    Priority_t preemption_priority_;
    +
    +    // OS priority of the dispatching thread associated with the queue
    +    Priority_t thread_priority_;
    +
    +    // type of dispatching queue
    +    Dispatching_Type_t dispatching_type_;
    +
    +    //allocator to be used for dynamic memory allocation. If each
    +    //thread gets its own memory pool, contention will be less
    +    ACE_Allocator *allocator_;
    +
    +    Reordering_Queue_Attributes reordering_flags_;
    +
    +    ConfigInfo ();
    +  };
    +
    +  typedef ACE_Array ConfigInfoSet;
    +
    +  class Kokyu_Export Dispatcher_Attributes
    +  {
    +  public:
    +    ConfigInfoSet config_info_set_;
    +    int immediate_activation_;
    +
    +  public:
    +    Dispatcher_Attributes ();
    +    void sched_policy (int);
    +    void sched_scope (int);
    +    int thread_creation_flags () const;
    +
    +  private:
    +    int sched_policy_;
    +    int sched_scope_;
    +    int base_thread_creation_flags_;
    +  };
    +
    +
    +  struct Kokyu_Export QoSDescriptor
    +  {
    +    Priority_t preemption_priority_;
    +    Deadline_t deadline_;
    +    Execution_Time_t execution_time_;
    +    Importance_t importance_;
    +  };
    +
    +  enum Block_Flag_t {BLOCK, UNBLOCK};
    +
    +  class Kokyu_Export Dispatch_Command
    +    {
    +    public:
    +      Dispatch_Command(int dont_delete = 0,
    +                       ACE_Allocator *allocator = 0);
    +      //dont_delete indicates whether this object needs to be deleted once processed.
    +      //allocator indicates the ACE_Allocator, if any, from which this object was created.
    +      //This same allocator has to be used for the deletion also
    +
    +      /// Command callback
    +      virtual int execute () = 0;
    +
    +      int can_be_deleted () const;
    +
    +      void destroy (void);
    +    protected:
    +      /// Destructor
    +      // only inheritance is possible and object should be on heap,
    +      // since object could be handed over to a different thread.
    +      virtual ~Dispatch_Command (void);
    +
    +    private:
    +      int dont_delete_;
    +      ACE_Allocator *allocator_;
    +      //if this object has to be deleted, then delete it using the allocator
    +      //if one is present.
    +    };
    +
    +  enum DSRT_Sched_Type_t
    +    {
    +      DSRT_FP,
    +      DSRT_MUF,
    +      DSRT_MIF
    +    };
    +
    +  enum DSRT_Dispatcher_Impl_t
    +    {
    +      DSRT_CV_BASED,
    +      DSRT_OS_BASED
    +    };
    +
    +  struct Kokyu_Export DSRT_ConfigInfo
    +  {
    +    //not used currently
    +    DSRT_Sched_Type_t sched_strategy_;
    +
    +    ACE_Sched_Params::Policy sched_policy_;
    +    int sched_scope_;
    +
    +    //type of implementation
    +    DSRT_Dispatcher_Impl_t impl_type_;
    +
    +    DSRT_ConfigInfo ();
    +  };
    +
    +} //end of namespace
    +
    +//to satisfy ACE_Array
    +ACE_INLINE bool operator != (const Kokyu::ConfigInfo& lhs, const Kokyu::ConfigInfo& rhs);
    +
    +#if defined (__ACE_INLINE__)
    +#include "Kokyu_defs.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +#include /**/ "ace/post.h"
    +#endif /* KOKYU_DEFS_H */
    diff --git a/ACE/Kokyu/Kokyu_defs.inl b/ACE/Kokyu/Kokyu_defs.inl
    new file mode 100644
    index 00000000000..0cf793c2a1a
    --- /dev/null
    +++ b/ACE/Kokyu/Kokyu_defs.inl
    @@ -0,0 +1,86 @@
    +// $Id$
    +
    +
    +namespace Kokyu
    +{
    +
    +ACE_INLINE
    +void Dispatcher_Attributes::sched_policy(int policy)
    +{
    +  sched_policy_ = policy;
    +}
    +
    +ACE_INLINE
    +void Dispatcher_Attributes::sched_scope(int scope)
    +{
    +  sched_scope_ = scope;
    +}
    +
    +ACE_INLINE
    +Reordering_Queue_Attributes::Reordering_Queue_Attributes ()
    +  :static_bit_field_mask_ (0), // not used
    +   static_bit_field_shift_ (0), // not used
    +   dynamic_priority_max_ (0x7FFFFFFFUL), // 2^31-1
    +   dynamic_priority_offset_ (0x08000000UL) // 15/16th of dynamic prio range
    +{
    +  //bits for static priority = 0
    +  //max dynamic prio = 2^31 - 1
    +  //pending offset = 15/16th of the dynamic prio range
    +  //which means that the LATE population will be in the
    +  //1/16th part of the range.
    +
    +  //For the Laxity and Deadline strategies these are the
    +  //defaults defined in Message_Block.h
    +  //static_bit_field_mask (0x3FFUL), // 2^(10) - 1
    +  //static_bit_field_shift (10), // 10 low order bits
    +  //dynamic_priority_max (0x3FFFFFUL), // 2^(22)-1
    +  //dynamic_priority_offset (0x200000UL) // 2^(22-1)
    +}
    +
    +ACE_INLINE
    +Dispatch_Command::Dispatch_Command (int dont_delete,
    +        ACE_Allocator *allocator)
    +        :dont_delete_ (dont_delete),
    +        allocator_ (allocator)
    +{
    +}
    +
    +ACE_INLINE
    +int Dispatch_Command::can_be_deleted (void) const
    +{
    +  return !dont_delete_;
    +}
    +
    +ACE_INLINE
    +void Dispatch_Command::destroy (void)
    +{
    +  if (allocator_)
    +  {
    +    allocator_->free (this);
    +  }
    +  else
    +  {
    +    delete this;
    +  }
    +}
    +
    +ACE_INLINE
    +ConfigInfo::ConfigInfo ()
    +  :preemption_priority_ (0),
    +   thread_priority_ (0),
    +   dispatching_type_ (FIFO_DISPATCHING),
    +   allocator_ (0)
    +{
    +}
    +
    +}
    +
    +//to satisfy ACE_Array
    +ACE_INLINE
    +bool operator != (const Kokyu::ConfigInfo& lhs,
    +                  const Kokyu::ConfigInfo& rhs)
    +{
    +  return (lhs.preemption_priority_ != rhs.preemption_priority_ ||
    +          lhs.thread_priority_ != rhs.thread_priority_ ||
    +          lhs.dispatching_type_ != rhs.dispatching_type_ );
    +}
    diff --git a/ACE/Kokyu/Kokyu_dsrt.cpp b/ACE/Kokyu/Kokyu_dsrt.cpp
    new file mode 100644
    index 00000000000..31b3beec2a4
    --- /dev/null
    +++ b/ACE/Kokyu/Kokyu_dsrt.cpp
    @@ -0,0 +1,179 @@
    +// $Id$
    +
    +#include "Kokyu_dsrt.h"
    +
    +#include "ace/Dynamic_Service.h"
    +#include "DSRT_Direct_Dispatcher_Impl_T.h"
    +#include "DSRT_CV_Dispatcher_Impl_T.h"
    +
    +#if ! defined (__ACE_INLINE__)
    +#include "Kokyu_dsrt.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +ACE_RCSID(Kokyu, Kokyu, "$Id$")
    +
    +namespace Kokyu
    +{
    +
    +template 
    +void
    +DSRT_Dispatcher::implementation (DSRT_Dispatcher_Impl* impl)
    +{
    +  auto_ptr > tmp_impl (impl);
    +  dispatcher_impl_ = tmp_impl;
    +}
    +
    +template 
    +int
    +DSRT_Dispatcher::schedule (Guid_t guid, const DSRT_QoSDescriptor& qos)
    +{
    +  return dispatcher_impl_->schedule (guid, qos);
    +}
    +
    +template 
    +int
    +DSRT_Dispatcher::update_schedule (Guid_t guid, const DSRT_QoSDescriptor& qos)
    +{
    +  return dispatcher_impl_->update_schedule (guid, qos);
    +}
    +
    +template 
    +int
    +DSRT_Dispatcher::update_schedule (Guid_t guid, Kokyu::Block_Flag_t flag)
    +{
    +  return dispatcher_impl_->update_schedule (guid, flag);
    +}
    +
    +template 
    +int
    +DSRT_Dispatcher::cancel_schedule (Guid_t guid)
    +{
    +  return dispatcher_impl_->cancel_schedule (guid);
    +}
    +
    +template 
    +int DSRT_Dispatcher::shutdown ()
    +{
    +  return dispatcher_impl_->shutdown ();
    +}
    +
    +template 
    +DSRT_Dispatcher*
    +DSRT_Dispatcher_Factory::
    +create_DSRT_dispatcher (const DSRT_ConfigInfo& config_info)
    +{
    +  ACE_UNUSED_ARG ((config_info));
    +
    +  DSRT_Dispatcher_Impl* tmp;
    +  DSRT_Dispatcher* disp;
    +
    +  switch (config_info.impl_type_)
    +    {
    +    case DSRT_OS_BASED:
    +      ACE_NEW_RETURN (tmp, 
    +                      DSRT_Direct_Dispatcher_Impl (
    +                      config_info.sched_policy_, 
    +                      config_info.sched_scope_), 
    +                      0);
    +      break;
    +
    +    case DSRT_CV_BASED:
    +    default:
    +      ACE_NEW_RETURN (tmp, 
    +                      DSRT_CV_Dispatcher_Impl(
    +                      config_info.sched_policy_, 
    +                      config_info.sched_scope_), 
    +                      0);
    +      break;
    +    }
    +    
    +  ACE_ASSERT (tmp != 0);
    +  ACE_NEW_RETURN (disp, DSRT_Dispatcher, 0);
    +  disp->implementation (tmp);
    +  tmp->init (config_info);
    +  return disp;
    +}
    +
    +template 
    +int MUF_Comparator::
    +operator ()(const QoSDescriptor_t& qos1,
    +            const QoSDescriptor_t& qos2)
    +{
    +  if (qos1.criticality_ > qos2.criticality_)
    +    {
    +      return 1;
    +    }
    +  else if (qos2.criticality_ > qos1.criticality_)
    +    {
    +      return -1;
    +    }
    +
    +  typename QoSDescriptor_t::Now now_functor;
    +  Time_t now = now_functor ();
    +
    +  Time_t exec_time1 = qos1.exec_time_;
    +  Time_t deadline1 = qos1.deadline_;
    +  Time_t laxity1 = deadline1 - now - exec_time1;
    +  Time_t exec_time2 = qos2.exec_time_;
    +  Time_t deadline2 = qos2.deadline_;
    +  Time_t laxity2 = deadline2 - now - exec_time2;
    +
    +  if (laxity1 < laxity2)
    +    {
    +      return 1;
    +    }
    +  else if (laxity1 == laxity2)
    +    {
    +      return 0;
    +    }
    +  else
    +    {
    +      return -1;
    +    }
    +}
    +
    +template 
    +int MIF_Comparator::
    +operator ()(const QoSDescriptor& qos1,
    +            const QoSDescriptor& qos2)
    +{
    +#ifdef KOKYU_DSRT_LOGGING
    +  ACE_DEBUG ((LM_DEBUG, 
    +              "(%t|%T):qos1.importance = %d, qos2.importance = %d\n",
    +              qos1.importance_, qos2.importance_));
    +#endif  
    +
    +  if (qos1.importance_ > qos2.importance_)
    +    {
    +      return 1;
    +    }
    +  else if (qos1.importance_ == qos2.importance_)
    +    {
    +      return 0;
    +    }
    +  else
    +    {
    +      return -1;
    +    }
    +}
    +
    +template 
    +int Fixed_Priority_Comparator::
    +operator ()(const QoSDescriptor& qos1,
    +            const QoSDescriptor& qos2)
    +{
    +  if (qos1.priority_ > qos2.priority_)
    +    {
    +      return 1;
    +    }
    +  else if (qos1.priority_ == qos2.priority_)
    +    {
    +      return 0;
    +    }
    +  else
    +    {
    +      return -1;
    +    }
    +}
    +
    +}
    diff --git a/ACE/Kokyu/Kokyu_dsrt.h b/ACE/Kokyu/Kokyu_dsrt.h
    new file mode 100644
    index 00000000000..c10d429e062
    --- /dev/null
    +++ b/ACE/Kokyu/Kokyu_dsrt.h
    @@ -0,0 +1,177 @@
    +/* -*- C++ -*- */
    +/**
    + *  @file   Kokyu_dsrt.h
    + *
    + *  $Id$
    + *
    + *  @author Venkita Subramonian (venkita@cs.wustl.edu)
    + *
    + */
    +
    +#ifndef KOKYU_DSRT_H
    +#define KOKYU_DSRT_H
    +#include /**/ "ace/pre.h"
    +#include "ace/Copy_Disabled.h"
    +
    +//#if !defined (ACE_LACKS_PRAGMA_ONCE)
    +//# pragma once
    +//#endif /* ACE_LACKS_PRAGMA_ONCE */
    +
    +#include "kokyu_export.h"
    +#include "Kokyu_defs.h"
    +
    +namespace Kokyu
    +{
    +
    +  template  class DSRT_Dispatcher_Impl;
    +
    +  /**
    +   * @class DSRT_Dispatcher
    +   *
    +   * @brief Interface class for dynamic scheduling of threads
    +   *
    +   * The responsibility of this class is to forward all methods to
    +   * its delegation/implementation class, e.g.,
    +   * @c Default_DSRT_Dispatcher_Impl. This class follows the pImpl idiom
    +   * or the bridge pattern to separate the implementation from the interface.
    +   * DSRT_Dispatcher is the class that users will be using to achieve
    +   * dynamic scheduling of threads.
    +   */
    +  template 
    +  class DSRT_Dispatcher : private ACE_Copy_Disabled
    +  {
    +  public:
    +    typedef typename DSRT_Scheduler_Traits::Guid_t Guid_t;
    +    typedef typename DSRT_Scheduler_Traits::QoSDescriptor_t DSRT_QoSDescriptor;
    +
    +    // = Scheduling methods.
    +
    +    /// Schedule a thread dynamically based on the qos info supplied.
    +    int schedule (Guid_t guid, const DSRT_QoSDescriptor&);
    +
    +    /// Update the schedule for a thread. This could alter the current schedule.
    +    int update_schedule (Guid_t guid, const DSRT_QoSDescriptor&);
    +
    +    /// Inform the scheduler that the caller thread is about to
    +    /// block. This could alter the current schedule.
    +    int update_schedule (Guid_t guid, Kokyu::Block_Flag_t flag);
    +
    +    /// Cancel the schedule for a thread. This could alter the current schedule.
    +    int cancel_schedule (Guid_t guid);
    +
    +    /// Supply this interface with an appropriate implementation.
    +    void implementation (DSRT_Dispatcher_Impl*);
    +
    +    // = Termination methods.
    +
    +    /// Shut down the dispatcher. The dispatcher will stop processing requests.
    +    int shutdown ();
    +
    +    /// Non virtual destructor. Read as this class not available
    +    /// for inheritance.
    +    ~DSRT_Dispatcher ();
    +
    +  private:
    +    /// Auto ptr to the implementation. Implementation will be created on the
    +    /// heap and deleted automatically when the dispatcher object is destructed.
    +    auto_ptr > dispatcher_impl_;
    +  };
    +
    +
    +  /**
    +   * @class DSRT_Dispatcher_Factory
    +   *
    +   * @brief Factory class to create one of the dispatcher interface
    +   * objects - for events or DSRT threads.
    +   *
    +   * Factory class creates a dispatcher or DSRT dispatcher and configures
    +   * the interface object with the appropriate implementation.
    +   */
    +
    +  template 
    +  class DSRT_Dispatcher_Factory : private ACE_Copy_Disabled
    +    {
    +    public:
    +      typedef auto_ptr > DSRT_Dispatcher_Auto_Ptr;
    +
    +      /**
    +       * Create a dispatcher for dynamic dispatching of threads.
    +       * This will be used to dynamic scheduling of distributable threads for
    +       * DSRTCORBA. The caller is responsible for freeing the memory.
    +       *
    +       * @param config Configuration information for the DSRT dispatcher.
    +       *
    +       * @return pointer to the DSRT dispatcher.
    +       */
    +      static DSRT_Dispatcher* create_DSRT_dispatcher (const DSRT_ConfigInfo&);
    +    };
    +
    +  /**
    +   * @class MIF_Sched_Strategy
    +   *
    +   * @brief Strategy class implementing Maximum Importance First
    +   * reordering strategy.
    +   *
    +   */
    +  template 
    +  class MIF_Comparator
    +  {
    +  public:
    +    typedef typename QoSDesc::Importance_t Importance_t;
    +
    +    int operator ()(const QoSDesc& qos1,
    +                    const QoSDesc& qos2);
    +  };
    +
    +  /**
    +   * @class Fixed_Priority_Sched_Strategy
    +   *
    +   * @brief Strategy class implementing Fixed Priority reordering
    +   * strategy.
    +   *
    +   */
    +  template 
    +  class Fixed_Priority_Comparator
    +  {
    +  public:
    +    typedef typename QoSDesc::Priority_t Priority_t;
    +
    +    int operator ()(const QoSDesc& qos1,
    +                    const QoSDesc& qos2);
    +  };
    +
    +  /**
    +   * @class MUF_Sched_Strategy
    +   *
    +   * @brief Strategy class implementing Maximum Urgency First
    +   * reordering strategy.
    +   *
    +   */
    +  template 
    +  class MUF_Comparator
    +  {
    +    public:
    +    typedef typename QoSDesc::Criticality_t Criticality_t;
    +    typedef typename QoSDesc::Time_t Time_t;
    +
    +    int operator ()(const QoSDesc& qos1,
    +                    const QoSDesc& qos2);
    +  };
    +
    +
    +} //end of namespace
    +
    +#if defined (__ACE_INLINE__)
    +#include "Kokyu_dsrt.inl"
    +#endif /* __ACE_INLINE__ */
    +
    +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
    +#include "Kokyu_dsrt.cpp"
    +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
    +
    +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
    +#pragma implementation ("Kokyu_dsrt.cpp")
    +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
    +
    +#include /**/ "ace/post.h"
    +#endif /* KOKYU_DSRT_H */
    diff --git a/ACE/Kokyu/Kokyu_dsrt.inl b/ACE/Kokyu/Kokyu_dsrt.inl
    new file mode 100644
    index 00000000000..1f9caf3c234
    --- /dev/null
    +++ b/ACE/Kokyu/Kokyu_dsrt.inl
    @@ -0,0 +1,11 @@
    +// $Id$
    +
    +namespace Kokyu
    +{
    +template 
    +ACE_INLINE
    +DSRT_Dispatcher::~DSRT_Dispatcher()
    +{
    +}
    +}
    +
    diff --git a/ACE/Kokyu/Makefile.am b/ACE/Kokyu/Makefile.am
    new file mode 100644
    index 00000000000..86deb01005e
    --- /dev/null
    +++ b/ACE/Kokyu/Makefile.am
    @@ -0,0 +1,87 @@
    +##  Process this file with automake to create Makefile.in
    +##
    +## $Id$
    +##
    +## This file was generated by MPC.  Any changes made directly to
    +## this file will be lost the next time it is generated.
    +##
    +## MPC Command:
    +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc
    +
    +includedir = @includedir@/Kokyu
    +pkgconfigdir = @libdir@/pkgconfig
    +
    +ACE_BUILDDIR = $(top_builddir)
    +ACE_ROOT = $(top_srcdir)
    +
    +SUBDIRS = \
    +        . \
    +        tests
    +
    +## Makefile.Kokyu.am
    +
    +lib_LTLIBRARIES = libKokyu.la
    +
    +libKokyu_la_CPPFLAGS = \
    +  -I$(ACE_ROOT) \
    +  -I$(ACE_BUILDDIR) \
    +  -DKOKYU_BUILD_DLL
    +
    +libKokyu_la_SOURCES = \
    +  Default_Dispatcher_Impl.cpp \
    +  Dispatcher_Impl.cpp \
    +  Dispatcher_Task.cpp \
    +  Kokyu.cpp \
    +  Kokyu_defs.cpp
    +
    +libKokyu_la_LDFLAGS = \
    + -release @ACE_VERSION_NAME@
    +
    +libKokyu_la_LIBADD = \
    +  $(ACE_BUILDDIR)/ace/libACE.la
    +
    +nobase_include_HEADERS = \
    +  DSRT_Direct_Dispatcher_Impl_T.cpp \
    +  DSRT_Direct_Dispatcher_Impl_T.h \
    +  DSRT_Dispatch_Item_T.cpp \
    +  DSRT_Dispatch_Item_T.h \
    +  DSRT_Dispatch_Item_T.inl \
    +  DSRT_Dispatcher_Impl_T.cpp \
    +  DSRT_Dispatcher_Impl_T.h \
    +  DSRT_Dispatcher_Impl_T.inl \
    +  DSRT_Sched_Queue_T.cpp \
    +  DSRT_Sched_Queue_T.h \
    +  Default_Dispatcher_Impl.h \
    +  Default_Dispatcher_Impl.inl \
    +  Dispatcher_Impl.h \
    +  Dispatcher_Impl.inl \
    +  Dispatcher_Task.h \
    +  Dispatcher_Task.inl \
    +  Kokyu.h \
    +  Kokyu.inl \
    +  Kokyu_defs.h \
    +  Kokyu_defs.inl \
    +  Kokyu_dsrt.cpp \
    +  Kokyu_dsrt.h \
    +  Kokyu_dsrt.inl
    +
    +pkgconfig_DATA = \
    +  Kokyu.pc
    +
    +CLEANFILES = \
    +  Kokyu.pc
    +
    +Kokyu.pc: ${top_builddir}/config.status ${srcdir}/Kokyu.pc.in
    +	${top_builddir}/config.status --file $@:${srcdir}/Kokyu.pc.in
    +
    +EXTRA_DIST = \
    +  Kokyu.pc.in
    +
    +
    +## Clean up template repositories, etc.
    +clean-local:
    +	-rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.*
    +	-rm -f gcctemp.c gcctemp so_locations *.ics
    +	-rm -rf cxx_repository ptrepository ti_files
    +	-rm -rf templateregistry ir.out
    +	-rm -rf ptrepository SunWS_cache Templates.DB
    diff --git a/ACE/Kokyu/README b/ACE/Kokyu/README
    new file mode 100644
    index 00000000000..9db0e95225b
    --- /dev/null
    +++ b/ACE/Kokyu/README
    @@ -0,0 +1,22 @@
    +# $Id:
    +
    +Kokyu is a portable middleware scheduling framework designed to
    +provide flexible scheduling and dispatching services within the
    +context of higher-level middleware. Kokyu currently provides real-time
    +scheduling and dispatching services for TAO's real-time Event Service
    +which mediates supplier-consumer relationships between application
    +operations. Kokyu also provides a scheduling and dispatching framework
    +for threads. This is being used by the TAO RTCORBA 1.2 scheduler
    +implementations. For more information, see
    +
    +ACE_wrappers/Kokyu/docs/Kokyu.html
    +
    +To build Kokyu on Unix systems, from under $ACE_ROOT/Kokyu do
    +
    +make
    +
    +To build Kokyu on Windows, open the workspace
    +$ACE_ROOT/Kokyu/Kokyu.dsw and build it.
    +
    +An mpc file has also been provided - $ACE_ROOT/Kokyu/Kokyu.mpc from
    +which IDE specific build files can be generated.
    diff --git a/ACE/Kokyu/docs/Kokyu.html b/ACE/Kokyu/docs/Kokyu.html
    new file mode 100644
    index 00000000000..bb4505eb9e6
    --- /dev/null
    +++ b/ACE/Kokyu/docs/Kokyu.html
    @@ -0,0 +1,416 @@
    +
    +
    +
    +
    +   
    +   
    +   
    +   Kokyu
    +
    +
    +
    +
    +

    +Kokyu - A middleware framework for flexible scheduling +and dispatching

    +
    Introduction +
    Strategized Scheduling framework +
    Flexible Dispatching Framework +
    Use of Kokyu within the TAO Real-time Event Channel(RTEC) +
    Configuration of RTEC to use Kokyu dispatching +
    Use of Kokyu within the Dynamic Scheduling +Real-time CORBA (DSRTCORBA) schedulers +
    How to write a new DSRT scheduler using Kokyu +
    Kokyu DSRTCORBA vs Kokyu RTEC +
    Current status +
    Future work +
    Papers on Kokyu +
      +

    +Introduction

    +Kokyu is a portable middleware scheduling framework designed to provide +flexible scheduling and dispatching services within the context of higher-level +middleware. Kokyu currently provides real-time scheduling and dispatching +services for TAO’s real-time CORBA Event Service, which mediates supplier-consumer +relationships between application operations. Kokyu consists primarily +of two cooperating infrastructure segments, illustrated in Figure 1: +
    +

    +
    Figure 1: Kokyu Scheduling and Dispatching Infrastructure

    + +
      +
    1. +A pluggable scheduling infrastructure with efficient support for adaptive +execution of diverse static, dynamic, and hybrid static/dynamic scheduling +heuristics.
    2. + +
    3. +A flexible dispatching infrastructure that allows composition of primitive +operating system and middleware mechanisms to enforce arbitrary scheduling +heuristics.
    4. +
    +The scheduler is responsible for specifying how operation dispatch requests +are ordered, by assigning priority levels and rates to tasks, and producing +a configuration specification for the dispatching mechanism. The dispatcher +is responsible for enforcing the ordering of operation dispatches using +different threads, requests queues, and timers configured according to +the scheduler’s specification. The combined framework provides an implicit +projection of scheduling heuristics into appropriate dispatching infrastructure +configurations, so that the scheduling and dispatching infrastructure segments +can be optimized both separately and in combination. +

    +Strategized Scheduling framework

    +The Kokyu scheduling framework is designed to support a variety of scheduling +heuristics including RMS, EDF, MLF, and MUF. In addition, this framework +provides a common environment to compare systematically both existing and +new scheduling strategies. This flexibility is achieved in the Kokyu framework +via the Strategy pattern, which allows parts of the sequence of steps in +an algorithm to be replaced, thus providing interchangeable variations +within a consistent algorithmic framework. The Kokyu scheduling framework +uses the Strategy pattern to encapsulate a family of scheduling algorithms +within a fixed CORBA IDL interface, thereby enabling different strategies +to be configured independently from applications that use them. +

    +Flexible Dispatching Framework

    +The right side of Figure 1 shows the essential features of Kokyu’s flexible +task dispatching infrastructure. Key features of the dispatching infrastructure +that are essential to performing our optimizations are as follows: +

    Dispatching queues: Each task is assigned by our strategized +Kokyu scheduling framework  to a specific dispatching queue, each +of which has an associated queue number, a queueing discipline, and a unique +operating-system-specific priority for its single associated dispatching +thread. +

    Dispatching threads: Operating-system thread priorities decrease +as the queue number increases, so that the 0th queue is served by the highest +priority thread. Each dispatching thread removes the task from the head +of its queue and runs its entry point function to completion before retrieving +the next task to dispatch. Adapters can be applied to operations to intercept +and possibly short-circuit the entry-point upcall. In general, however, +the outermost operation entry point must complete on each dispatch. +

    Queueing disciplines: Dispatching thread priorities determine +which queue is active at any given time: the highest priority queue with +a task to dispatch is always active, preempting tasks in lower priority +queues. In addition, each queue may have a distinct discipline for determining +which of its enqueued tasks has the highest eligibility, and must ensure +the highest is at the head of the queue at the point when one is to be +dequeued. We consider three disciplines: +

      +
    • +Static – Tasks are ordered by a static subpriority value – results in FIFO +ordering if all static subpriorities are made the same; static queues at +different priority levels can be used to implement an RMS scheduling strategy.
    • + +
    • +Deadline – Tasks are ordered by time to deadline; a single deadline queue +can be used to implement the earliest deadline first (EDF) scheduling strategy.
    • + +
    • +Laxity – Tasks are ordered by slack time, or laxity – the time to deadline +minus the execution time; a single laxity queue can be used to implement +the minimum laxity first (MLF) scheduling strategy; laxity queues at different +priority levels can be used to implement the maximum urgency first (MUF) +scheduling strategy.
    • +
    +Any discipline for which a maximal eligibility may be selected can be employed +to manage a given dispatching queue in this approach. Scheduling strategies +can be constructed from one or more queues of each discipline alone, or +combinations of queues with different disciplines can be used. Figure 2  +illustrates the general queueing mechanism used by the dispatching modules +in the Kokyu dispatching framework. +
    +

    +

    Figure 2: Example Queueing Mechanism in a Kokyu Dispatching Module

    + +

    In addition, this figure shows how the output information provided by +the Kokyu scheduling framework is used to configure and operate a dispatching +module. During system initialization, each dispatching module obtains the +thread priority and dispatching type for each of its queues, typically +from the scheduling service’s output interface. Next, each queue is assigned +a unique dispatching priority number, a unique thread priority, and an +enumerated dispatching type. Finally, each dispatching module has an ordered +queue of pending dispatches per dispatching priority. To preserve QoS guarantees, +operations are inserted into the appropriate dispatching queue according +to their assigned dispatching priority. Operations within a dispatching +queue are ordered by their assigned dispatching subpriority. To minimize +priority inversions, operations are dispatched from the queue with the +highest thread priority, preempting any operation executing in a lower +priority thread. To minimize preemption overhead, there is no preemption +within a given priority queue. The following three values are defined for +the dispatching type: +

      +
    • +STATIC DISPATCHING: This type specifies a queue that only considers +the static portion of an operation’s dispatching subpriority.
    • + +
    • +DEADLINE DISPATCHING: This type specifies a queue that considers +the dynamic and static portions of an operation’s dispatching subpriority, +and updates the dynamic portion according to the time remaining until the +operation’s deadline.
    • + +
    • +LAXITY DISPATCHING: This type specifies a queue that considers the +dynamic and static portions of an operation’s dispatching subpriority, +and updates the dynamic portion according to the operation’s laxity.
    • +
    + +

    +Use of Kokyu within the TAO Real-time Event Channel(RTEC)

    +Figure 3 shows the sequence of operations that take place in the Kokyu +based dispatching module in the TAO RTEC. The client application registers +all relevant operations with the scheduler along with their real-time requirements. +This is done through the concept of an RT_Info +(see +TAO/orbsvcs/orbsvcs/RtecScheduler.idl) structure which is a structure that +contains the execution time, criticality, period, etc of an operation.  +The client then calls compute_schedule +method on the scheduler. The scheduler creates a dependency graphs of all +operations and partitions operations into equivalence classes based on +the scheduling parameters supplied. The scheduler can be configured to +have any scheduling policy which determines the equivalence class partitioning +(queues) and possibly a partial ordering of operations within an equivalence +class (ordering within a queue). Once this is done, the scheduler has the +configuration information for the Kokyu dispatcher like the number of dispatch +queues, priorities for the threads processing each queue, etc. +

    When the client calls activate +on the event channel, the EC inturn activates the Kokyu based EC dispatching +module. The EC dispatching module queries the dispatch configuration from +the scheduler and uses that to create the Kokyu dispatcher with the appropriate +number of lanes and threads. When an event is pushed into the EC, the EC +pushes the event to the appropriate consumers, who are subscribed to that +event. For each consumer, the EC queries the scheduler for the RT_Info +of that consumer. It then hands over the event to the Kokyu based dispatching +module. The dispatching module then enqueues the event into the appropriate +queue for processing by the thread watching that queue. +

    +

    +

    Figure 3: Kokyu based dispatching module within TAO RTEC

    + +

    +Configuration of RTEC to use Kokyu dispatching

    +Static configuration: In the svc.conf file, make sure you +have the following configuration for Kokyu dispatching. You can combine +this with other -ECxxx options. +

    static EC_Factory "-ECdispatching kokyu +SCHED_FIFO -ECscheduling kokyu -ECfiltering kokyu" +

    To run the threads in the real-time FIFO class, use SCHED_FIFO. You +could use SCHED_RR and SCHED_OTHER also. +
    The default is SCHED_FIFO. +

    In your program, call +

    TAO_EC_Kokyu_Factory::init_svcs (); +

    to statically create the EC Kokyu dispatching and other Kokyu related +modules. +

    Dynamic configuration: In the svc.conf file, make sure +you have the following configuration for Kokyu dispatching. You can combine +this with other -ECxxx options. +

    dynamic EC_Factory Service_Object * +TAO_RTKokyuEvent:_make_TAO_EC_Kokyu_Factory() "-ECdispatching kokyu -ECscheduling +kokyu -ECfiltering kokyu" +

    +Use of Kokyu within the Dynamic Scheduling +Real-time CORBA (DSRTCORBA) schedulers

    +An initial implementation of mechanisms to support DSRTCORBA schedulers +have been released. DSRTCORBA uses the concept of distributed threads, +which traverse multiple end systems giving the application the illusion +of a single logical thread executing an end-to-end task. The distributed +thread carries with it the scheduling parameters like importance, deadline, +etc so that it can get scheduled by a local scheduler on each endsystem. +The Kokyu DSRT dispatching framework is used as an enforcing mechanism. +

    The DSRT schedulers are available in the directory $TAO_ROOT/examples/Kokyu_dsrt_schedulers. +They use the Kokyu DSRT +
    dispatching classes present in $ACE_ROOT/Kokyu. These act as wrappers/adapters +around the Kokyu DSRT dispatcher. The Kokyu DSRT dispatcher is responsible +for scheduling threads which ask the dispatcher to schedule themselves. +Currently there are two implementations for the Kokyu DSRT dispatcher. +One uses a condition-variable based approach for scheduling threads and +the other manipulates priorities of threads and relies on the OS scheduler +for dispatching the threads appropriately. +

    +CV-based approach:

    +In this approach, it is assumed that the threads "yield" on a regular basis +to the scheduler by calling update_scheduling_segment. Only one +thread is running at any point in time. All the other threads are blocked +on a condition variable. When the currently running thread yields, it will +cause the condition variable to be signalled. All the eligible threads +are stored in a scheduler queue (rbtree), the most eligible thread determined +by the scheduling discipline. This approach has the drawback that it requires +a cooperative threading model, where threads yield voluntarily on a regular +basis. The application threads are responsible for doing this voluntary +yielding. +

    +OS-based approach:

    +This approach relies on the OS scheduler to do the actual thread dispatching. +The Kokyu DSRT dispatcher manipulates the priorities of the threads. The +scheduler maintains a queue (rbtree) of threads. The scheduler also has +an executive thread, which runs at the maximum available priority. This +thread runs in a continuous loop until the dispatcher is shut down. The +executive thread is responsible for selecting the most eligible thread +from the scheduler queue and bump up its priority if necessary while bumping +down the priority of the currently running thread, if it is not the most +eligible. There are four priority levels required for this mechanism to +work, listed in descending order of priorities. For example, a thread running +at Active priority will preempt a +
    thread running at Inactive priority level. +
      +
    1. +Executive priority - priority at which the scheduler executive thread runs.
    2. + +
    3. +Blocked priority - this is the priority to which threads about to block +on remote calls will be bumped up to.
    4. + +
    5. +Active priority - this is the priority to which the most eligible thread +is set to.
    6. + +
    7. +Inactive priority - this is the priority to which all threads except the +most eligible thread is set to.
    8. +
    +As soon as a thread asks to be scheduled, a wrapper object is created and +inserted into the queue. This object carries the qos (sched params) associated +with that thread. A condition variable is signalled to inform the executive +thread that the queue is "dirty". The scheduler thread picks up the most +eligble one and sets its priority to active and sets the currently +running thread priority to +
    inactive. +

    The drawback to this approach is that it relies on the OS scheduler +to dispatch the threads. Also, with the current implementation, there is +only one thread running at active priority and others are all at inactive +level. This will create undesirable effects with multi-processor systems, +which could select any one of the inactive level threads and this +could cause priority inversions. +

    +How to write a new DSRT scheduler using Kokyu

    +One can use one of the schedulers as a starting point. The variation points +are +
      +
    1. +The scheduler parameters that need to be propagated along with the service +context.
    2. + +
    3. +The QoS comparison function, that determines which thread is more eligible.
    4. +
    +To aid (1), we have created a Svc_Ctxt_DSRT_QoS idl interface (see ./Kokyu_qos.pidl). +This interface currently has the necessary things to be propagated for +FP, MIF and MUF schedulers. This can be altered if necessary to accomodate +new sched params. The idea here is to let the IDL compiler generate the +marshalling code (including Any operators) so that these parameters can +be shipped across in the service context in an encapsulated CDR. +

    To create customized QoS comparator functions, we used the idea of C++ +traits to let the user define customized comparator functions. For example, +the MIF scheduler uses the following traits class. +

      struct MIF_Scheduler_Traits +
      { +
        typedef RTScheduling::Current::IdType Guid_t; +

        struct _QoSDescriptor_t +
        { +
          typedef long Importance_t; +
          Importance_t importance_; +
        }; +

        typedef _QoSDescriptor_t QoSDescriptor_t; +

        typedef Kokyu::MIF_Comparator<QoSDescriptor_t> +QoSComparator_t; +

        class _Guid_Hash +
        { +
        public: +
          u_long operator () (const Guid_t& +id) +
          { +
            return ACE::hash_pjw +((const char *) id.get_buffer (), +
                                  +id.length ()); +
          } +
        }; +

        typedef _Guid_Hash Guid_Hash; +
      }; +

    The idea of traits makes the Kokyu dispatcher more flexible in terms +of creating new schedulers. For example, the Kokyu classes do not care +about what concrete type Guid is. It could be an OctetSequence for some +applications, whereas it could be an int for some others. The exact type +is defined by the application (in this case, the MIF scheduler) using the +traits class. In the above traits class the Guid's type is defined to be +an octet sequence (indirectly). The Kokyu dispatcher expects the following +typedef's to +
    be present in the traits class: +

    Guid_t - Type of GUID. +
    QoSDescriptor_t - aggregate for scheduler parameters +
    QoSComparator_t - used by the scheduler queue to determine +most eligible item +
    Guid_Hash - used by the internal hash map in the scheduler +to hash the guid. +

    It is also expected that the following operator be defined for comparing +QoS parameters. This comparator function will be used by the scheduler +queue to determine the most eligible item in the queue. +

    QoSComparator_t::operator ()(const QoSDescriptor_t& qos1, +
                +const QoSDescriptor_t& qos2) +

    +Kokyu DSRTCORBA vs Kokyu RTEC

    +Currently we have separate interfaces for DSRTCORBA and RTEC dispatching +mechanisms. Once we get more use cases and experience, there is a possibility +of these getting merged in the future. The RTEC related dispatching interface +is in Kokyu::Dispatcher (Kokyu.h) and DSRTCORBA related dispatching +interface is in Kokyu::DSRT_Dispatcher (Kokyu_dsrt.h) +

    +Current status

    +Kokyu dispatching framework is available as a separate module under ACE_wrappers/Kokyu +as part of the ACE/TAO +distribution. Note that this module is not dependent on TAO, though +it is built on top of ACE. The TAO Event Channel uses the Strategy and +Service Configurator patterns to use configurable dispatching modules. +A Kokyu based EC dispatching module is available in the TAO/orbsvcs/orbsvcs/RTKokyuEvent +module. This module acts as an adapter between the Kokyu dispatcher and +the RTEC. +

    Kokyu scheduling framework is available under the TAO source tree (TAO/orbsvcs/orbsvcs/Sched). +

    An example using the RTEC Kokyu dispatching module is available under +TAO/orbsvcs/examples/RtEC/Kokyu. +

    +Future work

    + +
      +
    1. +Currently there is no support for timers in the Kokyu dispatching module. +We plan to do this in the near future.
    2. + +
    3. +It looks like there is a general structure to the different schedulers. +May be this can be abstracted using templates or some similar mechanism.
    4. + +
    5. +Thread sched policy and sched scope are currently being passed explicitly +from the application to the scheduler. This can be changed later to get +this information from the ORB. This requires the usage of RTORB and the +actual values can be set using svc.conf parameters for RT_ORB_Loader.
    6. + +
        +
    7. +See whether the approaches could be extended to multiprocessor systems.
    8. +
    + +

    +Papers on Kokyu

    + +
      +
    1. +Christopher D. Gill, Dissertation:Flexible +Scheduling in Middleware for Distributed Rate-Based Real-Time Applications
    2. + +
    3. +Christopher D. Gill, David L. Levine, and Douglas C. Schmidt The +Design and Performance of a Real-Time CORBA Scheduling Service, Real-Time +Systems: the International Journal of Time-Critical Computing Systems, +special issue on Real-Time Middleware, guest editor Wei Zhao, March 2001, +Vol. 20 No. 2
    4. + +
    5. +Christopher D. Gill, Douglas C. Schmidt, and Ron Cytron, Multi-Paradigm +Scheduling for Distributed Real-Time Embedded Computing, IEEE Proceedings +Special Issue on Modeling and Design of Embedded Systems, Volume 91, Number +1, January 2003.
    6. +
    + + + diff --git a/ACE/Kokyu/docs/KokyuEC.jpg b/ACE/Kokyu/docs/KokyuEC.jpg new file mode 100644 index 00000000000..b0c8103d2aa Binary files /dev/null and b/ACE/Kokyu/docs/KokyuEC.jpg differ diff --git a/ACE/Kokyu/docs/kokyu1.jpg b/ACE/Kokyu/docs/kokyu1.jpg new file mode 100644 index 00000000000..268c6ae3302 Binary files /dev/null and b/ACE/Kokyu/docs/kokyu1.jpg differ diff --git a/ACE/Kokyu/docs/kokyu2.jpg b/ACE/Kokyu/docs/kokyu2.jpg new file mode 100644 index 00000000000..f5e2386774e Binary files /dev/null and b/ACE/Kokyu/docs/kokyu2.jpg differ diff --git a/ACE/Kokyu/kokyu_config.h b/ACE/Kokyu/kokyu_config.h new file mode 100644 index 00000000000..4eab747376e --- /dev/null +++ b/ACE/Kokyu/kokyu_config.h @@ -0,0 +1,10 @@ +/* $Id$ */ +#ifndef KOKYU_CONFIG_H +#define KOKYU_CONFIG_H + +#define CONFIG_DSTREAM_DSRT_DISPATCH +#define CONFIG_DSTREAM_DSRT_CV_DISPATCH +#define CONFIG_DSTREAM_DSRT_DIRECT_DISPATCH +#define CONFIG_DSTREAM_DSRT_DISPATCH_IMPL + +#endif /* KOKYU_CONFIG_H */ diff --git a/ACE/Kokyu/kokyu_export.h b/ACE/Kokyu/kokyu_export.h new file mode 100644 index 00000000000..8b15053da15 --- /dev/null +++ b/ACE/Kokyu/kokyu_export.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// $Id$ +// Definition for Win32 Export directives. +// This file is generated automatically by generate_export_file.pl Kokyu +// ------------------------------ +#ifndef KOKYU_EXPORT_H +#define KOKYU_EXPORT_H + +#include "ace/config-all.h" + +#if defined (ACE_AS_STATIC_LIBS) +# if !defined (KOKYU_HAS_DLL) +# define KOKYU_HAS_DLL 0 +# endif /* ! KOKYU_HAS_DLL */ +#else +# if !defined (KOKYU_HAS_DLL) +# define KOKYU_HAS_DLL 1 +# endif /* ! KOKYU_HAS_DLL */ +#endif + +#if defined (KOKYU_HAS_DLL) && (KOKYU_HAS_DLL == 1) +# if defined (KOKYU_BUILD_DLL) +# define Kokyu_Export ACE_Proper_Export_Flag +# define KOKYU_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define KOKYU_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else /* KOKYU_BUILD_DLL */ +# define Kokyu_Export ACE_Proper_Import_Flag +# define KOKYU_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define KOKYU_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* KOKYU_BUILD_DLL */ +#else /* KOKYU_HAS_DLL == 1 */ +# define Kokyu_Export +# define KOKYU_SINGLETON_DECLARATION(T) +# define KOKYU_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* KOKYU_HAS_DLL == 1 */ + +// Set KOKYU_NTRACE = 0 to turn on library specific tracing even if +// tracing is turned off for ACE. +#if !defined (KOKYU_NTRACE) +# if (ACE_NTRACE == 1) +# define KOKYU_NTRACE 1 +# else /* (ACE_NTRACE == 1) */ +# define KOKYU_NTRACE 0 +# endif /* (ACE_NTRACE == 1) */ +#endif /* !KOKYU_NTRACE */ + +#if (KOKYU_NTRACE == 1) +# define KOKYU_TRACE(X) +#else /* (KOKYU_NTRACE == 1) */ +# define KOKYU_TRACE(X) ACE_TRACE_IMPL(X) +#endif /* (KOKYU_NTRACE == 1) */ + +#endif /* KOKYU_EXPORT_H */ + +// End of auto generated file. diff --git a/ACE/Kokyu/tests/DSRT_MIF/DSRT_MIF.mpc b/ACE/Kokyu/tests/DSRT_MIF/DSRT_MIF.mpc new file mode 100644 index 00000000000..62da58ed055 --- /dev/null +++ b/ACE/Kokyu/tests/DSRT_MIF/DSRT_MIF.mpc @@ -0,0 +1,7 @@ +// -*- MPC -*- +// $Id$ + +project: kokyu { + avoids += ace_for_tao + exename = MIF +} diff --git a/ACE/Kokyu/tests/DSRT_MIF/MIF.cpp b/ACE/Kokyu/tests/DSRT_MIF/MIF.cpp new file mode 100644 index 00000000000..4c943533ad6 --- /dev/null +++ b/ACE/Kokyu/tests/DSRT_MIF/MIF.cpp @@ -0,0 +1,185 @@ +// $Id$ + +#include "ace/ACE.h" +#include "ace/Auto_Ptr.h" +#include "ace/Task.h" +#include "ace/Sched_Params.h" +#include "ace/Atomic_Op.h" +#include "ace/High_Res_Timer.h" +#include "ace/Barrier.h" +#include "ace/Lock_Adapter_T.h" +#include "ace/Countdown_Time.h" + +#include "Kokyu_dsrt.h" + +ACE_Atomic_Op guid=0; + +struct mif_scheduler_traits +{ + typedef int Guid_t; + + struct QoSDescriptor_t + { + typedef long Importance_t; + + long importance_; + }; + + /* + static Time_t now() + { + ACE_Time_Value now = ACE_OS::gettimeofday (); + return now.sec () * 10000000 + now.usec () * 10; + } + */ + + typedef Kokyu::MIF_Comparator QoSComparator_t; + + struct Guid_Hash + { + u_long operator () (const Guid_t& guid) + { + return guid; + } + }; +}; + + +class MyTask : public ACE_Task_Base +{ +public: + + MyTask (ACE_Barrier& bar, + Kokyu::DSRT_Dispatcher* dispatcher, + mif_scheduler_traits::QoSDescriptor_t& qos, + int exec_duration) + :barrier_ (bar), + dispatcher_ (dispatcher), + qos_ (qos), + guid_ (++guid), + exec_duration_ (exec_duration) + {} + + int svc (void); + + private: + ACE_Barrier& barrier_; + Kokyu::DSRT_Dispatcher* dispatcher_; + mif_scheduler_traits::QoSDescriptor_t qos_; + mif_scheduler_traits::Guid_t guid_; + int exec_duration_; +}; + +int MyTask::svc (void) +{ + ACE_hthread_t thr_handle; + ACE_Thread::self (thr_handle); + + ACE_DEBUG ((LM_DEBUG, "(%t|%T): task activated\n")); + ACE_ASSERT (dispatcher_ != 0); + + (void) dispatcher_->schedule (guid_, qos_); + + barrier_.wait (); + + long prime_number = 9619899; + + ACE_High_Res_Timer timer; + ACE_Time_Value elapsed_time; + ACE_Time_Value seconds_tracker(0,0); + + ACE_Time_Value one_second (1,0); + ACE_Time_Value compute_count_down_time (exec_duration_, 0); + ACE_Countdown_Time compute_count_down (&compute_count_down_time); + + timer.start (); + while (compute_count_down_time > ACE_Time_Value::zero) + { + ACE::is_prime (prime_number, + 2, + prime_number / 2); + + compute_count_down.update (); + timer.stop (); + timer.elapsed_time (elapsed_time); + seconds_tracker += elapsed_time; + if (seconds_tracker >= one_second) + { + seconds_tracker.set (0,0); + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("(%t) Currently running guid=%d") + ACE_TEXT (", qos_.importance=%d \n"), + guid_, qos_.importance_)); + } + timer.reset (); + timer.start (); + } + + dispatcher_->cancel_schedule (this->guid_); + return 0; +} + +int ACE_TMAIN (int,ACE_TCHAR**) +{ + Kokyu::DSRT_ConfigInfo config_info; + + // config_info.scheduler_type_ = Kokyu::SCHED_MIF; + config_info.impl_type_ = Kokyu::DSRT_OS_BASED; + + ACE_Barrier bar (3); + + ACE_DEBUG ((LM_DEBUG, "before create_dispatcher\n" )); + + config_info.sched_strategy_ = Kokyu::DSRT_MIF; + + Kokyu::DSRT_Dispatcher_Factory::DSRT_Dispatcher_Auto_Ptr + disp (Kokyu::DSRT_Dispatcher_Factory:: + create_DSRT_dispatcher (config_info)); + + ACE_DEBUG ((LM_DEBUG, "after create_dispatcher\n" )); + + ACE_ASSERT (disp.get () != 0); + + mif_scheduler_traits::QoSDescriptor_t qos1, qos2, qos3; + + qos1.importance_ = 1; + qos2.importance_ = 2; + qos3.importance_ = 3; + + MyTask mytask1 (bar, disp.get (), qos1, 15); + MyTask mytask2 (bar, disp.get (), qos2, 6); + MyTask mytask3 (bar, disp.get (), qos3, 4); + + long flags = THR_BOUND | THR_SCHED_FIFO; + + if (mytask1.activate (flags) == -1) + { + flags = THR_BOUND; + if (mytask1.activate (flags) == -1) + ACE_ERROR ((LM_ERROR, + "EC (%P|%t) cannot activate task\n")); + } + + if (mytask2.activate (flags) == -1) + { + flags = THR_BOUND; + if (mytask2.activate (flags) == -1) + ACE_ERROR ((LM_ERROR, + "EC (%P|%t) cannot activate task\n")); + } + + if (mytask3.activate (flags) == -1) + { + flags = THR_BOUND; + if (mytask3.activate (flags) == -1) + ACE_ERROR ((LM_ERROR, + "EC (%P|%t) cannot activate task\n")); + } + + disp->shutdown (); + + ACE_DEBUG ((LM_DEBUG, "main thread exiting\n")); + + return 0; +} + diff --git a/ACE/Kokyu/tests/DSRT_MIF/Makefile.am b/ACE/Kokyu/tests/DSRT_MIF/Makefile.am new file mode 100644 index 00000000000..4ed16f988cd --- /dev/null +++ b/ACE/Kokyu/tests/DSRT_MIF/Makefile.am @@ -0,0 +1,41 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + + +## Makefile.DSRT_MIF.am + +if !BUILD_ACE_FOR_TAO + +noinst_PROGRAMS = MIF + +MIF_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/Kokyu + +MIF_SOURCES = \ + MIF.cpp + +MIF_LDADD = \ + $(top_builddir)/Kokyu/libKokyu.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +endif !BUILD_ACE_FOR_TAO + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/Kokyu/tests/DSRT_MIF/svc.conf b/ACE/Kokyu/tests/DSRT_MIF/svc.conf new file mode 100644 index 00000000000..247c85945d9 --- /dev/null +++ b/ACE/Kokyu/tests/DSRT_MIF/svc.conf @@ -0,0 +1,4 @@ +# +dynamic DSRT_Scheduler_Impl Service_Object * +Kokyu:_make_MIF_Scheduler_Impl() +"-sched_scope thread -sched_policy fifo -min_importance 0 -max_importance 10" \ No newline at end of file diff --git a/ACE/Kokyu/tests/DSRT_MIF/svc.conf.xml b/ACE/Kokyu/tests/DSRT_MIF/svc.conf.xml new file mode 100644 index 00000000000..aef4b3ea0a9 --- /dev/null +++ b/ACE/Kokyu/tests/DSRT_MIF/svc.conf.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/ACE/Kokyu/tests/EDF/EDF.mpc b/ACE/Kokyu/tests/EDF/EDF.mpc new file mode 100644 index 00000000000..d0c7749e28e --- /dev/null +++ b/ACE/Kokyu/tests/EDF/EDF.mpc @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project: kokyu { + exename = EDF +} diff --git a/ACE/Kokyu/tests/EDF/Makefile.am b/ACE/Kokyu/tests/EDF/Makefile.am new file mode 100644 index 00000000000..9aa8fcdf71d --- /dev/null +++ b/ACE/Kokyu/tests/EDF/Makefile.am @@ -0,0 +1,36 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + +## Makefile.EDF.am + +noinst_PROGRAMS = EDF + +EDF_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/Kokyu + +EDF_SOURCES = \ + test.cpp + +EDF_LDADD = \ + $(top_builddir)/Kokyu/libKokyu.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/Kokyu/tests/EDF/README b/ACE/Kokyu/tests/EDF/README new file mode 100644 index 00000000000..4f209605e14 --- /dev/null +++ b/ACE/Kokyu/tests/EDF/README @@ -0,0 +1,24 @@ +This example is a very simple example, showing how to use the Kokyu +dispatcher to dispatch command objects in a EDF manner. The test +configures the Kokyu dispatcher with a single EDF lane. Typically this +would be done by an EDF scheduler which assigns priorities to tasks +based on the deadlines for tasks. To ensure that the command objects +enqueued in the dispatcher are dispatched in the correct order, we +enqueue the command objects and *then* activate the dispatcher. Only +when the dispatcher is activated, the thread watching each dispatch +queue starts running. + +To run this example, + +./test -p + +The following is the expected output + +Deadline of command1 is 1065966081 +Deadline of command2 is 1065966131 +Deadline of command3 is 1065966031 +command 3 executed +command 1 executed +command 2 executed + +Note that the deadlines are absolute deadlines. diff --git a/ACE/Kokyu/tests/EDF/test.cpp b/ACE/Kokyu/tests/EDF/test.cpp new file mode 100644 index 00000000000..0c6939ee613 --- /dev/null +++ b/ACE/Kokyu/tests/EDF/test.cpp @@ -0,0 +1,162 @@ +// $Id$ + +#include "ace/Auto_Ptr.h" + +#include "Kokyu.h" +#include "ace/Task.h" +#include "ace/Sched_Params.h" +#include "ace/SString.h" +#include "ace/Get_Opt.h" +#include "ace/OS_NS_strings.h" +#include "ace/OS_NS_sys_time.h" + +ACE_CString sched_policy_str = "fifo"; + +int parse_args (int argc, ACE_TCHAR *argv[]); + +class MyCommand : public Kokyu::Dispatch_Command +{ +public: + MyCommand(int i) + :Kokyu::Dispatch_Command(1),id_(i) + { + } + int execute(); + +private: + int id_; +}; + +int MyCommand::execute() +{ + ACE_hthread_t thr_handle; + ACE_Thread::self (thr_handle); + int prio; + + if (ACE_Thread::getprio (thr_handle, prio) == -1) + { + if (errno == ENOTSUP) + { + ACE_DEBUG((LM_DEBUG, + ACE_TEXT ("getprior not supported on this platform\n") + )); + return 0; + } + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("getprio failed")), + -1); + } + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("(%t|prio=%d) | command %d executed\n"), + prio, id_)); + return 0; +} + +int ACE_TMAIN (int argc, ACE_TCHAR** argv) +{ + Kokyu::ConfigInfoSet config_info(3); + + int sched_policy=ACE_SCHED_FIFO; + + Kokyu::Dispatcher_Attributes attrs; + + if (parse_args (argc, argv) == -1) + return 0; + + if (ACE_OS::strcasecmp(sched_policy_str.c_str(), "fifo") == 0) + { + sched_policy = ACE_SCHED_FIFO; + } + else if (ACE_OS::strcasecmp(sched_policy_str.c_str(), "other") == 0) + { + sched_policy = ACE_SCHED_OTHER; + } + else if (ACE_OS::strcasecmp(sched_policy_str.c_str(), "rr") == 0) + { + sched_policy = ACE_SCHED_RR; + } + + attrs.sched_policy (sched_policy); + + Kokyu::Priority_t min_prio = + ACE_Sched_Params::priority_min (sched_policy); + + config_info[0].preemption_priority_ = 1; + config_info[0].thread_priority_ = min_prio; + config_info[0].dispatching_type_ = Kokyu::DEADLINE_DISPATCHING; + + ACE_DEBUG ((LM_DEBUG, "before create_dispatcher\n" )); + + attrs.config_info_set_ = config_info; + auto_ptr + disp (Kokyu::Dispatcher_Factory::create_dispatcher (attrs)); + + ACE_ASSERT (disp.get() != 0); + + MyCommand cmd1(1), cmd2(2), cmd3(3); + + Kokyu::QoSDescriptor qos1, qos2, qos3; + + // Get the current time. + ACE_Time_Value current_time = ACE_OS::gettimeofday (); + + ACE_Time_Value deadline1, deadline2, deadline3; + + deadline1 = current_time + ACE_Time_Value(150,0); + deadline2 = current_time + ACE_Time_Value(200,0); + deadline3 = current_time + ACE_Time_Value(100,0); + + qos1.preemption_priority_ = 1; + qos1.deadline_ = deadline1; + qos2.preemption_priority_ = 1; + qos2.deadline_ = deadline2; + qos3.preemption_priority_ = 1; + qos3.deadline_ = deadline3; + + ACE_DEBUG ((LM_DEBUG, "Deadline of command1 is %d\n", + qos1.deadline_.sec ())); + disp->dispatch (&cmd1, qos1); + + ACE_DEBUG ((LM_DEBUG, "Deadline of command2 is %d\n", + qos2.deadline_.sec ())); + disp->dispatch (&cmd2, qos2); + + ACE_DEBUG ((LM_DEBUG, "Deadline of command3 is %d\n", + qos3.deadline_.sec ())); + disp->dispatch (&cmd3, qos3); + + disp->activate (); + + disp->shutdown (); + + ACE_DEBUG ((LM_DEBUG, "after shutdown\n")); + + return 0; +} + +int parse_args (int argc, ACE_TCHAR *argv[]) +{ + ACE_Get_Opt get_opts (argc, argv, ACE_TEXT("p:")); + int c; + + while ((c = get_opts ()) != -1) + switch (c) + { + case 'p': + sched_policy_str = ACE_TEXT_ALWAYS_CHAR(get_opts.opt_arg ()); + break; + + case '?': + default: + ACE_ERROR_RETURN ((LM_ERROR, + "usage: %s %s" + "\n", + argv [0], + "-p "), + -1); + } + // Indicates sucessful parsing of the command line + return 0; +} diff --git a/ACE/Kokyu/tests/FIFO/FIFO.mpc b/ACE/Kokyu/tests/FIFO/FIFO.mpc new file mode 100644 index 00000000000..b6afad4c977 --- /dev/null +++ b/ACE/Kokyu/tests/FIFO/FIFO.mpc @@ -0,0 +1,6 @@ +// -*- MPC -*- +// $Id$ + +project: kokyu { + exename = FIFO +} diff --git a/ACE/Kokyu/tests/FIFO/Makefile.am b/ACE/Kokyu/tests/FIFO/Makefile.am new file mode 100644 index 00000000000..05b7dbe9e38 --- /dev/null +++ b/ACE/Kokyu/tests/FIFO/Makefile.am @@ -0,0 +1,36 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + +## Makefile.FIFO.am + +noinst_PROGRAMS = FIFO + +FIFO_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(ACE_ROOT)/Kokyu + +FIFO_SOURCES = \ + test.cpp + +FIFO_LDADD = \ + $(top_builddir)/Kokyu/libKokyu.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/Kokyu/tests/FIFO/README b/ACE/Kokyu/tests/FIFO/README new file mode 100644 index 00000000000..5700e4a5038 --- /dev/null +++ b/ACE/Kokyu/tests/FIFO/README @@ -0,0 +1,24 @@ +This example is a very simple example, showing how to use the Kokyu +dispatcher to dispatch command objects in a FIFO manner. The test +configures the Kokyu dispatcher with 3 FIFO lanes, each having a +different priority. Typically this would be done by an RMS scheduler +which assigns priorities to tasks based on the rate of tasks. To +ensure that the command objects enqueued in the dispatcher are +dispatched in the correct order, we enqueue the command objects and +*then* activate the dispatcher. Only when the dispatcher is activated, +the thread watching each dispatch queue starts running. + +To run this example, + +./test -p + +The following is the expected output + +Priority of command1 is 2 +Priority of command2 is 3 +Priority of command3 is 1 +command 3 executed +command 1 executed +command 2 executed + +Note that a lower number means a higher priority for the task. diff --git a/ACE/Kokyu/tests/FIFO/test.cpp b/ACE/Kokyu/tests/FIFO/test.cpp new file mode 100644 index 00000000000..deb25823a3b --- /dev/null +++ b/ACE/Kokyu/tests/FIFO/test.cpp @@ -0,0 +1,166 @@ +// $Id$ + +#include "ace/Auto_Ptr.h" + +#include "Kokyu.h" +#include "ace/Task.h" +#include "ace/SString.h" +#include "ace/Get_Opt.h" +#include "ace/OS_NS_strings.h" + +ACE_CString sched_policy_str = "fifo"; + +int parse_args (int argc, ACE_TCHAR *argv[]); + +class MyCommand : public Kokyu::Dispatch_Command +{ +public: + MyCommand(int i) + :Kokyu::Dispatch_Command(1),id_(i) + { + } + int execute (); + +private: + int id_; +}; + +int MyCommand::execute() +{ + ACE_hthread_t thr_handle; + ACE_Thread::self (thr_handle); + int prio; + + if (ACE_Thread::getprio (thr_handle, prio) == -1) + { + if (errno == ENOTSUP) + { + ACE_DEBUG((LM_DEBUG, + ACE_TEXT ("getprior not supported on this platform\n") + )); + return 0; + } + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("getprio failed")), + -1); + } + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("(%t|prio=%d) | command %d executed\n"), + prio, id_)); + return 0; +} + +int ACE_TMAIN (int argc, ACE_TCHAR** argv) +{ + Kokyu::ConfigInfoSet config_info(3); + + int hi_prio, me_prio, lo_prio; + int sched_policy=ACE_SCHED_FIFO; + + Kokyu::Dispatcher_Attributes attrs; + + if (parse_args (argc, argv) == -1) + return 0; + + if (ACE_OS::strcasecmp(sched_policy_str.c_str(), "fifo") == 0) + { + sched_policy = ACE_SCHED_FIFO; + } + else if (ACE_OS::strcasecmp(sched_policy_str.c_str(), "other") == 0) + { + sched_policy = ACE_SCHED_OTHER; + } + else if (ACE_OS::strcasecmp(sched_policy_str.c_str(), "rr") == 0) + { + sched_policy = ACE_SCHED_RR; + } + + attrs.sched_policy (sched_policy); + + hi_prio = ACE_Sched_Params::priority_max (sched_policy); + me_prio = ACE_Sched_Params::previous_priority (sched_policy, + hi_prio); + lo_prio = ACE_Sched_Params::previous_priority (sched_policy, + me_prio); + + config_info[0].preemption_priority_ = 1; + config_info[0].thread_priority_ = hi_prio ; + config_info[0].dispatching_type_ = Kokyu::FIFO_DISPATCHING; + + config_info[1].preemption_priority_ = 2; + config_info[1].thread_priority_ = me_prio; + config_info[1].dispatching_type_ = Kokyu::FIFO_DISPATCHING; + + config_info[2].preemption_priority_ = 3; + config_info[2].thread_priority_ = lo_prio; + config_info[2].dispatching_type_ = Kokyu::FIFO_DISPATCHING; + + attrs.config_info_set_ = config_info; + + ACE_DEBUG ((LM_DEBUG, "before create_dispatcher\n" )); + auto_ptr + disp (Kokyu::Dispatcher_Factory::create_dispatcher (attrs)); + + ACE_ASSERT (disp.get() != 0); + + MyCommand cmd1(1), cmd2(2), cmd3(3); + + Kokyu::QoSDescriptor qos1, qos2, qos3; + + qos1.preemption_priority_ = 2; + ACE_DEBUG ((LM_DEBUG, "Priority of command1 is %d\n", + qos1.preemption_priority_)); + + qos2.preemption_priority_ = 3; + ACE_DEBUG ((LM_DEBUG, "Priority of command2 is %d\n", + qos2.preemption_priority_)); + + qos3.preemption_priority_ = 1; + ACE_DEBUG ((LM_DEBUG, "Priority of command3 is %d\n", + qos3.preemption_priority_)); + + if (disp->dispatch (&cmd1, qos1) == -1 || + disp->dispatch (&cmd2, qos2) == -1 || + disp->dispatch (&cmd3, qos3) == -1) + ACE_ERROR_RETURN ((LM_ERROR, "Error in dispatching command object\n"), -1); + + if (disp->activate () == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("Error activating dispatcher. ") + ACE_TEXT ("You might not have superuser privileges ") + ACE_TEXT ("to run FIFO class. Try \"-p other\"\n")), -1); + } + + disp->shutdown (); + + ACE_DEBUG ((LM_DEBUG, "after shutdown\n")); + return 0; +} + +int parse_args (int argc, ACE_TCHAR *argv[]) +{ + ACE_Get_Opt get_opts (argc, argv, ACE_TEXT("p:")); + int c; + + while ((c = get_opts ()) != -1) + switch (c) + { + case 'p': + sched_policy_str = ACE_TEXT_ALWAYS_CHAR(get_opts.opt_arg ()); + break; + + case '?': + default: + ACE_ERROR_RETURN ((LM_ERROR, + "usage: %s %s" + "\n", + argv [0], + "-p "), + -1); + } + // Indicates sucessful parsing of the command line + return 0; +} diff --git a/ACE/Kokyu/tests/Makefile.am b/ACE/Kokyu/tests/Makefile.am new file mode 100644 index 00000000000..9745459d4e3 --- /dev/null +++ b/ACE/Kokyu/tests/Makefile.am @@ -0,0 +1,15 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +SUBDIRS = \ + DSRT_MIF \ + EDF \ + FIFO + diff --git a/ACE/Makefile.am b/ACE/Makefile.am new file mode 100644 index 00000000000..29fb2e2dbe8 --- /dev/null +++ b/ACE/Makefile.am @@ -0,0 +1,36 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## /acebuilds/ACE_wrappers-repository/bin/mwc.pl -include /acebuilds/MPC/config -include /acebuilds/MPC/templates -feature_file /acebuilds/ACE_wrappers-repository/local.features -noreldefs -type automake -exclude build,Kokyu + +SUBDIRS = \ + ace \ + @ACEXML@ \ + @ASNMP@ \ + apps \ + bin \ + netsvcs + +if BUILD_EXAMPLES +SUBDIRS += examples +endif + +if BUILD_TESTS +SUBDIRS += performance-tests +SUBDIRS += tests +endif + +SUBDIRS += \ + @protocols@ \ + websvcs \ + @KOKYU@ \ + @TAO@ + +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = -I m4 +AUTOMAKE_OPTIONS = foreign diff --git a/ACE/NEWS b/ACE/NEWS new file mode 100644 index 00000000000..25626c11b4f --- /dev/null +++ b/ACE/NEWS @@ -0,0 +1,1275 @@ +PLANNED MAJOR CHANGES "SOMETIME IN THE FUTURE" (i.e., exact beta not known) +=========================================================================== + +. (Remedy) Add VxWorks 6.x kernel mode with shared library support + +USER VISIBLE CHANGES BETWEEN ACE-5.6.3 and ACE-5.6.4 +==================================================== + +USER VISIBLE CHANGES BETWEEN ACE-5.6.2 and ACE-5.6.3 +==================================================== + +. Deprecated Visual Age 5 and older + +. Closed a rare race condition hole whereby ACE_Atomic_Op<> function + pointers would not be fully initialized prior to use. See bugzilla + 3185 for details. + +. Tweaks to support MacOS X Leopard (10.5 and 10.5.1) on Intel + +. Fixed compile problems with MinGW with GCC 4.2. Do note that we do see + much more test failures then when using GCC 3.4. + +. Changed to use synchronous exception handling with msvc 8/9 which is the + default. Asynchrous exception handling does catch access violations but + it leads to lower performance and other problems. See also bugzilla 3169 + +. Make ace_main extern C with VxWorks so that it doesn't get mangled + +. Fixed compile errors and warnings for VxWorks 6.6 + +. Added an MPC generator for the WindRiver Workbench 2.6 which is shipped + with VxWorks 6.4 + +. Added support for CodeGear C++ Builder 2007 with December 2007 update + installed + +. Added support for VxWorks 5.5.1 + +. Implemented the const reverse iterator for ACE_Hash_Map_Manager_Ex + +. Increased support for using ACE_Hash_Map_Manager_Ex with STL + functions based on latest standard C++ draft + +USER VISIBLE CHANGES BETWEEN ACE-5.6.1 and ACE-5.6.2 +==================================================== + +. ACE-ified the UUID class, which will change user applications slightly. + +. Added support for Sun Studio 12 + +. Added support for Intel C++ 10.1 + +. Fixed runtime problems with VxWorks 6.x in kernel mode, several improvements + have been made to ACE, but also some problems in the VxWorks kernel have + been found for which WindRiver has made patches. + +. Added support for VxWorks 6.5 kernel mode + +. Added support for MacOS 10.5 + +. Support for MacOS 10.4 is now deprecated. + +. Added support for OpenSuSE 10.3 + +. Added support for RedHat 5.1 + +. Added support for Microsoft Visual Studio 2008 + +. Added support for Fedora Core 8 + +. Added support for Ubuntu 7.10 + +. With Ubuntu 7.04 and 7.10 we can't use visibility, that results in + unresolved externals when building some tests. With lsb_release we + now detect Ubuntu 7.04 and 7.10 automatically and then we disable + visibility + +. Removed deprecated (un)subscribe methods from ACE_SOCK_Dgram_Mcast + +. Added an additional replace() method to ACE_OuptutCDR for replacing a + ACE_CDR::Short value. Also added write_long_placeholder() and + write_short_placeholder() to properly align the stream's write pointer, + write a placeholder value and return the placeholder's pointer. The pointer + can later be used in a call to replace() to replace the placeholder with a + different value. + +. Initial support for VxWorks 6.6 + +. Removed support for pthread draft 4, 6, & 7. This makes the ACE threading + code much cleaner + +. Improved autoconf support + +. Fixed TSS emulation problems + +. Changed ACE_thread_t and ACE_hthread_t to int for VxWorks kernel mode. All + thread creation methods do have an additional const char* argument to + specify the task name, this now also works with pthread support enabled + +. Use bool in much more interfaces where this is possible + +. Added support for Debian Etch + +. Fixed ACE CDR LongDouble support on VxWorks 6.x + +. Added Microsoft Visual Studio 2008 project files to the release packages + +. Fixed a few bugs in the ACE_Vector template + +USER VISIBLE CHANGES BETWEEN ACE-5.6 and ACE-5.6.1 +==================================================== + +. Added support for CodeGear RAD Studio 2007 + +. Added support for CodeGear C++ Builder 2007 Update 3 + +. Modified the definiton of ACE_DEFAULT_THREAD_KEYS on Windows so it + is based on the version of the OS as defined by Microsoft in this web + page: http://tinyurl.com/2jqcmd + This fixes bugzilla #2753 + +USER VISIBLE CHANGES BETWEEN ACE-5.5.10 and ACE-5.6 +==================================================== + +. OpenVMS 8.3 on IA64 port + +. Added autoconf support for Intel C++ 10.0 + +. Improved autoconf support on Linux, Solaris, NetBSD and HPUX + +. CodeGear C++ Builder 2007 Update 2 support + +. The netsvcs's client logging daemon has a new configuration option, + -llocal-ip[:local-port], which can be used to specify the local IP + address and port number for the client logging daemon's connection to + the server logging daemon. If the -l option is specified with an IP + address but not a port number, an unused port number is selected. + +. A new ACE+TAO port to LabVIEW RT 8.2 with Pharlap ETS. The host build + environment is Windows with Microsoft Visual Studio .NET 2003 (VC7.1). + Please see the ACE-INSTALL.html file for build instructions. + +USER VISIBLE CHANGES BETWEEN ACE-5.5.9 and ACE-5.5.10 +==================================================== + +. The ACE_utsname struct, used in the ACE_OS::uname() function when the + platform doesn't provide the standard utsname struct, was changed. It + defines a number of text fields and their types were changed from + ACE_TCHAR[] to char[] in order to be consistent with all other platforms. + This removes the need to write different code for platforms where + ACE_LACKS_UTSNAME_T is set and that have wide characters (most probably + Windows). Fixes Bugzilla #2665. + +. The ACE::daemonize() "close_all_handles" parameter was changed from + an "int" to a "bool" to better reflect how it is used. + +. VxWorks 6.5 support. Compilation of the core libraries has been validated + but no runtime testing has been performed. + +. CodeGear C++ Builder 2007 support. + +. The FaCE utility was moved from the ACE_wrappers/apps directory to + ACE_wrappers/contrib. It is used for testing ACE+TAO apps on WinCE. + See the ACE_wrappers/contrib/FaCE/README file for more information. + +. ACE_INET_Addr::set (u_short port, char *host_name, ...) now favors IPv6 + addresses when compiled with ACE_HAS_IPV6 defined and the supplied address + family is AF_UNSPEC. This means that if host_name has an IPv6 address in + DNS or /etc/hosts, that will be used over an IPv4 address. If no IPv6 + address exists for host_name, then its IPv4 address will be used. + +. Intel C++ 10.0 support + +. Support for the version of vc8 for 64-bit (AMD64) shipped with the Microsoft + Platform SDK. + +. Fixed ACE_Vector::swap() (bugzilla #2951). + +. Make use of the Atomic_Op optimizations on Intel EM64T processors. The + Atomic_Op is now several times faster on EM64T then with previous versions + of ACE + +USER VISIBLE CHANGES BETWEEN ACE-5.5.8 and ACE-5.5.9 +==================================================== + +. Use Intel C++ specific optimizations for Linux on IA64 + +. Improved support for ACE_OS::fgetc. Added support for ACE_OS::fputc, + ACE_OS::getc, ACE_OS::putc and ACE_OS::ungetc. + +. Added support for ACE_OS::log2(double) and improved support for + ACE::log2(u_long). + +. Shared library builds on AIX now produce a libxxx.so file instead of the + previous practice of producing libxxx.a(shr.o). + +. GCC 4.1.2 that comes with Fedora 7 seems to have a fix for the visibility + attribute we use for the singletons. F7 users will therefore need to + define the following in your config.h file. + ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS 1 + +. Fixed (rare) problem in TP_Reactor where incorrect event handler was + resumed. + +. Reduced footprint on some platforms, particularly those that use + g++ >= 3.3. + +USER VISIBLE CHANGES BETWEEN ACE-5.5.7 and ACE-5.5.8 +==================================================== + +. Extended ACE_Event constructor with optional LPSECURITY_ATTRIBUTES + argument + +. Added support for QT4 + +. Added support to integrate with the FOX Toolkit (www.fox-toolkit.org) + +. Added support for Microsoft Visual Studio Code Name "Orcas", which is + the msvc9 beta + +. Added ability to provide an optional priority when calling + ACE_Message_Queue_Ex::enqueue_prio(). There was previously no way + to specify a priority for queueing. + +. Removed support for Visual Age on Windows. + +. ACE will compile once again with ACE_LACKS_CDR_ALIGNMENT #defined. + +. ACE_Process_Manager::terminate() no longer removes the process from the + process descriptor table; the pid remains available in order to call + ACE_Process_Manager::wait(). + +USER VISIBLE CHANGES BETWEEN ACE-5.5.6 and ACE-5.5.7 +==================================================== + +. ACE 5.5 contained a set of pragmas which prevented Visual Studio 2005 (VC8) + from issuing warnings where C run-time functions are used but a more + secure alternative is available. For more information on the C run-time + issues and Microsoft's response, please see the following MSDN page: + http://msdn2.microsoft.com/en-us/library/8ef0s5kh(VS.80).aspx. + In this beta, the pragmas which prevented the warnings have been removed. + The ACE library has been reviewed and most of the use of "unsafe" functions + has been fixed where possible. Since not all of the warnings emanating from + ACE are situations that can or should be fixed, the ACE VC8 projects will + prevent the warnings while building the ACE kit and its contained examples, + tests, etc. The warnings are disabled by adding Microsoft-specified macros + to the compile line via MPC. If desired, the warnings can be re-enabled by + regenerating the project files with different MPC features. Note, however, + that while ACE without warnings caused by the new C run-time functions, your + application builds may trigger these warnings either by use of the "unsafe" + C run-time functions or via use of an inlined ACE_OS method which uses it. + If the warning is caused by an ACE_OS method, there is a more safe alternate + available, probably located by appending _r to the method name (e.g., + instead of using ACE_OS::ctime(), use ACE_OS::ctime_r()). + There are other cases where the compiler may have issued warnings and ACE + prevented this via a #pragma. These #pragmas have been removed as well. + This may cause your application builds to trigger more warnings from VC8 + than past ACE versions. You should review your code and either correct + the code or disable the warnings locally, as appropriate. + +. The "release" argument to a number of ACE_String_Base<> methods was changed + from int to bool to more accurately reflect its purpose. The following + methods were changed: + + ACE_String_Base (const CHAR *s, + ACE_Allocator *the_allocator = 0, + int release = 1); + to + ACE_String_Base (const CHAR *s, + ACE_Allocator *the_allocator = 0, + bool release = true); + + ACE_String_Base (const CHAR *s, + size_type len, + ACE_Allocator *the_allocator = 0, + int release = 1); + to + ACE_String_Base (const CHAR *s, + size_type len, + ACE_Allocator *the_allocator = 0, + bool release = true); + + void set (const CHAR * s, int release = 1); + to + void set (const CHAR * s, bool release = true); + + void set (const CHAR * s, size_type len, int release); + to + void set (const CHAR * s, size_type len, bool release); + + void clear (int release = 0); + to + void clear (bool release = false); + + Since ACE_String_Base forms the basis of the ACE_CString and ACE_TString + classes, this may ripple out to user application code. If you encounter + errors in this area while building your applications, replace the + int argument you are passing to the method now with either true or false. + +. Solutions for the eVC3/4 platform have been removed from this + release. Note that we package WinCE projects/workspaces for use + with VC8. + +. There were 3 new ACE_Log_Msg logging format specifiers added to make logging + easier for types that may change sizes across platforms. These all take one + argument, and the new formats are: + %b - format a ssize_t value + %B - format a size_t value + %: - format a time_t value + +. The ace/Time_Request_Reply.h and ace/Time_Request_Reply.cpp files were + moved from $ACE_ROOT/ace to $ACE_ROOT/netsvcs/lib. The time arguments in + the public API to ACE_Time_Request were changed from ACE_UINT32 to time_t + and the portions of the on-wire protocol that contains time was changed from + ACE_UINT32 to ACE_UINT64. Thus, code that uses the ACE_Time_Request class + to transfer time information will not interoperate properly with prior + ACE versions. This will affect uses of the netsvcs time clerk/server. + +. The portion of the ACE_Name_Request class that carries the on-wire seconds + portion of a timeout value was changed from ACE_UINT32 to ACE_UINT64. This + means that Name server/clients at ACE 5.5.7 and higher will not interoperate + properly with previous ACE versions' name servers/clients. + +. In the ACE_Log_Record (ACE_Log_Priority, long, long) constructor, the + second argument, long time_stamp, was changed to be of type time_t. This + aligns the type with the expected value, a time stamp such as that returned + from ACE_OS::time(). + +. Added support for VxWorks 6.x cross compilation using a Windows host + system + +. Added support for VxWorks 6.x using the diab compiler + +. The destructor of ACE_Event_Handler no longer calls + purge_pending_notifications(). Please see bugzilla #2845 for the full + rationale. + (http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=2845) + +USER VISIBLE CHANGES BETWEEN ACE-5.5.5 and ACE-5.5.6 +==================================================== + +. The ACE_TYPENAME macro has been added to those that are not + available when the ACE_LACKS_DEPRECATED_MACROS config option is set + (it is not set by default). You are encouraged to replace the use of + ACE_TYPENAME with the C++ typename keyword before the ACE_TYPENAME + macros is removed from ACE in the future. + +. A new script, rm_exception_macros.pl, has been added to help users + remove the use of the ACE exception macros from their own code. + +USER VISIBLE CHANGES BETWEEN ACE-5.5.4 and ACE-5.5.5 +==================================================== + +. The prebuild MPC keyword is now supported by the gnuace project type. + This fixes Bugzilla #2713. + +. Support for Windows earlier than NT 4 SP2 was removed. ACE will not build + for Windows 95, 98, Me, etc. out of the box any longer. + +. Reformat stringified IPv6 addresses to use [addr]:port when printing + addresses that contain ':' such as "::1". + +. Added method to ACE_INET_Addr to determine if address is IPv6 or + IPv4 multicast. + +. Fixed a bug in ACE_Async_Timer_Adapter_Timer_Queue_Adapter where the + gettimeofday function of the timer queue was ignored when setting the alarm. + +. Fixed a problem where, on Solaris 9 onwards, calling + ACE_OS::thr_create(THR_NEW_LWP) more than 2^15 (65535) times in a + process will fail. See changelog entry from "Wed Jan 3 22:31:05 UTC + 2007 Chris Cleeland " for more information. + +. Fixed a bug in ACE_QtReactor where the two select() calls in that function + might select on different handler sets. + +. ACE_SOCK_IO::recvv(iovec[], size_t, const ACE_Time_Value* = 0) and + ACE_SOCK_IO::sendv (const iovec[], size_t, const ACE_Time_Value* = 0) methods + were changed to specify the iovec count argument as int instead of size_t + since it gets reduced to int in the underlying OS calls (usually). + +. The following deprecated methods were removed: + + ssize_t ACE_SOCK_IO::recv (iovec iov[], + size_t n, + const ACE_Time_Value *timeout = 0) const; + + ssize_t ACE_SOCK_IO::recv (iovec *io_vec, + const ACE_Time_Value *timeout = 0) const; + + ssize_t ACE_SOCK_IO::send (const iovec iov[], + size_t n, + const ACE_Time_Value *timeout = 0) const; + + These were previously replaced with more specific recvv() and sendv() + methods. + +. The ACE_Service_Repository::find(const ACE_TCHAR name[], + const ACE_Service_Type **srp = 0, + int ignore_suspended = true) const + method's 'ignore_suspended' parameter was changed from int to bool to + reflect it's purpose as a yes/no indicator. + +. Added --enable-ace-reactor-notification-queue configure script + option to the autoconf build for enabling the Reactor's userspace + notification queue (defines ACE_HAS_REACTOR_NOTIFICATION_QUEUE in + config.h). + +. The int ACE_OutputCDR::consolidate(void) method was contributed by + Howard Finer at Sonus Networks. This method consolidates any continuation + blocks used by an ACE_OutputCDR object into a single block. It's useful for + situations which require access to a single memory area containing the + encoded stream, regardless of its length, when the length cannot be known + in advance. + +. There are a number of new methods defined on ACE_String_Base: + + size_t capacity (void) const: This method returns the number + of allocated CHAR units in the string object. + + void fast_resize (size_t): This method manage the sizing/reallocating + of the string, but doesn't do the memory setting of resize(). + + bool operator!= (const CHAR *) const + bool operator== (const CHAR *) const: These methods compare the + string with a nul-terminated CHAR* string. + + nonmember functions operator== and operator!= where also added + that compare const ACE_String_Base and const CHAR*; these make + it possible to switch ACE_String and CHAR* on either side of + the operator. + + Thank you to Kelly Hickel for these additions. + +. There are 2 new build options on the traditional make command: + dmalloc and mtrace. When specified at build time (e.g. make mtrace=1) + the PLATFORM_DMALLOC_CPPFLAGS and/or PLATFORM_MTRACE_CPPFLAGS values + are added to CPPFLAGS. For dmalloc, the PLATFORM_DMALLOC_LDFLAGS and + PLATFORM_DMALLOC_LIBS are added to LDFLAGS and LIBS, respectively. + Thank you to Howard Finer for supplying these additions. + +. Added the ability to specify additional purify and quantify command-line + options by setting PLATFORM_PURIFY_OPTIONS and PLATFORM_QUANTIFY_OPTIONS, + respectively. Thank you to Howard Finer for supplying these additions. + +. Added the ability to use trio (http://sourceforge.net/projects/ctrio/) + if platform lacks decent support for vsnprintf. trio support is + enabled by defining trio=1 in plaform_macros.GNU + +. Removed Irix 5, DGUX, and m88k support + +. Improved LynxOS 4.2 support + +. VxWorks 6.4 support + +. Added support for FC6. Because the GCC 4.1.1 version that gets shipped + has a fix for the visibility attribute we use for the singletons + you will need to define the following in your config.h file. This can't be + done automatically because SuSE 10.2 gets shipped with GCC 4.1.2 but + doesn't have the same fix + ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS 1 + +. RTEMS port + +USER VISIBLE CHANGES BETWEEN ACE-5.5.3 and ACE-5.5.4 +==================================================== + +. Added appropriate intptr_t and uintptr_t typedefs on platforms that + don't provide them (i.e. when ACE_LACKS_INTPTR_T is defined). + +. Added ability to explicitly choose support for 32 bit or 64 bit file + offsets on all platforms. Define the _FILE_OFFSET_BITS preprocessor + symbol to either 32 or 64 to choose the desired number of file + offset bits. This preprocessor symbol is supported natively by most + UNIX and UNIX-like operating systems, and supported by ACE on + Windows. Use the new ACE_OFF_T typedef to refer to file offsets + across UNIX and Windows portably. + +. 64-bit file offsets are now enabled by default in Win64 + configurations. + +. Improved support for 64 bit platforms (64 bit addresses, etc). + +. Added STL-style traits, iterators and a swap() method to the + ACE_Array_Base<> class template. + +. Added STL-style traits and iterator accessors to the + ACE_Hash_Map_Manager_Ex<> class template, as well as new find() and + unbind() methods that return (as an "out" parameter) and accept + iterators, respectively. + +. Greatly improved event handler dispatch performance in + select()-based reactors (e.g. ACE_Select_Reactor and ACE_TP_Reactor) + for large handle sets on Windows. Previous event handler search + were linear, and are now constant on average. + +. Addressed a number of Coverity errors (CHECKED_RETURN, DEADCODE, + LOCK, USE_AFTER_FREE, RESOURCE_LEAK, FORWARD_NULL). + +. Added STL-style "element_type" trait to all ACE auto_ptr class + templates. + +. Removed support for LynxOS 3.x. + +. Resolved Bugzilla #2701 to ensure fini() is called for all + Service Objects upon calling ACE_Service_Config::close() + +. VxWorks 5.5.2 has been tested, for ACE the support is exactly + the same as for VxWorks 5.5.1. No specific defines or flags have + to be used. + +USER VISIBLE CHANGES BETWEEN ACE-5.5.2 and ACE-5.5.3 +==================================================== + +. Added the base projects for executionmanager_stub and plan_generator. + +. Added the ACE_Hash_MultiMap_Manager class and its test file. + +. Changed the ACE_Synch_Options::operator[] method to return bool rather than + int. The value returned is a yes/no indication of whether or not the + specified option(s) are set in the object. + +. Changed the prototype(s) for ACE::debug () to return (and take) a + bool. This is consistent with the original intent for this + feature. If you have been using it like 'ACE::debug () > 0' or + 'ACE::debug (1)', you may have to rebuild ACE. The value of the + ACE_DEBUG environment variable can be used to specify the initial + value for ACE::debug(), at the process start up. + +. An assembler (within a C source file) based implementation for SPARC + of atomic operations suitable for use with the + ACE_Atomic_Op and + ACE_Atomic_Op specializations has + been added. Currently, it can only be enabled by setting the + atomic_ops_sparc make macro to 1 when using the GNUACE build system with + the Solaris SunCC compiler. It should be noted that this requires the + -xarch=v8plus (or higher) be added to the CFLAGS make macro or the + assembler code will not compile. + +. The ACE_Message_Queue_Ex_N class + is new, contributed by Guy Peleg . + ACE_Message_Queue_Ex_N is + similar to ACE_Message_Queue_Ex in that the object queued is a + template parameter. However, ACE_Message_Queue_Ex_N allows the + enqueueing and dequeueing of multiple chained objects at once. This + wasn't added to ACE_Message_Queue_Ex because the chained object + functionality requires the ACE_MESSAGE_TYPE class to have a + ACE_MESSAGE_TYPE *next (void) const method, analogous to + ACE_Message_Block::next(), to follow the chain and this would + probably break existing applications using ACE_Message_Queue_Ex. + The ACE_wrappers/tests/Message_Queue_Test_Ex.cpp test has an example of + how to use the new class. + +. The selector and comparator function pointer arguments to ACE_OS::scandir() + and ACE_Dirent_Selector are now marked as extern "C" to enforce their + use with a C RTL function. User code that defines functions which are + passed as the selector or comparator arguments which are not declared + extern "C" may generate compile warnings. To resolve this, add extern "C" + to the function's signature. See ACE_wrappers/tests/Dirent_Test.cpp for + an example. + +. To address a problem in the ACE string interface that prevented + substring or character searches in very large strings (e.g. greater + than the maximum value of an ssize_t type) from being correctly + reported to the caller, the find(), rfind() and strstr() methods now + return an unsigned integer (size_t) instead of a signed one + (ssize_t). Affected classes include: + + * ACE_CString + * ACE_WString + * ACE_TString + * ACE_NS_WString + + Unless you have been explicitly using -1 instead of npos when + comparing the return value of find(), rfind() and strstr(), and/or + assigning the return value to ssize_t you should not see any + difference. A new size_type typedef has been added to the ACE string + class to aid developers. This typedef is analogous to the standard + C++ string::size_type typedef. + + The ACE_String_Base<>::strstr() documentation and the default + rfind() argument erroneously referred to -1 instead of npos. Those + instances have been corrected. + + To summarize, a "no position" condition is denoted using the npos + constant, not -1. It can be referred directly by scoping it with the + appropriate string class (e.g. ACE_CString::npos, ACE_WString::npos, + etc). + +. Changing the shared library extension for hpux ia64 to ".so". On + HP-UX 11i Version 1.5 the naming scheme is lib*.sl for PA and + lib*.so on IPF. + +. The ACE_Refcounted_Auto_Ptr reset() and release() methods were changed + per Bugzilla #1925. They will both now detach from the underlying + ACE_Refcounted_Auto_Ptr_Rep object; reset() will create a new one for + the new pointer specified as its argument. This change may cause referenced + objects to be deleted in cases where previous ACE versions would not have. + +. The return type of "ACE_Refcounted_Auto_Ptr::null (void) const" changed + from int to bool. It's possible values, true and false, have not changed. + +. TTY_IO now accepts "none" as a valid parity value. Due to this change + 'parityenb' member is now deprecated and will be removed in the future. + The users of TTY_IO class should change their code to use only 'paritymode' + member for parity control and leave 'parityenb' unchanged (it is + enabled by default in class constructor). + +. Support for Intel C++ 9.1 on Windows and Linux + +. VxWorks 6.3 support + +. Fixed Bugzilla #2648 to make sure ACE_Service_Object::fini() + is called iff ACE_Service_Object::init() succeeded, as per + C++NPv2. + +. Added preliminary support for Mac OS X 10.4 on Intel CPU's. + +. Fixed Bugzilla #2602 to re-enable XML Service Configurator + file support. + +USER VISIBLE CHANGES BETWEEN ACE-5.5.1 and ACE-5.5.2 +==================================================== + +. Added support for: + - VxWorks 6.2 for the rtp model using pthread support + - OpenVMS 8.2 for Alpha + +. Removed code and configurations that provided support for: + - Visual C++ 6.0 and 7.0 + - Chorus + - pSOS + - KAI C++ on all platforms + +. Explicit template instantiation support has been removed. This effectively + removes support for Sun Forte 6 and 7 which required explicit template + instantiation to build ACE reliably. + +. Added support for multiple independent Service Repositories through + configuration contexts called "Gestalt". Full backwards compatibility + is maintained through the existing ACE_Service_Config static methods, + while direct individual repository access is enabled through instances + of the new ACE_Service_Gestalt class. ACE_Service_Config has changed to + a specialization of ACE_Service_Gestalt and is only responsible for the + process-wide configuration. + +. To support dynamically-sized ACE_Log_Record messages, the netsvcs + logging components now use ACE CDR encoding and transfer mechanisms + inspired by the examples in Chapter 4 of the C++NPv1 book. + The client and server logging daemons in ACE 5.5.2 and forward will + not interoperate with those in previous ACE versions. + +. Added a wrapper for the sendfile API (ACE_OS::sendfile()). + +. Added support for netlink sockets on Linux. + +. Added a new method, ACE_Task::last_thread(). This method returns the thread + ID (ACE_thread_t) of the last thread to exit from the ACE_Task object. + Users checking to see if a thread is the last one out (for example, to know + when to perform cleanup operations) should compare the current thread ID to + the return value from last_thread(). This is a change from the previously + recommended practice (C++NPv2, page 189) of comparing the return value of + thr_count() with 0. + +. Changed the first argument to ACE_OS::strptime() to be 'const' which + matches its usual usage in POSIX strptime(). This change allows users to + pass const strings in - a common use case. + +. Made part of the file support in ACE 64bit but we have some places where + 32bit types are used, this could lead to some conversion warnings which + will be addressed in the near future, but getting everything 64bit + compliant is a lot of work. + +USER VISIBLE CHANGES BETWEEN ACE-5.5 and ACE-5.5.1 +==================================================== + +. Added support for the --enable-symbol-visibility configure option + to the autoconf build infrastructure instead of solely relying on + feature tests to enable/disable symbol visibility support. This + avoids build problems with icc, etc. + +. Added support for the --enable-fl-reactor configure option to the + autoconf build infrastructure to build the ACE_FlReactor library. + +. Added support for the --enable-qt-reactor configure option to the + autoconf build infrastructure to build the ACE_QtReactor library. + +. Added support for the --enable-xt-reactor configure option to the + autoconf build infrastructure to build the ACE_XtReactor library. + +. Fixed a bug that would cause timer IDs from ACE_Timer_Heap to be + improperly duplicated under certain conditions (Bugzilla #2447). + +. Fixed ACE_SSL_Context::private_key(), context(), and dh_params() methods + to allow retrying a file load after a failed call. + +. Fixed ACE_SSL_Asynch_Stream so it can be instantiated; also moved the + declarations for ACE_SSL_Asynch_Read_Stream_Result, + ACE_SSL_Asynch_Write_Stream_Result, and ACE_SSL_Asynch_Result classes + to the ace/SSL/SSL_Asynch_Stream.h file so applications can see them. + +USER VISIBLE CHANGES BETWEEN ACE-5.4.10 and ACE-5.5 +==================================================== + +. Added a platform macros option "templates=manual", currently only + applies to AIX 5.3 with XL 7 compiler. It allows the user to tell the + compiler to set -qnotempinc and -qnotemplateregistry and works well + in static builds. + +. ACE and its tests compile error free with GCC 4.1 pre release. + +. ACE_Recursive_Thread_Mutex::get_nesting_level() fixed for 64-bit Windows + XP on amd64/EM64T hardware. + +. Many build-time fixes for Windows Mobile 5 and Windows PocketPC 2003 using + Visual Studio .NET 2005 (VC8). + +. Added support for the --enable-tk-reactor configure option to the + autoconf build infrastructure to build the ACE_TkReactor library. + +USER VISIBLE CHANGES BETWEEN ACE-5.4.9 and ACE-5.4.10 +==================================================== + +. Fixed a bug in ACE_Timer_Heap_T::cancel(). + +. Improved ACE_Time_Value support for boundary conditions. + +. Fixed problems with operator placement delete on certain C++ compilers. + +. Fixed a bug with the ACE_SPIPE_Acceptor on Windows. + +. Correctly set sockaddr_in.sin_len and sockaddr_in6.sin6_len on + platforms that have these fields. + +. Avoided problems with namespace pollution for max() macros. + +. Many fixes for ACE_LACKS* and ACE_HAS* macros for autoconfig. + +USER VISIBLE CHANGES BETWEEN ACE-5.4.8 and ACE-5.4.9 +==================================================== + +. Added dozens of new ACE_LACKS and ACE_HAS defines which are used to + simplify the ACE_OS layer + +. Constructors of ACE_Time_Value have been made explicit to prevent + implicit conversions. + +. Added a shutdown() method to ACE_Barrier. The new method aborts the + wait by all threads. + +. Changed the behavior of ACE_Message_Queue::enqueue_head() and + enqueue_tail(). If the enqueued message block has other blocks + chained to it via its next() pointer, the entire chain of blocks + will be enqueued at once. + +. Improved the support for high-resolution timers with + ACE_Timer_Queue_Adapter. + +. Make it possible to disable file caching in JAWS. + +. Improved ACE_Pipe implementation so that it uses localhost to avoid + firewall problems. + +. Added Unicode support to the Service Configurator. + +USER VISIBLE CHANGES BETWEEN ACE-5.4.7 and ACE-5.4.8 +==================================================== + +. Improved IPv6 support + +. Improved 64bit portability + +. TTY_IO overhaul + - Improved documentation. + - It is now possible to request infinite timeout in portable manner. + This can be achieved by setting negative value to readtimeoutmsec. + - Various bugs fixed and portability issues resolved. + +. Subset ACE for TAO and TAO Services + +. Support for Intel C++ 9.0 on Windows and Linux + +. Support for Microsoft Visual Studio 2005 (aka VC8) for Win32 as well + as the Windows CE platforms Pocket PC 2003 and Windows Mobile 5. + Solution/project files are generated with an appended "_vc8" for + Win32 and "_WinCE" for the CE platforms. See + ACE_wrappers/docs/CE-status.txt for more information. + +. Completed implementation of ACE_Dev_Poll_Reactor using the Linux epoll + facility; tested on Red Hat Enterprise Linux 4. + +. The in-memory size of an ACE_RB_Tree will be smaller due to rearranged + placement of pointers. + +. Added an optimization to CDR stream to ignores alignment when marshaling + data. Use this new ACE_LACKS_CDR_ALIGNMENT compile-time option only + when the ACE_DISABLE_SWAP_ON_READ macro is enabled. This new option + requires ACE CDR engine to do both marshaling and demarshaling, and + when this option is enabled the encoded streams are no longer + compliant with the CORBA CDR specification. + +. Developed Feature Oriented Customizer (FOCUS) tool to enable + specialization of middleware frameworks such as Reactor and Protocol + framework. FOCUS provides an XML based transformation engine, where + the transformations to specialize the components are captured in XML + file and a weaver specializes the code. + +. Added support for unrolling ACE_OS::memcpy copy loop where + applicable to improve performance. Autoconf tests empirically + determine whether loop unrolling is at least 10% better than default + version. + +. Added support for an ACE "versioned" namespace. When enabled, ACE + library sources will be placed within a namespace of the user's + choice or a namespace of the form ACE_5_4_7 by default, where + "5_4_7" is the ACE major, minor and beta versions. The default may + be overridden by defining the ACE_VERSIONED_NAMESPACE_NAME + preprocessor symbol. Enable overall versioned namespace support by + adding "versioned_namespace=1" to your MPC default.features file. + +USER VISIBLE CHANGES BETWEEN ACE-5.4.6 and ACE-5.4.7 +==================================================== + +. Support for shared libraries with VxWorks + +. Support for Solaris 10 on x86 with Sun Studio 10 (C++ 5.7). + +. Extended ACE_OS::event_xxx implementation to support platforms + having either PThread support with Process Shared condition + variables or POSIX semaphores with named (process shared) + semaphore support or using the new FIFO based semaphores. + +. ACE_OS::closesocket() no longer calls ACE_OS::shutdown() on any platform + while closing the socket. It previously called ACE_OS::shutdown() on + HP-UX. Removing this call fixes the fork-and-close programming paradigm + that's common to many networked applications. + +. RMCast + - Support for message fragmentation. This will allow + for messages larger than 64K. + - Support for flow control. + - Timed recv() in RMCast::Socket. + - Per-instance configurable protocol parameters (e.g., message + retention time, NAK timeout, etc). + +USER VISIBLE CHANGES BETWEEN ACE-5.4.5 and ACE-5.4.6 +==================================================== + +. Updated RMCast to include + - Reactor-compatible interface. + - Message unavailability reporting. + - Protocol documentation. + +. Added support for 64bit Visual Age on AIX + +. Improved g++ 4.0 support. A number of RTTI related problems have been + fixed. + +. Smaller footprint. + +. Fixed memory leaks ACE_DLL and ACE_Log_Msg classes. + +. The ACE::ICMP_Socket and ACE::Ping_Socket classes were moved out of + the ACE namespace and "flattened" to ACE_ICMP_Socket and + ACE_Ping_Socket to be consistent with the rest of ACE. + +. ACE_INET_Addr::set_address() - fixed a possible struct member + alignment issue when building an IPv4-mapped IPv6 address. + +. Added a new ACE::wild_match() function to match a string based on + wildcards. + +. Added efficient overloads for string concatenation to the + ACE_String_Base class. + +. Added support for the use of pthread_getschedparam on MacOS X. + +. Fixed an issue with static initialization of TSS related classes on + static builds for Windows. + +USER VISIBLE CHANGES BETWEEN ACE-5.4.4 and ACE-5.4.5 +==================================================== + +. Remove special handling in the Thread Specific Storage(TSS) code + that released the TSS key for ACE_TSS. ACE_TSS has + been changed to explicitly free the TSS key when necessary. + +. On Win32 systems: detect thread termination via a hook in DLLMain + for ACE.dll. This allows cleanup of TSS objects for non-ACE threads + that use ACE functions. The most common case was threads that used + ACE logging. Formerly any TSS objects created by these threads would + be leaked. + +. Added support for GNU G++ 4.0. The x.4.5 beta takes advantage of + g++ 4.0's symbol visibility. This feature is conceptually similar + to MS Windows "__declspec(dllexport)" DLL functionality. Using this + new g++ feature results in substantially improved ACE/TAO/CIAO + shared library binaries. A subset of the improvements include the + following: + + * The number of unnecessarily exported DSO/DLL symbols is + greatly reduced, resulting in faster program start times. + * Smaller footprint. + * Improved performance since run-time indirection of internal + symbols is no longer needed. + + No changes to the ACE/TAO sources were necessary to support this + feature since the required visibility attributes were hidden behind + the various "*_Export" macros (formerly only useful for MS Windows + DLLs) used throughout ACE/TAO. + +. The ACE_Reactor destructor will now call close() on the referenced reactor + implementation. This assures that all handlers are notified before the + ACE_Reactor object that's most likely referenced in these handlers is + invalid. Although this should not be a user-visible change, it did catch + some ACE tests off guard destroying reactor implementations and ACE_Reactor + interfaces in the wrong order, so it may come up in the field as well. + When using dynamically allocated reactor implementations, do not destroy + the implementation object before the ACE_Reactor interface object. Use of + the ACE_Reactor constructor's delete_implementation argument (with a value + of 1) is recommended when dynamically allocating reactor implementations. + +. Improved performance of HTBP by not requiring a lookup of peer hostname. + +. Added new ACE_SizeCDR stream which allows one to calculate size of the + representation without writing anything. + +. Number of improvements in RMCast, reliable multicast implementation. + +USER VISIBLE CHANGES BETWEEN ACE-5.4.3 and ACE-5.4.4 +==================================================== + +. The ace-config script has been replaced by pkg-config metadata files + which are installed in ${prefix}/lib/pkgconfig by the automake build. + +. Remove ACE_OS::gets() implementation. While this ACE implementation + of gets() did not contain the security holes that all standard + gets() implementations have, keeping it around only serves to foster + confusion since (1) some may incorrectly assume that this + ACE-specific gets() implementation has the same holes as standard + ones, and (2) invoking it with a default size argument so that it + looks like a standard gets() call results in behavior that is + different from the standard. Use ACE_OS::fgets() instead. + +. Removed ACE_Unbounded_Set_Ex, this gave the false idea that it had + thread safe iterators. Use ACE_Unbounded_Set instead + +. Improved VxWorks support for static libraries. Shared libraries do cause + several known problems which will be fixed in the x.4.5 release. + +. Removed the usage of the ACE_x_cast macros, we are using the C++ casts + from now on. The ACE_x_cast macros are deprecated and will be removed + after the x.5.1 release + +. Some improvements in autoconf support; better detection of available + OS and compiler features. + +. Fixed bugs in ACE TSS emulation + +USER VISIBLE CHANGES BETWEEN ACE-5.4.2 and ACE-5.4.3 +==================================================== + +. Improved Cygwin 1.5.12 support, 90% of the tests now succeed + +. Improved OpenVMS support. + +. Added ability to use fltk with Cygwin/MinGW + +. Added ACE_INT64 that defines a native 64 bit type. + +. Added 'q' as usable specifier for ACE_Log_Msg to print out int64 bit number. + +. Added better support for Intel C++ compilers. + +. Improved HPUX support. + +. Added a new directory ("ACE_wrappers/protocols/ace") for new protocols + that are not directly components of ACE, but are relate to ACE and + defined a new protocol, HTBP (Hypertext Tunneling, Bidirectional + Protocol) providing ACE_Acceptor/Connector/Stream semantics over a + connection owned by an HTTP proxy. Test cases in + ACE_wrappers/tests/HTBP provide examples of use. + +. Performace enhancement in TP_Reactor's handle_timer_events method [Bug + 1971]. + +. Various changes to permit ACE to execute on HP NonStop platform (e.g + support for its pthreads version). + +. Updated HP NonStop configuration files (config-tandem-nsk). + +. The "ACE" pseudo-namespace is now a true C++ namespace. Transitional + pseudo-namespaces that were only meant to be used internally by ACE, + such as "ACE_Sock_Connect", no longer exist. + +. ACE_CDR::Boolean type is now a true C++ "bool" on all platforms except + MSVC++ 6. We plan to deprecate MSVC++ 6 support sometime after the + x.5 release of ACE+TAO+CIAO, so we recommend you start migrating to a + later version of MSVC++. + +. More GNU g++ 3.4.x fixes. + +. Added ICMP and "ping" socket support. + +. Added mkstemp() emulation. + +. Fixed problem on Linux < 2.5.47 platforms where equality comparison of + two logically equal sockaddr_in structure instances would incorrectly + fail. + +. Support for wide characters has been improved on non-Windows + platforms. + +. A number of Windows CE problems have been fixed. + +. ACE's loading of DLLs (for example, as a result of loading synamic + services) has been changed to use the native OS's facilities for + locating the DLL instead of searching LD_LIBRARY_PATH (or its + equivalent) then loading the DLL using a full pathname. This restores + enforcement of a platform's loading and security policy. To use the + old DLL locating method, add ACE_MUST_HELP_DLOPEN_SEARCH_PATH to your + config.h file before building ACE. + +. A number of errors in the APG example programs have been corrected. + +. Select_Reactor and Priority_Reactor performance improved. [Bug 1890] + +. Wide-char functionality on POSIX (Linux, etc.) + +. TSS memory leak fixes [Bug 1542] + +. Ported to HPUX 11i v2 on Itanium + +. Added code to ACE for platform RedHat AS 3.0 on Opteron. + +. Changed ACE::crc32() family of functions to NOT fold in the length of + the string/buffer/iovec into the CRC. + + +USER VISIBLE CHANGES BETWEEN ACE-5.4.1 and ACE-5.4.2 +==================================================== + +. Support for g++ 3.4.1. + +. All ACE Makefiles, project files, etc, are now generated by OCI's + "MakeProjectCreator" (MPC) tool. Makefiles and project files for + commonly used configurations have been pre-generated and distributed + with the beta(s). Please see: + + $ACE_ROOT/ACE-INSTALL.html + + for information on how to use MPC with ACE. + +. Improved Doxygen documentation. + +. Reduced header file dependencies, which should speedup compilation + and help minimize static footprint. + +. ACE now requires support for the following standard C++ features: + + - "bool" keyword + + - "mutable" keyword + + - "explicit" keyword + + - C++ casts (e.g. static_cast<>, reinterpret_cast<>, dynamic_cast<> + and const_cast<>) + + If you're using a compiler that does NOT support these features + please contact Steve Huston for support. + +. Changed the select()-based reactor implementations to scan for + broken handles to remove based on the registered handles, not on + event handlers. This allows for bad handles to be removed from the + reactor even if the event handler doesn't implement get_handle() the + way we expect. + +. Support for Pthreads native recursive mutexes was added. This + capability is specified to ACE_OS::mutex_init() as an optional + argument, lock_type. To fix confusion from an earlier attempt to add + this functionality, the meaning of the old 'type' argument to + ACE_OS::thread_mutex_init() is changed. It previously combined the + scope and type. Now it is just the type (e.g. recursive), as the + scope is inherent in the method used. For clarification on + ACE_HAS_RECURSIVE_MUTEXES, it means that the platform is capable of + them, not that they always are, as one would expect. However, before + Pthreads had recursion added, it was never optional. Now it is. + +. Initial support for new Linux sys_epoll() interface in + Dev_Poll_Reactor. The obsolete Linux /dev/epoll interface is no + longer supported. + +. Improved Cygwin support. + - Threading works without problems. + - Problems with shared memory, process shared mutexes, multicast and + some other small things still exist. + +. New OpenVMS port. + - This is for the latest version of OpenVMS with all available ECOs + applied. Basic stuff works without problems. Advanced features + still need some work. + +. Usage of ASYS_INLINE is deprecated in ACE. Use ACE_INLINE instead. + +. All inline source files now end in ".inl". The previous ".i" + extension is generally used for preprocessed C sources. + +. Autoconf support has been improved and fixed on a number of + platforms, including the BSD variants (e.g. FreeBSD). It is still + not the preferred way to configure most platforms, but it is ready + for wider testing. Please report any problems found to + ace-bugs@cs.wustl.edu. + +. A number of fixes were made to quiet compile errors and warnings on + 64-bit Windows. + +. For builds on AIX using Visual Age C++, the make rtti option default + was changed to 1, enabling RTTI by default. + +. ACE_Service_Repository::remove() has a new, optional argument that + can receive the service record pointer for the removed service. If + the pointer is returned to the caller, it is not deleted. If the + pointer is not returned to the caller (the default) it is deleted + (this is the historic behavior). + +. The tutorials in ACE_wrappers/docs have been removed. They were not + being maintained and caused confusion in a number of cases. Now that + there are complete examples that match the printed books (C++NPv1, + C++NPv2, APG), the older tutorials are no longer useful. Please see + + $ACE_ROOT/examples/C++NPv1/ + $ACE_ROOT/examples/C++NPv2/ + $ACE_ROOT/examples/APG/ + + for the source code of the examples in those books. + +. ACE_String_Base::fast_clear() is a new method which sets the string + length to 0. Doesn't release string-allocated memory, but if the + memory was externally supplied, it is no longer referenced from the + string object. + +. A true C++ "bool" is now used as the CDR stream boolean type, if + supported by the compiler. + +. Renamed AIX 5L configuration header from config-aix5.1.h to + config-aix-5.x.h. + +. All C++ equality, relational and logical operators now return bool + instead of int, as is the norm for modern C++. + +. Added new ACE_OS::realpath() implementation. Contributed by Olli + Savia + + +USER VISIBLE CHANGES BETWEEN ACE-5.4 and ACE-5.4.1 +==================================================== + +ACE +--- + +. Fixed "make install" support in ACE+autoconf configurations. + +. Fixed autoconf support on Solaris. + +. Corrected invalid `aux' directory (on MS Windows) found in ACE + distribution. + +. ACE/TAO build now without problems with MinGW and all ACE tests run + now without problems + +. Added some more support for the new CBuilderX Preview compiler, this + is not 100% ready yet because the compiler is still a preview and + has its own problems. + +. Added Visual SlickEdit 8.1 MPC template + +. Added workaround for compile problems in Borland Release builds + +. Cygwin 1.5.9 is now supported + +. Tests for IPV6 have been added + +. Implement lstat() so that it'll use stat() on platforms that don't + support lstat(). + +. Problems related to ACE_Event_Handler usage in WFMO_Reactor was + fixed. + +. A wrapper for rmdir () has been added. + +. Threads spawned in thread-per-connection mode never inherited the + priority. This problem was fixed and this fix is consistent with the + C++ NPV* books. + +. Fixed memory leaks with ACE_String_Base::resize () + +. Enable the usage of native recursive mutexes for the implementation + of ACE recursive mutexes on Linux. + +. The ACE Proactor framework can now be enabled for AIX 5.2. Since AIO + functionality is not run-time enabled by default on AIX 5.2, the ACE + Proactor code is not built by default on AIX. To enable it, the + config.h file must contain #define ACE_HAS_AIO_CALLS before + including the config-aix-5.1.h file. + +. The ACE_POSIX_CB_Proactor implementation is now built on all + platforms except LynxOS. + + +USER VISIBLE CHANGES BETWEEN ACE-5.3.6 and ACE-5.4 +================================================== + +ACE: +--- +. Added a new makefile commandline flag, static_link, that can be + used to force static linking when static_libs_only is turned on. It + uses the new STATIC_LINK_FLAG variable and is currently only + implemented for for GNU ld, i.e., it adds the "-static" option to + LDFLAGS. It's turned off by default since using it causes the + footprint to go up by almost 1 MB on Linux, since it links all the + system and compiler .a files, but can be turned on if users + want/need to use it, by enabling both static_libs_only and static_link. + + +. Added macros ACE_USES_GPROF which enables users to use gprof in a + multithreaded environment with ACE libs. + +. Added a new functor template class, ACE_Malloc_Lock_Adapter_T, + that's used by ACE_Malloc_T as a factory for the ACE_LOCK template + parameter, and allows the use of locking strategy classes, like + ACE_Process_Semaphore and ACE_Thread_Semaphore that don't have a + satisfactory ctor taking a single required ACE_TCHAR* parameter, to + be adapted to work with ACE_Malloc_T. + +. The source code examples from "The ACE Programmer's Guide" book by + Huston, Syyid, and Johnston, are now located in + $ACE_ROOT/examples/APG. + +. Support for GNU autoconf is now in ACE. Please see ACE-INSTALL.html + for details. + +. Fixed problems that prevented ACE from being compiled on LynxOS + 4.0.0. + +. Fixed compilation error which prevented ACE from being compiled when + ACE_COMPILE_TIMEPROBES was set to 1. + +. Preliminary support for Tandem NSK has been added. + +. Lots of bug fixes with TLI and XPG5. Please see $ACE_ROOT/ChangeLog + for details. + +. Fixed ACE_OS::event_timedwait() and ACE_OS::event_wait() so that + they use a while loop around the ACE_OS::cond_[timed]wait() calls to + avoid problems with spurious wakeups, etc. + +. ACE's wrapper around getipnodebyname() and getipnodebyaddr () has + been made go through the IPv4-only case on ACE_WIN32. Since Windows + IPv6 implementation doesn't offer support (at thistime) for + getipnodebyname() the code has been changed to use the IPV4 part of + the code. + +. Install with Borland C++ of ACE library fixed + +ACEXML: +------- + +. Fixed memory leak in ACEXML parser. + +. Fixed implementations of rewind() in all the CharStreams. They were + broken previously. + +. Fixed bugs in the parser associated with incorrect handling of PE + References for keywords. diff --git a/ACE/PROBLEM-REPORT-FORM b/ACE/PROBLEM-REPORT-FORM new file mode 100644 index 00000000000..7843ba864eb --- /dev/null +++ b/ACE/PROBLEM-REPORT-FORM @@ -0,0 +1,90 @@ +[Please use the PRF form below to submit bug reports, problem reports, + etc., to the ACE developers and interested users. Send to + ace-bugs@cs.wustl.edu. If you are using OCI, PrismTech, or + Riverace's versions of ACE do not send bugs to this mailing list, but + instead contact those companies for support. Please also send your + PRF as plain ASCII text, _not_ uuencoded or as an attachment. + + We prefer that all bug reports be submitted through our bug tracking + system. See $ACE_ROOT/docs/usage-bugzilla.html for more information + about how to do this. If you are unsure as to whether your problem + is a real bug or not then please submit your question to the mailing + list using the following form. Not using the problem report form + will make it harder or impossible to identify the problem, and in + many cases we will be unable to help at all. Also please try to + browse bugzilla and the ChangeLog files to find out if your problem + has been solved in a more recent version of ACE. + + To ensure that you see responses, please do one of the following: + + 1) Subscribe to the ace-bugs mail list, by sending email with + contents "subscribe ace-bugs" to majordomo@cs.wustl.edu. + + 2) Or, monitor the comp.soft-sys.ace newsgroup for responses. + + Replace/remove all the explanatory text in brackets before mailing. + + Please send this form as ASCII text only. Do _not_ send it as an + attachment, or as tar'ed, compressed and/or uuencoded text. And + limit line lengths to less than 80 characters. + + PLEASE make your Subject: line as descriptive as possible. + Subjects like "ACE bug" or "bug report" are not helpful! + Also, do _not_ include the word "help" in the Subject!] + + When including your config.h and platform_macros.GNU files as requested + below, only include the contents if you use the recommended method of + including the platform-specific file in your file. If you use a link + to the platform-specific file, simply state which one - DO NOT + include an entire platform-specific configuration file in the form. + +8<----------8<----------8<----------8<----------8<----------8<----------8<---- + +To: ace-bugs@cs.wustl.edu +Subject: [area]: [synopsis] + + ACE VERSION: 5.6.3 + + HOST MACHINE and OPERATING SYSTEM: + If on Windows based OS's, which version of WINSOCK do you + use?: + + TARGET MACHINE and OPERATING SYSTEM, if different from HOST: + COMPILER NAME AND VERSION (AND PATCHLEVEL): + + THE $ACE_ROOT/ace/config.h FILE [if you use a link to a platform- + specific file, simply state which one]: + + THE $ACE_ROOT/include/makeinclude/platform_macros.GNU FILE [if you + use a link to a platform-specific file, simply state which one + (unless this isn't used in this case, e.g., with Microsoft Visual + C++)]: + + CONTENTS OF $ACE_ROOT/bin/MakeProjectCreator/config/default.features + (used by MPC when you generate your own makefiles): + + AREA/CLASS/EXAMPLE AFFECTED: +[What example failed? What module failed to compile?] + + DOES THE PROBLEM AFFECT: + COMPILATION? + LINKING? + On Unix systems, did you run make realclean first? + EXECUTION? + OTHER (please specify)? +[Please indicate whether ACE, your application, or both are affected.] + + SYNOPSIS: +[Brief description of the problem] + + DESCRIPTION: +[Detailed description of problem. Don't just say " +doesn't work, here's a fix," explain what your program does +to get to the state. ] + + REPEAT BY: +[What you did to get the error; include test program or session +transcript if at all possible. ] + + SAMPLE FIX/WORKAROUND: +[If available ] diff --git a/ACE/README b/ACE/README new file mode 100644 index 00000000000..bd81f4c5a4e --- /dev/null +++ b/ACE/README @@ -0,0 +1,222 @@ +This document is also available at the following URL: + +http://www.cs.wustl.edu/~schmidt/ACE.html + +All software and documentation is available via both anonymous ftp and +the World Wide Web.] + +THE ADAPTIVE COMMUNICATION ENVIRONMENT (ACE) + +An Object-Oriented Network Programming Toolkit + +---------------------------------------- + +Overview of ACE + +The ADAPTIVE Communication Environment (ACE) is an object-oriented +(OO) toolkit that implements fundamental design patterns for +communication software. ACE provides a rich set of reusable C++ +wrappers and frameworks that perform common communication software +tasks across a range of OS platforms, including Win32 (i.e., WinNT +3.5.x/4.x, Win95, and WinCE), most versions of UNIX (e.g., SunOS 4.x +and 5.x, SGI IRIX 5.x and 6.x, HP-UX 9.x, 10.x, and 11.x, DEC UNIX +4.x, AIX 4.x, Linux, SCO, UnixWare, NetBSD, and FreeBSD), real-time +operating systems (e.g., VxWorks, Chorus, LynxOS, and pSoS), and MVS +OpenEdition. A single source tree is used for all these platforms and +porting ACE to other platforms is relatively easy. + +The communication software components provided by ACE include event +demultiplexing and event handler dispatching, service initialization, +interprocess communication, shared memory management, message routing, +dynamic (re)configuration of distributed services, multi-threading, +and concurrency control. There are both C++ and Java versions of ACE +available. + +ACE is targeted for developers of high-performance and real-time +communication services and applications on UNIX, POSIX, and Win32 +platforms. ACE simplifies the development of OO network applications +and services that utilize interprocess communication, event +demultiplexing, explicit dynamic linking, and concurrency. ACE +automates system configuration and reconfiguration by dynamically +linking services into applications at run-time and executing these +services in one or more processes or threads. + +ACE is currently used in commercial projects and products by dozens of +companies including Ericsson, Bellcore, Siemens, Motorola, Kodak, +Boeing, Lucent, DEC, Lockheed Martin, and SAIC. Commercial support +for ACE is available at http://www.riverace.com. + +---------------------------------------- + +C++ Wrappers for OS Interfaces + +The lower-level portions of ACE provide a set of portable and +type-secure C++ wrappers that encapsulate the following C language OS +interfaces: + + . IPC mechanisms + -- e.g., Internet- and UNIX-domain sockets, TLI, Named + Pipes (for UNIX and Win32) and STREAM pipes; + + . Event demultiplexing + -- e.g., select(), poll(), and Win32 + WaitForMultipleObjects and I/O completion ports; + + . Multi-threading and synchronization + -- e.g., Solaris threads, POSIX Pthreads, and Win32 + threads; + + . Explicit dynamic linking + -- e.g., dlopen/dlsym on UNIX and LoadLibrary/GetProc + on Win32; + + . Memory-mapped files and shared memory management + -- e.g., BSD mmap(), SYSV shared memory, and Win32 + shared memory; + + . System V IPC + -- e.g., shared memory, semaphores, message queues. + +The OS Adaptation Layer shields the upper levels of ACE from platform +dependencies associated with the underlying OS interfaces. + +---------------------------------------- + +Frameworks and Class Categories + +ACE also contains a higher-level network programming framework that +integrates and enhances the lower-level C++ wrappers. This framework +supports the dynamic configuration of concurrent distributed services +into applications. The framework portion of ACE contains the +following class categories: + + . The Reactor + -- Supports both Reactive and Proactive I/O; + + . The Service Configurator + -- Support dynamic (re)configuration of objects; + + . The ADAPTIVE Service Executive + -- A user-level implementation of System V STREAMS, + that supports modular integration of + hierarchically-related communicaion services; + + . Concurrency + -- Various types of higher-level concurrency + control and synchronization patterns (such as + Polymorphic Futures and Active Objects); + + . Shared Malloc + -- Components for managing dynamically allocation + of shared and local memory; + +---------------------------------------- + +Distributed Services and Components + +Finally, ACE provides a standard library of distributed services that +are packaged as components. These service components play two roles +in ACE: + + 1. They provide reusable components for common distributed + system tasks such as logging, naming, locking, and time + synchronization. + + 2. They illustrate how to utilize ACE features such as the + Reactor, Service Configurator, Service Initialization, + Concurrency, and IPC components. + +---------------------------------------- + +Middleware Applications + +ACE has been used in research and development projects at many +universities and companies. For instance, it has been used to build +avionics systems at Boeing, telecommunication systems at Bellcore, +Ericsson, Motorola, and Lucent; medical imaging systems at Siemens and +Kodak; and many academic research projects. Two example middleware +applications provided with the ACE release include: + + 1. The ACE ORB (TAO) -- TAO is a real-time implementation of + CORBA built using the framework components and patterns + provided by ACE. + + 2. JAWS -- JAWS is a high-performance, adaptive Web server + built using the components in ACE. + +---------------------------------------- + +OBTAINING ACE + +The current ACE release is provided as a tar file that is around 3 Meg +compressed using GNU gzip. ACE may be obtained electronically from +http://www.cs.wustl.edu/~schmidt/ACE-obtain.html. This release +contains the source code, test drivers, and example applications +(including JAWS) for C++ wrapper libraries and the higher-level ACE +network programming framework developed as part of the ADAPTIVE +project at the University of California, Irvine and at Washington +University, St. Louis. + +You can get The ACE ORB (TAO) in a companion release at +http://www.cs.wustl.edu/~schmidt/TAO.html. + +---------------------------------------- + +ACE DOCUMENTATION AND TUTORIALS + +Many of the C++ wrappers and higher-level components have been +described in issues of the C++ Report, as well as in proceedings of +many journals, conferences, and workshops. + +A collection of white papers and tutorial handouts are included at +ftp://wuarchive.wustl.edu/languages/c++/ACE/ACE-documentation. This +directory contains postscript versions of various papers that describe +different aspects of ACE. + +I update these papers periodically to reflect changes to the ACE +architecture. Therefore, you might want to check the date on the +files to make sure that you have read the most recent versions of +these papers. + +This material is also available available via the WWW at URL: + +http://www.cs.wustl.edu/~schmidt/ACE.html + +---------------------------------------- + +ACE MAILING LIST AND NEWSGROUP + +A mailing list, ace-users@cs.wustl.edu, is available for discussing +bug fixes, enhancements, and porting issues regarding ACE. Please +send mail to me at the ace-users-request@cs.wustl.edu if you'd like to +join the mailing list. There is also a USENET newsgroup called +comp.soft-sys.ace. Please see +http://www.cs.wustl.edu/~schmidt/ACE-mail.html for details on how to +subscribe to the mailing list. + +---------------------------------------- + +BUILDING AND INSTALLING ACE + +Please refer to the http://www.cs.wustl.edu/~schmidt/ACE-install.html +file for information on how to build and test the ACE wrappers. The +BIBLIOGRAPHY file contains information on where to obtain articles +that describe the ACE wrappers and the ADAPTIVE system in more detail. + +The current release has been tested extensively, but if you find any +bugs, please report them to the ACE mailing list +ace-users@cs.wustl.edu using the $ACE_ROOT/PROBLEM-REPORT-FORM. +Please use the same form to submit questions, comments, etc. +To ensure that you see responses, please do one of the following: + + 1) Subscribe to the ace-users mail list, by sending email with + contents "subscribe ace-users" to majordomo@cs.wustl.edu. + + 2) Or, monitor the comp.soft-sys.ace newsgroup for responses. + +---------------------------------------- + +ACKNOWLEDGEMENTS + +Please see the file `$ACE_ROOT/THANKS' for a list of the thousands of +people who've contributed to ACE and TAO over the years. diff --git a/ACE/Release b/ACE/Release new file mode 100644 index 00000000000..6072314a11f --- /dev/null +++ b/ACE/Release @@ -0,0 +1,212 @@ +#---------------------------------------------------------------------------- +# $Id$ +# +# Top-level Makefile for the ACE toolkit libraries, tests, and +# applications +#---------------------------------------------------------------------------- + +#### NOTE: The following comments describe how to create kits. +#### It's intended for use by ACE+TAO developers and +#### maintainers only. ACE+TAO users need not be concerned +#### with creating kits, just unpacking and using them. + +#### The "release" and "releaseall" targets can be used to create +#### the ACE and ACE+TAO kits. By default, each creates a new beta +#### release. To create a new minor or major release, add REL=minor +#### or REL=major, respectively, to the make invocation. +#### +#### NOTE: the REL modifier applies to _both_ ACE and TAO in +#### releaseall! +#### +#### To create a new ACE minor release and a TAO beta release: +#### % make release REL=minor +#### % cd TAO +#### % make release +#### +#### There are some other release/releaseall options [default value is in +#### brackets]: +#### ACE_TAG [ACE version in your workspace]: prepend tag with -ta +#### TAO_TAG [TAO version in your workspace]: prepend tag with -tt +#### +#### NOTE: the ACE and TAO versions will be updated automatically +#### by release/releaseall. ACE_TAG and TAO_TAG can be overridden +#### to kit a particular version. +#### +#### APPLY_NEW_TAG [enabled]: set to null to disable +#### CHECK [disabled]: set to -n to see what make_release will do, but not +#### do it +#### INSTALL_KIT [enabled]: set to null to not install in public +#### ftp/http directory on host ace +#### REL [beta]: set to minor or major, optionally, when applying a new tag +#### ZIP_FILES [enabled]: set to -z to disable creation of .zip files +#### +#### Example creation of ACE-only kit, version ACE-5_0_1 from current +#### workspace: +#### make release ACE_TAG='-ta ACE-5_0_1' APPLY_NEW_TAG= \ +#### INSTALL_KIT= ZIP_FILES=-z + + +CONTROLLED_FILES = \ + ACE-INSTALL.html \ + ACE-install.sh \ + ASNMP \ + AUTHORS \ + COPYING \ + ChangeLog* \ + FAQ \ + Release \ + NEWS \ + ACE.mwc \ + Makefile.am \ + PROBLEM-REPORT-FORM \ + README \ + THANKS \ + VERSION \ + ACEXML \ + ace \ + apps \ + bin \ + configure.ac \ + lib \ + MPC \ + docs \ + etc \ + examples \ + include \ + m4 \ + netsvcs \ + performance-tests \ + tests \ + Kokyu \ + protocols \ + websvcs \ + contrib + +RELEASE_FILES = \ + $(addprefix ACE_wrappers/,$(CONTROLLED_FILES)) \ + ACE_wrappers/ACE-INSTALL \ + ACE_wrappers/GNUmake* \ + ACE_wrappers/*.sln \ + ACE_wrappers/*.bor \ + ACE_wrappers/*.vcw \ + ACE_wrappers/Makefile.in \ + ACE_wrappers/configure \ + ACE_wrappers/aclocal.m4 \ + ACE_wrappers/aux_config + + +ALL_RELEASE_FILES = \ + $(RELEASE_FILES) \ + ACE_wrappers/TAO + +RELEASE_LIB_FILES = \ + ACE_wrappers/VERSION \ + ACE_wrappers/ace \ + ACE_wrappers/bin \ + ACE_wrappers/lib \ + ACE_wrappers/etc \ + ACE_wrappers/include \ + ACE_wrappers/m4 \ + ACE_wrappers/netsvcs \ + ACE_wrappers/tests \ + ACE_wrappers/websvcs + +# Files that should get tagged at release time but shouldn't be in any +# of the release file lists since they may already be in a directory +# found in those lists. +RELEASE_TAG_FILES = \ + html + +.PHONY: tag ACE TAO CIAO acesources taosources ciaosources +.PHONY: allsources manpages all + +# Some useful defines which are used to create the release bundle. +ACE_TAG_VALUE = $(shell head -1 VERSION | perl -ne \ + 's/.* ([\d\.]+),.*\n/$$1/; tr/./_/; print "ACE-$$_";') +ACE_TAG = -ta $(ACE_TAG_VALUE) +TAO_TAG_VALUE = $(shell head -1 TAO/VERSION | perl -ne \ + 's/.* ([\d\.]+),.*\n/$$1/; tr/./_/; print "TAO-$$_";') +TAO_TAG = -tt $(TAO_TAG_VALUE) +CIAO_TAG_VALUE = $(shell head -1 TAO/CIAO/VERSION | perl -ne \ + 's/.* ([\d\.]+),.*\n/$$1/; tr/./_/; print "CIAO-$$_";') +CIAO_TAG = -tc $(CIAO_TAG_VALUE) +APPLY_NEW_TAG = tag +CHECK = +INSTALL_KIT = -i +REL = beta +MAKE = make -f Release +ZIP_FILES = + +tag: + @$(ACE_ROOT)/bin/make_release $(CHECK) -k ace -v $(REL) -u + +#### The allsources target: +allsources: $(APPLY_NEW_TAG) + @cd TAO && $(MAKE) -s allsources REL=$(REL) + +### Generate man pages +manpages: + @$(ACE_ROOT)/bin/generate_rel_manpages + +#### Generate everything in one shot -- not recommended +all: allsources manpages + +################################################################# +#### The following targets in the following block are used by the +#### targets defined above. Please do not invoke them directly. +################################################################# + +#### The release target creates the ACE (only) kit. This is not supposed +#### to be used directly. Use make -f Release ACE instead. +acesources: $(APPLY_NEW_TAG) + @$(ACE_ROOT)/bin/make_release -k ace $(ACE_TAG) \ + $(INSTALL_KIT) $(ZIP_FILES) $(CHECK) + +#### The following target is for use by the TAO Release target. It +#### should not be called directly from the command line. This is +#### invoked by the TAO target this Release file. +taosources: + @$(ACE_ROOT)/bin/make_release -k ace+tao $(ACE_TAG) $(TAO_TAG) \ + $(INSTALL_KIT) $(ZIP_FILES) $(CHECK) + +#### The following target is for use by the TAO Release target. It +#### should not be called directly from the command line. This is +#### invoked by the TAO target this Release file. +ciaosources: + @$(ACE_ROOT)/bin/make_release -k ace+tao+ciao $(ACE_TAG) $(TAO_TAG) $(CIAO_TAG) \ + $(INSTALL_KIT) $(ZIP_FILES) $(CHECK) + +######################################################################### +## The following targets are a matter of convinience. We don't +## believe that we ever will release ACE+TAO+CIAO seperately. If that +## happens then we have these to help us out. +######################################################################### +# First, CIAO standalone +CIAO: $(allsources) + +# TAO standalone +TAO: $(APPLY_NEW_TAG) + @cd TAO && $(MAKE) -s TAO REL=$(REL) + +# ACE standalone +ACE: $(APPLY_NEW_TAG) + $(MAKE) -s acesources REL=$(REL) + + +.PHONY: show_controlled_files show_release_files show_release_lib_files +.PHONY: show_release_tag_files + +show_controlled_files: + @echo $(CONTROLLED_FILES) + +show_release_files: + @echo $(RELEASE_FILES) + +show_release_lib_files: + @echo $(RELEASE_LIB_FILES) + +show_release_tag_files: + @echo $(RELEASE_TAG_FILES) + +ACE-INSTALL: ACE-INSTALL.html + @lynx -dump $< > $@ diff --git a/ACE/THANKS b/ACE/THANKS new file mode 100644 index 00000000000..081666a3c8a --- /dev/null +++ b/ACE/THANKS @@ -0,0 +1,2265 @@ +ACKNOWLEDGEMENTS + +ACE and TAO have been deeply influenced and improved by the following +members of my research group at Washington University in St. Louis, the +University of California at Irvine, and Vanderbilt University in Nashville. + +Everett Anderson +Alexander Babu Arulanthu +Shawn Atkins +Jaiganesh Balasubramanian +Krishnakumar Balasubramanian +Matt Braun +Darrell Brunsch +Dante J. Cannarozzi +Sharath R. Cholleti +Chris Cleeland +Angelo Corsaro +Gan Deng +Mayur Deshpande +Eric Ding +George Edwards +Sergio Flores-Gaitan +Chris Gill +Andrew G. Gilpin +Aniruddha Gokhale +Priyanka Gontla +Pradeep Gore +Matthew P. Hampton +Tim Harrison +John Heitmann +James Hill +Shawn Hannan +Don Hinton +Joe Hoffert +James Hu +Huang-Ming Huang +Frank A. Hunleth +Prashant Jain +Shanshan Jiang +Vishal Kachroo +Michael Kircher +Boris Kolpackov +Arvind S. Krishna +Yamuna Krishnamurthy +Fred Kuhns +David Levine +Tao Lu +Mike Moran +Sumedh Mungee +Balachandran Natarajan +Will Otte +Kirthika Parameswaran +Krishnakumar Pathayapura +Stoyan Paunov +Carlos O'Ryan +Ossama Othman +Jeff Parsons +Irfan Pyarali +Nilabja Roy +Lucas Seibert +Diego Sevilla Ruiz +Nishanth Shankaran +Marina Spivak +Venkita Subramonian +Nagarajan Surendran +Cassia Tatibana +Sumant Tambe +Gabriele Trombetti +Emre Turkay +Nanbor Wang +Seth Widoff +Jules White +Friedhelm Wolf +Torben Worm +Ming Xiong + +I would also like to thank all the following people who have also +contributed to ACE and TAO over the years: + +Paul Stephenson +Olaf Kruger +Ed Brown +Lee Baker +Alex Ranous +Mark Patton +Steffen Winther Sorensen +Troy Warner +Stacy Mahlon +Charles Eads +Mark Frutig +Todd Hoff +George +Brad Needham +Leslee Xu +Detlef Becker +Bruce Worden +Chris Tarr +Bill Sears +Greg Lavender +Steve Warwick +Mats Sundvall +Andreas Ueltschi +Nigel Hooke +Medhi Tabatabai +Stuart Powell +Bin Mu +Andrew McGowan +Ken Konecki +John P. Hearn +Giang Hoang Nguyen +Carlos Garcia Braschi +Jam Hamidi +Eric Vaughan +Karlheinz Dorn +Gerhard Lenzer +Steve Ritter +Chandra Venkatapathy +Matt Stevens +Bob Vistica +David Trumble +George Reynolds +Hans Rohnert +Alex V. Maclinovsky +Todd Blanchard +Rob Clairmont +Christian Millour +Neil B. Cohen +Dieter Quehl +Reginald S. Perry +James Morris +Mark Seaborn +Phil Brooks +E. Jason Scheck +Daniel Proulx +Bill Tang +John Huchinson +Jack Erickson +Byron Walton +Bill Lear +Mark Zusman +Aurelio Nocerino +Walt Akers +Greg Baker +Alexandre Karev +Pramod Kumar Singh +Bryon Rigg +Brad Brown +Patty Genualdi +Eshel Liran +Mick Adams +Chris Eich +Mike Flinn +Audun Tornquist +Sandeep Joshi +Bernd Hofner +Craig Perras +Kirk Sinnard +Matthew Newhook +Gerolf Wendland +Phil Mesnier +Ross Dargahi +Richard Orr +Rich Ryan +Jan Rychter +Tom Marrs <0002104588 at mcimail dot com> +Bob Olson +Jean-Francois Ripouteau +Ajit Sagar +Ashish Singhai +David Sames +Gonzalo Diethelm +Raj +Darrin Edelman +Steve Weismuller +Eric C. Newton +Andres Kruse +Ramesh Nagabushnam +Antonio Tortorici +Nigel Lowe +Tom Leith +Michael Fortinsky +Marco Sommerau +Gary Salsbery +Eric Beser +Alfred Keller +John Lu +James Mansion +Jesper S. M|ller +Chris Lahey +Michael R"uger +Istvan Buki +Greg Wilson +Garrett Conaty +Brad Flood +Marius Kjeldahl +Steve Huston +Eugene K. Plaude +Joseph DeAngelis +Kim Gillies +Luca Priorelli +Alan Stewart +Hani Yakan +William L. Gerecke +Craig Johnston +Pierre-Yves Duval +Rochi Febo Dommarco +Jonathan Biggar +Scott Shupe +Chuck Gehr +Avi Nash +Padhu Ramalingam +Jay Denkberg +Ayman Farahat +Tilo Christ +rev +Hamutal Yanay +Vital Aza +Alex Villazon +David Artus +Todd Barkalow +Alexander Smundak +Thilo Kielmann +Matthias Kerkhoff +Fred LaBar +Hanan Herzog +Eric Parker +James Michael Dwyer +Arun Katkere +Bob Dunmire +Sandro Doro +Robert Lyng +Phil Logan +John Cosby +Wayne Vucenic +Harry Gunnarsson +James CE Johnson +Samuel_Bercovici +Per Andersson +Anthony McConnell +Mark Rabotnikov +John Bossom +Rino Simioni +Slawomir Kuzniar +Rob Jordan +Michael Maxie +John Cosby +Nigel Owen +Jorn Jensen +Paul Roman +Dave Mayerhoefer +Bert Craytor +Joey Zhu +Arthur J. Lewis +Michael R. MacFaden +Paul Han +Jeff Morgan +Arturo Montes +Elliot Lau +Mark Wright +Michael Newton +Kumar Neelakantan +Scott Halstead +Jean-Marc Strauss +Adam Porter +Hakan Kallberg +Eric Dean Russell +Daniel Montalibet +Norbert Rapp +Ganesh Pai +Berni Merkle +Tom Wright +Torbjorn Lindgren +Mike Bernat +Brian Mendel +Jeremy Buch +Kevin Boyle +Kevin Martindale +Luis Lopes +Adrian Salt +Hongbo Xu +Michael Hartman +Tom Dobridge +Rich Christy +Satoshi Ueno +Eugene R. Somdahl +Robert Head +Ivan Murphy +Jan Perman +Shankar Krishnamoorthy +Reza Roodsari +Jim Crossley +Johannes Gutleber +Yigong Liu +Erik Urdang +Mike Schweiger +Anthony Mutiso +Jeff R. Hayes +David Brackman +Dave Moore +Joseph Cross +Cherif Sleiman +Stefan Ericsson +Thanh Ma +Oleg Krivosheev +Stephen Coy +Bob Laferriere +Satheesh Kumar MG +Karen Amestoy +Jeff Richard +Samuel Melamed +Vladimir Schipunov +Felix Popp +Billy Quinn +Michael McKnight +Huiying Shen +Alex Chan +Aaron Valdivia +Edan Ayal +Jeffrey Peterson +Neil Lavelle +Steven Wohlever +Manojkumar Acharya +Evgeny Beskrovny +Kirill Rybaltchenko +Laura Paterno +Ben Eng +Mike Kamrad +Marios Zikos +Mark L Boriack +Mark Hyett +Valik Solrzano Barboza +John Connett +Tom Arbuckle +Stephen Henry +Dani Flexer +Michael Hoffman +John Lindal +Dustin Laurence +Ernie Makris +Timothy A. Brown +Pat McNerthney +Lori Anderson +Erik Margraf +Bryan Doerr +Adam Miller +Thomas Jordan +Keith Nicewarner +Frederic Andres +Achint Sandhu +Mitch Kuninsky +Alex Chan +Jeff Hellzen +Thomas Venturella +Philippe O'Reilly +Stan Leeson +Richard Keizer +Edgar Villanueva +Oliver Kellogg +Dave Meyer +Thomas Hampson +Jay Kistler +Scott Snyder +Mark Evans +Todd Pack +Mark Maris +Jason Katz +Jim Penny +Chris Ryan +J dot Russell Noseworthy +Carol Sanders +Jerry Bickle +Paul von Behren +Sudish Joseph +Loren Rittle +Alexander Ovsiankin +Ravi Nagabhyru +Tom Brusehaver +Dave Tallman +Monish Rajpal +Garry Brother +Andreas Schuelke +Ganapathi +James Garrison +Brad Walton +Paul Motuzenko +Kurt Sussman +Rob Thornton +Chanaka Liyanaarachchi +Saneyasu +Steve Kay +Greg White +Ki-hyun Yoon +Umar Syyid +Bill Fulton +Amancio Hasty +Zoran Ivanovic +Sree Oggu +James Risinger +Leo Modica +Bob Scott +Mark Kettner +Kent Watsen +Chris Healey +Philippe Klein +William S. Lear +John Geiss +Ernesto Guisado +Stuart Myles +Lothar Werzinger +Andrew Harbick +Pavel Motuzenko +Ross J. Lillie +Sam Hauer +Frank J. Hodum +David Miron +Anton van Straaten +Joe Covalesky +Bill Backstrom +Jeff Franks +John Mulhern <9107 at mn3 dot lawson dot lawson dot com> +Johan Lundin +Eric Powers +Gabriel Lima +Doug Anderson +Hongyin Quan +Maximilian Hoferer +Kevin Stanley +Jeff Greif +Jeff McDaniel +Andreas Geisler +Bob McWhirter +Daniel Winder +Zheng Han +Christa Schwanninger +Byron Harris +Barney Dalton +Peter Gorgia +Dirk Broer +Joseph E. LaPrade +Goran Lowkrantz +Susan Liebeskind +Dana Hackman +Margherita Vittone Wiersma +Priya Narasimhan +Jeff Hopper +Mats Nilsson +Dongwook Kim +Don Davis +Alberto Villarica +XuYifeng +Tom Shields +Krishna Padmasola +Andre Folkers +Paul Sexton +Marc Lehmann +Anne Blankert +Raja Ati +Clinton Carr +Peter Liqun Na +Frank Adcock +Xu Yifeng +Valery Arkhangorodsky +Alan Scheinine +Andrew G. Harvey +Dann Corbit +James +Jason Milley +Ulf Jaehrig +Peter Nordlund +Mark Weel +Tres Seaver +Erik Koerber +Eric R. Medley +David O'Farrell +Amir Bahmanyari +Ian Wright +David Janello +Rich Wellner +Fernando D. Mato Mira +Jonathan Reis +Seung-Lee Hoon +Russell L. Carter +Bill Hall +Brian Gilstrap +Balaji Srinivasan +Anders W. Tell +Larry Lachman +Terry Rosenbaum +Rainer Blome +Kirk Ellett +Sunil Kumar +T Stach +Ron Barack +Daniel Nieten +Paul K. Fisher +Jim Buck +Olivier Lau +Achim Stindt +Fredrik Lindahl +Joseph Weihs +Serge Kolgan +James Megquier +Martin Krumpolec +Michael Thomas +Vicentini Emanuele +Bob Price +Ramiro Penataro Blanco +Sigg Pascal +Ivan Leong +Virginie Amar +Tom Ziomek +Hamish Friedlander +Mark De Jong +Knut Johannessen +Leif Jakobsmeier +Jon Lindgren +Steve Vinoski +Christian Mueffling +Victor Yu +Jeff Donner +Joe Loyall +Stanislav Meduna +Christian Korn +Ron Barack +Steve Totten +Faron Dutton +Gary York +Patty Hair +Ivan Pascal +William A. Hoffman +Mark Lucovsky +Greg Holtmeyer +Jody Hagins +Patrice Bensoussan +Keith Brown +Barry Hoggard +Peter J. Mason +Jerry D. De Master +Greg Gallant +wym +Karel Zuiderveld +Mike Goldman +Peter Gross +Greg Ross +Stanford S. Guillory +Peter Weat +Magnus Karlsson +Andreas Tobler +John Aughey +Knut-Havard Aksnes +Eric Mitchell +Tommy Andreasen +Slava Galperin +Jeff Olszewski +Sudhanshu Garg +Mike Preradovic +Greg Harrison +Sangwoo Jin +Jacques Salerian +Steve Coleman +Diethard Ohrt +Jacob Jones +Phil Ruelle +Sush Bankapura +Eric Covington +Darren Whobrey +Mason Taube +Rod Joseph +Hans Horsmann +Kevin Royalty +Souhad Mcheik +Mark Little +Tim Stack +Marc Engel +Uma Markandu +Henrik Nordberg +Tad Jarosinski +Andy Marchewka +Neal Norwitz +Frederic Maria +David Hooker +Christian Destor +Andrew Hobson +Andre Folkers +Torsten Kuepper +Hao Ruan +Alexander Davidovich +Cristian Ferretti +N Becker +Yaolong Lan +Elias Sreih +Liang Chen +Mark Laffoon +Ti Z +Brian Dance +Alexey Gadzhiev +Francois Bernier +Bill Rizzi +Peter Windle +Jaepil Kim +Dmitry Goldshtain +Carl Grinstead +Henric Jungheim +Michael Preobrazhensky +Gregory D. Fee +Roland Gigler +Frank Buschmann +Eric Eide +Don Busch +Thomas Lockhart +David Hauck +Keith Rohrer +Tim Rose +Sam Rhine +Chris Schleicher +Margaret Reitz +Thomas Mehrkam +Erik Ivanenko +Sarmeesha Reddy +Steven Tine +Dave Steele +Simeon Simeonov +David H. Whittington +Ian MacDonald +Hans Ridder +Todd Mullanix +Hai Vu +Paul Francis +Kristopher Johnson +Dave Butenhof +Dominic Williams +Srikumar Kareti +Ian Pepper +Kevin Lyda +James D. Rucker +Brian Wallis +Sandeep Goyal +English Malc +Frank O'Dwyer +Long Hoang +Steven D. Chen +Alain Magloire +Jim Rogers +Nick Sawadsky +David Brownell +Richard Stallman +Casey Lucas +Brian C. Olson +Joseph A. Condlin +Serge Du +Mike Mazurek +Christian Schuderer +John R. Taylor +Bill Tovrea +Wallace Owen +Vyacheslav A. Batenin +Edwin D. Windes +Christopher Kohlhoff +Andreas Terstegge +Stefaan Kiebooms +Keith Nichol +Rebecca Sanford +Ram Vishnuvajjala +Tom Bradley +Shaun Ohagan +Dale Wood +Robert Flanders +Gul Onural +Stephen E Blake +Eric S Rosenthal +Sridevi Subramanian +Bruce Trask +Jake Hamby +Rick Weisner +Dennis C. De Mars +V dot Lakshmanan +Hata Yoshiaki +Vidya Narayanan +Sean Landis +Youzhong Liu +John Weald +Gilbert Roulot +Gildo Medeiros Junior +Brian Peterson +Fabrice Podlyski +Darren DeRidder +John Tucker +Oleg Orlov +Timothy Canham +Randy Heiland +Joyce Fu +Surender Kumar +Pradeep Avasthi +Guicheney Christophe +Madhu Konety +Isaac Stoddard +Alvarez +Peter Brandstrom +Eugene Surovegin +Thaddeus Olczyk +John Chludzinski +Pedro Alves Ferreira +Bruce Edge +Dan Butler +Ron MacKenzie +Craig Rodrigues +Phil Y. Wang +David Brock +John Morey +Dwayne Burns +Denis Ouellet +Stefan Ullrich +Brian Raven +Gheorghe Aprotosoaie +Carsten Zerbst +Paul Calabrese +Stephane Chatre +James Whitledge +Erik Johannes +Alex Hornby +Riaz Syed +Clarence M. Weaver +Roger Egbers +Ralf Kluthe +Ruud Diterwich +Bill Nesbitt +Will Skunk +David Digby +Timothy Schimke +Jim Robinson +Peter Mueller +Raghu Nambiath +Mike Gingell +David McCann +Ruediger Franke +Brian Jones +Michael Garvin +Mike Vitalo +Kirk Davies +Arno Pernozzoli +Trey Grubbs +Matthias Schumann +John Gathright +Alexander Villatora +Hoang Duong +Michael Roth +Craig Anderson +Mitsuhiko Hara +Weihai Yu +Tal Lev-Ami +Chris Zimman +Rick Wesson +Sridhara Rao Dasu +Walter Welzel +Anthony Shipman +Tobin Bergen-Hill +Toshio Hori +John Mink +Duane Binder +Randall Sharo +Dave Madden +Cliff_H_Campbell +Narendra Ravi +Krishnakumar B. +David Sunwall +Brian Wright +Yosi Sarusi +Robert Shewan +Skye Sweeney +Lars Immisch +Stefan Wendt +Herbert +Clarence Bishop +Giga Giguashvili +Philipp Slusallek +Matthew Davis +Janusz Stopa +Rusty Conover +Alex Mintz +Phillippe Merle +Mark Winrock +Boris Kaminer +Martin Botzler +Lorin Hochstein +Wenli Bai +Harry Forry +Jose Rubio +Joerg Pommnitz +Mogens Hansen +Shafiek Savahl +Pierre Grondin +John Masiyowski +Uwe Landrock +Klaus Banzer +Probal Bhattacharjya +Dmitri Katchalov +Alok Gupta +Chien Yueh +John K. Black +Kamen Penev +Gregory Yarmit +Jarek Tomaszewski +Siegurd Weber +Fabrizio Giannotti +Harald Finster +Fritz Bosch +Charles Frasch +Chris Hafey +Rick Hess +David Dunn +Jaymes Galvin +Marat +Sergey Nemanov +Vladimir Kondratiev +John Glynn +Raymond Wiker +Michael Pitman +Joseph Jefferson +Engelbert Staller +George Ball +Dennis Noll +Ronald Fischer +Marvin Allen Wolfthal +Dan Gilboa +Sean Boudreau +Shalini Yajnik +Matt Thompson +Peter C Chien +Bruce Alderson +Christoph Poggemann +Travis Shirk +Alain Sauron +David Delano +Boris Sukholitko +Brian Mason +Thomas Groth +Damien Dufour +Paulo Breda Vieira +Samuel Stickland +Bryan Van de Ven +Greg Siebers +Rob Gabbot +Paul Carreiro +Jovan Kilibarda +Derek Dominish +Devesh Kothari +Stephen Moon +Hani Mawlawi +Benedikt Eric Heinen +Jason Topaz +Alexander Dergatch +Airat A. Sadreev +Klaus Hofmann +Miroslav Koncar +Extern Chatterji +Zach Frey +Ruibiao Qiu +Marcelo Matus +R Seshardi +Stephan Kulow +Alexander Belopolsky +Ben Bourner +Lalitha Chinthamani +Thomas Huang +Sankaranarayanan K. V +Ephraim Vider +Reid Spencer +Kevin Dalley +Jan Nielsen +Jochen Linkohr +Mirko Brandner +Yuval Yosef +Chad Elliott +David X. Callaway +Soren Ilsoe +Eric Hopper +Martin Johnson +Pierre Oberson +Chris Uzdavinis +Ishay Green +Andrey Nechypurenko +Charlie Duke +Jonathan Luellen +Andrew Psaltis +Erik Jones +Ted Burghart +Mike Winter +Judy Ward +Ken Block +Jamshid Afshar +Jerry Jiang +Rob Ruff +Hugh Arnold +Hessel Idzenga +Mark C. Barnes +Suresh Kannan +Alex Scholte +Greg Jansen +Raj Narayanaswamy +Iain Melville +Daniel Lang
    +Chris Leishman +Klemen Zagar +Rick Ohnemus +Adamo, Vince +Defang Zhou +Dave Zumbro +Ted Nolan +Jianfei Xu +Alvin C. Shih +J dot Scott Evans +Alex Luk +Kenneth Osenbroch +Jason Czavislak +Alex Chachanashvili +Gilbert Grosdidier +James Briggs +Herbert Wang +Anders Olsson +Sergey Gnilitsky +David Wicks +Girish Birajdar +Hajdukiewicz Markus +Gerwin Robert +Alia Atlas +David Hall +Todd Gruhn +John Hickin +Alex Brown +Rich Seibel +Jim Scheller +Bob Bouterse +Sandeep Adwankar +W Craig Trader +Bruce McIntosh +Natarajan Kalpathy +David O'Farrell +Bob Bouterse +Malcolm Spence +Dong-Yueh Liu +Craig Ball +Norbert Krain +Adrian Miranda +Cody Dean +Hans Scharkowitz +Charles Meier +Tim Sim +Shalabh Bhatnagar +Charles Scott +Espen Harlinn +mulder +Richard L. Johnson +Tam Nguyen +Jeff Graham +Ralph Loader +Ji Wuliu +Wada Hiroshi +Sal Amander +Torsten Pfuetzenreuter +John M. Mills +David McWeeny +Florian Lackerbauer +Manuel Benche +Steve Luoma +Roger Tragin +Alex Bangs +Yangfen Qiu +Johnny Chen +John Foresteire +Larry Peacock +Francisco Bravo +Antti Valtokari +John Smyder +Mathew Samuel +Conrad Hughes +John Rodgers +Charles Taurines +James Lacey +Nick Pratt +Xiaojun Wu +George Lafortune +Aoxiang Xu +Dima Skvortsov +Moore Y. Cao +Wai Keung Fung +Michael Laing +Benoit Viaud +Ken Weinert +Ferran Boladeres Salvad +Steve Vranyes +Jim Melton +Ron Klein +Anuj Singhal +Henrik Kai +Dominic Hughes +Lior Shalev +Charlie Duke +William Horn +Greg Hall +Aviad Eden +Vianney Lecroart +Russell Mora +Samir Shaikh +Eric Yee +Matt Emerson +Yiu L. Lee +Pedro Brandao +Hakon Innerdal +Sami Aario +Ingo Dahm +Vijay Aswadhati +Xiaowen Wang + +Warren Miller +Youngkwan Cho +Dorr H. Clark +Dave McNeely +Eric Malenfant +Roland Fischer +Alexander Libman +Roger Larsson +Martin Stack +Michael Ravits +Derek Viljoen +Hamed Azizadah +Keo Kelly +Joachim Achtzehnter +Tomer Amiaz +Sergey Osokin +Nick Logvinov +Viatcheslav Batenine +Shashi Bhushan +Javier Corrales +J dot Randy Pitz +Richard Reitmeyer +Xavier Montet +Letha Etzkorn +James Dabbs +Matej Sekoranja +Mattias Eriksson +Nicoletta Viale +George Reid +Kim Lester +Wilson Chan +William Rucklidge +Victor Krebss +Chander P. Thareja +John Mills +Haifeng Lee +Hans Utz +Askok Kumar Kalanithi +Chris Able +John Hiltenbrand +Steve Hespelt +Peter Fischer +Madhu Ramachandran +Caleb Epstein +Bruno Marconi +Ken Childress +Michael Kramer +Johnny Willemsen +Jonathan Astle +Javier Lopez Sanchez +Nir Drang +Albert Wijnja +Marcel Van Der Weert +Mervyn Quah +Giovanni Zito +Matthew Adams +Sameer Schabungbam +Jeff Butler +Roland Rüdenauer +John Buckman +Guy Rosen + +Bennett R. Stabile +Paul Caffrey +Low Aik long +Michael Rinne +Jaffar Shaikh +Roger Beck +Trueman Bill +Harold Bien +Mateu Batle +Philip Miller +Base V Paul +Evghenii Filippov +Mike Curtis +Jessie Ragsdale +Shourya Sarcar +Eric Crampton +Sandip Patel +ChenXu +Vsevolod Novikov +Brendan Corcoran +Steve Sivier +Rick Schneeman +Klaus H. Wolf +Jean-Christophe Dubois +Michael Hampel +Wei Zheng +Bernd Annamaier +Joachim Tremouroux +Momchil Velikov +Munagala Ramanath +Kevin Marshall +David Channon +Andy Guy +Oscar Rodriquez +Jonathan Cano +Alain Decamps +Paul Rubel +Jon Loeliger +Ricardo Chan +Sarabjeet Duhra +Michael Rushton +Arno Pernozzoli +Calum Mitchell +Jerry Odenwelder +Kent Stewart +Alexander Kogan +Michael Lindner +Arnaud Compan +Michael Searles +Bogdan Jeram +Sebastian Schubert +Li Zhou +Shivakumar Patil +Steve Olson +Allen Broadman +Yuriy Zaporozhets +Joe Guan +Attilio Dona +McGanahan Skjellifetti +Matthias Wittig +David Allen +Edwin McKay +Scott Bolin +Mike Anderson +David Singer +Nick Lin +Ron Hashimshony +Max Khon +Jonas Nordin +Jonathan Stockdale +Jean-Francois Daune +Wei Chiang +Rick Stille +Kirill Kuolechov +Edwin Wrench +Yung Trinh +Richard Eperjesi +Ben Strong +David Karr +Sathish Tiptur +Lu Yunhai +Christian Ewald +Samuel Qi Luo +Sergey Logvin +Orlando Ribeiro +Doug Warner +Kevin Regan +Andy Olson +Max Voronoy +Alexandr Gavrilov +Scott Gunn +Mason Deaver +Richard Huber +Glen Osterhout +YingLi +Haka +Sam Chong +Virgilijus Globis +Stefan Scherer +Pim Philipse +Michael Grove +John Mackenzie +Ricky Marek +Patrick Maassen +Christian Schuhegger +David L Smith +Rainer Doerntge +Tompa +Derek Horton +Shameek Basu +Dipti Jain +Eric Zuur +Jeffrey J. Persch +Rahul Shukla +Pierre Fayolle +Greg McCain +Matt Cheers +Benjamin Fry +Ram Ben-Yakir +Eric Desamore +John Ashmun +Przemyslaw Marciniak +Carsten Madsen +David Sperry +Ted Horst +Diana Arroyo +Benny Prijono +Roland Ziegler +Stelios Sfakianakis +Mike Letchworth +Brian Gilmer +James Dunham +Juergen Pfreundt +Joel Sherrill +Jules Colding +Stephane Pion +Raghu Narayan +Richard Goold +Nathalie D'Amours +Albert Pariante +Stephen Torri +Philippe Perrin +Gunnar Buason +David Hanvey +Jeff McNiel +Georg Lohrer +Rachel G Smith +Tom Lake +Logan Modahala +Jean Malenfant +Victor Poznyak +Juan Jose Comellas +James Dorsey +Benot Desmeules +Tom Moog +Stan Pinte +Dayisi +Peter Georgakakis +Richard Hardgrave +Mark Drijver +Guy Bolton King +Carlton Teel +Alexandre Cervieri +Darren Griffith +Sam Mok +Josh Curry +Norman Wilson +Itzhak Briskman +James Kanyok +Corey Trager +Kirat Singh +Oleg Pavliv +Frederick Niemi +Andrew Munro +Nicolas Huynh +Kevin Burge +Wayne Erchak +Yew Khong See +Greg Thompson +Mike Pyle +Kobi Cohen-Arazi +Israel Illescas Gomez +Brodie Thiesfield +Erik Toubro Nielsen +Masaoud T. Moonim +Steve Witten +Gil Rapaport +Boris Temkin +Steve Perkins +Jerry Thomas +cuma +Ron Heald +Andrew Finnell +Dan Levi +Rob Andzik +James Maynard +Francois Rioux +Ophir Bleiberg +Allen Kelly +Victor Pitchouc +Srikanth Vedire +J Shane Culpepper +Steffen Hieber +Craig L. Ching +Ben Howard +Rich Newman +Kelly F. Hickel +David Trusty +Burkhard Neppert +Crawford Lodge +Scott Gaa +Jenny Kowald +Oren Zeev-Ben-Mordehai +Holger P. Krekel +Glenn Popelka +Tibor Kiss +Robert Davidson +Peter Crowther +Mouna Seri +Vladimir Chovanec +Alexander Rieger +Glen Coakley +Scott Plant +Wilfried Reinoehl +Sangeetha Ramadurai +Victor Chernenko +Frank Wolf +Christophe Galerne +Scott Harris +Stefan Kluehspies +Egon Wuchner +Ugendreshwar Kudupudi +Ekkehard Hoffmann +Ted Krovetz +Grzegorz Sikora +Fabris +Christina Junru +Patrick Rabau +Hyman Rosen +Torbjorn Backstrom +Robert Burke +Olivier Brunet +Bret Clark +Steve Rahn +Bertrand Motuelle +Blair Zajac +Gary Duzan +Garry Shamis +Eamonn Saunders +Yev Omenzel +John E Hein +Tino Schwarze +Gergely Timar +Peter Phillips +Yury Kuznesov +Daniel Manfis +Massimo Pichini +Eyal Neuman +Dave Hale +Giulio Agostini +Werner Buchert +Kevin Cline +Mahesh Varadarajan +Olof Lindfors +Tom Wagner +Kyle Brost +Vincent Nicolas +Jonathan Wackley +Jan Kalin +Andreas Huggel +Alain Totouom +Tushar Nair +Sunny Leung +Bonifides Bautista +Brad Hoskins +Donald Acton +Hagen Ulrich +Adrian Mercieca +Lars Steubesand +Heping He +Leo Kov +Suresh N +David Arndt +Tad Hetke +Graeme Clark +Gu Song +Chris Hughes +Fikri Pribadi +Ioulia Passynkova +Steve Osselton +Doron Rajwan +Stuart Jones +Guillaume Renaud +Tommy Svensson +Jstwo +Hartmut Quast +Ulrich Voigt +Syed Wasim Ali +Bo Balder +Michael Sawczyn +Ildar Gabdulline +David Yongqiang Wang +Shahzad Aslam-Mir +Andrew Foster +C Chan +Alexey Chalimov +Andrea Bernicchia +Praphul Menon +Patrick N +Garth Watney +Jim Connelly +Eyal Lubetzky +Gaoyan Xie +Michael Brinkmann +Chatchai Khumboa +Andrey Shkinev +Michael Graf +Justin Michel +Robert Martin +Charles Meidinger +Petr Tuma +Greg Burley +Marvin Greenberg +Mike Connors +Ben Flight +Bob Jolliffe +Jesse +Robert Handl +Keith Snively +Ahmed Riza +Miljenko Norsic +David Robison +Preston Elder +Eric Peters +Edward A Thompson +Eugene Alterman +Patrick Cosmo +Ran Kohavi +Harvinder Sawhney +Sorin Iordachescu +Mahesh Vedantam +Brian Olson +Roy Sharon +Charlie Grames +Tom Howard +Michael Gillmann +Yaniv Ben Ari +Victor Terber +David Sanders +Yoram Zini +Sean McCauliff +Shmulik Regev +Andrew L. Shwaika +Gerhard Voss +Gregor Bruce +Ian Cahoon +Alexei I. Adamovich +Sohail Husain +Jerome Julius +William R Volz +Koushik Banerjee +Zoran Cetusic +Patrick Bennett +Felix Wyss +Tim Rydell +Petr Shelomovsky +Juliana Diniz +Yuval Cohen +Timothy Kilbourn +Marc Walrave +Petru Marginean +Paresh Raote +Donna Maskell +Steve Ige +Marco Kranawetter +Christian Veleba +Olli Savia +Bhaskara Rao G +M Schulze +John Michael Zorko +Ami Bar +David Smith +Peter van Merkerk +Bill Dyer +Rodney Morris +Mark Hoffmann +Markus Wild +Joe Hayes +Chip Jones +Patrick J Lardieri +Ken O'Brien +Daniel Troesser +Ivan Pazymenko +Dan Green +Cyrille Chepelov +Peter Heitman +Paxton Mason +Yan Dai +Sean I. Luzader +Renjie Tang +Max V. Zinal +Stan Sosnovsky +Ariel Peltz +Carsten Prescher +Raghuram Shetty +Val Dumiterscu +Oleg Kraynov +Stephan Gudmundson +Frank Kuhlman +Denis Otchenashko +Marc M Adkins +Jon Lambert +Rainer Lucas +Allan S Iverson +Jeffrey Shaffer +Oleg Burlachenko +Jian Chen +Jeff Paciga +Laurent Sabourin +Frank Rybak +Tim Iskander +Michele Amoretti +Ido Yellin +Eric Page +Kevin Heifner +James Haiar +Pavel Repin +Whitney Kew +Tom Phan +Andrew Guy +Bharathi Kangatharan +Jean Quinsat +Ma Ting Chong +Andrew Sutton +Ansgar Konermann +Amir Kunst +Daniel Garrido +Andy Alvarez +Soeren Gerlach +Vitaly Prapirny +Sasha Agranov +Ruwanganie Gunatilleke +Peter Kullmann

    +Lyn Headley +Jeff Adams +Alexander Maack +Timothy Culp +Oleg Terletsky +Bill Tonseth +Frank Pilhofer +Eric Quere +Keith Thornton +Nathan Krasney +Marek Maleta +David Smith +Dimitrije Jankovic +Frank O. Flemisch +Cary Steinmetz +Ty Tenait +Nitin Mallya +Nick Cross +Christopher W. Midgley +Wanjia +Shanliang Cheng +Andy Ling +Stephen Howard +Carsten T. Nielsen +Adee Ran + +Davide Pasetto +Michael Hornok +Wim van den Boogaard +Carol Hunsicker +Joseph Sarbak +Ruslan Zasukhin +Colin Weaver +Kew Whitney +Sean Ogle +Tim Bradley +Kier Schmitt +George Varsamis +Alan Tanga +Bertin Colpron +Jeff Wilson +Dmitry Khrapov +Francois +Laxmikant Bopalkar +Steven Gardner +Ronald Berger +Jeremy Altavilla +Brian Appel +Lan Zhineng +Leen Van Kampen +James Beale +Mark Xu +Umberto Mascia +Marcel Loose +Christian Klutz +Ville Lehtiniemi +Chumsu Kim +Schone Mullerin +Cemal Yimaz +Newton Aird +Frederic Motte +Roger Weeks +Gautam Thaker +Christophe Juniet +Jeff W +Geir Berset +Ken Sedgwick +Vince Mounts +Vladislav Zverev +Erich Hochmuth +Nick S. Petrov +Dmitry Botcharnikov +Philippe Haussy

    +K2 +Eric Frias +Antonio Saraiva +Sean M. Paus +Yuanfang Zhang +Jonathan Franklin +Cristian Ungureanu +Tommy Persson +Christian Barheine +Ole Husgaard +Victor Kirk +Sandeep Neema +Mike Curtis +Artashes Ghazaryan +Ashok Sadasivan +Andreas Koehler +Thomas Devanneaux +Paul Marquis +Ed Skees +Marc Alter +Martin Geliot +Simon McQueen +Jason Pasion +Philipp Leibfried +Erwin Rol +Dirk Moermans +Huseyin Calgin +Jaroslaw Nozderko +Sharon Caspi +Thomas Natterer +Wilbur Lang +Rick Marlborough +David-A O-Brien +Shelton Tang +Frederic Langlet +Antonio Leonforte +Pablo d'Angelo +Christophe Vedel +Uwe Jaeger +Viktor Ransmayr +Daniel Bell +Mathias Waack +Mike Nordell +Tufan Oruk +Tim Smith +Andy King +Eric Strennen +Abhay Kulkarni +Ron Muck +Ma Weida +Terry Lao +Volker Boerchers +Tim Pullen +Marc Tardif +Guan Joe +Petr Ferschmann +Greg Mulyar +Max F. Bilyk +Danile White +Andrew Marlow +Michael F"olsl +Vincent Chau +Theo Landman +Igor Pisarenko +Dima Scub +Volodymyr Orlenko +Grigory +Michael Soden +Dennis Sporcic +Emmanuel Thevenot Beaufort +Denis Parnaland +Matthias Blankenhaus +Wolfgang Schroeder +Mario Hofmann +Bruce MacDonald +Jeffrey Graham +Otis Nyandoro +Ray Limpus +Dmitri Belogaj +Will Christof +Ferran Boladeres Salvad +Juan Carlos Montes Costa +Edward Scott +Steve Spencer +Fukasawa Mitsuo +Martin Brown +Terry Mihm +Jeff Gray +Rob Eger +Leonid Kvetnyi +Rudolf Weber +Sergei Pimenov +David Kinder +Sebastien Lalonde +Jia Wan +Bertin Colpron +Weston Markham +Bryan Thrall +Subhabrata Biswas +Dave Ryan +Zsolt Zsoldos +Tongzhe Cui +Braden McDaniel +Richard Woodring +Andras Lang +Scott Gammil +Nick Lewycky +Ira Burton +Thomas Wiegert +Craig Watcham +Pit Linnartz +Peder Norgaard +David Ohlemacher +Ken Kane +Bill Church +Udo Berninger +Vincent Korkos +Martin Corino +Terry Lacy +Branko Mijic +Jeff Kelley +Daniel Hannum +Jason Cohen +Nick Kukuczka +Andrew Voumard +Anand +D.J. Dwyer +Douglas A Stuart +Victor N. +Francesco Baldi +Michael Rice +Jesse Greenwald +Raymond Hoofman +Jason Smith +Danta Cannarozzi +Valery Salamakha +Karim Fodil-Lemelin +Wenlong Tang +Manish Jain +Robin Farine +Roland Schimmack +Roy Pollock +Eric Held +Kees van Marle +Dieter Knueppel +Amol Tambe +Emiliano Berenbaum +Scott Clarke +Sunil Rottoo +Martin Habets +Todd Cooper +Serkan Unsal +Milan Cvetkovic +Didier Becu +Dan Halbert +Jerome Waibel +Stephan Frenzel +Bruce Jones +Tim Hawes +Philip Leishman +Alexander Jasper +Gerard Grant +Trevor Fields +Jeff Dugan +Jeff Mirwaisi +Alain Dupont +Stephan Bettermann +David McKen +Adam Fanello +Matthieu Vansteene +Sean Rooney +Enrico Detoma +Onopin V. Mikhail +Edward R. Mulholland +Brian Buesker +Vladimir Naylov +Ted Mules +Mike Hepburn +Dale Wilson +Thomas Girard +Malcolm McRoberts +Dror Tirosh +Chris Sontag +Moran Levi +UV Wildner +Alan l Batongbacal +Gary Maxey +Yoav Borer +Andre Kleibeuker +Andy Bellafaire +John Fletcher +Terry Ware +Pierre Pacchioni +Roger Beathard +Konstantinos Margaritis +Stephen Procter +Christoph Liebig +Andre Kostur +Markus Stenberg +Jonathan Pollack +Si Mong Park +Hakim Souami +Paul Morrison +John Poplett +Heiko Bachmann +Andrew Metcalfe +Simon Dutkowski +Mickael P. Golovin +Shannon Barber +Brad Orner +Michelangelo Nottoli +Peter Bekiesch +Martin Kaul +Lukas Gruetzmacher +Robert Schiele +Matthew Grosso +Akim Boyko +Nils Sandoy +Daniel Miranda +Hans-Peter Bock +Dmitri Hrapof +Denny Kolb +Daniel Buchs +Matt Murphy +Brian Nelson +Avi Ouziel +Matthew Gillen +Chris Reed +Andrew Reid +Praveen Sharma +Yi Zuo +Raphael Bossek +Richard G. Hash +Karl Tredwell +Norm Whitehead +Jiang Wei +Kevin Bryan +Zvika Ashani +Thomas Costa +Dom Monteiro +Jean-Marc Prud'homme +Yury Osadchy +Pavan Mandalkar +Scott Willey +David Calkins +Wu Yongwei +Karen L. Regner +Michel Drapeau +Hans Bos +Kevin Stacy +Liat +Andreas Wagner +Steven Xie +Kris Dekeyser +Matthew Harris +Abhijit Sachdev +Mikael Lundqvist +Peter Hercek +Jay Welch +Angel Roman +Jessica Pistole +Paolo Carlini +Eric Whorter +Vincent Seignole +Jingbin An +Roland Meub +Marek Brudka +Levente Torok +Panagiotis Issaris +Mehrdad Nazari +Pierre Bisaillon +Rob Boyer +Scott Gammill +Bayu Hendradjaya +Randy Hammon +Bill Cassanova +Matthew Corey +Vinod Kumar +Mirek Pabich +Christian Egeler +J.T. Conklin +Dale Hawkins +Bill Hopkins +David Fleeman +Merlin Ran +Kevin Christian +Trina Wisler +Bae-Sik Chon +Benjamin Bronk +Dave Craig +Ofira Shaer +Ciaran Moran +Thomas Rohner +Ken Descoteaux +Claas-Hinrich Dommreis +Yateen Joshi +Sergei Kuchin +Theckla Louchios +Randy Secrest +Patrice Marques +Stanislaw Trytek +Mattias Nilsson +Michael Hollins +Dave Knox +Lance Paine +Brian Waltersdorf +Johann Kandlbauer +Adam Rymarczuk +Heiko Nardmann +J. Abelardo Gutierrez +Roger Sala +Razi Ben-Yehuda +Geo Sebastian +Simon Massey +Rich Shapiro +Ramiro Morales +Andrew Athan +Sebastien Roy +Matthew Townsend +Rick Robinson +John D. Robertson +Paul Lew +Eider Oliveira +Jeff Jones +Jean-Christophe Cota +Paul +Vincent Newsum +Vasili Goutas +Iliyan Jeliazkov +Shlomi Yaakobovich +Todd Marshall +Ciju John +Yuk Ming Kwok +Honorato Saavedra +Domingos Monteiro +Bill Somerville +Bjorn Roald +Michi Henning +Xue Yong Zhi +Ertugrul Sorar +Simone Viani +Rohan Mars +Robert S. Iakobashvili +Chris Hammond +Vincent Spano +Nuno Silva +Greg Bostrum +Dipa Suri +Adam Howell +Steven Frare +Dave Dalapati +Arjun Thounaojam +Michael Altmann +Steven Patrick +Pete McCann +William Nagel +M. C. Gahan +Thia Chang Chao +Gao Xianchao +Huang Rui +Sam Abbe +Mike McGahan +David Michael +Steve D. Baker +Martina Yen +Kim ByeongSu +Doug McCorkle +YiQing Xiong +Peter Falsh +Don Sharp +Arto Jalkanen +Scott Zionic +Diana Ukleja +Shaun Cooley +Aapo Mäkinen +Matt Emerson +Sean Parker +Mark Wilson +Joerg Rockel +Phil Chen +Stefan Morrow +Bruce Elliot +Mitscher Dubreus +Brian O'Connor +Ron Wilson +Peter Grotrian +Alex Ott +D. J. Stachniak +Slava Gorelik +Wolfgang Fischer +Nicholas Todd +Arno Wilhelm +Andreas Schuler +Altaf Aali +Vemund Handeland +Mario Di Giacomo +Raoul Gough +Aaron +Rohini Madhavan +Alan Balasuar +Will Chai +Paul Koch +Dave Giovannini +Dave Varnell +Howard Finer +Mark Callaghan +Hanson Lu +Gavin Yu +Srikanth Gopal +Like Ma +Alvin Msg +Angela Ziegenhorn +Sam Mesh +Felix Perez Alamillo +Steven T. Hatton +Yevgen Galchenko +Timothy Wayne Gomez +Ventimiglia Chere +Frederick Heckel +Ian Zagorskih +Olivier Guérin +Abdel Rigumye +James Damour +Alan Anderson +Vito Bico +Aldo Texier +J H Choi +Mike Chartier +Nikolay Metchev +Anand Rathi +Vitaly Belekhov +Dorian Hileaga +Steve Williams +Paul Friberg

    +Zachi Klopman +Jin Zhi Ye +David Carlton +Feng Li +Michael van der Westhuizen +Jan Zima +Francesco Salvestrini +Sandeep Deshpande +Hubert Talbot +Oh Yoon Sik +Anton Bakanovskiy +Toha Bakanovsky +David Faure +Robert Hancock +Peter Oslej +Yongming Wang +Vadim Iosevich +Mike Knight +Nathan Anderson +Eyal Car +Jonathan Sprinkle +Vladimir Panov +Volker Lukas +Bryan Cassell +Guy Peleg +Wallace Zhang +Richard Ward +Alan Stokes +Rick Taylor +Tobias Herzke +Paul Felix +Jan Ohlenburg +Eric Tiangang +David Hawkins +Michael Klein +Sandro Santos Andrade +Richard Spence +Thomas E Lackey +luxi78 at gmail dot com +John Lilley +Abdullah Sowayan +Nathan Bamford +Zoltan Molnar +William Byrne +Karl Schmitt +Ron DeAngelis +Alex Sheh +Daniel Wagner <__daniel___ at icg do tu-graz dot ac dot at> +Nemoy Michael +Marc Brown +Andrew Keane +Martin Kolleck +Tino Riethmueller +Adam Mitz +Frank Rehberger +Aaron Scamehorn +Alan Kierstead +Sven-Uwe Sieler-Hornke +Spencer Vanroekel +Dan Pozdol +Yauheni Akhotnikau +Axter +Roopa Pundaleeka +JR Andreassen +Mockey Chen +Vincent Joseph +Igor Mammedov +Yuan +Adrian Tulloch +Dmitriy Kuznetsov +Steve Orner +Bob Ronak +Aleksandar Vukajlovic +esIgnacio Alvarez +Sergey Zubarev +Qingbo Cai +David White +Jason Zhang +Mark Paulus +Willie Chen +Martin Cornelius +Mohit Kapoor +David Gibbs +Gary Fernandez +Jason Zhao +Keith Muzzioli +John Black +David Chu +Kevin Hu +Yasser Zabuair +Phlip +Michelle Zheng +Gerolf Reinwardt +Paul Robinson +Popeye Cai +David Highley +Sonicfly Zhou +Phil Billingham +David Giovannini +Paul Daugherty +Robert Schwebel +William Cote +Ben Creech +Michael Reed +Heesuk Shin +Hong Xing +Winston Zhang +Stefan Naewe +Graeme Bell +Eric Danielou +Wei Jiang +Dale Boan +Christoph Schmalhofer +Amnon Berger +Ephy Levy +Don Meek +Liu Qian +Nzer Zaidenberg +Birgit Platt +Andy Salnikov +Hieu Ngyuen +Andriy Gapon +Andy Wang +Zhamak Dehghani +Charles Calkins +Manuel Traut +Drew Reynaud +Artur DeEsperanto +Scott Mitchell +Thomas Vanier +N Johnson +Adam Nagel +Robert Neumann +Venkat +Juraj Ivancic +Daniel Black +Richard Ridgway +Vadym Ridosh +Viola Wang +Ray Lischner +Sergey Kosenko +Pavel Zaichenko +Paul Riley +Nelson Filipe Ferreira Gonçalves +Harry Goldschmitt +Sail Zeng +Markus Henschel +Asif Lodhi +Andrew Schnable +Grigoriy Zeleniy +Yves Alloyer +Waba +Scott Mark +Bjoern Rasmussen +Ian C White +Dennis Chernoivanov +Werner Burger +Andres Hurtis +Joe French +M. Arshad Khan +Hans van't Hag +Roland Sun +Vance Maverick +John McCabe +Andres Oportus +Olof Granered +Eric Hughes +Zhenghao Shi +Alexander Kornienko +Ben Mohlenhoff +Bill Bruns +Dmitriy Nikitinskiy +Ravi Kanth +Ian Roberts +Patrick Spiering +Duane Beck +Kanghee Yoon +Xu Liang +Leo Lei +Jules d'Entremont +Rajiv K. Shukla +Haibin Zhang +Vikram Karandikar +Kim J. Schmock +Venkat Forums +James Marsh +Shaolong Xiang +Christoph Hofmann +Vladimir Zykov +Daniel de Angelis Cordeiro +Hal Black +Peter Korf +Norbert Thoden +Premkumar P +David Beck +Hayim Shaul +Erman Balcik +Torsten Saliwada +Nathan Glasser +Grégor Boirie +Alex Solan +Venkat Sidhabathuni +Nathan Ernst +Kun Niu +Karl-Heinz Wind +Oliver Spang +Hu Yi +Joe Seward +Tom Callaway +Alick Nie +Douglas Atique +Nayeem Khan +Sorin Voicu-Comendant + +I would particularly like to thank Paul Stephenson, who worked with me +at Ericsson in the early 1990's. Paul devised the recursive Makefile +scheme that underlies the ACE distribution and also spent countless +hours with me discussing object-oriented techniques for developing +distributed application frameworks. + +Finally, I'd also like to thank Todd L. Montgomery , +fellow heavy metal head, for fulfilling his quest to get ACE to +compile with GCC! + +In conclusion, our goal is to see ACE+TAO+CIAO continue to evolve and +become a more comprehensive, robust, and well-documented C++ class +library that is freely available to researchers and developers. If +you have any improvements, suggestions, and or comments, we'd like to +hear about it. Please see the instructions in + +$ACE_ROOT/PROBLEM-REPORT-FORM +$TAO_ROOT/PROBLEM-REPORT-FORM +$CIAO_ROOT/PROBLEM-REPORT-FORM + +for instructions on submitting suggestions or fixes. + + Thanks, + + Douglas C. Schmidt + d.schmidt at vanderbilt.edu diff --git a/ACE/VERSION b/ACE/VERSION new file mode 100644 index 00000000000..4dae67f14a1 --- /dev/null +++ b/ACE/VERSION @@ -0,0 +1,11 @@ +This is ACE version 5.6.3, released Thu Feb 21 02:34:37 CST 2008 + +If you have any problems with or questions about ACE, please send +email to the ACE mailing list (ace-users@cs.wustl.edu), using the form +found in the file PROBLEM-REPORT-FORM. To ensure that you see responses, +please do one of the following: + + 1) Subscribe to the ace-users mail list, by sending email with + contents "subscribe ace-users" to majordomo@cs.wustl.edu. + + 2) Or, monitor the comp.soft-sys.ace newsgroup for responses. diff --git a/ACE/ace/ACE.cpp b/ACE/ace/ACE.cpp new file mode 100644 index 00000000000..233ef720f4c --- /dev/null +++ b/ACE/ace/ACE.cpp @@ -0,0 +1,3409 @@ +// $Id$ + +#include "ace/ACE.h" + +#include "ace/Basic_Types.h" +#include "ace/Handle_Set.h" +#include "ace/Auto_Ptr.h" +#include "ace/SString.h" +#include "ace/Version.h" +#include "ace/Message_Block.h" +#include "ace/Log_Msg.h" +#include "ace/OS_NS_sys_select.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_strings.h" +#include "ace/OS_NS_signal.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_sys_resource.h" +#include "ace/OS_NS_sys_wait.h" +#include "ace/OS_NS_sys_time.h" +#include "ace/OS_NS_time.h" +#include "ace/OS_NS_sys_uio.h" +#include "ace/OS_NS_sys_stat.h" +#include "ace/OS_NS_ctype.h" +#include "ace/OS_TLI.h" +#include "ace/Truncate.h" + +#if defined (ACE_VXWORKS) && (ACE_VXWORKS < 0x620) +extern "C" int maxFiles; +#endif /* ACE_VXWORKS */ + +#if !defined (__ACE_INLINE__) +#include "ace/ACE.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_HAS_POLL) && defined (ACE_HAS_LIMITED_SELECT) +# include "ace/OS_NS_poll.h" +#endif /* ACE_HAS_POLL && ACE_HAS_LIMITED_SELECT */ + + +ACE_RCSID (ace, + ACE, + "$Id$") + + +// Open versioned namespace, if enabled by the user. + ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +namespace ACE +{ + // private: + // Used internally so not exported. + + // Size of allocation granularity. + size_t allocation_granularity_ = 0; + + // Size of a VM page. + size_t pagesize_ = 0; + + // Are we debugging ACE? + // Keeps track of whether we're in some global debug mode. + char debug_; +} + + +int +ACE::out_of_handles (int error) +{ + // EMFILE is common to all platforms. + if (error == EMFILE || +#if defined (ACE_WIN32) + // On Win32, we need to check for ENOBUFS also. + error == ENOBUFS || +#elif defined (HPUX) + // On HPUX, we need to check for EADDRNOTAVAIL also. + error == EADDRNOTAVAIL || +#elif defined (linux) + // On linux, we need to check for ENOENT also. + error == ENOENT || + // For RedHat5.2, need to check for EINVAL too. + error == EINVAL || + // Without threads check for EOPNOTSUPP + error == EOPNOTSUPP || +#elif defined (sun) + // On sun, we need to check for ENOSR also. + error == ENOSR || + // Without threads check for ENOTSUP + error == ENOTSUP || +#elif defined (__FreeBSD__) + // On FreeBSD we need to check for EOPNOTSUPP (LinuxThreads) or + // ENOSYS (libc_r threads) also. + error == EOPNOTSUPP || + error == ENOSYS || +#elif defined (__OpenBSD__) + // OpenBSD appears to return EBADF. + error == EBADF || +#elif defined (__sgi) // irix + error == ENOTSUP || +#elif defined (DIGITAL_UNIX) // osf1 + error == ENOTSUP || +#endif /* ACE_WIN32 */ + error == ENFILE) + return 1; + else + return 0; +} + +u_int +ACE::major_version (void) +{ + return ACE_MAJOR_VERSION; +} + +u_int +ACE::minor_version (void) +{ + return ACE_MINOR_VERSION; +} + +u_int +ACE::beta_version (void) +{ + return ACE_BETA_VERSION; +} + +const ACE_TCHAR * +ACE::compiler_name (void) +{ +#ifdef ACE_CC_NAME + return ACE_CC_NAME; +#else + return ACE_TEXT (""); +#endif +} + +u_int +ACE::compiler_major_version (void) +{ +#ifdef ACE_CC_MAJOR_VERSION + return ACE_CC_MAJOR_VERSION; +#else + return 0; +#endif +} + +u_int +ACE::compiler_minor_version (void) +{ +#ifdef ACE_CC_MINOR_VERSION + return ACE_CC_MINOR_VERSION; +#else + return 0; +#endif +} + +u_int +ACE::compiler_beta_version (void) +{ +#ifdef ACE_CC_BETA_VERSION + return ACE_CC_BETA_VERSION; +#else + return 0; +#endif +} + +bool +ACE::debug (void) +{ + static const char* debug = ACE_OS::getenv ("ACE_DEBUG"); + return (ACE::debug_ != 0) ? ACE::debug_ : (debug != 0 ? (*debug != '0'): false); +} + +void +ACE::debug (bool onoff) +{ + ACE::debug_ = onoff; +} + +int +ACE::select (int width, + ACE_Handle_Set *readfds, + ACE_Handle_Set *writefds, + ACE_Handle_Set *exceptfds, + const ACE_Time_Value *timeout) +{ + int result = ACE_OS::select (width, + readfds ? readfds->fdset () : 0, + writefds ? writefds->fdset () : 0, + exceptfds ? exceptfds->fdset () : 0, + timeout); + if (result > 0) + { +# if !defined (ACE_WIN32) + // This isn't needed for Windows... it's a no-op anyway. + if (readfds) + readfds->sync ((ACE_HANDLE) width); + if (writefds) + writefds->sync ((ACE_HANDLE) width); + if (exceptfds) + exceptfds->sync ((ACE_HANDLE) width); +#endif /* ACE_WIN32 */ + } + return result; +} + +int +ACE::select (int width, + ACE_Handle_Set &readfds, + const ACE_Time_Value *timeout) +{ + int result = ACE_OS::select (width, + readfds.fdset (), + 0, + 0, + timeout); + +#if !defined (ACE_WIN32) + if (result > 0) + readfds.sync ((ACE_HANDLE) width); +#endif /* ACE_WIN32 */ + return result; +} + +int +ACE::terminate_process (pid_t pid) +{ +#if defined (ACE_HAS_PHARLAP) + ACE_UNUSED_ARG (pid); + ACE_NOTSUP_RETURN (-1); +#elif defined (ACE_WIN32) + // Create a handle for the given process id. + ACE_HANDLE process_handle = + ::OpenProcess (PROCESS_TERMINATE, + FALSE, // New handle is not inheritable. + pid); + + if (process_handle == ACE_INVALID_HANDLE + || process_handle == 0) + return -1; + else + { + // Kill the process associated with process_handle. + BOOL terminate_result = + ::TerminateProcess (process_handle, 0); + // Free up the kernel resources. + ACE_OS::close (process_handle); + return terminate_result ? 0 : -1; + } +#else + return ACE_OS::kill (pid, 9); +#endif /* ACE_HAS_PHARLAP */ +} + +int +ACE::process_active (pid_t pid) +{ +#if !defined(ACE_WIN32) + int retval = ACE_OS::kill (pid, 0); + + if (retval == 0) + return 1; + else if (errno == ESRCH) + return 0; + else + return -1; +#else + // Create a handle for the given process id. + ACE_HANDLE process_handle = + ::OpenProcess (PROCESS_QUERY_INFORMATION, FALSE, pid); + if (process_handle == ACE_INVALID_HANDLE + || process_handle == 0) + return 0; + else + { + DWORD status; + int result = 1; + if (::GetExitCodeProcess (process_handle, + &status) == 0 + || status != STILL_ACTIVE) + result = 0; + + ::CloseHandle (process_handle); + return result; + } +#endif /* !ACE_WIN32 */ +} + +const ACE_TCHAR * +ACE::execname (const ACE_TCHAR *old_name) +{ +#if defined (ACE_WIN32) + const ACE_TCHAR *suffix = ACE_OS::strrchr (old_name, ACE_TEXT ('.')); + if (suffix == 0 || ACE_OS::strcasecmp (suffix, ACE_TEXT (".exe")) != 0) + { + ACE_TCHAR *new_name; + + size_t size = + ACE_OS::strlen (old_name) + + ACE_OS::strlen (ACE_TEXT (".exe")) + + 1; + + ACE_NEW_RETURN (new_name, + ACE_TCHAR[size], + 0); + ACE_TCHAR *end = new_name; + + end = ACE_OS::strecpy (new_name, old_name); + + // Concatenate the .exe suffix onto the end of the executable. + // end points _after_ the terminating nul. + ACE_OS::strcpy (end - 1, ACE_TEXT (".exe")); + + return new_name; + } +#endif /* ACE_WIN32 */ + return old_name; +} + +u_long +ACE::hash_pjw (const char *str, size_t len) +{ + u_long hash = 0; + + for (size_t i = 0; i < len; i++) + { + const char temp = str[i]; + hash = (hash << 4) + (temp * 13); + + u_long g = hash & 0xf0000000; + + if (g) + { + hash ^= (g >> 24); + hash ^= g; + } + } + + return hash; +} + +u_long +ACE::hash_pjw (const char *str) +{ + return ACE::hash_pjw (str, ACE_OS::strlen (str)); +} + +#if defined (ACE_HAS_WCHAR) +u_long +ACE::hash_pjw (const wchar_t *str, size_t len) +{ + u_long hash = 0; + + for (size_t i = 0; i < len; i++) + { + // @@ UNICODE: Does this function do the correct thing with wchar's? + + const wchar_t temp = str[i]; + hash = (hash << 4) + (temp * 13); + + u_long g = hash & 0xf0000000; + + if (g) + { + hash ^= (g >> 24); + hash ^= g; + } + } + + return hash; +} + +u_long +ACE::hash_pjw (const wchar_t *str) +{ + return ACE::hash_pjw (str, ACE_OS::strlen (str)); +} +#endif /* ACE_HAS_WCHAR */ + +#if !defined (ACE_HAS_WINCE) +ACE_TCHAR * +ACE::strenvdup (const ACE_TCHAR *str) +{ + ACE_TRACE ("ACE::strenvdup"); + + return ACE_OS::strenvdup (str); +} +#endif /* ACE_HAS_WINCE */ + +/* + +Examples: + +Source NT UNIX +================================================================== +netsvc netsvc.dll libnetsvc.so +(PATH will be (LD_LIBRARY_PATH +evaluated) evaluated) + +libnetsvc.dll libnetsvc.dll libnetsvc.dll + warning +netsvc.so netsvc.so + warning libnetsvc.so + +..\../libs/netsvc ..\..\libs\netsvc.dll ../../libs/netsvc.so +(absolute path used) (absolute path used) + +*/ + +const ACE_TCHAR * +ACE::basename (const ACE_TCHAR *pathname, ACE_TCHAR delim) +{ + ACE_TRACE ("ACE::basename"); + const ACE_TCHAR *temp = ACE_OS::strrchr (pathname, delim); + + if (temp == 0) + return pathname; + else + return temp + 1; +} + +const ACE_TCHAR * +ACE::dirname (const ACE_TCHAR *pathname, ACE_TCHAR delim) +{ + ACE_TRACE ("ACE::dirname"); + static ACE_TCHAR return_dirname[MAXPATHLEN + 1]; + + const ACE_TCHAR *temp = ACE_OS::strrchr (pathname, delim); + + if (temp == 0) + { + return_dirname[0] = '.'; + return_dirname[1] = '\0'; + + return return_dirname; + } + else + { + // When the len is truncated, there are problems! This should + // not happen in normal circomstances + size_t len = temp - pathname + 1; + if (len > (sizeof return_dirname / sizeof (ACE_TCHAR))) + len = sizeof return_dirname / sizeof (ACE_TCHAR); + + ACE_OS::strsncpy (return_dirname, + pathname, + len); + return return_dirname; + } +} + +ssize_t +ACE::recv (ACE_HANDLE handle, + void *buf, + size_t len, + int flags, + const ACE_Time_Value *timeout) +{ + if (timeout == 0) + return ACE_OS::recv (handle, (char *) buf, len, flags); + else + { + int val = 0; + if (ACE::enter_recv_timedwait (handle, timeout, val) ==-1) + return -1; + else + { + ssize_t bytes_transferred = + ACE_OS::recv (handle, (char *) buf, len, flags); + ACE::restore_non_blocking_mode (handle, val); + return bytes_transferred; + } + } +} + +#if defined (ACE_HAS_TLI) + +ssize_t +ACE::t_rcv (ACE_HANDLE handle, + void *buf, + size_t len, + int *flags, + const ACE_Time_Value *timeout) +{ + if (timeout == 0) + return ACE_OS::t_rcv (handle, (char *) buf, len, flags); + else + { + int val = 0; + if (ACE::enter_recv_timedwait (handle, timeout, val) ==-1) + return -1; + else + { + ssize_t bytes_transferred = + ACE_OS::t_rcv (handle, (char *) buf, len, flags); + ACE::restore_non_blocking_mode (handle, val); + return bytes_transferred; + } + } +} + +#endif /* ACE_HAS_TLI */ + +ssize_t +ACE::recv (ACE_HANDLE handle, + void *buf, + size_t n, + const ACE_Time_Value *timeout) +{ + if (timeout == 0) + return ACE::recv_i (handle, buf, n); + else + { + int val = 0; + if (ACE::enter_recv_timedwait (handle, timeout, val) == -1) + return -1; + else + { + ssize_t bytes_transferred = ACE::recv_i (handle, buf, n); + ACE::restore_non_blocking_mode (handle, val); + return bytes_transferred; + } + } +} + +ssize_t +ACE::recvmsg (ACE_HANDLE handle, + struct msghdr *msg, + int flags, + const ACE_Time_Value *timeout) +{ + if (timeout == 0) + return ACE_OS::recvmsg (handle, msg, flags); + else + { + int val = 0; + if (ACE::enter_recv_timedwait (handle, timeout, val) == -1) + return -1; + else + { + ssize_t bytes_transferred = ACE_OS::recvmsg (handle, msg, flags); + ACE::restore_non_blocking_mode (handle, val); + return bytes_transferred; + } + } +} + +ssize_t +ACE::recvfrom (ACE_HANDLE handle, + char *buf, + int len, + int flags, + struct sockaddr *addr, + int *addrlen, + const ACE_Time_Value *timeout) +{ + if (timeout == 0) + return ACE_OS::recvfrom (handle, buf, len, flags, addr, addrlen); + else + { + int val = 0; + if (ACE::enter_recv_timedwait (handle, timeout, val) == -1) + return -1; + else + { + ssize_t bytes_transferred = + ACE_OS::recvfrom (handle, buf, len, flags, addr, addrlen); + ACE::restore_non_blocking_mode (handle, val); + return bytes_transferred; + } + } +} + +ssize_t +ACE::recv_n_i (ACE_HANDLE handle, + void *buf, + size_t len, + int flags, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + ssize_t n; + + for (bytes_transferred = 0; + bytes_transferred < len; + bytes_transferred += n) + { + // Try to transfer as much of the remaining data as possible. + n = ACE_OS::recv (handle, + static_cast (buf) + bytes_transferred, + len - bytes_transferred, + flags); + // Check EOF. + if (n == 0) + return 0; + + // Check for other errors. + if (n == -1) + { + // Check for possible blocking. + if (errno == EWOULDBLOCK) + { + // Wait for the blocking to subside. + int result = ACE::handle_read_ready (handle, + 0); + + // Did select() succeed? + if (result != -1) + { + // Blocking subsided. Continue data transfer. + n = 0; + continue; + } + } + + // Other data transfer or select() failures. + return -1; + } + } + + return static_cast (bytes_transferred); +} + +ssize_t +ACE::recv_n_i (ACE_HANDLE handle, + void *buf, + size_t len, + int flags, + const ACE_Time_Value *timeout, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + ssize_t n; + ssize_t result = 0; + int error = 0; + + int val = 0; + ACE::record_and_set_non_blocking_mode (handle, val); + + for (bytes_transferred = 0; + bytes_transferred < len; + bytes_transferred += n) + { + // Try to transfer as much of the remaining data as possible. + // Since the socket is in non-blocking mode, this call will not + // block. + n = ACE_OS::recv (handle, + static_cast (buf) + bytes_transferred, + len - bytes_transferred, + flags); + + // Check for errors. + if (n == 0 || + n == -1) + { + // Check for possible blocking. + if (n == -1 && + errno == EWOULDBLOCK) + { + // Wait upto for the blocking to subside. + int rtn = ACE::handle_read_ready (handle, + timeout); + + // Did select() succeed? + if (rtn != -1) + { + // Blocking subsided in period. Continue + // data transfer. + n = 0; + continue; + } + } + + // Wait in select() timed out or other data transfer or + // select() failures. + error = 1; + result = n; + break; + } + } + + ACE::restore_non_blocking_mode (handle, val); + + if (error) + return result; + else + return static_cast (bytes_transferred); +} + +#if defined (ACE_HAS_TLI) + +ssize_t +ACE::t_rcv_n_i (ACE_HANDLE handle, + void *buf, + size_t len, + int *flags, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + ssize_t n; + + for (bytes_transferred = 0; + bytes_transferred < len; + bytes_transferred += n) + { + // Try to transfer as much of the remaining data as possible. + n = ACE_OS::t_rcv (handle, + (char *) buf + bytes_transferred, + len - bytes_transferred, + flags); + // Check EOF. + if (n == 0) + return 0; + + // Check for other errors. + if (n == -1) + { + // Check for possible blocking. + if (errno == EWOULDBLOCK) + { + // Wait for the blocking to subside. + int result = ACE::handle_read_ready (handle, + 0); + + // Did select() succeed? + if (result != -1) + { + // Blocking subsided. Continue data transfer. + n = 0; + continue; + } + } + + // Other data transfer or select() failures. + return -1; + } + } + + return bytes_transferred; +} + +ssize_t +ACE::t_rcv_n_i (ACE_HANDLE handle, + void *buf, + size_t len, + int *flags, + const ACE_Time_Value *timeout, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + ssize_t n; + ssize_t result = 0; + int error = 0; + + int val = 0; + ACE::record_and_set_non_blocking_mode (handle, val); + + for (bytes_transferred = 0; + bytes_transferred < len; + bytes_transferred += n) + { + // Try to transfer as much of the remaining data as possible. + // Since the socket is in non-blocking mode, this call will not + // block. + n = ACE_OS::t_rcv (handle, + (char *) buf + bytes_transferred, + len - bytes_transferred, + flags); + + // Check for errors. + if (n == 0 || + n == -1) + { + // Check for possible blocking. + if (n == -1 && + errno == EWOULDBLOCK) + { + // Wait upto for the blocking to subside. + int rtn = ACE::handle_read_ready (handle, + timeout); + + // Did select() succeed? + if (rtn != -1) + { + // Blocking subsided in period. Continue + // data transfer. + n = 0; + continue; + } + } + + // Wait in select() timed out or other data transfer or + // select() failures. + error = 1; + result = n; + break; + } + } + + ACE::restore_non_blocking_mode (handle, val); + + if (error) + return result; + else + return bytes_transferred; +} + +#endif /* ACE_HAS_TLI */ + +ssize_t +ACE::recv_n_i (ACE_HANDLE handle, + void *buf, + size_t len, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + ssize_t n; + + for (bytes_transferred = 0; + bytes_transferred < len; + bytes_transferred += n) + { + // Try to transfer as much of the remaining data as possible. + n = ACE::recv_i (handle, + static_cast (buf) + bytes_transferred, + len - bytes_transferred); + // Check EOF. + if (n == 0) + { + return 0; + } + // Check for other errors. + if (n == -1) + { + // Check for possible blocking. + if (errno == EWOULDBLOCK) + { + // Wait for the blocking to subside. + int result = ACE::handle_read_ready (handle, + 0); + + // Did select() succeed? + if (result != -1) + { + // Blocking subsided. Continue data transfer. + n = 0; + continue; + } + } + + // Other data transfer or select() failures. + return -1; + } + } + + return static_cast (bytes_transferred); +} + +ssize_t +ACE::recv_n_i (ACE_HANDLE handle, + void *buf, + size_t len, + const ACE_Time_Value *timeout, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + ssize_t n; + ssize_t result = 0; + int error = 0; + + int val = 0; + ACE::record_and_set_non_blocking_mode (handle, val); + + for (bytes_transferred = 0; + bytes_transferred < len; + bytes_transferred += n) + { + // Try to transfer as much of the remaining data as possible. + // Since the socket is in non-blocking mode, this call will not + // block. + n = ACE::recv_i (handle, + static_cast (buf) + bytes_transferred, + len - bytes_transferred); + + // Check for errors. + if (n == 0 || + n == -1) + { + // Check for possible blocking. + if (n == -1 && + errno == EWOULDBLOCK) + { + // Wait upto for the blocking to subside. + int rtn = ACE::handle_read_ready (handle, + timeout); + + // Did select() succeed? + if (rtn != -1) + { + // Blocking subsided in period. Continue + // data transfer. + n = 0; + continue; + } + } + + // Wait in select() timed out or other data transfer or + // select() failures. + error = 1; + result = n; + break; + } + } + + ACE::restore_non_blocking_mode (handle, val); + + if (error) + return result; + else + return static_cast (bytes_transferred); +} + +// This is basically an interface to ACE_OS::readv, that doesn't use +// the struct iovec explicitly. The ... can be passed as an arbitrary +// number of (char *ptr, int len) tuples. However, the count N is the +// *total* number of trailing arguments, *not* a couple of the number +// of tuple pairs! + +ssize_t +ACE::recv (ACE_HANDLE handle, size_t n, ...) +{ + va_list argp; + int total_tuples = static_cast (n / 2); + iovec *iovp; +#if defined (ACE_HAS_ALLOCA) + iovp = (iovec *) alloca (total_tuples * sizeof (iovec)); +#else + ACE_NEW_RETURN (iovp, + iovec[total_tuples], + -1); +#endif /* !defined (ACE_HAS_ALLOCA) */ + + va_start (argp, n); + + for (int i = 0; i < total_tuples; i++) + { + iovp[i].iov_base = va_arg (argp, char *); + iovp[i].iov_len = va_arg (argp, int); + } + + ssize_t result = ACE_OS::recvv (handle, iovp, total_tuples); +#if !defined (ACE_HAS_ALLOCA) + delete [] iovp; +#endif /* !defined (ACE_HAS_ALLOCA) */ + va_end (argp); + return result; +} + +ssize_t +ACE::recvv (ACE_HANDLE handle, + iovec *iov, + int iovcnt, + const ACE_Time_Value *timeout) +{ + if (timeout == 0) + return ACE_OS::recvv (handle, iov, iovcnt); + else + { + int val = 0; + if (ACE::enter_recv_timedwait (handle, timeout, val) == -1) + return -1; + else + { + ssize_t bytes_transferred = ACE_OS::recvv (handle, iov, iovcnt); + ACE::restore_non_blocking_mode (handle, val); + return bytes_transferred; + } + } +} + +ssize_t +ACE::recvv_n_i (ACE_HANDLE handle, + iovec *iov, + int iovcnt, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + bytes_transferred = 0; + + for (int s = 0; + s < iovcnt; + ) + { + // Try to transfer as much of the remaining data as possible. + ssize_t n = ACE_OS::recvv (handle, + iov + s, + iovcnt - s); + // Check EOF. + if (n == 0) + return 0; + + // Check for other errors. + if (n == -1) + { + // Check for possible blocking. + if (errno == EWOULDBLOCK) + { + // Wait for the blocking to subside. + int result = ACE::handle_read_ready (handle, + 0); + + // Did select() succeed? + if (result != -1) + { + // Blocking subsided. Continue data transfer. + n = 0; + continue; + } + } + + // Other data transfer or select() failures. + return -1; + } + + for (bytes_transferred += n; + s < iovcnt + && n >= static_cast (iov[s].iov_len); + s++) + n -= iov[s].iov_len; + + if (n != 0) + { + char *base = static_cast (iov[s].iov_base); + iov[s].iov_base = base + n; + iov[s].iov_len = iov[s].iov_len - n; + } + } + + return bytes_transferred; +} + +ssize_t +ACE::recvv_n_i (ACE_HANDLE handle, + iovec *iov, + int iovcnt, + const ACE_Time_Value *timeout, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + bytes_transferred = 0; + ssize_t result = 0; + int error = 0; + + int val = 0; + ACE::record_and_set_non_blocking_mode (handle, val); + + for (int s = 0; + s < iovcnt; + ) + { + // Try to transfer as much of the remaining data as possible. + // Since the socket is in non-blocking mode, this call will not + // block. + ssize_t n = ACE_OS::recvv (handle, + iov + s, + iovcnt - s); + + // Check for errors. + if (n == 0 || + n == -1) + { + // Check for possible blocking. + if (n == -1 && + errno == EWOULDBLOCK) + { + // Wait upto for the blocking to subside. + int rtn = ACE::handle_read_ready (handle, + timeout); + + // Did select() succeed? + if (rtn != -1) + { + // Blocking subsided in period. Continue + // data transfer. + n = 0; + continue; + } + } + + // Wait in select() timed out or other data transfer or + // select() failures. + error = 1; + result = n; + break; + } + + for (bytes_transferred += n; + s < iovcnt + && n >= static_cast (iov[s].iov_len); + s++) + n -= iov[s].iov_len; + + if (n != 0) + { + char *base = reinterpret_cast (iov[s].iov_base); + iov[s].iov_base = base + n; + iov[s].iov_len = iov[s].iov_len - n; + } + } + + ACE::restore_non_blocking_mode (handle, val); + + if (error) + return result; + else + return bytes_transferred; +} + +ssize_t +ACE::recv_n (ACE_HANDLE handle, + ACE_Message_Block *message_block, + const ACE_Time_Value *timeout, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + bytes_transferred = 0; + + iovec iov[ACE_IOV_MAX]; + int iovcnt = 0; + + while (message_block != 0) + { + // Our current message block chain. + const ACE_Message_Block *current_message_block = message_block; + + while (current_message_block != 0) + { + size_t current_message_block_length = + current_message_block->length (); + char *this_rd_ptr = current_message_block->rd_ptr (); + + // Check if this block has any space for incoming data. + while (current_message_block_length > 0) + { + u_long const this_chunk_length = + ACE_Utils::truncate_cast ( + current_message_block_length); + + // Collect the data in the iovec. + iov[iovcnt].iov_base = this_rd_ptr; + iov[iovcnt].iov_len = this_chunk_length; + current_message_block_length -= this_chunk_length; + this_rd_ptr += this_chunk_length; + + // Increment iovec counter. + ++iovcnt; + + // The buffer is full make a OS call. @@ TODO find a way to + // find ACE_IOV_MAX for platforms that do not define it rather + // than simply setting ACE_IOV_MAX to some arbitrary value such + // as 16. + if (iovcnt == ACE_IOV_MAX) + { + size_t current_transfer = 0; + + ssize_t const result = ACE::recvv_n (handle, + iov, + iovcnt, + timeout, + ¤t_transfer); + + // Add to total bytes transferred. + bytes_transferred += current_transfer; + + // Errors. + if (result == -1 || result == 0) + return result; + + // Reset iovec counter. + iovcnt = 0; + } + } + + // Select the next message block in the chain. + current_message_block = current_message_block->cont (); + } + + // Selection of the next message block chain. + message_block = message_block->next (); + } + + // Check for remaining buffers to be sent. This will happen when + // ACE_IOV_MAX is not a multiple of the number of message blocks. + if (iovcnt != 0) + { + size_t current_transfer = 0; + + ssize_t const result = ACE::recvv_n (handle, + iov, + iovcnt, + timeout, + ¤t_transfer); + + // Add to total bytes transferred. + bytes_transferred += current_transfer; + + // Errors. + if (result == -1 || result == 0) + return result; + } + + // Return total bytes transferred. + return bytes_transferred; +} + +ssize_t +ACE::send (ACE_HANDLE handle, + const void *buf, + size_t n, + int flags, + const ACE_Time_Value *timeout) +{ + if (timeout == 0) + return ACE_OS::send (handle, (const char *) buf, n, flags); + else + { + int val = 0; + if (ACE::enter_send_timedwait (handle, timeout, val) == -1) + return -1; + else + { + ssize_t bytes_transferred = ACE_OS::send (handle, (const char *) buf, n, flags); + ACE::restore_non_blocking_mode (handle, val); + return bytes_transferred; + } + } +} + +#if defined (ACE_HAS_TLI) + +ssize_t +ACE::t_snd (ACE_HANDLE handle, + const void *buf, + size_t n, + int flags, + const ACE_Time_Value *timeout) +{ + if (timeout == 0) + return ACE_OS::t_snd (handle, (const char *) buf, n, flags); + else + { + int val = 0; + if (ACE::enter_send_timedwait (handle, timeout, val) == -1) + return -1; + else + { + ssize_t bytes_transferred = ACE_OS::t_snd (handle, (const char *) buf, n, flags); + ACE::restore_non_blocking_mode (handle, val); + return bytes_transferred; + } + } +} + +#endif /* ACE_HAS_TLI */ + +ssize_t +ACE::send (ACE_HANDLE handle, + const void *buf, + size_t n, + const ACE_Time_Value *timeout) +{ + if (timeout == 0) + return ACE::send_i (handle, buf, n); + else + { + int val = 0; + if (ACE::enter_send_timedwait (handle, timeout, val) == -1) + return -1; + else + { + ssize_t bytes_transferred = ACE::send_i (handle, buf, n); + ACE::restore_non_blocking_mode (handle, val); + return bytes_transferred; + } + } +} + +ssize_t +ACE::sendmsg (ACE_HANDLE handle, + const struct msghdr *msg, + int flags, + const ACE_Time_Value *timeout) +{ + if (timeout == 0) + return ACE_OS::sendmsg (handle, msg, flags); + else + { + int val = 0; + if (ACE::enter_send_timedwait (handle, timeout, val) == -1) + return -1; + else + { + ssize_t bytes_transferred = ACE_OS::sendmsg (handle, msg, flags); + ACE::restore_non_blocking_mode (handle, val); + return bytes_transferred; + } + } +} + +ssize_t +ACE::sendto (ACE_HANDLE handle, + const char *buf, + int len, + int flags, + const struct sockaddr *addr, + int addrlen, + const ACE_Time_Value *timeout) +{ + if (timeout == 0) + return ACE_OS::sendto (handle, buf, len, flags, addr, addrlen); + else + { + int val = 0; + if (ACE::enter_send_timedwait (handle, timeout, val) == -1) + return -1; + else + { + ssize_t bytes_transferred = + ACE_OS::sendto (handle, buf, len, flags, addr, addrlen); + ACE::restore_non_blocking_mode (handle, val); + return bytes_transferred; + } + } +} + +ssize_t +ACE::send_n_i (ACE_HANDLE handle, + const void *buf, + size_t len, + int flags, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + ssize_t n; + + for (bytes_transferred = 0; + bytes_transferred < len; + bytes_transferred += n) + { + // Try to transfer as much of the remaining data as possible. + n = ACE_OS::send (handle, + (char *) buf + bytes_transferred, + len - bytes_transferred, + flags); + // Check EOF. + if (n == 0) + return 0; + + // Check for other errors. + if (n == -1) + { + // Check for possible blocking. +#if defined (ACE_WIN32) + if (errno == EWOULDBLOCK) // If enobufs no need to loop +#else + if (errno == EWOULDBLOCK || errno == ENOBUFS) +#endif /* ACE_WIN32 */ + { + // Wait for the blocking to subside. + int result = ACE::handle_write_ready (handle, + 0); + + // Did select() succeed? + if (result != -1) + { + // Blocking subsided. Continue data transfer. + n = 0; + continue; + } + } + + // Other data transfer or select() failures. + return -1; + } + } + + return bytes_transferred; +} + +ssize_t +ACE::send_n_i (ACE_HANDLE handle, + const void *buf, + size_t len, + int flags, + const ACE_Time_Value *timeout, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + ssize_t n; + ssize_t result = 0; + int error = 0; + + int val = 0; + ACE::record_and_set_non_blocking_mode (handle, val); + + for (bytes_transferred = 0; + bytes_transferred < len; + bytes_transferred += n) + { + // Try to transfer as much of the remaining data as possible. + // Since the socket is in non-blocking mode, this call will not + // block. + n = ACE_OS::send (handle, + (char *) buf + bytes_transferred, + len - bytes_transferred, + flags); + + // Check for errors. + if (n == 0 || + n == -1) + { + // Check for possible blocking. + if (n == -1 && + errno == EWOULDBLOCK || errno == ENOBUFS) + { + // Wait upto for the blocking to subside. + int rtn = ACE::handle_write_ready (handle, + timeout); + + // Did select() succeed? + if (rtn != -1) + { + // Blocking subsided in period. Continue + // data transfer. + n = 0; + continue; + } + } + + // Wait in select() timed out or other data transfer or + // select() failures. + error = 1; + result = n; + break; + } + } + + ACE::restore_non_blocking_mode (handle, val); + + if (error) + return result; + else + return bytes_transferred; +} + +#if defined (ACE_HAS_TLI) + +ssize_t +ACE::t_snd_n_i (ACE_HANDLE handle, + const void *buf, + size_t len, + int flags, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + ssize_t n; + + for (bytes_transferred = 0; + bytes_transferred < len; + bytes_transferred += n) + { + // Try to transfer as much of the remaining data as possible. + n = ACE_OS::t_snd (handle, + (char *) buf + bytes_transferred, + len - bytes_transferred, + flags); + // Check EOF. + if (n == 0) + return 0; + + // Check for other errors. + if (n == -1) + { + // Check for possible blocking. + if (errno == EWOULDBLOCK || errno == ENOBUFS) + { + // Wait for the blocking to subside. + int result = ACE::handle_write_ready (handle, + 0); + + // Did select() succeed? + if (result != -1) + { + // Blocking subsided. Continue data transfer. + n = 0; + continue; + } + } + + // Other data transfer or select() failures. + return -1; + } + } + + return bytes_transferred; +} + +ssize_t +ACE::t_snd_n_i (ACE_HANDLE handle, + const void *buf, + size_t len, + int flags, + const ACE_Time_Value *timeout, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + ssize_t n; + ssize_t result = 0; + int error = 0; + + int val = 0; + ACE::record_and_set_non_blocking_mode (handle, val); + + for (bytes_transferred = 0; + bytes_transferred < len; + bytes_transferred += n) + { + // Try to transfer as much of the remaining data as possible. + // Since the socket is in non-blocking mode, this call will not + // block. + n = ACE_OS::t_snd (handle, + (char *) buf + bytes_transferred, + len - bytes_transferred, + flags); + + // Check for errors. + if (n == 0 || + n == -1) + { + // Check for possible blocking. + if (n == -1 && + errno == EWOULDBLOCK || errno == ENOBUFS) + { + // Wait upto for the blocking to subside. + int rtn = ACE::handle_write_ready (handle, + timeout); + + // Did select() succeed? + if (rtn != -1) + { + // Blocking subsided in period. Continue + // data transfer. + n = 0; + continue; + } + } + + // Wait in select() timed out or other data transfer or + // select() failures. + error = 1; + result = n; + break; + } + } + + ACE::restore_non_blocking_mode (handle, val); + + if (error) + return result; + else + return bytes_transferred; +} + +#endif /* ACE_HAS_TLI */ + +ssize_t +ACE::send_n_i (ACE_HANDLE handle, + const void *buf, + size_t len, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + ssize_t n; + + for (bytes_transferred = 0; + bytes_transferred < len; + bytes_transferred += n) + { + // Try to transfer as much of the remaining data as possible. + n = ACE::send_i (handle, + (char *) buf + bytes_transferred, + len - bytes_transferred); + // Check EOF. + if (n == 0) + return 0; + + // Check for other errors. + if (n == -1) + { + // Check for possible blocking. + if (errno == EWOULDBLOCK || errno == ENOBUFS) + { + // Wait for the blocking to subside. + int result = ACE::handle_write_ready (handle, + 0); + + // Did select() succeed? + if (result != -1) + { + // Blocking subsided. Continue data transfer. + n = 0; + continue; + } + } + + // Other data transfer or select() failures. + return -1; + } + } + + return bytes_transferred; +} + +ssize_t +ACE::send_n_i (ACE_HANDLE handle, + const void *buf, + size_t len, + const ACE_Time_Value *timeout, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + ssize_t n; + ssize_t result = 0; + int error = 0; + + int val = 0; + ACE::record_and_set_non_blocking_mode (handle, val); + + for (bytes_transferred = 0; + bytes_transferred < len; + bytes_transferred += n) + { + // Try to transfer as much of the remaining data as possible. + // Since the socket is in non-blocking mode, this call will not + // block. + n = ACE::send_i (handle, + (char *) buf + bytes_transferred, + len - bytes_transferred); + + // Check for errors. + if (n == 0 || + n == -1) + { + // Check for possible blocking. + if (n == -1 && + errno == EWOULDBLOCK || errno == ENOBUFS) + { + // Wait upto for the blocking to subside. + int rtn = ACE::handle_write_ready (handle, + timeout); + + // Did select() succeed? + if (rtn != -1) + { + // Blocking subsided in period. Continue + // data transfer. + n = 0; + continue; + } + } + + // Wait in select() timed out or other data transfer or + // select() failures. + error = 1; + result = n; + break; + } + } + + ACE::restore_non_blocking_mode (handle, val); + + if (error) + return result; + else + return bytes_transferred; +} + +// Send N char *ptrs and int lengths. Note that the char *'s precede +// the ints (basically, an varargs version of writev). The count N is +// the *total* number of trailing arguments, *not* a couple of the +// number of tuple pairs! + +ssize_t +ACE::send (ACE_HANDLE handle, size_t n, ...) +{ + va_list argp; + int total_tuples = static_cast (n / 2); + iovec *iovp; +#if defined (ACE_HAS_ALLOCA) + iovp = (iovec *) alloca (total_tuples * sizeof (iovec)); +#else + ACE_NEW_RETURN (iovp, + iovec[total_tuples], + -1); +#endif /* !defined (ACE_HAS_ALLOCA) */ + + va_start (argp, n); + + for (int i = 0; i < total_tuples; i++) + { + iovp[i].iov_base = va_arg (argp, char *); + iovp[i].iov_len = va_arg (argp, int); + } + + ssize_t result = ACE_OS::sendv (handle, iovp, total_tuples); +#if !defined (ACE_HAS_ALLOCA) + delete [] iovp; +#endif /* !defined (ACE_HAS_ALLOCA) */ + va_end (argp); + return result; +} + +ssize_t +ACE::sendv (ACE_HANDLE handle, + const iovec *iov, + int iovcnt, + const ACE_Time_Value *timeout) +{ + if (timeout == 0) + return ACE_OS::sendv (handle, iov, iovcnt); + else + { + int val = 0; + if (ACE::enter_send_timedwait (handle, timeout, val) == -1) + return -1; + else + { + ssize_t bytes_transferred = ACE_OS::sendv (handle, iov, iovcnt); + ACE::restore_non_blocking_mode (handle, val); + return bytes_transferred; + } + } +} + +ssize_t +ACE::sendv_n_i (ACE_HANDLE handle, + const iovec *i, + int iovcnt, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + bytes_transferred = 0; + + iovec *iov = const_cast (i); + + for (int s = 0; + s < iovcnt; + ) + { + // Try to transfer as much of the remaining data as possible. + ssize_t n = ACE_OS::sendv (handle, + iov + s, + iovcnt - s); + // Check EOF. + if (n == 0) + return 0; + + // Check for other errors. + if (n == -1) + { + // Check for possible blocking. + if (errno == EWOULDBLOCK || errno == ENOBUFS) + { + // Wait for the blocking to subside. + int result = ACE::handle_write_ready (handle, + 0); + + // Did select() succeed? + if (result != -1) + { + // Blocking subsided. Continue data transfer. + n = 0; + continue; + } + } + + // Other data transfer or select() failures. + return -1; + } + + for (bytes_transferred += n; + s < iovcnt + && n >= static_cast (iov[s].iov_len); + s++) + n -= iov[s].iov_len; + + if (n != 0) + { + char *base = reinterpret_cast (iov[s].iov_base); + iov[s].iov_base = base + n; + iov[s].iov_len = iov[s].iov_len - n; + } + } + + return bytes_transferred; +} + +ssize_t +ACE::sendv_n_i (ACE_HANDLE handle, + const iovec *i, + int iovcnt, + const ACE_Time_Value *timeout, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + bytes_transferred = 0; + ssize_t result = 0; + int error = 0; + + int val = 0; + ACE::record_and_set_non_blocking_mode (handle, val); + + iovec *iov = const_cast (i); + + for (int s = 0; + s < iovcnt; + ) + { + // Try to transfer as much of the remaining data as possible. + // Since the socket is in non-blocking mode, this call will not + // block. + ssize_t n = ACE_OS::sendv (handle, + iov + s, + iovcnt - s); + + // Check for errors. + if (n == 0 || + n == -1) + { + // Check for possible blocking. + if (n == -1 && + errno == EWOULDBLOCK || errno == ENOBUFS) + { + // Wait upto for the blocking to subside. + int rtn = ACE::handle_write_ready (handle, + timeout); + + // Did select() succeed? + if (rtn != -1) + { + // Blocking subsided in period. Continue + // data transfer. + n = 0; + continue; + } + } + + // Wait in select() timed out or other data transfer or + // select() failures. + error = 1; + result = n; + break; + } + + for (bytes_transferred += n; + s < iovcnt + && n >= static_cast (iov[s].iov_len); + s++) + n -= iov[s].iov_len; + + if (n != 0) + { + char *base = reinterpret_cast (iov[s].iov_base); + iov[s].iov_base = base + n; + iov[s].iov_len = iov[s].iov_len - n; + } + } + + ACE::restore_non_blocking_mode (handle, val); + + if (error) + return result; + else + return bytes_transferred; +} + +ssize_t +ACE::write_n (ACE_HANDLE handle, + const ACE_Message_Block *message_block, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + bytes_transferred = 0; + + iovec iov[ACE_IOV_MAX]; + int iovcnt = 0; + + while (message_block != 0) + { + // Our current message block chain. + const ACE_Message_Block *current_message_block = message_block; + + while (current_message_block != 0) + { + size_t current_message_block_length = + current_message_block->length (); + char *this_block_ptr = current_message_block->rd_ptr (); + + // Check if this block has any data to be sent. + while (current_message_block_length > 0) + { + u_long const this_chunk_length = + ACE_Utils::truncate_cast ( + current_message_block_length); + + // Collect the data in the iovec. + iov[iovcnt].iov_base = this_block_ptr; + iov[iovcnt].iov_len = this_chunk_length; + current_message_block_length -= this_chunk_length; + this_block_ptr += this_chunk_length; + + // Increment iovec counter. + ++iovcnt; + + // The buffer is full make a OS call. @@ TODO find a way to + // find ACE_IOV_MAX for platforms that do not define it rather + // than simply setting ACE_IOV_MAX to some arbitrary value such + // as 16. + if (iovcnt == ACE_IOV_MAX) + { + size_t current_transfer = 0; + + ssize_t const result = ACE::writev_n (handle, + iov, + iovcnt, + ¤t_transfer); + + // Add to total bytes transferred. + bytes_transferred += current_transfer; + + // Errors. + if (result == -1 || result == 0) + return result; + + // Reset iovec counter. + iovcnt = 0; + } + } + + // Select the next message block in the chain. + current_message_block = current_message_block->cont (); + } + + // Selection of the next message block chain. + message_block = message_block->next (); + } + + // Check for remaining buffers to be sent. This will happen when + // ACE_IOV_MAX is not a multiple of the number of message blocks. + if (iovcnt != 0) + { + size_t current_transfer = 0; + + ssize_t const result = ACE::writev_n (handle, + iov, + iovcnt, + ¤t_transfer); + + // Add to total bytes transferred. + bytes_transferred += current_transfer; + + // Errors. + if (result == -1 || result == 0) + return result; + } + + // Return total bytes transferred. + return bytes_transferred; +} + +ssize_t +ACE::send_n (ACE_HANDLE handle, + const ACE_Message_Block *message_block, + const ACE_Time_Value *timeout, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + bytes_transferred = 0; + + iovec iov[ACE_IOV_MAX]; + int iovcnt = 0; + + while (message_block != 0) + { + // Our current message block chain. + const ACE_Message_Block *current_message_block = message_block; + + while (current_message_block != 0) + { + char *this_block_ptr = current_message_block->rd_ptr (); + size_t current_message_block_length = + current_message_block->length (); + + // Check if this block has any data to be sent. + while (current_message_block_length > 0) + { + u_long const this_chunk_length = + ACE_Utils::truncate_cast ( + current_message_block_length); + + // Collect the data in the iovec. + iov[iovcnt].iov_base = this_block_ptr; + iov[iovcnt].iov_len = this_chunk_length; + current_message_block_length -= this_chunk_length; + this_block_ptr += this_chunk_length; + + // Increment iovec counter. + ++iovcnt; + + // The buffer is full make a OS call. @@ TODO find a way to + // find ACE_IOV_MAX for platforms that do not define it rather + // than simply setting ACE_IOV_MAX to some arbitrary value such + // as 16. + if (iovcnt == ACE_IOV_MAX) + { + size_t current_transfer = 0; + + ssize_t const result = ACE::sendv_n (handle, + iov, + iovcnt, + timeout, + ¤t_transfer); + + // Add to total bytes transferred. + bytes_transferred += current_transfer; + + // Errors. + if (result == -1 || result == 0) + return result; + + // Reset iovec counter. + iovcnt = 0; + } + } + + // Select the next message block in the chain. + current_message_block = current_message_block->cont (); + } + + // Selection of the next message block chain. + message_block = message_block->next (); + } + + // Check for remaining buffers to be sent. This will happen when + // ACE_IOV_MAX is not a multiple of the number of message blocks. + if (iovcnt != 0) + { + size_t current_transfer = 0; + + ssize_t const result = ACE::sendv_n (handle, + iov, + iovcnt, + timeout, + ¤t_transfer); + + // Add to total bytes transferred. + bytes_transferred += current_transfer; + + // Errors. + if (result == -1 || result == 0) + return result; + } + + // Return total bytes transferred. + return bytes_transferred; +} + +ssize_t +ACE::readv_n (ACE_HANDLE handle, + iovec *iov, + int iovcnt, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + bytes_transferred = 0; + + for (int s = 0; + s < iovcnt; + ) + { + ssize_t n = ACE_OS::readv (handle, + iov + s, + iovcnt - s); + + if (n == -1 || n == 0) + return n; + + for (bytes_transferred += n; + s < iovcnt + && n >= static_cast (iov[s].iov_len); + s++) + n -= iov[s].iov_len; + + if (n != 0) + { + char *base = reinterpret_cast (iov[s].iov_base); + iov[s].iov_base = base + n; + iov[s].iov_len = iov[s].iov_len - n; + } + } + + return bytes_transferred; +} + +ssize_t +ACE::writev_n (ACE_HANDLE handle, + const iovec *i, + int iovcnt, + size_t *bt) +{ + size_t temp; + size_t &bytes_transferred = bt == 0 ? temp : *bt; + bytes_transferred = 0; + + iovec *iov = const_cast (i); + + for (int s = 0; + s < iovcnt; + ) + { + ssize_t n = ACE_OS::writev (handle, + iov + s, + iovcnt - s); + if (n == -1 || n == 0) + return n; + + for (bytes_transferred += n; + s < iovcnt + && n >= static_cast (iov[s].iov_len); + s++) + n -= iov[s].iov_len; + + if (n != 0) + { + char *base = reinterpret_cast (iov[s].iov_base); + iov[s].iov_base = base + n; + iov[s].iov_len = iov[s].iov_len - n; + } + } + + return bytes_transferred; +} + +int +ACE::handle_ready (ACE_HANDLE handle, + const ACE_Time_Value *timeout, + int read_ready, + int write_ready, + int exception_ready) +{ +#if defined (ACE_HAS_POLL) && defined (ACE_HAS_LIMITED_SELECT) + ACE_UNUSED_ARG (write_ready); + ACE_UNUSED_ARG (exception_ready); + + struct pollfd fds; + + fds.fd = handle; + fds.events = read_ready ? POLLIN : POLLOUT; + fds.revents = 0; + + int result = ACE_OS::poll (&fds, 1, timeout); +#else + ACE_Handle_Set handle_set; + handle_set.set_bit (handle); + + // Wait for data or for the timeout to elapse. + int select_width; +# if defined (ACE_WIN32) + // This arg is ignored on Windows and causes pointer truncation + // warnings on 64-bit compiles. + select_width = 0; +# else + select_width = int (handle) + 1; +# endif /* ACE_WIN64 */ + int result = ACE_OS::select (select_width, + read_ready ? handle_set.fdset () : 0, // read_fds. + write_ready ? handle_set.fdset () : 0, // write_fds. + exception_ready ? handle_set.fdset () : 0, // exception_fds. + timeout); + +#endif /* ACE_HAS_POLL && ACE_HAS_LIMITED_SELECT */ + + switch (result) + { + case 0: // Timer expired. + errno = ETIME; + /* FALLTHRU */ + case -1: // we got here directly - select() returned -1. + return -1; + case 1: // Handle has data. + /* FALLTHRU */ + default: // default is case result > 0; return a + // ACE_ASSERT (result == 1); + return result; + } +} + +int +ACE::enter_recv_timedwait (ACE_HANDLE handle, + const ACE_Time_Value *timeout, + int &val) +{ + int result = ACE::handle_read_ready (handle, + timeout); + + if (result == -1) + return -1; + + ACE::record_and_set_non_blocking_mode (handle, + val); + + return result; +} + +int +ACE::enter_send_timedwait (ACE_HANDLE handle, + const ACE_Time_Value *timeout, + int &val) +{ + int result = ACE::handle_write_ready (handle, + timeout); + + if (result == -1) + return -1; + + ACE::record_and_set_non_blocking_mode (handle, + val); + + return result; +} + +void +ACE::record_and_set_non_blocking_mode (ACE_HANDLE handle, + int &val) +{ + // We need to record whether we are already *in* nonblocking mode, + // so that we can correctly reset the state when we're done. + val = ACE::get_flags (handle); + + if (ACE_BIT_DISABLED (val, ACE_NONBLOCK)) + // Set the handle into non-blocking mode if it's not already in + // it. + ACE::set_flags (handle, ACE_NONBLOCK); +} + +void +ACE::restore_non_blocking_mode (ACE_HANDLE handle, + int val) +{ + if (ACE_BIT_DISABLED (val, + ACE_NONBLOCK)) + { + // Save/restore errno. + ACE_Errno_Guard error (errno); + // Only disable ACE_NONBLOCK if we weren't in non-blocking mode + // originally. + ACE::clr_flags (handle, ACE_NONBLOCK); + } +} + + +// Format buffer into printable format. This is useful for debugging. +// Portions taken from mdump by J.P. Knight (J.P.Knight@lut.ac.uk) +// Modifications by Todd Montgomery. + +size_t +ACE::format_hexdump (const char *buffer, + size_t size, + ACE_TCHAR *obuf, + size_t obuf_sz) +{ + ACE_TRACE ("ACE::format_hexdump"); + + u_char c; + ACE_TCHAR textver[16 + 1]; + + // We can fit 16 bytes output in text mode per line, 4 chars per byte. + size_t maxlen = (obuf_sz / 68) * 16; + + if (size > maxlen) + size = maxlen; + + size_t i; + + size_t lines = size / 16; + for (i = 0; i < lines; i++) + { + size_t j; + + for (j = 0 ; j < 16; j++) + { + c = (u_char) buffer[(i << 4) + j]; // or, buffer[i*16+j] + ACE_OS::sprintf (obuf, + ACE_TEXT ("%02x "), + c); + obuf += 3; + if (j == 7) + { + ACE_OS::sprintf (obuf, + ACE_TEXT (" ")); + ++obuf; + } + textver[j] = ACE_OS::ace_isprint (c) ? c : '.'; + } + + textver[j] = 0; + + ACE_OS::sprintf (obuf, + ACE_TEXT (" %s\n"), + textver); + + while (*obuf != '\0') + ++obuf; + } + + if (size % 16) + { + for (i = 0 ; i < size % 16; i++) + { + c = (u_char) buffer[size - size % 16 + i]; + ACE_OS::sprintf (obuf, + ACE_TEXT ("%02x "), + c); + obuf += 3; + if (i == 7) + { + ACE_OS::sprintf (obuf, + ACE_TEXT (" ")); + ++obuf; + } + textver[i] = ACE_OS::ace_isprint (c) ? c : '.'; + } + + for (i = size % 16; i < 16; i++) + { + ACE_OS::sprintf (obuf, + ACE_TEXT (" ")); + obuf += 3; + if (i == 7) + { + ACE_OS::sprintf (obuf, + ACE_TEXT (" ")); + ++obuf; + } + textver[i] = ' '; + } + + textver[i] = 0; + ACE_OS::sprintf (obuf, + ACE_TEXT (" %s\n"), + textver); + } + return size; +} + +// Returns the current timestamp in the form +// "hour:minute:second:microsecond." The month, day, and year are +// also stored in the beginning of the date_and_time array. + +ACE_TCHAR * +ACE::timestamp (ACE_TCHAR date_and_time[], + int date_and_timelen, + int return_pointer_to_first_digit) +{ + //ACE_TRACE ("ACE::timestamp"); + + if (date_and_timelen < 35) + { + errno = EINVAL; + return 0; + } + +#if defined (WIN32) + // Emulate Unix. Win32 does NOT support all the UNIX versions + // below, so DO we need this ifdef. + static const ACE_TCHAR *day_of_week_name[] = + { + ACE_TEXT ("Sun"), + ACE_TEXT ("Mon"), + ACE_TEXT ("Tue"), + ACE_TEXT ("Wed"), + ACE_TEXT ("Thu"), + ACE_TEXT ("Fri"), + ACE_TEXT ("Sat") + }; + + static const ACE_TCHAR *month_name[] = + { + ACE_TEXT ("Jan"), + ACE_TEXT ("Feb"), + ACE_TEXT ("Mar"), + ACE_TEXT ("Apr"), + ACE_TEXT ("May"), + ACE_TEXT ("Jun"), + ACE_TEXT ("Jul"), + ACE_TEXT ("Aug"), + ACE_TEXT ("Sep"), + ACE_TEXT ("Oct"), + ACE_TEXT ("Nov"), + ACE_TEXT ("Dec") + }; + + SYSTEMTIME local; + ::GetLocalTime (&local); + + ACE_OS::sprintf (date_and_time, + ACE_TEXT ("%3s %3s %2d %04d %02d:%02d:%02d.%06d"), + day_of_week_name[local.wDayOfWeek], + month_name[local.wMonth - 1], + (int) local.wDay, + (int) local.wYear, + (int) local.wHour, + (int) local.wMinute, + (int) local.wSecond, + (int) (local.wMilliseconds * 1000)); + return &date_and_time[15 + (return_pointer_to_first_digit != 0)]; +#else /* UNIX */ + ACE_TCHAR timebuf[26]; // This magic number is based on the ctime(3c) man page. + ACE_Time_Value cur_time = ACE_OS::gettimeofday (); + time_t secs = cur_time.sec (); + + ACE_OS::ctime_r (&secs, + timebuf, + sizeof timebuf); + // date_and_timelen > sizeof timebuf! + ACE_OS::strsncpy (date_and_time, + timebuf, + date_and_timelen); + ACE_TCHAR yeartmp[5]; + ACE_OS::strsncpy (yeartmp, + &date_and_time[20], + 5); + ACE_TCHAR timetmp[9]; + ACE_OS::strsncpy (timetmp, + &date_and_time[11], + 9); + ACE_OS::sprintf (&date_and_time[11], +# if defined (ACE_USES_WCHAR) + ACE_TEXT ("%ls %ls.%06ld"), +# else + ACE_TEXT ("%s %s.%06ld"), +# endif /* ACE_USES_WCHAR */ + yeartmp, + timetmp, + cur_time.usec ()); + date_and_time[33] = '\0'; + return &date_and_time[15 + (return_pointer_to_first_digit != 0)]; +#endif /* WIN32 */ +} + +// This function rounds the request to a multiple of the page size. + +size_t +ACE::round_to_pagesize (size_t len) +{ + ACE_TRACE ("ACE::round_to_pagesize"); + + if (ACE::pagesize_ == 0) + ACE::pagesize_ = ACE_OS::getpagesize (); + + return (len + (ACE::pagesize_ - 1)) & ~(ACE::pagesize_ - 1); +} + +size_t +ACE::round_to_allocation_granularity (size_t len) +{ + ACE_TRACE ("ACE::round_to_allocation_granularity"); + + if (ACE::allocation_granularity_ == 0) + ACE::allocation_granularity_ = ACE_OS::allocation_granularity (); + + return (len + (ACE::allocation_granularity_ - 1)) & ~(ACE::allocation_granularity_ - 1); +} + +ACE_HANDLE +ACE::handle_timed_complete (ACE_HANDLE h, + const ACE_Time_Value *timeout, + int is_tli) +{ + ACE_TRACE ("ACE::handle_timed_complete"); + +#if !defined (ACE_WIN32) && defined (ACE_HAS_POLL) && defined (ACE_HAS_LIMITED_SELECT) + + struct pollfd fds; + + fds.fd = h; + fds.events = POLLIN | POLLOUT; + fds.revents = 0; + +#else + ACE_Handle_Set rd_handles; + ACE_Handle_Set wr_handles; + + rd_handles.set_bit (h); + wr_handles.set_bit (h); +#endif /* !ACE_WIN32 && ACE_HAS_POLL && ACE_HAS_LIMITED_SELECT */ + +#if defined (ACE_WIN32) + // Winsock is different - it sets the exception bit for failed connect, + // unlike other platforms, where the read bit is set. + ACE_Handle_Set ex_handles; + ex_handles.set_bit (h); +#endif /* ACE_WIN32 */ + + bool need_to_check = false; + bool known_failure = false; + +#if defined (ACE_WIN32) + int n = ACE_OS::select (0, // Ignored on Windows: int (h) + 1, + 0, + wr_handles, + ex_handles, + timeout); +#else +# if defined (ACE_HAS_POLL) && defined (ACE_HAS_LIMITED_SELECT) + + int n = ACE_OS::poll (&fds, 1, timeout); + +# else + int n = ACE_OS::select (int (h) + 1, + rd_handles, + wr_handles, + 0, + timeout); +# endif /* ACE_HAS_POLL && ACE_HAS_LIMITED_SELECT */ +#endif /* ACE_WIN32 */ + + // If we failed to connect within the time period allocated by the + // caller, then we fail (e.g., the remote host might have been too + // busy to accept our call). + if (n <= 0) + { + if (n == 0 && timeout != 0) + errno = ETIME; + return ACE_INVALID_HANDLE; + } + + // Usually, a ready-for-write handle is successfully connected, and + // ready-for-read (exception on Win32) is a failure. On fails, we + // need to grab the error code via getsockopt. On possible success for + // any platform where we can't tell just from select() (e.g. AIX), + // we also need to check for success/fail. +#if defined (ACE_WIN32) + ACE_UNUSED_ARG (is_tli); + + // On Win32, ex_handle set indicates a failure. We'll do the check + // to try and get an errno value, but the connect failed regardless of + // what getsockopt says about the error. + if (ex_handles.is_set (h)) + { + need_to_check = true; + known_failure = true; + } +#elif defined (ACE_VXWORKS) + ACE_UNUSED_ARG (is_tli); + + // Force the check on VxWorks. The read handle for "h" is not set, + // so "need_to_check" is false at this point. The write handle is + // set, for what it's worth. + need_to_check = true; +#else + if (is_tli) + +# if defined (ACE_HAS_POLL) && defined (ACE_HAS_LIMITED_SELECT) + need_to_check = (fds.revents & POLLIN) && !(fds.revents & POLLOUT); +# else + need_to_check = rd_handles.is_set (h) && !wr_handles.is_set (h); +# endif /* ACE_HAS_POLL && ACE_HAS_LIMITED_SELECT */ + + else +#if defined(AIX) + // AIX is broken... both success and failed connect will set the + // write handle only, so always check. + need_to_check = true; +#else +# if defined (ACE_HAS_POLL) && defined (ACE_HAS_LIMITED_SELECT) + need_to_check = (fds.revents & POLLIN); +# else + need_to_check = rd_handles.is_set (h); +# endif /* ACE_HAS_POLL && ACE_HAS_LIMITED_SELECT */ +#endif /* AIX */ +#endif /* ACE_WIN32 */ + + if (need_to_check) + { +#if defined (SOL_SOCKET) && defined (SO_ERROR) + int sock_err = 0; + int sock_err_len = sizeof (sock_err); + int sockopt_ret = ACE_OS::getsockopt (h, SOL_SOCKET, SO_ERROR, + (char *)&sock_err, &sock_err_len); + if (sockopt_ret < 0) + { + h = ACE_INVALID_HANDLE; + } + + if (sock_err != 0 || known_failure) + { + h = ACE_INVALID_HANDLE; + errno = sock_err; + } +#else + char dummy; + + // The following recv() won't block provided that the + // ACE_NONBLOCK flag has not been turned off . + n = ACE::recv (h, &dummy, 1, MSG_PEEK); + + // If no data was read/peeked at, check to see if it's because + // of a non-connected socket (and therefore an error) or there's + // just no data yet. + if (n <= 0) + { + if (n == 0) + { + errno = ECONNREFUSED; + h = ACE_INVALID_HANDLE; + } + else if (errno != EWOULDBLOCK && errno != EAGAIN) + h = ACE_INVALID_HANDLE; + } +#endif + } + + // 1. The HANDLE is ready for writing and doesn't need to be checked or + // 2. recv() returned an indication of the state of the socket - if there is + // either data present, or a recv is legit but there's no data yet, + // the connection was successfully established. + return h; +} + +// Wait up to amount of time to accept a connection. + +int +ACE::handle_timed_accept (ACE_HANDLE listener, + ACE_Time_Value *timeout, + int restart) +{ + ACE_TRACE ("ACE::handle_timed_accept"); + // Make sure we don't bomb out on erroneous values. + if (listener == ACE_INVALID_HANDLE) + return -1; + +#if defined (ACE_HAS_POLL) && defined (ACE_HAS_LIMITED_SELECT) + + struct pollfd fds; + + fds.fd = listener; + fds.events = POLLIN; + fds.revents = 0; + +#else + // Use the select() implementation rather than poll(). + ACE_Handle_Set rd_handle; + rd_handle.set_bit (listener); +#endif /* ACE_HAS_POLL && ACE_HAS_LIMITED_SELECT */ + + // We need a loop here if is enabled. + + for (;;) + { +#if defined (ACE_HAS_POLL) && defined (ACE_HAS_LIMITED_SELECT) + + int n = ACE_OS::poll (&fds, 1, timeout); + +#else + int select_width; +# if defined (ACE_WIN32) + // This arg is ignored on Windows and causes pointer truncation + // warnings on 64-bit compiles. + select_width = 0; +# else + select_width = int (listener) + 1; +# endif /* ACE_WIN32 */ + int n = ACE_OS::select (select_width, + rd_handle, 0, 0, + timeout); +#endif /* ACE_HAS_POLL && ACE_HAS_LIMITED_SELECT */ + + switch (n) + { + case -1: + if (errno == EINTR && restart) + continue; + else + return -1; + /* NOTREACHED */ + case 0: + if (timeout != 0 + && timeout->sec () == 0 + && timeout->usec () == 0) + errno = EWOULDBLOCK; + else + errno = ETIMEDOUT; + return -1; + /* NOTREACHED */ + case 1: + return 0; + /* NOTREACHED */ + default: + errno = EINVAL; + return -1; + /* NOTREACHED */ + } + } +} + +// Make the current process a UNIX daemon. This is based on Stevens +// code from APUE. + +int +ACE::daemonize (const ACE_TCHAR pathname[], + bool close_all_handles, + const ACE_TCHAR program_name[]) +{ + ACE_TRACE ("ACE::daemonize"); +#if !defined (ACE_LACKS_FORK) + pid_t pid = ACE_OS::fork (); + + if (pid == -1) + return -1; + else if (pid != 0) + ACE_OS::exit (0); // Parent exits. + + // 1st child continues. + ACE_OS::setsid (); // Become session leader. + + ACE_OS::signal (SIGHUP, SIG_IGN); + + pid = ACE_OS::fork (program_name); + + if (pid != 0) + ACE_OS::exit (0); // First child terminates. + + // Second child continues. + + if (pathname != 0) + // change working directory. + ACE_OS::chdir (pathname); + + ACE_OS::umask (0); // clear our file mode creation mask. + + // Close down the I/O handles. + if (close_all_handles) + for (int i = ACE::max_handles () - 1; i >= 0; i--) + ACE_OS::close (i); + + return 0; +#else + ACE_UNUSED_ARG (pathname); + ACE_UNUSED_ARG (close_all_handles); + ACE_UNUSED_ARG (program_name); + + ACE_NOTSUP_RETURN (-1); +#endif /* ACE_LACKS_FORK */ +} + +pid_t +ACE::fork (const ACE_TCHAR *program_name, + int avoid_zombies) +{ + if (avoid_zombies == 0) + return ACE_OS::fork (program_name); + else + { + // This algorithm is adapted from an example in the Stevens book + // "Advanced Programming in the Unix Environment" and an item in + // Andrew Gierth's Unix Programming FAQ. It creates an orphan + // process that's inherited by the init process; init cleans up + // when the orphan process terminates. + // + // Another way to avoid zombies is to ignore or catch the + // SIGCHLD signal; we don't use that approach here. + + pid_t pid = ACE_OS::fork (); + if (pid == 0) + { + // The child process forks again to create a grandchild. + switch (ACE_OS::fork (program_name)) + { + case 0: // grandchild returns 0. + return 0; + case -1: // assumes all errnos are < 256 + ACE_OS::_exit (errno); + default: // child terminates, orphaning grandchild + ACE_OS::_exit (0); + } + } + + // Parent process waits for child to terminate. + ACE_exitcode status; + if (pid < 0 || ACE_OS::waitpid (pid, &status, 0) < 0) + return -1; + + // child terminated by calling exit()? + if (WIFEXITED ((status))) + { + // child terminated normally? + if (WEXITSTATUS ((status)) == 0) + return 1; + else + errno = WEXITSTATUS ((status)); + } + else + // child didn't call exit(); perhaps it received a signal? + errno = EINTR; + + return -1; + } +} + +int +ACE::max_handles (void) +{ + ACE_TRACE ("ACE::max_handles"); +#if defined (RLIMIT_NOFILE) && !defined (ACE_LACKS_RLIMIT) + rlimit rl; + int const r = ACE_OS::getrlimit (RLIMIT_NOFILE, &rl); +# if !defined (RLIM_INFINITY) + if (r == 0) + return rl.rlim_cur; +# else + if (r == 0 && rl.rlim_cur != RLIM_INFINITY) + return rl.rlim_cur; + // If == RLIM_INFINITY, fall through to the ACE_LACKS_RLIMIT sections +# endif /* RLIM_INFINITY */ +#endif /* RLIMIT_NOFILE && !ACE_LACKS_RLIMIT */ + +#if defined (_SC_OPEN_MAX) + return ACE_OS::sysconf (_SC_OPEN_MAX); +#elif defined (ACE_VXWORKS) && (ACE_VXWORKS < 0x620) + return maxFiles; +#elif defined (FD_SETSIZE) + return FD_SETSIZE; +#else + ACE_NOTSUP_RETURN (-1); +#endif /* _SC_OPEN_MAX */ +} + +// Set the number of currently open handles in the process. +// +// If NEW_LIMIT == -1 set the limit to the maximum allowable. +// Otherwise, set it to be the value of NEW_LIMIT. + +int +ACE::set_handle_limit (int new_limit, + int increase_limit_only) +{ + ACE_TRACE ("ACE::set_handle_limit"); + int cur_limit = ACE::max_handles (); + int max_limit = cur_limit; + + if (cur_limit == -1) + return -1; + +#if !defined (ACE_LACKS_RLIMIT) && defined (RLIMIT_NOFILE) + struct rlimit rl; + + ACE_OS::memset ((void *) &rl, 0, sizeof rl); + int r = ACE_OS::getrlimit (RLIMIT_NOFILE, &rl); + if (r == 0) + max_limit = rl.rlim_max; +#endif /* ACE_LACKS_RLIMIT */ + + if (new_limit == -1) + new_limit = max_limit; + + if (new_limit < 0) + { + errno = EINVAL; + return -1; + } + else if (new_limit > cur_limit) + { + // Increase the limit. +#if !defined (ACE_LACKS_RLIMIT) && defined (RLIMIT_NOFILE) + rl.rlim_cur = new_limit; + return ACE_OS::setrlimit (RLIMIT_NOFILE, &rl); +#elif defined (ACE_LACKS_RLIMIT_NOFILE) + return 0; +#else + // Must return EINVAL errno. + ACE_NOTSUP_RETURN (-1); +#endif /* ACE_LACKS_RLIMIT */ + } + else if (increase_limit_only == 0) + { + // Decrease the limit. +#if !defined (ACE_LACKS_RLIMIT) && defined (RLIMIT_NOFILE) + rl.rlim_cur = new_limit; + return ACE_OS::setrlimit (RLIMIT_NOFILE, &rl); +#else + // We give a chance to platforms without RLIMIT to work. + // Instead of ACE_NOTSUP_RETURN (0), just return 0 because + // new_limit is <= cur_limit, so it's a no-op. + return 0; +#endif /* ACE_LACKS_RLIMIT */ + } + + return 0; +} + +// Euclid's greatest common divisor algorithm. +u_long +ACE::gcd (u_long x, u_long y) +{ + while (y != 0) + { + u_long r = x % y; + x = y; + y = r; + } + + return x; +} + + +// Calculates the minimum enclosing frame size for the given values. +u_long +ACE::minimum_frame_size (u_long period1, u_long period2) +{ + // if one of the periods is zero, treat it as though it as + // uninitialized and return the other period as the frame size + if (0 == period1) + { + return period2; + } + if (0 == period2) + { + return period1; + } + + // if neither is zero, find the greatest common divisor of the two periods + u_long greatest_common_divisor = ACE::gcd (period1, period2); + + // explicitly consider cases to reduce risk of possible overflow errors + if (greatest_common_divisor == 1) + { + // periods are relative primes: just multiply them together + return period1 * period2; + } + else if (greatest_common_divisor == period1) + { + // the first period divides the second: return the second + return period2; + } + else if (greatest_common_divisor == period2) + { + // the second period divides the first: return the first + return period1; + } + else + { + // the current frame size and the entry's effective period + // have a non-trivial greatest common divisor: return the + // product of factors divided by those in their gcd. + return (period1 * period2) / greatest_common_divisor; + } +} + + +u_long +ACE::is_prime (const u_long n, + const u_long min_factor, + const u_long max_factor) +{ + if (n > 3) + for (u_long factor = min_factor; + factor <= max_factor; + ++factor) + if (n / factor * factor == n) + return factor; + + return 0; +} + +const ACE_TCHAR * +ACE::sock_error (int error) +{ +#if defined (ACE_WIN32) + static ACE_TCHAR unknown_msg[64]; + + switch (error) + { + case WSAVERNOTSUPPORTED: + return ACE_TEXT ("version of WinSock not supported"); + /* NOTREACHED */ + case WSASYSNOTREADY: + return ACE_TEXT ("WinSock not present or not responding"); + /* NOTREACHED */ + case WSAEINVAL: + return ACE_TEXT ("app version not supported by DLL"); + /* NOTREACHED */ + case WSAHOST_NOT_FOUND: + return ACE_TEXT ("Authoritive: Host not found"); + /* NOTREACHED */ + case WSATRY_AGAIN: + return ACE_TEXT ("Non-authoritive: host not found or server failure"); + /* NOTREACHED */ + case WSANO_RECOVERY: + return ACE_TEXT ("Non-recoverable: refused or not implemented"); + /* NOTREACHED */ + case WSANO_DATA: + return ACE_TEXT ("Valid name, no data record for type"); + /* NOTREACHED */ + /* + case WSANO_ADDRESS: + return "Valid name, no MX record"; + */ + case WSANOTINITIALISED: + return ACE_TEXT ("WSA Startup not initialized"); + /* NOTREACHED */ + case WSAENETDOWN: + return ACE_TEXT ("Network subsystem failed"); + /* NOTREACHED */ + case WSAEINPROGRESS: + return ACE_TEXT ("Blocking operation in progress"); + /* NOTREACHED */ + case WSAEINTR: + return ACE_TEXT ("Blocking call cancelled"); + /* NOTREACHED */ + case WSAEAFNOSUPPORT: + return ACE_TEXT ("address family not supported"); + /* NOTREACHED */ + case WSAEMFILE: + return ACE_TEXT ("no file handles available"); + /* NOTREACHED */ + case WSAENOBUFS: + return ACE_TEXT ("no buffer space available"); + /* NOTREACHED */ + case WSAEPROTONOSUPPORT: + return ACE_TEXT ("specified protocol not supported"); + /* NOTREACHED */ + case WSAEPROTOTYPE: + return ACE_TEXT ("protocol wrong type for this socket"); + /* NOTREACHED */ + case WSAESOCKTNOSUPPORT: + return ACE_TEXT ("socket type not supported for address family"); + /* NOTREACHED */ + case WSAENOTSOCK: + return ACE_TEXT ("handle is not a socket"); + /* NOTREACHED */ + case WSAEWOULDBLOCK: + return ACE_TEXT ("resource temporarily unavailable"); + /* NOTREACHED */ + case WSAEADDRINUSE: + return ACE_TEXT ("address already in use"); + /* NOTREACHED */ + case WSAECONNABORTED: + return ACE_TEXT ("connection aborted"); + /* NOTREACHED */ + case WSAECONNRESET: + return ACE_TEXT ("connection reset"); + /* NOTREACHED */ + case WSAENOTCONN: + return ACE_TEXT ("not connected"); + /* NOTREACHED */ + case WSAETIMEDOUT: + return ACE_TEXT ("connection timed out"); + /* NOTREACHED */ + case WSAECONNREFUSED: + return ACE_TEXT ("connection refused"); + /* NOTREACHED */ + case WSAEHOSTDOWN: + return ACE_TEXT ("host down"); + /* NOTREACHED */ + case WSAEHOSTUNREACH: + return ACE_TEXT ("host unreachable"); + /* NOTREACHED */ + case WSAEADDRNOTAVAIL: + return ACE_TEXT ("address not available"); + /* NOTREACHED */ + case WSAEISCONN: + return ACE_TEXT ("socket is already connected"); + /* NOTREACHED */ + case WSAENETRESET: + return ACE_TEXT ("network dropped connection on reset"); + /* NOTREACHED */ + case WSAEMSGSIZE: + return ACE_TEXT ("message too long"); + /* NOTREACHED */ + case WSAENETUNREACH: + return ACE_TEXT ("network is unreachable"); + /* NOTREACHED */ + case WSAEFAULT: + return ACE_TEXT ("bad address"); + /* NOTREACHED */ + case WSAEDISCON: + return ACE_TEXT ("graceful shutdown in progress"); + /* NOTREACHED */ + case WSAEACCES: + return ACE_TEXT ("permission denied"); + /* NOTREACHED */ + case WSAESHUTDOWN: + return ACE_TEXT ("cannot send after socket shutdown"); + /* NOTREACHED */ + case WSAEPROCLIM: + return ACE_TEXT ("too many processes"); + /* NOTREACHED */ + case WSAEALREADY: + return ACE_TEXT ("operation already in progress"); + /* NOTREACHED */ + case WSAEPFNOSUPPORT: + return ACE_TEXT ("protocol family not supported"); + /* NOTREACHED */ + case WSAENOPROTOOPT: + return ACE_TEXT ("bad protocol option"); + /* NOTREACHED */ + case WSATYPE_NOT_FOUND: + return ACE_TEXT ("class type not found"); + /* NOTREACHED */ + case WSAEOPNOTSUPP: + return ACE_TEXT ("operation not supported"); + /* NOTREACHED */ + case WSAEDESTADDRREQ: + return ACE_TEXT ("destination address required"); + /* NOTREACHED */ + default: + ACE_OS::sprintf (unknown_msg, ACE_TEXT ("unknown error: %d"), error); + return unknown_msg; + /* NOTREACHED */ + } +#else + ACE_UNUSED_ARG (error); + ACE_NOTSUP_RETURN (0); +#endif /* ACE_WIN32 */ +} + +bool +ACE::is_sock_error (int error) +{ +#if defined (ACE_WIN32) + switch (error) + { + case WSAVERNOTSUPPORTED: + case WSASYSNOTREADY: + case WSAEINVAL: + case WSAHOST_NOT_FOUND: + case WSATRY_AGAIN: + case WSANO_RECOVERY: + case WSANO_DATA: + /* + case WSANO_ADDRESS: + */ + case WSANOTINITIALISED: + case WSAENETDOWN: + case WSAEINPROGRESS: + case WSAEINTR: + case WSAEAFNOSUPPORT: + case WSAEMFILE: + case WSAENOBUFS: + case WSAEPROTONOSUPPORT: + case WSAEPROTOTYPE: + case WSAESOCKTNOSUPPORT: + case WSAENOTSOCK: + case WSAEWOULDBLOCK: + case WSAEADDRINUSE: + case WSAECONNABORTED: + case WSAECONNRESET: + case WSAENOTCONN: + case WSAETIMEDOUT: + case WSAECONNREFUSED: + case WSAEHOSTDOWN: + case WSAEHOSTUNREACH: + case WSAEADDRNOTAVAIL: + case WSAEISCONN: + case WSAENETRESET: + case WSAEMSGSIZE: + case WSAENETUNREACH: + case WSAEFAULT: + case WSAEDISCON: + case WSAEACCES: + case WSAESHUTDOWN: + case WSAEPROCLIM: + case WSAEALREADY: + case WSAEPFNOSUPPORT: + case WSAENOPROTOOPT: + case WSATYPE_NOT_FOUND: + case WSAEOPNOTSUPP: + return true; + } +#else + ACE_UNUSED_ARG (error); +#endif /* ACE_WIN32 */ + return false; +} + +char * +ACE::strndup (const char *str, size_t n) +{ + const char *t = str; + size_t len; + + // Figure out how long this string is (remember, it might not be + // NUL-terminated). + + for (len = 0; + len < n && *t++ != '\0'; + len++) + continue; + + char *s; + ACE_ALLOCATOR_RETURN (s, + (char *) ACE_OS::malloc (len + 1), + 0); + return ACE_OS::strsncpy (s, str, len + 1); +} + +#if defined (ACE_HAS_WCHAR) +wchar_t * +ACE::strndup (const wchar_t *str, size_t n) +{ + const wchar_t *t = str; + size_t len; + + // Figure out how long this string is (remember, it might not be + // NUL-terminated). + + for (len = 0; + len < n && *t++ != '\0'; + len++) + continue; + + wchar_t *s; + ACE_ALLOCATOR_RETURN (s, + static_cast ( + ACE_OS::malloc ((len + 1) * sizeof (wchar_t))), + 0); + return ACE_OS::strsncpy (s, str, len + 1); +} +#endif /* ACE_HAS_WCHAR */ + +char * +ACE::strnnew (const char *str, size_t n) +{ + const char *t = str; + size_t len; + + // Figure out how long this string is (remember, it might not be + // NUL-terminated). + + for (len = 0; + len < n && *t++ != L'\0'; + len++) + continue; + + char *s; + ACE_NEW_RETURN (s, + char[len + 1], + 0); + return ACE_OS::strsncpy (s, str, len + 1); +} + +#if defined (ACE_HAS_WCHAR) +wchar_t * +ACE::strnnew (const wchar_t *str, size_t n) +{ + const wchar_t *t = str; + size_t len; + + // Figure out how long this string is (remember, it might not be + // NUL-terminated). + + for (len = 0; + len < n && *t++ != ACE_TEXT_WIDE ('\0'); + len++) + continue; + + wchar_t *s; + ACE_NEW_RETURN (s, + wchar_t[len + 1], + 0); + return ACE_OS::strsncpy (s, str, len + 1); +} +#endif /* ACE_HAS_WCHAR */ + +const char * +ACE::strend (const char *s) +{ + while (*s++ != '\0') + continue; + + return s; +} + +#if defined ACE_HAS_WCHAR +const wchar_t * +ACE::strend (const wchar_t *s) +{ + while (*s++ != ACE_TEXT_WIDE ('\0')) + continue; + + return s; +} +#endif + +char * +ACE::strnew (const char *s) +{ + if (s == 0) + return 0; + char *t = 0; + ACE_NEW_RETURN (t, + char [ACE_OS::strlen (s) + 1], + 0); + if (t == 0) + return 0; + else + return ACE_OS::strcpy (t, s); +} + +#if defined (ACE_HAS_WCHAR) +wchar_t * +ACE::strnew (const wchar_t *s) +{ + if (s == 0) + return 0; + wchar_t *t = 0; + ACE_NEW_RETURN (t, + wchar_t[ACE_OS::strlen (s) + 1], + 0); + if (t == 0) + return 0; + else + return ACE_OS::strcpy (t, s); +} +#endif /* ACE_HAS_WCHAR */ + +inline static bool equal_char(char a, char b, bool case_sensitive) +{ + if (case_sensitive) + return a == b; + return ACE_OS::ace_tolower(a) == ACE_OS::ace_tolower(b); +} + +bool +ACE::wild_match(const char* str, const char* pat, bool case_sensitive) +{ + if (str == pat) + return true; + if (pat == 0 || str == 0) + return false; + + bool star = false; + const char* s = str; + const char* p = pat; + while (*s != '\0') + { + if (*p == '*') + { + star = true; + pat = p; + while (*++pat == '*'); + + if (*pat == '\0') + return true; + p = pat; + } + else if (*p == '?') + { + ++s; + ++p; + } + else if (! equal_char(*s, *p, case_sensitive)) + { + if (!star) + return false; + s = ++str; + p = pat; + } + else + { + ++s; + ++p; + } + } + if (*p == '*') + while (*++p == '*'); + + return *p == '\0'; +} + +// Close versioned namespace, if enabled by the user. +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/ACE.h b/ACE/ace/ACE.h new file mode 100644 index 00000000000..7dec2712fa4 --- /dev/null +++ b/ACE/ace/ACE.h @@ -0,0 +1,825 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file ACE.h + * + * $Id$ + * + * This file contains value added ACE functions that extend the + * behavior of the UNIX and Win32 OS calls. + * + * All these ACE static functions are consolidated in a single place + * in order to manage the namespace better. These functions are put + * here rather than in @c ACE_OS in order to separate concerns. + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_ACE_H +#define ACE_ACE_H + +#include /**/ "ace/pre.h" + +#include "ace/config-lite.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/OS_NS_math.h" +#include "ace/Flag_Manip.h" +#include "ace/Handle_Ops.h" +#include "ace/Lib_Find.h" +#include "ace/Init_ACE.h" +#include "ace/Sock_Connect.h" +#include "ace/Default_Constants.h" + +#if defined (ACE_EXPORT_MACRO) +# undef ACE_EXPORT_MACRO +#endif +#define ACE_EXPORT_MACRO ACE_Export + +// Open versioned namespace, if enabled by the user. +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Forward declarations. +class ACE_Time_Value; +class ACE_Message_Block; +class ACE_Handle_Set; + +/** + * @namespace ACE + * + * @brief The namespace containing the ACE framework itself. + * + * The ACE namespace contains all types (classes, structures, + * typedefs, etc), and global functions and variables in the ACE + * framework. + */ +namespace ACE +{ + // = ACE version information. + /// e.g., the "5" in ACE 5.1.12. + extern ACE_Export u_int major_version (void); + + /// e.g., the "1" in ACE 5.1.12. + extern ACE_Export u_int minor_version (void); + + /// e.g., the "12" in ACE 5.1.12. + /// Returns 0 for "stable" (non-beta) releases. + extern ACE_Export u_int beta_version (void); + + // = C++ compiler version information. + /// E.g., the "SunPro C++" in SunPro C++ 4.32.0 + extern ACE_Export const ACE_TCHAR * compiler_name (void); + + /// E.g., the "4" in SunPro C++ 4.32.0 + extern ACE_Export u_int compiler_major_version (void); + + /// E.g., the "32" in SunPro C++ 4.32.0 + extern ACE_Export u_int compiler_minor_version (void); + + /// E.g., the "0" in SunPro C++ 4.32.0 + extern ACE_Export u_int compiler_beta_version (void); + + /// Check if error indicates the process being out of handles (file + /// descriptors). + extern ACE_Export int out_of_handles (int error); + + /// Simple wildcard matching function supporting '*' and '?' + /// return true if string s matches pattern. + extern ACE_Export bool wild_match(const char* s, const char* pattern, bool case_sensitive = true); + + /** + * @name I/O operations + * + * Notes on common parameters: + * + * @a handle is the connected endpoint that will be used for I/O. + * + * @a buf is the buffer to write from or receive into. + * + * @a len is the number of bytes to transfer. + * + * The @a timeout parameter in the following methods indicates how + * long to blocking trying to transfer data. If @a timeout == 0, + * then the call behaves as a normal send/recv call, i.e., for + * blocking sockets, the call will block until action is possible; + * for non-blocking sockets, @c EWOULDBLOCK will be returned if no + * action is immediately possible. + * + * If @a timeout != 0, the call will wait until the relative time + * specified in @a *timeout elapses. + * + * The "_n()" I/O methods keep looping until all the data has been + * transferred. These methods also work for sockets in non-blocking + * mode i.e., they keep looping on @c EWOULDBLOCK. @a timeout is + * used to make sure we keep making progress, i.e., the same timeout + * value is used for every I/O operation in the loop and the timeout + * is not counted down. + * + * The return values for the "*_n()" methods match the return values + * from the non "_n()" methods and are specified as follows: + * + * - On complete transfer, the number of bytes transferred is returned. + * - On timeout, -1 is returned, @c errno == @c ETIME. + * - On error, -1 is returned, @c errno is set to appropriate error. + * - On @c EOF, 0 is returned, @c errno is irrelevant. + * + * On partial transfers, i.e., if any data is transferred before + * timeout / error / @c EOF, @a bytes_transferred> will contain the + * number of bytes transferred. + * + * Methods with @a iovec parameter are I/O vector variants of the + * I/O operations. + * + * Methods with the extra @a flags argument will always result in + * @c send getting called. Methods without the extra @a flags + * argument will result in @c send getting called on Win32 + * platforms, and @c write getting called on non-Win32 platforms. + */ + //@{ + extern ACE_Export ssize_t recv (ACE_HANDLE handle, + void *buf, + size_t len, + int flags, + const ACE_Time_Value *timeout = 0); + +#if defined (ACE_HAS_TLI) + + extern ACE_Export ssize_t t_rcv (ACE_HANDLE handle, + void *buf, + size_t len, + int *flags, + const ACE_Time_Value *timeout = 0); + +#endif /* ACE_HAS_TLI */ + + extern ACE_Export ssize_t recv (ACE_HANDLE handle, + void *buf, + size_t len, + const ACE_Time_Value *timeout = 0); + + extern ACE_Export ssize_t recvmsg (ACE_HANDLE handle, + struct msghdr *msg, + int flags, + const ACE_Time_Value *timeout = 0); + + extern ACE_Export ssize_t recvfrom (ACE_HANDLE handle, + char *buf, + int len, + int flags, + struct sockaddr *addr, + int *addrlen, + const ACE_Time_Value *timeout = 0); + + ACE_NAMESPACE_INLINE_FUNCTION + ssize_t recv_n (ACE_HANDLE handle, + void *buf, + size_t len, + int flags, + const ACE_Time_Value *timeout = 0, + size_t *bytes_transferred = 0); + +#if defined (ACE_HAS_TLI) + + ACE_NAMESPACE_INLINE_FUNCTION + ssize_t t_rcv_n (ACE_HANDLE handle, + void *buf, + size_t len, + int *flags, + const ACE_Time_Value *timeout = 0, + size_t *bytes_transferred = 0); + +#endif /* ACE_HAS_TLI */ + + ACE_NAMESPACE_INLINE_FUNCTION + ssize_t recv_n (ACE_HANDLE handle, + void *buf, + size_t len, + const ACE_Time_Value *timeout = 0, + size_t *bytes_transferred = 0); + + /// Receive into a variable number of pieces. + /** + * Accepts a variable, caller-specified, number of pointer/length + * pairs. Arguments following @a n are char *, size_t pairs. + * + * @param handle The I/O handle to receive on + * @param n The total number of char *, size_t pairs following @a n. + * + * @return -1 on error, else total number of bytes received. + */ + extern ACE_Export ssize_t recv (ACE_HANDLE handle, size_t n, ...); + + extern ACE_Export ssize_t recvv (ACE_HANDLE handle, + iovec *iov, + int iovcnt, + const ACE_Time_Value *timeout = 0); + + ACE_NAMESPACE_INLINE_FUNCTION + ssize_t recvv_n (ACE_HANDLE handle, + iovec *iov, + int iovcnt, + const ACE_Time_Value *timeout = 0, + size_t *bytes_transferred = 0); + + extern ACE_Export ssize_t recv_n (ACE_HANDLE handle, + ACE_Message_Block *message_block, + const ACE_Time_Value *timeout = 0, + size_t *bytes_transferred = 0); + + extern ACE_Export ssize_t send (ACE_HANDLE handle, + const void *buf, + size_t len, + int flags, + const ACE_Time_Value *timeout = 0); + +#if defined (ACE_HAS_TLI) + + extern ACE_Export ssize_t t_snd (ACE_HANDLE handle, + const void *buf, + size_t len, + int flags, + const ACE_Time_Value *timeout = 0); + +#endif /* ACE_HAS_TLI */ + + extern ACE_Export ssize_t send (ACE_HANDLE handle, + const void *buf, + size_t len, + const ACE_Time_Value *timeout = 0); + + extern ACE_Export ssize_t sendmsg (ACE_HANDLE handle, + const struct msghdr *msg, + int flags, + const ACE_Time_Value *timeout = 0); + + extern ACE_Export ssize_t sendto (ACE_HANDLE handle, + const char *buf, + int len, + int flags, + const struct sockaddr *addr, + int addrlen, + const ACE_Time_Value *timeout = 0); + + ACE_NAMESPACE_INLINE_FUNCTION + ssize_t send_n (ACE_HANDLE handle, + const void *buf, + size_t len, + int flags, + const ACE_Time_Value *timeout = 0, + size_t *bytes_transferred = 0); + +#if defined (ACE_HAS_TLI) + + ACE_NAMESPACE_INLINE_FUNCTION + ssize_t t_snd_n (ACE_HANDLE handle, + const void *buf, + size_t len, + int flags, + const ACE_Time_Value *timeout = 0, + size_t *bytes_transferred = 0); + +#endif /* ACE_HAS_TLI */ + + ACE_NAMESPACE_INLINE_FUNCTION + ssize_t send_n (ACE_HANDLE handle, + const void *buf, + size_t len, + const ACE_Time_Value *timeout = 0, + size_t *bytes_transferred = 0); + + /// Varargs variant. + extern ACE_Export ssize_t send (ACE_HANDLE handle, size_t n, ...); + + extern ACE_Export ssize_t sendv (ACE_HANDLE handle, + const iovec *iov, + int iovcnt, + const ACE_Time_Value *timeout = 0); + + ACE_NAMESPACE_INLINE_FUNCTION + ssize_t sendv_n (ACE_HANDLE handle, + const iovec *iov, + int iovcnt, + const ACE_Time_Value *timeout = 0, + size_t *bytes_transferred = 0); + + /// Send all the @a message_blocks chained through their @c next and + /// @c cont pointers. This call uses the underlying OS gather-write + /// operation to reduce the domain-crossing penalty. + extern ACE_Export ssize_t send_n (ACE_HANDLE handle, + const ACE_Message_Block *message_block, + const ACE_Time_Value *timeout = 0, + size_t *bytes_transferred = 0); + + // = File system I/O functions (these don't support timeouts). + + ACE_NAMESPACE_INLINE_FUNCTION + ssize_t read_n (ACE_HANDLE handle, + void *buf, + size_t len, + size_t *bytes_transferred = 0); + + ACE_NAMESPACE_INLINE_FUNCTION + ssize_t write_n (ACE_HANDLE handle, + const void *buf, + size_t len, + size_t *bytes_transferred = 0); + + /// Write all the @a message_blocks chained through their @c next + /// and @c cont pointers. This call uses the underlying OS + /// gather-write operation to reduce the domain-crossing penalty. + extern ACE_Export ssize_t write_n (ACE_HANDLE handle, + const ACE_Message_Block *message_block, + size_t *bytes_transferred = 0); + + extern ACE_Export ssize_t readv_n (ACE_HANDLE handle, + iovec *iov, + int iovcnt, + size_t *bytes_transferred = 0); + + extern ACE_Export ssize_t writev_n (ACE_HANDLE handle, + const iovec *iov, + int iovcnt, + size_t *bytes_transferred = 0); + //@} + + /** + * Wait up to @a timeout amount of time to passively establish a + * connection. This method doesn't perform the @c accept, it just + * does the timed wait. + */ + extern ACE_Export int handle_timed_accept (ACE_HANDLE listener, + ACE_Time_Value *timeout, + int restart); + + /** + * Wait up to @a timeout amount of time to complete an actively + * established non-blocking connection. If @a is_tli is non-0 then + * we are being called by a TLI wrapper (which behaves slightly + * differently from a socket wrapper). + */ + extern ACE_Export ACE_HANDLE handle_timed_complete ( + ACE_HANDLE listener, + const ACE_Time_Value *timeout, + int is_tli = 0); + + /** + * Reset the limit on the number of open handles. If @a new_limit + * == -1 set the limit to the maximum allowable. Otherwise, set + * the limit value to @a new_limit. If @a increase_limit_only is + * non-0 then only allow increases to the limit. + */ + extern ACE_Export int set_handle_limit (int new_limit = -1, + int increase_limit_only = 0); + + /** + * Returns the maximum number of open handles currently permitted in + * this process. This maximum may be extended using + * @c ACE::set_handle_limit. + */ + extern ACE_Export int max_handles (void); + + // = String functions +#if !defined (ACE_HAS_WINCE) + /** + * Return a dynamically allocated duplicate of @a str, substituting + * the environment variable if @c str[0] @c == @c '$'. Note that + * the pointer is allocated with @c ACE_OS::malloc and must be freed + * by @c ACE_OS::free. + */ + extern ACE_Export ACE_TCHAR *strenvdup (const ACE_TCHAR *str); +#endif /* ACE_HAS_WINCE */ + + /// Returns a pointer to the "end" of the string, i.e., the character + /// past the '\0'. + extern ACE_Export const char *strend (const char *s); + + /// This method is just like @c strdup, except that it uses + /// @c operator @c new rather than @c malloc. If @a s is NULL + /// returns NULL rather than segfaulting. + extern ACE_Export char *strnew (const char *s); + + /// Delete the memory allocated by @c strnew. + ACE_NAMESPACE_INLINE_FUNCTION void strdelete (char *s); + + /// Create a fresh new copy of @a str, up to @a n chars long. Uses + /// @c ACE_OS::malloc to allocate the new string. + extern ACE_Export char *strndup (const char *str, size_t n); + + /// Create a fresh new copy of @a str, up to @a n chars long. Uses + /// @c ACE_OS::malloc to allocate the new string. + extern ACE_Export char *strnnew (const char *str, size_t n); + +#if defined (ACE_HAS_WCHAR) + extern ACE_Export const wchar_t *strend (const wchar_t *s); + + extern ACE_Export wchar_t *strnew (const wchar_t *s); + + ACE_NAMESPACE_INLINE_FUNCTION void strdelete (wchar_t *s); + + extern ACE_Export wchar_t *strndup (const wchar_t *str, size_t n); + + extern ACE_Export wchar_t *strnnew (const wchar_t *str, size_t n); + +#endif /* ACE_HAS_WCHAR */ + + /** + * On Windows, determines if a specified pathname ends with ".exe" + * (not case sensitive). If on Windows and there is no ".exe" suffix, + * a new ACE_TCHAR array is allocated and a copy of @c pathname with + * the ".exe" suffix is copied into it. In this case, the caller is + * responsible for calling delete [] on the returned pointer. + * + * @param pathname The name to check for a proper suffix. + * + * @retval @c pathname if there is a proper suffix for Windows. This is + * always the return value for non-Windows platforms. + * @retval If a suffix needs to be added, returns a pointer to new[] + * allocated memory containing the original @c pathname plus + * a ".exe" suffix. The caller is responsible for freeing the + * memory using delete []. + */ + extern ACE_Export const ACE_TCHAR *execname (const ACE_TCHAR *pathname); + + /** + * Returns the "basename" of a @a pathname separated by @a delim. + * For instance, the basename of "/tmp/foo.cpp" is "foo.cpp" when + * @a delim is @a '/'. + */ + extern ACE_Export const ACE_TCHAR *basename (const ACE_TCHAR *pathname, + ACE_TCHAR delim = + ACE_DIRECTORY_SEPARATOR_CHAR); + + /** + * Returns the "dirname" of a @a pathname. For instance, the + * dirname of "/tmp/foo.cpp" is "/tmp" when @a delim is @a '/'. If + * @a pathname has no @a delim ".\0" is returned. This method does + * not modify @a pathname and is not reentrant. + */ + extern ACE_Export const ACE_TCHAR *dirname (const ACE_TCHAR *pathname, + ACE_TCHAR delim = + ACE_DIRECTORY_SEPARATOR_CHAR); + + /** + * Returns the current timestamp in the form + * "hour:minute:second:microsecond." The month, day, and year are + * also stored in the beginning of the @a date_and_time array, which + * is a user-supplied array of size @a time_len> @c ACE_TCHARs. + * Returns 0 if unsuccessful, else returns pointer to beginning of the + * "time" portion of @a date_and_time. If @a + * return_pointer_to_first_digit is 0 then return a pointer to the + * space before the time, else return a pointer to the beginning of + * the time portion. + */ + extern ACE_Export ACE_TCHAR *timestamp (ACE_TCHAR date_and_time[], + int time_len, + int return_pointer_to_first_digit = + 0); + + /** + * if @a avoid_zombies == 0 call @c ACE_OS::fork directly, else + * create an orphan process that's inherited by the init process; + * init cleans up when the orphan process terminates so we don't + * create zombies. Returns -1 on failure and either the child PID + * on success if @a avoid_zombies == 0 or 1 on success if @a + * avoid_zombies != 0 (this latter behavior is a known bug that + * needs to be fixed). + */ + extern ACE_Export pid_t fork ( + const ACE_TCHAR *program_name = ACE_TEXT (""), + int avoid_zombies = 0); + + /** + * Become a daemon process using the algorithm in Richard Stevens + * "Advanced Programming in the UNIX Environment." If + * @a close_all_handles is non-zero then all open file handles are + * closed. + */ + extern ACE_Export int daemonize ( + const ACE_TCHAR pathname[] = ACE_TEXT ("/"), + bool close_all_handles = ACE_DEFAULT_CLOSE_ALL_HANDLES, + const ACE_TCHAR program_name[] = ACE_TEXT ("")); + + // = Miscellaneous functions. + /// Rounds the request to a multiple of the page size. + extern ACE_Export size_t round_to_pagesize (size_t len); + + /// Rounds the request to a multiple of the allocation granularity. + extern ACE_Export size_t round_to_allocation_granularity (size_t len); + + // @@ UNICODE what about buffer? + /// Format buffer into printable format. This is useful for + /// debugging. + extern ACE_Export size_t format_hexdump (const char *buffer, size_t size, + ACE_TCHAR *obuf, size_t obuf_sz); + + /// Computes the hash value of {str} using the "Hash PJW" routine. + extern ACE_Export u_long hash_pjw (const char *str); + + /// Computes the hash value of {str} using the "Hash PJW" routine. + extern ACE_Export u_long hash_pjw (const char *str, size_t len); + +#if defined (ACE_HAS_WCHAR) + /// Computes the hash value of {str} using the "Hash PJW" routine. + extern ACE_Export u_long hash_pjw (const wchar_t *str); + + /// Computes the hash value of {str} using the "Hash PJW" routine. + extern ACE_Export u_long hash_pjw (const wchar_t *str, size_t len); +#endif /* ACE_HAS_WCHAR */ + + /// Computes CRC-CCITT for the string. + extern ACE_Export ACE_UINT16 crc_ccitt(const char *str); + + /// Computes CRC-CCITT for the buffer. + extern ACE_Export ACE_UINT16 crc_ccitt(const void *buf, size_t len, + ACE_UINT16 crc = 0); + + /// Computes CRC-CCITT for the @ len iovec buffers. + extern ACE_Export ACE_UINT16 crc_ccitt(const iovec *iov, int len, + ACE_UINT16 crc = 0); + + /// Computes the ISO 8802-3 standard 32 bits CRC for the string. + extern ACE_Export ACE_UINT32 crc32 (const char *str); + + /// Computes the ISO 8802-3 standard 32 bits CRC for the buffer. + extern ACE_Export ACE_UINT32 crc32 (const void *buf, size_t len, + ACE_UINT32 crc = 0); + + /// Computes the ISO 8802-3 standard 32 bits CRC for the + /// @ len iovec buffers. + extern ACE_Export ACE_UINT32 crc32 (const iovec *iov, int len, + ACE_UINT32 crc = 0); + + /// Euclid's greatest common divisor algorithm. + extern ACE_Export u_long gcd (u_long x, u_long y); + + /// Calculates the minimum enclosing frame size for the given values. + extern ACE_Export u_long minimum_frame_size (u_long period1, u_long period2); + + /** + * Function that can burn up noticeable CPU time: brute-force + * determination of whether number @a n is prime. Returns 0 if + * it is prime, or the smallest factor if it is not prime. + * @a min_factor and @a max_factor can be used to partition the work + * among threads. For just one thread, typical values are 2 and + * n/2. + */ + extern ACE_Export u_long is_prime (const u_long n, + const u_long min_factor, + const u_long max_factor); + + /// Map troublesome win32 errno values to values that standard C + /// strerr function understands. Thank you Microsoft. + extern ACE_Export int map_errno (int error); + + /// Returns a string containing the error message corresponding to a + /// WinSock error. This works around an omission in the Win32 API. + /// @internal + extern ACE_Export const ACE_TCHAR * sock_error (int error); + + /// Determins whether the given error code corresponds to to a + /// WinSock error. If so returns true, false otherwise. + /// @internal + extern ACE_Export bool is_sock_error (int error); + + /** + * Checks if process with {pid} is still alive. Returns 1 if it is + * still alive, 0 if it isn't alive, and -1 if something weird + * happened. + */ + extern ACE_Export int process_active (pid_t pid); + + /** + * Terminate the process abruptly with id @a pid. On Win32 platforms + * this uses {TerminateProcess} and on POSIX platforms is uses + * {kill} with the -9 (SIGKILL) signal, which cannot be caught or + * ignored. Note that this call is potentially dangerous to use + * since the process being terminated may not have a chance to + * cleanup before it shuts down. + */ + extern ACE_Export int terminate_process (pid_t pid); + + /** + * This method uses process id and object pointer to come up with a + * machine wide unique name. The process ID will provide uniqueness + * between processes on the same machine. The "this" pointer of the + * {object} will provide uniqueness between other "live" objects in + * the same process. The uniqueness of this name is therefore only + * valid for the life of {object}. + */ + ACE_NAMESPACE_INLINE_FUNCTION void unique_name (const void *object, + ACE_TCHAR *name, + size_t length); + + /// Computes the base 2 logarithm of {num}. + ACE_NAMESPACE_INLINE_FUNCTION u_long log2 (u_long num); + + /// Hex conversion utility. + ACE_NAMESPACE_INLINE_FUNCTION ACE_TCHAR nibble2hex (u_int n); + + /// Convert a hex character to its byte representation. + ACE_NAMESPACE_INLINE_FUNCTION u_char hex2byte (ACE_TCHAR c); + + // = Set/get the debug level. + extern ACE_Export bool debug (void); + extern ACE_Export void debug (bool onoff); + + /// Wrapper facade for @c select that uses @c ACE_Handle_Sets. + extern ACE_Export int select (int width, + ACE_Handle_Set *readfds, + ACE_Handle_Set *writefds = 0, + ACE_Handle_Set *exceptfds = 0, + const ACE_Time_Value *timeout = 0); + + /// Wrapper facade for the most common use of @c select that uses + /// @c ACE_Handle_Sets. + extern ACE_Export int select (int width, + ACE_Handle_Set &readfds, + const ACE_Time_Value *timeout = 0); + + /// Timed wait for handle to get read ready. + ACE_NAMESPACE_INLINE_FUNCTION + int handle_read_ready (ACE_HANDLE handle, + const ACE_Time_Value *timeout); + + /// Timed wait for handle to get write ready. + ACE_NAMESPACE_INLINE_FUNCTION + int handle_write_ready (ACE_HANDLE handle, + const ACE_Time_Value *timeout); + + /// Timed wait for handle to get exception ready. + ACE_NAMESPACE_INLINE_FUNCTION + int handle_exception_ready (ACE_HANDLE handle, + const ACE_Time_Value *timeout); + + /// Timed wait for handle to get read, write, or exception ready. + extern ACE_Export int handle_ready (ACE_HANDLE handle, + const ACE_Time_Value *timeout, + int read_ready, + int write_ready, + int exception_ready); + + /// Wait for @a timeout before proceeding to a @c recv operation. + /// @a val keeps track of whether we're in non-blocking mode or + /// not. + extern ACE_Export int enter_recv_timedwait (ACE_HANDLE handle, + const ACE_Time_Value *timeout, + int &val); + + /// Wait for @a timeout before proceeding to a @c send operation. + /// @a val keeps track of whether we're in non-blocking mode or + /// not. + extern ACE_Export int enter_send_timedwait (ACE_HANDLE handle, + const ACE_Time_Value* timeout, + int &val); + + /// This makes sure that @a handle is set into non-blocking mode. + /// @a val keeps track of whether were in non-blocking mode or not. + extern ACE_Export void record_and_set_non_blocking_mode (ACE_HANDLE handle, + int &val); + + /// Cleanup after a timed operation, restore the appropriate + /// non-blocking status of @a handle. + extern ACE_Export void restore_non_blocking_mode (ACE_HANDLE handle, + int val); + + // private: + // These functions aren't meant to be used internally, so they are + // not exported. + + // + // = Recv_n helpers + // + + ACE_NAMESPACE_INLINE_FUNCTION ssize_t recv_i (ACE_HANDLE handle, + void *buf, + size_t len); + + extern ACE_Export ssize_t recv_n_i (ACE_HANDLE handle, + void *buf, + size_t len, + int flags, + size_t *bytes_transferred); + + extern ACE_Export ssize_t recv_n_i (ACE_HANDLE handle, + void *buf, + size_t len, + int flags, + const ACE_Time_Value *timeout, + size_t *bytes_transferred); + +#if defined (ACE_HAS_TLI) + + extern ACE_Export ssize_t t_rcv_n_i (ACE_HANDLE handle, + void *buf, + size_t len, + int *flags, + size_t *bytes_transferred); + + extern ACE_Export ssize_t t_rcv_n_i (ACE_HANDLE handle, + void *buf, + size_t len, + int *flags, + const ACE_Time_Value *timeout, + size_t *bytes_transferred); + +#endif /* ACE_HAS_TLI */ + + extern ACE_Export ssize_t recv_n_i (ACE_HANDLE handle, + void *buf, + size_t len, + size_t *bytes_transferred); + + extern ACE_Export ssize_t recv_n_i (ACE_HANDLE handle, + void *buf, + size_t len, + const ACE_Time_Value *timeout, + size_t *bytes_transferred); + + extern ACE_Export ssize_t recvv_n_i (ACE_HANDLE handle, + iovec *iov, + int iovcnt, + size_t *bytes_transferred); + + extern ACE_Export ssize_t recvv_n_i (ACE_HANDLE handle, + iovec *iov, + int iovcnt, + const ACE_Time_Value *timeout, + size_t *bytes_transferred); + + // + // = Send_n helpers + // + + ACE_NAMESPACE_INLINE_FUNCTION ssize_t send_i (ACE_HANDLE handle, + const void *buf, + size_t len); + + extern ACE_Export ssize_t send_n_i (ACE_HANDLE handle, + const void *buf, + size_t len, + int flags, + size_t *bytes_transferred); + + extern ACE_Export ssize_t send_n_i (ACE_HANDLE handle, + const void *buf, + size_t len, + int flags, + const ACE_Time_Value *timeout, + size_t *bytes_transferred); + +#if defined (ACE_HAS_TLI) + + extern ACE_Export ssize_t t_snd_n_i (ACE_HANDLE handle, + const void *buf, + size_t len, + int flags, + size_t *bytes_transferred); + + extern ACE_Export ssize_t t_snd_n_i (ACE_HANDLE handle, + const void *buf, + size_t len, + int flags, + const ACE_Time_Value *timeout, + size_t *bytes_transferred); + +#endif /* ACE_HAS_TLI */ + + extern ACE_Export ssize_t send_n_i (ACE_HANDLE handle, + const void *buf, + size_t len, + size_t *bytes_transferred); + + extern ACE_Export ssize_t send_n_i (ACE_HANDLE handle, + const void *buf, + size_t len, + const ACE_Time_Value *timeout, + size_t *bytes_transferred); + + extern ACE_Export ssize_t sendv_n_i (ACE_HANDLE handle, + const iovec *iov, + int iovcnt, + size_t *bytes_transferred); + + extern ACE_Export ssize_t sendv_n_i (ACE_HANDLE handle, + const iovec *iov, + int iovcnt, + const ACE_Time_Value *timeout, + size_t *bytes_transferred); + +} + +// Close versioned namespace, if enabled by the user. +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/ACE.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* ACE_ACE_H */ diff --git a/ACE/ace/ACE.inl b/ACE/ace/ACE.inl new file mode 100644 index 00000000000..573cae93357 --- /dev/null +++ b/ACE/ace/ACE.inl @@ -0,0 +1,350 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/OS_NS_unistd.h" +#include "ace/OS_NS_Thread.h" +#include "ace/OS_NS_ctype.h" +#include "ace/OS_NS_sys_socket.h" + +// Open versioned namespace, if enabled by the user. +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + + +// Wrappers for methods that have been moved to ACE_OS. + +ACE_INLINE ssize_t +ACE::read_n (ACE_HANDLE handle, + void *buf, + size_t len, + size_t *bytes_transferred) +{ + return ACE_OS::read_n (handle, + buf, + len, + bytes_transferred); +} + +ACE_INLINE ssize_t +ACE::write_n (ACE_HANDLE handle, + const void *buf, + size_t len, + size_t *bytes_transferred) +{ + return ACE_OS::write_n (handle, + buf, + len, + bytes_transferred); +} + +ACE_INLINE ssize_t +ACE::recv_n (ACE_HANDLE handle, + void *buf, + size_t len, + int flags, + const ACE_Time_Value *timeout, + size_t *bytes_transferred) +{ + if (timeout == 0) + return ACE::recv_n_i (handle, + buf, + len, + flags, + bytes_transferred); + else + return ACE::recv_n_i (handle, + buf, + len, + flags, + timeout, + bytes_transferred); +} + +#if defined (ACE_HAS_TLI) + +ACE_INLINE ssize_t +ACE::t_rcv_n (ACE_HANDLE handle, + void *buf, + size_t len, + int *flags, + const ACE_Time_Value *timeout, + size_t *bytes_transferred) +{ + if (timeout == 0) + return ACE::t_rcv_n_i (handle, + buf, + len, + flags, + bytes_transferred); + else + return ACE::t_rcv_n_i (handle, + buf, + len, + flags, + timeout, + bytes_transferred); +} + +#endif /* ACE_HAS_TLI */ + +ACE_INLINE ssize_t +ACE::recv_n (ACE_HANDLE handle, + void *buf, + size_t len, + const ACE_Time_Value *timeout, + size_t *bytes_transferred) +{ + if (timeout == 0) + return ACE::recv_n_i (handle, + buf, + len, + bytes_transferred); + else + return ACE::recv_n_i (handle, + buf, + len, + timeout, + bytes_transferred); +} + +ACE_INLINE ssize_t +ACE::recvv_n (ACE_HANDLE handle, + iovec *iov, + int iovcnt, + const ACE_Time_Value *timeout, + size_t *bytes_transferred) +{ + if (timeout == 0) + return ACE::recvv_n_i (handle, + iov, + iovcnt, + bytes_transferred); + else + return ACE::recvv_n_i (handle, + iov, + iovcnt, + timeout, + bytes_transferred); +} + +ACE_INLINE ssize_t +ACE::send_n (ACE_HANDLE handle, + const void *buf, + size_t len, + int flags, + const ACE_Time_Value *timeout, + size_t *bytes_transferred) +{ + if (timeout == 0) + return ACE::send_n_i (handle, + buf, + len, + flags, + bytes_transferred); + else + return ACE::send_n_i (handle, + buf, + len, + flags, + timeout, + bytes_transferred); +} + +#if defined (ACE_HAS_TLI) + +ACE_INLINE ssize_t +ACE::t_snd_n (ACE_HANDLE handle, + const void *buf, + size_t len, + int flags, + const ACE_Time_Value *timeout, + size_t *bytes_transferred) +{ + if (timeout == 0) + return ACE::t_snd_n_i (handle, + buf, + len, + flags, + bytes_transferred); + else + return ACE::t_snd_n_i (handle, + buf, + len, + flags, + timeout, + bytes_transferred); +} + +#endif /* ACE_HAS_TLI */ + +ACE_INLINE ssize_t +ACE::send_n (ACE_HANDLE handle, + const void *buf, + size_t len, + const ACE_Time_Value *timeout, + size_t *bytes_transferred) +{ + if (timeout == 0) + return ACE::send_n_i (handle, + buf, + len, + bytes_transferred); + else + return ACE::send_n_i (handle, + buf, + len, + timeout, + bytes_transferred); +} + +ACE_INLINE ssize_t +ACE::sendv_n (ACE_HANDLE handle, + const iovec *iov, + int iovcnt, + const ACE_Time_Value *timeout, + size_t *bytes_transferred) +{ + if (timeout == 0) + return ACE::sendv_n_i (handle, + iov, + iovcnt, + bytes_transferred); + else + return ACE::sendv_n_i (handle, + iov, + iovcnt, + timeout, + bytes_transferred); +} + +ACE_INLINE ssize_t +ACE::send_i (ACE_HANDLE handle, const void *buf, size_t len) +{ +#if defined (ACE_WIN32) || defined (HPUX) + return ACE_OS::send (handle, (const char *) buf, len); +#else + return ACE_OS::write (handle, (const char *) buf, len); +#endif /* ACE_WIN32 */ +} + +ACE_INLINE ssize_t +ACE::recv_i (ACE_HANDLE handle, void *buf, size_t len) +{ +#if defined (ACE_WIN32) || defined (ACE_OPENVMS) || defined (ACE_TANDEM_T1248_PTHREADS) + return ACE_OS::recv (handle, (char *) buf, len); +#else + return ACE_OS::read (handle, (char *) buf, len); +#endif /* ACE_WIN32 */ +} + +ACE_INLINE int +ACE::handle_read_ready (ACE_HANDLE handle, + const ACE_Time_Value *timeout) +{ + return ACE::handle_ready (handle, + timeout, + 1, + 0, + 0); +} + +ACE_INLINE int +ACE::handle_write_ready (ACE_HANDLE handle, + const ACE_Time_Value *timeout) +{ + return ACE::handle_ready (handle, + timeout, + 0, + 1, + 0); +} + +ACE_INLINE int +ACE::handle_exception_ready (ACE_HANDLE handle, + const ACE_Time_Value *timeout) +{ + return ACE::handle_ready (handle, + timeout, + 0, + 0, + 1); +} + +ACE_INLINE void +ACE::strdelete (char *s) +{ + delete [] s; +} + +#if defined (ACE_HAS_WCHAR) +ACE_INLINE void +ACE::strdelete (wchar_t *s) +{ + delete [] s; +} +#endif /* ACE_HAS_WCHAR */ + +ACE_INLINE void +ACE::unique_name (const void *object, + ACE_TCHAR *name, + size_t length) +{ + ACE_OS::unique_name (object, name, length); +} + +ACE_INLINE u_long +ACE::log2 (u_long num) +{ + u_long log = 0; + + for (; num > 1; ++log) + num >>= 1; + + return log; +} + +ACE_INLINE ACE_TCHAR +ACE::nibble2hex (u_int n) +{ + // Hexadecimal characters. +#if defined (ACE_VXWORKS) && !defined (__DCPLUSPLUS__) + // temporary solution to prevent Windriver GNU toolchains from spewing + // loads of warnings when inlining. + // problem (incorrect warning leftover from older GNU) has been reported as + // TSR to Windriver. + const ACE_TCHAR hex_chars[] = ACE_TEXT ("0123456789abcdef"); +#else + static const ACE_TCHAR hex_chars[] = ACE_TEXT ("0123456789abcdef"); +#endif + + // Yes, this works for UNICODE + return hex_chars[n & 0x0f]; +} + +ACE_INLINE int +ACE::map_errno (int error) +{ +#if defined (ACE_WIN32) + switch (error) + { + case WSAEWOULDBLOCK: + return EAGAIN; // Same as UNIX errno EWOULDBLOCK. + } +#endif /* ACE_WIN32 */ + + return error; +} + +ACE_INLINE u_char +ACE::hex2byte (ACE_TCHAR c) +{ + if (ACE_OS::ace_isdigit (c)) + return (u_char) (c - ACE_TEXT ('0')); + else if (ACE_OS::ace_islower (c)) + return (u_char) (10 + c - ACE_TEXT ('a')); + else + return (u_char) (10 + c - ACE_TEXT ('A')); +} + +// Close versioned namespace, if enabled by the user. +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/ACE.pc.in b/ACE/ace/ACE.pc.in new file mode 100644 index 00000000000..90b2a9eebd7 --- /dev/null +++ b/ACE/ace/ACE.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: ACE +Description: ADAPTIVE Communication Environment +Version: @VERSION@ +Libs: -L${libdir} -lACE @LIBS@ +Cflags: -I${includedir} diff --git a/ACE/ace/ACE_crc32.cpp b/ACE/ace/ACE_crc32.cpp new file mode 100644 index 00000000000..f9e91c652ce --- /dev/null +++ b/ACE/ace/ACE_crc32.cpp @@ -0,0 +1,161 @@ +// $Id$ + +#include "ace/ACE.h" + +ACE_RCSID (ace, + ACE_crc32, + "$Id$") + + +namespace +{ + /*****************************************************************/ + /* */ + /* CRC LOOKUP TABLE */ + /* ================ */ + /* The following CRC lookup table was generated automagically */ + /* by the Rocksoft^tm Model CRC Algorithm Table Generation */ + /* Program V1.0 using the following model parameters: */ + /* */ + /* Width : 4 bytes. */ + /* Poly : 0x04C11DB7L */ + /* Reverse : TRUE. */ + /* */ + /* For more information on the Rocksoft^tm Model CRC Algorithm, */ + /* see the document titled "A Painless Guide to CRC Error */ + /* Detection Algorithms" by Ross Williams */ + /* (ross@guest.adelaide.edu.au.). This document is likely to be */ + /* in the FTP archive "ftp.adelaide.edu.au/pub/rocksoft". */ + /* */ + /*****************************************************************/ + + const ACE_UINT32 crc_table[] = + { + 0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL, + 0x076DC419L, 0x706AF48FL, 0xE963A535L, 0x9E6495A3L, + 0x0EDB8832L, 0x79DCB8A4L, 0xE0D5E91EL, 0x97D2D988L, + 0x09B64C2BL, 0x7EB17CBDL, 0xE7B82D07L, 0x90BF1D91L, + 0x1DB71064L, 0x6AB020F2L, 0xF3B97148L, 0x84BE41DEL, + 0x1ADAD47DL, 0x6DDDE4EBL, 0xF4D4B551L, 0x83D385C7L, + 0x136C9856L, 0x646BA8C0L, 0xFD62F97AL, 0x8A65C9ECL, + 0x14015C4FL, 0x63066CD9L, 0xFA0F3D63L, 0x8D080DF5L, + 0x3B6E20C8L, 0x4C69105EL, 0xD56041E4L, 0xA2677172L, + 0x3C03E4D1L, 0x4B04D447L, 0xD20D85FDL, 0xA50AB56BL, + 0x35B5A8FAL, 0x42B2986CL, 0xDBBBC9D6L, 0xACBCF940L, + 0x32D86CE3L, 0x45DF5C75L, 0xDCD60DCFL, 0xABD13D59L, + 0x26D930ACL, 0x51DE003AL, 0xC8D75180L, 0xBFD06116L, + 0x21B4F4B5L, 0x56B3C423L, 0xCFBA9599L, 0xB8BDA50FL, + 0x2802B89EL, 0x5F058808L, 0xC60CD9B2L, 0xB10BE924L, + 0x2F6F7C87L, 0x58684C11L, 0xC1611DABL, 0xB6662D3DL, + 0x76DC4190L, 0x01DB7106L, 0x98D220BCL, 0xEFD5102AL, + 0x71B18589L, 0x06B6B51FL, 0x9FBFE4A5L, 0xE8B8D433L, + 0x7807C9A2L, 0x0F00F934L, 0x9609A88EL, 0xE10E9818L, + 0x7F6A0DBBL, 0x086D3D2DL, 0x91646C97L, 0xE6635C01L, + 0x6B6B51F4L, 0x1C6C6162L, 0x856530D8L, 0xF262004EL, + 0x6C0695EDL, 0x1B01A57BL, 0x8208F4C1L, 0xF50FC457L, + 0x65B0D9C6L, 0x12B7E950L, 0x8BBEB8EAL, 0xFCB9887CL, + 0x62DD1DDFL, 0x15DA2D49L, 0x8CD37CF3L, 0xFBD44C65L, + 0x4DB26158L, 0x3AB551CEL, 0xA3BC0074L, 0xD4BB30E2L, + 0x4ADFA541L, 0x3DD895D7L, 0xA4D1C46DL, 0xD3D6F4FBL, + 0x4369E96AL, 0x346ED9FCL, 0xAD678846L, 0xDA60B8D0L, + 0x44042D73L, 0x33031DE5L, 0xAA0A4C5FL, 0xDD0D7CC9L, + 0x5005713CL, 0x270241AAL, 0xBE0B1010L, 0xC90C2086L, + 0x5768B525L, 0x206F85B3L, 0xB966D409L, 0xCE61E49FL, + 0x5EDEF90EL, 0x29D9C998L, 0xB0D09822L, 0xC7D7A8B4L, + 0x59B33D17L, 0x2EB40D81L, 0xB7BD5C3BL, 0xC0BA6CADL, + 0xEDB88320L, 0x9ABFB3B6L, 0x03B6E20CL, 0x74B1D29AL, + 0xEAD54739L, 0x9DD277AFL, 0x04DB2615L, 0x73DC1683L, + 0xE3630B12L, 0x94643B84L, 0x0D6D6A3EL, 0x7A6A5AA8L, + 0xE40ECF0BL, 0x9309FF9DL, 0x0A00AE27L, 0x7D079EB1L, + 0xF00F9344L, 0x8708A3D2L, 0x1E01F268L, 0x6906C2FEL, + 0xF762575DL, 0x806567CBL, 0x196C3671L, 0x6E6B06E7L, + 0xFED41B76L, 0x89D32BE0L, 0x10DA7A5AL, 0x67DD4ACCL, + 0xF9B9DF6FL, 0x8EBEEFF9L, 0x17B7BE43L, 0x60B08ED5L, + 0xD6D6A3E8L, 0xA1D1937EL, 0x38D8C2C4L, 0x4FDFF252L, + 0xD1BB67F1L, 0xA6BC5767L, 0x3FB506DDL, 0x48B2364BL, + 0xD80D2BDAL, 0xAF0A1B4CL, 0x36034AF6L, 0x41047A60L, + 0xDF60EFC3L, 0xA867DF55L, 0x316E8EEFL, 0x4669BE79L, + 0xCB61B38CL, 0xBC66831AL, 0x256FD2A0L, 0x5268E236L, + 0xCC0C7795L, 0xBB0B4703L, 0x220216B9L, 0x5505262FL, + 0xC5BA3BBEL, 0xB2BD0B28L, 0x2BB45A92L, 0x5CB36A04L, + 0xC2D7FFA7L, 0xB5D0CF31L, 0x2CD99E8BL, 0x5BDEAE1DL, + 0x9B64C2B0L, 0xEC63F226L, 0x756AA39CL, 0x026D930AL, + 0x9C0906A9L, 0xEB0E363FL, 0x72076785L, 0x05005713L, + 0x95BF4A82L, 0xE2B87A14L, 0x7BB12BAEL, 0x0CB61B38L, + 0x92D28E9BL, 0xE5D5BE0DL, 0x7CDCEFB7L, 0x0BDBDF21L, + 0x86D3D2D4L, 0xF1D4E242L, 0x68DDB3F8L, 0x1FDA836EL, + 0x81BE16CDL, 0xF6B9265BL, 0x6FB077E1L, 0x18B74777L, + 0x88085AE6L, 0xFF0F6A70L, 0x66063BCAL, 0x11010B5CL, + 0x8F659EFFL, 0xF862AE69L, 0x616BFFD3L, 0x166CCF45L, + 0xA00AE278L, 0xD70DD2EEL, 0x4E048354L, 0x3903B3C2L, + 0xA7672661L, 0xD06016F7L, 0x4969474DL, 0x3E6E77DBL, + 0xAED16A4AL, 0xD9D65ADCL, 0x40DF0B66L, 0x37D83BF0L, + 0xA9BCAE53L, 0xDEBB9EC5L, 0x47B2CF7FL, 0x30B5FFE9L, + 0xBDBDF21CL, 0xCABAC28AL, 0x53B39330L, 0x24B4A3A6L, + 0xBAD03605L, 0xCDD70693L, 0x54DE5729L, 0x23D967BFL, + 0xB3667A2EL, 0xC4614AB8L, 0x5D681B02L, 0x2A6F2B94L, + 0xB40BBE37L, 0xC30C8EA1L, 0x5A05DF1BL, 0x2D02EF8DL + }; + + /*****************************************************************/ + /* End of CRC Lookup Table */ + /*****************************************************************/ +} + +#define COMPUTE(var, ch) (var) = (crc_table[(var ^ ch) & 0xFF] ^ (var >> 8)) + +// Open versioned namespace, if enabled by the user. +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_UINT32 +ACE::crc32 (const char *string) +{ + ACE_UINT32 crc = 0xFFFFFFFF; + + for (const char *p = string; + *p != 0; + ++p) + { + COMPUTE (crc, *p); + } + + return ~crc; +} + +ACE_UINT32 +ACE::crc32 (const void *buffer, size_t len, ACE_UINT32 crc) +{ + crc = ~crc; + + for (const char *p = (const char *) buffer, + *e = (const char *) buffer + len; + p != e; + ++p) + { + COMPUTE (crc, *p); + } + + return ~crc; +} + +ACE_UINT32 +ACE::crc32 (const iovec *iov, int len, ACE_UINT32 crc) +{ + crc = ~crc; + + for (int i = 0; i < len; ++i) + { + for (const char *p = (const char *) iov[i].iov_base, + *e = (const char *) iov[i].iov_base + iov[i].iov_len; + p != e; + ++p) + COMPUTE (crc, *p); + } + + return ~crc; +} + +// Close versioned namespace, if enabled by the user. +ACE_END_VERSIONED_NAMESPACE_DECL + +#undef COMPUTE diff --git a/ACE/ace/ACE_crc_ccitt.cpp b/ACE/ace/ACE_crc_ccitt.cpp new file mode 100644 index 00000000000..f591b53aa10 --- /dev/null +++ b/ACE/ace/ACE_crc_ccitt.cpp @@ -0,0 +1,128 @@ +// $Id$ + +#include "ace/ACE.h" + +ACE_RCSID (ace, + ACE_crc_ccitt, + "$Id$") + +namespace +{ + /*****************************************************************/ + /* */ + /* CRC LOOKUP TABLE */ + /* ================ */ + /* The following CRC lookup table was generated automagically */ + /* by the Rocksoft^tm Model CRC Algorithm Table Generation */ + /* Program V1.0 using the following model parameters: */ + /* */ + /* Width : 2 bytes. */ + /* Poly : 0x1021 */ + /* Reverse : TRUE. */ + /* */ + /* For more information on the Rocksoft^tm Model CRC Algorithm, */ + /* see the document titled "A Painless Guide to CRC Error */ + /* Detection Algorithms" by Ross Williams */ + /* (ross@guest.adelaide.edu.au.). This document is likely to be */ + /* in the FTP archive "ftp.adelaide.edu.au/pub/rocksoft". */ + /* */ + /*****************************************************************/ + + const ACE_UINT16 crc_table[] = + { + 0x0000, 0x1189, 0x2312, 0x329B, 0x4624, 0x57AD, 0x6536, 0x74BF, + 0x8C48, 0x9DC1, 0xAF5A, 0xBED3, 0xCA6C, 0xDBE5, 0xE97E, 0xF8F7, + 0x1081, 0x0108, 0x3393, 0x221A, 0x56A5, 0x472C, 0x75B7, 0x643E, + 0x9CC9, 0x8D40, 0xBFDB, 0xAE52, 0xDAED, 0xCB64, 0xF9FF, 0xE876, + 0x2102, 0x308B, 0x0210, 0x1399, 0x6726, 0x76AF, 0x4434, 0x55BD, + 0xAD4A, 0xBCC3, 0x8E58, 0x9FD1, 0xEB6E, 0xFAE7, 0xC87C, 0xD9F5, + 0x3183, 0x200A, 0x1291, 0x0318, 0x77A7, 0x662E, 0x54B5, 0x453C, + 0xBDCB, 0xAC42, 0x9ED9, 0x8F50, 0xFBEF, 0xEA66, 0xD8FD, 0xC974, + 0x4204, 0x538D, 0x6116, 0x709F, 0x0420, 0x15A9, 0x2732, 0x36BB, + 0xCE4C, 0xDFC5, 0xED5E, 0xFCD7, 0x8868, 0x99E1, 0xAB7A, 0xBAF3, + 0x5285, 0x430C, 0x7197, 0x601E, 0x14A1, 0x0528, 0x37B3, 0x263A, + 0xDECD, 0xCF44, 0xFDDF, 0xEC56, 0x98E9, 0x8960, 0xBBFB, 0xAA72, + 0x6306, 0x728F, 0x4014, 0x519D, 0x2522, 0x34AB, 0x0630, 0x17B9, + 0xEF4E, 0xFEC7, 0xCC5C, 0xDDD5, 0xA96A, 0xB8E3, 0x8A78, 0x9BF1, + 0x7387, 0x620E, 0x5095, 0x411C, 0x35A3, 0x242A, 0x16B1, 0x0738, + 0xFFCF, 0xEE46, 0xDCDD, 0xCD54, 0xB9EB, 0xA862, 0x9AF9, 0x8B70, + 0x8408, 0x9581, 0xA71A, 0xB693, 0xC22C, 0xD3A5, 0xE13E, 0xF0B7, + 0x0840, 0x19C9, 0x2B52, 0x3ADB, 0x4E64, 0x5FED, 0x6D76, 0x7CFF, + 0x9489, 0x8500, 0xB79B, 0xA612, 0xD2AD, 0xC324, 0xF1BF, 0xE036, + 0x18C1, 0x0948, 0x3BD3, 0x2A5A, 0x5EE5, 0x4F6C, 0x7DF7, 0x6C7E, + 0xA50A, 0xB483, 0x8618, 0x9791, 0xE32E, 0xF2A7, 0xC03C, 0xD1B5, + 0x2942, 0x38CB, 0x0A50, 0x1BD9, 0x6F66, 0x7EEF, 0x4C74, 0x5DFD, + 0xB58B, 0xA402, 0x9699, 0x8710, 0xF3AF, 0xE226, 0xD0BD, 0xC134, + 0x39C3, 0x284A, 0x1AD1, 0x0B58, 0x7FE7, 0x6E6E, 0x5CF5, 0x4D7C, + 0xC60C, 0xD785, 0xE51E, 0xF497, 0x8028, 0x91A1, 0xA33A, 0xB2B3, + 0x4A44, 0x5BCD, 0x6956, 0x78DF, 0x0C60, 0x1DE9, 0x2F72, 0x3EFB, + 0xD68D, 0xC704, 0xF59F, 0xE416, 0x90A9, 0x8120, 0xB3BB, 0xA232, + 0x5AC5, 0x4B4C, 0x79D7, 0x685E, 0x1CE1, 0x0D68, 0x3FF3, 0x2E7A, + 0xE70E, 0xF687, 0xC41C, 0xD595, 0xA12A, 0xB0A3, 0x8238, 0x93B1, + 0x6B46, 0x7ACF, 0x4854, 0x59DD, 0x2D62, 0x3CEB, 0x0E70, 0x1FF9, + 0xF78F, 0xE606, 0xD49D, 0xC514, 0xB1AB, 0xA022, 0x92B9, 0x8330, + 0x7BC7, 0x6A4E, 0x58D5, 0x495C, 0x3DE3, 0x2C6A, 0x1EF1, 0x0F78 + }; + + /*****************************************************************/ + /* End of CRC Lookup Table */ + /*****************************************************************/ +} + +#define COMPUTE(var, ch) (var) = (crc_table[(var ^ ch) & 0xFF] ^ (var >> 8)) + +// Open versioned namespace, if enabled by the user. +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_UINT16 +ACE::crc_ccitt (const char *string) +{ + ACE_UINT16 crc = 0xFFFF; + + for (const char *p = string; + *p != 0; + ++p) + { + COMPUTE (crc, *p); + } + + return ~crc; +} + +ACE_UINT16 +ACE::crc_ccitt (const void *buffer, size_t len, ACE_UINT16 crc) +{ + crc = ~crc; + + for (const char *p = (const char *) buffer, + *e = (const char *) buffer + len; + p != e; + ++p) + { + COMPUTE (crc, *p); + } + + return ~crc; +} + +ACE_UINT16 +ACE::crc_ccitt (const iovec *iov, int len, ACE_UINT16 crc) +{ + crc = ~crc; + + for (int i = 0; i < len; ++i) + { + for (const char *p = (const char *) iov[i].iov_base, + *e = (const char *) iov[i].iov_base + iov[i].iov_len; + p != e; + ++p) + COMPUTE (crc, *p); + } + + return ~crc; +} + +// Close versioned namespace, if enabled by the user. +ACE_END_VERSIONED_NAMESPACE_DECL + +#undef COMPUTE diff --git a/ACE/ace/ACE_export.h b/ACE/ace/ACE_export.h new file mode 100644 index 00000000000..a988b143427 --- /dev/null +++ b/ACE/ace/ACE_export.h @@ -0,0 +1,76 @@ +// -*- C++ -*- +// $Id$ +// Definition for Win32 Export directives. +// This file is generated automatically by +// generate_export_file.pl +// ------------------------------ + +#ifndef ACE_EXPORT_H +#define ACE_EXPORT_H + +#include "ace/config-lite.h" + +#if defined (ACE_AS_STATIC_LIBS) + +# if !defined (ACE_HAS_DLL) +# define ACE_HAS_DLL 0 +# endif /* ! ACE_HAS_DLL */ +#else +# if !defined (ACE_HAS_DLL) +# define ACE_HAS_DLL 1 +# endif /* ! ACE_HAS_DLL */ +#endif /* ACE_AS_STATIC_LIB */ + +#if defined (ACE_HAS_DLL) +# if (ACE_HAS_DLL == 1) +# if defined (ACE_BUILD_DLL) +# define ACE_Export ACE_Proper_Export_Flag +# define ACE_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define ACE_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else +# define ACE_Export ACE_Proper_Import_Flag +# define ACE_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define ACE_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* ACE_BUILD_DLL */ +# else +# define ACE_Export +# define ACE_SINGLETON_DECLARATION(T) +# define ACE_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* ! ACE_HAS_DLL == 1 */ +#else +# define ACE_Export +# define ACE_SINGLETON_DECLARATION(T) +# define ACE_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* ACE_HAS_DLL */ + +// Added by hand to help with ACE_OS namespace +#if defined (__TANDEM) && defined (USE_EXPLICIT_EXPORT) +#define ACE_NAMESPACE_STORAGE_CLASS ACE_EXPORT_MACRO extern +#else +#define ACE_NAMESPACE_STORAGE_CLASS extern ACE_EXPORT_MACRO +#endif + +#if defined (__ACE_INLINE__) +# if defined (_MSC_VER) || defined (__MINGW32__) || defined (CYGWIN32) || \ + (defined (__SUNPRO_CC) && __SUNPRO_CC >= 0x560) || \ + (defined (__HP_aCC) && (__HP_aCC >= 60500)) || \ + (defined (__sgi) && \ + defined (_COMPILER_VERSION) && _COMPILER_VERSION <= 730) +# define ACE_NAMESPACE_INLINE_FUNCTION inline +# else +# define ACE_NAMESPACE_INLINE_FUNCTION ACE_NAMESPACE_STORAGE_CLASS inline +# endif +# define ACE_INLINE_TEMPLATE_FUNCTION inline +#else +# define ACE_NAMESPACE_INLINE_FUNCTION ACE_NAMESPACE_STORAGE_CLASS +// Microsoft Visual C++ will accept 'extern'; others refuse. +# if defined (_MSC_VER) || defined (__BORLANDC__) +# define ACE_INLINE_TEMPLATE_FUNCTION ACE_Export +# else +# define ACE_INLINE_TEMPLATE_FUNCTION +# endif +#endif + +#endif /* ACE_EXPORT_H */ + +// End of auto generated file. diff --git a/ACE/ace/ARGV.cpp b/ACE/ace/ARGV.cpp new file mode 100644 index 00000000000..431db5b0ee7 --- /dev/null +++ b/ACE/ace/ARGV.cpp @@ -0,0 +1,359 @@ +// $Id$ + +#ifndef ACE_ARGV_CPP +#define ACE_ARGV_CPP + +#include "ace/Log_Msg.h" +#include "ace/OS_NS_unistd.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_Memory.h" + +#if !defined (__ACE_INLINE__) +#include "ace/ARGV.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, ARGV, "$Id$") + +// Open versioned namespace, if enabled by the user. +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE (ACE_ARGV_Queue_Entry) +ACE_ALLOC_HOOK_DEFINE (ACE_ARGV) + +template +void +ACE_ARGV_Queue_Entry_T::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_ARGV_Queue_Entry_T::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("arg_ = %s"), this->arg_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("quote_arg_ = %d"), (int)this->quote_arg_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +template +void +ACE_ARGV_T::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_ARGV_T::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("argc_ = %d"), this->argc_)); + + ACE_ARGV *this_obj = const_cast (this); + + for (int i = 0; i < this->argc_; i++) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("\nargv_[%i] = %s"), + i, + this_obj->argv ()[i])); + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nbuf = %s\n"), this->buf_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +// Creates this->argv_ out of this->buf_. New memory is allocated for +// each element of the array. This is used by the array-to-string +// style constructor and for creating this->argv_ when in iterative +// mode. + +template +int +ACE_ARGV_T::string_to_argv (void) +{ + ACE_TRACE ("ACE_ARGV_T::string_to_argv"); + + return ACE_OS::string_to_argv (this->buf_, + this->argc_, + this->argv_, + this->substitute_env_args_); +} + +template +ACE_ARGV_T::ACE_ARGV_T (const CHAR_TYPE buf[], + bool substitute_env_args) + : substitute_env_args_ (substitute_env_args), + iterative_ (false), + argc_ (0), + argv_ (0), + buf_ (0), + length_ (0), + queue_ () +{ + ACE_TRACE ("ACE_ARGV_T::ACE_ARGV_T CHAR_TYPE[] to CHAR_TYPE *[]"); + + if (buf == 0 || buf[0] == 0) + return; + + // Make an internal copy of the string. + ACE_NEW (this->buf_, + CHAR_TYPE[ACE_OS::strlen (buf) + 1]); + ACE_OS::strcpy (this->buf_, buf); + + // Create this->argv_. + if (this->string_to_argv () == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("string_to_argv"))); +} + +template +ACE_ARGV_T::ACE_ARGV_T (CHAR_TYPE *argv[], + bool substitute_env_args, + bool quote_arg) + : substitute_env_args_ (substitute_env_args), + iterative_ (false), + argc_ (0), + argv_ (0), + buf_ (0), + length_ (0), + queue_ () +{ + ACE_TRACE ("ACE_ARGV_T::ACE_ARGV_T CHAR_TYPE*[] to CHAR_TYPE[]"); + + if (argv == 0 || argv[0] == 0) + return; + + this->argc_ = ACE_OS::argv_to_string (argv, + this->buf_, + substitute_env_args, + quote_arg); +} + +template +ACE_ARGV_T::ACE_ARGV_T (CHAR_TYPE *first_argv[], + CHAR_TYPE *second_argv[], + bool substitute_env_args, + bool quote_args) + : substitute_env_args_ (substitute_env_args), + iterative_ (false), + argc_ (0), + argv_ (0), + buf_ (0), + length_ (0), + queue_ () +{ + ACE_TRACE ("ACE_ARGV_T::ACE_ARGV_T CHAR_TYPE*[] + CHAR_TYPE *[] to CHAR_TYPE[]"); + + int first_argc = 0; + int second_argc = 0; + + CHAR_TYPE *first_buf = 0; + CHAR_TYPE *second_buf = 0; + + // convert the first argv to a string + if (first_argv != 0 && first_argv[0] != 0) + { + first_argc = ACE_OS::argv_to_string (first_argv, + first_buf, + substitute_env_args, + quote_args); + } + + // convert the second argv to a string + if (second_argv != 0 && second_argv[0] != 0) + { + second_argc = ACE_OS::argv_to_string (second_argv, + second_buf, + substitute_env_args, + quote_args); + } + + // Add the number of arguments in both the argvs. + this->argc_ = first_argc + second_argc; + + size_t buf_len = + ACE_OS::strlen (first_buf) + ACE_OS::strlen (second_buf) + 1; + + // Allocate memory to the lenght of the combined argv string. + ACE_NEW (this->buf_, + CHAR_TYPE[buf_len + 1]); + + // copy the first argv string to the buffer + ACE_OS::strcpy (this->buf_, first_buf); + + // concatenate the second argv string to the buffer + ACE_OS::strcat (this->buf_, second_buf); + + // Delete the first and second buffers + delete [] first_buf; + delete [] second_buf; +} + +template +ACE_ARGV_T::ACE_ARGV_T (bool substitute_env_args) + : substitute_env_args_ (substitute_env_args), + iterative_ (true), + argc_ (0), + argv_ (0), + buf_ (0), + length_ (0), + queue_ () +{ + ACE_TRACE ("ACE_ARGV_T::ACE_ARGV_T Iterative"); + + // Nothing to do yet -- the user puts in arguments via add () +} + +template +int +ACE_ARGV_T::add (const CHAR_TYPE *next_arg, bool quote_arg) +{ + // Only allow this to work in the "iterative" verion -- the + // ACE_ARGVs created with the one argument constructor. + if (!this->iterative_) + { + errno = EINVAL; + return -1; + } + + this->length_ += ACE_OS::strlen (next_arg); + if (quote_arg && ACE_OS::strchr (next_arg, ' ') != 0) + { + this->length_ += 2; + if (ACE_OS::strchr (next_arg, '"') != 0) + for (const CHAR_TYPE * p = next_arg; *p != '\0'; ++p) + if (*p == '"') ++this->length_; + } + else + { + quote_arg = false; + } + + // Put the new argument at the end of the queue. + if (this->queue_.enqueue_tail (ACE_ARGV_Queue_Entry_T (next_arg, quote_arg)) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("Can't add more to ARGV queue")), + -1); + + ++this->argc_; + + // Wipe argv_ and buf_ away so that they will be recreated if the + // user calls argv () or buf (). + if (this->argv_ != 0) + { + for (int i = 0; this->argv_[i] != 0; i++) + ACE_OS::free ((void *) this->argv_[i]); + + delete [] this->argv_; + this->argv_ = 0; + } + + delete [] this->buf_; + this->buf_ = 0; + + return 0; +} + +template +int +ACE_ARGV_T::add (CHAR_TYPE *argv[], bool quote_args) +{ + for (int i = 0; argv[i] != 0; i++) + if (this->add (argv[i], quote_args) == -1) + return -1; + + return 0; +} + +// Free up argv_ and buf_ + +template +ACE_ARGV_T::~ACE_ARGV_T (void) +{ + ACE_TRACE ("ACE_ARGV_T::~ACE_ARGV_T"); + + if (this->argv_ != 0) + for (int i = 0; this->argv_[i] != 0; i++) + ACE_OS::free ((void *) this->argv_[i]); + + delete [] this->argv_; + delete [] this->buf_; +} + +// Create buf_ out of the queue_. This is only used in the +// "iterative" mode. + +template +int +ACE_ARGV_T::create_buf_from_queue (void) +{ + ACE_TRACE ("ACE_ARGV_T::create_buf_from_queue"); + + // If the are no arguments, don't do anything + if (this->argc_ <= 0) + return -1; + + delete [] this->buf_; + + ACE_NEW_RETURN (this->buf_, + CHAR_TYPE[this->length_ + this->argc_], + -1); + + // Get an iterator over the queue + ACE_Unbounded_Queue_Iterator > iter (this->queue_); + + ACE_ARGV_Queue_Entry_T *arg = 0; + CHAR_TYPE *ptr = this->buf_; + size_t len; + + while (!iter.done ()) + { + // Get next argument from the queue. + iter.next (arg); + iter.advance (); + + if (arg->quote_arg_) + { + *ptr++ = '"'; + if (ACE_OS::strchr (arg->arg_, '"') != 0) + { + for (const CHAR_TYPE * p = arg->arg_; *p != '\0'; ++p) + { + if (*p == '"') *ptr++ = '\\'; + *ptr++ = *p; + } + } + else + { + len = ACE_OS::strlen (arg->arg_); + // Copy the argument into buf_ + ACE_OS::memcpy ((void *) ptr, + (const void *) (arg->arg_), + len * sizeof (CHAR_TYPE)); + // Move the pointer down. + ptr += len; + } + *ptr++ = '"'; + } + else + { + len = ACE_OS::strlen (arg->arg_); + // Copy the argument into buf_ + ACE_OS::memcpy ((void *) ptr, + (const void *) (arg->arg_), + len * sizeof (CHAR_TYPE)); + // Move the pointer down. + ptr += len; + } + + // Put in an argument separating space. + *ptr++ = ' '; + } + + // Put in the NUL terminator + ptr[-1] = '\0'; + + return 0; +} + +// Close versioned namespace, if enabled by the user. +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_ARGV_CPP */ diff --git a/ACE/ace/ARGV.h b/ACE/ace/ARGV.h new file mode 100644 index 00000000000..a50535f1dea --- /dev/null +++ b/ACE/ace/ARGV.h @@ -0,0 +1,306 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file ARGV.h + * + * $Id$ + * + * @author Doug Schmidt + * @author Everett Anderson + */ +//========================================================================== + +#ifndef ACE_ARGUMENT_VECTOR_H +#define ACE_ARGUMENT_VECTOR_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Global_Macros.h" +#include "ace/Unbounded_Queue.h" + +// Open versioned namespace, if enabled by the user. +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_ARGV_Queue_Entry_T + * + * @brief An entry in the queue which keeps user supplied arguments. + */ +template +class ACE_ARGV_Queue_Entry_T +{ +public: + // = Initialization and termination. + /// Initialize a ACE_ARGV_Queue_Entry_T. + ACE_ARGV_Queue_Entry_T (void); + + /** + * Initialize a ACE_ARGV_Queue_Entry_T. + * + * @param arg Pointer to an argument + * + * @param quote_arg The argument @a arg need to be quoted + * while adding to the vector. + */ + ACE_ARGV_Queue_Entry_T (const CHAR_TYPE *arg, + bool quote_arg); + + /** + * Initialize a ACE_ARGV_Queue_Entry_T. + * + * @param entry Pointer to a queue entry + */ + ACE_ARGV_Queue_Entry_T (const ACE_ARGV_Queue_Entry_T &entry); + + /// We need this destructor to keep some compilers from complaining. + /// It's just a no-op, however. + ~ACE_ARGV_Queue_Entry_T (void); + + /// Dump the state of this object. + void dump (void) const; + + // Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + + /// Pointer to the argument. + const CHAR_TYPE * arg_; + + /// The argument need to be quoted while adding to the vector. + bool quote_arg_; +}; + +/** + * @class ACE_ARGV_T + * + * @brief Builds a counted argument vector (ala argc/argv) from either + * a string or a set of separate tokens. This class preserves whitespace + * within tokens only if the whitespace-containing token is enclosed in + * either single (') or double (") quotes. This is consistent with the + * expected behavior if an argument vector obtained using this class is + * passed to, for example, ACE_Get_Opt. + * + * This class can substitute environment variable values for tokens that + * are environment variable references (e.g., @c $VAR). This only works + * if the token is an environment variable reference and nothing else; it + * doesn't substitute environment variable references within a token. + * For example, @c $HOME/file will not substitute the value of the HOME + * environment variable. + */ +template +class ACE_ARGV_T +{ +public: + // = Initialization and termination. + /** + * Splits the specified string into an argument vector. Arguments in the + * string are delimited by whitespace. Whitespace-containing arguments + * must be enclosed in quotes, either single (') or double ("). + * + * @param buf A nul-terminated CHAR_TYPE array to split into arguments + * for the vector. + * + * @param substitute_env_args If non-zero, any token that is an + * environment variable reference (e.g., @c $VAR) will have + * its environment variable value in the resultant vector + * in place of the environment variable name. + */ + explicit ACE_ARGV_T (const CHAR_TYPE buf[], + bool substitute_env_args = true); + + /** + * Initializes the argument vector from a set of arguments. Any environment + * variable references are translated (if applicable) during execution of + * this method. + * + * @param argv An array of tokens to initialize the object with. The + * array must be terminated with a 0 pointer. All needed + * data is copied from @a argv during this call; the pointers + * in @a argv are not needed after this call, and the memory + * referred to by @a argv is not referenced by this object. + * + * @param substitute_env_args If non-zero, any element of @a argv that is + * an environment variable reference (e.g., @c $VAR) will have + * its environment variable value in the resultant vector + * in place of the environment variable name. + * + * @param quote_args If non-zero each argument @a argv[i] needs to + * be enclosed in double quotes ('"'). + */ + explicit ACE_ARGV_T (CHAR_TYPE *argv[], + bool substitute_env_args = true, + bool quote_args = false); + + /** + * Initializes the argument vector from two combined argument vectors. + * + * @param first_argv An array of tokens to initialize the object with. + * The array must be terminated with a 0 pointer. + * @param second_argv An array of tokens that is concatenated with the + * the tokens in @a first_argv. The array must be + * terminated with a 0 pointer. + * @param substitute_env_args If non-zero, any element of @a first_argv + * or @a second_argv that is an environment variable + * reference (e.g., @c $VAR) will have its environment + * variable value in the resultant vector in place + * of the environment variable name. + * + * @param quote_args If non-zero each arguments @a first_argv[i] and + * @a second_argv[i] needs to be enclosed + * in double quotes ('"'). + */ + ACE_ARGV_T (CHAR_TYPE *first_argv[], + CHAR_TYPE *second_argv[], + bool substitute_env_args = true, + bool quote_args = false); + + /** + * Initialize this object so arguments can be added later using one + * of the add methods. This is referred to as the @i iterative method + * of adding arguments to this object. + */ + explicit ACE_ARGV_T (bool substitute_env_args = true); + + /// Destructor. + ~ACE_ARGV_T (void); + + /** @name Accessor methods + * + * These methods access the argument vector contained in this object. + */ + //@{ + /** + * Returns the specified element of the current argument vector. + * + * @param index Index to the desired element. + * + * @retval Pointer to the indexed string. + * @retval 0 if @a index is out of bounds. + */ + const CHAR_TYPE *operator[] (size_t index); + + /** + * Returns the current argument vector. The returned pointers are to data + * maintained internally to this class. Do not change or delete either the + * pointers or the memory to which they refer. + */ + CHAR_TYPE **argv (void); + + /// Returns the current number of arguments. + int argc (void) const; + + /** + * Returns a single string form of the current arguments. The returned + * pointer refers to memory maintained internally to this class. Do not + * change or delete it. + */ + const CHAR_TYPE *buf (void); + + //@} + + /// Dump the state of this object. + void dump (void) const; + + // Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + + /** + * Add another argument. This only works in the iterative mode. + * + * @note This method copies the specified pointer, but not the data + * contained in the referenced memory. Thus, if the content of + * the memory referred to by @a next_arg are changed after this + * method returns, the results are undefined. + * + * @param next_arg Pointer to the next argument to add to the vector. + * + * @param quote_arg The argument @a next_arg need to be quoted while + * adding to the vector. + * + * @retval 0 on success; -1 on failure. Most likely @c errno values are: + * - EINVAL: This object is not in iterative mode. + * - ENOMEM: Not enough memory available to save @a next_arg. + */ + int add (const CHAR_TYPE *next_arg, bool quote_arg = false); + + /** + * Add an array of arguments. This only works in the iterative mode. + * + * @note This method copies the specified pointers, but not the data + * contained in the referenced memory. Thus, if the content of + * the memory referred to by any of the @a argv elements is + * changed after this method returns, the results are undefined. + * + * @param argv Pointers to the arguments to add to the vector. + * @a argv must be terminated by a 0 pointer. + * + * @param quote_args If non-zero each argument @a argv[i] needs to + * be enclosed in double quotes ('"'). + * + * @retval 0 on success; -1 on failure. Most likely @c errno values are: + * - EINVAL: This object is not in iterative mode. + * - ENOMEM: Not enough memory available to save @a next_arg. + */ + int add (CHAR_TYPE *argv[], bool quote_args = false); + +private: + /// Copy constructor not implemented. + ACE_UNIMPLEMENTED_FUNC (ACE_ARGV_T (const ACE_ARGV_T&)) + + /// Assignment operator not implemented. + ACE_UNIMPLEMENTED_FUNC (ACE_ARGV_T operator= (const ACE_ARGV_T&)) + + /// Creates buf_ from the queue of added args, deletes previous buf_. + int create_buf_from_queue (void); + + /// Converts buf_ into the CHAR_TYPE *argv[] format. + int string_to_argv (void); + + /// Replace args with environment variable values? + bool substitute_env_args_; + + bool iterative_; + + /// Number of arguments in the ARGV array. + int argc_; + + /// The array of string arguments. + CHAR_TYPE **argv_; + + /// Buffer containing the contents. + CHAR_TYPE *buf_; + + /// Total length of the arguments in the queue, not counting + /// separating spaces + size_t length_; + + /// Queue which keeps user supplied arguments. This is only + /// active in the "iterative" mode. + ACE_Unbounded_Queue > queue_; +}; + +typedef ACE_ARGV_Queue_Entry_T ACE_ARGV_Queue_Entry; +typedef ACE_ARGV_T ACE_ARGV; + +// Close versioned namespace, if enabled by the user. +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/ARGV.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/ARGV.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("ARGV.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" +#endif /* ACE_ARGUMENT_VECTOR_H */ diff --git a/ACE/ace/ARGV.inl b/ACE/ace/ARGV.inl new file mode 100644 index 00000000000..e84166f49ba --- /dev/null +++ b/ACE/ace/ARGV.inl @@ -0,0 +1,104 @@ +/* -*- C++ -*- */ +// $Id$ + +#include "ace/Global_Macros.h" + +// Open versioned namespace, if enabled by the user. +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE +ACE_ARGV_Queue_Entry_T::ACE_ARGV_Queue_Entry_T (void) + : arg_(0), + quote_arg_(false) +{ + // No-op +} + +template ACE_INLINE +ACE_ARGV_Queue_Entry_T::ACE_ARGV_Queue_Entry_T (const CHAR_TYPE *arg, + bool quote_arg) + : arg_(arg), + quote_arg_(quote_arg) +{ + // No-op +} + +template ACE_INLINE +ACE_ARGV_Queue_Entry_T::ACE_ARGV_Queue_Entry_T (const ACE_ARGV_Queue_Entry_T &entry) + : arg_(entry.arg_), + quote_arg_(entry.quote_arg_) +{ + // No-op +} + +template ACE_INLINE +ACE_ARGV_Queue_Entry_T::~ACE_ARGV_Queue_Entry_T (void) +{ + // No-op just to keep some compilers happy... +} + +// Return the number of args +template +ACE_INLINE int +ACE_ARGV_T::argc (void) const +{ + ACE_TRACE ("ACE_ARGV_T::argc"); + // Try to create the argv_ if it isn't there + ACE_ARGV_T *nonconst_this = + const_cast *> (this); + (void) nonconst_this->argv (); + return this->argc_; +} + +// Return the arguments in a space-separated string +template +ACE_INLINE const CHAR_TYPE * +ACE_ARGV_T::buf (void) +{ + ACE_TRACE ("ACE_ARGV_T::buf"); + + if (this->buf_ == 0 && this->iterative_) + this->create_buf_from_queue (); + + return (const CHAR_TYPE *) this->buf_; +} + +// Return the arguments in an entry-per-argument array + +template +ACE_INLINE CHAR_TYPE ** +ACE_ARGV_T::argv (void) +{ + ACE_TRACE ("ACE_ARGV_T::argv"); + + // Try to create the argv_ if it isn't there + if (this->argv_ == 0) + { + if (this->iterative_ && this->buf_ == 0) + this->create_buf_from_queue (); + + // Convert buf_ to argv_ + if (this->string_to_argv () == -1) + return (CHAR_TYPE **) 0; + } + + return (CHAR_TYPE **) this->argv_; +} + +// Subscript operator. + +template +ACE_INLINE const CHAR_TYPE * +ACE_ARGV_T::operator[] (size_t i) +{ + ACE_TRACE ("ACE_ARGV_T::operator[]"); + + // Don't go out of bounds. + if (i >= static_cast (this->argc_)) + return 0; + + return (const CHAR_TYPE *) this->argv ()[i]; +} + +// Close versioned namespace, if enabled by the user. +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/ATM_Acceptor.cpp b/ACE/ace/ATM_Acceptor.cpp new file mode 100644 index 00000000000..5a78f1c32c8 --- /dev/null +++ b/ACE/ace/ATM_Acceptor.cpp @@ -0,0 +1,309 @@ +// $Id$ + +#include "ace/ATM_Acceptor.h" + +ACE_RCSID(ace, ATM_Acceptor, "$Id$") + +#if defined (ACE_HAS_ATM) + +#if defined (ACE_HAS_LINUX_ATM) +#include /**/ "linux/atmdev.h" +#endif /* ACE_HAS_LINUX_ATM */ + +#if !defined (__ACE_INLINE__) +#include "ace/ATM_Acceptor.inl" +#endif /* __ACE_INLINE__ */ + + +// Open versioned namespace, if enabled by the user. +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Put the actual definitions of the ACE_ATM_Request and +// ACE_ATM_Request_Queue classes here to hide them from clients... + +ACE_ALLOC_HOOK_DEFINE(ACE_ATM_Acceptor) + +ACE_ATM_Acceptor::ACE_ATM_Acceptor (void) +{ + ACE_TRACE ("ACE_ATM_Acceptor::ACE_ATM_Acceptor"); +} + +ACE_ATM_Acceptor::~ACE_ATM_Acceptor (void) +{ + ACE_TRACE ("ACE_ATM_Acceptor::~ACE_ATM_Acceptor"); +} + +int +ACE_ATM_Acceptor::get_local_addr (ACE_ATM_Addr &local_addr) +{ + ACE_TRACE ("ACE_ATM_Acceptor::get_local_addr"); + +#if defined (ACE_HAS_FORE_ATM_WS2) + unsigned long ret = 0; + DWORD deviceID = 0; + ATM_ADDRESS addr; + struct sockaddr_atm *laddr; + + if (::WSAIoctl ((int) ((ACE_SOCK_Acceptor *)this) -> get_handle (), + SIO_GET_ATM_ADDRESS, + (LPVOID) &deviceID, + sizeof (DWORD), + (LPVOID)&addr, + sizeof (ATM_ADDRESS), + &ret, + 0, + 0) == SOCKET_ERROR) { + ACE_OS::printf ("ATM_Acceptor (get_local_addr): WSIoctl: %d\n", + ::WSAGetLastError ()); + return -1; + } + + laddr = (struct sockaddr_atm *)local_addr.get_addr (); + ACE_OS::memcpy ((void *)& (laddr -> satm_number), + (void *)&addr, + ATM_ADDR_SIZE - 1); + + return 0; +#elif defined (ACE_HAS_FORE_ATM_XTI) + ACE_UNUSED_ARG (local_addr); + + return 0; +#elif defined (ACE_HAS_LINUX_ATM) + ATM_Addr *myaddr = (ATM_Addr *)local_addr.get_addr (); + int addrlen = sizeof (myaddr->sockaddratmsvc); + + if (ACE_OS::getsockname (acceptor_.get_handle (), + (struct sockaddr *) & (myaddr->sockaddratmsvc), + &addrlen) < 0) { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("ATM_Acceptor (get_local_addr): ioctl: %d\n"), + errno)); + return -1; + } + + return (0); +#else + ACE_UNUSED_ARG (local_addr); + + return 0; +#endif /* ACE_HAS_FORE_ATM_WS2 && ACE_HAS_FORE_ATM_XTI */ +} + +ACE_HANDLE +ACE_ATM_Acceptor::open (const ACE_Addr &remote_sap, + int backlog, + ACE_ATM_Params params) +{ + ACE_TRACE ("ACE_ATM_Acceptor::open"); +#if defined (ACE_HAS_FORE_ATM_XTI) + ACE_HANDLE handle = acceptor_.open (remote_sap, + params.get_reuse_addr (), + params.get_oflag (), + params.get_info (), + backlog, + params.get_device ()); + return (handle == ACE_INVALID_HANDLE ? -1 : 0); +#elif defined (ACE_HAS_FORE_ATM_WS2) + struct sockaddr_atm local_atm_addr; + ACE_HANDLE ret; + DWORD flags = 0; + + /* Create a local endpoint of communication */ + + // Only leaves can listen. + flags = ACE_FLAG_MULTIPOINT_C_LEAF | ACE_FLAG_MULTIPOINT_D_LEAF; + + if ((ret = ACE_OS::socket (AF_ATM, + SOCK_RAW, + ATMPROTO_AAL5, + 0, + 0, + flags)) + == ACE_INVALID_HANDLE) { + ACE_OS::printf ("Acceptor (open): socket %d\n", + ::WSAGetLastError ()); + return (ret); + } + + ((ACE_SOCK_Acceptor *)this) -> set_handle (ret); + + /* Set up the address information to become a server */ + ACE_OS::memset ((void *) &local_atm_addr, 0, sizeof local_atm_addr); + local_atm_addr.satm_family = AF_ATM; + local_atm_addr.satm_number.AddressType = SAP_FIELD_ANY_AESA_REST; + local_atm_addr.satm_number.Addr[ ATM_ADDR_SIZE - 1 ] + = ((ACE_ATM_Addr *)&remote_sap) -> get_selector (); + local_atm_addr.satm_blli.Layer2Protocol = SAP_FIELD_ANY; + local_atm_addr.satm_blli.Layer3Protocol = SAP_FIELD_ABSENT; + local_atm_addr.satm_bhli.HighLayerInfoType = SAP_FIELD_ABSENT; + + /* Associate address with endpoint */ + if (ACE_OS::bind (((ACE_SOCK_Acceptor *)this) -> get_handle (), + reinterpret_cast (&local_atm_addr), + sizeof local_atm_addr) == -1) { + ACE_OS::printf ("Acceptor (open): bind %d\n", ::WSAGetLastError ()); + return (ACE_INVALID_HANDLE); + } + + /* Make endpoint listen for service requests */ + if (ACE_OS::listen (( (ACE_SOCK_Acceptor *)this) -> get_handle (), + backlog) + == -1) { + ACE_OS::printf ("Acceptor (open): listen %d\n", ::WSAGetLastError ()); + return (ACE_INVALID_HANDLE); + } + + return 0; +#elif defined (ACE_HAS_LINUX_ATM) + //we need to set the qos before binding to the socket + //use remote_sap as local_sap + + ACE_ATM_Addr local_sap; + ATM_Addr *local_sap_addr = (ATM_Addr*)local_sap.get_addr (); + ACE_ATM_QoS def_qos; + ATM_QoS qos = def_qos.get_qos (); + + ACE_HANDLE handle; + if ((handle = ACE_OS::socket (params.get_protocol_family (), + params.get_type (), + params.get_protocol (), + params.get_protocol_info (), + params.get_sock_group (), + params.get_flags () + )) + == ACE_INVALID_HANDLE) { + ACE_DEBUG (LM_DEBUG, + ACE_TEXT ("Acceptor (socket): socket %d\n"), + errno); + return (ACE_INVALID_HANDLE); + } + + ((ACE_SOCK_Acceptor *)this) -> set_handle (handle); + if (ACE_OS::setsockopt (handle, + SOL_ATM, + SO_ATMQOS, + reinterpret_cast (&qos), + sizeof (qos)) < 0) { + ACE_OS::printf ("Acceptor (setsockopt): setsockopt:%d\n", + errno); + } + + struct atmif_sioc req; + struct sockaddr_atmsvc aux_addr[1024]; + + req.number = 0; + req.arg = aux_addr; + req.length = sizeof (aux_addr); + if (ACE_OS::ioctl (handle, + ATM_GETADDR, + &req) < 0) { + ACE_OS::perror ("Acceptor (setsockopt): ioctl:"); + } + else { + local_sap_addr->sockaddratmsvc = aux_addr[0]; + } + local_sap.set_selector (( (ACE_ATM_Addr*)&remote_sap)->get_selector ()); + + if (ACE_OS::bind (handle, + reinterpret_cast ( + &(local_sap_addr->sockaddratmsvc)), + sizeof (local_sap_addr->sockaddratmsvc) + ) == -1) { + ACE_DEBUG (LM_DEBUG, + ACE_TEXT ("Acceptor (open): bind %d\n"), + errno); + return -1; + } + // Make endpoint listen for service requests + if (ACE_OS::listen (handle, + backlog) + == -1) { + ACE_DEBUG (LM_DEBUG, + ACE_TEXT ("Acceptor (listen): listen %d\n"), + errno); + return -1; + } + + return 0; +#else + ACE_UNUSED_ARG (remote_sap); + ACE_UNUSED_ARG (backlog); + ACE_UNUSED_ARG (params); +#endif /* ACE_HAS_FORE_ATM_XTI/ACE_HAS_FORE_ATM_WS2/ACE_HAS_LINUX_ATM */ +} + +int +ACE_ATM_Acceptor::accept (ACE_ATM_Stream &new_sap, + ACE_Addr *remote_addr, + ACE_Time_Value *timeout, + int restart, + int reset_new_handle, + ACE_ATM_Params params, + ACE_ATM_QoS qos) +{ + ACE_TRACE ("ACE_ATM_Acceptor::accept"); +#if defined (ACE_HAS_FORE_ATM_XTI) + ATM_QoS optbuf = qos.get_qos (); + + return (acceptor_.accept (new_sap.get_stream (), + remote_addr, + timeout, + restart, + reset_new_handle, + params.get_rw_flag (), + params.get_user_data (), + &optbuf)); +#elif defined (ACE_HAS_FORE_ATM_WS2) + ACE_HANDLE n_handle; + ACE_HANDLE s_handle = ((ACE_SOCK_Acceptor *) this) -> get_handle (); + struct sockaddr_atm *cli_addr + = (struct sockaddr_atm *)remote_addr -> get_addr (); + int caddr_len = sizeof (struct sockaddr_atm); + + do { + n_handle = ACE_OS::accept (s_handle, + reinterpret_cast (cli_addr), + &caddr_len); + } while (n_handle == ACE_INVALID_HANDLE && errno == EINTR); + + ((ACE_ATM_Addr *)remote_addr) -> set (cli_addr, + ((ACE_ATM_Addr *)remote_addr) -> get_selector ()); + ((ACE_IPC_SAP *)&new_sap) -> set_handle (n_handle); + + return 0; +#elif defined (ACE_HAS_LINUX_ATM) + ACE_UNUSED_ARG (params); + + ACE_HANDLE s_handle = ((ACE_SOCK_Acceptor *) this) -> get_handle (); + struct atm_qos accept_qos = qos.get_qos (); + + if (ACE_OS::setsockopt (s_handle, + SOL_ATM, + SO_ATMQOS, + reinterpret_cast (&accept_qos), + sizeof (accept_qos)) < 0) { + ACE_OS::printf ("Acceptor (accept): error setting Qos"); + } + + return (acceptor_.accept (new_sap.get_stream (), + remote_addr, + timeout, + restart, + reset_new_handle)); +#else + ACE_UNUSED_ARG (new_sap); + ACE_UNUSED_ARG (remote_addr); + ACE_UNUSED_ARG (timeout); + ACE_UNUSED_ARG (restart); + ACE_UNUSED_ARG (reset_new_handle); + ACE_UNUSED_ARG (params); + ACE_UNUSED_ARG (qos); + return (0); +#endif /* ACE_HAS_FORE_ATM_XTI */ +} + +// Close versioned namespace, if enabled by the user. +ACE_END_VERSIONED_NAMESPACE_DECL + + +#endif /* ACE_HAS_ATM */ diff --git a/ACE/ace/ATM_Acceptor.h b/ACE/ace/ATM_Acceptor.h new file mode 100644 index 00000000000..5ed236099e3 --- /dev/null +++ b/ACE/ace/ATM_Acceptor.h @@ -0,0 +1,123 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file ATM_Acceptor.h + * + * $Id$ + * + * @author Joe Hoffert + */ +//============================================================================= + + +#ifndef ACE_ATM_ACCEPTOR_H +#define ACE_ATM_ACCEPTOR_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_ATM) + +#include "ace/ATM_Stream.h" +#include "ace/ATM_Params.h" +#include "ace/ATM_QoS.h" + +#if defined (ACE_HAS_LINUX_ATM) +#include /**/ "atm.h" +#endif /* ACE_HAS_LINUX_ATM */ + +#if defined (ACE_HAS_FORE_ATM_WS2) || defined (ACE_HAS_LINUX_ATM) +#include "ace/SOCK_Acceptor.h" +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef ACE_SOCK_Acceptor ATM_Acceptor; +ACE_END_VERSIONED_NAMESPACE_DECL +#elif defined (ACE_HAS_FORE_ATM_XTI) +#include "ace/TLI_Acceptor.h" +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef ACE_TLI_Acceptor ATM_Acceptor; +ACE_END_VERSIONED_NAMESPACE_DECL +#endif // ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM + +// Open versioned namespace, if enabled by the user. +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Forward declarations. +class ACE_Time_Value; + +/** + * @class ACE_ATM_Acceptor + * + * @brief Defines the member functions for ACE_ATM_Acceptor abstraction. + * + * This class wraps up the ACE_SOCK_Acceptor and ACE_TLI_Acceptor + * to make the mechanism for the ATM protocol transparent. + */ +class ACE_Export ACE_ATM_Acceptor +{ + +public: + // = Initialization and termination methods. + /// Default constructor. + ACE_ATM_Acceptor (void); + + ~ACE_ATM_Acceptor (); + + /// Initiate a passive mode connection. + ACE_ATM_Acceptor (const ACE_Addr &remote_sap, + int backlog = ACE_DEFAULT_BACKLOG, + ACE_ATM_Params params = ACE_ATM_Params()); + + /// Initiate a passive mode socket. + ACE_HANDLE open (const ACE_Addr &remote_sap, + int backlog = ACE_DEFAULT_BACKLOG, + ACE_ATM_Params params = ACE_ATM_Params()); + + /// Close down the acceptor and release resources. + int close (void); + + // = Passive connection acceptance method. + + /// Accept a new data transfer connection. A @a timeout of 0 means + /// block forever, a @a timeout of {0, 0} means poll. @a restart == 1 + /// means "restart if interrupted." + int accept (ACE_ATM_Stream &new_sap, + ACE_Addr *remote_addr = 0, + ACE_Time_Value *timeout = 0, + int restart = 1, + int reset_new_handle = 0, + ACE_ATM_Params params = ACE_ATM_Params(), + ACE_ATM_QoS qos = ACE_ATM_QoS()); + + /// Get the local address currently listening on + int get_local_addr( ACE_ATM_Addr &local_addr ); + + // = Meta-type info + typedef ACE_ATM_Addr PEER_ADDR; + typedef ACE_ATM_Stream PEER_STREAM; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + ATM_Acceptor acceptor_; +}; + +// Close versioned namespace, if enabled by the user. +ACE_END_VERSIONED_NAMESPACE_DECL + + +#if defined (__ACE_INLINE__) +#include "ace/ATM_Acceptor.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* ACE_HAS_ATM */ +#include /**/ "ace/post.h" +#endif /* ACE_ATM_ACCEPTOR_H */ diff --git a/ACE/ace/ATM_Acceptor.inl b/ACE/ace/ATM_Acceptor.inl new file mode 100644 index 00000000000..c08fd048f68 --- /dev/null +++ b/ACE/ace/ATM_Acceptor.inl @@ -0,0 +1,43 @@ +// -*- C++ -*- +// +// $Id$ + +// Open versioned namespace, if enabled by the user. +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE void +ACE_ATM_Acceptor::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_ATM_Acceptor::dump"); +#endif /* ACE_HAS_DUMP */ +} + +ACE_INLINE +ACE_ATM_Acceptor::ACE_ATM_Acceptor (const ACE_Addr &remote_sap, + int backlog, + ACE_ATM_Params params) +{ + ACE_TRACE ("ACE_ATM_Acceptor::ACE_ATM_Acceptor"); + + //FUZZ: disable check_for_lack_ACE_OS + if (open (remote_sap, backlog, params) < 0) + //FUZZ: enable check_for_lack_ACE_OS + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_ATM_Acceptor::ACE_ATM_Acceptor"))); +} + +ACE_INLINE +int +ACE_ATM_Acceptor::close (void) +{ +#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2) || defined (ACE_HAS_LINUX_ATM) + return (acceptor_.close()); +#else + return 0; +#endif // ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM +} + +// Close versioned namespace, if enabled by the user. +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/ATM_Addr.cpp b/ACE/ace/ATM_Addr.cpp new file mode 100644 index 00000000000..19088cef5b1 --- /dev/null +++ b/ACE/ace/ATM_Addr.cpp @@ -0,0 +1,522 @@ +// $Id$ + +// Defines the Internet domain address family address format. + +#include "ace/ATM_Addr.h" +#if defined (ACE_HAS_ATM) + +#include "ace/Log_Msg.h" + +#if defined (ACE_HAS_FORE_ATM_WS2) +#include /**/ "forews2.h" +#endif /* ACE_HAS_FORE_ATM_WS2 */ + +#if !defined (__ACE_INLINE__) +#include "ace/ATM_Addr.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, ATM_Addr, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_ATM_Addr) + +#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2) +#define BHLI_MAGIC "FORE_ATM" +// This is line rate in cells/s for an OC-3 MM interface. +const long ACE_ATM_Addr::LINE_RATE = 353207; +const int ACE_ATM_Addr::OPT_FLAGS_CPID = 0x1; +const int ACE_ATM_Addr::OPT_FLAGS_PMP = 0x2; +const int ACE_ATM_Addr::DEFAULT_SELECTOR = 0x99; +#elif defined (ACE_HAS_LINUX_ATM) +//pbrandao:for Linux: +//pbrandao:for now stick with current definitions +//pbrandao:see if later need to change +const long ACE_ATM_Addr::LINE_RATE = 353207; +const int ACE_ATM_Addr::OPT_FLAGS_CPID = 0; +const int ACE_ATM_Addr::OPT_FLAGS_PMP = 0; +const int ACE_ATM_Addr::DEFAULT_SELECTOR = 0x99; +#else +const long ACE_ATM_Addr::LINE_RATE = 0L; +const int ACE_ATM_Addr::OPT_FLAGS_CPID = 0; +const int ACE_ATM_Addr::OPT_FLAGS_PMP = 0; +const int ACE_ATM_Addr::DEFAULT_SELECTOR = 0x0; +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ + +// Default constructor + +ACE_ATM_Addr::ACE_ATM_Addr (u_char selector) +#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2) + : ACE_Addr (AF_ATM, +#elif defined (ACE_HAS_LINUX_ATM) + : ACE_Addr (PF_ATMSVC, +#else + : ACE_Addr (AF_UNSPEC, +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ + sizeof this->atm_addr_) +{ + // ACE_TRACE ("ACE_ATM_Addr::ACE_ATM_Addr"); + (void) ACE_OS::memset ((void *) &this->atm_addr_, + 0, + sizeof this->atm_addr_); + this->init (selector); +} + +// Copy constructor. + +ACE_ATM_Addr::ACE_ATM_Addr (const ACE_ATM_Addr &sap, + u_char selector) +#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2) + : ACE_Addr (AF_ATM, +#elif defined (ACE_HAS_LINUX_ATM) + : ACE_Addr (PF_ATMSVC, +#else + : ACE_Addr (AF_UNSPEC, +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ + sizeof this->atm_addr_) +{ + ACE_TRACE ("ACE_ATM_Addr::ACE_ATM_Addr"); + this->set (sap, selector); +#if defined (ACE_HAS_LINUX_ATM) + this->atm_addr_.sockaddratmsvc.sas_family = PF_ATMSVC; + this->atm_addr_.atmsap.blli[0].l3_proto = ATM_L3_NONE; + this->atm_addr_.atmsap.blli[0].l2_proto = ATM_L2_NONE; + this->atm_addr_.atmsap.bhli.hl_type = ATM_HL_NONE; +#endif /* ACE_HAS_LINUX_ATM */ +} + +ACE_ATM_Addr::ACE_ATM_Addr (const ATM_Addr *sap, + u_char selector) +#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2) + : ACE_Addr (AF_ATM, +#elif defined (ACE_HAS_LINUX_ATM) + : ACE_Addr (PF_ATMSVC, +#else + : ACE_Addr (AF_UNSPEC, +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ + sizeof this->atm_addr_) +{ + ACE_TRACE ("ACE_ATM_Addr::ACE_ATM_Addr"); + this->set (sap, selector); +} + + +ACE_ATM_Addr::ACE_ATM_Addr (const ACE_TCHAR sap[], + u_char selector) +#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2) + : ACE_Addr (AF_ATM, +#elif defined (ACE_HAS_LINUX_ATM) + : ACE_Addr (PF_ATMSVC, +#else + : ACE_Addr (AF_UNSPEC, +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ + sizeof this->atm_addr_) +{ + ACE_TRACE ("ACE_ATM_Addr::ACE_ATM_Addr"); + this->set (sap, selector); +} + +ACE_ATM_Addr::~ACE_ATM_Addr (void) +{ +} + +// Return the address. + +void * +ACE_ATM_Addr::get_addr (void) const +{ + ACE_TRACE ("ACE_ATM_Addr::get_addr"); + return (void *) &this->atm_addr_; +} + +void +ACE_ATM_Addr::init (u_char selector) +{ +#if defined (ACE_HAS_FORE_ATM_XTI) + // Note: this approach may be FORE implementation-specific. When we + // bind with tag_addr ABSENT and tag_selector PRESENT, only the + // selector (i.e. address[19]) is used by the TP. The rest of the + // local address is filled in by the TP and can be obtained via the + // 'ret' parameter or with t_getname ()/t_getprotaddr (). + + atm_addr_.addressType = (u_int16_t) AF_ATM; + + atm_addr_.sap.t_atm_sap_addr.SVE_tag_addr = (int8_t) T_ATM_ABSENT; + atm_addr_.sap.t_atm_sap_addr.SVE_tag_selector = (int8_t) T_ATM_PRESENT; + + atm_addr_.sap.t_atm_sap_addr.address_format = (u_int8_t) T_ATM_ENDSYS_ADDR; + atm_addr_.sap.t_atm_sap_addr.address_length = ATMNSAP_ADDR_LEN; + atm_addr_.sap.t_atm_sap_addr.address[ATMNSAP_ADDR_LEN - 1] = selector; + + atm_addr_.sap.t_atm_sap_layer2.SVE_tag = (int8_t) T_ATM_ABSENT; + atm_addr_.sap.t_atm_sap_layer3.SVE_tag = (int8_t) T_ATM_ABSENT; + + atm_addr_.sap.t_atm_sap_appl.SVE_tag = (int8_t) T_ATM_PRESENT; + atm_addr_.sap.t_atm_sap_appl.ID_type = (u_int8_t) T_ATM_USER_APP_ID; + + ACE_OS::memcpy (atm_addr_.sap.t_atm_sap_appl.ID.user_defined_ID, + BHLI_MAGIC, + sizeof atm_addr_.sap.t_atm_sap_appl.ID); +#elif defined (ACE_HAS_FORE_ATM_WS2) + ACE_OS::memset ((void *)&atm_addr_, 0, sizeof atm_addr_); + atm_addr_.satm_number.Addr[ ATM_ADDR_SIZE - 1 ] = (char)selector; + atm_addr_.satm_family = AF_ATM; + atm_addr_.satm_number.AddressType = ATM_NSAP; + atm_addr_.satm_number.NumofDigits = ATM_ADDR_SIZE; + atm_addr_.satm_blli.Layer2Protocol = SAP_FIELD_ABSENT; + atm_addr_.satm_blli.Layer3Protocol = SAP_FIELD_ABSENT; + atm_addr_.satm_bhli.HighLayerInfoType = SAP_FIELD_ABSENT; + + // Need to know the correspondence. + //atm_addr_.sap.t_atm_sap_appl.SVE_tag = (int8_t) T_ATM_PRESENT; + //atm_addr_.sap.t_atm_sap_appl.ID_type = (u_int8_t) T_ATM_USER_APP_ID; + //ACE_OS::memcpy (atm_addr_.sap.t_atm_sap_appl.ID.user_defined_ID, + // BHLI_MAGIC, + // sizeof atm_addr_.sap.t_atm_sap_appl.ID); +#elif defined (ACE_HAS_LINUX_ATM) + atm_addr_.sockaddratmsvc.sas_family = AF_ATMSVC; + atm_addr_.sockaddratmsvc.sas_addr.prv[ATM_ESA_LEN - 1] = (char)selector; + atm_addr_.atmsap.blli[0].l3_proto = ATM_L3_NONE; + atm_addr_.atmsap.blli[0].l2_proto = ATM_L2_NONE; + atm_addr_.atmsap.bhli.hl_type = ATM_HL_NONE; +#else + ACE_UNUSED_ARG (selector); +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ +} + +int +ACE_ATM_Addr::set (const ACE_ATM_Addr &sap, + u_char selector) +{ + ACE_TRACE ("ACE_ATM_Addr::set"); + + this->init (selector); + + this->ACE_Addr::base_set (sap.get_type (), + sap.get_size ()); + +#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2) + ACE_ASSERT (sap.get_type () == AF_ATM); +#elif defined (ACE_HAS_LINUX_ATM) + ACE_ASSERT (sap.get_type () == PF_ATMSVC); +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 */ + + (void) ACE_OS::memcpy ((void *) &this->atm_addr_, + (void *) &sap.atm_addr_, + sizeof this->atm_addr_); + return 0; +} + +int +ACE_ATM_Addr::set (const ATM_Addr *sap, + u_char selector) +{ + ACE_TRACE ("ACE_ATM_Addr::set"); + + this->init (selector); + +#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2) + this->ACE_Addr::base_set (AF_ATM, +#elif defined (ACE_HAS_LINUX_ATM) + this->ACE_Addr::base_set (PF_ATMSVC, +#else + this->ACE_Addr::base_set (AF_UNSPEC, +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 */ + sizeof (*sap)); + + (void) ACE_OS::memcpy ((void *) &this->atm_addr_, + (void *) sap, + sizeof this->atm_addr_); + return 0; +} + +int +ACE_ATM_Addr::set (const ACE_TCHAR address[], + u_char selector) +{ + ACE_TRACE ("ACE_ATM_Addr::set"); + int ret; + + this->init (selector); + +#if defined (ACE_HAS_FORE_ATM_XTI) + atm_addr_.sap.t_atm_sap_addr.SVE_tag_addr = + (int8_t) T_ATM_PRESENT; +#endif /* ACE_HAS_FORE_ATM_XTI */ + + ret = this -> string_to_addr (address); + this -> set_selector (selector); + return ret; +} + +// Transform the string into the current addressing format. + +int +ACE_ATM_Addr::string_to_addr (const ACE_TCHAR sap[]) +{ + ACE_TRACE ("ACE_ATM_Addr::string_to_addr"); + +#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2) + this->ACE_Addr::base_set (AF_ATM, +#elif defined (ACE_HAS_LINUX_ATM) + this->ACE_Addr::base_set (PF_ATMSVC, +#else + this->ACE_Addr::base_set (AF_UNSPEC, +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ + sizeof this->atm_addr_); +#if defined (ACE_HAS_FORE_ATM_XTI) + struct hostent *entry; + struct atmnsap_addr *nsap; + + // Yow, someone gave us a NULL ATM address! + if (sap == 0) + { + errno = EINVAL; + return -1; + } + else if ((entry = gethostbyname_atmnsap ((ACE_TCHAR *)sap)) != 0) + { + ACE_OS::memcpy (atm_addr_.sap.t_atm_sap_addr.address, + entry->h_addr_list[0], + ATMNSAP_ADDR_LEN - 1); + } + else if ((nsap = atmnsap_addr (sap)) != 0) + { + ACE_OS::memcpy (atm_addr_.sap.t_atm_sap_addr.address, + nsap->atmnsap, + ATMNSAP_ADDR_LEN); + } + else { + errno = EINVAL; + return -1; + } +#elif defined (ACE_HAS_FORE_ATM_WS2) + DWORD dwValue; + HANDLE hLookup; + WSAQUERYSETW qsRestrictions; + CSADDR_INFO csaBuffer; + WCHAR tmpWStr[100]; + + MultiByteToWideChar (CP_ACP, MB_PRECOMPOSED, sap, -1, tmpWStr, 100); + + csaBuffer.LocalAddr.iSockaddrLength = sizeof (struct sockaddr_atm); + csaBuffer.LocalAddr.lpSockaddr = (struct sockaddr *)&atm_addr_; + csaBuffer.RemoteAddr.iSockaddrLength = sizeof (struct sockaddr_atm); + csaBuffer.RemoteAddr.lpSockaddr = (struct sockaddr *)&atm_addr_; + + qsRestrictions.dwSize = sizeof (WSAQUERYSETW); + qsRestrictions.lpszServiceInstanceName = 0; + qsRestrictions.lpServiceClassId = &FORE_NAME_CLASS; + qsRestrictions.lpVersion = 0; + qsRestrictions.lpszComment = 0; + qsRestrictions.dwNameSpace = FORE_NAME_SPACE; + qsRestrictions.lpNSProviderId = 0; + qsRestrictions.lpszContext = L""; + qsRestrictions.dwNumberOfProtocols = 0; + qsRestrictions.lpafpProtocols = 0; + qsRestrictions.lpszQueryString = tmpWStr; + qsRestrictions.dwNumberOfCsAddrs = 1; + qsRestrictions.lpcsaBuffer = &csaBuffer; + qsRestrictions.lpBlob = 0; //&blob; + + if (::WSALookupServiceBeginW (&qsRestrictions, LUP_RETURN_ALL, &hLookup) + == SOCKET_ERROR) { + ACE_OS::printf ("Error: WSALookupServiceBeginW failed! %d\n", + ::WSAGetLastError ()); + return -1; + } + + dwValue = sizeof (WSAQUERYSETW); + + if (::WSALookupServiceNextW (hLookup, 0, &dwValue, &qsRestrictions) + == SOCKET_ERROR) { + if (WSAGetLastError () != WSA_E_NO_MORE) { + ACE_OS::printf ("Error: WSALookupServiceNextW failed! %d\n", + ::WSAGetLastError ()); + return -1; + } + } + + if (WSALookupServiceEnd (hLookup) == SOCKET_ERROR) { + ACE_OS::printf ("Error : WSALookupServiceEnd failed! %d \n", + ::WSAGetLastError ()); + errno = EINVAL; + return -1; + } +#elif defined (ACE_HAS_LINUX_ATM) + if (sap == 0 || !ACE_OS::strcmp (sap,"")) { + errno = EINVAL; + return -1; + } + + if (text2atm ((ACE_TCHAR *)sap, + (struct sockaddr *)& (atm_addr_.sockaddratmsvc), + sizeof (atm_addr_.sockaddratmsvc), + T2A_SVC | T2A_NAME) < 0) { + ACE_DEBUG (LM_DEBUG, + "Error : text2atm failed!\n"); + errno = EINVAL; + return -1; + } +#else + ACE_UNUSED_ARG (sap); + + return 0; +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ + +#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2) || defined (ACE_HAS_LINUX_ATM) + return 0; +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 */ +} + +// Transform the current address into string format. + +int +ACE_ATM_Addr::addr_to_string (ACE_TCHAR addr[], + size_t addrlen) const +{ + ACE_TRACE ("ACE_ATM_Addr::addr_to_string"); + +#if defined (ACE_HAS_FORE_ATM_XTI) + ACE_TCHAR buffer[MAXNAMELEN + 1]; + struct atmnsap_addr nsap; + ACE_OS::memcpy (nsap.atmnsap, + atm_addr_.sap.t_atm_sap_addr.address, + ATMNSAP_ADDR_LEN); + ACE_OS::sprintf (buffer, + ACE_TEXT ("%s"), + atmnsap_ntoa (nsap)); + + size_t total_len = ACE_OS::strlen (buffer) + sizeof ('\0'); + + if (addrlen < total_len) + return -1; + else + ACE_OS::strcpy (addr, buffer); + + return 0; +#elif defined (ACE_HAS_FORE_ATM_WS2) + ACE_TCHAR buffer[MAXNAMELEN + 1]; + int i; + + if (addrlen < ATM_ADDR_SIZE + 1) + return -1; + + for (i = 0; i < ATM_ADDR_SIZE; i++) { + buffer[ i * 3 ] = '\0'; + ACE_OS::sprintf (buffer, ACE_TEXT ("%s%02x."), + buffer, + atm_addr_.satm_number.Addr[ i ]); + } + + buffer[ ATM_ADDR_SIZE * 3 - 1 ] = '\0'; + ACE_OS::strcpy (addr, buffer); + + return 0; +#elif defined (ACE_HAS_LINUX_ATM) + ACE_TCHAR buffer[MAX_ATM_ADDR_LEN + 1]; + int total_len; + if ((total_len = atm2text (buffer, + sizeof buffer, + (struct sockaddr *)& (atm_addr_.sockaddratmsvc), + A2T_PRETTY)) < 0) { + ACE_DEBUG ((LM_DEBUG,"ACE_ATM_Addr (addr_to_string): atm2text failed\n")); + return -1; + } + if (addrlen < (size_t)total_len) + return -1; + else + ACE_OS::strcpy (addr, + buffer); + + return 0; +#else + ACE_UNUSED_ARG (addr); + ACE_UNUSED_ARG (addrlen); + return -1; +#endif /* ACE_HAS_FORE_ATM_XTI && ACE_HAS_FORE_ATM_WS2 */ +} + +const ACE_TCHAR * +ACE_ATM_Addr::addr_to_string (void) const +{ + ACE_TRACE ("ACE_ATM_Addr::addr_to_string"); + + static ACE_TCHAR addr[MAXHOSTNAMELEN + 1]; + if (this->addr_to_string (addr, + MAXHOSTNAMELEN + 1) < 0) + return 0; + + return addr; +} + +// Set a pointer to the address. +void +ACE_ATM_Addr::set_addr (void *addr, int len) +{ + ACE_TRACE ("ACE_ATM_Addr::set_addr"); + +#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2) + this->ACE_Addr::base_set (AF_ATM, +#elif defined (ACE_HAS_LINUX_ATM) + this->ACE_Addr::base_set (PF_ATMSVC, +#else + this->ACE_Addr::base_set (AF_UNSPEC, +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_WS2 */ + len); + ACE_OS::memcpy ((void *) &this->atm_addr_, + (void *) addr, len); +} + +// Compare two addresses for inequality. + +bool +ACE_ATM_Addr::operator != (const ACE_ATM_Addr &sap) const +{ + ACE_TRACE ("ACE_ATM_Addr::operator !="); + return ! ((*this) == sap); +} + +// Compare two addresses for equality. + +bool +ACE_ATM_Addr::operator == (const ACE_ATM_Addr &sap) const +{ + ACE_TRACE ("ACE_ATM_Addr::operator =="); + +#if defined (ACE_HAS_LINUX_ATM) + return (atm_equal ((const struct sockaddr *)& (this->atm_addr_.sockaddratmsvc), + (const struct sockaddr *)& (sap.atm_addr_.sockaddratmsvc), + 0, + 0) + && + sap_equal (& (this->atm_addr_.atmsap), + & (sap.atm_addr_.atmsap), + 0)); +#else + return ACE_OS::memcmp (&atm_addr_, + &sap.atm_addr_, + sizeof (ATM_Addr)) == 0; +#endif /* ACE_HAS_LINUX_ATM */ +} + +void +ACE_ATM_Addr::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_ATM_Addr::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + + ACE_TCHAR s[ACE_MAX_FULLY_QUALIFIED_NAME_LEN + 16]; + ACE_OS::sprintf (s, + ACE_TEXT ("%s"), + this->addr_to_string ()); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%s"), s)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_ATM */ diff --git a/ACE/ace/ATM_Addr.h b/ACE/ace/ATM_Addr.h new file mode 100644 index 00000000000..34cbfd876a6 --- /dev/null +++ b/ACE/ace/ATM_Addr.h @@ -0,0 +1,197 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file ATM_Addr.h + * + * $Id$ + * + * @author Joe Hoffert + */ +//========================================================================== + +#ifndef ACE_ATM_ADDR_H +#define ACE_ATM_ADDR_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_ATM) + +#include /**/ "ace/ACE_export.h" +#include "ace/Addr.h" + +#if defined (ACE_HAS_FORE_ATM_XTI) +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef ATMSAPAddress ATM_Addr; +ACE_END_VERSIONED_NAMESPACE_DECL +#elif defined (ACE_HAS_FORE_ATM_WS2) +#define FORE_NAME_SPACE NS_ALL +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef struct sockaddr_atm ATM_Addr; +ACE_END_VERSIONED_NAMESPACE_DECL +#elif defined (ACE_HAS_LINUX_ATM) + +#include /**/ "atm.h" + +// Open versioned namespace, if enabled by the user. +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +//pbrandao:as Linux has this 2 structs separeted we "link it" here +typedef struct _linux_atm_addr +{ + struct sockaddr_atmsvc sockaddratmsvc; + struct atm_sap atmsap; +} ATM_Addr; +#else +typedef int ATM_Addr; +#endif /* ACE_HAS_FORE_ATM_XTI/ACE_HAS_FORE_ATM_WS2/ACE_HAS_LINUX_ATM */ + +/** + * @class ACE_ATM_Addr + * + * @brief Defines the ATM domain address family address format. + */ +class ACE_Export ACE_ATM_Addr : public ACE_Addr +{ +public: + // Constants used for ATM options + static const long LINE_RATE; + static const int OPT_FLAGS_CPID; + static const int OPT_FLAGS_PMP; + static const int DEFAULT_SELECTOR; + + // = Initialization methods. + /// Default constructor. + ACE_ATM_Addr (u_char selector = DEFAULT_SELECTOR); + + /// Copy constructor. + ACE_ATM_Addr (const ACE_ATM_Addr &, + u_char selector = DEFAULT_SELECTOR); + + /** + * Creates an ACE_ATM_Addr from an ATMSAPAddress structure. This + * is vendor specific (FORE systems). May need to change when other + * vendors are supported. + */ + ACE_ATM_Addr (const ATM_Addr *, + u_char selector = DEFAULT_SELECTOR); + + /** + * Initializes an ACE_ATM_Addr from the which can be + * "atm-address" (e.g., + * "47.0005.80.ffe100.0000.f20f.2200.0020480694f9.00") or "hostname" + * (e.g., "frisbee.cs.wustl.edu"). + */ + ACE_ATM_Addr (const ACE_TCHAR sap[], + u_char selector = DEFAULT_SELECTOR); + + /// Default dtor. + ~ACE_ATM_Addr (void); + + // = Initialization methods (useful after object construction). + /// Default initialization for non-address values (e.g., + /// t_atm_sap_addr.SVE_tag_addr, t_atm_sap_addr.SVE_tag_selector) + void init (u_char selector = DEFAULT_SELECTOR); + + /// Initializes from another ACE_ATM_Addr. + int set (const ACE_ATM_Addr &, + u_char selector = DEFAULT_SELECTOR); + + /** + * Initializes an ACE_ATM_Addr from an ATMSAPAddress/sockaddr_atm + * structure. This is vendor specific (FORE systems). May need to + * change when other vendors are supported. + */ + int set (const ATM_Addr *, + u_char selector = DEFAULT_SELECTOR); + + /** + * Initializes an ACE_ATM_Addr from the which can be + * "atm-address" (e.g., + * "47.0005.80.ffe100.0000.f20f.2200.0020480694f9.00") or "hostname" + * (e.g., "frisbee.cs.wustl.edu"). + */ + int set (const ACE_TCHAR sap[], + u_char selector = DEFAULT_SELECTOR); + + /** + * Initializes an ACE_ATM_Addr from the which can be + * "atm-address" (e.g., + * "47.0005.80.ffe100.0000.f20f.2200.0020480694f9.00") or "hostname" + * (e.g., "frisbee.cs.wustl.edu"). + */ + virtual int string_to_addr (const ACE_TCHAR sap[]); + + /** + * Return the character representation of the ATM address (e.g., + * "47.0005.80.ffe100.0000.f20f.2200.0020480694f9.00") storing it in + * the @a addr (which is assumed to be bytes long). This + * version is reentrant. Returns -1 if the of the @a addr + * is too small, else 0. + */ + virtual int addr_to_string (ACE_TCHAR addr[], + size_t addrlen) const; + + /** + * Return the character representation of the ATM address (e.g., + * "47.0005.80.ffe100.0000.f20f.2200.0020480694f9.00"). Returns -1 + * if the of the is too small, else 0.(This version + * is non-reentrant since it returns a pointer to a static data + * area.) + */ + const ACE_TCHAR *addr_to_string (void) const; + + /// Return a pointer to the underlying network address. + virtual void *get_addr (void) const; + + /// Set a pointer to the address. + virtual void set_addr (void *, int); + + /// Return the selector for network address. + u_char get_selector (void) const; + + /// Set the selector for the network address. + void set_selector (u_char selector); + + /** + * Compare two addresses for equality. The addresses are considered + * equal if they contain the same ATM address. Q: Is there any + * other check for equality needed for ATM? + */ + bool operator == (const ACE_ATM_Addr &SAP) const; + + /// Compare two addresses for inequality. + bool operator != (const ACE_ATM_Addr &SAP) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +// char *construct_options (ACE_HANDLE fd, +// int qos_kb, +// int flags, +// long *optsize); +// // Construct options for ATM connections + +private: + ATM_Addr atm_addr_; +}; + +// Close versioned namespace, if enabled by the user. +ACE_END_VERSIONED_NAMESPACE_DECL + + +#if defined (__ACE_INLINE__) +#include "ace/ATM_Addr.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* ACE_HAS_ATM */ +#include /**/ "ace/post.h" +#endif /* ACE_ATM_ADDR_H */ diff --git a/ACE/ace/ATM_Addr.inl b/ACE/ace/ATM_Addr.inl new file mode 100644 index 00000000000..8120c6d11d5 --- /dev/null +++ b/ACE/ace/ATM_Addr.inl @@ -0,0 +1,37 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE u_char +ACE_ATM_Addr::get_selector (void) const +{ + ACE_TRACE ("ACE_ATM_Addr::get_selector"); +#if defined (ACE_HAS_FORE_ATM_XTI) + return atm_addr_.sap.t_atm_sap_addr.address[ATMNSAP_ADDR_LEN - 1]; +#elif defined (ACE_HAS_FORE_ATM_WS2) + return atm_addr_.satm_number.Addr[ ATM_ADDR_SIZE - 1 ]; +#elif defined (ACE_HAS_LINUX_ATM) + return atm_addr_.sockaddratmsvc.sas_addr.prv[ATM_ESA_LEN - 1]; +#else + return 0; +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ +} + +ACE_INLINE void +ACE_ATM_Addr::set_selector (u_char selector) +{ + ACE_TRACE ("ACE_ATM_Addr::set_selector"); +#if defined (ACE_HAS_FORE_ATM_XTI) + atm_addr_.sap.t_atm_sap_addr.address[ATMNSAP_ADDR_LEN - 1] = selector; +#elif defined (ACE_HAS_FORE_ATM_WS2) + atm_addr_.satm_number.Addr[ ATM_ADDR_SIZE - 1 ] = selector; +#elif defined (ACE_HAS_LINUX_ATM) + atm_addr_.sockaddratmsvc.sas_addr.prv[ATM_ESA_LEN - 1] = selector; +#else + ACE_UNUSED_ARG (selector); +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/ATM_Connector.cpp b/ACE/ace/ATM_Connector.cpp new file mode 100644 index 00000000000..ca33a2bb833 --- /dev/null +++ b/ACE/ace/ATM_Connector.cpp @@ -0,0 +1,138 @@ +// ATM_Connector.cpp +// $Id$ + +#include "ace/ATM_Connector.h" +#if defined (ACE_HAS_ATM) + +#include "ace/Handle_Set.h" + +ACE_RCSID(ace, ATM_Connector, "$Id$") + +#if !defined (__ACE_INLINE__) +#include "ace/ATM_Connector.inl" +#endif /* __ACE_INLINE__ */ + +// Open versioned namespace, if enabled by the user. +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_ATM_Connector) + +ACE_ATM_Connector::ACE_ATM_Connector (void) +{ + ACE_TRACE ("ACE_ATM_Connector::ACE_ATM_Connector"); +} + +// Actively connect and produce a new ACE_ATM_Stream if things go well... +// Connect the to the , waiting up to +// amount of time if necessary. + +int +ACE_ATM_Connector::connect (ACE_ATM_Stream &new_stream, + const ACE_ATM_Addr &remote_sap, + ACE_ATM_Params params, + ACE_ATM_QoS options, + ACE_Time_Value *timeout, + const ACE_ATM_Addr &local_sap, + int reuse_addr, + int flags, + int perms) +{ + ACE_TRACE ("ACE_ATM_Connector::connect"); +#if defined (ACE_HAS_FORE_ATM_XTI) + return connector_.connect(new_stream.get_stream(), + remote_sap, + timeout, + local_sap, + reuse_addr, + flags, + perms, + params.get_device(), + params.get_info(), + params.get_rw_flag(), + params.get_user_data(), + &options.get_qos()); +#elif defined (ACE_HAS_FORE_ATM_WS2) + ACE_DEBUG(LM_DEBUG, + ACE_TEXT ("ATM_Connector(connect): set QoS parameters\n" )); + + ACE_HANDLE s = new_stream.get_handle(); + struct sockaddr_atm *saddr = ( struct sockaddr_atm *)remote_sap.get_addr(); + ACE_QoS cqos = options.get_qos(); + + ACE_QoS_Params qos_params = ACE_QoS_Params(0, + 0, + &cqos, + 0, + 0); + + ACE_DEBUG(LM_DEBUG, + ACE_TEXT ("ATM_Connector(connect): connecting...\n")); + + int result = ACE_OS::connect( s, + ( struct sockaddr *)saddr, + sizeof( struct sockaddr_atm ), + qos_params ); + + if ( result != 0 ) + ACE_OS::printf( "ATM_Connector(connect): connection failed, %d\n", + ::WSAGetLastError()); + + return result; +#elif defined (ACE_HAS_LINUX_ATM) + ACE_UNUSED_ARG (params); + ACE_UNUSED_ARG (timeout); + ACE_UNUSED_ARG (reuse_addr); + ACE_UNUSED_ARG (perms); + ACE_UNUSED_ARG (flags); + + ACE_HANDLE handle = new_stream.get_handle(); + ATM_QoS qos =options.get_qos(); + ATM_Addr *local_addr=(ATM_Addr*)local_sap.get_addr(), + *remote_addr=(ATM_Addr*)remote_sap.get_addr(); + + if (ACE_OS::setsockopt(handle, + SOL_ATM, + SO_ATMSAP, + reinterpret_cast (&(local_addr->atmsap)), + sizeof(local_addr->atmsap)) < 0) { + ACE_OS::printf( "ATM_Connector(connect): unable to set atmsap %d\nContinuing...", + errno); + } + if (ACE_OS::setsockopt(handle, + SOL_ATM, + SO_ATMQOS, + reinterpret_cast (&qos), + sizeof(qos)) < 0) { + ACE_DEBUG((LM_DEBUG,ACE_TEXT ("ATM_Connector(connect): unable to set qos %d\n"), + errno)); + return -1; + } + + int result = ACE_OS::connect(handle, + (struct sockaddr *)&(remote_addr->sockaddratmsvc), + sizeof( remote_addr->sockaddratmsvc)); + + if ( result != 0 ) + ACE_DEBUG(LM_DEBUG, + ACE_TEXT ("ATM_Connector(connect): connection failed, %d\n"), + errno); + + return result; +#else + ACE_UNUSED_ARG (new_stream); + ACE_UNUSED_ARG (remote_sap); + ACE_UNUSED_ARG (params); + ACE_UNUSED_ARG (options); + ACE_UNUSED_ARG (timeout); + ACE_UNUSED_ARG (local_sap); + ACE_UNUSED_ARG (reuse_addr); + ACE_UNUSED_ARG (flags); + ACE_UNUSED_ARG (perms); + return 0; +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ +} + +// Close versioned namespace, if enabled by the user. +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_ATM */ diff --git a/ACE/ace/ATM_Connector.h b/ACE/ace/ATM_Connector.h new file mode 100644 index 00000000000..7e820ae765e --- /dev/null +++ b/ACE/ace/ATM_Connector.h @@ -0,0 +1,164 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file ATM_Connector.h + * + * $Id$ + * + * @author Joe Hoffert + */ +//============================================================================= + +#ifndef ACE_ATM_CONNECTOR_H +#define ACE_ATM_CONNECTOR_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_ATM) + +#include "ace/ATM_Stream.h" +#include "ace/ATM_Params.h" +#include "ace/ATM_QoS.h" + +#if defined (ACE_WIN32) || defined (ACE_HAS_LINUX_ATM) +#include "ace/SOCK_Connector.h" +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef ACE_SOCK_Connector ATM_Connector; +ACE_END_VERSIONED_NAMESPACE_DECL +#else +#include "ace/XTI_ATM_Mcast.h" +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef ACE_XTI_ATM_Mcast ATM_Connector; +// Open versioned namespace, if enabled by the user. +ACE_END_VERSIONED_NAMESPACE_DECL +#endif + +// Open versioned namespace, if enabled by the user. +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_ATM_Connector + * + * @brief Defines an active connection factory for the ACE_ATM C++ + * wrappers. + */ +class ACE_Export ACE_ATM_Connector +{ +public: + // = Initialization methods. + /// Default constructor. + ACE_ATM_Connector (void); + + /** + * Actively connect and produce a @a new_stream if things go well. + * The @a remote_sap is the address that we are trying to connect + * with. The are the parameters needed for either socket + * or XTI/ATM connections. The @a timeout is the amount of time to + * wait to connect. If it's 0 then we block indefinitely. If + * *timeout == {0, 0} then the connection is done using non-blocking + * mode. In this case, if the connection can't be made immediately + * the value of -1 is returned with @c errno == EWOULDBLOCK. If + * *timeout > {0, 0} then this is the maximum amount of time to wait before + * timing out. If the time expires before the connection is made + * @c errno == ETIME. The @a local_sap is the value of local address + * to bind to. If it's the default value of then + * the user is letting the OS do the binding. If @a reuse_addr == 1 + * then the is reused, even if it hasn't been cleanedup yet. + */ + ACE_ATM_Connector (ACE_ATM_Stream &new_stream, + const ACE_ATM_Addr &remote_sap, + ACE_ATM_Params params = ACE_ATM_Params(), + ACE_ATM_QoS options = ACE_ATM_QoS(), + ACE_Time_Value *timeout = 0, + const ACE_ATM_Addr &local_sap = ACE_ATM_Addr( "", 0 ), + int reuse_addr = 0, +#if defined (ACE_WIN32) + int flags = 0, +#else + int flags = O_RDWR, +#endif /* ACE_WIN32 */ + int perms = 0); + + /** + * Actively connect and produce a @a new_stream if things go well. + * The @a remote_sap is the address that we are trying to connect + * with. The are the parameters needed for either socket + * or XTI/ATM connections. The @a timeout is the amount of time to + * wait to connect. If it's 0 then we block indefinitely. If + * *timeout == {0, 0} then the connection is done using non-blocking + * mode. In this case, if the connection can't be made immediately + * the value of -1 is returned with @c errno == EWOULDBLOCK. If + * *timeout > {0, 0} then this is the maximum amount of time to wait before + * timing out. If the time expires before the connection is made + * @c errno == ETIME. The @a local_sap is the value of local address + * to bind to. If it's the default value of then + * the user is letting the OS do the binding. If @a reuse_addr == 1 + * then the is reused, even if it hasn't been cleanedup yet. + */ + int connect (ACE_ATM_Stream &new_stream, + const ACE_ATM_Addr &remote_sap, + ACE_ATM_Params params = ACE_ATM_Params(), + ACE_ATM_QoS options = ACE_ATM_QoS(), + ACE_Time_Value *timeout = 0, + const ACE_ATM_Addr &local_sap = ACE_ATM_Addr( "", + 0 ), + int reuse_addr = 0, +#if defined (ACE_WIN32) + int flags = 0, +#else + int flags = O_RDWR, +#endif /* ACE_WIN32 */ + int perms = 0); + + /** + * Try to complete a non-blocking connection. + * If connection completion is successful then @a new_stream contains + * the connected ACE_SOCK_Stream. If @a remote_sap is non-NULL then it + * will contain the address of the connected peer. + */ + int complete (ACE_ATM_Stream &new_stream, + ACE_ATM_Addr *remote_sap, + ACE_Time_Value *tv); + + /** + * Actively add a leaf to the root (i.e., point-to-multipoint). The + * @a remote_sap is the address of the leaf that we + * are trying to add. + */ + int add_leaf (ACE_ATM_Stream ¤t_stream, + const ACE_Addr &remote_sap, + ACE_ATM_QoS &qos); + + /// Resets any event associations on this handle + int reset_new_handle (ACE_HANDLE handle); + + // = Meta-type info + typedef ACE_ATM_Addr PEER_ADDR; + typedef ACE_ATM_Stream PEER_STREAM; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + ATM_Connector connector_; +}; + +// Open versioned namespace, if enabled by the user. +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/ATM_Connector.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* ACE_HAS_ATM */ +#include /**/ "ace/post.h" +#endif /* ACE_ATM_CONNECTOR_H */ diff --git a/ACE/ace/ATM_Connector.inl b/ACE/ace/ATM_Connector.inl new file mode 100644 index 00000000000..b9372ccb34d --- /dev/null +++ b/ACE/ace/ATM_Connector.inl @@ -0,0 +1,132 @@ +// -*- C++ -*- +// +// $Id$ + +// Open versioned namespace, if enabled by the user. +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE void +ACE_ATM_Connector::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_ATM_Connector::dump"); +#endif /* ACE_HAS_DUMP */ +} + +ACE_INLINE +ACE_ATM_Connector::ACE_ATM_Connector (ACE_ATM_Stream &new_stream, + const ACE_ATM_Addr &remote_sap, + ACE_ATM_Params params, + ACE_ATM_QoS options, + ACE_Time_Value *timeout, + const ACE_ATM_Addr &local_sap, + int reuse_addr, + int flags, + int perms) +{ + ACE_TRACE ("ACE_ATM_Connector::ACE_ATM_Connector"); + if ((ACE_HANDLE)this->connect (new_stream, + remote_sap, + params, + options, + timeout, + local_sap, + reuse_addr, + flags, + perms) == ACE_INVALID_HANDLE + && timeout != 0 && !(errno == EWOULDBLOCK || errno == ETIME)) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_ATM_Stream::ACE_ATM_Stream"))); +} + +// Try to complete a non-blocking connection. + +ACE_INLINE +int +ACE_ATM_Connector::complete (ACE_ATM_Stream &new_stream, + ACE_ATM_Addr *remote_sap, + ACE_Time_Value *tv) +{ + ACE_TRACE ("ACE_ATM_Connector::complete"); +#if defined (ACE_HAS_ATM) + return connector_.complete(new_stream.get_stream(), + remote_sap, + tv); +#else + ACE_UNUSED_ARG(new_stream); + ACE_UNUSED_ARG(remote_sap); + ACE_UNUSED_ARG(tv); + return 0; +#endif +} + +ACE_INLINE +int +ACE_ATM_Connector::add_leaf (ACE_ATM_Stream ¤t_stream, + const ACE_Addr &remote_sap, + ACE_ATM_QoS &qos) +{ + ACE_TRACE ("ACE_ATM_Connector::add_leaf"); +#if defined (ACE_HAS_FORE_ATM_XTI) + return connector_.add_leaf(current_stream.get_stream(), + remote_sap, + leaf_id, + timeout); +#elif defined (ACE_HAS_FORE_ATM_WS2) + struct sockaddr_atm *saddr = (struct sockaddr_atm *)remote_sap.get_addr(); + ACE_QoS cqos = qos.get_qos(); + int addr_len = sizeof( struct sockaddr_atm ); + + ACE_QoS_Params qos_params(0, + 0, + &cqos, + 0, + (JL_SENDER_ONLY)); + + ACE_OS::printf( "ATM_Connector::add_leaf: connecting...\n" ); + + ACE_HANDLE result = ACE_OS::join_leaf(current_stream.get_handle(), + (struct sockaddr *)saddr, + addr_len, + qos_params); + + if ( result == ACE_INVALID_HANDLE ) + ACE_OS::printf( "ATM_Connector(add_leaf): connection failed, %d\n", + ::WSAGetLastError()); + + return (result != ACE_INVALID_HANDLE); +#elif defined (ACE_HAS_LINUX_ATM) + ACE_OS::printf("ATM_Connector(add_leaf): not yet implemented in Linux \n"); + + ACE_UNUSED_ARG(current_stream); + ACE_UNUSED_ARG(remote_sap); + ACE_UNUSED_ARG(leaf_id); + ACE_UNUSED_ARG(timeout); + + return 0; +#else + ACE_UNUSED_ARG(current_stream); + ACE_UNUSED_ARG(remote_sap); + ACE_UNUSED_ARG(leaf_id); + ACE_UNUSED_ARG(timeout); + return 0; +#endif +} + +ACE_INLINE +int +ACE_ATM_Connector::reset_new_handle (ACE_HANDLE handle) +{ +#if defined (ACE_HAS_WINSOCK2) && (ACE_HAS_WINSOCK2 != 0) + // Reset the event association + return ::WSAEventSelect ((SOCKET) handle, + 0, + 0); +#else /* !defined ACE_HAS_WINSOCK2 */ + ACE_UNUSED_ARG (handle); + return 0; +#endif /* ACE_WIN32 */ +} + +// Close versioned namespace, if enabled by the user. +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/ATM_Params.cpp b/ACE/ace/ATM_Params.cpp new file mode 100644 index 00000000000..cc6ec674ece --- /dev/null +++ b/ACE/ace/ATM_Params.cpp @@ -0,0 +1,20 @@ +// $Id$ + +#include "ace/ATM_Params.h" + +#if defined (ACE_HAS_ATM) + +ACE_RCSID(ace, ATM_Params, "$Id$") + +#if !defined (__ACE_INLINE__) +#include "ace/ATM_Params.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_ATM_Params) + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_ATM */ + diff --git a/ACE/ace/ATM_Params.h b/ACE/ace/ATM_Params.h new file mode 100644 index 00000000000..82cf6999b3b --- /dev/null +++ b/ACE/ace/ATM_Params.h @@ -0,0 +1,214 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file ATM_Params.h + * + * $Id$ + * + * @author Joe Hoffert + */ +//========================================================================== + + +#ifndef ACE_ATM_PARAMS_H +#define ACE_ATM_PARAMS_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_ATM) + +#include /**/ "ace/ACE_export.h" + +#if defined (ACE_HAS_FORE_ATM_XTI) +#include "ace/TLI.h" +#define ATM_PROTOCOL_DEFAULT 0 +typedef struct t_info Param_Info; +typedef struct netbuf Param_Udata; +#elif defined (ACE_HAS_FORE_ATM_WS2) +#include "ace/SOCK.h" +#define ATM_PROTOCOL_DEFAULT ATMPROTO_AAL5 +#define ACE_XTI_ATM_DEVICE "" +typedef int Param_Info; +typedef int Param_Udata; +#elif defined (ACE_HAS_LINUX_ATM) +#include /**/ "atm.h" +#define AF_ATM PF_ATMSVC +#define ACE_XTI_ATM_DEVICE "" +#define ATM_PROTOCOL_DEFAULT ATM_AAL5 +typedef int Param_Info; +typedef int Param_Udata; +#else +#define ACE_XTI_ATM_DEVICE "" +typedef int Param_Info; +typedef int Param_Udata; +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_ATM_Params + * + * @brief Wrapper class that simplifies the information passed to the ATM + * enabled ACE_ATM_Connector class. + */ +class ACE_Export ACE_ATM_Params +{ +public: + /** + * Initialize the data members. This class combines options from + * ACE_SOCK_Connector (@a protocol_family, @a protocol, , + * @a protocol_info, , and @a flags) and + * ACE_TLI_Connector (, , , , and ) + * so that either mechanism can be used transparently for ATM. + */ + ACE_ATM_Params (int rw_flag = 1, + const char device[] = ACE_XTI_ATM_DEVICE, + Param_Info *info = 0, + Param_Udata *udata = 0, + int oflag = O_RDWR, + int protocol_family = AF_ATM, + int protocol = ATM_PROTOCOL_DEFAULT, + int type = +#if defined (ACE_HAS_LINUX_ATM) + SOCK_DGRAM, +#else + SOCK_RAW, +#endif /* ACE_HAS_LINUX_ATM */ + ACE_Protocol_Info *protocol_info = 0, + ACE_SOCK_GROUP g = 0, + u_long flags + = ACE_FLAG_MULTIPOINT_C_ROOT + | ACE_FLAG_MULTIPOINT_D_ROOT, // connector by default + int reuse_addr = 0); + + /// Destructor. + ~ACE_ATM_Params (); + + /// Get protocol family. + int get_protocol_family (void) const; + + /// Set protocol family. + void set_protocol_family (int); + + /// Get protocol. + int get_protocol (void) const; + + /// Set protocol. + void set_protocol (int); + + /// Get type. + int get_type (void) const; + + /// Set type. + void set_type (int); + + /// Get protocol info. + ACE_Protocol_Info *get_protocol_info( void ); + + /// Set protocol info. + void set_protocol_info( ACE_Protocol_Info *); + + /// Get socket group. + ACE_SOCK_GROUP get_sock_group( void ); + + /// Set socket group. + void set_sock_group( ACE_SOCK_GROUP ); + + /// Get socket flags. + u_long get_flags( void ); + + /// Set socket flags. + void set_flags( u_long ); + + /// Get reuse_addr flag. + int get_reuse_addr (void) const; + + /// Set reuse_addr flag. + void set_reuse_addr (int); + + /// Get device. + const char* get_device (void) const; + + /// Get info. + Param_Info* get_info (void) const; + + /// Set info. + void set_info (Param_Info *); + + /// Get r/w flag. + int get_rw_flag (void) const; + + /// Set r/w flag. + void set_rw_flag (int); + + /// Get user data. + Param_Udata* get_user_data (void) const; + + /// Set user data. + void set_user_data (Param_Udata*); + + /// Get open flag. + int get_oflag (void) const; + + /// Set open flag. + void set_oflag (int); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// Protocol family for sockets connections. + int protocol_family_; + + /// Protocol for sockets connections. + int protocol_; + + /// Type for opening sockets. + int type_; + + /// Information about the protocol. + ACE_Protocol_Info *protocol_info_; + + /// Socket group used (for sockets only). + ACE_SOCK_GROUP group_; + + /// Flags for sockets (for sockets only). + u_long flags_; + + /// Flag for reusing address for opening sockets. + int reuse_addr_; + + /// Device name for XTI/ATM connections. + const char *device_; + + /// Info for XTI/ATM connections. + Param_Info *info_; + + /// R/W flag for XTI/ATM connections. + int rw_flag_; + + /// User data for XTI/ATM connections. + Param_Udata *udata_; + + /// Open flag for XTI/ATM connections. + int oflag_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/ATM_Params.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* ACE_HAS_ATM */ +#include /**/ "ace/post.h" +#endif /* ACE_ATM_PARAMS_H */ diff --git a/ACE/ace/ATM_Params.inl b/ACE/ace/ATM_Params.inl new file mode 100644 index 00000000000..5d60f6ba920 --- /dev/null +++ b/ACE/ace/ATM_Params.inl @@ -0,0 +1,235 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE void +ACE_ATM_Params::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_ATM_Params::dump"); +#endif /* ACE_HAS_DUMP */ +} + +ACE_INLINE +ACE_ATM_Params::ACE_ATM_Params (int rw_flag, + const char device[], + Param_Info *info, + Param_Udata *udata, + int oflag, + int protocol_family, + int protocol, + int type, + ACE_Protocol_Info *protocol_info, + ACE_SOCK_GROUP g, + u_long flags, + int reuse_addr) + : protocol_family_(protocol_family), + protocol_(protocol), + type_(type), + protocol_info_(protocol_info), + group_(g), + flags_(flags), + reuse_addr_(reuse_addr), + device_(device), + info_(info), + rw_flag_(rw_flag), + udata_(udata), + oflag_(oflag) +{ + ACE_TRACE ("ACE_ATM_Params::ACE_ATM_Params"); +} + +// Default dtor. +ACE_INLINE +ACE_ATM_Params::~ACE_ATM_Params (void) +{ + ACE_TRACE ("ACE_ATM_Params::~ACE_ATM_Params"); +} + +ACE_INLINE +int +ACE_ATM_Params::get_protocol_family (void) const +{ + ACE_TRACE ("ACE_ATM_Params::get_protocol_family"); + return protocol_family_; +} + +ACE_INLINE +void +ACE_ATM_Params::set_protocol_family (int family) +{ + ACE_TRACE ("ACE_ATM_Params::set_protocol_family"); + protocol_family_ = family; +} + +ACE_INLINE +int +ACE_ATM_Params::get_protocol (void) const +{ + ACE_TRACE ("ACE_ATM_Params::get_protocol"); + return protocol_; +} + +ACE_INLINE +void +ACE_ATM_Params::set_protocol (int protocol) +{ + ACE_TRACE ("ACE_ATM_Params::set_protocol"); + protocol_ = protocol; +} + +ACE_INLINE +int +ACE_ATM_Params::get_type (void) const +{ + ACE_TRACE ("ACE_ATM_Params::get_type"); + return type_; +} + +ACE_INLINE +void +ACE_ATM_Params::set_type (int type) +{ + ACE_TRACE ("ACE_ATM_Params::set_type"); + type_ = type; +} + +ACE_INLINE +ACE_Protocol_Info* +ACE_ATM_Params::get_protocol_info( void ) +{ + ACE_TRACE ("ACE_ATM_Params::get_protocol_info"); + return protocol_info_; +} + +ACE_INLINE +void +ACE_ATM_Params::set_protocol_info( ACE_Protocol_Info *protocol_info ) +{ + ACE_TRACE ("ACE_ATM_Params::set_protocol_info"); + protocol_info_ = protocol_info; +} + +ACE_INLINE +ACE_SOCK_GROUP +ACE_ATM_Params::get_sock_group( void ) +{ + ACE_TRACE ("ACE_ATM_Params::get_sock_group"); + return group_; +} + +ACE_INLINE +void +ACE_ATM_Params::set_sock_group( ACE_SOCK_GROUP g ) +{ + ACE_TRACE ("ACE_ATM_Params::set_sock_group"); + group_ = g; +} + +ACE_INLINE +u_long +ACE_ATM_Params::get_flags( void ) +{ + ACE_TRACE ("ACE_ATM_Params::get_flags"); + return flags_; +} + +ACE_INLINE +void +ACE_ATM_Params::set_flags( u_long flags) +{ + ACE_TRACE ("ACE_ATM_Params::set_flags"); + flags_ = flags; +} + +ACE_INLINE +int +ACE_ATM_Params::get_reuse_addr (void) const +{ + ACE_TRACE ("ACE_ATM_Params::get_reuse_addr"); + return reuse_addr_; +} + +ACE_INLINE +void +ACE_ATM_Params::set_reuse_addr (int reuse_addr) +{ + ACE_TRACE ("ACE_ATM_Params::set_reuse_addr"); + reuse_addr_ = reuse_addr; +} + +ACE_INLINE +const char* +ACE_ATM_Params::get_device (void) const +{ + ACE_TRACE ("ACE_ATM_Params::get_device"); + return device_; +} + +ACE_INLINE +Param_Info* +ACE_ATM_Params::get_info (void) const +{ + ACE_TRACE ("ACE_ATM_Params::get_info"); + return info_; +} + +ACE_INLINE +void +ACE_ATM_Params::set_info (Param_Info* info) +{ + ACE_TRACE ("ACE_ATM_Params::set_info"); + info_ = info; +} + +ACE_INLINE +int +ACE_ATM_Params::get_rw_flag (void) const +{ + ACE_TRACE ("ACE_ATM_Params::get_rw_flag"); + return rw_flag_; +} + +ACE_INLINE +void +ACE_ATM_Params::set_rw_flag (int rw_flag) +{ + ACE_TRACE ("ACE_ATM_Params::set_rw_flag"); + rw_flag_ = rw_flag; +} + +ACE_INLINE +Param_Udata* +ACE_ATM_Params::get_user_data (void) const +{ + ACE_TRACE ("ACE_ATM_Params::get_user_data"); + return udata_; +} + +ACE_INLINE +void +ACE_ATM_Params::set_user_data (Param_Udata *udata) +{ + ACE_TRACE ("ACE_ATM_Params::set_user_data"); + udata_ = udata; +} + +ACE_INLINE +int +ACE_ATM_Params::get_oflag (void) const +{ + ACE_TRACE ("ACE_ATM_Params::get_oflag"); + return oflag_; +} + +ACE_INLINE +void +ACE_ATM_Params::set_oflag (int oflag) +{ + ACE_TRACE ("ACE_ATM_Params::set_oflag"); + oflag_ = oflag; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/ATM_QoS.cpp b/ACE/ace/ATM_QoS.cpp new file mode 100644 index 00000000000..6a7e6d4f463 --- /dev/null +++ b/ACE/ace/ATM_QoS.cpp @@ -0,0 +1,631 @@ +// $Id$ + +#include "ace/ATM_QoS.h" + +ACE_RCSID(ace, ATM_QoS, "$Id$") + +#if defined (ACE_HAS_ATM) + +#if !defined (__ACE_INLINE__) +#include "ace/ATM_QoS.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2) +#define BHLI_MAGIC "FORE_ATM" +// This is line rate in cells/s for an OC-3 MM interface. +const long ACE_ATM_QoS::LINE_RATE = 353207; +const int ACE_ATM_QoS::OPT_FLAGS_CPID = 0x1; +const int ACE_ATM_QoS::OPT_FLAGS_PMP = 0x2; +const int ACE_ATM_QoS::DEFAULT_SELECTOR = 0x99; +const int ACE_ATM_QoS::DEFAULT_PKT_SIZE = 8192; +#elif defined (ACE_HAS_LINUX_ATM) +//pbrandao:for Linux: +//pbrandao:for now stick with current definitions +//pbrandao:see if later need to change +const long ACE_ATM_QoS::LINE_RATE = 353207; +const int ACE_ATM_QoS::OPT_FLAGS_CPID = 0x1; +const int ACE_ATM_QoS::OPT_FLAGS_PMP = 0x2; +const int ACE_ATM_QoS::DEFAULT_SELECTOR = 0x99; +const int ACE_ATM_QoS::DEFAULT_PKT_SIZE = 8192; +#else +const long ACE_ATM_QoS::LINE_RATE = 0L; +const int ACE_ATM_QoS::OPT_FLAGS_CPID = 0; +const int ACE_ATM_QoS::OPT_FLAGS_PMP = 0; +const int ACE_ATM_QoS::DEFAULT_SELECTOR = 0x0; +const int ACE_ATM_QoS::DEFAULT_PKT_SIZE = 0; +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ + +ACE_ALLOC_HOOK_DEFINE(ACE_ATM_QoS) + +ACE_ATM_QoS::ACE_ATM_QoS (int pktSize) +{ + ACE_TRACE ("ACE_ATM_QoS::ACE_ATM_QoS"); +#if defined (ACE_HAS_LINUX_ATM) + ACE_OS::memset(&qos_, 0, sizeof(qos_)); + qos_.aal = ATM_PROTOCOL_DEFAULT; + qos_.rxtp.traffic_class = ATM_ANYCLASS; + qos_.rxtp.max_sdu = pktSize; + qos_.txtp.traffic_class = ATM_ANYCLASS; + qos_.txtp.max_sdu = pktSize; +#else + ACE_UNUSED_ARG (pktSize); +#endif /* ACE_HAS_LINUX_ATM */ +} + +ACE_ATM_QoS::ACE_ATM_QoS(int rate, + int pktSize) +{ + ACE_TRACE( "ACE_ATM_QoS::ACE_ATM_QoS" ); +#if defined (ACE_HAS_FORE_ATM_WS2) + AAL_PARAMETERS_IE ie_aalparams; + ATM_TRAFFIC_DESCRIPTOR_IE ie_td; + ATM_BROADBAND_BEARER_CAPABILITY_IE ie_bbc; + ATM_QOS_CLASS_IE ie_qos; + Q2931_IE *ie_ptr; + int size; + + // Setting up cbr parameters ... + ie_aalparams.AALType = AALTYPE_5; + ie_aalparams.AALSpecificParameters.AAL5Parameters.ForwardMaxCPCSSDUSize + = pktSize; // was 1516; + ie_aalparams.AALSpecificParameters.AAL5Parameters.BackwardMaxCPCSSDUSize + = pktSize; // was 1516; + ie_aalparams.AALSpecificParameters.AAL5Parameters.Mode = AAL5_MODE_MESSAGE; + ie_aalparams.AALSpecificParameters.AAL5Parameters.SSCSType = AAL5_SSCS_NULL; + + size = sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(AAL_PARAMETERS_IE); + + ie_td.Forward.PeakCellRate_CLP0 = SAP_FIELD_ABSENT; + ie_td.Forward.PeakCellRate_CLP01 = rate; + ie_td.Forward.SustainableCellRate_CLP0 = SAP_FIELD_ABSENT; + ie_td.Forward.SustainableCellRate_CLP01 = SAP_FIELD_ABSENT; + ie_td.Forward.MaxBurstSize_CLP0 = SAP_FIELD_ABSENT; + ie_td.Forward.MaxBurstSize_CLP01 = SAP_FIELD_ABSENT; + ie_td.Forward.Tagging = SAP_FIELD_ABSENT; + + ie_td.Backward.PeakCellRate_CLP0 = SAP_FIELD_ABSENT; + ie_td.Backward.PeakCellRate_CLP01 = rate; + ie_td.Backward.SustainableCellRate_CLP0 = SAP_FIELD_ABSENT; + ie_td.Backward.SustainableCellRate_CLP01 = SAP_FIELD_ABSENT; + ie_td.Backward.MaxBurstSize_CLP0 = SAP_FIELD_ABSENT; + ie_td.Backward.MaxBurstSize_CLP01 = SAP_FIELD_ABSENT; + ie_td.Backward.Tagging = SAP_FIELD_ABSENT; + + ie_td.BestEffort = 0; // Note: this must be set to zero for CBR. + + size += sizeof( Q2931_IE_TYPE ) + + sizeof( ULONG ) + + sizeof( ATM_TRAFFIC_DESCRIPTOR_IE ); + + ie_bbc.BearerClass = BCOB_X; + ie_bbc.TrafficType = TT_CBR; + ie_bbc.TimingRequirements = TR_END_TO_END; + ie_bbc.ClippingSusceptability = CLIP_NOT; + ie_bbc.UserPlaneConnectionConfig = UP_P2P; + + size += sizeof( Q2931_IE_TYPE ) + + sizeof( ULONG ) + + sizeof( ATM_BROADBAND_BEARER_CAPABILITY_IE ); + + ie_qos.QOSClassForward = QOS_CLASS1; + ie_qos.QOSClassBackward = QOS_CLASS1; // This may not be really used + // since we do only simplex data xfer. + + size += sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(ATM_QOS_CLASS_IE); + + qos_.ProviderSpecific.buf = (char *) ACE_OS::malloc(size); + if (qos_.ProviderSpecific.buf == 0) { + ACE_ERROR((LM_ERROR, + ACE_TEXT ("ACE_ATM_QoS::ACE_ATM_QoS: Unable to allocate %d bytes for qos_.ProviderSpecific.buf\n"), + size)); + return; + } + qos_.ProviderSpecific.len = size; + ACE_OS::memset(qos_.ProviderSpecific.buf, 0, size); + + ie_ptr = (Q2931_IE *) qos_.ProviderSpecific.buf; + ie_ptr->IEType = IE_AALParameters; + ie_ptr->IELength = sizeof( Q2931_IE_TYPE ) + + sizeof( ULONG ) + + sizeof( AAL_PARAMETERS_IE ); + ACE_OS::memcpy(ie_ptr->IE, &ie_aalparams, sizeof(AAL_PARAMETERS_IE)); + + ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength); + ie_ptr->IEType = IE_TrafficDescriptor; + ie_ptr->IELength = sizeof( Q2931_IE_TYPE ) + + sizeof( ULONG ) + + sizeof( ATM_TRAFFIC_DESCRIPTOR_IE ); + ACE_OS::memcpy(ie_ptr->IE, &ie_td, sizeof(ATM_TRAFFIC_DESCRIPTOR_IE)); + + ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength); + ie_ptr->IEType = IE_BroadbandBearerCapability; + ie_ptr->IELength = sizeof( Q2931_IE_TYPE ) + + sizeof( ULONG ) + + sizeof( ATM_BROADBAND_BEARER_CAPABILITY_IE ); + ACE_OS::memcpy(ie_ptr->IE, + &ie_bbc, + sizeof(ATM_BROADBAND_BEARER_CAPABILITY_IE)); + + ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength); + ie_ptr->IEType = IE_QOSClass; + ie_ptr->IELength = sizeof( Q2931_IE_TYPE ) + + sizeof( ULONG ) + + sizeof( ATM_QOS_CLASS_IE ); + ACE_OS::memcpy(ie_ptr->IE, &ie_qos, sizeof(ATM_QOS_CLASS_IE)); + + // qos_.SendingFlowspec.TokenRate = 0xffffffff; + // qos_.SendingFlowspec.TokenBucketSize = 0xffffffff; + // qos_.SendingFlowspec.PeakBandwidth = 0xffffffff; + // qos_.SendingFlowspec.Latency = 0xffffffff; + // qos_.SendingFlowspec.DelayVariation = 0xffffffff; + // qos_.SendingFlowspec.ServiceType = SERVICETYPE_BESTEFFORT; + // This will most probably be ignored by the service provider. + // qos_.SendingFlowspec.MaxSduSize = 0xffffffff; + // qos_.SendingFlowspec.MinimumPolicedSize = 0xffffffff; + + // qos_.ReceivingFlowspec.TokenRate = 0xffffffff; + // qos_.ReceivingFlowspec.TokenBucketSize = 0xffffffff; + // qos_.ReceivingFlowspec.PeakBandwidth = 0xffffffff; + // qos_.ReceivingFlowspec.Latency = 0xffffffff; + // qos_.ReceivingFlowspec.DelayVariation = 0xffffffff; + // qos_.ReceivingFlowspec.ServiceType = SERVICETYPE_BESTEFFORT; + // This will most probably be ignored by the service provider. + // qos_.ReceivingFlowspec.MaxSduSize = 0xffffffff; + // qos_.ReceivingFlowspec.MinimumPolicedSize = 0; + + ACE_Flow_Spec send_fspec( 0xffffffff, + 0xffffffff, + 0xffffffff, + 0xffffffff, + 0xffffffff, + SERVICETYPE_BESTEFFORT, + // This will most probably ignored by SP. + 0xffffffff, + 0xffffffff, + 15, + ACE_DEFAULT_THREAD_PRIORITY ), + recv_fspec( 0xffffffff, + 0xffffffff, + 0xffffffff, + 0xffffffff, + 0xffffffff, + SERVICETYPE_BESTEFFORT, + // This will most probably ignored by SP. + 0xffffffff, + 0, + 15, + ACE_DEFAULT_THREAD_PRIORITY ); + + qos_.sending_flowspec (send_fspec); + qos_.receiving_flowspec (recv_fspec); +#elif defined (ACE_HAS_FORE_ATM_XTI) + ACE_UNUSED_ARG (rate); + ACE_UNUSED_ARG (pktSize); +#elif defined (ACE_HAS_LINUX_ATM) + ACE_OS::memset(&qos_, + 0, + sizeof(qos_)); + qos_.aal = ATM_PROTOCOL_DEFAULT; + qos_.rxtp.max_sdu = pktSize; + + if (rate > 0) { + qos_.rxtp.pcr = rate; + qos_.rxtp.traffic_class = ATM_CBR; + qos_.txtp.traffic_class = ATM_CBR; + qos_.txtp.pcr = rate; + } + else { + qos_.rxtp.traffic_class = ATM_UBR; + qos_.txtp.traffic_class = ATM_UBR; + } + + qos_.txtp.max_sdu = pktSize; +#else + ACE_UNUSED_ARG (rate); +#endif /* ACE_HAS_FORE_ATM_WS2 || ACE_HAS_FORE_ATM_XTI || ACE_HAS_LINUX_ATM */ +} + +void +ACE_ATM_QoS::set_cbr_rate (int rate, + int pktSize) +{ + ACE_TRACE ("ACE_ATM_QoS::set_cbr_rate"); +#if defined (ACE_HAS_FORE_ATM_WS2) + /* + AAL_PARAMETERS_IE ie_aalparams; + ATM_TRAFFIC_DESCRIPTOR_IE ie_td; + ATM_BROADBAND_BEARER_CAPABILITY_IE ie_bbc; + ATM_QOS_CLASS_IE ie_qos; + Q2931_IE *ie_ptr; + int size; + */ + + ACE_OS::printf( "ATM_QoS(set_cbr_rate): set rate to %d c/s\n", rate ); + + // Setting up cbr parameters ... + /* + FORE has changed this - we no longer specify QoS this way + ie_aalparams.AALType = AALTYPE_5; + ie_aalparams.AALSpecificParameters.AAL5Parameters.ForwardMaxCPCSSDUSize + = pktSize; // was 1516; + ie_aalparams.AALSpecificParameters.AAL5Parameters.BackwardMaxCPCSSDUSize + = pktSize; // was 1516; + ie_aalparams.AALSpecificParameters.AAL5Parameters.Mode = AAL5_MODE_MESSAGE; + ie_aalparams.AALSpecificParameters.AAL5Parameters.SSCSType = AAL5_SSCS_NULL; + + size = sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(AAL_PARAMETERS_IE); + + ie_td.Forward.PeakCellRate_CLP0 = SAP_FIELD_ABSENT; + ie_td.Forward.PeakCellRate_CLP01 = rate; + ie_td.Forward.SustainableCellRate_CLP0 = SAP_FIELD_ABSENT; + ie_td.Forward.SustainableCellRate_CLP01 = SAP_FIELD_ABSENT; + ie_td.Forward.MaxBurstSize_CLP0 = SAP_FIELD_ABSENT; + ie_td.Forward.MaxBurstSize_CLP01 = SAP_FIELD_ABSENT; + ie_td.Forward.Tagging = SAP_FIELD_ABSENT; + + ie_td.Backward.PeakCellRate_CLP0 = SAP_FIELD_ABSENT; + ie_td.Backward.PeakCellRate_CLP01 = rate; + ie_td.Backward.SustainableCellRate_CLP0 = SAP_FIELD_ABSENT; + ie_td.Backward.SustainableCellRate_CLP01 = SAP_FIELD_ABSENT; + ie_td.Backward.MaxBurstSize_CLP0 = SAP_FIELD_ABSENT; + ie_td.Backward.MaxBurstSize_CLP01 = SAP_FIELD_ABSENT; + ie_td.Backward.Tagging = SAP_FIELD_ABSENT; + + ie_td.BestEffort = 0; // Note: this must be set to zero for CBR. + + size += sizeof( Q2931_IE_TYPE ) + + sizeof( ULONG ) + + sizeof( ATM_TRAFFIC_DESCRIPTOR_IE ); + + ie_bbc.BearerClass = BCOB_X; + ie_bbc.TrafficType = TT_CBR; + ie_bbc.TimingRequirements = TR_END_TO_END; + ie_bbc.ClippingSusceptability = CLIP_NOT; + ie_bbc.UserPlaneConnectionConfig = UP_P2P; + + size += sizeof(Q2931_IE_TYPE) + + sizeof(ULONG) + + sizeof(ATM_BROADBAND_BEARER_CAPABILITY_IE); + + ie_qos.QOSClassForward = QOS_CLASS1; + ie_qos.QOSClassBackward = QOS_CLASS1; // This may not be really used + // since we only simplex data xfer. + + size += sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(ATM_QOS_CLASS_IE); + + qos_.ProviderSpecific.buf = (char *) ACE_OS::malloc(size); + if (qos_.ProviderSpecific.buf == 0) { + ACE_ERROR((LM_ERROR, + ACE_TEXT ("ACE_ATM_QoS::ACE_ATM_QoS: Unable to allocate %d bytes for qos_.ProviderSpecific.buf\n"), + size)); + return; + } + qos_.ProviderSpecific.len = size; + ACE_OS::memset(qos_.ProviderSpecific.buf, 0, size); + + ie_ptr = (Q2931_IE *) qos_.ProviderSpecific.buf; + ie_ptr->IEType = IE_AALParameters; + ie_ptr->IELength = sizeof( Q2931_IE_TYPE ) + + sizeof( ULONG ) + + sizeof( AAL_PARAMETERS_IE ); + ACE_OS::memcpy(ie_ptr->IE, &ie_aalparams, sizeof(AAL_PARAMETERS_IE)); + + ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength); + ie_ptr->IEType = IE_TrafficDescriptor; + ie_ptr->IELength = sizeof( Q2931_IE_TYPE ) + + sizeof( ULONG ) + + sizeof( ATM_TRAFFIC_DESCRIPTOR_IE ); + ACE_OS::memcpy(ie_ptr->IE, &ie_td, sizeof(ATM_TRAFFIC_DESCRIPTOR_IE)); + + ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength); + ie_ptr->IEType = IE_BroadbandBearerCapability; + ie_ptr->IELength = sizeof( Q2931_IE_TYPE ) + + sizeof( ULONG ) + + sizeof( ATM_BROADBAND_BEARER_CAPABILITY_IE ); + ACE_OS::memcpy( ie_ptr->IE, + &ie_bbc, + sizeof( ATM_BROADBAND_BEARER_CAPABILITY_IE )); + + ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength); + ie_ptr->IEType = IE_QOSClass; + ie_ptr->IELength = sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + + sizeof(ATM_QOS_CLASS_IE); + ACE_OS::memcpy(ie_ptr->IE, &ie_qos, sizeof(ATM_QOS_CLASS_IE)); + */ + + const int BYTES_PER_ATM_CELL = 53; + ACE_OS::memset(&qos_, 0, sizeof(ATM_QoS)); + // Setting the token rate sets the minimum rate. 3 Mbits/sec seems too high. + // Certainly for Vaudeville audio, we only need about 1000 c/s which is + // 424000 bits/sec which is 53000 bytes/sec. + //qos_.SendingFlowspec.TokenRate = 3*(1024*128); // 3Mbits/sec + qos_.SendingFlowspec.TokenRate = 53000; // 1000 cells/sec + qos_.SendingFlowspec.TokenBucketSize = 32*1024; // our block size + //ourQos.SendingFlowspec.PeakBandwidth = ourQos.SendingFlowspec.TokenRate; + qos_.SendingFlowspec.ServiceType = SERVICETYPE_GUARANTEED; + // Peak bandwidth is in bytes/sec. The rate is specified in cells/sec so + // we need to convert from cells/sec to bytes/sec (i.e., multiply by 53). + qos_.SendingFlowspec.PeakBandwidth = rate * BYTES_PER_ATM_CELL; + qos_.SendingFlowspec.Latency = -1; // we don't care too much + qos_.SendingFlowspec.DelayVariation = -1; // we don't care too much + // no provider-specific data allowed on ATM + qos_.ProviderSpecific.buf=0; + qos_.ProviderSpecific.len=0; + // unidirectional P2MP; we don't need to setup the Receiving flowspec + + //qos_.SendingFlowspec.TokenRate = 0xffffffff; + //qos_.SendingFlowspec.TokenBucketSize = 0xffffffff; + //qos_.SendingFlowspec.PeakBandwidth = 0xffffffff; + //qos_.SendingFlowspec.Latency = 0xffffffff; + //qos_.SendingFlowspec.DelayVariation = 0xffffffff; + //qos_.SendingFlowspec.ServiceType = SERVICETYPE_BESTEFFORT; + // This will most probably be ignored by the service provider. + //qos_.SendingFlowspec.MaxSduSize = 0xffffffff; + //qos_.SendingFlowspec.MinimumPolicedSize = 0xffffffff; + + //qos_.ReceivingFlowspec.TokenRate = 0xffffffff; + //qos_.ReceivingFlowspec.TokenBucketSize = 0xffffffff; + //qos_.ReceivingFlowspec.PeakBandwidth = 0xffffffff; + //qos_.ReceivingFlowspec.Latency = 0xffffffff; + //qos_.ReceivingFlowspec.DelayVariation = 0xffffffff; + //qos_.ReceivingFlowspec.ServiceType = SERVICETYPE_BESTEFFORT; + // This will most probably be ignored by the service provider. + //qos_.ReceivingFlowspec.MaxSduSize = 0xffffffff; + //qos_.ReceivingFlowspec.MinimumPolicedSize = 0; + + /* + ACE_Flow_Spec send_fspec( 0xffffffff, + 0xffffffff, + 0xffffffff, + 0xffffffff, + 0xffffffff, + SERVICETYPE_BESTEFFORT, + // This will most probably ignored by SP. + 0xffffffff, + 0xffffffff, + 15, + ACE_DEFAULT_THREAD_PRIORITY ), + recv_fspec( 0xffffffff, + 0xffffffff, + 0xffffffff, + 0xffffffff, + 0xffffffff, + SERVICETYPE_BESTEFFORT, + // This will most probably ignored by SP. + 0xffffffff, + 0, + 15, + ACE_DEFAULT_THREAD_PRIORITY ); + + qos_.sending_flowspec( send_fspec ); + qos_.receiving_flowspec( recv_fspec ); + */ +#elif defined (ACE_HAS_FORE_ATM_XTI) + ACE_UNUSED_ARG (rate); + ACE_UNUSED_ARG (pktSize); +#elif defined (ACE_HAS_LINUX_ATM) + ACE_UNUSED_ARG (pktSize); + + qos_.rxtp.traffic_class = ATM_CBR; + qos_.rxtp.pcr = rate; + qos_.txtp.traffic_class = ATM_CBR; + qos_.txtp.pcr = rate; +#else + ACE_UNUSED_ARG (rate); +#endif /* ACE_HAS_FORE_ATM_WS2 || ACE_HAS_FORE_ATM_XTI || ACE_HAS_LINUX_ATM */ +} + +void +ACE_ATM_QoS::set_rate (ACE_HANDLE fd, + int rate, + int flags) +{ + ACE_TRACE ("ACE_ATM_QoS::set_rate"); +#if defined (ACE_HAS_FORE_ATM_WS2) || defined (ACE_HAS_LINUX_ATM) + set_cbr_rate( rate ); + + ACE_UNUSED_ARG( fd ); + ACE_UNUSED_ARG( flags ); +#elif defined (ACE_HAS_FORE_ATM_XTI) + long optlen = 0; + qos_.buf = construct_options(fd, + rate, + flags, + &optlen); + qos_.len = optlen; +#else + ACE_UNUSED_ARG (rate); +#endif /* ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM || ACE_HAS_FORE_ATM_XTI */ +} + +char* +ACE_ATM_QoS::construct_options (ACE_HANDLE fd, + int rate, + int flags, + long *len) +{ +#if defined (ACE_HAS_FORE_ATM_WS2) || defined (ACE_HAS_LINUX_ATM) + ACE_UNUSED_ARG (fd); + ACE_UNUSED_ARG (rate); + ACE_UNUSED_ARG (flags); + ACE_UNUSED_ARG (len); + return (0); +#elif defined (ACE_HAS_FORE_ATM_XTI) + struct t_opthdr *popt; + char *buf; + int qos_cells; + struct t_info info; + + if (ACE_OS::t_getinfo (fd, &info) == -1) + { + ACE_OS::t_error ("t_getinfo"); + return 0; + } + + buf = (char *) ACE_OS::malloc (info.options); + + if (buf == 0) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("Unable to allocate %d bytes for options\n"), + info.options), + 0); + + popt = (struct t_opthdr *) buf; + + if (flags & OPT_FLAGS_CPID) + { + // This constructs the T_ATM_ORIG_ADDR option, which is used to + // signal the UNI 3.1 Calling Party ID Information Element. + t_atm_addr *source_addr; + + popt->len = sizeof (struct t_opthdr) + sizeof (t_atm_addr); + popt->level = T_ATM_SIGNALING; + popt->name = T_ATM_ORIG_ADDR; + popt->status = 0; + + source_addr = + (t_atm_addr *)((char *) popt + sizeof (struct t_opthdr)); + + source_addr->address_format = T_ATM_ENDSYS_ADDR; + source_addr->address_length = ATMNSAP_ADDR_LEN; + + ATMSAPAddress local_addr; + struct t_bind boundaddr; + + boundaddr.addr.maxlen = sizeof(local_addr); + boundaddr.addr.buf = (char *) &local_addr; + + //if (ACE_OS::t_getprotaddr(fd, &boundaddr, 0) < 0) { + if (ACE_OS::t_getname(fd, + &boundaddr.addr, + LOCALNAME) < 0) + { + ACE_OS::t_error("t_getname (local_address)"); + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("Can't get local address!\n"))); + ACE_OS::free (buf); + return 0; + } + + ACE_OS::memcpy(source_addr->address, + local_addr.sap.t_atm_sap_addr.address, + ATMNSAP_ADDR_LEN); + + popt = T_OPT_NEXTHDR (buf, info.options , popt); + } + + // This constructs all options necessary (bearer cap., QoS, and + // Traffic Descriptor) to signal for a CBR connection with the + // specified QoS in kbit/sec., and/or specify a PMP connection. + + // For FORE 200e cards, the adapter shapes traffic to CBR with rate + // equal to PCR CLP=0+1 (traffic.forward.PCR_all_traffic) + + qos_cells = (rate * 1000) / (48*8); + + if ((qos_cells > 0 && qos_cells < LINE_RATE) + || (ACE_BIT_ENABLED (flags, OPT_FLAGS_PMP))) + { + struct t_atm_bearer *bearer; + struct t_atm_traffic *traffic; + + // T_ATM_BEARER_CAP: Broadband bearer capability + popt->len = sizeof (struct t_opthdr) + sizeof (struct t_atm_bearer); + popt->level = T_ATM_SIGNALING; + popt->name = T_ATM_BEARER_CAP; + popt->status = 0; + + bearer = (struct t_atm_bearer *)((char *) popt + + sizeof (struct t_opthdr)); + bearer->bearer_class = T_ATM_CLASS_X; + + if (qos_cells) + { + bearer->traffic_type = T_ATM_CBR; + bearer->timing_requirements = T_ATM_END_TO_END; + } + else + { + bearer->traffic_type = 0; // UBR + bearer->timing_requirements = 0; + } + bearer->clipping_susceptibility = T_ATM_NULL; + + if (ACE_BIT_ENABLED (flags, OPT_FLAGS_PMP)) + bearer->connection_configuration = T_ATM_1_TO_MANY; + else + bearer->connection_configuration = T_ATM_1_TO_1; + + popt = T_OPT_NEXTHDR (buf, info.options, popt); + + // T_ATM_TRAFFIC: traffic descriptor + popt->len = sizeof (struct t_opthdr) + sizeof (struct t_atm_traffic); + popt->level = T_ATM_SIGNALING; + popt->name = T_ATM_TRAFFIC; + popt->status = 0; + + traffic = (struct t_atm_traffic *)((char *) popt + + sizeof (struct t_opthdr)); + + traffic->forward.PCR_high_priority = T_ATM_ABSENT; + traffic->forward.PCR_all_traffic = qos_cells ? qos_cells : LINE_RATE; + traffic->forward.SCR_high_priority = T_ATM_ABSENT; + traffic->forward.SCR_all_traffic = T_ATM_ABSENT; + traffic->forward.MBS_high_priority = T_ATM_ABSENT; + traffic->forward.MBS_all_traffic = T_ATM_ABSENT; + traffic->forward.tagging = T_NO; + + traffic->backward.PCR_high_priority = T_ATM_ABSENT; + traffic->backward.PCR_all_traffic = + (ACE_BIT_ENABLED (flags, OPT_FLAGS_PMP)) + ? 0 : qos_cells ? qos_cells : LINE_RATE; + traffic->backward.SCR_high_priority = T_ATM_ABSENT; + traffic->backward.SCR_all_traffic = T_ATM_ABSENT; + traffic->backward.MBS_high_priority = T_ATM_ABSENT; + traffic->backward.MBS_all_traffic = T_ATM_ABSENT; + traffic->backward.tagging = T_NO; + + traffic->best_effort = qos_cells ? T_NO : T_YES; + + popt = T_OPT_NEXTHDR (buf, + info.options, + popt); + } + + if (qos_cells > 0 && qos_cells < LINE_RATE) + { + struct t_atm_qos *qos; + + // T_ATM_QOS: Quality of Service + popt->len = sizeof (struct t_opthdr) + sizeof (struct t_atm_qos); + popt->level = T_ATM_SIGNALING; + popt->name = T_ATM_QOS; + popt->status = 0; + + qos = (struct t_atm_qos *)((char *) popt + sizeof (struct t_opthdr)); + qos->coding_standard = T_ATM_ITU_CODING; + qos->forward.qos_class = T_ATM_QOS_CLASS_1; + qos->backward.qos_class = T_ATM_QOS_CLASS_1; + + popt = T_OPT_NEXTHDR (buf, info.options, popt); + } + + // Return actual size of options and option buffer to user. + *len = (char *) popt - buf; + + return buf; +#else + ACE_UNUSED_ARG (fd); + ACE_UNUSED_ARG (rate); + ACE_UNUSED_ARG (flag); + ACE_UNUSED_ARG (len); + return (0); +#endif /* ACE_HAS_FORE_ATM_WS2 */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_ATM */ + diff --git a/ACE/ace/ATM_QoS.h b/ACE/ace/ATM_QoS.h new file mode 100644 index 00000000000..f548da3033d --- /dev/null +++ b/ACE/ace/ATM_QoS.h @@ -0,0 +1,115 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file ATM_QoS.h + * + * $Id$ + * + * @author Joe Hoffert + */ +//========================================================================== + + +#ifndef ACE_ATM_QoS_H +#define ACE_ATM_QoS_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined(ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_ATM) + +#if defined (ACE_HAS_FORE_ATM_WS2) +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +// just map to WS2 GQOS struct +typedef ACE_QoS ATM_QoS; +ACE_END_VERSIONED_NAMESPACE_DECL +#elif defined (ACE_HAS_FORE_ATM_XTI) +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef struct netbuf ATM_QoS; +ACE_END_VERSIONED_NAMESPACE_DECL +#elif defined (ACE_HAS_LINUX_ATM) +#include /**/ "atm.h" +#include "ace/ATM_Params.h" +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef struct atm_qos ATM_QoS; +ACE_END_VERSIONED_NAMESPACE_DECL +#else +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef int ATM_QoS; +ACE_END_VERSIONED_NAMESPACE_DECL +#endif /* ACE_HAS_FORE_ATM_WS2 || ACE_HAS_FORE_ATM_XTI || ACE_HAS_LINUX_ATM */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_ATM_QoS + * + * @brief Define the QoS parameters for ATM + * + * This class wraps up QoS parameters for both ATM/XTI and + * ATM/WinSock2 to make the mechanism for the ATM protocol + * transparent. + */ +class ACE_Export ACE_ATM_QoS +{ +public: + // Constants used for ATM options + static const long LINE_RATE; + static const int OPT_FLAGS_CPID; + static const int OPT_FLAGS_PMP; + static const int DEFAULT_SELECTOR; + static const int DEFAULT_PKT_SIZE; + + // = Initializattion and termination methods. + /// Default constructor. + ACE_ATM_QoS(int = DEFAULT_PKT_SIZE); + + /// Constructor with a CBR rate. + ACE_ATM_QoS(int, + int = DEFAULT_PKT_SIZE); + + ~ACE_ATM_QoS (); + + /// Set the rate. + void set_rate (ACE_HANDLE, + int, + int); + + /// Set CBR rate in cells per second. + void set_cbr_rate (int, + int = DEFAULT_PKT_SIZE); + + /// Get ATM_QoS struct. + ATM_QoS get_qos (void); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// Construct QoS options. + char* construct_options(ACE_HANDLE, + int, + int, + long*); + +private: + ATM_QoS qos_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/ATM_QoS.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* ACE_HAS_ATM */ +#include /**/ "ace/post.h" +#endif /* ACE_ATM_QoS_H */ diff --git a/ACE/ace/ATM_QoS.inl b/ACE/ace/ATM_QoS.inl new file mode 100644 index 00000000000..283baa3f560 --- /dev/null +++ b/ACE/ace/ATM_QoS.inl @@ -0,0 +1,29 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE void +ACE_ATM_QoS::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_ATM_QoS::dump"); +#endif /* ACE_HAS_DUMP */ +} + +ACE_INLINE +ACE_ATM_QoS::~ACE_ATM_QoS () +{ + ACE_TRACE ("ACE_ATM_QoS::~ACE_ATM_QoS"); +} + +ACE_INLINE +ATM_QoS +ACE_ATM_QoS::get_qos (void) +{ + ACE_TRACE ("ACE_ATM_QoS::get_qos"); + return qos_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/ATM_Stream.cpp b/ACE/ace/ATM_Stream.cpp new file mode 100644 index 00000000000..21035b97f52 --- /dev/null +++ b/ACE/ace/ATM_Stream.cpp @@ -0,0 +1,290 @@ +// $Id$ + +#include "ace/ATM_Stream.h" + +ACE_RCSID (ace, ATM_Stream, "$Id$") + +#if defined (ACE_HAS_ATM) + +#if !defined (__ACE_INLINE__) +#include "ace/ATM_Stream.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE (ACE_ATM_Stream) + +char* +ACE_ATM_Stream::get_peer_name (void) const +{ + ACE_TRACE ("ACE_ATM_Stream::get_peer_name"); +#if defined (ACE_HAS_FORE_ATM_XTI) + // // Use t_getprotaddr for XTI/ATM + // struct t_bind *localaddr + // = (struct t_bind *) ACE_OS::t_alloc (get_handle (), + // T_BIND, + // T_ADDR); + // struct t_bind *peeraddr + // = (struct t_bind *) ACE_OS::t_alloc (get_handle (), + // T_BIND, + // T_ADDR); + // ::t_getprotaddr (get_handle (), + // localaddr, + // peeraddr); + + // char* connected_name = (char*) ACE_OS::malloc (peeraddr->addr.len + 1); + // ACE_OS::strcpy (connected_name, + // peeraddr->addr.buf); + // ACE_OS::t_free ((char *) localaddr, + // T_BIND); + // ACE_OS::t_free ((char *) peeraddr, + // T_BIND); + // return (connected_name); + +#error "This doesn't seem to work. May need to jimmy-rig something with the" +#error "/etc/xti_hosts file - Ugh!" + + ACE_ATM_Addr sa; + struct netbuf name; + name.maxlen = sa.get_size (); + name.buf = (char *) sa.get_addr (); + ACE_OS::t_getname (this->get_handle (), &name, REMOTENAME); + // ACE_OS::ioctl (this->get_handle (), + // TI_GETPEERNAME, + // &name); + return (name.buf); + +#elif defined (ACE_HAS_FORE_ATM_WS2) + // Use getpeername for WinSock2. + struct sockaddr_atm name; + ACE_OS::memset (&name, 0, sizeof (name)); + int nameSize = sizeof (name); + + if (ACE_OS::getpeername (this->get_handle (), + (struct sockaddr *) &name, + &nameSize) != 0) { + return 0; + } + + char buffer[256]; + for (unsigned int index = 0; index < ATM_ADDR_SIZE - 1; index++) { + buffer[ index * 3 ] = '\0'; + ACE_OS::sprintf (buffer, "%s%02x.", buffer, name.satm_number.Addr[ index ]); + } + buffer[ (ATM_ADDR_SIZE - 1) * 3 ] = '\0'; + ACE_OS::sprintf (buffer, "%s%02x.", buffer, 0); + buffer[ ATM_ADDR_SIZE * 3 - 1 ] = '\0'; + for (index = 0; index < ACE_OS::strlen (buffer); ++index) + buffer[index] = ACE_OS::ace_tolower (buffer[index]); + + ifstream atm_hosts ("C:/WINNT/atmhosts"); + assert (atm_hosts.is_open ()); + + // Find the host address in the ATM hosts file and return the + // host name + char line[256]; + char *host_ptr, *host_name = 0; + ACE_NEW_RETURN (host_name, char[256], 0); + while (!atm_hosts.eof ()) { + atm_hosts.getline (line, 256); + // Convert the line to lower case to ease comparison + for (index = 0; index < ACE_OS::strlen (line); ++index) + line[index] = ACE_OS::ace_tolower (line[index]); + if (ACE_OS::strstr (line, buffer) != 0) + { + char *strtok_p; + // Grab the second token which is the host name + ACE_OS::strtok_r (line, " \t", &strtok_p); + host_ptr = ACE_OS::strtok (0, " \t", &strtok_p); + ACE_OS::strcpy (host_name, host_ptr); + break; + } + } + + return host_name; +#elif defined (ACE_HAS_LINUX_ATM) + ATM_Addr name; + int nameSize = sizeof (name.sockaddratmsvc); + + if (ACE_OS::getpeername (this->get_handle (), + (struct sockaddr *) & (name.sockaddratmsvc), + &nameSize) < 0) { + ACE_OS::perror ("ACE_ATM_Stream (get_peer_name) : "); + return 0; + } + + static ACE_TCHAR buffer[MAX_ATM_ADDR_LEN + 1]; + int total_len; + if ((total_len = atm2text (buffer,sizeof buffer, + (struct sockaddr *) & (name.sockaddratmsvc), + A2T_PRETTY|A2T_NAME)) < 0) { + ACE_DEBUG ((LM_DEBUG,ACE_TEXT ("ACE_ATM_Stream (get_peer_name) :%d"),errno)); + return 0; + } + + return (char*) buffer; +#else + return 0; +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ +} + +ACE_HANDLE +ACE_ATM_Stream::get_handle (void) const +{ + ACE_TRACE ("ACE_ATM_Stream::get_handle"); +#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2) || defined (ACE_HAS_LINUX_ATM) + return stream_.get_handle (); +#else + return 0; +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ +} + +int +ACE_ATM_Stream::get_vpi_vci (ACE_UINT16 &vpi, + ACE_UINT16 &vci) const +{ + ACE_TRACE ("ACE_ATM_Stream::get_vpi_vci"); +#if defined (ACE_HAS_FORE_ATM_XTI) + struct t_atm_conn_prop conn_prop; + char* connect_opts = (char *) &conn_prop; + int opt_size = sizeof (t_atm_conn_prop); + struct t_info info; + struct t_optmgmt opt_req, opt_ret; + + if (ACE_OS::t_getinfo (stream_.get_handle (), + &info) < 0) + { + ACE_OS::t_error ("t_getinfo"); + return -1; + } + + char *buf_req = (char *) ACE_OS::malloc (info.options); + if (buf_req == 0) + { + ACE_OS::fprintf (stderr, + "Unable to allocate %ld bytes for options\n", + info.options); + return -1; + } + + char *buf_ret = (char *) ACE_OS::malloc (info.options); + if (buf_ret == 0) + { + ACE_OS::fprintf (stderr, + "Unable to allocate %ld bytes for options\n", + info.options); + return -1; + } + + ACE_OS::memset (&opt_req, 0, sizeof (opt_req)); + ACE_OS::memset (&opt_ret, 0, sizeof (opt_ret)); + + struct t_opthdr *popt = (struct t_opthdr *) buf_req; + struct t_opthdr *popt_ret = (struct t_opthdr *) buf_ret; + + popt->len= sizeof (struct t_opthdr) + opt_size; + + // We are only concerned with SVCs so no other check or values are needed + // here. + popt->level = T_ATM_SIGNALING; + popt->name = T_ATM_CONN_PROP; + popt->status = 0; + + opt_req.opt.len = popt->len; + opt_req.opt.buf = (char *) popt; + opt_req.flags = T_CURRENT; + + popt = T_OPT_NEXTHDR (buf_req, + info.options, + popt); + opt_ret.opt.maxlen = info.options; + opt_ret.opt.buf = (char *) popt_ret; + + if (ACE_OS::t_optmgmt (stream_.get_handle (), + &opt_req, + &opt_ret) < 0) { + ACE_OS::t_error ("t_optmgmt"); + return -1; + } + + ACE_OS::memcpy (connect_opts, + (char *) popt_ret + sizeof (struct t_opthdr), + opt_size); + + ACE_OS::free (buf_ret); + ACE_OS::free (buf_req); + + vpi = conn_prop.vpi; + vci = conn_prop.vci; + return (0); +#elif defined (ACE_HAS_FORE_ATM_WS2) + ATM_CONNECTION_ID connID; + DWORD bytes = 0; + + if (::WSAIoctl ((int) this -> get_handle (), + SIO_GET_ATM_CONNECTION_ID, + 0, + 0, + (LPVOID) &connID, + sizeof (ATM_CONNECTION_ID), + &bytes, + 0, + 0) + == SOCKET_ERROR) { + ACE_OS::printf ("Error: WSAIoctl %d\n", WSAGetLastError ()); + } + + vpi = (ACE_UINT16) connID.VPI; + vci = (ACE_UINT16) connID.VCI; + + return 0; +#elif defined (ACE_HAS_LINUX_ATM) +#if defined (SO_ATMPVC) /* atm version>=0.62 */ + struct sockaddr_atmpvc mypvcaddr; + int addrpvclen = sizeof (mypvcaddr); + if (ACE_OS::getsockopt (stream_.get_handle (), + SOL_ATM, + SO_ATMPVC, + reinterpret_cast (&mypvcaddr), + &addrpvclen) < 0) { + ACE_DEBUG (LM_DEBUG, + ACE_TEXT ("ACE_ATM_Stream::get_vpi_vci: getsockopt %d\n"), + errno); + return -1; + } + vpi = (ACE_UINT16) mypvcaddr.sap_addr.vpi; + vci = (ACE_UINT16) mypvcaddr.sap_addr.vci; + + return 0; +#elif defined (SO_VCID) /* patch for atm version 0.59 */ + struct atm_vcid mypvcid; + int pvcidlen = sizeof (mypvcid); + if (ACE_OS::getsockopt (stream_.get_handle (), + SOL_ATM,SO_VCID, + reinterpret_cast (&mypvcid), + &pvcidlen) < 0) { + ACE_DEBUG (LM_DEBUG, + ACE_TEXT ("ACE_ATM_Stream::get_vpi_vci: getsockopt %d\n"), + errno); + return -1; + } + vpi = (ACE_UINT16) mypvcid.vpi; + vci = (ACE_UINT16) mypvcid.vci; + + return 0; +#else + ACE_DEBUG (LM_DEBUG, + ACE_TEXT ("ACE_ATM_Stream::get_vpi_vci: Not implemented in this ATM version. Update to >= 0.62\n Or patch 0.59")); + ACE_UNUSED_ARG (vci); + ACE_UNUSED_ARG (vpi); + + return (-1); +#endif /* SO_ATMPVC || SO_VCID */ +#else + return (-1); +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_ATM */ diff --git a/ACE/ace/ATM_Stream.h b/ACE/ace/ATM_Stream.h new file mode 100644 index 00000000000..fde1294e1e3 --- /dev/null +++ b/ACE/ace/ATM_Stream.h @@ -0,0 +1,107 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file ATM_Stream.h + * + * $Id$ + * + * @author Joe Hoffert + */ +//============================================================================= + + +#ifndef ACE_ATM_STREAM_H +#define ACE_ATM_STREAM_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_ATM) + +#include "ace/ATM_Addr.h" +#include "ace/ATM_Params.h" + +#if defined (ACE_WIN32) +#include "ace/SOCK_Stream.h" +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef ACE_SOCK_Stream ATM_Stream; +ACE_END_VERSIONED_NAMESPACE_DECL +#else +#include "ace/TLI_Stream.h" +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef ACE_TLI_Stream ATM_Stream; +ACE_END_VERSIONED_NAMESPACE_DECL +#endif + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_ATM_Stream + * + * @brief Defines the member functions for ACE_ATM_Stream abstraction. + */ +class ACE_Export ACE_ATM_Stream +{ +public: + // = Initialization and termination methods. + /// Default constructor. + ACE_ATM_Stream (void); + + // = ATM-specific open and shutdown operations. + /// open the stream. + int open (ACE_ATM_Params params = ACE_ATM_Params()); + + /// Close down and release resources. + int close (void); + + /// Get the underlying handle. + ACE_HANDLE get_handle (void) const; + + /// Get the underlying stream. + ATM_Stream& get_stream (void); + + /// Get the name of the connected host. + char* get_peer_name (void) const; + + /// Get the VPI and VCI of the stream. + int get_vpi_vci (ACE_UINT16 &vpi, + ACE_UINT16 &vci) const; + + /// Recv an n byte buffer from the connected transport mechanism. + ssize_t recv (void *buf, + size_t n, + int *flags = 0) const; + + /// Send exactly n bytes to the connected transport mechanism. + ssize_t send_n (const void *buf, + size_t n, + int flags) const; + + // = Meta-type info + typedef ACE_ATM_Addr PEER_ADDR; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// Typedef'd to the appropriate stream mechanism above. + ATM_Stream stream_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/ATM_Stream.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* ACE_HAS_ATM */ +#include /**/ "ace/post.h" +#endif /* ACE_ATM_STREAM_H */ diff --git a/ACE/ace/ATM_Stream.inl b/ACE/ace/ATM_Stream.inl new file mode 100644 index 00000000000..b796af474e7 --- /dev/null +++ b/ACE/ace/ATM_Stream.inl @@ -0,0 +1,133 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE void +ACE_ATM_Stream::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_ATM_Stream::dump"); +#endif /* ACE_HAS_DUMP */ +} + +ACE_INLINE +ACE_ATM_Stream::ACE_ATM_Stream (void) +{ + ACE_TRACE ("ACE_ATM_Stream::ACE_ATM_Stream"); +} + +ACE_INLINE +int +ACE_ATM_Stream::open (ACE_ATM_Params params) +{ + ACE_TRACE ("ACE_ATM_Stream::open"); +#if defined (ACE_HAS_FORE_ATM_XTI) + ACE_HANDLE handle = stream_.open (params.get_device(), + params.get_oflag(), + params.get_info()); + return (handle == ACE_INVALID_HANDLE ? -1 : 0); +#elif defined (ACE_HAS_FORE_ATM_WS2) + params.set_flags( ACE_FLAG_MULTIPOINT_C_ROOT | ACE_FLAG_MULTIPOINT_D_ROOT ); + + int retval = stream_.open (params.get_type(), + params.get_protocol_family(), + params.get_protocol(), + params.get_protocol_info(), + params.get_sock_group(), + params.get_flags(), + params.get_reuse_addr()); + if (retval == -1) + return -1; + + struct sockaddr_atm sock_addr; + + ACE_OS::memset(&sock_addr, 0, sizeof(struct sockaddr_atm)); + sock_addr.satm_family = AF_ATM; + sock_addr.satm_number.AddressType=ADDR_ANY; + sock_addr.satm_number.NumofDigits = ATM_ADDR_SIZE; + sock_addr.satm_blli.Layer2Protocol = SAP_FIELD_ABSENT; + sock_addr.satm_blli.Layer3Protocol = SAP_FIELD_ABSENT; + sock_addr.satm_bhli.HighLayerInfoType = SAP_FIELD_ABSENT; + if (ACE_OS::bind(get_handle(), + (struct sockaddr FAR *)&sock_addr, + sizeof(struct sockaddr_atm)) < 0) + { + ACE_OS::printf("Error binding local address: %d",WSAGetLastError()); + return -1; + } + + return 0; +#else + ACE_UNUSED_ARG(params); + return 0; +#endif /* ACE_HAS_FORE_ATM_XTI */ +} + +ACE_INLINE +int +ACE_ATM_Stream::close (void) +{ + ACE_TRACE ("ACE_ATM_Stream::close"); +#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2) + return stream_.close (); +#else + return 0; +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 */ +} + +ACE_INLINE +ATM_Stream& +ACE_ATM_Stream::get_stream (void) +{ + ACE_TRACE ("ACE_ATM_Stream::get_stream"); + return stream_; +} + +ACE_INLINE +ssize_t +ACE_ATM_Stream::recv (void *buf, + size_t n, + int *flags) const +{ + ACE_TRACE ("ACE_ATM_Stream::recv"); +#if defined (ACE_HAS_FORE_ATM_XTI) + return stream_.recv (buf, + n, + flags); +#elif defined (ACE_HAS_FORE_ATM_WS2) + return stream_.recv (buf, + n); +#else + ACE_UNUSED_ARG(buf); + ACE_UNUSED_ARG(n); + ACE_UNUSED_ARG(flags); + return (0); +#endif /* ACE_HAS_FORE_ATM_XTI */ +} + +ACE_INLINE +ssize_t +ACE_ATM_Stream::send_n (const void *buf, + size_t n, + int flags) const +{ + ACE_TRACE ("ACE_ATM_Stream::send_n"); +#if defined (ACE_HAS_FORE_ATM_XTI) + return stream_.send_n (buf, + n, + flags); +#elif defined (ACE_HAS_FORE_ATM_WS2) + return stream_.send_n (buf, + n, + flags); +#else + ACE_UNUSED_ARG(buf); + ACE_UNUSED_ARG(n); + ACE_UNUSED_ARG(flags); + return (0); +#endif /* ACE_HAS_FORE_ATM_XTI */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Acceptor.cpp b/ACE/ace/Acceptor.cpp new file mode 100644 index 00000000000..2dd5b52d926 --- /dev/null +++ b/ACE/ace/Acceptor.cpp @@ -0,0 +1,1226 @@ +#ifndef ACE_ACCEPTOR_CPP +#define ACE_ACCEPTOR_CPP + +#include "ace/ACE.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Acceptor.h" +#include "ace/Handle_Set.h" +#include "ace/Svc_Handler.h" +#include "ace/WFMO_Reactor.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_sys_select.h" + +ACE_RCSID (ace, + Acceptor, + "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_Acceptor) + +template void +ACE_Acceptor::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Acceptor::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + this->peer_acceptor_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Acceptor::operator ACE_PEER_ACCEPTOR & () const +{ + ACE_TRACE ("ACE_Acceptor::operator ACE_PEER_ACCEPTOR &"); + return (ACE_PEER_ACCEPTOR &) this->peer_acceptor_; +} + +template ACE_PEER_ACCEPTOR & +ACE_Acceptor::acceptor (void) const +{ + ACE_TRACE ("ACE_Acceptor::acceptor"); + return const_cast (this->peer_acceptor_); +} + +// Returns ACE_HANDLE of the underlying Acceptor_Strategy. + +template ACE_HANDLE +ACE_Acceptor::get_handle (void) const +{ + ACE_TRACE ("ACE_Acceptor::get_handle"); + return this->peer_acceptor_.get_handle (); +} + +// Initialize the appropriate strategies for creation, passive +// connection acceptance, and concurrency, and then register +// with the Reactor and listen for connection requests at the +// designated . + +template int +ACE_Acceptor::open + (const ACE_PEER_ACCEPTOR_ADDR &local_addr, + ACE_Reactor *reactor, + int flags, + int use_select, + int reuse_addr) +{ + ACE_TRACE ("ACE_Acceptor::open"); + this->flags_ = flags; + this->use_select_ = use_select; + this->reuse_addr_ = reuse_addr; + this->peer_acceptor_addr_ = local_addr; + + // Must supply a valid Reactor to Acceptor::open()... + + if (reactor == 0) + { + errno = EINVAL; + return -1; + } + + if (this->peer_acceptor_.open (local_addr, reuse_addr) == -1) + return -1; + + // Set the peer acceptor's handle into non-blocking mode. This is a + // safe-guard against the race condition that can otherwise occur + // between the time when indicates that a passive-mode + // socket handle is "ready" and when we call . During this + // interval, the client can shutdown the connection, in which case, + // the call can hang! + if (this->accept_strategy_->acceptor ().enable (ACE_NONBLOCK) != 0) + return -1; + + // Initialize the concurrency strategy. + + if (con_s == 0) + { + ACE_NEW_RETURN (con_s, + CONCURRENCY_STRATEGY, + -1); + this->delete_concurrency_strategy_ = true; + } + this->concurrency_strategy_ = con_s; + + // Initialize the scheduling strategy. + + if (sch_s == 0) + { + ACE_NEW_RETURN (sch_s, + SCHEDULING_STRATEGY, + -1); + this->delete_scheduling_strategy_ = true; + } + this->scheduling_strategy_ = sch_s; + + this->use_select_ = use_select; + + return this->reactor ()->register_handler + (this, + ACE_Event_Handler::ACCEPT_MASK); +} + +// Simple constructor. + +template +ACE_Strategy_Acceptor::ACE_Strategy_Acceptor + (const ACE_TCHAR service_name[], + const ACE_TCHAR service_description[], + int use_select, + int reuse_addr) + : creation_strategy_ (0), + delete_creation_strategy_ (false), + accept_strategy_ (0), + delete_accept_strategy_ (false), + concurrency_strategy_ (0), + delete_concurrency_strategy_ (false), + scheduling_strategy_ (0), + delete_scheduling_strategy_ (false), + service_name_ (0), + service_description_ (0) +{ + ACE_TRACE ("ACE_Strategy_Acceptor::ACE_Strategy_Acceptor"); + + if (service_name != 0) + ACE_ALLOCATOR (this->service_name_, + ACE_OS::strdup (service_name)); + if (service_description != 0) + ACE_ALLOCATOR (this->service_description_, + ACE_OS::strdup (service_description)); + this->use_select_ = use_select; + this->reuse_addr_ = reuse_addr; +} + +template +ACE_Strategy_Acceptor::ACE_Strategy_Acceptor + (const ACE_PEER_ACCEPTOR_ADDR &addr, + ACE_Reactor *reactor, + ACE_Creation_Strategy *cre_s, + ACE_Accept_Strategy *acc_s, + ACE_Concurrency_Strategy *con_s, + ACE_Scheduling_Strategy *sch_s, + const ACE_TCHAR service_name[], + const ACE_TCHAR service_description[], + int use_select, + int reuse_addr) + : creation_strategy_ (0), + delete_creation_strategy_ (false), + accept_strategy_ (0), + delete_accept_strategy_ (false), + concurrency_strategy_ (0), + delete_concurrency_strategy_ (false), + scheduling_strategy_ (0), + delete_scheduling_strategy_ (false), + service_name_ (0), + service_description_ (0) +{ + ACE_TRACE ("ACE_Strategy_Acceptor::ACE_Strategy_Acceptor"); + + if (this->open (addr, + reactor, + cre_s, + acc_s, + con_s, + sch_s, + service_name, + service_description, + use_select, + reuse_addr) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Strategy_Acceptor::ACE_Strategy_Acceptor"))); +} + +// Perform termination activities when is removed from the +// . + +template int +ACE_Strategy_Acceptor::handle_close (ACE_HANDLE, + ACE_Reactor_Mask) +{ + ACE_TRACE ("ACE_Strategy_Acceptor::handle_close"); + // Guard against multiple closes. + if (this->reactor () != 0) + { + ACE_HANDLE handle = this->get_handle (); + + if (this->delete_creation_strategy_) + delete this->creation_strategy_; + this->delete_creation_strategy_ = false; + this->creation_strategy_ = 0; + + if (this->delete_accept_strategy_) + delete this->accept_strategy_; + this->delete_accept_strategy_ = false; + this->accept_strategy_ = 0; + + if (this->delete_concurrency_strategy_) + delete this->concurrency_strategy_; + this->delete_concurrency_strategy_ = false; + this->concurrency_strategy_ = 0; + + if (this->delete_scheduling_strategy_) + delete this->scheduling_strategy_; + this->delete_scheduling_strategy_ = false; + this->scheduling_strategy_ = 0; + + // We must use the obtained *before* we deleted the + // accept_strategy_... + + this->reactor ()->remove_handler + (handle, + ACE_Event_Handler::ACCEPT_MASK | ACE_Event_Handler::DONT_CALL); + + // Set the Reactor to 0 so that we don't try to close down + // again. + this->reactor (0); + } + return 0; +} + +// Bridge method for creating a . The strategy for +// creating a are configured into the Acceptor via it's +// . The default is to create a new +// . However, subclasses can override this strategy to +// perform creation in any way that they like (such as +// creating subclass instances of , using a singleton, +// dynamically linking the handler, etc.). + +template int +ACE_Strategy_Acceptor::make_svc_handler (SVC_HANDLER *&sh) +{ + ACE_TRACE ("ACE_Strategy_Acceptor::make_svc_handler"); + return this->creation_strategy_->make_svc_handler (sh); +} + +// Bridge method for accepting the new connection into the +// . The default behavior delegates to the +// in the Acceptor_Strategy. + +template int +ACE_Strategy_Acceptor::accept_svc_handler + (SVC_HANDLER *svc_handler) +{ + ACE_TRACE ("ACE_Strategy_Acceptor::accept_svc_handler"); + return this->accept_strategy_->accept_svc_handler (svc_handler); +} + +// Bridge method for activating a with the appropriate +// concurrency strategy. The default behavior of this method is to +// activate the SVC_HANDLER by calling its open() method (which allows +// the SVC_HANDLER to define its own concurrency strategy). However, +// subclasses can override this strategy to do more sophisticated +// concurrency activations (such as creating the SVC_HANDLER as an +// "active object" via multi-threading or multi-processing). + +template int +ACE_Strategy_Acceptor::activate_svc_handler + (SVC_HANDLER *svc_handler) +{ + ACE_TRACE ("ACE_Strategy_Acceptor::activate_svc_handler"); + return this->concurrency_strategy_->activate_svc_handler + (svc_handler, + (void *) this); +} + +template +ACE_Strategy_Acceptor::~ACE_Strategy_Acceptor (void) +{ + ACE_TRACE ("ACE_Strategy_Acceptor::~ACE_Strategy_Acceptor"); + ACE_OS::free ((void *) this->service_name_); + ACE_OS::free ((void *) this->service_description_); + this->handle_close (); +} + +// Signal the server to shutdown gracefully. + +template int +ACE_Strategy_Acceptor::handle_signal (int, siginfo_t *, ucontext_t *) +{ + ACE_Reactor::instance()->end_reactor_event_loop (); + return 0; +} + +template int +ACE_Strategy_Acceptor::info (ACE_TCHAR **strp, + size_t length) const +{ + ACE_TRACE ("ACE_Strategy_Acceptor::info"); + + ACE_TCHAR buf[BUFSIZ]; + ACE_TCHAR service_addr_str[BUFSIZ]; + ACE_PEER_ACCEPTOR_ADDR addr; + + if (this->acceptor ().get_local_addr (addr) == -1) + return -1; + else if (addr.addr_to_string (service_addr_str, + sizeof service_addr_str) == -1) + return -1; + + // @@ Should add the protocol in... + ACE_OS::sprintf (buf, + ACE_TEXT ("%s\t %s #%s\n"), + this->service_name_ == 0 + ? ACE_TEXT ("") + : this->service_name_, + service_addr_str, + this->service_description_ == 0 + ? ACE_TEXT ("") + : this->service_description_); + + if (*strp == 0 && (*strp = ACE_OS::strdup (buf)) == 0) + return -1; + else + ACE_OS::strsncpy (*strp, buf, length); + return static_cast (ACE_OS::strlen (buf)); +} + +template int +ACE_Strategy_Acceptor::fini (void) +{ + ACE_TRACE ("ACE_Strategy_Acceptor::fini"); + return this->ACE_Strategy_Acceptor::handle_close (); +} + +ACE_ALLOC_HOOK_DEFINE(ACE_Oneshot_Acceptor) + +template void +ACE_Oneshot_Acceptor::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Oneshot_Acceptor::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nsvc_handler_ = %x"), this->svc_handler_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nrestart_ = %d"), this->restart_)); + this->peer_acceptor_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("delete_concurrency_strategy_ = %d"), + delete_concurrency_strategy_)); + this->concurrency_strategy_->dump (); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +template int +ACE_Oneshot_Acceptor::open + (const ACE_PEER_ACCEPTOR_ADDR &local_addr, + ACE_Reactor *reactor, + ACE_Concurrency_Strategy *con_s) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::open"); + this->reactor (reactor); + + // Initialize the concurrency strategy. + + if (con_s == 0) + { + ACE_NEW_RETURN (con_s, + ACE_Concurrency_Strategy, + -1); + this->delete_concurrency_strategy_ = true; + } + this->concurrency_strategy_ = con_s; + + // Reuse the addr, even if it is already in use...! + return this->peer_acceptor_.open (local_addr, 1); +} + +template +ACE_Oneshot_Acceptor::ACE_Oneshot_Acceptor (void) + : delete_concurrency_strategy_ (false) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::ACE_Oneshot_Acceptor"); + this->reactor (0); +} + +template +ACE_Oneshot_Acceptor::ACE_Oneshot_Acceptor + (const ACE_PEER_ACCEPTOR_ADDR &local_addr, + ACE_Reactor *reactor, + ACE_Concurrency_Strategy *cs) + : delete_concurrency_strategy_ (false) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::ACE_Oneshot_Acceptor"); + if (this->open (local_addr, reactor, cs) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Oneshot_Acceptor::ACE_Oneshot_Acceptor"))); +} + +template +ACE_Oneshot_Acceptor::~ACE_Oneshot_Acceptor (void) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::~ACE_Oneshot_Acceptor"); + this->handle_close (); +} + +template int +ACE_Oneshot_Acceptor::close (void) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::close"); + return this->handle_close (); +} + +template int +ACE_Oneshot_Acceptor::handle_close (ACE_HANDLE, + ACE_Reactor_Mask) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::handle_close"); + + // Guard against multiple closes. + if (this->delete_concurrency_strategy_) + { + delete this->concurrency_strategy_; + this->delete_concurrency_strategy_ = false; + this->concurrency_strategy_ = 0; + } + // Note that if we aren't actually registered with the + // ACE_Reactor then it's ok for this call to fail... + + if (this->reactor ()) + this->reactor ()->remove_handler + (this, + ACE_Event_Handler::ACCEPT_MASK | ACE_Event_Handler::DONT_CALL); + + if (this->peer_acceptor_.close () == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("close\n"))); + return 0; +} + +template int +ACE_Oneshot_Acceptor::handle_timeout + (const ACE_Time_Value &tv, + const void *arg) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::handle_timeout"); + errno = ETIME; + + if (this->svc_handler_->handle_timeout (tv, arg) == -1) + this->svc_handler_->handle_close (this->svc_handler_->get_handle (), + ACE_Event_Handler::TIMER_MASK); + + // Since we aren't necessarily registered with the Reactor, don't + // bother to check the return value here... + if (this->reactor ()) + this->reactor ()->remove_handler (this, + ACE_Event_Handler::ACCEPT_MASK); + return 0; +} + +template int +ACE_Oneshot_Acceptor::cancel (void) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::cancel"); + return this->reactor () && this->reactor ()->cancel_timer (this); +} + +template int +ACE_Oneshot_Acceptor::register_handler + (SVC_HANDLER *svc_handler, + const ACE_Synch_Options &synch_options, + int restart) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::register_handler"); + // Can't do this if we don't have a Reactor. + if (this->reactor () == 0) + { + errno = EINVAL; + return -1; + } + else + { + this->svc_handler_ = svc_handler; + this->restart_ = restart; + ACE_Time_Value *tv = (ACE_Time_Value *) synch_options.time_value (); + + if (tv != 0 + && this->reactor ()->schedule_timer (this, + synch_options.arg (), + *tv) == 0) + return -1; + else + return this->reactor ()->register_handler + (this, + ACE_Event_Handler::ACCEPT_MASK); + } +} + +// Bridge method for activating a with the appropriate +// concurrency strategy. The default behavior of this method is to +// activate the SVC_HANDLER by calling its open() method (which allows +// the SVC_HANDLER to define its own concurrency strategy). However, +// subclasses can override this strategy to do more sophisticated +// concurrency activations (such as creating the SVC_HANDLER as an +// "active object" via multi-threading or multi-processing). + +template int +ACE_Oneshot_Acceptor::activate_svc_handler + (SVC_HANDLER *svc_handler) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::activate_svc_handler"); + return this->concurrency_strategy_->activate_svc_handler + (svc_handler, + (void *) this); +} + +// Factors out the code shared between the and +// methods. + +template int +ACE_Oneshot_Acceptor::shared_accept + (SVC_HANDLER *svc_handler, + ACE_PEER_ACCEPTOR_ADDR *remote_addr, + ACE_Time_Value *timeout, + int restart, + int reset_new_handle) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::shared_accept"); + if (svc_handler == 0) + return -1; + + // Accept connection into the Svc_Handler. + else if (this->peer_acceptor_.accept (svc_handler->peer (), // stream + remote_addr, // remote address + timeout, // timeout + restart, // restart + reset_new_handle // reset new handle + ) == -1) + { + // Check whether we just timed out or whether we failed... + if (!(errno == EWOULDBLOCK || errno == ETIME)) + // Close down handler to avoid memory leaks. + svc_handler->close (0); + return -1; + } + // Activate the using the designated concurrency + // strategy (note that this method becomes responsible for handling + // errors and freeing up the memory if things go awry...) + else + return this->activate_svc_handler (svc_handler); +} + +// Make a SVC_HANDLER, accept the connection into the SVC_HANDLER, and +// then activate the SVC_HANDLER. Note that SVC_HANDLER::open() +// decides what type of concurrency strategy to use. + +template int +ACE_Oneshot_Acceptor::accept + (SVC_HANDLER *svc_handler, + ACE_PEER_ACCEPTOR_ADDR *remote_addr, + const ACE_Synch_Options &synch_options, + int restart, + int reset_new_handle) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::accept"); + // Note that if timeout == ACE_Time_Value (x, y) where (x > 0 || y > + // 0) then this->connector_.connect() will block synchronously. If + // is set then we don't want this to happen (since we + // want the ACE_Reactor to do the timeout asynchronously). + // Therefore, we'll force this->connector_ to use ACE_Time_Value (0, + // 0) in this case... + + ACE_Time_Value *timeout; + int use_reactor = synch_options[ACE_Synch_Options::USE_REACTOR]; + + if (use_reactor) + timeout = (ACE_Time_Value *) &ACE_Time_Value::zero; + else + timeout = (ACE_Time_Value *) synch_options.time_value (); + + if (this->shared_accept (svc_handler, // stream + remote_addr, // remote address + timeout, // timeout + restart, // restart + reset_new_handle // reset new handler + ) == -1) + { + if (use_reactor && errno == EWOULDBLOCK) + // We couldn't accept right away, so let's wait in the + // . + this->register_handler (svc_handler, + synch_options, + restart); + return -1; + } + return 0; +} + +// Accepts one pending connection from a client (since we're the +// "oneshot" Acceptor). + +template int +ACE_Oneshot_Acceptor::handle_input (ACE_HANDLE) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::handle_input"); + int result = 0; + + // Cancel any timer that might be pending. + this->cancel (); + + // Try to find out if the implementation of the reactor that we are + // using requires us to reset the event association for the newly + // created handle. This is because the newly created handle will + // inherit the properties of the listen handle, including its event + // associations. + int reset_new_handle = this->reactor ()->uses_event_associations (); + + // There is a use-case whereby this object will be gone upon return + // from shared_accept - if the Svc_Handler deletes this Oneshot_Acceptor + // during the shared_accept/activation steps. So, do whatever we need + // to do with this object before calling shared_accept. + if (this->reactor ()) + this->reactor ()->remove_handler + (this, + ACE_Event_Handler::ACCEPT_MASK | ACE_Event_Handler::DONT_CALL); + + if (this->shared_accept (this->svc_handler_, // stream + 0, // remote address + 0, // timeout + this->restart_, // restart + reset_new_handle // reset new handle + ) == -1) + result = -1; + + return result; +} + +// Hook called by the explicit dynamic linking facility. + +template int +ACE_Oneshot_Acceptor::init (int, ACE_TCHAR *[]) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::init"); + return -1; +} + +template int +ACE_Oneshot_Acceptor::fini (void) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::fini"); + return this->handle_close (); +} + +template int +ACE_Oneshot_Acceptor::info (ACE_TCHAR **strp, + size_t length) const +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::info"); + ACE_TCHAR buf[BUFSIZ]; + ACE_TCHAR addr_str[BUFSIZ]; + ACE_PEER_ACCEPTOR_ADDR addr; + + if (this->peer_acceptor_.get_local_addr (addr) == -1) + return -1; + else if (addr.addr_to_string (addr_str, sizeof addr_str) == -1) + return -1; + + ACE_OS::sprintf (buf, + ACE_TEXT ("%s\t %s %s"), + ACE_TEXT ("ACE_Oneshot_Acceptor"), + addr_str, + ACE_TEXT ("#oneshot acceptor factory\n")); + + if (*strp == 0 && (*strp = ACE_OS::strdup (buf)) == 0) + return -1; + else + ACE_OS::strsncpy (*strp, buf, length); + return static_cast (ACE_OS::strlen (buf)); +} + +template int +ACE_Oneshot_Acceptor::suspend (void) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::suspend"); + return this->reactor () && this->reactor ()->suspend_handler (this); +} + +template int +ACE_Oneshot_Acceptor::resume (void) +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::resume"); + return this->reactor () && this->reactor ()->resume_handler (this); +} + +// Returns ACE_HANDLE of the underlying peer_acceptor. + +template ACE_HANDLE +ACE_Oneshot_Acceptor::get_handle (void) const +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::get_handle"); + return this->peer_acceptor_.get_handle (); +} + +template ACE_PEER_ACCEPTOR & +ACE_Oneshot_Acceptor::acceptor (void) const +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::acceptor"); + return (ACE_PEER_ACCEPTOR &) this->peer_acceptor_; +} + +template +ACE_Oneshot_Acceptor::operator ACE_PEER_ACCEPTOR & () const +{ + ACE_TRACE ("ACE_Oneshot_Acceptor::operator ACE_PEER_ACCEPTOR &"); + return (ACE_PEER_ACCEPTOR &) this->peer_acceptor_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_ACCEPTOR_CPP */ diff --git a/ACE/ace/Acceptor.h b/ACE/ace/Acceptor.h new file mode 100644 index 00000000000..741dca098e1 --- /dev/null +++ b/ACE/ace/Acceptor.h @@ -0,0 +1,684 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Acceptor.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_ACCEPTOR_H +#define ACE_ACCEPTOR_H + +#include /**/ "ace/pre.h" + +#include "ace/Service_Object.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Strategies_T.h" +#include "ace/Synch_Options.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Acceptor + * + * @brief Abstract factory for creating a service handler + * (SVC_HANDLER), accepting into the SVC_HANDLER, and + * activating the SVC_HANDLER. + * + * Implements the basic strategy for passively establishing + * connections with clients. An ACE_Acceptor is parameterized + * by concrete types that conform to the interfaces of + * PEER_ACCEPTOR and SVC_HANDLER. The PEER_ACCEPTOR is + * instantiated with a transport mechanism that passively + * establishes connections. The SVC_HANDLER is instantiated + * with a concrete type that performs the application-specific + * service. An ACE_Acceptor inherits from ACE_Service_Object, + * which in turn inherits from ACE_Event_Handler. This enables + * the ACE_Reactor to dispatch the ACE_Acceptor's handle_input + * method when connection events occur. The handle_input method + * performs the ACE_Acceptor's default creation, connection + * establishment, and service activation strategies. These + * strategies can be overridden by subclasses individually or as + * a group. + */ +template +class ACE_Acceptor : public ACE_Service_Object +{ +public: + + // Useful STL-style traits. + typedef ACE_PEER_ACCEPTOR_ADDR addr_type; + typedef ACE_PEER_ACCEPTOR acceptor_type; + typedef SVC_HANDLER handler_type; + typedef typename SVC_HANDLER::stream_type stream_type; + + /// "Do-nothing" constructor. + ACE_Acceptor (ACE_Reactor * = 0, + int use_select = 1); + + /** + * Open the contained @c PEER_ACCEPTOR object to begin listening, and + * register with the specified reactor for accept events. An + * acceptor can only listen to one port at a time, so make sure to + * @c close() the acceptor before calling @c open() again. + * + * The @c PEER_ACCEPTOR handle is put into non-blocking mode as a + * safeguard against the race condition that can otherwise occur + * between the time when the passive-mode socket handle is "ready" + * and when the actual @c accept() call is made. During this + * interval, the client can shutdown the connection, in which case, + * the @c accept() call can hang. + * + * @param local_addr The address to listen at. + * @param reactor Pointer to the ACE_Reactor instance to register + * this object with. The default is the singleton. + * @param flags Flags to control what mode an accepted socket + * will be put into after it is accepted. The only + * legal value for this argument is @c ACE_NONBLOCK, + * which enables non-blocking mode on the accepted + * peer stream object in @c SVC_HANDLER. The default + * is 0. + * @param use_select Affects behavior when called back by the reactor + * when a connection can be accepted. If non-zero, + * this object will accept all pending connections, + * intead of just the one that triggered the reactor + * callback. Uses ACE_OS::select() internally to + * detect any remaining acceptable connections. + * The default is 1. + * @param reuse_addr Passed to the @c PEER_ACCEPTOR::open() method with + * @p local_addr. Generally used to request that the + * OS allow reuse of the listen port. The default is 1. + */ + ACE_Acceptor (const ACE_PEER_ACCEPTOR_ADDR &local_addr, + ACE_Reactor *reactor = ACE_Reactor::instance (), + int flags = 0, + int use_select = 1, + int reuse_addr = 1); + + /** + * Open the contained @c PEER_ACCEPTOR object to begin listening, and + * register with the specified reactor for accept events. An + * acceptor can only listen to one port at a time, so make sure to + * @c close() the acceptor before calling @c open() again. + * + * The @c PEER_ACCEPTOR handle is put into non-blocking mode as a + * safeguard against the race condition that can otherwise occur + * between the time when the passive-mode socket handle is "ready" + * and when the actual @c accept() call is made. During this + * interval, the client can shutdown the connection, in which case, + * the @c accept() call can hang. + * + * @param local_addr The address to listen at. + * @param reactor Pointer to the ACE_Reactor instance to register + * this object with. The default is the singleton. + * @param flags Flags to control what mode an accepted socket + * will be put into after it is accepted. The only + * legal value for this argument is @c ACE_NONBLOCK, + * which enables non-blocking mode on the accepted + * peer stream object in @c SVC_HANDLER. The default + * is 0. + * @param use_select Affects behavior when called back by the reactor + * when a connection can be accepted. If non-zero, + * this object will accept all pending connections, + * intead of just the one that triggered the reactor + * callback. Uses ACE_OS::select() internally to + * detect any remaining acceptable connections. + * The default is 1. + * @param reuse_addr Passed to the @c PEER_ACCEPTOR::open() method with + * @p local_addr. Generally used to request that the + * OS allow reuse of the listen port. The default is 1. + * + * @retval 0 Success + * @retval -1 Failure, @c errno contains an error code. + */ + virtual int open (const ACE_PEER_ACCEPTOR_ADDR &local_addr, + ACE_Reactor *reactor = ACE_Reactor::instance (), + int flags = 0, + int use_select = 1, + int reuse_addr = 1); + + /// Close down the Acceptor's resources. + virtual ~ACE_Acceptor (void); + + /// Return the underlying PEER_ACCEPTOR object. + virtual operator ACE_PEER_ACCEPTOR &() const; + + /// Return the underlying PEER_ACCEPTOR object. + virtual ACE_PEER_ACCEPTOR &acceptor (void) const; + + /// Returns the listening acceptor's {ACE_HANDLE}. + virtual ACE_HANDLE get_handle (void) const; + + /// Close down the Acceptor + virtual int close (void); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + // = The following three methods define the Acceptor's strategies + // for creating, accepting, and activating SVC_HANDLER's, + // respectively. + + /** + * Bridge method for creating a SVC_HANDLER. The default is to + * create a new {SVC_HANDLER} if {sh} == 0, else {sh} is unchanged. + * However, subclasses can override this policy to perform + * SVC_HANDLER creation in any way that they like (such as creating + * subclass instances of SVC_HANDLER, using a singleton, dynamically + * linking the handler, etc.). Returns -1 on failure, else 0. + */ + virtual int make_svc_handler (SVC_HANDLER *&sh); + + /** + * Bridge method for accepting the new connection into the + * . The default behavior delegates to the + * PEER_ACCEPTOR::accept. + */ + virtual int accept_svc_handler (SVC_HANDLER *svc_handler); + + /** + * Bridge method for activating a {svc_handler} with the appropriate + * concurrency strategy. The default behavior of this method is to + * activate the SVC_HANDLER by calling its {open} method (which + * allows the SVC_HANDLER to define its own concurrency strategy). + * However, subclasses can override this strategy to do more + * sophisticated concurrency activations (such as making the + * SVC_HANDLER as an "active object" via multi-threading or + * multi-processing). + */ + virtual int activate_svc_handler (SVC_HANDLER *svc_handler); + + // = Demultiplexing hooks. + /// Perform termination activities when {this} is removed from the + /// {reactor}. + virtual int handle_close (ACE_HANDLE = ACE_INVALID_HANDLE, + ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK); + + /// Accepts all pending connections from clients, and creates and + /// activates SVC_HANDLERs. + virtual int handle_input (ACE_HANDLE); + + // = Dynamic linking hooks. + /// Default version does no work and returns -1. Must be overloaded + /// by application developer to do anything meaningful. + virtual int init (int argc, ACE_TCHAR *argv[]); + + /// Calls {handle_close}. + virtual int fini (void); + + /// Default version returns address info in {buf}. + virtual int info (ACE_TCHAR **buf, size_t) const; + +public: + // = Service management hooks. + /// This method calls {Reactor::suspend}. + virtual int suspend (void); + + /// This method calls {Reactor::resume}. + virtual int resume (void); + +protected: + /// Concrete factory for accepting connections from clients... + ACE_PEER_ACCEPTOR peer_acceptor_; + + /// Needed to reopen the socket if {accept} fails. + ACE_PEER_ACCEPTOR_ADDR peer_acceptor_addr_; + + /** + * Flags that indicate how {SVC_HANDLER}'s should be initialized + * prior to being activated. Right now, the only flag that is + * processed is {ACE_NONBLOCK}, which enabled non-blocking I/O on + * the {SVC_HANDLER} when it is opened. + */ + int flags_; + + /// Flag that indicates whether it shall use {select} in the + /// {accept}-loop. + int use_select_; + + /// Needed to reopen the socket if {accept} fails. + int reuse_addr_; +}; + +/** + * @class ACE_Strategy_Acceptor + * + * @brief Abstract factory for creating a service handler + * (SVC_HANDLER), accepting into the SVC_HANDLER, and activating + * the SVC_HANDLER. + * + * Implements a flexible and extensible set of strategies for + * passively establishing connections with clients. There are + * three main strategies: (1) creating a SVC_HANDLER, (2) + * passively accepting a new connection from a client into the + * SVC_HANDLER, and (3) activating the SVC_HANDLER with a + * particular concurrency mechanism. + */ +template +class ACE_Strategy_Acceptor + : public ACE_Acceptor +{ +public: + + // Useful STL-style traits. + typedef ACE_Creation_Strategy + creation_strategy_type; + typedef ACE_Accept_Strategy + accept_strategy_type; + typedef ACE_Concurrency_Strategy + concurrency_strategy_type; + typedef ACE_Scheduling_Strategy scheduling_strategy_type; + typedef ACE_Acceptor + base_type; + + // = Define some useful (old style) traits. + typedef ACE_Creation_Strategy CREATION_STRATEGY; + typedef ACE_Accept_Strategy ACCEPT_STRATEGY; + typedef ACE_Concurrency_Strategy CONCURRENCY_STRATEGY; + typedef ACE_Scheduling_Strategy SCHEDULING_STRATEGY; + + + + /// Default constructor. + ACE_Strategy_Acceptor (const ACE_TCHAR service_name[] = 0, + const ACE_TCHAR service_description[] = 0, + int use_select = 1, + int reuse_addr = 1); + + /** + * Initialize the appropriate strategies for creation, passive + * connection acceptance, and concurrency, and then register {this} + * with the Reactor and listen for connection requests at the + * designated {local_addr}. + */ + ACE_Strategy_Acceptor (const ACE_PEER_ACCEPTOR_ADDR &local_addr, + ACE_Reactor * = ACE_Reactor::instance (), + ACE_Creation_Strategy * = 0, + ACE_Accept_Strategy * = 0, + ACE_Concurrency_Strategy * = 0, + ACE_Scheduling_Strategy * = 0, + const ACE_TCHAR service_name[] = 0, + const ACE_TCHAR service_description[] = 0, + int use_select = 1, + int reuse_addr = 1); + + /** + * Open the contained @c PEER_ACCEPTOR object to begin listening, and + * register with the specified reactor for accept events. + * + * The @c PEER_ACCEPTOR handle is put into non-blocking mode as a + * safeguard against the race condition that can otherwise occur + * between the time when the passive-mode socket handle is "ready" + * and when the actual @c accept call is made. During this + * interval, the client can shutdown the connection, in which case, + * the {accept} call can hang. + * + * @param local_addr The address to listen at. + * @param reactor Pointer to the ACE_Reactor instance to register + * this object with. The default is the singleton. + * @param flags Flags to control what mode an accepted socket + * will be put into after it is accepted. The only + * legal value for this argument is @c ACE_NONBLOCK, + * which enables non-blocking mode on the accepted + * peer stream object in @c SVC_HANDLER. The default + * is 0. + * @param use_select Affects behavior when called back by the reactor + * when a connection can be accepted. If non-zero, + * this object will accept all pending connections, + * intead of just the one that triggered the reactor + * callback. Uses ACE_OS::select() internally to + * detect any remaining acceptable connections. + * The default is 1. + * @param reuse_addr Passed to the @c PEER_ACCEPTOR::open() method with + * @p local_addr. Generally used to request that the + * OS allow reuse of the listen port. The default is 1. + * + * @retval 0 Success + * @retval -1 Failure, @c errno contains an error code. + */ + virtual int open (const ACE_PEER_ACCEPTOR_ADDR &local_addr, + ACE_Reactor *reactor, + int flags = 0, + int use_select = 1, + int reuse_addr = 1); + + /** + * Initialize the appropriate strategies for creation, passive + * connection acceptance, and concurrency, and then register {this} + * with the Reactor and listen for connection requests at the + * designated {local_addr}. + */ + virtual int open (const ACE_PEER_ACCEPTOR_ADDR &, + ACE_Reactor * = ACE_Reactor::instance (), + ACE_Creation_Strategy * = 0, + ACE_Accept_Strategy * =0, + ACE_Concurrency_Strategy * = 0, + ACE_Scheduling_Strategy * = 0, + const ACE_TCHAR *service_name = 0, + const ACE_TCHAR *service_description = 0, + int use_select = 1, + int reuse_addr = 1); + + /// Close down the Strategy_Acceptor's resources. + virtual ~ACE_Strategy_Acceptor (void); + + /// Return the underlying PEER_ACCEPTOR object. + virtual operator ACE_PEER_ACCEPTOR &() const; + + /// Return the underlying PEER_ACCEPTOR object. + virtual ACE_PEER_ACCEPTOR &acceptor (void) const; + + /// Returns the listening acceptor's {ACE_HANDLE}. + virtual ACE_HANDLE get_handle (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + + // = Service management hooks. + + /// This method delegates to the {Scheduling_Strategy}'s {suspend} + /// method. + virtual int suspend (void); + + /// This method delegates to the {Scheduling_Strategy}'s {resume} + /// method. + virtual int resume (void); + +protected: + + /// Calls {handle_close} when dynamically unlinked. + virtual int fini (void); + + /// Default version returns address info in {buf}. + virtual int info (ACE_TCHAR **buf, size_t) const; + + // = The following three methods define the {Acceptor}'s strategies + // for creating, accepting, and activating {SVC_HANDLER}'s, + // respectively. + + /** + * Bridge method for creating a {SVC_HANDLER}. The strategy for + * creating a {SVC_HANDLER} are configured into the Acceptor via + * it's {creation_strategy_}. The default is to create a new + * {SVC_HANDLER} if {sh} == 0, else {sh} is unchanged. However, + * subclasses can override this policy to perform {SVC_HANDLER} + * creation in any way that they like (such as creating subclass + * instances of {SVC_HANDLER}, using a singleton, dynamically + * linking the handler, etc.). Returns -1 on failure, else 0. + */ + virtual int make_svc_handler (SVC_HANDLER *&); + + /** + * Bridge method for accepting the new connection into the + * {SVC_HANDLER}. The default behavior delegates to the + * {PEER_ACCEPTOR::accept} in the {Acceptor_Strategy}. + */ + virtual int accept_svc_handler (SVC_HANDLER *svc_handler); + + /** + * Bridge method for activating a {SVC_HANDLER} with the appropriate + * concurrency strategy. The default behavior of this method is to + * activate the {SVC_HANDLER} by calling its {open} method (which + * allows the {SVC_HANDLER} to define its own concurrency strategy). + * However, subclasses can override this strategy to do more + * sophisticated concurrency activations (such as creating the + * {SVC_HANDLER} as an "active object" via multi-threading or + * multi-processing). + */ + virtual int activate_svc_handler (SVC_HANDLER *svc_handler); + + // = Demultiplexing hooks. + /// Perform termination activities when {this} is removed from the + /// {Reactor}. + virtual int handle_close (ACE_HANDLE = ACE_INVALID_HANDLE, + ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK); + + /// Handle SIGINT. + virtual int handle_signal (int signum, siginfo_t *, ucontext_t *); + + // = These data members are "logically private" but are put in the + // protected part in case subclasses want to access them. + + // = Strategy objects. + + /// Creation strategy for an Acceptor. + CREATION_STRATEGY *creation_strategy_; + + /// true if {Acceptor} created the creation strategy and thus should + /// delete it, else false. + bool delete_creation_strategy_; + + /// Accept strategy for an {Acceptor}. + ACCEPT_STRATEGY *accept_strategy_; + + /// true if {Acceptor} created the accept strategy and thus should delete + /// it, else false. + bool delete_accept_strategy_; + + /// Concurrency strategy for an {Acceptor}. + CONCURRENCY_STRATEGY *concurrency_strategy_; + + /// true if {Acceptor} created the concurrency strategy and thus should + /// delete it, else false. + bool delete_concurrency_strategy_; + + /// Scheduling strategy for an {Acceptor}. + SCHEDULING_STRATEGY *scheduling_strategy_; + + /// true if {Acceptor} created the scheduling strategy and thus should + /// delete it, else false. + bool delete_scheduling_strategy_; + + // = Service information objects. + + /// Name of the service. + ACE_TCHAR *service_name_; + + /// Description of the service. + ACE_TCHAR *service_description_; + + /// Address that the {Strategy_Acceptor} uses to listen for + /// connections. + ACE_PEER_ACCEPTOR_ADDR service_addr_; +}; + +/** + * @class ACE_Oneshot_Acceptor + * + * @brief Generic factory for passively connecting clients and creating + * exactly one service handler (SVC_HANDLER). + * + * This class works similarly to the regular {ACE_Acceptor}, + * with the following differences: + * 1. This class doesn't automagically register {this} with the + * {ACE_Reactor} since it expects to have its {accept} method + * called directly. However, it stashes the {ACE_Reactor} + * pointer away in case it's needed later to finish accepting + * a connection asynchronously. + * 2. The class doesn't need an {ACE_Creation_Strategy} (since + * the user supplies the SVC_HANDLER) or an + * {ACE_Accept_Strategy} (since this class only accepts one + * connection and then removes all traces of itself from the + * {ACE_Reactor} if it was registered for asynchronous + * accepts). + */ +template +class ACE_Oneshot_Acceptor : public ACE_Service_Object +{ +public: + + // Useful STL-style traits. + typedef ACE_PEER_ACCEPTOR_ADDR addr_type; + typedef ACE_PEER_ACCEPTOR acceptor_type; + typedef SVC_HANDLER handler_type; + typedef typename SVC_HANDLER::stream_type stream_type; + + /// Constructor. + ACE_Oneshot_Acceptor (void); + + /** + * Initialize the appropriate strategies for concurrency and then + * open the {peer_acceptor} at the designated {local_addr}. Note + * that unlike the {ACE_Acceptor} and {ACE_Strategy_Acceptor}, this + * method does NOT register {this} acceptor with the {reactor} at + * this point -- it just stashes the {reactor} away in case it's + * needed later. + */ + ACE_Oneshot_Acceptor (const ACE_PEER_ACCEPTOR_ADDR &local_addr, + ACE_Reactor *reactor = ACE_Reactor::instance (), + ACE_Concurrency_Strategy * = 0); + + /** + * Initialize the appropriate strategies for concurrency and then + * open the {peer_acceptor} at the designated {local_addr}. Note + * that unlike the {ACE_Acceptor} and {ACE_Strategy_Acceptor}, this + * method does NOT register {this} acceptor with the {reactor} at + * this point -- it just stashes the {reactor} away in case it's + * needed later. + */ + int open (const ACE_PEER_ACCEPTOR_ADDR &, + ACE_Reactor *reactor = ACE_Reactor::instance (), + ACE_Concurrency_Strategy * = 0); + + /// Close down the {Oneshot_Acceptor}. + virtual ~ACE_Oneshot_Acceptor (void); + + // = Explicit factory operation. + /// Create a {SVC_HANDLER}, accept the connection into the + /// {SVC_HANDLER}, and activate the {SVC_HANDLER}. + virtual int accept (SVC_HANDLER * = 0, + ACE_PEER_ACCEPTOR_ADDR *remote_addr = 0, + const ACE_Synch_Options &synch_options = ACE_Synch_Options::defaults, + int restart = 1, + int reset_new_handle = 0); + + /// Cancel a oneshot acceptor that was started asynchronously. + virtual int cancel (void); + + /// Return the underlying {PEER_ACCEPTOR} object. + virtual operator ACE_PEER_ACCEPTOR &() const; + + /// Return the underlying {PEER_ACCEPTOR} object. + virtual ACE_PEER_ACCEPTOR &acceptor (void) const; + + /// Close down the {Oneshot_Acceptor}. + virtual int close (void); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /** + * Bridge method for activating a {svc_handler} with the appropriate + * concurrency strategy. Default behavior is to activate the + * {SVC_HANDLER} as a "passive object." However, subclasses can + * override this strategy to do more sophisticated concurrency + * activations (such as creating the {SVC_HANDLER} as an "active + * object" via multi-threading or multi-processing). + */ + virtual int activate_svc_handler (SVC_HANDLER *svc_handler); + + /// Factors out the code shared between the {accept} and + /// {handle_input} methods. + int shared_accept (SVC_HANDLER *svc_handler, + ACE_PEER_ACCEPTOR_ADDR *remote_addr, + ACE_Time_Value *timeout, + int restart, + int reset_new_handle); + + // = Demultiplexing hooks. + /// Returns the listening acceptor's {ACE_HANDLE}. + virtual ACE_HANDLE get_handle (void) const; + + /// Perform termination activities when {this} is removed from the + /// {reactor}. + virtual int handle_close (ACE_HANDLE = ACE_INVALID_HANDLE, + ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK); + + /// Accept one connection from a client and activates the + /// SVC_HANDLER. + virtual int handle_input (ACE_HANDLE); + + /// Called when an acceptor times out... + virtual int handle_timeout (const ACE_Time_Value &tv, + const void *arg); + + // = Dynamic linking hooks. + /// Default version does no work and returns -1. Must be overloaded + /// by application developer to do anything meaningful. + virtual int init (int argc, ACE_TCHAR *argv[]); + + /// Default version does no work and returns -1. Must be overloaded + /// by application developer to do anything meaningful. + virtual int fini (void); + + /// Default version returns address info in {buf}. + virtual int info (ACE_TCHAR **, size_t) const; + + // = Service management hooks. + /// Default version does no work and returns -1. Must be overloaded + /// by application developer to do anything meaningful. + virtual int suspend (void); + + /// Default version does no work and returns -1. Must be overloaded + /// by application developer to do anything meaningful. + virtual int resume (void); + +private: + /** + * Insert ourselves into the {ACE_Reactor} so that we can continue + * accepting this connection asynchronously. This method should NOT + * be called by developers directly. + */ + int register_handler (SVC_HANDLER *svc_handler, + const ACE_Synch_Options &options, + int restart); + + /// Hold the svc_handler_ across asynchrony boundaries. + SVC_HANDLER *svc_handler_; + + /// Hold the restart flag across asynchrony boundaries. + int restart_; + + /// Factory that establishes connections passively. + ACE_PEER_ACCEPTOR peer_acceptor_; + + /// Concurrency strategy for an Acceptor. + ACE_Concurrency_Strategy *concurrency_strategy_; + + /// true if Acceptor created the concurrency strategy and thus should + /// delete it, else false. + bool delete_concurrency_strategy_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Acceptor.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Acceptor.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" + +#endif /* ACE_ACCEPTOR_H */ diff --git a/ACE/ace/Activation_Queue.cpp b/ACE/ace/Activation_Queue.cpp new file mode 100644 index 00000000000..aef17d05e7a --- /dev/null +++ b/ACE/ace/Activation_Queue.cpp @@ -0,0 +1,138 @@ +#include "ace/Activation_Queue.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Activation_Queue.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/Log_Msg.h" +#include "ace/Method_Request.h" +#include "ace/Malloc_Base.h" +#include "ace/Time_Value.h" + +ACE_RCSID (ace, + Activation_Queue, + "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +void +ACE_Activation_Queue::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("delete_queue_ = %d\n"), + this->delete_queue_)); + ACE_DEBUG ((LM_INFO, ACE_TEXT ("queue_: \n"))); + if (this->queue_) + this->queue_->dump(); + else + //FUZZ: disable check_for_NULL + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(NULL)\n"))); + //FUZZ: enable check_for_NULL + + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_Activation_Queue::ACE_Activation_Queue (ACE_Message_Queue *new_queue, + ACE_Allocator *alloc, + ACE_Allocator *db_alloc) + : delete_queue_ (false) + , allocator_(alloc) + , data_block_allocator_(db_alloc) +{ + if (this->allocator_ == 0) + this->allocator_ = ACE_Allocator::instance (); + + if (new_queue) + this->queue_ = new_queue; + else + { + ACE_NEW (this->queue_, + ACE_Message_Queue); + this->delete_queue_ = true; + } +} + +void +ACE_Activation_Queue::queue (ACE_Message_Queue *q) +{ + // Destroy the internal queue if one exist. + if (this->delete_queue_) + { + // Destroy the current queue. + delete this->queue_; + + // Set the flag to false. NOTE that the delete_queue_ flag is a + // flag used to only indicate whether or not if an internal + // ACE_Message_Queue has been created, therefore, it will not + // affect the user if the user decided to replace the queue with + // their own queue no matter how many time they call on this + // function. + this->delete_queue_ = false; + } + + queue_ = q; +} + +ACE_Activation_Queue::~ACE_Activation_Queue (void) +{ + if (this->delete_queue_) + delete this->queue_; +} + +ACE_Method_Request * +ACE_Activation_Queue::dequeue (ACE_Time_Value *tv) +{ + ACE_Message_Block *mb = 0; + + // Dequeue the message. + if (this->queue_->dequeue_head (mb, tv) != -1) + { + // Get the next . + ACE_Method_Request *mr = + reinterpret_cast (mb->base ()); + // Delete the message block. + mb->release (); + return mr; + } + else + return 0; +} + +int +ACE_Activation_Queue::enqueue (ACE_Method_Request *mr, + ACE_Time_Value *tv) +{ + ACE_Message_Block *mb = 0; + + // We pass sizeof (*mr) here so that flow control will work + // correctly. Since we also pass note that no unnecessary + // memory is actually allocated -- just the size field is set. + ACE_NEW_MALLOC_RETURN (mb, + static_cast (this->allocator_->malloc (sizeof (ACE_Message_Block))), + ACE_Message_Block (sizeof (*mr), // size + ACE_Message_Block::MB_DATA, // type + 0, // cont + (char *) mr, // data + 0, // allocator + 0, // locking strategy + mr->priority (), // priority + ACE_Time_Value::zero, // execution time + ACE_Time_Value::max_time, // absolute time of deadline + this->data_block_allocator_, // data_block allocator + this->allocator_), // message_block allocator + -1); + + // Enqueue in priority order. + int const result = this->queue_->enqueue_prio (mb, tv); + + // Free ACE_Message_Block if enqueue_prio failed. + if (result == -1) + ACE_DES_FREE (mb, this->allocator_->free, ACE_Message_Block); + + return result; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Activation_Queue.h b/ACE/ace/Activation_Queue.h new file mode 100644 index 00000000000..87fffc0f73d --- /dev/null +++ b/ACE/ace/Activation_Queue.h @@ -0,0 +1,173 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Activation_Queue.h + * + * $Id$ + * + * @author Andres Kruse + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_ACTIVATION_QUEUE_H +#define ACE_ACTIVATION_QUEUE_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Message_Queue.h" +#include "ace/Condition_Thread_Mutex.h" + +/// Define to be compatible with the terminology in the POSA2 book! +#define ACE_Activation_List ACE_Activation_Queue + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_Method_Request; + +/** + * @class ACE_Activation_Queue + * + * @brief Reifies a method into a request. Subclasses typically + * represent necessary state and behavior. + * + * Maintains a priority-ordered queue of ACE_Method_Request objects. + * A scheduler class (often derived from ACE_Task) subsequently removes + * each method request and invokes its @c call() method. + * + * This class is discussed in depth in the Active Object chapter + * of POSA2. In that book, it is referred to as an Activation List. + * + * @sa ACE_Method_Request + */ +class ACE_Export ACE_Activation_Queue +{ +public: + // = Initialization and termination methods. + /// Constructor. + /** + * Initializes a new activation queue. + * + * @param new_queue The activation queue uses an ACE_Message_Queue to + * queue and order the method requests. If this argument + * is 0, a new ACE_Message_Queue is created for this + * object's use and will be deleted when this object is + * destroyed. If a non-zero pointer is supplied, the + * passed object will be used and will not be deleted when + * this object is destroyed. If an ACE_Task is being created + * to act as the scheduler, for instance, its + * ACE_Message_Queue pointer can be passed to this object. + * @param alloc Optional, the allocator to use when allocating + * ACE_Message_Block instances that wrap the method requests + * queued to this activation queue. Defaults to + * ACE_Allocator::instance(). + * @param db_alloc Optional, the allocator to use when allocating + * data blocks for the ACE_Message_Block instances that + * wrap the method requests queued to this activation queue. + * Defaults to ACE_Allocator::instance(). + */ + ACE_Activation_Queue (ACE_Message_Queue *new_queue = 0, + ACE_Allocator *alloc = 0, + ACE_Allocator *db_alloc = 0); + + /// Destructor. + virtual ~ACE_Activation_Queue (void); + + // = Activate Queue operations. + + /// Dequeue the next available ACE_Method_Request. + /** + * @param tv If 0, the method will block until a method request is + * available, else will wait until the absolute time specified + * in the referenced ACE_Time_Value. This method will return, + * earlier, however, if queue is closed, deactivated, or when + * a signal occurs. + * + * @retval Pointer to the dequeued ACE_Method_Request object. + * @retval 0 an error occurs; errno contains further information. If + * the specified timeout elapses, errno will be @c EWOULDBLOCK. + */ + ACE_Method_Request *dequeue (ACE_Time_Value *tv = 0); + + /// Enqueue the ACE_Method_Request in priority order. + /** + * The priority of the method request is obtained via the @c priority() + * method of the queued method request. Priority ordering is determined + * by the ACE_Message_Queue class; 0 is the lowest priority. + * + * @param new_method_request Pointer to the ACE_Method_Request object to + * queue. This object's @c priority() method is called to obtain + * the priority. + * @param tv If 0, the method will block until the method request can + * be queued, else will wait until the absolute time specified + * in the referenced ACE_Time_Value. This method will return, + * earlier, however, if queue is closed, deactivated, or when + * a signal occurs. + * + * @retval >0 The number of method requests on the queue after adding + * the specified request. + * @retval -1 if an error occurs; errno contains further information. If + * the specified timeout elapses, errno will be @c EWOULDBLOCK. + */ + int enqueue (ACE_Method_Request *new_method_request, ACE_Time_Value *tv = 0); + + /// Get the current number of method objects in the queue. + size_t method_count (void) const; + + /// Returns 1 if the queue is empty, 0 otherwise. + int is_empty (void) const; + + /// Returns 1 if the queue is full, 0 otherwise. + int is_full (void) const; + + /// Dump the state of an request. + void dump (void) const; + + /// Get a pointer to the underlying queue. + ACE_Message_Queue *queue (void) const; + + /// Set the pointer to the underlying queue. + void queue (ACE_Message_Queue *q); + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + + // = Prevent copying and assignment. + ACE_Activation_Queue (const ACE_Activation_Queue &); + void operator= (const ACE_Activation_Queue &); + +protected: + + /// Stores the Method_Requests. + ACE_Message_Queue *queue_; + + /// Keeps track of whether we need to delete the queue. + bool delete_queue_; + +private: + + /// Allocation strategy of the queue. + ACE_Allocator *allocator_; + + /// Allocation strategy of the message blocks. + ACE_Allocator *data_block_allocator_; + +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Activation_Queue.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_ACTIVATION_QUEUE_H */ diff --git a/ACE/ace/Activation_Queue.inl b/ACE/ace/Activation_Queue.inl new file mode 100644 index 00000000000..50127f607d1 --- /dev/null +++ b/ACE/ace/Activation_Queue.inl @@ -0,0 +1,31 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE size_t +ACE_Activation_Queue::method_count (void) const +{ + return queue_->message_count (); +} + +ACE_INLINE int +ACE_Activation_Queue::is_full (void) const +{ + return queue_->is_full (); +} + +ACE_INLINE int +ACE_Activation_Queue::is_empty (void) const +{ + return queue_->is_empty (); +} + +ACE_INLINE ACE_Message_Queue * +ACE_Activation_Queue::queue (void) const +{ + return queue_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Active_Map_Manager.cpp b/ACE/ace/Active_Map_Manager.cpp new file mode 100644 index 00000000000..6f4b66191c7 --- /dev/null +++ b/ACE/ace/Active_Map_Manager.cpp @@ -0,0 +1,9 @@ +// $Id$ + +#include "ace/Active_Map_Manager.h" + +ACE_RCSID(ace, Active_Map_Manager, "$Id$") + +#if !defined (__ACE_INLINE__) +#include "ace/Active_Map_Manager.inl" +#endif /* __ACE_INLINE__ */ diff --git a/ACE/ace/Active_Map_Manager.h b/ACE/ace/Active_Map_Manager.h new file mode 100644 index 00000000000..1281302fdf8 --- /dev/null +++ b/ACE/ace/Active_Map_Manager.h @@ -0,0 +1,116 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Active_Map_Manager.h + * + * $Id$ + * + * @author Irfan Pyarali + */ +//============================================================================= + + +#ifndef ACE_ACTIVE_MAP_MANAGER_H +#define ACE_ACTIVE_MAP_MANAGER_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Basic_Types.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Active_Map_Manager_Key + * + * @brief Key used in the Active Object Map. + * + * This key keeps information of the index and the generation + * count of the slot it represents. Since the index information + * is part of the key, lookups are super fast and predictable, + */ +class ACE_Export ACE_Active_Map_Manager_Key +{ +public: + /// Default constructor. + ACE_Active_Map_Manager_Key (void); + + /** + * Constructor given the @a slot_index and @a slot_generation number. + * This is useful once the user has somehow recovered the + * @a slot_index and @a slot_generation number from the client. + */ + ACE_Active_Map_Manager_Key (ACE_UINT32 slot_index, + ACE_UINT32 slot_generation); + + /// Get the slot_index. + ACE_UINT32 slot_index (void) const; + + /// Set the slot_index. + void slot_index (ACE_UINT32 i); + + /// Get the slot_generation number. + ACE_UINT32 slot_generation (void) const; + + /// Set the slot_generation number. + void slot_generation (ACE_UINT32 g); + + /// Size required to store information about active key. + static size_t size (void); + + /// Recover state of active key from @a data. User must make sure + /// that @a data encoded using the encode() method. + void decode (const void *data); + + /// Encode state of the active key into @a data. @a data must be as + /// big as the value returned from . + void encode (void *data) const; + + /// Compare keys. + bool operator== (const ACE_Active_Map_Manager_Key &rhs) const; + bool operator!= (const ACE_Active_Map_Manager_Key &rhs) const; + + // = This really should be protected but because of template + // friends, they are not. + + /// Increment the number. + void increment_slot_generation_count (void); + +private: + + /** + * @brief Data for the Active Object Map Key. + * + * This separate structure makes it easier to manage copying + * the index and the generation to and from the user buffer. + * + */ + struct key_data + { + /// Slot index in the active map. + ACE_UINT32 slot_index_; + + /// Slot generation number of slot in the active map. + ACE_UINT32 slot_generation_; + }; + + /// Data for the Active Object Map Key. + key_data key_data_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Active_Map_Manager.inl" +#endif /* __ACE_INLINE__ */ + +// Include the templates here. +#include "ace/Active_Map_Manager_T.h" + +#include /**/ "ace/post.h" +#endif /* ACE_ACTIVE_MAP_MANAGER_H */ diff --git a/ACE/ace/Active_Map_Manager.inl b/ACE/ace/Active_Map_Manager.inl new file mode 100644 index 00000000000..652cf7c1f71 --- /dev/null +++ b/ACE/ace/Active_Map_Manager.inl @@ -0,0 +1,95 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/OS_NS_string.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_Active_Map_Manager_Key::ACE_Active_Map_Manager_Key (void) +{ + // If you change ~0, please change ACE_Map_Manager::free_list_id() + // accordingly. + this->key_data_.slot_index_ = (ACE_UINT32) ~0; + this->key_data_.slot_generation_ = 0; +} + +ACE_INLINE +ACE_Active_Map_Manager_Key::ACE_Active_Map_Manager_Key (ACE_UINT32 slot_index, + ACE_UINT32 slot_generation) +{ + this->key_data_.slot_index_ = slot_index; + this->key_data_.slot_generation_ = slot_generation; +} + +ACE_INLINE ACE_UINT32 +ACE_Active_Map_Manager_Key::slot_index (void) const +{ + return this->key_data_.slot_index_; +} + +ACE_INLINE ACE_UINT32 +ACE_Active_Map_Manager_Key::slot_generation (void) const +{ + return this->key_data_.slot_generation_; +} + +ACE_INLINE bool +ACE_Active_Map_Manager_Key::operator== (const ACE_Active_Map_Manager_Key &rhs) const +{ + return + this->key_data_.slot_index_ == rhs.key_data_.slot_index_ && + this->key_data_.slot_generation_ == rhs.key_data_.slot_generation_; +} + +ACE_INLINE bool +ACE_Active_Map_Manager_Key::operator!= (const ACE_Active_Map_Manager_Key &rhs) const +{ + return !this->operator== (rhs); +} + +ACE_INLINE void +ACE_Active_Map_Manager_Key::slot_index (ACE_UINT32 i) +{ + this->key_data_.slot_index_ = i; +} + +ACE_INLINE void +ACE_Active_Map_Manager_Key::slot_generation (ACE_UINT32 g) +{ + this->key_data_.slot_generation_ = g; +} + +ACE_INLINE void +ACE_Active_Map_Manager_Key::increment_slot_generation_count (void) +{ + ++this->key_data_.slot_generation_; +} + +/* static */ +ACE_INLINE size_t +ACE_Active_Map_Manager_Key::size (void) +{ + return sizeof (ACE_UINT32) + sizeof (ACE_UINT32); +} + +ACE_INLINE void +ACE_Active_Map_Manager_Key::decode (const void *data) +{ + // Copy the information from the user buffer into the key. + ACE_OS::memcpy (&this->key_data_, + data, + sizeof this->key_data_); +} + +ACE_INLINE void +ACE_Active_Map_Manager_Key::encode (void *data) const +{ + // Copy the key data to the user buffer. + ACE_OS::memcpy (data, + &this->key_data_, + sizeof this->key_data_); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Active_Map_Manager_T.cpp b/ACE/ace/Active_Map_Manager_T.cpp new file mode 100644 index 00000000000..b8cd14446ac --- /dev/null +++ b/ACE/ace/Active_Map_Manager_T.cpp @@ -0,0 +1,22 @@ +// $Id$ + +#ifndef ACE_ACTIVE_MAP_MANAGER_T_CPP +#define ACE_ACTIVE_MAP_MANAGER_T_CPP + +#include "ace/Active_Map_Manager_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (__ACE_INLINE__) +#include "ace/Active_Map_Manager_T.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_Active_Map_Manager) + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_ACTIVE_MAP_MANAGER_T_CPP */ diff --git a/ACE/ace/Active_Map_Manager_T.h b/ACE/ace/Active_Map_Manager_T.h new file mode 100644 index 00000000000..34b5a475652 --- /dev/null +++ b/ACE/ace/Active_Map_Manager_T.h @@ -0,0 +1,211 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Active_Map_Manager_T.h + * + * $Id$ + * + * @author Irfan Pyarali + */ +//============================================================================= + + +#ifndef ACE_ACTIVE_MAP_MANAGER_T_H +#define ACE_ACTIVE_MAP_MANAGER_T_H +#include /**/ "ace/pre.h" + +#include "ace/Map_Manager.h" +#include "ace/Active_Map_Manager.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Null_Mutex.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Active_Map_Manager + * + * @brief Define a map abstraction that associates system generated + * keys with user specified values. + * + * Since the key is system generated, searches are very fast and + * take a constant amount of time. + */ +template +class ACE_Active_Map_Manager : public ACE_Map_Manager +{ +public: + + // = Traits. + typedef ACE_Active_Map_Manager_Key key_type; + typedef T mapped_type; + + typedef ACE_Map_Entry ENTRY; + typedef ACE_Map_Iterator ITERATOR; + typedef ACE_Map_Reverse_Iterator REVERSE_ITERATOR; + + typedef ENTRY entry; + typedef ITERATOR iterator; + typedef REVERSE_ITERATOR reverse_iterator; + + // = Initialization and termination methods. + /// Initialize a with the ACE_DEFAULT_MAP_SIZE. + ACE_Active_Map_Manager (ACE_Allocator *alloc = 0); + + /// Initialize a with @a size entries. + ACE_Active_Map_Manager (size_t size, + ACE_Allocator *alloc = 0); + + /// Close down a and release dynamically + /// allocated resources. + ~ACE_Active_Map_Manager (void); + + /// Initialize a with size @a length. + int open (size_t length = ACE_DEFAULT_MAP_SIZE, + ACE_Allocator *alloc = 0); + + /// Close down a and release dynamically + /// allocated resources. + int close (void); + + /// Add @a value to the map, and the corresponding key produced by the + /// Active_Map_Manager is returned through @a key. + int bind (const T &value, + ACE_Active_Map_Manager_Key &key); + + /// Add @a value to the map. The user does not care about the + /// corresponding key produced by the Active_Map_Manager. + int bind (const T &value); + + /** + * Reserves a slot in the internal structure and returns the key and + * a pointer to the value. User should place their @a value into + * <*internal_value>. This method is useful in reducing the number + * of copies required in some cases. Note that is + * only a temporary pointer and will change when the map resizes. + * Therefore, the user should use the pointer immediately and not + * hold on to it. + */ + int bind (ACE_Active_Map_Manager_Key &key, + T *&internal_value); + + /// Reassociate @a key with @a value. The function fails if @a key is + /// not in the map. + int rebind (const ACE_Active_Map_Manager_Key &key, + const T &value); + + /** + * Reassociate @a key with @a value, storing the old value into the + * "out" parameter @a old_value. The function fails if @a key is not + * in the map. + */ + int rebind (const ACE_Active_Map_Manager_Key &key, + const T &value, + T &old_value); + + /** + * Reassociate @a key with @a value, storing the old key and value + * into the "out" parameter @a old_key and @a old_value. The function + * fails if @a key is not in the map. + */ + int rebind (const ACE_Active_Map_Manager_Key &key, + const T &value, + ACE_Active_Map_Manager_Key &old_key, + T &old_value); + + /// Locate @a value associated with @a key. + int find (const ACE_Active_Map_Manager_Key &key, + T &value) const; + + /// Is @a key in the map? + int find (const ACE_Active_Map_Manager_Key &key) const; + + /** + * Locate @a value associated with @a key. The value is returned via + * and hence a copy is saved. Note that + * is only a temporary pointer and will change when + * the map resizes. Therefore, the user should use the pointer + * immediately and not hold on to it. + */ + int find (const ACE_Active_Map_Manager_Key &key, + T *&internal_value) const; + + // Creates a key. User should place their @a value into + // <*internal_value>. This method is useful in reducing the number + // of copies required in some cases. + + /// Remove @a key from the map. + int unbind (const ACE_Active_Map_Manager_Key &key); + + /// Remove @a key from the map, and return the @a value associated with + /// @a key. + int unbind (const ACE_Active_Map_Manager_Key &key, + T &value); + + /** + * Locate @a value associated with @a key. The value is returned via + * and hence a copy is saved. Note that + * is only a temporary pointer and will change when + * the map resizes or when this slot is reused. Therefore, the user + * should use the pointer immediately and not hold on to it. + */ + int unbind (const ACE_Active_Map_Manager_Key &key, + T *&internal_value); + + /// Return the current size of the map. + size_t current_size (void) const; + + /// Return the total size of the map. + size_t total_size (void) const; + + /// Returns a key that cannot be found in the map. + static const ACE_Active_Map_Manager_Key npos (void); + + /// Dump the state of an object. + void dump (void) const; + + // = STL styled iterator factory functions. + + /// Return forward iterator. + ACE_Map_Iterator begin (void); + ACE_Map_Iterator end (void); + + /// Return reverse iterator. + ACE_Map_Reverse_Iterator rbegin (void); + ACE_Map_Reverse_Iterator rend (void); + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + + /// Private base class + typedef ACE_Map_Manager ACE_AMM_BASE; + +private: + + // = Disallow these operations. + ACE_UNIMPLEMENTED_FUNC (void operator= (const ACE_Active_Map_Manager &)) + ACE_UNIMPLEMENTED_FUNC (ACE_Active_Map_Manager (const ACE_Active_Map_Manager &)) +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Active_Map_Manager_T.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Active_Map_Manager_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Active_Map_Manager_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" +#endif /* ACE_ACTIVE_MAP_MANAGER_T_H */ diff --git a/ACE/ace/Active_Map_Manager_T.inl b/ACE/ace/Active_Map_Manager_T.inl new file mode 100644 index 00000000000..124f76c48c4 --- /dev/null +++ b/ACE/ace/Active_Map_Manager_T.inl @@ -0,0 +1,311 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE int +ACE_Active_Map_Manager::bind (ACE_Active_Map_Manager_Key &key, + T *&internal_value) +{ + ACE_UINT32 slot_index; + int result = this->next_free (slot_index); + + if (result == 0) + { + // Move from free list to occupied list + this->move_from_free_list_to_occupied_list (slot_index); + + // Reset the key. + this->search_structure_[slot_index].ext_id_.increment_slot_generation_count (); + this->search_structure_[slot_index].ext_id_.slot_index (slot_index); + + // Copy the key for the user. + key = this->search_structure_[slot_index].ext_id_; + + // This is where the user should place the value. + internal_value = &this->search_structure_[slot_index].int_id_; + + // Update the current size. + ++this->cur_size_; + } + + return result; +} + +template ACE_INLINE int +ACE_Active_Map_Manager::bind (const T &value, + ACE_Active_Map_Manager_Key &key) +{ + T *internal_value = 0; + int result = this->bind (key, + internal_value); + + if (result == 0) + { + // Store new value. + *internal_value = value; + } + + return result; +} + +template ACE_INLINE int +ACE_Active_Map_Manager::bind (const T &value) +{ + ACE_Active_Map_Manager_Key key; + return this->bind (value, key); +} + +template ACE_INLINE int +ACE_Active_Map_Manager::find (const ACE_Active_Map_Manager_Key &key, + T *&internal_value) const +{ + ACE_UINT32 slot_index = key.slot_index (); + ACE_UINT32 slot_generation = key.slot_generation (); + + if (slot_index > this->total_size_ || +#if defined (ACE_HAS_LAZY_MAP_MANAGER) + this->search_structure_[slot_index].free_ || +#endif /* ACE_HAS_LAZY_MAP_MANAGER */ + this->search_structure_[slot_index].ext_id_.slot_generation () != slot_generation || + this->search_structure_[slot_index].ext_id_.slot_index () == + (ACE_UINT32)this->free_list_id ()) + { + return -1; + } + else + { + // This is where the user value is. + internal_value = &this->search_structure_[slot_index].int_id_; + } + + return 0; +} + +template ACE_INLINE int +ACE_Active_Map_Manager::find (const ACE_Active_Map_Manager_Key &key) const +{ + T *internal_value = 0; + return this->find (key, + internal_value); +} + +template ACE_INLINE int +ACE_Active_Map_Manager::find (const ACE_Active_Map_Manager_Key &key, + T &value) const +{ + T *internal_value = 0; + int result = this->find (key, + internal_value); + + if (result == 0) + value = *internal_value; + + return result; +} + +template ACE_INLINE int +ACE_Active_Map_Manager::rebind (const ACE_Active_Map_Manager_Key &key, + const T &value) +{ + int result = this->find (key); + + if (result == 0) + { + // Store new value. + this->search_structure_[key.slot_index ()].int_id_ = value; + } + + return result; +} + +template ACE_INLINE int +ACE_Active_Map_Manager::rebind (const ACE_Active_Map_Manager_Key &key, + const T &value, + T &old_value) +{ + int result = this->find (key); + + if (result == 0) + { + // Copy old value. + old_value = this->search_structure_[key.slot_index ()].int_id_; + + // Store new value. + this->search_structure_[key.slot_index ()].int_id_ = value; + } + + return result; +} + +template ACE_INLINE int +ACE_Active_Map_Manager::rebind (const ACE_Active_Map_Manager_Key &key, + const T &value, + ACE_Active_Map_Manager_Key &old_key, + T &old_value) +{ + int result = this->find (key); + + if (result == 0) + { + // Copy old key. + old_key = this->search_structure_[key.slot_index ()].ext_id_; + + // Copy old value. + old_value = this->search_structure_[key.slot_index ()].int_id_; + + // Store new value. + this->search_structure_[key.slot_index ()].int_id_ = value; + } + + return result; +} + +template ACE_INLINE int +ACE_Active_Map_Manager::unbind (const ACE_Active_Map_Manager_Key &key, + T *&internal_value) +{ + int result = this->find (key, + internal_value); + + if (result == 0) + { + ACE_UINT32 slot_index = key.slot_index (); + +#if defined (ACE_HAS_LAZY_MAP_MANAGER) + + // + // In the case of lazy map managers, the movement of free slots + // from the occupied list to the free list is delayed until we + // run out of free slots in the free list. + // + + this->search_structure_[slot_index].free_ = 1; + +#else + + // Move from occupied list to free list. + this->move_from_occupied_list_to_free_list (slot_index); + +#endif /* ACE_HAS_LAZY_MAP_MANAGER */ + + // Reset the slot_index. This will tell us that this entry is free. + this->search_structure_[slot_index].ext_id_.slot_index (this->free_list_id ()); + + // Update the current size. + --this->cur_size_; + } + + return result; +} + +template ACE_INLINE int +ACE_Active_Map_Manager::unbind (const ACE_Active_Map_Manager_Key &key, + T &value) +{ + T *internal_value; + int result = this->unbind (key, + internal_value); + + if (result == 0) + { + // Copy old value. + value = *internal_value; + } + + return result; +} + +template ACE_INLINE int +ACE_Active_Map_Manager::unbind (const ACE_Active_Map_Manager_Key &key) +{ + T *internal_value; + return this->unbind (key, + internal_value); +} + +template ACE_INLINE +ACE_Active_Map_Manager::ACE_Active_Map_Manager (ACE_Allocator *alloc) + : ACE_AMM_BASE (alloc) +{ +} + +template ACE_INLINE +ACE_Active_Map_Manager::ACE_Active_Map_Manager (size_t size, + ACE_Allocator *alloc) + : ACE_AMM_BASE (size, + alloc) +{ +} + +template ACE_INLINE +ACE_Active_Map_Manager::~ACE_Active_Map_Manager (void) +{ +} + +template ACE_INLINE int +ACE_Active_Map_Manager::open (size_t length, + ACE_Allocator *alloc) +{ + return ACE_AMM_BASE::open (length, alloc); +} + +template ACE_INLINE int +ACE_Active_Map_Manager::close (void) +{ + return ACE_AMM_BASE::close (); +} + +template ACE_INLINE size_t +ACE_Active_Map_Manager::current_size (void) const +{ + return ACE_AMM_BASE::current_size (); +} + +template ACE_INLINE size_t +ACE_Active_Map_Manager::total_size (void) const +{ + return ACE_AMM_BASE::total_size (); +} + +/* static */ +template ACE_INLINE const ACE_Active_Map_Manager_Key +ACE_Active_Map_Manager::npos (void) +{ + return ACE_Active_Map_Manager_Key (~0, ~0); +} + +template ACE_INLINE void +ACE_Active_Map_Manager::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_AMM_BASE::dump (); +#endif /* ACE_HAS_DUMP */ +} + +template ACE_Map_Iterator +ACE_Active_Map_Manager::begin (void) +{ + return ACE_AMM_BASE::begin (); +} + +template ACE_INLINE ACE_Map_Iterator +ACE_Active_Map_Manager::end (void) +{ + return ACE_AMM_BASE::end (); +} + +template ACE_INLINE ACE_Map_Reverse_Iterator +ACE_Active_Map_Manager::rbegin (void) +{ + return ACE_AMM_BASE::rbegin (); +} + +template ACE_INLINE ACE_Map_Reverse_Iterator +ACE_Active_Map_Manager::rend (void) +{ + return ACE_AMM_BASE::rend (); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Addr.cpp b/ACE/ace/Addr.cpp new file mode 100644 index 00000000000..f458e018eef --- /dev/null +++ b/ACE/ace/Addr.cpp @@ -0,0 +1,73 @@ +// $Id$ + +#include "ace/Addr.h" + + +ACE_RCSID (ace, + Addr, + "$Id$") + + +#if !defined (__ACE_INLINE__) +#include "ace/Addr.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/Log_Msg.h" +#include "ace/os_include/sys/os_socket.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Note: this object requires static construction and destruction. +/* static */ +const ACE_Addr ACE_Addr::sap_any (AF_ANY, -1); + +ACE_ALLOC_HOOK_DEFINE(ACE_Addr) + + +// Initializes instance variables. Note that 0 is an unspecified +// protocol family type... + +ACE_Addr::ACE_Addr (int type, int size) : + addr_type_ (type), + addr_size_ (size) +{ +} + +ACE_Addr::~ACE_Addr (void) +{ +} + +void * +ACE_Addr::get_addr (void) const +{ + return 0; +} + +void +ACE_Addr::set_addr (void *, int) +{ +} + +// Initializes instance variables. + +void +ACE_Addr::base_set (int type, int size) +{ + this->addr_type_ = type; + this->addr_size_ = size; +} + +void +ACE_Addr::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Addr::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("addr_type_ = %d"), this->addr_type_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\naddr_size_ = %d"), this->addr_size_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Addr.h b/ACE/ace/Addr.h new file mode 100644 index 00000000000..530fb87c17f --- /dev/null +++ b/ACE/ace/Addr.h @@ -0,0 +1,104 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Addr.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_ADDR_H +#define ACE_ADDR_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Addr + * + * @brief Defines the base class for the "address family independent" + * address format. + */ +class ACE_Export ACE_Addr +{ +public: + // = Initialization and termination methods. + /// Initializes instance variables. + ACE_Addr (int type = -1, + int size = -1); + + /// Destructor. + virtual ~ACE_Addr (void); + + // = Get/set the size of the address. + + /// Return the size of the address. + int get_size (void) const; + + /// Sets the size of the address. + void set_size (int size); + + // = Get/set the type of the address. + + /// Get the type of the address. + int get_type (void) const; + + /// Set the type of the address. + void set_type (int type); + + /// Return a pointer to the address. + virtual void *get_addr (void) const; + + /// Set a pointer to the address. + virtual void set_addr (void *, int len); + + // = Equality/inequality tests + /// Check for address equality. + bool operator == (const ACE_Addr &sap) const; + + /// Check for address inequality. + bool operator != (const ACE_Addr &sap) const; + + /// Initializes instance variables. + void base_set (int type, int size); + + /// Wild-card address. + static const ACE_Addr sap_any; + + /// Returns a hash value. This should be overwritten by a subclass + /// that can produce a better hash value. + virtual unsigned long hash (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// e.g., AF_UNIX, AF_INET, AF_SPIPE, etc. + int addr_type_; + + /// Number of bytes in the address. + int addr_size_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Addr.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* ACE_ADDR_H */ diff --git a/ACE/ace/Addr.inl b/ACE/ace/Addr.inl new file mode 100644 index 00000000000..3780e04b6aa --- /dev/null +++ b/ACE/ace/Addr.inl @@ -0,0 +1,61 @@ +// -*- C++ -*- +// +// $Id$ + +// Return the address of the address. + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE bool +ACE_Addr::operator == (const ACE_Addr &sap) const +{ + return (sap.addr_type_ == this->addr_type_ && + sap.addr_size_ == this->addr_size_ ); +} + +ACE_INLINE bool +ACE_Addr::operator != (const ACE_Addr &sap) const +{ + return (sap.addr_type_ != this->addr_type_ || + sap.addr_size_ != this->addr_size_ ); +} + +// Return the size of the address. + +ACE_INLINE int +ACE_Addr::get_size (void) const +{ + return this->addr_size_; +} + +// Sets the size of the address. + +ACE_INLINE void +ACE_Addr::set_size (int size) +{ + this->addr_size_ = size; +} + +// Return the type of the address. + +ACE_INLINE int +ACE_Addr::get_type (void) const +{ + return this->addr_type_; +} + +// Set the type of the address. + +ACE_INLINE void +ACE_Addr::set_type (int type) +{ + this->addr_type_ = type; +} + +ACE_INLINE unsigned long +ACE_Addr::hash (void) const +{ + return 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Arg_Shifter.cpp b/ACE/ace/Arg_Shifter.cpp new file mode 100644 index 00000000000..36c265c6d5a --- /dev/null +++ b/ACE/ace/Arg_Shifter.cpp @@ -0,0 +1,230 @@ +#ifndef ACE_ARG_SHIFTER_T_CPP +#define ACE_ARG_SHIFTER_T_CPP + +#include "ace/Arg_Shifter.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_strings.h" +#include "ace/OS_Errno.h" +#include "ace/OS_Memory.h" + +ACE_RCSID (ace, + Arg_Shifter, + "$Id$") + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +ACE_Arg_Shifter_T::ACE_Arg_Shifter_T (int& argc, + const CHAR_TYPE** argv, + const CHAR_TYPE** temp) + : argc_ (argc), + total_size_ (argc), + temp_ (temp), + argv_ (argv), + current_index_ (0), + back_ (argc - 1), + front_ (0) +{ + this->init (); +} + +template +ACE_Arg_Shifter_T::ACE_Arg_Shifter_T (int& argc, + CHAR_TYPE** argv, + CHAR_TYPE** temp) + : argc_ (argc), + total_size_ (argc), + temp_ ((const CHAR_TYPE **) temp), + argv_ ((const CHAR_TYPE **) argv), + current_index_ (0), + back_ (argc - 1), + front_ (0) +{ + this->init (); +} + +template +void +ACE_Arg_Shifter_T::init (void) +{ + // If not provided with one, allocate a temporary array. + if (this->temp_ == 0) + ACE_NEW (this->temp_, + const CHAR_TYPE *[this->total_size_]); + + if (this->temp_ != 0) + { + // Fill the temporary array. + this->argc_ = 0; + for (int i = 0; i < this->total_size_; i++) + { + this->temp_[i] = this->argv_[i]; + this->argv_[i] = 0; + } + } + else + { + // Allocation failed, prohibit iteration. + this->current_index_ = this->argc_; + this->front_ = this->argc_; + } +} + +template +ACE_Arg_Shifter_T::~ACE_Arg_Shifter_T (void) +{ + // Delete the temporary vector. + delete [] temp_; +} + +template +const CHAR_TYPE * +ACE_Arg_Shifter_T::get_current (void) const +{ + const CHAR_TYPE * retval = 0; + + if (this->is_anything_left ()) + retval = this->temp_[current_index_]; + + return retval; +} + +template +const CHAR_TYPE * +ACE_Arg_Shifter_T::get_the_parameter (const CHAR_TYPE *flag) +{ + // the return 0's abound because this method + // would otherwise be a deep if { } else { } + + // check to see if any arguments still exist + if (!this->is_anything_left()) + return 0; + + // check to see if the flag is the argument + int const offset = this->cur_arg_strncasecmp (flag); + if (offset == -1) + return 0; + + if (offset == 0) + { + this->consume_arg (); + + if (!this->is_parameter_next()) + { + return 0; + } + } + // the parameter is in the middle somewhere... + return this->temp_[current_index_] + offset; +} + +template +int +ACE_Arg_Shifter_T::cur_arg_strncasecmp (const CHAR_TYPE *flag) +{ + // Check for a current argument + if (this->is_anything_left()) + { + size_t const flag_length = ACE_OS::strlen (flag); + + // Check for presence of the flag + if (ACE_OS::strncasecmp(this->temp_[current_index_], + flag, + flag_length) == 0) + { + if (ACE_OS::strlen(temp_[current_index_]) == + flag_length) + { + // match and lengths are equal + return 0; + } + else + { + // matches, with more info to boot! + size_t const remaining = ACE_OS::strspn + (this->temp_[current_index_] + flag_length, + ACE_TEXT (" ")) + flag_length; + return static_cast (remaining); + } + } + } + // failure + return -1; +} + +template +int +ACE_Arg_Shifter_T::consume_arg (int number) +{ + int retval = 0; + + // Stick knowns at the end of the vector (consumed). + if (this->is_anything_left() >= number) + { + for (int i = 0, j = this->back_ - (number - 1); + i < number; + ++i, ++j, ++this->current_index_) + this->argv_[j] = this->temp_[this->current_index_]; + + this->back_ -= number; + retval = 1; + } + + return retval; +} + +template +int +ACE_Arg_Shifter_T::ignore_arg (int number) +{ + int retval = 0; + + // Keep unknowns at the head of the vector. + if (this->is_anything_left () >= number) + { + for (int i = 0; + i < number; + i++, this->current_index_++, this->front_++) + this->argv_[this->front_] = this->temp_[this->current_index_]; + + retval = 1; + this->argc_ += number; + } + + return retval; +} + +template +int +ACE_Arg_Shifter_T::is_anything_left (void) const +{ + return this->total_size_ - this->current_index_; +} + +template +int +ACE_Arg_Shifter_T::is_option_next (void) const +{ + return this->is_anything_left () && + this->temp_[this->current_index_][0] == '-'; +} + +template +int +ACE_Arg_Shifter_T::is_parameter_next (void) const +{ + return this->is_anything_left () + && this->temp_[this->current_index_][0] != '-'; +} + +template +int +ACE_Arg_Shifter_T::num_ignored_args (void) const +{ + return this->front_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_ATOMIC_OP_T_CPP */ diff --git a/ACE/ace/Arg_Shifter.h b/ACE/ace/Arg_Shifter.h new file mode 100644 index 00000000000..409ffa03a88 --- /dev/null +++ b/ACE/ace/Arg_Shifter.h @@ -0,0 +1,221 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Arg_Shifter.h + * + * $Id$ + * + * @author Seth Widoff + */ +//============================================================================= + +#ifndef ACE_ARG_SHIFTER_H +#define ACE_ARG_SHIFTER_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Global_Macros.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Arg_Shifter_T + * + * @brief This ADT operates on a specified set of arguments (@a argv). + * As known arguments are scanned, they are shifted to the back of the + * @a argv vector, so deeper levels of argument parsing can locate the yet + * unprocessed arguments at the beginning of the vector. + * + * The @c ACE_Arg_Shifter copies the pointers of the @a argv vector + * into a temporary array. As the @c ACE_Arg_Shifter iterates over + * the copied vector, it places known arguments in the rear of the + * vector, leaving the unknown ones in the beginning. So, after having + * visited all the arguments in the temporary vector, @c ACE_Arg_Shifter + * has placed all the unknown arguments in their original order at + * the front of original @a argv. + */ +template +class ACE_Arg_Shifter_T +{ +public: + // = Initialization and termination methods. + /** + * Initialize the ACE_Arg_Shifter to the vector over which to + * iterate. Optionally, also provide the temporary array for + * use in shifting the arguments. If ACE_Arg_Shifter must allocate + * the temporary vector internally and dynamic allocation fails, the + * ACE_Arg_Shifter will set all indicators to end of the vector, + * forbidding iteration. Following iteration over @a argv, the + * @a argc value will be updated to contain the number of + * unconsumed arguments. + * @param argc The number of strings in @a argv. @a argc will be + * updated to reflect the number of unconsumed arguments. + * @param argv The argument vector to shift. The string pointers in + * the vector will be reordered to place the @a argc unconsumed + * arguments at the front of the vector. + * @param temp A vector of @c CHAR_TYPE pointers at least @a argc + * elements long. The vector will be used for argument shifting as + * the specified @a argv vector is consumed. The vector must not + * be modified while this object exists. If this argument is 0 + * (the default) the object will allocate and free the temporary + * vector transparently. + */ + ACE_Arg_Shifter_T (int& argc, + const CHAR_TYPE **argv, + const CHAR_TYPE **temp = 0); + + /// Same behavior as the preceding constructor, but without the + /// "const" qualifier. + ACE_Arg_Shifter_T (int& argc, + CHAR_TYPE **argv, + CHAR_TYPE **temp = 0); + + /// Destructor. + ~ACE_Arg_Shifter_T (void); + + /// Get the current head of the vector. + const CHAR_TYPE *get_current (void) const; + + /** + * If the @a flag matches the current_arg of arg shifter + * this method will attempt to return the associated + * parameter value + * + * Safe to call without checking that a current arg exists + * + * In the following examples, a pointer to the char* "value" is ret + * + * eg: main -foobar value, main -FooBar value + * main -FOOBARvalue + * + * all of the above will all match the @a flag == -FooBar + * and will return a char* to "value" + * + * main -foobar 4 would succeed and return a char* to "4" + * main -foobar -4 does not succeed (-4 is not a parameter) + * but instead, would return 0 + * + * 0 is returned: + * If the current argument does not match flag + * If there is no parameter found after a 'matched' flag + * + * If the flag is matched and the flag and paramter DO NOT RUN + * together, the flag is consumed, the parameter is returned, + * and the new current argument is the parameter value. + * ie '-foobarflag VALUE' leaves the new cur arg == "VALUE" + * + * If the flag is matched and the flag and parameter RUN + * together '-foobarflagVALUE', the flag is NOT consumed + * and the cur arg is left pointing to the entire flag/value pair + */ + const CHAR_TYPE *get_the_parameter (const CHAR_TYPE* flag); + + /** + * Check if the current argument matches (case insensitive) + * + * ------------------------------------------------------------ + * + * Case A: Perfect Match (case insensitive) + * 0 is returned. + * + * ie: when current_arg = "-foobar" or "-FOOBAR" or "-fooBAR" + * this->cur_arg_strncasecmp ("-FooBar); + * will return 0 + * + * ------------------------------------------------------------ + * + * Case B: Perfect Match (case insensitive) but the current_arg + * is longer than the flag. Returns a number equal to the index + * in the char* indicating the start of the extra characters + * + * ie: when current_arg = "-foobar98023" + * this->cur_arg_strncasecmp ("-FooBar); + * will return 7 + * + * Notice: this number will always be > 0 + * + * ------------------------------------------------------------ + * + * Case C: If neither of Case A or B is met (no match) + * then -1 is returned + */ + int cur_arg_strncasecmp (const CHAR_TYPE *flag); + + /// Consume @a number argument(s) by sticking them/it on the end of + /// the vector. + int consume_arg (int number = 1); + + /// Place @a number arguments in the same relative order ahead of the + /// known arguments in the vector. + int ignore_arg (int number = 1); + + /// Returns the number of args left to see in the vector. + int is_anything_left (void) const; + + /// Returns 1 if there's a next item in the vector and it begins with + /// '-'. + int is_option_next (void) const; + + /// Returns 1 if there's a next item in the vector and it doesn't + /// begin with '-'. + int is_parameter_next (void) const; + + /// Returns the number of irrelevant args seen. + int num_ignored_args (void) const; + +private: + /// Copy Constructor should not be used. + ACE_UNIMPLEMENTED_FUNC (ACE_Arg_Shifter_T (const ACE_Arg_Shifter_T&)) + + /// Assignment '=' operator should not be used. + ACE_UNIMPLEMENTED_FUNC (ACE_Arg_Shifter_T operator= (const ACE_Arg_Shifter_T&)) + + /// Refactor the constructor logic. + void init (void); + + /// The size of the argument vector. + int& argc_; + + /// The size of argv_. + int total_size_; + + /// The temporary array over which we traverse. + const CHAR_TYPE **temp_; + + /// The array in which the arguments are reordered. + const CHAR_TYPE **argv_; + + /// The element in we're currently examining. + int current_index_; + + /// The index of in which we'll stick the next unknown + /// argument. + int back_; + + /// The index of in which we'll stick the next known + /// argument. + int front_; +}; + +typedef ACE_Arg_Shifter_T ACE_Arg_Shifter; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Arg_Shifter.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Arg_Shifter.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" + +#endif /* ACE_ARG_SHIFTER_H */ diff --git a/ACE/ace/Argv_Type_Converter.cpp b/ACE/ace/Argv_Type_Converter.cpp new file mode 100644 index 00000000000..e16076818a4 --- /dev/null +++ b/ACE/ace/Argv_Type_Converter.cpp @@ -0,0 +1,204 @@ +// $Id$ + +#include "ace/Argv_Type_Converter.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Argv_Type_Converter.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID (ace, + Argv_Type_Converter, + "$Id$") + +#include "ace/OS_NS_string.h" +#include "ace/OS_Errno.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_USES_WCHAR) +ACE_Argv_Type_Converter::ACE_Argv_Type_Converter (int &argc, wchar_t** argv) + : saved_argc_ (argc), + char_argv_ (0), + wchar_argv_ (argv), + before_pass_argc_ (argc), + original_type_ (true), + wchar_passed_ (false), + char_passed_ (false) +{ + this->initialize (); + + for (int i = 0; i < argc; ++i) + this->char_argv_[i] = ACE_OS::strdup (ACE_TEXT_ALWAYS_CHAR (argv[i])); +} +#endif // ACE_USES_WCHAR + + +ACE_Argv_Type_Converter::ACE_Argv_Type_Converter (int &argc, char **argv) + : saved_argc_(argc), + char_argv_(argv) +#if defined (ACE_USES_WCHAR) + , wchar_argv_(0), + before_pass_argc_(argc), + original_type_(false), + wchar_passed_(false), + char_passed_(false) +{ + this->initialize(); + + for (int i = 0; i < argc; ++i) + this->wchar_argv_[i] = ACE_OS::strdup (ACE_TEXT_ANTI_TO_TCHAR (argv[i])); +} +#else +{ +} +#endif // ACE_USES_WCHAR + +ACE_Argv_Type_Converter::~ACE_Argv_Type_Converter (void) +{ +#if defined (ACE_USES_WCHAR) + // selectively delete the 'copy' of argv + if (this->original_type_) + { + // if original type is wchar_t + if (this->char_passed_) + this->align_wchar_with_char (); + + for (int i = 0; i < this->before_pass_argc_; ++i) + ACE_OS::free (this->char_argv_[i]); + + delete [] this->char_argv_; + } + else + { + // if original type is char + if (this->wchar_passed_) + this->align_char_with_wchar (); + + for (int i = 0; i < this->before_pass_argc_; ++i) + ACE_OS::free (this->wchar_argv_[i]); + + delete [] this->wchar_argv_; + } +#endif // ACE_USES_WCHAR +} + +#if defined (ACE_USES_WCHAR) +void +ACE_Argv_Type_Converter::initialize (void) +{ + if (this->original_type_) + { + // Make a copy of argv in 'char'. type Create one more argv entry + // than original argc for the NULL. + ACE_NEW (char_argv_, + char *[this->saved_argc_ + 1]); + this->char_argv_[saved_argc_] = 0; // last entry of argv is + // always a NULL + } + else + { + // make a copy of argv in 'wchar_t' type + ACE_NEW (this->wchar_argv_, + wchar_t*[this->saved_argc_ + 1]); + this->wchar_argv_[saved_argc_] = 0; + } +} + + +void +ACE_Argv_Type_Converter::align_char_with_wchar (void) +{ + int wchar_argv_index = 0; + wchar_t* match_argv = this->wchar_argv_[0]; // pick the initial entry + + while (wchar_argv_index < this->saved_argc_) + { + // if n'th entries of both argv lists are different + if (ACE_OS::strcmp (this->char_argv_[wchar_argv_index], + ACE_TEXT_ALWAYS_CHAR (match_argv)) != 0) + { + // loop through the wchar argv list entries that are after + // wchar_argv_index + for (int i = wchar_argv_index + 1; i < before_pass_argc_; ++i) + { + if (ACE_OS::strcmp (this->char_argv_[i], + ACE_TEXT_ALWAYS_CHAR (match_argv)) == 0) + { + // swap the pointers in the char argv list + char *temp = this->char_argv_[wchar_argv_index]; + this->char_argv_[wchar_argv_index] = this->char_argv_[i]; + this->char_argv_[i] = temp; + break; + } + } + } + + // move to the next wchar argv list entry + match_argv = this->wchar_argv_[++wchar_argv_index]; + } + + this->cleanup (); +} + +void +ACE_Argv_Type_Converter::align_wchar_with_char (void) +{ + int char_argv_index = 0; + char* match_argv = this->char_argv_[0]; // pick the initial entry + + while (char_argv_index < saved_argc_) + { + // if n'th entries of both argv lists are different + if (ACE_OS::strcmp ( + ACE_TEXT_ALWAYS_CHAR (this->wchar_argv_[char_argv_index]), + match_argv) != 0) + { + // loop through the wchar argv list entries that are after + // wchar_argv_index + for (int i = char_argv_index + 1; i < this->before_pass_argc_; ++i) + { + if (ACE_OS::strcmp ( + ACE_TEXT_ALWAYS_CHAR(this->wchar_argv_[i]), + match_argv) == 0) { + // swap the pointers in the char argv list + wchar_t* temp = this->wchar_argv_[char_argv_index]; + this->wchar_argv_[char_argv_index] = this->wchar_argv_[i]; + this->wchar_argv_[i] = temp; + break; + } + } + } + + // move to the next wchar argv list entry + match_argv = this->char_argv_[++char_argv_index]; + } + + this->cleanup(); +} + +void +ACE_Argv_Type_Converter::cleanup (void) +{ + for (int i = this->saved_argc_; i < this->before_pass_argc_; ++i) + { + // Check whether it's ours to delete. + if (original_type_) + { + ACE_OS::free (this->char_argv_[i]); + this->char_argv_[i] = 0; + } + else + { + ACE_OS::free (this->wchar_argv_[i]); + this->wchar_argv_[i] = 0; + } + } + + this->before_pass_argc_ = this->saved_argc_; + + this->wchar_passed_ = false; + this->char_passed_ = false; +} +#endif // ACE_USES_WCHAR + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Argv_Type_Converter.h b/ACE/ace/Argv_Type_Converter.h new file mode 100644 index 00000000000..205fa10c983 --- /dev/null +++ b/ACE/ace/Argv_Type_Converter.h @@ -0,0 +1,119 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Argv_Type_Converter.h + * + * $Id$ + * + * @author Si Mong Park + */ +//============================================================================= + +#ifndef ACE_ARGV_TYPE_CONVERTER_H +#define ACE_ARGV_TYPE_CONVERTER_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" +#include "ace/OS_Memory.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Argv_Type_Converter + * + * @brief To convert 'char' input/command line parameter to 'wchar_t'. + * + * This class is to convert 'char' type command line paramter to + * wide-character (wchar_t) format and stores the copy of it. + * This is useful for all classes that use 'char**' argv but cannot + * be converted into 'ACE_TCHAR**' version. + * Note that the converted data will be lost upon destruction, so + * classes should use this class as their data member. + */ +class ACE_Export ACE_Argv_Type_Converter +{ +public: + + ACE_Argv_Type_Converter (int &argc, char** argv); + +#if defined (ACE_USES_WCHAR) + ACE_Argv_Type_Converter (int &argc, wchar_t** argv); +#endif // ACE_USES_WCHAR + + ~ACE_Argv_Type_Converter (void); + + /// Returns the pointer of converted command line. + ACE_TCHAR** get_TCHAR_argv (void); + + /// Returns the pointer of ASCII (char) command line. + char** get_ASCII_argv (void); + + /// Returns the number of sub paramters (argc). + int& get_argc (void); + +private: + + /// Copy Constructor should not be used. + ACE_Argv_Type_Converter (const ACE_Argv_Type_Converter&); + + /// Assignment '=' operator should not be used. + ACE_Argv_Type_Converter operator= (const ACE_Argv_Type_Converter&); + +#if defined (ACE_USES_WCHAR) + + /// Perform common initialization for two Ctor's. + void initialize (void); + + /// Align all entries in the char type argv list with wchar_t type + /// argv list. + void align_char_with_wchar (void); + + /// Align all entries in the wchar_t type argv list with char type + /// argv list. + void align_wchar_with_char (void); + + /// Clean up removed (comsumed) argv entries and reset the pass flags. + void cleanup (void); +#endif // ACE_USES_WCHAR + +private: + /// Original number of input paramter, same as 'argc'. + int &saved_argc_; + + /// Data member pointer that contains converted argv in ACE_ANTI_TCHAR. + char** char_argv_; + +#if defined (ACE_USES_WCHAR) + /// Data member pointer that contains converted argv in ACE_TCHAR. + wchar_t** wchar_argv_; + + /// argc value before any argv has been passed. + int before_pass_argc_; + + /// false represents original argv passed in is char, and true + /// represents wchar_t. + bool const original_type_; + + /// true indicates wchar_t type argv has been passed. + bool wchar_passed_; + + /// true indicates char type argv has been passed. + bool char_passed_; +#endif /* ACE_USES_WCHAR */ +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Argv_Type_Converter.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* ACE_ARGV_TYPE_CONVERTER_H */ diff --git a/ACE/ace/Argv_Type_Converter.inl b/ACE/ace/Argv_Type_Converter.inl new file mode 100644 index 00000000000..5bb0bafd2db --- /dev/null +++ b/ACE/ace/Argv_Type_Converter.inl @@ -0,0 +1,44 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE ACE_TCHAR** +ACE_Argv_Type_Converter::get_TCHAR_argv (void) +{ +#if defined (ACE_USES_WCHAR) + if (this->char_passed_) + { + this->align_wchar_with_char (); + } + + this->wchar_passed_ = true; + return this->wchar_argv_; +#else + return this->char_argv_; +#endif // ACE_USES_WCHAR +} + +ACE_INLINE char** +ACE_Argv_Type_Converter::get_ASCII_argv (void) +{ +#if defined (ACE_USES_WCHAR) + if (this->wchar_passed_) + { + this->align_char_with_wchar (); + } + + this->char_passed_ = true; +#endif // ACE_USES_WCHAR + + return this->char_argv_; +} + +ACE_INLINE int& +ACE_Argv_Type_Converter::get_argc (void) +{ + return this->saved_argc_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Array.h b/ACE/ace/Array.h new file mode 100644 index 00000000000..c3159cd7a89 --- /dev/null +++ b/ACE/ace/Array.h @@ -0,0 +1,29 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Array.h + * + * $Id$ + * + * @deprecated + * + * @note This file has been deprecated and will soon go away. You + * should directly include "Containers_T.h" instead. + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_ARRAY_H +#define ACE_ARRAY_H +#include /**/ "ace/pre.h" + +#include "ace/Containers_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include /**/ "ace/post.h" +#endif /* ACE_ARRAY_H */ diff --git a/ACE/ace/Array_Base.cpp b/ACE/ace/Array_Base.cpp new file mode 100644 index 00000000000..280a12d8e17 --- /dev/null +++ b/ACE/ace/Array_Base.cpp @@ -0,0 +1,235 @@ +// $Id$ + +#ifndef ACE_ARRAY_BASE_CPP +#define ACE_ARRAY_BASE_CPP + +#include "ace/Array_Base.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (__ACE_INLINE__) +#include "ace/Array_Base.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/Malloc_Base.h" +#include "ace/os_include/os_errno.h" + +#include + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Dynamically initialize an array. +template +ACE_Array_Base::ACE_Array_Base (typename ACE_Array_Base::size_type size, + ACE_Allocator *alloc) + : max_size_ (size), + cur_size_ (size), + allocator_ (alloc) +{ + if (this->allocator_ == 0) + this->allocator_ = ACE_Allocator::instance (); + + if (size != 0) + { + ACE_ALLOCATOR (this->array_, + (T *) this->allocator_->malloc (size * sizeof (T))); + for (size_type i = 0; i < size; ++i) + new (&array_[i]) T; + } + else + this->array_ = 0; +} + +template +ACE_Array_Base::ACE_Array_Base (typename ACE_Array_Base::size_type size, + const T &default_value, + ACE_Allocator *alloc) + : max_size_ (size), + cur_size_ (size), + allocator_ (alloc) +{ + if (this->allocator_ == 0) + this->allocator_ = ACE_Allocator::instance (); + + if (size != 0) + { + ACE_ALLOCATOR (this->array_, + (T *) this->allocator_->malloc (size * sizeof (T))); + for (size_type i = 0; i < size; ++i) + new (&array_[i]) T (default_value); + } + else + this->array_ = 0; +} + +// The copy constructor (performs initialization). + +template +ACE_Array_Base::ACE_Array_Base (const ACE_Array_Base &s) + : max_size_ (s.size ()), + cur_size_ (s.size ()), + allocator_ (s.allocator_) +{ + if (this->allocator_ == 0) + this->allocator_ = ACE_Allocator::instance (); + + ACE_ALLOCATOR (this->array_, + (T *) this->allocator_->malloc (s.size () * sizeof (T))); + for (size_type i = 0; i < this->size (); ++i) + new (&this->array_[i]) T (s.array_[i]); +} + +// Assignment operator (performs assignment). + +template void +ACE_Array_Base::operator= (const ACE_Array_Base &s) +{ + // Check for "self-assignment". + + if (this != &s) + { + if (this->max_size_ < s.size ()) + { + // Need to reallocate memory. + + // Strongly exception-safe assignment. + // + // Note that we're swapping the allocators here, too. + // Should we? Probably. "*this" should be a duplicate of + // the "right hand side". + ACE_Array_Base tmp (s); + this->swap (tmp); + } + else + { + // Underlying array is large enough. No need to reallocate + // memory. + // + // "*this" still owns the memory for the underlying array. + // Do not swap out the allocator. + // + // @@ Why don't we just drop the explicit destructor and + // placement operator new() calls with a straight + // element-by-element assignment? Is the existing + // approach more efficient? + // -Ossama + + ACE_DES_ARRAY_NOFREE (this->array_, + s.size (), + T); + + this->cur_size_ = s.size (); + + for (size_type i = 0; i < this->size (); ++i) + new (&this->array_[i]) T (s.array_[i]); + } + } +} + +// Set an item in the array at location slot. + +template int +ACE_Array_Base::set (const T &new_item, + typename ACE_Array_Base::size_type slot) +{ + if (this->in_range (slot)) + { + this->array_[slot] = new_item; + return 0; + } + else + return -1; +} + +// Get an item in the array at location slot. + +template int +ACE_Array_Base::get (T &item, + typename ACE_Array_Base::size_type slot) const +{ + if (this->in_range (slot)) + { + // Copies the item. If you don't want to copy, use operator [] + // instead (but then you'll be responsible for range checking). + item = this->array_[slot]; + return 0; + } + else + return -1; +} + +template int +ACE_Array_Base::max_size (typename ACE_Array_Base::size_type new_size) +{ + if (new_size > this->max_size_) + { + T *tmp = 0; + + ACE_ALLOCATOR_RETURN (tmp, + (T *) this->allocator_->malloc (new_size * sizeof (T)), + -1); + for (size_type i = 0; i < this->cur_size_; ++i) + new (&tmp[i]) T (this->array_[i]); + + // Initialize the new portion of the array that exceeds the + // previously allocated section. + for (size_type j = this->cur_size_; j < new_size; ++j) + new (&tmp[j]) T; + + ACE_DES_ARRAY_FREE (this->array_, + this->max_size_, + this->allocator_->free, + T); + this->array_ = tmp; + this->max_size_ = new_size; + this->cur_size_ = new_size; + } + + return 0; +} + +template int +ACE_Array_Base::size (typename ACE_Array_Base::size_type new_size) +{ + int const r = this->max_size (new_size); + + if (r == 0) + this->cur_size_ = new_size; + + return r; +} + +template +void +ACE_Array_Base::swap (ACE_Array_Base & rhs) +{ + std::swap (this->max_size_ , rhs.max_size_); + std::swap (this->cur_size_ , rhs.cur_size_); + std::swap (this->array_ , rhs.array_); + std::swap (this->allocator_, rhs.allocator_); +} + +// **************************************************************** + +template int +ACE_Array_Iterator::next (T *&item) +{ + // ACE_TRACE ("ACE_Array_Iterator::next"); + + if (this->done ()) + { + item = 0; + return 0; + } + else + { + item = &array_[current_]; + return 1; + } +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_ARRAY_BASE_CPP */ diff --git a/ACE/ace/Array_Base.h b/ACE/ace/Array_Base.h new file mode 100644 index 00000000000..210bab6d46d --- /dev/null +++ b/ACE/ace/Array_Base.h @@ -0,0 +1,256 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Array_Base.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_ARRAY_BASE_H +#define ACE_ARRAY_BASE_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Global_Macros.h" +#include "ace/Malloc_Base.h" +#include /* For reverse_iterator adapters */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Forward declaration. +template class ACE_Array_Iterator; + +/** + * @class ACE_Array_Base + * + * @brief Implement a simple dynamic array + * + * This parametric class implements a simple dynamic array; + * resizing must be controlled by the user. No comparison or find + * operations are implemented. + */ +template +class ACE_Array_Base +{ +public: + + // Old/ACE-style traits. + typedef T TYPE; + typedef ACE_Array_Iterator ITERATOR; + + // STL-style typedefs/traits. + typedef T value_type; + typedef value_type * iterator; + typedef value_type const * const_iterator; + typedef value_type & reference; + typedef value_type const & const_reference; + typedef value_type * pointer; + typedef value_type const * const_pointer; + typedef ptrdiff_t difference_type; + typedef ACE_Allocator::size_type size_type; + + ACE_DECLARE_STL_REVERSE_ITERATORS + + // = Initialization and termination methods. + + /// Dynamically create an uninitialized array. + ACE_Array_Base (size_type size = 0, + ACE_Allocator * the_allocator = 0); + + /// Dynamically initialize the entire array to the . + ACE_Array_Base (size_type size, + T const & default_value, + ACE_Allocator * the_allocator = 0); + + /** + * The copy constructor performs initialization by making an exact + * copy of the contents of parameter , i.e., *this == s will + * return true. + */ + ACE_Array_Base (ACE_Array_Base const & s); + + /** + * Assignment operator performs an assignment by making an exact + * copy of the contents of parameter , i.e., *this == s will + * return true. Note that if the of is >= than + * we can copy it without reallocating. However, if + * is < we must delete the , + * reallocate a new , and then copy the contents of . + */ + void operator= (ACE_Array_Base const & s); + + /// Clean up the array (e.g., delete dynamically allocated memory). + ~ACE_Array_Base (void); + + // = Set/get methods. + + /// Set item in the array at location @a slot. Doesn't + /// perform range checking. + T & operator[] (size_type slot); + + /// Get item in the array at location @a slot. Doesn't + /// perform range checking. + T const & operator[] (size_type slot) const; + + /// Set an item in the array at location @a slot. Returns + /// -1 if @a slot is not in range, else returns 0. + int set (T const & new_item, size_type slot); + + /** + * Get an item in the array at location @a slot. Returns -1 if + * @a slot is not in range, else returns 0. Note that this function + * copies the item. If you want to avoid the copy, you can use + * the const operator [], but then you'll be responsible for range checking. + */ + int get (T & item, size_type slot) const; + + /// Returns the of the array. + size_type size (void) const; + + /** + * Changes the size of the array to match . + * It copies the old contents into the new array. + * Return -1 on failure. + */ + int size (size_type new_size); + + /// Returns the of the array. + size_type max_size (void) const; + + /** + * Changes the size of the array to match . + * It copies the old contents into the new array. + * Return -1 on failure. + * It does not affect new_size + */ + int max_size (size_type new_size); + + /** + * @name Forward Iterator Accessors + * + * Forward iterator accessors. + */ + //@{ + iterator begin (void); + iterator end (void); + const_iterator begin (void) const; + const_iterator end (void) const; + //@} + + /** + * @name Reverse Iterator Accessors + * + * Reverse iterator accessors. + */ + //@{ + reverse_iterator rbegin (void); + reverse_iterator rend (void); + const_reverse_iterator rbegin (void) const; + const_reverse_iterator rend (void) const; + //@} + + /// Swap the contents of this array with the given @a array in + /// an exception-safe manner. + void swap (ACE_Array_Base & array); + +protected: + + /// Returns 1 if @a slot is within range, i.e., 0 >= @a slot < + /// , else returns 0. + bool in_range (size_type slot) const; + + /// Maximum size of the array, i.e., the total number of elements + /// in . + size_type max_size_; + + /** + * Current size of the array. This starts out being == to + * . However, if we are assigned a smaller array, then + * will become less than . The purpose of + * keeping track of both sizes is to avoid reallocating memory if we + * don't have to. + */ + size_type cur_size_; + + /// Pointer to the array's storage buffer. + value_type * array_; + + /// Allocation strategy of the ACE_Array_Base. + ACE_Allocator * allocator_; + + friend class ACE_Array_Iterator; +}; + +// **************************************************************** + +/** + * @class ACE_Array_Iterator + * + * @brief Implement an iterator over an ACE_Array. + * + * This iterator is safe in the face of array element deletions. + * But it is NOT safe if the array is resized (via the ACE_Array + * assignment operator) during iteration. That would be very + * odd, and dangerous. + */ +template +class ACE_Array_Iterator +{ +public: + // = Initialization method. + ACE_Array_Iterator (ACE_Array_Base &); + + // = Iteration methods. + + /// Pass back the that hasn't been seen in the Array. + /// Returns 0 when all items have been seen, else 1. + int next (T *&next_item); + + /// Move forward by one element in the Array. Returns 0 when all the + /// items in the Array have been seen, else 1. + int advance (void); + + /// Returns 1 when all items have been seen, else 0. + int done (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// Pointer to the current item in the iteration. + size_t current_; + + /// Pointer to the Array we're iterating over. + ACE_Array_Base &array_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Array_Base.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Array_Base.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Array_Base.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" + +#endif /* ACE_ARRAY_BASE_H */ diff --git a/ACE/ace/Array_Base.inl b/ACE/ace/Array_Base.inl new file mode 100644 index 00000000000..849bcc18de2 --- /dev/null +++ b/ACE/ace/Array_Base.inl @@ -0,0 +1,146 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Clean up the array (e.g., delete dynamically allocated memory). +template ACE_INLINE +ACE_Array_Base::~ACE_Array_Base (void) +{ + ACE_DES_ARRAY_FREE (this->array_, + this->max_size_, + this->allocator_->free, + T); +} + +template +ACE_INLINE typename ACE_Array_Base::iterator +ACE_Array_Base::begin (void) +{ + return this->array_; +} + +template +ACE_INLINE typename ACE_Array_Base::iterator +ACE_Array_Base::end (void) +{ + return this->array_ + this->cur_size_; +} + +template +ACE_INLINE typename ACE_Array_Base::const_iterator +ACE_Array_Base::begin (void) const +{ + return this->array_; +} + +template +ACE_INLINE typename ACE_Array_Base::const_iterator +ACE_Array_Base::end (void) const +{ + return this->array_ + this->cur_size_; +} + +template +ACE_INLINE typename ACE_Array_Base::reverse_iterator +ACE_Array_Base::rbegin (void) +{ + return reverse_iterator (this->end ()); +} + +template +ACE_INLINE typename ACE_Array_Base::reverse_iterator +ACE_Array_Base::rend (void) +{ + return reverse_iterator (this->begin ()); +} + +template +ACE_INLINE typename ACE_Array_Base::const_reverse_iterator +ACE_Array_Base::rbegin (void) const +{ + return const_reverse_iterator (this->end ()); +} + +template +ACE_INLINE typename ACE_Array_Base::const_reverse_iterator +ACE_Array_Base::rend (void) const +{ + return const_reverse_iterator (this->begin ()); +} + +template ACE_INLINE typename ACE_Array_Base::size_type +ACE_Array_Base::size (void) const +{ + return this->cur_size_; +} + +template ACE_INLINE typename ACE_Array_Base::size_type +ACE_Array_Base::max_size (void) const +{ + return this->max_size_; +} + +template ACE_INLINE bool +ACE_Array_Base::in_range (typename ACE_Array_Base::size_type index) const +{ + return index < this->cur_size_; +} + +template ACE_INLINE T & +ACE_Array_Base::operator[] (typename ACE_Array_Base::size_type index) +{ + return this->array_[index]; +} + +template ACE_INLINE const T & +ACE_Array_Base::operator[] (typename ACE_Array_Base::size_type index) const +{ + return this->array_[index]; +} + +// **************************************************************** + +template ACE_INLINE void +ACE_Array_Iterator::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + // ACE_TRACE ("ACE_Array_Iterator::dump"); +#endif /* ACE_HAS_DUMP */ +} + +template ACE_INLINE +ACE_Array_Iterator::ACE_Array_Iterator (ACE_Array_Base &a) + : current_ (0), + array_ (a) +{ + // ACE_TRACE ("ACE_Array_Iterator::ACE_Array_Iterator"); +} + +template ACE_INLINE int +ACE_Array_Iterator::advance (void) +{ + // ACE_TRACE ("ACE_Array_Iterator::advance"); + + if (this->current_ < array_.size ()) + { + ++this->current_; + return 1; + } + else + { + // Already finished iterating. + return 0; + } +} + +template ACE_INLINE int +ACE_Array_Iterator::done (void) const +{ + ACE_TRACE ("ACE_Array_Iterator::done"); + + return this->current_ >= array_.size (); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Array_Map.cpp b/ACE/ace/Array_Map.cpp new file mode 100644 index 00000000000..62c6f553292 --- /dev/null +++ b/ACE/ace/Array_Map.cpp @@ -0,0 +1,299 @@ +// $Id$ + +#ifndef ACE_ARRAY_MAP_CPP +#define ACE_ARRAY_MAP_CPP + +#include "ace/Array_Map.h" + +#ifndef __ACE_INLINE__ +# include "ace/Array_Map.inl" +#endif /* !__ACE_INLINE__ */ + +#include "ace/checked_iterator.h" + +#include + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +#ifndef ACE_LACKS_MEMBER_TEMPLATES +template +template +ACE_Array_Map::ACE_Array_Map (InputIterator f, + InputIterator l) + : size_ (l - f) + , capacity_ (size_) + , nodes_ (size_ == 0 ? 0 : new value_type[size_]) +{ + (void) std::copy (f, + l, + ACE_make_checked_array_iterator (this->begin (), + this->size_)); + +// iterator n = this->begin (); + +// for (InputIterator i = f; i != l; ++i, ++n) +// *n = *i; +} +#else +template +ACE_Array_Map::ACE_Array_Map ( + typename ACE_Array_Map::const_iterator f, + typename ACE_Array_Map::const_iterator l) + : size_ (l - f) + , capacity_ (size_) + , nodes_ (size_ == 0 ? 0 : new value_type[size_]) +{ + (void) std::copy (f, + l, + ACE_make_checked_array_iterator (this->begin (), + this->size_)); + +// iterator n = this->begin (); + +// for (const_iterator i = f; i != l; ++i, ++n) +// *n = *i; +} +#endif /* !ACE_LACKS_MEMBER_TEMPLATES */ + +template +ACE_Array_Map::ACE_Array_Map ( + ACE_Array_Map const & map) + : size_ (map.size_) + , capacity_ (map.size_) + , nodes_ (size_ == 0 ? 0 : new value_type[size_]) +{ + std::copy (map.begin (), + map.end (), + ACE_make_checked_array_iterator (this->begin (), + this->size_)); + +// iterator f = map.begin (); +// iterator l = map.end (); +// iterator n = this->begin (); + +// for (iterator i = f; i != l; ++i, ++n) +// *n = *i; +} + +template +ACE_Array_Map::~ACE_Array_Map (void) +{ + delete[] this->nodes_; +} + +template +void +ACE_Array_Map::swap ( + ACE_Array_Map & map) +{ + std::swap (this->size_, map.size_); + std::swap (this->capacity_, map.capacity_); + std::swap (this->nodes_, map.nodes_); +} + +template +std::pair::iterator, bool> +ACE_Array_Map::insert ( + typename ACE_Array_Map::value_type const & x) +{ + // Linear insertion due to linear duplicate key search. + + bool inserted = false; + iterator i = this->find (x.first); + + if (i == this->end ()) + { + // Add the element to the array. + + size_type const old_size = this->size (); + this->grow (1); // Increase size by at least one. + + i = this->begin () + old_size; + *i = x; + + ++this->size_; + + inserted = true; + } + + return std::make_pair (i, inserted); +} + +#ifndef ACE_LACKS_MEMBER_TEMPLATES +template +template +void +ACE_Array_Map::insert (InputIterator f, InputIterator l) +{ + this->grow (l - f); // Preallocate storage. + + for (InputIterator i = f; i != l; ++i) + { + (void) this->insert (*i); + } +} +#else +template +void +ACE_Array_Map::insert ( + typename ACE_Array_Map::const_iterator f, + typename ACE_Array_Map::const_iterator l) +{ + this->grow (l - f); // Preallocate storage. + + for (const_iterator i = f; i != l; ++i) + { + (void) this->insert (*i); + } +} +#endif /* ACE_LACKS_MEMBER_TEMPLATES */ + +template +void +ACE_Array_Map::erase ( + typename ACE_Array_Map::iterator pos) +{ + iterator const first = this->begin (); + iterator const last = this->end (); + + if (pos >= first && pos < last) + { + if (pos != last - 1) + { + // Relocate the tail element to the location of the erased + // element to prevent introduction of "holes" in the + // underlying array. + *pos = *(last - 1); + } + + // Explicitly destroy the tail element by assigning a default + // constructed instance to it. Note that this also works for + // the case of a map of size 1. + *(last - 1) = value_type (); + + --this->size_; + } +} + +template +typename ACE_Array_Map::size_type +ACE_Array_Map::erase ( + typename ACE_Array_Map::key_type const & k) +{ + iterator pos = this->find (k); + + size_type const old_size = this->size_; + + this->erase (pos); + + return old_size - this->size_; +} + +template +void +ACE_Array_Map::erase ( + typename ACE_Array_Map::iterator first, + typename ACE_Array_Map::iterator last) +{ + if (this->begin () <= first && first < last && last < this->end ()) + for (iterator i = first; i != last; ++i) + this->erase (i); +} + +template +void +ACE_Array_Map::clear (void) +{ + this->size_ = 0; // No need to deallocate array nor destroy elements. +} + +template +typename ACE_Array_Map::iterator +ACE_Array_Map::find ( + typename ACE_Array_Map::key_type const & k) +{ + iterator const the_end = this->end (); + + EqualTo eq; + + for (iterator i = this->begin (); i != the_end; ++i) + if (eq (k, i->first)) + return i; + + return this->end (); +} + +template +typename ACE_Array_Map::const_iterator +ACE_Array_Map::find ( + typename ACE_Array_Map::key_type const & k) const +{ + const_iterator const the_end = this->end (); + + EqualTo eq; + + for (const_iterator i = this->begin (); i != the_end; ++i) + if (eq (k, i->first)) + return i; + + return this->end (); +} + +template +void +ACE_Array_Map::grow ( + typename ACE_Array_Map::size_type s) +{ + if (this->size () + s > this->capacity_) + { + // This implementation focuses more on static footprint than + // speed. + + // Strongly exception safe. + + ACE_Array_Map temp (this->size () + s); + + std::copy (this->begin (), + this->end (), + ACE_make_checked_array_iterator (temp.begin (), + temp.capacity_)); + + size_type const n = this->size (); // Do not swap out the size + // since we bypassed the + // temporary map's element + // counting code. + this->swap (temp); + + this->size_ = n; + } +} + +// --------------------------------------------------------------- + +template +bool +operator== (ACE_Array_Map const & lhs, + ACE_Array_Map const & rhs) +{ + // Do not include Array_Map capacity in comparison. It isn't useful + // in this case. + + return (lhs.size () == rhs.size () + && std::equal (lhs.begin (), + lhs.end (), + ACE_make_checked_array_iterator (rhs.begin (), + rhs.size ()))); +} + +template +bool +operator< (ACE_Array_Map const & lhs, + ACE_Array_Map const & rhs) +{ + return std::lexicographical_compare (lhs.begin (), lhs.end (), + rhs.begin (), rhs.end ()); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_ARRAY_MAP_CPP */ diff --git a/ACE/ace/Array_Map.h b/ACE/ace/Array_Map.h new file mode 100644 index 00000000000..cd0ae3efea6 --- /dev/null +++ b/ACE/ace/Array_Map.h @@ -0,0 +1,300 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Array_Map.h + * + * $Id$ + * + * Light weight array-based map with fast iteration but linear + * (i.e. O(n)) search times. STL-style interface is exposed. + * + * @note This class requires the STL generic algorithms and + * reverse_iterator adapter. + * + * @author Ossama Othman + */ +//============================================================================= + + +#ifndef ACE_ARRAY_MAP_H +#define ACE_ARRAY_MAP_H + +#include /**/ "ace/pre.h" + +#include "ace/config-lite.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include +#include +#include + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Array_Map + * + * @brief Light weight array-based map with fast iteration, but linear + * (i.e. O(n)) search times. + * + * Map implementation that focuses on small footprint and fast + * iteration. Search times are, however, linear (O(n)) meaning that + * this map isn't suitable for large data sets that will be searched + * in performance critical areas of code. Iteration over large data + * sets, however, is faster than linked list-based maps, for example, + * since spatial locality is maximized through the use of contiguous + * arrays as the underlying storage. + * @par + * An @c ACE_Array_Map is a unique associative container, meaning that + * duplicate values may not be added to the map. It is also pair + * associative (value_type is a std::pair<>). It is not a sorted + * container. + * @par + * An STL @c std::map -like interface is exposed by this class + * portability. Furthermore, this map's iterators are compatible with + * STL algorithms. + * @par + * Requirements and Performance Characteristics + * - Internal Structure + * Array + * - Duplicates allowed? + * No + * - Random access allowed? + * Yes + * - Search speed + * O(n) + * - Insert/replace speed + * O(n), can be longer if the map has to resize + * - Iterator still valid after change to container? + * No + * - Frees memory for removed elements? + * Yes + * - Items inserted by + * Value + * - Requirements for key type + * -# Default constructor + * -# Copy constructor + * -# operator= + * -# operator== + * - Requirements for object type + * -# Default constructor + * -# Copy constructor + * -# operator= + */ +template > +class ACE_Array_Map +{ +public: + + // STL-style typedefs/traits. + typedef Key key_type; + typedef Value data_type; + typedef std::pair value_type; + typedef value_type * iterator; + typedef value_type const * const_iterator; + typedef value_type & reference; + typedef value_type const & const_reference; + typedef value_type * pointer; + typedef value_type const * const_pointer; + typedef ptrdiff_t difference_type; + typedef size_t size_type; + + ACE_DECLARE_STL_REVERSE_ITERATORS + + /// Default Constructor. + /** + * Create an empty map with a preallocated buffer of size @a s. + */ + ACE_Array_Map (size_type s = 0); + +#ifndef ACE_LACKS_MEMBER_TEMPLATES + template + ACE_Array_Map (InputIterator f, InputIterator l); +#else + ACE_Array_Map (const_iterator f, const_iterator l); +#endif /* !ACE_LACKS_MEMBER_TEMPLATES */ + + ACE_Array_Map (ACE_Array_Map const & map); + ACE_Array_Map & operator= (ACE_Array_Map const & map); + + /// Destructor. + ~ACE_Array_Map (void); + + /** + * @name Forward Iterator Accessors + * + * Forward iterator accessors. + */ + //@{ + iterator begin (void); + iterator end (void); + const_iterator begin (void) const; + const_iterator end (void) const; + //@} + + /** + * @name Reverse Iterator Accessors + * + * Reverse iterator accessors. + */ + //@{ + reverse_iterator rbegin (void); + reverse_iterator rend (void); + const_reverse_iterator rbegin (void) const; + const_reverse_iterator rend (void) const; + //@} + + /// Return current size of map. + /** + * @return The number of elements in the map. + */ + size_type size (void) const; + + /// Maximum number of elements the map can hold. + size_type max_size (void) const; + + /// Return @c true if the map is empty, else @c false. + bool is_empty (void) const; // ACE style + + /** + * Return @c true if the map is empty, else @c false. We recommend + * using @c is_empty() instead since it's more consistent with the + * ACE container naming conventions. + */ + bool empty (void) const; // STL style + + /// Swap the contents of this map with the given @a map in an + /// exception-safe manner. + void swap (ACE_Array_Map & map); + + /// Insert the value @a x into the map. + /** + * STL-style map insertion method. + * + * @param x @c std::pair containing key and datum. + * + * @return @c std::pair::second will be @c false if the map already + * contains a value with the same key as @a x. + */ + std::pair insert (value_type const & x); + +#ifndef ACE_LACKS_MEMBER_TEMPLATES + /// Insert range of elements into map. + template + void insert (InputIterator f, InputIterator l); +#else + /// Insert range of elements into map. + void insert (const_iterator f, const_iterator l); +#endif /* ACE_LACKS_MEMBER_TEMPLATES */ + + /// Remove element at position @a pos from the map. + void erase (iterator pos); + + /// Remove element corresponding to key @a k from the map. + /** + * @return Number of elements that were erased. + */ + size_type erase (key_type const & k); + + /// Remove range of elements [@a first, @a last) from the map. + /** + * @note [@a first, @a last) must be valid range within the map. + */ + void erase (iterator first, iterator last); + + /// Clear contents of map. + /** + * @note This a constant time (O(1)) operation. + */ + void clear (void); + + /** + * @name Search Operations + * + * Search the map for data corresponding to key @a k. + */ + //@{ + /** + * @return @c end() if data corresponding to key @a k is not in the + * map. + */ + iterator find (key_type const & k); + + /** + * @return @c end() if data corresponding to key @a k is not in the + * map. + */ + const_iterator find (key_type const & k) const; + //@} + + /// Count the number of elements corresponding to key @a k. + /** + * @return In the case of this map, the count will always be one if + * such exists in the map. + */ + size_type count (key_type const & k); + + /// Convenience array index operator. + /** + * Array index operator that allows insertion and retrieval of + * elements using an array index syntax, such as: + * @par + * map["Foo"] = 12; + */ + data_type & operator[] (key_type const & k); + +private: + + /// Increase size of underlying buffer by @a s. + void grow (size_type s); + +private: + + /// Number of elements in the map. + size_type size_; + + /// Current size of underlying array. + /** + * @note @c capacity_ is always greater than or equal to @c size_; + */ + size_type capacity_; + + /// Underlying array containing keys and data. + value_type * nodes_; + +}; + +// -------------------------------------------------------------- + +/// @c ACE_Array_Map equality operator. +template +bool operator== (ACE_Array_Map const & lhs, + ACE_Array_Map const & rhs); + +/// @c ACE_Array_Map lexicographical comparison operator. +template +bool operator< (ACE_Array_Map const & lhs, + ACE_Array_Map const & rhs); + +// -------------------------------------------------------------- + +ACE_END_VERSIONED_NAMESPACE_DECL + +#ifdef __ACE_INLINE__ +# include "ace/Array_Map.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +# include "ace/Array_Map.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Array_Map.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" + +#endif /* ACE_ARRAY_MAP_H */ diff --git a/ACE/ace/Array_Map.inl b/ACE/ace/Array_Map.inl new file mode 100644 index 00000000000..86a26d3f3aa --- /dev/null +++ b/ACE/ace/Array_Map.inl @@ -0,0 +1,133 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +ACE_INLINE +ACE_Array_Map::ACE_Array_Map ( + typename ACE_Array_Map::size_type s) + : size_ (0) + , capacity_ (s) + , nodes_ (s == 0 ? 0 : new value_type[s]) +{ +} + +template +ACE_INLINE ACE_Array_Map & +ACE_Array_Map::operator= ( + ACE_Array_Map const & map) +{ + // Strongly exception-safe assignment. + + ACE_Array_Map temp (map); + this->swap (temp); + return *this; +} + +template +ACE_INLINE typename ACE_Array_Map::iterator +ACE_Array_Map::begin (void) +{ + return this->nodes_; +} + +template +ACE_INLINE typename ACE_Array_Map::iterator +ACE_Array_Map::end (void) +{ + return this->nodes_ + this->size_; +} + +template +ACE_INLINE typename ACE_Array_Map::const_iterator +ACE_Array_Map::begin (void) const +{ + return this->nodes_; +} + +template +ACE_INLINE typename ACE_Array_Map::const_iterator +ACE_Array_Map::end (void) const +{ + return this->nodes_ + this->size_; +} + +template +ACE_INLINE typename ACE_Array_Map::reverse_iterator +ACE_Array_Map::rbegin (void) +{ + return reverse_iterator (this->end ()); +} + +template +ACE_INLINE typename ACE_Array_Map::reverse_iterator +ACE_Array_Map::rend (void) +{ + return reverse_iterator (this->begin ()); +} + +template +ACE_INLINE typename ACE_Array_Map::const_reverse_iterator +ACE_Array_Map::rbegin (void) const +{ + return const_reverse_iterator (this->end ()); +} + +template +ACE_INLINE typename ACE_Array_Map::const_reverse_iterator +ACE_Array_Map::rend (void) const +{ + return const_reverse_iterator (this->begin ()); +} + +template +ACE_INLINE typename ACE_Array_Map::size_type +ACE_Array_Map::size (void) const +{ + return this->size_; +} + +template +ACE_INLINE typename ACE_Array_Map::size_type +ACE_Array_Map::max_size (void) const +{ + return size_type (-1) / sizeof (value_type); +} + +template +ACE_INLINE bool +ACE_Array_Map::is_empty (void) const +{ + return this->size_ == 0; +} + +// The following method is deprecated. + +template +ACE_INLINE bool +ACE_Array_Map::empty (void) const +{ + return this->is_empty (); +} + +template +ACE_INLINE typename ACE_Array_Map::size_type +ACE_Array_Map::count ( + typename ACE_Array_Map::key_type const & k) +{ + return + (this->find (k) == this->end () ? 0 : 1); // Only one datum per key. +} + +template +ACE_INLINE typename ACE_Array_Map::data_type & +ACE_Array_Map::operator[] ( + typename ACE_Array_Map::key_type const & k) +{ + iterator i = (this->insert (value_type (k, data_type ()))).first; + return (*i).second; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Assert.cpp b/ACE/ace/Assert.cpp new file mode 100644 index 00000000000..06e4f34d2ea --- /dev/null +++ b/ACE/ace/Assert.cpp @@ -0,0 +1,24 @@ +// $Id$ + +#include "ace/Assert.h" +#include "ace/Log_Msg.h" + +ACE_RCSID(ace, Assert, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// The following ASSERT macro is courtesy of Alexandre Karev +// . +void +__ace_assert(const char *file, int line, const ACE_TCHAR *expression) +{ + int error = ACE_Log_Msg::last_error_adapter (); + ACE_Log_Msg *log = ACE_Log_Msg::instance (); + + log->set (file, line, -1, error, log->restart (), + log->msg_ostream (), log->msg_callback ()); + + log->log (LM_ERROR, ACE_TEXT ("ACE_ASSERT: file %N, line %l assertion failed for '%s'.%a\n"), expression, -1); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Assert.h b/ACE/ace/Assert.h new file mode 100644 index 00000000000..70e9b0060c4 --- /dev/null +++ b/ACE/ace/Assert.h @@ -0,0 +1,38 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Assert.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_ASSERT_H +#define ACE_ASSERT_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#include /**/ "ace/config-all.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +ACE_Export void __ace_assert(const char *file, int line, const ACE_TCHAR *expression); +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_NDEBUG) +#define ACE_ASSERT(x) \ + (static_cast(0)) +#else +#define ACE_ASSERT(X) \ + ((X) \ + ? static_cast(0) \ + : ACE_VERSIONED_NAMESPACE_NAME::__ace_assert(__FILE__, __LINE__, ACE_TEXT_CHAR_TO_TCHAR (#X))) +#endif /* ACE_NDEBUG */ + +#include /**/ "ace/post.h" + +#endif /* ACE_ASSERT */ diff --git a/ACE/ace/Asynch_Acceptor.cpp b/ACE/ace/Asynch_Acceptor.cpp new file mode 100644 index 00000000000..7ded341609f --- /dev/null +++ b/ACE/ace/Asynch_Acceptor.cpp @@ -0,0 +1,516 @@ +/* -*- C++ -*- */ +// $Id$ + +#ifndef ACE_ASYNCH_ACCEPTOR_C +#define ACE_ASYNCH_ACCEPTOR_C + +#include "ace/Asynch_Acceptor.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_RCSID(ace, Asynch_Acceptor, "$Id$") + +#if defined (ACE_HAS_WIN32_OVERLAPPED_IO) || defined (ACE_HAS_AIO_CALLS) +// This only works on platforms that support async i/o. + +#include "ace/OS_Errno.h" +#include "ace/OS_Memory.h" +#include "ace/OS_NS_sys_socket.h" +#include "ace/Log_Msg.h" +#include "ace/Message_Block.h" +#include "ace/INET_Addr.h" +#include "ace/SOCK_Stream.h" +#include "ace/Sock_Connect.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +ACE_Asynch_Acceptor::ACE_Asynch_Acceptor (void) + : listen_handle_ (ACE_INVALID_HANDLE), + pass_addresses_ (false), + validate_new_connection_ (false), + reissue_accept_ (1), + bytes_to_read_ (0) +{ +} + +template +ACE_Asynch_Acceptor::~ACE_Asynch_Acceptor (void) +{ + // Close down the listen socket + if (this->listen_handle_ != ACE_INVALID_HANDLE) + { + ACE_OS::closesocket (this->listen_handle_); + this->listen_handle_ = ACE_INVALID_HANDLE; + } +} + +template int +ACE_Asynch_Acceptor::open (const ACE_INET_Addr &address, + size_t bytes_to_read, + bool pass_addresses, + int backlog, + int reuse_addr, + ACE_Proactor *proactor, + bool validate_new_connection, + int reissue_accept, + int number_of_initial_accepts) +{ + ACE_TRACE ("ACE_Asynch_Acceptor<>::open"); + + this->proactor (proactor); + this->pass_addresses_ = pass_addresses; + this->bytes_to_read_ = bytes_to_read; + this->validate_new_connection_ = validate_new_connection; + this->reissue_accept_ = reissue_accept; + this->addr_family_ = address.get_type (); + + // Create the listener socket + this->listen_handle_ = ACE_OS::socket (address.get_type (), SOCK_STREAM, 0); + if (this->listen_handle_ == ACE_INVALID_HANDLE) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_OS::socket")), + -1); + // Initialize the ACE_Asynch_Accept + if (this->asynch_accept_.open (*this, + this->listen_handle_, + 0, + this->proactor ()) == -1) + { + ACE_Errno_Guard g (errno); + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Asynch_Accept::open"))); + ACE_OS::closesocket (this->listen_handle_); + this->listen_handle_ = ACE_INVALID_HANDLE; + return -1; + } + + if (reuse_addr) + { + // Reuse the address + int one = 1; + if (ACE_OS::setsockopt (this->listen_handle_, + SOL_SOCKET, + SO_REUSEADDR, + (const char*) &one, + sizeof one) == -1) + { + ACE_Errno_Guard g (errno); + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_OS::setsockopt"))); + ACE_OS::closesocket (this->listen_handle_); + this->listen_handle_ = ACE_INVALID_HANDLE; + return -1; + } + } + + // If port is not specified, bind to any port. + static ACE_INET_Addr sa (ACE_sap_any_cast (const ACE_INET_Addr &)); + + if (address == sa && + ACE::bind_port (this->listen_handle_, + INADDR_ANY, + address.get_type()) == -1) + { + ACE_Errno_Guard g (errno); + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE::bind_port"))); + ACE_OS::closesocket (this->listen_handle_); + this->listen_handle_ = ACE_INVALID_HANDLE; + return -1; + } + + // Bind to the specified port. + if (ACE_OS::bind (this->listen_handle_, + reinterpret_cast (address.get_addr ()), + address.get_size ()) == -1) + { + ACE_Errno_Guard g (errno); + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_OS::bind"))); + ACE_OS::closesocket (this->listen_handle_); + this->listen_handle_ = ACE_INVALID_HANDLE; + return -1; + } + + // Start listening. + if (ACE_OS::listen (this->listen_handle_, backlog) == -1) + { + ACE_Errno_Guard g (errno); + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_OS::listen"))); + ACE_OS::closesocket (this->listen_handle_); + this->listen_handle_ = ACE_INVALID_HANDLE; + return -1; + } + + // For the number of . + if (number_of_initial_accepts == -1) + number_of_initial_accepts = backlog; + + for (int i = 0; i < number_of_initial_accepts; i++) + { + // Initiate accepts. + if (this->accept (bytes_to_read) == -1) + { + ACE_Errno_Guard g (errno); + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Asynch_Acceptor::accept"))); + ACE_OS::closesocket (this->listen_handle_); + this->listen_handle_ = ACE_INVALID_HANDLE; + return -1; + } + } + + return 0; +} + +template int +ACE_Asynch_Acceptor::set_handle (ACE_HANDLE listen_handle) +{ + ACE_TRACE ("ACE_Asynch_Acceptor<>::set_handle"); + + // Take ownership of the + this->listen_handle_ = listen_handle; + + // Reinitialize the ACE_Asynch_Accept + if (this->asynch_accept_.open (*this, + this->listen_handle_, + 0, + this->proactor ()) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Asynch_Accept::open")), + -1); + return 0; +} + +template ACE_HANDLE +ACE_Asynch_Acceptor::get_handle (void) const +{ + return this->listen_handle_; +} + +template int +ACE_Asynch_Acceptor::accept (size_t bytes_to_read, const void *act) +{ + ACE_TRACE ("ACE_Asynch_Acceptor<>::accept"); + + ACE_Message_Block *message_block = 0; + // The space_needed calculation is drive by needs of Windows. POSIX doesn't + // need to extra 16 bytes, but it doesn't hurt. + size_t space_needed = sizeof (sockaddr_in) + 16; +#if defined (ACE_HAS_IPV6) + if (PF_INET6 == this->addr_family_) + space_needed = sizeof (sockaddr_in6) + 16; +#endif /* ACE_HAS_IPV6 */ + space_needed = (2 * space_needed) + bytes_to_read; + + // Create a new message block big enough for the addresses and data + ACE_NEW_RETURN (message_block, + ACE_Message_Block (space_needed), + -1); + + // Initiate asynchronous accepts + if (this->asynch_accept_.accept (*message_block, + bytes_to_read, + ACE_INVALID_HANDLE, + act, + 0, + ACE_SIGRTMIN, + this->addr_family_) == -1) + { + // Cleanup on error + message_block->release (); + return -1; + } + return 0; +} + +template void +ACE_Asynch_Acceptor::handle_accept (const ACE_Asynch_Accept::Result &result) +{ + ACE_TRACE ("ACE_Asynch_Acceptor<>::handle_accept"); + + // Variable for error tracking + int error = 0; + + // If the asynchronous accept fails. + if (!result.success () || result.accept_handle () == ACE_INVALID_HANDLE) + { + error = 1; + } + +#if defined (ACE_WIN32) + // In order to use accept handle with other Window Sockets 1.1 + // functions, we call the setsockopt function with the + // SO_UPDATE_ACCEPT_CONTEXT option. This option initializes the + // socket so that other Windows Sockets routines to access the + // socket correctly. + if (!error && + ACE_OS::setsockopt (result.accept_handle (), + SOL_SOCKET, + SO_UPDATE_ACCEPT_CONTEXT, + (char *) &this->listen_handle_, + sizeof (this->listen_handle_)) == -1) + { + error = 1; + } +#endif /* ACE_WIN32 */ + + // Parse address. + ACE_INET_Addr local_address; + ACE_INET_Addr remote_address; + if (!error && + (this->validate_new_connection_ || this->pass_addresses_)) + // Parse the addresses. + this->parse_address (result, + remote_address, + local_address); + + // Validate remote address + if (!error && + this->validate_new_connection_ && + (this->validate_connection (result, remote_address, local_address) == -1)) + { + error = 1; + } + + HANDLER *new_handler = 0; + if (!error) + { + // The Template method + new_handler = this->make_handler (); + if (new_handler == 0) + { + error = 1; + } + } + + // If no errors + if (!error) + { + // Update the Proactor. + new_handler->proactor (this->proactor ()); + + // Pass the addresses + if (this->pass_addresses_) + new_handler->addresses (remote_address, + local_address); + + // Pass the ACT + if (result.act () != 0) + new_handler->act (result.act ()); + + // Set up the handler's new handle value + new_handler->handle (result.accept_handle ()); + + // Initiate the handler + new_handler->open (result.accept_handle (), + result.message_block ()); + } + + // On failure, no choice but to close the socket + if (error && + result.accept_handle() != ACE_INVALID_HANDLE ) + ACE_OS::closesocket (result.accept_handle ()); + + // Delete the dynamically allocated message_block + result.message_block ().release (); + + // Start off another asynchronous accept to keep the backlog going, + // unless we closed the listen socket already (from the destructor), + // or this callback is the result of a canceled/aborted accept. + if (this->should_reissue_accept () && + this->listen_handle_ != ACE_INVALID_HANDLE +#if defined (ACE_WIN32) + && result.error () != ERROR_OPERATION_ABORTED +#else + && result.error () != ECANCELED +#endif + ) + this->accept (this->bytes_to_read_); +} + +template int +ACE_Asynch_Acceptor::validate_connection + (const ACE_Asynch_Accept::Result& /* result */, + const ACE_INET_Addr& /* remote */, + const ACE_INET_Addr& /* local */) +{ + // Default implementation always validates the remote address. + return 0; +} + +template int +ACE_Asynch_Acceptor::cancel (void) +{ + ACE_TRACE ("ACE_Asynch_Acceptor<>::cancel"); + + // All I/O operations that are canceled will complete with the error + // ERROR_OPERATION_ABORTED. All completion notifications for the I/O + // operations will occur normally. +#if defined (ACE_HAS_WIN32_OVERLAPPED_IO) && \ + (defined (_MSC_VER) || defined (__BORLANDC__)) + return (int) ::CancelIo (this->listen_handle_); +#else + // Supported now + return this->asynch_accept_.cancel(); + +#endif /* defined (ACE_HAS_WIN32_OVERLAPPED_IO) && (defined (_MSC_VER)) || defined (__BORLANDC__)) */ +} + +template void +ACE_Asynch_Acceptor::parse_address (const + ACE_Asynch_Accept::Result &result, + ACE_INET_Addr &remote_address, + ACE_INET_Addr &local_address) +{ + ACE_TRACE ("ACE_Asynch_Acceptor<>::parse_address"); + +#if defined (ACE_HAS_AIO_CALLS) + + // Use an ACE_SOCK to get the addresses - it knows how to deal with + // ACE_INET_Addr objects and get IPv4/v6 addresses. + ACE_SOCK_Stream str (result.accept_handle ()); + str.get_local_addr (local_address); + str.get_remote_addr (remote_address); + +#elif defined (ACE_HAS_WINSOCK2) && (ACE_HAS_WINSOCK2 != 0) + + ACE_Message_Block &message_block = result.message_block (); + + sockaddr *local_addr = 0; + sockaddr *remote_addr = 0; + int local_size = 0; + int remote_size = 0; + // This matches setup in accept(). + size_t addr_size = sizeof (sockaddr_in) + 16; +#if defined (ACE_HAS_IPV6) + if (this->addr_family_ == PF_INET6) + addr_size = sizeof (sockaddr_in6) + 16; +#endif /* ACE_HAS_IPV6 */ + + ::GetAcceptExSockaddrs (message_block.rd_ptr (), + static_cast (this->bytes_to_read_), + static_cast (addr_size), + static_cast (addr_size), + &local_addr, + &local_size, + &remote_addr, + &remote_size); + + local_address.set (reinterpret_cast (local_addr), + local_size); + remote_address.set (reinterpret_cast (remote_addr), + remote_size); +#else + // just in case + errno = ENOTSUP; +#endif /* defined (ACE_HAS_WINSOCK2) && (ACE_HAS_WINSOCK2 != 0) */ + return; +} + +template ACE_HANDLE +ACE_Asynch_Acceptor::handle (void) const +{ + return this->listen_handle_; +} + +template void +ACE_Asynch_Acceptor::handle (ACE_HANDLE h) +{ + ACE_Handler::handle (h); +} + +template ACE_Asynch_Accept & +ACE_Asynch_Acceptor::asynch_accept (void) +{ + return this->asynch_accept_; +} + +template HANDLER * +ACE_Asynch_Acceptor::make_handler (void) +{ + // Default behavior + HANDLER *handler = 0; + ACE_NEW_RETURN (handler, + HANDLER, + 0); + return handler; +} + +/* static */ +template size_t +ACE_Asynch_Acceptor::address_size (void) +{ + return sizeof (sockaddr) + sizeof (sockaddr_in); +} + +template bool +ACE_Asynch_Acceptor::pass_addresses (void) const +{ + return this->pass_addresses_; +} + +template void +ACE_Asynch_Acceptor::pass_addresses (bool new_value) +{ + this->pass_addresses_ = new_value; +} + +template bool +ACE_Asynch_Acceptor::validate_new_connection (void) const +{ + return this->validate_new_connection_; +} + +template void +ACE_Asynch_Acceptor::validate_new_connection (bool new_value) +{ + this->validate_new_connection_ = new_value; +} + +template int +ACE_Asynch_Acceptor::reissue_accept (void) const +{ + return this->reissue_accept_; +} + +template void +ACE_Asynch_Acceptor::reissue_accept (int new_value) +{ + this->reissue_accept_ = new_value; +} + +template size_t +ACE_Asynch_Acceptor::bytes_to_read (void) const +{ + return this->bytes_to_read_; +} + +template void +ACE_Asynch_Acceptor::bytes_to_read (size_t new_value) +{ + this->bytes_to_read_ = new_value; +} + +template int +ACE_Asynch_Acceptor::should_reissue_accept (void) +{ + return this->reissue_accept_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_WIN32 || ACE_HAS_AIO_CALLS */ +#endif /* ACE_ASYNCH_ACCEPTOR_C */ diff --git a/ACE/ace/Asynch_Acceptor.h b/ACE/ace/Asynch_Acceptor.h new file mode 100644 index 00000000000..af7944e4b58 --- /dev/null +++ b/ACE/ace/Asynch_Acceptor.h @@ -0,0 +1,281 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Asynch_Acceptor.h + * + * $Id$ + * + * @author Irfan Pyarali (irfan@cs.wustl.edu) + */ +//============================================================================= + +#ifndef ACE_ASYNCH_ACCEPTOR_H +#define ACE_ASYNCH_ACCEPTOR_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_WIN32_OVERLAPPED_IO) || defined (ACE_HAS_AIO_CALLS) +// This only works on platforms that support async i/o. + +#include "ace/Default_Constants.h" +#include "ace/Asynch_IO.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Forward declarations +class ACE_Message_Block; +class ACE_INET_Addr; + +/** + * @class ACE_Asynch_Acceptor + * + * @brief This class is an example of the Acceptor Pattern. This class + * will accept new connections and create new HANDLER to handle + * the new connections. + * + * Unlike the ACE_Acceptor, however, this class is designed to + * be used asynchronously. + */ +template +class ACE_Asynch_Acceptor : public ACE_Handler +{ +public: + /// A do nothing constructor. + ACE_Asynch_Acceptor (void); + + /// Virtual destruction + virtual ~ACE_Asynch_Acceptor (void); + + /** + * @c open starts one or more asynchronous accept requests on a + * @a address. Each accept operation may optionally read an + * initial buffer from the new connection when accepted. + * + * @param address The address to listen/accept connections on. + * If the address does not specify a port, a random + * port is selected and bound. + * @param bytes_to_read Optional, specifies the maximum number of bytes + * to read with the accept. The buffer for the initial + * data is allocated internally and passed to the + * @c ACE_Service_Handler::open() hook method. It is + * legitimate only during the @c open() method and must + * be copied if required after @c open() returns. + * This pre-read function works only on Windows. + * @param pass_addresses Optional, a non-zero value indicates that + * the local and peer addresses should be passed to the + * associated @c ACE_Service_Handler::addresses() method + * after any call to @c validate_new_connection() and prior + * to the @c open() hook method call. + * @param backlog Optional, defaulting to @c ACE_DEFAULT_ASYNCH_BACKLOG (which + * can be adjusted in your platform's @c config.h file). + * Specifies the listening backlog for the listening socket. + * @param reuse_addr Optional, indicates whether the @c SO_REUSEADDR + * option is set on the listening socket or not. + * @param proactor Optional, pointer to the @c ACE_Proactor to use for + * demultiplexing asynchronous accepts. If 0, the + * process's singleton @c ACE_Proactor is used. + * @param validate_new_connection Optional, if true, this object's + * @c validate_connection() method is called after + * the accept completes, but before the service handler's + * @c open() hook method is called. If @c + * validate_connection() returns -1, the newly-accepted + * socket is immediately closed, and the @c addresses() + * method is not called. + * @param reissue_accept Optional, if non-zero (the default), a new + * asynchronous accept operation is started after each + * completion, whether the completion is for success or + * failure, and whether or not a successfully-accepted + * connection is subsequently refused. + * @param number_of_initial_accepts Optional, the number of asynchronous + * accepts that are started immediately. If -1 (the + * default), the value of @a backlog is used. + * + * @note On Windows, the peer address is only available at the time + * the connection is accepted. Therefore, if you require the peer + * address on Windows, do not rely on the + * @c ACE_SOCK::get_remote_addr() method - it won't work. You must + * supply a non-zero value for @a pass_addresses and obtain the + * peer address in the @c ACE_Service_Handler::addresses() method. + * + * @see ACE_INET_Addr + * @see ACE_Service_Handler + */ + virtual int open (const ACE_INET_Addr &address, + size_t bytes_to_read = 0, + bool pass_addresses = false, + int backlog = ACE_DEFAULT_ASYNCH_BACKLOG, + int reuse_addr = 1, + ACE_Proactor *proactor = 0, + bool validate_new_connection = false, + int reissue_accept = 1, + int number_of_initial_accepts = -1); + + /// Get the underlying handle. + virtual ACE_HANDLE get_handle (void) const; + + /** + * Set the underlying listen handle. It is the user's responsibility + * to make sure that the old listen handle has been appropriately + * closed and the all outstanding asynchronous operations have + * either completed or have been canceled on the old listen handle. + */ + virtual int set_handle (ACE_HANDLE handle); + + /// This initiates a new asynchronous accept operation. + /** + * You need only call this method if the @a reissue_accept argument + * passed to @c open() was 0. + */ + virtual int accept (size_t bytes_to_read = 0, const void *act = 0); + + /** + * Cancels all pending accepts operations issued by this object. + * + * @note On Windows, only accept operations initiated by the calling thread + * are canceled. + */ + virtual int cancel (void); + + /** + * Template method to validate peer before service is opened. + * This method is called after a new connection is accepted if the + * @a validate_connection argument to @c open() was non-zero or + * the @c validate_new_connection() method is called to turn this + * feature on. The default implementation returns 0. Users can + * reimplement this method to perform validation of the peer + * using it's address, running an authentication procedure (such as + * SSL) or anything else necessary or desireable. The return value + * from this method determines whether or not ACE will continue + * opening the service or abort the connection. + * + * @param result Result of the connection acceptance. + * @param remote Peer's address. + * @param local Local address connection was accepted at. + * + * @retval -1 ACE_Asynch_Acceptor will close the connection, and + * the service will not be opened. + * @retval 0 Service opening will proceeed. + */ + virtual int validate_connection (const ACE_Asynch_Accept::Result& result, + const ACE_INET_Addr &remote, + const ACE_INET_Addr& local); + + /** + * Template method for deciding whether to reissue accept. + * + * This hook method is called after each accept completes to decide if + * another accept should be initiated. If the method returns a non-zero + * value, another accept is initiated. + * + * The default implemenation always returns the value passed as the + * @c open() method's @a reissue_accept argument. That value can also + * be changed using the @c reissue_accept() method. + */ + virtual int should_reissue_accept (void); + + // + // These are low level tweaking methods + // + + /// Get flag that indicates if parsing and passing of addresses to + /// the service_handler is necessary. + virtual bool pass_addresses (void) const; + + /// Set flag that indicates if parsing and passing of addresses to + /// the service_handler is necessary. + virtual void pass_addresses (bool new_value); + + /// Get flag that indicates if address validation is required. + virtual bool validate_new_connection (void) const; + + /// Set flag that indicates if address validation is required. + virtual void validate_new_connection (bool new_value); + + /// Get flag that indicates if a new accept should be reissued when a accept + /// completes. + virtual int reissue_accept (void) const; + + /// Set flag that indicates if a new accept should be reissued when a accept + /// completes. + virtual void reissue_accept (int new_value); + + /// Get bytes to be read with the call. + virtual size_t bytes_to_read (void) const; + + /// Set bytes to be read with the call. + virtual void bytes_to_read (size_t new_value); + + /// @deprecated address_size() assumes IPv4 use, so is not always valid. + /// This method will be removed after ACE 5.5. Internal uses have been + /// changes to base needed sizes on the addr_family_ member. + static size_t address_size (void); + +protected: + + /// This is called when an outstanding accept completes. + virtual void handle_accept (const ACE_Asynch_Accept::Result &result); + + /// Return the listen handle. + ACE_HANDLE handle (void) const; + /// Set the listen handle. + void handle (ACE_HANDLE h); + + /// This parses the address from read buffer. + void parse_address (const ACE_Asynch_Accept::Result &result, + ACE_INET_Addr &remote_address, + ACE_INET_Addr &local_address); + + /// Return the asynch accept object. + ACE_Asynch_Accept &asynch_accept (void); + + /** + * This is the template method used to create new handler. + * Subclasses must overwrite this method if a new handler creation + * strategy is required. + */ + virtual HANDLER *make_handler (void); + +private: + /// Handle used to listen for new connections. + ACE_HANDLE listen_handle_; + + /// Asynch_Accept used to make life easier :-) + ACE_Asynch_Accept asynch_accept_; + + /// Flag that indicates if parsing of addresses is necessary. + bool pass_addresses_; + + /// Flag that indicates if address validation is required. + bool validate_new_connection_; + + /// Flag that indicates if a new accept should be reissued when a + /// accept completes. + int reissue_accept_; + + /// Bytes to be read with the call. + size_t bytes_to_read_; + + /// Address family used to open this object. Obtained from @a address passed + /// to @c open(). + int addr_family_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Asynch_Acceptor.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Asynch_Acceptor.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#endif /* ACE_HAS_WIN32_OVERLAPPED_IO || ACE_HAS_AIO_CALLS */ +#include /**/ "ace/post.h" +#endif /* ACE_ASYNCH_ACCEPTOR_H */ diff --git a/ACE/ace/Asynch_Connector.cpp b/ACE/ace/Asynch_Connector.cpp new file mode 100644 index 00000000000..fd61fcfdb8a --- /dev/null +++ b/ACE/ace/Asynch_Connector.cpp @@ -0,0 +1,296 @@ +// $Id$ + +#ifndef ACE_ASYNCH_CONNECTOR_CPP +#define ACE_ASYNCH_CONNECTOR_CPP + +#include "ace/Asynch_Connector.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if (defined (ACE_WIN32) || defined (ACE_HAS_AIO_CALLS)) && !defined(ACE_HAS_WINCE) +// This only works on platforms that support async I/O. + +#include "ace/OS_NS_sys_socket.h" +#include "ace/OS_Memory.h" +#include "ace/Flag_Manip.h" +#include "ace/Log_Msg.h" +#include "ace/Message_Block.h" +#include "ace/INET_Addr.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +ACE_Asynch_Connector::ACE_Asynch_Connector (void) + : pass_addresses_ (false), + validate_new_connection_ (false) +{ +} + +template +ACE_Asynch_Connector::~ACE_Asynch_Connector (void) +{ + //this->asynch_connect_.close (); +} + +template int +ACE_Asynch_Connector::open (bool pass_addresses, + ACE_Proactor *proactor, + bool validate_new_connection) +{ + this->proactor (proactor); + this->pass_addresses_ = pass_addresses; + this->validate_new_connection_ = validate_new_connection; + + // Initialize the ACE_Asynch_Connect + if (this->asynch_connect_.open (*this, + ACE_INVALID_HANDLE, + 0, + this->proactor ()) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Asynch_Connect::open")), + -1); + return 0; +} + +template int +ACE_Asynch_Connector::connect (const ACE_INET_Addr & remote_sap, + const ACE_INET_Addr & local_sap, + int reuse_addr, + const void *act) +{ + // Initiate asynchronous connect + if (this->asynch_connect_.connect (ACE_INVALID_HANDLE, + remote_sap, + local_sap, + reuse_addr, + act) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Asynch_Connect::connect")), + -1); + return 0; +} + +template void +ACE_Asynch_Connector::handle_connect (const ACE_Asynch_Connect::Result &result) +{ + // Variable for error tracking + int error = 0; + + // If the asynchronous connect fails. + if (!result.success () || + result.connect_handle () == ACE_INVALID_HANDLE) + { + error = 1; + } + + if (result.error () != 0) + { + error = 1; + } + + // set blocking mode + if (!error && + ACE::clr_flags + (result.connect_handle (), ACE_NONBLOCK) != 0) + { + error = 1; + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Asynch_Connector::handle_connect : Set blocking mode"))); + } + + // Parse the addresses. + ACE_INET_Addr local_address; + ACE_INET_Addr remote_address; + if (!error && + (this->validate_new_connection_ || this->pass_addresses_)) + this->parse_address (result, + remote_address, + local_address); + + // Call validate_connection even if there was an error - it's the only + // way the application can learn the connect disposition. + if (this->validate_new_connection_ && + this->validate_connection (result, remote_address, local_address) == -1) + { + error = 1; + } + + HANDLER *new_handler = 0; + if (!error) + { + // The Template method + new_handler = this->make_handler (); + if (new_handler == 0) + { + error = 1; + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Asynch_Connector::handle_connect : Making of new handler failed"))); + } + } + + // If no errors + if (!error) + { + // Update the Proactor. + new_handler->proactor (this->proactor ()); + + // Pass the addresses + if (this->pass_addresses_) + new_handler->addresses (remote_address, + local_address); + + // Pass the ACT + if (result.act () != 0) + new_handler->act (result.act ()); + + // Set up the handler's new handle value + new_handler->handle (result.connect_handle ()); + + ACE_Message_Block mb; + + // Initiate the handler with empty message block; + new_handler->open (result.connect_handle (), mb); + } + + // On failure, no choice but to close the socket + if (error && + result.connect_handle() != ACE_INVALID_HANDLE) + ACE_OS::closesocket (result.connect_handle ()); +} + +template int +ACE_Asynch_Connector::validate_connection + (const ACE_Asynch_Connect::Result &, + const ACE_INET_Addr & /* remote_address */, + const ACE_INET_Addr & /* local_address */) +{ + // Default implementation always validates the remote address. + return 0; +} + +template int +ACE_Asynch_Connector::cancel (void) +{ + return this->asynch_connect_.cancel (); +} + +template void +ACE_Asynch_Connector::parse_address (const ACE_Asynch_Connect::Result &result, + ACE_INET_Addr &remote_address, + ACE_INET_Addr &local_address) +{ +#if defined (ACE_HAS_IPV6) + // Getting the addresses. + sockaddr_in6 local_addr; + sockaddr_in6 remote_addr; +#else + // Getting the addresses. + sockaddr_in local_addr; + sockaddr_in remote_addr; +#endif /* ACE_HAS_IPV6 */ + + // Get the length. + int local_size = sizeof (local_addr); + int remote_size = sizeof (remote_addr); + + // Get the local address. + if (ACE_OS::getsockname (result.connect_handle (), + reinterpret_cast (&local_addr), + &local_size) < 0) + ACE_ERROR ((LM_ERROR, + ACE_TEXT("%p\n"), + ACE_TEXT("ACE_Asynch_Connector:: failed"))); + + // Get the remote address. + if (ACE_OS::getpeername (result.connect_handle (), + reinterpret_cast (&remote_addr), + &remote_size) < 0) + ACE_ERROR ((LM_ERROR, + ACE_TEXT("%p\n"), + ACE_TEXT("ACE_Asynch_Connector:: failed"))); + + // Set the addresses. + local_address.set (reinterpret_cast (&local_addr), + local_size); + remote_address.set (reinterpret_cast (&remote_addr), + remote_size); + +#if 0 + // @@ Just debugging. + char local_address_buf [BUFSIZ]; + char remote_address_buf [BUFSIZ]; + + if (local_address.addr_to_string (local_address_buf, + sizeof local_address_buf) == -1) + ACE_ERROR ((LM_ERROR, + "Error:%m:can't obtain local_address's address string")); + + ACE_DEBUG ((LM_DEBUG, + "ACE_Asynch_Connector::parse_address : " + "Local address %s\n", + local_address_buf)); + + if (remote_address.addr_to_string (remote_address_buf, + sizeof remote_address_buf) == -1) + ACE_ERROR ((LM_ERROR, + "Error:%m:can't obtain remote_address's address string")); + + ACE_DEBUG ((LM_DEBUG, + "ACE_Asynch_Connector::parse_address : " + "Remote address %s\n", + remote_address_buf)); +#endif /* 0 */ + + return; +} + + +template ACE_Asynch_Connect & +ACE_Asynch_Connector::asynch_connect (void) +{ + return this->asynch_connect_; +} + +template HANDLER * +ACE_Asynch_Connector::make_handler (void) +{ + // Default behavior + HANDLER *handler = 0; + ACE_NEW_RETURN (handler, HANDLER, 0); + return handler; +} + +template bool +ACE_Asynch_Connector::pass_addresses (void) const +{ + return this->pass_addresses_; +} + +template void +ACE_Asynch_Connector::pass_addresses (bool new_value) +{ + this->pass_addresses_ = new_value; +} + +template bool +ACE_Asynch_Connector::validate_new_connection (void) const +{ + return this->validate_new_connection_; +} + +template void +ACE_Asynch_Connector::validate_new_connection (bool new_value) +{ + this->validate_new_connection_ = new_value; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_WIN32 || ACE_HAS_AIO_CALLS */ +#endif /* ACE_ASYNCH_CONNECTOR_CPP */ diff --git a/ACE/ace/Asynch_Connector.h b/ACE/ace/Asynch_Connector.h new file mode 100644 index 00000000000..4e049584d77 --- /dev/null +++ b/ACE/ace/Asynch_Connector.h @@ -0,0 +1,171 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Asynch_Connector.h + * + * $Id$ + * + * @author Alexander Libman + */ +//============================================================================= + +#ifndef ACE_ASYNCH_CONNECTOR_H +#define ACE_ASYNCH_CONNECTOR_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if (defined (ACE_WIN32) || defined (ACE_HAS_AIO_CALLS)) && !defined(ACE_HAS_WINCE) +// This only works on platforms that support async i/o. + +#include "ace/Asynch_IO.h" +#include "ace/INET_Addr.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Forward declarations +class ACE_Message_Block; + +/** + * @class ACE_Asynch_Connector + * + * @brief This class is an example of the Connector pattern. This class + * will establish new connections and create new HANDLER objects to handle + * the new connections. + * + * Unlike the ACE_Connector, however, this class is designed to + * be used asynchronously with the ACE Proactor framework. + */ + +template +class ACE_Asynch_Connector : public ACE_Handler +{ +public: + /// A do nothing constructor. + ACE_Asynch_Connector (void); + + /// Virtual destruction + virtual ~ACE_Asynch_Connector (void); + + /** + * This opens asynch connector + */ + virtual int open (bool pass_addresses = false, + ACE_Proactor *proactor = 0, + bool validate_new_connection = true); + + /// This initiates a new asynchronous connect + virtual int connect (const ACE_INET_Addr &remote_sap, + const ACE_INET_Addr &local_sap = + (const ACE_INET_Addr &)ACE_Addr::sap_any, + int reuse_addr = 1, + const void *act = 0); + + /** + * This cancels all pending accepts operations that were issued by + * the calling thread. + * + * @note On Windows, this method does not cancel connect operations + * issued by other threads. + * + * @note On POSIX, delegates cancelation to ACE_POSIX_Asynch_Connect. + */ + virtual int cancel (void); + + + /** + * Template method to validate peer before service is opened. + * This method is called when the connection attempt completes, + * whether it succeeded or failed, if the @a validate_connection + * argument to @c open() was non-zero or the @c validate_new_connection() + * method is called to turn this feature on. The default implementation + * returns 0. Users can (and probably should) reimplement this method + * to learn about the success or failure of the connection attempt. + * If the connection completed successfully, this method can be used to + * perform validation of the peer using it's address, running an + * authentication procedure (such as SSL) or anything else necessary or + * desireable. The return value from this method determines whether or + * not ACE will continue opening the service or abort the connection. + * + * @param result Result of the connection acceptance. Use + * result.success() to determine success or failure of + * the connection attempt. + * @param remote Peer's address. If the connection failed, this object + * is undefined. + * @param local Local address connection was completed from. If the + * connection failed, this object is undefined. + * + * @retval -1 ACE_Asynch_Connector will close the connection, and + * the service will not be opened. + * @retval 0 Service opening will proceeed. + * @return Return value is ignored if the connection attempt failed. + */ + virtual int validate_connection (const ACE_Asynch_Connect::Result& result, + const ACE_INET_Addr &remote, + const ACE_INET_Addr& local); + + // + // These are low level tweaking methods + // + + /// Set and get flag that indicates if parsing and passing of + /// addresses to the service_handler is necessary. + virtual bool pass_addresses (void) const; + virtual void pass_addresses (bool new_value); + + /// Set and get flag that indicates if address validation is + /// required. + virtual bool validate_new_connection (void) const; + virtual void validate_new_connection (bool new_value); + +protected: + + /// This is called when an outstanding accept completes. + virtual void handle_connect (const ACE_Asynch_Connect::Result &result); + + + /// This parses the address from read buffer. + void parse_address (const ACE_Asynch_Connect::Result &result, + ACE_INET_Addr &remote_address, + ACE_INET_Addr &local_address); + + /// Return the asynch Connect object. + ACE_Asynch_Connect & asynch_connect (void); + + /** + * This is the template method used to create new handler. + * Subclasses must overwrite this method if a new handler creation + * strategy is required. + */ + virtual HANDLER *make_handler (void); + +private: + + /// Asynch_Connect used to make life easier :-) + ACE_Asynch_Connect asynch_connect_; + + /// Flag that indicates if parsing of addresses is necessary. + bool pass_addresses_; + + /// Flag that indicates if address validation is required. + bool validate_new_connection_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Asynch_Connector.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Asynch_Connector.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#endif /* ACE_WIN32 || ACE_HAS_AIO_CALLS */ +#include /**/ "ace/post.h" +#endif /* ACE_ASYNCH_CONNECTOR_H */ diff --git a/ACE/ace/Asynch_IO.cpp b/ACE/ace/Asynch_IO.cpp new file mode 100644 index 00000000000..3ebf11eff5c --- /dev/null +++ b/ACE/ace/Asynch_IO.cpp @@ -0,0 +1,1411 @@ +// $Id$ + +#include "ace/Asynch_IO.h" + +ACE_RCSID(ace, Asynch_IO, "$Id$") + +#if defined (ACE_HAS_WIN32_OVERLAPPED_IO) || defined (ACE_HAS_AIO_CALLS) +// This only works on platforms with Asynchronous IO + +#include "ace/Proactor.h" +#include "ace/Message_Block.h" +#include "ace/INET_Addr.h" +#include "ace/Asynch_IO_Impl.h" +#include "ace/os_include/os_errno.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +size_t +ACE_Asynch_Result::bytes_transferred (void) const +{ + return this->implementation ()->bytes_transferred (); +} + +const void * +ACE_Asynch_Result::act (void) const +{ + return this->implementation ()->act (); +} + +int +ACE_Asynch_Result::success (void) const +{ + return this->implementation ()->success (); +} + +const void * +ACE_Asynch_Result::completion_key (void) const +{ + return this->implementation ()->completion_key (); +} + +unsigned long +ACE_Asynch_Result::error (void) const +{ + return this->implementation ()->error (); +} + +ACE_HANDLE +ACE_Asynch_Result::event (void) const +{ + return this->implementation ()->event (); +} + +unsigned long +ACE_Asynch_Result::offset (void) const +{ + return this->implementation ()->offset (); +} + +unsigned long +ACE_Asynch_Result::offset_high (void) const +{ + return this->implementation ()->offset_high (); +} + +int +ACE_Asynch_Result::priority (void) const +{ + return this->implementation ()->priority (); +} + +int +ACE_Asynch_Result::signal_number (void) const +{ + return this->implementation ()->signal_number (); +} + +ACE_Asynch_Result::ACE_Asynch_Result (ACE_Asynch_Result_Impl *implementation) + : implementation_ (implementation) +{ +} + +ACE_Asynch_Result::~ACE_Asynch_Result (void) +{ + // Proactor deletes the implementation when the finishes. +} + +ACE_Asynch_Result_Impl * +ACE_Asynch_Result::implementation (void) const +{ + return this->implementation_; +} + +// ********************************************************************* + +int +ACE_Asynch_Operation::open (ACE_Handler &handler, + ACE_HANDLE handle, + const void *completion_key, + ACE_Proactor *proactor) +{ + return this->implementation ()->open (handler.proxy (), + handle, + completion_key, + proactor); +} + +int +ACE_Asynch_Operation::cancel (void) +{ + if (0 == this->implementation ()) + { + errno = EFAULT; + return -1; + } + return this->implementation ()->cancel (); +} + +ACE_Proactor * +ACE_Asynch_Operation::proactor (void) const +{ + if (0 == this->implementation ()) + { + errno = EFAULT; + return 0; + } + return this->implementation ()->proactor (); +} + +ACE_Asynch_Operation::ACE_Asynch_Operation (void) +{ +} + +ACE_Asynch_Operation::~ACE_Asynch_Operation (void) +{ +} + +ACE_Proactor * +ACE_Asynch_Operation::get_proactor (ACE_Proactor *user_proactor, + ACE_Handler &handler) const +{ + if (user_proactor == 0) + { + // Grab the singleton proactor if proactor> is zero + user_proactor = handler.proactor (); + if (user_proactor == 0) + user_proactor = ACE_Proactor::instance (); + } + + return user_proactor; +} + +// ************************************************************ + +ACE_Asynch_Read_Stream::ACE_Asynch_Read_Stream (void) + : implementation_ (0) +{ +} + +ACE_Asynch_Read_Stream::~ACE_Asynch_Read_Stream (void) +{ + // Delete the implementation. + delete this->implementation_; + this->implementation_ = 0; +} + +int +ACE_Asynch_Read_Stream::open (ACE_Handler &handler, + ACE_HANDLE handle, + const void *completion_key, + ACE_Proactor *proactor) +{ + // Get a proactor for/from the user. + proactor = this->get_proactor (proactor, handler); + + // Now let us get the implementation initialized. + if ((this->implementation_ = proactor->create_asynch_read_stream ()) == 0) + return -1; + + // Call the method of the base class. + return ACE_Asynch_Operation::open (handler, + handle, + completion_key, + proactor); +} + +int +ACE_Asynch_Read_Stream::read (ACE_Message_Block &message_block, + size_t bytes_to_read, + const void *act, + int priority, + int signal_number) +{ + if (0 == this->implementation_) + { + errno = EFAULT; + return -1; + } + return this->implementation_->read (message_block, + bytes_to_read, + act, + priority, + signal_number); +} + +#if defined (ACE_HAS_WIN32_OVERLAPPED_IO) +int +ACE_Asynch_Read_Stream::readv (ACE_Message_Block &message_block, + size_t bytes_to_read, + const void *act, + int priority, + int signal_number) +{ + if (0 == this->implementation_) + { + errno = EFAULT; + return -1; + } + return this->implementation_->readv (message_block, + bytes_to_read, + act, + priority, + signal_number); +} +#endif /* ACE_HAS_WIN32_OVERLAPPED_IO */ + +ACE_Asynch_Operation_Impl * +ACE_Asynch_Read_Stream::implementation (void) const +{ + return this->implementation_; +} + +// ************************************************************ + +size_t +ACE_Asynch_Read_Stream::Result::bytes_to_read (void) const +{ + return this->implementation ()->bytes_to_read (); +} + +ACE_Message_Block & +ACE_Asynch_Read_Stream::Result::message_block (void) const +{ + return this->implementation ()->message_block (); +} + +ACE_HANDLE +ACE_Asynch_Read_Stream::Result::handle (void) const +{ + return this->implementation ()->handle (); +} + +ACE_Asynch_Read_Stream::Result::Result (ACE_Asynch_Read_Stream_Result_Impl *implementation) + : ACE_Asynch_Result (implementation), + implementation_ (implementation) +{ +} + +ACE_Asynch_Read_Stream::Result::~Result (void) +{ + // Proactor will delete the implementation after is + // finished. +} + +ACE_Asynch_Read_Stream_Result_Impl * +ACE_Asynch_Read_Stream::Result::implementation (void) const +{ + return this->implementation_; +} + +// *************************************************** + +ACE_Asynch_Write_Stream::ACE_Asynch_Write_Stream (void) + : implementation_ (0) +{ +} + +ACE_Asynch_Write_Stream::~ACE_Asynch_Write_Stream (void) +{ + // Delete the implementation. + delete this->implementation_; + this->implementation_ = 0; +} + +int +ACE_Asynch_Write_Stream::open (ACE_Handler &handler, + ACE_HANDLE handle, + const void *completion_key, + ACE_Proactor *proactor) +{ + // Get a proactor for/from the user. + proactor = this->get_proactor (proactor, handler); + + // Now let us get the implementation initialized. + if ((this->implementation_ = proactor->create_asynch_write_stream ()) == 0) + return -1; + + // Call the method of the base class. + return ACE_Asynch_Operation::open (handler, + handle, + completion_key, + proactor); +} + +int +ACE_Asynch_Write_Stream::write (ACE_Message_Block &message_block, + size_t bytes_to_write, + const void *act, + int priority, + int signal_number) +{ + if (0 == this->implementation_) + { + errno = EFAULT; + return -1; + } + return this->implementation_->write (message_block, + bytes_to_write, + act, + priority, + signal_number); +} + +#if defined (ACE_HAS_WIN32_OVERLAPPED_IO) +int +ACE_Asynch_Write_Stream::writev (ACE_Message_Block &message_block, + size_t bytes_to_write, + const void *act, + int priority, + int signal_number) +{ + if (0 == this->implementation_) + { + errno = EFAULT; + return -1; + } + return this->implementation_->writev (message_block, + bytes_to_write, + act, + priority, + signal_number); +} +#endif /* ACE_HAS_WIN32_OVERLAPPED_IO */ + +ACE_Asynch_Operation_Impl * +ACE_Asynch_Write_Stream::implementation (void) const +{ + return this->implementation_; +} + +// ************************************************************ + +size_t +ACE_Asynch_Write_Stream::Result::bytes_to_write (void) const +{ + return this->implementation ()->bytes_to_write (); +} + +ACE_Message_Block & +ACE_Asynch_Write_Stream::Result::message_block (void) const +{ + return this->implementation ()->message_block (); +} + +ACE_HANDLE +ACE_Asynch_Write_Stream::Result::handle (void) const +{ + return this->implementation ()->handle (); +} + +ACE_Asynch_Write_Stream::Result::Result (ACE_Asynch_Write_Stream_Result_Impl *implementation) + : ACE_Asynch_Result (implementation), + implementation_ (implementation) +{ +} + +ACE_Asynch_Write_Stream::Result::~Result (void) +{ + // Proactor will delte the implementation when the call + // finishes. +} + +ACE_Asynch_Write_Stream_Result_Impl * +ACE_Asynch_Write_Stream::Result::implementation (void) const +{ + return this->implementation_; +} + +// ************************************************************ + +ACE_Asynch_Read_File::ACE_Asynch_Read_File (void) + : implementation_ (0) +{ +} + +ACE_Asynch_Read_File::~ACE_Asynch_Read_File (void) +{ + // Delete the implementation. + delete this->implementation_; + this->implementation_ = 0; +} + +int +ACE_Asynch_Read_File::open (ACE_Handler &handler, + ACE_HANDLE handle, + const void *completion_key, + ACE_Proactor *proactor) +{ + // Get a proactor for/from the user. + proactor = this->get_proactor (proactor, handler); + + // Now let us get the implementation initialized. + if ((this->implementation_ = proactor->create_asynch_read_file ()) == 0) + return -1; + + // Call the method of the base class. + return ACE_Asynch_Operation::open (handler, + handle, + completion_key, + proactor); +} + +int +ACE_Asynch_Read_File::read (ACE_Message_Block &message_block, + size_t bytes_to_read, + unsigned long offset, + unsigned long offset_high, + const void *act, + int priority, + int signal_number) +{ + if (0 == this->implementation_) + { + errno = EFAULT; + return -1; + } + return this->implementation_->read (message_block, + bytes_to_read, + offset, + offset_high, + act, + priority, + signal_number); +} + +#if (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) +int +ACE_Asynch_Read_File::readv (ACE_Message_Block &message_block, + size_t bytes_to_read, + unsigned long offset, + unsigned long offset_high, + const void *act, + int priority, + int signal_number) +{ + if (0 == this->implementation_) + { + errno = EFAULT; + return -1; + } + return this->implementation_->readv (message_block, + bytes_to_read, + offset, + offset_high, + act, + priority, + signal_number); +} +#endif /* (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) */ + +ACE_Asynch_Operation_Impl * +ACE_Asynch_Read_File::implementation (void) const +{ + return this->implementation_; +} + +// ************************************************************ + +ACE_Asynch_Read_File::Result::Result (ACE_Asynch_Read_File_Result_Impl *implementation) + : ACE_Asynch_Read_Stream::Result (implementation), + implementation_ (implementation) +{ +} + +ACE_Asynch_Read_File::Result::~Result (void) +{ + // Proactor will delete the implementation when call + // completes. +} + +ACE_Asynch_Read_File_Result_Impl * +ACE_Asynch_Read_File::Result::implementation (void) const +{ + return this->implementation_; +} + +// ************************************************************ + +ACE_Asynch_Write_File::ACE_Asynch_Write_File (void) + : implementation_ (0) +{ +} + +ACE_Asynch_Write_File::~ACE_Asynch_Write_File (void) +{ + // Delete the implementation. + delete this->implementation_; + this->implementation_ = 0; +} + +int +ACE_Asynch_Write_File::open (ACE_Handler &handler, + ACE_HANDLE handle, + const void *completion_key, + ACE_Proactor *proactor) +{ + // Get a proactor for/from the user. + proactor = this->get_proactor (proactor, handler); + + // Now let us get the implementation initialized. + if ((this->implementation_ = proactor->create_asynch_write_file ()) == 0) + return -1; + + // Call the method of the base class. + return ACE_Asynch_Operation::open (handler, + handle, + completion_key, + proactor); +} + +int +ACE_Asynch_Write_File::write (ACE_Message_Block &message_block, + size_t bytes_to_write, + unsigned long offset, + unsigned long offset_high, + const void *act, + int priority, + int signal_number) +{ + if (0 == this->implementation_) + { + errno = EFAULT; + return -1; + } + return this->implementation_->write (message_block, + bytes_to_write, + offset, + offset_high, + act, + priority, + signal_number); +} + +#if (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) +int +ACE_Asynch_Write_File::writev (ACE_Message_Block &message_block, + size_t bytes_to_write, + unsigned long offset, + unsigned long offset_high, + const void *act, + int priority, + int signal_number) +{ + if (0 == this->implementation_) + { + errno = EFAULT; + return -1; + } + return this->implementation_->writev (message_block, + bytes_to_write, + offset, + offset_high, + act, + priority, + signal_number); +} +#endif /* (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) */ + +ACE_Asynch_Operation_Impl * +ACE_Asynch_Write_File::implementation (void) const +{ + return this->implementation_; +} + +// ************************************************************ + +ACE_Asynch_Write_File::Result::Result (ACE_Asynch_Write_File_Result_Impl *implementation) + : ACE_Asynch_Write_Stream::Result (implementation), + implementation_ (implementation) +{ +} + +ACE_Asynch_Write_File::Result::~Result (void) +{ + // Proactor will delete the implementation when the call + // completes. +} + +ACE_Asynch_Write_File_Result_Impl * +ACE_Asynch_Write_File::Result::implementation (void) const +{ + return this->implementation_; +} + +// ********************************************************************* + +ACE_Asynch_Accept::ACE_Asynch_Accept (void) + : implementation_ (0) +{ +} + +ACE_Asynch_Accept::~ACE_Asynch_Accept (void) +{ + // Delete the implementation. + delete this->implementation_; + this->implementation_ = 0; +} + +int +ACE_Asynch_Accept::open (ACE_Handler &handler, + ACE_HANDLE handle, + const void *completion_key, + ACE_Proactor *proactor) +{ + // Get a proactor for/from the user. + proactor = this->get_proactor (proactor, handler); + + // Now let us get the implementation initialized. + if ((this->implementation_ = proactor->create_asynch_accept ()) == 0) + return -1; + + // Call the method of the base class. + return ACE_Asynch_Operation::open (handler, + handle, + completion_key, + proactor); +} + +int +ACE_Asynch_Accept::accept (ACE_Message_Block &message_block, + size_t bytes_to_read, + ACE_HANDLE accept_handle, + const void *act, + int priority, + int signal_number, + int addr_family) +{ + if (0 == this->implementation_) + { + errno = EFAULT; + return -1; + } + return this->implementation_->accept (message_block, + bytes_to_read, + accept_handle, + act, + priority, + signal_number, + addr_family); +} + +ACE_Asynch_Operation_Impl * +ACE_Asynch_Accept::implementation (void) const +{ + return this->implementation_; +} + +// ************************************************************ + +size_t +ACE_Asynch_Accept::Result::bytes_to_read (void) const +{ + return this->implementation ()->bytes_to_read (); +} + +ACE_Message_Block & +ACE_Asynch_Accept::Result::message_block (void) const +{ + return this->implementation ()->message_block (); +} + +ACE_HANDLE +ACE_Asynch_Accept::Result::listen_handle (void) const +{ + return this->implementation ()->listen_handle (); +} + +ACE_HANDLE +ACE_Asynch_Accept::Result::accept_handle (void) const +{ + return this->implementation ()->accept_handle (); +} + +ACE_Asynch_Accept::Result::Result (ACE_Asynch_Accept_Result_Impl *implementation) + : ACE_Asynch_Result (implementation), + implementation_ (implementation) +{ +} + +ACE_Asynch_Accept::Result::~Result (void) +{ + // Proactor will delete the implementation when the call + // completes. +} + +ACE_Asynch_Accept_Result_Impl * +ACE_Asynch_Accept::Result::implementation (void) const +{ + return this->implementation_; +} + + + +// ********************************************************************* + +ACE_Asynch_Connect::ACE_Asynch_Connect (void) + : implementation_ (0) +{ +} + +ACE_Asynch_Connect::~ACE_Asynch_Connect (void) +{ + // Delete the implementation. + delete this->implementation_; + this->implementation_ = 0; +} + +int +ACE_Asynch_Connect::open (ACE_Handler &handler, + ACE_HANDLE handle, + const void *completion_key, + ACE_Proactor *proactor) +{ + // Get a proactor for/from the user. + proactor = this->get_proactor (proactor, handler); + + // Now let us get the implementation initialized. + if ((this->implementation_ = proactor->create_asynch_connect ()) == 0) + return -1; + + // Call the method of the base class. + return ACE_Asynch_Operation::open (handler, + handle, + completion_key, + proactor); +} + +int +ACE_Asynch_Connect::connect (ACE_HANDLE connect_handle, + const ACE_Addr & remote_sap, + const ACE_Addr & local_sap, + int reuse_addr, + const void *act, + int priority, + int signal_number) +{ + if (0 == this->implementation_) + { + errno = EFAULT; + return -1; + } + return this->implementation_->connect (connect_handle, + remote_sap, + local_sap, + reuse_addr, + act, + priority, + signal_number); +} + +ACE_Asynch_Operation_Impl * +ACE_Asynch_Connect::implementation (void) const +{ + return this->implementation_; +} + +// ************************************************************ + +ACE_Asynch_Connect::Result::Result (ACE_Asynch_Connect_Result_Impl *implementation) + : ACE_Asynch_Result (implementation), + implementation_ (implementation) +{ +} + +ACE_Asynch_Connect::Result::~Result (void) +{ + // Proactor will delete the implementation when the call + // completes. +} + +ACE_HANDLE +ACE_Asynch_Connect::Result::connect_handle (void) const +{ + return this->implementation ()->connect_handle (); +} + + +ACE_Asynch_Connect_Result_Impl * +ACE_Asynch_Connect::Result::implementation (void) const +{ + return this->implementation_; +} + +// ************************************************************ + +ACE_Asynch_Transmit_File::ACE_Asynch_Transmit_File (void) + : implementation_ (0) +{ +} + +ACE_Asynch_Transmit_File::~ACE_Asynch_Transmit_File (void) +{ + // Delete the implementation. + delete this->implementation_; + this->implementation_ = 0; +} + +int +ACE_Asynch_Transmit_File::open (ACE_Handler &handler, + ACE_HANDLE handle, + const void *completion_key, + ACE_Proactor *proactor) +{ + // Get a proactor for/from the user. + proactor = this->get_proactor (proactor, handler); + + // Now let us get the implementation initialized. + if ((this->implementation_ = proactor->create_asynch_transmit_file ()) == 0) + return -1; + + // Call the method of the base class. + return ACE_Asynch_Operation::open (handler, + handle, + completion_key, + proactor); +} + +int +ACE_Asynch_Transmit_File::transmit_file (ACE_HANDLE file, + Header_And_Trailer *header_and_trailer, + size_t bytes_to_write, + unsigned long offset, + unsigned long offset_high, + size_t bytes_per_send, + unsigned long flags, + const void *act, + int priority, + int signal_number) +{ + if (0 == this->implementation_) + { + errno = EFAULT; + return -1; + } + return this->implementation_->transmit_file (file, + header_and_trailer, + bytes_to_write, + offset, + offset_high, + bytes_per_send, + flags, + act, + priority, + signal_number); +} + +ACE_Asynch_Operation_Impl * +ACE_Asynch_Transmit_File::implementation (void) const +{ + return this->implementation_; +} + +// **************************************************************************** + +ACE_HANDLE +ACE_Asynch_Transmit_File::Result::socket (void) const +{ + return this->implementation ()->socket (); +} + +ACE_HANDLE +ACE_Asynch_Transmit_File::Result::file (void) const +{ + return this->implementation ()->file (); +} + +ACE_Asynch_Transmit_File::Header_And_Trailer * +ACE_Asynch_Transmit_File::Result::header_and_trailer (void) const +{ + return this->implementation ()->header_and_trailer (); +} + +size_t +ACE_Asynch_Transmit_File::Result::bytes_to_write (void) const +{ + return this->implementation ()->bytes_to_write (); +} + +size_t +ACE_Asynch_Transmit_File::Result::bytes_per_send (void) const +{ + return this->implementation ()->bytes_per_send (); +} + +unsigned long +ACE_Asynch_Transmit_File::Result::flags (void) const +{ + return this->implementation ()->flags (); +} + +ACE_Asynch_Transmit_File::Result::Result (ACE_Asynch_Transmit_File_Result_Impl *implementation) + : ACE_Asynch_Result (implementation), + implementation_ (implementation) +{ +} + +ACE_Asynch_Transmit_File::Result::~Result (void) +{ +} + +ACE_Asynch_Transmit_File_Result_Impl * +ACE_Asynch_Transmit_File::Result::implementation (void) const +{ + return this->implementation_; +} + +// ************************************************************ + +ACE_Asynch_Transmit_File::Header_And_Trailer::Header_And_Trailer (ACE_Message_Block *header, + size_t header_bytes, + ACE_Message_Block *trailer, + size_t trailer_bytes) + : header_ (header), + header_bytes_ (header_bytes), + trailer_ (trailer), + trailer_bytes_ (trailer_bytes) +{ +} + +ACE_Asynch_Transmit_File::Header_And_Trailer::~Header_And_Trailer (void) +{ +} + +void +ACE_Asynch_Transmit_File::Header_And_Trailer::header_and_trailer (ACE_Message_Block *header, + size_t header_bytes, + ACE_Message_Block *trailer, + size_t trailer_bytes) +{ + this->header (header); + this->header_bytes (header_bytes); + this->trailer (trailer); + this->trailer_bytes (trailer_bytes); +} + +ACE_Message_Block * +ACE_Asynch_Transmit_File::Header_And_Trailer::header (void) const +{ + return this->header_; +} + +void +ACE_Asynch_Transmit_File::Header_And_Trailer::header (ACE_Message_Block *message_block) +{ + this->header_ = message_block; +} + +size_t +ACE_Asynch_Transmit_File::Header_And_Trailer::header_bytes (void) const +{ + return this->header_bytes_; +} + +void +ACE_Asynch_Transmit_File::Header_And_Trailer::header_bytes (size_t bytes) +{ + this->header_bytes_ = bytes; +} + +ACE_Message_Block * +ACE_Asynch_Transmit_File::Header_And_Trailer::trailer (void) const +{ + return this->trailer_; +} + +void +ACE_Asynch_Transmit_File::Header_And_Trailer::trailer (ACE_Message_Block *message_block) +{ + this->trailer_ = message_block; +} + +size_t +ACE_Asynch_Transmit_File::Header_And_Trailer::trailer_bytes (void) const +{ + return this->trailer_bytes_; +} + +void +ACE_Asynch_Transmit_File::Header_And_Trailer::trailer_bytes (size_t bytes) +{ + this->trailer_bytes_ = bytes; +} + +ACE_LPTRANSMIT_FILE_BUFFERS +ACE_Asynch_Transmit_File::Header_And_Trailer::transmit_buffers (void) +{ + // If both are zero, return zero + if (this->header_ == 0 && this->trailer_ == 0) + return 0; + else + { + // Something is valid + + // If header is valid, set the fields + if (this->header_ != 0) + { + this->transmit_buffers_.Head = this->header_->rd_ptr (); +#if defined(ACE_WIN64) + this->transmit_buffers_.HeadLength = + static_cast (this->header_bytes_); +#else + this->transmit_buffers_.HeadLength = this->header_bytes_; +#endif /* ACE_WIN64 */ + } + else + { + this->transmit_buffers_.Head = 0; + this->transmit_buffers_.HeadLength = 0; + } + + // If trailer is valid, set the fields + if (this->trailer_ != 0) + { + this->transmit_buffers_.Tail = this->trailer_->rd_ptr (); +#if defined(ACE_WIN64) + this->transmit_buffers_.TailLength = + static_cast (this->trailer_bytes_); +#else + this->transmit_buffers_.TailLength = this->trailer_bytes_; +#endif /* ACE_WIN64 */ + } + else + { + this->transmit_buffers_.Tail = 0; + this->transmit_buffers_.TailLength = 0; + } + + // Return the transmit buffers + return &this->transmit_buffers_; + } +} + +// ********************************************************************* + +ACE_Handler::ACE_Handler (void) + : proactor_ (0), handle_ (ACE_INVALID_HANDLE) +{ + ACE_Handler::Proxy *p; + ACE_NEW (p, ACE_Handler::Proxy (this)); + this->proxy_.reset (p); +} + +ACE_Handler::ACE_Handler (ACE_Proactor *d) + : proactor_ (d), handle_ (ACE_INVALID_HANDLE) +{ + ACE_Handler::Proxy *p; + ACE_NEW (p, ACE_Handler::Proxy (this)); + this->proxy_.reset (p); +} + +ACE_Handler::~ACE_Handler (void) +{ + ACE_Handler::Proxy *p = this->proxy_.get (); + if (p) + p->reset (); +} + +void +ACE_Handler::handle_read_stream (const ACE_Asynch_Read_Stream::Result & /* result */) +{ +} + +void +ACE_Handler::handle_write_stream (const ACE_Asynch_Write_Stream::Result & /* result */) +{ +} + +void +ACE_Handler::handle_write_dgram (const ACE_Asynch_Write_Dgram::Result & /* result */) +{ +} + +void +ACE_Handler::handle_read_dgram (const ACE_Asynch_Read_Dgram::Result & /* result */) +{ +} + +void +ACE_Handler::handle_accept (const ACE_Asynch_Accept::Result & /* result */) +{ +} + +void +ACE_Handler::handle_connect (const ACE_Asynch_Connect::Result & /* result */) +{ +} + +void +ACE_Handler::handle_transmit_file (const ACE_Asynch_Transmit_File::Result & /* result */) +{ +} + +void +ACE_Handler::handle_read_file (const ACE_Asynch_Read_File::Result & /* result */) +{ +} + +void +ACE_Handler::handle_write_file (const ACE_Asynch_Write_File::Result & /* result */) +{ +} + +void +ACE_Handler::handle_time_out (const ACE_Time_Value & /* tv */, + const void * /* act */) +{ +} + +void +ACE_Handler::handle_wakeup (void) +{ +} + +ACE_Proactor * +ACE_Handler::proactor (void) +{ + return this->proactor_; +} + +void +ACE_Handler::proactor (ACE_Proactor *p) +{ + this->proactor_ = p; +} + +ACE_HANDLE +ACE_Handler::handle (void) const +{ + return this->handle_; +} + +void +ACE_Handler::handle (ACE_HANDLE h) +{ + this->handle_ = h; +} + +ACE_Refcounted_Auto_Ptr & +ACE_Handler::proxy (void) +{ + return this->proxy_; +} + +// ************************************************************ + +ACE_Service_Handler::ACE_Service_Handler (void) +{ +} + +ACE_Service_Handler::~ACE_Service_Handler (void) +{ +} + +void +ACE_Service_Handler::addresses (const ACE_INET_Addr & /* remote_address */, + const ACE_INET_Addr & /* local_address */ ) +{ +} + +void +ACE_Service_Handler::act (const void *) +{ +} + +void +ACE_Service_Handler::open (ACE_HANDLE, + ACE_Message_Block &) +{ +} + + +// ************************************************************ + +ACE_Asynch_Read_Dgram::ACE_Asynch_Read_Dgram (void) + : implementation_ (0) +{ +} + +ACE_Asynch_Read_Dgram::~ACE_Asynch_Read_Dgram (void) +{ + // Delete the implementation. + delete this->implementation_; + this->implementation_ = 0; +} + +int +ACE_Asynch_Read_Dgram::open (ACE_Handler &handler, + ACE_HANDLE handle, + const void *completion_key, + ACE_Proactor *proactor) +{ + // Get a proactor for/from the user. + proactor = this->get_proactor (proactor, handler); + + // Now let us get the implementation initialized. + if ((this->implementation_ = proactor->create_asynch_read_dgram ()) == 0) + return -1; + + // Call the method of the base class. + return ACE_Asynch_Operation::open (handler, + handle, + completion_key, + proactor); +} + +ssize_t +ACE_Asynch_Read_Dgram::recv (ACE_Message_Block *message_block, + size_t &number_of_bytes_recvd, + int flags, + int protocol_family, + const void *act, + int priority, + int signal_number) +{ + if (0 == this->implementation_) + { + errno = EFAULT; + return -1; + } + return this->implementation_->recv (message_block, + number_of_bytes_recvd, + flags, + protocol_family, + act, + priority, + signal_number); +} + +ACE_Asynch_Operation_Impl * +ACE_Asynch_Read_Dgram::implementation (void) const +{ + return this->implementation_; +} + +// ************************************************************ + +int +ACE_Asynch_Read_Dgram::Result::remote_address (ACE_Addr& addr) const +{ + return this->implementation ()->remote_address (addr); +} + +ACE_Message_Block* +ACE_Asynch_Read_Dgram::Result::message_block (void) const +{ + return this->implementation ()->message_block (); +} + +int +ACE_Asynch_Read_Dgram::Result::flags (void) const +{ + return this->implementation ()->flags (); +} + +size_t +ACE_Asynch_Read_Dgram::Result::bytes_to_read (void) const +{ + return this->implementation ()->bytes_to_read (); +} + +ACE_HANDLE +ACE_Asynch_Read_Dgram::Result::handle (void) const +{ + return this->implementation ()->handle(); +} + +ACE_Asynch_Read_Dgram::Result::Result (ACE_Asynch_Read_Dgram_Result_Impl *implementation) +: ACE_Asynch_Result (implementation), + implementation_ (implementation) +{ +} + +ACE_Asynch_Read_Dgram::Result::~Result (void) +{ +} + +ACE_Asynch_Read_Dgram_Result_Impl * +ACE_Asynch_Read_Dgram::Result::implementation (void) const +{ + return this->implementation_; +} + +// ************************************************************ + + +ACE_Asynch_Write_Dgram::ACE_Asynch_Write_Dgram (void) + : implementation_ (0) +{ +} + +ACE_Asynch_Write_Dgram::~ACE_Asynch_Write_Dgram (void) +{ + // Delete the implementation. + delete this->implementation_; + this->implementation_ = 0; +} + +int +ACE_Asynch_Write_Dgram::open (ACE_Handler &handler, + ACE_HANDLE handle, + const void *completion_key, + ACE_Proactor *proactor) +{ + // Get a proactor for/from the user. + proactor = this->get_proactor (proactor, handler); + + // Now let us get the implementation initialized. + if ((this->implementation_ = proactor->create_asynch_write_dgram ()) == 0) + return -1; + + // Call the method of the base class. + return ACE_Asynch_Operation::open (handler, + handle, + completion_key, + proactor); +} + +ssize_t +ACE_Asynch_Write_Dgram::send (ACE_Message_Block *message_block, + size_t &number_of_bytes_sent, + int flags, + const ACE_Addr& remote_addr, + const void *act, + int priority, + int signal_number) +{ + if (0 == this->implementation_) + { + errno = EFAULT; + return -1; + } + return this->implementation_->send (message_block, + number_of_bytes_sent, + flags, + remote_addr, + act, + priority, + signal_number); +} + +ACE_Asynch_Operation_Impl * +ACE_Asynch_Write_Dgram::implementation (void) const +{ + return this->implementation_; +} + +// ************************************************************ + +size_t +ACE_Asynch_Write_Dgram::Result::bytes_to_write (void) const +{ + return this->implementation ()->bytes_to_write (); +} + +ACE_Message_Block* +ACE_Asynch_Write_Dgram::Result::message_block () const +{ + return this->implementation ()->message_block (); +} + +int +ACE_Asynch_Write_Dgram::Result::flags (void) const +{ + return this->implementation ()->flags (); +} + +ACE_HANDLE +ACE_Asynch_Write_Dgram::Result::handle (void) const +{ + return this->implementation ()->handle (); +} + +ACE_Asynch_Write_Dgram_Result_Impl * +ACE_Asynch_Write_Dgram::Result::implementation (void) const +{ + return this->implementation_; +} + +ACE_Asynch_Write_Dgram::Result::Result (ACE_Asynch_Write_Dgram_Result_Impl *implementation) +: ACE_Asynch_Result (implementation), + implementation_ (implementation) +{ +} + +ACE_Asynch_Write_Dgram::Result::~Result (void) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_WIN32_OVERLAPPED_IO || ACE_HAS_AIO_CALLS */ diff --git a/ACE/ace/Asynch_IO.h b/ACE/ace/Asynch_IO.h new file mode 100644 index 00000000000..e71c16ca3ee --- /dev/null +++ b/ACE/ace/Asynch_IO.h @@ -0,0 +1,1690 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Asynch_IO.h + * + * $Id$ + * + * This works on Win32 (defined (ACE_WIN32) && !defined + * (ACE_HAS_WINCE)) platforms and on POSIX4 platforms with {aio_*} + * routines (defined (ACE_HAS_AIO_CALLS)) + * + * On Win32 platforms, the implementation of + * {ACE_Asynch_Transmit_File} and {ACE_Asynch_Accept} are only + * supported if ACE_HAS_WINSOCK2 is defined or you are on WinNT 4.0 + * or higher. + * + * @author Irfan Pyarali + * @author Tim Harrison + * @author Alexander Babu Arulanthu + * @author Roger Tragin + * @author Alexander Libman + */ +//============================================================================= + +#ifndef ACE_ASYNCH_IO_H +#define ACE_ASYNCH_IO_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_WIN32_OVERLAPPED_IO) || defined (ACE_HAS_AIO_CALLS) + +#include "ace/Synch_Traits.h" +#if defined (ACE_HAS_THREADS) +# include "ace/Thread_Mutex.h" +#else +# include "ace/Null_Mutex.h" +#endif /* ACE_HAS_THREADS */ +#include "ace/Refcounted_Auto_Ptr.h" + +#include "ace/os_include/os_signal.h" +#include "ace/os_include/sys/os_socket.h" +#include "ace/os_include/sys/os_types.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +# if defined (ACE_HAS_WIN32_OVERLAPPED_IO) +typedef TRANSMIT_FILE_BUFFERS ACE_TRANSMIT_FILE_BUFFERS; +typedef LPTRANSMIT_FILE_BUFFERS ACE_LPTRANSMIT_FILE_BUFFERS; +typedef PTRANSMIT_FILE_BUFFERS ACE_PTRANSMIT_FILE_BUFFERS; + +# define ACE_INFINITE INFINITE +# define ACE_STATUS_TIMEOUT STATUS_TIMEOUT +# define ACE_WAIT_FAILED WAIT_FAILED +# define ACE_WAIT_TIMEOUT WAIT_TIMEOUT +# else /* ACE_HAS_WIN32_OVERLAPPED_IO */ +struct ACE_TRANSMIT_FILE_BUFFERS +{ + void *Head; + size_t HeadLength; + void *Tail; + size_t TailLength; +}; +typedef ACE_TRANSMIT_FILE_BUFFERS* ACE_PTRANSMIT_FILE_BUFFERS; +typedef ACE_TRANSMIT_FILE_BUFFERS* ACE_LPTRANSMIT_FILE_BUFFERS; + +# if !defined (ACE_INFINITE) +# define ACE_INFINITE LONG_MAX +# endif /* ACE_INFINITE */ +# define ACE_STATUS_TIMEOUT LONG_MAX +# define ACE_WAIT_FAILED LONG_MAX +# define ACE_WAIT_TIMEOUT LONG_MAX +# endif /* ACE_HAS_WIN32_OVERLAPPED_IO */ + +// Forward declarations +class ACE_Proactor; +class ACE_Handler; +class ACE_Message_Block; +class ACE_INET_Addr; +class ACE_Addr; + +// Forward declarations +class ACE_Asynch_Result_Impl; +class ACE_Time_Value; + +/** + * @class ACE_Asynch_Result + * + * @brief An interface base class which allows users access to common + * information related to an asynchronous operation. + * + * An interface base class from which you can obtain some basic + * information like the number of bytes transferred, the ACT + * associated with the asynchronous operation, indication of + * success or failure, etc. Subclasses may want to store more + * information that is particular to the asynchronous operation + * it represents. + */ +class ACE_Export ACE_Asynch_Result +{ + +public: + /// Number of bytes transferred by the operation. + size_t bytes_transferred (void) const; + + /// ACT associated with the operation. + const void *act (void) const; + + /// Did the operation succeed? + int success (void) const; + + /** + * This is the ACT associated with the handle on which the + * Asynch_Operation takes place. + * + * On WIN32, this returns the ACT associated with the handle when it + * was registered with the I/O completion port. + * + * @@ This is not implemented for POSIX4 platforms. Returns 0. + */ + const void *completion_key (void) const; + + /// Error value if the operation fails. + unsigned long error (void) const; + + /** + * On WIN32, this returns the event associated with the OVERLAPPED + * structure. + * + * This returns ACE_INVALID_HANDLE on POSIX4-Unix platforms. + */ + ACE_HANDLE event (void) const; + + /** + * This really makes sense only when doing file I/O. + * + * On WIN32, these are represented in the OVERLAPPED datastructure. + * + * @@ On POSIX4-Unix, offset_high should be supported using + * aiocb64. + */ + unsigned long offset (void) const; + unsigned long offset_high (void) const; + + /** + * Priority of the operation. + * + * On POSIX4-Unix, this is supported. Priority works like {nice} in + * Unix. Negative values are not allowed. 0 means priority of the + * operation same as the process priority. 1 means priority of the + * operation is one less than process. And so forth. + * + * On Win32, this is a no-op. + */ + int priority (void) const; + + /** + * POSIX4 real-time signal number to be used for the + * operation. {signal_number} ranges from ACE_SIGRTMIN to ACE_SIGRTMAX. By + * default, ACE_SIGRTMIN is used to issue {aio_} calls. This is a no-op + * on non-POSIX4 systems and returns 0. + */ + int signal_number (void) const; + + + /// Destructor. + virtual ~ACE_Asynch_Result (void); + +protected: + /// Constructor. This implementation will not be deleted. The + /// implementation will be deleted by the Proactor. + ACE_Asynch_Result (ACE_Asynch_Result_Impl *implementation); + + /// Get the implementation class. + ACE_Asynch_Result_Impl *implementation (void) const; + + /// Implementation class. + ACE_Asynch_Result_Impl *implementation_; +}; + +// Forward declarations +class ACE_Asynch_Operation_Impl; + +/** + * @class ACE_Asynch_Operation + * + * @brief This is an interface base class for all asynch + * operations. The resposiblility of this class is to forward + * all methods to its delegation/implementation class, e.g., + * ACE_WIN32_Asynch_Operation or ACE_POSIX_Asynch_Operation. + * + * There are some attributes and functionality which is common + * to all asychronous operations. The delegation classes of this + * class will factor out this code. + */ +class ACE_Export ACE_Asynch_Operation +{ + +public: + /** + * Initializes the factory with information which will be used with + * each asynchronous call. If ({handle} == ACE_INVALID_HANDLE), + * {ACE_Handler::handle} will be called on the {handler} to get the + * correct handle. + */ + int open (ACE_Handler &handler, + ACE_HANDLE handle, + const void *completion_key, + ACE_Proactor *proactor); + + /** + * (Attempts to) cancel the asynchronous operation pending against + * the {handle} registered with this Operation. + * + * All completion notifications for the I/O operations will occur + * normally. + * + * = Return Values: + * + * -1 : Operation failed. (can get only in POSIX). + * 0 : All the operations were cancelled. + * 1 : All the operations were already finished in this + * handle. Unable to cancel them. + * 2 : Atleast one of the requested operations cannot be + * cancelled. + * + * There is slight difference in the semantics between NT and POSIX + * platforms which is given below. + * + * = Win32 : + * + * cancels all pending accepts operations that were issued by the + * calling thread. The function does not cancel asynchronous + * operations issued by other threads. + * All I/O operations that are canceled will complete with the + * error ERROR_OPERATION_ABORTED. + * + * = POSIX: + * + * Attempts to cancel one or more asynchronous I/O requests + * currently outstanding against the {handle} registered in this + * operation. + * For requested operations that are successfully canceled, the + * associated error status is set to ECANCELED. + */ + int cancel (void); + + + // = Access methods. + + /// Return the underlying proactor. + ACE_Proactor* proactor (void) const; + + /// Destructor. + virtual ~ACE_Asynch_Operation (void); + +protected: + /// Constructor. + ACE_Asynch_Operation (void); + + /// Return the underlying implementation class. + virtual ACE_Asynch_Operation_Impl *implementation (void) const = 0; + + /// Get a proactor for/from the user + ACE_Proactor *get_proactor (ACE_Proactor *user_proactor, + ACE_Handler &handler) const; +}; + +// Forward declarations +class ACE_Asynch_Read_Stream_Result_Impl; +class ACE_Asynch_Read_Stream_Impl; + +/** + * @class ACE_Asynch_Read_Stream + * + * @brief This class is a factory for starting off asynchronous reads + * on a stream. This class forwards all methods to its + * implementation class. + * + * Once {open} is called, multiple asynchronous {read}s can + * started using this class. An ACE_Asynch_Read_Stream::Result + * will be passed back to the {handler} when the asynchronous + * reads completes through the {ACE_Handler::handle_read_stream} + * callback. + */ +class ACE_Export ACE_Asynch_Read_Stream : public ACE_Asynch_Operation +{ + +public: + /// A do nothing constructor. + ACE_Asynch_Read_Stream (void); + + /// Destructor + virtual ~ACE_Asynch_Read_Stream (void); + + /** + * Initializes the factory with information which will be used with + * each asynchronous call. + * + * @arg handler The ACE_Handler that will be called to handle completions + * for operations initiated using this factory. + * @arg handle The handle that future read operations will use. + * If handle == @c ACE_INVALID_HANDLE, + * ACE_Handler::handle() will be called on @ handler + * to get the correct handle. + * + * @retval 0 for success. + * @retval -1 for failure; consult @c errno for further information. + */ + int open (ACE_Handler &handler, + ACE_HANDLE handle = ACE_INVALID_HANDLE, + const void *completion_key = 0, + ACE_Proactor *proactor = 0); + + /** + * Initiate an asynchronous read operation. + * + * @arg message_block The ACE_Message_Block to receive the data. + * Received bytes will be placed in the block + * beginning at its current write pointer. + * If data is read, the message block's write + * pointer will be advanced by the number of + * bytes read. + * @arg num_bytes_to_read The maximum number of bytes to read. + * @arg act Asynchronous Completion Token; passed through to + * the Result object corresponding to this operation. + * @arg priority Priority of the operation. On POSIX4-Unix, + * this is supported. Works like @c nice in Unix. + * Negative values are not allowed. 0 means + * priority of the operation same as the process + * priority. 1 means priority of the operation is + * one less than process priority, etc. + * @param is ignored on Windows. + * @arg signal_number The POSIX4 real-time signal number to be used + * to signal completion of the operation. Values + * range from ACE_SIGRTMIN to ACE_SIGRTMAX. + * This argument is ignored on non-POSIX4 systems. + */ + int read (ACE_Message_Block &message_block, + size_t num_bytes_to_read, + const void *act = 0, + int priority = 0, + int signal_number = ACE_SIGRTMIN); + +#if defined (ACE_HAS_WIN32_OVERLAPPED_IO) + /** + * Same as above but with scatter support, through chaining of composite + * message blocks using the continuation field. + */ + int readv (ACE_Message_Block &message_block, + size_t num_bytes_to_read, + const void *act = 0, + int priority = 0, + int signal_number = ACE_SIGRTMIN); +#endif /* defined (ACE_HAS_WIN32_OVERLAPPED_IO) */ + + /// Return the underlying implementation class. + // (this should be protected...) + virtual ACE_Asynch_Operation_Impl *implementation (void) const; + +protected: + /// Implementation class that all methods will be forwarded to. + ACE_Asynch_Read_Stream_Impl *implementation_; + +public: +/** + * @class Result + * + * @brief This is the class which will be passed back to the + * {handler} when the asynchronous read completes. This class + * forwards all the methods to the implementation classes. + * + * This class has all the information necessary for the + * {handler} to uniquiely identify the completion of the + * asynchronous read. + */ + class ACE_Export Result : public ACE_Asynch_Result + { + + /// The concrete implementation result classes only construct this + /// class. + friend class ACE_POSIX_Asynch_Read_Stream_Result; + friend class ACE_WIN32_Asynch_Read_Stream_Result; + + public: + /// The number of bytes which were requested at the start of the + /// asynchronous read. + size_t bytes_to_read (void) const; + + /// Message block which contains the read data. + ACE_Message_Block &message_block (void) const; + + /// I/O handle used for reading. + ACE_HANDLE handle (void) const; + + /// Get the implementation class. + ACE_Asynch_Read_Stream_Result_Impl *implementation (void) const; + + protected: + /// Constructor. + Result (ACE_Asynch_Read_Stream_Result_Impl *implementation); + + /// Destructor. + virtual ~Result (void); + + /// The implementation class. + ACE_Asynch_Read_Stream_Result_Impl *implementation_; + }; +}; + +// Forward declarations +class ACE_Asynch_Write_Stream_Impl; +class ACE_Asynch_Write_Stream_Result_Impl; + +/** + * @class ACE_Asynch_Write_Stream + * + * @brief This class is a factory for starting off asynchronous writes + * on a stream. This class forwards all methods to its + * implementation class. + * + * Once {open} is called, multiple asynchronous {writes}s can + * started using this class. An ACE_Asynch_Write_Stream::Result + * will be passed back to the {handler} when the asynchronous + * write completes through the + * {ACE_Handler::handle_write_stream} callback. + */ +class ACE_Export ACE_Asynch_Write_Stream : public ACE_Asynch_Operation +{ + +public: + /// A do nothing constructor. + ACE_Asynch_Write_Stream (void); + + /// Destructor. + virtual ~ACE_Asynch_Write_Stream (void); + + /** + * Initializes the factory with information which will be used with + * each asynchronous call. If ({handle} == ACE_INVALID_HANDLE), + * {ACE_Handler::handle} will be called on the {handler} to get the + * correct handle. + */ + int open (ACE_Handler &handler, + ACE_HANDLE handle = ACE_INVALID_HANDLE, + const void *completion_key = 0, + ACE_Proactor *proactor = 0); + + /** + * This starts off an asynchronous write. Upto {bytes_to_write} + * will be written from the {message_block}. Upon successful completion + * of the write operation, {message_block}'s {rd_ptr} is updated to + * reflect the data that was written. Priority of the + * operation is specified by {priority}. On POSIX4-Unix, this is + * supported. Works like {nice} in Unix. Negative values are not + * allowed. 0 means priority of the operation same as the process + * priority. 1 means priority of the operation is one less than + * process. And so forth. On Win32, this argument is a no-op. + * {signal_number} is the POSIX4 real-time signal number to be used + * for the operation. {signal_number} ranges from ACE_SIGRTMIN to + * ACE_SIGRTMAX. This argument is a no-op on non-POSIX4 systems. + */ + int write (ACE_Message_Block &message_block, + size_t bytes_to_write, + const void *act = 0, + int priority = 0, + int signal_number = ACE_SIGRTMIN); + +#if defined (ACE_HAS_WIN32_OVERLAPPED_IO) + /** + * Same as above but with gather support, through chaining of composite + * message blocks using the continuation field. + */ + int writev (ACE_Message_Block &message_block, + size_t bytes_to_write, + const void *act = 0, + int priority = 0, + int signal_number = ACE_SIGRTMIN); +#endif /* defined (ACE_HAS_WIN32_OVERLAPPED_IO) */ + + /// Return the underlying implementation class. + /// @todo (this should be protected...) + virtual ACE_Asynch_Operation_Impl *implementation (void) const; + +protected: + /// Implementation class that all methods will be forwarded to. + ACE_Asynch_Write_Stream_Impl *implementation_; + +public: +/** + * @class Result + * + * @brief This is that class which will be passed back to the + * {handler} when the asynchronous write completes. This class + * forwards all the methods to the implementation class. + * + * This class has all the information necessary for the + * {handler} to uniquiely identify the completion of the + * asynchronous write. + */ + class ACE_Export Result : public ACE_Asynch_Result + { + + /// The concrete implementation result classes only construct this + /// class. + friend class ACE_POSIX_Asynch_Write_Stream_Result; + friend class ACE_WIN32_Asynch_Write_Stream_Result; + + public: + /// The number of bytes which were requested at the start of the + /// asynchronous write. + size_t bytes_to_write (void) const; + + /// Message block that contains the data to be written. + ACE_Message_Block &message_block (void) const; + + /// I/O handle used for writing. + ACE_HANDLE handle (void) const; + + /// Get the implementation class. + ACE_Asynch_Write_Stream_Result_Impl *implementation (void) const; + + protected: + /// Constructor. + Result (ACE_Asynch_Write_Stream_Result_Impl *implementation); + + /// Destructor. + virtual ~Result (void); + + /// Implementation class. + ACE_Asynch_Write_Stream_Result_Impl *implementation_; + }; +}; + +// Forward declarations +class ACE_Asynch_Read_File_Impl; +class ACE_Asynch_Read_File_Result_Impl; + +/** + * @class ACE_Asynch_Read_File + * + * @brief This class is a factory for starting off asynchronous reads + * on a file. This class forwards all methods to its + * implementation class. + * + * Once {open} is called, multiple asynchronous {read}s can + * started using this class. An ACE_Asynch_Read_File::Result + * will be passed back to the {handler} when the asynchronous + * reads completes through the {ACE_Handler::handle_read_file} + * callback. + * This class differs slightly from ACE_Asynch_Read_Stream as it + * allows the user to specify an offset for the read. + */ +class ACE_Export ACE_Asynch_Read_File : public ACE_Asynch_Read_Stream +{ + +public: + /// A do nothing constructor. + ACE_Asynch_Read_File (void); + + /// Destructor. + virtual ~ACE_Asynch_Read_File (void); + + /** + * Initializes the factory with information which will be used with + * each asynchronous call. If ({handle} == ACE_INVALID_HANDLE), + * {ACE_Handler::handle} will be called on the {handler} to get the + * correct handle. + */ + int open (ACE_Handler &handler, + ACE_HANDLE handle = ACE_INVALID_HANDLE, + const void *completion_key = 0, + ACE_Proactor *proactor = 0); + + /** + * This starts off an asynchronous read. Upto {bytes_to_read} will + * be read and stored in the {message_block}. The read will start + * at {offset} from the beginning of the file. Priority of the + * operation is specified by {priority}. On POSIX4-Unix, this is + * supported. Works like {nice} in Unix. Negative values are not + * allowed. 0 means priority of the operation same as the process + * priority. 1 means priority of the operation is one less than + * process. And so forth. On Win32, this argument is a no-op. + * {signal_number} is the POSIX4 real-time signal number to be used + * for the operation. {signal_number} ranges from ACE_SIGRTMIN to + * ACE_SIGRTMAX. This argument is a no-op on non-POSIX4 systems. + */ + int read (ACE_Message_Block &message_block, + size_t bytes_to_read, + unsigned long offset = 0, + unsigned long offset_high = 0, + const void *act = 0, + int priority = 0, + int signal_number = ACE_SIGRTMIN); + +#if (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) + /** + * Same as above but with scatter support, through chaining of composite + * message blocks using the continuation field. + * @note In win32 Each data block payload must be at least the size of a system + * memory page and must be aligned on a system memory page size boundary + */ + int readv (ACE_Message_Block &message_block, + size_t bytes_to_read, + unsigned long offset = 0, + unsigned long offset_high = 0, + const void *act = 0, + int priority = 0, + int signal_number = ACE_SIGRTMIN); +#endif /* (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) */ + + /// Return the underlying implementation class. + // (this should be protected...) + virtual ACE_Asynch_Operation_Impl *implementation (void) const; + +protected: + /// Delegation/implementation class that all methods will be + /// forwarded to. + ACE_Asynch_Read_File_Impl *implementation_; + +public: +/** + * @class Result + * + * @brief This is that class which will be passed back to the + * {handler} when the asynchronous read completes. This class + * forwards all the methods to the implementation class. + * + * This class has all the information necessary for the + * {handler} to uniquiely identify the completion of the + * asynchronous read. + * This class differs slightly from + * ACE_Asynch_Read_Stream::Result as it calls back + * {ACE_Handler::handle_read_file} on the {handler} instead of + * {ACE_Handler::handle_read_stream}. No additional state is + * required by this class as ACE_Asynch_Result can store the + * {offset}. + */ + class ACE_Export Result : public ACE_Asynch_Read_Stream::Result + { + + /// The concrete implementation result classes only construct this + /// class. + friend class ACE_POSIX_Asynch_Read_File_Result; + friend class ACE_WIN32_Asynch_Read_File_Result; + + public: + /// Get the implementation class. + ACE_Asynch_Read_File_Result_Impl *implementation (void) const; + + protected: + /// Constructor. This implementation will not be deleted. + Result (ACE_Asynch_Read_File_Result_Impl *implementation); + + /// Destructor. + virtual ~Result (void); + + /// The implementation class. + ACE_Asynch_Read_File_Result_Impl *implementation_; + + private: + /// Here just to provide an dummpy implementation, since the + /// one auto generated by MSVC is flagged as infinitely recursive + void operator= (Result &) {} + }; +}; + +// Forward declarations +class ACE_Asynch_Write_File_Impl; +class ACE_Asynch_Write_File_Result_Impl; + +/** + * @class ACE_Asynch_Write_File + * + * @brief This class is a factory for starting off asynchronous writes + * on a file. This class forwards all methods to its + * implementation class. + * + * Once {open} is called, multiple asynchronous {write}s can be + * started using this class. A ACE_Asynch_Write_File::Result + * will be passed back to the {handler} when the asynchronous + * writes completes through the {ACE_Handler::handle_write_file} + * callback. + * This class differs slightly from ACE_Asynch_Write_Stream as + * it allows the user to specify an offset for the write. + */ +class ACE_Export ACE_Asynch_Write_File : public ACE_Asynch_Write_Stream +{ + +public: + /// A do nothing constructor. + ACE_Asynch_Write_File (void); + + /// Destructor. + virtual ~ACE_Asynch_Write_File (void); + + /** + * Initializes the factory with information which will be used with + * each asynchronous call. If ({handle} == ACE_INVALID_HANDLE), + * {ACE_Handler::handle} will be called on the {handler} to get the + * correct handle. + */ + int open (ACE_Handler &handler, + ACE_HANDLE handle = ACE_INVALID_HANDLE, + const void *completion_key = 0, + ACE_Proactor *proactor = 0); + + /** + * This starts off an asynchronous write. Upto {bytes_to_write} + * will be written from the {message_block}, starting at the + * block's {rd_ptr}. The write will go to the file, starting + * {offset} bytes from the beginning of the file. Priority of the + * operation is specified by {priority}. On POSIX4-Unix, this is + * supported. Works like {nice} in Unix. Negative values are not + * allowed. 0 means priority of the operation same as the process + * priority. 1 means priority of the operation is one less than + * process. And so forth. On Win32, this is a no-op. + * {signal_number} is the POSIX4 real-time signal number to be used + * for the operation. {signal_number} ranges from ACE_SIGRTMIN to + * ACE_SIGRTMAX. This argument is a no-op on non-POSIX4 systems. + */ + int write (ACE_Message_Block &message_block, + size_t bytes_to_write, + unsigned long offset = 0, + unsigned long offset_high = 0, + const void *act = 0, + int priority = 0, + int signal_number = ACE_SIGRTMIN); + +#if (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) + /** + * Same as above but with gather support, through chaining of composite + * message blocks using the continuation field. + * @note In win32 Each data block payload must be at least the size of a system + * memory page and must be aligned on a system memory page size boundary + */ + int writev (ACE_Message_Block &message_block, + size_t bytes_to_write, + unsigned long offset = 0, + unsigned long offset_high = 0, + const void *act = 0, + int priority = 0, + int signal_number = ACE_SIGRTMIN); +#endif /* (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) */ + + /// Return the underlying implementation class. + // (this should be protected...) + virtual ACE_Asynch_Operation_Impl *implementation (void) const; + +protected: + /// Implementation object. + ACE_Asynch_Write_File_Impl *implementation_; + +public: +/** + * @class Result + * + * @brief This is that class which will be passed back to the + * {handler} when the asynchronous write completes. This class + * forwards all the methods to the implementation class. + * + * This class has all the information necessary for the + * {handler} to uniquiely identify the completion of the + * asynchronous write. + * This class differs slightly from + * ACE_Asynch_Write_Stream::Result as it calls back + * {ACE_Handler::handle_write_file} on the {handler} instead + * of {ACE_Handler::handle_write_stream}. No additional state + * is required by this class as ACE_Asynch_Result can store + * the {offset}. + */ + class ACE_Export Result : public ACE_Asynch_Write_Stream::Result + { + + /// The concrete implementation result classes only construct this + /// class. + friend class ACE_POSIX_Asynch_Write_File_Result; + friend class ACE_WIN32_Asynch_Write_File_Result; + + public: + /// Get the implementation class. + ACE_Asynch_Write_File_Result_Impl *implementation (void) const; + + protected: + /// Constructor. This implementation will not be deleted. + Result (ACE_Asynch_Write_File_Result_Impl *implementation); + + /// Destructor. + virtual ~Result (void); + + /// The implementation class. + ACE_Asynch_Write_File_Result_Impl *implementation_; + + private: + /// Here just to provide an dummpy implementation, since the + /// one auto generated by MSVC is flagged as infinitely recursive + void operator= (Result &) {}; + }; +}; + +// Forward declarations +class ACE_Asynch_Accept_Result_Impl; +class ACE_Asynch_Accept_Impl; + +/** + * @class ACE_Asynch_Accept + * + * @brief This class is a factory for starting off asynchronous accepts + * on a listen handle. This class forwards all methods to its + * implementation class. + * + * Once {open} is called, multiple asynchronous {accept}s can + * started using this class. A ACE_Asynch_Accept::Result will + * be passed back to the {handler} when the asynchronous accept + * completes through the {ACE_Handler::handle_accept} + * callback. + */ +class ACE_Export ACE_Asynch_Accept : public ACE_Asynch_Operation +{ + +public: + /// A do nothing constructor. + ACE_Asynch_Accept (void); + + /// Destructor. + virtual ~ACE_Asynch_Accept (void); + + /** + * Initializes the factory with information which will be used with + * each asynchronous call. If ({handle} == ACE_INVALID_HANDLE), + * {ACE_Handler::handle} will be called on the {handler} to get the + * correct handle. + */ + int open (ACE_Handler &handler, + ACE_HANDLE handle = ACE_INVALID_HANDLE, + const void *completion_key = 0, + ACE_Proactor *proactor = 0); + + /** + * This starts off an asynchronous accept. The asynchronous accept + * call also allows any initial data to be returned to the + * handler specified to @c open(). + * @param message_block A message block to receive initial data, as well + * as the local and remote addresses when the + * connection is made. Since the block receives + * the addresses regardless of whether or not + * initial data is available or requested, the + * message block size must be at least + * @a bytes_to_read plus two times the size of + * the addresses used (IPv4 or IPv6). + * @param bytes_to_read The maximum number of bytes of initial data + * to read into @a message_block. + * @param accept_handle The handle that the new connection will be + * accepted on. If @c INVALID_HANDLE, a new + * handle will be created using @a addr_family. + * @param act Value to be passed in result when operation + * completes. + * @param priority Priority of the operation. On POSIX4-Unix, this + * is supported. Works like @c nice in Unix. + * Negative values are not allowed. 0 means + * priority of the operation same as the process + * priority. 1 means priority of the operation is + * one less than process. And so forth. + * On Win32, this argument is ignored. + * @param signal_number The POSIX4 real-time signal number to be used + * for the operation. Value range is from + * @c ACE_SIGRTMIN to @c ACE_SIGRTMAX. + * This argument is ignored on non-POSIX4 systems. + * @param addr_family The address family to use if @a accept_handle + * is @c ACE_INVALID_HANDLE and a new handle must + * be opened. Values are @c AF_INET and @c PF_INET6. + */ + int accept (ACE_Message_Block &message_block, + size_t bytes_to_read, + ACE_HANDLE accept_handle = ACE_INVALID_HANDLE, + const void *act = 0, + int priority = 0, + int signal_number = ACE_SIGRTMIN, + int addr_family = AF_INET); + + /// Return the underlying implementation class. + // (this should be protected...) + virtual ACE_Asynch_Operation_Impl *implementation (void) const; + +protected: + /// Delegation/implementation class that all methods will be + /// forwarded to. + ACE_Asynch_Accept_Impl *implementation_; + +public: +/** + * @class Result + * + * @brief This is that class which will be passed back to the + * {handler} when the asynchronous accept completes. + * + * This class has all the information necessary for the + * {handler} to uniquiely identify the completion of the + * asynchronous accept. + */ + class ACE_Export Result : public ACE_Asynch_Result + { + + /// The concrete implementation result classes only construct this + /// class. + friend class ACE_POSIX_Asynch_Accept_Result; + friend class ACE_WIN32_Asynch_Accept_Result; + + public: + /// The number of bytes which were requested at the start of the + /// asynchronous accept. + size_t bytes_to_read (void) const; + + /// Message block which contains the read data. + ACE_Message_Block &message_block (void) const; + + /// I/O handle used for accepting new connections. + ACE_HANDLE listen_handle (void) const; + + /// I/O handle for the new connection. + ACE_HANDLE accept_handle (void) const; + + /// Get the implementation. + ACE_Asynch_Accept_Result_Impl *implementation (void) const; + + protected: + /// Contructor. Implementation will not be deleted. + Result (ACE_Asynch_Accept_Result_Impl *implementation); + + /// Destructor. + virtual ~Result (void); + + /// Impelmentation class. + ACE_Asynch_Accept_Result_Impl *implementation_; + }; +}; +// Forward declarations +class ACE_Asynch_Connect_Result_Impl; +class ACE_Asynch_Connect_Impl; + +/** + * @class ACE_Asynch_Connect + * + * @brief This class is a factory for starting off asynchronous connects + * This class forwards all methods to its implementation class. + * + * Once @c open is called, multiple asynchronous connect operationss can + * started using this class. A ACE_Asynch_Connect::Result will + * be passed back to the associated ACE_Handler when the asynchronous connect + * completes through the ACE_Handler::handle_connect() callback. + */ +class ACE_Export ACE_Asynch_Connect : public ACE_Asynch_Operation +{ + +public: + /// A do nothing constructor. + ACE_Asynch_Connect (void); + + /// Destructor. + virtual ~ACE_Asynch_Connect (void); + + /** + * Initializes the factory with information which will be used with + * each asynchronous call. + * + * @note @arg handle is ignored and should be @c ACE_INVALID_HANDLE. + */ + int open (ACE_Handler &handler, + ACE_HANDLE handle = ACE_INVALID_HANDLE, + const void *completion_key = 0, + ACE_Proactor *proactor = 0); + + /** + * This starts off an asynchronous Connect. + */ + int connect (ACE_HANDLE connect_handle, + const ACE_Addr & remote_sap, + const ACE_Addr & local_sap, + int reuse_addr, + const void *act=0, + int priority = 0, + int signal_number = ACE_SIGRTMIN); + + /// Return the underlying implementation class. + // (this should be protected...) + virtual ACE_Asynch_Operation_Impl *implementation (void) const; + +protected: + /// Delegation/implementation class that all methods will be + /// forwarded to. + ACE_Asynch_Connect_Impl *implementation_; + +public: +/** + * @class Result + * + * @brief This is that class which will be passed back to the + * handler when the asynchronous connect completes. + * + * This class has all the information necessary for the + * handler to uniquely identify the completion of the + * asynchronous connect. + */ + class ACE_Export Result : public ACE_Asynch_Result + { + + /// The concrete implementation result classes only construct this + /// class. + friend class ACE_POSIX_Asynch_Connect_Result; + friend class ACE_WIN32_Asynch_Connect_Result; + + public: + + /// I/O handle for the connection. + ACE_HANDLE connect_handle (void) const; + + /// Get the implementation. + ACE_Asynch_Connect_Result_Impl *implementation (void) const; + + protected: + /// Contructor. Implementation will not be deleted. + Result (ACE_Asynch_Connect_Result_Impl *implementation); + + /// Destructor. + virtual ~Result (void); + + /// Impelmentation class. + ACE_Asynch_Connect_Result_Impl *implementation_; + }; +}; + +// Forward declarations +class ACE_Asynch_Transmit_File_Result_Impl; +class ACE_Asynch_Transmit_File_Impl; + +/** + * @class ACE_Asynch_Transmit_File + * + * @brief This class is a factory for starting off asynchronous + * transmit files on a stream. + * + * Once {open} is called, multiple asynchronous {transmit_file}s + * can started using this class. A + * ACE_Asynch_Transmit_File::Result will be passed back to the + * {handler} when the asynchronous transmit file completes + * through the {ACE_Handler::handle_transmit_file} callback. + * The transmit_file function transmits file data over a + * connected network connection. The function uses the operating + * system's cache manager to retrieve the file data. This + * function provides high-performance file data transfer over + * network connections. This function would be of great use in + * a Web Server, Image Server, etc. + */ +class ACE_Export ACE_Asynch_Transmit_File : public ACE_Asynch_Operation +{ + +public: + // Forward declarations + class Header_And_Trailer; + + /// A do nothing constructor. + ACE_Asynch_Transmit_File (void); + + /// Destructor. + virtual ~ACE_Asynch_Transmit_File (void); + + /** + * Initializes the factory with information which will be used with + * each asynchronous call. If ({handle} == ACE_INVALID_HANDLE), + * {ACE_Handler::handle} will be called on the {handler} to get the + * correct handle. + */ + int open (ACE_Handler &handler, + ACE_HANDLE handle = ACE_INVALID_HANDLE, + const void *completion_key = 0, + ACE_Proactor *proactor = 0); + + /** + * This starts off an asynchronous transmit file. The {file} is a + * handle to an open file. {header_and_trailer} is a pointer to a + * data structure that contains pointers to data to send before and + * after the file data is sent. Set this parameter to 0 if you only + * want to transmit the file data. Upto {bytes_to_write} will be + * written to the {socket}. If you want to send the entire file, + * let {bytes_to_write} = 0. {bytes_per_send} is the size of each + * block of data sent per send operation. Please read the Win32 + * documentation on what the flags should be. Priority of the + * operation is specified by {priority}. On POSIX4-Unix, this is + * supported. Works like {nice} in Unix. Negative values are not + * allowed. 0 means priority of the operation same as the process + * priority. 1 means priority of the operation is one less than + * process. And so forth. On Win32, this is a no-op. + * {signal_number} is the POSIX4 real-time signal number to be used + * for the operation. {signal_number} ranges from ACE_SIGRTMIN to + * ACE_SIGRTMAX. This argument is a no-op on non-POSIX4 systems. + */ + int transmit_file (ACE_HANDLE file, + Header_And_Trailer *header_and_trailer = 0, + size_t bytes_to_write = 0, + unsigned long offset = 0, + unsigned long offset_high = 0, + size_t bytes_per_send = 0, + unsigned long flags = 0, + const void *act = 0, + int priority = 0, + int signal_number = ACE_SIGRTMIN); + + /// Return the underlying implementation class. + // (this should be protected...) + virtual ACE_Asynch_Operation_Impl *implementation (void) const; + +protected: + /// The implementation class. + ACE_Asynch_Transmit_File_Impl *implementation_; + +public: +/** + * @class Result + * + * @brief This is that class which will be passed back to the + * {handler} when the asynchronous transmit file completes. + * + * This class has all the information necessary for the + * {handler} to uniquiely identify the completion of the + * asynchronous transmit file. + */ + class ACE_Export Result : public ACE_Asynch_Result + { + + /// The concrete implementation result classes only construct this + /// class. + friend class ACE_POSIX_Asynch_Transmit_File_Result; + friend class ACE_WIN32_Asynch_Transmit_File_Result; + + public: + /// Socket used for transmitting the file. + ACE_HANDLE socket (void) const; + + /// File from which the data is read. + ACE_HANDLE file (void) const; + + /// Header and trailer data associated with this transmit file. + Header_And_Trailer *header_and_trailer (void) const; + + /// The number of bytes which were requested at the start of the + /// asynchronous transmit file. + size_t bytes_to_write (void) const; + + /// Number of bytes per send requested at the start of the transmit + /// file. + size_t bytes_per_send (void) const; + + /// Flags which were passed into transmit file. + unsigned long flags (void) const; + + /// Get the implementation class. + ACE_Asynch_Transmit_File_Result_Impl *implementation (void) const; + + protected: + /// Constructor. + Result (ACE_Asynch_Transmit_File_Result_Impl *implementation); + + /// Destructor. + virtual ~Result (void); + + /// The implementation class. + ACE_Asynch_Transmit_File_Result_Impl *implementation_; + }; + +/** + * @class Header_And_Trailer + * + * @brief The class defines a data structure that contains pointers + * to data to send before and after the file data is sent. + * + * This class provides a wrapper over TRANSMIT_FILE_BUFFERS + * and provided a consistent use of ACE_Message_Blocks. + */ + class ACE_Export Header_And_Trailer + { + + public: + /// Constructor. + Header_And_Trailer (ACE_Message_Block *header = 0, + size_t header_bytes = 0, + ACE_Message_Block *trailer = 0, + size_t trailer_bytes = 0); + + /// Destructor + virtual ~Header_And_Trailer (void); + + /// This method allows all the member to be set in one fell swoop. + void header_and_trailer (ACE_Message_Block *header = 0, + size_t header_bytes = 0, + ACE_Message_Block *trailer = 0, + size_t trailer_bytes = 0); + + /// Get header which goes before the file data. + ACE_Message_Block *header (void) const; + + /// Set header which goes before the file data. + void header (ACE_Message_Block *message_block); + + /// Get size of the header data. + size_t header_bytes (void) const; + + /// Set size of the header data. + void header_bytes (size_t bytes); + + /// Get trailer which goes after the file data. + ACE_Message_Block *trailer (void) const; + + /// Set trailer which goes after the file data. + void trailer (ACE_Message_Block *message_block); + + /// Get size of the trailer data. + size_t trailer_bytes (void) const; + + /// Set size of the trailer data. + void trailer_bytes (size_t bytes); + + /// Conversion routine. + ACE_LPTRANSMIT_FILE_BUFFERS transmit_buffers (void); + + protected: + /// Header data. + ACE_Message_Block *header_; + + /// Size of header data. + size_t header_bytes_; + + /// Trailer data. + ACE_Message_Block *trailer_; + + /// Size of trailer data. + size_t trailer_bytes_; + + /// Target data structure. + ACE_TRANSMIT_FILE_BUFFERS transmit_buffers_; + }; +}; + + +// Forward declarations +class ACE_Asynch_Read_Dgram_Result_Impl; +class ACE_Asynch_Read_Dgram_Impl; +class ACE_Addr; + +/** + * @class ACE_Asynch_Read_Dgram + * + * @brief This class is a factory for starting off asynchronous reads + * on a UDP socket. This class forwards all methods to its + * implementation class. + * + * Once {open} is called, multiple asynchronous {read}s can be + * started using this class. An ACE_Asynch_Read_Dgram::Result + * will be passed back to the {handler} when the asynchronous + * reads completes through the {ACE_Handler::handle_read_dgram} + * callback. + */ +class ACE_Export ACE_Asynch_Read_Dgram : public ACE_Asynch_Operation +{ + +public: + /// A do nothing constructor. + ACE_Asynch_Read_Dgram (void); + + /// Destructor + virtual ~ACE_Asynch_Read_Dgram (void); + + /** + * Initializes the factory with information which will be used with + * each asynchronous call. If ({handle} == ACE_INVALID_HANDLE), + * {ACE_Handler::handle} will be called on the {handler} to get the + * correct handle. + */ + int open (ACE_Handler &handler, + ACE_HANDLE handle = ACE_INVALID_HANDLE, + const void *completion_key = 0, + ACE_Proactor *proactor = 0); + + /** This starts off an asynchronous read. Upto + * {message_block->total_size()} will be read and stored in the + * {message_block}. {message_block}'s {wr_ptr} will be updated to reflect + * the added bytes if the read operation is successfully completed. + * Return code of 1 means immediate success and {number_of_bytes_recvd} + * will contain number of bytes read. The {ACE_Handler::handle_read_dgram} + * method will still be called. Return code of 0 means the IO will + * complete proactively. Return code of -1 means there was an error, use + * errno to get the error code. + * + * Scatter/gather is supported on WIN32 by using the {message_block->cont()} + * method. Up to ACE_IOV_MAX {message_block}'s are supported. Upto + * {message_block->size()} bytes will be read into each {message block} for + * a total of {message_block->total_size()} bytes. All {message_block}'s + * {wr_ptr}'s will be updated to reflect the added bytes for each + * {message_block} + * + * Priority of the operation is specified by {priority}. On POSIX4-Unix, + * this is supported. Works like {nice} in Unix. Negative values are not + * allowed. 0 means priority of the operation same as the process + * priority. 1 means priority of the operation is one less than + * process. And so forth. On Win32, {priority} is a no-op. + * {signal_number} is the POSIX4 real-time signal number to be used + * for the operation. {signal_number} ranges from ACE_SIGRTMIN to + * ACE_SIGRTMAX. This argument is a no-op on non-POSIX4 systems. + */ + ssize_t recv (ACE_Message_Block *message_block, + size_t &number_of_bytes_recvd, + int flags, + int protocol_family = PF_INET, + const void *act = 0, + int priority = 0, + int signal_number = ACE_SIGRTMIN); + + /// Return the underlying implementation class. + // (this should be protected...) + virtual ACE_Asynch_Operation_Impl *implementation (void) const; + +protected: + /// Implementation class that all methods will be forwarded to. + ACE_Asynch_Read_Dgram_Impl *implementation_; + +public: +/** + * @class Result + * + * @brief This is the class which will be passed back to the + * {handler} when the asynchronous read completes. This class + * forwards all the methods to the implementation classes. + * + * This class has all the information necessary for the + * {handler} to uniquiely identify the completion of the + * asynchronous read. + */ + class ACE_Export Result : public ACE_Asynch_Result + { + + /// The concrete implementation result classes only construct this + /// class. + friend class ACE_POSIX_Asynch_Read_Dgram_Result; + friend class ACE_WIN32_Asynch_Read_Dgram_Result; + + public: + + /// The number of bytes which were requested at the start of the + /// asynchronous read. + size_t bytes_to_read (void) const; + + /// Message block which contains the read data + ACE_Message_Block *message_block (void) const; + + /// The flags used in the read + int flags (void) const; + + /// The address of where the packet came from + int remote_address (ACE_Addr& addr) const; + + /// I/O handle used for reading. + ACE_HANDLE handle (void) const; + + /// Get the implementation class. + ACE_Asynch_Read_Dgram_Result_Impl *implementation (void) const; + + protected: + /// Constructor. + Result (ACE_Asynch_Read_Dgram_Result_Impl *implementation); + + /// Destructor. + virtual ~Result (void); + + /// The implementation class. + ACE_Asynch_Read_Dgram_Result_Impl *implementation_; + }; +}; + +// Forward declarations +class ACE_Asynch_Write_Dgram_Impl; +class ACE_Asynch_Write_Dgram_Result_Impl; + +/** + * @class ACE_Asynch_Write_Dgram + * + * @brief This class is a factory for starting off asynchronous writes + * on a UDP socket. This class forwards all methods to its + * implementation class. + * + * Once {open} is called, multiple asynchronous {writes}s can + * started using this class. An ACE_Asynch_Write_Dgram::Result + * will be passed back to the {handler} when the asynchronous + * write completes through the + * {ACE_Handler::handle_write_dgram} callback. + */ +class ACE_Export ACE_Asynch_Write_Dgram : public ACE_Asynch_Operation +{ + +public: + /// A do nothing constructor. + ACE_Asynch_Write_Dgram (void); + + /// Destructor. + virtual ~ACE_Asynch_Write_Dgram (void); + + /** + * Initializes the factory with information which will be used with + * each asynchronous call. If ({handle} == ACE_INVALID_HANDLE), + * {ACE_Handler::handle} will be called on the {handler} to get the + * correct handle. + */ + int open (ACE_Handler &handler, + ACE_HANDLE handle = ACE_INVALID_HANDLE, + const void *completion_key = 0, + ACE_Proactor *proactor = 0); + + /** This starts off an asynchronous send. Upto + * {message_block->total_length()} will be sent. {message_block}'s + * {rd_ptr} will be updated to reflect the sent bytes if the send operation + * is successfully completed. + * Return code of 1 means immediate success and {number_of_bytes_sent} + * is updated to number of bytes sent. The {ACE_Handler::handle_write_dgram} + * method will still be called. Return code of 0 means the IO will + * complete proactively. Return code of -1 means there was an error, use + * errno to get the error code. + * + * Scatter/gather is supported on WIN32 by using the {message_block->cont()} + * method. Up to ACE_IOV_MAX {message_block}'s are supported. Upto + * {message_block->length()} bytes will be sent from each {message block} + * for a total of {message_block->total_length()} bytes. All + * {message_block}'s {rd_ptr}'s will be updated to reflect the bytes sent + * from each {message_block}. + * + * Priority of the operation is specified by {priority}. On POSIX4-Unix, + * this is supported. Works like {nice} in Unix. Negative values are not + * allowed. 0 means priority of the operation same as the process + * priority. 1 means priority of the operation is one less than + * process. And so forth. On Win32, this argument is a no-op. + * {signal_number} is the POSIX4 real-time signal number to be used + * for the operation. {signal_number} ranges from ACE_SIGRTMIN to + * ACE_SIGRTMAX. This argument is a no-op on non-POSIX4 systems. + */ + ssize_t send (ACE_Message_Block *message_block, + size_t &number_of_bytes_sent, + int flags, + const ACE_Addr& remote_addr, + const void *act = 0, + int priority = 0, + int signal_number = ACE_SIGRTMIN); + + /// Return the underlying implementation class. + // (this should be protected...) + virtual ACE_Asynch_Operation_Impl *implementation (void) const; + +protected: + /// Implementation class that all methods will be forwarded to. + ACE_Asynch_Write_Dgram_Impl *implementation_; + +public: +/** + * @class Result + * + * @brief This is that class which will be passed back to the + * {handler} when the asynchronous write completes. This class + * forwards all the methods to the implementation class. + * + * This class has all the information necessary for the + * {handler} to uniquiely identify the completion of the + * asynchronous write. + */ + class ACE_Export Result : public ACE_Asynch_Result + { + + /// The concrete implementation result classes only construct this + /// class. + friend class ACE_POSIX_Asynch_Write_Dgram_Result; + friend class ACE_WIN32_Asynch_Write_Dgram_Result; + + public: + + /// The number of bytes which were requested at the start of the + /// asynchronous write. + size_t bytes_to_write (void) const; + + /// Message block which contains the sent data + ACE_Message_Block *message_block (void) const; + + /// The flags using in the write + int flags (void) const; + + /// I/O handle used for writing. + ACE_HANDLE handle (void) const; + + /// Get the implementation class. + ACE_Asynch_Write_Dgram_Result_Impl *implementation (void) const; + + protected: + /// Constructor. + Result (ACE_Asynch_Write_Dgram_Result_Impl *implementation); + + /// Destructor. + virtual ~Result (void); + + /// Implementation class. + ACE_Asynch_Write_Dgram_Result_Impl *implementation_; + }; +}; + + +/** + * @class ACE_Handler + * + * @brief This base class defines the interface for receiving the + * results of asynchronous operations. + * + * Subclasses of this class will fill in appropriate methods. + */ +class ACE_Export ACE_Handler +{ +public: + /// A do nothing constructor. + ACE_Handler (void); + + /// A do nothing constructor which allows proactor to be set to \. + ACE_Handler (ACE_Proactor *p); + + /// Virtual destruction. + virtual ~ACE_Handler (void); + + /// This method will be called when an asynchronous read completes on + /// a stream. + virtual void handle_read_stream (const ACE_Asynch_Read_Stream::Result &result); + + /// This method will be called when an asynchronous write completes + /// on a UDP socket. + virtual void handle_write_dgram (const ACE_Asynch_Write_Dgram::Result &result); + + /// This method will be called when an asynchronous read completes on + /// a UDP socket. + virtual void handle_read_dgram (const ACE_Asynch_Read_Dgram::Result &result); + + /// This method will be called when an asynchronous write completes + /// on a stream. + virtual void handle_write_stream (const ACE_Asynch_Write_Stream::Result &result); + + /// This method will be called when an asynchronous read completes on + /// a file. + virtual void handle_read_file (const ACE_Asynch_Read_File::Result &result); + + /// This method will be called when an asynchronous write completes + /// on a file. + virtual void handle_write_file (const ACE_Asynch_Write_File::Result &result); + + /// This method will be called when an asynchronous accept completes. + virtual void handle_accept (const ACE_Asynch_Accept::Result &result); + + /// This method will be called when an asynchronous connect completes. + virtual void handle_connect (const ACE_Asynch_Connect::Result &result); + + /// This method will be called when an asynchronous transmit file + /// completes. + virtual void handle_transmit_file (const ACE_Asynch_Transmit_File::Result &result); + + /// Called when timer expires. {tv} was the requested time value and + /// {act} is the ACT passed when scheduling the timer. + virtual void handle_time_out (const ACE_Time_Value &tv, + const void *act = 0); + + /** + * This is method works with the {run_event_loop} of the + * ACE_Proactor. A special {Wake_Up_Completion} is used to wake up + * all the threads that are blocking for completions. + */ + virtual void handle_wakeup (void); + + /// Get the proactor associated with this handler. + ACE_Proactor *proactor (void); + + /// Set the proactor. + void proactor (ACE_Proactor *p); + + /** + * Get the I/O handle used by this {handler}. This method will be + * called by the ACE_Asynch_* classes when an ACE_INVALID_HANDLE is + * passed to {open}. + */ + virtual ACE_HANDLE handle (void) const; + + /// Set the ACE_HANDLE value for this Handler. + virtual void handle (ACE_HANDLE); + + /** + * @class Proxy + * + * @brief The Proxy class acts as a proxy for dispatch of completions + * to operations issued for the associated handler. It allows the handler + * to be deleted while operations are outstanding. The proxy must be used + * to get the ACE_Handler pointer for dispatching, and if it's 0, the + * handler is no longer valid and the result should not be dispatched. + */ + class ACE_Export Proxy + { + public: + Proxy (ACE_Handler *handler) : handler_ (handler) {}; + void reset (void) { this->handler_ = 0; }; + ACE_Handler *handler (void) { return this->handler_; }; + private: + ACE_Handler *handler_; + }; + typedef ACE_Refcounted_Auto_Ptr + Proxy_Ptr; + + Proxy_Ptr &proxy (void); + +protected: + /// The proactor associated with this handler. + ACE_Proactor *proactor_; + + /// The ACE_HANDLE in use with this handler. + ACE_HANDLE handle_; + + /// Refers to proxy for this handler. + ACE_Refcounted_Auto_Ptr proxy_; + + ACE_UNIMPLEMENTED_FUNC (ACE_Handler (const ACE_Handler &)) + ACE_UNIMPLEMENTED_FUNC (ACE_Handler operator= (const ACE_Handler &)) +}; + +// Forward declarations +class ACE_INET_Addr; + +// Forward declarations +template +class ACE_Asynch_Acceptor; + +/** + * @class ACE_Service_Handler + * + * @brief This base class defines the interface for the + * ACE_Asynch_Acceptor to call into when new connection are + * accepted. + * + * Subclasses of this class will fill in appropriate methods to + * define application specific behavior. + */ +class ACE_Export ACE_Service_Handler : public ACE_Handler +{ + + /// The Acceptor is the factory and therefore should have special + /// privileges. + friend class ACE_Asynch_Acceptor; + +public: + /// A do nothing constructor. + ACE_Service_Handler (void); + + /// Virtual destruction. + virtual ~ACE_Service_Handler (void); + + /** + * {open} is called by ACE_Asynch_Acceptor to initialize a new + * instance of ACE_Service_Handler that has been created after the + * new connection is accepted. The handle for the new connection is + * passed along with the initial data that may have shown up. + */ + virtual void open (ACE_HANDLE new_handle, + ACE_Message_Block &message_block); + + // protected: + // This should be corrected after the correct semantics of the + // friend has been figured out. + + /// Called by ACE_Asynch_Acceptor to pass the addresses of the new + /// connections. + virtual void addresses (const ACE_INET_Addr &remote_address, + const ACE_INET_Addr &local_address); + + /// Called by ACE_Asynch_Acceptor to pass the act. + virtual void act (const void *); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_WIN32 || ACE_HAS_AIO_CALLS*/ +#include /**/ "ace/post.h" +#endif /* ACE_ASYNCH_IO_H */ diff --git a/ACE/ace/Asynch_IO_Impl.cpp b/ACE/ace/Asynch_IO_Impl.cpp new file mode 100644 index 00000000000..5349f5e7ca1 --- /dev/null +++ b/ACE/ace/Asynch_IO_Impl.cpp @@ -0,0 +1,117 @@ +// $Id$ + +#include "ace/Asynch_IO_Impl.h" + +#if defined (ACE_HAS_WIN32_OVERLAPPED_IO) || defined (ACE_HAS_AIO_CALLS) +// This only works on Win32 platforms and on Unix platforms supporting +// aio calls. + +#if !defined (__ACE_INLINE__) +#include "ace/Asynch_IO_Impl.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Asynch_Result_Impl::~ACE_Asynch_Result_Impl (void) +{ +} + +ACE_Asynch_Operation_Impl::~ACE_Asynch_Operation_Impl (void) +{ +} + +ACE_Asynch_Read_Stream_Impl::~ACE_Asynch_Read_Stream_Impl (void) +{ +} + +ACE_Asynch_Read_Stream_Result_Impl::~ACE_Asynch_Read_Stream_Result_Impl (void) +{ +} + +ACE_Asynch_Write_Stream_Impl::~ACE_Asynch_Write_Stream_Impl (void) +{ +} + +ACE_Asynch_Write_Stream_Result_Impl::~ACE_Asynch_Write_Stream_Result_Impl (void) +{ +} + +ACE_Asynch_Read_File_Impl::~ACE_Asynch_Read_File_Impl (void) +{ +} + +ACE_Asynch_Write_File_Impl::~ACE_Asynch_Write_File_Impl (void) +{ +} + +ACE_Asynch_Read_File_Result_Impl::~ACE_Asynch_Read_File_Result_Impl (void) +{ +} + +ACE_Asynch_Write_File_Result_Impl::~ACE_Asynch_Write_File_Result_Impl (void) +{ +} + +ACE_Asynch_Accept_Result_Impl::~ACE_Asynch_Accept_Result_Impl (void) +{ +} + +ACE_Asynch_Connect_Result_Impl::~ACE_Asynch_Connect_Result_Impl (void) +{ +} + +ACE_Asynch_Accept_Impl::~ACE_Asynch_Accept_Impl (void) +{ +} + +ACE_Asynch_Connect_Impl::~ACE_Asynch_Connect_Impl (void) +{ +} + +ACE_Asynch_Transmit_File_Impl::~ACE_Asynch_Transmit_File_Impl (void) +{ +} + +ACE_Asynch_Transmit_File_Result_Impl::~ACE_Asynch_Transmit_File_Result_Impl (void) +{ +} + +ACE_Asynch_Read_Dgram_Impl::~ACE_Asynch_Read_Dgram_Impl (void) +{ +} + +ACE_Asynch_Read_Dgram_Impl::ACE_Asynch_Read_Dgram_Impl (void) +{ +} + +ACE_Asynch_Write_Dgram_Impl::~ACE_Asynch_Write_Dgram_Impl (void) +{ +} + +ACE_Asynch_Write_Dgram_Impl::ACE_Asynch_Write_Dgram_Impl (void) +{ +} + +//*********************************************** + +ACE_Asynch_Read_Dgram_Result_Impl::~ACE_Asynch_Read_Dgram_Result_Impl (void) +{ +} + +ACE_Asynch_Read_Dgram_Result_Impl::ACE_Asynch_Read_Dgram_Result_Impl (void) +{ +} + +//*********************************************** + +ACE_Asynch_Write_Dgram_Result_Impl::~ACE_Asynch_Write_Dgram_Result_Impl (void) +{ +} + +ACE_Asynch_Write_Dgram_Result_Impl::ACE_Asynch_Write_Dgram_Result_Impl (void) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_WIN32_OVERLAPPED_IO || ACE_HAS_AIO_CALLS */ diff --git a/ACE/ace/Asynch_IO_Impl.h b/ACE/ace/Asynch_IO_Impl.h new file mode 100644 index 00000000000..b2a308a7565 --- /dev/null +++ b/ACE/ace/Asynch_IO_Impl.h @@ -0,0 +1,816 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Asynch_IO_Impl.h + * + * $Id$ + * + * + * This class contains asbtract base classes for all the concrete + * implementation classes for the various asynchronous operations + * that are used with the Praoctor. + * + * + * @author Irfan Pyarali (irfan@cs.wustl.edu) + * @author Tim Harrison (harrison@cs.wustl.edu) + * @author Alexander Babu Arulanthu + * @author Roger Tragin + * @author Alexander Libman + */ +//============================================================================= + +#ifndef ACE_ASYNCH_IO_IMPL_H +#define ACE_ASYNCH_IO_IMPL_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_WIN32_OVERLAPPED_IO) || defined (ACE_HAS_AIO_CALLS) +// This only works on Win32 platforms and on Unix platforms supporting +// aio calls. + +#include "ace/Asynch_IO.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Forward declaration. +class ACE_Proactor_Impl; + +/** + * @class ACE_Asynch_Result_Impl + * + * @brief Abstract base class for the all the classes that provide + * concrete implementations for ACE_Asynch_Result. + * + */ +class ACE_Export ACE_Asynch_Result_Impl +{ +public: + virtual ~ACE_Asynch_Result_Impl (void); + + /// Number of bytes transferred by the operation. + virtual size_t bytes_transferred (void) const = 0; + + /// ACT associated with the operation. + virtual const void *act (void) const = 0; + + /// Did the operation succeed? + virtual int success (void) const = 0; + + /// This ACT is not the same as the ACT associated with the + /// asynchronous operation. + virtual const void *completion_key (void) const = 0; + + /// Error value if the operation fail. + virtual u_long error (void) const = 0; + + /// Event associated with the OVERLAPPED structure. + virtual ACE_HANDLE event (void) const = 0; + + /// This really make sense only when doing file I/O. + virtual u_long offset (void) const = 0; + virtual u_long offset_high (void) const = 0; + + /// Priority of the operation. + virtual int priority (void) const = 0; + + /** + * POSIX4 real-time signal number to be used for the + * operation. ranges from SIGRTMIN to SIGRTMAX. By + * default, SIGRTMIN is used to issue calls. This is a no-op + * on non-POSIX4 systems and returns 0. + */ + virtual int signal_number (void) const = 0; + + // protected: + // + // These two should really be protected. But sometimes it + // simplifies code to be able to "fake" a result. Use carefully. + /// This is called when the asynchronous operation completes. + virtual void complete (size_t bytes_transferred, + int success, + const void *completion_key, + u_long error = 0) = 0; + + /// Post @c this to the Proactor's completion port. + virtual int post_completion (ACE_Proactor_Impl *proactor) = 0; + +protected: + /// Do-nothing constructor. + ACE_Asynch_Result_Impl (void); +}; + +/** + * @class ACE_Asynch_Operation_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Operation. + */ +class ACE_Export ACE_Asynch_Operation_Impl +{ +public: + virtual ~ACE_Asynch_Operation_Impl (void); + + /** + * Initializes the factory with information which will be used with + * each asynchronous call. If @a handle == ACE_INVALID_HANDLE, + * ACE_Handler::handle() will be called on the proxied handler to get the + * correct handle. + */ + virtual int open (const ACE_Handler::Proxy_Ptr &handler_proxy, + ACE_HANDLE handle, + const void *completion_key, + ACE_Proactor *proactor) = 0; + + /** + * This cancels all pending accepts operations that were issued by + * the calling thread. The function does not cancel asynchronous + * operations issued by other threads. + */ + virtual int cancel (void) = 0; + + // = Access methods. + + /// Return the underlying proactor. + virtual ACE_Proactor* proactor (void) const = 0; + +protected: + /// Do-nothing constructor. + ACE_Asynch_Operation_Impl (void); +}; + +/** + * @class ACE_Asynch_Read_Stream_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Read_Stream + * + */ +class ACE_Export ACE_Asynch_Read_Stream_Impl : public virtual ACE_Asynch_Operation_Impl +{ +public: + virtual ~ACE_Asynch_Read_Stream_Impl (void); + + /// This starts off an asynchronous read. Upto @a bytes_to_read will + /// be read and stored in the @a message_block. + virtual int read (ACE_Message_Block &message_block, + size_t bytes_to_read, + const void *act, + int priority, + int signal_number) = 0; + +#if (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) + /** + * Same as above but with scatter support, through chaining of composite + * message blocks using the continuation field. + */ + virtual int readv (ACE_Message_Block &message_block, + size_t bytes_to_read, + const void *act, + int priority, + int signal_number) = 0; +#endif /* (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) */ + +protected: + /// Do-nothing constructor. + ACE_Asynch_Read_Stream_Impl (void); +}; + +/** + * @class ACE_Asynch_Read_Stream_Result_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Read_Stream::Result class. + * + */ +class ACE_Export ACE_Asynch_Read_Stream_Result_Impl : public virtual ACE_Asynch_Result_Impl +{ +public: + virtual ~ACE_Asynch_Read_Stream_Result_Impl (void); + + /// The number of bytes which were requested at the start of the + /// asynchronous read. + virtual size_t bytes_to_read (void) const = 0; + + /// Message block which contains the read data. + virtual ACE_Message_Block &message_block (void) const = 0; + + /// I/O handle used for reading. + virtual ACE_HANDLE handle (void) const = 0; + +protected: + /// Do-nothing constructor. + ACE_Asynch_Read_Stream_Result_Impl (void); +}; + +/** + * @class ACE_Asynch_Write_Stream_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Write_Stream class. + * + */ +class ACE_Export ACE_Asynch_Write_Stream_Impl : public virtual ACE_Asynch_Operation_Impl +{ +public: + virtual ~ACE_Asynch_Write_Stream_Impl (void); + + /// This starts off an asynchronous write. Upto @a bytes_to_write + /// will be written from the @a message_block. + virtual int write (ACE_Message_Block &message_block, + size_t bytes_to_write, + const void *act, + int priority, + int signal_number) = 0; + +#if (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) + /** + * Same as above but with gather support, through chaining of composite + * message blocks using the continuation field. + */ + virtual int writev (ACE_Message_Block &message_block, + size_t bytes_to_write, + const void *act, + int priority, + int signal_number) = 0; +#endif /* (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) */ + +protected: + /// Do-nothing constructor. + ACE_Asynch_Write_Stream_Impl (void); +}; + +/** + * @class ACE_Asynch_Write_Stream_Result_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Write_Stream::Result. + * + */ +class ACE_Export ACE_Asynch_Write_Stream_Result_Impl : public virtual ACE_Asynch_Result_Impl +{ +public: + virtual ~ACE_Asynch_Write_Stream_Result_Impl (void); + + /// The number of bytes which were requested at the start of the + /// asynchronous write. + virtual size_t bytes_to_write (void) const = 0; + + /// Message block that contains the data to be written. + virtual ACE_Message_Block &message_block (void) const = 0; + + /// I/O handle used for writing. + virtual ACE_HANDLE handle (void) const = 0; + +protected: + /// Do-nothing constructor. + ACE_Asynch_Write_Stream_Result_Impl (void); +}; + +/** + * @class ACE_Asynch_Read_File_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Read_File::Result. + * + */ +class ACE_Export ACE_Asynch_Read_File_Impl : public virtual ACE_Asynch_Read_Stream_Impl +{ +public: + virtual ~ACE_Asynch_Read_File_Impl (void); + + /** + * This starts off an asynchronous read. Upto @a bytes_to_read will + * be read and stored in the @a message_block. The read will start + * at @a offset from the beginning of the file. + */ + virtual int read (ACE_Message_Block &message_block, + size_t bytes_to_read, + u_long offset, + u_long offset_high, + const void *act, + int priority, + int signal_number) = 0; + +#if (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) + /** + * Same as above but with scatter support, through chaining of composite + * message blocks using the continuation field. + * @note In win32 Each data block payload must be at least the size of a system + * memory page and must be aligned on a system memory page size boundary + */ + virtual int readv (ACE_Message_Block &message_block, + size_t bytes_to_read, + u_long offset, + u_long offset_high, + const void *act, + int priority, + int signal_number) = 0; +#endif /* (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) */ + + /// This starts off an asynchronous read. Upto @a bytes_to_read will + /// be read and stored in the @a message_block. + virtual int read (ACE_Message_Block &message_block, + size_t bytes_to_read, + const void *act, + int priority, + int signal_number) = 0; + +#if (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) + /** + * Same as above but with scatter support, through chaining of composite + * message blocks using the continuation field. + */ + virtual int readv (ACE_Message_Block &message_block, + size_t bytes_to_read, + const void *act, + int priority, + int signal_number) = 0; +#endif /* (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) */ + +protected: + /// Do-nothing constructor. + ACE_Asynch_Read_File_Impl (void); +}; + +/** + * @class ACE_Asynch_Read_File_Result_Impl + * + * @brief This is the abstract base class for all the concrete + * implementation classes for ACE_Asynch_Read_File::Result. + * + */ +class ACE_Export ACE_Asynch_Read_File_Result_Impl : public virtual ACE_Asynch_Read_Stream_Result_Impl +{ +public: + /// Destructor. + virtual ~ACE_Asynch_Read_File_Result_Impl (void); + +protected: + /// Do-nothing constructor. + ACE_Asynch_Read_File_Result_Impl (void); +}; + +/** + * @class ACE_Asynch_Write_File_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Write_File. + * + */ +class ACE_Export ACE_Asynch_Write_File_Impl : public virtual ACE_Asynch_Write_Stream_Impl +{ +public: + virtual ~ACE_Asynch_Write_File_Impl (void); + + /** + * This starts off an asynchronous write. Upto @a bytes_to_write + * will be write and stored in the @a message_block. The write will + * start at @a offset from the beginning of the file. + */ + virtual int write (ACE_Message_Block &message_block, + size_t bytes_to_write, + u_long offset, + u_long offset_high, + const void *act, + int priority, + int signal_number) = 0; + +#if (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) + /** + * Same as above but with gather support, through chaining of composite + * message blocks using the continuation field. + * @note In win32 Each data block payload must be at least the size of a system + * memory page and must be aligned on a system memory page size boundary + */ + virtual int writev (ACE_Message_Block &message_block, + size_t bytes_to_write, + u_long offset, + u_long offset_high, + const void *act, + int priority, + int signal_number) = 0; +#endif /* (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) */ + + /// This starts off an asynchronous write. Upto @a bytes_to_write + /// will be written from the @a message_block. + virtual int write (ACE_Message_Block &message_block, + size_t bytes_to_write, + const void *act, + int priority, + int signal_number) = 0; + +#if (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) + /** + * Same as above but with gather support, through chaining of composite + * message blocks using the continuation field. + */ + virtual int writev (ACE_Message_Block &message_block, + size_t bytes_to_write, + const void *act, + int priority, + int signal_number) = 0; +#endif /* (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) */ + +protected: + /// Do-nothing constructor. + ACE_Asynch_Write_File_Impl (void); +}; + +/** + * @class ACE_Asynch_Write_File_Result_Impl + * + * @brief This is the abstract base class for all the concrete + * implementation classes that provide different implementations + * for the ACE_Asynch_Write_File::Result. + * + */ +class ACE_Export ACE_Asynch_Write_File_Result_Impl : public virtual ACE_Asynch_Write_Stream_Result_Impl +{ +public: + virtual ~ACE_Asynch_Write_File_Result_Impl (void); + +protected: + /// Do-nothing constructor. + ACE_Asynch_Write_File_Result_Impl (void); +}; + +/** + * @class ACE_Asynch_Accept_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Accept. + * + */ +class ACE_Export ACE_Asynch_Accept_Impl : public virtual ACE_Asynch_Operation_Impl +{ +public: + virtual ~ACE_Asynch_Accept_Impl (void); + + /** + * This starts off an asynchronous accept. The asynchronous accept + * call also allows any initial data to be returned to the + * . Upto @a bytes_to_read will be read and stored in the + * @a message_block. The @a accept_handle will be used for the + * call. If (@a accept_handle == INVALID_HANDLE), a new + * handle will be created. + * + * @a message_block must be specified. This is because the address of + * the new connection is placed at the end of this buffer. + */ + virtual int accept (ACE_Message_Block &message_block, + size_t bytes_to_read, + ACE_HANDLE accept_handle, + const void *act, + int priority, + int signal_number, + int addr_family) = 0; + +protected: + /// Do-nothing constructor. + ACE_Asynch_Accept_Impl (void); +}; + +/** + * @class ACE_Asynch_Accept_Result_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Accept. + * + */ +class ACE_Export ACE_Asynch_Accept_Result_Impl : public virtual ACE_Asynch_Result_Impl +{ +public: + virtual ~ACE_Asynch_Accept_Result_Impl (void); + + /// The number of bytes which were requested at the start of the + /// asynchronous accept. + virtual size_t bytes_to_read (void) const = 0; + + /// Message block which contains the read data. + virtual ACE_Message_Block &message_block (void) const = 0; + + /// I/O handle used for accepting new connections. + virtual ACE_HANDLE listen_handle (void) const = 0; + + /// I/O handle for the new connection. + virtual ACE_HANDLE accept_handle (void) const = 0; + +protected: + /// Do-nothing constructor. + ACE_Asynch_Accept_Result_Impl (void); +}; + + +/** + * @class ACE_Asynch_Connect_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Connect. + * + */ +class ACE_Export ACE_Asynch_Connect_Impl : public virtual ACE_Asynch_Operation_Impl +{ +public: + virtual ~ACE_Asynch_Connect_Impl (void); + + /** + * This starts off an asynchronous connect + */ + virtual int connect (ACE_HANDLE connect_handle, + const ACE_Addr & remote_sap, + const ACE_Addr & local_sap, + int reuse_addr, + const void *act, + int priority, + int signal_number) = 0; + +protected: + /// Do-nothing constructor. + ACE_Asynch_Connect_Impl (void); +}; + +/** + * @class ACE_Asynch_Connect_Result_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Connect. + * + */ +class ACE_Export ACE_Asynch_Connect_Result_Impl : public virtual ACE_Asynch_Result_Impl +{ +public: + virtual ~ACE_Asynch_Connect_Result_Impl (void); + + /// I/O handle for the connection. + virtual ACE_HANDLE connect_handle (void) const = 0; + +protected: + /// Do-nothing constructor. + ACE_Asynch_Connect_Result_Impl (void); +}; + + +/** + * @class ACE_Asynch_Transmit_File_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Transmit_File. + * + */ +class ACE_Asynch_Transmit_File_Impl : public virtual ACE_Asynch_Operation_Impl +{ +public: + virtual ~ACE_Asynch_Transmit_File_Impl (void); + + /// This starts off an asynchronous transmit file. + virtual int transmit_file (ACE_HANDLE file, + ACE_Asynch_Transmit_File::Header_And_Trailer *header_and_trailer, + size_t bytes_to_write, + u_long offset, + u_long offset_high, + size_t bytes_per_send, + u_long flags, + const void *act, + int priority, + int signal_number) = 0; + +protected: + /// Do-nothing constructor. + ACE_Asynch_Transmit_File_Impl (void); +}; + +/** + * @class ACE_Asynch_Transmit_File_Result_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Transmit_File::Result. + * + */ +class ACE_Export ACE_Asynch_Transmit_File_Result_Impl : public virtual ACE_Asynch_Result_Impl +{ +public: + virtual ~ACE_Asynch_Transmit_File_Result_Impl (void); + + /// Socket used for transmitting the file. + virtual ACE_HANDLE socket (void) const = 0; + + /// File from which the data is read. + virtual ACE_HANDLE file (void) const = 0; + + /// Header and trailer data associated with this transmit file. + virtual ACE_Asynch_Transmit_File::Header_And_Trailer *header_and_trailer (void) const = 0; + + /// The number of bytes which were requested at the start of the + /// asynchronous transmit file. + virtual size_t bytes_to_write (void) const = 0; + + /// Number of bytes per send requested at the start of the transmit + /// file. + virtual size_t bytes_per_send (void) const = 0; + + /// Flags which were passed into transmit file. + virtual u_long flags (void) const = 0; + +protected: + /// Do-nothing constructor. + ACE_Asynch_Transmit_File_Result_Impl (void); +}; + + +/** + * @class ACE_Asynch_Read_Dgram_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Read_Dgram + * + */ +class ACE_Export ACE_Asynch_Read_Dgram_Impl : public virtual ACE_Asynch_Operation_Impl +{ +public: + virtual ~ACE_Asynch_Read_Dgram_Impl (void); + + /** This starts off an asynchronous read. Upto + * total_size()> will be read and stored in the + * @a message_block. @a message_block's will be updated to reflect + * the added bytes if the read operation is successful completed. + * Return code of 1 means immediate success and + * will contain number of bytes read. The + * method will still be called. Return code of 0 means the IO will + * complete proactively. Return code of -1 means there was an error, use + * errno to get the error code. + * + * Scatter/gather is supported on WIN32 by using the cont()> + * method. Up to ACE_IOV_MAX @a message_block's are supported. Upto + * size()> bytes will be read into each for + * a total of total_size()> bytes. All @a message_block's + * 's will be updated to reflect the added bytes for each + * @a message_block + * + * Priority of the operation is specified by @a priority. On POSIX4-Unix, + * this is supported. Works like in Unix. Negative values are not + * allowed. 0 means priority of the operation same as the process + * priority. 1 means priority of the operation is one less than + * process. And so forth. On Win32, @a priority is a no-op. + * @a signal_number is the POSIX4 real-time signal number to be used + * for the operation. @a signal_number ranges from ACE_SIGRTMIN to + * ACE_SIGRTMAX. This argument is a no-op on non-POSIX4 systems. + */ + virtual ssize_t recv (ACE_Message_Block *message_block, + size_t &number_of_bytes_recvd, + int flags, + int protocol_family, + const void *act, + int priority, + int signal_number) = 0; + +protected: + /// Do-nothing constructor. + ACE_Asynch_Read_Dgram_Impl (void); +}; + +/** + * @class ACE_Asynch_Read_Dgram_Result_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Read_Dgram::Result class. + * + */ +class ACE_Export ACE_Asynch_Read_Dgram_Result_Impl : public virtual ACE_Asynch_Result_Impl +{ +public: + virtual ~ACE_Asynch_Read_Dgram_Result_Impl (void); + + /// Message block which contains the read data + virtual ACE_Message_Block *message_block (void) const = 0; + + /// The number of bytes which were requested at the start of the + /// asynchronous read. + virtual size_t bytes_to_read (void) const = 0; + + /// The address of where the packet came from + virtual int remote_address (ACE_Addr& addr) const = 0; + + /// The flags used in the read + virtual int flags (void) const = 0; + + /// I/O handle used for reading. + virtual ACE_HANDLE handle (void) const = 0; + +protected: + /// Do-nothing constructor. + ACE_Asynch_Read_Dgram_Result_Impl (void); +}; + +/** + * @class ACE_Asynch_Write_Dgram_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Write_Dgram class. + * + */ +class ACE_Export ACE_Asynch_Write_Dgram_Impl : public virtual ACE_Asynch_Operation_Impl +{ +public: + virtual ~ACE_Asynch_Write_Dgram_Impl (void); + + /** This starts off an asynchronous send. Upto + * total_length()> will be sent. @a message_block's + * will be updated to reflect the sent bytes if the send operation + * is successful completed. + * Return code of 1 means immediate success and + * is updated to number of bytes sent. The + * method will still be called. Return code of 0 means the IO will + * complete proactively. Return code of -1 means there was an error, use + * errno to get the error code. + * + * Scatter/gather is supported on WIN32 by using the cont()> + * method. Up to ACE_IOV_MAX @a message_block's are supported. Upto + * length()> bytes will be sent from each + * for a total of total_length()> bytes. All + * @a message_block's 's will be updated to reflect the bytes sent + * from each @a message_block. + * + * Priority of the operation is specified by @a priority. On POSIX4-Unix, + * this is supported. Works like in Unix. Negative values are not + * allowed. 0 means priority of the operation same as the process + * priority. 1 means priority of the operation is one less than + * process. And so forth. On Win32, this argument is a no-op. + * @a signal_number is the POSIX4 real-time signal number to be used + * for the operation. @a signal_number ranges from ACE_SIGRTMIN to + * ACE_SIGRTMAX. This argument is a no-op on non-POSIX4 systems. + */ + virtual ssize_t send (ACE_Message_Block *message_block, + size_t &number_of_bytes_sent, + int flags, + const ACE_Addr &addr, + const void *act, + int priority, + int signal_number) = 0; + +protected: + /// Do-nothing constructor. + ACE_Asynch_Write_Dgram_Impl (void); +}; + +/** + * @class ACE_Asynch_Write_Dgram_Result_Impl + * + * @brief Abstract base class for all the concrete implementation + * classes that provide different implementations for the + * ACE_Asynch_Write_Dgram::Result class. + * + */ +class ACE_Export ACE_Asynch_Write_Dgram_Result_Impl : public virtual ACE_Asynch_Result_Impl +{ +public: + virtual ~ACE_Asynch_Write_Dgram_Result_Impl (void); + + /// The number of bytes which were requested at the start of the + /// asynchronous write. + virtual size_t bytes_to_write (void) const = 0; + + /// Message block which contains the sent data + virtual ACE_Message_Block *message_block (void) const = 0; + + /// The flags using in the write + virtual int flags (void) const = 0; + + /// I/O handle used for writing. + virtual ACE_HANDLE handle (void) const = 0; + +protected: + /// Do-nothing constructor. + ACE_Asynch_Write_Dgram_Result_Impl (void); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Asynch_IO_Impl.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* ACE_HAS_WIN32_OVERLAPPED_IO || ACE_HAS_AIO_CALLS */ +#include /**/ "ace/post.h" +#endif /* ACE_ASYNCH_IO_IMPL_H */ diff --git a/ACE/ace/Asynch_IO_Impl.inl b/ACE/ace/Asynch_IO_Impl.inl new file mode 100644 index 00000000000..495a768a972 --- /dev/null +++ b/ACE/ace/Asynch_IO_Impl.inl @@ -0,0 +1,106 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_Asynch_Result_Impl::ACE_Asynch_Result_Impl (void) +{ +} + +ACE_INLINE +ACE_Asynch_Operation_Impl::ACE_Asynch_Operation_Impl (void) +{ +} + +ACE_INLINE +ACE_Asynch_Read_Stream_Impl::ACE_Asynch_Read_Stream_Impl (void) + : ACE_Asynch_Operation_Impl () +{ +} + +ACE_INLINE +ACE_Asynch_Read_Stream_Result_Impl::ACE_Asynch_Read_Stream_Result_Impl (void) + : ACE_Asynch_Result_Impl () +{ +} + +ACE_INLINE +ACE_Asynch_Write_Stream_Impl::ACE_Asynch_Write_Stream_Impl (void) + : ACE_Asynch_Operation_Impl () +{ +} + +ACE_INLINE +ACE_Asynch_Write_Stream_Result_Impl::ACE_Asynch_Write_Stream_Result_Impl (void) + : ACE_Asynch_Result_Impl () +{ +} + +ACE_INLINE +ACE_Asynch_Read_File_Impl::ACE_Asynch_Read_File_Impl (void) + : ACE_Asynch_Operation_Impl (), + ACE_Asynch_Read_Stream_Impl () +{ +} + +ACE_INLINE +ACE_Asynch_Read_File_Result_Impl::ACE_Asynch_Read_File_Result_Impl (void) + : ACE_Asynch_Result_Impl (), + ACE_Asynch_Read_Stream_Result_Impl () +{ +} + +ACE_INLINE +ACE_Asynch_Write_File_Impl::ACE_Asynch_Write_File_Impl (void) + : ACE_Asynch_Operation_Impl (), + ACE_Asynch_Write_Stream_Impl () +{ +} + +ACE_INLINE +ACE_Asynch_Write_File_Result_Impl::ACE_Asynch_Write_File_Result_Impl (void) + : ACE_Asynch_Result_Impl (), + ACE_Asynch_Write_Stream_Result_Impl () +{ +} + +ACE_INLINE +ACE_Asynch_Accept_Impl::ACE_Asynch_Accept_Impl (void) + : ACE_Asynch_Operation_Impl () +{ +} + +ACE_INLINE +ACE_Asynch_Accept_Result_Impl::ACE_Asynch_Accept_Result_Impl (void) + : ACE_Asynch_Result_Impl () +{ +} + +ACE_INLINE +ACE_Asynch_Connect_Impl::ACE_Asynch_Connect_Impl (void) + : ACE_Asynch_Operation_Impl () +{ +} + +ACE_INLINE +ACE_Asynch_Connect_Result_Impl::ACE_Asynch_Connect_Result_Impl (void) + : ACE_Asynch_Result_Impl () +{ +} + + +ACE_INLINE +ACE_Asynch_Transmit_File_Impl::ACE_Asynch_Transmit_File_Impl (void) + : ACE_Asynch_Operation_Impl () +{ +} + +ACE_INLINE +ACE_Asynch_Transmit_File_Result_Impl::ACE_Asynch_Transmit_File_Result_Impl (void) + : ACE_Asynch_Result_Impl () +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Asynch_Pseudo_Task.cpp b/ACE/ace/Asynch_Pseudo_Task.cpp new file mode 100644 index 00000000000..6bc47866b6f --- /dev/null +++ b/ACE/ace/Asynch_Pseudo_Task.cpp @@ -0,0 +1,130 @@ +// $Id$ + +#include "ace/Asynch_Pseudo_Task.h" + +#include "ace/OS_NS_errno.h" +#include "ace/OS_NS_signal.h" + +ACE_RCSID(ace, Asynch_Pseudo_Task, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Asynch_Pseudo_Task::ACE_Asynch_Pseudo_Task () + : select_reactor_ (), // should be initialized before reactor_ + reactor_ (&select_reactor_, 0) // don't delete implementation +{ +} + +ACE_Asynch_Pseudo_Task::~ACE_Asynch_Pseudo_Task () +{ + this->stop (); +} + +int +ACE_Asynch_Pseudo_Task::start (void) +{ + if (this->reactor_.initialized () == 0) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%N:%l:%p\n"), + ACE_TEXT ("start reactor is not initialized")), + -1); + + return this->activate () == -1 ? -1 : 0; // If started, return 0 +} + +int +ACE_Asynch_Pseudo_Task::stop (void) +{ + if (this->thr_count () == 0) // already stopped + return 0; + + if (this->reactor_.end_reactor_event_loop () == -1) + return -1; + + this->wait (); + this->reactor_.close (); + return 0; +} + +int +ACE_Asynch_Pseudo_Task::svc (void) +{ +#if !defined (ACE_WIN32) + + sigset_t RT_signals; + + sigemptyset (&RT_signals); + for (int si = ACE_SIGRTMIN; si <= ACE_SIGRTMAX; si++) + sigaddset (&RT_signals, si); + + if (ACE_OS::pthread_sigmask (SIG_BLOCK, &RT_signals, 0) != 0) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("Error:(%P | %t):%p\n"), + ACE_TEXT ("pthread_sigmask"))); +#endif + + reactor_.owner (ACE_Thread::self ()); + reactor_.run_reactor_event_loop (); + + return 0; +} + + + +int +ACE_Asynch_Pseudo_Task::register_io_handler (ACE_HANDLE handle, + ACE_Event_Handler *handler, + ACE_Reactor_Mask mask, + int flg_suspend) +{ + // Register the handler with the reactor. + if (-1 == this->reactor_.register_handler (handle, handler, mask)) + return -1; + + if (flg_suspend == 0) + return 0; + + // Suspend the handle now. Enable only when the accept is issued + // by the application. + if (this->reactor_.suspend_handler (handle) == -1) + { + ACE_ERROR + ((LM_ERROR, + ACE_TEXT ("%N:%l:%p\n"), + ACE_TEXT ("register_io_handler (suspended)"))); + this->reactor_.remove_handler (handle, ACE_Event_Handler::ALL_EVENTS_MASK + | ACE_Event_Handler::DONT_CALL); + return -1; + } + + return 0; +} + +int +ACE_Asynch_Pseudo_Task::remove_io_handler (ACE_HANDLE handle) +{ + return this->reactor_.remove_handler (handle, + ACE_Event_Handler::ALL_EVENTS_MASK + | ACE_Event_Handler::DONT_CALL); +} + +int +ACE_Asynch_Pseudo_Task::remove_io_handler (ACE_Handle_Set &set) +{ + return this->reactor_.remove_handler (set, ACE_Event_Handler::ALL_EVENTS_MASK + | ACE_Event_Handler::DONT_CALL); +} + +int +ACE_Asynch_Pseudo_Task::suspend_io_handler (ACE_HANDLE handle) +{ + return this->reactor_.suspend_handler (handle); +} + +int +ACE_Asynch_Pseudo_Task::resume_io_handler (ACE_HANDLE handle) +{ + return this->reactor_.resume_handler (handle); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Asynch_Pseudo_Task.h b/ACE/ace/Asynch_Pseudo_Task.h new file mode 100644 index 00000000000..235d71411ba --- /dev/null +++ b/ACE/ace/Asynch_Pseudo_Task.h @@ -0,0 +1,73 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Asynch_Pseudo_Task.h + * + * $Id$ + * + * @author Alexander Libman + */ +//============================================================================= + +#ifndef ACE_ASYNCH_PSEUDO_TASK_H +#define ACE_ASYNCH_PSEUDO_TASK_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Reactor.h" +#include "ace/Select_Reactor.h" +#include "ace/Task.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/* + * Specialization hook to replace the Reactor with the + * concrete Reactor implementation, e.g., select_st, + * select_mt etc. + */ +//@@ REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK + +/** + * @class ACE_Asynch_Pseudo_Task + * + */ +class ACE_Export ACE_Asynch_Pseudo_Task : public ACE_Task +{ +public: + ACE_Asynch_Pseudo_Task(); + virtual ~ACE_Asynch_Pseudo_Task(); + + int start (void); + int stop (void); + + int register_io_handler (ACE_HANDLE handle, + ACE_Event_Handler *handler, + ACE_Reactor_Mask mask, + int flg_suspend); + + int remove_io_handler (ACE_HANDLE handle); + int remove_io_handler (ACE_Handle_Set &set); + int resume_io_handler (ACE_HANDLE handle); + int suspend_io_handler (ACE_HANDLE handle); + +protected: + virtual int svc (void); + + /// Should be initialized before reactor_ + ACE_Select_Reactor select_reactor_; + + ACE_Reactor reactor_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" + +#endif /* ACE_ASYNCH_PSEUDO_TASK_H */ diff --git a/ACE/ace/Atomic_Op.cpp b/ACE/ace/Atomic_Op.cpp new file mode 100644 index 00000000000..9076b9f67ed --- /dev/null +++ b/ACE/ace/Atomic_Op.cpp @@ -0,0 +1,310 @@ +// $Id$ + +#include "ace/Atomic_Op.h" +#include "ace/OS_NS_unistd.h" + +ACE_RCSID (ace, + Atomic_Op, + "$Id$") + +#if !defined (__ACE_INLINE__) +#include "ace/Atomic_Op.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_HAS_BUILTIN_ATOMIC_OP) + +#if defined (ACE_INCLUDE_ATOMIC_OP_SPARC) +# include "ace/Atomic_Op_Sparc.h" +#endif /* ACE_INCLUDE_ATOMIC_OP_SPARC */ + +namespace { + +#if defined (_MSC_VER) +// Disable "no return value" warning, as we will be putting +// the return values directly into the EAX register. +#pragma warning (push) +#pragma warning (disable: 4035) +#endif /* _MSC_VER */ + +long +single_cpu_increment (volatile long *value) +{ +#if defined (ACE_HAS_INTEL_ASSEMBLY) + long tmp = 1; + unsigned long addr = reinterpret_cast (value); + asm( "xadd %0, (%1)" : "+r"(tmp) : "r"(addr) ); + return tmp + 1; +#elif defined (sun) || \ + (defined (__SUNPRO_CC) && (defined (__i386) || defined (__x86_64))) + return ace_atomic_add_long ( + reinterpret_cast (value), 1); +#elif defined(__GNUC__) && defined(PPC) + long tmp; + asm("lwz %0,%1" : "=r" (tmp) : "m" (*value) ); + asm("addi %0,%0,1" : "+r" (tmp) ); + asm("stw %0,%1" : "+r" (tmp), "=m" (*value) ); + return tmp; +#else /* ACE_HAS_INTEL_ASSEMBLY*/ + ACE_UNUSED_ARG (value); + ACE_NOTSUP_RETURN (-1); +#endif /* ACE_HAS_INTEL_ASSEMBLY*/ +} + +long +single_cpu_decrement (volatile long *value) +{ +#if defined (ACE_HAS_INTEL_ASSEMBLY) + long tmp = -1; + unsigned long addr = reinterpret_cast (value); + asm( "xadd %0, (%1)" : "+r"(tmp) : "r"(addr) ); + return tmp - 1; +#elif defined (sun) || \ + (defined (__SUNPRO_CC) && (defined (__i386) || defined (__x86_64))) + return ace_atomic_add_long ( + reinterpret_cast (value), -1); +#elif defined(__GNUC__) && defined(PPC) + long tmp; + asm("lwz %0,%1" : "=r" (tmp) : "m" (*value) ); + asm("addi %0,%0,-1" : "+r" (tmp) ); + asm("stw %0,%1" : "+r" (tmp), "=m" (*value) ); + return tmp; +#else /* ACE_HAS_INTEL_ASSEMBLY*/ + ACE_UNUSED_ARG (value); + ACE_NOTSUP_RETURN (-1); +#endif /* ACE_HAS_INTEL_ASSEMBLY*/ +} + +long +single_cpu_exchange (volatile long *value, long rhs) +{ +#if defined (ACE_HAS_INTEL_ASSEMBLY) + unsigned long addr = reinterpret_cast (value); + asm( "xchg %0, (%1)" : "+r"(rhs) : "r"(addr) ); + return rhs; +#elif defined (sun) || \ + (defined (__SUNPRO_CC) && (defined (__i386) || defined (__x86_64))) + return ace_atomic_swap_long ( + reinterpret_cast (value), rhs); +#elif defined(__GNUC__) && defined(PPC) + long tmp; + asm("lwz %0,%1" : "=r" (tmp) : "m" (rhs) ); + asm("stw %0,%1" : "+r" (tmp), "=m" (*value) ); + return tmp; +#else /* ACE_HAS_INTEL_ASSEMBLY*/ + ACE_UNUSED_ARG (value); + ACE_UNUSED_ARG (rhs); + ACE_NOTSUP_RETURN (-1); +#endif /* ACE_HAS_INTEL_ASSEMBLY*/ +} + +long +single_cpu_exchange_add (volatile long *value, long rhs) +{ +#if defined (ACE_HAS_INTEL_ASSEMBLY) + unsigned long addr = reinterpret_cast (value); + asm( "xadd %0, (%1)" : "+r"(rhs) : "r"(addr) ); + return rhs; +#elif defined (sun) || \ + (defined (__SUNPRO_CC) && (defined (__i386) || defined (__x86_64))) + return ace_atomic_swap_add_long ( + reinterpret_cast (value), rhs); +#elif defined(__GNUC__) && defined(PPC) + long tmp; + asm("add %0,%1,%2" : "=r" (tmp) : "r" (*value), "r" (rhs) ); + asm("stw %0,%1" : "+r" (tmp), "=m" (*value) ); + return tmp; +#elif defined (WIN32) && !defined (ACE_HAS_INTERLOCKED_EXCHANGEADD) +# if defined (_MSC_VER) + __asm + { + mov eax, rhs + mov edx, value + xadd [edx], eax + } + // Return value is already in EAX register. +# elif defined (__BORLANDC__) + _EAX = rhs; + _EDX = reinterpret_cast (value); + __emit__(0x0F, 0xC1, 0x02); // xadd [edx], eax + // Return value is already in EAX register. +# else /* _MSC_VER */ + ACE_UNUSED_ARG (value); + ACE_UNUSED_ARG (rhs); + ACE_NOTSUP_RETURN (-1); +# endif /* _MSC_VER */ +#else /* ACE_HAS_INTEL_ASSEMBLY*/ + ACE_UNUSED_ARG (value); + ACE_UNUSED_ARG (rhs); + ACE_NOTSUP_RETURN (-1); +#endif /* ACE_HAS_INTEL_ASSEMBLY*/ +} + +long +multi_cpu_increment (volatile long *value) +{ +#if defined (ACE_HAS_INTEL_ASSEMBLY) + long tmp = 1; + unsigned long addr = reinterpret_cast (value); + asm( "lock ; xadd %0, (%1)" : "+r"(tmp) : "r"(addr) ); + return tmp + 1; +#elif defined (sun) || \ + (defined (__SUNPRO_CC) && (defined (__i386) || defined (__x86_64))) + return ace_atomic_add_long ( + reinterpret_cast (value), 1); +#else /* ACE_HAS_INTEL_ASSEMBLY*/ + ACE_UNUSED_ARG (value); + ACE_NOTSUP_RETURN (-1); +#endif /* ACE_HAS_INTEL_ASSEMBLY*/ +} + +long +multi_cpu_decrement (volatile long *value) +{ +#if defined (ACE_HAS_INTEL_ASSEMBLY) + long tmp = -1; + unsigned long addr = reinterpret_cast (value); + asm( "lock ; xadd %0, (%1)" : "+r"(tmp) : "r"(addr) ); + return tmp - 1; +#elif defined (sun) || \ + (defined (__SUNPRO_CC) && (defined (__i386) || defined (__x86_64))) + return ace_atomic_add_long ( + reinterpret_cast (value), -1); +#else /* ACE_HAS_INTEL_ASSEMBLY*/ + ACE_UNUSED_ARG (value); + ACE_NOTSUP_RETURN (-1); +#endif /* ACE_HAS_INTEL_ASSEMBLY*/ +} + +long +multi_cpu_exchange (volatile long *value, long rhs) +{ +#if defined (ACE_HAS_INTEL_ASSEMBLY) + unsigned long addr = reinterpret_cast (value); + // The XCHG instruction automatically follows LOCK semantics + asm( "xchg %0, (%1)" : "+r"(rhs) : "r"(addr) ); + return rhs; +#elif defined (sun) || \ + (defined (__SUNPRO_CC) && (defined (__i386) || defined (__x86_64))) + return ace_atomic_swap_long ( + reinterpret_cast (value), rhs); +#else /* ACE_HAS_INTEL_ASSEMBLY*/ + ACE_UNUSED_ARG (value); + ACE_UNUSED_ARG (rhs); + ACE_NOTSUP_RETURN (-1); +#endif /* ACE_HAS_INTEL_ASSEMBLY*/ +} + +long +multi_cpu_exchange_add (volatile long *value, long rhs) +{ +#if defined (ACE_HAS_INTEL_ASSEMBLY) + unsigned long addr = reinterpret_cast (value); + asm( "lock ; xadd %0, (%1)" : "+r"(rhs) : "r"(addr) ); + return rhs; +#elif defined (sun) || \ + (defined (__SUNPRO_CC) && (defined (__i386) || defined (__x86_64))) + return ace_atomic_swap_add_long ( + reinterpret_cast (value), rhs); +#elif defined (WIN32) && !defined (ACE_HAS_INTERLOCKED_EXCHANGEADD) +# if defined (_MSC_VER) + __asm + { + mov eax, rhs + mov edx, value + lock xadd [edx], eax + } + // Return value is already in EAX register. +# elif defined (__BORLANDC__) + _EAX = rhs; + _EDX = reinterpret_cast (value); + __emit__(0xF0, 0x0F, 0xC1, 0x02); // lock xadd [edx], eax + // Return value is already in EAX register. +# else /* _MSC_VER */ + ACE_UNUSED_ARG (value); + ACE_UNUSED_ARG (rhs); + ACE_NOTSUP_RETURN (-1); +# endif /* _MSC_VER */ +#else /* ACE_HAS_INTEL_ASSEMBLY*/ + ACE_UNUSED_ARG (value); + ACE_UNUSED_ARG (rhs); + ACE_NOTSUP_RETURN (-1); +#endif /* ACE_HAS_INTEL_ASSEMBLY*/ +} + +#if defined (_MSC_VER) +#pragma warning (pop) +#endif /* _MSC_VER */ + +} // end namespace + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +long (*ACE_Atomic_Op::increment_fn_) (volatile long *) = multi_cpu_increment; +long (*ACE_Atomic_Op::decrement_fn_) (volatile long *) = multi_cpu_decrement; +long (*ACE_Atomic_Op::exchange_fn_) (volatile long *, long) = multi_cpu_exchange; +long (*ACE_Atomic_Op::exchange_add_fn_) (volatile long *, long) = multi_cpu_exchange_add; + +void +ACE_Atomic_Op::init_functions (void) +{ + if (ACE_OS::num_processors () == 1) + { + increment_fn_ = single_cpu_increment; + decrement_fn_ = single_cpu_decrement; + exchange_fn_ = single_cpu_exchange; + exchange_add_fn_ = single_cpu_exchange_add; + } + else + { + increment_fn_ = multi_cpu_increment; + decrement_fn_ = multi_cpu_decrement; + exchange_fn_ = multi_cpu_exchange; + exchange_add_fn_ = multi_cpu_exchange_add; + } +} + +void +ACE_Atomic_Op::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +long (*ACE_Atomic_Op::increment_fn_) (volatile long *) = multi_cpu_increment; +long (*ACE_Atomic_Op::decrement_fn_) (volatile long *) = multi_cpu_decrement; +long (*ACE_Atomic_Op::exchange_fn_) (volatile long *, long) = multi_cpu_exchange; +long (*ACE_Atomic_Op::exchange_add_fn_) (volatile long *, long) = multi_cpu_exchange_add; + +void +ACE_Atomic_Op::init_functions (void) +{ + if (ACE_OS::num_processors () == 1) + { + increment_fn_ = single_cpu_increment; + decrement_fn_ = single_cpu_decrement; + exchange_fn_ = single_cpu_exchange; + exchange_add_fn_ = single_cpu_exchange_add; + } + else + { + increment_fn_ = multi_cpu_increment; + decrement_fn_ = multi_cpu_decrement; + exchange_fn_ = multi_cpu_exchange; + exchange_add_fn_ = multi_cpu_exchange_add; + } +} + +void +ACE_Atomic_Op::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_BUILTIN_ATOMIC_OP */ diff --git a/ACE/ace/Atomic_Op.h b/ACE/ace/Atomic_Op.h new file mode 100644 index 00000000000..24abb64ef1d --- /dev/null +++ b/ACE/ace/Atomic_Op.h @@ -0,0 +1,260 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Atomic_Op.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_ATOMIC_OP_H +#define ACE_ATOMIC_OP_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Thread_Mutex.h" + +// Include the templates here. +#include "ace/Atomic_Op_T.h" + +// Determine whether builtin atomic op support is +// available on this platform. +#if defined (ACE_HAS_THREADS) +# if defined (WIN32) +# if defined (ACE_HAS_INTRINSIC_INTERLOCKED) +# define ACE_HAS_BUILTIN_ATOMIC_OP +# endif /* ACE_HAS_INTRINSIC_INTERLOCKED */ +# if defined (ACE_HAS_INTERLOCKED_EXCHANGEADD) +# define ACE_HAS_BUILTIN_ATOMIC_OP +# else /* ACE_HAS_INTERLOCKED_EXCHANGEADD */ + // Inline assembly emulation of InterlockedExchangeAdd + // is currently only implemented for MSVC (x86 only) and Borland. +# if (defined (_MSC_VER) && defined (_M_IX86)) || defined (__BORLANDC__) +# define ACE_HAS_BUILTIN_ATOMIC_OP +# endif /* _MSC_VER || __BORLANDC__ */ +# endif /* ACE_HAS_INTERLOCKED_EXCHANGEADD */ +# elif defined (ACE_HAS_INTEL_ASSEMBLY) +# define ACE_HAS_BUILTIN_ATOMIC_OP +# endif /* WIN32 */ +#endif /* ACE_HAS_THREADS */ + +#if defined (ACE_HAS_BUILTIN_ATOMIC_OP) + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Atomic_Op + * + * @brief Specialization of ACE_Atomic_Op for platforms that + * support atomic integer operations. + * + * Specialization of ACE_Atomic_Op for platforms that support atomic + * integer operations. + */ +template<> +class ACE_Export ACE_Atomic_Op +{ +public: + /// Initialize to 0. + ACE_Atomic_Op (void); + + /// Initialize to c. + ACE_Atomic_Op (long c); + + /// Manage copying... + ACE_Atomic_Op (const ACE_Atomic_Op &c); + + /// Atomically pre-increment . + long operator++ (void); + + /// Atomically post-increment . + long operator++ (int); + + /// Atomically increment by rhs. + long operator+= (long rhs); + + /// Atomically pre-decrement . + long operator-- (void); + + /// Atomically post-decrement . + long operator-- (int); + + /// Atomically decrement by rhs. + long operator-= (long rhs); + + /// Atomically compare with rhs. + bool operator== (long rhs) const; + + /// Atomically compare with rhs. + bool operator!= (long rhs) const; + + /// Atomically check if greater than or equal to rhs. + bool operator>= (long rhs) const; + + /// Atomically check if greater than rhs. + bool operator> (long rhs) const; + + /// Atomically check if less than or equal to rhs. + bool operator<= (long rhs) const; + + /// Atomically check if less than rhs. + bool operator< (long rhs) const; + + /// Atomically assign rhs to . + ACE_Atomic_Op &operator= (long rhs); + + /// Atomically assign to . + ACE_Atomic_Op &operator= (const ACE_Atomic_Op &rhs); + + /// Explicitly return . + long value (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Explicitly return (by reference). + volatile long &value_i (void); + + // ACE_ALLOC_HOOK_DECLARE; + // Declare the dynamic allocation hooks. + + /// Used during ACE object manager initialization to optimize the fast + /// atomic op implementation according to the number of CPUs. + static void init_functions (void); + +private: + + // This function cannot be supported by this template specialization. + // If you need access to an underlying lock, use the ACE_Atomic_Op_Ex + // template instead. + ACE_Thread_Mutex &mutex (void); + +private: + + /// Current object decorated by the atomic op. + volatile long value_; + + // Pointers to selected atomic op implementations. + static long (*increment_fn_) (volatile long *); + static long (*decrement_fn_) (volatile long *); + static long (*exchange_fn_) (volatile long *, long); + static long (*exchange_add_fn_) (volatile long *, long); +}; + +/** + * @class ACE_Atomic_Op + * + * @brief Specialization of ACE_Atomic_Op for platforms that + * support atomic integer operations. + * + * Specialization of ACE_Atomic_Op for platforms that support atomic + * integer operations. + */ +template<> +class ACE_Export ACE_Atomic_Op +{ +public: + /// Initialize to 0. + ACE_Atomic_Op (void); + + /// Initialize to c. + ACE_Atomic_Op (unsigned long c); + + /// Manage copying... + ACE_Atomic_Op (const ACE_Atomic_Op &c); + + /// Atomically pre-increment . + unsigned long operator++ (void); + + /// Atomically post-increment . + unsigned long operator++ (int); + + /// Atomically increment by rhs. + unsigned long operator+= (unsigned long rhs); + + /// Atomically pre-decrement . + unsigned long operator-- (void); + + /// Atomically post-decrement . + unsigned long operator-- (int); + + /// Atomically decrement by rhs. + unsigned long operator-= (unsigned long rhs); + + /// Atomically compare with rhs. + bool operator== (unsigned long rhs) const; + + /// Atomically compare with rhs. + bool operator!= (unsigned long rhs) const; + + /// Atomically check if greater than or equal to rhs. + bool operator>= (unsigned long rhs) const; + + /// Atomically check if greater than rhs. + bool operator> (unsigned long rhs) const; + + /// Atomically check if less than or equal to rhs. + bool operator<= (unsigned long rhs) const; + + /// Atomically check if less than rhs. + bool operator< (unsigned long rhs) const; + + /// Atomically assign rhs to . + ACE_Atomic_Op &operator= (unsigned long rhs); + + /// Atomically assign to . + ACE_Atomic_Op &operator= (const ACE_Atomic_Op &rhs); + + /// Explicitly return . + unsigned long value (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Explicitly return (by reference). + volatile unsigned long &value_i (void); + + // ACE_ALLOC_HOOK_DECLARE; + // Declare the dynamic allocation hooks. + + /// Used during ACE object manager initialization to optimize the fast + /// atomic op implementation according to the number of CPUs. + static void init_functions (void); + +private: + + // This function cannot be supported by this template specialization. + // If you need access to an underlying lock, use the ACE_Atomic_Op_Ex + // template instead. + ACE_Thread_Mutex &mutex (void); + +private: + + /// Current object decorated by the atomic op. + volatile unsigned long value_; + + // Pointers to selected atomic op implementations. + static long (*increment_fn_) (volatile long *); + static long (*decrement_fn_) (volatile long *); + static long (*exchange_fn_) (volatile long *, long); + static long (*exchange_add_fn_) (volatile long *, long); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_BUILTIN_ATOMIC_OP */ + +#if defined (__ACE_INLINE__) +#include "ace/Atomic_Op.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /*ACE_ATOMIC_OP_H*/ diff --git a/ACE/ace/Atomic_Op.inl b/ACE/ace/Atomic_Op.inl new file mode 100644 index 00000000000..4d55f05b091 --- /dev/null +++ b/ACE/ace/Atomic_Op.inl @@ -0,0 +1,335 @@ +// -*- C++ -*- +// +// $Id$ + +#if defined (ACE_HAS_BUILTIN_ATOMIC_OP) + +#if defined (ACE_HAS_INTRINSIC_INTERLOCKED) +# include "ace/os_include/os_intrin.h" + +#pragma intrinsic (_InterlockedExchange, _InterlockedExchangeAdd, _InterlockedIncrement, _InterlockedDecrement) +#endif /* ACE_HAS_INTRINSIC_INTERLOCKED */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_Atomic_Op::ACE_Atomic_Op (void) + : value_ (0) +{ +} + +ACE_INLINE +ACE_Atomic_Op::ACE_Atomic_Op (long c) + : value_ (c) +{ +} + +ACE_INLINE +ACE_Atomic_Op::ACE_Atomic_Op ( + const ACE_Atomic_Op &rhs) + : value_ (rhs.value_) +{ +} + +ACE_INLINE long +ACE_Atomic_Op::operator++ (void) +{ +#if defined (ACE_HAS_INTRINSIC_INTERLOCKED) + return ::_InterlockedIncrement (const_cast (&this->value_)); +#elif defined (WIN32) + return ::InterlockedIncrement (const_cast (&this->value_)); +#else /* WIN32 */ + return (*increment_fn_) (&this->value_); +#endif /* WIN32 */ +} + +ACE_INLINE long +ACE_Atomic_Op::operator++ (int) +{ + return ++*this - 1; +} + +ACE_INLINE long +ACE_Atomic_Op::operator-- (void) +{ +#if defined (ACE_HAS_INTRINSIC_INTERLOCKED) + return ::_InterlockedDecrement (const_cast (&this->value_)); +#elif defined (WIN32) + return ::InterlockedDecrement (const_cast (&this->value_)); +#else /* WIN32 */ + return (*decrement_fn_) (&this->value_); +#endif /* WIN32 */ +} + +ACE_INLINE long +ACE_Atomic_Op::operator-- (int) +{ + return --*this + 1; +} + +ACE_INLINE long +ACE_Atomic_Op::operator+= (long rhs) +{ +#if defined (ACE_HAS_INTRINSIC_INTERLOCKED) + return ::_InterlockedExchangeAdd (const_cast (&this->value_), + rhs) + rhs; +#elif defined (WIN32) && defined (ACE_HAS_INTERLOCKED_EXCHANGEADD) + return ::InterlockedExchangeAdd (const_cast (&this->value_), + rhs) + rhs; +#else /* WIN32 && ACE_HAS_INTERLOCKED_EXCHANGEADD */ + return (*exchange_add_fn_) (&this->value_, rhs) + rhs; +#endif /* WIN32 && ACE_HAS_INTERLOCKED_EXCHANGEADD */ +} + +ACE_INLINE long +ACE_Atomic_Op::operator-= (long rhs) +{ +#if defined (ACE_HAS_INTRINSIC_INTERLOCKED) + return ::_InterlockedExchangeAdd (const_cast (&this->value_), + -rhs) - rhs; +#elif defined (WIN32) && defined (ACE_HAS_INTERLOCKED_EXCHANGEADD) + return ::InterlockedExchangeAdd (const_cast (&this->value_), + -rhs) - rhs; +#else /* WIN32 && ACE_HAS_INTERLOCKED_EXCHANGEADD */ + return (*exchange_add_fn_) (&this->value_, -rhs) - rhs; +#endif /* WIN32 && ACE_HAS_INTERLOCKED_EXCHANGEADD */ +} + +ACE_INLINE bool +ACE_Atomic_Op::operator== (long rhs) const +{ + return (this->value_ == rhs); +} + +ACE_INLINE bool +ACE_Atomic_Op::operator!= (long rhs) const +{ + return (this->value_ != rhs); +} + +ACE_INLINE bool +ACE_Atomic_Op::operator>= (long rhs) const +{ + return (this->value_ >= rhs); +} + +ACE_INLINE bool +ACE_Atomic_Op::operator> (long rhs) const +{ + return (this->value_ > rhs); +} + +ACE_INLINE bool +ACE_Atomic_Op::operator<= (long rhs) const +{ + return (this->value_ <= rhs); +} + +ACE_INLINE bool +ACE_Atomic_Op::operator< (long rhs) const +{ + return (this->value_ < rhs); +} + +ACE_INLINE ACE_Atomic_Op & +ACE_Atomic_Op::operator= (long rhs) +{ +#if defined (ACE_HAS_INTRINSIC_INTERLOCKED) + ::_InterlockedExchange (const_cast (&this->value_), rhs); +#elif defined (WIN32) + ::InterlockedExchange (const_cast (&this->value_), rhs); +#else /* WIN32 */ + (*exchange_fn_) (&this->value_, rhs); +#endif /* WIN32 */ + return *this; +} + +ACE_INLINE ACE_Atomic_Op & +ACE_Atomic_Op::operator= ( + const ACE_Atomic_Op &rhs) +{ +#if defined (ACE_HAS_INTRINSIC_INTERLOCKED) + ::_InterlockedExchange (const_cast (&this->value_), rhs.value_); +#elif defined (WIN32) + ::InterlockedExchange (const_cast (&this->value_), rhs.value_); +#else /* WIN32 */ + (*exchange_fn_) (&this->value_, rhs.value_); +#endif /* WIN32 */ + return *this; +} + +ACE_INLINE long +ACE_Atomic_Op::value (void) const +{ + return this->value_; +} + +ACE_INLINE volatile long & +ACE_Atomic_Op::value_i (void) +{ + return this->value_; +} + + +ACE_INLINE +ACE_Atomic_Op::ACE_Atomic_Op (void) + : value_ (0) +{ +} + +ACE_INLINE +ACE_Atomic_Op::ACE_Atomic_Op (unsigned long c) + : value_ (c) +{ +} + +ACE_INLINE +ACE_Atomic_Op::ACE_Atomic_Op ( + const ACE_Atomic_Op &rhs) + : value_ (rhs.value_) +{ +} + +ACE_INLINE unsigned long +ACE_Atomic_Op::operator++ (void) +{ +#if defined (ACE_HAS_INTRINSIC_INTERLOCKED) + return static_cast (::_InterlockedIncrement (const_cast (reinterpret_cast(&this->value_)))); +#elif defined (WIN32) + return static_cast (::InterlockedIncrement (const_cast (reinterpret_cast(&this->value_)))); +#else /* WIN32 */ + return static_cast ((*increment_fn_) (reinterpret_cast (&this->value_))); +#endif /* WIN32 */ +} + +ACE_INLINE unsigned long +ACE_Atomic_Op::operator++ (int) +{ + return ++*this - 1; +} + +ACE_INLINE unsigned long +ACE_Atomic_Op::operator-- (void) +{ +#if defined (ACE_HAS_INTRINSIC_INTERLOCKED) + return static_cast (::_InterlockedDecrement (const_cast (reinterpret_cast(&this->value_)))); +#elif defined (WIN32) + return static_cast (::InterlockedDecrement (const_cast (reinterpret_cast(&this->value_)))); +#else /* WIN32 */ + return static_cast ((*decrement_fn_) (reinterpret_cast (&this->value_))); +#endif /* WIN32 */ +} + +ACE_INLINE unsigned long +ACE_Atomic_Op::operator-- (int) +{ + return --*this + 1; +} + +ACE_INLINE unsigned long +ACE_Atomic_Op::operator+= (unsigned long rhs) +{ +#if defined (ACE_HAS_INTRINSIC_INTERLOCKED) + return static_cast (::_InterlockedExchangeAdd (const_cast (reinterpret_cast (&this->value_)), + rhs)) + rhs; +#elif defined (WIN32) && defined (ACE_HAS_INTERLOCKED_EXCHANGEADD) + return static_cast (::InterlockedExchangeAdd (const_cast (reinterpret_cast (&this->value_)), + rhs)) + rhs; +#else /* WIN32 && ACE_HAS_INTERLOCKED_EXCHANGEADD */ + return static_cast ((*exchange_add_fn_) (reinterpret_cast (&this->value_), rhs)) + rhs; +#endif /* WIN32 && ACE_HAS_INTERLOCKED_EXCHANGEADD */ +} + +ACE_INLINE unsigned long +ACE_Atomic_Op::operator-= (unsigned long rhs) +{ +#if defined (ACE_HAS_INTRINSIC_INTERLOCKED) + return static_cast (::_InterlockedExchangeAdd (const_cast (reinterpret_cast(&this->value_)), + -static_cast(rhs))) - rhs; +#elif defined (WIN32) && defined (ACE_HAS_INTERLOCKED_EXCHANGEADD) + return static_cast (::InterlockedExchangeAdd (const_cast (reinterpret_cast(&this->value_)), + -static_cast(rhs))) - rhs; +#else /* WIN32 && ACE_HAS_INTERLOCKED_EXCHANGEADD */ + long l_rhs = static_cast (rhs); + return static_cast ((*exchange_add_fn_) (reinterpret_cast (&this->value_), -l_rhs)) - rhs; +#endif /* WIN32 && ACE_HAS_INTERLOCKED_EXCHANGEADD */ +} + +ACE_INLINE bool +ACE_Atomic_Op::operator== (unsigned long rhs) const +{ + return (this->value_ == rhs); +} + +ACE_INLINE bool +ACE_Atomic_Op::operator!= (unsigned long rhs) const +{ + return (this->value_ != rhs); +} + +ACE_INLINE bool +ACE_Atomic_Op::operator>= (unsigned long rhs) const +{ + return (this->value_ >= rhs); +} + +ACE_INLINE bool +ACE_Atomic_Op::operator> (unsigned long rhs) const +{ + return (this->value_ > rhs); +} + +ACE_INLINE bool +ACE_Atomic_Op::operator<= (unsigned long rhs) const +{ + return (this->value_ <= rhs); +} + +ACE_INLINE bool +ACE_Atomic_Op::operator< (unsigned long rhs) const +{ + return (this->value_ < rhs); +} + +ACE_INLINE ACE_Atomic_Op & +ACE_Atomic_Op::operator= (unsigned long rhs) +{ +#if defined (ACE_HAS_INTRINSIC_INTERLOCKED) + ::_InterlockedExchange (const_cast (reinterpret_cast (&this->value_)), rhs); +#elif defined (WIN32) + ::InterlockedExchange (const_cast (reinterpret_cast (&this->value_)), rhs); +#else /* WIN32 */ + (*exchange_fn_) (reinterpret_cast (&this->value_), rhs); +#endif /* WIN32 */ + return *this; +} + +ACE_INLINE ACE_Atomic_Op & +ACE_Atomic_Op::operator= ( + const ACE_Atomic_Op &rhs) +{ +#if defined (ACE_HAS_INTRINSIC_INTERLOCKED) + ::_InterlockedExchange (const_cast (reinterpret_cast (&this->value_)), rhs.value_); +#elif defined (WIN32) + ::InterlockedExchange (const_cast (reinterpret_cast (&this->value_)), rhs.value_); +#else /* WIN32 */ + (*exchange_fn_) (reinterpret_cast (&this->value_), rhs.value_); +#endif /* WIN32 */ + return *this; +} + +ACE_INLINE unsigned long +ACE_Atomic_Op::value (void) const +{ + return this->value_; +} + +ACE_INLINE volatile unsigned long & +ACE_Atomic_Op::value_i (void) +{ + return this->value_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_BUILTIN_ATOMIC_OP */ diff --git a/ACE/ace/Atomic_Op_Sparc.c b/ACE/ace/Atomic_Op_Sparc.c new file mode 100644 index 00000000000..75d64eb6ac5 --- /dev/null +++ b/ACE/ace/Atomic_Op_Sparc.c @@ -0,0 +1,187 @@ +/* $Id$ + * + * This is a C file for a reason. The Sun C++ compiler does not accept + * inline assembler. + * + * Portions of this code are based on atomic operations found in the + * linux kernel source code. + */ + +#if defined (ACE_INCLUDE_ATOMIC_OP_SPARC) + +#if defined(__i386) && defined(__SUNPRO_C) +static void +__sunpro_asm_code() { + __asm("\n\ + .globl ace_atomic_add_long \n\ + .type ace_atomic_add_long,@function \n\ + .align 4 \n\ +ace_atomic_add_long: \n\ + movl 0x00000004(%esp), %edx \n\ + movl 0x00000008(%esp), %eax \n\ + lock; xadd %eax, (%edx) \n\ + addl 0x00000008(%esp), %eax \n\ + ret \n\ + "); + + __asm("\n\ + .globl ace_atomic_swap_long \n\ + .type ace_atomic_swap_long,@function \n\ + .align 4 \n\ +ace_atomic_swap_long: \n\ + movl 0x00000004(%esp), %edx \n\ + movl 0x00000008(%esp), %eax \n\ + xchg %eax, (%edx) \n\ + ret \n\ + "); + + __asm("\n\ + .globl ace_atomic_swap_add_long \n\ + .type ace_atomic_swap_add_long,@function \n\ + .align 4 \n\ +ace_atomic_swap_add_long: \n\ + movl 0x00000004(%esp), %edx \n\ + movl 0x00000008(%esp), %eax \n\ + lock; xadd %eax, (%edx) \n\ + ret \n\ + "); +} + +#elif defined(__x86_64) && defined(__SUNPRO_C) + +static void +__sunpro_asm_code() { + __asm("\n\ + .globl ace_atomic_add_long \n\ + .type ace_atomic_add_long,@function \n\ + .align 16 \n\ +ace_atomic_add_long: \n\ + movq %rsi, %rax \n\ + lock; xaddq %rax, (%rdi) \n\ + addq %rsi, %rax \n\ + ret \n\ + "); + + __asm("\n\ + .globl ace_atomic_swap_long \n\ + .type ace_atomic_swap_long,@function \n\ + .align 16 \n\ +ace_atomic_swap_long: \n\ + xchgq %rsi, (%rdi) \n\ + movq %rsi, %rax \n\ + ret \n\ + "); + + __asm("\n\ + .globl ace_atomic_swap_add_long \n\ + .type ace_atomic_swap_add_long,@function \n\ + .align 16 \n\ +ace_atomic_swap_add_long: \n\ + lock; xaddq %rsi, (%rdi) \n\ + movq %rsi, %rax \n\ + ret \n\ + "); +} + +#elif defined (__sparcv9) + +unsigned long +ace_atomic_add_long (volatile unsigned long *dest, long rhs) +{ + __asm ("restore\n" + "ldx [%o0], %o2\n" + ".again_add:\n" + "add %o2, %o1, %o3\n" + "casx [%o0], %o2, %o3\n" + "cmp %o2, %o3\n" + "bne,pn %xcc, .again_add\n" + "mov %o3, %o2\n" + "retl\n" + "add %o2, %o1, %o0\n"); +} + +unsigned long +ace_atomic_swap_long (volatile unsigned long *dest, unsigned long rhs) +{ + __asm ("restore\n" + "ldx [%o0], %o2\n" + ".again_swap:\n" + "mov %o1, %o3\n" + "casx [%o0], %o2, %o3\n" + "cmp %o2, %o3\n" + "bne,pn %xcc, .again_swap\n" + "mov %o3, %o2\n" + "retl\n" + "mov %o3, %o0\n"); +} + +unsigned long +ace_atomic_swap_add_long (volatile unsigned long *dest, long rhs) +{ + __asm ("restore\n" + "ldx [%o0], %o2\n" + ".again_swap_add:\n" + "mov %o2, %o4\n" + "add %o2, %o1, %o3\n" + "casx [%o0], %o2, %o3\n" + "cmp %o2, %o3\n" + "bne,pn %xcc, .again_swap_add\n" + "mov %o3, %o2\n" + "retl\n" + "mov %o4, %o0\n"); +} + +#else + +unsigned long +ace_atomic_add_long (volatile unsigned long *dest, long rhs) +{ + __asm ("restore\n" + "ld [%o0], %o2\n" + ".again_add:\n" + "add %o2, %o1, %o3\n" + "cas [%o0], %o2, %o3\n" + "cmp %o2, %o3\n" + "bne,pn %icc, .again_add\n" + "mov %o3, %o2\n" + "retl\n" + "add %o2, %o1, %o0\n"); +} + +unsigned long +ace_atomic_swap_long (volatile unsigned long *dest, unsigned long rhs) +{ + __asm ("restore\n" + "ld [%o0], %o2\n" + ".again_swap:\n" + "mov %o1, %o3\n" + "cas [%o0], %o2, %o3\n" + "cmp %o2, %o3\n" + "bne,pn %icc, .again_swap\n" + "mov %o3, %o2\n" + "retl\n" + "mov %o3, %o0\n"); +} + +unsigned long +ace_atomic_swap_add_long (volatile unsigned long *dest, long rhs) +{ + __asm ("restore\n" + "ld [%o0], %o2\n" + ".again_swap_add:\n" + "mov %o2, %o4\n" + "add %o2, %o1, %o3\n" + "cas [%o0], %o2, %o3\n" + "cmp %o2, %o3\n" + "bne,pn %icc, .again_swap_add\n" + "mov %o3, %o2\n" + "retl\n" + "mov %o4, %o0\n"); +} + +# endif /* __sparcv9 */ + +#elif !defined (__GNUC__) && !defined (__INTEL_COMPILER) +/* Make compilers stop complaining about an empty translation unit */ +static int shut_up_compiler = 0; +#endif /* ACE_INCLUDE_ATOMIC_OP_SPARC */ diff --git a/ACE/ace/Atomic_Op_Sparc.h b/ACE/ace/Atomic_Op_Sparc.h new file mode 100644 index 00000000000..6e238e5e909 --- /dev/null +++ b/ACE/ace/Atomic_Op_Sparc.h @@ -0,0 +1,14 @@ +/* -*- C++ -*- */ +// $Id$ + +#ifndef ACE_ATOMIC_OP_SPARC_H +#define ACE_ATOMIC_OP_SPARC_H + +extern "C" +{ + unsigned long ace_atomic_add_long (volatile unsigned long *dest, long rhs); + unsigned long ace_atomic_swap_long (volatile unsigned long *dest, unsigned long rhs); + unsigned long ace_atomic_swap_add_long (volatile unsigned long *dest, long rhs); +} + +#endif /* ACE_ATOMIC_OP_SPARC_H */ diff --git a/ACE/ace/Atomic_Op_T.cpp b/ACE/ace/Atomic_Op_T.cpp new file mode 100644 index 00000000000..ad8f6b01059 --- /dev/null +++ b/ACE/ace/Atomic_Op_T.cpp @@ -0,0 +1,82 @@ +#ifndef ACE_ATOMIC_OP_T_CPP +#define ACE_ATOMIC_OP_T_CPP + +#include "ace/Atomic_Op_T.h" + +#ifdef ACE_HAS_DUMP +# include "ace/Log_Msg.h" +#endif /* ACE_HAS_DUMP */ + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (__ACE_INLINE__) +#include "ace/Atomic_Op_T.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_Atomic_Op_Ex) +ACE_ALLOC_HOOK_DEFINE(ACE_Atomic_Op) + +ACE_RCSID(ace, Atomic_Op_T, "$Id$") + +// ************************************************* +template ACE_LOCK & +ACE_Atomic_Op_Ex::mutex (void) +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::mutex"); + return this->mutex_; +} + +template +void +ACE_Atomic_Op_Ex::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + // ACE_TRACE ("ACE_Atomic_Op_Ex::dump"); + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + this->mutex_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Atomic_Op_Ex::ACE_Atomic_Op_Ex (ACE_LOCK & mtx) + : mutex_ (mtx) + , value_ (0) +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::ACE_Atomic_Op_Ex"); +} + +template +ACE_Atomic_Op_Ex::ACE_Atomic_Op_Ex ( + ACE_LOCK & mtx, + typename ACE_Atomic_Op_Ex::arg_type c) + : mutex_ (mtx) + , value_ (c) +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::ACE_Atomic_Op_Ex"); +} + +// **************************************************************** + +template +ACE_Atomic_Op::ACE_Atomic_Op (void) + : impl_ (this->own_mutex_) +{ + // ACE_TRACE ("ACE_Atomic_Op::ACE_Atomic_Op"); +} + +template +ACE_Atomic_Op::ACE_Atomic_Op ( + typename ACE_Atomic_Op::arg_type c) + : impl_ (own_mutex_, c) +{ + // ACE_TRACE ("ACE_Atomic_Op::ACE_Atomic_Op"); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_ATOMIC_OP_T_CPP */ diff --git a/ACE/ace/Atomic_Op_T.h b/ACE/ace/Atomic_Op_T.h new file mode 100644 index 00000000000..cf9fbda184d --- /dev/null +++ b/ACE/ace/Atomic_Op_T.h @@ -0,0 +1,369 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Atomic_Op_T.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_ATOMIC_OP_T_H +#define ACE_ATOMIC_OP_T_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +struct ACE_Type_Traits +{ + typedef TYPE const & parameter_type; +}; + +template<> +struct ACE_Type_Traits +{ + typedef bool parameter_type; +}; + +template<> +struct ACE_Type_Traits +{ + typedef char parameter_type; +}; + +template<> +struct ACE_Type_Traits +{ + typedef signed char parameter_type; +}; + +template<> +struct ACE_Type_Traits +{ + typedef unsigned char parameter_type; +}; + +template<> +struct ACE_Type_Traits +{ + typedef short parameter_type; +}; + +template<> +struct ACE_Type_Traits +{ + typedef unsigned short parameter_type; +}; + +template<> +struct ACE_Type_Traits +{ + typedef int parameter_type; +}; + +template<> +struct ACE_Type_Traits +{ + typedef unsigned int parameter_type; +}; + +template<> +struct ACE_Type_Traits +{ + typedef long parameter_type; +}; + +template<> +struct ACE_Type_Traits +{ + typedef unsigned long parameter_type; +}; + +#ifndef ACE_LACKS_LONGLONG_T +template<> +struct ACE_Type_Traits +{ + typedef long long parameter_type; +}; +#endif /* !ACE_LACKS_LONGLONG_T */ + +#if !defined (ACE_LACKS_LONGLONG_T) \ + && !defined (ACE_LACKS_UNSIGNEDLONGLONG_T) +template<> +struct ACE_Type_Traits +{ + typedef unsigned long long parameter_type; +}; +#endif /* !ACE_LACKS_LONGLONG_T && !ACE_LACKS_UNSIGNEDLONGLONG_T */ + +template<> +struct ACE_Type_Traits +{ + typedef float parameter_type; +}; + +template<> +struct ACE_Type_Traits +{ + typedef double parameter_type; +}; + +template<> +struct ACE_Type_Traits +{ + typedef long double parameter_type; +}; + +template +struct ACE_Type_Traits +{ + typedef TYPE* parameter_type; +}; + +/** + * @class ACE_Atomic_Op_Ex + * + * @brief Transparently parameterizes synchronization into basic + * arithmetic operations. + * + * This class is described in an article in the July/August 1994 + * issue of the C++ Report magazine. It implements a + * templatized version of the Decorator pattern from the GoF book. + * + * ACE_Atomic_Op_Ex objects must be constructed with a reference + * to an existing lock. A single lock can be shared between + * multiple ACE_Atomic_Op_Ex objects. If you do not require this + * ability consider using the ACE_Atomic_Op class instead, which + * may be able to take advantage of platform-specific + * optimisations to provide atomic operations without requiring a + * lock. + */ +template +class ACE_Atomic_Op_Ex +{ +public: + + typedef typename ACE_Type_Traits::parameter_type arg_type; + + // = Initialization methods. + + /// Initialize @c value_ to 0. + ACE_Atomic_Op_Ex (ACE_LOCK & mtx); + + /// Initialize @c value_ to c. + ACE_Atomic_Op_Ex (ACE_LOCK & mtx, arg_type c); + + // = Accessors. + + /// Atomically pre-increment @c value_. + TYPE operator++ (void); + + /// Atomically post-increment @c value_. + TYPE operator++ (int); + + /// Atomically increment @c value_ by rhs. + TYPE operator+= (arg_type rhs); + + /// Atomically pre-decrement @c value_. + TYPE operator-- (void); + + /// Atomically post-decrement @c value_. + TYPE operator-- (int); + + /// Atomically decrement @c value_ by rhs. + TYPE operator-= (arg_type rhs); + + /// Atomically compare @c value_ with rhs. + bool operator== (arg_type rhs) const; + + /// Atomically compare @c value_ with rhs. + bool operator!= (arg_type rhs) const; + + /// Atomically check if @c value_ greater than or equal to rhs. + bool operator>= (arg_type rhs) const; + + /// Atomically check if @c value_ greater than rhs. + bool operator> (arg_type rhs) const; + + /// Atomically check if @c value_ less than or equal to rhs. + bool operator<= (arg_type rhs) const; + + /// Atomically check if @c value_ less than rhs. + bool operator< (arg_type rhs) const; + + /// Atomically assign rhs to @c value_. + ACE_Atomic_Op_Ex &operator= (arg_type rhs); + + /// Atomically assign to @c value_. + ACE_Atomic_Op_Ex &operator= ( + ACE_Atomic_Op_Ex const & rhs); + + /// Explicitly return @c value_. + TYPE value (void) const; + + /// Dump the state of an object. + void dump (void) const; + + // ACE_ALLOC_HOOK_DECLARE; + // Declare the dynamic allocation hooks. + + /// Manage copying... + ACE_Atomic_Op_Ex (ACE_Atomic_Op_Ex const &); + + /** + * Returns a reference to the underlying . This makes it + * possible to acquire the lock explicitly, which can be useful in + * some cases if you instantiate the with an + * ACE_Recursive_Mutex or ACE_Process_Mutex. @note the right + * name would be lock_, but HP/C++ will choke on that! + */ + ACE_LOCK & mutex (void); + + /** + * Explicitly return @c value_ (by reference). This gives the user + * full, unrestricted access to the underlying value. This method + * will usually be used in conjunction with explicit access to the + * lock. Use with care ;-) + */ + TYPE & value_i (void); + +private: + /// Type of synchronization mechanism. + ACE_LOCK & mutex_; + + /// Current object decorated by the atomic op. + TYPE value_; +}; + +/** + * @class ACE_Atomic_Op + * + * @brief Transparently parameterizes synchronization into basic + * arithmetic operations. + * + * This class is described in an article in the July/August 1994 + * issue of the C++ Report magazine. It implements a + * templatized version of the Decorator pattern from the GoF book. + * + * Certain platforms may provide a template specialization for + * ACE_Atomic_Op that provides optimized + * atomic integer operations without actually requiring a mutex. + */ +template +class ACE_Atomic_Op +{ +public: + + typedef typename ACE_Type_Traits::parameter_type arg_type; + + /// Initialize @c value_ to 0. + ACE_Atomic_Op (void); + + /// Initialize @c value_ to c. + ACE_Atomic_Op (arg_type c); + + /// Manage copying... + ACE_Atomic_Op (ACE_Atomic_Op const & c); + + /// Atomically assign rhs to @c value_. + ACE_Atomic_Op & operator= (arg_type rhs); + + /// Atomically assign to @c value_. + ACE_Atomic_Op & operator= ( + ACE_Atomic_Op const & rhs); + + /// Atomically pre-increment @c value_. + TYPE operator++ (void); + + /// Atomically post-increment @c value_. + TYPE operator++ (int); + + /// Atomically increment @c value_ by rhs. + TYPE operator+= (arg_type rhs); + + /// Atomically pre-decrement @c value_. + TYPE operator-- (void); + + /// Atomically post-decrement @c value_. + TYPE operator-- (int); + + /// Atomically decrement @c value_ by rhs. + TYPE operator-= (arg_type rhs); + + /// Atomically compare @c value_ with rhs. + bool operator== (arg_type rhs) const; + + /// Atomically compare @c value_ with rhs. + bool operator!= (arg_type rhs) const; + + /// Atomically check if @c value_ greater than or equal to rhs. + bool operator>= (arg_type rhs) const; + + /// Atomically check if @c value_ greater than rhs. + bool operator> (arg_type rhs) const; + + /// Atomically check if @c value_ less than or equal to rhs. + bool operator<= (arg_type rhs) const; + + /// Atomically check if @c value_ less than rhs. + bool operator< (arg_type rhs) const; + + /// Explicitly return @c value_. + TYPE value (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /** + * Returns a reference to the underlying . This makes it + * possible to acquire the lock explicitly, which can be useful in + * some cases if you instantiate the ACE_Atomic_Op with an + * ACE_Recursive_Mutex or ACE_Process_Mutex. + * + * @deprecated This member function is deprecated and so may go away in + * the future. If you need access to the underlying mutex, consider + * using the ACE_Atomic_Op_Ex template instead. + */ + ACE_LOCK & mutex (void); + + /** + * Explicitly return @c value_ (by reference). This gives the user + * full, unrestricted access to the underlying value. This method + * will usually be used in conjunction with explicit access to the + * lock. Use with care ;-) + */ + TYPE & value_i (void); + +private: + /// Type of synchronization mechanism. + ACE_LOCK own_mutex_; + + /// Underlying atomic op implementation. + ACE_Atomic_Op_Ex impl_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Atomic_Op_T.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Atomic_Op_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Atomic_Op_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" +#endif /*ACE_ATOMIC_OP_T_H*/ diff --git a/ACE/ace/Atomic_Op_T.inl b/ACE/ace/Atomic_Op_T.inl new file mode 100644 index 00000000000..3d09ba304fe --- /dev/null +++ b/ACE/ace/Atomic_Op_T.inl @@ -0,0 +1,340 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/Guard_T.h" + +#include + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// +// ACE_Atomic_Op_Ex inline functions +// + +template +ACE_INLINE TYPE +ACE_Atomic_Op_Ex::operator++ (void) +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::operator++"); + ACE_GUARD_RETURN (ACE_LOCK, ace_mon, this->mutex_, this->value_); + return ++this->value_; +} + +template +ACE_INLINE TYPE +ACE_Atomic_Op_Ex::operator+= ( + typename ACE_Atomic_Op_Ex::arg_type rhs) +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::operator+="); + ACE_GUARD_RETURN (ACE_LOCK, ace_mon, this->mutex_, this->value_); + return this->value_ += rhs; +} + +template +ACE_INLINE TYPE +ACE_Atomic_Op_Ex::operator-- (void) +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::operator--"); + ACE_GUARD_RETURN (ACE_LOCK, ace_mon, this->mutex_, this->value_); + return --this->value_; +} + +template +ACE_INLINE TYPE +ACE_Atomic_Op_Ex::operator-= ( + typename ACE_Atomic_Op_Ex::arg_type rhs) +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::operator-="); + ACE_GUARD_RETURN (ACE_LOCK, ace_mon, this->mutex_, this->value_); + return this->value_ -= rhs; +} + +template +ACE_INLINE +ACE_Atomic_Op_Ex::ACE_Atomic_Op_Ex ( + ACE_Atomic_Op_Ex const & rhs) + : mutex_ (rhs.mutex_) + , value_ (rhs.value ()) // rhs.value() returns atomically +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::ACE_Atomic_Op_Ex"); +} + +template +ACE_INLINE TYPE +ACE_Atomic_Op_Ex::operator++ (int) +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::operator++"); + ACE_GUARD_RETURN (ACE_LOCK, ace_mon, this->mutex_, this->value_); + return this->value_++; +} + +template +ACE_INLINE TYPE +ACE_Atomic_Op_Ex::operator-- (int) +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::operator--"); + ACE_GUARD_RETURN (ACE_LOCK, ace_mon, this->mutex_, this->value_); + return this->value_--; +} + +template +ACE_INLINE bool +ACE_Atomic_Op_Ex::operator== ( + typename ACE_Atomic_Op_Ex::arg_type rhs) const +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::operator=="); + ACE_GUARD_RETURN (ACE_LOCK, ace_mon, this->mutex_, false); + return this->value_ == rhs; +} + +template +ACE_INLINE bool +ACE_Atomic_Op_Ex::operator!= ( + typename ACE_Atomic_Op_Ex::arg_type rhs) const +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::operator!="); + return !(*this == rhs); +} + +template +ACE_INLINE bool +ACE_Atomic_Op_Ex::operator>= ( + typename ACE_Atomic_Op_Ex::arg_type rhs) const +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::operator>="); + ACE_GUARD_RETURN (ACE_LOCK, ace_mon, this->mutex_, false); + return this->value_ >= rhs; +} + +template +ACE_INLINE bool +ACE_Atomic_Op_Ex::operator> ( + typename ACE_Atomic_Op_Ex::arg_type rhs) const +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::operator>"); + ACE_GUARD_RETURN (ACE_LOCK, ace_mon, this->mutex_, false); + return this->value_ > rhs; +} + +template +ACE_INLINE bool +ACE_Atomic_Op_Ex::operator<= ( + typename ACE_Atomic_Op_Ex::arg_type rhs) const +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::operator<="); + ACE_GUARD_RETURN (ACE_LOCK, ace_mon, this->mutex_, false); + return this->value_ <= rhs; +} + +template +ACE_INLINE bool +ACE_Atomic_Op_Ex::operator< ( + typename ACE_Atomic_Op_Ex::arg_type rhs) const +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::operator<"); + ACE_GUARD_RETURN (ACE_LOCK, ace_mon, this->mutex_, false); + return this->value_ < rhs; +} + +template +ACE_INLINE ACE_Atomic_Op_Ex & +ACE_Atomic_Op_Ex::operator= ( + ACE_Atomic_Op_Ex const & rhs) +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::operator="); + + ACE_Atomic_Op_Ex tmp (rhs); + + ACE_GUARD_RETURN (ACE_LOCK, ace_mon, this->mutex_, *this); + std::swap (this->value_, tmp.value_); + + return *this; +} + +template +ACE_INLINE TYPE +ACE_Atomic_Op_Ex::value (void) const +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::value"); + ACE_GUARD_RETURN (ACE_LOCK, ace_mon, this->mutex_, this->value_); + return this->value_; +} + +template +ACE_INLINE TYPE & +ACE_Atomic_Op_Ex::value_i (void) +{ + // Explicitly return (by reference). This gives the user + // full, unrestricted access to the underlying value. This method + // will usually be used in conjunction with explicit access to the + // lock. Use with care ;-) + return this->value_; +} + +template +ACE_INLINE ACE_Atomic_Op_Ex & +ACE_Atomic_Op_Ex::operator= ( + typename ACE_Atomic_Op_Ex::arg_type rhs) +{ + // ACE_TRACE ("ACE_Atomic_Op_Ex::operator="); + ACE_GUARD_RETURN (ACE_LOCK, ace_mon, this->mutex_, *this); + this->value_ = rhs; + return *this; +} + +// +// ACE_Atomic_Op inline functions +// + +template ACE_INLINE +ACE_Atomic_Op::ACE_Atomic_Op ( + ACE_Atomic_Op const & rhs) + : impl_ (own_mutex_, rhs.value ()) +{ + // ACE_TRACE ("ACE_Atomic_Op::ACE_Atomic_Op"); +} + + +template +ACE_INLINE ACE_Atomic_Op & +ACE_Atomic_Op::operator= ( + typename ACE_Atomic_Op::arg_type i) +{ + this->impl_ = i; + return *this; +} + +template +ACE_INLINE ACE_Atomic_Op & +ACE_Atomic_Op::operator= ( + ACE_Atomic_Op const & rhs) +{ + this->impl_ = rhs.impl_; + return *this; +} + +template +ACE_INLINE TYPE +ACE_Atomic_Op::operator++ (void) +{ + return ++this->impl_; +} + +template +ACE_INLINE TYPE +ACE_Atomic_Op::operator++ (int) +{ + return this->impl_++; +} + +template +ACE_INLINE TYPE +ACE_Atomic_Op::operator+= ( + typename ACE_Atomic_Op::arg_type rhs) +{ + return this->impl_ += rhs; +} + +template +ACE_INLINE TYPE +ACE_Atomic_Op::operator-- (void) +{ + return --this->impl_; +} + +template +ACE_INLINE TYPE +ACE_Atomic_Op::operator-- (int) +{ + return this->impl_--; +} + +template +ACE_INLINE TYPE +ACE_Atomic_Op::operator-= ( + typename ACE_Atomic_Op::arg_type rhs) +{ + return this->impl_ -= rhs; +} + +template +ACE_INLINE bool +ACE_Atomic_Op::operator== ( + typename ACE_Atomic_Op::arg_type rhs) const +{ + return this->impl_ == rhs; +} + +template +ACE_INLINE bool +ACE_Atomic_Op::operator!= ( + typename ACE_Atomic_Op::arg_type rhs) const +{ + return this->impl_ != rhs; +} + +template +ACE_INLINE bool +ACE_Atomic_Op::operator>= ( + typename ACE_Atomic_Op::arg_type rhs) const +{ + return this->impl_ >= rhs; +} + +template +ACE_INLINE bool +ACE_Atomic_Op::operator> ( + typename ACE_Atomic_Op::arg_type rhs) const +{ + return this->impl_ > rhs; +} + +template +ACE_INLINE bool +ACE_Atomic_Op::operator<= ( + typename ACE_Atomic_Op::arg_type rhs) const +{ + return this->impl_ <= rhs; +} + +template +ACE_INLINE bool +ACE_Atomic_Op::operator< ( + typename ACE_Atomic_Op::arg_type rhs) const +{ + return this->impl_ < rhs; +} + +template +ACE_INLINE TYPE +ACE_Atomic_Op::value (void) const +{ + return this->impl_.value (); +} + +template +ACE_INLINE void +ACE_Atomic_Op::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + this->impl_.dump (); +#endif /* ACE_HAS_DUMP */ + return; +} + +template +ACE_INLINE ACE_LOCK & +ACE_Atomic_Op::mutex (void) +{ + return this->own_mutex_; +} + +template +ACE_INLINE TYPE & +ACE_Atomic_Op::value_i (void) +{ + return this->impl_.value_i (); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Auto_Event.cpp b/ACE/ace/Auto_Event.cpp new file mode 100644 index 00000000000..9e106ac8119 --- /dev/null +++ b/ACE/ace/Auto_Event.cpp @@ -0,0 +1,49 @@ +// $Id$ + +#include "ace/Auto_Event.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Auto_Event.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID (ace, + Auto_Event, + "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Auto_Event::ACE_Auto_Event (int initial_state, + int type, + const char *name, + void *arg) + : ACE_Event (0, + initial_state, + type, + ACE_TEXT_CHAR_TO_TCHAR (name), + arg) +{ +} + +#if defined (ACE_HAS_WCHAR) +ACE_Auto_Event::ACE_Auto_Event (int initial_state, + int type, + const wchar_t *name, + void *arg) + : ACE_Event (0, + initial_state, + type, + ACE_TEXT_WCHAR_TO_TCHAR (name), + arg) +{ +} +#endif /* ACE_HAS_WCHAR */ + +void +ACE_Auto_Event::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_Event::dump (); +#endif /* ACE_HAS_DUMP */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Auto_Event.h b/ACE/ace/Auto_Event.h new file mode 100644 index 00000000000..c4ee11509bb --- /dev/null +++ b/ACE/ace/Auto_Event.h @@ -0,0 +1,73 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file Auto_Event.h + * + * $Id$ + * + * Moved from Synch.h. + * + * @author Douglas C. Schmidt + */ +//========================================================================== + +#ifndef ACE_AUTO_EVENT_H +#define ACE_AUTO_EVENT_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Event.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Auto_Event + * + * @brief Auto Events. + * + * Specialization of Event mechanism which wakes up one waiting + * thread on . All platforms support process-scope locking + * support. However, only Win32 platforms support global naming and + * system-scope locking support. + */ +class ACE_Export ACE_Auto_Event : public ACE_Event +{ +public: + /// Constructor which will create auto event + ACE_Auto_Event (int initial_state = 0, + int type = USYNC_THREAD, + const char *name = 0, + void *arg = 0); + +#if defined (ACE_HAS_WCHAR) + /// Constructor which will create auto event (wchar_t version) + ACE_Auto_Event (int initial_state, + int type, + const wchar_t *name, + void *arg = 0); +#endif /* ACE_HAS_WCHAR */ + + /// Default dtor. + ~ACE_Auto_Event (void); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks + ACE_ALLOC_HOOK_DECLARE; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Auto_Event.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_AUTO_EVENT_H */ diff --git a/ACE/ace/Auto_Event.inl b/ACE/ace/Auto_Event.inl new file mode 100644 index 00000000000..80048c29b99 --- /dev/null +++ b/ACE/ace/Auto_Event.inl @@ -0,0 +1,12 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_Auto_Event::~ACE_Auto_Event (void) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Auto_Functor.cpp b/ACE/ace/Auto_Functor.cpp new file mode 100644 index 00000000000..8d6e7f998bf --- /dev/null +++ b/ACE/ace/Auto_Functor.cpp @@ -0,0 +1,39 @@ +// $Id$ + +#ifndef ACE_AUTO_FUNCTOR_CPP +#define ACE_AUTO_FUNCTOR_CPP + +#include "ace/Auto_Functor.h" + +#if !defined(__ACE_INLINE__) +# include "ace/Auto_Functor.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +ACE_Utils::Auto_Functor::~Auto_Functor() +{ + reset(0); +} + +template void +ACE_Utils::Auto_Functor::reset(X * p) +{ + if(p_ != 0) + { + f_(p_); + } + p_ = p; +} + +templatevoid +ACE_Utils::Auto_Functor::reset(X * p, Functor f) +{ + reset(p); + f_ = f; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /*ACE_AUTO_FUNCTOR_CPP*/ diff --git a/ACE/ace/Auto_Functor.h b/ACE/ace/Auto_Functor.h new file mode 100644 index 00000000000..4ca55184b9a --- /dev/null +++ b/ACE/ace/Auto_Functor.h @@ -0,0 +1,127 @@ +// -*- C++ -*- +//============================================================================= +/** + * @file Auto_Functor.h + * + * $Id$ + * + * @author Carlos O'Ryan + */ +//============================================================================= +#ifndef ACE_AUTO_FUNCTOR_H +#define ACE_AUTO_FUNCTOR_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Global_Macros.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +namespace ACE_Utils +{ +/** + * @class Auto_Functor_Ref + * + * @brief Helper class to implement assignment and copy-construction + * as expected + */ +template +struct Auto_Functor_Ref +{ + X * p_; + Functor f_; + + Auto_Functor_Ref(X * p, Functor f); +}; + +/** + * @class Auto_Functor + * + * @brief Helper template to implement auto_ptr<>-like classes, but + * executing a functor in the destructor, instead of always + * deleting things. + * + * The functor is called in the destructor, and it must implement: + * + * Functor() throw();
    + * Functor(Functor const &) throw();
    + * Functor & operator=(Functor const &) throw();
    + * void operator()(X * p) throw();
    + * + */ +template +class Auto_Functor +{ +public: + typedef X element_type; + typedef Functor functor_type; + + /// Constructor + explicit Auto_Functor (X * p = 0, + Functor functor = Functor()); // throw() + + Auto_Functor (Auto_Functor & rhs); // throw() + + Auto_Functor& operator= (Auto_Functor & rhs); // throw() + +#if !defined(ACE_LACKS_MEMBER_TEMPLATES) + template + Auto_Functor(Auto_Functor& rhs); // throw() + + template + Auto_Functor& operator= (Auto_Functor& rhs); // throw() +#endif /* ACE_LACKS_MEMBER_TEMPLATES */ + + ~Auto_Functor(); // throw() + + X & operator*() const; // throw() + + X * operator->() const; // throw() + + X * get(); // throw() + + X * release(); // throw() + + void reset (X * p = 0); // throw() + + void reset (X * p, Functor f); // throw() + + Functor const & functor() const; // throw() + + Auto_Functor(Auto_Functor_Ref rhs); // throw() + + Auto_Functor & operator=(Auto_Functor_Ref rhs); // throw() + +#if !defined(ACE_LACKS_MEMBER_TEMPLATES) + template operator Auto_Functor_Ref(); // throw() + + template operator Auto_Functor(); // throw() +#else + operator Auto_Functor_Ref(); // throw() +#endif /* ACE_LACKS_MEMBER_TEMPLATES */ + +private: + X * p_; + + Functor f_; +}; + +} // namespace ACE_Utils + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined(__ACE_INLINE__) +# include "ace/Auto_Functor.inl" +#endif /* __ACE_INLINE__ */ + +#if defined(ACE_TEMPLATES_REQUIRE_SOURCE) +# include "ace/Auto_Functor.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#include /**/ "ace/post.h" +#endif /* ACE_AUTO_FUNCTOR_H*/ diff --git a/ACE/ace/Auto_Functor.inl b/ACE/ace/Auto_Functor.inl new file mode 100644 index 00000000000..01f35b87eb5 --- /dev/null +++ b/ACE/ace/Auto_Functor.inl @@ -0,0 +1,134 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE +ACE_Utils::Auto_Functor_Ref:: +Auto_Functor_Ref(X * p, Functor f) + : p_(p) + , f_(f) +{ +} + +template ACE_INLINE +ACE_Utils::Auto_Functor::Auto_Functor(X * p, Functor f) + : p_(p) + , f_(f) +{ +} + +template ACE_INLINE +ACE_Utils::Auto_Functor::Auto_Functor(Auto_Functor & rhs) + : p_(rhs.release()) + , f_(rhs.f_) +{ +} + +template +ACE_INLINE ACE_Utils::Auto_Functor& +ACE_Utils::Auto_Functor:: operator=(Auto_Functor & rhs) +{ + reset(rhs.release()); + f_ = rhs.f_; + return *this; +} + +#if !defined(ACE_LACKS_MEMBER_TEMPLATES) +template template ACE_INLINE +ACE_Utils::Auto_Functor::Auto_Functor(Auto_Functor& rhs) + : p_(rhs.release()) + , f_(rhs.f_) +{ +} + +template template +ACE_INLINE ACE_Utils::Auto_Functor& +ACE_Utils::Auto_Functor::operator=(Auto_Functor& rhs) +{ + reset(rhs.release()); + return *this; +} +#endif /* ACE_LACKS_MEMBER_TEMPLATES */ + +template ACE_INLINE X & +ACE_Utils::Auto_Functor::operator*() const +{ + return *p_; +} + +template +ACE_INLINE X * +ACE_Utils::Auto_Functor::operator->() const +{ + return p_; +} + +template +ACE_INLINE X * +ACE_Utils::Auto_Functor::get() +{ + return p_; +} + +template +ACE_INLINE X * +ACE_Utils::Auto_Functor::release() +{ + X * tmp = p_; + p_ = 0; + return tmp; +} + +template +ACE_INLINE Functor const & +ACE_Utils::Auto_Functor::functor() const +{ + return f_; +} + +template ACE_INLINE +ACE_Utils::Auto_Functor::Auto_Functor(Auto_Functor_Ref rhs) + : p_(rhs.p_) + , f_(rhs.f_) +{ +} + +template +ACE_INLINE ACE_Utils::Auto_Functor & +ACE_Utils::Auto_Functor::operator=(Auto_Functor_Ref rhs) +{ + if(rhs.p_ != p_) + { + reset(rhs.p_); + f_ = rhs.f_; + } + return *this; +} + +#if !defined(ACE_LACKS_MEMBER_TEMPLATES) + +template template ACE_INLINE +ACE_Utils::Auto_Functor::operator ACE_Utils::Auto_Functor_Ref() +{ + return ACE_Utils::Auto_Functor_Ref(release(), f_); +} + +template template ACE_INLINE +ACE_Utils::Auto_Functor::operator ACE_Utils::Auto_Functor() +{ + return ACE_Utils::Auto_Functor(release(), f_); +} + +#else + +templateACE_INLINE +ACE_Utils::Auto_Functor::operator ACE_Utils::Auto_Functor_Ref() +{ + return ACE_Utils::Auto_Functor_Ref(release(), f_); +} + +#endif /* ACE_LACKS_MEMBER_TEMPLATES */ + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Auto_IncDec_T.cpp b/ACE/ace/Auto_IncDec_T.cpp new file mode 100644 index 00000000000..cf33efd7d6e --- /dev/null +++ b/ACE/ace/Auto_IncDec_T.cpp @@ -0,0 +1,34 @@ +// $Id$ + +#ifndef ACE_AUTO_INCDEC_T_CPP +#define ACE_AUTO_INCDEC_T_CPP + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Auto_IncDec_T.h" +#include "ace/Log_Msg.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Auto_IncDec_T.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_Auto_IncDec) + +template void +ACE_Auto_IncDec::dump (void) const +{ +#if defined (ACE_HAS_DUMP) +// ACE_TRACE ("ACE_Auto_IncDec::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_AUTO_INCDEC_T_CPP */ diff --git a/ACE/ace/Auto_IncDec_T.h b/ACE/ace/Auto_IncDec_T.h new file mode 100644 index 00000000000..0f29f5c4f3f --- /dev/null +++ b/ACE/ace/Auto_IncDec_T.h @@ -0,0 +1,91 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Auto_IncDec_T.h + * + * $Id$ + * + * @author Edan Ayal + */ +//============================================================================= + + +#ifndef ACE_AUTO_INCDEC_T_H +#define ACE_AUTO_INCDEC_T_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Global_Macros.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Auto_IncDec + * + * @brief This class automatically increments and decrements a + * parameterized counter. + * + * This data structure is meant to be used within a method, + * function, or scope. The actual parameter given for the + * template parameter + * must provide at least operators ++ and --. + */ +template +class ACE_Auto_IncDec +{ +public: + + /// Implicitly increment the counter. + ACE_Auto_IncDec (ACE_SAFELY_INCREMENTABLE_DECREMENTABLE &counter); + + /// Implicitly decrement the counter. + ~ACE_Auto_IncDec (void); + + /// Dump the state of an object. + void dump (void) const; + +protected: + /// Reference to the counter + /// we're incrementing/decrementing. + ACE_SAFELY_INCREMENTABLE_DECREMENTABLE &counter_; + +private: + // = Prevent assignment and initialization. + ACE_UNIMPLEMENTED_FUNC (void operator= (const + ACE_Auto_IncDec &)) + ACE_UNIMPLEMENTED_FUNC (ACE_Auto_IncDec (const + ACE_Auto_IncDec &)) +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Auto_IncDec_T.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Auto_IncDec_T.cpp" +// On Win32 platforms, this code will be included as template source +// code and will not be inlined. Therefore, we first turn off +// ACE_INLINE, set it to be nothing, include the code, and then turn +// ACE_INLINE back to its original setting. All this nonsense is +// necessary, since the generic template code that needs to be +// specialized cannot be inlined, else the compiler will ignore the +// specialization code. Also, the specialization code *must* be +// inlined or the compiler will ignore the specializations. +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Auto_IncDec_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" + +#endif /* ACE_AUTO_INCDEC_T_H */ diff --git a/ACE/ace/Auto_IncDec_T.inl b/ACE/ace/Auto_IncDec_T.inl new file mode 100644 index 00000000000..51daac0e84d --- /dev/null +++ b/ACE/ace/Auto_IncDec_T.inl @@ -0,0 +1,25 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Implicitly and automatically increment the counter. + +template ACE_INLINE +ACE_Auto_IncDec::ACE_Auto_IncDec + (ACE_SAFELY_INCREMENTABLE_DECREMENTABLE &counter) + : counter_ (counter) +{ + ++this->counter_; +} + +// Implicitly and automatically decrement the counter. + +template ACE_INLINE +ACE_Auto_IncDec::~ACE_Auto_IncDec (void) +{ + --this->counter_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Auto_Ptr.cpp b/ACE/ace/Auto_Ptr.cpp new file mode 100644 index 00000000000..081744ce316 --- /dev/null +++ b/ACE/ace/Auto_Ptr.cpp @@ -0,0 +1,21 @@ +// $Id$ + +#ifndef ACE_AUTO_PTR_CPP +#define ACE_AUTO_PTR_CPP + +#include "ace/Auto_Ptr.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Auto_Ptr.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, Auto_Ptr, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_Auto_Basic_Ptr) +ACE_ALLOC_HOOK_DEFINE(ACE_Auto_Basic_Array_Ptr) + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_AUTO_PTR_CPP */ diff --git a/ACE/ace/Auto_Ptr.h b/ACE/ace/Auto_Ptr.h new file mode 100644 index 00000000000..ec955d30b21 --- /dev/null +++ b/ACE/ace/Auto_Ptr.h @@ -0,0 +1,242 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Auto_Ptr.h + * + * $Id$ + * + * @author Doug Schmidt + * @author Irfan Pyarali + * @author Jack Reeves + * @author Dr. Harald M. Mueller + */ +//============================================================================= + +#ifndef ACE_AUTO_PTR_H +#define ACE_AUTO_PTR_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (_MSC_VER) +// Suppress warning e.g. "return type for +// 'ACE_Auto_Array_Pointer::operator ->' is 'type *' (i.e., not a UDT +// or reference to a UDT. Will produce errors if applied using infix +// notation)" +# pragma warning(push) +# pragma warning(disable: 4284) +#endif /* _MSC_VER */ + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Auto_Basic_Ptr + * + * @brief Implements the draft C++ standard auto_ptr abstraction. + * This class allows one to work on non-object (basic) types + */ +template +class ACE_Auto_Basic_Ptr +{ +public: + typedef X element_type; + + // = Initialization and termination methods + explicit ACE_Auto_Basic_Ptr (X * p = 0) : p_ (p) {} + + ACE_Auto_Basic_Ptr (ACE_Auto_Basic_Ptr & ap); + ACE_Auto_Basic_Ptr &operator= (ACE_Auto_Basic_Ptr & rhs); + ~ACE_Auto_Basic_Ptr (void); + + // = Accessor methods. + X &operator *() const; + X *get (void) const; + X *release (void); + void reset (X * p = 0); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + X *p_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if !defined (ACE_LACKS_AUTO_PTR) && \ + defined (ACE_HAS_STANDARD_CPP_LIBRARY) && \ + (ACE_HAS_STANDARD_CPP_LIBRARY != 0) +#include +#if defined (ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB) && \ + (ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB != 0) +using std::auto_ptr; +#endif /* ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB */ +#else /* ACE_HAS_STANDARD_CPP_LIBRARY */ + +/** + * @class auto_ptr + * + * @brief Implements the draft C++ standard auto_ptr abstraction. + */ +template +class auto_ptr : public ACE_Auto_Basic_Ptr +{ +public: + typedef X element_type; + + // = Initialization and termination methods + explicit auto_ptr (X * p = 0) : ACE_Auto_Basic_Ptr (p) {} + auto_ptr (auto_ptr & ap) : ACE_Auto_Basic_Ptr (ap.release ()) {} + + X *operator-> () const; +}; + +#endif /* ACE_HAS_STANDARD_CPP_LIBRARY */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @brief Implements the draft C++ standard auto_ptr abstraction. + * This version can be used instead of auto_ptr, and obviates + * the need for the ACE_AUTO_PTR_RESET macro on platforms like + * VC6 where the auto_ptr is broken. + */ +template +class ACE_Auto_Ptr : public ACE_Auto_Basic_Ptr +{ +public: + typedef X element_type; + + // = Initialization and termination methods + explicit ACE_Auto_Ptr (X * p = 0) : ACE_Auto_Basic_Ptr (p) {} + + X *operator-> () const; +}; + +/** + * @class ACE_Auto_Basic_Array_Ptr + * + * @brief Implements an extension to the draft C++ standard auto_ptr + * abstraction. This class allows one to work on non-object + * (basic) types that must be treated as an array, e.g., + * deallocated via "delete [] foo". + */ +template +class ACE_Auto_Basic_Array_Ptr +{ +public: + typedef X element_type; + + // = Initialization and termination methods. + explicit ACE_Auto_Basic_Array_Ptr (X * p = 0) : p_ (p) {} + + ACE_Auto_Basic_Array_Ptr (ACE_Auto_Basic_Array_Ptr & ap); + ACE_Auto_Basic_Array_Ptr &operator= (ACE_Auto_Basic_Array_Ptr & rhs); + ~ACE_Auto_Basic_Array_Ptr (void); + + // = Accessor methods. + X & operator* () const; + X & operator[] (int i) const; + X * get (void) const; + X * release (void); + void reset (X * p = 0); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + X * p_; +}; + +/** + * @class ACE_Auto_Array_Ptr + * + * @brief Implements an extension to the draft C++ standard auto_ptr + * abstraction. + */ +template +class ACE_Auto_Array_Ptr : public ACE_Auto_Basic_Array_Ptr +{ +public: + typedef X element_type; + + // = Initialization and termination methods. + explicit ACE_Auto_Array_Ptr (X *p = 0) + : ACE_Auto_Basic_Array_Ptr (p) {} + + X *operator-> () const; +}; + + +/** + * @brief Reset given @c auto_ptr element to new element. + * + * Some platforms have an older version of auto_ptr support, which + * lacks reset, and cannot be disabled easily. Portability to these + * platforms requires use of this function template. This function + * template also works for the @c ACE_Auto_{Basic_}Array_Ptr class + * template, as well. + */ +template +inline void +ACE_auto_ptr_reset (AUTO_PTR_TYPE & ap, + PTR_TYPE * p) +{ +#if defined (ACE_AUTO_PTR_LACKS_RESET) + // Allow compiler to adjust pointer to potential base class pointer + // of element type found in auto_ptr. + typename AUTO_PTR_TYPE::element_type * const tp = p; + if (tp != ap.get ()) + { + ap = AUTO_PTR_TYPE (tp); + } +#else + ap.reset (p); +#endif /* ACE_AUTO_PTR_LACKS_RESET */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +// Some platforms have an older version of auto_ptr +// support, which lacks reset, and cannot be disabled +// easily. Portability to these platforms requires +// use of the following ACE_AUTO_PTR_RESET macro. +// +// The TYPE macro parameter is no longer necessary but we leave it +// around for backward compatibility. This is also the reason why the +// ACE_auto_ptr_reset function template is not called +// ACE_AUTO_PTR_RESET. +# define ACE_AUTO_PTR_RESET(AUTOPTR,NEWPTR,TYPE) \ + ACE_auto_ptr_reset (AUTOPTR, NEWPTR); + +#if defined (__ACE_INLINE__) +#include "ace/Auto_Ptr.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Auto_Ptr.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Auto_Ptr.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#if defined (_MSC_VER) +// Restore the warning state to what it was before entry. +# pragma warning(pop) +#endif /* _MSC_VER */ + +#include /**/ "ace/post.h" +#endif /* ACE_AUTO_PTR_H */ diff --git a/ACE/ace/Auto_Ptr.inl b/ACE/ace/Auto_Ptr.inl new file mode 100644 index 00000000000..57adb236261 --- /dev/null +++ b/ACE/ace/Auto_Ptr.inl @@ -0,0 +1,171 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/Global_Macros.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE void +ACE_Auto_Basic_Ptr::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Auto_Basic_Ptr::dump"); +#endif /* ACE_HAS_DUMP */ +} + +template ACE_INLINE void +ACE_Auto_Basic_Array_Ptr::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Auto_Basic_Array_Ptr::dump"); +#endif /* ACE_HAS_DUMP */ +} + +template ACE_INLINE +ACE_Auto_Basic_Ptr::ACE_Auto_Basic_Ptr (ACE_Auto_Basic_Ptr &rhs) + : p_ (rhs.release ()) +{ + ACE_TRACE ("ACE_Auto_Basic_Ptr::ACE_Auto_Basic_Ptr"); +} + +template ACE_INLINE X * +ACE_Auto_Basic_Ptr::get (void) const +{ + ACE_TRACE ("ACE_Auto_Basic_Ptr::get"); + return this->p_; +} + +template ACE_INLINE X * +ACE_Auto_Basic_Ptr::release (void) +{ + ACE_TRACE ("ACE_Auto_Basic_Ptr::release"); + X *old = this->p_; + this->p_ = 0; + return old; +} + +template ACE_INLINE void +ACE_Auto_Basic_Ptr::reset (X *p) +{ + ACE_TRACE ("ACE_Auto_Basic_Ptr::reset"); + if (this->get () != p) + delete this->get (); + this->p_ = p; +} + +template ACE_INLINE ACE_Auto_Basic_Ptr & +ACE_Auto_Basic_Ptr::operator= (ACE_Auto_Basic_Ptr &rhs) +{ + ACE_TRACE ("ACE_Auto_Basic_Ptr::operator="); + if (this != &rhs) + { + this->reset (rhs.release ()); + } + return *this; +} + +template ACE_INLINE +ACE_Auto_Basic_Ptr::~ACE_Auto_Basic_Ptr (void) +{ + ACE_TRACE ("ACE_Auto_Basic_Ptr::~ACE_Auto_Basic_Ptr"); + delete this->get (); +} + +template ACE_INLINE X & +ACE_Auto_Basic_Ptr::operator *() const +{ + ACE_TRACE ("ACE_Auto_Basic_Ptr::operator *()"); + return *this->get (); +} + +#if defined (ACE_LACKS_AUTO_PTR) || \ + !defined (ACE_HAS_STANDARD_CPP_LIBRARY) || \ + (ACE_HAS_STANDARD_CPP_LIBRARY == 0) + +template ACE_INLINE X * +auto_ptr::operator-> () const +{ + ACE_TRACE ("auto_ptr::operator->"); + return this->get (); +} + +#endif /* ACE_HAS_STANDARD_CPP_LIBRARY */ + +template ACE_INLINE X * +ACE_Auto_Ptr::operator-> () const +{ + ACE_TRACE ("ACE_Auto_Ptr::operator->"); + return this->get (); +} + +template ACE_INLINE X * +ACE_Auto_Basic_Array_Ptr::get (void) const +{ + ACE_TRACE ("ACE_Auto_Basic_Array_Ptr::get"); + return this->p_; +} + +template ACE_INLINE X * +ACE_Auto_Basic_Array_Ptr::release (void) +{ + ACE_TRACE ("ACE_Auto_Basic_Array_Ptr::release"); + X *old = this->p_; + this->p_ = 0; + return old; +} + +template ACE_INLINE void +ACE_Auto_Basic_Array_Ptr::reset (X *p) +{ + ACE_TRACE ("ACE_Auto_Basic_Array_Ptr::reset"); + if (this->get () != p) + delete [] this->get (); + this->p_ = p; +} + +template ACE_INLINE +ACE_Auto_Basic_Array_Ptr::ACE_Auto_Basic_Array_Ptr (ACE_Auto_Basic_Array_Ptr &rhs) + : p_ (rhs.release ()) +{ + ACE_TRACE ("ACE_Auto_Basic_Array_Ptr::ACE_Auto_Basic_Array_Ptr"); +} + +template ACE_INLINE ACE_Auto_Basic_Array_Ptr & +ACE_Auto_Basic_Array_Ptr::operator= (ACE_Auto_Basic_Array_Ptr &rhs) +{ + ACE_TRACE ("ACE_Auto_Basic_Array_Ptr::operator="); + if (this != &rhs) + { + this->reset (rhs.release ()); + } + return *this; +} + +template ACE_INLINE +ACE_Auto_Basic_Array_Ptr::~ACE_Auto_Basic_Array_Ptr (void) +{ + ACE_TRACE ("ACE_Auto_Basic_Array_Ptr::~ACE_Auto_Basic_Array_Ptr"); + delete [] this->get (); +} + +template ACE_INLINE X & +ACE_Auto_Basic_Array_Ptr::operator *() const +{ + return *this->get (); +} + +template ACE_INLINE X & +ACE_Auto_Basic_Array_Ptr::operator[](int i) const +{ + X *array = this->get (); + return array[i]; +} + +template ACE_INLINE X * +ACE_Auto_Array_Ptr::operator->() const +{ + return this->get (); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Barrier.cpp b/ACE/ace/Barrier.cpp new file mode 100644 index 00000000000..2cb82dba5b6 --- /dev/null +++ b/ACE/ace/Barrier.cpp @@ -0,0 +1,197 @@ +// $Id$ + +#include "ace/Barrier.h" + +#if defined (ACE_HAS_THREADS) + +#if !defined (__ACE_INLINE__) +#include "ace/Barrier.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/Guard_T.h" +#include "ace/OS_NS_errno.h" + +#if defined (ACE_HAS_DUMP) +# include "ace/Log_Msg.h" +#endif /* ACE_HAS_DUMP */ + +ACE_RCSID (ace, + Barrier, + "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_Sub_Barrier) + +void +ACE_Sub_Barrier::dump (void) const +{ +#if defined (ACE_HAS_DUMP) +// ACE_TRACE ("ACE_Sub_Barrier::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + this->barrier_finished_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("running_threads_ = %d"), this->running_threads_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_Sub_Barrier::ACE_Sub_Barrier (unsigned int count, + ACE_Thread_Mutex &lock, + const ACE_TCHAR *name, + void *arg) + : barrier_finished_ (lock, name, arg), + running_threads_ (count) +{ +// ACE_TRACE ("ACE_Sub_Barrier::ACE_Sub_Barrier"); +} + +ACE_ALLOC_HOOK_DEFINE(ACE_Barrier) + +void +ACE_Barrier::dump (void) const +{ +#if defined (ACE_HAS_DUMP) +// ACE_TRACE ("ACE_Barrier::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + this->lock_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("current_generation_ = %d"), this->current_generation_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\ncount_ = %d"), this->count_)); + this->sub_barrier_1_.dump (); + this->sub_barrier_2_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_Barrier::ACE_Barrier (unsigned int count, + const ACE_TCHAR *name, + void *arg) + : lock_ (name, (ACE_mutexattr_t *) arg), + current_generation_ (0), + count_ (count), + sub_barrier_1_ (count, lock_, name, arg), + sub_barrier_2_ (count, lock_, name, arg) +{ + ACE_TRACE ("ACE_Barrier::ACE_Barrier"); + this->sub_barrier_[0] = &this->sub_barrier_1_; + this->sub_barrier_[1] = &this->sub_barrier_2_; +} + +int +ACE_Barrier::wait (void) +{ + ACE_TRACE ("ACE_Barrier::wait"); + ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, -1); + + ACE_Sub_Barrier *sbp = + this->sub_barrier_[this->current_generation_]; + + // Check for shutdown... + if (sbp == 0) + { + errno = ESHUTDOWN; + return -1; + } + + int retval = 0; + + if (sbp->running_threads_ == 1) + { + // We're the last running thread, so swap generations and tell + // all the threads waiting on the barrier to continue on their + // way. + sbp->running_threads_ = this->count_; + // Swap generations. + this->current_generation_ = 1 - this->current_generation_; + sbp->barrier_finished_.broadcast (); + } + else + { + --sbp->running_threads_; + + // Block until all the other threads wait(). + while (sbp->running_threads_ != this->count_) + sbp->barrier_finished_.wait (); + + // We're awake and the count has completed. See if it completed + // because all threads hit the barrier, or because the barrier + // was shut down. + if (this->sub_barrier_[this->current_generation_] == 0) + { + errno = ESHUTDOWN; + retval = -1; + } + } + + return retval; +} + +int +ACE_Barrier::shutdown (void) +{ + ACE_TRACE ("ACE_Barrier::shutdown"); + ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, -1); + + ACE_Sub_Barrier *sbp = + this->sub_barrier_[this->current_generation_]; + + // Check for shutdown... + if (sbp == 0) + { + errno = ESHUTDOWN; + return -1; + } + + // Flag the shutdown + this->sub_barrier_[0] = 0; + this->sub_barrier_[1] = 0; + // Tell all the threads waiting on the barrier to continue on their way. + sbp->running_threads_ = this->count_; + sbp->barrier_finished_.broadcast (); + + return 0; +} + +ACE_ALLOC_HOOK_DEFINE(ACE_Thread_Barrier) + +ACE_Thread_Barrier::ACE_Thread_Barrier (unsigned int count, + const ACE_TCHAR *name) + : ACE_Barrier (count, name) +{ +// ACE_TRACE ("ACE_Thread_Barrier::ACE_Thread_Barrier"); +} + +void +ACE_Thread_Barrier::dump (void) const +{ +#if defined (ACE_HAS_DUMP) +// ACE_TRACE ("ACE_Thread_Barrier::dump"); + ACE_Barrier::dump (); +#endif /* ACE_HAS_DUMP */ +} + +#if 0 +ACE_ALLOC_HOOK_DEFINE(ACE_Process_Barrier) + +ACE_Process_Barrier::ACE_Process_Barrier (u_int count, + const ACE_TCHAR *name) + : ACE_Barrier (count, USYNC_PROCESS, name) +{ +// ACE_TRACE ("ACE_Process_Barrier::ACE_Process_Barrier"); +} + +void +ACE_Process_Barrier::dump (void) const +{ +#if defined (ACE_HAS_DUMP) +// ACE_TRACE ("ACE_Process_Barrier::dump"); + ACE_Barrier::dump (); +#endif /* ACE_HAS_DUMP */ +} +#endif /* 0 */ + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_THREADS */ diff --git a/ACE/ace/Barrier.h b/ACE/ace/Barrier.h new file mode 100644 index 00000000000..00e22ec19f5 --- /dev/null +++ b/ACE/ace/Barrier.h @@ -0,0 +1,215 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file Barrier.h + * + * $Id$ + * + * Moved from Synch.h. + * + * @author Douglas C. Schmidt + */ +//========================================================================== + +#ifndef ACE_BARRIER_H +#define ACE_BARRIER_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include /**/ "ace/config-all.h" + +// ACE platform supports some form of threading. +#if !defined (ACE_HAS_THREADS) + +#include "ace/OS_NS_errno.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Barrier + * + * @brief This is a no-op to make ACE "syntactically consistent." + */ +class ACE_Export ACE_Barrier +{ +public: + ACE_Barrier (unsigned int, const ACE_TCHAR * = 0, void * = 0) {} + ~ACE_Barrier (void) {} + int wait (void) { ACE_NOTSUP_RETURN (-1); } + void dump (void) const {} +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#else /* ACE_HAS_THREADS */ + +#include "ace/Condition_Thread_Mutex.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +struct ACE_Export ACE_Sub_Barrier +{ + // = Initialization. + ACE_Sub_Barrier (unsigned int count, + ACE_Thread_Mutex &lock, + const ACE_TCHAR *name = 0, + void *arg = 0); + + ~ACE_Sub_Barrier (void); + + /// True if this generation of the barrier is done. + ACE_Condition_Thread_Mutex barrier_finished_; + + /// Number of threads that are still running. + int running_threads_; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +/** + * @class ACE_Barrier + * + * @brief Implements "barrier synchronization". + * + * This class allows number of threads to synchronize + * their completion of (one round of) a task, which is known as + * "barrier synchronization". After all the threads call + * on the barrier they are all atomically released and can begin a new + * round. + * + * This implementation uses a "sub-barrier generation numbering" + * scheme to avoid overhead and to ensure that all threads wait to + * leave the barrier correct. This code is based on an article from + * SunOpsis Vol. 4, No. 1 by Richard Marejka + * (Richard.Marejka@canada.sun.com). + */ +class ACE_Export ACE_Barrier +{ +public: + /// Initialize the barrier to synchronize @a count threads. + ACE_Barrier (unsigned int count, + const ACE_TCHAR *name = 0, + void *arg = 0); + + /// Default dtor. + ~ACE_Barrier (void); + + /// Block the caller until all @c count threads have called @c wait and + /// then allow all the caller threads to continue in parallel. + /// + /// @retval 0 after successfully waiting for all threads to wait. + /// @retval -1 if an error occurs or the barrier is shut + /// down (@sa shutdown ()). + int wait (void); + + /// Shut the barrier down, aborting the wait of all waiting threads. + /// Any threads waiting on the barrier when it is shut down will return with + /// value -1, errno ESHUTDOWN. + /// + /// @retval 0 for success, -1 if already shut down. + /// + /// @since ACE beta 5.4.9. + int shutdown (void); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// Serialize access to the barrier state. + ACE_Thread_Mutex lock_; + + /// Either 0 or 1, depending on whether we are the first generation + /// of waiters or the next generation of waiters. + int current_generation_; + + /// Total number of threads that can be waiting at any one time. + int count_; + + /** + * We keep two @c sub_barriers, one for the first "generation" of + * waiters, and one for the next "generation" of waiters. This + * efficiently solves the problem of what to do if all the first + * generation waiters don't leave the barrier before one of the + * threads calls wait() again (i.e., starts up the next generation + * barrier). + */ + ACE_Sub_Barrier sub_barrier_1_; + ACE_Sub_Barrier sub_barrier_2_; + ACE_Sub_Barrier *sub_barrier_[2]; + +private: + // = Prevent assignment and initialization. + void operator= (const ACE_Barrier &); + ACE_Barrier (const ACE_Barrier &); +}; + +#if 0 +/** + * @class ACE_Process_Barrier + * + * @brief Implements "barrier synchronization" using ACE_Process_Mutexes! + * + * This class is just a simple wrapper for ACE_Barrier that + * selects the USYNC_PROCESS variant for the locks. + */ +class ACE_Export ACE_Process_Barrier : public ACE_Barrier +{ +public: + /// Create a Process_Barrier, passing in the optional @a name. + ACE_Process_Barrier (unsigned int count, const ACE_TCHAR *name = 0); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; +#endif /* 0 */ + +/** + * @class ACE_Thread_Barrier + * + * @brief Implements "barrier synchronization" using ACE_Thread_Mutexes! + * + * This class is just a simple wrapper for ACE_Barrier that + * selects the USYNC_THREAD variant for the locks. + */ +class ACE_Export ACE_Thread_Barrier : public ACE_Barrier +{ +public: + /// Create a Thread_Barrier, passing in the optional @a name. + ACE_Thread_Barrier (unsigned int count, const ACE_TCHAR *name = 0); + + /// Default dtor. + ~ACE_Thread_Barrier (void); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Barrier.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* !ACE_HAS_THREADS */ + +#include /**/ "ace/post.h" +#endif /* ACE_BARRIER_H */ diff --git a/ACE/ace/Barrier.inl b/ACE/ace/Barrier.inl new file mode 100644 index 00000000000..9ab5c9fb111 --- /dev/null +++ b/ACE/ace/Barrier.inl @@ -0,0 +1,22 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_Sub_Barrier::~ACE_Sub_Barrier (void) +{ +} + +ACE_INLINE +ACE_Barrier::~ACE_Barrier (void) +{ +} + +ACE_INLINE +ACE_Thread_Barrier::~ACE_Thread_Barrier (void) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Base_Thread_Adapter.cpp b/ACE/ace/Base_Thread_Adapter.cpp new file mode 100644 index 00000000000..2ba31a4328e --- /dev/null +++ b/ACE/ace/Base_Thread_Adapter.cpp @@ -0,0 +1,120 @@ +// $Id$ + +#include "ace/Base_Thread_Adapter.h" + +ACE_RCSID (ace, + Base_Thread_Adapter, + "$Id$") + +#if !defined (ACE_HAS_INLINED_OSCALLS) +# include "ace/Base_Thread_Adapter.inl" +#endif /* ACE_HAS_INLINED_OSCALLS */ + +#if defined (ACE_HAS_TSS_EMULATION) +# include "ace/OS_NS_Thread.h" +#endif /* ACE_HAS_TSS_EMULATION */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INIT_LOG_MSG_HOOK ACE_Base_Thread_Adapter::init_log_msg_hook_ = 0; +ACE_INHERIT_LOG_MSG_HOOK ACE_Base_Thread_Adapter::inherit_log_msg_hook_ = 0; +ACE_CLOSE_LOG_MSG_HOOK ACE_Base_Thread_Adapter::close_log_msg_hook_ = 0; +ACE_SYNC_LOG_MSG_HOOK ACE_Base_Thread_Adapter::sync_log_msg_hook_ = 0; +ACE_THR_DESC_LOG_MSG_HOOK ACE_Base_Thread_Adapter::thr_desc_log_msg_hook_ = 0; + +ACE_Base_Thread_Adapter::ACE_Base_Thread_Adapter ( + ACE_THR_FUNC user_func, + void *arg, + ACE_THR_C_FUNC entry_point, + ACE_OS_Thread_Descriptor *td +#if defined (ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS) + , ACE_SEH_EXCEPT_HANDLER selector + , ACE_SEH_EXCEPT_HANDLER handler +#endif /* ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS */ + ) + : user_func_ (user_func) + , arg_ (arg) + , entry_point_ (entry_point) + , thr_desc_ (td) +{ + ACE_OS_TRACE ("ACE_Base_Thread_Adapter::ACE_Base_Thread_Adapter"); + + if (ACE_Base_Thread_Adapter::init_log_msg_hook_ != 0) + (*ACE_Base_Thread_Adapter::init_log_msg_hook_) ( + this->log_msg_attributes_ +# if defined (ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS) + , selector + , handler +# endif /* ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS */ + ); +#ifdef ACE_USES_GPROF + getitimer (ITIMER_PROF, &itimer_); +#endif // ACE_USES_GPROF +} + +ACE_Base_Thread_Adapter::~ACE_Base_Thread_Adapter (void) +{ +} + +void +ACE_Base_Thread_Adapter::inherit_log_msg (void) +{ + if (ACE_Base_Thread_Adapter::inherit_log_msg_hook_ != 0) + (*ACE_Base_Thread_Adapter::inherit_log_msg_hook_)( + this->thr_desc_, + this->log_msg_attributes_); +} + +void +ACE_Base_Thread_Adapter::close_log_msg (void) +{ + if (ACE_Base_Thread_Adapter::close_log_msg_hook_ != 0) + (*ACE_Base_Thread_Adapter::close_log_msg_hook_) (); +} + +void +ACE_Base_Thread_Adapter::sync_log_msg (const ACE_TCHAR *prg) +{ + if (ACE_Base_Thread_Adapter::sync_log_msg_hook_ != 0) + (*ACE_Base_Thread_Adapter::sync_log_msg_hook_) (prg); +} + +ACE_OS_Thread_Descriptor * +ACE_Base_Thread_Adapter::thr_desc_log_msg (void) +{ + if (ACE_Base_Thread_Adapter::thr_desc_log_msg_hook_ != 0) + return (*ACE_Base_Thread_Adapter::thr_desc_log_msg_hook_) (); + return 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +// Run the thread entry point for the . This must +// be an extern "C" to make certain compilers happy... + +extern "C" ACE_THR_FUNC_RETURN +ACE_THREAD_ADAPTER_NAME (void *args) +{ + ACE_OS_TRACE ("ACE_THREAD_ADAPTER_NAME"); + +#if defined (ACE_HAS_TSS_EMULATION) + // As early as we can in the execution of the new thread, allocate + // its local TS storage. Allocate it on the stack, to save dynamic + // allocation/dealloction. + void *ts_storage[ACE_TSS_Emulation::ACE_TSS_THREAD_KEYS_MAX]; + ACE_TSS_Emulation::tss_open (ts_storage); +#endif /* ACE_HAS_TSS_EMULATION */ + + ACE_Base_Thread_Adapter * const thread_args = + static_cast (args); + +#ifdef ACE_USES_GPROF + setitimer (ITIMER_PROF, thread_args->timerval (), 0); +#endif // ACE_USES_GPROF + + // Invoke the user-supplied function with the args. + ACE_THR_FUNC_RETURN status = thread_args->invoke (); + + return status; +} + diff --git a/ACE/ace/Base_Thread_Adapter.h b/ACE/ace/Base_Thread_Adapter.h new file mode 100644 index 00000000000..f33f0facd48 --- /dev/null +++ b/ACE/ace/Base_Thread_Adapter.h @@ -0,0 +1,186 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Base_Thread_Adapter.h + * + * $Id$ + * + * @author Nanbor Wang + */ +//============================================================================= + +#ifndef ACE_BASE_THREAD_ADAPTER_H +#define ACE_BASE_THREAD_ADAPTER_H +#include /**/ "ace/pre.h" + +#include "ace/OS_Log_Msg_Attributes.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include /**/ "ace/ACE_export.h" +#include "ace/OS_Log_Msg_Attributes.h" + +#ifdef ACE_USES_GPROF +#include "os_include/sys/os_time.h" +#endif // ACE_USES_GPROF + +#if (defined (ACE_HAS_VERSIONED_NAMESPACE) && ACE_HAS_VERSIONED_NAMESPACE == 1) +# define ACE_THREAD_ADAPTER_NAME ACE_PREPROC_CONCATENATE(ACE_VERSIONED_NAMESPACE_NAME, _ace_thread_adapter) +#else +# define ACE_THREAD_ADAPTER_NAME ace_thread_adapter +#endif /* ACE_HAS_VERSIONED_NAMESPACE == 1 */ + +// Run the thread entry point for the ACE_Thread_Adapter. This must +// be an extern "C" to make certain compilers happy... + +extern "C" ACE_Export ACE_THR_FUNC_RETURN ACE_THREAD_ADAPTER_NAME (void *args); + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_OS_Thread_Descriptor + * + * @brief Parent class of all ACE_Thread_Descriptor classes. + * = + * Container for ACE_Thread_Descriptor members that are + * used in ACE_OS. + */ +class ACE_Export ACE_OS_Thread_Descriptor +{ +public: + /// Get the thread creation flags. + long flags (void) const; + +protected: + /// For use by ACE_Thread_Descriptor. + ACE_OS_Thread_Descriptor (long flags = 0); + + /** + * Keeps track of whether this thread was created "detached" or not. + * If a thread is *not* created detached then if someone calls + * , we need to join with that thread (and + * close down the handle). + */ + long flags_; +}; + +/** + * @class ACE_Base_Thread_Adapter + * + * @brief Base class for all the Thread_Adapters. + * + * Converts a C++ function into a function that can be + * called from a thread creation routine + * (e.g., pthread_create() or _beginthreadex()) that expects an + * extern "C" entry point. This class also makes it possible to + * transparently provide hooks to register a thread with an + * ACE_Thread_Manager. + * This class is used in ACE_OS::thr_create(). In general, the + * thread that creates an object of this class is different from + * the thread that calls @c invoke() on this object. Therefore, + * the @c invoke() method is responsible for deleting itself. + */ +class ACE_Export ACE_Base_Thread_Adapter +{ +public: + + virtual ~ACE_Base_Thread_Adapter (void); + + /// Virtual method invoked by the thread entry point. + virtual ACE_THR_FUNC_RETURN invoke (void) = 0; + + /// Accessor for the C entry point function to the OS thread creation + /// routine. + ACE_THR_C_FUNC entry_point (void); + +#ifdef ACE_USES_GPROF + /// Accessor to the itimer_ + /// followed http://sam.zoy.org/writings/programming/gprof.html + struct itimerval* timerval (void); +#endif // ACE_USES_PROF + + /// Invoke the close_log_msg_hook, if it is present + static void close_log_msg (void); + + /// Invoke the sync_log_msg_hook, if it is present + static void sync_log_msg (const ACE_TCHAR *prog_name); + + /// Invoke the thr_desc_log_msg_hook, if it is present + static ACE_OS_Thread_Descriptor *thr_desc_log_msg (void); + +protected: + /// Constructor. + ACE_Base_Thread_Adapter (ACE_THR_FUNC user_func, + void *arg, + ACE_THR_C_FUNC entry_point = (ACE_THR_C_FUNC) ACE_THREAD_ADAPTER_NAME, + ACE_OS_Thread_Descriptor *td = 0 +# if defined (ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS) + , ACE_SEH_EXCEPT_HANDLER selector = 0 + , ACE_SEH_EXCEPT_HANDLER handler = 0 +# endif /* ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS */ + ); + /// Inherit the logging features if the parent thread has an + /// ACE_Log_Msg. + void inherit_log_msg (void); + +private: + /// The hooks to inherit and cleanup the Log_Msg attributes + static ACE_INIT_LOG_MSG_HOOK init_log_msg_hook_; + static ACE_INHERIT_LOG_MSG_HOOK inherit_log_msg_hook_; + static ACE_CLOSE_LOG_MSG_HOOK close_log_msg_hook_; + static ACE_SYNC_LOG_MSG_HOOK sync_log_msg_hook_; + static ACE_THR_DESC_LOG_MSG_HOOK thr_desc_log_msg_hook_; + + /// Set the Log_Msg hooks + static void set_log_msg_hooks (ACE_INIT_LOG_MSG_HOOK init_hook, + ACE_INHERIT_LOG_MSG_HOOK inherit_hook, + ACE_CLOSE_LOG_MSG_HOOK close_hook, + ACE_SYNC_LOG_MSG_HOOK sync_hook, + ACE_THR_DESC_LOG_MSG_HOOK thr_desc); + + /// Allow the ACE_Log_Msg class to set its hooks. + friend class ACE_Log_Msg; + +protected: + /// Thread startup function passed in by the user (C++ linkage). + ACE_THR_FUNC user_func_; + + /// Argument to thread startup function. + void *arg_; + + /// Entry point to the underlying OS thread creation call (C + /// linkage). + ACE_THR_C_FUNC entry_point_; + + /** + * Optional thread descriptor. Passing this pointer in will force + * the spawned thread to cache this location in and wait + * until fills in all information in thread + * descriptor. + */ + ACE_OS_Thread_Descriptor *thr_desc_; + + /// The ACE_Log_Msg attributes. + ACE_OS_Log_Msg_Attributes log_msg_attributes_; + /// That is usefull for gprof, define itimerval +#ifdef ACE_USES_GPROF + struct itimerval itimer_; +#endif // ACE_USES_GPROF + +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +# if defined (ACE_HAS_INLINED_OSCALLS) +# if defined (ACE_INLINE) +# undef ACE_INLINE +# endif /* ACE_INLINE */ +# define ACE_INLINE inline +# include "ace/Base_Thread_Adapter.inl" +# endif /* ACE_HAS_INLINED_OSCALLS */ + +#include /**/ "ace/post.h" +#endif /* ACE_BASE_THREAD_ADAPTER_H */ diff --git a/ACE/ace/Base_Thread_Adapter.inl b/ACE/ace/Base_Thread_Adapter.inl new file mode 100644 index 00000000000..7fa3959034b --- /dev/null +++ b/ACE/ace/Base_Thread_Adapter.inl @@ -0,0 +1,48 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE long +ACE_OS_Thread_Descriptor::flags (void) const +{ + return flags_; +} + +ACE_INLINE +ACE_OS_Thread_Descriptor::ACE_OS_Thread_Descriptor (long flags) + : flags_ (flags) +{ +} + +ACE_INLINE void +ACE_Base_Thread_Adapter::set_log_msg_hooks ( + ACE_INIT_LOG_MSG_HOOK init_hook, + ACE_INHERIT_LOG_MSG_HOOK inherit_hook, + ACE_CLOSE_LOG_MSG_HOOK close_hook, + ACE_SYNC_LOG_MSG_HOOK sync_hook, + ACE_THR_DESC_LOG_MSG_HOOK thr_desc_hook) +{ + ACE_Base_Thread_Adapter::init_log_msg_hook_ = init_hook; + ACE_Base_Thread_Adapter::inherit_log_msg_hook_ = inherit_hook; + ACE_Base_Thread_Adapter::close_log_msg_hook_ = close_hook; + ACE_Base_Thread_Adapter::sync_log_msg_hook_ = sync_hook; + ACE_Base_Thread_Adapter::thr_desc_log_msg_hook_ = thr_desc_hook; +} + +ACE_INLINE ACE_THR_C_FUNC +ACE_Base_Thread_Adapter::entry_point (void) +{ + return this->entry_point_; +} + +#ifdef ACE_USES_GPROF +ACE_INLINE itimerval* +ACE_Base_Thread_Adapter::timerval (void) +{ + return &(this->itimer_); +} +#endif // ACE_USES_GPROF + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Based_Pointer_Repository.cpp b/ACE/ace/Based_Pointer_Repository.cpp new file mode 100644 index 00000000000..a76d3dbcbd3 --- /dev/null +++ b/ACE/ace/Based_Pointer_Repository.cpp @@ -0,0 +1,119 @@ +// $Id$ + +#include "ace/Map_Manager.h" +#include "ace/Based_Pointer_Repository.h" +#include "ace/Guard_T.h" +#include "ace/Null_Mutex.h" +#include "ace/Synch_Traits.h" +#include "ace/RW_Thread_Mutex.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Based_Pointer_Repository_Rep + * + * @brief Implementation for the ACE_Based_Pointer_Repository. + * + * Every memory pool in ACE binds it's mapping base address and + * the mapped size to this repository every time it maps/remaps a + * new chunk of memory successfully. + */ +class ACE_Based_Pointer_Repository_Rep +{ +public: + // Useful typedefs. + typedef ACE_Map_Manager MAP_MANAGER; + typedef ACE_Map_Iterator MAP_ITERATOR; + typedef ACE_Map_Entry MAP_ENTRY; + + /// Keeps track of the mapping between addresses and their associated + /// values. + MAP_MANAGER addr_map_; + + /// Synchronize concurrent access to the map. + ACE_SYNCH_MUTEX lock_; +}; + +ACE_Based_Pointer_Repository::ACE_Based_Pointer_Repository (void) +{ + ACE_TRACE ("ACE_Based_Pointer_Repository::ACE_Based_Pointer_Repository"); + ACE_NEW (this->rep_, + ACE_Based_Pointer_Repository_Rep); +} + +ACE_Based_Pointer_Repository::~ACE_Based_Pointer_Repository (void) +{ + ACE_TRACE ("ACE_Based_Pointer_Repository::~ACE_Based_Pointer_Repository"); + delete this->rep_; +} + +// Search for appropriate base address in repository + +int +ACE_Based_Pointer_Repository::find (void *addr, void *&base_addr) +{ + ACE_TRACE ("ACE_Based_Pointer_Repository::find"); + ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, mon, this->rep_->lock_, -1); + ACE_Based_Pointer_Repository_Rep::MAP_ENTRY *ce = 0; + + for (ACE_Based_Pointer_Repository_Rep::MAP_ITERATOR iter (this->rep_->addr_map_); + iter.next (ce) != 0; + iter.advance ()) + // Check to see if is within any of the regions. + if (addr >= ce->ext_id_ + && addr < ((char *)ce->ext_id_ + ce->int_id_)) + { + // Assign the base address. + base_addr = ce->ext_id_; + return 1; + } + + // Assume base address 0 (e.g., if new'ed). + base_addr = 0; + return 0; +} + +// Bind a new entry to the repository or update the size of an +// existing entry. + +int +ACE_Based_Pointer_Repository::bind (void *addr, size_t size) +{ + ACE_TRACE ("ACE_Based_Pointer_Repository::bind"); + ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, mon, this->rep_->lock_, -1); + + return this->rep_->addr_map_.rebind (addr, size); +} + +// Unbind a base from the repository. + +int +ACE_Based_Pointer_Repository::unbind (void *addr) +{ + ACE_TRACE ("ACE_Based_Pointer_Repository::unbind"); + ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, mon, this->rep_->lock_, -1); + ACE_Based_Pointer_Repository_Rep::MAP_ENTRY *ce = 0; + + // Search for service handlers that requested notification. + + for (ACE_Based_Pointer_Repository_Rep::MAP_ITERATOR iter (this->rep_->addr_map_); + iter.next (ce) != 0; + iter.advance ()) + { + // Check to see if is within any of the regions and if + // so, unbind the key from the map. + if (addr >= ce->ext_id_ + && addr < ((char *)ce->ext_id_ + ce->int_id_)) + // Unbind base address. + return this->rep_->addr_map_.unbind (ce->ext_id_); + } + + return 0; +} + +#if defined (ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION) +template ACE_Singleton * + ACE_Singleton::singleton_; +#endif /* ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION */ + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Based_Pointer_Repository.h b/ACE/ace/Based_Pointer_Repository.h new file mode 100644 index 00000000000..f7d7ac64125 --- /dev/null +++ b/ACE/ace/Based_Pointer_Repository.h @@ -0,0 +1,91 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Based_Pointer_Repository.h + * + * $Id$ + * + * @author Dietrich Quehl + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_BASED_POINTER_REPOSITORY_H +#define ACE_BASED_POINTER_REPOSITORY_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Singleton.h" +#include "ace/Synch_Traits.h" +#include "ace/os_include/os_stddef.h" + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Forward decl., using the "Cheshire Cat" technique. +class ACE_Based_Pointer_Repository_Rep; + +/** + * @class ACE_Based_Pointer_Repository + * + * @brief Maps pointers to the base address of the region to which each + * pointer belongs. + */ +class ACE_Export ACE_Based_Pointer_Repository +{ +public: + // = Use ACE_Null_Mutex to allow locking while iterating. + + // = Initialization and termination methods. + ACE_Based_Pointer_Repository (void); + ~ACE_Based_Pointer_Repository (void); + + // = Search structure methods. + /** + * Return the appropriate @a base_addr region that contains @a addr. + * Returns 1 on success and 0 if the @a addr isn't contained in any + * @a base_addr region. + */ + int find (void *addr, + void *&base_addr); + + /// Bind a new entry to the repository or update the size of an + /// existing entry. Returns 0 on success and -1 on failure. + int bind (void *addr, + size_t size); + + /// Unbind from the repository the that @a addr is + /// contained within. + int unbind (void *addr); + +private: + + /// Use the "Cheshire-Cat" technique to hide the implementation in + /// order to avoid circular #include dependencies. + ACE_Based_Pointer_Repository_Rep *rep_; + +}; + +// ---------------------------------- + +/// Declare a process wide singleton +ACE_SINGLETON_DECLARE (ACE_Singleton, + ACE_Based_Pointer_Repository, + ACE_SYNCH_RW_MUTEX) + +/// Provide a Singleton access point to the based pointer repository. +typedef ACE_Singleton + ACE_BASED_POINTER_REPOSITORY; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" + +#endif /* ACE_BASED_POINTER_REPOSITORY_H */ diff --git a/ACE/ace/Based_Pointer_T.cpp b/ACE/ace/Based_Pointer_T.cpp new file mode 100644 index 00000000000..217e1634690 --- /dev/null +++ b/ACE/ace/Based_Pointer_T.cpp @@ -0,0 +1,121 @@ +// $Id$ + +#ifndef ACE_BASED_POINTER_T_CPP +#define ACE_BASED_POINTER_T_CPP + +#include "ace/Based_Pointer_T.h" +#include "ace/Based_Pointer_Repository.h" +#include "ace/Log_Msg.h" + +# define ACE_TRACEX(X) ACE_Trace ____ (ACE_TEXT (X), __LINE__, ACE_TEXT (__FILE__)) + +#if !defined (__ACE_INLINE__) +#include "ace/Based_Pointer_T.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +ACE_Based_Pointer::ACE_Based_Pointer (void) +{ + ACE_TRACE ("ACE_Based_Pointer::ACE_Based_Pointer"); +} + +template void +ACE_Based_Pointer_Basic::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Based_Pointer_Basic::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\ntarget_ = %d\n"), this->target_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("base_offset_ = %d\n"), this->base_offset_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("computed pointer = %x\n"), + (CONCRETE *)(ACE_COMPUTE_BASED_POINTER (this)))); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Based_Pointer::ACE_Based_Pointer (CONCRETE *initial) + : ACE_Based_Pointer_Basic (initial) +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::ACE_Based_Pointer_Basic"); +} + +template +ACE_Based_Pointer::ACE_Based_Pointer (const void* base_addr, int) + : ACE_Based_Pointer_Basic (base_addr, 0) +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::ACE_Based_Pointer_Basic"); +} + +template +ACE_Based_Pointer_Basic::ACE_Based_Pointer_Basic (void) + : target_ (0), + base_offset_ (0) +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::ACE_Based_Pointer_Basic"); + void *base_addr = 0; + + // Find the base address associated with our pointer. Note + // that it's ok for to return 0, which simply indicates that + // the address is not in memory-mapped virtual address space. + ACE_BASED_POINTER_REPOSITORY::instance ()->find (this, + base_addr); + this->base_offset_ = (char *) this - (char *) base_addr; +} + +template +ACE_Based_Pointer_Basic::ACE_Based_Pointer_Basic (const void *base_addr, int) + : target_ (0), + base_offset_ (0) +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::ACE_Based_Pointer_Basic"); + this->base_offset_ = (char *) this - (char *) base_addr; +} + +template +ACE_Based_Pointer_Basic::ACE_Based_Pointer_Basic (CONCRETE *rhs) + : target_ (0), + base_offset_ (0) +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::ACE_Based_Pointer_Basic"); + + if (rhs == 0) + // Store a value of that indicate "NULL" pointer. + this->target_ = -1; + else + { + void *base_addr = 0; + + // Find the base address associated with the pointer. + // Note that it's ok for to return 0, which simply + // indicates that the address is not in memory-mapped virtual + // address space. + ACE_BASED_POINTER_REPOSITORY::instance ()->find (this, + base_addr); + this->base_offset_ = (char *) this - (char *) base_addr; + this->target_ = ((char *) rhs - (char *) base_addr); + } +} + +template +ACE_Based_Pointer_Basic::ACE_Based_Pointer_Basic (const ACE_Based_Pointer_Basic &) +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::ACE_Based_Pointer_Basic"); + + ACE_ASSERT (0); // not implemented. +} + +template +ACE_Based_Pointer::ACE_Based_Pointer (const ACE_Based_Pointer &rhs) + : ACE_Based_Pointer_Basic (rhs) +{ + ACE_TRACE ("ACE_Based_Pointer::ACE_Based_Pointer"); + ACE_ASSERT (0); // not implemented. +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_BASED_POINTER_T_CPP */ diff --git a/ACE/ace/Based_Pointer_T.h b/ACE/ace/Based_Pointer_T.h new file mode 100644 index 00000000000..bb5874f002f --- /dev/null +++ b/ACE/ace/Based_Pointer_T.h @@ -0,0 +1,205 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Based_Pointer_T.h + * + * $Id$ + * + * @author Dietrich Quehl + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_BASED_POINTER_T_H +#define ACE_BASED_POINTER_T_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" +#include "ace/Basic_Types.h" + +#if defined (_MSC_VER) +// Suppress warning e.g. "return type for +// 'ACE_Based_Pointer::operator ->' is 'long *' (i.e., not a UDT +// or reference to a UDT. Will produce errors if applied using infix +// notation)" +#pragma warning(disable: 4284) +#endif /* _MSC_VER */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Based_Pointer_Basic + * + * @brief A proxy that keeps track of the relative offset of a "pointer" + * from its base address. + * This class makes it possible to transparently use "pointers" in + * shared memory as easily as programming with pointers to local + * memory. In particular, we don't need to ensure that the base + * addresses of all the pointers are mapped into separate + * processes at the same absolute memory base address. + */ +template +class ACE_Based_Pointer_Basic +{ +public: + /** + * This constructor initializes the by asking the + * Singleton for the base address of + * the memory region within which it is instantiated. Two results + * are possible: + * + * 1. An has stored a base address/size pair and the + * new based-pointer instance is located between the base address and + * the base address + size - 1. In this case, the repository + * returns the base address. + * + * 2. No suitable address/size pair was found. The repository + * assumes an address in the regular (not mapped) virtual address + * space of the process and returns 0. In this case, the + * based-pointer uses its address as an offset to it's base + * address 0. + */ + ACE_Based_Pointer_Basic (void); + + /** + * Initialize this object using the pointer. This + * constructor initializes the by asking the + * Singleton for the base address of + * the memory region within which it is instantiated. Three results + * are possible: + * + * 1. An has stored a base address/size pair and the + * new based-pointer instance is located between the base address and + * the base address + size - 1. In this case, the repository + * returns the base address. + * + * 2. No suitable address/size pair was found. The repository + * assumes an address in the regular (not mapped) virtual address + * space of the process and returns 0. In this case, the + * based-pointer uses its address as an offset to its base + * address 0. + * + * 3. If is 0 then set the value of to -1, which + * indicates a "NULL" pointer. + */ + ACE_Based_Pointer_Basic (CONCRETE *initial); + + /// Copy constructor. + ACE_Based_Pointer_Basic (const ACE_Based_Pointer_Basic &); + + /// Constructor for know base address. is only used to + /// resolve overload ambiguity. + ACE_Based_Pointer_Basic (const void *base_addr, int o); + + /// Pseudo-assignment operator. + void operator = (CONCRETE *from); + + /// Pseudo-assignment operator. + void operator = (const ACE_Based_Pointer_Basic &); + + /// Dereference operator. + CONCRETE& operator * (void) const; + + /// Less than operator. + bool operator < (const ACE_Based_Pointer_Basic &) const; + + /// Less than or equal operator. + bool operator <= (const ACE_Based_Pointer_Basic &) const; + + /// Greater than operator. + bool operator > (const ACE_Based_Pointer_Basic &) const; + + /// Greater than or equal operator. + bool operator >= (const ACE_Based_Pointer_Basic &) const; + + /// Equality operator. + bool operator == (const ACE_Based_Pointer_Basic &) const; + + /// Inequality operator. + bool operator != (const ACE_Based_Pointer_Basic &) const; + + /// Subscript operator. + CONCRETE& operator [](int index) const; + + /// Increment operator. + void operator+= (int index); + + /// Returns the underlying memory address of the smart pointer. + operator CONCRETE *() const; + + /// Returns the underlying memory address of the smart pointer. + CONCRETE *addr (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + + /// Dump the state of the object. + void dump (void) const; + +protected: + ptrdiff_t target_; + + /// Keep track of our offset from the base pointer. + ptrdiff_t base_offset_; +}; + +/** + * @class ACE_Based_Pointer + * + * @brief A smart proxy that keeps track of the relative offset of a + * "pointer" from its base address. + * + * This class makes it possible to transparently use "pointers" in + * shared memory as easily as programming with pointers to local + * memory by overloading the C++ delegation operator ->(). + */ +template +class ACE_Based_Pointer : public ACE_Based_Pointer_Basic +{ +public: + // = Initialization method. + /// Constructor. See constructor for ACE_Based_Pointer_Basic for + /// details. + ACE_Based_Pointer (void); + + /// Initialize this object using the pointer. See + /// constructor for ACE_Based_Pointer_Basic for details. + ACE_Based_Pointer (CONCRETE *initial); + + /// Initialize this object with known @a base_addr. @a dummy is + /// a dummy value used to resolve overload ambiguity and it + /// otherwise ignored. + ACE_Based_Pointer (const void *base_addr, int dummy); + + /// Copy constructor (not implemented yet). + ACE_Based_Pointer (const ACE_Based_Pointer &); + + /// Assignment operator. + void operator = (const ACE_Based_Pointer &); + + /// Pseudo-assignment operator. + void operator = (CONCRETE *from); + + /// The C++ "delegation operator". + CONCRETE *operator-> (void); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Based_Pointer_T.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Based_Pointer_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Based_Pointer_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" + +#endif /* ACE_BASED_POINTER_T_H */ diff --git a/ACE/ace/Based_Pointer_T.inl b/ACE/ace/Based_Pointer_T.inl new file mode 100644 index 00000000000..5fb2c985f40 --- /dev/null +++ b/ACE/ace/Based_Pointer_T.inl @@ -0,0 +1,139 @@ +// -*- C++ -*- +// +// $Id$ + +#define ACE_COMPUTE_BASED_POINTER(P) (((char *) (P) - (P)->base_offset_) + (P)->target_) +#include "ace/Global_Macros.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE CONCRETE * +ACE_Based_Pointer::operator->(void) +{ + ACE_TRACE ("ACE_Based_Pointer::operator->"); + return reinterpret_cast (ACE_COMPUTE_BASED_POINTER (this)); +} + +template ACE_INLINE void +ACE_Based_Pointer_Basic::operator = (CONCRETE *rhs) +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::operator ="); + if (rhs == 0) + // Store a value of that indicate "NULL" pointer. + this->target_ = -1; + else + this->target_ = ((char *) rhs + - ((char *) this - this->base_offset_)); +} + +template ACE_INLINE void +ACE_Based_Pointer::operator = (CONCRETE *rhs) +{ + ACE_TRACE ("ACE_Based_Pointer::operator ="); + if (rhs == 0) + // Store a value of that indicate "NULL" pointer. + this->target_ = -1; + else + this->target_ = ((char *) rhs + - ((char *) this - this->base_offset_)); +} + +template ACE_INLINE CONCRETE& +ACE_Based_Pointer_Basic::operator *(void) const +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::operator *"); + return *reinterpret_cast (ACE_COMPUTE_BASED_POINTER (this)); +} + +template ACE_INLINE CONCRETE * +ACE_Based_Pointer_Basic::addr (void) const +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::addr"); + + if (this->target_ == -1) + return 0; + else + return reinterpret_cast (ACE_COMPUTE_BASED_POINTER (this)); +} + +template ACE_INLINE +ACE_Based_Pointer_Basic::operator CONCRETE *() const +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::operator CONCRETE *()"); + + return this->addr (); +} + +template ACE_INLINE CONCRETE& +ACE_Based_Pointer_Basic::operator [] (int index) const +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::operator []"); + CONCRETE *c = + reinterpret_cast (ACE_COMPUTE_BASED_POINTER (this)); + return c[index]; +} + +template ACE_INLINE void +ACE_Based_Pointer_Basic::operator += (int index) +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::operator +="); + this->base_offset_ += (index * sizeof (CONCRETE)); +} + +template ACE_INLINE bool +ACE_Based_Pointer_Basic::operator == (const ACE_Based_Pointer_Basic &rhs) const +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::operator =="); + return ACE_COMPUTE_BASED_POINTER (this) == ACE_COMPUTE_BASED_POINTER (&rhs); +} + +template ACE_INLINE bool +ACE_Based_Pointer_Basic::operator != (const ACE_Based_Pointer_Basic &rhs) const +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::operator !="); + return !(*this == rhs); +} + +template ACE_INLINE bool +ACE_Based_Pointer_Basic::operator < (const ACE_Based_Pointer_Basic &rhs) const +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::operator <"); + return ACE_COMPUTE_BASED_POINTER (this) < ACE_COMPUTE_BASED_POINTER (&rhs); +} + +template ACE_INLINE bool +ACE_Based_Pointer_Basic::operator <= (const ACE_Based_Pointer_Basic &rhs) const +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::operator <="); + return ACE_COMPUTE_BASED_POINTER (this) <= ACE_COMPUTE_BASED_POINTER (&rhs); +} + +template ACE_INLINE bool +ACE_Based_Pointer_Basic::operator > (const ACE_Based_Pointer_Basic &rhs) const +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::operator >"); + return ACE_COMPUTE_BASED_POINTER (this) > ACE_COMPUTE_BASED_POINTER (&rhs); +} + +template ACE_INLINE bool +ACE_Based_Pointer_Basic::operator >= (const ACE_Based_Pointer_Basic &rhs) const +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::operator >="); + return ACE_COMPUTE_BASED_POINTER (this) >= ACE_COMPUTE_BASED_POINTER (&rhs); +} + +template ACE_INLINE void +ACE_Based_Pointer_Basic::operator= (const ACE_Based_Pointer_Basic &rhs) +{ + ACE_TRACE ("ACE_Based_Pointer_Basic::operator="); + *this = rhs.addr (); +} + +template ACE_INLINE void +ACE_Based_Pointer::operator= (const ACE_Based_Pointer &rhs) +{ + ACE_TRACE ("ACE_Based_Pointer::operator="); + *this = rhs.addr (); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Basic_Stats.cpp b/ACE/ace/Basic_Stats.cpp new file mode 100644 index 00000000000..9c0b2a7c2f5 --- /dev/null +++ b/ACE/ace/Basic_Stats.cpp @@ -0,0 +1,78 @@ +// $Id$ + +#include "ace/Basic_Stats.h" +#include "ace/Log_Msg.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Basic_Stats.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, + Basic_Stats, + "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +void +ACE_Basic_Stats::accumulate (const ACE_Basic_Stats &rhs) +{ + if (rhs.samples_count_ == 0) + return; + + if (this->samples_count_ == 0) + { + this->min_ = rhs.min_; + this->min_at_ = rhs.min_at_; + + this->max_ = rhs.max_; + this->max_at_ = rhs.max_at_; + } + else + { + if (this->min_ > rhs.min_) + { + this->min_ = rhs.min_; + this->min_at_ = rhs.min_at_; + } + if (this->max_ < rhs.max_) + { + this->max_ = rhs.max_; + this->max_at_ = rhs.max_at_; + } + } + + this->samples_count_ += rhs.samples_count_; + this->sum_ += rhs.sum_; +} + +void +ACE_Basic_Stats::dump_results (const ACE_TCHAR *msg, ACE_UINT32 sf) const +{ +#ifndef ACE_NLOGGING + if (this->samples_count () == 0u) + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("%s : no data collected\n"), msg)); + return; + } + + ACE_UINT64 avg = this->sum_ / this->samples_count_; + + ACE_UINT64 l_min = this->min_ / sf; + ACE_UINT64 l_max = this->max_ / sf; + ACE_UINT64 l_avg = avg / sf; + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("%s latency : %Q[%d]/%Q/%Q[%d] (min/avg/max)\n"), + msg, + l_min, this->min_at_, + l_avg, + l_max, this->max_at_)); + +#else + ACE_UNUSED_ARG (msg); + ACE_UNUSED_ARG (sf); +#endif /* ACE_NLOGGING */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Basic_Stats.h b/ACE/ace/Basic_Stats.h new file mode 100644 index 00000000000..11f24ca6bf8 --- /dev/null +++ b/ACE/ace/Basic_Stats.h @@ -0,0 +1,87 @@ + +//============================================================================= +/** + * @file Basic_Stats.h + * + * $Id$ + * + * @author Carlos O'Ryan + */ +//============================================================================= + + +#ifndef ACE_BASIC_STATS_H +#define ACE_BASIC_STATS_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" +#include "ace/Basic_Types.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/// Collect basic stats about a series of samples +/** + * Compute the average and standard deviation (aka jitter) for an + * arbitrary number of samples, using constant space. + * Normally used for latency statistics. + */ +class ACE_Export ACE_Basic_Stats +{ +public: + /// Constructor + /** + * The number of samples is pre-allocated, and cannot changes once + * the class is initialized. + */ + ACE_Basic_Stats (void); + + /// The number of samples received so far + ACE_UINT32 samples_count (void) const; + + /// Record one sample. + void sample (ACE_UINT64 value); + + /// Update the values to reflect the stats in @a rhs. + void accumulate (const ACE_Basic_Stats &rhs); + + /// Dump all the samples + /** + * Prints out the results, using @a msg as a prefix for each message and + * scaling all the numbers by @a scale_factor. The latter is useful because + * high resolution timer samples are acquired in clock ticks, but often + * presented in microseconds. + */ + void dump_results (const ACE_TCHAR *msg, + ACE_UINT32 scale_factor) const; + + /// The number of samples + ACE_UINT32 samples_count_; + + /// The minimum value + ACE_UINT64 min_; + + /// The number of the sample that had the minimum value + ACE_UINT32 min_at_; + + /// The maximum value + ACE_UINT64 max_; + + /// The number of the sample that had the maximum value + ACE_UINT32 max_at_; + + /// The sum of all the values + ACE_UINT64 sum_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Basic_Stats.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_BASIC_STATS_H */ diff --git a/ACE/ace/Basic_Stats.inl b/ACE/ace/Basic_Stats.inl new file mode 100644 index 00000000000..bbdce099907 --- /dev/null +++ b/ACE/ace/Basic_Stats.inl @@ -0,0 +1,53 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_Basic_Stats::ACE_Basic_Stats (void) + : samples_count_ (0) + , min_ (0) + , min_at_ (0) + , max_ (0) + , max_at_ (0) + , sum_ (0) +{ +} + +ACE_INLINE ACE_UINT32 +ACE_Basic_Stats::samples_count (void) const +{ + return this->samples_count_; +} + +ACE_INLINE void +ACE_Basic_Stats::sample (ACE_UINT64 value) +{ + ++this->samples_count_; + + if (this->samples_count_ == 1u) + { + this->min_ = value; + this->min_at_ = this->samples_count_; + this->max_ = value; + this->max_at_ = this->samples_count_; + } + else + { + if (this->min_ > value) + { + this->min_ = value; + this->min_at_ = this->samples_count_; + } + if (this->max_ < value) + { + this->max_ = value; + this->max_at_ = this->samples_count_; + } + } + + this->sum_ += value; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Basic_Types.cpp b/ACE/ace/Basic_Types.cpp new file mode 100644 index 00000000000..f2e055b991e --- /dev/null +++ b/ACE/ace/Basic_Types.cpp @@ -0,0 +1,139 @@ +#include "ace/Basic_Types.h" + +#if !defined (__ACE_INLINE__) +# include "ace/Basic_Types.inl" +#endif /* ! __ACE_INLINE__ */ + + +ACE_RCSID (ace, + Basic_Types, + "$Id$") + + +#if defined (ACE_LACKS_LONGLONG_T) && !defined (ACE_LACKS_UNSIGNEDLONGLONG_T) +# include "ace/Log_Msg.h" +# include "ace/OS_NS_stdio.h" +# include "ace/OS_NS_string.h" +# if !defined (ACE_LACKS_IOSTREAM_TOTALLY) +// FUZZ: disable check_for_streams_include +# include "ace/streams.h" +# endif /* ! ACE_LACKS_IOSTREAM_TOTALLY */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +void +ACE_U_LongLong::output (FILE *file) const +{ + if (h_ () > 0) + ACE_OS::fprintf (file, "0x%lx%0*lx", h_ (), 2 * sizeof l_ (), l_ ()); + else + ACE_OS::fprintf (file, "0x%lx", l_ ()); +} + + +ACE_TCHAR * +ACE_U_LongLong::as_string (ACE_TCHAR *output, + unsigned int base, + unsigned int uppercase) const +{ + if (*this == 0) + { + ACE_OS::strcpy(output, "0"); + } + else + { + switch(base) + { + case 8: + { + unsigned int index = 0; + int bshift = 31; + while(bshift >= 1) + { + unsigned int sval = (this->h_ () >> bshift) & 7; + if (sval > 0 || index != 0) + { + output[index] = sval + '0'; + ++index; + } + bshift -= 3; + } + bshift = 30; + while(bshift >= 0) + { + unsigned int sval = (this->l_ () >> bshift) & 7; + // Combine the last bit of hi with the first 3-bit digit + if (bshift == 30) + { + sval |= (this->h_ () & 1) << 2; + } + if (sval > 0 || index != 0) + { + output[index] = sval + '0'; + ++index; + } + bshift -= 3; + } + output[index] = '\0'; + break; + } + case 10: + { + ACE_OS::sprintf(output, "%.0f", *this / 1.0); + break; + } + case 16: + { + if (this->h_ () != 0) + { + ACE_OS::sprintf(output, + (uppercase ? "%lX%0*lX" : "%lx%0*lx"), + this->h_ (), 2 * sizeof this->l_ (), + this->l_ ()); + } + else + { + ACE_OS::sprintf(output, + (uppercase ? "%lX" : "%lx"), this->l_ ()); + + } + break; + } + default: + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Unsupported base = %u\n"), base)); + output[0] = '\0'; + } + } + } + + return output; +} + + +# if !defined (ACE_LACKS_IOSTREAM_TOTALLY) +ostream& +operator<< (ostream& os, const ACE_U_LongLong& ll) +{ +#ifdef __TANDEM && (__CPLUSPLUS_VERSION >= 3) + unsigned long flags = os.flags(); +#else + unsigned long flags = os.setf(0); +#endif + char buffer[32]; + + if ((flags & ios::oct) != 0) + os << ll.as_string (buffer, 8); + else if ((flags & ios::hex) != 0) + os << ll.as_string (buffer, 16, (flags & ios::uppercase)); + else + os << ll.as_string (buffer); + return os; +} +# endif + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_LACKS_LONGLONG_T */ + diff --git a/ACE/ace/Basic_Types.h b/ACE/ace/Basic_Types.h new file mode 100644 index 00000000000..2d6942bb511 --- /dev/null +++ b/ACE/ace/Basic_Types.h @@ -0,0 +1,890 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Basic_Types.h + * + * $Id$ + * + * @author David L. Levine + * + * #defines the list of preprocessor macros below. The config.h file can + * pre-define any of these to short-cut the definitions. This is usually + * only necessary if the preprocessor does all of its math using integers. + * + * Sizes of built-in types: + * - ACE_SIZEOF_CHAR + * - ACE_SIZEOF_WCHAR + * - ACE_SIZEOF_SHORT + * - ACE_SIZEOF_INT + * - ACE_SIZEOF_LONG + * - ACE_SIZEOF_LONG_LONG + * - ACE_SIZEOF_VOID_P + * - ACE_SIZEOF_FLOAT + * - ACE_SIZEOF_DOUBLE + * - ACE_SIZEOF_LONG_DOUBLE + * + * Wrappers for built-in types of specific sizes: + * - ACE_USHORT16 (For backward compatibility. Use ACE_UINT16 instead.) + * - ACE_INT8 + * - ACE_UINT8 + * - ACE_INT16 + * - ACE_UINT16 + * - ACE_INT32 + * - ACE_UINT32 + * - ACE_UINT64 + * (@note ACE_INT64 is partly defined, there is no ACE_LongLong for + * platforms that don't have a native 8-byte integer type.) + * + * Byte-order (endian-ness) determination: + * ACE_BYTE_ORDER, to either ACE_BIG_ENDIAN or ACE_LITTLE_ENDIAN + * + * + */ +//============================================================================= + +#include "ace/config-lite.h" + +#ifndef ACE_BASIC_TYPES_H +# define ACE_BASIC_TYPES_H + +# include /**/ "ace/pre.h" + +# if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +# endif /* ACE_LACKS_PRAGMA_ONCE */ + +// Pull in definitions +# include "ace/os_include/os_limits.h" // Integer limits +# include "ace/os_include/os_float.h" // Floating point limits +# include "ace/os_include/os_stdlib.h" // Other types +# include "ace/os_include/os_stddef.h" // Get ptrdiff_t - see further comments below + +# if defined(ACE_LACKS_LONGLONG_T) +# include "ace/os_include/os_stdio.h" // For long long emulation +# endif /* ACE_LACKS_LONGLONG_T */ + +# include "ace/os_include/sys/os_types.h" + +# if !defined (ACE_LACKS_SYS_PARAM_H) +# include /**/ +# endif /* ACE_LACKS_SYS_PARAM_H */ + +# include "ace/ACE_export.h" + +# if !defined (ACE_LACKS_STDINT_H) +# include +# endif +# if !defined (ACE_LACKS_INTTYPES_H) +# include +# endif + +#ifdef ACE_LACKS_INTPTR_T +# include "ace/If_Then_Else.h" + +// This intptr_t typedef is here instead of +// since it depends on the template +// metaprogramming in . + +// We could compare ACE_SIZEOF_VOID_P against ACE_SIZEOF_LONG, etc. +// However, that depends on the ACE preprocessor symbol definitions in +// the platform-specific configuration header being correct. +// The template meta-programming approach we take below, +// i.e. determining the type at compile-time rather than at +// preprocessing-time, will work for all platforms, and does not +// depend on ACE developer-defined configuration parameters. + +typedef ACE::If_Then_Else< + (sizeof (void*) == sizeof (signed int)), + signed int, + ACE::If_Then_Else< + (sizeof (void*) == sizeof (signed long)), + signed long, +#ifdef ACE_LACKS_LONGLONG_T + void /* Unknown. Force an invalid type */ +#else + ACE::If_Then_Else< + (sizeof (void*) == sizeof (signed long long)), + signed long long, + void /* Unknown. Force an invalid type */ + >::result_type +#endif /* ACE_LACKS_LONGLONG_T */ + >::result_type + >::result_type intptr_t; + +typedef ACE::If_Then_Else< + (sizeof (void*) == sizeof (unsigned int)), + unsigned int, + ACE::If_Then_Else< + (sizeof (void*) == sizeof (unsigned long)), + unsigned long, +#ifdef ACE_LACKS_UNSIGNEDLONGLONG_T + void /* Unknown. Force an invalid type */ +#else + ACE::If_Then_Else< + (sizeof (void*) == sizeof (unsigned long long)), + unsigned long long, + void /* Unknown. Force an invalid type */ + >::result_type +#endif /* ACE_LACKS_UNSIGNEDLONGLONG_T */ + >::result_type + >::result_type uintptr_t; + +#endif /* ACE_LACKS_INTPTR_T */ + +// A char always has 1 byte, by definition. +# define ACE_SIZEOF_CHAR 1 + +// Unfortunately, there isn't a portable way to determine the size of a wchar. +// So we just define them on a platform basis. If the platform doesn't +// define it and it's an XPG4 system, assume wchar_t is 4 bytes. Some code +// uses ACE_SIZEOF_WCHAR in preprocessor statements, so sizeof() isn't valid. +// If the platform config doesn't set this, and this guess is wrong, +// Basic_Types_Test should catch the inconsistency. +# if defined (ACE_HAS_WCHAR) +# if !defined (ACE_SIZEOF_WCHAR) +# if defined (ACE_HAS_XPG4_MULTIBYTE_CHAR) +# define ACE_SIZEOF_WCHAR 4 +# else +// 0 so the Basic_Types test will catch this. +# define ACE_SIZEOF_WCHAR 0 +# endif /* ACE_HAS_XPG4_MULTIBYTE_CHAR */ +# endif /* !ACE_SIZEOF_WCHAR */ +# endif /* ACE_HAS_WCHAR */ + +// The number of bytes in a short. +# if !defined (ACE_SIZEOF_SHORT) +# if (USHRT_MAX) == 255U +# define ACE_SIZEOF_SHORT 1 +# elif (USHRT_MAX) == 65535U +# define ACE_SIZEOF_SHORT 2 +# elif (USHRT_MAX) == 4294967295U +# define ACE_SIZEOF_SHORT 4 +# elif (USHRT_MAX) == 18446744073709551615U +# define ACE_SIZEOF_SHORT 8 +# else +# error: unsupported short size, must be updated for this platform! +# endif /* USHRT_MAX */ +# endif /* !defined (ACE_SIZEOF_SHORT) */ + +// The number of bytes in an int. +# if !defined (ACE_SIZEOF_INT) +# if (UINT_MAX) == 65535U +# define ACE_SIZEOF_INT 2 +# elif (UINT_MAX) == 4294967295U +# define ACE_SIZEOF_INT 4 +# elif (UINT_MAX) == 18446744073709551615U +# define ACE_SIZEOF_INT 8 +# else +# error: unsupported int size, must be updated for this platform! +# endif /* UINT_MAX */ +# endif /* !defined (ACE_SIZEOF_INT) */ + +// The number of bytes in a long. +# if !defined (ACE_SIZEOF_LONG) +# if (ULONG_MAX) == 65535UL +# define ACE_SIZEOF_LONG 2 +# elif ((ULONG_MAX) == 4294967295UL) +# define ACE_SIZEOF_LONG 4 +# elif ((ULONG_MAX) == 18446744073709551615UL) +# define ACE_SIZEOF_LONG 8 +# else +# error: unsupported long size, must be updated for this platform! +# endif /* ULONG_MAX */ +# endif /* !defined (ACE_SIZEOF_LONG) */ + +// The number of bytes in a long long. +# if !defined (ACE_SIZEOF_LONG_LONG) +# if defined (ACE_LACKS_LONGLONG_T) +# define ACE_SIZEOF_LONG_LONG 8 +# elif defined (ULLONG_MAX) +# if ((ULLONG_MAX) == 4294967295ULL) +# define ACE_SIZEOF_LONG_LONG 4 +# elif ((ULLONG_MAX) == 18446744073709551615ULL) +# define ACE_SIZEOF_LONG_LONG 8 +# endif +# elif defined (ULONGLONG_MAX) +# if ((ULONGLONG_MAX) == 4294967295ULL) +# define ACE_SIZEOF_LONG_LONG 4 +# elif ((ULONGLONG_MAX) == 18446744073709551615ULL) +# define ACE_SIZEOF_LONG_LONG 8 +# endif +# endif +# // If we can't determine the size of long long, assume it is 8 +# // instead of erroring out. (Either ULLONG_MAX and ULONGLONG_MAX +# // may not be supported; or an extended C/C++ dialect may need to +# // be selected. If this assumption is wrong, it can be addressed +# // in the platform-specific config header. +# if !defined (ACE_SIZEOF_LONG_LONG) +# define ACE_SIZEOF_LONG_LONG 8 +# endif +# endif /* !defined (ACE_SIZEOF_LONG_LONG) */ + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// The sizes of the commonly implemented types are now known. Set up +// typedefs for whatever we can. Some of these are needed for certain +// cases of ACE_UINT64, so do them before the 64-bit stuff. + +#if defined (ACE_INT8_TYPE) + typedef ACE_INT8_TYPE ACE_INT8; +#elif defined (ACE_HAS_INT8_T) + typedef int8_t ACE_INT8; +#elif !defined (ACE_LACKS_SIGNED_CHAR) + typedef signed char ACE_INT8; +#else + typedef char ACE_INT8; +#endif /* defined (ACE_INT8_TYPE) */ + +#if defined (ACE_UINT8_TYPE) + typedef ACE_UINT8_TYPE ACE_UINT8; +#elif defined (ACE_HAS_UINT8_T) + typedef uint8_t ACE_UINT8; +#else + typedef unsigned char ACE_UINT8; +#endif /* defined (ACE_UINT8_TYPE) */ + +#if defined (ACE_INT16_TYPE) + typedef ACE_INT16_TYPE ACE_INT16; +#elif defined (ACE_HAS_INT16_T) + typedef int16_t ACE_INT16; +#elif ACE_SIZEOF_SHORT == 2 + typedef short ACE_INT16; +#elif ACE_SIZEOF_INT == 2 + typedef int ACE_INT16; +#else +# error Have to add to the ACE_INT16 type setting +#endif /* defined (ACE_INT16_TYPE) */ + +#if defined (ACE_UINT16_TYPE) + typedef ACE_UINT16_TYPE ACE_UINT16; +#elif defined (ACE_HAS_UINT16_T) + typedef uint16_t ACE_UINT16; +#elif ACE_SIZEOF_SHORT == 2 + typedef unsigned short ACE_UINT16; +#elif ACE_SIZEOF_INT == 2 + typedef unsigned int ACE_UINT16; +#else +# error Have to add to the ACE_UINT16 type setting +#endif /* defined (ACE_UINT16_TYPE) */ + +#if defined (ACE_INT32_TYPE) + typedef ACE_INT32_TYPE ACE_INT32; +#elif defined (ACE_HAS_INT32_T) + typedef int32_t ACE_INT32; +#elif ACE_SIZEOF_INT == 4 + typedef int ACE_INT32; +#elif ACE_SIZEOF_LONG == 4 + typedef long ACE_INT32; +#else +# error Have to add to the ACE_INT32 type setting +#endif /* defined (ACE_INT32_TYPE) */ + +#if defined (ACE_UINT32_TYPE) + typedef ACE_UINT32_TYPE ACE_UINT32; +#elif defined (ACE_HAS_UINT32_T) + typedef uint32_t ACE_UINT32; +#elif ACE_SIZEOF_INT == 4 + typedef unsigned int ACE_UINT32; +#elif ACE_SIZEOF_LONG == 4 + typedef unsigned long ACE_UINT32; +#else +# error Have to add to the ACE_UINT32 type setting +#endif /* defined (ACE_UINT32_TYPE) */ + +#if defined (ACE_INT64_TYPE) + typedef ACE_INT64_TYPE ACE_INT64; +#elif defined (ACE_HAS_INT64_T) + typedef int64_t ACE_INT64; +#elif ACE_SIZEOF_LONG == 8 + typedef long ACE_INT64; +#elif !defined (ACE_LACKS_LONGLONG_T) && ACE_SIZEOF_LONG_LONG == 8 +# ifdef __GNUC__ + // Silence g++ "-pedantic" warnings regarding use of "long long" + // type. + __extension__ +# endif /* __GNUC__ */ + typedef long long ACE_INT64; +#endif /* defined (ACE_INT64_TYPE) */ + +#if !(defined (ACE_LACKS_LONGLONG_T) || defined (ACE_LACKS_UNSIGNEDLONGLONG_T)) +/* See matching #if around ACE_U_LongLong class declaration below */ + +# if defined (ACE_UINT64_TYPE) + typedef ACE_UINT64_TYPE ACE_UINT64; +# elif defined (ACE_HAS_UINT64_T) + typedef uint64_t ACE_UINT64; +# elif ACE_SIZEOF_LONG == 8 + typedef unsigned long ACE_UINT64; +# elif ACE_SIZEOF_LONG_LONG == 8 +# ifdef __GNUC__ + // Silence g++ "-pedantic" warnings regarding use of "long long" + // type. + __extension__ +# endif /* __GNUC__ */ + typedef unsigned long long ACE_UINT64; +# endif /* defined (ACE_UINT64_TYPE) */ +#endif /* !(ACE_LACKS_LONGLONG_T || ACE_LACKS_UNSIGNEDLONGLONG_T) */ + + +typedef ACE_UINT16 ACE_USHORT16; // @@ Backward compatibility. + +// Define a generic byte for use in codecs +typedef unsigned char ACE_Byte; + +// Define a pseudo wide character type when wchar is not supported so we +// can support basic wide character string operations. + +# if defined (ACE_HAS_WCHAR) || defined (ACE_HAS_XPG4_MULTIBYTE_CHAR) +# define ACE_WINT_T wint_t +# define ACE_WCHAR_T wchar_t +# else +# define ACE_WINT_T ACE_UINT16 +# define ACE_WCHAR_T ACE_UINT16 +# endif /* ACE_HAS_WCHAR */ + +// The number of bytes in a void *. +# ifndef ACE_SIZEOF_VOID_P +# define ACE_SIZEOF_VOID_P ACE_SIZEOF_LONG +# endif /* ACE_SIZEOF_VOID_P */ + +// Type for doing arithmetic on pointers ... as elsewhere, we assume +// that unsigned versions of a type are the same size as the signed +// version of the same type. +# if defined (ACE_HAS_WINCE) && (_WIN32_WCE < 400) +typedef unsigned long ptrdiff_t; // evc3, PocketPC don't defined ptrdiff_t +# endif + +ACE_END_VERSIONED_NAMESPACE_DECL + +// Byte-order (endian-ness) determination. +# if defined (BYTE_ORDER) +# if (BYTE_ORDER == LITTLE_ENDIAN) +# define ACE_LITTLE_ENDIAN 0x0123 +# define ACE_BYTE_ORDER ACE_LITTLE_ENDIAN +# elif (BYTE_ORDER == BIG_ENDIAN) +# define ACE_BIG_ENDIAN 0x3210 +# define ACE_BYTE_ORDER ACE_BIG_ENDIAN +# else +# error: unknown BYTE_ORDER! +# endif /* BYTE_ORDER */ +# elif defined (_BYTE_ORDER) +# if (_BYTE_ORDER == _LITTLE_ENDIAN) +# define ACE_LITTLE_ENDIAN 0x0123 +# define ACE_BYTE_ORDER ACE_LITTLE_ENDIAN +# elif (_BYTE_ORDER == _BIG_ENDIAN) +# define ACE_BIG_ENDIAN 0x3210 +# define ACE_BYTE_ORDER ACE_BIG_ENDIAN +# else +# error: unknown _BYTE_ORDER! +# endif /* _BYTE_ORDER */ +# elif defined (__BYTE_ORDER) +# if (__BYTE_ORDER == __LITTLE_ENDIAN) +# define ACE_LITTLE_ENDIAN 0x0123 +# define ACE_BYTE_ORDER ACE_LITTLE_ENDIAN +# elif (__BYTE_ORDER == __BIG_ENDIAN) +# define ACE_BIG_ENDIAN 0x3210 +# define ACE_BYTE_ORDER ACE_BIG_ENDIAN +# else +# error: unknown __BYTE_ORDER! +# endif /* __BYTE_ORDER */ +# else /* ! BYTE_ORDER && ! __BYTE_ORDER */ + // We weren't explicitly told, so we have to figure it out . . . +# if defined (i386) || defined (__i386__) || defined (_M_IX86) || \ + defined (vax) || defined (__alpha) || defined (__LITTLE_ENDIAN__) || \ + defined (ARM) || defined (_M_IA64) || defined (__ia64__) || \ + defined (_M_AMD64) || defined (__amd64) + // We know these are little endian. +# define ACE_LITTLE_ENDIAN 0x0123 +# define ACE_BYTE_ORDER ACE_LITTLE_ENDIAN +# else + // Otherwise, we assume big endian. +# define ACE_BIG_ENDIAN 0x3210 +# define ACE_BYTE_ORDER ACE_BIG_ENDIAN +# endif +# endif /* ! BYTE_ORDER && ! __BYTE_ORDER */ + +// Byte swapping macros to deal with differences between little endian +// and big endian machines. Note that "long" here refers to 32 bit +// quantities. +# define ACE_SWAP_LONG(L) ((ACE_SWAP_WORD ((L) & 0xFFFF) << 16) \ + | ACE_SWAP_WORD(((L) >> 16) & 0xFFFF)) +# define ACE_SWAP_WORD(L) ((((L) & 0x00FF) << 8) | (((L) & 0xFF00) >> 8)) + +# if defined (ACE_LITTLE_ENDIAN) +# define ACE_HTONL(X) ACE_SWAP_LONG (X) +# define ACE_NTOHL(X) ACE_SWAP_LONG (X) +# define ACE_IDL_NCTOHL(X) (X) +# define ACE_IDL_NSTOHL(X) (X) +# else +# define ACE_HTONL(X) X +# define ACE_NTOHL(X) X +# define ACE_IDL_NCTOHL(X) (X << 24) +# define ACE_IDL_NSTOHL(X) ((X) << 16) +# endif /* ACE_LITTLE_ENDIAN */ + +# if defined (ACE_LITTLE_ENDIAN) +# define ACE_HTONS(x) ACE_SWAP_WORD(x) +# define ACE_NTOHS(x) ACE_SWAP_WORD(x) +# else +# define ACE_HTONS(x) x +# define ACE_NTOHS(x) x +# endif /* ACE_LITTLE_ENDIAN */ + +#if defined (ACE_LACKS_LONGLONG_T) + // This throws away the high 32 bits. It's very unlikely that a + // pointer will be more than 32 bits wide if the platform does not + // support 64-bit integers. +# define ACE_LONGLONG_TO_PTR(PTR_TYPE, L) \ + reinterpret_cast (L.lo ()) +#elif defined (ACE_OPENVMS) && (!defined (__INITIAL_POINTER_SIZE) || (__INITIAL_POINTER_SIZE < 64)) +# define ACE_LONGLONG_TO_PTR(PTR_TYPE, L) \ + reinterpret_cast (static_cast (L)) +#else /* ! ACE_LACKS_LONGLONG_T */ +# define ACE_LONGLONG_TO_PTR(PTR_TYPE, L) \ + reinterpret_cast (static_cast (L)) +#endif /* ! ACE_LACKS_LONGLONG_T */ + +// If the platform lacks an unsigned long long, define one. +#if defined (ACE_LACKS_LONGLONG_T) || defined (ACE_LACKS_UNSIGNEDLONGLONG_T) +// Forward declaration for streams +# include "ace/iosfwd.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_U_LongLong + * + * @brief Unsigned long long for platforms that don't have one. + * + * Provide our own unsigned long long. This is intended to be + * use with ACE_High_Res_Timer, so the division operator assumes + * that the quotient fits into a u_long. + * Please note that the constructor takes (optionally) two values. + * The high one contributes 0x100000000 times its value. So, + * for example, (0, 2) is _not_ 20000000000, but instead + * 0x200000000. To emphasize this, the default values are expressed + * in hex, and output () dumps the value in hex. + */ + class ACE_Export ACE_U_LongLong + { + public: + // = Initialization and termination methods. +#if defined (ACE_LACKS_UNSIGNEDLONGLONG_T) + ACE_U_LongLong (const long long value = 0x0); +#else + ACE_U_LongLong (const ACE_UINT32 lo = 0x0, const ACE_UINT32 hi = 0x0); +#endif + ACE_U_LongLong (const ACE_U_LongLong &); + ACE_U_LongLong &operator= (const ACE_U_LongLong &); + ACE_U_LongLong &operator= (const ACE_INT32 &); + ACE_U_LongLong &operator= (const ACE_UINT32 &); + ~ACE_U_LongLong (void); + + // = Overloaded relation operators. + bool operator== (const ACE_U_LongLong &) const; + bool operator== (const ACE_UINT32) const; + bool operator!= (const ACE_U_LongLong &) const; + bool operator!= (const ACE_UINT32) const; + bool operator< (const ACE_U_LongLong &) const; + bool operator< (const ACE_UINT32) const; + bool operator<= (const ACE_U_LongLong &) const; + bool operator<= (const ACE_UINT32) const; + bool operator> (const ACE_U_LongLong &) const; + bool operator> (const ACE_UINT32) const; + bool operator>= (const ACE_U_LongLong &) const; + bool operator>= (const ACE_UINT32) const; + + ACE_U_LongLong operator+ (const ACE_U_LongLong &) const; + ACE_U_LongLong operator+ (const ACE_UINT32) const; + ACE_U_LongLong operator- (const ACE_U_LongLong &) const; + ACE_U_LongLong operator- (const ACE_UINT32) const; + ACE_U_LongLong operator* (const ACE_UINT32) const; + ACE_U_LongLong &operator*= (const ACE_UINT32); + + ACE_U_LongLong operator<< (const unsigned int) const; + ACE_U_LongLong &operator<<= (const unsigned int); + ACE_U_LongLong operator>> (const unsigned int) const; + ACE_U_LongLong &operator>>= (const unsigned int); + + double operator/ (const double) const; + + ACE_U_LongLong &operator+= (const ACE_U_LongLong &); + ACE_U_LongLong &operator+= (const ACE_UINT32); + ACE_U_LongLong &operator-= (const ACE_U_LongLong &); + ACE_U_LongLong &operator-= (const ACE_UINT32); + ACE_U_LongLong &operator++ (); + ACE_U_LongLong &operator-- (); + const ACE_U_LongLong operator++ (int); + const ACE_U_LongLong operator-- (int); + ACE_U_LongLong &operator|= (const ACE_U_LongLong); + ACE_U_LongLong &operator|= (const ACE_UINT32); + ACE_U_LongLong &operator&= (const ACE_U_LongLong); + ACE_U_LongLong &operator&= (const ACE_UINT32); + + // Note that the following take ACE_UINT32 arguments. These are + // typical use cases, and easy to implement. But, they limit the + // return values to 32 bits as well. There are no checks for + // overflow. + ACE_UINT32 operator/ (const ACE_UINT32) const; + ACE_UINT32 operator% (const ACE_UINT32) const; + + // The following only operate on the lower 32 bits (they take only + // 32 bit arguments). + ACE_UINT32 operator| (const ACE_INT32) const; + ACE_UINT32 operator& (const ACE_INT32) const; + + // The following operators convert their arguments to + // ACE_UINT32. So, there may be information loss if they are + // used. + ACE_U_LongLong operator* (const ACE_INT32) const; + ACE_U_LongLong &operator*= (const ACE_INT32); + ACE_UINT32 operator/ (const ACE_INT32) const; +# if ACE_SIZEOF_INT == 4 + ACE_UINT32 operator/ (const unsigned long) const; + ACE_UINT32 operator/ (const long) const; +# else /* ACE_SIZEOF_INT != 4 */ + ACE_UINT32 operator/ (const unsigned int) const; + ACE_UINT32 operator/ (const int) const; +# endif /* ACE_SIZEOF_INT != 4 */ + + // = Helper methods. + /// Outputs the value to the FILE, in hex. + void output (FILE * = stdout) const; + + ACE_TCHAR *as_string (ACE_TCHAR *string, + unsigned int base = 10, + unsigned int uppercase = 0) const; + + ACE_UINT32 hi (void) const; + ACE_UINT32 lo (void) const; + + void hi (const ACE_UINT32 hi); + void lo (const ACE_UINT32 lo); + +#if defined (ACE_LACKS_UNSIGNEDLONGLONG_T) + long long to_int64 (void) const; +# endif + + private: + +#if defined (ACE_LACKS_UNSIGNEDLONGLONG_T) + long long data_; +#else + public: + struct ace_hi_lo_correct_endian + { +# if defined (ACE_BIG_ENDIAN) + /// High 32 bits. + ACE_UINT32 hi_; + /// Low 32 bits. + ACE_UINT32 lo_; + +# else + + /// Low 32 bits. + ACE_UINT32 lo_; + /// High 32 bits. + ACE_UINT32 hi_; +# endif /* ! ACE_BIG_ENDIAN */ + }; + private: + union + { + struct ace_hi_lo_correct_endian data_; + + /// To ensure alignment on 8-byte boundary. + double for_alignment_; + }; + + // @note the following four accessors are inlined here in + // order to minimize the extent of the data_ struct. It's + // only used here; the .i and .cpp files use the accessors. + + /// Internal utility function to hide access through struct. + const ACE_UINT32 &h_ () const { return data_.hi_; } + + /// Internal utility function to hide access through struct. + ACE_UINT32 &h_ () { return data_.hi_; } + + /// Internal utility function to hide access through struct. + const ACE_UINT32 &l_ () const { return data_.lo_; } + + /// Internal utility function to hide access through struct. + ACE_UINT32 &l_ () { return data_.lo_; } + + // @note the above four accessors are inlined here in + // order to minimize the extent of the data_ struct. It's + // only used here; the .inl and .cpp files use the accessors. + + /// These functions are used to implement multiplication. + ACE_UINT32 ul_shift (ACE_UINT32 a, + ACE_UINT32 c_in, + ACE_UINT32 *c_out) const; + ACE_U_LongLong ull_shift (ACE_U_LongLong a, + ACE_UINT32 c_in, + ACE_UINT32 *c_out) const; + ACE_U_LongLong ull_add (ACE_U_LongLong a, + ACE_U_LongLong b, + ACE_UINT32 *carry) const; + ACE_U_LongLong ull_mult (ACE_U_LongLong a, + ACE_UINT32 b, + ACE_UINT32 *carry) const; +#endif // ACE_LACKS_UNSIGNEDLONGLONG_T + }; + + typedef ACE_U_LongLong ACE_UINT64; + +#if !defined (ACE_LACKS_IOSTREAM_TOTALLY) + ostream &operator<< (ostream &, const ACE_U_LongLong &); +#endif /* ! ACE_LACKS_IOSTREAM_TOTALLY */ + +ACE_END_VERSIONED_NAMESPACE_DECL + +# endif /* ACE_LACKS_LONGLONG_T */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Conversions from ACE_UINT64 to ACE_UINT32. ACE_CU64_TO_CU32 should +// be used on const ACE_UINT64's. +# if defined (ACE_LACKS_LONGLONG_T) || defined (ACE_LACKS_UNSIGNEDLONGLONG_T) +inline ACE_UINT32 +ACE_U64_TO_U32 (ACE_U_LongLong const & n) +{ + /** + * @note We could add a cast operator to ACE_U_LongLong but that may + * cause more problems than it solves. Force users to perform + * an explicit cast via ACE_{C}U64_TO_{C}U32. + */ + return n.lo (); +} + +inline ACE_UINT32 +ACE_CU64_TO_CU32 (ACE_U_LongLong const & n) +{ + return ACE_U64_TO_U32 (n); +} +# else /* ! ACE_LACKS_LONGLONG_T */ +inline ACE_UINT32 +ACE_U64_TO_U32 (ACE_UINT64 n) +{ + return static_cast (n); +} + +inline ACE_UINT32 +ACE_CU64_TO_CU32 (ACE_UINT64 n) +{ + return static_cast (n); +} +# endif /* ! ACE_LACKS_LONGLONG_T */ + +ACE_END_VERSIONED_NAMESPACE_DECL + +// 64-bit literals require special marking on some platforms. +# if defined (ACE_LACKS_LONGLONG_T) + // Can only specify 32-bit arguments. +# define ACE_UINT64_LITERAL(n) n ## UL + // This one won't really work, but it'll keep + // some compilers happy until we have better support +# define ACE_INT64_LITERAL(n) n ## L +# elif defined (ACE_WIN32) +# if defined (__MINGW32__) +# define ACE_UINT64_LITERAL(n) n ## ull +# define ACE_INT64_LITERAL(n) n ## ll +# else +# define ACE_UINT64_LITERAL(n) n ## ui64 +# define ACE_INT64_LITERAL(n) n ## i64 +# endif /* defined (__MINGW32__) */ +# elif defined (__TANDEM) +# define ACE_UINT64_LITERAL(n) n ## LL +# define ACE_INT64_LITERAL(n) n ## LL +# else /* ! ACE_WIN32 && ! ACE_LACKS_LONGLONG_T */ +# define ACE_UINT64_LITERAL(n) n ## ull +# define ACE_INT64_LITERAL(n) n ## ll +# endif /* ! ACE_WIN32 && ! ACE_LACKS_LONGLONG_T */ + +#if !defined (ACE_INT8_FORMAT_SPECIFIER) +# if defined (PRId8) +# define ACE_INT8_FORMAT_SPECIFIER ACE_TEXT ("%") ACE_TEXT (PRId8) +# else +# define ACE_INT8_FORMAT_SPECIFIER ACE_TEXT ("%d") +# endif /* defined (PRId8) */ +#endif /* ACE_INT8_FORMAT_SPECIFIER */ + +#if !defined (ACE_UINT8_FORMAT_SPECIFIER) +# if defined (PRIu8) +# define ACE_UINT8_FORMAT_SPECIFIER ACE_TEXT ("%") ACE_TEXT (PRIu8) +# else +# define ACE_UINT8_FORMAT_SPECIFIER ACE_TEXT ("%u") +# endif /* defined (PRIu8) */ +#endif /* ACE_UINT8_FORMAT_SPECIFIER */ + +#if !defined (ACE_INT16_FORMAT_SPECIFIER) +# if defined (PRId16) +# define ACE_INT16_FORMAT_SPECIFIER ACE_TEXT ("%") ACE_TEXT (PRId16) +# else +# define ACE_INT16_FORMAT_SPECIFIER ACE_TEXT ("%d") +# endif /* defined (PRId16) */ +#endif /* ACE_INT16_FORMAT_SPECIFIER */ + +#if !defined (ACE_UINT16_FORMAT_SPECIFIER) +# if defined (PRIu16) +# define ACE_UINT16_FORMAT_SPECIFIER ACE_TEXT ("%") ACE_TEXT (PRIu16) +# else +# define ACE_UINT16_FORMAT_SPECIFIER ACE_TEXT ("%u") +# endif /* defined (PRIu16) */ +#endif /* ACE_UINT16_FORMAT_SPECIFIER */ + +#if !defined (ACE_INT32_FORMAT_SPECIFIER) +# if defined (PRId32) +# define ACE_INT32_FORMAT_SPECIFIER ACE_TEXT ("%") ACE_TEXT (PRId32) +# elif ACE_SIZEOF_INT == 4 +# define ACE_INT32_FORMAT_SPECIFIER ACE_TEXT ("%d") +# else +# define ACE_INT32_FORMAT_SPECIFIER ACE_TEXT ("%ld") +# endif /* defined (PRId32) */ +#endif /* ACE_INT32_FORMAT_SPECIFIER */ + +#if !defined (ACE_UINT32_FORMAT_SPECIFIER) +# if defined (PRIu32) +# define ACE_UINT32_FORMAT_SPECIFIER ACE_TEXT ("%") ACE_TEXT (PRIu32) +# elif ACE_SIZEOF_INT == 4 +# define ACE_UINT32_FORMAT_SPECIFIER ACE_TEXT ("%u") +# else +# define ACE_UINT32_FORMAT_SPECIFIER ACE_TEXT ("%lu") +# endif /* defined (PRIu32) */ +#endif /* ACE_UINT32_FORMAT_SPECIFIER */ + +#if !defined (ACE_INT64_FORMAT_SPECIFIER) +# if defined (PRId64) +# define ACE_INT64_FORMAT_SPECIFIER ACE_TEXT ("%") ACE_TEXT (PRId64) +# elif ACE_SIZEOF_LONG == 8 +# define ACE_INT64_FORMAT_SPECIFIER ACE_TEXT ("%ld") +# else +# define ACE_INT64_FORMAT_SPECIFIER ACE_TEXT ("%lld") +# endif /* defined (PRId64) */ +#endif /* ACE_INT64_FORMAT_SPECIFIER */ + +#if !defined (ACE_UINT64_FORMAT_SPECIFIER) +# if defined (PRIu64) +# define ACE_UINT64_FORMAT_SPECIFIER ACE_TEXT ("%") ACE_TEXT (PRIu64) +# elif ACE_SIZEOF_LONG == 8 +# define ACE_UINT64_FORMAT_SPECIFIER ACE_TEXT ("%lu") +# else +# define ACE_UINT64_FORMAT_SPECIFIER ACE_TEXT ("%llu") +# endif /* defined (PRIu64) */ +#endif /* ACE_UINT64_FORMAT_SPECIFIER */ + +#if !defined (ACE_SSIZE_T_FORMAT_SPECIFIER) +# if defined (ACE_WIN64) +# define ACE_SSIZE_T_FORMAT_SPECIFIER ACE_TEXT ("%I64d") +# else +# define ACE_SSIZE_T_FORMAT_SPECIFIER ACE_TEXT ("%d") +# endif /* ACE_WIN64 */ +#endif /* ACE_SSIZE_T_FORMAT_SPECIFIER */ + +#if !defined (ACE_SIZE_T_FORMAT_SPECIFIER) +# if defined (ACE_WIN64) +# define ACE_SIZE_T_FORMAT_SPECIFIER ACE_TEXT ("%I64u") +# else +# define ACE_SIZE_T_FORMAT_SPECIFIER ACE_TEXT ("%u") +# endif /* ACE_WIN64 */ +#endif /* ACE_SIZE_T_FORMAT_SPECIFIER */ + +// Cast from UINT64 to a double requires an intermediate cast to INT64 +// on some platforms. +# if defined (ACE_LACKS_LONGLONG_T) + // Only use the low 32 bits. +# define ACE_UINT64_DBLCAST_ADAPTER(n) ACE_U64_TO_U32 (n) +# elif defined (ACE_LACKS_UNSIGNEDLONGLONG_T) +# define ACE_UINT64_DBLCAST_ADAPTER(n) ((n).to_int64 ()) +# elif defined (ACE_WIN32) +# define ACE_UINT64_DBLCAST_ADAPTER(n) static_cast<__int64> (n) +# else /* ! ACE_WIN32 && ! ACE_LACKS_LONGLONG_T */ +# define ACE_UINT64_DBLCAST_ADAPTER(n) (n) +# endif /* ! ACE_WIN32 && ! ACE_LACKS_LONGLONG_T */ + + +// The number of bytes in a float. +# ifndef ACE_SIZEOF_FLOAT +# if FLT_MAX_EXP == 128 +# define ACE_SIZEOF_FLOAT 4 +# elif FLT_MAX_EXP == 1024 +# define ACE_SIZEOF_FLOAT 8 +# else +# error: unsupported float size, must be updated for this platform! +# endif /* FLT_MAX_EXP */ +# endif /* ACE_SIZEOF_FLOAT */ + +// The number of bytes in a double. +# ifndef ACE_SIZEOF_DOUBLE +# if DBL_MAX_EXP == 128 +# define ACE_SIZEOF_DOUBLE 4 +# elif DBL_MAX_EXP == 1024 +# define ACE_SIZEOF_DOUBLE 8 +# else +# error: unsupported double size, must be updated for this platform! +# endif /* DBL_MAX_EXP */ +# endif /* ACE_SIZEOF_DOUBLE */ + +// The number of bytes in a long double. +# ifndef ACE_SIZEOF_LONG_DOUBLE +# if LDBL_MAX_EXP == 128 +# define ACE_SIZEOF_LONG_DOUBLE 4 +# elif LDBL_MAX_EXP == 1024 +# define ACE_SIZEOF_LONG_DOUBLE 8 +# elif LDBL_MAX_EXP == 16384 +# if defined (LDBL_DIG) && LDBL_DIG == 18 +# if defined (__ia64) || defined (__x86_64) +# define ACE_SIZEOF_LONG_DOUBLE 16 +# else /* ! __ia64 */ +# define ACE_SIZEOF_LONG_DOUBLE 12 +# endif /* __ia64 */ +# else /* ! LDBL_DIG || LDBL_DIG != 18 */ +# define ACE_SIZEOF_LONG_DOUBLE 16 +# endif /* ! LDBL_DIG || LDBL_DIG != 18 */ +# else +# error: unsupported double size, must be updated for this platform! +# endif /* LDBL_MAX_EXP */ +# endif /* ACE_SIZEOF_LONG_DOUBLE */ + +// Max and min sizes for the ACE integer types. +#define ACE_CHAR_MAX 0x7F +#define ACE_CHAR_MIN -(ACE_CHAR_MAX)-1 +#define ACE_OCTET_MAX 0xFF +#define ACE_INT16_MAX 0x7FFF +#define ACE_INT16_MIN -(ACE_INT16_MAX)-1 +#define ACE_UINT16_MAX 0xFFFF +#define ACE_WCHAR_MAX ACE_UINT16_MAX +#define ACE_INT32_MAX 0x7FFFFFFF +#define ACE_INT32_MIN -(ACE_INT32_MAX)-1 +#define ACE_UINT32_MAX 0xFFFFFFFF +#define ACE_INT64_MAX ACE_INT64_LITERAL(0x7FFFFFFFFFFFFFFF) +#define ACE_INT64_MIN -(ACE_INT64_MAX)-1 + +#if defined (ACE_LACKS_UNSIGNEDLONGLONG_T) +// ACE_U_LongLong's constructor accepts a "long long" in this +// case. Set it to ACE_U_LongLong (-1) since the bit pattern for long +// long (-1) is the same as the maximum unsigned long long value. +# define ACE_UINT64_MAX ACE_U_LongLong (ACE_INT64_LITERAL (0xFFFFFFFFFFFFFFFF)) +#elif defined (ACE_LACKS_LONGLONG_T) +// ACE_U_LongLong's constructor accepts an ACE_UINT32 low and high +// pair of parameters. +# define ACE_UINT64_MAX ACE_U_LongLong (0xFFFFFFFFu, 0xFFFFFFFFu) +#else +# define ACE_UINT64_MAX ACE_UINT64_LITERAL (0xFFFFFFFFFFFFFFFF) +#endif /* ACE_LACKS_UNSIGNEDLONGLONG_T */ + +// These use ANSI/IEEE format. +#define ACE_FLT_MAX 3.402823466e+38F +#define ACE_FLT_MIN 1.175494351e-38F +#define ACE_DBL_MAX 1.7976931348623158e+308 +#define ACE_DBL_MIN 2.2250738585072014e-308 + +# if defined (__ACE_INLINE__) +# include "ace/Basic_Types.inl" +# endif /* __ACE_INLINE__ */ + +# include /**/ "ace/post.h" +#endif /* ACE_BASIC_TYPES_H */ diff --git a/ACE/ace/Basic_Types.inl b/ACE/ace/Basic_Types.inl new file mode 100644 index 00000000000..15f9a9a1ab6 --- /dev/null +++ b/ACE/ace/Basic_Types.inl @@ -0,0 +1,954 @@ +// -*- C++ -*- +// +// $Id$ + +# if !defined (ACE_LACKS_LONGLONG_T) && defined (ACE_LACKS_UNSIGNEDLONGLONG_T) + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Implementation for ACE_U_LongLong when we have signed long long +// but no unsigned long long. + +ACE_INLINE +ACE_U_LongLong::ACE_U_LongLong (const long long value) + : data_ (value) +{ +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::hi (void) const +{ + return (data_ >> 32) & 0xFFFFFFFF; +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::lo (void) const +{ + return data_ & 0xFFFFFFFF; +} + +ACE_INLINE void +ACE_U_LongLong::hi (const ACE_UINT32 hi) +{ + data_ = hi; + data_ <<= 32; +} + +ACE_INLINE void +ACE_U_LongLong::lo (const ACE_UINT32 lo) +{ + data_ = lo; +} + +ACE_INLINE long long +ACE_U_LongLong::to_int64 (void) const +{ + return data_; +} + +ACE_INLINE +ACE_U_LongLong::~ACE_U_LongLong (void) +{ +} + +ACE_INLINE bool +ACE_U_LongLong::operator== (const ACE_U_LongLong &n) const +{ + return data_ == n.data_; +} + +ACE_INLINE bool +ACE_U_LongLong::operator== (const ACE_UINT32 n) const +{ + return data_ == n; +} + +ACE_INLINE bool +ACE_U_LongLong::operator!= (const ACE_U_LongLong &n) const +{ + return ! (*this == n); +} + +ACE_INLINE bool +ACE_U_LongLong::operator!= (const ACE_UINT32 n) const +{ + return ! (*this == n); +} + +ACE_INLINE bool +ACE_U_LongLong::operator< (const ACE_U_LongLong &n) const +{ + if (data_ > 0) + if (n.data_ > 0) + return data_ < n.data_; + else + return true; + else + if (n.data_ > 0) + return false; + else + return data_ < n.data_; +} + +ACE_INLINE bool +ACE_U_LongLong::operator< (const ACE_UINT32 n) const +{ + return operator< (static_cast (n)); +} + +ACE_INLINE bool +ACE_U_LongLong::operator<= (const ACE_U_LongLong &n) const +{ + if (data_ == n.data_) return true; + + return data_ < n.data_; +} + +ACE_INLINE bool +ACE_U_LongLong::operator<= (const ACE_UINT32 n) const +{ + return operator<= (static_cast (n)); +} + +ACE_INLINE bool +ACE_U_LongLong::operator> (const ACE_U_LongLong &n) const +{ + if (data_ > 0) + if (n.data_ > 0) + return data_ > n.data_; + else + return false; + else + if (n.data_ > 0) + return true; + else + return data_ > n.data_; +} + +ACE_INLINE bool +ACE_U_LongLong::operator> (const ACE_UINT32 n) const +{ + return operator> (static_cast (n)); +} + +ACE_INLINE bool +ACE_U_LongLong::operator>= (const ACE_U_LongLong &n) const +{ + if (data_ == n.data_) return true; + + return data_ > n.data_; +} + +ACE_INLINE bool +ACE_U_LongLong::operator>= (const ACE_UINT32 n) const +{ + return operator>= (static_cast (n)); +} + +ACE_INLINE +ACE_U_LongLong::ACE_U_LongLong (const ACE_U_LongLong &n) + : data_ (n.data_) +{ +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator= (const ACE_U_LongLong &n) +{ + data_ = n.data_; + + return *this; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator= (const ACE_INT32 &rhs) +{ + if (rhs >= 0) + { + data_ = rhs; + data_ &= 0xFFFFFFFF; + } + else + { + // We do not handle the case where a negative 32 bit integer is + // assigned to this representation of a 64 bit unsigned integer. + // The "undefined behavior" behavior performed by this + // implementation is to simply set all bits to zero. + data_ = 0; + } + + return *this; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator= (const ACE_UINT32 &rhs) +{ + data_ = rhs; + + return *this; +} + + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::operator+ (const ACE_U_LongLong &n) const +{ + return data_ + n.data_; +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::operator+ (const ACE_UINT32 n) const +{ + return operator+ (static_cast (n)); +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::operator- (const ACE_U_LongLong &n) const +{ + return data_ - n.data_; +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::operator- (const ACE_UINT32 n) const +{ + return operator- (static_cast (n)); +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::operator<< (const u_int n) const +{ + return data_ << n; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator<<= (const u_int n) +{ + data_ <<= n; + + return *this; +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::operator>> (const u_int n) const +{ + return data_ >> n; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator>>= (const u_int n) +{ + data_ >>= n; + + return *this; +} + +ACE_INLINE double +ACE_U_LongLong::operator/ (const double n) const +{ + return data_ / n; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator+= (const ACE_U_LongLong &n) +{ + data_ += n.data_; + + return *this; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator+= (const ACE_UINT32 n) +{ + return operator+= (static_cast (n)); +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::operator* (const ACE_UINT32 n) const +{ + return data_ * n; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator*= (const ACE_UINT32 n) +{ + data_ *= n; + + return *this; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator-= (const ACE_U_LongLong &n) +{ + data_ -= n.data_; + + return *this; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator-= (const ACE_UINT32 n) +{ + return operator-= (static_cast (n)); +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator++ () +{ + ++data_; + + return *this; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator-- () +{ + --data_; + + return *this; +} + +ACE_INLINE const ACE_U_LongLong +ACE_U_LongLong::operator++ (int) +{ + // Post-increment operator should always be implemented in terms of + // the pre-increment operator to enforce consistent semantics. + ACE_U_LongLong temp (*this); + ++*this; + return temp; +} + +ACE_INLINE const ACE_U_LongLong +ACE_U_LongLong::operator-- (int) +{ + // Post-decrement operator should always be implemented in terms of + // the pre-decrement operator to enforce consistent semantics. + ACE_U_LongLong temp (*this); + --*this; + return temp; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator|= (const ACE_U_LongLong n) +{ + data_ |= n.data_; + + return *this; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator|= (const ACE_UINT32 n) +{ + return operator|= (static_cast (n)); +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator&= (const ACE_U_LongLong n) +{ + data_ &= n.data_; + + return *this; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator&= (const ACE_UINT32 n) +{ + return operator&= (static_cast (n)); +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator/ (const ACE_UINT32 n) const +{ + return data_ / n; +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator% (const ACE_UINT32 n) const +{ + return data_ % n; +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator| (const ACE_INT32 n) const +{ + return data_ | n; +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator& (const ACE_INT32 n) const +{ + return data_ & n; +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::operator* (const ACE_INT32 n) const +{ + return operator* ((ACE_UINT32) n); +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator*= (const ACE_INT32 n) +{ + return operator*= ((ACE_UINT32) n); +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator/ (const ACE_INT32 n) const +{ + return operator/ ((ACE_UINT32) n); +} + +#if ACE_SIZEOF_INT == 4 +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator/ (const u_long n) const +{ + return operator/ ((ACE_UINT32) n); +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator/ (const long n) const +{ + return operator/ ((ACE_UINT32) n); +} + +#else /* ACE_SIZEOF_INT != 4 */ +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator/ (const u_int n) const +{ + return operator/ ((ACE_UINT32) n); +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator/ (const int n) const +{ + return operator/ ((ACE_UINT32) n); +} +#endif + +ACE_END_VERSIONED_NAMESPACE_DECL + +#elif defined (ACE_LACKS_LONGLONG_T) + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_U_LongLong::ACE_U_LongLong (const ACE_UINT32 lo, const ACE_UINT32 hi) +{ + h_ () = hi; + l_ () = lo; +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::hi (void) const +{ + return h_ (); +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::lo (void) const +{ + return l_ (); +} + +ACE_INLINE void +ACE_U_LongLong::hi (const ACE_UINT32 hi) +{ + h_ () = hi; +} + +ACE_INLINE void +ACE_U_LongLong::lo (const ACE_UINT32 lo) +{ + l_ () = lo; +} + +ACE_INLINE +ACE_U_LongLong::~ACE_U_LongLong (void) +{ +} + +ACE_INLINE bool +ACE_U_LongLong::operator== (const ACE_U_LongLong &n) const +{ + return h_ () == n.h_ () && l_ () == n.l_ (); +} + +ACE_INLINE bool +ACE_U_LongLong::operator== (const ACE_UINT32 n) const +{ + return h_ () == 0 && l_ () == n; +} + +ACE_INLINE bool +ACE_U_LongLong::operator!= (const ACE_U_LongLong &n) const +{ + return ! (*this == n); +} + +ACE_INLINE bool +ACE_U_LongLong::operator!= (const ACE_UINT32 n) const +{ + return ! (*this == n); +} + +ACE_INLINE bool +ACE_U_LongLong::operator< (const ACE_U_LongLong &n) const +{ + return h_ () < n.h_ () ? 1 + : h_ () > n.h_ () ? 0 + : l_ () < n.l_ (); +} + +ACE_INLINE bool +ACE_U_LongLong::operator< (const ACE_UINT32 n) const +{ + return operator< (static_cast (n)); +} + +ACE_INLINE bool +ACE_U_LongLong::operator<= (const ACE_U_LongLong &n) const +{ + return h_ () < n.h_ () ? 1 + : h_ () > n.h_ () ? 0 + : l_ () <= n.l_ (); +} + +ACE_INLINE bool +ACE_U_LongLong::operator<= (const ACE_UINT32 n) const +{ + return operator<= (static_cast (n)); +} + +ACE_INLINE bool +ACE_U_LongLong::operator> (const ACE_U_LongLong &n) const +{ + return h_ () > n.h_ () ? 1 + : h_ () < n.h_ () ? 0 + : l_ () > n.l_ (); +} + +ACE_INLINE bool +ACE_U_LongLong::operator> (const ACE_UINT32 n) const +{ + return operator> (static_cast (n)); +} + +ACE_INLINE bool +ACE_U_LongLong::operator>= (const ACE_U_LongLong &n) const +{ + return h_ () > n.h_ () ? 1 + : h_ () < n.h_ () ? 0 + : l_ () >= n.l_ (); +} + +ACE_INLINE bool +ACE_U_LongLong::operator>= (const ACE_UINT32 n) const +{ + return operator>= (static_cast (n)); +} + +ACE_INLINE +ACE_U_LongLong::ACE_U_LongLong (const ACE_U_LongLong &n) +{ + h_ () = n.h_ (); + l_ () = n.l_ (); +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator= (const ACE_U_LongLong &n) +{ + h_ () = n.h_ (); + l_ () = n.l_ (); + + return *this; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator= (const ACE_INT32 &rhs) +{ + if (rhs >= 0) + { + l_ () = static_cast (rhs); + h_ () = 0; + } + else + { + // We do not handle the case where a negative 32 bit integer is + // assigned to this representation of a 64 bit unsigned integer. + // The "undefined behavior" behavior performed by this + // implementation is to simply set all bits to zero. + l_ () = 0; + h_ () = 0; + } + + return *this; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator= (const ACE_UINT32 &rhs) +{ + l_ () = rhs; + h_ () = 0; + + return *this; +} + + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::operator+ (const ACE_U_LongLong &n) const +{ + ACE_U_LongLong ret (l_ () + n.l_ (), h_ () + n.h_ ()); + if (ret.l_ () < n.l_ ()) /* carry */ ++ret.h_ (); + + return ret; +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::operator+ (const ACE_UINT32 n) const +{ + return operator+ (static_cast (n)); +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::operator- (const ACE_U_LongLong &n) const +{ + ACE_U_LongLong ret (l_ () - n.l_ (), h_ () - n.h_ ()); + if (l_ () < n.l_ ()) /* borrow */ --ret.h_ (); + + return ret; +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::operator- (const ACE_UINT32 n) const +{ + return operator- (static_cast (n)); +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::operator<< (const u_int n) const +{ + const ACE_UINT32 carry_mask = l_ () >> (32 - n); + ACE_U_LongLong ret (n < 32 ? l_ () << n : 0, + n < 32 ? (h_ () << n) | carry_mask : carry_mask); + + return ret; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator<<= (const u_int n) +{ + const ACE_UINT32 carry_mask = l_ () >> (32 - n); + h_ () = n < 32 ? (h_ () << n) | carry_mask : carry_mask; + + // g++ 2.7.2.3/Solaris 2.5.1 doesn't modify l_ () if shifted by 32. + l_ () = n < 32 ? l_ () << n : 0; + + return *this; +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::operator>> (const u_int n) const +{ + const ACE_UINT32 carry_mask = h_ () << (32 - n); + ACE_U_LongLong ret (n < 32 ? (l_ () >> n) | carry_mask : 0, + n < 32 ? h_ () >> n : 0); + + return ret; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator>>= (const u_int n) +{ + const ACE_UINT32 carry_mask = h_ () << (32 - n); + l_ () = n < 32 ? (l_ () >> n) | carry_mask : carry_mask; + h_ () = n < 32 ? h_ () >> n : 0; + + return *this; +} + +ACE_INLINE double +ACE_U_LongLong::operator/ (const double n) const +{ + // See the derivation above in operator/ (const ACE_UINT32). + + return ((double) 0xffffffffu - n + 1.0) / n * h_ () + + (double) h_ () + (double) l_ () / n; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator+= (const ACE_U_LongLong &n) +{ + h_ () += n.h_ (); + l_ () += n.l_ (); + if (l_ () < n.l_ ()) /* carry */ ++h_ (); + + return *this; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator+= (const ACE_UINT32 n) +{ + return operator+= (static_cast (n)); +} + +#define ACE_HIGHBIT (~(~0UL >> 1)) + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::ul_shift (ACE_UINT32 a, ACE_UINT32 c_in, ACE_UINT32 *c_out) const +{ + const ACE_UINT32 b = (a << 1) | c_in; + *c_out = (*c_out << 1) + ((a & ACE_HIGHBIT) > 0); + + return b; +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::ull_shift (ACE_U_LongLong a, + ACE_UINT32 c_in, + ACE_UINT32 *c_out) const +{ + ACE_U_LongLong b; + + b.l_ () = (a.l_ () << 1) | c_in; + c_in = ((a.l_ () & ACE_HIGHBIT) > 0); + b.h_ () = (a.h_ () << 1) | c_in; + *c_out = (*c_out << 1) + ((a.h_ () & ACE_HIGHBIT) > 0); + + return b; +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::ull_add (ACE_U_LongLong a, ACE_U_LongLong b, ACE_UINT32 *carry) const +{ + ACE_U_LongLong r (0, 0); + ACE_UINT32 c1, c2, c3, c4; + + c1 = a.l_ () % 2; + c2 = b.l_ () % 2; + c3 = 0; + + r.l_ () = a.l_ ()/2 + b.l_ ()/2 + (c1+c2)/2; + r.l_ () = ul_shift (r.l_ (), (c1+c2)%2, &c3); + + c1 = a.h_ () % 2; + c2 = b.h_ () % 2; + c4 = 0; + + r.h_ () = a.h_ ()/2 + b.h_ ()/2 + (c1+c2+c3)/2; + r.h_ () = ul_shift (r.h_ (), (c1+c2+c3)%2, &c4); + + *carry = c4; + + return r; +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::ull_mult (ACE_U_LongLong a, ACE_UINT32 b, ACE_UINT32 *carry) const +{ + register ACE_UINT32 mask = ACE_HIGHBIT; + const ACE_U_LongLong zero (0, 0); + ACE_U_LongLong accum (0, 0); + ACE_UINT32 c; + + *carry = 0; + if (b > 0) + do + { + accum = ull_shift (accum, 0U, carry); + if (b & mask) + accum = ull_add (accum, a, &c); + else + accum = ull_add (accum, zero, &c); + *carry += c; + mask >>= 1; + } + while (mask > 0); + + return accum; +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::operator* (const ACE_UINT32 n) const +{ + ACE_UINT32 carry; // will throw the carry away + + return ull_mult (*this, n, &carry); +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator*= (const ACE_UINT32 n) +{ + ACE_UINT32 carry; // will throw the carry away + + return *this = ull_mult (*this, n, &carry); +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator-= (const ACE_U_LongLong &n) +{ + h_ () -= n.h_ (); + if (l_ () < n.l_ ()) /* borrow */ --h_ (); + l_ () -= n.l_ (); + + return *this; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator-= (const ACE_UINT32 n) +{ + return operator-= (static_cast (n)); +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator++ () +{ + ++l_ (); + if (l_ () == 0) /* carry */ ++h_ (); + + return *this; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator-- () +{ + if (l_ () == 0) /* borrow */ --h_ (); + --l_ (); + + return *this; +} + +ACE_INLINE const ACE_U_LongLong +ACE_U_LongLong::operator++ (int) +{ + // Post-increment operator should always be implemented in terms of + // the pre-increment operator to enforce consistent semantics. + ACE_U_LongLong temp (*this); + ++*this; + return temp; +} + +ACE_INLINE const ACE_U_LongLong +ACE_U_LongLong::operator-- (int) +{ + // Post-decrement operator should always be implemented in terms of + // the pre-decrement operator to enforce consistent semantics. + ACE_U_LongLong temp (*this); + --*this; + return temp; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator|= (const ACE_U_LongLong n) +{ + l_ () |= n.l_ (); + h_ () |= n.h_ (); + + return *this; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator|= (const ACE_UINT32 n) +{ + return operator|= (static_cast (n)); +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator&= (const ACE_U_LongLong n) +{ + l_ () &= n.l_ (); + h_ () &= n.h_ (); + + return *this; +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator&= (const ACE_UINT32 n) +{ + return operator&= (static_cast (n)); +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator/ (const ACE_UINT32 n) const +{ + // This takes advantage of the fact that the return type has only 32 + // bits. Replace 0x100000000 with 0xffffffff + 1 because the former + // has 33 bits. + // Quotient = (0x100000000u * hi_ + lo_) / n + // = ((0x100000000u - n + n) * hi_ + lo_) / n + // = ((0x100000000u - n) / n * hi_ + hi_ * n / n + lo_ / n + // = (0x100000000u - n) / n * hi_ + hi_ + lo_ / n + // = (0xffffffffu - n + 1) / n * hi_ + hi_ + lo_ / n + + return (0xffffffffu - n + 1) / n * h_ () + h_ () + l_ () / n; +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator% (const ACE_UINT32 n) const +{ + // Because the argument is an ACE_UINT32, the result can never be + // bigger than 32 bits. Replace 0x100000000 with 0xffffffff + 1 + // because the former has 33 bits. + // Mod = (0x100000000u * hi_ + lo_) % n + // = (0x100000000u % n * hi_ + lo_ % n) % n + // = ((0x100000000u - n) % n * hi_ + lo_ % n) % n + // = ((0xffffffffu - n + 1) % n * hi_ + lo_ % n) % n + + return ((0xffffffff - n + 1) % n * h_ () + l_ () % n) % n; +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator| (const ACE_INT32 n) const +{ + return l_ () | n; +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator& (const ACE_INT32 n) const +{ + return l_ () & n; +} + +ACE_INLINE ACE_U_LongLong +ACE_U_LongLong::operator* (const ACE_INT32 n) const +{ + return operator* ((ACE_UINT32) n); +} + +ACE_INLINE ACE_U_LongLong & +ACE_U_LongLong::operator*= (const ACE_INT32 n) +{ + return operator*= ((ACE_UINT32) n); +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator/ (const ACE_INT32 n) const +{ + return operator/ ((ACE_UINT32) n); +} + +#if ACE_SIZEOF_INT == 4 +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator/ (const u_long n) const +{ + return operator/ ((ACE_UINT32) n); +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator/ (const long n) const +{ + return operator/ ((ACE_UINT32) n); +} + +#else /* ACE_SIZEOF_INT != 4 */ +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator/ (const u_int n) const +{ + return operator/ ((ACE_UINT32) n); +} + +ACE_INLINE ACE_UINT32 +ACE_U_LongLong::operator/ (const int n) const +{ + return operator/ ((ACE_UINT32) n); +} +#endif /* ACE_SIZEOF_INT != 4 */ + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_LACKS_LONGLONG_T || ACE_LACKS_UNSIGNEDLONGLONG_T */ diff --git a/ACE/ace/Bound_Ptr.h b/ACE/ace/Bound_Ptr.h new file mode 100644 index 00000000000..a310e3b8a56 --- /dev/null +++ b/ACE/ace/Bound_Ptr.h @@ -0,0 +1,388 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Bound_Ptr.h + * + * $Id$ + * + * @author Christopher Kohlhoff + * @author Boris Kolpackov + */ +//============================================================================= + +#ifndef ACE_BOUND_PTR_H +#define ACE_BOUND_PTR_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Auto_Ptr.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Bound_Ptr_Counter + * + * @brief An ACE_Bound_Ptr_Counter object encapsulates an + * object reference count. + * + * Do not use this class directly, use ACE_Strong_Bound_Ptr or + * ACE_Weak_Bound_Ptr instead. + */ +template +class ACE_Bound_Ptr_Counter +{ +public: + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + + ACE_Bound_Ptr_Counter (long init_obj_ref_count = 0); + ~ACE_Bound_Ptr_Counter (void); + + /// Create a ACE_Bound_Ptr_Counter and initialize the + /// reference count to indicate ownership by a strong pointer. + static ACE_Bound_Ptr_Counter *create_strong (void); + + /// Increase both the object and counter reference counts and return + /// the new object reference count. A return value of -1 indicates + /// that the object has already been destroyed. + static long attach_strong (ACE_Bound_Ptr_Counter *counter); + + /// Decreases both the object and counter reference counts and + /// deletes whichever has no more references. Returns the new object + /// reference count. + static long detach_strong (ACE_Bound_Ptr_Counter *counter); + + /// Create a ACE_Bound_Ptr_Counter and initialize the + /// reference count to indicate no ownership. + static ACE_Bound_Ptr_Counter *create_weak (void); + + /// Increase the counter reference count and return argument. + static void attach_weak (ACE_Bound_Ptr_Counter *counter); + + /// Decreases the counter reference count and deletes the counter if + /// it has no more references. + static void detach_weak (ACE_Bound_Ptr_Counter *counter); + + /// Determine whether the object has been deleted. + static bool object_was_deleted (ACE_Bound_Ptr_Counter *counter); + +private: + + /// Allocate a new ACE_Bound_Ptr_Counter instance, + /// returning NULL if it cannot be created. + static ACE_Bound_Ptr_Counter *internal_create (long init_obj_ref_count); + +private: + + /// Reference count of underlying object. Is set to -1 once the + /// object has been destroyed to indicate to all weak pointers that + /// it is no longer valid. + long obj_ref_count_; + + /// Reference count of this counter. + long self_ref_count_; + + /// Mutex variable to synchronize access to the reference counts. + ACE_LOCK lock_; +}; + +// Forward decl. +template class ACE_Weak_Bound_Ptr; + +/** + * @class ACE_Strong_Bound_Ptr + * + * @brief This class implements support for a reference counted + * pointer. + * + * Assigning or copying instances of an ACE_Strong_Bound_Ptr will + * automatically increment the reference count of the underlying object. + * When the last instance of an ACE_Strong_Bound_Ptr that references a + * particular object is destroyed or overwritten, it will invoke delete + * on its underlying pointer. + */ +template +class ACE_Strong_Bound_Ptr +{ +public: + /// Constructor that initializes an ACE_Strong_Bound_Ptr to point to the + /// object \ immediately. + explicit ACE_Strong_Bound_Ptr (X *p = 0); + + /// Constructor that initializes an ACE_Strong_Bound_Ptr by stealing + /// ownership of an object from an auto_ptr. + explicit ACE_Strong_Bound_Ptr (auto_ptr p); + + /// Copy constructor binds @c this and @a r to the same object. + ACE_Strong_Bound_Ptr (const ACE_Strong_Bound_Ptr &r); + + /// Constructor binds @c this and @a r to the same object. + ACE_Strong_Bound_Ptr (const ACE_Weak_Bound_Ptr &r); + + /// Copy constructor binds @c this and @a r to the same object if + /// Y* can be implicitly converted to X*. + template + ACE_Strong_Bound_Ptr (const ACE_Strong_Bound_Ptr &r) + : counter_ (r.counter_), + ptr_ (dynamic_cast(r.ptr_)) + { + // This ctor is temporarily defined here to increase our chances + // of being accepted by broken compilers. + // + COUNTER::attach_strong (this->counter_); + } + + /// Destructor. + ~ACE_Strong_Bound_Ptr (void); + + /// Assignment operator that binds @c this and @a r to the same object. + void operator = (const ACE_Strong_Bound_Ptr &r); + + /// Assignment operator that binds @c this and @a r to the same object. + void operator = (const ACE_Weak_Bound_Ptr &r); + + /// Assignment operator that binds @c this and @a r to the same object + /// if Y* can be implicitly converted to X*. + template + ACE_Weak_Bound_Ptr& + operator= (const ACE_Strong_Bound_Ptr &r) + { + // This operator is temporarily defined here to increase our chances + // of being accepted by broken compilers. + // + + // This will work if &r == this, by first increasing the ref count + + COUNTER *new_counter = r.counter_; + X* new_ptr = dynamic_cast (r.ptr_); + COUNTER::attach_strong (new_counter); + if (COUNTER::detach_strong (this->counter_) == 0) + delete this->ptr_; + this->counter_ = new_counter; + this->ptr_ = new_ptr; + + return *this; + } + + /// Equality operator that returns @c true if both + /// ACE_Strong_Bound_Ptr instances point to the same underlying + /// object. + /** + * @note It also returns @c true if both objects have just been + * instantiated and not used yet. + */ + bool operator == (const ACE_Strong_Bound_Ptr &r) const; + + /// Equality operator that returns true if the ACE_Strong_Bound_Ptr + /// and ACE_Weak_Bound_Ptr objects point to the same underlying + /// object. + /** + * @note It also returns @c true if both objects have just been + * instantiated and not used yet. + */ + bool operator == (const ACE_Weak_Bound_Ptr &r) const; + + /// Equality operator that returns @c true if the + /// ACE_Strong_Bound_Ptr and the raw pointer point to the same + /// underlying object. + bool operator == (X *p) const; + + /// Inequality operator, which is the opposite of equality. + bool operator != (const ACE_Strong_Bound_Ptr &r) const; + + /// Inequality operator, which is the opposite of equality. + bool operator != (const ACE_Weak_Bound_Ptr &r) const; + + /// Inequality operator, which is the opposite of equality. + bool operator != (X *p) const; + + /// Redirection operator + X *operator-> (void) const; + + /// Dereference operator + X &operator * (void) const; + + /// Get the pointer value. + X *get (void) const; + + /// Resets the ACE_Strong_Bound_Ptr to refer to a different + /// underlying object. + void reset (X *p = 0); + + /// Resets the ACE_Strong_Bound_Ptr to refer to a different + /// underlying object, ownership of which is stolen from the + /// auto_ptr. + void reset (auto_ptr p); + + /// Allows us to check for NULL on all ACE_Strong_Bound_Ptr + /// objects. + int null (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + typedef X X_t; // This indirection is for Borland C++. + + friend class ACE_Weak_Bound_Ptr; + + template + friend class ACE_Strong_Bound_Ptr; + + /// The ACE_Bound_Ptr_Counter type. + typedef ACE_Bound_Ptr_Counter COUNTER; + + /// The reference counter. + COUNTER *counter_; + + /// The underlying object. + X *ptr_; +}; + +/** + * @class ACE_Weak_Bound_Ptr + * + * @brief This class implements support for a weak pointer that complements + * ACE_Strong_Bound_Ptr. + * + * Unlike ACE_Strong_Bound_Ptr, assigning or copying instances of an + * ACE_Weak_Bound_Ptr will not automatically increment the reference + * count of the underlying object. What ACE_Weak_Bound_Ptr does is + * preserve the knowledge that the object is in fact reference + * counted, and thus provides an alternative to raw pointers where + * non-ownership associations must be maintained. When the last + * instance of an ACE_Strong_Bound_Ptr that references a particular + * object is destroyed or overwritten, the corresponding + * ACE_Weak_Bound_Ptr instances are set to NULL. + */ +template +class ACE_Weak_Bound_Ptr +{ +public: + /// Constructor that initializes an ACE_Weak_Bound_Ptr to point to + /// the object \ immediately. + explicit ACE_Weak_Bound_Ptr (X *p = 0); + + /// Copy constructor binds @c this and @a r to the same object. + ACE_Weak_Bound_Ptr (const ACE_Weak_Bound_Ptr &r); + + /// Constructor binds @c this and @a r to the same object. + ACE_Weak_Bound_Ptr (const ACE_Strong_Bound_Ptr &r); + + /// Destructor. + ~ACE_Weak_Bound_Ptr (void); + + /// Assignment operator that binds @c this and @a r to the same object. + void operator = (const ACE_Weak_Bound_Ptr &r); + + /// Assignment operator that binds @c this and @a r to the same object. + void operator = (const ACE_Strong_Bound_Ptr &r); + + /// Equality operator that returns @c true if both + /// ACE_Weak_Bound_Ptr objects point to the same underlying object. + /** + * @note It also returns @c true if both objects have just been + * instantiated and not used yet. + */ + bool operator == (const ACE_Weak_Bound_Ptr &r) const; + + /// Equality operator that returns @c true if the ACE_Weak_Bound_Ptr + /// and ACE_Strong_Bound_Ptr objects point to the same underlying + /// object. + /** + * @note It also returns @c true if both objects have just been + * instantiated and not used yet. + */ + bool operator == (const ACE_Strong_Bound_Ptr &r) const; + + /// Equality operator that returns @c true if the ACE_Weak_Bound_Ptr + /// and the raw pointer point to the same underlying object. + bool operator == (X *p) const; + + /// Inequality operator, which is the opposite of equality. + bool operator != (const ACE_Weak_Bound_Ptr &r) const; + + /// Inequality operator, which is the opposite of equality. + bool operator != (const ACE_Strong_Bound_Ptr &r) const; + + /// Inequality operator, which is the opposite of equality. + bool operator != (X *p) const; + + /// Redirection operator. + /** + * It returns a temporary strong pointer and makes use of the + * chaining properties of operator-> to ensure that the underlying + * object does not disappear while you are using it. If you are + * certain of the lifetimes of the object, and do not want to incur + * the locking overhead, then use the unsafe_get method instead. + */ + ACE_Strong_Bound_Ptr operator-> (void) const; + + /// Obtain a strong pointer corresponding to this weak pointer. This + /// function is useful to create a temporary strong pointer for + /// conversion to a reference. + ACE_Strong_Bound_Ptr strong (void) const; + + /// Get the pointer value. Warning: this does not affect the + /// reference count of the underlying object, so it may disappear on + /// you while you are using it if you are not careful. + X *unsafe_get (void) const; + + /// Resets the ACE_Weak_Bound_Ptr to refer to a different underlying + /// object. + void reset (X *p = 0); + + /// Increment the reference count on the underlying object. + /** + * Returns the new reference count on the object. This function may + * be used to integrate the bound pointers into an external + * reference counting mechanism such as those used by COM or CORBA + * servants. + */ + long add_ref (void); + + /// Decrement the reference count on the underlying object, which is deleted + /// if the count has reached zero. + /** + * Returns the new reference count on the object. This function may + * be used to integrate the bound pointers into an external + * reference counting mechanism such as those used by COM or CORBA + * servants. + */ + long remove_ref (void); + + /// Allows us to check for NULL on all ACE_Weak_Bound_Ptr objects. + int null (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + typedef X X_t; // This indirection is for Borland C++. + + friend class ACE_Strong_Bound_Ptr; + + /// The ACE_Bound_Ptr_Counter type. + typedef ACE_Bound_Ptr_Counter COUNTER; + + /// The reference counter. + COUNTER *counter_; + + /// The underlying object. + X *ptr_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include "ace/Bound_Ptr.inl" + +#include /**/ "ace/post.h" + +#endif /* ACE_BOUND_PTR_H */ diff --git a/ACE/ace/Bound_Ptr.inl b/ACE/ace/Bound_Ptr.inl new file mode 100644 index 00000000000..52c100e16b0 --- /dev/null +++ b/ACE/ace/Bound_Ptr.inl @@ -0,0 +1,494 @@ +/* -*- C++ -*- */ +// $Id$ + +// Bound_Ptr.i + +#include "ace/Guard_T.h" +#if !defined (ACE_NEW_THROWS_EXCEPTIONS) +# include "ace/Log_Msg.h" +#endif /* ACE_NEW_THROWS_EXCEPTIONS */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template inline ACE_Bound_Ptr_Counter * +ACE_Bound_Ptr_Counter::internal_create (long init_obj_ref_count) +{ + ACE_Bound_Ptr_Counter *temp = 0; + ACE_NEW_RETURN (temp, + ACE_Bound_Ptr_Counter (init_obj_ref_count), + 0); + return temp; +} + +template inline ACE_Bound_Ptr_Counter * +ACE_Bound_Ptr_Counter::create_strong (void) +{ + // Set initial object reference count to 1. + ACE_Bound_Ptr_Counter *temp = internal_create (1); +#if defined (ACE_NEW_THROWS_EXCEPTIONS) + if (temp == 0) + ACE_throw_bad_alloc; +#else + ACE_ASSERT (temp != 0); +#endif /* ACE_NEW_THROWS_EXCEPTIONS */ + return temp; +} + + + +template inline long +ACE_Bound_Ptr_Counter::attach_strong (ACE_Bound_Ptr_Counter* counter) +{ + ACE_GUARD_RETURN (ACE_LOCK, guard, counter->lock_, -1); + + // Can't attach a strong pointer to an object that has already been deleted. + if (counter->obj_ref_count_ == -1) + return -1; + + long new_obj_ref_count = ++counter->obj_ref_count_; + ++counter->self_ref_count_; + + return new_obj_ref_count; +} + +template inline long +ACE_Bound_Ptr_Counter::detach_strong (ACE_Bound_Ptr_Counter* counter) +{ + ACE_Bound_Ptr_Counter *counter_del = 0; + long new_obj_ref_count; + + { + ACE_GUARD_RETURN (ACE_LOCK, guard, counter->lock_, -1); + + if ((new_obj_ref_count = --counter->obj_ref_count_) == 0) + // Change the object reference count to -1 to indicate that the + // object has been deleted, as opposed to a weak pointer that + // simply hasn't had any strong pointers created from it yet. + counter->obj_ref_count_ = -1; + + if (--counter->self_ref_count_ == 0) + // Since counter contains the lock held by the ACE_Guard, the + // guard needs to be released before freeing the memory holding + // the lock. So save the pointer to free, then release, then + // free. + counter_del = counter; + + } // Release the lock + + delete counter_del; + + return new_obj_ref_count; +} + +template inline ACE_Bound_Ptr_Counter * +ACE_Bound_Ptr_Counter::create_weak (void) +{ + // Set initial object reference count to 0. + + ACE_Bound_Ptr_Counter *temp = internal_create (0); +#if defined (ACE_NEW_THROWS_EXCEPTIONS) + if (temp == 0) + ACE_throw_bad_alloc; +#else + ACE_ASSERT (temp != 0); +#endif /* ACE_NEW_THROWS_EXCEPTIONS */ + return temp; +} + +template inline void +ACE_Bound_Ptr_Counter::attach_weak (ACE_Bound_Ptr_Counter* counter) +{ + ACE_GUARD (ACE_LOCK, guard, counter->lock_); + + ++counter->self_ref_count_; +} + +template inline void +ACE_Bound_Ptr_Counter::detach_weak (ACE_Bound_Ptr_Counter* counter) +{ + ACE_Bound_Ptr_Counter *counter_del = 0; + + { + ACE_GUARD (ACE_LOCK, guard, counter->lock_); + + if (--counter->self_ref_count_ == 0) + // Since counter contains the lock held by the ACE_Guard, the + // guard needs to be released before freeing the memory holding + // the lock. So save the pointer to free, then release, then + // free. + counter_del = counter; + + } // Release the lock + + delete counter_del; +} + +template inline bool +ACE_Bound_Ptr_Counter::object_was_deleted (ACE_Bound_Ptr_Counter *counter) +{ + ACE_GUARD_RETURN (ACE_LOCK, guard, counter->lock_, 0); + + return counter->obj_ref_count_ == -1; +} + +template inline +ACE_Bound_Ptr_Counter::ACE_Bound_Ptr_Counter (long init_obj_ref_count) + : obj_ref_count_ (init_obj_ref_count), + self_ref_count_ (1) +{ +} + +template inline +ACE_Bound_Ptr_Counter::~ACE_Bound_Ptr_Counter (void) +{ +} + +template inline +ACE_Strong_Bound_Ptr::ACE_Strong_Bound_Ptr (X *p) + : counter_ (COUNTER::create_strong ()), + ptr_ (p) +{ +} + +template inline +ACE_Strong_Bound_Ptr::ACE_Strong_Bound_Ptr (auto_ptr p) + : counter_ (COUNTER::create_strong ()), + ptr_ (p.release()) +{ +} + +template inline +ACE_Strong_Bound_Ptr::ACE_Strong_Bound_Ptr (const ACE_Strong_Bound_Ptr &r) + : counter_ (r.counter_), + ptr_ (r.ptr_) +{ + COUNTER::attach_strong (this->counter_); +} + +template inline +ACE_Strong_Bound_Ptr::ACE_Strong_Bound_Ptr (const ACE_Weak_Bound_Ptr &r) + : counter_ (r.counter_), + ptr_ (r.ptr_) +{ + // When creating a strong pointer from a weak one we can't assume that the + // underlying object still exists. Therefore we must check for a return value + // of -1, which indicates that the object has been destroyed. + if (COUNTER::attach_strong (this->counter_) == -1) + { + // Underlying object has already been deleted, so set this pointer to null. + this->counter_ = COUNTER::create_strong (); + this->ptr_ = 0; + } +} + +template inline +ACE_Strong_Bound_Ptr::~ACE_Strong_Bound_Ptr (void) +{ + if (COUNTER::detach_strong (this->counter_) == 0) + delete this->ptr_; +} + +template inline void +ACE_Strong_Bound_Ptr::operator = (const ACE_Strong_Bound_Ptr &rhs) +{ + // This will work if &r == this, by first increasing the ref count, but + // why go through all that? + if (&rhs == this) + return; + + COUNTER *new_counter = rhs.counter_; + X_t *new_ptr = rhs.ptr_; + COUNTER::attach_strong (new_counter); + if (COUNTER::detach_strong (this->counter_) == 0) + delete this->ptr_; + this->counter_ = new_counter; + this->ptr_ = new_ptr; +} + +template inline void +ACE_Strong_Bound_Ptr::operator = (const ACE_Weak_Bound_Ptr &rhs) +{ + // This will work if &r == this, by first increasing the ref count, but + // why go through all that? + if (&rhs == this) + return; + + COUNTER *new_counter = rhs.counter_; + X_t *new_ptr = rhs.ptr_; + + // When creating a strong pointer from a weak one we can't assume that the + // underlying object still exists. Therefore we must check for a return value + // of -1, which indicates that the object has been destroyed. + if (COUNTER::attach_strong (new_counter) == -1) + { + // Underlying object has already been deleted, so set this pointer to null. + new_counter = COUNTER::create_strong (); + new_ptr = 0; + } + + if (COUNTER::detach_strong (this->counter_) == 0) + delete this->ptr_; + this->counter_ = new_counter; + this->ptr_ = new_ptr; +} + +template inline bool +ACE_Strong_Bound_Ptr::operator== (const ACE_Strong_Bound_Ptr &r) const +{ + return this->ptr_ == r.ptr_; +} + +template inline bool +ACE_Strong_Bound_Ptr::operator== (const ACE_Weak_Bound_Ptr &r) const +{ + // Use the weak pointer's operator== since it will check for null. + return r == *this; +} + +template inline bool +ACE_Strong_Bound_Ptr::operator== (X *p) const +{ + return this->ptr_ == p; +} + +template inline bool +ACE_Strong_Bound_Ptr::operator!= (const ACE_Strong_Bound_Ptr &r) const +{ + return this->ptr_ != r.ptr_; +} + +template inline bool +ACE_Strong_Bound_Ptr::operator!= (const ACE_Weak_Bound_Ptr &r) const +{ + // Use the weak pointer's operator!= since it will check for null. + return r != *this; +} + +template inline bool +ACE_Strong_Bound_Ptr::operator!= (X *p) const +{ + return this->ptr_ != p; +} + +template inline X * +ACE_Strong_Bound_Ptr::operator-> (void) const +{ + return this->ptr_; +} + +template inline X & +ACE_Strong_Bound_Ptr::operator *() const +{ + return *this->ptr_; +} + +template inline X* +ACE_Strong_Bound_Ptr::get (void) const +{ + return this->ptr_; +} + +template inline int +ACE_Strong_Bound_Ptr::null (void) const +{ + return this->ptr_ == 0; +} + +template inline void +ACE_Strong_Bound_Ptr::reset (X *p) +{ + COUNTER *old_counter = this->counter_; + X_t *old_ptr = this->ptr_; + this->counter_ = COUNTER::create_strong (); + this->ptr_ = p; + if (COUNTER::detach_strong (old_counter) == 0) + delete old_ptr; +} + +template inline void +ACE_Strong_Bound_Ptr::reset (auto_ptr p) +{ + COUNTER *old_counter = this->counter_; + X_t *old_ptr = this->ptr_; + this->counter_ = COUNTER::create_strong (); + this->ptr_ = p.release (); + if (COUNTER::detach_strong (old_counter) == 0) + delete old_ptr; +} + +template inline +ACE_Weak_Bound_Ptr::ACE_Weak_Bound_Ptr (X *p) + : counter_ (COUNTER::create_weak ()), + ptr_ (p) +{ +} + +template inline +ACE_Weak_Bound_Ptr::ACE_Weak_Bound_Ptr (const ACE_Weak_Bound_Ptr &r) + : counter_ (r.counter_), + ptr_ (r.ptr_) +{ + COUNTER::attach_weak (this->counter_); +} + +template inline +ACE_Weak_Bound_Ptr::ACE_Weak_Bound_Ptr (const ACE_Strong_Bound_Ptr &r) + : counter_ (r.counter_), + ptr_ (r.ptr_) +{ + COUNTER::attach_weak (this->counter_); +} + +template inline +ACE_Weak_Bound_Ptr::~ACE_Weak_Bound_Ptr (void) +{ + COUNTER::detach_weak (this->counter_); +} + +template inline void +ACE_Weak_Bound_Ptr::operator = (const ACE_Weak_Bound_Ptr &rhs) +{ + // This will work if &rhs == this, by first increasing the ref count + COUNTER *new_counter = rhs.counter_; + COUNTER::attach_weak (new_counter); + COUNTER::detach_weak (this->counter_); + this->counter_ = new_counter; + this->ptr_ = rhs.ptr_; +} + +template inline void +ACE_Weak_Bound_Ptr::operator = (const ACE_Strong_Bound_Ptr &rhs) +{ + // This will work if &rhs == this, by first increasing the ref count + COUNTER *new_counter = rhs.counter_; + COUNTER::attach_weak (new_counter); + COUNTER::detach_weak (this->counter_); + this->counter_ = new_counter; + this->ptr_ = rhs.ptr_; +} + +template inline bool +ACE_Weak_Bound_Ptr::operator== (const ACE_Weak_Bound_Ptr &r) const +{ + // A weak pointer must behave as though it is automatically set to null + // if the underlying object has been deleted. + if (COUNTER::object_was_deleted (this->counter_)) + return r.ptr_ == 0; + + return this->ptr_ == r.ptr_; +} + +template inline bool +ACE_Weak_Bound_Ptr::operator== (const ACE_Strong_Bound_Ptr &r) const +{ + // A weak pointer must behave as though it is automatically set to null + // if the underlying object has been deleted. + if (COUNTER::object_was_deleted (this->counter_)) + return r.ptr_ == 0; + + return this->ptr_ == r.ptr_; +} + +template inline bool +ACE_Weak_Bound_Ptr::operator== (X *p) const +{ + // A weak pointer must behave as though it is automatically set to null + // if the underlying object has been deleted. + if (COUNTER::object_was_deleted (this->counter_)) + return p == 0; + + return this->ptr_ == p; +} + +template inline bool +ACE_Weak_Bound_Ptr::operator!= (const ACE_Weak_Bound_Ptr &r) const +{ + // A weak pointer must behave as though it is automatically set to null + // if the underlying object has been deleted. + if (COUNTER::object_was_deleted (this->counter_)) + return r.ptr_ != 0; + + return this->ptr_ != r.ptr_; +} + +template inline bool +ACE_Weak_Bound_Ptr::operator!= (const ACE_Strong_Bound_Ptr &r) const +{ + // A weak pointer must behave as though it is automatically set to null + // if the underlying object has been deleted. + if (COUNTER::object_was_deleted (this->counter_)) + return r.ptr_ != 0; + + return this->ptr_ != r.ptr_; +} + +template inline bool +ACE_Weak_Bound_Ptr::operator!= (X *p) const +{ + // A weak pointer must behave as though it is automatically set to null + // if the underlying object has been deleted. + if (COUNTER::object_was_deleted (this->counter_)) + return p != 0; + + return this->ptr_ != p; +} + +template inline ACE_Strong_Bound_Ptr +ACE_Weak_Bound_Ptr::operator-> (void) const +{ + return ACE_Strong_Bound_Ptr (*this); +} + +template inline ACE_Strong_Bound_Ptr +ACE_Weak_Bound_Ptr::strong (void) const +{ + return ACE_Strong_Bound_Ptr (*this); +} + +template inline X* +ACE_Weak_Bound_Ptr::unsafe_get (void) const +{ + // We do not check if the object has been deleted, since this operation + // is defined to be unsafe! + return this->ptr_; +} + +template inline int +ACE_Weak_Bound_Ptr::null (void) const +{ + // A weak pointer must behave as though it is automatically set to null + // if the underlying object has been deleted. + if (COUNTER::object_was_deleted (this->counter_)) + return 1; + + return this->ptr_ == 0; +} + +template inline void +ACE_Weak_Bound_Ptr::reset (X *p) +{ + COUNTER *old_counter = this->counter_; + this->counter_ = COUNTER::create_weak (); + this->ptr_ = p; + COUNTER::detach_weak (old_counter); +} + +template inline long +ACE_Weak_Bound_Ptr::add_ref () +{ + return COUNTER::attach_strong (counter_); +} + +template inline long +ACE_Weak_Bound_Ptr::remove_ref () +{ + long new_obj_ref_count = COUNTER::detach_strong (counter_); + if (new_obj_ref_count == 0) + { + delete this->ptr_; + this->ptr_ = 0; + } + return new_obj_ref_count; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/CDR_Base.cpp b/ACE/ace/CDR_Base.cpp new file mode 100644 index 00000000000..eb6f0bb0514 --- /dev/null +++ b/ACE/ace/CDR_Base.cpp @@ -0,0 +1,799 @@ +#include "ace/CDR_Base.h" + +#if !defined (__ACE_INLINE__) +# include "ace/CDR_Base.inl" +#endif /* ! __ACE_INLINE__ */ + +#include "ace/Message_Block.h" +#include "ace/OS_Memory.h" +#include "ace/OS_NS_string.h" + +ACE_RCSID (ace, + CDR_Base, + "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +#if defined (NONNATIVE_LONGDOUBLE) +static const ACE_INT16 max_eleven_bit = 0x3ff; +static const ACE_INT16 max_fifteen_bit = 0x3fff; +#endif /* NONNATIVE_LONGDOUBLE */ + +// +// See comments in CDR_Base.inl about optimization cases for swap_XX_array. +// + +void +ACE_CDR::swap_2_array (char const * orig, char* target, size_t n) +{ + // ACE_ASSERT(n > 0); The caller checks that n > 0 + + // We pretend that AMD64/GNU G++ systems have a Pentium CPU to + // take advantage of the inline assembly implementation. + + // Later, we try to read in 32 or 64 bit chunks, + // so make sure we don't do that for unaligned addresses. +#if ACE_SIZEOF_LONG == 8 && \ + !((defined(__amd64__) || defined (__x86_64__)) && defined(__GNUG__)) + char const * const o8 = ACE_ptr_align_binary (orig, 8); + while (orig < o8 && n > 0) + { + ACE_CDR::swap_2 (orig, target); + orig += 2; + target += 2; + --n; + } +#else + char const * const o4 = ACE_ptr_align_binary (orig, 4); + // this is an _if_, not a _while_. The mistmatch can only be by 2. + if (orig != o4) + { + ACE_CDR::swap_2 (orig, target); + orig += 2; + target += 2; + --n; + } +#endif + if (n == 0) + return; + + // + // Loop unrolling. Here be dragons. + // + + // (n & (~3)) is the greatest multiple of 4 not bigger than n. + // In the while loop ahead, orig will move over the array by 8 byte + // increments (4 elements of 2 bytes). + // end marks our barrier for not falling outside. + char const * const end = orig + 2 * (n & (~3)); + + // See if we're aligned for writting in 64 or 32 bit chunks... +#if ACE_SIZEOF_LONG == 8 && \ + !((defined(__amd64__) || defined (__x86_64__)) && defined(__GNUG__)) + if (target == ACE_ptr_align_binary (target, 8)) +#else + if (target == ACE_ptr_align_binary (target, 4)) +#endif + { + while (orig < end) + { +#if defined (ACE_HAS_INTEL_ASSEMBLY) + unsigned int a = + * reinterpret_cast (orig); + unsigned int b = + * reinterpret_cast (orig + 4); + asm ( "bswap %1" : "=r" (a) : "0" (a) ); + asm ( "bswap %1" : "=r" (b) : "0" (b) ); + asm ( "rol $16, %1" : "=r" (a) : "0" (a) ); + asm ( "rol $16, %1" : "=r" (b) : "0" (b) ); + * reinterpret_cast (target) = a; + * reinterpret_cast (target + 4) = b; +#elif defined(ACE_HAS_PENTIUM) \ + && (defined(_MSC_VER) || defined(__BORLANDC__)) \ + && !defined(ACE_LACKS_INLINE_ASSEMBLY) + __asm mov ecx, orig; + __asm mov edx, target; + __asm mov eax, [ecx]; + __asm mov ebx, 4[ecx]; + __asm bswap eax; + __asm bswap ebx; + __asm rol eax, 16; + __asm rol ebx, 16; + __asm mov [edx], eax; + __asm mov 4[edx], ebx; +#elif ACE_SIZEOF_LONG == 8 + // 64 bit architecture. + register unsigned long a = + * reinterpret_cast (orig); + + register unsigned long a1 = (a & 0x00ff00ff00ff00ffUL) << 8; + register unsigned long a2 = (a & 0xff00ff00ff00ff00UL) >> 8; + + a = (a1 | a2); + + * reinterpret_cast (target) = a; +#else + register ACE_UINT32 a = + * reinterpret_cast (orig); + register ACE_UINT32 b = + * reinterpret_cast (orig + 4); + + register ACE_UINT32 a1 = (a & 0x00ff00ffU) << 8; + register ACE_UINT32 b1 = (b & 0x00ff00ffU) << 8; + register ACE_UINT32 a2 = (a & 0xff00ff00U) >> 8; + register ACE_UINT32 b2 = (b & 0xff00ff00U) >> 8; + + a = (a1 | a2); + b = (b1 | b2); + + * reinterpret_cast (target) = a; + * reinterpret_cast (target + 4) = b; +#endif + orig += 8; + target += 8; + } + } + else + { + // We're out of luck. We have to write in 2 byte chunks. + while (orig < end) + { +#if defined (ACE_HAS_INTEL_ASSEMBLY) + unsigned int a = + * reinterpret_cast (orig); + unsigned int b = + * reinterpret_cast (orig + 4); + asm ( "bswap %1" : "=r" (a) : "0" (a) ); + asm ( "bswap %1" : "=r" (b) : "0" (b) ); + // We're little endian. + * reinterpret_cast (target + 2) + = (unsigned short) (a & 0xffff); + * reinterpret_cast (target + 6) + = (unsigned short) (b & 0xffff); + asm ( "shrl $16, %1" : "=r" (a) : "0" (a) ); + asm ( "shrl $16, %1" : "=r" (b) : "0" (b) ); + * reinterpret_cast (target + 0) + = (unsigned short) (a & 0xffff); + * reinterpret_cast (target + 4) + = (unsigned short) (b & 0xffff); +#elif defined (ACE_HAS_PENTIUM) \ + && (defined (_MSC_VER) || defined (__BORLANDC__)) \ + && !defined (ACE_LACKS_INLINE_ASSEMBLY) + __asm mov ecx, orig; + __asm mov edx, target; + __asm mov eax, [ecx]; + __asm mov ebx, 4[ecx]; + __asm bswap eax; + __asm bswap ebx; + // We're little endian. + __asm mov 2[edx], ax; + __asm mov 6[edx], bx; + __asm shr eax, 16; + __asm shr ebx, 16; + __asm mov 0[edx], ax; + __asm mov 4[edx], bx; +#elif ACE_SIZEOF_LONG == 8 + // 64 bit architecture. + register unsigned long a = + * reinterpret_cast (orig); + + register unsigned long a1 = (a & 0x00ff00ff00ff00ffUL) << 8; + register unsigned long a2 = (a & 0xff00ff00ff00ff00UL) >> 8; + + a = (a1 | a2); + + ACE_UINT16 b1 = static_cast (a >> 48); + ACE_UINT16 b2 = static_cast ((a >> 32) & 0xffff); + ACE_UINT16 b3 = static_cast ((a >> 16) & 0xffff); + ACE_UINT16 b4 = static_cast (a & 0xffff); + +#if defined(ACE_LITTLE_ENDIAN) + * reinterpret_cast (target) = b4; + * reinterpret_cast (target + 2) = b3; + * reinterpret_cast (target + 4) = b2; + * reinterpret_cast (target + 6) = b1; +#else + * reinterpret_cast (target) = b1; + * reinterpret_cast (target + 2) = b2; + * reinterpret_cast (target + 4) = b3; + * reinterpret_cast (target + 6) = b4; +#endif +#else + register ACE_UINT32 a = + * reinterpret_cast (orig); + register ACE_UINT32 b = + * reinterpret_cast (orig + 4); + + register ACE_UINT32 a1 = (a & 0x00ff00ff) << 8; + register ACE_UINT32 b1 = (b & 0x00ff00ff) << 8; + register ACE_UINT32 a2 = (a & 0xff00ff00) >> 8; + register ACE_UINT32 b2 = (b & 0xff00ff00) >> 8; + + a = (a1 | a2); + b = (b1 | b2); + + ACE_UINT32 c1 = static_cast (a >> 16); + ACE_UINT32 c2 = static_cast (a & 0xffff); + ACE_UINT32 c3 = static_cast (b >> 16); + ACE_UINT32 c4 = static_cast (b & 0xffff); + +#if defined(ACE_LITTLE_ENDIAN) + * reinterpret_cast (target) = c2; + * reinterpret_cast (target + 2) = c1; + * reinterpret_cast (target + 4) = c4; + * reinterpret_cast (target + 6) = c3; +#else + * reinterpret_cast (target) = c1; + * reinterpret_cast (target + 2) = c2; + * reinterpret_cast (target + 4) = c3; + * reinterpret_cast (target + 6) = c4; +#endif +#endif + + orig += 8; + target += 8; + } + } + + // (n & 3) == (n % 4). + switch (n&3) { + case 3: + ACE_CDR::swap_2 (orig, target); + orig += 2; + target += 2; + case 2: + ACE_CDR::swap_2 (orig, target); + orig += 2; + target += 2; + case 1: + ACE_CDR::swap_2 (orig, target); + } +} + +void +ACE_CDR::swap_4_array (char const * orig, char* target, size_t n) +{ + // ACE_ASSERT (n > 0); The caller checks that n > 0 + +#if ACE_SIZEOF_LONG == 8 + // Later, we read from *orig in 64 bit chunks, + // so make sure we don't generate unaligned readings. + char const * const o8 = ACE_ptr_align_binary (orig, 8); + // The mismatch can only be by 4. + if (orig != o8) + { + ACE_CDR::swap_4 (orig, target); + orig += 4; + target += 4; + --n; + } +#endif /* ACE_SIZEOF_LONG == 8 */ + + if (n == 0) + return; + + // + // Loop unrolling. Here be dragons. + // + + // (n & (~3)) is the greatest multiple of 4 not bigger than n. + // In the while loop, orig will move over the array by 16 byte + // increments (4 elements of 4 bytes). + // ends marks our barrier for not falling outside. + char const * const end = orig + 4 * (n & (~3)); + +#if ACE_SIZEOF_LONG == 8 + // 64 bits architecture. + // See if we can write in 8 byte chunks. + if (target == ACE_ptr_align_binary (target, 8)) + { + while (orig < end) + { + register unsigned long a = + * reinterpret_cast (orig); + register unsigned long b = + * reinterpret_cast (orig + 8); + +#if defined(ACE_HAS_INTEL_ASSEMBLY) + asm ("bswapq %1" : "=r" (a) : "0" (a)); + asm ("bswapq %1" : "=r" (b) : "0" (b)); + asm ("rol $32, %1" : "=r" (a) : "0" (a)); + asm ("rol $32, %1" : "=r" (b) : "0" (b)); +#else + register unsigned long a84 = (a & 0x000000ff000000ffL) << 24; + register unsigned long b84 = (b & 0x000000ff000000ffL) << 24; + register unsigned long a73 = (a & 0x0000ff000000ff00L) << 8; + register unsigned long b73 = (b & 0x0000ff000000ff00L) << 8; + register unsigned long a62 = (a & 0x00ff000000ff0000L) >> 8; + register unsigned long b62 = (b & 0x00ff000000ff0000L) >> 8; + register unsigned long a51 = (a & 0xff000000ff000000L) >> 24; + register unsigned long b51 = (b & 0xff000000ff000000L) >> 24; + + a = (a84 | a73 | a62 | a51); + b = (b84 | b73 | b62 | b51); +#endif + + * reinterpret_cast (target) = a; + * reinterpret_cast (target + 8) = b; + + orig += 16; + target += 16; + } + } + else + { + // We are out of luck, we have to write in 4 byte chunks. + while (orig < end) + { + register unsigned long a = + * reinterpret_cast (orig); + register unsigned long b = + * reinterpret_cast (orig + 8); + +#if defined(ACE_HAS_INTEL_ASSEMBLY) + asm ("bswapq %1" : "=r" (a) : "0" (a)); + asm ("bswapq %1" : "=r" (b) : "0" (b)); + asm ("rol $32, %1" : "=r" (a) : "0" (a)); + asm ("rol $32, %1" : "=r" (b) : "0" (b)); +#else + register unsigned long a84 = (a & 0x000000ff000000ffL) << 24; + register unsigned long b84 = (b & 0x000000ff000000ffL) << 24; + register unsigned long a73 = (a & 0x0000ff000000ff00L) << 8; + register unsigned long b73 = (b & 0x0000ff000000ff00L) << 8; + register unsigned long a62 = (a & 0x00ff000000ff0000L) >> 8; + register unsigned long b62 = (b & 0x00ff000000ff0000L) >> 8; + register unsigned long a51 = (a & 0xff000000ff000000L) >> 24; + register unsigned long b51 = (b & 0xff000000ff000000L) >> 24; + + a = (a84 | a73 | a62 | a51); + b = (b84 | b73 | b62 | b51); +#endif + + ACE_UINT32 c1 = static_cast (a >> 32); + ACE_UINT32 c2 = static_cast (a & 0xffffffff); + ACE_UINT32 c3 = static_cast (b >> 32); + ACE_UINT32 c4 = static_cast (b & 0xffffffff); + +#if defined (ACE_LITTLE_ENDIAN) + * reinterpret_cast (target + 0) = c2; + * reinterpret_cast (target + 4) = c1; + * reinterpret_cast (target + 8) = c4; + * reinterpret_cast (target + 12) = c3; +#else + * reinterpret_cast (target + 0) = c1; + * reinterpret_cast (target + 4) = c2; + * reinterpret_cast (target + 8) = c3; + * reinterpret_cast (target + 12) = c4; +#endif + orig += 16; + target += 16; + } + } + +#else /* ACE_SIZEOF_LONG != 8 */ + + while (orig < end) + { +#if defined (ACE_HAS_PENTIUM) && defined (__GNUG__) + register unsigned int a = + *reinterpret_cast (orig); + register unsigned int b = + *reinterpret_cast (orig + 4); + register unsigned int c = + *reinterpret_cast (orig + 8); + register unsigned int d = + *reinterpret_cast (orig + 12); + + asm ("bswap %1" : "=r" (a) : "0" (a)); + asm ("bswap %1" : "=r" (b) : "0" (b)); + asm ("bswap %1" : "=r" (c) : "0" (c)); + asm ("bswap %1" : "=r" (d) : "0" (d)); + + *reinterpret_cast (target) = a; + *reinterpret_cast (target + 4) = b; + *reinterpret_cast (target + 8) = c; + *reinterpret_cast (target + 12) = d; +#elif defined (ACE_HAS_PENTIUM) \ + && (defined (_MSC_VER) || defined (__BORLANDC__)) \ + && !defined (ACE_LACKS_INLINE_ASSEMBLY) + __asm mov eax, orig + __asm mov esi, target + __asm mov edx, [eax] + __asm mov ecx, 4[eax] + __asm mov ebx, 8[eax] + __asm mov eax, 12[eax] + __asm bswap edx + __asm bswap ecx + __asm bswap ebx + __asm bswap eax + __asm mov [esi], edx + __asm mov 4[esi], ecx + __asm mov 8[esi], ebx + __asm mov 12[esi], eax +#else + register ACE_UINT32 a = + * reinterpret_cast (orig); + register ACE_UINT32 b = + * reinterpret_cast (orig + 4); + register ACE_UINT32 c = + * reinterpret_cast (orig + 8); + register ACE_UINT32 d = + * reinterpret_cast (orig + 12); + + // Expect the optimizer reordering this A LOT. + // We leave it this way for clarity. + a = (a << 24) | ((a & 0xff00) << 8) | ((a & 0xff0000) >> 8) | (a >> 24); + b = (b << 24) | ((b & 0xff00) << 8) | ((b & 0xff0000) >> 8) | (b >> 24); + c = (c << 24) | ((c & 0xff00) << 8) | ((c & 0xff0000) >> 8) | (c >> 24); + d = (d << 24) | ((d & 0xff00) << 8) | ((d & 0xff0000) >> 8) | (d >> 24); + + * reinterpret_cast (target) = a; + * reinterpret_cast (target + 4) = b; + * reinterpret_cast (target + 8) = c; + * reinterpret_cast (target + 12) = d; +#endif + + orig += 16; + target += 16; + } + +#endif /* ACE_SIZEOF_LONG == 8 */ + + // (n & 3) == (n % 4). + switch (n & 3) { + case 3: + ACE_CDR::swap_4 (orig, target); + orig += 4; + target += 4; + case 2: + ACE_CDR::swap_4 (orig, target); + orig += 4; + target += 4; + case 1: + ACE_CDR::swap_4 (orig, target); + } +} + +// +// We don't benefit from unrolling in swap_8_array and swap_16_array +// (swap_8 and swap_16 are big enough). +// +void +ACE_CDR::swap_8_array (char const * orig, char* target, size_t n) +{ + // ACE_ASSERT(n > 0); The caller checks that n > 0 + + char const * const end = orig + 8*n; + while (orig < end) + { + swap_8 (orig, target); + orig += 8; + target += 8; + } +} + +void +ACE_CDR::swap_16_array (char const * orig, char* target, size_t n) +{ + // ACE_ASSERT(n > 0); The caller checks that n > 0 + + char const * const end = orig + 16*n; + while (orig < end) + { + swap_16 (orig, target); + orig += 16; + target += 16; + } +} + +void +ACE_CDR::mb_align (ACE_Message_Block *mb) +{ +#if !defined (ACE_CDR_IGNORE_ALIGNMENT) + char * const start = ACE_ptr_align_binary (mb->base (), + ACE_CDR::MAX_ALIGNMENT); +#else + char * const start = mb->base (); +#endif /* ACE_CDR_IGNORE_ALIGNMENT */ + mb->rd_ptr (start); + mb->wr_ptr (start); +} + +int +ACE_CDR::grow (ACE_Message_Block *mb, size_t minsize) +{ + size_t newsize = + ACE_CDR::first_size (minsize + ACE_CDR::MAX_ALIGNMENT); + + if (newsize <= mb->size ()) + return 0; + + ACE_Data_Block *db = + mb->data_block ()->clone_nocopy (0, newsize); + + if (db == 0) + return -1; + + // Do the equivalent of ACE_CDR::mb_align() here to avoid having + // to allocate an ACE_Message_Block on the stack thereby avoiding + // the manipulation of the data blocks reference count + size_t mb_len = mb->length (); + char *start = ACE_ptr_align_binary (db->base (), + ACE_CDR::MAX_ALIGNMENT); + + ACE_OS::memcpy (start, mb->rd_ptr (), mb_len); + mb->data_block (db); + + // Setting the data block on the mb resets the read and write + // pointers back to the beginning. We must set the rd_ptr to the + // aligned start and adjust the write pointer to the end + mb->rd_ptr (start); + mb->wr_ptr (start + mb_len); + + // Remove the DONT_DELETE flags from mb + mb->clr_self_flags (ACE_Message_Block::DONT_DELETE); + + return 0; +} + +size_t +ACE_CDR::total_length (const ACE_Message_Block* begin, + const ACE_Message_Block* end) +{ + size_t l = 0; + // Compute the total size. + for (const ACE_Message_Block *i = begin; + i != end; + i = i->cont ()) + l += i->length (); + return l; +} + +void +ACE_CDR::consolidate (ACE_Message_Block *dst, + const ACE_Message_Block *src) +{ + if (src == 0) + return; + + size_t newsize = + ACE_CDR::first_size (ACE_CDR::total_length (src, 0) + + ACE_CDR::MAX_ALIGNMENT); + dst->size (newsize); + +#if !defined (ACE_CDR_IGNORE_ALIGNMENT) + // We must copy the contents of into the new buffer, but + // respecting the alignment. + ptrdiff_t srcalign = + ptrdiff_t(src->rd_ptr ()) % ACE_CDR::MAX_ALIGNMENT; + ptrdiff_t dstalign = + ptrdiff_t(dst->rd_ptr ()) % ACE_CDR::MAX_ALIGNMENT; + ptrdiff_t offset = srcalign - dstalign; + if (offset < 0) + offset += ACE_CDR::MAX_ALIGNMENT; + dst->rd_ptr (static_cast (offset)); + dst->wr_ptr (dst->rd_ptr ()); +#endif /* ACE_CDR_IGNORE_ALIGNMENT */ + + for (const ACE_Message_Block* i = src; + i != 0; + i = i->cont ()) + { + // If the destination and source are the same, do not + // attempt to copy the data. Just update the write pointer. + if (dst->wr_ptr () != i->rd_ptr ()) + dst->copy (i->rd_ptr (), i->length ()); + else + dst->wr_ptr (i->length ()); + } +} + +#if defined (NONNATIVE_LONGLONG) +bool +ACE_CDR::LongLong::operator== (const ACE_CDR::LongLong &rhs) const +{ + return this->h == rhs.h && this->l == rhs.l; +} + +bool +ACE_CDR::LongLong::operator!= (const ACE_CDR::LongLong &rhs) const +{ + return this->l != rhs.l || this->h != rhs.h; +} + +#endif /* NONNATIVE_LONGLONG */ + +#if defined (NONNATIVE_LONGDOUBLE) +ACE_CDR::LongDouble& +ACE_CDR::LongDouble::assign (const ACE_CDR::LongDouble::NativeImpl& rhs) +{ + ACE_OS::memset (this->ld, 0, sizeof (this->ld)); + + if (sizeof (rhs) == 8) + { +#if defined (ACE_LITTLE_ENDIAN) + static const size_t byte_zero = 1; + static const size_t byte_one = 0; + char rhs_ptr[16]; + ACE_CDR::swap_8 (reinterpret_cast (&rhs), rhs_ptr); +#else + static const size_t byte_zero = 0; + static const size_t byte_one = 1; + const char* rhs_ptr = reinterpret_cast (&rhs); +#endif + ACE_INT16 sign = static_cast ( + static_cast (rhs_ptr[0])) & 0x8000; + ACE_INT16 exponent = ((rhs_ptr[0] & 0x7f) << 4) | + ((rhs_ptr[1] >> 4) & 0xf); + const char* exp_ptr = reinterpret_cast (&exponent); + + // Infinity and NaN have an exponent of 0x7ff in 64-bit IEEE + if (exponent == 0x7ff) + { + exponent = 0x7fff; + } + else + { + exponent = (exponent - max_eleven_bit) + max_fifteen_bit; + } + exponent |= sign; + + // Store the sign bit and exponent + this->ld[0] = exp_ptr[byte_zero]; + this->ld[1] = exp_ptr[byte_one]; + + // Store the mantissa. In an 8 byte double, it is split by + // 4 bits (because of the 12 bits for sign and exponent), so + // we have to shift and or the rhs to get the right bytes. + size_t li = 2; + bool direction = true; + for (size_t ri = 1; ri < sizeof (rhs);) + { + if (direction) + { + this->ld[li] |= ((rhs_ptr[ri] << 4) & 0xf0); + direction = false; + ++ri; + } + else + { + this->ld[li] |= ((rhs_ptr[ri] >> 4) & 0xf); + direction = true; + ++li; + } + } +#if defined (ACE_LITTLE_ENDIAN) + ACE_OS::memcpy (rhs_ptr, this->ld, sizeof (this->ld)); + ACE_CDR::swap_16 (rhs_ptr, this->ld); +#endif + } + else + { + ACE_OS::memcpy(this->ld, + reinterpret_cast (&rhs), sizeof (rhs)); + } + return *this; +} + +ACE_CDR::LongDouble& +ACE_CDR::LongDouble::assign (const ACE_CDR::LongDouble& rhs) +{ + if (this != &rhs) + *this = rhs; + return *this; +} + +bool +ACE_CDR::LongDouble::operator== (const ACE_CDR::LongDouble &rhs) const +{ + return ACE_OS::memcmp (this->ld, rhs.ld, 16) == 0; +} + +bool +ACE_CDR::LongDouble::operator!= (const ACE_CDR::LongDouble &rhs) const +{ + return ACE_OS::memcmp (this->ld, rhs.ld, 16) != 0; +} + +ACE_CDR::LongDouble::operator ACE_CDR::LongDouble::NativeImpl () const +{ + ACE_CDR::LongDouble::NativeImpl ret = 0.0; + char* lhs_ptr = reinterpret_cast (&ret); + + if (sizeof (ret) == 8) + { +#if defined (ACE_LITTLE_ENDIAN) + static const size_t byte_zero = 1; + static const size_t byte_one = 0; + char copy[16]; + ACE_CDR::swap_16 (this->ld, copy); +#else + static const size_t byte_zero = 0; + static const size_t byte_one = 1; + const char* copy = this->ld; +#endif + ACE_INT16 exponent = 0; + char* exp_ptr = reinterpret_cast (&exponent); + exp_ptr[byte_zero] = copy[0]; + exp_ptr[byte_one] = copy[1]; + + ACE_INT16 sign = (exponent & 0x8000); + exponent &= 0x7fff; + + // Infinity and NaN have an exponent of 0x7fff in 128-bit IEEE + if (exponent == 0x7fff) + { + exponent = 0x7ff; + } + else + { + exponent = (exponent - max_fifteen_bit) + max_eleven_bit; + } + exponent = (exponent << 4) | sign; + + // Store the sign and exponent + lhs_ptr[0] = exp_ptr[byte_zero]; + lhs_ptr[1] = exp_ptr[byte_one]; + + // Store the mantissa. In an 8 byte double, it is split by + // 4 bits (because of the 12 bits for sign and exponent), so + // we have to shift and or the rhs to get the right bytes. + size_t li = 1; + bool direction = true; + for (size_t ri = 2; li < sizeof (ret);) { + if (direction) + { + lhs_ptr[li] |= ((copy[ri] >> 4) & 0xf); + direction = false; + ++li; + } + else + { + lhs_ptr[li] |= ((copy[ri] & 0xf) << 4); + direction = true; + ++ri; + } + } + +#if defined (ACE_LITTLE_ENDIAN) + ACE_CDR::swap_8 (lhs_ptr, lhs_ptr); +#endif + } + else + { + ACE_OS::memcpy(lhs_ptr, this->ld, sizeof (ret)); + } + + // This bit of code is unnecessary. However, this code is + // necessary to work around a bug in the gcc 4.1.1 optimizer. + ACE_CDR::LongDouble tmp; + tmp.assign (ret); + + return ret; +} +#endif /* NONNATIVE_LONGDOUBLE */ + +#if defined(_UNICOS) && !defined(_CRAYMPP) +// placeholders to get things compiling +ACE_CDR::Float::Float (void) +{ +} + +ACE_CDR::Float::Float (const float & /* init */) +{ +} + +ACE_CDR::Float & +ACE_CDR::Float::operator= (const float & /* rhs */) +{ + return *this; +} + +bool +ACE_CDR::Float::operator!= (const ACE_CDR::Float & /* rhs */) const +{ + return false; +} +#endif /* _UNICOS */ + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/CDR_Base.h b/ACE/ace/CDR_Base.h new file mode 100644 index 00000000000..afd278a5e59 --- /dev/null +++ b/ACE/ace/CDR_Base.h @@ -0,0 +1,353 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file CDR_Base.h + * + * $Id$ + * + * ACE Common Data Representation (CDR) basic types. + * + * The current implementation assumes that the host has 1-byte, + * 2-byte and 4-byte integral types, and that it has single + * precision and double precision IEEE floats. + * Those assumptions are pretty good these days, with Crays being + * the only known exception. + * + * + * @author TAO version by + * @author Aniruddha Gokhale + * @author Carlos O'Ryan + * @author ACE version by + * @author Jeff Parsons + * @author Istvan Buki + */ +//============================================================================= + + +#ifndef ACE_CDR_BASE_H +#define ACE_CDR_BASE_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Basic_Types.h" +#include "ace/Default_Constants.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_Message_Block; + +/** + * @class ACE_CDR + * + * @brief Keep constants and some routines common to both Output and + * Input CDR streams. + */ +class ACE_Export ACE_CDR +{ +public: + // = Constants defined by the CDR protocol. + // By defining as many of these constants as possible as enums we + // ensure they get inlined and avoid pointless static memory + // allocations. + + enum + { + // Note that some of these get reused as part of the standard + // binary format: unsigned is the same size as its signed cousin, + // float is LONG_SIZE, and double is LONGLONG_SIZE. + + OCTET_SIZE = 1, + SHORT_SIZE = 2, + LONG_SIZE = 4, + LONGLONG_SIZE = 8, + LONGDOUBLE_SIZE = 16, + + OCTET_ALIGN = 1, + SHORT_ALIGN = 2, + LONG_ALIGN = 4, + LONGLONG_ALIGN = 8, + /// @note the CORBA LongDouble alignment requirements do not + /// match its size... + LONGDOUBLE_ALIGN = 8, + + /// Maximal CDR 1.1 alignment: "quad precision" FP (i.e. "CDR::Long + /// double", size as above). + MAX_ALIGNMENT = 8, + + /// The default buffer size. + /** + * @todo We want to add options to control this + * default value, so this constant should be read as the default + * default value ;-) + */ + DEFAULT_BUFSIZE = ACE_DEFAULT_CDR_BUFSIZE, + + /// The buffer size grows exponentially until it reaches this size; + /// afterwards it grows linearly using the next constant + EXP_GROWTH_MAX = ACE_DEFAULT_CDR_EXP_GROWTH_MAX, + + /// Once exponential growth is ruled out the buffer size increases + /// in chunks of this size, note that this constants have the same + /// value right now, but it does not need to be so. + LINEAR_GROWTH_CHUNK = ACE_DEFAULT_CDR_LINEAR_GROWTH_CHUNK + }; + + /** + * Do byte swapping for each basic IDL type size. There exist only + * routines to put byte, halfword (2 bytes), word (4 bytes), + * doubleword (8 bytes) and quadword (16 byte); because those are + * the IDL basic type sizes. + */ + static void swap_2 (char const *orig, char *target); + static void swap_4 (char const *orig, char *target); + static void swap_8 (char const *orig, char *target); + static void swap_16 (char const *orig, char *target); + static void swap_2_array (char const *orig, + char *target, + size_t length); + static void swap_4_array (char const *orig, + char *target, + size_t length); + static void swap_8_array (char const *orig, + char *target, + size_t length); + static void swap_16_array (char const *orig, + char *target, + size_t length); + + /// Align the message block to ACE_CDR::MAX_ALIGNMENT, + /// set by the CORBA spec at 8 bytes. + static void mb_align (ACE_Message_Block *mb); + + /** + * Compute the size of the smallest buffer that can contain at least + * @a minsize bytes. + * To understand how a "best fit" is computed look at the + * algorithm in the code. + * Basically the buffers grow exponentially, up to a certain point, + * then the buffer size grows linearly. + * The advantage of this algorithm is that is rapidly grows to a + * large value, but does not explode at the end. + */ + static size_t first_size (size_t minsize); + + /// Compute not the smallest, but the second smallest buffer that + /// will fir @a minsize bytes. + static size_t next_size (size_t minsize); + + /** + * Increase the capacity of mb to contain at least @a minsize bytes. + * If @a minsize is zero the size is increased by an amount at least + * large enough to contain any of the basic IDL types. + * @retval -1 Failure + * @retval 0 Success. + */ + static int grow (ACE_Message_Block *mb, size_t minsize); + + /// Copy a message block chain into a single message block, + /// preserving the alignment of the first message block of the + /// original stream, not the following message blocks. + static void consolidate (ACE_Message_Block *dst, + const ACE_Message_Block *src); + + static size_t total_length (const ACE_Message_Block *begin, + const ACE_Message_Block *end); + + /** + * @name Basic OMG IDL Types + * + * These types are for use in the CDR classes. The cleanest way to + * avoid complaints from all compilers is to define them all. + */ + //@{ + typedef bool Boolean; + typedef unsigned char Octet; + typedef char Char; + typedef ACE_WCHAR_T WChar; + typedef ACE_INT16 Short; + typedef ACE_UINT16 UShort; + typedef ACE_INT32 Long; + typedef ACE_UINT32 ULong; + typedef ACE_UINT64 ULongLong; + +# if (defined (_MSC_VER)) || (defined (__BORLANDC__)) + typedef __int64 LongLong; +# elif ACE_SIZEOF_LONG == 8 && !defined(_CRAYMPP) + typedef long LongLong; +# elif defined(__TANDEM) + typedef long long LongLong; +# elif ACE_SIZEOF_LONG_LONG == 8 && !defined (ACE_LACKS_LONGLONG_T) +# if defined (sun) && !defined (ACE_LACKS_U_LONGLONG_T) + // sun #defines u_longlong_t, maybe other platforms do also. + // Use it, at least with g++, so that its -pedantic doesn't + // complain about no ANSI C++ long long. + typedef longlong_t LongLong; +# else + // LynxOS 2.5.0 and Linux don't have u_longlong_t. + typedef long long LongLong; +# endif /* sun */ +# else /* no native 64 bit integer type */ +# define NONNATIVE_LONGLONG + struct ACE_Export LongLong + { +# if defined (ACE_BIG_ENDIAN) + ACE_CDR::Long h; + ACE_CDR::Long l; +# else + ACE_CDR::Long l; + ACE_CDR::Long h; +# endif /* ! ACE_BIG_ENDIAN */ + + /** + * @name Overloaded Relation Operators. + * + * The canonical comparison operators. + */ + //@{ + bool operator== (const LongLong &rhs) const; + bool operator!= (const LongLong &rhs) const; + //@} + }; +# endif /* no native 64 bit integer type */ + +# if defined (NONNATIVE_LONGLONG) +# define ACE_CDR_LONGLONG_INITIALIZER {0,0} +# else +# define ACE_CDR_LONGLONG_INITIALIZER 0 +# endif /* NONNATIVE_LONGLONG */ + +# if ACE_SIZEOF_FLOAT == 4 + typedef float Float; +# else /* ACE_SIZEOF_FLOAT != 4 */ + struct Float + { +# if ACE_SIZEOF_INT == 4 + // Use unsigned int to get word alignment. + unsigned int f; +# else /* ACE_SIZEOF_INT != 4 */ + // Applications will probably have trouble with this. + char f[4]; +# if defined(_UNICOS) && !defined(_CRAYMPP) + Float (void); + Float (const float &init); + Float & operator= (const float &rhs); + bool operator!= (const Float &rhs) const; +# endif /* _UNICOS */ +# endif /* ACE_SIZEOF_INT != 4 */ + }; +# endif /* ACE_SIZEOF_FLOAT != 4 */ + +# if ACE_SIZEOF_DOUBLE == 8 + typedef double Double; +# else /* ACE_SIZEOF_DOUBLE != 8 */ + struct Double + { +# if ACE_SIZEOF_LONG == 8 + // Use u long to get word alignment. + unsigned long f; +# else /* ACE_SIZEOF_INT != 8 */ + // Applications will probably have trouble with this. + char f[8]; +# endif /* ACE_SIZEOF_INT != 8 */ + }; +# endif /* ACE_SIZEOF_DOUBLE != 8 */ + + // 94-9-32 Appendix A defines a 128 bit floating point "long + // double" data type, with greatly extended precision and four + // more bits of exponent (compared to "double"). This is an IDL + // extension, not yet standard. + +# if ACE_SIZEOF_LONG_DOUBLE == 16 + typedef long double LongDouble; +# define ACE_CDR_LONG_DOUBLE_INITIALIZER 0 +# define ACE_CDR_LONG_DOUBLE_ASSIGNMENT(LHS, RHS) LHS = RHS +# else +# define NONNATIVE_LONGDOUBLE +# define ACE_CDR_LONG_DOUBLE_INITIALIZER {{0}} +# define ACE_CDR_LONG_DOUBLE_ASSIGNMENT(LHS, RHS) LHS.assign (RHS) + struct ACE_Export LongDouble + { + // VxWorks' compiler (gcc 2.96) gets confused by the operator long + // double, so we avoid using long double as the NativeImpl. + // Linux's x86 long double format (12 or 16 bytes) is incompatible + // with Windows, Solaris, AIX, MacOS X and HP-UX (and probably others) + // long double format (8 or 16 bytes). If you need 32-bit Linux to + // inter-operate with 64-bit Linux you will want to define this + // macro to 0 so that "long double" is used. Otherwise, do not define + // this macro. +# if defined (ACE_CDR_IMPLEMENT_WITH_NATIVE_DOUBLE) && \ + (ACE_CDR_IMPLEMENT_WITH_NATIVE_DOUBLE == 1) + typedef double NativeImpl; +# else + typedef long double NativeImpl; +# endif /* ACE_CDR_IMPLEMENT_WITH_NATIVE_DOUBLE==1 */ + + char ld[16]; + + LongDouble& assign (const NativeImpl& rhs); + LongDouble& assign (const LongDouble& rhs); + + bool operator== (const LongDouble &rhs) const; + bool operator!= (const LongDouble &rhs) const; + + LongDouble& operator*= (const NativeImpl rhs) { + return this->assign (static_cast (*this) * rhs); + } + LongDouble& operator/= (const NativeImpl rhs) { + return this->assign (static_cast (*this) / rhs); + } + LongDouble& operator+= (const NativeImpl rhs) { + return this->assign (static_cast (*this) + rhs); + } + LongDouble& operator-= (const NativeImpl rhs) { + return this->assign (static_cast (*this) - rhs); + } + LongDouble& operator++ () { + return this->assign (static_cast (*this) + 1); + } + LongDouble& operator-- () { + return this->assign (static_cast (*this) - 1); + } + LongDouble operator++ (int) { + LongDouble ldv = *this; + this->assign (static_cast (*this) + 1); + return ldv; + } + LongDouble operator-- (int) { + LongDouble ldv = *this; + this->assign (static_cast (*this) - 1); + return ldv; + } + + operator NativeImpl () const; + }; +# endif /* ACE_SIZEOF_LONG_DOUBLE != 16 */ + + //@} + +#if !defined (ACE_CDR_GIOP_MAJOR_VERSION) +# define ACE_CDR_GIOP_MAJOR_VERSION 1 +#endif /*ACE_CDR_GIOP_MAJOR_VERSION */ + +#if !defined (ACE_CDR_GIOP_MINOR_VERSION) +# define ACE_CDR_GIOP_MINOR_VERSION 2 +#endif /* ACE_CDR_GIOP_MINOR_VERSION */ +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +# include "ace/CDR_Base.inl" +#endif /* __ACE_INLINE__ */ + + +#include /**/ "ace/post.h" + +#endif /* ACE_CDR_BASE_H */ diff --git a/ACE/ace/CDR_Base.inl b/ACE/ace/CDR_Base.inl new file mode 100644 index 00000000000..b84470af87f --- /dev/null +++ b/ACE/ace/CDR_Base.inl @@ -0,0 +1,255 @@ +// -*- C++ -*- +// +// $Id$ + +#if defined (ACE_HAS_INTRINSIC_BYTESWAP) +// Take advantage of MSVC++ byte swapping compiler intrinsics (found +// in ). +# pragma intrinsic (_byteswap_ushort, _byteswap_ulong, _byteswap_uint64) +#endif /* ACE_HAS_INTRINSIC_BYTESWAP */ + +#if defined (ACE_HAS_BSWAP_16) || defined (ACE_HAS_BSWAP_32) || defined (ACE_HAS_BSWAP_64) +# include "ace/os_include/os_byteswap.h" +#endif + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// +// The ACE_CDR::swap_X and ACE_CDR::swap_X_array routines are broken +// in 5 cases for optimization: +// +// * MSVC++ 7.1 or better +// => Compiler intrinsics +// +// * AMD64 CPU + gnu g++ +// => gcc amd64 inline assembly. +// +// * x86 Pentium CPU + gnu g++ +// (ACE_HAS_PENTIUM && __GNUG__) +// => gcc x86 inline assembly. +// +// * x86 Pentium CPU and (_MSC_VER) or BORLAND C++) +// (ACE_HAS_PENTIUM && ( _MSC_VER || __BORLANDC__ ) +// => MSC x86 inline assembly. +// +// * 64 bit architecture +// (ACE_SIZEOF_LONG == 8) +// => shift/masks using 64bit words. +// +// * default +// (none of the above) +// => shift/masks using 32bit words. +// +// +// Some things you could find useful to know if you intend to mess +// with this optimizations for swaps: +// +// * MSVC++ don't assume register values are conserved between +// statements. So you can clobber any register you want, +// whenever you want (well not *anyone* really, see manual). +// The MSVC++ optimizer will try to pick different registers +// for the C++ statements sorrounding your asm block, and if +// it's not possible will use the stack. +// +// * If you clobber registers with asm statements in gcc, you +// better do it in an asm-only function, or save/restore them +// before/after in the stack. If not, sorrounding C statements +// could end using the same registers and big-badda-bum (been +// there, done that...). The big-badda-bum could happen *even +// if you specify the clobbered register in your asm's*. +// Even better, use gcc asm syntax for detecting the register +// asigned to a certain variable so you don't have to clobber any +// register directly. +// + +ACE_INLINE void +ACE_CDR::swap_2 (const char *orig, char* target) +{ +#if defined (ACE_HAS_INTRINSIC_BYTESWAP) + // Take advantage of MSVC++ compiler intrinsic byte swapping + // function. + *reinterpret_cast (target) = + _byteswap_ushort (*reinterpret_cast (orig)); +#elif defined (ACE_HAS_BSWAP16) + *reinterpret_cast (target) = + bswap16 (*reinterpret_cast (orig)); +#elif defined (ACE_HAS_BSWAP_16) + *reinterpret_cast (target) = + bswap_16 (*reinterpret_cast (orig)); +#elif defined(ACE_HAS_INTEL_ASSEMBLY) + unsigned short a = + *reinterpret_cast (orig); + asm( "rolw $8, %0" : "=r" (a) : "0" (a) ); + *reinterpret_cast (target) = a; +#elif defined (ACE_HAS_PENTIUM) \ + && (defined(_MSC_VER) || defined(__BORLANDC__)) \ + && !defined(ACE_LACKS_INLINE_ASSEMBLY) + __asm mov ebx, orig; + __asm mov ecx, target; + __asm mov ax, [ebx]; + __asm rol ax, 8; + __asm mov [ecx], ax; +#else + register ACE_UINT16 usrc = * reinterpret_cast (orig); + register ACE_UINT16* udst = reinterpret_cast (target); + *udst = (usrc << 8) | (usrc >> 8); +#endif /* ACE_HAS_PENTIUM */ +} + +ACE_INLINE void +ACE_CDR::swap_4 (const char* orig, char* target) +{ +#if defined (ACE_HAS_INTRINSIC_BYTESWAP) + // Take advantage of MSVC++ compiler intrinsic byte swapping + // function. + *reinterpret_cast (target) = + _byteswap_ulong (*reinterpret_cast (orig)); +#elif defined (ACE_HAS_BSWAP32) + *reinterpret_cast (target) = + bswap32 (*reinterpret_cast (orig)); +#elif defined (ACE_HAS_BSWAP_32) + *reinterpret_cast (target) = + bswap_32 (*reinterpret_cast (orig)); +#elif defined(ACE_HAS_INTEL_ASSEMBLY) + // We have ACE_HAS_PENTIUM, so we know the sizeof's. + register unsigned int j = + *reinterpret_cast (orig); + asm ("bswap %1" : "=r" (j) : "0" (j)); + *reinterpret_cast (target) = j; +#elif defined(ACE_HAS_PENTIUM) \ + && (defined(_MSC_VER) || defined(__BORLANDC__)) \ + && !defined(ACE_LACKS_INLINE_ASSEMBLY) + __asm mov ebx, orig; + __asm mov ecx, target; + __asm mov eax, [ebx]; + __asm bswap eax; + __asm mov [ecx], eax; +#else + register ACE_UINT32 x = * reinterpret_cast (orig); + x = (x << 24) | ((x & 0xff00) << 8) | ((x & 0xff0000) >> 8) | (x >> 24); + * reinterpret_cast (target) = x; +#endif /* ACE_HAS_INTRINSIC_BYTESWAP */ +} + +ACE_INLINE void +ACE_CDR::swap_8 (const char* orig, char* target) +{ +#if defined (ACE_HAS_INTRINSIC_BYTESWAP) + // Take advantage of MSVC++ compiler intrinsic byte swapping + // function. + *reinterpret_cast (target) = + _byteswap_uint64 (*reinterpret_cast (orig)); +#elif defined (ACE_HAS_BSWAP64) + *reinterpret_cast (target) = + bswap64 (*reinterpret_cast (orig)); +#elif defined (ACE_HAS_BSWAP_64) + *reinterpret_cast (target) = + bswap_64 (*reinterpret_cast (orig)); +#elif (defined (__amd64__) || defined (__x86_64__)) && defined(__GNUG__) + register unsigned long x = + * reinterpret_cast (orig); + asm ("bswapq %1" : "=r" (x) : "0" (x)); + *reinterpret_cast (target) = x; +#elif defined(ACE_HAS_PENTIUM) && defined(__GNUG__) + register unsigned int i = + *reinterpret_cast (orig); + register unsigned int j = + *reinterpret_cast (orig + 4); + asm ("bswap %1" : "=r" (i) : "0" (i)); + asm ("bswap %1" : "=r" (j) : "0" (j)); + *reinterpret_cast (target + 4) = i; + *reinterpret_cast (target) = j; +#elif defined(ACE_HAS_PENTIUM) \ + && (defined(_MSC_VER) || defined(__BORLANDC__)) \ + && !defined(ACE_LACKS_INLINE_ASSEMBLY) + __asm mov ecx, orig; + __asm mov edx, target; + __asm mov eax, [ecx]; + __asm mov ebx, 4[ecx]; + __asm bswap eax; + __asm bswap ebx; + __asm mov 4[edx], eax; + __asm mov [edx], ebx; +#elif ACE_SIZEOF_LONG == 8 + // 64 bit architecture. + register unsigned long x = + * reinterpret_cast (orig); + register unsigned long x84 = (x & 0x000000ff000000ffUL) << 24; + register unsigned long x73 = (x & 0x0000ff000000ff00UL) << 8; + register unsigned long x62 = (x & 0x00ff000000ff0000UL) >> 8; + register unsigned long x51 = (x & 0xff000000ff000000UL) >> 24; + x = (x84 | x73 | x62 | x51); + x = (x << 32) | (x >> 32); + *reinterpret_cast (target) = x; +#else + register ACE_UINT32 x = + * reinterpret_cast (orig); + register ACE_UINT32 y = + * reinterpret_cast (orig + 4); + x = (x << 24) | ((x & 0xff00) << 8) | ((x & 0xff0000) >> 8) | (x >> 24); + y = (y << 24) | ((y & 0xff00) << 8) | ((y & 0xff0000) >> 8) | (y >> 24); + * reinterpret_cast (target) = y; + * reinterpret_cast (target + 4) = x; +#endif /* ACE_HAS_INTRINSIC_BYTESWAP */ +} + +ACE_INLINE void +ACE_CDR::swap_16 (const char* orig, char* target) +{ + swap_8 (orig + 8, target); + swap_8 (orig, target + 8); +} + +ACE_INLINE size_t +ACE_CDR::first_size (size_t minsize) +{ + if (minsize == 0) + return ACE_CDR::DEFAULT_BUFSIZE; + + size_t newsize = ACE_CDR::DEFAULT_BUFSIZE; + while (newsize < minsize) + { + if (newsize < ACE_CDR::EXP_GROWTH_MAX) + { + // We grow exponentially at the beginning, this is fast and + // reduces the number of allocations. + + // Quickly multiply by two using a bit shift. This is + // guaranteed to work since the variable is an unsigned + // integer. + newsize <<= 1; + } + else + { + // but continuing with exponential growth can result in over + // allocations and easily yield an allocation failure. + // So we grow linearly when the buffer is too big. + newsize += ACE_CDR::LINEAR_GROWTH_CHUNK; + } + } + return newsize; +} + +ACE_INLINE size_t +ACE_CDR::next_size (size_t minsize) +{ + size_t newsize = ACE_CDR::first_size (minsize); + + if (newsize == minsize) + { + // If necessary increment the size + if (newsize < ACE_CDR::EXP_GROWTH_MAX) + // Quickly multiply by two using a bit shift. This is + // guaranteed to work since the variable is an unsigned + // integer. + newsize <<= 1; + else + newsize += ACE_CDR::LINEAR_GROWTH_CHUNK; + } + + return newsize; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +// **************************************************************** diff --git a/ACE/ace/CDR_Size.cpp b/ACE/ace/CDR_Size.cpp new file mode 100644 index 00000000000..c737db786d9 --- /dev/null +++ b/ACE/ace/CDR_Size.cpp @@ -0,0 +1,244 @@ +#include "ace/CDR_Size.h" +#include "ace/SString.h" +#include "ace/OS_Memory.h" + +#if !defined (__ACE_INLINE__) +# include "ace/CDR_Size.inl" +#endif /* ! __ACE_INLINE__ */ + +ACE_RCSID (ace, + CDR_Size, + "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_CDR::Boolean +ACE_SizeCDR::write_wchar (ACE_CDR::WChar x) +{ + // Note: translator framework is not supported. + // + if (ACE_OutputCDR::wchar_maxbytes () == 0) + { + errno = EACCES; + return (this->good_bit_ = false); + } + if (static_cast (major_version_) == 1 + && static_cast (minor_version_) == 2) + { + ACE_CDR::Octet len = + static_cast (ACE_OutputCDR::wchar_maxbytes ()); + if (this->write_1 (&len)) + { + if (ACE_OutputCDR::wchar_maxbytes () == sizeof(ACE_CDR::WChar)) + return + this->write_octet_array ( + reinterpret_cast (&x), + static_cast (len)); + else + if (ACE_OutputCDR::wchar_maxbytes () == 2) + { + ACE_CDR::Short sx = static_cast (x); + return + this->write_octet_array ( + reinterpret_cast (&sx), + static_cast (len)); + } + else + { + ACE_CDR::Octet ox = static_cast (x); + return + this->write_octet_array ( + reinterpret_cast (&ox), + static_cast (len)); + } + } + } + else if (static_cast (minor_version_) == 0) + { // wchar is not allowed with GIOP 1.0. + errno = EINVAL; + return (this->good_bit_ = false); + } + if (ACE_OutputCDR::wchar_maxbytes () == sizeof (ACE_CDR::WChar)) + { + const void *temp = &x; + return this->write_4 (reinterpret_cast (temp)); + } + else if (ACE_OutputCDR::wchar_maxbytes () == 2) + { + ACE_CDR::Short sx = static_cast (x); + return this->write_2 (reinterpret_cast (&sx)); + } + ACE_CDR::Octet ox = static_cast (x); + return this->write_1 (reinterpret_cast (&ox)); +} + +ACE_CDR::Boolean +ACE_SizeCDR::write_string (ACE_CDR::ULong len, + const ACE_CDR::Char *x) +{ + // Note: translator framework is not supported. + // + if (len != 0) + { + if (this->write_ulong (len + 1)) + return this->write_char_array (x, len + 1); + } + else + { + // Be nice to programmers: treat nulls as empty strings not + // errors. (OMG-IDL supports languages that don't use the C/C++ + // notion of null v. empty strings; nulls aren't part of the OMG-IDL + // string model.) + if (this->write_ulong (1)) + return this->write_char (0); + } + + return (this->good_bit_ = false); +} + +ACE_CDR::Boolean +ACE_SizeCDR::write_string (const ACE_CString &x) +{ + // @@ Leave this method in here, not the `.i' file so that we don't + // have to unnecessarily pull in the `ace/SString.h' header. + return this->write_string (static_cast (x.length ()), + x.c_str()); +} + +ACE_CDR::Boolean +ACE_SizeCDR::write_wstring (ACE_CDR::ULong len, + const ACE_CDR::WChar *x) +{ + // Note: translator framework is not supported. + // + if (ACE_OutputCDR::wchar_maxbytes () == 0) + { + errno = EACCES; + return (this->good_bit_ = false); + } + + if (static_cast (this->major_version_) == 1 + && static_cast (this->minor_version_) == 2) + { + if (x != 0) + { + //In GIOP 1.2 the length field contains the number of bytes + //the wstring occupies rather than number of wchars + //Taking sizeof might not be a good way! This is a temporary fix. + if (this->write_ulong (ACE_OutputCDR::wchar_maxbytes () * len)) + return this->write_wchar_array (x, len); + } + else + //In GIOP 1.2 zero length wstrings are legal + return this->write_ulong (0); + } + + else + if (x != 0) + { + if (this->write_ulong (len + 1)) + return this->write_wchar_array (x, len + 1); + } + else if (this->write_ulong (1)) + return this->write_wchar (0); + return (this->good_bit_ = false); +} + +ACE_CDR::Boolean +ACE_SizeCDR::write_1 (const ACE_CDR::Octet *) +{ + this->adjust (1); + return true; +} + +ACE_CDR::Boolean +ACE_SizeCDR::write_2 (const ACE_CDR::UShort *) +{ + this->adjust (ACE_CDR::SHORT_SIZE); + return true; +} + +ACE_CDR::Boolean +ACE_SizeCDR::write_4 (const ACE_CDR::ULong *) +{ + this->adjust (ACE_CDR::LONG_SIZE); + return true; +} + +ACE_CDR::Boolean +ACE_SizeCDR::write_8 (const ACE_CDR::ULongLong *) +{ + this->adjust (ACE_CDR::LONGLONG_SIZE); + return true; +} + +ACE_CDR::Boolean +ACE_SizeCDR::write_16 (const ACE_CDR::LongDouble *) +{ + this->adjust (ACE_CDR::LONGDOUBLE_SIZE, + ACE_CDR::LONGDOUBLE_ALIGN); + return true; +} + +ACE_CDR::Boolean +ACE_SizeCDR::write_wchar_array_i (const ACE_CDR::WChar *, + ACE_CDR::ULong length) +{ + if (length == 0) + return true; + + size_t const align = (ACE_OutputCDR::wchar_maxbytes () == 2) ? + ACE_CDR::SHORT_ALIGN : + ACE_CDR::OCTET_ALIGN; + + this->adjust (ACE_OutputCDR::wchar_maxbytes () * length, align); + return true; +} + + +ACE_CDR::Boolean +ACE_SizeCDR::write_array (const void *, + size_t size, + size_t align, + ACE_CDR::ULong length) +{ + if (length == 0) + return true; + + this->adjust (size * length, align); + return true; +} + +ACE_CDR::Boolean +ACE_SizeCDR::write_boolean_array (const ACE_CDR::Boolean*, + ACE_CDR::ULong length) +{ + this->adjust (length, 1); + return true; +} + +void +ACE_SizeCDR::adjust (size_t size) +{ + adjust (size, size); +} + +void +ACE_SizeCDR::adjust (size_t size, + size_t align) +{ +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + const size_t offset = ACE_align_binary (size_, align) - size_; + size_ += offset; +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + size_ += size; +} + +ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, const ACE_CString &x) +{ + ss.write_string (x); + return ss.good_bit (); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/CDR_Size.h b/ACE/ace/CDR_Size.h new file mode 100644 index 00000000000..a7ff689479b --- /dev/null +++ b/ACE/ace/CDR_Size.h @@ -0,0 +1,241 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file CDR_Size.h + * + * $Id$ + * + * + * ACE Common Data Representation (CDR) size-calculating stream. + * + * + * The current implementation assumes that the host has 1-byte, + * 2-byte and 4-byte integral types, and that it has single + * precision and double precision IEEE floats. + * Those assumptions are pretty good these days, with Crays beign + * the only known exception. + * + * + * @author Boris Kolpackov + * + */ +//============================================================================= + +#ifndef ACE_CDR_SIZE_H +#define ACE_CDR_SIZE_H + +#include /**/ "ace/pre.h" + +#include "ace/CDR_Base.h" +#include "ace/CDR_Stream.h" // for ACE_OutputCDR::from_* + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/SStringfwd.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_SizeCDR + * + * @brief A CDR stream for calculating size of the representation. + * + */ +class ACE_Export ACE_SizeCDR +{ +public: + /// Default constructor. + ACE_SizeCDR (ACE_CDR::Octet major_version = ACE_CDR_GIOP_MAJOR_VERSION, + ACE_CDR::Octet minor_version = ACE_CDR_GIOP_MINOR_VERSION); + + /// Returns @c false if an error has ocurred. + bool good_bit (void) const; + + + /// Reset current size. + void reset (void); + + + /// Return current size. + size_t total_length (void) const; + + + // Return 0 on failure and 1 on success. + //@{ @name Size-calculating pseudo-write operations + ACE_CDR::Boolean write_boolean (ACE_CDR::Boolean x); + ACE_CDR::Boolean write_char (ACE_CDR::Char x); + ACE_CDR::Boolean write_wchar (ACE_CDR::WChar x); + ACE_CDR::Boolean write_octet (ACE_CDR::Octet x); + ACE_CDR::Boolean write_short (ACE_CDR::Short x); + ACE_CDR::Boolean write_ushort (ACE_CDR::UShort x); + ACE_CDR::Boolean write_long (ACE_CDR::Long x); + ACE_CDR::Boolean write_ulong (ACE_CDR::ULong x); + ACE_CDR::Boolean write_longlong (const ACE_CDR::LongLong &x); + ACE_CDR::Boolean write_ulonglong (const ACE_CDR::ULongLong &x); + ACE_CDR::Boolean write_float (ACE_CDR::Float x); + ACE_CDR::Boolean write_double (const ACE_CDR::Double &x); + ACE_CDR::Boolean write_longdouble (const ACE_CDR::LongDouble &x); + + /// For string we offer methods that accept a precomputed length. + ACE_CDR::Boolean write_string (const ACE_CDR::Char *x); + ACE_CDR::Boolean write_string (ACE_CDR::ULong len, + const ACE_CDR::Char *x); + ACE_CDR::Boolean write_string (const ACE_CString &x); + ACE_CDR::Boolean write_wstring (const ACE_CDR::WChar *x); + ACE_CDR::Boolean write_wstring (ACE_CDR::ULong length, + const ACE_CDR::WChar *x); + //@} + + /// @note the portion written starts at and ends + /// at . + /// The length is *NOT* stored into the CDR stream. + //@{ @name Array write operations + ACE_CDR::Boolean write_boolean_array (const ACE_CDR::Boolean *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_char_array (const ACE_CDR::Char *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_wchar_array (const ACE_CDR::WChar* x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_octet_array (const ACE_CDR::Octet* x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_short_array (const ACE_CDR::Short *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_ushort_array (const ACE_CDR::UShort *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_long_array (const ACE_CDR::Long *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_ulong_array (const ACE_CDR::ULong *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_longlong_array (const ACE_CDR::LongLong* x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_ulonglong_array (const ACE_CDR::ULongLong *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_float_array (const ACE_CDR::Float *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_double_array (const ACE_CDR::Double *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_longdouble_array (const ACE_CDR::LongDouble* x, + ACE_CDR::ULong length); + + /// + /// Adjust to @a size and count octets. + void adjust (size_t size); + + /// As above, but now the size and alignment requirements may be + /// different. + void adjust (size_t size, + size_t align); + +private: + /// disallow copying... + ACE_SizeCDR (const ACE_SizeCDR& rhs); + ACE_SizeCDR& operator= (const ACE_SizeCDR& rhs); + + ACE_CDR::Boolean write_1 (const ACE_CDR::Octet *x); + ACE_CDR::Boolean write_2 (const ACE_CDR::UShort *x); + ACE_CDR::Boolean write_4 (const ACE_CDR::ULong *x); + ACE_CDR::Boolean write_8 (const ACE_CDR::ULongLong *x); + ACE_CDR::Boolean write_16 (const ACE_CDR::LongDouble *x); + + /** + * write an array of @a length elements, each of @a size bytes and the + * start aligned at a multiple of . The elements are assumed + * to be packed with the right alignment restrictions. It is mostly + * designed for buffers of the basic types. + * + * This operation uses ; as explained above it is expected + * that using assignment is faster that for one element, + * but for several elements should be more efficient, it + * could be interesting to find the break even point and optimize + * for that case, but that would be too platform dependent. + */ + ACE_CDR::Boolean write_array (const void *x, + size_t size, + size_t align, + ACE_CDR::ULong length); + + + ACE_CDR::Boolean write_wchar_array_i (const ACE_CDR::WChar* x, + ACE_CDR::ULong length); + +private: + /// Set to false when an error ocurrs. + bool good_bit_; + + /// Current size. + size_t size_; + +protected: + /// GIOP version information + ACE_CDR::Octet major_version_; + ACE_CDR::Octet minor_version_; +}; + +// @@ This operator should not be inlined since they force SString.h +// to be included in this header. +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + const ACE_CString &x); + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +# include "ace/CDR_Size.inl" +#else /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Not used by CORBA or TAO +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + ACE_CDR::Char x); + +// CDR size-calculating output operators for primitive types + +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + ACE_CDR::Short x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + ACE_CDR::UShort x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + ACE_CDR::Long x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + ACE_CDR::ULong x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + ACE_CDR::LongLong x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + ACE_CDR::ULongLong x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR& ss, + ACE_CDR::LongDouble x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + ACE_CDR::Float x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + ACE_CDR::Double x); + +// CDR size-calculating output operator from helper classes + +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + ACE_OutputCDR::from_boolean x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + ACE_OutputCDR::from_char x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + ACE_OutputCDR::from_wchar x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + ACE_OutputCDR::from_octet x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + ACE_OutputCDR::from_string x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + ACE_OutputCDR::from_wstring x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + const ACE_CDR::Char* x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_SizeCDR &ss, + const ACE_CDR::WChar* x); + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* __ACE_INLINE__ */ + + +#include /**/ "ace/post.h" + +#endif /* ACE_CDR_SIZE_H */ diff --git a/ACE/ace/CDR_Size.inl b/ACE/ace/CDR_Size.inl new file mode 100644 index 00000000000..2527af22989 --- /dev/null +++ b/ACE/ace/CDR_Size.inl @@ -0,0 +1,424 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/OS_NS_string.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_SizeCDR::ACE_SizeCDR (ACE_CDR::Octet major_version, + ACE_CDR::Octet minor_version) + : good_bit_ (true), + size_ (0), + major_version_ (major_version), + minor_version_ (minor_version) +{ +} + +ACE_INLINE bool +ACE_SizeCDR::good_bit (void) const +{ + return this->good_bit_; +} + +ACE_INLINE void +ACE_SizeCDR::reset (void) +{ + this->size_ = 0; +} + +ACE_INLINE size_t +ACE_SizeCDR::total_length (void) const +{ + return this->size_; +} + + +// Encode the CDR stream. + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_octet (ACE_CDR::Octet x) +{ + return this->write_1 (reinterpret_cast (&x)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_boolean (ACE_CDR::Boolean x) +{ + return (ACE_CDR::Boolean) this->write_octet (x ? (ACE_CDR::Octet) 1 : (ACE_CDR::Octet) 0); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_char (ACE_CDR::Char x) +{ + // Note: translator framework is not supported. + // + return this->write_1 (reinterpret_cast (&x)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_short (ACE_CDR::Short x) +{ + return this->write_2 (reinterpret_cast (&x)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_ushort (ACE_CDR::UShort x) +{ + return this->write_2 (reinterpret_cast (&x)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_long (ACE_CDR::Long x) +{ + return this->write_4 (reinterpret_cast (&x)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_ulong (ACE_CDR::ULong x) +{ + return this->write_4 (reinterpret_cast (&x)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_longlong (const ACE_CDR::LongLong &x) +{ + return this->write_8 (reinterpret_cast (&x)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_ulonglong (const ACE_CDR::ULongLong &x) +{ + const void *temp = &x; + return this->write_8 (reinterpret_cast (temp)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_float (ACE_CDR::Float x) +{ + const void *temp = &x; + return this->write_4 (reinterpret_cast (temp)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_double (const ACE_CDR::Double &x) +{ + const void *temp = &x; + return this->write_8 (reinterpret_cast (temp)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_longdouble (const ACE_CDR::LongDouble &x) +{ + const void *temp = &x; + return this->write_16 (reinterpret_cast (temp)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_string (const ACE_CDR::Char *x) +{ + if (x != 0) + { + const ACE_CDR::ULong len = + static_cast (ACE_OS::strlen (x)); + return this->write_string (len, x); + } + return this->write_string (0, 0); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_wstring (const ACE_CDR::WChar *x) +{ + if (x != 0) + { + ACE_CDR::ULong len = + static_cast (ACE_OS::strlen (x)); + return this->write_wstring (len, x); + } + return this->write_wstring (0, 0); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_char_array (const ACE_CDR::Char *x, + ACE_CDR::ULong length) +{ + // Note: translator framework is not supported. + // + return this->write_array (x, + ACE_CDR::OCTET_SIZE, + ACE_CDR::OCTET_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_wchar_array (const ACE_CDR::WChar* x, + ACE_CDR::ULong length) +{ + // Note: translator framework is not supported. + // + if (ACE_OutputCDR::wchar_maxbytes () == 0) + { + errno = EACCES; + return (ACE_CDR::Boolean) (this->good_bit_ = false); + } + if (ACE_OutputCDR::wchar_maxbytes () == sizeof (ACE_CDR::WChar)) + return this->write_array (x, + sizeof (ACE_CDR::WChar), + sizeof (ACE_CDR::WChar) == 2 + ? ACE_CDR::SHORT_ALIGN + : ACE_CDR::LONG_ALIGN, + length); + return this->write_wchar_array_i (x,length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_octet_array (const ACE_CDR::Octet* x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::OCTET_SIZE, + ACE_CDR::OCTET_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_short_array (const ACE_CDR::Short *x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::SHORT_SIZE, + ACE_CDR::SHORT_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_ushort_array (const ACE_CDR::UShort *x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::SHORT_SIZE, + ACE_CDR::SHORT_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_long_array (const ACE_CDR::Long *x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::LONG_SIZE, + ACE_CDR::LONG_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_ulong_array (const ACE_CDR::ULong *x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::LONG_SIZE, + ACE_CDR::LONG_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_longlong_array (const ACE_CDR::LongLong *x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::LONGLONG_SIZE, + ACE_CDR::LONGLONG_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_ulonglong_array (const ACE_CDR::ULongLong *x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::LONGLONG_SIZE, + ACE_CDR::LONGLONG_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_float_array (const ACE_CDR::Float *x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::LONG_SIZE, + ACE_CDR::LONG_ALIGN, + length); +} + + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_double_array (const ACE_CDR::Double *x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::LONGLONG_SIZE, + ACE_CDR::LONGLONG_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_SizeCDR::write_longdouble_array (const ACE_CDR::LongDouble* x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::LONGDOUBLE_SIZE, + ACE_CDR::LONGDOUBLE_ALIGN, + length); +} + + +// **************************************************************** + + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, ACE_CDR::Char x) +{ + ss.write_char (x); + return (ACE_CDR::Boolean) ss.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, ACE_CDR::Short x) +{ + ss.write_short (x); + return (ACE_CDR::Boolean) ss.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, ACE_CDR::UShort x) +{ + ss.write_ushort (x); + return (ACE_CDR::Boolean) ss.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, ACE_CDR::Long x) +{ + ss.write_long (x); + return (ACE_CDR::Boolean) ss.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, ACE_CDR::ULong x) +{ + ss.write_ulong (x); + return (ACE_CDR::Boolean) ss.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, ACE_CDR::LongLong x) +{ + ss.write_longlong (x); + return (ACE_CDR::Boolean) ss.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, ACE_CDR::ULongLong x) +{ + ss.write_ulonglong (x); + return (ACE_CDR::Boolean) ss.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, ACE_CDR::LongDouble x) +{ + ss.write_longdouble (x); + return (ACE_CDR::Boolean) ss.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, ACE_CDR::Float x) +{ + ss.write_float (x); + return (ACE_CDR::Boolean) ss.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, ACE_CDR::Double x) +{ + ss.write_double (x); + return (ACE_CDR::Boolean) ss.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, const ACE_CDR::Char *x) +{ + ss.write_string (x); + return (ACE_CDR::Boolean) ss.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, const ACE_CDR::WChar *x) +{ + ss.write_wstring (x); + return (ACE_CDR::Boolean) ss.good_bit (); +} + +// The following use the helper classes +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, ACE_OutputCDR::from_boolean x) +{ + ss.write_boolean (x.val_); + return (ACE_CDR::Boolean) ss.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, ACE_OutputCDR::from_char x) +{ + ss.write_char (x.val_); + return (ACE_CDR::Boolean) ss.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, ACE_OutputCDR::from_wchar x) +{ + ss.write_wchar (x.val_); + return (ACE_CDR::Boolean) ss.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, ACE_OutputCDR::from_octet x) +{ + ss.write_octet (x.val_); + return (ACE_CDR::Boolean) ss.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, ACE_OutputCDR::from_string x) +{ + ACE_CDR::ULong len = 0; + + if (x.val_ != 0) + { + len = static_cast (ACE_OS::strlen (x.val_)); + } + + ss.write_string (len, x.val_); + return + (ACE_CDR::Boolean) (ss.good_bit () && (!x.bound_ || len <= x.bound_)); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_SizeCDR &ss, ACE_OutputCDR::from_wstring x) +{ + ACE_CDR::ULong len = 0; + + if (x.val_ != 0) + { + len = static_cast (ACE_OS::strlen (x.val_)); + } + + ss.write_wstring (len, x.val_); + return + (ACE_CDR::Boolean) (ss.good_bit () && (!x.bound_ || len <= x.bound_)); +} + + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/CDR_Stream.cpp b/ACE/ace/CDR_Stream.cpp new file mode 100644 index 00000000000..00af2b70940 --- /dev/null +++ b/ACE/ace/CDR_Stream.cpp @@ -0,0 +1,1892 @@ +#include "ace/CDR_Stream.h" +#include "ace/SString.h" +#include "ace/Auto_Ptr.h" + +#if !defined (__ACE_INLINE__) +# include "ace/CDR_Stream.inl" +#endif /* ! __ACE_INLINE__ */ + +ACE_RCSID (ace, + CDR_Stream, + "$Id$") + +// **************************************************************** + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +size_t ACE_OutputCDR::wchar_maxbytes_ = sizeof (ACE_CDR::WChar); + +ACE_OutputCDR::ACE_OutputCDR (size_t size, + int byte_order, + ACE_Allocator *buffer_allocator, + ACE_Allocator *data_block_allocator, + ACE_Allocator *message_block_allocator, + size_t memcpy_tradeoff, + ACE_CDR::Octet major_version, + ACE_CDR::Octet minor_version) + : start_ ((size ? size : (size_t) ACE_CDR::DEFAULT_BUFSIZE) + ACE_CDR::MAX_ALIGNMENT, + ACE_Message_Block::MB_DATA, + 0, + 0, + buffer_allocator, + 0, + 0, + ACE_Time_Value::zero, + ACE_Time_Value::max_time, + data_block_allocator, + message_block_allocator), +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + current_alignment_ (0), +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + current_is_writable_ (true), + do_byte_swap_ (byte_order != ACE_CDR_BYTE_ORDER), + good_bit_ (true), + memcpy_tradeoff_ (memcpy_tradeoff), + major_version_ (major_version), + minor_version_ (minor_version), + char_translator_ (0), + wchar_translator_ (0) + +{ + ACE_CDR::mb_align (&this->start_); + this->current_ = &this->start_; +} + +ACE_OutputCDR::ACE_OutputCDR (char *data, + size_t size, + int byte_order, + ACE_Allocator *buffer_allocator, + ACE_Allocator *data_block_allocator, + ACE_Allocator *message_block_allocator, + size_t memcpy_tradeoff, + ACE_CDR::Octet major_version, + ACE_CDR::Octet minor_version) + : start_ (size, + ACE_Message_Block::MB_DATA, + 0, + data, + buffer_allocator, + 0, + 0, + ACE_Time_Value::zero, + ACE_Time_Value::max_time, + data_block_allocator, + message_block_allocator), +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + current_alignment_ (0), +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + current_is_writable_ (true), + do_byte_swap_ (byte_order != ACE_CDR_BYTE_ORDER), + good_bit_ (true), + memcpy_tradeoff_ (memcpy_tradeoff), + major_version_ (major_version), + minor_version_ (minor_version), + char_translator_ (0), + wchar_translator_ (0) +{ + // We cannot trust the buffer to be properly aligned + ACE_CDR::mb_align (&this->start_); + this->current_ = &this->start_; +} + +ACE_OutputCDR::ACE_OutputCDR (ACE_Data_Block *data_block, + int byte_order, + ACE_Allocator *message_block_allocator, + size_t memcpy_tradeoff, + ACE_CDR::Octet major_version, + ACE_CDR::Octet minor_version) + : start_ (data_block, + ACE_Message_Block::DONT_DELETE, + message_block_allocator), +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + current_alignment_ (0), +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + current_is_writable_ (true), + do_byte_swap_ (byte_order != ACE_CDR_BYTE_ORDER), + good_bit_ (true), + memcpy_tradeoff_ (memcpy_tradeoff), + major_version_ (major_version), + minor_version_ (minor_version), + char_translator_ (0), + wchar_translator_ (0) +{ + // We cannot trust the buffer to be properly aligned + ACE_CDR::mb_align (&this->start_); + this->current_ = &this->start_; +} + +ACE_OutputCDR::ACE_OutputCDR (ACE_Message_Block *data, + int byte_order, + size_t memcpy_tradeoff, + ACE_CDR::Octet major_version, + ACE_CDR::Octet minor_version) + : start_ (data->data_block ()->duplicate ()), +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + current_alignment_ (0), +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + current_is_writable_ (true), + do_byte_swap_ (byte_order != ACE_CDR_BYTE_ORDER), + good_bit_ (true), + memcpy_tradeoff_ (memcpy_tradeoff), + major_version_ (major_version), + minor_version_ (minor_version), + char_translator_ (0), + wchar_translator_ (0) +{ + // We cannot trust the buffer to be properly aligned + ACE_CDR::mb_align (&this->start_); + this->current_ = &this->start_; +} + +/*static*/ void +ACE_OutputCDR::wchar_maxbytes (size_t maxbytes) +{ + ACE_OutputCDR::wchar_maxbytes_ = maxbytes; +} + +/*static*/ size_t +ACE_OutputCDR::wchar_maxbytes () +{ + return ACE_OutputCDR::wchar_maxbytes_; +} + +int +ACE_OutputCDR::grow_and_adjust (size_t size, + size_t align, + char*& buf) +{ + if (!this->current_is_writable_ + || this->current_->cont () == 0 + || this->current_->cont ()->size () < size + ACE_CDR::MAX_ALIGNMENT) + { + // Calculate the new buffer's length; if growing for encode, we + // don't grow in "small" chunks because of the cost. + size_t cursize = this->current_->size (); + if (this->current_->cont () != 0) + cursize = this->current_->cont ()->size (); + size_t minsize = size; + +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + minsize += ACE_CDR::MAX_ALIGNMENT; +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + + // Make sure that there is enough room for bytes, but + // also make it bigger than whatever our current size is. + if (minsize < cursize) + minsize = cursize; + + size_t const newsize = ACE_CDR::next_size (minsize); + + this->good_bit_ = false; + ACE_Message_Block* tmp = 0; + ACE_NEW_RETURN (tmp, + ACE_Message_Block (newsize, + ACE_Message_Block::MB_DATA, + 0, + 0, + this->current_->data_block ()->allocator_strategy (), + 0, + 0, + ACE_Time_Value::zero, + ACE_Time_Value::max_time, + this->current_->data_block ()->data_block_allocator ()), + -1); + + // Message block initialization may fail while the construction + // succeds. Since as a matter of policy, ACE may throw no + // exceptions, we have to do a separate check like this. + if (tmp != 0 && tmp->size () < newsize) + { + delete tmp; + errno = ENOMEM; + return -1; + } + + this->good_bit_ = true; + +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + // The new block must start with the same alignment as the + // previous block finished. + ptrdiff_t const tmpalign = + reinterpret_cast (tmp->rd_ptr ()) % ACE_CDR::MAX_ALIGNMENT; + ptrdiff_t const curalign = + static_cast (this->current_alignment_) % ACE_CDR::MAX_ALIGNMENT; + ptrdiff_t offset = curalign - tmpalign; + if (offset < 0) + offset += ACE_CDR::MAX_ALIGNMENT; + tmp->rd_ptr (static_cast (offset)); + tmp->wr_ptr (tmp->rd_ptr ()); +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + + // grow the chain and set the current block. + tmp->cont (this->current_->cont ()); + this->current_->cont (tmp); + } + this->current_ = this->current_->cont (); + this->current_is_writable_ = true; + + return this->adjust (size, align, buf); +} + +ACE_CDR::Boolean +ACE_OutputCDR::write_wchar (ACE_CDR::WChar x) +{ + if (this->wchar_translator_ != 0) + return (this->good_bit_ = this->wchar_translator_->write_wchar (*this, x)); + if (ACE_OutputCDR::wchar_maxbytes_ == 0) + { + errno = EACCES; + return (this->good_bit_ = false); + } + if (static_cast (major_version_) == 1 + && static_cast (minor_version_) == 2) + { + ACE_CDR::Octet len = + static_cast (ACE_OutputCDR::wchar_maxbytes_); + if (this->write_1 (&len)) + { + if (ACE_OutputCDR::wchar_maxbytes_ == sizeof(ACE_CDR::WChar)) + return + this->write_octet_array ( + reinterpret_cast (&x), + static_cast (len)); + else + if (ACE_OutputCDR::wchar_maxbytes_ == 2) + { + ACE_CDR::Short sx = static_cast (x); + return + this->write_octet_array ( + reinterpret_cast (&sx), + static_cast (len)); + } + else + { + ACE_CDR::Octet ox = static_cast (x); + return + this->write_octet_array ( + reinterpret_cast (&ox), + static_cast (len)); + } + } + } + else if (static_cast (minor_version_) == 0) + { // wchar is not allowed with GIOP 1.0. + errno = EINVAL; + return (this->good_bit_ = false); + } + if (ACE_OutputCDR::wchar_maxbytes_ == sizeof (ACE_CDR::WChar)) + { + void const * const temp = &x; + return + this->write_4 (reinterpret_cast (temp)); + } + else if (ACE_OutputCDR::wchar_maxbytes_ == 2) + { + ACE_CDR::Short sx = static_cast (x); + return this->write_2 (reinterpret_cast (&sx)); + } + ACE_CDR::Octet ox = static_cast (x); + return this->write_1 (reinterpret_cast (&ox)); +} + +ACE_CDR::Boolean +ACE_OutputCDR::write_string (ACE_CDR::ULong len, + const ACE_CDR::Char *x) +{ + // @@ This is a slight violation of "Optimize for the common case", + // i.e. normally the translator will be 0, but OTOH the code is + // smaller and should be better for the cache ;-) ;-) + if (this->char_translator_ != 0) + return this->char_translator_->write_string (*this, len, x); + + if (len != 0) + { + if (this->write_ulong (len + 1)) + return this->write_char_array (x, len + 1); + } + else + { + // Be nice to programmers: treat nulls as empty strings not + // errors. (OMG-IDL supports languages that don't use the C/C++ + // notion of null v. empty strings; nulls aren't part of the OMG-IDL + // string model.) + if (this->write_ulong (1)) + return this->write_char (0); + } + + return (this->good_bit_ = false); +} + +ACE_CDR::Boolean +ACE_OutputCDR::write_string (const ACE_CString &x) +{ + // @@ Leave this method in here, not the `.i' file so that we don't + // have to unnecessarily pull in the `ace/SString.h' header. + return this->write_string (static_cast (x.length ()), + x.c_str()); +} + +ACE_CDR::Boolean +ACE_OutputCDR::write_wstring (ACE_CDR::ULong len, + const ACE_CDR::WChar *x) +{ + // @@ This is a slight violation of "Optimize for the common case", + // i.e. normally the translator will be 0, but OTOH the code is + // smaller and should be better for the cache ;-) ;-) + // What do we do for GIOP 1.2??? + if (this->wchar_translator_ != 0) + return this->wchar_translator_->write_wstring (*this, len, x); + if (ACE_OutputCDR::wchar_maxbytes_ == 0) + { + errno = EACCES; + return (this->good_bit_ = false); + } + + if (static_cast (this->major_version_) == 1 + && static_cast (this->minor_version_) == 2) + { + if (x != 0) + { + //In GIOP 1.2 the length field contains the number of bytes + //the wstring occupies rather than number of wchars + //Taking sizeof might not be a good way! This is a temporary fix. + if (this->write_ulong (ACE_OutputCDR::wchar_maxbytes_ * len)) + return this->write_wchar_array (x, len); + } + else + //In GIOP 1.2 zero length wstrings are legal + return this->write_ulong (0); + } + + else + if (x != 0) + { + if (this->write_ulong (len + 1)) + return this->write_wchar_array (x, len + 1); + } + else if (this->write_ulong (1)) + return this->write_wchar (0); + return (this->good_bit_ = false); +} + +ACE_CDR::Boolean +ACE_OutputCDR::write_octet_array_mb (const ACE_Message_Block* mb) +{ + // If the buffer is small and it fits in the current message + // block it is be cheaper just to copy the buffer. + for (const ACE_Message_Block* i = mb; + i != 0; + i = i->cont ()) + { + size_t const length = i->length (); + + // If the mb does not own its data we are forced to make a copy. + if (ACE_BIT_ENABLED (i->flags (), + ACE_Message_Block::DONT_DELETE)) + { + if (! this->write_array (i->rd_ptr (), + ACE_CDR::OCTET_SIZE, + ACE_CDR::OCTET_ALIGN, + static_cast (length))) + return (this->good_bit_ = false); + continue; + } + + if (length < this->memcpy_tradeoff_ + && this->current_->wr_ptr () + length < this->current_->end ()) + { + if (! this->write_array (i->rd_ptr (), + ACE_CDR::OCTET_SIZE, + ACE_CDR::OCTET_ALIGN, + static_cast (length))) + return (this->good_bit_ = false); + continue; + } + + ACE_Message_Block* cont = 0; + this->good_bit_ = false; + ACE_NEW_RETURN (cont, + ACE_Message_Block (i->data_block ()->duplicate ()), + false); + this->good_bit_ = true; + + if (this->current_->cont () != 0) + ACE_Message_Block::release (this->current_->cont ()); + cont->rd_ptr (i->rd_ptr ()); + cont->wr_ptr (i->wr_ptr ()); + + this->current_->cont (cont); + this->current_ = cont; + this->current_is_writable_ = false; +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + this->current_alignment_ = + (this->current_alignment_ + cont->length ()) % ACE_CDR::MAX_ALIGNMENT; +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + } + + return true; +} + +ACE_CDR::Boolean +ACE_OutputCDR::write_1 (const ACE_CDR::Octet *x) +{ + char *buf = 0; + if (this->adjust (1, buf) == 0) + { + *reinterpret_cast (buf) = *x; + return true; + } + + return false; +} + +ACE_CDR::Boolean +ACE_OutputCDR::write_2 (const ACE_CDR::UShort *x) +{ + char *buf = 0; + if (this->adjust (ACE_CDR::SHORT_SIZE, buf) == 0) + { +#if !defined (ACE_ENABLE_SWAP_ON_WRITE) + *reinterpret_cast (buf) = *x; + return true; +#else + if (!this->do_byte_swap_) + { + *reinterpret_cast (buf) = *x; + return true; + } + else + { + ACE_CDR::swap_2 (reinterpret_cast (x), buf); + return true; + } +#endif /* ACE_ENABLE_SWAP_ON_WRITE */ + } + + return false; +} + +ACE_CDR::Boolean +ACE_OutputCDR::write_4 (const ACE_CDR::ULong *x) +{ + char *buf = 0; + if (this->adjust (ACE_CDR::LONG_SIZE, buf) == 0) + { +#if !defined (ACE_ENABLE_SWAP_ON_WRITE) + *reinterpret_cast (buf) = *x; + return true; +#else + if (!this->do_byte_swap_) + { + *reinterpret_cast (buf) = *x; + return true; + } + else + { + ACE_CDR::swap_4 (reinterpret_cast (x), buf); + return true; + } +#endif /* ACE_ENABLE_SWAP_ON_WRITE */ + } + + return false; +} + +ACE_CDR::Boolean +ACE_OutputCDR::write_8 (const ACE_CDR::ULongLong *x) +{ + char *buf = 0; + + if (this->adjust (ACE_CDR::LONGLONG_SIZE, buf) == 0) + { +#if defined (__arm__) + // Convert to Intel format (12345678 => 56781234) + const char *orig = reinterpret_cast (x); + char *target = buf; + register ACE_UINT32 x = + *reinterpret_cast (orig); + register ACE_UINT32 y = + *reinterpret_cast (orig + 4); + *reinterpret_cast (target) = y; + *reinterpret_cast (target + 4) = x; + return true; +#else +# if !defined (ACE_ENABLE_SWAP_ON_WRITE) + *reinterpret_cast (buf) = *x; + return true; +# else + if (!this->do_byte_swap_) + { + *reinterpret_cast (buf) = *x; + return true; + } + else + { + ACE_CDR::swap_8 (reinterpret_cast (x), buf); + return true; + } +# endif /* ACE_ENABLE_SWAP_ON_WRITE */ +#endif /* !__arm__ */ + } + + return false; +} + +ACE_CDR::Boolean +ACE_OutputCDR::write_16 (const ACE_CDR::LongDouble *x) +{ + char* buf = 0; + if (this->adjust (ACE_CDR::LONGDOUBLE_SIZE, + ACE_CDR::LONGDOUBLE_ALIGN, + buf) == 0) + { +#if !defined (ACE_ENABLE_SWAP_ON_WRITE) + *reinterpret_cast (buf) = *x; + return 1; +#else + if (!this->do_byte_swap_) + { + *reinterpret_cast (buf) = *x; + return true; + } + else + { + ACE_CDR::swap_16 (reinterpret_cast (x), buf); + return true; + } +#endif /* ACE_ENABLE_SWAP_ON_WRITE */ + } + + return false; +} + +ACE_CDR::Boolean +ACE_OutputCDR::write_wchar_array_i (const ACE_CDR::WChar *x, + ACE_CDR::ULong length) +{ + if (length == 0) + return true; + char* buf = 0; + size_t const align = (ACE_OutputCDR::wchar_maxbytes_ == 2) ? + ACE_CDR::SHORT_ALIGN : + ACE_CDR::OCTET_ALIGN; + + if (this->adjust (ACE_OutputCDR::wchar_maxbytes_ * length, align, buf) == 0) + { + if (ACE_OutputCDR::wchar_maxbytes_ == 2) + { + ACE_CDR::UShort *sb = reinterpret_cast (buf); + for (size_t i = 0; i < length; ++i) +#if !defined (ACE_ENABLE_SWAP_ON_WRITE) + sb[i] = static_cast (x[i]); +#else + if (!this->do_byte_swap_) + sb[i] = static_cast (x[i]); + else + { + ACE_CDR::UShort sx = static_cast (x[i]); + ACE_CDR::swap_2 (reinterpret_cast (&sx), &buf[i * 2]); + } +#endif /* ACE_ENABLE_SWAP_ON_WRITE */ + } + else + { + for (size_t i = 0; i < length; ++i) + buf[i] = static_cast (x[i]); + } + return this->good_bit_; + } + return false; +} + + +ACE_CDR::Boolean +ACE_OutputCDR::write_array (const void *x, + size_t size, + size_t align, + ACE_CDR::ULong length) +{ + if (length == 0) + return true; + char *buf = 0; + if (this->adjust (size * length, align, buf) == 0) + { +#if !defined (ACE_ENABLE_SWAP_ON_WRITE) + ACE_OS::memcpy (buf, x, size*length); + return true; +#else + if (!this->do_byte_swap_ || size == 1) + { + ACE_OS::memcpy (buf, x, size*length); + return true; + } + else + { + const char *source = reinterpret_cast (x); + switch (size) + { + case 2: + ACE_CDR::swap_2_array (source, buf, length); + return true; + case 4: + ACE_CDR::swap_4_array (source, buf, length); + return true; + case 8: + ACE_CDR::swap_8_array (source, buf, length); + return true; + case 16: + ACE_CDR::swap_16_array (source, buf, length); + return true; + default: + // TODO: print something? + this->good_bit_ = false; + return false; + } + } +#endif /* ACE_ENABLE_SWAP_ON_WRITE */ + } + this->good_bit_ = false; + return false; +} + + +ACE_CDR::Boolean +ACE_OutputCDR::write_boolean_array (const ACE_CDR::Boolean* x, + ACE_CDR::ULong length) +{ + // It is hard to optimize this, the spec requires that on the wire + // booleans be represented as a byte with value 0 or 1, but in + // memory it is possible (though very unlikely) that a boolean has + // a non-zero value (different from 1). + // We resort to a simple loop. + ACE_CDR::Boolean const * const end = x + length; + + for (ACE_CDR::Boolean const * i = x; + i != end && this->good_bit (); + ++i) + (void) this->write_boolean (*i); + + return this->good_bit (); +} + + +char * +ACE_OutputCDR::write_long_placeholder (void) +{ + this->align_write_ptr (ACE_CDR::LONG_SIZE); + char *pos = this->current_->wr_ptr (); + this->write_long (0); + return pos; +} + + +char * +ACE_OutputCDR::write_short_placeholder (void) +{ + this->align_write_ptr (ACE_CDR::SHORT_SIZE); + char *pos = this->current_->wr_ptr(); + this->write_short (0); + return pos; +} + + +ACE_CDR::Boolean +ACE_OutputCDR::replace (ACE_CDR::Long x, char* loc) +{ + if (this->find (loc) == 0) + return false; + +#if !defined (ACE_ENABLE_SWAP_ON_WRITE) + *reinterpret_cast (loc) = x; +#else + if (!this->do_byte_swap_) + { + *reinterpret_cast (loc) = x; + } + else + { + ACE_CDR::swap_4 (reinterpret_cast (&x), loc); + } +#endif /* ACE_ENABLE_SWAP_ON_WRITE */ + + return true; +} + + +ACE_CDR::Boolean +ACE_OutputCDR::replace (ACE_CDR::Short x, char* loc) +{ + if (this->find (loc) == 0) + return false; + +#if !defined (ACE_ENABLE_SWAP_ON_WRITE) + *reinterpret_cast (loc) = x; +#else + if (!this->do_byte_swap_) + { + *reinterpret_cast (loc) = x; + } + else + { + ACE_CDR::swap_2 (reinterpret_cast (&x), loc); + } +#endif /* ACE_ENABLE_SWAP_ON_WRITE */ + + return true; +} + + +int +ACE_OutputCDR::consolidate (void) +{ + // Optimize by only doing something if we need to + if (this->current_ != &this->start_) + { + // Set the number of bytes in the top-level block, reallocating + // if necessary. The rd_ptr and wr_ptr remain at the original offsets + // into the buffer, even if it is reallocated. + // Return an error if the allocation failed. + size_t const newsize = + ACE_CDR::first_size (this->total_length () + + ACE_CDR::MAX_ALIGNMENT); + if (this->start_.size (newsize) < 0) + { + return -1; + } + + // Consolidate the chain into the first block. NOTE that + // ACE_CDR::consolidate can not be used since we don't want to + // overwrite what is already in the first block. We just append it since + // the read and write pointers weren't affected by the resizing above. + // We also don't have to worry about alignment since the start block is + // already aligned. + // NOTE also we know there is a continuation since we checked for it + // above. There is therefore no reason to check for a 0 continuation + // field here. + ACE_Message_Block *cont = this->start_.cont (); + for (const ACE_Message_Block* i = cont; i != 0; i = i->cont ()) + { + this->start_.copy (i->rd_ptr (), i->length ()); + } + + // Release the old blocks that were consolidated and reset the + // current_ and current_is_writable_ to reflect the single used block. + ACE_Message_Block::release (cont); + this->start_.cont (0); + this->current_ = &this->start_; + this->current_is_writable_ = true; + } + + return 0; +} + + +ACE_Message_Block* +ACE_OutputCDR::find (char* loc) +{ + ACE_Message_Block* mb = 0; + for (mb = &this->start_; mb != 0; mb = mb->cont ()) + { + if (loc <= mb->wr_ptr () && loc >= mb->rd_ptr ()) + { + break; + } + } + + return mb; +} + + +// **************************************************************** + +ACE_InputCDR::ACE_InputCDR (const char *buf, + size_t bufsiz, + int byte_order, + ACE_CDR::Octet major_version, + ACE_CDR::Octet minor_version) + : start_ (buf, bufsiz), + do_byte_swap_ (byte_order != ACE_CDR_BYTE_ORDER), + good_bit_ (true), + major_version_ (major_version), + minor_version_ (minor_version), + char_translator_ (0), + wchar_translator_ (0) +{ + this->start_.wr_ptr (bufsiz); +} + +ACE_InputCDR::ACE_InputCDR (size_t bufsiz, + int byte_order, + ACE_CDR::Octet major_version, + ACE_CDR::Octet minor_version) + : start_ (bufsiz), + do_byte_swap_ (byte_order != ACE_CDR_BYTE_ORDER), + good_bit_ (true), + major_version_ (major_version), + minor_version_ (minor_version), + char_translator_ (0), + wchar_translator_ (0) +{ +} + +ACE_InputCDR::ACE_InputCDR (const ACE_Message_Block *data, + int byte_order, + ACE_CDR::Octet major_version, + ACE_CDR::Octet minor_version, + ACE_Lock* lock) +: start_ (0, ACE_Message_Block::MB_DATA, 0, 0, 0, lock), + good_bit_ (true), + major_version_ (major_version), + minor_version_ (minor_version), + char_translator_ (0), + wchar_translator_ (0) + +{ + this->reset (data, byte_order); +} + +ACE_InputCDR::ACE_InputCDR (ACE_Data_Block *data, + ACE_Message_Block::Message_Flags flag, + int byte_order, + ACE_CDR::Octet major_version, + ACE_CDR::Octet minor_version) + : start_ (data, flag), + do_byte_swap_ (byte_order != ACE_CDR_BYTE_ORDER), + good_bit_ (true), + major_version_ (major_version), + minor_version_ (minor_version), + char_translator_ (0), + wchar_translator_ (0) + +{ +} + +ACE_InputCDR::ACE_InputCDR (ACE_Data_Block *data, + ACE_Message_Block::Message_Flags flag, + size_t rd_pos, + size_t wr_pos, + int byte_order, + ACE_CDR::Octet major_version, + ACE_CDR::Octet minor_version) + : start_ (data, flag), + do_byte_swap_ (byte_order != ACE_CDR_BYTE_ORDER), + good_bit_ (true), + major_version_ (major_version), + minor_version_ (minor_version), + char_translator_ (0), + wchar_translator_ (0) + +{ + // Set the read pointer + this->start_.rd_ptr (rd_pos); + + // Set the write pointer after doing a sanity check. + char* wrpos = this->start_.base () + wr_pos; + + if (this->start_.end () >= wrpos) + { + this->start_.wr_ptr (wr_pos); + } +} + + +ACE_InputCDR::ACE_InputCDR (const ACE_InputCDR& rhs, + size_t size, + ACE_CDR::Long offset) + : start_ (rhs.start_, + ACE_CDR::MAX_ALIGNMENT), + do_byte_swap_ (rhs.do_byte_swap_), + good_bit_ (true), + major_version_ (rhs.major_version_), + minor_version_ (rhs.minor_version_), + char_translator_ (rhs.char_translator_), + wchar_translator_ (rhs.wchar_translator_) + +{ +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + // Align the base pointer assuming that the incoming stream is also + // aligned the way we are aligned + char *incoming_start = ACE_ptr_align_binary (rhs.start_.base (), + ACE_CDR::MAX_ALIGNMENT); +#else + char *incoming_start = rhs.start_.base (); +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + + const size_t newpos = + (rhs.start_.rd_ptr() - incoming_start) + offset; + + if (newpos <= this->start_.space () + && newpos + size <= this->start_.space ()) + { + this->start_.rd_ptr (newpos); + this->start_.wr_ptr (newpos + size); + } + else + this->good_bit_ = false; +} + +ACE_InputCDR::ACE_InputCDR (const ACE_InputCDR& rhs, + size_t size) + : start_ (rhs.start_, + ACE_CDR::MAX_ALIGNMENT), + do_byte_swap_ (rhs.do_byte_swap_), + good_bit_ (true), + major_version_ (rhs.major_version_), + minor_version_ (rhs.minor_version_), + char_translator_ (rhs.char_translator_), + wchar_translator_ (rhs.wchar_translator_) + +{ +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + // Align the base pointer assuming that the incoming stream is also + // aligned the way we are aligned + char *incoming_start = ACE_ptr_align_binary (rhs.start_.base (), + ACE_CDR::MAX_ALIGNMENT); +#else + char *incoming_start = rhs.start_.base (); +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + + const size_t newpos = + rhs.start_.rd_ptr() - incoming_start; + + if (newpos <= this->start_.space () + && newpos + size <= this->start_.space ()) + { + // Notice that ACE_Message_Block::duplicate may leave the + // wr_ptr() with a higher value than what we actually want. + this->start_.rd_ptr (newpos); + this->start_.wr_ptr (newpos + size); + + ACE_CDR::Octet byte_order = 0; + (void) this->read_octet (byte_order); + this->do_byte_swap_ = (byte_order != ACE_CDR_BYTE_ORDER); + } + else + this->good_bit_ = false; +} + +ACE_InputCDR::ACE_InputCDR (const ACE_InputCDR& rhs) + : start_ (rhs.start_, + ACE_CDR::MAX_ALIGNMENT), + do_byte_swap_ (rhs.do_byte_swap_), + good_bit_ (true), + major_version_ (rhs.major_version_), + minor_version_ (rhs.minor_version_), + char_translator_ (rhs.char_translator_), + wchar_translator_ (rhs.wchar_translator_) +{ +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + char *buf = ACE_ptr_align_binary (rhs.start_.base (), + ACE_CDR::MAX_ALIGNMENT); +#else + char *buf = rhs.start_.base (); +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + + size_t rd_offset = rhs.start_.rd_ptr () - buf; + size_t wr_offset = rhs.start_.wr_ptr () - buf; + this->start_.rd_ptr (rd_offset); + this->start_.wr_ptr (wr_offset); +} + +ACE_InputCDR::ACE_InputCDR (ACE_InputCDR::Transfer_Contents x) + : start_ (x.rhs_.start_.data_block ()), + do_byte_swap_ (x.rhs_.do_byte_swap_), + good_bit_ (true), + major_version_ (x.rhs_.major_version_), + minor_version_ (x.rhs_.minor_version_), + char_translator_ (x.rhs_.char_translator_), + wchar_translator_ (x.rhs_.wchar_translator_) +{ + + this->start_.rd_ptr (x.rhs_.start_.rd_ptr ()); + this->start_.wr_ptr (x.rhs_.start_.wr_ptr ()); + + ACE_Data_Block* db = this->start_.data_block ()->clone_nocopy (); + (void) x.rhs_.start_.replace_data_block (db); +} + +ACE_InputCDR& +ACE_InputCDR::operator= (const ACE_InputCDR& rhs) +{ + if (this != &rhs) + { + this->start_.data_block (rhs.start_.data_block ()->duplicate ()); + this->start_.rd_ptr (rhs.start_.rd_ptr ()); + this->start_.wr_ptr (rhs.start_.wr_ptr ()); + this->do_byte_swap_ = rhs.do_byte_swap_; + this->good_bit_ = true; + this->char_translator_ = rhs.char_translator_; + this->major_version_ = rhs.major_version_; + this->minor_version_ = rhs.minor_version_; + } + return *this; +} + +ACE_InputCDR::ACE_InputCDR (const ACE_OutputCDR& rhs, + ACE_Allocator* buffer_allocator, + ACE_Allocator* data_block_allocator, + ACE_Allocator* message_block_allocator) + : start_ (rhs.total_length () + ACE_CDR::MAX_ALIGNMENT, + ACE_Message_Block::MB_DATA, + 0, + 0, + buffer_allocator, + 0, + 0, + ACE_Time_Value::zero, + ACE_Time_Value::max_time, + data_block_allocator, + message_block_allocator), + do_byte_swap_ (rhs.do_byte_swap_), + good_bit_ (true), + major_version_ (rhs.major_version_), + minor_version_ (rhs.minor_version_), + char_translator_ (rhs.char_translator_), + wchar_translator_ (rhs.wchar_translator_) +{ + ACE_CDR::mb_align (&this->start_); + for (const ACE_Message_Block *i = rhs.begin (); + i != rhs.end (); + i = i->cont ()) + this->start_.copy (i->rd_ptr (), i->length ()); +} + +ACE_CDR::Boolean +ACE_InputCDR::skip_wchar (void) +{ + if (static_cast (major_version_) == 1 + && static_cast (minor_version_) == 2) + { + ACE_CDR::Octet len; + if (this->read_1 (&len)) + return this->skip_bytes (static_cast (len)); + } + else + { + ACE_CDR::WChar x; + void * const temp = &x; + if (ACE_OutputCDR::wchar_maxbytes_ == 2) + return this->read_2 (reinterpret_cast (temp)); + else + return this->read_4 (reinterpret_cast (temp)); + } + + return (this->good_bit_ = false); +} + +ACE_CDR::Boolean +ACE_InputCDR::read_wchar (ACE_CDR::WChar& x) +{ + if (this->wchar_translator_ != 0) + { + this->good_bit_ = this->wchar_translator_->read_wchar (*this,x); + return this->good_bit_; + } + if (ACE_OutputCDR::wchar_maxbytes_ == 0) + { + errno = EACCES; + return (this->good_bit_ = false); + } + + if (ACE_OutputCDR::wchar_maxbytes_ == sizeof (ACE_CDR::WChar)) + { + if (static_cast (major_version_) == 1 + && static_cast (minor_version_) == 2) + { + ACE_CDR::Octet len; + + if (this->read_1 (&len)) + return this->read_array + (reinterpret_cast (&x), + static_cast (len), + ACE_CDR::OCTET_ALIGN, + 1); + + else + return (this->good_bit_ = false); + } + + void * const temp = &x; + if (sizeof (ACE_CDR::WChar) == 2) + return this->read_2 (reinterpret_cast (temp)); + else + return this->read_4 (reinterpret_cast (temp)); + } + + if (static_cast (major_version_) == 1 + && static_cast (minor_version_) == 2) + { + ACE_CDR::Octet len; + + if (this->read_1 (&len)) + { + if (len == 2) + { + ACE_CDR::Short sx; + if (this->read_array + (reinterpret_cast (&sx), + static_cast (len), + ACE_CDR::OCTET_ALIGN, + 1)) + { + x = static_cast (sx); + return true; + } + } + else + { + ACE_CDR::Octet ox; + if (this->read_array + (reinterpret_cast (&ox), + static_cast (len), + ACE_CDR::OCTET_ALIGN, + 1)) + { + x = static_cast (ox); + return true; + } + } + } + } + else + { + if (ACE_OutputCDR::wchar_maxbytes_ == 2) + { + ACE_CDR::UShort sx; + if (this->read_2 (reinterpret_cast (&sx))) + { + x = static_cast (sx); + return true; + } + } + else + { + ACE_CDR::Octet ox; + if (this->read_1 (&ox)) + { + x = static_cast (ox); + return true; + } + + } + } + return (this->good_bit_ = false); +} + +ACE_CDR::Boolean +ACE_InputCDR::read_string (ACE_CDR::Char *&x) +{ + // @@ This is a slight violation of "Optimize for the common case", + // i.e. normally the translator will be 0, but OTOH the code is + // smaller and should be better for the cache ;-) ;-) + if (this->char_translator_ != 0) + { + this->good_bit_ = this->char_translator_->read_string (*this, x); + return this->good_bit_; + } + + ACE_CDR::ULong len = 0; + + if (!this->read_ulong (len)) + return false; + + // A check for the length being too great is done later in the + // call to read_char_array but we want to have it done before + // the memory is allocated. + if (len > 0 && len <= this->length()) + { + ACE_NEW_RETURN (x, + ACE_CDR::Char[len], + 0); + + ACE_Auto_Basic_Array_Ptr safe_data (x); + + if (this->read_char_array (x, len)) + { + (void) safe_data.release (); + return true; + } + } + else if (len == 0) + { + // Convert any null strings to empty strings since empty + // strings can cause crashes. (See bug 58.) + ACE_NEW_RETURN (x, + ACE_CDR::Char[1], + 0); + ACE_OS::strcpy (const_cast (x), ""); + return true; + } + + x = 0; + return (this->good_bit_ = false); +} + +ACE_CDR::Boolean +ACE_InputCDR::read_string (ACE_CString &x) +{ + ACE_CDR::Char * data = 0; + if (this->read_string (data)) + { + ACE_Auto_Basic_Array_Ptr safe_data (data); + x = data; + return true; + } + + x = ""; + return (this->good_bit_ = false); +} + +ACE_CDR::Boolean +ACE_InputCDR::read_wstring (ACE_CDR::WChar*& x) +{ + // @@ This is a slight violation of "Optimize for the common case", + // i.e. normally the translator will be 0, but OTOH the code is + // smaller and should be better for the cache ;-) ;-) + if (this->wchar_translator_ != 0) + { + this->good_bit_ = this->wchar_translator_->read_wstring (*this, x); + return this->good_bit_; + } + if (ACE_OutputCDR::wchar_maxbytes_ == 0) + { + errno = EACCES; + return (this->good_bit_ = false); + } + + ACE_CDR::ULong len = 0; + if (!this->read_ulong (len)) + return false; + + // A check for the length being too great is done later in the + // call to read_char_array but we want to have it done before + // the memory is allocated. + if (len > 0 && len <= this->length ()) + { + ACE_Auto_Basic_Array_Ptr safe_data; + + if (static_cast (this->major_version_) == 1 + && static_cast (this->minor_version_) == 2) + { + len /= ACE_OutputCDR::wchar_maxbytes_; + + //allocating one extra for the null character needed by applications + ACE_NEW_RETURN (x, + ACE_CDR::WChar [len + 1], + false); + + ACE_auto_ptr_reset (safe_data, x); + + if (this->read_wchar_array (x, len)) + { + + //Null character used by applications to find the end of + //the wstring + //Is this okay with the GIOP 1.2 spec?? + x[len] = '\x00'; + + (void) safe_data.release (); + + return true; + } + } + else + { + ACE_NEW_RETURN (x, + ACE_CDR::WChar [len], + false); + + ACE_auto_ptr_reset (safe_data, x); + + if (this->read_wchar_array (x, len)) + { + (void) safe_data.release (); + + return true; + } + } + } + else if (len == 0) + { + // Convert any null strings to empty strings since empty + // strings can cause crashes. (See bug 58.) + ACE_NEW_RETURN (x, + ACE_CDR::WChar[1], + false); + x[0] = '\x00'; + return true; + } + + this->good_bit_ = false; + x = 0; + return false; +} + +ACE_CDR::Boolean +ACE_InputCDR::read_array (void* x, + size_t size, + size_t align, + ACE_CDR::ULong length) +{ + if (length == 0) + return true; + char* buf = 0; + + if (this->adjust (size * length, align, buf) == 0) + { +#if defined (ACE_DISABLE_SWAP_ON_READ) + ACE_OS::memcpy (x, buf, size*length); +#else + if (!this->do_byte_swap_ || size == 1) + ACE_OS::memcpy (x, buf, size*length); + else + { + char *target = reinterpret_cast (x); + switch (size) + { + case 2: + ACE_CDR::swap_2_array (buf, target, length); + break; + case 4: + ACE_CDR::swap_4_array (buf, target, length); + break; + case 8: + ACE_CDR::swap_8_array (buf, target, length); + break; + case 16: + ACE_CDR::swap_16_array (buf, target, length); + break; + default: + // TODO: print something? + this->good_bit_ = false; + return false; + } + } +#endif /* ACE_DISABLE_SWAP_ON_READ */ + return this->good_bit_; + } + return false; +} + +ACE_CDR::Boolean +ACE_InputCDR::read_wchar_array_i (ACE_CDR::WChar* x, + ACE_CDR::ULong length) +{ + if (length == 0) + return true; + char* buf = 0; + size_t const align = (ACE_OutputCDR::wchar_maxbytes_ == 2) ? + ACE_CDR::SHORT_ALIGN : + ACE_CDR::OCTET_ALIGN; + + if (this->adjust (ACE_OutputCDR::wchar_maxbytes_ * length, align, buf) == 0) + { + if (ACE_OutputCDR::wchar_maxbytes_ == 2) + { + ACE_CDR::UShort *sb = reinterpret_cast (buf); + for (size_t i = 0; i < length; ++i) +#if defined (ACE_DISABLE_SWAP_ON_READ) + x[i] = static_cast (sb[i]); +#else + if (!this->do_byte_swap_) + x[i] = static_cast (sb[i]); + else + { + ACE_CDR::UShort sx; + ACE_CDR::swap_2 (&buf[i * 2], reinterpret_cast (&sx)); + x[i] = static_cast (sx); + } +#endif /* ACE_DISABLE_SWAP_ON_READ */ + } + else + { + for (size_t i = 0; i < length; ++i) + x[i] = static_cast (buf[i]); + } + return this->good_bit_; + } + return false; +} + + +ACE_CDR::Boolean +ACE_InputCDR::read_boolean_array (ACE_CDR::Boolean *x, + ACE_CDR::ULong length) +{ + // Make sure the length of the array isn't greater than the length of + // the stream. + if (length > this->length ()) + { + this->good_bit_ = false; + return false; + } + + // It is hard to optimize this, the spec requires that on the wire + // booleans be represented as a byte with value 0 or 1, but in + // memory it is possible (though very unlikely) that a boolean has + // a non-zero value (different from 1). + // We resort to a simple loop. + for (ACE_CDR::ULong i = 0; i != length && this->good_bit_; ++i) + (void) this->read_boolean (x[i]); + + return this->good_bit_; +} + +ACE_CDR::Boolean +ACE_InputCDR::read_1 (ACE_CDR::Octet *x) +{ + if (this->rd_ptr () < this->wr_ptr ()) + { + *x = *reinterpret_cast (this->rd_ptr ()); + this->start_.rd_ptr (1); + return true; + } + + this->good_bit_ = false; + return false; +} + +ACE_CDR::Boolean +ACE_InputCDR::read_2 (ACE_CDR::UShort *x) +{ + char *buf = 0; + if (this->adjust (ACE_CDR::SHORT_SIZE, buf) == 0) + { +#if !defined (ACE_DISABLE_SWAP_ON_READ) + if (!this->do_byte_swap_) + *x = *reinterpret_cast (buf); + else + ACE_CDR::swap_2 (buf, reinterpret_cast (x)); +#else + *x = *reinterpret_cast (buf); +#endif /* ACE_DISABLE_SWAP_ON_READ */ + return true; + } + this->good_bit_ = false; + return false; +} + +ACE_CDR::Boolean +ACE_InputCDR::read_4 (ACE_CDR::ULong *x) +{ + char *buf = 0; + if (this->adjust (ACE_CDR::LONG_SIZE, buf) == 0) + { +#if !defined (ACE_DISABLE_SWAP_ON_READ) + if (!this->do_byte_swap_) + *x = *reinterpret_cast (buf); + else + ACE_CDR::swap_4 (buf, reinterpret_cast (x)); +#else + *x = *reinterpret_cast (buf); +#endif /* ACE_DISABLE_SWAP_ON_READ */ + return true; + } + this->good_bit_ = false; + return false; +} + +ACE_CDR::Boolean +ACE_InputCDR::read_8 (ACE_CDR::ULongLong *x) +{ + char *buf = 0; + + if (this->adjust (ACE_CDR::LONGLONG_SIZE, buf) == 0) + { +#if !defined (ACE_DISABLE_SWAP_ON_READ) +# if defined (__arm__) + if (!this->do_byte_swap_) + { + // Convert from Intel format (12345678 => 56781234) + const char *orig = buf; + char *target = reinterpret_cast (x); + register ACE_UINT32 x = + *reinterpret_cast (orig); + register ACE_UINT32 y = + *reinterpret_cast (orig + 4); + *reinterpret_cast (target) = y; + *reinterpret_cast (target + 4) = x; + } + else + { + // Convert from Sparc format (12345678 => 43218765) + const char *orig = buf; + char *target = reinterpret_cast (x); + register ACE_UINT32 x = + *reinterpret_cast (orig); + register ACE_UINT32 y = + *reinterpret_cast (orig + 4); + x = (x << 24) | ((x & 0xff00) << 8) | ((x & 0xff0000) >> 8) | (x >> 24); + y = (y << 24) | ((y & 0xff00) << 8) | ((y & 0xff0000) >> 8) | (y >> 24); + *reinterpret_cast (target) = x; + *reinterpret_cast (target + 4) = y; + } +# else + if (!this->do_byte_swap_) + *x = *reinterpret_cast (buf); + else + ACE_CDR::swap_8 (buf, reinterpret_cast (x)); +# endif /* !__arm__ */ +#else + *x = *reinterpret_cast (buf); +#endif /* ACE_DISABLE_SWAP_ON_READ */ + return true; + } + + this->good_bit_ = false; + return false; +} + +ACE_CDR::Boolean +ACE_InputCDR::read_16 (ACE_CDR::LongDouble *x) +{ + char *buf = 0; + if (this->adjust (ACE_CDR::LONGDOUBLE_SIZE, + ACE_CDR::LONGDOUBLE_ALIGN, + buf) == 0) + { +#if !defined (ACE_DISABLE_SWAP_ON_READ) + if (!this->do_byte_swap_) + *x = *reinterpret_cast (buf); + else + ACE_CDR::swap_16 (buf, reinterpret_cast (x)); +#else + *x = *reinterpret_cast (buf); +#endif /* ACE_DISABLE_SWAP_ON_READ */ + return true; + } + + this->good_bit_ = false; + return false; +} + +ACE_CDR::Boolean +ACE_InputCDR::skip_string (void) +{ + ACE_CDR::ULong len = 0; + if (this->read_ulong (len)) + { + if (this->rd_ptr () + len <= this->wr_ptr ()) + { + this->rd_ptr (len); + return true; + } + this->good_bit_ = false; + } + return false; +} + +ACE_CDR::Boolean +ACE_InputCDR::skip_wstring (void) +{ + ACE_CDR::Boolean continue_skipping = true; + ACE_CDR::ULong len = 0; + + continue_skipping = read_ulong (len); + + if (continue_skipping && len != 0) + { + if (static_cast (this->major_version_) == 1 + && static_cast (this->minor_version_) == 2) + continue_skipping = this->skip_bytes ((size_t)len); + else + while (continue_skipping && len--) + continue_skipping = this->skip_wchar (); + } + return continue_skipping; +} + +ACE_CDR::Boolean +ACE_InputCDR::skip_bytes (size_t len) +{ + if (this->rd_ptr () + len <= this->wr_ptr ()) + { + this->rd_ptr (len); + return true; + } + this->good_bit_ = false; + return false; +} + +int +ACE_InputCDR::grow (size_t newsize) +{ + if (ACE_CDR::grow (&this->start_, newsize) == -1) + return -1; + + ACE_CDR::mb_align (&this->start_); + this->start_.wr_ptr (newsize); + return 0; +} + +void +ACE_InputCDR::reset (const ACE_Message_Block* data, + int byte_order) +{ + this->reset_byte_order (byte_order); + ACE_CDR::consolidate (&this->start_, data); +} + +void +ACE_InputCDR::steal_from (ACE_InputCDR &cdr) +{ + this->do_byte_swap_ = cdr.do_byte_swap_; + this->start_.data_block (cdr.start_.data_block ()->duplicate ()); + + // If the message block had a DONT_DELETE flags, just clear it off.. + this->start_.clr_self_flags (ACE_Message_Block::DONT_DELETE); + this->start_.rd_ptr (cdr.start_.rd_ptr ()); + + this->start_.wr_ptr (cdr.start_.wr_ptr ()); + this->major_version_ = cdr.major_version_; + this->minor_version_ = cdr.minor_version_; + cdr.reset_contents (); +} + +void +ACE_InputCDR::exchange_data_blocks (ACE_InputCDR &cdr) +{ + // Exchange byte orders + int const byte_order = cdr.do_byte_swap_; + cdr.do_byte_swap_ = this->do_byte_swap_; + this->do_byte_swap_ = byte_order; + + // Get the destination read and write pointers + size_t const drd_pos = + cdr.start_.rd_ptr () - cdr.start_.base (); + size_t const dwr_pos = + cdr.start_.wr_ptr () - cdr.start_.base (); + + // Get the source read & write pointers + size_t const srd_pos = + this->start_.rd_ptr () - this->start_.base (); + size_t const swr_pos = + this->start_.wr_ptr () - this->start_.base (); + + // Exchange data_blocks. Dont release any of the data blocks. + ACE_Data_Block *dnb = + this->start_.replace_data_block (cdr.start_.data_block ()); + cdr.start_.replace_data_block (dnb); + + // Exchange the flags information.. + ACE_Message_Block::Message_Flags df = cdr.start_.self_flags (); + ACE_Message_Block::Message_Flags sf = this->start_.self_flags (); + + cdr.start_.clr_self_flags (df); + this->start_.clr_self_flags (sf); + + cdr.start_.set_self_flags (sf); + this->start_.set_self_flags (df); + + // Reset the pointers to zero before it is set again. + cdr.start_.reset (); + this->start_.reset (); + + // Set the read and write pointers. + if (cdr.start_.size () >= srd_pos) + cdr.start_.rd_ptr (srd_pos); + + if (cdr.start_.size () >= swr_pos) + cdr.start_.wr_ptr (swr_pos); + + if (this->start_.size () >= drd_pos) + this->start_.rd_ptr (drd_pos); + + if (this->start_.size () >= dwr_pos) + this->start_.wr_ptr (dwr_pos); + + ACE_CDR::Octet const dmajor = cdr.major_version_; + ACE_CDR::Octet const dminor = cdr.minor_version_; + + // Exchange the GIOP version info + cdr.major_version_ = this->major_version_; + cdr.minor_version_ = this->minor_version_; + + this->major_version_ = dmajor; + this->minor_version_ = dminor; +} + +ACE_Data_Block * +ACE_InputCDR::clone_from (ACE_InputCDR &cdr) +{ + this->do_byte_swap_ = cdr.do_byte_swap_; + + // Get the read & write pointer positions in the incoming CDR + // streams + char *rd_ptr = cdr.start_.rd_ptr (); + char *wr_ptr = cdr.start_.wr_ptr (); + + // Now reset the incoming CDR stream + cdr.start_.reset (); + + // As we have reset the stream, try to align the underlying message + // block in the incoming stream + ACE_CDR::mb_align (&cdr.start_); + + // Get the read & write pointer positions again + char *nrd_ptr = cdr.start_.rd_ptr (); + char *nwr_ptr = cdr.start_.wr_ptr (); + + // Actual length of the stream is.. + // @todo: This will look idiotic, but we dont seem to have much of a + // choice. How do we calculate the length of the incoming stream? + // Calling the method before calling reset () would give us the + // wrong length of the stream that needs copying. So we do the + // calulation like this + // (1) We get the and positions of the incoming + // stream. + // (2) Then we reset the stream and then align it. + // (3) We get the and positions again. (Points #1 + // thru #3 has been done already) + // (4) The difference in the and positions gives + // us the following, the actual bytes traversed by the and + // . + // (5) The bytes traversed by the is the actual length of + // the stream. + + // Actual bytes traversed + size_t rd_bytes = rd_ptr - nrd_ptr; + size_t wr_bytes = wr_ptr - nwr_ptr; + + ACE_CDR::mb_align (&this->start_); + + ACE_Data_Block *db = + this->start_.data_block (); + + // If the size of the data that needs to be copied are higher than + // what is available, then do a reallocation. + if (wr_bytes > (this->start_.size () - ACE_CDR::MAX_ALIGNMENT)) + { + // @@NOTE: We need to probably add another method to the message + // block interface to simplify this + db = + cdr.start_.data_block ()->clone_nocopy (); + + if (db == 0 || db->size ((wr_bytes) + + ACE_CDR::MAX_ALIGNMENT) == -1) + return 0; + + // Replace our data block by using the incoming CDR stream. + db = this->start_.replace_data_block (db); + + // Align the start_ message block. + ACE_CDR::mb_align (&this->start_); + + // Clear the DONT_DELETE flag if it has been set + this->start_.clr_self_flags (ACE_Message_Block::DONT_DELETE); + } + + // Now do the copy + (void) ACE_OS::memcpy (this->start_.wr_ptr (), + cdr.start_.rd_ptr (), + wr_bytes); + + // Set the read pointer position to the same point as that was in + // cdr. + this->start_.rd_ptr (rd_bytes); + this->start_.wr_ptr (wr_bytes); + + // We have changed the read & write pointers for the incoming + // stream. Set them back to the positions that they were before.. + cdr.start_.rd_ptr (rd_bytes); + cdr.start_.wr_ptr (wr_bytes); + + this->major_version_ = cdr.major_version_; + this->minor_version_ = cdr.minor_version_; + + // Copy the char/wchar translators + this->char_translator_ = cdr.char_translator_; + this->wchar_translator_ = cdr.wchar_translator_; + + return db; +} + +ACE_Message_Block* +ACE_InputCDR::steal_contents (void) +{ + ACE_Message_Block* block = this->start_.clone (); + this->start_.data_block (block->data_block ()->clone ()); + + // If at all our message had a DONT_DELETE flag set, just clear it + // off. + this->start_.clr_self_flags (ACE_Message_Block::DONT_DELETE); + + ACE_CDR::mb_align (&this->start_); + + return block; +} + +void +ACE_InputCDR::reset_contents (void) +{ + this->start_.data_block (this->start_.data_block ()->clone_nocopy ()); + + // Reset the flags... + this->start_.clr_self_flags (ACE_Message_Block::DONT_DELETE); +} + +// -------------------------------------------------------------- + +ACE_Char_Codeset_Translator::~ACE_Char_Codeset_Translator (void) +{ +} + +// -------------------------------------------------------------- + +ACE_WChar_Codeset_Translator::~ACE_WChar_Codeset_Translator (void) +{ +} + +// -------------------------------------------------------------- + +ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, const ACE_CString &x) +{ + os.write_string (x); + return os.good_bit (); +} + +ACE_CDR::Boolean +operator>> (ACE_InputCDR &is, ACE_CString &x) +{ + is.read_string (x); + return is.good_bit (); +} + +#if defined (GEN_OSTREAM_OPS) + +std::ostream& +operator<< (std::ostream &os, ACE_OutputCDR::from_boolean x) +{ + return (x.val_ ? os << "true" : os << "false"); +} + +std::ostream& +operator<< (std::ostream &os, ACE_OutputCDR::from_char x) +{ + return os << '\'' << x.val_ << '\''; +} + +std::ostream& +operator<< (std::ostream &os, ACE_OutputCDR::from_wchar x) +{ + os.setf (ios_base::showbase); + os.setf (ios_base::hex, ios_base::basefield); + os << x.val_; + os.unsetf (ios_base::showbase); + os.setf (ios_base::dec, ios_base::basefield); + return os; +} + +std::ostream& +operator<< (std::ostream &os, ACE_OutputCDR::from_octet x) +{ + // Same format (hex) and no risk of overflow. + ACE_CDR::WChar w = static_cast (x.val_); + ACE_OutputCDR::from_wchar tmp (w); + return os << tmp; +} + +#endif /* GEN_OSTREAM_OPS */ + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/CDR_Stream.h b/ACE/ace/CDR_Stream.h new file mode 100644 index 00000000000..58ddea442ed --- /dev/null +++ b/ACE/ace/CDR_Stream.h @@ -0,0 +1,1364 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file CDR_Stream.h + * + * $Id$ + * + * ACE Common Data Representation (CDR) marshaling and demarshaling + * classes. + * + * This implementation was inspired in the CDR class in SunSoft's + * IIOP engine, but has a completely different implementation and a + * different interface too. + * + * The current implementation assumes that the host has 1-byte, + * 2-byte and 4-byte integral types, and that it has single + * precision and double precision IEEE floats. + * Those assumptions are pretty good these days, with Crays beign + * the only known exception. + * + * Optimizations + * ------------- + * ACE_LACKS_CDR_ALIGNMENT + * @author Arvind S. Krishna + * + * CDR stream ignores alignment when marshaling data. Use this option + * only when ACE_DISABLE_SWAP_ON_READ can be enabled. This option requires + * ACE CDR engine to do both marshaling and demarshaling. + * + * + * @author TAO version by Aniruddha Gokhale + * @author Carlos O'Ryan + * @author ACE version by Jeff Parsons + * @author Istvan Buki + * @author Codeset translation by Jim Rogers + */ +//============================================================================= + +#ifndef ACE_CDR_STREAM_H +#define ACE_CDR_STREAM_H + +#include /**/ "ace/pre.h" + +#include "ace/CDR_Base.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/SStringfwd.h" +#include "ace/Message_Block.h" + +#if defined (GEN_OSTREAM_OPS) +#include "ace/streams.h" +#endif /* GEN_OSTREAM_OPS */ + +// Stuff used by the ACE CDR classes. +#if defined ACE_LITTLE_ENDIAN +# define ACE_CDR_BYTE_ORDER 1 +// little endian encapsulation byte order has value = 1 +#else /* ! ACE_LITTLE_ENDIAN */ +# define ACE_CDR_BYTE_ORDER 0 +// big endian encapsulation byte order has value = 0 +#endif /* ! ACE_LITTLE_ENDIAN */ + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_Char_Codeset_Translator; +class ACE_WChar_Codeset_Translator; + +class ACE_InputCDR; + +/** + * @class ACE_OutputCDR + * + * @brief A CDR stream for writing, i.e. for marshalling. + * + * This class is based on the the CORBA spec for Java (98-02-29), + * java class omg.org.CORBA.portable.OutputStream. It diverts in + * a few ways: + * + Operations taking arrays don't have offsets, because in C++ + * it is easier to describe an array starting from x+offset. + * + Operations return an error status, because exceptions are + * not widely available in C++ (yet). + */ +class ACE_Export ACE_OutputCDR +{ +public: + /** + * The Codeset translators need access to some private members to + * efficiently marshal arrays + * For reading from an output CDR stream. + */ + friend class ACE_Char_Codeset_Translator; + friend class ACE_WChar_Codeset_Translator; + friend class ACE_InputCDR; + + /// Default constructor, allocates @a size bytes in the internal + /// buffer, if @a size == 0 it allocates the default size. + ACE_OutputCDR (size_t size = 0, + int byte_order = ACE_CDR_BYTE_ORDER, + ACE_Allocator* buffer_allocator = 0, + ACE_Allocator* data_block_allocator = 0, + ACE_Allocator* message_block_allocator = 0, + size_t memcpy_tradeoff = ACE_DEFAULT_CDR_MEMCPY_TRADEOFF, + ACE_CDR::Octet major_version = ACE_CDR_GIOP_MAJOR_VERSION, + ACE_CDR::Octet minor_version = ACE_CDR_GIOP_MINOR_VERSION); + + /// Build a CDR stream with an initial buffer, it will *not* remove + /// , since it did not allocated it. It's important to be careful + /// with the alignment of . + /** + * Create an output stream from an arbitrary buffer, care must be + * exercised with alignment, because this contructor will align if + * needed. In this case @a data will not point to the start of the + * output stream. @c begin()->rd_ptr() points to the start of the + * output stream. See @c ACE_ptr_align_binary() to properly align a + * pointer and use ACE_CDR::MAX_ALIGNMENT for the correct alignment. + */ + ACE_OutputCDR (char *data, + size_t size, + int byte_order = ACE_CDR_BYTE_ORDER, + ACE_Allocator* buffer_allocator = 0, + ACE_Allocator* data_block_allocator = 0, + ACE_Allocator* message_block_allocator = 0, + size_t memcpy_tradeoff = ACE_DEFAULT_CDR_MEMCPY_TRADEOFF, + ACE_CDR::Octet giop_major_version = ACE_CDR_GIOP_MAJOR_VERSION, + ACE_CDR::Octet giop_minor_version = ACE_CDR_GIOP_MINOR_VERSION); + + /// Build a CDR stream with an initial data block, it will *not* remove + /// , since it did not allocated it. It's important to be + // careful with the alignment of . + /** + * Create an output stream from an arbitrary data block, care must be + * exercised with alignment, because this contructor will align if + * needed. In this case @a data_block will not point to the + * start of the output stream. begin()->rd_ptr() points to the start + * off the output stream. See ACE_ptr_align_binary() to properly align a + * pointer and use ACE_CDR::MAX_ALIGNMENT for the correct alignment. + */ + ACE_OutputCDR (ACE_Data_Block *data_block, + int byte_order = ACE_CDR_BYTE_ORDER, + ACE_Allocator* message_block_allocator = 0, + size_t memcpy_tradeoff = ACE_DEFAULT_CDR_MEMCPY_TRADEOFF, + ACE_CDR::Octet giop_major_version = ACE_CDR_GIOP_MAJOR_VERSION, + ACE_CDR::Octet giop_minor_version = ACE_CDR_GIOP_MINOR_VERSION); + + /// Build a CDR stream with an initial Message_Block chain, it will + /// *not* remove @a data, since it did not allocate it. + ACE_OutputCDR (ACE_Message_Block *data, + int byte_order = ACE_CDR_BYTE_ORDER, + size_t memcpy_tradeoff = ACE_DEFAULT_CDR_MEMCPY_TRADEOFF, + ACE_CDR::Octet giop_major_version = ACE_CDR_GIOP_MAJOR_VERSION, + ACE_CDR::Octet giop_minor_version = ACE_CDR_GIOP_MINOR_VERSION); + + /// destructor + ~ACE_OutputCDR (void); + + /** + * Disambiguate overload when inserting booleans, octets, chars, and + * bounded strings. + */ + //@{ @name Helper classes + + struct ACE_Export from_boolean + { + explicit from_boolean (ACE_CDR::Boolean b); + ACE_CDR::Boolean val_; + }; + + struct ACE_Export from_octet + { + explicit from_octet (ACE_CDR::Octet o); + ACE_CDR::Octet val_; + }; + + struct ACE_Export from_char + { + explicit from_char (ACE_CDR::Char c); + ACE_CDR::Char val_; + }; + + struct ACE_Export from_wchar + { + explicit from_wchar (ACE_CDR::WChar wc); + ACE_CDR::WChar val_; + }; + + struct ACE_Export from_string + { + from_string (ACE_CDR::Char* s, + ACE_CDR::ULong b, + ACE_CDR::Boolean nocopy = 0); + from_string (const ACE_CDR::Char* s, + ACE_CDR::ULong b, + ACE_CDR::Boolean nocopy = 0); + ACE_CDR::Char *val_; + ACE_CDR::ULong bound_; + ACE_CDR::Boolean nocopy_; + }; + + struct ACE_Export from_wstring + { + from_wstring (ACE_CDR::WChar* ws, + ACE_CDR::ULong b, + ACE_CDR::Boolean nocopy = 0); + from_wstring (const ACE_CDR::WChar* ws, + ACE_CDR::ULong b, + ACE_CDR::Boolean nocopy = 0); + ACE_CDR::WChar *val_; + ACE_CDR::ULong bound_; + ACE_CDR::Boolean nocopy_; + }; + //@} + + /** + * @{ @name Write operations + * Return 0 on failure and 1 on success. + */ + ACE_CDR::Boolean write_boolean (ACE_CDR::Boolean x); + ACE_CDR::Boolean write_char (ACE_CDR::Char x); + ACE_CDR::Boolean write_wchar (ACE_CDR::WChar x); + ACE_CDR::Boolean write_octet (ACE_CDR::Octet x); + ACE_CDR::Boolean write_short (ACE_CDR::Short x); + ACE_CDR::Boolean write_ushort (ACE_CDR::UShort x); + ACE_CDR::Boolean write_long (ACE_CDR::Long x); + ACE_CDR::Boolean write_ulong (ACE_CDR::ULong x); + ACE_CDR::Boolean write_longlong (const ACE_CDR::LongLong &x); + ACE_CDR::Boolean write_ulonglong (const ACE_CDR::ULongLong &x); + ACE_CDR::Boolean write_float (ACE_CDR::Float x); + ACE_CDR::Boolean write_double (const ACE_CDR::Double &x); + ACE_CDR::Boolean write_longdouble (const ACE_CDR::LongDouble &x); + + /// For string we offer methods that accept a precomputed length. + ACE_CDR::Boolean write_string (const ACE_CDR::Char *x); + ACE_CDR::Boolean write_string (ACE_CDR::ULong len, + const ACE_CDR::Char *x); + ACE_CDR::Boolean write_string (const ACE_CString &x); + ACE_CDR::Boolean write_wstring (const ACE_CDR::WChar *x); + ACE_CDR::Boolean write_wstring (ACE_CDR::ULong length, + const ACE_CDR::WChar *x); + //@} + + /// @note the portion written starts at and ends + /// at . + /// The length is *NOT* stored into the CDR stream. + //@{ @name Array write operations + ACE_CDR::Boolean write_boolean_array (const ACE_CDR::Boolean *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_char_array (const ACE_CDR::Char *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_wchar_array (const ACE_CDR::WChar* x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_octet_array (const ACE_CDR::Octet* x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_short_array (const ACE_CDR::Short *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_ushort_array (const ACE_CDR::UShort *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_long_array (const ACE_CDR::Long *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_ulong_array (const ACE_CDR::ULong *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_longlong_array (const ACE_CDR::LongLong* x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_ulonglong_array (const ACE_CDR::ULongLong *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_float_array (const ACE_CDR::Float *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_double_array (const ACE_CDR::Double *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean write_longdouble_array (const ACE_CDR::LongDouble* x, + ACE_CDR::ULong length); + + /// Write an octet array contained inside a MB, this can be optimized + /// to minimize copies. + ACE_CDR::Boolean write_octet_array_mb (const ACE_Message_Block* mb); + //@} + + /** + * @{ @name Placeholder/replace operations + * Facilitates writing a placeholder into a CDR stream to be replaced + * later with a different value. + * + * @note An example use for this facility is: + * @code + ACE_OutputCDR strm; + ... // insert values... + char *pos = strm.write_long_placeholder (); + ... // insert more values + ACE_CDR::Long real_val; // Somehow assign the "correct" value + strm.replace (real_val, pos); // Replace earlier placeholder + @endcode + */ + + /** + * Write a placeholder into the stream. The placeholder's pointer + * is returned so it may later be passed as the @a loc argument to + * replace (). + * These methods align the stream's write pointer properly prior to + * writing the placeholder. + */ + char* write_long_placeholder (void); + char* write_short_placeholder (void); + + /** + * Writes a new value into a specific location. This is commonly + * used to update a prior "placeholder" location in the stream. + * The specified location is assumed to have proper CDR alignment for the + * type to insert. This requirement is satisfied by using one of the + * placeholder-writing methods to align the stream for the anticipated + * value and obtain the correct location. + * Treatment of @a x with repect to byte swapping is the same as for when + * any value is inserted. + * + * @param x The value to insert into the specified location. + * @param loc The location at which to insert @a x. @a loc must be a valid + * position within the stream's current set of message blocks. + * + * @sa write_long_placeholder(), write_short_placeholder () + */ + ACE_CDR::Boolean replace (ACE_CDR::Long x, char* loc); + ACE_CDR::Boolean replace (ACE_CDR::Short x, char* loc); + //@} + + /** + * Return 0 on failure and 1 on success. + */ + //@{ @name Append contents of own CDR stream to another + ACE_CDR::Boolean append_boolean (ACE_InputCDR &); + ACE_CDR::Boolean append_char (ACE_InputCDR &); + ACE_CDR::Boolean append_wchar (ACE_InputCDR &); + ACE_CDR::Boolean append_octet (ACE_InputCDR &); + ACE_CDR::Boolean append_short (ACE_InputCDR &); + ACE_CDR::Boolean append_ushort (ACE_InputCDR &); + ACE_CDR::Boolean append_long (ACE_InputCDR &); + ACE_CDR::Boolean append_ulong (ACE_InputCDR &); + ACE_CDR::Boolean append_longlong (ACE_InputCDR &); + ACE_CDR::Boolean append_ulonglong (ACE_InputCDR &); + ACE_CDR::Boolean append_float (ACE_InputCDR &); + ACE_CDR::Boolean append_double (ACE_InputCDR &); + ACE_CDR::Boolean append_longdouble (ACE_InputCDR &); + + ACE_CDR::Boolean append_wstring (ACE_InputCDR &); + ACE_CDR::Boolean append_string (ACE_InputCDR &); + //@} + + /// Returns @c false if an error has ocurred. + /** + * @note The only expected error is to run out of memory. + */ + bool good_bit (void) const; + + /// Reuse the CDR stream to write on the old buffer. + void reset (void); + + /// Add the length of each message block in the chain. + size_t total_length (void) const; + + /** + * Return the start of the message block chain for this CDR stream. + * @note The complete CDR stream is represented by a chain of + * message blocks. + */ + const ACE_Message_Block *begin (void) const; + + /// Return the last message in the chain that is is use. + const ACE_Message_Block *end (void) const; + + /// Return the message block in chain. + const ACE_Message_Block *current (void) const; + + /// Replace the message block chain with a single message block. + /** + * Upon successful completion, there will be a single message block + * containing the data from the complete message block chain. + * + * @note The only expected error is to run out of memory. + */ + int consolidate (void); + + /** + * Access the underlying buffer (read only). @note This + * method only returns a pointer to the first block in the + * chain. + */ + const char *buffer (void) const; + + /** + * Return the size of first message block in the block chain. @note This + * method only returns information about the first block in the + * chain. + */ + size_t length (void) const; + + /** + * Utility function to allow the user more flexibility. + * Pads the stream up to the nearest -byte boundary. + * Argument MUST be a power of 2. + * Returns 0 on success and -1 on failure. + */ + int align_write_ptr (size_t alignment); + + /// Access the codeset translators. They can be null! + ACE_Char_Codeset_Translator *char_translator (void) const; + ACE_WChar_Codeset_Translator *wchar_translator (void) const; + + /// Set the char codeset translator. + void char_translator (ACE_Char_Codeset_Translator *); + /// Set the wchar codeset translator. + void wchar_translator (ACE_WChar_Codeset_Translator *); + + /// set the global size of serialized wchars. This may be different + /// than the size of a wchar_t. + static void wchar_maxbytes (size_t max_bytes); + + /// access the serialized size of wchars. + static size_t wchar_maxbytes (void); + + /** + * Return alignment of the wr_ptr(), with respect to the start of + * the CDR stream. This is not the same as the alignment of + * current->wr_ptr()! + */ + size_t current_alignment (void) const; + + /** + * Returns (in @a buf) the next position in the buffer aligned to + * @a size, it advances the Message_Block wr_ptr past the data + * (i.e., @a buf + @a size). If necessary it grows the Message_Block + * buffer. Sets the good_bit to false and returns a -1 on failure. + */ + int adjust (size_t size, + char *&buf); + + /// As above, but now the size and alignment requirements may be + /// different. + int adjust (size_t size, + size_t align, + char *&buf); + + /// If non-zero then this stream is writing in non-native byte order, + /// this is only meaningful if ACE_ENABLE_SWAP_ON_WRITE is defined. + bool do_byte_swap (void) const; + + /// If returns 0, this returns ACE_CDR_BYTE_ORDER else + /// it returns !ACE_CDR_BYTE_ORDER. + int byte_order (void) const; + + /// For use by a gateway, which creates the output stream for the + /// reply to the client in its native byte order, but which must + /// send the reply in the byte order of the target's reply to the + /// gateway. + void reset_byte_order (int byte_order); + + /// set GIOP version info + void set_version (ACE_CDR::Octet major, ACE_CDR::Octet minor); + + /// Set the underlying GIOP version.. + void get_version (ACE_CDR::Octet &major, ACE_CDR::Octet &minor); + +private: + + // Find the message block in the chain of message blocks + // that the provide location locates. + ACE_Message_Block* find (char* loc); + + /// disallow copying... + ACE_OutputCDR (const ACE_OutputCDR& rhs); + ACE_OutputCDR& operator= (const ACE_OutputCDR& rhs); + + ACE_CDR::Boolean write_1 (const ACE_CDR::Octet *x); + ACE_CDR::Boolean write_2 (const ACE_CDR::UShort *x); + ACE_CDR::Boolean write_4 (const ACE_CDR::ULong *x); + ACE_CDR::Boolean write_8 (const ACE_CDR::ULongLong *x); + ACE_CDR::Boolean write_16 (const ACE_CDR::LongDouble *x); + + /** + * write an array of @a length elements, each of @a size bytes and the + * start aligned at a multiple of . The elements are assumed + * to be packed with the right alignment restrictions. It is mostly + * designed for buffers of the basic types. + * + * This operation uses ; as explained above it is expected + * that using assignment is faster that for one element, + * but for several elements should be more efficient, it + * could be interesting to find the break even point and optimize + * for that case, but that would be too platform dependent. + */ + ACE_CDR::Boolean write_array (const void *x, + size_t size, + size_t align, + ACE_CDR::ULong length); + + + ACE_CDR::Boolean write_wchar_array_i (const ACE_CDR::WChar* x, + ACE_CDR::ULong length); + + + /** + * Grow the CDR stream. When it returns @a buf contains a pointer to + * memory in the CDR stream, with at least @a size bytes ahead of it + * and aligned to an boundary. It moved the to . + */ + int grow_and_adjust (size_t size, + size_t align, + char *&buf); + +private: + /// The start of the chain of message blocks. + ACE_Message_Block start_; + + /// The current block in the chain where we are writing. + ACE_Message_Block *current_; + +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + /** + * The current alignment as measured from the start of the buffer. + * Usually this coincides with the alignment of the buffer in + * memory, but, when we chain another buffer this "quasi invariant" + * is broken. + * The current_alignment is used to readjust the buffer following + * the stolen message block. + */ + size_t current_alignment_; +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + + /** + * Is the current block writable. When we steal a buffer from the + * user and just chain it into the message block we are not supposed + * to write on it, even if it is past the start and end of the + * buffer. + */ + bool current_is_writable_; + + /** + * If not zero swap bytes at writing so the created CDR stream byte + * order does *not* match the machine byte order. The motivation + * for such a beast is that in some setting a few (fast) machines + * can be serving hundreds of slow machines with the opposite byte + * order, so it makes sense (as a load balancing device) to put the + * responsibility in the writers. THIS IS NOT A STANDARD IN CORBA, + * USE AT YOUR OWN RISK + */ + bool do_byte_swap_; + + /// Set to false when an error ocurrs. + bool good_bit_; + + /// Break-even point for copying. + size_t const memcpy_tradeoff_; + +protected: + /// GIOP version information + ACE_CDR::Octet major_version_; + ACE_CDR::Octet minor_version_; + + /// If not nil, invoke for translation of character and string data. + ACE_Char_Codeset_Translator *char_translator_; + ACE_WChar_Codeset_Translator *wchar_translator_; + + /** + * Some wide char codesets may be defined with a maximum number + * of bytes that is smaller than the size of a wchar_t. This means + * that the CDR cannot simply memcpy a block of wchars to and from + * the stream, but must instead realign the bytes appropriately. + * In cases when wchar i/o is not allowed, such as with GIOP 1.0, + * or not having a native wchar codeset defined, the maxbytes is + * set to zero, indicating no wchar data is allowed. + */ + static size_t wchar_maxbytes_; +}; + + +// **************************************************************** + +/** + * @class ACE_InputCDR + * + * @brief A CDR stream for reading, i.e. for demarshalling. + * + * This class is based on the the CORBA spec for Java (98-02-29), + * java class omg.org.CORBA.portable.InputStream. It diverts in a + * few ways: + * + Operations to retrieve basic types take parameters by + * reference. + * + Operations taking arrays don't have offsets, because in C++ + * it is easier to describe an array starting from x+offset. + * + Operations return an error status, because exceptions are + * not widely available in C++ (yet). + */ +class ACE_Export ACE_InputCDR +{ +public: + /// The translator need privileged access to efficiently demarshal + /// arrays and the such + friend class ACE_Char_Codeset_Translator; + friend class ACE_WChar_Codeset_Translator; + + /** + * Create an input stream from an arbitrary buffer. The buffer must + * be properly aligned because this contructor will *not* work if + * the buffer is aligned unproperly.See ACE_ptr_align_binary() for + * instructions on how to align a pointer properly and use + * ACE_CDR::MAX_ALIGNMENT for the correct alignment. + */ + ACE_InputCDR (const char *buf, + size_t bufsiz, + int byte_order = ACE_CDR_BYTE_ORDER, + ACE_CDR::Octet major_version = ACE_CDR_GIOP_MAJOR_VERSION, + ACE_CDR::Octet minor_version = ACE_CDR_GIOP_MINOR_VERSION); + + /// Create an empty input stream. The caller is responsible for + /// putting the right data and providing the right alignment. + ACE_InputCDR (size_t bufsiz, + int byte_order = ACE_CDR_BYTE_ORDER, + ACE_CDR::Octet major_version = ACE_CDR_GIOP_MAJOR_VERSION, + ACE_CDR::Octet minor_version = ACE_CDR_GIOP_MINOR_VERSION); + + /// Create an input stream from an ACE_Message_Block + /** + * The alignment of the @arg data block is carried into the new + * ACE_InputCDR object. This constructor either increments the + * @arg data reference count, or copies the data (if it's a compound + * message block) so the caller can release the block immediately + * upon return. + */ + ACE_InputCDR (const ACE_Message_Block *data, + int byte_order = ACE_CDR_BYTE_ORDER, + ACE_CDR::Octet major_version = ACE_CDR_GIOP_MAJOR_VERSION, + ACE_CDR::Octet minor_version = ACE_CDR_GIOP_MINOR_VERSION, + ACE_Lock* lock = 0); + + /// Create an input stream from an ACE_Data_Block. The + /// indicates whether the can be deleted by the CDR stream + /// or not + ACE_InputCDR (ACE_Data_Block *data, + ACE_Message_Block::Message_Flags flag = 0, + int byte_order = ACE_CDR_BYTE_ORDER, + ACE_CDR::Octet major_version = ACE_CDR_GIOP_MAJOR_VERSION, + ACE_CDR::Octet minor_version = ACE_CDR_GIOP_MINOR_VERSION); + + /// Create an input stream from an ACE_Data_Block. It also sets the + /// read and write pointers at the desired positions. This would be + /// helpful if the applications desires to create a new CDR stream + /// from a semi-processed datablock. + ACE_InputCDR (ACE_Data_Block *data, + ACE_Message_Block::Message_Flags flag, + size_t read_pointer_position, + size_t write_pointer_position, + int byte_order = ACE_CDR_BYTE_ORDER, + ACE_CDR::Octet major_version = ACE_CDR_GIOP_MAJOR_VERSION, + ACE_CDR::Octet minor_version = ACE_CDR_GIOP_MINOR_VERSION); + + /** + * These make a copy of the current stream state, but do not copy + * the internal buffer, so the same stream can be read multiple + * times efficiently. + */ + ACE_InputCDR (const ACE_InputCDR& rhs); + + ACE_InputCDR& operator= (const ACE_InputCDR& rhs); + + /// When interpreting indirected TypeCodes it is useful to make a + /// "copy" of the stream starting in the new position. + ACE_InputCDR (const ACE_InputCDR& rhs, + size_t size, + ACE_CDR::Long offset); + + /// This creates an encapsulated stream, the first byte must be (per + /// the spec) the byte order of the encapsulation. + ACE_InputCDR (const ACE_InputCDR& rhs, + size_t size); + + /// Create an input CDR from an output CDR. + ACE_InputCDR (const ACE_OutputCDR& rhs, + ACE_Allocator* buffer_allocator = 0, + ACE_Allocator* data_block_allocator = 0, + ACE_Allocator* message_block_allocator = 0); + + /// Helper class to transfer the contents from one input CDR to + /// another without requiring any extra memory allocations, data + /// copies or too many temporaries. + struct ACE_Export Transfer_Contents + { + Transfer_Contents (ACE_InputCDR &rhs); + + ACE_InputCDR &rhs_; + }; + /// Transfer the contents from to a new CDR + ACE_InputCDR (Transfer_Contents rhs); + + /// Destructor + ~ACE_InputCDR (void); + + /// Disambiguate overloading when extracting octets, chars, + /// booleans, and bounded strings + //@{ @name Helper classes + + struct ACE_Export to_boolean + { + explicit to_boolean (ACE_CDR::Boolean &b); + ACE_CDR::Boolean &ref_; + }; + + struct ACE_Export to_char + { + explicit to_char (ACE_CDR::Char &c); + ACE_CDR::Char &ref_; + }; + + struct ACE_Export to_wchar + { + explicit to_wchar (ACE_CDR::WChar &wc); + ACE_CDR::WChar &ref_; + }; + + struct ACE_Export to_octet + { + explicit to_octet (ACE_CDR::Octet &o); + ACE_CDR::Octet &ref_; + }; + + struct ACE_Export to_string + { + /** + * @deprecated The constructor taking a non-const string is now + * deprecated (C++ mapping 00-01-02), but we keep it + * around for backward compatibility. + */ + to_string (ACE_CDR::Char *&s, + ACE_CDR::ULong b); + to_string (const ACE_CDR::Char *&s, + ACE_CDR::ULong b); + const ACE_CDR::Char *&val_; + ACE_CDR::ULong bound_; + }; + + struct ACE_Export to_wstring + { + /// The constructor taking a non-const wstring is + /// now deprecated (C++ mapping 00-01-02), but we + /// keep it around for backward compatibility. + to_wstring (ACE_CDR::WChar *&ws, + ACE_CDR::ULong b); + to_wstring (const ACE_CDR::WChar *&ws, + ACE_CDR::ULong b); + const ACE_CDR::WChar *&val_; + ACE_CDR::ULong bound_; + }; + //@} + + /** + * Return @c false on failure and @c true on success. + */ + //@{ @name Read basic IDL types + ACE_CDR::Boolean read_boolean (ACE_CDR::Boolean& x); + ACE_CDR::Boolean read_char (ACE_CDR::Char &x); + ACE_CDR::Boolean read_wchar (ACE_CDR::WChar& x); + ACE_CDR::Boolean read_octet (ACE_CDR::Octet& x); + ACE_CDR::Boolean read_short (ACE_CDR::Short &x); + ACE_CDR::Boolean read_ushort (ACE_CDR::UShort &x); + ACE_CDR::Boolean read_long (ACE_CDR::Long &x); + ACE_CDR::Boolean read_ulong (ACE_CDR::ULong &x); + ACE_CDR::Boolean read_longlong (ACE_CDR::LongLong& x); + ACE_CDR::Boolean read_ulonglong (ACE_CDR::ULongLong& x); + ACE_CDR::Boolean read_float (ACE_CDR::Float &x); + ACE_CDR::Boolean read_double (ACE_CDR::Double &x); + ACE_CDR::Boolean read_longdouble (ACE_CDR::LongDouble &x); + + ACE_CDR::Boolean read_string (ACE_CDR::Char *&x); + ACE_CDR::Boolean read_string (ACE_CString &x); + ACE_CDR::Boolean read_wstring (ACE_CDR::WChar*& x); + //@} + + /** + * The buffer @a x must be large enough to contain @a length + * elements. + * Return @c false on failure and @c true on success. + */ + //@{ @name Read basic IDL types arrays + ACE_CDR::Boolean read_boolean_array (ACE_CDR::Boolean* x, + ACE_CDR::ULong length); + ACE_CDR::Boolean read_char_array (ACE_CDR::Char *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean read_wchar_array (ACE_CDR::WChar* x, + ACE_CDR::ULong length); + ACE_CDR::Boolean read_octet_array (ACE_CDR::Octet* x, + ACE_CDR::ULong length); + ACE_CDR::Boolean read_short_array (ACE_CDR::Short *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean read_ushort_array (ACE_CDR::UShort *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean read_long_array (ACE_CDR::Long *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean read_ulong_array (ACE_CDR::ULong *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean read_longlong_array (ACE_CDR::LongLong* x, + ACE_CDR::ULong length); + ACE_CDR::Boolean read_ulonglong_array (ACE_CDR::ULongLong* x, + ACE_CDR::ULong length); + ACE_CDR::Boolean read_float_array (ACE_CDR::Float *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean read_double_array (ACE_CDR::Double *x, + ACE_CDR::ULong length); + ACE_CDR::Boolean read_longdouble_array (ACE_CDR::LongDouble* x, + ACE_CDR::ULong length); + //@} + + /** + * Return @c false on failure and @c true on success. + */ + //@{ @name Skip elements + ACE_CDR::Boolean skip_boolean (void); + ACE_CDR::Boolean skip_char (void); + ACE_CDR::Boolean skip_wchar (void); + ACE_CDR::Boolean skip_octet (void); + ACE_CDR::Boolean skip_short (void); + ACE_CDR::Boolean skip_ushort (void); + ACE_CDR::Boolean skip_long (void); + ACE_CDR::Boolean skip_ulong (void); + ACE_CDR::Boolean skip_longlong (void); + ACE_CDR::Boolean skip_ulonglong (void); + ACE_CDR::Boolean skip_float (void); + ACE_CDR::Boolean skip_double (void); + ACE_CDR::Boolean skip_longdouble (void); + //@} + + /** + * The next field must be a string, this method skips it. It is + * useful in parsing a TypeCode. + * @return @c false on failure and @c true on success. + */ + ACE_CDR::Boolean skip_wstring (void); + ACE_CDR::Boolean skip_string (void); + + /// Skip @a n bytes in the CDR stream. + /** + * @return @c false on failure and @c true on success. + */ + ACE_CDR::Boolean skip_bytes (size_t n); + + /// returns @c false if a problem has been detected. + bool good_bit (void) const; + + /** + * @return The start of the message block chain for this CDR + * stream. + * + * @note In the current implementation the chain has length 1, but + * we are planning to change that. + */ + const ACE_Message_Block* start (void) const; + + // = The following functions are useful to read the contents of the + // CDR stream from a socket or file. + + /** + * Grow the internal buffer, reset @c rd_ptr to the first byte in + * the new buffer that is properly aligned, and set @c wr_ptr to @c + * rd_ptr @c + @c newsize + */ + int grow (size_t newsize); + + /** + * After reading and partially parsing the contents the user can + * detect a change in the byte order, this method will let him/her + * change it. + */ + void reset_byte_order (int byte_order); + + /// Re-initialize the CDR stream, copying the contents of the chain + /// of message_blocks starting from @a data. + void reset (const ACE_Message_Block *data, + int byte_order); + + /// Steal the contents from the current CDR. + ACE_Message_Block *steal_contents (void); + + /// Steal the contents of @a cdr and make a shallow copy into this + /// stream. + void steal_from (ACE_InputCDR &cdr); + + /// Exchange data blocks with the caller of this method. The read + /// and write pointers are also exchanged. + /** + * @note We now do only with the start_ message block. + */ + void exchange_data_blocks (ACE_InputCDR &cdr); + + /// Copy the data portion from the @c cdr to this cdr and return the + /// data content (ie. the ACE_Data_Block) from this CDR to the + /// caller. + /** + * @note The caller is responsible for managing the memory of the + * returned ACE_Data_Block. + */ + ACE_Data_Block* clone_from (ACE_InputCDR &cdr); + + /// Re-initialize the CDR stream, forgetting about the old contents + /// of the stream and allocating a new buffer (from the allocators). + void reset_contents (void); + + /// Returns the current position for the @c rd_ptr. + char* rd_ptr (void); + + /// Returns the current position for the @c wr_ptr. + char* wr_ptr (void); + + /// Return how many bytes are left in the stream. + size_t length (void) const; + + /** + * Utility function to allow the user more flexibility. + * Skips up to the nearest @a alignment-byte boundary. + * Argument MUST be a power of 2. + * + * @return 0 on success and -1 on failure. + */ + int align_read_ptr (size_t alignment); + + /// If @c true then this stream is writing in non-native byte order. + /// This is only meaningful if ACE_ENABLE_SWAP_ON_WRITE is defined. + bool do_byte_swap (void) const; + + /// If @c do_byte_swap() returns @c false, this returns + /// ACE_CDR_BYTE_ORDER else it returns !ACE_CDR_BYTE_ORDER. + int byte_order (void) const; + + /// Access the codeset translators. They can be nil! + ACE_Char_Codeset_Translator *char_translator (void) const; + ACE_WChar_Codeset_Translator *wchar_translator (void) const; + + /// Set the codeset translators. + void char_translator (ACE_Char_Codeset_Translator *); + void wchar_translator (ACE_WChar_Codeset_Translator *); + + /** + * Returns (in @a buf) the next position in the buffer aligned to + * @a size. It advances the Message_Block @c rd_ptr past the data + * (i.e., @c buf @c + @c size). Sets the good_bit to @c false and + * returns a -1 on failure. + */ + int adjust (size_t size, + char *&buf); + + /// As above, but now the size and alignment requirements may be + /// different. + int adjust (size_t size, + size_t align, + char *&buf); + + /// Set the underlying GIOP version.. + void set_version (ACE_CDR::Octet major, ACE_CDR::Octet minor); + + /// Set the underlying GIOP version.. + void get_version (ACE_CDR::Octet &major, ACE_CDR::Octet &minor); + +protected: + + /// The start of the chain of message blocks, even though in the + /// current version the chain always has length 1. + ACE_Message_Block start_; + + /// The CDR stream byte order does not match the one on the machine, + /// swapping is needed while reading. + bool do_byte_swap_; + + /// set to @c false when an error occurs. + bool good_bit_; + + /// The GIOP versions for this stream + ACE_CDR::Octet major_version_; + ACE_CDR::Octet minor_version_; + + /// If not nil, invoke for translation of character and string data. + ACE_Char_Codeset_Translator *char_translator_; + ACE_WChar_Codeset_Translator *wchar_translator_; + +private: + + ACE_CDR::Boolean read_1 (ACE_CDR::Octet *x); + ACE_CDR::Boolean read_2 (ACE_CDR::UShort *x); + ACE_CDR::Boolean read_4 (ACE_CDR::ULong *x); + ACE_CDR::Boolean read_8 (ACE_CDR::ULongLong *x); + ACE_CDR::Boolean read_16 (ACE_CDR::LongDouble *x); + + // Several types can be read using the same routines, since TAO + // tries to use native types with known size for each CORBA type. + // We could use void* or char* to make the interface more + // consistent, but using native types let us exploit the strict + // alignment requirements of CDR streams and implement the + // operations using asignment. + + /** + * Read an array of @a length elements, each of @a size bytes and the + * start aligned at a multiple of . The elements are assumed + * to be packed with the right alignment restrictions. It is mostly + * designed for buffers of the basic types. + * + * This operation uses ; as explained above it is expected + * that using assignment is faster that for one element, + * but for several elements should be more efficient, it + * could be interesting to find the break even point and optimize + * for that case, but that would be too platform dependent. + */ + ACE_CDR::Boolean read_array (void* x, + size_t size, + size_t align, + ACE_CDR::ULong length); + + /** + * On those occasions when the native codeset for wchar is smaller than + * the size of a wchar_t, such as using UTF-16 with a 4-byte wchar_t, a + * special form of reading the array is needed. Actually, this should be + * a default translator. + */ + ACE_CDR::Boolean read_wchar_array_i (ACE_CDR::WChar * x, + ACE_CDR::ULong length); + + /// Move the rd_ptr ahead by @a offset bytes. + void rd_ptr (size_t offset); + + /// Points to the continuation field of the current message block. + char* end (void); +}; + +// **************************************************************** + +/** + * @class ACE_Char_Codeset_Translator + * + * @brief Codeset translation routines common to both Output and Input + * CDR streams. + * + * This class is a base class for defining codeset translation + * routines to handle the character set translations required by + * both CDR Input streams and CDR Output streams. + * + * Translators are reference counted. This allows for stateful as well + * as stateless translators. Stateless translators will be allocated + * once whereas CDR Streams own their own copy of a stateful translator. + */ +class ACE_Export ACE_Char_Codeset_Translator +{ +public: + virtual ~ACE_Char_Codeset_Translator (); + + /// Read a single character from the stream, converting from the + /// stream codeset to the native codeset + virtual ACE_CDR::Boolean read_char (ACE_InputCDR&, + ACE_CDR::Char&) = 0; + + /// Read a string from the stream, including the length, converting + /// the characters from the stream codeset to the native codeset + virtual ACE_CDR::Boolean read_string (ACE_InputCDR&, + ACE_CDR::Char *&) = 0; + + /// Read an array of characters from the stream, converting the + /// characters from the stream codeset to the native codeset. + virtual ACE_CDR::Boolean read_char_array (ACE_InputCDR&, + ACE_CDR::Char*, + ACE_CDR::ULong) = 0; + + /// Write a single character to the stream, converting from the + /// native codeset to the stream codeset + virtual ACE_CDR::Boolean write_char (ACE_OutputCDR&, + ACE_CDR::Char) = 0; + + /// Write a string to the stream, including the length, converting + /// from the native codeset to the stream codeset + virtual ACE_CDR::Boolean write_string (ACE_OutputCDR&, + ACE_CDR::ULong, + const ACE_CDR::Char*) = 0; + + /// Write an array of characters to the stream, converting from the + /// native codeset to the stream codeset + virtual ACE_CDR::Boolean write_char_array (ACE_OutputCDR&, + const ACE_CDR::Char*, + ACE_CDR::ULong) = 0; + + virtual ACE_CDR::ULong ncs () = 0; + virtual ACE_CDR::ULong tcs () = 0; +protected: + /// Children have access to low-level routines because they cannot + /// use read_char or something similar (it would recurse). + ACE_CDR::Boolean read_1 (ACE_InputCDR& input, + ACE_CDR::Octet *x); + ACE_CDR::Boolean write_1 (ACE_OutputCDR& output, + const ACE_CDR::Octet *x); + + /// Efficiently read @a length elements of size @a size each from + /// into ; the data must be aligned to . + ACE_CDR::Boolean read_array (ACE_InputCDR& input, + void* x, + size_t size, + size_t align, + ACE_CDR::ULong length); + + /** + * Efficiently write @a length elements of size @a size from into + * . Before inserting the elements enough padding is added + * to ensure that the elements will be aligned to in the + * stream. + */ + ACE_CDR::Boolean write_array (ACE_OutputCDR& output, + const void *x, + size_t size, + size_t align, + ACE_CDR::ULong length); + + /** + * Exposes the stream implementation of , this is useful in + * many cases to minimize memory allocations during marshaling. + * On success @a buf will contain a contiguous area in the CDR stream + * that can hold @a size bytes aligned to . + * Results + */ + int adjust (ACE_OutputCDR& out, + size_t size, + size_t align, + char *&buf); + + /// Used by derived classes to set errors in the CDR stream. + void good_bit (ACE_OutputCDR& out, bool bit); + + /// Obtain the CDR Stream's major & minor version values. + ACE_CDR::Octet major_version (ACE_InputCDR& input); + ACE_CDR::Octet minor_version (ACE_InputCDR& input); + ACE_CDR::Octet major_version (ACE_OutputCDR& output); + ACE_CDR::Octet minor_version (ACE_OutputCDR& output); +}; + +// **************************************************************** + +/** + * @class ACE_WChar_Codeset_Translator + * + * @brief Codeset translation routines common to both Output and Input + * CDR streams. + * + * This class is a base class for defining codeset translation + * routines to handle the character set translations required by + * both CDR Input streams and CDR Output streams. + */ +class ACE_Export ACE_WChar_Codeset_Translator +{ +public: + virtual ~ACE_WChar_Codeset_Translator (); + + virtual ACE_CDR::Boolean read_wchar (ACE_InputCDR&, + ACE_CDR::WChar&) = 0; + virtual ACE_CDR::Boolean read_wstring (ACE_InputCDR&, + ACE_CDR::WChar *&) = 0; + virtual ACE_CDR::Boolean read_wchar_array (ACE_InputCDR&, + ACE_CDR::WChar*, + ACE_CDR::ULong) = 0; + virtual ACE_CDR::Boolean write_wchar (ACE_OutputCDR&, + ACE_CDR::WChar) = 0; + virtual ACE_CDR::Boolean write_wstring (ACE_OutputCDR&, + ACE_CDR::ULong, + const ACE_CDR::WChar*) = 0; + virtual ACE_CDR::Boolean write_wchar_array (ACE_OutputCDR&, + const ACE_CDR::WChar*, + ACE_CDR::ULong) = 0; + + virtual ACE_CDR::ULong ncs () = 0; + virtual ACE_CDR::ULong tcs () = 0; +protected: + /// Children have access to low-level routines because they cannot + /// use read_char or something similar (it would recurse). + ACE_CDR::Boolean read_1 (ACE_InputCDR& input, + ACE_CDR::Octet *x); + ACE_CDR::Boolean read_2 (ACE_InputCDR& input, + ACE_CDR::UShort *x); + ACE_CDR::Boolean read_4 (ACE_InputCDR& input, + ACE_CDR::ULong *x); + ACE_CDR::Boolean write_1 (ACE_OutputCDR& output, + const ACE_CDR::Octet *x); + ACE_CDR::Boolean write_2 (ACE_OutputCDR& output, + const ACE_CDR::UShort *x); + ACE_CDR::Boolean write_4 (ACE_OutputCDR& output, + const ACE_CDR::ULong *x); + + /// Efficiently read @a length elements of size @a size each from + /// into ; the data must be aligned to . + ACE_CDR::Boolean read_array (ACE_InputCDR& input, + void* x, + size_t size, + size_t align, + ACE_CDR::ULong length); + + /** + * Efficiently write @a length elements of size @a size from into + * . Before inserting the elements enough padding is added + * to ensure that the elements will be aligned to in the + * stream. + */ + ACE_CDR::Boolean write_array (ACE_OutputCDR& output, + const void *x, + size_t size, + size_t align, + ACE_CDR::ULong length); + + /** + * Exposes the stream implementation of , this is useful in + * many cases to minimize memory allocations during marshaling. + * On success @a buf will contain a contiguous area in the CDR stream + * that can hold @a size bytes aligned to . + * Results + */ + int adjust (ACE_OutputCDR& out, + size_t size, + size_t align, + char *&buf); + + /// Used by derived classes to set errors in the CDR stream. + void good_bit (ACE_OutputCDR& out, bool bit); + + /// Obtain the CDR Stream's major & minor version values. + ACE_CDR::Octet major_version (ACE_InputCDR& input); + ACE_CDR::Octet minor_version (ACE_InputCDR& input); + ACE_CDR::Octet major_version (ACE_OutputCDR& output); + ACE_CDR::Octet minor_version (ACE_OutputCDR& output); + +}; + +// @@ These operators should not be inlined since they force SString.h +// to be included in this header. +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + const ACE_CString &x); + +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_CString &x); + + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +# include "ace/CDR_Stream.inl" +#else /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Not used by CORBA or TAO +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + ACE_CDR::Char x); +// CDR output operators for primitive types + +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + ACE_CDR::Short x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + ACE_CDR::UShort x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + ACE_CDR::Long x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + ACE_CDR::ULong x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + ACE_CDR::LongLong x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + ACE_CDR::ULongLong x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR& os, + ACE_CDR::LongDouble x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + ACE_CDR::Float x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + ACE_CDR::Double x); + +// CDR output operator from helper classes + +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + ACE_OutputCDR::from_boolean x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + ACE_OutputCDR::from_char x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + ACE_OutputCDR::from_wchar x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + ACE_OutputCDR::from_octet x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + ACE_OutputCDR::from_string x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + ACE_OutputCDR::from_wstring x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + const ACE_CDR::Char* x); +extern ACE_Export ACE_CDR::Boolean operator<< (ACE_OutputCDR &os, + const ACE_CDR::WChar* x); + +// Not used by CORBA or TAO +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_CDR::Char &x); +// CDR input operators for primitive types + +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_CDR::Short &x); +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_CDR::UShort &x); +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_CDR::Long &x); +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_CDR::ULong &x); +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_CDR::LongLong &x); +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_CDR::ULongLong &x); +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_CDR::LongDouble &x); +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_CDR::Float &x); +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_CDR::Double &x); + +// CDR input operator from helper classes + +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_InputCDR::to_boolean x); +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_InputCDR::to_char x); +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_InputCDR::to_wchar x); +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_InputCDR::to_octet x); +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_InputCDR::to_string x); +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_InputCDR::to_wstring x); +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_CDR::Char*& x); +extern ACE_Export ACE_CDR::Boolean operator>> (ACE_InputCDR &is, + ACE_CDR::WChar*& x); + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* __ACE_INLINE__ */ + +#if defined (GEN_OSTREAM_OPS) + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// ostream insertion operators for debugging code generated from IDL. All +// but these below are either in generated code itself or are unambiguous +// primitive types. + +ACE_Export std::ostream& operator<< (std::ostream &os, + ACE_OutputCDR::from_boolean x); + +ACE_Export std::ostream& operator<< (std::ostream &os, + ACE_OutputCDR::from_char x); + +ACE_Export std::ostream& operator<< (std::ostream &os, + ACE_OutputCDR::from_wchar x); + +ACE_Export std::ostream& operator<< (std::ostream &os, + ACE_OutputCDR::from_octet x); + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* GEN_OSTREAM_OPS */ + +#include /**/ "ace/post.h" + +#endif /* ACE_CDR_STREAM_H */ diff --git a/ACE/ace/CDR_Stream.inl b/ACE/ace/CDR_Stream.inl new file mode 100644 index 00000000000..9f13889237f --- /dev/null +++ b/ACE/ace/CDR_Stream.inl @@ -0,0 +1,1700 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/OS_NS_string.h" +#include "ace/OS_Memory.h" + +// **************************************************************** + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// implementing the special types +ACE_INLINE +ACE_OutputCDR::from_boolean::from_boolean (ACE_CDR::Boolean b) + : val_ (b) +{ +} + +ACE_INLINE +ACE_InputCDR::to_boolean::to_boolean (ACE_CDR::Boolean &b) + : ref_ (b) +{ +} + +ACE_INLINE +ACE_OutputCDR::from_octet::from_octet (ACE_CDR::Octet o) + : val_ (o) +{ +} + +ACE_INLINE +ACE_InputCDR::to_octet::to_octet (ACE_CDR::Octet &o) + : ref_ (o) +{ +} + +ACE_INLINE +ACE_OutputCDR::from_char::from_char (ACE_CDR::Char c) + : val_ (c) +{ +} + +ACE_INLINE +ACE_InputCDR::to_char::to_char (ACE_CDR::Char &c) + : ref_ (c) +{ +} + +ACE_INLINE +ACE_OutputCDR::from_wchar::from_wchar (ACE_CDR::WChar wc) + : val_ (wc) +{ +} + +ACE_INLINE +ACE_InputCDR::to_wchar::to_wchar (ACE_CDR::WChar &wc) + : ref_ (wc) +{ +} + +ACE_INLINE +ACE_OutputCDR::from_string::from_string (ACE_CDR::Char *s, + ACE_CDR::ULong b, + ACE_CDR::Boolean nocopy) + : val_ (s), + bound_ (b), + nocopy_ (nocopy) +{ +} + +ACE_INLINE +ACE_OutputCDR::from_string::from_string (const ACE_CDR::Char *s, + ACE_CDR::ULong b, + ACE_CDR::Boolean nocopy) + : val_ (const_cast (s)), + bound_ (b), + nocopy_ (nocopy) +{ +} + +ACE_INLINE +ACE_InputCDR::to_string::to_string (ACE_CDR::Char *&s, + ACE_CDR::ULong b) + : val_ (const_cast (s)), + bound_ (b) +{ +} + +ACE_INLINE +ACE_InputCDR::to_string::to_string (const ACE_CDR::Char *&s, + ACE_CDR::ULong b) + : val_ (s), + bound_ (b) +{ +} + +ACE_INLINE +ACE_OutputCDR::from_wstring::from_wstring (ACE_CDR::WChar *ws, + ACE_CDR::ULong b, + ACE_CDR::Boolean nocopy) + : val_ (ws), + bound_ (b), + nocopy_ (nocopy) +{ +} + +ACE_INLINE +ACE_OutputCDR::from_wstring::from_wstring (const ACE_CDR::WChar *ws, + ACE_CDR::ULong b, + ACE_CDR::Boolean nocopy) + : val_ (const_cast (ws)), + bound_ (b), + nocopy_ (nocopy) +{ +} + +ACE_INLINE +ACE_InputCDR::to_wstring::to_wstring (ACE_CDR::WChar *&ws, + ACE_CDR::ULong b) + : val_ (const_cast (ws)), + bound_ (b) +{ +} + +ACE_INLINE +ACE_InputCDR::to_wstring::to_wstring (const ACE_CDR::WChar *&ws, + ACE_CDR::ULong b) + : val_ (ws), + bound_ (b) +{ +} + +ACE_INLINE +ACE_InputCDR::Transfer_Contents::Transfer_Contents (ACE_InputCDR &rhs) + : rhs_ (rhs) +{ +} + +// **************************************************************** + +ACE_INLINE +ACE_OutputCDR::~ACE_OutputCDR (void) +{ + if (this->start_.cont () != 0) + { + ACE_Message_Block::release (this->start_.cont ()); + this->start_.cont (0); + } + this->current_ = 0; +} + +ACE_INLINE void +ACE_OutputCDR::reset (void) +{ + this->current_ = &this->start_; + this->current_is_writable_ = true; + ACE_CDR::mb_align (&this->start_); + +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + this->current_alignment_ = 0; +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + + // It is tempting not to remove the memory, but we need to do so to + // release any potential user buffers chained in the continuation + // field. + + ACE_Message_Block * const cont = this->start_.cont (); + if (cont) + { + ACE_Message_Block::release (cont); + this->start_.cont (0); + } +} + +// Encode the CDR stream. + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_octet (ACE_CDR::Octet x) +{ + return this->write_1 (&x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_boolean (ACE_CDR::Boolean x) +{ + return + static_cast ( + this->write_octet ( + x + ? static_cast (1) + : static_cast (0))); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_char (ACE_CDR::Char x) +{ + if (this->char_translator_ == 0) + { + ACE_CDR::Octet temp = static_cast (x); + return this->write_1 (&temp); + } + return this->char_translator_->write_char (*this, x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_short (ACE_CDR::Short x) +{ + ACE_CDR::UShort temp = static_cast (x); + return this->write_2 (&temp); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_ushort (ACE_CDR::UShort x) +{ + return this->write_2 (&x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_long (ACE_CDR::Long x) +{ + ACE_CDR::ULong temp = static_cast (x); + return this->write_4 (&temp); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_ulong (ACE_CDR::ULong x) +{ + return this->write_4 (&x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_longlong (const ACE_CDR::LongLong &x) +{ + void const * const temp = &x; + return this->write_8 (reinterpret_cast (temp)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_ulonglong (const ACE_CDR::ULongLong &x) +{ + return this->write_8 (&x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_float (ACE_CDR::Float x) +{ + void const * const temp = &x; + return this->write_4 (reinterpret_cast (temp)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_double (const ACE_CDR::Double &x) +{ + void const * const temp = &x; + return this->write_8 (reinterpret_cast (temp)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_longdouble (const ACE_CDR::LongDouble &x) +{ + return this->write_16 (&x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_string (const ACE_CDR::Char *x) +{ + if (x) + { + ACE_CDR::ULong const len = + static_cast (ACE_OS::strlen (x)); + return this->write_string (len, x); + } + + return this->write_string (0, 0); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_wstring (const ACE_CDR::WChar *x) +{ + if (x) + { + ACE_CDR::ULong const len = + static_cast (ACE_OS::strlen (x)); + return this->write_wstring (len, x); + } + + return this->write_wstring (0, 0); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_char_array (const ACE_CDR::Char *x, + ACE_CDR::ULong length) +{ + if (this->char_translator_ == 0) + return this->write_array (x, + ACE_CDR::OCTET_SIZE, + ACE_CDR::OCTET_ALIGN, + length); + return this->char_translator_->write_char_array (*this, x, length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_wchar_array (const ACE_CDR::WChar* x, + ACE_CDR::ULong length) +{ + if (this->wchar_translator_) + return this->wchar_translator_->write_wchar_array (*this, x, length); + + if (ACE_OutputCDR::wchar_maxbytes_ == 0) + { + errno = EACCES; + return (ACE_CDR::Boolean) (this->good_bit_ = false); + } + + if (ACE_OutputCDR::wchar_maxbytes_ == sizeof (ACE_CDR::WChar)) + return this->write_array (x, + sizeof (ACE_CDR::WChar), + sizeof (ACE_CDR::WChar) == 2 + ? ACE_CDR::SHORT_ALIGN + : ACE_CDR::LONG_ALIGN, + length); + return this->write_wchar_array_i (x,length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_octet_array (const ACE_CDR::Octet* x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::OCTET_SIZE, + ACE_CDR::OCTET_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_short_array (const ACE_CDR::Short *x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::SHORT_SIZE, + ACE_CDR::SHORT_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_ushort_array (const ACE_CDR::UShort *x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::SHORT_SIZE, + ACE_CDR::SHORT_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_long_array (const ACE_CDR::Long *x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::LONG_SIZE, + ACE_CDR::LONG_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_ulong_array (const ACE_CDR::ULong *x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::LONG_SIZE, + ACE_CDR::LONG_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_longlong_array (const ACE_CDR::LongLong *x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::LONGLONG_SIZE, + ACE_CDR::LONGLONG_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_ulonglong_array (const ACE_CDR::ULongLong *x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::LONGLONG_SIZE, + ACE_CDR::LONGLONG_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_float_array (const ACE_CDR::Float *x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::LONG_SIZE, + ACE_CDR::LONG_ALIGN, + length); +} + + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_double_array (const ACE_CDR::Double *x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::LONGLONG_SIZE, + ACE_CDR::LONGLONG_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::write_longdouble_array (const ACE_CDR::LongDouble* x, + ACE_CDR::ULong length) +{ + return this->write_array (x, + ACE_CDR::LONGDOUBLE_SIZE, + ACE_CDR::LONGDOUBLE_ALIGN, + length); +} + +ACE_INLINE bool +ACE_OutputCDR::good_bit (void) const +{ + return this->good_bit_; +} + +ACE_INLINE int +ACE_OutputCDR::adjust (size_t size, + size_t align, + char*& buf) +{ + if (!this->current_is_writable_) + return this->grow_and_adjust (size, align, buf); + +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + size_t const offset = + ACE_align_binary (this->current_alignment_, align) + - this->current_alignment_; + + buf = this->current_->wr_ptr () + offset; +#else + buf = this->current_->wr_ptr (); +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + + char * const end = buf + size; + + if (end <= this->current_->end () && + end >= buf) + { +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + this->current_alignment_ += offset + size; +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + this->current_->wr_ptr (end); + return 0; + } + + return this->grow_and_adjust (size, align, buf); +} + +ACE_INLINE int +ACE_OutputCDR::adjust (size_t size, char*& buf) +{ + return this->adjust (size, size, buf); +} + +ACE_INLINE void +ACE_OutputCDR::set_version (ACE_CDR::Octet major, ACE_CDR::Octet minor) +{ + this->major_version_ = major; + this->minor_version_ = minor; +} + +ACE_INLINE void +ACE_OutputCDR::get_version (ACE_CDR::Octet &major, ACE_CDR::Octet &minor) +{ + major = this->major_version_; + minor = this->minor_version_; +} + + +ACE_INLINE const ACE_Message_Block* +ACE_OutputCDR::begin (void) const +{ + return &this->start_; +} + +ACE_INLINE const ACE_Message_Block* +ACE_OutputCDR::end (void) const +{ + return this->current_->cont (); +} + +ACE_INLINE const ACE_Message_Block* +ACE_OutputCDR::current (void) const +{ + return this->current_; +} + +ACE_INLINE size_t +ACE_OutputCDR::total_length (void) const +{ + return ACE_CDR::total_length (this->begin (), this->end ()); +} + +ACE_INLINE const char* +ACE_OutputCDR::buffer (void) const +{ + return this->start_.rd_ptr (); +} + +ACE_INLINE size_t +ACE_OutputCDR::length (void) const +{ + return this->start_.length (); +} + +ACE_INLINE bool +ACE_OutputCDR::do_byte_swap (void) const +{ + return this->do_byte_swap_; +} + +ACE_INLINE int +ACE_OutputCDR::byte_order (void) const +{ + if (this->do_byte_swap ()) + return !ACE_CDR_BYTE_ORDER; + else + return ACE_CDR_BYTE_ORDER; +} + +ACE_INLINE void +ACE_OutputCDR::reset_byte_order (int byte_order) +{ + this->do_byte_swap_ = (byte_order != ACE_CDR_BYTE_ORDER); +} + +ACE_INLINE size_t +ACE_OutputCDR::current_alignment (void) const +{ +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + return this->current_alignment_; +#else + // Default value set to 0 + return 0; +#endif /* ACE_LACKS_CDR_ALIGNMENT */ +} + +ACE_INLINE int +ACE_OutputCDR::align_write_ptr (size_t alignment) +{ +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + char *dummy; + return this->adjust (0, alignment, dummy); +#else + ACE_UNUSED_ARG (alignment); + // A return value of -1 from this function is used + // to indicate failure, returning 0 + return 0; +#endif /* ACE_LACKS_CDR_ALIGNMENT */ +} + +ACE_INLINE ACE_Char_Codeset_Translator * +ACE_OutputCDR::char_translator (void) const +{ + return this->char_translator_; +} + +ACE_INLINE ACE_WChar_Codeset_Translator * +ACE_OutputCDR::wchar_translator (void) const +{ + return this->wchar_translator_; +} + +ACE_INLINE void +ACE_OutputCDR::char_translator (ACE_Char_Codeset_Translator * ctran) +{ + this->char_translator_ = ctran; +} + +ACE_INLINE void +ACE_OutputCDR::wchar_translator (ACE_WChar_Codeset_Translator * wctran) +{ + this->wchar_translator_ = wctran; +} + +// **************************************************************** + +ACE_INLINE +ACE_InputCDR::~ACE_InputCDR (void) +{ +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_octet (ACE_CDR::Octet& x) +{ + return this->read_1 (&x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_boolean (ACE_CDR::Boolean& x) +{ + ACE_CDR::Octet tmp = 0; + (void) this->read_octet (tmp); + x = tmp ? true : false; + return (ACE_CDR::Boolean) this->good_bit_; +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_char (ACE_CDR::Char &x) +{ + if (this->char_translator_ == 0) + { + void *temp = &x; + return this->read_1 (reinterpret_cast (temp)); + } + return this->char_translator_->read_char (*this, x); +} + + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_short (ACE_CDR::Short &x) +{ + void *temp = &x; + return this->read_2 (reinterpret_cast (temp)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_ushort (ACE_CDR::UShort &x) +{ + return this->read_2 (&x); +} + + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_long (ACE_CDR::Long &x) +{ + void *temp = &x; + return this->read_4 (reinterpret_cast (temp)); +} + + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_ulong (ACE_CDR::ULong &x) +{ + return this->read_4 (&x); +} + + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_longlong (ACE_CDR::LongLong &x) +{ + void *temp = &x; + return this->read_8 (reinterpret_cast (temp)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_ulonglong (ACE_CDR::ULongLong &x) +{ + return this->read_8 (&x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_float (ACE_CDR::Float &x) +{ + void *temp = &x; + return this->read_4 (reinterpret_cast (temp)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_double (ACE_CDR::Double &x) +{ + void *temp = &x; + return this->read_8 (reinterpret_cast (temp)); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_longdouble (ACE_CDR::LongDouble &x) +{ + return this->read_16 (&x); +} + +ACE_INLINE size_t +ACE_InputCDR::length (void) const +{ + return this->start_.length (); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_char_array (ACE_CDR::Char* x, + ACE_CDR::ULong length) +{ + // Make sure the length of the array isn't greater than the length of + // the stream. + if (length > this->length ()) + { + this->good_bit_ = false; + return false; + } + + if (this->char_translator_ == 0) + return this->read_array (x, + ACE_CDR::OCTET_SIZE, + ACE_CDR::OCTET_ALIGN, + length); + return this->char_translator_->read_char_array (*this, x, length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_wchar_array (ACE_CDR::WChar* x, + ACE_CDR::ULong length) +{ + // Make sure the length of the array isn't greater than the length of + // the stream. + if (length * ACE_OutputCDR::wchar_maxbytes_ > this->length ()) + { + this->good_bit_ = false; + return false; + } + + if (this->wchar_translator_ != 0) + return this->wchar_translator_->read_wchar_array (*this, x, length); + if (ACE_OutputCDR::wchar_maxbytes_ != sizeof (ACE_CDR::WChar)) + return this->read_wchar_array_i (x, length); + return this->read_array (x, + sizeof (ACE_CDR::WChar), + sizeof (ACE_CDR::WChar) == 2 + ? ACE_CDR::SHORT_ALIGN + : ACE_CDR::LONG_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_octet_array (ACE_CDR::Octet* x, + ACE_CDR::ULong length) +{ + // Make sure the length of the array isn't greater than the length of + // the stream. + if (length * ACE_CDR::OCTET_SIZE > this->length ()) + { + this->good_bit_ = false; + return false; + } + + return this->read_array (x, + ACE_CDR::OCTET_SIZE, + ACE_CDR::OCTET_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_short_array (ACE_CDR::Short *x, + ACE_CDR::ULong length) +{ + // Make sure the length of the array isn't greater than the length of + // the stream. + if (length * ACE_CDR::SHORT_SIZE > this->length ()) + { + this->good_bit_ = false; + return false; + } + + return this->read_array (x, + ACE_CDR::SHORT_SIZE, + ACE_CDR::SHORT_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_ushort_array (ACE_CDR::UShort *x, + ACE_CDR::ULong length) +{ + // Make sure the length of the array isn't greater than the length of + // the stream. + if (length * ACE_CDR::SHORT_SIZE > this->length ()) + { + this->good_bit_ = false; + return false; + } + + return this->read_array (x, + ACE_CDR::SHORT_SIZE, + ACE_CDR::SHORT_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_long_array (ACE_CDR::Long *x, + ACE_CDR::ULong length) +{ + // Make sure the length of the array isn't greater than the length of + // the stream. + if (length * ACE_CDR::LONG_SIZE > this->length ()) + { + this->good_bit_ = false; + return false; + } + + return this->read_array (x, + ACE_CDR::LONG_SIZE, + ACE_CDR::LONG_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_ulong_array (ACE_CDR::ULong *x, + ACE_CDR::ULong length) +{ + // Make sure the length of the array isn't greater than the length of + // the stream. + if (length * ACE_CDR::LONG_SIZE > this->length ()) + { + this->good_bit_ = false; + return false; + } + + return this->read_array (x, + ACE_CDR::LONG_SIZE, + ACE_CDR::LONG_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_longlong_array (ACE_CDR::LongLong *x, + ACE_CDR::ULong length) +{ + // Make sure the length of the array isn't greater than the length of + // the stream. + if (length * ACE_CDR::LONGLONG_SIZE > this->length ()) + { + this->good_bit_ = false; + return false; + } + + return this->read_array (x, + ACE_CDR::LONGLONG_SIZE, + ACE_CDR::LONGLONG_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_ulonglong_array (ACE_CDR::ULongLong *x, + ACE_CDR::ULong length) +{ + // Make sure the length of the array isn't greater than the length of + // the stream. + if (length * ACE_CDR::LONGLONG_SIZE > this->length ()) + { + this->good_bit_ = false; + return false; + } + + return this->read_array (x, + ACE_CDR::LONGLONG_SIZE, + ACE_CDR::LONGLONG_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_float_array (ACE_CDR::Float *x, + ACE_CDR::ULong length) +{ + // Make sure the length of the array isn't greater than the length of + // the stream. + if (length * ACE_CDR::LONG_SIZE > this->length ()) + { + this->good_bit_ = false; + return false; + } + + return this->read_array (x, + ACE_CDR::LONG_SIZE, + ACE_CDR::LONG_ALIGN, + length); +} + + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_double_array (ACE_CDR::Double *x, + ACE_CDR::ULong length) +{ + // Make sure the length of the array isn't greater than the length of + // the stream. + if (length * ACE_CDR::LONGLONG_SIZE > this->length ()) + { + this->good_bit_ = false; + return false; + } + + return this->read_array (x, + ACE_CDR::LONGLONG_SIZE, + ACE_CDR::LONGLONG_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::read_longdouble_array (ACE_CDR::LongDouble* x, + ACE_CDR::ULong length) +{ + // Make sure the length of the array isn't greater than the length of + // the stream. + if (length * ACE_CDR::LONGDOUBLE_SIZE > this->length ()) + { + this->good_bit_ = false; + return false; + } + return this->read_array (x, + ACE_CDR::LONGDOUBLE_SIZE, + ACE_CDR::LONGDOUBLE_ALIGN, + length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::skip_octet (void) +{ + ACE_CDR::Octet x; + return this->read_1 (&x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::skip_char (void) +{ + return this->skip_octet (); // sizeof (Char) == sizeof (Octet) +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::skip_boolean (void) +{ + return this->skip_octet () && this->good_bit_; +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::skip_ushort (void) +{ + ACE_CDR::UShort x; + return this->read_2 (&x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::skip_short (void) +{ + return this->skip_ushort (); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::skip_ulong (void) +{ + ACE_CDR::ULong x; + return this->read_4 (&x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::skip_long (void) +{ + return this->skip_ulong (); // sizeof (Long) == sizeof (ULong) +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::skip_ulonglong (void) +{ + ACE_CDR::ULongLong x; + return this->read_8 (&x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::skip_longlong (void) +{ + return this->skip_ulonglong (); // sizeof (LongLong) == sizeof (ULongLong) +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::skip_float (void) +{ + return this->skip_ulong (); // sizeof(Float) == sizeof (ULong) +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::skip_double (void) +{ + return this->skip_ulonglong (); // sizeof(Double) == sizeof (ULongLong) +} + +ACE_INLINE ACE_CDR::Boolean +ACE_InputCDR::skip_longdouble (void) +{ + ACE_CDR::LongDouble x; + return this->read_16 (&x); +} + +ACE_INLINE char* +ACE_InputCDR::end (void) +{ + return this->start_.end (); +} + +ACE_INLINE void +ACE_InputCDR::rd_ptr (size_t offset) +{ + this->start_.rd_ptr (offset); +} + +ACE_INLINE char* +ACE_InputCDR::rd_ptr (void) +{ + return this->start_.rd_ptr (); +} + +ACE_INLINE char* +ACE_InputCDR::wr_ptr (void) +{ + return this->start_.wr_ptr (); +} + +ACE_INLINE int +ACE_InputCDR::adjust (size_t size, + size_t align, + char*& buf) +{ +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + buf = ACE_ptr_align_binary (this->rd_ptr (), align); +#else + buf = this->rd_ptr (); +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + + char * const end = buf + size; + if (end <= this->wr_ptr ()) + { + this->start_.rd_ptr (end); + return 0; + } + + this->good_bit_ = false; + return -1; +#if defined (ACE_LACKS_CDR_ALIGNMENT) + ACE_UNUSED_ARG (align); +#endif /* ACE_LACKS_CDR_ALIGNMENT */ +} + +ACE_INLINE int +ACE_InputCDR::adjust (size_t size, + char*& buf) +{ + return this->adjust (size, size, buf); +} + +ACE_INLINE const ACE_Message_Block* +ACE_InputCDR::start (void) const +{ + return &this->start_; +} + +ACE_INLINE bool +ACE_InputCDR::good_bit (void) const +{ + return this->good_bit_; +} + +// **************************************************************** + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, ACE_CDR::Char x) +{ + os.write_char (x); + return (ACE_CDR::Boolean) os.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, ACE_CDR::Short x) +{ + os.write_short (x); + return (ACE_CDR::Boolean) os.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, ACE_CDR::UShort x) +{ + os.write_ushort (x); + return (ACE_CDR::Boolean) os.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, ACE_CDR::Long x) +{ + os.write_long (x); + return (ACE_CDR::Boolean) os.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, ACE_CDR::ULong x) +{ + os.write_ulong (x); + return (ACE_CDR::Boolean) os.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, ACE_CDR::LongLong x) +{ + os.write_longlong (x); + return (ACE_CDR::Boolean) os.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, ACE_CDR::ULongLong x) +{ + os.write_ulonglong (x); + return (ACE_CDR::Boolean) os.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, ACE_CDR::LongDouble x) +{ + os.write_longdouble (x); + return (ACE_CDR::Boolean) os.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, ACE_CDR::Float x) +{ + os.write_float (x); + return (ACE_CDR::Boolean) os.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, ACE_CDR::Double x) +{ + os.write_double (x); + return (ACE_CDR::Boolean) os.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, const ACE_CDR::Char *x) +{ + os.write_string (x); + return (ACE_CDR::Boolean) os.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, const ACE_CDR::WChar *x) +{ + os.write_wstring (x); + return (ACE_CDR::Boolean) os.good_bit (); +} + +// The following use the helper classes +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, ACE_OutputCDR::from_boolean x) +{ + (void) os.write_boolean (x.val_); + return (ACE_CDR::Boolean) os.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, ACE_OutputCDR::from_char x) +{ + os.write_char (x.val_); + return (ACE_CDR::Boolean) os.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, ACE_OutputCDR::from_wchar x) +{ + os.write_wchar (x.val_); + return (ACE_CDR::Boolean) os.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, ACE_OutputCDR::from_octet x) +{ + os.write_octet (x.val_); + return (ACE_CDR::Boolean) os.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, ACE_OutputCDR::from_string x) +{ + ACE_CDR::ULong len = 0; + + if (x.val_ != 0) + { + len = static_cast (ACE_OS::strlen (x.val_)); + } + + os.write_string (len, x.val_); + return + (ACE_CDR::Boolean) (os.good_bit () && (!x.bound_ || len <= x.bound_)); +} + +ACE_INLINE ACE_CDR::Boolean +operator<< (ACE_OutputCDR &os, ACE_OutputCDR::from_wstring x) +{ + ACE_CDR::ULong len = 0; + + if (x.val_ != 0) + { + len = static_cast (ACE_OS::strlen (x.val_)); + } + + os.write_wstring (len, x.val_); + return + (ACE_CDR::Boolean) (os.good_bit () && (!x.bound_ || len <= x.bound_)); +} + +// **************************************************************** + +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR &is, ACE_CDR::Char &x) +{ + return is.read_char (x) && is.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR &is, ACE_CDR::Short &x) +{ + return is.read_short (x) && is.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR &is, ACE_CDR::UShort &x) +{ + return is.read_ushort (x) && is.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator>>(ACE_InputCDR &is, ACE_CDR::Long &x) +{ + return is.read_long (x) && is.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR &is, ACE_CDR::ULong &x) +{ + return is.read_ulong (x) && is.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR& is, ACE_CDR::LongLong &x) +{ + return is.read_longlong (x) && is.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR& is, ACE_CDR::ULongLong &x) +{ + return is.read_ulonglong (x) && is.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR& is, ACE_CDR::LongDouble &x) +{ + return is.read_longdouble (x) && is.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR &is, ACE_CDR::Float &x) +{ + return is.read_float (x) && is.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR &is, ACE_CDR::Double &x) +{ + return is.read_double (x) && is.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR &is, ACE_CDR::Char *&x) +{ + return is.read_string (x) && is.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR &is, ACE_CDR::WChar *&x) +{ + return is.read_wstring (x) && is.good_bit (); +} + +// The following use the helper classes +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR &is, ACE_InputCDR::to_boolean x) +{ + return is.read_boolean (x.ref_); +} + +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR &is, ACE_InputCDR::to_char x) +{ + return is.read_char (x.ref_) && is.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR &is, ACE_InputCDR::to_wchar x) +{ + return is.read_wchar (x.ref_) && is.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR &is, ACE_InputCDR::to_octet x) +{ + return is.read_octet (x.ref_) && is.good_bit (); +} + +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR &is, ACE_InputCDR::to_string x) +{ + // check if the bounds are satisfied + return + (is.read_string (const_cast (x.val_)) + && is.good_bit () + && (!x.bound_ + || ACE_OS::strlen (x.val_) <= x.bound_)); +} + +ACE_INLINE ACE_CDR::Boolean +operator>> (ACE_InputCDR &is, ACE_InputCDR::to_wstring x) +{ + // check if the bounds are satisfied + return + (is.read_wstring (const_cast (x.val_)) + && is.good_bit () + && (!x.bound_ + || ACE_OS::strlen (x.val_) <= x.bound_)); +} + +// *************************************************************************** +// We must define these methods here because they use the "read_*" inlined +// methods of the ACE_InputCDR class +// *************************************************************************** + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::append_boolean (ACE_InputCDR &stream) +{ + ACE_CDR::Boolean x; + return stream.read_boolean (x) ? this->write_boolean (x) : false; +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::append_char (ACE_InputCDR &stream) +{ + ACE_CDR::Char x; + return stream.read_char (x) ? this->write_char (x) : false; +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::append_wchar (ACE_InputCDR &stream) +{ + ACE_CDR::WChar x; + return stream.read_wchar (x) ? this->write_wchar (x) : false; +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::append_octet (ACE_InputCDR &stream) +{ + ACE_CDR::Octet x; + return stream.read_octet (x) ? this->write_octet (x) : false; +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::append_short (ACE_InputCDR &stream) +{ + ACE_CDR::Short x; + return stream.read_short (x) ? this->write_short (x) : false; +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::append_ushort (ACE_InputCDR &stream) +{ + ACE_CDR::UShort x; + return stream.read_ushort (x) ? this->write_ushort (x) : false; +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::append_long (ACE_InputCDR &stream) +{ + ACE_CDR::Long x; + return stream.read_long (x) ? this->write_long (x) : false; +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::append_ulong (ACE_InputCDR &stream) +{ + ACE_CDR::ULong x; + return stream.read_ulong (x) ? this->write_ulong (x) : false; +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::append_longlong (ACE_InputCDR &stream) +{ + ACE_CDR::LongLong x; + return stream.read_longlong (x) ? this->write_longlong (x) : false; +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::append_ulonglong (ACE_InputCDR &stream) +{ + ACE_CDR::ULongLong x; + return stream.read_ulonglong (x) ? this->write_ulonglong (x) : false; +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::append_float (ACE_InputCDR &stream) +{ + ACE_CDR::Float x; + return stream.read_float (x) ? this->write_float (x) : false; +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::append_double (ACE_InputCDR &stream) +{ + ACE_CDR::Double x; + return stream.read_double (x) ? this->write_double (x) : false; +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::append_longdouble (ACE_InputCDR &stream) +{ + ACE_CDR::LongDouble x; + return stream.read_longdouble (x) ? this->write_longdouble (x) : false; +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::append_string (ACE_InputCDR &stream) +{ + ACE_CDR::Char *x; + const ACE_CDR::Boolean flag = + (stream.read_string (x) ? this->write_string (x) : false); + delete [] x; + return flag; +} + +ACE_INLINE ACE_CDR::Boolean +ACE_OutputCDR::append_wstring (ACE_InputCDR &stream) +{ + ACE_CDR::WChar *x; + const ACE_CDR::Boolean flag = + (stream.read_wstring (x) ? this->write_wstring (x) : false); + delete [] x; + return flag; +} + +ACE_INLINE void +ACE_InputCDR::reset_byte_order (int byte_order) +{ + this->do_byte_swap_ = (byte_order != ACE_CDR_BYTE_ORDER); +} + +ACE_INLINE bool +ACE_InputCDR::do_byte_swap (void) const +{ + return this->do_byte_swap_; +} + +ACE_INLINE int +ACE_InputCDR::byte_order (void) const +{ + return this->do_byte_swap () ? !ACE_CDR_BYTE_ORDER : ACE_CDR_BYTE_ORDER; +} + +ACE_INLINE int +ACE_InputCDR::align_read_ptr (size_t alignment) +{ +#if !defined (ACE_LACKS_CDR_ALIGNMENT) + char *buf = ACE_ptr_align_binary (this->rd_ptr (), + alignment); +#else + char *buf = this->rd_ptr (); +#endif /* ACE_LACKS_CDR_ALIGNMENT */ + + if (buf <= this->wr_ptr ()) + { + this->start_.rd_ptr (buf); + return 0; + } + + this->good_bit_ = false; + return -1; +} + +ACE_INLINE void +ACE_InputCDR::set_version (ACE_CDR::Octet major, ACE_CDR::Octet minor) +{ + this->major_version_ = major; + this->minor_version_ = minor; +} + +ACE_INLINE void +ACE_InputCDR::get_version (ACE_CDR::Octet &major, ACE_CDR::Octet &minor) +{ + major = this->major_version_; + minor = this->minor_version_; +} + +ACE_INLINE ACE_Char_Codeset_Translator * +ACE_InputCDR::char_translator (void) const +{ + return this->char_translator_; +} + +ACE_INLINE ACE_WChar_Codeset_Translator * +ACE_InputCDR::wchar_translator (void) const +{ + return this->wchar_translator_; +} + + +ACE_INLINE void +ACE_InputCDR::char_translator (ACE_Char_Codeset_Translator * ctran) +{ + this->char_translator_ = ctran; +} + +ACE_INLINE void +ACE_InputCDR::wchar_translator (ACE_WChar_Codeset_Translator * wctran) +{ + this->wchar_translator_ = wctran; +} + +// **************************************************************** + +ACE_INLINE ACE_CDR::Boolean +ACE_Char_Codeset_Translator::read_1 (ACE_InputCDR& input, + ACE_CDR::Octet *x) +{ + return input.read_1 (x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_Char_Codeset_Translator::write_1 (ACE_OutputCDR& output, + const ACE_CDR::Octet *x) +{ + return output.write_1 (x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_Char_Codeset_Translator::read_array (ACE_InputCDR& in, + void* x, + size_t size, + size_t align, + ACE_CDR::ULong length) +{ + return in.read_array (x, size, align, length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_Char_Codeset_Translator::write_array (ACE_OutputCDR& out, + const void *x, + size_t size, + size_t align, + ACE_CDR::ULong length) +{ + return out.write_array(x, size, align, length); +} + +ACE_INLINE int +ACE_Char_Codeset_Translator::adjust (ACE_OutputCDR& out, + size_t size, + size_t align, + char *&buf) +{ + return out.adjust(size, align, buf); +} + +ACE_INLINE void +ACE_Char_Codeset_Translator::good_bit (ACE_OutputCDR& out, bool bit) +{ + out.good_bit_ = bit; +} + +ACE_INLINE ACE_CDR::Octet +ACE_Char_Codeset_Translator::major_version (ACE_InputCDR& input) +{ + return input.major_version_; +} + +ACE_INLINE ACE_CDR::Octet +ACE_Char_Codeset_Translator::minor_version (ACE_InputCDR& input) +{ + return input.minor_version_; +} + +ACE_INLINE ACE_CDR::Octet +ACE_Char_Codeset_Translator::major_version (ACE_OutputCDR& output) +{ + return output.major_version_; +} + +ACE_INLINE ACE_CDR::Octet +ACE_Char_Codeset_Translator::minor_version (ACE_OutputCDR& output) +{ + return output.minor_version_; +} + +// **************************************************************** + +ACE_INLINE ACE_CDR::Boolean +ACE_WChar_Codeset_Translator::read_1 (ACE_InputCDR& input, + ACE_CDR::Octet *x) +{ + return input.read_1 (x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_WChar_Codeset_Translator::read_2 (ACE_InputCDR& input, + ACE_CDR::UShort *x) +{ + return input.read_2 (x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_WChar_Codeset_Translator::read_4 (ACE_InputCDR& input, + ACE_CDR::ULong *x) +{ + return input.read_4 (x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_WChar_Codeset_Translator::write_1 (ACE_OutputCDR& output, + const ACE_CDR::Octet *x) +{ + return output.write_1 (x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_WChar_Codeset_Translator::write_2 (ACE_OutputCDR& output, + const ACE_CDR::UShort *x) +{ + return output.write_2 (x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_WChar_Codeset_Translator::write_4 (ACE_OutputCDR& output, + const ACE_CDR::ULong *x) +{ + return output.write_4 (x); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_WChar_Codeset_Translator::read_array (ACE_InputCDR& in, + void* x, + size_t size, + size_t align, + ACE_CDR::ULong length) +{ + return in.read_array (x, size, align, length); +} + +ACE_INLINE ACE_CDR::Boolean +ACE_WChar_Codeset_Translator::write_array (ACE_OutputCDR& out, + const void *x, + size_t size, + size_t align, + ACE_CDR::ULong length) +{ + return out.write_array(x, size, align, length); +} + +ACE_INLINE int +ACE_WChar_Codeset_Translator::adjust (ACE_OutputCDR& out, + size_t size, + size_t align, + char *&buf) +{ + return out.adjust(size, align, buf); +} + +ACE_INLINE void +ACE_WChar_Codeset_Translator::good_bit (ACE_OutputCDR& out, bool bit) +{ + out.good_bit_ = bit; +} + +ACE_INLINE ACE_CDR::Octet +ACE_WChar_Codeset_Translator::major_version (ACE_InputCDR& input) +{ + return input.major_version_; +} + +ACE_INLINE ACE_CDR::Octet +ACE_WChar_Codeset_Translator::minor_version (ACE_InputCDR& input) +{ + return input.minor_version_; +} + +ACE_INLINE ACE_CDR::Octet +ACE_WChar_Codeset_Translator::major_version (ACE_OutputCDR& output) +{ + return output.major_version_; +} + +ACE_INLINE ACE_CDR::Octet +ACE_WChar_Codeset_Translator::minor_version (ACE_OutputCDR& output) +{ + return output.minor_version_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/CE_Screen_Output.cpp b/ACE/ace/CE_Screen_Output.cpp new file mode 100644 index 00000000000..800cc1c0926 --- /dev/null +++ b/ACE/ace/CE_Screen_Output.cpp @@ -0,0 +1,158 @@ +// $Id$ + +#include "ace/CE_Screen_Output.h" +#if defined (ACE_HAS_WINCE) + +#include "ace/Log_Msg.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_CE_Screen_Output::ACE_CE_Screen_Output(HWND hEdit) +: handler_(hEdit) +, pFile_(0) +{ +} + +ACE_CE_Screen_Output::ACE_CE_Screen_Output() +: handler_(0) +, pFile_(0) +{ +} + +ACE_CE_Screen_Output::~ACE_CE_Screen_Output() +{ + if (pFile_ != 0) { + fclose(pFile_); + } +} + +void ACE_CE_Screen_Output::log(ACE_Log_Record &log_record) +{ + ACE_TCHAR verbose_msg[ACE_Log_Record::MAXVERBOSELOGMSGLEN]; + int result = log_record.format_msg (ACE_TEXT("WindozeCE"), // host name + 0, // verbose flag + verbose_msg); + + if (result == 0) + { + verbose_msg[ ACE_OS::strlen(verbose_msg) - 1 ] = 0; // CE does not like '\n' by itself. + *this << verbose_msg << endl; + } +} + +void ACE_CE_Screen_Output::SetOutputWindow(HWND hEdit) +{ + handler_ = hEdit; +} + +void ACE_CE_Screen_Output::clear() +{ + SetWindowText(handler_, 0); +} + +ACE_CE_Screen_Output& ACE_CE_Screen_Output::operator << (ACE_TCHAR* output) +{ + int length = GetWindowTextLength(handler_); + SendMessage(handler_, EM_SETSEL, length, length); + SendMessage(handler_, EM_REPLACESEL, 0, (LPARAM)output); + + if (pFile_ != 0) + { + fwprintf(pFile_, L"%s", output); + } + + return *this; +} + +ACE_CE_Screen_Output& ACE_CE_Screen_Output::operator << (const ACE_TCHAR* output) +{ + ACE_TCHAR* buffer = ACE_OS::strdup(output); + if (buffer != 0) + { + *this << buffer; + delete buffer; + } + return *this; +} + +ACE_CE_Screen_Output& ACE_CE_Screen_Output::operator << (ACE_ANTI_TCHAR* output) +{ + *this << ACE_TEXT_CHAR_TO_TCHAR(output); + return *this; +} + +ACE_CE_Screen_Output& ACE_CE_Screen_Output::operator << (const ACE_ANTI_TCHAR* output) +{ + *this << ACE_TEXT_CHAR_TO_TCHAR(output); + return *this; +} + +ACE_CE_Screen_Output& ACE_CE_Screen_Output::operator << (char output) +{ + *this << (int)output; + return *this; +} + +ACE_CE_Screen_Output& ACE_CE_Screen_Output::operator << (unsigned char output) +{ + *this << (int)output; + return *this; +} + +ACE_CE_Screen_Output& ACE_CE_Screen_Output::operator << (unsigned short output) +{ + ACE_TCHAR buffer[20]; + wsprintf(buffer, ACE_TEXT("%u"), output); + *this << buffer; + return *this; +} + +ACE_CE_Screen_Output& ACE_CE_Screen_Output::operator << (int output) +{ + ACE_TCHAR buffer[20]; + wsprintf(buffer, ACE_TEXT("%d"), output); + *this << buffer; + return *this; +} + +ACE_CE_Screen_Output& ACE_CE_Screen_Output::operator << (unsigned int output) +{ + ACE_TCHAR buffer[20]; + wsprintf(buffer, ACE_TEXT("%du"), output); + *this << buffer; + return *this; +} + +ACE_CE_Screen_Output& ACE_CE_Screen_Output::operator << (float output) +{ + ACE_TCHAR buffer[20]; + swprintf(buffer, ACE_TEXT("%f"), output); + *this << buffer; + return *this; +} + +ACE_CE_Screen_Output& ACE_CE_Screen_Output::operator << (long output) +{ + ACE_TCHAR buffer[20]; + wsprintf(buffer, ACE_TEXT("%l"), output); + *this << buffer; + return *this; +} + +ACE_CE_Screen_Output& ACE_CE_Screen_Output::operator << (unsigned long output) +{ + ACE_TCHAR buffer[20]; + wsprintf(buffer, ACE_TEXT("%lu"), output); + *this << buffer; + return *this; +} + +ACE_CE_Screen_Output& ACE_CE_Screen_Output::operator << (FILE* pFile) +{ + pFile_ = pFile; + return *this; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif // ACE_HAS_WINCE diff --git a/ACE/ace/CE_Screen_Output.h b/ACE/ace/CE_Screen_Output.h new file mode 100644 index 00000000000..e3ca13de295 --- /dev/null +++ b/ACE/ace/CE_Screen_Output.h @@ -0,0 +1,109 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file CE_Screen_Output.h + * + * $Id$ + * + * @author Si Mong Park + */ +//============================================================================= + +#ifndef ACE_CE_SCREEN_OUTPUT_H +#define ACE_CE_SCREEN_OUTPUT_H + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_WINCE) + +#include "ace/Log_Msg_Callback.h" +#include "ace/Log_Record.h" + +namespace +{ + const ACE_TCHAR endl[] = ACE_TEXT("\r\n"); + const ACE_TCHAR tab[] = ACE_TEXT("\t"); +} + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_CE_Screen_Output + * + * @brief Replacement of text output for Windows CE. + * + * This class allows standard text output to be displayed on + * text window for Windows CE. Generally, all ACE output will + * go through under CE if and only if user uses WindozeCE + * implementation by using main_ce instead of main. + * Also, for the easier debugging purpose, object pointer of + * this class can be gotten from ACE_Log_Msg::msg_callback() + * and then can be used directly by user just like cout stream. + */ +class ACE_Export ACE_CE_Screen_Output : public ACE_Log_Msg_Callback +{ +public: + + ACE_CE_Screen_Output (HWND hEdit); + + ACE_CE_Screen_Output (void); + + virtual ~ACE_CE_Screen_Output(); + + /// Implementation of pure virtual function from ACE_Log_Msg_Callback. + virtual void log (ACE_Log_Record &log_record); + + /// Interface to specify active window handle. + void SetOutputWindow (HWND hWnd); + + void clear (void); + + /// Stream insertion operator that performs actual print out. + /** + * @note This is the only one operator that performs output. All + * other perators convert the type and use this operator + * underneath. + */ + ACE_CE_Screen_Output& operator << (ACE_TCHAR*); + ACE_CE_Screen_Output& operator << (const ACE_TCHAR*); + + ACE_CE_Screen_Output& operator << (ACE_ANTI_TCHAR* output); + ACE_CE_Screen_Output& operator << (const ACE_ANTI_TCHAR* output); + + ACE_CE_Screen_Output& operator << (char output); + ACE_CE_Screen_Output& operator << (unsigned char output); + + ACE_CE_Screen_Output& operator << (unsigned short output); + + ACE_CE_Screen_Output& operator << (int output); + ACE_CE_Screen_Output& operator << (unsigned int output); + + ACE_CE_Screen_Output& operator << (float output); + + ACE_CE_Screen_Output& operator << (long output); + ACE_CE_Screen_Output& operator << (unsigned long output); + + ACE_CE_Screen_Output& operator << (FILE* pFile); + +private: + + ACE_CE_Screen_Output (ACE_CE_Screen_Output&); + +private: + + HWND handler_; + + /// FILE pointer that used to save output to file. This class does + /// not own the file handler pointer. + FILE* pFile_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif // ACE_HAS_WINCE +#endif // ACE_CE_SCREEN_OUTPUT_H diff --git a/ACE/ace/CORBA_macros.h b/ACE/ace/CORBA_macros.h new file mode 100644 index 00000000000..22ded9a54b3 --- /dev/null +++ b/ACE/ace/CORBA_macros.h @@ -0,0 +1,575 @@ +// -*- C++ -*- + +// ============================================================================ +/** + * @file CORBA_macros.h + * + * $Id$ + * + * Writing code that is portable between platforms with or without + * native C++ exceptions is hard. The following macros offer some + * help on this task, mostly oriented to making the ORB code and the + * IDL generated code portable. + * + * @author Nanbor Wang + * @author Aniruddha Gokhale + * @author Carlos O'Ryan , et al. + */ +// ============================================================================ + +// Macros for handling CORBA exceptions. + +#ifndef ACE_CORBA_MACROS_H +#define ACE_CORBA_MACROS_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +# if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +# endif /* ACE_LACKS_PRAGMA_ONCE */ + +#define ACE_ENV_POLLUTE_NAMES + +#include "ace/Exception_Macros.h" + +// The Windows MFC exception mechanism requires that a caught CException +// (including the CMemoryException in use here) be freed using its Delete() +// method. Thus, when MFC is in use and we're catching exceptions as a result +// of new(), the exception's Delete() method has to be called. No other +// platform imposes this sort of restriction/requirement. The Windows +// config stuff (at least for MSVC/MFC) defines a ACE_del_bad_alloc macro +// that works with its ACE_bad_alloc macro to implement this cleanup +// requirement. Since no other platform requires this, define it as +// empty here. +#if !defined (ACE_del_bad_alloc) +# define ACE_del_bad_alloc +#endif + +#if !defined (ACE_LACKS_DEPRECATED_MACROS) + +// If you wish to you use these macros for emulating exceptions on +// platforms which lack native exception support, you need to do the +// following: +// 1. Define a class Exception. You can name it as you please. This class +// should be at the root of the inheritance hierarchy of all the +// exceptions used in your application. It should define at a minimum +// the following pure virtual methods: +// a) _downcast () - Which allows narrowing of the base exception type to a +// derived type. +// b) _raise() - Which throws an exception of type Exception. +// +// Classes which derive from these should implement these operations. +// +// 2. Define a class Environment. You can name it as you please. This class +// is an exception holder. This class is always on the stack. It should +// support at a minimum the following methods: +// a) exception() - Which returns the Exception held in the current +// Environment. +// b) exception (Exception* foo) - Which replaces/sets the Exception +// held in the current Environment with foo. +// b) clear() - Which resets a particular instance of Environment. +// c) A copy constructor and an assignment operator. +// +// Note that the above description assumes that you use the following +// macros only within a particular domain. For example, if your +// application has to interoperate across domains, then you need to define +// an exception adapter to translate exceptions from one domain to +// exceptions in the other. Please refer to Stroustrup's book on how to do +// this. If your use case is this complex, you would be better off with +// going with native exceptions rather than emulated exceptions, though +// the macros should still work if you defined your adapter class as +// ACE_EXCEPTION_TYPE. + + +// The following macros assume that an environment variable is passed +// in/out of each function that can throw an exception. The type of the +// environment variable is defined by ACE_ENV_TYPE. + +#if !defined (ACE_ENV_TYPE) +# define ACE_ENV_TYPE CORBA::Environment +#endif /* ACE_ENV_TYPE */ + +// The name of the variable is defined by ACE_TRY_ENV. Below is the name +// that we use by default. If you wish to change it you can redefine +// ACE_TRY_ENV to change the default name. Also ACE_ADOPT_ENV allows the +// use of non-standard name within a scope. + +#if !defined (ACE_TRY_ENV) +# define ACE_TRY_ENV _ACE_CORBA_Environment_variable +#endif /* ACE_TRY_ENV */ + +// The base type of Exception from which all the other exception types are +// derived. You can set this to any type as you please. By default, it is +// set to CORBA::Exception. + +#if !defined (ACE_EXCEPTION_TYPE) +# define ACE_EXCEPTION_TYPE CORBA::Exception +#endif /* ACE_EXCEPTION_TYPE */ + +// This method is used to get the default value of the Environment +// variable. In the case of TAO, this variable is part of the TSS ORB +// resources and the method TAO_default_environment() returns the +// Environment variable. + +#if !defined (ACE_DEFAULT_GET_ENV_METHOD) +# define ACE_DEFAULT_GET_ENV_METHOD TAO_default_environment +#endif /* ACE_DEFAULT_GET_ENV_METHOD */ + +// This is the exception caught by ACE_CATCHANY. +#if !defined (ACE_ANY_EXCEPTION) +# define ACE_ANY_EXCEPTION ex +#endif /* ACE_ANY_EXCEPTION */ + +// Declare a new environment variable on the stack. The type of the +// environment variable is determined by ACE_ENV_TYPE. +#if defined (ACE_USES_NATIVE_EXCEPTIONS) +// Don't instantiate an emulated exception environment at all when +// using native C++ exception support. It won't be used. +# define ACE_DECLARE_NEW_ENV +#else +# define ACE_DECLARE_NEW_ENV \ + ACE_ENV_TYPE ACE_TRY_ENV +#endif /* ACE_USES_NATIVE_EXCEPTIONS */ + +// Provided for backward compatibility purposes. Don't use it in new code. +// Use the definition above along with defining ACE_ENV_TYPE. + +#if defined (ACE_ENV_POLLUTE_NAMES) +# define ACE_DECLARE_NEW_CORBA_ENV ACE_DECLARE_NEW_ENV +#endif /* ACE_ENV_POLLUTE_NAMES */ + +#if defined (ACE_USES_NATIVE_EXCEPTIONS) +// ----------------------------------------------------------------- + +// Provided for backward compatibility purposes. Don't use it in new code. +#if defined (ACE_ENV_POLLUTE_NAMES) +# define ACE_ADOPT_CORBA_ENV(ENV) +#endif /* ACE_ENV_POLLUTE_NAMES */ + +#define ACE_ADOPT_ENV (ENV) + +// No need to check. Native exceptions handle the control flow +// automatically when an exception occurs. +# define ACE_CHECK + +// Used when the function requires a return value. +# define ACE_CHECK_RETURN(RETV) + +// ACE_THROW_INT should not be used by the user. +# define ACE_THROW_INT(EXCEPTION) \ + throw EXCEPTION + +// Throwing an exception is easy. These two macros should _NOT_ be +// used within try blocks. +# define ACE_THROW(EXCEPTION) \ + throw EXCEPTION + +// Throwing an exception when the function requires a return value. +# define ACE_THROW_RETURN(EXCEPTION,RETV) \ + throw EXCEPTION + +// For compilers with native exceptions, we can simply use try to try. ;-) +// do {} while (0) is required to avoid compilation warnings. +# define ACE_TRY \ + do \ + { \ + try \ + { +# define ACE_TRY_NEW_ENV \ + do \ + { \ + try \ + { +# define ACE_TRY_EX(LABEL) \ + do \ + { \ + try \ + { + +// No need to check for exceptions within try block for compilers with +// native exceptions. +# define ACE_TRY_CHECK +# define ACE_TRY_CHECK_EX(LABEL) + +// Likewise, throwing exceptions within try blocks is easy. +# define ACE_TRY_THROW(EXCEPTION) throw EXCEPTION +# define ACE_TRY_THROW_EX(EXCEPTION,LABEL) throw EXCEPTION + +// Same thing for catch. +# define ACE_CATCH(EXCEPTION,VAR) \ + } \ + catch (EXCEPTION & VAR) \ + { \ + ACE_UNUSED_ARG (VAR); + +# define ACE_CATCHANY \ + ACE_CATCH(ACE_EXCEPTION_TYPE, ACE_ANY_EXCEPTION) + +# define ACE_CATCHALL \ + } \ + catch (...) \ + { + +# if defined (ACE_HAS_DEPRECATED_ACE_RETHROW) +# define ACE_RETHROW throw +# endif /* ACE_HAS_DEPRECATED_ACE_RETHROW */ + +// Rethrowing the exception from catch blocks. +# define ACE_RE_THROW throw +# define ACE_RE_THROW_EX(LABEL) throw + +// Close the catch block. +# define ACE_ENDTRY \ + } \ + } while (0) + +#else /* ! ACE_USES_NATIVE_EXCEPTIONS */ +// ----------------------------------------------------------------- + +// When handling compilers without native exceptions, things get a bit +// hairy. Exceptions are simulated using ACE_ENV_TYPE. The trick here is to +// make sure the flow-of-control can simulate the case when native +// exceptions occur... + +#if defined (ACE_ENV_POLLUTE_NAMES) +# define ACE_ADOPT_CORBA_ENV(ENV) ACE_ENV_TYPE &ACE_TRY_ENV = ENV +#endif /* ACE_ENV_POLLUTE_NAMES */ + +# define ACE_ADOPT_ENV(ENV) ACE_ENV_TYPE &ACE_TRY_ENV = ENV + +// Follow every statement that could throw exceptions with ACE_CHECK or +// ACE_CHECK_RETURN. These two macros should _NOT_ be used within try +// blocks. Use ACE_TRY_CHECK or ACE_TRY_CHECK_EX instead. +# define ACE_CHECK \ + if (ACE_TRY_ENV . exception () != 0) \ + return +// When function requires a return value +# define ACE_CHECK_RETURN(RETV) \ + if (ACE_TRY_ENV . exception () != 0) \ + return RETV + +// ACE_THROW_INT should not be used by the user. +# define ACE_THROW_INT(EXCEPTION) ACE_TRY_ENV.exception (new EXCEPTION) + +// Throwing exceptions will inevitably cause a return from the current +// function. These two macros should _NOT_ be used within try blocks. Use +// ACE_TRY_THROW or ACE_TRY_THROW_EX instead. +# define ACE_THROW(EXCEPTION) \ + do \ + { \ + ACE_TRY_ENV.exception (new EXCEPTION); \ + return; \ + } while (0) + +# define ACE_THROW_RETURN(EXCEPTION,RETV) \ + do \ + { \ + ACE_TRY_ENV.exception (new EXCEPTION); \ + return RETV; \ + } while (0) + +// ACE_TRY sets up flags to control program flow. ACE_TRY_FLAG acts like a +// one-shot flip-flop. When an exception occurs (detected using +// ACE_TRY_CHECK,) ACE_TRY_FLAG will be reset and the control goes back +// into ACE_TRY_LABEL. Since ACE_TRY_FLAG is reset, the try block won't get +// executed again and the control proceeds to the following catch blocks. +// ACE_EXCEPTION_NOT_CAUGHT flag is used to prevent catching an exception +// twice. This macro assumes there's already an ACE_ENV_TYPE variable +// ACE_TRY_ENV defined (which should be the case normally) +# define ACE_TRY \ + do { \ + int ACE_TRY_FLAG = 1; \ + int ACE_EXCEPTION_NOT_CAUGHT = 1; \ + ACE_TRY_LABEL: \ + if (ACE_TRY_FLAG) \ + do { + +// ACE_TRY_NEW_ENV functions like the macro ACE_TRY but defines a new +// ACE_ENV_TYPE variable ACE_TRY_ENV. It is most often used in the outer +// most function where no ACE_TRY_ENV is available. +# define ACE_TRY_NEW_ENV \ + do { \ + ACE_DECLARE_NEW_ENV;\ + int ACE_TRY_FLAG = 1; \ + int ACE_EXCEPTION_NOT_CAUGHT = 1; \ + ACE_TRY_LABEL: \ + if (ACE_TRY_FLAG) \ + do { + +// ACE_TRY_EX works exactly like ACE_TRY macro except the label used in the +// try block is customizable to avoid name clashing. It should be used when +// nested try blocks or multiple try blocks are required, in the same +// function. +# define ACE_TRY_EX(LABEL) \ + do { \ + int ACE_TRY_FLAG = 1; \ + int ACE_EXCEPTION_NOT_CAUGHT = 1; \ + ACE_TRY_LABEL ## LABEL: \ + if (ACE_TRY_FLAG) \ + do { + +// Check for exceptions within try blocks. +# define ACE_TRY_CHECK \ + { \ + if (ACE_TRY_ENV.exception () != 0) \ + { \ + ACE_TRY_FLAG = 0; \ + goto ACE_TRY_LABEL; \ + } \ + } + +// Checking exception within EX try blocks. +# define ACE_TRY_CHECK_EX(LABEL) \ + { \ + if (ACE_TRY_ENV.exception () != 0) \ + { \ + ACE_TRY_FLAG = 0; \ + goto ACE_TRY_LABEL ## LABEL; \ + } \ + } + +// Throwing exception within TRY blocks. +# define ACE_TRY_THROW(EXCEPTION) \ + { \ + ACE_TRY_ENV.exception (new EXCEPTION); \ + ACE_TRY_FLAG = 0; \ + goto ACE_TRY_LABEL; \ + } + +# define ACE_TRY_THROW_EX(EXCEPTION,LABEL) \ + { \ + ACE_TRY_ENV.exception (new EXCEPTION); \ + ACE_TRY_FLAG = 0; \ + goto ACE_TRY_LABEL ## LABEL; \ + } + +// When exceptions occur or try block finishes execution without exception, +// control will continue in the catch block. This macro first checks if +// there's any uncaught exception left. If all the conditions are met, we +// have caught an exception. It then resets ACE_EXCEPTION_NOT_CAUGHT to +// prevent subsequent catch blocks from catching the same exception again, +// and extracts out the underlying exception in ACE_TRY_ENV. We also make a +// copy of ACE_TRY_ENV in ACE_CAUGHT_ENV, in case we want to rethrow the +// exception. ACE_TRY_ENV is cleared out after the exception is caught so +// you should not use ACE_TRY_ENV within the catch block(You should use the +// exception directly). +# define ACE_CATCH(TYPE,VAR) \ + } while (0); \ + do \ + if (ACE_TRY_ENV.exception () != 0 && ACE_EXCEPTION_NOT_CAUGHT && \ + TYPE::_downcast(ACE_TRY_ENV.exception ()) != 0) \ + { \ + ACE_ENV_TYPE ACE_CAUGHT_ENV = ACE_TRY_ENV;\ + ACE_EXCEPTION_NOT_CAUGHT = 0; \ + TYPE &VAR = *TYPE::_downcast (ACE_CAUGHT_ENV.exception ()); \ + ACE_UNUSED_ARG (VAR); \ + ACE_TRY_ENV.clear (); + +// ACE_CATCHANY uses ACE_CATCH to catch all exceptions derived from +// ACE_EXCEPTION_TYPE +# define ACE_CATCHANY ACE_CATCH (ACE_EXCEPTION_TYPE, ACE_ANY_EXCEPTION) + +// Since there's no other exception for compilers without exception +// support, we simply catch all ACE_EXCEPTION_TYPE exceptions for +// ACE_CATCHALL. +# define ACE_CATCHALL ACE_CATCHANY + +# if defined (ACE_HAS_DEPRECATED_ACE_RETHROW) +# define ACE_RETHROW \ + do \ + ACE_TRY_ENV = ACE_CAUGHT_ENV; \ + while (0) +# endif /* ACE_HAS_DEPRECATED_ACE_RETHROW */ + +// Rethrowing exception within catch blocks. Notice that we depend on the +// ACE_CHECK/ACE_CHECK_RETURN following the ACE_ENDTRY, or ACE_TRY_CHECK/ +// ACE_TRY_CHECK_EX following the ACE_ENDTRY when the catch block is within +// another try block, to do the "Right Thing[TM]." +# define ACE_RE_THROW \ + do {\ + ACE_TRY_ENV = ACE_CAUGHT_ENV; \ + goto ACE_TRY_LABEL; \ + } while (0) +# define ACE_RE_THROW_EX(LABEL) \ + do {\ + ACE_TRY_ENV = ACE_CAUGHT_ENV; \ + goto ACE_TRY_LABEL ## LABEL; \ + } while (0) + +// Close the try block. Since exceptions may not get caught, and exceptions +// can also be rethrown from the catch block, it's always a good idea to +// follow ACE_ENDTRY with ACE_CHECK or ACE_TRY_CHECK (depending on the +// context.) +# define ACE_ENDTRY \ + } while (0); \ + } while (0) + +#endif /* ! ACE_USES_NATIVE_EXCEPTIONS */ + +#endif /* !ACE_LACKS_DEPRECATED_MACROS */ + +// ACE_HAS_EXCEPTIONS is not the same as ACE_NEW_THROWS_EXCEPTIONS. +#if defined(ACE_NEW_THROWS_EXCEPTIONS) + +# if defined (ACE_HAS_NEW_NOTHROW) + +# define ACE_NEW_THROW_EX(POINTER,CONSTRUCTOR,EXCEPTION) \ + do { POINTER = new (ACE_nothrow) CONSTRUCTOR; \ + if (POINTER == 0) { throw EXCEPTION; } \ + } while (0) + +# else + +# define ACE_NEW_THROW_EX(POINTER,CONSTRUCTOR,EXCEPTION) \ + do { try { POINTER = new CONSTRUCTOR; } \ + catch (ACE_bad_alloc) { ACE_del_bad_alloc throw EXCEPTION; } \ + } while (0) + +# endif /* ACE_HAS_NEW_NOTHROW */ + +#else /* ! ACE_NEW_THROWS_EXCEPTIONS */ + +# define ACE_NEW_THROW_EX(POINTER,CONSTRUCTOR,EXCEPTION) \ + do { POINTER = new CONSTRUCTOR; \ + if (POINTER == 0) { throw EXCEPTION; } \ + } while (0) + +#endif /* ACE_NEW_THROWS_EXCEPTIONS */ + +# define ACE_GUARD_THROW_EX(MUTEX,OBJ,LOCK,EXCEPTION) \ + ACE_Guard< MUTEX > OBJ (LOCK); \ + if (OBJ.locked () == 0) throw EXCEPTION; + +# define ACE_READ_GUARD_THROW_EX(MUTEX,OBJ,LOCK,EXCEPTION) \ + ACE_Read_Guard< MUTEX > OBJ (LOCK); \ + if (OBJ.locked () == 0) throw EXCEPTION; + +# define ACE_WRITE_GUARD_THROW_EX(MUTEX,OBJ,LOCK,EXCEPTION) \ + ACE_Write_Guard< MUTEX > OBJ (LOCK); \ + if (OBJ.locked () == 0) throw EXCEPTION; + +#if !defined (ACE_LACKS_DEPRECATED_MACROS) + +//@{ +/** + * @name Native C++ exceptions portability macros. + * + * The following macros are used to write code portable between platforms + * with and without native C++ exception support. Their main goal is to + * hide the presence of the ACE_ENV_TYPE argument, but they collaborate + * with the ACE_TRY_* macros to emulate the try/catch blocks. + */ + +/// Define a macro to emit code only when ACE_ENV_TYPE is used +#if !defined (ACE_USES_NATIVE_EXCEPTIONS) || defined (ACE_ENV_BKWD_COMPAT) +# define ACE_ENV_EMIT_CODE(X) X +#else +# define ACE_ENV_EMIT_CODE(X) +#endif /* ACE_USES_NATIVE_EXCEPTIONS && ! ACE_ENV_BKWD_COMPAT */ + +/// Another macro to emit code only when ACE_ENV_TYPE is used +#if !defined (ACE_USES_NATIVE_EXCEPTIONS) || defined (ACE_ENV_BKWD_COMPAT) +# define ACE_ENV_EMIT_CODE2(X,Y) X,Y +#else +# define ACE_ENV_EMIT_CODE2(X,Y) +#endif /* ACE_USES_NATIVE_EXCEPTIONS && ! ACE_ENV_BKWD_COMPAT */ + +/// Helper macro +#define ACE_ENV_EMIT_DUMMY + +/// Declare a ACE_ENV_TYPE argument as the last argument of a +/// function +/** + * Normally this macro is used as follows: + * + * void my_funct (int x, int y ACE_ENV_ARG_DECL); + * + * Its purpose is to provide developers (and users) with a mechanism to + * write code that is portable to platforms with and without native C++ + * exceptions. + */ +#define ACE_ENV_ARG_DECL \ + ACE_ENV_EMIT_CODE2(ACE_ENV_EMIT_DUMMY, \ + ACE_ENV_TYPE &ACE_TRY_ENV) + +/// Declare a ACE_ENV_TYPE argument with the default value obtained from +/// the ORB/application. +/** + * It is similar to ACE_ENV_ARG_DECL. The name of the default environment + * getter method needs to be changed when switching ORBs or when used with + * another application. + */ +#define ACE_ENV_ARG_DECL_WITH_DEFAULTS \ + ACE_ENV_EMIT_CODE2(ACE_ENV_EMIT_DUMMY, \ + ACE_ENV_TYPE &ACE_TRY_ENV = \ + ACE_DEFAULT_GET_ENV_METHOD ()) + +/// Declare a ACE_ENV_TYPE argument that is not used by the +/// function definition. +/** + * Similar to ACE_ENV_ARG_DECL, but the formal parameter name is dropped to + * avoid warnings about unused parameters + */ +#define ACE_ENV_ARG_DECL_NOT_USED \ + ACE_ENV_EMIT_CODE2(ACE_ENV_EMIT_DUMMY, \ + ACE_ENV_TYPE &) + +/// Declare a ACE_ENV_TYPE argument for methods that do not take any other +/// parameters +#define ACE_ENV_SINGLE_ARG_DECL \ + ACE_ENV_EMIT_CODE(ACE_ENV_TYPE &ACE_TRY_ENV) + +/// Declare a ACE_ENV_TYPE argument with a default value for methods that +/// do not take any other parameters. The name of the default environment +/// getter method needs to be changed when switching ORBs or when used in +/// another application. +#define ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS \ + ACE_ENV_EMIT_CODE(ACE_ENV_TYPE &ACE_TRY_ENV = \ + ACE_DEFAULT_GET_ENV_METHOD ()) + +/// Declare a ACE_ENV_TYPE argument for methods which don't use it. +#define ACE_ENV_SINGLE_ARG_DECL_NOT_USED \ + ACE_ENV_EMIT_CODE(ACE_ENV_TYPE &) + +/// Use the ACE_ENV_TYPE argument in a nested call +#define ACE_ENV_ARG_PARAMETER \ + ACE_ENV_EMIT_CODE2(ACE_ENV_EMIT_DUMMY, \ + ACE_TRY_ENV) + +/// Use the ACE_ENV_TYPE argument in a nested call, assuming that the +/// called function takes only the ACE_TRY_ENV argument. +#define ACE_ENV_SINGLE_ARG_PARAMETER \ + ACE_ENV_EMIT_CODE(ACE_TRY_ENV) + +/// Eliminate unused argument warnings about ACE_TRY_ENV +#define ACE_ENV_ARG_NOT_USED \ + ACE_ENV_EMIT_CODE(ACE_UNUSED_ARG(ACE_TRY_ENV)) +//@} + +#if !defined (ACE_USES_NATIVE_EXCEPTIONS) +// This thing can be moved above when we drop ACE_ENV_BKWD_COMPAT. +# define ACE_ENV_RAISE(ex) ACE_TRY_ENV.exception (ex) +#else +# define ACE_ENV_RAISE(ex) (ex)->_raise () +#endif /* ACE_USES_NATIVE_EXCEPTIONS */ + +// ============================================================ + +// Print out a TAO exception. This is not CORBA compliant. +# define ACE_PRINT_TAO_EXCEPTION(EX,INFO) \ + EX._tao_print_exception (INFO) + +// Print out a CORBA exception. There is not portable way to +// dump a CORBA exception. If you are using other ORB implementation, +// redefine the macro to get what you want. +# if !defined ACE_PRINT_EXCEPTION +# define ACE_PRINT_EXCEPTION(EX,INFO) ACE_PRINT_TAO_EXCEPTION(EX,INFO) +# endif /* ACE_PRINT_EXCEPTION */ + +#endif /* !ACE_LACKS_DEPRECATED_MACROS */ + +#include /**/ "ace/post.h" + +#endif /* ACE_CORBA_MACROS_H */ diff --git a/ACE/ace/Cache_Map_Manager_T.cpp b/ACE/ace/Cache_Map_Manager_T.cpp new file mode 100644 index 00000000000..b2526fcfa99 --- /dev/null +++ b/ACE/ace/Cache_Map_Manager_T.cpp @@ -0,0 +1,420 @@ +// $Id$ + +#ifndef ACE_CACHE_MAP_MANAGER_T_CPP +#define ACE_CACHE_MAP_MANAGER_T_CPP + +#include "ace/Cache_Map_Manager_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Log_Msg.h" +#include "ace/Malloc_Base.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Cache_Map_Manager_T.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_Cache_Map_Manager) + +ACE_ALLOC_HOOK_DEFINE(ACE_Cache_Map_Iterator) + +ACE_ALLOC_HOOK_DEFINE(ACE_Cache_Map_Reverse_Iterator) + +#define ACE_T1 class KEY, class VALUE, class CMAP_TYPE, class ITERATOR_IMPL, class REVERSE_ITERATOR_IMPL, class CACHING_STRATEGY, class ATTRIBUTES +#define ACE_T2 KEY, VALUE, CMAP_TYPE, ITERATOR_IMPL, REVERSE_ITERATOR_IMPL, CACHING_STRATEGY, ATTRIBUTES + +template +ACE_Cache_Map_Manager::ACE_Cache_Map_Manager (CACHING_STRATEGY &caching_s, + size_t size, + ACE_Allocator *alloc) + : caching_strategy_ (caching_s) +{ + if (this->open (size, alloc) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Cache_Map_Manager::ACE_Cache_Map_Manager"))); + +} + +template +ACE_Cache_Map_Manager::~ACE_Cache_Map_Manager (void) +{ + this->close (); +} + +template int +ACE_Cache_Map_Manager::open (size_t length, + ACE_Allocator *alloc) +{ + return this->map_.open (length, + alloc); +} + +template int +ACE_Cache_Map_Manager::close (void) +{ + return this->map_.close (); +} + +template int +ACE_Cache_Map_Manager::bind (const KEY &key, + const VALUE &value) +{ + // Insert an entry which has the and the which + // is the combination of the and the attributes of the + // caching strategy. + CACHE_VALUE cache_value (value, + this->caching_strategy_.attributes ()); + + int bind_result = this->map_.bind (key, + cache_value); + + if (bind_result != -1) + { + + int result = this->caching_strategy_.notify_bind (bind_result, + cache_value.second ()); + + if (result == -1) + { + + this->map_.unbind (key); + + // Unless the notification goes thru the bind operation is + // not complete. + bind_result = -1; + + } + + } + + return bind_result; +} + + +template int +ACE_Cache_Map_Manager::rebind (const KEY &key, + const VALUE &value) +{ + CACHE_VALUE cache_value (value, + this->caching_strategy_.attributes ()); + + int rebind_result = this->map_.rebind (key, + cache_value); + + if (rebind_result != -1) + { + + int result = this->caching_strategy_.notify_rebind (rebind_result, + cache_value.second ()); + + if (result == -1) + { + + // Make sure the unbind operation is done only when the + // notification fails after a bind which is denoted by + // rebind_result = 0 + if (rebind_result == 0) + this->map_.unbind (key); + + // Unless the notification goes thru the rebind operation is + // not complete. + rebind_result = -1; + + } + + } + + return rebind_result; +} + + +template int +ACE_Cache_Map_Manager::rebind (const KEY &key, + const VALUE &value, + VALUE &old_value) +{ + CACHE_VALUE cache_value (value, + this->caching_strategy_.attributes ()); + + CACHE_VALUE old_cache_value (old_value, + this->caching_strategy_.attributes ()); + + int rebind_result = this->map_.rebind (key, + cache_value, + old_cache_value); + + if (rebind_result != -1) + { + + int result = this->caching_strategy_.notify_rebind (rebind_result, + cache_value.second ()); + + if (result == -1) + { + + // Make sure the unbind operation is done only when the + // notification fails after a bind which is denoted by + // rebind_result = 0 + if (rebind_result == 0) + this->map_.unbind (key); + + // Unless the notification goes thru the rebind operation is + // not complete. + rebind_result = -1; + + } + else + { + + old_value = old_cache_value.first (); + + } + + } + + return rebind_result; +} + +template int +ACE_Cache_Map_Manager::rebind (const KEY &key, + const VALUE &value, + KEY &old_key, + VALUE &old_value) +{ + CACHE_VALUE cache_value (value, + this->caching_strategy_.attributes ()); + + CACHE_VALUE old_cache_value (old_value, + this->caching_strategy_.attributes ()); + + int rebind_result = this->map_.rebind (key, + cache_value, + old_key, + old_cache_value); + + if (rebind_result != -1) + { + + int result = this->caching_strategy_.notify_rebind (rebind_result, + cache_value.second ()); + + if (result == -1) + { + + // Make sure the unbind operation is done only when the + // notification fails after a bind which is denoted by + // rebind_result = 0 + if (rebind_result == 0) + this->map_.unbind (key); + + // Unless the notification goes thru the rebind operation is + // not complete. + rebind_result = -1; + + } + else + { + + old_value = old_cache_value.first (); + + } + + } + + return rebind_result; +} + +template int +ACE_Cache_Map_Manager::trybind (const KEY &key, + VALUE &value) +{ + CACHE_VALUE cache_value (value, + this->caching_strategy_.attributes ()); + + int trybind_result = this->map_.trybind (key, + cache_value); + + if (trybind_result != -1) + { + + int result = this->caching_strategy_.notify_trybind (trybind_result, + cache_value.second ()); + + if (result == -1) + { + + // If the entry has got inserted into the map, it is removed + // due to failure. + if (trybind_result == 0) + this->map_.unbind (key); + + trybind_result = -1; + + } + else + { + + // If an attempt is made to bind an existing entry the value + // is overwritten with the value from the map. + if (trybind_result == 1) + value = cache_value.first (); + + } + + } + + return trybind_result; +} + +template int +ACE_Cache_Map_Manager::find (const KEY &key, + VALUE &value) +{ + // Lookup the key and populate the . + CACHE_VALUE cache_value; + + int find_result = this->map_.find (key, + cache_value); + + if (find_result != -1) + { + + int result = this->caching_strategy_.notify_find (find_result, + cache_value.second ()); + + // Unless the find and notification operations go thru, this + // method is not successful. + if (result == -1) + find_result = -1; + else + { + + // Since the has now changed after the + // notification, we need to bind to the map again. + int rebind_result = this->map_.rebind (key, + cache_value); + if (rebind_result == -1) + find_result = -1; + else + value = cache_value.first (); + + } + + } + + return find_result; +} + +template int +ACE_Cache_Map_Manager::find (const KEY &key) +{ + // Lookup the key and populate the . + CACHE_VALUE cache_value; + + int find_result = this->map_.find (key, + cache_value); + + if (find_result != -1) + { + + int result = this->caching_strategy_.notify_find (find_result, + cache_value.second ()); + + // Unless the find and notification operations go thru, this + // method is not successful. + if (result == -1) + find_result = -1; + else + { + + // Since the has now changed after the + // notification, we need to bind to the map again. + int rebind_result = this->map_.rebind (key, + cache_value); + + if (rebind_result == -1) + find_result = -1; + + } + + } + + return find_result; +} + + +template int +ACE_Cache_Map_Manager::unbind (const KEY &key) +{ + // Remove the entry from the cache. + CACHE_VALUE cache_value; + + int unbind_result = this->map_.unbind (key, + cache_value); + + if (unbind_result != -1) + { + + int result = this->caching_strategy_.notify_unbind (unbind_result, + cache_value.second ()); + + if (result == -1) + unbind_result = -1; + + } + + return unbind_result; +} + +template int +ACE_Cache_Map_Manager::unbind (const KEY &key, + VALUE &value) +{ + // Remove the entry from the cache. + CACHE_VALUE cache_value; + + int unbind_result = this->map_.unbind (key, + cache_value); + + if (unbind_result != -1) + { + + int result = this->caching_strategy_.notify_unbind (unbind_result, + cache_value.second ()); + + if (result == -1) + unbind_result = -1; + else + value = cache_value.first (); + + } + + return unbind_result; +} + +template void +ACE_Cache_Map_Manager::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + this->map_.dump (); + + this->caching_strategy_.dump (); +#endif /* ACE_HAS_DUMP */ +} + +#undef ACE_T1 +#undef ACE_T2 + +template +ACE_Cache_Map_Iterator::~ACE_Cache_Map_Iterator (void) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_CACHE_MAP_MANAGER_T_CPP */ diff --git a/ACE/ace/Cache_Map_Manager_T.h b/ACE/ace/Cache_Map_Manager_T.h new file mode 100644 index 00000000000..0c533f7a0ae --- /dev/null +++ b/ACE/ace/Cache_Map_Manager_T.h @@ -0,0 +1,405 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Cache_Map_Manager_T.h + * + * $Id$ + * + * @author Kirthika Parameswaran + */ +//============================================================================= + +#ifndef ACE_CACHE_MAP_MANAGER_T_H +#define ACE_CACHE_MAP_MANAGER_T_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Default_Constants.h" +#include "ace/Global_Macros.h" +#include "ace/Pair_T.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Forward declaration. +class ACE_Allocator; + +#define ACE_Cache_Map_Iterator ACMI +#define ACE_Cache_Map_Reverse_Iterator ACMRI + +template +class ACE_Cache_Map_Iterator; + +template +class ACE_Cache_Map_Reverse_Iterator; + +// For linkers that cant grok long names. +#define ACE_Cache_Map_Manager ACMM + +/** + * @class ACE_Cache_Map_Manager + * + * @brief Defines a abstraction that will purge entries from a map. + * + * The will manage the map it contains + * and provide purging on demand from the map. The strategy for + * caching is decided by the user and provided to the Cache + * Manager. The Cache Manager acts as a agent and communicates + * between the Map and the Strategy for purging entries from the + * map. + * No locking mechanism provided since locking at this level + * isn't efficient. Locking has to be provided by the + * application. + */ +template +class ACE_Cache_Map_Manager +{ +public: + + // = Traits. + typedef KEY key_type; + typedef VALUE mapped_type; + typedef CMAP_TYPE map_type; + typedef CACHING_STRATEGY caching_strategy_type; + + typedef ITERATOR_IMPL ITERATOR_IMPLEMENTATION; + typedef REVERSE_ITERATOR_IMPL REVERSE_ITERATOR_IMPLEMENTATION; + + friend class ACE_Cache_Map_Iterator; + friend class ACE_Cache_Map_Reverse_Iterator; + + // = ACE-style iterator typedefs. + typedef ACE_Cache_Map_Iterator + ITERATOR; + typedef ACE_Cache_Map_Reverse_Iterator + REVERSE_ITERATOR; + + // = STL-style iterator typedefs. + typedef ITERATOR + iterator; + typedef REVERSE_ITERATOR + reverse_iterator; + + /** + * The actual value mapped to the key in the map. The + * are used by the strategy and is transparent to the user of this + * class. + */ + typedef ACE_Pair CACHE_VALUE; + + // = Initialization and termination methods. + + /// Initialize a with and + /// @a size entries. + ACE_Cache_Map_Manager (CACHING_STRATEGY &caching_strategy, + size_t size = ACE_DEFAULT_MAP_SIZE, + ACE_Allocator *alloc = 0); + + /// Close down a and release dynamically allocated + /// resources. + virtual ~ACE_Cache_Map_Manager (void); + + /// Initialize a cache with size @a length. + int open (size_t length = ACE_DEFAULT_MAP_SIZE, + ACE_Allocator *alloc = 0); + + /// Close down a cache and release dynamically allocated resources. + int close (void); + + /** + * Associate @a key with @a value. If @a key is already in the CMAP_TYPE + * then the ENTRY is not changed. Returns 0 if a new entry is bound + * successfully, returns 1 if an attempt is made to bind an existing + * entry, and returns -1 if failures occur. + */ + int bind (const KEY &key, + const VALUE &value); + + /** + * Lookup entry in the cache. If it is not found, returns -1. + * If the @a key is located in the CMAP_TYPE object, the CACHING_STRATEGY is + * notified of it via notify_find (int result, ATTRIBUTES &attribute). + * If notify_find also returns 0 (success), then this function returns + * 0 (success) and sets the cached value in @a value. + */ + int find (const KEY &key, + VALUE &value); + + /** + * Lookup entry in the cache. If it is not found, returns -1. + * If the @a key is located in the CMAP_TYPE object, the CACHING_STRATEGY is + * notified of it via notify_find (int result, ATTRIBUTES &attribute). + * If notify_find also returns 0 (success), then this function returns + * 0 (success). + */ + int find (const KEY &key); + + /** + * Reassociate the @a key with @a value. If the @a key already exists + * in the cache then returns 1, on a new bind returns 0 and returns + * -1 in case of any failures. + */ + int rebind (const KEY &key, + const VALUE &value); + + /** + * Reassociate @a key with @a value, storing the old value into the + * "out" parameter @a old_value. The function fails if @a key is not + * in the cache for caches that do not allow user specified keys. + * However, for caches that allow user specified keys, if the key is + * not in the cache, a new @a key / @a value association is created. + */ + int rebind (const KEY &key, + const VALUE &value, + VALUE &old_value); + + /** + * Reassociate @a key with @a value, storing the old key and value + * into the "out" parameters @a old_key and @a old_value. The + * function fails if @a key is not in the cache for caches that do + * not allow user specified keys. However, for caches that allow + * user specified keys, if the key is not in the cache, a new + * @a key / @a value association is created. + */ + int rebind (const KEY &key, + const VALUE &value, + KEY &old_key, + VALUE &old_value); + + /** + * Associate @a key with @a value if and only if @a key is not in the + * cache. If @a key is already in the cache, then the @a value + * parameter is overwritten with the existing value in the + * cache. Returns 0 if a new @a key / @a value association is created. + * Returns 1 if an attempt is made to bind an existing entry. This + * function fails for maps that do not allow user specified keys. + */ + int trybind (const KEY &key, + VALUE &value); + + /// Remove @a key from the cache. + int unbind (const KEY &key); + + /// Remove @a key from the cache, and return the @a value associated with + /// @a key. + int unbind (const KEY &key, + VALUE &value); + + /// Remove entries from the cache depending upon the strategy. + int purge (void); + + /// Return the current size of the cache. + size_t current_size (void) const; + + /// Return the total size of the cache. + size_t total_size (void) const; + + /// Dumps the state of the object. + void dump (void) const; + + // = STL styled iterator factory functions. + + /// Return forward iterator. + ITERATOR begin (void); + ITERATOR end (void); + + /// Return reverse iterator. + REVERSE_ITERATOR rbegin (void); + REVERSE_ITERATOR rend (void); + + /// The map managed by the Cache_Map_Manager. + CMAP_TYPE &map (void); + + /// The caching strategy used on the cache. + CACHING_STRATEGY &caching_strategy (void); + +protected: + + /// The underlying map which needs to be cached. + CMAP_TYPE map_; + + /// The strategy to be followed for caching entries in the map. + CACHING_STRATEGY &caching_strategy_; + +private: + + // = Disallow these operations. + ACE_UNIMPLEMENTED_FUNC (void operator= (const ACE_Cache_Map_Manager &)) + ACE_UNIMPLEMENTED_FUNC (ACE_Cache_Map_Manager (const ACE_Cache_Map_Manager &)) + +}; + +/** + * @class ACE_Cache_Map_Iterator + * + * @brief Defines a iterator for the Cache_Map_Manager. + * + * Implementation to be provided by the iterator of the map + * managed by the ACE_Cache_Map_Manager. + */ +template +class ACE_Cache_Map_Iterator +{ + +public: + + // = Traits. + /// The actual value mapped to the key in the cache. The + /// are used by the strategy and is transperant to the cache user. + typedef ACE_Reference_Pair + value_type; + typedef ACE_Pair + CACHE_VALUE; + + // = Initialisation and termination methods. + + ACE_Cache_Map_Iterator (const IMPLEMENTATION &iterator_impl); + + /// Copy constructor. + ACE_Cache_Map_Iterator (const ACE_Cache_Map_Iterator &rhs); + + virtual ~ACE_Cache_Map_Iterator (void); + + // = Iteration methods. + + /// assignment operator. + ACE_Cache_Map_Iterator &operator= + (const ACE_Cache_Map_Iterator &rhs); + + /// Comparision operators. + bool operator== (const ACE_Cache_Map_Iterator &rhs) const; + bool operator!= (const ACE_Cache_Map_Iterator &rhs) const; + + /// Returns a reference to the internal element @c this is pointing + /// to. + ACE_Reference_Pair operator* (void) const; + + // = STL styled iteration, compare, and reference functions. + + /// Prefix advance + ACE_Cache_Map_Iterator &operator++ (void); + + /// Postfix advance. + ACE_Cache_Map_Iterator operator++ (int); + + /// Prefix reverse. + ACE_Cache_Map_Iterator &operator-- (void); + + /// Postfix reverse. + ACE_Cache_Map_Iterator operator-- (int); + + /// Returns the iterator of the internal map in the custody of the + /// Cache_Map_Manager. + IMPLEMENTATION &iterator_implementation (void); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// The actual iterator which iterates internally on the map + /// belonging to the Cache_Map_Manager. + IMPLEMENTATION iterator_implementation_; +}; + +/** + * @class ACE_Cache_Map_Reverse_Iterator + * + * @brief Defines a reverse iterator for the Cache_Map_Manager. + * + * Implementation to be provided by the reverse iterator of the map + * managed by thr Cache_Map_manager. + */ +template +class ACE_Cache_Map_Reverse_Iterator +{ +public: + + // = Traits. + /// The actual value mapped to the key in the cache. The + /// are used by the strategy and is transperant to the cache user. + typedef ACE_Reference_Pair value_type; + typedef ACE_Pair CACHE_VALUE; + + // = Initialisation and termination methods. + + ACE_Cache_Map_Reverse_Iterator (const REVERSE_IMPLEMENTATION &iterator_impl); + + /// Copy constructor. + ACE_Cache_Map_Reverse_Iterator (const ACE_Cache_Map_Reverse_Iterator &rhs); + + ~ACE_Cache_Map_Reverse_Iterator (void); + + // = Iteration methods. + + /// Assignment operator. + ACE_Cache_Map_Reverse_Iterator &operator= + (const ACE_Cache_Map_Reverse_Iterator &rhs); + + /// Comparision operators. + bool operator== (const ACE_Cache_Map_Reverse_Iterator &rhs) const; + bool operator!= (const ACE_Cache_Map_Reverse_Iterator &rhs) const; + + /// Returns a reference to the internal element @c this is pointing + /// to. + ACE_Reference_Pair operator* (void) const; + + // = STL styled iteration, compare, and reference functions. + + /// Prefix advance + ACE_Cache_Map_Reverse_Iterator &operator++ (void); + + /// Postfix advance. + ACE_Cache_Map_Reverse_Iterator operator++ (int); + + /// Prefix reverse. + ACE_Cache_Map_Reverse_Iterator &operator-- (void); + + /// Postfix reverse. + ACE_Cache_Map_Reverse_Iterator operator-- (int); + + /// Returns the iterator of the internal map in the custody of the + /// Cache_Map_Manager. + REVERSE_IMPLEMENTATION &iterator_implementation (void); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// The actual iterator which iterates internally on the map + /// belonging to the Cache_Map_Manager. + REVERSE_IMPLEMENTATION reverse_iterator_implementation_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Cache_Map_Manager_T.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Cache_Map_Manager_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Cache_Map_Manager_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" + +#endif /* ACE_CACHE_MAP_MANAGER_T_H */ diff --git a/ACE/ace/Cache_Map_Manager_T.inl b/ACE/ace/Cache_Map_Manager_T.inl new file mode 100644 index 00000000000..ba30c528dd6 --- /dev/null +++ b/ACE/ace/Cache_Map_Manager_T.inl @@ -0,0 +1,245 @@ +// -*- C++ -*- +// +//$Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE int +ACE_Cache_Map_Manager::purge (void) +{ + return this->caching_strategy ().caching_utility ().clear_cache (this->map_, + this->caching_strategy ().purge_percent ()); +} + +template ACE_INLINE size_t +ACE_Cache_Map_Manager::current_size (void) const +{ + return this->map_.current_size (); +} + +template ACE_INLINE size_t +ACE_Cache_Map_Manager::total_size (void) const +{ + return this->map_.total_size (); +} + +template ACE_INLINE CMAP_TYPE & +ACE_Cache_Map_Manager::map (void) +{ + return this->map_; +} + +template ACE_INLINE CACHING_STRATEGY & +ACE_Cache_Map_Manager::caching_strategy (void) +{ + return this->caching_strategy_; +} + +template ACE_INLINE ACE_Cache_Map_Iterator +ACE_Cache_Map_Manager::begin (void) +{ + return ITERATOR (this->map_.begin ()); +} + +template ACE_INLINE ACE_Cache_Map_Iterator +ACE_Cache_Map_Manager::end (void) +{ + return ITERATOR (this->map_.end ()); +} + +template ACE_INLINE ACE_Cache_Map_Reverse_Iterator +ACE_Cache_Map_Manager::rbegin (void) +{ + return REVERSE_ITERATOR (this->map_.rbegin ()); +} +template ACE_INLINE ACE_Cache_Map_Reverse_Iterator +ACE_Cache_Map_Manager::rend (void) +{ + return REVERSE_ITERATOR (this->map_.rend ()); +} + +//////////////////////////////////////////////////////////////////////////////// + +template ACE_INLINE +ACE_Cache_Map_Iterator::ACE_Cache_Map_Iterator (const ACE_Cache_Map_Iterator &rhs) + : iterator_implementation_ (rhs.iterator_implementation_) +{ +} + +template ACE_INLINE ACE_Cache_Map_Iterator & +ACE_Cache_Map_Iterator::operator= (const ACE_Cache_Map_Iterator &rhs) +{ + this->iterator_implementation_ = rhs.iterator_implementation_; + return *this; +} + +template ACE_INLINE bool +ACE_Cache_Map_Iterator::operator== (const ACE_Cache_Map_Iterator &rhs) const +{ + return this->iterator_implementation_ == rhs.iterator_implementation_; +} + +template ACE_INLINE bool +ACE_Cache_Map_Iterator::operator!= (const ACE_Cache_Map_Iterator &rhs) const +{ + return this->iterator_implementation_ != rhs.iterator_implementation_; +} + +template ACE_INLINE ACE_Reference_Pair +ACE_Cache_Map_Iterator::operator* (void) const +{ + value_type retn ((*this->iterator_implementation_).ext_id_, + (*this->iterator_implementation_).int_id_.first ()); + return retn; +} + +template ACE_INLINE +ACE_Cache_Map_Iterator & +ACE_Cache_Map_Iterator::operator++ (void) +{ + ++this->iterator_implementation_; + return *this; +} + +template ACE_INLINE +ACE_Cache_Map_Iterator +ACE_Cache_Map_Iterator::operator++ (int) +{ + ACE_Cache_Map_Iterator retn = *this; + ++this->iterator_implementation_; + return retn; +} + +template ACE_INLINE +ACE_Cache_Map_Iterator & +ACE_Cache_Map_Iterator::operator-- (void) +{ + --this->iterator_implementation_; + return *this; +} + +template ACE_INLINE +ACE_Cache_Map_Iterator +ACE_Cache_Map_Iterator::operator-- (int) +{ + ACE_Cache_Map_Iterator retn = *this; + --this->iterator_implementation_; + return retn; +} + +template ACE_INLINE void +ACE_Cache_Map_Iterator::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + this->iterator_implementation_.dump (); +#endif /* ACE_HAS_DUMP */ +} + +template ACE_INLINE +ACE_Cache_Map_Iterator::ACE_Cache_Map_Iterator (const IMPLEMENTATION &iterator_impl) + : iterator_implementation_ (iterator_impl) +{ +} + +template ACE_INLINE IMPLEMENTATION & +ACE_Cache_Map_Iterator::iterator_implementation (void) +{ + return this->iterator_implementation_; +} + +//////////////////////////////////////////////////////////////////////////////// + +template ACE_INLINE +ACE_Cache_Map_Reverse_Iterator::ACE_Cache_Map_Reverse_Iterator (const ACE_Cache_Map_Reverse_Iterator &rhs) + : reverse_iterator_implementation_ (rhs.reverse_iterator_implementation_) +{ +} + +template ACE_INLINE +ACE_Cache_Map_Reverse_Iterator::~ACE_Cache_Map_Reverse_Iterator (void) +{ +} + +template ACE_INLINE ACE_Cache_Map_Reverse_Iterator & +ACE_Cache_Map_Reverse_Iterator::operator= (const ACE_Cache_Map_Reverse_Iterator &rhs) +{ + this->reverse_iterator_implementation_ = rhs.reverse_iterator_implementation_; + return *this; +} + +template ACE_INLINE bool +ACE_Cache_Map_Reverse_Iterator::operator== (const ACE_Cache_Map_Reverse_Iterator &rhs) const +{ + return this->reverse_iterator_implementation_ == rhs.reverse_iterator_implementation_; +} + +template ACE_INLINE bool +ACE_Cache_Map_Reverse_Iterator::operator!= (const ACE_Cache_Map_Reverse_Iterator &rhs) const +{ + return this->reverse_iterator_implementation_ != rhs.reverse_iterator_implementation_; +} + +template ACE_INLINE ACE_Reference_Pair +ACE_Cache_Map_Reverse_Iterator::operator* (void) const +{ + value_type retv ((*this->reverse_iterator_implementation_).ext_id_, + (*this->reverse_iterator_implementation_).int_id_.first ()); + return retv; +} + +template ACE_INLINE +ACE_Cache_Map_Reverse_Iterator & +ACE_Cache_Map_Reverse_Iterator::operator++ (void) +{ + ++this->reverse_iterator_implementation_; + return *this; +} + +template ACE_INLINE +ACE_Cache_Map_Reverse_Iterator +ACE_Cache_Map_Reverse_Iterator::operator++ (int) +{ + ACE_Cache_Map_Reverse_Iterator retn = *this; + ++this->reverse_iterator_implementation_; + return retn; +} + +template ACE_INLINE +ACE_Cache_Map_Reverse_Iterator & +ACE_Cache_Map_Reverse_Iterator::operator-- (void) +{ + --this->reverse_iterator_implementation_; + return *this; +} + +template ACE_INLINE +ACE_Cache_Map_Reverse_Iterator +ACE_Cache_Map_Reverse_Iterator::operator-- (int) +{ + ACE_Cache_Map_Reverse_Iterator retn = *this; + --this->reverse_iterator_implementation_; + return retn; +} + + +template ACE_INLINE void +ACE_Cache_Map_Reverse_Iterator::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + this->reverse_iterator_implementation_.dump (); +#endif /* ACE_HAS_DUMP */ +} + +template ACE_INLINE +ACE_Cache_Map_Reverse_Iterator::ACE_Cache_Map_Reverse_Iterator (const REVERSE_IMPLEMENTATION &iterator_impl) + : reverse_iterator_implementation_(iterator_impl) +{ +} + +template ACE_INLINE REVERSE_IMPLEMENTATION & +ACE_Cache_Map_Reverse_Iterator::iterator_implementation (void) +{ + return this->reverse_iterator_implementation_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Cached_Connect_Strategy_T.cpp b/ACE/ace/Cached_Connect_Strategy_T.cpp new file mode 100644 index 00000000000..5c4720b2085 --- /dev/null +++ b/ACE/ace/Cached_Connect_Strategy_T.cpp @@ -0,0 +1,734 @@ +//$Id$ + +#ifndef ACE_CACHED_CONNECT_STRATEGY_T_CPP +#define ACE_CACHED_CONNECT_STRATEGY_T_CPP + +#include "ace/Cached_Connect_Strategy_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/ACE.h" +#include "ace/Service_Repository.h" +#include "ace/Service_Types.h" +#include "ace/Thread_Manager.h" +#include "ace/WFMO_Reactor.h" +#include "ace/Pair_T.h" + +#define ACE_T1 class SVC_HANDLER, ACE_PEER_CONNECTOR_1, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX +#define ACE_T2 SVC_HANDLER, ACE_PEER_CONNECTOR_2, CACHING_STRATEGY, ATTRIBUTES, MUTEX + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +ACE_Cached_Connect_Strategy_Ex::ACE_Cached_Connect_Strategy_Ex +(CACHING_STRATEGY &caching_s, + ACE_Creation_Strategy *cre_s, + ACE_Concurrency_Strategy *con_s, + ACE_Recycling_Strategy *rec_s, + MUTEX *lock, + int delete_lock) + : CCSBASE (cre_s, con_s, rec_s, lock, delete_lock), + connection_cache_ (caching_s) +{ + if (this->open (cre_s, con_s, rec_s) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Cached_Connect_Strategy_Ex\n"))); +} + +template +ACE_Cached_Connect_Strategy_Ex::~ACE_Cached_Connect_Strategy_Ex (void) +{ + cleanup (); +} + + +template int +ACE_Cached_Connect_Strategy_Ex::check_hint_i +(SVC_HANDLER *&sh, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms, + ACE_Hash_Map_Entry, ACE_Pair > *&entry, + int &found) +{ + ACE_UNUSED_ARG (remote_addr); + ACE_UNUSED_ARG (timeout); + ACE_UNUSED_ARG (local_addr); + ACE_UNUSED_ARG (reuse_addr); + ACE_UNUSED_ARG (flags); + ACE_UNUSED_ARG (perms); + + found = 0; + + // Get the recycling act for the svc_handler + CONNECTION_CACHE_ENTRY *possible_entry = + (CONNECTION_CACHE_ENTRY *) sh->recycling_act (); + + // Check to see if the hint svc_handler has been closed down + if (possible_entry->ext_id_.recycle_state () == ACE_RECYCLABLE_CLOSED) + { + // If close, decrement refcount + if (possible_entry->ext_id_.decrement () == 0) + { + // If refcount goes to zero, close down the svc_handler + possible_entry->int_id_.first ()->recycler (0, 0); + possible_entry->int_id_.first ()->close (); + this->purge_i (possible_entry); + } + + // Hint not successful + found = 0; + + // Reset hint + sh = 0; + } + + // If hint is not closed, see if it is connected to the correct + // address and is recyclable + else if ((possible_entry->ext_id_.recycle_state () == ACE_RECYCLABLE_IDLE_AND_PURGABLE || + possible_entry->ext_id_.recycle_state () == ACE_RECYCLABLE_IDLE_BUT_NOT_PURGABLE) && + possible_entry->ext_id_.subject () == remote_addr) + { + // Hint successful + found = 1; + + // Tell the that it should prepare itself for + // being recycled. + this->prepare_for_recycling (sh); + + // + // Update the caching attributes directly since we don't do a + // find() on the cache map. + // + + // Indicates successful find. + int find_result = 0; + + int result = this->caching_strategy ().notify_find (find_result, + possible_entry->int_id_.second ()); + + if (result == -1) + return result; + } + else + { + // This hint will not be used. + possible_entry->ext_id_.decrement (); + + // Hint not successful + found = 0; + + // If is not connected to the correct address or is busy, + // we will not use it. + sh = 0; + } + + if (found) + entry = possible_entry; + + return 0; +} + +template int +ACE_Cached_Connect_Strategy_Ex::find_or_create_svc_handler_i +(SVC_HANDLER *&sh, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms, + ACE_Hash_Map_Entry, ACE_Pair > *&entry, + int &found) +{ + REFCOUNTED_HASH_RECYCLABLE_ADDRESS search_addr (remote_addr); + + // Try to find the address in the cache. Only if we don't find it + // do we create a new and connect it with the server. + while (this->find (search_addr, entry) != -1) + { + // We found a cached svc_handler. + // Get the cached + sh = entry->int_id_.first (); + + // Is the connection clean? + int state_result = + ACE::handle_ready (sh->peer ().get_handle (), + &ACE_Time_Value::zero, + 1, // read ready + 0, // write ready + 1);// exception ready + + if (state_result == 1) + { + + if (sh->close () == -1) + return -1; + + sh = 0; + + // Cycle it once again.. + } + else if ((state_result == -1) && (errno == ETIME)) + { + // Found!!! + // Set the flag + found = 1; + + // Tell the that it should prepare itself for + // being recycled. + if (this->prepare_for_recycling (sh) == -1) + return -1; + + return 0; + } + else + { + return -1; + } + } + + // Not found... + + // Set the flag + found = 0; + + // We need to use a temporary variable here since we are not + // allowed to change because other threads may use this + // when we let go of the lock during the OS level connect. + // + // Note that making a new svc_handler, connecting remotely, + // binding to the map, and assigning of the hint and recycler + // should be atomic to the outside world. + SVC_HANDLER *potential_handler = 0; + + // Create a new svc_handler + if (this->make_svc_handler (potential_handler) == -1) + return -1; + + // Connect using the svc_handler. + if (this->cached_connect (potential_handler, + remote_addr, + timeout, + local_addr, + reuse_addr, + flags, + perms) == -1) + { + // Close the svc handler. + potential_handler->close (0); + + return -1; + } + else + { + // Insert the new SVC_HANDLER instance into the cache. + if (this->connection_cache_.bind (search_addr, + potential_handler, + entry) == -1) + { + // Close the svc handler and reset . + potential_handler->close (0); + + return -1; + } + + // Everything succeeded as planned. Assign to + // . + sh = potential_handler; + + // Set the recycler and the recycling act + + this->assign_recycler (sh, this, entry); + } + + return 0; +} + +template int +ACE_Cached_Connect_Strategy_Ex::cached_connect (SVC_HANDLER *&sh, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms) +{ + // Actively establish the connection. This is a timed blocking + // connect. + if (this->new_connection (sh, + remote_addr, + timeout, + local_addr, + reuse_addr, + flags, + perms) == -1) + { + // If connect() failed because of timeouts, we have to reject + // the connection entirely. This is necessary since currently + // there is no way for the non-blocking connects to complete and + // for the to notify the cache of the completion of + // connect(). + + if (errno == EWOULDBLOCK || errno == ETIMEDOUT) + errno = ENOTSUP; + else if (ACE::out_of_handles (errno) || errno == EADDRINUSE) + { + // If the connect failed due to the process running out of + // file descriptors then, auto_purging of some connections + // are done from the CONNECTION_CACHE. This frees the + // descriptors which get used in the connect process and + // hence the same method is called again! + if (this->purge_connections () == -1) + return -1; + + // Try connecting again. + if (this->new_connection (sh, + remote_addr, + timeout, + local_addr, + reuse_addr, + flags, + perms) == -1) + { + if (errno == EWOULDBLOCK || errno == ETIMEDOUT) + errno = ENOTSUP; + return -1; + } + } + else + { + return -1; + } + } + + return 0; + +} + + +template int +ACE_Cached_Connect_Strategy_Ex::connect_svc_handler_i +(SVC_HANDLER *&sh, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms, + int& found) +{ + CONNECTION_CACHE_ENTRY *entry = 0; + + // Check if the user passed a hint svc_handler + if (sh != 0) + { + int result = this->check_hint_i (sh, + remote_addr, + timeout, + local_addr, + reuse_addr, + flags, + perms, + entry, + found); + if (result != 0) + return result; + } + + // If not found + if (!found) + { + int result = this->find_or_create_svc_handler_i (sh, + remote_addr, + timeout, + local_addr, + reuse_addr, + flags, + perms, + entry, + found); + + if (result != 0) + return result; + + // Increment the refcount + entry->ext_id_.increment (); + } + + // For all successful cases: mark the in the cache + // as being . Therefore recyclable is BUSY. + entry->ext_id_.recycle_state (ACE_RECYCLABLE_BUSY); + + return 0; +} + + +template int +ACE_Cached_Connect_Strategy_Ex::cache_i (const void *recycling_act) +{ + // The wonders and perils of ACT + CONNECTION_CACHE_ENTRY *entry = (CONNECTION_CACHE_ENTRY *) recycling_act; + + // Mark the in the cache as not being . + // Therefore recyclable is IDLE. + entry->ext_id_.recycle_state (ACE_RECYCLABLE_IDLE_AND_PURGABLE); + + return 0; +} + +template int +ACE_Cached_Connect_Strategy_Ex::recycle_state_i (const void *recycling_act, + ACE_Recyclable_State new_state) +{ + // The wonders and perils of ACT + CONNECTION_CACHE_ENTRY *entry = (CONNECTION_CACHE_ENTRY *) recycling_act; + + // Mark the in the cache as not being . + // Therefore recyclable is IDLE. + entry->ext_id_.recycle_state (new_state); + + return 0; +} + +template ACE_Recyclable_State +ACE_Cached_Connect_Strategy_Ex::recycle_state_i (const void *recycling_act) const +{ + // The wonders and perils of ACT + CONNECTION_CACHE_ENTRY *entry = (CONNECTION_CACHE_ENTRY *) recycling_act; + + // Mark the in the cache as not being . + // Therefore recyclable is IDLE. + return entry->ext_id_.recycle_state (); +} + +template int +ACE_Cached_Connect_Strategy_Ex::purge_i (const void *recycling_act) +{ + // The wonders and perils of ACT + CONNECTION_CACHE_ENTRY *entry = (CONNECTION_CACHE_ENTRY *) recycling_act; + + return this->connection_cache_.unbind (entry); +} + + +template int +ACE_Cached_Connect_Strategy_Ex::mark_as_closed_i (const void *recycling_act) +{ + // The wonders and perils of ACT + CONNECTION_CACHE_ENTRY *entry = (CONNECTION_CACHE_ENTRY *) recycling_act; + + // Mark the in the cache as CLOSED. + entry->ext_id_.recycle_state (ACE_RECYCLABLE_CLOSED); + + return 0; +} + +template int +ACE_Cached_Connect_Strategy_Ex::cleanup_hint_i (const void *recycling_act, + void **act_holder) +{ + // Reset the <*act_holder> in the confines and protection of the + // lock. + if (act_holder) + *act_holder = 0; + + // The wonders and perils of ACT + CONNECTION_CACHE_ENTRY *entry = (CONNECTION_CACHE_ENTRY *) recycling_act; + + // Decrement the refcount on the . + int refcount = entry->ext_id_.decrement (); + + // If the svc_handler state is closed and the refcount == 0, call + // close() on svc_handler. + if (entry->ext_id_.recycle_state () == ACE_RECYCLABLE_CLOSED && + refcount == 0) + { + entry->int_id_.first ()->recycler (0, 0); + entry->int_id_.first ()->close (); + this->purge_i (entry); + } + + return 0; +} + +template int +ACE_Cached_Connect_Strategy_Ex::purge_connections (void) +{ + return this->connection_cache_.purge (); +} + +template CACHING_STRATEGY & +ACE_Cached_Connect_Strategy_Ex::caching_strategy (void) +{ + return this->connection_cache_.caching_strategy (); +} + +template int +ACE_Cached_Connect_Strategy_Ex::find (ACE_Refcounted_Hash_Recyclable &search_addr, + ACE_Hash_Map_Entry, ACE_Pair > *&entry) +{ + typedef ACE_Hash_Map_Bucket_Iterator, + ACE_Hash, + ACE_Equal_To, + ACE_Null_Mutex> + CONNECTION_CACHE_BUCKET_ITERATOR; + + CONNECTION_CACHE_BUCKET_ITERATOR iterator (this->connection_cache_.map (), + search_addr); + + CONNECTION_CACHE_BUCKET_ITERATOR end (this->connection_cache_.map (), + search_addr, + 1); + + for (; + iterator != end; + ++iterator) + { + REFCOUNTED_HASH_RECYCLABLE_ADDRESS &addr = (*iterator).ext_id_; + + if (addr.recycle_state () != ACE_RECYCLABLE_IDLE_AND_PURGABLE && + addr.recycle_state () != ACE_RECYCLABLE_IDLE_BUT_NOT_PURGABLE) + continue; + + if (addr.subject () != search_addr.subject ()) + continue; + + entry = &(*iterator); + + // + // Update the caching attributes directly since we don't do a + // find() on the cache map. + // + + // Indicates successful find. + int find_result = 0; + + int result = this->caching_strategy ().notify_find (find_result, + entry->int_id_.second ()); + + if (result == -1) + return result; + + return 0; + } + + return -1; +} + +template void +ACE_Cached_Connect_Strategy_Ex::cleanup (void) +{ + // Excluded other threads from changing the cache while we cleanup + ACE_GUARD (MUTEX, ace_mon, *this->lock_); + + // Close down all cached service handlers. + typename CONNECTION_CACHE::ITERATOR iter = this->connection_cache_.begin (); + while (iter != this->connection_cache_.end ()) + { + if ((*iter).second () != 0) + { + // save entry for future use + CONNECTION_CACHE_ENTRY *entry = (CONNECTION_CACHE_ENTRY *) + (*iter).second ()->recycling_act (); + + // close handler + (*iter).second ()->recycler (0, 0); + (*iter).second ()->close (); + + // remember next iter + typename CONNECTION_CACHE::ITERATOR next_iter = iter; + ++next_iter; + + // purge the item from the hash + this->purge_i (entry); + + // assign next iter + iter = next_iter; + } + else + ++iter; + } +} + +ACE_ALLOC_HOOK_DEFINE(ACE_Cached_Connect_Strategy_Ex) +///////////////////////////////////////////////////////////////////////// + +template +ACE_Bounded_Cached_Connect_Strategy::ACE_Bounded_Cached_Connect_Strategy +(size_t max_size, + CACHING_STRATEGY &caching_s, + ACE_Creation_Strategy *cre_s, + ACE_Concurrency_Strategy *con_s, + ACE_Recycling_Strategy *rec_s, + MUTEX *lock, + int delete_lock) + : CCSEBASE (caching_s, cre_s, con_s, rec_s, lock, delete_lock), + max_size_ (max_size) +{ +} + +template +ACE_Bounded_Cached_Connect_Strategy::~ACE_Bounded_Cached_Connect_Strategy(void) +{ +} + +template +int +ACE_Bounded_Cached_Connect_Strategy::find_or_create_svc_handler_i +(SVC_HANDLER *&sh, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms, + ACE_Hash_Map_Entry, + ACE_Pair > *&entry, + int &found) +{ + + REFCOUNTED_HASH_RECYCLABLE_ADDRESS search_addr (remote_addr); + + // Try to find the address in the cache. Only if we don't find it + // do we create a new and connect it with the server. + while (this->find (search_addr, entry) != -1) + { + // We found a cached svc_handler. + // Get the cached + sh = entry->int_id_.first (); + + // Is the connection clean? + int state_result= ACE::handle_ready (sh->peer ().get_handle (), + &ACE_Time_Value::zero, + 1, // read ready + 0, // write ready + 1);// exception ready + + if (state_result == 1) + { + // The connection was disconnected during idle. + // close the svc_handler down. + if (sh->close () == -1) + { + ACE_ASSERT (0); + return -1; + } + sh = 0; + // and rotate once more... + } + else if ((state_result == -1) && (errno == ETIME)) + { + // Found!!! + // Set the flag + found = 1; + + // Tell the that it should prepare itself for + // being recycled. + if (this->prepare_for_recycling (sh) == -1) + { + ACE_ASSERT (0); + return -1; + } + + return 0; + } + else // some other return value or error... + { + ACE_ASSERT (0); // just to see it coming + + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("(%t)ACE_Bounded_Cached_Connect_Strategy<>::") + ACE_TEXT ("find_or_create_svc_handler_i - ") + ACE_TEXT ("error polling server socket state.\n"))); + + return -1; + } + } + + // Not found... + + // Set the flag + found = 0; + + // Check the limit of handlers... + if ((this->max_size_ > 0) && + (this->connection_cache_.current_size () >= this->max_size_)) + { + // Try to purge idle connections + if (this->purge_connections () == -1) + return -1; + + // Check limit again. + if (this->connection_cache_.current_size () >= this->max_size_) + // still too much! + return -1; + + // OK, we have room now... + } + + // We need to use a temporary variable here since we are not + // allowed to change because other threads may use this + // when we let go of the lock during the OS level connect. + // + // Note that making a new svc_handler, connecting remotely, + // binding to the map, and assigning of the hint and recycler + // should be atomic to the outside world. + SVC_HANDLER *potential_handler = 0; + + // Create a new svc_handler + if (this->make_svc_handler (potential_handler) == -1) + return -1; + + // Connect using the svc_handler. + if (this->cached_connect (potential_handler, + remote_addr, + timeout, + local_addr, + reuse_addr, + flags, + perms) == -1) + { + // Close the svc handler. + potential_handler->close (0); + return -1; + } + else + { + // Insert the new SVC_HANDLER instance into the cache. + if (this->connection_cache_.bind (search_addr, + potential_handler, + entry) == -1) + { + // Close the svc handler and reset . + potential_handler->close (0); + + return -1; + } + + // Everything succeeded as planned. Assign to + // . + sh = potential_handler; + + // Set the recycler and the recycling act + this->assign_recycler (sh, this, entry); + } + + return 0; +} + +ACE_ALLOC_HOOK_DEFINE(ACE_Bounded_Cached_Connect_Strategy) + +ACE_END_VERSIONED_NAMESPACE_DECL + +#undef ACE_T1 +#undef ACE_T2 + +#endif /* ACE_CACHED_CONNECT_STRATEGY_T_CPP */ diff --git a/ACE/ace/Cached_Connect_Strategy_T.h b/ACE/ace/Cached_Connect_Strategy_T.h new file mode 100644 index 00000000000..f5543727824 --- /dev/null +++ b/ACE/ace/Cached_Connect_Strategy_T.h @@ -0,0 +1,262 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Cached_Connect_Strategy_T.h + * + * $Id$ + * + * @author Kirthika Parameswaran + */ +//============================================================================= + +#ifndef CACHED_CONNECT_STRATEGY_T_H +#define CACHED_CONNECT_STRATEGY_T_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Strategies_T.h" +#include "ace/Hash_Cache_Map_Manager_T.h" +#include "ace/Caching_Strategies_T.h" +#include "ace/Functor_T.h" +#include "ace/Pair_T.h" + +// For linkers which cant grok long names... +#define ACE_Cached_Connect_Strategy_Ex ACCSE + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Cached_Connect_Strategy_Ex + * + * @brief A connection strategy which caches connections to peers + * (represented by SVC_HANDLER instances), thereby allowing + * subsequent re-use of unused, but available, connections. + * + * is intended to be used as a + * plug-in connection strategy for ACE_Strategy_Connector. + * It's added value is re-use of established connections and + * tweaking the role of the cache as per the caching strategy. + */ +template +class ACE_Cached_Connect_Strategy_Ex + : public ACE_Cached_Connect_Strategy +{ +public: + /// Constructor + ACE_Cached_Connect_Strategy_Ex ( + CACHING_STRATEGY &caching_s, + ACE_Creation_Strategy *cre_s = 0, + ACE_Concurrency_Strategy *con_s = 0, + ACE_Recycling_Strategy *rec_s = 0, + MUTEX *lock = 0, + int delete_lock = 0); + + /// Destructor + virtual ~ACE_Cached_Connect_Strategy_Ex (void); + + /// Explicit purging of connection entries from the connection cache. + virtual int purge_connections (void); + + /// Mark as closed (non-locking version). This is used during the cleanup of the + /// connections purged. + virtual int mark_as_closed_i (const void *recycling_act); + + /** + * Since g++ version < 2.8 arent happy with templates, this special + * method had to be devised to avoid memory leaks and perform + * cleanup of the . + */ + void cleanup (void); + + // = Typedefs for managing the map + typedef ACE_Refcounted_Hash_Recyclable + REFCOUNTED_HASH_RECYCLABLE_ADDRESS; + typedef ACE_Hash_Cache_Map_Manager, + ACE_Equal_To, + CACHING_STRATEGY, + ATTRIBUTES> + CONNECTION_CACHE; + typedef typename CONNECTION_CACHE::CACHE_ENTRY CONNECTION_CACHE_ENTRY; + typedef typename CONNECTION_CACHE::key_type KEY; + typedef typename CONNECTION_CACHE::mapped_type VALUE; + + typedef ACE_Recyclable_Handler_Cleanup_Strategy, + ACE_Hash_Map_Manager_Ex, + ACE_Hash, + ACE_Equal_To, + MUTEX> > + CLEANUP_STRATEGY; + + typedef ACE_Cached_Connect_Strategy + CCSBASE; + + // = Accessor. + CACHING_STRATEGY &caching_strategy (void); + +protected: + + /// Find an idle handle. + int find (ACE_Refcounted_Hash_Recyclable &search_addr, + ACE_Hash_Map_Entry, ACE_Pair > *&entry); + + /// Remove from cache (non-locking version). + virtual int purge_i (const void *recycling_act); + + /// Add to cache (non-locking version). + virtual int cache_i (const void *recycling_act); + + /// Get/Set (non-locking version). + virtual int recycle_state_i (const void *recycling_act, + ACE_Recyclable_State new_state); + virtual ACE_Recyclable_State recycle_state_i (const void *recycling_act) const; + + /// Cleanup hint and reset <*act_holder> to zero if . + virtual int cleanup_hint_i (const void *recycling_act, + void **act_holder); + + // = Helpers + int check_hint_i (SVC_HANDLER *&sh, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms, + ACE_Hash_Map_Entry, ACE_Pair > *&entry, + int &found); + + virtual int find_or_create_svc_handler_i (SVC_HANDLER *&sh, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms, + ACE_Hash_Map_Entry, ACE_Pair > *&entry, + int &found); + + virtual int connect_svc_handler_i (SVC_HANDLER *&sh, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms, + int &found); + + /** + * Connection of the svc_handler with the remote host. This method + * also encapsulates the connection done with auto_purging under the + * hood. If the connect failed due to the process running out of + * file descriptors then, auto_purging of some connections are done + * from the CONNECTION_CACHE. This frees the descriptors which get + * used in the connect process and hence the connect operation can + * succeed. + */ + virtual int cached_connect (SVC_HANDLER *&sh, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms); + + /// Table that maintains the cache of connected SVC_HANDLERs. + CONNECTION_CACHE connection_cache_; +}; + +///////////////////////////////////////////////////////////////////////////// + +// For linkers which cant grok long names... +#define ACE_Bounded_Cached_Connect_Strategy ABCCS + +/** + * @class ACE_Bounded_Cached_Connect_Strategy + * + * @brief A connection strategy which caches connections to peers + * (represented by SVC_HANDLER instances), thereby allowing + * subsequent re-use of unused, but available, connections. + * This strategy should be used when the cache is bounded by + * maximum size. + * + * is intended to be used as a + * plug-in connection strategy for ACE_Strategy_Connector. + * It's added value is re-use of established connections and + * tweaking the role of the cache as per the caching strategy. + * Thanks to Edan Ayal for contributing this + * class and Susan Liebeskind for + * brainstorming about it. + */ +template +class ACE_Bounded_Cached_Connect_Strategy + : public ACE_Cached_Connect_Strategy_Ex +{ + + typedef ACE_Cached_Connect_Strategy_Ex + CCSEBASE; + + // = Typedefs for managing the map + typedef ACE_Refcounted_Hash_Recyclable + REFCOUNTED_HASH_RECYCLABLE_ADDRESS; + +public: + + /// Constructor + ACE_Bounded_Cached_Connect_Strategy (size_t max_size, + CACHING_STRATEGY &caching_s, + ACE_Creation_Strategy *cre_s = 0, + ACE_Concurrency_Strategy *con_s = 0, + ACE_Recycling_Strategy *rec_s = 0, + MUTEX *lock = 0, + int delete_lock = 0); + + /// Destructor + virtual ~ACE_Bounded_Cached_Connect_Strategy (void); + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + + virtual int find_or_create_svc_handler_i (SVC_HANDLER *&sh, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms, + ACE_Hash_Map_Entry, + ACE_Pair > *&entry, + int &found); + +protected: + + /// max items in the cache, used as a bound for the creation of svc_handlers. + size_t max_size_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Cached_Connect_Strategy_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Cached_Connect_Strategy_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" +#endif /* CACHED_CONNECT_STRATEGY_T_H */ diff --git a/ACE/ace/Caching_Strategies_T.cpp b/ACE/ace/Caching_Strategies_T.cpp new file mode 100644 index 00000000000..db2f9067ec9 --- /dev/null +++ b/ACE/ace/Caching_Strategies_T.cpp @@ -0,0 +1,59 @@ +//$Id$ + +#ifndef ACE_CACHING_STRATEGIES_T_CPP +#define ACECACHING_STRATEGIES_T_CPP + +#include "ace/Caching_Strategies_T.h" +#include "ace/Log_Msg.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Caching_Strategies_T.inl" +#endif /* __ACE_INLINE__ */ + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +ACE_Caching_Strategy::~ACE_Caching_Strategy (void) +{ +} + +////////////////////////////////////////////////////////////////////////////////// + +template +ACE_LRU_Caching_Strategy::ACE_LRU_Caching_Strategy (void) + : timer_ (0), + purge_percent_ (10) +{ +} + +//////////////////////////////////////////////////////////////////////////////////////////////// + +template +ACE_LFU_Caching_Strategy::ACE_LFU_Caching_Strategy (void) + : purge_percent_ (10) +{ +} + +//////////////////////////////////////////////////////////////////////////////////////////////// + +template +ACE_FIFO_Caching_Strategy::ACE_FIFO_Caching_Strategy (void) + : order_ (0), + purge_percent_ (10) +{ +} + +//////////////////////////////////////////////////////////////////////////////////////////////// + +ACE_ALLOC_HOOK_DEFINE(ACE_LRU_Caching_Strategy) +ACE_ALLOC_HOOK_DEFINE(ACE_LFU_Caching_Strategy) +ACE_ALLOC_HOOK_DEFINE(ACE_FIFO_Caching_Strategy) +ACE_ALLOC_HOOK_DEFINE(ACE_Null_Caching_Strategy) + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_CACHING_STRATEGIES_T_CPP */ diff --git a/ACE/ace/Caching_Strategies_T.h b/ACE/ace/Caching_Strategies_T.h new file mode 100644 index 00000000000..6d23824ba31 --- /dev/null +++ b/ACE/ace/Caching_Strategies_T.h @@ -0,0 +1,552 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Caching_Strategies_T.h + * + * $Id$ + * + * @author Kirthika Parameswaran + */ +//============================================================================= + +#ifndef ACE_CACHING_STRATEGIES_H +#define ACE_CACHING_STRATEGIES_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" +#include "ace/Caching_Utility_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined(_MSC_VER) +#pragma warning(disable:4503) +#endif /* _MSC_VER */ + +// For linkers that cant grok long names. +#define ACE_Caching_Strategy ACS + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Caching_Strategy + * + * @brief This class is an abstract base class for a caching strategy. + * + * This class consists of all the interfaces a caching strategy should + * have and is used in association with the + * ACE_Caching_Strategy_Adaptor. + */ +template +class ACE_Caching_Strategy +{ +public: + /// Destructor. + virtual ~ACE_Caching_Strategy (void); + + /// Accessor method for the timer attributes. + virtual ATTRIBUTES attributes (void) = 0; + + /// Get the percentage of entries to purge. + virtual double purge_percent (void) = 0; + + /// Set the percentage of entries to purge. + virtual void purge_percent (double percentage) = 0; + + // = Strategy related Operations + + /// This method acts as a notification about the CONTAINERs bind + /// method call. + virtual int notify_bind (int result, + const ATTRIBUTES &attr) = 0; + + /// This method acts as a notification about the CONTAINERs find + /// method call + virtual int notify_find (int result, + ATTRIBUTES &attr) = 0; + + /// This method acts as a notification about the CONTAINERs unbind + /// method call + virtual int notify_unbind (int result, + const ATTRIBUTES &attr) = 0; + + /// This method acts as a notification about the CONTAINERs trybind + /// method call + virtual int notify_trybind (int result, + ATTRIBUTES &attr) = 0; + + /// This method acts as a notification about the CONTAINERs rebind + /// method call + virtual int notify_rebind (int result, + const ATTRIBUTES &attr) = 0; + + /// Purge the cache. + virtual CACHING_UTILITY &caching_utility (void) = 0; + + /// Dumps the state of the object. + virtual void dump (void) const = 0; +}; + +////////////////////////////////////////////////////////////////////////// + +#define ACE_Caching_Strategy_Adapter ACSA + +/** + * @class ACE_Caching_Strategy_Adapter + * + * @brief This class follows the Adaptor pattern and is used to provide + * External Polymorphism by deriving from ACE_Caching_Strategy. + * + * This class simply delegates all requests to the + * IMPLEMNETATION object within. This class should be passed in + * place of the the abstract base ACE_Caching_Strategy class as + * part of the External Polymorphism pattern. + */ +template +class ACE_Caching_Strategy_Adapter + : public ACE_Caching_Strategy +{ + +public: + + /// Constructor. + ACE_Caching_Strategy_Adapter (IMPLEMENTATION *implementation = 0, + bool delete_implementation = false); + + /// Destructor. + ~ACE_Caching_Strategy_Adapter (void); + + /// Accessor method for the timer attributes. + ATTRIBUTES attributes (void); + + /// Get the percentage of entries to purge. + double purge_percent (void); + + /// Set the percentage of entries to purge. + void purge_percent (double percentage); + + // = Strategy related Operations + + /// This method acts as a notification about the CONTAINERs bind + /// method call. + int notify_bind (int result, + const ATTRIBUTES &attr); + + /// This method acts as a notification about the CONTAINERs find + /// method call + int notify_find (int result, + ATTRIBUTES &attr); + + /// This method acts as a notification about the CONTAINERs unbind + /// method call + int notify_unbind (int result, + const ATTRIBUTES &attr); + + /// This method acts as a notification about the CONTAINERs trybind + /// method call + int notify_trybind (int result, + ATTRIBUTES &attr); + + /// This method acts as a notification about the CONTAINERs rebind + /// method call + int notify_rebind (int result, + const ATTRIBUTES &attr); + + /// Accessor to the implementation. + IMPLEMENTATION &implementation (void); + + /// Purge the cache. + CACHING_UTILITY &caching_utility (void); + + /// Dumps the state of the object. + void dump (void) const; + +private: + + /// Implementation class. + IMPLEMENTATION *implementation_; + + /// Do we need to delete the implementation? + bool delete_implementation_; +}; + +////////////////////////////////////////////////////////////////////////// +#define ACE_LRU_Caching_Strategy ALRU + +/** + * @class ACE_LRU_Caching_Strategy + * + * @brief Defines a Least Recently Used strategy which will decide on + * the item to be removed from the cache. + * + * This is a strategy which makes use of a virtual timer which + * is updated whenever an item is inserted or looked up in the + * container. When the need of purging entries arises, the items + * with the lowest timer values are removed. + * Explanation of the template parameter list: + * CONTAINER is any map with entries of type . + * The ATTRIBUTES are the deciding factor for purging of entries + * and should logically be included with the VALUE. Some ways of + * doing this are: As being a member of the VALUE or VALUE being + * ACE_Pair. The CACHING_UTILITY is the + * class which can be plugged in and which decides the entries + * to purge. + */ +template +class ACE_LRU_Caching_Strategy +{ +public: + + // Traits. + typedef ATTRIBUTES CACHING_ATTRIBUTES; + + // = Initialisation and termination. + + /** + * The is the map in which the entries reside. The + * timer attribute is initialed to zero in this constructor. And + * the field denotes the percentage of the entries + * in the cache which can be purged automagically and by default is + * set to 10%. + */ + ACE_LRU_Caching_Strategy (void); + + // = Operations of the strategy. + + /// Accessor method for the timer attributes. + ATTRIBUTES attributes (void); + + /// Get the percentage of entries to purge. + double purge_percent (void); + + /// Set the percentage of entries to purge. + void purge_percent (double percentage); + + // = Strategy related Operations + + /// This method acts as a notification about the CONTAINERs bind + /// method call. + int notify_bind (int result, + const ATTRIBUTES &attr); + + /// This method acts as a notification about the CONTAINERs find + /// method call + int notify_find (int result, + ATTRIBUTES &attr); + + /// This method acts as a notification about the CONTAINERs unbind + /// method call + int notify_unbind (int result, + const ATTRIBUTES &attr); + + + /// This method acts as a notification about the CONTAINERs trybind + /// method call + int notify_trybind (int result, + ATTRIBUTES &attr); + + /// This method acts as a notification about the CONTAINERs rebind + /// method call + int notify_rebind (int result, + const ATTRIBUTES &attr); + + /// Purge the cache. + CACHING_UTILITY &caching_utility (void); + + /// Dumps the state of the object. + void dump (void) const; + +private: + + /// This element is the one which is the deciding factor for purging + /// of an ITEM. + ATTRIBUTES timer_; + + /// The level about which the purging will happen automagically. + double purge_percent_; + + /// This is the helper class which will decide and expunge entries + /// from the cache. + CACHING_UTILITY caching_utility_; +}; + +////////////////////////////////////////////////////////////////////////// +#define ACE_LFU_Caching_Strategy ALFU + +/** + * @class ACE_LFU_Caching_Strategy + * + * @brief Defines a Least Frequently Used strategy for which will decide on + * the item to be removed from the cache. + * + * A attribute is tagged to each item which increments whenever + * the item is bound or looked up in the cache. Thus it denotes + * the frequency of use. According to the value of the attribute + * the item is removed from the CONTAINER i.e cache. + * Explanation of the template parameter list: + * CONTAINER is any map with entries of type . + * The ATTRIBUTES are the deciding factor for purging of entries + * and should logically be included with the VALUE. Some ways of + * doing this are: As being a member of the VALUE or VALUE being + * ACE_Pair. The CACHING_UTILITY is the + * class which can be plugged in and which decides the entries + * to purge. + */ +template +class ACE_LFU_Caching_Strategy +{ + +public: + + // Traits. + typedef ATTRIBUTES CACHING_ATTRIBUTES; + + // = Initialisation and termination methods. + + /** + * The is the map in which the entries reside. The + * timer attribute is initialed to zero in this constructor. And + * the field denotes the percentage of the entries + * in the cache which can be purged automagically and by default is + * set to 10%. + */ + ACE_LFU_Caching_Strategy (void); + + // = Strategy methods. + + /// Access the attributes. + ATTRIBUTES attributes (void); + + /// Get the percentage of entries to purge. + double purge_percent (void); + + /// Set the percentage of entries to purge. + void purge_percent (double percentage); + + // = Strategy related Operations + + /// This method acts as a notification about the CONTAINERs bind + /// method call. + int notify_bind (int result, + const ATTRIBUTES &attr); + + /// Lookup notification. + int notify_find (int result, + ATTRIBUTES &attr); + + /// This method acts as a notification about the CONTAINERs unbind + /// method call + int notify_unbind (int result, + const ATTRIBUTES &attr); + + /// This method acts as a notification about the CONTAINERs trybind + /// method call + int notify_trybind (int result, + ATTRIBUTES &attr); + + /// This method acts as a notification about the CONTAINERs rebind + /// method call + int notify_rebind (int result, + const ATTRIBUTES &attr); + + /// Purge the cache. + CACHING_UTILITY &caching_utility (void); + + /// Dumps the state of the object. + void dump (void) const; + +private: + + /// The level about which the purging will happen automagically. + double purge_percent_; + + /// This is the helper class which will decide and expunge entries + /// from the cache. + CACHING_UTILITY caching_utility_; +}; + +///////////////////////////////////////////////////////////// +#define ACE_FIFO_Caching_Strategy AFIFO + +/** + * @class ACE_FIFO_Caching_Strategy + * + * @brief The First In First Out strategy is implemented wherein each + * item is ordered. + * + * The order tag of each item is used to decide the item to be + * removed from the cache. The items with least order are removed. + * Explanation of the template parameter list: + * CONTAINER is any map with entries of type . + * The ATTRIBUTES are the deciding factor for purging of entries + * and should logically be included with the VALUE. Some ways of + * doing this are: As being a member of the VALUE or VALUE being + * ACE_Pair. The CACHING_UTILITY is the + * class which can be plugged in and which decides the entries + * to purge. + */ +template +class ACE_FIFO_Caching_Strategy +{ + +public: + + typedef ATTRIBUTES CACHING_ATTRIBUTES; + + // = Initialisation and termination. + + /** + * The is the map in which the entries reside. The + * timer attribute is initialed to zero in this constructor. And + * the field denotes the percentage of the entries + * in the cache which can be purged automagically and by default is + * set to 10%. + */ + ACE_FIFO_Caching_Strategy (void); + + // = Strategy methods. + + /// Accessor method. + ATTRIBUTES attributes (void); + + /// Get the percentage of entries to purge. + double purge_percent (void); + + /// Set the percentage of entries to purge. + void purge_percent (double percentage); + + // = Strategy related Operations + + /// Notification for an item getting bound into the cache. + int notify_bind (int result, + const ATTRIBUTES &attr); + + /// This method acts as a notification about the CONTAINERs find + /// method call + int notify_find (int result, + ATTRIBUTES &attr); + + /// This method acts as a notification about the CONTAINERs unbind + /// method call + int notify_unbind (int result, + const ATTRIBUTES &attr); + + /// This method acts as a notification about the CONTAINERs trybind + /// method call + int notify_trybind (int result, + ATTRIBUTES &attr); + + /// Notification for an item getting bound again into the cache. + int notify_rebind (int result, + const ATTRIBUTES &attr); + + /// Purge the cache. + CACHING_UTILITY &caching_utility (void); + + /// Dumps the state of the object. + void dump (void) const; + +private: + + /// The order is the deciding factor for the item to be removed from + /// the cache. + ATTRIBUTES order_; + + /// The level about which the purging will happen automagically. + double purge_percent_; + + /// This is the helper class which will decide and expunge entries + /// from the cache. + CACHING_UTILITY caching_utility_; +}; + +////////////////////////////////////////////////////////////////////// +#define ACE_Null_Caching_Strategy ANULL + +/** + * @class ACE_Null_Caching_Strategy + * + * @brief The is a special caching strategy which doesnt have the purging + * feature. + * + * No purging provided. To be used when purging might be too expensive + * an operation. + */ +template +class ACE_Null_Caching_Strategy +{ + +public: + + // = Traits. + typedef ATTRIBUTES CACHING_ATTRIBUTES; + + // = Strategy methods. All are NO_OP methods!!! + + /// Accessor method. + ATTRIBUTES attributes (void); + + /// Get the percentage of entries to purge. + double purge_percent (void); + + /// Set the percentage of entries to purge. + void purge_percent (double percentage); + + // = Strategy related Operations + + /// Notification for an item getting bound into the cache. + int notify_bind (int result, + const ATTRIBUTES &attr); + + /// This method acts as a notification about the CONTAINERs find + /// method call + int notify_find (int result, + ATTRIBUTES &attr); + + /// This method acts as a notification about the CONTAINERs unbind + /// method call + int notify_unbind (int result, + const ATTRIBUTES &attr); + + /// This method acts as a notification about the CONTAINERs trybind + /// method call + int notify_trybind (int result, + ATTRIBUTES &attr); + + /// Notification for an item getting bound again into the cache. + int notify_rebind (int result, + const ATTRIBUTES &attr); + + /// Purge the cache. + CACHING_UTILITY &caching_utility (void); + + /// Dumps the state of the object. + void dump (void) const; + +private: + + /// This is the helper class which will decide and expunge entries + /// from the cache. + CACHING_UTILITY caching_utility_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Caching_Strategies_T.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Caching_Strategies_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Caching_Strategies_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" + +#endif /* ACE_CACHING_STRATEGIES_H */ diff --git a/ACE/ace/Caching_Strategies_T.inl b/ACE/ace/Caching_Strategies_T.inl new file mode 100644 index 00000000000..69f1ac99807 --- /dev/null +++ b/ACE/ace/Caching_Strategies_T.inl @@ -0,0 +1,456 @@ +// -*-C++-*- +// +//$Id$ + +////////////////////////////////////////////////////////////////////////////////// + +#include "ace/OS_Memory.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE +ACE_Caching_Strategy_Adapter::ACE_Caching_Strategy_Adapter (IMPLEMENTATION *implementation, + bool delete_implementation) + : implementation_ (implementation), + delete_implementation_ (delete_implementation) +{ + if (this->implementation_ == 0) + { + ACE_NEW (this->implementation_, + IMPLEMENTATION); + this->delete_implementation_ = true; + } +} + +template ACE_INLINE +ACE_Caching_Strategy_Adapter::~ACE_Caching_Strategy_Adapter (void) +{ + if (this->delete_implementation_) + { + delete this->implementation_; + this->delete_implementation_ = false; + this->implementation_ = 0; + } +} + +template ACE_INLINE ATTRIBUTES +ACE_Caching_Strategy_Adapter::attributes (void) +{ + return this->implementation_->attributes (); +} + +template ACE_INLINE double +ACE_Caching_Strategy_Adapter::purge_percent (void) +{ + return this->implementation_->purge_percent (); +} + +template ACE_INLINE void +ACE_Caching_Strategy_Adapter::purge_percent (double percentage) +{ + this->implementation_->purge_percent (percentage); +} + +template ACE_INLINE int +ACE_Caching_Strategy_Adapter::notify_bind (int result, + const ATTRIBUTES &attr) +{ + return this->implementation_->notify_bind (result, + attr); +} + +template ACE_INLINE int +ACE_Caching_Strategy_Adapter::notify_find (int result, + ATTRIBUTES &attr) +{ + return this->implementation_->notify_find (result, + attr); +} + +template ACE_INLINE int +ACE_Caching_Strategy_Adapter::notify_unbind (int result, + const ATTRIBUTES &attr) +{ + return this->implementation_->notify_unbind (result, + attr); +} + +template ACE_INLINE int +ACE_Caching_Strategy_Adapter::notify_trybind (int result, + ATTRIBUTES &attr) +{ + return this->implementation_->notify_trybind (result, + attr); +} + +template ACE_INLINE int +ACE_Caching_Strategy_Adapter::notify_rebind (int result, + const ATTRIBUTES &attr) +{ + return this->implementation_->notify_rebind (result, + attr); +} + +template ACE_INLINE IMPLEMENTATION & +ACE_Caching_Strategy_Adapter::implementation (void) +{ + return *this->implementation_; +} + +template ACE_INLINE CACHING_UTILITY & +ACE_Caching_Strategy_Adapter::caching_utility (void) +{ + return this->implementation_->caching_utility (); +} + +template ACE_INLINE void +ACE_Caching_Strategy_Adapter::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Caching_Strategy_Adapter::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +////////////////////////////////////////////////////////////////////////////////// + +template ACE_INLINE ATTRIBUTES +ACE_LRU_Caching_Strategy::attributes (void) +{ + return this->timer_; +} + +template ACE_INLINE double +ACE_LRU_Caching_Strategy::purge_percent (void) +{ + return this->purge_percent_; +} + +template ACE_INLINE void +ACE_LRU_Caching_Strategy::purge_percent (double percentage) +{ + this->purge_percent_ = percentage; +} + +template ACE_INLINE int +ACE_LRU_Caching_Strategy::notify_bind ( + int result, + const ATTRIBUTES & /* attr */) +{ + if (result == 0) + ++this->timer_; + + return result; +} + +template ACE_INLINE int +ACE_LRU_Caching_Strategy::notify_find ( + int result, + ATTRIBUTES &attr) +{ + if (result == 0) + { + attr = this->timer_; + ++this->timer_; + } + + return result; +} + +template ACE_INLINE int +ACE_LRU_Caching_Strategy::notify_unbind ( + int result, + const ATTRIBUTES & /* attr */) +{ + return result; +} + +template ACE_INLINE int +ACE_LRU_Caching_Strategy::notify_trybind ( + int result, + ATTRIBUTES & /* attr */) +{ + return result; +} + +template ACE_INLINE int +ACE_LRU_Caching_Strategy::notify_rebind ( + int result, + const ATTRIBUTES & /* attr */) +{ + if (result == 0) + ++this->timer_; + + return result; +} + +template ACE_INLINE CACHING_UTILITY & +ACE_LRU_Caching_Strategy::caching_utility (void) +{ + return this->caching_utility_; +} + +template ACE_INLINE void +ACE_LRU_Caching_Strategy::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_LRU_Caching_Strategy::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("timer_ = %d "), this->timer_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +////////////////////////////////////////////////////////////////////////////////// + +template ACE_INLINE ATTRIBUTES +ACE_LFU_Caching_Strategy::attributes (void) +{ + return 0; +} + +template ACE_INLINE double +ACE_LFU_Caching_Strategy::purge_percent (void) +{ + return this->purge_percent_; +} + +template ACE_INLINE void +ACE_LFU_Caching_Strategy::purge_percent (double percentage) +{ + this->purge_percent_ = percentage; +} + +template ACE_INLINE int +ACE_LFU_Caching_Strategy::notify_bind (int result, + const ATTRIBUTES & /* attr */) +{ + + return result; +} + +template ACE_INLINE int +ACE_LFU_Caching_Strategy::notify_find (int result, + ATTRIBUTES &attr) +{ + if (result == 0) + ++attr; + + return result; +} + +template ACE_INLINE int +ACE_LFU_Caching_Strategy::notify_trybind (int result, + ATTRIBUTES & /* attr */) +{ + return result; +} + +template ACE_INLINE int +ACE_LFU_Caching_Strategy::notify_rebind (int result, + const ATTRIBUTES & /* attr */) +{ + return result; +} + +template ACE_INLINE int +ACE_LFU_Caching_Strategy::notify_unbind (int result, + const ATTRIBUTES & /* attr */) +{ + return result; +} + +template ACE_INLINE CACHING_UTILITY & +ACE_LFU_Caching_Strategy::caching_utility (void) +{ + return this->caching_utility_; +} + +template ACE_INLINE void +ACE_LFU_Caching_Strategy::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_LFU_Caching_Strategy::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +////////////////////////////////////////////////////////////////////////////////////// + +template ACE_INLINE ATTRIBUTES +ACE_FIFO_Caching_Strategy::attributes (void) +{ + return this->order_; +} + +template ACE_INLINE double +ACE_FIFO_Caching_Strategy::purge_percent (void) +{ + return this->purge_percent_; +} + +template ACE_INLINE void +ACE_FIFO_Caching_Strategy::purge_percent (double percentage) +{ + this->purge_percent_ = percentage; +} + +template ACE_INLINE int +ACE_FIFO_Caching_Strategy::notify_bind (int result, + const ATTRIBUTES &attr) +{ + ACE_UNUSED_ARG (attr); + + if (result == 0) + ++this->order_; + + return result; +} + +template ACE_INLINE int +ACE_FIFO_Caching_Strategy::notify_find (int result, + ATTRIBUTES &attr) +{ + ACE_UNUSED_ARG (attr); + + return result; +} + +template ACE_INLINE int +ACE_FIFO_Caching_Strategy::notify_unbind (int result, + const ATTRIBUTES &attr) +{ + ACE_UNUSED_ARG (attr); + + return result; +} + +template ACE_INLINE int +ACE_FIFO_Caching_Strategy::notify_trybind (int result, + ATTRIBUTES &attr) +{ + ACE_UNUSED_ARG (attr); + + return result; +} + +template ACE_INLINE int +ACE_FIFO_Caching_Strategy::notify_rebind (int result, + const ATTRIBUTES &attr) +{ + ACE_UNUSED_ARG (attr); + + if (result == 0) + ++this->order_; + + return result; +} + +template ACE_INLINE CACHING_UTILITY & +ACE_FIFO_Caching_Strategy::caching_utility (void) +{ + return this->caching_utility_; +} + +template ACE_INLINE void +ACE_FIFO_Caching_Strategy::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_FIFO_Caching_Strategy::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("order_ = %d "), this->order_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +////////////////////////////////////////////////////////////////////////////////// + +template ACE_INLINE ATTRIBUTES +ACE_Null_Caching_Strategy::attributes (void) +{ + return 0; +} + +template ACE_INLINE double +ACE_Null_Caching_Strategy::purge_percent (void) +{ + return 0; +} + +template ACE_INLINE void +ACE_Null_Caching_Strategy::purge_percent (double percentage) +{ + ACE_UNUSED_ARG (percentage); +} + +template ACE_INLINE int +ACE_Null_Caching_Strategy::notify_bind (int result, + const ATTRIBUTES &attr) +{ + ACE_UNUSED_ARG (attr); + + return result; +} + +template ACE_INLINE int +ACE_Null_Caching_Strategy::notify_find (int result, + ATTRIBUTES &attr) +{ + ACE_UNUSED_ARG (attr); + + return result; +} + +template ACE_INLINE int +ACE_Null_Caching_Strategy::notify_unbind (int result, + const ATTRIBUTES &attr) +{ + ACE_UNUSED_ARG (attr); + + return result; +} + +template ACE_INLINE int +ACE_Null_Caching_Strategy::notify_trybind (int result, + ATTRIBUTES &attr) +{ + ACE_UNUSED_ARG (attr); + + return result; +} + +template ACE_INLINE int +ACE_Null_Caching_Strategy::notify_rebind (int result, + const ATTRIBUTES &attr) +{ + ACE_UNUSED_ARG (attr); + + return result; +} + +template ACE_INLINE CACHING_UTILITY & +ACE_Null_Caching_Strategy::caching_utility (void) +{ + return this->caching_utility_; +} + +template ACE_INLINE void +ACE_Null_Caching_Strategy::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Null_Caching_Strategy::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +////////////////////////////////////////////////////////////////////////////////// diff --git a/ACE/ace/Caching_Utility_T.cpp b/ACE/ace/Caching_Utility_T.cpp new file mode 100644 index 00000000000..c8b7a48e807 --- /dev/null +++ b/ACE/ace/Caching_Utility_T.cpp @@ -0,0 +1,499 @@ +// $Id$ + +#ifndef ACE_CACHING_UTILITY_T_CPP +#define ACE_CACHING_UTILITY_T_CPP + +#include "ace/Caching_Utility_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Min_Max.h" +#include "ace/OS_Memory.h" +#include "ace/Recyclable.h" + +////////////////////////////////////////////////////////////////////////////// + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +ACE_Pair_Caching_Utility::ACE_Pair_Caching_Utility (ACE_Cleanup_Strategy *cleanup_strategy, + int delete_cleanup_strategy) + : cleanup_strategy_ (cleanup_strategy), + delete_cleanup_strategy_ (delete_cleanup_strategy) +{ + if (cleanup_strategy == 0) + { + ACE_NEW (this->cleanup_strategy_, + CLEANUP_STRATEGY); + this->delete_cleanup_strategy_ = 1; + } +} + +template +ACE_Pair_Caching_Utility::~ACE_Pair_Caching_Utility (void) +{ + if (this->delete_cleanup_strategy_) + delete this->cleanup_strategy_; +} + +template int +ACE_Pair_Caching_Utility::clear_cache (CONTAINER &container, + double purge_percent) +{ + // Check that the purge_percent is non-zero. + if (purge_percent == 0) + return 0; + + // Get the number of entries in the container. + size_t current_map_size = container.current_size (); + + // Also whether the number of entries in the cache! + // Oops! then there is no way out but exiting. So return an error. + if (current_map_size == 0) + return 0; + + // Calculate the no of entries to remove from the cache depending + // upon the . + size_t const entries_to_remove + = ACE_MAX (static_cast (1), + static_cast (static_cast (purge_percent) + / 100 * current_map_size)); + KEY *key_to_remove = 0; + VALUE *value_to_remove = 0; + + for (size_t i = 0; i < entries_to_remove ; ++i) + { + this->minimum (container, + key_to_remove, + value_to_remove); + + // Simply verifying that the key is non-zero. + // This is important for strategies where the minimum + // entry cant be found due to constraints on the type of entry + // to remove. + if (key_to_remove == 0) + return 0; + + if (this->cleanup_strategy_->cleanup (container, + key_to_remove, + value_to_remove) == -1) + return -1; + + } + + return 0; +} + +template void +ACE_Pair_Caching_Utility::minimum (CONTAINER &container, + KEY *&key_to_remove, + VALUE *&value_to_remove) +{ + // Starting values. + ITERATOR iter = container.begin (); + ITERATOR end = container.end (); + ATTRIBUTES min = (*iter).int_id_.second (); + key_to_remove = &(*iter).ext_id_; + value_to_remove = &(*iter).int_id_; + + // The iterator moves thru the container searching for the entry + // with the lowest ATTRIBUTES. + for (++iter; + iter != end; + ++iter) + { + if (min > (*iter).int_id_.second ()) + { + // Ah! an item with lower ATTTRIBUTES... + min = (*iter).int_id_.second (); + key_to_remove = &(*iter).ext_id_; + value_to_remove = &(*iter).int_id_; + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////// + +template +ACE_Recyclable_Handler_Caching_Utility::ACE_Recyclable_Handler_Caching_Utility (ACE_Cleanup_Strategy *cleanup_strategy, + int delete_cleanup_strategy) + : cleanup_strategy_ (cleanup_strategy), + delete_cleanup_strategy_ (delete_cleanup_strategy) +{ + if (cleanup_strategy == 0) + { + ACE_NEW (this->cleanup_strategy_, + CLEANUP_STRATEGY); + this->delete_cleanup_strategy_ = 1; + } +} + +template +ACE_Recyclable_Handler_Caching_Utility::~ACE_Recyclable_Handler_Caching_Utility (void) +{ + if (this->delete_cleanup_strategy_) + delete this->cleanup_strategy_; +} + +template int +ACE_Recyclable_Handler_Caching_Utility::clear_cache (CONTAINER &container, + double purge_percent) +{ + // Check that the purge_percent is non-zero. + if (purge_percent == 0) + return 0; + + // Get the number of entries in the container. + size_t current_map_size = container.current_size (); + + // Also whether the number of entries in the cache is just one! + // Oops! then there is no way out but exiting. So return an error. + // if (current_map_size <= 1) + if (current_map_size == 0) + return 0; + + // Calculate the no of entries to remove from the cache depending + // upon the . + size_t const entries_to_remove + = ACE_MAX (static_cast (1), + static_cast (static_cast (purge_percent) + / 100 * current_map_size)); + + KEY *key_to_remove = 0; + VALUE *value_to_remove = 0; + + for (size_t i = 0; i < entries_to_remove ; ++i) + { + this->minimum (container, + key_to_remove, + value_to_remove); + + // Simply verifying that the key is non-zero. + // This is important for strategies where the minimum + // entry cant be found due to constraints on the type of entry + // to remove. + if (key_to_remove == 0) + return 0; + + if (this->cleanup_strategy_->cleanup (container, + key_to_remove, + value_to_remove) == -1) + return -1; + } + + return 0; +} + +template void +ACE_Recyclable_Handler_Caching_Utility::minimum (CONTAINER &container, + KEY *&key_to_remove, + VALUE *&value_to_remove) +{ + // Starting values. + ITERATOR end = container.end (); + ITERATOR iter = container.begin (); + ATTRIBUTES min = (*iter).int_id_.second (); + key_to_remove = 0; + value_to_remove = 0; + // Found the minimum entry to be purged? + int found = 0; + + // The iterator moves thru the container searching for the entry + // with the lowest ATTRIBUTES. + for (; + iter != end; + ++iter) + { + // If the entry isnt IDLE_AND_PURGABLE continue until you reach + // the first entry which can be purged. This is the minimum with + // which you will compare the rest of the purgable entries. + if ((*iter).ext_id_.recycle_state () == ACE_RECYCLABLE_IDLE_AND_PURGABLE || + (*iter).ext_id_.recycle_state () == ACE_RECYCLABLE_PURGABLE_BUT_NOT_IDLE) + { + if (found == 0) + { + min = (*iter).int_id_.second (); + key_to_remove = &(*iter).ext_id_; + value_to_remove = &(*iter).int_id_; + found = 1; + } + else + { + // Ah! an entry with lower ATTTRIBUTES... + if (min > (*iter).int_id_.second ()) + { + min = (*iter).int_id_.second (); + key_to_remove = &(*iter).ext_id_; + value_to_remove = &(*iter).int_id_; + } + } + } + } +} + +//////////////////////////////////////////////////////////////////////////////// + +template +ACE_Refcounted_Recyclable_Handler_Caching_Utility::ACE_Refcounted_Recyclable_Handler_Caching_Utility (ACE_Cleanup_Strategy *cleanup_strategy, + int delete_cleanup_strategy) + : cleanup_strategy_ (cleanup_strategy), + delete_cleanup_strategy_ (delete_cleanup_strategy), + marked_as_closed_entries_ (0) +{ + if (cleanup_strategy == 0) + { + ACE_NEW (this->cleanup_strategy_, + CLEANUP_STRATEGY); + this->delete_cleanup_strategy_ = 1; + } +} + +template +ACE_Refcounted_Recyclable_Handler_Caching_Utility::~ACE_Refcounted_Recyclable_Handler_Caching_Utility (void) +{ + if (this->delete_cleanup_strategy_) + delete this->cleanup_strategy_; +} + +template int +ACE_Refcounted_Recyclable_Handler_Caching_Utility::clear_cache (CONTAINER &container, + double purge_percent) +{ + // Check that the purge_percent is non-zero. + if (purge_percent == 0) + return 0; + + // Get the number of entries in the container which can be considered for purging. + size_t const available_entries = + container.current_size () - this->marked_as_closed_entries_; + + // Also whether the number of entries in the cache zero. + // Oops! then there is no way out but exiting. + if (available_entries <= 0) + return 0; + + // Calculate the no of entries to remove from the cache depending + // upon the . + size_t entries_to_remove + = ACE_MAX (static_cast (1), + static_cast (static_cast (purge_percent) + / 100 * available_entries)); + + if (entries_to_remove >= available_entries || entries_to_remove == 0) + entries_to_remove = available_entries - 1; + + KEY *key_to_remove = 0; + VALUE *value_to_remove = 0; + + for (size_t i = 0; i < entries_to_remove ; ++i) + { + this->minimum (container, + key_to_remove, + value_to_remove); + + // Simply verifying that the key is non-zero. + // This is important for strategies where the minimum + // entry cant be found due to constraints on the type of entry + // to remove. + if (key_to_remove == 0) + return 0; + + if (this->cleanup_strategy_->cleanup (container, + key_to_remove, + value_to_remove) == -1) + return -1; + + ++this->marked_as_closed_entries_; + } + + return 0; +} + +template void +ACE_Refcounted_Recyclable_Handler_Caching_Utility::minimum (CONTAINER &container, + KEY *&key_to_remove, + VALUE *&value_to_remove) +{ + // Starting values. + ITERATOR end = container.end (); + ITERATOR iter = container.begin (); + ATTRIBUTES min = (*iter).int_id_.second (); + key_to_remove = 0; + value_to_remove = 0; + // Found the minimum entry to be purged? + int found = 0; + + // The iterator moves thru the container searching for the entry + // with the lowest ATTRIBUTES. + for (; + iter != end; + ++iter) + { + // If the entry isnt IDLE_AND_PURGABLE continue until you reach + // the first entry which can be purged. This is the minimum with + // which you will compare the rest of the purgable entries. + if ((*iter).ext_id_.recycle_state () == ACE_RECYCLABLE_IDLE_AND_PURGABLE || + (*iter).ext_id_.recycle_state () == ACE_RECYCLABLE_PURGABLE_BUT_NOT_IDLE) + { + if (found == 0) + { + min = (*iter).int_id_.second (); + key_to_remove = &(*iter).ext_id_; + value_to_remove = &(*iter).int_id_; + found = 1; + } + else + { + // Ah! an entry with lower ATTTRIBUTES... + if (min > (*iter).int_id_.second ()) + { + min = (*iter).int_id_.second (); + key_to_remove = &(*iter).ext_id_; + value_to_remove = &(*iter).int_id_; + } + } + } + } +} + +//////////////////////////////////////////////////////////////////////////////// + +template +ACE_Handler_Caching_Utility::ACE_Handler_Caching_Utility (ACE_Cleanup_Strategy *cleanup_strategy, + int delete_cleanup_strategy) + : cleanup_strategy_ (cleanup_strategy), + delete_cleanup_strategy_ (delete_cleanup_strategy) +{ + if (cleanup_strategy == 0) + { + ACE_NEW (this->cleanup_strategy_, + CLEANUP_STRATEGY); + this->delete_cleanup_strategy_ = 1; + } +} + +template +ACE_Handler_Caching_Utility::~ACE_Handler_Caching_Utility (void) +{ + if (this->delete_cleanup_strategy_) + delete this->cleanup_strategy_; +} + +template int +ACE_Handler_Caching_Utility::clear_cache (CONTAINER &container, + double purge_percent) +{ + // Check that the purge_percent is non-zero. + if (purge_percent == 0) + return 0; + + // Get the number of entries in the container. + size_t current_map_size = container.current_size (); + + // Also whether the number of entries in the cache is just one! + // Oops! then there is no way out but exiting. So return an error. + if (current_map_size == 0) + return 0; + + // Calculate the no of entries to remove from the cache depending + // upon the . + size_t entries_to_remove + = ACE_MAX (static_cast (1), + static_cast (static_cast (purge_percent) + / 100 * current_map_size)); + + KEY *key_to_remove = 0; + VALUE *value_to_remove = 0; + + for (size_t i = 0; i < entries_to_remove ; ++i) + { + this->minimum (container, + key_to_remove, + value_to_remove); + + if (this->cleanup_strategy_->cleanup (container, + key_to_remove, + value_to_remove) == -1) + return -1; + } + + return 0; +} + +template void +ACE_Handler_Caching_Utility::minimum (CONTAINER &container, + KEY *&key_to_remove, + VALUE *&value_to_remove) +{ + // Starting values. + ITERATOR iter = container.begin (); + ITERATOR end = container.end (); + ATTRIBUTES min = (*iter).int_id_->caching_attributes (); + key_to_remove = &(*iter).ext_id_; + value_to_remove = &(*iter).int_id_; + + // The iterator moves thru the container searching for the entry + // with the lowest ATTRIBUTES. + for (++iter; + iter != end; + ++iter) + { + if (min > (*iter).int_id_->caching_attributes () && + (*iter).int_id_->active () != 1) + { + // Ah! an item with lower ATTTRIBUTES... + min = (*iter).int_id_->caching_attributes (); + key_to_remove = &(*iter).ext_id_; + value_to_remove = &(*iter).int_id_; + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////// + +template +ACE_Null_Caching_Utility::ACE_Null_Caching_Utility (ACE_Cleanup_Strategy *cleanup_strategy, + int delete_cleanup_strategy) + : cleanup_strategy_ (cleanup_strategy), + delete_cleanup_strategy_ (delete_cleanup_strategy) +{ + if (cleanup_strategy == 0) + { + ACE_NEW (this->cleanup_strategy_, + CLEANUP_STRATEGY); + this->delete_cleanup_strategy_ = 1; + } +} + +template +ACE_Null_Caching_Utility::~ACE_Null_Caching_Utility (void) +{ + if (this->delete_cleanup_strategy_) + delete this->cleanup_strategy_; +} + +template int +ACE_Null_Caching_Utility::clear_cache (CONTAINER &container, + double purge_percent) +{ + ACE_UNUSED_ARG (container); + ACE_UNUSED_ARG (purge_percent); + + return 0; +} + +template void +ACE_Null_Caching_Utility::minimum (CONTAINER &container, + KEY *&key_to_remove, + VALUE *&value_to_remove) +{ + ACE_UNUSED_ARG (container); + ACE_UNUSED_ARG (key_to_remove); + ACE_UNUSED_ARG (value_to_remove); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_CACHING_UTILITY_T_CPP */ diff --git a/ACE/ace/Caching_Utility_T.h b/ACE/ace/Caching_Utility_T.h new file mode 100644 index 00000000000..1c1ce48894a --- /dev/null +++ b/ACE/ace/Caching_Utility_T.h @@ -0,0 +1,347 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Caching_Utility_T.h + * + * $Id$ + * + * @author Kirthika Parameswaran + */ +//============================================================================= + +#ifndef ACE_CACHING_UTILITY_H +#define ACE_CACHING_UTILITY_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Global_Macros.h" +#include "ace/Cleanup_Strategies_T.h" + +// For linkers that cant grok long names. +#define ACE_Pair_Caching_Utility APUTIL + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Pair_Caching_Utility + * + * @brief Defines a helper class for the Caching Strategies. + * + * This class defines the methods commonly used by the different + * caching strategies. For instance: method which + * decides and purges the entry from the container. @note This + * class helps in the caching_strategies using a container + * containing entries of > + * kind. The attributes helps in deciding the entries to be + * purged. The Cleanup_Strategy is the callback class to which the + * entries to be cleaned up will be delegated. + */ +template +class ACE_Pair_Caching_Utility +{ +public: + + typedef ACE_Cleanup_Strategy CLEANUP_STRATEGY; + + /// Constructor. + ACE_Pair_Caching_Utility (ACE_Cleanup_Strategy *cleanup_strategy = 0, + int delete_cleanup_strategy = 0); + + /// Destructor. + ~ACE_Pair_Caching_Utility (void); + + /** + * Purge entries from the @a container. The Cleanup_Strategy will do the + * actual job of cleanup once the entries to be cleaned up are decided. + */ + int clear_cache (CONTAINER &container, + double purge_percent); + +protected: + + /// Find the entry with minimum caching attributes. + void minimum (CONTAINER &container, + KEY *&key_to_remove, + VALUE *&value_to_remove); + + /// The cleanup strategy which can be used to destroy the entries of + /// the container. + CLEANUP_STRATEGY *cleanup_strategy_; + + /// Whether the cleanup_strategy should be destroyed or not. + int delete_cleanup_strategy_; + + ACE_UNIMPLEMENTED_FUNC (void operator= (const ACE_Pair_Caching_Utility &)) + ACE_UNIMPLEMENTED_FUNC (ACE_Pair_Caching_Utility (const ACE_Pair_Caching_Utility &)) +}; + +//////////////////////////////////////////////////////////////////////////////// +#define ACE_Recyclable_Handler_Caching_Utility ARHUTIL + +/** + * @class ACE_Recyclable_Handler_Caching_Utility + * + * @brief Defines a helper class for the Caching Strategies. + * + * This class defines the methods commonly used by the different + * caching strategies. For instance: method which + * decides and purges the entry from the container. @note This + * class helps in the caching_strategies using a container + * containing entries of kind. The attributes + * helps in deciding the entries to be purged. The + * Cleanup_Strategy is the callback class to which the entries to + * be cleaned up will be delegated. + */ +template +class ACE_Recyclable_Handler_Caching_Utility +{ + +public: + + typedef ACE_Recyclable_Handler_Cleanup_Strategy CLEANUP_STRATEGY; + typedef ACE_Cleanup_Strategy CLEANUP_STRATEGY_BASE; + + /// Constructor. + ACE_Recyclable_Handler_Caching_Utility (ACE_Cleanup_Strategy *cleanup_strategy = 0, + int delete_cleanup_strategy = 0); + + /// Destructor. + ~ACE_Recyclable_Handler_Caching_Utility (void); + + /** + * Purge entries from the . The Cleanup_Strategy will do + * the actual job of cleanup once the entries to be cleaned up are + * decided. + */ + int clear_cache (CONTAINER &container, + double purge_percent); + +protected: + + /// Find the entry with minimum caching attributes. + void minimum (CONTAINER &container, + KEY *&key_to_remove, + VALUE *&value_to_remove); + + /// This is the default Cleanup Strategy for this utility. + CLEANUP_STRATEGY_BASE *cleanup_strategy_; + + /// Whether the cleanup_strategy should be destroyed or not. + int delete_cleanup_strategy_; + +private: + ACE_UNIMPLEMENTED_FUNC (void operator= (const ACE_Recyclable_Handler_Caching_Utility &)) + ACE_UNIMPLEMENTED_FUNC (ACE_Recyclable_Handler_Caching_Utility (const ACE_Recyclable_Handler_Caching_Utility &)) +}; + +/////////////////////////////////////////////////////////////////////////// +#define ACE_Refcounted_Recyclable_Handler_Caching_Utility ARRHUTIL + +/** + * @class ACE_Refcounted_Recyclable_Handler_Caching_Utility + * + * @brief Defines a helper class for the Caching Strategies. + * + * This class defines the methods commonly used by the different + * caching strategies. For instance: clear_cache () method which + * decides and purges the entry from the container. @note This + * class helps in the caching_strategies using a container + * containing entries of kind. The attributes helps in + * deciding the entries to be purged. The Cleanup_Strategy is the + * callback class to which the entries to be cleaned up will be + * delegated. + */ +template +class ACE_Refcounted_Recyclable_Handler_Caching_Utility +{ + +public: + + typedef ACE_Refcounted_Recyclable_Handler_Cleanup_Strategy CLEANUP_STRATEGY; + typedef ACE_Cleanup_Strategy CLEANUP_STRATEGY_BASE; + + /// Constructor. + ACE_Refcounted_Recyclable_Handler_Caching_Utility (ACE_Cleanup_Strategy *cleanup_strategy = 0, + int delete_cleanup_strategy = 0); + + /// Destructor. + ~ACE_Refcounted_Recyclable_Handler_Caching_Utility (void); + + /** + * Purge entries from the . The Cleanup_Strategy will do + * the actual job of cleanup once the entries to be cleaned up are + * decided. + */ + int clear_cache (CONTAINER &container, + double purge_percent); + +protected: + + /// Find the entry with minimum caching attributes. + void minimum (CONTAINER &container, + KEY *&key_to_remove, + VALUE *&value_to_remove); + + /// This is the default Cleanup Strategy for this utility. + CLEANUP_STRATEGY_BASE *cleanup_strategy_; + + /// Whether the cleanup_strategy should be destroyed or not. + int delete_cleanup_strategy_; + + /** + * This figure denotes the number of entries are there in the + * container which have been marked as closed already but might + * not have been unbound from the container. + */ + size_t marked_as_closed_entries_; + +private: + ACE_UNIMPLEMENTED_FUNC (void operator= (const ACE_Refcounted_Recyclable_Handler_Caching_Utility &)) + ACE_UNIMPLEMENTED_FUNC (ACE_Refcounted_Recyclable_Handler_Caching_Utility (const ACE_Refcounted_Recyclable_Handler_Caching_Utility &)) +}; + +//////////////////////////////////////////////////////////////////////////////////////// + +/** + * @class ACE_Handler_Caching_Utility + * + * @brief Defines a helper class for the Caching Strategies. + * + * This class defines the methods commonly used by the different + * caching strategies. For instance: method which + * decides and purges the entry from the container. @note This + * class helps in the caching_strategies using a container + * containing entries of kind where the HANDLER + * contains the caching attributes which help in deciding the + * entries to be purged. The Cleanup_Strategy is the callback + * class to which the entries to be cleaned up will be delegated. + */ +template +class ACE_Handler_Caching_Utility +{ +public: + + typedef ACE_Handler_Cleanup_Strategy CLEANUP_STRATEGY; + typedef ACE_Cleanup_Strategy CLEANUP_STRATEGY_BASE; + + /// Constructor. + ACE_Handler_Caching_Utility (ACE_Cleanup_Strategy *cleanup_strategy = 0, + int delete_cleanup_strategy = 0); + + /// Destructor. + ~ACE_Handler_Caching_Utility (void); + + /** + * Purge entries from the . The Cleanup_Strategy will do + * the actual job of cleanup once the entries to be cleaned up are + * decided. + */ + int clear_cache (CONTAINER &container, + double purge_percent); + +protected: + + /** + * Find the entry with minimum caching attributes. This is handler + * specific since this utility is to be used very specifically for + * handler who have caching_attributes for server side acched + * connection management. + */ + void minimum (CONTAINER &container, + KEY *&key_to_remove, + VALUE *&value_to_remove); + + /// The cleanup strategy which can be used to destroy the entries of + /// the container. + CLEANUP_STRATEGY_BASE *cleanup_strategy_; + + /// Whether the cleanup_strategy should be destroyed or not. + int delete_cleanup_strategy_; + +private: + ACE_UNIMPLEMENTED_FUNC (void operator= (const ACE_Handler_Caching_Utility &)) + ACE_UNIMPLEMENTED_FUNC (ACE_Handler_Caching_Utility (const ACE_Handler_Caching_Utility &)) +}; + +/////////////////////////////////////////////////////////////////////////// +#define ACE_Null_Caching_Utility ANUTIL +/** + * @class ACE_Null_Caching_Utility + * + * @brief Defines a dummy helper class for the Caching Strategies. + * + * This class defines the methods commonly used by the different + * caching strategies. For instance: method which + * decides and purges the entry from the container. @note This + * class is be used with the Null_Caching_Strategy. The + * Cleanup_Strategy is the callback class to which the entries to + * be cleaned up will be delegated. + */ +template +class ACE_Null_Caching_Utility +{ +public: + + typedef ACE_Null_Cleanup_Strategy CLEANUP_STRATEGY; + typedef ACE_Cleanup_Strategy CLEANUP_STRATEGY_BASE; + + /// Constructor. + ACE_Null_Caching_Utility (ACE_Cleanup_Strategy *cleanup_strategy = 0, + int delete_cleanup_strategy = 0); + + /// Destructor. + ~ACE_Null_Caching_Utility (void); + + /** + * Purge entries from the . The Cleanup_Strategy will do + * the actual job of cleanup once the entries to be cleaned up are + * decided. @note Here it is a no-op. + */ + int clear_cache (CONTAINER &container, + double purge_percent); + +protected: + + /** + * Find the entry with minimum caching attributes. This is handler + * specific since this utility is to be used very specifically for + * handler who have caching_attributes for server side acched + * connection management.@note Here it is a no-op. + */ + void minimum (CONTAINER &container, + KEY *&key_to_remove, + VALUE *&value_to_remove); + + /// The cleanup strategy which can be used to destroy the entries of + /// the container. + CLEANUP_STRATEGY_BASE *cleanup_strategy_; + + /// Whether the cleanup_strategy should be destroyed or not. + int delete_cleanup_strategy_; + +private: + ACE_UNIMPLEMENTED_FUNC (void operator= (const ACE_Null_Caching_Utility &)) + ACE_UNIMPLEMENTED_FUNC (ACE_Null_Caching_Utility (const ACE_Null_Caching_Utility &)) +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Caching_Utility_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Caching_Utility_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" + +#endif /* ACE_CACHING_UTILITY_H */ diff --git a/ACE/ace/Capabilities.cpp b/ACE/ace/Capabilities.cpp new file mode 100644 index 00000000000..04587194a77 --- /dev/null +++ b/ACE/ace/Capabilities.cpp @@ -0,0 +1,355 @@ +#include "ace/Capabilities.h" +#include "ace/OS_NS_ctype.h" +#include "ace/OS_Memory.h" +#include "ace/OS_NS_string.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Capabilities.inl" +#endif /* !__ACE_INLINE__ */ + +#include "ace/OS_NS_stdio.h" + +ACE_RCSID (ace, + Capabilities, + "$Id$") + + +#define ACE_ESC ((ACE_TCHAR)0x1b) + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_CapEntry::~ACE_CapEntry (void) +{ +} + +ACE_Capabilities::ACE_Capabilities (void) + : caps_ () +{ +} + +ACE_Capabilities::~ACE_Capabilities (void) +{ + this->resetcaps (); +} + +const ACE_TCHAR * +ACE_Capabilities::parse (const ACE_TCHAR *buf, ACE_TString &cap) +{ + while (*buf != ACE_TEXT ('\0') && *buf != ACE_TEXT (',')) + { + if (*buf == ACE_TEXT ('\\')) + { + ++buf; + if (*buf == ACE_TEXT ('E') || *buf == ACE_TEXT ('e')) + { + cap += ACE_ESC; + ++buf; + continue; + } + else if (*buf == ACE_TEXT ('r')) + { + cap += ACE_TEXT ('\r'); + ++buf; + continue; + } + else if (*buf == ACE_TEXT ('n')) + { + cap += ACE_TEXT ('\n'); + ++buf; + continue; + } + else if (*buf == ACE_TEXT ('t')) + { + cap += ACE_TEXT ('\t'); + ++buf; + continue; + } + else if (*buf == ACE_TEXT ('\\')) + { + cap += *buf++; + continue; + } + if (ACE_OS::ace_isdigit(*buf)) + { + // @@ UNICODE Does this work with unicode? + int oc = 0; + for (int i = 0; + i < 3 && *buf && ACE_OS::ace_isdigit (*buf); + i++) + oc = oc * 8 + (*buf++ - ACE_TEXT ('0')); + + cap += (ACE_TCHAR) oc; + continue; + } + } + cap += *buf++; + } + return buf; +} + +const ACE_TCHAR * +ACE_Capabilities::parse (const ACE_TCHAR *buf, int &cap) +{ + int n = 0; + + while (*buf && ACE_OS::ace_isdigit (*buf)) + n = n * 10 + (*buf++ - ACE_TEXT ('0')); + + cap = n; + + return buf; +} + +void +ACE_Capabilities::resetcaps (void) +{ + for (CAPABILITIES_MAP::ITERATOR iter (this->caps_); + !iter.done (); + iter.advance ()) + { + CAPABILITIES_MAP::ENTRY *entry = 0; + iter.next (entry); + delete entry->int_id_; + } + + this->caps_.close (); + this->caps_.open (); +} + +int +ACE_Capabilities::fillent (const ACE_TCHAR *buf) +{ + this->resetcaps (); + while (*buf) + { + ACE_TString s; + int n; + ACE_TString name; + ACE_CapEntry *ce; + + // Skip blanks + while (*buf && ACE_OS::ace_isspace(*buf)) buf++; + // If we get end of line return + + if (*buf == ACE_TEXT ('\0')) + break; + + if (*buf == ACE_TEXT ('#')) + { + while (*buf && *buf != ACE_TEXT ('\n')) + buf++; + if (*buf == ACE_TEXT ('\n')) + buf++; + continue; + } + while(*buf && *buf != ACE_TEXT ('=') + && *buf!= ACE_TEXT ('#') + && *buf != ACE_TEXT (',')) + name += *buf++; + + // If name is null. + switch (*buf) + { + case ACE_TEXT ('='): + // String property + buf = this->parse (buf + 1, s); + ACE_NEW_RETURN (ce, + ACE_StringCapEntry (s), + -1); + if (this->caps_.bind (name, ce) == -1) + { + delete ce; + return -1; + } + break; + case ACE_TEXT ('#'): + // Integer property + buf = this->parse (buf + 1, n); + ACE_NEW_RETURN (ce, + ACE_IntCapEntry (n), + -1); + if (this->caps_.bind (name, ce) == -1) + { + delete ce; + return -1; + } + break; + case ACE_TEXT (','): + // Boolean + ACE_NEW_RETURN (ce, + ACE_BoolCapEntry (1), + -1); + if (this->caps_.bind (name, ce) == -1) + { + delete ce; + return -1; + } + break; + default: + return 0; + } + + if (*buf++ != ACE_TEXT (',')) + return -1; + } + + return 0; +} + +int +ACE_Capabilities::is_entry (const ACE_TCHAR *name, const ACE_TCHAR *line) +{ + for (;;) + { + // Skip blanks or irrelevant characters + while (*line && ACE_OS::ace_isspace(*line)) + ++line; + + // End of line reached + if (*line == ACE_TEXT ('\0')) + break; + + // Build the entry name + ACE_TString nextname; + while (*line && *line != ACE_TEXT ('|') && *line != ACE_TEXT (',')) + nextname += *line++; + + // We have found the required entry? + if (ACE_OS::strcmp (nextname.c_str (), name) == 0) + return 1; + + // Skip puntuaction char if neccesary. + if (*line == ACE_TEXT ('|') || *line == ACE_TEXT (',')) + ++line; + else + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Invalid entry\n"))); + break; + } + } + return 0; +} + +int +ACE_Capabilities::getline (FILE *fp, ACE_TString &line) +{ + int ch; + + line.set (0, 0); + + while ((ch = ACE_OS::fgetc (fp)) != EOF && ch != ACE_TEXT ('\n')) + line += (ACE_TCHAR) ch; + + if (ch == EOF && line.length () == 0) + return -1; + else + return 0; +} + +int +ACE_Capabilities::getval (const ACE_TCHAR *keyname, ACE_TString &val) +{ + ACE_CapEntry* cap = 0; + if (this->caps_.find (keyname, cap) == -1) + return -1; + + ACE_StringCapEntry *scap = + dynamic_cast (cap); + if (scap == 0) + return -1; + + val = scap->getval (); + return 0; +} + +int +ACE_Capabilities::getval (const ACE_TCHAR *keyname, int &val) +{ + ACE_CapEntry *cap = 0; + if (this->caps_.find (keyname, cap) == -1) + return -1; + + ACE_IntCapEntry *icap = + dynamic_cast (cap); + if (icap != 0) + { + val = icap->getval (); + return 0; + } + + ACE_BoolCapEntry *bcap = + dynamic_cast (cap); + + if (bcap == 0) + return -1; + + val = bcap->getval (); + return 0; +} + +#if !defined (ACE_IS_SPLITTING) +static int +is_empty (const ACE_TCHAR *line) +{ + while (*line && ACE_OS::ace_isspace (*line)) + ++line; + + return *line == ACE_TEXT ('\0') || *line == ACE_TEXT ('#'); +} + +static int +is_line (const ACE_TCHAR *line) +{ + while (*line && ACE_OS::ace_isspace (*line)) + ++line; + + return *line != ACE_TEXT ('\0'); +} +#endif /* !ACE_IS_SPLITTING */ + +int +ACE_Capabilities::getent (const ACE_TCHAR *fname, const ACE_TCHAR *name) +{ + FILE *fp = ACE_OS::fopen (fname, ACE_TEXT ("r")); + + if (fp == 0) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("Can't open %s file\n"), + fname), + -1); + + int done; + ACE_TString line; + + while (0 == (done = (this->getline (fp, line) == -1)) + && is_empty (line.c_str ())) + continue; + + while (!done) + { + ACE_TString newline; + ACE_TString description; + + while (0 == (done = (this->getline (fp, newline) == -1))) + if (is_line (newline.c_str ())) + description += newline; + else + break; + + if (this->is_entry (name, line.c_str())) + { + ACE_OS::fclose (fp); + return this->fillent (description.c_str ()); + } + + line = newline; + while (!done && is_empty (line.c_str ())) + done = this->getline (fp, line) == -1; + } + + ACE_OS::fclose (fp); + return -1; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Capabilities.h b/ACE/ace/Capabilities.h new file mode 100644 index 00000000000..4c26b9cb83a --- /dev/null +++ b/ACE/ace/Capabilities.h @@ -0,0 +1,221 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Capabilities.h + * + * $Id$ + * + * @author Arturo Montes + */ +//============================================================================= + + +#ifndef ACE_CAPABILITIES_H +#define ACE_CAPABILITIES_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Null_Mutex.h" +#include "ace/Hash_Map_Manager_T.h" +#include "ace/Containers.h" +#include "ace/SString.h" +#include "ace/Functor_String.h" + +#if defined (ACE_IS_SPLITTING) +# include "ace/OS_NS_ctype.h" +#endif /* ACE_IS_SPLITTING */ + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_CapEntry + * + * @brief This class is the base class for all ACE Capabilities entry + * subclasses. + * + * This class is not instantiable and does not provide accessors + * or methods. If you want to add a new kind of attribute subclass + * this class and dynamic_cast to proper subclass. + */ +class ACE_Export ACE_CapEntry +{ +public: + + virtual ~ACE_CapEntry (void); + +protected: + + enum + { + ACE_INTCAP = 0, + ACE_STRINGCAP = 1, + ACE_BOOLCAP = 2 + }; + + ACE_CapEntry (int captype); + +protected: + + int captype_; + +}; + +/** + * @class ACE_IntCapEntry + * + * @brief This class implement the ACE Integer Capability subclass. + * + * This is a container class for ACE Capabilities integer container + * values. + */ +class ACE_Export ACE_IntCapEntry : public ACE_CapEntry +{ +public: + ACE_IntCapEntry (int val); + int getval (void) const; + +protected: + int val_; +}; + +/** + * @class ACE_StringCapEntry + * + * @brief This class implement the ACE String Capability subclass. + * + * This is a container class for ACE Capabilities String container + * values. + */ +class ACE_Export ACE_StringCapEntry : public ACE_CapEntry +{ +public: + ACE_StringCapEntry (const ACE_TString &val); + ACE_TString getval (void) const; + +protected: + ACE_TString val_; +}; + +/** + * @class ACE_BoolCapEntry + * + * @brief This class implement the ACE Bool Capability subclass. + * + * This is a container class for ACE Capabilities bool container + * values. + */ +class ACE_Export ACE_BoolCapEntry : public ACE_CapEntry +{ +public: + ACE_BoolCapEntry (int val); + int getval (void) const; + +protected: + int val_; +}; + +/** + * @class ACE_Capabilities + * + * @brief This class implement the ACE Capabilities. + * + * This is a container class for ACE Capabilities + * values. Currently exist three different capability values: + * (integer), (bool) and + * (String). An ACE_Capabilities is a + * unordered set of pair = (, *). Where + * the first component is the name of capability and the second + * component is a pointer to the capability value container. A + * is a container for ACE_Capabilities, the + * ACE_Capabilities has a name in the file, as a termcap file. + */ +class ACE_Export ACE_Capabilities +{ +public: + + typedef ACE_Hash_Map_Manager_Ex, ACE_Equal_To, ACE_Null_Mutex> CAPABILITIES_MAP; + + /// The Constructor + ACE_Capabilities (void); + + /// The Destructor + ~ACE_Capabilities(void); + +public: + + /// Get a string entry. + int getval (const ACE_TCHAR *ent, ACE_TString &val); + + /// Get an integer entry. + int getval (const ACE_TCHAR *ent, int &val); + + /// Get the ACE_Capabilities name from FILE fname and load the + /// associated capabitily entries in map. + int getent (const ACE_TCHAR *fname, const ACE_TCHAR *name); + +protected: + + /// Parse an integer property + const ACE_TCHAR *parse (const ACE_TCHAR *buf, int &cap); + + /// Parse a string property + const ACE_TCHAR *parse (const ACE_TCHAR *buf, ACE_TString &cap); + + /// Fill the ACE_Capabilities with description in ent. + int fillent(const ACE_TCHAR *ent); + + /// Parse a cap entry + int parseent (const ACE_TCHAR *name, ACE_TCHAR *line); + + /// Get a line from FILE input stream + int getline (FILE* fp, + ACE_TString &line); + + /// Is a valid entry + int is_entry (const ACE_TCHAR *name, const ACE_TCHAR *line); + + /// Reset the set of capabilities + void resetcaps (void); + +private: + + /// This is the set of ACE_CapEntry. + CAPABILITIES_MAP caps_; + +}; + +#if defined (ACE_IS_SPLITTING) +int +is_empty (const ACE_TCHAR *line) +{ + while (*line && ACE_OS::ace_isspace (*line)) + ++line; + + return *line == ACE_TEXT ('\0') || *line == ACE_TEXT ('#'); +} + +int +is_line (const ACE_TCHAR *line) +{ + while (*line && ACE_OS::ace_isspace (*line)) + ++line; + + return *line != ACE_TEXT ('\0'); +} +#endif /* ACE_IS_SPLITTING */ + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Capabilities.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* __ACE_CAPABILITIES_H__ */ diff --git a/ACE/ace/Capabilities.inl b/ACE/ace/Capabilities.inl new file mode 100644 index 00000000000..053e0ecf7b6 --- /dev/null +++ b/ACE/ace/Capabilities.inl @@ -0,0 +1,52 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_CapEntry::ACE_CapEntry (int captype) + : captype_ (captype) +{ +} + +ACE_INLINE +ACE_IntCapEntry::ACE_IntCapEntry (int val) + : ACE_CapEntry (ACE_INTCAP), + val_ (val) +{ +} + +ACE_INLINE int +ACE_IntCapEntry::getval (void) const +{ + return val_; +} + +ACE_INLINE +ACE_StringCapEntry::ACE_StringCapEntry (const ACE_TString &val) + : ACE_CapEntry (ACE_STRINGCAP), + val_ (val) +{ +} + +ACE_INLINE ACE_TString +ACE_StringCapEntry::getval (void) const +{ + return val_; +} + +ACE_INLINE +ACE_BoolCapEntry::ACE_BoolCapEntry (int val) + : ACE_CapEntry (ACE_BOOLCAP), + val_(val) +{ +} + +ACE_INLINE int +ACE_BoolCapEntry::getval (void) const +{ + return val_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Cleanup.cpp b/ACE/ace/Cleanup.cpp new file mode 100644 index 00000000000..a6fc5de6a78 --- /dev/null +++ b/ACE/ace/Cleanup.cpp @@ -0,0 +1,192 @@ +// $Id$ + +#include "ace/Cleanup.h" + +ACE_RCSID (ace, + Cleanup, + "$Id$") + +#if !defined (ACE_HAS_INLINED_OSCALLS) +# include "ace/Cleanup.inl" +#endif /* ACE_HAS_INLINED_OSCALLS */ + +#include "ace/OS_Memory.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +void +ACE_Cleanup::cleanup (void *) +{ + delete this; +} + + +ACE_Cleanup::~ACE_Cleanup (void) +{ +} + +/*****************************************************************************/ + +extern "C" void +ACE_CLEANUP_DESTROYER_NAME (ACE_Cleanup *object, void *param) +{ + object->cleanup (param); +} + +/*****************************************************************************/ + +ACE_Cleanup_Info::ACE_Cleanup_Info (void) + : object_ (0), + cleanup_hook_ (0), + param_ (0) +{ +} + +bool +ACE_Cleanup_Info::operator== (const ACE_Cleanup_Info &o) const +{ + return o.object_ == this->object_ + && o.cleanup_hook_ == this->cleanup_hook_ + && o.param_ == this->param_; +} + +bool +ACE_Cleanup_Info::operator!= (const ACE_Cleanup_Info &o) const +{ + return !(*this == o); +} + +/*****************************************************************************/ + +/** + * @class ACE_Cleanup_Info_Node + * + * @brief For maintaining a list of ACE_Cleanup_Info items. + * + * For internal use by ACE_Object_Manager. + */ +class ACE_Cleanup_Info_Node +{ +public: + ACE_Cleanup_Info_Node (void); + ACE_Cleanup_Info_Node (const ACE_Cleanup_Info &new_info, + ACE_Cleanup_Info_Node *next); + ~ACE_Cleanup_Info_Node (void); + ACE_Cleanup_Info_Node *insert (const ACE_Cleanup_Info &); +private: + ACE_Cleanup_Info cleanup_info_; + ACE_Cleanup_Info_Node *next_; + + friend class ACE_OS_Exit_Info; +}; + +ACE_Cleanup_Info_Node::ACE_Cleanup_Info_Node (void) + : cleanup_info_ (), + next_ (0) +{ +} + +ACE_Cleanup_Info_Node::ACE_Cleanup_Info_Node (const ACE_Cleanup_Info &new_info, + ACE_Cleanup_Info_Node *next) + : cleanup_info_ (new_info), + next_ (next) +{ +} + +ACE_Cleanup_Info_Node::~ACE_Cleanup_Info_Node (void) +{ + delete next_; +} + +ACE_Cleanup_Info_Node * +ACE_Cleanup_Info_Node::insert (const ACE_Cleanup_Info &new_info) +{ + ACE_Cleanup_Info_Node *new_node = 0; + + ACE_NEW_RETURN (new_node, + ACE_Cleanup_Info_Node (new_info, this), + 0); + + return new_node; +} + +/*****************************************************************************/ + +ACE_OS_Exit_Info::ACE_OS_Exit_Info (void) +{ + ACE_NEW (registered_objects_, ACE_Cleanup_Info_Node); +} + +ACE_OS_Exit_Info::~ACE_OS_Exit_Info (void) +{ + delete registered_objects_; + registered_objects_ = 0; +} + +int +ACE_OS_Exit_Info::at_exit_i (void *object, + ACE_CLEANUP_FUNC cleanup_hook, + void *param) +{ + ACE_Cleanup_Info new_info; + new_info.object_ = object; + new_info.cleanup_hook_ = cleanup_hook; + new_info.param_ = param; + + // Return -1 and sets errno if unable to allocate storage. Enqueue + // at the head and dequeue from the head to get LIFO ordering. + + ACE_Cleanup_Info_Node *new_node = 0; + + if ((new_node = registered_objects_->insert (new_info)) == 0) + return -1; + else + { + registered_objects_ = new_node; + return 0; + } +} + +int +ACE_OS_Exit_Info::find (void *object) +{ + // Check for already in queue, and return 1 if so. + for (ACE_Cleanup_Info_Node *iter = registered_objects_; + iter && iter->next_ != 0; + iter = iter->next_) + { + if (iter->cleanup_info_.object_ == object) + { + // The object has already been registered. + return 1; + } + } + + return 0; +} + +void +ACE_OS_Exit_Info::call_hooks (void) +{ + // Call all registered cleanup hooks, in reverse order of + // registration. + for (ACE_Cleanup_Info_Node *iter = registered_objects_; + iter && iter->next_ != 0; + iter = iter->next_) + { + ACE_Cleanup_Info &info = iter->cleanup_info_; + if (info.cleanup_hook_ == reinterpret_cast ( + ACE_CLEANUP_DESTROYER_NAME)) + // The object is an ACE_Cleanup. + ACE_CLEANUP_DESTROYER_NAME ( + reinterpret_cast (info.object_), + info.param_); + else if (info.object_ == &ace_exit_hook_marker) + // The hook is an ACE_EXIT_HOOK. + (* reinterpret_cast (info.cleanup_hook_)) (); + else + (*info.cleanup_hook_) (info.object_, info.param_); + } +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Cleanup.h b/ACE/ace/Cleanup.h new file mode 100644 index 00000000000..7acff23ab79 --- /dev/null +++ b/ACE/ace/Cleanup.h @@ -0,0 +1,137 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Cleanup.h + * + * $Id$ + * + * @author Douglas C. Schmidt + * @author Jesper S. M|ller + * @author and a cast of thousands... + * + * Originally in OS.h. + */ +//============================================================================= + +#ifndef ACE_CLEANUP_H +# define ACE_CLEANUP_H + +# include /**/ "ace/pre.h" + +# include "ace/config-lite.h" + +# if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +# endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include /**/ "ace/ACE_export.h" + +#if (defined (ACE_HAS_VERSIONED_NAMESPACE) && ACE_HAS_VERSIONED_NAMESPACE == 1) +# include "ace/Global_Macros.h" +# define ACE_CLEANUP_DESTROYER_NAME ACE_PREPROC_CONCATENATE(ACE_VERSIONED_NAMESPACE_NAME, _ace_cleanup_destroyer) +#else +# define ACE_CLEANUP_DESTROYER_NAME ace_cleanup_destroyer +#endif /* ACE_HAS_VERSIONED_NAMESPACE == 1 */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Cleanup + * + * @brief Base class for objects that are cleaned by ACE_Object_Manager. + */ +class ACE_Export ACE_Cleanup +{ +public: + /// No-op constructor. + ACE_Cleanup (void); + + /// Destructor. + virtual ~ACE_Cleanup (void); + + /// Cleanup method that, by default, simply deletes itself. + virtual void cleanup (void *param = 0); +}; + +// Adapter for cleanup, used by ACE_Object_Manager. +extern "C" ACE_Export +void ACE_CLEANUP_DESTROYER_NAME (ACE_Cleanup *, void *param = 0); + +/** + * @class ACE_Cleanup_Info + * + * @brief Hold cleanup information for thread/process + */ +class ACE_Export ACE_Cleanup_Info +{ +public: + /// Default constructor. + ACE_Cleanup_Info (void); + + /// Equality operator. + bool operator== (const ACE_Cleanup_Info &o) const; + + /// Inequality operator. + bool operator!= (const ACE_Cleanup_Info &o) const; + + /// Point to object that gets passed into the . + void *object_; + + /// Cleanup hook that gets called back. + ACE_CLEANUP_FUNC cleanup_hook_; + + /// Parameter passed to the . + void *param_; +}; + +class ACE_Cleanup_Info_Node; + +/** + * @class ACE_OS_Exit_Info + * + * @brief Hold Object Manager cleanup (exit) information. + * + * For internal use by the ACE library, only. + */ +class ACE_Export ACE_OS_Exit_Info +{ +public: + /// Default constructor. + ACE_OS_Exit_Info (void); + + /// Destructor. + ~ACE_OS_Exit_Info (void); + + /// Use to register a cleanup hook. + int at_exit_i (void *object, ACE_CLEANUP_FUNC cleanup_hook, void *param); + + /// Look for a registered cleanup hook object. Returns 1 if already + /// registered, 0 if not. + int find (void *object); + + /// Call all registered cleanup hooks, in reverse order of + /// registration. + void call_hooks (); + +private: + /** + * Keeps track of all registered objects. The last node is only + * used to terminate the list (it doesn't contain a valid + * ACE_Cleanup_Info). + */ + ACE_Cleanup_Info_Node *registered_objects_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +# if defined (ACE_HAS_INLINED_OSCALLS) +# if defined (ACE_INLINE) +# undef ACE_INLINE +# endif /* ACE_INLINE */ +# define ACE_INLINE inline +# include "ace/Cleanup.inl" +# endif /* ACE_HAS_INLINED_OSCALLS */ + +# include /**/ "ace/post.h" +#endif /* ACE_CLEANUP_H */ diff --git a/ACE/ace/Cleanup.inl b/ACE/ace/Cleanup.inl new file mode 100644 index 00000000000..02d3c223f8d --- /dev/null +++ b/ACE/ace/Cleanup.inl @@ -0,0 +1,12 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_Cleanup::ACE_Cleanup (void) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Cleanup_Strategies_T.cpp b/ACE/ace/Cleanup_Strategies_T.cpp new file mode 100644 index 00000000000..10804ba21ca --- /dev/null +++ b/ACE/ace/Cleanup_Strategies_T.cpp @@ -0,0 +1,95 @@ +//$Id$ + +#ifndef ACE_CLEANUP_STRATEGIES_T_CPP +#define ACE_CLEANUP_STRATEGIES_T_CPP + +#include "ace/Cleanup_Strategies_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +//////////////////////////////////////////////////////////////////////////// + +template +ACE_Cleanup_Strategy::~ACE_Cleanup_Strategy (void) +{ +} + +template int +ACE_Cleanup_Strategy::cleanup (CONTAINER &container, + KEY *key, + VALUE *) +{ + return container.unbind (*key); +} + +//////////////////////////////////////////////////////////////////////////// + +template int +ACE_Recyclable_Handler_Cleanup_Strategy::cleanup ( + CONTAINER &container, + KEY *key, + VALUE *) +{ + VALUE value; + + if (container.unbind (*key, value) == -1) + return -1; + + value.first ()->recycler (0, 0); + + value.first ()->close (); + + return 0; +} + +///////////////////////////////////////////////////////////////////////////// + +template int +ACE_Refcounted_Recyclable_Handler_Cleanup_Strategy::cleanup ( + CONTAINER &, + KEY *, + VALUE *value) +{ + return value->first ()->handle_close_i (); +} + +//////////////////////////////////////////////////////////////////////////// + +template int +ACE_Handler_Cleanup_Strategy::cleanup ( + CONTAINER &container, + KEY *key, + VALUE *value) +{ + // Remove the item from cache only if the handler isnt in use. + if ((*value)->active () == 0) + { + (*value)->close (); + + if (container.unbind (*key) == -1) + return -1; + + } + + return 0; +} + +//////////////////////////////////////////////////////////////////////////// + +template int +ACE_Null_Cleanup_Strategy::cleanup (CONTAINER &, + KEY *, + VALUE *) +{ + return 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_CLEANUP_STRATEGIES_T_CPP */ diff --git a/ACE/ace/Cleanup_Strategies_T.h b/ACE/ace/Cleanup_Strategies_T.h new file mode 100644 index 00000000000..9a574ed2bcd --- /dev/null +++ b/ACE/ace/Cleanup_Strategies_T.h @@ -0,0 +1,155 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Cleanup_Strategies_T.h + * + * $Id$ + * + * @author Kirthika Parameswaran + */ +//============================================================================= + + +#ifndef CLEANUP_STRATEGIES_H +#define CLEANUP_STRATEGIES_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +// For linkers that cant grok long names. +#define ACE_Cleanup_Strategy ACLE + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Cleanup_Strategy + * + * @brief Defines a default strategy to be followed for cleaning up + * entries from a map which is the container. + * + * By default the entry to be cleaned up is removed from the + * container. + */ +template +class ACE_Cleanup_Strategy +{ + +public: + + /// Destructor. + virtual ~ACE_Cleanup_Strategy (void); + + /// The method which will do the cleanup of the entry in the container. + virtual int cleanup (CONTAINER &container, KEY *key, VALUE *value); +}; + +////////////////////////////////////////////////////////////////////// +#define ACE_Recyclable_Handler_Cleanup_Strategy ARHCLE + +/** + * @class ACE_Recyclable_Handler_Cleanup_Strategy + * + * @brief Defines a strategy to be followed for cleaning up + * entries which are svc_handlers from a container. + * + * The entry to be cleaned up is removed from the container. + * Here, since we are dealing with svc_handlers specifically, we + * perform a couple of extra operations. @note To be used when + * the handler is recyclable. + */ +template +class ACE_Recyclable_Handler_Cleanup_Strategy : public ACE_Cleanup_Strategy +{ + +public: + + /// The method which will do the cleanup of the entry in the container. + virtual int cleanup (CONTAINER &container, KEY *key, VALUE *value); +}; + +////////////////////////////////////////////////////////////////////// +#define ACE_Refcounted_Recyclable_Handler_Cleanup_Strategy ARRHCLE + +/** + * @class ACE_Refcounted_Recyclable_Handler_Cleanup_Strategy + * + * @brief Defines a strategy to be followed for cleaning up + * entries which are svc_handlers from a container. + * + * The entry to be cleaned up is removed from the container. + * Here, since we are dealing with recyclable svc_handlers with + * addresses which are refcountable specifically, we perform a + * couple of extra operations and do so without any locking. + */ +template +class ACE_Refcounted_Recyclable_Handler_Cleanup_Strategy : public ACE_Cleanup_Strategy +{ + +public: + + /// The method which will do the cleanup of the entry in the container. + virtual int cleanup (CONTAINER &container, KEY *key, VALUE *value); +}; + +////////////////////////////////////////////////////////////////////// + +/** + * @class ACE_Handler_Cleanup_Strategy + * + * @brief Defines a strategy to be followed for cleaning up + * entries which are svc_handlers from a container. + * + * The entry to be cleaned up is removed from the container. + * Here, since we are dealing with svc_handlers specifically, we + * perform a couple of extra operations. @note This cleanup strategy + * should be used in the case when the handler has the caching + * attributes. + */ +template +class ACE_Handler_Cleanup_Strategy : public ACE_Cleanup_Strategy +{ + +public: + + /// The method which will do the cleanup of the entry in the container. + virtual int cleanup (CONTAINER &container, KEY *key, VALUE *value); +}; + +////////////////////////////////////////////////////////////////////// +#define ACE_Null_Cleanup_Strategy ANCLE + +/** + * @class ACE_Null_Cleanup_Strategy + * + * @brief Defines a do-nothing implementation of the cleanup strategy. + * + * This class simply does nothing at all! Can be used to nullify + * the effect of the Cleanup Strategy. + */ +template +class ACE_Null_Cleanup_Strategy : public ACE_Cleanup_Strategy +{ + +public: + + /// The dummy cleanup method. + virtual int cleanup (CONTAINER &container, KEY *key, VALUE *value); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Cleanup_Strategies_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Cleanup_Strategies_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" +#endif /* CLEANUP_STRATEGIES_H */ diff --git a/ACE/ace/Codecs.cpp b/ACE/ace/Codecs.cpp new file mode 100644 index 00000000000..505c5fc9916 --- /dev/null +++ b/ACE/ace/Codecs.cpp @@ -0,0 +1,234 @@ +#include "ace/Codecs.h" +#include "ace/Log_Msg.h" +#include "ace/OS_Memory.h" +#include "ace/OS_NS_ctype.h" + +ACE_RCSID (ace, + Codecs, + "$Id$") + +namespace +{ + // Just in case ... +#undef alphabet +#undef pad +#undef max_columns + + // Symbols which form the Base64 alphabet (Defined as per RFC 2045) + ACE_Byte const alphabet[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + // The padding character used in the encoding + ACE_Byte const pad = '='; + + // Number of columns per line of encoded output (Can have a maximum + // value of 76). + int const max_columns = 72; +} + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +bool ACE_Base64::init_ = false; + +ACE_Byte ACE_Base64::decoder_[256]; + +ACE_Byte ACE_Base64::member_[256]; + +ACE_Byte* +ACE_Base64::encode (const ACE_Byte* input, + const size_t input_len, + size_t* output_len, + bool is_chunked) +{ + if (!ACE_Base64::init_) + ACE_Base64::init(); + + if (!input) + return 0; + + ACE_Byte* result = 0; + + size_t length = ((input_len + 2) / 3) * 4; + size_t num_lines = length / max_columns + 1; + length += num_lines + 1; + ACE_NEW_RETURN (result, ACE_Byte[length], 0); + + int char_count = 0; + int bits = 0; + size_t pos = 0; + int cols = 0; + + for (size_t i = 0; i < input_len; ++i) + { + bits += input[i]; + ++char_count; + + if (char_count == 3) + { + result[pos++] = alphabet[bits >> 18]; + result[pos++] = alphabet[(bits >> 12) & 0x3f]; + result[pos++] = alphabet[(bits >> 6) & 0x3f]; + result[pos++] = alphabet[bits & 0x3f]; + cols += 4; + if (cols == max_columns) { + if (is_chunked) + result[pos++] = '\n'; + cols = 0; + } + bits = 0; + char_count = 0; + } + else + { + bits <<= 8; + } + } + + if (char_count != 0) + { + bits <<= (16 - (8 * char_count)); + result[pos++] = alphabet[bits >> 18]; + result[pos++] = alphabet[(bits >> 12) & 0x3f]; + cols += 2; + if (char_count == 1) + { + result[pos++] = pad; + result[pos++] = pad; + cols += 2; + } + else + { + result[pos++] = alphabet[(bits >> 6) & 0x3f]; + result[pos++] = pad; + cols += 2; + } + } + + if (cols > 0 && is_chunked) + result[pos++] = '\n'; + + result[pos] = 0; + *output_len = pos; + return result; +} + +size_t +ACE_Base64::length (const ACE_Byte* input) +{ + if (!ACE_Base64::init_) + ACE_Base64::init(); + + ACE_Byte* ptr = const_cast (input); + while (*ptr != 0 && + (member_[*(ptr)] == 1 || *ptr == pad + || ACE_OS::ace_isspace (*ptr))) + ++ptr; + size_t len = ptr - input; + len = ((len + 3) / 4) * 3 + 1 ; + return len; +} + +ACE_Byte* +ACE_Base64::decode (const ACE_Byte* input, size_t* output_len) +{ + if (!ACE_Base64::init_) + ACE_Base64::init(); + + if (!input) + return 0; + + size_t result_len = ACE_Base64::length (input); + ACE_Byte* result = 0; + ACE_NEW_RETURN (result, ACE_Byte[result_len], 0); + + ACE_Byte* ptr = const_cast (input); + while (*ptr != 0 && + (member_[*(ptr)] == 1 || *ptr == pad + || ACE_OS::ace_isspace (*ptr))) + ++ptr; + size_t input_len = ptr - input; + + int char_count = 0; + int bits = 0; + size_t pos = 0; + + size_t i = 0; + for (; i < input_len; ++i) + { + if (input[i] == pad) + break; + if (!ACE_Base64::member_[input[i]]) + continue; + bits += decoder_[input[i]]; + ++char_count; + + if (char_count == 4) + { + result[pos++] = static_cast (bits >> 16); + result[pos++] = static_cast ((bits >> 8) & 0xff); + result[pos++] = static_cast (bits & 0xff); + bits = 0; + char_count = 0; + } + else + { + bits <<= 6; + } + } + + int errors = 0; + if ( i == input_len) + { + if (char_count) + { + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("Decoding incomplete: atleast %d bits truncated\n"), + (4 - char_count) * 6)); + ++errors; + } + } + else + { + switch (char_count) + { + case 1: + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("Decoding incomplete: atleast 2 bits missing\n"))); + ++errors; + break; + case 2: + result[pos++] = static_cast (bits >> 10); + break; + case 3: + result[pos++] = static_cast (bits >> 16); + result[pos++] = static_cast ((bits >> 8) & 0xff); + break; + } + } + + if (errors) + { + delete[] result; + return 0; + } + result[pos] = 0; + *output_len = pos; + return result; +} + +void +ACE_Base64::init () +{ + if (!ACE_Base64::init_) + { + for (ACE_Byte i = 0; i < sizeof (alphabet); ++i) + { + ACE_Base64::decoder_[alphabet[i]] = i; + ACE_Base64::member_ [alphabet[i]] = 1; + } + ACE_Base64::init_ = true; + } + return; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Codecs.h b/ACE/ace/Codecs.h new file mode 100644 index 00000000000..85447b75e06 --- /dev/null +++ b/ACE/ace/Codecs.h @@ -0,0 +1,121 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Codecs.h + * + * $Id$ + * + * @author Krishnakumar B + * + * Codecs is a generic wrapper for various encoding and decoding + * mechanisms. Currently it includes Base64 content transfer-encoding as + * specified by RFC 2045, Multipurpose Internet Mail Extensions (MIME) Part + * One: Format of Internet Message Bodies. + * + */ +//============================================================================= + +#ifndef ACE_CODECS_H +#define ACE_CODECS_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Basic_Types.h" +#include "ace/Global_Macros.h" + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Base64 + * + * @brief Encode/Decode a stream of bytes according to Base64 encoding. + * + * This class provides methods to encode or decode a stream of bytes + * to/from Base64 encoding. It doesn't convert the input stream to a + * canonical form before encoding. + * + */ +class ACE_Export ACE_Base64 +{ +public: + + //@{ + + /** + * Encodes a stream of bytes to Base64 data + * + * @param input Binary data in byte stream. + * @param input_len Length of the byte stream. + * @param output_len Length of the encoded Base64 byte stream. + * @param is_chunked If true, terminate 72 character blocks with newline + * @return Encoded Base64 data in byte stream or NULL if input data cannot + * be encoded. + */ + + static ACE_Byte* encode (const ACE_Byte* input, + const size_t input_len, + size_t* output_len, + bool is_chunked = true); + /** + * Decodes a stream of Base64 to bytes data + * + * @param input Encoded Base64 data in byte stream. + * @param output_len Length of the binary byte stream. + * @return Binary data in byte stream or NULL if input data cannot + * be encoded. + */ + static ACE_Byte* decode (const ACE_Byte* input, + size_t* output_len); + + /** + * Return the length of the encoded input data + * + * @param input Encoded Base64 data in byte stream. + * @return Length of the encoded Base64 data. + * + */ + static size_t length (const ACE_Byte* input); + + //@} + +protected: + + // Prevent default construction. + ACE_Base64 (void) {} + +private: + + // Preventing copying and assignment. + ACE_Base64 (ACE_Base64 const &); + ACE_Base64 & operator= (ACE_Base64 const &); + + /// Initialize the tables for encoding/decoding. + static void init (void); + +private: + + /// Alphabet used for decoding i.e decoder_[alphabet_[i = 0..63]] = i + static ACE_Byte decoder_[]; + + /// Alphabet used to check valid range of encoded input i.e + /// member_[alphabet_[0..63]] = 1 + static ACE_Byte member_[]; + + /// Boolean to denote whether initialization is complete + static bool init_; + +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" + +#endif /* ACE_CODECS_H */ diff --git a/ACE/ace/Codeset_IBM1047.cpp b/ACE/ace/Codeset_IBM1047.cpp new file mode 100644 index 00000000000..5e208fd373f --- /dev/null +++ b/ACE/ace/Codeset_IBM1047.cpp @@ -0,0 +1,312 @@ + +//============================================================================= +/** + * @file Codeset_IBM1047.cpp + * + * $Id$ + * + * Defines the arrays required to convert between ISO8859 (aka + * Latin/1) and IBM1047 (aka EBCDIC). + * + * + * @author Jim Rogers (jrogers@viasoft.com) + */ +//============================================================================= + + +#include "ace/Codeset_IBM1047.h" + +#if defined (ACE_HAS_EBCDIC) + +ACE_RCSID (ace, + Codeset_IBM1047, + "$Id$") + +#include "ace/OS_Memory.h" +#include "ace/OS_NS_string.h" + +namespace +{ + char const to_IBM1047[] = + { + "\x00\x01\x02\x03\x37\x2D\x2E\x2F\x16\x05\x25\x0B\x0C\x0D\x0E\x0F" // 00-0F + "\x10\x11\x12\x13\x3C\x3D\x32\x26\x18\x19\x3F\x27\x22\x1D\x35\x1F" // 10-1F + "\x40\x5A\x7F\x7B\x5B\x6C\x50\x7D\x4D\x5D\x5C\x4E\x6B\x60\x4B\x61" // 20-2F + "\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\x7A\x5E\x4C\x7E\x6E\x6F" // 30-3F + "\x7C\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xD1\xD2\xD3\xD4\xD5\xD6" // 40-4F + "\xD7\xD8\xD9\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xAD\xE0\xBD\x5F\x6D" // 50-5F + "\x79\x81\x82\x83\x84\x85\x86\x87\x88\x89\x91\x92\x93\x94\x95\x96" // 60-6F + "\x97\x98\x99\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xC0\x4F\xD0\xA1\x07" // 70-7F + "\x43\x20\x21\x1C\x23\xEB\x24\x9B\x71\x28\x38\x49\x90\xBA\xEC\xDF" // 80-8F + "\x45\x29\x2A\x9D\x72\x2B\x8A\x9A\x67\x56\x64\x4A\x53\x68\x59\x46" // 90-9F + "\xEA\xDA\x2C\xDE\x8B\x55\x41\xFE\x58\x51\x52\x48\x69\xDB\x8E\x8D" // A0-AF + "\x73\x74\x75\xFA\x15\xB0\xB1\xB3\xB4\xB5\x6A\xB7\xB8\xB9\xCC\xBC" // B0-BF + "\xAB\x3E\x3B\x0A\xBF\x8F\x3A\x14\xA0\x17\xCB\xCA\x1A\x1B\x9C\x04" // C0-CF + "\x34\xEF\x1E\x06\x08\x09\x77\x70\xBE\xBB\xAC\x54\x63\x65\x66\x62" // D0-DF + "\x30\x42\x47\x57\xEE\x33\xB6\xE1\xCD\xED\x36\x44\xCE\xCF\x31\xAA" // E0-EF + "\xFC\x9E\xAE\x8C\xDD\xDC\x39\xFB\x80\xAF\xFD\x78\x76\xB2\x9F\xFF" // F0-FF +}; + + char const from_IBM1047[] = + { + "\x00\x01\x02\x03\xCF\x09\xD3\x7F\xD4\xD5\xC3\x0B\x0C\x0D\x0E\x0F" // 00-0F + "\x10\x11\x12\x13\xC7\xB4\x08\xC9\x18\x19\xCC\xCD\x83\x1D\xD2\x1F" // 10-1F + "\x81\x82\x1C\x84\x86\x0A\x17\x1B\x89\x91\x92\x95\xA2\x05\x06\x07" // 20-2F + "\x20\xEE\x16\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\xC1\x1A" // 30-3F + "\x20\xA6\xE1\x80\xEB\x90\x9F\xE2\xAB\x8B\x9B\x2E\x3C\x28\x2B\x7C" // 40-4F + "\x26\xA9\xAA\x9C\xDB\xA5\x99\xE3\xA8\x9E\x21\x24\x2A\x29\x3B\x5E" // 50-5F + "\x2D\x2F\xDF\xDC\x9A\xDD\xDE\x98\x9D\xAC\xBA\x2C\x25\x5F\x3E\x3F" // 60-6F + "\xD7\x88\x94\xB0\xB1\xB2\xFC\xD6\xFB\x60\x3A\x23\x40\x27\x3D\x22" // 70-7F + "\xF8\x61\x62\x63\x64\x65\x66\x67\x68\x69\x96\xA4\xF3\xAF\xAE\xC5" // 80-8F + "\x8C\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x97\x87\xCE\x93\xF1\xFE" // 90-9F + "\xC8\x7E\x73\x74\x75\x76\x77\x78\x79\x7A\xEF\xC0\xDA\x5B\xF2\xF9" // A0-AF + "\xB5\xB6\xFD\xB7\xB8\xB9\xE6\xBB\xBC\xBD\x8D\xD9\xBF\x5D\xD8\xC4" // B0-BF + "\x7B\x41\x42\x43\x44\x45\x46\x47\x48\x49\xCB\xCA\xBE\xE8\xEC\xED" // C0-CF + "\x7D\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\xA1\xAD\xF5\xF4\xA3\x8F" // D0-DF + "\x5C\xE7\x53\x54\x55\x56\x57\x58\x59\x5A\xA0\x85\x8E\xE9\xE4\xD1" // E0-EF + "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\xB3\xF7\xF0\xFA\xA7\xFF" // F0-FF + }; +} + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_IBM1047_ISO8859::ACE_IBM1047_ISO8859 (void) +{ +} + +ACE_IBM1047_ISO8859::~ACE_IBM1047_ISO8859 (void) +{ +} + +ACE_CDR::ULong +ACE_IBM1047_ISO8859::ncs () +{ + return 0x10020417; +} + +ACE_CDR::ULong +ACE_IBM1047_ISO8859::tcs () +{ + return 0x00010001; +} + +ACE_CDR::Boolean +ACE_IBM1047_ISO8859::read_char (ACE_InputCDR &in, + ACE_CDR::Char &x) +{ + if (this->read_1 (in, reinterpret_cast (&x))) + { + x = to_IBM1047[x]; + return 1; + } + return 0; +} + +ACE_CDR::Boolean +ACE_IBM1047_ISO8859::read_string (ACE_InputCDR& in, + ACE_CDR::Char *& x) +{ + ACE_CDR::ULong len; + + in.read_ulong (len); + + if (len > 0) + { + ACE_NEW_RETURN (x, + ACE_CDR::Char[len], + 0); + + if (this->read_char_array (in, x, len)) + return 1; + + delete [] x; + } + + x = 0; + return 0; +} + +ACE_CDR::Boolean +ACE_IBM1047_ISO8859::read_char_array (ACE_InputCDR& in, + ACE_CDR::Char* x, + ACE_CDR::ULong len) +{ + if (this->read_array (in, + x, + ACE_CDR::OCTET_SIZE, + ACE_CDR::OCTET_ALIGN, + len)) + { + for (ACE_CDR::ULong i = 0; i != len; ++i) + x[i] = to_IBM1047[x[i]]; + + return 1; + } + + return 0; +} + +ACE_CDR::Boolean +ACE_IBM1047_ISO8859::write_char (ACE_OutputCDR& out, + ACE_CDR::Char x) +{ + return + this->write_1 (out, + reinterpret_cast (&from_IBM1047[x])); +} + +ACE_CDR::Boolean +ACE_IBM1047_ISO8859::write_string (ACE_OutputCDR& out, + ACE_CDR::ULong len, + const ACE_CDR::Char* x) +{ + if (out.write_ulong (len + 1)) + return this->write_char_array (out, x, len + 1); + return 0; +} + +ACE_CDR::Boolean +ACE_IBM1047_ISO8859::write_char_array (ACE_OutputCDR& out, + const ACE_CDR::Char* x, + ACE_CDR::ULong len) +{ + char *buf = 0; + if (this->adjust (out, len, 1, buf) == 0) + { + ACE_OS::memcpy (buf, x, len); + + for (ACE_CDR::ULong i = 0; i != len; ++i) + buf[i] = from_IBM1047[buf[i]]; + + return 1; + } + + this->good_bit(out, 0); + return 0; +} + +// **************************************************************** + +ACE_ISO8859_IBM1047::ACE_ISO8859_IBM1047 (void) +{ +} + +ACE_ISO8859_IBM1047::~ACE_ISO8859_IBM1047 (void) +{ +} + +ACE_CDR::ULong +ACE_ISO8859_IBM1047::ncs () +{ + return 0x00010001; +} + +ACE_CDR::ULong +ACE_ISO8859_IBM1047::tcs () +{ + return 0x10020417; +} + +ACE_CDR::Boolean +ACE_ISO8859_IBM1047::read_char (ACE_InputCDR& in, + ACE_CDR::Char& x) +{ + if (this->read_1 (in, reinterpret_cast (&x))) + { + x = from_IBM1047[x]; + return 1; + } + return 0; +} + +ACE_CDR::Boolean +ACE_ISO8859_IBM1047::read_string (ACE_InputCDR &in, + ACE_CDR::Char *&x) +{ + ACE_CDR::ULong len; + + in.read_ulong (len); + + if (len > 0) + { + ACE_NEW_RETURN (x, + ACE_CDR::Char[len], + 0); + + if (this->read_char_array (in, x, len)) + return 1; + + delete [] x; + } + + x = 0; + return 0; +} + +ACE_CDR::Boolean +ACE_ISO8859_IBM1047::read_char_array (ACE_InputCDR &in, + ACE_CDR::Char *x, + ACE_CDR::ULong len) +{ + if (this->read_array (in, + x, + ACE_CDR::OCTET_SIZE, + ACE_CDR::OCTET_ALIGN, + len)) + { + for (ACE_CDR::ULong i = 0; i != len; ++i) + x[i] = from_IBM1047[x[i]]; + + return 1; + } + + return 0; +} + +ACE_CDR::Boolean +ACE_ISO8859_IBM1047::write_char (ACE_OutputCDR &out, + ACE_CDR::Char x) +{ + return + this->write_1 (out, + reinterpret_cast (&to_IBM1047[x])); +} + +ACE_CDR::Boolean +ACE_ISO8859_IBM1047::write_string (ACE_OutputCDR& out, + ACE_CDR::ULong len, + const ACE_CDR::Char* x) +{ + if (out.write_ulong (len + 1)) + return this->write_char_array (out, x, len + 1); + else + return 0; +} + +ACE_CDR::Boolean +ACE_ISO8859_IBM1047::write_char_array (ACE_OutputCDR &out, + const ACE_CDR::Char *x, + ACE_CDR::ULong len) +{ + char *buf = 0; + + if (this->adjust (out, len, 1, buf) == 0) + { + ACE_OS::memcpy (buf, x, len); + + for (ACE_CDR::ULong i = 0; i != len; ++i) + buf[i] = to_IBM1047[buf[i]]; + + return 1; + } + + this->good_bit (out, 0); + return 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#elif defined (__HP_aCC) +// Make aC++ stop complaining about an empty translation unit +static int const shut_up_aCC = 0; +#endif /* ACE_HAS_EBCDIC */ diff --git a/ACE/ace/Codeset_IBM1047.h b/ACE/ace/Codeset_IBM1047.h new file mode 100644 index 00000000000..c5bfdafcd49 --- /dev/null +++ b/ACE/ace/Codeset_IBM1047.h @@ -0,0 +1,128 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Codeset_IBM1047.h + * + * $Id$ + * + * Declares the arrays required to convert between ISO8859 (aka + * Latin/1) and IBM1047 (aka EBCDIC). + * + * + * @author Jim Rogers (jrogers@viasoft.com) + */ +//============================================================================= + + +#ifndef ACE_CODESET_IMB1047_H +#define ACE_CODESET_IMB1047_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_EBCDIC) + +#include "ace/CDR_Stream.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// **************************************************************** + +/** + * @class ACE_IBM1047_ISO8859 + * + * @brief Codeset translation specialization. + * + * This class performs the codeset translation: + * - Native: IBM_1047 (i.e. EBCDIC) + * - Stream: ISO-8859 (i.e. Latin/1) + */ +class ACE_Export ACE_IBM1047_ISO8859 : public ACE_Char_Codeset_Translator +{ +public: + /// A do nothing constructor. + ACE_IBM1047_ISO8859 (void); + + /// Virtual destruction + virtual ~ACE_IBM1047_ISO8859 (void); + + // = Documented in $ACE_ROOT/ace/CDR_Stream.h + virtual ACE_CDR::Boolean read_char (ACE_InputCDR &, + ACE_CDR::Char &); + virtual ACE_CDR::Boolean read_string (ACE_InputCDR &, + ACE_CDR::Char *&); + virtual ACE_CDR::Boolean read_char_array (ACE_InputCDR &, + ACE_CDR::Char *, + ACE_CDR::ULong); + virtual ACE_CDR::Boolean write_char (ACE_OutputCDR &, + ACE_CDR::Char); + virtual ACE_CDR::Boolean write_string (ACE_OutputCDR &, + ACE_CDR::ULong, + const ACE_CDR::Char *); + virtual ACE_CDR::Boolean write_char_array (ACE_OutputCDR &, + const ACE_CDR::Char *, + ACE_CDR::ULong); + + /// return the native codeset ID as defined in the OSF code and character + /// set registry, 0x10020417 + virtual ACE_CDR::ULong ncs (); + /// return the translated codeset ID as defined in the OSF code and character + /// set registry, 0x00010001 + virtual ACE_CDR::ULong tcs (); +}; + +/** + * @class ACE_ISO8859_IBM1047 + * + * @brief Codeset translation specialization. + * + * This class performs the codeset translation: + * - Native: ISO-8859 (i.e. Latin/1) + * - Stream: IBM-1047 (i.e. EBCDIC) + */ +class ACE_Export ACE_ISO8859_IBM1047 : public ACE_Char_Codeset_Translator +{ +public: + /// A do nothing constructor. + ACE_ISO8859_IBM1047 (void); + + /// Virtual destruction + virtual ~ACE_ISO8859_IBM1047 (void); + + // = Documented in $ACE_ROOT/ace/CDR_Stream.h + virtual ACE_CDR::Boolean read_char (ACE_InputCDR &, + ACE_CDR::Char &); + virtual ACE_CDR::Boolean read_string (ACE_InputCDR &, + ACE_CDR::Char *&); + virtual ACE_CDR::Boolean read_char_array (ACE_InputCDR &, + ACE_CDR::Char *, + ACE_CDR::ULong); + virtual ACE_CDR::Boolean write_char (ACE_OutputCDR &, + ACE_CDR::Char); + virtual ACE_CDR::Boolean write_string (ACE_OutputCDR &, + ACE_CDR::ULong, + const ACE_CDR::Char *); + virtual ACE_CDR::Boolean write_char_array (ACE_OutputCDR &, + const ACE_CDR::Char *, + ACE_CDR::ULong); + + /// return the native codeset ID as defined in the OSF code and character + /// set registry, 0x00010001 + virtual ACE_CDR::ULong ncs (); + /// return the translated codeset ID as defined in the OSF code and character + /// set registry, 0x10020417 + virtual ACE_CDR::ULong tcs (); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_EBCDIC */ + +#include /**/ "ace/post.h" + +#endif /* ACE_CODESET_IMB1047_H */ diff --git a/ACE/ace/Codeset_Registry.cpp b/ACE/ace/Codeset_Registry.cpp new file mode 100644 index 00000000000..b98a1dd7e89 --- /dev/null +++ b/ACE/ace/Codeset_Registry.cpp @@ -0,0 +1,111 @@ +//============================================================================= +/** + * @file Codeset_Registry.cpp + * + * $Id$ + * + * emulated codset regstry functions + * + * + * @author Phil Mesnier + */ +//============================================================================= + +#include "ace/Codeset_Registry.h" +#include "ace/OS_Memory.h" +#include "ace/OS_NS_string.h" + +// $Id$ + +#if !defined (__ACE_INLINE__) +#include "ace/Codeset_Registry.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID (ace, + Codeset_Registry, + "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +int +ACE_Codeset_Registry::locale_to_registry_i (const ACE_CString &locale, + ACE_CDR::ULong &codeset_id, + ACE_CDR::UShort *num_sets, + ACE_CDR::UShort **char_sets) +{ + registry_entry const *element = 0; + for (size_t i = 0; element == 0 && i < num_registry_entries_; i++) + if (ACE_OS::strcmp (registry_db_[i].loc_name_, locale.c_str ()) == 0) + element = ®istry_db_[i]; + if (element == 0) + return 0; + codeset_id = element->codeset_id_; + if (num_sets != 0) + *num_sets = element->num_sets_; + if (char_sets != 0) + { + ACE_NEW_RETURN (*char_sets,ACE_CDR::UShort[element->num_sets_],0); + ACE_OS::memcpy (*char_sets, element->char_sets_, + element->num_sets_ * sizeof (ACE_CDR::UShort)); + } + return 1; +} + +int +ACE_Codeset_Registry::registry_to_locale_i (ACE_CDR::ULong codeset_id, + ACE_CString &locale, + ACE_CDR::UShort *num_sets, + ACE_CDR::UShort **char_sets) +{ + registry_entry const *element = 0; + for (size_t i = 0; element == 0 && i < num_registry_entries_; i++) + if (codeset_id == registry_db_[i].codeset_id_) + element = ®istry_db_[i]; + if (element == 0) + return 0; + locale.set (element->loc_name_); + if (num_sets != 0) + *num_sets = element->num_sets_; + if (char_sets != 0) + { + ACE_NEW_RETURN (*char_sets,ACE_CDR::UShort[element->num_sets_],0); + ACE_OS::memcpy (*char_sets, element->char_sets_, + element->num_sets_ * sizeof (ACE_CDR::UShort)); + } + return 1; +} + +int +ACE_Codeset_Registry::is_compatible_i (ACE_CDR::ULong codeset_id, + ACE_CDR::ULong other) +{ + registry_entry const *lhs = 0; + registry_entry const *rhs = 0; + for (size_t i = 0; (lhs == 0 || rhs == 0) && i < num_registry_entries_; i++) + { + if (codeset_id == registry_db_[i].codeset_id_) + lhs = ®istry_db_[i]; + if (other == registry_db_[i].codeset_id_) + rhs = ®istry_db_[i]; + } + + if (lhs == 0 || rhs == 0) + return 0; + + for (ACE_CDR::UShort l = 0; l < lhs->num_sets_; l++) + for (ACE_CDR::UShort r = 0; r < rhs->num_sets_; r++) + if (rhs->char_sets_[r] == lhs->char_sets_[l]) + return 1; + return 0; +} + +ACE_CDR::Short +ACE_Codeset_Registry::get_max_bytes_i (ACE_CDR::ULong codeset_id) +{ + for (size_t i = 0; i < num_registry_entries_; i++) + if (codeset_id == registry_db_[i].codeset_id_) + return registry_db_[i].max_bytes_; + return 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Codeset_Registry.h b/ACE/ace/Codeset_Registry.h new file mode 100644 index 00000000000..eb8d013d4af --- /dev/null +++ b/ACE/ace/Codeset_Registry.h @@ -0,0 +1,104 @@ +// -*- C++ -*- +//============================================================================= +/** + * @file Codeset_Registry.h + * + * $Id$ + * + * ACE wrapper around access functions for the OSF's DCE codeset registry + * access functions + * + * For environments that intrinsicly support the DCE defined access functions, + * the methods in this class are simply wrappers. On other platforms, emulation + * is provided. The motivation for this class is to support interoperability + * via translators and the CDR streams, primarily in TAO, but this capability + * is not restricted to CORBA. + * + * The emulated functionalty supports Open Group RFC #40, currently RFC 40.2, + * www.opengroup.org/tech/rfc/rfc40.2.html + * + * @author Phil Mesnier + */ +//============================================================================= + +#ifndef ACE_CODESET_REGISTRY_H +#define ACE_CODESET_REGISTRY_H + +#include /**/ "ace/pre.h" +#include "ace/SString.h" +#include "ace/CDR_Base.h" +#include "ace/Codeset_Symbols.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_DCE_CODESET_REGISTRY) +#include /**/ +#endif /* ACE_HAS_DCE_CODESET_REGISTRY */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_Export ACE_Codeset_Registry +{ +public: + + /// Based on a locale string, find the registry value and optional codeset + /// collection. This wraps the dce_cs_loc_to_rgy function, or emulates it. + static int locale_to_registry (const ACE_CString &locale, + ACE_CDR::ULong &codeset_id, + ACE_CDR::UShort * = 0, + ACE_CDR::UShort ** = 0); + + /// Based on a registry value, find the locale string and optional codeset + /// collection. This wraps the dce_cs_rgy_to_loc function, or emulates it. + static int registry_to_locale (ACE_CDR::ULong codeset_id, + ACE_CString &locale, + ACE_CDR::UShort * = 0, + ACE_CDR::UShort ** = 0); + + /// Tell if two codesets are compatible. This wraps the + /// rpc_cs_char_set_compat_check function. + static int is_compatible (ACE_CDR::ULong codeset_id, + ACE_CDR::ULong other); + + /// Return the max number of bytes required to represent a single character. + /// This wraps the rpc_rgy_get_max_bytes function. + static ACE_CDR::Short get_max_bytes (ACE_CDR::ULong codeset_id); + + enum {max_charsets_ = 5}; +protected: + typedef struct { + const char * desc_; + const char * loc_name_; + ACE_CDR::ULong codeset_id_; + ACE_CDR::UShort num_sets_; + ACE_CDR::UShort char_sets_[max_charsets_]; + ACE_CDR::UShort max_bytes_; + } registry_entry; + +private: + static size_t const num_registry_entries_; + static registry_entry const registry_db_[]; + + static int locale_to_registry_i (const ACE_CString &locale, + ACE_CDR::ULong &codeset_id, + ACE_CDR::UShort * = 0, + ACE_CDR::UShort ** = 0); + static int registry_to_locale_i (ACE_CDR::ULong codeset_id, + ACE_CString &locale, + ACE_CDR::UShort * = 0, + ACE_CDR::UShort ** = 0); + static int is_compatible_i (ACE_CDR::ULong codeset_id, + ACE_CDR::ULong other); + static ACE_CDR::Short get_max_bytes_i (ACE_CDR::ULong codeset_id); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Codeset_Registry.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_CODESET_REGISTRY_H */ diff --git a/ACE/ace/Codeset_Registry.inl b/ACE/ace/Codeset_Registry.inl new file mode 100644 index 00000000000..d24e07cc83b --- /dev/null +++ b/ACE/ace/Codeset_Registry.inl @@ -0,0 +1,102 @@ +// -*- C++ -*- +//============================================================================= +/** + * @file Codeset_Registry.inl + * + * $Id$ + * + * ACE wrapper around access functions for the OSF's DCE codeset registry + * access functions - the inline functions either call the system supplied + * DCE based codeset regsitry function, or calls the emulation + * + * + * @author Phil Mesnier + */ +//============================================================================= + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +int +ACE_Codeset_Registry::locale_to_registry(const ACE_CString &locale, + ACE_CDR::ULong &codeset_id, + ACE_CDR::UShort *num_sets, + ACE_CDR::UShort **char_sets) +{ +#if defined (ACE_HAS_DCE_CODESET_REGISTRY) + error_status_t result; + dce_cs_loc_to_rgy (locale.c_str(), + &codeset_id, + num_sets, + char_sets, + &result); + return (result == dce_cs_c_ok) ? 1 : 0; +#else + return ACE_Codeset_Registry::locale_to_registry_i (locale, + codeset_id, + num_sets, + char_sets); +#endif /* ACE_HAS_DCE_CODESET_REGISTRY */ +} + +// based on a registry value, find the locale string and optional codeset +// collection. This wraps the dce_cs_rgy_to_loc function, or emulates it. +ACE_INLINE +int +ACE_Codeset_Registry::registry_to_locale(ACE_CDR::ULong codeset_id, + ACE_CString &locale, + ACE_CDR::UShort *num_sets, + ACE_CDR::UShort **char_sets) +{ +#if defined (ACE_HAS_DCE_CODESET_REGISTRY) + error_status_t result; + char *buffer; + dce_cs_rgy_to_loc (codeset_id, + &buffer, + num_sets, + char_sets, + &result); + locale.set(buffer); // does a copy :-( + free (buffer); + return (result == dce_cs_c_ok) ? 1 : 0; +#else + return ACE_Codeset_Registry::registry_to_locale_i (codeset_id, + locale, + num_sets, + char_sets); +#endif /* ACE_HAS_DCE_CODESET_REGISTRY */ +} + +// Tell if two codesets are compatible. This wraps the +// rpc_cs_char_set_compat_check function. +ACE_INLINE +int +ACE_Codeset_Registry::is_compatible (ACE_CDR::ULong codeset_id, + ACE_CDR::ULong other) +{ +#if defined (ACE_HAS_DCE_CODESET_REGISTRY) + error_status_t result; + rpc_cs_char_set_compat_check(codeset_id,other,&result); + return (result == rpc_s_ok) ? 1 : 0; +#else + return ACE_Codeset_Registry::is_compatible_i (codeset_id,other); +#endif /* ACE_HAS_DCE_CODESET_REGISTRY */ +} + +// Return the max number of bytes required to represent a single character. +// This wraps the rpc_rgy_get_max_bytes function. +ACE_INLINE +ACE_CDR::Short +ACE_Codeset_Registry::get_max_bytes (ACE_CDR::ULong codeset_id) +{ +#if defined (ACE_HAS_DCE_CODESET_REGISTRY) + error_status_t result; + short max_bytes; + rpc_rgy_get_max_bytes(codeset_id,&max_bytes,&result); + return (result == rpc_s_ok) ? (short)max_bytes : 0; +#else + return ACE_Codeset_Registry::get_max_bytes_i (codeset_id); +#endif /* ACE_HAS_DCE_CODESET_REGISTRY */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Codeset_Registry_db.cpp b/ACE/ace/Codeset_Registry_db.cpp new file mode 100644 index 00000000000..8b1ef176576 --- /dev/null +++ b/ACE/ace/Codeset_Registry_db.cpp @@ -0,0 +1,29 @@ +/* $Id$ + * Codeset registry DB, generated Fri Feb 28 21:01:30 2003 + * source: code_set_registry1.2g.txt + * + * To populate the registry_db, construct a codeset registry text file based + * on the OSF's Character and Code Set Registry. See DCE RFC 40.1 for details + * on obtaining the full text for the current registry. Once you have composed + * a text file containing all the desired codeset information, build and run + * mkcsregdb. The source is in $ACE_ROOT/apps/mkcsregdb. It will generate a new + * copy of this file, with the registry_db_ array properly initialized. + */ + +#include "ace/Codeset_Registry.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Codeset_Registry::registry_entry const +ACE_Codeset_Registry::registry_db_[] = +{ + {"ISO 8859-1:1987; Latin Alphabet No. 1","ASCII",0x00010001,1,{0x0011},1}, + {"IBM-1047 (CCSID 01047); Latin-1 Open System","EBCDIC",0x10020417,1,{0x0011},1}, + {"ISO/IEC 10646-1:1993; UCS-4, Level 1","UCS-4",0x00010104,1,{0x1000},4}, + {"ISO/IEC 10646-1:1993; UTF-16, UCS Transformation Format 16-bit form","Unicode",0x00010109,1,{0x1000},2}, + {"X/Open UTF-8; UCS Transformation Format 8 (UTF-8)","UTF-8",0x05010001,1,{0x1000},6} +}; + +size_t const ACE_Codeset_Registry::num_registry_entries_ = 5; + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Codeset_Symbols.h b/ACE/ace/Codeset_Symbols.h new file mode 100644 index 00000000000..d2d20ce036b --- /dev/null +++ b/ACE/ace/Codeset_Symbols.h @@ -0,0 +1,220 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Codeset_Symbols.h + * + * $Id$ + * + * Symbolic names for codeset ids. + * + * @author Dale Wilson (wilson_d@ociweb.com) + */ +//============================================================================= +#ifndef CODESET_SYMBOLS_H +#define CODESET_SYMBOLS_H + +// These numbers are assigned by the OpenGroup, a database is +// available at +// +// ftp://ftp.opengroup.org/pub/code_set_registry/ +// +// Alas, the database is in a semi-regular text file -- difficult to use. +// The following C/C++-friendly version of the codeset ids was captured +// from Version 1.2g of the registry. +// +#define ACE_CODESET_ID_ISO_8859_1 0x00010001U +#define ACE_CODESET_ID_ISO_8859_2 0x00010002U +#define ACE_CODESET_ID_ISO_8859_3 0x00010003U +#define ACE_CODESET_ID_ISO_8859_4 0x00010004U +#define ACE_CODESET_ID_ISO_8859_5 0x00010005U +#define ACE_CODESET_ID_ISO_8859_6 0x00010006U +#define ACE_CODESET_ID_ISO_8859_7 0x00010007U +#define ACE_CODESET_ID_ISO_8859_8 0x00010008U +#define ACE_CODESET_ID_ISO_8859_9 0x00010009U +#define ACE_CODESET_ID_ISO_8859_10 0x0001000AU +#define ACE_CODESET_ID_ISO_8859_15 0x0001000FU +#define ACE_CODESET_ID_ISO_646 0x00010020U +#define ACE_CODESET_ID_ISO_UCS_2_LEVEL_1 0x00010100U +#define ACE_CODESET_ID_ISO_UCS_2_LEVEL_2 0x00010101U +#define ACE_CODESET_ID_ISO_UCS_2_LEVEL_3 0x00010102U +#define ACE_CODESET_ID_ISO_UCS_4_LEVEL_1 0x00010104U +#define ACE_CODESET_ID_ISO_UCS_4_LEVEL_2 0x00010105U +#define ACE_CODESET_ID_ISO_UCS_4_LEVEL_3 0x00010106U +#define ACE_CODESET_ID_ISO_UTF_8 0x00010108U +#define ACE_CODESET_ID_ISO_UTF_16 0x00010109U +#define ACE_CODESET_ID_JIS_X0201 0x00030001U +#define ACE_CODESET_ID_JIS_X0208_1978 0x00030004U +#define ACE_CODESET_ID_JIS_X0208_1983 0x00030005U +#define ACE_CODESET_ID_JIS_X0208_1990 0x00030006U +#define ACE_CODESET_ID_JIS_X0212 0x0003000AU +#define ACE_CODESET_ID_JIS_EUCJP 0x00030010U +#define ACE_CODESET_ID_KS_C5601 0x00040001U +#define ACE_CODESET_ID_KS_C5657 0x00040002U +#define ACE_CODESET_ID_KS_EUCKR 0x0004000AU +#define ACE_CODESET_ID_CNS_11643_1986 0x00050001U +#define ACE_CODESET_ID_CNS_11643_1992 0x00050002U +#define ACE_CODESET_ID_CNS_EUCTW_1991 0x0005000AU +#define ACE_CODESET_ID_CNS_EUCTW_1993 0x00050010U +#define ACE_CODESET_ID_TIS_620_25290X000B0001U +#define ACE_CODESET_ID_TTB_CCDC 0x000D0001U +#define ACE_CODESET_ID_OSF_JAPANESE_UJIS 0x05000010U +#define ACE_CODESET_ID_OSF_JAPANESE_SJIS_1 0x05000011U +#define ACE_CODESET_ID_OSF_JAPANESE_SJIS_2 0x05000012U +#define ACE_CODESET_ID_XOPEN_UTF_8 0x05010001U +#define ACE_CODESET_ID_JVC_EUCJP 0x05020001U +#define ACE_CODESET_ID_JVC_SJIS 0x05020002U +#define ACE_CODESET_ID_DEC_KANJI 0x10000001U +#define ACE_CODESET_ID_SUPER_DEC_KANJI 0x10000002U +#define ACE_CODESET_ID_DEC_SHIFT_JIS 0x10000003U +#define ACE_CODESET_ID_HP_ROMAN8 0x10010001U +#define ACE_CODESET_ID_HP_KANA8 0x10010002U +#define ACE_CODESET_ID_HP_ARABIC8 0x10010003U +#define ACE_CODESET_ID_HP_GREEK8 0x10010004U +#define ACE_CODESET_ID_HP_HEBREW8 0x10010005U +#define ACE_CODESET_ID_HP_TURKISH8 0x10010006U +#define ACE_CODESET_ID_HP15CN 0x10010007U +#define ACE_CODESET_ID_HP_BIG5 0x10010008U +#define ACE_CODESET_ID_HP_JAPANESE15__SJIS_ 0x10010009U +#define ACE_CODESET_ID_HP_SJISHI 0x1001000AU +#define ACE_CODESET_ID_HP_SJISPC 0x1001000BU +#define ACE_CODESET_ID_HP_UJIS 0x1001000CU +#define ACE_CODESET_ID_IBM_037 0x10020025U +#define ACE_CODESET_ID_IBM_273 0x10020111U +#define ACE_CODESET_ID_IBM_277 0x10020115U +#define ACE_CODESET_ID_IBM_278 0x10020116U +#define ACE_CODESET_ID_IBM_280 0x10020118U +#define ACE_CODESET_ID_IBM_282 0x1002011AU +#define ACE_CODESET_ID_IBM_284 0x1002011CU +#define ACE_CODESET_ID_IBM_285 0x1002011DU +#define ACE_CODESET_ID_IBM_290 0x10020122U +#define ACE_CODESET_ID_IBM_297 0x10020129U +#define ACE_CODESET_ID_IBM_300 0x1002012CU +#define ACE_CODESET_ID_IBM_301 0x1002012DU +#define ACE_CODESET_ID_IBM_420 0x100201A4U +#define ACE_CODESET_ID_IBM_424 0x100201A8U +#define ACE_CODESET_ID_IBM_437 0x100201B5U +#define ACE_CODESET_ID_IBM_500 0x100201F4U +#define ACE_CODESET_ID_IBM_833 0x10020341U +#define ACE_CODESET_ID_IBM_834 0x10020342U +#define ACE_CODESET_ID_IBM_835 0x10020343U +#define ACE_CODESET_ID_IBM_836 0x10020344U +#define ACE_CODESET_ID_IBM_837 0x10020345U +#define ACE_CODESET_ID_IBM_838 0x10020346U +#define ACE_CODESET_ID_IBM_839 0x10020347U +#define ACE_CODESET_ID_IBM_850 0x10020352U +#define ACE_CODESET_ID_IBM_852 0x10020354U +#define ACE_CODESET_ID_IBM_855 0x10020357U +#define ACE_CODESET_ID_IBM_856 0x10020358U +#define ACE_CODESET_ID_IBM_857 0x10020359U +#define ACE_CODESET_ID_IBM_861 0x1002035DU +#define ACE_CODESET_ID_IBM_862 0x1002035EU +#define ACE_CODESET_ID_IBM_863 0x1002035FU +#define ACE_CODESET_ID_IBM_864 0x10020360U +#define ACE_CODESET_ID_IBM_866 0x10020362U +#define ACE_CODESET_ID_IBM_868 0x10020364U +#define ACE_CODESET_ID_IBM_869 0x10020365U +#define ACE_CODESET_ID_IBM_870 0x10020366U +#define ACE_CODESET_ID_IBM_871 0x10020367U +#define ACE_CODESET_ID_IBM_874 0x1002036AU +#define ACE_CODESET_ID_IBM_875 0x1002036BU +#define ACE_CODESET_ID_IBM_880 0x10020370U +#define ACE_CODESET_ID_IBM_891 0x1002037BU +#define ACE_CODESET_ID_IBM_896 0x10020380U +#define ACE_CODESET_ID_IBM_897 0x10020381U +#define ACE_CODESET_ID_IBM_903 0x10020387U +#define ACE_CODESET_ID_IBM_904 0x10020388U +#define ACE_CODESET_ID_IBM_918 0x10020396U +#define ACE_CODESET_ID_IBM_921 0x10020399U +#define ACE_CODESET_ID_IBM_922 0x1002039AU +#define ACE_CODESET_ID_IBM_926 0x1002039EU +#define ACE_CODESET_ID_IBM_927 0x1002039FU +#define ACE_CODESET_ID_IBM_928 0x100203A0U +#define ACE_CODESET_ID_IBM_929 0x100203A1U +#define ACE_CODESET_ID_IBM_930 0x100203A2U +#define ACE_CODESET_ID_IBM_932 0x100203A4U +#define ACE_CODESET_ID_IBM_933 0x100203A5U +#define ACE_CODESET_ID_IBM_934 0x100203A6U +#define ACE_CODESET_ID_IBM_935 0x100203A7U +#define ACE_CODESET_ID_IBM_936 0x100203A8U +#define ACE_CODESET_ID_IBM_937 0x100203A9U +#define ACE_CODESET_ID_IBM_938 0x100203AAU +#define ACE_CODESET_ID_IBM_939 0x100203ABU +#define ACE_CODESET_ID_IBM_941 0x100203ADU +#define ACE_CODESET_ID_IBM_942 0x100203AEU +#define ACE_CODESET_ID_IBM_943 0x100203AFU +#define ACE_CODESET_ID_IBM_946 0x100203B2U +#define ACE_CODESET_ID_IBM_947 0x100203B3U +#define ACE_CODESET_ID_IBM_948 0x100203B4U +#define ACE_CODESET_ID_IBM_949 0x100203B5U +#define ACE_CODESET_ID_IBM_950 0x100203B6U +#define ACE_CODESET_ID_IBM_951 0x100203B7U +#define ACE_CODESET_ID_IBM_955 0x100203BBU +#define ACE_CODESET_ID_IBM_964 0x100203C4U +#define ACE_CODESET_ID_IBM_970 0x100203CAU +#define ACE_CODESET_ID_IBM_1006 0x100203EEU +#define ACE_CODESET_ID_IBM_1025 0x10020401U +#define ACE_CODESET_ID_IBM_1026 0x10020402U +#define ACE_CODESET_ID_IBM_1027 0x10020403U +#define ACE_CODESET_ID_IBM_1040 0x10020410U +#define ACE_CODESET_ID_IBM_1041 0x10020411U +#define ACE_CODESET_ID_IBM_1043 0x10020413U +#define ACE_CODESET_ID_IBM_1046 0x10020416U +#define ACE_CODESET_ID_IBM_1047 0x10020417U +#define ACE_CODESET_ID_IBM_1088 0x10020440U +#define ACE_CODESET_ID_IBM_1097 0x10020449U +#define ACE_CODESET_ID_IBM_1098 0x1002044AU +#define ACE_CODESET_ID_IBM_1112 0x10020458U +#define ACE_CODESET_ID_IBM_1114 0x1002045AU +#define ACE_CODESET_ID_IBM_1115 0x1002045BU +#define ACE_CODESET_ID_IBM_1122 0x10020462U +#define ACE_CODESET_ID_IBM_1250 0x100204E2U +#define ACE_CODESET_ID_IBM_1251 0x100204E3U +#define ACE_CODESET_ID_IBM_1252 0x100204E4U +#define ACE_CODESET_ID_IBM_1253 0x100204E5U +#define ACE_CODESET_ID_IBM_1254 0x100204E6U +#define ACE_CODESET_ID_IBM_1255 0x100204E7U +#define ACE_CODESET_ID_IBM_1256 0x100204E8U +#define ACE_CODESET_ID_IBM_1257 0x100204E9U +#define ACE_CODESET_ID_IBM_1380 0x10020564U +#define ACE_CODESET_ID_IBM_1381 0x10020565U +#define ACE_CODESET_ID_IBM_1383 0x10020567U +#define ACE_CODESET_ID_IBM_4396 0x1002112CU +#define ACE_CODESET_ID_IBM_4946 0x10021352U +#define ACE_CODESET_ID_IBM_4948 0x10021354U +#define ACE_CODESET_ID_IBM_4951 0x10021357U +#define ACE_CODESET_ID_IBM_4952 0x10021358U +#define ACE_CODESET_ID_IBM_4953 0x10021359U +#define ACE_CODESET_ID_IBM_4960 0x10021360U +#define ACE_CODESET_ID_IBM_4964 0x10021364U +#define ACE_CODESET_ID_IBM_4965 0x10021365U +#define ACE_CODESET_ID_IBM_5026 0x100213A2U +#define ACE_CODESET_ID_IBM_5031 0x100213A7U +#define ACE_CODESET_ID_IBM_5035 0x100213ABU +#define ACE_CODESET_ID_IBM_5048 0x100213B8U +#define ACE_CODESET_ID_IBM_5049 0x100213B9U +#define ACE_CODESET_ID_IBM_5067 0x100213CBU +#define ACE_CODESET_ID_IBM_8612 0x100221A4U +#define ACE_CODESET_ID_IBM_9025 0x10022341U +#define ACE_CODESET_ID_IBM_9026 0x10022342U +#define ACE_CODESET_ID_IBM_9030 0x10022346U +#define ACE_CODESET_ID_IBM_9056 0x10022360U +#define ACE_CODESET_ID_IBM_9066 0x1002236AU +#define ACE_CODESET_ID_IBM_9125 0x100223A5U +#define ACE_CODESET_ID_IBM_25426 0x10026352U +#define ACE_CODESET_ID_IBM_25432 0x10026358U +#define ACE_CODESET_ID_IBM_1042 0x10026412U +#define ACE_CODESET_ID_IBM_28709 0x10027025U +#define ACE_CODESET_ID_IBM_33624 0x10028358U +#define ACE_CODESET_ID_IBM_33722 0x100283BAU +#define ACE_CODESET_ID_HTCSJIS 0x10030001U +#define ACE_CODESET_ID_HTCUJIS 0x10030002U +#define ACE_CODESET_ID_FUJITSU_U90 0x10040001U +#define ACE_CODESET_ID_FUJITSU_S90 0x10040002U +#define ACE_CODESET_ID_FUJITSU_R90 0x10040003U +#define ACE_CODESET_ID_EBCDIC_ASCII_AND_JEF 0x10040004U +#define ACE_CODESET_ID_EBCDIC_KATAKANA_AND_JEF 0x10040005U +#define ACE_CODESET_ID_EBCDIC_JAPANESE_ENGLISH_AND_JEF 0x10040006U + +#define ACE_CODESET_ID_TAO_BACKWARD_COMPATIBLE 0xf54414F0U +#endif // CODESET_SYMBOLS_H diff --git a/ACE/ace/Condition_Recursive_Thread_Mutex.cpp b/ACE/ace/Condition_Recursive_Thread_Mutex.cpp new file mode 100644 index 00000000000..af80f4bfbfd --- /dev/null +++ b/ACE/ace/Condition_Recursive_Thread_Mutex.cpp @@ -0,0 +1,129 @@ +// -*- C++ -*- + +/** + * @file Condition_Recursive_Thread_Mutex.cpp + * + * $Id$ + * + * Originally in Synch.cpp + * + * @author Douglas C. Schmidt + */ + +#include "ace/Condition_Recursive_Thread_Mutex.h" + +#if defined (ACE_HAS_THREADS) + +#if defined (ACE_HAS_DUMP) +# include "ace/Log_Msg.h" +#endif /* ACE_HAS_DUMP */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +int +ACE_Condition::remove (void) +{ + return ACE_OS::cond_destroy (&this->cond_); +} + +void +ACE_Condition::dump (void) const +{ +#if defined (ACE_HAS_DUMP) +// ACE_TRACE ("ACE_Condition::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + // No dump method for ACE_cond_t even in emulated mode. + // cond_.dump (); + this->mutex_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_Condition::~ACE_Condition (void) +{ + this->remove (); +} + +ACE_Condition::ACE_Condition (ACE_Recursive_Thread_Mutex &m) + : mutex_ (m) +{ + ACE_OS::cond_init (&this->cond_); +} + +int +ACE_Condition::wait (const ACE_Time_Value *abstime) +{ + return this->wait (this->mutex_, abstime); +} + +int +ACE_Condition::wait (ACE_Recursive_Thread_Mutex &mutex, + const ACE_Time_Value *abstime) +{ + ACE_recursive_mutex_state mutex_state_holder; + ACE_recursive_thread_mutex_t &recursive_mutex = mutex.mutex (); + + if (ACE_OS::recursive_mutex_cond_unlock (&recursive_mutex, + mutex_state_holder) == -1) + return -1; + + // We wait on the condition, specifying the nesting mutex. For platforms + // with ACE_HAS_RECURSIVE_MUTEXES, this is the recursive mutex itself, + // and is the same as recursive_mutex, above. The caller should have been + // holding the lock on entry to this method, and it is still held. + // For other platforms, this is the nesting mutex that guards the + // ACE_recursive_mutex_t internals, and recursive_mutex_cond_unlock() + // returned with the lock held, but waiters primed and waiting to be + // released. At cond_wait below, the mutex will be released. + // On return, it will be reacquired. + const int result = abstime == 0 + ? ACE_OS::cond_wait (&this->cond_, + &mutex.get_nesting_mutex ()) + : ACE_OS::cond_timedwait (&this->cond_, + &mutex.get_nesting_mutex (), + const_cast (abstime)); + // We are holding the mutex, whether the wait succeeded or failed. + // Stash errno (in case it failed) and then we need to reset the + // recursive mutex state to what it was on entry to this method. + // Resetting it may require a wait for another thread to release + // the ACE_recursive_thread_mutex_t if this is a platform without + // ACE_HAS_RECURSIVE_MUTEXES, and recursive_mutex_cond_relock() takes + // care of that. + { + ACE_Errno_Guard error (errno); + ACE_OS::recursive_mutex_cond_relock (&recursive_mutex, + mutex_state_holder); + } + + return result; +} + +int +ACE_Condition::signal (void) +{ + return ACE_OS::cond_signal (&this->cond_); +} + +int +ACE_Condition::broadcast (void) +{ + return ACE_OS::cond_broadcast (&this->cond_); +} + +ACE_Recursive_Thread_Mutex & +ACE_Condition::mutex (void) +{ + return this->mutex_; +} + +ACE_Condition_Recursive_Thread_Mutex::ACE_Condition_Recursive_Thread_Mutex ( + ACE_Recursive_Thread_Mutex &m) : + ACE_Condition (m) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_THREADS */ diff --git a/ACE/ace/Condition_Recursive_Thread_Mutex.h b/ACE/ace/Condition_Recursive_Thread_Mutex.h new file mode 100644 index 00000000000..cfcd46a9551 --- /dev/null +++ b/ACE/ace/Condition_Recursive_Thread_Mutex.h @@ -0,0 +1,118 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file Condition_Recursive_Thread_Mutex.h + * + * $Id$ + * + * Moved from Synch.h. + * + * @author Douglas C. Schmidt + */ +//========================================================================== + +#ifndef ACE_CONDITION_RECURSIVE_THREAD_MUTEX_H +#define ACE_CONDITION_RECURSIVE_THREAD_MUTEX_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (ACE_HAS_THREADS) +# include "ace/Null_Condition.h" +#else /* ACE_HAS_THREADS */ +#include "ace/Recursive_Thread_Mutex.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template class ACE_Condition; + +/** + * @class ACE_Condition + * + * @brief ACE_Condition template specialization written using + * @a ACE_Recursive_Thread_Mutex. This allows threads to block until + * shared data changes state using recursive mutexes. + */ +template<> +class ACE_Export ACE_Condition +{ +public: + /// Initialize the condition variable with a recursive mutex. + ACE_Condition (ACE_Recursive_Thread_Mutex &m); + + /// Implicitly destroy the condition variable. + ~ACE_Condition (void); + + /** + * Explicitly destroy the condition variable. Note that only one + * thread should call this method since it doesn't protect against + * race conditions. + */ + int remove (void); + + /** + * Block on condition, or until absolute time-of-day has passed. If + * abstime == 0 use "blocking" semantics. Else, if + * != 0 and the call times out before the condition is signaled + * returns -1 and sets errno to ETIME. + */ + int wait (const ACE_Time_Value *abstime = 0); + + /** + * Block on condition or until absolute time-of-day has passed. If + * abstime == 0 use "blocking" wait() semantics on the recursive @a mutex + * passed as a parameter (this is useful if you need to store the + * in shared memory). Else, if != 0 and the + * call times out before the condition is signaled returns -1 + * and sets errno to ETIME. + */ + int wait (ACE_Recursive_Thread_Mutex &mutex, + const ACE_Time_Value *abstime = 0); + + /// Signal one waiting thread. + int signal (void); + + /// Signal *all* waiting threads. + int broadcast (void); + + /// Returns a reference to the underlying mutex; + ACE_Recursive_Thread_Mutex &mutex (void); + + /// Dump the state of an object. + void dump (void) const; + +private: + + // = Prevent assignment and copying. + void operator= (const ACE_Condition &); + ACE_Condition (const ACE_Condition &); + +private: + + /// A normal (i.e., non-recursive) condition variable. + ACE_cond_t cond_; + + /// Reference to the recursive mutex. + ACE_Recursive_Thread_Mutex &mutex_; + +}; + +class ACE_Export ACE_Condition_Recursive_Thread_Mutex + : public ACE_Condition +{ +public: + /// Initialize the condition variable with a recursive mutex. + ACE_Condition_Recursive_Thread_Mutex (ACE_Recursive_Thread_Mutex &m); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* !ACE_HAS_THREADS */ + +#include /**/ "ace/post.h" +#endif /* ACE_CONDITION_RECURSIVE_THREAD_MUTEX_H */ diff --git a/ACE/ace/Condition_T.cpp b/ACE/ace/Condition_T.cpp new file mode 100644 index 00000000000..fa0dab4e80a --- /dev/null +++ b/ACE/ace/Condition_T.cpp @@ -0,0 +1,123 @@ +// $Id$ + +#ifndef ACE_CONDITION_T_CPP +#define ACE_CONDITION_T_CPP + +#include "ace/Condition_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_THREADS) + +#include "ace/Log_Msg.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Condition_T.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_Condition) + +template void +ACE_Condition::dump (void) const +{ +#if defined (ACE_HAS_DUMP) +// ACE_TRACE ("ACE_Condition::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Thread_Condition::ACE_Thread_Condition (MUTEX &m, + const ACE_TCHAR *name, + void *arg) + : ACE_Condition (m, USYNC_THREAD, name, arg) +{ +// ACE_TRACE ("ACE_Thread_Condition::ACE_Thread_Condition"); +} + +template void +ACE_Thread_Condition::dump (void) const +{ +#if defined (ACE_HAS_DUMP) +// ACE_TRACE ("ACE_Thread_Condition::dump"); + + ACE_Condition::dump (); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Condition::ACE_Condition (MUTEX &m, + int type, + const ACE_TCHAR *name, + void *arg) + : + mutex_ (m) +{ + // ACE_TRACE ("ACE_Condition::ACE_Condition"); + + if (ACE_OS::cond_init (&this->cond_, + (short) type, + name, + arg) != 0) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Condition::ACE_Condition"))); +} + +template +ACE_Condition::~ACE_Condition (void) +{ + // ACE_TRACE ("ACE_Condition::~ACE_Condition"); + + if (this->remove () == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Condition::~ACE_Condition"))); +} + +template int +ACE_Condition::wait (void) +{ + // ACE_TRACE ("ACE_Condition::wait"); + return ACE_OS::cond_wait (&this->cond_, + &this->mutex_.lock_); +} + +template int +ACE_Condition::wait (MUTEX &mutex, + const ACE_Time_Value *abstime) +{ +// ACE_TRACE ("ACE_Condition::wait"); + if (abstime == 0) + return this->wait (); + else + { + return ACE_OS::cond_timedwait (&this->cond_, + &mutex.lock_, + (ACE_Time_Value *) abstime); + } +} + +// Peform an "alertable" timed wait. If the argument ABSTIME == 0 +// then we do a regular cond_wait(), else we do a timed wait for up to +// ABSTIME using the Solaris cond_timedwait() function. + +template int +ACE_Condition::wait (const ACE_Time_Value *abstime) +{ +// ACE_TRACE ("ACE_Condition::wait"); + return this->wait (this->mutex_, abstime); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_THREADS */ + +#endif /* ACE_CONDITION_T_CPP */ diff --git a/ACE/ace/Condition_T.h b/ACE/ace/Condition_T.h new file mode 100644 index 00000000000..535642a77e8 --- /dev/null +++ b/ACE/ace/Condition_T.h @@ -0,0 +1,167 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file Condition_T.h + * + * $Id$ + * + * Moved from Synch.h. + * + * @author Douglas C. Schmidt + */ +//========================================================================== + +#ifndef ACE_CONDITION_T_H +#define ACE_CONDITION_T_H + +#include /**/ "ace/pre.h" + +#include "ace/OS_NS_Thread.h" +#include "ace/Lock.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_THREADS) /* ACE platform supports some form of threading. */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_Time_Value; + +/** + * @class ACE_Condition + * + * @brief ACE_Condition variable wrapper, which allows threads to block + * until shared data changes state. + * + * A condition variable enables threads to atomically block and + * test the condition under the protection of a mutual exclu- + * sion lock (mutex) until the condition is satisfied. That is, + * the mutex must have been held by the thread before calling + * wait or signal on the condition. If the condition is false, + * a thread blocks on a condition variable and atomically + * releases the mutex that is waiting for the condition to + * change. If another thread changes the condition, it may wake + * up waiting threads by signaling the associated condition + * variable. The waiting threads, upon awakening, reacquire the + * mutex and re-evaluate the condition. + * Note, you can only parameterize with + * @a ACE_Thread_Mutex, @a ACE_Recursive_Thread_Mutex, or @a ACE_Null_Mutex. + */ +template +class ACE_Condition +{ +public: + // = Initialiation and termination methods. + /// Initialize the condition variable. + ACE_Condition (MUTEX &m, int type = USYNC_THREAD, + const ACE_TCHAR *name = 0, void *arg = 0); + + /// Implicitly destroy the condition variable. + ~ACE_Condition (void); + + // = Lock accessors. + /** + * Block on condition, or until absolute time-of-day has passed. If + * abstime == 0 use "blocking" semantics. Else, if + * != 0 and the call times out before the condition is signaled + * returns -1 and sets errno to ETIME. + */ + int wait (const ACE_Time_Value *abstime); + + /// Block on condition. + int wait (void); + + /** + * Block on condition or until absolute time-of-day has passed. If + * abstime == 0 use "blocking" wait() semantics on the + * passed as a parameter (this is useful if you need to store the + * in shared memory). Else, if != 0 and the + * call times out before the condition is signaled returns -1 + * and sets errno to ETIME. + */ + int wait (MUTEX &mutex, const ACE_Time_Value *abstime = 0); + + /// Signal one waiting thread. + int signal (void); + + /// Signal *all* waiting threads. + int broadcast (void); + + // = Utility methods. + /// Explicitly destroy the condition variable. + int remove (void); + + /// Returns a reference to the underlying mutex_; + MUTEX &mutex (void); + + /// Dump the state of an object. + void dump (void) const; + + // ACE_ALLOC_HOOK_DECLARE; + // Declare the dynamic allocation hooks. + +protected: + /// Condition variable. + ACE_cond_t cond_; + + /// Reference to mutex lock. + MUTEX &mutex_; + +private: + // = Prevent assignment and initialization. + ACE_UNIMPLEMENTED_FUNC (void operator= (const ACE_Condition &)) + ACE_UNIMPLEMENTED_FUNC (ACE_Condition (const ACE_Condition &)) +}; + +/** + * @class ACE_Thread_Condition + * + * @brief ACE_Condition variable wrapper that works within processes. + * + * A condition variable enables threads to atomically block and + * test the condition under the protection of a mutual exclu- + * sion lock (mutex) until the condition is satisfied. That is, + * the mutex must have been held by the thread before calling + * wait or signal on the condition. If the condition is false, + * a thread blocks on a condition variable and atomically + * releases the mutex that is waiting for the condition to + * change. If another thread changes the condition, it may wake + * up waiting threads by signaling the associated condition + * variable. The waiting threads, upon awakening, reacquire the + * mutex and re-evaluate the condition. + */ +template +class ACE_Thread_Condition : public ACE_Condition +{ +public: + // = Initialization method. + ACE_Thread_Condition (MUTEX &m, const ACE_TCHAR *name = 0, void *arg = 0); + + /// Dump the state of an object. + void dump (void) const; + + // ACE_ALLOC_HOOK_DECLARE; + // Declare the dynamic allocation hooks. +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Condition_T.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Condition_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Condition_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#endif /* ACE_HAS_THREADS */ + +#include /**/ "ace/post.h" +#endif /* ACE_CONDITION_T_H */ diff --git a/ACE/ace/Condition_T.inl b/ACE/ace/Condition_T.inl new file mode 100644 index 00000000000..fd7bdb7abdc --- /dev/null +++ b/ACE/ace/Condition_T.inl @@ -0,0 +1,51 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE int +ACE_Condition::remove (void) +{ + // ACE_TRACE ("ACE_Condition::remove"); + + // cond_destroy() is called in a loop if the condition variable is + // BUSY. This avoids a condition where a condition is signaled and + // because of some timing problem, the thread that is to be signaled + // has called the cond_wait routine after the signal call. Since + // the condition signal is not queued in any way, deadlock occurs. + + int result = 0; + + while ((result = ACE_OS::cond_destroy (&this->cond_)) == -1 + && errno == EBUSY) + { + ACE_OS::cond_broadcast (&this->cond_); + ACE_OS::thr_yield (); + } + + return result; +} + +template ACE_INLINE MUTEX & +ACE_Condition::mutex (void) +{ + // ACE_TRACE ("ACE_Condition::mutex"); + return this->mutex_; +} + +template ACE_INLINE int +ACE_Condition::signal (void) +{ +// ACE_TRACE ("ACE_Condition::signal"); + return ACE_OS::cond_signal (&this->cond_); +} + +template ACE_INLINE int +ACE_Condition::broadcast (void) +{ +// ACE_TRACE ("ACE_Condition::broadcast"); + return ACE_OS::cond_broadcast (&this->cond_); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Condition_Thread_Mutex.cpp b/ACE/ace/Condition_Thread_Mutex.cpp new file mode 100644 index 00000000000..1535b4c87f3 --- /dev/null +++ b/ACE/ace/Condition_Thread_Mutex.cpp @@ -0,0 +1,126 @@ +/* -*- C++ -*- */ +/** + * @file Condition_Thread_Mutex.cpp + * + * $Id$ + * + * Originally in Synch.cpp + * + * @author Douglas C. Schmidt + */ + +#include "ace/Condition_Thread_Mutex.h" + +#if defined (ACE_HAS_THREADS) + +#if !defined (__ACE_INLINE__) +#include "ace/Condition_Thread_Mutex.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/Log_Msg.h" + +ACE_RCSID(ace, Condition_Thread_Mutex, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_Condition_Thread_Mutex) + +void +ACE_Condition_Thread_Mutex::dump (void) const +{ +#if defined (ACE_HAS_DUMP) +// ACE_TRACE ("ACE_Condition_Thread_Mutex::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); +#if defined (ACE_WIN32) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("waiters = %d\n"), + this->cond_.waiters ())); +#endif /* ACE_WIN32 */ + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_Condition_Thread_Mutex::ACE_Condition_Thread_Mutex (ACE_Thread_Mutex &m, + const ACE_TCHAR *name, + void *arg) + : mutex_ (m), + removed_ (false) +{ +// ACE_TRACE ("ACE_Condition_Thread_Mutex::ACE_Condition_Thread_Mutex"); + if (ACE_OS::cond_init (&this->cond_, + (short) USYNC_THREAD, + name, + arg) != 0) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Condition_Thread_Mutex::ACE_Condition_Thread_Mutex"))); +} + +ACE_Condition_Thread_Mutex:: +ACE_Condition_Thread_Mutex (ACE_Thread_Mutex &m, + ACE_Condition_Attributes &attributes, + const ACE_TCHAR *name, + void *arg) + : mutex_ (m), + removed_ (false) +{ +// ACE_TRACE ("ACE_Condition_Thread_Mutex::ACE_Condition_Thread_Mutex"); + if (ACE_OS::cond_init (&this->cond_, attributes.attributes_, + name, arg) != 0) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Condition_Thread_Mutex::ACE_Condition_Thread_Mutex"))); +} + +ACE_Condition_Thread_Mutex::~ACE_Condition_Thread_Mutex (void) +{ +// ACE_TRACE ("ACE_Condition_Thread_Mutex::~ACE_Condition_Thread_Mutex"); + this->remove (); +} + +// Peform an "alertable" timed wait. If the argument == 0 +// then we do a regular , else we do a timed wait for up to +// using the function. + +int +ACE_Condition_Thread_Mutex::wait (void) +{ +// ACE_TRACE ("ACE_Condition_Thread_Mutex::wait"); + return ACE_OS::cond_wait (&this->cond_, &this->mutex_.lock_); +} + +int +ACE_Condition_Thread_Mutex::wait (ACE_Thread_Mutex &mutex, + const ACE_Time_Value *abstime) +{ +// ACE_TRACE ("ACE_Condition_Thread_Mutex::wait"); + return ACE_OS::cond_timedwait (&this->cond_, + &mutex.lock_, + const_cast (abstime)); +} + +int +ACE_Condition_Thread_Mutex::wait (const ACE_Time_Value *abstime) +{ +// ACE_TRACE ("ACE_Condition_Thread_Mutex::wait"); + return this->wait (this->mutex_, abstime); +} + +int +ACE_Condition_Thread_Mutex::signal (void) +{ +// ACE_TRACE ("ACE_Condition_Thread_Mutex::signal"); + return ACE_OS::cond_signal (&this->cond_); +} + +int +ACE_Condition_Thread_Mutex::broadcast (void) +{ +// ACE_TRACE ("ACE_Condition_Thread_Mutex::broadcast"); + return ACE_OS::cond_broadcast (&this->cond_); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_THREADS */ diff --git a/ACE/ace/Condition_Thread_Mutex.h b/ACE/ace/Condition_Thread_Mutex.h new file mode 100644 index 00000000000..2806f03691e --- /dev/null +++ b/ACE/ace/Condition_Thread_Mutex.h @@ -0,0 +1,190 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file Condition_Thread_Mutex.h + * + * $Id$ + * + * Moved from Synch.h. + * + * @author Douglas C. Schmidt + */ +//========================================================================== + +#ifndef ACE_CONDITION_THREAD_MUTEX_H +#define ACE_CONDITION_THREAD_MUTEX_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (ACE_HAS_THREADS) +# include "ace/Null_Condition.h" +#else /* ACE_HAS_THREADS */ +// ACE platform supports some form of threading. + +#include "ace/Thread_Mutex.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_Time_Value; + +class ACE_Export ACE_Condition_Attributes +{ +public: + /// Constructor + ACE_Condition_Attributes (int type = ACE_DEFAULT_SYNCH_TYPE); + + /// Destructor + ~ACE_Condition_Attributes (void); + +private: + friend class ACE_Condition_Thread_Mutex; + + /// The attributes + ACE_condattr_t attributes_; + +private: + // = Prevent assignment and initialization. + void operator= (const ACE_Condition_Attributes &); + ACE_Condition_Attributes (const ACE_Condition_Attributes &); +}; + +/** + * @class ACE_Condition_Thread_Mutex + * + * @brief ACE_Condition variable wrapper written using ACE_Mutexes This + * allows threads to block until shared data changes state. + * A condition variable enables threads to atomically block and + * test the condition under the protection of a mutual exclu- + * sion lock (mutex) until the condition is satisfied. That is, + * the mutex must have been held by the thread before calling + * wait or signal on the condition. If the condition is false, + * a thread blocks on a condition variable and atomically + * releases the mutex that is waiting for the condition to + * change. If another thread changes the condition, it may wake + * up waiting threads by signaling the associated condition + * variable. The waiting threads, upon awakening, reacquire the + * mutex and re-evaluate the condition. + * + * This should be an instantiation of ACE_Condition but problems + * with compilers precludes this... + */ +class ACE_Export ACE_Condition_Thread_Mutex +{ +public: + /// Initialize the condition variable. + ACE_Condition_Thread_Mutex (ACE_Thread_Mutex &m, + const ACE_TCHAR *name = 0, + void *arg = 0); + + /// Initialize the condition variable. + ACE_Condition_Thread_Mutex (ACE_Thread_Mutex &m, + ACE_Condition_Attributes &attributes, + const ACE_TCHAR *name = 0, + void *arg = 0); + + /// Implicitly destroy the condition variable. + ~ACE_Condition_Thread_Mutex (void); + + /** + * Explicitly destroy the condition variable. Note that only one + * thread should call this method since it doesn't protect against + * race conditions. + */ + int remove (void); + + /** + * Block on condition, or until absolute time-of-day has passed. If + * abstime == 0 use "blocking" semantics. Else, if @a abstime + * != 0 and the call times out before the condition is signaled + * returns -1 and sets errno to ETIME. + */ + int wait (const ACE_Time_Value *abstime); + + /// Block on condition. + int wait (void); + + /** + * Block on condition or until absolute time-of-day has passed. If + * abstime == 0 use "blocking" wait() semantics on the + * passed as a parameter (this is useful if you need to store the + * in shared memory). Else, if @a abstime != 0 and the + * call times out before the condition is signaled returns -1 + * and sets errno to ETIME. + */ + int wait (ACE_Thread_Mutex &mutex, const ACE_Time_Value *abstime = 0); + + /// Signal one waiting thread. + int signal (void); + + /// Signal *all* waiting threads. + int broadcast (void); + + /// Returns a reference to the underlying mutex; + ACE_Thread_Mutex &mutex (void); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// Condition variable. + ACE_cond_t cond_; + + /// Reference to mutex lock. + ACE_Thread_Mutex &mutex_; + + /// Keeps track of whether has been called yet to avoid + /// multiple calls, e.g., explicitly and implicitly in the + /// destructor. This flag isn't protected by a lock, so make sure + /// that you don't have multiple threads simultaneously calling + /// on the same object, which is a bad idea anyway... + bool removed_; + +private: + // = Prevent assignment and initialization. + void operator= (const ACE_Condition_Thread_Mutex &); + ACE_Condition_Thread_Mutex (const ACE_Condition_Thread_Mutex &); +}; + +#if 0 +// The following class is commented out since there doesn't +// appear to be a portable and robust means of implementing this +// functionality across platforms. If you know of a portable and +// robust way to implement this functionality please let us know. + +/** + * @class ACE_Process_Condition + * + * @brief ACE_Condition variable wrapper that works across processes. + */ +class ACE_Export ACE_Process_Condition +{ +public: + ACE_Process_Condition (MUTEX &m, const ACE_TCHAR *name = 0, void *arg = 0); + + /// Dump the state of an object. + void dump (void) const; + + // ACE_ALLOC_HOOK_DECLARE; + // Declare the dynamic allocation hooks. +}; +#endif /* 0 */ + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Condition_Thread_Mutex.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* !ACE_HAS_THREADS */ + +#include /**/ "ace/post.h" +#endif /* ACE_CONDITION_THREAD_MUTEX_H */ diff --git a/ACE/ace/Condition_Thread_Mutex.inl b/ACE/ace/Condition_Thread_Mutex.inl new file mode 100644 index 00000000000..12cc18a1bad --- /dev/null +++ b/ACE/ace/Condition_Thread_Mutex.inl @@ -0,0 +1,74 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_Condition_Attributes::ACE_Condition_Attributes (int type) +{ + (void) ACE_OS::condattr_init (this->attributes_, type); +} + +ACE_INLINE +ACE_Condition_Attributes::~ACE_Condition_Attributes (void) +{ + ACE_OS::condattr_destroy (this->attributes_); +} + +ACE_INLINE int +ACE_Condition_Thread_Mutex::remove (void) +{ +// ACE_TRACE ("ACE_Condition_Thread_Mutex::remove"); + + // is called in a loop if the condition variable is + // BUSY. This avoids a condition where a condition is signaled and + // because of some timing problem, the thread that is to be signaled + // has called the cond_wait routine after the signal call. Since + // the condition signal is not queued in any way, deadlock occurs. + + int result = 0; + + if (!this->removed_) + { + this->removed_ = true; + + while ((result = ACE_OS::cond_destroy (&this->cond_)) == -1 + && errno == EBUSY) + { + ACE_OS::cond_broadcast (&this->cond_); + ACE_OS::thr_yield (); + } + } + return result; +} + +ACE_INLINE ACE_Thread_Mutex & +ACE_Condition_Thread_Mutex::mutex (void) +{ +// ACE_TRACE ("ACE_Condition_Thread_Mutex::mutex"); + return this->mutex_; +} + +#if 0 +template void +ACE_Process_Condition::dump (void) const +{ +#if defined (ACE_HAS_DUMP) +// ACE_TRACE ("ACE_Process_Condition::dump"); + + ACE_Condition::dump (); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Process_Condition::ACE_Process_Condition (MUTEX &m, + const ACE_TCHAR *name, + void *arg) + : ACE_Condition (m, USYNC_PROCESS, name, arg) +{ +// ACE_TRACE ("ACE_Process_Condition::ACE_Process_Condition"); +} +#endif /* 0 */ + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Configuration.cpp b/ACE/ace/Configuration.cpp new file mode 100644 index 00000000000..b54308ade7d --- /dev/null +++ b/ACE/ace/Configuration.cpp @@ -0,0 +1,2148 @@ +// $Id$ +#include "ace/Configuration.h" +#include "ace/Auto_Ptr.h" +#include "ace/SString.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_strings.h" + +// Can remove this when import_config and export_config are removed from +// ACE_Configuration. They're deprecated at ACE 5.2. +#include "ace/Configuration_Import_Export.h" + +#if !defined (ACE_LACKS_ACCESS) +# include "ace/OS_NS_unistd.h" +#endif /* ACE_LACKS_ACCESS */ + +#if !defined (__ACE_INLINE__) +#include "ace/Configuration.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Section_Key_Internal::ACE_Section_Key_Internal (void) + : ref_count_ (0) +{ +} + +ACE_Section_Key_Internal::~ACE_Section_Key_Internal (void) +{ +} + +int +ACE_Section_Key_Internal::add_ref (void) +{ + ++ref_count_; + return 0; +} + +int +ACE_Section_Key_Internal::dec_ref (void) +{ + if (!--ref_count_) + delete this; + return 0; +} + +ACE_Configuration_Section_Key::ACE_Configuration_Section_Key (void) + : key_ (0) +{ +} + +ACE_Configuration_Section_Key::~ACE_Configuration_Section_Key (void) +{ + if (key_) + key_->dec_ref (); +} + +ACE_Configuration_Section_Key::ACE_Configuration_Section_Key (ACE_Section_Key_Internal* key) + : key_ (key) +{ + if (key_) + key_->add_ref (); +} + +ACE_Configuration_Section_Key::ACE_Configuration_Section_Key (const ACE_Configuration_Section_Key& rhs) + : key_ (rhs.key_) +{ + if (key_) + key_->add_ref (); +} + +ACE_Configuration_Section_Key& +ACE_Configuration_Section_Key::operator= (const ACE_Configuration_Section_Key& rhs) +{ + if (this != &rhs) + { + if (key_) + key_->dec_ref (); + + key_ = rhs.key_; + + if (key_) + key_->add_ref (); + } + return *this; +} + +////////////////////////////////////////////////////////////////////////////// + +ACE_TCHAR ACE_Configuration::NULL_String_ = '\0'; + +ACE_Configuration::ACE_Configuration (void) + : root_ () +{ +} + +ACE_Configuration::~ACE_Configuration (void) +{ +} + +ACE_Section_Key_Internal* +ACE_Configuration::get_internal_key (const ACE_Configuration_Section_Key& key) +{ + return key.key_; +} + +int +ACE_Configuration::expand_path (const ACE_Configuration_Section_Key& key, + const ACE_TString& path_in, + ACE_Configuration_Section_Key& key_out, + int create) +{ + // Make a copy of key + ACE_Configuration_Section_Key current_section = key; + ACE_Auto_Basic_Array_Ptr pData (path_in.rep ()); + ACE_Tokenizer parser (pData.get ()); + parser.delimiter_replace ('\\', '\0'); + parser.delimiter_replace ('/', '\0'); + + for (ACE_TCHAR *temp = parser.next (); + temp != 0; + temp = parser.next ()) + { + // Open the section + if (open_section (current_section, + temp, + create, + key_out)) + return -1; + + current_section = key_out; + } + + return 0; + +} + +// import_config and export_config are here for backward compatibility, +// and have been deprecated. +int +ACE_Configuration::export_config (const ACE_TCHAR* filename) +{ + ACE_Registry_ImpExp exporter (*this); + return exporter.export_config (filename); +} + +int +ACE_Configuration::import_config (const ACE_TCHAR* filename) +{ + ACE_Registry_ImpExp importer (*this); + return importer.import_config (filename); +} + +int +ACE_Configuration::validate_name (const ACE_TCHAR* name, int allow_path) +{ + // Invalid character set + const ACE_TCHAR* reject = + allow_path ? ACE_TEXT ("][") : ACE_TEXT ("\\]["); + + // Position of the first invalid character or terminating null. + size_t const pos = ACE_OS::strcspn (name, reject); + + // Check if it is an invalid character. + if (name[pos] != ACE_TEXT ('\0')) + { + errno = EINVAL; + return -1; + } + + // The first character can never be a path separator. + if (name[0] == ACE_TEXT ('\\')) + { + errno = EINVAL; + return -1; + } + + // Validate length. + if (pos == 0 || pos > 255) + { + errno = ENAMETOOLONG; + return -1; + } + + return 0; +} + +int +ACE_Configuration::validate_value_name (const ACE_TCHAR* name) +{ + if (name == 0 || *name == this->NULL_String_) + return 0; + + return this->validate_name (name); +} + +const ACE_Configuration_Section_Key& +ACE_Configuration::root_section (void) const +{ + return root_; +} + +/** + * Determine if the contents of this object is the same as the + * contents of the object on the right hand side. + * Returns 1 (True) if they are equal and 0 (False) if they are not equal + */ +bool +ACE_Configuration::operator== (const ACE_Configuration& rhs) const +{ + bool rc = true; + int sectionIndex = 0; + ACE_TString sectionName; + ACE_Configuration *nonconst_this = const_cast (this); + ACE_Configuration &nonconst_rhs = const_cast (rhs); + + const ACE_Configuration_Section_Key& rhsRoot = rhs.root_section (); + ACE_Configuration_Section_Key rhsSection; + ACE_Configuration_Section_Key thisSection; + + // loop through each section in this object + while ((rc) && (nonconst_this->enumerate_sections (this->root_, + sectionIndex, + sectionName) == 0)) + { + // find that section in the rhs object + if (nonconst_rhs.open_section (rhsRoot, + sectionName.c_str (), + 0, + rhsSection) != 0) + { + // If the rhs object does not contain the section then we are + // not equal. + rc = false; + } + else if (nonconst_this->open_section (this->root_, + sectionName.c_str (), + 0, + thisSection) != 0) + { + // if there is some error opening the section in this object + rc = false; + } + else + { + // Well the sections match + int valueIndex = 0; + ACE_TString valueName; + VALUETYPE valueType; + VALUETYPE rhsType; + + // Enumerate each value in this section + while ((rc) && nonconst_this->enumerate_values (thisSection, + valueIndex, + valueName, + valueType) == 0) + { + // look for the same value in the rhs section + if (nonconst_rhs.find_value (rhsSection, + valueName.c_str (), + rhsType) != 0) + { + // We're not equal if the same value cannot + // be found in the rhs object. + rc = false; + } + else if (valueType != rhsType) + { + // we're not equal if the types do not match. + rc = false; + } + else + { + // finally compare values. + if (valueType == STRING) + { + ACE_TString thisString, rhsString; + if (nonconst_this->get_string_value (thisSection, + valueName.c_str (), + thisString) != 0) + { + // we're not equal if we cannot get this string + rc = false; + } + else if (nonconst_rhs.get_string_value ( + rhsSection, + valueName.c_str (), + rhsString) != 0) + { + // we're not equal if we cannot get rhs string + rc = false; + } + rc = (thisString == rhsString); + } + else if (valueType == INTEGER) + { + u_int thisInt = 0; + u_int rhsInt = 0; + if (nonconst_this->get_integer_value ( + thisSection, + valueName.c_str (), + thisInt) != 0) + { + // we're not equal if we cannot get this int + rc = false; + } + else if (nonconst_rhs.get_integer_value ( + rhsSection, + valueName.c_str (), + rhsInt) != 0) + { + // we're not equal if we cannot get rhs int + rc = false; + } + rc = (thisInt == rhsInt); + } + else if (valueType == BINARY) + { + void* thisData = 0; + void* rhsData = 0; + size_t thisLength = 0; + size_t rhsLength = 0; + if (nonconst_this->get_binary_value (thisSection, + valueName.c_str (), + thisData, + thisLength) != 0) + { + // we're not equal if we cannot get this data + rc = false; + } + else if (nonconst_rhs.get_binary_value ( + rhsSection, + valueName.c_str (), + rhsData, + rhsLength) != 0) + { + // we're not equal if we cannot get this data + rc = false; + } + + rc = (thisLength == rhsLength); + // are the length's the same? + + if (rc) + { + unsigned char* thisCharData = + (unsigned char*)thisData; + unsigned char* rhsCharData = (unsigned char*)rhsData; + // yes, then check each element + for (size_t count = 0; + (rc) && (count < thisLength); + count++) + { + rc = (* (thisCharData + count) == * (rhsCharData + count)); + } + + delete [] thisCharData; + delete [] rhsCharData; + }// end if the length's match + } + // We should never have valueTypes of INVALID, therefore + // we're not comparing them. How would we since we have + // no get operation for invalid types. + // So, if we have them, we guess they are equal. + + }// end else if values match. + + ++valueIndex; + + }// end value while loop + + // look in the rhs for values not in this + valueIndex = 0; + while ((rc) && (nonconst_rhs.enumerate_values (rhsSection, + valueIndex, + valueName, + rhsType) == 0)) + { + // look for the same value in this section + if (nonconst_this->find_value (thisSection, + valueName.c_str (), + valueType) != 0) + { + // We're not equal if the same value cannot + // be found in the rhs object. + rc = false; + } + ++valueIndex; + }// end while for rhs values not in this. + + }// end else if sections match. + + ++sectionIndex; + + }// end section while loop + + // Finally, make sure that there are no sections in rhs that do not + // exist in this + sectionIndex = 0; + while ((rc) + && (nonconst_rhs.enumerate_sections (rhsRoot, + sectionIndex, + sectionName) == 0)) + { + // find the section in this + if (nonconst_this->open_section (this->root_, + sectionName.c_str (), + 0, + thisSection) != 0) + { + // if there is some error opening the section in this object + rc = false; + } + else if (nonconst_rhs.open_section (rhsRoot, + sectionName.c_str (), + 0, + rhsSection) != 0) + { + // If the rhs object does not contain the section then we + // are not equal. + rc = false; + } + ++sectionIndex; + } + return rc; +} + +bool +ACE_Configuration::operator!= (const ACE_Configuration& rhs) const +{ + return !(*this == rhs); +} + +////////////////////////////////////////////////////////////////////////////// + +#if defined (ACE_WIN32) && !defined (ACE_LACKS_WIN32_REGISTRY) + +static const int ACE_DEFAULT_BUFSIZE = 256; + +static const ACE_TCHAR *temp_name (const ACE_TCHAR *name) +{ + if (name && *name == ACE_Configuration::NULL_String_) + return 0; + return name; +} + +ACE_Section_Key_Win32::ACE_Section_Key_Win32 (HKEY hKey) + : hKey_ (hKey) +{ +} + +ACE_Section_Key_Win32::~ACE_Section_Key_Win32 (void) +{ + ::RegCloseKey (hKey_); +} + +////////////////////////////////////////////////////////////////////////////// + +bool +ACE_Configuration_Win32Registry::operator== (const ACE_Configuration_Win32Registry &rhs) const +{ + ACE_UNUSED_ARG (rhs); + return true; +} + +bool +ACE_Configuration_Win32Registry::operator!= (const ACE_Configuration_Win32Registry &rhs) const +{ + ACE_UNUSED_ARG (rhs); + return true; +} + +ACE_Configuration_Win32Registry::ACE_Configuration_Win32Registry (HKEY hKey) +{ + ACE_Section_Key_Win32 *temp = 0; + + ACE_NEW (temp, ACE_Section_Key_Win32 (hKey)); + + root_ = ACE_Configuration_Section_Key (temp); +} + + +ACE_Configuration_Win32Registry::~ACE_Configuration_Win32Registry (void) +{ +} + +int +ACE_Configuration_Win32Registry::open_section (const ACE_Configuration_Section_Key& base, + const ACE_TCHAR* sub_section, + int create, + ACE_Configuration_Section_Key& result) +{ + if (validate_name (sub_section, 1)) + return -1; + + HKEY base_key; + if (load_key (base, base_key)) + return -1; + + int errnum; + HKEY result_key; + if ((errnum = ACE_TEXT_RegOpenKeyEx (base_key, + sub_section, + 0, + KEY_ALL_ACCESS, + &result_key)) != ERROR_SUCCESS) + { + if (!create) + { + errno = errnum; + return -1; + } + + if ((errnum = ACE_TEXT_RegCreateKeyEx (base_key, + sub_section, + 0, + 0, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + 0, + &result_key, +#if defined (__MINGW32__) + (PDWORD) 0 +#else + 0 +#endif /* __MINGW32__ */ + )) != ERROR_SUCCESS) + { + errno = errnum; + return -1; + } + } + + ACE_Section_Key_Win32 *temp; + + ACE_NEW_RETURN (temp, ACE_Section_Key_Win32 (result_key), -1); + result = ACE_Configuration_Section_Key (temp); + return 0; +} + +int +ACE_Configuration_Win32Registry::remove_section (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* sub_section, + int recursive) +{ + if (validate_name (sub_section)) + return -1; + + HKEY base_key; + if (load_key (key, base_key)) + return -1; + + if (recursive) + { + ACE_Configuration_Section_Key section; + if (open_section (key, sub_section, 0, section)) + return -1; + + HKEY sub_key; + if (load_key (section, sub_key)) + return -1; + + ACE_TCHAR name_buffer[ACE_DEFAULT_BUFSIZE]; + DWORD buffer_size = ACE_DEFAULT_BUFSIZE; + // Note we don't increment the index because the + // enumeration becomes invalid if we change the + // subkey, which we do when we delete it. By leaving + // it 0, we always delete the top entry + while (ACE_TEXT_RegEnumKeyEx (sub_key, + 0, + name_buffer, + &buffer_size, + 0, + 0, + 0, + 0) == ERROR_SUCCESS) + { + remove_section (section, name_buffer, 1); + buffer_size = ACE_DEFAULT_BUFSIZE; + } + } + + int errnum; + errnum = ACE_TEXT_RegDeleteKey (base_key, sub_section); + if (errnum != ERROR_SUCCESS) + { + errno = errnum; + return -1; + } + + return 0; +} + +int +ACE_Configuration_Win32Registry::enumerate_values (const ACE_Configuration_Section_Key& key, + int index, + ACE_TString& name, + VALUETYPE& type) +{ + HKEY base_key; + if (load_key (key, base_key)) + return -1; + + ACE_TCHAR name_buffer[ACE_DEFAULT_BUFSIZE]; + DWORD buffer_size = ACE_DEFAULT_BUFSIZE; + DWORD value_type; + + int rc = ACE_TEXT_RegEnumValue (base_key, + index, + name_buffer, + &buffer_size, + 0, + &value_type, + 0, + 0); + if (rc == ERROR_NO_MORE_ITEMS) + return 1; + else if (rc != ERROR_SUCCESS) + { + errno = rc; + return -1; + } + + name = name_buffer; + + switch (value_type) + { + case REG_BINARY: + type = BINARY; + break; + case REG_SZ: + type = STRING; + break; + case REG_DWORD: + type = INTEGER; + break; + default: + type = INVALID; + } + + return 0; +} + +int +ACE_Configuration_Win32Registry::enumerate_sections (const ACE_Configuration_Section_Key& key, + int index, + ACE_TString& name) +{ + HKEY base_key; + if (load_key (key, base_key)) + return -1; + + ACE_TCHAR name_buffer[ACE_DEFAULT_BUFSIZE]; + DWORD buffer_size = ACE_DEFAULT_BUFSIZE; + int rc = ACE_TEXT_RegEnumKeyEx (base_key, + index, + name_buffer, + &buffer_size, + 0, + 0, + 0, + 0); + if (rc == ERROR_NO_MORE_ITEMS) + return 1; + else if (rc != ERROR_MORE_DATA && rc != ERROR_SUCCESS) + { + errno = rc; + return -1; + } + + name = name_buffer; + + return 0; +} + +int +ACE_Configuration_Win32Registry::set_string_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + const ACE_TString& value) +{ + const ACE_TCHAR *t_name = temp_name (name); + if (validate_value_name (t_name)) + return -1; + + HKEY base_key; + if (load_key (key, base_key)) + return -1; + + int errnum; + DWORD len = static_cast (value.length () + 1); + len *= sizeof (ACE_TCHAR); + if ((errnum = ACE_TEXT_RegSetValueEx (base_key, + t_name, + 0, + REG_SZ, + (BYTE *) value.fast_rep (), + len)) + != ERROR_SUCCESS) + { + errno = errnum; + return -1; + } + + return 0; +} + +int +ACE_Configuration_Win32Registry::set_integer_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + u_int value) +{ + const ACE_TCHAR *t_name = temp_name (name); + if (validate_value_name (t_name)) + return -1; + + HKEY base_key; + if (load_key (key, base_key)) + return -1; + + int errnum; + if ((errnum = ACE_TEXT_RegSetValueEx (base_key, + t_name, + 0, + REG_DWORD, + (BYTE *) &value, + sizeof (value))) != ERROR_SUCCESS) + { + errno = errnum; + return -1; + } + + return 0; +} + +int +ACE_Configuration_Win32Registry::set_binary_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + const void* data, + size_t length) +{ + const ACE_TCHAR *t_name = temp_name (name); + if (validate_value_name (t_name)) + return -1; + + HKEY base_key; + if (load_key (key, base_key)) + return -1; + + int errnum; + if ((errnum = ACE_TEXT_RegSetValueEx (base_key, + t_name, + 0, + REG_BINARY, + (BYTE *) data, + static_cast (length))) + != ERROR_SUCCESS) + { + errno = errnum; + return -1; + } + + return 0; +} + +int +ACE_Configuration_Win32Registry::get_string_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + ACE_TString& value) +{ + const ACE_TCHAR *t_name = temp_name (name); + if (validate_value_name (t_name)) + return -1; + + HKEY base_key; + if (load_key (key, base_key)) + return -1; + + // Get the size of the binary data from windows + int errnum; + DWORD buffer_length = 0; + DWORD type; + if ((errnum = ACE_TEXT_RegQueryValueEx (base_key, + t_name, + 0, + &type, + (BYTE *) 0, + &buffer_length)) != ERROR_SUCCESS) + { + errno = errnum; + return -1; + } + + if (type != REG_SZ) + { + errno = ERROR_INVALID_DATATYPE; + return -1; + } + + ACE_TCHAR *temp = 0; + ACE_NEW_RETURN (temp, + ACE_TCHAR[buffer_length], + -1); + + ACE_Auto_Basic_Array_Ptr buffer (temp); + + if ((errnum = ACE_TEXT_RegQueryValueEx (base_key, + t_name, + 0, + &type, + (BYTE *) buffer.get (), + &buffer_length)) != ERROR_SUCCESS) + { + errno = errnum; + return -1; + } + + value = buffer.get (); + return 0; +} + +int +ACE_Configuration_Win32Registry::get_integer_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + u_int& value) +{ + const ACE_TCHAR *t_name = temp_name (name); + if (validate_value_name (t_name)) + return -1; + + HKEY base_key; + if (load_key (key, base_key)) + return -1; + + int errnum; + DWORD length = sizeof (value); + DWORD type; + if ((errnum = ACE_TEXT_RegQueryValueEx (base_key, + t_name, + 0, + &type, + (BYTE *) &value, + &length)) != ERROR_SUCCESS) + { + errno = errnum; + return -1; + } + + if (type != REG_DWORD) + { + errno = ERROR_INVALID_DATATYPE; + return -1; + } + + return 0; +} + +int +ACE_Configuration_Win32Registry::get_binary_value ( + const ACE_Configuration_Section_Key &key, + const ACE_TCHAR *name, + void *&data, + size_t &length) +{ + const ACE_TCHAR *t_name = temp_name (name); + if (validate_value_name (t_name)) + return -1; + + HKEY base_key; + if (load_key (key, base_key)) + return -1; + + // Get the size of the binary data from windows + int errnum; + DWORD buffer_length = 0; + DWORD type; + if ((errnum = ACE_TEXT_RegQueryValueEx (base_key, + t_name, + 0, + &type, + (BYTE *) 0, + &buffer_length)) != ERROR_SUCCESS) + { + errno = errnum; + return -1; + } + + if (type != REG_BINARY) + { + errno = ERROR_INVALID_DATATYPE; + return -1; + } + + length = buffer_length; + + BYTE * the_data = 0; + ACE_NEW_RETURN (the_data, BYTE[length], -1); + ACE_Auto_Basic_Array_Ptr safe_data (the_data); + + if ((errnum = ACE_TEXT_RegQueryValueEx (base_key, + t_name, + 0, + &type, + the_data, + &buffer_length)) != ERROR_SUCCESS) + { + data = 0; + errno = errnum; + return -1; + } + + data = safe_data.release (); + + return 0; +} + +int +ACE_Configuration_Win32Registry::find_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + VALUETYPE& type_out) +{ + const ACE_TCHAR *t_name = temp_name (name); + if (validate_value_name (t_name)) + return -1; + + HKEY base_key; + if (load_key (key, base_key)) + return -1; + + DWORD buffer_length=0; + DWORD type; + int result=ACE_TEXT_RegQueryValueEx (base_key, + t_name, + 0, + &type, + 0, + &buffer_length); + if (result != ERROR_SUCCESS) + { + errno = result; + return -1; + } + + switch (type) + { + case REG_SZ: + type_out = STRING; + break; + case REG_DWORD: + type_out = INTEGER; + break; + case REG_BINARY: + type_out = BINARY; + break; + default: + return -1; // unknown type + } + + return 0; +} + +int +ACE_Configuration_Win32Registry::remove_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name) +{ + const ACE_TCHAR *t_name = temp_name (name); + if (validate_value_name (t_name)) + return -1; + + HKEY base_key; + if (load_key (key, base_key)) + return -1; + + int errnum; + if ((errnum = ACE_TEXT_RegDeleteValue (base_key, t_name)) != ERROR_SUCCESS) + { + errno = errnum; + return -1; + } + + return 0; +} + + +int +ACE_Configuration_Win32Registry::load_key (const ACE_Configuration_Section_Key& key, + HKEY& hKey) +{ + ACE_Section_Key_Win32* pKey = dynamic_cast (get_internal_key (key)); + if (!pKey) + return -1; + + hKey = pKey->hKey_; + return 0; +} + +HKEY +ACE_Configuration_Win32Registry::resolve_key (HKEY hKey, + const ACE_TCHAR* path, + int create) +{ + HKEY result = 0; + // Make a copy of hKey + int errnum; +#if defined (ACE_HAS_WINCE) + if ((errnum = RegOpenKeyEx (hKey, 0, 0, 0, &result)) != ERROR_SUCCESS) +#else + if ((errnum = RegOpenKey (hKey, 0, &result)) != ERROR_SUCCESS) +#endif // ACE_HAS_WINCE + { + errno = errnum; + return 0; + } + + // recurse through the path + ACE_TCHAR *temp_path = 0; + ACE_NEW_RETURN (temp_path, + ACE_TCHAR[ACE_OS::strlen (path) + 1], + 0); + ACE_Auto_Basic_Array_Ptr pData (temp_path); + ACE_OS::strcpy (pData.get (), path); + ACE_Tokenizer parser (pData.get ()); + parser.delimiter_replace ('\\', '\0'); + parser.delimiter_replace ('/', '\0'); + + for (ACE_TCHAR *temp = parser.next (); + temp != 0; + temp = parser.next ()) + { + // Open the key + HKEY subkey; + +#if defined (ACE_HAS_WINCE) + if ((errnum = ACE_TEXT_RegOpenKeyEx (result, + temp, + 0, + 0, + &subkey)) != ERROR_SUCCESS) +#else + if ((errnum = ACE_TEXT_RegOpenKey (result, + temp, + &subkey)) != ERROR_SUCCESS) +#endif // ACE_HAS_WINCE + { + // try creating it + if (!create || (errnum = ACE_TEXT_RegCreateKeyEx (result, + temp, + 0, + 0, + 0, + KEY_ALL_ACCESS, + 0, + &subkey, +#if defined (__MINGW32__) + (PDWORD) 0 +#else + 0 +#endif /* __MINGW32__ */ + )) !=ERROR_SUCCESS) + { + errno = errnum; + // error + ::RegCloseKey (result); + return 0; + } + } + // release our open key handle + ::RegCloseKey (result); + result = subkey; + } + + return result; +} + +#endif /* ACE_WIN32 && !ACE_LACKS_WIN32_REGISTRY */ + +/////////////////////////////////////////////////////////////// + +ACE_Configuration_Value_IntId::ACE_Configuration_Value_IntId (void) + : type_ (ACE_Configuration::INVALID), + length_ (0) +{ + this->data_.ptr_ = 0; +} + +ACE_Configuration_Value_IntId::ACE_Configuration_Value_IntId (ACE_TCHAR* string) + : type_ (ACE_Configuration::STRING), + length_ (0) +{ + this->data_.ptr_ = string; +} + +ACE_Configuration_Value_IntId::ACE_Configuration_Value_IntId (u_int integer) + : type_ (ACE_Configuration::INTEGER), + length_ (0) +{ + this->data_.int_ = integer; +} + +ACE_Configuration_Value_IntId::ACE_Configuration_Value_IntId (void* data, size_t length) + : type_ (ACE_Configuration::BINARY), + length_ (length) +{ + this->data_.ptr_ = data; +} + +ACE_Configuration_Value_IntId::ACE_Configuration_Value_IntId (const ACE_Configuration_Value_IntId& rhs) + : type_ (rhs.type_), + data_ (rhs.data_), + length_ (rhs.length_) +{ +} + +ACE_Configuration_Value_IntId::~ACE_Configuration_Value_IntId (void) +{ +} + +ACE_Configuration_Value_IntId& ACE_Configuration_Value_IntId::operator= (const ACE_Configuration_Value_IntId& rhs) +{ + if (this != &rhs) + { + type_ = rhs.type_; + data_ = rhs.data_; + length_ = rhs.length_; + } + return *this; +} + +void +ACE_Configuration_Value_IntId::free (ACE_Allocator *alloc) +{ + if (this->type_ == ACE_Configuration::STRING + || this->type_ == ACE_Configuration::BINARY) + alloc->free (data_.ptr_); + // Do nothing in other cases... +} + +ACE_Configuration_ExtId::ACE_Configuration_ExtId (void) + : name_ (0) +{ +} + +ACE_Configuration_ExtId::ACE_Configuration_ExtId (const ACE_TCHAR* name) + : name_ (name) +{ +} + +ACE_Configuration_ExtId::ACE_Configuration_ExtId (const ACE_Configuration_ExtId& rhs) + : name_ (rhs.name_) +{ +} + +ACE_Configuration_ExtId::~ACE_Configuration_ExtId (void) +{ +} + +ACE_Configuration_ExtId& ACE_Configuration_ExtId::operator= (const ACE_Configuration_ExtId& rhs) +{ + if (this != &rhs) + name_ = rhs.name_; + + return *this; +} + +bool +ACE_Configuration_ExtId::operator== (const ACE_Configuration_ExtId& rhs) const +{ + return (ACE_OS::strcasecmp (name_, rhs.name_) == 0); +} + +bool +ACE_Configuration_ExtId::operator!= (const ACE_Configuration_ExtId& rhs) const +{ + return !this->operator== (rhs); +} + +u_long +ACE_Configuration_ExtId::hash (void) const +{ + ACE_TString temp (name_, 0, false); + return temp.hash (); +} + +void +ACE_Configuration_ExtId::free (ACE_Allocator *alloc) +{ + alloc->free ((void *) (name_)); +} + +/////////////////////////////////////////////////////////////////////// + +ACE_Configuration_Section_IntId::ACE_Configuration_Section_IntId (void) + : value_hash_map_ (0), + section_hash_map_ (0) +{ +} + +ACE_Configuration_Section_IntId::ACE_Configuration_Section_IntId (VALUE_MAP* value_hash_map, SUBSECTION_MAP* section_hash_map) + : value_hash_map_ (value_hash_map), + section_hash_map_ (section_hash_map) +{ +} + +ACE_Configuration_Section_IntId::ACE_Configuration_Section_IntId (const ACE_Configuration_Section_IntId& rhs) + : value_hash_map_ (rhs.value_hash_map_), + section_hash_map_ (rhs.section_hash_map_) +{ + +} + +ACE_Configuration_Section_IntId::~ACE_Configuration_Section_IntId () +{ +} + +ACE_Configuration_Section_IntId& +ACE_Configuration_Section_IntId::operator= (const ACE_Configuration_Section_IntId& rhs) +{ + if (this != &rhs) + { + value_hash_map_ = rhs.value_hash_map_; + section_hash_map_ = rhs.section_hash_map_; + } + return *this; +} + +void +ACE_Configuration_Section_IntId::free (ACE_Allocator *alloc) +{ + alloc->free ((void *) (value_hash_map_)); + alloc->free ((void *) (section_hash_map_)); +} + +ACE_Configuration_Section_Key_Heap::ACE_Configuration_Section_Key_Heap (const ACE_TCHAR* path) + : path_ (0), + value_iter_ (0), + section_iter_ (0) +{ + path_ = ACE_OS::strdup (path); +} + +ACE_Configuration_Section_Key_Heap::~ACE_Configuration_Section_Key_Heap () +{ + delete value_iter_; + delete section_iter_; + ACE_OS::free (path_); +} + +////////////////////////////////////////////////////////////////////////////// + +ACE_Configuration_Heap::ACE_Configuration_Heap (void) + : allocator_ (0), + index_ (0), + default_map_size_ (0) +{ + ACE_Configuration_Section_Key_Heap *temp = 0; + + ACE_NEW (temp, ACE_Configuration_Section_Key_Heap (ACE_TEXT (""))); + root_ = ACE_Configuration_Section_Key (temp); +} + +ACE_Configuration_Heap::~ACE_Configuration_Heap (void) +{ + if (allocator_) + allocator_->sync (); + + delete allocator_; +} + +int +ACE_Configuration_Heap::open (size_t default_map_size) +{ + default_map_size_ = default_map_size; + // Create the allocator with the appropriate options. + // The name used for the lock is the same as one used + // for the file. + ACE_NEW_RETURN (this->allocator_, + HEAP_ALLOCATOR (), + -1); + return create_index (); +} + + +int +ACE_Configuration_Heap::open (const ACE_TCHAR* file_name, + void* base_address, + size_t default_map_size) +{ + default_map_size_ = default_map_size; + + // Make sure that the file name is of the legal length. + if (ACE_OS::strlen (file_name) >= MAXNAMELEN + MAXPATHLEN) + { + errno = ENAMETOOLONG; + return -1; + } + + ACE_MMAP_Memory_Pool::OPTIONS options (base_address); + + // Create the allocator with the appropriate options. The name used + // for the lock is the same as one used for the file. + ACE_NEW_RETURN (this->allocator_, + PERSISTENT_ALLOCATOR (file_name, + file_name, + &options), + -1); + +#if !defined (ACE_LACKS_ACCESS) + // Now check if the backing store has been created successfully. + if (ACE_OS::access (file_name, F_OK) != 0) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("create_index\n")), + -1); +#endif /* ACE_LACKS_ACCESS */ + + return create_index (); +} + +int +ACE_Configuration_Heap::create_index (void) +{ + void *section_index = 0; + + // This is the easy case since if we find hash table in the + // memory-mapped file we know it's already initialized. + if (this->allocator_->find (ACE_CONFIG_SECTION_INDEX, section_index) == 0) + this->index_ = (SECTION_MAP *) section_index; + + // Create a new (because we've just created a new + // memory-mapped file). + else + { + size_t index_size = sizeof (SECTION_MAP); + section_index = this->allocator_->malloc (index_size); + + if (section_index == 0 + || create_index_helper (section_index) == -1 + || this->allocator_->bind (ACE_CONFIG_SECTION_INDEX, + section_index) == -1) + { + // Attempt to clean up. + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("create_index failed\n"))); + this->allocator_->remove (); + return -1; + } + // Add the root section + return new_section (ACE_TEXT (""), root_); + } + return 0; +} + +int +ACE_Configuration_Heap::create_index_helper (void *buffer) +{ + ACE_ASSERT (this->allocator_); + this->index_ = new (buffer) SECTION_MAP (this->allocator_); + return 0; +} + +int +ACE_Configuration_Heap::load_key (const ACE_Configuration_Section_Key& key, + ACE_TString& name) +{ + ACE_ASSERT (this->allocator_); + ACE_Configuration_Section_Key_Heap* pKey = + dynamic_cast (get_internal_key (key)); + + if (!pKey) + { + return -1; + } + + ACE_TString temp (pKey->path_, 0, false); + name.assign_nocopy (temp); + return 0; +} + + +int +ACE_Configuration_Heap::add_section (const ACE_Configuration_Section_Key& base, + const ACE_TCHAR* sub_section, + ACE_Configuration_Section_Key& result) +{ + ACE_ASSERT (this->allocator_); + ACE_TString section; + if (load_key (base, section)) + return -1; + + // Find the base section + ACE_Configuration_ExtId ExtId (section.fast_rep ()); + ACE_Configuration_Section_IntId IntId; + if (index_->find (ExtId, IntId, allocator_)) + return -1; + + // See if this section already exists + ACE_Configuration_ExtId SubSectionExtId (sub_section); + int ignored = 0; + + if (!IntId.section_hash_map_->find (SubSectionExtId, ignored, allocator_)) + { + // already exists! + errno = EEXIST; + return -1; + } + + // Create the new section name + // only prepend a separater if were not at the root + if (section.length ()) + section += ACE_TEXT ("\\"); + + section += sub_section; + + // Add it to the base section + ACE_TCHAR* pers_name = (ACE_TCHAR *) allocator_->malloc ((ACE_OS::strlen (sub_section) + 1) * sizeof (ACE_TCHAR)); + ACE_OS::strcpy (pers_name, sub_section); + ACE_Configuration_ExtId SSExtId (pers_name); + if (IntId.section_hash_map_->bind (SSExtId, ignored, allocator_)) + { + allocator_->free (pers_name); + return -1; + } + return (new_section (section, result)); +} + +int +ACE_Configuration_Heap::new_section (const ACE_TString& section, + ACE_Configuration_Section_Key& result) +{ + ACE_ASSERT (this->allocator_); + // Create a new section and add it to the global list + + // Allocate memory for items to be stored in the table. + size_t section_len = section.length () + 1; + ACE_TCHAR *ptr = (ACE_TCHAR*) this->allocator_->malloc (section_len * sizeof (ACE_TCHAR)); + + int return_value = -1; + + if (ptr == 0) + return -1; + else + { + // Populate memory with data. + ACE_OS::strcpy (ptr, section.fast_rep ()); + + void *value_hash_map = 0; + size_t map_size = sizeof (VALUE_MAP); + value_hash_map = this->allocator_->malloc (map_size); + + // If allocation failed ... + if (value_hash_map == 0) + return -1; + + // Initialize allocated hash map through placement new. + if (value_open_helper (default_map_size_, value_hash_map ) == -1) + { + this->allocator_->free (value_hash_map ); + return -1; + } + + // create the section map + void* section_hash_map = 0; + map_size = sizeof (SUBSECTION_MAP); + section_hash_map = this->allocator_->malloc (map_size); + + // If allocation failed + if (section_hash_map == 0) + return -1; + + // initialize allocated hash map through placement new + if (section_open_helper (default_map_size_, section_hash_map) == -1) + { + this->allocator_->free (value_hash_map ); + this->allocator_->free (section_hash_map); + return -1; + } + + ACE_Configuration_ExtId name (ptr); + ACE_Configuration_Section_IntId entry ((VALUE_MAP*) value_hash_map, + (SUBSECTION_MAP*) section_hash_map); + + // Do a normal bind. This will fail if there's already an + // entry with the same name. + return_value = this->index_->bind (name, entry, this->allocator_); + + if (return_value == 1 /* Entry already existed so bind failed. */ + || return_value == -1 /* Unable to bind for other reasons. */) + { + // Free our dynamically allocated memory. + this->allocator_->free (static_cast (ptr)); + return return_value; + } + + // If bind () succeed, it will automatically sync + // up the map manager entry. However, we must sync up our + // name/value memory. + this->allocator_->sync (ptr, section_len); + } + + // set the result + ACE_Configuration_Section_Key_Heap *temp; + ACE_NEW_RETURN (temp, + ACE_Configuration_Section_Key_Heap (ptr), + -1); + result = ACE_Configuration_Section_Key (temp); + return return_value; +} + +int +ACE_Configuration_Heap::value_open_helper (size_t hash_table_size, + void *buffer) +{ + ACE_ASSERT (this->allocator_); + new (buffer) VALUE_MAP (hash_table_size, this->allocator_); + return 0; +} + +int +ACE_Configuration_Heap::section_open_helper (size_t hash_table_size, + void *buffer) +{ + ACE_ASSERT (this->allocator_); + new (buffer) SUBSECTION_MAP (hash_table_size, this->allocator_); + return 0; +} + +int +ACE_Configuration_Heap::open_section (const ACE_Configuration_Section_Key& base, + const ACE_TCHAR* sub_section, + int create, + ACE_Configuration_Section_Key& result) +{ + ACE_ASSERT (this->allocator_); + if (validate_name (sub_section, 1)) // 1 == allow_path + return -1; + + result = base; + + for (const ACE_TCHAR* separator; + (separator = ACE_OS::strchr (sub_section, ACE_TEXT ('\\'))) != 0; + ) + { + ACE_TString simple_section (sub_section, separator - sub_section); + int ret_val = + open_simple_section (result, simple_section.c_str (), create, result); + if (ret_val) + return ret_val; + sub_section = separator + 1; + } + + return open_simple_section (result, sub_section, create, result); +} + +int +ACE_Configuration_Heap::open_simple_section (const ACE_Configuration_Section_Key& base, + const ACE_TCHAR* sub_section, + int create, + ACE_Configuration_Section_Key& result) +{ + ACE_TString section (0, 0, false); + + if (load_key (base, section)) + { + return -1; + } + + // Only add the \\ if were not at the root + if (section.length ()) + { + section += ACE_TEXT ("\\"); + } + + section += sub_section; + + // resolve the section + ACE_Configuration_ExtId ExtId (section.fast_rep ()); + ACE_Configuration_Section_IntId IntId; + + if (index_->find (ExtId, IntId, allocator_)) + { + if (!create) + { + errno = ENOENT; + return -1; + } + + return add_section (base, sub_section, result); + } + + ACE_Configuration_Section_Key_Heap *temp; + ACE_NEW_RETURN (temp, + ACE_Configuration_Section_Key_Heap (section.fast_rep ()), + -1); + result = ACE_Configuration_Section_Key (temp); + return 0; +} + +int +ACE_Configuration_Heap::remove_section (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* sub_section, + int recursive) +{ + ACE_ASSERT (this->allocator_); + if (validate_name (sub_section)) + return -1; + + ACE_TString section; + if (load_key (key, section)) + return -1; + + // Find this key + ACE_Configuration_ExtId ParentExtId (section.fast_rep ()); + ACE_Configuration_Section_IntId ParentIntId; + if (index_->find (ParentExtId, ParentIntId, allocator_)) + return -1;// no parent key + + // Find this subkey + if (section.length ()) + section += ACE_TEXT ("\\"); + + section += sub_section; + ACE_Configuration_ExtId SectionExtId (section.fast_rep ()); + SECTION_HASH::ENTRY* section_entry; + SECTION_HASH* hashmap = index_; + if (hashmap->find (SectionExtId, section_entry)) + return -1; + + if (recursive) + { + ACE_Configuration_Section_Key section; + if (open_section (key, sub_section, 0, section)) + return -1; + + int index = 0; + ACE_TString name; + while (!enumerate_sections (section, index, name)) + { + if (remove_section (section, name.fast_rep (), 1)) + return -1; + + ++index; + } + } + + // Now make sure we dont have any subkeys + if (section_entry->int_id_.section_hash_map_->current_size ()) + { + errno = ENOTEMPTY; + return -1; + } + + // Now remove subkey from parent key + ACE_Configuration_ExtId SubSExtId (sub_section); + SUBSECTION_HASH::ENTRY* subsection_entry; + if (((SUBSECTION_HASH*)ParentIntId.section_hash_map_)-> + find (SubSExtId, subsection_entry)) + return -1; + + if (ParentIntId.section_hash_map_->unbind (SubSExtId, allocator_)) + return -1; + + subsection_entry->ext_id_.free (allocator_); + + // Remember the pointers so we can free them after we unbind + ACE_Configuration_ExtId ExtIdToFree (section_entry->ext_id_); + ACE_Configuration_Section_IntId IntIdToFree (section_entry->int_id_); + + // iterate over all values and free memory + VALUE_HASH* value_hash_map = section_entry->int_id_.value_hash_map_; + VALUE_HASH::ITERATOR value_iter = value_hash_map->begin (); + while (!value_iter.done ()) + { + VALUE_HASH::ENTRY* value_entry = 0; + if (!value_iter.next (value_entry)) + return 1; + + value_entry->ext_id_.free (allocator_); + value_entry->int_id_.free (allocator_); + + value_iter.advance (); + } + + // remove it + if (index_->unbind (SectionExtId, allocator_)) + return -1; + + value_hash_map->close (); + section_entry->int_id_.section_hash_map_->close (allocator_); + + // Free the memory + ExtIdToFree.free (allocator_); + IntIdToFree.free (allocator_); + + return 0; +} + +int +ACE_Configuration_Heap::enumerate_values (const ACE_Configuration_Section_Key& key, + int index, + ACE_TString& name, + VALUETYPE& type) +{ + ACE_ASSERT (this->allocator_); + ACE_Configuration_Section_Key_Heap* pKey = + dynamic_cast (get_internal_key (key)); + if (!pKey) + return -1; + + name = pKey->path_; + + // resolve the section + ACE_Configuration_ExtId ExtId (pKey->path_); + ACE_Configuration_Section_IntId IntId; + if (index_->find (ExtId, IntId, allocator_)) + return -1; + + // Handle iterator resets + if (index == 0) + { + ACE_Hash_Map_Manager_Ex, + ACE_Equal_To, + ACE_Null_Mutex>* hash_map = IntId.value_hash_map_; + delete pKey->value_iter_; + + ACE_NEW_RETURN (pKey->value_iter_, + VALUE_HASH::ITERATOR (hash_map->begin ()), + -1); + } + + // Get the next entry + ACE_Hash_Map_Entry* entry = 0; + + if (!pKey->value_iter_->next (entry)) + return 1; + + // Return the value of the iterator and advance it + name = entry->ext_id_.name_; + type = entry->int_id_.type_; + pKey->value_iter_->advance (); + + return 0; +} + +int +ACE_Configuration_Heap::enumerate_sections (const ACE_Configuration_Section_Key& key, + int index, + ACE_TString& name) +{ + ACE_ASSERT (this->allocator_); + // cast to a heap section key + ACE_Configuration_Section_Key_Heap* pKey = + dynamic_cast (get_internal_key (key)); + if (!pKey) + return -1; // not a heap key! + + // resolve the section + ACE_Configuration_ExtId ExtId (pKey->path_); + ACE_Configuration_Section_IntId IntId; + if (index_->find (ExtId, IntId, allocator_)) + return -1; // unknown section + + // Handle iterator resets + if (index == 0) + { + if (pKey->section_iter_) + delete pKey->section_iter_; + + ACE_NEW_RETURN (pKey->section_iter_, + SUBSECTION_HASH::ITERATOR (IntId.section_hash_map_->begin ()), + -1); + } + + // Get the next entry + ACE_Hash_Map_Entry* entry = 0; + if (!pKey->section_iter_->next (entry)) + return 1; + + // Return the value of the iterator and advance it + pKey->section_iter_->advance (); + name = entry->ext_id_.name_; + + return 0; +} + +int +ACE_Configuration_Heap::set_string_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + const ACE_TString& value) +{ + ACE_ASSERT (this->allocator_); + const ACE_TCHAR *t_name = name ? name : &this->NULL_String_; + if (validate_value_name (t_name)) + return -1; + + ACE_TString section; + if (load_key (key, section)) + return -1; + + ACE_Configuration_ExtId section_ext (section.fast_rep ()); + ACE_Configuration_Section_IntId section_int; + if (index_->find (section_ext, section_int, allocator_)) + return -1; + + // Get the entry for this item (if it exists) + VALUE_HASH::ENTRY* entry; + ACE_Configuration_ExtId item_name (t_name); + if (section_int.value_hash_map_->VALUE_HASH::find (item_name, entry) == 0) + { + // found item, replace it + // Free the old value + entry->int_id_.free (allocator_); + // Allocate the new value in this heap + ACE_TCHAR* pers_value = + (ACE_TCHAR *) allocator_->malloc ((value.length () + 1) * sizeof (ACE_TCHAR)); + ACE_OS::strcpy (pers_value, value.fast_rep ()); + ACE_Configuration_Value_IntId new_value_int (pers_value); + entry->int_id_ = new_value_int; + } + else + { + // it doesn't exist, bind it + ACE_TCHAR* pers_name = + (ACE_TCHAR *) allocator_->malloc ((ACE_OS::strlen (t_name) + 1) * sizeof (ACE_TCHAR)); + ACE_OS::strcpy (pers_name, t_name); + ACE_TCHAR* pers_value = + (ACE_TCHAR *) allocator_->malloc ((value.length () + 1) * sizeof (ACE_TCHAR)); + ACE_OS::strcpy (pers_value, value.fast_rep ()); + ACE_Configuration_ExtId item_name (pers_name); + ACE_Configuration_Value_IntId item_value (pers_value); + if (section_int.value_hash_map_->bind (item_name, item_value, allocator_)) + { + allocator_->free (pers_value); + allocator_->free (pers_name); + return -1; + } + return 0; + } + + return 0; +} + +int +ACE_Configuration_Heap::set_integer_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + u_int value) +{ + ACE_ASSERT (this->allocator_); + const ACE_TCHAR *t_name = name ? name : &this->NULL_String_; + if (validate_value_name (t_name)) + return -1; + + // Get the section name from the key + ACE_TString section; + if (load_key (key, section)) + return -1; + + // Find this section + ACE_Configuration_ExtId section_ext (section.fast_rep ()); + ACE_Configuration_Section_IntId section_int; + if (index_->find (section_ext, section_int, allocator_)) + return -1; // section does not exist + + // Get the entry for this item (if it exists) + VALUE_HASH::ENTRY* entry; + ACE_Configuration_ExtId item_name (t_name); + if (section_int.value_hash_map_->VALUE_HASH::find (item_name, entry) == 0) + { + // found item, replace it + ACE_Configuration_Value_IntId new_value_int (value); + entry->int_id_ = new_value_int; + } + else + { + // it doesn't exist, bind it + ACE_TCHAR* pers_name = + (ACE_TCHAR *) allocator_->malloc ((ACE_OS::strlen (t_name) + 1) * sizeof (ACE_TCHAR)); + ACE_OS::strcpy (pers_name, t_name); + ACE_Configuration_ExtId item_name (pers_name); + ACE_Configuration_Value_IntId item_value (value); + if (section_int.value_hash_map_->bind (item_name, item_value, allocator_)) + { + allocator_->free (pers_name); + return -1; + } + return 0; + } + + return 0; +} + +int +ACE_Configuration_Heap::set_binary_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + const void* data, + size_t length) +{ + ACE_ASSERT (this->allocator_); + const ACE_TCHAR *t_name = name ? name : &this->NULL_String_; + if (validate_value_name (t_name)) + return -1; + + // Get the section name from the key + ACE_TString section; + if (load_key (key, section)) + return -1; + + // Find this section + ACE_Configuration_ExtId section_ext (section.fast_rep ()); + ACE_Configuration_Section_IntId section_int; + if (index_->find (section_ext, section_int, allocator_)) + return -1; // section does not exist + + // Get the entry for this item (if it exists) + VALUE_HASH::ENTRY* entry; + ACE_Configuration_ExtId item_name (t_name); + if (section_int.value_hash_map_->VALUE_HASH::find (item_name, entry) == 0) + { + // found item, replace it + // Free the old value + entry->int_id_.free (allocator_); + // Allocate the new value in this heap + ACE_TCHAR* pers_value = (ACE_TCHAR *) allocator_->malloc (length); + ACE_OS::memcpy (pers_value, data, length); + ACE_Configuration_Value_IntId new_value_int (pers_value, length); + entry->int_id_ = new_value_int; + } + else + { + // it doesn't exist, bind it + ACE_TCHAR* pers_name = + (ACE_TCHAR *) allocator_->malloc ((ACE_OS::strlen (t_name) + 1) * sizeof (ACE_TCHAR)); + ACE_OS::strcpy (pers_name, t_name); + ACE_TCHAR* pers_value = (ACE_TCHAR *) allocator_->malloc (length); + ACE_OS::memcpy (pers_value, data, length); + ACE_Configuration_ExtId item_name (pers_name); + ACE_Configuration_Value_IntId item_value (pers_value, length); + if (section_int.value_hash_map_->bind (item_name, item_value, allocator_)) + { + allocator_->free (pers_value); + allocator_->free (pers_name); + return -1; + } + return 0; + } + + return 0; +} + +int +ACE_Configuration_Heap::get_string_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + ACE_TString& value) +{ + ACE_ASSERT (this->allocator_); + const ACE_TCHAR *t_name = name ? name : &this->NULL_String_; + if (validate_value_name (t_name)) + return -1; + + // Get the section name from the key + ACE_TString section; + if (load_key (key, section)) + return -1; + + // Find this section + ACE_Configuration_ExtId ExtId (section.fast_rep ()); + ACE_Configuration_Section_IntId IntId; + if (index_->find (ExtId, IntId, allocator_)) + return -1; // section does not exist + + // See if it exists first + ACE_Configuration_ExtId VExtId (t_name); + ACE_Configuration_Value_IntId VIntId; + if (IntId.value_hash_map_->find (VExtId, VIntId, allocator_)) + return -1; // unknown value + + // Check type + if (VIntId.type_ != ACE_Configuration::STRING) + { + errno = ENOENT; + return -1; + } + + // everythings ok, return the data + value = static_cast (VIntId.data_.ptr_); + return 0; +} + +int +ACE_Configuration_Heap::get_integer_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + u_int& value) +{ + ACE_ASSERT (this->allocator_); + + const ACE_TCHAR *t_name = name ? name : &this->NULL_String_; + if (validate_value_name (t_name)) + return -1; + + // Get the section name from the key + ACE_TString section (0, 0, false); + + if (this->load_key (key, section) != 0) + { + return -1; + } + + // Find this section + ACE_Configuration_ExtId ExtId (section.fast_rep ()); + ACE_Configuration_Section_IntId IntId; + + if (index_->find (ExtId, IntId, allocator_) != 0) + { + return -1; // section does not exist + } + + + // See if it exists first + ACE_Configuration_ExtId VExtId (t_name); + ACE_Configuration_Value_IntId VIntId; + + if (IntId.value_hash_map_->find (VExtId, VIntId, allocator_) != 0) + { + return -1; // unknown value + } + + // Check type + if (VIntId.type_ != ACE_Configuration::INTEGER) + { + errno = ENOENT; + return -1; + } + + // Everythings ok, return the data + value = VIntId.data_.int_; + return 0; +} + +int +ACE_Configuration_Heap::get_binary_value ( + const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + void*& data, + size_t& length) +{ + ACE_ASSERT (this->allocator_); + const ACE_TCHAR *t_name = name ? name : &this->NULL_String_; + if (validate_value_name (t_name)) + return -1; + + // Get the section name from the key + ACE_TString section; + if (load_key (key, section)) + return -1; + + // Find this section + ACE_Configuration_ExtId ExtId (section.fast_rep ()); + ACE_Configuration_Section_IntId IntId; + if (index_->find (ExtId, IntId, allocator_)) + return -1; // section does not exist + + ACE_Configuration_ExtId VExtId (t_name); + ACE_Configuration_Value_IntId VIntId; + // See if it exists first + if (IntId.value_hash_map_->find (VExtId, VIntId, allocator_)) + return -1; // unknown value + + // Check type + if (VIntId.type_ != ACE_Configuration::BINARY) + { + errno = ENOENT; + return -1; + } + + // Make a copy + ACE_NEW_RETURN (data, char[VIntId.length_], -1); + ACE_OS::memcpy (data, VIntId.data_.ptr_, VIntId.length_); + length = VIntId.length_; + return 0; +} + +int +ACE_Configuration_Heap::find_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + VALUETYPE& type_out) +{ + ACE_ASSERT (this->allocator_); + const ACE_TCHAR *t_name = name ? name : &this->NULL_String_; + if (validate_value_name (t_name)) + return -1; + + // Get the section name from the key + ACE_TString section; + if (load_key (key, section)) + return -1; + + // Find this section + ACE_Configuration_ExtId ExtId (section.fast_rep ()); + ACE_Configuration_Section_IntId IntId; + if (index_->find (ExtId, IntId, allocator_)) + return -1; // section does not exist + + // Find it + ACE_Configuration_ExtId ValueExtId (t_name); + VALUE_HASH::ENTRY* value_entry; + if (((VALUE_HASH *) IntId.value_hash_map_)->find (ValueExtId, value_entry)) + return -1; // value does not exist + + type_out = value_entry->int_id_.type_; + return 0; +} + +int +ACE_Configuration_Heap::remove_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name) +{ + ACE_ASSERT (this->allocator_); + const ACE_TCHAR *t_name = name ? name : &this->NULL_String_; + if (validate_value_name (t_name)) + return -1; + + // Get the section name from the key + ACE_TString section; + if (load_key (key, section)) + return -1; + + // Find this section + ACE_Configuration_ExtId ExtId (section.fast_rep ()); + ACE_Configuration_Section_IntId IntId; + if (index_->find (ExtId, IntId, allocator_)) + return -1; // section does not exist + + // Find it + ACE_Configuration_ExtId ValueExtId (t_name); + VALUE_HASH::ENTRY* value_entry; + if (((VALUE_HASH *) IntId.value_hash_map_)->find (ValueExtId, value_entry)) + return -1; + + // free it + value_entry->ext_id_.free (allocator_); + value_entry->int_id_.free (allocator_); + + // Unbind it + if (IntId.value_hash_map_->unbind (ValueExtId, allocator_)) + return -1; + + return 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Configuration.h b/ACE/ace/Configuration.h new file mode 100644 index 00000000000..199d7ac166b --- /dev/null +++ b/ACE/ace/Configuration.h @@ -0,0 +1,896 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Configuration.h + * + * $Id$ + * + * @author Chris Hafey + * + * The ACE configuration API provides a portable abstraction for + * program configuration similar to the Microsoft Windows registry. + * The API supports a tree based hierarchy of configuration sections. Each + * section contains other sections or values. Values may contain string, + * unsigned integer and binary data. + * + * @note These classes are not thread safe, if multiple threads use these + * classes, you are responsible for serializing access. + * + * For examples of using this class, see: + * -# The test code in ACE_wrappers/test + * -# wxConfigViewer, a Windows like Registry Editor for ACE_Configuration + * -# TAO's IFR, it makes extensive use of ACE_Configuration + * + * @todo Templatize this class with an ACE_LOCK to provide thread safety + * + */ +//============================================================================= + +#ifndef ACE_CONFIGURATION_H +#define ACE_CONFIGURATION_H +#include /**/ "ace/pre.h" + +#include "ace/SStringfwd.h" +#include "ace/Hash_Map_With_Allocator_T.h" +#include "ace/Malloc_T.h" +#include "ace/MMAP_Memory_Pool.h" +#include "ace/Local_Memory_Pool.h" +#include "ace/Synch_Traits.h" + + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +// configurable parameters + +#if !defined (ACE_CONFIG_SECTION_INDEX) +# define ACE_CONFIG_SECTION_INDEX "Config_Section_Index" +#endif /* ! ACE_CONFIG_SECTION_INDEX */ + +#if !defined (ACE_DEFAULT_CONFIG_SECTION_SIZE) +#define ACE_DEFAULT_CONFIG_SECTION_SIZE 16 +#endif /* ACE_DEFAULT_CONFIG_SECTION_SIZE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Section_Key_Internal + * + * @internal + * + * @brief A base class for internal handles to section keys for + * configuration implementations + * + * Implementations subclass this base class to represent a + * section key. + * + */ +class ACE_Export ACE_Section_Key_Internal +{ +public: + /// Virtual destructor, make sure descendants are virtual! + virtual ~ACE_Section_Key_Internal (void); + + /// Increment reference count + virtual int add_ref (void); + + /// Decrement reference count. Will delete this if count gets to 0 + virtual int dec_ref (void); +protected: + ACE_Section_Key_Internal (void); + ACE_Section_Key_Internal (const ACE_Section_Key_Internal& rhs); + ACE_Section_Key_Internal& operator= (ACE_Section_Key_Internal& rhs); + + u_int ref_count_; +}; + +/** + * @class ACE_Configuration_Section_Key + * + * @brief Reference counted wrapper for ACE_Section_Key_Internal. + * + * Reference counted wrapper class for the abstract internal + * section key. A user gets one of these to represent a section + * in the configuration database. + */ +class ACE_Export ACE_Configuration_Section_Key +{ + friend class ACE_Configuration; +public: + /// Default constructor. + ACE_Configuration_Section_Key (void); + + /// Constructor that initializes to a pointer to a concrete internal key. + /** + * @param key The section key to reference. Calls add_ref() with @a key. + */ + explicit ACE_Configuration_Section_Key (ACE_Section_Key_Internal *key); + + /// Copy constructor, increments the reference count on the key. + ACE_Configuration_Section_Key (const ACE_Configuration_Section_Key &rhs); + + /// Destructor, decrements reference count on the referenced key. + ~ACE_Configuration_Section_Key (void); + + /// Assignment operator, increments reference count for this object + /// and decrements it on @a rhs. + ACE_Configuration_Section_Key & + operator= (const ACE_Configuration_Section_Key &rhs); +private: + ACE_Section_Key_Internal *key_; +}; + +/** + * @class ACE_Configuration + * + * @internal + * + * @brief Base class for configuration databases + * + * This class provides an interface for configuration databases. A concrete + * class is required that implements the interface. + * + * @sa ACE_Configuration_Heap + * @sa ACE_Configuration_Win32Registry + */ +class ACE_Export ACE_Configuration +{ +public: + /// Enumeration for the various types of values we can store. + enum VALUETYPE + { + STRING, + INTEGER, + BINARY, + INVALID + }; + + /// Destructor + virtual ~ACE_Configuration (void); + + /// Obtain a reference to the root section of this configuration. + /* + * @return Reference to the configuration's root section. Note that + * it is a const reference. + */ + virtual const ACE_Configuration_Section_Key& root_section (void) const; + + /** + * Opens a named section in an existing section. + * + * @param base Existing section in which to open the named section. + * @param sub_section Name of the section to open. + * @param create If zero, the named section must exist. If non-zero, + * the named section will be created if it does not exist. + * @param result Reference; receives the section key for the new + * section. + * + * @retval 0 for success. + * @retval -1 for error; ACE_OS::last_error() retrieves error code. + */ + virtual int open_section (const ACE_Configuration_Section_Key &base, + const ACE_TCHAR *sub_section, + int create, + ACE_Configuration_Section_Key& result) = 0; + + /// Removes a named section. + /** + * @param key Section key to remove the named section from. + * @param sub_section Name of the section to remove. + * @param recursive If non zero, any subkeys below @a sub_section are + * removed as well. + * + * @retval 0 for success. + * @retval -1 for error; ACE_OS::last_error() retrieves error code. + */ + virtual int remove_section (const ACE_Configuration_Section_Key &key, + const ACE_TCHAR *sub_section, + int recursive) = 0; + + /** + * Enumerates through the values in a section. + * + * @param key Section key to iterate through. + * @param index Iteration position. Must be zero on the first call to + * iterate through @a key. Increment @a index by one on each + * successive call to this method. + * @param name Receives the value's name. + * @param type Receives the value's data type. + * + * @note You may not delete or add values while enumerating. If the + * section is modified during enumeration, results are undefined; + * you must restart the enumeration from index 0. + * + * @retval 0 for success, @a name and @a type are valid. + * @retval 1 there are no more values in the section. + * @retval -1 for error; ACE_OS::last_error() retrieves error code. + */ + virtual int enumerate_values (const ACE_Configuration_Section_Key& key, + int index, + ACE_TString& name, + VALUETYPE& type) = 0; + + /** + * Enumerates through the subsections in a section. + * + * @param key Section key to iterate through. + * @param index Iteration position. Must be zero on the first call to + * iterate through @a key. Increment @a index by one on each + * successive call to this method. + * @param name Receives the subsection's name. + * + * @note You may not modify the @a key section while enumerating. If the + * section is modified during enumeration, results are undefined; + * you must restart the enumeration from index 0. + * + * @retval 0 for success, @a name has a valid name. + * @retval 1 there are no more subsections in the section. + * @retval -1 for error; ACE_OS::last_error() retrieves error code. + */ + virtual int enumerate_sections (const ACE_Configuration_Section_Key& key, + int index, ACE_TString& name) = 0; + + /// Sets a string-typed value. + /** + * @param key Configuration section to set the value in. + * @param name Name of the configuration value to set. If a value with + * the specified name exists, it is replaced. + * @param value The string to set the configuration value to. + * + * @retval 0 for success. + * @retval -1 for error; ACE_OS::last_error() retrieves error code. + */ + virtual int set_string_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + const ACE_TString& value) = 0; + + /// Sets a integer-typed value. + /** + * @param key Configuration section to set the value in. + * @param name Name of the configuration value to set. If a value with + * the specified name exists, it is replaced. + * @param value The integer to set the configuration value to. + * + * @retval 0 for success. + * @retval -1 for error; ACE_OS::last_error() retrieves error code. + */ + virtual int set_integer_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + u_int value) = 0; + + /// Sets a binary-typed value. + /** + * @param key Configuration section to set the value in. + * @param name Name of the configuration value to set. If a value with + * the specified name exists, it is replaced. + * @param data Pointer to the binary data for the value. + * @param length Number of bytes for the new value. + * + * @retval 0 for success. + * @retval -1 for error; ACE_OS::last_error() retrieves error code. + */ + virtual int set_binary_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + const void* data, + size_t length) = 0; + + /// Gets a string-typed value. + /** + * @param key Configuration section to get the value from. + * @param name Name of the configuration value to get. + * @param value Receives the configuration value if it exists and + * has type STRING. + * + * @retval 0 for success. + * @retval -1 for error; ACE_OS::last_error() retrieves error code. + */ + virtual int get_string_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + ACE_TString& value) = 0; + + /// Gets an integer-typed value. + /** + * @param key Configuration section to get the value from. + * @param name Name of the configuration value to get. + * @param value Receives the configuration value if it exists and + * has type INTEGER. + * + * @retval 0 for success. + * @retval -1 for error; ACE_OS::last_error() retrieves error code. + */ + virtual int get_integer_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + u_int& value) = 0; + + /// Gets a binary-typed value. + /** + * @param key Configuration section to get the value from. + * @param name Name of the configuration value to get. + * @param data Receives a pointer to memory holding the binary data + * for the value. This method allocates the memory pointed + * to using operator new[]. The caller is responsible for + * freeing the memory using operator delete[]. + * @param length Receives the number of bytes in the value. + * + * @retval 0 for success; caller is responsible for freeing the + * returned memory. + * @retval -1 for error; ACE_OS::last_error() retrieves error code. + */ + virtual int get_binary_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + void*& data, + size_t& length) = 0; + + /** + * Retrieves the type of a named configuration value. + * + * @param key Configuration section to look up the name in. + * @param name Name of the configuration value to get the type of. + * @param type Receives the data type of the named value, if it exists. + * + * @retval 0 for success. + * @retval -1 for error; ACE_OS::last_error() retrieves error code. + */ + virtual int find_value(const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + VALUETYPE& type) = 0; + + /// Removes a named value. + /** + * @param key Configuration section to remove the named value from. + * @param name Name of the configuration value to remove. + * + * @retval 0 for success. + * @retval -1 for error; ACE_OS::last_error() retrieves error code. + */ + virtual int remove_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name) = 0; + + /** + * Expands to from @a key. If create is true, + * the subsections are created. Returns 0 on success, non zero on + * error The path consists of sections separated by the backslash + * '\' or forward slash '/'. + * Returns 0 on success, -1 if + virtual ~ACE_Section_Key_Win32 (void); + + // Not used + ACE_Section_Key_Win32 (const ACE_Section_Key_Win32& rhs); + ACE_Section_Key_Win32& operator= (const ACE_Section_Key_Win32& rhs); +}; + +/** + * @class ACE_Configuration_Win32Registry + * + * @brief The win32 registry implementation of a configuration database + * + * The win32 implementation basically makes calls through to the + * registry functions. The API is very similar so very little + * work must be done + */ +class ACE_Export ACE_Configuration_Win32Registry : public ACE_Configuration +{ +public: + + /** + * Constructor for registry configuration database. hKey is the + * base registry key to attach to. This class takes ownership of + * hKey, it will invoke on it upon destruction. + */ + explicit ACE_Configuration_Win32Registry (HKEY hKey); + + /// Destructor + virtual ~ACE_Configuration_Win32Registry (void); + + virtual int open_section (const ACE_Configuration_Section_Key& base, + const ACE_TCHAR* sub_section, + int create, + ACE_Configuration_Section_Key& result); + + virtual int remove_section (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* sub_section, + int recursive); + + virtual int enumerate_values (const ACE_Configuration_Section_Key& key, + int index, + ACE_TString& name, + VALUETYPE& type); + + virtual int enumerate_sections (const ACE_Configuration_Section_Key& key, + int index, + ACE_TString& name); + + virtual int set_string_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + const ACE_TString& value); + + virtual int set_integer_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + u_int value); + + virtual int set_binary_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + const void* data, + size_t length); + + virtual int get_string_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + ACE_TString& value); + + virtual int get_integer_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + u_int& value); + + virtual int get_binary_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + void*& data, + size_t& length); + + virtual int find_value(const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + VALUETYPE& type); + + /// Removes the the value @a name from @a key. returns non zero on error + virtual int remove_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name); + + /** + * This method traverses through . It is useful when + * you want the HKEY for a specific registry key, especially when + * initializing this implementation. Caller is responsible for + * closeing this key when it is no longer used. If create is 1 + * (default) the keys are create if they don't already exist. + * Returns 0 on error + */ + static HKEY resolve_key (HKEY hKey, + const ACE_TCHAR* path, + int create = 1); + virtual bool operator== (const ACE_Configuration_Win32Registry &rhs) const; + virtual bool operator!= (const ACE_Configuration_Win32Registry &rhs) const; + +protected: + + /// Gets the HKEY for a configuration section + int load_key (const ACE_Configuration_Section_Key& key, HKEY& hKey); + + // Not used + ACE_Configuration_Win32Registry (void); + ACE_Configuration_Win32Registry (const ACE_Configuration_Win32Registry& rhs); + ACE_Configuration_Win32Registry& operator= (const ACE_Configuration_Win32Registry& rhs); +}; +#endif /* ACE_WIN32 && !ACE_LACKS_WIN32_REGISTRY */ + +// ACE_Allocator version + +typedef ACE_Allocator_Adapter > + PERSISTENT_ALLOCATOR; +typedef ACE_Allocator_Adapter > + HEAP_ALLOCATOR; + +/** + * @class ACE_Configuration_ExtId + * + * @brief External ID for the section and value hash + * + * Contains a pointer to the section or value name. + */ +class ACE_Export ACE_Configuration_ExtId +{ +public: + /// Defeault ctor + ACE_Configuration_ExtId (void); + + /// Named constructor + explicit ACE_Configuration_ExtId (const ACE_TCHAR* name); + + /// Copy ctor + ACE_Configuration_ExtId (const ACE_Configuration_ExtId& rhs); + + /// destructor + ~ACE_Configuration_ExtId (void); + + /// Assignment operator + ACE_Configuration_ExtId& operator= (const ACE_Configuration_ExtId& rhs); + + /// Equality comparison operator (must match name_). + bool operator== (const ACE_Configuration_ExtId &rhs) const; + + /// Inequality comparison operator. + bool operator!= (const ACE_Configuration_ExtId &rhs) const; + + /// Frees the name of the value. needed since we don't know the + /// allocator name_ was created in + void free (ACE_Allocator *alloc); + + /// function is required in order for this class to be usable by + /// ACE_Hash_Map_Manager. + u_long hash (void) const; + + // = Data members. + + const ACE_TCHAR * name_; + + // Accessors + const ACE_TCHAR *name (void); +}; + +typedef ACE_Hash_Map_With_Allocator + SUBSECTION_MAP; +typedef ACE_Hash_Map_Manager_Ex, + ACE_Equal_To, + ACE_Null_Mutex> + SUBSECTION_HASH; + +/// @deprecated Deprecated typedef. Use the SUBSECTION_HASH::ENTRY trait instead. +typedef SUBSECTION_HASH::ENTRY SUBSECTION_ENTRY; + +/** + * @class ACE_Configuration_Value_IntId + * + * @brief The section hash table internal value class + * + * This class is present as the internal portion of a section's + * value hash table It may store string, integer or binary data. + */ +class ACE_Export ACE_Configuration_Value_IntId +{ +public: + /// Default constructor + ACE_Configuration_Value_IntId (void); + + /// String constructor, takes ownership of string + explicit ACE_Configuration_Value_IntId (ACE_TCHAR* string); + + /// Integer constructor + explicit ACE_Configuration_Value_IntId (u_int integer); + + /// Binary constructor, takes ownership of data + ACE_Configuration_Value_IntId (void* data, size_t length); + + /// Copy ctor + ACE_Configuration_Value_IntId (const ACE_Configuration_Value_IntId& rhs); + + /// Destructor + ~ACE_Configuration_Value_IntId (void); + + /// Assignment operator + ACE_Configuration_Value_IntId& operator= ( + const ACE_Configuration_Value_IntId& rhs); + + void free (ACE_Allocator *alloc); + + // = Data members. + + /** + * Points to the string value or binary data or IS the integer + * Length is only used when type_ == BINARY + */ + ACE_Configuration::VALUETYPE type_; + union { + void * ptr_; + u_int int_; + } data_; + size_t length_; +}; + +typedef ACE_Hash_Map_With_Allocator + VALUE_MAP; +typedef ACE_Hash_Map_Manager_Ex, + ACE_Equal_To, + ACE_Null_Mutex> + VALUE_HASH; + +// Deprecated typedef. Use the VALUE_HASH::ENTRY trait instead. +typedef VALUE_HASH::ENTRY VALUE_ENTRY; + +/** + * @class ACE_Configuration_Section_IntId + * + * @brief The internal ID for a section hash table + * + * Contains a hash table containing value name/values + */ +class ACE_Export ACE_Configuration_Section_IntId +{ +public: + /// Default ctor + ACE_Configuration_Section_IntId (void); + + /// Named ctor + ACE_Configuration_Section_IntId (VALUE_MAP* value_hash_map, + SUBSECTION_MAP* section_hash_map); + + /// Copy ctor + ACE_Configuration_Section_IntId (const ACE_Configuration_Section_IntId& rhs); + + /// Destructor + ~ACE_Configuration_Section_IntId (void); + + /// Assignment operator + ACE_Configuration_Section_IntId& operator= ( + const ACE_Configuration_Section_IntId& rhs); + + /// Frees the hash table and all its values + void free (ACE_Allocator *alloc); + + // = Data Members. + VALUE_MAP* value_hash_map_; + + SUBSECTION_MAP* section_hash_map_; +}; + +typedef ACE_Hash_Map_With_Allocator + SECTION_MAP; +typedef ACE_Hash_Map_Manager_Ex, + ACE_Equal_To, + ACE_Null_Mutex> + SECTION_HASH; + +// Deprecated typedef. Use the SECTION_HASH::ENTRY trait instead. +typedef SECTION_HASH::ENTRY SECTION_ENTRY; + +/** + * @class ACE_Configuration_Section_Key_Heap + * + * @brief Internal section key class for heap based configuration + * database. + * + * Contains a value iterator and full path name of section. + */ +class ACE_Export ACE_Configuration_Section_Key_Heap + : public ACE_Section_Key_Internal +{ +public: + /// Constructor based on the full path of the section + ACE_Configuration_Section_Key_Heap (const ACE_TCHAR* path); + + /// The path itself + ACE_TCHAR* path_; + + /// The value iterator + VALUE_HASH::ITERATOR* value_iter_; + + /// The sub section iterator + SUBSECTION_HASH::ITERATOR* section_iter_; +protected: + /// Destructor - will delete the iterators + virtual ~ACE_Configuration_Section_Key_Heap (void); + + // Not used + ACE_Configuration_Section_Key_Heap (const ACE_Configuration_Section_Key_Heap& rhs); + ACE_Configuration_Section_Key_Heap& operator= (const ACE_Configuration_Section_Key_Heap& rhs); +}; + +/** + * @class ACE_Configuration_Heap + * + * @brief The concrete implementation of a allocator based + * configuration database + * + * This class uses ACE's Allocators to manage a memory + * representation of a configuraiton database. A persistent heap + * may be used to store configurations persistently + * + * @note Before using this class you must call one of the open methods. + * + * @todo + * - Need to investigate what happens if memory mapped file gets mapped to + * a location different than it was created with. + */ +class ACE_Export ACE_Configuration_Heap : public ACE_Configuration +{ +public: + + /// Default ctor + ACE_Configuration_Heap (void); + + /// Destructor + virtual ~ACE_Configuration_Heap (void); + + /// Opens a configuration based on a file name + int open (const ACE_TCHAR* file_name, + void* base_address = ACE_DEFAULT_BASE_ADDR, + size_t default_map_size = ACE_DEFAULT_CONFIG_SECTION_SIZE); + + /// Opens a heap based configuration + int open (size_t default_map_size = ACE_DEFAULT_CONFIG_SECTION_SIZE); + + virtual int open_section (const ACE_Configuration_Section_Key& base, + const ACE_TCHAR* sub_section, + int create, ACE_Configuration_Section_Key& result); + + virtual int remove_section (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* sub_section, + int recursive); + + virtual int enumerate_values (const ACE_Configuration_Section_Key& key, + int index, + ACE_TString& name, + VALUETYPE& type); + + virtual int enumerate_sections (const ACE_Configuration_Section_Key& key, + int index, + ACE_TString& name); + + virtual int set_string_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + const ACE_TString& value); + + virtual int set_integer_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + u_int value); + + virtual int set_binary_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + const void* data, + size_t length); + + virtual int get_string_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + ACE_TString& value); + + virtual int get_integer_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + u_int& value); + + virtual int get_binary_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + void* &data, + size_t &length); + + virtual int find_value(const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name, + VALUETYPE& type); + + /// Removes the the value @a name from @a key. returns non zero on error + virtual int remove_value (const ACE_Configuration_Section_Key& key, + const ACE_TCHAR* name); + +private: + /// may not contain path separators + int open_simple_section (const ACE_Configuration_Section_Key &base, + const ACE_TCHAR *sub_section, + int create, ACE_Configuration_Section_Key &result); + /// Adds a new section + int add_section (const ACE_Configuration_Section_Key &base, + const ACE_TCHAR *sub_section, + ACE_Configuration_Section_Key &result); + + /// Helper for the method. + int create_index (void); + + /// Helper for create_index() method: places hash table into an + /// allocated space. + int create_index_helper (void *buffer); + + int value_open_helper (size_t hash_table_size, void *buffer); + + int section_open_helper (size_t hash_table_size, void *buffer); + + int load_key (const ACE_Configuration_Section_Key& key, ACE_TString& name); + + int new_section (const ACE_TString& section, + ACE_Configuration_Section_Key& result); + + ACE_Configuration_Heap (const ACE_Configuration_Heap& rhs); + ACE_Configuration_Heap& operator= (const ACE_Configuration_Heap& rhs); + + ACE_Allocator *allocator_; + SECTION_MAP *index_; + size_t default_map_size_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Configuration.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_CONFIGURATION_H */ diff --git a/ACE/ace/Configuration.inl b/ACE/ace/Configuration.inl new file mode 100644 index 00000000000..b7c9af26f5c --- /dev/null +++ b/ACE/ace/Configuration.inl @@ -0,0 +1,13 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE const ACE_TCHAR* +ACE_Configuration_ExtId::name (void) +{ + return name_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Configuration_Import_Export.cpp b/ACE/ace/Configuration_Import_Export.cpp new file mode 100644 index 00000000000..ce4cbac84c1 --- /dev/null +++ b/ACE/ace/Configuration_Import_Export.cpp @@ -0,0 +1,670 @@ +// $Id$ + +#include "ace/Configuration_Import_Export.h" +#include "ace/OS_Errno.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_ctype.h" +#include "ace/OS_NS_string.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Config_ImpExp_Base::ACE_Config_ImpExp_Base (ACE_Configuration& config) + : config_ (config) +{ +} + +ACE_Config_ImpExp_Base::~ACE_Config_ImpExp_Base (void) +{ +} + +ACE_Registry_ImpExp::ACE_Registry_ImpExp (ACE_Configuration& config) + : ACE_Config_ImpExp_Base (config) +{ +} + +ACE_Registry_ImpExp::~ACE_Registry_ImpExp (void) +{ +} + +// Imports the configuration database from filename. +// No existing data is removed. +int +ACE_Registry_ImpExp::import_config (const ACE_TCHAR* filename) +{ + if (0 == filename) + { + errno = EINVAL; + return -1; + } + FILE* in = ACE_OS::fopen (filename, ACE_TEXT ("r")); + if (!in) + return -1; + + u_int buffer_size = 4096; + u_int read_pos = 0; + ACE_TCHAR *buffer = 0; + ACE_NEW_NORETURN (buffer, ACE_TCHAR[buffer_size]); + if (!buffer) + { + ACE_Errno_Guard guard (errno); + (void) ACE_OS::fclose (in); + return -1; + } + ACE_Configuration_Section_Key section; + ACE_TCHAR *end = 0; + + while (ACE_OS::fgets (buffer+read_pos, buffer_size - read_pos, in)) + { + // Check if we got all the line. + end = ACE_OS::strrchr (buffer + read_pos, + ACE_TEXT ('\n')); // look for end of line + if (!end) // we havn't reach the end of the line yet + { + // allocate a new buffer - double size the previous one + ACE_TCHAR *temp_buffer; + ACE_NEW_NORETURN (temp_buffer, ACE_TCHAR[buffer_size * 2]); + if (!temp_buffer) + { + ACE_Errno_Guard guard (errno); + delete [] buffer; + (void) ACE_OS::fclose (in); + return -1; + } + + // copy the beginnning of the line + ACE_OS::memcpy (temp_buffer, buffer, buffer_size); + read_pos = buffer_size - 1; + buffer_size *= 2; + delete [] buffer; + buffer = temp_buffer; + continue; + } + read_pos = 0; + + // Check for a comment + if (buffer[0] == ACE_TEXT (';') || buffer[0] == ACE_TEXT ('#')) + continue; + + if (buffer[0] == ACE_TEXT ('[')) + { + // We have a new section here, strip out the section name + end = ACE_OS::strrchr (buffer, ACE_TEXT (']')); + if (!end) + { + ACE_OS::fclose (in); + delete [] buffer; + return -3; + } + *end = 0; + + if (config_.expand_path (config_.root_section (), buffer + 1, section, 1)) + { + ACE_OS::fclose (in); + delete [] buffer; + return -3; + } + continue; + } // end if firs char is a [ + + if (buffer[0] == ACE_TEXT ('"')) + { + // we have a value + end = ACE_OS::strchr (buffer+1, '"'); + if (!end) // no closing quote, not a value so just skip it + continue; + + // null terminate the name + *end = 0; + ACE_TCHAR* name = buffer + 1; + end+=2; + // determine the type + if (*end == '\"') + { + // string type + // truncate trailing " + ++end; + ACE_TCHAR* trailing = ACE_OS::strrchr (end, '"'); + if (trailing) + *trailing = 0; + if (config_.set_string_value (section, name, end)) + { + ACE_OS::fclose (in); + delete [] buffer; + return -4; + } + } + else if (ACE_OS::strncmp (end, ACE_TEXT ("dword:"), 6) == 0) + { + // number type + ACE_TCHAR* endptr = 0; + unsigned long value = ACE_OS::strtoul (end + 6, &endptr, 16); + if (config_.set_integer_value (section, name, value)) + { + ACE_OS::fclose (in); + delete [] buffer; + return -4; + } + } + else if (ACE_OS::strncmp (end, ACE_TEXT ("hex:"), 4) == 0) + { + // binary type + size_t string_length = ACE_OS::strlen (end + 4); + // divide by 3 to get the actual buffer length + size_t length = string_length / 3; + size_t remaining = length; + u_char* data = 0; + ACE_NEW_RETURN (data, + u_char[length], + -1); + u_char* out = data; + ACE_TCHAR* inb = end + 4; + ACE_TCHAR* endptr = 0; + while (remaining) + { + u_char charin = (u_char) ACE_OS::strtoul (inb, &endptr, 16); + *out = charin; + ++out; + --remaining; + inb += 3; + } + if (config_.set_binary_value (section, name, data, length)) + { + ACE_OS::fclose (in); + delete [] data; + delete [] buffer; + return -4; + } + else + delete [] data; + } + else + { + // invalid type, ignore + continue; + } + }// end if first char is a " + else + { + // if the first character is not a ", [, ;, or # we may be + // processing a file in the old format. + // Try and process the line as such and if it fails, + // return an error + int rc = process_previous_line_format (buffer, section); + if (rc != 0) + { + ACE_OS::fclose (in); + delete [] buffer; + return rc; + } + } // end if maybe old format + } // end while fgets + + if (ferror (in)) + { + ACE_OS::fclose (in); + delete [] buffer; + return -1; + } + + ACE_OS::fclose (in); + delete [] buffer; + return 0; +} + +// This method exports the entire configuration database to . +// Once the file is opened this method calls 'export_section' passing +// the root section. +int +ACE_Registry_ImpExp::export_config (const ACE_TCHAR* filename) +{ + if (0 == filename) + { + errno = EINVAL; + return -1; + } + int result = -1; + + FILE* out = ACE_OS::fopen (filename, ACE_TEXT ("w")); + if (out) + { + result = this->export_section (config_.root_section (), + ACE_TEXT (""), + out); + // The data may have been buffered and will be flush on close, + // so we need to check that the close succeeds. + if (ACE_OS::fclose (out) < 0) + result = -7; + } + return result; +} + +// Method provided by derived classes in order to write one section +// to the file specified. Called by export_config when exporting +// the entire configuration object. + +int +ACE_Registry_ImpExp::export_section (const ACE_Configuration_Section_Key& section, + const ACE_TString& path, + FILE* out) +{ + // don't export the root + if (path.length ()) + { + // Write out the section header + ACE_TString header = ACE_TEXT ("["); + header += path; + header += ACE_TEXT ("]"); + header += ACE_TEXT (" \n"); + if (ACE_OS::fputs (header.fast_rep (), out) < 0) + return -1; + // Write out each value + int index = 0; + ACE_TString name; + ACE_Configuration::VALUETYPE type; + ACE_TString line; + ACE_TCHAR int_value[32]; + ACE_TCHAR bin_value[3]; + void* binary_data; + size_t binary_length; + ACE_TString string_value; + while (!config_.enumerate_values (section, index, name, type)) + { + line = ACE_TEXT ("\"") + name + ACE_TEXT ("\"="); + switch (type) + { + case ACE_Configuration::INTEGER: + { + u_int value; + if (config_.get_integer_value (section, name.fast_rep (), value)) + return -2; + ACE_OS::sprintf (int_value, ACE_TEXT ("%08x"), value); + line += ACE_TEXT ("dword:"); + line += int_value; + break; + } + case ACE_Configuration::STRING: + { + if (config_.get_string_value (section, + name.fast_rep (), + string_value)) + return -2; + line += ACE_TEXT ("\""); + line += string_value + ACE_TEXT ("\""); + break; + } +#ifdef _WIN32 + case ACE_Configuration::INVALID: + break; // JDO added break. Otherwise INVALID is processed + // like BINARY. If that's correct, please remove the + // break and these comments +#endif + case ACE_Configuration::BINARY: + { + // not supported yet - maybe use BASE64 codeing? + if (config_.get_binary_value (section, + name.fast_rep (), + binary_data, + binary_length)) + return -2; + line += ACE_TEXT ("hex:"); + unsigned char* ptr = (unsigned char*)binary_data; + while (binary_length) + { + if (ptr != binary_data) + { + line += ACE_TEXT (","); + } + ACE_OS::sprintf (bin_value, ACE_TEXT ("%02x"), *ptr); + line += bin_value; + --binary_length; + ++ptr; + } + delete [] (char*) binary_data; + break; + } + default: + return -3; + } + line += ACE_TEXT ("\n"); + if (ACE_OS::fputs (line.fast_rep (), out) < 0) + return -4; + ++index; + } + } + // Export all sub sections + int index = 0; + ACE_TString name; + ACE_Configuration_Section_Key sub_key; + ACE_TString sub_section; + while (!config_.enumerate_sections (section, index, name)) + { + ACE_TString sub_section (path); + if (path.length ()) + sub_section += ACE_TEXT ("\\"); + sub_section += name; + if (config_.open_section (section, name.fast_rep (), 0, sub_key)) + return -5; + if (export_section (sub_key, sub_section.fast_rep (), out)) + return -6; + ++index; + } + return 0; +} + +// +// This method read the line format origionally used in ACE 5.1 +// +int +ACE_Registry_ImpExp::process_previous_line_format (ACE_TCHAR* buffer, + ACE_Configuration_Section_Key& section) +{ + // Chop any cr/lf at the end of the line. + ACE_TCHAR *endp = ACE_OS::strpbrk (buffer, ACE_TEXT ("\r\n")); + if (endp != 0) + *endp = '\0'; + + // assume this is a value, read in the value name + ACE_TCHAR* end = ACE_OS::strchr (buffer, '='); + if (end) // no =, not a value so just skip it + { + // null terminate the name + *end = 0; + ++end; + // determine the type + if (*end == '\"') + { + // string type + if(config_.set_string_value (section, buffer, end + 1)) + return -4; + } + else if (*end == '#') + { + // number type + u_int value = ACE_OS::atoi (end + 1); + if (config_.set_integer_value (section, buffer, value)) + return -4; + } + } + return 0; +} // end read_previous_line_format + + +ACE_Ini_ImpExp::ACE_Ini_ImpExp (ACE_Configuration& config) + : ACE_Config_ImpExp_Base (config) +{ +} + +ACE_Ini_ImpExp::~ACE_Ini_ImpExp (void) +{ +} + +// Method to read file and populate object. +int +ACE_Ini_ImpExp::import_config (const ACE_TCHAR* filename) +{ + if (0 == filename) + { + errno = EINVAL; + return -1; + } + FILE* in = ACE_OS::fopen (filename, ACE_TEXT ("r")); + if (!in) + return -1; + + // @@ Make this a dynamic size! + ACE_TCHAR buffer[4096]; + ACE_Configuration_Section_Key section; + while (ACE_OS::fgets (buffer, sizeof buffer, in)) + { + ACE_TCHAR *line = this->squish (buffer); + // Check for a comment and blank line + if (line[0] == ACE_TEXT (';') || + line[0] == ACE_TEXT ('#') || + line[0] == '\0') + continue; + + if (line[0] == ACE_TEXT ('[')) + { + // We have a new section here, strip out the section name + ACE_TCHAR* end = ACE_OS::strrchr (line, ACE_TEXT (']')); + if (!end) + { + ACE_OS::fclose (in); + return -3; + } + *end = 0; + + if (config_.expand_path (config_.root_section (), + line + 1, + section, + 1)) + { + ACE_OS::fclose (in); + return -3; + } + + continue; + } + + // We have a line; name ends at equal sign. + ACE_TCHAR *end = ACE_OS::strchr (line, ACE_TEXT ('=')); + if (end == 0) // No '=' + { + ACE_OS::fclose (in); + return -3; + } + *end++ = '\0'; + ACE_TCHAR *name = this->squish (line); +#if 0 + if (ACE_OS::strlen (name) == 0) // No name; just an '=' + { + ACE_OS::fclose (in); + return -3; + } +#endif + // Now find the start of the value + ACE_TCHAR *value = this->squish (end); + size_t value_len = ACE_OS::strlen (value); + if (value_len > 0) + { + // ACE 5.2 (and maybe earlier) exported strings may be enclosed + // in quotes. If string is quote-delimited, strip the quotes. + // Newer exported files don't have quote delimiters. + if (value[0] == ACE_TEXT ('"') && + value[value_len - 1] == ACE_TEXT ('"')) + { + // Strip quotes off both ends. + value[value_len - 1] = '\0'; + ++value; + } + } + + if (config_.set_string_value (section, name, value)) + { + ACE_OS::fclose (in); + return -4; + } + } // end while fgets + + if (ferror (in)) + { + ACE_OS::fclose (in); + return -1; + } + + ACE_OS::fclose (in); + return 0; +} + +// This method exports the entire configuration database to . +// Once the file is opened this method calls 'export_section' passing +// the root section. +int +ACE_Ini_ImpExp::export_config (const ACE_TCHAR* filename) +{ + if (0 == filename) + { + errno = EINVAL; + return -1; + } + int result = -1; + + FILE* out = ACE_OS::fopen (filename, ACE_TEXT ("w")); + if (out) + { + result = this->export_section (config_.root_section (), + ACE_TEXT (""), + out); + // The data may have been buffered and will be flush on close, + // so we need to check that the close succeeds. + if (ACE_OS::fclose (out) < 0) + result = -7; + } + return result; +} + +// Method provided by derived classes in order to write one section to the +// file specified. Called by export_config when exporting the entire +// configuration objet + +int +ACE_Ini_ImpExp::export_section (const ACE_Configuration_Section_Key& section, + const ACE_TString& path, + FILE* out) +{ + // don't export the root + if (path.length ()) + { + // Write out the section header + ACE_TString header = ACE_TEXT ("["); + header += path; + header += ACE_TEXT ("]\n"); + if (ACE_OS::fputs (header.fast_rep (), out) < 0) + return -1; + // Write out each value + int index = 0; + ACE_TString name; + ACE_Configuration::VALUETYPE type; + ACE_TString line; + ACE_TCHAR int_value[32]; + ACE_TCHAR bin_value[3]; + void* binary_data; + size_t binary_length; + ACE_TString string_value; + while (!config_.enumerate_values (section, index, name, type)) + { + line = name + ACE_TEXT ("="); + switch (type) + { + case ACE_Configuration::INTEGER: + { + u_int value; + if (config_.get_integer_value (section, name.fast_rep (), value)) + return -2; + ACE_OS::sprintf (int_value, ACE_TEXT ("%08x"), value); + line += int_value; + break; + } + case ACE_Configuration::STRING: + { + if (config_.get_string_value (section, + name.fast_rep (), + string_value)) + return -2; + line += string_value; + break; + } +#ifdef _WIN32 + case ACE_Configuration::INVALID: + break; // JDO added break. Otherwise INVALID is processed + // like BINARY. If that's correct, please remove the + // break and these comments +#endif + case ACE_Configuration::BINARY: + { + // not supported yet - maybe use BASE64 codeing? + if (config_.get_binary_value (section, + name.fast_rep (), + binary_data, + binary_length)) + return -2; + line += ACE_TEXT ("\""); + unsigned char* ptr = (unsigned char*)binary_data; + while (binary_length) + { + if (ptr != binary_data) + { + line += ACE_TEXT (","); + } + ACE_OS::sprintf (bin_value, ACE_TEXT ("%02x"), *ptr); + line += bin_value; + --binary_length; + ++ptr; + } + line += ACE_TEXT ("\""); + delete [] (char *) binary_data; + break; + } + default: + return -3; + + }// end switch on type + + line += ACE_TEXT ("\n"); + if (ACE_OS::fputs (line.fast_rep (), out) < 0) + return -4; + ++index; + }// end while enumerating values + } + // Export all sub sections + int index = 0; + ACE_TString name; + ACE_Configuration_Section_Key sub_key; + ACE_TString sub_section; + while (!config_.enumerate_sections (section, index, name)) + { + ACE_TString sub_section (path); + if (path.length ()) + sub_section += ACE_TEXT ("\\"); + sub_section += name; + if (config_.open_section (section, name.fast_rep (), 0, sub_key)) + return -5; + if (export_section (sub_key, sub_section.fast_rep (), out)) + return -6; + ++index; + } + return 0; + +} + +// Method to squish leading and trailing whitespaces from a string. +// Whitespace is defined as: spaces (' '), tabs ('\t') or end-of-line +// (cr/lf). The terminating nul is moved up to expunge trailing +// whitespace and the returned pointer points at the first +// non-whitespace character in the string, which may be the nul +// terminator if the string is all whitespace. + +ACE_TCHAR * +ACE_Ini_ImpExp::squish (ACE_TCHAR *src) +{ + ACE_TCHAR *cp = 0; + + if (src == 0) + return 0; + + // Start at the end and work backwards over all whitespace. + for (cp = src + ACE_OS::strlen (src) - 1; + cp != src; + --cp) + if (!ACE_OS::ace_isspace (*cp)) + break; + cp[1] = '\0'; // Chop trailing whitespace + + // Now start at the beginning and move over all whitespace. + for (cp = src; ACE_OS::ace_isspace (*cp); ++cp) + continue; + + return cp; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Configuration_Import_Export.h b/ACE/ace/Configuration_Import_Export.h new file mode 100644 index 00000000000..41dc401e0c7 --- /dev/null +++ b/ACE/ace/Configuration_Import_Export.h @@ -0,0 +1,215 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Configuration_Import_Export.h + * + * $Id$ + * + * @author Jerry D. Odenwelder Jr. + * Chris Hafey + * + * Classes defined in this file provide the ability to import and export + * ACE Configuration objects to/from disk files. The base class + * ACE_Config_ImpExp_Base provides the common functionality and the derived + * classes implement the import/export functionality for the specific format. + * + * @todo + * - Add locking for thread safety. + * - Provide ability to read file in one format and write in another. + * - See todo's in each class + */ +//============================================================================= + +#ifndef ACE_CONFIGURATION_IMPORT_EXPORT_H +#define ACE_CONFIGURATION_IMPORT_EXPORT_H +#include /**/ "ace/pre.h" + +#include "ace/Configuration.h" +#include "ace/SString.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Config_ImpExp_Base + * + * @brief Base class for file import/export configuration. + * + * This class provides base functionality for configuration objects + * that are persisted in files. It takes an ACE_Configuration + * object that it populates with the data read. + * + */ +class ACE_Export ACE_Config_ImpExp_Base +{ +public: + /// Constructor taking the ACE_Configuration to import/export to + ACE_Config_ImpExp_Base (ACE_Configuration& config); + + /** + * Destructor + */ + virtual ~ACE_Config_ImpExp_Base (void); + + /** + * Imports the configuration database from @a filename. + * No existing data is removed. + */ + virtual int import_config (const ACE_TCHAR* filename) = 0; + + /** + * This method exports the entire configuration database to @a filename. + * Once the file is opened this method calls 'export_section' passing + * the root section. + */ + virtual int export_config (const ACE_TCHAR* filename) = 0; + +protected: + ACE_Configuration &config_; + +private: + ACE_Config_ImpExp_Base (const ACE_Config_ImpExp_Base&); + ACE_Config_ImpExp_Base& operator= (const ACE_Config_ImpExp_Base&); +}; + +/** + * @class ACE_Registry_ImpExp + * + * @brief Configuration object that imports/exports data to a file formatted + * using the Win32 Registry file export format. This format looks like + * [Section] + * "key"="String Data" + * "key"=dword: numeric data in hexidecimal format + * "key"=hex: binary data + * + * @todo + * - Add dynamic buffer when importing. currently it will not allow + * importing of values greater than a fixed ammount (4096 bytes) + * + */ +class ACE_Export ACE_Registry_ImpExp : public ACE_Config_ImpExp_Base +{ +public: + /// Construction + ACE_Registry_ImpExp (ACE_Configuration&); + + /// Destruction. + virtual ~ACE_Registry_ImpExp (void); + + /** + * Imports the configuration database from filename. + * No existing data is removed. + */ + virtual int import_config (const ACE_TCHAR* filename); + + /** + * This method exports the entire configuration database to @a filename. + * Once the file is opened this method calls export_section() passing + * the root section. + */ + virtual int export_config (const ACE_TCHAR* filename); + +private: + int export_section (const ACE_Configuration_Section_Key& section, + const ACE_TString& path, + FILE* out); + + int process_previous_line_format (ACE_TCHAR* buffer, + ACE_Configuration_Section_Key& section); + + ACE_Registry_ImpExp ( const ACE_Registry_ImpExp&); + ACE_Registry_ImpExp& operator= ( const ACE_Registry_ImpExp&); +}; + +/** + * @class ACE_Ini_ImpExp + * + * @brief Imports the configuration database from filename as strings. + * Allows non-typed values. (no #, dword: hex:, etc. prefixes) and + * skips whitespace (tabs and spaces) as in standard .ini and .conf + * files. Values (to right of equal sign) can be double quote + * delimited to embed tabs and spaces in the string. + * Caller must convert string to type. + * + * This method allows for lines in the .ini or .conf file like this: + * + * TimeToLive = 100 + * Delay = FALSE + * Flags = FF34 + * Heading = "ACE - Adaptive Communication Environment" + * + * (note leading whitespace (tabs) in examples below) + * + * SeekIndex = 14 + * TraceLevel = 6 # Can comment lines like this + * Justification = left_justified + * + * The caller can then retrieve the string with the regular + * function and convert the string to the + * desired data type. + * + * @todo + * - Strings with embedded newlines cause the import to fail + * - Strings with embedded quotes " cause the import to fail + * - Importing/exporting for values in the root section does not work + * - Add dynamic buffer when importing. currently it will not allow + * importing of values greater than a fixed ammount (4096 bytes) +*/ +class ACE_Export ACE_Ini_ImpExp : public ACE_Config_ImpExp_Base +{ +public: + /** + * Construction + */ + ACE_Ini_ImpExp (ACE_Configuration&); + + /** + * Destructor + */ + virtual ~ACE_Ini_ImpExp (void); + + /** + * Imports the configuration database from filename. + * No existing data is removed. + */ + virtual int import_config (const ACE_TCHAR* filename); + + /** + * This method exports the entire configuration database to @a filename. + * Once the file is opened this method calls export_section() passing + * the root section. + */ + virtual int export_config (const ACE_TCHAR* filename); + +private: + /** + * Method provided by derived classes in order to write one section + * to the file specified. Called by export_config() when exporting + * the entire configuration object. + */ + int export_section (const ACE_Configuration_Section_Key& section, + const ACE_TString& path, + FILE* out); + + /** + * Method to squish leading and trailing whitespaces in a string. + * Whitespace is defined as: spaces (' '), tabs ('\\t') or cr/lf. + * Returns a pointer to the first non-whitespace character in the + * buffer provided, or a pointer to the terminating null if the string + * is all whitespace. The terminating null is moved forward to the + * first character past the last non-whitespace. + */ + ACE_TCHAR *squish (ACE_TCHAR *src); + + ACE_Ini_ImpExp (const ACE_Ini_ImpExp&); + ACE_Ini_ImpExp& operator= (const ACE_Ini_ImpExp&); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" +#endif /* ACE_CONFIGURATION_IMPORT_EXPORT_H */ diff --git a/ACE/ace/Connection_Recycling_Strategy.cpp b/ACE/ace/Connection_Recycling_Strategy.cpp new file mode 100644 index 00000000000..c5bc6910d21 --- /dev/null +++ b/ACE/ace/Connection_Recycling_Strategy.cpp @@ -0,0 +1,13 @@ +#include "ace/Connection_Recycling_Strategy.h" + + +ACE_RCSID(ace, Connection_Recycling_Strategy, "$Id$") + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Connection_Recycling_Strategy::~ACE_Connection_Recycling_Strategy (void) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Connection_Recycling_Strategy.h b/ACE/ace/Connection_Recycling_Strategy.h new file mode 100644 index 00000000000..fa9599f678c --- /dev/null +++ b/ACE/ace/Connection_Recycling_Strategy.h @@ -0,0 +1,63 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Connection_Recycling_Strategy.h + * + * $Id$ + * + * @author Doug Schmidt + */ +//============================================================================= +#ifndef ACE_CONNECTION_RECYCLING_STRATEGY_H +#define ACE_CONNECTION_RECYCLING_STRATEGY_H +#include /**/ "ace/pre.h" + +#include "ace/Recyclable.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Connection_Recycling_Strategy + * + * @brief Defines the interface for a connection recycler. + */ +class ACE_Export ACE_Connection_Recycling_Strategy +{ +public: + /// Virtual Destructor + virtual ~ACE_Connection_Recycling_Strategy (void); + + /// Remove from cache. + virtual int purge (const void *recycling_act) = 0; + + /// Add to cache. + virtual int cache (const void *recycling_act) = 0; + + virtual int recycle_state (const void *recycling_act, + ACE_Recyclable_State new_state) = 0; + + /// Get/Set recycle_state. + virtual ACE_Recyclable_State recycle_state (const void *recycling_act) const = 0; + + /// Mark as closed. + virtual int mark_as_closed (const void *recycling_act) = 0; + + /// Mark as closed.(non-locking version) + virtual int mark_as_closed_i (const void *recycling_act) = 0; + + /// Cleanup hint and reset @a act_holder to zero if @a act_holder != 0. + virtual int cleanup_hint (const void *recycling_act, + void **act_holder = 0) = 0; + +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" + +#endif /*ACE_CONNECTION_RECYCLING_STRATEGY*/ diff --git a/ACE/ace/Connector.cpp b/ACE/ace/Connector.cpp new file mode 100644 index 00000000000..112fbca4003 --- /dev/null +++ b/ACE/ace/Connector.cpp @@ -0,0 +1,964 @@ +// $Id$ + +#ifndef ACE_CONNECTOR_CPP +#define ACE_CONNECTOR_CPP + +#include "ace/Connector.h" +#include "ace/ACE.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_string.h" +#include "ace/os_include/os_fcntl.h" /* Has ACE_NONBLOCK */ + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_Connector) + +template +ACE_NonBlocking_Connect_Handler::ACE_NonBlocking_Connect_Handler +(ACE_Connector_Base &connector, + SVC_HANDLER *sh, + long id) + : connector_ (connector) + , svc_handler_ (sh) + , timer_id_ (id) +{ + ACE_TRACE ("ACE_NonBlocking_Connect_Handler::ACE_NonBlocking_Connect_Handler"); + + this->reference_counting_policy ().value + (ACE_Event_Handler::Reference_Counting_Policy::ENABLED); +} + +template SVC_HANDLER * +ACE_NonBlocking_Connect_Handler::svc_handler (void) +{ + ACE_TRACE ("ACE_NonBlocking_Connect_Handler::svc_handler"); + return this->svc_handler_; +} + +template long +ACE_NonBlocking_Connect_Handler::timer_id (void) +{ + ACE_TRACE ("ACE_NonBlocking_Connect_Handler::timer_id"); + return this->timer_id_; +} + +template void +ACE_NonBlocking_Connect_Handler::timer_id (long id) +{ + ACE_TRACE ("ACE_NonBlocking_Connect_Handler::timer_id"); + this->timer_id_ = id; +} + +template void +ACE_NonBlocking_Connect_Handler::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_NonBlocking_Connect_Handler::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("svc_handler_ = %x"), this->svc_handler_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\ntimer_id_ = %d"), this->timer_id_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +template bool +ACE_NonBlocking_Connect_Handler::close (SVC_HANDLER *&sh) +{ + // Make sure that we haven't already initialized the Svc_Handler. + if (!this->svc_handler_) + return false; + + { + // Exclusive access to the Reactor. + ACE_GUARD_RETURN (ACE_Lock, + ace_mon, + this->reactor ()->lock (), + 0); + + // Double check. + if (!this->svc_handler_) + return false; + + // Remember the Svc_Handler. + sh = this->svc_handler_; + ACE_HANDLE h = sh->get_handle (); + this->svc_handler_ = 0; + + // Remove this handle from the set of non-blocking handles + // in the Connector. + this->connector_.non_blocking_handles ().remove (h); + + // Cancel timer. + if (this->reactor ()->cancel_timer (this->timer_id (), + 0, + 0) == -1) + return false; + + // Remove from Reactor. + if (this->reactor ()->remove_handler ( + h, + ACE_Event_Handler::ALL_EVENTS_MASK) == -1) + return false; + } + + return true; +} + + +template int +ACE_NonBlocking_Connect_Handler::handle_timeout +(const ACE_Time_Value &tv, + const void *arg) +{ + // This method is called if a connection times out before completing. + ACE_TRACE ("ACE_NonBlocking_Connect_Handler::handle_timeout"); + + SVC_HANDLER *svc_handler = 0; + int retval = this->close (svc_handler) ? 0 : -1; + + // Forward to the SVC_HANDLER the that was passed in as a + // magic cookie during ACE_Connector::connect(). This gives the + // SVC_HANDLER an opportunity to take corrective action (e.g., wait + // a few milliseconds and try to reconnect again. + if (svc_handler != 0 && svc_handler->handle_timeout (tv, arg) == -1) + svc_handler->handle_close (svc_handler->get_handle (), + ACE_Event_Handler::TIMER_MASK); + + return retval; +} + + +template int +ACE_NonBlocking_Connect_Handler::handle_input (ACE_HANDLE) +{ + // Called when a failure occurs during asynchronous connection + // establishment. + ACE_TRACE ("ACE_NonBlocking_Connect_Handler::handle_input"); + + SVC_HANDLER *svc_handler = 0; + int const retval = this->close (svc_handler) ? 0 : -1; + + // Close Svc_Handler. + if (svc_handler != 0) + svc_handler->close (0); + + return retval; +} + +template int +ACE_NonBlocking_Connect_Handler::handle_output (ACE_HANDLE handle) +{ + // Called when a connection is establishment asynchronous. + ACE_TRACE ("ACE_NonBlocking_Connect_Handler::handle_output"); + + // Grab the connector ref before smashing ourselves in close(). + ACE_Connector_Base &connector = this->connector_; + SVC_HANDLER *svc_handler = 0; + int const retval = this->close (svc_handler) ? 0 : -1; + + if (svc_handler != 0) + connector.initialize_svc_handler (handle, svc_handler); + + return retval; +} + +template int +ACE_NonBlocking_Connect_Handler::handle_exception (ACE_HANDLE h) +{ + // On Win32, the except mask must also be set for asynchronous + // connects. + ACE_TRACE ("ACE_NonBlocking_Connect_Handler::handle_exception"); + return this->handle_output (h); +} + +template int +ACE_NonBlocking_Connect_Handler::resume_handler (void) +{ + return ACE_Event_Handler::ACE_EVENT_HANDLER_NOT_RESUMED; +} + +template void +ACE_Connector::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Connector::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nflags_ = %d"), this->flags_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +template int +ACE_Connector::make_svc_handler (SVC_HANDLER *&sh) +{ + ACE_TRACE ("ACE_Connector::make_svc_handler"); + + if (sh == 0) + ACE_NEW_RETURN (sh, + SVC_HANDLER, + -1); + + // Set the reactor of the newly created to the same + // reactor that this is using. + sh->reactor (this->reactor ()); + return 0; +} + +template int +ACE_Connector::activate_svc_handler (SVC_HANDLER *svc_handler) +{ + ACE_TRACE ("ACE_Connector::activate_svc_handler"); + // No errors initially + int error = 0; + + // See if we should enable non-blocking I/O on the 's + // peer. + if (ACE_BIT_ENABLED (this->flags_, ACE_NONBLOCK) != 0) + { + if (svc_handler->peer ().enable (ACE_NONBLOCK) == -1) + error = 1; + } + // Otherwise, make sure it's disabled by default. + else if (svc_handler->peer ().disable (ACE_NONBLOCK) == -1) + error = 1; + + // We are connected now, so try to open things up. + if (error || svc_handler->open ((void *) this) == -1) + { + // Make sure to close down the to avoid descriptor + // leaks. + svc_handler->close (0); + return -1; + } + else + return 0; +} + +template ACE_PEER_CONNECTOR & +ACE_Connector::connector (void) const +{ + return const_cast (this->connector_); +} + +template int +ACE_Connector::connect_svc_handler +(SVC_HANDLER *&svc_handler, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms) +{ + ACE_TRACE ("ACE_Connector::connect_svc_handler"); + + return this->connector_.connect (svc_handler->peer (), + remote_addr, + timeout, + local_addr, + reuse_addr, + flags, + perms); +} + +template int +ACE_Connector::connect_svc_handler +(SVC_HANDLER *&svc_handler, + SVC_HANDLER *&sh_copy, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms) +{ + ACE_TRACE ("ACE_Connector::connect_svc_handler"); + + sh_copy = svc_handler; + return this->connector_.connect (svc_handler->peer (), + remote_addr, + timeout, + local_addr, + reuse_addr, + flags, + perms); +} + +template int +ACE_Connector::open (ACE_Reactor *r, int flags) +{ + ACE_TRACE ("ACE_Connector::open"); + this->reactor (r); + this->flags_ = flags; + return 0; +} + +template +ACE_Connector::ACE_Connector (ACE_Reactor *r, + int flags) +{ + ACE_TRACE ("ACE_Connector::ACE_Connector"); + (void) this->open (r, flags); +} + +template int +ACE_Connector::connect +(SVC_HANDLER *&sh, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + const ACE_Synch_Options &synch_options, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms) +{ + // Initiate connection to peer. + return this->connect_i (sh, + 0, + remote_addr, + synch_options, + local_addr, + reuse_addr, + flags, + perms); +} + +template int +ACE_Connector::connect +(SVC_HANDLER *&sh, + SVC_HANDLER *&sh_copy, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + const ACE_Synch_Options &synch_options, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms) +{ + // Initiate connection to peer. + return this->connect_i (sh, + &sh_copy, + remote_addr, + synch_options, + local_addr, + reuse_addr, + flags, + perms); +} + +template int +ACE_Connector::connect_i +(SVC_HANDLER *&sh, + SVC_HANDLER **sh_copy, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + const ACE_Synch_Options &synch_options, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms) +{ + ACE_TRACE ("ACE_Connector::connect_i"); + + // If the user hasn't supplied us with a we'll use the + // factory method to create one. Otherwise, things will remain as + // they are... + if (this->make_svc_handler (sh) == -1) + return -1; + + ACE_Time_Value *timeout = 0; + int const use_reactor = synch_options[ACE_Synch_Options::USE_REACTOR]; + + if (use_reactor) + timeout = const_cast (&ACE_Time_Value::zero); + else + timeout = const_cast (synch_options.time_value ()); + + int result; + if (sh_copy == 0) + result = this->connect_svc_handler (sh, + remote_addr, + timeout, + local_addr, + reuse_addr, + flags, + perms); + else + result = this->connect_svc_handler (sh, + *sh_copy, + remote_addr, + timeout, + local_addr, + reuse_addr, + flags, + perms); + + // Activate immediately if we are connected. + if (result != -1) + return this->activate_svc_handler (sh); + + // Delegate to connection strategy. + if (use_reactor && ACE_OS::last_error () == EWOULDBLOCK) + { + // If the connection hasn't completed and we are using + // non-blocking semantics then register + // ACE_NonBlocking_Connect_Handler with the ACE_Reactor so that + // it will call us back when the connection is complete or we + // timeout, whichever comes first... + int result; + + if (sh_copy == 0) + result = this->nonblocking_connect (sh, synch_options); + else + result = this->nonblocking_connect (*sh_copy, synch_options); + + // If for some reason the call failed, then + // will be set to the new error. If the call succeeds, however, + // we need to make sure that remains set to + // . + if (result == 0) + errno = EWOULDBLOCK; + } + else + { + // Save/restore errno. + ACE_Errno_Guard error (errno); + // Make sure to close down the service handler to avoid handle + // leaks. + if (sh_copy == 0) + { + if (sh) + sh->close (0); + } + else if (*sh_copy) + (*sh_copy)->close (0); + } + + return -1; +} + +template int +ACE_Connector::connect_n +(size_t n, + SVC_HANDLER *sh[], + ACE_PEER_CONNECTOR_ADDR remote_addrs[], + ACE_TCHAR *failed_svc_handlers, + const ACE_Synch_Options &synch_options) +{ + int result = 0; + + for (size_t i = 0; i < n; i++) + { + if (this->connect (sh[i], remote_addrs[i], synch_options) == -1 + && !(synch_options[ACE_Synch_Options::USE_REACTOR] + && errno == EWOULDBLOCK)) + { + result = -1; + if (failed_svc_handlers != 0) + // Mark this entry as having failed. + failed_svc_handlers[i] = 1; + } + else if (failed_svc_handlers != 0) + // Mark this entry as having succeeded. + failed_svc_handlers[i] = 0; + } + + return result; +} + +// Cancel a that was started asynchronously. +template int +ACE_Connector::cancel (SVC_HANDLER *sh) +{ + ACE_TRACE ("ACE_Connector::cancel"); + + ACE_Event_Handler *handler = + this->reactor ()->find_handler (sh->get_handle ()); + + if (handler == 0) + return -1; + + // find_handler() increments handler's refcount; ensure we decrement it. + ACE_Event_Handler_var safe_handler (handler); + + NBCH *nbch = + dynamic_cast (handler); + + if (nbch == 0) + return -1; + + SVC_HANDLER *tmp_sh = 0; + + if (nbch->close (tmp_sh) == false) + return -1; + + return 0; +} + +template int +ACE_Connector::nonblocking_connect +(SVC_HANDLER *sh, + const ACE_Synch_Options &synch_options) +{ + ACE_TRACE ("ACE_Connector::nonblocking_connect"); + + // Must have a valid Reactor for non-blocking connects to work. + if (this->reactor () == 0) + return -1; + + // Register the pending SVC_HANDLER so that it can be activated + // later on when the connection completes. + + ACE_HANDLE handle = sh->get_handle (); + long timer_id = -1; + ACE_Time_Value *tv = 0; + NBCH *nbch = 0; + + ACE_NEW_RETURN (nbch, + NBCH (*this, + sh, + -1), + -1); + + ACE_Event_Handler_var safe_nbch (nbch); + + // Exclusive access to the Reactor. + ACE_GUARD_RETURN (ACE_Lock, ace_mon, this->reactor ()->lock (), -1); + + // Register handle with the reactor for connection events. + ACE_Reactor_Mask mask = ACE_Event_Handler::CONNECT_MASK; + if (this->reactor ()->register_handler (handle, + nbch, + mask) == -1) + goto reactor_registration_failure; + + // Add handle to non-blocking handle set. + this->non_blocking_handles ().insert (handle); + + // If we're starting connection under timer control then we need to + // schedule a timeout with the ACE_Reactor. + tv = const_cast (synch_options.time_value ()); + if (tv != 0) + { + timer_id = + this->reactor ()->schedule_timer (nbch, + synch_options.arg (), + *tv); + if (timer_id == -1) + goto timer_registration_failure; + + // Remember timer id. + nbch->timer_id (timer_id); + } + + return 0; + + // Undo previous actions using the ol' "goto label and fallthru" + // trick... + timer_registration_failure: + + // Remove from Reactor. + this->reactor ()->remove_handler (handle, mask); + + // Remove handle from the set of non-blocking handles. + this->non_blocking_handles ().remove (handle); + + /* FALLTHRU */ + + reactor_registration_failure: + // Close the svc_handler + + sh->close (0); + + return -1; +} + +template +ACE_Connector::~ACE_Connector (void) +{ + ACE_TRACE ("ACE_Connector::~ACE_Connector"); + + this->close (); +} + +template void +ACE_Connector::initialize_svc_handler +(ACE_HANDLE handle, + SVC_HANDLER *svc_handler) +{ + // Try to find out if the reactor uses event associations for the + // handles it waits on. If so we need to reset it. + int reset_new_handle = + this->reactor ()->uses_event_associations (); + + if (reset_new_handle) + this->connector_.reset_new_handle (handle); + + // Transfer ownership of the ACE_HANDLE to the SVC_HANDLER. + svc_handler->set_handle (handle); + + ACE_PEER_CONNECTOR_ADDR raddr; + + // Check to see if we're connected. + if (svc_handler->peer ().get_remote_addr (raddr) != -1) + this->activate_svc_handler (svc_handler); + else // Somethings gone wrong, so close down... + { +#if defined (ACE_WIN32) + // Win32 (at least prior to Windows 2000) has a timing problem. + // If you check to see if the connection has completed too fast, + // it will fail - so wait 35 milliseconds to let it catch up. + ACE_Time_Value tv (0, ACE_NON_BLOCKING_BUG_DELAY); + ACE_OS::sleep (tv); + if (svc_handler->peer ().get_remote_addr (raddr) != -1) + this->activate_svc_handler (svc_handler); + else // do the svc handler close below... +#endif /* ACE_WIN32 */ + svc_handler->close (0); + } +} + +template void +ACE_Connector::reactor (ACE_Reactor *reactor) +{ + this->reactor_ = reactor; +} + +template ACE_Reactor * +ACE_Connector::reactor (void) const +{ + return this->reactor_; +} + +template ACE_Unbounded_Set & +ACE_Connector::non_blocking_handles (void) +{ + return this->non_blocking_handles_; +} + +template int +ACE_Connector::close (void) +{ + // If there are no non-blocking handle pending, return immediately. + if (this->non_blocking_handles ().size () == 0) + return 0; + + // Exclusive access to the Reactor. + ACE_GUARD_RETURN (ACE_Lock, ace_mon, this->reactor ()->lock (), -1); + + // Go through all the non-blocking handles. It is necessary to + // create a new iterator each time because we remove from the handle + // set when we cancel the Svc_Handler. + ACE_HANDLE *handle = 0; + while (1) + { + ACE_Unbounded_Set_Iterator + iterator (this->non_blocking_handles ()); + if (!iterator.next (handle)) + break; + + ACE_Event_Handler *handler = + this->reactor ()->find_handler (*handle); + if (handler == 0) + { + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%t: Connector::close h %d, no handler\n"), + *handle)); + // Remove handle from the set of non-blocking handles. + this->non_blocking_handles ().remove (*handle); + continue; + } + + // find_handler() incremented handler's refcount; ensure it's decremented + ACE_Event_Handler_var safe_handler (handler); + NBCH *nbch = dynamic_cast (handler); + if (nbch == 0) + { + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%t: Connector::close h %d handler %@ ") + ACE_TEXT ("not a legit handler\n"), + *handle, + handler)); + // Remove handle from the set of non-blocking handles. + this->non_blocking_handles ().remove (*handle); + continue; + } + SVC_HANDLER *svc_handler = nbch->svc_handler (); + + // Cancel the non-blocking connection. + this->cancel (svc_handler); + + // Close the associated Svc_Handler. + svc_handler->close (0); + } + + return 0; +} + +template int +ACE_Connector::fini (void) +{ + ACE_TRACE ("ACE_Connector::fini"); + + return this->close (); +} + +// Hook called by the explicit dynamic linking facility. + +template int +ACE_Connector::init (int, ACE_TCHAR *[]) +{ + ACE_TRACE ("ACE_Connector::init"); + return -1; +} + +template int +ACE_Connector::suspend (void) +{ + ACE_TRACE ("ACE_Connector::suspend"); + return -1; +} + +template int +ACE_Connector::resume (void) +{ + ACE_TRACE ("ACE_Connector::resume"); + return -1; +} + +template int +ACE_Connector::info (ACE_TCHAR **strp, size_t length) const +{ + ACE_TRACE ("ACE_Connector::info"); + ACE_TCHAR buf[BUFSIZ]; + + ACE_OS::sprintf (buf, + ACE_TEXT ("%s\t %s"), + ACE_TEXT ("ACE_Connector"), + ACE_TEXT ("# connector factory\n")); + + if (*strp == 0 && (*strp = ACE_OS::strdup (buf)) == 0) + return -1; + else + ACE_OS::strsncpy (*strp, buf, length); + return static_cast (ACE_OS::strlen (buf)); +} + +template int +ACE_Strategy_Connector::open (ACE_Reactor *r, + int flags) +{ + ACE_TRACE ("ACE_Strategy_Connector::open"); + return this->open (r, 0, 0, 0, flags); +} + +template int +ACE_Strategy_Connector::open +(ACE_Reactor *r, + ACE_Creation_Strategy *cre_s, + ACE_Connect_Strategy *conn_s, + ACE_Concurrency_Strategy *con_s, + int flags) +{ + ACE_TRACE ("ACE_Strategy_Connector::open"); + + this->reactor (r); + + // @@ Not implemented yet. + // this->flags_ = flags; + ACE_UNUSED_ARG (flags); + + // Initialize the creation strategy. + + // First we decide if we need to clean up. + if (this->creation_strategy_ != 0 && + this->delete_creation_strategy_ && + cre_s != 0) + { + delete this->creation_strategy_; + this->creation_strategy_ = 0; + this->delete_creation_strategy_ = false; + } + + if (cre_s != 0) + this->creation_strategy_ = cre_s; + else if (this->creation_strategy_ == 0) + { + ACE_NEW_RETURN (this->creation_strategy_, + CREATION_STRATEGY, + -1); + this->delete_creation_strategy_ = true; + } + + + // Initialize the accept strategy. + + if (this->connect_strategy_ != 0 && + this->delete_connect_strategy_ && + conn_s != 0) + { + delete this->connect_strategy_; + this->connect_strategy_ = 0; + this->delete_connect_strategy_ = false; + } + + if (conn_s != 0) + this->connect_strategy_ = conn_s; + else if (this->connect_strategy_ == 0) + { + ACE_NEW_RETURN (this->connect_strategy_, + CONNECT_STRATEGY, + -1); + this->delete_connect_strategy_ = true; + } + + // Initialize the concurrency strategy. + + if (this->concurrency_strategy_ != 0 && + this->delete_concurrency_strategy_ && + con_s != 0) + { + delete this->concurrency_strategy_; + this->concurrency_strategy_ = 0; + this->delete_concurrency_strategy_ = false; + } + + if (con_s != 0) + this->concurrency_strategy_ = con_s; + else if (this->concurrency_strategy_ == 0) + { + ACE_NEW_RETURN (this->concurrency_strategy_, + CONCURRENCY_STRATEGY, + -1); + this->delete_concurrency_strategy_ = true; + } + + return 0; +} + +template +ACE_Strategy_Connector::ACE_Strategy_Connector +(ACE_Reactor *reactor, + ACE_Creation_Strategy *cre_s, + ACE_Connect_Strategy *conn_s, + ACE_Concurrency_Strategy *con_s, + int flags) + : creation_strategy_ (0), + delete_creation_strategy_ (false), + connect_strategy_ (0), + delete_connect_strategy_ (false), + concurrency_strategy_ (0), + delete_concurrency_strategy_ (false) +{ + ACE_TRACE ("ACE_Connector::ACE_Strategy_Connector"); + + if (this->open (reactor, cre_s, conn_s, con_s, flags) == -1) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("ACE_Strategy_Connector::ACE_Strategy_Connector"))); +} + +template +ACE_Strategy_Connector::~ACE_Strategy_Connector (void) +{ + ACE_TRACE ("ACE_Strategy_Connector::~ACE_Strategy_Connector"); + + // Close down + this->close (); +} + +template int +ACE_Strategy_Connector::close (void) +{ + if (this->delete_creation_strategy_) + delete this->creation_strategy_; + this->delete_creation_strategy_ = false; + this->creation_strategy_ = 0; + + if (this->delete_connect_strategy_) + delete this->connect_strategy_; + this->delete_connect_strategy_ = false; + this->connect_strategy_ = 0; + + if (this->delete_concurrency_strategy_) + delete this->concurrency_strategy_; + this->delete_concurrency_strategy_ = false; + this->concurrency_strategy_ = 0; + + return SUPER::close (); +} + +template int +ACE_Strategy_Connector::make_svc_handler (SVC_HANDLER *&sh) +{ + return this->creation_strategy_->make_svc_handler (sh); +} + +template int +ACE_Strategy_Connector::connect_svc_handler +(SVC_HANDLER *&sh, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms) +{ + return this->connect_strategy_->connect_svc_handler (sh, + remote_addr, + timeout, + local_addr, + reuse_addr, + flags, + perms); +} + +template int +ACE_Strategy_Connector::connect_svc_handler +(SVC_HANDLER *&sh, + SVC_HANDLER *&sh_copy, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms) +{ + return this->connect_strategy_->connect_svc_handler (sh, + sh_copy, + remote_addr, + timeout, + local_addr, + reuse_addr, + flags, + perms); +} + +template int +ACE_Strategy_Connector::activate_svc_handler (SVC_HANDLER *svc_handler) +{ + return this->concurrency_strategy_->activate_svc_handler (svc_handler, this); +} + +template ACE_Creation_Strategy * +ACE_Strategy_Connector::creation_strategy (void) const +{ + return this->creation_strategy_; +} + +template ACE_Connect_Strategy * +ACE_Strategy_Connector::connect_strategy (void) const +{ + return this->connect_strategy_; +} + +template ACE_Concurrency_Strategy * +ACE_Strategy_Connector::concurrency_strategy (void) const +{ + return this->concurrency_strategy_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_CONNECTOR_C */ diff --git a/ACE/ace/Connector.h b/ACE/ace/Connector.h new file mode 100644 index 00000000000..0b92d55efcd --- /dev/null +++ b/ACE/ace/Connector.h @@ -0,0 +1,563 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Connector.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_CONNECTOR_H +#define ACE_CONNECTOR_H + +#include /**/ "ace/pre.h" + +#include "ace/Service_Object.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Strategies_T.h" +#include "ace/Synch_Options.h" +#include "ace/Unbounded_Set.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Connector_Base + * + * @brief This base interface allows ACE_NonBlocking_Connect_Handler + * to only care about the SVC_HANDLER template parameter of the + * ACE_Connector. Otherwise, ACE_NonBlocking_Connect_Handler would + * have to be configured with all the template parameters that + * ACE_Connector is configured with. + */ +template +class ACE_Connector_Base +{ +public: + + virtual ~ACE_Connector_Base (void) {} + + /// Initialize the Svc_Handler. + virtual void initialize_svc_handler (ACE_HANDLE handle, + SVC_HANDLER *svc_handler) = 0; + + /// Return the handle set representing the non-blocking connects in + /// progress. + virtual ACE_Unbounded_Set &non_blocking_handles (void) = 0; +}; + +/** + * @class ACE_NonBlocking_Connect_Handler + * + * @brief Performs non-blocking connects on behalf of the Connector. + */ +template +class ACE_NonBlocking_Connect_Handler : public ACE_Event_Handler +{ +public: + + /// Constructor. + ACE_NonBlocking_Connect_Handler (ACE_Connector_Base &connector, + SVC_HANDLER *, + long timer_id); + + /// Close up and return underlying SVC_HANDLER through @c sh. + /** + * If the return value is true the close was performed succesfully, + * implying that this object was removed from the reactor and thereby + * (by means of reference counting decremented to 0) deleted. + * If the return value is false, the close was not successful. + * The @c sh does not have any connection to the return + * value. The argument will return a valid svc_handler object if a + * valid one exists within the object. Returning a valid svc_handler + * pointer also invalidates the svc_handler contained in this + * object. + */ + bool close (SVC_HANDLER *&sh); + + /// Get SVC_HANDLER. + SVC_HANDLER *svc_handler (void); + + /// Get handle. + ACE_HANDLE handle (void); + + /// Set handle. + void handle (ACE_HANDLE); + + /// Get timer id. + long timer_id (void); + + /// Set timer id. + void timer_id (long timer_id); + + /// Called by ACE_Reactor when asynchronous connections fail. + virtual int handle_input (ACE_HANDLE); + + /// Called by ACE_Reactor when asynchronous connections succeed. + virtual int handle_output (ACE_HANDLE); + + /// Called by ACE_Reactor when asynchronous connections suceeds (on + /// some platforms only). + virtual int handle_exception (ACE_HANDLE fd); + + /// This method is called if a connection times out before + /// completing. + virtual int handle_timeout (const ACE_Time_Value &tv, const void *arg); + + /// Should Reactor resume us if we have been suspended before the upcall? + virtual int resume_handler (void); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + + /// Connector base. + ACE_Connector_Base &connector_; + + /// Associated SVC_HANDLER. + SVC_HANDLER *svc_handler_; + + /// Associated timer id. + long timer_id_; +}; + +/** + * @class ACE_Connector + * + * @brief Generic factory for actively connecting clients and creating + * service handlers (SVC_HANDLERs). + * + * Implements the strategy for actively establishing connections with + * clients. An ACE_Connector is parameterized by concrete types that + * conform to the interfaces of PEER_CONNECTOR and SVC_HANDLER. The + * PEER_CONNECTOR is instantiated with a transport mechanism that + * actively establishes connections. The SVC_HANDLER is instantiated + * with a concrete type that performs the application-specific + * service. Both blocking and non-blocking connects are supported. + * Further, non-blocking connects support timeouts. + */ +template +class ACE_Connector : public ACE_Connector_Base, public ACE_Service_Object +{ +public: + + // Useful STL-style traits. + typedef typename SVC_HANDLER::addr_type addr_type; + typedef ACE_PEER_CONNECTOR connector_type; + typedef SVC_HANDLER handler_type; + typedef typename SVC_HANDLER::stream_type stream_type; + typedef typename ACE_PEER_CONNECTOR::PEER_ADDR peer_addr_type; + typedef ACE_PEER_CONNECTOR_ADDR ACE_PEER_ADDR_TYPEDEF; + + /** + * Initialize a connector. @a flags indicates how SVC_HANDLER's + * should be initialized prior to being activated. Right now, the + * only flag that is processed is ACE_NONBLOCK, which enabled + * non-blocking I/O on the SVC_HANDLER when it is opened. + */ + ACE_Connector (ACE_Reactor *r = ACE_Reactor::instance (), + int flags = 0); + + /** + * Initialize a connector. @a flags indicates how SVC_HANDLER's + * should be initialized prior to being activated. Right now, the + * only flag that is processed is ACE_NONBLOCK, which enabled + * non-blocking I/O on the SVC_HANDLER when it is opened. + */ + virtual int open (ACE_Reactor *r = ACE_Reactor::instance (), + int flags = 0); + + /// Shutdown a connector and release resources. + virtual ~ACE_Connector (void); + + // = Connection establishment methods. + + /** + * Initiate connection of @a svc_handler to peer at @a remote_addr + * using @a synch_options. If the caller wants to designate the + * selected @a local_addr they can (and can also insist that the + * @a local_addr be reused by passing a value @a reuse_addr == + * 1). @a flags and @a perms can be used to pass any flags that are + * needed to perform specific operations such as opening a file + * within connect with certain permissions. If the connection fails + * the hook on the will be called + * automatically to prevent resource leaks. + */ + virtual int connect (SVC_HANDLER *&svc_handler, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + const ACE_Synch_Options &synch_options = ACE_Synch_Options::defaults, + const ACE_PEER_CONNECTOR_ADDR &local_addr + = (peer_addr_type &) ACE_PEER_CONNECTOR_ADDR_ANY, + int reuse_addr = 0, + int flags = O_RDWR, + int perms = 0); + + /** + * This is a variation on the previous method. On cached + * connectors the @a svc_handler_hint variable can be used as a hint + * for future lookups. Since this variable is modified in the + * context of the internal cache its use is thread-safe. But the + * actual svc_handler for the current connection is returned in the + * second parameter @a svc_handler. If the connection fails the + * hook on the will be called automatically to + * prevent resource leaks. + */ + virtual int connect (SVC_HANDLER *&svc_handler_hint, + SVC_HANDLER *&svc_handler, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + const ACE_Synch_Options &synch_options = ACE_Synch_Options::defaults, + const ACE_PEER_CONNECTOR_ADDR &local_addr + = (peer_addr_type &) ACE_PEER_CONNECTOR_ADDR_ANY, + int reuse_addr = 0, + int flags = O_RDWR, + int perms = 0); + + /** + * Initiate connection of @a n @a svc_handlers to peers at + * @a remote_addrs using @a synch_options. Returns -1 if failure + * occurs and 0 otherwise. If @a failed_svc_handlers is non-NULL, a + * 1 is placed in the corresponding index of @a failed_svc_handlers + * for each that failed to connect, else a 0 is + * placed in that index. + */ + virtual int connect_n (size_t n, + SVC_HANDLER *svc_handlers[], + ACE_PEER_CONNECTOR_ADDR remote_addrs[], + ACE_TCHAR *failed_svc_handlers = 0, + const ACE_Synch_Options &synch_options = + ACE_Synch_Options::defaults); + + /** + * Cancel the @a svc_handler that was started asynchronously. Note that + * this is the only case when the Connector does not actively close + * the @a svc_handler. It is left up to the caller of to + * decide the fate of the @a svc_handler. + */ + virtual int cancel (SVC_HANDLER *svc_handler); + + /// Close down the Connector. All pending non-blocking connects are + /// canceled and the corresponding svc_handler is closed. + virtual int close (void); + + /// Return the underlying PEER_CONNECTOR object. + virtual ACE_PEER_CONNECTOR &connector (void) const; + + /// Initialize Svc_Handler. + virtual void initialize_svc_handler (ACE_HANDLE handle, + SVC_HANDLER *svc_handler); + + /// Set Reactor. + virtual void reactor (ACE_Reactor *reactor); + + /// Get Reactor. + virtual ACE_Reactor *reactor (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + // = Helpful typedefs. + typedef ACE_NonBlocking_Connect_Handler NBCH; + + // = The following two methods define the Connector's strategies for + // creating, connecting, and activating SVC_HANDLER's, respectively. + + /** + * Bridge method for creating a SVC_HANDLER. The default is to + * create a new SVC_HANDLER only if @a sh == 0, else @a sh is + * unchanged. However, subclasses can override this policy to + * perform SVC_HANDLER creation in any way that they like (such as + * creating subclass instances of SVC_HANDLER, using a singleton, + * dynamically linking the handler, etc.). Returns -1 if failure, + * else 0. + */ + virtual int make_svc_handler (SVC_HANDLER *&sh); + + /** + * Bridge method for connecting the @a svc_handler to the + * @a remote_addr. The default behavior delegates to the + * . + */ + virtual int connect_svc_handler (SVC_HANDLER *&svc_handler, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms); + virtual int connect_svc_handler (SVC_HANDLER *&svc_handler, + SVC_HANDLER *&sh_copy, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms); + + /** + * Bridge method for activating a @a svc_handler with the appropriate + * concurrency strategy. The default behavior of this method is to + * activate the SVC_HANDLER by calling its method (which + * allows the SVC_HANDLER to define its own concurrency strategy). + * However, subclasses can override this strategy to do more + * sophisticated concurrency activations (such as creating the + * SVC_HANDLER as an "active object" via multi-threading or + * multi-processing). + */ + virtual int activate_svc_handler (SVC_HANDLER *svc_handler); + + /// Creates and registers ACE_NonBlocking_Connect_Handler. + int nonblocking_connect (SVC_HANDLER *, + const ACE_Synch_Options &); + + /// Implementation of the connect methods. + virtual int connect_i (SVC_HANDLER *&svc_handler, + SVC_HANDLER **sh_copy, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + const ACE_Synch_Options &synch_options, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms); + + /// Return the handle set representing the non-blocking connects in + /// progress. + ACE_Unbounded_Set &non_blocking_handles (void); + + // = Dynamic linking hooks. + /// Default version does no work and returns -1. Must be overloaded + /// by application developer to do anything meaningful. + virtual int init (int argc, ACE_TCHAR *argv[]); + + /// Calls handle_close() to shutdown the Connector gracefully. + virtual int fini (void); + + /// Default version returns address info in @a buf. + virtual int info (ACE_TCHAR **strp, size_t length) const; + + // = Service management hooks. + /// Default version does no work and returns -1. Must be overloaded + /// by application developer to do anything meaningful. + virtual int suspend (void); + + /// Default version does no work and returns -1. Must be overloaded + /// by application developer to do anything meaningful. + virtual int resume (void); + +private: + /// This is the peer connector factory. + ACE_PEER_CONNECTOR connector_; + + /** + * Flags that indicate how SVC_HANDLER's should be initialized + * prior to being activated. Right now, the only flag that is + * processed is ACE_NONBLOCK, which enabled non-blocking I/O on + * the SVC_HANDLER when it is opened. + */ + int flags_; + + /// Pointer to the Reactor. + ACE_Reactor *reactor_; + + /// Handle set representing the non-blocking connects in progress. + ACE_Unbounded_Set non_blocking_handles_; + +}; + +/** + * @class ACE_Strategy_Connector + * + * @brief Abstract factory for creating a service handler + * (SVC_HANDLER), connecting the SVC_HANDLER, and activating the + * SVC_HANDLER. + * + * Implements a flexible and extensible set of strategies for + * actively establishing connections with clients. There are + * three main strategies: (1) creating a SVC_HANDLER, (2) + * actively initiating a new connection from the client, + * and (3) activating the SVC_HANDLER with a + * particular concurrency mechanism after the connection is established. + */ +template +class ACE_Strategy_Connector + : public ACE_Connector +{ +public: + + // Useful STL-style traits. + typedef ACE_Creation_Strategy + creation_strategy_type; + typedef ACE_Connect_Strategy + connect_strategy_type; + typedef ACE_Concurrency_Strategy + concurrency_strategy_type; + typedef ACE_Connector + base_type; + + // = Define some useful (old style) traits. + typedef ACE_Creation_Strategy + CREATION_STRATEGY; + typedef ACE_Connect_Strategy + CONNECT_STRATEGY; + typedef ACE_Concurrency_Strategy + CONCURRENCY_STRATEGY; + typedef ACE_Connector + SUPER; + + /** + * Initialize a connector. @a flags indicates how 's + * should be initialized prior to being activated. Right now, the + * only flag that is processed is ACE_NONBLOCK, which enabled + * non-blocking I/O on the SVC_HANDLER when it is opened. + */ + ACE_Strategy_Connector (ACE_Reactor *r = ACE_Reactor::instance (), + ACE_Creation_Strategy * = 0, + ACE_Connect_Strategy * = 0, + ACE_Concurrency_Strategy * = 0, + int flags = 0); + + /** + * Initialize a connector. @a flags indicates how SVC_HANDLER's + * should be initialized prior to being activated. Right now, the + * only flag that is processed is ACE_NONBLOCK, which enabled + * non-blocking I/O on the SVC_HANDLER when it is opened. + * Default strategies would be created and used. + */ + virtual int open (ACE_Reactor *r, + int flags); + + /** + * Initialize a connector. @a flags indicates how SVC_HANDLER's + * should be initialized prior to being activated. Right now, the + * only flag that is processed is ACE_NONBLOCK, which enabled + * non-blocking I/O on the SVC_HANDLER when it is opened. + */ + virtual int open (ACE_Reactor *r = ACE_Reactor::instance (), + ACE_Creation_Strategy * = 0, + ACE_Connect_Strategy * = 0, + ACE_Concurrency_Strategy * = 0, + int flags = 0); + + /// Shutdown a connector and release resources. + virtual ~ACE_Strategy_Connector (void); + + /// Close down the Connector + virtual int close (void); + + // = Strategies accessors + virtual ACE_Creation_Strategy *creation_strategy (void) const; + virtual ACE_Connect_Strategy *connect_strategy (void) const; + virtual ACE_Concurrency_Strategy *concurrency_strategy (void) const; + +protected: + // = The following three methods define the 's strategies + // for creating, connecting, and activating SVC_HANDLER's, + // respectively. + + /** + * Bridge method for creating a SVC_HANDLER. The strategy for + * creating a SVC_HANDLER are configured into the Connector via + * it's . The default is to create a new + * SVC_HANDLER only if @a sh == 0, else @a sh is unchanged. + * However, subclasses can override this policy to perform + * SVC_HANDLER creation in any way that they like (such as + * creating subclass instances of SVC_HANDLER, using a singleton, + * dynamically linking the handler, etc.). Returns -1 if failure, + * else 0. + */ + virtual int make_svc_handler (SVC_HANDLER *&sh); + + /** + * Bridge method for connecting the new connection into the + * SVC_HANDLER. The default behavior delegates to the + * in the . + */ + virtual int connect_svc_handler (SVC_HANDLER *&sh, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms); + + /** + * Bridge method for connecting the new connection into the + * SVC_HANDLER. The default behavior delegates to the + * in the . + * @a sh_copy is used to obtain a copy of the @a sh pointer, but that + * can be kept in the stack; the motivation is a bit too long to + * include here, but basically we want to modify @a sh safely, using + * the internal locks in the Connect_Strategy, while saving a TSS + * copy in @a sh_copy, usually located in the stack. + */ + virtual int connect_svc_handler (SVC_HANDLER *&sh, + SVC_HANDLER *&sh_copy, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms); + + /** + * Bridge method for activating a SVC_HANDLER with the appropriate + * concurrency strategy. The default behavior of this method is to + * activate the SVC_HANDLER by calling its method (which + * allows the SVC_HANDLER to define its own concurrency strategy). + * However, subclasses can override this strategy to do more + * sophisticated concurrency activations (such as creating the + * SVC_HANDLER as an "active object" via multi-threading or + * multi-processing). + */ + virtual int activate_svc_handler (SVC_HANDLER *svc_handler); + + // = Strategy objects. + + /// Creation strategy for an Connector. + CREATION_STRATEGY *creation_strategy_; + + /// true if Connector created the creation strategy and thus should + /// delete it, else false. + bool delete_creation_strategy_; + + /// Connect strategy for a Connector. + CONNECT_STRATEGY *connect_strategy_; + + /// true if Connector created the connect strategy and thus should + /// delete it, else false. + bool delete_connect_strategy_; + + /// Concurrency strategy for an . + CONCURRENCY_STRATEGY *concurrency_strategy_; + + /// true if Connector created the concurrency strategy and thus should + /// delete it, else false. + bool delete_concurrency_strategy_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Connector.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Connector.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" + +#endif /* ACE_CONNECTOR_H */ diff --git a/ACE/ace/Containers.cpp b/ACE/ace/Containers.cpp new file mode 100644 index 00000000000..2904225a3c9 --- /dev/null +++ b/ACE/ace/Containers.cpp @@ -0,0 +1,12 @@ +// $Id$ + +#include "ace/Containers.h" + +ACE_RCSID (ace, + Containers, + "$Id$") + +#if !defined (__ACE_INLINE__) +#include "ace/Containers.inl" +#endif /* __ACE_INLINE__ */ + diff --git a/ACE/ace/Containers.h b/ACE/ace/Containers.h new file mode 100644 index 00000000000..8fd886394b0 --- /dev/null +++ b/ACE/ace/Containers.h @@ -0,0 +1,71 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Containers.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_CONTAINERS_H +#define ACE_CONTAINERS_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template class ACE_Double_Linked_List; +template class ACE_Double_Linked_List_Iterator_Base; +template class ACE_Double_Linked_List_Iterator; +template class ACE_Double_Linked_List_Reverse_Iterator; + +/** + * @class ACE_DLList_Node + * + * @brief Base implementation of element in a DL list. Needed for + * ACE_Double_Linked_List. + */ +class ACE_Export ACE_DLList_Node +{ +public: + friend class ACE_Double_Linked_List; + friend class ACE_Double_Linked_List_Iterator_Base; + friend class ACE_Double_Linked_List_Iterator; + friend class ACE_Double_Linked_List_Reverse_Iterator; + + ACE_DLList_Node (void *i, + ACE_DLList_Node *n = 0, + ACE_DLList_Node *p = 0); + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + + void *item_; + + ACE_DLList_Node *next_; + ACE_DLList_Node *prev_; + +protected: + ACE_DLList_Node (void); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Containers.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/Containers_T.h" + +#include /**/ "ace/post.h" + +#endif /* ACE_CONTAINERS_H */ diff --git a/ACE/ace/Containers.inl b/ACE/ace/Containers.inl new file mode 100644 index 00000000000..01b7a243891 --- /dev/null +++ b/ACE/ace/Containers.inl @@ -0,0 +1,25 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_DLList_Node::ACE_DLList_Node (void) + : item_ (0), + next_ (0), + prev_ (0) +{ +} + +ACE_INLINE +ACE_DLList_Node::ACE_DLList_Node (void *i, + ACE_DLList_Node *n, + ACE_DLList_Node *p) + : item_ (i), + next_ (n), + prev_ (p) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Containers_T.cpp b/ACE/ace/Containers_T.cpp new file mode 100644 index 00000000000..c28e3e1fc41 --- /dev/null +++ b/ACE/ace/Containers_T.cpp @@ -0,0 +1,1930 @@ +// $Id$ + +#ifndef ACE_CONTAINERS_T_CPP +#define ACE_CONTAINERS_T_CPP + +#include "ace/Log_Msg.h" +#include "ace/Malloc_Base.h" +#include "ace/OS_Memory.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Containers.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Containers_T.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_Bounded_Stack) + +template void +ACE_Bounded_Stack::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Bounded_Stack::dump"); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Bounded_Stack::ACE_Bounded_Stack (size_t size) + : size_ (size), + top_ (0) +{ + ACE_NEW (this->stack_, + T[size]); + ACE_TRACE ("ACE_Bounded_Stack::ACE_Bounded_Stack"); +} + +template +ACE_Bounded_Stack::ACE_Bounded_Stack (const ACE_Bounded_Stack &s) + : size_ (s.size_), + top_ (s.top_) +{ + ACE_NEW (this->stack_, + T[s.size_]); + + ACE_TRACE ("ACE_Bounded_Stack::ACE_Bounded_Stack"); + + for (size_t i = 0; i < this->top_; i++) + this->stack_[i] = s.stack_[i]; +} + +template void +ACE_Bounded_Stack::operator= (const ACE_Bounded_Stack &s) +{ + ACE_TRACE ("ACE_Bounded_Stack::operator="); + + if (&s != this) + { + if (this->size_ < s.size_) + { + delete [] this->stack_; + ACE_NEW (this->stack_, + T[s.size_]); + this->size_ = s.size_; + } + this->top_ = s.top_; + + for (size_t i = 0; i < this->top_; i++) + this->stack_[i] = s.stack_[i]; + } +} + +template +ACE_Bounded_Stack::~ACE_Bounded_Stack (void) +{ + ACE_TRACE ("ACE_Bounded_Stack::~ACE_Bounded_Stack"); + delete [] this->stack_; +} + +// ---------------------------------------- + +ACE_ALLOC_HOOK_DEFINE(ACE_Fixed_Stack) + +template void +ACE_Fixed_Stack::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Fixed_Stack::dump"); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Fixed_Stack::ACE_Fixed_Stack (void) + : size_ (ACE_SIZE), + top_ (0) +{ + ACE_TRACE ("ACE_Fixed_Stack::ACE_Fixed_Stack"); +} + +template +ACE_Fixed_Stack::ACE_Fixed_Stack (const ACE_Fixed_Stack &s) + : size_ (s.size_), + top_ (s.top_) +{ + ACE_TRACE ("ACE_Fixed_Stack::ACE_Fixed_Stack"); + for (size_t i = 0; i < this->top_; i++) + this->stack_[i] = s.stack_[i]; +} + +template void +ACE_Fixed_Stack::operator= (const ACE_Fixed_Stack &s) +{ + ACE_TRACE ("ACE_Fixed_Stack::operator="); + + if (&s != this) + { + this->top_ = s.top_; + + for (size_t i = 0; i < this->top_; i++) + this->stack_[i] = s.stack_[i]; + } +} + +template +ACE_Fixed_Stack::~ACE_Fixed_Stack (void) +{ + ACE_TRACE ("ACE_Fixed_Stack::~ACE_Fixed_Stack"); +} + +//---------------------------------------- + +ACE_ALLOC_HOOK_DEFINE(ACE_Unbounded_Stack) + +template void +ACE_Unbounded_Stack::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + // ACE_TRACE ("ACE_Unbounded_Stack::dump"); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Unbounded_Stack::ACE_Unbounded_Stack (ACE_Allocator *alloc) + : head_ (0), + cur_size_ (0), + allocator_ (alloc) +{ + // ACE_TRACE ("ACE_Unbounded_Stack::ACE_Unbounded_Stack"); + if (this->allocator_ == 0) + this->allocator_ = ACE_Allocator::instance (); + + ACE_NEW_MALLOC (this->head_, + (ACE_Node *) this->allocator_->malloc (sizeof (ACE_Node)), + ACE_Node); + this->head_->next_ = this->head_; +} + +template void +ACE_Unbounded_Stack::delete_all_nodes (void) +{ + // ACE_TRACE ("ACE_Unbounded_Stack::delete_all_nodes"); + + while (this->is_empty () == 0) + { + ACE_Node *temp = this->head_->next_; + this->head_->next_ = temp->next_; + ACE_DES_FREE_TEMPLATE (temp, this->allocator_->free, + ACE_Node, ); + } + + this->cur_size_ = 0; + + ACE_ASSERT (this->head_ == this->head_->next_ + && this->is_empty ()); +} + +template void +ACE_Unbounded_Stack::copy_all_nodes (const ACE_Unbounded_Stack &s) +{ + // ACE_TRACE ("ACE_Unbounded_Stack::copy_all_nodes"); + + ACE_ASSERT (this->head_ == this->head_->next_); + + ACE_Node *temp = this->head_; + + for (ACE_Node *s_temp = s.head_->next_; + s_temp != s.head_; + s_temp = s_temp->next_) + { + ACE_Node *nptr = temp->next_; + ACE_NEW_MALLOC (temp->next_, + (ACE_Node *) this->allocator_->malloc (sizeof (ACE_Node)), + ACE_Node (s_temp->item_, nptr)); + temp = temp->next_; + } + this->cur_size_ = s.cur_size_; +} + +template +ACE_Unbounded_Stack::ACE_Unbounded_Stack (const ACE_Unbounded_Stack &s) + : head_ (0), + cur_size_ (0), + allocator_ (s.allocator_) +{ + if (this->allocator_ == 0) + this->allocator_ = ACE_Allocator::instance (); + + ACE_NEW_MALLOC (this->head_, + (ACE_Node *) this->allocator_->malloc (sizeof (ACE_Node)), + ACE_Node); + this->head_->next_ = this->head_; + + // ACE_TRACE ("ACE_Unbounded_Stack::ACE_Unbounded_Stack"); + this->copy_all_nodes (s); +} + +template void +ACE_Unbounded_Stack::operator= (const ACE_Unbounded_Stack &s) +{ + // ACE_TRACE ("ACE_Unbounded_Stack::operator="); + + if (this != &s) + { + this->delete_all_nodes (); + this->copy_all_nodes (s); + } +} + +template +ACE_Unbounded_Stack::~ACE_Unbounded_Stack (void) +{ + // ACE_TRACE ("ACE_Unbounded_Stack::~ACE_Unbounded_Stack"); + + this->delete_all_nodes (); + ACE_DES_FREE_TEMPLATE (head_, + this->allocator_->free, + ACE_Node, + ); +} + +template int +ACE_Unbounded_Stack::push (const T &new_item) +{ + // ACE_TRACE ("ACE_Unbounded_Stack::push"); + + ACE_Node *temp = 0; + + ACE_NEW_MALLOC_RETURN (temp, + static_cast *> (this->allocator_->malloc (sizeof (ACE_Node))), + ACE_Node (new_item, this->head_->next_), + -1); + this->head_->next_ = temp; + ++this->cur_size_; + return 0; +} + +template int +ACE_Unbounded_Stack::pop (T &item) +{ + // ACE_TRACE ("ACE_Unbounded_Stack::pop"); + + if (this->is_empty ()) + return -1; + else + { + ACE_Node *temp = this->head_->next_; + item = temp->item_; + this->head_->next_ = temp->next_; + + ACE_DES_FREE_TEMPLATE (temp, + this->allocator_->free, + ACE_Node, + ); + --this->cur_size_; + return 0; + } +} + +template int +ACE_Unbounded_Stack::find (const T &item) const +{ + // ACE_TRACE ("ACE_Unbounded_Stack::find"); + // Set into the dummy node. + this->head_->item_ = item; + + ACE_Node *temp = this->head_->next_; + + // Keep looping until we find the item. + while (!(temp->item_ == item)) + temp = temp->next_; + + // If we found the dummy node then it's not really there, otherwise, + // it is there. + return temp == this->head_ ? -1 : 0; +} + +template int +ACE_Unbounded_Stack::insert (const T &item) +{ + // ACE_TRACE ("ACE_Unbounded_Stack::insert"); + + if (this->find (item) == 0) + return 1; + else + return this->push (item); +} + +template int +ACE_Unbounded_Stack::remove (const T &item) +{ + // ACE_TRACE ("ACE_Unbounded_Stack::remove"); + + // Insert the item to be founded into the dummy node. + this->head_->item_ = item; + + ACE_Node *curr = this->head_; + + while (!(curr->next_->item_ == item)) + curr = curr->next_; + + if (curr->next_ == this->head_) + return -1; // Item was not found. + else + { + ACE_Node *temp = curr->next_; + // Skip over the node that we're deleting. + curr->next_ = temp->next_; + --this->cur_size_; + ACE_DES_FREE_TEMPLATE (temp, + this->allocator_->free, + ACE_Node, + ); + return 0; + } +} + +//-------------------------------------------------- +ACE_ALLOC_HOOK_DEFINE(ACE_Double_Linked_List_Iterator_Base) + +template +ACE_Double_Linked_List_Iterator_Base::ACE_Double_Linked_List_Iterator_Base (const ACE_Double_Linked_List &dll) + : current_ (0), dllist_ (&dll) +{ + // Do nothing +} + +template +ACE_Double_Linked_List_Iterator_Base::ACE_Double_Linked_List_Iterator_Base (const ACE_Double_Linked_List_Iterator_Base &iter) + : current_ (iter.current_), + dllist_ (iter.dllist_) +{ + // Do nothing +} + + +template T * +ACE_Double_Linked_List_Iterator_Base::next (void) const +{ + return this->not_done (); +} + +template int +ACE_Double_Linked_List_Iterator_Base::next (T *&ptr) const +{ + ptr = this->not_done (); + return ptr ? 1 : 0; +} + + +template int +ACE_Double_Linked_List_Iterator_Base::done (void) const +{ + return this->not_done () ? 0 : 1; +} + +template T & +ACE_Double_Linked_List_Iterator_Base::operator* (void) const +{ + return *(this->not_done ()); +} + +// @@ Is this a valid retasking? Make sure to check with Purify and +// whatnot that we're not leaking memory or doing any other screwing things. +template void +ACE_Double_Linked_List_Iterator_Base::reset (ACE_Double_Linked_List &dll) +{ + current_ = 0; + dllist_ = &dll; +} + + template int +ACE_Double_Linked_List_Iterator_Base::go_head (void) +{ + this->current_ = static_cast (dllist_->head_->next_); + return this->current_ ? 1 : 0; +} + +template int +ACE_Double_Linked_List_Iterator_Base::go_tail (void) +{ + this->current_ = static_cast (dllist_->head_->prev_); + return this->current_ ? 1 : 0; +} + +template T * +ACE_Double_Linked_List_Iterator_Base::not_done (void) const +{ + if (this->current_ != this->dllist_->head_) + return this->current_; + else + return 0; +} + +template T * +ACE_Double_Linked_List_Iterator_Base::do_advance (void) +{ + if (this->not_done ()) + { + this->current_ = static_cast (this->current_->next_); + return this->not_done (); + } + else + return 0; +} + +template T * +ACE_Double_Linked_List_Iterator_Base::do_retreat (void) +{ + if (this->not_done ()) + { + this->current_ = static_cast (this->current_->prev_); + return this->not_done (); + } + else + return 0; +} + +template void +ACE_Double_Linked_List_Iterator_Base::dump_i (void) const +{ + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("current_ = %x"), this->current_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +} + +//-------------------------------------------------- +ACE_ALLOC_HOOK_DEFINE(ACE_Double_Linked_List_Iterator) + +template +ACE_Double_Linked_List_Iterator::ACE_Double_Linked_List_Iterator (const ACE_Double_Linked_List &dll) + : ACE_Double_Linked_List_Iterator_Base (dll) +{ + this->current_ = static_cast (dll.head_->next_); + // Advance current_ out of the null area and onto the first item in + // the list +} + +template void +ACE_Double_Linked_List_Iterator::reset (ACE_Double_Linked_List &dll) +{ + this->ACE_Double_Linked_List_Iterator_Base ::reset (dll); + this->current_ = static_cast (dll.head_->next_); + // Advance current_ out of the null area and onto the first item in + // the list +} + +template int +ACE_Double_Linked_List_Iterator::first (void) +{ + return this->go_head (); +} + +template int +ACE_Double_Linked_List_Iterator::advance (void) +{ + return this->do_advance () ? 1 : 0; +} + +template T* +ACE_Double_Linked_List_Iterator::advance_and_remove (int dont_remove) +{ + T* item = 0; + if (dont_remove) + this->do_advance (); + else + { + item = this->next (); + this->do_advance (); + // It seems dangerous to remove nodes in an iterator, but so it goes... + ACE_Double_Linked_List *dllist = + const_cast *> (this->dllist_); + dllist->remove (item); + } + return item; +} + +template void +ACE_Double_Linked_List_Iterator::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + this->dump_i (); +#endif /* ACE_HAS_DUMP */ +} + +// Prefix advance. + +template +ACE_Double_Linked_List_Iterator & +ACE_Double_Linked_List_Iterator::operator++ (void) +{ + this->do_advance (); + return *this; +} + + +// Postfix advance. + +template +ACE_Double_Linked_List_Iterator +ACE_Double_Linked_List_Iterator::operator++ (int) +{ + ACE_Double_Linked_List_Iterator retv (*this); + this->do_advance (); + return retv; +} + + +// Prefix reverse. + +template +ACE_Double_Linked_List_Iterator & +ACE_Double_Linked_List_Iterator::operator-- (void) +{ + this->do_retreat (); + return *this; +} + + +// Postfix reverse. + +template +ACE_Double_Linked_List_Iterator +ACE_Double_Linked_List_Iterator::operator-- (int) +{ + ACE_Double_Linked_List_Iterator retv (*this); + this->do_retreat (); + return retv; +} + + +//-------------------------------------------------- +ACE_ALLOC_HOOK_DEFINE(ACE_Double_Linked_List_Reverse_Iterator) + + template +ACE_Double_Linked_List_Reverse_Iterator::ACE_Double_Linked_List_Reverse_Iterator (ACE_Double_Linked_List &dll) + : ACE_Double_Linked_List_Iterator_Base (dll) +{ + this->current_ = static_cast (dll.head_->prev_); + // Advance current_ out of the null area and onto the last item in + // the list +} + +template void +ACE_Double_Linked_List_Reverse_Iterator::reset (ACE_Double_Linked_List &dll) +{ + this->ACE_Double_Linked_List_Iterator_Base ::reset (dll); + this->current_ = static_cast (dll.head_->prev_); + // Advance current_ out of the null area and onto the last item in + // the list +} + +template int +ACE_Double_Linked_List_Reverse_Iterator::first (void) +{ + return this->go_tail (); +} + +template int +ACE_Double_Linked_List_Reverse_Iterator::advance (void) +{ + return this->do_retreat () ? 1 : 0; +} + +template T* +ACE_Double_Linked_List_Reverse_Iterator::advance_and_remove (int dont_remove) +{ + T* item = 0; + if (dont_remove) + this->do_retreat (); + else + { + item = this->next (); + this->do_retreat (); + // It seems dangerous to remove nodes in an iterator, but so it goes... + ACE_Double_Linked_List *dllist = + const_cast *> (this->dllist_); + dllist->remove (item); + } + return item; +} + +template void +ACE_Double_Linked_List_Reverse_Iterator::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + this->dump_i (); +#endif /* ACE_HAS_DUMP */ +} + +// Prefix advance. + +template +ACE_Double_Linked_List_Reverse_Iterator & +ACE_Double_Linked_List_Reverse_Iterator::operator++ (void) +{ + this->do_retreat (); + return *this; +} + + +// Postfix advance. + +template +ACE_Double_Linked_List_Reverse_Iterator +ACE_Double_Linked_List_Reverse_Iterator::operator++ (int) +{ + ACE_Double_Linked_List_Reverse_Iterator retv (*this); + this->do_retreat (); + return retv; +} + + +// Prefix reverse. + +template +ACE_Double_Linked_List_Reverse_Iterator & +ACE_Double_Linked_List_Reverse_Iterator::operator-- (void) +{ + this->do_advance (); + return *this; +} + + +// Postfix reverse. + +template +ACE_Double_Linked_List_Reverse_Iterator +ACE_Double_Linked_List_Reverse_Iterator::operator-- (int) +{ + ACE_Double_Linked_List_Reverse_Iterator retv (*this); + this->do_advance (); + return retv; +} + + +ACE_ALLOC_HOOK_DEFINE(ACE_Double_Linked_List) + + template +ACE_Double_Linked_List:: ACE_Double_Linked_List (ACE_Allocator *alloc) + : size_ (0), allocator_ (alloc) +{ + if (this->allocator_ == 0) + this->allocator_ = ACE_Allocator::instance (); + + ACE_NEW_MALLOC (this->head_, + (T *) this->allocator_->malloc (sizeof (T)), + T); + this->init_head (); +} + +template +ACE_Double_Linked_List::ACE_Double_Linked_List (const ACE_Double_Linked_List &cx) + : allocator_ (cx.allocator_) +{ + if (this->allocator_ == 0) + this->allocator_ = ACE_Allocator::instance (); + + ACE_NEW_MALLOC (this->head_, + (T *) this->allocator_->malloc (sizeof (T)), + T); + this->init_head (); + this->copy_nodes (cx); + this->size_ = cx.size_; +} + +template void +ACE_Double_Linked_List::operator= (const ACE_Double_Linked_List &cx) +{ + if (this != &cx) + { + this->delete_nodes (); + this->copy_nodes (cx); + } +} + +template +ACE_Double_Linked_List::~ACE_Double_Linked_List (void) +{ + this->delete_nodes (); + + ACE_DES_FREE (head_, + this->allocator_->free, + T); + + this->head_ = 0; +} + +template int +ACE_Double_Linked_List::is_empty (void) const +{ + return this->size () ? 0 : 1; +} + +template int +ACE_Double_Linked_List::is_full (void) const +{ + return 0; // We have no bound. +} + +template T * +ACE_Double_Linked_List::insert_tail (T *new_item) +{ + // Insert it before , i.e., at tail. + this->insert_element (new_item, 1); + return new_item; +} + +template T * +ACE_Double_Linked_List::insert_head (T *new_item) +{ + this->insert_element (new_item); // Insert it after , i.e., at head. + return new_item; +} + +template T * +ACE_Double_Linked_List::delete_head (void) +{ + if (this->is_empty ()) + return 0; + + T *temp = static_cast (this->head_->next_); + // Detach it from the list. + this->remove_element (temp); + return temp; +} + +template T * +ACE_Double_Linked_List::delete_tail (void) +{ + if (this->is_empty ()) + return 0; + + T *temp = static_cast (this->head_->prev_); + // Detach it from the list. + this->remove_element (temp); + return temp; +} + +template void +ACE_Double_Linked_List::reset (void) +{ + this->delete_nodes (); +} + +template int +ACE_Double_Linked_List::get (T *&item, size_t slot) +{ + ACE_Double_Linked_List_Iterator iter (*this); + + for (size_t i = 0; + i < slot && !iter.done (); + i++) + iter.advance (); + + item = iter.next (); + return item ? 0 : -1; +} + +template size_t +ACE_Double_Linked_List::size (void) const +{ + return this->size_; +} + +template void +ACE_Double_Linked_List::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + // Dump the state of an object. +#endif /* ACE_HAS_DUMP */ +} + +#if 0 +template T * +ACE_Double_Linked_List::find (const T &item) +{ + for (ACE_Double_Linked_List_Iterator iter (*this); + !iter.done (); + iter.advance ()) + { + T *temp = iter.next (); + + if (*temp == item) + return temp; + } + + return 0; +} + +template int +ACE_Double_Linked_List::remove (const T &item) +{ + T *temp = this->find (item); + + if (temp != 0) + return this->remove (temp); + else + return -1; +} +#endif /* 0 */ + +template int +ACE_Double_Linked_List::remove (T *n) +{ + return this->remove_element (n); +} + +template void +ACE_Double_Linked_List::delete_nodes (void) +{ + while (! this->is_empty ()) + { + T * temp = static_cast (this->head_->next_); + this->remove_element (temp); + ACE_DES_FREE (temp, + this->allocator_->free, + T); + } +} + +template void +ACE_Double_Linked_List::copy_nodes (const ACE_Double_Linked_List &c) +{ + for (ACE_Double_Linked_List_Iterator iter (c); + !iter.done (); + iter.advance ()) + { + T* temp = 0; + ACE_NEW_MALLOC (temp, + (T *)this->allocator_->malloc (sizeof (T)), + T (*iter.next ())); + this->insert_tail (temp); + } +} + +template void +ACE_Double_Linked_List::init_head (void) +{ + this->head_->next_ = this->head_; + this->head_->prev_ = this->head_; +} + +template int +ACE_Double_Linked_List::insert_element (T *new_item, + int before, + T *old_item) +{ + if (old_item == 0) + old_item = this->head_; + + if (before) + old_item = static_cast (old_item->prev_); + + new_item->next_ = old_item->next_; + new_item->next_->prev_ = new_item; + new_item->prev_ = old_item; + old_item->next_ = new_item; + ++this->size_; + return 0; // Well, what will cause errors here? +} + +template int +ACE_Double_Linked_List::remove_element (T *item) +{ + // Notice that you have to ensure that item is an element of this + // list. We can't do much checking here. + + if (item == this->head_ || item->next_ == 0 + || item->prev_ == 0 || this->size () == 0) // Can't remove head + return -1; + + item->prev_->next_ = item->next_; + item->next_->prev_ = item->prev_; + item->next_ = item->prev_ = 0; // reset pointers to prevent double removal. + --this->size_; + return 0; +} + +//-------------------------------------------------- +ACE_ALLOC_HOOK_DEFINE(ACE_Fixed_Set) + +template size_t +ACE_Fixed_Set::size (void) const +{ + ACE_TRACE ("ACE_Fixed_Set::size"); + return this->cur_size_; +} + +template void +ACE_Fixed_Set::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Fixed_Set::dump"); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Fixed_Set::~ACE_Fixed_Set (void) +{ + ACE_TRACE ("ACE_Fixed_Set::~ACE_Fixed_Set"); + this->cur_size_ = 0; +} + +template +ACE_Fixed_Set::ACE_Fixed_Set (const ACE_Fixed_Set &fs) + : cur_size_ (fs.cur_size_) +{ + ACE_TRACE ("ACE_Fixed_Set::ACE_Fixed_Set"); + + for (size_t i = 0, j = 0; i < fs.max_size_ && j < this->cur_size_; ++i) + if (fs.search_structure_[i].is_free_ == 0) + this->search_structure_[j++] = fs.search_structure_[i]; +} + +template void +ACE_Fixed_Set::operator= (const ACE_Fixed_Set &fs) +{ + ACE_TRACE ("ACE_Fixed_Set::operator="); + + if (this != &fs) + { + this->cur_size_ = fs.cur_size_; + + for (size_t i = 0, j = 0; i < fs.max_size_ && j < this->cur_size_; ++i) + if (fs.search_structure_[i].is_free_ == 0) + this->search_structure_[j++] = fs.search_structure_[i]; + } +} + +template +ACE_Fixed_Set::ACE_Fixed_Set (void) + : cur_size_ (0), + max_size_ (ACE_SIZE) +{ + ACE_TRACE ("ACE_Fixed_Set::ACE_Fixed_Set"); + for (size_t i = 0; i < this->max_size_; i++) + this->search_structure_[i].is_free_ = 1; +} + +template int +ACE_Fixed_Set::find (const T &item) const +{ + ACE_TRACE ("ACE_Fixed_Set::find"); + + for (size_t i = 0, j = 0; i < this->max_size_ && j < this->cur_size_; ++i) + if (this->search_structure_[i].is_free_ == 0) + { + if (this->search_structure_[i].item_ == item) + return 0; + ++j; + } + + return -1; +} + +template int +ACE_Fixed_Set::insert (const T &item) +{ + ACE_TRACE ("ACE_Fixed_Set::insert"); + ssize_t first_free = -1; // Keep track of first free slot. + size_t i; + + for (i = 0; + i < this->max_size_ && first_free == -1; + ++i) + + // First, make sure we don't allow duplicates. + + if (this->search_structure_[i].is_free_ == 0) + { + if (this->search_structure_[i].item_ == item) + return 1; + } + else + first_free = static_cast (i); + + // If we found a free spot let's reuse it. + + if (first_free > -1) + { + this->search_structure_[first_free].item_ = item; + this->search_structure_[first_free].is_free_ = 0; + this->cur_size_++; + return 0; + } + else /* No more room! */ + { + errno = ENOMEM; + return -1; + } +} + +template int +ACE_Fixed_Set::remove (const T &item) +{ + ACE_TRACE ("ACE_Fixed_Set::remove"); + + for (size_t i = 0, j = 0; + i < this->max_size_ && j < this->cur_size_; + ++i) + if (this->search_structure_[i].is_free_ == 0) + { + if (this->search_structure_[i].item_ == item) + { + // Mark this entry as being free. + this->search_structure_[i].is_free_ = 1; + + --this->cur_size_; + return 0; + } + else + ++j; + } + + return -1; +} + +//-------------------------------------------------- +ACE_ALLOC_HOOK_DEFINE(ACE_Fixed_Set_Iterator_Base) + +template void +ACE_Fixed_Set_Iterator_Base::dump_i (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Fixed_Set_Iterator_Base::dump_i"); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Fixed_Set_Iterator_Base::ACE_Fixed_Set_Iterator_Base (ACE_Fixed_Set &s) + : s_ (s), + next_ (-1), + iterated_items_ (0) +{ + ACE_TRACE ("ACE_Fixed_Set_Iterator_Base::ACE_Fixed_Set_Iterator_Base"); + this->advance (); +} + +template int +ACE_Fixed_Set_Iterator_Base::advance (void) +{ + ACE_TRACE ("ACE_Fixed_Set_Iterator_Base::advance"); + + if (this->iterated_items_ < this->s_.cur_size_) + { + for (++this->next_; + static_cast (this->next_) < this->s_.max_size_; + ++this->next_) + if (this->s_.search_structure_[this->next_].is_free_ == 0) + { + ++this->iterated_items_; + return 1; + } + } + else + ++this->next_; + + return 0; +} + +template int +ACE_Fixed_Set_Iterator_Base::first (void) +{ + ACE_TRACE ("ACE_Fixed_Set_Iterator_Base::first"); + + next_ = -1; + iterated_items_ = 0; + return this->advance (); +} + +template int +ACE_Fixed_Set_Iterator_Base::done (void) const +{ + ACE_TRACE ("ACE_Fixed_Set_Iterator_Base::done"); + + return ! (this->iterated_items_ < this->s_.cur_size_); +} + +template int +ACE_Fixed_Set_Iterator_Base::next_i (T *&item) +{ + ACE_TRACE ("ACE_Fixed_Set_Iterator_Base::next_i"); + + if (static_cast (this->next_) < this->s_.max_size_) + do + { + if (this->s_.search_structure_[this->next_].is_free_ == 0) + { + item = &this->s_.search_structure_[this->next_].item_; + this->advance (); + return 1; + } + } + while (this->advance () == 1); + + return 0; +} + +//-------------------------------------------------- +ACE_ALLOC_HOOK_DEFINE(ACE_Fixed_Set_Iterator) + +template void +ACE_Fixed_Set_Iterator::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + this->dump_i (); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Fixed_Set_Iterator::ACE_Fixed_Set_Iterator (ACE_Fixed_Set &s) + : ACE_Fixed_Set_Iterator_Base (s) +{ + ACE_TRACE ("ACE_Fixed_Set_Iterator::ACE_Fixed_Set_Iterator"); +} + +template int +ACE_Fixed_Set_Iterator::next (T *&item) +{ + ACE_TRACE ("ACE_Fixed_Set_Iterator::next"); + return this->next_i (item); +} + +template int +ACE_Fixed_Set_Iterator::remove (T *&item) +{ + ACE_TRACE ("ACE_Fixed_Set_Iterator::remove"); + + if (this->s_.search_structure_[this->next_].is_free_ == 0) + { + item = &this->s_.search_structure_[this->next_].item_; + this->s_.remove (*item); + --(this->iterated_items_); + return 1; + } + + return 0; +} + +template T& +ACE_Fixed_Set_Iterator::operator* (void) +{ + T *retv = 0; + + if (this->s_.search_structure_[this->next_].is_free_ == 0) + retv = &this->s_.search_structure_[this->next_].item_; + + ACE_ASSERT (retv != 0); + + return *retv; +} + +//-------------------------------------------------- +ACE_ALLOC_HOOK_DEFINE(ACE_Fixed_Set_Const_Iterator) + +template void +ACE_Fixed_Set_Const_Iterator::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + this->dump_i (); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Fixed_Set_Const_Iterator::ACE_Fixed_Set_Const_Iterator (const ACE_Fixed_Set &s) + : ACE_Fixed_Set_Iterator_Base (s) +{ + ACE_TRACE ("ACE_Fixed_Set_Const_Iterator::ACE_Fixed_Set_Const_Iterator"); +} + +template int +ACE_Fixed_Set_Const_Iterator::next (const T *&item) +{ + ACE_TRACE ("ACE_Fixed_Set_Const_Iterator::next"); + + return this->next_i (item); +} + +template const T& +ACE_Fixed_Set_Const_Iterator::operator* (void) const +{ + const T *retv = 0; + + if (this->s_.search_structure_[this->next_].is_free_ == 0) + retv = &this->s_.search_structure_[this->next_].item_; + + ACE_ASSERT (retv != 0); + + return *retv; +} + +//-------------------------------------------------- +ACE_ALLOC_HOOK_DEFINE(ACE_Bounded_Set) + +template void +ACE_Bounded_Set::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Bounded_Set::dump"); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Bounded_Set::~ACE_Bounded_Set (void) +{ + ACE_TRACE ("ACE_Bounded_Set::~ACE_Bounded_Set"); + delete [] this->search_structure_; +} + +template +ACE_Bounded_Set::ACE_Bounded_Set (void) + : cur_size_ (0), + max_size_ (static_cast (ACE_Bounded_Set::DEFAULT_SIZE)) +{ + ACE_TRACE ("ACE_Bounded_Set::ACE_Bounded_Set"); + + ACE_NEW (this->search_structure_, + typename ACE_Bounded_Set::Search_Structure[this->max_size_]); + + for (size_t i = 0; i < this->max_size_; ++i) + this->search_structure_[i].is_free_ = 1; +} + +template size_t +ACE_Bounded_Set::size (void) const +{ + ACE_TRACE ("ACE_Bounded_Set::size"); + return this->cur_size_; +} + +template +ACE_Bounded_Set::ACE_Bounded_Set (const ACE_Bounded_Set &bs) + : cur_size_ (bs.cur_size_), + max_size_ (bs.max_size_) +{ + ACE_TRACE ("ACE_Bounded_Set::ACE_Bounded_Set"); + + ACE_NEW (this->search_structure_, + typename ACE_Bounded_Set::Search_Structure[this->max_size_]); + + for (size_t i = 0; i < this->cur_size_; i++) + this->search_structure_[i] = bs.search_structure_[i]; +} + +template void +ACE_Bounded_Set::operator= (const ACE_Bounded_Set &bs) +{ + ACE_TRACE ("ACE_Bounded_Set::operator="); + + if (this != &bs) + { + if (this->max_size_ < bs.cur_size_) + { + delete [] this->search_structure_; + ACE_NEW (this->search_structure_, + typename ACE_Bounded_Set::Search_Structure[bs.cur_size_]); + this->max_size_ = bs.cur_size_; + } + + this->cur_size_ = bs.cur_size_; + + for (size_t i = 0; i < this->cur_size_; i++) + this->search_structure_[i] = bs.search_structure_[i]; + } +} + +template +ACE_Bounded_Set::ACE_Bounded_Set (size_t size) + : cur_size_ (0), + max_size_ (size) +{ + ACE_TRACE ("ACE_Bounded_Set::ACE_Bounded_Set"); + ACE_NEW (this->search_structure_, + typename ACE_Bounded_Set::Search_Structure[size]); + + for (size_t i = 0; i < this->max_size_; i++) + this->search_structure_[i].is_free_ = 1; +} + +template int +ACE_Bounded_Set::find (const T &item) const +{ + ACE_TRACE ("ACE_Bounded_Set::find"); + + for (size_t i = 0; i < this->cur_size_; i++) + if (this->search_structure_[i].item_ == item + && this->search_structure_[i].is_free_ == 0) + return 0; + + return -1; +} + +template int +ACE_Bounded_Set::insert (const T &item) +{ + ACE_TRACE ("ACE_Bounded_Set::insert"); + int first_free = -1; // Keep track of first free slot. + size_t i; + + for (i = 0; i < this->cur_size_; i++) + // First, make sure we don't allow duplicates. + + if (this->search_structure_[i].item_ == item + && this->search_structure_[i].is_free_ == 0) + return 1; + else if (this->search_structure_[i].is_free_ && first_free == -1) + first_free = static_cast (i); + + if (first_free > -1) // If we found a free spot let's reuse it. + { + this->search_structure_[first_free].item_ = item; + this->search_structure_[first_free].is_free_ = 0; + return 0; + } + else if (i < this->max_size_) // Insert at the end of the active portion. + { + this->search_structure_[i].item_ = item; + this->search_structure_[i].is_free_ = 0; + this->cur_size_++; + return 0; + } + else /* No more room! */ + { + errno = ENOMEM; + return -1; + } +} + +template int +ACE_Bounded_Set::remove (const T &item) +{ + ACE_TRACE ("ACE_Bounded_Set::remove"); + for (size_t i = 0; i < this->cur_size_; i++) + if (this->search_structure_[i].item_ == item) + { + // Mark this entry as being free. + this->search_structure_[i].is_free_ = 1; + + // If we just unbound the highest entry, then we need to + // figure out where the next highest active entry is. + if (i + 1 == this->cur_size_) + { + while (i > 0 && this->search_structure_[--i].is_free_) + continue; + + if (i == 0 && this->search_structure_[i].is_free_) + this->cur_size_ = 0; + else + this->cur_size_ = i + 1; + } + return 0; + } + + return -1; +} + +ACE_ALLOC_HOOK_DEFINE(ACE_Bounded_Set_Iterator) + + template void +ACE_Bounded_Set_Iterator::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Bounded_Set_Iterator::dump"); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Bounded_Set_Iterator::ACE_Bounded_Set_Iterator (ACE_Bounded_Set &s) + : s_ (s), + next_ (-1) +{ + ACE_TRACE ("ACE_Bounded_Set_Iterator::ACE_Bounded_Set_Iterator"); + this->advance (); +} + +template int +ACE_Bounded_Set_Iterator::advance (void) +{ + ACE_TRACE ("ACE_Bounded_Set_Iterator::advance"); + + for (++this->next_; + static_cast (this->next_) < this->s_.cur_size_ + && this->s_.search_structure_[this->next_].is_free_; + ++this->next_) + continue; + + return static_cast (this->next_) < this->s_.cur_size_; +} + +template int +ACE_Bounded_Set_Iterator::first (void) +{ + ACE_TRACE ("ACE_Bounded_Set_Iterator::first"); + + next_ = -1; + return this->advance (); +} + +template int +ACE_Bounded_Set_Iterator::done (void) const +{ + ACE_TRACE ("ACE_Bounded_Set_Iterator::done"); + + return static_cast (this->next_) >= + this->s_.cur_size_; +} + +template int +ACE_Bounded_Set_Iterator::next (T *&item) +{ + ACE_TRACE ("ACE_Bounded_Set_Iterator::next"); + if (static_cast (this->next_) < this->s_.cur_size_) + { + item = &this->s_.search_structure_[this->next_].item_; + return 1; + } + else + return 0; +} + +ACE_ALLOC_HOOK_DEFINE(ACE_DNode) + + template +ACE_DNode::ACE_DNode (const T &i, ACE_DNode *n, ACE_DNode *p) + : next_ (n), prev_ (p), item_ (i) +{ +} + +template +ACE_DNode::~ACE_DNode (void) +{ +} + +// **************************************************************** + +template void +ACE_Unbounded_Stack_Iterator::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + // ACE_TRACE ("ACE_Unbounded_Stack_Iterator::dump"); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Unbounded_Stack_Iterator::ACE_Unbounded_Stack_Iterator (ACE_Unbounded_Stack &q) + : current_ (q.head_->next_), + stack_ (q) +{ + // ACE_TRACE ("ACE_Unbounded_Stack_Iterator::ACE_Unbounded_Stack_Iterator"); +} + +template int +ACE_Unbounded_Stack_Iterator::advance (void) +{ + // ACE_TRACE ("ACE_Unbounded_Stack_Iterator::advance"); + this->current_ = this->current_->next_; + return this->current_ != this->stack_.head_; +} + +template int +ACE_Unbounded_Stack_Iterator::first (void) +{ + // ACE_TRACE ("ACE_Unbounded_Stack_Iterator::first"); + this->current_ = this->stack_.head_->next_; + return this->current_ != this->stack_.head_; +} + +template int +ACE_Unbounded_Stack_Iterator::done (void) const +{ + ACE_TRACE ("ACE_Unbounded_Stack_Iterator::done"); + + return this->current_ == this->stack_.head_; +} + +template int +ACE_Unbounded_Stack_Iterator::next (T *&item) +{ + // ACE_TRACE ("ACE_Unbounded_Stack_Iterator::next"); + if (this->current_ == this->stack_.head_) + return 0; + else + { + item = &this->current_->item_; + return 1; + } +} + + +ACE_ALLOC_HOOK_DEFINE(ACE_Ordered_MultiSet) + + + template +ACE_Ordered_MultiSet::ACE_Ordered_MultiSet (ACE_Allocator *alloc) + : head_ (0) + , tail_ (0) + , cur_size_ (0) + , allocator_ (alloc) +{ + // ACE_TRACE ("ACE_Ordered_MultiSet::ACE_Ordered_MultiSet"); + + if (this->allocator_ == 0) + this->allocator_ = ACE_Allocator::instance (); +} + +template +ACE_Ordered_MultiSet::ACE_Ordered_MultiSet (const ACE_Ordered_MultiSet &us) + : head_ (0) + , tail_ (0) + , cur_size_ (0) + , allocator_ (us.allocator_) +{ + ACE_TRACE ("ACE_Ordered_MultiSet::ACE_Ordered_MultiSet"); + + if (this->allocator_ == 0) + this->allocator_ = ACE_Allocator::instance (); + + this->copy_nodes (us); +} + +template +ACE_Ordered_MultiSet::~ACE_Ordered_MultiSet (void) +{ + // ACE_TRACE ("ACE_Ordered_MultiSet::~ACE_Ordered_MultiSet"); + + this->delete_nodes (); +} + + +template void +ACE_Ordered_MultiSet::operator= (const ACE_Ordered_MultiSet &us) +{ + ACE_TRACE ("ACE_Ordered_MultiSet::operator="); + + if (this != &us) + { + this->delete_nodes (); + this->copy_nodes (us); + } +} + + +template int +ACE_Ordered_MultiSet::insert (const T &item) +{ + // ACE_TRACE ("ACE_Ordered_MultiSet::insert"); + + return this->insert_from (item, this->head_, 0); +} + +template int +ACE_Ordered_MultiSet::insert (const T &new_item, + ITERATOR &iter) +{ + // ACE_TRACE ("ACE_Ordered_MultiSet::insert using iterator"); + + return this->insert_from (new_item, iter.current_, &iter.current_); +} + +template int +ACE_Ordered_MultiSet::remove (const T &item) +{ + // ACE_TRACE ("ACE_Ordered_MultiSet::remove"); + + ACE_DNode *node = 0; + + int result = locate (item, 0, node); + + // if we found the node, remove from list and free it + if (node && (result == 0)) + { + if (node->prev_) + node->prev_->next_ = node->next_; + else + head_ = node->next_; + + if (node->next_) + node->next_->prev_ = node->prev_; + else + tail_ = node->prev_; + + --this->cur_size_; + + ACE_DES_FREE_TEMPLATE (node, + this->allocator_->free, + ACE_DNode, + ); + return 0; + } + + return -1; +} + +template int +ACE_Ordered_MultiSet::find (const T &item, + ITERATOR &iter) const +{ + // search an occurance of item, using iterator's current position as a hint + ACE_DNode *node = iter.current_; + int const result = locate (item, node, node); + + // if we found the node, update the iterator and indicate success + if (node && (result == 0)) + { + iter.current_ = node; + return 0; + } + + return -1; +} + + + +template void +ACE_Ordered_MultiSet::reset (void) +{ + ACE_TRACE ("reset"); + + this->delete_nodes (); +} + +template void +ACE_Ordered_MultiSet::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + // ACE_TRACE ("ACE_Ordered_MultiSet::dump"); + // + // ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + // ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nhead_ = %u"), this->head_)); + // ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nhead_->next_ = %u"), this->head_->next_)); + // ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\ncur_size_ = %d\n"), this->cur_size_)); + // + // T *item = 0; + // size_t count = 1; + // + // for (ACE_Ordered_MultiSet_Iterator iter (*(ACE_Ordered_MultiSet *) this); + // iter.next (item) != 0; + // iter.advance ()) + // ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("count = %d\n"), count++)); + // + // ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +template int +ACE_Ordered_MultiSet::insert_from (const T &item, ACE_DNode *position, + ACE_DNode **new_position) +{ + // ACE_TRACE ("ACE_Ordered_MultiSet::insert_from"); + + // create a new node + ACE_DNode *temp = 0; + ACE_NEW_MALLOC_RETURN (temp, + static_cast*> (this->allocator_->malloc (sizeof (ACE_DNode))), + ACE_DNode (item), + -1); + // obtain approximate location of the node + int result = locate (item, position, position); + + // if there are nodes in the multiset + if (position) + { + switch (result) + { + // insert after the approximate position + case -1: + + // if there is a following node + if (position->next_) + { + // link up with the following node + position->next_->prev_ = temp; + temp->next_ = position->next_; + } + else + // appending to the end of the set + tail_ = temp; + + // link up with the preceeding node + temp->prev_ = position; + position->next_ = temp; + + break; + + // insert before the position + case 0: + case 1: + + // if there is a preceeding node + if (position->prev_) + { + // link up with the preceeding node + position->prev_->next_ = temp; + temp->prev_ = position->prev_; + } + else + // prepending to the start of the set + head_ = temp; + + // link up with the preceeding node + temp->next_ = position; + position->prev_ = temp; + + break; + + default: + return -1; + } + } + else + { + // point the head and tail to the new node. + this->head_ = temp; + this->tail_ = temp; + } + + ++this->cur_size_; + if (new_position) + *new_position = temp; + + return 0; +} + +template int +ACE_Ordered_MultiSet::locate (const T &item, ACE_DNode *start_position, + ACE_DNode *&new_position) const +{ + if (! start_position) + start_position = this->head_; + + // If starting before the item, move forward until at or just before + // item. + while (start_position && start_position->item_ < item && + start_position->next_) + start_position = start_position->next_; + + // If starting after the item, move back until at or just after item + while (start_position && item < start_position->item_ && + start_position->prev_) + start_position = start_position->prev_; + + // Save the (approximate) location in the passed pointer. + new_position = start_position; + + // Show the location is after (1), before (-1) , or at (0) the item + if (!new_position) + return 1; + else if (item < new_position->item_) + return 1; + else if (new_position->item_ < item) + return -1; + else + return 0; +} + +// Looks for first occurance of in the ordered set, using the +// passed starting position as a hint: if there is such an instance, +// it updates the new_position pointer to point to one such node and +// returns 0; if there is no such node, then if there is a node before +// where the item would have been, it updates the new_position pointer +// to point to this node and returns -1; if there is no such node, +// then if there is a node after where the item would have been, it +// updates the new_position pointer to point to this node (or 0 if +// there is no such node) and returns 1; + +template void +ACE_Ordered_MultiSet::copy_nodes (const ACE_Ordered_MultiSet &us) +{ + ACE_DNode *insertion_point = this->head_; + + for (ACE_DNode *curr = us.head_; + curr != 0; + curr = curr->next_) + this->insert_from (curr->item_, insertion_point, &insertion_point); +} + +template void +ACE_Ordered_MultiSet::delete_nodes (void) +{ + // iterate through list, deleting nodes + for (ACE_DNode *curr = this->head_; + curr != 0; + ) + { + ACE_DNode *temp = curr; + curr = curr->next_; + ACE_DES_FREE_TEMPLATE (temp, + this->allocator_->free, + ACE_DNode, + ); + } + + this->head_ = 0; + this->tail_ = 0; + this->cur_size_ = 0; +} + +ACE_ALLOC_HOOK_DEFINE(ACE_Ordered_MultiSet_Iterator) + +template +ACE_Ordered_MultiSet_Iterator::ACE_Ordered_MultiSet_Iterator (ACE_Ordered_MultiSet &s) + : current_ (s.head_), + set_ (s) +{ + // ACE_TRACE ("ACE_Ordered_MultiSet_Iterator::ACE_Ordered_MultiSet_Iterator"); +} + +template int +ACE_Ordered_MultiSet_Iterator::next (T *&item) const +{ + // ACE_TRACE ("ACE_Ordered_MultiSet_Iterator::next"); + if (this->current_) + { + item = &this->current_->item_; + return 1; + } + + return 0; +} + +template T& +ACE_Ordered_MultiSet_Iterator::operator* (void) +{ + //ACE_TRACE ("ACE_Ordered_MultiSet_Iterator::operator*"); + T *retv = 0; + + int const result = this->next (retv); + ACE_ASSERT (result != 0); + ACE_UNUSED_ARG (result); + + return *retv; +} + +ACE_ALLOC_HOOK_DEFINE (ACE_DLList_Node) + +template T * +ACE_DLList::insert_tail (T *new_item) +{ + ACE_DLList_Node *temp1 = 0; + ACE_NEW_MALLOC_RETURN (temp1, + static_cast (this->allocator_->malloc (sizeof (ACE_DLList_Node))), + ACE_DLList_Node (new_item), + 0); + ACE_DLList_Node *temp2 = ACE_DLList_Base::insert_tail (temp1); + return (T *) (temp2 ? temp2->item_ : 0); +} + +template T * +ACE_DLList::insert_head (T *new_item) +{ + ACE_DLList_Node *temp1 = 0; + ACE_NEW_MALLOC_RETURN (temp1, + (ACE_DLList_Node *) this->allocator_->malloc (sizeof (ACE_DLList_Node)), + ACE_DLList_Node (new_item), 0); + ACE_DLList_Node *temp2 = ACE_DLList_Base::insert_head (temp1); + return (T *) (temp2 ? temp2->item_ : 0); +} + +template T * +ACE_DLList::delete_head (void) +{ + ACE_DLList_Node *temp1 = ACE_DLList_Base::delete_head (); + T *temp2 = (T *) (temp1 ? temp1->item_ : 0); + ACE_DES_FREE (temp1, + this->allocator_->free, + ACE_DLList_Node); + + return temp2; +} + +template T * +ACE_DLList::delete_tail (void) +{ + ACE_DLList_Node *temp1 = ACE_DLList_Base::delete_tail (); + T *temp2 = (T *) (temp1 ? temp1->item_ : 0); + ACE_DES_FREE (temp1, + this->allocator_->free, + ACE_DLList_Node); + return temp2; +} + +// **************************************************************** + +// Compare this array with for equality. + +template bool +ACE_Array::operator== (const ACE_Array &s) const +{ + if (this == &s) + return true; + else if (this->size () != s.size ()) + return false; + + const size_t len = s.size (); + for (size_t slot = 0; slot < len; ++slot) + if ((*this)[slot] != s[slot]) + return false; + + return true; +} + +// **************************************************************** + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_CONTAINERS_T_CPP */ diff --git a/ACE/ace/Containers_T.h b/ACE/ace/Containers_T.h new file mode 100644 index 00000000000..fe0ec6e9cc0 --- /dev/null +++ b/ACE/ace/Containers_T.h @@ -0,0 +1,2024 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Containers_T.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_CONTAINERS_T_H +#define ACE_CONTAINERS_T_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +// Need by ACE_DLList_Node. +#include "ace/Containers.h" + +// Shared with "ace/Unbounded_Set.h" +#include "ace/Node.h" + +// Backwards compatibility, please include "ace/Array_Base.h" directly. +#include "ace/Array_Base.h" + +// Backwards compatibility, please include "ace/Unbounded_Set.h" directly. +#include "ace/Unbounded_Set.h" + +// Backwards compatibility, please include "ace/Unbounded_Queue.h" directly. +#include "ace/Unbounded_Queue.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_Allocator; + + +/** + * @class ACE_Bounded_Stack + * + * @brief Implement a generic LIFO abstract data type. + * + * This implementation of a Stack uses a bounded array + * that is allocated dynamically. The Stack interface + * provides the standard constant time push, pop, and top + * operations. + * + * Requirements and Performance Characteristics + * - Internal Structure + * Dynamic array + * - Duplicates allowed? + * Yes + * - Random access allowed? + * No + * - Search speed + * N/A + * - Insert/replace speed + * N/A + * - Iterator still valid after change to container? + * N/A + * - Frees memory for removed elements? + * No + * - Items inserted by + * Value + * - Requirements for contained type + * -# Default constructor + * -# Copy constructor + * -# operator= + * + */ +template +class ACE_Bounded_Stack +{ +public: + // = Initialization, assignment, and termination methods. + + /// Initialize a new empty stack with the provided size.. + /** + * Initialize and allocate space for a new Bounded_Stack with the provided + * size. + */ + ACE_Bounded_Stack (size_t size); + + /// Initialize the stack to be a copy of the stack provided. + /** + * Initialize the stack to be an exact copy of the Bounded_Stack provided + * as a parameter. + */ + ACE_Bounded_Stack (const ACE_Bounded_Stack &s); + + /// Assignment operator + /** + * Perform a deep copy operation using the Bounded_Stack parameter. If the + * capacity of the lhs isn't sufficient for the rhs, then the underlying data + * structure will be reallocated to accomadate the larger number of elements. + */ + void operator= (const ACE_Bounded_Stack &s); + + /// Perform actions needed when stack goes out of scope. + /** + * Deallocate the memory used by the Bounded_Stack. + */ + ~ACE_Bounded_Stack (void); + + // = Classic Stack operations. + + ///Add an element to the top of the stack. + /** + * Place a new item on top of the stack. Returns -1 if the stack + * is already full, 0 if the stack is not already full, and -1 if + * failure occurs. + */ + int push (const T &new_item); + + ///Remove an item from the top of stack. + /** + * Remove and return the top stack item. Returns -1 if the stack is + * already empty, 0 if the stack is not already empty, and -1 if + * failure occurs. + */ + int pop (T &item); + + ///Examine the contents of the top of stack. + /** + * Return top stack item without removing it. Returns -1 if the + * stack is already empty, 0 if the stack is not already empty, and + * -1 if failure occurs. + */ + int top (T &item) const; + + // = Check boundary conditions. + + /// Returns 1 if the container is empty, otherwise returns 0. + /** + * Performs constant time check to determine if the stack is empty. + */ + int is_empty (void) const; + + /// Returns 1 if the container is full, otherwise returns 0. + /** + * Performs constant time check to determine if the stack is at capacity. + */ + int is_full (void) const; + + /// The number of items in the stack. + /** + * Return the number of items currently in the stack. + */ + size_t size (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// Size of the dynamically allocated data. + size_t size_; + + /// Keeps track of the current top of stack. + size_t top_; + + /// Holds the stack's contents. + T *stack_; +}; + +//---------------------------------------- + + +/** + * @class ACE_Fixed_Stack + * + * @brief Implement a generic LIFO abstract data type. + * + * This implementation of a Stack uses a fixed array + * with the size fixed at instantiation time. + * + * Requirements and Performance Characteristics + * - Internal Structure + * Fixed array + * - Duplicates allowed? + * Yes + * - Random access allowed? + * No + * - Search speed + * N/A + * - Insert/replace speed + * N/A + * - Iterator still valid after change to container? + * N/A + * - Frees memory for removed elements? + * No + * - Items inserted by + * Value + * - Requirements for contained type + * -# Default constructor + * -# Copy constructor + * -# operator= + * + */ +template +class ACE_Fixed_Stack +{ +public: + // = Initialization, assignment, and termination methods. + /// Initialize a new stack so that it is empty. + /** + * Initialize an empty stack. + */ + ACE_Fixed_Stack (void); + + /// The copy constructor (performs initialization). + /** + * Initialize the stack and copy the provided stack into the current stack. + */ + ACE_Fixed_Stack (const ACE_Fixed_Stack &s); + + /// Assignment operator (performs assignment). + /** + * Perform a deep copy of the provided stack. + */ + void operator= (const ACE_Fixed_Stack &s); + + /// Perform actions needed when stack goes out of scope. + /** + * Destroy the stack. + */ + ~ACE_Fixed_Stack (void); + + // = Classic Stack operations. + + ///Constant time placement of element on top of stack. + /** + * Place a new item on top of the stack. Returns -1 if the stack + * is already full, 0 if the stack is not already full, and -1 if + * failure occurs. + */ + int push (const T &new_item); + + ///Constant time removal of top of stack. + /** + * Remove and return the top stack item. Returns -1 if the stack is + * already empty, 0 if the stack is not already empty, and -1 if + * failure occurs. + */ + int pop (T &item); + + ///Constant time examination of top of stack. + /** + * Return top stack item without removing it. Returns -1 if the + * stack is already empty, 0 if the stack is not already empty, and + * -1 if failure occurs. + */ + int top (T &item) const; + + // = Check boundary conditions. + + /// Returns 1 if the container is empty, otherwise returns 0. + /** + * Performs constant time check to see if stack is empty. + */ + int is_empty (void) const; + + /// Returns 1 if the container is full, otherwise returns 0. + /** + * Performs constant time check to see if stack is full. + */ + int is_full (void) const; + + /// The number of items in the stack. + /** + * Constant time access to the current size of the stack. + */ + size_t size (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// Size of the allocated data. + size_t size_; + + /// Keeps track of the current top of stack. + size_t top_; + + /// Holds the stack's contents. + T stack_[ACE_SIZE]; +}; + +//---------------------------------------- + +template class ACE_Ordered_MultiSet; +template class ACE_Ordered_MultiSet_Iterator; + +/** + * @class ACE_DNode + * + * @brief Implementation element in a bilinked list. + */ +template +class ACE_DNode +{ + friend class ACE_Ordered_MultiSet; + friend class ACE_Ordered_MultiSet_Iterator; + +public: + + /// This isn't necessary, but it keeps some compilers happy. + ~ACE_DNode (void); + +private: + + // = Initialization methods + ACE_DNode (const T &i, ACE_DNode *n = 0, ACE_DNode *p = 0); + + /// Pointer to next element in the list of {ACE_DNode}s. + ACE_DNode *next_; + + /// Pointer to previous element in the list of {ACE_DNode}s. + ACE_DNode *prev_; + + /// Current value of the item in this node. + T item_; +}; + + + +/** + * @class ACE_Unbounded_Stack + * + * @brief Implement a generic LIFO abstract data type. + * + * This implementation of an unbounded Stack uses a linked list. + * If you use the {insert} or {remove} methods you should keep + * in mind that duplicate entries aren't allowed. In general, + * therefore, you should avoid the use of these methods since + * they aren't really part of the ADT stack. The stack is implemented + * as a doubly linked list. + * + * Requirements and Performance Characteristics + * - Internal Structure + * Double linked list + * - Duplicates allowed? + * No + * - Random access allowed? + * No + * - Search speed + * Linear + * - Insert/replace speed + * Linear + * - Iterator still valid after change to container? + * Yes + * - Frees memory for removed elements? + * Yes + * - Items inserted by + * Value + * - Requirements for contained type + * -# Default constructor + * -# Copy constructor + * -# operator= + * + */ +template +class ACE_Unbounded_Stack +{ +public: + friend class ACE_Unbounded_Stack_Iterator; + + // Trait definition. + typedef ACE_Unbounded_Stack_Iterator ITERATOR; + + // = Initialization, assignment, and termination methods. + /// Initialize a new stack so that it is empty. Use user defined + /// allocation strategy if specified. + /** + * Initialize an empty stack using the user specified allocation strategy + * if provided. + */ + ACE_Unbounded_Stack (ACE_Allocator *the_allocator = 0); + + /// The copy constructor (performs initialization). + /** + * Initialize this stack to be an exact copy of {s}. + */ + ACE_Unbounded_Stack (const ACE_Unbounded_Stack &s); + + /// Assignment operator (performs assignment). + /** + * Perform a deep copy of the rhs into the lhs. + */ + void operator= (const ACE_Unbounded_Stack &s); + + /// Perform actions needed when stack goes out of scope. + /** + * Destroy the underlying list for the stack. + */ + ~ACE_Unbounded_Stack (void); + + // = Classic Stack operations. + + + ///Push an element onto the top of stack. + /** + * Place a new item on top of the stack. Returns -1 if the stack + * is already full, 0 if the stack is not already full, and -1 if + * failure occurs. + */ + int push (const T &new_item); + + ///Pop the top element of the stack. + /** + * Remove and return the top stack item. Returns -1 if the stack is + * already empty, 0 if the stack is not already empty, and -1 if + * failure occurs. + */ + int pop (T &item); + + ///Examine the top of the stack. + /** + * Return top stack item without removing it. Returns -1 if the + * stack is already empty, 0 if the stack is not already empty, and + * -1 if failure occurs. + */ + int top (T &item) const; + + // = Check boundary conditions. + + /// Returns 1 if the container is empty, otherwise returns 0. + /** + * Constant time check to see if the stack is empty. + */ + int is_empty (void) const; + + /// Returns 1 if the container is full, otherwise returns 0. + /** + * Always resturns 0 since the stack is unbounded. + */ + int is_full (void) const; + + // = Auxiliary methods (not strictly part of the Stack ADT). + + ///Linear Insert of an item. + /** + * Insert {new_item} into the Stack at the head (but doesn't allow + * duplicates). Returns -1 if failures occur, 1 if item is already + * present (i.e., no duplicates are allowed), else 0. + */ + int insert (const T &new_item); + + /// Remove @a item from the Stack. Returns 0 if it removes the item, + /// -1 if it can't find the item, and -1 if a failure occurs. + /** + * Linear remove operation. + */ + int remove (const T &item); + + /// Finds if @a item occurs the set. Returns 0 if finds, else -1. + /** + * Linear find operation. + */ + int find (const T &item) const; + + /// The number of items in the stack. + /** + * Constant time access to the current stack size. + */ + size_t size (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// Delete all the nodes in the stack. + void delete_all_nodes (void); + + /// Copy all nodes from {s} to {this}. + void copy_all_nodes (const ACE_Unbounded_Stack &s); + + /// Head of the linked list of Nodes. + ACE_Node *head_; + + /// Current size of the stack. + size_t cur_size_; + + /// Allocation strategy of the stack. + ACE_Allocator *allocator_; +}; + +/** + * @class ACE_Unbounded_Stack_Iterator + * + * @brief Implement an iterator over an unbounded Stack. + */ +template +class ACE_Unbounded_Stack_Iterator +{ +public: + // = Initialization method. + /// Move to the first element in the {stack}. + ACE_Unbounded_Stack_Iterator (ACE_Unbounded_Stack &stack); + + // = Iteration methods. + + /// Pass back the @a next_item that hasn't been seen in the Stack. + /// Returns 0 when all items have been seen, else 1. + int next (T *&next_item); + + /// Move forward by one element in the Stack. Returns 0 when all the + /// items in the Stack have been seen, else 1. + int advance (void); + + /// Move to the first element in the Stack. Returns 0 if the + /// Stack is empty, else 1. + int first (void); + + /// Returns 1 when all items have been seen, else 0. + int done (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// Pointer to the current node in the iteration. + ACE_Node *current_; + + /// Pointer to the Stack we're iterating over. + ACE_Unbounded_Stack &stack_; +}; + +template +class ACE_Double_Linked_List; + +/** + * @class ACE_Double_Linked_List_Iterator_Base + * + * @brief Implements a common base class for iterators for a double + * linked list ADT + */ +template +class ACE_Double_Linked_List_Iterator_Base +{ +public: + // = Iteration methods. + + /// Passes back the {entry} under the iterator. Returns 0 if the + /// iteration has completed, otherwise 1 + int next (T *&) const; + + /** + * @deprecated Return the address of next (current) unvisited item in + * the list. 0 if there is no more element available. + */ + T *next (void) const; + + /// Returns 1 when all items have been seen, else 0. + int done (void) const; + + /// STL-like iterator dereference operator: returns a reference + /// to the node underneath the iterator. + T & operator* (void) const ; + + /** + * Retasks the iterator to iterate over a new + * Double_Linked_List. This allows clients to reuse an iterator + * without incurring the constructor overhead. If you do use this, + * be aware that if there are more than one reference to this + * iterator, the other "clients" may be very bothered when their + * iterator changes. @@ Here be dragons. Comments? + */ + void reset (ACE_Double_Linked_List &); + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + // = Initialization methods. + + /// Constructor + ACE_Double_Linked_List_Iterator_Base (const ACE_Double_Linked_List &); + + /// Copy constructor. + ACE_Double_Linked_List_Iterator_Base (const + ACE_Double_Linked_List_Iterator_Base + &iter); + + // = Iteration methods. + /** + * Move to the first element of the list. Returns 0 if the list is + * empty, else 1. + * @note the head of the ACE_DLList is actually a null entry, so the + * first element is actually the 2n'd entry + */ + int go_head (void); + + /// Move to the last element of the list. Returns 0 if the list is + /// empty, else 1. + int go_tail (void); + + /** + * Check if we reach the end of the list. Can also be used to get + * the *current* element in the list. Return the address of the + * current item if there are still elements left , 0 if we run out + * of element. + */ + T *not_done (void) const ; + + /// Advance to the next element in the list. Return the address of the + /// next element if there are more, 0 otherwise. + T *do_advance (void); + + /// Retreat to the previous element in the list. Return the address + /// of the previous element if there are more, 0 otherwise. + T *do_retreat (void); + + /// Dump the state of an object. + void dump_i (void) const; + + /// Remember where we are. + T *current_; + + const ACE_Double_Linked_List *dllist_; +}; + +/** + * @class ACE_Double_Linked_List_Iterator + * + * @brief Implements an iterator for a double linked list ADT + * + * Iterate thru the double-linked list. This class provides + * an interface that let users access the internal element + * addresses directly. Notice {class T} must declare + * ACE_Double_Linked_List<T>, + * ACE_Double_Linked_List_Iterator_Base <T> and + * ACE_Double_Linked_List_Iterator as friend classes and class T + * should also have data members T* next_ and T* prev_. + */ +template +class ACE_Double_Linked_List_Iterator : public ACE_Double_Linked_List_Iterator_Base +{ +public: + // = Initialization method. + ACE_Double_Linked_List_Iterator (const ACE_Double_Linked_List &); + + /** + * Retasks the iterator to iterate over a new + * Double_Linked_List. This allows clients to reuse an iterator + * without incurring the constructor overhead. If you do use this, + * be aware that if there are more than one reference to this + * iterator, the other "clients" may be very bothered when their + * iterator changes. + * @@ Here be dragons. Comments? + */ + void reset (ACE_Double_Linked_List &); + + /// Move to the first element in the list. Returns 0 if the + /// list is empty, else 1. + int first (void); + + /// Move forward by one element in the list. Returns 0 when all the + /// items in the list have been seen, else 1. + int advance (void); + + /** + * Advance the iterator while removing the original item from the + * list. Return a pointer points to the original (removed) item. + * If {dont_remove} equals 0, this function behaves like {advance} + * but return 0 (NULL) instead. + */ + T* advance_and_remove (int dont_remove); + + // = STL-style iteration methods + + /// Prefix advance. + ACE_Double_Linked_List_Iterator & operator++ (void); + + /// Postfix advance. + ACE_Double_Linked_List_Iterator operator++ (int); + + /// Prefix reverse. + ACE_Double_Linked_List_Iterator & operator-- (void); + + /// Postfix reverse. + ACE_Double_Linked_List_Iterator operator-- (int); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +/** + * @class ACE_Double_Linked_List_Reverse_Iterator + * + * @brief Implements a reverse iterator for a double linked list ADT + * + * Iterate backwards over the double-linked list. This class + * provide an interface that let users access the internal + * element addresses directly, which seems to break the + * encapsulation. Notice {class T} must declare + * ACE_Double_Linked_List<T>, + * ACE_Double_Linked_List_Iterator_Base <T> and + * ACE_Double_Linked_List_Iterator as friend classes and class T + * should also have data members T* next_ and T* prev_. + */ +template +class ACE_Double_Linked_List_Reverse_Iterator : public ACE_Double_Linked_List_Iterator_Base +{ +public: + // = Initialization method. + ACE_Double_Linked_List_Reverse_Iterator (ACE_Double_Linked_List &); + + /** + * Retasks the iterator to iterate over a new + * Double_Linked_List. This allows clients to reuse an iterator + * without incurring the constructor overhead. If you do use this, + * be aware that if there are more than one reference to this + * iterator, the other "clients" may be very bothered when their + * iterator changes. + * @@ Here be dragons. Comments? + */ + void reset (ACE_Double_Linked_List &); + + /// Move to the first element in the list. Returns 0 if the + /// list is empty, else 1. + int first (void); + + /// Move forward by one element in the list. Returns 0 when all the + /// items in the list have been seen, else 1. + int advance (void); + + /** + * Advance the iterator while removing the original item from the + * list. Return a pointer points to the original (removed) item. + * If {dont_remove} equals 0, this function behaves like {advance} + * but return 0 (NULL) instead. + */ + T* advance_and_remove (int dont_remove); + + // = STL-style iteration methods + + /// Prefix advance. + ACE_Double_Linked_List_Reverse_Iterator & operator++ (void); + + /// Postfix advance. + ACE_Double_Linked_List_Reverse_Iterator operator++ (int); + + /// Prefix reverse. + ACE_Double_Linked_List_Reverse_Iterator & operator-- (void); + + /// Postfix reverse. + ACE_Double_Linked_List_Reverse_Iterator operator-- (int); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + + +/** + * @class ACE_Double_Linked_List + * + * @brief A double-linked list implementation. + * + * This implementation of an unbounded double-linked list uses a + * circular linked list with a dummy node. It is pretty much + * like the {ACE_Unbounded_Queue} except that it allows removing + * of a specific element from a specific location. + * Notice that this class is an implementation of a very simple + * data structure. This is *NOT* a container class. You can use the + * class to implement other contains classes but it is *NOT* a + * general purpose container class. + * The parameter class *MUST* have members T* prev and T* next + * and users of this class are responsible to follow the general + * rules of using double-linked lists to maintaining the list + * integrity. + * If you need a double linked container class, use the DLList + * class which is a container but delegates to the Double_Linked_List + * class. + * + * Requirements and Performance Characteristics + * - Internal Structure + * Double Linked List + * - Duplicates allowed? + * Yes + * - Random access allowed? + * No + * - Search speed + * N/A + * - Insert/replace speed + * Linear + * - Iterator still valid after change to container? + * Yes + * - Frees memory for removed elements? + * No + * - Items inserted by + * Value + * - Requirements for contained type + * -# Default constructor + * -# Copy constructor + * -# operator= + * + */ +template +class ACE_Double_Linked_List +{ +public: + friend class ACE_Double_Linked_List_Iterator_Base; + friend class ACE_Double_Linked_List_Iterator; + friend class ACE_Double_Linked_List_Reverse_Iterator; + + // Trait definition. + typedef ACE_Double_Linked_List_Iterator ITERATOR; + typedef ACE_Double_Linked_List_Reverse_Iterator REVERSE_ITERATOR; + + // = Initialization and termination methods. + /// construction. Use user specified allocation strategy + /// if specified. + /** + * Initialize an empy list using the allocation strategy specified by the user. + * If none is specified, then use default allocation strategy. + */ + ACE_Double_Linked_List (ACE_Allocator *the_allocator = 0); + + /// Copy constructor. + /** + * Create a double linked list that is a copy of the provided + * parameter. + */ + ACE_Double_Linked_List (const ACE_Double_Linked_List &); + + /// Assignment operator. + /** + * Perform a deep copy of the provided list by first deleting the nodes of the + * lhs and then copying the nodes of the rhs. + */ + void operator= (const ACE_Double_Linked_List &); + + /// Destructor. + /** + * Clean up the memory allocated for the nodes of the list. + */ + ~ACE_Double_Linked_List (void); + + // = Check boundary conditions. + + /// Returns 1 if the container is empty, 0 otherwise. + /** + * Performs constant time check to determine if the list is empty. + */ + int is_empty (void) const; + + /// The list is unbounded, so this always returns 0. + /** + * Since the list is unbounded, the method simply returns 0. + */ + int is_full (void) const; + + // = Classic queue operations. + + /// Adds @a new_item to the tail of the list. Returns the new item + /// that was inserted. + /** + * Provides constant time insertion at the end of the list structure. + */ + T *insert_tail (T *new_item); + + /// Adds @a new_item to the head of the list.Returns the new item that + /// was inserted. + /** + * Provides constant time insertion at the head of the list. + */ + T *insert_head (T *new_item); + + /// Removes the head of the list and returns a pointer to that item. + /** + * Removes and returns the first {item} in the list. Returns + * internal node's address on success, 0 if the queue was empty. + * This method will *not* free the internal node. + */ + T* delete_head (void); + + /// Removes the tail of the list and returns a pointer to that item. + /** + * Removes and returns the last {item} in the list. Returns + * internal nodes's address on success, 0 if the queue was + * empty. This method will *not* free the internal node. + */ + T *delete_tail (void); + + // = Additional utility methods. + + ///Empty the list. + /** + * Reset the {ACE_Double_Linked_List} to be empty. + * Notice that since no one is interested in the items within, + * This operation will delete all items. + */ + void reset (void); + + /// Get the {slot}th element in the set. Returns -1 if the element + /// isn't in the range {0..{size} - 1}, else 0. + /** + * Iterates through the list to the desired index and assigns the provides pointer + * with the address of the node occupying that index. + */ + int get (T *&item, size_t slot = 0); + + /// The number of items in the queue. + /** + * Constant time call to return the current size of the list. + */ + size_t size (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Use DNode address directly. + /** + * Constant time removal of an item from the list using it's address. + */ + int remove (T *n); + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// Delete all the nodes in the list. + /** + * Removes and deallocates memory for all of the list nodes. + */ + void delete_nodes (void); + + /// Copy nodes from {rhs} into this list. + /** + * Copy the elements of the provided list by allocated new nodes and assigning + * them with the proper data. + */ + void copy_nodes (const ACE_Double_Linked_List &rhs); + + /// Setup header pointer. Called after we create the head node in ctor. + /** + * Initialize the head pointer so that the list has a dummy node. + */ + void init_head (void); + + ///Constant time insert a new item into the list structure. + /** + * Insert a @a new_item into the list. It will be added before + * or after @a old_item. Default is to insert the new item *after* + * {head_}. Return 0 if succeed, -1 if error occured. + */ + int insert_element (T *new_item, + int before = 0, + T *old_item = 0); + + ///Constant time delete an item from the list structure. + /** + * Remove @a item from the list. Return 0 if succeed, -1 otherwise. + * Notice that this function checks if item is {head_} and either its + * {next_} or {prev_} is NULL. The function resets item's {next_} and + * {prev_} to 0 to prevent clobbering the double-linked list if a user + * tries to remove the same node again. + */ + int remove_element (T *item); + + /// Head of the circular double-linked list. + T *head_; + + /// Size of this list. + size_t size_; + + /// Allocation Strategy of the queue. + ACE_Allocator *allocator_; +}; + + +template class ACE_DLList; +template class ACE_DLList_Iterator; +template class ACE_DLList_Reverse_Iterator; + +typedef ACE_Double_Linked_List ACE_DLList_Base; + +//typedef ACE_Double_Linked_List_Iterator +// ACE_DLList_Iterator_Base; +//typedef ACE_Double_Linked_List_Reverse_Iterator +// ACE_DLList_Reverse_Iterator_Base; +//@@ These two typedefs (inherited from James Hu's original design) +// have been removed because Sun CC 4.2 had problems with it. I guess +// having the DLList_Iterators inheriting from a class which is +// actually a typedef leads to problems. #define'ing rather than +// typedef'ing worked, but as per Carlos's reccomendation, I'm just +// replacing all references to the base classes with their actual +// type. Matt Braun (6/15/99) + +/** + * @class ACE_DLList + * + * @brief A double-linked list container class. + * + * This implementation uses ACE_Double_Linked_List to perform + * the logic behind this container class. It delegates all of its + * calls to ACE_Double_Linked_List. + */ +template +class ACE_DLList : public ACE_DLList_Base +{ + friend class ACE_DLList_Node; + friend class ACE_Double_Linked_List_Iterator; + friend class ACE_DLList_Iterator; + friend class ACE_DLList_Reverse_Iterator; + +public: + + /// Delegates to ACE_Double_Linked_List. + void operator= (const ACE_DLList &l); + + // = Classic queue operations. + + /// Delegates to ACE_Double_Linked_List. + T *insert_tail (T *new_item); + + /// Delegates to ACE_Double_Linked_List. + T *insert_head (T *new_item); + + /// Delegates to ACE_Double_Linked_List. + T *delete_head (void); + + /// Delegates to ACE_Double_Linked_List. + T *delete_tail (void); + + // = Additional utility methods. + + /** + * Delegates to {ACE_Double_Linked_List}, but where + * {ACE_Double_Linked_List} returns the node as the item, this get + * returns the contents of the node in item. + */ + int get (T *&item, size_t slot = 0); + + /// Delegates to ACE_Double_Linked_List. + void dump (void) const; + + /// Delegates to ACE_Double_Linked_List. + int remove (ACE_DLList_Node *n); + + // = Initialization and termination methods. + + /// Delegates to ACE_Double_Linked_List. + ACE_DLList (ACE_Allocator *the_allocator = 0); + + /// Delegates to ACE_Double_Linked_List. + ACE_DLList (const ACE_DLList &l); + + /// Deletes the list starting from the head. + ~ACE_DLList (void); +}; + +/** + * @class ACE_DLList_Iterator + * + * @brief A double-linked list container class iterator. + * + * This implementation uses ACE_Double_Linked_List_Iterator to + * perform the logic behind this container class. It delegates + * all of its calls to ACE_Double_Linked_List_Iterator. + */ +template +class ACE_DLList_Iterator : public ACE_Double_Linked_List_Iterator +{ + + friend class ACE_DLList; + friend class ACE_DLList_Node; + +public: + + // = Initialization method. + ACE_DLList_Iterator (ACE_DLList &l); + + /** + * Retasks the iterator to iterate over a new + * Double_Linked_List. This allows clients to reuse an iterator + * without incurring the constructor overhead. If you do use this, + * be aware that if there are more than one reference to this + * iterator, the other "clients" may be very bothered when their + * iterator changes. + * @@ Here be dragons. Comments? + */ + void reset (ACE_DLList &l); + + // = Iteration methods. + /// Move forward by one element in the list. Returns 0 when all the + /// items in the list have been seen, else 1. + int advance (void); + + /// Pass back the {next_item} that hasn't been seen in the list. + /// Returns 0 when all items have been seen, else 1. + int next (T *&); + + /** + * @deprecated Delegates to ACE_Double_Linked_List_Iterator, except that + * whereas the Double_Linked_List version of next returns the node, this next + * returns the contents of the node + */ + T *next (void) const; + + /** + * Removes the current item (i.e., {next}) from the list. + * Note that DLList iterators do not support {advance_and_remove} + * directly (defined in its base class) and you will need to + * release the element returned by it. + */ + int remove (void); + + /// Delegates to ACE_Double_Linked_List_Iterator. + void dump (void) const; + +private: + ACE_DLList *list_; +}; + +/** + * @class ACE_DLList_Reverse_Iterator + * + * @brief A double-linked list container class iterator. + * + * This implementation uses ACE_Double_Linked_List_Iterator to + * perform the logic behind this container class. It delegates + * all of its calls to ACE_Double_Linked_List_Iterator. + */ +template +class ACE_DLList_Reverse_Iterator : public ACE_Double_Linked_List_Reverse_Iterator +{ + + friend class ACE_DLList; + friend class ACE_DLList_Node; + +public: + + // = Initialization method. + ACE_DLList_Reverse_Iterator (ACE_DLList &l); + + /** + * Retasks the iterator to iterate over a new + * Double_Linked_List. This allows clients to reuse an iterator + * without incurring the constructor overhead. If you do use this, + * be aware that if there are more than one reference to this + * iterator, the other "clients" may be very bothered when their + * iterator changes. + * @@ Here be dragons. Comments? + */ + void reset (ACE_DLList &l); + + // = Iteration methods. + /// Move forward by one element in the list. Returns 0 when all the + /// items in the list have been seen, else 1. + int advance (void); + + /// Pass back the {next_item} that hasn't been seen in the list. + /// Returns 0 when all items have been seen, else 1. + int next (T *&); + + /// @deprecated Delegates to ACE_Double_Linked_List_Iterator. + T *next (void) const; + + /// Removes the current item (i.e., {next}) from the list. + /// Note that DLList iterators do not support {advance_and_remove} + /// directly (defined in its base class) and you will need to + /// release the element returned by it. + int remove (void); + + /// Delegates to ACE_Double_Linked_List_Iterator. + void dump (void) const; + +private: + ACE_DLList *list_; +}; + +// Forward declaration. +template +class ACE_Fixed_Set; + +/** + * @class ACE_Fixed_Set_Iterator_Base + * + * @brief Implements a common base class for iterators for a unordered set. + */ +template +class ACE_Fixed_Set_Iterator_Base +{ +public: + // = Iteration methods. + + /// Pass back the {next_item} that hasn't been seen in the Set. + /// Returns 0 when all items have been seen, else 1. + int next (T *&next_item); + + /// Move forward by one element in the set. Returns 0 when all the + /// items in the set have been seen, else 1. + int advance (void); + + /// Move to the first element in the set. Returns 0 if the + /// set is empty, else 1. + int first (void); + + /// Returns 1 when all items have been seen, else 0. + int done (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + // = Initialization method. + ACE_Fixed_Set_Iterator_Base (ACE_Fixed_Set &s); + + /// Set we are iterating over. + ACE_Fixed_Set &s_; + + /// How far we've advanced over the set. + ssize_t next_; + + /// The number of non free items that the iterator had pointed at. + size_t iterated_items_; + + /// Dump the state of an object. + void dump_i (void) const; + + /// Pass back the {next_item} that hasn't been seen in the Set. + /// Returns 0 when all items have been seen, else 1. + int next_i (T *&next_item); +}; + +/** + * @class ACE_Fixed_Set_Iterator + * + * @brief Iterates through an unordered set. + * + * This implementation of an unordered set uses a fixed array. + * Allows deletions while iteration is occurring. + */ +template +class ACE_Fixed_Set_Iterator : public ACE_Fixed_Set_Iterator_Base +{ +public: + // = Initialization method. + ACE_Fixed_Set_Iterator (ACE_Fixed_Set &s); + + // = Iteration methods. + + /// Pass back the {next_item} that hasn't been seen in the Set. + /// Returns 0 when all items have been seen, else 1. + int next (T *&next_item); + + /// Dump the state of an object. + void dump (void) const; + + /// Remove the item where the itearetor is located at. + /// Returns 1 if it removes a item, else 0. + /// Pass back the removed {item}. + int remove (T *&item); + + /// STL-like iterator dereference operator: returns a reference + /// to the node underneath the iterator. + T & operator* (void); + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +/** + * @class ACE_Fixed_Set_Const_Iterator + * + * @brief Iterates through a const unordered set. + * + * This implementation of an unordered set uses a fixed array. + */ +template +class ACE_Fixed_Set_Const_Iterator : public ACE_Fixed_Set_Iterator_Base +{ +public: + // = Initialization method. + ACE_Fixed_Set_Const_Iterator (const ACE_Fixed_Set &s); + + // = Iteration methods. + + /// Pass back the {next_item} that hasn't been seen in the Set. + /// Returns 0 when all items have been seen, else 1. + int next (const T *&next_item); + + /// Dump the state of an object. + void dump (void) const; + + /// STL-like iterator dereference operator: returns a reference + /// to the node underneath the iterator. + const T & operator* (void) const ; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +/** + * @class ACE_Fixed_Set + * + * @brief Implement a simple unordered set of {T} with maximum {ACE_SIZE}. + * + * This implementation of an unordered set uses a fixed array. + * It does not allow duplicate members. The set provides linear insertion/deletion + * operations. + * + * Requirements and Performance Characteristics + * - Internal Structure + * Fixed array + * - Duplicates allowed? + * No + * - Random access allowed? + * No + * - Search speed + * Linear + * - Insert/replace speed + * Linear + * - Iterator still valid after change to container? + * Yes + * - Frees memory for removed elements? + * No + * - Items inserted by + * Value + * - Requirements for contained type + * -# Default constructor + * -# Copy constructor + * -# operator= + * -# operator== + * + */ +template +class ACE_Fixed_Set +{ +public: + friend class ACE_Fixed_Set_Iterator_Base; + friend class ACE_Fixed_Set_Iterator; + friend class ACE_Fixed_Set_Const_Iterator; + + // Trait definitions. + typedef ACE_Fixed_Set_Iterator ITERATOR; + typedef ACE_Fixed_Set_Const_Iterator CONST_ITERATOR; + + // = Initialization and termination methods. + /// Default Constructor. + /** + * Creates an empy set + */ + ACE_Fixed_Set (void); + + /// Copy constructor. + /** + * Initializes a set to be a copy of the set parameter. + */ + ACE_Fixed_Set (const ACE_Fixed_Set &); + + /// Assignment operator. + /** + * Deep copy of one set to another. + */ + void operator= (const ACE_Fixed_Set &); + + /// Destructor. + /** + * Destroys a set. + */ + ~ACE_Fixed_Set (void); + + // = Check boundary conditions. + + /// Returns 1 if the container is empty, otherwise returns 0. + /** + * Performs constant time check to determine if a set is empty. + */ + int is_empty (void) const; + + /// Returns 1 if the container is full, otherwise returns 0. + /** + * Performs a constant time check to see if the set is full. + */ + int is_full (void) const; + + // = Classic unordered set operations. + + ///Linear time insertion of an item unique to the set. + /** + * Insert @a new_item into the set (doesn't allow duplicates). + * Returns -1 if failures occur, 1 if item is already present, else + * 0. + */ + int insert (const T &new_item); + + ///Linear time removal operation of an item. + /** + * Remove first occurrence of {item} from the set. Returns 0 if + * it removes the item, -1 if it can't find the item, and -1 if a + * failure occurs. Removal doesn't reclaim memory for the @a item. + */ + int remove (const T &item); + + /// Finds if @a item occurs in the set. Returns 0 if finds, else -1. + /** + * Performs a linear find operation for the specified @a item. + */ + int find (const T &item) const; + + /// Size of the set. + /** + * Returns the current size of the set. + */ + size_t size (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// Holds the contents of the set. + struct + { + /// Item in the set. + T item_; + + /// Keeps track of whether this item is in use or not. + int is_free_; + } search_structure_[ACE_SIZE]; + + /// Current size of the set. + size_t cur_size_; + + /// Maximum size of the set. + size_t max_size_; +}; + +// Forward declaration. +template +class ACE_Bounded_Set; + +/** + * @class ACE_Bounded_Set_Iterator + * + * @brief Iterates through an unordered set. + * + * This implementation of an unordered set uses a Bounded array. + * Allows deletions while iteration is occurring. + */ +template +class ACE_Bounded_Set_Iterator +{ +public: + // = Initialization method. + ACE_Bounded_Set_Iterator (ACE_Bounded_Set &s); + + // = Iteration methods. + + /// Pass back the {next_item} that hasn't been seen in the Set. + /// Returns 0 when all items have been seen, else 1. + int next (T *&next_item); + + /// Move forward by one element in the set. Returns 0 when all the + /// items in the set have been seen, else 1. + int advance (void); + + /// Move to the first element in the set. Returns 0 if the + /// set is empty, else 1. + int first (void); + + /// Returns 1 when all items have been seen, else 0. + int done (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// Set we are iterating over. + ACE_Bounded_Set &s_; + + /// How far we've advanced over the set. + ssize_t next_; +}; + + +/** + * @class ACE_Bounded_Set + * + * @brief Implement a simple unordered set of {T} with maximum + * set at creation time. + * + * This implementation of an unordered set uses a Bounded array. + * This implementation does not allow duplicates. It provides + * linear insert/remove/find operations. Insertion/removal does not + * invalidate iterators, but caution should be taken to ensure + * expected behavior. Once initialized, the object has a maximum size + * which can only be increased by the assignment of another larger Bounded_Set. + * + * Requirements and Performance Characteristics + * - Internal Structure + * Bounded array which can grow via assignment + * - Duplicates allowed? + * No + * - Random access allowed? + * No + * - Search speed + * Linear + * - Insert/replace speed + * Linear + * - Iterator still valid after change to container? + * Yes + * - Frees memory for removed elements? + * No + * - Items inserted by + * Value + * - Requirements for contained type + * -# Default constructor + * -# Copy constructor + * -# operator= + * -# operator== + * + */ +template +class ACE_Bounded_Set +{ +public: + friend class ACE_Bounded_Set_Iterator; + + // Trait definition. + typedef ACE_Bounded_Set_Iterator ITERATOR; + + enum + { + DEFAULT_SIZE = 10 + }; + + // = Initialization and termination methods. + /// Construct a Bounded_Set using the default size. + /** + * The default constructor initializes the Bounded_Set to a maximum size + * specified by the DEFAULT_SIZE. + */ + ACE_Bounded_Set (void); + + /// Construct a Bounded_Set with the provided sizeB. + /** + * Initialize the Bounded_Set to have a maximum size equal to the size + * parameter specified. + */ + ACE_Bounded_Set (size_t size); + + /// Construct a Bounded_Set that is a copy of the provides Bounded_Set. + /** + * Initialize the Bounded_Set to be a copy of the Bounded_Set parameter. + */ + ACE_Bounded_Set (const ACE_Bounded_Set &); + + /// Assignment operator. + /** + * The assignment will make a deep copy of the Bounded_Set provided. If the + * rhs has more elements than the capacity of the lhs, then the lhs will be + * deleted and reallocated to accomadate the larger number of elements. + */ + void operator= (const ACE_Bounded_Set &); + + /// Destructor + /** + * Clean up the underlying dynamically allocated memory that is used by + * the Bounded_Set. + */ + ~ACE_Bounded_Set (void); + + // = Check boundary conditions. + + /// Returns 1 if the container is empty, otherwise returns 0. + /** + * A constant time check is performed to determine if the Bounded_Set is + * empty. + */ + int is_empty (void) const; + + /// Returns 1 if the container is full, otherwise returns 0. + /** + * Performs a constant time check to determine if the Bounded_Set is at + * capacity. + */ + int is_full (void) const; + + // = Classic unordered set operations. + + ///Inserts a new element unique to the set. + /** + * Insert @a new_item into the set (doesn't allow duplicates) in linear + * time. + * Returns -1 if failures occur, 1 if item is already present, else + * 0. + */ + int insert (const T &new_item); + + ///Finds the specified element and removes it from the set. + /** + * Remove first occurrence of @a item from the set. Returns 0 if it + * removes the item, -1 if it can't find the item, and -1 if a + * failure occurs. The linear remove operation does not reclaim the + * memory associated with the removed item. + */ + int remove (const T &item); + + /// Finds if @a item occurs in the set. Returns 0 if finds, else -1. + /** + * find preforms a linear search for {item} and returns 0 on successful + * find and -1 otherwise. + */ + int find (const T &item) const; + + /// Size of the set. + /** + * Returns a size_t representing the current size of the set. + */ + size_t size (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + struct Search_Structure + { + /// Item in the set. + T item_; + + /// Keeps track of whether this item is in use or not. + int is_free_; + }; + + /// Holds the contents of the set. + Search_Structure *search_structure_; + + /// Current size of the set. + size_t cur_size_; + + /// Maximum size of the set. + size_t max_size_; +}; + +/** + * @class ACE_Ordered_MultiSet_Iterator + * + * @brief Implement a bidirectional iterator over an ordered multiset. + * This class template requires that < operator semantics be + * defined for the parameterized type {T}, but does not impose + * any restriction on how that ordering operator is implemented. + */ +template +class ACE_Ordered_MultiSet_Iterator +{ +public: + friend class ACE_Ordered_MultiSet; + + // = Initialization method. + ACE_Ordered_MultiSet_Iterator (ACE_Ordered_MultiSet &s); + + // = Iteration methods. + + /// Pass back the {next_item} that hasn't been seen in the ordered multiset. + /// Returns 0 when all items have been seen, else 1. + int next (T *&next_item) const; + + /// Repositions the iterator at the first item in the ordered multiset + /// Returns 0 if the list is empty else 1. + int first (void); + + /// Repositions the iterator at the last item in the ordered multiset + /// Returns 0 if the list is empty else 1. + int last (void); + + /// Move forward by one element in the set. Returns 0 when all the + /// items in the set have been seen, else 1. + int advance (void); + + /// Move backward by one element in the set. Returns 0 when all the + /// items in the set have been seen, else 1. + int retreat (void); + + /// Returns 1 when all items have been seen, else 0. + int done (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Returns a reference to the internal element {this} is pointing to. + T& operator* (void); + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + + /// Pointer to the current node in the iteration. + ACE_DNode *current_; + + /// Pointer to the set we're iterating over. + ACE_Ordered_MultiSet &set_; +}; + + +/** + * @class ACE_Ordered_MultiSet + * + * @brief Implement a simple ordered multiset of {T} of unbounded size + * that allows duplicates. This class template requires that < + * operator semantics be defined for the parameterized type {T}, but + * does not impose any restriction on how that ordering operator is + * implemented. The set is implemented as a linked list. + * + * + * Requirements and Performance Characteristics + * - Internal Structure + * Double linked list + * - Duplicates allowed? + * Yes + * - Random access allowed? + * No + * - Search speed + * Linear + * - Insert/replace speed + * Linear + * - Iterator still valid after change to container? + * Yes + * - Frees memory for removed elements? + * Yes + * - Items inserted by + * Value + * - Requirements for contained type + * -# Default constructor + * -# Copy constructor + * -# operator= + * -# operator== + * -# operator< + * + * + */ +template +class ACE_Ordered_MultiSet +{ +public: + friend class ACE_Ordered_MultiSet_Iterator; + + // Trait definition. + typedef ACE_Ordered_MultiSet_Iterator ITERATOR; + + // = Initialization and termination methods. + /// Constructor. Use user specified allocation strategy + /// if specified. + /** + * Initialize the set using the allocation strategy specified. If none, use the + * default strategy. + */ + ACE_Ordered_MultiSet (ACE_Allocator *the_allocator = 0); + + /// Copy constructor. + /** + * Initialize the set to be a copy of the provided set. + */ + ACE_Ordered_MultiSet (const ACE_Ordered_MultiSet &); + + /// Destructor. + /** + * Delete the nodes of the set. + */ + ~ACE_Ordered_MultiSet (void); + + /// Assignment operator. + /** + * Delete the nodes in lhs, and copy the nodes from the rhs. + */ + void operator= (const ACE_Ordered_MultiSet &); + + // = Check boundary conditions. + + /// Returns 1 if the container is empty, otherwise returns 0. + /** + * Constant time check to determine if the set is empty. + */ + int is_empty (void) const; + + /// Size of the set. + /** + * Constant time check to determine the size of the set. + */ + size_t size (void) const; + + // = Classic unordered set operations. + + /// Insert @a new_item into the ordered multiset. + /// Returns -1 if failures occur, else 0. + /** + * Linear time, order preserving insert into the set beginning at the head. + */ + int insert (const T &new_item); + + ///Linear time insert beginning at the point specified by the provided iterator. + /** + * Insert @a new_item into the ordered multiset, starting its search at + * the node pointed to by the iterator, and if insertion was successful, + * updates the iterator to point to the newly inserted node. + * Returns -1 if failures occur, else 0. + */ + int insert (const T &new_item, ITERATOR &iter); + + /// Remove first occurrence of @a item from the set. Returns 0 if + /// it removes the item, -1 if it can't find the item. + /** + * Linear time search operation which removes the item from the set if found . + */ + int remove (const T &item); + + ///Linear find operation. + /** + * Finds first occurrence of @a item in the multiset, using the iterator's + * current position as a hint to improve performance. If find succeeds, + * it positions the iterator at that node and returns 0, or if it cannot + * locate the node, it leaves the iterator alone and just returns -1. + */ + int find (const T &item, ITERATOR &iter) const; + + /// Reset the ACE_Ordered_MultiSet to be empty. + /** + * Delete the nodes inside the set. + */ + void reset (void); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + + /** + * Insert @a item, starting its search at the position given, + * and if successful updates the passed pointer to point to + * the newly inserted item's node. + */ + int insert_from (const T &item, ACE_DNode *start_position, + ACE_DNode **new_position); + + /** + * Looks for first occurance of @a item in the ordered set, using the + * passed starting position as a hint: if there is such an instance, it + * updates the new_position pointer to point to this node and returns 0; + * if there is no such node, then if there is a node before where the + * item would have been, it updates the new_position pointer to point + * to this node and returns -1; if there is no such node, then if there + * is a node after where the item would have been, it updates the + * new_position pointer to point to this node (or 0 if there is no such + * node) and returns 1; + */ + int locate (const T &item, ACE_DNode *start_position, + ACE_DNode *&new_position) const; + + /// Delete all the nodes in the Set. + void delete_nodes (void); + + /// Copy nodes into this set. + void copy_nodes (const ACE_Ordered_MultiSet &); + + /// Head of the bilinked list of Nodes. + ACE_DNode *head_; + + /// Head of the bilinked list of Nodes. + ACE_DNode *tail_; + + /// Current size of the set. + size_t cur_size_; + + /// Allocation strategy of the set. + ACE_Allocator *allocator_; +}; + +// **************************************************************** + +/** + * @class ACE_Array + * + * @brief A dynamic array class. + * + * This class extends ACE_Array_Base, adding comparison operators. + * + * Requirements and Performance Characteristics + * - Internal Structure + * Dynamic array + * - Duplicates allowed? + * Yes + * - Random access allowed? + * Yes + * - Search speed + * N/A + * - Insert/replace speed + * O(1) + * - Iterator still valid after change to container? + * - In general, yes. + * - If array size is changed during iteration, no. + * - Frees memory for removed elements? + * No + * - Items inserted by + * Value + * - Requirements for contained type + * -# Default constructor + * -# Copy constructor + * -# operator= + * -# operator!= + * + * @sa ACE_Array_Base. This class inherits its operations and requirements. + */ +template +class ACE_Array : public ACE_Array_Base +{ +public: + // Define a "trait" + typedef T TYPE; + + typedef ACE_Array_Iterator ITERATOR; + + // = Exceptions. + + // = Initialization and termination methods. + + /// Dynamically create an uninitialized array. + /** + * Initialize an empty array of the specified size using the provided + * allocation strategy. + */ + ACE_Array (size_t size = 0, + ACE_Allocator* alloc = 0); + + /// Dynamically initialize the entire array to the {default_value}. + /** + * Initialize an array the given size placing the default_value in each index. + */ + ACE_Array (size_t size, + const T &default_value, + ACE_Allocator* alloc = 0); + + ///Copy constructor. + /** + * The copy constructor performs initialization by making an exact + * copy of the contents of parameter {s}, i.e., *this == s will + * return true. + */ + ACE_Array (const ACE_Array &s); + + ///Assignment operator + /** + * Assignment operator performs an assignment by making an exact + * copy of the contents of parameter {s}, i.e., *this == s will + * return true. Note that if the {max_size_} of {array_} is >= than + * {s.max_size_} we can copy it without reallocating. However, if + * {max_size_} is < {s.max_size_} we must delete the {array_}, + * reallocate a new {array_}, and then copy the contents of {s}. + */ + void operator= (const ACE_Array &s); + + // = Compare operators + + ///Equality comparison operator. + /** + * Compare this array with {s} for equality. Two arrays are equal + * if their {size}'s are equal and all the elements from 0 .. {size} + * are equal. + */ + bool operator== (const ACE_Array &s) const; + + ///Inequality comparison operator. + /** + * Compare this array with {s} for inequality such that {*this} != + * {s} is always the complement of the boolean return value of + * {*this} == {s}. + */ + bool operator!= (const ACE_Array &s) const; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Containers_T.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Containers_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Containers_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" + +#endif /* ACE_CONTAINERS_T_H */ diff --git a/ACE/ace/Containers_T.inl b/ACE/ace/Containers_T.inl new file mode 100644 index 00000000000..425d6e167e8 --- /dev/null +++ b/ACE/ace/Containers_T.inl @@ -0,0 +1,479 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE int +ACE_Bounded_Stack::is_empty (void) const +{ + ACE_TRACE ("ACE_Bounded_Stack::is_empty"); + return this->top_ == 0; +} + +template ACE_INLINE int +ACE_Bounded_Stack::is_full (void) const +{ + ACE_TRACE ("ACE_Bounded_Stack::is_full"); + return this->top_ >= this->size_; +} + +template ACE_INLINE int +ACE_Bounded_Stack::push (const T &new_item) +{ + ACE_TRACE ("ACE_Bounded_Stack::push"); + if (this->is_full () == 0) + { + this->stack_[this->top_++] = new_item; + return 0; + } + else + return -1; +} + +template ACE_INLINE int +ACE_Bounded_Stack::pop (T &item) +{ + ACE_TRACE ("ACE_Bounded_Stack::pop"); + if (this->is_empty () == 0) + { + item = this->stack_[--this->top_]; + return 0; + } + else + return -1; +} + +template ACE_INLINE int +ACE_Bounded_Stack::top (T &item) const +{ + ACE_TRACE ("ACE_Bounded_Stack::top"); + if (this->is_empty () == 0) + { + item = this->stack_[this->top_ - 1]; + return 0; + } + else + return -1; +} + +template ACE_INLINE size_t +ACE_Bounded_Stack::size (void) const +{ + return this->size_; +} + +//---------------------------------------- + +template ACE_INLINE int +ACE_Fixed_Stack::is_empty (void) const +{ + ACE_TRACE ("ACE_Fixed_Stack::is_empty"); + return this->top_ == 0; +} + +template ACE_INLINE int +ACE_Fixed_Stack::is_full (void) const +{ + ACE_TRACE ("ACE_Fixed_Stack::is_full"); + return this->top_ >= this->size_; +} + +template ACE_INLINE int +ACE_Fixed_Stack::push (const T &new_item) +{ + ACE_TRACE ("ACE_Fixed_Stack::push"); + if (this->is_full () == 0) + { + this->stack_[this->top_++] = new_item; + return 0; + } + else + return -1; +} + +template ACE_INLINE int +ACE_Fixed_Stack::pop (T &item) +{ + ACE_TRACE ("ACE_Fixed_Stack::pop"); + if (this->is_empty () == 0) + { + item = this->stack_[--this->top_]; + return 0; + } + else + return -1; +} + +template ACE_INLINE int +ACE_Fixed_Stack::top (T &item) const +{ + ACE_TRACE ("ACE_Fixed_Stack::top"); + if (this->is_empty () == 0) + { + item = this->stack_[this->top_ - 1]; + return 0; + } + else + return -1; +} + +template ACE_INLINE size_t +ACE_Fixed_Stack::size (void) const +{ + return this->size_; +} + +template ACE_INLINE int +ACE_Unbounded_Stack::is_empty (void) const +{ + // ACE_TRACE ("ACE_Unbounded_Stack::is_empty"); + return this->head_ == this->head_->next_; +} + +template ACE_INLINE int +ACE_Unbounded_Stack::top (T &item) const +{ + ACE_TRACE ("ACE_Unbounded_Stack::top"); + if (this->is_empty () == 0) + { + item = this->head_->next_->item_; + return 0; + } + else + return -1; +} + +template ACE_INLINE int +ACE_Unbounded_Stack::is_full (void) const +{ + ACE_TRACE ("ACE_Unbounded_Stack::is_full"); + return 0; // ??? +} + +template ACE_INLINE size_t +ACE_Unbounded_Stack::size (void) const +{ + return this->cur_size_; +} + +// --- + + +// --- + +template ACE_INLINE int +ACE_Fixed_Set::is_empty (void) const +{ + ACE_TRACE ("ACE_Fixed_Set::is_empty"); + return this->cur_size_ == 0; +} + +template ACE_INLINE int +ACE_Fixed_Set::is_full (void) const +{ + ACE_TRACE ("ACE_Fixed_Set::is_full"); + return this->cur_size_ == this->max_size_; +} + +// --- + +template ACE_INLINE int +ACE_Bounded_Set::is_empty (void) const +{ + ACE_TRACE ("ACE_Bounded_Set::is_empty"); + return this->cur_size_ == 0; +} + +template ACE_INLINE int +ACE_Bounded_Set::is_full (void) const +{ + ACE_TRACE ("ACE_Bounded_Set::is_full"); + return this->cur_size_ == this->max_size_; +} + +// -- + +template ACE_INLINE int +ACE_Ordered_MultiSet_Iterator::first (void) +{ + ACE_TRACE ("ACE_Ordered_MultiSet_Iterator::first"); + current_ = set_.head_; + + return (current_ ? 1 : 0); +} + +template ACE_INLINE int +ACE_Ordered_MultiSet_Iterator::last (void) +{ + ACE_TRACE ("ACE_Ordered_MultiSet_Iterator::last"); + current_ = set_.tail_; + + return (current_ ? 1 : 0); +} + +template ACE_INLINE int +ACE_Ordered_MultiSet_Iterator::advance (void) +{ + ACE_TRACE ("ACE_Ordered_MultiSet_Iterator::advance"); + + current_ = current_ ? current_->next_ : 0; + + return (current_ ? 1 : 0); +} + +template ACE_INLINE int +ACE_Ordered_MultiSet_Iterator::retreat (void) +{ + ACE_TRACE ("ACE_Ordered_MultiSet_Iterator::retreat"); + + current_ = current_ ? current_->prev_ : 0; + + return (current_ ? 1 : 0); +} + +template ACE_INLINE int +ACE_Ordered_MultiSet_Iterator::done (void) const +{ + ACE_TRACE ("ACE_Ordered_MultiSet_Iterator::done"); + + return (current_ ? 0 : 1); +} + +template ACE_INLINE void +ACE_Ordered_MultiSet_Iterator::dump (void) const +{ +#if defined (ACE_HAS_DUMP) +// ACE_TRACE ("ACE_Ordered_MultiSet_Iterator::dump"); +#endif /* ACE_HAS_DUMP */ +} + + + +// -- + +template ACE_INLINE int +ACE_Ordered_MultiSet::is_empty (void) const +{ + ACE_TRACE ("ACE_Ordered_MultiSet::is_empty"); + return this->cur_size_ > 0 ? 0 : 1; +} + +template ACE_INLINE size_t +ACE_Ordered_MultiSet::size (void) const +{ +// ACE_TRACE ("ACE_Ordered_MultiSet::size"); + return this->cur_size_; +} + +// **************************************************************** + +template ACE_INLINE +ACE_Array::ACE_Array (size_t size, + ACE_Allocator *alloc) + : ACE_Array_Base (size, alloc) +{ +} + +template ACE_INLINE +ACE_Array::ACE_Array (size_t size, + const T &default_value, + ACE_Allocator *alloc) + : ACE_Array_Base (size, default_value, alloc) +{ +} + +// The copy constructor (performs initialization). + +template ACE_INLINE +ACE_Array::ACE_Array (const ACE_Array &s) + : ACE_Array_Base (s) +{ +} + +// Assignment operator (performs assignment). + +template ACE_INLINE void +ACE_Array::operator= (const ACE_Array &s) +{ + // Check for "self-assignment". + + if (this != &s) + this->ACE_Array_Base::operator= (s); +} + +// Compare this array with for inequality. + +template ACE_INLINE bool +ACE_Array::operator!= (const ACE_Array &s) const +{ + return !(*this == s); +} + +// **************************************************************** + + +// **************************************************************** + +template ACE_INLINE void +ACE_DLList::operator= (const ACE_DLList &l) +{ + *(ACE_DLList_Base *) this = l; +} + +template ACE_INLINE int +ACE_DLList::get (T *&item, size_t index) +{ + ACE_DLList_Node *node; + int result = ACE_DLList_Base::get (node, index); + if (result != -1) + item = (T *) node->item_; + return result; +} + +template ACE_INLINE void +ACE_DLList::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_DLList_Base::dump (); +#endif /* ACE_HAS_DUMP */ +} + +template ACE_INLINE int +ACE_DLList::remove (ACE_DLList_Node *n) +{ + int result = ACE_DLList_Base::remove (n); + ACE_DES_FREE (n, + this->allocator_->free, + ACE_DLList_Node); + return result; +} + +template ACE_INLINE +ACE_DLList::ACE_DLList (ACE_Allocator *alloc) + : ACE_DLList_Base (alloc) +{ +} + +template ACE_INLINE +ACE_DLList::ACE_DLList (const ACE_DLList &l) + : ACE_DLList_Base ((ACE_DLList &) l) +{ +} + +template ACE_INLINE +ACE_DLList::~ACE_DLList (void) +{ + while (this->delete_head ()) ; +} + +template ACE_INLINE int +ACE_DLList_Iterator::remove (void) +{ + ACE_DLList_Node *temp = this->ACE_Double_Linked_List_Iterator ::next (); + this->ACE_Double_Linked_List_Iterator ::advance (); + return list_->remove (temp); +} + +template ACE_INLINE +ACE_DLList_Iterator::ACE_DLList_Iterator (ACE_DLList &l) + : ACE_Double_Linked_List_Iterator ((ACE_DLList_Base &)l), + list_ (&l) +{ +} + +template ACE_INLINE void +ACE_DLList_Iterator::reset (ACE_DLList &l) +{ + list_ = &l; + this->ACE_Double_Linked_List_Iterator ::reset ((ACE_DLList_Base &)l); +} + +template ACE_INLINE int +ACE_DLList_Iterator::next (T *&ptr) +{ + ACE_DLList_Node *temp = + ACE_Double_Linked_List_Iterator ::next (); + if (temp) + ptr = (T *) temp->item_; + return temp ? 1 : 0; +} + +template ACE_INLINE T * +ACE_DLList_Iterator::next (void) const +{ + ACE_DLList_Node *temp = ACE_Double_Linked_List_Iterator ::next (); + return (T *) (temp ? temp->item_ : 0); +} + +template ACE_INLINE int +ACE_DLList_Iterator::advance (void) +{ + return this->ACE_Double_Linked_List_Iterator ::advance (); +} + +template ACE_INLINE void +ACE_DLList_Iterator::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_Double_Linked_List_Iterator ::dump (); +#endif /* ACE_HAS_DUMP */ +} + + +template ACE_INLINE int +ACE_DLList_Reverse_Iterator::remove (void) +{ + ACE_DLList_Node *temp = ACE_Double_Linked_List_Reverse_Iterator ::next (); + this->ACE_Double_Linked_List_Reverse_Iterator ::advance (); + return list_->remove (temp); +} + +template ACE_INLINE +ACE_DLList_Reverse_Iterator::ACE_DLList_Reverse_Iterator (ACE_DLList &l) + : ACE_Double_Linked_List_Reverse_Iterator ((ACE_DLList_Base &)l), + list_ (&l) +{ +} + +template ACE_INLINE void +ACE_DLList_Reverse_Iterator::reset (ACE_DLList &l) +{ + list_ = &l; + this->ACE_Double_Linked_List_Reverse_Iterator ::reset ((ACE_DLList_Base &)l); +} + +template ACE_INLINE int +ACE_DLList_Reverse_Iterator::advance (void) +{ + return ACE_Double_Linked_List_Reverse_Iterator ::advance (); +} + +template ACE_INLINE int +ACE_DLList_Reverse_Iterator::next (T *&ptr) +{ + ACE_DLList_Node *temp = + ACE_Double_Linked_List_Reverse_Iterator ::next (); + if (temp == 0) + return 0; + ptr = (T *) temp->item_; + return 1; +} + +template ACE_INLINE T * +ACE_DLList_Reverse_Iterator::next (void) const +{ + ACE_DLList_Node *temp = ACE_Double_Linked_List_Reverse_Iterator ::next (); + return (T *) (temp ? temp->item_ : 0); +} + + +template ACE_INLINE void +ACE_DLList_Reverse_Iterator::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_Double_Linked_List_Reverse_Iterator ::dump (); +#endif /* ACE_HAS_DUMP */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Copy_Disabled.cpp b/ACE/ace/Copy_Disabled.cpp new file mode 100644 index 00000000000..d2fb124a182 --- /dev/null +++ b/ACE/ace/Copy_Disabled.cpp @@ -0,0 +1,23 @@ +/** + * @file Copy_Disabled.cpp + * + * $Id$ + * + * @author Carlos O'Ryan + */ + +#include "ace/Copy_Disabled.h" + + +ACE_RCSID (ace, + Copy_Disabled, + "$Id$") + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Copy_Disabled::ACE_Copy_Disabled (void) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Copy_Disabled.h b/ACE/ace/Copy_Disabled.h new file mode 100644 index 00000000000..835b3c20f91 --- /dev/null +++ b/ACE/ace/Copy_Disabled.h @@ -0,0 +1,65 @@ +// -*- C++ -*- + +//=========================================================================== +/** + * @file Copy_Disabled.h + * + * $Id$ + * + * @author Carlos O'Ryan + */ +//=========================================================================== + +#ifndef ACE_COPY_DISABLED_H +#define ACE_COPY_DISABLED_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Copy_Disabled + * + * @brief Helper class to disable copy construction and assignment + * + * Classes used to control OS and other resources are not "canonical", + * i.e. they have their copy constructor and assignment operators + * disabled. + * This is often done by making the copy constructor and assignment + * operators private, effectively disallowing copying by clients of + * the class (including derived classes). If the copy constructor and + * assingment operators are left unimplemented then the class itself + * cannot make any copies of its instances, because it would result in + * link errors. + * + * To use this class simply use private inheritance: + * + * class Foo : private ACE_Copy_Disabled + * { + * // code here + * }; + * + */ +class ACE_Export ACE_Copy_Disabled +{ +public: + + /// Default constructor + ACE_Copy_Disabled (void); + +private: + ACE_Copy_Disabled (const ACE_Copy_Disabled &); + ACE_Copy_Disabled &operator= (const ACE_Copy_Disabled &); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" + +#endif /* ACE_COPY_DISABLED_H */ diff --git a/ACE/ace/Countdown_Time.cpp b/ACE/ace/Countdown_Time.cpp new file mode 100644 index 00000000000..4c95e2acfa1 --- /dev/null +++ b/ACE/ace/Countdown_Time.cpp @@ -0,0 +1,66 @@ +#include "ace/Countdown_Time.h" +#include "ace/OS_NS_sys_time.h" + +ACE_RCSID (ace, + Countdown_Time, + "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Countdown_Time::ACE_Countdown_Time (ACE_Time_Value *max_wait_time) + : max_wait_time_ (max_wait_time), + stopped_ (false) +{ + this->start (); +} + +ACE_Countdown_Time::~ACE_Countdown_Time (void) +{ + this->stop (); +} + +void +ACE_Countdown_Time::start (void) +{ + if (this->max_wait_time_ != 0) + { + this->start_time_ = ACE_OS::gettimeofday (); + this->stopped_ = false; + } +} + +bool +ACE_Countdown_Time::stopped (void) const +{ + return stopped_; +} + +void +ACE_Countdown_Time::stop (void) +{ + if (this->max_wait_time_ != 0 && this->stopped_ == false) + { + ACE_Time_Value elapsed_time = ACE_OS::gettimeofday () - this->start_time_; + + if (*this->max_wait_time_ > elapsed_time) + { + *this->max_wait_time_ -= elapsed_time; + } + else + { + // Used all of timeout. + *this->max_wait_time_ = ACE_Time_Value::zero; + // errno = ETIME; + } + this->stopped_ = true; + } +} + +void +ACE_Countdown_Time::update (void) +{ + this->stop (); + this->start (); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Countdown_Time.h b/ACE/ace/Countdown_Time.h new file mode 100644 index 00000000000..207b9045fcc --- /dev/null +++ b/ACE/ace/Countdown_Time.h @@ -0,0 +1,80 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Countdown_Time.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_COUNTDOWN_TIME_H +#define ACE_COUNTDOWN_TIME_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Time_Value.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Countdown_Time + * + * @brief Keeps track of the amount of elapsed time. + * + * This class has a side-effect on the @c max_wait_time -- every + * time the stop() method is called the @c max_wait_time is + * updated. + */ +class ACE_Export ACE_Countdown_Time +{ +public: + /// Cache the @a max_wait_time and call @c start(). + ACE_Countdown_Time (ACE_Time_Value *max_wait_time); + + /// Destructor, makes sure the max_wait_time that got passed as pointer + /// to the constructor is updated with the time elapsed. + ~ACE_Countdown_Time (void); + + /// Cache the current time and enter a start state. + void start (void); + + /// Subtract the elapsed time from max_wait_time_ and enter a stopped + /// state. + void stop (void); + + /// Calls stop and then start. max_wait_time_ is modified by the + /// call to stop. + void update (void); + + /// Returns true if we've already been stopped, else false. + bool stopped (void) const; + +private: + /// Maximum time we were willing to wait. + ACE_Time_Value *max_wait_time_; + + /// Beginning of the start time. + ACE_Time_Value start_time_; + + /// Keeps track of whether we've already been stopped. + bool stopped_; + + // Prevent copying + ACE_Countdown_Time (const ACE_Countdown_Time &); + ACE_Countdown_Time &operator= (const ACE_Countdown_Time &); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" + +#endif /* ACE_COUNTDOWN_TIME_H */ diff --git a/ACE/ace/DEV.cpp b/ACE/ace/DEV.cpp new file mode 100644 index 00000000000..1ae27fc558e --- /dev/null +++ b/ACE/ace/DEV.cpp @@ -0,0 +1,43 @@ +// $Id$ + +#include "ace/DEV.h" + +#include "ace/OS_NS_unistd.h" + +#if !defined (__ACE_INLINE__) +#include "ace/DEV.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, DEV, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_DEV) + +void +ACE_DEV::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_DEV::dump"); +#endif /* ACE_HAS_DUMP */ +} + +// This is the do-nothing constructor. + +ACE_DEV::ACE_DEV (void) +{ + ACE_TRACE ("ACE_DEV::ACE_DEV"); +} + +// Close the device + +int +ACE_DEV::close (void) +{ + ACE_TRACE ("ACE_DEV::close"); + int result = ACE_OS::close (this->get_handle ()); + this->set_handle (ACE_INVALID_HANDLE); + return result; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/DEV.h b/ACE/ace/DEV.h new file mode 100644 index 00000000000..8b0c585ddf7 --- /dev/null +++ b/ACE/ace/DEV.h @@ -0,0 +1,78 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file DEV.h + * + * $Id$ + * + * @author Gerhard Lenzer + */ +//============================================================================= + + +#ifndef ACE_DEV_H +#define ACE_DEV_H +#include /**/ "ace/pre.h" + +#include "ace/IO_SAP.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/DEV_Addr.h" + +// The following is necessary since many C++ compilers don't support +// typedef'd types inside of classes used as formal template +// arguments... ;-(. Luckily, using the C++ preprocessor I can hide +// most of this nastiness! + +#if defined (ACE_HAS_TEMPLATE_TYPEDEFS) +#define ACE_DEV_CONNECTOR ACE_DEV_Connector +#define ACE_DEV_STREAM ACE_DEV_IO +#else /* TEMPLATES are broken (must be a cfront-based compiler...) */ +#define ACE_DEV_CONNECTOR ACE_DEV_Connector, ACE_DEV_Addr +#define ACE_DEV_STREAM ACE_DEV_IO, ACE_DEV_Addr +#endif /* ACE_TEMPLATE_TYPEDEFS */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_DEV + * + * @brief Defines the member functions for the base class of the + * ACE_DEV abstraction. + */ +class ACE_Export ACE_DEV : public ACE_IO_SAP +{ +public: + /// Close down the DEVICE + int close (void); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + + /** + * Disable signal @a signum + * This is here to prevent Win32 from + * disabling SPIPE using socket calls + */ + int disable (int signum) const ; + +protected: + /// Ensure that this class is an abstract base class + ACE_DEV (void); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/DEV.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_DEV_H */ diff --git a/ACE/ace/DEV.inl b/ACE/ace/DEV.inl new file mode 100644 index 00000000000..e00f4fc705e --- /dev/null +++ b/ACE/ace/DEV.inl @@ -0,0 +1,18 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE int +ACE_DEV::disable (int signum) const +{ +#if defined (ACE_WIN32) + ACE_UNUSED_ARG (signum) ; + return 0 ; +#else /* ACE_WIN32 */ + return ACE_IO_SAP::disable (signum) ; +#endif /* ACE_WIN32 */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/DEV_Addr.cpp b/ACE/ace/DEV_Addr.cpp new file mode 100644 index 00000000000..39d1768051f --- /dev/null +++ b/ACE/ace/DEV_Addr.cpp @@ -0,0 +1,108 @@ +// $Id$ + +#include "ace/DEV_Addr.h" +#if !defined (__ACE_INLINE__) +#include "ace/DEV_Addr.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/Log_Msg.h" +#include "ace/OS_NS_string.h" + +ACE_RCSID (ace, + DEV_Addr, + "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_DEV_Addr) + +// Transform the current address into string format. + +int +ACE_DEV_Addr::addr_to_string (ACE_TCHAR *s, size_t len) const +{ + ACE_TRACE ("ACE_DEV_Addr::addr_to_string"); + + ACE_OS::strsncpy (s, this->devname_, len); + return 0; +} + +// Return a pointer to the address. + +void * +ACE_DEV_Addr::get_addr (void) const +{ + ACE_TRACE ("ACE_DEV_Addr::get_addr"); + + return (void *) &this->devname_; +} + +void +ACE_DEV_Addr::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_DEV_Addr::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("devname_ = %s"), this->devname_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +// Do nothing constructor. + +ACE_DEV_Addr::ACE_DEV_Addr (void) + : ACE_Addr (AF_DEV, sizeof this->devname_) +{ + ACE_TRACE ("ACE_DEV_Addr::ACE_DEV_Addr"); + + (void) ACE_OS::memset ((void *) &this->devname_, + 0, sizeof this->devname_); +} + +int +ACE_DEV_Addr::set (const ACE_DEV_Addr &sa) +{ + this->base_set (sa.get_type (), sa.get_size ()); + + if (sa.get_type () == AF_ANY) + (void) ACE_OS::memset ((void *) &this->devname_, + 0, + sizeof this->devname_); + else + (void) ACE_OS::strsncpy (this->devname_, + sa.devname_, + ACE_DEV_Addr::DEVNAME_LENGTH); + return 0; +} + +// Copy constructor. + +ACE_DEV_Addr::ACE_DEV_Addr (const ACE_DEV_Addr &sa) + : ACE_Addr (AF_DEV, sizeof this->devname_) +{ + ACE_TRACE ("ACE_DEV_Addr::ACE_DEV_Addr"); + + this->set (sa); +} + +ACE_DEV_Addr::ACE_DEV_Addr (const ACE_TCHAR *devname) + : ACE_Addr (AF_DEV, sizeof this->devname_) +{ + ACE_TRACE ("ACE_DEV_Addr::ACE_DEV_Addr"); + + this->set (devname); +} + +ACE_DEV_Addr & +ACE_DEV_Addr::operator= (const ACE_DEV_Addr &sa) +{ + ACE_TRACE ("ACE_DEV_Addr::operator="); + + if (this != &sa) + this->set (sa); + + return *this; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/DEV_Addr.h b/ACE/ace/DEV_Addr.h new file mode 100644 index 00000000000..0646260c8f9 --- /dev/null +++ b/ACE/ace/DEV_Addr.h @@ -0,0 +1,90 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file DEV_Addr.h + * + * $Id$ + * + * @author Gerhard Lenzer and Douglas C. Schmidt + */ +//========================================================================== + +#ifndef ACE_DEV_ADDR_H +#define ACE_DEV_ADDR_H + +#include /**/ "ace/pre.h" + +#include "ace/Addr.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/os_include/os_dirent.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_DEV_Addr + * + * @brief Defines device address family address format. + */ +class ACE_Export ACE_DEV_Addr : public ACE_Addr +{ +public: + // = Initialization methods. + /// Default constructor. + ACE_DEV_Addr (void); + + /// Copy constructor. + ACE_DEV_Addr (const ACE_DEV_Addr &sa); + + /// Acts like a copy constructor. + int set (const ACE_DEV_Addr &sa); + + /// Create a ACE_DEV_Addr from a device name. + explicit ACE_DEV_Addr (const ACE_TCHAR *devname); + + /// Create a ACE_Addr from a ACE_DEV pathname. + void set (const ACE_TCHAR *devname); + + /// Assignment operator. + ACE_DEV_Addr &operator= (const ACE_DEV_Addr &); + + /// Return a pointer to the address. + virtual void *get_addr (void) const; + + /// Transform the current address into string format. + virtual int addr_to_string (ACE_TCHAR *addr, size_t) const; + + /// Compare two addresses for equality. + bool operator == (const ACE_DEV_Addr &SAP) const; + + /// Compare two addresses for inequality. + bool operator != (const ACE_DEV_Addr &SAP) const; + + /// Return the path name used for the rendezvous point. + const ACE_TCHAR *get_path_name (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + enum { DEVNAME_LENGTH = MAXPATHLEN + 1 }; + /// Name of the device. + ACE_TCHAR devname_[DEVNAME_LENGTH]; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/DEV_Addr.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* ACE_DEV_ADDR_H */ diff --git a/ACE/ace/DEV_Addr.inl b/ACE/ace/DEV_Addr.inl new file mode 100644 index 00000000000..820b961d1d0 --- /dev/null +++ b/ACE/ace/DEV_Addr.inl @@ -0,0 +1,51 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/OS_NS_string.h" +#include "ace/Global_Macros.h" +#include "ace/os_include/sys/os_socket.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE void +ACE_DEV_Addr::set (const ACE_TCHAR *devname) +{ + ACE_TRACE ("ACE_DEV_Addr::set"); + + this->ACE_Addr::base_set + (AF_DEV, static_cast (ACE_OS::strlen (devname))); + ACE_OS::strsncpy (this->devname_, devname, ACE_DEV_Addr::DEVNAME_LENGTH); +} + +// Compare two addresses for equality. + +ACE_INLINE bool +ACE_DEV_Addr::operator == (const ACE_DEV_Addr &sap) const +{ + ACE_TRACE ("ACE_DEV_Addr::operator =="); + + return ACE_OS::strcmp (this->devname_, sap.devname_) == 0; +} + +// Compare two addresses for inequality. + +ACE_INLINE bool +ACE_DEV_Addr::operator != (const ACE_DEV_Addr &sap) const +{ + ACE_TRACE ("ACE_DEV_Addr::operator !="); + + return !((*this) == sap); // This is lazy, of course... ;-). +} + +// Return the path name used for the rendezvous point. + +ACE_INLINE const ACE_TCHAR * +ACE_DEV_Addr::get_path_name (void) const +{ + ACE_TRACE ("ACE_DEV_Addr::get_path_name"); + + return this->devname_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/DEV_Connector.cpp b/ACE/ace/DEV_Connector.cpp new file mode 100644 index 00000000000..a1fef807057 --- /dev/null +++ b/ACE/ace/DEV_Connector.cpp @@ -0,0 +1,53 @@ +// $Id$ + +#include "ace/DEV_Connector.h" + +#include "ace/Handle_Ops.h" + +#if !defined (__ACE_INLINE__) +#include "ace/DEV_Connector.inl" +#endif /* __ACE_INLINE__ */ + + +ACE_RCSID (ace, + DEV_Connector, + "$Id$") + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_DEV_Connector) + +void +ACE_DEV_Connector::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_DEV_Connector::dump"); +#endif /* ACE_HAS_DUMP */ +} + +ACE_DEV_Connector::ACE_DEV_Connector (void) +{ + ACE_TRACE ("ACE_DEV_Connector::ACE_DEV_Connector"); +} + +int +ACE_DEV_Connector::connect (ACE_DEV_IO &new_io, + const ACE_DEV_Addr &remote_sap, + ACE_Time_Value *timeout, + const ACE_Addr &, + int, + int flags, + int perms) +{ + ACE_TRACE ("ACE_DEV_Connector::connect"); + + ACE_HANDLE handle = ACE::handle_timed_open (timeout, + remote_sap.get_path_name (), + flags, perms); + new_io.set_handle (handle); + new_io.addr_ = remote_sap; // class copy. + return handle == ACE_INVALID_HANDLE ? -1 : 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/DEV_Connector.h b/ACE/ace/DEV_Connector.h new file mode 100644 index 00000000000..9e001c412f4 --- /dev/null +++ b/ACE/ace/DEV_Connector.h @@ -0,0 +1,110 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file DEV_Connector.h + * + * $Id$ + * + * @author Gerhard Lenzer and Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_DEV_CONNECTOR_H +#define ACE_DEV_CONNECTOR_H +#include /**/ "ace/pre.h" + +#include "ace/DEV_IO.h" +#include "ace/Log_Msg.h" +#include "ace/os_include/os_fcntl.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_DEV_Connector + * + * @brief Defines an active connection factory for the ACE_DEV wrappers. + */ +class ACE_Export ACE_DEV_Connector +{ +public: + /// Default constructor. + ACE_DEV_Connector (void); + + /** + * Actively connect and produce a @a new_io if things go well. + * The @a remote_sap is the address that we are trying to connect + * with. The @a timeout is the amount of time to wait to connect. + * If it's 0 then we block indefinitely. If *timeout == {0, 0} then + * the connection is done using non-blocking mode. In this case, if + * the connection can't be made immediately the value of -1 is + * returned with @c errno == EWOULDBLOCK. If *timeout > {0, 0} then + * this is the maximum amount of time to wait before timing out. If the + * time expires before the connection is made @c errno == ETIME. The + * @a local_sap is the value of local address to bind to. If it's + * the default value of ACE_Addr::sap_any then the user is letting + * the OS do the binding. If @a reuse_addr == 1 then the + * is reused, even if it hasn't been cleanedup yet. + * The @a flags and @a perms arguments are passed down to the + * method. + */ + ACE_DEV_Connector (ACE_DEV_IO &new_io, + const ACE_DEV_Addr &remote_sap, + ACE_Time_Value *timeout = 0, + const ACE_Addr &local_sap = ACE_Addr::sap_any, + int reuse_addr = 0, + int flags = O_RDWR, + int perms = 0); + + /** + * Actively connect and produce a @a new_io if things go well. + * The @a remote_sap is the address that we are trying to connect + * with. The @a timeout is the amount of time to wait to connect. + * If it's 0 then we block indefinitely. If *timeout == {0, 0} then + * the connection is done using non-blocking mode. In this case, if + * the connection can't be made immediately the value of -1 is + * returned with @c errno == EWOULDBLOCK. If *timeout > {0, 0} then + * this is the maximum amount of time to wait before timing out. If the + * time expires before the connection is made @c errno == ETIME. The + * @a local_sap is the value of local address to bind to. If it's + * the default value of ACE_Addr::sap_any then the user is letting + * the OS do the binding. If @a reuse_addr == 1 then the + * is reused, even if it hasn't been cleanedup yet. + * The @a flags and @a perms arguments are passed down to the + * method. + */ + int connect (ACE_DEV_IO &new_io, + const ACE_DEV_Addr &remote_sap, + ACE_Time_Value *timeout = 0, + const ACE_Addr &local_sap = ACE_Addr::sap_any, + int reuse_addr = 0, + int flags = O_RDWR, + int perms = 0); + + /// Resets any event associations on this handle + int reset_new_handle (ACE_HANDLE handle); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + + // = Meta-type info + typedef ACE_DEV_Addr PEER_ADDR; + typedef ACE_DEV_IO PEER_STREAM; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/DEV_Connector.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_DEV_CONNECTOR_H */ diff --git a/ACE/ace/DEV_Connector.inl b/ACE/ace/DEV_Connector.inl new file mode 100644 index 00000000000..314952699de --- /dev/null +++ b/ACE/ace/DEV_Connector.inl @@ -0,0 +1,34 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Creates a Local ACE_DEV. + +ACE_INLINE +ACE_DEV_Connector::ACE_DEV_Connector (ACE_DEV_IO &new_io, + const ACE_DEV_Addr &remote_sap, + ACE_Time_Value *timeout, + const ACE_Addr &local_sap, + int reuse_addr, + int flags, + int perms) +{ + ACE_TRACE ("ACE_DEV_Connector::ACE_DEV_Connector"); + if (this->connect (new_io, remote_sap, timeout, local_sap, + reuse_addr, flags, perms) == ACE_IO_SAP::INVALID_HANDLE + && timeout != 0 && !(errno == EWOULDBLOCK || errno == ETIME)) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("address %s, %p\n"), + remote_sap.get_path_name (), ACE_TEXT ("ACE_DEV_IO"))); +} + +ACE_INLINE int +ACE_DEV_Connector::reset_new_handle (ACE_HANDLE handle) +{ + ACE_UNUSED_ARG (handle); + // Nothing to do here since the handle is not a socket + return 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/DEV_IO.cpp b/ACE/ace/DEV_IO.cpp new file mode 100644 index 00000000000..f5367d1d5cd --- /dev/null +++ b/ACE/ace/DEV_IO.cpp @@ -0,0 +1,131 @@ +// $Id$ + +#include "ace/DEV_IO.h" +#include "ace/Log_Msg.h" + +#if !defined (__ACE_INLINE__) +#include "ace/DEV_IO.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, DEV_IO, "$Id$") + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_DEV_IO) + +// Return the local endpoint address. + +int +ACE_DEV_IO::get_local_addr (ACE_DEV_Addr &addr) const +{ + ACE_TRACE ("ACE_DEV_IO::get_local_addr"); + + addr = this->addr_; + return 0; +} + +// Return the address of the remotely connected peer (if there is +// one). + +int +ACE_DEV_IO::get_remote_addr (ACE_DEV_Addr &addr) const +{ + ACE_TRACE ("ACE_DEV_IO::get_remote_addr"); + addr = this->addr_; + return 0; +} + +void +ACE_DEV_IO::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_DEV_IO::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + this->addr_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +// Simple-minded do nothing constructor. + +ACE_DEV_IO::ACE_DEV_IO (void) +{ + ACE_TRACE ("ACE_DEV_IO::ACE_DEV_IO"); +} + +// Send N char *ptrs and int lengths. Note that the char *'s precede +// the ints (basically, an varargs version of writev). The count N is +// the *total* number of trailing arguments, *not* a couple of the +// number of tuple pairs! + +ssize_t +ACE_DEV_IO::send (size_t n, ...) const +{ + ACE_TRACE ("ACE_DEV_IO::send"); + va_list argp; + int total_tuples = static_cast (n / 2); + iovec *iovp; +#if defined (ACE_HAS_ALLOCA) + iovp = (iovec *) alloca (total_tuples * sizeof (iovec)); +#else + ACE_NEW_RETURN (iovp, + iovec[total_tuples], + -1); +#endif /* !defined (ACE_HAS_ALLOCA) */ + + va_start (argp, n); + + for (int i = 0; i < total_tuples; i++) + { + iovp[i].iov_base = va_arg (argp, char *); + iovp[i].iov_len = va_arg (argp, int); + } + + ssize_t result = ACE_OS::writev (this->get_handle (), iovp, total_tuples); +#if !defined (ACE_HAS_ALLOCA) + delete [] iovp; +#endif /* !defined (ACE_HAS_ALLOCA) */ + va_end (argp); + return result; +} + +// This is basically an interface to ACE_OS::readv, that doesn't use the +// struct iovec explicitly. The ... can be passed as an arbitrary +// number of (char *ptr, int len) tuples. However, the count N is the +// *total* number of trailing arguments, *not* a couple of the number +// of tuple pairs! + +ssize_t +ACE_DEV_IO::recv (size_t n, ...) const +{ + ACE_TRACE ("ACE_DEV_IO::recv"); + va_list argp; + int total_tuples = static_cast (n / 2); + iovec *iovp; +#if defined (ACE_HAS_ALLOCA) + iovp = (iovec *) alloca (total_tuples * sizeof (iovec)); +#else + ACE_NEW_RETURN (iovp, + iovec[total_tuples], + -1); +#endif /* !defined (ACE_HAS_ALLOCA) */ + + va_start (argp, n); + + for (int i = 0; i < total_tuples; i++) + { + iovp[i].iov_base = va_arg (argp, char *); + iovp[i].iov_len = va_arg (argp, int); + } + + ssize_t result = ACE_OS::readv (this->get_handle (), iovp, total_tuples); +#if !defined (ACE_HAS_ALLOCA) + delete [] iovp; +#endif /* !defined (ACE_HAS_ALLOCA) */ + va_end (argp); + return result; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/DEV_IO.h b/ACE/ace/DEV_IO.h new file mode 100644 index 00000000000..d3b1aadaa2f --- /dev/null +++ b/ACE/ace/DEV_IO.h @@ -0,0 +1,185 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file DEV_IO.h + * + * $Id$ + * + * @author Gerhard Lenzer + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_DEV_IO_H +#define ACE_DEV_IO_H +#include /**/ "ace/pre.h" + +#include "ace/DEV.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_STREAM_PIPES) +# include "ace/OS_NS_stropts.h" +#endif /* ACE_HAS_STREAM_PIPES */ + +#include "ace/os_include/os_stdio.h" +#include "ace/os_include/sys/os_uio.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_Time_Value; + +/** + * @class ACE_DEV_IO + * + * @brief Read/Write operations on Devices. + */ +class ACE_Export ACE_DEV_IO : public ACE_DEV +{ +public: + friend class ACE_DEV_Connector; + + /// Default constructor. + ACE_DEV_IO (void); + + // = Various send operations. + /// send upto @a n bytes in @a buf. + ssize_t send (const void *buf, size_t n) const; + + /// Recv upto @a n bytes in @a buf. + ssize_t recv (void *buf, size_t n) const; + + /// Send n bytes, keep trying until n are sent. + ssize_t send_n (const void *buf, + size_t n) const; + + /** + * @name I/O operations + * + * Notes on common parameters: + * + * @a buf is the buffer to write from or receive into. + * + * @a len is the number of bytes to transfer. + * + * The @a timeout parameter in the following methods indicates how + * long to blocking trying to transfer data. If @a timeout == 0, + * then the call behaves as a normal send/recv call, i.e., for + * blocking sockets, the call will block until action is possible; + * for non-blocking sockets, EWOULDBLOCK will be returned if no + * action is immediately possible. + * + * If @a timeout != 0, the call will wait until the relative time + * specified in *@a timeout elapses. + * + * The "_n()" I/O methods keep looping until all the data has been + * transferred. These methods also work for sockets in non-blocking + * mode i.e., they keep looping on EWOULDBLOCK. @a timeout is used + * to make sure we keep making progress, i.e., the same timeout + * value is used for every I/O operation in the loop and the timeout + * is not counted down. + * + * The return values for the "*_n()" methods match the return values + * from the non "_n()" methods and are specified as follows: + * + * - On complete transfer, the number of bytes transferred is returned. + * - On timeout, -1 is returned, errno == ETIME. + * - On error, -1 is returned, errno is set to appropriate error. + * - On EOF, 0 is returned, errno is irrelevant. + * + * On partial transfers, i.e., if any data is transferred before + * timeout/error/EOF, @a bytes_transferred will contain the number of + * bytes transferred. + */ + ssize_t recv_n (void *buf, + size_t n, + const ACE_Time_Value *timeout = 0, + size_t *bytes_transferred = 0) const; + +#if defined (ACE_HAS_STREAM_PIPES) + /// Recv bytes via STREAM pipes using "band" mode. + ssize_t recv (ACE_Str_Buf *cntl, + ACE_Str_Buf *data, + int *band, + int *flags) const; + + /// Send bytes via STREAM pipes using "band" mode. + ssize_t send (const ACE_Str_Buf *cntl, + const ACE_Str_Buf *data, + int band, + int flags) const; + + /// Recv @a cntl and @a data via STREAM pipes. + ssize_t recv (ACE_Str_Buf *cntl, + ACE_Str_Buf *data, + int *flags) const; + + /// Send @a cntl and @a data via STREAM pipes. + ssize_t send (const ACE_Str_Buf *cntl, + const ACE_Str_Buf *data, + int flags = 0) const; +#endif /* ACE_HAS_STREAM_PIPES */ + + /// Send iovecs via <::writev>. + ssize_t send (const iovec iov[], size_t n) const; + + /// Recv iovecs via <::readv>. + ssize_t recv (iovec iov[], size_t n) const; + + /** + * Send N char *ptrs and int lengths. Note that the char *'s + * precede the ints (basically, an varargs version of writev). The + * count N is the *total* number of trailing arguments, *not* a + * couple of the number of tuple pairs! + */ + ssize_t send (size_t n, ...) const; + + /** + * This is an interface to ::readv, that doesn't use the struct + * iovec explicitly. The ... can be passed as an arbitrary number + * of (char *ptr, int len) tuples. However, the count N is the + * *total* number of trailing arguments, *not* a couple of the + * number of tuple pairs! + */ + ssize_t recv (size_t n, ...) const; + + /// Send @a n bytes via Win32 WriteFile using overlapped I/O. + ssize_t send (const void *buf, size_t n, ACE_OVERLAPPED *overlapped) const; + + /// Recv @a n bytes via Win32 ReadFile using overlapped I/O. + ssize_t recv (void *buf, size_t n, ACE_OVERLAPPED *overlapped) const; + + /// Dump the state of an object. + void dump (void) const; + + // = The following two methods are no-ops to keep the + // ACE_Connector happy. + /// Return the local endpoint address. + int get_local_addr (ACE_DEV_Addr &) const; + + /// Return the address of the remotely connected peer (if there is + /// one). + int get_remote_addr (ACE_DEV_Addr &) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + + // = Meta-type info + typedef ACE_DEV_Addr PEER_ADDR; + +private: + /// Address of device we are connected to. + ACE_DEV_Addr addr_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/DEV_IO.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_DEV_IO_H */ diff --git a/ACE/ace/DEV_IO.inl b/ACE/ace/DEV_IO.inl new file mode 100644 index 00000000000..cb9392e2bf3 --- /dev/null +++ b/ACE/ace/DEV_IO.inl @@ -0,0 +1,126 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/OS_NS_sys_uio.h" +#include "ace/OS_NS_unistd.h" +#include "ace/OS_Memory.h" + +#include "ace/ACE.h" + +// Send exactly N bytes from BUF to this device. Keeping trying until +// this many bytes are sent. + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE ssize_t +ACE_DEV_IO::send_n (const void *buf, size_t n) const +{ + ACE_TRACE ("ACE_DEV_IO::send_n"); + return ACE::write_n (this->get_handle (), buf, n); +} + +// Receive exactly N bytes from this file into BUF. Keep trying until +// this many bytes are received. + +ACE_INLINE ssize_t +ACE_DEV_IO::recv_n (void *buf, + size_t n, + const ACE_Time_Value *timeout, + size_t *bytes_transferred) const +{ + ACE_TRACE ("ACE_DEV_IO::recv_n"); +#if defined (ACE_WIN32) + ACE_UNUSED_ARG (timeout); + + return ACE::read_n (this->get_handle (), + buf, + n, + bytes_transferred); +#else + return ACE::recv_n (this->get_handle (), + buf, + n, + timeout, + bytes_transferred); +#endif /*ACE_WIN32*/ +} + +ACE_INLINE ssize_t +ACE_DEV_IO::send (const void *buf, size_t n) const +{ + ACE_TRACE ("ACE_DEV_IO::send"); + return ACE_OS::write (this->get_handle (), (const char *) buf, n); +} + +ACE_INLINE ssize_t +ACE_DEV_IO::recv (void *buf, size_t n) const +{ + ACE_TRACE ("ACE_DEV_IO::recv"); + return ACE_OS::read (this->get_handle (), (char *) buf, n); +} + +ACE_INLINE ssize_t +ACE_DEV_IO::send (const iovec iov[], size_t n) const +{ + ACE_TRACE ("ACE_DEV_IO::send"); + return ACE_OS::writev (this->get_handle (), iov, static_cast (n)); +} + +ACE_INLINE ssize_t +ACE_DEV_IO::recv (iovec iov[], size_t n) const +{ + ACE_TRACE ("ACE_DEV_IO::recv"); + return ACE_OS::readv (this->get_handle (), iov, static_cast (n)); +} + +ACE_INLINE ssize_t +ACE_DEV_IO::send (const void *buf, size_t n, + ACE_OVERLAPPED *overlapped) const +{ + ACE_TRACE ("ACE_DEV_IO::send"); + return ACE_OS::write (this->get_handle (), + (const char *) buf, n, + overlapped); +} + +ACE_INLINE ssize_t +ACE_DEV_IO::recv (void *buf, size_t n, + ACE_OVERLAPPED *overlapped) const +{ + ACE_TRACE ("ACE_DEV_IO::recv"); + return ACE_OS::read (this->get_handle (), (char *) buf, n, + overlapped); +} + +#if defined (ACE_HAS_STREAM_PIPES) +ACE_INLINE ssize_t +ACE_DEV_IO::recv (ACE_Str_Buf *cntl, ACE_Str_Buf *data, int *band, int *flags) const +{ + ACE_TRACE ("ACE_DEV_IO::recv"); + return ACE_OS::getpmsg (this->get_handle (), (strbuf *) cntl, (strbuf *) data, band, flags); +} + +ACE_INLINE ssize_t +ACE_DEV_IO::send (const ACE_Str_Buf *cntl, const ACE_Str_Buf *data, int band, int flags) const +{ + ACE_TRACE ("ACE_DEV_IO::send"); + return ACE_OS::putpmsg (this->get_handle (), (strbuf *) cntl, (strbuf *) data, band, flags); +} + +ACE_INLINE ssize_t +ACE_DEV_IO::recv (ACE_Str_Buf *cntl, ACE_Str_Buf *data, int *flags) const +{ + ACE_TRACE ("ACE_DEV_IO::recv"); + return ACE_OS::getmsg (this->get_handle (), (strbuf *) cntl, (strbuf *) data, flags); +} + +ACE_INLINE ssize_t +ACE_DEV_IO::send (const ACE_Str_Buf *cntl, const ACE_Str_Buf *data, int flags) const +{ + ACE_TRACE ("ACE_DEV_IO::send"); + return ACE_OS::putmsg (this->get_handle (), (strbuf *) cntl, (strbuf *) data, flags); +} +#endif /* ACE_HAS_STREAM_PIPES */ + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/DLL.cpp b/ACE/ace/DLL.cpp new file mode 100644 index 00000000000..cdee3c6bd24 --- /dev/null +++ b/ACE/ace/DLL.cpp @@ -0,0 +1,267 @@ +// $Id$ + +#include "ace/DLL.h" + +#include "ace/Log_Msg.h" +#include "ace/ACE.h" +#include "ace/DLL_Manager.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_dlfcn.h" +#include "ace/OS_NS_Thread.h" + +#include + +ACE_RCSID(ace, DLL, "$Id$") + + ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Default constructor. Also, by default, the object will be closed +// before it is destroyed. + +ACE_DLL::ACE_DLL (bool close_handle_on_destruction) + : open_mode_ (0), + dll_name_ (0), + close_handle_on_destruction_ (close_handle_on_destruction), + dll_handle_ (0), + error_ (0) +{ + ACE_TRACE ("ACE_DLL::ACE_DLL (int)"); +} + +ACE_DLL::ACE_DLL (const ACE_DLL &rhs) + : open_mode_ (0), + dll_name_ (0), + close_handle_on_destruction_ (false), + dll_handle_ (0), + error_ (0) +{ + ACE_TRACE ("ACE_DLL::ACE_DLL (const ACE_DLL &)"); + + if (rhs.dll_name_ + // This will automatically up the refcount. + && this->open (rhs.dll_name_, + rhs.open_mode_, + rhs.close_handle_on_destruction_) != 0 + && ACE::debug ()) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE_DLL::copy_ctor: error: %s\n"), + this->error ())); +} + +// Assignment operator + +ACE_DLL & +ACE_DLL::operator= (const ACE_DLL &rhs) +{ + ACE_TRACE ("ACE_DLL::operator= (const ACE_DLL &)"); + + ACE_DLL tmp (rhs); + + std::swap (this->open_mode_, tmp.open_mode_); + std::swap (this->dll_name_, tmp.dll_name_); + std::swap (this->close_handle_on_destruction_, + tmp.close_handle_on_destruction_); + std::swap (this->dll_handle_, tmp.dll_handle_); + std::swap (this->error_, tmp.error_); + + return *this; +} + + +// If the library name and the opening mode are specified than on +// object creation the library is implicitly opened. + +ACE_DLL::ACE_DLL (const ACE_TCHAR *dll_name, + int open_mode, + bool close_handle_on_destruction) + : open_mode_ (open_mode), + dll_name_ (0), + close_handle_on_destruction_ (close_handle_on_destruction), + dll_handle_ (0), + error_ (0) +{ + ACE_TRACE ("ACE_DLL::ACE_DLL"); + + if (this->open (dll_name, this->open_mode_, close_handle_on_destruction) != 0 + && ACE::debug ()) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE_DLL::open: error calling open: %s\n"), + this->error ())); +} + +// The library is closed before the class gets destroyed depending on +// the close_handle_on_destruction value specified which is stored in +// close_handle_on_destruction_. + +ACE_DLL::~ACE_DLL (void) +{ + ACE_TRACE ("ACE_DLL::~ACE_DLL"); + + this->close (); + + // Normally delete()d in ACE_DLL::close(). However, that may not + // occur if full ACE_DLL initialization is interrupted due to errors + // (e.g. attempting to open a DSO/DLL that does not exist). Make + // sure this->dll_name_ is deallocated. + delete [] this->dll_name_; +} + +// This method opens the library based on the mode specified using the +// ACE_SHLIB_HANDLE which is obtained on making the ACE_OS::dlopen call. +// The default mode is: +// RTLD_LAZY Only references to data symbols are relocate when the +// object is first loaded. +// The other modes include: +// RTLD_NOW All necessary relocations are performed when the +// object is first loaded. +// RTLD_GLOBAL The object symbols are made available for the +// relocation processing of any other object. + +int +ACE_DLL::open (const ACE_TCHAR *dll_filename, + int open_mode, + bool close_handle_on_destruction) +{ + ACE_TRACE ("ACE_DLL::open"); + + return open_i (dll_filename, open_mode, close_handle_on_destruction); +} + +int +ACE_DLL::open_i (const ACE_TCHAR *dll_filename, + int open_mode, + bool close_handle_on_destruction, + ACE_SHLIB_HANDLE handle) +{ + ACE_TRACE ("ACE_DLL::open_i"); + + this->error_ = 0; + + if (!dll_filename) + { + if (ACE::debug ()) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE_DLL::open_i: dll_name is %s\n"), + this->dll_name_ == 0 ? ACE_TEXT ("(null)") + : this->dll_name_)); + return -1; + } + + if (this->dll_handle_) + { + // If we have a good handle and its the same name, just return. + if (ACE_OS::strcmp (this->dll_name_, dll_filename) == 0) + return 0; + else + this->close (); + } + + if (!this->dll_name_) + this->dll_name_ = ACE::strnew (dll_filename); + + this->open_mode_ = open_mode; + this->close_handle_on_destruction_ = close_handle_on_destruction; + + this->dll_handle_ = ACE_DLL_Manager::instance()->open_dll (this->dll_name_, + this->open_mode_, + handle); + + if (!this->dll_handle_) + this->error_ = 1; + + return this->error_ ? -1 : 0; +} + +// The symbol refernce of the name specified is obtained. + +void * +ACE_DLL::symbol (const ACE_TCHAR *sym_name, int ignore_errors) +{ + ACE_TRACE ("ACE_DLL::symbol"); + + this->error_ = 0; + + void *sym = 0; + if (this->dll_handle_) + sym = this->dll_handle_->symbol (sym_name, ignore_errors); + + if (!sym) + this->error_ = 1; + + return sym; +} + +// The library is closed using the ACE_SHLIB_HANDLE object, i.e., the +// shared object is now disassociated form the current process. + +int +ACE_DLL::close (void) +{ + ACE_TRACE ("ACE_DLL::close"); + + int retval = 0; + + if (this->dll_handle_ + && this->close_handle_on_destruction_ + && this->dll_name_ + && (retval = ACE_DLL_Manager::instance ()->close_dll (this->dll_name_)) != 0) + this->error_ = 1; + + // Even if close_dll() failed, go ahead and cleanup. + this->dll_handle_ = 0; + delete [] this->dll_name_; + this->dll_name_ = 0; + this->close_handle_on_destruction_ = false; + + return retval; +} + +// This method is used return the last error of a library operation. + +ACE_TCHAR * +ACE_DLL::error (void) const +{ + ACE_TRACE ("ACE_DLL::error"); + if (this->error_) + { + return ACE_OS::dlerror (); + } + + return 0; +} + +// Return the handle to the user either temporarily or forever, thus +// orphaning it. If 0 means the user wants the handle forever and if 1 +// means the user temporarily wants to take the handle. + +ACE_SHLIB_HANDLE +ACE_DLL::get_handle (int become_owner) const +{ + ACE_TRACE ("ACE_DLL::get_handle"); + + ACE_SHLIB_HANDLE handle = ACE_SHLIB_INVALID_HANDLE; + + if (this->dll_handle_) + handle = this->dll_handle_->get_handle (become_owner); + + return handle; +} + +// Set the handle for the DLL. By default, the object will be closed +// before it is destroyed. + +int +ACE_DLL::set_handle (ACE_SHLIB_HANDLE handle, + bool close_handle_on_destruction) +{ + ACE_TRACE ("ACE_DLL::set_handle"); + + // Create a unique name. Note that this name is only quaranteed + // to be unique for the life of this object. + ACE_TCHAR temp[ACE_UNIQUE_NAME_LEN]; + ACE_OS::unique_name (this, temp, ACE_UNIQUE_NAME_LEN); + + return this->open_i (temp, 1, close_handle_on_destruction, handle); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/DLL.h b/ACE/ace/DLL.h new file mode 100644 index 00000000000..64cb646576a --- /dev/null +++ b/ACE/ace/DLL.h @@ -0,0 +1,196 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file DLL.h + * + * $Id$ + * + * @author Kirthika Parameswaran + */ +//============================================================================= + +#ifndef ACE_DLL_H +#define ACE_DLL_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Global_Macros.h" +#include "ace/os_include/os_dlfcn.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_DLL_Handle; + +/** + * @class ACE_DLL + * + * @brief Provides an abstract interface for handling various DLL + * operations. + * + * This class is a wrapper over the various methods for utilizing + * a dynamically linked library (DLL), which is called a shared + * library on some platforms. Operations @c open(), @c close(), and + * @c symbol() have been implemented to help opening/closing and + * extracting symbol information from a DLL, respectively. + */ +class ACE_Export ACE_DLL +{ +public: + // = Initialization and termination methods. + + /** + * Default constructor. By default, the close() operation on the + * object will be invoked before it is destroyed. + * @param close_handle_on_destruction Indicates whether or not the + * close() method will be called to close an open DLL when this + * object is destroyed. By default, close() will be called. + * Set this parameter to 0 for situations where the DLL's lifetime + * is controlled in a scope other than that of this ACE_DLL object. + * For example, termination by ACE_DLL_Manager via ACE::fini(). + */ + explicit ACE_DLL (bool close_handle_on_destruction = true); + + /// Allow assignment + ACE_DLL& operator= (const ACE_DLL &rhs); + + + /** + * This constructor performs the actions of open() during construction. + * @param dll_name The name or path of the DLL to load. + * @param open_mode Flags to alter the actions taken when loading the DLL. + * The possible values are: + * @li @c RTLD_LAZY (this the default): loads identifier symbols but + * not the symbols for functions, which are loaded dynamically + * on-demand. + * @li @c RTLD_NOW: performs all necessary relocations when + * @a dll_name is first loaded + * @li RTLD_GLOBAL: makes symbols available for relocation + * processing of any other DLLs. + * @param close_handle_on_destruction Indicates whether or not the + * close() method will be called to close an open DLL when this + * object is destroyed. By default, close() will be called. + * Set this parameter to 0 for situations where the DLL's lifetime + * is controlled in a scope other than that of this ACE_DLL object. + * For example, termination by ACE_DLL_Manager via ACE::fini(). + */ + explicit ACE_DLL (const ACE_TCHAR *dll_name, + int open_mode = ACE_DEFAULT_SHLIB_MODE, + bool close_handle_on_destruction = true); + + /// Copy constructor. + ACE_DLL (const ACE_DLL &); + + /** + * This method opens and dynamically links a specified DLL. + * @param dll_name The filename or path of the DLL to load. + * If a filename is given to @c open(), the @c ACE::ldfind() is used + * to locate DLLs via the following algorithms: (1) DLL filename + * expansion: @c ACE::ldfind() determines the name of the DLL by + * adding the appropriate prefix and suffix, e.g., it adds the @c lib + * prefix and @c .so suffix for Solaris and the @c .dll suffix for + * Windows and (2) DLL search path: @c ACE::ldfind() will also search + * for the designated DLL using the platform's DLL search path + * environment variable, e.g., it searches for DLLs using @c + * LD_LIBRARY_PATH on many UNIX systems and @c PATH on Windows. + * @param open_mode Flags to alter the actions taken when loading the DLL. + * The possible values are: + * @li @c RTLD_LAZY (this the default): loads identifier symbols but + * not the symbols for functions, which are loaded dynamically + * on-demand. + * @li @c RTLD_NOW: performs all necessary relocations when + * @a dll_name is first loaded + * @li RTLD_GLOBAL: makes symbols available for relocation + * processing of any other DLLs. + * @param close_handle_on_destruction Indicates whether or not the + * close() method will be called to close an open DLL when this + * object is destroyed. By default, close() will be called. + * Set this parameter to 0 for situations where the DLL's lifetime + * is controlled in a scope other than that of this ACE_DLL object. + * For example, termination by ACE_DLL_Manager via ACE::fini(). + * @retval -1 On failure + * @retval 0 On success. + */ + int open (const ACE_TCHAR *dll_name, + int open_mode = ACE_DEFAULT_SHLIB_MODE, + bool close_handle_on_destruction = true); + + /// Call to close the DLL object. + int close (void); + + /** + * Called when the DLL object is destroyed -- invokes close() if the + * @a close_handle_on_destruction flag was set to non-zero in the + * constructor or open() method. + */ + ~ACE_DLL (void); + + /** + * Look up a named symbol in the DLL. DLL must be successfully opened + * before calling symbol(). + * @param symbol_name The symbol name to look up. + * @param ignore_errors If set to 1, allows you to probe a dll without + * generating error messages in the log. Handy for determining + * the capabilities of a library. + * @return Returns the value of @a symbol_name if it is a valid symbol + * in the DLL. Otherwise, returns 0. + */ + void *symbol (const ACE_TCHAR *symbol_name, int ignore_errors = 0); + + /// Returns a pointer to a string explaining that an error occured. You + /// will need to consult the error log for the actual error string + /// returned by the OS. + ACE_TCHAR *error (void) const; + + /** + * Return the handle to the caller. If @a become_owner is non-0 then + * caller assumes ownership of the handle and the ACE_DLL object + * won't call close() when it goes out of scope, even if + * is set. + */ + ACE_SHLIB_HANDLE get_handle (int become_owner = 0) const; + + /// Set the handle for the DLL object. By default, the close() + //operation on / the object will be invoked before it is destroyed. + int set_handle (ACE_SHLIB_HANDLE handle, + bool close_handle_on_destruction = true); + +private: + + int open_i (const ACE_TCHAR *dll_name, + int open_mode = ACE_DEFAULT_SHLIB_MODE, + bool close_handle_on_destruction = true, + ACE_SHLIB_HANDLE handle = 0); + + + //private: +public: + + /// Open mode. + int open_mode_; + + /// Keep track of the name of the loaded dll, so it can be used + /// to remove framework components, singletons that live in the dll, + /// prior to unloading the dll in the close() method. + ACE_TCHAR *dll_name_; + + /// This flag keeps track of whether we should close the handle + /// automatically when the object is destroyed. + bool close_handle_on_destruction_; + + ACE_DLL_Handle *dll_handle_; + + /// Flag to record if the last operation had an error. + bool error_; + +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" +#endif /* ACE_DLL_H */ diff --git a/ACE/ace/DLL_Manager.cpp b/ACE/ace/DLL_Manager.cpp new file mode 100644 index 00000000000..83c07cd125d --- /dev/null +++ b/ACE/ace/DLL_Manager.cpp @@ -0,0 +1,787 @@ +// $Id$ + +#include "ace/DLL_Manager.h" + +#include "ace/Log_Msg.h" +#include "ace/ACE.h" +#include "ace/Framework_Component.h" + +#include "ace/Lib_Find.h" +#include "ace/Object_Manager.h" +#include "ace/SString.h" +#include "ace/Recursive_Thread_Mutex.h" +#include "ace/Guard_T.h" +#include "ace/OS_NS_dlfcn.h" +#include "ace/OS_NS_string.h" + +ACE_RCSID (ace, + DLL_Manager, + "DLL_Manager.cpp,v 4.23 2003/11/05 23:30:46 shuston Exp") + +/******************************************************************/ + + ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +sig_atomic_t ACE_DLL_Handle::open_called_ = 0; + +ACE_DLL_Handle::ACE_DLL_Handle (void) + : refcount_ (0), + dll_name_ (0), + handle_ (ACE_SHLIB_INVALID_HANDLE) +{ + ACE_TRACE ("ACE_DLL_Handle::ACE_DLL_Handle"); +} + +ACE_DLL_Handle::~ACE_DLL_Handle (void) +{ + ACE_TRACE ("ACE_DLL_Handle::~ACE_DLL_Handle"); + this->close (1); + delete[] this->dll_name_; +} + +const ACE_TCHAR * +ACE_DLL_Handle::dll_name (void) const +{ + ACE_TRACE ("ACE_DLL_Handle::dll_name"); + return this->dll_name_; +} + +int +ACE_DLL_Handle::open (const ACE_TCHAR *dll_name, + int open_mode, + ACE_SHLIB_HANDLE handle) +{ + ACE_TRACE ("ACE_DLL_Handle::open"); + ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, 0)); + + if (this->dll_name_) + { + // Once dll_name_ has been set, it can't be changed.. + if (ACE_OS::strcmp (this->dll_name_, dll_name) != 0) + { + if (ACE::debug ()) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("(%P|%t) DLL_Handle::open: error, ") + ACE_TEXT ("tried to reopen %s with name %s\n"), + this->dll_name_, + dll_name)); + + return -1; + } + } + else + this->dll_name_ = ACE::strnew (dll_name); + + if (!this->open_called_) + this->open_called_ = 1; + + // If it hasn't been loaded yet, go ahead and do that now. + if (this->handle_ == ACE_SHLIB_INVALID_HANDLE) + { + if (handle) + this->handle_ = handle; + else + { + /* + ** Get the set of names to try loading. We need to do this to + ** properly support the ability for a user to specify a simple, + ** unadorned name (for example, "ACE") that will work across + ** platforms. We apply platform specifics to get a name that will + ** work (e.g. libACE, ACEd.dll, ACE.dll, etc.) We rely on the + ** underlying dlopen() implementation to "Do The Right Thing" in + ** terms of using relative paths, LD_LIBRARY_PATH, system security + ** rules, etc. except when ACE_MUST_HELP_DLOPEN_SEARCH_PATH is set. + ** If it is set, then ACE::ldfind() scans the configured path + ** looking for a match on the name and prefix/suffix applications. + ** NOTE: having ACE scan for a file and then pass a fully-qualified + ** pathname to dlopen() is a potential security hole; therefore, + ** do not use ACE_MUST_HELP_DLOPEN_SEARCH_PATH unless necessary + ** and only after considering the risks. + */ + ACE_Array dll_names; + dll_names.max_size (10); // Decent guess to avoid realloc later + +#if defined (ACE_MUST_HELP_DLOPEN_SEARCH_PATH) + // Find out where the library is + ACE_TCHAR dll_pathname[MAXPATHLEN + 1]; + + // Transform the pathname into the appropriate dynamic link library + // by searching the ACE_LD_SEARCH_PATH. + ACE::ldfind (dll_name, + dll_pathname, + (sizeof dll_pathname / sizeof (ACE_TCHAR))); + ACE_TString dll_str (dll_pathname); + dll_names.size (1); + dll_names.set (dll_str, 0); +#else + this->get_dll_names (dll_name, dll_names); +#endif + + ACE_Array_Iterator name_iter (dll_names); + ACE_TString *name = 0; + while (name_iter.next (name)) + { + // The ACE_SHLIB_HANDLE object is obtained. + this->handle_ = ACE_OS::dlopen (name->c_str (), + open_mode); + + if (ACE::debug ()) + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("ACE (%P|%t) DLL_Handle::open ") + ACE_TEXT ("(\"%s\", 0x%x) -> %s: %s\n"), + name->c_str (), + open_mode, + ((this->handle_ != ACE_SHLIB_INVALID_HANDLE) + ? ACE_TEXT ("succeeded") + : ACE_TEXT ("failed")), + this->error()->c_str())); + } + + if (this->handle_ != ACE_SHLIB_INVALID_HANDLE) // Good one? + break; + + // If errno is ENOENT we just skip over this one, + // anything else - like an undefined symbol, for + // instance must be flagged here or the next error will + // mask it. + // @TODO: If we've found our DLL _and_ it's + // broken, should we continue at all? + if ((errno != 0) && (errno != ENOENT) && ACE::debug ()) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE (%P|%t) DLL_Handle::open ") + ACE_TEXT ("(\'%s\') failed, errno=") + ACE_TEXT ("%d: %s\n"), + name->c_str (), + errno, + this->error ()->c_str ())); + +#if defined (AIX) + // AIX often puts the shared library file (most often named + // shr.o) inside an archive library. If this is an archive + // library name, then try appending [shr.o] and retry. + if (ACE_TString::npos != name->strstr (ACE_TEXT (".a"))) + { + ACE_TCHAR aix_pathname[MAXPATHLEN + 1]; + ACE_OS::strncpy (aix_pathname, + name->c_str (), + name->length ()); + aix_pathname[name->length ()] = '\0'; + ACE_OS::strcat (aix_pathname, ACE_TEXT ("(shr.o)")); + open_mode |= RTLD_MEMBER; + + if (ACE::debug ()) + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("ACE (%P|%t) DLL_Handle::open ") + ACE_TEXT ("(\"%s\", 0x%x) -> %s: %s\n"), + aix_pathname, + open_mode, + ACE_TEXT ((this->handle_ != ACE_SHLIB_INVALID_HANDLE) + ? "succeeded" + : "failed"), + this->error()->c_str())); + } + + this->handle_ = ACE_OS::dlopen (aix_pathname, open_mode); + if (this->handle_ != ACE_SHLIB_INVALID_HANDLE) + break; + + // If errno is ENOENT we just skip over this one, anything + // else - like an undefined symbol, for instance + // must be flagged here or the next error will mask it. + // + // @TODO: If we've found our DLL _and_ it's broken, + // should we continue at all? + if (ACE::debug () && (errno != 0) && (errno != ENOENT)) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE (%P|%t) DLL_Handle::open ") + ACE_TEXT ("(\'%s\') failed, errno=") + ACE_TEXT ("%d: %s\n"), + name->c_str (), + errno, + this->error ()->c_str ())); + + } +#endif /* AIX */ + + name_iter.advance (); + } + + if (this->handle_ == ACE_SHLIB_INVALID_HANDLE) + { + if (ACE::debug ()) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE (%P|%t) DLL_Handle::open (\"%s\"): ") + ACE_TEXT ("Invalid handle error: %s\n"), + this->dll_name_, + this->error ()->c_str ())); + + return -1; + } + } + } + + ++this->refcount_; + + if (ACE::debug ()) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("ACE (%P|%t) DLL_Handle::open - %s (%d), refcount=%d\n"), + this->dll_name_, + this->handle_, + this->refcount_)); + return 0; +} + + +int +ACE_DLL_Handle::close (int unload) +{ + ACE_TRACE ("ACE_DLL_Handle::close"); + + int retval = 0; + ACE_SHLIB_HANDLE h = ACE_SHLIB_INVALID_HANDLE; + + // Only hold the lock until it comes time to dlclose() the DLL. Closing + // the DLL can cause further shutdowns as DLLs and their dependents are + // unloaded. + { + ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, 0)); + + // Since we don't actually unload the dll as soon as the refcount + // reaches zero, we need to make sure we don't decrement it below + // zero. + if (this->refcount_ > 0) + --this->refcount_; + else + this->refcount_ = 0; + + if (ACE::debug ()) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("ACE (%P|%t) DLL_Handle::close - ") + ACE_TEXT ("%s (handle=%d, refcount=%d)\n"), + this->dll_name_, + this->handle_, + this->refcount_)); + + if (this->refcount_ == 0 && + this->handle_ != ACE_SHLIB_INVALID_HANDLE && + unload == 1) + { + if (ACE::debug ()) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("ACE (%P|%t) DLL_Handle::close: ") + ACE_TEXT ("Unloading %s (handle=%d)\n"), + this->dll_name_, + this->handle_)); + + // First remove any associated Framework Components. + ACE_Framework_Repository *frPtr= ACE_Framework_Repository::instance (); + if (frPtr) + { + frPtr->remove_dll_components (this->dll_name_); + } + + h = this->handle_; + this->handle_ = ACE_SHLIB_INVALID_HANDLE; + } + } // Release lock_ here + + if (h != ACE_SHLIB_INVALID_HANDLE) + { + retval = ACE_OS::dlclose (h); + + if (retval != 0 && ACE::debug ()) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE (%P|%t) DLL_Handle::close - ") + ACE_TEXT ("Failed with: \"%s\".\n"), + this->error ()->c_str ())); + } + + return retval; +} + +sig_atomic_t +ACE_DLL_Handle::refcount (void) const +{ + return this->refcount_; +} + +void * +ACE_DLL_Handle::symbol (const ACE_TCHAR *sym_name, int ignore_errors) +{ + ACE_TRACE ("ACE_DLL_Handle::symbol"); + ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, 0)); + + ACE_Auto_Array_Ptr auto_name (ACE::ldname (sym_name)); + // handle_ can be invalid especially when ACE_DLL_Handle resigned ownership + // BTW. Handle lifecycle management is a little crazy in ACE + if (this->handle_ != ACE_SHLIB_INVALID_HANDLE) + { +#if defined (ACE_OPENVMS) + void *sym = ACE::ldsymbol (this->handle_, auto_name.get ()); +#else + void *sym = ACE_OS::dlsym (this->handle_, auto_name.get ()); +#endif + + // Linux says that the symbol could be null and that it isn't an + // error. So you should check the error message also, but since + // null symbols won't do us much good anyway, let's still report + // an error. + if (!sym && ignore_errors != 1) + { + if (ACE::debug ()) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE (%P|%t) DLL_Handle::symbol (\"%s\") ") + ACE_TEXT (" failed with \"%s\".\n"), + auto_name.get (), + this->error ()->c_str ())); + + return 0; + } + return sym; + } + return 0; +} + +ACE_SHLIB_HANDLE +ACE_DLL_Handle::get_handle (int become_owner) +{ + ACE_TRACE ("ACE_DLL_Handle::get_handle"); + ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, 0)); + + if (this->refcount_ == 0 && become_owner != 0) + { + if (ACE::debug ()) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE (%P|%t) DLL_Handle::get_handle: ") + ACE_TEXT ("cannot become owner, refcount == 0.\n"))); + + return ACE_SHLIB_INVALID_HANDLE; + } + + ACE_SHLIB_HANDLE handle = this->handle_; + + if (become_owner != 0) + { + if (--this->refcount_ == 0) + this->handle_ = ACE_SHLIB_INVALID_HANDLE; + } + + if (ACE::debug ()) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("ACE (%P|%t) ACE_DLL_Handle::get_handle: ") + ACE_TEXT ("post call: handle %s, refcount %d\n"), + this->handle_ == ACE_SHLIB_INVALID_HANDLE ? + ACE_TEXT ("invalid") : ACE_TEXT ("valid"), + this->refcount_)); + + return handle; +} + +// This method is used return the last error of a library operation. + +auto_ptr +ACE_DLL_Handle::error (void) +{ + ACE_TRACE ("ACE_DLL_Handle::error"); + const ACE_TCHAR *error = ACE_OS::dlerror (); + auto_ptr str + (new ACE_TString (error ? error : ACE_TEXT ("no error"))); + return str; +} + +void +ACE_DLL_Handle::get_dll_names (const ACE_TCHAR *dll_name, + ACE_Array &try_names) +{ + // Build the array of DLL names to try on this platform by applying the + // proper prefixes and/or suffixes to the specified dll_name. + ACE_TString base (dll_name); + ACE_TString base_dir, base_file, base_suffix; + + // 1. Separate the dll_name into the dir part and the file part. We + // only decorate the file part to determine the names to try loading. + ACE_TString::size_type pos = base.rfind (ACE_DIRECTORY_SEPARATOR_CHAR); + if (pos != ACE_TString::npos) + { + base_dir = base.substr (0, pos + 1); + base_file = base.substr (pos + 1); + } + else + base_file = base; + + // 2. Locate the file suffix, if there is one. Move the '.' and the + // suffix to base_suffix. + if ((pos = base_file.rfind (ACE_TEXT ('.'))) != ACE_TString::npos) + { + base_suffix = base_file.substr (pos); + base_file = base_file.substr (0, pos); + } + + // 3. Build the combinations to try for this platform. + // Try these combinations: + // - name with decorator and platform's suffix appended (if not supplied) + // - name with platform's suffix appended (if not supplied) + // - name with platform's dll prefix (if it has one) and suffix + // - name with platform's dll prefix, decorator, and suffix. + // - name as originally given + // We first try to find the file using the decorator so that when a + // filename with and without decorator is used, we get the file with + // the same decorator as the ACE dll has and then as last resort + // the one without. For example with msvc, the debug build has a "d" + // decorator, but the release build has none and we really want to get + // the debug version of the library in a debug application instead + // of the release one. + // So we need room for 5 entries in try_names. + try_names.size (0); + if ((try_names.max_size () - try_names.size ()) < 5) + try_names.max_size (try_names.max_size () + 5); +#if defined (ACE_WIN32) && defined (ACE_LD_DECORATOR_STR) && !defined (ACE_DISABLE_DEBUG_DLL_CHECK) + ACE_TString decorator (ACE_LD_DECORATOR_STR); +#endif + ACE_TString suffix (ACE_DLL_SUFFIX); + ACE_TString prefix (ACE_DLL_PREFIX); + + for (size_t i = 0; i < 5 && try_names.size () < try_names.max_size (); ++i) + { + ACE_TString try_this; + size_t j = try_names.size (); + switch (i) + { + case 0: // Name + decorator + suffix + case 1: // Name + suffix + case 2: // Prefix + name + decorator + suffix + case 3: // Prefix + name + suffix + if ( + base_suffix.length () > 0 +#if !(defined(ACE_WIN32) && defined (ACE_LD_DECORATOR_STR) && !defined (ACE_DISABLE_DEBUG_DLL_CHECK)) + || (i == 1 || i == 3) // No decorator desired; skip +#endif + ) + break; + try_this = base_dir; + if (i > 1) + try_this += prefix; + try_this += base_file; + if (base_suffix.length () > 0) + try_this += base_suffix; + else + { +#if defined (ACE_WIN32) && defined (ACE_LD_DECORATOR_STR) && !defined (ACE_DISABLE_DEBUG_DLL_CHECK) + try_this += decorator; +#endif + try_this += suffix; + } + break; + case 4: + try_this = dll_name; + break; + } + + if (try_this.length ()) + { + try_names.size (j + 1); + try_names.set (try_this, j); + } + } + return; +} + +/******************************************************************/ + +// Pointer to the Singleton instance. +ACE_DLL_Manager *ACE_DLL_Manager::instance_ = 0; + + +ACE_DLL_Manager * +ACE_DLL_Manager::instance (int size) +{ + ACE_TRACE ("ACE_DLL_Manager::instance"); + + if (ACE_DLL_Manager::instance_ == 0) + { + // Perform Double-Checked Locking Optimization. + ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, + *ACE_Static_Object_Lock::instance (), 0)); + if (ACE_DLL_Manager::instance_ == 0) + { + ACE_NEW_RETURN (ACE_DLL_Manager::instance_, + ACE_DLL_Manager (size), + 0); + } + } + + return ACE_DLL_Manager::instance_; +} + +void +ACE_DLL_Manager::close_singleton (void) +{ + ACE_TRACE ("ACE_DLL_Manager::close_singleton"); + + ACE_MT (ACE_GUARD (ACE_Recursive_Thread_Mutex, ace_mon, + *ACE_Static_Object_Lock::instance ())); + + delete ACE_DLL_Manager::instance_; + ACE_DLL_Manager::instance_ = 0; +} + +ACE_DLL_Manager::ACE_DLL_Manager (int size) + : handle_vector_ (0), + current_size_ (0), + total_size_ (0), + unload_policy_ (ACE_DLL_UNLOAD_POLICY_PER_DLL) +{ + ACE_TRACE ("ACE_DLL_Manager::ACE_DLL_Manager"); + + if (this->open (size) != 0 && ACE::debug ()) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE_DLL_Manager ctor failed to allocate ") + ACE_TEXT ("handle_vector_.\n"))); +} + +ACE_DLL_Manager::~ACE_DLL_Manager (void) +{ + ACE_TRACE ("ACE_DLL_Manager::~ACE_DLL_Manager"); + + if (this->close () != 0 && ACE::debug ()) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE_DLL_Manager dtor failed to close ") + ACE_TEXT ("properly.\n"))); +} + +ACE_DLL_Handle * +ACE_DLL_Manager::open_dll (const ACE_TCHAR *dll_name, + int open_mode, + ACE_SHLIB_HANDLE handle) +{ + ACE_TRACE ("ACE_DLL_Manager::open_dll"); + + ACE_DLL_Handle *temp_handle = 0; + ACE_DLL_Handle *dll_handle = 0; + { + ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, 0)); + dll_handle = this->find_dll (dll_name); + if (!dll_handle) + { + if (this->current_size_ < this->total_size_) + { + ACE_NEW_RETURN (temp_handle, + ACE_DLL_Handle, + 0); + + dll_handle = temp_handle; + } + } + } + + if (dll_handle) + { + if (dll_handle->open (dll_name, open_mode, handle) != 0) + { + // Error while opening dll. Free temp handle + if (ACE::debug ()) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE_DLL_Manager::open_dll: Could not ") + ACE_TEXT ("open dll %s.\n"), + dll_name)); + + delete temp_handle; + return 0; + } + + // Add the handle to the vector only if the dll is successfully + // opened. + if (temp_handle != 0) + { + ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, 0)); + this->handle_vector_[this->current_size_] = dll_handle; + ++this->current_size_; + } + } + + return dll_handle; +} + +int +ACE_DLL_Manager::close_dll (const ACE_TCHAR *dll_name) +{ + ACE_TRACE ("ACE_DLL_Manager::close_dll"); + ACE_DLL_Handle *handle = 0; + + { + ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, 0)); + handle = this->find_dll (dll_name); + } + + if (handle) + { + return this->unload_dll (handle, 0); + } + + return -1; +} + +u_long +ACE_DLL_Manager::unload_policy (void) const +{ + ACE_TRACE ("ACE_DLL_Manager::unload_policy"); + return this->unload_policy_; +} + +void +ACE_DLL_Manager::unload_policy (u_long unload_policy) +{ + ACE_TRACE ("ACE_DLL_Manager::unload_policy"); + ACE_MT (ACE_GUARD (ACE_Thread_Mutex, ace_mon, this->lock_)); + + u_long old_policy = this->unload_policy_; + this->unload_policy_ = unload_policy; + + // If going from LAZY to EAGER or from PER_DLL to PER_PROCESS|EAGER, + // call close(1) on all the ACE_DLL_Handle objects with refcount == 0 + // which will force those that are still loaded to be unloaded. + if (this->handle_vector_) + if (( ACE_BIT_ENABLED (old_policy, ACE_DLL_UNLOAD_POLICY_LAZY) && + ACE_BIT_DISABLED (this->unload_policy_, ACE_DLL_UNLOAD_POLICY_LAZY) ) || + ( ACE_BIT_DISABLED (this->unload_policy_, ACE_DLL_UNLOAD_POLICY_LAZY) && + ACE_BIT_ENABLED (old_policy, ACE_DLL_UNLOAD_POLICY_PER_DLL) && + ACE_BIT_DISABLED (this->unload_policy_, ACE_DLL_UNLOAD_POLICY_PER_DLL) )) + { + for (int i = this->current_size_ - 1; i >= 0; i--) + { + if (this->handle_vector_[i] && + this->handle_vector_[i]->refcount () == 0) + this->handle_vector_[i]->close (1); + } + } +} + +int +ACE_DLL_Manager::open (int size) +{ + ACE_TRACE ("ACE_DLL_Manager::open"); + + ACE_DLL_Handle **temp = 0; + + ACE_NEW_RETURN (temp, + ACE_DLL_Handle *[size], + -1); + + this->handle_vector_ = temp; + this->total_size_ = size; + return 0; +} + +int +ACE_DLL_Manager::close (void) +{ + ACE_TRACE ("ACE_DLL_Manager::close"); + + int force_close = 1; + + if (this->handle_vector_ != 0) + { + // Delete components in reverse order. + for (int i = this->current_size_ - 1; i >= 0; i--) + { + if (this->handle_vector_[i]) + { + ACE_DLL_Handle *s = + const_cast (this->handle_vector_[i]); + this->handle_vector_[i] = 0; + this->unload_dll (s, force_close); + delete s; + } + } + + delete [] this->handle_vector_; + this->handle_vector_ = 0; + this->current_size_ = 0; + } + return 0; +} + +ACE_DLL_Handle * +ACE_DLL_Manager::find_dll (const ACE_TCHAR *dll_name) const +{ + ACE_TRACE ("ACE_DLL_Manager::find_dll"); + + for (int i = 0; i < this->current_size_; i++) + if (this->handle_vector_[i] && + ACE_OS::strcmp (this->handle_vector_[i]->dll_name (), dll_name) == 0) + { + return this->handle_vector_[i]; + } + + return 0; +} + +int +ACE_DLL_Manager::unload_dll (ACE_DLL_Handle *dll_handle, int force_unload) +{ + ACE_TRACE ("ACE_DLL_Manager::unload_dll"); + + if (dll_handle) + { + int unload = force_unload; + if (unload == 0) + { + // apply strategy + if (ACE_BIT_DISABLED (this->unload_policy_, + ACE_DLL_UNLOAD_POLICY_PER_DLL)) + { + unload = ACE_BIT_DISABLED (this->unload_policy_, + ACE_DLL_UNLOAD_POLICY_LAZY); + } + else + { + // Declare the type of the symbol: + typedef int (*dll_unload_policy)(void); + + void * const unload_policy_ptr = + dll_handle->symbol (ACE_TEXT ("_get_dll_unload_policy"), 1); +#if defined (ACE_OPENVMS) && (!defined (__INITIAL_POINTER_SIZE) || (__INITIAL_POINTER_SIZE < 64)) + int const temp_p = + reinterpret_cast (unload_policy_ptr); +#else + intptr_t const temp_p = + reinterpret_cast (unload_policy_ptr); +#endif + + dll_unload_policy const the_policy = + reinterpret_cast (temp_p); + + if (the_policy != 0) + unload = ACE_BIT_DISABLED (the_policy (), + ACE_DLL_UNLOAD_POLICY_LAZY); + else + unload = ACE_BIT_DISABLED (this->unload_policy_, + ACE_DLL_UNLOAD_POLICY_LAZY); + } + } + + if (dll_handle->close (unload) != 0) + { + if (ACE::debug ()) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE_DLL_Manager::unload error.\n"))); + + return -1; + } + } + else + { + if (ACE::debug ()) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE_DLL_Manager::unload_dll called with ") + ACE_TEXT ("null pointer.\n"))); + + return -1; + } + + return 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/DLL_Manager.h b/ACE/ace/DLL_Manager.h new file mode 100644 index 00000000000..a59636696ba --- /dev/null +++ b/ACE/ace/DLL_Manager.h @@ -0,0 +1,269 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file DLL_Manager.h + * + * $Id$ + * + * @author Don Hinton + */ +//============================================================================= + +#ifndef ACE_DLL_MANAGER_H +#define ACE_DLL_MANAGER_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Auto_Ptr.h" +#include "ace/Containers_T.h" +#include "ace/SStringfwd.h" +#include "ace/os_include/os_dlfcn.h" + +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) +# include "ace/Thread_Mutex.h" +#endif /* ACE_MT_SAFE */ + +#define ACE_DEFAULT_DLL_MANAGER_SIZE 1024 + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_DLL_Handle + * + * @brief Provides an abstract interface for handling various DLL + * operations. + * + * This class is an wrapper over the various methods for utilizing a + * dynamically linked library (DLL), which is called a shared library + * on some platforms. It is refcounted and managed by + * ACE_DLL_Manager, so there will only be a single instance of this + * class for each dll loaded, no matter how many instances of ACE_DLL + * an application has open. Operations , , and + * have been implemented to help opening/closing and extracting symbol + * information from a DLL, respectively. + * + * Most of this class came from the original ACE_DLL class. ACE_DLL + * is now just an interface that passed all it's calls either directly + * or via ACE_DLL_Manager to this class for execution. + * + */ +class ACE_Export ACE_DLL_Handle +{ +public: + + /// Default construtor. + ACE_DLL_Handle (void); + + /// Destructor. + ~ACE_DLL_Handle (void); + + /// Returns the name of the shared library (without prefixes or suffixes). + const ACE_TCHAR *dll_name () const; + + /** + * This method opens and dynamically links @a dll_name. The default + * mode is , which loads identifier symbols but not the + * symbols for functions, which are loaded dynamically on-demand. + * Other supported modes include: , which performs all + * necessary relocations when @a dll_name is first loaded and + * , which makes symbols available for relocation + * processing of any other DLLs. Returns -1 on failure and 0 on + * success. + */ + int open (const ACE_TCHAR *dll_name, + int open_mode, + ACE_SHLIB_HANDLE handle); + + /// Call to close the DLL object. If unload = 0, it only decrements + /// the refcount, but if unload = 1, then it will actually unload + /// the library when the refcount == 0; + int close (int unload = 0); + + /// Return the current refcount. + sig_atomic_t refcount (void) const; + + /// If @a symbol_name is in the symbol table of the DLL a pointer to + /// the @a symbol_name is returned. Otherwise, returns 0. Set the + /// ignore_errors flag to supress logging errors if symbol_name isn't + /// found. This is nice if you just want to probe a dll to see what's + /// available, since missing functions in that case aren't really errors. + void *symbol (const ACE_TCHAR *symbol_name, int ignore_errors = 0); + + /** + * Return the handle to the caller. If @a become_owner is non-0 then + * caller assumes ownership of the handle so we decrement the retcount. + */ + ACE_SHLIB_HANDLE get_handle (int become_owner = 0); + +private: + + /// Returns a pointer to a string explaining why or + /// failed. This is used internal to print out the error to the log, + /// but since this object is shared, we can't store or return the error + /// to the caller. + auto_ptr error (void); + + // Builds array of DLL names to try to dlopen, based on platform + // and configured DLL prefixes/suffixes. + // Returns the array of names to try in try_names. + void get_dll_names (const ACE_TCHAR *dll_name, + ACE_Array &try_names); + + // Disallow copying and assignment since we don't handle them. + ACE_DLL_Handle (const ACE_DLL_Handle &); + void operator= (const ACE_DLL_Handle &); + +private: + + // Keep track of how many ACE_DLL objects have a reference to this + // dll. + sig_atomic_t refcount_; + + /// Name of the shared library. + ACE_TCHAR *dll_name_; + + /// Handle to the actual library loaded by the OS. + ACE_SHLIB_HANDLE handle_; + + /// Keeps track of whether or not open() has ever been called. This + /// helps get around problem on Linux, and perhaps other OS's, that + /// seg-fault if dlerror() is called before the ld library has been + /// initialized by a call to dlopen(). + static sig_atomic_t open_called_; + +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) + /// Synchronization variable for the MT_SAFE Repository + ACE_Thread_Mutex lock_; +#endif /* ACE_MT_SAFE */ +}; + +class ACE_Framework_Repository; + +/** + * @class ACE_DLL_Manager + * + * @brief This class is a singleton and serves as a factory and + * repository for instances of ACE_DLL_Handle. + * + * This class is a singleton whose lifetime is managed by the + * ACE_Framework_Repository. Although it is normally meant to be + * used directly only by ACE_DLL, applications can call the unload_policy() + * methods in order get/set the the dll unload policy. Unload policies include + * per_process/per-dll and eager/lazy. Dlls can export set their own policy + * by using the ACE_DLL_UNLOAD_POLICY macro found in config-all.h. If a dll + * choses to set an unload policy, it will be used when the per-dll policy + * (the default) is in effect. If the per-dll policy is in effect and a dll + * has not chosen to set a policy, the current per-process policy will be + * used. + * + * The following policy macros are provided in config-all.h: + * + * ACE_DLL_UNLOAD_POLICY_PER_PROCESS - Per-process policy that unloads dlls + * eagerly. + * + * ACE_DLL_UNLOAD_POLICY_PER_DLL - Apply policy on a per-dll basis. If the + * dll doesn't use one of the macros below, the current per-process policy + * will be used. + * + * ACE_DLL_UNLOAD_POLICY_LAZY - Don't unload dll when refcount reaches + * zero, i.e., wait for either an explicit unload request or program exit. + * + * ACE_DLL_UNLOAD_POLICY_DEFAULT - Default policy allows dlls to control + * their own destinies, but will unload those that don't make a choice eagerly. + * + */ +class ACE_Export ACE_DLL_Manager +{ +public: + friend class ACE_Framework_Repository; + friend class ACE_Object_Manager; + + enum + { + DEFAULT_SIZE = ACE_DEFAULT_DLL_MANAGER_SIZE + }; + + /// Return a unique instance + static ACE_DLL_Manager *instance (int size = ACE_DLL_Manager::DEFAULT_SIZE); + + /// Factory for ACE_DLL_Handle objects. If one already exits, + /// its refcount is incremented. + ACE_DLL_Handle *open_dll (const ACE_TCHAR *dll_name, + int openmode, + ACE_SHLIB_HANDLE handle); + + /// Close the underlying dll. Decrements the refcount. + int close_dll (const ACE_TCHAR *dll_name); + + /// Returns the current per-process UNLOAD_POLICY. + u_long unload_policy (void) const; + + /// Set the per-process UNLOAD_POLICY. If the policy is changed from + /// LAZY to EAGER, then it will also unload any dlls with zero + /// refcounts. + void unload_policy (u_long unload_policy); + +protected: + + /// Default constructor. + ACE_DLL_Manager (int size = ACE_DLL_Manager::DEFAULT_SIZE); + + /// Destructor. + ~ACE_DLL_Manager (void); + + // Allocate handle_vector_. + int open (int size); + + // Close all open dlls and deallocate memory. + int close (void); + + // Find dll in handle_vector_. + ACE_DLL_Handle *find_dll (const ACE_TCHAR *dll_name) const; + + // Applies strategy for unloading dll. + int unload_dll (ACE_DLL_Handle *dll_handle, int force_unload = 0); + +private: + + /// Close the singleton instance. + static void close_singleton (void); + + // Disallow copying and assignment since we don't handle these. + ACE_DLL_Manager (const ACE_DLL_Manager &); + void operator= (const ACE_DLL_Manager &); + +private: + + /// Vector containing all loaded handle objects. + ACE_DLL_Handle **handle_vector_; + + /// Current number of handles. + int current_size_; + + /// Maximum number of handles. + int total_size_; + + /// Unload strategy. + u_long unload_policy_; + + /// Pointer to a process-wide ACE_DLL_Manager. + static ACE_DLL_Manager *instance_; + +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) + /// Synchronization variable for the MT_SAFE Repository + ACE_Thread_Mutex lock_; +#endif /* ACE_MT_SAFE */ + +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" +#endif /* ACE_DLL_MANAGER_H */ diff --git a/ACE/ace/Date_Time.cpp b/ACE/ace/Date_Time.cpp new file mode 100644 index 00000000000..85abf562c47 --- /dev/null +++ b/ACE/ace/Date_Time.cpp @@ -0,0 +1,10 @@ +// Date_Time.cpp +// $Id$ + +#include "ace/Date_Time.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Date_Time.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, Date_Time, "$Id$") diff --git a/ACE/ace/Date_Time.h b/ACE/ace/Date_Time.h new file mode 100644 index 00000000000..9204e23a1b8 --- /dev/null +++ b/ACE/ace/Date_Time.h @@ -0,0 +1,125 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file Date_Time.h + * + * $Id$ + * + * @author Tim Harrison (harrison@cs.wustl.edu) (and he's darn proud of this ;-)) + * + */ +//========================================================================== + +#ifndef ACE_DATE_TIME_H +#define ACE_DATE_TIME_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_Time_Value; + +/** + * @class ACE_Date_Time + * + * @brief System independent representation of date and time. + */ +class ACE_Export ACE_Date_Time +{ +public: + /// Constructor initializes current time/date info. + ACE_Date_Time (void); + + /// Constructor initializes with the given ACE_Time_Value + explicit ACE_Date_Time (const ACE_Time_Value& timevalue); + + /// Constructor with init values, no check for validy + /// Set/get portions of ACE_Date_Time, no check for validity. + ACE_Date_Time (long day, + long month = 0, + long year = 0, + long hour = 0, + long minute = 0, + long second = 0, + long microsec = 0, + long wday = 0); + + /// Update to the current time/date. + void update (void); + + /// Update to the given ACE_Time_Value + void update (const ACE_Time_Value& timevalue); + + /// Get day. + long day (void) const; + + /// Set day. + void day (long day); + + /// Get month. + long month (void) const; + + /// Set month. + void month (long month); + + /// Get year. + long year (void) const; + + /// Set year. + void year (long year); + + /// Get hour. + long hour (void) const; + + /// Set hour. + void hour (long hour); + + /// Get minute. + long minute (void) const; + + /// Set minute. + void minute (long minute); + + /// Get second. + long second (void) const; + + /// Set second. + void second (long second); + + /// Get microsec. + long microsec (void) const; + + /// Set microsec. + void microsec (long microsec); + + /// Get weekday. + long weekday (void) const; + + /// Set weekday. + void weekday (long wday); + +private: + long day_; + long month_; + long year_; + long hour_; + long minute_; + long second_; + long microsec_; + long wday_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Date_Time.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_DATE_TIME_H */ diff --git a/ACE/ace/Date_Time.inl b/ACE/ace/Date_Time.inl new file mode 100644 index 00000000000..dfb0d239bc3 --- /dev/null +++ b/ACE/ace/Date_Time.inl @@ -0,0 +1,219 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/Global_Macros.h" +#include "ace/Time_Value.h" +#include "ace/OS_NS_sys_time.h" +#include "ace/OS_NS_time.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE void +ACE_Date_Time::update (const ACE_Time_Value& timevalue) +{ +#if defined (ACE_HAS_WINCE) + // CE doesn't do localtime(). + FILETIME file_time = timevalue; + FILETIME local_file_time; + SYSTEMTIME sys_time; + ::FileTimeToLocalFileTime (&file_time, &local_file_time); + ::FileTimeToSystemTime (&local_file_time, &sys_time); + this->day_ = sys_time.wDay; + this->month_ = sys_time.wMonth; + this->year_ = sys_time.wYear; + this->hour_ = sys_time.wHour; + this->minute_ = sys_time.wMinute; + this->second_ = sys_time.wSecond; + this->microsec_ = sys_time.wMilliseconds * 1000; + this->wday_ = sys_time.wDayOfWeek; +#else + time_t time = timevalue.sec (); + struct tm tm_time; + ACE_OS::localtime_r (&time, &tm_time); + this->day_ = tm_time.tm_mday; + this->month_ = tm_time.tm_mon + 1; // localtime's months are 0-11 + this->year_ = tm_time.tm_year + 1900; // localtime reports years since 1900 + this->hour_ = tm_time.tm_hour; + this->minute_ = tm_time.tm_min; + this->second_ = tm_time.tm_sec; + this->microsec_ = timevalue.usec (); + this->wday_ = tm_time.tm_wday; +#endif /* ACE_HAS_WINCE */ +} + +ACE_INLINE void +ACE_Date_Time::update (void) +{ + ACE_TRACE ("ACE_Date_Time::update"); + + update(ACE_OS::gettimeofday ()); +} + +ACE_INLINE +ACE_Date_Time::ACE_Date_Time (void) +{ + ACE_TRACE ("ACE_Date_Time::ACE_Date_Time"); + this->update (); +} + +ACE_INLINE +ACE_Date_Time::ACE_Date_Time (const ACE_Time_Value& timevalue) +{ + ACE_TRACE ("ACE_Date_Time::ACE_Date_Time: timevalue"); + this->update (timevalue); +} + +// Constructor with init values, no check for validy +ACE_INLINE +ACE_Date_Time::ACE_Date_Time (long day, + long month, + long year, + long hour, + long minute, + long second, + long microsec, + long wday) + : day_ (day), + month_ (month), + year_ (year), + hour_ (hour), + minute_ (minute), + second_ (second), + microsec_ (microsec), + wday_ (wday) +{ + ACE_TRACE ("ACE_Date_Time::ACE_Date_Time"); +} + +// set/get portions of ACE_Date_Time, no check for validy + +// get day +ACE_INLINE long +ACE_Date_Time::day (void) const +{ + ACE_TRACE ("ACE_Date_Time::day"); + return day_; +} + +// set day +ACE_INLINE void +ACE_Date_Time::day (long day) +{ + ACE_TRACE ("ACE_Date_Time::day"); + day_ = day; +} + +// get month +ACE_INLINE long +ACE_Date_Time::month (void) const +{ + ACE_TRACE ("ACE_Date_Time::month"); + return month_; +} + +// set month +ACE_INLINE void +ACE_Date_Time::month (long month) +{ + ACE_TRACE ("ACE_Date_Time::month"); + month_ = month; +} + +// get year +ACE_INLINE long +ACE_Date_Time::year (void) const +{ + ACE_TRACE ("ACE_Date_Time::year"); + return year_; +} + +// set year +ACE_INLINE void +ACE_Date_Time::year (long year) +{ + ACE_TRACE ("ACE_Date_Time::year"); + year_ = year; +} + +// get hour +ACE_INLINE long +ACE_Date_Time::hour (void) const +{ + ACE_TRACE ("ACE_Date_Time::hour"); + return hour_; +} + +// set hour +ACE_INLINE void +ACE_Date_Time::hour (long hour) +{ + ACE_TRACE ("ACE_Date_Time::hour"); + hour_ = hour; +} + +// get minute +ACE_INLINE long +ACE_Date_Time::minute (void) const +{ + ACE_TRACE ("ACE_Date_Time::minute"); + return minute_; +} + +// set minute +ACE_INLINE void +ACE_Date_Time::minute (long minute) +{ + ACE_TRACE ("ACE_Date_Time::minute"); + minute_ = minute; +} + +// get second +ACE_INLINE long +ACE_Date_Time::second (void) const +{ + ACE_TRACE ("ACE_Date_Time::second"); + return second_; +} + +// set second +ACE_INLINE void +ACE_Date_Time::second (long second) +{ + ACE_TRACE ("ACE_Date_Time::second"); + second_ = second; +} + +// get microsec +ACE_INLINE long +ACE_Date_Time::microsec (void) const +{ + ACE_TRACE ("ACE_Date_Time::microsec"); + return microsec_; +} + +// set microsec +ACE_INLINE void +ACE_Date_Time::microsec (long microsec) +{ + ACE_TRACE ("ACE_Date_Time::microsec"); + microsec_ = microsec; +} + +// get wday +ACE_INLINE long +ACE_Date_Time::weekday (void) const +{ + ACE_TRACE ("ACE_Date_Time::weekday"); + return wday_; +} + +// set wday +ACE_INLINE void +ACE_Date_Time::weekday (long wday) +{ + ACE_TRACE ("ACE_Date_Time::weekday"); + wday_ = wday; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Default_Constants.h b/ACE/ace/Default_Constants.h new file mode 100644 index 00000000000..ce435121681 --- /dev/null +++ b/ACE/ace/Default_Constants.h @@ -0,0 +1,573 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Default_Constants.h + * + * $Id$ + * + * @author Douglas C. Schmidt + * @author Jesper S. M|ller + * @author and a cast of thousands... + * + * This one is split from the famous OS.h + */ +//============================================================================= + +#ifndef ACE_DEFAULT_CONSTANTS_H +#define ACE_DEFAULT_CONSTANTS_H +#include /**/ "ace/pre.h" + +// Included just keep compilers that see #pragma dierctive first +// happy. +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +// Define the default constants for ACE. Many of these are used for +// the ACE tests and applications. You can change these values by +// defining the macros in your config.h file. +# if !defined (ACE_DEFAULT_CLOSE_ALL_HANDLES) +# define ACE_DEFAULT_CLOSE_ALL_HANDLES true +# endif /* ACE_DEFAULT_CLOSE_ALL_HANDLES */ + +// The maximum length for a fully qualified Internet name. +# if !defined(ACE_MAX_FULLY_QUALIFIED_NAME_LEN) +# define ACE_MAX_FULLY_QUALIFIED_NAME_LEN 256 +# endif /* ACE_MAX_FULLY_QUALIFIED_NAME_LEN */ + +#if !defined (ACE_DEFAULT_PAGEFILE_POOL_BASE) +#define ACE_DEFAULT_PAGEFILE_POOL_BASE (void *) 0 +#endif /* ACE_DEFAULT_PAGEFILE_POOL_BASE */ + +#if !defined (ACE_DEFAULT_PAGEFILE_POOL_SIZE) +#define ACE_DEFAULT_PAGEFILE_POOL_SIZE (size_t) 0x01000000 +#endif /* ACE_DEFAULT_PAGEFILE_POOL_SIZE */ + +#if !defined (ACE_DEFAULT_PAGEFILE_POOL_CHUNK) +#define ACE_DEFAULT_PAGEFILE_POOL_CHUNK (size_t) 0x00010000 +#endif /* ACE_DEFAULT_PAGEFILE_POOL_CHUNK */ + +#if !defined (ACE_DEFAULT_PAGEFILE_POOL_NAME) +#define ACE_DEFAULT_PAGEFILE_POOL_NAME ACE_TEXT ("Default_ACE_Pagefile_Memory_Pool") +#endif /* ACE_DEFAULT_PAGEFILE_POOL_NAME */ + +#if !defined (ACE_DEFAULT_MESSAGE_BLOCK_PRIORITY) +#define ACE_DEFAULT_MESSAGE_BLOCK_PRIORITY 0 +#endif /* ACE_DEFAULT_MESSAGE_BLOCK_PRIORITY */ + +#if !defined (ACE_DEFAULT_SERVICE_REPOSITORY_SIZE) +#define ACE_DEFAULT_SERVICE_REPOSITORY_SIZE 1024 +#endif /* ACE_DEFAULT_SERVICE_REPOSITORY_SIZE */ + +#if !defined (ACE_REACTOR_NOTIFICATION_ARRAY_SIZE) +#define ACE_REACTOR_NOTIFICATION_ARRAY_SIZE 1024 +#endif /* ACE_REACTOR_NOTIFICATION_ARRAY_SIZE */ + +# if !defined (ACE_DEFAULT_TIMEOUT) +# define ACE_DEFAULT_TIMEOUT 5 +# endif /* ACE_DEFAULT_TIMEOUT */ + +# if !defined (ACE_DEFAULT_BACKLOG) +# define ACE_DEFAULT_BACKLOG 5 +# endif /* ACE_DEFAULT_BACKLOG */ + +# if !defined (ACE_DEFAULT_ASYNCH_BACKLOG) +# define ACE_DEFAULT_ASYNCH_BACKLOG 5 +# endif /* ACE_DEFAULT_ASYNCH_BACKLOG */ + +# if !defined (ACE_DEFAULT_THREADS) +# define ACE_DEFAULT_THREADS 1 +# endif /* ACE_DEFAULT_THREADS */ + +// The following 3 defines are used in the IP multicast and broadcast tests. +# if !defined (ACE_DEFAULT_BROADCAST_PORT) +# define ACE_DEFAULT_BROADCAST_PORT 20000 +# endif /* ACE_DEFAULT_BROADCAST_PORT */ + +# if !defined (ACE_DEFAULT_MULTICAST_PORT) +# define ACE_DEFAULT_MULTICAST_PORT 20001 +# endif /* ACE_DEFAULT_MULTICAST_PORT */ + +# if !defined (ACE_DEFAULT_MULTICAST_ADDR) +// This address MUST be within the range for host group addresses: +// 224.0.0.0 to 239.255.255.255. +# define ACE_DEFAULT_MULTICAST_ADDR "224.9.9.2" +# endif /* ACE_DEFAULT_MULTICAST_ADDR */ + +# if defined (ACE_HAS_IPV6) +# if !defined (ACE_DEFAULT_MULTICASTV6_ADDR) +// This address should be within the range for site-local addresses: +// ff05::0/16 . +# define ACE_DEFAULT_MULTICASTV6_ADDR "ff05:0::ff01:1" +# endif /* ACE_DEFAULT_MULTICASTV6_ADDR */ +# endif + +// Default port number for HTTP. +# if !defined (ACE_DEFAULT_HTTP_SERVER_PORT) +# define ACE_DEFAULT_HTTP_SERVER_PORT 80 +# endif /* ACE_DEFAULT_HTTP_SERVER_PORT */ + +// Used in many IPC_SAP tests +# if !defined (ACE_DEFAULT_SERVER_PORT) +# define ACE_DEFAULT_SERVER_PORT 20002 +# endif /* ACE_DEFAULT_SERVER_PORT */ + +# if !defined (ACE_DEFAULT_HTTP_PORT) +# define ACE_DEFAULT_HTTP_PORT 80 +# endif /* ACE_DEFAULT_HTTP_PORT */ + +# if !defined (ACE_DEFAULT_MAX_SOCKET_BUFSIZ) +# define ACE_DEFAULT_MAX_SOCKET_BUFSIZ 65536 +# endif /* ACE_DEFAULT_MAX_SOCKET_BUFSIZ */ + +# if !defined (ACE_DEFAULT_SERVER_PORT_STR) +# define ACE_DEFAULT_SERVER_PORT_STR ACE_TEXT("20002") +# endif /* ACE_DEFAULT_SERVER_PORT_STR */ + +// Used for the Service_Directory test +# if !defined (ACE_DEFAULT_SERVICE_PORT) +# define ACE_DEFAULT_SERVICE_PORT 20003 +# endif /* ACE_DEFAULT_SERVICE_PORT */ + +// Used for the ACE_Thread_Spawn test +# if !defined (ACE_DEFAULT_THR_PORT ) +# define ACE_DEFAULT_THR_PORT 20004 +# endif /* ACE_DEFAULT_THR_PORT */ + +// Used for tests +# if !defined (ACE_DEFAULT_LOCAL_PORT) +# define ACE_DEFAULT_LOCAL_PORT 20005 +# endif /* ACE_DEFAULT_LOCAL_PORT */ + +// Used for Connector tests +# if !defined (ACE_DEFAULT_LOCAL_PORT_STR) +# define ACE_DEFAULT_LOCAL_PORT_STR "20005" +# endif /* ACE_DEFAULT_LOCAL_PORT_STR */ + +// Used for the name server. +# if !defined (ACE_DEFAULT_NAME_SERVER_PORT) +# define ACE_DEFAULT_NAME_SERVER_PORT 20006 +# endif /* ACE_DEFAULT_NAME_SERVER_PORT */ + +# if !defined (ACE_DEFAULT_NAME_SERVER_PORT_STR) +# define ACE_DEFAULT_NAME_SERVER_PORT_STR "20006" +# endif /* ACE_DEFAULT_NAME_SERVER_PORT_STR */ + +// Used for the token server. +# if !defined (ACE_DEFAULT_TOKEN_SERVER_PORT) +# define ACE_DEFAULT_TOKEN_SERVER_PORT 20007 +# endif /* ACE_DEFAULT_TOKEN_SERVER_PORT */ + +# if !defined (ACE_DEFAULT_TOKEN_SERVER_PORT_STR) +# define ACE_DEFAULT_TOKEN_SERVER_PORT_STR "20007" +# endif /* ACE_DEFAULT_TOKEN_SERVER_PORT_STR */ + +// Used for the logging server. +# if !defined (ACE_DEFAULT_LOGGING_SERVER_PORT) +# define ACE_DEFAULT_LOGGING_SERVER_PORT 20008 +# endif /* ACE_DEFAULT_LOGGING_SERVER_PORT */ + +# if !defined (ACE_DEFAULT_LOGGING_SERVER_PORT_STR) +# define ACE_DEFAULT_LOGGING_SERVER_PORT_STR "20008" +# endif /* ACE_DEFAULT_LOGGING_SERVER_PORT_STR */ + +// Used for the logging server. +# if !defined (ACE_DEFAULT_THR_LOGGING_SERVER_PORT) +# define ACE_DEFAULT_THR_LOGGING_SERVER_PORT 20008 +# endif /* ACE_DEFAULT_THR_LOGGING_SERVER_PORT */ + +# if !defined (ACE_DEFAULT_THR_LOGGING_SERVER_PORT_STR) +# define ACE_DEFAULT_THR_LOGGING_SERVER_PORT_STR "20008" +# endif /* ACE_DEFAULT_THR_LOGGING_SERVER_PORT_STR */ + +// Used for the time server. +# if !defined (ACE_DEFAULT_TIME_SERVER_PORT) +# define ACE_DEFAULT_TIME_SERVER_PORT 20009 +# endif /* ACE_DEFAULT_TIME_SERVER_PORT */ + +# if !defined (ACE_DEFAULT_TIME_SERVER_PORT_STR) +# define ACE_DEFAULT_TIME_SERVER_PORT_STR "20009" +# endif /* ACE_DEFAULT_TIME_SERVER_PORT_STR */ + +# if !defined (ACE_DEFAULT_TIME_SERVER_STR) +# define ACE_DEFAULT_TIME_SERVER_STR "ACE_TS_TIME" +# endif /* ACE_DEFAULT_TIME_SERVER_STR */ + +// Used by the FIFO tests and the Client_Logging_Handler netsvc. +# if !defined (ACE_DEFAULT_RENDEZVOUS) +# if defined (ACE_HAS_STREAM_PIPES) +# define ACE_DEFAULT_RENDEZVOUS ACE_TEXT("/tmp/fifo.ace") +# else +# define ACE_DEFAULT_RENDEZVOUS ACE_TEXT("localhost:20010") +# endif /* ACE_HAS_STREAM_PIPES */ +# endif /* ACE_DEFAULT_RENDEZVOUS */ + +// Used for the UNIX syslog logging interface to ACE_Log_Msg. +# ifndef ACE_DEFAULT_SYSLOG_FACILITY +# define ACE_DEFAULT_SYSLOG_FACILITY LOG_USER +# endif /* ACE_DEFAULT_SYSLOG_FACILITY */ + +# if !defined (ACE_DEFAULT_LOGGER_KEY) + +# if defined (ACE_HAS_STREAM_PIPES) +# define ACE_DEFAULT_LOGGER_KEY ACE_TEXT ("/tmp/server_daemon") +# else +# define ACE_DEFAULT_LOGGER_KEY ACE_TEXT ("localhost:20012") +# endif /* ACE_HAS_STREAM_PIPES */ +# endif /* ACE_DEFAULT_LOGGER_KEY */ + +// The way to specify the local host for loopback IP. This is usually +// "localhost" but it may need changing on some platforms. +# if !defined (ACE_LOCALHOST) +# define ACE_LOCALHOST ACE_TEXT ("localhost") +# endif + +// This specification for an IPv6 localhost should work on all platforms +// supporting IPv6 +# if defined (ACE_HAS_IPV6) +# if !defined (ACE_IPV6_LOCALHOST) +# define ACE_IPV6_LOCALHOST ACE_TEXT ("::1") +# endif /* ACE_IPV6_LOCALHOST*/ +#endif /* ACE_HAS_IPV6 */ + +// This specification for an IPv6 ANY address should work on all platforms +// supporting IPv6 +# if defined (ACE_HAS_IPV6) +# if !defined (ACE_IPV6_ANY) +# define ACE_IPV6_ANY ACE_TEXT ("::") +# endif /* ACE_IPV6_ANY*/ +#endif /* ACE_HAS_IPV6 */ + +# if !defined (ACE_DEFAULT_SERVER_HOST) +# if defined (ACE_HAS_IPV6) +# define ACE_DEFAULT_SERVER_HOST ACE_IPV6_LOCALHOST +# else /*ACE_HAS_IPV6*/ +# define ACE_DEFAULT_SERVER_HOST ACE_LOCALHOST +# endif /*ACE_HAS_IPV6*/ +# endif /* ACE_DEFAULT_SERVER_HOST */ + +// Default shared memory key +# if !defined (ACE_DEFAULT_SHM_KEY) +# define ACE_DEFAULT_SHM_KEY 1234 +# endif /* ACE_DEFAULT_SHM_KEY */ + +// Default address for shared memory mapped files and SYSV shared memory +// (defaults to 64 M). +# if !defined (ACE_DEFAULT_BASE_ADDR) +# define ACE_DEFAULT_BASE_ADDR ((char *) (64 * 1024 * 1024)) +# endif /* ACE_DEFAULT_BASE_ADDR */ + +// Default segment size used by SYSV shared memory (128 K) +# if !defined (ACE_DEFAULT_SEGMENT_SIZE) +# define ACE_DEFAULT_SEGMENT_SIZE 1024 * 128 +# endif /* ACE_DEFAULT_SEGMENT_SIZE */ + +// Maximum number of SYSV shared memory segments +// (does anyone know how to figure out the right values?!) +# if !defined (ACE_DEFAULT_MAX_SEGMENTS) +# define ACE_DEFAULT_MAX_SEGMENTS 6 +# endif /* ACE_DEFAULT_MAX_SEGMENTS */ + +// Name of the map that's stored in shared memory. +# if !defined (ACE_NAME_SERVER_MAP) +# define ACE_NAME_SERVER_MAP "Name Server Map" +# endif /* ACE_NAME_SERVER_MAP */ + +// Default file permissions. +# if !defined (ACE_DEFAULT_FILE_PERMS) +# if defined (ACE_VXWORKS) +# define ACE_DEFAULT_FILE_PERMS (S_IRUSR | S_IWUSR| S_IRGRP| S_IROTH) +# else +# define ACE_DEFAULT_FILE_PERMS 0644 +# endif /* ACE_VXWORKS */ +# endif /* ACE_DEFAULT_FILE_PERMS */ + +// Default directory permissions. +# if !defined (ACE_DEFAULT_DIR_PERMS) +# define ACE_DEFAULT_DIR_PERMS 0755 +# endif /* ACE_DEFAULT_DIR_PERMS */ + +# if !defined (ACE_DEFAULT_TIMEPROBE_TABLE_SIZE) +# define ACE_DEFAULT_TIMEPROBE_TABLE_SIZE 8 * 1024 +# endif /* ACE_DEFAULT_TIMEPROBE_TABLE_SIZE */ + +// Default size of the ACE Map_Manager. +# if !defined (ACE_DEFAULT_MAP_SIZE) +# define ACE_DEFAULT_MAP_SIZE 1024 +# endif /* ACE_DEFAULT_MAP_SIZE */ + +// Defaults for ACE Timer Wheel +# if !defined (ACE_DEFAULT_TIMER_WHEEL_SIZE) +# define ACE_DEFAULT_TIMER_WHEEL_SIZE 1024 +# endif /* ACE_DEFAULT_TIMER_WHEEL_SIZE */ + +# if !defined (ACE_DEFAULT_TIMER_WHEEL_RESOLUTION) +# define ACE_DEFAULT_TIMER_WHEEL_RESOLUTION 100 +# endif /* ACE_DEFAULT_TIMER_WHEEL_RESOLUTION */ + +// Default size for ACE Timer Hash table +# if !defined (ACE_DEFAULT_TIMER_HASH_TABLE_SIZE) +# define ACE_DEFAULT_TIMER_HASH_TABLE_SIZE 1024 +# endif /* ACE_DEFAULT_TIMER_HASH_TABLE_SIZE */ + +// Defaults for the ACE Free List +# if !defined (ACE_DEFAULT_FREE_LIST_PREALLOC) +# define ACE_DEFAULT_FREE_LIST_PREALLOC 0 +# endif /* ACE_DEFAULT_FREE_LIST_PREALLOC */ + +# if !defined (ACE_DEFAULT_FREE_LIST_LWM) +# define ACE_DEFAULT_FREE_LIST_LWM 0 +# endif /* ACE_DEFAULT_FREE_LIST_LWM */ + +# if !defined (ACE_DEFAULT_FREE_LIST_HWM) +# define ACE_DEFAULT_FREE_LIST_HWM 25000 +# endif /* ACE_DEFAULT_FREE_LIST_HWM */ + +# if !defined (ACE_DEFAULT_FREE_LIST_INC) +# define ACE_DEFAULT_FREE_LIST_INC 100 +# endif /* ACE_DEFAULT_FREE_LIST_INC */ + +# if !defined (ACE_UNIQUE_NAME_LEN) +# define ACE_UNIQUE_NAME_LEN 100 +# endif /* ACE_UNIQUE_NAME_LEN */ + +# if !defined (ACE_MAX_DGRAM_SIZE) + // This is just a guess. 8k is the normal limit on + // most machines because that's what NFS expects. +# define ACE_MAX_DGRAM_SIZE 8192 +# endif /* ACE_MAX_DGRAM_SIZE */ + +# if !defined (ACE_DEFAULT_ARGV_BUFSIZ) +# define ACE_DEFAULT_ARGV_BUFSIZ 1024 * 4 +# endif /* ACE_DEFAULT_ARGV_BUFSIZ */ + +// A free list which create more elements when there aren't enough +// elements. +# define ACE_FREE_LIST_WITH_POOL 1 + +// A simple free list which doen't allocate/deallocate elements. +# define ACE_PURE_FREE_LIST 2 + +# if defined (ACE_WIN32) + +// This is necessary to work around bugs with Win32 non-blocking +// connects... +# if !defined (ACE_NON_BLOCKING_BUG_DELAY) +# define ACE_NON_BLOCKING_BUG_DELAY 35000 +# endif /* ACE_NON_BLOCKING_BUG_DELAY */ +# endif /*ACE_WIN32*/ + +// Max size of an ACE Log Record data buffer. This can be reset in +// the config.h file if you'd like to increase or decrease the size. +# if !defined (ACE_MAXLOGMSGLEN) +# define ACE_MAXLOGMSGLEN 4 * 1024 +# endif /* ACE_MAXLOGMSGLEN */ + +// Max size of an ACE Token. +# define ACE_MAXTOKENNAMELEN 40 + +// Max size of an ACE Token client ID. +# define ACE_MAXCLIENTIDLEN MAXHOSTNAMELEN + 20 + +/// Max udp packet size +#if !defined (ACE_MAX_UDP_PACKET_SIZE) +#define ACE_MAX_UDP_PACKET_SIZE 65536 +#endif + +/** + * @name Default values to control CDR classes memory allocation strategies + */ +//@{ + +/// Control the initial size of all CDR buffers, application +/// developers may want to optimize this value to fit their request +/// size +#if !defined (ACE_DEFAULT_CDR_BUFSIZE) +# define ACE_DEFAULT_CDR_BUFSIZE 512 +#endif /* ACE_DEFAULT_CDR_BUFSIZE */ + +#if (ACE_DEFAULT_CDR_BUFSIZE == 0) +# error: ACE_DEFAULT_CDR_BUFSIZE should be bigger then 0 +#endif + +/// Stop exponential growth of CDR buffers to avoid overallocation +#if !defined (ACE_DEFAULT_CDR_EXP_GROWTH_MAX) +# define ACE_DEFAULT_CDR_EXP_GROWTH_MAX 65536 +#endif /* ACE_DEFAULT_CDR_EXP_GROWTH_MAX */ + +/// Control CDR buffer growth after maximum exponential growth is +/// reached +#if !defined (ACE_DEFAULT_CDR_LINEAR_GROWTH_CHUNK) +# define ACE_DEFAULT_CDR_LINEAR_GROWTH_CHUNK 65536 +#endif /* ACE_DEFAULT_CDR_LINEAR_GROWTH_CHUNK */ +//@} + +/// Control the zero-copy optimizations for octet sequences +/** + * Large octet sequences can be sent without any copies by chaining + * them in the list of message blocks that represent a single CDR + * stream. However, if the octet sequence is too small the zero copy + * optimizations actually hurt performance. Octet sequences smaller + * than this value will be copied. + */ +#if !defined (ACE_DEFAULT_CDR_MEMCPY_TRADEOFF) +#define ACE_DEFAULT_CDR_MEMCPY_TRADEOFF 256 +#endif /* ACE_DEFAULT_CDR_MEMCPY_TRADEOFF */ + +#if defined (ACE_WIN32) + // Define the pathname separator characters for Win32 (ugh). +# define ACE_DIRECTORY_SEPARATOR_STR_A "\\" +# define ACE_DIRECTORY_SEPARATOR_CHAR_A '\\' +#else + // Define the pathname separator characters for UNIX. +# define ACE_DIRECTORY_SEPARATOR_STR_A "/" +# define ACE_DIRECTORY_SEPARATOR_CHAR_A '/' +#endif /* ACE_WIN32 */ + +// Define the Wide character and normal versions of some of the string macros +#if defined (ACE_HAS_WCHAR) +# define ACE_DIRECTORY_SEPARATOR_STR_W ACE_TEXT_WIDE(ACE_DIRECTORY_SEPARATOR_STR_A) +# define ACE_DIRECTORY_SEPARATOR_CHAR_W ACE_TEXT_WIDE(ACE_DIRECTORY_SEPARATOR_CHAR_A) +#endif /* ACE_HAS_WCHAR */ + +#define ACE_DIRECTORY_SEPARATOR_STR ACE_TEXT (ACE_DIRECTORY_SEPARATOR_STR_A) +#define ACE_DIRECTORY_SEPARATOR_CHAR ACE_TEXT (ACE_DIRECTORY_SEPARATOR_CHAR_A) + +#if !defined (ACE_DEFAULT_THREAD_PRIORITY) +# define ACE_DEFAULT_THREAD_PRIORITY (-0x7fffffffL - 1L) +#endif /* ACE_DEFAULT_THREAD_PRIORITY */ + +#if !defined (ACE_DEFAULT_THREAD_STACKSIZE) +# define ACE_DEFAULT_THREAD_STACKSIZE 0 +#endif /* ACE_DEFAULT_THREAD_STACKSIZE */ + +#if !defined (ACE_MAX_DEFAULT_PORT) +# define ACE_MAX_DEFAULT_PORT 65535 +#endif /* ACE_MAX_DEFAULT_PORT */ + +// Default number of ACE_Event_Handlers supported by +// ACE_Timer_Heap. +# if !defined (ACE_DEFAULT_TIMERS) +# define ACE_DEFAULT_TIMERS _POSIX_TIMER_MAX +# endif /* ACE_DEFAULT_TIMERS */ + +#if defined (ACE_WIN32) +# define ACE_PLATFORM_A "Win32" +# define ACE_PLATFORM_EXE_SUFFIX_A ".exe" +#elif defined (ACE_VXWORKS) +# define ACE_PLATFORM_A "VxWorks" +# if defined (__RTP__) +# define ACE_PLATFORM_EXE_SUFFIX_A ".vxe" +# else +# define ACE_PLATFORM_EXE_SUFFIX_A ".out" +# endif +#else /* !ACE_WIN32 && !ACE_VXWORKS */ +# define ACE_PLATFORM_A "UNIX" +# define ACE_PLATFORM_EXE_SUFFIX_A "" +#endif /* ACE_WIN32 */ + +// Define the Wide character and normal versions of some of the string macros +#if defined (ACE_HAS_WCHAR) +# define ACE_PLATFORM_W ACE_TEXT_WIDE(ACE_PLATFORM_A) +# define ACE_PLATFORM_EXE_SUFFIX_W ACE_TEXT_WIDE(ACE_PLATFORM_EXE_SUFFIX_A) +#endif /* ACE_HAS_WCHAR */ + +#define ACE_PLATFORM ACE_TEXT (ACE_PLATFORM_A) +#define ACE_PLATFORM_EXE_SUFFIX ACE_TEXT (ACE_PLATFORM_EXE_SUFFIX_A) + +#if defined (ACE_WIN32) +# define ACE_LD_SEARCH_PATH ACE_TEXT ("PATH") +# define ACE_LD_SEARCH_PATH_SEPARATOR_STR ACE_TEXT (";") +# define ACE_DLL_SUFFIX ACE_TEXT (".dll") +# if defined (__MINGW32__) +# define ACE_DLL_PREFIX ACE_TEXT ("lib") +# else /* __MINGW32__ */ +# define ACE_DLL_PREFIX ACE_TEXT ("") +# endif /* __MINGW32__ */ +#else /* !ACE_WIN32 */ +# if !defined (ACE_LD_SEARCH_PATH) +# define ACE_LD_SEARCH_PATH ACE_TEXT ("LD_LIBRARY_PATH") +# endif /* ACE_LD_SEARCH_PATH */ +# if !defined (ACE_LD_SEARCH_PATH_SEPARATOR_STR) +# define ACE_LD_SEARCH_PATH_SEPARATOR_STR ACE_TEXT (":") +# endif /* ACE_LD_SEARCH_PATH_SEPARATOR_STR */ +#endif /* ACE_WIN32 */ + +#if !defined (ACE_DLL_SUFFIX) +# define ACE_DLL_SUFFIX ACE_TEXT (".so") +#endif /* ACE_DLL_SUFFIX */ + +#if !defined (ACE_DLL_PREFIX) +# define ACE_DLL_PREFIX ACE_TEXT ("lib") +#endif /* ACE_DLL_PREFIX */ + +#if defined (ACE_WIN32) +// Used for dynamic linking +# if !defined (ACE_DEFAULT_SVC_CONF) +# if (ACE_USES_CLASSIC_SVC_CONF == 1) +# define ACE_DEFAULT_SVC_CONF ACE_TEXT (".\\svc.conf") +# else +# define ACE_DEFAULT_SVC_CONF ACE_TEXT (".\\svc.conf.xml") +# endif /* ACE_USES_CLASSIC_SVC_CONF ==1 */ +# endif /* ACE_DEFAULT_SVC_CONF */ +#endif /* ACE_WIN32 */ + + // Used for dynamic linking. +#if !defined (ACE_DEFAULT_SVC_CONF) +# if (ACE_USES_CLASSIC_SVC_CONF == 1) +# define ACE_DEFAULT_SVC_CONF ACE_TEXT ("./svc.conf") +# else +# define ACE_DEFAULT_SVC_CONF ACE_TEXT ("./svc.conf.xml") +# endif /* ACE_USES_CLASSIC_SVC_CONF ==1 */ +#endif /* ACE_DEFAULT_SVC_CONF */ + +#if !defined (ACE_LOGGER_KEY) +# define ACE_LOGGER_KEY ACE_TEXT ("/tmp/server_daemon") +#endif /* ACE_LOGGER_KEY */ + +// Theses defines are used by the ACE Name Server. +#if !defined (ACE_DEFAULT_LOCALNAME_A) +# define ACE_DEFAULT_LOCALNAME_A "localnames" +#endif /* ACE_DEFAULT_LOCALNAME_A */ +#if !defined (ACE_DEFAULT_GLOBALNAME_A) +# define ACE_DEFAULT_GLOBALNAME_A "globalnames" +#endif /* ACE_DEFAULT_GLOBALNAME_A */ + +// ACE_DEFAULT_NAMESPACE_DIR is for legacy mode apps. A better +// way of doing this is something like ACE_Lib_Find::get_temp_dir, since +// this directory may not exist +#if defined (ACE_LEGACY_MODE) +# if defined (ACE_WIN32) +# define ACE_DEFAULT_NAMESPACE_DIR_A "C:\\temp" +# else /* ACE_WIN32 */ +# define ACE_DEFAULT_NAMESPACE_DIR_A "/tmp" +# endif /* ACE_WIN32 */ +# if defined (ACE_HAS_WCHAR) +# define ACE_DEFAULT_NAMESPACE_DIR_W ACE_TEXT_WIDE(ACE_DEFAULT_NAMESPACE_DIR_A) +# endif /* ACE_HAS_WCHAR */ +# define ACE_DEFAULT_NAMESPACE_DIR ACE_TEXT(ACE_DEFAULT_NAMESPACE_DIR_A) +#endif /* ACE_LEGACY_MODE */ + +#if defined (ACE_HAS_WCHAR) +# define ACE_DEFAULT_LOCALNAME_W ACE_TEXT_WIDE(ACE_DEFAULT_LOCALNAME_A) +# define ACE_DEFAULT_GLOBALNAME_W ACE_TEXT_WIDE(ACE_DEFAULT_GLOBALNAME_A) +#endif /* ACE_HAS_WCHAR */ + +#define ACE_DEFAULT_LOCALNAME ACE_TEXT (ACE_DEFAULT_LOCALNAME_A) +#define ACE_DEFAULT_GLOBALNAME ACE_TEXT (ACE_DEFAULT_GLOBALNAME_A) + +# if defined (ACE_WIN32) + // The "null" device on Win32. +# define ACE_DEV_NULL "nul" +# define ACE_SYSCALL_FAILED 0xFFFFFFFF +# else /* !ACE_WIN32 */ + // The "null" device on UNIX. +# define ACE_DEV_NULL "/dev/null" +# define ACE_SYSCALL_FAILED -1 +# endif /* ACE_WIN32 */ + +#include /**/ "ace/post.h" +#endif /*ACE_DEFAULT_CONSTANTS_H*/ diff --git a/ACE/ace/Dev_Poll_Reactor.cpp b/ACE/ace/Dev_Poll_Reactor.cpp new file mode 100644 index 00000000000..cfa87d00650 --- /dev/null +++ b/ACE/ace/Dev_Poll_Reactor.cpp @@ -0,0 +1,2513 @@ +// $Id$ + +#include "ace/OS_NS_errno.h" +#include "ace/Dev_Poll_Reactor.h" +#include "ace/Signal.h" +#include "ace/Sig_Handler.h" + +ACE_RCSID (ace, + Dev_Poll_Reactor, + "$Id$") + +#if defined (ACE_HAS_EVENT_POLL) || defined (ACE_HAS_DEV_POLL) + +# include "ace/OS_NS_unistd.h" +# include "ace/OS_NS_fcntl.h" +# include "ace/OS_NS_stropts.h" + +# if defined (ACE_HAS_EVENT_POLL) && defined (linux) +# include /**/ +# elif defined (ACE_HAS_DEV_POLL) +# if defined (linux) +# include /**/ +# elif defined (HPUX_VERS) && HPUX_VERS < 1123 +# include /**/ +# else +# include /**/ +# endif /* linux */ +# endif /* ACE_HAS_DEV_POLL */ + +#if !defined (__ACE_INLINE__) +# include "ace/Dev_Poll_Reactor.inl" +#endif /* __ACE_INLINE__ */ + + +#include "ace/Handle_Set.h" +#include "ace/Reactor.h" +#include "ace/Timer_Heap.h" +#include "ace/Timer_Queue.h" +#include "ace/ACE.h" +#include "ace/Reverse_Lock_T.h" +#include "ace/Recursive_Thread_Mutex.h" +#include "ace/Null_Mutex.h" +#include "ace/os_include/os_poll.h" +#include "ace/OS_NS_sys_mman.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Dev_Poll_Reactor_Notify::ACE_Dev_Poll_Reactor_Notify (void) + : dp_reactor_ (0) + , notification_pipe_ () + , max_notify_iterations_ (-1) +#if defined (ACE_HAS_REACTOR_NOTIFICATION_QUEUE) + , notification_queue_ () +#endif /* ACE_HAS_REACTOR_NOTIFICATION_QUEUE */ +{ +} + +int +ACE_Dev_Poll_Reactor_Notify::open (ACE_Reactor_Impl *r, + ACE_Timer_Queue * /* timer_queue */, + int disable_notify_pipe) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Notify::open"); + + if (disable_notify_pipe == 0) + { + this->dp_reactor_ = dynamic_cast (r); + + if (this->dp_reactor_ == 0) + { + errno = EINVAL; + return -1; + } + + if (this->notification_pipe_.open () == -1) + return -1; + +#if defined (F_SETFD) + // close-on-exec + ACE_OS::fcntl (this->notification_pipe_.read_handle (), F_SETFD, 1); + ACE_OS::fcntl (this->notification_pipe_.write_handle (), F_SETFD, 1); +#endif /* F_SETFD */ + +#if defined (ACE_HAS_REACTOR_NOTIFICATION_QUEUE) + if (notification_queue_.open () == -1) + { + return -1; + } + + if (ACE::set_flags (this->notification_pipe_.write_handle (), + ACE_NONBLOCK) == -1) + return -1; +#endif /* ACE_HAS_REACTOR_NOTIFICATION_QUEUE */ + + // Set the read handle into non-blocking mode since we need to + // perform a "speculative" read when determining if there are + // notifications to dispatch. + if (ACE::set_flags (this->notification_pipe_.read_handle (), + ACE_NONBLOCK) == -1) + return -1; + } + + return 0; +} + +int +ACE_Dev_Poll_Reactor_Notify::close (void) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Notify::close"); + +#if defined (ACE_HAS_REACTOR_NOTIFICATION_QUEUE) + notification_queue_.reset (); +#endif /* ACE_HAS_REACTOR_NOTIFICATION_QUEUE */ + + return this->notification_pipe_.close (); +} + +int +ACE_Dev_Poll_Reactor_Notify::notify (ACE_Event_Handler *eh, + ACE_Reactor_Mask mask, + ACE_Time_Value *timeout) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Notify::notify"); + + // Just consider this method a "no-op" if there's no + // ACE_Dev_Poll_Reactor configured. + if (this->dp_reactor_ == 0) + return 0; + + ACE_Notification_Buffer buffer (eh, mask); + +#if defined (ACE_HAS_REACTOR_NOTIFICATION_QUEUE) + ACE_UNUSED_ARG (timeout); + ACE_Dev_Poll_Handler_Guard eh_guard (eh); + + int notification_required = + notification_queue_.push_new_notification (buffer); + + if (notification_required == -1) + return -1; // Also decrement eh's reference count + + // The notification has been queued, so it will be delivered at some + // point (and may have been already); release the refcnt guard. + eh_guard.release (); + + if (notification_required == 0) + return 0; + + // Now pop the pipe to force the callback for dispatching when ready. If + // the send fails due to a full pipe, don't fail - assume the already-sent + // pipe bytes will cause the entire notification queue to be processed. + ssize_t n = ACE::send (this->notification_pipe_.write_handle (), + (char *) &buffer, + 1, // Only need one byte to pop the pipe + &ACE_Time_Value::zero); + if (n == -1 && (errno != ETIME && errno != EAGAIN)) + return -1; + + return 0; +#else + + ACE_Dev_Poll_Handler_Guard eh_guard (eh); + + ssize_t n = ACE::send (this->notification_pipe_.write_handle (), + (char *) &buffer, + sizeof buffer, + timeout); + if (n == -1) + return -1; + + eh_guard.release (); + + return 0; +#endif /* ACE_HAS_REACTOR_NOTIFICATION_QUEUE */ +} + +int +ACE_Dev_Poll_Reactor_Notify::dispatch_notifications ( + int & /* number_of_active_handles */, + ACE_Handle_Set & /* rd_mask */) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Notify::dispatch_notifications"); + + // This method is unimplemented in the ACE_Dev_Poll_Reactor. + // Instead, the notification handler is invoked as part of the IO + // event set. Doing so alters the some documented semantics that + // state that the notifications are handled before IO events. + // Enforcing such semantics does not appear to be beneficial, and + // also serves to slow down event dispatching particularly with this + // ACE_Dev_Poll_Reactor. + + ACE_NOTSUP_RETURN (-1); +} + +int +ACE_Dev_Poll_Reactor_Notify::read_notify_pipe (ACE_HANDLE handle, + ACE_Notification_Buffer &buffer) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Notify::read_notify_pipe"); + + // This is a (non-blocking) "speculative" read, i.e., we attempt to + // read even if no event was polled on the read handle. A + // speculative read is necessary since notifications must be + // dispatched before IO events. We can avoid the speculative read + // by "walking" the array of pollfd structures returned from + // `/dev/poll' or `/dev/epoll' but that is potentially much more + // expensive than simply checking for an EWOULDBLOCK. + size_t to_read; + char *read_p; + bool have_one = false; + +#if defined (ACE_HAS_REACTOR_NOTIFICATION_QUEUE) + // For the queued case, we'll try to read one byte (since that's what + // the notify () tried to put in) but we don't need it - notifications can + // be queued even if the pipe fills, so there may be more notifications + // queued than there are bytes in the pipe. + char b; + read_p = &b; + to_read = 1; + + // Before reading the byte, pop a message from the queue and queue a + // new message unless the queue is now empty. The protocol is to + // keep a byte in the pipe as long as the queue is not empty. + bool more_messages_queued = false; + ACE_Notification_Buffer next; + + int result = notification_queue_.pop_next_notification (buffer, + more_messages_queued, + next); + + if (result == 0) + { + // remove the notification byte from the pipe, avoiding notification loop + ACE::recv (handle, read_p, to_read); + return 0; + } + + if (result == -1) + return -1; + + if (more_messages_queued) + (void) ACE::send (this->notification_pipe_.write_handle (), + (char *)&next, + 1 /* one byte is enough */, + &ACE_Time_Value::zero); +#else + to_read = sizeof buffer; + read_p = (char *)&buffer; +#endif /* ACE_HAS_REACTOR_NOTIFICATION_QUEUE */ + + ssize_t n = ACE::recv (handle, read_p, to_read); + + if (n > 0) + { + // Check to see if we've got a short read. + if (static_cast (n) != to_read) + { + size_t remainder = to_read - n; + + // If so, try to recover by reading the remainder. If this + // doesn't work we're in big trouble since the input stream + // won't be aligned correctly. I'm not sure quite what to + // do at this point. It's probably best just to return -1. + if (ACE::recv (handle, &read_p[n], remainder) <= 0) + return -1; + } + + return 1; + } + + // Return -1 if things have gone seriously wrong. + if (n <= 0 && (errno != EWOULDBLOCK && errno != EAGAIN)) + return -1; + + return have_one ? 1 : 0; +} + + +int +ACE_Dev_Poll_Reactor_Notify::handle_input (ACE_HANDLE handle) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Notify::handle_input"); + + // @@ We may end up dispatching this event handler twice: once when + // performing the speculative read on the notification pipe + // handle, and once more when dispatching the IO events. + + // Precondition: this->select_reactor_.token_.current_owner () == + // ACE_Thread::self (); + + int number_dispatched = 0; + int result = 0; + ACE_Notification_Buffer buffer; + + while ((result = this->read_notify_pipe (handle, buffer)) > 0) + { + // Dispatch the buffer + // NOTE: We count only if we made any dispatches ie. upcalls. + if (this->dispatch_notify (buffer) > 0) + ++number_dispatched; + + // Bail out if we've reached the . Note that + // by default is -1, so we'll loop until all + // the available notifications have been dispatched. + if (number_dispatched == this->max_notify_iterations_) + break; + } + + if (result == -1) + { + // Reassign number_dispatched to -1 if things have gone + // seriously wrong. + number_dispatched = -1; + } + + // Enqueue ourselves into the list of waiting threads. When we + // reacquire the token we'll be off and running again with ownership + // of the token. The postcondition of this call is that + // == . + //this->select_reactor_->renew (); + + return number_dispatched; +} + +ACE_HANDLE +ACE_Dev_Poll_Reactor_Notify::notify_handle (void) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Notify::notify_handle"); + + return this->notification_pipe_.read_handle (); +} + +int +ACE_Dev_Poll_Reactor_Notify::is_dispatchable (ACE_Notification_Buffer &) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Notify::is_dispatchable"); + + ACE_NOTSUP_RETURN (-1); +} + +int +ACE_Dev_Poll_Reactor_Notify::dispatch_notify (ACE_Notification_Buffer &buffer) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Notify::dispatch_notify"); + + // If eh == 0 then another thread is unblocking the + // ACE_Dev_Poll_Reactor to update the ACE_Dev_Poll_Reactor's + // internal structures. Otherwise, we need to dispatch the + // appropriate handle_* method on the ACE_Event_Handler + // pointer we've been passed. + if (buffer.eh_ != 0) + { + int result = 0; + + // Guard the handler's refcount. Recall that when the notify + // was queued, the refcount was incremented, so it need not be + // now. The guard insures that it is decremented properly. + ACE_Dev_Poll_Handler_Guard eh_guard (buffer.eh_, false); + + switch (buffer.mask_) + { + case ACE_Event_Handler::READ_MASK: + case ACE_Event_Handler::ACCEPT_MASK: + result = buffer.eh_->handle_input (ACE_INVALID_HANDLE); + break; + case ACE_Event_Handler::WRITE_MASK: + result = buffer.eh_->handle_output (ACE_INVALID_HANDLE); + break; + case ACE_Event_Handler::EXCEPT_MASK: + result = buffer.eh_->handle_exception (ACE_INVALID_HANDLE); + break; + default: + // Should we bail out if we get an invalid mask? + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("dispatch_notify invalid mask = %d\n"), + buffer.mask_)); + } + if (result == -1) + buffer.eh_->handle_close (ACE_INVALID_HANDLE, buffer.mask_); + } + + return 1; +} + +void +ACE_Dev_Poll_Reactor_Notify::max_notify_iterations (int iterations) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Notify::max_notify_iterations"); + + // Must always be > 0 or < 0 to optimize the loop exit condition. + if (iterations == 0) + iterations = 1; + + this->max_notify_iterations_ = iterations; +} + +int +ACE_Dev_Poll_Reactor_Notify::max_notify_iterations (void) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Notify::max_notify_iterations"); + + return this->max_notify_iterations_; +} + +int +ACE_Dev_Poll_Reactor_Notify::purge_pending_notifications ( + ACE_Event_Handler *eh, + ACE_Reactor_Mask mask) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Notify::purge_pending_notifications"); + +#if defined (ACE_HAS_REACTOR_NOTIFICATION_QUEUE) + + return notification_queue_.purge_pending_notifications (eh, mask); + +#else /* defined (ACE_HAS_REACTOR_NOTIFICATION_QUEUE) */ + ACE_UNUSED_ARG (eh); + ACE_UNUSED_ARG (mask); + ACE_NOTSUP_RETURN (-1); +#endif /* defined (ACE_HAS_REACTOR_NOTIFICATION_QUEUE) */ +} + +void +ACE_Dev_Poll_Reactor_Notify::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Dev_Poll_Reactor_Notify::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("dp_reactor_ = %@"), + this->dp_reactor_)); + this->notification_pipe_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +// ----------------------------------------------------------------- + +ACE_Dev_Poll_Reactor_Handler_Repository:: +ACE_Dev_Poll_Reactor_Handler_Repository (void) + : max_size_ (0), + handlers_ (0) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::ACE_Dev_Poll_Reactor_Handler_Repository"); +} + +int +ACE_Dev_Poll_Reactor_Handler_Repository::invalid_handle ( + ACE_HANDLE handle) const +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::invalid_handle"); + + if (handle < 0 || handle >= this->max_size_) + { + errno = EINVAL; + return 1; + } + else + return 0; +} + +int +ACE_Dev_Poll_Reactor_Handler_Repository::handle_in_range ( + ACE_HANDLE handle) const +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::handle_in_range"); + + if (handle >= 0 && handle < this->max_size_) + return 1; + else + { + errno = EINVAL; + return 0; + } +} + +int +ACE_Dev_Poll_Reactor_Handler_Repository::open (size_t size) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::open"); + + this->max_size_ = size; + + // Try to allocate the memory. + ACE_NEW_RETURN (this->handlers_, + ACE_Dev_Poll_Event_Tuple[size], + -1); + + // Try to increase the number of handles if is greater than + // the current limit. + return ACE::set_handle_limit (size); +} + +int +ACE_Dev_Poll_Reactor_Handler_Repository::unbind_all (void) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::unbind_all"); + + // Unbind all of the event handlers. + for (int handle = 0; + handle < this->max_size_; + ++handle) + this->unbind (handle); + + return 0; +} + +int +ACE_Dev_Poll_Reactor_Handler_Repository::close (void) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::close"); + + if (this->handlers_ != 0) + { + this->unbind_all (); + + delete [] this->handlers_; + this->handlers_ = 0; + } + + return 0; +} + +ACE_Event_Handler * +ACE_Dev_Poll_Reactor_Handler_Repository::find (ACE_HANDLE handle, + size_t *index_p) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::find"); + + ACE_Event_Handler *eh = 0; + + // Only bother to search for the if it's in range. + if (this->handle_in_range (handle)) + { + eh = this->handlers_[handle].event_handler; + if (eh != 0) + { + if (index_p != 0) + *index_p = handle; + } + else + errno = ENOENT; + } + + return eh; +} + +int +ACE_Dev_Poll_Reactor_Handler_Repository::bind ( + ACE_HANDLE handle, + ACE_Event_Handler *event_handler, + ACE_Reactor_Mask mask) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::bind"); + + if (event_handler == 0) + return -1; + + if (handle == ACE_INVALID_HANDLE) + handle = event_handler->get_handle (); + + if (this->invalid_handle (handle)) + return -1; + + this->handlers_[handle].event_handler = event_handler; + this->handlers_[handle].mask = mask; + event_handler->add_reference (); + + return 0; +} + +int +ACE_Dev_Poll_Reactor_Handler_Repository::unbind (ACE_HANDLE handle, + bool decr_refcnt) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::unbind"); + + if (this->find (handle) == 0) + return -1; + + if (decr_refcnt) + this->handlers_[handle].event_handler->remove_reference (); + this->handlers_[handle].event_handler = 0; + this->handlers_[handle].mask = ACE_Event_Handler::NULL_MASK; + this->handlers_[handle].suspended = 0; + + return 0; +} + +// ----------------------------------------------------------------- + +ACE_Dev_Poll_Reactor::ACE_Dev_Poll_Reactor (ACE_Sig_Handler *sh, + ACE_Timer_Queue *tq, + int disable_notify_pipe, + ACE_Reactor_Notify *notify, + int mask_signals, + int s_queue) + : initialized_ (false) + , poll_fd_ (ACE_INVALID_HANDLE) + , size_ (0) + // , ready_set_ () +#if defined (ACE_HAS_EVENT_POLL) + , events_ (0) + , start_pevents_ (0) + , end_pevents_ (0) +#else + , dp_fds_ (0) + , start_pfds_ (0) + , end_pfds_ (0) +#endif /* ACE_HAS_EVENT_POLL */ + , deactivated_ (0) + , token_ (*this, s_queue) + , lock_adapter_ (token_) + , timer_queue_ (0) + , delete_timer_queue_ (false) + , signal_handler_ (0) + , delete_signal_handler_ (false) + , notify_handler_ (0) + , delete_notify_handler_ (false) + , mask_signals_ (mask_signals) + , restart_ (0) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::ACE_Dev_Poll_Reactor"); + + if (this->open (ACE::max_handles (), + 0, + sh, + tq, + disable_notify_pipe, + notify) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Dev_Poll_Reactor::open ") + ACE_TEXT ("failed inside ") + ACE_TEXT ("ACE_Dev_Poll_Reactor::CTOR"))); +} + +ACE_Dev_Poll_Reactor::ACE_Dev_Poll_Reactor (size_t size, + int rs, + ACE_Sig_Handler *sh, + ACE_Timer_Queue *tq, + int disable_notify_pipe, + ACE_Reactor_Notify *notify, + int mask_signals, + int s_queue) + : initialized_ (false) + , poll_fd_ (ACE_INVALID_HANDLE) + , size_ (0) + // , ready_set_ () +#if defined (ACE_HAS_EVENT_POLL) + , events_ (0) + , start_pevents_ (0) + , end_pevents_ (0) +#else + , dp_fds_ (0) + , start_pfds_ (0) + , end_pfds_ (0) +#endif /* ACE_HAS_EVENT_POLL */ + , deactivated_ (0) + , token_ (*this, s_queue) + , lock_adapter_ (token_) + , timer_queue_ (0) + , delete_timer_queue_ (false) + , signal_handler_ (0) + , delete_signal_handler_ (false) + , notify_handler_ (0) + , delete_notify_handler_ (false) + , mask_signals_ (mask_signals) + , restart_ (0) +{ + if (this->open (size, + rs, + sh, + tq, + disable_notify_pipe, + notify) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Dev_Poll_Reactor::open ") + ACE_TEXT ("failed inside ACE_Dev_Poll_Reactor::CTOR"))); +} + +ACE_Dev_Poll_Reactor::~ACE_Dev_Poll_Reactor (void) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::~ACE_Dev_Poll_Reactor"); + + (void) this->close (); +} + +int +ACE_Dev_Poll_Reactor::open (size_t size, + int restart, + ACE_Sig_Handler *sh, + ACE_Timer_Queue *tq, + int disable_notify_pipe, + ACE_Reactor_Notify *notify) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::open"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + // Can't initialize ourselves more than once. + if (this->initialized_) + return -1; + + this->restart_ = restart; + this->signal_handler_ = sh; + this->timer_queue_ = tq; + this->notify_handler_ = notify; + + int result = 0; + + // Allows the signal handler to be overridden. + if (this->signal_handler_ == 0) + { + ACE_NEW_RETURN (this->signal_handler_, + ACE_Sig_Handler, + -1); + + if (this->signal_handler_ == 0) + result = -1; + else + this->delete_signal_handler_ = true; + } + + // Allows the timer queue to be overridden. + if (result != -1 && this->timer_queue_ == 0) + { + ACE_NEW_RETURN (this->timer_queue_, + ACE_Timer_Heap, + -1); + + if (this->timer_queue_ == 0) + result = -1; + else + this->delete_timer_queue_ = true; + } + + // Allows the Notify_Handler to be overridden. + if (result != -1 && this->notify_handler_ == 0) + { + ACE_NEW_RETURN (this->notify_handler_, + ACE_Dev_Poll_Reactor_Notify, + -1); + + if (this->notify_handler_ == 0) + result = -1; + else + this->delete_notify_handler_ = true; + } + +#if defined (ACE_HAS_EVENT_POLL) + + // Allocating event table: + ACE_NEW_RETURN (this->events_, epoll_event[size], -1); + + // Initializing epoll: + this->poll_fd_ = ::epoll_create (size); + if (this->poll_fd_ == -1) + result = -1; + +#else + + // Allocate the array before opening the device to avoid a potential + // resource leak if allocation fails. + ACE_NEW_RETURN (this->dp_fds_, + pollfd[size], + -1); + + // Open the `/dev/poll' character device. + this->poll_fd_ = ACE_OS::open ("/dev/poll", O_RDWR); + if (this->poll_fd_ == ACE_INVALID_HANDLE) + result = -1; + +#endif /* ACE_HAS_EVENT_POLL */ + + if (result != -1 && this->handler_rep_.open (size) == -1) + result = -1; + + // Registration of the notification handler must be done after the + // /dev/poll device has been fully initialized. + else if (this->notify_handler_->open (this, + 0, + disable_notify_pipe) == -1 + || (disable_notify_pipe == 0 + && this->register_handler_i ( + this->notify_handler_->notify_handle (), + this->notify_handler_, + ACE_Event_Handler::READ_MASK) == -1)) + result = -1; + + this->size_ = size; + + if (result != -1) + // We're all set to go. + this->initialized_ = true; + else + // This will close down all the allocated resources properly. + (void) this->close (); + + return result; +} + +int +ACE_Dev_Poll_Reactor::current_info (ACE_HANDLE, size_t & /* size */) +{ + ACE_NOTSUP_RETURN (-1); +} + + +int +ACE_Dev_Poll_Reactor::set_sig_handler (ACE_Sig_Handler *signal_handler) +{ + if (this->delete_signal_handler_) + delete this->signal_handler_; + + this->signal_handler_ = signal_handler; + this->delete_signal_handler_ = false; + + return 0; +} + +int +ACE_Dev_Poll_Reactor::timer_queue (ACE_Timer_Queue *tq) +{ + if (this->delete_timer_queue_) + delete this->timer_queue_; + + this->timer_queue_ = tq; + this->delete_timer_queue_ = false; + + return 0; + +} + +ACE_Timer_Queue * +ACE_Dev_Poll_Reactor::timer_queue (void) const +{ + return this->timer_queue_; +} + +int +ACE_Dev_Poll_Reactor::close (void) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::close"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + int result = 0; + + if (this->poll_fd_ != ACE_INVALID_HANDLE) + { + result = ACE_OS::close (this->poll_fd_); + } + +#if defined (ACE_HAS_EVENT_POLL) + + delete [] this->events_; + this->events_ = 0; + +#else + + delete [] this->dp_fds_; + this->dp_fds_ = 0; + +#endif /* ACE_HAS_EVENT_POLL */ + + if (this->delete_signal_handler_) + { + delete this->signal_handler_; + this->signal_handler_ = 0; + this->delete_signal_handler_ = false; + } + + (void) this->handler_rep_.close (); + + if (this->delete_timer_queue_) + { + delete this->timer_queue_; + this->timer_queue_ = 0; + this->delete_timer_queue_ = false; + } + + if (this->notify_handler_ != 0) + this->notify_handler_->close (); + + if (this->delete_notify_handler_) + { + delete this->notify_handler_; + this->notify_handler_ = 0; + this->delete_notify_handler_ = false; + } + + this->poll_fd_ = ACE_INVALID_HANDLE; + +#if defined (ACE_HAS_EVENT_POLL) + this->start_pevents_ = 0; + this->end_pevents_ = 0; +#else + this->start_pfds_ = 0; + this->end_pfds_ = 0; +#endif /* ACE_HAS_EVENT_POLL */ + + this->initialized_ = false; + + return result; +} + +int +ACE_Dev_Poll_Reactor::work_pending (const ACE_Time_Value & max_wait_time) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::work_pending"); + + // Stash the current time + // + // The destructor of this object will automatically compute how much + // time elapsed since this method was called. + ACE_Time_Value mwt (max_wait_time); + ACE_MT (ACE_Countdown_Time countdown (&mwt)); + + Token_Guard guard (this->token_); + int const result = guard.acquire_quietly (&mwt); + + // If the guard is NOT the owner just return the retval + if (!guard.is_owner ()) + return result; + + // Update the countdown to reflect time waiting for the mutex. + ACE_MT (countdown.update ()); + + return this->work_pending_i (&mwt); +} + +int +ACE_Dev_Poll_Reactor::work_pending_i (ACE_Time_Value * max_wait_time) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::work_pending_i"); + + if (this->deactivated_) + return 0; + +#if defined (ACE_HAS_EVENT_POLL) + if (this->start_pevents_ != this->end_pevents_) +#else + if (this->start_pfds_ != this->end_pfds_) +#endif /* ACE_HAS_EVENT_POLL */ + return 1; // We still have work_pending (). Do not poll for + // additional events. + + ACE_Time_Value timer_buf (0); + ACE_Time_Value *this_timeout = + this->timer_queue_->calculate_timeout (max_wait_time, &timer_buf); + + // Check if we have timers to fire. + int const timers_pending = + ((this_timeout != 0 && max_wait_time == 0) + || (this_timeout != 0 && max_wait_time != 0 + && *this_timeout != *max_wait_time) ? 1 : 0); + + long const timeout = + (this_timeout == 0 + ? -1 /* Infinity */ + : static_cast (this_timeout->msec ())); + +#if defined (ACE_HAS_EVENT_POLL) + + // Wait for events. + int const nfds = ::epoll_wait (this->poll_fd_, + this->events_, + this->size_, + static_cast (timeout)); + + if (nfds > 0) + { + this->start_pevents_ = this->events_; + this->end_pevents_ = this->start_pevents_ + nfds; + } + +#else + + struct dvpoll dvp; + + dvp.dp_fds = this->dp_fds_; + dvp.dp_nfds = this->size_; + dvp.dp_timeout = timeout; // Milliseconds + + // Poll for events + int const nfds = ACE_OS::ioctl (this->poll_fd_, DP_POLL, &dvp); + + // Retrieve the results from the pollfd array. + this->start_pfds_ = dvp.dp_fds; + + // If nfds == 0 then end_pfds_ == start_pfds_ meaning that there is + // no work pending. If nfds > 0 then there is work pending. + // Otherwise an error occurred. + if (nfds > -1) + this->end_pfds_ = this->start_pfds_ + nfds; +#endif /* ACE_HAS_EVENT_POLL */ + + // If timers are pending, override any timeout from the poll. + return (nfds == 0 && timers_pending != 0 ? 1 : nfds); +} + + +int +ACE_Dev_Poll_Reactor::handle_events (ACE_Time_Value *max_wait_time) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::handle_events"); + + // Stash the current time + // + // The destructor of this object will automatically compute how much + // time elapsed since this method was called. + ACE_MT (ACE_Countdown_Time countdown (max_wait_time)); + + Token_Guard guard (this->token_); + int const result = guard.acquire_quietly (max_wait_time); + + // If the guard is NOT the owner just return the retval + if (!guard.is_owner ()) + return result; + + if (this->deactivated_) + return -1; + + // Update the countdown to reflect time waiting for the mutex. + ACE_MT (countdown.update ()); + + return this->handle_events_i (max_wait_time, guard); +} + +int +ACE_Dev_Poll_Reactor::handle_events_i (ACE_Time_Value *max_wait_time, + Token_Guard &guard) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::handle_events_i"); + + int result = 0; + // int active_handle_count = 0; + + // Poll for events + // + // If the underlying ioctl () call was interrupted via the interrupt + // signal (i.e. returned -1 with errno == EINTR) then the loop will + // be restarted if so desired. + do + { + result = this->work_pending_i (max_wait_time); + if (result == -1) + ACE_ERROR ((LM_ERROR, "%t: %p\n", "work_pending_i")); + } + while (result == -1 && this->restart_ != 0 && errno == EINTR); + + if (result == 0 || (result == -1 && errno == ETIME)) + return 0; + else if (result == -1) + { + if (errno != EINTR) + return -1; + + // Bail out -- we got here since the poll was interrupted. + // If it was due to a signal registered through our ACE_Sig_Handler, + // then it was dispatched, so we count it in the number of events + // handled rather than cause an error return. + if (ACE_Sig_Handler::sig_pending () != 0) + { + ACE_Sig_Handler::sig_pending (0); + return 1; + } + return -1; + } + + // Dispatch an event. + return this->dispatch (guard); +} + +// Dispatch an event. On entry, the token is held by the caller. If an +// event is found to dispatch, the token is released before dispatching it. +int +ACE_Dev_Poll_Reactor::dispatch (Token_Guard &guard) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::dispatch"); + + // Perform the Template Method for dispatching the first located event. + // We dispatch only one to effectively dispatch events concurrently. + // As soon as an event is located, the token is released, allowing the + // next waiter to begin getting an event while we dispatch one here. + int result = 0; + + // Handle timers early since they may have higher latency + // constraints than I/O handlers. Ideally, the order of + // dispatching should be a strategy... + if ((result = this->dispatch_timer_handler (guard)) != 0) + return result; + + // Check to see if there are no more I/O handles left to + // dispatch AFTER we've handled the timers. + + // Finally, dispatch the I/O handlers. + result = this->dispatch_io_event (guard); + + return result; +} + +int +ACE_Dev_Poll_Reactor::dispatch_timer_handler (Token_Guard &guard) +{ + if (this->timer_queue_->is_empty ()) + return 0; // Empty timer queue so cannot have any expired timers. + + // Get the current time + ACE_Time_Value cur_time (this->timer_queue_->gettimeofday () + + this->timer_queue_->timer_skew ()); + + // Look for a node in the timer queue whose timer <= the present + // time. + ACE_Timer_Node_Dispatch_Info info; + if (this->timer_queue_->dispatch_info (cur_time, info)) + { + const void *upcall_act = 0; + + // Preinvoke (handles refcount if needed, etc.) + this->timer_queue_->preinvoke (info, cur_time, upcall_act); + + // Release the token before expiration upcall. + guard.release_token (); + + // call the functor + this->timer_queue_->upcall (info, cur_time); + + // Postinvoke (undo refcount if needed, etc.) + this->timer_queue_->postinvoke (info, cur_time, upcall_act); + + // We have dispatched a timer + return 1; + } + + return 0; +} + +#if 0 +int +ACE_Dev_Poll_Reactor::dispatch_notification_handlers ( + ACE_Select_Reactor_Handle_Set &dispatch_set, + int &number_of_active_handles, + int &number_of_handlers_dispatched) +{ + // Check to see if the ACE_HANDLE associated with the + // Dev_Poll_Reactor's notify hook is enabled. If so, it means that + // one or more other threads are trying to update the + // ACE_Dev_Poll_Reactor's internal tables or the notify pipe is + // enabled. We'll handle all these threads and notifications, and + // then break out to continue the event loop. + + const int n = + this->notify_handler_->dispatch_notifications (number_of_active_handles, + dispatch_set.rd_mask_); + + if (n == -1) + return -1; + else + number_of_handlers_dispatched += n; + + return /* this->state_changed_ ? -1 : */ 0; +} +#endif /* 0 */ + +int +ACE_Dev_Poll_Reactor::dispatch_io_event (Token_Guard &guard) +{ + + // Define bits to check for while dispatching. +#if defined (ACE_HAS_EVENT_POLL) + const __uint32_t out_event = EPOLLOUT; + const __uint32_t exc_event = EPOLLPRI; + const __uint32_t in_event = EPOLLIN; + const __uint32_t err_event = EPOLLHUP | EPOLLERR; +#else + const short out_event = POLLOUT; + const short exc_event = POLLPRI; + const short in_event = POLLIN; + const short err_event = 0; // No known bits for this +#endif /* ACE_HAS_EVENT_POLL */ + + // Since the underlying event demultiplexing mechansim (`/dev/poll' + // or '/dev/epoll') is stateful, and since only one result buffer is + // used, all pending events (i.e. those retrieved from a previous + // poll) must be dispatched before any additional event can be + // polled. As such, the Dev_Poll_Reactor keeps track of the + // progress of events that have been dispatched. + + // Dispatch the events. + // + // Select the first available handle with event (s) pending. Check for + // event type in defined order of dispatch: output, exception, input. + // When an event is located, clear its bit in the dispatch set. If there + // are no more events for the handle, also increment the pfds pointer + // to move to the next handle ready. + // + // Notice that pfds only contains file descriptors that have + // received events. +#if defined (ACE_HAS_EVENT_POLL) + struct epoll_event *& pfds = this->start_pevents_; + if (pfds < this->end_pevents_) +#else + struct pollfd *& pfds = this->start_pfds_; + if (pfds < this->end_pfds_) +#endif /* ACE_HAS_EVENT_POLL */ + { +#if defined (ACE_HAS_EVENT_POLL) + const ACE_HANDLE handle = pfds->data.fd; + __uint32_t &revents = pfds->events; +#else + const ACE_HANDLE handle = pfds->fd; + short &revents = pfds->revents; +#endif /* ACE_HAS_EVENT_POLL */ + + // Figure out what to do first in order to make it easier to manage + // the bit twiddling and possible pfds increment before releasing + // the token for dispatch. + // Note that if there's an error (such as the handle was closed + // without being removed from the event set) the EPOLLHUP and/or + // EPOLLERR bits will be set in revents. + bool disp_out = false; + bool disp_exc = false; + bool disp_in = false; + if (ACE_BIT_ENABLED (revents, out_event)) + { + disp_out = true; + ACE_CLR_BITS (revents, out_event); + } + else if (ACE_BIT_ENABLED (revents, exc_event)) + { + disp_exc = true; + ACE_CLR_BITS (revents, exc_event); + } + else if (ACE_BIT_ENABLED (revents, in_event)) + { + disp_in = true; + ACE_CLR_BITS (revents, in_event); + } + else if (ACE_BIT_ENABLED (revents, err_event)) + { + this->remove_handler_i (handle, ACE_Event_Handler::ALL_EVENTS_MASK); + ++pfds; + return 1; + } + else + { + ACE_ERROR ((LM_ERROR, ACE_TEXT (" (%t) dispatch_io h %d unknown events 0x%x\n"), handle, revents)); + // ACE_ASSERT (0); + } + + // Increment the pointer to the next element before we + // release the token. Otherwise event handlers end up being + // dispatched multiple times for the same poll. + if (revents == 0) + ++pfds; + + /* When using sys_epoll, we can attach arbitrary user + data to the descriptor, so it can be delivered when + activity is detected. Perhaps we should store event + handler together with descriptor, instead of looking + it up in a repository ? Could it boost performance ? + */ + ACE_Event_Handler *eh = this->handler_rep_.find (handle); + + if (eh) + { + // Modify the reference count in an exception-safe way. + // Note that eh could be the notify handler. It's not strictly + // necessary to manage its refcount, but since we don't enable + // the counting policy, it won't do much. Management of the + // notified handlers themselves is done in the notify handler. + ACE_Dev_Poll_Handler_Guard eh_guard (eh); + + // Release the reactor token before upcall. + guard.release_token (); + + // Dispatch the detected event + if (disp_out) + { + const int status = + this->upcall (eh, &ACE_Event_Handler::handle_output, handle); + + if (status < 0) + // Note that the token is reacquired in remove_handler (). + this->remove_handler (handle, ACE_Event_Handler::WRITE_MASK); + return 1; + } + + if (disp_exc) + { + const int status = + this->upcall (eh, &ACE_Event_Handler::handle_exception, handle); + + if (status < 0) + // Note that the token is reacquired in remove_handler (). + this->remove_handler (handle, ACE_Event_Handler::EXCEPT_MASK); + return 1; + } + + if (disp_in) + { + const int status = + this->upcall (eh, &ACE_Event_Handler::handle_input, handle); + + if (status < 0) + // Note that the token is reacquired in remove_handler (). + this->remove_handler (handle, ACE_Event_Handler::READ_MASK); + return 1; + } + } // The reactor token is reacquired upon leaving this scope. + } + + return 0; +} + +int +ACE_Dev_Poll_Reactor::alertable_handle_events (ACE_Time_Value *max_wait_time) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::alertable_handle_events"); + + return this->handle_events (max_wait_time); +} + +int +ACE_Dev_Poll_Reactor::handle_events (ACE_Time_Value &max_wait_time) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::handle_events"); + + return this->handle_events (&max_wait_time); +} + +int +ACE_Dev_Poll_Reactor::alertable_handle_events (ACE_Time_Value &max_wait_time) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::alertable_handle_events"); + + return this->handle_events (max_wait_time); +} + +int +ACE_Dev_Poll_Reactor::deactivated (void) +{ + return this->deactivated_; +} + +void +ACE_Dev_Poll_Reactor::deactivate (int do_stop) +{ + this->deactivated_ = do_stop; + this->wakeup_all_threads (); +} + +int +ACE_Dev_Poll_Reactor::register_handler (ACE_Event_Handler *handler, + ACE_Reactor_Mask mask) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::register_handler"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + return this->register_handler_i (handler->get_handle (), + handler, + mask); +} + +int +ACE_Dev_Poll_Reactor::register_handler (ACE_HANDLE handle, + ACE_Event_Handler *event_handler, + ACE_Reactor_Mask mask) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::register_handler"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + return this->register_handler_i (handle, + event_handler, + mask); +} + +int +ACE_Dev_Poll_Reactor::register_handler_i (ACE_HANDLE handle, + ACE_Event_Handler *event_handler, + ACE_Reactor_Mask mask) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::register_handler_i"); + + if (handle == ACE_INVALID_HANDLE + || mask == ACE_Event_Handler::NULL_MASK) + { + errno = EINVAL; + return -1; + } + + if (this->handler_rep_.find (handle) == 0) + { + // Handler not present in the repository. Bind it. + if (this->handler_rep_.bind (handle, event_handler, mask) != 0) + return -1; + +#if defined (ACE_HAS_EVENT_POLL) + + struct epoll_event epev; + ACE_OS::memset (&epev, 0, sizeof (epev)); + static const int op = EPOLL_CTL_ADD; + + epev.events = this->reactor_mask_to_poll_event (mask); + epev.data.fd = handle; + + if (::epoll_ctl (this->poll_fd_, op, handle, &epev) == -1) + { + ACE_ERROR ((LM_ERROR, "%p\n", "epoll_ctl")); + (void) this->handler_rep_.unbind (handle); + return -1; + } + +#endif /* ACE_HAS_EVENT_POLL */ + } + else + { + // Handler is already present in the repository, so register it + // again, possibly for different event. Add new mask to the + // current one. + if (this->mask_ops_i (handle, mask, ACE_Reactor::ADD_MASK) == -1) + ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "mask_ops_i"), -1); + } + +#ifndef ACE_HAS_EVENT_POLL + + struct pollfd pfd; + + pfd.fd = handle; + pfd.events = this->reactor_mask_to_poll_event (mask); + pfd.revents = 0; + + // Add file descriptor to the "interest set." + if (ACE_OS::write (this->poll_fd_, &pfd, sizeof (pfd)) != sizeof (pfd)) + { + (void) this->handler_rep_.unbind (handle); + return -1; + } +#endif /*ACE_HAS_EVENT_POLL*/ + + // Note the fact that we've changed the state of the wait_set_, + // which is used by the dispatching loop to determine whether it can + // keep going or if it needs to reconsult select (). + // this->state_changed_ = 1; + + return 0; +} + +int +ACE_Dev_Poll_Reactor::register_handler ( + ACE_HANDLE /* event_handle */, + ACE_HANDLE /* io_handle */, + ACE_Event_Handler * /* event_handler */, + ACE_Reactor_Mask /* mask */) +{ + ACE_NOTSUP_RETURN (-1); +} + +int +ACE_Dev_Poll_Reactor::register_handler (const ACE_Handle_Set &handle_set, + ACE_Event_Handler *event_handler, + ACE_Reactor_Mask mask) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::register_handler"); + + ACE_Handle_Set_Iterator handle_iter (handle_set); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + // @@ It might be more efficient to construct a pollfd array and + // pass it to the write () call in register_handler_i () only once, + // instead of calling write () (a system call) once for each file + // descriptor. + + for (ACE_HANDLE h = handle_iter (); + h != ACE_INVALID_HANDLE; + h = handle_iter ()) + if (this->register_handler_i (h, event_handler, mask) == -1) + return -1; + + return 0; +} + +int +ACE_Dev_Poll_Reactor::register_handler (int signum, + ACE_Event_Handler *new_sh, + ACE_Sig_Action *new_disp, + ACE_Event_Handler **old_sh, + ACE_Sig_Action *old_disp) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::register_handler"); + + return this->signal_handler_->register_handler (signum, + new_sh, + new_disp, + old_sh, + old_disp); +} + +int +ACE_Dev_Poll_Reactor::register_handler (const ACE_Sig_Set &sigset, + ACE_Event_Handler *new_sh, + ACE_Sig_Action *new_disp) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::register_handler"); + + int result = 0; + +#if (ACE_NSIG > 0) + + for (int s = 1; s < ACE_NSIG; ++s) + if ((sigset.is_member (s) == 1) + && this->signal_handler_->register_handler (s, + new_sh, + new_disp) == -1) + result = -1; + +#else /* ACE_NSIG <= 0 */ + + ACE_UNUSED_ARG (sigset); + ACE_UNUSED_ARG (new_sh); + ACE_UNUSED_ARG (new_disp); + +#endif /* ACE_NSIG <= 0 */ + + return result; +} + +int +ACE_Dev_Poll_Reactor::remove_handler (ACE_Event_Handler *handler, + ACE_Reactor_Mask mask) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::remove_handler"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + return this->remove_handler_i (handler->get_handle (), mask); +} + +int +ACE_Dev_Poll_Reactor::remove_handler (ACE_HANDLE handle, + ACE_Reactor_Mask mask) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::remove_handler"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + return this->remove_handler_i (handle, mask); +} + +int +ACE_Dev_Poll_Reactor::remove_handler_i (ACE_HANDLE handle, + ACE_Reactor_Mask mask) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::remove_handler_i"); + + ACE_Event_Handler *eh = this->handler_rep_.find (handle); + + if (eh == 0 || + this->mask_ops_i (handle, mask, ACE_Reactor::CLR_MASK) == -1) + return -1; + + // Check for ref counting now - handle_close () may delete eh. + bool const requires_reference_counting = + eh->reference_counting_policy ().value () == + ACE_Event_Handler::Reference_Counting_Policy::ENABLED; + + if (ACE_BIT_DISABLED (mask, ACE_Event_Handler::DONT_CALL)) + (void) eh->handle_close (handle, mask); + + // If there are no longer any outstanding events on the given handle + // then remove it from the handler repository. + if (this->handler_rep_.mask (handle) == ACE_Event_Handler::NULL_MASK) + this->handler_rep_.unbind (handle, requires_reference_counting); + + // Note the fact that we've changed the state of the wait_set, + // i.e. the "interest set," which is used by the dispatching loop to + // determine whether it can keep going or if it needs to reconsult + // /dev/poll or /dev/epoll. + // this->state_changed_ = 1; + + return 0; +} + +int +ACE_Dev_Poll_Reactor::remove_handler (const ACE_Handle_Set &handle_set, + ACE_Reactor_Mask mask) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::remove_handler"); + + ACE_Handle_Set_Iterator handle_iter (handle_set); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + // @@ It might be more efficient to construct a pollfd array and + // pass it to the write () call in register_handler_i () only once, + // instead of calling write () (a system call) once for each file + // descriptor. + + for (ACE_HANDLE h = handle_iter (); + h != ACE_INVALID_HANDLE; + h = handle_iter ()) + if (this->remove_handler_i (h, mask) == -1) + return -1; + + return 0; +} + +int +ACE_Dev_Poll_Reactor::remove_handler (int signum, + ACE_Sig_Action *new_disp, + ACE_Sig_Action *old_disp, + int sigkey) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::remove_handler"); + + return this->signal_handler_->remove_handler (signum, + new_disp, + old_disp, + sigkey); +} + +int +ACE_Dev_Poll_Reactor::remove_handler (const ACE_Sig_Set &sigset) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::remove_handler"); + + int result = 0; + +#if (ACE_NSIG > 0) + + for (int s = 1; s < ACE_NSIG; ++s) + if ((sigset.is_member (s) == 1) + && this->signal_handler_->remove_handler (s) == -1) + result = -1; + +#else /* ACE_NSIG <= 0 */ + + ACE_UNUSED_ARG (sigset); + +#endif /* ACE_NSIG <= 0 */ + + return result; +} + +int +ACE_Dev_Poll_Reactor::suspend_handler (ACE_Event_Handler *event_handler) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::suspend_handler"); + + if (event_handler == 0) + { + errno = EINVAL; + return -1; + } + + ACE_HANDLE handle = event_handler->get_handle (); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + return this->suspend_handler_i (handle); +} + +int +ACE_Dev_Poll_Reactor::suspend_handler (ACE_HANDLE handle) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::suspend_handler"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + return this->suspend_handler_i (handle); +} + +int +ACE_Dev_Poll_Reactor::suspend_handler (const ACE_Handle_Set &handles) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::suspend_handler"); + + ACE_Handle_Set_Iterator handle_iter (handles); + ACE_HANDLE h; + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + while ((h = handle_iter ()) != ACE_INVALID_HANDLE) + if (this->suspend_handler_i (h) == -1) + return -1; + + return 0; +} + +int +ACE_Dev_Poll_Reactor::suspend_handlers (void) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::suspend_handlers"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + size_t const len = this->handler_rep_.size (); + + for (size_t i = 0; i < len; ++i) + if (this->handler_rep_.suspended (i) == 0 + && this->suspend_handler_i (i) != 0) + return -1; + + return 0; +} + +int +ACE_Dev_Poll_Reactor::suspend_handler_i (ACE_HANDLE handle) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::suspend_handler_i"); + + if (this->handler_rep_.find (handle) == 0) + return -1; + + if (this->handler_rep_.suspended (handle)) + return 0; // Already suspended. @@ Should this be an error? + + // Remove the handle from the "interest set." + // + // Note that the associated event handler is still in the handler + // repository, but no events will be polled on the given handle thus + // no event will be dispatched to the event handler. + +#if defined (ACE_HAS_EVENT_POLL) + + struct epoll_event epev; + ACE_OS::memset (&epev, 0, sizeof (epev)); + static const int op = EPOLL_CTL_DEL; + + epev.events = 0; + epev.data.fd = handle; + + if (::epoll_ctl (this->poll_fd_, op, handle, &epev) == -1) + return -1; + +#else + + struct pollfd pfd[1]; + + pfd[0].fd = handle; + pfd[0].events = POLLREMOVE; + pfd[0].revents = 0; + + if (ACE_OS::write (this->poll_fd_, pfd, sizeof (pfd)) != sizeof (pfd)) + return -1; + +#endif /* ACE_HAS_EVENT_POLL */ + + this->handler_rep_.suspend (handle); + + return 0; +} + +int +ACE_Dev_Poll_Reactor::resume_handler (ACE_Event_Handler *event_handler) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::resume_handler"); + + if (event_handler == 0) + { + errno = EINVAL; + return -1; + } + + ACE_HANDLE handle = event_handler->get_handle (); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + return this->resume_handler_i (handle); +} + +int +ACE_Dev_Poll_Reactor::resume_handler (ACE_HANDLE handle) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::resume_handler"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + return this->resume_handler_i (handle); +} + +int +ACE_Dev_Poll_Reactor::resume_handler (const ACE_Handle_Set &handles) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::resume_handler"); + + ACE_Handle_Set_Iterator handle_iter (handles); + ACE_HANDLE h; + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + while ((h = handle_iter ()) != ACE_INVALID_HANDLE) + if (this->resume_handler_i (h) == -1) + return -1; + + return 0; +} + +int +ACE_Dev_Poll_Reactor::resume_handlers (void) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::resume_handlers"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + size_t const len = this->handler_rep_.size (); + + for (size_t i = 0; i < len; ++i) + if (this->handler_rep_.suspended (i) + && this->resume_handler_i (i) != 0) + return -1; + + return 0; +} + +int +ACE_Dev_Poll_Reactor::resume_handler_i (ACE_HANDLE handle) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::resume_handler_i"); + + if (this->handler_rep_.find (handle) == 0 + && this->handler_rep_.suspended (handle) == 0) + return -1; + + ACE_Reactor_Mask mask = this->handler_rep_.mask (handle); + + if (mask == ACE_Event_Handler::NULL_MASK) + return -1; + + // Place the handle back in to the "interest set." + // + // Events for the given handle will once again be polled. + +#if defined (ACE_HAS_EVENT_POLL) + + struct epoll_event epev; + ACE_OS::memset (&epev, 0, sizeof (epev)); + static const int op = EPOLL_CTL_ADD; + + epev.events = this->reactor_mask_to_poll_event (mask); + epev.data.fd = handle; + + if (::epoll_ctl (this->poll_fd_, op, handle, &epev) == -1) + return -1; + +#else + + struct pollfd pfd[1]; + + pfd[0].fd = handle; + pfd[0].events = this->reactor_mask_to_poll_event (mask); + pfd[0].revents = 0; + + if (ACE_OS::write (this->poll_fd_, pfd, sizeof (pfd)) != sizeof (pfd)) + return -1; + +#endif /* ACE_HAS_EVENT_POLL */ + + this->handler_rep_.resume (handle); + + return 0; +} + +int +ACE_Dev_Poll_Reactor::resumable_handler (void) +{ + // @@ Is this correct? + + return 0; +} + +int +ACE_Dev_Poll_Reactor::uses_event_associations (void) +{ + // Since the Dev_Poll_Reactor does not do any event associations, + // this method always return zero. + return 0; +} + +long +ACE_Dev_Poll_Reactor::schedule_timer (ACE_Event_Handler *event_handler, + const void *arg, + const ACE_Time_Value &delay, + const ACE_Time_Value &interval) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::schedule_timer"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + if (0 != this->timer_queue_) + return this->timer_queue_->schedule + (event_handler, + arg, + this->timer_queue_->gettimeofday () + delay, + interval); + + errno = ESHUTDOWN; + return -1; +} + +int +ACE_Dev_Poll_Reactor::reset_timer_interval (long timer_id, + const ACE_Time_Value &interval) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::reset_timer_interval"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + if (0 != this->timer_queue_) + return this->timer_queue_->reset_interval (timer_id, interval); + + errno = ESHUTDOWN; + return -1; +} + +int +ACE_Dev_Poll_Reactor::cancel_timer (ACE_Event_Handler *event_handler, + int dont_call_handle_close) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::cancel_timer"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + return (this->timer_queue_ == 0 + ? 0 + : this->timer_queue_->cancel (event_handler, + dont_call_handle_close)); +} + +int +ACE_Dev_Poll_Reactor::cancel_timer (long timer_id, + const void **arg, + int dont_call_handle_close) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::cancel_timer"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + return (this->timer_queue_ == 0 + ? 0 + : this->timer_queue_->cancel (timer_id, + arg, + dont_call_handle_close)); +} + +int +ACE_Dev_Poll_Reactor::schedule_wakeup (ACE_Event_Handler *eh, + ACE_Reactor_Mask mask) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::schedule_wakeup"); + + return this->mask_ops (eh->get_handle (), mask, ACE_Reactor::ADD_MASK); +} + +int +ACE_Dev_Poll_Reactor::schedule_wakeup (ACE_HANDLE handle, + ACE_Reactor_Mask mask) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::schedule_wakeup"); + + return this->mask_ops (handle, mask, ACE_Reactor::ADD_MASK); +} + +int +ACE_Dev_Poll_Reactor::cancel_wakeup (ACE_Event_Handler *eh, + ACE_Reactor_Mask mask) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::cancel_wakeup"); + + return this->mask_ops (eh->get_handle (), mask, ACE_Reactor::CLR_MASK); +} + +int +ACE_Dev_Poll_Reactor::cancel_wakeup (ACE_HANDLE handle, + ACE_Reactor_Mask mask) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::cancel_wakeup"); + + return this->mask_ops (handle, mask, ACE_Reactor::CLR_MASK); +} + +int +ACE_Dev_Poll_Reactor::notify (ACE_Event_Handler *eh, + ACE_Reactor_Mask mask, + ACE_Time_Value *timeout) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::notify"); + + ssize_t n = 0; + + // Pass over both the Event_Handler *and* the mask to allow the + // caller to dictate which Event_Handler method the receiver + // invokes. Note that this call can timeout. + + n = this->notify_handler_->notify (eh, mask, timeout); + + return n == -1 ? -1 : 0; +} + +void +ACE_Dev_Poll_Reactor::max_notify_iterations (int iterations) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::max_notify_iterations"); + + ACE_MT (ACE_GUARD (ACE_Dev_Poll_Reactor_Token, mon, this->token_)); + + this->notify_handler_->max_notify_iterations (iterations); +} + +int +ACE_Dev_Poll_Reactor::max_notify_iterations (void) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::max_notify_iterations"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + return this->notify_handler_->max_notify_iterations (); +} + +int +ACE_Dev_Poll_Reactor::purge_pending_notifications (ACE_Event_Handler * eh, + ACE_Reactor_Mask mask) +{ + if (this->notify_handler_ == 0) + return 0; + + return this->notify_handler_->purge_pending_notifications (eh, mask); +} + +ACE_Event_Handler * +ACE_Dev_Poll_Reactor::find_handler (ACE_HANDLE handle) +{ + ACE_MT (ACE_READ_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, 0)); + + ACE_Event_Handler *event_handler = this->handler_rep_.find (handle); + if (event_handler) + event_handler->add_reference (); + return event_handler; +} + +int +ACE_Dev_Poll_Reactor::handler (ACE_HANDLE handle, + ACE_Reactor_Mask mask, + ACE_Event_Handler **event_handler) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::handler"); + + ACE_MT (ACE_READ_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + ACE_Event_Handler *h = this->handler_rep_.find (handle); + + if (h != 0 + && ACE_BIT_CMP_MASK (this->handler_rep_.mask (handle), + mask, // Compare all bits in the mask + mask)) + { + if (event_handler != 0) + *event_handler = h; + + return 0; + } + + return -1; +} + +int +ACE_Dev_Poll_Reactor::handler (int signum, + ACE_Event_Handler **eh) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::handler"); + + ACE_Event_Handler *handler = this->signal_handler_->handler (signum); + + if (handler == 0) + return -1; + else if (eh != 0) + *eh = handler; + + return 0; +} + +bool +ACE_Dev_Poll_Reactor::initialized (void) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::initialized"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, false)); + + return this->initialized_; +} + +size_t +ACE_Dev_Poll_Reactor::size (void) const +{ + return this->size_; +} + +ACE_Lock & +ACE_Dev_Poll_Reactor::lock (void) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::lock"); + + return this->lock_adapter_; +} + +void +ACE_Dev_Poll_Reactor::wakeup_all_threads (void) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::wakeup_all_threads"); + + // Send a notification, but don't block if there's no one to receive + // it. + this->notify (0, + ACE_Event_Handler::NULL_MASK, + (ACE_Time_Value *) &ACE_Time_Value::zero); +} + +int +ACE_Dev_Poll_Reactor::owner (ACE_thread_t /* new_owner */, + ACE_thread_t * /* old_owner */) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::owner"); + + // There is no need to set the owner of the event loop. Multiple + // threads may invoke the event loop simulataneously. + + return 0; +} + +int +ACE_Dev_Poll_Reactor::owner (ACE_thread_t * /* owner */) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::owner"); + + // There is no need to set the owner of the event loop. Multiple + // threads may invoke the event loop simulataneously. + + return 0; +} + +int +ACE_Dev_Poll_Reactor::restart (void) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::restart"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + return this->restart_; +} + +int +ACE_Dev_Poll_Reactor::restart (int r) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::restart"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + int current_value = this->restart_; + this->restart_ = r; + return current_value; +} + +void +ACE_Dev_Poll_Reactor::requeue_position (int) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::requeue_position"); +} + +int +ACE_Dev_Poll_Reactor::requeue_position (void) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::requeue_position"); + + ACE_NOTSUP_RETURN (-1); +} + +int +ACE_Dev_Poll_Reactor::mask_ops (ACE_Event_Handler *event_handler, + ACE_Reactor_Mask mask, + int ops) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::mask_ops"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + return this->mask_ops_i (event_handler->get_handle (), mask, ops); +} + +int +ACE_Dev_Poll_Reactor::mask_ops (ACE_HANDLE handle, + ACE_Reactor_Mask mask, + int ops) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::mask_ops"); + + ACE_MT (ACE_GUARD_RETURN (ACE_Dev_Poll_Reactor_Token, mon, this->token_, -1)); + + return this->mask_ops_i (handle, mask, ops); +} + +int +ACE_Dev_Poll_Reactor::mask_ops_i (ACE_HANDLE handle, + ACE_Reactor_Mask mask, + int ops) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::mask_ops_i"); + + if (this->handler_rep_.handle_in_range (handle) == 0) + return -1; + + // Block out all signals until method returns. + ACE_Sig_Guard sb; + + ACE_Reactor_Mask const old_mask = this->handler_rep_.mask (handle); + ACE_Reactor_Mask new_mask = old_mask; + + // Perform GET, CLR, SET, and ADD operations on the interest/wait + // set and the suspend set (if necessary). + // + // GET = 1, Retrieve current value + // SET = 2, Set value of bits to new mask (changes the entire mask) + // ADD = 3, Bitwise "or" the value into the mask (only changes + // enabled bits) + // CLR = 4 Bitwise "and" the negation of the value out of the mask + // (only changes enabled bits) + // + // Returns the original mask. + + switch (ops) + { + case ACE_Reactor::GET_MASK: + // The work for this operation is done in all cases at the + // begining of the function. + return old_mask; + + case ACE_Reactor::CLR_MASK: + ACE_CLR_BITS (new_mask, mask); + break; + + case ACE_Reactor::SET_MASK: + new_mask = mask; + break; + + case ACE_Reactor::ADD_MASK: + ACE_SET_BITS (new_mask, mask); + break; + + default: + return -1; + } + + /// Reset the mask for the given handle. + this->handler_rep_.mask (handle, new_mask); + + if (this->handler_rep_.suspended (handle) == 0) + { + // Only attempt to alter events for the handle from the + // "interest set" if it hasn't been suspended. + + short const events = this->reactor_mask_to_poll_event (new_mask); + +#if defined (sun) + // Apparently events cannot be updated on-the-fly on Solaris so + // remove the existing events, and then add the new ones. + struct pollfd pfd[2]; + + pfd[0].fd = handle; + pfd[0].events = POLLREMOVE; + pfd[0].revents = 0; + pfd[1].fd = (events == POLLREMOVE ? ACE_INVALID_HANDLE : handle); + pfd[1].events = events; + pfd[1].revents = 0; + + // Change the events associated with the given file descriptor. + if (ACE_OS::write (this->poll_fd_, + pfd, + sizeof (pfd)) != sizeof (pfd)) + return -1; +#elif defined (ACE_HAS_EVENT_POLL) + + struct epoll_event epev; + ACE_OS::memset (&epev, 0, sizeof (epev)); + int op; + + // ACE_Event_Handler::NULL_MASK ??? + if (new_mask == 0) + { + op = EPOLL_CTL_DEL; + epev.events = 0; + } + else + { + op = EPOLL_CTL_MOD; + epev.events = events; + } + + epev.data.fd = handle; + + if (::epoll_ctl (this->poll_fd_, op, handle, &epev) == -1) + { + // If a handle is closed, epoll removes it from the poll set + // automatically - we may not know about it yet. If that's the + // case, a mod operation will fail with ENOENT. Retry it as + // an add. + if (op == EPOLL_CTL_MOD && errno == ENOENT && + ::epoll_ctl (this->poll_fd_, EPOLL_CTL_ADD, handle, &epev) == -1) + return -1; + } + +#else + pollfd pfd[1]; + + pfd[0].fd = handle; + pfd[0].events = events; + pfd[0].revents = 0; + + // Change the events associated with the given file descriptor. + if (ACE_OS::write (this->poll_fd_, + pfd, + sizeof (pfd)) != sizeof (pfd)) + return -1; +#endif /*ACE_HAS_EVENT_POLL */ + } + + return old_mask; +} + +int +ACE_Dev_Poll_Reactor::ready_ops (ACE_Event_Handler * /* event_handler */, + ACE_Reactor_Mask /* mask */, + int /* ops */) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::ready_ops"); + + // Since the Dev_Poll_Reactor uses the poll result buffer, the + // ready_set cannot be directly manipulated outside of the event + // loop. + ACE_NOTSUP_RETURN (-1); +} + +int +ACE_Dev_Poll_Reactor::ready_ops (ACE_HANDLE /* handle */, + ACE_Reactor_Mask /* mask */, + int /* ops */) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::ready_ops"); + + // Since the Dev_Poll_Reactor uses the poll result buffer, the + // ready_set cannot be directly manipulated outside of the event + // loop. + ACE_NOTSUP_RETURN (-1); +} + +void +ACE_Dev_Poll_Reactor::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Dev_Poll_Reactor::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("restart_ = %d\n"), this->restart_)); + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("initialized_ = %d"), + this->initialized_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("poll_fd_ = %d"), this->poll_fd_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("size_ = %u"), this->size_)); + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("deactivated_ = %d"), + this->deactivated_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +short +ACE_Dev_Poll_Reactor::reactor_mask_to_poll_event (ACE_Reactor_Mask mask) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::reactor_mask_to_poll_event"); + + if (mask == ACE_Event_Handler::NULL_MASK) + // No event. Remove from interest set. +#if defined (ACE_HAS_EVENT_POLL) + return EPOLL_CTL_DEL; +#else + return POLLREMOVE; +#endif /* ACE_HAS_EVENT_POLL */ + + short events = 0; + + // READ, ACCEPT, and CONNECT flag will place the handle in the + // read set. + if (ACE_BIT_ENABLED (mask, ACE_Event_Handler::READ_MASK) + || ACE_BIT_ENABLED (mask, ACE_Event_Handler::ACCEPT_MASK) + || ACE_BIT_ENABLED (mask, ACE_Event_Handler::CONNECT_MASK)) + { +#if defined (ACE_HAS_EVENT_POLL) + ACE_SET_BITS (events, EPOLLIN); +#else + ACE_SET_BITS (events, POLLIN); +#endif /*ACE_HAS_EVENT_POLL*/ + } + + // WRITE and CONNECT flag will place the handle in the write set. + if (ACE_BIT_ENABLED (mask, ACE_Event_Handler::WRITE_MASK) + || ACE_BIT_ENABLED (mask, ACE_Event_Handler::CONNECT_MASK)) + { +#if defined (ACE_HAS_EVENT_POLL) + ACE_SET_BITS (events, EPOLLOUT); +#else + ACE_SET_BITS (events, POLLOUT); +#endif /*ACE_HAS_EVENT_POLL*/ + } + + // EXCEPT flag will place the handle in the except set. + if (ACE_BIT_ENABLED (mask, ACE_Event_Handler::EXCEPT_MASK)) + { +#if defined (ACE_HAS_EVENT_POLL) + ACE_SET_BITS (events, EPOLLPRI); +#else + ACE_SET_BITS (events, POLLPRI); +#endif /*ACE_HAS_EVENT_POLL*/ + } + + return events; +} + +namespace { + void polite_sleep_hook (void *) { } +} + +int +ACE_Dev_Poll_Reactor::Token_Guard::acquire_quietly (ACE_Time_Value *max_wait) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::Token_Guard::acquire_quietly"); + + // Acquire the token but don't ping any waiters; just queue up politely. + int result = 0; + if (max_wait) + { + ACE_Time_Value tv = ACE_OS::gettimeofday (); + tv += *max_wait; + + ACE_MT (result = this->token_.acquire_read (&polite_sleep_hook, + 0, + &tv)); + } + else + { + ACE_MT (result = this->token_.acquire_read (&polite_sleep_hook)); + } + + // Check for timeouts and errors. + if (result == -1) + { + if (errno == ETIME) + return 0; + else + { + ACE_ERROR ((LM_ERROR, "%t: %p\n", "token acquire_read")); + return -1; + } + } + + // We got the token and so let us mark ourselves as owner + this->owner_ = 1; + + return result; +} + +int +ACE_Dev_Poll_Reactor::Token_Guard::acquire (ACE_Time_Value *max_wait) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor::Token_Guard::acquire"); + + // Try to grab the token. If someone if already there, don't wake + // them up, just queue up in the thread pool. + int result = 0; + if (max_wait) + { + ACE_Time_Value tv = ACE_OS::gettimeofday (); + tv += *max_wait; + + ACE_MT (result = this->token_.acquire (0, 0, &tv)); + } + else + { + ACE_MT (result = this->token_.acquire ()); + } + + // Check for timeouts and errors. + if (result == -1) + { + if (errno == ETIME) + return 0; + else + return -1; + } + + // We got the token and so let us mark ourseleves as owner + this->owner_ = 1; + + return result; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_EVENT_POLL || ACE_HAS_DEV_POLL */ diff --git a/ACE/ace/Dev_Poll_Reactor.h b/ACE/ace/Dev_Poll_Reactor.h new file mode 100644 index 00000000000..b6af574ae3e --- /dev/null +++ b/ACE/ace/Dev_Poll_Reactor.h @@ -0,0 +1,1252 @@ +// -*- C++ -*- + +// ========================================================================= +/** + * @file Dev_Poll_Reactor.h + * + * $Id$ + * + * @c /dev/poll (or Linux @c sys_epoll) based Reactor implementation. + * + * @author Ossama Othman + */ +// ========================================================================= + + +#ifndef ACE_DEV_POLL_REACTOR_H +#define ACE_DEV_POLL_REACTOR_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_EVENT_POLL) && defined (ACE_HAS_DEV_POLL) +# error ACE_HAS_EVENT_POLL and ACE_HAS_DEV_POLL are mutually exclusive. +#endif /* ACE_HAS_EVENT_POLL && defined ACE_HAS_DEV_POLL */ + +#if defined (ACE_HAS_EVENT_POLL) || defined (ACE_HAS_DEV_POLL) + +#include "ace/Pipe.h" +#include "ace/Lock_Adapter_T.h" +#include "ace/Reactor_Impl.h" +#include "ace/Reactor_Token_T.h" +#include "ace/Token.h" + +#if defined (ACE_HAS_REACTOR_NOTIFICATION_QUEUE) +# include "ace/Notification_Queue.h" +#endif /* ACE_HAS_REACTOR_NOTIFICATION_QUEUE */ + +#if defined (ACE_HAS_DEV_POLL) +struct pollfd; +#elif defined (ACE_HAS_EVENT_POLL) +struct epoll_event; +#endif + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Forward declarations +class ACE_Sig_Handler; +class ACE_Dev_Poll_Reactor; + +/** + * @class ACE_Dev_Poll_Event_Tuple + * + * @brief Class that associates specific event mask with a given event + * handler. + * + * This class merely provides a means to associate an event mask + * with an event handler. Such an association is needed since it is + * not possible to retrieve the event mask from the "interest set" + * stored in the `/dev/poll' or `/dev/epoll' driver. Without this + * external association, it would not be possible keep track of the + * event mask for a given event handler when suspending it or resuming + * it. + * + * @note An ACE_Handle_Set is not used since the number of handles may + * exceed its capacity (ACE_DEFAULT_SELECT_REACTOR_SIZE). + */ +class ACE_Dev_Poll_Event_Tuple +{ +public: + + /// Constructor. + ACE_Dev_Poll_Event_Tuple (void); + +public: + + /// The event handler. + ACE_Event_Handler *event_handler; + + /// The event mask for the above event handler. + ACE_Reactor_Mask mask; + + /// Flag that states whether or not the event handler is suspended. + char suspended; +}; + +// --------------------------------------------------------------------- + +#if 0 +/** + * @class ACE_Dev_Poll_Ready_Set + * + * @brief Class that contains the list of "ready" file descriptors. + * + * This class points to an array of pollfd structures corresponding to + * "ready" file descriptors, such as those corresponding to event + * handlers that request an additional callback after being initially + * dispatched (i.e. return a value greater than zero). + * @par + * The idea is to store the "ready" set in an existing area of memory + * that already contains pollfd instances. Doing so is safe since the + * "ready" set is dispatched before polling for additional events, + * thus avoiding being potentially overwritten during the event poll. + * @par + * When the "ready" set is dispatched, all that needs to be done is to + * iterate over the contents of the array. There is no need to "walk" + * the array in search of ready file descriptors since the array by + * design only contains ready file descriptors. As such, this + * implementation of a ready set is much more efficient in the + * presence of a large number of file descriptors in terms of both + * time and space than the one used in the Select_Reactor, for + * example. + */ +class ACE_Dev_Poll_Ready_Set +{ +public: + + /// Constructor. + ACE_Dev_Poll_Ready_Set (void); + +public: + + /// The array containing the pollfd structures corresponding to the + /// "ready" file descriptors. + struct pollfd *pfds; + + /// The number of "ready" file descriptors in the above array. + int nfds; + +}; +#endif /* 0 */ + +// --------------------------------------------------------------------- + +/** + * @class ACE_Dev_Poll_Reactor_Notify + * + * @brief Event handler used for unblocking the ACE_Dev_Poll_Reactor + * from its event loop. + * + * This event handler is used internally by the ACE_Dev_Poll_Reactor + * as a means to allow a thread other then the one running the event + * loop to unblock the event loop. + */ +class ACE_Dev_Poll_Reactor_Notify : public ACE_Reactor_Notify +{ +public: + + /// Constructor + ACE_Dev_Poll_Reactor_Notify (void); + + /** + * @name Initialization and Termination Methods + * + * Methods called when initializing and terminating this event + * handler. + */ + virtual int open (ACE_Reactor_Impl *, + ACE_Timer_Queue *timer_queue = 0, + int disable_notify = 0); + virtual int close (void); + + /** + * Called by a thread when it wants to unblock the Reactor_Impl. + * This wakes up the Reactor_Impl if currently blocked. Pass over + * both the Event_Handler and the mask to allow the caller to + * dictate which Event_Handler method the Reactor_Impl will + * invoke. The ACE_Time_Value indicates how long to block + * trying to notify the Reactor_Impl. If timeout == 0, the + * caller will block until action is possible, else will wait until + * the relative time specified in *timeout elapses). + */ + virtual int notify (ACE_Event_Handler *eh = 0, + ACE_Reactor_Mask mask = ACE_Event_Handler::EXCEPT_MASK, + ACE_Time_Value *timeout = 0); + + /// Unimplemented method required by pure virtual method in abstract + /// base class. + /** + * This method's interface is not very compatibile with this + * Reactor's design. It's not clear why this method is pure virtual + * either. + */ + virtual int dispatch_notifications (int &number_of_active_handles, + ACE_Handle_Set &rd_mask); + + /// Returns the ACE_HANDLE of the notify pipe on which the reactor + /// is listening for notifications so that other threads can unblock + /// the Reactor_Impl. + virtual ACE_HANDLE notify_handle (void); + + /// Verify whether the buffer has dispatchable info or not. + virtual int is_dispatchable (ACE_Notification_Buffer &buffer); + + /// Handle one notify call represented in @a buffer. This could be + /// because of a thread trying to unblock the Reactor_Impl. + virtual int dispatch_notify (ACE_Notification_Buffer &buffer); + + /// Read one notify call on the handle into @a buffer. + /// This could be because of a thread trying to unblock the Reactor_Impl. + virtual int read_notify_pipe (ACE_HANDLE handle, + ACE_Notification_Buffer &buffer); + + /// Called back by the ACE_Dev_Poll_Reactor when a thread wants to + /// unblock us. + virtual int handle_input (ACE_HANDLE handle); + + /** + * Set the maximum number of times that the handle_input method + * will iterate and dispatch the ACE_Event_Handlers that are + * passed in via the notify queue before breaking out of the event + * loop. By default, this is set to -1, which means "iterate until + * the queue is empty." Setting this to a value like "1 or 2" will + * increase "fairness" (and thus prevent starvation) at the expense + * of slightly higher dispatching overhead. + */ + virtual void max_notify_iterations (int); + + /** + * Get the maximum number of times that the handle_input method + * will iterate and dispatch the ACE_Event_Handlers that are + * passed in via the notify queue before breaking out of its event + * loop. + */ + virtual int max_notify_iterations (void); + + /** + * Purge any notifications pending in this reactor for the specified + * ACE_Event_Handler object. Returns the number of notifications + * purged. Returns -1 on error. + */ + virtual int purge_pending_notifications ( + ACE_Event_Handler * = 0, + ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK); + + /// Dump the state of an object. + virtual void dump (void) const; + +protected: + + /** + * Keep a back pointer to the ACE_Dev_Poll_Reactor. If this value + * if NULL then the ACE_Dev_Poll_Reactor has been initialized with + * disable_notify_pipe. + */ + ACE_Dev_Poll_Reactor *dp_reactor_; + + /** + * Contains the ACE_HANDLE the ACE_Dev_Poll_Reactor is listening + * on, as well as the ACE_HANDLE that threads wanting the attention + * of the ACE_Dev_Poll_Reactor will write to. + */ + ACE_Pipe notification_pipe_; + + /** + * Keeps track of the maximum number of times that the + * ACE_Dev_Poll_Reactor_Notify::handle_input method will iterate and + * dispatch the ACE_Event_Handlers that are passed in via the + * notify pipe before breaking out of its recv loop. By default, + * this is set to -1, which means "iterate until the pipe is empty." + */ + int max_notify_iterations_; + +#if defined (ACE_HAS_REACTOR_NOTIFICATION_QUEUE) + /** + * @brief A user-space queue to store the notifications. + * + * The notification pipe has OS-specific size restrictions. That + * is, no more than a certain number of bytes may be stored in the + * pipe without blocking. This limit may be too small for certain + * applications. In this case, ACE can be configured to store all + * the events in user-space. The pipe is still needed to wake up + * the reactor thread, but only one event is sent through the pipe + * at a time. + */ + ACE_Notification_Queue notification_queue_; +#endif /* ACE_HAS_REACTOR_NOTIFICATION_QUEUE */ + +}; + +// --------------------------------------------------------------------- + +/** + * @class ACE_Dev_Poll_Reactor_Handler_Repository + * + * @internal + + * @brief Used to map ACE_HANDLEs onto the appropriate + * ACE_Event_Handler *. + * + * + * This class is simply a container that maps a handle to its + * corresponding event handler. It is not meant for use outside of + * the Dev_Poll_Reactor. + */ +class ACE_Dev_Poll_Reactor_Handler_Repository +{ +public: + + /// Constructor. + ACE_Dev_Poll_Reactor_Handler_Repository (void); + + /// Initialize a repository of the appropriate @a size. + int open (size_t size); + + /// Close down the repository. + int close (void); + + /** + * @name Repository Manipulation Operations + * + * Methods used to search and modify the handler repository. + */ + //@{ + + /** + * Return the @c ACE_Event_Handler associated with @c ACE_HANDLE. If + * @a index_p is non-zero, then return the index location of the + * handle, if found. + */ + ACE_Event_Handler *find (ACE_HANDLE handle, size_t *index_p = 0); + + /// Set the event mask for event handler associated with the given + /// handle. + void mask (ACE_HANDLE handle, ACE_Reactor_Mask mask); + + /// Retrieve the event mask for the event handler associated with + /// the given handle. + ACE_Reactor_Mask mask (ACE_HANDLE handle); + + /// Mark the event handler associated with the given handle as + /// "suspended." + void suspend (ACE_HANDLE handle); + + /// Mark the event handler associated with the given handle as + /// "resumed." + void resume (ACE_HANDLE handle); + + /// Is the event handler for the given handle suspended? + int suspended (ACE_HANDLE handle) const; + + /// Bind the ACE_Event_Handler to the @c ACE_HANDLE with the + /// appropriate ACE_Reactor_Mask settings. + int bind (ACE_HANDLE handle, + ACE_Event_Handler *handler, + ACE_Reactor_Mask mask); + + /// Remove the binding for @c ACE_HANDLE; optionally decrement the associated + /// handler's reference count. + int unbind (ACE_HANDLE handle, bool decr_refcnt = true); + + /// Remove all the (@c ACE_HANDLE, @c ACE_Event_Handler) tuples. + int unbind_all (void); + + /** + * @name Sanity Checking + * + * Methods used to prevent "out-of-range" errors when indexing the + * underlying handler array. + */ + //@{ + + // Check the @a handle to make sure it's a valid @c ACE_HANDLE that + // within the range of legal handles (i.e., greater than or equal to + // zero and less than @c max_size_). + int invalid_handle (ACE_HANDLE handle) const; + + // Check the handle to make sure it's a valid @c ACE_HANDLE that is + // within the range of currently registered handles (i.e., greater + // than or equal to zero and less than @c max_handlep1_). + int handle_in_range (ACE_HANDLE handle) const; + + //@} + + /// Returns the current table size. + size_t size (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + + /// Maximum number of handles. + int max_size_; + + /// The underlying array of event handlers. + /** + * The array of event handlers is directly indexed directly using + * an @c ACE_HANDLE value. This is Unix-specific. + */ + ACE_Dev_Poll_Event_Tuple *handlers_; + +}; + +// --------------------------------------------------------------------- + +/** + * @class ACE_Dev_Poll_Reactor + * + * @brief A `/dev/poll' or `/dev/epoll' based Reactor implemenatation. + * + * @attention The Linux epoll implementation works quite well and is + * fully supported; however, the /dev/poll implementation is @em experimental. + * + * The ACE_Dev_Poll_Reactor uses the `/dev/poll' or '/dev/epoll' + * character devices to demultiplex events on a given set of file + * descriptors. Unlike @c select(), `/dev/poll' and `/dev/epoll' have + * no hard-coded limit on the number of file descriptors that may be + * handled at any given time. As such, the ACE_Dev_Poll_Reactor can + * generally handle a much larger number of file descriptors than + * @c select() -based reactors. Furthermore, since `/dev/poll' and + * `/dev/epoll' both return a set of file descriptors that are active, + * there is no need to "walk" the set of file descriptors to determine + * which ones are active, such as what is done with the @c select() and + * @c poll() system calls. All returned file descriptors are active. + * This makes event dispatching very efficient. + * + * @note In general, this reactor may only be used to demultiplex + * events on sockets. Demultiplexing events on pipes, for + * example may not work. This is due to a limitation in the + * underlying `/dev/poll' device driver. + * + * @note It is only possible to achieve millisecond timeout + * resolutions with the @c ACE_Dev_Poll_Reactor. However, the + * timeout resolution for timers is independent of the reactors + * timeout resolution. As such, it may be possible to achieve + * sub-millisecond timeout resolutions for timers but that is + * entirely platform dependent. + */ + +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) +typedef ACE_Token ACE_DEV_POLL_TOKEN; +#else +typedef ACE_Noop_Token ACE_DEV_POLL_TOKEN; +#endif /* ACE_MT_SAFE && ACE_MT_SAFE != 0 */ +typedef ACE_Reactor_Token_T ACE_Dev_Poll_Reactor_Token; + +class ACE_Export ACE_Dev_Poll_Reactor : public ACE_Reactor_Impl +{ +public: + + /// Initialize @c ACE_Dev_Poll_Reactor with the default size. + /** + * The default size for the @c ACE_Dev_Poll_Reactor is the maximum + * number of open file descriptors for the process. + */ + ACE_Dev_Poll_Reactor (ACE_Sig_Handler * = 0, + ACE_Timer_Queue * = 0, + int disable_notify_pipe = 0, + ACE_Reactor_Notify *notify = 0, + int mask_signals = 1, + int s_queue = ACE_DEV_POLL_TOKEN::FIFO); + + /// Initialize ACE_Dev_Poll_Reactor with size @a size. + /** + * @note On Unix platforms, the @a size parameter should be as large + * as the maximum number of file descriptors allowed for a + * given process. This is necessary since a file descriptor + * is used to directly index the array of event handlers + * maintained by the Reactor's handler repository. Direct + * indexing is used for efficiency reasons. If the size + * parameter is less than the process maximum, the process + * maximum will be decreased in order to prevent potential + * access violations. + */ + ACE_Dev_Poll_Reactor (size_t size, + int restart = 0, + ACE_Sig_Handler * = 0, + ACE_Timer_Queue * = 0, + int disable_notify_pipe = 0, + ACE_Reactor_Notify *notify = 0, + int mask_signals = 1, + int s_queue = ACE_DEV_POLL_TOKEN::FIFO); + + /// Close down and release all resources. + virtual ~ACE_Dev_Poll_Reactor (void); + + /// Initialization. + virtual int open (size_t size, + int restart = 0, + ACE_Sig_Handler * = 0, + ACE_Timer_Queue * = 0, + int disable_notify_pipe = 0, + ACE_Reactor_Notify * = 0); + + /** + * @param handle allows the reactor to check if the caller is + * valid. + * + * @return 0 if the size of the current message has been put in + * size. -1 if not. + */ + virtual int current_info (ACE_HANDLE handle, size_t & /* size */); + + /// Use a user specified signal handler instead. + virtual int set_sig_handler (ACE_Sig_Handler *signal_handler); + + /// Set a user-specified timer queue. + virtual int timer_queue (ACE_Timer_Queue *tq); + + /// Get the timer queue + /// @return The current @c ACE_Timer_Queue. + virtual ACE_Timer_Queue *timer_queue (void) const; + + /// Close down and release all resources. + virtual int close (void); + + // = Event loop drivers. + /** + * Returns non-zero if there are I/O events "ready" for dispatching, + * but does not actually dispatch the event handlers. By default, + * don't block while checking this, i.e., "poll". + * + * @note It is only possible to achieve millisecond timeout + * resolutions with the @c ACE_Dev_Poll_Reactor. + */ + virtual int work_pending ( + const ACE_Time_Value &max_wait_time = ACE_Time_Value::zero); + + /** + * This event loop driver blocks for up to @a max_wait_time before + * returning. It will return earlier if events occur. Note that + * @a max_wait_time can be 0, in which case this method blocks + * indefinitely until events occur. + * @par + * @a max_wait_time is decremented to reflect how much time this + * call took. For instance, if a time value of 3 seconds is passed + * to @c handle_events() and an event occurs after 2 seconds, + * @a max_wait_time will equal 1 second. This can be used if an + * application wishes to handle events for some fixed amount of + * time. + * @par + * The only difference between @c alertable_handle_events() and + * handle_events() is that in the alertable case, the event loop + * will return when the system queues an I/O completion routine or + * an Asynchronous Procedure Call. + * + * @return The total number of @c ACE_Event_Handlers that were + * dispatched, 0 if the @a max_wait_time elapsed without + * dispatching any handlers, or -1 if an error occurs. + + * @note It is only possible to achieve millisecond timeout + * resolutions with the @c ACE_Dev_Poll_Reactor. + */ + virtual int handle_events (ACE_Time_Value *max_wait_time = 0); + virtual int alertable_handle_events (ACE_Time_Value *max_wait_time = 0); + + /** + * This method is just like the one above, except the + * @a max_wait_time value is a reference and can therefore never be + * @c NULL. + * + * @note It is only possible to achieve millisecond timeout + * resolutions with the @c ACE_Dev_Poll_Reactor. + */ + virtual int handle_events (ACE_Time_Value &max_wait_time); + virtual int alertable_handle_events (ACE_Time_Value &max_wait_time); + + // = Event handling control. + + /** + * @return The status of Reactor. If this function returns 0, the + * reactor is actively handling events. If it returns + * non-zero, @c handle_events() and + * @c handle_alertable_events() return -1 immediately. + */ + virtual int deactivated (void); + + /** + * Control whether the Reactor will handle any more incoming events + * or not. If @a do_stop == 1, the Reactor will be disabled. By + * default, a reactor is in active state and can be + * deactivated/reactived as desired. + */ + virtual void deactivate (int do_stop); + + // = Register and remove Handlers. + + /// Register @a event_handler with @a mask. The I/O handle will + /// always come from get_handle on the event_handler. + virtual int register_handler (ACE_Event_Handler *event_handler, + ACE_Reactor_Mask mask); + + /// Register @a event_handler with @a mask. The I/O handle is + /// provided through the @a io_handle parameter. + virtual int register_handler (ACE_HANDLE io_handle, + ACE_Event_Handler *event_handler, + ACE_Reactor_Mask mask); + + /** + * Register an @a event_handler that will be notified when + * @a event_handle is signaled. @a mask specifies the network + * events that the @a event_handler is interested in. + */ + virtual int register_handler (ACE_HANDLE event_handle, + ACE_HANDLE io_handle, + ACE_Event_Handler *event_handler, + ACE_Reactor_Mask mask); + + /// Register @a event_handler> with all the @a handles> in the @c + /// Handle_Set. + virtual int register_handler (const ACE_Handle_Set &handles, + ACE_Event_Handler *event_handler, + ACE_Reactor_Mask mask); + + /** + * Register @a new_sh to handle the signal @a signum using the + * @a new_disp. Returns the @a old_sh that was previously + * registered (if any), along with the @a old_disp of the signal + * handler. + */ + virtual int register_handler (int signum, + ACE_Event_Handler *new_sh, + ACE_Sig_Action *new_disp = 0, + ACE_Event_Handler **old_sh = 0, + ACE_Sig_Action *old_disp = 0); + + /// Registers to handle a set of signals using the + /// . + virtual int register_handler (const ACE_Sig_Set &sigset, + ACE_Event_Handler *new_sh, + ACE_Sig_Action *new_disp = 0); + + /// Removes @a event_handler. + /** + * @note The I/O handle will be obtained using @c get_handle() + * method of @a event_handler . If @a mask == + * @c ACE_Event_Handler::DONT_CALL then the @c handle_close() + * method of the @a event_handler is not invoked. + */ + virtual int remove_handler (ACE_Event_Handler *event_handler, + ACE_Reactor_Mask mask); + + /** + * Removes @a handle. If @a mask == ACE_Event_Handler::DONT_CALL + * then the method of the associated + * is not invoked. + */ + virtual int remove_handler (ACE_HANDLE handle, + ACE_Reactor_Mask mask); + + /** + * Removes all handles in . If @a mask == + * ACE_Event_Handler::DONT_CALL then the method of + * the associated s is not invoked. + */ + virtual int remove_handler (const ACE_Handle_Set &handle_set, + ACE_Reactor_Mask mask); + + /** + * Remove the ACE_Event_Handler currently associated with @a signum. + * Install the new disposition (if given) and return the previous + * disposition (if desired by the caller). Returns 0 on success and + * -1 if @a signum is invalid. + */ + virtual int remove_handler (int signum, + ACE_Sig_Action *new_disp, + ACE_Sig_Action *old_disp = 0, + int sigkey = -1); + + /// Calls for every signal in . + virtual int remove_handler (const ACE_Sig_Set &sigset); + + // = Suspend and resume Handlers. + + /// Suspend event_handler temporarily. Use + /// ACE_Event_Handler::get_handle() to get the handle. + virtual int suspend_handler (ACE_Event_Handler *event_handler); + + /// Suspend handle temporarily. + virtual int suspend_handler (ACE_HANDLE handle); + + /// Suspend all handles in handle set temporarily. + virtual int suspend_handler (const ACE_Handle_Set &handles); + + /// Suspend all handles temporarily. + virtual int suspend_handlers (void); + + /// Resume event_handler. Use ACE_Event_Handler::get_handle() to + /// get the handle. + virtual int resume_handler (ACE_Event_Handler *event_handler); + + /// Resume handle. + virtual int resume_handler (ACE_HANDLE handle); + + /// Resume all handles in handle set. + virtual int resume_handler (const ACE_Handle_Set &handles); + + /// Resume all handles. + virtual int resume_handlers (void); + + /// Does the reactor allow the application to resume the handle on + /// its own, i.e., can it pass on the control of handle resumption to + /// the application. + virtual int resumable_handler (void); + + /// Return 1 if we any event associations were made by the reactor + /// for the handles that it waits on, 0 otherwise. + virtual int uses_event_associations (void); + + // = Timer management. + + /** + * Schedule an ACE_Event_Handler that will expire after an amount + * of time. The return value of this method, a timer_id value, + * uniquely identifies the event_handler in the ACE_Reactor's + * internal list of timers. + * This timer_id value can be used to cancel the timer + * with the cancel_timer() call. + * + * @see cancel_timer() + * @see reset_timer_interval() + * + * @param event_handler event handler to schedule on reactor + * @param arg argument passed to the handle_timeout() method of + * event_handler. + * @param delay time interval after which the timer will expire. + * @param interval time interval for which the timer will be + * automatically rescheduled. + * @return -1 on failure, a timer_id value on success + */ + virtual long schedule_timer (ACE_Event_Handler *event_handler, + const void *arg, + const ACE_Time_Value &delay, + const ACE_Time_Value &interval = ACE_Time_Value::zero); + + /** + * Resets the interval of the timer represented by @a timer_id to + * @a interval, which is specified in relative time to the current + * . If @a interval is equal to + * ACE_Time_Value::zero, the timer will become a non-rescheduling + * timer. Returns 0 if successful, -1 if not. + */ + virtual int reset_timer_interval (long timer_id, + const ACE_Time_Value &interval); + + /// Cancel all Event_Handlers that match the address of + /// @a event_handler. Returns number of handlers cancelled. + virtual int cancel_timer (ACE_Event_Handler *event_handler, + int dont_call_handle_close = 1); + + /** + * Cancel the single event handler that matches the @a timer_id value + * (which was returned from the schedule method). If @a arg is + * non-NULL then it will be set to point to the ``magic cookie'' + * argument passed in when the event handler was registered. This + * makes it possible to free up the memory and avoid memory leaks. + * Returns 1 if cancellation succeeded and 0 if the @a timer_id + * wasn't found. + */ + virtual int cancel_timer (long timer_id, + const void **arg = 0, + int dont_call_handle_close = 1); + + // = High-level event handler scheduling operations + + /// Add @a masks_to_be_added to the @a event_handler's entry. + /// @a event_handler must already have been registered. + virtual int schedule_wakeup (ACE_Event_Handler *event_handler, + ACE_Reactor_Mask masks_to_be_added); + + /// Add @a masks_to_be_added to the @a handle's entry. + /// associated with @a handle must already have been registered. + virtual int schedule_wakeup (ACE_HANDLE handle, + ACE_Reactor_Mask masks_to_be_added); + + /// Clear @a masks_to_be_cleared from the @a event_handler's entry. + virtual int cancel_wakeup (ACE_Event_Handler *event_handler, + ACE_Reactor_Mask masks_to_be_cleared); + + /// Clear @a masks_to_be_cleared from the @a handle's entry. + virtual int cancel_wakeup (ACE_HANDLE handle, + ACE_Reactor_Mask masks_to_be_cleared); + + // = Notification methods. + + /** + * Notify @a event_handler of @a mask event. The ACE_Time_Value + * indicates how long to blocking trying to notify. If @a timeout == + * 0, the caller will block until action is possible, else will wait + * until the relative time specified in @a timeout elapses). + */ + virtual int notify (ACE_Event_Handler *event_handler = 0, + ACE_Reactor_Mask mask = ACE_Event_Handler::EXCEPT_MASK, + ACE_Time_Value * = 0); + + /** + * Set the maximum number of times that ACE_Reactor_Impl will + * iterate and dispatch the that are passed in + * via the notify queue before breaking out of its + * loop. By default, this is set to + * -1, which means "iterate until the queue is empty." Setting this + * to a value like "1 or 2" will increase "fairness" (and thus + * prevent starvation) at the expense of slightly higher dispatching + * overhead. + */ + virtual void max_notify_iterations (int); + + /** + * Get the maximum number of times that the ACE_Reactor_Impl will + * iterate and dispatch the that are passed in + * via the notify queue before breaking out of its + * loop. + */ + virtual int max_notify_iterations (void); + + /** + * Purge any notifications pending in this reactor for the specified + * ACE_Event_Handler object. Returns the number of notifications + * purged. Returns -1 on error. + */ + virtual int purge_pending_notifications (ACE_Event_Handler * = 0, + ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK); + + /** + * Return the Event_Handler associated with @a handle. Return 0 if + * @a handle is not registered. + */ + virtual ACE_Event_Handler *find_handler (ACE_HANDLE handle); + + /** + * Check to see if @a handle is associated with a valid Event_Handler + * bound to @a mask. Return the @a event_handler associated with this + * @c handler if @a event_handler != 0. + */ + virtual int handler (ACE_HANDLE handle, + ACE_Reactor_Mask mask, + ACE_Event_Handler **event_handler = 0); + + /** + * Check to see if @a signum is associated with a valid Event_Handler + * bound to a signal. Return the @a event_handler associated with + * this @c handler if @a event_handler != 0. + */ + virtual int handler (int signum, + ACE_Event_Handler ** = 0); + + /// Returns true if Reactor has been successfully initialized, else + /// false. + virtual bool initialized (void); + + /// Returns the current size of the Reactor's internal descriptor + /// table. + virtual size_t size (void) const; + + /// Returns a reference to the Reactor's internal lock. + virtual ACE_Lock &lock (void); + + /// Wake up all threads waiting in the event loop. + virtual void wakeup_all_threads (void); + + /// Transfers ownership of Reactor_Impl to the new_owner. + /** + * @note There is no need to set the owner of the event loop for the + * ACE_Dev_Poll_Reactor. Multiple threads may invoke the + * event loop simulataneously. As such, this method is a + * no-op. + */ + virtual int owner (ACE_thread_t new_owner, ACE_thread_t *old_owner = 0); + + /// Return the ID of the "owner" thread. + /** + * @note There is no need to set the owner of the event loop for the + * ACE_Dev_Poll_Reactor. Multiple threads may invoke the + * event loop simulataneously. As such, this method is a + * no-op. + */ + virtual int owner (ACE_thread_t *owner); + + /// Get the existing restart value. + virtual int restart (void); + + /// Set a new value for restart and return the original value. + /** + * @param r If zero, then the event loop will not be automatically + * restarted if the underlying poll is interrupted via the + * INTR (interrupt) signal. + * + * @return Returns the previous "restart" value. + */ + virtual int restart (int r); + + /// Set position of the owner thread. + /** + * @note This is currently a no-op. + */ + virtual void requeue_position (int); + + /// Get position of the owner thread. + /** + * @note This is currently a no-op. + */ + virtual int requeue_position (void); + + /** + * @name Low-level wait_set mask manipulation methods + * + * Low-level methods to manipulate the event/reactor mask associated + * with a handle and event handler when polling for events. + * @par + * The "interest set," i.e. the wait set, can be directly + * manipulated with these methods. + */ + //@{ + + /// GET/SET/ADD/CLR the dispatch mask "bit" bound with the + /// event_handler and mask. + /** + * @return Old mask on success, -1 on error. + */ + virtual int mask_ops (ACE_Event_Handler *event_handler, + ACE_Reactor_Mask mask, + int ops); + + /// GET/SET/ADD/CLR the dispatch MASK "bit" bound with the handle + /// and mask. + /** + * @return Old mask on success, -1 on error. + */ + virtual int mask_ops (ACE_HANDLE handle, + ACE_Reactor_Mask mask, + int ops); + + //@} + + /** + * @name Low-level ready_set mask manipulation methods + * + * These methods are unimplemented. + */ + //@{ + + /// GET/SET/ADD/CLR the ready "bit" bound with the event_handler + /// and mask. + virtual int ready_ops (ACE_Event_Handler *event_handler, + ACE_Reactor_Mask mask, + int ops); + + /// GET/SET/ADD/CLR the ready "bit" bound with the handle and mask. + virtual int ready_ops (ACE_HANDLE handle, + ACE_Reactor_Mask, + int ops); + + //@} + + /// Dump the state of an object. + virtual void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + + class Token_Guard; + + /// Non-locking version of wait_pending(). + /** + * Returns non-zero if there are I/O events "ready" for dispatching, + * but does not actually dispatch the event handlers. By default, + * don't block while checking this, i.e., "poll". + * + * @note It is only possible to achieve millisecond timeout + * resolutions with the ACE_Dev_Poll_Reactor. + */ + int work_pending_i (ACE_Time_Value *max_wait_time); + + /// Poll for events and return the number of event handlers that + /// were dispatched. + /** + * This is a helper method called by all handle_events() methods. + */ + int handle_events_i (ACE_Time_Value *max_wait_time, Token_Guard &guard); + + /// Perform the upcall with the given event handler method. + int upcall (ACE_Event_Handler *event_handler, + int (ACE_Event_Handler::*callback)(ACE_HANDLE), + ACE_HANDLE handle); + + /** + * Dispatch ACE_Event_Handlers for time events, I/O events, and + * signal events. Returns the total number of ACE_Event_Handlers + * that were dispatched or -1 if something goes wrong. + */ + int dispatch (Token_Guard &guard); + + /// Dispatch a single timer, if ready. + /// Returns: 0 if no timers ready (token still held), + /// 1 if a timer was expired (token released), + /// -1 on error (token still held). + int dispatch_timer_handler (Token_Guard &guard); + + /// Dispatch an IO event to the corresponding event handler. Returns + /// Returns: 0 if no events ready (token still held), + /// 1 if an event was expired (token released), + /// -1 on error (token still held). + int dispatch_io_event (Token_Guard &guard); + + /// Register the given event handler with the reactor. + int register_handler_i (ACE_HANDLE handle, + ACE_Event_Handler *eh, + ACE_Reactor_Mask mask); + + /// Remove the event handler associated with the given handle and + /// event mask from the "interest set." + int remove_handler_i (ACE_HANDLE handle, ACE_Reactor_Mask mask); + + /// Temporarily remove the given handle from the "interest set." + int suspend_handler_i (ACE_HANDLE handle); + + /// Place the given handle that was temporarily removed from the + /// "interest set," i.e that was suspended, back in to the interest + /// set. The given handle will once again be polled for events. + int resume_handler_i (ACE_HANDLE handle); + + /// GET/SET/ADD/CLR the dispatch MASK "bit" bound with the handle + /// and mask. This internal helper method acquires no lock. + /** + * @return Old mask on success, -1 on error. + */ + int mask_ops_i (ACE_HANDLE handle, + ACE_Reactor_Mask mask, + int ops); + + /// Convert a reactor mask to its corresponding poll() event mask. + short reactor_mask_to_poll_event (ACE_Reactor_Mask mask); + +protected: + + /// Has the reactor been initialized. + bool initialized_; + + /// The file descriptor associated with the open `/dev/poll' or + /// `/dev/epoll' device. + /** + * All interactions with the `/dev/poll' or `/dev/epoll' device are + * done through this file descriptor. + */ + ACE_HANDLE poll_fd_; + + /// The maximum number of file descriptors over which demultiplexing + /// will occur. + size_t size_; + + /// Track HANDLES we are interested in for various events that must + /// be dispatched *without* polling. + /// ACE_Dev_Poll_Ready_Set ready_set_; + +#if defined (ACE_HAS_EVENT_POLL) + /// Table of event structures to be filled by epoll_wait: + struct epoll_event *events_; + + /// Pointer to the next epoll_event array element that contains the next + /// event to be dispatched. + struct epoll_event *start_pevents_; + + /// The last element in the event array plus one. + /** + * The loop that dispatches IO events stops when this->start_pevents_ == + * this->end_pevents_. + */ + struct epoll_event *end_pevents_; + +#else + /// The pollfd array that `/dev/poll' will feed its results to. + struct pollfd *dp_fds_; + + + /// Pointer to the next pollfd array element that contains the next + /// event to be dispatched. + struct pollfd *start_pfds_; + + /// The last element in the pollfd array plus one. + /** + * The loop that dispatches IO events stops when this->start_pfds == + * this->end_pfds_. + */ + struct pollfd *end_pfds_; +#endif /* ACE_HAS_EVENT_POLL */ + + /// This flag is used to keep track of whether we are actively handling + /// events or not. + sig_atomic_t deactivated_; + + /// Lock used for synchronization of reactor state. + ACE_Dev_Poll_Reactor_Token token_; + + /// Adapter used to return internal lock to outside world. + ACE_Lock_Adapter lock_adapter_; + + /// The repository that contains all registered event handlers. + ACE_Dev_Poll_Reactor_Handler_Repository handler_rep_; + + /// Defined as a pointer to allow overriding by derived classes... + ACE_Timer_Queue *timer_queue_; + + /// Keeps track of whether we should delete the timer queue (if we + /// didn't create it, then we don't delete it). + bool delete_timer_queue_; + + /// Handle signals without requiring global/static variables. + ACE_Sig_Handler *signal_handler_; + + /// Keeps track of whether we should delete the signal handler (if we + /// didn't create it, then we don't delete it). + bool delete_signal_handler_; + + /// Callback object that unblocks the if it's + /// sleeping. + ACE_Reactor_Notify *notify_handler_; + + /// Keeps track of whether we need to delete the notify handler (if + /// we didn't create it, then we don't delete it). + bool delete_notify_handler_; + + /// Flag that determines if signals are masked during event + /// dispatching. + /** + * If 0 then the Reactor will not mask the signals during the event + * dispatching. This is useful for applications that do not + * register any signal handlers and want to reduce the overhead + * introduce by the kernel level locks required to change the mask. + */ + int mask_signals_; + + /// Restart the handle_events event loop method automatically when + /// polling function in use (ioctl() in this case) is interrupted + /// via an EINTR signal. + int restart_; + +protected: + + /** + * @class Token_Guard + * + * @brief A helper class that helps grabbing, releasing and waiting + * on tokens for a thread that needs access to the reactor's token. + */ + class ACE_Export Token_Guard + { + public: + + /// Constructor that will grab the token for us + Token_Guard (ACE_Dev_Poll_Reactor_Token &token); + + /// Destructor. This will release the token if it hasn't been + /// released till this point + ~Token_Guard (void); + + /// Release the token .. + void release_token (void); + + /// Returns whether the thread that created this object owns the + /// token or not. + int is_owner (void); + + /// A helper method that acquires the token 1) at a low priority, and + /// 2) wait quietly for the token, not waking another thread. This + /// is appropriate for cases where a thread wants to wait for and + /// dispatch an event, not causing an existing waiter to relinquish the + /// token, and also queueing up behind other threads waiting to modify + /// event records. + int acquire_quietly (ACE_Time_Value *max_wait = 0); + + /// A helper method that acquires the token at a high priority, and + /// does wake the current token holder. + int acquire (ACE_Time_Value *max_wait = 0); + + private: + + Token_Guard (void); + + private: + + /// The Reactor token. + ACE_Dev_Poll_Reactor_Token &token_; + + /// Flag that indicate whether the thread that created this object + /// owns the token or not. A value of 0 indicates that this class + /// hasn't got the token (and hence the thread) and a value of 1 + /// vice-versa. + int owner_; + + }; + +}; + + +/** + * @class ACE_Dev_Poll_Handler_Guard + * + * @brief Class used to make event handler reference count + * manipulation exception-safe. + * + * This class makes the reference count manipulation that occurs + * during an upcall exception-safe. Prior to dispatching the event + * handler, the reference count is increased. Once the upcall for the + * given event handler is complete, its reference count will be decreased. + */ +class ACE_Dev_Poll_Handler_Guard +{ +public: + + /// Constructor + /** + * The constructor checks to see if @a eh is a reference-counted handler and + * remember that for later. If @a eh is reference counted, its reference + * count is incremented unless @a do_incr is false. + * @a do_incr should be false if the reference count was incremented + * independently of this guard, for example, on a notify handler since + * the reference count is incremented when the notify is queued. + */ + ACE_Dev_Poll_Handler_Guard (ACE_Event_Handler *eh, bool do_incr = true); + + /// Destructor + /** + * The destructor decrements the reference count on the event + * handler corresponding to the given handle. + */ + ~ACE_Dev_Poll_Handler_Guard (void); + + /// Release the event handler from this guard; when the destructor is + /// called, the handler's reference count will not be decremented. + void release (void); + +private: + + /// The event handler being managed. + ACE_Event_Handler *eh_; + + /// true if eh_ is a reference-counted handler. + bool refcounted_; + +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +# include "ace/Dev_Poll_Reactor.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* ACE_HAS_EVENT_POLL || ACE_HAS_DEV_POLL */ + +#include /**/ "ace/post.h" + +#endif /* ACE_DEV_POLL_REACTOR_H */ diff --git a/ACE/ace/Dev_Poll_Reactor.inl b/ACE/ace/Dev_Poll_Reactor.inl new file mode 100644 index 00000000000..b7034e07333 --- /dev/null +++ b/ACE/ace/Dev_Poll_Reactor.inl @@ -0,0 +1,228 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/Log_Msg.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_Dev_Poll_Event_Tuple::ACE_Dev_Poll_Event_Tuple (void) + : event_handler (0), + mask (ACE_Event_Handler::NULL_MASK), + suspended (0) +{ +} + +// --------------------------------------------------------------------- + +#if 0 +ACE_INLINE +ACE_Dev_Poll_Ready_Set::ACE_Dev_Poll_Ready_Set (void) + : pfds (0), + nfds (0) +{ +} +#endif /* 0 */ + +// --------------------------------------------------------------------- + +ACE_INLINE void +ACE_Dev_Poll_Reactor_Handler_Repository::mask (ACE_HANDLE handle, + ACE_Reactor_Mask mask) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::mask"); + + // Only bother to search for the handle if it's in range. + if (this->handle_in_range (handle)) + this->handlers_[handle].mask = mask; +} + +ACE_INLINE ACE_Reactor_Mask +ACE_Dev_Poll_Reactor_Handler_Repository::mask (ACE_HANDLE handle) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::mask"); + + ACE_Reactor_Mask mask = ACE_Event_Handler::NULL_MASK; + + // Only bother to search for the handle if it's in range. + if (this->handle_in_range (handle)) + mask = this->handlers_[handle].mask; + + if (mask == ACE_Event_Handler::NULL_MASK) + errno = ENOENT; + + return mask; +} + +ACE_INLINE void +ACE_Dev_Poll_Reactor_Handler_Repository::suspend (ACE_HANDLE handle) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::suspend"); + + // Only bother to search for the handle if it's in range. + if (this->handle_in_range (handle)) + this->handlers_[handle].suspended = 1; +} + +ACE_INLINE void +ACE_Dev_Poll_Reactor_Handler_Repository::resume (ACE_HANDLE handle) +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::resume"); + + // Only bother to search for the handle if it's in range. + if (this->handle_in_range (handle)) + this->handlers_[handle].suspended = 0; +} + +ACE_INLINE int +ACE_Dev_Poll_Reactor_Handler_Repository::suspended (ACE_HANDLE handle) const +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::suspended"); + + if (this->handle_in_range (handle)) + return this->handlers_[handle].suspended; + + return -1; +} + +ACE_INLINE size_t +ACE_Dev_Poll_Reactor_Handler_Repository::size (void) const +{ + ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::size"); + + return this->max_size_; +} + +// ----------------------------------------------------------------- + +ACE_INLINE +ACE_Dev_Poll_Handler_Guard::ACE_Dev_Poll_Handler_Guard + (ACE_Event_Handler *eh, + bool do_incr) + : eh_ (eh), + refcounted_ (false) +{ + if (eh == 0) + return; + + this->refcounted_ = + eh->reference_counting_policy ().value () == + ACE_Event_Handler::Reference_Counting_Policy::ENABLED; + + if (do_incr && this->refcounted_) + eh->add_reference (); + + /** + * The below comments were here when I replaced the old refcount + * scheme was replaced. They may still need addressing. -Steve Huston + */ + + /** + * @todo Suspend the handler so that other threads will not cause + * an event that is already in an upcall from being dispatched + * again. + * + * @note The naive approach would be to simply call + * suspend_handler_i() on the reactor. However, that would + * cause a system call (write()) to occur. Obviously this + * can potentially have an adverse affect on performance. + * Ideally, the handler would only be marked as "suspended" in + * the handler repository. If an event arrives for a + * suspended handler that event can be "queued" in a + * "handle readiness queue." "Queued" is quoted since a real + * queue need not be used since duplicate events can be + * coalesced, thus avoiding unbounded queue growth. Event + * coalescing is already done by Linux's event poll driver + * (/dev/epoll) so Solaris' poll driver (/dev/poll) is the + * main concern here. The largest the queue can be is the + * same size as the number of handlers stored in the handler + * repository. + */ +} + +ACE_INLINE +ACE_Dev_Poll_Handler_Guard::~ACE_Dev_Poll_Handler_Guard (void) +{ + if (this->refcounted_ && this->eh_ != 0) + this->eh_->remove_reference (); + + /** + * The below comments were here when I replaced the old refcount + * scheme was replaced. They may still need addressing. -Steve Huston + */ + /** + * @todo Resume the handler so that other threads will be allowed to + * dispatch the handler. + */ +} + +ACE_INLINE void +ACE_Dev_Poll_Handler_Guard::release (void) +{ + this->eh_ = 0; +} + +// --------------------------------------------------------------------- + +ACE_INLINE int +ACE_Dev_Poll_Reactor::upcall (ACE_Event_Handler *event_handler, + int (ACE_Event_Handler::*callback)(ACE_HANDLE), + ACE_HANDLE handle) +{ + // If the handler returns positive value (requesting a reactor + // callback) just call back as many times as the handler requests + // it. Other threads are off handling other things. + int status = 0; + + do + { + status = (event_handler->*callback) (handle); + } + while (status > 0); + + return status; +} + + +/************************************************************************/ +// Methods for ACE_Dev_Poll_Reactor::Token_Guard +/************************************************************************/ + +ACE_INLINE +ACE_Dev_Poll_Reactor::Token_Guard::Token_Guard (ACE_Dev_Poll_Reactor_Token &token) + + : token_ (token), + owner_ (0) +{ +} + +ACE_INLINE +ACE_Dev_Poll_Reactor::Token_Guard::~Token_Guard (void) +{ + if (this->owner_ == 1) + { + ACE_MT (this->token_.release ()); + this->owner_ = 0; + } +} + +ACE_INLINE void +ACE_Dev_Poll_Reactor::Token_Guard::release_token (void) +{ + if (this->owner_) + { + ACE_MT (this->token_.release ()); + + // We are not the owner anymore.. + this->owner_ = 0; + } +} + +ACE_INLINE int +ACE_Dev_Poll_Reactor::Token_Guard::is_owner (void) +{ + return this->owner_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Dirent.cpp b/ACE/ace/Dirent.cpp new file mode 100644 index 00000000000..50aab1ac5f3 --- /dev/null +++ b/ACE/ace/Dirent.cpp @@ -0,0 +1,7 @@ +// $Id$ + +#include "ace/Dirent.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Dirent.inl" +#endif /* __ACE_INLINE__ */ diff --git a/ACE/ace/Dirent.h b/ACE/ace/Dirent.h new file mode 100644 index 00000000000..823b28d747c --- /dev/null +++ b/ACE/ace/Dirent.h @@ -0,0 +1,122 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Dirent.h + * + * $Id$ + * + * Define a portable C++ interface to ACE_OS_Dirent directory-entry + * manipulation. + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_DIRENT_H +#define ACE_DIRENT_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/OS_NS_dirent.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Dirent + * + * @brief Define a portable C++ directory-entry iterator based on the POSIX API. + */ +class ACE_Export ACE_Dirent +{ +public: + // = Initialization and termination methods. + /// Default constructor. + ACE_Dirent (void); + + /// Constructor calls + explicit ACE_Dirent (const ACE_TCHAR *dirname); + + /// Opens the directory named by filename and associates a directory + /// stream with it. + int open (const ACE_TCHAR *filename); + + /// Destructor calls . + ~ACE_Dirent (void); + + /// Closes the directory stream and frees the structure. + void close (void); + + // = Iterator methods. + /** + * Returns a pointer to a structure representing the directory entry + * at the current position in the directory stream to which dirp + * refers, and positions the directory stream at the next entry, + * except on read-only filesystems. It returns a NULL pointer upon + * reaching the end of the directory stream, or upon detecting an + * invalid location in the directory. shall not return + * directory entries containing empty names. It is unspecified + * whether entries are returned for dot or dot-dot. The pointer + * returned by points to data that may be overwritten by + * another call to on the same directory stream. This + * data shall not be overwritten by another call to on a + * different directory stream. may buffer several + * directory entries per actual read operation; marks for + * update the st_atime field of the directory each time the + * directory is actually read. + */ + ACE_DIRENT *read (void); + + /** + * Has the equivalent functionality as except that an + * @a entry and @a result buffer must be supplied by the caller to + * store the result. + */ + int read (struct ACE_DIRENT *entry, + struct ACE_DIRENT **result); + + // = Manipulators. + /// Returns the current location associated with the directory + /// stream. + long tell (void); + + /** + * Sets the position of the next operation on the + * directory stream. The new position reverts to the position + * associated with the directory stream at the time the + * operation that provides loc was performed. Values returned by + * are good only for the lifetime of the pointer from + * which they are derived. If the directory is closed and then + * reopened, the value may be invalidated due to + * undetected directory compaction. It is safe to use a previous + * value immediately after a call to and before + * any calls to readdir. + */ + void seek (long loc); + + /** + * Resets the position of the directory stream to the beginning of + * the directory. It also causes the directory stream to refer to + * the current state of the corresponding directory, as a call to + * would. + */ + void rewind (void); + +private: + /// Pointer to the directory stream. + ACE_DIR *dirp_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Dirent.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_DIRENT_H */ diff --git a/ACE/ace/Dirent.inl b/ACE/ace/Dirent.inl new file mode 100644 index 00000000000..5f6af5a3218 --- /dev/null +++ b/ACE/ace/Dirent.inl @@ -0,0 +1,99 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/Log_Msg.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE int +ACE_Dirent::open (const ACE_TCHAR *dirname) +{ + // If the directory stream is already open, close it to prevent + // possible resource leaks. + + if (this->dirp_ != 0) + { + ACE_OS::closedir (this->dirp_); + this->dirp_ = 0; + } + + this->dirp_ = ACE_OS::opendir (dirname); + + if (this->dirp_ == 0) + return -1; + else + return 0; +} + +ACE_INLINE +ACE_Dirent::ACE_Dirent (void) + : dirp_ (0) +{ +} + +ACE_INLINE +ACE_Dirent::ACE_Dirent (const ACE_TCHAR *dirname) + : dirp_ (0) +{ + if (this->open (dirname) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Dirent::ACE_Dirent"))); +} + +ACE_INLINE +ACE_Dirent::~ACE_Dirent (void) +{ + if (this->dirp_ != 0) + ACE_OS::closedir (this->dirp_); +} + +ACE_INLINE ACE_DIRENT * +ACE_Dirent::read (void) +{ + return this->dirp_ ? ACE_OS::readdir (this->dirp_) : 0; +} + +ACE_INLINE int +ACE_Dirent::read (struct ACE_DIRENT *entry, + struct ACE_DIRENT **result) +{ + return this->dirp_ + ? ACE_OS::readdir_r (this->dirp_, entry, result) + : 0; +} + +ACE_INLINE void +ACE_Dirent::close (void) +{ + if (this->dirp_ != 0) + { + ACE_OS::closedir (this->dirp_); + + // Prevent double closure + this->dirp_ = 0; + } +} + +ACE_INLINE void +ACE_Dirent::rewind (void) +{ + if (this->dirp_) + ACE_OS::rewinddir (this->dirp_); +} + +ACE_INLINE void +ACE_Dirent::seek (long loc) +{ + if (this->dirp_) + ACE_OS::seekdir (this->dirp_, loc); +} + +ACE_INLINE long +ACE_Dirent::tell (void) +{ + return this->dirp_ ? ACE_OS::telldir (this->dirp_) : 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Dirent_Selector.cpp b/ACE/ace/Dirent_Selector.cpp new file mode 100644 index 00000000000..288fc6deacf --- /dev/null +++ b/ACE/ace/Dirent_Selector.cpp @@ -0,0 +1,59 @@ +// $Id$ + +#include "ace/Dirent_Selector.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Dirent_Selector.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/OS_NS_dirent.h" +#include "ace/OS_NS_stdlib.h" + +ACE_RCSID (ace, + Dirent_Selector, + "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Construction/Destruction + +ACE_Dirent_Selector::ACE_Dirent_Selector (void) + : namelist_ (0), + n_ (0) +{ +} + +ACE_Dirent_Selector::~ACE_Dirent_Selector (void) +{ + // Free up any allocated resources. + this->close(); +} + +int +ACE_Dirent_Selector::open (const ACE_TCHAR *dir, + ACE_SCANDIR_SELECTOR sel, + ACE_SCANDIR_COMPARATOR cmp) +{ + n_ = ACE_OS::scandir (dir, &this->namelist_, sel, cmp); + return n_; +} + +int +ACE_Dirent_Selector::close (void) +{ + for (--n_; n_ >= 0; --n_) + { +#if defined (ACE_LACKS_STRUCT_DIR) + // Only the lacking-struct-dir emulation allocates this. Native + // scandir includes d_name in the dirent struct itself. + ACE_OS::free (this->namelist_[n_]->d_name); +#endif + ACE_OS::free (this->namelist_[n_]); + } + + ACE_OS::free (this->namelist_); + this->namelist_ = 0; + return 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Dirent_Selector.h b/ACE/ace/Dirent_Selector.h new file mode 100644 index 00000000000..72b1b176c03 --- /dev/null +++ b/ACE/ace/Dirent_Selector.h @@ -0,0 +1,75 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Dirent_Selector.h + * + * $Id$ + * + * Define a portable C++ interface to the method. + * + * @author Rich Newman + */ +//============================================================================= + +#ifndef ACE_DIRENT_SELECTOR_H +#define ACE_DIRENT_SELECTOR_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/OS_NS_dirent.h" /* Need ACE_SCANDIR_SELECTOR, COMPARATOR */ +#include "ace/os_include/os_dirent.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Dirent_Selector + * + * @brief Define a portable C++ directory-entry iterator based on the + * POSIX scandir API. + */ +class ACE_Export ACE_Dirent_Selector +{ +public: + /// Constructor + ACE_Dirent_Selector (void); + + /// Destructor. + virtual ~ACE_Dirent_Selector (void); + + /// Return the length of the list of matching directory entries. + int length (void) const; + + /// Return the entry at @a index. + ACE_DIRENT *operator[] (const int index) const; + + /// Free up resources. + int close (void); + + /// Open the directory @a dir and populate the current list of names with + /// directory entries that match the @a selector and @a comparator. + int open (const ACE_TCHAR *dir, + ACE_SCANDIR_SELECTOR selector = 0, + ACE_SCANDIR_COMPARATOR comparator = 0); + +protected: + /// Ptr to the namelist array. + ACE_DIRENT **namelist_; + + /// Number of entries in the array. + int n_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Dirent_Selector.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_DIRENT_SELECTOR_H */ diff --git a/ACE/ace/Dirent_Selector.inl b/ACE/ace/Dirent_Selector.inl new file mode 100644 index 00000000000..7c42f46b9be --- /dev/null +++ b/ACE/ace/Dirent_Selector.inl @@ -0,0 +1,19 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE int +ACE_Dirent_Selector::length (void) const +{ + return n_; +} + +ACE_INLINE ACE_DIRENT * +ACE_Dirent_Selector::operator[] (const int n) const +{ + return this->namelist_[n]; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Dump.cpp b/ACE/ace/Dump.cpp new file mode 100644 index 00000000000..b601496f3b6 --- /dev/null +++ b/ACE/ace/Dump.cpp @@ -0,0 +1,141 @@ +// $Id$ + +#include "ace/Dump.h" +#include "ace/Guard_T.h" +#include "ace/Thread_Mutex.h" +#include "ace/Object_Manager.h" +#include "ace/Log_Msg.h" + +ACE_RCSID(ace, Dump, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Implementations (very simple for now...) + +ACE_Dumpable::~ACE_Dumpable (void) +{ + ACE_TRACE ("ACE_Dumpable::~ACE_Dumpable"); +} + +ACE_Dumpable::ACE_Dumpable (const void *this_ptr) + : this_ (this_ptr) +{ + ACE_TRACE ("ACE_Dumpable::ACE_Dumpable"); +} + +ACE_Dumpable_Ptr::ACE_Dumpable_Ptr (const ACE_Dumpable *dumper) + : dumper_ (dumper) +{ + ACE_TRACE ("ACE_Dumpable_Ptr::ACE_Dumpable_Ptr"); +} + +const ACE_Dumpable * +ACE_Dumpable_Ptr::operator->() const +{ + ACE_TRACE ("ACE_Dumpable_Ptr::operator->"); + return this->dumper_; +} + +void +ACE_Dumpable_Ptr::operator= (const ACE_Dumpable *dumper) const +{ + ACE_TRACE ("ACE_Dumpable_Ptr::operator="); + if (this->dumper_ != dumper) + { + delete const_cast (this->dumper_); + (const_cast (this))->dumper_ = dumper; + } +} + +ACE_ODB::ACE_ODB (void) + // Let the Tuple default constructor initialize object_table_ + : current_size_ (0) +{ + ACE_TRACE ("ACE_ODB::ACE_ODB"); +} + +ACE_ODB * +ACE_ODB::instance (void) +{ + ACE_TRACE ("ACE_ODB::instance"); + + if (ACE_ODB::instance_ == 0) + { + ACE_MT (ACE_Thread_Mutex *lock = + ACE_Managed_Object::get_preallocated_object + (ACE_Object_Manager::ACE_DUMP_LOCK); + ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, *lock, 0)); + + if (ACE_ODB::instance_ == 0) + ACE_NEW_RETURN (ACE_ODB::instance_, + ACE_ODB, + 0); + } + + return ACE_ODB::instance_; +} + +void +ACE_ODB::dump_objects (void) +{ + ACE_TRACE ("ACE_ODB::dump_objects"); + for (int i = 0; i < this->current_size_; i++) + { + if (this->object_table_[i].this_ != 0) + // Dump the state of the object. + this->object_table_[i].dumper_->dump (); + } +} + +// This method registers a new . It detects +// duplicates and simply overwrites them. + +void +ACE_ODB::register_object (const ACE_Dumpable *dumper) +{ + ACE_TRACE ("ACE_ODB::register_object"); + int i; + int slot = 0; + + for (i = 0; i < this->current_size_; i++) + { + if (this->object_table_[i].this_ == 0) + slot = i; + else if (this->object_table_[i].this_ == dumper->this_) + { + slot = i; + break; + } + } + + if (i == this->current_size_) + { + slot = this->current_size_++; + ACE_ASSERT (this->current_size_ < ACE_ODB::MAX_TABLE_SIZE); + } + this->object_table_[slot].this_ = dumper->this_; + this->object_table_[slot].dumper_ = dumper; +} + +void +ACE_ODB::remove_object (const void *this_ptr) +{ + ACE_TRACE ("ACE_ODB::remove_object"); + int i; + + for (i = 0; i < this->current_size_; i++) + { + if (this->object_table_[i].this_ == this_ptr) + break; + } + + if (i < this->current_size_) + { + this->object_table_[i].this_ = 0; + this->object_table_[i].dumper_ = 0; + } +} + +ACE_ODB *ACE_ODB::instance_ = 0; + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Dump.h b/ACE/ace/Dump.h new file mode 100644 index 00000000000..97f0bac7966 --- /dev/null +++ b/ACE/ace/Dump.h @@ -0,0 +1,172 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Dump.h + * + * $Id$ + * + * + * A prototype mechanism that allow all ACE objects to be registered + * with a central in-memory "database" that can dump the state of all + * live ACE objects (e.g., from within a debugger). + * + * The macros which allow easy registration and removal of objects to be + * dumped (ACE_REGISTER_OBJECT and ACE_REMOVE_OBJECT) are turned into + * no-ops by compiling with the ACE_NDEBUG macro defined. This allows + * usage to be removed in "release mode" builds without changing code. + * + * There are several interesting aspects to this design: + * + * 1. It uses the External Polymorphism pattern to avoid having to + * derive all ACE classes from a common base class that has virtual + * methods (this is crucial to avoid unnecessary overhead). In + * addition, there is no additional space added to ACE objects + * (this is crucial to maintain binary layout compatibility). + * + * 2. This mechanism can be conditionally compiled in order to + * completely disable this feature entirely. Moreover, by + * using macros there are relatively few changes to ACE code. + * + * 3. This mechanism copes with single-inheritance hierarchies of + * dumpable classes. In such cases we typically want only one + * dump, corresponding to the most derived instance. Thanks to + * Christian Millour (chris@etca.fr) for illustrating how to do + * this. Note, however, that this scheme doesn't generalize to + * work with multiple-inheritance or virtual base classes. + * + * Future work includes: + * + * 1. Using a dynamic object table rather than a static table + * + * 2. Adding support to allow particular classes of objects to + * be selectively dumped. + * + * + * @author Doug Schmidt + */ +//============================================================================= + + +#ifndef ACE_DUMP_H +#define ACE_DUMP_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Dumpable + * + * @brief Base class that defines a uniform interface for all object + * dumping. + */ +class ACE_Export ACE_Dumpable +{ +public: + friend class ACE_ODB; + friend class ACE_Dumpable_Ptr; + + /// Constructor. + ACE_Dumpable (const void *); + + /// This pure virtual method must be filled in by a subclass. + virtual void dump (void) const = 0; + +protected: + virtual ~ACE_Dumpable (void); + +private: + /// Pointer to the object that is being stored. + const void *this_; +}; + +/** + * @class ACE_Dumpable_Ptr + * + * @brief A smart pointer stored in the in-memory object database + * ACE_ODB. The pointee (if any) is deleted when reassigned. + */ +class ACE_Export ACE_Dumpable_Ptr +{ +public: + ACE_Dumpable_Ptr (const ACE_Dumpable *dumper = 0); + const ACE_Dumpable *operator->() const; + void operator= (const ACE_Dumpable *dumper) const; + +private: + /// "Real" pointer to the underlying abstract base class + /// pointer that does the real work. + const ACE_Dumpable *dumper_; +}; + +/** + * @class ACE_ODB + * + * @brief This is the object database (ODB) that keeps track of all + * live ACE objects. + */ +class ACE_Export ACE_ODB +{ +public: + /// @todo This is clearly inadequate and should be dynamic... + enum {MAX_TABLE_SIZE = 100000}; + + /// Iterates through the entire set of registered objects and + /// dumps their state. + void dump_objects (void); + + /// Add the tuple to the list of registered ACE objects. + void register_object (const ACE_Dumpable *dumper); + + /// Use to locate and remove the associated from the + /// list of registered ACE objects. + void remove_object (const void *this_); + + /// Interface to the Singleton instance of the object database. + static ACE_ODB *instance (void); + +private: + ACE_ODB (void); // Ensure we have a Singleton... + + struct Tuple + { + /// Pointer to the object that is registered. + const void *this_; + + /// Smart pointer to the ACE_Dumpable object associated with this_. + /// This uses an ACE_Dumpable_Ptr, instead of a bare pointer, to + /// cope with hierarchies of dumpable classes. In such cases we + /// typically want only one dump, corresponding to the most derived + /// instance. To achieve this, the handle registered for the + /// subobject corresponding to the base class is destroyed (hence + /// on destruction of the subobject its handle won't exist anymore + /// and we'll have to check for that). + const ACE_Dumpable_Ptr dumper_; + + Tuple (void) : dumper_(0) {} + }; + + /// Singleton instance of this class. + static ACE_ODB *instance_; + + /// The current implementation is very simple-minded and will be + /// changed to be dynamic. + Tuple object_table_[ACE_ODB::MAX_TABLE_SIZE]; + + /// Current size of . + int current_size_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +// Include the templates classes at this point. +#include "ace/Dump_T.h" + +#include /**/ "ace/post.h" +#endif /* ACE_DUMP_H */ diff --git a/ACE/ace/Dump_T.cpp b/ACE/ace/Dump_T.cpp new file mode 100644 index 00000000000..3c789497eee --- /dev/null +++ b/ACE/ace/Dump_T.cpp @@ -0,0 +1,48 @@ +// Dump_T.cpp +// +// $Id$ + +#ifndef ACE_DUMP_T_CPP +#define ACE_DUMP_T_CPP + +#include "ace/Dump_T.h" +#include "ace/Global_Macros.h" +#include "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +ACE_Dumpable_Adapter::~ACE_Dumpable_Adapter (void) +{ + ACE_TRACE ("ACE_Dumpable_Adapter::~ACE_Dumpable_Adapter"); +} + +template +ACE_Dumpable_Adapter::ACE_Dumpable_Adapter (const Concrete *t) + : ACE_Dumpable ((const void *) t), this_ (t) +{ + ACE_TRACE ("ACE_Dumpable_Adapter::ACE_Dumpable_Adapter"); +} + +template Concrete * +ACE_Dumpable_Adapter::operator->() const +{ + return (Concrete *) this->this_; +} + +template void +ACE_Dumpable_Adapter::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Dumpable_Adapter::dump"); + this->this_->dump (); +#endif /* ACE_HAS_DUMP */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_DUMP_T_CPP */ diff --git a/ACE/ace/Dump_T.h b/ACE/ace/Dump_T.h new file mode 100644 index 00000000000..33249fb1fa9 --- /dev/null +++ b/ACE/ace/Dump_T.h @@ -0,0 +1,82 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Dump_T.h + * + * $Id$ + * + * @author Doug Schmidt + */ +//============================================================================= + + +#ifndef ACE_DUMP_T_H +#define ACE_DUMP_T_H +#include /**/ "ace/pre.h" + +#include "ace/Dump.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Dumpable_Adapter + * + * @brief This class inherits the interface of the abstract ACE_Dumpable + * class and is instantiated with the implementation of the + * concrete component class . + * + * This design is similar to the Adapter and Decorator patterns + * from the ``Gang of Four'' book. Note that + * need not inherit from a common class since ACE_Dumpable + * provides the uniform virtual interface! + */ +template +class ACE_Dumpable_Adapter : public ACE_Dumpable +{ +public: + // = Initialization and termination methods. + ACE_Dumpable_Adapter (const Concrete *t); + ~ACE_Dumpable_Adapter (void); + + /// Concrete dump method (simply delegates to the method of + /// ). + virtual void dump (void) const; + + /// Delegate to methods in the Concrete class. + Concrete *operator->() const; + +private: + /// Pointer to @c this of . + const Concrete *this_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +// Some useful macros for conditionally compiling this feature... +#if defined (ACE_NDEBUG) +#define ACE_REGISTER_OBJECT(CLASS) +#define ACE_REMOVE_OBJECT +#else +#define ACE_REGISTER_OBJECT(CLASS) \ + ACE_ODB::instance ()->register_object \ + (new ACE_Dumpable_Adapter (this)); +#define ACE_REMOVE_OBJECT \ + ACE_ODB::instance ()->remove_object \ + ((void *) this); +#endif /* ACE_NDEBUG */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Dump_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Dump_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" +#endif /* ACE_DUMP_T_H */ diff --git a/ACE/ace/Dynamic.cpp b/ACE/ace/Dynamic.cpp new file mode 100644 index 00000000000..adeae242579 --- /dev/null +++ b/ACE/ace/Dynamic.cpp @@ -0,0 +1,34 @@ +// $Id$ + +#include "ace/Dynamic.h" +#include "ace/Singleton.h" +#include "ace/TSS_T.h" +#include "ace/Synch_Traits.h" +#include "ace/Null_Mutex.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Dynamic.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, Dynamic, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Dynamic::ACE_Dynamic (void) + : is_dynamic_ (false) +{ + ACE_TRACE ("ACE_Dynamic::ACE_Dynamic"); +} + +/* static */ ACE_Dynamic * +ACE_Dynamic::instance (void) +{ + return ACE_TSS_Singleton::instance (); +} + +#if defined (ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION) +template ACE_TSS_Singleton * + ACE_TSS_Singleton::singleton_; +#endif /* ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION */ + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Dynamic.h b/ACE/ace/Dynamic.h new file mode 100644 index 00000000000..4d52b67673f --- /dev/null +++ b/ACE/ace/Dynamic.h @@ -0,0 +1,75 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file Dynamic.h + * + * $Id$ + * + * @author Doug Schmidt + * @author Irfan Pyarali. + */ +//========================================================================== + +#ifndef ACE_DYNAMIC_H +#define ACE_DYNAMIC_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Dynamic + * + * @brief Checks to see if an object was dynamically allocated. + * + * This class holds the pointer in a thread-safe manner between + * the call to operator new and the call to the constructor. + */ +class ACE_Export ACE_Dynamic +{ +public: + // = Initialization and termination method. + /// Constructor. + ACE_Dynamic (void); + + /// Destructor. + ~ACE_Dynamic (void); + + /** + * Sets a flag that indicates that the object was dynamically + * created. This method is usually called in operator new and then + * checked and reset in the constructor. + */ + void set (void); + + /// @c true if we were allocated dynamically, else @c false. + bool is_dynamic (void); + + /// Resets state flag. + void reset (void); + + static ACE_Dynamic *instance (void); + +private: + /** + * Flag that indicates that the object was dynamically created. This + * method is usually called in operator new and then checked and + * reset in the constructor. + */ + bool is_dynamic_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Dynamic.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_DYNAMIC_H */ diff --git a/ACE/ace/Dynamic.inl b/ACE/ace/Dynamic.inl new file mode 100644 index 00000000000..3f506bc51f4 --- /dev/null +++ b/ACE/ace/Dynamic.inl @@ -0,0 +1,34 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_Dynamic::~ACE_Dynamic (void) +{ + // ACE_TRACE ("ACE_Dynamic::~ACE_Dynamic"); +} + +ACE_INLINE void +ACE_Dynamic::set (void) +{ + // ACE_TRACE ("ACE_Dynamic::set"); + this->is_dynamic_ = true; +} + +ACE_INLINE bool +ACE_Dynamic::is_dynamic (void) +{ + // ACE_TRACE ("ACE_Dynamic::is_dynamic"); + return this->is_dynamic_; +} + +ACE_INLINE void +ACE_Dynamic::reset (void) +{ + // ACE_TRACE ("ACE_Dynamic::reset"); + this->is_dynamic_ = false; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Dynamic_Message_Strategy.cpp b/ACE/ace/Dynamic_Message_Strategy.cpp new file mode 100644 index 00000000000..060aef6f5b5 --- /dev/null +++ b/ACE/ace/Dynamic_Message_Strategy.cpp @@ -0,0 +1,205 @@ +#include "ace/Dynamic_Message_Strategy.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Dynamic_Message_Strategy.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/Guard_T.h" +#include "ace/Log_Msg.h" +#include "ace/Malloc_Base.h" +#include "ace/OS_NS_string.h" + +ACE_RCSID (ace, + Dynamic_Message_Strategy, + "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// ctor + +ACE_Dynamic_Message_Strategy::ACE_Dynamic_Message_Strategy (unsigned long static_bit_field_mask, + unsigned long static_bit_field_shift, + unsigned long dynamic_priority_max, + unsigned long dynamic_priority_offset) + : static_bit_field_mask_ (static_bit_field_mask), + static_bit_field_shift_ (static_bit_field_shift), + dynamic_priority_max_ (dynamic_priority_max), + dynamic_priority_offset_ (dynamic_priority_offset), + max_late_ (0, dynamic_priority_offset - 1), + min_pending_ (0, dynamic_priority_offset), + pending_shift_ (0, dynamic_priority_max) +{ +} + +// dtor + +ACE_Dynamic_Message_Strategy::~ACE_Dynamic_Message_Strategy (void) +{ +} + +ACE_Dynamic_Message_Strategy::Priority_Status +ACE_Dynamic_Message_Strategy::priority_status (ACE_Message_Block & mb, + const ACE_Time_Value & tv) +{ + // default the message to have pending priority status + Priority_Status status = ACE_Dynamic_Message_Strategy::PENDING; + + // start with the passed absolute time as the message's priority, then + // call the polymorphic hook method to (at least partially) convert + // the absolute time and message attributes into the message's priority + ACE_Time_Value priority (tv); + convert_priority (priority, mb); + + // if the priority is negative, the message is pending + if (priority < ACE_Time_Value::zero) + { + // priority for pending messages must be shifted + // upward above the late priority range + priority += pending_shift_; + if (priority < min_pending_) + priority = min_pending_; + } + // otherwise, if the priority is greater than the maximum late + // priority value that can be represented, it is beyond late + else if (priority > max_late_) + { + // all messages that are beyond late are assigned lowest priority (zero) + mb.msg_priority (0); + return ACE_Dynamic_Message_Strategy::BEYOND_LATE; + } + // otherwise, the message is late, but its priority is correct + else + status = ACE_Dynamic_Message_Strategy::LATE; + + // use (fast) bitwise operators to isolate and replace + // the dynamic portion of the message's priority + mb.msg_priority((mb.msg_priority() & static_bit_field_mask_) | + ((priority.usec () + + ACE_ONE_SECOND_IN_USECS * (suseconds_t)(priority.sec())) << + static_bit_field_shift_)); + + // returns the priority status of the message + return status; +} + + +// Dump the state of the strategy. + +void +ACE_Dynamic_Message_Strategy::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Dynamic_Message_Strategy::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("static_bit_field_mask_ = %u\n") + ACE_TEXT ("static_bit_field_shift_ = %u\n") + ACE_TEXT ("dynamic_priority_max_ = %u\n") + ACE_TEXT ("dynamic_priority_offset_ = %u\n") + ACE_TEXT ("max_late_ = [%d sec, %d usec]\n") + ACE_TEXT ("min_pending_ = [%d sec, %d usec]\n") + ACE_TEXT ("pending_shift_ = [%d sec, %d usec]\n"), + this->static_bit_field_mask_, + this->static_bit_field_shift_, + this->dynamic_priority_max_, + this->dynamic_priority_offset_, + this->max_late_.sec (), + this->max_late_.usec (), + this->min_pending_.sec (), + this->min_pending_.usec (), + this->pending_shift_.sec (), + this->pending_shift_.usec ())); + + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_Deadline_Message_Strategy::ACE_Deadline_Message_Strategy (unsigned long static_bit_field_mask, + unsigned long static_bit_field_shift, + unsigned long dynamic_priority_max, + unsigned long dynamic_priority_offset) + : ACE_Dynamic_Message_Strategy (static_bit_field_mask, + static_bit_field_shift, + dynamic_priority_max, + dynamic_priority_offset) +{ +} + +ACE_Deadline_Message_Strategy::~ACE_Deadline_Message_Strategy (void) +{ +} + +void +ACE_Deadline_Message_Strategy::convert_priority (ACE_Time_Value & priority, + const ACE_Message_Block & mb) +{ + // Convert absolute time passed in tv to negative time + // to deadline of mb with respect to that absolute time. + priority -= mb.msg_deadline_time (); +} + // dynamic priority conversion function based on time to deadline + +void +ACE_Deadline_Message_Strategy::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Deadline_Message_Strategy::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("ACE_Dynamic_Message_Strategy base class: \n"))); + this->ACE_Dynamic_Message_Strategy::dump (); + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nderived class: ACE_Deadline_Message_Strategy\n"))); + + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_Laxity_Message_Strategy::ACE_Laxity_Message_Strategy (unsigned long static_bit_field_mask, + unsigned long static_bit_field_shift, + unsigned long dynamic_priority_max, + unsigned long dynamic_priority_offset) + : ACE_Dynamic_Message_Strategy (static_bit_field_mask, + static_bit_field_shift, + dynamic_priority_max, + dynamic_priority_offset) +{ +} + +ACE_Laxity_Message_Strategy::~ACE_Laxity_Message_Strategy (void) +{ +} + +void +ACE_Laxity_Message_Strategy::convert_priority (ACE_Time_Value & priority, + const ACE_Message_Block & mb) +{ + // Convert absolute time passed in tv to negative + // laxity of mb with respect to that absolute time. + priority += mb.msg_execution_time (); + priority -= mb.msg_deadline_time (); +} + // dynamic priority conversion function based on laxity + +void +ACE_Laxity_Message_Strategy::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Laxity_Message_Strategy::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("ACE_Dynamic_Message_Strategy base class: \n"))); + this->ACE_Dynamic_Message_Strategy::dump (); + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nderived class: ACE_Laxity_Message_Strategy\n"))); + + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + // Dump the state of the strategy. + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Dynamic_Message_Strategy.h b/ACE/ace/Dynamic_Message_Strategy.h new file mode 100644 index 00000000000..66448a8247b --- /dev/null +++ b/ACE/ace/Dynamic_Message_Strategy.h @@ -0,0 +1,217 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file Dynamic_Message_Strategy.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//========================================================================== + +#ifndef ACE_DYNAMIC_MESSAGE_STRATEGY_H +#define ACE_DYNAMIC_MESSAGE_STRATEGY_H + +#include /**/ "ace/pre.h" + +#include "ace/config-lite.h" +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Message_Block.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Dynamic_Message_Strategy + * + * @brief An abstract base class which provides dynamic priority + * evaluation methods for use by the ACE_Dynamic_Message_Queue + * class or any other class which needs to manage the priorities + * of a collection of ACE_Message_Blocks dynamically. + * + * Methods for deadline and laxity based priority evaluation are + * provided. These methods assume a specific partitioning of + * the message priority number into a higher order dynamic bit + * field and a lower order static priority bit field. The + * default partitioning assumes an unsigned dynamic message + * priority field of 22 bits and an unsigned static message + * priority field of 10 bits. This corresponds to the initial + * values of the static class members. To provide a different + * partitioning, assign a different set of values to the static + * class memebers before using the static member functions. + */ +class ACE_Export ACE_Dynamic_Message_Strategy +{ +public: + + // = Message priority status + + // Values are defined as bit flags so that status combinations may + // be specified easily. + + enum Priority_Status + { + /// Message can still make its deadline + PENDING = 0x01, + /// Message cannot make its deadline + LATE = 0x02, + /// Message is so late its priority is undefined + BEYOND_LATE = 0x04, + /// Mask to match any priority status + ANY_STATUS = 0x07 + }; + + /// Constructor. + ACE_Dynamic_Message_Strategy (unsigned long static_bit_field_mask, + unsigned long static_bit_field_shift, + unsigned long dynamic_priority_max, + unsigned long dynamic_priority_offset); + + /// Virtual destructor. + virtual ~ACE_Dynamic_Message_Strategy (void); + + /// Updates the message's priority and returns its priority status. + Priority_Status priority_status (ACE_Message_Block &mb, + const ACE_Time_Value &tv); + + /// Get static bit field mask. + unsigned long static_bit_field_mask (void) const; + + /// Set static bit field mask. + void static_bit_field_mask (unsigned long); + + /// Get left shift value to make room for static bit field. + unsigned long static_bit_field_shift (void) const; + + /// Set left shift value to make room for static bit field. + void static_bit_field_shift (unsigned long); + + /// Get maximum supported priority value. + unsigned long dynamic_priority_max (void) const; + + /// Set maximum supported priority value. + void dynamic_priority_max (unsigned long); + + /// Get offset to boundary between signed range and unsigned range. + unsigned long dynamic_priority_offset (void) const; + + /// Set offset to boundary between signed range and unsigned range. + void dynamic_priority_offset (unsigned long); + + /// Dump the state of the strategy. + virtual void dump (void) const; + +protected: + /// Hook method for dynamic priority conversion. + virtual void convert_priority (ACE_Time_Value &priority, + const ACE_Message_Block &mb) = 0; + + /// This is a bit mask with all ones in the static bit field. + unsigned long static_bit_field_mask_; + + /** + * This is a left shift value to make room for static bit field: + * this value should be the logarithm base 2 of + * (static_bit_field_mask_ + 1). + */ + unsigned long static_bit_field_shift_; + + /// Maximum supported priority value. + unsigned long dynamic_priority_max_; + + /// Offset to boundary between signed range and unsigned range. + unsigned long dynamic_priority_offset_; + + /// Maximum late time value that can be represented. + ACE_Time_Value max_late_; + + /// Minimum pending time value that can be represented. + ACE_Time_Value min_pending_; + + /// Time value by which to shift pending priority. + ACE_Time_Value pending_shift_; +}; + +/** + * @class ACE_Deadline_Message_Strategy + * + * @brief Deadline based message priority strategy. + * + * Assigns dynamic message priority according to time to deadline. The + * message priority is divided into high and low order bit fields. The + * high order bit field is used for dynamic message priority, which is + * updated whenever the convert_priority() method is called. The + * low order bit field is used for static message priority and is left + * unchanged. The partitioning of the priority value into high and low + * order bit fields is done according to the arguments passed to the + * strategy object's constructor. + */ +class ACE_Export ACE_Deadline_Message_Strategy : public ACE_Dynamic_Message_Strategy +{ +public: + /// Ctor, with all arguments defaulted. + ACE_Deadline_Message_Strategy (unsigned long static_bit_field_mask = 0x3FFUL, // 2^(10) - 1 + unsigned long static_bit_field_shift = 10, // 10 low order bits + unsigned long dynamic_priority_max = 0x3FFFFFUL, // 2^(22)-1 + unsigned long dynamic_priority_offset = 0x200000UL); // 2^(22-1) + + /// Virtual dtor. + virtual ~ACE_Deadline_Message_Strategy (void); + + /// Dynamic priority conversion function based on time to deadline. + virtual void convert_priority (ACE_Time_Value &priority, + const ACE_Message_Block &mb); + + /// Dump the state of the strategy. + virtual void dump (void) const; +}; + +/** + * @class ACE_Laxity_Message_Strategy + * + * @brief Laxity based message priority strategy. + * + * Assigns dynamic message priority according to laxity (time to + * deadline minus worst case execution time). The message priority is + * divided into high and low order bit fields. The high order + * bit field is used for dynamic message priority, which is + * updated whenever the convert_priority() method is called. The + * low order bit field is used for static message priority and is left + * unchanged. The partitioning of the priority value into high and low + * order bit fields is done according to the arguments passed to the + * strategy object's constructor. + */ +class ACE_Export ACE_Laxity_Message_Strategy : public ACE_Dynamic_Message_Strategy +{ +public: + /// Ctor, with all arguments defaulted. + ACE_Laxity_Message_Strategy (unsigned long static_bit_field_mask = 0x3FFUL, // 2^(10) - 1 + unsigned long static_bit_field_shift = 10, // 10 low order bits + unsigned long dynamic_priority_max = 0x3FFFFFUL, // 2^(22)-1 + unsigned long dynamic_priority_offset = 0x200000UL); // 2^(22-1) + + /// virtual dtor. + virtual ~ACE_Laxity_Message_Strategy (void); + + /// Dynamic priority conversion function based on laxity. + virtual void convert_priority (ACE_Time_Value &priority, + const ACE_Message_Block &mb); + + /// Dump the state of the strategy. + virtual void dump (void) const; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Dynamic_Message_Strategy.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* ACE_DYNAMIC_MESSAGE_STRATEGY_H */ diff --git a/ACE/ace/Dynamic_Message_Strategy.inl b/ACE/ace/Dynamic_Message_Strategy.inl new file mode 100644 index 00000000000..b855acef597 --- /dev/null +++ b/ACE/ace/Dynamic_Message_Strategy.inl @@ -0,0 +1,75 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE unsigned long +ACE_Dynamic_Message_Strategy::static_bit_field_mask (void) const +{ + return static_bit_field_mask_; +} + // get static bit field mask + +ACE_INLINE void +ACE_Dynamic_Message_Strategy::static_bit_field_mask (unsigned long ul) +{ + static_bit_field_mask_ = ul; +} + // set static bit field mask + +ACE_INLINE unsigned long +ACE_Dynamic_Message_Strategy::static_bit_field_shift (void) const +{ + return static_bit_field_shift_; +} + // get left shift value to make room for static bit field + +ACE_INLINE void +ACE_Dynamic_Message_Strategy::static_bit_field_shift (unsigned long ul) +{ + static_bit_field_shift_ = ul; +} + // set left shift value to make room for static bit field + +ACE_INLINE unsigned long +ACE_Dynamic_Message_Strategy::dynamic_priority_max (void) const +{ + return dynamic_priority_max_; +} + // get maximum supported priority value + +ACE_INLINE void +ACE_Dynamic_Message_Strategy::dynamic_priority_max (unsigned long ul) +{ + // pending_shift_ depends on dynamic_priority_max_: for performance + // reasons, the value in pending_shift_ is (re)calculated only when + // dynamic_priority_max_ is initialized or changes, and is stored + // as a class member rather than being a derived value. + dynamic_priority_max_ = ul; + pending_shift_ = ACE_Time_Value (0, ul); +} + // set maximum supported priority value + +ACE_INLINE unsigned long +ACE_Dynamic_Message_Strategy::dynamic_priority_offset (void) const +{ + return dynamic_priority_offset_; +} + // get offset for boundary between signed range and unsigned range + +ACE_INLINE void +ACE_Dynamic_Message_Strategy::dynamic_priority_offset (unsigned long ul) +{ + // max_late_ and min_pending_ depend on dynamic_priority_offset_: + // for performance reasons, the values in max_late_ and min_pending_ + // are (re)calculated only when dynamic_priority_offset_ is + // initialized or changes, and are stored as a class member rather + // than being derived each time one of their values is needed. + dynamic_priority_offset_ = ul; + max_late_ = ACE_Time_Value (0, ul - 1); + min_pending_ = ACE_Time_Value (0, ul); +} + // set offset for boundary between signed range and unsigned range + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Dynamic_Service.cpp b/ACE/ace/Dynamic_Service.cpp new file mode 100644 index 00000000000..53d762dc364 --- /dev/null +++ b/ACE/ace/Dynamic_Service.cpp @@ -0,0 +1,63 @@ +// $Id$ + +#ifndef ACE_DYNAMIC_SERVICE_CPP +#define ACE_DYNAMIC_SERVICE_CPP + +#include "ace/Dynamic_Service.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Service_Object.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Dynamic_Service.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + + +template TYPE * +ACE_Dynamic_Service::instance (const ACE_TCHAR *name) +{ + ACE_Service_Object * svc_obj = + static_cast + (ACE_Dynamic_Service_Base::instance (name,false)); + return dynamic_cast (svc_obj); +} + +template TYPE * +ACE_Dynamic_Service::instance (const ACE_TCHAR *name, + bool no_global) +{ + ACE_Service_Object * svc_obj = + static_cast + (ACE_Dynamic_Service_Base::instance (name, no_global)); + return dynamic_cast (svc_obj); +} + +template TYPE * +ACE_Dynamic_Service::instance (const ACE_Service_Gestalt* conf, + const ACE_TCHAR *name) +{ + ACE_Service_Object * svc_obj = + static_cast + (ACE_Dynamic_Service_Base::instance (conf, name, false)); + return dynamic_cast (svc_obj); +} + +template TYPE * +ACE_Dynamic_Service::instance (const ACE_Service_Gestalt* conf, + const ACE_TCHAR *name, + bool no_global) +{ + ACE_Service_Object * svc_obj = + static_cast + (ACE_Dynamic_Service_Base::instance (conf, name, no_global)); + return dynamic_cast (svc_obj); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_DYNAMIC_SERVICE_CPP */ diff --git a/ACE/ace/Dynamic_Service.h b/ACE/ace/Dynamic_Service.h new file mode 100644 index 00000000000..ed7317ef562 --- /dev/null +++ b/ACE/ace/Dynamic_Service.h @@ -0,0 +1,89 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Dynamic_Service.h + * + * $Id$ + * + * @author Prashant Jain + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_DYNAMIC_SERVICE_H +#define ACE_DYNAMIC_SERVICE_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" +#include "ace/Global_Macros.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Dynamic_Service_Base.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_Service_Object; + +/** + * @class ACE_Dynamic_Service + * + * @brief Provides a general interface to retrieve arbitrary objects + * from the ACE service repository. + * + * Uses "name" for lookup in the ACE service repository. Obtains + * the object and returns it as the appropriate type. + */ +template +class ACE_Dynamic_Service : public ACE_Dynamic_Service_Base +{ +public: + /// Return instance using @a name to search the Service_Repository. + static TYPE* instance (const ACE_TCHAR *name); + static TYPE* instance (const ACE_TCHAR *name, bool no_global); + + static TYPE* instance (const ACE_Service_Gestalt* repo, + const ACE_TCHAR *name); + static TYPE* instance (const ACE_Service_Gestalt* repo, + const ACE_TCHAR *name, bool no_global); + +#if defined (ACE_USES_WCHAR) + + /// Return instance using @a name to search the Service_Repository. + static TYPE* instance (const ACE_ANTI_TCHAR *name); + + static TYPE* instance (const ACE_ANTI_TCHAR *name, bool no_global); + + static TYPE* instance (const ACE_Service_Gestalt* repo, + const ACE_ANTI_TCHAR *name); + static TYPE* instance (const ACE_Service_Gestalt* repo, + const ACE_ANTI_TCHAR *name, bool no_global); +#endif // ACE_USES_WCHAR + +private: + ACE_UNIMPLEMENTED_FUNC (ACE_Dynamic_Service ()) + ACE_UNIMPLEMENTED_FUNC (ACE_Dynamic_Service (const ACE_Dynamic_Service&)) + ACE_UNIMPLEMENTED_FUNC (ACE_Dynamic_Service& operator= (const ACE_Dynamic_Service&)) +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Dynamic_Service.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +# include "ace/Dynamic_Service.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +# pragma implementation ("Dynamic_Service.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" + +#endif /* ACE_DYNAMIC_SERVICE_H */ diff --git a/ACE/ace/Dynamic_Service.inl b/ACE/ace/Dynamic_Service.inl new file mode 100644 index 00000000000..48978c595ed --- /dev/null +++ b/ACE/ace/Dynamic_Service.inl @@ -0,0 +1,40 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_USES_WCHAR) + +template ACE_INLINE TYPE * +ACE_Dynamic_Service::instance (const ACE_ANTI_TCHAR *name) +{ + return instance (ACE_TEXT_CHAR_TO_TCHAR (name),false); +} + +template ACE_INLINE TYPE * +ACE_Dynamic_Service::instance (const ACE_ANTI_TCHAR *name, + bool no_global) +{ + return instance (ACE_TEXT_CHAR_TO_TCHAR (name),no_global); +} + +template ACE_INLINE TYPE * +ACE_Dynamic_Service::instance (const ACE_Service_Gestalt* repo, + const ACE_ANTI_TCHAR *name) +{ + return instance (repo, ACE_TEXT_CHAR_TO_TCHAR (name),false); +} + +template ACE_INLINE TYPE * +ACE_Dynamic_Service::instance (const ACE_Service_Gestalt* repo, + const ACE_ANTI_TCHAR *name, + bool no_global) +{ + return instance (repo, ACE_TEXT_CHAR_TO_TCHAR (name),no_global); +} + + +#endif // ACE_USES_WCHAR + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Dynamic_Service_Base.cpp b/ACE/ace/Dynamic_Service_Base.cpp new file mode 100644 index 00000000000..e93dde6e905 --- /dev/null +++ b/ACE/ace/Dynamic_Service_Base.cpp @@ -0,0 +1,101 @@ +#include "ace/Dynamic_Service_Base.h" +#include "ace/ACE.h" +#include "ace/Service_Config.h" +#include "ace/Service_Repository.h" +#include "ace/Service_Types.h" +#include "ace/Log_Msg.h" + + +ACE_RCSID (ace, + Dynamic_Service_Base, + "$Id$") + + ACE_BEGIN_VERSIONED_NAMESPACE_DECL + + +void +ACE_Dynamic_Service_Base::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Dynamic_Service_Base::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +// Get the instance using for the current global +// service configuration repository. + +void * +ACE_Dynamic_Service_Base::instance (const ACE_TCHAR *name, bool no_global) +{ + ACE_TRACE ("ACE_Dynamic_Service_Base::instance"); + return instance (ACE_Service_Config::current (), name, no_global); +} + +// Find a service registration + +const ACE_Service_Type * +ACE_Dynamic_Service_Base::find_i (const ACE_Service_Gestalt* &repo, + const ACE_TCHAR *name, + bool no_global) +{ + ACE_TRACE ("ACE_Dynamic_Service_Base::find_i"); + const ACE_Service_Type *svc_rec = 0; + + ACE_Service_Gestalt* global = ACE_Service_Config::global (); + + for ( ; (repo->find (name, &svc_rec) == -1) && !no_global; repo = global) + { + // Check the static repo, too if different + if (repo == global) + break; + } + + return svc_rec; +} + + +// Get the instance using for specific configuration repository. +void * +ACE_Dynamic_Service_Base::instance (const ACE_Service_Gestalt* repo, + const ACE_TCHAR *name, + bool no_global) +{ + ACE_TRACE ("ACE_Dynamic_Service_Base::instance"); + + void *obj = 0; + const ACE_Service_Type_Impl *type = 0; + + const ACE_Service_Gestalt* repo_found = repo; + const ACE_Service_Type *svc_rec = find_i (repo_found, name, no_global); + if (svc_rec != 0) + { + type = svc_rec->type (); + if (type != 0) + obj = type->object (); + } + + if (ACE::debug ()) + { + ACE_Guard log_guard (*ACE_Log_Msg::instance ()); + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("ACE (%P|%t) DSB::instance, repo=%@, name=%s") + ACE_TEXT (" type=%@ => %@"), + repo->repo_, name, type, obj)); + + if (repo->repo_ != repo_found->repo_) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT (" [in repo=%@]\n"), + repo_found->repo_)); + else + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); + } + + return obj; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Dynamic_Service_Base.h b/ACE/ace/Dynamic_Service_Base.h new file mode 100644 index 00000000000..7a039a1a6b2 --- /dev/null +++ b/ACE/ace/Dynamic_Service_Base.h @@ -0,0 +1,74 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Dynamic_Service_Base.h + * + * $Id$ + * + * @author Prashant Jain + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_DYNAMIC_SERVICE_BASE_H +#define ACE_DYNAMIC_SERVICE_BASE_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_Service_Gestalt; +class ACE_Service_Type; + +/** + * @class ACE_Dynamic_Service_Base + * + * @brief Base class for all ACE_Dynamic_Service instantiations. + * + * Factors out common code shared by all ACE_Dynamic_Service + * instantiations, this avoid code bloat. + */ +class ACE_Export ACE_Dynamic_Service_Base +{ + +public: + /// Dump the current static of the object + void dump (void) const; + +protected: + /// Perform the default repo search, but optionally skip searching the global + /// repo. + static void* instance (const ACE_TCHAR *name, bool no_global = false); + + static void* instance (const ACE_Service_Gestalt* repo, + const ACE_TCHAR *name, + bool no_global = false); + + /// No need to create, or assign instances of this class + ACE_Dynamic_Service_Base (void); + ~ACE_Dynamic_Service_Base (void); + const ACE_Dynamic_Service_Base& operator= (const ACE_Dynamic_Service_Base&); + +private: + /// Implement the service search policy, i.e. "look for the service first + /// locally and then globally" + static const ACE_Service_Type *find_i (const ACE_Service_Gestalt* &repo, + const ACE_TCHAR *name, + bool no_global); + + /// The dependency declaration class needs access to the service search + /// policy, implemented by find_i() + friend class ACE_Dynamic_Service_Dependency; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" +#endif /* ACE_DYNAMIC_SERVICE_BASE_H */ diff --git a/ACE/ace/Dynamic_Service_Dependency.cpp b/ACE/ace/Dynamic_Service_Dependency.cpp new file mode 100644 index 00000000000..f2a9b45d61c --- /dev/null +++ b/ACE/ace/Dynamic_Service_Dependency.cpp @@ -0,0 +1,51 @@ +#include "ace/ACE.h" +#include "ace/DLL_Manager.h" +#include "ace/Dynamic_Service_Dependency.h" +#include "ace/Service_Config.h" +#include "ace/Log_Msg.h" + +ACE_RCSID (ace, + Dynamic_Service_Dependency, + "$Id$") + + + ACE_BEGIN_VERSIONED_NAMESPACE_DECL + + +ACE_Dynamic_Service_Dependency::ACE_Dynamic_Service_Dependency (const ACE_TCHAR *principal) +{ + this->init (ACE_Service_Config::current (), principal); +} + +ACE_Dynamic_Service_Dependency::ACE_Dynamic_Service_Dependency (const ACE_Service_Gestalt *cfg, + const ACE_TCHAR *principal) +{ + this->init (cfg, principal); +} + + +ACE_Dynamic_Service_Dependency::~ACE_Dynamic_Service_Dependency (void) +{ + if (ACE::debug ()) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("(%P|%t) DSD, this=%@ - destroying\n"), + this)); +} + +void +ACE_Dynamic_Service_Dependency::init (const ACE_Service_Gestalt *cfg, + const ACE_TCHAR *principal) +{ + const ACE_Service_Type* st = + ACE_Dynamic_Service_Base::find_i (cfg, principal,false); + if (ACE::debug ()) + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("(%P|%t) DSD, this=%@ - creating dependency on "), this)); + st->dump (); + } + this->tracker_ = st->dll (); +} + + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Dynamic_Service_Dependency.h b/ACE/ace/Dynamic_Service_Dependency.h new file mode 100644 index 00000000000..3eb4e0df7c7 --- /dev/null +++ b/ACE/ace/Dynamic_Service_Dependency.h @@ -0,0 +1,70 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Dynamic_Service_Dependency.h + * + * $Id$ + * + * @author Iliyan Jeliazkov + */ +//============================================================================= + +#ifndef ACE_DYNAMIC_SERVICE_DEPENDENCY_H +#define ACE_DYNAMIC_SERVICE_DEPENDENCY_H + +#include /**/ "ace/pre.h" + + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Dynamic_Service_Base.h" +#include "ace/Service_Object.h" +#include "ace/DLL.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Dynamic_Service_Dependency + * + * @brief Provides a way to declare dependency on specific service, + * thus helping to avoid order of initialization issues with instances + * of an objects whose implementation code resides in dynamically loaded + * services. + * + * It is disastrous to have dynamically loadable services create and give away + * ownership of objects and then ending up being unloaded before all those + * instances have been deleted. Normally the code for such objects classes + * resides within the TEXT segment of the DLL, which implements the service. + * If a service gets removed, its DLL may be unmapped from memory and then + * any attempt to invoke a method on the said objects will cause SEGV. + * + * Such instances must contain a member of ACE_Dynamic_Service_Dependency + * initialized with the service they depend on. + * ACE_Dynamic_Service_Dependency's constructor and destructor are + * "magical" - they work by maintaining the underlying dynamic service's + * DLL reference count. + */ +class ACE_Export ACE_Dynamic_Service_Dependency +{ +public: + ACE_Dynamic_Service_Dependency (const ACE_Service_Gestalt *cfg, + const ACE_TCHAR *principal); + ACE_Dynamic_Service_Dependency (const ACE_TCHAR *principal); + ~ACE_Dynamic_Service_Dependency (void); + +private: + void init (const ACE_Service_Gestalt *cfg, const ACE_TCHAR *principal); + +private: + ACE_DLL tracker_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + + +#include /**/ "ace/post.h" + +#endif /* ACE_DYNAMIC_SERVICE_DEPENDENCY_H */ diff --git a/ACE/ace/Encoding_Converter.cpp b/ACE/ace/Encoding_Converter.cpp new file mode 100644 index 00000000000..60e561ea534 --- /dev/null +++ b/ACE/ace/Encoding_Converter.cpp @@ -0,0 +1,12 @@ +// $Id$ +#include "ace/Encoding_Converter.h" + +#if defined (ACE_USES_WCHAR) +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Encoding_Converter::~ACE_Encoding_Converter (void) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL +#endif /* ACE_USES_WCHAR */ diff --git a/ACE/ace/Encoding_Converter.h b/ACE/ace/Encoding_Converter.h new file mode 100644 index 00000000000..7d5bd39b512 --- /dev/null +++ b/ACE/ace/Encoding_Converter.h @@ -0,0 +1,70 @@ +// -*- C++ -*- + +//========================================================================= +/** + * @file Encoding_Converter.h + * + * $Id$ + * + * This class is the base class for all encoding converters that convert + * to and from UTF-8. + * + * @author Chad Elliott + */ +//========================================================================= + +#ifndef ACE_ENCODING_CONVERTER_H +#define ACE_ENCODING_CONVERTER_H + +#include /**/ "ace/pre.h" + +#include "ace/Basic_Types.h" + +#if defined (ACE_USES_WCHAR) +#include /**/ "ace/ACE_export.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** The base class for all ACE UTF Encoding Converters. + * This class provides a generic interface that is used to implement + * various UTF encoding conversion classes. + */ +class ACE_Export ACE_Encoding_Converter +{ +public: + /// This enum describes the various states that can be returned + /// from the to_utf8() and from_utf8() methods which depends on + /// both the source buffer and the size of the target buffer. + enum Result {CONVERSION_OK, + SOURCE_EXHAUSTED, + TARGET_EXHAUSTED, + SOURCE_ILLEGAL + }; + + /// This destructor is here (and virtual) because we have virtual + /// functions. + virtual ~ACE_Encoding_Converter (void); + + /// Convert the source (which can be in any encoding) to UTF-8 and + /// store it in the provided target buffer. + virtual Result to_utf8 (const void* source, + size_t source_size, + ACE_Byte* target, + size_t target_size, + bool strict = true) = 0; + + /// Convert the UTF-8 source into an alternate encoding and store it + /// in the provided target buffer. + virtual Result from_utf8 (const ACE_Byte* source, + size_t source_size, + void* target, + size_t target_size, + bool strict = true) = 0; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL +#endif /* ACE_USES_WCHAR */ + +#include /**/ "ace/post.h" + +#endif /* ACE_ENCODING_CONVERTER_H */ diff --git a/ACE/ace/Encoding_Converter_Factory.cpp b/ACE/ace/Encoding_Converter_Factory.cpp new file mode 100644 index 00000000000..8cf1ed22c3f --- /dev/null +++ b/ACE/ace/Encoding_Converter_Factory.cpp @@ -0,0 +1,74 @@ +// $Id$ +#include "ace/Encoding_Converter_Factory.h" + +#if defined (ACE_USES_WCHAR) +#include "ace/UTF32_Encoding_Converter.h" +#include "ace/UTF16_Encoding_Converter.h" +#include "ace/UTF8_Encoding_Converter.h" +#include "ace/OS_Memory.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Encoding_Converter* +ACE_Encoding_Converter_Factory::create ( + const ACE_Byte* source, + size_t source_size, + ACE_Encoding_Converter_Factory::Encoding_Hint hint) +{ +#if defined (ACE_BIG_ENDIAN) + bool const convert_for_bigendian = true; +#else + bool const convert_for_bigendian = false; +#endif /* ACE_BIG_ENDIAN */ + ACE_Encoding_Converter* converter = 0; + + switch (hint) + { + case ACE_UTF_32BE: + ACE_NEW_RETURN (converter, + ACE_UTF32_Encoding_Converter (!convert_for_bigendian), + 0); + break; + case ACE_UTF_32LE: + ACE_NEW_RETURN (converter, + ACE_UTF32_Encoding_Converter (convert_for_bigendian), + 0); + break; + case ACE_UTF_16BE: + ACE_NEW_RETURN (converter, + ACE_UTF16_Encoding_Converter (!convert_for_bigendian), + 0); + break; + case ACE_UTF_16LE: + ACE_NEW_RETURN (converter, + ACE_UTF16_Encoding_Converter (convert_for_bigendian), + 0); + break; + case ACE_UTF_8: + ACE_NEW_RETURN (converter, + ACE_UTF8_Encoding_Converter, + 0); + break; + default: + // First check for ASCII since much of ASCII text will appear to + // convert from UTF-16 to UTF-8. + converter = ACE_UTF8_Encoding_Converter::encoded (source, source_size); + if (converter != 0) + return converter; + + // Check for UTF-32 + converter = ACE_UTF32_Encoding_Converter::encoded (source, source_size); + if (converter != 0) + return converter; + + // Check for UTF-16 + converter = ACE_UTF16_Encoding_Converter::encoded (source, source_size); + if (converter != 0) + return converter; + } + + return converter; +} + +ACE_END_VERSIONED_NAMESPACE_DECL +#endif /* ACE_USES_WCHAR */ diff --git a/ACE/ace/Encoding_Converter_Factory.h b/ACE/ace/Encoding_Converter_Factory.h new file mode 100644 index 00000000000..11ec541ebae --- /dev/null +++ b/ACE/ace/Encoding_Converter_Factory.h @@ -0,0 +1,54 @@ +// -*- C++ -*- + +//========================================================================= +/** + * @file Encoding_Converter_Factory.h + * + * $Id$ + * + * This class can be used to create encoding converters of various types. + * + * @author Chad Elliott + */ +//========================================================================= + +#ifndef ACE_ENCODING_CONVERTER_FACTORY_H +#define ACE_ENCODING_CONVERTER_FACTORY_H + +#include /**/ "ace/pre.h" + +#include "ace/Basic_Types.h" + +#if defined (ACE_USES_WCHAR) +#include /**/ "ace/ACE_export.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_Encoding_Converter; + +/** Create an encoding converter based on the source or hint. + * This class allows users to avoid knowing any concrete converter types. + */ +class ACE_Export ACE_Encoding_Converter_Factory +{ +public: + /// This enum is used to tell what type of converter to create. + enum Encoding_Hint { ACE_UTF_32BE, ACE_UTF_32LE, + ACE_UTF_16BE, ACE_UTF_16LE, + ACE_UTF_8, ACE_NONE + }; + + /// Create an encoding converter based on the source. If a hint is + /// given, it just creates the specified type of converter without looking + /// at the source. + static ACE_Encoding_Converter* create (const ACE_Byte* source, + size_t source_size, + Encoding_Hint hint = ACE_NONE); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL +#endif /* ACE_USES_WCHAR */ + +#include /**/ "ace/post.h" + +#endif /* ACE_ENCODING_CONVERTER_FACTORY_H */ diff --git a/ACE/ace/Env_Value_T.cpp b/ACE/ace/Env_Value_T.cpp new file mode 100644 index 00000000000..788bf125fc5 --- /dev/null +++ b/ACE/ace/Env_Value_T.cpp @@ -0,0 +1,12 @@ +// $Id$ + +#ifndef ACE_ENV_VALUE_T_CPP +#define ACE_ENV_VALUE_T_CPP + +#include "ace/Env_Value_T.h" + +#if ! defined (__ACE_INLINE__) +#include "ace/Env_Value_T.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* ACE_ENV_VALUE_T_CPP */ diff --git a/ACE/ace/Env_Value_T.h b/ACE/ace/Env_Value_T.h new file mode 100644 index 00000000000..01f4fcc5e8d --- /dev/null +++ b/ACE/ace/Env_Value_T.h @@ -0,0 +1,166 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Env_Value_T.h + * + * $Id$ + * + * Template to encapsulate getting a value from an environment variable + * and using a supplied default value if not in the environment. + * + * + * @author Chris Cleeland (derived from work by Carlos O'Ryan) + */ +//============================================================================= + +#ifndef ACE_ENV_VALUE_T_H +#define ACE_ENV_VALUE_T_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" +#include "ace/Global_Macros.h" +#include "ace/OS_NS_stdlib.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Env_Value + * + * @brief Environment Variable Value + * + * Reads a variable from the user environment, providing a default + * value. + */ +template +class ACE_Env_Value +{ +public: + /** + * Default constructor which isn't bound to a specific environment + * variable name or a default value. Before being useful it must + * 'd. + */ + ACE_Env_Value (void); + + /// Constructor that calls . + ACE_Env_Value (const ACE_TCHAR *varname, + const T &vardefault); + + /// Destroy the value. + ~ACE_Env_Value (void); + + /// Returns the value as type T. + operator T (void); + + /// The constructor, read @a varname from the environment, using + /// @a defval as its value if it is not defined. + void open (const ACE_TCHAR *varname, const T &defval); + + /// Returns the name of the variable being tracked. + const ACE_TCHAR *varname (void) const; + +private: + /// Disallow copying and assignment. + ACE_UNIMPLEMENTED_FUNC (ACE_Env_Value(const ACE_Env_Value &)) + ACE_UNIMPLEMENTED_FUNC (ACE_Env_Value operator=(const ACE_Env_Value &)) + + void fetch_value (void); + + const ACE_TCHAR *varname_; + T value_; +}; + +/// Function to convert a string @a s into type @c T. +template void ACE_Convert (const ACE_TCHAR *s, T &t); + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Env_Value_T.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Env_Value_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template <> inline void +ACE_Convert (const ACE_TCHAR *s, ACE_TCHAR *&v) +{ + v = (ACE_TCHAR *) s; +} + +template <> inline void +ACE_Convert (const ACE_TCHAR *s, const ACE_TCHAR *&v) +{ + v = (const ACE_TCHAR *) s; +} + +template <> inline void +ACE_Convert (const ACE_TCHAR *s, short &si) +{ + si = static_cast (ACE_OS::strtol (s, 0, 10)); +} + +template <> inline void +ACE_Convert (const ACE_TCHAR *s, u_short &us) +{ + us = static_cast (ACE_OS::strtol (s, 0, 10)); +} + +template <> inline void +ACE_Convert (const ACE_TCHAR *s, u_int &i) +{ + i = static_cast (ACE_OS::strtol (s, 0, 10)); +} + +template <> inline void +ACE_Convert (const ACE_TCHAR *s, long &l) +{ + l = ACE_OS::strtol (s, 0, 10); +} + +template <> inline void +ACE_Convert (const ACE_TCHAR *s, int &i) +{ + i = static_cast (ACE_OS::strtol (s, 0, 10)); +} + +template <> inline void +ACE_Convert (const ACE_TCHAR *s, u_long &ul) +{ + ul = ACE_OS::strtoul (s, 0, 10); +} + +template <> inline void +ACE_Convert (const ACE_TCHAR *s, double &d) +{ + d = ACE_OS::strtod (s, 0); +} + +// Default calls a CTOR on type T of the form 'T::T(const char*)', but +// users can feel free to create their own specialized conversion +// functions if necessary, as shown above. Note that for 'char*' the +// default is used because a simple cast will be performed and no +// conversion will be necessary. +template inline void +ACE_Convert (const ACE_TCHAR *s, T &t) +{ + t = T (s); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Env_Value_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" +#endif /* ACE_ENV_VALUE_T_H */ diff --git a/ACE/ace/Env_Value_T.inl b/ACE/ace/Env_Value_T.inl new file mode 100644 index 00000000000..63fe8df1f29 --- /dev/null +++ b/ACE/ace/Env_Value_T.inl @@ -0,0 +1,60 @@ +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE +ACE_Env_Value::operator T (void) +{ + return value_; +} + +template ACE_INLINE +ACE_Env_Value::ACE_Env_Value (void) + : varname_ (0) +{ +} + +template ACE_INLINE +ACE_Env_Value::ACE_Env_Value (const ACE_TCHAR *varname, + const T &defval) + : varname_ (varname), + value_(defval) +{ + this->fetch_value (); +} + +template ACE_INLINE void +ACE_Env_Value::open (const ACE_TCHAR *varname, + const T &defval) +{ + this->varname_ = varname; + this->value_ = defval; + this->fetch_value (); +} + +template ACE_INLINE void +ACE_Env_Value::fetch_value (void) +{ +#if defined (ACE_WIN32) + const ACE_TCHAR *env = ACE_OS::getenv (this->varname_); + if (env != 0) + ACE_Convert (env, value_); +#else + char *nenv = ACE_OS::getenv (ACE_TEXT_ALWAYS_CHAR (this->varname_)); + if (nenv != 0) + ACE_Convert (ACE_TEXT_CHAR_TO_TCHAR (nenv), this->value_); +#endif +} + +template ACE_INLINE const ACE_TCHAR* +ACE_Env_Value::varname (void) const +{ + return this->varname_; +} + +template ACE_INLINE +ACE_Env_Value::~ACE_Env_Value (void) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Event.cpp b/ACE/ace/Event.cpp new file mode 100644 index 00000000000..e185ec37117 --- /dev/null +++ b/ACE/ace/Event.cpp @@ -0,0 +1,93 @@ +// $Id$ + +#include "ace/Event.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Event.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/Log_Msg.h" + +ACE_RCSID(ace, Event, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Event::ACE_Event (int manual_reset, + int initial_state, + int type, + const ACE_TCHAR *name, + void *arg, + LPSECURITY_ATTRIBUTES sa) + : removed_ (false) +{ + if (ACE_OS::event_init (&this->handle_, + manual_reset, + initial_state, + type, + name, + arg, + sa) != 0) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Event::ACE_Event"))); +} + +ACE_Event::~ACE_Event (void) +{ + this->remove (); +} + +int +ACE_Event::remove (void) +{ + int result = 0; + if (!this->removed_) + { + this->removed_ = true; + result = ACE_OS::event_destroy (&this->handle_); + } + return result; +} + +int +ACE_Event::wait (void) +{ + return ACE_OS::event_wait (&this->handle_); +} + +int +ACE_Event::wait (const ACE_Time_Value *abstime, int use_absolute_time) +{ + return ACE_OS::event_timedwait (&this->handle_, + const_cast (abstime), + use_absolute_time); +} + +int +ACE_Event::signal (void) +{ + return ACE_OS::event_signal (&this->handle_); +} + +int +ACE_Event::pulse (void) +{ + return ACE_OS::event_pulse (&this->handle_); +} + +int +ACE_Event::reset (void) +{ + return ACE_OS::event_reset (&this->handle_); +} + +void +ACE_Event::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Event.h b/ACE/ace/Event.h new file mode 100644 index 00000000000..177c0039df1 --- /dev/null +++ b/ACE/ace/Event.h @@ -0,0 +1,143 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file Event.h + * + * $Id$ + * + * Moved from Synch.h. + * + * @author Douglas C. Schmidt + */ +//========================================================================== + +#ifndef ACE_EVENT_H +#define ACE_EVENT_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/OS_NS_Thread.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Event + * + * @brief A wrapper around the Win32 event locking mechanism. + * + * Portable implementation of an Event mechanism, which is native to + * Win32, but must be emulated on UNIX. All platforms support + * process-scope locking support. However, only Win32 platforms + * support global naming and system-scope locking support. + */ +class ACE_Export ACE_Event +{ +public: + /// Constructor that creates event. + ACE_Event (int manual_reset = 0, + int initial_state = 0, + int type = USYNC_THREAD, + const ACE_TCHAR *name = 0, + void *arg = 0, + LPSECURITY_ATTRIBUTES sa = 0); + + /// Implicitly destroy the event variable. + ~ACE_Event (void); + + /** + * Explicitly destroy the event variable. Note that only one thread + * should call this method since it doesn't protect against race + * conditions. + */ + int remove (void); + + /// Underlying handle to event. + ACE_event_t handle (void) const; + + /** + * Set the underlying handle to event. Note that this method assumes + * ownership of the and will close it down in . If + * you want the to stay open when is called make + * sure to call on the before closing it. You are + * responsible for the closing the existing before + * overwriting it. + */ + void handle (ACE_event_t new_handle); + + /** + * if MANUAL reset + * sleep till the event becomes signaled + * event remains signaled after wait() completes. + * else AUTO reset + * sleep till the event becomes signaled + * event resets wait() completes. + */ + int wait (void); + + /// Same as wait() above, but this one can be timed + /// @a abstime is absolute time-of-day if if @a use_absolute_time + /// is non-0, else it is relative time. + int wait (const ACE_Time_Value *abstime, + int use_absolute_time = 1); + + /** + * if MANUAL reset + * wake up all waiting threads + * set to signaled state + * else AUTO reset + * if no thread is waiting, set to signaled state + * if thread(s) are waiting, wake up one waiting thread and + * reset event + */ + int signal (void); + + /** + * if MANUAL reset + * wakeup all waiting threads and + * reset event + * else AUTO reset + * wakeup one waiting thread (if present) and + * reset event + */ + int pulse (void); + + /// Set to nonsignaled state. + int reset (void); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// The underlying handle. + ACE_event_t handle_; + + /// Keeps track of whether has been called yet to avoid + /// multiple calls, e.g., explicitly and implicitly in the + /// destructor. This flag isn't protected by a lock, so make sure + /// that you don't have multiple threads simultaneously calling + /// on the same object, which is a bad idea anyway... + bool removed_; + +private: + // = Prevent copying. + ACE_Event (const ACE_Event& event); + const ACE_Event &operator= (const ACE_Event &rhs); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Event.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_EVENT_H */ diff --git a/ACE/ace/Event.inl b/ACE/ace/Event.inl new file mode 100644 index 00000000000..188d7c202cf --- /dev/null +++ b/ACE/ace/Event.inl @@ -0,0 +1,18 @@ +// -*- C++ -*- +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE ACE_event_t +ACE_Event::handle (void) const +{ + return this->handle_; +} + +ACE_INLINE void +ACE_Event::handle (ACE_event_t new_handle) +{ + this->handle_ = new_handle; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Event_Handler.cpp b/ACE/ace/Event_Handler.cpp new file mode 100644 index 00000000000..d4542b61349 --- /dev/null +++ b/ACE/ace/Event_Handler.cpp @@ -0,0 +1,396 @@ +// Event_Handler.cpp +// $Id$ + +#include "ace/Event_Handler.h" +#include "ace/OS_Errno.h" +#include "ace/Reactor.h" +#include "ace/Thread_Manager.h" +/* Need to see if ACE_HAS_BUILTIN_ATOMIC_OP defined */ +#include "ace/Atomic_Op.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Event_Handler.inl" +#endif /* __ACE_INLINE__ */ + +#include + +ACE_RCSID(ace, Event_Handler, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Implement conceptually abstract virtual functions in the base class +// so derived classes don't have to implement unused ones. + +ACE_Event_Handler::ACE_Event_Handler (ACE_Reactor *r, + int p) + : reference_count_ (1), + priority_ (p), + reactor_ (r), + reference_counting_policy_ (Reference_Counting_Policy::DISABLED) +{ + // ACE_TRACE ("ACE_Event_Handler::ACE_Event_Handler"); +} + +ACE_Event_Handler::~ACE_Event_Handler (void) +{ + // ACE_TRACE ("ACE_Event_Handler::~ACE_Event_Handler"); +} + +// Gets the file descriptor associated with this I/O device. + +ACE_HANDLE +ACE_Event_Handler::get_handle (void) const +{ + ACE_TRACE ("ACE_Event_Handler::get_handle"); + return ACE_INVALID_HANDLE; +} + +// Sets the file descriptor associated with this I/O device. + +void +ACE_Event_Handler::set_handle (ACE_HANDLE) +{ + ACE_TRACE ("ACE_Event_Handler::set_handle"); +} + +// Gets the priority of this handler. + +int +ACE_Event_Handler::priority (void) const +{ + ACE_TRACE ("ACE_Event_Handler::priority"); + return this->priority_; +} + +// Sets the priority + +void +ACE_Event_Handler::priority (int priority) +{ + ACE_TRACE ("ACE_Event_Handler::priority"); + this->priority_ = priority; +} + +// Called when the object is about to be removed from the Dispatcher +// tables. + +int +ACE_Event_Handler::handle_close (ACE_HANDLE, ACE_Reactor_Mask) +{ + ACE_TRACE ("ACE_Event_Handler::handle_close"); + return -1; +} + +// Called when input becomes available on fd. + +int +ACE_Event_Handler::handle_input (ACE_HANDLE) +{ + ACE_TRACE ("ACE_Event_Handler::handle_input"); + return -1; +} + +// Called when output is possible on fd. + +int +ACE_Event_Handler::handle_output (ACE_HANDLE) +{ + ACE_TRACE ("ACE_Event_Handler::handle_output"); + return -1; +} + +// Called when urgent data is available on fd. + +int +ACE_Event_Handler::handle_exception (ACE_HANDLE) +{ + ACE_TRACE ("ACE_Event_Handler::handle_exception"); + return -1; +} + +// Called when timer expires, TV stores the current time. + +int +ACE_Event_Handler::handle_timeout (const ACE_Time_Value &, const void *) +{ + ACE_TRACE ("ACE_Event_Handler::handle_timeout"); + return -1; +} + +// Called when a monitored Process exits + +int +ACE_Event_Handler::handle_exit (ACE_Process *) +{ + ACE_TRACE ("ACE_Event_Handler::handle_exit"); + return -1; +} + +// Called when a registered signal occurs. + +int +ACE_Event_Handler::handle_signal (int, siginfo_t *, ucontext_t *) +{ + ACE_TRACE ("ACE_Event_Handler::handle_signal"); + return -1; +} + +int +ACE_Event_Handler::resume_handler (void) +{ + ACE_TRACE ("ACE_Event_Handler::resume_handler"); + + // Return a default value and allow the reactor to take care of + // resuming the handler + return ACE_Event_Handler::ACE_REACTOR_RESUMES_HANDLER; +} + + +int +ACE_Event_Handler::handle_qos (ACE_HANDLE) +{ + ACE_TRACE ("ACE_Event_Handler::handle_qos"); + return -1; +} + +int +ACE_Event_Handler::handle_group_qos (ACE_HANDLE) +{ + ACE_TRACE ("ACE_Event_Handler::handle_group_qos"); + return -1; +} + +void +ACE_Event_Handler::reactor (ACE_Reactor *reactor) +{ + ACE_TRACE ("ACE_Event_Handler::reactor"); + this->reactor_ = reactor; +} + +ACE_Reactor * +ACE_Event_Handler::reactor (void) const +{ + ACE_TRACE ("ACE_Event_Handler::reactor"); + return this->reactor_; +} + +ACE_Reactor_Timer_Interface * +ACE_Event_Handler::reactor_timer_interface (void) const +{ + ACE_TRACE ("ACE_Event_Handler::reactor_timer_interface"); + return this->reactor_; +} + +ACE_Event_Handler::Reference_Count +ACE_Event_Handler::add_reference (void) +{ + bool const reference_counting_required = + this->reference_counting_policy ().value () == + ACE_Event_Handler::Reference_Counting_Policy::ENABLED; + + if (reference_counting_required) + return ++this->reference_count_; + else + return 1; +} + +ACE_Event_Handler::Reference_Count +ACE_Event_Handler::remove_reference (void) +{ + bool const reference_counting_required = + this->reference_counting_policy ().value () == + ACE_Event_Handler::Reference_Counting_Policy::ENABLED; + + if (reference_counting_required) + { + Reference_Count result = + --this->reference_count_; + + if (result == 0) + delete this; + + return result; + } + else + { + return 1; + } +} + +ACE_Event_Handler::Policy::~Policy (void) +{ +} + +ACE_Event_Handler::Reference_Counting_Policy::Reference_Counting_Policy (Reference_Counting_Policy::Value value) + : value_ (value) +{ +} + +ACE_Event_Handler::Reference_Counting_Policy::Value +ACE_Event_Handler::Reference_Counting_Policy::value (void) const +{ + return this->value_; +} + +void +ACE_Event_Handler::Reference_Counting_Policy::value (ACE_Event_Handler::Reference_Counting_Policy::Value value) +{ + this->value_ = value; +} + +ACE_Event_Handler::Reference_Counting_Policy & +ACE_Event_Handler::reference_counting_policy (void) +{ + return this->reference_counting_policy_; +} + +//#if !defined (ACE_HAS_WINCE) + +ACE_THR_FUNC_RETURN +ACE_Event_Handler::read_adapter (void *args) +{ + ACE_Event_Handler *this_ptr = static_cast (args); + ACE_Reactor *r = this_ptr->reactor (); + + while (this_ptr->handle_input (ACE_STDIN) != -1) + continue; + + this_ptr->handle_close (ACE_STDIN, ACE_Event_Handler::READ_MASK); + // It's possible for handle_close() to "delete this" so we need to + // cache the reactor pointer and use it here. + r->notify (); + + return 0; +} + +int +ACE_Event_Handler::register_stdin_handler (ACE_Event_Handler *eh, + ACE_Reactor *reactor, + ACE_Thread_Manager *thr_mgr, + int flags) +{ +#if defined (ACE_WIN32) + ACE_UNUSED_ARG (reactor); + + eh->reactor (reactor); + return thr_mgr->spawn (&read_adapter, static_cast (eh), flags); +#else + // Keep compilers happy. + ACE_UNUSED_ARG (flags); + ACE_UNUSED_ARG (thr_mgr); + return reactor->register_handler (ACE_STDIN, + eh, + ACE_Event_Handler::READ_MASK); +#endif /* ACE_WIN32 */ +} + +int +ACE_Event_Handler::remove_stdin_handler (ACE_Reactor *reactor, + ACE_Thread_Manager * /* thr_mgr */) +{ +#if defined (ACE_WIN32) + ACE_UNUSED_ARG (reactor); + + // What should we do here? + ACE_NOTSUP_RETURN (-1); +#else + return reactor->remove_handler (ACE_STDIN, + ACE_Event_Handler::READ_MASK); +#endif /* ACE_WIN32 */ +} + +//#endif /* ACE_HAS_WINCE */ + +// --------------------------------------------------------------------- + +ACE_Event_Handler_var::ACE_Event_Handler_var (void) + : ptr_ (0) +{ +} + +ACE_Event_Handler_var::ACE_Event_Handler_var (ACE_Event_Handler *p) + : ptr_ (p) +{ +} + +ACE_Event_Handler_var::ACE_Event_Handler_var (const ACE_Event_Handler_var &b) + : ptr_ (b.ptr_) +{ + if (this->ptr_ != 0) + { + this->ptr_->add_reference (); + } +} + +ACE_Event_Handler_var::~ACE_Event_Handler_var (void) +{ + if (this->ptr_ != 0) + { + ACE_Errno_Guard eguard (errno); + this->ptr_->remove_reference (); + } +} + +ACE_Event_Handler_var & +ACE_Event_Handler_var::operator= (ACE_Event_Handler *p) +{ + if (this->ptr_ != p) + { + ACE_Event_Handler_var tmp (p); + std::swap (this->ptr_, tmp.ptr_); + } + + return *this; +} + +ACE_Event_Handler_var & +ACE_Event_Handler_var::operator= (const ACE_Event_Handler_var &b) +{ + ACE_Event_Handler_var tmp (b); + std::swap (this->ptr_, tmp.ptr_); + + return *this; +} + +ACE_Event_Handler * +ACE_Event_Handler_var::operator->() const +{ + return this->ptr_; +} + +ACE_Event_Handler * +ACE_Event_Handler_var::handler (void) const +{ + return this->ptr_; +} + +ACE_Event_Handler * +ACE_Event_Handler_var::release (void) +{ + ACE_Event_Handler * const old = this->ptr_; + this->ptr_ = 0; + return old; +} + +void +ACE_Event_Handler_var::reset (ACE_Event_Handler *p) +{ + *this = p; +} + +// --------------------------------------------------------------------- + +ACE_Notification_Buffer::ACE_Notification_Buffer (void) +{ + ACE_TRACE ("ACE_Notification_Buffer::ACE_Notification_Buffer"); +} + +ACE_Notification_Buffer::ACE_Notification_Buffer (ACE_Event_Handler *eh, + ACE_Reactor_Mask mask) + : eh_ (eh), + mask_ (mask) +{ + ACE_TRACE ("ACE_Notification_Buffer::ACE_Notification_Buffer"); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Event_Handler.h b/ACE/ace/Event_Handler.h new file mode 100644 index 00000000000..3ccaf1d1aa0 --- /dev/null +++ b/ACE/ace/Event_Handler.h @@ -0,0 +1,388 @@ +/* -*- C++ -*- */ + +//========================================================================== +/** + * @file Event_Handler.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//========================================================================== + +#ifndef ACE_EVENT_HANDLER_H +#define ACE_EVENT_HANDLER_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/os_include/os_signal.h" +#include "ace/Atomic_Op.h" +#include "ace/Synch_Traits.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Forward declaration. +class ACE_Message_Block; +class ACE_Reactor; +class ACE_Reactor_Timer_Interface; +class ACE_Thread_Manager; +class ACE_Process; + +typedef unsigned long ACE_Reactor_Mask; + +/** + * @class ACE_Event_Handler + * + * @brief Provides an abstract interface for handling various types of + * I/O, timer, and signal events. + * + * Subclasses read/write input/output on an I/O descriptor, + * handle an exception raised on an I/O descriptor, handle a + * timer's expiration, or handle a signal. + */ +class ACE_Export ACE_Event_Handler +{ +public: + enum + { + LO_PRIORITY = 0, + HI_PRIORITY = 10, + NULL_MASK = 0, +#if defined (ACE_USE_POLL) + READ_MASK = POLLIN, + WRITE_MASK = POLLOUT, + EXCEPT_MASK = POLLPRI, +#else /* USE SELECT */ + READ_MASK = (1 << 0), + WRITE_MASK = (1 << 1), + EXCEPT_MASK = (1 << 2), +#endif /* ACE_USE_POLL */ + ACCEPT_MASK = (1 << 3), + CONNECT_MASK = (1 << 4), + TIMER_MASK = (1 << 5), + QOS_MASK = (1 << 6), + GROUP_QOS_MASK = (1 << 7), + SIGNAL_MASK = (1 << 8), + ALL_EVENTS_MASK = READ_MASK | + WRITE_MASK | + EXCEPT_MASK | + ACCEPT_MASK | + CONNECT_MASK | + TIMER_MASK | + QOS_MASK | + GROUP_QOS_MASK | + SIGNAL_MASK, + RWE_MASK = READ_MASK | + WRITE_MASK | + EXCEPT_MASK, + DONT_CALL = (1 << 9) + }; + + /// Destructor is virtual to enable proper cleanup. + virtual ~ACE_Event_Handler (void); + + /// Get the I/O handle. + virtual ACE_HANDLE get_handle (void) const; + + /// Set the I/O handle. + virtual void set_handle (ACE_HANDLE); + + // = Get/set priority + + // Priorities run from MIN_PRIORITY (which is the "lowest priority") + // to MAX_PRIORITY (which is the "highest priority"). + /// Get the priority of the Event_Handler. + virtual int priority (void) const; + + /// Set the priority of the Event_Handler. + virtual void priority (int priority); + + /// Called when input events occur (e.g., connection or data). + virtual int handle_input (ACE_HANDLE fd = ACE_INVALID_HANDLE); + + /// Called when output events are possible (e.g., when flow control + /// abates or non-blocking connection completes). + virtual int handle_output (ACE_HANDLE fd = ACE_INVALID_HANDLE); + + /// Called when an exceptional events occur (e.g., SIGURG). + virtual int handle_exception (ACE_HANDLE fd = ACE_INVALID_HANDLE); + + /** + * Called when timer expires. @a current_time represents the current + * time that the was selected for timeout + * dispatching and @a act is the asynchronous completion token that + * was passed in when was invoked. + */ + virtual int handle_timeout (const ACE_Time_Value ¤t_time, + const void *act = 0); + + /// Called when a process exits. + virtual int handle_exit (ACE_Process *); + + /// Called when a method returns -1 or when the + /// method is called on an ACE_Reactor. The + /// @a close_mask indicates which event has triggered the + /// method callback on a particular @a handle. + virtual int handle_close (ACE_HANDLE handle, + ACE_Reactor_Mask close_mask); + + /// Called when object is signaled by OS (either via UNIX signals or + /// when a Win32 object becomes signaled). + virtual int handle_signal (int signum, siginfo_t * = 0, ucontext_t * = 0); + + enum + { + /// The handler is not resumed at all. Could lead to deadlock.. + ACE_EVENT_HANDLER_NOT_RESUMED = -1, + /// The reactor takes responsibility of resuming the handler and + /// is the default + ACE_REACTOR_RESUMES_HANDLER = 0, + /// The application takes responsibility of resuming the handler + ACE_APPLICATION_RESUMES_HANDLER + }; + /** + * Called to figure out whether the handler needs to resumed by the + * reactor or the application can take care of it. The default + * value of 0 would be returned which would allow the reactor to + * take care of resumption of the handler. The application can + * return a value more than zero and decide to resume the handler + * themseleves. + * + * @note This method is only useful for the ACE_TP_Reactor. Sad + * that we have to have this method in a class that is supposed to + * be used across different components in ACE. + */ + virtual int resume_handler (void); + + virtual int handle_qos (ACE_HANDLE = ACE_INVALID_HANDLE); + virtual int handle_group_qos (ACE_HANDLE = ACE_INVALID_HANDLE); + + // = Accessors to set/get the various event demultiplexors. + /// Set the event demultiplexors. + virtual void reactor (ACE_Reactor *reactor); + + /// Get the event demultiplexors. + virtual ACE_Reactor *reactor (void) const; + + /// Get only the reactor's timer related interface. + virtual ACE_Reactor_Timer_Interface *reactor_timer_interface (void) const; + + /** + * Used to read from non-socket ACE_HANDLEs in our own thread to + * work around Win32 limitations that don't allow us to 'able on + * Win32. + */ + static int register_stdin_handler (ACE_Event_Handler *eh, + ACE_Reactor *reactor, + ACE_Thread_Manager *thr_mgr, + int flags = THR_DETACHED); + + /// Performs the inverse of the method. + static int remove_stdin_handler (ACE_Reactor *reactor, + ACE_Thread_Manager *thr_mgr); + + /// Reference count type. + typedef long Reference_Count; + + /// Increment reference count on the handler. + /** + * This method is called when the handler is registered with the + * Reactor and when the Reactor makes an upcall on the handler. + * Reference count is 1 when the handler is created. + * + * @return Current reference count. + */ + virtual Reference_Count add_reference (void); + + /// Decrement reference count on the handler. + /** + * This method is called when the handler is removed from the + * Reactor and when an upcall made on the handler by the Reactor + * completes. Handler is deleted when the reference count reaches + * 0. + * + * @return Current reference count. + */ + virtual Reference_Count remove_reference (void); + + /** + * @class Policy + * + * @brief Base class for all handler policies. + */ + class ACE_Export Policy + { + + public: + + /// Virtual destructor. + virtual ~Policy (void); + }; + + /** + * @class Reference_Counting_Policy + * + * @brief This policy dictates the reference counting requirements + * for the handler. + * + * This policy allows applications to configure whether it wants the + * Reactor to call add_reference() and remove_reference() during + * registrations, removals, and upcalls. + * + * Default: DISABLED. + */ + class ACE_Export Reference_Counting_Policy : public Policy + { + /// This policy can only be created by the handler. + friend class ACE_Event_Handler; + + public: + + enum Value + { + /// Perform reference counting. + ENABLED, + /// Don't perform reference counting. + DISABLED + }; + + /// Current Reference_Counting_Policy. + Value value (void) const; + + /// Update Reference_Counting_Policy. + void value (Value value); + + private: + + /// Private constructor. + Reference_Counting_Policy (Value value); + + /// The value of the policy. + Value value_; + }; + + /// Current Reference_Counting_Policy. + Reference_Counting_Policy &reference_counting_policy (void); + +protected: + /// Force ACE_Event_Handler to be an abstract base class. + ACE_Event_Handler (ACE_Reactor * = 0, + int priority = ACE_Event_Handler::LO_PRIORITY); + + /// Typedef for implementation of reference counting. + typedef ACE_Atomic_Op Atomic_Reference_Count; + + /// Reference count. + Atomic_Reference_Count reference_count_; + +private: + + /// Priority of this Event_Handler. + int priority_; + + /// Pointer to the various event demultiplexors. + ACE_Reactor *reactor_; + + /// Reference counting requirements. + Reference_Counting_Policy reference_counting_policy_; +}; + +/** + * @class ACE_Event_Handler_var + * + * @brief Auto pointer like class for Event Handlers. + * + * Used to manage lifecycle of handlers. This class calls + * ACE_Event_Handler::remove_reference() in its destructor. + */ +class ACE_Export ACE_Event_Handler_var +{ + +public: + + /// Default constructor. + ACE_Event_Handler_var (void); + + /// Construct with a handler. + ACE_Event_Handler_var (ACE_Event_Handler *p); + + /// Copy constructor. + ACE_Event_Handler_var (const ACE_Event_Handler_var &b); + + /// Destructor. + ~ACE_Event_Handler_var (void); + + /// Assignment to a handler. + ACE_Event_Handler_var &operator= (ACE_Event_Handler *p); + + /// Assignment to a ACE_Event_Handler_var. + ACE_Event_Handler_var &operator= (const ACE_Event_Handler_var &b); + + /// Overloaded "->". + ACE_Event_Handler *operator-> () const; + + /// Access the handler. + ACE_Event_Handler *handler (void) const; + + /// Release the handler. + ACE_Event_Handler *release (void); + + /// Reset the handler. + void reset (ACE_Event_Handler *p = 0); + +private: + + /// Handler. + ACE_Event_Handler *ptr_; +}; + +/** + * @class ACE_Notification_Buffer + * + * @brief Simple wrapper for passing s and + * ACE_Reactor_Masks between threads. + */ +class ACE_Export ACE_Notification_Buffer +{ +public: + ACE_Notification_Buffer (void); + + ACE_Notification_Buffer (ACE_Event_Handler *eh, + ACE_Reactor_Mask mask); + + /// Default dtor. + ~ACE_Notification_Buffer (void); + + /// Pointer to the Event_Handler that will be dispatched + /// by the main event loop. + ACE_Event_Handler *eh_; + + /// Mask that indicates which method to call. + ACE_Reactor_Mask mask_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Event_Handler.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_EVENT_HANDLER_H */ diff --git a/ACE/ace/Event_Handler.inl b/ACE/ace/Event_Handler.inl new file mode 100644 index 00000000000..75f2cd12aa5 --- /dev/null +++ b/ACE/ace/Event_Handler.inl @@ -0,0 +1,12 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_Notification_Buffer::~ACE_Notification_Buffer (void) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Event_Handler_T.cpp b/ACE/ace/Event_Handler_T.cpp new file mode 100644 index 00000000000..51a03f62310 --- /dev/null +++ b/ACE/ace/Event_Handler_T.cpp @@ -0,0 +1,125 @@ +// Event_Handler_T.cpp +// +// $Id$ + +#ifndef ACE_EVENT_HANDLER_T_CPP +#define ACE_EVENT_HANDLER_T_CPP + +#include "ace/Event_Handler_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_TEMPLATE_TYPEDEFS) + +#if !defined (__ACE_INLINE__) +#include "ace/Event_Handler_T.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_Event_Handler_T) + +template void +ACE_Event_Handler_T::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Event_Handler_T::dump"); +#endif /* ACE_HAS_DUMP */ +} + +template +ACE_Event_Handler_T::~ACE_Event_Handler_T (void) +{ + ACE_TRACE ("ACE_Event_Handler_T::~ACE_Event_Handler_T"); + if (this->delete_handler_) + delete this->op_handler_; +} + +template +ACE_Event_Handler_T::ACE_Event_Handler_T (T *op_handler, int delete_handler, + GET_HANDLE get_handle, + IO_HANDLER input_h, + CL_HANDLER close_h, + SIG_HANDLER sig_h, + TO_HANDLER timeout_h, + IO_HANDLER output_h, + SET_HANDLE set_handle, + IO_HANDLER except_h) + : op_handler_ (op_handler), + input_handler_ (input_h), + output_handler_ (output_h), + except_handler_ (except_h), + to_handler_ (timeout_h), + cl_handler_ (close_h), + sig_handler_ (sig_h), + delete_handler_ (delete_handler), + set_handle_ (set_handle), + get_handle_ (get_handle) +{ + ACE_TRACE ("ACE_Event_Handler_T::ACE_Event_Handler_T"); +} + +template ACE_HANDLE +ACE_Event_Handler_T::get_handle (void) const +{ + ACE_TRACE ("ACE_Event_Handler_T::get_handle"); + return this->get_handle_ == 0 ? ACE_INVALID_HANDLE : (this->op_handler_->*get_handle_) (); +} + +template void +ACE_Event_Handler_T::set_handle (ACE_HANDLE h) +{ + ACE_TRACE ("ACE_Event_Handler_T::set_handle"); + if (this->set_handle_ != 0) + (this->op_handler_->*set_handle_) (h); +} + +template int +ACE_Event_Handler_T::handle_input (ACE_HANDLE fd) +{ + ACE_TRACE ("ACE_Event_Handler_T::handle_input"); + return this->input_handler_ == 0 ? 0 : (this->op_handler_->*input_handler_) (fd); +} + +template int +ACE_Event_Handler_T::handle_output (ACE_HANDLE fd) +{ + ACE_TRACE ("ACE_Event_Handler_T::handle_output"); + return this->output_handler_ == 0 ? 0 : (this->op_handler_->*output_handler_) (fd); +} + +template int +ACE_Event_Handler_T::handle_exception (ACE_HANDLE fd) +{ + ACE_TRACE ("ACE_Event_Handler_T::handle_exception"); + return this->except_handler_ == 0 ? 0 : (this->op_handler_->*except_handler_) (fd); +} + +template int +ACE_Event_Handler_T::handle_timeout (const ACE_Time_Value &tv, const void *arg) +{ + ACE_TRACE ("ACE_Event_Handler_T::handle_timeout"); + return this->to_handler_ == 0 ? 0 : (this->op_handler_->*to_handler_) (tv, arg); +} + +template int +ACE_Event_Handler_T::handle_close (ACE_HANDLE fd, ACE_Reactor_Mask close_mask) +{ + ACE_TRACE ("ACE_Event_Handler_T::handle_close"); + return this->cl_handler_ == 0 ? 0 : (this->op_handler_->*cl_handler_) (fd, close_mask); +} + +template int +ACE_Event_Handler_T::handle_signal (int signum, siginfo_t *s, ucontext_t *u) +{ + ACE_TRACE ("ACE_Event_Handler_T::handle_signal"); + return this->sig_handler_ == 0 ? 0 : (this->op_handler_->*sig_handler_) (signum, s, u); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_TEMPLATE_TYPEDEFS */ + +#endif /* ACE_EVENT_HANDLER_T_CPP */ diff --git a/ACE/ace/Event_Handler_T.h b/ACE/ace/Event_Handler_T.h new file mode 100644 index 00000000000..71c97bcf4a8 --- /dev/null +++ b/ACE/ace/Event_Handler_T.h @@ -0,0 +1,191 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Event_Handler_T.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_EVENT_HANDLER_T_H +#define ACE_EVENT_HANDLER_T_H +#include /**/ "ace/pre.h" + +#include "ace/Event_Handler.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_TEMPLATE_TYPEDEFS) + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Event_Handler_T + * + * @brief Enable a class that doesn't inherit from the + * ACE_Event_Handler to be incorporated into the ACE_Reactor + * framework. Thanks to Greg Lavender (g.lavender@isode.com) + * for sharing this idea. + * + * It is sometimes the case that an application has a hierarchy + * of operation dispatcher classes that have their own + * inheritance hierarchy but also would like to integrate with + * the ACE_Reactor. Rather than adopt a "mixin" approach, it is + * often cleaner to define a template as a subclass of + * ACE_Event_Handler and paramterize it with an operation + * dispatcher type. + * When constructing an instantiation of the ACE_Event_Handler_T + * object, a set of pointers to member functions must be + * provided so that when one of the handle_* methods is called + * by the ACE_Reactor, the appropriate method is called on the + * underlying operations object. This is done since in some + * cases it is useful to map any event that happens to the same + * method on an object. + * The ACE_Event_Handler_T template is instantiated by an + * operations object and registered with the ACE_Reactor, and it + * then calls the appropriate op_handler. So, it's basically + * just another level of indirection in event dispatching. The + * coupling betweent the ultimate handler of the event and the + * ACE_Event_Handler class is relaxed a bit by have this + * intermediate object of type around. The + * client object can then dynamically change the bindings for + * the various handlers so that during the life of one of the + * operation objects, it can change how it wants events to be + * handled. It just instantiates a new instance of the template + * with different bindings and reregisters this new object with + * the ACE_Reactor. + */ +template +class ACE_Event_Handler_T : public ACE_Event_Handler +{ +public: + // = Typedefs to simplify pointer-to-member-function registration. + + // Get/set the underlying handle. + typedef ACE_HANDLE (T::*GET_HANDLE) (void) const; + typedef void (T::*SET_HANDLE) (ACE_HANDLE); + + /// Handle I/O events. + typedef int (T::*IO_HANDLER) (ACE_HANDLE); + + /// Handle timeout events. + typedef int (T::*TO_HANDLER) (const ACE_Time_Value &, const void *); + + /// Handle close events. + typedef int (T::*CL_HANDLER) (ACE_HANDLE, ACE_Reactor_Mask); + + /// = Initialization and termination methods. + typedef int (T::*SIG_HANDLER) (int, siginfo_t*, ucontext_t*); + + /// Initialize the op_handler. + ACE_Event_Handler_T (T *op_handler, + int delete_handler, + GET_HANDLE get_handle = 0, + IO_HANDLER input = 0, + CL_HANDLER close = 0, + SIG_HANDLER sig = 0, + TO_HANDLER timeout = 0, + IO_HANDLER output = 0, + SET_HANDLE set_handle = 0, + IO_HANDLER except = 0); + + /// Close down and delete the + ~ACE_Event_Handler_T (void); + + // = Override all the ACE_Event_Handler methods. + + // These methods all delegate down to the operations handler. + virtual ACE_HANDLE get_handle (void) const; + virtual void set_handle (ACE_HANDLE); + virtual int handle_input (ACE_HANDLE fd = ACE_INVALID_HANDLE); + virtual int handle_output (ACE_HANDLE fd = ACE_INVALID_HANDLE); + virtual int handle_exception (ACE_HANDLE fd = ACE_INVALID_HANDLE); + virtual int handle_timeout (const ACE_Time_Value &tv, const void *arg = 0); + virtual int handle_close (ACE_HANDLE fd, ACE_Reactor_Mask close_mask); + virtual int handle_signal (int signum, siginfo_t * = 0, ucontext_t * = 0); + + // = Get/set the operations handler. + T *op_handler (void); + void op_handler (T *); + + // = Get/set the target pointer-to-method used for dispatching. + + GET_HANDLE handle_get (void); + void handle_get (GET_HANDLE); + + SET_HANDLE handle_set (void); + void handle_set (SET_HANDLE); + + IO_HANDLER input_handler (void); + void input_handler (IO_HANDLER); + + IO_HANDLER output_handler (void); + void output_handler (IO_HANDLER); + + IO_HANDLER except_handler (void); + void except_handler (IO_HANDLER); + + TO_HANDLER to_handler (void); + void to_handler (TO_HANDLER); + + CL_HANDLER cl_handler (void); + void cl_handler (CL_HANDLER); + + SIG_HANDLER sig_handler (void); + void sig_handler (SIG_HANDLER); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// Pointer to the object that handles all the delegated operations. + T *op_handler_; + + // = Handle input, output, and exception events. + IO_HANDLER input_handler_; + IO_HANDLER output_handler_; + IO_HANDLER except_handler_; + + /// Handle timeout events. + TO_HANDLER to_handler_; + + /// Handle close events. + CL_HANDLER cl_handler_; + + /// Handle signal events. + SIG_HANDLER sig_handler_; + + /// Keeps track of whether we need to delete the handler in the + /// destructor. + int delete_handler_; + + // = Get/set underlying handle. + SET_HANDLE set_handle_; + GET_HANDLE get_handle_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Event_Handler_T.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Event_Handler_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Event_Handler_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#endif /* ACE_HAS_TEMPLATE_TYPEDEFS */ +#include /**/ "ace/post.h" +#endif /* ACE_EVENT_HANDLER_H */ diff --git a/ACE/ace/Event_Handler_T.inl b/ACE/ace/Event_Handler_T.inl new file mode 100644 index 00000000000..c3facd7e25f --- /dev/null +++ b/ACE/ace/Event_Handler_T.inl @@ -0,0 +1,135 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/Global_Macros.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE void +ACE_Event_Handler_T::op_handler (T *op) +{ + ACE_TRACE ("ACE_Event_Handler_T::op_handler"); + this->op_handler_ = op; +} + +template ACE_INLINE T * +ACE_Event_Handler_T::op_handler (void) +{ + ACE_TRACE ("ACE_Event_Handler_T::op_handler"); + return this->op_handler_; +} + +template ACE_INLINE typename ACE_Event_Handler_T::GET_HANDLE +ACE_Event_Handler_T::handle_get (void) +{ + ACE_TRACE ("ACE_Event_Handler_T::handle_get"); + return this->get_handle_; +} + +template ACE_INLINE void +ACE_Event_Handler_T::handle_get (typename ACE_Event_Handler_T::GET_HANDLE h) +{ + ACE_TRACE ("ACE_Event_Handler_T::handle_get"); + this->get_handle_ = h; +} + +template ACE_INLINE typename ACE_Event_Handler_T::SET_HANDLE +ACE_Event_Handler_T::handle_set (void) +{ + ACE_TRACE ("ACE_Event_Handler_T::handle_set"); + return this->set_handle_; +} + +template ACE_INLINE void +ACE_Event_Handler_T::handle_set (typename ACE_Event_Handler_T::SET_HANDLE h) +{ + ACE_TRACE ("ACE_Event_Handler_T::handle_set"); + this->set_handle_ = h; +} + +template ACE_INLINE typename ACE_Event_Handler_T::IO_HANDLER +ACE_Event_Handler_T::input_handler (void) +{ + ACE_TRACE ("ACE_Event_Handler_T::input_handler"); + return this->input_handler_; +} + +template ACE_INLINE void +ACE_Event_Handler_T::input_handler (typename ACE_Event_Handler_T::IO_HANDLER h) +{ + ACE_TRACE ("ACE_Event_Handler_T::input_handler"); + this->input_handler_ = h; +} + +template ACE_INLINE typename ACE_Event_Handler_T::IO_HANDLER +ACE_Event_Handler_T::output_handler (void) +{ + ACE_TRACE ("ACE_Event_Handler_T::output_handler"); + return this->output_handler_; +} + +template ACE_INLINE void +ACE_Event_Handler_T::output_handler (typename ACE_Event_Handler_T::IO_HANDLER h) +{ + ACE_TRACE ("ACE_Event_Handler_T::output_handler"); + this->output_handler_ = h; +} + +template ACE_INLINE typename ACE_Event_Handler_T::IO_HANDLER +ACE_Event_Handler_T::except_handler (void) +{ + ACE_TRACE ("ACE_Event_Handler_T::except_handler"); + return this->except_handler_; +} + +template ACE_INLINE void +ACE_Event_Handler_T::except_handler (typename ACE_Event_Handler_T::IO_HANDLER h) +{ + ACE_TRACE ("ACE_Event_Handler_T::except_handler"); + this->except_handler_ = h; +} + +template ACE_INLINE typename ACE_Event_Handler_T::TO_HANDLER +ACE_Event_Handler_T::to_handler (void) +{ + ACE_TRACE ("ACE_Event_Handler_T::to_handler"); + return this->to_handler_; +} + +template ACE_INLINE void +ACE_Event_Handler_T::to_handler (typename ACE_Event_Handler_T::TO_HANDLER h) +{ + ACE_TRACE ("ACE_Event_Handler_T::to_handler"); + this->to_handler_ = h; +} + +template ACE_INLINE typename ACE_Event_Handler_T::CL_HANDLER +ACE_Event_Handler_T::cl_handler (void) +{ + ACE_TRACE ("ACE_Event_Handler_T::cl_handler"); + return this->cl_handler_; +} + +template ACE_INLINE void +ACE_Event_Handler_T::cl_handler (typename ACE_Event_Handler_T::CL_HANDLER h) +{ + ACE_TRACE ("ACE_Event_Handler_T::cl_handler"); + this->cl_handler_ = h; +} + +template ACE_INLINE typename ACE_Event_Handler_T::SIG_HANDLER +ACE_Event_Handler_T::sig_handler (void) +{ + ACE_TRACE ("ACE_Event_Handler_T::sig_handler"); + return this->sig_handler_; +} + +template ACE_INLINE void +ACE_Event_Handler_T::sig_handler (typename ACE_Event_Handler_T::SIG_HANDLER h) +{ + ACE_TRACE ("ACE_Event_Handler_T::sig_handler"); + this->sig_handler_ = h; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Exception_Macros.h b/ACE/ace/Exception_Macros.h new file mode 100644 index 00000000000..7efc532f93a --- /dev/null +++ b/ACE/ace/Exception_Macros.h @@ -0,0 +1,55 @@ +// -*- C++ -*- + +// ============================================================================ +/** + * @file Exception_Macros.h + * + * $Id$ + * + * Writing code that is portable between platforms with or without + * native C++ exceptions is hard. The following macros offer some + * help on this task. + * + * @author Nanbor Wang + * @author Aniruddha Gokhale + * @author Carlos O'Ryan + * @author Krishnakumar B , et al. + */ +// ============================================================================ + +// Macros for handling exceptions. + +#ifndef ACE_EXCEPTION_MACROS_H +#define ACE_EXCEPTION_MACROS_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +# if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +# endif /* ACE_LACKS_PRAGMA_ONCE */ + +// By default, if the compiler supports native exception handling, assume +// CORBA also support native exception handling. But it can be disabled by +// defining ACE_CORBA_HAS_EXCEPTIONS=0. If the compiler does not support +// exceptions handling, make sure native exception handling is disabled. +#if defined (ACE_HAS_EXCEPTIONS) +# if defined (ACE_CORBA_HAS_EXCEPTIONS) +# if (ACE_CORBA_HAS_EXCEPTIONS == 0) +# undef ACE_USES_NATIVE_EXCEPTIONS +# else /* ACE_CORBA_HAS_EXCEPTIONS != 0 */ +# define ACE_USES_NATIVE_EXCEPTIONS +# endif /* ACE_CORBA_HAS_EXCEPTIONS == 0 */ +# else +# define ACE_USES_NATIVE_EXCEPTIONS +# define ACE_CORBA_HAS_EXCEPTIONS +# endif /* ACE_CORBA_HAS_EXCEPTIONS */ +#else /* ! ACE_HAS_EXCEPTIONS */ +# undef ACE_CORBA_HAS_EXCEPTIONS +# undef ACE_USES_NATIVE_EXCEPTIONS +#endif /* ACE_HAS_EXCEPTIONS */ + +#include /**/ "ace/post.h" + +#endif /* ACE_EXCEPTION_MACROS_H */ diff --git a/ACE/ace/FIFO.cpp b/ACE/ace/FIFO.cpp new file mode 100644 index 00000000000..22172e376f7 --- /dev/null +++ b/ACE/ace/FIFO.cpp @@ -0,0 +1,78 @@ +// $Id$ + +#include "ace/FIFO.h" + +#if !defined (__ACE_INLINE__) +#include "ace/FIFO.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/Log_Msg.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_errno.h" +#include "ace/OS_NS_sys_stat.h" +#include "ace/OS_NS_fcntl.h" + +ACE_RCSID(ace, FIFO, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_FIFO) + +void +ACE_FIFO::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_FIFO::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("rendezvous_ = %s"), this->rendezvous_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +int +ACE_FIFO::open (const ACE_TCHAR *r, int flags, mode_t perms, + LPSECURITY_ATTRIBUTES sa) +{ + ACE_TRACE ("ACE_FIFO::open"); + ACE_OS::strsncpy (this->rendezvous_, r, MAXPATHLEN); + + if ((flags & O_CREAT) != 0 + && ACE_OS::mkfifo (this->rendezvous_, perms) == -1 + && !(errno == EEXIST)) + return -1; + + this->set_handle (ACE_OS::open (this->rendezvous_, flags, 0, sa)); + return this->get_handle () == ACE_INVALID_HANDLE ? -1 : 0; +} + +ACE_FIFO::ACE_FIFO (const ACE_TCHAR *fifo_name, + int flags, + mode_t perms, + LPSECURITY_ATTRIBUTES sa) +{ + ACE_TRACE ("ACE_FIFO::ACE_FIFO"); + if (this->open (fifo_name, flags, perms, sa) == -1) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("ACE_FIFO"))); +} + +ACE_FIFO::ACE_FIFO (void) +{ +// ACE_TRACE ("ACE_FIFO::ACE_FIFO"); +} + +int +ACE_FIFO::close (void) +{ + ACE_TRACE ("ACE_FIFO::close"); + int result = 0; + + if (this->get_handle () != ACE_INVALID_HANDLE) + { + result = ACE_OS::close (this->get_handle ()); + this->set_handle (ACE_INVALID_HANDLE); + } + return result; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FIFO.h b/ACE/ace/FIFO.h new file mode 100644 index 00000000000..3866b0e4eb8 --- /dev/null +++ b/ACE/ace/FIFO.h @@ -0,0 +1,85 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file FIFO.h + * + * $Id$ + * + * @author Doug Schmidt + */ +//========================================================================== + + +#ifndef ACE_FIFO_H +#define ACE_FIFO_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/IPC_SAP.h" +#include "ace/os_include/os_limits.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_FIFO + * + * @brief Abstract base class for UNIX FIFOs + * + * UNIX FIFOs are also known Named Pipes, which are totally + * unrelated to Win32 Named Pipes. If you want to use a local + * IPC mechanism that will be portable to both UNIX and Win32, + * take a look at the classes. + */ +class ACE_Export ACE_FIFO : public ACE_IPC_SAP +{ +public: + /// Open up the named pipe on the in accordance with the + /// flags. + int open (const ACE_TCHAR *rendezvous, int flags, mode_t perms, + LPSECURITY_ATTRIBUTES sa = 0); + + /// Close down the ACE_FIFO without removing the rendezvous point. + int close (void); + + /// Close down the ACE_FIFO and remove the rendezvous point from the + /// file system. + int remove (void); + + /// Return the local address of this endpoint. + int get_local_addr (const ACE_TCHAR *&rendezvous) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + // = Make these protected to ensure that the class is "abstract." + /// Default constructor. + ACE_FIFO (void); + + /// Open up the named pipe on the in accordance with the + /// flags. + ACE_FIFO (const ACE_TCHAR *rendezvous, int flags, mode_t perms, + LPSECURITY_ATTRIBUTES sa = 0); + +private: + /// Rendezvous point in the file system. + ACE_TCHAR rendezvous_[MAXPATHLEN + 1]; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/FIFO.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_FIFO_H */ diff --git a/ACE/ace/FIFO.inl b/ACE/ace/FIFO.inl new file mode 100644 index 00000000000..149ed11318b --- /dev/null +++ b/ACE/ace/FIFO.inl @@ -0,0 +1,25 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/OS_NS_unistd.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE int +ACE_FIFO::get_local_addr (const ACE_TCHAR *&r) const +{ + ACE_TRACE ("ACE_FIFO::get_local_addr"); + r = this->rendezvous_; + return 0; +} + +ACE_INLINE int +ACE_FIFO::remove (void) +{ + ACE_TRACE ("ACE_FIFO::remove"); + int const result = this->close (); + return ACE_OS::unlink (this->rendezvous_) == -1 || result == -1 ? -1 : 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FIFO_Recv.cpp b/ACE/ace/FIFO_Recv.cpp new file mode 100644 index 00000000000..ca1305cf71a --- /dev/null +++ b/ACE/ace/FIFO_Recv.cpp @@ -0,0 +1,88 @@ +// $Id$ + +#include "ace/FIFO_Recv.h" +#include "ace/Log_Msg.h" +#include "ace/OS_NS_fcntl.h" + +#if !defined (__ACE_INLINE__) +#include "ace/FIFO_Recv.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, FIFO_Recv, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_FIFO_Recv) + +void +ACE_FIFO_Recv::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_FIFO_Recv::dump"); + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_FIFO::dump (); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("aux_handle_ = %d"), this->aux_handle_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +int +ACE_FIFO_Recv::close (void) +{ + ACE_TRACE ("ACE_FIFO_Recv::close"); + int result = ACE_FIFO::close (); + + if (this->aux_handle_ != ACE_INVALID_HANDLE) + return ACE_OS::close (this->aux_handle_); + else + return result; +} + +// Note that persistent means "open fifo for writing, as well as +// reading." This ensures that the fifo never gets EOF, even if there +// aren't any writers at the moment! + +int +ACE_FIFO_Recv::open (const ACE_TCHAR *fifo_name, + int flags, + mode_t perms, + int persistent, + LPSECURITY_ATTRIBUTES sa) +{ + ACE_TRACE ("ACE_FIFO_Recv::open"); + + if (ACE_FIFO::open (fifo_name, ACE_NONBLOCK | flags, perms, sa) == -1) + return -1; + else if (this->disable (ACE_NONBLOCK) == -1) + return -1; + else if (persistent + && (this->aux_handle_ = ACE_OS::open (fifo_name, O_WRONLY, 0, sa)) == ACE_INVALID_HANDLE) + return -1; + else + return this->get_handle () == ACE_INVALID_HANDLE ? -1 : 0; +} + +ACE_FIFO_Recv::ACE_FIFO_Recv (void) + : aux_handle_ (ACE_INVALID_HANDLE) +{ + ACE_TRACE ("ACE_FIFO_Recv::ACE_FIFO_Recv"); +} + +ACE_FIFO_Recv::ACE_FIFO_Recv (const ACE_TCHAR *fifo_name, + int flags, + mode_t perms, + int persistent, + LPSECURITY_ATTRIBUTES sa) + : aux_handle_ (ACE_INVALID_HANDLE) +{ + ACE_TRACE ("ACE_FIFO_Recv::ACE_FIFO_Recv"); + + if (this->ACE_FIFO_Recv::open (fifo_name, + flags, + perms, + persistent, + sa) == -1) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("ACE_FIFO_Recv"))); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FIFO_Recv.h b/ACE/ace/FIFO_Recv.h new file mode 100644 index 00000000000..fa18cf291a5 --- /dev/null +++ b/ACE/ace/FIFO_Recv.h @@ -0,0 +1,85 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file FIFO_Recv.h + * + * $Id$ + * + * @author Doug Schmidt + */ +//========================================================================== + + +#ifndef ACE_FIFO_RECV_H +#define ACE_FIFO_RECV_H + +#include /**/ "ace/pre.h" + +#include "ace/FIFO.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/os_include/os_fcntl.h" +#include "ace/Default_Constants.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_FIFO_Recv + * + * @brief Receiver side of the bytestream C++ wrapper for UNIX + * FIFOs. + */ +class ACE_Export ACE_FIFO_Recv : public ACE_FIFO +{ +public: + // = Initialization methods. + /// Default constructor. + ACE_FIFO_Recv (void); + + /// Open up a bytestream named pipe for reading. + ACE_FIFO_Recv (const ACE_TCHAR *rendezvous, + int flags = O_CREAT | O_RDONLY, + mode_t perms = ACE_DEFAULT_FILE_PERMS, + int persistent = 1, + LPSECURITY_ATTRIBUTES sa = 0); + + /// Open up a bytestream named pipe for reading. + int open (const ACE_TCHAR *rendezvous, + int flags = O_CREAT | O_RDONLY, + mode_t perms = ACE_DEFAULT_FILE_PERMS, + int persistent = 1, + LPSECURITY_ATTRIBUTES sa = 0); + + /// Close down the named pipe. + int close (void); + + /// Recv @a buf of up to @a len bytes. + ssize_t recv (void *buf, size_t len); + + /// Recv @a buf of exactly @a len bytes (block until done). + ssize_t recv_n (void *buf, size_t len); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// Auxiliary handle that is used to implement persistent FIFOs. + ACE_HANDLE aux_handle_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/FIFO_Recv.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* ACE_FIFO_RECV_H */ diff --git a/ACE/ace/FIFO_Recv.inl b/ACE/ace/FIFO_Recv.inl new file mode 100644 index 00000000000..b5cf96cb56d --- /dev/null +++ b/ACE/ace/FIFO_Recv.inl @@ -0,0 +1,24 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/ACE.h" +#include "ace/OS_NS_unistd.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE ssize_t +ACE_FIFO_Recv::recv (void *buf, size_t len) +{ + ACE_TRACE ("ACE_FIFO_Recv::recv"); + return ACE_OS::read (this->get_handle (), (char *) buf, len); +} + +ACE_INLINE ssize_t +ACE_FIFO_Recv::recv_n (void *buf, size_t n) +{ + ACE_TRACE ("ACE_FIFO_Recv::recv_n"); + return ACE::recv_n (this->get_handle (), buf, n); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FIFO_Recv_Msg.cpp b/ACE/ace/FIFO_Recv_Msg.cpp new file mode 100644 index 00000000000..68d77af8a78 --- /dev/null +++ b/ACE/ace/FIFO_Recv_Msg.cpp @@ -0,0 +1,67 @@ +// $Id$ + +#include "ace/FIFO_Recv_Msg.h" + +#include "ace/Log_Msg.h" + +#if !defined (__ACE_INLINE__) +#include "ace/FIFO_Recv_Msg.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, FIFO_Recv_Msg, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_FIFO_Recv_Msg) + +void +ACE_FIFO_Recv_Msg::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_FIFO_Recv_Msg::dump"); + ACE_FIFO_Recv::dump (); +#endif /* ACE_HAS_DUMP */ +} + +// Note that persistent means "open FIFO for writing, as well as +// reading." This ensures that the FIFO never gets EOF, even if there +// aren't any writers at the moment! + +int +ACE_FIFO_Recv_Msg::open (const ACE_TCHAR *fifo_name, + int flags, + mode_t perms, + int persistent, + LPSECURITY_ATTRIBUTES sa) +{ + ACE_TRACE ("ACE_FIFO_Recv_Msg::open"); + + return ACE_FIFO_Recv::open (fifo_name, + flags, + perms, + persistent, + sa); +} + +ACE_FIFO_Recv_Msg::ACE_FIFO_Recv_Msg (void) +{ + ACE_TRACE ("ACE_FIFO_Recv_Msg::ACE_FIFO_Recv_Msg"); +} + +ACE_FIFO_Recv_Msg::ACE_FIFO_Recv_Msg (const ACE_TCHAR *fifo_name, + int flags, + mode_t perms, + int persistent, + LPSECURITY_ATTRIBUTES sa) +{ + ACE_TRACE ("ACE_FIFO_Recv_Msg::ACE_FIFO_Recv_Msg"); + + if (this->ACE_FIFO_Recv_Msg::open (fifo_name, + flags, + perms, + persistent, + sa) == -1) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("ACE_FIFO_Recv_Msg"))); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FIFO_Recv_Msg.h b/ACE/ace/FIFO_Recv_Msg.h new file mode 100644 index 00000000000..b1c7afe3eb3 --- /dev/null +++ b/ACE/ace/FIFO_Recv_Msg.h @@ -0,0 +1,138 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file FIFO_Recv_Msg.h + * + * $Id$ + * + * @author Doug Schmidt + */ +//============================================================================= + + +#ifndef ACE_FIFO_RECV_MSG_H +#define ACE_FIFO_RECV_MSG_H +#include /**/ "ace/pre.h" + +#include "ace/FIFO_Recv.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Forward decls +class ACE_Str_Buf; + +/** + * @class ACE_FIFO_Recv_Msg + * + * @brief Receiver side for the record oriented C++ wrapper for UNIX FIFOs. + * + * This method works slightly differently on platforms with the + * @c ACE_HAS_STREAM_PIPES configuration setting than those without. + * With ACE_HAS_STREAM_PIPES, the @c getmsg() system function is used + * and it preserves message boundaries internally. Without + * @c ACE_HAS_STREAM_PIPES, the message boundaries are emulated by + * this class and ACE_FIFO_Send_Msg cooperating. The sending class + * first writes an integer number of bytes in the message, then the + * message. ACE_FIFO_Recv_Msg reads the count, then the data. + * The operational differences occur primarily when a message is larger + * than what a caller of this class requests. See recv() for details. + */ +class ACE_Export ACE_FIFO_Recv_Msg : public ACE_FIFO_Recv +{ +public: + // = Initialization methods. + /// Default constructor. + ACE_FIFO_Recv_Msg (void); + + /// Open up a record-oriented named pipe for reading. + ACE_FIFO_Recv_Msg (const ACE_TCHAR *rendezvous, + int flags = O_CREAT | O_RDONLY, + mode_t perms = ACE_DEFAULT_FILE_PERMS, + int persistent = 1, + LPSECURITY_ATTRIBUTES sa = 0); + + /// Open up a record-oriented named pipe for reading. + int open (const ACE_TCHAR *rendezvous, + int flags = O_CREAT | O_RDONLY, + mode_t perms = ACE_DEFAULT_FILE_PERMS, + int persistent = 1, + LPSECURITY_ATTRIBUTES sa = 0); + + /// Receive a message based on attributes in an ACE_Str_Buf. + /** + * @param msg Reference to an ACE_Str_Buf whose @c buf member points + * to the memory to receive the data and @c maxlen member + * contains the maximum number of bytes to receive. + * On return after successfully reading data, the + * @c len member contains the number of bytes received and + * placed in the buffer pointed to by @c msg.buf. + * + * @retval -1 Error; consult @c errno for specific error number. + * @return If the @c ACE_HAS_STREAM_PIPES configuration setting is + * defined, the return value is the number of bytes received + * in the message and will be the same as @c buf.len. + * The return value from the @c getmsg() system function + * is discarded. + * If @c ACE_HAS_STREAM_PIPES is not defined, the number + * of bytes in the message read from the FIFO is returned. + * If the message is larger than the maximum length + * requested in @c msg.maxlen, the return value reflects + * the entire message length, and the @c msg.len member + * reflects how many bytes were actually placed in the + * caller's buffer. Any part of the message longer than + * @c msg.maxlen is discarded. + */ + ssize_t recv (ACE_Str_Buf &msg); + + /// Receive a message based on buffer pointer and maximum size. + /** + * @param buf Pointer to the memory to receive the data. + * @param len The maximum number of bytes to receive. + * + * @retval -1 Error; consult @c errno for specific error number. + * @return The number of bytes received in the message. For messages + * that are larger than the requested maximum size, the + * behavior is different depending on the @c ACE_HAS_STREAM_PIPES + * configuration setting. With @c ACE_HAS_STREAM_PIPES, + * the return value will be the same as @arg len (this is + * also possible if the message is exactly the same length + * as @arg len, and the two cases are indistinguishable). + * Without @c ACE_HAS_STREAM_PIPES, the return value is + * the total length of the message, including bytes in + * excess of @arg len. The excess bytes are discarded. + */ + ssize_t recv (void *buf, size_t len); + +#if defined (ACE_HAS_STREAM_PIPES) + /// Recv and message via Stream pipes. + ssize_t recv (ACE_Str_Buf *data, + ACE_Str_Buf *cntl, + int *flags); + + /// Recv and message via Stream pipes in "band" mode. + ssize_t recv (int *band, + ACE_Str_Buf *data, + ACE_Str_Buf *cntl, + int *flags); +#endif /* ACE_HAS_STREAM_PIPES */ + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/FIFO_Recv_Msg.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_FIFO_RECV_MSG_H */ diff --git a/ACE/ace/FIFO_Recv_Msg.inl b/ACE/ace/FIFO_Recv_Msg.inl new file mode 100644 index 00000000000..bab21a7e20e --- /dev/null +++ b/ACE/ace/FIFO_Recv_Msg.inl @@ -0,0 +1,111 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/Min_Max.h" +#include "ace/OS_NS_stropts.h" + +#if !defined (ACE_HAS_STREAM_PIPES) +#include "ace/OS_NS_unistd.h" +#endif + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE ssize_t +ACE_FIFO_Recv_Msg::recv (ACE_Str_Buf &recv_msg) +{ + ACE_TRACE ("ACE_FIFO_Recv_Msg::recv"); +#if defined (ACE_HAS_STREAM_PIPES) + int i = 0; + if (ACE_OS::getmsg (this->get_handle (), + (strbuf *) 0, + (strbuf *) &recv_msg, + &i) == -1) + return -1; + else + return recv_msg.len; +#else /* Do the ol' 2-read trick... */ + if (ACE_OS::read (this->get_handle (), + (char *) &recv_msg.len, + sizeof recv_msg.len) != sizeof recv_msg.len) + return -1; + else + { + size_t remaining = static_cast (recv_msg.len); + size_t requested = static_cast (recv_msg.maxlen); + ssize_t recv_len = ACE_OS::read (this->get_handle (), + (char *) recv_msg.buf, + ACE_MIN (remaining, requested)); + if (recv_len == -1) + return -1; + // Tell caller what's really in the buffer. + recv_msg.len = static_cast (recv_len); + + // If there are more bytes remaining in the message, read them and + // throw them away. Leaving them in the FIFO would make it difficult + // to find the start of the next message in the fifo. + // Since the ACE_HAS_STREAM_PIPES version of this method doesn't + // return getmsg()'s indication of "data remaining", don't worry about + // saving the indication here either to read the remainder later. + size_t total_msg_size = remaining; + remaining -= recv_len; + while (remaining > 0) + { + const size_t throw_away = 1024; + char dev_null[throw_away]; + recv_len = ACE_OS::read (this->get_handle (), + dev_null, + ACE_MIN (remaining, throw_away)); + if (recv_len == -1) + break; + remaining -= recv_len; + } + return total_msg_size; + } +#endif /* ACE_HAS_STREAM_PIPES */ +} + +ACE_INLINE ssize_t +ACE_FIFO_Recv_Msg::recv (void *buf, size_t max_len) +{ + ACE_TRACE ("ACE_FIFO_Recv_Msg::recv"); + ACE_Str_Buf recv_msg ((char *) buf, 0, static_cast (max_len)); + + return this->recv (recv_msg); +} + +#if defined (ACE_HAS_STREAM_PIPES) +ACE_INLINE ssize_t +ACE_FIFO_Recv_Msg::recv (ACE_Str_Buf *data, + ACE_Str_Buf *cntl, + int *flags) +{ + ACE_TRACE ("ACE_FIFO_Recv_Msg::recv"); + if (ACE_OS::getmsg (this->get_handle (), + (strbuf *) cntl, + (strbuf *) data, + flags) == -1) + return -1; + else + return (cntl == 0 ? 0 : cntl->len) + (data == 0 ? 0 : data->len); +} + +ACE_INLINE ssize_t +ACE_FIFO_Recv_Msg::recv (int *band, + ACE_Str_Buf *data, + ACE_Str_Buf *cntl, + int *flags) +{ + ACE_TRACE ("ACE_FIFO_Recv_Msg::recv"); + if (ACE_OS::getpmsg (this->get_handle (), + (strbuf *) cntl, + (strbuf *) data, + band, + flags) == -1) + return -1; + else + return (cntl == 0 ? 0 : cntl->len) + (data == 0 ? 0 : data->len); +} +#endif /* ACE_HAS_STREAM_PIPES */ + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FIFO_Send.cpp b/ACE/ace/FIFO_Send.cpp new file mode 100644 index 00000000000..47a3c90e814 --- /dev/null +++ b/ACE/ace/FIFO_Send.cpp @@ -0,0 +1,58 @@ +// $Id$ + +#include "ace/FIFO_Send.h" +#include "ace/Log_Msg.h" + +#if !defined (__ACE_INLINE__) +#include "ace/FIFO_Send.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, FIFO_Send, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_FIFO_Send) + +void +ACE_FIFO_Send::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_FIFO_Send::dump"); + ACE_FIFO::dump (); +#endif /* ACE_HAS_DUMP */ +} + +ACE_FIFO_Send::ACE_FIFO_Send (void) +{ +// ACE_TRACE ("ACE_FIFO_Send::ACE_FIFO_Send"); +} + +int +ACE_FIFO_Send::open (const ACE_TCHAR *rendezvous_name, + int flags, + mode_t perms, + LPSECURITY_ATTRIBUTES sa) +{ + ACE_TRACE ("ACE_FIFO_Send::open"); + return ACE_FIFO::open (rendezvous_name, + flags | O_WRONLY, + perms, + sa); +} + +ACE_FIFO_Send::ACE_FIFO_Send (const ACE_TCHAR *fifo_name, + int flags, + mode_t perms, + LPSECURITY_ATTRIBUTES sa) +{ + ACE_TRACE ("ACE_FIFO_Send::ACE_FIFO_Send"); + if (this->ACE_FIFO_Send::open (fifo_name, + flags, + perms, + sa) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_FIFO_Send::ACE_FIFO_Send"))); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FIFO_Send.h b/ACE/ace/FIFO_Send.h new file mode 100644 index 00000000000..51a14508114 --- /dev/null +++ b/ACE/ace/FIFO_Send.h @@ -0,0 +1,75 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file FIFO_Send.h + * + * $Id$ + * + * @author Doug Schmidt + */ +//========================================================================== + + +#ifndef ACE_FIFO_SEND_H +#define ACE_FIFO_SEND_H + +#include /**/ "ace/pre.h" + +#include "ace/FIFO.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/os_include/os_fcntl.h" +#include "ace/Default_Constants.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_FIFO_Send + * + * @brief Sender side for the bytestream C++ wrapper for UNIX FIFOs + */ +class ACE_Export ACE_FIFO_Send : public ACE_FIFO +{ +public: + // = Initialization methods. + /// Default constructor. + ACE_FIFO_Send (void); + + /// Open up a bytestream named pipe for writing. + ACE_FIFO_Send (const ACE_TCHAR *rendezvous, + int flags = O_WRONLY, + mode_t perms = ACE_DEFAULT_FILE_PERMS, + LPSECURITY_ATTRIBUTES sa = 0); + + /// Open up a bytestream named pipe for writing. + int open (const ACE_TCHAR *rendezvous, + int flags = O_WRONLY, + mode_t perms = ACE_DEFAULT_FILE_PERMS, + LPSECURITY_ATTRIBUTES sa = 0); + + /// Send @a buf of up to @a len bytes. + ssize_t send (const void *buf, size_t len); + + /// Send @a buf of exactly @a len bytes (block until done). + ssize_t send_n (const void *buf, size_t len); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/FIFO_Send.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* ACE_FIFO_SEND_H */ diff --git a/ACE/ace/FIFO_Send.inl b/ACE/ace/FIFO_Send.inl new file mode 100644 index 00000000000..12491058e2c --- /dev/null +++ b/ACE/ace/FIFO_Send.inl @@ -0,0 +1,24 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/ACE.h" +#include "ace/OS_NS_unistd.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE ssize_t +ACE_FIFO_Send::send (const void *buf, size_t len) +{ + ACE_TRACE ("ACE_FIFO_Send::send"); + return ACE_OS::write (this->get_handle (), (const char *) buf, len); +} + +ACE_INLINE ssize_t +ACE_FIFO_Send::send_n (const void *buf, size_t n) +{ + ACE_TRACE ("ACE_FIFO_Send::send_n"); + return ACE::send_n (this->get_handle (), buf, n); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FIFO_Send_Msg.cpp b/ACE/ace/FIFO_Send_Msg.cpp new file mode 100644 index 00000000000..c06b737a6bb --- /dev/null +++ b/ACE/ace/FIFO_Send_Msg.cpp @@ -0,0 +1,80 @@ +// $Id$ + +#include "ace/FIFO_Send_Msg.h" + +#include "ace/Log_Msg.h" +#include "ace/OS_NS_sys_uio.h" + +#if !defined (__ACE_INLINE__) +#include "ace/FIFO_Send_Msg.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, FIFO_Send_Msg, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_FIFO_Send_Msg) + +void +ACE_FIFO_Send_Msg::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_FIFO_Send_Msg::dump"); + ACE_FIFO_Send::dump (); +#endif /* ACE_HAS_DUMP */ +} + +ssize_t +ACE_FIFO_Send_Msg::send (const ACE_Str_Buf &send_msg) +{ + // ACE_TRACE ("ACE_FIFO_Send_Msg::send"); +#if defined (ACE_HAS_STREAM_PIPES) + if (ACE_OS::putmsg (this->get_handle (), + (strbuf *) 0, + (strbuf *) &send_msg, + 0) == -1) + return -1; + else + return send_msg.len; +#else + iovec iov[2]; + + iov[0].iov_base = (char *) &send_msg.len; + iov[0].iov_len = sizeof send_msg.len; + + iov[1].iov_base = (char *) send_msg.buf; + iov[1].iov_len = static_cast (send_msg.len); + + ssize_t sent = ACE_OS::writev (this->get_handle (), iov, 2); + if (sent > 0) + sent -= iov[0].iov_len; // Don't count the length we added. + return sent; +#endif /* ACE_HAS_STREAM_PIPES */ +} + +ACE_FIFO_Send_Msg::ACE_FIFO_Send_Msg (void) +{ +// ACE_TRACE ("ACE_FIFO_Send_Msg::ACE_FIFO_Send_Msg"); +} + +int +ACE_FIFO_Send_Msg::open (const ACE_TCHAR *fifo_name, + int flags, + mode_t perms, + LPSECURITY_ATTRIBUTES sa) +{ + ACE_TRACE ("ACE_FIFO_Send_Msg::open"); + return ACE_FIFO_Send::open (fifo_name, flags | O_WRONLY, perms, sa); +} + +ACE_FIFO_Send_Msg::ACE_FIFO_Send_Msg (const ACE_TCHAR *fifo_name, + int flags, + mode_t perms, + LPSECURITY_ATTRIBUTES sa) +{ + ACE_TRACE ("ACE_FIFO_Send_Msg::ACE_FIFO_Send_Msg"); + if (this->ACE_FIFO_Send_Msg::open (fifo_name, flags, perms, sa) == -1) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("ACE_FIFO_Send_Msg"))); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FIFO_Send_Msg.h b/ACE/ace/FIFO_Send_Msg.h new file mode 100644 index 00000000000..a2e0affce8a --- /dev/null +++ b/ACE/ace/FIFO_Send_Msg.h @@ -0,0 +1,91 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file FIFO_Send_Msg.h + * + * $Id$ + * + * @author Doug Schmidt + */ +//============================================================================= + + +#ifndef ACE_FIFO_SEND_MSG_H +#define ACE_FIFO_SEND_MSG_H +#include /**/ "ace/pre.h" + +#include "ace/FIFO_Send.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_STREAM_PIPES) +# include "ace/OS_NS_stropts.h" +#endif /* ACE_HAS_STREAM_PIPES */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Forward Decls +class ACE_Str_Buf; + +/** + * @class ACE_FIFO_Send_Msg + * + * @brief Sender side for the Record oriented C++ wrapper for UNIX + * FIFOs. + */ +class ACE_Export ACE_FIFO_Send_Msg : public ACE_FIFO_Send +{ +public: + // = Initialization methods. + /// Default constructor. + ACE_FIFO_Send_Msg (void); + + /// Open up a record-oriented named pipe for writing. + ACE_FIFO_Send_Msg (const ACE_TCHAR *rendezvous, + int flags = O_WRONLY, + mode_t perms = ACE_DEFAULT_FILE_PERMS, + LPSECURITY_ATTRIBUTES sa = 0); + + /// Open up a record-oriented named pipe for writing. + int open (const ACE_TCHAR *rendezvous, + int flags = O_WRONLY, + mode_t perms = ACE_DEFAULT_FILE_PERMS, + LPSECURITY_ATTRIBUTES sa = 0); + + /// Send @a buf of up to @a len bytes. + ssize_t send (const ACE_Str_Buf &msg); + + /// Send @a buf of exactly @a len bytes (block until done). + ssize_t send (const void *buf, size_t len); + +#if defined (ACE_HAS_STREAM_PIPES) + /// Send and message via Stream pipes. + ssize_t send (const ACE_Str_Buf *data, + const ACE_Str_Buf *cntl = 0, + int flags = 0); + + /// Send and message via Stream pipes in "band" mode. + ssize_t send (int band, + const ACE_Str_Buf *data, + const ACE_Str_Buf *cntl = 0, + int flags = MSG_BAND); +#endif /* ACE_HAS_STREAM_PIPES */ + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/FIFO_Send_Msg.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_FIFO_SEND_MSG_H */ diff --git a/ACE/ace/FIFO_Send_Msg.inl b/ACE/ace/FIFO_Send_Msg.inl new file mode 100644 index 00000000000..74392656597 --- /dev/null +++ b/ACE/ace/FIFO_Send_Msg.inl @@ -0,0 +1,53 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/OS_NS_stropts.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE ssize_t +ACE_FIFO_Send_Msg::send (const void *buf, size_t len) +{ + ACE_TRACE ("ACE_FIFO_Send_Msg::send"); + ACE_Str_Buf send_msg ((char *) buf, static_cast (len)); + + return this->send (send_msg); +} + +#if defined (ACE_HAS_STREAM_PIPES) +ACE_INLINE ssize_t +ACE_FIFO_Send_Msg::send (const ACE_Str_Buf *data, + const ACE_Str_Buf *cntl, + int flags) +{ + ACE_TRACE ("ACE_FIFO_Send_Msg::send"); + if (ACE_OS::putmsg (this->get_handle (), + (strbuf *) cntl, + (strbuf *) data, + flags) == -1) + return-1; + else + return (cntl == 0 ? 0 : cntl->len) + (data == 0 ? 0 : data->len); +} + +ACE_INLINE ssize_t +ACE_FIFO_Send_Msg::send (int band, + const ACE_Str_Buf *data, + const ACE_Str_Buf *cntl, + int flags) +{ + ACE_TRACE ("ACE_FIFO_Send_Msg::send"); + + if (ACE_OS::putpmsg (this->get_handle (), + (strbuf *) cntl, + (strbuf *) data, + band, + flags) == -1) + return -1; + else + return (cntl == 0 ? 0 : cntl->len) + (data == 0 ? 0 : data->len); +} +#endif /* ACE_HAS_STREAM_PIPES */ + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FILE.cpp b/ACE/ace/FILE.cpp new file mode 100644 index 00000000000..8b3015524e3 --- /dev/null +++ b/ACE/ace/FILE.cpp @@ -0,0 +1,147 @@ +// $Id$ + +/* Defines the member functions for the base class of the ACE_IO_SAP + ACE_FILE abstraction. */ + +#include "ace/FILE.h" + +#include "ace/OS_NS_unistd.h" +#include "ace/OS_NS_sys_stat.h" + +#if !defined (__ACE_INLINE__) +#include "ace/FILE.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, FILE, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_FILE) + +void +ACE_FILE::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_FILE::dump"); + ACE_IO_SAP::dump (); +#endif /* ACE_HAS_DUMP */ +} + +// This is the do-nothing constructor. + +ACE_FILE::ACE_FILE (void) +{ + ACE_TRACE ("ACE_FILE::ACE_FILE"); +} + +// Close the file + +int +ACE_FILE::close (void) +{ + ACE_TRACE ("ACE_FILE::close"); + int result = 0; + + if (this->get_handle () != ACE_INVALID_HANDLE) + { + result = ACE_OS::close (this->get_handle ()); + this->set_handle (ACE_INVALID_HANDLE); + } + return result; +} + +int +ACE_FILE::get_info (ACE_FILE_Info *finfo) +{ + ACE_TRACE ("ACE_FILE::get_info"); + ACE_stat filestatus; + + int const result = ACE_OS::fstat (this->get_handle (), &filestatus); + + if (result == 0) + { + finfo->mode_ = filestatus.st_mode; + finfo->nlink_ = filestatus.st_nlink; + finfo->size_ = filestatus.st_size; + } + + return result; +} + +int +ACE_FILE::get_info (ACE_FILE_Info &finfo) +{ + ACE_TRACE ("ACE_FILE::get_info"); + + return this->get_info (&finfo); +} + +int +ACE_FILE::truncate (ACE_OFF_T length) +{ + ACE_TRACE ("ACE_FILE::truncate"); + return ACE_OS::ftruncate (this->get_handle (), length); +} + +ACE_OFF_T +ACE_FILE::seek (ACE_OFF_T offset, int startpos) +{ + return ACE_OS::lseek (this->get_handle (), offset, startpos); +} + +ACE_OFF_T +ACE_FILE::tell (void) +{ + ACE_TRACE ("ACE_FILE::tell"); + return ACE_OS::lseek (this->get_handle (), 0, SEEK_CUR); +} + +// Return the local endpoint address. + +int +ACE_FILE::get_local_addr (ACE_Addr &addr) const +{ + ACE_TRACE ("ACE_FILE::get_local_addr"); + + // Perform the downcast since had better be an + // . + ACE_FILE_Addr *file_addr = + dynamic_cast (&addr); + + if (file_addr == 0) + return -1; + else + { + *file_addr = this->addr_; + return 0; + } +} + +// Return the same result as . + +int +ACE_FILE::get_remote_addr (ACE_Addr &addr) const +{ + ACE_TRACE ("ACE_FILE::get_remote_addr"); + + return this->get_local_addr (addr); +} + +int +ACE_FILE::remove (void) +{ + ACE_TRACE ("ACE_FILE::remove"); + + this->close (); + return ACE_OS::unlink (this->addr_.get_path_name ()); +} + +int +ACE_FILE::unlink (void) +{ + ACE_TRACE ("ACE_FILE::unlink"); + + return ACE_OS::unlink (this->addr_.get_path_name ()); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FILE.h b/ACE/ace/FILE.h new file mode 100644 index 00000000000..bf8f4561d4f --- /dev/null +++ b/ACE/ace/FILE.h @@ -0,0 +1,139 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file FILE.h + * + * $Id$ + * + * @author Gerhard Lenzer + */ +//============================================================================= + +#ifndef ACE_FILE_H +#define ACE_FILE_H +#include /**/ "ace/pre.h" + +#include "ace/IO_SAP.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/FILE_Addr.h" + +// The following is necessary since many C++ compilers don't support +// typedef'd types inside of classes used as formal template +// arguments... ;-(. Luckily, using the C++ preprocessor I can hide +// most of this nastiness! + +#if defined (ACE_HAS_TEMPLATE_TYPEDEFS) +#define ACE_FILE_CONNECTOR ACE_FILE_Connector +#define ACE_FILE_STREAM ACE_FILE_IO +#else /* TEMPLATES are broken (must be a cfront-based compiler...) */ +#define ACE_FILE_CONNECTOR ACE_FILE_Connector, ACE_FILE_Addr +#define ACE_FILE_STREAM ACE_FILE_IO, ACE_FILE_Addr +#endif /* ACE_TEMPLATE_TYPEDEFS */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_FILE_Info + * + * @brief Abstracts basic OS FILE information. + */ +class ACE_Export ACE_FILE_Info +{ +public: + /// Mode of file + mode_t mode_; + + /// No of links + nlink_t nlink_; + + /// Size of file + ACE_OFF_T size_; +}; + +/** + * @class ACE_FILE + * + * @brief Defines the core methods of the ACE_FILE abstraction. + */ +class ACE_Export ACE_FILE : public ACE_IO_SAP +{ +public: + /// Close the ACE_FILE handle without removing the ACE_FILE from + /// the file system. + int close (void); + + /// Close and remove the ACE_FILE from the file system. + int remove (void); + + /// Remove the ACE_FILE from the file system without closing the + /// ACE_FILE handle. + int unlink (void); + + /// Get information on this ACE_FILE. + int get_info (ACE_FILE_Info *finfo); + + /// Get information on this ACE_FILE. + int get_info (ACE_FILE_Info &finfo); + + /// Set filesize to length byte. + int truncate (ACE_OFF_T length); + + /** + * Sets the file pointer as follows: + * o If is , the pointer is set to @a offset + * bytes. + * + * o If is , the pointer is set to its + * current location plus @a offset. + * + * o If is , the pointer is set to the size + * of the file plus offset. + */ + ACE_OFF_T seek (ACE_OFF_T offset, + int whence = SEEK_CUR); + + /// Return an offset for the file handle. + ACE_OFF_T tell (void); + + /** + * Disable signal @a signum + * This is here to prevent Win32 from + * disabling SPIPE using socket calls + */ + int disable (int signum) const ; + + /// Return the local endpoint address in the referenced ACE_Addr. + /// Returns 0 if successful, else -1. + int get_local_addr (ACE_Addr &) const; + + /// Return the same thing as get_local_addr(). + int get_remote_addr (ACE_Addr &) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// Ensure that this class is only created by the + /// ACE_FILE_Connector. + ACE_FILE (void); + + /// File we are "connected" with... + ACE_FILE_Addr addr_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/FILE.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_FILE_H */ diff --git a/ACE/ace/FILE.inl b/ACE/ace/FILE.inl new file mode 100644 index 00000000000..fdd65029d3a --- /dev/null +++ b/ACE/ace/FILE.inl @@ -0,0 +1,18 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE int +ACE_FILE::disable (int signum) const +{ +#if defined (ACE_WIN32) + ACE_UNUSED_ARG (signum) ; + return 0 ; +#else /* ACE_WIN32 */ + return ACE_IO_SAP::disable (signum) ; +#endif /* ACE_WIN32 */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FILE_Addr.cpp b/ACE/ace/FILE_Addr.cpp new file mode 100644 index 00000000000..79d9db6e296 --- /dev/null +++ b/ACE/ace/FILE_Addr.cpp @@ -0,0 +1,124 @@ +// $Id$ + +#include "ace/FILE_Addr.h" +#include "ace/Lib_Find.h" +#include "ace/Log_Msg.h" +#include "ace/OS_NS_stdlib.h" +#include "ace/OS_NS_string.h" +#include "ace/os_include/sys/os_socket.h" + +#if !defined (__ACE_INLINE__) +#include "ace/FILE_Addr.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, FILE_Addr, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_FILE_Addr) + +ACE_FILE_Addr::ACE_FILE_Addr (void) + : ACE_Addr (AF_FILE, sizeof this->filename_ / sizeof (ACE_TCHAR)) +{ + this->filename_[0] = '\0'; +} + +int +ACE_FILE_Addr::set (const ACE_FILE_Addr &sa) +{ + if (sa.get_type () == AF_ANY) + { +#if defined (ACE_DEFAULT_TEMP_FILE) + // Create a temporary file. + ACE_OS::strcpy (this->filename_, + ACE_DEFAULT_TEMP_FILE); +#else /* ACE_DEFAULT_TEMP_FILE */ + if (ACE::get_temp_dir (this->filename_, MAXPATHLEN - 15) == -1) + // -15 for ace-file-XXXXXX + { + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("Temporary path too long, ") + ACE_TEXT ("defaulting to current directory\n"))); + this->filename_[0] = 0; + } + + // Add the filename to the end + ACE_OS::strcat (this->filename_, ACE_TEXT ("ace-fileXXXXXX")); + +#endif /* ACE_DEFAULT_TEMP_FILE */ + + if (ACE_OS::mktemp (this->filename_) == 0) + return -1; + this->base_set (AF_FILE, + static_cast (ACE_OS::strlen (this->filename_) + 1)); + } + else + { + (void)ACE_OS::strsncpy (this->filename_, sa.filename_, sa.get_size ()); + + this->base_set (sa.get_type (), sa.get_size ()); + } + return 0; +} + +// Copy constructor. + +ACE_FILE_Addr::ACE_FILE_Addr (const ACE_FILE_Addr &sa) + : ACE_Addr (AF_FILE, sizeof this->filename_) +{ + this->set (sa); +} + +int +ACE_FILE_Addr::set (const ACE_TCHAR *filename) +{ + this->ACE_Addr::base_set (AF_FILE, + static_cast (ACE_OS::strlen (filename) + 1)); + (void) ACE_OS::strsncpy (this->filename_, + filename, + sizeof this->filename_ / sizeof (ACE_TCHAR)); + return 0; +} + +ACE_FILE_Addr & +ACE_FILE_Addr::operator= (const ACE_FILE_Addr &sa) +{ + if (this != &sa) + this->set (sa); + return *this; +} + +// Create a ACE_Addr from a ACE_FILE pathname. + +ACE_FILE_Addr::ACE_FILE_Addr (const ACE_TCHAR *filename) +{ + this->set (filename); +} + +int +ACE_FILE_Addr::addr_to_string (ACE_TCHAR *s, size_t len) const +{ + ACE_OS::strsncpy (s, this->filename_, len); + return 0; +} + +// Return the address. + +void * +ACE_FILE_Addr::get_addr (void) const +{ + return (void *)&this->filename_; +} + +void +ACE_FILE_Addr::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_FILE_Addr::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("filename_ = %s"), this->filename_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FILE_Addr.h b/ACE/ace/FILE_Addr.h new file mode 100644 index 00000000000..2fa9e0f4ae4 --- /dev/null +++ b/ACE/ace/FILE_Addr.h @@ -0,0 +1,89 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file FILE_Addr.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_FILE_ADDR_H +#define ACE_FILE_ADDR_H +#include /**/ "ace/pre.h" + +#include "ace/Addr.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Flag_Manip.h" +#include "ace/os_include/os_dirent.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_FILE_Addr + * + * @brief Defines the FILE address family address format. + */ +class ACE_Export ACE_FILE_Addr : public ACE_Addr +{ +public: + // = Initialization methods. + /// Default constructor. + ACE_FILE_Addr (void); + + /// Copy constructor. + ACE_FILE_Addr (const ACE_FILE_Addr &sa); + + /// Acts like a copy constructor. If @a sa == ACE_Addr::sap_any then + /// create a temporary filename using ACE_OS::mktemp. + int set (const ACE_FILE_Addr &sa); + + /// Create a ACE_FILE_Addr from a pathname. + explicit ACE_FILE_Addr (const ACE_TCHAR *filename); + + /// Create a ACE_FILE_Addr from a pathname. + int set (const ACE_TCHAR *filename); + + /// Assignment operator. + ACE_FILE_Addr &operator= (const ACE_FILE_Addr &); + + /// Return a pointer to the address. + virtual void *get_addr (void) const; + + /// Transform the current address into string format. + virtual int addr_to_string (ACE_TCHAR *addr, size_t) const; + + /// Compare two addresses for equality. + bool operator == (const ACE_FILE_Addr &SAP) const; + + /// Compare two addresses for inequality. + bool operator != (const ACE_FILE_Addr &SAP) const; + + /// Return the path name used for the rendezvous point. + const ACE_TCHAR *get_path_name (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// Name of the file. + ACE_TCHAR filename_[MAXPATHLEN + 1]; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/FILE_Addr.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_FILE_ADDR_H */ diff --git a/ACE/ace/FILE_Addr.inl b/ACE/ace/FILE_Addr.inl new file mode 100644 index 00000000000..e03cd2ab156 --- /dev/null +++ b/ACE/ace/FILE_Addr.inl @@ -0,0 +1,34 @@ +// -*- C++ -*- +// +// $Id$ + + +#include "ace/SString.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Compare two addresses for equality. + +ACE_INLINE bool +ACE_FILE_Addr::operator == (const ACE_FILE_Addr &sap) const +{ + return ACE_OS::strcmp (this->filename_, sap.filename_) == 0; +} + +// Compare two addresses for inequality. + +ACE_INLINE bool +ACE_FILE_Addr::operator != (const ACE_FILE_Addr &sap) const +{ + return !((*this) == sap); // This is lazy, of course... ;-) +} + +// Return the path name used for the rendezvous point. + +ACE_INLINE const ACE_TCHAR * +ACE_FILE_Addr::get_path_name (void) const +{ + return this->filename_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FILE_Connector.cpp b/ACE/ace/FILE_Connector.cpp new file mode 100644 index 00000000000..c136b0b47eb --- /dev/null +++ b/ACE/ace/FILE_Connector.cpp @@ -0,0 +1,84 @@ +// $Id$ + +#include "ace/FILE_Connector.h" +#include "ace/Handle_Ops.h" +#include "ace/OS_NS_stdlib.h" + +#if !defined (__ACE_INLINE__) +#include "ace/FILE_Connector.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, FILE_Connector, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_FILE_Connector) + +void +ACE_FILE_Connector::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_FILE_Connector::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_FILE_Connector::ACE_FILE_Connector (void) +{ + ACE_TRACE ("ACE_FILE_Connector::ACE_FILE_Connector"); +} + +int +ACE_FILE_Connector::connect (ACE_FILE_IO &new_io, + const ACE_FILE_Addr &remote_sap, + ACE_Time_Value *timeout, + const ACE_Addr &, + int, + int flags, + int perms) +{ + ACE_TRACE ("ACE_FILE_Connector::connect"); + ACE_ASSERT (new_io.get_handle () == ACE_INVALID_HANDLE); + + ACE_HANDLE handle = ACE_INVALID_HANDLE; + + // Check to see if caller has requested that we create the filename. + if (reinterpret_cast ( + const_cast (remote_sap)) == ACE_Addr::sap_any) + { + // Create a new temporary file. + // Use ACE_OS::mkstemp() if it is available since it avoids a + // race condition, and subsequently a security hole due to that + // race condition (specifically, a denial-of-service attack). + // + // However, using mkstemp() prevents us from doing a timed open + // since it opens the file for us. Better to avoid the race + // condition. + char filename[] = "ace-file-XXXXXX"; + + handle = ACE_OS::mkstemp (filename); // mkstemp() replaces "XXXXXX" + + if (handle == ACE_INVALID_HANDLE + || new_io.addr_.set (ACE_TEXT_CHAR_TO_TCHAR (filename)) != 0) + return -1; + + new_io.set_handle (handle); + + return 0; + } + else + new_io.addr_ = remote_sap; // class copy. + + handle = ACE::handle_timed_open (timeout, + new_io.addr_.get_path_name (), + flags, + perms); + + new_io.set_handle (handle); + return handle == ACE_INVALID_HANDLE ? -1 : 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FILE_Connector.h b/ACE/ace/FILE_Connector.h new file mode 100644 index 00000000000..b02b01e7dbb --- /dev/null +++ b/ACE/ace/FILE_Connector.h @@ -0,0 +1,113 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file FILE_Connector.h + * + * $Id$ + * + * @author Doug Schmidt + */ +//============================================================================= + +#ifndef ACE_FILE_CONNECTOR_H +#define ACE_FILE_CONNECTOR_H +#include /**/ "ace/pre.h" + +#include "ace/FILE_IO.h" +#include "ace/Log_Msg.h" +#include "ace/os_include/os_fcntl.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_FILE_Connector + * + * @brief Defines an active connection factory for the ACE_FILE wrappers. + * + * Note that the O_APPEND flag is only partly supported on Win32. If + * you specify O_APPEND, then the file pointer will be positioned at + * the end of the file initially during open, but it is not + * re-positioned at the end prior to each write, as specified by + * POSIX. This is generally good enough for typical situations, but + * it is ``not quite right'' in its semantics. + */ +class ACE_Export ACE_FILE_Connector +{ +public: + // = Initialization methods. + /// Default constructor. + ACE_FILE_Connector (void); + + /** + * Actively ``connect'' and produce a @a new_io ACE_FILE_IO object + * if things go well. The @a remote_sap is the file that we are + * trying to create/open. If it's the default value of + * ACE_Addr::sap_any then the user is letting the OS create the + * filename (via ). The @a timeout is the amount of + * time to wait to create/open the file. If it's 0 then we block + * indefinitely. If *timeout == {0, 0} then the file is created + * using non-blocking mode. If *timeout > {0, 0} then this is the + * maximum amount of time to wait before timing out. The + * @a local_sap and @a reuse_addr parameters are ignored. The @a flags + * and @a perms arguments are passed down to the + * method. + */ + ACE_FILE_Connector (ACE_FILE_IO &new_io, + const ACE_FILE_Addr &remote_sap, + ACE_Time_Value *timeout = 0, + const ACE_Addr &local_sap = ACE_Addr::sap_any, + int reuse_addr = 0, + int flags = O_RDWR | O_CREAT, + int perms = ACE_DEFAULT_FILE_PERMS); + + /** + * Actively ``connect'' and produce a @a new_io object + * if things go well. The @a remote_sap is the file that we are + * trying to create/open. If it's the default value of + * ACE_Addr::sap_any then the user is letting the OS create the + * filename (via ). The @a timeout is the amount of + * time to wait to create/open the file. If it's 0 then we block + * indefinitely. If *timeout == {0, 0} then the file is created + * using non-blocking mode. In this case, if the create/open can't + * be done immediately the value of -1 is returned with . If *timeout > {0, 0} then this is the maximum amount of + * time to wait before timing out. If the time expires before the + * connection is made @c errno == ETIME. The @a local_sap and + * @a reuse_addr parameters are ignored. The @a flags and @a perms + * arguments are passed down to the method. + */ + int connect (ACE_FILE_IO &new_io, + const ACE_FILE_Addr &remote_sap, + ACE_Time_Value *timeout = 0, + const ACE_Addr &local_sap = ACE_Addr::sap_any, + int reuse_addr = 0, + int flags = O_RDWR | O_CREAT, + int perms = ACE_DEFAULT_FILE_PERMS); + + /// Resets any event associations on this handle + int reset_new_handle (ACE_HANDLE handle); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + + // = Meta-type "trait" information. + typedef ACE_FILE_Addr PEER_ADDR; + typedef ACE_FILE_IO PEER_STREAM; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/FILE_Connector.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_FILE_CONNECTOR_H */ diff --git a/ACE/ace/FILE_Connector.inl b/ACE/ace/FILE_Connector.inl new file mode 100644 index 00000000000..d598341ba8d --- /dev/null +++ b/ACE/ace/FILE_Connector.inl @@ -0,0 +1,36 @@ +// -*- C++ -*- +// +// $Id$ + +// Creates a Local ACE_FILE. + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_FILE_Connector::ACE_FILE_Connector (ACE_FILE_IO &new_io, + const ACE_FILE_Addr &remote_sap, + ACE_Time_Value *timeout, + const ACE_Addr &local_sap, + int reuse_addr, + int flags, + int perms) +{ + ACE_TRACE ("ACE_FILE_Connector::ACE_FILE_Connector"); + if (this->connect (new_io, remote_sap, timeout, local_sap, + reuse_addr, flags, perms) == ACE_IO_SAP::INVALID_HANDLE + && timeout != 0 && !(errno == EWOULDBLOCK || errno == ETIME)) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("address %s, %p\n"), + remote_sap.get_path_name (), + ACE_TEXT ("ACE_FILE_IO"))); +} + +ACE_INLINE int +ACE_FILE_Connector::reset_new_handle (ACE_HANDLE handle) +{ + ACE_UNUSED_ARG (handle); + // Nothing to do here since the handle is not a socket + return 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FILE_IO.cpp b/ACE/ace/FILE_IO.cpp new file mode 100644 index 00000000000..bf0c41bf418 --- /dev/null +++ b/ACE/ace/FILE_IO.cpp @@ -0,0 +1,142 @@ +// $Id$ + +#include "ace/FILE_IO.h" + +#include "ace/Log_Msg.h" +#include "ace/OS_NS_sys_stat.h" +#include "ace/OS_Memory.h" +#include "ace/Truncate.h" + +#if !defined (__ACE_INLINE__) +#include "ace/FILE_IO.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, FILE_IO, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_FILE_IO) + +void +ACE_FILE_IO::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_FILE_IO::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + this->addr_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +// Simple-minded do nothing constructor. + +ACE_FILE_IO::ACE_FILE_IO (void) +{ + ACE_TRACE ("ACE_FILE_IO::ACE_FILE_IO"); +} + +// Send N char *ptrs and int lengths. Note that the char *'s precede +// the ints (basically, an varargs version of writev). The count N is +// the *total* number of trailing arguments, *not* a couple of the +// number of tuple pairs! + +ssize_t +ACE_FILE_IO::send (size_t n, ...) const +{ + ACE_TRACE ("ACE_FILE_IO::send"); + va_list argp; + int total_tuples = ACE_Utils::truncate_cast (n / 2); + iovec *iovp = 0; +#if defined (ACE_HAS_ALLOCA) + iovp = (iovec *) alloca (total_tuples * sizeof (iovec)); +#else + ACE_NEW_RETURN (iovp, + iovec[total_tuples], + -1); +#endif /* !defined (ACE_HAS_ALLOCA) */ + + va_start (argp, n); + + for (int i = 0; i < total_tuples; i++) + { + iovp[i].iov_base = va_arg (argp, char *); + iovp[i].iov_len = va_arg (argp, int); + } + + ssize_t result = ACE_OS::writev (this->get_handle (), + iovp, + total_tuples); +#if !defined (ACE_HAS_ALLOCA) + delete [] iovp; +#endif /* !defined (ACE_HAS_ALLOCA) */ + va_end (argp); + return result; +} + +// This is basically an interface to ACE_OS::readv, that doesn't use +// the struct iovec explicitly. The ... can be passed as an arbitrary +// number of (char *ptr, int len) tuples. However, the count N is the +// *total* number of trailing arguments, *not* a couple of the number +// of tuple pairs! + +ssize_t +ACE_FILE_IO::recv (size_t n, ...) const +{ + ACE_TRACE ("ACE_FILE_IO::recv"); + va_list argp; + int total_tuples = ACE_Utils::truncate_cast (n / 2); + iovec *iovp = 0; +#if defined (ACE_HAS_ALLOCA) + iovp = (iovec *) alloca (total_tuples * sizeof (iovec)); +#else + ACE_NEW_RETURN (iovp, + iovec[total_tuples], + -1); +#endif /* !defined (ACE_HAS_ALLOCA) */ + + va_start (argp, n); + + for (int i = 0; i < total_tuples; i++) + { + iovp[i].iov_base = va_arg (argp, char *); + iovp[i].iov_len = va_arg (argp, int); + } + + ssize_t const result = ACE_OS::readv (this->get_handle (), + iovp, + total_tuples); +#if !defined (ACE_HAS_ALLOCA) + delete [] iovp; +#endif /* !defined (ACE_HAS_ALLOCA) */ + va_end (argp); + return result; +} + +// Allows a client to read from a file without having to provide a +// buffer to read. This method determines how much data is in the +// file, allocates a buffer of this size, reads in the data, and +// returns the number of bytes read. + +ssize_t +ACE_FILE_IO::recvv (iovec *io_vec) +{ + ACE_TRACE ("ACE_FILE_IO::recvv"); + + io_vec->iov_base = 0; + size_t const length = static_cast (ACE_OS::filesize (this->get_handle ())); + + if (length > 0) + { + ACE_NEW_RETURN (io_vec->iov_base, + char[length], + -1); + io_vec->iov_len = this->recv_n (io_vec->iov_base, + length); + return io_vec->iov_len; + } + else + return length; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/FILE_IO.h b/ACE/ace/FILE_IO.h new file mode 100644 index 00000000000..e975c0cc2c9 --- /dev/null +++ b/ACE/ace/FILE_IO.h @@ -0,0 +1,170 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file FILE_IO.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_FILE_IO_H +#define ACE_FILE_IO_H +#include /**/ "ace/pre.h" + +#include "ace/FILE.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/FILE_Addr.h" + +// Used in the FILE_IO.h file... +#include "ace/os_include/os_stdio.h" +#include "ace/os_include/sys/os_uio.h" + +#if defined (ACE_HAS_STREAM_PIPES) +# include "ace/OS_NS_stropts.h" +#endif /* ACE_HAS_STREAM_PIPES */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Forward decl. +class ACE_Message_Block; +class ACE_Time_Value; + +/** + * @class ACE_FILE_IO + * + * @brief Read/Write operations on Files + */ +class ACE_Export ACE_FILE_IO : public ACE_FILE +{ +public: + friend class ACE_FILE_Connector; + + // = Initialization method. + /// Default constructor. + ACE_FILE_IO (void); + + /// send upto @a n bytes in @a buf. + ssize_t send (const void *buf, size_t n) const; + + /// Recv upto @a n bytes in @a buf. + ssize_t recv (void *buf, size_t n) const; + + /// Send n bytes, keep trying until n are sent. + ssize_t send_n (const void *buf, size_t n) const; + + /// Send all the @a message_blocks chained through their and + /// pointers. This call uses the underlying OS gather-write + /// operation to reduce the domain-crossing penalty. + ssize_t send_n (const ACE_Message_Block *message_block, + const ACE_Time_Value *timeout = 0, + size_t *bytes_transferred = 0); + + /// Recv n bytes, keep trying until n are received. + ssize_t recv_n (void *buf, size_t n) const; + +#if defined (ACE_HAS_STREAM_PIPES) + /// Send bytes via STREAM pipes. + ssize_t send (const ACE_Str_Buf *cntl, + const ACE_Str_Buf *data, + int flags = 0) const; + + /// Recv bytes via STREAM pipes. + ssize_t recv (ACE_Str_Buf *cntl, + ACE_Str_Buf *data, + int *flags) const; + + /// Send bytes via STREAM pipes using "band" mode. + ssize_t send (const ACE_Str_Buf *cntl, + const ACE_Str_Buf *data, + int band, + int flags) const; + + /// Recv bytes via STREAM pipes using "band" mode. + ssize_t recv (ACE_Str_Buf *cntl, + ACE_Str_Buf *data, + int *band, + int *flags) const; + +#endif /* ACE_HAS_STREAM_PIPES */ + + /// Send iovecs via <::writev>. + ssize_t send (const iovec iov[], int n) const; + + /// Recv iovecs via <::readv>. + ssize_t recv (iovec iov[], int n) const; + + /** + * Send N char *ptrs and int lengths. Note that the char *'s + * precede the ints (basically, an varargs version of writev). The + * count N is the *total* number of trailing arguments, *not* a + * couple of the number of tuple pairs! + */ + ssize_t send (size_t n, ...) const; + + /** + * This is an interface to ::readv, that doesn't use the struct + * iovec explicitly. The ... can be passed as an arbitrary number + * of (char *ptr, int len) tuples. However, the count N is the + * *total* number of trailing arguments, *not* a couple of the + * number of tuple pairs! + */ + ssize_t recv (size_t n, ...) const; + + /// Send @a n bytes via Win32 WriteFile using overlapped I/O. + ssize_t send (const void *buf, + size_t n, + ACE_OVERLAPPED *overlapped) const; + + /// Recv @a n bytes via Win32 ReadFile using overlapped I/O. + ssize_t recv (void *buf, + size_t n, + ACE_OVERLAPPED *overlapped) const; + + /// Send an @c iovec of size @a n to the file. + ssize_t sendv (const iovec iov[], + int n) const; + + /** + * Allows a client to read from a file without having to provide a + * buffer to read. This method determines how much data is in the + * file, allocates a buffer of this size, reads in the data, and + * returns the number of bytes read. The caller is responsible for + * deleting the member in the field of using + * delete [] io_vec->iov_base. + */ + ssize_t recvv (iovec *io_vec); + + /// Send an of size @a n to the file. Will block until all + /// bytes are sent or an error occurs. + ssize_t sendv_n (const iovec iov[], + int n) const; + + /// Receive an of size @a n to the file. + ssize_t recvv_n (iovec iov[], + int n) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + + // = Meta-type info + typedef ACE_FILE_Addr PEER_ADDR; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/FILE_IO.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_FILE_IO_H */ diff --git a/ACE/ace/FILE_IO.inl b/ACE/ace/FILE_IO.inl new file mode 100644 index 00000000000..7db33a0c717 --- /dev/null +++ b/ACE/ace/FILE_IO.inl @@ -0,0 +1,152 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/ACE.h" +#include "ace/OS_NS_sys_uio.h" +#include "ace/OS_NS_unistd.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE ssize_t +ACE_FILE_IO::sendv_n (const iovec iov[], int n) const +{ + ACE_TRACE ("ACE_FILE_IO::sendv_n"); + return ACE::writev_n (this->get_handle (), + iov, + n); +} + +ACE_INLINE ssize_t +ACE_FILE_IO::send_n (const ACE_Message_Block *message_block, + const ACE_Time_Value *timeout, + size_t *bytes_transferred) +{ + ACE_TRACE ("ACE_FILE_IO::send_n"); + ACE_UNUSED_ARG (timeout); + return ACE::write_n (this->get_handle (), + message_block, + bytes_transferred); +} + +// Recv an n byte message from the file. + +ACE_INLINE ssize_t +ACE_FILE_IO::recvv_n (iovec iov[], int n) const +{ + ACE_TRACE ("ACE_FILE_IO::recvv_n"); + // @@ Carlos, can you please update this to call the + // new ACE::recvv_n() method that you write? + return ACE_OS::readv (this->get_handle (), + iov, + n); +} + +// Send an of size to the file. + +ACE_INLINE ssize_t +ACE_FILE_IO::sendv (const iovec iov[], int n) const +{ + ACE_TRACE ("ACE_FILE_IO::sendv"); + return ACE_OS::writev (this->get_handle (), iov, n); +} + +// Send exactly N bytes from BUF to this file. Keeping trying until +// this many bytes are sent. + +ACE_INLINE ssize_t +ACE_FILE_IO::send_n (const void *buf, size_t n) const +{ + ACE_TRACE ("ACE_FILE_IO::send_n"); + return ACE::write_n (this->get_handle (), buf, n); +} + +// Receive exactly N bytes from this file into BUF. Keep trying until +// this many bytes are received. + +ACE_INLINE ssize_t +ACE_FILE_IO::recv_n (void *buf, size_t n) const +{ + ACE_TRACE ("ACE_FILE_IO::recv_n"); + return ACE::read_n (this->get_handle (), buf, n); +} + +ACE_INLINE ssize_t +ACE_FILE_IO::send (const void *buf, size_t n) const +{ + ACE_TRACE ("ACE_FILE_IO::send"); + return ACE_OS::write (this->get_handle (), buf, n); +} + +ACE_INLINE ssize_t +ACE_FILE_IO::recv (void *buf, size_t n) const +{ + ACE_TRACE ("ACE_FILE_IO::recv"); + return ACE_OS::read (this->get_handle (), buf, n); +} + +ACE_INLINE ssize_t +ACE_FILE_IO::send (const iovec iov[], int n) const +{ + ACE_TRACE ("ACE_FILE_IO::send"); + return ACE_OS::writev (this->get_handle (), iov, n); +} + +ACE_INLINE ssize_t +ACE_FILE_IO::recv (iovec iov[], int n) const +{ + ACE_TRACE ("ACE_FILE_IO::recv"); + return ACE_OS::readv (this->get_handle (), iov, n); +} + +#if defined (ACE_HAS_STREAM_PIPES) +ACE_INLINE ssize_t +ACE_FILE_IO::recv (ACE_Str_Buf *cntl, ACE_Str_Buf *data, int *band, int *flags) const +{ + ACE_TRACE ("ACE_FILE_IO::recv"); + return ACE_OS::getpmsg (this->get_handle (), (strbuf *) cntl, (strbuf *) data, band, flags); +} + +ACE_INLINE ssize_t +ACE_FILE_IO::send (const ACE_Str_Buf *cntl, const ACE_Str_Buf *data, int band, int flags) const +{ + ACE_TRACE ("ACE_FILE_IO::send"); + return ACE_OS::putpmsg (this->get_handle (), (strbuf *) cntl, (strbuf *) data, band, flags); +} + +ACE_INLINE ssize_t +ACE_FILE_IO::recv (ACE_Str_Buf *cntl, ACE_Str_Buf *data, int *flags) const +{ + ACE_TRACE ("ACE_FILE_IO::recv"); + return ACE_OS::getmsg (this->get_handle (), (strbuf *) cntl, (strbuf *) data, flags); +} + +ACE_INLINE ssize_t +ACE_FILE_IO::send (const ACE_Str_Buf *cntl, const ACE_Str_Buf *data, int flags) const +{ + ACE_TRACE ("ACE_FILE_IO::send"); + return ACE_OS::putmsg (this->get_handle (), (strbuf *) cntl, (strbuf *) data, flags); +} + +ACE_INLINE ssize_t +ACE_FILE_IO::send (const void *buf, size_t n, + ACE_OVERLAPPED *overlapped) const +{ + ACE_TRACE ("ACE_FILE_IO::send"); + return ACE_OS::write (this->get_handle (), + buf, n, + overlapped); +} + +ACE_INLINE ssize_t +ACE_FILE_IO::recv (void *buf, size_t n, + ACE_OVERLAPPED *overlapped) const +{ + ACE_TRACE ("ACE_FILE_IO::recv"); + return ACE_OS::read (this->get_handle (), buf, n, + overlapped); +} + +#endif /* ACE_HAS_STREAM_PIPES */ + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/File_Lock.cpp b/ACE/ace/File_Lock.cpp new file mode 100644 index 00000000000..88935c3a5d7 --- /dev/null +++ b/ACE/ace/File_Lock.cpp @@ -0,0 +1,72 @@ +// $Id$ + +#include "ace/File_Lock.h" +#include "ace/Log_Msg.h" + +#if !defined (__ACE_INLINE__) +#include "ace/File_Lock.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, File_Lock, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_File_Lock) + +void +ACE_File_Lock::dump (void) const +{ +#if defined (ACE_HAS_DUMP) +// ACE_TRACE ("ACE_File_Lock::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + this->lock_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_File_Lock::ACE_File_Lock (ACE_HANDLE h, + int unlink_in_destructor) + : removed_ (0), + unlink_in_destructor_ (unlink_in_destructor) +{ +// ACE_TRACE ("ACE_File_Lock::ACE_File_Lock"); + if (ACE_OS::flock_init (&this->lock_) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_File_Lock::ACE_File_Lock"))); + this->set_handle (h); +} + +ACE_File_Lock::ACE_File_Lock (const ACE_TCHAR *name, + int flags, + mode_t perms, + int unlink_in_destructor) + : unlink_in_destructor_ (unlink_in_destructor) +{ +// ACE_TRACE ("ACE_File_Lock::ACE_File_Lock"); + + if (this->open (name, flags, perms) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p %s\n"), + ACE_TEXT ("ACE_File_Lock::ACE_File_Lock"), + name)); +} + +int +ACE_File_Lock::open (const ACE_TCHAR *name, + int flags, + mode_t perms) +{ +// ACE_TRACE ("ACE_File_Lock::open"); + this->removed_ = 0; + return ACE_OS::flock_init (&this->lock_, flags, name, perms); +} + +ACE_File_Lock::~ACE_File_Lock (void) +{ +// ACE_TRACE ("ACE_File_Lock::~ACE_File_Lock"); + this->remove (this->unlink_in_destructor_); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/File_Lock.h b/ACE/ace/File_Lock.h new file mode 100644 index 00000000000..eec103e1fe0 --- /dev/null +++ b/ACE/ace/File_Lock.h @@ -0,0 +1,170 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file File_Lock.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_FILE_LOCK_H +#define ACE_FILE_LOCK_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/OS_NS_stdio.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_File_Lock + * + * @brief A wrapper around the UNIX file locking mechanism. + * + * Allows us to "adapt" the UNIX file locking mechanisms to work + * with all of our Guard stuff... + */ +class ACE_Export ACE_File_Lock +{ +public: + /** + * Set the of the File_Lock to @a handle. Note that this + * constructor assumes ownership of the @a handle and will close it + * down in . If you want the @a handle to stay open when + * is called make sure to call on the @a handle. + * If you don't want the file unlinked in the destructor pass a + * zero value for . + */ + ACE_File_Lock (ACE_HANDLE handle = ACE_INVALID_HANDLE, + int unlink_in_destructor = 1); + + /// Open the @a filename with @a flags and @a mode and set the result + /// to . If you don't want the file unlinked in the + /// destructor pass a zero value for . + ACE_File_Lock (const ACE_TCHAR *filename, + int flags, + mode_t mode = 0, + int unlink_in_destructor = 1); + + /// Open the @a filename with @a flags and @a mode and set the result to + /// . + int open (const ACE_TCHAR *filename, + int flags, + mode_t mode = 0); + + /// Remove a File lock by releasing it and closing down the . + ~ACE_File_Lock (void); + + /// Remove a File lock by releasing it and closing down the + /// . If is non-0 then we unlink the file. + int remove (int unlink_file = 1); + + /** + * Note, for interface uniformity with other synchronization + * wrappers we include the method. This is implemented as + * a write-lock to be on the safe-side... + */ + int acquire (short whence = 0, ACE_OFF_T start = 0, ACE_OFF_T len = 1); + + /** + * Note, for interface uniformity with other synchronization + * wrappers we include the method. This is implemented + * as a write-lock to be on the safe-side... Returns -1 on failure. + * If we "failed" because someone else already had the lock, @c errno + * is set to @c EBUSY. + */ + int tryacquire (short whence = 0, ACE_OFF_T start = 0, ACE_OFF_T len = 1); + + /// Unlock a readers/writer lock. + int release (short whence = 0, ACE_OFF_T start = 0, ACE_OFF_T len = 1); + + /// Acquire a write lock, but block if any readers or a + /// writer hold the lock. + int acquire_write (short whence = 0, ACE_OFF_T start = 0, ACE_OFF_T len = 1); + + /** + * Conditionally acquire a write lock (i.e., won't block). Returns + * -1 on failure. If we "failed" because someone else already had + * the lock, @c errno is set to @c EBUSY. + */ + int tryacquire_write (short whence = 0, ACE_OFF_T start = 0, ACE_OFF_T len = 1); + + /** + * Conditionally upgrade to a write lock (i.e., won't block). Returns + * -1 on failure. If we "failed" because someone else already had + * the lock, @c errno is set to @c EBUSY. + */ + int tryacquire_write_upgrade (short whence = 0, + ACE_OFF_T start = 0, + ACE_OFF_T len = 1); + + /** + * Acquire a read lock, but block if a writer hold the lock. + * Returns -1 on failure. If we "failed" because someone else + * already had the lock, @c errno is set to @c EBUSY. + */ + int acquire_read (short whence = 0, ACE_OFF_T start = 0, ACE_OFF_T len = 1); + + /** + * Conditionally acquire a read lock (i.e., won't block). Returns + * -1 on failure. If we "failed" because someone else already had + * the lock, @c errno is set to @c EBUSY. + */ + int tryacquire_read (short whence = 0, ACE_OFF_T start = 0, ACE_OFF_T len = 1); + + /// Get underlying ACE_HANDLE for the file. + ACE_HANDLE get_handle (void) const; + + /** + * Set underlying ACE_HANDLE. Note that this method assumes + * ownership of the and will close it down in . If + * you want the to stay open when is called make + * sure to call on the before closing it. You are + * responsible for the closing the existing before + * overwriting it. + */ + void set_handle (ACE_HANDLE); + + /// Dump state of the object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// Locking structure for OS record locks. + ACE_OS::ace_flock_t lock_; + + /// Keeps track of whether has been called yet to avoid + /// multiple calls, e.g., explicitly and implicitly in the + /// destructor. This flag isn't protected by a lock, so make sure + /// that you don't have multiple threads simultaneously calling + /// on the same object, which is a bad idea anyway... + int removed_; + + /// Keeps track of whether to unlink the underlying file in the + /// destructor. + int unlink_in_destructor_; + +private: + // = Prevent assignment and initialization. + void operator= (const ACE_File_Lock &); + ACE_File_Lock (const ACE_File_Lock &); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/File_Lock.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_FILE_LOCK_H */ diff --git a/ACE/ace/File_Lock.inl b/ACE/ace/File_Lock.inl new file mode 100644 index 00000000000..bef9de9d063 --- /dev/null +++ b/ACE/ace/File_Lock.inl @@ -0,0 +1,96 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE int +ACE_File_Lock::acquire_read (short whence, ACE_OFF_T start, ACE_OFF_T len) +{ +// ACE_TRACE ("ACE_File_Lock::acquire_read"); + return ACE_OS::flock_rdlock (&this->lock_, whence, start, len); +} + +ACE_INLINE int +ACE_File_Lock::tryacquire_read (short whence, ACE_OFF_T start, ACE_OFF_T len) +{ +// ACE_TRACE ("ACE_File_Lock::tryacquire_read"); + return ACE_OS::flock_tryrdlock (&this->lock_, whence, start, len); +} + +ACE_INLINE int +ACE_File_Lock::tryacquire_write (short whence, ACE_OFF_T start, ACE_OFF_T len) +{ +// ACE_TRACE ("ACE_File_Lock::tryacquire_write"); + return ACE_OS::flock_trywrlock (&this->lock_, whence, start, len); +} + +ACE_INLINE int +ACE_File_Lock::tryacquire_write_upgrade (short whence, + ACE_OFF_T start, + ACE_OFF_T len) +{ +// ACE_TRACE ("ACE_File_Lock::tryacquire_write_upgrade"); + return ACE_OS::flock_trywrlock (&this->lock_, whence, start, len); +} + +ACE_INLINE int +ACE_File_Lock::tryacquire (short whence, ACE_OFF_T start, ACE_OFF_T len) +{ +// ACE_TRACE ("ACE_File_Lock::tryacquire"); + return this->tryacquire_write (whence, start, len); +} + +ACE_INLINE int +ACE_File_Lock::acquire_write (short whence, ACE_OFF_T start, ACE_OFF_T len) +{ +// ACE_TRACE ("ACE_File_Lock::acquire_write"); + return ACE_OS::flock_wrlock (&this->lock_, whence, start, len); +} + +ACE_INLINE int +ACE_File_Lock::acquire (short whence, ACE_OFF_T start, ACE_OFF_T len) +{ +// ACE_TRACE ("ACE_File_Lock::acquire"); + return this->acquire_write (whence, start, len); +} + +ACE_INLINE int +ACE_File_Lock::release (short whence, ACE_OFF_T start, ACE_OFF_T len) +{ +// ACE_TRACE ("ACE_File_Lock::release"); + return ACE_OS::flock_unlock (&this->lock_, whence, start, len); +} + +ACE_INLINE int +ACE_File_Lock::remove (int unlink_file) +{ +// ACE_TRACE ("ACE_File_Lock::remove"); + + int result = 0; + + if (this->removed_ == 0) + { + this->removed_ = 1; + result = ACE_OS::flock_destroy (&this->lock_, + unlink_file); + } + return result; +} + +ACE_INLINE ACE_HANDLE +ACE_File_Lock::get_handle (void) const +{ +// ACE_TRACE ("ACE_File_Lock::get_handle"); + return this->lock_.handle_; +} + +ACE_INLINE void +ACE_File_Lock::set_handle (ACE_HANDLE h) +{ +// ACE_TRACE ("ACE_File_Lock::set_handle"); + this->lock_.handle_ = h; + this->removed_ = 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Filecache.cpp b/ACE/ace/Filecache.cpp new file mode 100644 index 00000000000..5122cb6fdc8 --- /dev/null +++ b/ACE/ace/Filecache.cpp @@ -0,0 +1,754 @@ +// $Id$ + +#include "ace/Filecache.h" +#include "ace/Object_Manager.h" +#include "ace/Log_Msg.h" +#include "ace/ACE.h" +#include "ace/Guard_T.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_time.h" +#include "ace/OS_NS_unistd.h" +#include "ace/OS_NS_fcntl.h" +#include "ace/Truncate.h" + +ACE_RCSID (ace, + Filecache, + "$Id$") + +#if defined (ACE_WIN32) +// Specifies no sharing flags. +#define R_MASK ACE_DEFAULT_OPEN_PERMS +#define W_MASK 0 +#else +#define R_MASK S_IRUSR|S_IRGRP|S_IROTH +#define W_MASK S_IRUSR|S_IRGRP|S_IROTH|S_IWUSR|S_IWGRP|S_IWOTH +#endif /* ACE_WIN32 */ + +#if defined (ACE_WIN32) +// See if you can get rid of some of these. +#define READ_FLAGS (FILE_FLAG_SEQUENTIAL_SCAN | \ + FILE_FLAG_OVERLAPPED | \ + O_RDONLY) +// static const int RCOPY_FLAGS = (FILE_FLAG_SEQUENTIAL_SCAN | +// O_RDONLY); +#define WRITE_FLAGS (FILE_FLAG_SEQUENTIAL_SCAN | \ + FILE_FLAG_OVERLAPPED | \ + O_RDWR | O_CREAT | O_TRUNC) +// static const int WCOPY_FLAGS = (FILE_FLAG_SEQUENTIAL_SCAN | +// O_RDWR | O_CREAT | O_TRUNC); +#else +#define READ_FLAGS O_RDONLY +// static const int RCOPY_FLAGS = O_RDONLY; +#define WRITE_FLAGS (O_RDWR | O_CREAT | O_TRUNC) +// static const int WCOPY_FLAGS = O_RDWR | O_CREAT | O_TRUNC; +#endif /* ACE_WIN32 */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// static data members +ACE_Filecache *ACE_Filecache::cvf_ = 0; + +void +ACE_Filecache_Handle::init (void) +{ + this->file_ = 0; + this->handle_ = ACE_INVALID_HANDLE; +} + +ACE_Filecache_Handle::ACE_Filecache_Handle (void) + : file_ (0), handle_ (0), mapit_ (0) +{ + this->init (); +} + +ACE_Filecache_Handle::ACE_Filecache_Handle (const ACE_TCHAR *filename, + ACE_Filecache_Flag mapit) + : file_ (0), handle_ (0), mapit_ (mapit) +{ + this->init (); + // Fetch the file from the Virtual_Filesystem let the + // Virtual_Filesystem do the work of cache coherency. + + // Filecache will also do the acquire, since it holds the lock at + // that time. + this->file_ = ACE_Filecache::instance ()->fetch (filename, mapit); +} + +ACE_Filecache_Handle::ACE_Filecache_Handle (const ACE_TCHAR *filename, + int size, + ACE_Filecache_Flag mapit) + : file_ (0), handle_ (0), mapit_ (mapit) +{ + this->init (); + + if (size == 0) + ACE_Filecache::instance ()->remove (filename); + else + { + // Since this is being opened for a write, simply create a new + // ACE_Filecache_Object now, and let the destructor add it into CVF + // later + + // Filecache will also do the acquire, since it holds the lock at + // that time. + this->file_ = ACE_Filecache::instance ()->create (filename, size); + } +} + +ACE_Filecache_Handle::~ACE_Filecache_Handle (void) +{ + if (this->handle_ != ACE_INVALID_HANDLE) + // this was dup ()'d + ACE_OS::close (this->handle_); + + ACE_Filecache::instance ()->finish (this->file_); +} + +void * +ACE_Filecache_Handle::address (void) const +{ + return this->file_ == 0 ? 0 : this->file_->address (); +} + +ACE_HANDLE +ACE_Filecache_Handle::handle (void) const +{ + if (this->handle_ == ACE_INVALID_HANDLE && this->file_ != 0) + { + ACE_Filecache_Handle *mutable_this = + const_cast (this); + mutable_this->handle_ = ACE_OS::dup (this->file_->handle ()); + } + return this->handle_; +} + +int +ACE_Filecache_Handle::error (void) const +{ + if (this->file_ == 0) + return -1; + else + return this->file_->error (); +} + +ACE_OFF_T +ACE_Filecache_Handle::size (void) const +{ + if (this->file_ == 0) + return -1; + else + return this->file_->size (); +} + +// ------------------ +// ACE_Filecache_Hash +// ------------------ + +#define ACE_Filecache_Hash \ + ACE_Hash_Map_Manager_Ex, ACE_Equal_To, ACE_Null_Mutex> +#define ACE_Filecache_Hash_Entry \ + ACE_Hash_Map_Entry + +template <> +ACE_Filecache_Hash_Entry::ACE_Hash_Map_Entry ( + const ACE_TCHAR *const &ext_id, + ACE_Filecache_Object *const &int_id, + ACE_Filecache_Hash_Entry *next, + ACE_Filecache_Hash_Entry *prev) + : ext_id_ (ext_id + ? ACE_OS::strdup (ext_id) + : ACE_OS::strdup (ACE_TEXT (""))), + int_id_ (int_id), + next_ (next), + prev_ (prev) +{ +} + +template <> +ACE_Filecache_Hash_Entry::ACE_Hash_Map_Entry (ACE_Filecache_Hash_Entry *next, + ACE_Filecache_Hash_Entry *prev) + : ext_id_ (0), + next_ (next), + prev_ (prev) +{ +} + +template <> +ACE_Filecache_Hash_Entry::~ACE_Hash_Map_Entry (void) +{ + ACE_OS::free ((void *) ext_id_); +} + +// We need these template specializations since KEY is defined as a +// ACE_TCHAR*, which doesn't have a hash() or equal() method defined on it. + +template <> +unsigned long +ACE_Filecache_Hash::hash (const ACE_TCHAR *const &ext_id) +{ + return ACE::hash_pjw (ext_id); +} + +template <> +int +ACE_Filecache_Hash::equal (const ACE_TCHAR *const &id1, + const ACE_TCHAR *const &id2) +{ + return ACE_OS::strcmp (id1, id2) == 0; +} + +#undef ACE_Filecache_Hash +#undef ACE_Filecache_Hash_Entry + + +// ------------- +// ACE_Filecache +// ------------- + +ACE_Filecache * +ACE_Filecache::instance (void) +{ + // Double check locking pattern. + if (ACE_Filecache::cvf_ == 0) + { + ACE_SYNCH_RW_MUTEX &lock = + *ACE_Managed_Object::get_preallocated_object + (ACE_Object_Manager::ACE_FILECACHE_LOCK); + ACE_GUARD_RETURN (ACE_SYNCH_RW_MUTEX, ace_mon, lock, 0); + + // @@ James, please check each of the ACE_NEW_RETURN calls to + // make sure that it is safe to return if allocation fails. + if (ACE_Filecache::cvf_ == 0) + ACE_NEW_RETURN (ACE_Filecache::cvf_, + ACE_Filecache, + 0); + } + + return ACE_Filecache::cvf_; +} + +ACE_Filecache::ACE_Filecache (void) + : size_ (ACE_DEFAULT_VIRTUAL_FILESYSTEM_TABLE_SIZE), + hash_ (size_) +{ +} + +ACE_Filecache::~ACE_Filecache (void) +{ +} + +ACE_Filecache_Object * +ACE_Filecache::insert_i (const ACE_TCHAR *filename, + ACE_SYNCH_RW_MUTEX &filelock, + int mapit) +{ + ACE_Filecache_Object *handle = 0; + + if (this->hash_.find (filename, handle) == -1) + { + ACE_NEW_RETURN (handle, + ACE_Filecache_Object (filename, filelock, 0, mapit), + 0); + + // ACE_DEBUG ((LM_DEBUG, ACE_TEXT (" (%t) CVF: creating %s\n"), filename)); + + if (this->hash_.bind (filename, handle) == -1) + { + delete handle; + handle = 0; + } + } + else + handle = 0; + + return handle; +} + +ACE_Filecache_Object * +ACE_Filecache::remove_i (const ACE_TCHAR *filename) +{ + ACE_Filecache_Object *handle = 0; + + // Disassociate file from the cache. + if (this->hash_.unbind (filename, handle) == 0) + { + handle->stale_ = 1; + + // Try a lock. If it succeeds, we can delete it now. + // Otherwise, it will clean itself up later. + if (handle->lock_.tryacquire_write () == 0) + { + delete handle; + handle = 0; + } + } + else + handle = 0; + + return handle; +} + +ACE_Filecache_Object * +ACE_Filecache::update_i (const ACE_TCHAR *filename, + ACE_SYNCH_RW_MUTEX &filelock, + int mapit) +{ + ACE_Filecache_Object *handle = 0; + + handle = this->remove_i (filename); + handle = this->insert_i (filename, filelock, mapit); + + return handle; +} + +int +ACE_Filecache::find (const ACE_TCHAR *filename) +{ + return this->hash_.find (filename); +} + + +ACE_Filecache_Object * +ACE_Filecache::remove (const ACE_TCHAR *filename) +{ + ACE_Filecache_Object *handle = 0; + + ACE_OFF_T loc = ACE::hash_pjw (filename) % this->size_; + ACE_SYNCH_RW_MUTEX &hashlock = this->hash_lock_[loc]; + // ACE_SYNCH_RW_MUTEX &filelock = this->file_lock_[loc]; + + if (this->hash_.find (filename, handle) != -1) + { + ACE_WRITE_GUARD_RETURN (ACE_SYNCH_RW_MUTEX, + ace_mon, + hashlock, + 0); + + return this->remove_i (filename); + } + + return 0; +} + + +ACE_Filecache_Object * +ACE_Filecache::fetch (const ACE_TCHAR *filename, int mapit) +{ + ACE_Filecache_Object *handle = 0; + + ACE_OFF_T loc = ACE::hash_pjw (filename) % this->size_; + ACE_SYNCH_RW_MUTEX &hashlock = this->hash_lock_[loc]; + ACE_SYNCH_RW_MUTEX &filelock = this->file_lock_[loc]; + + filelock.acquire_read (); + + if (this->hash_.find (filename, handle) == -1) + { + ACE_WRITE_GUARD_RETURN (ACE_SYNCH_RW_MUTEX, + ace_mon, + hashlock, + 0); + + // Second check in the method call + handle = this->insert_i (filename, filelock, mapit); + + if (handle == 0) + filelock.release (); + } + else + { + if (handle->update ()) + { + { + // Double check locking pattern + ACE_WRITE_GUARD_RETURN (ACE_SYNCH_RW_MUTEX, + ace_mon, + hashlock, + 0); + + // Second check in the method call + handle = this->update_i (filename, filelock, mapit); + + if (handle == 0) + filelock.release (); + } + } + // ACE_DEBUG ((LM_DEBUG, ACE_TEXT (" (%t) CVF: found %s\n"), filename)); + } + + return handle; +} + +ACE_Filecache_Object * +ACE_Filecache::create (const ACE_TCHAR *filename, int size) +{ + ACE_Filecache_Object *handle = 0; + + ACE_OFF_T loc = ACE::hash_pjw (filename) % this->size_; + ACE_SYNCH_RW_MUTEX &filelock = this->file_lock_[loc]; + + ACE_NEW_RETURN (handle, + ACE_Filecache_Object (filename, size, filelock), + 0); + handle->acquire (); + + return handle; +} + +ACE_Filecache_Object * +ACE_Filecache::finish (ACE_Filecache_Object *&file) +{ + if (file == 0) + return file; + + ACE_OFF_T loc = ACE::hash_pjw (file->filename_) % this->size_; + ACE_SYNCH_RW_MUTEX &hashlock = this->hash_lock_[loc]; + + if (file != 0) + switch (file->action_) + { + case ACE_Filecache_Object::ACE_WRITING: + { + ACE_WRITE_GUARD_RETURN (ACE_SYNCH_RW_MUTEX, + ace_mon, + hashlock, + 0); + + file->release (); + + this->remove_i (file->filename_); +#if 0 + int result = this->hash_.bind (file->filename (), file); + + if (result == 0) + file->acquire (); +#else + // Last one using a stale file is resposible for deleting it. + if (file->stale_) + { + // Try a lock. If it succeds, we can delete it now. + // Otherwise, it will clean itself up later. + if (file->lock_.tryacquire_write () == 0) + { + delete file; + file = 0; + } + } +#endif + } + + break; + default: + file->release (); + + // Last one using a stale file is resposible for deleting it. + if (file->stale_) + { + // Try a lock. If it succeds, we can delete it now. + // Otherwise, it will clean itself up later. + if (file->lock_.tryacquire_write () == 0) + { + delete file; + file = 0; + } + } + + break; + } + + return file; +} + +void +ACE_Filecache_Object::init (void) +{ + this->filename_[0] = '\0'; + this->handle_ = ACE_INVALID_HANDLE; + this->error_ = ACE_SUCCESS; + this->tempname_ = 0; + this->size_ = 0; + + ACE_OS::memset (&(this->stat_), 0, sizeof (this->stat_)); +} + +ACE_Filecache_Object::ACE_Filecache_Object (void) + : tempname_ (0), + mmap_ (), + handle_ (0), + // stat_ (), + size_ (0), + action_ (0), + error_ (0), + stale_ (0), + // sa_ (), + junklock_ (), + lock_ (junklock_) +{ + this->init (); +} + +ACE_Filecache_Object::ACE_Filecache_Object (const ACE_TCHAR *filename, + ACE_SYNCH_RW_MUTEX &lock, + LPSECURITY_ATTRIBUTES sa, + int mapit) + : tempname_ (0), + mmap_ (), + handle_ (0), + // stat_ (), + size_ (0), + action_ (0), + error_ (0), + stale_ (0), + sa_ (sa), + junklock_ (), + lock_ (lock) +{ + this->init (); + + // ASSERT strlen(filename) < sizeof (this->filename_) + ACE_OS::strcpy (this->filename_, filename); + this->action_ = ACE_Filecache_Object::ACE_READING; + // place ourselves into the READING state + + // Can we access the file? + if (ACE_OS::access (this->filename_, R_OK) == -1) + { + this->error_i (ACE_Filecache_Object::ACE_ACCESS_FAILED); + return; + } + + // Can we stat the file? + if (ACE_OS::stat (this->filename_, &this->stat_) == -1) + { + this->error_i (ACE_Filecache_Object::ACE_STAT_FAILED); + return; + } + + this->size_ = ACE_Utils::truncate_cast (this->stat_.st_size); + this->tempname_ = this->filename_; + + // Can we open the file? + this->handle_ = ACE_OS::open (this->tempname_, + READ_FLAGS, R_MASK, this->sa_); + if (this->handle_ == ACE_INVALID_HANDLE) + { + this->error_i (ACE_Filecache_Object::ACE_OPEN_FAILED, + ACE_TEXT ("ACE_Filecache_Object::ctor: open")); + return; + } + + if (mapit) + { + // Can we map the file? + if (this->mmap_.map (this->handle_, static_cast (-1), + PROT_READ, ACE_MAP_PRIVATE, 0, 0, this->sa_) != 0) + { + this->error_i (ACE_Filecache_Object::ACE_MEMMAP_FAILED, + ACE_TEXT ("ACE_Filecache_Object::ctor: map")); + ACE_OS::close (this->handle_); + this->handle_ = ACE_INVALID_HANDLE; + return; + } + } + + // Ok, finished! + this->action_ = ACE_Filecache_Object::ACE_READING; +} + +ACE_Filecache_Object::ACE_Filecache_Object (const ACE_TCHAR *filename, + ACE_OFF_T size, + ACE_SYNCH_RW_MUTEX &lock, + LPSECURITY_ATTRIBUTES sa) + : stale_ (0), + sa_ (sa), + lock_ (lock) +{ + this->init (); + + this->size_ = size; + ACE_OS::strcpy (this->filename_, filename); + this->action_ = ACE_Filecache_Object::ACE_WRITING; + + // Can we access the file? + if (ACE_OS::access (this->filename_, R_OK|W_OK) == -1 + // Does it exist? + && ACE_OS::access (this->filename_, F_OK) != -1) + { + // File exists, but we cannot access it. + this->error_i (ACE_Filecache_Object::ACE_ACCESS_FAILED); + return; + } + + this->tempname_ = this->filename_; + + // Can we open the file? + this->handle_ = ACE_OS::open (this->tempname_, WRITE_FLAGS, W_MASK, this->sa_); + if (this->handle_ == ACE_INVALID_HANDLE) + { + this->error_i (ACE_Filecache_Object::ACE_OPEN_FAILED, + ACE_TEXT ("ACE_Filecache_Object::acquire: open")); + return; + } + + // Can we write? + if (ACE_OS::pwrite (this->handle_, "", 1, this->size_ - 1) != 1) + { + this->error_i (ACE_Filecache_Object::ACE_WRITE_FAILED, + ACE_TEXT ("ACE_Filecache_Object::acquire: write")); + ACE_OS::close (this->handle_); + return; + } + + // Can we map? + if (this->mmap_.map (this->handle_, this->size_, PROT_RDWR, MAP_SHARED, + 0, 0, this->sa_) != 0) + { + this->error_i (ACE_Filecache_Object::ACE_MEMMAP_FAILED, + ACE_TEXT ("ACE_Filecache_Object::acquire: map")); + ACE_OS::close (this->handle_); + } + + // Ok, done! +} + +ACE_Filecache_Object::~ACE_Filecache_Object (void) +{ + if (this->error_ == ACE_SUCCESS) + { + this->mmap_.unmap (); + ACE_OS::close (this->handle_); + this->handle_ = ACE_INVALID_HANDLE; + } + + this->lock_.release (); +} + +int +ACE_Filecache_Object::acquire (void) +{ + return this->lock_.tryacquire_read (); +} + +int +ACE_Filecache_Object::release (void) +{ + if (this->action_ == ACE_WRITING) + { + // We are safe since only one thread has a writable Filecache_Object + +#if 0 + ACE_HANDLE original = ACE_OS::open (this->filename_, WRITE_FLAGS, W_MASK, + this->sa_); + if (original == ACE_INVALID_HANDLE) + this->error_ = ACE_Filecache_Object::ACE_OPEN_FAILED; + else if (ACE_OS::write (original, this->mmap_.addr (), + this->size_) == -1) + { + this->error_ = ACE_Filecache_Object::ACE_WRITE_FAILED; + ACE_OS::close (original); + ACE_OS::unlink (this->filename_); + } + else if (ACE_OS::stat (this->filename_, &this->stat_) == -1) + this->error_ = ACE_Filecache_Object::ACE_STAT_FAILED; +#endif + + this->mmap_.unmap (); + ACE_OS::close (this->handle_); + this->handle_ = ACE_INVALID_HANDLE; + +#if 0 + // Leave the file in an acquirable state. + this->handle_ = ACE_OS::open (this->tempname_, READ_FLAGS, R_MASK); + if (this->handle_ == ACE_INVALID_HANDLE) + { + this->error_i (ACE_Filecache_Object::ACE_OPEN_FAILED, + "ACE_Filecache_Object::acquire: open"); + } + else if (this->mmap_.map (this->handle_, -1, + PROT_READ, + ACE_MAP_PRIVATE, + 0, + 0, + this->sa_) != 0) + { + this->error_i (ACE_Filecache_Object::ACE_MEMMAP_FAILED, + "ACE_Filecache_Object::acquire: map"); + ACE_OS::close (this->handle_); + this->handle_ = ACE_INVALID_HANDLE; + } + + this->action_ = ACE_Filecache_Object::ACE_READING; +#endif + } + + return this->lock_.release (); +} + +int +ACE_Filecache_Object::error (void) const +{ + // The existence of the object means a read lock is being held. + return this->error_; +} + +int +ACE_Filecache_Object::error_i (int error_value, const ACE_TCHAR *s) +{ + s = s; + ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p.\n"), s)); + this->error_ = error_value; + return error_value; +} + +const ACE_TCHAR * +ACE_Filecache_Object::filename (void) const +{ + // The existence of the object means a read lock is being held. + return this->filename_; +} + +ACE_OFF_T +ACE_Filecache_Object::size (void) const +{ + // The existence of the object means a read lock is being held. + return this->size_; +} + +ACE_HANDLE +ACE_Filecache_Object::handle (void) const +{ + // The existence of the object means a read lock is being held. + return this->handle_; +} + +void * +ACE_Filecache_Object::address (void) const +{ + // The existence of the object means a read lock is being held. + return this->mmap_.addr (); +} + +int +ACE_Filecache_Object::update (void) const +{ + // The existence of the object means a read lock is being held. + int result; + ACE_stat statbuf; + + if (ACE_OS::stat (this->filename_, &statbuf) == -1) + result = 1; + else + // non-portable code may follow +#if defined (ACE_HAS_WINCE) + // Yup, non-portable... there's probably a way to safely implement + // difftime() on WinCE, but for now, this will have to do. It flags + // every file as having changed since cached. + result = 1; +#else + result = ACE_OS::difftime (this->stat_.st_mtime, statbuf.st_mtime) < 0; +#endif /* ACE_HAS_WINCE */ + + return result; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Filecache.h b/ACE/ace/Filecache.h new file mode 100644 index 00000000000..df1835b9372 --- /dev/null +++ b/ACE/ace/Filecache.h @@ -0,0 +1,353 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Filecache.h + * + * $Id$ + * + * @author James Hu + */ +//============================================================================= + + +#ifndef ACE_FILECACHE_H +#define ACE_FILECACHE_H + +#include /**/ "ace/pre.h" + +#include "ace/Mem_Map.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Hash_Map_Manager_T.h" +#include "ace/Null_Mutex.h" +#include "ace/Synch_Traits.h" +#include "ace/RW_Thread_Mutex.h" +#include "ace/OS_NS_sys_stat.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +enum ACE_Filecache_Flag +{ + ACE_NOMAP = 0, + ACE_MAPIT = 1 +}; + +class ACE_Filecache_Object; + +/** + * @class ACE_Filecache_Handle + * + * @brief Abstraction over a real file. This is meant to be the entry + * point into the Cached Virtual Filesystem. + * + * This is a cached filesystem implementation based loosely on the + * implementation of JAWS_File. The interfaces will be nearly the + * same. The under-the-hood implementation should hopefully be a + * much faster thing. + * These will be given their own implementations later. For now, we + * borrow the implementation provided by JAWS. + * On creation, the cache is checked, and reference count is + * incremented. On destruction, reference count is decremented. If + * the reference count is 0, the file is removed from the cache. + * E.g. 1, + * { + * ACE_Filecache_Handle foo("foo.html"); + * this->peer ().send (foo.address (), foo.size ()); + * } + * E.g. 2, + * { + * ACE_Filecache_Handle foo("foo.html"); + * io->transmitfile (foo.handle (), this->peer ().handle ()); + * } + * E.g. 3, + * { + * ACE_Filecache_Handle foo("foo.html", content_length); + * this->peer ().recv (foo.address (), content_length); + * } + * TODO: + */ +class ACE_Export ACE_Filecache_Handle +{ + // (1) Get rid of the useless copying of files when reading. + // Although it does make sure the file you send isn't being changed, + // it doesn't make sure the file is in a sensible state before + // sending it. + // + // Alternative: if the file get's trashed while it is being shipped, + // let the client request the file again. The cache should have an + // updated copy by that point. + // + // (2) Use hashing for locating files. This means I need a hastable + // implementation with buckets. + // + // (3) Only lock when absolutely necessary. JAWS_Virtual_Filesystem was + // rather conservative, but for some reason it still ran into problems. + // Since this design should be simpler, problems should be easier to spot. + // +public: + + /// Query cache for file, and acquire it. Assumes the file is being + /// opened for reading. + ACE_Filecache_Handle (const ACE_TCHAR *filename, + ACE_Filecache_Flag mapit = ACE_MAPIT); + + /** + * Create new entry, and acquire it. Presence of SIZE assumes the + * file is being opened for writing. If SIZE is zero, assumes the + * file is to be removed from the cache. + */ + ACE_Filecache_Handle (const ACE_TCHAR *filename, + int size, + ACE_Filecache_Flag mapit = ACE_MAPIT); + + /// Closes any open handles, release acquired file. + ~ACE_Filecache_Handle (void); + + /// Base address of memory mapped file. + void *address (void) const; + + /// A handle (e.g., UNIX file descriptor, or NT file handle). + ACE_HANDLE handle (void) const; + + /// Any associated error in handle creation and acquisition. + int error (void) const; + + /// The size of the file. + ACE_OFF_T size (void) const; + +protected: + /// Default do nothing constructor. Prevent it from being called. + ACE_Filecache_Handle (void); + + /// Common initializations for constructors. + void init (void); + +public: + /// These come from ACE_Filecache_Object, which is an internal class. + enum + { + ACE_SUCCESS = 0, + ACE_ACCESS_FAILED, + ACE_OPEN_FAILED, + ACE_COPY_FAILED, + ACE_STAT_FAILED, + ACE_MEMMAP_FAILED, + ACE_WRITE_FAILED + }; + +private: + /// A reference to the low level instance. + ACE_Filecache_Object *file_; + + /// A 'd version of the one from . + ACE_HANDLE handle_; + + int mapit_; +}; + +typedef ACE_Hash_Map_Manager_Ex, ACE_Equal_To, ACE_Null_Mutex> + ACE_Filecache_Hash; + +typedef ACE_Hash_Map_Entry ACE_Filecache_Hash_Entry; + +/** + * @class ACE_Filecache + * + * @brief A hash table holding the information about entry point into + * the Cached Virtual Filesystem. On insertion, the reference + * count is incremented. On destruction, reference count is + * decremented. + */ +class ACE_Export ACE_Filecache +{ +public: + /// Singleton pattern. + static ACE_Filecache *instance (void); + + ~ACE_Filecache (void); + + /// Returns 0 if the file associated with ``filename'' is in the cache, + /// or -1 if not. + int find (const ACE_TCHAR *filename); + + /// Return the file associated with ``filename'' if it is in the cache, + /// or create if not. + ACE_Filecache_Object *fetch (const ACE_TCHAR *filename, int mapit = 1); + + /// Remove the file associated with ``filename'' from the cache. + ACE_Filecache_Object *remove (const ACE_TCHAR *filename); + + /// Create a new Filecache_Object, returns it. + ACE_Filecache_Object *create (const ACE_TCHAR *filename, int size); + + /// Release an acquired Filecache_Object, returns it again or NULL if it + /// was deleted. + ACE_Filecache_Object *finish (ACE_Filecache_Object *&new_file); + +protected: + ACE_Filecache_Object *insert_i (const ACE_TCHAR *filename, + ACE_SYNCH_RW_MUTEX &filelock, + int mapit); + ACE_Filecache_Object *remove_i (const ACE_TCHAR *filename); + ACE_Filecache_Object *update_i (const ACE_TCHAR *filename, + ACE_SYNCH_RW_MUTEX &filelock, + int mapit); + +public: + + enum + { + /// For this stupid implementation, use an array. Someday, use a + /// balanced search tree, or real hash table. + ACE_DEFAULT_VIRTUAL_FILESYSTEM_TABLE_SIZE = 512, + + /// This determines the highwater mark in megabytes for the cache. + /// This will be ignored for now. + ACE_DEFAULT_VIRTUAL_FILESYSTEM_CACHE_SIZE = 20 + }; + +protected: + /// Prevent it from being called. + ACE_Filecache (void); + +private: + ACE_OFF_T size_; + + /// The hash table + ACE_Filecache_Hash hash_; + + /// The reference to the instance + static ACE_Filecache *cvf_; + + // = Synchronization variables. + ACE_SYNCH_RW_MUTEX hash_lock_[ACE_DEFAULT_VIRTUAL_FILESYSTEM_TABLE_SIZE]; + ACE_SYNCH_RW_MUTEX file_lock_[ACE_DEFAULT_VIRTUAL_FILESYSTEM_TABLE_SIZE]; +}; + +/** + * @class ACE_Filecache_Object + * + * @brief Abstraction over a real file. This is what the Virtual + * Filesystem contains. This class is not intended for general + * consumption. Please consult a physician before attempting to + * use this class. + */ +class ACE_Export ACE_Filecache_Object +{ +public: + friend class ACE_Filecache; + + /// Creates a file for reading. + ACE_Filecache_Object (const ACE_TCHAR *filename, + ACE_SYNCH_RW_MUTEX &lock, + LPSECURITY_ATTRIBUTES sa = 0, + int mapit = 1); + + /// Creates a file for writing. + ACE_Filecache_Object (const ACE_TCHAR *filename, + ACE_OFF_T size, + ACE_SYNCH_RW_MUTEX &lock, + LPSECURITY_ATTRIBUTES sa = 0); + + /// Only if reference count is zero should this be called. + ~ACE_Filecache_Object (void); + + /// Increment the reference_count_. + int acquire (void); + + /// Decrement the reference_count_. + int release (void); + + // = error_ accessors + int error (void) const; + int error (int error_value, + const ACE_TCHAR *s = ACE_TEXT ("ACE_Filecache_Object")); + + /// filename_ accessor + const ACE_TCHAR *filename (void) const; + + /// handle_ accessor. + ACE_HANDLE handle (void) const; + + /// Base memory address for memory mapped file. + void *address (void) const; + + /// size_ accessor. + ACE_OFF_T size (void) const; + + /// True if file on disk is newer than cached file. + int update (void) const; + +protected: + /// Prevent from being called. + ACE_Filecache_Object (void); + + /// Common initialization code, + void init (void); + +private: + /// Internal error logging method, no locking. + int error_i (int error_value, + const ACE_TCHAR *s = ACE_TEXT ("ACE_Filecache_Object")); + +public: + + enum Creation_States + { + ACE_READING = 1, + ACE_WRITING = 2 + }; + + enum Error_Conditions + { + ACE_SUCCESS = 0, + ACE_ACCESS_FAILED, + ACE_OPEN_FAILED, + ACE_COPY_FAILED, + ACE_STAT_FAILED, + ACE_MEMMAP_FAILED, + ACE_WRITE_FAILED + }; + +private: + /// The temporary file name and the real file name. The real file is + /// copied into the temporary file for safety reasons. + ACE_TCHAR *tempname_; + ACE_TCHAR filename_[MAXPATHLEN + 1]; + + /// Holds the memory mapped version of the temporary file. + ACE_Mem_Map mmap_; + + /// The descriptor to the temporary file. + ACE_HANDLE handle_; + + /// Used to compare against the real file to test if an update is needed. + ACE_stat stat_; + ACE_OFF_T size_; + + /// Status indicators. + int action_; + int error_; + + /// If set to 1, means the object is flagged for removal. + int stale_; + + /// Security attribute object. + LPSECURITY_ATTRIBUTES sa_; + + /// The default initializer + ACE_SYNCH_RW_MUTEX junklock_; + + /// Provides a bookkeeping mechanism for users of this object. + ACE_SYNCH_RW_MUTEX &lock_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" + +#endif /* ACE_FILECACHE_H */ diff --git a/ACE/ace/FlReactor/ACE_FlReactor.pc.in b/ACE/ace/FlReactor/ACE_FlReactor.pc.in new file mode 100644 index 00000000000..c284481585d --- /dev/null +++ b/ACE/ace/FlReactor/ACE_FlReactor.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: ACE_FlReactor +Description: ACE FlReactor Library +Requires: ACE +Version: @VERSION@ +Libs: -L${libdir} -lACE_FlReactor +Cflags: -I${includedir} diff --git a/ACE/ace/FlReactor/ACE_FlReactor_export.h b/ACE/ace/FlReactor/ACE_FlReactor_export.h new file mode 100644 index 00000000000..f46b66cb3f7 --- /dev/null +++ b/ACE/ace/FlReactor/ACE_FlReactor_export.h @@ -0,0 +1,58 @@ + +// -*- C++ -*- +// $Id$ +// Definition for Win32 Export directives. +// This file is generated automatically by generate_export_file.pl -s ACE_FlReactor +// ------------------------------ +#ifndef ACE_FLREACTOR_EXPORT_H +#define ACE_FLREACTOR_EXPORT_H + +#include /**/ "ace/config-all.h" + +#if defined (ACE_AS_STATIC_LIBS) && !defined (ACE_FLREACTOR_HAS_DLL) +# define ACE_FLREACTOR_HAS_DLL 0 +#endif /* ACE_AS_STATIC_LIBS && ACE_FLREACTOR_HAS_DLL */ + +#if !defined (ACE_FLREACTOR_HAS_DLL) +# define ACE_FLREACTOR_HAS_DLL 1 +#endif /* ! ACE_FLREACTOR_HAS_DLL */ + +#if defined (ACE_FLREACTOR_HAS_DLL) && (ACE_FLREACTOR_HAS_DLL == 1) +# if defined (ACE_FLREACTOR_BUILD_DLL) +# define ACE_FlReactor_Export ACE_Proper_Export_Flag +# define ACE_FLREACTOR_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define ACE_FLREACTOR_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else /* ACE_FLREACTOR_BUILD_DLL */ +# define ACE_FlReactor_Export ACE_Proper_Import_Flag +# define ACE_FLREACTOR_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define ACE_FLREACTOR_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* ACE_FLREACTOR_BUILD_DLL */ +#else /* ACE_FLREACTOR_HAS_DLL == 1 */ +# define ACE_FlReactor_Export +# define ACE_FLREACTOR_SINGLETON_DECLARATION(T) +# define ACE_FLREACTOR_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* ACE_FLREACTOR_HAS_DLL == 1 */ + +// Set ACE_FLREACTOR_NTRACE = 0 to turn on library specific tracing even if +// tracing is turned off for ACE. +#if !defined (ACE_FLREACTOR_NTRACE) +# if (ACE_NTRACE == 1) +# define ACE_FLREACTOR_NTRACE 1 +# else /* (ACE_NTRACE == 1) */ +# define ACE_FLREACTOR_NTRACE 0 +# endif /* (ACE_NTRACE == 1) */ +#endif /* !ACE_FLREACTOR_NTRACE */ + +#if (ACE_FLREACTOR_NTRACE == 1) +# define ACE_FLREACTOR_TRACE(X) +#else /* (ACE_FLREACTOR_NTRACE == 1) */ +# if !defined (ACE_HAS_TRACE) +# define ACE_HAS_TRACE +# endif /* ACE_HAS_TRACE */ +# define ACE_FLREACTOR_TRACE(X) ACE_TRACE_IMPL(X) +# include "ace/Trace.h" +#endif /* (ACE_FLREACTOR_NTRACE == 1) */ + +#endif /* ACE_FLREACTOR_EXPORT_H */ + +// End of auto generated file. diff --git a/ACE/ace/FlReactor/FlReactor.cpp b/ACE/ace/FlReactor/FlReactor.cpp new file mode 100644 index 00000000000..611b9a14a19 --- /dev/null +++ b/ACE/ace/FlReactor/FlReactor.cpp @@ -0,0 +1,330 @@ +// $Id$ + +#include "ace/FlReactor/FlReactor.h" + +ACE_RCSID(ace, FlReactor, "$Id$") + +#include /**/ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE (ACE_FlReactor) + +// Must be called with lock held +ACE_FlReactor::ACE_FlReactor (size_t size, + int restart, + ACE_Sig_Handler *h) + : ACE_Select_Reactor (size, restart, h) +{ + // When the ACE_Select_Reactor is constructed it creates the notify + // pipe and registers it with the register_handler_i() method. The + // FlReactor overloads this method BUT because the + // register_handler_i occurs when constructing the base class + // ACE_Select_Reactor, the ACE_Select_Reactor register_handler_i() + // is called not the FlReactor register_handler_i(). This means + // that the notify pipe is registered with the ACE_Select_Reactor + // event handling code not the FlReactor and so notfications don't + // work. To get around this we simply close and re-opened the + // notification handler in the constructor of the FlReactor. + +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) + this->notify_handler_->close (); + this->notify_handler_->open (this, 0); +#endif /* ACE_MT_SAFE */ +} + +ACE_FlReactor::~ACE_FlReactor (void) +{ +} + +// This is just the from ace/Reactor.cpp +// but we use the Fl functions to wait for an event, not , just use the Fl mechanism + // to wait for one or more events... + + // Wait for something to happen. + double t = 0; + if (max_wait_time != 0) + t = max_wait_time->sec () + max_wait_time->usec () / 1000000.0F; + + while (t > 0) { + t = Fl::wait (t); + } + + // Reset the width, in case it changed during the upcalls. + width = this->handler_rep_.max_handlep1 (); + + // Now actually read the result needed by the + // using + +int +ACE_FoxReactor::wait_for_multiple_events (ACE_Select_Reactor_Handle_Set &handle_set, + ACE_Time_Value *max_wait_time) +{ + ACE_TRACE( "ACE_FoxReactor::wait_for_multiple_events" ); + + int nfound = 0; + do + { + max_wait_time = this->timer_queue_->calculate_timeout (max_wait_time); + size_t width = this->handler_rep_.max_handlep1 (); + handle_set.rd_mask_ = this->wait_set_.rd_mask_; + handle_set.wr_mask_ = this->wait_set_.wr_mask_; + handle_set.ex_mask_ = this->wait_set_.ex_mask_; + + nfound = FoxWaitForMultipleEvents (width, + handle_set, + max_wait_time); + + } while( nfound == -1 && this->handle_error () > 0 ); + + if (nfound > 0) + { +#if !defined (ACE_WIN32) + handle_set.rd_mask_.sync (this->handler_rep_.max_handlep1 ()); + handle_set.wr_mask_.sync (this->handler_rep_.max_handlep1 ()); + handle_set.ex_mask_.sync (this->handler_rep_.max_handlep1 ()); +#endif /* ACE_WIN32 */ + } + + return nfound; + // Timed out or input available +} + +int +ACE_FoxReactor::FoxWaitForMultipleEvents (int width, + ACE_Select_Reactor_Handle_Set &wait_set, + ACE_Time_Value */*max_wait_time*/) +{ + // Check to make sure our handle's are all usable. + ACE_Select_Reactor_Handle_Set temp_set = wait_set; + + if (ACE_OS::select (width, + temp_set.rd_mask_, + temp_set.wr_mask_, + temp_set.ex_mask_, + (ACE_Time_Value *) &ACE_Time_Value::zero ) == -1) + return -1; // Bad file arguments... + + // Qt processing. + this->fxapp->runOneEvent () ; + + // Reset the width, in case it changed during the upcalls. + width = handler_rep_.max_handlep1 (); + + // Now actually read the result needed by the using + // modifies the @c fd_set. + */ + void sync (ACE_HANDLE max); + + /// Returns a pointer to the underlying @c fd_set. Returns 0 if + /// there are no handle bits set ( == 0). + operator fd_set *(); + + /// Returns a pointer to the underlying @c fd_set. Returns 0 if + /// there are no handle bits set ( == 0). + fd_set *fdset (void); + +#if defined (ACE_HAS_BIG_FD_SET) + /// Assignment operator optimizes for cases where == 0. + ACE_Handle_Set & operator= (const ACE_Handle_Set &); +#endif /* ACE_HAS_BIG_FD_SET */ + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// Size of the set, i.e., a count of the number of enabled bits. + int size_; + + /// Current max handle. + ACE_HANDLE max_handle_; + +#if defined (ACE_HAS_BIG_FD_SET) + /// Current min handle. + ACE_HANDLE min_handle_; +#endif /* ACE_HAS_BIG_FD_SET */ + + /// Bitmask. + fd_set mask_; + + enum + { + WORDSIZE = NFDBITS, +#if !defined (ACE_WIN32) + NUM_WORDS = howmany (MAXSIZE, NFDBITS), +#endif /* ACE_WIN32 */ + NBITS = 256 + }; + + /// Counts the number of bits enabled in N. Uses a table lookup to + /// speed up the count. + static int count_bits (u_long n); + +#if defined (ACE_HAS_BIG_FD_SET) + /// Find the position of the bit counting from right to left. + static int bitpos (u_long bit); +#endif /* ACE_HAS_BIG_FD_SET */ + + /// Resets the after a clear of the original + /// . + void set_max (ACE_HANDLE max); + + /// Table that maps bytes to counts of the enabled bits in each value + /// from 0 to 255. + static const char nbits_[NBITS]; +}; + +/** + * @class ACE_Handle_Set_Iterator + * + * @brief Iterator for the ACE_Handle_Set abstraction. + */ +class ACE_Export ACE_Handle_Set_Iterator +{ +public: + /// Constructor. + ACE_Handle_Set_Iterator (const ACE_Handle_Set &hs); + + /// Default dtor. + ~ACE_Handle_Set_Iterator (void); + + /// Reset the state of the iterator by reinitializing the state + /// that we maintain. + void reset_state (void); + + /** + * "Next" operator. Returns the next unseen ACE_HANDLE in the + * up to ). When all the + * handles have been seen returns . Advances + * the iterator automatically, so you need not call + * (which is now obsolete). + */ + ACE_HANDLE operator () (void); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// The we are iterating through. + const ACE_Handle_Set &handles_; + + /// Index of the bit we're examining in the current word. +#if defined (ACE_WIN32) + u_int handle_index_; +#elif !defined (ACE_HAS_BIG_FD_SET) + int handle_index_; +#elif defined (ACE_HAS_BIG_FD_SET) + int handle_index_; + u_long oldlsb_; +#endif /* ACE_WIN32 */ + + /// Number of the word we're iterating over (typically between 0..7). + int word_num_; + +#if defined (ACE_HAS_BIG_FD_SET) + /// Number max of the words with a possible bit on. + int word_max_; +#endif /* ACE_HAS_BIG_FD_SET */ + +#if !defined (ACE_WIN32) && !defined (ACE_HAS_BIG_FD_SET) + /// Value of the bits in the word we're iterating on. + fd_mask word_val_; +#elif !defined (ACE_WIN32) && defined (ACE_HAS_BIG_FD_SET) + /// Value of the bits in the word we're iterating on. + u_long word_val_; +#endif /* !ACE_WIN32 && !ACE_HAS_BIG_FD_SET */ +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Handle_Set.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_HANDLE_SET */ diff --git a/ACE/ace/Handle_Set.inl b/ACE/ace/Handle_Set.inl new file mode 100644 index 00000000000..a4b1fccaebb --- /dev/null +++ b/ACE/ace/Handle_Set.inl @@ -0,0 +1,193 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/Log_Msg.h" + +// todo: This should be cleaned up a bit. +// memset for FD_ZERO on OpenBSD and Solaris w/ gcc 2.95.3 +#include "ace/os_include/os_string.h" + +// FreeBSD 4.8-RC? for bzero() used by FD_ZERO +#include "ace/os_include/os_strings.h" + +// IRIX5 defines bzero() in this odd file... used by FD_ZERO +#if defined (ACE_HAS_BSTRING) +# include /**/ +#endif /* ACE_HAS_BSTRING */ + +// AIX defines bzero() in this odd file... used by FD_ZERO +#if defined (ACE_HAS_STRINGS) +# include "ace/os_include/os_strings.h" +#endif /* ACE_HAS_STRINGS */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Initialize the bitmask to all 0s and reset the associated fields. + +ACE_INLINE void +ACE_Handle_Set::reset (void) +{ + ACE_TRACE ("ACE_Handle_Set::reset"); + this->max_handle_ = + ACE_INVALID_HANDLE; +#if defined (ACE_HAS_BIG_FD_SET) + this->min_handle_ = + NUM_WORDS * WORDSIZE; +#endif /* ACE_HAS_BIG_FD_SET */ + this->size_ = 0; + // #if !defined (ACE_HAS_BIG_FD_SET) Why is this here? -Steve Huston + FD_ZERO (&this->mask_); + // #endif /* ACE_HAS_BIG_FD_SET */ +} + +#if defined (ACE_HAS_BIG_FD_SET) +ACE_INLINE ACE_Handle_Set & +ACE_Handle_Set::operator = (const ACE_Handle_Set &rhs) +{ + ACE_TRACE ("ACE_Handle_Set::operator ="); + + if (rhs.size_ > 0) + { + this->size_ = + rhs.size_; + this->max_handle_ = + rhs.max_handle_; + this->min_handle_ = + rhs.min_handle_; + this->mask_ = + rhs.mask_; + } + else + this->reset (); + + return *this; +} +#endif /* ACE_HAS_BIG_FD_SET */ + +// Returns the number of the large bit. + +ACE_INLINE ACE_HANDLE +ACE_Handle_Set::max_set (void) const +{ + ACE_TRACE ("ACE_Handle_Set::max_set"); + return this->max_handle_; +} + +// Checks whether handle is enabled. + +ACE_INLINE int +ACE_Handle_Set::is_set (ACE_HANDLE handle) const +{ + ACE_TRACE ("ACE_Handle_Set::is_set"); +#if defined (ACE_HAS_BIG_FD_SET) + return FD_ISSET (handle, + &this->mask_) + && this->size_ > 0; +#elif defined (ACE_HAS_NONCONST_FD_ISSET) + return FD_ISSET (handle, + const_cast (&this->mask_)); +#else + return FD_ISSET (handle, + &this->mask_); +#endif /* ACE_HAS_BIG_FD_SET */ +} + +// Enables the handle. + +ACE_INLINE void +ACE_Handle_Set::set_bit (ACE_HANDLE handle) +{ + ACE_TRACE ("ACE_Handle_Set::set_bit"); + if ((handle != ACE_INVALID_HANDLE) + && (!this->is_set (handle))) + { +#if defined (ACE_WIN32) + FD_SET ((SOCKET) handle, + &this->mask_); + ++this->size_; +#else /* ACE_WIN32 */ +#if defined (ACE_HAS_BIG_FD_SET) + if (this->size_ == 0) + FD_ZERO (&this->mask_); + + if (handle < this->min_handle_) + this->min_handle_ = handle; +#endif /* ACE_HAS_BIG_FD_SET */ + + FD_SET (handle, + &this->mask_); + ++this->size_; + + if (handle > this->max_handle_) + this->max_handle_ = handle; +#endif /* ACE_WIN32 */ + } +} + +// Disables the handle. + +ACE_INLINE void +ACE_Handle_Set::clr_bit (ACE_HANDLE handle) +{ + ACE_TRACE ("ACE_Handle_Set::clr_bit"); + + if ((handle != ACE_INVALID_HANDLE) && + (this->is_set (handle))) + { + FD_CLR ((ACE_SOCKET) handle, + &this->mask_); + --this->size_; + +#if !defined (ACE_WIN32) + if (handle == this->max_handle_) + this->set_max (this->max_handle_); +#endif /* !ACE_WIN32 */ + } +} + +// Returns a count of the number of enabled bits. + +ACE_INLINE int +ACE_Handle_Set::num_set (void) const +{ + ACE_TRACE ("ACE_Handle_Set::num_set"); +#if defined (ACE_WIN32) + return this->mask_.fd_count; +#else /* !ACE_WIN32 */ + return this->size_; +#endif /* ACE_WIN32 */ +} + +// Returns a pointer to the underlying fd_set. + +ACE_INLINE +ACE_Handle_Set::operator fd_set *() +{ + ACE_TRACE ("ACE_Handle_Set::operator fd_set *"); + + if (this->size_ > 0) + return (fd_set *) &this->mask_; + else + return (fd_set *) 0; +} + +// Returns a pointer to the underlying fd_set. + +ACE_INLINE fd_set * +ACE_Handle_Set::fdset (void) +{ + ACE_TRACE ("ACE_Handle_Set::fdset"); + + if (this->size_ > 0) + return (fd_set *) &this->mask_; + else + return (fd_set *) 0; +} + +ACE_INLINE +ACE_Handle_Set_Iterator::~ACE_Handle_Set_Iterator (void) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Hash_Cache_Map_Manager_T.cpp b/ACE/ace/Hash_Cache_Map_Manager_T.cpp new file mode 100644 index 00000000000..86af4960a85 --- /dev/null +++ b/ACE/ace/Hash_Cache_Map_Manager_T.cpp @@ -0,0 +1,232 @@ +// $Id$ + +#ifndef ACE_HASH_CACHE_MAP_MANAGER_T_CPP +#define ACE_HASH_CACHE_MAP_MANAGER_T_CPP + +#include "ace/Hash_Cache_Map_Manager_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (__ACE_INLINE__) +#include "ace/Hash_Cache_Map_Manager_T.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_Hash_Cache_Map_Manager) + +#define ACE_T1 class KEY, class VALUE, class HASH_KEY, class COMPARE_KEYS, class CACHING_STRATEGY, class ATTRIBUTES +#define ACE_T2 KEY, VALUE, HASH_KEY, COMPARE_KEYS, CACHING_STRATEGY, ATTRIBUTES + +template +ACE_Hash_Cache_Map_Manager::ACE_Hash_Cache_Map_Manager (CACHING_STRATEGY &caching_s, + size_t size, + ACE_Allocator *alloc) + : ACE_HCMM_BASE (caching_s, + size, + alloc) +{ +} + +template +ACE_Hash_Cache_Map_Manager::~ACE_Hash_Cache_Map_Manager (void) +{ +} + +template int +ACE_Hash_Cache_Map_Manager::bind (const KEY &key, + const VALUE &value, + CACHE_ENTRY *&entry) +{ + // Insert a entry which has the and the which is + // the combination of the and the attributes of the caching + // strategy. + CACHE_VALUE cache_value (value, + this->caching_strategy_.attributes ()); + + int bind_result = this->map_.bind (key, + cache_value, + entry); + + if (bind_result != -1) + { + + int result = this->caching_strategy_.notify_bind (bind_result, + cache_value.second ()); + + if (result == -1) + { + + this->map_.unbind (key); + + // Unless the notification goes thru the bind operation is + // not complete. + bind_result = -1; + + } + } + + return bind_result; +} + +template int +ACE_Hash_Cache_Map_Manager::rebind (const KEY &key, + const VALUE &value, + CACHE_ENTRY *&entry) +{ + CACHE_VALUE cache_value (value, + this->caching_strategy_.attributes ()); + + int rebind_result = this->map_.rebind (key, + cache_value, + entry); + + if (rebind_result != -1) + { + + int result = this->caching_strategy_.notify_rebind (rebind_result, + cache_value.second ()); + + if (result == -1) + { + + // Make sure the unbind operation is done only when the + // notification fails after a bind which is denoted by + // rebind_result = 0 + if (rebind_result == 0) + this->map_.unbind (key); + + // Unless the notification goes thru the rebind operation is + // not complete. + rebind_result = -1; + + } + + } + + return rebind_result; +} + +template int +ACE_Hash_Cache_Map_Manager::trybind (const KEY &key, + VALUE &value, + CACHE_ENTRY *&entry) +{ + CACHE_VALUE cache_value (value, + this->caching_strategy_.attributes ()); + + int trybind_result = this->map_.trybind (key, + cache_value, + entry); + + if (trybind_result != -1) + { + int result = this->caching_strategy_.notify_trybind (trybind_result, + cache_value.second ()); + + if (result == -1) + { + + // If the entry has got inserted into the map, it is removed + // due to failure. + if (trybind_result == 0) + this->map_.unbind (key); + + trybind_result = -1; + + } + else + { + + // If an attempt is made to bind an existing entry the value + // is overwritten with the value from the map. + if (trybind_result == 1) + value = cache_value.first (); + + } + + } + + return trybind_result; +} + +template int +ACE_Hash_Cache_Map_Manager::find (const KEY &key, + CACHE_ENTRY *&entry) +{ + // Lookup the key and populate the . + int find_result = this->map_.find (key, + entry); + + if (find_result != -1) + { + + int result = this->caching_strategy_.notify_find (find_result, + entry->int_id_.second ()); + + // Unless the find and notification operations go thru, this + // method is not successful. + if (result == -1) + find_result = -1; + else + find_result = 0; + + } + + return find_result; +} + +template int +ACE_Hash_Cache_Map_Manager::find (const KEY &key, + VALUE &value) +{ + CACHE_ENTRY *entry = 0; + + int result = this->find (key, + entry); + + if (result != -1) + { + value = entry->int_id_.first (); + } + + return result; +} + +template int +ACE_Hash_Cache_Map_Manager::find (const KEY &key) +{ + CACHE_ENTRY *entry = 0; + + return this->find (key, + entry); +} + +template int +ACE_Hash_Cache_Map_Manager::unbind (CACHE_ENTRY *entry) +{ + // Remove the entry from the cache. + int unbind_result = this->map_.unbind (entry); + + if (unbind_result != -1) + { + + int result = this->caching_strategy_.notify_unbind (unbind_result, + entry->int_id_.second ()); + + if (result == -1) + unbind_result = -1; + + } + + return unbind_result; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#undef ACE_T1 +#undef ACE_T2 + +#endif /* ACE_HASH_CACHE_MAP_MANAGER_T_CPP */ diff --git a/ACE/ace/Hash_Cache_Map_Manager_T.h b/ACE/ace/Hash_Cache_Map_Manager_T.h new file mode 100644 index 00000000000..66cc3b83b53 --- /dev/null +++ b/ACE/ace/Hash_Cache_Map_Manager_T.h @@ -0,0 +1,214 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Hash_Cache_Map_Manager_T.h + * + * $Id$ + * + * @author Kirthika Parameswaran + */ +//============================================================================= + + +#ifndef HASH_CACHE_MAP_MANAGER_T_H +#define HASH_CACHE_MAP_MANAGER_T_H + +#include /**/ "ace/pre.h" + +#include "ace/Hash_Map_Manager_T.h" +#include "ace/Cache_Map_Manager_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Null_Mutex.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Forward declaration. +class ACE_Allocator; + +#define ACE_CACHE_MAP_MANAGER \ + ACE_Cache_Map_Manager, HASH_KEY, COMPARE_KEYS, ACE_Null_Mutex>, \ + ACE_Hash_Map_Iterator_Ex, HASH_KEY, COMPARE_KEYS, ACE_Null_Mutex>, \ + ACE_Hash_Map_Reverse_Iterator_Ex, HASH_KEY, COMPARE_KEYS, ACE_Null_Mutex>, \ + CACHING_STRATEGY, \ + ATTRIBUTES> + +// For linkers that cant grok long names. +#define ACE_Hash_Cache_Map_Manager AHCMM + + /** + * @class ACE_Hash_Cache_Map_Manager + * + * @brief Defines a abstraction which will purge entries from a map. + * The map considered is the ACE_Hash_Map_Manager_Ex. + * + * The Hash_Cache_Map_Manager will manage the map it contains + * and provide purging on demand from the map. The strategy for + * caching is decided by the user and provided to the Cache + * Manager. The Cache Manager acts as a agent and communicates + * between the Map and the Strategy for purging entries from the + * map. To tap the optimal methods like find(key,value,entry) + * present in the ACE_Hash_Map_Manager, + * Hash_Cache_Map_Manager provides extra functionality on top + * of the Cache_Map_Manager. + * No locking mechanism provided since locking at this level + * isnt efficient. Locking has to be provided by the + * application. + */ +template +class ACE_Hash_Cache_Map_Manager : public ACE_CACHE_MAP_MANAGER +{ + public: + + /** + * The actual value mapped to the key in the map. The + * are used by the strategy and is transparent to the user of this + * class. + */ + typedef ACE_Pair CACHE_VALUE; + typedef ACE_Hash_Map_Manager_Ex HASH_MAP; + typedef ACE_Hash_Map_Entry CACHE_ENTRY; + typedef KEY key_type; + typedef VALUE mapped_type; + + // = Initialization and termination methods. + /// Initialize a with @a size entries. + ACE_Hash_Cache_Map_Manager (CACHING_STRATEGY &caching_s, + size_t size = ACE_DEFAULT_MAP_SIZE, + ACE_Allocator *alloc = 0); + + /// Close down a and release dynamically allocated + /// resources. + ~ACE_Hash_Cache_Map_Manager (void); + + /** + * Associate @a key with @a value. If @a key is already in the + * MAP then the ENTRY is not changed. Returns 0 if a new entry is + * bound successfully, returns 1 if an attempt is made to bind an + * existing entry, and returns -1 if failures occur. + */ + int bind (const KEY &key, + const VALUE &value); + + /** + * Same as a normal bind, except the cache entry is also passed back + * to the caller. The entry in this case will either be the newly + * created entry, or the existing one. + */ + int bind (const KEY &key, + const VALUE &value, + CACHE_ENTRY *&entry); + + /// Loopkup entry in the cache. + int find (const KEY &key, + VALUE &value); + + /// Is @a key in the cache? + int find (const KEY &key); + + /// Obtain the entry when the find succeeds. + int find (const KEY &key, + CACHE_ENTRY *&entry); + + /** + * Reassociate the @a key with @a value. If the @a key already exists + * in the cache then returns 1, on a new bind returns 0 and returns + * -1 in case of any failures. + */ + int rebind (const KEY &key, + const VALUE &value); + + /** + * Reassociate @a key with @a value, storing the old value into the + * "out" parameter @a old_value. The function fails if @a key is not + * in the cache for caches that do not allow user specified keys. + * However, for caches that allow user specified keys, if the key is + * not in the cache, a new @a key / @a value association is created. + */ + int rebind (const KEY &key, + const VALUE &value, + VALUE &old_value); + + /** + * Reassociate @a key with @a value, storing the old key and value + * into the "out" parameters @a old_key and @a old_value. The + * function fails if @a key is not in the cache for caches that do not + * allow user specified keys. However, for caches that allow user + * specified keys, if the key is not in the cache, a new @a key / @a value + * association is created. + */ + int rebind (const KEY &key, + const VALUE &value, + KEY &old_key, + VALUE &old_value); + + /** + * Same as a normal rebind, except the cache entry is also passed back + * to the caller. The entry in this case will either be the newly + * created entry, or the existing one. + */ + int rebind (const KEY &key, + const VALUE &value, + CACHE_ENTRY *&entry); + + /** + * Associate @a key with @a value if and only if @a key is not in the + * cache. If @a key is already in the cache, then the @a value parameter + * is overwritten with the existing value in the cache. Returns 0 if a + * new @a key / @a value association is created. Returns 1 if an + * attempt is made to bind an existing entry. This function fails + * for maps that do not allow user specified keys. + */ + int trybind (const KEY &key, + VALUE &value); + + /** + * Same as a normal trybind, except the cache entry is also passed + * back to the caller. The entry in this case will either be the + * newly created entry, or the existing one. + */ + int trybind (const KEY &key, + VALUE &value, + CACHE_ENTRY *&entry); + + /// Remove @a key from the cache. + int unbind (const KEY &key); + + /// Remove @a key from the cache, and return the @a value associated with + /// @a key. + int unbind (const KEY &key, + VALUE &value); + + /// Remove entry from map. + int unbind (CACHE_ENTRY *entry); + +protected: + + /// Base class. + typedef ACE_CACHE_MAP_MANAGER ACE_HCMM_BASE; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + + +#if defined (__ACE_INLINE__) +#include "ace/Hash_Cache_Map_Manager_T.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Hash_Cache_Map_Manager_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Hash_Cache_Map_Manager_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" + +#endif /* HASH_CACHE_MAP_MANAGER_T_H */ diff --git a/ACE/ace/Hash_Cache_Map_Manager_T.inl b/ACE/ace/Hash_Cache_Map_Manager_T.inl new file mode 100644 index 00000000000..0388abd6c6e --- /dev/null +++ b/ACE/ace/Hash_Cache_Map_Manager_T.inl @@ -0,0 +1,73 @@ +// -*- C++ -*- +// +// $Id$ + +#define ACE_T1 class KEY, class VALUE, class HASH_KEY, class COMPARE_KEYS, class CACHING_STRATEGY, class ATTRIBUTES +#define ACE_T2 KEY, VALUE, HASH_KEY, COMPARE_KEYS, CACHING_STRATEGY, ATTRIBUTES + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE int +ACE_Hash_Cache_Map_Manager::bind (const KEY &key, + const VALUE &value) +{ + return ACE_HCMM_BASE::bind (key, + value); +} + +template ACE_INLINE int +ACE_Hash_Cache_Map_Manager::rebind (const KEY &key, + const VALUE &value) +{ + return ACE_HCMM_BASE::rebind (key, + value); +} + +template ACE_INLINE int +ACE_Hash_Cache_Map_Manager::rebind (const KEY &key, + const VALUE &value, + VALUE &old_value) +{ + return ACE_HCMM_BASE::rebind (key, + value, + old_value); +} + +template ACE_INLINE int +ACE_Hash_Cache_Map_Manager::rebind (const KEY &key, + const VALUE &value, + KEY &old_key, + VALUE &old_value) +{ + return ACE_HCMM_BASE::rebind (key, + value, + old_key, + old_value); +} + +template ACE_INLINE int +ACE_Hash_Cache_Map_Manager::trybind (const KEY &key, + VALUE &value) +{ + return ACE_HCMM_BASE::trybind (key, + value); +} + +template ACE_INLINE int +ACE_Hash_Cache_Map_Manager::unbind (const KEY &key) +{ + return ACE_HCMM_BASE::unbind (key); +} + +template ACE_INLINE int +ACE_Hash_Cache_Map_Manager::unbind (const KEY &key, + VALUE &value) +{ + return ACE_HCMM_BASE::unbind (key, + value); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#undef ACE_T1 +#undef ACE_T2 diff --git a/ACE/ace/Hash_Map_Manager.h b/ACE/ace/Hash_Map_Manager.h new file mode 100644 index 00000000000..ed34b24f5b5 --- /dev/null +++ b/ACE/ace/Hash_Map_Manager.h @@ -0,0 +1,31 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Hash_Map_Manager.h + * + * $Id$ + * + * Backward compatibility header. + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_HASH_MAP_MANAGER_H +#define ACE_HASH_MAP_MANAGER_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +// Include the templates here. +#include "ace/Hash_Map_Manager_T.h" + +#include /**/ "ace/post.h" + +#endif /* ACE_HASH_MAP_MANAGER_H */ diff --git a/ACE/ace/Hash_Map_Manager_T.cpp b/ACE/ace/Hash_Map_Manager_T.cpp new file mode 100644 index 00000000000..3119c109cd2 --- /dev/null +++ b/ACE/ace/Hash_Map_Manager_T.cpp @@ -0,0 +1,530 @@ + +//============================================================================= +/** + * @file Hash_Map_Manager_T.cpp + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + + +#ifndef ACE_HASH_MAP_MANAGER_T_CPP +#define ACE_HASH_MAP_MANAGER_T_CPP + +#include "ace/Hash_Map_Manager_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (__ACE_INLINE__) +# include "ace/Hash_Map_Manager_T.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/Malloc_Base.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +ACE_Hash_Map_Entry::ACE_Hash_Map_Entry (ACE_Hash_Map_Entry *next, + ACE_Hash_Map_Entry *prev) + : next_ (next), + prev_ (prev) +{ +} + +template +ACE_Hash_Map_Entry::ACE_Hash_Map_Entry (const EXT_ID &ext_id, + const INT_ID &int_id, + ACE_Hash_Map_Entry *next, + ACE_Hash_Map_Entry *prev) + : ext_id_ (ext_id), + int_id_ (int_id), + next_ (next), + prev_ (prev) +{ +} + +template +ACE_Hash_Map_Entry::~ACE_Hash_Map_Entry (void) +{ +} + +template EXT_ID & +ACE_Hash_Map_Entry::key () +{ + return ext_id_; +} + +template INT_ID & +ACE_Hash_Map_Entry::item () +{ + return int_id_; +} + +template void +ACE_Hash_Map_Entry::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("next_ = %d"), this->next_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("prev_ = %d"), this->prev_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +template void +ACE_Hash_Map_Manager_Ex::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("total_size_ = %d"), this->total_size_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\ncur_size_ = %d"), this->cur_size_)); + this->table_allocator_->dump (); + this->entry_allocator_->dump (); + this->lock_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +template int +ACE_Hash_Map_Manager_Ex::create_buckets (size_t size) +{ + size_t bytes = size * sizeof (ACE_Hash_Map_Entry); + void *ptr; + + ACE_ALLOCATOR_RETURN (ptr, + this->table_allocator_->malloc (bytes), + -1); + + this->table_ = (ACE_Hash_Map_Entry *) ptr; + + this->total_size_ = size; + + // Initialize each entry in the hash table to be a circular linked + // list with the dummy node in the front serving as the anchor of + // the list. + for (size_t i = 0; i < size; i++) + new (&this->table_[i]) ACE_Hash_Map_Entry (&this->table_[i], + &this->table_[i]); + return 0; +} + +template int +ACE_Hash_Map_Manager_Ex::open (size_t size, + ACE_Allocator *table_alloc, + ACE_Allocator *entry_alloc) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + // Calling this->close_i () to ensure we release previous allocated + // memory before allocating new one. + this->close_i (); + + if (table_alloc == 0) + table_alloc = ACE_Allocator::instance (); + + this->table_allocator_ = table_alloc; + + if (entry_alloc == 0) + entry_alloc = table_alloc; + + this->entry_allocator_ = entry_alloc; + + // This assertion is here to help track a situation that shouldn't + // happen, but did with Sun C++ 4.1 (before a change to this class + // was made: it used to have an enum that was supposed to be defined + // to be ACE_DEFAULT_MAP_SIZE, but instead was defined to be 0). + if (size == 0) + return -1; + + return this->create_buckets (size); +} + +template int +ACE_Hash_Map_Manager_Ex::close_i (void) +{ + // Protect against "double-deletion" in case the destructor also + // gets called. + if (this->table_ != 0) + { + // Remove all the entries. + this->unbind_all_i (); + + // Iterate through the buckets cleaning up the sentinels. + for (size_t i = 0; i < this->total_size_; i++) + { + // Destroy the dummy entry. + ACE_Hash_Map_Entry *entry = &this->table_[i]; + + // The second argument results in a no-op instead of + // deallocation. + ACE_DES_FREE_TEMPLATE2 (entry, ACE_NOOP, + ACE_Hash_Map_Entry, EXT_ID, INT_ID); + } + + // Reset size. + this->total_size_ = 0; + + // Free table memory. + this->table_allocator_->free (this->table_); + + // Should be done last... + this->table_ = 0; + } + + return 0; +} + +template int +ACE_Hash_Map_Manager_Ex::unbind_all_i (void) +{ + // Iterate through the entire map calling the destuctor of each + // . + for (size_t i = 0; i < this->total_size_; i++) + { + for (ACE_Hash_Map_Entry *temp_ptr = this->table_[i].next_; + temp_ptr != &this->table_[i]; + ) + { + ACE_Hash_Map_Entry *hold_ptr = temp_ptr; + temp_ptr = temp_ptr->next_; + + // Explicitly call the destructor. + ACE_DES_FREE_TEMPLATE2 (hold_ptr, this->entry_allocator_->free, + ACE_Hash_Map_Entry, EXT_ID, INT_ID); + } + + // Restore the sentinel. + this->table_[i].next_ = &this->table_[i]; + this->table_[i].prev_ = &this->table_[i]; + } + + this->cur_size_ = 0; + + return 0; +} + +template int +ACE_Hash_Map_Manager_Ex::bind_i (const EXT_ID &ext_id, + const INT_ID &int_id, + ACE_Hash_Map_Entry *&entry) +{ + size_t loc; + int result = this->shared_find (ext_id, entry, loc); + + if (result == -1) + { + void *ptr; + // Not found. + ACE_ALLOCATOR_RETURN (ptr, + this->entry_allocator_->malloc (sizeof (ACE_Hash_Map_Entry)), + -1); + + entry = new (ptr) ACE_Hash_Map_Entry (ext_id, + int_id, + this->table_[loc].next_, + &this->table_[loc]); + this->table_[loc].next_ = entry; + entry->next_->prev_ = entry; + this->cur_size_++; + return 0; + } + else + return 1; +} + +template int +ACE_Hash_Map_Manager_Ex::trybind_i (const EXT_ID &ext_id, + INT_ID &int_id, + ACE_Hash_Map_Entry *&entry) +{ + size_t loc; + int result = this->shared_find (ext_id, entry, loc); + + if (result == -1) + { + // Not found. + void *ptr; + ACE_ALLOCATOR_RETURN (ptr, + this->entry_allocator_->malloc (sizeof (ACE_Hash_Map_Entry)), + -1); + + entry = new (ptr) ACE_Hash_Map_Entry (ext_id, + int_id, + this->table_[loc].next_, + &this->table_[loc]); + this->table_[loc].next_ = entry; + entry->next_->prev_ = entry; + this->cur_size_++; + return 0; + } + else + return 1; +} + +template int +ACE_Hash_Map_Manager_Ex::unbind_i (const EXT_ID &ext_id, + INT_ID &int_id) +{ + ACE_Hash_Map_Entry *temp; + + size_t loc; + int result = this->shared_find (ext_id, temp, loc); + + if (result == -1) + { + errno = ENOENT; + return -1; + } + + int_id = temp->int_id_; + + return this->unbind_i (temp); +} + +template int +ACE_Hash_Map_Manager_Ex::unbind_i (ACE_Hash_Map_Entry *entry) +{ + entry->next_->prev_ = entry->prev_; + entry->prev_->next_ = entry->next_; + + // Explicitly call the destructor. + ACE_DES_FREE_TEMPLATE2 (entry, this->entry_allocator_->free, + ACE_Hash_Map_Entry, EXT_ID, INT_ID); + + this->cur_size_--; + return 0; +} + +template int +ACE_Hash_Map_Manager_Ex::shared_find (const EXT_ID &ext_id, + ACE_Hash_Map_Entry *&entry, + size_t &loc) +{ + loc = this->hash (ext_id) % this->total_size_; + + ACE_Hash_Map_Entry *temp = this->table_[loc].next_; + + while (temp != &this->table_[loc] && this->equal (temp->ext_id_, ext_id) == 0) + temp = temp->next_; + + if (temp == &this->table_[loc]) + { + errno = ENOENT; + return -1; + } + else + { + entry = temp; + return 0; + } +} + +template int +ACE_Hash_Map_Manager_Ex::rebind_i (const EXT_ID &ext_id, + const INT_ID &int_id, + ACE_Hash_Map_Entry *&entry) +{ + size_t dummy; + if (this->shared_find (ext_id, entry, dummy) == -1) + return this->bind_i (ext_id, int_id); + else + { + entry->ext_id_ = ext_id; + entry->int_id_ = int_id; + return 1; + } +} + +template int +ACE_Hash_Map_Manager_Ex::rebind_i (const EXT_ID &ext_id, + const INT_ID &int_id, + INT_ID &old_int_id, + ACE_Hash_Map_Entry *&entry) +{ + size_t dummy; + if (this->shared_find (ext_id, entry, dummy) == -1) + return this->bind_i (ext_id, int_id); + else + { + old_int_id = entry->int_id_; + entry->ext_id_ = ext_id; + entry->int_id_ = int_id; + return 1; + } +} + +template int +ACE_Hash_Map_Manager_Ex::rebind_i (const EXT_ID &ext_id, + const INT_ID &int_id, + EXT_ID &old_ext_id, + INT_ID &old_int_id, + ACE_Hash_Map_Entry *&entry) +{ + size_t dummy; + if (this->shared_find (ext_id, entry, dummy) == -1) + return this->bind_i (ext_id, int_id); + else + { + old_ext_id = entry->ext_id_; + old_int_id = entry->int_id_; + entry->ext_id_ = ext_id; + entry->int_id_ = int_id; + return 1; + } +} + +// ------------------------------------------------------------ + +ACE_ALLOC_HOOK_DEFINE(ACE_Hash_Map_Iterator_Base_Ex) + +template void +ACE_Hash_Map_Iterator_Base_Ex::dump_i (void) const +{ + ACE_TRACE ("ACE_Hash_Map_Iterator_Base_Ex::dump_i"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("index_ = %d "), this->index_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("next_ = %x"), this->next_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +} + +template int +ACE_Hash_Map_Iterator_Base_Ex::forward_i (void) +{ + ACE_TRACE ("ACE_Hash_Map_Iterator_Base_Ex::forward_i"); + + if (this->map_man_->table_ == 0) + return -1; + // Handle initial case specially. + else if (this->index_ == -1) + { + this->index_++; + return this->forward_i (); + } + else if (this->index_ >= static_cast (this->map_man_->total_size_)) + return 0; + + this->next_ = this->next_->next_; + if (this->next_ == &this->map_man_->table_[this->index_]) + { + while (++this->index_ < static_cast (this->map_man_->total_size_)) + { + this->next_ = this->map_man_->table_[this->index_].next_; + if (this->next_ != &this->map_man_->table_[this->index_]) + break; + } + } + + return this->index_ < static_cast (this->map_man_->total_size_); +} + +template int +ACE_Hash_Map_Iterator_Base_Ex::reverse_i (void) +{ + ACE_TRACE ("ACE_Hash_Map_Iterator_Base_Ex::reverse_i"); + + if (this->map_man_->table_ == 0) + return -1; + else if (this->index_ == static_cast (this->map_man_->total_size_)) + { + this->index_--; + return this->reverse_i (); + } + else if (this->index_ < 0) + return 0; + + this->next_ = this->next_->prev_; + if (this->next_ == &this->map_man_->table_[this->index_]) + { + while (--this->index_ >= 0) + { + this->next_ = this->map_man_->table_[this->index_].prev_; + if (this->next_ != &this->map_man_->table_[this->index_]) + break; + } + } + + return this->index_ >= 0; +} + +// ------------------------------------------------------------ + +ACE_ALLOC_HOOK_DEFINE(ACE_Hash_Map_Const_Iterator_Base_Ex) + +template void +ACE_Hash_Map_Const_Iterator_Base_Ex::dump_i (void) const +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Base_Ex::dump_i"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("index_ = %d "), this->index_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("next_ = %x"), this->next_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +} + +template int +ACE_Hash_Map_Const_Iterator_Base_Ex::forward_i (void) +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Base_Ex::forward_i"); + + if (this->map_man_->table_ == 0) + return -1; + // Handle initial case specially. + else if (this->index_ == -1) + { + this->index_++; + return this->forward_i (); + } + else if (this->index_ >= (ssize_t) this->map_man_->total_size_) + return 0; + + this->next_ = this->next_->next_; + if (this->next_ == &this->map_man_->table_[this->index_]) + { + while (++this->index_ < (ssize_t) this->map_man_->total_size_) + { + this->next_ = this->map_man_->table_[this->index_].next_; + if (this->next_ != &this->map_man_->table_[this->index_]) + break; + } + } + + return this->index_ < (ssize_t) this->map_man_->total_size_; +} + +template int +ACE_Hash_Map_Const_Iterator_Base_Ex::reverse_i (void) +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Base_Ex::reverse_i"); + + if (this->map_man_->table_ == 0) + return -1; + else if (this->index_ == (ssize_t) this->map_man_->total_size_) + { + this->index_--; + return this->reverse_i (); + } + else if (this->index_ < 0) + return 0; + + this->next_ = this->next_->prev_; + if (this->next_ == &this->map_man_->table_[this->index_]) + { + while (--this->index_ >= 0) + { + this->next_ = this->map_man_->table_[this->index_].prev_; + if (this->next_ != &this->map_man_->table_[this->index_]) + break; + } + } + + return this->index_ >= 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HASH_MAP_MANAGER_T_CPP */ diff --git a/ACE/ace/Hash_Map_Manager_T.h b/ACE/ace/Hash_Map_Manager_T.h new file mode 100644 index 00000000000..7d4f270584f --- /dev/null +++ b/ACE/ace/Hash_Map_Manager_T.h @@ -0,0 +1,1274 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Hash_Map_Manager_T.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_HASH_MAP_MANAGER_T_H +#define ACE_HASH_MAP_MANAGER_T_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Default_Constants.h" +#include "ace/Functor_T.h" +#include "ace/Log_Msg.h" +#include + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Hash_Map_Entry + * + * @brief Define an entry in the hash table. + */ +template +class ACE_Hash_Map_Entry +{ +public: + // = Initialization and termination methods. + /// Constructor. + ACE_Hash_Map_Entry (const EXT_ID &ext_id, + const INT_ID &int_id, + ACE_Hash_Map_Entry *next = 0, + ACE_Hash_Map_Entry *prev = 0); + + /// Constructor. + ACE_Hash_Map_Entry (ACE_Hash_Map_Entry *next, + ACE_Hash_Map_Entry *prev); + + /// Destructor. + ~ACE_Hash_Map_Entry (void); + + /// Key accessor. + EXT_ID& key (void); + + /// Item accessor. + INT_ID& item (void); + + /// Key used to look up an entry. + /// @deprecated Use key() + EXT_ID ext_id_; + + /// The contents of the entry itself. + /// @deprecated Use item() + INT_ID int_id_; + + /// Pointer to the next item in the bucket of overflow nodes. + ACE_Hash_Map_Entry *next_; + + /// Pointer to the prev item in the bucket of overflow nodes. + ACE_Hash_Map_Entry *prev_; + + /// Dump the state of an object. + void dump (void) const; +}; + +// Forward decl. +template +class ACE_Hash_Map_Iterator_Base_Ex; + +// Forward decl. +template +class ACE_Hash_Map_Const_Iterator_Base_Ex; + +// Forward decl. +template +class ACE_Hash_Map_Iterator_Ex; + +// Forward decl. +template +class ACE_Hash_Map_Const_Iterator_Ex; + +// Forward decl. +template +class ACE_Hash_Map_Reverse_Iterator_Ex; + +// Forward decl. +template +class ACE_Hash_Map_Const_Reverse_Iterator_Ex; + +// Forward decl. +template +class ACE_Hash_Map_Bucket_Iterator; + +// Forward decl. +class ACE_Allocator; + +/** + * @class ACE_Hash_Map_Manager_Ex + * + * @brief Define a map abstraction that efficiently associates + * @c EXT_ID type objects with @c INT_ID type objects. + * + * This implementation of a map uses a hash table. Key hashing + * is achieved through the @c HASH_KEY object and key comparison is + * achieved through the @c COMPARE_KEYS object. + * This class uses an ACE_Allocator to allocate memory. The + * user can make this a persistent class by providing an + * ACE_Allocator with a persistable memory pool. + */ + +template +class ACE_Hash_Map_Manager_Ex +{ +public: + friend class ACE_Hash_Map_Iterator_Base_Ex; + friend class ACE_Hash_Map_Iterator_Ex; + friend class ACE_Hash_Map_Const_Iterator_Base_Ex; + friend class ACE_Hash_Map_Const_Iterator_Ex; + friend class ACE_Hash_Map_Reverse_Iterator_Ex; + friend class ACE_Hash_Map_Const_Reverse_Iterator_Ex; + friend class ACE_Hash_Map_Bucket_Iterator; + + typedef EXT_ID + KEY; + typedef INT_ID + VALUE; + typedef ACE_LOCK lock_type; + typedef ACE_Hash_Map_Entry + ENTRY; + + // = ACE-style iterator typedefs. + typedef ACE_Hash_Map_Iterator_Ex + ITERATOR; + typedef ACE_Hash_Map_Const_Iterator_Ex + CONST_ITERATOR; + typedef ACE_Hash_Map_Reverse_Iterator_Ex + REVERSE_ITERATOR; + typedef ACE_Hash_Map_Const_Reverse_Iterator_Ex + CONST_REVERSE_ITERATOR; + + // = STL-style iterator typedefs. + typedef ACE_Hash_Map_Iterator_Ex + iterator; + typedef ACE_Hash_Map_Const_Iterator_Ex + const_iterator; + typedef ACE_Hash_Map_Reverse_Iterator_Ex + reverse_iterator; + typedef ACE_Hash_Map_Const_Reverse_Iterator_Ex + const_reverse_iterator; + + // = STL-style typedefs/traits. + typedef EXT_ID key_type; + typedef INT_ID data_type; + typedef ACE_Hash_Map_Entry value_type; + typedef value_type & reference; + typedef value_type const & const_reference; + typedef value_type * pointer; + typedef value_type const * const_pointer; + typedef ptrdiff_t difference_type; + typedef size_t size_type; + + // = Initialization and termination methods. + + /** + * Initialize an ACE_Hash_Map_Manager_Ex with a default number of elements. + * + * @param table_alloc is a pointer to a memory allocator used for + * table_, so it should supply size*sizeof (ACE_Hash_Map_Entry). + * If @a table_alloc is 0 it defaults to ACE_Allocator::instance(). + * @param entry_alloc is a pointer to an additional allocator for + * entries, so it should be able to allocate 'size' / chunks + * of sizeof(ACE_Hash_Map_Entry) bytes each. + * If @a entry_alloc is 0 it defaults to the same allocator as + * @a table_alloc. + */ + ACE_Hash_Map_Manager_Ex (ACE_Allocator *table_alloc = 0, + ACE_Allocator *entry_alloc = 0); + + /** + * Initialize an ACE_Hash_Map_Manager_Ex with @a size elements. + * + * @param table_alloc is a pointer to a memory allocator used for + * table_, so it should supply size*sizeof (ACE_Hash_Map_Entry). + * If @a table_alloc is 0 it defaults to ACE_Allocator::instance(). + * @param entry_alloc is a pointer to an additional allocator for + * entries, so it should be able to allocate 'size' / chunks + * of sizeof(ACE_Hash_Map_Entry) bytes each. + * If @a entry_alloc is 0 it defaults to the same allocator as + * @a table_alloc. + */ + ACE_Hash_Map_Manager_Ex (size_t size, + ACE_Allocator *table_alloc = 0, + ACE_Allocator *entry_alloc = 0); + + /** + * Initialize an ACE_Hash_Map_Manager_Ex with @a size elements. + * @param table_alloc is a pointer to a memory allocator used for + * table_, so it should supply size*sizeof (ACE_Hash_Map_Entry). + * If @a table_alloc is 0 it defaults to ACE_Allocator::instance(). + * @param entry_alloc is a pointer to an additional allocator for + * entries, so it should be able to allocate 'size' / chunks + * of sizeof(ACE_Hash_Map_Entry) bytes each. + * If @a entry_alloc is 0 then it defaults to the same allocator as + * @a table_alloc. + * @return -1 on failure, 0 on success + */ + + int open (size_t size = ACE_DEFAULT_MAP_SIZE, + ACE_Allocator *table_alloc = 0, + ACE_Allocator *entry_alloc = 0); + + /// Close down the ACE_Hash_Map_Manager_Ex and release dynamically allocated + /// resources. + int close (void); + + /// Removes all the entries in the ACE_Hash_Map_Manager_Ex. + int unbind_all (void); + + /// Cleanup the ACE_Hash_Map_Manager_Ex. + ~ACE_Hash_Map_Manager_Ex (void); + + /** + * Associate @a item with @a int_id. If @a item is already in the + * map then the map is not changed. + * + * @retval 0 if a new entry is bound successfully. + * @retval 1 if an attempt is made to bind an existing entry. + * @retval -1 if a failure occurs; check @c errno for more information. + */ + int bind (const EXT_ID &item, + const INT_ID &int_id); + + /** + * Same as a normal bind, except the map entry is also passed back + * to the caller. The entry in this case will either be the newly + * created entry, or the existing one. + */ + int bind (const EXT_ID &ext_id, + const INT_ID &int_id, + ACE_Hash_Map_Entry *&entry); + + /** + * Associate @a ext_id with @a int_id if and only if @a ext_id is not + * in the map. If @a ext_id is already in the map then the @a int_id + * parameter is assigned the existing value in the map. Returns 0 + * if a new entry is bound successfully, returns 1 if an attempt is + * made to bind an existing entry, and returns -1 if failures occur. + */ + int trybind (const EXT_ID &ext_id, + INT_ID &int_id); + + /** + * Same as a normal trybind, except the map entry is also passed + * back to the caller. The entry in this case will either be the + * newly created entry, or the existing one. + */ + int trybind (const EXT_ID &ext_id, + INT_ID &int_id, + ACE_Hash_Map_Entry *&entry); + + /** + * Reassociate @a ext_id with @a int_id. If @a ext_id is not in the + * map then behaves just like . Returns 0 if a new entry is + * bound successfully, returns 1 if an existing entry was rebound, + * and returns -1 if failures occur. + */ + int rebind (const EXT_ID &ext_id, + const INT_ID &int_id); + + /** + * Same as a normal rebind, except the map entry is also passed back + * to the caller. The entry in this case will either be the newly + * created entry, or the existing one. + */ + int rebind (const EXT_ID &ext_id, + const INT_ID &int_id, + ACE_Hash_Map_Entry *&entry); + + /** + * Associate @a ext_id with @a int_id. If @a ext_id is not in the map + * then behaves just like . Otherwise, store the old value of + * @a int_id into the "out" parameter and rebind the new parameters. + * Returns 0 if a new entry is bound successfully, returns 1 if an + * existing entry was rebound, and returns -1 if failures occur. + */ + int rebind (const EXT_ID &ext_id, + const INT_ID &int_id, + INT_ID &old_int_id); + + /** + * Same as a normal rebind, except the map entry is also passed back + * to the caller. The entry in this case will either be the newly + * created entry, or the existing one. + */ + int rebind (const EXT_ID &ext_id, + const INT_ID &int_id, + INT_ID &old_int_id, + ACE_Hash_Map_Entry *&entry); + + /** + * Associate @a ext_id with @a int_id. If @a ext_id is not in the map + * then behaves just like . Otherwise, store the old values + * of @a ext_id and @a int_id into the "out" parameters and rebind the + * new parameters. This is very useful if you need to have an + * atomic way of updating ACE_Hash_Map_Entrys and you also need + * full control over memory allocation. Returns 0 if a new entry is + * bound successfully, returns 1 if an existing entry was rebound, + * and returns -1 if failures occur. + */ + int rebind (const EXT_ID &ext_id, + const INT_ID &int_id, + EXT_ID &old_ext_id, + INT_ID &old_int_id); + + /** + * Same as a normal rebind, except the map entry is also passed back + * to the caller. The entry in this case will either be the newly + * created entry, or the existing one. + */ + int rebind (const EXT_ID &ext_id, + const INT_ID &int_id, + EXT_ID &old_ext_id, + INT_ID &old_int_id, + ACE_Hash_Map_Entry *&entry); + + /// Locate @a ext_id and pass out parameter via @a int_id. + /// Return 0 if found, returns -1 if not found. + int find (const EXT_ID &ext_id, + INT_ID &int_id) const; + + /// Returns 0 if the @a ext_id is in the mapping, otherwise -1. + int find (const EXT_ID &ext_id) const; + + /// Locate @a ext_id and pass out parameter via @a entry. If found, + /// return 0, returns -1 if not found. + int find (const EXT_ID &ext_id, + ACE_Hash_Map_Entry *&entry) const; + + /// Locate @a ext_id and pass out an iterator that points to its + /// corresponding value. + /** + * @param pos @a pos will be set to @c end() if not found. + */ + void find (EXT_ID const & ext_id, iterator & pos) const; + + /** + * Unbind (remove) the @a ext_id from the map. Don't return the + * @a int_id to the caller (this is useful for collections where the + * @a int_ids are *not* dynamically allocated...) + */ + int unbind (const EXT_ID &ext_id); + + /// Break any association of @a ext_id. Returns the value of @a int_id + /// in case the caller needs to deallocate memory. Return 0 if the + /// unbind was successful, and returns -1 if failures occur. + int unbind (const EXT_ID &ext_id, + INT_ID &int_id); + + /// Remove entry from map. + /** + * This unbind operation is fast relative to those that accept an + * external ID parameter since no map lookup is performed. + * + * @return 0 if the unbind was successful, and -1 if failures + * occur. + */ + int unbind (ACE_Hash_Map_Entry *entry); + + /// Remove entry from map pointed to by @c iterator @a pos. + /** + * This unbind operation is fast relative to those that accept an + * external ID parameter since no map lookup is performed. + * + * @return 0 if the unbind was successful, and -1 if failures + * occur. + */ + int unbind (iterator pos); + + /// Returns the current number of ACE_Hash_Map_Entry objects in the + /// hash table. + size_t current_size (void) const; + + /// Return the size of the array that's used to point to the + /// linked lists of ACE_Hash_Map_Entry objects in the hash table. + size_t total_size (void) const; + + /** + * Returns a reference to the underlying . This makes it + * possible to acquire the lock explicitly, which can be useful in + * some cases if you instantiate the ACE_Atomic_Op with an + * ACE_Recursive_Mutex or ACE_Process_Mutex, or if you need to + * guard the state of an iterator. + * @note The right name would be , but HP/C++ will choke on that! + */ + ACE_LOCK &mutex (void); + + /// Dump the state of an object. + void dump (void) const; + + // = STL styled iterator factory functions. + + /// Return forward iterator. + iterator begin (void); + iterator end (void); + const_iterator begin (void) const; + const_iterator end (void) const; + + /// Return reverse iterator. + reverse_iterator rbegin (void); + reverse_iterator rend (void); + const_reverse_iterator rbegin (void) const; + const_reverse_iterator rend (void) const; + +protected: + // = The following methods do the actual work. + + /// Returns 1 if == , else 0. This is defined as a + /// separate method to facilitate template specialization. + int equal (const EXT_ID &id1, const EXT_ID &id2); + + /// Compute the hash value of the @a ext_id. This is defined as a + /// separate method to facilitate template specialization. + u_long hash (const EXT_ID &ext_id); + + // = These methods assume locks are held by private methods. + + /// Performs bind. Must be called with locks held. + int bind_i (const EXT_ID &ext_id, + const INT_ID &int_id); + + /// Performs bind. Must be called with locks held. + int bind_i (const EXT_ID &ext_id, + const INT_ID &int_id, + ACE_Hash_Map_Entry *&entry); + + /// Performs trybind. Must be called with locks held. + int trybind_i (const EXT_ID &ext_id, + INT_ID &int_id); + + /// Performs trybind. Must be called with locks held. + int trybind_i (const EXT_ID &ext_id, + INT_ID &int_id, + ACE_Hash_Map_Entry *&entry); + + /// Performs rebind. Must be called with locks held. + int rebind_i (const EXT_ID &ext_id, + const INT_ID &int_id); + + /// Performs rebind. Must be called with locks held. + int rebind_i (const EXT_ID &ext_id, + const INT_ID &int_id, + ACE_Hash_Map_Entry *&entry); + + /// Performs rebind. Must be called with locks held. + int rebind_i (const EXT_ID &ext_id, + const INT_ID &int_id, + INT_ID &old_int_id); + + /// Performs rebind. Must be called with locks held. + int rebind_i (const EXT_ID &ext_id, + const INT_ID &int_id, + INT_ID &old_int_id, + ACE_Hash_Map_Entry *&entry); + + /// Performs rebind. Must be called with locks held. + int rebind_i (const EXT_ID &ext_id, + const INT_ID &int_id, + EXT_ID &old_ext_id, + INT_ID &old_int_id); + + /// Performs rebind. Must be called with locks held. + int rebind_i (const EXT_ID &ext_id, + const INT_ID &int_id, + EXT_ID &old_ext_id, + INT_ID &old_int_id, + ACE_Hash_Map_Entry *&entry); + + /// Performs a find of @a int_id using @a ext_id as the key. Must be + /// called with locks held. + int find_i (const EXT_ID &ext_id, + INT_ID &int_id); + + /// Performs a find using @a ext_id as the key. Must be called with + /// locks held. + int find_i (const EXT_ID &ext_id); + + /// Performs a find using @a ext_id as the key. Must be called with + /// locks held. + int find_i (const EXT_ID &ext_id, + ACE_Hash_Map_Entry *&entry); + + /// Performs unbind. Must be called with locks held. + int unbind_i (const EXT_ID &ext_id, + INT_ID &int_id); + + /// Performs unbind. Must be called with locks held. + int unbind_i (const EXT_ID &ext_id); + + /// Performs unbind. Must be called with locks held. + int unbind_i (ACE_Hash_Map_Entry *entry); + + /** + * Resize the map. Must be called with locks held. + * @note This method should never be called more than once or else all the + * hashing will get screwed up as the size will change. + */ + int create_buckets (size_t size); + + /// Close down a . Must be called with + /// locks held. + int close_i (void); + + /// Removes all the entries in . Must be called with + /// locks held. + int unbind_all_i (void); + + /// Pointer to a memory allocator used for table_, so it should + /// supply size*sizeof (ACE_Hash_Map_Entry), + ACE_Allocator *table_allocator_; + + /// Addidtional allocator for entries, so it should be able to + /// allocate 'size' / chunks of sizeof(ACE_Hash_Map_Entry) bytes each. + ACE_Allocator *entry_allocator_; + + /// Synchronization variable for the MT_SAFE + /// @c ACE_Hash_Map_Manager_Ex. + mutable ACE_LOCK lock_; + + /// Function object used for hashing keys. + HASH_KEY hash_key_; + + /// Function object used for comparing keys. + COMPARE_KEYS compare_keys_; + +protected: + /// Returns the that corresponds to @a ext_id. + int shared_find (const EXT_ID &ext_id, + ACE_Hash_Map_Entry *&entry, + size_t &loc); + + /// Accessor of the underlying table + ACE_Hash_Map_Entry *table (void); + + /// Accessor of the current size attribute + size_t cur_size (void) const; + +private: + /** + * Array of *s, each of which points to an + * that serves as the beginning of a linked + * list of s that hash to that bucket. + */ + ACE_Hash_Map_Entry *table_; + + /// Total size of the hash table. + size_t total_size_; + + /// Current number of entries in the table + /// @note That this can be larger than due to the + /// bucket chaining). + size_t cur_size_; + + // = Disallow these operations. + ACE_UNIMPLEMENTED_FUNC (void operator= (const ACE_Hash_Map_Manager_Ex &)) + ACE_UNIMPLEMENTED_FUNC (ACE_Hash_Map_Manager_Ex (const ACE_Hash_Map_Manager_Ex &)) +}; + +/** + * @class ACE_Hash_Map_Iterator_Base_Ex + * + * @brief Base iterator for the ACE_Hash_Map_Manager_Ex + * + * This class factors out common code from its templatized + * subclasses. + */ +template +class ACE_Hash_Map_Iterator_Base_Ex +{ +public: + // = STL-style typedefs/traits. + typedef ACE_Hash_Map_Manager_Ex + container_type; + + // = std::iterator_traits typedefs/traits. + typedef typename container_type::value_type value_type; + typedef typename container_type::reference reference; + typedef typename container_type::pointer pointer; + typedef typename container_type::difference_type difference_type; + + // = Initialization method. + /// Contructor. + /** + * If @a head != @c false, the iterator constructed is positioned + * at the head of the map. It is positioned at the end otherwise. + * @par + */ + ACE_Hash_Map_Iterator_Base_Ex ( + ACE_Hash_Map_Manager_Ex &mm, + bool head); + + /// Contructor. + /** + * This constructor positions the iterator to the given @a entry. + */ + ACE_Hash_Map_Iterator_Base_Ex ( + ACE_Hash_Map_Manager_Ex & mm, + ACE_Hash_Map_Entry * entry, + size_t index); + + // = ITERATION methods. + + /// Pass back the next that hasn't been seen in the Set. + /// Returns 0 when all items have been seen, else 1. + int next (ACE_Hash_Map_Entry *&next_entry) const; + + /// Returns 1 when all items have been seen, else 0. + int done (void) const; + + /// Returns a reference to the interal element @c this is pointing to. + ACE_Hash_Map_Entry& operator* (void) const; + + /// Returns a pointer to the interal element @c this is pointing to. + ACE_Hash_Map_Entry* operator-> (void) const; + + /// Returns reference the Hash_Map_Manager_Ex that is being iterated + /// over. + ACE_Hash_Map_Manager_Ex& map (void); + + /// Check if two iterators point to the same position + bool operator== (const ACE_Hash_Map_Iterator_Base_Ex &) const; + bool operator!= (const ACE_Hash_Map_Iterator_Base_Ex &) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// Move forward by one element in the set. Returns 0 when there's + /// no more item in the set after the current items, else 1. + int forward_i (void); + + /// Move backward by one element in the set. Returns 0 when there's + /// no more item in the set before the current item, else 1. + int reverse_i (void); + + /// Dump the state of an object. + void dump_i (void) const; + + /// Map we are iterating over. + ACE_Hash_Map_Manager_Ex *map_man_; + + /// Keeps track of how far we've advanced in the table. + ssize_t index_; + + /// Keeps track of how far we've advanced in a linked list in each + /// table slot. + ACE_Hash_Map_Entry *next_; +}; + +/** + * @class ACE_Hash_Map_Const_Iterator_Base_Ex + * + * @brief Base const iterator for the ACE_Hash_Map_Manager_Ex + * + * This class factors out common code from its templatized + * subclasses. + */ +template +class ACE_Hash_Map_Const_Iterator_Base_Ex +{ +public: + // = STL-style typedefs/traits. + typedef ACE_Hash_Map_Manager_Ex + container_type; + + // = std::iterator_traits typedefs/traits. + typedef typename container_type::value_type value_type; + typedef typename container_type::const_reference reference; + typedef typename container_type::const_pointer pointer; + typedef typename container_type::difference_type difference_type; + + // = Initialization method. + /// Contructor. If head != 0, the iterator constructed is positioned + /// at the head of the map, it is positioned at the end otherwise. + ACE_Hash_Map_Const_Iterator_Base_Ex (const ACE_Hash_Map_Manager_Ex &mm, + int head); + + // = ITERATION methods. + + /// Pass back the next that hasn't been seen in the Set. + /// Returns 0 when all items have been seen, else 1. + int next (ACE_Hash_Map_Entry *&next_entry) const; + + /// Returns 1 when all items have been seen, else 0. + int done (void) const; + + /// Returns a reference to the interal element @c this is pointing to. + ACE_Hash_Map_Entry& operator* (void) const; + + /// Returns a pointer to the interal element @c this is pointing to. + ACE_Hash_Map_Entry* operator-> (void) const; + + /// Returns reference the Hash_Map_Manager_Ex that is being iterated + /// over. + const ACE_Hash_Map_Manager_Ex& map (void); + + /// Check if two iterators point to the same position + bool operator== (const ACE_Hash_Map_Const_Iterator_Base_Ex &) const; + bool operator!= (const ACE_Hash_Map_Const_Iterator_Base_Ex &) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// Move forward by one element in the set. Returns 0 when there's + /// no more item in the set after the current items, else 1. + int forward_i (void); + + /// Move backward by one element in the set. Returns 0 when there's + /// no more item in the set before the current item, else 1. + int reverse_i (void); + + /// Dump the state of an object. + void dump_i (void) const; + + /// Map we are iterating over. + const ACE_Hash_Map_Manager_Ex *map_man_; + + /// Keeps track of how far we've advanced in the table. + ssize_t index_; + + /// Keeps track of how far we've advanced in a linked list in each + /// table slot. + ACE_Hash_Map_Entry *next_; +}; + +/** + * @class ACE_Hash_Map_Iterator_Ex + * + * @brief Forward iterator for the ACE_Hash_Map_Manager_Ex. + * + * This class does not perform any internal locking of the + * ACE_Hash_Map_Manager_Ex it is iterating upon since locking is + * inherently inefficient and/or error-prone within an STL-style + * iterator. If you require locking, you can explicitly use an + * ACE_Guard or ACE_Read_Guard on the ACE_Hash_Map_Manager_Ex's + * internal lock, which is accessible via its method. + */ +template +class ACE_Hash_Map_Iterator_Ex : public ACE_Hash_Map_Iterator_Base_Ex +{ +public: + // = STL-style traits/typedefs + typedef typename ACE_Hash_Map_Iterator_Base_Ex::container_type + container_type; + + // = STL-style traits/typedefs + typedef std::bidirectional_iterator_tag iterator_category; + typedef typename container_type::value_type value_type; + typedef typename container_type::reference reference; + typedef typename container_type::pointer pointer; + typedef typename container_type::difference_type difference_type; + + // = Initialization method. + ACE_Hash_Map_Iterator_Ex (ACE_Hash_Map_Manager_Ex &mm, + int tail = 0); + + /// Contructor. + /** + * This constructor positions the iterator to the given @a entry. + */ + ACE_Hash_Map_Iterator_Ex ( + ACE_Hash_Map_Manager_Ex & mm, + ACE_Hash_Map_Entry * entry, + size_t index); + + // = Iteration methods. + /// Move forward by one element in the set. Returns 0 when all the + /// items in the set have been seen, else 1. + int advance (void); + + /// Dump the state of an object. + void dump (void) const; + + // = STL styled iteration, compare, and reference functions. + + /// Prefix advance. + ACE_Hash_Map_Iterator_Ex &operator++ (void); + + /// Postfix advance. + ACE_Hash_Map_Iterator_Ex operator++ (int); + + /// Prefix reverse. + ACE_Hash_Map_Iterator_Ex &operator-- (void); + + /// Postfix reverse. + ACE_Hash_Map_Iterator_Ex operator-- (int); + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +/** + * @class ACE_Hash_Map_Const_Iterator_Ex + * + * @brief Const forward iterator for the ACE_Hash_Map_Manager_Ex. + * + * This class does not perform any internal locking of the + * ACE_Hash_Map_Manager_Ex it is iterating upon since locking is + * inherently inefficient and/or error-prone within an STL-style + * iterator. If you require locking, you can explicitly use an + * ACE_Guard or ACE_Read_Guard on the ACE_Hash_Map_Manager_Ex's + * internal lock, which is accessible via its method. + */ +template +class ACE_Hash_Map_Const_Iterator_Ex : public ACE_Hash_Map_Const_Iterator_Base_Ex +{ +public: + // = STL-style traits/typedefs + typedef typename ACE_Hash_Map_Const_Iterator_Base_Ex::container_type + container_type; + + // = std::iterator_trait traits/typedefs + typedef std::bidirectional_iterator_tag iterator_category; + typedef typename container_type::value_type value_type; + typedef typename container_type::reference reference; + typedef typename container_type::pointer pointer; + typedef typename container_type::difference_type difference_type; + + // = Initialization method. + ACE_Hash_Map_Const_Iterator_Ex (const ACE_Hash_Map_Manager_Ex &mm, + int tail = 0); + + // = Iteration methods. + /// Move forward by one element in the set. Returns 0 when all the + /// items in the set have been seen, else 1. + int advance (void); + + /// Dump the state of an object. + void dump (void) const; + + // = STL styled iteration, compare, and reference functions. + + /// Prefix advance. + ACE_Hash_Map_Const_Iterator_Ex &operator++ (void); + + /// Postfix advance. + ACE_Hash_Map_Const_Iterator_Ex operator++ (int); + + /// Prefix reverse. + ACE_Hash_Map_Const_Iterator_Ex &operator-- (void); + + /// Postfix reverse. + ACE_Hash_Map_Const_Iterator_Ex operator-- (int); + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +/** + * @class ACE_Hash_Map_Bucket_Iterator + * + * @brief Forward iterator for the ACE_Hash_Map_Manager_Ex which + * only traverses a particular bucket. The particular bucket is + * specified by the parameter specified in the constructor. + * + * This class does not perform any internal locking of the + * ACE_Hash_Map_Manager_Ex it is iterating upon since locking is + * inherently inefficient and/or error-prone within an STL-style + * iterator. If you require locking, you can explicitly use an + * ACE_Guard or ACE_Read_Guard on the ACE_Hash_Map_Manager_Ex's + * internal lock, which is accessible via its method. + * + * Note that a creation method for this new iterator cannot be added + * to the hash map, since this would require adding explicit template + * instantiations for bucket iterators on platforms with broken + * templates. + */ +template +class ACE_Hash_Map_Bucket_Iterator +{ +public: + // = STL-style traits/typedefs + typedef ACE_Hash_Map_Manager_Ex + container_type; + + // = std::iterator traits/typedefs + typedef std::bidirectional_iterator_tag iterator_category; + typedef typename container_type::value_type value_type; + typedef typename container_type::reference reference; + typedef typename container_type::pointer pointer; + typedef typename container_type::difference_type difference_type; + + // = Initialization method. + ACE_Hash_Map_Bucket_Iterator (ACE_Hash_Map_Manager_Ex &mm, + const EXT_ID &ext_id, + int tail = 0); + + // = STL styled iteration, compare, and reference functions. + + /// Prefix advance. + ACE_Hash_Map_Bucket_Iterator &operator++ (void); + + /// Postfix advance. + ACE_Hash_Map_Bucket_Iterator operator++ (int); + + /// Prefix reverse. + ACE_Hash_Map_Bucket_Iterator &operator-- (void); + + /// Postfix reverse. + ACE_Hash_Map_Bucket_Iterator operator-- (int); + + /// Returns a reference to the interal element @c this is pointing to. + ACE_Hash_Map_Entry& operator* (void) const; + + /// Returns a pointer to the interal element @c this is pointing to. + ACE_Hash_Map_Entry* operator-> (void) const; + + /// Returns reference the Hash_Map_Manager_Ex that is being iterated + /// over. + ACE_Hash_Map_Manager_Ex& map (void); + + /// Check if two iterators point to the same position + bool operator== (const ACE_Hash_Map_Bucket_Iterator &) const; + bool operator!= (const ACE_Hash_Map_Bucket_Iterator &) const; + +protected: + /// Move forward by one element in the set. Returns 0 when there's + /// no more item in the set after the current items, else 1. + int forward_i (void); + + /// Move backward by one element in the set. Returns 0 when there's + /// no more item in the set before the current item, else 1. + int reverse_i (void); + + /// Map we are iterating over. + ACE_Hash_Map_Manager_Ex *map_man_; + + /// Keeps track of how far we've advanced in the table. + ssize_t index_; + + /// Keeps track of how far we've advanced in a linked list in each + /// table slot. + ACE_Hash_Map_Entry *next_; +}; + +/** + * @class ACE_Hash_Map_Reverse_Iterator_Ex + * + * @brief Reverse iterator for the ACE_Hash_Map_Manager_Ex. + * + * This class does not perform any internal locking of the + * ACE_Hash_Map_Manager_Ex it is iterating upon since locking is + * inherently inefficient and/or error-prone within an STL-style + * iterator. If you require locking, you can explicitly use an + * ACE_Guard or ACE_Read_Guard on the ACE_Hash_Map_Manager_Ex's + * internal lock, which is accessible via its method. + */ +template +class ACE_Hash_Map_Reverse_Iterator_Ex : public ACE_Hash_Map_Iterator_Base_Ex +{ +public: + // = STL-style traits/typedefs + typedef typename ACE_Hash_Map_Iterator_Base_Ex::container_type + container_type; + + // = std::iterator_traits typedefs + typedef std::bidirectional_iterator_tag iterator_category; + typedef typename container_type::value_type value_type; + typedef typename container_type::reference reference; + typedef typename container_type::pointer pointer; + typedef typename container_type::difference_type difference_type; + + // = Initialization method. + ACE_Hash_Map_Reverse_Iterator_Ex (ACE_Hash_Map_Manager_Ex &mm, + int head = 0); + + // = Iteration methods. + /// Move forward by one element in the set. Returns 0 when all the + /// items in the set have been seen, else 1. + int advance (void); + + /// Dump the state of an object. + void dump (void) const; + + // = STL styled iteration, compare, and reference functions. + + /// Prefix reverse. + ACE_Hash_Map_Reverse_Iterator_Ex &operator++ (void); + + /// Postfix reverse. + ACE_Hash_Map_Reverse_Iterator_Ex operator++ (int); + + /// Prefix advance. + ACE_Hash_Map_Reverse_Iterator_Ex &operator-- (void); + + /// Postfix advance. + ACE_Hash_Map_Reverse_Iterator_Ex operator-- (int); + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +/** + * @class ACE_Hash_Map_Const_Reverse_Iterator_Ex + * + * @brief Const reverse iterator for the ACE_Hash_Map_Manager_Ex. + * + * This class does not perform any internal locking of the + * ACE_Hash_Map_Manager_Ex it is iterating upon since locking is + * inherently inefficient and/or error-prone within an STL-style + * iterator. If you require locking, you can explicitly use an + * ACE_Guard or ACE_Read_Guard on the ACE_Hash_Map_Manager_Ex's + * internal lock, which is accessible via its method. + */ +template +class ACE_Hash_Map_Const_Reverse_Iterator_Ex : public ACE_Hash_Map_Const_Iterator_Base_Ex +{ +public: + // = STL-style traits/typedefs + typedef typename ACE_Hash_Map_Const_Iterator_Base_Ex::container_type + container_type; + + // = std::iterator_traits typedefs + typedef std::bidirectional_iterator_tag iterator_category; + typedef typename container_type::value_type value_type; + typedef typename container_type::reference reference; + typedef typename container_type::pointer pointer; + typedef typename container_type::difference_type difference_type; + + // = Initialization method. + ACE_Hash_Map_Const_Reverse_Iterator_Ex (const ACE_Hash_Map_Manager_Ex &mm, + int head = 0); + + // = Iteration methods. + /// Move forward by one element in the set. Returns 0 when all the + /// items in the set have been seen, else 1. + int advance (void); + + /// Dump the state of an object. + void dump (void) const; + + // = STL styled iteration, compare, and reference functions. + + /// Prefix reverse. + ACE_Hash_Map_Const_Reverse_Iterator_Ex &operator++ (void); + + /// Postfix reverse. + ACE_Hash_Map_Const_Reverse_Iterator_Ex operator++ (int); + + /// Prefix advance. + ACE_Hash_Map_Const_Reverse_Iterator_Ex &operator-- (void); + + /// Postfix advance. + ACE_Hash_Map_Const_Reverse_Iterator_Ex operator-- (int); + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +/** + * @class ACE_Hash_Map_Manager + * + * @brief Wrapper for backward compatibility. + * + * This implementation of a map uses a hash table. This class + * expects that the contains a method called . + * In addition, the must support . Both of + * these constraints can be alleviated via template + * specialization, as shown in the $ACE_ROOT/tests/Conn_Test.cpp + * test. + * + * Requirements and Performance Characteristics + * - Internal Structure + * Hash Table + * - Duplicates allowed? + * No + * - Random access allowed? + * Yes + * - Search speed + * O(1) + * - Insert/replace speed + * O(1), can be longer if the hash map has to resize + * - Iterator still valid after change to container? + * Yes + * - Frees memory for removed elements? + * Yes + * - Items inserted by + * Value + * - Requirements for key type + * -# Default constructor + * -# Copy constructor + * -# operator= + * -# operator== + * - Requirements for object type + * -# Default constructor + * -# Copy constructor + * -# operator= + * -# operator< + */ +template +class ACE_Hash_Map_Manager : public ACE_Hash_Map_Manager_Ex, ACE_Equal_To, ACE_LOCK> +{ +public: + + /** + * Initialize a @c Hash_Map_Manager with default size elements. + * @param table_alloc is a pointer to a memory allocator used for + * table_, so it should supply size*sizeof (ACE_Hash_Map_Entry). + * @param entry_alloc is a pointer to an additional allocator for + * entries, so it should be able to allocate 'size' / chunks + * of sizeof(ACE_Hash_Map_Entry) bytes each. + * If @c table_alloc is 0 it defaults to @c ACE_Allocator::instance(). + * If @c entry_alloc is 0 then it defaults to the same allocator as + * @c table_alloc. + */ + ACE_Hash_Map_Manager (ACE_Allocator *table_alloc = 0, + ACE_Allocator *entry_alloc = 0); + + /** + * Initialize a @c Hash_Map_Manager with @c size elements. + * @param table_alloc is a pointer to a memory allocator used for + * table_, so it should supply size*sizeof (ACE_Hash_Map_Entry). + * @param entry_alloc is a pointer to an additional allocator for + * entries, so it should be able to allocate 'size' / chunks + * of sizeof(ACE_Hash_Map_Entry) bytes each. + * If @c table_alloc is 0 it defaults to @c ACE_Allocator::instance(). + * If @c entry_alloc is 0 then it defaults to the same allocator as + * @c table_alloc. + */ + ACE_Hash_Map_Manager (size_t size, + ACE_Allocator *table_alloc = 0, + ACE_Allocator *entry_alloc = 0); + + // = The following two are necessary for template specialization of + // ACE_Hash_Map_Manager to work. + int equal (const EXT_ID &id1, const EXT_ID &id2); + u_long hash (const EXT_ID &ext_id); +}; + +/** + * @class ACE_Hash_Map_Iterator + * + * @brief Wrapper for backward compatibility. + */ +template +class ACE_Hash_Map_Iterator : public ACE_Hash_Map_Iterator_Ex, ACE_Equal_To, ACE_LOCK> +{ +public: +#if defined (ACE_HAS_STL_ITERATOR_TRAITS) + typedef typename ACE_Hash_Map_Iterator_Ex, ACE_Equal_To, ACE_LOCK>::iterator_category iterator_category; + typedef typename ACE_Hash_Map_Iterator_Ex, ACE_Equal_To, ACE_LOCK>::value_type value_type; + typedef typename ACE_Hash_Map_Iterator_Ex, ACE_Equal_To, ACE_LOCK>::reference reference; + typedef typename ACE_Hash_Map_Iterator_Ex, ACE_Equal_To, ACE_LOCK>::pointer pointer; + typedef typename ACE_Hash_Map_Iterator_Ex, ACE_Equal_To, ACE_LOCK>::difference_type difference_type; +#endif + + // = Initialization method. + /// Construct from map + ACE_Hash_Map_Iterator (ACE_Hash_Map_Manager &mm, + int tail = 0); + + /// Construct from base + ACE_Hash_Map_Iterator (const ACE_Hash_Map_Iterator_Ex, ACE_Equal_To, ACE_LOCK> &base); + + /// Assignment from base + ACE_Hash_Map_Iterator & + operator= (const ACE_Hash_Map_Iterator_Ex, ACE_Equal_To, ACE_LOCK> &base); +}; + +/** + * @class ACE_Hash_Map_Const_Iterator + * + * @brief Wrapper for backward compatibility. + */ +template +class ACE_Hash_Map_Const_Iterator : public ACE_Hash_Map_Const_Iterator_Ex, ACE_Equal_To, ACE_LOCK> +{ +public: + // = STL-style traits/typedefs + typedef typename ACE_Hash_Map_Const_Iterator_Ex, ACE_Equal_To, ACE_LOCK>::container_type + container_type; + + // = std::iterator_traits typedefs + typedef typename container_type::iterator_category iterator_category; + typedef typename container_type::value_type value_type; + typedef typename container_type::reference reference; + typedef typename container_type::pointer pointer; + typedef typename container_type::difference_type difference_type; + + // = Initialization method. + /// Construct from map + ACE_Hash_Map_Const_Iterator (const ACE_Hash_Map_Manager &mm, + int tail = 0); + + /// Construct from base + ACE_Hash_Map_Const_Iterator (const ACE_Hash_Map_Const_Iterator_Ex, ACE_Equal_To, ACE_LOCK> &base); + + /// Assignment from base + ACE_Hash_Map_Const_Iterator & + operator= (const ACE_Hash_Map_Const_Iterator_Ex, ACE_Equal_To, ACE_LOCK> &base); +}; + +/** + * @class ACE_Hash_Map_Reverse_Iterator + * + * @brief Wrapper for backward compatibility. + */ +template +class ACE_Hash_Map_Reverse_Iterator : public ACE_Hash_Map_Reverse_Iterator_Ex, ACE_Equal_To, ACE_LOCK> +{ +public: + // = STL-style traits/typedefs + typedef typename ACE_Hash_Map_Reverse_Iterator_Ex, ACE_Equal_To, ACE_LOCK>::container_type + container_type; + + // = std::iterator_traits typedefs + typedef typename container_type::iterator_category iterator_category; + typedef typename container_type::value_type value_type; + typedef typename container_type::reference reference; + typedef typename container_type::pointer pointer; + typedef typename container_type::difference_type difference_type; + + // = Initialization method. + ACE_Hash_Map_Reverse_Iterator (ACE_Hash_Map_Manager &mm, + int head = 0); + + /// Construct from base + ACE_Hash_Map_Reverse_Iterator (const ACE_Hash_Map_Reverse_Iterator_Ex, ACE_Equal_To, ACE_LOCK> &base); + + /// Assignment from base + ACE_Hash_Map_Reverse_Iterator & + operator= (const ACE_Hash_Map_Reverse_Iterator_Ex, ACE_Equal_To, ACE_LOCK> &base); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +# include "ace/Hash_Map_Manager_T.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Hash_Map_Manager_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Hash_Map_Manager_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" +#endif /* ACE_HASH_MAP_MANAGER_T_H */ diff --git a/ACE/ace/Hash_Map_Manager_T.inl b/ACE/ace/Hash_Map_Manager_T.inl new file mode 100644 index 00000000000..1385ea3e5b2 --- /dev/null +++ b/ACE/ace/Hash_Map_Manager_T.inl @@ -0,0 +1,1253 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/Guard_T.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE +ACE_Hash_Map_Manager_Ex::ACE_Hash_Map_Manager_Ex (size_t size, + ACE_Allocator *table_alloc, + ACE_Allocator *entry_alloc) + : table_allocator_ (table_alloc), + entry_allocator_ (entry_alloc), + table_ (0), + total_size_ (0), + cur_size_ (0) +{ + if (this->open (size, table_alloc, entry_alloc) == -1) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("ACE_Hash_Map_Manager_Ex\n"))); +} + +template ACE_INLINE +ACE_Hash_Map_Manager_Ex::ACE_Hash_Map_Manager_Ex (ACE_Allocator *table_alloc, + ACE_Allocator *entry_alloc) + : table_allocator_ (table_alloc), + entry_allocator_ (entry_alloc), + table_ (0), + total_size_ (0), + cur_size_ (0) +{ + if (this->open (ACE_DEFAULT_MAP_SIZE, table_alloc, entry_alloc) == -1) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_Hash_Map_Manager_Ex open"))); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::close (void) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->close_i (); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::unbind_all (void) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->unbind_all_i (); +} + +template ACE_INLINE +ACE_Hash_Map_Manager_Ex::~ACE_Hash_Map_Manager_Ex (void) +{ + this->close (); +} + +template ACE_INLINE size_t +ACE_Hash_Map_Manager_Ex::current_size (void) const +{ + return this->cur_size_; +} + +template ACE_INLINE size_t +ACE_Hash_Map_Manager_Ex::total_size (void) const +{ + return this->total_size_; +} + +template ACE_INLINE ACE_LOCK & +ACE_Hash_Map_Manager_Ex::mutex (void) +{ + ACE_TRACE ("ACE_Hash_Map_Manager_Ex::mutex"); + return this->lock_; +} + +template ACE_INLINE u_long +ACE_Hash_Map_Manager_Ex::hash (const EXT_ID &ext_id) +{ + return this->hash_key_ (ext_id); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::equal (const EXT_ID &id1, + const EXT_ID &id2) +{ + return this->compare_keys_ (id1, id2); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::bind_i (const EXT_ID &ext_id, + const INT_ID &int_id) +{ + ACE_Hash_Map_Entry *temp; + + return this->bind_i (ext_id, int_id, temp); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::bind (const EXT_ID &ext_id, + const INT_ID &int_id) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->bind_i (ext_id, int_id); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::bind (const EXT_ID &ext_id, + const INT_ID &int_id, + ACE_Hash_Map_Entry *&entry) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->bind_i (ext_id, int_id, entry); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::trybind_i (const EXT_ID &ext_id, + INT_ID &int_id) +{ + ACE_Hash_Map_Entry *temp; + + int result = this->trybind_i (ext_id, int_id, temp); + if (result == 1) + int_id = temp->int_id_; + return result; +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::trybind (const EXT_ID &ext_id, + INT_ID &int_id) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->trybind_i (ext_id, int_id); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::trybind (const EXT_ID &ext_id, + INT_ID &int_id, + ACE_Hash_Map_Entry *&entry) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->trybind_i (ext_id, int_id, entry); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::unbind_i (const EXT_ID &ext_id) +{ + INT_ID int_id; + + return this->unbind_i (ext_id, int_id); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::unbind (const EXT_ID &ext_id, + INT_ID &int_id) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->unbind_i (ext_id, int_id); +} + +template +ACE_INLINE int +ACE_Hash_Map_Manager_Ex::unbind ( + typename ACE_Hash_Map_Manager_Ex::iterator pos) +{ + return this->unbind (&(*pos)); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::unbind (const EXT_ID &ext_id) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->unbind_i (ext_id) == -1 ? -1 : 0; +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::unbind (ACE_Hash_Map_Entry *entry) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->unbind_i (entry) == -1 ? -1 : 0; +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::find_i (const EXT_ID &ext_id, + INT_ID &int_id) +{ + ACE_Hash_Map_Entry *entry; + + size_t dummy; + if (this->shared_find (ext_id, entry, dummy) == -1) + return -1; + else + { + int_id = entry->int_id_; + return 0; + } +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::find_i (const EXT_ID &ext_id) +{ + ACE_Hash_Map_Entry *entry; + + size_t dummy; + return this->shared_find (ext_id, entry, dummy); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::find (const EXT_ID &ext_id, + INT_ID &int_id) const +{ + ACE_Hash_Map_Manager_Ex *nc_this = + const_cast *> + (this); + + ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return nc_this->find_i (ext_id, int_id); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::find (const EXT_ID &ext_id) const +{ + ACE_Hash_Map_Manager_Ex *nc_this = + const_cast *> + (this); + + ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return nc_this->find_i (ext_id); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::find_i (const EXT_ID &ext_id, + ACE_Hash_Map_Entry *&entry) +{ + size_t dummy; + return this->shared_find (ext_id, entry, dummy); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::find (const EXT_ID &ext_id, + ACE_Hash_Map_Entry *&entry) const +{ + ACE_Hash_Map_Manager_Ex *nc_this = + const_cast *> + (this); + + ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return nc_this->find_i (ext_id, entry); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::rebind_i (const EXT_ID &ext_id, + const INT_ID &int_id) +{ + ACE_Hash_Map_Entry *node; + + return this->rebind_i (ext_id, + int_id, + node); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::rebind_i (const EXT_ID &ext_id, + const INT_ID &int_id, + INT_ID &old_int_id) +{ + ACE_Hash_Map_Entry *node; + + return this->rebind_i (ext_id, + int_id, + old_int_id, + node); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::rebind_i (const EXT_ID &ext_id, + const INT_ID &int_id, + EXT_ID &old_ext_id, + INT_ID &old_int_id) +{ + ACE_Hash_Map_Entry *node; + + return this->rebind_i (ext_id, + int_id, + old_ext_id, + old_int_id, + node); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::rebind (const EXT_ID &ext_id, + const INT_ID &int_id) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->rebind_i (ext_id, int_id); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::rebind (const EXT_ID &ext_id, + const INT_ID &int_id, + ACE_Hash_Map_Entry *&entry) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->rebind_i (ext_id, int_id, entry); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::rebind (const EXT_ID &ext_id, + const INT_ID &int_id, + INT_ID &old_int_id) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->rebind_i (ext_id, int_id, old_int_id); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::rebind (const EXT_ID &ext_id, + const INT_ID &int_id, + INT_ID &old_int_id, + ACE_Hash_Map_Entry *&entry) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->rebind_i (ext_id, int_id, old_int_id, entry); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::rebind (const EXT_ID &ext_id, + const INT_ID &int_id, + EXT_ID &old_ext_id, + INT_ID &old_int_id) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->rebind_i (ext_id, int_id, old_ext_id, old_int_id); +} + +template ACE_INLINE int +ACE_Hash_Map_Manager_Ex::rebind (const EXT_ID &ext_id, + const INT_ID &int_id, + EXT_ID &old_ext_id, + INT_ID &old_int_id, + ACE_Hash_Map_Entry *&entry) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->rebind_i (ext_id, int_id, old_ext_id, old_int_id, entry); +} + +template ACE_INLINE +typename ACE_Hash_Map_Manager_Ex::iterator +ACE_Hash_Map_Manager_Ex::begin (void) +{ + return iterator (*this); +} + +template ACE_INLINE +typename ACE_Hash_Map_Manager_Ex::iterator +ACE_Hash_Map_Manager_Ex::end (void) +{ + return iterator (*this, 1); +} + +template ACE_INLINE +typename ACE_Hash_Map_Manager_Ex::const_iterator +ACE_Hash_Map_Manager_Ex::begin (void) const +{ + return const_iterator (*this); +} + +template ACE_INLINE +typename ACE_Hash_Map_Manager_Ex::const_iterator +ACE_Hash_Map_Manager_Ex::end (void) const +{ + return const_iterator (*this, 1); +} + +template ACE_INLINE +typename ACE_Hash_Map_Manager_Ex::reverse_iterator +ACE_Hash_Map_Manager_Ex::rbegin (void) +{ + return reverse_iterator (*this); +} + +template ACE_INLINE +typename ACE_Hash_Map_Manager_Ex::reverse_iterator +ACE_Hash_Map_Manager_Ex::rend (void) +{ + return reverse_iterator (*this, 1); +} + + template ACE_INLINE + typename ACE_Hash_Map_Manager_Ex::const_reverse_iterator + ACE_Hash_Map_Manager_Ex::rbegin (void) const + { + return const_reverse_iterator (*this); + } + + template ACE_INLINE + typename ACE_Hash_Map_Manager_Ex::const_reverse_iterator + ACE_Hash_Map_Manager_Ex::rend (void) const + { + return const_reverse_iterator (*this, 1); + } + +template ACE_INLINE +ACE_Hash_Map_Entry * +ACE_Hash_Map_Manager_Ex::table (void) +{ + return this->table_; +} + +template ACE_INLINE +size_t +ACE_Hash_Map_Manager_Ex::cur_size (void) const +{ + return this->cur_size_; +} + +template +ACE_INLINE void +ACE_Hash_Map_Manager_Ex::find ( + EXT_ID const &ext_id, + typename ACE_Hash_Map_Manager_Ex::iterator & pos) const +{ + ENTRY * entry = 0; + size_t index = 0; + + ACE_Hash_Map_Manager_Ex *nc_this = + const_cast *> + (this); + + ACE_READ_GUARD (ACE_LOCK, ace_mon, this->lock_); + + if (nc_this->shared_find (ext_id, entry, index) != -1) + pos = iterator (*nc_this, entry, index); + else + pos = nc_this->end (); +} + +// --------------------------------------------------------------------- + +template +ACE_INLINE +ACE_Hash_Map_Iterator_Base_Ex::ACE_Hash_Map_Iterator_Base_Ex ( + ACE_Hash_Map_Manager_Ex &mm, + bool head) + : map_man_ (&mm), + index_ (head ? -1 : (ssize_t) mm.total_size_), + next_ (0) +{ + if (mm.table_ != 0) + this->next_ = &mm.table_[head ? 0 : mm.total_size_ - 1]; +} + +template +ACE_INLINE +ACE_Hash_Map_Iterator_Base_Ex::ACE_Hash_Map_Iterator_Base_Ex ( + ACE_Hash_Map_Manager_Ex & mm, + ACE_Hash_Map_Entry * entry, + size_t index) + : map_man_ (&mm) + , index_ (static_cast (index)) + , next_ (entry) +{ +} + +template ACE_INLINE int +ACE_Hash_Map_Iterator_Base_Ex::next (ACE_Hash_Map_Entry *&entry) const +{ + ACE_TRACE ("ACE_Hash_Map_Iterator_Base_Ex::next"); + + if (this->map_man_->table_ != 0 + && this->index_ < static_cast (this->map_man_->total_size_) + && this->index_ >= 0 + && this->next_ != &this->map_man_->table_[this->index_]) + { + entry = this->next_; + return 1; + } + else + return 0; +} + +template ACE_INLINE int +ACE_Hash_Map_Iterator_Base_Ex::done (void) const +{ + ACE_TRACE ("ACE_Hash_Map_Iterator_Base_Ex::done"); + + return this->map_man_->table_ == 0 + || this->index_ >= static_cast (this->map_man_->total_size_) + || this->index_ < 0; +} + +template ACE_INLINE +ACE_Hash_Map_Entry & +ACE_Hash_Map_Iterator_Base_Ex::operator* (void) const +{ + ACE_TRACE ("ACE_Hash_Map_Iterator_Base_Ex::operator*"); + ACE_Hash_Map_Entry *retv = 0; + + int result = this->next (retv); + + ACE_UNUSED_ARG (result); + ACE_ASSERT (result != 0); + + return *retv; +} + +template ACE_INLINE +ACE_Hash_Map_Entry * +ACE_Hash_Map_Iterator_Base_Ex::operator-> (void) const +{ + ACE_TRACE ("ACE_Hash_Map_Iterator_Base_Ex::operator->"); + ACE_Hash_Map_Entry *retv = 0; + + int result = this->next (retv); + + ACE_UNUSED_ARG (result); + ACE_ASSERT (result != 0); + + return retv; +} + +// Returns the reference to the hash_map_manager_ex that is being +// iterated over. +template ACE_INLINE +ACE_Hash_Map_Manager_Ex& +ACE_Hash_Map_Iterator_Base_Ex::map (void) +{ + ACE_TRACE ("ACE_Hash_Map_Iterator_Base_Ex::map"); + return *this->map_man_; +} + +template ACE_INLINE bool +ACE_Hash_Map_Iterator_Base_Ex::operator== (const ACE_Hash_Map_Iterator_Base_Ex &rhs) const +{ + ACE_TRACE ("ACE_Hash_Map_Iterator_Base_Ex::operator=="); + return this->map_man_ == rhs.map_man_ + && this->index_ == rhs.index_ + && this->next_ == rhs.next_; +} + +template ACE_INLINE bool +ACE_Hash_Map_Iterator_Base_Ex::operator!= (const ACE_Hash_Map_Iterator_Base_Ex &rhs) const +{ + ACE_TRACE ("ACE_Hash_Map_Iterator_Base_Ex::operator!="); + return this->next_ != rhs.next_ + || this->index_ != rhs.index_ + || this->map_man_ != rhs.map_man_; +} + +template ACE_INLINE +ACE_Hash_Map_Const_Iterator_Base_Ex::ACE_Hash_Map_Const_Iterator_Base_Ex (const ACE_Hash_Map_Manager_Ex &mm, + int head) + : map_man_ (&mm), + index_ (head != 0 ? -1 : (ssize_t) mm.total_size_), + next_ (0) +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Base_Ex::ACE_Hash_Map_Const_Iterator_Base_Ex"); + + if (mm.table_ != 0) + this->next_ = &mm.table_[head != 0 ? 0 : mm.total_size_ - 1]; +} + +template ACE_INLINE int +ACE_Hash_Map_Const_Iterator_Base_Ex::next (ACE_Hash_Map_Entry *&entry) const +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Base_Ex::next"); + + if (this->map_man_->table_ != 0 + && this->index_ < (ssize_t) this->map_man_->total_size_ + && this->index_ >= 0 + && this->next_ != &this->map_man_->table_[this->index_]) + { + entry = this->next_; + return 1; + } + else + return 0; +} + +template ACE_INLINE int +ACE_Hash_Map_Const_Iterator_Base_Ex::done (void) const +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Base_Ex::done"); + + return this->map_man_->table_ == 0 + || this->index_ >= (ssize_t) this->map_man_->total_size_ + || this->index_ < 0; +} + +template ACE_INLINE +ACE_Hash_Map_Entry & +ACE_Hash_Map_Const_Iterator_Base_Ex::operator* (void) const +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Base_Ex::operator*"); + ACE_Hash_Map_Entry *retv = 0; + + int result = this->next (retv); + + ACE_UNUSED_ARG (result); + ACE_ASSERT (result != 0); + + return *retv; +} + +template ACE_INLINE +ACE_Hash_Map_Entry * +ACE_Hash_Map_Const_Iterator_Base_Ex::operator-> (void) const +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Base_Ex::operator->"); + ACE_Hash_Map_Entry *retv = 0; + + int result = this->next (retv); + + ACE_UNUSED_ARG (result); + ACE_ASSERT (result != 0); + + return retv; +} + +// Returns the reference to the hash_map_manager_ex that is being +// iterated over. +template ACE_INLINE +const ACE_Hash_Map_Manager_Ex& +ACE_Hash_Map_Const_Iterator_Base_Ex::map (void) +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Base_Ex::map"); + return *this->map_man_; +} + +template ACE_INLINE bool +ACE_Hash_Map_Const_Iterator_Base_Ex::operator== (const ACE_Hash_Map_Const_Iterator_Base_Ex &rhs) const +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Base_Ex::operator=="); + return this->map_man_ == rhs.map_man_ + && this->index_ == rhs.index_ + && this->next_ == rhs.next_; +} + +template ACE_INLINE bool +ACE_Hash_Map_Const_Iterator_Base_Ex::operator!= (const ACE_Hash_Map_Const_Iterator_Base_Ex &rhs) const +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Base_Ex::operator!="); + return this->next_ != rhs.next_ + || this->index_ != rhs.index_ + || this->map_man_ != rhs.map_man_; +} + +ACE_ALLOC_HOOK_DEFINE(ACE_Hash_Map_Iterator_Ex) + +template ACE_INLINE void +ACE_Hash_Map_Iterator_Ex::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Hash_Map_Iterator_Ex::dump"); + + this->dump_i (); +#endif /* ACE_HAS_DUMP */ +} + +template ACE_INLINE +ACE_Hash_Map_Iterator_Ex::ACE_Hash_Map_Iterator_Ex (ACE_Hash_Map_Manager_Ex &mm, + int tail) + : ACE_Hash_Map_Iterator_Base_Ex (mm, + tail == 0 ? 1 : 0) +{ + ACE_TRACE ("ACE_Hash_Map_Iterator_Ex::ACE_Hash_Map_Iterator_Ex"); + if (tail == 0) + this->forward_i (); +} + +template +ACE_INLINE +ACE_Hash_Map_Iterator_Ex::ACE_Hash_Map_Iterator_Ex ( + ACE_Hash_Map_Manager_Ex & mm, + ACE_Hash_Map_Entry * entry, + size_t index) + : ACE_Hash_Map_Iterator_Base_Ex (mm, + entry, + index) +{ +} + +template ACE_INLINE int +ACE_Hash_Map_Iterator_Ex::advance (void) +{ + ACE_TRACE ("ACE_Hash_Map_Iterator_Ex::advance"); + return this->forward_i (); +} + +template ACE_INLINE +ACE_Hash_Map_Iterator_Ex & +ACE_Hash_Map_Iterator_Ex::operator++ (void) +{ + ACE_TRACE ("ACE_Hash_Map_Iterator_Ex::operator++ (void)"); + + this->forward_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Map_Iterator_Ex +ACE_Hash_Map_Iterator_Ex::operator++ (int) +{ + ACE_TRACE ("ACE_Hash_Map_Iterator_Ex::operator++ (int)"); + + ACE_Hash_Map_Iterator_Ex retv (*this); + ++*this; + return retv; +} + +template ACE_INLINE +ACE_Hash_Map_Iterator_Ex & +ACE_Hash_Map_Iterator_Ex::operator-- (void) +{ + ACE_TRACE ("ACE_Hash_Map_Iterator_Ex::operator-- (void)"); + + this->reverse_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Map_Iterator_Ex +ACE_Hash_Map_Iterator_Ex::operator-- (int) +{ + ACE_TRACE ("ACE_Hash_Map_Iterator_Ex::operator-- (int)"); + + ACE_Hash_Map_Iterator_Ex retv (*this); + --*this; + return retv; +} + +ACE_ALLOC_HOOK_DEFINE(ACE_Hash_Map_Const_Iterator_Ex) + +template ACE_INLINE void +ACE_Hash_Map_Const_Iterator_Ex::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Ex::dump"); + + this->dump_i (); +#endif /* ACE_HAS_DUMP */ +} + +template ACE_INLINE +ACE_Hash_Map_Const_Iterator_Ex::ACE_Hash_Map_Const_Iterator_Ex (const ACE_Hash_Map_Manager_Ex &mm, + int tail) + : ACE_Hash_Map_Const_Iterator_Base_Ex (mm, + tail == 0 ? 1 : 0) +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Ex::ACE_Hash_Map_Const_Iterator_Ex"); + if (tail == 0) + this->forward_i (); +} + +template ACE_INLINE int +ACE_Hash_Map_Const_Iterator_Ex::advance (void) +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Ex::advance"); + return this->forward_i (); +} + +template ACE_INLINE +ACE_Hash_Map_Const_Iterator_Ex & +ACE_Hash_Map_Const_Iterator_Ex::operator++ (void) +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Ex::operator++ (void)"); + + this->forward_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Map_Const_Iterator_Ex +ACE_Hash_Map_Const_Iterator_Ex::operator++ (int) +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Ex::operator++ (int)"); + + ACE_Hash_Map_Const_Iterator_Ex retv (*this); + ++*this; + return retv; +} + +template ACE_INLINE +ACE_Hash_Map_Const_Iterator_Ex & +ACE_Hash_Map_Const_Iterator_Ex::operator-- (void) +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Ex::operator-- (void)"); + + this->reverse_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Map_Const_Iterator_Ex +ACE_Hash_Map_Const_Iterator_Ex::operator-- (int) +{ + ACE_TRACE ("ACE_Hash_Map_Const_Iterator_Ex::operator-- (int)"); + + ACE_Hash_Map_Const_Iterator_Ex retv (*this); + --*this; + return retv; +} + +template ACE_INLINE +ACE_Hash_Map_Bucket_Iterator::ACE_Hash_Map_Bucket_Iterator (ACE_Hash_Map_Manager_Ex &mm, + const EXT_ID &ext_id, + int tail) + : map_man_ (&mm) +{ + ACE_TRACE ("ACE_Hash_Map_Bucket_Iterator::ACE_Hash_Map_Bucket_Iterator"); + + this->index_ = this->map_man_->hash (ext_id) % this->map_man_->total_size_; + this->next_ = &this->map_man_->table_[this->index_]; + + if (tail == 0) + this->forward_i (); +} + +template ACE_INLINE +ACE_Hash_Map_Bucket_Iterator & +ACE_Hash_Map_Bucket_Iterator::operator++ (void) +{ + ACE_TRACE ("ACE_Hash_Map_Bucket_Iterator::operator++ (void)"); + + this->forward_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Map_Bucket_Iterator +ACE_Hash_Map_Bucket_Iterator::operator++ (int) +{ + ACE_TRACE ("ACE_Hash_Map_Bucket_Iterator::operator++ (int)"); + + ACE_Hash_Map_Bucket_Iterator retv (*this); + ++*this; + return retv; +} + +template ACE_INLINE +ACE_Hash_Map_Bucket_Iterator & +ACE_Hash_Map_Bucket_Iterator::operator-- (void) +{ + ACE_TRACE ("ACE_Hash_Map_Bucket_Iterator::operator-- (void)"); + + this->reverse_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Map_Bucket_Iterator +ACE_Hash_Map_Bucket_Iterator::operator-- (int) +{ + ACE_TRACE ("ACE_Hash_Map_Bucket_Iterator::operator-- (int)"); + + ACE_Hash_Map_Bucket_Iterator retv (*this); + --*this; + return retv; +} + +template int +ACE_Hash_Map_Bucket_Iterator::forward_i (void) +{ + ACE_TRACE ("ACE_Hash_Map_Bucket_Iterator::forward_i"); + + this->next_ = this->next_->next_; + return this->next_ != &this->map_man_->table_[this->index_]; +} + +template int +ACE_Hash_Map_Bucket_Iterator::reverse_i (void) +{ + ACE_TRACE ("ACE_Hash_Map_Bucket_Iterator::reverse_i"); + + this->next_ = this->next_->prev_; + return this->next_ != &this->map_man_->table_[this->index_]; +} + +template ACE_INLINE +ACE_Hash_Map_Entry & +ACE_Hash_Map_Bucket_Iterator::operator* (void) const +{ + ACE_TRACE ("ACE_Hash_Map_Bucket_Iterator::operator*"); + + return *this->next_; +} + +template ACE_INLINE +ACE_Hash_Map_Entry * +ACE_Hash_Map_Bucket_Iterator::operator-> (void) const +{ + ACE_TRACE ("ACE_Hash_Map_Bucket_Iterator::operator->"); + + return this->next_; +} + +template ACE_INLINE +ACE_Hash_Map_Manager_Ex & +ACE_Hash_Map_Bucket_Iterator::map (void) +{ + ACE_TRACE ("ACE_Hash_Map_Bucket_Iterator::map"); + return *this->map_man_; +} + +template ACE_INLINE bool +ACE_Hash_Map_Bucket_Iterator::operator== (const ACE_Hash_Map_Bucket_Iterator &rhs) const +{ + ACE_TRACE ("ACE_Hash_Map_Bucket_Iterator::operator=="); + return this->map_man_ == rhs.map_man_ + && this->index_ == rhs.index_ + && this->next_ == rhs.next_; +} + +template ACE_INLINE bool +ACE_Hash_Map_Bucket_Iterator::operator!= (const ACE_Hash_Map_Bucket_Iterator &rhs) const +{ + ACE_TRACE ("ACE_Hash_Map_Bucket_Iterator::operator!="); + return this->next_ != rhs.next_ + || this->index_ != rhs.index_ + || this->map_man_ != rhs.map_man_; +} + +ACE_ALLOC_HOOK_DEFINE(ACE_Hash_Map_Reverse_Iterator_Ex) + +template ACE_INLINE void +ACE_Hash_Map_Reverse_Iterator_Ex::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Hash_Map_Reverse_Iterator_Ex::dump"); + + this->dump_i (); +#endif /* ACE_HAS_DUMP */ +} + +template ACE_INLINE +ACE_Hash_Map_Reverse_Iterator_Ex::ACE_Hash_Map_Reverse_Iterator_Ex (ACE_Hash_Map_Manager_Ex &mm, int head) + : ACE_Hash_Map_Iterator_Base_Ex (mm, head) +{ + ACE_TRACE ("ACE_Hash_Map_Reverse_Iterator_Ex::ACE_Hash_Map_Reverse_Iterator_Ex"); + if (head == 0) + this->reverse_i (); +} + +template ACE_INLINE int +ACE_Hash_Map_Reverse_Iterator_Ex::advance (void) +{ + ACE_TRACE ("ACE_Hash_Map_Reverse_Iterator_Ex::advance"); + return this->reverse_i (); +} + +template ACE_INLINE +ACE_Hash_Map_Reverse_Iterator_Ex & +ACE_Hash_Map_Reverse_Iterator_Ex::operator++ (void) +{ + ACE_TRACE ("ACE_Hash_Map_Reverse_Iterator_Ex::operator++ (void)"); + + this->reverse_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Map_Reverse_Iterator_Ex +ACE_Hash_Map_Reverse_Iterator_Ex::operator++ (int) +{ + ACE_TRACE ("ACE_Hash_Map_Reverse_Iterator_Ex::operator++ (int)"); + + ACE_Hash_Map_Reverse_Iterator_Ex retv (*this); + ++*this; + return retv; +} + +template ACE_INLINE +ACE_Hash_Map_Reverse_Iterator_Ex & +ACE_Hash_Map_Reverse_Iterator_Ex::operator-- (void) +{ + ACE_TRACE ("ACE_Hash_Map_Reverse_Iterator_Ex::operator-- (void)"); + + this->forward_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Map_Reverse_Iterator_Ex +ACE_Hash_Map_Reverse_Iterator_Ex::operator-- (int) +{ + ACE_TRACE ("ACE_Hash_Map_Reverse_Iterator_Ex::operator-- (int)"); + + ACE_Hash_Map_Reverse_Iterator_Ex retv (*this); + --*this; + return retv; +} + +ACE_ALLOC_HOOK_DEFINE(ACE_Hash_Map_Const_Reverse_Iterator_Ex) + +template ACE_INLINE void +ACE_Hash_Map_Const_Reverse_Iterator_Ex::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Hash_Map_Const_Reverse_Iterator_Ex::dump"); + + this->dump_i (); +#endif /* ACE_HAS_DUMP */ +} + +template ACE_INLINE +ACE_Hash_Map_Const_Reverse_Iterator_Ex::ACE_Hash_Map_Const_Reverse_Iterator_Ex (const ACE_Hash_Map_Manager_Ex &mm, int head) + : ACE_Hash_Map_Const_Iterator_Base_Ex (mm, head) +{ + ACE_TRACE ("ACE_Hash_Map_Const_Reverse_Iterator_Ex::ACE_Hash_Map_Const_Reverse_Iterator_Ex"); + if (head == 0) + this->reverse_i (); +} + +template ACE_INLINE int +ACE_Hash_Map_Const_Reverse_Iterator_Ex::advance (void) +{ + ACE_TRACE ("ACE_Hash_Map_Const_Reverse_Iterator_Ex::advance"); + return this->reverse_i (); +} + +template ACE_INLINE +ACE_Hash_Map_Const_Reverse_Iterator_Ex & +ACE_Hash_Map_Const_Reverse_Iterator_Ex::operator++ (void) +{ + ACE_TRACE ("ACE_Hash_Map_Const_Reverse_Iterator_Ex::operator++ (void)"); + + this->reverse_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Map_Const_Reverse_Iterator_Ex +ACE_Hash_Map_Const_Reverse_Iterator_Ex::operator++ (int) +{ + ACE_TRACE ("ACE_Hash_Map_Const_Reverse_Iterator_Ex::operator++ (int)"); + + ACE_Hash_Map_Const_Reverse_Iterator_Ex retv (*this); + ++*this; + return retv; +} + +template ACE_INLINE +ACE_Hash_Map_Const_Reverse_Iterator_Ex & +ACE_Hash_Map_Const_Reverse_Iterator_Ex::operator-- (void) +{ + ACE_TRACE ("ACE_Hash_Map_Const_Reverse_Iterator_Ex::operator-- (void)"); + + this->forward_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Map_Const_Reverse_Iterator_Ex +ACE_Hash_Map_Const_Reverse_Iterator_Ex::operator-- (int) +{ + ACE_TRACE ("ACE_Hash_Map_Const_Reverse_Iterator_Ex::operator-- (int)"); + + ACE_Hash_Map_Const_Reverse_Iterator_Ex retv (*this); + --*this; + return retv; +} + +template +ACE_Hash_Map_Manager::ACE_Hash_Map_Manager (ACE_Allocator *table_alloc, + ACE_Allocator *entry_alloc) + : ACE_Hash_Map_Manager_Ex, ACE_Equal_To, ACE_LOCK> (table_alloc, + entry_alloc) +{ +} + +template +ACE_Hash_Map_Manager::ACE_Hash_Map_Manager (size_t size, + ACE_Allocator *table_alloc, + ACE_Allocator *entry_alloc) + : ACE_Hash_Map_Manager_Ex, ACE_Equal_To, ACE_LOCK> (size, + table_alloc, + entry_alloc) +{ +} + +template int +ACE_Hash_Map_Manager::equal (const EXT_ID &id1, const EXT_ID &id2) +{ + return ACE_Hash_Map_Manager_Ex, ACE_Equal_To, ACE_LOCK>::equal (id1, id2); +} + +template u_long +ACE_Hash_Map_Manager::hash (const EXT_ID &ext_id) +{ + return ACE_Hash_Map_Manager_Ex, ACE_Equal_To, ACE_LOCK>::hash (ext_id); +} + +template +ACE_Hash_Map_Iterator::ACE_Hash_Map_Iterator (ACE_Hash_Map_Manager &mm, + int tail) + : ACE_Hash_Map_Iterator_Ex, ACE_Equal_To, ACE_LOCK> (mm, + tail) +{ +} + +template +ACE_Hash_Map_Iterator::ACE_Hash_Map_Iterator (const ACE_Hash_Map_Iterator_Ex, ACE_Equal_To, ACE_LOCK> &base) + : ACE_Hash_Map_Iterator_Ex, ACE_Equal_To, ACE_LOCK> (base) +{ +} + +template ACE_Hash_Map_Iterator & +ACE_Hash_Map_Iterator::operator= (const ACE_Hash_Map_Iterator_Ex, ACE_Equal_To, ACE_LOCK> &rhs) +{ + if (this != &rhs) + { + ACE_Hash_Map_Iterator_Ex, ACE_Equal_To, ACE_LOCK> &base = *this; + + base = rhs; + } + + return *this; +} + +template +ACE_Hash_Map_Const_Iterator::ACE_Hash_Map_Const_Iterator (const ACE_Hash_Map_Manager &mm, + int tail) + : ACE_Hash_Map_Const_Iterator_Ex, ACE_Equal_To, ACE_LOCK> (mm, + tail) +{ +} + +template +ACE_Hash_Map_Const_Iterator::ACE_Hash_Map_Const_Iterator (const ACE_Hash_Map_Const_Iterator_Ex, ACE_Equal_To, ACE_LOCK> &base) + : ACE_Hash_Map_Const_Iterator_Ex, ACE_Equal_To, ACE_LOCK> (base) +{ +} + +template ACE_Hash_Map_Const_Iterator & +ACE_Hash_Map_Const_Iterator::operator= (const ACE_Hash_Map_Const_Iterator_Ex, ACE_Equal_To, ACE_LOCK> &rhs) +{ + if (this != &rhs) + { + ACE_Hash_Map_Const_Iterator_Ex, ACE_Equal_To, ACE_LOCK> &base = *this; + + base = rhs; + } + + return *this; +} + +template +ACE_Hash_Map_Reverse_Iterator::ACE_Hash_Map_Reverse_Iterator (ACE_Hash_Map_Manager &mm, + int head) + : ACE_Hash_Map_Reverse_Iterator_Ex, ACE_Equal_To, ACE_LOCK> (mm, + head) +{ +} + +template +ACE_Hash_Map_Reverse_Iterator::ACE_Hash_Map_Reverse_Iterator (const ACE_Hash_Map_Reverse_Iterator_Ex, ACE_Equal_To, ACE_LOCK> &base) + : ACE_Hash_Map_Reverse_Iterator_Ex, ACE_Equal_To, ACE_LOCK> (base) +{ +} + +template ACE_Hash_Map_Reverse_Iterator & +ACE_Hash_Map_Reverse_Iterator::operator= (const ACE_Hash_Map_Reverse_Iterator_Ex, ACE_Equal_To, ACE_LOCK> &rhs) +{ + ACE_Hash_Map_Reverse_Iterator_Ex, ACE_Equal_To, ACE_LOCK> &base = *this; + + base = rhs; + + return *this; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Hash_Map_With_Allocator_T.cpp b/ACE/ace/Hash_Map_With_Allocator_T.cpp new file mode 100644 index 00000000000..9927147e865 --- /dev/null +++ b/ACE/ace/Hash_Map_With_Allocator_T.cpp @@ -0,0 +1,35 @@ +// $Id$ + +#ifndef ACE_HASH_MAP_WITH_ALLOCATOR_T_CPP +#define ACE_HASH_MAP_WITH_ALLOCATOR_T_CPP + +#include "ace/Hash_Map_With_Allocator_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (__ACE_INLINE__) +#include "ace/Hash_Map_With_Allocator_T.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +ACE_Hash_Map_With_Allocator::ACE_Hash_Map_With_Allocator (ACE_Allocator *alloc) + : ACE_Hash_Map_Manager_Ex, ACE_Equal_To, ACE_Null_Mutex> (alloc) +{ + ACE_TRACE ("ACE_Hash_Map_With_Allocator::ACE_Hash_Map_With_Allocator"); +} + +template +ACE_Hash_Map_With_Allocator::ACE_Hash_Map_With_Allocator (size_t size, + ACE_Allocator *alloc) + : ACE_Hash_Map_Manager_Ex, ACE_Equal_To, ACE_Null_Mutex> (size, alloc) +{ + ACE_TRACE ("ACE_Hash_Map_With_Allocator::ACE_Hash_Map_With_Allocator"); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HASH_MAP_WITH_ALLOCATOR_T_CPP */ diff --git a/ACE/ace/Hash_Map_With_Allocator_T.h b/ACE/ace/Hash_Map_With_Allocator_T.h new file mode 100644 index 00000000000..1c2413ba3f2 --- /dev/null +++ b/ACE/ace/Hash_Map_With_Allocator_T.h @@ -0,0 +1,112 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Hash_Map_With_Allocator_T.h + * + * $Id$ + * + * @author Marina Spivak + * @author Irfan Pyarali + */ +//============================================================================= + +#ifndef ACE_HASH_MAP_WITH_ALLOCATOR_T_H +#define ACE_HASH_MAP_WITH_ALLOCATOR_T_H +#include /**/ "ace/pre.h" + +#include "ace/Hash_Map_Manager_T.h" +#include "ace/Null_Mutex.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Hash_Map_With_Allocator + * + * @brief This class is a thin wrapper around ACE_Hash_Map_Manager, + * which comes handy when ACE_Hash_Map_Manager is to be used with a + * non-nil ACE_Allocator. This wrapper insures that the appropriate + * allocator is in place for every operation that accesses or + * updates the hash map. + * + * If we use ACE_Hash_Map_Manager with a shared memory allocator + * (or memory-mapped file allocator, for example), the allocator + * pointer used by ACE_Hash_Map_Manager gets stored with it, in + * shared memory (or memory-mapped file). Naturally, this will + * cause horrible problems, since only the first process to set + * that pointer will be guaranteed the address of the allocator + * is meaningful! That is why we need this wrapper, which + * insures that appropriate allocator pointer is in place for + * each call. + * + * At some point it would be a good idea to update this class to + * use the new "two allocator" technique provided by @c + * ACE_Hash_Map_Manager_Ex. + */ +template +class ACE_Hash_Map_With_Allocator : + public ACE_Hash_Map_Manager_Ex, ACE_Equal_To, ACE_Null_Mutex> +{ +public: + /// Constructor. + ACE_Hash_Map_With_Allocator (ACE_Allocator *alloc); + + /// Constructor that specifies hash table size. + ACE_Hash_Map_With_Allocator (size_t size, + ACE_Allocator *alloc); + + // = The following methods are Proxies to the corresponding methods + // in ACE_Hash_Map_Manager. Each method sets the allocator to + // the one specified by the invoking entity, and then calls the + // corresponding method in ACE_Hash_Map_Manager to do the + // actual work. + + int bind (const EXT_ID &, + const INT_ID &, + ACE_Allocator *alloc); + + int unbind (const EXT_ID &, + INT_ID &, + ACE_Allocator *alloc); + + int unbind (const EXT_ID &, + ACE_Allocator *alloc); + + int rebind (const EXT_ID &, + const INT_ID &, + EXT_ID &, + INT_ID &, + ACE_Allocator *alloc); + + int find (const EXT_ID &, + INT_ID &, + ACE_Allocator *alloc); + + /// Returns 0 if the @a ext_id is in the mapping, otherwise -1. + int find (const EXT_ID &ext_id, + ACE_Allocator *alloc); + + int close (ACE_Allocator *alloc); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Hash_Map_With_Allocator_T.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Hash_Map_With_Allocator_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Hash_Map_With_Allocator_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + + +#include /**/ "ace/post.h" +#endif /* ACE_HASH_MAP_WITH_ALLOCATOR_T_H */ diff --git a/ACE/ace/Hash_Map_With_Allocator_T.inl b/ACE/ace/Hash_Map_With_Allocator_T.inl new file mode 100644 index 00000000000..4ba51437abf --- /dev/null +++ b/ACE/ace/Hash_Map_With_Allocator_T.inl @@ -0,0 +1,82 @@ +// -*- C++ -*- + +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE int +ACE_Hash_Map_With_Allocator::close (ACE_Allocator *alloc) +{ + ACE_TRACE ("ACE_Hash_Map_With_Allocator::close"); + this->table_allocator_ = alloc; + this->entry_allocator_ = alloc; + return this->close_i (); +} + +template ACE_INLINE int +ACE_Hash_Map_With_Allocator::bind (const EXT_ID &ext_id, + const INT_ID &int_id, + ACE_Allocator *alloc) +{ + ACE_TRACE ("ACE_Hash_Map_With_Allocator::bind"); + this->table_allocator_ = alloc; + this->entry_allocator_ = alloc; + return this->bind_i (ext_id, int_id); +} + +template ACE_INLINE int +ACE_Hash_Map_With_Allocator::unbind (const EXT_ID &ext_id, + INT_ID &int_id, + ACE_Allocator *alloc) +{ + ACE_TRACE ("ACE_Hash_Map_With_Allocator::unbind"); + this->table_allocator_ = alloc; + this->entry_allocator_ = alloc; + return this->unbind_i (ext_id, int_id); +} + +template ACE_INLINE int +ACE_Hash_Map_With_Allocator::unbind (const EXT_ID &ext_id, + ACE_Allocator *alloc) +{ + ACE_TRACE ("ACE_Hash_Map_With_Allocator::unbind"); + this->table_allocator_ = alloc; + this->entry_allocator_ = alloc; + return this->unbind_i (ext_id); +} + +template ACE_INLINE int +ACE_Hash_Map_With_Allocator::rebind (const EXT_ID &ext_id, + const INT_ID &int_id, + EXT_ID &old_ext_id, + INT_ID &old_int_id, + ACE_Allocator *alloc) +{ + ACE_TRACE ("ACE_Hash_Map_With_Allocator::rebind"); + this->table_allocator_ = alloc; + this->entry_allocator_ = alloc; + return this->rebind_i (ext_id, int_id, old_ext_id, old_int_id); +} + +template ACE_INLINE int +ACE_Hash_Map_With_Allocator::find (const EXT_ID &ext_id, + INT_ID &int_id, + ACE_Allocator *alloc) +{ + ACE_TRACE ("ACE_Hash_Map_With_Allocator::find"); + this->table_allocator_ = alloc; + this->entry_allocator_ = alloc; + return this->find_i (ext_id, int_id); +} + +template ACE_INLINE int +ACE_Hash_Map_With_Allocator::find (const EXT_ID &ext_id, + ACE_Allocator *alloc) +{ + ACE_TRACE ("ACE_Hash_Map_With_Allocator::find"); + this->table_allocator_ = alloc; + this->entry_allocator_ = alloc; + return this->find_i (ext_id); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Hash_Multi_Map_Manager_T.cpp b/ACE/ace/Hash_Multi_Map_Manager_T.cpp new file mode 100644 index 00000000000..34e8b0406be --- /dev/null +++ b/ACE/ace/Hash_Multi_Map_Manager_T.cpp @@ -0,0 +1,605 @@ + +//============================================================================= +/** + * @file Hash_Multi_Map_Manager_T.cpp + * + * $Id$ + * + * @author Shanshan Jiang + */ +//============================================================================= + + +#ifndef ACE_Hash_Multi_Map_Manager_T_CPP +#define ACE_Hash_Multi_Map_Manager_T_CPP + +#include "ace/Hash_Multi_Map_Manager_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (__ACE_INLINE__) +# include "ace/Hash_Multi_Map_Manager_T.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/Malloc_Base.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + + +template +ACE_Hash_Multi_Map_Entry::ACE_Hash_Multi_Map_Entry (ACE_Hash_Multi_Map_Entry *next, + ACE_Hash_Multi_Map_Entry *prev) + : next_ (next), + prev_ (prev) +{ +} + +template +ACE_Hash_Multi_Map_Entry::ACE_Hash_Multi_Map_Entry (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Hash_Multi_Map_Entry *next, + ACE_Hash_Multi_Map_Entry *prev) + : ext_id_ (ext_id), + int_id_set_ (int_id_set), + next_ (next), + prev_ (prev) +{ +} + +# if ! defined (ACE_HAS_BROKEN_NOOP_DTORS) +template +ACE_Hash_Multi_Map_Entry::~ACE_Hash_Multi_Map_Entry (void) +{ +} +# endif /* ! defined (ACE_HAS_BROKEN_NOOP_DTORS) */ + +template EXT_ID & +ACE_Hash_Multi_Map_Entry::key () +{ + return ext_id_; +} + +template ACE_Unbounded_Set & +ACE_Hash_Multi_Map_Entry::item () +{ + return int_id_set_; +} + +template void +ACE_Hash_Multi_Map_Entry::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("next_ = %d"), this->next_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("prev_ = %d"), this->prev_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +template void +ACE_Hash_Multi_Map_Manager::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("total_size_ = %d"), this->total_size_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\ncur_size_ = %d"), this->cur_size_)); + this->table_allocator_->dump (); + this->entry_allocator_->dump (); + this->lock_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +template int +ACE_Hash_Multi_Map_Manager::create_buckets (size_t size) +{ + size_t bytes = size * sizeof (ACE_Hash_Multi_Map_Entry); + void *ptr; + + ACE_ALLOCATOR_RETURN (ptr, + this->table_allocator_->malloc (bytes), + -1); + + this->table_ = (ACE_Hash_Multi_Map_Entry *) ptr; + + this->total_size_ = size; + + // Initialize each entry in the hash table to be a circular linked + // list with the dummy node in the front serving as the anchor of + // the list. + for (size_t i = 0; i < size; i++) + new (&this->table_[i]) ACE_Hash_Multi_Map_Entry (&this->table_[i], + &this->table_[i]); + return 0; +} + +template int +ACE_Hash_Multi_Map_Manager::open (size_t size, + ACE_Allocator *table_alloc, + ACE_Allocator *entry_alloc) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + // Calling this->close_i () to ensure we release previous allocated + // memory before allocating new one. + this->close_i (); + + if (table_alloc == 0) + table_alloc = ACE_Allocator::instance (); + + this->table_allocator_ = table_alloc; + + if (entry_alloc == 0) + entry_alloc = table_alloc; + + this->entry_allocator_ = entry_alloc; + + // This assertion is here to help track a situation that shouldn't + // happen, but did with Sun C++ 4.1 (before a change to this class + // was made: it used to have an enum that was supposed to be defined + // to be ACE_DEFAULT_MAP_SIZE, but instead was defined to be 0). + if (size == 0) + return -1; + + return this->create_buckets (size); +} + +template int +ACE_Hash_Multi_Map_Manager::close_i (void) +{ + // Protect against "double-deletion" in case the destructor also + // gets called. + if (this->table_ != 0) + { + // Remove all the entries. + this->unbind_all_i (); + + // Iterate through the buckets cleaning up the sentinels. + for (size_t i = 0; i < this->total_size_; i++) + { + // Destroy the dummy entry. + ACE_Hash_Multi_Map_Entry *entry = &this->table_[i]; + + // The second argument results in a no-op instead of + // deallocation. + ACE_DES_FREE_TEMPLATE2 (entry, ACE_NOOP, + ACE_Hash_Multi_Map_Entry, EXT_ID, INT_ID); + } + + // Reset size. + this->total_size_ = 0; + + // Free table memory. + this->table_allocator_->free (this->table_); + + // Should be done last... + this->table_ = 0; + } + + return 0; +} + +template int +ACE_Hash_Multi_Map_Manager::unbind_all_i (void) +{ + // Iterate through the entire map calling the destuctor of each + // . + for (size_t i = 0; i < this->total_size_; i++) + { + for (ACE_Hash_Multi_Map_Entry *temp_ptr = this->table_[i].next_; + temp_ptr != &this->table_[i]; + ) + { + ACE_Hash_Multi_Map_Entry *hold_ptr = temp_ptr; + temp_ptr = temp_ptr->next_; + + // Explicitly call the destructor. + ACE_DES_FREE_TEMPLATE2 (hold_ptr, this->entry_allocator_->free, + ACE_Hash_Multi_Map_Entry, EXT_ID, INT_ID); + } + + // Restore the sentinel. + this->table_[i].next_ = &this->table_[i]; + this->table_[i].prev_ = &this->table_[i]; + } + + this->cur_size_ = 0; + + return 0; +} + +template int +ACE_Hash_Multi_Map_Manager::bind_i (const EXT_ID &ext_id, + const INT_ID &int_id, + ACE_Hash_Multi_Map_Entry *&entry) +{ + size_t loc; + int result = this->shared_find (ext_id, entry, loc); + + ACE_Unbounded_Set int_id_set; + if (result == -1) + { + void *ptr; + // Not found. + ACE_ALLOCATOR_RETURN (ptr, + this->entry_allocator_->malloc (sizeof (ACE_Hash_Multi_Map_Entry)), + -1); + + int_id_set.insert (int_id); + + entry = new (ptr) ACE_Hash_Multi_Map_Entry (ext_id, + int_id_set, + this->table_[loc].next_, + &this->table_[loc]); + this->table_[loc].next_ = entry; + entry->next_->prev_ = entry; + this->cur_size_++; + return 0; + } + else + { + int_id_set = (*entry).int_id_set_; + + if (0 == int_id_set.insert (int_id)) + { + this->unbind_i (entry); + return this->bind_i (ext_id, int_id_set); + } + else + return 1; + } +} + +template int +ACE_Hash_Multi_Map_Manager::bind_i (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Hash_Multi_Map_Entry *&entry) +{ + size_t loc; + int result = this->shared_find (ext_id, entry, loc); + + if (result == -1) + { + void *ptr; + // Not found. + ACE_ALLOCATOR_RETURN (ptr, + this->entry_allocator_->malloc (sizeof (ACE_Hash_Multi_Map_Entry)), + -1); + + entry = new (ptr) ACE_Hash_Multi_Map_Entry (ext_id, + int_id_set, + this->table_[loc].next_, + &this->table_[loc]); + this->table_[loc].next_ = entry; + entry->next_->prev_ = entry; + this->cur_size_++; + return 0; + } + else + return 1; +} + +template int +ACE_Hash_Multi_Map_Manager::trybind_i (const EXT_ID &ext_id, + ACE_Unbounded_Set &int_id_set, + ACE_Hash_Multi_Map_Entry *&entry) +{ + size_t loc; + int result = this->shared_find (ext_id, entry, loc); + + if (result == -1) + { + // Not found. + void *ptr; + ACE_ALLOCATOR_RETURN (ptr, + this->entry_allocator_->malloc (sizeof (ACE_Hash_Multi_Map_Entry)), + -1); + + entry = new (ptr) ACE_Hash_Multi_Map_Entry (ext_id, + int_id_set, + this->table_[loc].next_, + &this->table_[loc]); + this->table_[loc].next_ = entry; + entry->next_->prev_ = entry; + this->cur_size_++; + return 0; + } + else + return 1; +} + +template int +ACE_Hash_Multi_Map_Manager::unbind_i (const EXT_ID &ext_id, + ACE_Unbounded_Set &int_id_set) +{ + ACE_Hash_Multi_Map_Entry *temp; + + size_t loc; + int result = this->shared_find (ext_id, temp, loc); + + if (result == -1) + { + errno = ENOENT; + return -1; + } + + int_id_set = temp->int_id_set_; + + return this->unbind_i (temp); +} + +template int +ACE_Hash_Multi_Map_Manager::unbind_i (ACE_Hash_Multi_Map_Entry *entry) +{ + entry->next_->prev_ = entry->prev_; + entry->prev_->next_ = entry->next_; + + // Explicitly call the destructor. + ACE_DES_FREE_TEMPLATE2 (entry, this->entry_allocator_->free, + ACE_Hash_Multi_Map_Entry, EXT_ID, INT_ID); + + this->cur_size_--; + return 0; +} + +template int +ACE_Hash_Multi_Map_Manager::unbind_i (const EXT_ID &ext_id, + const INT_ID &int_id) +{ + ACE_Hash_Multi_Map_Entry *temp; + + size_t loc; + int result = this->shared_find (ext_id, temp, loc); + + if (result == -1) + { + errno = ENOENT; + return -1; + } + + ACE_Unbounded_Set int_id_set = (*temp).int_id_set_; + if (0 == int_id_set.remove (int_id)) + { + this->unbind_i (temp); + + if (0 != int_id_set.size ()) + return this->bind_i (ext_id, int_id_set); + else + return 0; + } + else + return -1; +} + + +template int +ACE_Hash_Multi_Map_Manager::shared_find (const EXT_ID &ext_id, + ACE_Hash_Multi_Map_Entry *&entry, + size_t &loc) +{ + loc = this->hash (ext_id) % this->total_size_; + + ACE_Hash_Multi_Map_Entry *temp = this->table_[loc].next_; + + while (temp != &this->table_[loc] && this->equal (temp->ext_id_, ext_id) == 0) + temp = temp->next_; + + if (temp == &this->table_[loc]) + { + errno = ENOENT; + return -1; + } + else + { + entry = temp; + return 0; + } +} + +template int +ACE_Hash_Multi_Map_Manager::rebind_i (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Hash_Multi_Map_Entry *&entry) +{ + size_t dummy; + if (this->shared_find (ext_id, entry, dummy) == -1) + return this->bind_i (ext_id, int_id_set); + else + { + entry->ext_id_ = ext_id; + entry->int_id_set_ = int_id_set; + return 1; + } +} + +template int +ACE_Hash_Multi_Map_Manager::rebind_i (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Unbounded_Set &old_int_id_set, + ACE_Hash_Multi_Map_Entry *&entry) +{ + size_t dummy; + if (this->shared_find (ext_id, entry, dummy) == -1) + return this->bind_i (ext_id, int_id_set); + else + { + old_int_id_set = entry->int_id_set_; + entry->ext_id_ = ext_id; + entry->int_id_set_ = int_id_set; + return 1; + } +} + +template int +ACE_Hash_Multi_Map_Manager::rebind_i (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + EXT_ID &old_ext_id, + ACE_Unbounded_Set &old_int_id_set, + ACE_Hash_Multi_Map_Entry *&entry) +{ + size_t dummy; + if (this->shared_find (ext_id, entry, dummy) == -1) + return this->bind_i (ext_id, int_id_set); + else + { + old_ext_id = entry->ext_id_; + old_int_id_set = entry->int_id_set_; + entry->ext_id_ = ext_id; + entry->int_id_set_ = int_id_set; + return 1; + } +} + +// ------------------------------------------------------------ + +ACE_ALLOC_HOOK_DEFINE(ACE_Hash_Multi_Map_Iterator_Base) + +template void +ACE_Hash_Multi_Map_Iterator_Base::dump_i (void) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator_Base::dump_i"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("index_ = %d "), this->index_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("next_ = %x"), this->next_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +} + +template int +ACE_Hash_Multi_Map_Iterator_Base::forward_i (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator_Base::forward_i"); + + if (this->map_man_->table_ == 0) + return -1; + // Handle initial case specially. + else if (this->index_ == -1) + { + this->index_++; + return this->forward_i (); + } + else if (this->index_ >= static_cast (this->map_man_->total_size_)) + return 0; + + this->next_ = this->next_->next_; + if (this->next_ == &this->map_man_->table_[this->index_]) + { + while (++this->index_ < static_cast (this->map_man_->total_size_)) + { + this->next_ = this->map_man_->table_[this->index_].next_; + if (this->next_ != &this->map_man_->table_[this->index_]) + break; + } + } + + return this->index_ < static_cast (this->map_man_->total_size_); +} + +template int +ACE_Hash_Multi_Map_Iterator_Base::reverse_i (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator_Base::reverse_i"); + + if (this->map_man_->table_ == 0) + return -1; + else if (this->index_ == static_cast (this->map_man_->total_size_)) + { + this->index_--; + return this->reverse_i (); + } + else if (this->index_ < 0) + return 0; + + this->next_ = this->next_->prev_; + if (this->next_ == &this->map_man_->table_[this->index_]) + { + while (--this->index_ >= 0) + { + this->next_ = this->map_man_->table_[this->index_].prev_; + if (this->next_ != &this->map_man_->table_[this->index_]) + break; + } + } + + return this->index_ >= 0; +} + +// ------------------------------------------------------------ + +ACE_ALLOC_HOOK_DEFINE(ACE_Hash_Multi_Map_Const_Iterator_Base) + +template void +ACE_Hash_Multi_Map_Const_Iterator_Base::dump_i (void) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator_Base::dump_i"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("index_ = %d "), this->index_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("next_ = %x"), this->next_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +} + +template int +ACE_Hash_Multi_Map_Const_Iterator_Base::forward_i (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator_Base::forward_i"); + + if (this->map_man_->table_ == 0) + return -1; + // Handle initial case specially. + else if (this->index_ == -1) + { + this->index_++; + return this->forward_i (); + } + else if (this->index_ >= (ssize_t) this->map_man_->total_size_) + return 0; + + this->next_ = this->next_->next_; + if (this->next_ == &this->map_man_->table_[this->index_]) + { + while (++this->index_ < (ssize_t) this->map_man_->total_size_) + { + this->next_ = this->map_man_->table_[this->index_].next_; + if (this->next_ != &this->map_man_->table_[this->index_]) + break; + } + } + + return this->index_ < (ssize_t) this->map_man_->total_size_; +} + +template int +ACE_Hash_Multi_Map_Const_Iterator_Base::reverse_i (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator_Base::reverse_i"); + + if (this->map_man_->table_ == 0) + return -1; + else if (this->index_ == (ssize_t) this->map_man_->total_size_) + { + this->index_--; + return this->reverse_i (); + } + else if (this->index_ < 0) + return 0; + + this->next_ = this->next_->prev_; + if (this->next_ == &this->map_man_->table_[this->index_]) + { + while (--this->index_ >= 0) + { + this->next_ = this->map_man_->table_[this->index_].prev_; + if (this->next_ != &this->map_man_->table_[this->index_]) + break; + } + } + + return this->index_ >= 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_Hash_Multi_Map_Manager_T_CPP */ diff --git a/ACE/ace/Hash_Multi_Map_Manager_T.h b/ACE/ace/Hash_Multi_Map_Manager_T.h new file mode 100644 index 00000000000..11e54292477 --- /dev/null +++ b/ACE/ace/Hash_Multi_Map_Manager_T.h @@ -0,0 +1,967 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Hash_Multi_Map_Manager_T.h + * + * $Id$ + * + * The code in Hash_Multi_Map_Manager_T.* was based on the code in + * Hash_Map_Manager_T.*. + * + * ACE_Hash_Multi_Map_Manager maps a key type to more than one value types. + * The template takes the key and value types as parameters. The bind and + * unbind operations can take a key and the value or the set of the values that + * is to be associated with that key. The find operation can take a key or a + * key and the value that is associated with the key. + * + * ACE_Hash_Multi_Map_Manager uses @c ACE_Unbounded_Set to store differet values + * with the same key. + * + * @author Shanshan Jiang + */ +//============================================================================= + +#ifndef ACE_HASH_MULTI_MAP_MANAGER_T_H +#define ACE_HASH_MULTI_MAP_MANAGER_T_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Default_Constants.h" +#include "ace/Functor_T.h" +#include "ace/Log_Msg.h" + +#include "ace/Unbounded_Set.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Hash_Multi_Map_Entry + * + * @brief Define an entry in the hash table. + */ +template +class ACE_Hash_Multi_Map_Entry +{ +public: + friend class ACE_Unbounded_Set; + + typedef ACE_Unbounded_Set VALUE_SET; + typedef ACE_Unbounded_Set_Iterator VALUE_SET_ITERATOR; + + // = Initialization and termination methods. + /// Constructor. + ACE_Hash_Multi_Map_Entry (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Hash_Multi_Map_Entry *next = 0, + ACE_Hash_Multi_Map_Entry *prev = 0); + + /// Constructor. + ACE_Hash_Multi_Map_Entry (ACE_Hash_Multi_Map_Entry *next, + ACE_Hash_Multi_Map_Entry *prev); + + # if ! defined (ACE_HAS_BROKEN_NOOP_DTORS) + /// Destructor. + ~ACE_Hash_Multi_Map_Entry (void); + #endif /* ! defined (ACE_HAS_BROKEN_NOOP_DTORS) */ + + /// Key accessor. + EXT_ID& key (void); + + /// Item accessor. + ACE_Unbounded_Set& item (void); + + /// Key used to look up an entry. + /// @deprecated Use key() + EXT_ID ext_id_; + + /// The contents of the entry itself. + /// @deprecated Use item() + ACE_Unbounded_Set int_id_set_; + + /// Pointer to the next item in the bucket of overflow nodes. + ACE_Hash_Multi_Map_Entry *next_; + + /// Pointer to the prev item in the bucket of overflow nodes. + ACE_Hash_Multi_Map_Entry *prev_; + + /// Dump the state of an object. + void dump (void) const; +}; + +// Forward decl. +template +class ACE_Hash_Multi_Map_Iterator_Base; + +// Forward decl. +template +class ACE_Hash_Multi_Map_Const_Iterator_Base; + +// Forward decl. +template +class ACE_Hash_Multi_Map_Iterator; + +// Forward decl. +template +class ACE_Hash_Multi_Map_Const_Iterator; + +// Forward decl. +template +class ACE_Hash_Multi_Map_Reverse_Iterator; + +// Forward decl. +template +class ACE_Hash_Multi_Map_Bucket_Iterator; + +// Forward decl. +class ACE_Allocator; + +/** + * @class ACE_Hash_Multi_Map_Manager + * + * @brief Define a multi-map abstraction that efficiently associates the keys + * with their different values. + * + * This implementation of a multi-map uses a hash table. Key hashing + * is achieved through the @c HASH_KEY object and key comparison is + * achieved through the @c COMPARE_KEYS object. + * This class uses an @c ACE_Allocator to allocate memory. The + * user can make this a persistent class by providing an + * @c ACE_Allocator with a persistable memory pool. + */ + +template +class ACE_Hash_Multi_Map_Manager +{ +public: + friend class ACE_Hash_Multi_Map_Iterator_Base; + friend class ACE_Hash_Multi_Map_Iterator; + friend class ACE_Hash_Multi_Map_Const_Iterator_Base; + friend class ACE_Hash_Multi_Map_Const_Iterator; + friend class ACE_Hash_Multi_Map_Reverse_Iterator; + friend class ACE_Hash_Multi_Map_Bucket_Iterator; + + typedef EXT_ID + KEY; + typedef INT_ID + VALUE; + typedef ACE_LOCK lock_type; + typedef ACE_Hash_Multi_Map_Entry + ENTRY; + + // = ACE-style iterator typedefs. + typedef ACE_Hash_Multi_Map_Iterator + ITERATOR; + typedef ACE_Hash_Multi_Map_Const_Iterator + CONST_ITERATOR; + typedef ACE_Hash_Multi_Map_Reverse_Iterator + REVERSE_ITERATOR; + + // = STL-style iterator typedefs. + typedef ACE_Hash_Multi_Map_Iterator + iterator; + typedef ACE_Hash_Multi_Map_Const_Iterator + const_iterator; + typedef ACE_Hash_Multi_Map_Reverse_Iterator + reverse_iterator; + + // = Initialization and termination methods. + + /** + * Initialize a @c Hash_Multi_Map_Manager with default size elements. + * @param table_alloc is a pointer to a memory allocator used for + * table_, so it should supply size*sizeof ( + * ACE_Hash_Multi_Map_Entry<@c EXT_ID, @c INT_ID>). + * @param entry_alloc is a pointer to an additional allocator for + * entries, so it should be able to allocate 'size' / chunks + * of sizeof (ACE_Hash_Multi_Map_Entry<@c EXT_ID, @c INT_ID>) bytes + * each. + * If @a table_alloc is 0 it defaults to @c ACE_Allocator::instance(). + * If @a entry_alloc is 0 then it defaults to the same allocator as + * @a table_alloc. + */ + ACE_Hash_Multi_Map_Manager (ACE_Allocator *table_alloc = 0, + ACE_Allocator *entry_alloc = 0); + + /** + * Initialize a @c Hash_Multi_Map_Manager with @a size elements. + * @param size is the number of elements in a Hash_Multi_Map_Manager. + * @param table_alloc is a pointer to a memory allocator used for + * table_, so it should supply size*sizeof ( + * ACE_Hash_Multi_Map_Entry<@c EXT_ID, <@c INT_ID>). + * @param entry_alloc is a pointer to an additional allocator for + * entries, so it should be able to allocate 'size' / chunks + * of sizeof (ACE_Hash_Multi_Map_Entry<@c EXT_ID, @c INT_ID>) bytes + * each. + * If @a table_alloc is 0 it defaults to @c ACE_Allocator::instance(). + * If @a entry_alloc is 0 then it defaults to the same allocator as + * @a table_alloc. + */ + ACE_Hash_Multi_Map_Manager (size_t size, + ACE_Allocator *table_alloc = 0, + ACE_Allocator *entry_alloc = 0); + + /** + * Initialize a @c Hash_Multi_Map_Manager with @a size elements. + * @param size is the number of elements in a Hash_Multi_Map_Manager. + * @param table_alloc is a pointer to a memory allocator used for + * table_, so it should supply size*sizeof + * (ACE_Hash_Multi_Map_Entry<@c EXT_ID, <@c INT_ID>). + * @param entry_alloc is a pointer to an additional allocator for + * entries, so it should be able to allocate 'size' / chunks + * of sizeof (ACE_Hash_Multi_Map_Entry<@c EXT_ID, <@c INT_ID>) bytes + * each. + * If @a table_alloc is 0 it defaults to @c ACE_Allocator::instance(). + * If @a entry_alloc is 0 then it defaults to the same allocator as + * @a table_alloc. + * @return -1 on failure, 0 on success + */ + + int open (size_t size = ACE_DEFAULT_MAP_SIZE, + ACE_Allocator *table_alloc = 0, + ACE_Allocator *entry_alloc = 0); + + /// Close down a Hash_Multi_Map_Manager and release dynamically allocated + /// resources. + int close (void); + + /// Removes all the entries in Hash_Multi_Map_Manager. + int unbind_all (void); + + /// Cleanup the Hash_Multi_Map_Manager. + ~ACE_Hash_Multi_Map_Manager (void); + + /** + * Associate @a ext_id with @a int_id. If @a ext_id and @a int_id is already + * in the map then the @c ACE_Hash_Multi_Map_Entry is not changed. Returns 0 if + * a new entry is bound successfully, returns 1 if an attempt is made + * to bind an existing entry, and returns -1 if failures occur. + */ + int bind (const EXT_ID &ext_id, + const INT_ID &int_id); + + /** + * Same as a normal bind, except the map entry is also passed back + * to the caller. The entry in this case will either be the newly + * created entry, or the existing one. + */ + int bind (const EXT_ID &ext_id, + const INT_ID &int_id, + ACE_Hash_Multi_Map_Entry *&entry); + + /** + * Associate @a ext_id with @a int_id_set. If @a ext_id is already in the + * map then the @c ACE_Hash_Multi_Map_Entry is not changed. Returns 0 if a + * new entry is bound successfully, returns 1 if an attempt is made + * to bind an existing entry, and returns -1 if failures occur. + */ + int bind (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set); + + /** + * Same as a normal bind, except the map entry is also passed back + * to the caller. The entry in this case will either be the newly + * created entry, or the existing one. + */ + int bind (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Hash_Multi_Map_Entry *&entry); + + /** + * Associate @a ext_id with @a int_id_set if and only if @a ext_id is + * not in the map. If @a ext_id is already in the map then the @a int_id_set + * parameter is assigned the existing value in the map. Returns 0 + * if a new entry is bound successfully, returns 1 if an attempt is + * made to bind an existing entry, and returns -1 if failures occur. + */ + int trybind (const EXT_ID &ext_id, + ACE_Unbounded_Set &int_id_set); + + /** + * Same as a normal trybind, except the map entry is also passed + * back to the caller. The entry in this case will either be the + * newly created entry, or the existing one. + */ + int trybind (const EXT_ID &ext_id, + ACE_Unbounded_Set &int_id_set, + ACE_Hash_Multi_Map_Entry *&entry); + + /** + * Reassociate @a ext_id with @a int_id_set. If @a ext_id is not in + * the map then behaves just like bind. Returns 0 if a new entry is + * bound successfully, returns 1 if an existing entry was rebound, + * and returns -1 if failures occur. + */ + int rebind (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set); + + /** + * Same as a normal rebind, except the map entry is also passed back + * to the caller. The entry in this case will either be the newly + * created entry, or the existing one. + */ + int rebind (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Hash_Multi_Map_Entry *&entry); + + /** + * Associate @a ext_id with @a int_id_set. If @a ext_id is not in the map + * then behaves just like bind. Otherwise, store the old value of + * @a int_id_set into the "out" parameter and rebind the new parameters. + * Returns 0 if a new entry is bound successfully, returns 1 if an + * existing entry was rebound, and returns -1 if failures occur. + */ + int rebind (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Unbounded_Set &old_int_id_set); + + /** + * Same as a normal rebind, except the map entry is also passed back + * to the caller. The entry in this case will either be the newly + * created entry, or the existing one. + */ + int rebind (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Unbounded_Set &old_int_id_set, + ACE_Hash_Multi_Map_Entry *&entry); + + /** + * Associate @a ext_id with @a int_id_set. If @a ext_id is not in the map + * then behaves just like bind. Otherwise, store the old values + * of @a ext_id and @a int_id_set into the "out" parameters and rebind the + * new parameters. This is very useful if you need to have an + * atomic way of updating @c ACE_Hash_Multi_Map_Entry objects and you also + * need full control over memory allocation. Returns 0 if a new entry + * is bound successfully, returns 1 if an existing entry was rebound, + * and returns -1 if failures occur. + */ + int rebind (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + EXT_ID &old_ext_id, + ACE_Unbounded_Set &old_int_id_set); + + /** + * Same as a normal rebind, except the map entry is also passed back + * to the caller. The entry in this case will either be the newly + * created entry, or the existing one. + */ + int rebind (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + EXT_ID &old_ext_id, + ACE_Unbounded_Set &old_int_id_set, + ACE_Hash_Multi_Map_Entry *&entry); + + /// Locate @a ext_id and pass out parameter via @a int_id_set. + /// Return 0 if found, returns -1 if not found. + int find (const EXT_ID &ext_id, + ACE_Unbounded_Set &int_id_set) const; + + /// Locate @a ext_id and @a int_id. + /// Return 0 if found, returns -1 if not found. + int find (const EXT_ID &ext_id, + const INT_ID &int_id) const; + + /// Returns 0 if the @a ext_id is in the mapping, otherwise -1. + int find (const EXT_ID &ext_id) const; + + /// Locate @a ext_id and pass out parameter via @a entry. If found, + /// return 0, returns -1 if not found. + int find (const EXT_ID &ext_id, + ACE_Hash_Multi_Map_Entry *&entry) const; + + /** + * Unbind (remove) the @a ext_id from the map. Don't return the + * int_id to the caller (this is useful for collections where the + * int_ids are *not* dynamically allocated...) + */ + int unbind (const EXT_ID &ext_id); + + /// Break any association of @a ext_id. Returns the value of @a int_id_set + /// in case the caller needs to deallocate memory. Return 0 if the + /// unbind was successfully, and returns -1 if failures occur. + int unbind (const EXT_ID &ext_id, + ACE_Unbounded_Set &int_id_set); + + /// Break any association of @a ext_id and @a int_id. Return 0 if the + /// unbind was successfully, and returns -1 if failures occur. + int unbind (const EXT_ID &ext_id, + const INT_ID &int_id); + + /// Remove @a entry from map. Return 0 if the unbind was successfully, + /// and returns -1 if failures occur. + int unbind (ACE_Hash_Multi_Map_Entry *entry); + + /// Returns the current number of @c ACE_Hash_Multi_Map_Entry objects in the + /// hash table. + size_t current_size (void) const; + + /// Return the size of the array that's used to point to the + /// linked lists of @c ACE_Hash_Multi_Map_Entry objects in the hash table. + size_t total_size (void) const; + + /** + * Returns a reference to the underlying @c ACE_LOCK. This makes it + * possible to acquire the lock explicitly, which can be useful in + * some cases if you instantiate the @c ACE_Atomic_Op with an + * @c ACE_Recursive_Mutex or @c ACE_Process_Mutex, or if you need to + * guard the state of an iterator. + * @note The right name would be lock, but HP/C++ will choke on that! + */ + ACE_LOCK &mutex (void); + + /// Dump the state of an object. + void dump (void) const; + + // = STL styled iterator factory functions. + + /// Return forward iterator. + ACE_Hash_Multi_Map_Iterator begin (void); + ACE_Hash_Multi_Map_Iterator end (void); + + /// Return reverse iterator. + ACE_Hash_Multi_Map_Reverse_Iterator rbegin (void); + ACE_Hash_Multi_Map_Reverse_Iterator rend (void); + +protected: + // = The following methods do the actual work. + + /// Returns 1 if @a id1 == @a id2, else 0. This is defined as a + /// separate method to facilitate template specialization. + int equal (const EXT_ID &id1, const EXT_ID &id2); + + /// Compute the hash value of the @a ext_id. This is defined as a + /// separate method to facilitate template specialization. + u_long hash (const EXT_ID &ext_id); + + // = These methods assume locks are held by private methods. + + /// Performs bind. Must be called with locks held. + int bind_i (const EXT_ID &ext_id, + const INT_ID &int_id); + + /// Performs bind. Must be called with locks held. + int bind_i (const EXT_ID &ext_id, + const INT_ID &int_id, + ACE_Hash_Multi_Map_Entry *&entry); + + /// Performs bind. Must be called with locks held. + int bind_i (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set); + + /// Performs bind. Must be called with locks held. + int bind_i (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Hash_Multi_Map_Entry *&entry); + + /// Performs trybind. Must be called with locks held. + int trybind_i (const EXT_ID &ext_id, + ACE_Unbounded_Set &int_id_set); + + /// Performs trybind. Must be called with locks held. + int trybind_i (const EXT_ID &ext_id, + ACE_Unbounded_Set &int_id_set, + ACE_Hash_Multi_Map_Entry *&entry); + + /// Performs rebind. Must be called with locks held. + int rebind_i (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set); + + /// Performs rebind. Must be called with locks held. + int rebind_i (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Hash_Multi_Map_Entry *&entry); + + /// Performs rebind. Must be called with locks held. + int rebind_i (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Unbounded_Set &old_int_id); + + /// Performs rebind. Must be called with locks held. + int rebind_i (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Unbounded_Set &old_int_id_set, + ACE_Hash_Multi_Map_Entry *&entry); + + /// Performs rebind. Must be called with locks held. + int rebind_i (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + EXT_ID &old_ext_id, + ACE_Unbounded_Set &old_int_id_set); + + /// Performs rebind. Must be called with locks held. + int rebind_i (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + EXT_ID &old_ext_id, + ACE_Unbounded_Set &old_int_id_set, + ACE_Hash_Multi_Map_Entry *&entry); + + /// Performs a find of @a int_id_set using @a ext_id as the key. Must be + /// called with locks held. + int find_i (const EXT_ID &ext_id, + ACE_Unbounded_Set &int_id_set); + + /// Performs a find of @a ext_id and @a int_id. Must be + /// called with locks held. + int find_i (const EXT_ID &ext_id, + const INT_ID &int_id); + + /// Performs a find using @a ext_id as the key. Must be called with + /// locks held. + int find_i (const EXT_ID &ext_id); + + /// Performs a find using @a ext_id as the key. Must be called with + /// locks held. + int find_i (const EXT_ID &ext_id, + ACE_Hash_Multi_Map_Entry *&entry); + + /// Performs unbind. Must be called with locks held. + int unbind_i (const EXT_ID &ext_id, + ACE_Unbounded_Set &int_id_set); + + /// Performs unbind. Must be called with locks held. + int unbind_i (const EXT_ID &ext_id, + const INT_ID &int_id); + + /// Performs unbind. Must be called with locks held. + int unbind_i (const EXT_ID &ext_id); + + /// Performs unbind. Must be called with locks held. + int unbind_i (ACE_Hash_Multi_Map_Entry *entry); + + /** + * Resize the map. Must be called with locks held. + * @note This method should never be called more than once or else all the + * hashing will get screwed up as the size will change. + */ + int create_buckets (size_t size); + + /// Close down a Map_Manager. Must be called with + /// locks held. + int close_i (void); + + /// Removes all the entries in Map_Manager. Must be called with + /// locks held. + int unbind_all_i (void); + + /// Pointer to a memory allocator used for table_, so it should + /// supply size*sizeof (@c ACE_Hash_Multi_Map_Entry<@c EXT_ID, @c INT_ID>), + ACE_Allocator *table_allocator_; + + /// Addidtional allocator for entries, so it should be able to + /// allocate 'size' / chunks of sizeof + /// (@c ACE_Hash_Multi_Map_Entry<@c EXT_ID, @c INT_ID>) bytes each. + ACE_Allocator *entry_allocator_; + + /// Synchronization variable for the MT_SAFE + /// @c ACE_Hash_Multi_Map_Manager. + ACE_LOCK lock_; + + /// Function object used for hashing keys. + HASH_KEY hash_key_; + + /// Function object used for comparing keys. + COMPARE_KEYS compare_keys_; + +protected: + /// Returns the @c ACE_Hash_Multi_Map_Entry object that corresponds to + /// @a ext_id. + int shared_find (const EXT_ID &ext_id, + ACE_Hash_Multi_Map_Entry *&entry, + size_t &loc); + + /// Accessor of the underlying table + ACE_Hash_Multi_Map_Entry *table (void); + + /// Accessor of the current size attribute + size_t cur_size (void) const; + +private: + /** + * Array of the pointers to @c ACE_Hash_Multi_Map_Entry objects, each of + * which points to an @c ACE_Hash_Multi_Map_Entry that serves as the + * beginning of a linked list of @c EXT_ID that hash to that bucket. + */ + ACE_Hash_Multi_Map_Entry *table_; + + /// Total size of the hash table. + size_t total_size_; + + /// Current number of entries in the table + /// @note That this can be larger than total_size_ due to the + /// bucket chaining). + size_t cur_size_; + + // = Disallow these operations. + ACE_UNIMPLEMENTED_FUNC (void operator= (const ACE_Hash_Multi_Map_Manager &)) + ACE_UNIMPLEMENTED_FUNC (ACE_Hash_Multi_Map_Manager (const ACE_Hash_Multi_Map_Manager &)) +}; + +/** + * @class ACE_Hash_Multi_Map_Iterator_Base + * + * @brief Base iterator for the @c ACE_Hash_Multi_Map_Manager + * + * This class factors out common code from its templatized + * subclasses. + */ +template +class ACE_Hash_Multi_Map_Iterator_Base +{ +public: + // = Initialization method. + /// Contructor. If @a head != 0, the iterator constructed is positioned + /// at the head of the map, it is positioned at the end otherwise. + ACE_Hash_Multi_Map_Iterator_Base (ACE_Hash_Multi_Map_Manager &mm, + int head); + + // = ITERATION methods. + + /// Pass back the @a next_entry that hasn't been seen in the Set. + /// Returns 0 when all items have been seen, else 1. + int next (ACE_Hash_Multi_Map_Entry *&next_entry) const; + + /// Returns 1 when all items have been seen, else 0. + int done (void) const; + + /// Returns a reference to the interal element this object is pointing to. + ACE_Hash_Multi_Map_Entry& operator* (void) const; + + /// Returns a pointer to the interal element this object is pointing to. + ACE_Hash_Multi_Map_Entry* operator-> (void) const; + + /// Returns reference the @c Hash_Multi_Map_Manager that is being iterated + /// over. + ACE_Hash_Multi_Map_Manager& map (void); + + /// Check if two iterators point to the same position + bool operator== (const ACE_Hash_Multi_Map_Iterator_Base &) const; + bool operator!= (const ACE_Hash_Multi_Map_Iterator_Base &) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// Move forward by one element in the set. Returns 0 when there's + /// no more item in the set after the current items, else 1. + int forward_i (void); + + /// Move backward by one element in the set. Returns 0 when there's + /// no more item in the set before the current item, else 1. + int reverse_i (void); + + /// Dump the state of an object. + void dump_i (void) const; + + /// Map we are iterating over. + ACE_Hash_Multi_Map_Manager *map_man_; + + /// Keeps track of how far we've advanced in the table. + ssize_t index_; + + /// Keeps track of how far we've advanced in a linked list in each + /// table slot. + ACE_Hash_Multi_Map_Entry *next_; +}; + +/** + * @class ACE_Hash_Multi_Map_Const_Iterator_Base + * + * @brief Base const iterator for the @c ACE_Hash_Multi_Map_Manager + * + * This class factors out common code from its templatized + * subclasses. + */ +template +class ACE_Hash_Multi_Map_Const_Iterator_Base +{ +public: + // = Initialization method. + /// Contructor. If @a head != 0, the iterator constructed is positioned + /// at the head of the map, it is positioned at the end otherwise. + ACE_Hash_Multi_Map_Const_Iterator_Base (const ACE_Hash_Multi_Map_Manager &mm, + int head); + + // = ITERATION methods. + + /// Pass back the @a next_entry that hasn't been seen in the Set. + /// Returns 0 when all items have been seen, else 1. + int next (ACE_Hash_Multi_Map_Entry *&next_entry) const; + + /// Returns 1 when all items have been seen, else 0. + int done (void) const; + + /// Returns a reference to the interal element this object is pointing to. + ACE_Hash_Multi_Map_Entry& operator* (void) const; + + /// Returns a pointer to the interal element this object is pointing to. + ACE_Hash_Multi_Map_Entry* operator-> (void) const; + + /// Returns reference the @c Hash_Multi_Map_Manager that is being iterated + /// over. + const ACE_Hash_Multi_Map_Manager& map (void); + + /// Check if two iterators point to the same position + bool operator== (const ACE_Hash_Multi_Map_Const_Iterator_Base &) const; + bool operator!= (const ACE_Hash_Multi_Map_Const_Iterator_Base &) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// Move forward by one element in the set. Returns 0 when there's + /// no more item in the set after the current items, else 1. + int forward_i (void); + + /// Move backward by one element in the set. Returns 0 when there's + /// no more item in the set before the current item, else 1. + int reverse_i (void); + + /// Dump the state of an object. + void dump_i (void) const; + + /// Map we are iterating over. + const ACE_Hash_Multi_Map_Manager *map_man_; + + /// Keeps track of how far we've advanced in the table. + ssize_t index_; + + /// Keeps track of how far we've advanced in a linked list in each + /// table slot. + ACE_Hash_Multi_Map_Entry *next_; +}; + +/** + * @class ACE_Hash_Multi_Map_Iterator + * + * @brief Forward iterator for the @c ACE_Hash_Multi_Map_Manager. + * + * This class does not perform any internal locking of the + * @c ACE_Hash_Multi_Map_Manager it is iterating upon since locking is + * inherently inefficient and/or error-prone within an STL-style + * iterator. If you require locking, you can explicitly use an + * @c ACE_Guard or @c ACE_Read_Guard on the @c ACE_Hash_Multi_Map_Manager's + * internal lock, which is accessible via its @c mutex method. + */ +template +class ACE_Hash_Multi_Map_Iterator : public ACE_Hash_Multi_Map_Iterator_Base +{ +public: + // = Initialization method. + ACE_Hash_Multi_Map_Iterator (ACE_Hash_Multi_Map_Manager &mm, + int tail = 0); + + // = Iteration methods. + /// Move forward by one element in the set. Returns 0 when all the + /// items in the set have been seen, else 1. + int advance (void); + + /// Dump the state of an object. + void dump (void) const; + + // = STL styled iteration, compare, and reference functions. + + /// Prefix advance. + ACE_Hash_Multi_Map_Iterator &operator++ (void); + + /// Postfix advance. + ACE_Hash_Multi_Map_Iterator operator++ (int); + + /// Prefix reverse. + ACE_Hash_Multi_Map_Iterator &operator-- (void); + + /// Postfix reverse. + ACE_Hash_Multi_Map_Iterator operator-- (int); + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +/** + * @class ACE_Hash_Multi_Map_Const_Iterator + * + * @brief Const forward iterator for the @c ACE_Hash_Multi_Map_Manager. + * + * This class does not perform any internal locking of the + * @c ACE_Hash_Multi_Map_Manager it is iterating upon since locking is + * inherently inefficient and/or error-prone within an STL-style + * iterator. If you require locking, you can explicitly use an + * @c ACE_Guard or @c ACE_Read_Guard on the @c ACE_Hash_Multi_Map_Manager's + * internal lock, which is accessible via its @c mutex method. + */ +template +class ACE_Hash_Multi_Map_Const_Iterator : public ACE_Hash_Multi_Map_Const_Iterator_Base +{ +public: + // = Initialization method. + ACE_Hash_Multi_Map_Const_Iterator (const ACE_Hash_Multi_Map_Manager &mm, + int tail = 0); + + // = Iteration methods. + /// Move forward by one element in the set. Returns 0 when all the + /// items in the set have been seen, else 1. + int advance (void); + + /// Dump the state of an object. + void dump (void) const; + + // = STL styled iteration, compare, and reference functions. + + /// Prefix advance. + ACE_Hash_Multi_Map_Const_Iterator &operator++ (void); + + /// Postfix advance. + ACE_Hash_Multi_Map_Const_Iterator operator++ (int); + + /// Prefix reverse. + ACE_Hash_Multi_Map_Const_Iterator &operator-- (void); + + /// Postfix reverse. + ACE_Hash_Multi_Map_Const_Iterator operator-- (int); + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +/** + * @class ACE_Hash_Multi_Map_Bucket_Iterator + * + * @brief Forward iterator for the @c ACE_Hash_Multi_Map_Manager which + * only traverses a particular bucket. The particular bucket is + * specified by the @c EXT_ID parameter specified in the constructor. + * + * This class does not perform any internal locking of the + * @c ACE_Hash_Multi_Map_Manager it is iterating upon since locking is + * inherently inefficient and/or error-prone within an STL-style + * iterator. If you require locking, you can explicitly use an + * @c ACE_Guard or @c ACE_Read_Guard on the @c ACE_Hash_Multi_Map_Manager's + * internal lock, which is accessible via its @c mutex method. + * + * Note that a creation method for this new iterator cannot be added + * to the hash map, since this would require adding explicit template + * instantiations for bucket iterators on platforms with broken + * templates. + */ +template +class ACE_Hash_Multi_Map_Bucket_Iterator +{ +public: + // = Initialization method. + ACE_Hash_Multi_Map_Bucket_Iterator (ACE_Hash_Multi_Map_Manager &mm, + const EXT_ID &ext_id, + int tail = 0); + + // = STL styled iteration, compare, and reference functions. + + /// Prefix advance. + ACE_Hash_Multi_Map_Bucket_Iterator &operator++ (void); + + /// Postfix advance. + ACE_Hash_Multi_Map_Bucket_Iterator operator++ (int); + + /// Prefix reverse. + ACE_Hash_Multi_Map_Bucket_Iterator &operator-- (void); + + /// Postfix reverse. + ACE_Hash_Multi_Map_Bucket_Iterator operator-- (int); + + /// Returns a reference to the interal element this object is pointing to. + ACE_Hash_Multi_Map_Entry& operator* (void) const; + + /// Returns a pointer to the interal element this object is pointing to. + ACE_Hash_Multi_Map_Entry* operator-> (void) const; + + /// Returns reference the Hash_Multi_Map_Manager that is being iterated + /// over. + ACE_Hash_Multi_Map_Manager& map (void); + + /// Check if two iterators point to the same position + bool operator== (const ACE_Hash_Multi_Map_Bucket_Iterator &) const; + bool operator!= (const ACE_Hash_Multi_Map_Bucket_Iterator &) const; + +protected: + /// Move forward by one element in the set. Returns 0 when there's + /// no more item in the set after the current items, else 1. + int forward_i (void); + + /// Move backward by one element in the set. Returns 0 when there's + /// no more item in the set before the current item, else 1. + int reverse_i (void); + + /// Map we are iterating over. + ACE_Hash_Multi_Map_Manager *map_man_; + + /// Keeps track of how far we've advanced in the table. + ssize_t index_; + + /// Keeps track of how far we've advanced in a linked list in each + /// table slot. + ACE_Hash_Multi_Map_Entry *next_; +}; + +/** + * @class ACE_Hash_Multi_Map_Reverse_Iterator + * + * @brief Reverse iterator for the @c ACE_Hash_Multi_Map_Manager. + * + * This class does not perform any internal locking of the + * @c ACE_Hash_Multi_Map_Manager it is iterating upon since locking is + * inherently inefficient and/or error-prone within an STL-style + * iterator. If you require locking, you can explicitly use an + * @c ACE_Guard or @c ACE_Read_Guard on the @c ACE_Hash_Multi_Map_Manager's + * internal lock, which is accessible via its @c mutex method. + */ +template +class ACE_Hash_Multi_Map_Reverse_Iterator : public ACE_Hash_Multi_Map_Iterator_Base +{ +public: + // = Initialization method. + ACE_Hash_Multi_Map_Reverse_Iterator (ACE_Hash_Multi_Map_Manager &mm, + int head = 0); + + // = Iteration methods. + /// Move forward by one element in the set. Returns 0 when all the + /// items in the set have been seen, else 1. + int advance (void); + + /// Dump the state of an object. + void dump (void) const; + + // = STL styled iteration, compare, and reference functions. + + /// Prefix reverse. + ACE_Hash_Multi_Map_Reverse_Iterator &operator++ (void); + + /// Postfix reverse. + ACE_Hash_Multi_Map_Reverse_Iterator operator++ (int); + + /// Prefix advance. + ACE_Hash_Multi_Map_Reverse_Iterator &operator-- (void); + + /// Postfix advance. + ACE_Hash_Multi_Map_Reverse_Iterator operator-- (int); + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +# include "ace/Hash_Multi_Map_Manager_T.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Hash_Multi_Map_Manager_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Hash_Multi_Map_Manager_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" +#endif /* ACE_HASH_MULTI_MAP_MANAGER_T_H */ diff --git a/ACE/ace/Hash_Multi_Map_Manager_T.inl b/ACE/ace/Hash_Multi_Map_Manager_T.inl new file mode 100644 index 00000000000..f0cbcabe599 --- /dev/null +++ b/ACE/ace/Hash_Multi_Map_Manager_T.inl @@ -0,0 +1,994 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/Guard_T.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE +ACE_Hash_Multi_Map_Manager::ACE_Hash_Multi_Map_Manager (size_t size, + ACE_Allocator *table_alloc, + ACE_Allocator *entry_alloc) + : table_allocator_ (table_alloc), + entry_allocator_ (entry_alloc), + table_ (0), + total_size_ (0), + cur_size_ (0) +{ + if (this->open (size, table_alloc, entry_alloc) == -1) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("ACE_Hash_Multi_Map_Manager\n"))); +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Manager::ACE_Hash_Multi_Map_Manager (ACE_Allocator *table_alloc, + ACE_Allocator *entry_alloc) + : table_allocator_ (table_alloc), + entry_allocator_ (entry_alloc), + table_ (0), + total_size_ (0), + cur_size_ (0) +{ + if (this->open (ACE_DEFAULT_MAP_SIZE, table_alloc, entry_alloc) == -1) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("ACE_Hash_Multi_Map_Manager\n"))); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::close (void) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->close_i (); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::unbind_all (void) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->unbind_all_i (); +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Manager::~ACE_Hash_Multi_Map_Manager (void) +{ + this->close (); +} + +template ACE_INLINE size_t +ACE_Hash_Multi_Map_Manager::current_size (void) const +{ + return this->cur_size_; +} + +template ACE_INLINE size_t +ACE_Hash_Multi_Map_Manager::total_size (void) const +{ + return this->total_size_; +} + +template ACE_INLINE ACE_LOCK & +ACE_Hash_Multi_Map_Manager::mutex (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Manager::mutex"); + return this->lock_; +} + +template ACE_INLINE u_long +ACE_Hash_Multi_Map_Manager::hash (const EXT_ID &ext_id) +{ + return this->hash_key_ (ext_id); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::equal (const EXT_ID &id1, + const EXT_ID &id2) +{ + return this->compare_keys_ (id1, id2); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::bind_i (const EXT_ID &ext_id, + const INT_ID &int_id) +{ + ACE_Hash_Multi_Map_Entry *temp; + + return this->bind_i (ext_id, int_id, temp); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::bind_i (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set) +{ + ACE_Hash_Multi_Map_Entry *temp; + + return this->bind_i (ext_id, int_id_set, temp); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::bind (const EXT_ID &ext_id, + const INT_ID &int_id) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->bind_i (ext_id, int_id); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::bind (const EXT_ID &ext_id, + const INT_ID &int_id, + ACE_Hash_Multi_Map_Entry *&entry) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->bind_i (ext_id, int_id, entry); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::bind (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->bind_i (ext_id, int_id_set); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::bind (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Hash_Multi_Map_Entry *&entry) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->bind_i (ext_id, int_id_set, entry); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::trybind_i (const EXT_ID &ext_id, + ACE_Unbounded_Set &int_id_set) +{ + ACE_Hash_Multi_Map_Entry *temp; + + int result = this->trybind_i (ext_id, int_id_set, temp); + if (result == 1) + int_id_set = temp->int_id_set_; + return result; +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::trybind (const EXT_ID &ext_id, + ACE_Unbounded_Set &int_id_set) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->trybind_i (ext_id, int_id_set); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::trybind (const EXT_ID &ext_id, + ACE_Unbounded_Set &int_id_set, + ACE_Hash_Multi_Map_Entry *&entry) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->trybind_i (ext_id, int_id_set, entry); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::unbind_i (const EXT_ID &ext_id) +{ + ACE_Unbounded_Set int_id_set; + + return this->unbind_i (ext_id, int_id_set); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::unbind (const EXT_ID &ext_id, + ACE_Unbounded_Set &int_id_set) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->unbind_i (ext_id, int_id_set); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::unbind (const EXT_ID &ext_id, + const INT_ID &int_id) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->unbind_i (ext_id, int_id); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::unbind (const EXT_ID &ext_id) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->unbind_i (ext_id) == -1 ? -1 : 0; +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::unbind (ACE_Hash_Multi_Map_Entry *entry) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->unbind_i (entry) == -1 ? -1 : 0; +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::find_i (const EXT_ID &ext_id, + ACE_Unbounded_Set &int_id_set) +{ + ACE_Hash_Multi_Map_Entry *entry; + + size_t dummy; + if (this->shared_find (ext_id, entry, dummy) == -1) + return -1; + else + { + int_id_set = entry->int_id_set_; + return 0; + } +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::find_i (const EXT_ID &ext_id, + const INT_ID &int_id) +{ + ACE_Hash_Multi_Map_Entry *entry; + + size_t dummy; + if (this->shared_find (ext_id, entry, dummy) == -1) + return -1; + else + { + if (0 == entry->int_id_set_.find (int_id)) + return 0; + else + return -1; + } +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::find_i (const EXT_ID &ext_id) +{ + ACE_Hash_Multi_Map_Entry *entry; + + size_t dummy; + return this->shared_find (ext_id, entry, dummy); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::find (const EXT_ID &ext_id, + ACE_Unbounded_Set &int_id_set) const +{ + ACE_Hash_Multi_Map_Manager *nc_this = + const_cast *> + (this); + + ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, nc_this->lock_, -1); + + return nc_this->find_i (ext_id, int_id_set); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::find (const EXT_ID &ext_id, + const INT_ID &int_id) const +{ + ACE_Hash_Multi_Map_Manager *nc_this = + const_cast *> + (this); + + ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, nc_this->lock_, -1); + + return nc_this->find_i (ext_id, int_id); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::find (const EXT_ID &ext_id) const +{ + ACE_Hash_Multi_Map_Manager *nc_this = + const_cast *> + (this); + + ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, nc_this->lock_, -1); + + return nc_this->find_i (ext_id); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::find_i (const EXT_ID &ext_id, + ACE_Hash_Multi_Map_Entry *&entry) +{ + size_t dummy; + return this->shared_find (ext_id, entry, dummy); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::find (const EXT_ID &ext_id, + ACE_Hash_Multi_Map_Entry *&entry) const +{ + ACE_Hash_Multi_Map_Manager *nc_this = + const_cast *> + (this); + + ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, nc_this->lock_, -1); + + return nc_this->find_i (ext_id, entry); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::rebind_i (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set) +{ + ACE_Hash_Multi_Map_Entry *node; + + return this->rebind_i (ext_id, + int_id_set, + node); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::rebind_i (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Unbounded_Set &old_int_id_set) +{ + ACE_Hash_Multi_Map_Entry *node; + + return this->rebind_i (ext_id, + int_id_set, + old_int_id_set, + node); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::rebind_i (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + EXT_ID &old_ext_id, + ACE_Unbounded_Set &old_int_id_set) +{ + ACE_Hash_Multi_Map_Entry *node; + + return this->rebind_i (ext_id, + int_id_set, + old_ext_id, + old_int_id_set, + node); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::rebind (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->rebind_i (ext_id, int_id_set); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::rebind (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Hash_Multi_Map_Entry *&entry) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->rebind_i (ext_id, int_id_set, entry); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::rebind (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Unbounded_Set &old_int_id_set) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->rebind_i (ext_id, int_id_set, old_int_id_set); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::rebind (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + ACE_Unbounded_Set &old_int_id_set, + ACE_Hash_Multi_Map_Entry *&entry) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->rebind_i (ext_id, int_id_set, old_int_id_set, entry); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::rebind (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + EXT_ID &old_ext_id, + ACE_Unbounded_Set &old_int_id_set) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->rebind_i (ext_id, int_id_set, old_ext_id, old_int_id_set); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Manager::rebind (const EXT_ID &ext_id, + const ACE_Unbounded_Set &int_id_set, + EXT_ID &old_ext_id, + ACE_Unbounded_Set &old_int_id_set, + ACE_Hash_Multi_Map_Entry *&entry) +{ + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); + + return this->rebind_i (ext_id, int_id_set, old_ext_id, old_int_id_set, entry); +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Iterator +ACE_Hash_Multi_Map_Manager::begin (void) +{ + return ACE_Hash_Multi_Map_Iterator (*this); +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Iterator +ACE_Hash_Multi_Map_Manager::end (void) +{ + return ACE_Hash_Multi_Map_Iterator (*this, 1); +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Reverse_Iterator +ACE_Hash_Multi_Map_Manager::rbegin (void) +{ + return ACE_Hash_Multi_Map_Reverse_Iterator (*this); +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Reverse_Iterator +ACE_Hash_Multi_Map_Manager::rend (void) +{ + return ACE_Hash_Multi_Map_Reverse_Iterator (*this, 1); +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Entry * +ACE_Hash_Multi_Map_Manager::table (void) +{ + return this->table_; +} + +template ACE_INLINE +size_t +ACE_Hash_Multi_Map_Manager::cur_size (void) const +{ + return this->cur_size_; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Iterator_Base::ACE_Hash_Multi_Map_Iterator_Base (ACE_Hash_Multi_Map_Manager &mm, + int head) + : map_man_ (&mm), + index_ (head != 0 ? -1 : (ssize_t) mm.total_size_), + next_ (0) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator_Base::ACE_Hash_Multi_Map_Iterator_Base"); + + if (mm.table_ != 0) + this->next_ = &mm.table_[head != 0 ? 0 : mm.total_size_ - 1]; +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Iterator_Base::next (ACE_Hash_Multi_Map_Entry *&entry) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator_Base::next"); + + if (this->map_man_->table_ != 0 + && this->index_ < static_cast (this->map_man_->total_size_) + && this->index_ >= 0 + && this->next_ != &this->map_man_->table_[this->index_]) + { + entry = this->next_; + return 1; + } + else + return 0; +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Iterator_Base::done (void) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator_Base::done"); + + return this->map_man_->table_ == 0 + || this->index_ >= static_cast (this->map_man_->total_size_) + || this->index_ < 0; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Entry & +ACE_Hash_Multi_Map_Iterator_Base::operator* (void) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator_Base::operator*"); + ACE_Hash_Multi_Map_Entry *retv = 0; + + int result = this->next (retv); + + ACE_UNUSED_ARG (result); + ACE_ASSERT (result != 0); + + return *retv; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Entry * +ACE_Hash_Multi_Map_Iterator_Base::operator-> (void) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator_Base::operator->"); + ACE_Hash_Multi_Map_Entry *retv = 0; + + int result = this->next (retv); + + ACE_UNUSED_ARG (result); + ACE_ASSERT (result != 0); + + return retv; +} + +// Returns the reference to the Hash_Multi_Map_manager_ex that is being +// iterated over. +template ACE_INLINE +ACE_Hash_Multi_Map_Manager& +ACE_Hash_Multi_Map_Iterator_Base::map (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator_Base::map"); + return *this->map_man_; +} + +template ACE_INLINE bool +ACE_Hash_Multi_Map_Iterator_Base::operator== (const ACE_Hash_Multi_Map_Iterator_Base &rhs) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator_Base::operator=="); + return this->map_man_ == rhs.map_man_ + && this->index_ == rhs.index_ + && this->next_ == rhs.next_; +} + +template ACE_INLINE bool +ACE_Hash_Multi_Map_Iterator_Base::operator!= (const ACE_Hash_Multi_Map_Iterator_Base &rhs) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator_Base::operator!="); + return this->next_ != rhs.next_ + || this->index_ != rhs.index_ + || this->map_man_ != rhs.map_man_; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Const_Iterator_Base::ACE_Hash_Multi_Map_Const_Iterator_Base (const ACE_Hash_Multi_Map_Manager &mm, + int head) + : map_man_ (&mm), + index_ (head != 0 ? -1 : (ssize_t) mm.total_size_), + next_ (0) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator_Base::ACE_Hash_Multi_Map_Const_Iterator_Base"); + + if (mm.table_ != 0) + this->next_ = &mm.table_[head != 0 ? 0 : mm.total_size_ - 1]; +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Const_Iterator_Base::next (ACE_Hash_Multi_Map_Entry *&entry) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator_Base::next"); + + if (this->map_man_->table_ != 0 + && this->index_ < (ssize_t) this->map_man_->total_size_ + && this->index_ >= 0 + && this->next_ != &this->map_man_->table_[this->index_]) + { + entry = this->next_; + return 1; + } + else + return 0; +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Const_Iterator_Base::done (void) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator_Base::done"); + + return this->map_man_->table_ == 0 + || this->index_ >= (ssize_t) this->map_man_->total_size_ + || this->index_ < 0; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Entry & +ACE_Hash_Multi_Map_Const_Iterator_Base::operator* (void) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator_Base::operator*"); + ACE_Hash_Multi_Map_Entry *retv = 0; + + int result = this->next (retv); + + ACE_UNUSED_ARG (result); + ACE_ASSERT (result != 0); + + return *retv; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Entry * +ACE_Hash_Multi_Map_Const_Iterator_Base::operator-> (void) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator_Base::operator->"); + ACE_Hash_Multi_Map_Entry *retv = 0; + + int result = this->next (retv); + + ACE_UNUSED_ARG (result); + ACE_ASSERT (result != 0); + + return retv; +} + +// Returns the reference to the Hash_Multi_Map_manager_ex that is being +// iterated over. +template ACE_INLINE +const ACE_Hash_Multi_Map_Manager& +ACE_Hash_Multi_Map_Const_Iterator_Base::map (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator_Base::map"); + return *this->map_man_; +} + +template ACE_INLINE bool +ACE_Hash_Multi_Map_Const_Iterator_Base::operator== (const ACE_Hash_Multi_Map_Const_Iterator_Base &rhs) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator_Base::operator=="); + return this->map_man_ == rhs.map_man_ + && this->index_ == rhs.index_ + && this->next_ == rhs.next_; +} + +template ACE_INLINE bool +ACE_Hash_Multi_Map_Const_Iterator_Base::operator!= (const ACE_Hash_Multi_Map_Const_Iterator_Base &rhs) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator_Base::operator!="); + return this->next_ != rhs.next_ + || this->index_ != rhs.index_ + || this->map_man_ != rhs.map_man_; +} + +ACE_ALLOC_HOOK_DEFINE(ACE_Hash_Multi_Map_Iterator) + +template ACE_INLINE void +ACE_Hash_Multi_Map_Iterator::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator::dump"); + + this->dump_i (); +#endif /* ACE_HAS_DUMP */ +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Iterator::ACE_Hash_Multi_Map_Iterator (ACE_Hash_Multi_Map_Manager &mm, + int tail) + : ACE_Hash_Multi_Map_Iterator_Base (mm, + tail == 0 ? 1 : 0) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator::ACE_Hash_Multi_Map_Iterator"); + if (tail == 0) + this->forward_i (); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Iterator::advance (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator::advance"); + return this->forward_i (); +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Iterator & +ACE_Hash_Multi_Map_Iterator::operator++ (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator::operator++ (void)"); + + this->forward_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Iterator +ACE_Hash_Multi_Map_Iterator::operator++ (int) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator::operator++ (int)"); + + ACE_Hash_Multi_Map_Iterator retv (*this); + ++*this; + return retv; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Iterator & +ACE_Hash_Multi_Map_Iterator::operator-- (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator::operator-- (void)"); + + this->reverse_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Iterator +ACE_Hash_Multi_Map_Iterator::operator-- (int) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Iterator::operator-- (int)"); + + ACE_Hash_Multi_Map_Iterator retv (*this); + --*this; + return retv; +} + +ACE_ALLOC_HOOK_DEFINE(ACE_Hash_Multi_Map_Const_Iterator) + +template ACE_INLINE void +ACE_Hash_Multi_Map_Const_Iterator::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator::dump"); + + this->dump_i (); +#endif /* ACE_HAS_DUMP */ +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Const_Iterator::ACE_Hash_Multi_Map_Const_Iterator (const ACE_Hash_Multi_Map_Manager &mm, + int tail) + : ACE_Hash_Multi_Map_Const_Iterator_Base (mm, + tail == 0 ? 1 : 0) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator::ACE_Hash_Multi_Map_Const_Iterator"); + if (tail == 0) + this->forward_i (); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Const_Iterator::advance (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator::advance"); + return this->forward_i (); +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Const_Iterator & +ACE_Hash_Multi_Map_Const_Iterator::operator++ (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator::operator++ (void)"); + + this->forward_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Const_Iterator +ACE_Hash_Multi_Map_Const_Iterator::operator++ (int) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator::operator++ (int)"); + + ACE_Hash_Multi_Map_Const_Iterator retv (*this); + ++*this; + return retv; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Const_Iterator & +ACE_Hash_Multi_Map_Const_Iterator::operator-- (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator::operator-- (void)"); + + this->reverse_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Const_Iterator +ACE_Hash_Multi_Map_Const_Iterator::operator-- (int) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Const_Iterator::operator-- (int)"); + + ACE_Hash_Multi_Map_Const_Iterator retv (*this); + --*this; + return retv; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Bucket_Iterator::ACE_Hash_Multi_Map_Bucket_Iterator (ACE_Hash_Multi_Map_Manager &mm, + const EXT_ID &ext_id, + int tail) + : map_man_ (&mm) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Bucket_Iterator::ACE_Hash_Multi_Map_Bucket_Iterator"); + + this->index_ = this->map_man_->hash (ext_id) % this->map_man_->total_size_; + this->next_ = &this->map_man_->table_[this->index_]; + + if (tail == 0) + this->forward_i (); +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Bucket_Iterator & +ACE_Hash_Multi_Map_Bucket_Iterator::operator++ (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Bucket_Iterator::operator++ (void)"); + + this->forward_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Bucket_Iterator +ACE_Hash_Multi_Map_Bucket_Iterator::operator++ (int) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Bucket_Iterator::operator++ (int)"); + + ACE_Hash_Multi_Map_Bucket_Iterator retv (*this); + ++*this; + return retv; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Bucket_Iterator & +ACE_Hash_Multi_Map_Bucket_Iterator::operator-- (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Bucket_Iterator::operator-- (void)"); + + this->reverse_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Bucket_Iterator +ACE_Hash_Multi_Map_Bucket_Iterator::operator-- (int) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Bucket_Iterator::operator-- (int)"); + + ACE_Hash_Multi_Map_Bucket_Iterator retv (*this); + --*this; + return retv; +} + +template int +ACE_Hash_Multi_Map_Bucket_Iterator::forward_i (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Bucket_Iterator::forward_i"); + + this->next_ = this->next_->next_; + return this->next_ != &this->map_man_->table_[this->index_]; +} + +template int +ACE_Hash_Multi_Map_Bucket_Iterator::reverse_i (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Bucket_Iterator::reverse_i"); + + this->next_ = this->next_->prev_; + return this->next_ != &this->map_man_->table_[this->index_]; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Entry & +ACE_Hash_Multi_Map_Bucket_Iterator::operator* (void) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Bucket_Iterator::operator*"); + + return *this->next_; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Entry * +ACE_Hash_Multi_Map_Bucket_Iterator::operator-> (void) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Bucket_Iterator::operator->"); + + return this->next_; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Manager & +ACE_Hash_Multi_Map_Bucket_Iterator::map (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Bucket_Iterator::map"); + return *this->map_man_; +} + +template ACE_INLINE bool +ACE_Hash_Multi_Map_Bucket_Iterator::operator== (const ACE_Hash_Multi_Map_Bucket_Iterator &rhs) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Bucket_Iterator::operator=="); + return this->map_man_ == rhs.map_man_ + && this->index_ == rhs.index_ + && this->next_ == rhs.next_; +} + +template ACE_INLINE bool +ACE_Hash_Multi_Map_Bucket_Iterator::operator!= (const ACE_Hash_Multi_Map_Bucket_Iterator &rhs) const +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Bucket_Iterator::operator!="); + return this->next_ != rhs.next_ + || this->index_ != rhs.index_ + || this->map_man_ != rhs.map_man_; +} + +ACE_ALLOC_HOOK_DEFINE(ACE_Hash_Multi_Map_Reverse_Iterator) + +template ACE_INLINE void +ACE_Hash_Multi_Map_Reverse_Iterator::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Hash_Multi_Map_Reverse_Iterator::dump"); + + this->dump_i (); +#endif /* ACE_HAS_DUMP */ +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Reverse_Iterator::ACE_Hash_Multi_Map_Reverse_Iterator (ACE_Hash_Multi_Map_Manager &mm, int head) + : ACE_Hash_Multi_Map_Iterator_Base (mm, head) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Reverse_Iterator::ACE_Hash_Multi_Map_Reverse_Iterator"); + if (head == 0) + this->reverse_i (); +} + +template ACE_INLINE int +ACE_Hash_Multi_Map_Reverse_Iterator::advance (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Reverse_Iterator::advance"); + return this->reverse_i (); +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Reverse_Iterator & +ACE_Hash_Multi_Map_Reverse_Iterator::operator++ (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Reverse_Iterator::operator++ (void)"); + + this->reverse_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Reverse_Iterator +ACE_Hash_Multi_Map_Reverse_Iterator::operator++ (int) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Reverse_Iterator::operator++ (int)"); + + ACE_Hash_Multi_Map_Reverse_Iterator retv (*this); + ++*this; + return retv; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Reverse_Iterator & +ACE_Hash_Multi_Map_Reverse_Iterator::operator-- (void) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Reverse_Iterator::operator-- (void)"); + + this->forward_i (); + return *this; +} + +template ACE_INLINE +ACE_Hash_Multi_Map_Reverse_Iterator +ACE_Hash_Multi_Map_Reverse_Iterator::operator-- (int) +{ + ACE_TRACE ("ACE_Hash_Multi_Map_Reverse_Iterator::operator-- (int)"); + + ACE_Hash_Multi_Map_Reverse_Iterator retv (*this); + --*this; + return retv; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Hashable.cpp b/ACE/ace/Hashable.cpp new file mode 100644 index 00000000000..cab51f7aa26 --- /dev/null +++ b/ACE/ace/Hashable.cpp @@ -0,0 +1,36 @@ +//$Id$ + +#include "ace/Hashable.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Hashable.inl" +#endif /* __ACE_INLINE __ */ + + +ACE_RCSID (ace, + Hashable, + "$Id$") + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Hashable::~ACE_Hashable (void) +{ +} + +unsigned long +ACE_Hashable::hash (void) const +{ + // In doing the check below, we take chance of paying a performance + // price when the hash value is zero. But, that will (hopefully) + // happen far less often than a non-zero value, so this caching + // strategy should pay off, esp. if hash computation is expensive + // relative to the simple comparison. + + if (this->hash_value_ == 0) + this->hash_value_ = this->hash_i (); + + return this->hash_value_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Hashable.h b/ACE/ace/Hashable.h new file mode 100644 index 00000000000..d20bb2da1aa --- /dev/null +++ b/ACE/ace/Hashable.h @@ -0,0 +1,65 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Hashable.h + * + * $Id$ + * + * @author Doug Schmidt + */ +//============================================================================= + +#ifndef ACE_HASHABLE_H +#define ACE_HASHABLE_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Hashable + * + * @brief ACE_Hashable + */ +class ACE_Export ACE_Hashable +{ +public: + + /// Destructor. + virtual ~ACE_Hashable (void); + + /// Computes and returns hash value. This "caches" the hash value to + /// improve performance. + virtual unsigned long hash (void) const; + +protected: + /// Protected constructor. + ACE_Hashable (void); + + /// This is the method that actually performs the non-cached hash + /// computation. + virtual unsigned long hash_i (void) const = 0; + +protected: + + /// Pre-computed hash-value. + mutable unsigned long hash_value_; + +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Hashable.inl" +#endif /* __ACE_INLINE __ */ + +#include /**/ "ace/post.h" + +#endif /*ACE_HASHABLE_H*/ diff --git a/ACE/ace/Hashable.inl b/ACE/ace/Hashable.inl new file mode 100644 index 00000000000..7ec54ea1337 --- /dev/null +++ b/ACE/ace/Hashable.inl @@ -0,0 +1,14 @@ +// -*- C++ -*- +// +// $Id$ + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_Hashable::ACE_Hashable (void) + : hash_value_ (0) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/High_Res_Timer.cpp b/ACE/ace/High_Res_Timer.cpp new file mode 100644 index 00000000000..f71b7ebc7d7 --- /dev/null +++ b/ACE/ace/High_Res_Timer.cpp @@ -0,0 +1,537 @@ +// $Id$ + +// Be very carefull before changing the calculations inside +// ACE_High_Res_Timer. The precision matters and we are using integer +// calculations not floating point. Also look good at the emulated 64 +// bit int class (inside Basic_Types{h,i,cpp} before changing +// anything. It's operator/ only returns 32 bits not 64 bits, among +// other things. + +#include "ace/High_Res_Timer.h" + +#if !defined (__ACE_INLINE__) +#include "ace/High_Res_Timer.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/Stats.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_sys_time.h" +#include "ace/OS_NS_time.h" +#include "ace/OS_NS_unistd.h" +#include "ace/OS_NS_stdlib.h" +#include "ace/Truncate.h" + +ACE_RCSID(ace, High_Res_Timer, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_High_Res_Timer) + +ACE_END_VERSIONED_NAMESPACE_DECL + +// For Intel platforms, a scale factor is required for +// ACE_OS::gethrtime. We'll still set this to one to prevent division +// by zero errors. +#if (defined (ACE_WIN32) || defined (ACE_HAS_POWERPC_TIMER) || \ + defined (ACE_HAS_PENTIUM) || defined (ACE_HAS_ALPHA_TIMER)) && \ + !defined (ACE_HAS_HI_RES_TIMER) + +# include "ace/Guard_T.h" +# include "ace/Recursive_Thread_Mutex.h" +# include "ace/Object_Manager.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + + // Initialize the global_scale_factor_ to 1. The first + // ACE_High_Res_Timer instance construction will override this + // value. + /* static */ + ACE_UINT32 ACE_High_Res_Timer::global_scale_factor_ = 1u; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#else /* ! (ACE_WIN32 || ACE_HAS_POWERPC_TIMER || \ + ACE_HAS_PENTIUM || ACE_HAS_ALPHA_TIMER) || + ACE_HAS_HI_RES_TIMER */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + + // A scale_factor of 1000 converts nanosecond ticks to microseconds. + // That is, on these platforms, 1 tick == 1 nanosecond. + /* static */ + ACE_UINT32 ACE_High_Res_Timer::global_scale_factor_ = 1000u; + +ACE_END_VERSIONED_NAMESPACE_DECL +#endif /* ! (ACE_WIN32 || ACE_HAS_POWERPC_TIMER || \ + ACE_HAS_PENTIUM || ACE_HAS_ALPHA_TIMER) || + ACE_HAS_HI_RES_TIMER */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// This is used to tell if the global_scale_factor_ has been +// set, and if high resolution timers are supported. +/* static */ +int ACE_High_Res_Timer::global_scale_factor_status_ = 0; + + +#if defined (linux) +// Determine the apparent CPU clock speed from /proc/cpuinfo +ACE_UINT32 +ACE_High_Res_Timer::get_cpuinfo (void) +{ + ACE_UINT32 scale_factor = 1u; + + // Get the BogoMIPS from /proc/cpuinfo. It works fine on Alpha and + // Pentium Pro. For other CPUs, it will be necessary to interpret + // the BogoMips, as described in the BogoMips mini-HOWTO. Note that + // this code assumes an order to the /proc/cpuinfo contents. The + // BogoMips rating had better come after CPU type and model info. +#if !defined (__alpha__) + int supported = 0; +#endif /* __alpha__ */ + + FILE *cpuinfo = ACE_OS::fopen (ACE_TEXT ("/proc/cpuinfo"), + ACE_TEXT ("r")); + + if (cpuinfo != 0) + { + char buf[128]; + + // ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nReading /proc/cpuinfo..."))); + + while (ACE_OS::fgets (buf, sizeof buf, cpuinfo)) + { +#if defined (__alpha__) + ACE_UINT32 whole; + ACE_UINT32 fractional; + if (::sscanf (buf, + "BogoMIPS : %d.%d\n", + &whole, + &fractional) == 2 + || ::sscanf (buf, + "bogomips : %d.%d\n", + &whole, + &fractional) == 2) + { + scale_factor = whole; + break; + } +#else + double mhertz = 1; + double bmips = 1; + char arg[128]; + + // CPU type? + if (::sscanf (buf, "cpu : %s\n", arg) == 1) + { + // If this is an Alpha chip, then the BogoMips rating is + // usable... + if (ACE_OS::strncmp (arg, + "Alpha", + 5) == 0) + { + supported = 1; + // ACE_DEBUG ((LM_DEBUG, ACE_TEXT (" recognized Alpha chip..."))); + } + } + // Pentium CPU model? + else if (supported == 0 + && ::sscanf (buf, "model name : Pentium %s\n", arg) == 1) + { + // But if we don't have the right kind of Intel chip, + // just quit. + if (ACE_OS::strcmp (arg, "II") == 0 + || ACE_OS::strcmp (arg, "III") == 0 + || ACE_OS::strcmp (arg, "IV") == 0 + || ACE_OS::strcmp (arg, "Pro") == 0) + { + supported = 1; + // ACE_DEBUG ((LM_DEBUG, ACE_TEXT (" recognized Pentium Pro/II chip..."))); + } + } + else if (::sscanf (buf, "cpu MHz : %lf\n", &mhertz) == 1) + { + // If the line "cpu MHz : xxx" is present, then it's a + // reliable measure of the CPU speed - according to the + // kernel-source. + scale_factor = (ACE_UINT32) (mhertz + 0.5); + break; + } + else if (::sscanf (buf, "bogomips : %lf\n", &bmips) == 1 + || ::sscanf (buf, "BogoMIPS : %lf\n", &bmips) == 1) + { + if (supported) + { + scale_factor = (ACE_UINT32) (bmips + 0.5); + // ACE_DEBUG ((LM_DEBUG, ACE_TEXT (" setting the clock scale factor to %u"), scale_factor)); + } +#if 0 + else + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("\nThe BogoMIPS metric is not supported on this platform" + "\n\tReport the results of the clock calibration and" + "\n\tthe contents of /proc/cpuinfo to the ace-users mailing list"))); + } +#endif /* 0 */ + break; + } +#endif /* __alpha__ */ + } + + // ACE_DEBUG ((LM_DEBUG, ACE_TEXT (" (done)\n"))); + + ACE_OS::fclose (cpuinfo); + } + + return scale_factor; +} +#endif /* linux */ + +ACE_UINT32 +ACE_High_Res_Timer::global_scale_factor (void) +{ +#if (defined (ACE_WIN32) || defined (ACE_HAS_POWERPC_TIMER) || \ + defined (ACE_HAS_PENTIUM) || defined (ACE_HAS_ALPHA_TIMER)) && \ + !defined (ACE_HAS_HI_RES_TIMER) && \ + ((defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) || \ + defined (ghs) || defined (__GNUG__) || \ + defined (__INTEL_COMPILER)) + // Check if the global scale factor needs to be set, and do if so. + if (ACE_High_Res_Timer::global_scale_factor_status_ == 0) + { + // Grab ACE's static object lock. This doesn't have anything to + // do with static objects; it's just a convenient lock to use. + ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, + *ACE_Static_Object_Lock::instance (), 0)); + + // Double check + if (ACE_High_Res_Timer::global_scale_factor_status_ == 0) + { +# if defined (ACE_WIN32) + LARGE_INTEGER freq; + if (::QueryPerformanceFrequency (&freq)) + { + // We have a high-res timer +# if defined (ACE_LACKS_LONGLONG_T) + ACE_UINT64 uint64_freq(freq.u.LowPart, (ACE_UINT32) freq.u.HighPart); + ACE_High_Res_Timer::global_scale_factor + (uint64_freq / (ACE_UINT32) ACE_ONE_SECOND_IN_USECS); +# else + ACE_High_Res_Timer::global_scale_factor + (static_cast (freq.QuadPart / ACE_HR_SCALE_CONVERSION)); +# endif // (ACE_LACKS_LONGLONG_T) + + ACE_High_Res_Timer::global_scale_factor_status_ = 1; + } + else + // High-Res timers not supported + ACE_High_Res_Timer::global_scale_factor_status_ = -1; + + return ACE_High_Res_Timer::global_scale_factor_; + +# elif defined (linux) + ACE_High_Res_Timer::global_scale_factor (ACE_High_Res_Timer::get_cpuinfo ()); +# endif /* ! ACE_WIN32 && ! (linux && __alpha__) */ + +# if !defined (ACE_WIN32) + if (ACE_High_Res_Timer::global_scale_factor_ == 1u) + // Failed to retrieve CPU speed from system, so calculate it. + ACE_High_Res_Timer::calibrate (); +# endif // (ACE_WIN32) + } + } + + ACE_High_Res_Timer::global_scale_factor_status_ = 1; +#endif /* (ACE_WIN32 || ACE_HAS_POWERPC_TIMER || \ + ACE_HAS_PENTIUM || ACE_HAS_ALPHA_TIMER) && \ + ! ACE_HAS_HI_RES_TIMER && + ((WIN32 && ! WINCE) || ghs || __GNUG__) */ + + return ACE_High_Res_Timer::global_scale_factor_; +} + +ACE_High_Res_Timer::ACE_High_Res_Timer (void) +{ + ACE_TRACE ("ACE_High_Res_Timer::ACE_High_Res_Timer"); + + this->reset (); + + // Make sure that the global scale factor is set. + (void) global_scale_factor (); +} + +ACE_UINT32 +ACE_High_Res_Timer::calibrate (const ACE_UINT32 usec, + const u_int iterations) +{ + const ACE_Time_Value sleep_time (0, usec); + ACE_Stats delta_hrtime; + // In units of 100 usec, to avoid overflow. + ACE_Stats actual_sleeps; + + for (u_int i = 0; + i < iterations; + ++i) + { + const ACE_Time_Value actual_start = + ACE_OS::gettimeofday (); + const ACE_hrtime_t start = + ACE_OS::gethrtime (); + ACE_OS::sleep (sleep_time); + const ACE_hrtime_t stop = + ACE_OS::gethrtime (); + const ACE_Time_Value actual_delta = + ACE_OS::gettimeofday () - actual_start; + + // Store the sample. + delta_hrtime.sample (ACE_Utils::truncate_cast (stop - start)); + actual_sleeps.sample (actual_delta.msec () * 100u); + } + + // Calculate the mean value of the samples, with no fractional + // precision. Use it for the global scale factor. + ACE_Stats_Value ticks (0); + delta_hrtime.mean (ticks); + + ACE_Stats_Value actual_sleep (0); + actual_sleeps.mean (actual_sleep); + + // The addition of 5 below rounds instead of truncates. + const ACE_UINT32 scale_factor = + (ticks.whole () / actual_sleep.whole () + 5) / + 10u /* usec/100 usec */; + ACE_High_Res_Timer::global_scale_factor (scale_factor); + + return scale_factor; +} + +void +ACE_High_Res_Timer::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_High_Res_Timer::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nglobal_scale_factor_: %u\n"), + global_scale_factor ())); +#if defined (ACE_LACKS_LONGLONG_T) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT (":\nstart_.hi (): %8x; start_.lo (): %8x;\n") + ACE_TEXT ("end_.hi (): %8x; end_.lo (): %8x;\n") + ACE_TEXT ("total_.hi (): %8x; total_.lo (): %8x;\n") + ACE_TEXT ("start_incr_.hi () %8x; start_incr_.lo (): %8x;\n"), + start_.hi (), start_.lo (), + end_.hi (), end_.lo (), + total_.hi (), total_.lo (), + start_incr_.hi (), start_incr_.lo ())); +#else /* ! ACE_LACKS_LONGLONG_T */ + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT (":\nstart_.hi (): %8x; start_.lo (): %8x;\n") + ACE_TEXT ("end_.hi (): %8x; end_.lo (): %8x;\n") + ACE_TEXT ("total_.hi (): %8x; total_.lo (): %8x;\n") + ACE_TEXT ("start_incr_.hi () %8x; start_incr_.lo (): %8x;\n"), + static_cast (start_ >> 32), + static_cast (start_ & 0xfffffffful), + static_cast (end_ >> 32), + static_cast (end_ & 0xfffffffful), + static_cast (total_ >> 32), + static_cast (total_ & 0xfffffffful), + static_cast (start_incr_ >> 32), + static_cast (start_incr_ & 0xfffffffful))); +#endif /* ! ACE_LACKS_LONGLONG_T */ + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +void +ACE_High_Res_Timer::reset (void) +{ + ACE_TRACE ("ACE_High_Res_Timer::reset"); + + this->start_ = 0; + this->end_ = 0; + this->total_ = 0; + this->start_incr_ = 0; +} + +void +ACE_High_Res_Timer::elapsed_time (ACE_Time_Value &tv) const +{ + hrtime_to_tv (tv, + ACE_High_Res_Timer::elapsed_hrtime (this->end_, this->start_)); +} + +#if defined (ACE_HAS_POSIX_TIME) +// Note... Win32 does not have ACE_HAS_POSIX_TIME, so the scale factor +// does not need to take into account the different units on Win32. + +void +ACE_High_Res_Timer::elapsed_time (struct timespec &elapsed_time) const +{ + // This implementation should be cleaned up. + + // Just grab the nanoseconds. That is, leave off all values above + // microsecond. This equation is right! Don't mess with me! (It + // first strips off everything but the portion less than 1 usec. + // Then it converts that to nanoseconds by dividing by the scale + // factor to convert to usec, and multiplying by 1000.) The cast + // avoids a MSVC 4.1 compiler warning about narrowing. + ACE_hrtime_t elapsed = + ACE_High_Res_Timer::elapsed_hrtime (this->end_, this->start_); + u_long nseconds = static_cast (elapsed % + global_scale_factor () * 1000u / + global_scale_factor ()); + + // Get just the microseconds (dropping any left over nanoseconds). + ACE_UINT32 useconds = (ACE_UINT32) (elapsed / global_scale_factor ()); + + elapsed_time.tv_sec = (time_t) (useconds / ACE_ONE_SECOND_IN_USECS); + // Transforms one second in microseconds into nanoseconds. + elapsed_time.tv_nsec = (time_t) ((useconds % ACE_ONE_SECOND_IN_USECS) * 1000u + nseconds); +} +#endif /* ACE_HAS_POSIX_TIME */ + +void +ACE_High_Res_Timer::elapsed_time_incr (ACE_Time_Value &tv) const +{ + hrtime_to_tv (tv, total_); +} + +void +ACE_High_Res_Timer::elapsed_time (ACE_hrtime_t &nanoseconds) const +{ + // Please do _not_ rearrange this equation. It is carefully + // designed and tested to avoid overflow on machines that don't have + // native 64-bit ints. In particular, division can be a problem. + // For more background on this, please see bugzilla #1024. + nanoseconds = ACE_High_Res_Timer::elapsed_hrtime (this->end_, this->start_) + * (1024000u / ACE_High_Res_Timer::global_scale_factor ()); + // Caution - Borland has a problem with >>=, so resist the temptation. + nanoseconds = nanoseconds >> 10; + // Right shift is implemented for non native 64-bit ints + // operator/ only for a 32 bit result ! +} + +void +ACE_High_Res_Timer::elapsed_time_incr (ACE_hrtime_t &nanoseconds) const +{ + // Same as above. + nanoseconds = this->total_ + * (1024000u / ACE_High_Res_Timer::global_scale_factor ()); + // Caution - Borland has a problem with >>=, so resist the temptation. + nanoseconds = nanoseconds >> 10; +} + +#if !defined (ACE_HAS_WINCE) +void +ACE_High_Res_Timer::print_ave (const ACE_TCHAR *str, + const int count, + ACE_HANDLE handle) const +{ + ACE_TRACE ("ACE_High_Res_Timer::print_ave"); + + // Get the total number of nanoseconds elapsed. + ACE_hrtime_t total_nanoseconds; + this->elapsed_time (total_nanoseconds); + + // Separate to seconds and nanoseconds. + u_long total_secs = + static_cast (total_nanoseconds / (ACE_UINT32) ACE_ONE_SECOND_IN_NSECS); + ACE_UINT32 extra_nsecs = + static_cast (total_nanoseconds % (ACE_UINT32) ACE_ONE_SECOND_IN_NSECS); + + ACE_TCHAR buf[100]; + if (count > 1) + { + ACE_hrtime_t avg_nsecs = total_nanoseconds / (ACE_UINT32) count; + ACE_OS::sprintf (buf, + ACE_TEXT (" count = %d, total (secs %lu, usecs %u), avg usecs = %lu\n"), + count, + total_secs, + (extra_nsecs + 500u) / 1000u, + (u_long) ((avg_nsecs + 500u) / 1000u)); + } + else + ACE_OS::sprintf (buf, + ACE_TEXT (" total %3lu.%06lu secs\n"), + total_secs, + (extra_nsecs + 500lu) / 1000lu); + + ACE_OS::write (handle, + str, + ACE_OS::strlen (str)); + ACE_OS::write (handle, + buf, + ACE_OS::strlen (buf)); +} + +void +ACE_High_Res_Timer::print_total (const ACE_TCHAR *str, + const int count, + ACE_HANDLE handle) const +{ + ACE_TRACE ("ACE_High_Res_Timer::print_total"); + + // Get the total number of nanoseconds elapsed. + ACE_hrtime_t total_nanoseconds; + this->elapsed_time (total_nanoseconds); + + // Separate to seconds and nanoseconds. + u_long total_secs = + (u_long) (total_nanoseconds / (ACE_UINT32) ACE_ONE_SECOND_IN_NSECS); + ACE_UINT32 extra_nsecs = + (ACE_UINT32) (total_nanoseconds % (ACE_UINT32) ACE_ONE_SECOND_IN_NSECS); + + ACE_TCHAR buf[100]; + if (count > 1) + { + ACE_hrtime_t avg_nsecs = this->total_ / (ACE_UINT32) count; + + ACE_OS::sprintf (buf, + ACE_TEXT (" count = %d, total (secs %lu, usecs %u), avg usecs = %lu\n"), + count, + total_secs, + (extra_nsecs + 500u) / 1000u, + (u_long) ((avg_nsecs + 500u) / 1000u)); + } + else + ACE_OS::sprintf (buf, + ACE_TEXT (" total %3lu.%06u secs\n"), + total_secs, + (extra_nsecs + 500u) / 1000u); + + ACE_OS::write (handle, + str, + ACE_OS::strlen (str)); + ACE_OS::write (handle, + buf, + ACE_OS::strlen (buf)); +} +#endif /* !ACE_HAS_WINCE */ + +int +ACE_High_Res_Timer::get_env_global_scale_factor (const ACE_TCHAR *env) +{ +#if !defined (ACE_HAS_WINCE) + if (env != 0) + { + const char *env_value = ACE_OS::getenv (ACE_TEXT_ALWAYS_CHAR (env)); + if (env_value != 0) + { + int const value = ACE_OS::atoi (env_value); + if (value > 0) + { + ACE_High_Res_Timer::global_scale_factor (value); + return 0; + } + } + } +#else + ACE_UNUSED_ARG (env); +#endif /* !ACE_HAS_WINCE */ + return -1; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/High_Res_Timer.h b/ACE/ace/High_Res_Timer.h new file mode 100644 index 00000000000..249d38078b9 --- /dev/null +++ b/ACE/ace/High_Res_Timer.h @@ -0,0 +1,315 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file High_Res_Timer.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//========================================================================== + +#ifndef ACE_HIGH_RES_TIMER_H +#define ACE_HIGH_RES_TIMER_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Basic_Types.h" +#include "ace/OS_NS_time.h" +#include "ace/Time_Value.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_High_Res_Timer + * + * @brief A high resolution timer class wrapper that encapsulates + * OS-specific high-resolution timers, such as those found on + * Solaris, AIX, Win32/Pentium, and VxWorks. + * + * Most of the member functions don't return values. The only + * reason that one would fail is if high-resolution time isn't + * supported on the platform. To avoid impacting performance + * and complicating the interface, in that case, + * is used instead. + * The global scale factor is required for platforms that have + * high-resolution timers that return units other than + * microseconds, such as clock ticks. It is represented as a + * static u_long, can only be accessed through static methods, + * and is used by all instances of High Res Timer. The member + * functions that return or print times use the global scale + * factor. They divide the "time" that they get from + * by global_scale_factor_ to obtain the + * time in microseconds. Its units are therefore 1/microsecond. + * On Windows the global_scale_factor_ units are 1/millisecond. + * There's a macro which gives the + * units/second. Because it's possible that the units/second + * changes in the future, it's recommended to use it instead + * of a "hard coded" solution. + * Dependend on the platform and used class members, there's a + * maximum elapsed period before overflow (which is not checked). + * Look at the documentation with some members functions. + * On some (most?) implementations it's not recommended to measure + * "long" timeperiods, because the error's can accumulate fast. + * This is probably not a problem profiling code, but could be + * on if the high resolution timer class is used to initiate + * actions after a "long" timeout. + * On Solaris, a scale factor of 1000 should be used because its + * high-resolution timer returns nanoseconds. However, on Intel + * platforms, we use RDTSC which returns the number of clock + * ticks since system boot. For a 200MHz cpu, each clock tick + * is 1/200 of a microsecond; the global_scale_factor_ should + * therefore be 200 or 200000 if it's in unit/millisecond. + * On Windows ::QueryPerformanceCounter() is used, which can be a + * different implementation depending on the used windows HAL + * (Hardware Abstraction Layer). On some it uses the PC "timer chip" + * while it uses RDTSC on others. + * @note The elapsed time calculations in the print methods use + * ACE_hrtime_t values. Those methods do _not_ check for overflow! + * @note Gabe raises this issue regarding + * : on multi-processors, the processor that + * you query for your value might not be the one + * you queried for . Its not clear how much + * divergence there would be, if any. + * This issue is not mentioned in the Solaris 2.5.1 gethrtime + * man page. + * A RDTSC NOTE: RDTSC is the Intel Pentium read-time stamp counter + * and is actualy a 64 bit clock cycle counter, which is increased + * with every cycle. It has a low overhead and can be read within + * 16 (pentium) or 32 (pentium II,III,...) cycles, but it doesn't + * serialize the processor, which could give wrong timings when + * profiling very short code fragments. + * Problematic is that some power sensitive devices + * (laptops for example, but probably also embedded devices), + * do change the cycle rate while running. + * Some pentiums can run on (at least) two clock frequency's. + * Another problem arises with multiprocessor computers, there + * are reports that the different RDTSC's are not always kept + * in sync. + * A windows "timer chip" NOTE: (8254-compatible real-time clock) + * When ::QueryPerformanceCounter() uses the 8254 it has a + * frequency off about 1.193 Mhz (or sometimes 3.579 Mhz?) and + * reading it requires some time (several thousand cycles). + */ +class ACE_Export ACE_High_Res_Timer +{ +public: + // = Initialization method. + + /** + * global_scale_factor_ is set to @a gsf. All High_Res_Timers use + * global_scale_factor_. This allows applications to set the scale + * factor just once for all High_Res_Timers. Check + * High_Res_Timer.cpp for the default global_scale_factors for + * several platforms. For many platforms (e.g., Solaris), the + * global_scale_factor_ is set to 1000 so that need + * not be set. Careful, a of 0 will cause division + * by zero exceptions. + * Depending on the platform its units are 1/microsecond or + * 1/millisecond. Use inside calculations + * instead a hardcoded value. + */ + static void global_scale_factor (ACE_UINT32 gsf); + + /// Returns the global_scale_factor. + static ACE_UINT32 global_scale_factor (void); + +#ifndef ACE_HR_SCALE_CONVERSION +# define ACE_HR_SCALE_CONVERSION (ACE_ONE_SECOND_IN_USECS) +#endif /* ACE_HR_SCALE_CONVERSION */ + + /** + * Sets the global_scale_factor to the value in the + * environment variable. Returns 0 on success, -1 on failure. + * @note If @a env points to string "0" (value zero), this call will fail. + * This is basically a no-op on CE because there is no concept of + * environment variable on CE. + */ + static int get_env_global_scale_factor (const ACE_TCHAR *env + = ACE_TEXT ("ACE_SCALE_FACTOR")); + + /** + * Set (and return, for info) the global scale factor by sleeping + * for @a usec and counting the number of intervening clock cycles. + * Average over @a iterations of @a usec each. On some platforms, + * such as Pentiums, this is called automatically during the first + * ACE_High_Res_Timer construction with the default parameter + * values. An application can override that by calling calibrate + * with any desired parameter values _prior_ to constructing the + * first ACE_High_Res_Timer instance. + * Beware for platforms that can change the cycle rate on the fly. + */ + static ACE_UINT32 calibrate (const ACE_UINT32 usec = 500000, + const u_int iterations = 10); + + /// Initialize the timer. + ACE_High_Res_Timer (void); + + /// Destructor. + ~ACE_High_Res_Timer (void); + + /// Reinitialize the timer. + void reset (void); + + /// Start timing. + void start (const ACE_OS::ACE_HRTimer_Op = ACE_OS::ACE_HRTIMER_GETTIME); + + /// Stop timing. + void stop (const ACE_OS::ACE_HRTimer_Op = ACE_OS::ACE_HRTIMER_GETTIME); + + /// Set @a tv to the number of microseconds elapsed. + /** + * Could overflow within hours on windows with emulated 64 bit int's + * and a fast counter. VC++ and Borland normaly use __int64 and + * so normaly don't have this problem. + */ + void elapsed_time (ACE_Time_Value &tv) const; + + /// Set @a nanoseconds to the number of nanoseconds elapsed. + /** + * Will overflow when measuring more than 194 day's. + */ + void elapsed_time (ACE_hrtime_t &nanoseconds) const; + +#if defined (ACE_HAS_POSIX_TIME) + /// Returns the elapsed (stop - start) time in a struct timespec + /// (sec, nsec). + void elapsed_time (struct timespec &) const; +#endif /* ACE_HAS_POSIX_TIME */ + + /// Sets @a usecs to the elapsed (stop - start) time in microseconds. + /** + * Will overflow on windows when measuring more than appox. 2^^54 ticks. + * Is still more than 48 days with a 4 Ghz counter. + */ + void elapsed_microseconds (ACE_hrtime_t &usecs) const; + + /// Start incremental timing. + void start_incr (const ACE_OS::ACE_HRTimer_Op = ACE_OS::ACE_HRTIMER_GETTIME); + + /// Stop incremental timing. + void stop_incr (const ACE_OS::ACE_HRTimer_Op = ACE_OS::ACE_HRTIMER_GETTIME); + + /// Set @a tv to the number of microseconds elapsed between all calls + /// to start_incr and stop_incr. + void elapsed_time_incr (ACE_Time_Value &tv) const; + + /// Set to the number of nanoseconds elapsed between all calls + /// to start_incr and stop_incr. + void elapsed_time_incr (ACE_hrtime_t &nanoseconds) const; + +#if !defined (ACE_HAS_WINCE) + // @@ WINCE These two functions are currently not supported on Windows CE. + // However, we should probably use the handle and ACE_Log_Msg to + // print out the result. + /// Print total time. + /// @note only use if incremental timings had been used! + void print_total (const ACE_TCHAR *message, + const int iterations = 1, + ACE_HANDLE handle = ACE_STDOUT) const; + + /// Print average time. + void print_ave (const ACE_TCHAR *message, + const int iterations = 1, + ACE_HANDLE handle = ACE_STDOUT) const; +#endif /* !ACE_HAS_WINCE */ + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + + /** + * Get the current "time" as the high resolution counter at this time. + * This is intended to be useful for supplying to a ACE_Timer_Queue + * as the gettimeofday function, thereby basing the timer calculations + * on the high res timer rather than wall clock time. + */ + static ACE_Time_Value gettimeofday_hr (void); + + /** + * @deprecated THIS FUNCTION IS DEPRECATED. PLEASE USE + * INSTEAD! Calls + * passing . This function can be used to parameterize + * objects such as . If + * is not set, and we're on a platform that + * requires (e.g., Win32), + * ACE_OS::gettimeofday will be used instead of . + * This allows applications on Intel to use even + * when is not set. However, setting the + * appropriately will result in the finest + * resolution possible. + */ + static ACE_Time_Value gettimeofday (const ACE_OS::ACE_HRTimer_Op = + ACE_OS::ACE_HRTIMER_GETTIME); + + /// Converts an to @a tv using global_scale_factor_. + static void hrtime_to_tv (ACE_Time_Value &tv, + const ACE_hrtime_t hrt); + +#if defined (linux) + /** + * This is used to find out the Mhz of the machine for the scale + * factor. If there are any problems getting it, we just return 1 + * (the default). + */ + static ACE_UINT32 get_cpuinfo (void); +#endif /* defined (linux) */ + +private: + /** + * For internal use: gets the high-resolution time using + * . Except on platforms that require that the + * be set, such as ACE_WIN32, uses the + * low-resolution clock if the has not been + * set. + */ + static ACE_hrtime_t gettime (const ACE_OS::ACE_HRTimer_Op = + ACE_OS::ACE_HRTIMER_GETTIME); + + /// Calculate the difference between two ACE_hrtime_t values. It is assumed + /// that the end time is later than start time, so if end is a smaller + /// value, the time counter has wrapped around. + static ACE_hrtime_t elapsed_hrtime (const ACE_hrtime_t end, + const ACE_hrtime_t start); + + /// Starting time. + ACE_hrtime_t start_; + + /// Ending time. + ACE_hrtime_t end_; + + /// Total elapsed time. + ACE_hrtime_t total_; + + /// Start time of incremental timing. + ACE_hrtime_t start_incr_; + + /// Converts ticks to microseconds. That is, ticks / + /// global_scale_factor_ == microseconds. + static ACE_UINT32 global_scale_factor_; + + /** + * Indicates the status of the global scale factor, + * 0 = hasn't been set + * 1 = been set + * -1 = HR timer not supported + */ + static int global_scale_factor_status_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/High_Res_Timer.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_HIGH_RES_TIMER_H */ diff --git a/ACE/ace/High_Res_Timer.inl b/ACE/ace/High_Res_Timer.inl new file mode 100644 index 00000000000..2d089d1520c --- /dev/null +++ b/ACE/ace/High_Res_Timer.inl @@ -0,0 +1,154 @@ +// -*- C++ -*- */ +// +// $Id$ + +#include "ace/Global_Macros.h" + +#if defined (ACE_WIN32) +# include "ace/OS_NS_sys_time.h" +#endif /* ACE_WIN32 */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Be very careful before changing the calculations inside +// ACE_High_Res_Timer. The precision matters and we are using integer +// calculations not floating point. Also look closely at the emulated 64 +// bit int class (inside Basic_Types{h,i,cpp} before changing +// anything. It's operator/ only returns 32 bits not 64 bits, among +// other things. + +ACE_INLINE void +ACE_High_Res_Timer::hrtime_to_tv (ACE_Time_Value &tv, + const ACE_hrtime_t hrt) +{ + // The following are based on the units of global_scale_factor_ + // being 1/microsecond. Therefore, dividing by it converts + // clock ticks to microseconds. + tv.sec ((long) (hrt / (ACE_UINT32) ACE_HR_SCALE_CONVERSION / + global_scale_factor ())); + + // Calculate usec in a manner that's compatible with ACE_U_LongLong. + // hrt = (tv.sec * ACE_ONE_SECOND_IN_USECS + tv.usec) * global_scale_factor_ + // tv.usec = hrt / global_scale_factor_ - tv.sec * ACE_ONE_SECOND_IN_USECS + // That first term will be lossy, so factor out global_scale_factor_: + // tv.usec = (hrt - tv.sec * ACE_ONE_SECOND_IN_USECS * global_scale_factor_)/ + // global_scale_factor + ACE_hrtime_t tmp = tv.sec (); + tmp *= ((ACE_UINT32) ACE_HR_SCALE_CONVERSION * global_scale_factor ()); + tv.usec ((long) ((hrt - tmp) / global_scale_factor ())); +} + + +ACE_INLINE ACE_Time_Value +ACE_High_Res_Timer::gettimeofday (const ACE_OS::ACE_HRTimer_Op op) +{ +#if defined (ACE_WIN32) + // Get the global scale factor if there isn't one yet. + if (ACE_High_Res_Timer::global_scale_factor_status_ == 0) + ACE_High_Res_Timer::global_scale_factor (); + + // If there isn't a high-res timer, use gettimeofday (); + if (ACE_High_Res_Timer::global_scale_factor_status_ == -1) + return ACE_OS::gettimeofday (); +#endif /* ACE_WIN32 */ + + ACE_Time_Value tv; + ACE_High_Res_Timer::hrtime_to_tv (tv, + ACE_OS::gethrtime (op)); + return tv; +} + + +// Get the current high res timer as the time of day. This is intended +// to be used for a gettimeofday replacement in ACE_Timer_Queue and +// derived classes so the timers will bebased on high res timers rather +// than wall clock time. It uses the ACE_High_Res_Timer::gettimeofday +// function, which is deprecated. If it gets removed, please move the +// code down here, intact. +ACE_INLINE ACE_Time_Value +ACE_High_Res_Timer::gettimeofday_hr (void) +{ + return ACE_High_Res_Timer::gettimeofday (); +} + + +ACE_INLINE ACE_hrtime_t +ACE_High_Res_Timer::gettime (const ACE_OS::ACE_HRTimer_Op op) +{ +#if defined (ACE_WIN32) + // Get the global scale factor if there isn't one yet. + if (ACE_High_Res_Timer::global_scale_factor_status_ == 0) + ACE_High_Res_Timer::global_scale_factor (); + + // If there isn't a high-res timer, use gettimeofday (); + if (ACE_High_Res_Timer::global_scale_factor_status_ == -1) + { + ACE_Time_Value tv = ACE_OS::gettimeofday (); + // Return the time in microseconds because the global_scale_factor_ + // is 1. + return tv.sec () * ACE_ONE_SECOND_IN_USECS + tv.usec (); + } +#endif /* ACE_WIN32 */ + + return ACE_OS::gethrtime (op); +} + +ACE_INLINE ACE_hrtime_t +ACE_High_Res_Timer::elapsed_hrtime (const ACE_hrtime_t end, + const ACE_hrtime_t start) +{ + if (end > start) + return end - start; + return (~start + 1 + end); // Wrapped-around counter diff +} + +ACE_INLINE +ACE_High_Res_Timer::~ACE_High_Res_Timer (void) +{ +} + +ACE_INLINE void +ACE_High_Res_Timer::start (const ACE_OS::ACE_HRTimer_Op op) +{ + ACE_TRACE ("ACE_High_Res_Timer::start"); + this->start_ = ACE_High_Res_Timer::gettime (op); +} + +ACE_INLINE void +ACE_High_Res_Timer::stop (const ACE_OS::ACE_HRTimer_Op op) +{ + ACE_TRACE ("ACE_High_Res_Timer::stop"); + this->end_ = ACE_High_Res_Timer::gettime (op); +} + +ACE_INLINE void +ACE_High_Res_Timer::start_incr (const ACE_OS::ACE_HRTimer_Op op) +{ + ACE_TRACE ("ACE_High_Res_Timer::start_incr"); + this->start_incr_ = ACE_High_Res_Timer::gettime (op); +} + +ACE_INLINE void +ACE_High_Res_Timer::stop_incr (const ACE_OS::ACE_HRTimer_Op op) +{ + ACE_TRACE ("ACE_High_Res_Timer::stop_incr"); + this->total_ += + ACE_High_Res_Timer::elapsed_hrtime (ACE_High_Res_Timer::gettime (op), + this->start_incr_); +} + +ACE_INLINE void +ACE_High_Res_Timer::elapsed_microseconds (ACE_hrtime_t &usecs) const +{ + ACE_hrtime_t elapsed = ACE_High_Res_Timer::elapsed_hrtime (this->end_, + this->start_); + usecs = (ACE_hrtime_t) (elapsed / global_scale_factor ()); +} + +ACE_INLINE void +ACE_High_Res_Timer::global_scale_factor (ACE_UINT32 gsf) +{ + global_scale_factor_ = gsf; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/ICMP_Socket.cpp b/ACE/ace/ICMP_Socket.cpp new file mode 100644 index 00000000000..d3d07c80f36 --- /dev/null +++ b/ACE/ace/ICMP_Socket.cpp @@ -0,0 +1,186 @@ +// $Id$ + +#include "ace/ICMP_Socket.h" + +#if defined (ACE_HAS_ICMP_SUPPORT) && (ACE_HAS_ICMP_SUPPORT == 1) + +#include "ace/ACE.h" +#include "ace/Log_Msg.h" +#include "ace/OS_NS_netdb.h" +#include "ace/OS_NS_sys_socket.h" + + +ACE_RCSID (ace, + ICMP_Socket, + "$Id$") + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE (ACE_ICMP_Socket) + + +void +ACE_ICMP_Socket::dump (void) const +{ + ACE_TRACE ("ACE_ICMP_Socket::dump"); +} + +ACE_ICMP_Socket::ACE_ICMP_Socket (void) +{ + ACE_TRACE ("ACE_ICMP_Socket::ACE_ICMP_Socket"); +} + +ssize_t +ACE_ICMP_Socket::send (void const * buf, + size_t n, + ACE_Addr const & addr, + int flags) const +{ + ACE_TRACE ("ACE_ICMP_Socket::send"); + + return ACE_OS::sendto (this->get_handle (), + (char const *) buf, + n, + flags, + (sockaddr const *) addr.get_addr (), + addr.get_size ()); +} + +ssize_t +ACE_ICMP_Socket::recv (void * buf, + size_t n, + ACE_Addr & addr, + int flags) const +{ + ACE_TRACE ("ACE_ICMP_Socket::recv"); + + int addr_len = addr.get_size (); + ssize_t status = ACE_OS::recvfrom (this->get_handle (), + (char *) buf, + n, + flags, + (sockaddr *) addr.get_addr (), + (int*) &addr_len); + addr.set_size (addr_len); + + return status; +} + +ssize_t +ACE_ICMP_Socket::recv (void * buf, + size_t n, + int flags, + ACE_Time_Value const * timeout) const +{ + ACE_TRACE ("ACE_ICMP_Socket::recv"); + + return ACE::recv (this->get_handle (), + buf, + n, + flags, + timeout); +} + +int +ACE_ICMP_Socket::open (ACE_Addr const & local, + int protocol, + int reuse_addr) +{ + ACE_TRACE ("ACE_ICMP_Socket::open"); + + // Check if icmp protocol is supported on this host + int proto_number = -1; + protoent *proto; + + if (! (proto = getprotobyname ("icmp"))) + { + ACE_ERROR_RETURN + ((LM_ERROR, + ACE_TEXT ("(%P|%t) ACE_ICMP_Socket::open: %p; %s\n"), + ACE_TEXT ("getprotobyname"), + ACE_TEXT ("ICMP protocol is not properly configured ") + ACE_TEXT ("or not supported.")), + -1); + } + proto_number = proto->p_proto; + + if (proto_number != IPPROTO_ICMP || proto_number != protocol) + { + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("(%P|%t) ACE::ICMP_Socket::open - ") + ACE_TEXT ("only IPPROTO_ICMP protocol is ") + ACE_TEXT ("currently supported.\n")), + -1); + } + + if (ACE_SOCK::open (SOCK_RAW, + AF_INET, + protocol, + reuse_addr) == -1) + { + return -1; + } + + return this->shared_open (local); +} + +int +ACE_ICMP_Socket::shared_open (ACE_Addr const & local) +{ + ACE_TRACE ("ACE_ICMP_Socket::shared_open"); + + int error = 0; + if (local == ACE_Addr::sap_any) + { + if (ACE::bind_port (this->get_handle ()) == -1) + { + error = 1; + } + } + else if (ACE_OS::bind (this->get_handle (), + reinterpret_cast (local.get_addr ()), + local.get_size ()) == -1) + { + error = 1; + } + + if (error != 0) + { + this->close (); + } + + return error ? -1 : 0; +} + +unsigned short +ACE_ICMP_Socket::calculate_checksum (unsigned short * paddress, + int len) +{ + int nleft = len; + int sum = 0; + unsigned short * w = paddress; + unsigned short answer = 0; + while (nleft > 1) + { + sum += *w++; + nleft -= 2; + } + + if (nleft == 1) + { + *((unsigned char *) &answer) = *((unsigned char *) w); + sum += answer; + } + + // add back carry outs from top 16 bits to low 16 bits + sum = (sum >> 16) + (sum & 0xffff); // add hi 16 to low 16 + sum += (sum >> 16); // add carry + answer = ~sum; // truncate to 16 bits + + return (answer); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_ICMP_SUPPORT == 1 */ diff --git a/ACE/ace/ICMP_Socket.h b/ACE/ace/ICMP_Socket.h new file mode 100644 index 00000000000..104ca3ccbc3 --- /dev/null +++ b/ACE/ace/ICMP_Socket.h @@ -0,0 +1,110 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file ICMP_Socket.h + * + * $Id$ + * + * @author Robert S. Iakobashvili + * @author Gonzalo A. Diethelm + */ +//============================================================================= + +#ifndef ACE_ICMP_SOCKET_H +#define ACE_ICMP_SOCKET_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_ICMP_SUPPORT) && (ACE_HAS_ICMP_SUPPORT == 1) + +#include "ace/SOCK.h" +#include "ace/Time_Value.h" +#include "ace/os_include/netinet/os_in.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_ICMP_Socket + * + * @brief An abstract class that forms the basis for usage of the ICMP + * protocol (that is, support for things such as ping). + */ +class ACE_Export ACE_ICMP_Socket : public ACE_SOCK +{ +public: + // = Initialization methods. + + /** + * @name Data transfer routines. + * + * Data transfer routines. + */ + //@{ + + /// Send an @a n byte @a buf to the datagram socket (uses + /// @c sendto(3) ). + ssize_t send (void const * buf, + size_t n, + ACE_Addr const & addr, + int flags = 0) const; + + /// Receive an @a n byte @a buf from the datagram socket + /// (uses @c recvfrom(3) ). + ssize_t recv (void * buf, + size_t n, + ACE_Addr & addr, + int flags = 0) const; + + /// TODO: comment + ssize_t recv (void * buf, + size_t n, + int flags, + ACE_Time_Value const * timeout) const; + + //@} + + /// Wrapper around the BSD-style @c socket system call (no QoS). + int open (ACE_Addr const & local = ACE_Addr::sap_any, + int protocol = IPPROTO_ICMP, + int reuse_addr = 0); + + /// Dump the state of object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + + // Protected constructors, so the class can only be derived from. + + /// Default constructor. + ACE_ICMP_Socket (void); + + /// Constructor that takes a local listening address. + ACE_ICMP_Socket (ACE_Addr const & local, + int protocol = IPPROTO_ICMP, + int reuse_addr = 0); + + /// Wrapper around BSD-style @c bind system call. + int shared_open (ACE_Addr const & local); + + /// Calculates check-sum. + unsigned short calculate_checksum (unsigned short* paddress, + int len); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_ICMP_SUPPORT == 1 */ + +#include /**/ "ace/post.h" + +#endif /* ACE_ICMP_SOCKET_H */ diff --git a/ACE/ace/INET_Addr.cpp b/ACE/ace/INET_Addr.cpp new file mode 100644 index 00000000000..76c64ce8b74 --- /dev/null +++ b/ACE/ace/INET_Addr.cpp @@ -0,0 +1,1168 @@ +// $Id$ + +// Defines the Internet domain address family address format. + +#include "ace/INET_Addr.h" + +#if !defined (__ACE_INLINE__) +#include "ace/INET_Addr.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/Log_Msg.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_errno.h" +#include "ace/OS_NS_stdlib.h" +#include "ace/OS_Memory.h" +#include "ace/OS_NS_arpa_inet.h" +#include "ace/OS_NS_netdb.h" +#include "ace/OS_NS_unistd.h" +#include "ace/OS_NS_sys_socket.h" + +ACE_RCSID (ace, + INET_Addr, + "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_INET_Addr) + +// Transform the current address into string format. + +int +ACE_INET_Addr::addr_to_string (ACE_TCHAR s[], + size_t size, + int ipaddr_format) const +{ + ACE_TRACE ("ACE_INET_Addr::addr_to_string"); + + // XXX Can we (should we) include the scope id for IPv6 addresses? + char hoststr[MAXHOSTNAMELEN+1]; + + bool result = false; + if (ipaddr_format == 0) + result = (this->get_host_name (hoststr, MAXHOSTNAMELEN+1) == 0); + else + result = (this->get_host_addr (hoststr, MAXHOSTNAMELEN+1) != 0); + + if (!result) + return -1; + + size_t total_len = + ACE_OS::strlen (hoststr) + + 5 // ACE_OS::strlen ("65535"), Assuming the max port number. + + 1 // sizeof (':'), addr/port sep + + 1; // sizeof ('\0'), terminating NUL +#if !defined (ACE_WIN32) && defined (ACE_USES_WCHAR) + ACE_TCHAR const *format = ACE_TEXT("%ls:%d"); +#else + ACE_TCHAR const *format = ACE_TEXT("%s:%d"); +#endif /* !ACE_WIN32 && ACE_USES_WCHAR */ +#if defined (ACE_HAS_IPV6) + if (ACE_OS::strchr (hoststr, ACE_TEXT (':')) != 0) + { + total_len += 2; // ACE_OS::strlen ("[]") IPv6 addr frames +# if !defined (ACE_WIN32) && defined (ACE_USES_WCHAR) + format = ACE_TEXT("[%ls]:%d"); +# else + format = ACE_TEXT("[%s]:%d"); +# endif /* !ACE_WIN32 && ACE_USES_WCHAR */ + } +#endif // ACE_HAS_IPV6 + + if (size < total_len) + return -1; + else + ACE_OS::sprintf (s, format, + ACE_TEXT_CHAR_TO_TCHAR (hoststr), + this->get_port_number ()); + return 0; +} + +void +ACE_INET_Addr::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_INET_Addr::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + + ACE_TCHAR s[ACE_MAX_FULLY_QUALIFIED_NAME_LEN + 16]; + this->addr_to_string(s, ACE_MAX_FULLY_QUALIFIED_NAME_LEN + 16); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%s"), s)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +// Compare two addresses for inequality. + +bool +ACE_INET_Addr::operator != (const ACE_INET_Addr &sap) const +{ + ACE_TRACE ("ACE_INET_Addr::operator !="); + return !((*this) == sap); +} + +// Compare two addresses for equality. + +bool +ACE_INET_Addr::operator == (const ACE_INET_Addr &sap) const +{ + ACE_TRACE ("ACE_INET_Addr::operator =="); + + if (this->get_type () != sap.get_type () + || this->get_size () != sap.get_size ()) + return false; + + return (ACE_OS::memcmp (&this->inet_addr_, + &sap.inet_addr_, + this->get_size ()) == 0); +} + +bool +ACE_INET_Addr::is_ip_equal (const ACE_INET_Addr &sap) const +{ + if (this->get_type () != sap.get_type () + || this->get_size () != sap.get_size ()) + return false; + +#if defined (ACE_HAS_IPV6) + if (this->get_type () == PF_INET6) + { + const unsigned int *addr = + reinterpret_cast(this->ip_addr_pointer()); + const unsigned int *saddr = + reinterpret_cast(sap.ip_addr_pointer()); + return (addr[0] == saddr[0] && + addr[1] == saddr[1] && + addr[2] == saddr[2] && + addr[3] == saddr[3]); + } + else +#endif /* ACE_HAS_IPV6 */ + return this->get_ip_address () == sap.get_ip_address(); +} + + +u_long +ACE_INET_Addr::hash (void) const +{ +#if defined (ACE_HAS_IPV6) + if (this->get_type () == PF_INET6) + { + const unsigned int *addr = (const unsigned int*)this->ip_addr_pointer(); + return addr[0] + addr[1] + addr[2] + addr[3] + this->get_port_number(); + } + else +#endif /* ACE_HAS_IPV6 */ + return this->get_ip_address () + this->get_port_number (); +} + +ACE_INET_Addr::ACE_INET_Addr (void) + : ACE_Addr (determine_type (), sizeof (inet_addr_)) +{ + // ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); + this->reset (); +} + +int +ACE_INET_Addr::set (const ACE_INET_Addr &sa) +{ + ACE_TRACE ("ACE_INET_Addr::set"); + + if (sa.get_type () == AF_ANY) + // Ugh, this is really a base class, so don't copy it. + ACE_OS::memset (&this->inet_addr_, 0, sizeof (this->inet_addr_)); + else + { + // It's ok to make the copy. + ACE_OS::memcpy (&this->inet_addr_, + &sa.inet_addr_, + sa.get_size ()); + + this->set_type (sa.get_type()); + this->set_size (sa.get_size()); + } + + return 0; +} + +// Transform the string into the current addressing format. + +int +ACE_INET_Addr::string_to_addr (const char s[], int address_family) +{ + ACE_TRACE ("ACE_INET_Addr::string_to_addr"); + int result; + char *ip_buf = 0; + char *ip_addr = 0; + + // Need to make a duplicate since we'll be overwriting the string. + ACE_ALLOCATOR_RETURN (ip_buf, + ACE_OS::strdup (s), + -1); + ip_addr = ip_buf; + // We use strrchr because of IPv6 addresses. + char *port_p = ACE_OS::strrchr (ip_addr, ':'); +#if defined (ACE_HAS_IPV6) + // Check for extended IPv6 format : '[' ']' ':' + if (ip_addr[0] == '[') + { + // find closing bracket + char *cp_pos = ACE_OS::strchr (ip_addr, ']'); + // check for port separator after closing bracket + // if not found leave it, error will come later + if (cp_pos) + { + *cp_pos = '\0'; // blank out ']' + ++ip_addr; // skip over '[' + if (cp_pos[1] == ':') + port_p = cp_pos + 1; + else + port_p = cp_pos; // leads to error on missing port + } + } +#endif /* ACE_HAS_IPV6 */ + + if (port_p == 0) // Assume it's a port number. + { + char *endp = 0; + u_short port = + static_cast (ACE_OS::strtol (ip_addr, &endp, 10)); + if (*endp == '\0') // strtol scanned the entire string - all digits + result = this->set (port, ACE_UINT32 (INADDR_ANY)); + else // port name + result = this->set (ip_addr, ACE_UINT32 (INADDR_ANY)); + } + else + { + *port_p = '\0'; ++port_p; // skip over ':' + + char *endp = 0; + u_short port = static_cast (ACE_OS::strtol (port_p, &endp, 10)); + if (*endp == '\0') // strtol scanned the entire string - all digits + result = this->set (port, ip_addr, 1, address_family); + else + result = this->set (port_p, ip_addr); + } + + ACE_OS::free (ACE_MALLOC_T (ip_buf)); + return result; +} + +int +ACE_INET_Addr::set (const char address[], int address_family) +{ + ACE_TRACE ("ACE_INET_Addr::set"); + return this->string_to_addr (address, address_family); +} + +ACE_INET_Addr::ACE_INET_Addr (const char address[], int address_family) + : ACE_Addr (determine_type (), sizeof (inet_addr_)) +{ + ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); + this->reset (); + this->set (address, address_family); +} + +#if defined (ACE_HAS_WCHAR) +ACE_INET_Addr::ACE_INET_Addr (const wchar_t address[], int address_family) + : ACE_Addr (determine_type (), sizeof (inet_addr_)) +{ + ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); + this->reset (); + this->set (address, address_family); +} + +#endif /* ACE_HAS_WCHAR */ + +// Copy constructor. + +ACE_INET_Addr::ACE_INET_Addr (const ACE_INET_Addr &sa) + : ACE_Addr (sa.get_type (), sa.get_size()) +{ + ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); + this->reset (); + this->set (sa); +} + +// Initializes a ACE_INET_Addr from a PORT_NUMBER and a 32 bit Internet +// address. + +int +ACE_INET_Addr::set (u_short port_number, + ACE_UINT32 inet_address, + int encode, + int map) +{ + ACE_TRACE ("ACE_INET_Addr::set"); + this->set_address (reinterpret_cast (&inet_address), + sizeof inet_address, + encode, map); + this->set_port_number (port_number, encode); + + return 0; +} + + +// Initializes a ACE_INET_Addr from a PORT_NUMBER and the remote +// HOST_NAME. + +int +ACE_INET_Addr::set (u_short port_number, + const char host_name[], + int encode, + int address_family) +{ + ACE_TRACE ("ACE_INET_Addr::set"); + + // Yow, someone gave us a NULL host_name! + if (host_name == 0) + { + errno = EINVAL; + return -1; + } + + ACE_OS::memset ((void *) &this->inet_addr_, + 0, + sizeof this->inet_addr_); + +#if defined (ACE_HAS_IPV6) + struct addrinfo hints; + struct addrinfo *res = 0; + int error = 0; + ACE_OS::memset (&hints, 0, sizeof (hints)); +# if defined (ACE_USES_IPV4_IPV6_MIGRATION) + if (address_family == AF_UNSPEC && !ACE::ipv6_enabled()) + address_family = AF_INET; +# endif /* ACE_USES_IPV4_IPV6_MIGRATION */ + if (address_family == AF_UNSPEC || address_family == AF_INET6) + { + hints.ai_family = AF_INET6; + error = ::getaddrinfo (host_name, 0, &hints, &res); + if (error) + { + if (address_family == AF_INET6) + { + if (res) + ::freeaddrinfo(res); + errno = error; + return -1; + } + address_family = AF_INET; + } + } + if (address_family == AF_INET) + { + hints.ai_family = AF_INET; + error = ::getaddrinfo (host_name, 0, &hints, &res); + if (error) + { + if (res) + ::freeaddrinfo(res); + errno = error; + return -1; + } + } + this->set_type (res->ai_family); + this->set_addr (res->ai_addr, res->ai_addrlen); + this->set_port_number (port_number, encode); + ::freeaddrinfo (res); + return 0; +#else /* ACE_HAS_IPV6 */ + + // IPv6 not supported... insure the family is set to IPv4 + address_family = AF_INET; + this->set_type (address_family); + this->inet_addr_.in4_.sin_family = static_cast (address_family); +#ifdef ACE_HAS_SOCKADDR_IN_SIN_LEN + this->inet_addr_.in4_.sin_len = sizeof (this->inet_addr_.in4_); +#endif + struct in_addr addrv4; + if (ACE_OS::inet_aton (host_name, + &addrv4) == 1) + return this->set (port_number, + encode ? ACE_NTOHL (addrv4.s_addr) : addrv4.s_addr, + encode); + else + { +# if defined (ACE_VXWORKS) && defined (ACE_LACKS_GETHOSTBYNAME) + hostent *hp = ACE_OS::gethostbyname (host_name); +# else + hostent hentry; + ACE_HOSTENT_DATA buf; + int h_error; // Not the same as errno! + + hostent *hp = ACE_OS::gethostbyname_r (host_name, &hentry, + buf, &h_error); + if (hp == 0) + errno = h_error; +# endif /* ACE_VXWORKS */ + + if (hp == 0) + { + return -1; + } + else + { + (void) ACE_OS::memcpy ((void *) &addrv4.s_addr, + hp->h_addr, + hp->h_length); + return this->set (port_number, + encode ? ACE_NTOHL (addrv4.s_addr) : addrv4.s_addr, + encode); + } + } +#endif /* ACE_HAS_IPV6 */ +} + +// Helper function to get a port number from a port name. + +static int get_port_number_from_name (const char port_name[], + const char protocol[]) +{ + // Maybe port_name is directly a port number? + char *endp = 0; + int port_number = static_cast (ACE_OS::strtol (port_name, &endp, 10)); + + if (port_number >= 0 && *endp == '\0') + { + // Ok, port_name was really a number, and nothing else. We + // store that value as the port number. NOTE: this number must + // be returned in network byte order! + u_short n = static_cast (port_number); + n = ACE_HTONS (n); + return n; + } + + // We try to resolve port number from its name. + +#if defined (ACE_LACKS_GETSERVBYNAME) + port_number = 0; + ACE_UNUSED_ARG (port_name); + ACE_UNUSED_ARG (protocol); +#else + port_number = -1; + servent sentry; + ACE_SERVENT_DATA buf; + servent *sp = ACE_OS::getservbyname_r (port_name, + protocol, + &sentry, + buf); + if (sp != 0) + port_number = sp->s_port; +#endif /* ACE_LACKS_GETSERVBYNAME */ + + return port_number; +} + +// Initializes a ACE_INET_Addr from a and the remote +// . + +int +ACE_INET_Addr::set (const char port_name[], + const char host_name[], + const char protocol[]) +{ + ACE_TRACE ("ACE_INET_Addr::set"); + + int const port_number = get_port_number_from_name (port_name, protocol); + if (port_number == -1) + { + ACE_NOTSUP_RETURN (-1); + } + + int address_family = PF_UNSPEC; +# if defined (ACE_HAS_IPV6) + if (ACE_OS::strcmp (ACE_TEXT_CHAR_TO_TCHAR(protocol), ACE_TEXT ("tcp6")) == 0) + address_family = AF_INET6; +# endif /* ACE_HAS_IPV6 */ + + return this->set (static_cast (port_number), + host_name, 0, address_family); +} + +// Initializes a ACE_INET_Addr from a and a 32 bit +// Internet address. + +int +ACE_INET_Addr::set (const char port_name[], + ACE_UINT32 inet_address, + const char protocol[]) +{ + ACE_TRACE ("ACE_INET_Addr::set"); + + int const port_number = get_port_number_from_name (port_name, protocol); + if (port_number == -1) + { + ACE_NOTSUP_RETURN (-1); + } + + return this->set (static_cast (port_number), + inet_address, 0); +} + +// Creates a ACE_INET_Addr from a PORT_NUMBER and the remote +// HOST_NAME. + +ACE_INET_Addr::ACE_INET_Addr (u_short port_number, + const char host_name[], + int address_family) + : ACE_Addr (determine_type (), sizeof (inet_addr_)) +{ + ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); + ACE_OS::memset (&this->inet_addr_, 0, sizeof (this->inet_addr_)); + if (this->set (port_number, + host_name, + 1, + address_family) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE_INET_Addr::ACE_INET_Addr: %p\n"), + ACE_TEXT_CHAR_TO_TCHAR ((host_name == 0) ? + "" : host_name))); +} + +#if defined (ACE_HAS_WCHAR) +ACE_INET_Addr::ACE_INET_Addr (u_short port_number, + const wchar_t host_name[], + int address_family) + : ACE_Addr (determine_type (), sizeof (inet_addr_)) +{ + ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); + ACE_OS::memset (&this->inet_addr_, 0, sizeof (this->inet_addr_)); + if (this->set (port_number, + host_name, + 1, + address_family) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE_INET_Addr::ACE_INET_Addr: %p\n"), + ACE_TEXT_WCHAR_TO_TCHAR ((host_name == 0) ? + ACE_TEXT_WIDE ("") : + host_name))); +} +#endif /* ACE_HAS_WCHAR */ + +// Creates a ACE_INET_Addr from a sockaddr_in structure. + +int +ACE_INET_Addr::set (const sockaddr_in *addr, int len) +{ + ACE_TRACE ("ACE_INET_Addr::set"); + + if (addr->sin_family == AF_INET) + { + int maxlen = static_cast (sizeof (this->inet_addr_.in4_)); + if (len > maxlen) + len = maxlen; + ACE_OS::memcpy (&this->inet_addr_.in4_, addr, len); + this->base_set (AF_INET, len); + return 0; + } +#if defined (ACE_HAS_IPV6) + else if (addr->sin_family == AF_INET6) + { + int maxlen = static_cast (sizeof (this->inet_addr_.in6_)); + if (len > maxlen) + len = maxlen; + ACE_OS::memcpy (&this->inet_addr_.in6_, addr, len); + this->base_set (AF_INET6, len); + return 0; + } +#endif /* ACE_HAS_IPV6 */ + + errno = EAFNOSUPPORT; + return -1; +} + +// Return the address. + +void * +ACE_INET_Addr::get_addr (void) const +{ + ACE_TRACE ("ACE_INET_Addr::get_addr"); + return (void*)&this->inet_addr_; +} + +void +ACE_INET_Addr::set_addr (void *addr, int len) +{ + this->set_addr (addr, len, 0); +} + +// Set a pointer to the address. +void +ACE_INET_Addr::set_addr (void *addr, int /* len */, int map) +{ + ACE_TRACE ("ACE_INET_Addr::set_addr"); + struct sockaddr_in *getfamily = static_cast (addr); + + if (getfamily->sin_family == AF_INET) + { +#if defined (ACE_HAS_IPV6) + if (map) + this->set_type (AF_INET6); + else +#endif /* ACE_HAS_IPV6 */ + this->set_type (AF_INET); + this->set_port_number (getfamily->sin_port, 0); + this->set_address (reinterpret_cast (&getfamily->sin_addr), + sizeof (getfamily->sin_addr), + 0, map); + } +#if defined (ACE_HAS_IPV6) + else if (getfamily->sin_family == AF_INET6) + { + struct sockaddr_in6 *in6 = static_cast (addr); + this->set_port_number (in6->sin6_port, 0); + this->set_address (reinterpret_cast (&in6->sin6_addr), + sizeof (in6->sin6_addr), + 0); + this->inet_addr_.in6_.sin6_scope_id = in6->sin6_scope_id; + } +#endif // ACE_HAS_IPV6 +} + +// Creates a ACE_INET_Addr from a sockaddr_in structure. + +ACE_INET_Addr::ACE_INET_Addr (const sockaddr_in *addr, int len) + : ACE_Addr (determine_type (), sizeof (inet_addr_)) +{ + ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); + this->reset (); + this->set (addr, len); +} + +// Creates a ACE_INET_Addr from a PORT_NUMBER and an Internet address. + +ACE_INET_Addr::ACE_INET_Addr (u_short port_number, + ACE_UINT32 inet_address) + : ACE_Addr (determine_type (), sizeof (inet_addr_)) +{ + ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); + this->reset (); + if (this->set (port_number, inet_address) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_INET_Addr::ACE_INET_Addr"))); +} + +// Creates a ACE_INET_Addr from a PORT_NAME and the remote +// HOST_NAME. + +ACE_INET_Addr::ACE_INET_Addr (const char port_name[], + const char host_name[], + const char protocol[]) + : ACE_Addr (determine_type (), sizeof (inet_addr_)) +{ + ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); + this->reset (); + if (this->set (port_name, + host_name, + protocol) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE_INET_Addr::ACE_INET_Addr"))); +} + +#if defined (ACE_HAS_WCHAR) +ACE_INET_Addr::ACE_INET_Addr (const wchar_t port_name[], + const wchar_t host_name[], + const wchar_t protocol[]) + : ACE_Addr (determine_type (), sizeof (inet_addr_)) +{ + ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); + this->reset (); + if (this->set (port_name, + host_name, + protocol) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE_INET_Addr::ACE_INET_Addr"))); +} +#endif /* ACE_HAS_WCHAR */ + +// Creates a ACE_INET_Addr from a PORT_NAME and an Internet address. + +ACE_INET_Addr::ACE_INET_Addr (const char port_name[], + ACE_UINT32 inet_address, + const char protocol[]) + : ACE_Addr (determine_type (), sizeof (inet_addr_)) +{ + ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); +#if !defined (ACE_LACKS_HTONL) + this->reset (); + if (this->set (port_name, + htonl (inet_address), + protocol) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE_INET_Addr::ACE_INET_Addr"))); +#else + ACE_UNUSED_ARG (port_name); + ACE_UNUSED_ARG (inet_address); + ACE_UNUSED_ARG (protocol); +#endif +} + +#if defined (ACE_HAS_WCHAR) +ACE_INET_Addr::ACE_INET_Addr (const wchar_t port_name[], + ACE_UINT32 inet_address, + const wchar_t protocol[]) + : ACE_Addr (determine_type (), sizeof (inet_addr_)) +{ + ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); +#if !defined (ACE_LACKS_HTONL) + this->reset (); + if (this->set (port_name, + htonl (inet_address), + protocol) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE_INET_Addr::ACE_INET_Addr"))); +#else + ACE_UNUSED_ARG (port_name); + ACE_UNUSED_ARG (inet_address); + ACE_UNUSED_ARG (protocol); +#endif +} +#endif /* ACE_HAS_WCHAR */ + +ACE_INET_Addr::~ACE_INET_Addr (void) +{ +} + +int +ACE_INET_Addr::get_host_name (char hostname[], + size_t len) const +{ + ACE_TRACE ("ACE_INET_Addr::get_host_name"); + + int result; + if (len > 1) + { + result = this->get_host_name_i (hostname,len); + if (result < 0) + { + if (result == -2) + // We know that hostname is nul-terminated + result = -1; + else + { + //result == -1; + // This could be worse than hostname[len -1] = '\0'? + hostname[0] = '\0'; + } + } + } + else + { + if (len == 1) + hostname[0] = '\0'; + result = -1; + } + + return result; +} + +#if defined (ACE_HAS_WCHAR) +int +ACE_INET_Addr::get_host_name (wchar_t hostname[], + size_t len) const +{ + ACE_TRACE ("ACE_INET_Addr::get_host_name"); + + char char_hostname [MAXHOSTNAMELEN + 1]; + + // We have a build in limitation of MAXHOSTNAMELEN + if (len > MAXHOSTNAMELEN + 1) + len = MAXHOSTNAMELEN + 1; + + // Call the char version + int result = this->get_host_name (char_hostname, len); + + // And copy it over, if successful + if (result == 0) + ACE_OS::strcpy (hostname, + ACE_Ascii_To_Wide (char_hostname).wchar_rep ()); + + return result; +} +#endif /* ACE_HAS_WCHAR */ + +// Return the character representation of the hostname. + +const char * +ACE_INET_Addr::get_host_name (void) const +{ + ACE_TRACE ("ACE_INET_Addr::get_host_name"); + + static char name[MAXHOSTNAMELEN + 1]; + if (this->get_host_name (name, MAXHOSTNAMELEN + 1) == -1) + ACE_OS::strcpy (name, ""); + return name; +} + +void +ACE_INET_Addr::set_port_number (u_short port_number, + int encode) +{ + ACE_TRACE ("ACE_INET_Addr::set_port_number"); + + if (encode) + port_number = ACE_HTONS (port_number); + +#if defined (ACE_HAS_IPV6) + if (this->get_type () == AF_INET6) + this->inet_addr_.in6_.sin6_port = port_number; + else +#endif /* ACE_HAS_IPV6 */ + this->inet_addr_.in4_.sin_port = port_number; +} + +// returns -2 when the hostname is truncated +int +ACE_INET_Addr::get_host_name_i (char hostname[], size_t len) const +{ + ACE_TRACE ("ACE_INET_Addr::get_host_name_i"); + +#if defined (ACE_HAS_IPV6) + if ((this->get_type () == PF_INET6 && + 0 == ACE_OS::memcmp (&this->inet_addr_.in6_.sin6_addr, + &in6addr_any, + sizeof (this->inet_addr_.in6_.sin6_addr))) + || + (this->get_type () == PF_INET && + this->inet_addr_.in4_.sin_addr.s_addr == INADDR_ANY)) +#else + if (this->inet_addr_.in4_.sin_addr.s_addr == INADDR_ANY) +#endif /* ACE_HAS_IPV6 */ + { + if (ACE_OS::hostname (hostname, len) == -1) + return -1; + else + return 0; + } + else + { +#if defined (ACE_VXWORKS) && defined (ACE_LACKS_GETHOSTBYADDR) + ACE_UNUSED_ARG (len); + int error = + ::hostGetByAddr ((int) this->inet_addr_.in4_.sin_addr.s_addr, + hostname); + if (error == OK) + return 0; + else + { + errno = error; + return -1; + } +#else + void* addr = this->ip_addr_pointer (); + int size = this->ip_addr_size (); + int type = this->get_type (); + +# if defined (ACE_HAS_IPV6) && defined (ACE_HAS_BROKEN_GETHOSTBYADDR_V4MAPPED) + // Most OS can not handle IPv6-mapped-IPv4 addresses (even + // though they are meant to) so map them back to IPv4 addresses + // before trying to resolve them + in_addr demapped_addr; + if (type == PF_INET6 && + (this->is_ipv4_mapped_ipv6 () || this->is_ipv4_compat_ipv6 ())) + { + ACE_OS::memcpy (&demapped_addr.s_addr, &this->inet_addr_.in6_.sin6_addr.s6_addr[12], 4); + addr = &demapped_addr; + size = sizeof(demapped_addr); + type = PF_INET; + } +# endif /* ACE_HAS_IPV6 */ + +# if defined (DIGITAL_UNIX) && defined (__GNUC__) + hostent * const hp = + ACE_OS::gethostbyaddr (static_cast (addr), size, type); +# else + int h_error; // Not the same as errno! + hostent hentry; + ACE_HOSTENT_DATA buf; + hostent * const hp = + ACE_OS::gethostbyaddr_r (static_cast (addr), + size, + type, + &hentry, + buf, + &h_error); +# endif /* DIGITAL_UNIX */ + + if (hp == 0 || hp->h_name == 0) + return -1; + + if (ACE_OS::strlen (hp->h_name) >= len) + { + // We know the length, so use memcpy + if (len > 0) + { + ACE_OS::memcpy (hostname, hp->h_name, len - 1); + hostname[len-1]= '\0'; + } + errno = ENOSPC; + return -2; // -2 Means that we have a good string + // Using errno looks ok, but ENOSPC could be set on + // other places. + } + + ACE_OS::strcpy (hostname, hp->h_name); + return 0; +#endif /* ACE_VXWORKS */ + } +} + +int ACE_INET_Addr::set_address (const char *ip_addr, + int len, + int encode /* = 1 */, + int map /* = 0 */) +{ + ACE_TRACE ("ACE_INET_Addr::set_address"); + // This is really intended for IPv4. If the object is IPv4, or the type + // hasn't been set but it's a 4-byte address, go ahead. If this is an + // IPv6 object and is requested, refuse. + if (encode && len != 4) + { + errno = EAFNOSUPPORT; + return -1; + } + + if (len == 4) + { + ACE_UINT32 ip4 = *reinterpret_cast (ip_addr); + if (encode) + ip4 = ACE_HTONL (ip4); + + + if (this->get_type () == AF_INET && map == 0) { + this->base_set (AF_INET, sizeof (this->inet_addr_.in4_)); +#ifdef ACE_HAS_SOCKADDR_IN_SIN_LEN + this->inet_addr_.in4_.sin_len = sizeof (this->inet_addr_.in4_); +#endif + this->inet_addr_.in4_.sin_family = AF_INET; + this->set_size (sizeof (this->inet_addr_.in4_)); + ACE_OS::memcpy (&this->inet_addr_.in4_.sin_addr, + &ip4, + len); + } +#if defined (ACE_HAS_IPV6) + else if (map == 0) + { + // this->set_type (AF_INET); + this->base_set (AF_INET, sizeof (this->inet_addr_.in4_)); +#ifdef ACE_HAS_SOCKADDR_IN_SIN_LEN + this->inet_addr_.in4_.sin_len = sizeof (this->inet_addr_.in4_); +#endif + this->inet_addr_.in4_.sin_family = AF_INET; + this->set_size (sizeof (this->inet_addr_.in4_)); + ACE_OS::memcpy (&this->inet_addr_.in4_.sin_addr, + &ip4, len); + } + // If given an IPv4 address to copy to an IPv6 object, map it to + // an IPv4-mapped IPv6 address. + else + { + this->base_set (AF_INET6, sizeof (this->inet_addr_.in6_)); +#ifdef ACE_HAS_SOCKADDR_IN6_SIN6_LEN + this->inet_addr_.in6_.sin6_len = sizeof (this->inet_addr_.in6_); +#endif + this->inet_addr_.in6_.sin6_family = AF_INET6; + this->set_size (sizeof (this->inet_addr_.in6_)); + if (ip4 == ACE_HTONL (INADDR_ANY)) + { + in6_addr const ip6 = in6addr_any; + ACE_OS::memcpy (&this->inet_addr_.in6_.sin6_addr, + &ip6, + sizeof (ip6)); + return 0; + } + + // Build up a 128 bit address. An IPv4-mapped IPv6 address + // is defined as 0:0:0:0:0:ffff:IPv4_address. This is defined + // in RFC 1884 */ + ACE_OS::memset (&this->inet_addr_.in6_.sin6_addr, 0, 16); + this->inet_addr_.in6_.sin6_addr.s6_addr[10] = + this->inet_addr_.in6_.sin6_addr.s6_addr[11] = 0xff; + ACE_OS::memcpy + (&this->inet_addr_.in6_.sin6_addr.s6_addr[12], &ip4, 4); + } +#endif /* ACE_HAS_IPV6 */ + return 0; + } /* end if (len == 4) */ +#if defined (ACE_HAS_IPV6) + else if (len == 16) + { + if (this->get_type () != PF_INET6) + { + errno = EAFNOSUPPORT; + return -1; + } + // We protect ourselves up above so IPv6 must be possible here. + this->base_set (AF_INET6, sizeof (this->inet_addr_.in6_)); + this->inet_addr_.in6_.sin6_family = AF_INET6; +#ifdef ACE_HAS_SOCKADDR_IN6_SIN6_LEN + this->inet_addr_.in6_.sin6_len = sizeof (this->inet_addr_.in6_); +#endif + ACE_OS::memcpy (&this->inet_addr_.in6_.sin6_addr, ip_addr, len); + + return 0; + } /* end len == 16 */ +#endif /* ACE_HAS_IPV6 */ + + // Here with an unrecognized length. + errno = EAFNOSUPPORT; + return -1; + +} + +#if (defined (__linux__) || defined (ACE_WIN32)) && defined (ACE_HAS_IPV6) +int +ACE_INET_Addr::set_interface (const char *intf_name) +{ + if (this->get_type () == PF_INET6 && + (IN6_IS_ADDR_LINKLOCAL (&this->inet_addr_.in6_.sin6_addr) || + IN6_IS_ADDR_MC_LINKLOCAL (&this->inet_addr_.in6_.sin6_addr))) + { +#if defined (__linux__) + this->inet_addr_.in6_.sin6_scope_id = + ACE_OS::if_nametoindex (intf_name); +#else + this->inet_addr_.in6_.sin6_scope_id = + intf_name ? ACE_OS::atoi (intf_name) : 0; +#endif + // check to see if the interface lookup succeeded + if (this->inet_addr_.in6_.sin6_scope_id != 0) + return 0; + else + return -1; + } + else + return 0; + +} +#endif /* __linux && ACE_HAS_IPV6 */ + +const char * +ACE_INET_Addr::get_host_addr (char *dst, int size) const +{ +#if defined (ACE_HAS_IPV6) + if (this->get_type () == AF_INET6) + { + // mcorino@remedy.nl - Aug-26, 2005 + // I don't think this should be done because it results in a decimal address + // representation which is not distinguishable from the IPv4 form which makes + // it impossible to resolve back to an IPv6 INET_Addr without prior knowledge + // that this was such an address to begin with. + + //if (IN6_IS_ADDR_V4MAPPED (&this->inet_addr_.in6_.sin6_addr)) + //{ + // ACE_UINT32 addr; + // addr = this->get_ip_address(); + // addr = ACE_HTONL (addr); + // return ACE_OS::inet_ntop (AF_INET, &addr, dst, size); + //} + +# if defined (ACE_WIN32) + if (0 == ::getnameinfo (reinterpret_cast (&this->inet_addr_.in6_), + this->get_size (), + dst, + size, + 0, 0, // Don't want service name + NI_NUMERICHOST)) + return dst; + ACE_OS::set_errno_to_wsa_last_error (); + return 0; +# else + const char *ch = ACE_OS::inet_ntop (AF_INET6, + &this->inet_addr_.in6_.sin6_addr, + dst, + size); +#if defined (__linux__) + if ((IN6_IS_ADDR_LINKLOCAL (&this->inet_addr_.in6_.sin6_addr) || + IN6_IS_ADDR_MC_LINKLOCAL (&this->inet_addr_.in6_.sin6_addr)) && + this->inet_addr_.in6_.sin6_scope_id != 0) + { + char scope_buf[32]; + ACE_OS::sprintf (scope_buf, "%%%u", this->inet_addr_.in6_.sin6_scope_id); + if ((ACE_OS::strlen (ch)+ACE_OS::strlen (scope_buf)) < (size_t)size) + { + ACE_OS::strcat (dst, scope_buf); + } + } +#endif + return ch; +# endif /* ACE_WIN32 */ + } +#endif /* ACE_HAS_IPV6 */ + +#if defined (ACE_VXWORKS) + ACE_UNUSED_ARG (dst); + ACE_UNUSED_ARG (size); + + // It would be nice to be able to encapsulate this into + // ACE_OS::inet_ntoa(), but that would lead to either inefficiencies + // on vxworks or lack of thread safety. + // + // So, we use the way that vxworks suggests. + ACE_INET_Addr *ncthis = const_cast (this); + inet_ntoa_b(this->inet_addr_.in4_.sin_addr, ncthis->buf_); + ACE_OS::strsncpy (dst, &buf_[0], size); + return &buf_[0]; +#else /* ACE_VXWORKS */ + char *ch = ACE_OS::inet_ntoa (this->inet_addr_.in4_.sin_addr); + ACE_OS::strsncpy (dst, ch, size); + return ch; +#endif +} + +// Return the dotted Internet address. +const char * +ACE_INET_Addr::get_host_addr (void) const +{ + ACE_TRACE ("ACE_INET_Addr::get_host_addr"); +#if defined (ACE_HAS_IPV6) + static char buf[INET6_ADDRSTRLEN]; + return this->get_host_addr (buf, INET6_ADDRSTRLEN); +#else /* ACE_HAS_IPV6 */ +# if defined (ACE_VXWORKS) + // It would be nice to be able to encapsulate this into + // ACE_OS::inet_ntoa(), but that would lead to either inefficiencies + // on vxworks or lack of thread safety. + // + // So, we use the way that vxworks suggests. + ACE_INET_Addr *ncthis = const_cast (this); + inet_ntoa_b (this->inet_addr_.in4_.sin_addr, ncthis->buf_); + return &buf_[0]; +# else /* ACE_VXWORKS */ + return ACE_OS::inet_ntoa (this->inet_addr_.in4_.sin_addr); +# endif /* !ACE_VXWORKS */ +#endif /* !ACE_HAS_IPV6 */ +} + +// Return the 4-byte IP address, converting it into host byte order. +ACE_UINT32 +ACE_INET_Addr::get_ip_address (void) const +{ + ACE_TRACE ("ACE_INET_Addr::get_ip_address"); +#if defined (ACE_HAS_IPV6) + if (this->get_type () == AF_INET6) + { + if (IN6_IS_ADDR_V4MAPPED (&this->inet_addr_.in6_.sin6_addr) || + IN6_IS_ADDR_V4COMPAT (&this->inet_addr_.in6_.sin6_addr) ) + { + ACE_UINT32 addr; + // Return the last 32 bits of the address + char *thisaddrptr = (char*)this->ip_addr_pointer (); + thisaddrptr += 128/8 - 32/8; + ACE_OS::memcpy (&addr, thisaddrptr, sizeof (addr)); + return ACE_NTOHL (addr); + } + + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("ACE_INET_Addr::get_ip_address: address is a IPv6 address not IPv4\n"))); + errno = EAFNOSUPPORT; + return 0; + } +#endif /* ACE_HAS_IPV6 */ + return ACE_NTOHL (ACE_UINT32 (this->inet_addr_.in4_.sin_addr.s_addr)); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/INET_Addr.h b/ACE/ace/INET_Addr.h new file mode 100644 index 00000000000..7098314ad37 --- /dev/null +++ b/ACE/ace/INET_Addr.h @@ -0,0 +1,399 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file INET_Addr.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_INET_ADDR_H +#define ACE_INET_ADDR_H +#include /**/ "ace/pre.h" + +#include "ace/Sock_Connect.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Addr.h" + +#if defined(ACE_VXWORKS) + // Needed to get INET_ADDR_LEN +# include /**/ "inetLib.h" +#endif /* ACE_VXWORKS */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_INET_Addr + * + * @brief Defines a C++ wrapper facade for the Internet domain address + * family format. + */ +class ACE_Export ACE_INET_Addr : public ACE_Addr +{ +public: + // = Initialization methods. + + /// Default constructor. + ACE_INET_Addr (void); + + /// Copy constructor. + ACE_INET_Addr (const ACE_INET_Addr &); + + /// Creates an ACE_INET_Addr from a sockaddr_in structure. + ACE_INET_Addr (const sockaddr_in *addr, int len); + + /// Creates an ACE_INET_Addr from a @a port_number and the remote + /// @a host_name. The port number is assumed to be in host byte order. + /// To set a port already in network byte order, please @see set(). + /// Use address_family to select IPv6 (PF_INET6) vs. IPv4 (PF_INET). + ACE_INET_Addr (u_short port_number, + const char host_name[], + int address_family = AF_UNSPEC); + + /** + * Initializes an ACE_INET_Addr from the @a address, which can be + * "ip-number:port-number" (e.g., "tango.cs.wustl.edu:1234" or + * "128.252.166.57:1234"). If there is no ':' in the @a address it + * is assumed to be a port number, with the IP address being + * INADDR_ANY. + */ + explicit ACE_INET_Addr (const char address[], + int address_family = AF_UNSPEC); + + /** + * Creates an ACE_INET_Addr from a @a port_number and an Internet + * . This method assumes that @a port_number and + * are in host byte order. If you have addressing information in + * network byte order, @see set(). + */ + explicit ACE_INET_Addr (u_short port_number, + ACE_UINT32 ip_addr = INADDR_ANY); + + /// Uses to create an ACE_INET_Addr from a + /// , the remote @a host_name, and the @a protocol. + ACE_INET_Addr (const char port_name[], + const char host_name[], + const char protocol[] = "tcp"); + + /** + * Uses to create an ACE_INET_Addr from a + * , an Internet , and the @a protocol. This + * method assumes that is in host byte order. + */ + ACE_INET_Addr (const char port_name[], + ACE_UINT32 ip_addr, + const char protocol[] = "tcp"); + +#if defined (ACE_HAS_WCHAR) + ACE_INET_Addr (u_short port_number, + const wchar_t host_name[], + int address_family = AF_UNSPEC); + + explicit ACE_INET_Addr (const wchar_t address[], + int address_family = AF_UNSPEC); + + ACE_INET_Addr (const wchar_t port_name[], + const wchar_t host_name[], + const wchar_t protocol[] = ACE_TEXT_WIDE ("tcp")); + + ACE_INET_Addr (const wchar_t port_name[], + ACE_UINT32 ip_addr, + const wchar_t protocol[] = ACE_TEXT_WIDE ("tcp")); +#endif /* ACE_HAS_WCHAR */ + + /// Default dtor. + ~ACE_INET_Addr (void); + + // = Direct initialization methods. + + // These methods are useful after the object has been constructed. + + /// Initializes from another ACE_INET_Addr. + int set (const ACE_INET_Addr &); + + /** + * Initializes an ACE_INET_Addr from a @a port_number and the + * remote @a host_name. If @a encode is non-zero then @a port_number is + * converted into network byte order, otherwise it is assumed to be + * in network byte order already and are passed straight through. + * address_family can be used to select IPv4/IPv6 if the OS has + * IPv6 capability (ACE_HAS_IPV6 is defined). To specify IPv6, use + * the value AF_INET6. To specify IPv4, use AF_INET. + */ + int set (u_short port_number, + const char host_name[], + int encode = 1, + int address_family = AF_UNSPEC); + + /** + * Initializes an ACE_INET_Addr from a @a port_number and an Internet + * @a ip_addr. If @a encode is non-zero then the port number and IP address + * are converted into network byte order, otherwise they are assumed to be + * in network byte order already and are passed straight through. + * + * If is non-zero and IPv6 support has been compiled in, + * then this address will be set to the IPv4-mapped IPv6 address of it. + */ + int set (u_short port_number, + ACE_UINT32 ip_addr = INADDR_ANY, + int encode = 1, + int map = 0); + + /// Uses to initialize an ACE_INET_Addr from a + /// , the remote @a host_name, and the @a protocol. + int set (const char port_name[], + const char host_name[], + const char protocol[] = "tcp"); + + /** + * Uses to initialize an ACE_INET_Addr from a + * , an , and the @a protocol. This assumes that + * is already in network byte order. + */ + int set (const char port_name[], + ACE_UINT32 ip_addr, + const char protocol[] = "tcp"); + + /** + * Initializes an ACE_INET_Addr from the @a addr, which can be + * "ip-number:port-number" (e.g., "tango.cs.wustl.edu:1234" or + * "128.252.166.57:1234"). If there is no ':' in the @a address it + * is assumed to be a port number, with the IP address being + * INADDR_ANY. + */ + int set (const char addr[], int address_family = AF_UNSPEC); + + /// Creates an ACE_INET_Addr from a sockaddr_in structure. + int set (const sockaddr_in *, + int len); + +#if defined (ACE_HAS_WCHAR) + int set (u_short port_number, + const wchar_t host_name[], + int encode = 1, + int address_family = AF_UNSPEC); + + int set (const wchar_t port_name[], + const wchar_t host_name[], + const wchar_t protocol[] = ACE_TEXT_WIDE ("tcp")); + + int set (const wchar_t port_name[], + ACE_UINT32 ip_addr, + const wchar_t protocol[] = ACE_TEXT_WIDE ("tcp")); + + int set (const wchar_t addr[], int address_family = AF_UNSPEC); +#endif /* ACE_HAS_WCHAR */ + + /// Return a pointer to the underlying network address. + virtual void *get_addr (void) const; + int get_addr_size(void) const; + + /// Set a pointer to the address. + virtual void set_addr (void *, int len); + + /// Set a pointer to the address. + virtual void set_addr (void *, int len, int map); + + /** + * Transform the current ACE_INET_Addr address into string format. + * If is non-0 this produces "ip-number:port-number" + * (e.g., "128.252.166.57:1234"), whereas if is 0 + * this produces "ip-name:port-number" (e.g., + * "tango.cs.wustl.edu:1234"). Returns -1 if the @a size of the + * is too small, else 0. + */ + virtual int addr_to_string (ACE_TCHAR buffer[], + size_t size, + int ipaddr_format = 1) const; + + /** + * Initializes an ACE_INET_Addr from the @a address, which can be + * "ip-addr:port-number" (e.g., "tango.cs.wustl.edu:1234"), + * "ip-addr:port-name" (e.g., "tango.cs.wustl.edu:telnet"), + * "ip-number:port-number" (e.g., "128.252.166.57:1234"), or + * "ip-number:port-name" (e.g., "128.252.166.57:telnet"). If there + * is no ':' in the @a address it is assumed to be a port number, + * with the IP address being INADDR_ANY. + */ + virtual int string_to_addr (const char address[], + int address_family = AF_UNSPEC); + +#if defined (ACE_HAS_WCHAR) + /* + virtual int string_to_addr (const char address[]); + */ +#endif /* ACE_HAS_WCHAR */ + + /** + * Sets the port number without affecting the host name. If + * @a encode is enabled then @a port_number is converted into network + * byte order, otherwise it is assumed to be in network byte order + * already and are passed straight through. + */ + void set_port_number (u_short, + int encode = 1); + + /** + * Sets the address without affecting the port number. If + * @a encode is enabled then is converted into network + * byte order, otherwise it is assumed to be in network byte order + * already and are passed straight through. The size of the address + * is specified in the @a len parameter. + * If is non-zero, IPv6 support has been compiled in, and + * is an IPv4 address, then this address is set to the IPv4-mapped + * IPv6 address of it. + */ + int set_address (const char *ip_addr, + int len, + int encode = 1, + int map = 0); + +#if (defined (__linux__) || defined (ACE_WIN32)) && defined (ACE_HAS_IPV6) + /** + * Sets the interface that should be used for this address. This only has + * an effect when the address is link local, otherwise it does nothing. + */ + int set_interface (const char *intf_name); +#endif /* (__linux__ || ACE_WIN32) && ACE_HAS_IPV6 */ + + /// Return the port number, converting it into host byte-order. + u_short get_port_number (void) const; + + /** + * Return the character representation of the name of the host, + * storing it in the (which is assumed to be + * bytes long). This version is reentrant. If + * is greater than 0 then will be + * NUL-terminated even if -1 is returned. + */ + int get_host_name (char hostname[], + size_t hostnamelen) const; + +#if defined (ACE_HAS_WCHAR) + int get_host_name (wchar_t hostname[], + size_t hostnamelen) const; +#endif /* ACE_HAS_WCHAR */ + + /** + * Return the character representation of the hostname. This + * version is non-reentrant since it returns a pointer to a static + * data area. You should therefore either (1) do a "deep copy" of + * the address returned by get_host_name(), e.g., using strdup() or + * (2) use the "reentrant" version of get_host_name() described + * above. + */ + const char *get_host_name (void) const; + + /** + * Return the "dotted decimal" Internet address representation of + * the hostname storing it in the @a addr (which is assumed to be + * bytes long). This version is reentrant. + */ + const char *get_host_addr (char *addr, int addr_size) const; + + /** + * Return the "dotted decimal" Internet address representation of + * the hostname. This version is non-reentrant since it returns a + * pointer to a static data area. You should therefore either + * (1) do a "deep copy" of the address returned by get_host_addr(), e.g., + * using strdup() or (2) use the "reentrant" version of + * get_host_addr() described above. + */ + const char *get_host_addr (void) const; + + /// Return the 4-byte IP address, converting it into host byte + /// order. + ACE_UINT32 get_ip_address (void) const; + + /// Return @c true if the IP address is INADDR_ANY or IN6ADDR_ANY. + bool is_any (void) const; + + /// Return @c true if the IP address is IPv4/IPv6 loopback address. + bool is_loopback (void) const; + + /// Return @c true if the IP address is IPv4/IPv6 multicast address. + bool is_multicast (void) const; + +#if defined (ACE_HAS_IPV6) + /// Return @c true if the IP address is IPv6 linklocal address. + bool is_linklocal (void) const; + + /// Return @c true if the IP address is IPv4-mapped IPv6 address. + bool is_ipv4_mapped_ipv6 (void) const; + + /// Return @c true if the IP address is IPv4-compatible IPv6 address. + bool is_ipv4_compat_ipv6 (void) const; +#endif /* ACE_HAS_IPV6 */ + + /** + * Returns @c true if @c this is less than @a rhs. In this context, + * "less than" is defined in terms of IP address and TCP port + * number. This operator makes it possible to use @c ACE_INET_Addrs + * in STL maps. + */ + bool operator < (const ACE_INET_Addr &rhs) const; + + /// Compare two addresses for equality. The addresses are considered + /// equal if they contain the same IP address and port number. + bool operator == (const ACE_INET_Addr &SAP) const; + + /// Compare two addresses for inequality. + bool operator != (const ACE_INET_Addr &SAP) const; + + /// A variation of the equality operator, this method only compares the + /// IP address and ignores the port number. + bool is_ip_equal (const ACE_INET_Addr &SAP) const; + + /// Computes and returns hash value. + virtual u_long hash (void) const; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// Insure that @a hostname is properly null-terminated. + int get_host_name_i (char hostname[], size_t hostnamelen) const; + + // Methods to gain access to the actual address of + // the underlying internet address structure. + void *ip_addr_pointer (void) const; + int ip_addr_size (void) const; + int determine_type (void) const; + + /// Initialize underlying inet_addr_ to default values + void reset (void); + + /// Underlying representation. + /// This union uses the knowledge that the two structures share the + /// first member, sa_family (as all sockaddr structures do). + union + { + sockaddr_in in4_; +#if defined (ACE_HAS_IPV6) + sockaddr_in6 in6_; +#endif /* ACE_HAS_IPV6 */ + } inet_addr_; + +#if defined (ACE_VXWORKS) + char buf_[INET_ADDR_LEN]; +#endif +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/INET_Addr.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_INET_ADDR_H */ diff --git a/ACE/ace/INET_Addr.inl b/ACE/ace/INET_Addr.inl new file mode 100644 index 00000000000..a05a80db7fb --- /dev/null +++ b/ACE/ace/INET_Addr.inl @@ -0,0 +1,257 @@ +// -*- C++ -*- +// +// $Id$ + + +#include "ace/OS_NS_string.h" +#include "ace/Global_Macros.h" +#include "ace/OS_NS_arpa_inet.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE void +ACE_INET_Addr::reset (void) +{ + ACE_OS::memset (&this->inet_addr_, 0, sizeof (this->inet_addr_)); + if (this->get_type() == AF_INET) + { +#ifdef ACE_HAS_SOCKADDR_IN_SIN_LEN + this->inet_addr_.in4_.sin_len = sizeof (this->inet_addr_.in4_); +#endif + this->inet_addr_.in4_.sin_family = AF_INET; + } +#if defined (ACE_HAS_IPV6) + else if (this->get_type() == AF_INET6) + { +#ifdef ACE_HAS_SOCKADDR_IN6_SIN6_LEN + this->inet_addr_.in6_.sin6_len = sizeof (this->inet_addr_.in6_); +#endif + this->inet_addr_.in6_.sin6_family = AF_INET6; + } +#endif /* ACE_HAS_IPV6 */ +} + +ACE_INLINE int +ACE_INET_Addr::determine_type (void) const +{ +#if defined (ACE_HAS_IPV6) +# if defined (ACE_USES_IPV4_IPV6_MIGRATION) + return ACE::ipv6_enabled () ? AF_INET6 : AF_INET; +# else + return AF_INET6; +# endif /* ACE_USES_IPV4_IPV6_MIGRATION */ +#else + return AF_INET; +#endif /* ACE_HAS_IPV6 */ +} + +ACE_INLINE void * +ACE_INET_Addr::ip_addr_pointer (void) const +{ +#if defined (ACE_HAS_IPV6) + if (this->get_type () == PF_INET) + return (void*)&this->inet_addr_.in4_.sin_addr; + else + return (void*)&this->inet_addr_.in6_.sin6_addr; +#else + return (void*)&this->inet_addr_.in4_.sin_addr; +#endif +} + +ACE_INLINE int +ACE_INET_Addr::ip_addr_size (void) const +{ + // Since this size value is used to pass to other host db-type + // functions (gethostbyaddr, etc.) the length is of int type. + // Thus, cast all these sizes back to int. They're all well + // within the range of an int anyway. +#if defined (ACE_HAS_IPV6) + if (this->get_type () == PF_INET) + return static_cast (sizeof this->inet_addr_.in4_.sin_addr); + else + return static_cast (sizeof this->inet_addr_.in6_.sin6_addr); +#else + // These _UNICOS changes were picked up from pre-IPv6 code in + // get_host_name_i... the IPv6 section above may need something + // similar, so keep an eye out for it. +# if !defined(_UNICOS) + return static_cast (sizeof this->inet_addr_.in4_.sin_addr.s_addr); +# else /* _UNICOS */ + return static_cast (sizeof this->inet_addr_.in4_.sin_addr); +# endif /* ! _UNICOS */ +#endif /* ACE_HAS_IPV6 */ +} + +// Return the port number, converting it into host byte order... + +ACE_INLINE u_short +ACE_INET_Addr::get_port_number (void) const +{ + ACE_TRACE ("ACE_INET_Addr::get_port_number"); +#if defined (ACE_LACKS_NTOHS) + ACE_NOTSUP_RETURN (0); +#elif defined (ACE_HAS_IPV6) + if (this->get_type () == PF_INET) + return ntohs (this->inet_addr_.in4_.sin_port); + else + return ntohs (this->inet_addr_.in6_.sin6_port); +#else + return ntohs (this->inet_addr_.in4_.sin_port); +#endif /* ACE_HAS_IPV6 */ +} + +ACE_INLINE int +ACE_INET_Addr::get_addr_size (void) const +{ + ACE_TRACE ("ACE_INET_Addr::get_addr_size"); +#if defined (ACE_HAS_IPV6) + if (this->get_type () == PF_INET) + return sizeof this->inet_addr_.in4_; + else + return sizeof this->inet_addr_.in6_; +#else + return sizeof this->inet_addr_.in4_; +#endif /* ACE_HAS_IPV6 */ +} + +ACE_INLINE bool +ACE_INET_Addr::operator < (const ACE_INET_Addr &rhs) const +{ +#if defined (ACE_HAS_IPV6) + if (this->get_type() != rhs.get_type()) + { + return this->get_type() < rhs.get_type(); + } + + if (this->get_type() == PF_INET6) + { + int memval = ACE_OS::memcmp (this->ip_addr_pointer(), + rhs.ip_addr_pointer(), + this->ip_addr_size()); + + return memval < 0 + || (memval == 0 + && (this->get_port_number() < rhs.get_port_number() + || (this->get_port_number() == rhs.get_port_number() + && this->inet_addr_.in6_.sin6_scope_id < + rhs.inet_addr_.in6_.sin6_scope_id))); + } +#endif + + return this->get_ip_address () < rhs.get_ip_address () + || (this->get_ip_address () == rhs.get_ip_address () + && this->get_port_number () < rhs.get_port_number ()); +} + +#if defined (ACE_HAS_WCHAR) +ACE_INLINE int +ACE_INET_Addr::set (u_short port_number, + const wchar_t host_name[], + int encode, + int address_family) +{ + return this->set (port_number, + ACE_Wide_To_Ascii (host_name).char_rep (), + encode, + address_family); +} + +ACE_INLINE int +ACE_INET_Addr::set (const wchar_t port_name[], + const wchar_t host_name[], + const wchar_t protocol[]) +{ + return this->set (ACE_Wide_To_Ascii (port_name).char_rep (), + ACE_Wide_To_Ascii (host_name).char_rep (), + ACE_Wide_To_Ascii (protocol).char_rep ()); +} + +ACE_INLINE int +ACE_INET_Addr::set (const wchar_t port_name[], + ACE_UINT32 ip_addr, + const wchar_t protocol[]) +{ + return this->set (ACE_Wide_To_Ascii (port_name).char_rep (), + ip_addr, + ACE_Wide_To_Ascii (protocol).char_rep ()); +} + +ACE_INLINE int +ACE_INET_Addr::set (const wchar_t addr[], int address_family) +{ + return this->set (ACE_Wide_To_Ascii (addr).char_rep (), address_family); +} + +#endif /* ACE_HAS_WCHAR */ + +// Return @c true if the IP address is INADDR_ANY or IN6ADDR_ANY. +ACE_INLINE bool +ACE_INET_Addr::is_any (void) const +{ +#if defined (ACE_HAS_IPV6) + if (this->get_type () == AF_INET6) + return IN6_IS_ADDR_UNSPECIFIED (&this->inet_addr_.in6_.sin6_addr); +#endif /* ACE_HAS_IPV6 */ + + return (this->inet_addr_.in4_.sin_addr.s_addr == INADDR_ANY); +} + +// Return @c true if the IP address is IPv4/IPv6 loopback address. +ACE_INLINE bool +ACE_INET_Addr::is_loopback (void) const +{ +#if defined (ACE_HAS_IPV6) + if (this->get_type () == AF_INET6) + return IN6_IS_ADDR_LOOPBACK (&this->inet_addr_.in6_.sin6_addr); +#endif /* ACE_HAS_IPV6 */ + + // RFC 3330 defines loopback as any address with 127.x.x.x + return ((this->get_ip_address () & 0XFF000000) == (INADDR_LOOPBACK & 0XFF000000)); +} + +// Return @c true if the IP address is IPv4/IPv6 multicast address. +ACE_INLINE bool +ACE_INET_Addr::is_multicast (void) const +{ +#if defined (ACE_HAS_IPV6) + if (this->get_type() == AF_INET6) + return this->inet_addr_.in6_.sin6_addr.s6_addr[0] == 0xFF; +#endif /* ACE_HAS_IPV6 */ + return + this->inet_addr_.in4_.sin_addr.s_addr >= 0xE0000000 && // 224.0.0.0 + this->inet_addr_.in4_.sin_addr.s_addr <= 0xEFFFFFFF; // 239.255.255.255 +} + +#if defined (ACE_HAS_IPV6) +// Return @c true if the IP address is IPv6 linklocal address. +ACE_INLINE bool +ACE_INET_Addr::is_linklocal (void) const +{ + if (this->get_type () == AF_INET6) + return IN6_IS_ADDR_LINKLOCAL (&this->inet_addr_.in6_.sin6_addr); + + return false; +} + +// Return @c true if the IP address is IPv4 mapped IPv6 address. +ACE_INLINE bool +ACE_INET_Addr::is_ipv4_mapped_ipv6 (void) const +{ + if (this->get_type () == AF_INET6) + return IN6_IS_ADDR_V4MAPPED (&this->inet_addr_.in6_.sin6_addr); + + return false; +} + +// Return @c true if the IP address is IPv4-compatible IPv6 address. +ACE_INLINE bool +ACE_INET_Addr::is_ipv4_compat_ipv6 (void) const +{ + if (this->get_type () == AF_INET6) + return IN6_IS_ADDR_V4COMPAT (&this->inet_addr_.in6_.sin6_addr); + + return false; +} +#endif /* ACE_HAS_IPV6 */ + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/IOStream.cpp b/ACE/ace/IOStream.cpp new file mode 100644 index 00000000000..23790425eeb --- /dev/null +++ b/ACE/ace/IOStream.cpp @@ -0,0 +1,665 @@ +// $Id$ + +#ifndef ACE_IOSTREAM_CPP +#define ACE_IOSTREAM_CPP + +#include "ace/IOStream.h" + +ACE_RCSID(ace, IOStream, "$Id$") + +#if !defined (ACE_LACKS_ACE_IOSTREAM) + +# include "ace/OS_NS_errno.h" +# include "ace/OS_Memory.h" + +/////////////////////////////////////////////////////////////////////////// + +/* Here's a simple example of how iostream's non-virtual operators can + get you in a mess: + + class myiostream : public iostream + { + public: + myiostream& operator>> (String & s) + { + ... + } + }; + + ... + + int i; + String s; + myiostream foo (...); + + foo >> s; + // OK + // invokes myiostream::operator>> (String&) returning myiostream& + + foo >> i; + // OK + // invokes iostream::operator>> (int&) returning iostream& + + foo >> i >> s; + // BAD + // invokes iostream::operator>> (int&) then iostream::operator>> (String&) + // + // What has happened is that the first >> is invoked on the base class and returns + // a reference to iostream. The second >> has no idea of the ACE_IOStream and + // gets invoked on iostream. Probably NOT what you wanted! + + + // In order to make all of this work the way you want, you have to do this: + + class myiostream : public iostream + { + public: + myiostream& operator>> (int & i) + { + return ((myiostream&)iostream::operator>> (i)); + } + + myiostream& operator>> (String & s) + { + ... + } + }; + + ... + + int i; + String s; + myiostream foo (...); + + foo >> s; + // OK + // invokes myiostream::operator>> (String&) returning myiostream& + + foo >> i; + // OK + // invokes myiostream::operator>> (int&) returning myiostream& + + + foo >> i >> s; + // OK + // Because you provided operator>> (int&) in class myiostream, that + // function will be invoked by the first >>. Since it returns + // a myiostream&, the second >> will be invoked as desired. */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_HANDLE +ACE_Streambuf::get_handle (void) +{ + return 0; +} + +ACE_Time_Value * +ACE_Streambuf::recv_timeout (ACE_Time_Value *tv) +{ + ACE_Time_Value * rval = recv_timeout_; + if (tv) + { + recv_timeout_value_ = *tv; + recv_timeout_ = &recv_timeout_value_; + } + else + recv_timeout_ = 0; + + return rval; +} + +int +ACE_Streambuf::underflow (void) +{ + // If input mode is not set, any attempt to read from the stream is + // a failure. + + if (ACE_BIT_DISABLED (mode_, ios::in)) + return EOF; + + // If base () is empty then this is the first time any get/put + // operation has been attempted on the stream. + + if (!this->base ()) + { + // Set base () to use our private read buffer. The arguments are: + // beginning of the buffer (base ()) + // one-beyond the end of the buffer (ebase ()) + // should base () be deleted on destruction + // + // We have to say "no" to the third parameter because we want to + // explicitly handle deletion of the TWO buffers at destruction. + + setb (this->eback_saved_, + this->eback_saved_ + streambuf_size_, 0); + + // Remember that we are now in getMode. This will help us if + // we're called prior to a mode change as well as helping us + // when the mode does change. + this->cur_mode_ = this->get_mode_; + // Using the new values for base (), initialize the get area. + // This simply sets eback (), gptr () and egptr () described + // earlier. + setg (base (), base (), base ()); + + // Set the put buffer such that puts will be disabled. Any + // attempt to put data will now cause overflow to be invoked. + setp (0, 0); + } + else // base () has been initialized already... + { + // If we are in put_mode_ now, then it is time to switch to get_mode_ + // + // 1. get rid of any pending output + // 2. rearrange base () to use our half of the buffer + // 3. reset the mode + // + if (this->cur_mode_ == this->put_mode_) + { + // Dump any pending output to the peer. This is not really + // necessary because of the dual-buffer arrangement we've + // set up but intuitively it makes sense to send the pending + // data before we request data since the peer will probably + // need what we're sending before it can respond. + if (out_waiting () && syncout () == EOF) + return EOF; + + if( ! pbase() ) + { + delete [] pbase_saved_; + (void) reset_put_buffer(); + } + else + { + // We're about to disable put mode but before we do + // that, we want to preserve it's state. + this->pbase_saved_ = pbase (); + this->pptr_saved_ = pptr (); + this->epptr_saved_ = epptr (); + } + + // Disable put mode as described in the constructor. + setp (0, 0); + + // Like the case where base () is false, we now point base + // () to use our private get buffer. + setb (this->eback_saved_, + this->eback_saved_ + streambuf_size_, + 0); + + // And restore the previous state of the get pointers. + + setg (this->eback_saved_, this->gptr_saved_, + this->egptr_saved_); + + // Finally, set our mode so that we don't get back into this + // if () and so that overflow can operate correctly. + cur_mode_ = get_mode_; + } + + // There could be data in the input buffer if we switched to put + // mode before reading everything. In that case, we take this + // opportunity to feed it back to the iostream. + if (in_avail ()) + // Remember that we return an int so that we can give back + // EOF. The explicit cast prevents us from returning a signed + // char when we're not returning EOF. + return (u_char) *gptr (); + } + + // We really shouldn't be here unless there is a lack of data in the + // read buffer. So... go get some more data from the peer. + + int result = fillbuf (); + + // Fillbuf will give us EOF if there was an error with the peer. In + // that case, we can do no more input. + + if (EOF == result) + { + // Disable ourselves and return failure to the iostream. That + // should result in a call to have oursleves closed. + setg (0, 0, 0); + return EOF; + } + + // Return the next available character in the input buffer. Again, + // we protect against sign extension. + + return (u_char) *gptr (); +} + +// Much of this is similar to underflow. I'll just hit the highlights +// rather than repeating a lot of what you've already seen. + +int +ACE_Streambuf::overflow (int c) +{ + // Check to see if output is allowed at all. + if (! (mode_ & ios::out)) + return EOF; + + if (!base ()) + { + // Set base () to use put's private buffer. + // + setb (this->pbase_saved_, + this->pbase_saved_ + streambuf_size_, 0); + + // Set the mode for optimization. + this->cur_mode_ = this->put_mode_; + // Set the put area using the new base () values. + setp (base (), ebuf ()); + + // Disable the get area. + setg (0, 0, 0); + } + else // We're already reading or writing + { + // If we're coming out of get mode... + if (this->cur_mode_ == this->get_mode_) + { + // --> JCEJ 6/6/98 + if (! eback()) + { + /* Something has happened to cause the streambuf + to get rid of our get area. + We could probably do this a bit cleaner but + this method is sure to cleanup the bits and + pieces. + */ + delete [] eback_saved_; + (void) reset_get_buffer(); + } + else + { + // Save the current get mode values + this->eback_saved_ = eback (); + this->gptr_saved_ = gptr (); + this->egptr_saved_ = egptr (); + } + // <-- JCEJ 6/6/98 + + // then disable the get buffer + setg (0, 0, 0); + + // Reconfigure base () and restore the put pointers. + setb (pbase_saved_, pbase_saved_ + streambuf_size_, 0); + setp (base (), ebuf ()); + + // Save the new mode. + this->cur_mode_ = this->put_mode_; + } + + // If there is output to be flushed, do so now. We shouldn't + // get here unless this is the case... + + if (out_waiting () && EOF == syncout ()) + return EOF; + } + + // If we're not putting EOF, then we have to deal with the character + // that is being put. Perhaps we should do something special with EOF??? + + if (c != EOF) + { + // We've already written any data that may have been in the + // buffer, so we're guaranteed to have room in the buffer for + // this new information. So... we add it to the buffer and + // adjust our 'next' pointer acordingly. + *pptr () = (char) c; + pbump (1); + } + + return 0; +} + +// syncin + +int +ACE_Streambuf::syncin (void) +{ + // As discussed, there really isn't any way to sync input from a + // socket-like device. We specifially override this base-class + // function so that it won't do anything evil to us. + return 0; +} + +// syncout + +int +ACE_Streambuf::syncout (void) +{ + // Unlike syncin, syncout is a doable thing. All we have to do is + // write whatever is in the output buffer to the peer. flushbuf () + // is how we do it. + + if (flushbuf () == EOF) + return EOF; + else + return 0; +} + +int +ACE_Streambuf::sync (void) +{ + // sync () is fairly traditional in that it syncs both input and + // output. We could have omitted the call to syncin () but someday, + // we may want it to do something. + + syncin (); + + // Don't bother syncing the output unless there is data to be + // sent... + + if (out_waiting ()) + return syncout (); + else + return 0; +} + +// flushbuf + +int +ACE_Streambuf::flushbuf (void) +{ + // pptr () is one character beyond the last character put into the + // buffer. pbase () points to the beginning of the put buffer. + // Unless pptr () is greater than pbase () there is nothing to be + // sent to the peer. + + if (pptr () <= pbase ()) + return 0; + + // 4/12/97 -- JCEJ + // Kludge!!! + // If the remote side shuts down the connection, an attempt to send + // () to the remote will result in the message 'Broken Pipe' I think + // this is an OS message, I've tracked it down to the ACE_OS::write + // () function. That's the last one to be called before the + // message. I can only test this on Linux though, so I don't know + // how other systems will react. + // + // To get around this gracefully, I do a PEEK recv () with an + // immediate (nearly) timeout. recv () is much more graceful on + // it's failure. If we get -1 from recv () not due to timeout then + // we know we're SOL. + // + // Q: Is 'errno' threadsafe? Should the section below be a + // critical section? + // + // char tbuf[1]; + // ACE_Time_Value to (0,1); + // if (this->recv (tbuf, 1, MSG_PEEK, &to) == -1) + // { + // if (errno != ETIME) + // { + // perror ("OOPS preparing to send to peer"); + // return EOF; + // } + // } + // + // The correct way to handle this is for the application to trap + // (and ignore?) SIGPIPE. Thanks to Amos Shapira for reminding me + // of this. + + // Starting at the beginning of the buffer, send as much data as + // there is waiting. send guarantees that all of the data will be + // sent or an error will be returned. + + if (this->send (pbase (), pptr () - pbase ()) == -1) + return EOF; + + // Now that we've sent everything in the output buffer, we reset the + // buffer pointers to appear empty. + setp (base (), ebuf ()); + + return 0; +} + +int +ACE_Streambuf::get_one_byte (void) +{ + this->timeout_ = 0; + + // The recv function will return immediately if there is no data + // waiting. So, we use recv_n to wait for exactly one byte to come + // from the peer. Later, we can use recv to see if there is + // anything else in the buffer. (Ok, we could use flags to tell it + // to block but I like this better.) + + if (this->recv_n (base (), 1, MSG_PEEK, this->recv_timeout_) != 1) + { + if (errno == ETIME) + this->timeout_ = 1; + return EOF; + } + else + return 1; +} + +// This will be called when the read (get) buffer has been exhausted +// (ie -- gptr == egptr). + +int +ACE_Streambuf::fillbuf (void) +{ + // Invoke recv_n to get exactly one byte from the remote. This will + // block until something shows up. + + if (get_one_byte () == EOF) + return EOF; + + // Now, get whatever else may be in the buffer. This will return if + // there is nothing in the buffer. + + int bc = this->recv (base (), blen (), this->recv_timeout_); + + // recv will give us -1 if there was a problem. If there was + // nothing waiting to be read, it will give us 0. That isn't an + // error. + + if (bc < 0) + { + if (errno == ETIME) + this->timeout_ = 1; + return EOF; + } + + // Move the get pointer to reflect the number of bytes we just read. + + setg (base (), base (), base () + bc); + + // Return the byte-read-count including the one from . + return bc; +} + +ACE_Streambuf::ACE_Streambuf (u_int streambuf_size, int io_mode) + : eback_saved_ (0), // to avoid Purify UMR + pbase_saved_ (0), // to avoid Purify UMR + get_mode_ (1), + put_mode_ (2), + mode_ (io_mode), + streambuf_size_ (streambuf_size), + recv_timeout_ (0) +{ + (void)reset_get_buffer (); + (void)reset_put_buffer (); +} + +u_int +ACE_Streambuf::streambuf_size (void) +{ + return streambuf_size_; +} + +// Return the number of bytes not yet gotten. eback + get_waiting = +// gptr. + +u_int +ACE_Streambuf::get_waiting (void) +{ + return this->gptr_saved_ - this->eback_saved_; +} + +// Return the number of bytes in the get area (includes some already +// gotten); eback + get_avail = egptr. + +u_int +ACE_Streambuf::get_avail (void) +{ + return this->egptr_saved_ - this->eback_saved_; +} + +// Return the number of bytes to be 'put' onto the stream media. +// pbase + put_avail = pptr. + +u_int +ACE_Streambuf::put_avail (void) +{ + return this->pptr_saved_ - this->pbase_saved_; +} + +// Typical usage: +// +// u_int newGptr = otherStream->get_waiting (); +// u_int newEgptr = otherStream->get_avail (); +// char * newBuf = otherStream->reset_get_buffer (); +// char * oldgetbuf = myStream->reset_get_buffer (newBuf, otherStream->streambuf_size (), newGptr, newEgptr); +// +// 'myStream' now has the get buffer of 'otherStream' and can use it in any way. +// 'otherStream' now has a new, empty get buffer. + +char * +ACE_Streambuf::reset_get_buffer (char *newBuffer, + u_int _streambuf_size, + u_int _gptr, + u_int _egptr) +{ + char * rval = this->eback_saved_; + + // The get area is where the iostream will get data from. This is + // our read buffer. There are three pointers which describe the + // read buffer: + // + // eback () - The beginning of the buffer. Also the furthest + // point at which putbacks can be done. Hence the name. + // + // gptr () - Where the next character is to be got from. + // + // egptr () - One position beyond the last get-able character. + // + // So that we can switch quicky from read to write mode without + // any data copying, we keep copies of these three pointers in + // the variables below. Initially, they all point to the beginning + // of our read-dedicated buffer. + // + if (newBuffer) + { + if (streambuf_size_ != _streambuf_size) + return 0; + this->eback_saved_ = newBuffer; + } + else + ACE_NEW_RETURN (this->eback_saved_, + char[streambuf_size_], + 0); + + this->gptr_saved_ = this->eback_saved_ + _gptr; + this->egptr_saved_ = this->eback_saved_ + _egptr; + + // Disable the get area initially. This will cause underflow to be + // invoked on the first get operation. + setg (0, 0, 0); + + reset_base (); + + return rval; +} + +// Typical usage: +// +// u_int newPptr = otherStream->put_avail (); +// char * newBuf = otherStream->reset_put_buffer (); +// char * oldputbuf = otherStream->reset_put_buffer (newBuf, otherStream->streambuf_size (), newPptr); + +char * +ACE_Streambuf::reset_put_buffer (char *newBuffer, + u_int _streambuf_size, + u_int _pptr) +{ + char *rval = this->pbase_saved_; + + // The put area is where the iostream will put data that needs to be + // sent to the peer. This becomes our write buffer. The three + // pointers which maintain this area are: + // + // pbase () - The beginning of the put area. + // + // pptr () - Where the next character is to be put. + // + // epptr () - One beyond the last valid position for putting. + // + // Again to switch quickly between modes, we keep copies of + // these three pointers. + // + if (newBuffer) + { + if (streambuf_size_ != _streambuf_size) + return 0; + this->pbase_saved_ = newBuffer; + } + else + ACE_NEW_RETURN (this->pbase_saved_, + char[streambuf_size_], + 0); + + this->pptr_saved_ = this->pbase_saved_ + _pptr; + this->epptr_saved_ = this->pbase_saved_ + streambuf_size_; + + // Disable the put area. Overflow will be called by the first call + // to any put operator. + setp (0, 0); + + reset_base (); + + return rval; +} + +void +ACE_Streambuf::reset_base (void) +{ + // Until we experience the first get or put operation, we do not + // know what our current IO mode is. + this->cur_mode_ = 0; + + // The common area used for reading and writting is called "base". + // We initialize it this way so that the first get/put operation + // will have to "allocate" base. This allocation will set base to + // the appropriate specific buffer and set the mode to the correct + // value. + setb (0, 0); +} + +// If the default allocation strategey were used the common buffer +// would be deleted when the object destructs. Since we are providing +// separate read/write buffers, it is up to us to manage their memory. + +ACE_Streambuf::~ACE_Streambuf (void) +{ + delete [] this->eback_saved_; + delete [] this->pbase_saved_; +} + +u_char ACE_Streambuf::timeout (void) +{ + u_char rval = this->timeout_; + this->timeout_ = 0; + return rval; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* !ACE_LACKS_ACE_IOSTREAM */ +#endif /* ACE_IOSTREAM_CPP */ diff --git a/ACE/ace/IOStream.h b/ACE/ace/IOStream.h new file mode 100644 index 00000000000..c8b3f00c541 --- /dev/null +++ b/ACE/ace/IOStream.h @@ -0,0 +1,512 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file IOStream.h + * + * $Id$ + * + * @author James CE Johnson + * @author Jim Crossley + */ +//============================================================================= + +#ifndef ACE_IOSTREAM_H +#define ACE_IOSTREAM_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +// Needed on Windows for streambuf +// FUZZ: disable check_for_streams_include +#include "ace/streams.h" + +// This is a temporary restriction - ACE_IOStream is only enabled if the +// compiler does not supply the standard C++ library (and standard iostreams) +// or, if it does, the platform is explicitly set to use old iostreams +// by its config.h file. +// This restriction is recorded in Bugzilla entry 857. +#if defined (ACE_HAS_STANDARD_CPP_LIBRARY) && (ACE_HAS_STANDARD_CPP_LIBRARY == 1) +# if !defined (ACE_USES_OLD_IOSTREAMS) && !defined (ACE_LACKS_ACE_IOSTREAM) +# define ACE_LACKS_ACE_IOSTREAM +# endif /* !ACE_USES_OLD_IOSTREAMS && !ACE_LACKS_ACE_IOSTREAM */ +#endif /* ACE_HAS_STANDARD_CPP_LIBRARY */ + +#if !defined (ACE_LACKS_ACE_IOSTREAM) + +# if defined (ACE_HAS_STRING_CLASS) +# if defined (ACE_WIN32) && defined (_MSC_VER) +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef CString ACE_IOStream_String; +ACE_END_VERSIONED_NAMESPACE_DECL +# else +# if !defined (ACE_HAS_STDCPP_STL_INCLUDES) +#include /**/ +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef String ACE_IOStream_String; +ACE_END_VERSIONED_NAMESPACE_DECL +# else +# include /**/ + +# if defined(ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB) +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef std::string ACE_IOStream_String; +ACE_END_VERSIONED_NAMESPACE_DECL +# else +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef string ACE_IOStream_String; +ACE_END_VERSIONED_NAMESPACE_DECL +# endif /* ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB */ +# endif /* ! ACE_HAS_STDCPP_STL_INCLUDES */ +# endif /* ACE_WIN32 && defined (_MSC_VER) */ + +# if defined (__DECCXX_VER) +# if __DECCXX_VER < 50700000 +# include /**/ +# else +# include /**/ +# endif /* __DECCXX_VER < 50700000 */ +# endif /* __DECCXX_VER */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_Export ACE_Quoted_String : public ACE_IOStream_String +{ +public: + inline ACE_Quoted_String (void) { *this = ""; } + inline ACE_Quoted_String (const char *c) { *this = ACE_IOStream_String (c); } + inline ACE_Quoted_String (const ACE_IOStream_String &s) { *this = s; } + inline ACE_Quoted_String &operator= (const ACE_IOStream_String& s) + { + return (ACE_Quoted_String &) ACE_IOStream_String::operator= (s); + } + inline ACE_Quoted_String &operator = (const char c) { + return (ACE_Quoted_String &) ACE_IOStream_String::operator= (c); + } + inline ACE_Quoted_String &operator = (const char *c) { + return (ACE_Quoted_String &) ACE_IOStream_String::operator= (c); + } + inline bool operator < (const ACE_Quoted_String &s) const { + return *(ACE_IOStream_String *) this < (ACE_IOStream_String) s; + } +# if defined (ACE_WIN32) && defined (_MSC_VER) + inline int length (void) { return this->GetLength (); } +# endif /* ACE_WIN32 && defined (_MSC_VER) */ +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +# endif /* ACE_HAS_STRING_CLASS */ + +# include "ace/Time_Value.h" +# include "ace/os_include/sys/os_types.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Streambuf + * + * @brief Create your custom streambuf by providing and ACE_*_Stream + * object to this template. I have tested it with + * ACE_SOCK_Stream and it should work fine for others as well. + * + * For any iostream object, the real work is done by the + * underlying streambuf class. That is what we create here. + * A streambuf has an internal buffer area into which data is + * read and written as the iostream requests and provides data. + * At some point during the read process, the iostream will + * realize that the streambuf has no more data. The underflow + * function of the streambuf is then called. + * Likewise, during the write process, the iostream will + * eventually notice that the streabuf's buffer has become full + * and will invoke the overflow function. + * The empty/full state of the read/write "buffers" are + * controled by two sets pointers. One set is dedicated to + * read, the other to write. These pointers, in turn, reference + * a common buffer that is to be shared by both read and write + * operations. It is this common buffer to which data is + * written and from which it is read. + * The common buffer is used by functions of the streambuf as + * well as the iostream. Because of this and the fact that it + * is "shared" by both read and write operators, there is a + * danger of data corruption if read and write operations are + * allowed to take place "at the same time". + * To prevent data corruption, we manipulate the read and write + * pointer sets so that the streambuf is in either a read-mode + * or write-mode at all times and can never be in both modes at + * the same time. + * In the constructor: set the read and write sets to NULL This + * causes the underflow or overflow operators to be invoked at + * the first IO activity of the iostream. + * In the underflow function we arrange for the common buffer to + * reference our read buffer and for the write pointer set to be + * disabled. If a write operation is performed by the iostream + * this will cause the overflow function to be invoked. + * In the overflow function we arrange for the common buffer to + * reference our write buffer and for the read pointer set to be + * disabled. This causes the underflow function to be invoked + * when the iostream "changes our mode". + * The overflow function will also invoke the send_n function to + * flush the buffered data to our peer. Similarly, the sync and + * syncout functions will cause send_n to be invoked to send the + * data. + * Since socket's and the like do not support seeking, there can + * be no method for "syncing" the input. However, since we + * maintain separate read/write buffers, no data is lost by + * "syncing" the input. It simply remains buffered. + */ +class ACE_Export ACE_Streambuf : public streambuf +{ +public: + + /** + * If the default allocation strategey were used the common buffer + * would be deleted when the object destructs. Since we are + * providing separate read/write buffers, it is up to us to manage + * their memory. + */ + virtual ~ACE_Streambuf (void); + + /// Get the current Time_Value pointer and provide a new one. + ACE_Time_Value *recv_timeout (ACE_Time_Value *tv = 0); + + /** + * Use this to allocate a new/different buffer for put operations. + * If you do not provide a buffer pointer, one will be allocated. + * That is the preferred method. If you do provide a buffer, the + * size must match that being used by the get buffer. If + * successful, you will receive a pointer to the current put buffer. + * It is your responsibility to delete this memory when you are done + * with it. + */ + char *reset_put_buffer (char *newBuffer = 0, + u_int _streambuf_size = 0, + u_int _pptr = 0 ); + + /// Return the number of bytes to be 'put' onto the stream media. + /// pbase + put_avail = pptr + u_int put_avail (void); + + /** + * Use this to allocate a new/different buffer for get operations. + * If you do not provide a buffer pointer, one will be allocated. + * That is the preferred method. If you do provide a buffer, the + * size must match that being used by the put buffer. If + * successful, you will receive a pointer to the current get buffer. + * It is your responsibility to delete this memory when you are done + * with it. + */ + char *reset_get_buffer (char *newBuffer = 0, + u_int _streambuf_size = 0, + u_int _gptr = 0, + u_int _egptr = 0); + + /// Return the number of bytes not yet gotten. eback + get_waiting = + /// gptr + u_int get_waiting (void); + + /// Return the number of bytes in the get area (includes some already + /// gotten); eback + get_avail = egptr + u_int get_avail (void); + + /// Query the streambuf for the size of its buffers. + u_int streambuf_size (void); + + /// Did we take an error because of an IO operation timeout? + /// @note Invoking this resets the flag. + u_char timeout (void); + +protected: + ACE_Streambuf (u_int streambuf_size, + int io_mode); + + /// Sync both input and output. See syncin/syncout below for + /// descriptions. + virtual int sync (void); + + // = Signatures for the underflow/overflow discussed above. + virtual int underflow (void); + + /// The overflow function receives the character which caused the + /// overflow. + virtual int overflow (int c = EOF); + + /// Resets the pointer and streambuf mode. This is used + /// internally when get/put buffers are allocatd. + void reset_base (void); + +protected: + // = Two pointer sets for manipulating the read/write areas. + char *eback_saved_; + char *gptr_saved_; + char *egptr_saved_; + char *pbase_saved_; + char *pptr_saved_; + char *epptr_saved_; + + // = With cur_mode_ we keep track of our current IO mode. + + // This helps us to optimize the underflow/overflow functions. + u_char cur_mode_; + const u_char get_mode_; + const u_char put_mode_; + + /// mode tells us if we're working for an istream, ostream, or + /// iostream. + int mode_; + + /// This defines the size of the input and output buffers. It can be + /// set by the object constructor. + const u_int streambuf_size_; + + /// Did we take an error because of an IO operation timeout? + u_char timeout_; + + /// We want to allow the user to provide Time_Value pointers to + /// prevent infinite blocking while waiting to receive data. + ACE_Time_Value recv_timeout_value_; + ACE_Time_Value *recv_timeout_; + + /** + * syncin is called when the input needs to be synced with the + * source file. In a filebuf, this results in the system + * call being used. We can't do that on socket-like connections, so + * this does basically nothing. That's safe because we have a + * separate read buffer to maintain the already-read data. In a + * filebuf, the single common buffer is used forcing the + * call. + */ + int syncin (void); + + /// syncout is called when the output needs to be flushed. This is + /// easily done by calling the peer's send_n function. + int syncout (void); + + /// flushbuf is the worker of syncout. It is a separate function + /// because it gets used sometimes in different context. + int flushbuf (void); + + /** + * fillbuf is called in a couple of places. This is the worker of + * underflow. It will attempt to fill the read buffer from the + * peer. + */ + int fillbuf (void); + + /** + * Used by fillbuf and others to get exactly one byte from the peer. + * recv_n is used to be sure we block until something is available. + * It is virtual because we really need to override it for + * datagram-derived objects. + */ + virtual int get_one_byte (void); + + /** + * Stream connections and "unconnected connections" (ie -- + * datagrams) need to work just a little differently. We derive + * custom Streambuf objects for them and provide these functions at + * that time. + */ + virtual ssize_t send (char *buf, + ssize_t len) = 0; + virtual ssize_t recv (char *buf, + ssize_t len, + ACE_Time_Value *tv = 0) = 0; + virtual ssize_t recv (char *buf, + ssize_t len, + int flags, + ACE_Time_Value *tv = 0) = 0; + virtual ssize_t recv_n (char *buf, + ssize_t len, + int flags = 0, + ACE_Time_Value *tv = 0) = 0; + + virtual ACE_HANDLE get_handle (void); + +# if defined (ACE_HAS_STANDARD_CPP_LIBRARY) && (ACE_HAS_STANDARD_CPP_LIBRARY != 0) && !defined (ACE_USES_OLD_IOSTREAMS) + char *base (void) const + { + return cur_mode_ == get_mode_ ? eback_saved_ + : cur_mode_ == put_mode_ ? pbase_saved_ + : 0; + } + char *ebuf (void) const + { + return cur_mode_ == 0 ? 0 : base () + streambuf_size_; + } + + int blen (void) const + { + return streambuf_size_; + } + + void setb (char* b, char* eb, int /* a */=0) + { + setbuf (b, (eb - b)); + } + + int out_waiting (void) + { + return pptr () - pbase (); + } +# endif /* ACE_HAS_STANDARD_CPP_LIBRARY */ +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +/////////////////////////////////////////////////////////////////////////// + +// These typedefs are provided by G++ (on some systems?) without the +// trailing '_'. Since we can't count on 'em, I've defined them to +// what GNU wants here. +// +typedef ios& (*__manip_)(ios&); +typedef istream& (*__imanip_)(istream&); +typedef ostream& (*__omanip_)(ostream&); + +// Trying to do something like is shown below instead of using the +// __*manip typedefs causes Linux do segfault when "< and functions are used. + +#define GET_SIG(MT,DT) inline virtual MT& operator>> (DT v) +# if (defined (__SUNPRO_CC) && __SUNPRO_CC > 0x510) +#define GET_CODE { \ + if (ipfx (0)) \ + { \ + (*((istream*)this)) >> (v); \ + } \ + isfx (); \ + return *this; \ + } +# else +#define GET_CODE { \ + if (ipfx (0)) \ + { \ + iostream::operator>> (v); \ + } \ + isfx (); \ + return *this; \ + } +# endif +#define GET_PROT(MT,DT,CODE) GET_SIG(MT,DT) CODE +#define GET_FUNC(MT,DT) GET_PROT(MT,DT,GET_CODE) + +// This macro defines the put operator for class MT into datatype DT. +// We will use it below to quickly override most (all?) iostream put +// operators. Notice how the and functions are used. + +#define PUT_SIG(MT,DT) inline virtual MT& operator<< (DT v) +# if (defined (__SUNPRO_CC) && __SUNPRO_CC > 0x510) +#define PUT_CODE { \ + if (opfx ()) \ + { \ + (*((ostream *) this)) << (v); \ + } \ + osfx (); \ + return *this; \ + } +# else +#define PUT_CODE { \ + if (opfx ()) \ + { \ + iostream::operator<< (v); \ + } \ + osfx (); \ + return *this; \ + } +# endif +#define PUT_PROT(MT,DT,CODE) PUT_SIG(MT,DT) CODE +#define PUT_FUNC(MT,DT) PUT_PROT(MT,DT,PUT_CODE) + + +// These are necessary in case somebody wants to derive from us and +// override one of these with a custom approach. + +# if defined (ACE_LACKS_CHAR_RIGHT_SHIFTS) +#define GET_FUNC_SET0(MT,CODE,CODE2) \ + GET_PROT(MT,short &,CODE) \ + GET_PROT(MT,u_short &,CODE) \ + GET_PROT(MT,int &,CODE) \ + GET_PROT(MT,u_int &,CODE) \ + GET_PROT(MT,long &,CODE) \ + GET_PROT(MT,u_long &,CODE) \ + GET_PROT(MT,float &,CODE) \ + GET_PROT(MT,double &,CODE) \ + inline virtual MT& operator>>(__omanip_ func) CODE2 \ + inline virtual MT& operator>>(__manip_ func) CODE2 +# else +#define GET_FUNC_SET0(MT,CODE,CODE2) \ + GET_PROT(MT,short &,CODE) \ + GET_PROT(MT,u_short &,CODE) \ + GET_PROT(MT,int &,CODE) \ + GET_PROT(MT,u_int &,CODE) \ + GET_PROT(MT,long &,CODE) \ + GET_PROT(MT,u_long &,CODE) \ + GET_PROT(MT,float &,CODE) \ + GET_PROT(MT,double &,CODE) \ + GET_PROT(MT,char &,CODE) \ + GET_PROT(MT,u_char &,CODE) \ + GET_PROT(MT,char *,CODE) \ + GET_PROT(MT,u_char *,CODE) \ + inline virtual MT& operator>>(__omanip_ func) CODE2 \ + inline virtual MT& operator>>(__manip_ func) CODE2 +# endif + +#define PUT_FUNC_SET0(MT,CODE,CODE2) \ + PUT_PROT(MT,short,CODE) \ + PUT_PROT(MT,u_short,CODE) \ + PUT_PROT(MT,int,CODE) \ + PUT_PROT(MT,u_int,CODE) \ + PUT_PROT(MT,long,CODE) \ + PUT_PROT(MT,u_long,CODE) \ + PUT_PROT(MT,float,CODE) \ + PUT_PROT(MT,double,CODE) \ + PUT_PROT(MT,char,CODE) \ + PUT_PROT(MT,u_char,CODE) \ + PUT_PROT(MT,const char *,CODE) \ + PUT_PROT(MT,u_char *,CODE) \ + PUT_PROT(MT,void *,CODE) \ + inline virtual MT& operator<<(__omanip_ func) CODE2 \ + inline virtual MT& operator<<(__manip_ func) CODE2 + +# if defined (ACE_LACKS_SIGNED_CHAR) + #define GET_FUNC_SET1(MT,CODE,CODE2) GET_FUNC_SET0(MT,CODE,CODE2) + #define PUT_FUNC_SET1(MT,CODE,CODE2) PUT_FUNC_SET0(MT,CODE,CODE2) +# else + #define GET_FUNC_SET1(MT,CODE,CODE2) \ + GET_PROT(MT,signed char &,CODE) \ + GET_PROT(MT,signed char *,CODE) \ + GET_FUNC_SET0(MT,CODE,CODE2) + + #define PUT_FUNC_SET1(MT,CODE,CODE2) \ + PUT_FUNC(MT,signed char) \ + PUT_FUNC(MT,const signed char *) \ + PUT_FUNC_SET0(MT,CODE,CODE2) +# endif /* ACE_LACKS_SIGNED_CHAR */ + +#define GET_MANIP_CODE { if (ipfx ()) { (*func) (*this); } isfx (); return *this; } +#define PUT_MANIP_CODE { if (opfx ()) { (*func) (*this); } osfx (); return *this; } + +#define GET_FUNC_SET(MT) GET_FUNC_SET1(MT,GET_CODE,GET_MANIP_CODE) +#define PUT_FUNC_SET(MT) PUT_FUNC_SET1(MT,PUT_CODE,PUT_MANIP_CODE) +#define GETPUT_FUNC_SET(MT) GET_FUNC_SET(MT) PUT_FUNC_SET(MT) + +#define GET_SIG_SET(MT) GET_FUNC_SET1(MT,= 0;,= 0;) +#define PUT_SIG_SET(MT) PUT_FUNC_SET1(MT,= 0;,= 0;) +#define GETPUT_SIG_SET(MT) GET_SIG_SET(MT) PUT_SIG_SET(MT) + +// Include the templates here. +# include "ace/IOStream_T.h" +#endif /* !ACE_LACKS_ACE_IOSTREAM && ACE_USES_OLD_IOSTREAMS */ + +#include /**/ "ace/post.h" +#endif /* ACE_IOSTREAM_H */ diff --git a/ACE/ace/IOStream_T.cpp b/ACE/ace/IOStream_T.cpp new file mode 100644 index 00000000000..082274256fe --- /dev/null +++ b/ACE/ace/IOStream_T.cpp @@ -0,0 +1,247 @@ +// $Id$ + +#ifndef ACE_IOSTREAM_T_CPP +#define ACE_IOSTREAM_T_CPP + +#include "ace/IOStream_T.h" +#include "ace/OS_Memory.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (ACE_LACKS_ACE_IOSTREAM) + +#if !defined (__ACE_INLINE__) +#include "ace/IOStream_T.inl" +#endif /* !__ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// We will be given a STREAM by the iostream object which creates us. +// See the ACE_IOStream template for how that works. Like other +// streambuf objects, we can be input-only, output-only or both. + +template +ACE_Streambuf_T::ACE_Streambuf_T (STREAM *peer, + u_int streambuf_size, + int io_mode) + : ACE_Streambuf (streambuf_size, io_mode), + peer_ (peer) +{ + // A streambuf allows for unbuffered IO where every character is + // read as requested and written as provided. To me, this seems + // terribly inefficient for socket-type operations, so I've disabled + // it. All of the work would be done by the underflow/overflow + // functions anyway and I haven't implemented anything there to + // support unbuffered IO. + +#if !defined (ACE_LACKS_UNBUFFERED_STREAMBUF) + this->unbuffered (0); +#endif /* ! ACE_LACKS_UNBUFFERED_STREAMBUF */ + + // Linebuffered is similar to unbuffered. Again, I don't have any + // need for this and I don't see the advantage. I believe this + // would have to be supported by underflow/overflow to be effective. +#if !defined (ACE_LACKS_LINEBUFFERED_STREAMBUF) + this->linebuffered (0); +#endif /* ! ACE_LACKS_LINEBUFFERED_STREAMBUF */ +} + +template ssize_t +ACE_Streambuf_T::send (char *buf, ssize_t len) +{ + return peer_->send_n (buf,len); +} + +template ssize_t +ACE_Streambuf_T::recv (char *buf, + ssize_t len, + ACE_Time_Value *tv) +{ + return this->recv (buf, len, 0, tv); +} + +template ssize_t +ACE_Streambuf_T::recv (char *buf, + ssize_t len, + int flags, + ACE_Time_Value * tv) +{ + this->timeout_ = 0; + errno = ESUCCESS; + ssize_t rval = peer_->recv (buf, len, flags, tv); + if (errno == ETIME) + this->timeout_ = 1; + return rval; +} + +template ssize_t +ACE_Streambuf_T::recv_n (char *buf, + ssize_t len, + int flags, + ACE_Time_Value *tv) +{ + this->timeout_ = 0; + errno = ESUCCESS; + ssize_t rval = peer_->recv_n (buf, len, flags, tv); + if (errno == ETIME) + this->timeout_ = 1; + return rval; +} + +template ACE_HANDLE +ACE_Streambuf_T::get_handle (void) +{ + return peer_ ? peer_->get_handle () : 0; +} + +// The typical constructor. This will initiailze your STREAM and then +// setup the iostream baseclass to use a custom streambuf based on +// STREAM. + +template +ACE_IOStream::ACE_IOStream (STREAM &stream, + u_int streambuf_size) + : iostream (0), + STREAM (stream) +{ + ACE_NEW (streambuf_, + ACE_Streambuf_T ((STREAM *) this, + streambuf_size)); + iostream::init (this->streambuf_); +} + +template +ACE_IOStream::ACE_IOStream (u_int streambuf_size) + : iostream (0) +{ + ACE_NEW (this->streambuf_, + ACE_Streambuf_T ((STREAM *) this, + streambuf_size)); + iostream::init (this->streambuf_); +} + +// We have to get rid of the streambuf_ ourselves since we gave it to +// iostream () + +template +ACE_IOStream::~ACE_IOStream (void) +{ + delete this->streambuf_; +} + +// The only ambituity in the multiple inheritance is the close () +// function. + +template int +ACE_IOStream::close (void) +{ + return STREAM::close (); +} + +template ACE_IOStream & +ACE_IOStream::operator>> (ACE_Time_Value *&tv) +{ + ACE_Time_Value *old_tv = this->streambuf_->recv_timeout (tv); + tv = old_tv; + return *this; +} + +#if defined (ACE_HAS_STRING_CLASS) + +// A simple string operator. The base iostream has 'em for char* but +// that isn't always the best thing for a String. If we don't provide +// our own here, we may not get what we want. + +template ACE_IOStream & +ACE_IOStream::operator>> (ACE_IOStream_String &v) +{ + if (ipfx0 ()) + { + char c; + this->get (c); + + for (v = c; + this->get (c) && !isspace (c); + v += c) + continue; + } + + isfx (); + + return *this; +} + +template ACE_IOStream & +ACE_IOStream::operator<< (ACE_IOStream_String &v) +{ + if (opfx ()) + { +#if defined (ACE_WIN32) && defined (_MSC_VER) + for (int i = 0; i < v.GetLength (); ++i) +#else + for (u_int i = 0; i < (u_int) v.length (); ++i) +#endif /* ACE_WIN32 && defined (_MSC_VER) */ + this->put (v[i]); + } + + osfx (); + + return *this; +} + +// A more clever put operator for strings that knows how to deal with +// quoted strings containing back-quoted quotes. + +template STREAM & +operator>> (STREAM &stream, + ACE_Quoted_String &str) +{ + char c; + + if (!(stream >> c)) // eat space up to the first char + // stream.set (ios::eofbit|ios::failbit); + return stream; + + str = ""; // Initialize the string + + // if we don't have a quote, append until we see space + if (c != '"') + for (str = c; stream.get (c) && !isspace (c); str += c) + continue; + else + for (; stream.get (c) && c != '"'; str += c) + if (c == '\\') + { + stream.get (c); + if (c != '"') + str += '\\'; + } + + return stream; +} + +template STREAM & +operator<< (STREAM &stream, + ACE_Quoted_String &str) +{ + stream.put ('"'); + + for (u_int i = 0; i < str.length (); ++i) + { + if (str[i] == '"') + stream.put ('\\'); + stream.put (str[i]); + } + + stream.put ('"'); + + return stream; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_STRING_CLASS */ +#endif /* ACE_LACKS_ACE_IOSTREAM */ +#endif /* ACE_IOSTREAM_T_CPP */ diff --git a/ACE/ace/IOStream_T.h b/ACE/ace/IOStream_T.h new file mode 100644 index 00000000000..9bf90cee122 --- /dev/null +++ b/ACE/ace/IOStream_T.h @@ -0,0 +1,297 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file IOStream_T.h + * + * $Id$ + * + * @author James CE Johnson + * @author Jim Crossley + * + * This file should not be included directly by application + * code. Instead, it should include "ace/IOStream.h". That's because + * we only put some conditional compilations in that file. + */ +//============================================================================= + +#ifndef ACE_IOSTREAM_T_H +#define ACE_IOSTREAM_T_H +#include /**/ "ace/pre.h" + +#include "ace/IOStream.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (ACE_LACKS_ACE_IOSTREAM) + +# include "ace/INET_Addr.h" +# include "ace/Global_Macros.h" + +# if defined (ACE_LACKS_IOSTREAM_FX) +# include "ace/os_include/os_ctype.h" +# endif /**/ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +# if defined (ACE_HAS_STRING_CLASS) +template STREAM & operator>> (STREAM &stream, ACE_Quoted_String &str); +template STREAM & operator<< (STREAM &stream, ACE_Quoted_String &str); +# endif /* defined (ACE_HAS_STRING_CLASS) */ + +template +class ACE_Streambuf_T : public ACE_Streambuf +{ +public: + /** + * We will be given a STREAM by the iostream object which creates + * us. See the ACE_IOStream template for how that works. Like + * other streambuf objects, we can be input-only, output-only or + * both. + */ + ACE_Streambuf_T (STREAM *peer, + u_int streambuf_size = ACE_STREAMBUF_SIZE, + int io_mode = ios::in | ios::out); + + virtual ssize_t send (char *buf, ssize_t len); + + virtual ssize_t recv (char *buf, + ssize_t len, + ACE_Time_Value *tv = 0); + + virtual ssize_t recv (char *buf, + ssize_t len, + int flags, + ACE_Time_Value * tv = 0); + + virtual ssize_t recv_n (char *buf, + ssize_t len, + int flags = 0, + ACE_Time_Value *tv = 0); + +protected: + virtual ACE_HANDLE get_handle (void); + + /// This will be our ACE_SOCK_Stream or similar object. + STREAM *peer_; +}; + +/** + * @class ACE_IOStream + * + * @brief A template adapter for creating an iostream-like object using + * an ACE IPC Stream for the actual I/O. Iostreams use an + * underlying streambuf object for the IO interface. The + * iostream class and derivatives provide you with a host of + * convenient operators that access the streambuf. + * + * We inherit all characteristics of iostream and your + * class. When you create a new class from this template, you + * can use it anywhere you would have used your original + * class. + * To create an iostream for your favorite ACE IPC class (e.g., + * ACE_SOCK_Stream), feed that class to this template's + * parameter, e.g., + * typedef ACE_Svc_Handler + * Service_Handler; + * Because the operators in the iostream class are not virtual, + * you cannot easily provide overloads in your custom + * ACE_IOStream classes. To make these things work correctly, + * you need to overload ALL operators of the ACE_IOStream you + * create. I've attempted to do that here to make things easier + * for you but there are no guarantees. + * In the iostream.cpp file is an example of why it is necessary + * to overload all of the get/put operators when you want to + * customize only one or two. + */ +template +class ACE_IOStream : public iostream, public STREAM +{ +public: + // = Initialization and termination methods. + ACE_IOStream (STREAM &stream, + u_int streambuf_size = ACE_STREAMBUF_SIZE); + + /** + * The default constructor. This will initiailze your STREAM and + * then setup the iostream baseclass to use a custom streambuf based + * on STREAM. + */ + ACE_IOStream (u_int streambuf_size = ACE_STREAMBUF_SIZE); + + /// We have to get rid of the ourselves since we gave it + /// to the base class; + virtual ~ACE_IOStream (void); + + /// The only ambituity in the multiple inheritance is the + /// function. + virtual int close (void); + + /** + * Returns 1 if we're at the end of the , i.e., if the + * connection has closed down or an error has occurred, else 0. + * Under the covers, calls the streambuf's @a timeout function + * which will reset the timeout flag. As as result, you should save + * the return of and check it instead of calling + * successively. + */ + int eof (void) const; + +# if defined (ACE_HAS_STRING_CLASS) + /** + * A simple string operator. The base has them for char* + * but that isn't always the best thing for a . If we don't + * provide our own here, we may not get what we want. + */ + virtual ACE_IOStream &operator>> (ACE_IOStream_String &v); + + /// The converse of the operator. + virtual ACE_IOStream &operator<< (ACE_IOStream_String &v); + +# endif /* ACE_HAS_STRING_CLASS */ + // = Using the macros to provide get/set operators. + GETPUT_FUNC_SET (ACE_IOStream) + +# if defined (ACE_LACKS_IOSTREAM_FX) + virtual int ipfx (int noskip = 0) + { + if (good ()) + { + if (tie () != 0) + tie ()->flush (); + if (!noskip && flags () & skipws) + { + int ch; + while (isspace (ch = rdbuf ()->sbumpc ())) + continue; + if (ch != EOF) + rdbuf ()->sputbackc (ch); + } + if (good ()) + return 1; + } +# if !defined (ACE_WIN32) + // MS VC++ 5.0 doesn't declare setstate. + setstate (failbit); +# endif /* !ACE_WIN32 */ + return (0); + } + virtual int ipfx0 (void) { return ipfx (0); } // Optimized ipfx(0) + virtual int ipfx1 (void) // Optimized ipfx(1) + { + if (good ()) + { + if (tie () != 0) + tie ()->flush (); + if (good ()) + return 1; + } +# if !defined (ACE_WIN32) + // MS VC++ 5.0 doesn't declare setstate. + setstate (failbit); +# endif /* !ACE_WIN32 */ + return (0); + } + virtual void isfx (void) { return; } + virtual int opfx (void) + { + if (good () && tie () != 0) + tie ()->flush (); + return good (); + } + virtual void osfx (void) { if (flags () & unitbuf) flush (); } +# else +# if defined (__GNUC__) + virtual int ipfx0 (void) { return iostream::ipfx0 (); } // Optimized ipfx(0) + virtual int ipfx1 (void) { return iostream::ipfx1 (); } // Optimized ipfx(1) +# else + virtual int ipfx0 (void) { return iostream::ipfx (0); } + virtual int ipfx1 (void) { return iostream::ipfx (1); } +# endif /* __GNUC__ */ + virtual int ipfx (int need = 0) { return iostream::ipfx (need); } + virtual void isfx (void) { iostream::isfx (); } + virtual int opfx (void) { return iostream::opfx (); } + virtual void osfx (void) { iostream::osfx (); } +# endif /* ACE_LACKS_IOSTREAM_FX */ + + /// Allow the programmer to provide a timeout for read operations. + /// Give it a pointer to NULL to block forever. + ACE_IOStream & operator>> (ACE_Time_Value *&tv); + +protected: + /// This is where all of the action takes place. The streambuf_ is + /// the interface to the underlying STREAM. + ACE_Streambuf_T *streambuf_; + +private: + // = Private methods. + + // We move these into the private section so that they cannot be + // used by the application programmer. This is necessary because + // streambuf_ will be buffering IO on the STREAM object. If these + // functions were used in your program, there is a danger of getting + // the datastream out of sync. + ACE_UNIMPLEMENTED_FUNC (ssize_t send (...)) + ACE_UNIMPLEMENTED_FUNC (ssize_t recv (...)) + ACE_UNIMPLEMENTED_FUNC (ssize_t send_n (...)) + ACE_UNIMPLEMENTED_FUNC (ssize_t recv_n (...)) +}; + +/** + * @class ACE_SOCK_Dgram_SC + * + * @brief "Dgram_SC" is short for "Datagram Self-Contained." + * + * Datagrams don't have the notion of a "peer". Each send and + * receive on a datagram can go to a different peer if you want. + * If you're using datagrams for stream activity, you probably + * want 'em all to go to (and come from) the same place. That's + * what this class is for. Here, we keep an address object so + * that we can remember who last sent us data. When we write + * back, we're then able to write back to that same address. + */ +template +class ACE_SOCK_Dgram_SC : public STREAM +{ +public: + ACE_SOCK_Dgram_SC (void); + ACE_SOCK_Dgram_SC (STREAM &source, + ACE_INET_Addr &dest); + ssize_t send_n (char *buf, ssize_t len); + ssize_t recv (char *buf, + ssize_t len, + ACE_Time_Value *tv = 0); + ssize_t recv (char *buf, + ssize_t len, + int flags, + ACE_Time_Value *tv = 0); + ssize_t recv_n (char *buf, + ssize_t len, + int flags = 0, + ACE_Time_Value *tv = 0); + int get_remote_addr (ACE_INET_Addr &addr) const; + +protected: + ACE_INET_Addr peer_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +# if defined (__ACE_INLINE__) +# include "ace/IOStream_T.inl" +# endif /* __ACE_INLINE__ */ + +# if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +# include "ace/IOStream_T.cpp" +# endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +# if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +# pragma implementation ("IOStream_T.cpp") +# endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ +#endif /* ACE_LACKS_ACE_IOSTREAM */ + +#include /**/ "ace/post.h" +#endif /* ACE_IOSTREAM_T_H */ diff --git a/ACE/ace/IOStream_T.inl b/ACE/ace/IOStream_T.inl new file mode 100644 index 00000000000..12cf0fcffbf --- /dev/null +++ b/ACE/ace/IOStream_T.inl @@ -0,0 +1,123 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/Handle_Set.h" +#include "ace/OS_NS_errno.h" +#include "ace/OS_NS_sys_select.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE int +ACE_IOStream::eof (void) const +{ + // Get the timeout value of the streambuf + ACE_Time_Value *timeout = this->streambuf_->recv_timeout (0); + + // Reset the timeout value of the streambuf. + (void) this->streambuf_->recv_timeout (timeout); + + char c; + int rval = this->streambuf_->recv_n (&c, + sizeof c, + MSG_PEEK, + timeout); + + // Timeout, not an eof + if (this->streambuf_->timeout()) + return 0; + + // No timeout, got enough data: not eof + if (rval == sizeof(char)) + return 0; + + // No timeout, not enough data: definately eof + return 1; +} + +template ACE_INLINE +ACE_SOCK_Dgram_SC::ACE_SOCK_Dgram_SC (void) +{ +} + +template ACE_INLINE +ACE_SOCK_Dgram_SC::ACE_SOCK_Dgram_SC (STREAM &source, + ACE_INET_Addr &dest) + : STREAM (source), + peer_ (dest) +{ +} + +template ACE_INLINE ssize_t +ACE_SOCK_Dgram_SC::send_n (char *buf, + ssize_t len) +{ + return STREAM::send (buf, len, peer_); +} + +template ACE_INLINE ssize_t +ACE_SOCK_Dgram_SC::recv (char *buf, + ssize_t len, + ACE_Time_Value *tv) +{ + //FUZZ: disable check_for_lack_ACE_OS + return recv (buf, len, 0, tv); + //FUZZ: enable check_for_lack_ACE_OS +} + +template ACE_INLINE ssize_t +ACE_SOCK_Dgram_SC::recv (char *buf, + ssize_t len, + int flags, + ACE_Time_Value *tv) +{ + if (tv != 0) + { + ACE_HANDLE handle = this->get_handle (); + ACE_Handle_Set handle_set; + + handle_set.set_bit (handle); + + switch (ACE_OS::select (int (handle) + 1, + (fd_set *) handle_set, // read_fds. + (fd_set *) 0, // write_fds. + (fd_set *) 0, // exception_fds. + tv)) + { + case 0: + errno = ETIME; + case -1: + return -1; + default: + ; // Do the 'recv' below + } + } + + int rval = STREAM::recv (buf, len, peer_, flags); +#if defined (ACE_WIN32) + if (rval == SOCKET_ERROR) + if (::WSAGetLastError () == WSAEMSGSIZE) + if (ACE_BIT_ENABLED (flags, MSG_PEEK)) + rval = len; +#endif /* ACE_WIN32 */ + return rval < len ? rval : len; +} + +template ACE_INLINE ssize_t +ACE_SOCK_Dgram_SC::recv_n (char *buf, + ssize_t len, + int flags, + ACE_Time_Value *tv) +{ + int rval = this->recv (buf, len, flags, tv); + return rval; +} + +template ACE_INLINE int +ACE_SOCK_Dgram_SC::get_remote_addr (ACE_INET_Addr &addr) const +{ + addr = peer_; + return 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/IO_Cntl_Msg.cpp b/ACE/ace/IO_Cntl_Msg.cpp new file mode 100644 index 00000000000..9d64f05dd66 --- /dev/null +++ b/ACE/ace/IO_Cntl_Msg.cpp @@ -0,0 +1,51 @@ +// $Id$ + +#include "ace/IO_Cntl_Msg.h" + +#if !defined (__ACE_INLINE__) +#include "ace/IO_Cntl_Msg.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, IO_Cntl_Msg, "$Id$") + +#if 0 +// This is not meant to be used, it's just a place holder... + +#if !defined (__ACE_INLINE__) +#include "ace/Intrusive_List.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Forward decl +template class ACE_Module; + +/** + * @class ACE_Module_Link + * + * @brief Data structure used to link two modules together + */ +class ACE_Module_Link +{ +public: + ACE_Module_Link (ACE_Module *m1, ACE_Module *m2): mod_upper_ (m1), mod_lower_ (m2), count_ (0) {} + + ACE_Module *upper (void) { return this->mod_upper_; } + void upper (ACE_Module *u) { this->mod_upper_ = u; } + + ACE_Module *lower (void) { return this->mod_lower_; } + void lower (ACE_Module *l) { this->mod_lower_ = l; } + + int count (void) const { return this->count_; } + void count (int c) { this->count_ = c; } + +private: + ACE_Module *mod_upper_; + ACE_Module *mod_lower_; + int count_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif + diff --git a/ACE/ace/IO_Cntl_Msg.h b/ACE/ace/IO_Cntl_Msg.h new file mode 100644 index 00000000000..7101284c9f7 --- /dev/null +++ b/ACE/ace/IO_Cntl_Msg.h @@ -0,0 +1,112 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file IO_Cntl_Msg.h + * + * $Id$ + * + * @author Doug Schmidt + */ +//========================================================================== + + +#ifndef ACE_IO_CNTL_MSG_H +#define ACE_IO_CNTL_MSG_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" +#include "ace/os_include/os_stddef.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_IO_Cntl_Msg + * + * @brief Data format for IOCTL messages + */ +class ACE_Export ACE_IO_Cntl_Msg +{ +public: + enum + { + /// Set the low water mark. + SET_LWM = 1, + /// Get the low water mark. + GET_LWM = 2, + /// Set the high water mark. + SET_HWM = 3, + /// Get the high water mark. + GET_HWM = 4, + /// Link modules + MOD_LINK = 5, + /// Unlink modules + MOD_UNLINK = 6 + }; + + typedef unsigned short ACE_IO_Cntl_Cmds; + + // = Initialization method. + /// Initialize the control message. + ACE_IO_Cntl_Msg (ACE_IO_Cntl_Cmds c); + + // = Get/set methods + + /// Get command. + ACE_IO_Cntl_Cmds cmd (void); + + /// Set command. + void cmd (ACE_IO_Cntl_Cmds c); + + /// Get count. + size_t count (void); + + /// Set count. + void count (size_t c); + + /// Get error. + int error (void); + + /// Set error. + void error (int e); + + /// Get return value. + int rval (void); + + /// Set return value. + void rval (int r); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// Command. + ACE_IO_Cntl_Cmds cmd_; + + /// Count. + size_t count_; + + /// Error. + int error_; + + /// Return value + int rval_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/IO_Cntl_Msg.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* ACE_IO_CNTL_MSG_H */ diff --git a/ACE/ace/IO_Cntl_Msg.inl b/ACE/ace/IO_Cntl_Msg.inl new file mode 100644 index 00000000000..0fbf4190f35 --- /dev/null +++ b/ACE/ace/IO_Cntl_Msg.inl @@ -0,0 +1,61 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_IO_Cntl_Msg::ACE_IO_Cntl_Msg (ACE_IO_Cntl_Cmds c) +{ + this->cmd_ = c; +} + +ACE_INLINE ACE_IO_Cntl_Msg::ACE_IO_Cntl_Cmds +ACE_IO_Cntl_Msg::cmd (void) +{ + return this->cmd_; +} + +ACE_INLINE void +ACE_IO_Cntl_Msg::cmd (ACE_IO_Cntl_Cmds c) +{ + this->cmd_ = c; +} + +ACE_INLINE size_t +ACE_IO_Cntl_Msg::count (void) +{ + return this->count_; +} + +ACE_INLINE void +ACE_IO_Cntl_Msg::count (size_t c) +{ + this->count_ = c; +} + +ACE_INLINE int +ACE_IO_Cntl_Msg::error (void) +{ + return this->error_; +} + +ACE_INLINE void +ACE_IO_Cntl_Msg::error (int e) +{ + this->error_ = e; +} + +ACE_INLINE int +ACE_IO_Cntl_Msg::rval (void) +{ + return this->rval_; +} + +ACE_INLINE void +ACE_IO_Cntl_Msg::rval (int r) +{ + this->rval_ = r; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/IO_SAP.cpp b/ACE/ace/IO_SAP.cpp new file mode 100644 index 00000000000..0e3e2ea73dc --- /dev/null +++ b/ACE/ace/IO_SAP.cpp @@ -0,0 +1,142 @@ +// $Id$ + +#include "ace/IO_SAP.h" + +#include "ace/Log_Msg.h" +#include "ace/OS_NS_unistd.h" +#include "ace/OS_NS_errno.h" +#include "ace/OS_NS_fcntl.h" +#include "ace/os_include/os_signal.h" + +#if !defined (__ACE_INLINE__) +#include "ace/IO_SAP.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, IO_SAP, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_IO_SAP) + +// This is the do-nothing constructor. It does not perform a +// ACE_OS::open system call. + +ACE_IO_SAP::ACE_IO_SAP (void) + : handle_ (ACE_INVALID_HANDLE) +{ + ACE_TRACE ("ACE_IO_SAP::ACE_IO_SAP"); +} + +void +ACE_IO_SAP::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_IO_SAP::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("handle_ = %d"), this->handle_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\npid_ = %d"), this->pid_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +// Cache for the process ID. +pid_t ACE_IO_SAP::pid_ = 0; + +int +ACE_IO_SAP::enable (int value) const +{ + ACE_TRACE ("ACE_IO_SAP::enable"); + /* First-time in initialization. */ + if (ACE_IO_SAP::pid_ == 0) + ACE_IO_SAP::pid_ = ACE_OS::getpid (); + + switch (value) + { +#if defined (SIGURG) + case SIGURG: + case ACE_SIGURG: +#if defined (F_SETOWN) + return ACE_OS::fcntl (this->handle_, + F_SETOWN, + ACE_IO_SAP::pid_); +#else + ACE_NOTSUP_RETURN (-1); +#endif /* F_SETOWN */ +#endif /* SIGURG */ +#if defined (SIGIO) + case SIGIO: + case ACE_SIGIO: +#if defined (F_SETOWN) && defined (FASYNC) + if (ACE_OS::fcntl (this->handle_, + F_SETOWN, + ACE_IO_SAP::pid_) == -1 + || ACE::set_flags (this->handle_, + FASYNC) == -1) + return -1; + break; +#else + ACE_NOTSUP_RETURN (-1); +#endif /* F_SETOWN && FASYNC */ +#else // <== + ACE_NOTSUP_RETURN (-1); +#endif /* SIGIO <== */ + case ACE_NONBLOCK: + if (ACE::set_flags (this->handle_, + ACE_NONBLOCK) == -1) + return -1; + break; + default: + return -1; + } + + return 0; +} + +int +ACE_IO_SAP::disable (int value) const +{ + ACE_TRACE ("ACE_IO_SAP::disable"); + + switch (value) + { +#if defined (SIGURG) + case SIGURG: + case ACE_SIGURG: +#if defined (F_SETOWN) + if (ACE_OS::fcntl (this->handle_, + F_SETOWN, 0) == -1) + return -1; + break; +#else + ACE_NOTSUP_RETURN (-1); +#endif /* F_SETOWN */ +#endif /* SIGURG */ +#if defined (SIGIO) + case SIGIO: + case ACE_SIGIO: +#if defined (F_SETOWN) && defined (FASYNC) + if (ACE_OS::fcntl (this->handle_, + F_SETOWN, + 0) == -1 + || ACE::clr_flags (this->handle_, FASYNC) == -1) + return -1; + break; +#else + ACE_NOTSUP_RETURN (-1); +#endif /* F_SETOWN && FASYNC */ +#else // <== + ACE_NOTSUP_RETURN (-1); +#endif /* SIGIO <== */ + case ACE_NONBLOCK: + if (ACE::clr_flags (this->handle_, + ACE_NONBLOCK) == -1) + return -1; + break; + default: + return -1; + } + return 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/IO_SAP.h b/ACE/ace/IO_SAP.h new file mode 100644 index 00000000000..cea8213e177 --- /dev/null +++ b/ACE/ace/IO_SAP.h @@ -0,0 +1,96 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file IO_SAP.h + * + * $Id$ + * + * @author Doug Schmidt + */ +//============================================================================= + + +#ifndef ACE_IO_SAP_H +#define ACE_IO_SAP_H +#include /**/ "ace/pre.h" + +#include "ace/Flag_Manip.h" +#include "ace/os_include/sys/os_types.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_IO_SAP + * + * @brief Defines the methods for the base class of the ACE_IO_SAP + * abstraction, which includes ACE_FILE and ACE_DEV. + */ +class ACE_Export ACE_IO_SAP +{ +public: + enum + { + /// Be consistent with Winsock + INVALID_HANDLE = -1 + }; + + /// Default dtor. + ~ACE_IO_SAP (void); + + /// Interface for ioctl. + int control (int cmd, void *) const; + + // = Common I/O handle options related to files. + + /** + * Enable asynchronous I/O (ACE_SIGIO), urgent data (ACE_SIGURG), + * non-blocking I/O (ACE_NONBLOCK), or close-on-exec (ACE_CLOEXEC), + * which is passed as the @a value. + */ + int enable (int value) const; + + /** + * Disable asynchronous I/O (ACE_SIGIO), urgent data (ACE_SIGURG), + * non-blocking I/O (ACE_NONBLOCK), or close-on-exec (ACE_CLOEXEC), + * which is passed as the @a value. + */ + int disable (int value) const; + + /// Get the underlying handle. + ACE_HANDLE get_handle (void) const; + + /// Set the underlying handle. + void set_handle (ACE_HANDLE handle); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// Ensure that ACE_IO_SAP is an abstract base class. + ACE_IO_SAP (void); + +private: + /// Underlying I/O handle. + ACE_HANDLE handle_; + + /// Cache the process ID. + static pid_t pid_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/IO_SAP.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_IO_SAP_H */ diff --git a/ACE/ace/IO_SAP.inl b/ACE/ace/IO_SAP.inl new file mode 100644 index 00000000000..9d7d244e4db --- /dev/null +++ b/ACE/ace/IO_SAP.inl @@ -0,0 +1,42 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/OS_NS_stropts.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_IO_SAP::~ACE_IO_SAP (void) +{ + ACE_TRACE ("ACE_IO_SAP::~ACE_IO_SAP"); +} + +// Used to return the underlying handle_. + +ACE_INLINE ACE_HANDLE +ACE_IO_SAP::get_handle (void) const +{ + ACE_TRACE ("ACE_IO_SAP::get_handle"); + return this->handle_; +} + +// Used to set the underlying handle_. + +ACE_INLINE void +ACE_IO_SAP::set_handle (ACE_HANDLE handle) +{ + ACE_TRACE ("ACE_IO_SAP::set_handle"); + this->handle_ = handle; +} + +// Provides access to the ACE_OS::ioctl system call. + +ACE_INLINE int +ACE_IO_SAP::control (int cmd, void *arg) const +{ + ACE_TRACE ("ACE_IO_SAP::control"); + return ACE_OS::ioctl (this->handle_, cmd, arg); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/IPC_SAP.cpp b/ACE/ace/IPC_SAP.cpp new file mode 100644 index 00000000000..b9ef15c6002 --- /dev/null +++ b/ACE/ace/IPC_SAP.cpp @@ -0,0 +1,193 @@ +// $Id$ + +#include "ace/IPC_SAP.h" + +#include "ace/Log_Msg.h" +#include "ace/OS_NS_unistd.h" +#include "ace/os_include/os_signal.h" +#include "ace/OS_NS_errno.h" +#include "ace/OS_NS_fcntl.h" + +#if !defined (__ACE_INLINE__) +#include "ace/IPC_SAP.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, IPC_SAP, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_IPC_SAP) + +void +ACE_IPC_SAP::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_IPC_SAP::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("handle_ = %d"), this->handle_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\npid_ = %d"), this->pid_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +// Cache for the process ID. +pid_t ACE_IPC_SAP::pid_ = 0; + +// This is the do-nothing constructor. It does not perform a +// ACE_OS::socket system call. + +ACE_IPC_SAP::ACE_IPC_SAP (void) + : handle_ (ACE_INVALID_HANDLE) +{ + // ACE_TRACE ("ACE_IPC_SAP::ACE_IPC_SAP"); +} + +int +ACE_IPC_SAP::enable (int value) const +{ + ACE_TRACE ("ACE_IPC_SAP::enable"); + + // First-time in initialization. + if (ACE_IPC_SAP::pid_ == 0) + ACE_IPC_SAP::pid_ = ACE_OS::getpid (); + +#if defined (ACE_WIN32) || defined (ACE_VXWORKS) + switch (value) + { + case ACE_NONBLOCK: + { + // nonblocking argument (1) + // blocking: (0) + int nonblock = 1; + return ACE_OS::ioctl (this->handle_, + FIONBIO, + &nonblock); + } + default: + ACE_NOTSUP_RETURN (-1); + } +#else /* ! ACE_WIN32 && ! ACE_VXWORKS */ + switch (value) + { +#if defined (SIGURG) + case SIGURG: + case ACE_SIGURG: +#if defined (F_SETOWN) + return ACE_OS::fcntl (this->handle_, + F_SETOWN, + ACE_IPC_SAP::pid_); +#else + ACE_NOTSUP_RETURN (-1); +#endif /* F_SETOWN */ +#endif /* SIGURG */ +#if defined (SIGIO) + case SIGIO: + case ACE_SIGIO: +#if defined (F_SETOWN) && defined (FASYNC) + if (ACE_OS::fcntl (this->handle_, + F_SETOWN, + ACE_IPC_SAP::pid_) == -1 + || ACE::set_flags (this->handle_, + FASYNC) == -1) + return -1; + break; +#else + ACE_NOTSUP_RETURN (-1); +#endif /* F_SETOWN && FASYNC */ +#endif /* SIGIO <== */ +#if defined (F_SETFD) + case ACE_CLOEXEC: + // Enables the close-on-exec flag. + if (ACE_OS::fcntl (this->handle_, + F_SETFD, + 1) == -1) + return -1; + break; +#endif /* F_SETFD */ + case ACE_NONBLOCK: + if (ACE::set_flags (this->handle_, + ACE_NONBLOCK) == ACE_INVALID_HANDLE) + return -1; + break; + default: + return -1; + } + return 0; +#endif /* ! ACE_WIN32 && ! ACE_VXWORKS */ + + /* NOTREACHED */ +} + +int +ACE_IPC_SAP::disable (int value) const +{ + ACE_TRACE ("ACE_IPC_SAP::disable"); + +#if defined (ACE_WIN32) || defined (ACE_VXWORKS) + switch (value) + { + case ACE_NONBLOCK: + // nonblocking argument (1) + // blocking: (0) + { + int nonblock = 0; + return ACE_OS::ioctl (this->handle_, + FIONBIO, + &nonblock); + } + default: + ACE_NOTSUP_RETURN (-1); + } +#else /* ! ACE_WIN32 && ! ACE_VXWORKS */ + switch (value) + { +#if defined (SIGURG) + case SIGURG: + case ACE_SIGURG: +#if defined (F_SETOWN) + return ACE_OS::fcntl (this->handle_, + F_SETOWN, + 0); +#else + ACE_NOTSUP_RETURN (-1); +#endif /* F_SETOWN */ +#endif /* SIGURG */ +#if defined (SIGIO) + case SIGIO: + case ACE_SIGIO: +#if defined (F_SETOWN) && defined (FASYNC) + if (ACE_OS::fcntl (this->handle_, + F_SETOWN, + 0) == -1 + || ACE::clr_flags (this->handle_, + FASYNC) == -1) + return -1; + break; +#else + ACE_NOTSUP_RETURN (-1); +#endif /* F_SETOWN && FASYNC */ +#endif /* SIGIO <== */ +#if defined (F_SETFD) + case ACE_CLOEXEC: + // Disables the close-on-exec flag. + if (ACE_OS::fcntl (this->handle_, + F_SETFD, + 0) == -1) + return -1; + break; +#endif /* F_SETFD */ + case ACE_NONBLOCK: + if (ACE::clr_flags (this->handle_, + ACE_NONBLOCK) == -1) + return -1; + break; + default: + return -1; + } + return 0; +#endif /* ! ACE_WIN32 && ! ACE_VXWORKS */ + /* NOTREACHED */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/IPC_SAP.h b/ACE/ace/IPC_SAP.h new file mode 100644 index 00000000000..1fd38007e43 --- /dev/null +++ b/ACE/ace/IPC_SAP.h @@ -0,0 +1,96 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file IPC_SAP.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_IPC_SAP_H +#define ACE_IPC_SAP_H +#include /**/ "ace/pre.h" + +#include "ace/Flag_Manip.h" +#include "ace/os_include/sys/os_types.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_IPC_SAP + * + * @brief Defines the member functions for the base class of the + * ACE_IPC_SAP abstraction. + */ +class ACE_Export ACE_IPC_SAP +{ +public: + + /// Interface for . + int control (int cmd, void *) const; + + // = Common I/O handle options related to sockets. + + /** + * Enable asynchronous I/O (ACE_SIGIO), urgent data (ACE_SIGURG), + * non-blocking I/O (ACE_NONBLOCK), or close-on-exec (ACE_CLOEXEC), + * which is passed as the @a value. + */ + int enable (int value) const; + + /** + * Disable asynchronous I/O (ACE_SIGIO), urgent data (ACE_SIGURG), + * non-blocking I/O (ACE_NONBLOCK), or close-on-exec (ACE_CLOEXEC), + * which is passed as the @a value. + */ + int disable (int value) const; + + /// Get the underlying handle. + ACE_HANDLE get_handle (void) const; + + /// Set the underlying handle. + void set_handle (ACE_HANDLE handle); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + + // = Ensure that ACE_IPC_SAP is an abstract base class. + /// Default constructor. + ACE_IPC_SAP (void); + + /// Protected destructor. + /** + * Not a virtual destructor. Protected destructor to prevent + * operator delete() from being called through a base class + * ACE_IPC_SAP pointer/reference. + */ + ~ACE_IPC_SAP (void); + +private: + /// Underlying I/O handle. + ACE_HANDLE handle_; + + /// Cache the process ID. + static pid_t pid_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/IPC_SAP.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_IPC_SAP_H */ diff --git a/ACE/ace/IPC_SAP.inl b/ACE/ace/IPC_SAP.inl new file mode 100644 index 00000000000..0adcb6e9b09 --- /dev/null +++ b/ACE/ace/IPC_SAP.inl @@ -0,0 +1,40 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/OS_NS_stropts.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_IPC_SAP::~ACE_IPC_SAP (void) +{ + // ACE_TRACE ("ACE_IPC_SAP::~ACE_IPC_SAP"); +} + +ACE_INLINE ACE_HANDLE +ACE_IPC_SAP::get_handle (void) const +{ + ACE_TRACE ("ACE_IPC_SAP::get_handle"); + return this->handle_; +} + +// Used to set the underlying handle_. + +ACE_INLINE void +ACE_IPC_SAP::set_handle (ACE_HANDLE handle) +{ + ACE_TRACE ("ACE_IPC_SAP::set_handle"); + this->handle_ = handle; +} + +// Provides access to the ACE_OS::ioctl system call. + +ACE_INLINE int +ACE_IPC_SAP::control (int cmd, void *arg) const +{ + ACE_TRACE ("ACE_IPC_SAP::control"); + return ACE_OS::ioctl (this->handle_, cmd, arg); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/If_Then_Else.h b/ACE/ace/If_Then_Else.h new file mode 100644 index 00000000000..163219e206b --- /dev/null +++ b/ACE/ace/If_Then_Else.h @@ -0,0 +1,89 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file If_Then_Else.h + * + * @c ACE::If_Then_Else traits template based on the @c IfThenElse + * template described in the book "C++ Templates" by Vandevoorde and + * Josuttis. + * + * $Id$ + * + * @author Ossama Othman + */ +//============================================================================= + +#ifndef ACE_IF_THEN_ELSE_H +#define ACE_IF_THEN_ELSE_H + +#include "ace/config-lite.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +namespace ACE +{ + + /** + * @struct If_Then_Else + * + * @brief Compile-time selection of type based on a boolean value. + * + * This primary template selects the second or third argument based + * on the value of the boolean first argument. + * + * Usage example: + * + * \code + * + * template + * class Foo + * { + * public: + * // Set "TheType" to be the larger of "T" and "int". + * typedef typename If_Then_Else<(sizeof (T) > sizeof (int)), + * T, + * int>::result_type TheType; + * }; + * + * \endcode + * + * @note This merely a forward declaration since we really only care + * about the partial specializations below. + */ + template + struct If_Then_Else; + + /** + * @struct If_Then_Else + * + * @brief Select of type @a Ta if boolean value is @c true. + * + * This partial specialization selects the type @a Ta if the boolean + * first argument is @c true. + */ + template + struct If_Then_Else + { + typedef Ta result_type; + }; + + /** + * @struct If_Then_Else + * + * @brief Select of type @a Tb if boolean value is @c false. + * + * This partial specialization selects the type @a Tb if the boolean + * first argument is @c false. + */ + template + struct If_Then_Else + { + typedef Tb result_type; + }; + +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_IF_THEN_ELSE_H */ diff --git a/ACE/ace/Init_ACE.cpp b/ACE/ace/Init_ACE.cpp new file mode 100644 index 00000000000..f997c09d4f8 --- /dev/null +++ b/ACE/ace/Init_ACE.cpp @@ -0,0 +1,45 @@ +#include "ace/Init_ACE.h" + +#include "ace/Object_Manager.h" + +ACE_RCSID (ace, + Init_ACE, + "$Id$") + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +unsigned int ACE::init_fini_count_ = 0; + +int +ACE::init (void) +{ + // Don't use ACE_TRACE, because Object_Manager might not have been + // instantiated yet. + // ACE_TRACE ("ACE::init"); + + ++ACE::init_fini_count_; + + return ACE_Object_Manager::instance ()->init (); +} + +int +ACE::fini (void) +{ + ACE_TRACE ("ACE::fini"); + + if (ACE::init_fini_count_ > 0) + { + if (--ACE::init_fini_count_ == 0) + return ACE_Object_Manager::instance ()->fini (); + else + // Wait for remaining fini () calls. + return 1; + } + else + // More ACE::fini () calls than ACE::init () calls. Bad + // application! + return -1; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Init_ACE.h b/ACE/ace/Init_ACE.h new file mode 100644 index 00000000000..164f61e1d70 --- /dev/null +++ b/ACE/ace/Init_ACE.h @@ -0,0 +1,62 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Init_ACE.h + * + * $Id$ + * + * Initialize ACE library services. Can be called only once per + * program invocation. + */ +//============================================================================= + + +#ifndef ACE_INIT_ACE_H +#define ACE_INIT_ACE_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +namespace ACE +{ + /** + * This class implements the functions for the initialization and + * shutting down ACE. These functions are called only once per ACE + * invokation. + * @return Returns 0 on success, -1 on failure, and 1 if it had already been + * called. + */ + extern ACE_Export int init (void); + + /** + * Shut down ACE library services. Can be called only once per + * program invocation. + * @return Returns 0 on success, -1 on failure, and 1 if it had already been + * called. + */ + extern ACE_Export int fini (void); + + // private: + // Used internally, so not exported. + + /** + * Counter to match / calls. must increment it; + * must decrement it. then does nothing until it + * reaches 0. + */ + extern unsigned int init_fini_count_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" + +#endif /* ACE_INIT_ACE_H */ diff --git a/ACE/ace/Intrusive_List.cpp b/ACE/ace/Intrusive_List.cpp new file mode 100644 index 00000000000..c0006792ce4 --- /dev/null +++ b/ACE/ace/Intrusive_List.cpp @@ -0,0 +1,153 @@ +// $Id$ + +#ifndef ACE_INTRUSIVE_LIST_CPP +#define ACE_INTRUSIVE_LIST_CPP + +#include "ace/Intrusive_List.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (__ACE_INLINE__) +#include "ace/Intrusive_List.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +ACE_Intrusive_List::ACE_Intrusive_List (void) + : head_ (0) + , tail_ (0) +{ +} + +template +ACE_Intrusive_List::~ACE_Intrusive_List (void) +{ +} + +template void +ACE_Intrusive_List::push_back (T *node) +{ + if (this->tail_ == 0) + { + this->tail_ = node; + this->head_ = node; + node->next (0); + node->prev (0); + return; + } + + this->tail_->next (node); + node->prev (this->tail_); + node->next (0); + this->tail_ = node; +} + +template void +ACE_Intrusive_List::push_front (T *node) +{ + if (this->head_ == 0) + { + this->tail_ = node; + this->head_ = node; + node->next (0); + node->prev (0); + return; + } + + this->head_->prev (node); + node->next (this->head_); + node->prev (0); + this->head_ = node; +} + +template T * +ACE_Intrusive_List::pop_front (void) +{ + T *node = this->head_; + if (node == 0) + return 0; + this->unsafe_remove (node); + return node; +} + +template T * +ACE_Intrusive_List::pop_back (void) +{ + T *node = this->tail_; + if (node == 0) + return 0; + this->unsafe_remove (node); + return node; +} + +template void +ACE_Intrusive_List::remove (T *node) +{ + for (T *i = this->head_; i != 0; i = i->next ()) + { + if (node == i) + { + this->unsafe_remove (node); + return; + } + } +} + +template void +ACE_Intrusive_List::unsafe_remove (T *node) +{ + if (node->prev () != 0) + node->prev ()->next (node->next ()); + else + this->head_ = node->next (); + + if (node->next () != 0) + node->next ()->prev (node->prev ()); + else + this->tail_ = node->prev (); + + node->next (0); + node->prev (0); +} + +#if 0 +template void +ACE_Intrusive_List_Node::check_invariants (void) +{ + ACE_ASSERT ((this->next () == 0) || (this->next ()->prev () == this)); + ACE_ASSERT ((this->prev () == 0) || (this->prev ()->next () == this)); +} + +template void +ACE_Intrusive_List::check_invariants (void) +{ + ACE_ASSERT ((this->tail_ == 0) || (this->tail_->next () == 0)); + ACE_ASSERT ((this->head_ == 0) || (this->head_->prev () == 0)); + ACE_ASSERT (!((this->head_ == 0) ^ (this->tail_ == 0))); + + int found_tail = 0; + for (T *i = this->head_; i != 0; i = i->next ()) + { + if (i == this->tail_) + found_tail = 1; + i->check_invariants (); + } + ACE_ASSERT (this->tail_ == 0 || found_tail == 1); + + int found_head = 0; + for (T *j = this->tail_; j != 0; j = j->prev ()) + { + if (j == this->head_) + found_head = 1; + j->check_invariants (); + } + ACE_ASSERT (this->head_ == 0 || found_head == 1); +} +#endif /* 0 */ + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_INTRUSIVE_LIST_CPP */ diff --git a/ACE/ace/Intrusive_List.h b/ACE/ace/Intrusive_List.h new file mode 100644 index 00000000000..59d0c9054a8 --- /dev/null +++ b/ACE/ace/Intrusive_List.h @@ -0,0 +1,144 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file Intrusive_List.h + * + * $Id$ + * + * @author Carlos O'Ryan + */ +//============================================================================= + +#ifndef ACE_INTRUSIVE_LIST_H +#define ACE_INTRUSIVE_LIST_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Intrusive_List + * + * @brief Implement an intrusive double linked list + * + * Intrusive lists assume that the elements they contain the pointers + * required to build the list. They are useful as light-weight + * containers and free-lists. + * + * The template argument T must implement the following methods: + * + * - T* T::next () const; + * - void T::next (T *); + * - T* T::prev () const; + * - void T::prev (T* ); + * + * A simple way to satisfy the Intrusive_List requirements would be to + * implement a helper class: + * + * class My_Object : public ACE_Intrusive_List_Node {
    + * ....
    + * };
    + * + * typedef ACE_Intrusive_List My_Object_List; + * + * However, ACE is supported on platforms that would surely get + * confused using such templates. + * + * @todo The ACE_Message_Queue is an example of an intrusive list (or + * queue) but it is not implemented in terms of this class. + * + */ +template +class ACE_Intrusive_List +{ +public: + // = Initialization and termination methods. + /// Constructor. Use user specified allocation strategy + /// if specified. + ACE_Intrusive_List (void); + + /// Destructor. + ~ACE_Intrusive_List (void); + + // = Check boundary conditions. + + /// Returns 1 if the container is empty, otherwise returns 0. + int is_empty (void) const; + + /// Returns 1 if the container is empty, otherwise returns 0. + /// @deprecated Use is_empty() instead. + int empty (void) const; + + /// Insert an element at the beginning of the list + void push_front (T *node); + + /// Insert an element at the end of the list + void push_back (T *node); + + /// Remove the element at the beginning of the list + T *pop_front (void); + + /// Remove the element at the end of the list + T *pop_back (void); + + /// Get the element at the head of the queue + T *head (void) const; + + /// Get the element at the tail of the queue + T *tail (void) const; + + /// Remove a element from the list + /** + * Verify that the element is still in the list before removing it. + */ + void remove (T *node); + + /// Swap two lists + void swap(ACE_Intrusive_List & rhs); + + /// Remove a element from the list without checking + /** + * No attempts are performed to check if T* really belongs to the + * list. The effects of removing an invalid element are unspecified + */ + void unsafe_remove (T *node); + +private: + /** @name Disallow copying + * + */ + //@{ + ACE_Intrusive_List (const ACE_Intrusive_List &); + ACE_Intrusive_List& operator= (const ACE_Intrusive_List &); + //@} + +private: + /// Head of the list + T *head_; + + /// Tail of the list + T *tail_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Intrusive_List.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Intrusive_List.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Intrusive_List.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" +#endif /* ACE_INTRUSIVE_LIST_H */ diff --git a/ACE/ace/Intrusive_List.inl b/ACE/ace/Intrusive_List.inl new file mode 100644 index 00000000000..f76370917e9 --- /dev/null +++ b/ACE/ace/Intrusive_List.inl @@ -0,0 +1,40 @@ +// -*- C++ -*- +// +// $Id$ + +#include + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE int +ACE_Intrusive_List::is_empty (void) const +{ + return this->head_ == 0; +} + +template ACE_INLINE int +ACE_Intrusive_List::empty (void) const +{ + return this->is_empty (); +} + +template ACE_INLINE T * +ACE_Intrusive_List::head (void) const +{ + return this->head_; +} + +template ACE_INLINE T * +ACE_Intrusive_List::tail (void) const +{ + return this->tail_; +} + +template ACE_INLINE void +ACE_Intrusive_List::swap(ACE_Intrusive_List & rhs) +{ + std::swap(head_, rhs.head_); + std::swap(tail_, rhs.tail_); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Intrusive_List_Node.cpp b/ACE/ace/Intrusive_List_Node.cpp new file mode 100644 index 00000000000..cd39a0cc91e --- /dev/null +++ b/ACE/ace/Intrusive_List_Node.cpp @@ -0,0 +1,27 @@ +// $Id$ + +#ifndef ACE_INTRUSIVE_LIST_NODE_CPP +#define ACE_INTRUSIVE_LIST_NODE_CPP + +#include "ace/Intrusive_List_Node.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (__ACE_INLINE__) +#include "ace/Intrusive_List_Node.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +ACE_Intrusive_List_Node::ACE_Intrusive_List_Node (void) + : prev_ (0) + , next_ (0) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_INTRUSIVE_LIST_NODE_CPP */ diff --git a/ACE/ace/Intrusive_List_Node.h b/ACE/ace/Intrusive_List_Node.h new file mode 100644 index 00000000000..b62d681a047 --- /dev/null +++ b/ACE/ace/Intrusive_List_Node.h @@ -0,0 +1,85 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Intrusive_List_Node.h + * + * $Id$ + * + * @author Carlos O'Ryan + */ +//============================================================================= + +#ifndef ACE_INTRUSIVE_LIST_NODE_H +#define ACE_INTRUSIVE_LIST_NODE_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Intrusive_List_Node + * + * @brief Implement the requirements for ACE_Intrusive_List + * + * The class should be used as follows: + * + * class My_Object : public ACE_Intrusive_List_Node {
    + * ....
    + * };
    + * + * However, ACE is supported on platforms that would surely get + * confused using such templates, the class is provided as a helper + * for our lucky users that only need portability to modern C++ + * compilers. + * + */ +template +class ACE_Intrusive_List_Node +{ +public: + /** @name Accesors and modifiers to the next and previous pointers + * + */ + //@{ + T *prev (void) const; + void prev (T *); + T *next (void) const; + void next (T *); + //@} + +protected: + /// Constructor + /** + * The constructor is protected, because only derived classes should + * be instantiated. + */ + ACE_Intrusive_List_Node (void); + +private: + /// Head and tail of the list + T *prev_; + T *next_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Intrusive_List_Node.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Intrusive_List_Node.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Intrusive_List_Node.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" +#endif /* ACE_INTRUSIVE_LIST_NODE_H */ diff --git a/ACE/ace/Intrusive_List_Node.inl b/ACE/ace/Intrusive_List_Node.inl new file mode 100644 index 00000000000..0672be2f345 --- /dev/null +++ b/ACE/ace/Intrusive_List_Node.inl @@ -0,0 +1,31 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template ACE_INLINE T* +ACE_Intrusive_List_Node::prev (void) const +{ + return this->prev_; +} + +template ACE_INLINE void +ACE_Intrusive_List_Node::prev (T *x) +{ + this->prev_ = x; +} + +template ACE_INLINE T* +ACE_Intrusive_List_Node::next (void) const +{ + return this->next_; +} + +template ACE_INLINE void +ACE_Intrusive_List_Node::next (T *x) +{ + this->next_ = x; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/LOCK_SOCK_Acceptor.cpp b/ACE/ace/LOCK_SOCK_Acceptor.cpp new file mode 100644 index 00000000000..183338b7efa --- /dev/null +++ b/ACE/ace/LOCK_SOCK_Acceptor.cpp @@ -0,0 +1,35 @@ +// $Id$ + +#ifndef ACE_LOCK_SOCK_ACCEPTOR_CPP +#define ACE_LOCK_SOCK_ACCEPTOR_CPP + +#include "ace/Guard_T.h" +#include "ace/LOCK_SOCK_Acceptor.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template int +ACE_LOCK_SOCK_Acceptor::accept (ACE_SOCK_Stream &stream, + ACE_Addr *remote_address, + ACE_Time_Value *timeout, + int restart, + int reset_new_handle) const +{ + ACE_GUARD_RETURN (ACE_LOCK, ace_mon, (ACE_LOCK &) this->lock_, -1); + + return ACE_SOCK_Acceptor::accept (stream, + remote_address, + timeout, + restart, + reset_new_handle); +} + +template ACE_LOCK & +ACE_LOCK_SOCK_Acceptor::lock (void) +{ + return this->lock_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_LOCK_SOCK_ACCEPTOR_CPP */ diff --git a/ACE/ace/LOCK_SOCK_Acceptor.h b/ACE/ace/LOCK_SOCK_Acceptor.h new file mode 100644 index 00000000000..cfca422e8d7 --- /dev/null +++ b/ACE/ace/LOCK_SOCK_Acceptor.h @@ -0,0 +1,67 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file LOCK_SOCK_Acceptor.h + * + * $Id$ + * + * @author James Hu and Irfan Pyarali + */ +//============================================================================= + + +#ifndef ACE_LOCK_SOCK_ACCEPTOR_H +#define ACE_LOCK_SOCK_ACCEPTOR_H +#include /**/ "ace/pre.h" + +#include "ace/SOCK_Acceptor.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_LOCK_SOCK_Acceptor + * + * @brief Specialize ACE_SOCK_Acceptor to lock around ; + * + * This class is necessary since some OS platforms (e.g., + * Solaris 2.5) do not allow multiple threads/processes to + * simultaneously call on the same listen-mode + * port/socket. Thus, we need to protect against multiple + * concurrent accesses by using the appropriate type of lock. + */ +template +class ACE_LOCK_SOCK_Acceptor : public ACE_SOCK_Acceptor +{ +public: + /// Accept the connection under the control of the . + int accept (ACE_SOCK_Stream &new_stream, + ACE_Addr *remote_addr = 0, + ACE_Time_Value *timeout = 0, + int restart = 1, + int reset_new_handle = 0) const; + + /// Return a reference to the lock. + ACE_LOCK &lock (void); + +protected: + /// Type of locking mechanism. + ACE_LOCK lock_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/LOCK_SOCK_Acceptor.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("LOCK_SOCK_Acceptor.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" +#endif /* ACE_LOCK_SOCK_ACCEPTOR_H */ diff --git a/ACE/ace/LSOCK.cpp b/ACE/ace/LSOCK.cpp new file mode 100644 index 00000000000..71f93fdde9c --- /dev/null +++ b/ACE/ace/LSOCK.cpp @@ -0,0 +1,181 @@ +// $Id$ + +#include "ace/LSOCK.h" + +ACE_RCSID(ace, LSOCK, "$Id$") + +#if !defined (ACE_LACKS_UNIX_DOMAIN_SOCKETS) + +#include "ace/Log_Msg.h" +#include "ace/OS_NS_sys_socket.h" + +#if !defined (__ACE_INLINE__) +#include "ace/LSOCK.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_LSOCK) + +void +ACE_LSOCK::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_LSOCK::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("aux_handle_ = %d"), this->aux_handle_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +#if defined (ACE_HAS_MSG) +// This routine sends an open file descriptor to handle_>. + +ssize_t +ACE_LSOCK::send_handle (const ACE_HANDLE handle) const +{ + ACE_TRACE ("ACE_LSOCK::send_handle"); + u_char a[2]; + iovec iov; + msghdr send_msg; +#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG) + char cmsgbuf[ACE_BSD_CONTROL_MSG_LEN]; + cmsghdr *cmsgptr = (cmsghdr *) cmsgbuf; +#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */ + + a[0] = 0xab; + a[1] = 0xcd; + iov.iov_base = (char *) a; + iov.iov_len = sizeof a; + send_msg.msg_iov = &iov; + send_msg.msg_iovlen = 1; + send_msg.msg_name = 0; + send_msg.msg_namelen = 0; + +#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG) + cmsgptr->cmsg_level = SOL_SOCKET; + cmsgptr->cmsg_type = SCM_RIGHTS; + cmsgptr->cmsg_len = sizeof cmsgbuf; + send_msg.msg_control = cmsgbuf; + send_msg.msg_controllen = sizeof cmsgbuf; + *(ACE_HANDLE *) CMSG_DATA (cmsgptr) = handle; + send_msg.msg_flags = 0; +#else + send_msg.msg_accrights = (char *) &handle; + send_msg.msg_accrightslen = sizeof handle; +#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */ + + return ACE_OS::sendmsg (this->get_handle (), &send_msg, 0); +} + +// This file receives an open file descriptor from handle_>. +// Note, this routine returns -1 if problems occur, 0 if we recv a +// message that does not have file descriptor in it, and 1 otherwise. + +ssize_t +ACE_LSOCK::recv_handle (ACE_HANDLE &handle, char *pbuf, ssize_t *len) const +{ + ACE_TRACE ("ACE_LSOCK::recv_handle"); + u_char a[2]; + iovec iov; + msghdr recv_msg; + +#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG) + char cmsgbuf[ACE_BSD_CONTROL_MSG_LEN]; +#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */ + + if (pbuf != 0 && len != 0) + { + iov.iov_base = pbuf; + iov.iov_len = *len; + } + else + { + iov.iov_base = (char *) a; + iov.iov_len = sizeof a; + } + + recv_msg.msg_iov = &iov; + recv_msg.msg_iovlen = 1; + recv_msg.msg_name = 0; + recv_msg.msg_namelen = 0; +#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG) + recv_msg.msg_control = cmsgbuf; + recv_msg.msg_controllen = sizeof cmsgbuf; +#else + recv_msg.msg_accrights = (char *) &handle; + recv_msg.msg_accrightslen = sizeof handle; +#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */ + +#if defined (ACE_HAS_STREAMS) + + ssize_t nbytes = ACE_OS::recvmsg (this->get_handle (), &recv_msg, 0); + + if (nbytes != ACE_INVALID_HANDLE) + { + if (len != 0) + *len = nbytes; + + if (nbytes == sizeof a + && ((u_char *) iov.iov_base)[0] == 0xab + && ((u_char *) iov.iov_base)[1] == 0xcd) + { +#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG) + cmsghdr *cmsgptr = (cmsghdr *) cmsgbuf; + handle = *(ACE_HANDLE *) CMSG_DATA (cmsgptr); +#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */ + return 1; + } + else + return 0; + } +#else + ssize_t nbytes = ACE_OS::recvmsg (this->get_handle (), + &recv_msg, + MSG_PEEK); + + if (nbytes != ACE_INVALID_HANDLE) + { + if (nbytes == sizeof a + && ((u_char *) iov.iov_base)[0] == 0xab + && ((u_char *) iov.iov_base)[1] == 0xcd) + { +#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG) + // Close down the socket that was returned by the MSG_PEEK. + ACE_OS::closesocket (*(ACE_HANDLE *) CMSG_DATA ((cmsghdr *) cmsgbuf)); + recv_msg.msg_control = cmsgbuf; + recv_msg.msg_controllen = sizeof cmsgbuf; +#else + recv_msg.msg_accrights = (char *) &handle; + recv_msg.msg_accrightslen = sizeof handle; +#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */ + + if (ACE_OS::recvmsg (this->get_handle (), + &recv_msg, 0) == ACE_INVALID_HANDLE) + return ACE_INVALID_HANDLE; + else + { +#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG) + cmsghdr *cmsgptr = (cmsghdr *) cmsgbuf; + handle = *(ACE_HANDLE *) CMSG_DATA (cmsgptr); +#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */ + return 1; + } + } + else + { + if (len != 0) + *len = nbytes; + return 0; + } + } +#endif /* ACE_HAS_STREAMS */ + else + return ACE_INVALID_HANDLE; +} +#endif /* ACE_HAS_MSG */ + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_LACKS_UNIX_DOMAIN_SOCKETS */ diff --git a/ACE/ace/LSOCK.h b/ACE/ace/LSOCK.h new file mode 100644 index 00000000000..994158f00d3 --- /dev/null +++ b/ACE/ace/LSOCK.h @@ -0,0 +1,84 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file LSOCK.h + * + * $Id$ + * + * @author Doug Schmidt + */ +//============================================================================= + + +#ifndef ACE_LOCAL_SOCK_H +#define ACE_LOCAL_SOCK_H + +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (ACE_LACKS_UNIX_DOMAIN_SOCKETS) + +#include "ace/SOCK.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_LSOCK + * + * @brief Create a Local ACE_SOCK, which is used for passing file + * descriptors. + */ +class ACE_Export ACE_LSOCK +{ +public: +#if defined (ACE_HAS_MSG) + /// Send an open FD to another process. + ssize_t send_handle (const ACE_HANDLE handle) const; + + /// Recv an open FD from another process. + ssize_t recv_handle (ACE_HANDLE &handles, + char *pbuf = 0, + ssize_t *len = 0) const; +#endif /* ACE_HAS_MSG */ + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + // = Ensure that ACE_LSOCK is an abstract base class + + /// Default constructor. + ACE_LSOCK (void); + + /// Initialize based on @a handle. + ACE_LSOCK (ACE_HANDLE handle); + + /// Get handle. + ACE_HANDLE get_handle (void) const; + + /// Set handle. + void set_handle (ACE_HANDLE handle); + +private: + /// An auxiliary handle used to avoid virtual base classes... + ACE_HANDLE aux_handle_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/LSOCK.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* ACE_LACKS_UNIX_DOMAIN_SOCKETS */ +#include /**/ "ace/post.h" +#endif /* ACE_LOCAL_SOCK_H */ diff --git a/ACE/ace/LSOCK.inl b/ACE/ace/LSOCK.inl new file mode 100644 index 00000000000..5dbbb0626a1 --- /dev/null +++ b/ACE/ace/LSOCK.inl @@ -0,0 +1,43 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Simple-minded constructor. + +ACE_INLINE +ACE_LSOCK::ACE_LSOCK (void) + : aux_handle_ (ACE_INVALID_HANDLE) +{ + ACE_TRACE ("ACE_LSOCK::ACE_LSOCK"); +} + +// Sets the underlying file descriptor. + +ACE_INLINE void +ACE_LSOCK::set_handle (ACE_HANDLE handle) +{ + ACE_TRACE ("ACE_LSOCK::set_handle"); + this->aux_handle_ = handle; +} + +// Gets the underlying file descriptor. + +ACE_INLINE ACE_HANDLE +ACE_LSOCK::get_handle (void) const +{ + ACE_TRACE ("ACE_LSOCK::get_handle"); + return this->aux_handle_; +} + +// Sets the underlying file descriptor. + +ACE_INLINE +ACE_LSOCK::ACE_LSOCK (ACE_HANDLE handle) + : aux_handle_ (handle) +{ + ACE_TRACE ("ACE_LSOCK::ACE_LSOCK"); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/LSOCK_Acceptor.cpp b/ACE/ace/LSOCK_Acceptor.cpp new file mode 100644 index 00000000000..ee154e3e087 --- /dev/null +++ b/ACE/ace/LSOCK_Acceptor.cpp @@ -0,0 +1,143 @@ +// $Id$ + +#include "ace/LSOCK_Acceptor.h" + +#if !defined (ACE_LACKS_UNIX_DOMAIN_SOCKETS) + +#include "ace/Log_Msg.h" +#include "ace/OS_NS_unistd.h" +#include "ace/OS_NS_sys_socket.h" + +ACE_RCSID(ace, LSOCK_Acceptor, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_LSOCK_Acceptor) + +// Return the local endpoint address. + +int +ACE_LSOCK_Acceptor::get_local_addr (ACE_Addr &a) const +{ + ACE_TRACE ("ACE_LSOCK_Acceptor::get_local_addr"); + + ACE_UNIX_Addr& target = dynamic_cast (a); + + target = this->local_addr_; + + return 0; +} + +void +ACE_LSOCK_Acceptor::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_LSOCK_Acceptor::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + this->local_addr_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +// Do nothing routine for constructor. + +ACE_LSOCK_Acceptor::ACE_LSOCK_Acceptor (void) +{ + ACE_TRACE ("ACE_LSOCK_Acceptor::ACE_LSOCK_Acceptor"); +} + +int +ACE_LSOCK_Acceptor::open (const ACE_Addr &remote_sap, + int reuse_addr, + int protocol_family, + int backlog, + int protocol) +{ + ACE_TRACE ("ACE_LSOCK_Acceptor::open"); + this->local_addr_ = *((ACE_UNIX_Addr *) &remote_sap); // This is a gross hack... + return ACE_SOCK_Acceptor::open (remote_sap, reuse_addr, + protocol_family, backlog, protocol); +} + +// General purpose routine for performing server ACE_SOCK creation. + +ACE_LSOCK_Acceptor::ACE_LSOCK_Acceptor (const ACE_Addr &remote_sap, + int reuse_addr, + int protocol_family, + int backlog, + int protocol) +{ + ACE_TRACE ("ACE_LSOCK_Acceptor::ACE_LSOCK_Acceptor"); + if (this->open (remote_sap, + reuse_addr, + protocol_family, + backlog, + protocol) == -1) + ACE_ERROR ((LM_ERROR, + "ACE_LSOCK_Acceptor::ACE_LSOCK_Acceptor")); +} + +// General purpose routine for accepting new connections. + +int +ACE_LSOCK_Acceptor::accept (ACE_LSOCK_Stream &new_stream, + ACE_Addr *remote_addr, + ACE_Time_Value *timeout, + int restart, + int reset_new_handle) const +{ + ACE_TRACE ("ACE_LSOCK_Acceptor::accept"); + + int in_blocking_mode = 0; + if (this->shared_accept_start (timeout, + restart, + in_blocking_mode) == -1) + return -1; + else + { + sockaddr *addr = 0; + int len = 0; + + if (remote_addr != 0) + { + len = remote_addr->get_size (); + addr = (sockaddr *) remote_addr->get_addr (); + } + + do + new_stream.set_handle (ACE_OS::accept (this->get_handle (), + addr, + &len)); + while (new_stream.get_handle () == ACE_INVALID_HANDLE + && restart != 0 + && errno == EINTR + && timeout == 0); + + // Reset the size of the addr, which is only necessary for UNIX + // domain sockets. + if (new_stream.get_handle () != ACE_INVALID_HANDLE + && remote_addr != 0) + remote_addr->set_size (len); + } + + return this->shared_accept_finish (new_stream, + in_blocking_mode, + reset_new_handle); +} + +// Close down the UNIX domain stream and remove the rendezvous point +// from the file system. + +int +ACE_LSOCK_Acceptor::remove (void) +{ + ACE_TRACE ("ACE_LSOCK_Acceptor::remove"); + int result = this->close (); + return ACE_OS::unlink (this->local_addr_.get_path_name ()) == -1 + || result == -1 ? -1 : 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_LACKS_UNIX_DOMAIN_SOCKETS */ diff --git a/ACE/ace/LSOCK_Acceptor.h b/ACE/ace/LSOCK_Acceptor.h new file mode 100644 index 00000000000..a215736355e --- /dev/null +++ b/ACE/ace/LSOCK_Acceptor.h @@ -0,0 +1,95 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file LSOCK_Acceptor.h + * + * $Id$ + * + * @author Doug Schmidt + */ +//============================================================================= + + +#ifndef ACE_LOCAL_SOCK_ACCEPTOR_H +#define ACE_LOCAL_SOCK_ACCEPTOR_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (ACE_LACKS_UNIX_DOMAIN_SOCKETS) + +#include "ace/SOCK_Acceptor.h" +#include "ace/UNIX_Addr.h" +#include "ace/LSOCK_Stream.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Forward decl. +class ACE_Reactor; + +/** + * @class ACE_LSOCK_Acceptor + * + * @brief Defines the format and interface for the acceptor side of the + * local ACE_SOCK ACE_Stream. + */ +class ACE_Export ACE_LSOCK_Acceptor : public ACE_SOCK_Acceptor +{ +public: + // = Initialization methods. + /// Default constructor. + ACE_LSOCK_Acceptor (void); + + /// Initiate a passive mode socket. + ACE_LSOCK_Acceptor (const ACE_Addr &local_sap, + int reuse_addr = 0, + int protocol_family = PF_UNIX, + int backlog = ACE_DEFAULT_BACKLOG, + int protocol = 0); + + /// Initiate a passive mode socket. + int open (const ACE_Addr &local_sap, + int reuse_addr = 0, + int protocol_family = PF_UNIX, + int backlog = ACE_DEFAULT_BACKLOG, + int protocol = 0); + + /// Accept a new data transfer connection. + int accept (ACE_LSOCK_Stream &new_ipc_sap, + ACE_Addr * = 0, + ACE_Time_Value *timeout = 0, + int restart = 1, + int reset_new_handle = 0) const; + + /// Close down the ACE_LSOCK and remove the rendezvous point from the + /// file system. + int remove (void); + + /// Return the local endpoint address. + int get_local_addr (ACE_Addr &) const; + + // = Meta-type info + typedef ACE_UNIX_Addr PEER_ADDR; + typedef ACE_LSOCK_Stream PEER_STREAM; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// Address of our rendezvous point. + ACE_UNIX_Addr local_addr_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_LACKS_UNIX_DOMAIN_SOCKETS */ +#include /**/ "ace/post.h" +#endif /* ACE_LOCAL_SOCK_ACCEPTOR_H */ diff --git a/ACE/ace/LSOCK_CODgram.cpp b/ACE/ace/LSOCK_CODgram.cpp new file mode 100644 index 00000000000..e89607e06ac --- /dev/null +++ b/ACE/ace/LSOCK_CODgram.cpp @@ -0,0 +1,62 @@ +// $Id$ + +#include "ace/LSOCK_CODgram.h" +#if !defined (ACE_LACKS_UNIX_DOMAIN_SOCKETS) + +#include "ace/Log_Msg.h" + +ACE_RCSID(ace, LSOCK_CODgram, "$Id$") + +#if !defined (__ACE_INLINE__) +#include "ace/LSOCK_CODgram.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_LSOCK_CODgram) + +void +ACE_LSOCK_CODgram::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_LSOCK_CODgram::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_SOCK_CODgram::dump (); + ACE_LSOCK::dump (); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +/* Here's the general-purpose open routine. */ + +int +ACE_LSOCK_CODgram::open (const ACE_Addr &remote, + const ACE_Addr &local, + int protocol_family, + int protocol) +{ + ACE_TRACE ("ACE_LSOCK_CODgram::open"); + if (ACE_SOCK_CODgram::open (remote, local, protocol_family, + protocol) == -1) + return -1; + ACE_LSOCK::set_handle (this->get_handle ()); + return 0; +} + +/* Create a local ACE_SOCK datagram. */ + +ACE_LSOCK_CODgram::ACE_LSOCK_CODgram (const ACE_Addr &remote, + const ACE_Addr &local, + int protocol_family, + int protocol) +{ + ACE_TRACE ("ACE_LSOCK_CODgram::ACE_LSOCK_CODgram"); + if (this->open (remote, local, protocol_family, + protocol) == -1) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("ACE_LSOCK_CODgram"))); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_LACKS_UNIX_DOMAIN_SOCKETS */ diff --git a/ACE/ace/LSOCK_CODgram.h b/ACE/ace/LSOCK_CODgram.h new file mode 100644 index 00000000000..667fa210f0d --- /dev/null +++ b/ACE/ace/LSOCK_CODgram.h @@ -0,0 +1,78 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file LSOCK_CODgram.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + + +#ifndef ACE_LOCAL_SOCK_CODGRAM_H +#define ACE_LOCAL_SOCK_CODGRAM_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (ACE_LACKS_UNIX_DOMAIN_SOCKETS) + +#include "ace/LSOCK.h" +#include "ace/SOCK_CODgram.h" +#include "ace/Addr.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_LSOCK_CODgram + * + * @brief Defines the member functions for the connected + * datagram abstraction. + */ +class ACE_Export ACE_LSOCK_CODgram : public ACE_SOCK_CODgram, public ACE_LSOCK +{ +public: + // = Initialization methods. + /// Default constructor. + ACE_LSOCK_CODgram (void); + + /// Initiate a connected-datagram. + ACE_LSOCK_CODgram (const ACE_Addr &remote_sap, + const ACE_Addr &local_sap = ACE_Addr::sap_any, + int protocol_family = PF_UNIX, + int protocol = 0); + + /// Initiate a connected-datagram. + int open (const ACE_Addr &remote_sap, + const ACE_Addr &local_sap = ACE_Addr::sap_any, + int protocol_family = PF_UNIX, + int protocol = 0); + + /// Get underlying handle. + ACE_HANDLE get_handle (void) const; + + /// Set underlying handle. + void set_handle (ACE_HANDLE); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/LSOCK_CODgram.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* ACE_LACKS_UNIX_DOMAIN_SOCKETS */ +#include /**/ "ace/post.h" +#endif /* ACE_LOCAL_SOCK_CODGRAM_H */ diff --git a/ACE/ace/LSOCK_CODgram.inl b/ACE/ace/LSOCK_CODgram.inl new file mode 100644 index 00000000000..d27ee2fd881 --- /dev/null +++ b/ACE/ace/LSOCK_CODgram.inl @@ -0,0 +1,30 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Do nothing constructor. + +ACE_INLINE +ACE_LSOCK_CODgram::ACE_LSOCK_CODgram (void) +{ + ACE_TRACE ("ACE_LSOCK_CODgram::ACE_LSOCK_CODgram"); +} + +ACE_INLINE void +ACE_LSOCK_CODgram::set_handle (ACE_HANDLE h) +{ + ACE_TRACE ("ACE_LSOCK_CODgram::set_handle"); + this->ACE_SOCK_CODgram::set_handle (h); + this->ACE_LSOCK::set_handle (h); +} + +ACE_INLINE ACE_HANDLE +ACE_LSOCK_CODgram::get_handle (void) const +{ + ACE_TRACE ("ACE_LSOCK_CODgram::get_handle"); + return this->ACE_SOCK_CODgram::get_handle (); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/LSOCK_Connector.cpp b/ACE/ace/LSOCK_Connector.cpp new file mode 100644 index 00000000000..319670f903f --- /dev/null +++ b/ACE/ace/LSOCK_Connector.cpp @@ -0,0 +1,59 @@ +// $Id$ + +#include "ace/LSOCK_Connector.h" +#if !defined (ACE_LACKS_UNIX_DOMAIN_SOCKETS) + +#include "ace/Log_Msg.h" + +ACE_RCSID(ace, LSOCK_Connector, "$Id$") + +#if !defined (__ACE_INLINE__) +#include "ace/LSOCK_Connector.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_LSOCK_Connector) + +void +ACE_LSOCK_Connector::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_LSOCK_Connector::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_LSOCK_Connector::ACE_LSOCK_Connector (void) +{ + ACE_TRACE ("ACE_LSOCK_Connector::ACE_LSOCK_Connector"); +} + +// Establish a connection. +ACE_LSOCK_Connector::ACE_LSOCK_Connector (ACE_LSOCK_Stream &new_stream, + const ACE_UNIX_Addr &remote_sap, + ACE_Time_Value *timeout, + const ACE_Addr &local_sap, + int reuse_addr, + int flags, + int perms) + : ACE_SOCK_Connector (new_stream, + remote_sap, + timeout, + local_sap, + reuse_addr, + flags, + perms) +{ + ACE_TRACE ("ACE_LSOCK_Connector::ACE_LSOCK_Connector"); + // This is necessary due to the weird inheritance relationships of + // ACE_LSOCK_Stream. + new_stream.set_handle (new_stream.get_handle ()); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_LACKS_UNIX_DOMAIN_SOCKETS */ diff --git a/ACE/ace/LSOCK_Connector.h b/ACE/ace/LSOCK_Connector.h new file mode 100644 index 00000000000..336fc4a0e77 --- /dev/null +++ b/ACE/ace/LSOCK_Connector.h @@ -0,0 +1,91 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file LSOCK_Connector.h + * + * $Id$ + * + * @author Doug Schmidt + */ +//============================================================================= + +#ifndef ACE_LOCAL_SOCK_CONNECTOR_H +#define ACE_LOCAL_SOCK_CONNECTOR_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (ACE_LACKS_UNIX_DOMAIN_SOCKETS) + +#include "ace/SOCK_Connector.h" +#include "ace/LSOCK_Stream.h" +#include "ace/UNIX_Addr.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_LSOCK_Connector + * + * @brief Defines the format and interface for the connector side of + * the ACE_LSOCK_Stream. + */ +class ACE_Export ACE_LSOCK_Connector : public ACE_SOCK_Connector +{ +public: + // = Initialization methods. + /// Default constructor. + ACE_LSOCK_Connector (void); + + /** + * Actively connect and produce a @a new_stream if things go well. + * All arguments are relayed to the ACE_SOCK_Connector constructor + * for handling. + * @see ACE_SOCK_Connector(). + */ + ACE_LSOCK_Connector (ACE_LSOCK_Stream &new_stream, + const ACE_UNIX_Addr &remote_sap, + ACE_Time_Value *timeout = 0, + const ACE_Addr &local_sap = ACE_Addr::sap_any, + int reuse_addr = 0, + int flags = 0, + int perms = 0); + + /** + * Actively connect and produce a @a new_stream if things go well. + * The @c ACE_SOCK_Connector::connect() method is called to perform + * the actual connection attempt. + * @see ACE_SOCK_Connector::connect(). + */ + int connect (ACE_LSOCK_Stream &new_stream, + const ACE_UNIX_Addr &remote_sap, + ACE_Time_Value *timeout = 0, + const ACE_Addr &local_sap = ACE_Addr::sap_any, + int reuse_addr = 0, + int flags = 0, + int perms = 0); + + // = Meta-type info + typedef ACE_UNIX_Addr PEER_ADDR; + typedef ACE_LSOCK_Stream PEER_STREAM; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/LSOCK_Connector.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* ACE_LACKS_UNIX_DOMAIN_SOCKETS */ +#include /**/ "ace/post.h" +#endif /* ACE_LOCAL_SOCK_CONNECTOR_H */ diff --git a/ACE/ace/LSOCK_Connector.inl b/ACE/ace/LSOCK_Connector.inl new file mode 100644 index 00000000000..f9cdffbf6dc --- /dev/null +++ b/ACE/ace/LSOCK_Connector.inl @@ -0,0 +1,27 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Establish a connection. +ACE_INLINE int +ACE_LSOCK_Connector::connect (ACE_LSOCK_Stream &new_stream, + const ACE_UNIX_Addr &remote_sap, + ACE_Time_Value *timeout, + const ACE_Addr &local_sap, + int reuse_addr, + int flags, + int perms) +{ + ACE_TRACE ("ACE_LSOCK_Connector::connect"); + int result = ACE_SOCK_Connector::connect (new_stream, remote_sap, + timeout, local_sap, + reuse_addr, flags, perms); + if (result != -1) + // This is necessary due to the weird inheritance relationships of ACE_LSOCK_Stream. + new_stream.set_handle (new_stream.get_handle ()); + return result; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/LSOCK_Dgram.cpp b/ACE/ace/LSOCK_Dgram.cpp new file mode 100644 index 00000000000..268ce44eb36 --- /dev/null +++ b/ACE/ace/LSOCK_Dgram.cpp @@ -0,0 +1,71 @@ +// $Id$ + +#include "ace/LSOCK_Dgram.h" +#if !defined (ACE_LACKS_UNIX_DOMAIN_SOCKETS) + +#include "ace/Log_Msg.h" + +ACE_RCSID(ace, LSOCK_Dgram, "$Id$") + +#if !defined (__ACE_INLINE__) +#include "ace/LSOCK_Dgram.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_LSOCK_Dgram) + +void +ACE_LSOCK_Dgram::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_LSOCK_Dgram::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_SOCK_Dgram::dump (); + ACE_LSOCK::dump (); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +// The "do nothing" constructor. + +ACE_LSOCK_Dgram::ACE_LSOCK_Dgram (void) +{ + ACE_TRACE ("ACE_LSOCK_Dgram::ACE_LSOCK_Dgram"); +} + +// Here's the general-purpose open routine. + +int +ACE_LSOCK_Dgram::open (const ACE_Addr &local, + int protocol_family, + int protocol) +{ + ACE_TRACE ("ACE_LSOCK_Dgram::open"); + if (ACE_SOCK_Dgram::open (local, + protocol_family, + protocol) == -1) + return -1; + ACE_LSOCK::set_handle (this->ACE_SOCK_Dgram::get_handle ()); + return 0; +} + +// Create a local ACE_SOCK datagram. + +ACE_LSOCK_Dgram::ACE_LSOCK_Dgram (const ACE_Addr &local, + int protocol_family, + int protocol) +{ + ACE_TRACE ("ACE_LSOCK_Dgram::ACE_LSOCK_Dgram"); + if (this->open (local, + protocol_family, + protocol) == -1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("ACE_LSOCK_Dgram"))); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_LACKS_UNIX_DOMAIN_SOCKETS */ diff --git a/ACE/ace/LSOCK_Dgram.h b/ACE/ace/LSOCK_Dgram.h new file mode 100644 index 00000000000..d93face8cfb --- /dev/null +++ b/ACE/ace/LSOCK_Dgram.h @@ -0,0 +1,74 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file LSOCK_Dgram.h + * + * $Id$ + * + * @author Doug Schmidt + */ +//============================================================================= + + +#ifndef ACE_LOCAL_SOCK_DGRAM_H +#define ACE_LOCAL_SOCK_DGRAM_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (ACE_LACKS_UNIX_DOMAIN_SOCKETS) + +#include "ace/SOCK_Dgram.h" +#include "ace/LSOCK.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_LSOCK_Dgram + * + * @brief Create a Local ACE_SOCK datagram. + */ +class ACE_Export ACE_LSOCK_Dgram : public ACE_SOCK_Dgram, public ACE_LSOCK +{ +public: + // = Initialization methods. + /// Default constructor. + ACE_LSOCK_Dgram (void); + + /// Initiate a local dgram. + ACE_LSOCK_Dgram (const ACE_Addr &local, + int protocol_family = PF_UNIX, + int protocol = 0); + + /// Initiate a local dgram. + int open (const ACE_Addr &local, + int protocol_family = PF_UNIX, + int protocol = 0); + + /// Get handle. + ACE_HANDLE get_handle (void) const; + + /// Set handle. + void set_handle (ACE_HANDLE); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/LSOCK_Dgram.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* ACE_LACKS_UNIX_DOMAIN_SOCKETS */ +#include /**/ "ace/post.h" +#endif /* ACE_LOCAL_SOCK_DGRAM_H */ diff --git a/ACE/ace/LSOCK_Dgram.inl b/ACE/ace/LSOCK_Dgram.inl new file mode 100644 index 00000000000..2c29136e06d --- /dev/null +++ b/ACE/ace/LSOCK_Dgram.inl @@ -0,0 +1,22 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE void +ACE_LSOCK_Dgram::set_handle (ACE_HANDLE h) +{ + ACE_TRACE ("ACE_LSOCK_Dgram::set_handle"); + this->ACE_SOCK_Dgram::set_handle (h); + this->ACE_LSOCK::set_handle (h); +} + +ACE_INLINE ACE_HANDLE +ACE_LSOCK_Dgram::get_handle (void) const +{ + ACE_TRACE ("ACE_LSOCK_Dgram::get_handle"); + return this->ACE_SOCK_Dgram::get_handle (); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/LSOCK_Stream.cpp b/ACE/ace/LSOCK_Stream.cpp new file mode 100644 index 00000000000..6ac123661cf --- /dev/null +++ b/ACE/ace/LSOCK_Stream.cpp @@ -0,0 +1,137 @@ +// $Id$ + +#include "ace/LSOCK_Stream.h" +#if !defined (ACE_LACKS_UNIX_DOMAIN_SOCKETS) + +#include "ace/Log_Msg.h" +#include "ace/OS_NS_sys_socket.h" + +ACE_RCSID(ace, LSOCK_Stream, "$Id$") + +#if !defined (__ACE_INLINE__) +#include "ace/LSOCK_Stream.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_LSOCK_Stream) + +int +ACE_LSOCK_Stream::get_local_addr (ACE_Addr &addr) const +{ + ACE_TRACE ("ACE_LSOCK_Stream::get_local_addr"); + + // Perform the downcast since had better be an + // . + ACE_UNIX_Addr *rhs_unix_addr = dynamic_cast (&addr); + ACE_UNIX_Addr lhs_unix_addr; + + if (rhs_unix_addr == 0) + return -1; + else if (ACE_SOCK::get_local_addr (lhs_unix_addr) == -1) + return -1; + else + { + *rhs_unix_addr = lhs_unix_addr; + return 0; + } +} + +int +ACE_LSOCK_Stream::get_remote_addr (ACE_Addr &addr) const +{ + ACE_TRACE ("ACE_LSOCK_Stream::get_remote_addr"); + + return this->get_local_addr (addr); +} + +void +ACE_LSOCK_Stream::dump (void) const +{ + ACE_TRACE ("ACE_LSOCK_Stream::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_SOCK_Stream::dump (); + ACE_LSOCK::dump (); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +} + +#if defined (ACE_HAS_MSG) + +// Send a readv-style vector of buffers, along with an open I/O +// handle. + +ssize_t +ACE_LSOCK_Stream::send_msg (const iovec iov[], + size_t n, + ACE_HANDLE handle) +{ + ACE_TRACE ("ACE_LSOCK_Stream::send_msg"); + msghdr send_msg; +#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG) + char cmsgbuf[ACE_BSD_CONTROL_MSG_LEN]; + cmsghdr *cmsgptr = (cmsghdr *) cmsgbuf; +#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */ + + send_msg.msg_iov = const_cast (iov); + send_msg.msg_iovlen = n; + send_msg.msg_name = 0; + send_msg.msg_namelen = 0; + +#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG) + cmsgptr->cmsg_level = SOL_SOCKET; + cmsgptr->cmsg_type = SCM_RIGHTS; + cmsgptr->cmsg_len = sizeof cmsgbuf; + send_msg.msg_control = cmsgbuf; + send_msg.msg_controllen = sizeof cmsgbuf; + *(ACE_HANDLE *) CMSG_DATA (cmsgptr) = handle; + send_msg.msg_flags = 0 ; +#else + send_msg.msg_accrights = (char *) &handle; + send_msg.msg_accrightslen = sizeof handle; +#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */ + + return ACE_OS::sendmsg (this->ACE_SOCK_Stream::get_handle (), + &send_msg, 0); +} + +// Read a readv-style vector of buffers, along with an open I/O +// handle. + +ssize_t +ACE_LSOCK_Stream::recv_msg (iovec iov[], + size_t n, + ACE_HANDLE &handle) +{ + ACE_TRACE ("ACE_LSOCK_Stream::recv_msg"); + msghdr recv_msg; +#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG) + char cmsgbuf[ACE_BSD_CONTROL_MSG_LEN]; + cmsghdr *cmsgptr = (cmsghdr *) cmsgbuf; +#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */ + + recv_msg.msg_iov = (iovec *) iov; + recv_msg.msg_iovlen = n; + recv_msg.msg_name = 0; + recv_msg.msg_namelen = 0; + +#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG) + recv_msg.msg_control = cmsgbuf; + recv_msg.msg_controllen = sizeof cmsgbuf; + ssize_t result = ACE_OS::recvmsg (this->ACE_SOCK_Stream::get_handle (), + &recv_msg, 0); + handle = *(ACE_HANDLE*) CMSG_DATA (cmsgptr) ; + return result; +#else + recv_msg.msg_accrights = (char *) &handle; + recv_msg.msg_accrightslen = sizeof handle; + + return ACE_OS::recvmsg (this->ACE_SOCK_Stream::get_handle (), + &recv_msg, 0); +#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */ +} +#endif /* ACE_HAS_MSG */ + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_LACKS_UNIX_DOMAIN_SOCKETS */ diff --git a/ACE/ace/LSOCK_Stream.h b/ACE/ace/LSOCK_Stream.h new file mode 100644 index 00000000000..99d50e6dbaf --- /dev/null +++ b/ACE/ace/LSOCK_Stream.h @@ -0,0 +1,82 @@ +/* -*- C++ -*- */ + +//============================================================================= +/** + * @file LSOCK_Stream.h + * + * $Id$ + * + * @author Doug Schmidt + */ +//============================================================================= + + +#ifndef ACE_LOCAL_SOCK_STREAM_H +#define ACE_LOCAL_SOCK_STREAM_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (ACE_LACKS_UNIX_DOMAIN_SOCKETS) + +#include "ace/SOCK_Stream.h" +#include "ace/UNIX_Addr.h" +#include "ace/LSOCK.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_LSOCK_Stream + * + * @brief Create a Local ACE_SOCK stream. + */ +class ACE_Export ACE_LSOCK_Stream : public ACE_SOCK_Stream, public ACE_LSOCK +{ +public: + // = Send/recv methods. + /// Send iovecs via <::writev>. + ssize_t send_msg (const iovec iov[], + size_t n, + ACE_HANDLE handle); + + /// Send iovecs via <::writev>. + ssize_t recv_msg (iovec iov[], + size_t n, + ACE_HANDLE &handle); + + /// Get handle. + ACE_HANDLE get_handle (void) const; + + /// Overrides set_handle from the base classes. + void set_handle (ACE_HANDLE fd); + + // = Meta-type info + typedef ACE_UNIX_Addr PEER_ADDR; + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + + /// This method simply returns the "local" addr. + int get_local_addr (ACE_Addr &) const; + + /// This method returns the "local" addr since it's the same value + /// for UNIX domain sockets. + int get_remote_addr (ACE_Addr &) const; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/LSOCK_Stream.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* ACE_LACKS_UNIX_DOMAIN_SOCKETS */ +#include /**/ "ace/post.h" +#endif /* ACE_LOCAL_SOCK_STREAM_H */ diff --git a/ACE/ace/LSOCK_Stream.inl b/ACE/ace/LSOCK_Stream.inl new file mode 100644 index 00000000000..bf7e45b376d --- /dev/null +++ b/ACE/ace/LSOCK_Stream.inl @@ -0,0 +1,25 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// Sets both the file descriptors... Overrides handle from the base +// classes. + +ACE_INLINE void +ACE_LSOCK_Stream::set_handle (ACE_HANDLE fd) +{ + ACE_TRACE ("ACE_LSOCK_Stream::set_handle"); + this->ACE_SOCK_Stream::set_handle (fd); + this->ACE_LSOCK::set_handle (fd); +} + +ACE_INLINE ACE_HANDLE +ACE_LSOCK_Stream::get_handle (void) const +{ + ACE_TRACE ("ACE_LSOCK_Stream::get_handle"); + return this->ACE_SOCK_Stream::get_handle (); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Lib_Find.cpp b/ACE/ace/Lib_Find.cpp new file mode 100644 index 00000000000..6db6d78973b --- /dev/null +++ b/ACE/ace/Lib_Find.cpp @@ -0,0 +1,769 @@ +// $Id$ + +#include "ace/Lib_Find.h" +#include "ace/Log_Msg.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_errno.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_unistd.h" +#include "ace/OS_NS_stdlib.h" +#include "ace/OS_Memory.h" +#include "ace/OS_NS_fcntl.h" + +#if defined (ACE_WIN32) +# include "ace/OS_NS_strings.h" +#endif /* ACE_WIN32 */ + +#if defined (ACE_OPENVMS) +#include "ace/RB_Tree.h" +#include "ace/Thread_Mutex.h" +#include "ace/Singleton.h" + +#include /**/ "descrip.h" +#include /**/ "chfdef.h" +#include /**/ "stsdef.h" +#include /**/ "libdef.h" + +extern "C" int LIB$FIND_IMAGE_SYMBOL(...); + +class ACE_LD_Symbol_Registry +{ + // @internal + // = TITLE + // Implements a class to register symbols and addresses for use with DLL + // symbol retrieval. + // + // = DESCRIPTION + // OpenVMS restricts symbol length to 31 characters encoding any symbols + // longer than that. In these cases dlsym() only works with the encoded + // names. + // This creates serious problems for the service configurator framework + // where the factory method names often exceed 31 chars and where loading + // is based on retrieval of method pointers using the *full* name. + // For OpenVMS we therefor added this singleton class and the + // ACE_Dynamic_Svc_Registrar class which registers full names and function + // pointers with this singleton at the time the static ACE_Dynamic_Svc_Registrar + // object is created in a (service) DLL. + // By forcing the DLL to load using a common symbol ("NULL") we trigger static + // object creation *before* the full names are referenced. + // Symbol references will be resolved as follows on OpenVMS: + // - first try directly from DLL using the RTL dlsym() function and if that fails; + // - try to find symbol in singleton registry. +public: + + typedef ACE_RB_Tree, + ACE_Thread_Mutex> + TREE; + + void register_symbol (const ACE_TCHAR* symname, void* symaddr); + + void* find_symbol (const ACE_TCHAR* symname); + + ACE_LD_Symbol_Registry () {} +private: + + TREE symbol_registry_; +}; + +void +ACE_LD_Symbol_Registry::register_symbol (const ACE_TCHAR* symname, + void* symaddr) +{ + int const result = symbol_registry_.bind (symname, symaddr); + if (result == 1) + { + ACE_DEBUG((LM_INFO, ACE_TEXT ("ACE_LD_Symbol_Registry:") + ACE_TEXT (" duplicate symbol %s registered\n"), + ACE_TEXT_ALWAYS_CHAR (symname))); + } + else if (result == -1) + { + ACE_ERROR((LM_ERROR, ACE_TEXT ("ACE_LD_Symbol_Registry:") + ACE_TEXT (" failed to register symbol %s\n"), + ACE_TEXT_ALWAYS_CHAR (symname))); + } +} + +void* +ACE_LD_Symbol_Registry::find_symbol (const ACE_TCHAR* symname) +{ + void* symaddr = 0; + int const result = symbol_registry_.find (symname, symaddr); + + return (result == 0 ? symaddr : 0); +} + +/// Declare a process wide singleton +ACE_SINGLETON_DECLARE (ACE_Singleton, + ACE_LD_Symbol_Registry, + ACE_Thread_Mutex) + +typedef ACE_Singleton + ACE_LD_SYMBOL_REGISTRY; + +#if defined (ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION) +template ACE_Singleton * + ACE_Singleton::singleton_; +#endif /* ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION */ +#endif + +ACE_RCSID(ace, Lib_Find, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +int +ACE::ldfind (const ACE_TCHAR* filename, + ACE_TCHAR pathname[], + size_t maxpathnamelen) +{ + ACE_TRACE ("ACE::ldfind"); +#if defined (ACE_OPENVMS) + if (ACE_OS::strlen(filename) >= maxpathnamelen) + { + errno = ENOMEM; + return -1; + } + + dsc$descriptor nameDsc; + nameDsc.dsc$b_class = DSC$K_CLASS_S; + nameDsc.dsc$b_dtype = DSC$K_DTYPE_T; + nameDsc.dsc$w_length = ACE_OS::strlen(filename); + nameDsc.dsc$a_pointer = (char*)filename; + + char symbol[] = "NULL"; + dsc$descriptor symbolDsc; + symbolDsc.dsc$b_class = DSC$K_CLASS_S; + symbolDsc.dsc$b_dtype = DSC$K_DTYPE_T; + symbolDsc.dsc$w_length = ACE_OS::strlen(symbol); + symbolDsc.dsc$a_pointer = symbol; + + int symbolValue; + int result; + try + { + result = LIB$FIND_IMAGE_SYMBOL(&nameDsc, &symbolDsc, &symbolValue, 0, 0); + } + catch (chf$signal_array& sig) + { + result = sig.chf$l_sig_name; + } + + int severity = result & STS$M_SEVERITY; + int conditionId = result & STS$M_COND_ID; + if (severity == STS$K_SUCCESS || severity == STS$K_WARNING || severity == STS$K_INFO || + (severity == STS$K_ERROR && conditionId == (LIB$_KEYNOTFOU & STS$M_COND_ID))) + { + ACE_OS::strcpy(pathname, filename); + return 0; + } + + if (ACE_OS::strlen(filename) + ACE_OS::strlen(ACE_DLL_PREFIX) >= maxpathnamelen) + { + errno = ENOMEM; + return -1; + } + + + ACE_OS::strcpy(pathname, ACE_DLL_PREFIX); + ACE_OS::strcat(pathname, filename); + nameDsc.dsc$w_length = ACE_OS::strlen(pathname); + nameDsc.dsc$a_pointer = pathname; + try + { + result = LIB$FIND_IMAGE_SYMBOL(&nameDsc, &symbolDsc, &symbolValue, 0, 0); + } + catch (chf$signal_array& sig) + { + result = sig.chf$l_sig_name; + } + + severity = result & STS$M_SEVERITY; + conditionId = result & STS$M_COND_ID; + if (severity == STS$K_SUCCESS || severity == STS$K_WARNING || severity == STS$K_INFO || + (severity == STS$K_ERROR && conditionId == (LIB$_KEYNOTFOU & STS$M_COND_ID))) + { + return 0; + } + errno = ENOENT; + return -1; +#endif /* ACE_OPENVMS */ + +#if defined (ACE_WIN32) && !defined (ACE_HAS_WINCE) && \ + !defined (ACE_HAS_PHARLAP) + ACE_TCHAR expanded_filename[MAXPATHLEN]; + if (ACE_TEXT_ExpandEnvironmentStrings (filename, + expanded_filename, + sizeof expanded_filename + / sizeof (ACE_TCHAR))) + filename = expanded_filename; +#endif /* ACE_WIN32 && !ACE_HAS_WINCE && !ACE_HAS_PHARLAP */ + + ACE_TCHAR tempcopy[MAXPATHLEN + 1]; + ACE_TCHAR searchpathname[MAXPATHLEN + 1]; +#if defined (ACE_WIN32) && defined (ACE_LD_DECORATOR_STR) && !defined (ACE_DISABLE_DEBUG_DLL_CHECK) + ACE_TCHAR decorator[] = ACE_LD_DECORATOR_STR; + ACE_TCHAR searchfilename[MAXPATHLEN + sizeof(decorator) / sizeof (ACE_TCHAR)]; +#else + ACE_TCHAR searchfilename[MAXPATHLEN + 1]; +#endif /* ACE_WIN32 && ACE_LD_DECORATOR_STR && !ACE_DISABLE_DEBUG_DLL_CHECK */ + + // Create a copy of filename to work with. + if (ACE_OS::strlen (filename) + 1 + > (sizeof tempcopy / sizeof (ACE_TCHAR))) + { + errno = ENOMEM; + return -1; + } + else + ACE_OS::strcpy (tempcopy, filename); + + // Insert canonical directory separators. + ACE_TCHAR *separator_ptr; + +#if (ACE_DIRECTORY_SEPARATOR_CHAR != '/') + // Make all the directory separators "canonical" to simplify + // subsequent code. + ACE::strrepl (tempcopy, ACE_DIRECTORY_SEPARATOR_CHAR, '/'); +#endif /* ACE_DIRECTORY_SEPARATOR_CHAR */ + + // Separate filename from pathname. + separator_ptr = ACE_OS::strrchr (tempcopy, '/'); + + // This is a relative path. + if (separator_ptr == 0) + { + searchpathname[0] = '\0'; + ACE_OS::strcpy (searchfilename, tempcopy); + } + else // This is an absolute path. + { + ACE_OS::strcpy (searchfilename, separator_ptr + 1); + separator_ptr[1] = '\0'; + ACE_OS::strcpy (searchpathname, tempcopy); + } + + bool has_suffix = false; + + // Check to see if this has an appropriate DLL suffix for the OS + // platform. + ACE_TCHAR *s = ACE_OS::strrchr (searchfilename, '.'); + + const ACE_TCHAR *dll_suffix = ACE_DLL_SUFFIX; + + if (s != 0) + { + // If we have a dot, we have a suffix + has_suffix = true; + + // Check whether this matches the appropriate platform-specific + // suffix. +#if defined (ACE_WIN32) + // Use on any platform with + // case-insensitive filenames. + if (ACE_OS::strcasecmp (s, dll_suffix) != 0) +#else + if (ACE_OS::strcmp (s, dll_suffix) != 0) +#endif /* ACE_WIN32 */ + { + ACE_ERROR ((LM_WARNING, + ACE_TEXT ("Warning: improper suffix for a ") + ACE_TEXT ("shared library on this platform: %s\n"), + s)); + } + } + + // Make sure we've got enough space in searchfilename. + if (ACE_OS::strlen (searchfilename) + + ACE_OS::strlen (ACE_DLL_PREFIX) + + (has_suffix ? 0 : ACE_OS::strlen (dll_suffix)) + >= (sizeof searchfilename / sizeof (ACE_TCHAR))) + { + errno = ENOMEM; + return -1; + } + +#if defined (ACE_WIN32) && defined (ACE_LD_DECORATOR_STR) && !defined (ACE_DISABLE_DEBUG_DLL_CHECK) + size_t len_searchfilename = ACE_OS::strlen (searchfilename); + if (! has_suffix) + ACE_OS::strcpy (searchfilename + len_searchfilename, + decorator); + + for (int tag = 1; tag >= 0; tag --) + { + if (tag == 0) + searchfilename [len_searchfilename] = 0; + +#endif /* ACE_WIN32 && ACE_LD_DECORATOR_STR && !ACE_DISABLE_DEBUG_DLL_CHECK */ + // Use absolute pathname if there is one. + if (ACE_OS::strlen (searchpathname) > 0) + { + if (ACE_OS::strlen (searchfilename) + + ACE_OS::strlen (searchpathname) >= maxpathnamelen) + { + errno = ENOMEM; + return -1; + } + else + { +#if (ACE_DIRECTORY_SEPARATOR_CHAR != '/') + // Revert to native path name separators. + ACE::strrepl (searchpathname, + '/', + ACE_DIRECTORY_SEPARATOR_CHAR); +#endif /* ACE_DIRECTORY_SEPARATOR_CHAR */ + // First, try matching the filename *without* adding a + // prefix. + ACE_OS::sprintf (pathname, + ACE_TEXT ("%s%s%s"), + searchpathname, + searchfilename, + has_suffix ? ACE_TEXT ("") : dll_suffix); + if (ACE_OS::access (pathname, F_OK) == 0) + return 0; + + // Second, try matching the filename *with* adding a prefix. + ACE_OS::sprintf (pathname, + ACE_TEXT ("%s%s%s%s"), + searchpathname, + ACE_DLL_PREFIX, + searchfilename, + has_suffix ? ACE_TEXT ("") : dll_suffix); + if (ACE_OS::access (pathname, F_OK) == 0) + return 0; + } + } + + // Use relative filenames via LD_LIBRARY_PATH or PATH (depending on + // OS platform). + else + { +#if defined (ACE_WIN32) && !defined (ACE_HAS_WINCE) + ACE_TCHAR *file_component = 0; + DWORD pathlen = + ACE_TEXT_SearchPath (0, + searchfilename, + dll_suffix, + static_cast (maxpathnamelen), + pathname, + &file_component); + if (pathlen >= maxpathnamelen) + { + errno = ENOMEM; + return -1; + } + else if (pathlen > 0) + return 0; + + // In case not found we should try again with the ACE_DLL_PREFIX + // prefixed + ACE_OS::strcpy (searchfilename, ACE_DLL_PREFIX); + ACE_OS::strcat (searchfilename, tempcopy); + pathlen = + ACE_TEXT_SearchPath (0, + searchfilename, + dll_suffix, + static_cast (maxpathnamelen), + pathname, + &file_component); + if (pathlen >= maxpathnamelen) + { + errno = ENOMEM; + return -1; + } + else if (pathlen > 0) + return 0; +#else + ACE_TCHAR *ld_path; +# if defined ACE_DEFAULT_LD_SEARCH_PATH + ld_path = ACE_DEFAULT_LD_SEARCH_PATH; +# else +# if defined (ACE_WIN32) || !defined (ACE_USES_WCHAR) + ld_path = ACE_OS::getenv (ACE_LD_SEARCH_PATH); +# else + // Wide-char, non-Windows only offers char * getenv. So capture + // it, translate to wide-char, and continue. + ACE_Ascii_To_Wide wide_ldpath + (ACE_OS::getenv (ACE_TEXT_ALWAYS_CHAR (ACE_LD_SEARCH_PATH))); + ld_path = wide_ldpath.wchar_rep (); +# endif /* ACE_WIN32 || !ACE_USES_WCHAR */ +# endif /* ACE_DEFAULT_LD_SEARCH_PATH */ + +#if defined (ACE_HAS_WINCE) + ACE_TCHAR *ld_path_temp = 0; + if (ld_path != 0) + { + ld_path_temp = (ACE_TCHAR *) + ACE_OS::malloc ((ACE_OS::strlen (ld_path) + 2) + * sizeof (ACE_TCHAR)); + if (ld_path_temp != 0) + { + ACE_OS::strcpy (ld_path_temp, + ACE_LD_SEARCH_PATH_SEPARATOR_STR); + + ACE_OS::strcat (ld_path_temp, ld_path); + ld_path = ld_path_temp; + } + else + { + ACE_OS::free ((void *) ld_path_temp); + ld_path = ld_path_temp = 0; + } + } +#endif /* ACE_HAS_WINCE */ + + if (ld_path != 0 + && (ld_path = ACE_OS::strdup (ld_path)) != 0) + { + // strtok has the strange behavior of not separating the + // string ":/foo:/bar" into THREE tokens. One would expect + // that the first iteration the token would be an empty + // string, the second iteration would be "/foo", and the + // third iteration would be "/bar". However, this is not + // the case; one only gets two iterations: "/foo" followed + // by "/bar". + + // This is especially a problem in parsing Unix paths + // because it is permissible to specify 'the current + // directory' as an empty entry. So, we introduce the + // following special code to cope with this: + + // Look at each dynamic lib directory in the search path. + + ACE_TCHAR *nextholder = 0; + const ACE_TCHAR *path_entry = + ACE::strsplit_r (ld_path, + ACE_LD_SEARCH_PATH_SEPARATOR_STR, + nextholder); + int result = 0; + + for (;;) + { + // Check if at end of search path. + if (path_entry == 0) + { + errno = ENOENT; + result = -1; + break; + } + else if (ACE_OS::strlen (path_entry) + + 1 + + ACE_OS::strlen (searchfilename) + >= maxpathnamelen) + { + errno = ENOMEM; + result = -1; + break; + } + // This works around the issue where a path might have + // an empty component indicating 'current directory'. + // We need to do it here rather than anywhere else so + // that the loop condition will still work. + else if (path_entry[0] == '\0') + path_entry = ACE_TEXT ("."); + + // First, try matching the filename *without* adding a + // prefix. + ACE_OS::sprintf (pathname, + ACE_TEXT ("%s%c%s%s"), + path_entry, + ACE_DIRECTORY_SEPARATOR_CHAR, + searchfilename, + has_suffix ? ACE_TEXT ("") : dll_suffix); + if (ACE_OS::access (pathname, F_OK) == 0) + break; + + // Second, try matching the filename *with* adding a + // prefix. + ACE_OS::sprintf (pathname, + ACE_TEXT ("%s%c%s%s%s"), + path_entry, + ACE_DIRECTORY_SEPARATOR_CHAR, + ACE_DLL_PREFIX, + searchfilename, + has_suffix ? ACE_TEXT ("") : dll_suffix); + if (ACE_OS::access (pathname, F_OK) == 0) + break; + + // Fetch the next item in the path + path_entry = + ACE::strsplit_r (0, + ACE_LD_SEARCH_PATH_SEPARATOR_STR, + nextholder); + } + +#if defined (ACE_HAS_WINCE) + if (ld_path_temp != 0) + ACE_OS::free (ld_path_temp); +#endif /* ACE_HAS_WINCE */ + ACE_OS::free ((void *) ld_path); +#if defined (ACE_HAS_WINCE) && defined (ACE_LD_DECORATOR_STR) && \ + !defined (ACE_DISABLE_DEBUG_DLL_CHECK) + if (result == 0 || tag == 0) +#endif /* ACE_HAS_WINCE && ACE_LD_DECORATOR_STR && !ACE_DISABLE_DEBUG_DLL_CHECK */ + return result; + } +#endif /* ACE_WIN32 && !ACE_HAS_WINCE */ + } +#if defined (ACE_WIN32) && defined (ACE_LD_DECORATOR_STR) && !defined (ACE_DISABLE_DEBUG_DLL_CHECK) + } +#endif /* ACE_WIN32 && ACE_LD_DECORATOR_STR && !ACE_DISABLE_DEBUG_DLL_CHECK */ + + errno = ENOENT; + return -1; +} + +FILE * +ACE::ldopen (const ACE_TCHAR *filename, + const ACE_TCHAR *type) +{ + ACE_TRACE ("ACE::ldopen"); + + ACE_TCHAR buf[MAXPATHLEN + 1]; + if (ACE::ldfind (filename, + buf, + sizeof (buf) /sizeof (ACE_TCHAR)) == -1) + return 0; + else + return ACE_OS::fopen (buf, type); +} + +ACE_TCHAR * +ACE::ldname (const ACE_TCHAR *entry_point) +{ + ACE_TRACE ("ACE::ldname"); + +#if defined(ACE_NEEDS_DL_UNDERSCORE) + size_t size = + 1 // leading '_' + + ACE_OS::strlen (entry_point) + + 1; + + ACE_TCHAR *new_name; + ACE_NEW_RETURN (new_name, + ACE_TCHAR[size], + 0); + + ACE_OS::strcpy (new_name, ACE_TEXT ("_")); + ACE_OS::strcat (new_name, entry_point); + + return new_name; +#else /* ACE_NEEDS_DL_UNDERSCORE */ + size_t size = + ACE_OS::strlen (entry_point) + + 1; + + ACE_TCHAR *new_name; + ACE_NEW_RETURN (new_name, + ACE_TCHAR[size], + 0); + + ACE_OS::strcpy (new_name, entry_point); + return new_name; +#endif /* ACE_NEEDS_DL_UNDERSCORE */ +} + +#if defined (ACE_OPENVMS) +void +ACE::ldregister (const ACE_TCHAR *entry_point, + void* entry_addr) +{ + ACE_LD_SYMBOL_REGISTRY::instance ()->register_symbol (entry_point, + entry_addr); +} + +void * +ACE::ldsymbol (ACE_SHLIB_HANDLE sh, const ACE_TCHAR *entry_point) +{ + void* symaddr = ACE_OS::dlsym (sh, entry_point); + // if not found through dlsym() try registry + if (symaddr == 0) + symaddr = ACE_LD_SYMBOL_REGISTRY::instance ()->find_symbol (entry_point); + + return symaddr; +} +#endif + +int +ACE::get_temp_dir (ACE_TCHAR *buffer, size_t buffer_len) +{ + int result; +#if defined (ACE_WIN32) + result = ACE_TEXT_GetTempPath (static_cast (buffer_len), + buffer); + + // Make sure to return -1 if there is an error + if (result == 0 && ::GetLastError () != ERROR_SUCCESS + || result > static_cast (buffer_len)) + result = -1; + +#else /* ACE_WIN32 */ + + // NOTE! Non-Windows platforms don't deal with wide chars for env. + // variables, so do this narrow-char and convert to wide for the + // caller if necessary. + + // On non-win32 platforms, check to see what the TMPDIR environment + // variable is defined to be. If it doesn't exist, just use /tmp + const char *tmpdir = ACE_OS::getenv ("TMPDIR"); + + if (tmpdir == 0) + tmpdir = "/tmp"; + + size_t len = ACE_OS::strlen (tmpdir); + + // Check to see if the buffer is large enough for the string, + // another /, and its null character (hence the + 2) + if ((len + 2) > buffer_len) + { + result = -1; + } + else + { + ACE_OS::strcpy (buffer, ACE_TEXT_CHAR_TO_TCHAR (tmpdir)); + + // Add a trailing slash because we cannot assume there is already one + // at the end. And having an extra one should not cause problems. + buffer[len] = ACE_TEXT ('/'); + buffer[len + 1] = 0; + result = 0; + } +#endif /* ACE_WIN32 */ + return result; +} + +ACE_HANDLE +ACE::open_temp_file (const ACE_TCHAR *name, int mode, int perm) +{ +#if defined (ACE_WIN32) + ACE_UNUSED_ARG (perm); + ACE_HANDLE handle = ACE_OS::open (name, + mode, + FILE_SHARE_READ + | FILE_SHARE_WRITE + | FILE_SHARE_DELETE); +#else + // Open it. + ACE_HANDLE handle = ACE_OS::open (name, mode, perm); +#endif /* ACE_WIN32 */ + + if (handle == ACE_INVALID_HANDLE) + return ACE_INVALID_HANDLE; + + // Unlink it so that the file will be removed automatically when the + // process goes away. + if (ACE_OS::unlink (name) == -1) + return ACE_INVALID_HANDLE; + else + // Return the handle. + return handle; +} + +size_t +ACE::strrepl (char *s, char search, char replace) +{ + ACE_TRACE ("ACE::strrepl"); + + size_t replaced = 0; + + for (size_t i = 0; s[i] != '\0'; i++) + if (s[i] == search) + { + s[i] = replace; + ++replaced; + } + + return replaced; +} + + +// Split a string up into 'token'-delimited pieces, ala Perl's +// "split". + +char * +ACE::strsplit_r (char *str, + const char *token, + char *&next_start) +{ + char *result = 0; + + if (str != 0) + next_start = str; + + if (next_start != 0) + { + char *tok_loc = ACE_OS::strstr (next_start, token); + + if (tok_loc != 0) + { + // Return the beginning of the string. + result = next_start; + + // Insure it's terminated. + *tok_loc = '\0'; + next_start = tok_loc + ACE_OS::strlen (token); + } + else + { + result = next_start; + next_start = (char *) 0; + } + } + + return result; +} + +#if defined (ACE_HAS_WCHAR) +wchar_t * +ACE::strsplit_r (wchar_t *str, + const wchar_t *token, + wchar_t *&next_start) +{ + wchar_t *result = 0; + + if (str != 0) + next_start = str; + + if (next_start != 0) + { + wchar_t *tok_loc = ACE_OS::strstr (next_start, token); + + if (tok_loc != 0) + { + // Return the beginning of the string. + result = next_start; + + // Insure it's terminated. + *tok_loc = '\0'; + next_start = tok_loc + ACE_OS::strlen (token); + } + else + { + result = next_start; + next_start = (wchar_t *) 0; + } + } + + return result; +} + +size_t +ACE::strrepl (wchar_t *s, wchar_t search, wchar_t replace) +{ + ACE_TRACE ("ACE::strrepl"); + + size_t replaced = 0; + + for (size_t i = 0; s[i] != '\0'; i++) + if (s[i] == search) + { + s[i] = replace; + ++replaced; + } + + return replaced; +} +#endif /* ACE_HAS_WCHAR */ + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Lib_Find.h b/ACE/ace/Lib_Find.h new file mode 100644 index 00000000000..ef146bb337d --- /dev/null +++ b/ACE/ace/Lib_Find.h @@ -0,0 +1,131 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Lib_Find.h + * + * All the static function calls needed to search and open shared + * libraries. + * + * $Id$ + */ +//============================================================================= + +#ifndef ACE_LIB_FIND_H +#define ACE_LIB_FIND_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" +#include /**/ "ace/ACE_export.h" +#include "ace/os_include/os_stdio.h" +#if defined (ACE_OPENVMS) +# include "ace/OS_NS_dlfcn.h" +#endif + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +namespace ACE +{ + // = Methods for searching and opening shared libraries. + + /** + * Finds the file @a filename either using an absolute path or using + * a relative path in conjunction with ACE_LD_SEARCH_PATH (e.g., + * $LD_LIBRARY_PATH on UNIX or the directories scaned by Win32 API + * SearchPath on Win32). This function will add appropriate suffix + * (e.g., .dll on Win32 or .so on UNIX) according to the OS + * platform. In addition, this function will apply the appropriate + * prefix (e.g., "lib" on UNIX and "" on Win32) if the @a filename + * doesn't match directly. + */ + extern ACE_Export int ldfind (const ACE_TCHAR* filename, + ACE_TCHAR pathname[], + size_t maxpathnamelen); + + /** + * Uses @c ldfind to locate and open the appropriate @a filename and + * returns a pointer to the file, else it returns a NULL + * pointer. @a type specifies how the file should be open. + */ + extern ACE_Export FILE *ldopen (const ACE_TCHAR *filename, + const ACE_TCHAR *type); + + /** + * Transforms @a entry_point into a form that can be located in a + * dynamic library using . For example, with Win32/Borland + * extern "C" functions which use the default calling convention + * have a '_' prepended. Always returns a buffer that has been + * dynamically allocated using . + */ + extern ACE_Export ACE_TCHAR *ldname (const ACE_TCHAR *entry_point); + + +#if defined (ACE_OPENVMS) + /** + * Registers an @a entry_point and its address for later retrieval + * through the ACE::ldsymbol () method. + * For use in cases where the OS compiler encodes long symbolnames. + */ + extern ACE_Export void ldregister (const ACE_TCHAR *entry_point, + void* entry_addr); + + /** + * Looks up an @a entry_point address either from previously registered + * symbols or through ACE_OS::dlsym (). + * Returns 0 in case the entry_point is not found, otherwise nonzero. + * For use in cases where the OS compiler encodes long symbolnames. + */ + extern ACE_Export void *ldsymbol (ACE_SHLIB_HANDLE sh, + const ACE_TCHAR *entry_point); +#endif + + /** + * Returns the temporary directory including the trailing slash in + * @a buffer. Returns -1 for an error or if the buffer_len is not + * long enough. + */ + extern ACE_Export int get_temp_dir (ACE_TCHAR *buffer, size_t buffer_len); + + /// Opening the temp file. File is automagically unlinked when it is + /// closed. This is useful for have temp files. + extern ACE_Export ACE_HANDLE open_temp_file (const ACE_TCHAR *name, + int mode, + int perm = 0); + + // @@ Though the following functions dont come under the same category as + // above, these are used only in the functions in this class. So it makes + // more sense to move these functions too to this class. + // + /// Replace all instances of @a search in @a s with @a replace. Returns + /// the number of replacements made. + extern ACE_Export size_t strrepl (char *s, char search, char replace); + + /** + * Splits string into pieces separated by the string . + * is an opaque cookie handed back by the call to store + * its state for the next invocation, thus making it re-entrant. + * This operates very similar to Perl's function except that + * it returns pieces one at a time instead of into an array. + */ + extern ACE_Export char *strsplit_r (char *s, + const char *token, + char *&next_start); + +#if defined (ACE_HAS_WCHAR) + /// As strrepl, but for wide characters. + extern ACE_Export size_t strrepl (wchar_t *s, + wchar_t search, + wchar_t replace); + + /// As strsplit_r, but for wide characters. + extern ACE_Export wchar_t *strsplit_r (wchar_t *s, + const wchar_t *token, + wchar_t *&next_start); +#endif /* ACE_HAS_WCHAR */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" +#endif /* ACE_LIB_FIND_H */ + diff --git a/ACE/ace/Local_Memory_Pool.cpp b/ACE/ace/Local_Memory_Pool.cpp new file mode 100644 index 00000000000..09dbb19000d --- /dev/null +++ b/ACE/ace/Local_Memory_Pool.cpp @@ -0,0 +1,144 @@ +// $Id$ + +// Local_Memory_Pool.cpp +#include "ace/Local_Memory_Pool.h" +#include "ace/Auto_Ptr.h" +#include "ace/OS_Memory.h" +#include "ace/Log_Msg.h" + +ACE_RCSID(ace, Local_Memory_Pool, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_Local_Memory_Pool) + +void +ACE_Local_Memory_Pool::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Local_Memory_Pool::dump"); +#endif /* ACE_HAS_DUMP */ +} + +ACE_Local_Memory_Pool::ACE_Local_Memory_Pool (const ACE_TCHAR *, + const OPTIONS *) +{ + ACE_TRACE ("ACE_Local_Memory_Pool::ACE_Local_Memory_Pool"); +} + +ACE_Local_Memory_Pool::~ACE_Local_Memory_Pool (void) +{ + // Free up all memory allocated by this pool. + this->release (); +} + +// Ask system for initial chunk of local memory. +void * +ACE_Local_Memory_Pool::init_acquire (size_t nbytes, + size_t &rounded_bytes, + int &first_time) +{ + ACE_TRACE ("ACE_Local_Memory_Pool::init_acquire"); + // Note that we assume that when ACE_Local_Memory_Pool is used, + // ACE_Malloc's constructor will only get called once. If this + // assumption doesn't hold, we are in deep trouble! + + first_time = 1; + return this->acquire (nbytes, rounded_bytes); +} + +void * +ACE_Local_Memory_Pool::acquire (size_t nbytes, + size_t &rounded_bytes) +{ + ACE_TRACE ("ACE_Local_Memory_Pool::acquire"); + rounded_bytes = this->round_up (nbytes); + + char *temp = 0; + ACE_NEW_RETURN (temp, + char[rounded_bytes], + 0); + + ACE_Auto_Basic_Array_Ptr cp (temp); + + if (this->allocated_chunks_.insert (cp.get ()) != 0) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("(%P|%t) insertion into set failed\n")), + 0); + + return cp.release (); +} + +int +ACE_Local_Memory_Pool::release (int) +{ + ACE_TRACE ("ACE_Local_Memory_Pool::release"); + + // Zap the memory we allocated. + for (ACE_Unbounded_Set::iterator i = this->allocated_chunks_.begin (); + i != this->allocated_chunks_.end (); + ++i) + delete [] *i; + this->allocated_chunks_.reset (); + return 0; +} + +int +ACE_Local_Memory_Pool::sync (ssize_t, int) +{ + ACE_TRACE ("ACE_Local_Memory_Pool::sync"); + return 0; +} + +int +ACE_Local_Memory_Pool::sync (void *, size_t, int) +{ + ACE_TRACE ("ACE_Local_Memory_Pool::sync"); + return 0; +} + +int +ACE_Local_Memory_Pool::protect (ssize_t, int) +{ + ACE_TRACE ("ACE_Local_Memory_Pool::protect"); + return 0; +} + +int +ACE_Local_Memory_Pool::protect (void *, size_t, int) +{ + ACE_TRACE ("ACE_Local_Memory_Pool::protect"); + return 0; +} + +#if defined (ACE_WIN32) +int +ACE_Local_Memory_Pool::seh_selector (void *) +{ + return 0; + // Continue propagate the structural exception up. +} +#endif /* ACE_WIN32 */ + +int +ACE_Local_Memory_Pool::remap (void *) +{ + return 0; + // Not much can be done. +} + +void * +ACE_Local_Memory_Pool::base_addr (void) const +{ + return 0; +} + +// Let the underlying new operator figure out the alignment... +size_t +ACE_Local_Memory_Pool::round_up (size_t nbytes) +{ + ACE_TRACE ("ACE_Local_Memory_Pool::round_up"); + return ACE::round_to_pagesize (nbytes); +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Local_Memory_Pool.h b/ACE/ace/Local_Memory_Pool.h new file mode 100644 index 00000000000..0a7abe4912a --- /dev/null +++ b/ACE/ace/Local_Memory_Pool.h @@ -0,0 +1,133 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Local_Memory_Pool.h + * + * $Id$ + * + * @author Dougls C. Schmidt + * @author Prashant Jain + */ +//============================================================================= + +#ifndef ACE_LOCAL_MEMORY_POOL_H +#define ACE_LOCAL_MEMORY_POOL_H +#include /**/ "ace/pre.h" + +#include "ace/os_include/sys/os_mman.h" /* Need PROT_RDWR */ +#include "ace/ACE.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Unbounded_Set.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Local_Memory_Pool_Options + * + * @brief Helper class for Local Memory Pool constructor options. + * + * This should be a nested class, but that breaks too many + * compilers. + */ +class ACE_Export ACE_Local_Memory_Pool_Options +{ +}; + +/** + * @class ACE_Local_Memory_Pool + * + * @brief Make a memory pool that is based on C++ new/delete. This is + * useful for integrating existing components that use new/delete + * into the ACE Malloc scheme... + */ +class ACE_Export ACE_Local_Memory_Pool +{ +public: + typedef ACE_Local_Memory_Pool_Options OPTIONS; + + /// Initialize the pool. + ACE_Local_Memory_Pool (const ACE_TCHAR *backing_store_name = 0, + const OPTIONS *options = 0); + + virtual ~ACE_Local_Memory_Pool (void); + + /// Ask system for initial chunk of local memory. + virtual void *init_acquire (size_t nbytes, + size_t &rounded_bytes, + int &first_time); + + /// Acquire at least @a nbytes from the memory pool. @a rounded_bytes is + /// the actual number of bytes allocated. + virtual void *acquire (size_t nbytes, + size_t &rounded_bytes); + + /// Instruct the memory pool to release all of its resources. + virtual int release (int destroy = 1); + + /** + * Sync @a len bytes of the memory region to the backing store + * starting at base_addr_>. If @a len == -1 then sync the + * whole region. + */ + virtual int sync (ssize_t len = -1, int flags = MS_SYNC); + + /// Sync @a len bytes of the memory region to the backing store + /// starting at @a add_. + virtual int sync (void *addr, size_t len, int flags = MS_SYNC); + + /** + * Change the protection of the pages of the mapped region to @a prot + * starting at base_addr_> up to @a len bytes. If @a len == -1 + * then change protection of all pages in the mapped region. + */ + virtual int protect (ssize_t len = -1, int prot = PROT_RDWR); + + /// Change the protection of the pages of the mapped region to @a prot + /// starting at @a addr up to @a len bytes. + virtual int protect (void *addr, size_t len, int prot = PROT_RDWR); + +#if defined (ACE_WIN32) + /** + * Win32 Structural exception selector. The return value decides + * how to handle memory pool related structural exceptions. Returns + * 1, 0, or , -1. + */ + virtual int seh_selector (void *); +#endif /* ACE_WIN32 */ + + /** + * Try to extend the virtual address space so that @a addr is now + * covered by the address mapping. Always returns 0 since we can't + * remap a local memory pool. + */ + virtual int remap (void *addr); + + /// Return the base address of this memory pool, 0 if base_addr + /// never changes. + virtual void *base_addr (void) const; + + /// Dump the state of an object. + virtual void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +protected: + /// List of memory that we have allocated. + ACE_Unbounded_Set allocated_chunks_; + + /// Implement the algorithm for rounding up the request to an + /// appropriate chunksize. + virtual size_t round_up (size_t nbytes); + +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" +#endif /* ACE_LOCAL_MEMORY_POOL_H */ diff --git a/ACE/ace/Local_Name_Space.cpp b/ACE/ace/Local_Name_Space.cpp new file mode 100644 index 00000000000..7047c234095 --- /dev/null +++ b/ACE/ace/Local_Name_Space.cpp @@ -0,0 +1,169 @@ +#include "ace/Local_Name_Space.h" +#include "ace/ACE.h" +#include "ace/RW_Process_Mutex.h" +#include "ace/SString.h" +#include "ace/OS_NS_string.h" +#include "ace/Truncate.h" + +ACE_RCSID (ace, + Local_Name_Space, + "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_NS_String::~ACE_NS_String (void) +{ + if (this->delete_rep_) + delete [] this->rep_; +} + +ACE_WCHAR_T * +ACE_NS_String::fast_rep (void) const +{ + ACE_TRACE ("ACE_NS_String::fast_rep"); + return this->rep_; +} + +ACE_NS_String::operator ACE_NS_WString () const +{ + ACE_TRACE ("ACE_NS_String::operator ACE_NS_WString"); + return ACE_NS_WString (this->rep_, + (this->len_ / sizeof (ACE_WCHAR_T)) - 1); +} + +size_t +ACE_NS_String::len (void) const +{ + ACE_TRACE ("ACE_NS_String::len"); + return this->len_; +} + +char * +ACE_NS_String::char_rep (void) const +{ + ACE_TRACE ("ACE_NS_String::char_rep"); + ACE_NS_WString w_string (this->rep_, + (this->len_ / sizeof (ACE_WCHAR_T)) - 1); + return w_string.char_rep (); +} + +ACE_NS_String::ACE_NS_String (void) + : len_ (0), + rep_ (0), + delete_rep_ (false) +{ + ACE_TRACE ("ACE_NS_String::ACE_NS_String"); +} + +ACE_NS_String::ACE_NS_String (const ACE_NS_WString &s) + : len_ ((s.length () + 1) * sizeof (ACE_WCHAR_T)), + rep_ (s.rep ()), + delete_rep_ (true) +{ + ACE_TRACE ("ACE_NS_String::ACE_NS_String"); +} + +int +ACE_NS_String::strstr (const ACE_NS_String &s) const +{ + ACE_TRACE ("ACE_NS_String::strstr"); + + if (this->len_ < s.len_) + // If they're larger than we are they can't be a substring of us! + return -1; + else if (this->len_ == s.len_) + // Check if we're equal. + return *this == s ? 0 : -1; + else + { + // They're smaller than we are... + const size_t len = (this->len_ - s.len_) / sizeof (ACE_WCHAR_T); + const size_t pat_len = s.len_ / sizeof (ACE_WCHAR_T) - 1; + + for (size_t i = 0; i <= len; ++i) + { + size_t j; + + for (j = 0; j < pat_len; ++j) + if (this->rep_[i + j] != s.rep_[j]) + break; + + if (j == pat_len) + // Found a match! Return the index. + return ACE_Utils::truncate_cast (i); + } + + return -1; + } +} + +bool +ACE_NS_String::operator == (const ACE_NS_String &s) const +{ + ACE_TRACE ("ACE_NS_String::operator =="); + return this->len_ == s.len_ + && ACE_OS::memcmp ((void *) this->rep_, + (void *) s.rep_, this->len_) == 0; +} + +bool +ACE_NS_String::operator != (const ACE_NS_String &s) const +{ + ACE_TRACE ("ACE_NS_String::operator !="); + return !this->operator == (s); +} + +ACE_NS_String::ACE_NS_String (ACE_WCHAR_T *dst, + const ACE_WCHAR_T *src, + size_t bytes) + : len_ (bytes), + rep_ (dst), + delete_rep_ (false) +{ + ACE_TRACE ("ACE_NS_String::ACE_NS_String"); + ACE_OS::memcpy (this->rep_, src, bytes); +} + +u_long +ACE_NS_String::hash (void) const +{ + return ACE::hash_pjw + (reinterpret_cast (const_cast (this->rep_)), + this->len_); +} + +ACE_NS_Internal::ACE_NS_Internal (void) + : value_ (), + type_ () +{ +} + +ACE_NS_Internal::ACE_NS_Internal (ACE_NS_String &value, const char *type) + : value_ (value), + type_ (type) +{ + ACE_TRACE ("ACE_NS_Internal::ACE_NS_Internal"); +} + +bool +ACE_NS_Internal::operator == (const ACE_NS_Internal &s) const +{ + ACE_TRACE ("ACE_NS_Internal::operator =="); + return this->value_ == s.value_; +} + +ACE_NS_String +ACE_NS_Internal::value (void) +{ + ACE_TRACE ("ACE_NS_Internal::value"); + return this->value_; +} + +const char * +ACE_NS_Internal::type (void) +{ + ACE_TRACE ("ACE_NS_Internal::type"); + return this->type_; +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Local_Name_Space.h b/ACE/ace/Local_Name_Space.h new file mode 100644 index 00000000000..381d2d0d5a4 --- /dev/null +++ b/ACE/ace/Local_Name_Space.h @@ -0,0 +1,132 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Local_Name_Space.h + * + * $Id$ + * + * @author Prashant Jain (pjain@cs.wustl.edu) + * @author Irfan Pyarali (irfan@wuerl.wustl.edu) + * @author Douglas C. Schmidt (schmidt@cs.wustl.edu). + */ +//============================================================================= + +#ifndef ACE_LOCAL_NAME_SPACE_H +#define ACE_LOCAL_NAME_SPACE_H + +#include /**/ "ace/pre.h" + +#include "ace/Malloc_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_NS_WString; + +/** + * @class ACE_NS_String + * + * @brief This class and ACE_NS_Internal are used as Adapters to work + * with the Map_Manager. + * + * In order to work correctly, this class must be able to + * convert back and forth with . + */ +class ACE_Export ACE_NS_String +{ +public: + // = Initialization. + /// Default "no-op" constructor. + ACE_NS_String (void); + + /// Initialization method. + ACE_NS_String (ACE_WCHAR_T *dst, + const ACE_WCHAR_T *src, + size_t len); + + /// Converts an ACE_NS_WString to an ACE_NS_String; + ACE_NS_String (const ACE_NS_WString &); + + /// Destructor + ~ACE_NS_String (void); + + /// Converts an ACE_NS_String to fresh copy of an ACE_NS_WString; + operator ACE_NS_WString () const; + + /// Return the ASCII character representation. + char *char_rep (void) const; + + /// Matches on substrings. + int strstr (const ACE_NS_String &) const; + + /// Compare an ACE_NS_String. + bool operator == (const ACE_NS_String &) const; + + /// Compare an ACE_NS_String. + bool operator != (const ACE_NS_String &) const; + + /// Returns length of the string + size_t len (void) const; + + /// Returns the underlying representation. + ACE_WCHAR_T *fast_rep (void) const; + + /// Returns a hash value for this string. + u_long hash (void) const; + +private: + /// Length of the string. + size_t len_; + + /// This actually points into shared/persistent memory. + ACE_WCHAR_T *rep_; + + /// Should rep_ be deleted when destructed (only used + /// for WString conversions) + bool delete_rep_; +}; + +/** + * @class ACE_NS_Internal + * + * @brief This class and ACE_NS_String are used as Adapters to work + * with the Map_Manager. + */ +class ACE_Export ACE_NS_Internal +{ +public: + /// No-op constructor. + ACE_NS_Internal (void); + + /// Constructor. + ACE_NS_Internal (ACE_NS_String &value, const char *type); + + /// Compare an ACE_NS_Internal + bool operator == (const ACE_NS_Internal &) const; + + /// Return value. + ACE_NS_String value (void); + + /// Return type. + const char *type (void); + +private: + /// Contains the value of the string. + ACE_NS_String value_; + + /// Contains the type of the string. + const char *type_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +// Include the ACE_Local_Name_Space templates stuff at this point. +#include "ace/Local_Name_Space_T.h" + +#include /**/ "ace/post.h" + +#endif /* ACE_LOCAL_NAME_SPACE_H */ diff --git a/ACE/ace/Local_Name_Space_T.cpp b/ACE/ace/Local_Name_Space_T.cpp new file mode 100644 index 00000000000..e59756dcb80 --- /dev/null +++ b/ACE/ace/Local_Name_Space_T.cpp @@ -0,0 +1,966 @@ +// $Id$ + +#ifndef ACE_LOCAL_NAME_SPACE_T_CPP +#define ACE_LOCAL_NAME_SPACE_T_CPP + +#include "ace/ACE.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Local_Name_Space.h" +#include "ace/Auto_Ptr.h" +#include "ace/Guard_T.h" +#include "ace/OS_NS_regex.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_unistd.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +ACE_Name_Space_Map::ACE_Name_Space_Map (ALLOCATOR *alloc) + : MAP_MANAGER (alloc) +{ + ACE_TRACE ("ACE_Name_Space_Map::ACE_Name_Space_Map"); +} + +template int +ACE_Name_Space_Map::close (ALLOCATOR *alloc) +{ + ACE_TRACE ("ACE_Name_Space_Map::close"); + + this->table_allocator_ = alloc; + this->entry_allocator_ = alloc; + return this->close_i (); +} + +template int +ACE_Name_Space_Map::bind (const ACE_NS_String &ext_id, + const ACE_NS_Internal &int_id, + ALLOCATOR *alloc) +{ + ACE_TRACE ("ACE_Name_Space_Map::bind"); + + this->table_allocator_ = alloc; + this->entry_allocator_ = alloc; + return this->bind_i (ext_id, int_id); +} + +template int +ACE_Name_Space_Map::unbind (const ACE_NS_String &ext_id, + ACE_NS_Internal &int_id, + ALLOCATOR *alloc) +{ + ACE_TRACE ("ACE_Name_Space_Map::unbind"); + + this->table_allocator_ = alloc; + this->entry_allocator_ = alloc; + return this->unbind_i (ext_id, int_id); +} + +template int +ACE_Name_Space_Map::rebind (const ACE_NS_String &ext_id, + const ACE_NS_Internal &int_id, + ACE_NS_String &old_ext_id, + ACE_NS_Internal &old_int_id, + ALLOCATOR *alloc) +{ + ACE_TRACE ("ACE_Name_Space_Map::rebind"); + + this->table_allocator_ = alloc; + this->entry_allocator_ = alloc; + return this->rebind_i (ext_id, int_id, old_ext_id, old_int_id); +} + +template int +ACE_Name_Space_Map::find (const ACE_NS_String &ext_id, + ACE_NS_Internal &int_id, + ALLOCATOR *alloc) +{ + ACE_TRACE ("ACE_Name_Space_Map::find"); + + this->table_allocator_ = alloc; + this->entry_allocator_ = alloc; + return this->find_i (ext_id, int_id); +} + +#if defined (ACE_WIN32) +template int +ACE_Local_Name_Space::remap (EXCEPTION_POINTERS *ep) +{ + ACE_TRACE ("ACE_Local_Name_Space::remap"); + + void *addr = (void *) ep->ExceptionRecord->ExceptionInformation[1]; + + // The following requires Memory Pool to have ::remap() + // defined. Thus currently this will only work for + // ACE_MMap_Memory_Pool. + if (this->allocator_->alloc ().memory_pool ().remap (addr) == -1) + // Kick it upstairs... + return EXCEPTION_CONTINUE_SEARCH; + +#if __X86__ + // This is 80x86-specific. + ep->ContextRecord->Edi = (DWORD) addr; +#elif __MIPS__ + ep->ContextRecord->IntA0 = + ep->ContextRecord->IntV0 = (DWORD) addr; + ep->ContextRecord->IntT5 = ep->ContextRecord->IntA0 + 3; +#endif /* __X86__ */ + // Resume execution at the original point of "failure." + return EXCEPTION_CONTINUE_EXECUTION; +} +#endif /* ACE_WIN32 */ + +template int +ACE_Local_Name_Space::shared_bind ( + const ACE_NS_WString &name, + const ACE_NS_WString &value, + const char *type, + int rebind) +{ + // Note that we *must* use structured exception handling here + // because (1) we may need to commit virtual memory pages and (2) + // C++ exception handling doesn't support resumption. + int result = 0; + ACE_SEH_TRY + { + result = this->shared_bind_i (name, value, type, rebind); + } + ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ())) + { + } + return result; +} + +template int +ACE_Local_Name_Space::shared_bind_i ( + const ACE_NS_WString &name, + const ACE_NS_WString &value, + const char *type, + int rebind) +{ + + ACE_TRACE ("ACE_Local_Name_Space::shared_bind_i"); + const size_t name_len = (name.length () + 1) * sizeof (ACE_WCHAR_T); + const size_t value_len = (value.length () + 1) * sizeof (ACE_WCHAR_T); + const size_t type_len = ACE_OS::strlen (type) + 1; + const size_t total_len = name_len + value_len + type_len; + char *ptr = (char *) this->allocator_->malloc (total_len); + + if (ptr == 0) + return -1; + else + { + // Note that the value_rep *must* come first to make sure we can + // retrieve this pointer later on in unbind(). + ACE_WCHAR_T *value_rep = (ACE_WCHAR_T *) (ptr); + ACE_WCHAR_T *name_rep = (ACE_WCHAR_T *) (ptr + value_len); + char *new_type = (char *) (ptr + value_len + name_len); + + ACE_Auto_Basic_Array_Ptr name_urep (name.rep ()); + ACE_Auto_Basic_Array_Ptr value_urep (value.rep ()); + ACE_NS_String new_name (name_rep, name_urep.get (), name_len); + ACE_NS_String new_value (value_rep, value_urep.get (), value_len); + + ACE_OS::strcpy (new_type, type); + ACE_NS_Internal new_internal (new_value, new_type); + int result = -1; + + if (rebind == 0) + { + // Do a normal bind. This will fail if there's already an + // with the same name. + result = this->name_space_map_->bind (new_name, + new_internal, + this->allocator_); + + if (result == 1) + { + // Entry already existed so bind failed. Free our + // dynamically allocated memory. + this->allocator_->free ((void *) ptr); + return result; + } + } + else + { + // Do a rebind. If there's already any entry, this will + // return the existing and and + // overwrite the existing name binding. + ACE_NS_String old_name; + ACE_NS_Internal old_internal; + + result = this->name_space_map_->rebind (new_name, new_internal, + old_name, old_internal, + this->allocator_); + if (result == 1) + { + // Free up the memory we allocated in shared_bind(). + // Note that this assumes that the "value" pointer comes + // first and that the value, name, and type are + // contiguously allocated (see above for details) + this->allocator_->free ((void *) (old_internal.value ()).fast_rep ()); + } + } + + if (result == -1) + // Free our dynamically allocated memory. + this->allocator_->free ((void *) ptr); + else + // If bind() or rebind() succeed, they will automatically sync + // up the map manager entry. However, we must sync up our + // name/value memory. + this->allocator_->sync (ptr, total_len); + + return result; + } +} + +template int +ACE_Local_Name_Space::unbind ( + const ACE_NS_WString &name) +{ + // Note that we *must* use structured exception handling here + // because (1) we may need to commit virtual memory pages and (2) + // C++ exception handling doesn't support resumption. + int result = 0; + ACE_SEH_TRY + { + result = this->unbind_i (name); + } + ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ())) + { + } + return result; + +} + +template int +ACE_Local_Name_Space::unbind_i ( + const ACE_NS_WString &name) +{ + ACE_TRACE ("ACE_Local_Name_Space::unbind_i"); + + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1); + ACE_NS_String ns_name (name); + ACE_NS_Internal ns_internal; + if (this->name_space_map_->unbind (ns_name, + ns_internal, + this->allocator_) != 0) + return -1; + + // Free up the memory we allocated in shared_bind(). Note that this + // assumes that the "value" pointer comes first and that the value, + // name and type are contiguously allocated (see shared_bind() for + // details) + this->allocator_->free ((void *) (ns_internal.value ()).fast_rep ()); + return 0; +} + +template int +ACE_Local_Name_Space::bind ( + const ACE_NS_WString &name, + const ACE_NS_WString &value, + const char *type) +{ + ACE_TRACE ("ACE_Local_Name_Space::bind"); + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1); + + return this->shared_bind (name, value, type, 0); +} + +template int +ACE_Local_Name_Space::rebind ( + const ACE_NS_WString &name, + const ACE_NS_WString &value, + const char *type) +{ + ACE_TRACE ("ACE_Local_Name_Space::rebind"); + ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1); + + return this->shared_bind (name, value, type, 1); +} + +template int +ACE_Local_Name_Space::resolve ( + const ACE_NS_WString &name, + ACE_NS_WString &value, + char *&type) +{ + // Note that we *must* use structured exception handling here + // because (1) we may need to commit virtual memory pages and (2) + // C++ exception handling doesn't support resumption. + int result = 0; + ACE_SEH_TRY + { + result = this->resolve_i (name, value, type); + } + ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ())) + { + } + return result; +} + + +template int +ACE_Local_Name_Space::resolve_i ( + const ACE_NS_WString &name, + ACE_NS_WString &value, + char *&type) +{ + ACE_TRACE ("ACE_Local_Name_Space::resolve_i"); + ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1); + + ACE_NS_String ns_name (name); + ACE_NS_Internal ns_internal; + ACE_NS_String nbc_string; // Note the classy variable name! :) + + if (this->name_space_map_->find (ns_name, + ns_internal, + this->allocator_) != 0) + return -1; + + // Calls conversion operator and then calls the ACE_NS_WString + // assignment operator to get a fresh copy. (*#*(@#&!*@!!*@&( HP + // compiler causes us to add an extra copy explicitly !! :) + nbc_string = ns_internal.value (); + value = nbc_string; + + // Gets type and then the actual reprsentation which is a + // ACE_WCHAR_T + const char *temp = ns_internal.type (); + + size_t len = ACE_OS::strlen (ns_internal.type ()); + // Makes a copy here. Caller needs to call delete to free up + // memory. + char *new_type = 0; + ACE_NEW_RETURN (new_type, + char [len + 1], + -1); + + ACE_OS::strsncpy (new_type, temp, len + 1); + type = new_type; + return 0; +} + +template int +ACE_Local_Name_Space::open ( + ACE_Naming_Context::Context_Scope_Type scope_in) +{ + ACE_TRACE ("ACE_Local_Name_Space::open"); + this->ns_scope_ = scope_in; + + return this->create_manager (); +} + +template +ACE_Local_Name_Space::ACE_Local_Name_Space (void) + : allocator_ (0), + name_space_map_ (0), + name_options_ (0) +{ + ACE_TRACE ("ACE_Local_Name_Space::ACE_Local_Name_Space"); +} + +template +ACE_Local_Name_Space::ACE_Local_Name_Space ( + ACE_Naming_Context::Context_Scope_Type scope_in, + ACE_Name_Options *name_options) + : name_options_ (name_options) +{ + ACE_TRACE ("ACE_Local_Name_Space::ACE_Local_Name_Space"); + if (this->open (scope_in) == -1) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("ACE_Local_Name_Space::ACE_Local_Name_Space"))); +} + +template +ACE_Local_Name_Space::~ACE_Local_Name_Space (void) +{ + ACE_TRACE ("ACE_Local_Name_Space::~ACE_Local_Name_Space"); + + // Remove the map. + delete this->allocator_; + delete this->lock_; +} + +template int +ACE_Local_Name_Space::create_manager (void) +{ + // Note that we *must* use structured exception handling here + // because (1) we may need to commit virtual memory pages and (2) + // C++ exception handling doesn't support resumption. + int result = 0; + ACE_SEH_TRY + { + result = this->create_manager_i (); + } + ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ())) + { + } + return result; +} + + +template int +ACE_Local_Name_Space::create_manager_i (void) +{ + ACE_TRACE ("ACE_Local_Name_Space::create_manager_i"); + // Get directory name + const ACE_TCHAR *dir = this->name_options_->namespace_dir (); + const ACE_TCHAR *database = this->name_options_->database (); + + // Use process name as the file name. + size_t len = ACE_OS::strlen (dir); + len += ACE_OS::strlen (ACE_DIRECTORY_SEPARATOR_STR); + len += ACE_OS::strlen (database) + 1; + + if (len >= MAXNAMELEN + MAXPATHLEN) + { + errno = ENAMETOOLONG; + return -1; + } + + ACE_OS::strcpy (this->context_file_, dir); + ACE_OS::strcat (this->context_file_, ACE_DIRECTORY_SEPARATOR_STR); + ACE_OS::strcat (this->context_file_, database); + + ACE_MEM_POOL_OPTIONS options (this->name_options_->base_address ()); + + ACE_TCHAR lock_name_for_local_name_space [MAXNAMELEN + MAXPATHLEN]; + ACE_TCHAR lock_name_for_backing_store [MAXPATHLEN + MAXNAMELEN]; + const ACE_TCHAR *postfix = database; + + size_t length = 0; + length = sizeof lock_name_for_local_name_space / sizeof (ACE_TCHAR); + ACE_OS::strsncpy (lock_name_for_local_name_space, + dir, + length); + + ACE_OS::strncat (lock_name_for_local_name_space, + ACE_DIRECTORY_SEPARATOR_STR, + length - ACE_OS::strlen (lock_name_for_local_name_space)); + ACE_OS::strncat (lock_name_for_local_name_space, + ACE_TEXT ("name_space_"), + length - ACE_OS::strlen (lock_name_for_local_name_space)); + ACE_OS::strncat (lock_name_for_local_name_space, + postfix, + length - ACE_OS::strlen (lock_name_for_local_name_space)); + + length = sizeof lock_name_for_backing_store / sizeof (ACE_TCHAR); + ACE_OS::strsncpy (lock_name_for_backing_store, + dir, + length); + ACE_OS::strncat (lock_name_for_backing_store, + ACE_DIRECTORY_SEPARATOR_STR, + length - ACE_OS::strlen (lock_name_for_backing_store)); + ACE_OS::strncat (lock_name_for_backing_store, + ACE_TEXT ("backing_store_"), + length - ACE_OS::strlen (lock_name_for_backing_store)); + ACE_OS::strncat (lock_name_for_backing_store, + postfix, + length - ACE_OS::strlen (ACE_TEXT ("backing_store_"))); + + // Create the allocator with the appropriate options. + ACE_NEW_RETURN (this->allocator_, + ALLOCATOR (this->context_file_, + lock_name_for_backing_store, + &options), -1); + + if (ACE_LOG_MSG->op_status ()) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("Allocator::Allocator\n")), + -1); + + ACE_NEW_RETURN (this->lock_, + ACE_LOCK (lock_name_for_local_name_space), + -1); + +#if !defined (ACE_LACKS_ACCESS) + // Now check if the backing store has been created successfully + if (ACE_OS::access (this->context_file_, F_OK) != 0) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("create_manager\n")), + -1); +#endif /* ACE_LACKS_ACCESS */ + + void *ns_map = 0; + + // This is the easy case since if we find the Name Server Map + // Manager we know it's already initialized. + if (this->allocator_->find (ACE_NAME_SERVER_MAP, ns_map) == 0) + { + this->name_space_map_ = (ACE_Name_Space_Map *) ns_map; + if (ACE::debug ()) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("name_space_map_ = %@, ns_map = %@\n"), + this->name_space_map_, ns_map)); + } + + // This is the hard part since we have to avoid potential race + // conditions... We will use the double check here + else + { + ACE_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1); + + // This is the easy case since if we find the Name Server Map + // Manager we know it's already initialized. + if (this->allocator_->find (ACE_NAME_SERVER_MAP, ns_map) == 0) + { + this->name_space_map_ = (ACE_Name_Space_Map *) ns_map; + if (ACE::debug ()) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("name_space_map_ = %@, ns_map = %@\n"), + this->name_space_map_, ns_map)); + } + else + { + size_t map_size = sizeof *this->name_space_map_; + ns_map = this->allocator_->malloc (map_size); + + // Initialize the map into its memory location (e.g., shared memory). + this->name_space_map_ = + new (ns_map) ACE_Name_Space_Map (this->allocator_); + + if (this->allocator_->bind (ACE_NAME_SERVER_MAP, ns_map) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("create_manager\n")), -1); + } + + if (ACE::debug ()) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("name_space_map_ = %@, ns_map = %@\n"), + this->name_space_map_, ns_map)); + } + + return 0; +} + +template int +ACE_Local_Name_Space::list_names_i ( + ACE_WSTRING_SET &set, + const ACE_NS_WString &pattern) +{ + ACE_TRACE ("ACE_Local_Name_Space::list_names_i"); + ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1); + + MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_); + MAP_MANAGER::ENTRY *map_entry; + + int result = 1; + + for (map_entry = 0; + map_iterator.next (map_entry) != 0; + map_iterator.advance()) + { + if (map_entry->ext_id_.strstr (pattern) != -1) + { + ACE_NS_WString entry (map_entry->ext_id_ ); + + if (set.insert (entry) == -1) + { + result = -1; + break; + } + else + result = 0; + } + } + + return result; +} + +template int +ACE_Local_Name_Space::list_values_i ( + ACE_WSTRING_SET &set, + const ACE_NS_WString &pattern) +{ + ACE_TRACE ("ACE_Local_Name_Space::list_values_i"); + ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1); + + MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_); + MAP_MANAGER::ENTRY *map_entry; + + int result = 1; + + for (map_entry = 0; + map_iterator.next (map_entry) != 0; + map_iterator.advance ()) + { + if (map_entry->int_id_.value ().strstr (pattern) != -1) + { + ACE_NS_WString entry (map_entry->int_id_.value ()); + + if (set.insert (entry) == -1) + { + result = -1; + break; + } + else + result = 0; + } + } + + return result; +} + +template int +ACE_Local_Name_Space::list_types_i ( + ACE_WSTRING_SET &set, + const ACE_NS_WString &pattern) +{ + ACE_TRACE ("ACE_Local_Name_Space::list_types_i"); + ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1); + + MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_); + MAP_MANAGER::ENTRY *map_entry; + + char *compiled_regexp = 0; + + // Note that char_rep() allocates memory so we need to delete it + char *pattern_rep = pattern.char_rep (); + + // Check for wildcard case first. + if (ACE_OS::strcmp ("", pattern_rep) == 0) + ACE_ALLOCATOR_RETURN (compiled_regexp, + ACE_OS::strdup (""), + -1); + else + // Compile the regular expression (the 0's cause ACE_OS::compile + // to allocate space). +#if defined (ACE_HAS_REGEX) + compiled_regexp = ACE_OS::compile (pattern_rep, 0, 0); +#else + // If we don't have regular expressions just use the pattern + // directly. + compiled_regexp = pattern_rep; +#endif /* ACE_HAS_REGEX */ + + int result = 1; + + for (map_entry = 0; + map_iterator.next (map_entry) != 0; + map_iterator.advance ()) + { + // Get the type + const char *type = map_entry->int_id_.type (); + + // Everything matches the wildcard. + if (ACE_OS::strcmp ("", pattern_rep) == 0 +#if defined (ACE_HAS_REGEX) + || ACE_OS::step (type, compiled_regexp) != 0) +#else + // If we don't have regular expressions just use strstr() for + // substring matching. + || ACE_OS::strstr (type, compiled_regexp) != 0) +#endif /* ACE_HAS_REGEX */ + + { + ACE_NS_WString entry (type); + + if (set.insert (entry) == -1) + { + result = -1; + break; + } + else + result = 0; + } + } +#if defined (ACE_HAS_REGEX) + if (compiled_regexp) + ACE_OS::free ((void *) compiled_regexp); +#endif /* ACE_HAS_REGEX */ + delete [] pattern_rep; // delete pattern_rep; + return result; +} + +template int +ACE_Local_Name_Space ::list_name_entries_i ( + ACE_BINDING_SET &set, + const ACE_NS_WString &pattern) +{ + ACE_TRACE ("ACE_Local_Name_Space::list_name_entries_i"); + ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1); + + MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_); + MAP_MANAGER::ENTRY *map_entry; + + for (map_entry = 0; + map_iterator.next (map_entry) != 0; + map_iterator.advance()) + { + if (map_entry->ext_id_.strstr (pattern) != -1) + { + ACE_Name_Binding entry (map_entry->ext_id_, + map_entry->int_id_.value (), + map_entry->int_id_.type ()); + + if (set.insert (entry) == -1) + return -1; + } + } + + return 0; +} + +template int +ACE_Local_Name_Space::list_value_entries_i ( + ACE_BINDING_SET &set, + const ACE_NS_WString &pattern) +{ + ACE_TRACE ("ACE_Local_Name_Space::list_value_entries_i"); + ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1); + + MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_); + MAP_MANAGER::ENTRY *map_entry; + + for (map_entry = 0; + map_iterator.next (map_entry) != 0; + map_iterator.advance ()) + { + if (map_entry->int_id_.value ().strstr (pattern) != -1) + { + ACE_Name_Binding entry (map_entry->ext_id_, + map_entry->int_id_.value (), + map_entry->int_id_.type ()); + + if (set.insert (entry) == -1) + return -1; + } + } + return 0; +} + +template int +ACE_Local_Name_Space::list_type_entries_i ( + ACE_BINDING_SET &set, + const ACE_NS_WString &pattern) +{ + ACE_TRACE ("ACE_Local_Name_Space::list_type_entries_i"); + ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1); + + MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_); + MAP_MANAGER::ENTRY *map_entry; + + char *compiled_regexp = 0; + // Note that char_rep() allocates memory so we need to delete it + char *pattern_rep = pattern.char_rep (); + + // Check for wildcard case first. + if (ACE_OS::strcmp ("", pattern_rep) == 0) + compiled_regexp = ACE_OS::strdup (""); + else + // Compile the regular expression (the 0's cause ACE_OS::compile + // to allocate space). +#if defined (ACE_HAS_REGEX) + compiled_regexp = ACE_OS::compile (pattern_rep, 0, 0); +#else /* If we don't have regular expressions just the pattern + directly. */ + compiled_regexp = pattern_rep; +#endif /* ACE_HAS_REGEX */ + + for (map_entry = 0; + map_iterator.next (map_entry) != 0; + map_iterator.advance ()) + { + // Get the type. + const char *type = map_entry->int_id_.type (); + + if (ACE_OS::strcmp ("", pattern_rep) == 0 // Everything matches + // the wildcard. +#if defined (ACE_HAS_REGEX) + || ACE_OS::step (type, compiled_regexp) != 0) +#else /* If we don't have regular expressions just use strstr() for + substring matching. */ + || ACE_OS::strstr (type, compiled_regexp) != 0) +#endif /* ACE_HAS_REGEX */ + { + ACE_Name_Binding entry (map_entry->ext_id_, + map_entry->int_id_.value (), + map_entry->int_id_.type ()); + + if (set.insert (entry) == -1) + return -1; + } + } +#if defined (ACE_HAS_REGEX) + if (compiled_regexp) + ACE_OS::free ((void *) compiled_regexp); +#endif /* ACE_HAS_REGEX */ + delete [] pattern_rep; // delete pattern_rep; + return 0; +} + +template void +ACE_Local_Name_Space::dump_i (void) const +{ + ACE_TRACE ("ACE_Local_Name_Space::dump_i"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + + MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_); + MAP_MANAGER::ENTRY *map_entry; + + for (map_entry = 0; + map_iterator.next (map_entry) != 0; + map_iterator.advance()) + { + char *key = map_entry->ext_id_.char_rep (); + char *value = map_entry->int_id_.value ().char_rep (); +#if !defined (ACE_NLOGGING) + const char *type = map_entry->int_id_.type (); +#endif /* ! ACE_NLOGGING */ + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("key=%s\nvalue=%s\ntype=%s\n"), + ACE_TEXT_CHAR_TO_TCHAR (key), ACE_TEXT_CHAR_TO_TCHAR (value), ACE_TEXT_CHAR_TO_TCHAR (type))); + // We need to delete key and value since char_rep allocates + // memory for them + delete [] key; + delete [] value; + } + + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +} + +template int +ACE_Local_Name_Space::list_names ( + ACE_WSTRING_SET &set, + const ACE_NS_WString &pattern) +{ + // Note that we *must* use structured exception handling here + // because (1) we may need to commit virtual memory pages and (2) + // C++ exception handling doesn't support resumption. + int result = 0; + ACE_SEH_TRY + { + result = this->list_names_i (set, pattern); + } + ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ())) + { + } + return result; +} + +template int +ACE_Local_Name_Space::list_values ( + ACE_WSTRING_SET &set, + const ACE_NS_WString &pattern) +{ + // Note that we *must* use structured exception handling here + // because (1) we may need to commit virtual memory pages and (2) + // C++ exception handling doesn't support resumption. + int result = 0; + ACE_SEH_TRY + { + result = this->list_values_i (set, pattern); + } + ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ())) + { + } + return result; +} + +template int +ACE_Local_Name_Space::list_types ( + ACE_WSTRING_SET &set, + const ACE_NS_WString &pattern) +{ + // Note that we *must* use structured exception handling here + // because (1) we may need to commit virtual memory pages and (2) + // C++ exception handling doesn't support resumption. + int result = 0; + ACE_SEH_TRY + { + result = this->list_types_i (set, pattern); + } + ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ())) + { + } + return result; +} + +template int +ACE_Local_Name_Space ::list_name_entries ( + ACE_BINDING_SET &set, + const ACE_NS_WString &pattern) +{ + // Note that we *must* use structured exception handling here + // because (1) we may need to commit virtual memory pages and (2) + // C++ exception handling doesn't support resumption. + int result = 0; + ACE_SEH_TRY + { + result = this->list_name_entries_i (set, pattern); + } + ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ())) + { + } + return result; +} + +template int +ACE_Local_Name_Space::list_value_entries ( + ACE_BINDING_SET &set, + const ACE_NS_WString &pattern) +{ + // Note that we *must* use structured exception handling here + // because (1) we may need to commit virtual memory pages and (2) + // C++ exception handling doesn't support resumption. + int result = 0; + ACE_SEH_TRY + { + result = this->list_value_entries_i (set, pattern); + } + ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ())) + { + } + return result; +} + +template int +ACE_Local_Name_Space::list_type_entries ( + ACE_BINDING_SET &set, + const ACE_NS_WString &pattern) +{ + // Note that we *must* use structured exception handling here + // because (1) we may need to commit virtual memory pages and (2) + // C++ exception handling doesn't support resumption. + int result = 0; + ACE_SEH_TRY + { + result = this->list_type_entries_i (set, pattern); + } + ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ())) + { + } + return result; +} + +template void +ACE_Local_Name_Space::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + // Note that we *must* use structured exception handling here + // because (1) we may need to commit virtual memory pages and (2) + // C++ exception handling doesn't support resumption. + + // This should really be a const cast + ACE_Local_Name_Space *fake_this = + (ACE_Local_Name_Space *) this; + ACE_UNUSED_ARG (fake_this); + + ACE_SEH_TRY + { + this->dump_i (); + } + ACE_SEH_EXCEPT (fake_this->remap (GetExceptionInformation ())) + { + } +#endif /* ACE_HAS_DUMP */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_LOCAL_NAME_SPACE_T_CPP */ diff --git a/ACE/ace/Local_Name_Space_T.h b/ACE/ace/Local_Name_Space_T.h new file mode 100644 index 00000000000..14ed9377b30 --- /dev/null +++ b/ACE/ace/Local_Name_Space_T.h @@ -0,0 +1,280 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Local_Name_Space_T.h + * + * $Id$ + * + * @author Prashant Jain + * @author Irfan Pyarali and + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_LOCAL_NAME_SPACE_T_H +#define ACE_LOCAL_NAME_SPACE_T_H +#include /**/ "ace/pre.h" + +#include "ace/Name_Space.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Naming_Context.h" +#include "ace/SString.h" +#include "ace/Local_Name_Space.h" +#include "ace/Null_Mutex.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/// A short-hand name for our set of name/value/type tuples passed back +/// to callers. +typedef ACE_Unbounded_Set ACE_WSTRING_SET; + +ACE_END_VERSIONED_NAMESPACE_DECL + +// Simplify later usage by defining typedefs. +#if (1) +# include "ace/Hash_Map_Manager_T.h" +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef ACE_Hash_Map_Manager_Ex, ACE_Equal_To, ACE_Null_Mutex> MAP_MANAGER; +ACE_END_VERSIONED_NAMESPACE_DECL +#else +# include "ace/Map_Manager.h" +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef ACE_Map_Manager MAP_MANAGER; +ACE_END_VERSIONED_NAMESPACE_DECL +#endif /* 0 */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/// @deprecated Deprecated typedefs. Use the map's traits instead. +typedef MAP_MANAGER::ITERATOR MAP_ITERATOR; +typedef MAP_MANAGER::ENTRY MAP_ENTRY; + + +/** + * @class ACE_Name_Space_Map + * + * @brief This class serves as a Proxy that ensures our process always + * has the appropriate allocator in place for every operation + * that accesses or updates the Map Manager. + * + * We need this class because otherwise the ALLOCATOR + * pointer will be stored in the Map_Manager that resides within + * shared memory. Naturally, this will cause horrible problems + * since only the first process to set that pointer will be + * guaranteed the address of the ALLOCATOR is meaningful! + */ +template +class ACE_Name_Space_Map : public MAP_MANAGER +{ +public: + /// Constructor. + ACE_Name_Space_Map (ALLOCATOR *alloc); + + // = The following methods are Proxies to the underlying methods + // provided by ACE_Hash_Map_Manager. When they are called, they + // acquire the lock, set the allocator to the one specific to this + // process, and then call down to perform the intended operation. + int bind (const ACE_NS_String &, + const ACE_NS_Internal &, + ALLOCATOR *alloc); + + int unbind (const ACE_NS_String &, + ACE_NS_Internal &, + ALLOCATOR *alloc); + + int rebind (const ACE_NS_String &, + const ACE_NS_Internal &, + ACE_NS_String &, + ACE_NS_Internal &, + ALLOCATOR *alloc); + + int find (const ACE_NS_String &, + ACE_NS_Internal &, + ALLOCATOR *alloc); + + int close (ALLOCATOR *alloc); +}; + +/** + * @class ACE_Local_Name_Space + * + * @brief Maintaining accesses Local Name Server Database. Allows to + * add NameBindings, change them, remove them and resolve + * NameBindings. + * + * Manages a Naming Service for a local name space which + * includes bindings for node_local and host_local naming + * contexts. All strings are stored in wide character format. + * A Name Binding consists of a name (that's the key), a value + * string and an optional type string (no wide chars). + */ +template +class ACE_Local_Name_Space : public ACE_Name_Space +{ +public: + // = Initialization and termination methods. + /// "Do-nothing" constructor. + ACE_Local_Name_Space (void); + + /** + * Specifies the scope of this namespace, opens and memory-maps the + * associated file (if accessible) or contacts the dedicated name + * server process for NET_LOCAL namespace. + */ + ACE_Local_Name_Space (ACE_Naming_Context::Context_Scope_Type scope_in, + ACE_Name_Options *name_options); + + /** + * Specifies the scope of this namespace, opens and memory-maps the + * associated file (if accessible) or contacts the dedicated name + * server process for NET_LOCAL namespace. + */ + int open (ACE_Naming_Context::Context_Scope_Type scope_in); + + /// Destructor, do some cleanup :TBD: last dtor should "compress" + /// file + ~ACE_Local_Name_Space (void); + + /// Bind a new name to a naming context (Wide character strings). + virtual int bind (const ACE_NS_WString &name, + const ACE_NS_WString &value, + const char *type = ""); + + /** + * Overwrite the value or type of an existing name in a + * ACE_Local_Name_Space or bind a new name to the context, if it + * didn't exist yet. (Wide charcter strings interface). + */ + virtual int rebind (const ACE_NS_WString &name, + const ACE_NS_WString &value, + const char *type = ""); + + /// Delete a name from a ACE_Local_Name_Space (Wide charcter strings + /// Interface). + virtual int unbind (const ACE_NS_WString &name); + virtual int unbind_i (const ACE_NS_WString &name); + + /// Get value and type of a given name binding (Wide chars). The + /// caller is responsible for deleting @a type! + virtual int resolve (const ACE_NS_WString &name, + ACE_NS_WString &value, + char *&type); + virtual int resolve_i (const ACE_NS_WString &name, + ACE_NS_WString &value, + char *&type); + + /// Get a set of names matching a specified pattern (wchars). Matching + /// means the names must begin with the pattern string. + virtual int list_names (ACE_WSTRING_SET &set, + const ACE_NS_WString &pattern); + virtual int list_names_i (ACE_WSTRING_SET &set, + const ACE_NS_WString &pattern); + + /// Get a set of values matching a specified pattern (wchars). Matching + /// means the values must begin with the pattern string. + virtual int list_values (ACE_WSTRING_SET &set, + const ACE_NS_WString &pattern); + virtual int list_values_i (ACE_WSTRING_SET &set, + const ACE_NS_WString &pattern); + + /// Get a set of types matching a specified pattern (wchars). Matching + /// means the types must begin with the pattern string. + virtual int list_types (ACE_WSTRING_SET &set, + const ACE_NS_WString &pattern); + virtual int list_types_i (ACE_WSTRING_SET &set, + const ACE_NS_WString &pattern); + + /** + * Get a set of names matching a specified pattern (wchars). Matching + * means the names must begin with the pattern string. Returns the + * complete binding associated each pattern match. + */ + virtual int list_name_entries (ACE_BINDING_SET &set, + const ACE_NS_WString &pattern); + virtual int list_name_entries_i (ACE_BINDING_SET &set, + const ACE_NS_WString &pattern); + + /** + * Get a set of values matching a specified pattern (wchars). Matching + * means the values must begin with the pattern string. Returns the + * complete binding associated each pattern match. + */ + virtual int list_value_entries (ACE_BINDING_SET &set, + const ACE_NS_WString &pattern); + virtual int list_value_entries_i (ACE_BINDING_SET &set, + const ACE_NS_WString &pattern); + + /** + * Get a set of types matching a specified pattern (wchars). Matching + * means the types must begin with the pattern string. Returns the + * complete binding associated each pattern match. + */ + virtual int list_type_entries (ACE_BINDING_SET &set, + const ACE_NS_WString &pattern); + virtual int list_type_entries_i (ACE_BINDING_SET &set, + const ACE_NS_WString &pattern); + + /// Dump the state of the object + virtual void dump (void) const; + virtual void dump_i (void) const; + + // = I just know this is going to cause problems on some platform... + typedef ACE_Allocator_Adapter > + ALLOCATOR; + +private: +#if defined (ACE_WIN32) + /// Remap the backing store + int remap (EXCEPTION_POINTERS *ep); +#endif /* ACE_WIN32 */ + + /// Factor out code from bind() and rebind(). + int shared_bind (const ACE_NS_WString &name, + const ACE_NS_WString &value, + const char *type, int rebind); + int shared_bind_i (const ACE_NS_WString &name, + const ACE_NS_WString &value, + const char *type, int rebind); + + /// Allocate the appropriate type of map manager that stores the + /// key/value binding. + int create_manager (void); + int create_manager_i (void); + + /// Pointer to the allocator + ALLOCATOR *allocator_; + + /// Pointer to the allocated map manager. + ACE_Name_Space_Map *name_space_map_; + + /// Scope of this naming context (e.g., PROC_LOCAL, NODE_LOCAL, or + /// NET_LOCAL). + ACE_Naming_Context::Context_Scope_Type ns_scope_; + + /// Keep track of the options such as database name etc + ACE_Name_Options *name_options_; + + /// Name of the file used as the backing store. + ACE_TCHAR context_file_[MAXPATHLEN + MAXNAMELEN]; + + /// Synchronization variable. + ACE_LOCK *lock_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Local_Name_Space_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Local_Name_Space_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" +#endif /* ACE_LOCAL_NAME_SPACE_T_H */ diff --git a/ACE/ace/Local_Tokens.cpp b/ACE/ace/Local_Tokens.cpp new file mode 100644 index 00000000000..17330fe79dd --- /dev/null +++ b/ACE/ace/Local_Tokens.cpp @@ -0,0 +1,1623 @@ +// $Id$ + +#include "ace/Local_Tokens.h" + +#if defined (ACE_HAS_TOKENS_LIBRARY) + +#include "ace/Thread.h" +#include "ace/Token_Manager.h" +#include "ace/OS_NS_unistd.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Local_Tokens.inl" +#endif /* __ACE_INLINE__ */ + + +ACE_RCSID (ace, + Local_Tokens, + "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +void +ACE_Tokens::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Tokens::dump"); + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("ACE_Tokens::dump:\n") + ACE_TEXT (" reference_cont_ = %d\n") + ACE_TEXT (" token_name_ = %s\n"), + reference_count_, token_name_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("waiters_\n"))); + this->waiters_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_Tokens::ACE_Tokens (void) + : visited_ (0), + reference_count_ (0) +{ + ACE_TRACE ("ACE_Tokens::ACE_Tokens"); +} + +ACE_Tokens::~ACE_Tokens (void) +{ +} + +void +ACE_Tokens::make_owner (ACE_TPQ_Entry *caller) +{ + this->waiters_.remove (caller); + this->waiters_.enqueue (caller, 0); +} + +ACE_Token_Proxy_Queue * +ACE_Tokens::waiters () +{ + ACE_TRACE ("ACE_Tokens::waiters"); + return &this->waiters_; +} + +int +ACE_Tokens::no_of_waiters () +{ + ACE_TRACE ("ACE_Tokens::no_of_waiters"); + return this->waiters_.size (); +} + +#if defined (ACE_LACKS_INLINE_FUNCTIONS) +ACE_Null_Token::ACE_Null_Token (void) +{ +} + +ACE_Null_Token::~ACE_Null_Token (void) +{ +} +#endif /* ACE_LACKS_INLINE_FUNCTIONS */ + +void +ACE_TPQ_Entry::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_TPQ_Entry::dump"); + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("ACE_TPQ_Entry::dump:\n") + ACE_TEXT (" nesting_level_ = %d\n") + ACE_TEXT (" client_id_ = %s\n"), + nesting_level_, + client_id_)); + + if (next_ != 0) + { + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("next:.\n"))); + next_->dump (); + } + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("ACE_TPQ_Entry::dump end.\n"))); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_TPQ_Entry::ACE_TPQ_Entry (const ACE_Token_Proxy *new_proxy, + const ACE_TCHAR *client_id) + : cond_var_ (lock_), + next_ (0), + // This const typecast is safe. + proxy_ ((ACE_Token_Proxy *) new_proxy), + nesting_level_ (0), + sleep_hook_ (0) +{ + ACE_TRACE ("ACE_TPQ_Entry::ACE_TPQ_Entry"); + + if (client_id != 0) + this->client_id (client_id); + else + { + // Just make sure we have enough space. + ACE_TCHAR host_name[MAXHOSTNAMELEN]; + ACE_TCHAR name[(sizeof host_name / sizeof (ACE_TCHAR)) + 256]; + ACE_OS::hostname (host_name, sizeof host_name); + + ACE_thread_t thread_id = ACE_Thread::self (); + + // The cast is an attempt to get this to compile (and run, + // hopefully) regardless of the type of ACE_thread_t. + ACE_OS::sprintf (name, + ACE_TEXT ("/%s/%u/%lu"), + host_name, + static_cast (ACE_OS::getpid ()), + *reinterpret_cast (&thread_id)); + + this->client_id (name); + } +} + +ACE_TPQ_Entry::ACE_TPQ_Entry (void) + : cond_var_ (lock_), + proxy_ (0), + nesting_level_ (0), + sleep_hook_ (0) +{ + ACE_TRACE ("ACE_TPQ_Entry::ACE_TPQ_Entry null const."); +} + +ACE_TPQ_Entry::ACE_TPQ_Entry (const ACE_TPQ_Entry &rhs) +: cond_var_ (lock_) +{ + ACE_TRACE ("ACE_TPQ_Entry::ACE_TPQ_Entry copy const."); + *this = rhs; +} + +ACE_TPQ_Entry::~ACE_TPQ_Entry (void) +{ + ACE_TRACE ("ACE_TPQ_Entry::~ACE_TPQ_Entry"); +} + +void +ACE_TPQ_Entry::operator= (const ACE_TPQ_Entry& rhs) +{ + ACE_TRACE ("ACE_TPQ_Entry::operator="); + if (&rhs == this) + return; + this->proxy_ = rhs.proxy (); + this->nesting_level_ = rhs.nesting_level (); + this->client_id (rhs.client_id ()); + this->sleep_hook_ = rhs.sleep_hook (); +} + +void +ACE_TPQ_Entry::client_id (const ACE_TCHAR *id) +{ + ACE_TRACE ("ACE_TPQ_Entry::client_id"); + + if (id == 0) + return; + + ACE_OS::strsncpy (this->client_id_, + (ACE_TCHAR *) id, + ACE_MAXCLIENTIDLEN); +} + +ACE_TSS_TPQ_Entry::~ACE_TSS_TPQ_Entry (void) +{ +} + +void +ACE_TSS_TPQ_Entry::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_TSS_TPQ_Entry::dump"); + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("ACE_TSS_TPQ_Entry::dump:\n") + ACE_TEXT (" client_id_ = %s\n"), + client_id_ == 0 ? ACE_TEXT ("0") : client_id_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("base:\n"))); + ACE_TPQ_ENTRY::dump (); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_TSS_TPQ_Entry::ACE_TSS_TPQ_Entry (const ACE_Token_Proxy *proxy, + const ACE_TCHAR *client_id) +: proxy_ (proxy), + client_id_ (client_id) +{ + ACE_TRACE ("ACE_TSS_TPQ_Entry::ACE_TSS_TPQ_Entry"); +} + +ACE_TPQ_Entry * +ACE_TSS_TPQ_Entry::make_TSS_TYPE (void) const +{ + ACE_TRACE ("ACE_TSS_TPQ_Entry::make_TSS_TYPE"); + ACE_TPQ_Entry *temp; + + ACE_NEW_RETURN (temp, + ACE_TPQ_Entry (this->proxy_, + this->client_id_), + 0); + return temp; +} + +ACE_TSS_TPQ_Entry::operator ACE_TPQ_Entry * (void) +{ +#if !defined (ACE_NO_TSS_TOKENS) + return (ACE_TPQ_Entry *) (*((ACE_TSS *) this)); +#else + // Not sure this is the right thing to do, but it seems to work. + // The base class ALSO has a proxy_ and client_id_ members (weird?) + // which don't get initialised. The following two lines make this + // the same as the subclass, so that the slicing works . + ACE_TPQ_ENTRY::proxy ((ACE_Token_Proxy *)(this->proxy_)); + ACE_TPQ_ENTRY::client_id (this->client_id_); + return (ACE_TPQ_Entry *) this;; +#endif /* !ACE_NO_TSS_TOKENS */ +} + +ACE_TPQ_Iterator::ACE_TPQ_Iterator (ACE_Token_Proxy_Queue &q) + : current_ (q.head_) +{ + ACE_TRACE ("ACE_TPQ_Iterator::ACE_TPQ_Iterator"); +} + +int +ACE_TPQ_Iterator::next (ACE_TPQ_Entry *&next_item) +{ + ACE_TRACE ("ACE_TPQ_Iterator::next"); + + next_item = this->current_; + + return current_ != 0; +} + +int +ACE_TPQ_Iterator::done (void) const +{ + ACE_TRACE ("ACE_TPQ_Iterator::done"); + + return this->current_ == 0; +} + +void +ACE_TPQ_Iterator::advance (void) +{ + ACE_TRACE ("ACE_TPQ_Iterator::advance"); + + if (current_ != 0) + this->current_ = this->current_->next_; +} + +void +ACE_TPQ_Iterator::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_TPQ_Iterator::dump"); + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("ACE_TPQ_Iterator::dump:\n") + ACE_TEXT (" current_ = %d\n"), + (long) this->current_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("head_ and tail_\n"))); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +void +ACE_Token_Proxy_Queue::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Token_Proxy_Queue::dump"); + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("ACE_Token_Proxy_Queue::dump:\n") + ACE_TEXT (" size_ = %d\n"), + size_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("head_ and tail_\n"))); + if (this->head_ != 0) + this->head_->dump (); + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("ACE_Token_Proxy_Queue::dump end.\n"))); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_Token_Proxy_Queue::ACE_Token_Proxy_Queue (void) + : head_ (0), + tail_ (0), + size_ (0) +{ + ACE_TRACE ("ACE_Token_Proxy_Queue::ACE_Token_Proxy_Queue"); +} + +void +ACE_Token_Proxy_Queue::enqueue (ACE_TPQ_Entry *tpq, + int position) +{ + ACE_TRACE ("ACE_Token_Proxy_Queue::enqueue"); + tpq->next_ = 0; + + ++this->size_; + + if (this->head_ == 0) + { + // make tpq the entire list + this->head_ = this->tail_ = tpq; + return; + } + + if (position == 0) + { + // make head of list + tpq->next_ = this->head_; + this->head_ = tpq; + return; + } + + if (position == -1) + { + // stick at back of list + this->tail_->next_ = tpq; + this->tail_ = tpq; + return; + } + + // walk through list to insertion point + ACE_TPQ_Entry *temp = head_; + + for (int x = position; + x > 1; + --x) + { + // end of queue? + if (temp->next_ == 0) + break; + // advance pointer + else + temp = temp->next_; + } + + // insert new tpq after temp + tpq->next_ = temp->next_; + temp->next_ = tpq; +} + +void +ACE_Token_Proxy_Queue::dequeue (void) +{ + ACE_TRACE ("ACE_Token_Proxy_Queue::dequeue"); + + if (head_ == 0) + return; + + ACE_TPQ_Entry *temp = this->head_; + + this->head_ = this->head_->next_; + + temp->next_ = 0; + + --this->size_; + + if (this->head_ == 0 && this->size_ != 0) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("incorrect size = %d\n"), + this->size_)); +} + +/* +int +ACE_Token_Proxy_Queue::member (const ACE_TCHAR *id) +{ + ACE_TRACE ("ACE_Token_Proxy_Queue::member"); + + for (ACE_TPQ_Entry *temp = this->head_; + temp != 0; + temp = temp->next_) + if (ACE_OS::strcmp (temp->client_id (), id) == 0) + // We found it! + return 1; + + // We didn't find it :-( + return 0; +} +*/ + +void +ACE_Token_Proxy_Queue::remove (const ACE_TPQ_Entry *remove_me) +{ + ACE_TRACE ("ACE_Token_Proxy_Queue::remove"); + // sanity + if ((remove_me == 0) || (this->head_ == 0)) + return; + + // is it the head? + if (this->head_ == remove_me) // pointer comparison. + { + this->head_ = this->head_->next_; + if (this->head_ == 0) + this->tail_ = 0; + + --this->size_; + return; + } + + ACE_TPQ_Entry *temp = this->head_; + ACE_TPQ_Entry *previous = 0; + + // is it in the middle or tail? + while (temp != 0) + { + if (temp == remove_me) + { + // previous should never be null since the first if + // conditional should always be false + previous->next_ = temp->next_; + // is it the tail? + if (this->tail_ == temp) + this->tail_ = previous; + + --this->size_; + return; + } + + previous = temp; + temp = temp->next_; + } + + // it wasn't in the list. + return; +} + +void +ACE_Mutex_Token::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Mutex_Token::dump"); + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("ACE_Mutex_Token::dump:\n"))); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("lock_\n"))); + lock_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("base:\n"))); + ACE_Tokens::dump (); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("ACE_Mutex_Token::dump end.\n"))); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_Mutex_Token::ACE_Mutex_Token (const ACE_TCHAR *name) +{ + ACE_TRACE ("ACE_Mutex_Token::ACE_Mutex_Token"); + + ACE_OS::strsncpy (this->token_name_, + name, + ACE_MAXTOKENNAMELEN); +} + +ACE_Mutex_Token::~ACE_Mutex_Token (void) +{ + ACE_TRACE ("ACE_Mutex_Token::~ACE_Mutex_Token"); +} + +int +ACE_Mutex_Token::acquire (ACE_TPQ_Entry *caller, + int ignore_deadlock, + int notify) +{ + ACE_TRACE ("ACE_Mutex_Token::acquire"); + // We need to acquire two locks. This one to ensure that only one + // thread uses this token at a time. + ACE_GUARD_RETURN (ACE_TOKEN_CONST::MUTEX, ace_mon1, this->lock_, -1); + // This one to ensure an atomic transaction across all tokens. Note + // that this order is crucial too. It's resource coloring for other + // threads which may be calling this same token. + ACE_GUARD_RETURN (ACE_TOKEN_CONST::MUTEX, ace_mon2, ACE_Token_Manager::instance ()->mutex (), -1); + + // Does _anyone_ own the token? + if (this->owner () == 0) + { + // there are no waiters, so queue as the first waiter (the owner.) + this->waiters_.enqueue (caller, -1); + return 0; // success + } + + // Does the caller already own it? + if (this->is_owner (caller->client_id ())) + { + // Recursive acquisition. + caller->nesting_level (1); + return 0; // success + } + + // Check for deadlock. + if (!ignore_deadlock + && ACE_Token_Manager::instance ()->check_deadlock (caller->proxy ()) == 1) + { + errno = EDEADLK; + ACE_RETURN (-1); + } + + // Someone owns it. Sorry, you're getting queued up at the end of + // the waiter queue. + this->waiters_.enqueue (caller, -1); + + if (notify) + this->owner ()->call_sleep_hook (); + + errno = EWOULDBLOCK; + ACE_RETURN (-1); + + ACE_NOTREACHED (return -1); +} + +int +ACE_Mutex_Token::tryacquire (ACE_TPQ_Entry *caller) +{ + ACE_TRACE ("ACE_Mutex_Token::tryacquire"); + // We need to acquire two locks. This one to ensure that only one + // thread uses this token at a time. + ACE_GUARD_RETURN (ACE_TOKEN_CONST::MUTEX, ace_mon1, this->lock_, -1); + // This one to ensure an atomic transaction across all tokens. Note + // that this order is crucial too. It's resource coloring for other + // threads which may be calling this same token. + ACE_GUARD_RETURN (ACE_TOKEN_CONST::MUTEX, ace_mon2, ACE_Token_Manager::instance ()->mutex (), -1); + + // Does _anyone_ own the token? + if (this->owner () == 0) + { + this->waiters_.enqueue (caller, -1); + return 0; // success + } + // Does the caller already own it? + if (this->is_owner (caller->client_id ())) + { + // recursive acquisition + caller->nesting_level (1); + return 0; // success + } + else + // Someone owns it. Fail. + { + errno = EWOULDBLOCK; + ACE_RETURN (-1); + } + + ACE_NOTREACHED (return -1); +} + +int +ACE_Mutex_Token::renew (ACE_TPQ_Entry *caller, + int requeue_position) +{ + ACE_TRACE ("ACE_Mutex_Token::renew"); + ACE_GUARD_RETURN (ACE_TOKEN_CONST::MUTEX, ace_mon, this->lock_, -1); + + // Verify that the caller is the owner. + if (this->is_owner (caller->client_id ()) == 0) + { + errno = EACCES; + ACE_RETURN (-1); + } + + // The caller is the owner, so check to see if there are any + // waiters. If not, we just keep the token. == 1 means that there + // is only the owner. + if (this->waiters_.size () == 1 || requeue_position == 0) + return 0; + + // Requeue the caller. + this->waiters_.dequeue (); + + this->waiters_.enqueue (caller, requeue_position); + + // Notify new owner. + if (this->owner () != 0) + this->owner ()->proxy ()->token_acquired (this->owner ()); + + // Tell the caller that the operation would block. + errno = EWOULDBLOCK; + ACE_RETURN (-1); + + ACE_NOTREACHED (return -1); +} + +// Release the current holder of the token (which had +// better be the caller's thread!). + +int +ACE_Mutex_Token::release (ACE_TPQ_Entry *caller) +{ + ACE_TRACE ("ACE_Mutex_Token::release"); + ACE_GUARD_RETURN (ACE_TOKEN_CONST::MUTEX, ace_mon, this->lock_, -1); + + // Does anyone own the token? + if (this->owner () == 0) + { + errno = EACCES; + ACE_RETURN (-1); + } + + // Is the caller the owner. + if (this->is_owner (caller->client_id ())) + { + // Check the nesting level. + if (caller->nesting_level () > 0) + caller->nesting_level (-1); + else + { + this->waiters_.dequeue (); + // Notify new owner. + if (this->owner () != 0) + this->owner ()->proxy ()->token_acquired (this->owner ()); + } + } + else + this->remove (caller); + + return 0; +} + +int +ACE_Mutex_Token::owners (OWNER_STACK &stack, + const ACE_TCHAR *id) +{ + ACE_TRACE ("ACE_Mutex_Token::owners"); + if (this->owner () != 0) + { + stack.push (this->owner ()); + // If an is specified, return whether it is the owner being + // returned. + if (id != 0) + return this->owner ()->equal_client_id (id); + } + + return 0; +} + +int +ACE_Mutex_Token::is_waiting_for (const ACE_TCHAR *id) +{ + ACE_TRACE ("ACE_Mutex_Token::is_waiting_for"); + // If there is no owner, or is the owner, return false. + if ((this->owner () == 0) || this->is_owner (id)) + return 0; + + // Step through each waiter looking for . + ACE_TPQ_Iterator iterator (waiters_); + iterator.advance (); + for (ACE_TPQ_Entry *temp = 0; + iterator.next (temp) != 0; + iterator.advance ()) + { + if (temp->equal_client_id (id)) + return 1; + } + + return 0; +} + +int +ACE_Mutex_Token::is_owner (const ACE_TCHAR *id) +{ + ACE_TRACE ("ACE_Mutex_Token::is_owner"); + // If there is an owner, return whether it is . + if ((this->owner () != 0) && + this->owner ()->equal_client_id (id)) + return 1; + else + return 0; +} + +int +ACE_Mutex_Token::type (void) const +{ + ACE_TRACE ("ACE_Mutex_Token::type"); + return (int) ACE_Tokens::MUTEX; +} + +// ************************************************************ + +int +ACE_RW_Token::type (void) const +{ + ACE_TRACE ("ACE_RW_Token::type"); + return (int) ACE_Tokens::RWLOCK; +} + +void +ACE_RW_Token::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_RW_Token::dump"); + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("ACE_RW_Token::dump:\n") + ACE_TEXT ("num_writers_ = %d\n"), num_writers_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("lock_\n"))); + this->lock_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("base:\n"))); + ACE_Tokens::dump (); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("ACE_RW_Token::dump end.\n"))); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +ACE_RW_Token::ACE_RW_Token (const ACE_TCHAR *name) +: num_writers_ (0) +{ + ACE_TRACE ("ACE_RW_Token::ACE_RW_Token"); + + ACE_OS::strsncpy (this->token_name_, + name, + ACE_MAXTOKENNAMELEN); +} + +ACE_RW_Token::~ACE_RW_Token (void) +{ + ACE_TRACE ("ACE_RW_Token::~ACE_RW_Token"); +} + +int +ACE_RW_Token::acquire (ACE_TPQ_Entry *caller, + int ignore_deadlock, + int notify) +{ + ACE_TRACE ("ACE_RW_Token::acquire"); + // We need to acquire two locks. This one to ensure that only one + // thread uses this token at a time. + ACE_GUARD_RETURN (ACE_TOKEN_CONST::MUTEX, ace_mon1, this->lock_, -1); + // This one to ensure an atomic transaction across all tokens. Note + // that this order is crucial too. It's resource coloring for other + // threads which may be calling this same token. + ACE_GUARD_RETURN (ACE_TOKEN_CONST::MUTEX, ace_mon2, ACE_Token_Manager::instance ()->mutex (), -1); + + if (caller->proxy ()->type () == ACE_RW_Token::WRITER) + this->num_writers_++; + + // Does _anyone_ own the token? + if (this->owner () == 0) + { + // There are no waiters, so queue as the first waiter (the owner). + this->waiters_.enqueue (caller, -1); + return 0; + } + + // Check for recursive acquisition. + if (this->is_owner (caller->client_id ())) + { + caller->nesting_level (1); + return 0; // Success. + } + + // Reader. + if (caller->proxy ()->type () == ACE_RW_Token::READER) + { + // Are there any writers? + if (this->num_writers_ == 0) + { + // Queue the caller at the end of the queue. + this->waiters_.enqueue (caller, -1); + return 0; + } + // Else failure. + } + + // Failure code. + + // Check for deadlock. + if (!ignore_deadlock && + ACE_Token_Manager::instance ()->check_deadlock (caller->proxy ()) == 1) + { + if (caller->proxy ()->type () == ACE_RW_Token::WRITER) + this->num_writers_--; + errno = EDEADLK; + ACE_RETURN (-1); + } + + // Queue the caller at the end of the queue. + this->waiters_.enqueue (caller, -1); + + if (notify) + { + // If it's a writer, just notify it. + if (this->owner ()->proxy ()->type () == ACE_RW_Token::WRITER) + this->owner ()->call_sleep_hook (); + else + { + // Call back all reader owners. + ACE_TPQ_Entry *temp = this->owner (); + do + { + temp->call_sleep_hook (); + temp = temp->next_; + } + while (temp != 0 && + temp->proxy ()->type () == ACE_RW_Token::READER); + } + } + + errno = EWOULDBLOCK; + ACE_RETURN (-1); + + ACE_NOTREACHED (return -1); +} + +int +ACE_RW_Token::tryacquire (ACE_TPQ_Entry *caller) +{ + ACE_TRACE ("ACE_RW_Token::tryacquire"); + // We need to acquire two locks. This one to ensure that only one + // thread uses this token at a time. + ACE_GUARD_RETURN (ACE_TOKEN_CONST::MUTEX, ace_mon1, this->lock_, -1); + // This one to ensure an atomic transaction across all tokens. Note + // that this order is crucial too. It's resource coloring for other + // threads which may be calling this same token. + ACE_GUARD_RETURN (ACE_TOKEN_CONST::MUTEX, ace_mon2, ACE_Token_Manager::instance ()->mutex (), -1); + + if (caller->proxy ()->type () == ACE_RW_Token::WRITER) + { + this->num_writers_++; + } + + // Does _anyone_ own the token? + if (this->owner () == 0) + { + // There are no waiters, so queue as the first waiter (the owner). + this->waiters_.enqueue (caller, -1); + return 0; + } + + // Check for recursive acquisition. + if (this->is_owner (caller->client_id ())) + { + caller->nesting_level (1); + return 0; // Success. + } + + // Reader. + if (caller->proxy ()->type () == ACE_RW_Token::READER) + { + // Are there any writers? + if (this->num_writers_ == 0) + { + // queue the caller at the end of the queue. + this->waiters_.enqueue (caller, -1); + return 0; + } + // Else, fail. + } + else // Writer. + // We're going to fail, so decrement the num_writers. + { + this->num_writers_--; + } + + + errno = EWOULDBLOCK; + ACE_RETURN (-1); + + ACE_NOTREACHED (return -1); +} + +int +ACE_RW_Token::renew (ACE_TPQ_Entry *caller, + int requeue_position) +{ + ACE_TRACE ("ACE_RW_Token::renew"); + ACE_GUARD_RETURN (ACE_TOKEN_CONST::MUTEX, ace_mon, this->lock_, -1); + + // Werify that the caller is the owner + if (this->is_owner (caller->client_id ()) == 0) + { + errno = EACCES; + ACE_RETURN (-1); + } + + // The caller is the owner, so check to see if there are any + // waiters. If not, we just keep the token. + if (this->waiters_.size () == 1 || requeue_position == 0) + return 0; + + // There are waiters, so remove the caller. + this->remove (caller); + + // Requeue the caller. + this->waiters_.enqueue (caller, requeue_position); + + if (caller->proxy ()->type () == ACE_RW_Token::READER) + { + // If the caller got queued before any writers, the caller is + // still the owner. + if (this->is_owner (caller->client_id ())) + return 0; // success + // else fallthrough and return would block. + } + // Writers will always have to block since waiters_.size () == 1 or + // requeue_position == 0. + + // Get a new owner. + this->notify_new_owner (caller); + + // Tell the caller that the operation would block. + errno = EWOULDBLOCK; + ACE_RETURN (-1); + + ACE_NOTREACHED (return -1); +} + +int +ACE_RW_Token::release (ACE_TPQ_Entry *caller) +{ + ACE_TRACE ("ACE_RW_Token::release"); + ACE_GUARD_RETURN (ACE_TOKEN_CONST::MUTEX, ace_mon, this->lock_, -1); + + // Check for errors. + if ((this->owner () == 0) || + (this->is_owner (caller->client_id ()) == 0)) + { + errno = EACCES; + ACE_RETURN (-1); + } + + if (caller->proxy ()->type () == ACE_RW_Token::WRITER) + num_writers_--; + + // Recursive release. + if (caller->nesting_level () > 0) + { + caller->nesting_level (-1); + return 0; + } + + // Remove the caller and notify the new owner(s). + this->remove (caller); + this->notify_new_owner (caller); + + return 0; +} + +void +ACE_RW_Token::notify_new_owner (ACE_TPQ_Entry *old_owner) +{ + ACE_TRACE ("ACE_RW_Token::notify_new_owner"); + + if (this->owner () == 0) + return; + + if (this->owner ()->proxy ()->type () == ACE_RW_Token::READER) + { + if (old_owner->proxy ()->type () == ACE_RW_Token::READER) + // the owners already know that they're owners + return; + + // The current owner is a reader and the previous owner was a + // writer, so notify all waiting readers up to the first writer. + // call back all reader owners. + ACE_TPQ_Iterator iterator (waiters_); + for (ACE_TPQ_Entry *temp = 0; + iterator.next (temp) != 0; + iterator.advance ()) + { + if (temp->proxy ()->type () == WRITER) + // We've gone through all the readers. + break; + + temp->proxy ()->token_acquired (temp); + } + } + else // writer + this->owner ()->proxy ()->token_acquired (this->owner ()); +} + + +int +ACE_RW_Token::owners (OWNER_STACK &stack, + const ACE_TCHAR *id) +{ + ACE_TRACE ("ACE_RW_Token::owners"); + + if (this->owner () == 0) + return 0; + + int id_is_owner = 0; + + // The first waiter is a writer, so there is only one owner. + if (this->owner ()->proxy ()->type () == WRITER) + { + stack.push (this->owner ()); + // If an is specified, return whether it is the owner being + // returned. + if ((id != 0) && + (ACE_OS::strcmp (id, this->owner ()->client_id ()) == 0)) + id_is_owner = 1; + } + // The first waiter is a reader, so there can be multiple owning + // readers. + else + { + ACE_TPQ_Iterator iterator (waiters_); + for (ACE_TPQ_Entry *temp = 0; + iterator.next (temp) != 0; + iterator.advance ()) + { + if (temp->proxy ()->type () == WRITER) + // We've gone through all the readers. + break; + + stack.push (temp); + + if (!id_is_owner && (id != 0) && + (ACE_OS::strcmp (id, temp->client_id ()) == 0)) + id_is_owner = 1; + } + } + + return id_is_owner; +} + +int +ACE_RW_Token::is_waiting_for (const ACE_TCHAR *id) +{ + ACE_TRACE ("ACE_RW_Token::is_waiting_for"); + // If there is no owner, or is the owner, return false. + if ((this->owner () == 0) || + this->is_owner (id)) + return 0; + + // Step through each waiter looking for . + ACE_TPQ_Iterator iterator (waiters_); + iterator.advance (); + for (ACE_TPQ_Entry *temp = 0; + iterator.next (temp) != 0; + iterator.advance ()) + { + if (temp->equal_client_id (id)) + return 1; + } + + return 0; +} + +int +ACE_RW_Token::is_owner (const ACE_TCHAR *id) +{ + ACE_TRACE ("ACE_RW_Token::is_owner"); + // If there is no owner, return false. + if (this->owner () == 0) + return 0; + + // A writer owns us. + if (this->owner ()->proxy ()->type () == ACE_RW_Token::WRITER) + return this->owner ()->equal_client_id (id); + + // Readers own us. + // Step through each owning reader looking for . + ACE_TPQ_Iterator iterator (waiters_); + for (ACE_TPQ_Entry *temp = 0; + iterator.next (temp) != 0; + iterator.advance ()) + { + if (temp->proxy ()->type () != ACE_RW_Token::READER) + break; + + if (temp->equal_client_id (id)) + return 1; + } + + return 0; +} + +void +ACE_Token_Proxy::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Token_Proxy::dump"); + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("ACE_Token_Proxy::dump:\n") + ACE_TEXT (" type = %d\n") + ACE_TEXT (" ignore_deadlock_ = %d\n") + ACE_TEXT (" debug_ = %d\n"), + (int) this->type (), ignore_deadlock_, debug_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("mutex_, and waiter_\n"))); + + if (this->token_ != 0) + this->token_->dump (); + + this->waiter_.dump (); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("ACE_Token_Proxy::dump end.\n"))); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +const ACE_TCHAR * +ACE_Token_Proxy::client_id (void) const +{ + ACE_TRACE ("ACE_Token_Proxy::client_id"); + // Thread-specific. + const ACE_TPQ_Entry *temp = this->waiter_.operator->(); + const ACE_TCHAR *id = temp->client_id (); + + if (id == 0) + return ACE_TEXT ("ERROR NO CLIENT ID"); + else + return id; +} + +void +ACE_Token_Proxy::client_id (const ACE_TCHAR *client_id) +{ + ACE_TRACE ("ACE_Token_Proxy::client_id"); + this->waiter_->client_id (client_id); +} + +const ACE_TCHAR * +ACE_Token_Proxy::owner_id (void) +{ + ACE_TRACE ("ACE_Token_Proxy::owner_id"); + return this->token_->owner_id (); +} + +const ACE_TCHAR * +ACE_Token_Proxy::name (void) const +{ + ACE_TRACE ("ACE_Token_Proxy::name"); + return this->token_->name (); +} + +#if defined (ACE_WIN32_VC8) +# pragma warning (push) +# pragma warning (disable:4355) /* Use of 'this' in initializer list */ +#endif +ACE_Token_Proxy::ACE_Token_Proxy (void) +: token_ (0), + waiter_ (this, 0) +{ + ACE_TRACE ("ACE_Token_Proxy::ACE_Token_Proxy"); +} + +// Notice the token_ (0). Do *not* copy the token pointer. This must +// be obtained through the token manager. Also, we don't copy any +// waiter info. A copied Proxy does *not* inherit client_id. + +ACE_Token_Proxy::ACE_Token_Proxy (const ACE_Token_Proxy &) + : token_ (0), + waiter_ (this, 0) +{ + ACE_TRACE ("ACE_Token_Proxy::ACE_Token_Proxy"); +} +#if defined (ACE_WIN32_VC8) +# pragma warning (pop) +#endif + +// @@ should I do a mutex_->release ()? +ACE_Token_Proxy::~ACE_Token_Proxy (void) +{ + ACE_TRACE ("ACE_Token_Proxy::~ACE_Token_Proxy"); + + if (token_ != 0) + // notify token manager that we are done with it so it can + // free it if necessary + ACE_Token_Manager::instance ()->release_token (token_); +} + +int +ACE_Token_Proxy::open (const ACE_TCHAR *token_name, + int ignore_deadlock, + int debug) +{ + ACE_TRACE ("ACE_Token_Proxy::open"); + + // Store some parameters. + this->ignore_deadlock_ = ignore_deadlock; + this->debug_ = debug; + + // Used in case a name was not specified. + ACE_TCHAR name[BUFSIZ]; + + // We must have a name. + if (token_name == 0) + { + ACE_OS::sprintf (name, ACE_TEXT ("token %lx"), + reinterpret_cast (this)); + token_name = name; + } + + // Get or create the underlying token. The Token Manager will call + // us back to set token_. + ACE_Token_Manager::instance ()->get_token (this, token_name); + + // Check for failed get or failed new. + if (this->token_ == 0) + { + errno = ENOMEM; + ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("Can't allocate mutex")), -1); + } + + return 0; +} + +int +ACE_Token_Proxy::acquire (int notify, + void (*sleep_hook)(void *), + ACE_Synch_Options &options) +{ + ACE_TRACE ("ACE_Token_Proxy::acquire"); + if (this->token_ == 0) + { + errno = ENOENT; + ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("Not open.\n")), -1); + } + + // Make sure no one calls our token_acquired until we have a chance + // to sleep first! If after we call an EWOULDBLOCK + // mutex_->acquire() below, but before we enter handle_options to + // wait on the cond_var, a thread tries to give take us off the + // waiter queue and signal us, IT WILL FIRST HAVE TO ACQUIRE THIS + // cond_var.mutex (). _This_ is why we acquire it. + this->waiter_->cond_var_.mutex ().acquire (); + + this->waiter_->sleep_hook (sleep_hook); + + if (this->token_->acquire (this->waiter_, this->ignore_deadlock_, notify) == -1) + // acquire failed + { + switch (errno) + { + case EDEADLK : + if (!ignore_deadlock_) + { + waiter_->cond_var_.mutex ().release (); + errno = EDEADLK; + ACE_RETURN (-1); + } + // Else, fallthrough and block! + + case EWOULDBLOCK : + if (this->debug_) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("(%t) waiting for %s, owner is %s, ") + ACE_TEXT ("total waiters == %d\n"), + this->name (), + this->token_->owner_id (), + token_->no_of_waiters ())); + + // no error, but would block, if error, return error (-1), + // otherwise, return whether we called the holder or not. + int return_value; + if (this->handle_options (options, + waiter_->cond_var_) == -1) + return_value = -1; + else + return_value = notify == 1; + + errno = EWOULDBLOCK; + ACE_RETURN (return_value); + + default : + waiter_->cond_var_.mutex ().release (); + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("Token Proxy acquire.")), + -1); + } + } + else + // we have the token + { + if (debug_) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("(%t) acquired %s\n"), + this->name ())); + waiter_->cond_var_.mutex ().release (); + } + + return 0; +} + +int +ACE_Token_Proxy::tryacquire (void (*sleep_hook)(void *)) +{ + ACE_TRACE ("ACE_Token_Proxy::tryacquire"); + if (this->token_ == 0) + { + errno = ENOENT; + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("Not open.\n")), + -1); + } + + this->waiter_->sleep_hook (sleep_hook); + + return this->token_->tryacquire (waiter_); +} + +int +ACE_Token_Proxy::renew (int requeue_position, + ACE_Synch_Options &options) +{ + ACE_TRACE ("ACE_Token_Proxy::renew"); + if (this->token_ == 0) + { + errno = ENOENT; + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("Not open.\n")), + -1); + } + + // Make sure no one calls our token_acquired until we have a chance + // to sleep first! + this->waiter_->cond_var_.mutex ().acquire (); + + if (this->token_->renew (this->waiter_, requeue_position) == -1) + { + // check for error + if (errno != EWOULDBLOCK) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p renew failed\n"), ACE_TEXT ("ACE_Token_Proxy")), -1); + + if (this->debug_) + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) renew blocking for %s, owner is %s\n"), + this->name (), + token_->owner_id ())); + + // no error, but would block, so block or return + return this->handle_options (options, waiter_->cond_var_); + } + else + // we have the token + { + if (this->debug_) + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) renewed %s\n"), + this->name ())); + waiter_->cond_var_.mutex ().release (); + return 0; + } +} + +int +ACE_Token_Proxy::handle_options (ACE_Synch_Options &options, + ACE_TOKEN_CONST::COND_VAR &cv) +{ + // Some operation failed with EWOULDBLOCK. + ACE_TRACE ("ACE_Token_Proxy::handle_options"); + + if (options[ACE_Synch_Options::USE_REACTOR] == 1) + // Asynchronous. + { + // Save/restore errno. + ACE_Errno_Guard error (errno); + cv.mutex ().release (); + ACE_RETURN (-1); + } + else + // Synchronous. + { + // Block on condition variable. + while (cv.wait ((ACE_Time_Value *) options.time_value ()) == -1) + { + // Note, this should obey whatever thread-specific + // interrupt policy is currently in place... + if (errno == EINTR) + continue; + // We come here if a timeout occurs or some serious + // ACE_Condition object error. + cv.mutex ().release (); + ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("condition variable wait") + ACE_TEXT (" bombed.")), -1); + } + + if (this->debug_) + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) unblocking %s.\n"), + this->client_id ())); + cv.mutex ().release (); + return 0; // operation succeeded + } +} + +int +ACE_Token_Proxy::release (ACE_Synch_Options &) +{ + ACE_TRACE ("ACE_Token_Proxy::release"); + + if (this->token_ == 0) + { + errno = ENOENT; + if (debug_) + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Must open before releasing.\n"))); + ACE_RETURN (-1); + } + + if (this->token_->release (waiter_) != 0) + { + // Release failed. + this->token_->remove (this->waiter_); + if (debug_) + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) %p.\n"), ACE_TEXT ("release failed"))); + return -1; + } + else + { + if (this->debug_) + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) released %s, owner is %s\n"), + this->name (), + token_->owner_id ())); + + return 0; + } +} + +int +ACE_Token_Proxy::remove (ACE_Synch_Options &) +{ + ACE_TRACE ("ACE_Token_Proxy::remove"); + return 0; +} + +void +ACE_Token_Proxy::sleep_hook (void) +{ + ACE_TRACE ("ACE_Token_Proxy::sleep_hook"); + // Somebody wants our token! (Let'em wait...) + return; +} + +void +ACE_Token_Proxy::token_acquired (ACE_TPQ_Entry *e) +{ + ACE_TRACE ("ACE_Token_Proxy::token_acquired"); + e->cond_var_.mutex ().acquire (); + // We've been taken off the waiters list and given the token! + // This implementation signals the internal condition + // variable. Thus, if asynchronous acquires are used, this must be + // overriden to do something more useful! + e->cond_var_.signal (); + e->cond_var_.mutex ().release (); + + return; +} + +int +ACE_Token_Proxy::type (void) const +{ + ACE_TRACE ("ACE_Token_Proxy::type"); + return 0; +} + +int +ACE_Token_Proxy::acquire_read (int notify, + void (*sleep_hook)(void *), + ACE_Synch_Options &options) +{ + return this->acquire (notify, + sleep_hook, + options); +} + +int +ACE_Token_Proxy::acquire_write (int notify, + void (*sleep_hook)(void *), + ACE_Synch_Options &options) +{ + return this->acquire (notify, + sleep_hook, + options); +} + +int +ACE_Token_Proxy::tryacquire_read (void (*sleep_hook)(void *)) +{ + return this->tryacquire (sleep_hook); +} + +int +ACE_Token_Proxy::tryacquire_write (void (*sleep_hook)(void *)) +{ + return this->tryacquire (sleep_hook); +} + +ACE_Token_Name::ACE_Token_Name (const ACE_TCHAR *token_name) +{ + ACE_TRACE ("ACE_Token_Name::ACE_Token_Name"); + this->name (token_name); +} + +ACE_Token_Name::ACE_Token_Name (const ACE_Token_Name &rhs) +{ + ACE_TRACE ("ACE_Token_Name::ACE_Token_Name"); + this->name (rhs.name ()); +} + +ACE_Token_Name::~ACE_Token_Name () +{ + ACE_TRACE ("ACE_Token_Name::~ACE_Token_Name"); +} + +void +ACE_Token_Name::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Token_Name::dump"); + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("ACE_Token_Name::dump:\n") + ACE_TEXT (" token_name_ = %s\n"), + token_name_ == 0 ? ACE_TEXT ("no name") : token_name_)); + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +// ************************************************************ + +ACE_Token_Proxy * +ACE_Local_Mutex::clone (void) const +{ + ACE_Token_Proxy *temp = 0; + ACE_NEW_RETURN (temp, + ACE_Local_Mutex (token_->name (), + ignore_deadlock_, + debug_), + 0); + return temp; +} + +ACE_Tokens * +ACE_Local_Mutex::create_token (const ACE_TCHAR *name) +{ + ACE_Tokens *temp = 0; + ACE_NEW_RETURN (temp, + ACE_Mutex_Token (name), + 0); + return temp; +} + +ACE_Local_Mutex::~ACE_Local_Mutex (void) +{ +} + +// ************************************************************ + +ACE_Local_RLock::~ACE_Local_RLock (void) +{ +} + +ACE_Tokens * +ACE_Local_RLock::create_token (const ACE_TCHAR *name) +{ + ACE_Tokens *temp = 0; + ACE_NEW_RETURN (temp, + ACE_RW_Token (name), + 0); + return temp; +} + +int +ACE_Local_RLock::type (void) const +{ + return ACE_RW_Token::READER; +} + +ACE_Token_Proxy * +ACE_Local_RLock::clone (void) const +{ + ACE_Token_Proxy *temp = 0; + ACE_NEW_RETURN (temp, + ACE_Local_RLock (token_->name (), + ignore_deadlock_, + debug_), + 0); + return temp; +} + +// ************************************************************ + +ACE_Local_WLock::~ACE_Local_WLock (void) +{ +} + +ACE_Tokens * +ACE_Local_WLock::create_token (const ACE_TCHAR *name) +{ + ACE_Tokens *temp = 0; + ACE_NEW_RETURN (temp, + ACE_RW_Token (name), + 0); + return temp; +} + +int +ACE_Local_WLock::type (void) const +{ + return ACE_RW_Token::WRITER; +} + +ACE_Token_Proxy * +ACE_Local_WLock::clone (void) const +{ + ACE_Token_Proxy *temp = 0; + ACE_NEW_RETURN (temp, + ACE_Local_WLock (token_->name (), + ignore_deadlock_, + debug_), + 0); + return temp; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_TOKENS_LIBRARY */ diff --git a/ACE/ace/Local_Tokens.h b/ACE/ace/Local_Tokens.h new file mode 100644 index 00000000000..cea51db5894 --- /dev/null +++ b/ACE/ace/Local_Tokens.h @@ -0,0 +1,1121 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Local_Tokens.h + * + * $Id$ + * + * @author Karl-Heinz Dorn + * @author Douglas C. Schmidt + * @author Tim Harrison + * + * This file contains definitions for the following classes: + * + * public: + * 7. ACE_Token_Proxy + * 8. ACE_Null_Token : public ACE_Token_Proxy + * 9. ACE_Local_Mutex : public ACE_Token_Proxy + * *. ACE_Local_RLock : public ACE_Local_Mutex + * &. ACE_Local_WLock : public ACE_Local_Mutex + * private: + * 1. ACE_TOKEN_CONST + * 3. ACE_TPQ_Entry + * b. ACE_TSS_TPQ_Entry + * c. ACE_TPQ_Iterator + * 4. ACE_Token_Proxy_Queue + * 5. ACE_Tokens + * 6. ACE_Mutex_Token : public ACE_Tokens + * 12. ACE_RW_Token : public ACE_Tokens + * a. ACE_Token_Name + * + * Note that the locking classes defined in this file are *not* + * intended to be used as general-purpose synchronization + * mechanisms, such as mutexes or semaphores. Instead, you should + * use the ACE_Recursive_Thread_Mutex, ACE_Thread_Mutex, + * ACE_Thread_Semaphore, etc., that are defined in + * $ACE_ROOT/ace/Synch.h and $ACE_ROOT/ace/Synch_T.h or the + * ACE_Token that's defined in $ACE_ROOT/ace/Token.h. + * + * + */ +//============================================================================= + +#ifndef ACE_LOCAL_MUTEX_H +#define ACE_LOCAL_MUTEX_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined (ACE_HAS_TOKENS_LIBRARY) + +#include "ace/Synch_Traits.h" +#include "ace/Condition_Thread_Mutex.h" +#include "ace/TSS_T.h" +#include "ace/Containers.h" +#include "ace/Synch_Options.h" +#include "ace/Map_Manager.h" +#include "ace/Log_Msg.h" +#include "ace/OS_NS_string.h" +#include "ace/os_include/os_netdb.h" + +#if !(defined (ACE_HAS_THREADS) && defined (ACE_HAS_THREAD_SPECIFIC_STORAGE)) +# define ACE_NO_TSS_TOKENS 1 +#endif /* !(defined (ACE_HAS_THREADS) && defined (ACE_HAS_THREAD_SPECIFIC_STORAGE)) */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// 1. +/** + * @class ACE_TOKEN_CONST + * + * @brief Not a public interface. + * + * Constant definitions and typedefs for Token library. Mostly, + * this class is necessary to fight the compiler with order of + * declaration errors. + */ +namespace ACE_TOKEN_CONST +{ +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) + // ACE platform supports some form of threading. + typedef ACE_Condition_Thread_Mutex COND_VAR; + typedef ACE_Thread_Mutex MUTEX; + typedef ACE_Guard GUARD; +#else + typedef ACE_Null_Condition COND_VAR; + typedef ACE_Null_Mutex MUTEX; + typedef ACE_Guard GUARD; +#endif /* ACE_HAS_THREADS */ +} + +// Forward decl. +class ACE_Token_Proxy; + +// 3.. +/** + * @class ACE_TPQ_Entry + * + * @brief Token Proxy Queue entry. Used in the ACE_Token_Proxy_Queue + * + * Not a public interface. + */ +class ACE_Export ACE_TPQ_Entry +{ + friend class ACE_Token_Manager; +public: + typedef void (*PTVF) (void *); + + /// Null constructor. + ACE_TPQ_Entry (void); + + /// Constructor. + ACE_TPQ_Entry (const ACE_Token_Proxy *proxy, + const ACE_TCHAR *client_id); + + /// Copy constructor. + ACE_TPQ_Entry (const ACE_TPQ_Entry &rhs); + + /// Destructor. + ~ACE_TPQ_Entry (void); + + /// Copy operator use by the queue. + void operator= (const ACE_TPQ_Entry &rhs); + + /// Get top of the queue. + ACE_Token_Proxy *proxy (void) const; + + /// Set top of the queue. + void proxy (ACE_Token_Proxy *); + + /// Get nesting level of the entry. + int nesting_level (void) const; + + /// Delta nesting level of the entry. + void nesting_level (int delta); + + /// Get client_id of the entry. + const ACE_TCHAR *client_id (void) const; + + /// Set client_id of the entry. + void client_id (const ACE_TCHAR *); + + /// Returns 1 if @a id == client id. Does not check for @a id == 0. + int equal_client_id (const ACE_TCHAR *id); + + /// One method for arg and sleep_hook. + void set (void (*sleep_hook)(void *)); + + /// Set sleep hook of the entry. + void sleep_hook (void (*sh)(void *)); + + /// Get sleep hook of the entry. + PTVF sleep_hook (void) const; + + /// Call the sleep hook function or method passing arg. + void call_sleep_hook (void); + + /// Dump the state of the class. + void dump (void) const; + + // = Used to block the thread if an acquire fails with EWOULDBLOCK. + ACE_TOKEN_CONST::COND_VAR cond_var_; + ACE_TOKEN_CONST::MUTEX lock_; + + /// Pointer to next in list. + ACE_TPQ_Entry *next_; + + /// Get whether this client is blocked waiting for a token. + int waiting (void) const; + + /// Set whether this client is blocked waiting for a token. + void waiting (int w); + +private: + /// This client is waiting for a token. + int waiting_; + + /// Proxy. + ACE_Token_Proxy *proxy_; + + /// Nesting level. + int nesting_level_; + + /// Arg. + void *arg_; + + /// Client id. + ACE_TCHAR client_id_[ACE_MAXCLIENTIDLEN]; + + /// Sleep hook. + void (*sleep_hook_)(void *); +}; + +// b.. +#if defined (ACE_NO_TSS_TOKENS) +typedef ACE_TPQ_Entry ACE_TPQ_ENTRY; +#else +typedef ACE_TSS ACE_TPQ_ENTRY; +#endif /* ACE_NO_TSS_TOKENS */ + +/** + * @class ACE_TSS_TPQ_Entry + * + * @brief ACE_TSS_TPQ_Entry + * + * Not a public interface. + */ +class ACE_Export ACE_TSS_TPQ_Entry : public ACE_TPQ_ENTRY +{ +public: + /// These are passed to the constructor of ACE_TPQ_Entry in + /// make_TSS_TYPE + ACE_TSS_TPQ_Entry (const ACE_Token_Proxy *proxy, + const ACE_TCHAR *client_id); + + /// Destructor. + virtual ~ACE_TSS_TPQ_Entry (void); + + /// Allows us to pass args to the construction of the TSS object. + virtual ACE_TPQ_Entry *make_TSS_TYPE (void) const; + + /// Operator overloading and inheritence don't mix. + operator ACE_TPQ_Entry *(void); + + /// Dump the state of the class. + void dump (void) const; + +#if defined (ACE_NO_TSS_TOKENS) + ACE_TPQ_Entry *operator-> (void) + { + return (ACE_TPQ_Entry *) this; + } +#endif /* ACE_NO_TSS_TOKENS */ + +private: + /// Private: should not be used + ACE_TSS_TPQ_Entry (const ACE_TSS_TPQ_Entry &); + void operator= (const ACE_TSS_TPQ_Entry &); + + // = These are passed to the constructor of ACE_TPQ_Entry in + // make_TSS_TYPE + + /// Proxy. + const ACE_Token_Proxy *proxy_; + + /// Client_id. + const ACE_TCHAR *client_id_; +}; + +class ACE_Token_Proxy_Queue; + +// c.. +/** + * @class ACE_TPQ_Iterator + * + * @brief Iterates through ACE_Token_Proxy_Queues. + * + * Not a public interface. + */ +class ACE_Export ACE_TPQ_Iterator +{ +public: + /// Constructor. + ACE_TPQ_Iterator (ACE_Token_Proxy_Queue &q); + + /// Destructor. + ~ACE_TPQ_Iterator (void); + + /// Pass back the . + int next (ACE_TPQ_Entry *&next_item); + + /// Returns 1 when all items have been seen, else 0. + int done (void) const; + + /// Move forward by one element in the queue. + void advance (void); + + /// Dump the state of an object. + void dump (void) const; + +private: + ACE_TPQ_Entry *current_; +}; + +// 4.. +/** + * @class ACE_Token_Proxy_Queue + * + * @brief Token waiter list. + * + * Not a public interface. + * This queue holds all the token proxies waiting for ownership + * of a token. Along with the proxy reference, it also stores + * the nesting level, client id, and a magic cookie from the + * proxy. This queue stores the ACE_TPQ_Entries by pointer + * values. It DOES NOT make copies. Thus, the user is + * responsible to ensure that the TPQ's stick around. This is + * motivated by the need to reduce dynamic memory allocation. + */ +class ACE_Export ACE_Token_Proxy_Queue +{ +public: + friend class ACE_TPQ_Iterator; + + /// Constructor. + ACE_Token_Proxy_Queue (void); + + /// Destructor. + ~ACE_Token_Proxy_Queue (void); + + /** + * Enqueue a proxy, nesting level, client_id, and a magic cookie at + * the given position in the list. If the position is -1, we + * enqueue at the end of the list (I think). + */ + void enqueue (ACE_TPQ_Entry* new_entry, + int position); + + /// Top of the queue. + const ACE_TPQ_Entry* head (void); + +// int member (const ACE_TCHAR *id); + // Is this id in the waiter list? + + /// Remove the top waiter. + void dequeue (void); + + /// Remove the waiter whose proxy ref matches @a remove_me. + void remove (const ACE_TPQ_Entry *remove_me); + + /// The number of waiters. + int size (void); + + /// Dump the state of the class. + void dump (void) const; + +protected: + /// Head. + ACE_TPQ_Entry *head_; + + /// Tail. + ACE_TPQ_Entry *tail_; + + /// Size. + int size_; +}; + +// 5.. +/** + * @class ACE_Tokens + * + * @brief Abstract representation of ACE tokens. + * + * Not a public interface. + * Currently, I don't see a reason for providing an abstract + * interface at this level of the library. As of yet, no one + * uses ACE_Tokens derivatives through this abstract interface + * except for ACE_Token_Manager. It only uses the statistical + * methods which are shared by all Tokens. For that reason, it + * still makes since to have a common base class. However, + * acquire, renew, and release do not need to have matching + * interfaces throughout all Tokens. + * To add a new type of token (e.g. semaphore), this class must + * be subtyped to define the new semantics. See + * ACE_Token_Manager for details. + */ +class ACE_Export ACE_Tokens +{ +public: + + /// Null constructor. + ACE_Tokens (void); + + /// Destructor + virtual ~ACE_Tokens (void); + + /// No implementation. + virtual int acquire (ACE_TPQ_Entry *caller, + int ignore_deadlock, + int notify) = 0; + + /// No implementation. + virtual int tryacquire (ACE_TPQ_Entry *caller) = 0; + + /// No implementation. + virtual int renew (ACE_TPQ_Entry *caller, + int requeue_position) = 0; + + /// No implementation. + virtual int release (ACE_TPQ_Entry *caller) = 0; + + /// Move the caller to the front of the waiter list. This is for use + /// with remote mutexes and shadow mutexes. + void make_owner (ACE_TPQ_Entry *caller); + + /// Remove the caller from the waiter list. + void remove (ACE_TPQ_Entry *caller); + + // = Accessor methods. + + /// Stack of owners. + typedef ACE_Unbounded_Stack OWNER_STACK; + + /// Returns a stack of the current owners. Returns -1 on error, 0 on + /// success. If is non-zero, returns 1 if id is an owner. + virtual int owners (OWNER_STACK &o, const ACE_TCHAR *id) = 0; + + /// Returns 1 if is waiting for this token. 0 otherwise. + virtual int is_waiting_for (const ACE_TCHAR *id) = 0; + + /// Returns 1 if is an owner of this token. 0 otherwise. + virtual int is_owner (const ACE_TCHAR *id) = 0; + + /// Return the queue of waiters. + virtual ACE_Token_Proxy_Queue *waiters (void); + + /// Return the number of proxies that are currently waiting to get + /// the token. + virtual int no_of_waiters (void); + + /// The current owner. + const ACE_TCHAR *owner_id (void); + + /// Token name. + const ACE_TCHAR* name (void); + + // = Reference counting. These are only called by the + // Token_Manager. + void inc_reference (void); + int dec_reference (void); + + /// Dump the state of the class. + void dump (void) const; + + /** + * These are the Token types supported by the library at ship time. + * There is no restriction on the number of Token types added by + * "3rd parties." These are only necessary for the Token Server. + */ + enum TOKEN_TYPES { MUTEX, RWLOCK }; + + /** + * Provides a manual RTTI mechanism. This method is used only by + * ACE_Token_Request so that the type of a token can be sent to a + * remote Token Server. + */ + virtual int type (void) const = 0; + + // = The following methods allow the deadlock detection algorithm to + // check if this token has been visited. + + /// Mark or unmark the token as visited. + void visit (int v); + + /// Check if the token has been visited. + int visited (void); + + /// All the data of the current owner. + ACE_TPQ_Entry *owner (void); + +protected: + + /// For the deadlock detection algorithm. + int visited_; + + /// Reference count. + int reference_count_; + + /// List of client's owning and waiting the token. + ACE_Token_Proxy_Queue waiters_; + + /// Name of token. + ACE_TCHAR token_name_[ACE_MAXTOKENNAMELEN]; +}; + +class ACE_Local_Mutex; + +// 6.. +/** + * @class ACE_Mutex_Token + * + * @brief Class that acquires, renews, and releases a process-local + * synchronization token. + * + * Not a public interface. + * This class is a more general-purpose synchronization mechanism + * than SunOS 5.x mutexes. For example, it implements "recursive + * mutex" semantics, where a thread that owns the token can + * reacquire it without deadlocking. In addition, threads that + * are blocked awaiting the token are serviced in strict FIFO + * order as other threads release the token (SunOS 5.x mutexes + * don't strictly enforce an acquisition order). + */ +class ACE_Export ACE_Mutex_Token : public ACE_Tokens +{ +public: + /// Constructor + explicit ACE_Mutex_Token (const ACE_TCHAR* name); + + /// Destructor + virtual ~ACE_Mutex_Token (void); + + // = Synchronization operations. + // With acquire, renew, and release, the caller must be specified so + // that multiple proxies (e.g. ACE_Local_Mutex) can use the same + // token. + + /** + * Returns 0 on success, -1 on failure with as + * the reason. If errnum == EWOULDBLOCK, and notify == 1, + * has been called on the current + * owner of the token. If ignore_deadlock is passed as 1 and errnum + * == EDEADLK, then deadlock was detected via ace_token_manager. + */ + virtual int acquire (ACE_TPQ_Entry *caller, + int ignore_deadlock, + int notify); + + /// Same as acquire, but fails if would block + virtual int tryacquire (ACE_TPQ_Entry *caller); + + /** + * An optimized method that efficiently reacquires the token if no + * other threads are waiting. This is useful for situations where + * you don't want to degrade the quality of service if there are + * other threads waiting to get the token. If == + * -1 and there are other threads waiting to obtain the token we are + * queued at the end of the list of waiters. If + * > -1 then it indicates how many entries to skip over before + * inserting our thread into the list of waiters (e.g., + * == 0 means "insert at front of the queue"). + * Renew has the rather odd semantics such that if there are other + * waiting threads it will give up the token even if the + * nesting_level_ > 1. I'm not sure if this is really the right + * thing to do (since it makes it possible for shared data to be + * changed unexpectedly) so use with caution... Returns 0 on + * success, -1 on failure with as the reason. + * If errnum == EWOULDBLOCK, and notify == 1, + * has been called on the current + * owner of the token. + */ + virtual int renew (ACE_TPQ_Entry *caller, + int requeue_position); + + /** + * Relinquish the token. If there are any waiters then the next one + * in line gets it. If the caller is not the owner, caller is + * removed from the waiter list. + */ + virtual int release (ACE_TPQ_Entry *caller); + + /// Dump the state of the class. + void dump (void) const; + + /// Returns ACE_Tokens::MUTEX. + virtual int type (void) const; + + /// Returns a stack of the current owners. Returns -1 on error, 0 on + /// success. If is non-zero, returns 1 if id is an owner. + virtual int owners (OWNER_STACK &o, const ACE_TCHAR *id); + + /// Returns 1 if is waiting for this token. 0 otherwise. + virtual int is_waiting_for (const ACE_TCHAR *id); + + /// Returns 1 if is an owner of this token. 0 otherwise. + virtual int is_owner (const ACE_TCHAR *id); + +private: + /// ACE_Mutex_Token used to lock internal data structures. + ACE_TOKEN_CONST::MUTEX lock_; +}; + +// 12.. +/** + * @class ACE_RW_Token + * + * @brief Class that acquires, renews, and releases a process-local + * synchronization token. + * + * Not a public interface. + * This class is a more general-purpose synchronization mechanism + * than SunOS 5.x mutexes. For example, it implements "recursive + * mutex" semantics, where a thread that owns the token can + * reacquire it without deadlocking. In addition, threads that are + * blocked awaiting the token are serviced in strict FIFO order as + * other threads release the token (SunOS 5.x mutexes don't strictly + * enforce an acquisition order). + */ +class ACE_Export ACE_RW_Token : public ACE_Tokens +{ +public: + /// Constructor. + explicit ACE_RW_Token (const ACE_TCHAR* name); + + /// Destructor. + virtual ~ACE_RW_Token (void); + + // = Synchronization operations. + // With acquire, renew, and release, the caller must be specified so + // that multiple proxies (e.g. ACE_Local_Mutex) can use the same + // token. + + /** + * Returns 0 on success, -1 on failure with as + * the reason. If errnum == EWOULDBLOCK, and notify == 1, + * has been called on the current + * owner of the token. If @a ignore_deadlock is passed as 1 and errnum + * == EDEADLK, then deadlock was detected via ACE_Token_Manager. + */ + virtual int acquire (ACE_TPQ_Entry *caller, + int ignore_deadlock, + int notify); + + /// Same as acquire except fails on would block + virtual int tryacquire (ACE_TPQ_Entry *caller); + + /** + * An optimized method that efficiently reacquires the token if no + * other threads are waiting. This is useful for situations where + * you don't want to degrade the quality of service if there are + * other threads waiting to get the token. If == + * -1 and there are other threads waiting to obtain the token we are + * queued at the end of the list of waiters. If + * > -1 then it indicates how many entries to skip over before + * inserting our thread into the list of waiters (e.g., + * == 0 means "insert at front of the queue"). + * Renew has the rather odd semantics such that if there are other + * waiting threads it will give up the token even if the + * nesting_level_ > 1. I'm not sure if this is really the right + * thing to do (since it makes it possible for shared data to be + * changed unexpectedly) so use with caution... Returns 0 on + * success, -1 on failure with as the reason. + * If errnum == EWOULDBLOCK, and notify == 1, + * has been called on the current + * owner of the token. + */ + virtual int renew (ACE_TPQ_Entry *caller, + int requeue_position); + + /** + * Relinquish the token. If there are any waiters then the next one + * in line gets it. If the caller is not the owner, caller is + * removed from the waiter list. + */ + virtual int release (ACE_TPQ_Entry *caller); + + /// Dump the state of the class. + void dump (void) const; + + /// These are the types that proxies can be. + enum PROXY_TYPE { READER, WRITER }; + + /// Returns READER or WRITER. + virtual int type (void) const; + + /// Returns a stack of the current owners. Returns -1 on error, 0 on + /// success. If is non-zero, returns 1 if id is an owner. + virtual int owners (OWNER_STACK &o, const ACE_TCHAR *id); + + /// Returns 1 if is waiting for this token. 0 otherwise. + virtual int is_waiting_for (const ACE_TCHAR *id); + + /// Returns 1 if is an owner of this token. 0 otherwise. + virtual int is_owner (const ACE_TCHAR *id); + +protected: + /// The number of waiting writers. + int num_writers_; + + /// ACE_Mutex_Token used to lock internal data structures. + ACE_TOKEN_CONST::MUTEX lock_; + + /// Sets the new owner. + void notify_new_owner (ACE_TPQ_Entry *caller); +}; + +// a.. +/** + * @class ACE_Token_Name + * + * @brief Allows Token_Manger to identify tokens. + * + * For now, this is just a string. We need a string class + * anyway to use in ACE_Map_Manager. Having this class + * (instead of ) allows us to easily change if + * needed. For instance, we may choose to identify tokens by + * name and *type* in the future. + */ +class ACE_Export ACE_Token_Name +{ +public: + /// Construction. + ACE_Token_Name (const ACE_TCHAR *token_name = 0); + + /// Copy construction. + ACE_Token_Name (const ACE_Token_Name &rhs); + + /// Destructor. + virtual ~ACE_Token_Name (void); + + /// Copy. + void operator= (const ACE_Token_Name &rhs); + + /// Comparison. + bool operator== (const ACE_Token_Name &rhs) const; + + /// Get the token name. + const ACE_TCHAR *name (void) const; + + /// Set the token name. + void name (const ACE_TCHAR *new_name); + + /// Dump the state of the class. + void dump (void) const; + +private: + /// Name of the token. + ACE_TCHAR token_name_[ACE_MAXTOKENNAMELEN]; +}; + +// 7.. +/** + * @class ACE_Token_Proxy + * + * @brief Abstract representation of ACE tokens. + * + * Interface for all Tokens in ACE. This class implements the + * synchronization needed for tokens (condition variables etc.) + * The algorithms for the operations (acquire, release, etc.) + * operate on the generic ACE_Tokens interface. Thus, the _type_ + * of token (mutex, rwlock) can be set at construction of + * ACE_Token_Proxy. You can use all Tokens in ACE through the + * ACE_Token_Proxy by passing the proper values at construction. + * Alternatively, there are class definitions which "know" how to + * do this (ACE_Local_Mutex, ACE_Local_RLock, ACE_Local_WLock). + * To add a new type of token (e.g. semaphore), this class is not + * changed. See ACE_Token_Manager for details. + * Tokens (e.g. ACE_Mutex_Token) assume that it can always call + * on a new token owner. This + * is not a problem for synchronous use of token proxies (that is, + * when acquires block until successful.) However, for + * implementations of the Token Server, which may use asynch + * operations, the proxy can not go away after an acquire until + * the token is acquired. This is not really a problem, but + * should be understood. + */ +class ACE_Export ACE_Token_Proxy +{ +public: + friend class ACE_Token_Manager; + friend class ACE_Token_Invariant_Manager; // For testing. + + // Initialization and termination methods. + /// Construction. + ACE_Token_Proxy (void); + + /// Destructor. + virtual ~ACE_Token_Proxy (void); + + /** + * Open the . + * @param name The string uniquely identifying the token. + * @param ignore_deadlock Can be 1 to disable deadlock notifications. + * @param debug Prints debug messages. + */ + virtual int open (const ACE_TCHAR *name, + int ignore_deadlock = 0, + int debug = 0); + + // = The following methods have implementations which are + // independent of the token semantics (mutex, rwlock, etc.) They + // forward operations to the underlying token and perform the + // necessary blocking semantics for operations (condition variables + // etc.) This allows reuse of the blocking code as well as having + // multiple proxies to the same token. + + /// Calls acquire on the token. Blocks the calling thread if would + /// block. + virtual int acquire (int notify = 0, + void (*sleep_hook)(void *) = 0, + ACE_Synch_Options &options = + ACE_Synch_Options::defaults); + + /// Calls renew on the token. Blocks the calling thread if would block. + virtual int renew (int requeue_position = -1, + ACE_Synch_Options &options = + ACE_Synch_Options::defaults); + + /// Calls renew on the token. + virtual int tryacquire (void (*sleep_hook)(void *) = 0); + + /// Calls release on the token. + virtual int release (ACE_Synch_Options &options = + ACE_Synch_Options::defaults); + + /// Calls remove on the token. + virtual int remove (ACE_Synch_Options &options = + ACE_Synch_Options::defaults); + + /// Since the locking mechanism doesn't support read locks then this + /// just calls . + virtual int acquire_read (int notify = 0, + void (*sleep_hook)(void *) = 0, + ACE_Synch_Options &options = + ACE_Synch_Options::defaults); + + /// Since the locking mechanism doesn't support write locks then this + /// just calls . + virtual int acquire_write (int notify = 0, + void (*sleep_hook)(void *) = 0, + ACE_Synch_Options &options = + ACE_Synch_Options::defaults); + + /// Since the locking mechanism doesn't support read locks then this + /// just calls . + virtual int tryacquire_read (void (*sleep_hook)(void *) = 0); + + /// Since the locking mechanism doesn't support write locks then this + /// just calls . + virtual int tryacquire_write (void (*sleep_hook)(void *) = 0); + + // = Utility methods. + + /// Get the client id of the proxy. This is implemented as + /// thread-specific data. + virtual const ACE_TCHAR *client_id (void) const; + + /** + * Set the client_id for the calling thread. I strongly recommend + * that this not be used unless you really know what you're doing. + * I use this in the Token Server, and it caused many headaches. + */ + virtual void client_id (const ACE_TCHAR *client_id); + + /** + * Return the name of the token. This is important for use within + * the token servers (local and remote) as well as with token + * collections. So, all derivations of ACE_Token_Proxy must be able to + * stringify some name. The name must uniquely identify a token. + * So, for instance, the token within the reactor should probably be + * called "Reactor Token." + */ + virtual const ACE_TCHAR *name (void) const; + + /** + * This should really be called . This is called + * by ACE_Token_xx's when another proxy enters the waiting list and + * requests that the current token holder be notified. + */ + virtual void sleep_hook (void); + + /// This is called when a queued (waiting) proxy is removed from the + /// waiters list and given the token. + virtual void token_acquired (ACE_TPQ_Entry *); + + /// The client id of the current token holder + virtual const ACE_TCHAR *owner_id (void); + + /// Return a dynamically allocated clone of the derived class. + virtual ACE_Token_Proxy *clone (void) const = 0; + + /// Dump the state of the class. + void dump (void) const; + + /** + * This method can be used be Tokens (e.g. Readers/Writer Tokens) to + * distinguish between Proxy types. For instance a Reader proxy + * should return a different type value than a Writer proxy. The + * default implementation returns 0. + */ + virtual int type (void) const; + +protected: + /// Duplication. + ACE_Token_Proxy (const ACE_Token_Proxy &); + + /// If this is set, we ignore deadlock. + int ignore_deadlock_; + + /// Print a bunch of debug messages. + int debug_; + + /// Reference to the actual logical token. Many ACE_Local_Mutex + /// proxies can reference the same ACE_Mutex_Token. + ACE_Tokens *token_; + + /// Handles cond_var waits. + int handle_options (ACE_Synch_Options &options, + ACE_TOKEN_CONST::COND_VAR &cv); + + /// Waiter info used for asynchronous transactions. + ACE_TSS_TPQ_Entry waiter_; + + /// Make the correct type of ACE_Tokens. This is called by the Token + /// Manager. + virtual ACE_Tokens *create_token (const ACE_TCHAR *name) = 0; +}; + +// 8.. +/** + * @class ACE_Null_Token + * + * @brief No op class for nonthreaded platform protocols. + */ +class ACE_Export ACE_Null_Token : public ACE_Token_Proxy +{ +public: +#if defined (ACE_LACKS_INLINE_FUNCTIONS) + // @@ Hopefully, we can remove this ridicules ifdef when CE's compiler becomes more normal. + /// Construction. + ACE_Null_Token (void); + + /// Destructor. + ~ACE_Null_Token (void); +#endif /* ACE_LACKS_INLINE_FUNCTION */ + + /// Acquire. + virtual int acquire (int /* notify */ = 0, + void (* /* sleep_hook */ )(void *) = 0, + ACE_Synch_Options & /* options */ = + ACE_Synch_Options::defaults) { return 0; } + + /// Renew. + virtual int renew (int /* requeue_position */ = -1, + ACE_Synch_Options & /* options */ = + ACE_Synch_Options::defaults) { return 0; } + + /// Try acquire. + virtual int tryacquire (void (* /* sleep_hook */)(void *) = 0) { return 0; } + + /// Release. + virtual int release (ACE_Synch_Options & /* options */ = + ACE_Synch_Options::defaults) { return 0; } + + /// Remove. + virtual int remove (ACE_Synch_Options & /* options */ = + ACE_Synch_Options::defaults) { return 0; } + + /// Return a dynamically allocated clone of the derived class. + virtual ACE_Token_Proxy *clone (void) const { return new ACE_Null_Token; } + + /// Dump the state of the class. + void dump (void) const; + + /// Do not allow the Token Manager to create us. + virtual ACE_Tokens *create_token (const ACE_TCHAR *) { return 0; } +}; + +// 9.. +/** + * @class ACE_Local_Mutex + * + * @brief Class that acquires, renews, and releases a synchronization + * token local to the process. + * + * This class is a more general-purpose synchronization mechanism + * than SunOS 5.x mutexes. For example, it implements "recursive + * mutex" semantics, where a thread that owns the token can + * reacquire it without deadlocking. In addition, threads that + * are blocked awaiting the token are serviced in strict FIFO + * order as other threads release the token (SunOS 5.x mutexes + * don't strictly enforce an acquisition order). Lastly, + * ACE_Local_Mutex performs deadlock detection on acquire calls. + * The interfaces for acquire, tryacquire, renew, release, + * etc. are defined in ACE_Token_Proxy. The semantics for + * ACE_Local_Mutex are that of a mutex. + */ +class ACE_Export ACE_Local_Mutex : public ACE_Token_Proxy +{ +public: + /** + * Constructor. + * @param token_name Uniquely id's the token. + * @param ignore_deadlock Will allow deadlock to occur (useful for testing). + * @param debug Prints a bunch of messages. + */ + ACE_Local_Mutex (const ACE_TCHAR *token_name = 0, + int ignore_deadlock = 0, + int debug = 0); + + /// Destructor + ~ACE_Local_Mutex (void); + + /// Dump the state of the class. + void dump (void) const; + + /// Return deep copy. + virtual ACE_Token_Proxy *clone (void) const; + +protected: + /// Return a new ACE_Local_Mutex. + virtual ACE_Tokens *create_token (const ACE_TCHAR *name); +}; + +// *. +/** + * @class ACE_Local_RLock + * + * @brief Class that acquires, renews, and releases a readers lock that + * is local to the process. + * + * This class implements the reader interface to canonical + * readers/writer locks. Multiple readers can hold the lock + * simultaneously when no writers have the lock. Alternatively, + * when a writer holds the lock, no other participants (readers + * or writers) may hold the lock. This class is a more + * general-purpose synchronization mechanism than SunOS 5.x + * RLocks. For example, it implements "recursive RLock" + * semantics, where a thread that owns the token can reacquire it + * without deadlocking. In addition, threads that are blocked + * awaiting the token are serviced in strict FIFO order as other + * threads release the token (SunOS 5.x RLockes don't strictly + * enforce an acquisition order). + * The interfaces for acquire, tryacquire, renew, release, + * etc. are defined in ACE_Token_Proxy. The semantics for + * ACE_Local_RLock are that of a readers/writers lock. Acquire + * for this class implies a reader acquisition. That is, + * multiple clients may acquire a lock for read only. + */ +class ACE_Export ACE_Local_RLock : public ACE_Token_Proxy +{ +public: + // = Initialization and termination. + + /** + * Constructor. + * @param token_name Uniquely id's the token. + * @param ignore_deadlock Will allow deadlock to occur (useful for testing). + * @param debug Prints a bunch of messages. + */ + ACE_Local_RLock (const ACE_TCHAR *token_name = 0, + int ignore_deadlock = 0, + int debug = 0); + + /// Destructor + ~ACE_Local_RLock (void); + + /// Dump the state of the class. + void dump (void) const; + + /// Returns ACE_RW_Token::RLOCK. + virtual int type (void) const; + + /// Return deep copy. + virtual ACE_Token_Proxy *clone (void) const; + +protected: + /// Return a new ACE_Local_Mutex. + virtual ACE_Tokens *create_token (const ACE_TCHAR *name); +}; + +// *. +/** + * @class ACE_Local_WLock + * + * @brief Class that acquires, renews, and releases a writer lock that + * is local to the process. + * + * This class implements the writer interface to canonical + * readers/writer locks. Multiple readers can hold the lock + * simultaneously when no writers have the lock. Alternatively, + * when a writer holds the lock, no other participants (readers + * or writers) may hold the lock. This class is a more + * general-purpose synchronization mechanism than SunOS 5.x + * WLock. For example, it implements "recursive WLock" + * semantics, where a thread that owns the token can reacquire it + * without deadlocking. In addition, threads that are blocked + * awaiting the token are serviced in strict FIFO order as other + * threads release the token (SunOS 5.x WLocks don't strictly + * enforce an acquisition order). + * The interfaces for acquire, tryacquire, renew, release, + * etc. are defined in ACE_Token_Proxy. The semantics for + * ACE_Local_WLock are that of a readers/writers lock. Acquire + * for this class implies a writer acquisition. That is, only + * one client may hold the lock for writing. + */ +class ACE_Export ACE_Local_WLock : public ACE_Token_Proxy +{ +public: + // = Initialization and termination. + + /** + * Constructor. + * @param token_name Uniquely id's the token. + * @param ignore_deadlock Will allow deadlock to occur (useful for testing). + * @param debug Prints a bunch of messages. + */ + ACE_Local_WLock (const ACE_TCHAR *token_name = 0, + int ignore_deadlock = 0, + int debug = 0); + + /// Destructor + ~ACE_Local_WLock (void); + + /// Dump the state of the class. + void dump (void) const; + + /// Returns ACE_RW_Token::WLOCK. + virtual int type (void) const; + + /// Return deep copy. + virtual ACE_Token_Proxy *clone (void) const; + +protected: + /// Return a new ACE_Local_Mutex. + ACE_Tokens *create_token (const ACE_TCHAR *name); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_TOKENS_LIBRARY */ + +#if defined (__ACE_INLINE__) +#include "ace/Local_Tokens.inl" +#endif /* __ACE_INLINE__ */ +#include /**/ "ace/post.h" +#endif /* ACE_LOCAL_MUTEX_H */ diff --git a/ACE/ace/Local_Tokens.inl b/ACE/ace/Local_Tokens.inl new file mode 100644 index 00000000000..2e27ce4af04 --- /dev/null +++ b/ACE/ace/Local_Tokens.inl @@ -0,0 +1,289 @@ +// -*- C++ -*- +// +// $Id$ + +#if defined (ACE_HAS_TOKENS_LIBRARY) + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// ************************************************************ + +ACE_INLINE int +ACE_Token_Proxy_Queue::size (void) +{ + ACE_TRACE ("ACE_Token_Proxy_Queue::size"); + return this->size_; +} + +// ************************************************************ + +ACE_INLINE int +ACE_TPQ_Entry::waiting (void) const +{ + ACE_TRACE ("ACE_TPQ_Entry::waiting"); + return waiting_; +} + +ACE_INLINE void +ACE_TPQ_Entry::waiting (int v) +{ + ACE_TRACE ("ACE_TPQ_Entry::waiting"); + waiting_ = v; +} + +ACE_INLINE const ACE_TCHAR * +ACE_TPQ_Entry::client_id (void) const +{ + ACE_TRACE ("ACE_TPQ_Entry::client_id"); + return this->client_id_; +} + +ACE_INLINE ACE_Token_Proxy * +ACE_TPQ_Entry::proxy (void) const +{ + ACE_TRACE ("ACE_TPQ_Entry::proxy"); + return this->proxy_; +} + +ACE_INLINE void +ACE_TPQ_Entry::proxy (ACE_Token_Proxy *proxy) +{ + ACE_TRACE ("ACE_TPQ_Entry::proxy"); + this->proxy_ = proxy; +} + +ACE_INLINE +ACE_TPQ_Iterator::~ACE_TPQ_Iterator (void) +{ +} + +ACE_INLINE +ACE_Token_Proxy_Queue::~ACE_Token_Proxy_Queue (void) +{ +} + +ACE_INLINE void +ACE_Tokens::remove (ACE_TPQ_Entry *caller) +{ + this->waiters_.remove (caller); +} + +ACE_INLINE int +ACE_Tokens::dec_reference (void) +{ + ACE_TRACE ("ACE_Tokens::dec_reference"); + if (this->reference_count_ == 0) + { + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("dec_reference already zero"))); + return 0; + } + + return --this->reference_count_; +} + +ACE_INLINE void +ACE_Tokens::inc_reference (void) +{ + ACE_TRACE ("ACE_Tokens::inc_reference"); + ++this->reference_count_; +} + +ACE_INLINE const ACE_TPQ_Entry * +ACE_Token_Proxy_Queue::head (void) +{ + ACE_TRACE ("ACE_Token_Proxy_Queue::head"); + if (this->head_ == 0) + return 0; + else + return this->head_; +} + +// ************************************************** +// ************************************************** +// ************************************************** + +ACE_INLINE void +ACE_Tokens::visit (int v) +{ + ACE_TRACE ("ACE_Tokens::visit"); + visited_ = v; +} + +ACE_INLINE int +ACE_Tokens::visited (void) +{ + ACE_TRACE ("ACE_Tokens::visited"); + return visited_; +} + +ACE_INLINE ACE_TPQ_Entry * +ACE_Tokens::owner (void) +{ + ACE_TRACE ("ACE_Tokens::owner"); + return (ACE_TPQ_Entry *) this->waiters_.head (); +} + +ACE_INLINE const ACE_TCHAR* +ACE_Tokens::owner_id () +{ + ACE_TRACE ("ACE_Tokens::owner_id"); + if (this->owner () == 0) + return ACE_TEXT ("no owner"); + else + return this->owner ()->client_id (); +} + +ACE_INLINE const ACE_TCHAR* +ACE_Tokens::name (void) +{ + ACE_TRACE ("ACE_Tokens::name"); + return this->token_name_; +} + +#if 0 +ACE_INLINE ACE_Token_Proxy * +ACE_Tokens::current_owner (void) +{ + ACE_TRACE ("ACE_Tokens::current_owner"); + // ACE_GUARD_RETURN ??? + + if (this->owner () == 0) + return 0; + else + return this->owner ()->proxy (); +} +#endif /* 0 */ + +// ************************************************************ + +ACE_INLINE int +ACE_TPQ_Entry::nesting_level (void) const +{ + ACE_TRACE ("ACE_TPQ_Entry::nesting_level"); + return this->nesting_level_; +} + +ACE_INLINE void +ACE_TPQ_Entry::nesting_level (int delta) +{ + ACE_TRACE ("ACE_TPQ_Entry::nesting_level"); + this->nesting_level_ += delta; +} + +ACE_INLINE ACE_TPQ_Entry::PTVF +ACE_TPQ_Entry::sleep_hook (void) const +{ + ACE_TRACE ("ACE_TPQ_Entry::sleep_hook"); + return this->sleep_hook_; +} + +ACE_INLINE void +ACE_TPQ_Entry::sleep_hook (void (*sh)(void *)) +{ + ACE_TRACE ("ACE_TPQ_Entry::sleep_hook"); + this->sleep_hook_ = sh; +} + +ACE_INLINE void +ACE_TPQ_Entry::call_sleep_hook (void) +{ + ACE_TRACE ("ACE_TPQ_Entry::call_sleep_hook"); + + // if a function has been registered, call it. + if (this->sleep_hook () != 0) + this->sleep_hook () ((void *) this->proxy ()); + else + // otherwise, call back the sleep_hook method + this->proxy ()->sleep_hook (); +} + +ACE_INLINE int +ACE_TPQ_Entry::equal_client_id (const ACE_TCHAR *id) +{ + ACE_TRACE ("ACE_TPQ_Entry::equal_client_id"); + return (ACE_OS::strcmp (this->client_id (), id) == 0); +} + +// ************************************************************ +// ************************************************************ +// ************************************************************ + +ACE_INLINE +ACE_Local_Mutex::ACE_Local_Mutex (const ACE_TCHAR *token_name, + int ignore_deadlock, + int debug) +{ + ACE_TRACE ("ACE_Local_Mutex::ACE_Local_Mutex"); + this->open (token_name, ignore_deadlock, debug); +} + +ACE_INLINE void +ACE_Token_Name::name (const ACE_TCHAR *new_name) +{ + ACE_TRACE ("ACE_Token_Name::name"); + + if (new_name == 0) + new_name = ACE_TEXT ("no name"); + + size_t n = ACE_OS::strlen (new_name) + 1; + + if (n >= ACE_MAXTOKENNAMELEN) + n = ACE_MAXTOKENNAMELEN - 1; + + ACE_OS::strsncpy (this->token_name_, (ACE_TCHAR *) new_name, n); +} + +ACE_INLINE const ACE_TCHAR* +ACE_Token_Name::name (void) const +{ + ACE_TRACE ("ACE_Token_Name::name"); + return this->token_name_; +} + +// ************************************************************ + +ACE_INLINE +ACE_Local_RLock::ACE_Local_RLock (const ACE_TCHAR *token_name, + int ignore_deadlock, + int debug) +{ + ACE_TRACE ("ACE_Local_RLock::ACE_Local_RLock"); + this->open (token_name, ignore_deadlock, debug); +} + +// ************************************************************ + +ACE_INLINE +ACE_Local_WLock::ACE_Local_WLock (const ACE_TCHAR *token_name, + int ignore_deadlock, + int debug) +{ + ACE_TRACE ("ACE_Local_WLock::ACE_Local_WLock"); + this->open (token_name, ignore_deadlock, debug); +} + +// ************************************************************ + + +ACE_INLINE void +ACE_Token_Name::operator= (const ACE_Token_Name &rhs) +{ + ACE_TRACE ("ACE_Token_Name::operator="); + if (&rhs == this) + return; + else + this->name (rhs.name ()); +} + +ACE_INLINE bool +ACE_Token_Name::operator== (const ACE_Token_Name &rhs) const +{ + ACE_TRACE ("ACE_Token_Name::operator=="); + + // the name and type must be the same + return (ACE_OS::strcmp (this->token_name_, rhs.name ()) == 0); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_TOKENS_LIBRARY */ diff --git a/ACE/ace/Lock.cpp b/ACE/ace/Lock.cpp new file mode 100644 index 00000000000..dca934b8067 --- /dev/null +++ b/ACE/ace/Lock.cpp @@ -0,0 +1,88 @@ +// $Id$ + +#include "ace/Lock.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Lock.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, Lock, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Lock::~ACE_Lock (void) +{ +} + +ACE_Adaptive_Lock::ACE_Adaptive_Lock (void) + : lock_ (0) +{ +} + +ACE_Adaptive_Lock::~ACE_Adaptive_Lock (void) +{ +} + +int +ACE_Adaptive_Lock::remove (void) +{ + return this->lock_->remove (); +} + +int +ACE_Adaptive_Lock::acquire (void) +{ + return this->lock_->acquire (); +} + +int +ACE_Adaptive_Lock::tryacquire (void) +{ + return this->lock_->tryacquire (); +} + +int +ACE_Adaptive_Lock::release (void) +{ + return this->lock_->release (); +} + +int +ACE_Adaptive_Lock::acquire_read (void) +{ + return this->lock_->acquire_read (); +} + +int +ACE_Adaptive_Lock::acquire_write (void) +{ + return this->lock_->acquire_write (); +} + +int +ACE_Adaptive_Lock::tryacquire_read (void) +{ + return this->lock_->tryacquire_read (); +} + +int +ACE_Adaptive_Lock::tryacquire_write (void) +{ + return this->lock_->tryacquire_write (); +} + +int +ACE_Adaptive_Lock::tryacquire_write_upgrade (void) +{ + return this->lock_->tryacquire_write_upgrade (); +} + +void +ACE_Adaptive_Lock::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + // return this->lock_->dump (); +#endif /* ACE_HAS_DUMP */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Lock.h b/ACE/ace/Lock.h new file mode 100644 index 00000000000..2b95c1962da --- /dev/null +++ b/ACE/ace/Lock.h @@ -0,0 +1,161 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file Lock.h + * + * $Id$ + * + * Moved from Synch.h. + * + * @author Douglas C. Schmidt + */ +//========================================================================== + +#ifndef ACE_LOCK_H +#define ACE_LOCK_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Lock + * + * @brief This is the abstract base class that contains the uniform + * locking API that is supported by all the ACE synchronization + * mechanisms. + * + * This class is typically used in conjunction with the + * ACE_Lock_Adapter in order to provide a polymorphic + * interface to the ACE synchronization mechanisms (e.g., + * ACE_Mutex, ACE_Semaphore, ACE_RW_Mutex, etc). Note that + * the reason that all of ACE doesn't use polymorphic locks is + * that (1) they add ~20% extra overhead for virtual function + * calls and (2) objects with virtual functions can't be placed + * into shared memory. + */ +class ACE_Export ACE_Lock +{ +public: + /// CE needs a default ctor here. + ACE_Lock (void); + + /// Noop virtual destructor + virtual ~ACE_Lock (void); + + /** + * Explicitly destroy the lock. Note that only one thread should + * call this method since it doesn't protect against race + * conditions. + */ + virtual int remove (void) = 0; + + /// Block the thread until the lock is acquired. Returns -1 on + /// failure. + virtual int acquire (void) = 0; + + /** + * Conditionally acquire the lock (i.e., won't block). Returns -1 + * on failure. If we "failed" because someone else already had the + * lock, @c errno is set to @c EBUSY. + */ + virtual int tryacquire (void) = 0; + + /// Release the lock. Returns -1 on failure. + virtual int release (void) = 0; + + /** + * Block until the thread acquires a read lock. If the locking + * mechanism doesn't support read locks then this just calls + * . Returns -1 on failure. + */ + virtual int acquire_read (void) = 0; + + /** + * Block until the thread acquires a write lock. If the locking + * mechanism doesn't support read locks then this just calls + * . Returns -1 on failure. + */ + virtual int acquire_write (void) = 0; + + /** + * Conditionally acquire a read lock. If the locking mechanism + * doesn't support read locks then this just calls . + * Returns -1 on failure. If we "failed" because someone else + * already had the lock, @c errno is set to @c EBUSY. + */ + virtual int tryacquire_read (void) = 0; + + /** + * Conditionally acquire a write lock. If the locking mechanism + * doesn't support read locks then this just calls . + * Returns -1 on failure. If we "failed" because someone else + * already had the lock, @c errno is set to @c EBUSY. + */ + virtual int tryacquire_write (void) = 0; + + /** + * Conditionally try to upgrade a lock held for read to a write lock. + * If the locking mechanism doesn't support read locks then this just + * calls . Returns 0 on success, -1 on failure. + */ + virtual int tryacquire_write_upgrade (void) = 0; +}; + +/** + * @class ACE_Adaptive_Lock + * + * @brief An adaptive general locking class that defers the decision of + * lock type to run time. + * + * This class, as ACE_Lock, provide a set of general locking APIs. + * However, it defers our decision of what kind of lock to use + * to the run time and delegates all locking operations to the actual + * lock. Users must define a constructor in their subclass to + * initialize . + */ +class ACE_Export ACE_Adaptive_Lock : public ACE_Lock +{ +public: + /// You must also override the destructor function to match with how + /// you construct the underneath . + virtual ~ACE_Adaptive_Lock (void); + + // = Lock/unlock operations. + + virtual int remove (void); + virtual int acquire (void); + virtual int tryacquire (void); + virtual int release (void); + virtual int acquire_read (void); + virtual int acquire_write (void); + virtual int tryacquire_read (void); + virtual int tryacquire_write (void); + virtual int tryacquire_write_upgrade (void); + void dump (void) const; + +protected: + /** + * Create and initialize create the actual lcok used in the class. + * The default constructor simply set the to 0 (null). You + * must overwrite this method for this class to work. + */ + ACE_Adaptive_Lock (void); + + ACE_Lock *lock_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Lock.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_LOCK_H */ diff --git a/ACE/ace/Lock.inl b/ACE/ace/Lock.inl new file mode 100644 index 00000000000..7e4842a0e33 --- /dev/null +++ b/ACE/ace/Lock.inl @@ -0,0 +1,12 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +ACE_Lock::ACE_Lock (void) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Lock_Adapter_T.cpp b/ACE/ace/Lock_Adapter_T.cpp new file mode 100644 index 00000000000..f26a79fdd4c --- /dev/null +++ b/ACE/ace/Lock_Adapter_T.cpp @@ -0,0 +1,117 @@ +// $Id$ + +#ifndef ACE_LOCK_ADAPTER_T_CPP +#define ACE_LOCK_ADAPTER_T_CPP + +#include "ace/Lock_Adapter_T.h" +#include "ace/OS_Memory.h" // for ACE_NEW + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if !defined (__ACE_INLINE__) +#include "ace/Lock_Adapter_T.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// This constructor isn't inlined, because SunPRO C++ 4.2 + patch +// 104631-07 has trouble compiling TAO with it inline. +template +ACE_Lock_Adapter::ACE_Lock_Adapter (void) + : lock_ (0), + delete_lock_ (true) +{ + ACE_NEW (this->lock_, + ACE_LOCKING_MECHANISM); +} + +template +ACE_Lock_Adapter::~ACE_Lock_Adapter (void) +{ + if (this->delete_lock_) + delete this->lock_; +} + +// Explicitly destroy the lock. +template int +ACE_Lock_Adapter::remove (void) +{ + return this->lock_->remove (); +} + +// Block the thread until the lock is acquired. +template int +ACE_Lock_Adapter::acquire (void) +{ + return this->lock_->acquire (); +} + +// Conditionally acquire the lock (i.e., won't block). + +template int +ACE_Lock_Adapter::tryacquire (void) +{ + return this->lock_->tryacquire (); +} + +// Release the lock. + +template int +ACE_Lock_Adapter::release (void) +{ + return this->lock_->release (); +} + +// Block until the thread acquires a read lock. If the locking +// mechanism doesn't support read locks then this just calls +// . + +template int +ACE_Lock_Adapter::acquire_read (void) +{ + return this->lock_->acquire_read (); +} + +// Block until the thread acquires a write lock. If the locking +// mechanism doesn't support read locks then this just calls +// . + +template int +ACE_Lock_Adapter::acquire_write (void) +{ + return this->lock_->acquire_write (); +} + +// Conditionally acquire a read lock. If the locking mechanism +// doesn't support read locks then this just calls . + +template int +ACE_Lock_Adapter::tryacquire_read (void) +{ + return this->lock_->tryacquire_read (); +} + +// Conditionally acquire a write lock. If the locking mechanism +// doesn't support write locks then this just calls . + +template int +ACE_Lock_Adapter::tryacquire_write (void) +{ + return this->lock_->tryacquire_write (); +} + +// Conditionally try to upgrade a lock held for read to a write lock. +// If the locking mechanism doesn't support read locks then this just +// calls . Returns 0 on success, -1 on failure. + +template int +ACE_Lock_Adapter::tryacquire_write_upgrade (void) +{ + return this->lock_->tryacquire_write_upgrade (); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_LOCK_ADAPTER_T_CPP */ diff --git a/ACE/ace/Lock_Adapter_T.h b/ACE/ace/Lock_Adapter_T.h new file mode 100644 index 00000000000..117684a1a2a --- /dev/null +++ b/ACE/ace/Lock_Adapter_T.h @@ -0,0 +1,123 @@ +// -*- C++ -*- + +//========================================================================== +/** + * @file Lock_Adapter_T.h + * + * $Id$ + * + * Moved from Synch.h. + * + * @author Douglas C. Schmidt + */ +//========================================================================== + +#ifndef ACE_LOCK_ADAPTER_T_H +#define ACE_LOCK_ADAPTER_T_H +#include /**/ "ace/pre.h" + +#include "ace/Lock.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Lock_Adapter + * + * @brief This is an adapter that allows applications to transparently + * combine the abstract base class (which contains + * pure virtual methods) with any of the other concrete ACE + * synchronization classes (e.g., ACE_Mutex, ACE_Semaphore, + * ACE_RW_Mutex, etc.). + * + * This class uses a form of the Adapter pattern. + */ +template +class ACE_Lock_Adapter : public ACE_Lock +{ +public: + typedef ACE_LOCKING_MECHANISM ACE_LOCK; + + // = Initialization/Finalization methods. + + /// Constructor. All locking requests will be forwarded to . + ACE_Lock_Adapter (ACE_LOCKING_MECHANISM &lock); + + /// Constructor. Since no lock is provided by the user, one will be + /// created internally. + ACE_Lock_Adapter (void); + + /// Destructor. If was not passed in by the user, it will be + /// deleted. + virtual ~ACE_Lock_Adapter (void); + + // = Lock accessors. + /// Block the thread until the lock is acquired. + virtual int acquire (void); + + /// Conditionally acquire the lock (i.e., won't block). + virtual int tryacquire (void); + + /// Release the lock. + virtual int release (void); + + /** + * Block until the thread acquires a read lock. If the locking + * mechanism doesn't support read locks then this just calls + * . + */ + virtual int acquire_read (void); + + /** + * Block until the thread acquires a write lock. If the locking + * mechanism doesn't support read locks then this just calls + * . + */ + virtual int acquire_write (void); + + /// Conditionally acquire a read lock. If the locking mechanism + /// doesn't support read locks then this just calls . + virtual int tryacquire_read (void); + + /// Conditionally acquire a write lock. If the locking mechanism + /// doesn't support read locks then this just calls . + virtual int tryacquire_write (void); + + /** + * Conditionally try to upgrade a lock held for read to a write lock. + * If the locking mechanism doesn't support read locks then this just + * calls . Returns 0 on success, -1 on failure. + */ + virtual int tryacquire_write_upgrade (void); + + /// Explicitly destroy the lock. + virtual int remove (void); + +private: + /// The concrete locking mechanism that all the methods delegate to. + ACE_LOCKING_MECHANISM *lock_; + + /// This flag keep track of whether we are responsible for deleting + /// the lock + bool delete_lock_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "ace/Lock_Adapter_T.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "ace/Lock_Adapter_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Lock_Adapter_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include /**/ "ace/post.h" +#endif /* ACE_LOCK_ADAPTER_T_H */ diff --git a/ACE/ace/Lock_Adapter_T.inl b/ACE/ace/Lock_Adapter_T.inl new file mode 100644 index 00000000000..bc7899bffb3 --- /dev/null +++ b/ACE/ace/Lock_Adapter_T.inl @@ -0,0 +1,16 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +template +ACE_INLINE +ACE_Lock_Adapter::ACE_Lock_Adapter ( + ACE_LOCKING_MECHANISM &lock) + : lock_ (&lock), + delete_lock_ (false) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Log_Msg.cpp b/ACE/ace/Log_Msg.cpp new file mode 100644 index 00000000000..0f2bf798c25 --- /dev/null +++ b/ACE/ace/Log_Msg.cpp @@ -0,0 +1,2510 @@ +// $Id$ + +// We need this to get the status of ACE_NTRACE... +#include "ace/config-all.h" + +// Turn off tracing for the duration of this file. +#if defined (ACE_NTRACE) +# undef ACE_NTRACE +#endif /* ACE_NTRACE */ +#define ACE_NTRACE 1 + +#include "ace/ACE.h" +#include "ace/Thread_Manager.h" +#include "ace/Guard_T.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_errno.h" +#include "ace/OS_NS_sys_time.h" +#include "ace/OS_NS_wchar.h" +#include "ace/OS_NS_signal.h" + +#if !defined (ACE_MT_SAFE) || (ACE_MT_SAFE != 0) +# include "ace/Object_Manager_Base.h" +#endif /* ! ACE_MT_SAFE */ + +#if !defined (ACE_LACKS_IOSTREAM_TOTALLY) +// FUZZ: disable check_for_streams_include +# include "ace/streams.h" +#endif /* ! ACE_LACKS_IOSTREAM_TOTALLY */ + +#if defined (ACE_HAS_TRACE) +# include "ace/Trace.h" +#endif /* ACE_HAS_TRACE */ + +#include "ace/Log_Msg.h" +#include "ace/Log_Msg_Callback.h" +#include "ace/Log_Msg_IPC.h" +#include "ace/Log_Msg_NT_Event_Log.h" +#include "ace/Log_Msg_UNIX_Syslog.h" +#include "ace/Log_Record.h" +#include "ace/Recursive_Thread_Mutex.h" + +#if !defined (__ACE_INLINE__) +#include "ace/Log_Msg.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(ace, Log_Msg, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_ALLOC_HOOK_DEFINE(ACE_Log_Msg) + +// only used here... dhinton +#if defined (ACE_HAS_SYS_SIGLIST) +# if !defined (_sys_siglist) +# define _sys_siglist sys_siglist +# endif /* !defined (sys_siglist) */ +//extern char **_sys_siglist; +#endif /* ACE_HAS_SYS_SIGLIST */ + +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) + int ACE_Log_Msg::key_created_ = 0; +# if defined (ACE_HAS_THREAD_SPECIFIC_STORAGE) || \ + defined (ACE_HAS_TSS_EMULATION) + +#if defined (ACE_MVS) + static ACE_thread_key_t the_log_msg_tss_key = + #if !defined(_LP64) + { '\0','\0','\0','\0' }; + #else + { '\0','\0','\0','\0','\0','\0','\0','\0' }; + #endif +#else + static ACE_thread_key_t the_log_msg_tss_key = 0; +#endif /* defined (ACE_MVS) */ + +ACE_thread_key_t *log_msg_tss_key (void) +{ + return &the_log_msg_tss_key; +} + +# endif /* ACE_HAS_THREAD_SPECIFIC_STORAGE || ACE_HAS_TSS_EMULATION */ +#else +static ACE_Cleanup_Adapter* log_msg_cleanup = 0; +class ACE_Msg_Log_Cleanup: public ACE_Cleanup_Adapter +{ +public: + virtual ~ACE_Msg_Log_Cleanup (void) { + if (this == log_msg_cleanup) + log_msg_cleanup = 0; + } +}; +#endif /* ACE_MT_SAFE */ + +#if defined (ACE_WIN32) && !defined (ACE_HAS_WINCE) && !defined (ACE_HAS_PHARLAP) +# define ACE_LOG_MSG_SYSLOG_BACKEND ACE_Log_Msg_NT_Event_Log +#elif !defined (ACE_LACKS_UNIX_SYSLOG) && !defined (ACE_HAS_WINCE) +# define ACE_LOG_MSG_SYSLOG_BACKEND ACE_Log_Msg_UNIX_Syslog +#else +# define ACE_LOG_MSG_SYSLOG_BACKEND ACE_Log_Msg_IPC +#endif /* ! ACE_WIN32 */ + +// When doing ACE_OS::s[n]printf() calls in log(), we need to update +// the space remaining in the output buffer based on what's returned from +// the output function. If we could rely on more modern compilers, this +// would be in an unnamed namespace, but it's a macro instead. +// count is a size_t, len is an int and assumed to be non-negative. +#define ACE_UPDATE_COUNT(COUNT, LEN) \ + do { if (static_cast (LEN) > COUNT) COUNT = 0; \ + else COUNT -= static_cast (LEN); \ + } while (0) + +/// Instance count for Log_Msg - used to know when dynamically +/// allocated storage (program name and host name) can be safely +/// deleted. +int ACE_Log_Msg::instance_count_ = 0; + +/** + * @class ACE_Log_Msg_Manager + * + * @brief Synchronize output operations. + * + * Provides global point of contact for all ACE_Log_Msg instances + * in a process. + * + * For internal use by ACE, only! + */ +class ACE_Log_Msg_Manager +{ +public: + static ACE_Log_Msg_Backend *log_backend_; + static ACE_Log_Msg_Backend *custom_backend_; + + static u_long log_backend_flags_; + + static int init_backend (const u_long *flags = 0); + +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) + //FUZZ: disable check_for_lack_ACE_OS + static void close (void); + //FUZZ: enable check_for_lack_ACE_OS + + static ACE_Recursive_Thread_Mutex *get_lock (void); + +private: + static ACE_Recursive_Thread_Mutex *lock_; +#endif /* ! ACE_MT_SAFE */ +}; + +ACE_Log_Msg_Backend *ACE_Log_Msg_Manager::log_backend_ = 0; +ACE_Log_Msg_Backend *ACE_Log_Msg_Manager::custom_backend_ = 0; + +u_long ACE_Log_Msg_Manager::log_backend_flags_ = 0; + +int ACE_Log_Msg_Manager::init_backend (const u_long *flags) +{ + // If flags have been supplied, and they are different from the flags + // we had last time, then we may have to re-create the backend as a + // different type. + if (flags) + { + // Sanity check for custom backend. + if (ACE_BIT_ENABLED (*flags, ACE_Log_Msg::CUSTOM) && + ACE_Log_Msg_Manager::custom_backend_ == 0) + { + return -1; + } + + if ((ACE_BIT_ENABLED (*flags, ACE_Log_Msg::SYSLOG) + && ACE_BIT_DISABLED (ACE_Log_Msg_Manager::log_backend_flags_, ACE_Log_Msg::SYSLOG)) + || (ACE_BIT_DISABLED (*flags, ACE_Log_Msg::SYSLOG) + && ACE_BIT_ENABLED (ACE_Log_Msg_Manager::log_backend_flags_, ACE_Log_Msg::SYSLOG))) + { + delete ACE_Log_Msg_Manager::log_backend_; + ACE_Log_Msg_Manager::log_backend_ = 0; + } + + ACE_Log_Msg_Manager::log_backend_flags_ = *flags; + } + + if (ACE_Log_Msg_Manager::log_backend_ == 0) + { + ACE_NO_HEAP_CHECK; + +#if (defined (WIN32) || !defined (ACE_LACKS_UNIX_SYSLOG)) && !defined (ACE_HAS_WINCE) && !defined (ACE_HAS_PHARLAP) + // Allocate the ACE_Log_Msg_Backend instance. + if (ACE_BIT_ENABLED (ACE_Log_Msg_Manager::log_backend_flags_, ACE_Log_Msg::SYSLOG)) + ACE_NEW_RETURN (ACE_Log_Msg_Manager::log_backend_, + ACE_LOG_MSG_SYSLOG_BACKEND, + -1); + else +#endif /* defined (WIN32) && !defined (ACE_HAS_WINCE) && !defined (ACE_HAS_PHARLAP) */ + ACE_NEW_RETURN (ACE_Log_Msg_Manager::log_backend_, + ACE_Log_Msg_IPC, + -1); + } + + return 0; +} + +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) +ACE_Recursive_Thread_Mutex *ACE_Log_Msg_Manager::lock_ = 0; + +ACE_Recursive_Thread_Mutex * +ACE_Log_Msg_Manager::get_lock (void) +{ + // This function is called by the first thread to create an ACE_Log_Msg + // instance. It makes the call while holding a mutex, so we don't have + // to grab another one here. + + if (ACE_Log_Msg_Manager::lock_ == 0) + { + ACE_NO_HEAP_CHECK; + + ACE_NEW_RETURN (ACE_Log_Msg_Manager::lock_, + ACE_Recursive_Thread_Mutex, + 0); + } + + if (init_backend () == -1) + return 0; + + return ACE_Log_Msg_Manager::lock_; +} + +void +ACE_Log_Msg_Manager::close (void) +{ +#if defined (ACE_HAS_STHREADS) && ! defined (ACE_HAS_TSS_EMULATION) && ! defined (ACE_HAS_EXCEPTIONS) + // Delete the (main thread's) Log_Msg instance. I think that this + // is only "necessary" if exception handling is not enabled. + // Without exception handling, main thread TSS destructors don't + // seem to be called. It's not really necessary anyways, because + // this one leak is harmless on Solaris. + delete ACE_Log_Msg::instance (); +#endif /* ACE_HAS_STHREADS && ! TSS_EMULATION && ! ACE_HAS_EXCEPTIONS */ + + // Ugly, ugly, but don't know a better way. + delete ACE_Log_Msg_Manager::lock_; + ACE_Log_Msg_Manager::lock_ = 0; + + delete ACE_Log_Msg_Manager::log_backend_; + ACE_Log_Msg_Manager::log_backend_ = 0; + + // we are never responsible for custom backend + ACE_Log_Msg_Manager::custom_backend_ = 0; +} + +# if defined (ACE_HAS_THREAD_SPECIFIC_STORAGE) || \ + defined (ACE_HAS_TSS_EMULATION) +/* static */ +# if defined (ACE_HAS_THR_C_DEST) +# define LOCAL_EXTERN_PREFIX extern "C" +# else +# define LOCAL_EXTERN_PREFIX +# endif /* ACE_HAS_THR_C_DEST */ +LOCAL_EXTERN_PREFIX +void +ACE_TSS_CLEANUP_NAME (void *ptr) +{ + // Delegate to thr_desc if this not has terminated + ACE_Log_Msg* log_msg = (ACE_Log_Msg*) ptr; + if (log_msg->thr_desc()!=0) + log_msg->thr_desc()->log_msg_cleanup(log_msg); + else + delete (ACE_Log_Msg *) ptr; +} +# endif /* ACE_HAS_THREAD_SPECIFIC_STORAGE || ACE_HAS_TSS_EMULATION */ +#endif /* ! ACE_MT_SAFE */ + +/* static */ +int +ACE_Log_Msg::exists (void) +{ +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) +# if defined (ACE_HAS_THREAD_SPECIFIC_STORAGE) || \ + defined (ACE_HAS_TSS_EMULATION) + void *tss_log_msg = 0; // The actual type is ACE_Log_Msg*, but we need this + // void to keep G++ from complaining. + + // Get the tss_log_msg from thread-specific storage. + return key_created_ + && ACE_Thread::getspecific (*(log_msg_tss_key ()), &tss_log_msg) != -1 + && tss_log_msg != 0; +# else +# error "Platform must support thread-specific storage if threads are used." +# endif /* ACE_HAS_THREAD_SPECIFIC_STORAGE || ACE_HAS_TSS_EMULATION */ +#else /* ! ACE_MT_SAFE */ + return 1; +#endif /* ! ACE_MT_SAFE */ +} + +ACE_Log_Msg * +ACE_Log_Msg::instance (void) +{ +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) +# if defined (ACE_HAS_THREAD_SPECIFIC_STORAGE) || \ + defined (ACE_HAS_TSS_EMULATION) + // TSS Singleton implementation. + + if (key_created_ == 0) + { + ACE_thread_mutex_t *lock = + reinterpret_cast ( + ACE_OS_Object_Manager::preallocated_object + [ACE_OS_Object_Manager::ACE_LOG_MSG_INSTANCE_LOCK]); + + if (1 == ACE_OS_Object_Manager::starting_up()) + //This function is called before ACE_OS_Object_Manager is + //initialized. So the lock might not be valid. Assume it's + //single threaded and so don't need the lock. + ; + else + ACE_OS::thread_mutex_lock (lock); + + if (key_created_ == 0) + { + // Allocate the Singleton lock. + ACE_Log_Msg_Manager::get_lock (); + + { + ACE_NO_HEAP_CHECK; + if (ACE_Thread::keycreate (log_msg_tss_key (), + &ACE_TSS_CLEANUP_NAME) != 0) + { + if (1 == ACE_OS_Object_Manager::starting_up()) + //This function is called before ACE_OS_Object_Manager is + //initialized. So the lock might not be valid. Assume it's + //single threaded and so don't need the lock. + ; + else + ACE_OS::thread_mutex_unlock (lock); + return 0; // Major problems, this should *never* happen! + } + } + + key_created_ = 1; + } + + if (1 == ACE_OS_Object_Manager::starting_up()) + //This function is called before ACE_OS_Object_Manager is + //initialized. So the lock might not be valid. Assume it's + //single threaded and so don't need the lock. + ; + else + ACE_OS::thread_mutex_unlock (lock); + } + + ACE_Log_Msg *tss_log_msg = 0; + void *temp = 0; + + // Get the tss_log_msg from thread-specific storage. + if (ACE_Thread::getspecific (*(log_msg_tss_key ()), &temp) == -1) + return 0; // This should not happen! + + tss_log_msg = static_cast (temp); + + // Check to see if this is the first time in for this thread. + if (tss_log_msg == 0) + { + // Allocate memory off the heap and store it in a pointer in + // thread-specific storage (on the stack...). Stop heap + // checking, the memory will always be freed by the thread + // rundown because of the TSS callback set up when the key was + // created. This prevents from getting these blocks reported as + // memory leaks. + { + ACE_NO_HEAP_CHECK; + + ACE_NEW_RETURN (tss_log_msg, + ACE_Log_Msg, + 0); + // Store the dynamically allocated pointer in thread-specific + // storage. It gets deleted via the ACE_TSS_cleanup function + // when the thread terminates. + + if (ACE_Thread::setspecific (*(log_msg_tss_key()), + reinterpret_cast (tss_log_msg)) + != 0) + return 0; // Major problems, this should *never* happen! + } + } + + return tss_log_msg; +# else +# error "Platform must support thread-specific storage if threads are used." +# endif /* ACE_HAS_THREAD_SPECIFIC_STORAGE || ACE_HAS_TSS_EMULATION */ +#else /* ! ACE_MT_SAFE */ + // We don't have threads, we cannot call + // ACE_Log_Msg_Manager::get_lock () to initialize the logger + // callback, so instead we do it here. + if (ACE_Log_Msg_Manager::init_backend () == -1) + return 0; + + // Singleton implementation. + + if (log_msg_cleanup == 0) + { + ACE_NEW_RETURN (log_msg_cleanup, ACE_Msg_Log_Cleanup, 0); + // Register the instance for destruction at program termination. + ACE_Object_Manager::at_exit (log_msg_cleanup); + } + + return &log_msg_cleanup->object (); +#endif /* ! ACE_MT_SAFE */ +} + +// Not inlined to help prevent having to include OS.h just to +// get ACE_DEBUG, et al, macros. +int +ACE_Log_Msg::last_error_adapter (void) +{ + return ACE_OS::last_error (); +} + +// Sets the flag in the default priority mask used to initialize +// ACE_Log_Msg instances, as well as the current per-thread instance. + +void +ACE_Log_Msg::enable_debug_messages (ACE_Log_Priority priority) +{ + ACE_SET_BITS (ACE_Log_Msg::default_priority_mask_, priority); + ACE_Log_Msg *i = ACE_Log_Msg::instance (); + i->priority_mask (i->priority_mask () | priority); +} + +// Clears the flag in the default priority mask used to initialize +// ACE_Log_Msg instances, as well as the current per-thread instance. + +void +ACE_Log_Msg::disable_debug_messages (ACE_Log_Priority priority) +{ + ACE_CLR_BITS (ACE_Log_Msg::default_priority_mask_, priority); + ACE_Log_Msg *i = ACE_Log_Msg::instance (); + i->priority_mask (i->priority_mask () & ~priority); +} + +const ACE_TCHAR * +ACE_Log_Msg::program_name (void) +{ + return ACE_Log_Msg::program_name_; +} + +/// Name of the local host. +const ACE_TCHAR *ACE_Log_Msg::local_host_ = 0; + +/// Records the program name. +const ACE_TCHAR *ACE_Log_Msg::program_name_ = 0; + +/// Default is to use stderr. +u_long ACE_Log_Msg::flags_ = ACE_Log_Msg::STDERR; + +/// Process id of the current process. +pid_t ACE_Log_Msg::pid_ = -2; + +/// Current offset of msg_[]. +ptrdiff_t ACE_Log_Msg::msg_off_ = 0; + +/// Default per-thread priority mask +/// By default, no priorities are enabled. +u_long ACE_Log_Msg::default_priority_mask_ = 0; + +/// Default per-process priority mask +/// By default, all priorities are enabled. +u_long ACE_Log_Msg::process_priority_mask_ = LM_SHUTDOWN + | LM_TRACE + | LM_DEBUG + | LM_INFO + | LM_NOTICE + | LM_WARNING + | LM_STARTUP + | LM_ERROR + | LM_CRITICAL + | LM_ALERT + | LM_EMERGENCY; + +void +ACE_Log_Msg::close (void) +{ + // This call needs to go here to avoid memory leaks. + ACE_MT (ACE_Log_Msg_Manager::close ()); + + // Please note that this will be called by a statement that is + // harded coded into the ACE_Object_Manager's shutdown sequence, in + // its destructor. + +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) && \ + (defined (ACE_HAS_THREAD_SPECIFIC_STORAGE) || \ + defined (ACE_HAS_TSS_EMULATION)) + + if (key_created_ == 1) + { + ACE_thread_mutex_t *lock = + reinterpret_cast ( + ACE_OS_Object_Manager::preallocated_object + [ACE_OS_Object_Manager::ACE_LOG_MSG_INSTANCE_LOCK]); + ACE_OS::thread_mutex_lock (lock); + + if (key_created_ == 1) + { + // The same as the ACE_TSS_Cleanup's own key doesn't get + // detached, the log_msg_tss_key_ won't get detached + // until ACE_TSS_Cleanup::free_all_keys_left, so it will + // be in the ACE_TSS_Cleanup::table_. However, there's + // no resource associated with it, so we don't need to + // keyfree it. The dynamic memory associated with it was + // already deleted by ACE_TSS_Cleanup::exit (), so we + // don't want to access it again. + key_created_ = 0; +#ifdef ACE_HAS_BROKEN_THREAD_KEYFREE + // for some systems, e.g. LynxOS, we need to ensure that + // any registered thread destructor action for this thread + // is disabled. Otherwise in the event of a dynamic library + // unload of libACE, by a program not linked with libACE, + // ACE_TSS_cleanup will be invoked after libACE has been unloaded. + ACE_Log_Msg *tss_log_msg = 0; + void *temp = 0; + + // Get the tss_log_msg from thread-specific storage. + if (ACE_Thread::getspecific (*(log_msg_tss_key ()), &temp) != -1 + && temp) + { + tss_log_msg = static_cast (temp); + // we haven't been cleaned up + ACE_TSS_CLEANUP_NAME(tss_log_msg); + if (ACE_Thread::setspecific(*(log_msg_tss_key()), + reinterpret_cast (0)) != 0) + { + ACE_OS::printf ("ACE_Log_Msg::close failed to ACE_Thread::setspecific to 0\n"); + } + } +#endif /* ACE_HAS_BROKEN_THREAD_KEYFREE */ + } + + ACE_OS::thread_mutex_unlock (lock); + } +#endif /* (ACE_HAS_THREAD_SPECIFIC_STORAGE || ACE_HAS_TSS_EMULATION) && ACE_MT_SAFE */ +} + +void +ACE_Log_Msg::sync_hook (const ACE_TCHAR *prg_name) +{ + ACE_LOG_MSG->sync (prg_name); +} + +ACE_OS_Thread_Descriptor * +ACE_Log_Msg::thr_desc_hook (void) +{ + return ACE_LOG_MSG->thr_desc (); +} + +// Call after a fork to resynchronize the PID and PROGRAM_NAME +// variables. +void +ACE_Log_Msg::sync (const ACE_TCHAR *prog_name) +{ + ACE_TRACE ("ACE_Log_Msg::sync"); + + if (prog_name) + { + // Must free if already allocated!!! + ACE_OS::free ((void *) ACE_Log_Msg::program_name_); + + // Stop heap checking, block will be freed by the destructor when + // the last ACE_Log_Msg instance is deleted. + // Heap checking state will be restored when the block is left. + { + ACE_NO_HEAP_CHECK; + + ACE_Log_Msg::program_name_ = ACE_OS::strdup (prog_name); + } + } + + ACE_Log_Msg::pid_ = ACE_OS::getpid (); + ACE_Log_Msg::msg_off_ = 0; +} + +u_long +ACE_Log_Msg::flags (void) +{ + ACE_TRACE ("ACE_Log_Msg::flags"); + u_long result; + ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, + *ACE_Log_Msg_Manager::get_lock (), 0)); + + result = ACE_Log_Msg::flags_; + return result; +} + +void +ACE_Log_Msg::set_flags (u_long flgs) +{ + ACE_TRACE ("ACE_Log_Msg::set_flags"); + ACE_MT (ACE_GUARD (ACE_Recursive_Thread_Mutex, ace_mon, + *ACE_Log_Msg_Manager::get_lock ())); + + ACE_SET_BITS (ACE_Log_Msg::flags_, flgs); +} + +void +ACE_Log_Msg::clr_flags (u_long flgs) +{ + ACE_TRACE ("ACE_Log_Msg::clr_flags"); + ACE_MT (ACE_GUARD (ACE_Recursive_Thread_Mutex, ace_mon, + *ACE_Log_Msg_Manager::get_lock ())); + + ACE_CLR_BITS (ACE_Log_Msg::flags_, flgs); +} + +int +ACE_Log_Msg::acquire (void) +{ + ACE_TRACE ("ACE_Log_Msg::acquire"); +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) + return ACE_Log_Msg_Manager::get_lock ()->acquire (); +#else /* ! ACE_MT_SAFE */ + return 0; +#endif /* ! ACE_MT_SAFE */ +} + +u_long +ACE_Log_Msg::priority_mask (u_long n_mask, MASK_TYPE mask_type) +{ + u_long o_mask; + + if (mask_type == THREAD) + { + o_mask = this->priority_mask_; + this->priority_mask_ = n_mask; + } + else + { + o_mask = ACE_Log_Msg::process_priority_mask_; + ACE_Log_Msg::process_priority_mask_ = n_mask; + } + + return o_mask; +} + +int +ACE_Log_Msg::release (void) +{ + ACE_TRACE ("ACE_Log_Msg::release"); + +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) + return ACE_Log_Msg_Manager::get_lock ()->release (); +#else /* ! ACE_MT_SAFE */ + return 0; +#endif /* ! ACE_MT_SAFE */ +} + +ACE_Log_Msg::ACE_Log_Msg (void) + : status_ (0), + errnum_ (0), + linenum_ (0), + msg_ (0), + restart_ (1), // Restart by default... + ostream_ (0), + msg_callback_ (0), + trace_depth_ (0), + trace_active_ (false), + tracing_enabled_ (true), // On by default? + delete_ostream_(false), + thr_desc_ (0), + priority_mask_ (default_priority_mask_), + timestamp_ (0) +{ + // ACE_TRACE ("ACE_Log_Msg::ACE_Log_Msg"); + + ACE_MT (ACE_GUARD (ACE_Recursive_Thread_Mutex, ace_mon, + *ACE_Log_Msg_Manager::get_lock ())); + ++instance_count_; + + if (this->instance_count_ == 1) + ACE_Base_Thread_Adapter::set_log_msg_hooks (ACE_Log_Msg::init_hook, + ACE_Log_Msg::inherit_hook, + ACE_Log_Msg::close, + ACE_Log_Msg::sync_hook, + ACE_Log_Msg::thr_desc_hook); + + this->conditional_values_.is_set_ = false; + + char *timestamp = ACE_OS::getenv ("ACE_LOG_TIMESTAMP"); + if (timestamp != 0) + { + // If variable is set or is set to date tag so we print date and time. + if (ACE_OS::strcmp (timestamp, "TIME") == 0) + { + this->timestamp_ = 1; + } + else if (ACE_OS::strcmp (timestamp, "DATE") == 0) + { + this->timestamp_ = 2; + } + } + + ACE_NEW_NORETURN (this->msg_, ACE_TCHAR[ACE_MAXLOGMSGLEN+1]); +} + +ACE_Log_Msg::~ACE_Log_Msg (void) +{ +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) + + int instance_count = 0; + + // Only hold the guard while updating the instance_count_. + // If ACE_Log_Msg_Manager::close () is called, the lock will + // be deleted. + { + ACE_MT (ACE_GUARD (ACE_Recursive_Thread_Mutex, ace_mon, + *ACE_Log_Msg_Manager::get_lock ())); + instance_count = --instance_count_; + } + // Release the guard. + +#else /* ! ACE_MT_SAFE */ + int instance_count = --instance_count_; +#endif /* ! ACE_MT_SAFE */ + + // If this is the last instance then cleanup. Only the last + // thread to destroy its ACE_Log_Msg instance should execute + // this block. + if (instance_count == 0) + { + // Destroy the message queue instance. + if (ACE_Log_Msg_Manager::log_backend_ != 0) + ACE_Log_Msg_Manager::log_backend_->close (); + + // Close down custom backend + if (ACE_Log_Msg_Manager::custom_backend_ != 0) + ACE_Log_Msg_Manager::custom_backend_->close (); + +# if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) +# if defined (ACE_HAS_TSS_EMULATION) + ACE_Log_Msg_Manager::close (); +# endif /* ACE_HAS_TSS_EMULATION */ +# endif /* ACE_MT_SAFE */ + + if (ACE_Log_Msg::program_name_) + { + ACE_OS::free ((void *) ACE_Log_Msg::program_name_); + ACE_Log_Msg::program_name_ = 0; + } + + if (ACE_Log_Msg::local_host_) + { + ACE_OS::free ((void *) ACE_Log_Msg::local_host_); + ACE_Log_Msg::local_host_ = 0; + } + } + + // + // do we need to close and clean up? + // + if (this->delete_ostream_) +#if defined (ACE_LACKS_IOSTREAM_TOTALLY) + { + ACE_OS::fclose (this->ostream_); + } +#else + { + delete ostream_; + ostream_ = 0; + } +#endif + + delete[] this->msg_; +} + +// Open the sender-side of the message queue. + +int +ACE_Log_Msg::open (const ACE_TCHAR *prog_name, + u_long flags, + const ACE_TCHAR *logger_key) +{ + ACE_TRACE ("ACE_Log_Msg::open"); + ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, + *ACE_Log_Msg_Manager::get_lock (), -1)); + + if (prog_name) + { + ACE_OS::free ((void *) ACE_Log_Msg::program_name_); + + // Stop heap checking, block will be freed by the destructor. + { + ACE_NO_HEAP_CHECK; + + ACE_ALLOCATOR_RETURN (ACE_Log_Msg::program_name_, + ACE_OS::strdup (prog_name), + -1); + } + } + else if (ACE_Log_Msg::program_name_ == 0) + { + // Stop heap checking, block will be freed by the destructor. + ACE_NO_HEAP_CHECK; + ACE_ALLOCATOR_RETURN (ACE_Log_Msg::program_name_, + ACE_OS::strdup (ACE_TEXT ("")), + -1); + } + + int status = 0; + + // Be sure that there is a message_queue_, with multiple threads. + ACE_MT (ACE_Log_Msg_Manager::init_backend (&flags)); + + // Always close the current handle before doing anything else. + if (ACE_Log_Msg_Manager::log_backend_ != 0) + ACE_Log_Msg_Manager::log_backend_->reset (); + + if (ACE_Log_Msg_Manager::custom_backend_ != 0) + ACE_Log_Msg_Manager::custom_backend_->reset (); + + // Note that if we fail to open the message queue the default action + // is to use stderr (set via static initialization in the + // Log_Msg.cpp file). + + if (ACE_BIT_ENABLED (flags, ACE_Log_Msg::LOGGER) + || ACE_BIT_ENABLED (flags, ACE_Log_Msg::SYSLOG)) + { + // The SYSLOG backends (both NT and UNIX) can get along fine + // without the logger_key - they will default to prog_name if + // logger key is 0. + if (logger_key == 0 && ACE_BIT_ENABLED (flags, ACE_Log_Msg::LOGGER)) + status = -1; + else + status = ACE_Log_Msg_Manager::log_backend_->open (logger_key); + + if (status == -1) + ACE_SET_BITS (ACE_Log_Msg::flags_, ACE_Log_Msg::STDERR); + else + { + if (ACE_BIT_ENABLED (flags, ACE_Log_Msg::LOGGER)) + ACE_SET_BITS (ACE_Log_Msg::flags_, ACE_Log_Msg::LOGGER); + if (ACE_BIT_ENABLED (flags, ACE_Log_Msg::SYSLOG)) + ACE_SET_BITS (ACE_Log_Msg::flags_, ACE_Log_Msg::SYSLOG); + } + } + else if (ACE_BIT_ENABLED (ACE_Log_Msg::flags_, ACE_Log_Msg::LOGGER) + || ACE_BIT_ENABLED (ACE_Log_Msg::flags_, ACE_Log_Msg::SYSLOG)) + { + // If we are closing down logger, redirect logging to stderr. + ACE_CLR_BITS (ACE_Log_Msg::flags_, ACE_Log_Msg::LOGGER); + ACE_CLR_BITS (ACE_Log_Msg::flags_, ACE_Log_Msg::SYSLOG); + ACE_SET_BITS (ACE_Log_Msg::flags_, ACE_Log_Msg::STDERR); + } + + if (ACE_BIT_ENABLED (flags, ACE_Log_Msg::CUSTOM)) + { + status = + ACE_Log_Msg_Manager::custom_backend_->open (logger_key); + + if (status != -1) + ACE_SET_BITS (ACE_Log_Msg::flags_, ACE_Log_Msg::CUSTOM); + } + + // Remember, ACE_Log_Msg::STDERR bit is on by default... + if (status != -1 + && ACE_BIT_ENABLED (flags, + ACE_Log_Msg::STDERR) == 0) + ACE_CLR_BITS (ACE_Log_Msg::flags_, + ACE_Log_Msg::STDERR); + + // VERBOSE takes precedence over VERBOSE_LITE... + if (ACE_BIT_ENABLED (flags, + ACE_Log_Msg::VERBOSE_LITE)) + ACE_SET_BITS (ACE_Log_Msg::flags_, + ACE_Log_Msg::VERBOSE_LITE); + else if (ACE_BIT_ENABLED (flags, + ACE_Log_Msg::VERBOSE)) + ACE_SET_BITS (ACE_Log_Msg::flags_, + ACE_Log_Msg::VERBOSE); + + if (ACE_BIT_ENABLED (flags, + ACE_Log_Msg::OSTREAM)) + { + ACE_SET_BITS (ACE_Log_Msg::flags_, + ACE_Log_Msg::OSTREAM); + // Only set this to cerr if it hasn't already been set. + if (this->msg_ostream () == 0) + this->msg_ostream (ACE_DEFAULT_LOG_STREAM); + } + + if (ACE_BIT_ENABLED (flags, + ACE_Log_Msg::MSG_CALLBACK)) + ACE_SET_BITS (ACE_Log_Msg::flags_, + ACE_Log_Msg::MSG_CALLBACK); + + if (ACE_BIT_ENABLED (flags, + ACE_Log_Msg::SILENT)) + ACE_SET_BITS (ACE_Log_Msg::flags_, + ACE_Log_Msg::SILENT); + + return status; +} + +/** + * Valid Options (prefixed by '%', as in printf format strings) include: + * 'A': print an ACE_timer_t value + * 'a': exit the program at this point (var-argument is the exit status!) + * 'b': print a ssize_t value + * 'B': print a size_t value + * 'c': print a character + * 'C': print a character string + * 'i', 'd': print a decimal number + * 'I', indent according to nesting depth + * 'e', 'E', 'f', 'F', 'g', 'G': print a double + * 'l', print line number where an error occurred. + * 'M': print the name of the priority of the message. + * 'm': Return the message corresponding to errno value, e.g., as done by + * 'N': print file name where the error occurred. + * 'n': print the name of the program (or "" if not set) + * 'o': print as an octal number + * 'P': format the current process id + * 'p': format the appropriate errno message from sys_errlist, e.g., as done by + * 'Q': print out the uint64 number + * 'q': print out the int64 number + * '@': print a void* pointer (in hexadecimal) + * 'r': call the function pointed to by the corresponding argument + * 'R': print return status + * 'S': format the appropriate _sys_siglist entry corresponding to var-argument. + * 's': format a character string + * 'T': print timestamp in hour:minute:sec:usec format. + * 'D': print timestamp in month/day/year hour:minute:sec:usec format. + * 't': print thread id (1 if single-threaded) + * 'u': print as unsigned int + * 'x': print as a hex number + * 'X': print as a hex number + * 'w': print a wide character + * 'W': print out a wide character string. + * 'z': print an ACE_OS::WChar character + * 'Z': print an ACE_OS::WChar character string + * ':': print a time_t value as an integral number + * '%': format a single percent sign, '%' + */ +ssize_t +ACE_Log_Msg::log (ACE_Log_Priority log_priority, + const ACE_TCHAR *format_str, ...) +{ + ACE_TRACE ("ACE_Log_Msg::log"); + + // Start of variable args section. + va_list argp; + + va_start (argp, format_str); + + ssize_t const result = this->log (format_str, + log_priority, + argp); + va_end (argp); + + return result; +} + +#if defined (ACE_HAS_WCHAR) +/** + * Since this is the ANTI_TCHAR version, we need to convert + * the format string over. + */ +ssize_t +ACE_Log_Msg::log (ACE_Log_Priority log_priority, + const ACE_ANTI_TCHAR *format_str, ...) +{ + ACE_TRACE ("ACE_Log_Msg::log"); + + // Start of variable args section. + va_list argp; + + va_start (argp, format_str); + + ssize_t const result = this->log (ACE_TEXT_ANTI_TO_TCHAR (format_str), + log_priority, + argp); + va_end (argp); + + return result; +} +#endif /* ACE_HAS_WCHAR */ + +ssize_t +ACE_Log_Msg::log (const ACE_TCHAR *format_str, + ACE_Log_Priority log_priority, + va_list argp) +{ + ACE_TRACE ("ACE_Log_Msg::log"); + // External decls. + + typedef void (*PTF)(...); + + // Check if there were any conditional values set. + bool const conditional_values = this->conditional_values_.is_set_; + + // Reset conditional values. + this->conditional_values_.is_set_ = false; + + // Only print the message if hasn't been reset to + // exclude this logging priority. + if (this->log_priority_enabled (log_priority) == 0) + return 0; + + // If conditional values were set and the log priority is correct, + // then the values are actually set. + if (conditional_values) + this->set (this->conditional_values_.file_, + this->conditional_values_.line_, + this->conditional_values_.op_status_, + this->conditional_values_.errnum_, + this->restart (), + this->msg_ostream (), + this->msg_callback ()); + + // Logging is supposed to be a benign activity (i.e., not interfer + // with normal application operations), so don't inadvertently smash + // errno! + ACE_Errno_Guard guard (errno); + + ACE_Log_Record log_record (log_priority, + ACE_OS::gettimeofday (), + this->getpid ()); + + // bp is pointer to where to put next part of logged message. + // bspace is the number of characters remaining in msg_. + ACE_TCHAR *bp = const_cast (this->msg ()); + size_t bspace = ACE_Log_Record::MAXLOGMSGLEN; // Leave room for Nul term. + if (this->msg_off_ <= ACE_Log_Record::MAXLOGMSGLEN) + bspace -= static_cast (this->msg_off_); + + // If this platform has snprintf() capability to prevent overrunning the + // output buffer, use it. To avoid adding a maintenance-hassle compile- + // time couple between here and OS.cpp, don't try to figure this out at + // compile time. Instead, do a quick check now; if we get a -1 return, + // the platform doesn't support the length-limiting capability. + ACE_TCHAR test[2]; + bool can_check = ACE_OS::snprintf (test, 1, ACE_TEXT ("x")) != -1; + + bool abort_prog = false; + int exit_value = 0; + + if (ACE_BIT_ENABLED (ACE_Log_Msg::flags_, ACE_Log_Msg::VERBOSE)) + { + // Prepend the program name onto this message + + if (ACE_Log_Msg::program_name_ != 0) + { + for (const ACE_TCHAR *s = ACE_Log_Msg::program_name_; + bspace > 1 && (*bp = *s) != '\0'; + ++s, --bspace) + bp++; + + *bp++ = '|'; + --bspace; + } + } + + if (timestamp_ > 0) + { + ACE_TCHAR day_and_time[35]; + const ACE_TCHAR *s; + if (timestamp_ == 1) + { + // Print just the time + s = ACE::timestamp (day_and_time, sizeof day_and_time, 1); + } + else + { + // Print time and date + ACE::timestamp (day_and_time, sizeof day_and_time); + s = day_and_time; + } + + for (; bspace > 1 && (*bp = *s) != '\0'; ++s, --bspace) + ++bp; + + *bp++ = '|'; + --bspace; + } + + while (*format_str != '\0' && bspace > 0) + { + // Copy input to output until we encounter a %, however a + // % followed by another % is not a format specification. + + if (*format_str != '%') + { + *bp++ = *format_str++; + --bspace; + } + else if (format_str[1] == '%') // An "escaped" '%' (just print one '%'). + { + *bp++ = *format_str++; // Store first % + ++format_str; // but skip second % + --bspace; + } + else + { + // This is most likely a format specification that ends with + // one of the valid options described previously. To enable full + // use of all sprintf capabilities, save the format specifier + // from the '%' up to the format letter in a new char array. + // This allows the full sprintf capability for padding, field + // widths, alignment, etc. Any width/precision requiring a + // caller-supplied argument is extracted and placed as text + // into the format array. Lastly, we convert the caller-supplied + // format specifier from the ACE_Log_Msg-supported list to the + // equivalent sprintf specifier, and run the new format spec + // through sprintf, adding it to the bp string. + + const ACE_TCHAR *abort_str = ACE_TEXT ("Aborting..."); + const ACE_TCHAR *start_format = format_str; + ACE_TCHAR format[128]; // Converted format string + ACE_TCHAR *fp; // Current format pointer + int wp = 0; // Width/precision extracted from args + bool done = false; + bool skip_nul_locate = false; + int this_len = 0; // How many chars s[n]printf wrote + + fp = format; + *fp++ = *format_str++; // Copy in the % + + // Initialization to satisfy VC6 + int tmp_indent = 0; + // Work through the format string to copy in the format + // from the caller. While it's going across, extract ints + // for '*' width/precision values from the argument list. + // When the real format specifier is located, change it to + // one recognized by sprintf, if needed, and do the sprintf + // call. + + while (!done) + { + done = true; // Unless a conversion spec changes it + + switch (*format_str) + { + // The initial set of cases are the conversion + // specifiers. Copy them in to the format array. + // Note we don't use 'l', a normal conversion spec, + // as a conversion because it is a ACE_Log_Msg format + // specifier. + case '-': + case '+': + case '0': + case ' ': + case '#': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + case 'L': + case 'h': + *fp++ = *format_str; + done = false; + break; + + case '*': + wp = va_arg (argp, int); + ACE_OS::sprintf (fp, ACE_TEXT ("%d"), wp); + fp += ACE_OS::strlen (fp); + done = false; + break; + + case 'A': // ACE_timer_t + { + ACE_OS::strcpy (fp, ACE_TEXT ("f")); + double value = va_arg (argp, double); + if (can_check) + this_len = ACE_OS::snprintf (bp, bspace, format, value); + else + this_len = ACE_OS::sprintf (bp, format, value); + ACE_UPDATE_COUNT (bspace, this_len); + } + break; + + case 'a': // Abort program after handling all of format string. + abort_prog = true; + exit_value = va_arg (argp, int); + ACE_OS::strsncpy (bp, abort_str, bspace); + if (bspace > ACE_OS::strlen (abort_str)) + bspace -= ACE_OS::strlen (abort_str); + else + bspace = 0; + break; + + case 'l': // Source file line number + ACE_OS::strcpy (fp, ACE_TEXT ("d")); + if (can_check) + this_len = ACE_OS::snprintf (bp, + bspace, + format, + this->linenum ()); + else + this_len = ACE_OS::sprintf (bp, format, this->linenum ()); + ACE_UPDATE_COUNT (bspace, this_len); + break; + + case 'N': // Source file name +#if !defined (ACE_WIN32) && defined (ACE_USES_WCHAR) + ACE_OS::strcpy (fp, ACE_TEXT ("ls")); +#else + ACE_OS::strcpy (fp, ACE_TEXT ("s")); +#endif + if (can_check) + this_len = ACE_OS::snprintf (bp, bspace, format, + this->file () ? + ACE_TEXT_CHAR_TO_TCHAR (this->file ()) + : ACE_TEXT ("")); + else + this_len = ACE_OS::sprintf (bp, format, + this->file () ? + ACE_TEXT_CHAR_TO_TCHAR (this->file ()) + : ACE_TEXT ("")); + ACE_UPDATE_COUNT (bspace, this_len); + break; + + case 'n': // Program name +#if !defined (ACE_WIN32) && defined (ACE_USES_WCHAR) + ACE_OS::strcpy (fp, ACE_TEXT ("ls")); +#else /* ACE_WIN32 && ACE_USES_WCHAR */ + ACE_OS::strcpy (fp, ACE_TEXT ("s")); +#endif + if (can_check) + this_len = ACE_OS::snprintf (bp, bspace, format, + ACE_Log_Msg::program_name_ ? + ACE_Log_Msg::program_name_ : + ACE_TEXT ("")); + else + this_len = ACE_OS::sprintf (bp, format, + ACE_Log_Msg::program_name_ ? + ACE_Log_Msg::program_name_ : + ACE_TEXT ("")); + ACE_UPDATE_COUNT (bspace, this_len); + break; + + case 'P': // Process ID +#if defined (ACE_OPENVMS) + // Print the process id in hex on OpenVMS. + ACE_OS::strcpy (fp, ACE_TEXT ("x")); +#else + ACE_OS::strcpy (fp, ACE_TEXT ("d")); +#endif + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, + static_cast (this->getpid ())); + else + this_len = ACE_OS::sprintf + (bp, format, static_cast (this->getpid ())); + ACE_UPDATE_COUNT (bspace, this_len); + break; + + case 'p': // string, ala perror() + { + errno = 0; + char *msg = ACE_OS::strerror (ACE::map_errno (this->errnum ())); + // Windows can try to translate the errnum using + // system calls if strerror() doesn't get anything useful. +#if defined (ACE_WIN32) + if (errno == 0) + { +#endif + +#if !defined (ACE_WIN32) && defined (ACE_USES_WCHAR) + ACE_OS::strcpy (fp, ACE_TEXT ("ls: %ls")); +#else + ACE_OS::strcpy (fp, ACE_TEXT ("s: %s")); +#endif + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, va_arg (argp, ACE_TCHAR *), + ACE_TEXT_CHAR_TO_TCHAR (msg)); + else + this_len = ACE_OS::sprintf + (bp, format, va_arg (argp, ACE_TCHAR *), + ACE_TEXT_CHAR_TO_TCHAR (msg)); +#if defined (ACE_WIN32) + } + else + { + errno = ACE::map_errno (this->errnum ()); + ACE_TCHAR *lpMsgBuf = 0; + + // PharLap can't do FormatMessage, so try for socket + // error. +# if !defined (ACE_HAS_PHARLAP) + ACE_TEXT_FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER + | FORMAT_MESSAGE_MAX_WIDTH_MASK + | FORMAT_MESSAGE_FROM_SYSTEM, + 0, + errno, + MAKELANGID (LANG_NEUTRAL, + SUBLANG_DEFAULT), + // Default language + (ACE_TCHAR *) &lpMsgBuf, + 0, + 0); +# endif /* ACE_HAS_PHARLAP */ + + // If we don't get a valid response from + // , we'll assume this is a + // WinSock error and so we'll try to convert + // it into a string. If this doesn't work it + // returns "unknown error" which is fine for + // our purposes. + if (lpMsgBuf == 0) + { + const ACE_TCHAR *message = + ACE::sock_error (errno); + ACE_OS::strcpy (fp, ACE_TEXT ("s: %s")); + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, + va_arg (argp, const ACE_TCHAR *), + message); + else + this_len = ACE_OS::sprintf + (bp, format, + va_arg (argp, const ACE_TCHAR *), + message); + } + else + { + ACE_OS::strcpy (fp, ACE_TEXT ("s: %s")); + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, + va_arg (argp, ACE_TCHAR *), + lpMsgBuf); + else + this_len = ACE_OS::sprintf + (bp, format, + va_arg (argp, ACE_TCHAR *), + lpMsgBuf); + // Free the buffer. + ::LocalFree (lpMsgBuf); + } + } +#endif /* ACE_WIN32 */ + ACE_UPDATE_COUNT (bspace, this_len); + break; + } + + case 'M': // Print the name of the priority of the message. +#if !defined (ACE_WIN32) && defined (ACE_USES_WCHAR) + ACE_OS::strcpy (fp, ACE_TEXT ("ls")); +#else + ACE_OS::strcpy (fp, ACE_TEXT ("s")); +#endif + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, + ACE_Log_Record::priority_name (log_priority)); + else + this_len = ACE_OS::sprintf + (bp, format, + ACE_Log_Record::priority_name (log_priority)); + ACE_UPDATE_COUNT (bspace, this_len); + break; + + case 'm': // Format the string assocated with the errno value. + { + errno = 0; + char *msg = 0; + msg = ACE_OS::strerror (ACE::map_errno (this->errnum ())); + // Windows can try to translate the errnum using + // system calls if strerror() doesn't get anything useful. +#if defined (ACE_WIN32) + if (errno == 0) + { +#endif + +#if !defined (ACE_WIN32) && defined (ACE_USES_WCHAR) + ACE_OS::strcpy (fp, ACE_TEXT ("ls")); +#else /* ACE_WIN32 && ACE_USES_WCHAR */ + ACE_OS::strcpy (fp, ACE_TEXT ("s")); +#endif + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, ACE_TEXT_CHAR_TO_TCHAR (msg)); + else + this_len = ACE_OS::sprintf + (bp, format, ACE_TEXT_CHAR_TO_TCHAR (msg)); +#if defined (ACE_WIN32) + } + else + { + errno = ACE::map_errno (this->errnum ()); + ACE_TCHAR *lpMsgBuf = 0; + + // PharLap can't do FormatMessage, so try for socket + // error. +# if !defined (ACE_HAS_PHARLAP) + ACE_TEXT_FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER + | FORMAT_MESSAGE_MAX_WIDTH_MASK + | FORMAT_MESSAGE_FROM_SYSTEM, + 0, + errno, + MAKELANGID (LANG_NEUTRAL, + SUBLANG_DEFAULT), + // Default language + (ACE_TCHAR *) &lpMsgBuf, + 0, + 0); +# endif /* ACE_HAS_PHARLAP */ + + // If we don't get a valid response from + // , we'll assume this is a + // WinSock error and so we'll try to convert + // it into a string. If this doesn't work it + // returns "unknown error" which is fine for + // our purposes. + if (lpMsgBuf == 0) + { + const ACE_TCHAR *message = + ACE::sock_error (errno); + ACE_OS::strcpy (fp, ACE_TEXT ("s")); + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, message); + else + this_len = ACE_OS::sprintf (bp, format, message); + } + else + { + ACE_OS::strcpy (fp, ACE_TEXT ("s")); + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, lpMsgBuf); + else + this_len = ACE_OS::sprintf + (bp, format, lpMsgBuf); + // Free the buffer. + ::LocalFree (lpMsgBuf); + } + } +#endif /* ACE_WIN32 */ + ACE_UPDATE_COUNT (bspace, this_len); + break; + } + + case 'R': // Format the return status of the operation. + this->op_status (va_arg (argp, int)); + ACE_OS::strcpy (fp, ACE_TEXT ("d")); + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, this->op_status ()); + else + this_len = ACE_OS::sprintf + (bp, format, this->op_status ()); + ACE_UPDATE_COUNT (bspace, this_len); + break; + + case '{': // Increment the trace_depth, then indent + skip_nul_locate = true; + (void) this->inc (); + break; + + case '}': // indent, then decrement trace_depth + skip_nul_locate = true; + (void) this->dec (); + break; + + case '$': // insert a newline, then indent the next line + // according to %I + *bp++ = '\n'; + --bspace; + /* fallthrough */ + + case 'I': // Indent with nesting_depth*width spaces + // Caller can do %*I to override nesting indent, and + // if %*I was done, wp has the extracted width. +#if defined (ACE_HAS_TRACE) + if (0 == wp) + wp = ACE_Trace::get_nesting_indent (); +#else + if (0 == wp) + wp = 4; +#endif /* ACE_HAS_TRACE */ + wp *= this->trace_depth_; + if (static_cast (wp) > bspace) + wp = static_cast (bspace); + for (tmp_indent = wp; + tmp_indent; + --tmp_indent) + *bp++ = ' '; + + *bp = '\0'; + bspace -= static_cast (wp); + skip_nul_locate = true; + break; + + case 'r': // Run (invoke) this subroutine. + { + ptrdiff_t const osave = ACE_Log_Msg::msg_off_; + + if (ACE_BIT_ENABLED (ACE_Log_Msg::flags_, + ACE_Log_Msg::SILENT) && + bspace > 1) + { + *bp++ = '{'; + --bspace; + } + ACE_Log_Msg::msg_off_ = bp - this->msg_; + + (*va_arg (argp, PTF))(); + + if (ACE_BIT_ENABLED (ACE_Log_Msg::flags_, + ACE_Log_Msg::SILENT) && + bspace > (1 + ACE_OS::strlen (bp))) + { + bspace -= (ACE_OS::strlen (bp) + 1); + bp += ACE_OS::strlen (bp); + *bp++ = '}'; + } + *bp = '\0'; + skip_nul_locate = true; + ACE_Log_Msg::msg_off_ = osave; + break; + } + + case 'S': // format the string for with this signal number. + { + int sig = va_arg (argp, int); +#if defined (ACE_HAS_SYS_SIGLIST) + if (sig >= 0 && sig < ACE_NSIG) + { + ACE_OS::strcpy (fp, ACE_TEXT ("s")); + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, _sys_siglist[sig]); + else + this_len = ACE_OS::sprintf + (bp, format, _sys_siglist[sig]); + } + else + { + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, + ACE_TEXT(" %d"), sig); + else + this_len = ACE_OS::sprintf + (bp, ACE_TEXT (" %d"), sig); + } +#else + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, ACE_TEXT ("signal %d"), sig); + else + this_len = ACE_OS::sprintf + (bp, ACE_TEXT ("signal %d"), sig); +#endif /* ACE_HAS_SYS_SIGLIST */ + ACE_UPDATE_COUNT (bspace, this_len); + break; + } + + case 'D': // Format the timestamp in format: + // Weekday Month day year hour:minute:sec.usec + { + ACE_TCHAR day_and_time[35]; + ACE::timestamp (day_and_time, + sizeof day_and_time); +#if !defined (ACE_WIN32) && defined (ACE_USES_WCHAR) + ACE_OS::strcpy (fp, ACE_TEXT ("ls")); +#else + ACE_OS::strcpy (fp, ACE_TEXT ("s")); +#endif + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, day_and_time); + else + this_len = ACE_OS::sprintf (bp, format, day_and_time); + ACE_UPDATE_COUNT (bspace, this_len); + break; + } + + case 'T': // Format the timestamp in + // hour:minute:sec:usec format. + { + ACE_TCHAR day_and_time[35]; + ACE_OS::strcpy (fp, ACE_TEXT ("s")); + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, + ACE::timestamp (day_and_time, sizeof day_and_time)); + else + this_len = ACE_OS::sprintf + (bp, format, ACE::timestamp (day_and_time, + sizeof day_and_time)); + ACE_UPDATE_COUNT (bspace, this_len); + break; + } + + case 't': // Format thread id. +#if defined (ACE_WIN32) + ACE_OS::strcpy (fp, ACE_TEXT ("u")); + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, + static_cast (ACE_Thread::self ())); + else + this_len = + ACE_OS::sprintf (bp, + format, + static_cast (ACE_Thread::self ())); +#elif defined (DIGITAL_UNIX) + ACE_OS::strcpy (fp, ACE_TEXT ("u")); + { + int id = +# if defined (ACE_HAS_THREADS) + pthread_getselfseq_np (); +# else + ACE_Thread::self (); +# endif /* ACE_HAS_THREADS */ + + if (can_check) + this_len = ACE_OS::snprintf (bp, bspace, format, id); + else + this_len = ACE_OS::sprintf (bp, format, id); + } +#else + ACE_hthread_t t_id; + ACE_Thread::self (t_id); + +# if defined (ACE_MVS) || defined (ACE_TANDEM_T1248_PTHREADS) + // MVS's pthread_t is a struct... yuck. So use the ACE 5.0 + // code for it. + ACE_OS::strcpy (fp, ACE_TEXT ("u")); + if (can_check) + this_len = ACE_OS::snprintf (bp, bspace, format, t_id); + else + this_len = ACE_OS::sprintf (bp, format, t_id); +# else + // Yes, this is an ugly C-style cast, but the correct + // C++ cast is different depending on whether the t_id + // is an integral type or a pointer type. FreeBSD uses + // a pointer type, but doesn't have a _np function to + // get an integral type, like the OSes above. + ACE_OS::strcpy (fp, ACE_TEXT ("lu")); + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, (unsigned long)t_id); + else + this_len = ACE_OS::sprintf + (bp, format, (unsigned long)t_id); +# endif /* ACE_MWS || ACE_TANDEM_T1248_PTHREADS */ + +#endif /* ACE_WIN32 */ + ACE_UPDATE_COUNT (bspace, this_len); + break; + + case 's': // String + { +#if !defined (ACE_WIN32) && defined (ACE_USES_WCHAR) + wchar_t *str = va_arg (argp, wchar_t *); + ACE_OS::strcpy (fp, ACE_TEXT ("ls")); +#else /* ACE_WIN32 && ACE_USES_WCHAR */ + ACE_TCHAR *str = va_arg (argp, ACE_TCHAR *); + ACE_OS::strcpy (fp, ACE_TEXT ("s")); +#endif /* ACE_WIN32 && ACE_USES_WCHAR */ + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, str ? str : ACE_TEXT ("(null)")); + else + this_len = ACE_OS::sprintf + (bp, format, str ? str : ACE_TEXT ("(null)")); + ACE_UPDATE_COUNT (bspace, this_len); + } + break; + + case 'C': // Char string, Unicode for Win32/WCHAR + { + ACE_TCHAR *cstr = va_arg (argp, ACE_TCHAR *); +#if defined (ACE_WIN32) && defined (ACE_USES_WCHAR) + ACE_OS::strcpy (fp, ACE_TEXT ("S")); +#else /* ACE_WIN32 && ACE_USES_WCHAR */ + ACE_OS::strcpy (fp, ACE_TEXT ("s")); +#endif /* ACE_WIN32 && ACE_USES_WCHAR */ + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, cstr ? cstr : ACE_TEXT ("(null)")); + else + this_len = ACE_OS::sprintf + (bp, format, cstr ? cstr : ACE_TEXT ("(null)")); + ACE_UPDATE_COUNT (bspace, this_len); + } + break; + + case 'W': + { +#if defined (ACE_HAS_WCHAR) + wchar_t *wchar_str = va_arg (argp, wchar_t *); +# if defined (HPUX) + ACE_OS::strcpy (fp, ACE_TEXT ("S")); +# elif defined (ACE_WIN32) +# if defined (ACE_USES_WCHAR) + ACE_OS::strcpy (fp, ACE_TEXT ("s")); +# else /* ACE_USES_WCHAR */ + ACE_OS::strcpy (fp, ACE_TEXT ("S")); +# endif /* ACE_USES_WCHAR */ +# else + ACE_OS::strcpy (fp, ACE_TEXT ("ls")); +# endif /* HPUX */ + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, wchar_str ? wchar_str : ACE_TEXT_WIDE("(null)")); + else + this_len = ACE_OS::sprintf + (bp, format, wchar_str ? wchar_str : ACE_TEXT_WIDE("(null)")); +#endif /* ACE_HAS_WCHAR */ + ACE_UPDATE_COUNT (bspace, this_len); + } + break; + + case 'w': // Wide character +#if defined (ACE_WIN32) +# if defined (ACE_USES_WCHAR) + ACE_OS::strcpy (fp, ACE_TEXT ("c")); +# else /* ACE_USES_WCHAR */ + ACE_OS::strcpy (fp, ACE_TEXT ("C")); +# endif /* ACE_USES_WCHAR */ + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, va_arg (argp, int)); + else + this_len = ACE_OS::sprintf + (bp, format, va_arg (argp, int)); +#elif defined (ACE_USES_WCHAR) +# if defined (HPUX) + ACE_OS::strcpy (fp, ACE_TEXT ("C")); +# else + ACE_OS::strcpy (fp, ACE_TEXT ("lc")); +# endif /* HPUX */ + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, va_arg (argp, wint_t)); + else + this_len = ACE_OS::sprintf + (bp, format, va_arg (argp, wint_t)); +#else /* ACE_WIN32 */ + ACE_OS::strcpy (fp, ACE_TEXT ("u")); + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, va_arg (argp, int)); + else + this_len = ACE_OS::sprintf + (bp, format, va_arg (argp, int)); +#endif /* ACE_WIN32 */ + ACE_UPDATE_COUNT (bspace, this_len); + break; + + case 'z': // ACE_OS::WChar character + { + // On some platforms sizeof (wchar_t) can be 2 + // on the others 4 ... + wchar_t wtchar = + static_cast (va_arg (argp, int)); +#if defined (ACE_WIN32) +# if defined (ACE_USES_WCHAR) + ACE_OS::strcpy (fp, ACE_TEXT ("c")); +# else /* ACE_USES_WCHAR */ + ACE_OS::strcpy (fp, ACE_TEXT ("C")); +# endif /* ACE_USES_WCHAR */ +#elif defined (ACE_USES_WCHAR) +# if defined (HPUX) + ACE_OS::strcpy (fp, ACE_TEXT ("C")); +# else + ACE_OS::strcpy (fp, ACE_TEXT ("lc")); +# endif /* HPUX */ +#else /* ACE_WIN32 */ + ACE_OS::strcpy (fp, ACE_TEXT ("u")); +#endif /* ACE_WIN32 */ + if (can_check) + this_len = ACE_OS::snprintf (bp, bspace, format, wtchar); + else + this_len = ACE_OS::sprintf (bp, format, wtchar); + ACE_UPDATE_COUNT (bspace, this_len); + break; + } + + case 'Z': // ACE_OS::WChar character string + { + ACE_OS::WChar *wchar_str = va_arg (argp, ACE_OS::WChar*); + if (wchar_str == 0) + break; + + wchar_t *wchar_t_str = 0; + if (sizeof (ACE_OS::WChar) != sizeof (wchar_t)) + { + size_t len = ACE_OS::wslen (wchar_str) + 1; + ACE_NEW_NORETURN(wchar_t_str, wchar_t[len]); + if (wchar_t_str == 0) + break; + + for (size_t i = 0; i < len; ++i) + { + wchar_t_str[i] = wchar_str[i]; + } + } + + if (wchar_t_str == 0) + { + wchar_t_str = reinterpret_cast (wchar_str); + } +#if defined (ACE_WIN32) +# if defined (ACE_USES_WCHAR) + ACE_OS::strcpy (fp, ACE_TEXT ("s")); +# else /* ACE_USES_WCHAR */ + ACE_OS::strcpy (fp, ACE_TEXT ("S")); +# endif /* ACE_USES_WCHAR */ +#elif defined (ACE_HAS_WCHAR) +# if defined (HPUX) + ACE_OS::strcpy (fp, ACE_TEXT ("S")); +# else + ACE_OS::strcpy (fp, ACE_TEXT ("ls")); +# endif /* HPUX */ +#endif /* ACE_WIN32 / ACE_HAS_WCHAR */ + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, wchar_t_str); + else + this_len = ACE_OS::sprintf (bp, format, wchar_t_str); + if(sizeof(ACE_OS::WChar) != sizeof(wchar_t)) + { + delete [] wchar_t_str; + } + ACE_UPDATE_COUNT (bspace, this_len); + break; + } + + case 'c': +#if defined (ACE_WIN32) && defined (ACE_USES_WCHAR) + ACE_OS::strcpy (fp, ACE_TEXT ("C")); +#else + ACE_OS::strcpy (fp, ACE_TEXT ("c")); +#endif /* ACE_WIN32 && ACE_USES_WCHAR */ + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, va_arg (argp, int)); + else + this_len = ACE_OS::sprintf + (bp, format, va_arg (argp, int)); + ACE_UPDATE_COUNT (bspace, this_len); + break; + + case 'd': case 'i': case 'o': + case 'u': case 'x': case 'X': + fp[0] = *format_str; + fp[1] = '\0'; + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, va_arg (argp, int)); + else + this_len = ACE_OS::sprintf + (bp, format, va_arg (argp, int)); + ACE_UPDATE_COUNT (bspace, this_len); + break; + + case 'F': case 'f': case 'e': case 'E': + case 'g': case 'G': + fp[0] = *format_str; + fp[1] = '\0'; + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, va_arg (argp, double)); + else + this_len = ACE_OS::sprintf + (bp, format, va_arg (argp, double)); + ACE_UPDATE_COUNT (bspace, this_len); + break; + + case 'Q': +#if defined (ACE_LACKS_LONGLONG_T) || defined (ACE_LACKS_UNSIGNEDLONGLONG_T) + { + // This relies on the ACE_U_LongLong storage layout. + ACE_UINT32 hi = va_arg (argp, ACE_UINT32); + ACE_UINT32 lo = va_arg (argp, ACE_UINT32); + if (hi > 0) + this_len = ACE_OS::sprintf (bp, + "0x%lx%0*lx", + hi, + 2 * sizeof lo, + lo); + else + this_len = ACE_OS::sprintf (bp, "0x%lx", lo); + } +#else /* ! ACE_LACKS_LONGLONG_T */ + { + const ACE_TCHAR *fmt = ACE_UINT64_FORMAT_SPECIFIER; + ACE_OS::strcpy (fp, &fmt[1]); // Skip leading % + if (can_check) + this_len = ACE_OS::snprintf (bp, bspace, + format, + va_arg (argp, ACE_UINT64)); + else + this_len = ACE_OS::sprintf (bp, + format, + va_arg (argp, ACE_UINT64)); + } +#endif /* ! ACE_LACKS_LONGLONG_T || ACE_LACKS_UNSIGNEDLONGLONG_T */ + ACE_UPDATE_COUNT (bspace, this_len); + break; + + case 'q': + #if defined (ACE_LACKS_LONGLONG_T) + // No implementation available yet, no ACE_INT64 emulation + // available yet + #else /* ! ACE_LACKS_LONGLONG_T */ + { + const ACE_TCHAR *fmt = ACE_INT64_FORMAT_SPECIFIER; + ACE_OS::strcpy (fp, &fmt[1]); // Skip leading % + if (can_check) + this_len = ACE_OS::snprintf (bp, bspace, + format, + va_arg (argp, ACE_INT64)); + else + this_len = ACE_OS::sprintf (bp, + format, + va_arg (argp, ACE_INT64)); + } + #endif /* ! ACE_LACKS_LONGLONG_T */ + ACE_UPDATE_COUNT (bspace, this_len); + break; + + case 'b': + { + const ACE_TCHAR *fmt = ACE_SSIZE_T_FORMAT_SPECIFIER; + ACE_OS::strcpy (fp, &fmt[1]); // Skip leading % + } + if (can_check) + this_len = ACE_OS::snprintf (bp, bspace, + format, + va_arg (argp, ssize_t)); + else + this_len = ACE_OS::sprintf (bp, + format, + va_arg (argp, ssize_t)); + ACE_UPDATE_COUNT (bspace, this_len); + break; + + case 'B': + { + const ACE_TCHAR *fmt = ACE_SIZE_T_FORMAT_SPECIFIER; + ACE_OS::strcpy (fp, &fmt[1]); // Skip leading % + } + if (can_check) + this_len = ACE_OS::snprintf (bp, bspace, + format, + va_arg (argp, size_t)); + else + this_len = ACE_OS::sprintf (bp, + format, + va_arg (argp, size_t)); + ACE_UPDATE_COUNT (bspace, this_len); + break; + + case ':': + { + // Assume a 32 bit time_t and change if needed. + const ACE_TCHAR *fmt = ACE_TEXT ("%d"); + if (sizeof (time_t) == 8) + fmt = ACE_INT64_FORMAT_SPECIFIER; + + ACE_OS::strcpy (fp, &fmt[1]); // Skip leading % + } + if (can_check) + this_len = ACE_OS::snprintf (bp, bspace, + format, + va_arg (argp, time_t)); + else + this_len = ACE_OS::sprintf (bp, + format, + va_arg (argp, time_t)); + ACE_UPDATE_COUNT (bspace, this_len); + break; + + case '@': + ACE_OS::strcpy (fp, ACE_TEXT ("p")); + if (can_check) + this_len = ACE_OS::snprintf + (bp, bspace, format, va_arg (argp, void*)); + else + this_len = ACE_OS::sprintf + (bp, format, va_arg (argp, void*)); + ACE_UPDATE_COUNT (bspace, this_len); + break; + + default: + // So, it's not a legit format specifier after all... + // Copy from the original % to where we are now, then + // continue with whatever comes next. + while (start_format != format_str && bspace > 0) + { + *bp++ = *start_format++; + --bspace; + } + if (bspace > 0) + { + *bp++ = *format_str; + --bspace; + } + break; + } + + // Bump to the next char in the caller's format_str + ++format_str; + } + + if (!skip_nul_locate) + while (*bp != '\0') // Locate end of bp. + ++bp; + } + } + + *bp = '\0'; // Terminate bp, but don't auto-increment this! + + ssize_t result = 0; + + // Check that memory was not corrupted, if it corrupted we can't log anything + // anymore because all our members could be corrupted. + if (bp >= (this->msg_ + ACE_MAXLOGMSGLEN+1)) + { + abort_prog = true; + ACE_OS::fprintf (stderr, + "The following logged message is too long!\n"); + } + else + { + // Copy the message from thread-specific storage into the transfer + // buffer (this can be optimized away by changing other code...). + log_record.msg_data (this->msg ()); + + // Write the to the appropriate location. + result = this->log (log_record, + abort_prog); + } + + if (abort_prog) + { + // Since we are now calling abort instead of exit, this value is + // not used. + ACE_UNUSED_ARG (exit_value); + + // *Always* print a message to stderr if we're aborting. We + // don't use verbose, however, to avoid recursive aborts if + // something is hosed. + log_record.print (ACE_Log_Msg::local_host_, 0, stderr); + ACE_OS::abort (); + } + + return result; +} + +#if !defined (ACE_WIN32) +/** + * @class ACE_Log_Msg_Sig_Guard + * + * @brief For use only by ACE_Log_Msg. + * + * Doesn't require the use of global variables or global + * functions in an application). + */ +class ACE_Log_Msg_Sig_Guard +{ +private: + ACE_Log_Msg_Sig_Guard (void); + ~ACE_Log_Msg_Sig_Guard (void); + + /// Original signal mask. + sigset_t omask_; + + friend ssize_t ACE_Log_Msg::log (ACE_Log_Record &log_record, + int suppress_stderr); +}; + +ACE_Log_Msg_Sig_Guard::ACE_Log_Msg_Sig_Guard (void) +{ +#if !defined (ACE_LACKS_UNIX_SIGNALS) + ACE_OS::sigemptyset (&this->omask_); + +# if defined (ACE_LACKS_PTHREAD_THR_SIGSETMASK) + ACE_OS::sigprocmask (SIG_BLOCK, + ACE_OS_Object_Manager::default_mask (), + &this->omask_); +# else + ACE_OS::thr_sigsetmask (SIG_BLOCK, + ACE_OS_Object_Manager::default_mask (), + &this->omask_); +# endif /* ACE_LACKS_PTHREAD_THR_SIGSETMASK */ +#endif /* ACE_LACKS_UNIX_SIGNALS */ +} + +ACE_Log_Msg_Sig_Guard::~ACE_Log_Msg_Sig_Guard (void) +{ +#if !defined (ACE_LACKS_UNIX_SIGNALS) +# if defined (ACE_LACKS_PTHREAD_THR_SIGSETMASK) + ACE_OS::sigprocmask (SIG_SETMASK, + &this->omask_, + 0); +# else + ACE_OS::thr_sigsetmask (SIG_SETMASK, + &this->omask_, + 0); +# endif /* ACE_LACKS_PTHREAD_THR_SIGSETMASK */ +#endif /* ! ACE_LACKS_UNIX_SIGNALS */ +} +#endif /* ! ACE_WIN32 */ + +ssize_t +ACE_Log_Msg::log (ACE_Log_Record &log_record, + int suppress_stderr) +{ + ssize_t result = 0; + + // Format the message and print it to stderr and/or ship it off to + // the log_client daemon, and/or print it to the ostream. Of + // course, only print the message if "SILENT" mode is disabled. + if (ACE_BIT_DISABLED (ACE_Log_Msg::flags_, + ACE_Log_Msg::SILENT)) + { + bool tracing = this->tracing_enabled (); + this->stop_tracing (); + +#if !defined (ACE_WIN32) + // Make this block signal-safe. + ACE_Log_Msg_Sig_Guard sb; +#endif /* !ACE_WIN32 */ + + // Do the callback, if needed, before acquiring the lock + // to avoid holding the lock during the callback so we don't + // have deadlock if the callback uses the logger. + if (ACE_BIT_ENABLED (ACE_Log_Msg::flags_, + ACE_Log_Msg::MSG_CALLBACK) + && this->msg_callback () != 0) + this->msg_callback ()->log (log_record); + + // Make sure that the lock is held during all this. + ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, + *ACE_Log_Msg_Manager::get_lock (), + -1)); + + if (ACE_BIT_ENABLED (ACE_Log_Msg::flags_, + ACE_Log_Msg::STDERR) + && !suppress_stderr) // This is taken care of by our caller. + log_record.print (ACE_Log_Msg::local_host_, + ACE_Log_Msg::flags_, + stderr); + + if (ACE_BIT_ENABLED (ACE_Log_Msg::flags_, ACE_Log_Msg::CUSTOM) || + ACE_BIT_ENABLED (ACE_Log_Msg::flags_, ACE_Log_Msg::SYSLOG) || + ACE_BIT_ENABLED (ACE_Log_Msg::flags_, ACE_Log_Msg::LOGGER)) + { + // Be sure that there is a message_queue_, with multiple threads. + ACE_MT (ACE_Log_Msg_Manager::init_backend ()); + } + + + if (ACE_BIT_ENABLED (ACE_Log_Msg::flags_, ACE_Log_Msg::LOGGER) || + ACE_BIT_ENABLED (ACE_Log_Msg::flags_, ACE_Log_Msg::SYSLOG)) + { + result = + ACE_Log_Msg_Manager::log_backend_->log (log_record); + } + + if (ACE_BIT_ENABLED (ACE_Log_Msg::flags_, ACE_Log_Msg::CUSTOM) && + ACE_Log_Msg_Manager::custom_backend_ != 0) + { + result = + ACE_Log_Msg_Manager::custom_backend_->log (log_record); + } + + + // This must come last, after the other two print operations + // (see the method for details). + if (ACE_BIT_ENABLED (ACE_Log_Msg::flags_, + ACE_Log_Msg::OSTREAM) + && this->msg_ostream () != 0) + log_record.print (ACE_Log_Msg::local_host_, + ACE_Log_Msg::flags_, +#if defined (ACE_LACKS_IOSTREAM_TOTALLY) + static_cast (this->msg_ostream ()) +#else /* ! ACE_LACKS_IOSTREAM_TOTALLY */ + *this->msg_ostream () +#endif /* ! ACE_LACKS_IOSTREAM_TOTALLY */ + ); + + if (tracing) + this->start_tracing (); + } + + return result; +} + +// Calls log to do the actual print, but formats first. + +int +ACE_Log_Msg::log_hexdump (ACE_Log_Priority log_priority, + const char *buffer, + size_t size, + const ACE_TCHAR *text) +{ + // Only print the message if hasn't been reset to + // exclude this logging priority. + if (this->log_priority_enabled (log_priority) == 0) + return 0; + + ACE_TCHAR* buf = 0; + const size_t buf_sz = + ACE_Log_Record::MAXLOGMSGLEN - ACE_Log_Record::VERBOSE_LEN - 58; + ACE_NEW_RETURN (buf, ACE_TCHAR[buf_sz], -1); + + ACE_TCHAR *msg_buf = 0; + const size_t text_sz = text ? ACE_OS::strlen(text) : 0; + ACE_NEW_RETURN (msg_buf, + ACE_TCHAR[text_sz + 58], + -1); + + buf[0] = 0; // in case size = 0 + + const size_t len = ACE::format_hexdump + (buffer, size, buf, buf_sz / sizeof (ACE_TCHAR) - text_sz); + + int sz = 0; + + if (text) + sz = ACE_OS::sprintf (msg_buf, + ACE_TEXT ("%s - "), + text); + + sz += ACE_OS::sprintf (msg_buf + sz, + ACE_TEXT ("HEXDUMP ") + ACE_SIZE_T_FORMAT_SPECIFIER + ACE_TEXT (" bytes"), + size); + + if (len < size) + ACE_OS::sprintf (msg_buf + sz, + ACE_TEXT (" (showing first ") + ACE_SIZE_T_FORMAT_SPECIFIER + ACE_TEXT (" bytes)"), + len); + + // Now print out the formatted buffer. + this->log (log_priority, + ACE_TEXT ("%s\n%s"), + msg_buf, + buf); + + delete [] msg_buf; + delete [] buf; + return 0; +} + +void +ACE_Log_Msg::set (const char *filename, + int line, + int status, + int err, + int rs, + ACE_OSTREAM_TYPE *os, + ACE_Log_Msg_Callback *c) +{ + ACE_TRACE ("ACE_Log_Msg::set"); + this->file (filename); + this->linenum (line); + this->op_status (status); + this->errnum (err); + this->restart (rs); + this->msg_ostream (os); + this->msg_callback (c); +} + +void +ACE_Log_Msg::conditional_set (const char *filename, + int line, + int status, + int err) +{ + this->conditional_values_.is_set_ = true; + this->conditional_values_.file_ = filename; + this->conditional_values_.line_ = line; + this->conditional_values_.op_status_ = status; + this->conditional_values_.errnum_ = err; +} + +void +ACE_Log_Msg::dump (void) const +{ +#if defined (ACE_HAS_DUMP) + ACE_TRACE ("ACE_Log_Msg::dump"); + + ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("status_ = %d\n"), this->status_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nerrnum_ = %d\n"), this->errnum_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nlinenum_ = %d\n"), this->linenum_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nfile_ = %C\n"), this->file_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nmsg_ = %s\n"), this->msg_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nrestart_ = %d\n"), this->restart_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nostream_ = %@\n"), this->ostream_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nmsg_callback_ = %@\n"), + this->msg_callback_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nprogram_name_ = %s\n"), + this->program_name_ ? this->program_name_ + : ACE_TEXT (""))); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nlocal_host_ = %s\n"), + this->local_host_ ? this->local_host_ + : ACE_TEXT (""))); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\npid_ = %d\n"), this->getpid ())); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nflags_ = 0x%x\n"), this->flags_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\ntrace_depth_ = %d\n"), + this->trace_depth_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\ntrace_active_ = %d\n"), + this->trace_active_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\ntracing_enabled_ = %d\n"), + this->tracing_enabled_)); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\npriority_mask_ = 0x%x\n"), + this->priority_mask_)); + if (this->thr_desc_ != 0 && this->thr_desc_->state () != 0) + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nthr_state_ = %d\n"), + this->thr_desc_->state ())); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nmsg_off_ = %d\n"), this->msg_off_)); + + // Be sure that there is a message_queue_, with multiple threads. + ACE_MT (ACE_Log_Msg_Manager::init_backend ()); + + ACE_MT (ACE_Log_Msg_Manager::get_lock ()->dump ()); + // Synchronize output operations. + + ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); +#endif /* ACE_HAS_DUMP */ +} + +void +ACE_Log_Msg::thr_desc (ACE_Thread_Descriptor *td) +{ + this->thr_desc_ = td; + + if (td != 0) + td->acquire_release (); +} + +#if defined (ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS) && defined(ACE_LEGACY_MODE) +ACE_SEH_EXCEPT_HANDLER +ACE_Log_Msg::seh_except_selector (void) +{ + return ACE_OS_Object_Manager::seh_except_selector (); +} + +ACE_SEH_EXCEPT_HANDLER +ACE_Log_Msg::seh_except_selector (ACE_SEH_EXCEPT_HANDLER n) +{ + return ACE_OS_Object_Manager::seh_except_selector (n); +} + +ACE_SEH_EXCEPT_HANDLER +ACE_Log_Msg::seh_except_handler (void) +{ + return ACE_OS_Object_Manager::seh_except_handler (); +} + +ACE_SEH_EXCEPT_HANDLER +ACE_Log_Msg::seh_except_handler (ACE_SEH_EXCEPT_HANDLER n) +{ + return ACE_OS_Object_Manager::seh_except_handler (n); +} +#endif /* ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS && ACE_LEGACY_MODE */ + +ACE_Log_Msg_Backend * +ACE_Log_Msg::msg_backend (ACE_Log_Msg_Backend *b) +{ + ACE_TRACE ("ACE_Log_Msg::msg_backend"); + ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, + *ACE_Log_Msg_Manager::get_lock (), 0)); + + ACE_Log_Msg_Backend *tmp = ACE_Log_Msg_Manager::custom_backend_; + ACE_Log_Msg_Manager::custom_backend_ = b; + return tmp; +} + +ACE_Log_Msg_Backend * +ACE_Log_Msg::msg_backend (void) +{ + ACE_TRACE ("ACE_Log_Msg::msg_backend"); + ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, + *ACE_Log_Msg_Manager::get_lock (), 0)); + + return ACE_Log_Msg_Manager::custom_backend_; +} + +void +ACE_Log_Msg::msg_ostream (ACE_OSTREAM_TYPE *m, bool delete_ostream) +{ + if (this->ostream_ == m) + return; + + if (this->delete_ostream_) + { +#if defined (ACE_LACKS_IOSTREAM_TOTALLY) + ACE_OS::fclose (this->ostream_); +#else + delete this->ostream_; +#endif + } + + this->delete_ostream_ = delete_ostream; + this->ostream_ = m; +} + +void +ACE_Log_Msg::local_host (const ACE_TCHAR *s) +{ + if (s) + { + ACE_OS::free ((void *) ACE_Log_Msg::local_host_); + { + ACE_NO_HEAP_CHECK; + + ACE_ALLOCATOR (ACE_Log_Msg::local_host_, ACE_OS::strdup (s)); + } + } +} + +int +ACE_Log_Msg::log_priority_enabled (ACE_Log_Priority log_priority, + const char *, + ...) +{ + return this->log_priority_enabled (log_priority); +} + +#if defined (ACE_USES_WCHAR) +int +ACE_Log_Msg::log_priority_enabled (ACE_Log_Priority log_priority, + const wchar_t *, + ...) +{ + return this->log_priority_enabled (log_priority); +} +#endif /* ACE_USES_WCHAR */ + +// **************************************************************** + +void +ACE_Log_Msg::init_hook (ACE_OS_Log_Msg_Attributes &attributes +# if defined (ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS) + , ACE_SEH_EXCEPT_HANDLER selector + , ACE_SEH_EXCEPT_HANDLER handler +# endif /* ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS */ + ) +{ +# if defined (ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS) + attributes.seh_except_selector_ = selector; + attributes.seh_except_handler_ = handler; +# endif /* ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS */ + if (ACE_Log_Msg::exists ()) + { + ACE_Log_Msg *inherit_log = ACE_LOG_MSG; + attributes.ostream_ = inherit_log->msg_ostream (); + attributes.priority_mask_ = inherit_log->priority_mask (); + attributes.tracing_enabled_ = inherit_log->tracing_enabled (); + attributes.restart_ = inherit_log->restart (); + attributes.trace_depth_ = inherit_log->trace_depth (); + } +} + +void +ACE_Log_Msg::inherit_hook (ACE_OS_Thread_Descriptor *thr_desc, + ACE_OS_Log_Msg_Attributes &attributes) +{ +#if !defined (ACE_THREADS_DONT_INHERIT_LOG_MSG) && \ + !defined (ACE_HAS_MINIMAL_ACE_OS) + // Inherit the logging features if the parent thread has an + // . Note that all of the following operations occur + // within thread-specific storage. + ACE_Log_Msg *new_log = ACE_LOG_MSG; + + // Note that we do not inherit the callback because this might have + // been allocated off of the stack of the original thread, in which + // case all hell would break loose... + + if (attributes.ostream_) + { + new_log->msg_ostream (attributes.ostream_); + new_log->priority_mask (attributes.priority_mask_); + + if (attributes.tracing_enabled_) + new_log->start_tracing (); + + new_log->restart (attributes.restart_); + new_log->trace_depth (attributes.trace_depth_); + } + + // @@ Now the TSS Log_Msg has been created, cache my thread + // descriptor in. + + if (thr_desc != 0) + // This downcast is safe. We do it to avoid having to #include + // ace/Thread_Manager.h. + new_log->thr_desc (static_cast (thr_desc)); + // Block the thread from proceeding until + // thread manager has thread descriptor ready. +#endif /* ! ACE_THREADS_DONT_INHERIT_LOG_MSG && ! ACE_HAS_MINIMAL_ACE_OS */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Log_Msg.h b/ACE/ace/Log_Msg.h new file mode 100644 index 00000000000..6084902bf30 --- /dev/null +++ b/ACE/ace/Log_Msg.h @@ -0,0 +1,746 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Log_Msg.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_LOG_MSG_H +#define ACE_LOG_MSG_H +#include /**/ "ace/pre.h" + +// This stuff must come first to avoid problems with circular +// headers... +// ... but ACE_NDEBUG and ACE_NLOGGING can come from the config.h file, so +// pull that one early. +#include /**/ "ace/config-all.h" +#include /**/ "ace/ACE_export.h" +#include "ace/Global_Macros.h" +#include "ace/Default_Constants.h" +#include "ace/Log_Priority.h" +#include "ace/os_include/os_limits.h" + +// The ACE_ASSERT macro used to be defined here, include ace/Assert.h +// for backwards compatibility. +#include "ace/Assert.h" + +#if defined (ACE_NLOGGING) +#define ACE_HEX_DUMP(X) do {} while (0) +#define ACE_RETURN(Y) do { return (Y); } while (0) +#define ACE_ERROR_RETURN(X, Y) return (Y) +#define ACE_ERROR_BREAK(X) { break; } +#define ACE_ERROR(X) do {} while (0) +#define ACE_DEBUG(X) do {} while (0) +#define ACE_ERROR_INIT(VALUE, FLAGS) +#else +#if !defined (ACE_HEX_DUMP) +#define ACE_HEX_DUMP(X) \ + do { \ + int __ace_error = ACE_Log_Msg::last_error_adapter (); \ + ACE_Log_Msg *ace___ = ACE_Log_Msg::instance (); \ + ace___->conditional_set (__FILE__, __LINE__, 0, __ace_error); \ + ace___->log_hexdump X; \ + } while (0) +#endif +#if !defined (ACE_RETURN) +#define ACE_RETURN(Y) \ + do { \ + int __ace_error = ACE_Log_Msg::last_error_adapter (); \ + ACE_Log_Msg *ace___ = ACE_Log_Msg::instance (); \ + ace___->set (__FILE__, __LINE__, Y, __ace_error, ace___->restart (), \ + ace___->msg_ostream (), ace___->msg_callback ()); \ + return Y; \ + } while (0) +#endif +#if !defined (ACE_ERROR_RETURN) +#define ACE_ERROR_RETURN(X, Y) \ + do { \ + int __ace_error = ACE_Log_Msg::last_error_adapter (); \ + ACE_Log_Msg *ace___ = ACE_Log_Msg::instance (); \ + ace___->conditional_set (__FILE__, __LINE__, Y, __ace_error); \ + ace___->log X; \ + return Y; \ + } while (0) +#endif +#if !defined (ACE_ERROR) +#define ACE_ERROR(X) \ + do { \ + int __ace_error = ACE_Log_Msg::last_error_adapter (); \ + ACE_Log_Msg *ace___ = ACE_Log_Msg::instance (); \ + ace___->conditional_set (__FILE__, __LINE__, -1, __ace_error); \ + ace___->log X; \ + } while (0) +#endif +#if !defined (ACE_DEBUG) +#define ACE_DEBUG(X) \ + do { \ + int __ace_error = ACE_Log_Msg::last_error_adapter (); \ + ACE_Log_Msg *ace___ = ACE_Log_Msg::instance (); \ + ace___->conditional_set (__FILE__, __LINE__, 0, __ace_error); \ + ace___->log X; \ + } while (0) +#endif +#if !defined (ACE_ERROR_INIT) +#define ACE_ERROR_INIT(VALUE, FLAGS) \ + do { \ + ACE_Log_Msg *ace___ = ACE_Log_Msg::instance (); \ + ace___->set_flags (FLAGS); ace___->op_status (VALUE); \ + } while (0) +#endif +#if !defined (ACE_ERROR_BREAK) +#define ACE_ERROR_BREAK(X) { ACE_ERROR (X); break; } +#endif +#endif /* ACE_NLOGGING */ + +#include "ace/OS_Log_Msg_Attributes.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +// These workarounds are necessary for nasty libraries or platforms +// that #define STDERR or THREAD (e.g. LynxOS). We simply #undef +// these macros as there is no way to save the macro definition using +// the pre-processor. See Bugzilla Bug #299 for more info. + +#if defined (STDERR) +# undef STDERR +#endif /* STDERR */ + +#if defined (THREAD) +# undef THREAD +#endif /* THREAD */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_Log_Msg_Callback; +class ACE_Log_Msg_Backend; + +// **************************************************************** + +#define ACE_LOG_MSG ACE_Log_Msg::instance () + +// Forward declaration +class ACE_Thread_Descriptor; +class ACE_Log_Record; + +/** + * @class ACE_Log_Msg + * + * @brief Provides a variable length argument message logging + * abstraction. + * + * This class is very flexible since it allows formatted error + * messages to be printed in a thread-safe manner to various + * locations, such as stderr, cerr, a distributed logger, etc. The + * current message is also kept in a thread-specific storage location + * (threads spawned using ACE_Thread_Manager automatically get an + * ACE_Log_Msg object that inherits the spawning thread's settings), + * which can be used to communicate errors between framework methods + * and callers. A message is logged by the log() method, only if the + * message priority is currently enabled. Moreover, only the current + * log message is stored here -- it will be overwritten by the + * subsequent call to log(). + * + * The ACE_Log_Msg class uses two priority masks to control its + * logging behavior. The @c priority_mask_ object attribute is + * thread- specific and specifies the priority levels logged by the + * thread. The @c process_priority_mask_ class attribute is not + * thread-specific and specifies the priority levels that will be + * logged by all threads in the process. By default, all levels are + * disabled for @c priority_mask_ and all levels are enabled for @c + * process_priority_mask_ (i.e. the process-wide mask controls the + * settings, and each instance can expand on it if desired). Both + * priority masks can be modified using the priority_mask() method of + * this class. + */ +class ACE_Export ACE_Log_Msg +{ +public: + // Logger Flags. + enum + { + /// Write messages to stderr. + STDERR = 1, + /// Write messages to the local client logger deamon. + LOGGER = 2, + /// Write messages to the ostream * stored in thread-specific + /// storage. + OSTREAM = 4, + /// Write messages to the callback object. + MSG_CALLBACK = 8, + /// Display messages in a verbose manner. + VERBOSE = 16, + /// Display messages in a less verbose manner (i.e., only print + /// information that can change between calls). + VERBOSE_LITE = 32, + /// Do not print messages at all (just leave in thread-specific + /// storage for later inspection). + SILENT = 64, + /// Write messages to the system's event log. + SYSLOG = 128, + /// Write messages to the user provided backend + CUSTOM = 256 + }; + + // = Initialization and termination routines. + + /// Returns a pointer to the Singleton. + static ACE_Log_Msg *instance (void); + + /// Returns last error. + static int last_error_adapter (void); + + /// Returns non-null if an ACE_Log_Msg exists for the calling thread. + static int exists (void); + + /// Returns the current program name used for logging. + static const ACE_TCHAR * program_name (void); + + /// Clears the flag from the default priority mask used to + /// initialize ACE_Log_Msg instances. + static void disable_debug_messages (ACE_Log_Priority priority = LM_DEBUG); + + /// Sets the flag in the default priority mask used to initialize + /// ACE_Log_Msg instances. + static void enable_debug_messages (ACE_Log_Priority priority = LM_DEBUG); + + /// Initialize logger. + ACE_Log_Msg (void); + + /// cleanup logger. + ~ACE_Log_Msg (void); + + /// Initialize the ACE logging facility. + /** + * Initialize the ACE logging facility. Supplies the program name + * that is available to each logging message call. Default arguments + * set up logging to STDERR only. + * + * @param prog_name The name of the calling program. + * @param options_flags A bitwise-or of options flags used to set the + * initial behavior and logging sink(s). (see the + * enum above for the valid values). + * @param logger_key The name of ACE_FIFO rendezvous point where the + * local client logger daemon is listening for logging + * messages if the LOGGER bit is set in the @a flags + * argument. If the SYSLOG bit is set in @a flags, + * @a logger_key is the source/program name specified + * in the syslog facility (UNIX/Linux) or the Windows + * event log (Windows). In the SYSLOG case, if + * @a logger_key is 0, @a prog_name is used. + */ + int open (const ACE_TCHAR *prog_name, + u_long options_flags = ACE_Log_Msg::STDERR, + const ACE_TCHAR *logger_key = 0); + + // = Set/get the options flags. + + /** + * Enable the bits in the logger's options flags. + */ + void set_flags (u_long f); + + /** + * Disable the bits in the logger's options flags. + */ + void clr_flags (u_long f); + + /** + * Return the bits in the logger's options flags. + */ + u_long flags (void); + + /** @name Allow apps to acquire and release internal synchronization + * lock + * + * This lock is used internally by the ACE_Log_Msg + * implementation. By exporting the lock, applications can hold the + * lock atomically over a number of calls to ACE_Log_Msg. + */ + //@{ + + /// Acquire the internal lock. + int acquire (void); + + /// Release the internal lock. + int release (void); + //@} + + /// Call after doing a @c fork() to resynchronize the process id and + /// @c program_name_ variables. + void sync (const ACE_TCHAR *program_name); + + // = Set/get methods. Note that these are non-static and thus will + // be thread-specific. + + /// Set the result of the operation status (by convention, -1 means + /// error). + void op_status (int status); + + /// Get the result of the operation status (by convention, -1 means + /// error). + int op_status (void) const; + + /// Set the value of the errnum (by convention this corresponds to + /// errno). + void errnum (int); + + /// Get the value of the errnum (by convention this corresponds to + /// errno). + int errnum (void) const; + + /// Set the line number where an error occurred. + void linenum (int); + + /// Get the line number where an error occurred. + int linenum (void) const; + + /// Set the file name where an error occurred. + void file (const char *); + + /// Get the file name where an error occurred. + const char *file (void); + + /// Set the message that describes what type of error occurred. + void msg (const ACE_TCHAR *); + + /// Get the message that describes what type of error occurred. + const ACE_TCHAR *msg (void); + + /// Set the field that indicates whether interrupted calls should be + /// restarted. + void restart (int); + + /// Get the field that indicates whether interrupted calls should be + /// restarted. + int restart (void) const; + + // = Notice that the following two function is equivalent to + // "void msg_ostream (HANDLE)" and "HANDLE msg_ostream (void)" + // on Windows CE. There is no support on CE. + + /// Update the ostream without overwriting the delete_ostream_ flag. + void msg_ostream (ACE_OSTREAM_TYPE *); + + /** + * delete_stream == true, forces Log_Msg.h to delete the stream in + * its own ~dtor (assumes control of the stream) + * use only with proper ostream (eg: fstream), not (cout, cerr) + */ + void msg_ostream (ACE_OSTREAM_TYPE *, bool delete_ostream); + + /// Get the ostream that is used to print error messages. + ACE_OSTREAM_TYPE *msg_ostream (void) const; + + /** + * Set a new callback object and return the existing callback to + * allow "chaining". Note that ACE_Log_Msg_Callback objects are not + * inherited when spawning a new thread, so you'll need to reset + * them in each thread. + */ + ACE_Log_Msg_Callback *msg_callback (ACE_Log_Msg_Callback *c); + ACE_Log_Msg_Callback *msg_callback (void) const; + + /** + * Set a new backend object and return the existing backend to + * allow "chaining". Note that as opposed to ACE_Log_Msg_Callback, + * ACE_Log_Msg_Backend is a per-process entity. + * + * @note Be aware that because of the current architecture there is + * no guarantee that open (), reset () and close () will be called + * on a backend object. + * + */ + static ACE_Log_Msg_Backend *msg_backend (ACE_Log_Msg_Backend *b); + static ACE_Log_Msg_Backend *msg_backend (void); + + /// Nesting depth increment. + int inc (void); + + /// Nesting depth decrement. + int dec (void); + + /// Get trace depth. + int trace_depth (void) const; + + /// Set trace depth. + void trace_depth (int); + + /// Set trace active status. + bool trace_active (void) const; + + /// Get trace active status. + void trace_active (bool value); + + /// Get the TSS thread descriptor. + ACE_Thread_Descriptor *thr_desc (void) const; + + /** + * Set the TSS thread descriptor. This method will call + * td->acquire_release to block execution until this call + * return. + */ + void thr_desc (ACE_Thread_Descriptor *td); + +#if defined (ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS) && defined(ACE_LEGACY_MODE) + // These functions are disabled without ACE_LEGACY_MODE + // because the *semantics* have changed (the objects are no longer + // TSS). + /// Get TSS exception action. + /// @note The action is no longer TSS, they are global! + ACE_SEH_EXCEPT_HANDLER seh_except_selector (void); + + /// Set TSS exception action. + /// @note The action is no longer TSS, they are global! + ACE_SEH_EXCEPT_HANDLER seh_except_selector (ACE_SEH_EXCEPT_HANDLER); + + /// Get TSS exception handler. + /// @note The handler is no longer TSS, they are global! + ACE_SEH_EXCEPT_HANDLER seh_except_handler (void); + + /// Set TSS exception handler. + /// @note The handler is no longer TSS, they are global! + ACE_SEH_EXCEPT_HANDLER seh_except_handler (ACE_SEH_EXCEPT_HANDLER); +#endif /* ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS && ACE_LEGACY_MODE */ + + /// Stop tracing status on a per-thread basis... + void stop_tracing (void); + + /// Start tracing status on a per-thread basis... + void start_tracing (void); + + /// Query tracing status on a per-thread basis... + bool tracing_enabled (void) const; + + typedef enum + { + PROCESS = 0, + THREAD = 1 + } MASK_TYPE; + + // = Get/set the priority mask. + /// Get the current ACE_Log_Priority mask. + u_long priority_mask (MASK_TYPE = THREAD); + + /// Set the ACE_Log_Priority mask, returns original mask. + u_long priority_mask (u_long, MASK_TYPE = THREAD); + + /// Return true if the requested priority is enabled. + int log_priority_enabled (ACE_Log_Priority log_priority); + + /// Return true if the requested priority is enabled. + int log_priority_enabled (ACE_Log_Priority log_priority, + const char *, + ...); + +#if defined (ACE_USES_WCHAR) + // We are not using ACE_TCHAR for this since ACE_HEX_DUMP + // doesn't take in a ACE_TCHAR. log_hexdump takes in a char + // string, so this must be able to take in a char string even + // when using ACE_USES_WCHAR. + /// Return true if the requested priority is enabled. + int log_priority_enabled (ACE_Log_Priority log_priority, + const wchar_t *, + ...); +#endif /* ACE_USES_WCHAR */ + + /// Optimize reading of the pid (avoids a system call if the value is + /// cached...). + pid_t getpid (void) const; + + /// Get the name of the local host. + const ACE_TCHAR *local_host (void) const; + + /// Set the name of the local host. + void local_host (const ACE_TCHAR *); + + /** + * Set the line number, file name, operational status, error number, + * restart flag, ostream, and the callback object. This combines + * all the other set methods into a single method. + */ + void set (const char *file, + int line, + int op_status = -1, + int errnum = 0, + int restart = 1, + ACE_OSTREAM_TYPE *os = 0, + ACE_Log_Msg_Callback *c = 0); + + /// These values are only actually set if the requested priority is + /// enabled. + void conditional_set (const char *file, + int line, + int op_status, + int errnum); + + /** + * Format a message to the thread-safe ACE logging mechanism. Valid + * options (prefixed by '%', as in printf format strings) include: + * - 'A': print an ACE_timer_t value (which could be either double + * or ACE_UINT32.) + * - 'a': abort the program at this point abruptly. + * - 'b': print a ssize_t value + * - 'B': print a size_t value + * - 'c': print a character + * - 'C': print a character string + * - 'i', 'd': print a decimal number + * - 'I': indent according to nesting depth (obtained from + * ACE_Trace::get_nesting_indent()). + * - 'e', 'E', 'f', 'F', 'g', 'G': print a double + * - 'l': print line number where an error occurred. + * - 'M': print the name of the priority of the message. + * - 'm': return the message corresponding to errno value, e.g., as + * done by strerror() + * - 'N': print file name where the error occurred. + * - 'n': print the name of the program (or "" if not set) + * - 'o': print as an octal number + * - 'P': print out the current process id + * - 'p': print out the appropriate errno message from sys_errlist, + * e.g., as done by perror() + * - 'Q': print out the uint64 number + * - 'q': print out the int64 number + * - '@': print a void* pointer (in hexadecimal) + * - 'r': call the function pointed to by the corresponding argument + * - 'R': print return status + * - 'S': print out the appropriate _sys_siglist entry corresponding + * to var-argument. + * - 's': print out a character string + * - 'T': print timestamp in hour:minute:sec:usec format. + * - 'D': print timestamp as Weekday Month day year hour:minute:sec.usec + * - 't': print thread id (1 if single-threaded) + * - 'u': print as unsigned int + * - 'w': prints a wide character + * - 'W': print a wide character string + * - 'x': print as a hex number + * - 'X': print as a hex number + * - 'z': print an ACE_OS::WChar character + * - 'Z': print an ACE_OS::WChar character string + * - ':': print a time_t value as an integral number + * - '%': print out a single percent sign, '%' + */ + ssize_t log (ACE_Log_Priority priority, const ACE_TCHAR *format, ...); + +#if defined (ACE_HAS_WCHAR) + ssize_t log (ACE_Log_Priority priority, const ACE_ANTI_TCHAR *format, ...); +#endif /* ACE_HAS_WCHAR */ + + /** + * An alternative logging mechanism that makes it possible to + * integrate variable argument lists from other logging mechanisms + * into the ACE mechanism. + */ + ssize_t log (const ACE_TCHAR *format, + ACE_Log_Priority priority, + va_list argp); + + /// Log a custom built log record to the currently enabled logging + /// sinks. + ssize_t log (ACE_Log_Record &log_record, + int suppress_stderr = 0); + + /** + * Method to log hex dump. This is useful for debugging. Calls + * log() to do the actual print, but formats first to make the chars + * printable. + */ + int log_hexdump (ACE_Log_Priority log_priority, + const char *buffer, + size_t size, + const ACE_TCHAR *text = 0); + + static void init_hook (ACE_OS_Log_Msg_Attributes &attributes +# if defined (ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS) + , ACE_SEH_EXCEPT_HANDLER selector = 0 + , ACE_SEH_EXCEPT_HANDLER handler = 0 +# endif /* ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS */ + /** + * Init hook, create a Log_Msg_Attribute object, initialize its + * attributes from the TSS Log_Msg and save the object in the + * @a attributes argument + */ + ); + + /** + * Inherit hook, the @a attributes field is a ACE_OS_Log_Msg_Attributes + * object, invoke the inherit_log_msg() method on it, then destroy + * it and set the @a attribute argument to 0. + */ + static void inherit_hook (ACE_OS_Thread_Descriptor *thr_desc, + ACE_OS_Log_Msg_Attributes &attributes); + + /// Dump the state of an object. + void dump (void) const; + + /// Declare the dynamic allocation hooks. + ACE_ALLOC_HOOK_DECLARE; + +private: + /// Status of operation (-1 means failure, >= 0 means success). + int status_; + + /// Type of error that occurred (see ). + int errnum_; + + /// Line number where the error occurred. + int linenum_; + + /// File where the error occurred. + char file_[MAXPATHLEN + 1]; + + /// The log message, which resides in thread-specific storage. Note + /// that only the current log message is stored here -- it will be + /// overwritten by the subsequent call to log(). + ACE_TCHAR* msg_; // Add one for NUL-terminator. + + /// Indicates whether we should restart system calls that are + /// interrupted. + int restart_; + + /// The ostream where logging messages can be written. + ACE_OSTREAM_TYPE *ostream_; + + /// The callback object. + ACE_Log_Msg_Callback *msg_callback_; + + /// Depth of the nesting for printing traces. + int trace_depth_; + + /// Are we already within an ACE_Trace constructor call? + bool trace_active_; + + /// Are we allowing tracing in this thread? + bool tracing_enabled_; + + /// Are we deleting this ostream? + bool delete_ostream_; + + /** + * If we're running in the context of an ACE_Thread_Manager this + * will point to the thread descriptor adapter which holds the + * thread descriptor of the thread. This can be used to repidly + * access all thread data kept in ACE_Thread_Descriptor. + */ + ACE_Thread_Descriptor *thr_desc_; + + /** + * Keeps track of all the per-thread ACE_Log_Priority values that + * are currently enabled. Default is for all logging priorities to + * be disabled. + */ + u_long priority_mask_; + + /// Always timestamp? + int timestamp_; + + // = The following fields are *not* kept in thread-specific storage. + + // We only want one instance for the entire process! + + /** + * Keeps track of all the per-process ACE_Log_Priority values that + * are currently enabled. Default is for all logging priorities to + * be enabled. + */ + static u_long process_priority_mask_; + + /// Records the program name. + static const ACE_TCHAR *program_name_; + + /// Name of the local host (used when printing messages). + static const ACE_TCHAR *local_host_; + + /// Process id of the current process. + static pid_t pid_; + + /// Options flags used to hold the logger flag options, e.g., + /// STDERR, LOGGER, OSTREAM, MSG_CALLBACK, etc. + static u_long flags_; + + /// Offset of msg_[]. + static ptrdiff_t msg_off_; + + /** + * Number of existing ACE_Log_Msg instances; when 0, delete program/host + * names + */ + static int instance_count_; + + /** + * Priority mask to use for each new instance + */ + static u_long default_priority_mask_; + + /// Anonymous struct since there will only be one instance. This + /// struct keeps information stored away in case we actually end up + /// calling log() if the log priority is correct. + struct + { + bool is_set_; + const char *file_; + int line_; + int op_status_; + int errnum_; + } conditional_values_; + +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) + static int key_created_; +#endif /* ACE_MT_SAFE */ + + /// For cleanup, at program termination. + static void close (void); + + /// Decouple the OS layer from the ACE_Log_Msg layer. + static void sync_hook (const ACE_TCHAR *prg_name); + + /// Return the TSS singleton thread descriptor + static ACE_OS_Thread_Descriptor *thr_desc_hook (void); + + //friend void ACE_OS::cleanup_tss (const u_int); + + // = Disallow these operations. + ACE_Log_Msg &operator= (const ACE_Log_Msg &); + ACE_Log_Msg (const ACE_Log_Msg &); +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) +# if defined (ACE_HAS_THREAD_SPECIFIC_STORAGE) || \ + defined (ACE_HAS_TSS_EMULATION) +/* static */ +# if defined (ACE_HAS_THR_C_DEST) +# define LOCAL_EXTERN_PREFIX extern "C" +# else +# define LOCAL_EXTERN_PREFIX +# endif /* ACE_HAS_THR_C_DEST */ + +#if (defined (ACE_HAS_VERSIONED_NAMESPACE) && ACE_HAS_VERSIONED_NAMESPACE == 1) +# define ACE_TSS_CLEANUP_NAME ACE_PREPROC_CONCATENATE(ACE_,ACE_PREPROC_CONCATENATE(ACE_VERSIONED_NAMESPACE_NAME, _TSS_cleanup)) +#else +# define ACE_TSS_CLEANUP_NAME ACE_TSS_cleanup +#endif /* ACE_HAS_VERSIONED_NAMESPACE == 1 */ + + +LOCAL_EXTERN_PREFIX +void +ACE_TSS_CLEANUP_NAME (void *ptr); +# endif /* ACE_HAS_THREAD_SPECIFIC_STORAGE || ACE_HAS_TSS_EMULATION */ +#endif /* ACE_MT_SAFE */ + +#if defined(ACE_LEGACY_MODE) +#include "ace/Log_Msg_Callback.h" +#endif /* ACE_LEGACY_MODE */ + +#if defined (__ACE_INLINE__) +#include "ace/Log_Msg.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_LOG_MSG_H */ diff --git a/ACE/ace/Log_Msg.inl b/ACE/ace/Log_Msg.inl new file mode 100644 index 00000000000..677a6856d8f --- /dev/null +++ b/ACE/ace/Log_Msg.inl @@ -0,0 +1,235 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_unistd.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE +u_long +ACE_Log_Msg::priority_mask (MASK_TYPE mask_type) +{ + return mask_type == THREAD + ? this->priority_mask_ + : ACE_Log_Msg::process_priority_mask_; +} + +ACE_INLINE +int +ACE_Log_Msg::log_priority_enabled (ACE_Log_Priority log_priority) +{ + return ACE_BIT_ENABLED (this->priority_mask_ | + ACE_Log_Msg::process_priority_mask_, + log_priority); +} + +ACE_INLINE +void +ACE_Log_Msg::op_status (int status) +{ + this->status_ = status; +} + +ACE_INLINE +int +ACE_Log_Msg::op_status (void) const +{ + return this->status_; +} + +ACE_INLINE +void +ACE_Log_Msg::restart (int r) +{ + this->restart_ = r; +} + +ACE_INLINE +int +ACE_Log_Msg::restart (void) const +{ + return this->restart_; +} + +ACE_INLINE +int +ACE_Log_Msg::errnum (void) const +{ + return this->errnum_; +} + +ACE_INLINE +void +ACE_Log_Msg::errnum (int e) +{ + this->errnum_ = e; +} + +ACE_INLINE +int +ACE_Log_Msg::linenum (void) const +{ + return this->linenum_; +} + +ACE_INLINE +void +ACE_Log_Msg::linenum (int l) +{ + this->linenum_ = l; +} + +ACE_INLINE +int +ACE_Log_Msg::inc (void) +{ + return this->trace_depth_++; +} + +ACE_INLINE +int +ACE_Log_Msg::dec (void) +{ + return this->trace_depth_ == 0 ? 0 : --this->trace_depth_; +} + +ACE_INLINE +int +ACE_Log_Msg::trace_depth (void) const +{ + return this->trace_depth_; +} + +ACE_INLINE +void +ACE_Log_Msg::trace_depth (int depth) +{ + this->trace_depth_ = depth; +} + +ACE_INLINE +bool +ACE_Log_Msg::trace_active (void) const +{ + return this->trace_active_; +} + +ACE_INLINE +void +ACE_Log_Msg::trace_active (bool value) +{ + this->trace_active_ = value; +} + +ACE_INLINE +ACE_Thread_Descriptor * +ACE_Log_Msg::thr_desc (void) const +{ + return this->thr_desc_; +} + +/// Enable the tracing facility on a per-thread basis. +ACE_INLINE +void +ACE_Log_Msg::start_tracing (void) +{ + this->tracing_enabled_ = true; +} + +/// Disable the tracing facility on a per-thread basis. +ACE_INLINE +void +ACE_Log_Msg::stop_tracing (void) +{ + this->tracing_enabled_ = false; +} + +ACE_INLINE +bool +ACE_Log_Msg::tracing_enabled (void) const +{ + return this->tracing_enabled_; +} + +ACE_INLINE +const char * +ACE_Log_Msg::file (void) +{ + return this->file_; +} + +ACE_INLINE +void +ACE_Log_Msg::file (const char *s) +{ + ACE_OS::strsncpy (this->file_, s, sizeof this->file_); +} + +ACE_INLINE +const ACE_TCHAR * +ACE_Log_Msg::msg (void) +{ + return this->msg_ + ACE_Log_Msg::msg_off_; +} + +ACE_INLINE +void +ACE_Log_Msg::msg (const ACE_TCHAR *m) +{ + ACE_OS::strsncpy (this->msg_, m, + ((ACE_MAXLOGMSGLEN+1) / sizeof (ACE_TCHAR))); +} + +ACE_INLINE +ACE_Log_Msg_Callback * +ACE_Log_Msg::msg_callback (void) const +{ + return this->msg_callback_; +} + +ACE_INLINE +ACE_Log_Msg_Callback * +ACE_Log_Msg::msg_callback (ACE_Log_Msg_Callback *c) +{ + ACE_Log_Msg_Callback *old = this->msg_callback_; + this->msg_callback_ = c; + return old; +} + +ACE_INLINE +ACE_OSTREAM_TYPE * +ACE_Log_Msg::msg_ostream (void) const +{ + return this->ostream_; +} + +ACE_INLINE +void +ACE_Log_Msg::msg_ostream (ACE_OSTREAM_TYPE *m) +{ + this->ostream_ = m; +} + +ACE_INLINE +const ACE_TCHAR * +ACE_Log_Msg::local_host (void) const +{ + return ACE_Log_Msg::local_host_; +} + +ACE_INLINE +pid_t +ACE_Log_Msg::getpid (void) const +{ + if (ACE_Log_Msg::pid_ == -2) + ACE_Log_Msg::pid_ = ACE_OS::getpid (); + + return ACE_Log_Msg::pid_; +} + + + +ACE_END_VERSIONED_NAMESPACE_DECL + diff --git a/ACE/ace/Log_Msg_Backend.cpp b/ACE/ace/Log_Msg_Backend.cpp new file mode 100644 index 00000000000..de9b9c22b7b --- /dev/null +++ b/ACE/ace/Log_Msg_Backend.cpp @@ -0,0 +1,14 @@ +// $Id$ + +#include "ace/Log_Msg_Backend.h" + +ACE_RCSID(ace, Log_Msg_Backend, "$Id$") + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Log_Msg_Backend::~ACE_Log_Msg_Backend (void) +{ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Log_Msg_Backend.h b/ACE/ace/Log_Msg_Backend.h new file mode 100644 index 00000000000..b98465987db --- /dev/null +++ b/ACE/ace/Log_Msg_Backend.h @@ -0,0 +1,88 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Log_Msg_Backend.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + + +#ifndef ACE_LOG_MSG_BACKEND_H +#define ACE_LOG_MSG_BACKEND_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/os_include/sys/os_types.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_Log_Record; + +/** + * @class ACE_Log_Msg_Backend + * + * @brief Defines the interface for ACE_Log_Msg back end processing. + * + * The ACE_Log_Msg class uses ACE_Log_Msg_Backend as the target interface + * for back end log record procesing. In addition to the classes ACE + * derives from this (ACE_Log_Msg_NT_Event_Log, ACE_Log_Msg_UNIX_Syslog, and + * ACE_Log_Msg_IPC) users can derive classes from ACE_Log_Msg_Backend for + * use as a custom logger back end. + */ +class ACE_Export ACE_Log_Msg_Backend +{ +public: + /// No-op virtual destructor. + virtual ~ACE_Log_Msg_Backend (void); + + /** + * Open the back end object. Perform any actions needed to prepare + * the object for later logging operations. + * + * @param logger_key The character string passed to ACE_Log_Msg::open(). + * If the @c LOGGER logging destination is not being + * used, any string can be passed through to the back end. + * + * @retval 0 for success. + * @retval -1 for failure. + */ + virtual int open (const ACE_TCHAR *logger_key) = 0; + + /** + * Reset the backend. If ACE_Log_Msg is reopened during execution, this + * hook will be called. This method should perform any needed cleanup + * activity (similar to close()) because this object won't be reopened + * if the new open call does not specify use of this back end being reset. + * + * @retval Currently ignored, but to be safe, return 0 for success; + * -1 for failure. + */ + virtual int reset (void) = 0; + + /// Close the backend completely. + virtual int close (void) = 0; + + /** + * Process a log record. + * + * @param log_record The ACE_Log_Record to process. + * + * @retval -1 for failure; else it is customarily the number of bytes + * processed, but can also be 0 to signify success. + */ + virtual ssize_t log (ACE_Log_Record &log_record) = 0; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" +#endif /* ACE_LOG_MSG_BACKEND_H */ diff --git a/ACE/ace/Log_Msg_Callback.cpp b/ACE/ace/Log_Msg_Callback.cpp new file mode 100644 index 00000000000..2fcf5206dd1 --- /dev/null +++ b/ACE/ace/Log_Msg_Callback.cpp @@ -0,0 +1,13 @@ +// $Id$ + +#include "ace/Log_Msg_Callback.h" + +ACE_RCSID(ace, Log_Msg_Callback, "$Id$") + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Log_Msg_Callback::~ACE_Log_Msg_Callback (void) +{ +} +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Log_Msg_Callback.h b/ACE/ace/Log_Msg_Callback.h new file mode 100644 index 00000000000..ecd8641dbb3 --- /dev/null +++ b/ACE/ace/Log_Msg_Callback.h @@ -0,0 +1,69 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Log_Msg_Callback.h + * + * $Id$ + * + * @author Douglas C. Schmidt + */ +//============================================================================= + +#ifndef ACE_LOG_MSG_CALLBACK_H +#define ACE_LOG_MSG_CALLBACK_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/ACE_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +class ACE_Log_Record; + +/** + * @class ACE_Log_Msg_Callback + * + * @brief An interface class used to get logging callbacks. + * + * Users who are interested in getting the logging messages + * directly, can subclass this interface and override the log() + * method. They must then register their subclass with the + * Log_Msg class and make sure that they turn on the + * ACE_Log_Msg::MSG_CALLBACK flag. + * + * Your routine is called with an instance of + * ACE_Log_Record. From this class, you can get the log + * message, the verbose log message, message type, message + * priority, and so on. + * + * Remember that there is one Log_Msg object per thread. + * Therefore, you may need to register your callback object with + * many ACE_Log_Msg objects (and have the correct + * synchronization in the method) or have a separate + * callback object per Log_Msg object. Moreover, + * are not inherited when a new thread + * is spawned because it might have been allocated off of the + * stack of the original thread, in which case all hell would + * break loose... Therefore, you'll need to reset these in each + * new thread. + */ +class ACE_Export ACE_Log_Msg_Callback +{ +public: + /// No-op virtual destructor. + virtual ~ACE_Log_Msg_Callback (void); + + /// Callback routine. This is called when we want to log a message. + /// Since this routine is pure virtual, it must be overwritten by the + /// subclass. + virtual void log (ACE_Log_Record &log_record) = 0; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" +#endif /* ACE_LOG_MSG_CALLBACK_H */ diff --git a/ACE/ace/Log_Msg_IPC.cpp b/ACE/ace/Log_Msg_IPC.cpp new file mode 100644 index 00000000000..82411a3cf92 --- /dev/null +++ b/ACE/ace/Log_Msg_IPC.cpp @@ -0,0 +1,111 @@ +// $Id$ + +#include "ace/Log_Msg_IPC.h" +#include "ace/Log_Record.h" +#include "ace/CDR_Stream.h" +#include "ace/Truncate.h" + +ACE_RCSID(ace, Log_Msg_IPC, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Log_Msg_IPC::ACE_Log_Msg_IPC (void) +{ +} + +ACE_Log_Msg_IPC::~ACE_Log_Msg_IPC (void) +{ + (void) this->close (); +} + +int +ACE_Log_Msg_IPC::open (const ACE_TCHAR *logger_key) +{ + ACE_LOG_MSG_IPC_CONNECTOR con; + return con.connect (this->message_queue_, + ACE_LOG_MSG_IPC_ADDR (logger_key)); +} + +int +ACE_Log_Msg_IPC::reset (void) +{ + if (this->message_queue_.get_handle () != ACE_INVALID_HANDLE) + { + // If we don't do this, handles aren't reused on Win32 and the + // server eventually crashes! + return this->close (); + } + return 0; +} + +int +ACE_Log_Msg_IPC::close (void) +{ + return this->message_queue_.close (); +} + +ssize_t +ACE_Log_Msg_IPC::log (ACE_Log_Record &log_record) +{ + // Serialize the log record using a CDR stream, allocate enough + // space for the complete . + size_t const max_payload_size = + 4 // type + + 4 // pid + + 12 // timestamp + + 4 // process id + + 4 // data length +#if defined (ACE_USES_WCHAR) + + (log_record.msg_data_len () * ACE_OutputCDR::wchar_maxbytes()) // message +#else + + log_record.msg_data_len () // message +#endif + + ACE_CDR::MAX_ALIGNMENT; // padding; + + // Insert contents of into payload stream. + ACE_OutputCDR payload (max_payload_size); + payload << log_record; + + // Get the number of bytes used by the CDR stream. If it becomes desireable + // to support payloads more than 4GB, this field will need to be changed + // to a 64-bit value. + ACE_CDR::ULong length = + ACE_Utils::truncate_cast (payload.total_length ()); + + // Send a header so the receiver can determine the byte order and + // size of the incoming CDR stream. + ACE_OutputCDR header (ACE_CDR::MAX_ALIGNMENT + 8); + header << ACE_OutputCDR::from_boolean (ACE_CDR_BYTE_ORDER); + + // Store the size of the payload that follows + header << ACE_CDR::ULong (length); + + // Use an iovec to send both buffer and payload simultaneously. + iovec iov[2]; + iov[0].iov_base = header.begin ()->rd_ptr (); + iov[0].iov_len = 8; + iov[1].iov_base = payload.begin ()->rd_ptr (); + iov[1].iov_len = length; + +#if defined (ACE_HAS_STREAM_PIPES) + // Use the API if supported to ensure correct message + // queueing according to priority. + + ACE_Str_Buf header_msg (static_cast (header.begin ()->rd_ptr ()), + static_cast (8)); + + ACE_Str_Buf payload_msg (static_cast (payload.begin ()->rd_ptr ()), + static_cast (length)); + + return this->message_queue_.send (&header_msg, + &payload_msg, + static_cast (log_record.priority ()), + MSG_BAND); +#else + // We're running over sockets, so send header and payload + // efficiently using "gather-write". + return this->message_queue_.sendv_n (iov, 2); +#endif /* ACE_HAS_STREAM_PIPES */ +} + +ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/Log_Msg_IPC.h b/ACE/ace/Log_Msg_IPC.h new file mode 100644 index 00000000000..8b39b9ec551 --- /dev/null +++ b/ACE/ace/Log_Msg_IPC.h @@ -0,0 +1,79 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Log_Msg_IPC.h + * + * $Id$ + * + * @author Carlos O'Ryan + */ +//============================================================================= + +#ifndef ACE_LOG_MSG_LOGGER_H +#define ACE_LOG_MSG_LOGGER_H +#include /**/ "ace/pre.h" + +#include "ace/Log_Msg_Backend.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +// IPC conduit between sender and client daemon. This should be +// included in the ACE_Log_Msg class, but due to "order of include" +// problems it can't be... +#if defined (ACE_HAS_STREAM_PIPES) +# include "ace/SPIPE_Connector.h" +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef ACE_SPIPE_Stream ACE_LOG_MSG_IPC_STREAM; +typedef ACE_SPIPE_Connector ACE_LOG_MSG_IPC_CONNECTOR; +typedef ACE_SPIPE_Addr ACE_LOG_MSG_IPC_ADDR; +ACE_END_VERSIONED_NAMESPACE_DECL +#else +# include "ace/SOCK_Connector.h" +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +typedef ACE_SOCK_Stream ACE_LOG_MSG_IPC_STREAM; +typedef ACE_SOCK_Connector ACE_LOG_MSG_IPC_CONNECTOR; +typedef ACE_INET_Addr ACE_LOG_MSG_IPC_ADDR; +ACE_END_VERSIONED_NAMESPACE_DECL +#endif /* ACE_HAS_STREAM_PIPES */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/// Defines the interfaces for ACE_Log_Msg backend. +/** + * Implement an ACE_Log_Msg_Backend that logs to a remote logging + * process. + */ +class ACE_Export ACE_Log_Msg_IPC : public ACE_Log_Msg_Backend +{ +public: + /// Constructor + ACE_Log_Msg_IPC (void); + + /// Destructor + virtual ~ACE_Log_Msg_IPC (void); + + /// Open a new connection + virtual int open (const ACE_TCHAR *logger_key); + + /** + * Reset the backend. When changing the logging destination the + * backend may need to properly disconnect from the remote logging + * daemon and reclaim some local resources. But we try to reduce + * the number of local allocations/deallocations. + */ + virtual int reset (void); + + virtual int close (void); + virtual ssize_t log (ACE_Log_Record &log_record); + +private: + ACE_LOG_MSG_IPC_STREAM message_queue_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" +#endif /* ACE_LOG_MSG_H */ diff --git a/ACE/ace/Log_Msg_NT_Event_Log.cpp b/ACE/ace/Log_Msg_NT_Event_Log.cpp new file mode 100644 index 00000000000..e22170c01dc --- /dev/null +++ b/ACE/ace/Log_Msg_NT_Event_Log.cpp @@ -0,0 +1,162 @@ +// $Id$ + +#include "ace/config-all.h" + +#if defined (ACE_HAS_LOG_MSG_NT_EVENT_LOG) + +#include "ace/Log_Msg_NT_Event_Log.h" +#include "ace/Log_Msg.h" +#include "ace/Log_Record.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_string.h" + +ACE_RCSID(ace, Log_Msg_NT_Event_Log, "$Id$") + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Log_Msg_NT_Event_Log::ACE_Log_Msg_NT_Event_Log (void) + : evlog_handle_(0) +{ +} + +ACE_Log_Msg_NT_Event_Log::~ACE_Log_Msg_NT_Event_Log (void) +{ + this->close (); +} + +int +ACE_Log_Msg_NT_Event_Log::open (const ACE_TCHAR *logger_key) +{ + // ACE's "resource module" contains the message resource required + // for event logging. + ACE_TCHAR msg_file [MAXPATHLEN]; + + if (!ACE_TEXT_GetModuleFileName (ACE_OS::get_win32_resource_module (), + msg_file, + MAXPATHLEN)) + return -1; + DWORD msg_file_length = + static_cast ((ACE_OS::strlen (msg_file) + 1) * sizeof (ACE_TCHAR)); + + // If a logger_key has been supplied then we use that as the event + // source name, otherwise we default to the program name. + const ACE_TCHAR *event_source_name = logger_key ? logger_key : ACE_Log_Msg::program_name (); + + // Information is stored in the registry at a location based on the + // program name. + ACE_TCHAR reg_key [MAXPATHLEN]; + ACE_OS::strcpy (reg_key, + ACE_TEXT ("SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\")); + size_t reg_key_length = ACE_OS::strlen(reg_key); + ACE_OS::strncat (reg_key, + event_source_name, + MAXPATHLEN - reg_key_length); + + // Add the event source to the registry. Note that if this fails it + // is not fatal. The application will still be able to write entries + // to the event log, they just won't be formatted correctly. + HKEY hkey; + ACE_TEXT_RegCreateKey (HKEY_LOCAL_MACHINE, + reg_key, + &hkey); + DWORD flags = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE; + ACE_TEXT_RegSetValueEx (hkey, + ACE_TEXT ("TypesSupported"), + 0, + REG_DWORD, + (LPBYTE) &flags, + sizeof (DWORD)); + ACE_TEXT_RegSetValueEx (hkey, + ACE_TEXT ("EventMessageFile"), + 0, + REG_SZ, + (LPBYTE) msg_file, + msg_file_length); + RegCloseKey (hkey); + + // Obtain a handle to the event source. + this->evlog_handle_ = ACE_TEXT_RegisterEventSource (0, + event_source_name); + return this->evlog_handle_ ? 0 : -1; +} + +int +ACE_Log_Msg_NT_Event_Log::reset (void) +{ + return this->close (); +} + +int +ACE_Log_Msg_NT_Event_Log::close (void) +{ + if (this->evlog_handle_ == 0 + || DeregisterEventSource (this->evlog_handle_)) + { + this->evlog_handle_ = 0; + return 0; + } + else + return -1; +} + +ssize_t +ACE_Log_Msg_NT_Event_Log::log (ACE_Log_Record &log_record) +{ + // Make a copy of the log text and replace any newlines with + // CR-LF. Newline characters on their own do not appear correctly in + // the event viewer. We allow for a doubling in the size of the msg + // data for the worst case of all newlines. + const ACE_TCHAR* src_msg_data = log_record.msg_data (); + ACE_TCHAR msg_data [ACE_Log_Record::MAXLOGMSGLEN * 2]; + + for (size_t i = 0, j = 0; + i < log_record.msg_data_len (); + ++i) + { + if (src_msg_data[i] == '\n') + { + msg_data[j++] = '\r'; + msg_data[j++] = '\n'; + } + else + msg_data[j++] = src_msg_data[i]; + } + + // Map the ACE log record type to an event log type. + WORD event_type; + switch (log_record.type ()) + { + case LM_STARTUP: + case LM_SHUTDOWN: + case LM_TRACE: + case LM_DEBUG: + case LM_INFO: + event_type = EVENTLOG_INFORMATION_TYPE; + break; + case LM_NOTICE: + case LM_WARNING: + event_type = EVENTLOG_WARNING_TYPE; + break; + case LM_ERROR: + case LM_CRITICAL: + case LM_ALERT: + case LM_EMERGENCY: + default: + event_type = EVENTLOG_ERROR_TYPE; + break; + } + + // Send the log message to the system event log. + const ACE_TCHAR* msgs [1]; + msgs[0] = msg_data; + + if (ACE_TEXT_ReportEvent (this->evlog_handle_, + event_type, 0, 0, 0, 1, 0, msgs, 0) == 0) + return -1; + else + return 0; +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_LOG_MSG_NT_EVENT_LOG */ diff --git a/ACE/ace/Log_Msg_NT_Event_Log.h b/ACE/ace/Log_Msg_NT_Event_Log.h new file mode 100644 index 00000000000..4bca6adaa20 --- /dev/null +++ b/ACE/ace/Log_Msg_NT_Event_Log.h @@ -0,0 +1,72 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Log_Msg_NT_Event_Log.h + * + * $Id$ + * + * @author Christopher Kohlhoff + */ +//============================================================================= + +#ifndef ACE_LOG_MSG_NT_EVENT_LOG_H +#define ACE_LOG_MSG_NT_EVENT_LOG_H +#include /**/ "ace/pre.h" + +#include /**/ "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#if defined ACE_HAS_LOG_MSG_NT_EVENT_LOG + +#include "ace/Log_Msg_Backend.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_Log_Msg_NT_Event_Log + * + * @brief Implements an ACE_Log_Msg_Backend that logs to the WinNT system + * event log. + */ +class ACE_Export ACE_Log_Msg_NT_Event_Log : public ACE_Log_Msg_Backend +{ +public: + /// Constructor + ACE_Log_Msg_NT_Event_Log (void); + + /// Destructor + virtual ~ACE_Log_Msg_NT_Event_Log (void); + + /// Open a new event log. + /** + * Initialize the event logging facility. + * @param logger_key The name of the calling program. This name is + * used in the Source field of the event log. If + * it is 0 (no name), the application name as + * returned from ACE_Log_Msg::program_name() is used. + */ + virtual int open (const ACE_TCHAR *logger_key); + + /// Reset the backend. + virtual int reset (void); + + /// Close the backend completely. + virtual int close (void); + + /// This is called when we want to log a message. + virtual ssize_t log (ACE_Log_Record &log_record); + +private: + HANDLE evlog_handle_; +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_LOG_MSG_NT_EVENT_LOG */ + +#include /**/ "ace/post.h" +#endif /* ACE_LOG_MSG_NT_EVENT_LOG_H */ diff --git a/ACE/ace/Log_Msg_UNIX_Syslog.cpp b/ACE/ace/Log_Msg_UNIX_Syslog.cpp new file mode 100644 index 00000000000..dba78bcd571 --- /dev/null +++ b/ACE/ace/Log_Msg_UNIX_Syslog.cpp @@ -0,0 +1,207 @@ +// $Id$ + +#include "ace/config-all.h" + +#if !defined (ACE_LACKS_UNIX_SYSLOG) + +#include "ace/ACE.h" +#include "ace/Log_Msg.h" +#include "ace/Log_Msg_UNIX_Syslog.h" +#include "ace/Log_Record.h" +#include "ace/OS_NS_string.h" +#include "ace/os_include/os_syslog.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +// NOTE: +// The ACE_Log_Msg_UNIX_Syslog class can use the openlog(), +// setlogmask(), syslog() and closelog() routines in a thread safe +// manner (versus using openlog_r(), et. al.), as the ACE_Log_Msg +// class uses the lock provided by its local ACE_Log_Msg_Manager +// class when calling the methods of the backend classes. As a +// result, logging semantics with respect to the UNIX syslog +// facility, will be the same for all threads in a process. This +// should not be too limiting, as the ACE_Log_Msg class itself can +// be used to control thread specific logging behavior. + +ACE_Log_Msg_UNIX_Syslog::ACE_Log_Msg_UNIX_Syslog (void) +{ +} + +ACE_Log_Msg_UNIX_Syslog::~ACE_Log_Msg_UNIX_Syslog (void) +{ + (void) this->close (); +} + +int +ACE_Log_Msg_UNIX_Syslog::open (const ACE_TCHAR * logger_key) +{ + if (logger_key == 0) + logger_key = ACE_Log_Msg::program_name (); + + // Initialize the UNIX syslog facility. Default the syslog log + // options LOG_CONS and LOG_PID to be set. There really should be a + // logging strategy option to control the syslog log options, + // however, we'll take the easy way out for now. +#if defined (ACE_USES_WCHAR) + openlog (ACE_TEXT_ALWAYS_CHAR (logger_key), + LOG_CONS|LOG_PID, + ACE_DEFAULT_SYSLOG_FACILITY); +#else + openlog (const_cast (logger_key), + LOG_CONS|LOG_PID, + ACE_DEFAULT_SYSLOG_FACILITY); +#endif /* ACE_USES_WCHAR */ + + // Enable logging of all syslog priorities. If logging of all + // priorities is not desired, use the ACE_Log_Msg::priority_mask() + // method to control the log output sent to the syslog daemon via + // the log() method, or use the system's syslog.conf file to select + // desired level of information. + +#if !defined (ACE_LACKS_SETLOGMASK) + (void) setlogmask (LOG_UPTO (LOG_DEBUG)); +#endif /* ACE_LACKS_SETLOGMASK */ + + return 0; +} + +int +ACE_Log_Msg_UNIX_Syslog::reset (void) +{ + return this->close (); +} + +int +ACE_Log_Msg_UNIX_Syslog::close (void) +{ + closelog(); + return 0; +} + +ssize_t +ACE_Log_Msg_UNIX_Syslog::log (ACE_Log_Record &log_record) +{ + int syslog_priority = this->convert_log_priority (log_record.type ()); + u_long flags = ACE_LOG_MSG->flags (); + + // The UNIX syslog() facility does not support multi-line messages. + // Break up the message data into separate lines and send each line + // to the syslog daemon. + + ACE_TCHAR message[ACE_Log_Record::MAXVERBOSELOGMSGLEN]; + ACE_OS::strcpy (message, log_record.msg_data ()); + ACE_TCHAR *strtokp = 0; + + for (ACE_TCHAR *line = ACE_OS::strtok_r (message, + ACE_TEXT ("\n"), + &strtokp); + line != 0; + line = ACE_OS::strtok_r (0, + ACE_TEXT ("\n"), + &strtokp)) + { + // Format the message line. Note that the processing for + // VERBOSE is the same as for VERBOSE_LITE, since syslog() + // already provides us with the hostname and PID. However, the + // timestamp is duplicated (albeit a shortened version) to + // provide a timestamp with greater precision than that provided + // by syslog(). + if (ACE_BIT_ENABLED (flags, ACE_Log_Msg::VERBOSE) + || ACE_BIT_ENABLED (flags, ACE_Log_Msg::VERBOSE_LITE)) + { + ACE_TCHAR date_and_time[35]; + if (0 == ACE::timestamp (date_and_time, sizeof (date_and_time), 1)) + ACE_OS::strcpy (date_and_time, ACE_TEXT ("